GMTSAR_V5.7/000755 015705 000000 00000000000 13507242234 013543 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/GNUmakefile000644 015705 000000 00000003060 13505462013 015611 0ustar00sandwellwheel000000 000000 #------------------------------------------------------------------------------- # $Id: GNUmakefile 210 2015-08-07 15:46:10Z pwessel $ # # makefile for top GMTSAR directory # # !!! THIS MAKEFILE IS GMTSAR GMT DEVELOPERS ONLY !!! # # This makefile extends the regular Makefile by adding # targets to build tarballs, get latest GNU config files. # # Date: 27-JAN-2013 #------------------------------------------------------------------------------- include Makefile # Where to place the gmtsar tarball #FTPDIR = /topex/ftp/pub/gmtsar FTPDIR = .. create: # We make the $(PACKAGE_TARNAME)-$(GMTSAR_VERSION) link from scratch each time cd ..; rm -f $(PACKAGE_TARNAME)-$(GMTSAR_VERSION); $(LN_S) $(notdir $(PWD)) $(PACKAGE_TARNAME)-$(GMTSAR_VERSION) tar: distro distro: create $(MAKE) spotless find . -type l -exec rm -f {} \; COPYFILE_DISABLE=true $(GNUTAR) --owner 0 --group 0 --mode a=rX,u=rwX -cjhvf $(FTPDIR)/$(PACKAGE_TARNAME)-$(GMTSAR_VERSION)-src.tar.bz2 \ -C .. $(PACKAGE_TARNAME)-$(GMTSAR_VERSION) --exclude GNUmakefile --exclude .svn rm -f $(PACKAGE_TARNAME)-$(GMTSAR_VERSION) latest-config: curl "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD" -s -R -o config.sub curl "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD" -s -R -o config.guess curl "http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_blas.m4" -s -R -o ax_blas.m4 curl "http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_lapack.m4" -s -R -o ax_lapack.m4 GMTSAR_V5.7/README.CMake000644 015705 000000 00000002527 13505462014 015406 0ustar00sandwellwheel000000 000000 //// $Id: README.CMake 375 2016-08-13 20:20:24Z fwobbe $ //// Information for building GMTSAR with CMake ------------------------------------------ Quick start: ~~~~~~~~~~~~ Checkout GMTSAR from its subversion repository: $ svn co svn://gmtserver.soest.hawaii.edu/GMTSAR/trunk gmtsar-dev $ cd gmtsar-dev $ mkdir build $ cd build $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=RelWithDebInfo .. $ make -j $ make -j install Invoking CMake: ~~~~~~~~~~~~~~~ CMake supports out-of-source builds and puts generated files in a completely separate directory, so that the source tree is unchanged. Trying to run CMake in the source tree will result in an error. CMake will first check for the minimal required version and then search for required and optional libraries (GMT, TIFF, LAPACK) in the default locations. The configuration step will fail if dependencies are not met. Updating: ~~~~~~~~~ Assuming you did not delete the build directory and that your current working directory is the build directory this is just as simple as $ cd .. $ svn up $ cd - $ make -jx install CMake will detect any changes to the source files and will automatically reconfigure. If you deleted all files inside the build directory you have to run cmake again manually. //// vim: ft=asciidoc tw=78 et ts=2 sts=2 sw=2 autoindent smartindent //// GMTSAR_V5.7/install-sh000755 015705 000000 00000022017 13505462014 015547 0ustar00sandwellwheel000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2004-12-17.09 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: GMTSAR_V5.7/configure.ac000644 015705 000000 00000035527 13505462014 016043 0ustar00sandwellwheel000000 000000 dnl ----------------------------------------------------------------- dnl $Id: configure.ac 228 2015-08-12 00:37:33Z pwessel $ dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; version 2 of the License. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl Contact info: David Sandwell, Scripps IO, dsandwell@ucsd.edu dnl ------------------------------------------------------------------ dnl dnl Run GNU autoconf to produce a configure script from this input. dnl ------------------------------------------------------------------ dnl dnl ------------------------------------------------------------------ dnl Since GMTSAR requires GMT executables version >= 5 we insist GMT dnl executables must be in the current path; otherwise abort. dnl dnl We also need to gather the following information dnl 1. Location of GMT include and library files dnl 2. Location of ORBITS directory dnl ------------------------------------------------------------------ dnl AC_INIT(GMTSAR, 5.5.0, gmtsar-l@ucsd.edu) dnl dnl ------------------------------------------------------------------ dnl The remainder should need no editing dnl ------------------------------------------------------------------ dnl m4_include([ax_lapack.m4]) m4_include([ax_blas.m4]) m4_include([ax_lib_hdf5.m4]) AC_CONFIG_SRCDIR(gmtsar/xcorr.c) AC_CONFIG_AUX_DIR(`pwd`) AC_CYGWIN AC_CANONICAL_SYSTEM AC_LANG_C AC_PROG_CC AC_PROG_CPP AC_PREFIX_DEFAULT(`pwd`) AC_PATH_XTRA dnl dnl ------------------------------------------------------------------ dnl GMTSAR-specific make macros dnl ------------------------------------------------------------------ dnl AC_SUBST(ORBITS_DIR) AC_SUBST(LALIBS) AC_SUBST(CFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(HDF5_CPPFLAGS) AC_SUBST(HDF5_LDFLAGS) AC_SUBST(HDF5_LIBS) AC_SUBST(LD_OPT) AC_SUBST(LDFLAGS) AC_SUBST(GMT_LIB) AC_SUBST(GMT_INC) AC_SUBST(TIFF_LIB) AC_SUBST(TIFF_INC) AC_SUBST(LIBS) AC_SUBST(LIBEXT) AC_SUBST(SL) AC_SUBST(SL_VERSION) AC_SUBST(MT) AC_SUBST(exec_prefix) AC_SUBST(prefix) AC_SUBST(rootdir) AC_SUBST(bindir) AC_SUBST(GMTSAR_VERSION) dnl dnl ------------------------------------------------------------------ dnl Special configure options for GMTSAR installation dnl ------------------------------------------------------------------ dnl AC_ARG_WITH(orbits_dir, [ --with-orbits-dir= Full path to ORBITS directory[[auto]]], [], [with_orbits_dir=no]) AC_ARG_WITH(tiff_include, [ --with-tiff-include= Full path to tiff include directory [[auto]]]) AC_ARG_WITH(tiff_lib, [ --with-tiff-lib= Full path to tiff lib directory [[auto]]]) AC_ARG_WITH(gmt_config, [ --with-gmt-config= Full path to gmt-config [[auto]]]) AC_ARG_ENABLE(debug, [ --enable-debug Compile for debugging instead of optimizing code]) AC_ARG_ENABLE(rpath, [ --disable-rpath Do not hardcode runtime library paths]) AC_ARG_ENABLE(shared, [ --enable-shared Build shared (dynamic) GMTSAR libraries instead of static]) AC_ARG_VAR(GMT_INC,Location of GMT headers (compile-time)) AC_ARG_VAR(GMT_LIB,Location of GMT library (compile-time)) dnl dnl ------------------------------------------------------------------ dnl Check for ar, csh/bash, ld, awk, and ranlib dnl ------------------------------------------------------------------ dnl AC_CHECK_PROG(GMT_in_path, gmtvector, 1, 0) if test "$GMT_in_path" = "X0" ; then AC_MSG_RESULT(GMT v5 or later executables are not in your path - aborting) exit 1 fi AC_CHECK_PROGS(PAGER, less more, cat) AC_CHECK_PROG(AR, ar, ar, :) AC_CHECK_PROG(CSH, csh, csh, bash, ) AC_CHECK_PROG(LD, ld, ld, :) AC_CHECK_PROG(GNUTAR, gnutar, gnutar, :) AC_PROG_LN_S AC_PROG_INSTALL AC_PROG_AWK AC_PROG_RANLIB dnl dnl ------------------------------------------------------------------ dnl Get current OS and chip type and set LAPACK dnl ------------------------------------------------------------------ dnl os=`uname -s` AC_MSG_CHECKING(for LAPACK library) if test "X$os" = "XDarwin" ; then MT="-mt" osr=`uname -r | cut -d. -f1` LALIBS="-framework Accelerate" else MT="" AX_LAPACK LALIBS="$LAPACK_LIBS $BLAS_LIBS" fi AC_MSG_RESULT($LALIBS) chip=`uname -p` Sun_rev=`uname -r | grep '^5.'` rootdir=`pwd` dnl dnl ------------------------------------------------------------------ dnl Check for libraries. Most installs will need to have dnl -lm but under OS X it is not needed. Thus, we look dnl for sin in -lm which should set -lm on most platforms. dnl ------------------------------------------------------------------ dnl AC_SEARCH_LIBS(sin, m) dnl dnl ------------------------------------------------------------------ dnl Set path to Orbits directory with --with-orbits=dir dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(for ORBITS directory) if test "X$with_orbits_dir" = "Xyes"; then ORBITS_DIR=$rootdir AC_MSG_RESULT([Not specified, default to $ORBITS_DIR]) elif test "X$with_orbits_dir" = "Xno"; then ORBITS_DIR=$rootdir AC_MSG_RESULT([Not specified, default to $ORBITS_DIR]) else ORBITS_DIR=$with_orbits_dir AC_MSG_RESULT($ORBITS_DIR) fi dnl dnl ------------------------------------------------------------------ dnl Set the HDF5 include and lib stuff dnl ------------------------------------------------------------------ AX_LIB_HDF5() HDF5_LIBS="$HDF5_LIBS -lhdf5_cpp" # Add the C++ library AC_MSG_CHECKING(for HDF5 include) AC_MSG_RESULT($HDF5_CPPFLAGS) AC_MSG_CHECKING(for HDF5 libs) AC_MSG_RESULT([$HDF5_LDFLAGS $HDF5_LIBS]) dnl dnl ------------------------------------------------------------------ dnl Set path to tiff directories with --with-tiff=include|lib dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(for TIFF include directory) if test "X$with_TIFF_include" = "X"; then # Must look for it in standard places if [ test -d /sw/include ]; then # fink TIFF_INC=/sw/include elif [ test -d /opt/local/include ]; then # macports TIFF_INC=/opt/local/include elif [ test -d /usr/local/include ]; then TIFF_INC=/usr/local/include elif [ test -d /usr/include ]; then # Ubuntu TIFF_INC=/usr/include elif [ test -d /opt/csw/include ]; then # Blastwave TIFF_INC=/opt/csw/include elif [ test -d /opt/include ]; then TIFF_INC=/opt/include fi else TIFF_INC=$with_tiff_include fi AC_MSG_RESULT($TIFF_INC) AC_MSG_CHECKING(for TIFF library directory) if test "X$with_tiff_lib" = "X"; then # Must look for it in standard places if [ test -d /sw/include ]; then # fink TIFF_LIB=/sw/lib elif [ test -d /opt/local/include ]; then # macports TIFF_LIB=/opt/local/lib elif [ test -d /usr/local/include ]; then TIFF_LIB=/usr/local/lib elif [ test -d /usr/include ]; then # Ubuntu TIFF_LIB=/usr/lib/x86_64-linux-gnu elif [ test -d /opt/csw/include ]; then # Blastwave TIFF_LIB=/opt/csw/lib elif [ test -d /opt/include ]; then TIFF_LIB=/opt/lib fi else TIFF_LIB=$with_tiff_lib/lib fi AC_MSG_RESULT($TIFF_LIB) dnl dnl ------------------------------------------------------------------ dnl Set path to tiff directories with --with-tiff=include|lib dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(for TIFF include directory) if [ test -d /sw/include ]; then # fink TIFF_INC=/sw/include elif [ test -d /opt/local/include ]; then # macports TIFF_INC=/opt/local/include elif [ test -d /usr/local/include ]; then TIFF_INC=/usr/local/include elif [ test -d /usr/include ]; then # Ubuntu TIFF_INC=/usr/include elif [ test -d /opt/csw/include ]; then # Blastwave TIFF_INC=/opt/csw/include elif [ test -d /opt/include ]; then TIFF_INC=/opt/include fi AC_MSG_RESULT($TIFF_INC) AC_MSG_CHECKING(for TIFF library directory) if test "X$with_tiff_lib" = "X"; then # Must look for it in standard places if [ test -d /sw/include ]; then # fink TIFF_LIB=/sw/lib elif [ test -d /opt/local/include ]; then # macports TIFF_LIB=/opt/local/lib elif [ test -d /usr/local/include ]; then TIFF_LIB=/usr/local/lib elif [ test -d /usr/include ]; then # Ubuntu TIFF_LIB=/usr/lib/x86_64-linux-gnu elif [ test -d /opt/csw/include ]; then # Blastwave TIFF_LIB=/opt/csw/lib elif [ test -d /opt/include ]; then TIFF_LIB=/opt/lib fi else TIFF_LIB=$with_tiff_lib/lib fi AC_MSG_RESULT($TIFF_LIB) dnl dnl dnl ------------------------------------------------------------------ dnl We use gmt-config to set GMT paths and settings dnl ------------------------------------------------------------------ dnl if test "X$with_gmt_config" != "Xno" ; then AC_PATH_PROG([GMT_CONF], [gmt-config], [$with_gmt_config]) fi if test -x "$GMT_CONF" && test "X$GMT_INC" = "X" && test "X$GMT_LIB" = "X" ; then AC_MSG_CHECKING(for GMT includes) GMT_INC=`$GMT_CONF --cflags` AC_MSG_RESULT($GMT_INC) AC_MSG_CHECKING(for GMT libs) GMT_LIB=`$GMT_CONF --libs` AC_MSG_RESULT($GMT_LIB) GMT_LIB_PATH=`echo $GMT_LIB | sed 's/^-L//;s/\ .*//'` rpath="$GMT_LIB_PATH" AC_MSG_CHECKING(for 32/64-bit GMT installation) bits=`$GMT_CONF --bits` GCC_64="-m${bits}" LDFLAGS="$LDFLAGS -m${bits}" AC_MSG_RESULT(found ${bits}-bit) fi dnl dnl ------------------------------------------------------------------ dnl Allow user to set --enable-debug to pass -g flag dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(if we should compile with debugging switch -g) CFLAGS=$ac_save_CFLAGS CXXFLAGS=$ac_save_CXXFLAGS if test "X$enable_debug" = "Xyes" ; then AC_MSG_RESULT(yes) CFLAGS="$CFLAGS -g" CXXFLAGS="$CXXFLAGS -g" else CFLAGS=`echo $CFLAGS | sed 's/-g//'` CXXFLAGS=`echo $CXXFLAGS | sed 's/-g//'` if test "$os" = "Darwin" ; then LDFLAGS="$LDFLAGS -Wl,-x" else LDFLAGS="$LDFLAGS -s" fi if test "$GCC" = "yes" || test "$os" = "Linux" || test "$os" = "AIX"; then CFLAGS="$CFLAGS -O2" CXXFLAGS="$CXXFLAGS -O2" elif test "$chip" = "alpha" || test "$os" = "AUX" || test "$os" = "HP-UX"; then CFLAGS="$CFLAGS" else CFLAGS="$CFLAGS -O" CXXFLAGS="$CXXFLAGS -O" fi AC_MSG_RESULT(no) fi dnl dnl ------------------------------------------------------------------ dnl Determine LD_OPT for this platform dnl ------------------------------------------------------------------ dnl shared_unknown=no LD_OPT= LD=ld SL=so LIBEXT='$(SL)' SL_VERSION='$(SL)' if test "X$enable_shared" = "Xyes" ; then AC_MSG_CHECKING(how to make a shared object) if test "X$CYGWIN" = "Xyes" ; then SL=dll.a SL_VERSION=$LIB_MAJOR_VERSION.$SL LD='$(CC)' LD_OPT="-shared" elif test "$os" = "SunOS" ; then if test "$Sun_rev" = "" ; then # SunOS LD_OPT="-Bdynamic" else # Solaris LD_OPT="-G" fi elif test "$os" = "Linux" || test "$os" = "GNU/kFreeBSD" ; then # Need optimization when doing shared LD='$(CC)' SL_VERSION=$SL.$LIB_MAJOR_VERSION LD_OPT='-shared -Wl,-soname=$*.'$SL_VERSION elif test "$os" = "FreeBSD" || test "$os" = "NetBSD" ; then SL_VERSION=$SL.$LIB_MAJOR_VERSION LD_OPT='-shared -Wl,-soname=$*.'$SL_VERSION elif test "$os" = "OSF1" ; then LD_OPT='-shared -expect_unresolved "*"' elif test "$os" = "IRIX64" ; then LD_OPT="-shared" # Need to remove -L/usr/lib to avoid mixing o32 and n32 X_LIBS= elif test "$os" = "Darwin" ; then # MacOS X SL=dylib SL_VERSION=$LIB_MAJOR_VERSION.$SL LD='$(CC)' LD_OPT='-install_name ${prefix}/lib/$*.'$SL_VERSION' -compatibility_version 4.0.0 -current_version '$LIB_VERSION' -dynamiclib '$OSX_L if test $osr -eq 8 ; then # Tiger needs special option for shared libs CFLAGS="$CFLAGS -fno-common" fi elif test "$os" = "HP-UX" ; then LD_OPT="-b" SL=sl else # Not yet implemented AC_MSG_RESULT(not supported for GMTSAR under $os - building static libs instead) enable_shared=no shared_unknown=yes fi fi if test "X$enable_shared" = "Xyes" ; then rpath="$rpath"':$(libdir)' AC_MSG_RESULT($LD $LD_OPT) AC_MSG_CHECKING(the file extension for shared libraries) AC_MSG_RESULT($SL) else LIBEXT='a' fi dnl dnl ------------------------------------------------------------------ dnl Determine LDFLAGS for this platform dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(linker options) flag= if test "X$enable_rpath" = "Xno" ; then flag= elif test "$os" = "SunOS" ; then if test "$Sun_rev" = "" ; then flag="-L" else flag="-R," fi elif test "$os" = "Linux" || test "$os" = "FreeBSD" || test "$os" = "NetBSD" || test "$os" = "OSF1" || test "$os" = "IRIX64" ; then flag="-rpath," elif test "$os" = "HP-UX" ; then flag="+b," fi if test "X$flag" != "X" ; then LDFLAGS="$LDFLAGS -Wl,$flag$rpath" fi AC_MSG_RESULT($LDFLAGS) dnl dnl ------------------------------------------------------------------ dnl Determine CFLAGS for this platform dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(C compiler options for GMTSAR) if test "$GCC" = "yes"; then # GNU cc options if test "$chip" = "alpha" ; then # Alpha PC CFLAGS="$CFLAGS -mieee -Wall $GCC_64" CXXFLAGS="$CXXFLAGS -mieee -Wall $GCC_64" else # MacOSX, Linux, ... CFLAGS="$CFLAGS -Wall $GCC_64" CXXFLAGS="$CXXFLAGS -Wall $GCC_64" fi CFLAGS="$CFLAGS -fPIC -fno-strict-aliasing -std=c99" CXXFLAGS="$CXXFLAGS -fPIC" elif test "$os" = "SunOS" ; then # Sun Workshop CC options CFLAGS="$CFLAGS -Xc" elif test "$os" = "HP-UX" ; then # HP cc options CFLAGS="$CFLAGS -Aa +Ofltacc +O1 +Olibcalls" if test "$enable_shared" = "yes" ; then CFLAGS="$CFLAGS +z" fi elif test "$os" = "OSF1" ; then # Dec Alpha OSF cc options CFLAGS="$CFLAGS -Olimit 1500 -ieee_with_inexact" elif test "$os" = "ULTRIX" ; then # Dec Ultrix cc options CFLAGS="$CFLAGS -Olimit 1500" fi AC_MSG_RESULT($CFLAGS) dnl dnl ------------------------------------------------------------------ dnl Determine CPPFLAGS for this platform dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(compiler preprocessor flags for GMTSAR) if test "$os" = "AUX" ; then # Apple A/UX cc options CPPFLAGS="$CPPFLAGS -Daux" fi AC_MSG_RESULT($CPPFLAGS) dnl dnl ------------------------------------------------------------------ dnl Check if we have GNU make. If not, add CPPFLAGS to CFLAGS dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(if CPPFLAGS need to be added to CFLAGS) ${MAKE:-make} -p -f /dev/null 2>&1 | grep CPPFLAGS > /dev/null if test "$?" = "0" ; then AC_MSG_RESULT(no) else CFLAGS="$CFLAGS "'$(CPPFLAGS)' AC_MSG_RESULT(yes) fi GMTSAR_VERSION=AC_PACKAGE_VERSION dnl dnl ------------------------------------------------------------------ dnl Update Make macros and preprocess scripts that need the orbits dir dnl ------------------------------------------------------------------ dnl AC_OUTPUT(config.mk preproc/ENVI_preproc/scripts/ENVI_pre_process preproc/ENVI_preproc/scripts/ENVI_SLC_pre_process preproc/ERS_preproc/scripts/ERS_pre_process gmtsar/csh/gmtsar_sharedir.csh) dnl GMTSAR_V5.7/.svn/000755 015705 000000 00000000000 13505462012 014423 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/CMakeLists.txt000644 015705 000000 00000005032 13505462014 016301 0ustar00sandwellwheel000000 000000 # # $Id: CMakeLists.txt 380 2016-08-14 06:42:31Z fwobbe $ # # To modify the cmake process: Edit your cmake/ConfigUser.cmake file # # To build out-of-source do (example): # # mkdir build # cd build # cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. # # CMAKE_BUILD_TYPE can be: empty, Debug, Release, RelWithDebInfo or MinSizeRel # # Make sure the user doesn't play dirty with symlinks get_filename_component (srcdir "${CMAKE_SOURCE_DIR}" REALPATH) get_filename_component (bindir "${CMAKE_BINARY_DIR}" REALPATH) # Disallow in-source builds if (${srcdir} STREQUAL ${bindir}) message(FATAL_ERROR "In-source builds are not allowed. " "Please create a directory and run cmake from there, passing the path " "to this source directory as the last argument. This process created " "the file `CMakeCache.txt' and the directory `CMakeFiles' in ${srcdir}. " "Please remove them.") endif (${srcdir} STREQUAL ${bindir}) # Define minimum CMake version required cmake_minimum_required (VERSION 2.8.5) # Use NEW behavior with newer CMake releases foreach(p CMP0025 # CMake 3.0: Compiler id for Apple Clang is now AppleClang ) if(POLICY ${p}) cmake_policy(SET ${p} NEW) endif() endforeach() # Define project name and language project (GMTSAR C) # Where to find our CMake modules (this variable is visible in subdirectories). set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/" CACHE INTERNAL "Location of our custom CMake modules." FORCE) # Include configuration options (default options and options overridden by user). include (ConfigCMake) # Find UNIX commands include (FindUnixCommands) find_program (SVN svn) find_program (GS gs gswin64) # Find dependent libraries find_package (GMT REQUIRED) find_package (TIFF REQUIRED) find_package (LAPACK REQUIRED) # check for math and POSIX functions include(ConfigureChecks) # Add subdirectories add_subdirectory (gmtsar) add_subdirectory (snaphu/src) add_subdirectory (preproc) # Configuration done message( "* Options:\n" "* GMT library : ${GMT_LIBRARY}\n" "* GMT include dir : ${GMT_INCLUDE_DIR}\n" "* TIFF library : ${TIFF_LIBRARY}\n" "* LAPACK library : ${LAPACK_LIBRARIES} ${LAPACK_lapack_LIBRARY}\n" "*\n" "* Locations:\n" "* Installing GMTSAR in : ${CMAKE_INSTALL_PREFIX}\n" ) # For debugging: print all set variables #get_cmake_property(_variableNames VARIABLES) #foreach (_variableName ${_variableNames}) # message(STATUS "${_variableName}=${${_variableName}}") #endforeach() # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/snaphu/000755 015705 000000 00000000000 13505462014 015037 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/cmake/000755 015705 000000 00000000000 13505462013 014620 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/Makefile000644 015705 000000 00000005625 13505462014 015211 0ustar00sandwellwheel000000 000000 # $Id: Makefile 236 2015-08-24 07:09:14Z pwessel $ # # makefile for top GMTSAR directory sinclude config.mk # Currently, S1A must happen before the CSK, TSZ, and RS2 builds due to dependencies via links # We will fix this so one can make anyting in any order # PREPROCESSORS = ALOS ERS S1A CSK TSX RS2 ENVI # DIRS = gmtsar snaphu/src ORBITS_URL = http://topex.ucsd.edu/gmtsar/tar/ORBITS.tar ORBITS = ORBITS.tar all: main preprocess help:: @grep '^#!' Makefile | cut -c3- #!----------------- MAKE HELP FOR GMTSAR----------------- #! #!make , where can be: #! #!all : Compile everything #!install : Compile & install everything #!clean : Clean up and remove objects and library files #!clean : Clean and remove configured files as well #! ------------- Additional Targets ------------- #!preprocess : Only compile the preprocesors #!main : Only compile the main programs #!install-preprocess : Only compile & install the preprocesors #!install-main : Only compile & install the main programs #!install-orbits : Obtain ORBITS.tar, prompt for directory, and install files #! preprocess: for d in $(PREPROCESSORS); do \ (cd preproc/$${d}_preproc; $(MAKE) all); \ done main: for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: install-main install-preproc install-preproc: for d in $(PREPROCESSORS); do \ (cd preproc/$${d}_preproc; $(MAKE) install); \ done $(INSTALL) preproc/ERS_preproc/scripts/virgin.PRM $(sharedir) $(INSTALL) preproc/ENVI_preproc/scripts/virgin_envisat.PRM $(sharedir) install-main: for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done $(INSTALL) -d $(sharedir) $(INSTALL) -d $(sharedir)/filters $(INSTALL) -d $(sharedir)/snaphu/config $(INSTALL) gmtsar/filters/[bfgsxy]* $(sharedir)/filters $(INSTALL) gmtsar/csh/snaphu.conf.* $(sharedir)/snaphu/config install-orbits: wget $(ORBITS_URL) 2>/dev/null || curl -O $(ORBITS_URL) @if [ -f $(ORBITS) ]; then \ read -p "==> Enter directory where the ORBITS subdirectory should be installed: " ORB_DIR ; \ mkdir -p $$ORB_DIR/ORBITS ; \ echo "Extracting orbits files into $$ORB_DIR/ORBITS"; \ tar xf $(ORBITS) -C$$ORB_DIR/ORBITS ; \ echo "Run configure --with-orbits-dir=$$ORB_DIR/ORBITS"; \ else \ echo "Unable to obtain $(ORBITS_URL) - Perhaps you have neither curl nor wget installed?"; \ fi uninstall: for d in $(DIRS) $(PREPROCESSORS); do \ (cd $$d; $(MAKE) uninstall); \ done rm -rf $(sharedir) clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done for d in $(PREPROCESSORS); do \ (cd preproc/$${d}_preproc; $(MAKE) clean); \ done spotless: for d in $(DIRS); do \ (cd $$d; $(MAKE) spotless); \ done for d in $(PREPROCESSORS); do \ (cd preproc/$${d}_preproc; $(MAKE) spotless); \ done rm -rf $(sharedir) bin share rm -rf config.log config.status config.mk configure autom4te.cache GMTSAR_V5.7/ax_lapack.m4000644 015705 000000 00000011660 13505462014 015732 0ustar00sandwellwheel000000 000000 # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_lapack.html # =========================================================================== # # SYNOPSIS # # AX_LAPACK([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro looks for a library that implements the LAPACK linear-algebra # interface (see http://www.netlib.org/lapack/). On success, it sets the # LAPACK_LIBS output variable to hold the requisite library linkages. # # To link with LAPACK, you should link with: # # $LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS # # in that order. BLAS_LIBS is the output variable of the AX_BLAS macro, # called automatically. FLIBS is the output variable of the # AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is # sometimes necessary in order to link with F77 libraries. Users will also # need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same # reason. # # The user may also use --with-lapack= in order to use some specific # LAPACK library . In order to link successfully, however, be aware # that you will probably need to use the same Fortran compiler (which can # be set via the F77 env. var.) as was used to compile the LAPACK and BLAS # libraries. # # ACTION-IF-FOUND is a list of shell commands to run if a LAPACK library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_LAPACK. # # LICENSE # # Copyright (c) 2009 Steven G. Johnson # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 7 AU_ALIAS([ACX_LAPACK], [AX_LAPACK]) AC_DEFUN([AX_LAPACK], [ AC_REQUIRE([AX_BLAS]) ax_lapack_ok=no AC_ARG_WITH(lapack, [AS_HELP_STRING([--with-lapack=], [use LAPACK library ])]) case $with_lapack in yes | "") ;; no) ax_lapack_ok=disable ;; -* | */* | *.a | *.so | *.so.* | *.o) LAPACK_LIBS="$with_lapack" ;; *) LAPACK_LIBS="-l$with_lapack" ;; esac # Get fortran linker name of LAPACK function to check for. AC_F77_FUNC(cheev) # We cannot use LAPACK if BLAS is not found if test "x$ax_blas_ok" != xyes; then ax_lapack_ok=noblas LAPACK_LIBS="" fi # First, check LAPACK_LIBS environment variable if test "x$LAPACK_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" AC_MSG_CHECKING([for $cheev in $LAPACK_LIBS]) AC_TRY_LINK_FUNC($cheev, [ax_lapack_ok=yes], [LAPACK_LIBS=""]) AC_MSG_RESULT($ax_lapack_ok) LIBS="$save_LIBS" if test $ax_lapack_ok = no; then LAPACK_LIBS="" fi fi # LAPACK linked to by default? (is sometimes included in BLAS lib) if test $ax_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS $BLAS_LIBS $FLIBS" AC_CHECK_FUNC($cheev, [ax_lapack_ok=yes]) LIBS="$save_LIBS" fi # Generic LAPACK library? for lapack in lapack lapack_rs6k; do if test $ax_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" AC_CHECK_LIB($lapack, $cheev, [ax_lapack_ok=yes; LAPACK_LIBS="-l$lapack"], [], [$FLIBS]) LIBS="$save_LIBS" fi done AC_SUBST(LAPACK_LIBS) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_lapack_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_LAPACK,1,[Define if you have LAPACK library.]),[$1]) : else ax_lapack_ok=no $2 fi ])dnl AX_LAPACK GMTSAR_V5.7/ax_blas.m4000644 015705 000000 00000017651 13505462013 015425 0ustar00sandwellwheel000000 000000 # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_blas.html # =========================================================================== # # SYNOPSIS # # AX_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro looks for a library that implements the BLAS linear-algebra # interface (see http://www.netlib.org/blas/). On success, it sets the # BLAS_LIBS output variable to hold the requisite library linkages. # # To link with BLAS, you should link with: # # $BLAS_LIBS $LIBS $FLIBS # # in that order. FLIBS is the output variable of the # AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is # sometimes necessary in order to link with F77 libraries. Users will also # need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same # reason. # # Many libraries are searched for, from ATLAS to CXML to ESSL. The user # may also use --with-blas= in order to use some specific BLAS # library . In order to link successfully, however, be aware that you # will probably need to use the same Fortran compiler (which can be set # via the F77 env. var.) as was used to compile the BLAS library. # # ACTION-IF-FOUND is a list of shell commands to run if a BLAS library is # found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is # not found. If ACTION-IF-FOUND is not specified, the default action will # define HAVE_BLAS. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 14 AU_ALIAS([ACX_BLAS], [AX_BLAS]) AC_DEFUN([AX_BLAS], [ AC_PREREQ(2.50) AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS]) AC_REQUIRE([AC_CANONICAL_HOST]) ax_blas_ok=no AC_ARG_WITH(blas, [AS_HELP_STRING([--with-blas=], [use BLAS library ])]) case $with_blas in yes | "") ;; no) ax_blas_ok=disable ;; -* | */* | *.a | *.so | *.so.* | *.o) BLAS_LIBS="$with_blas" ;; *) BLAS_LIBS="-l$with_blas" ;; esac # Get fortran linker names of BLAS functions to check for. AC_F77_FUNC(sgemm) AC_F77_FUNC(dgemm) ax_blas_save_LIBS="$LIBS" LIBS="$LIBS $FLIBS" # First, check BLAS_LIBS environment variable if test $ax_blas_ok = no; then if test "x$BLAS_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" AC_MSG_CHECKING([for $sgemm in $BLAS_LIBS]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes], [BLAS_LIBS=""]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi fi # BLAS linked to by default? (happens on some supercomputers) if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS" AC_MSG_CHECKING([if $sgemm is being linked in already]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi # BLAS in OpenBLAS library? (http://xianyi.github.com/OpenBLAS/) if test $ax_blas_ok = no; then AC_CHECK_LIB(openblas, $sgemm, [ax_blas_ok=yes BLAS_LIBS="-lopenblas"]) fi # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) if test $ax_blas_ok = no; then AC_CHECK_LIB(atlas, ATL_xerbla, [AC_CHECK_LIB(f77blas, $sgemm, [AC_CHECK_LIB(cblas, cblas_dgemm, [ax_blas_ok=yes BLAS_LIBS="-lcblas -lf77blas -latlas"], [], [-lf77blas -latlas])], [], [-latlas])]) fi # BLAS in PhiPACK libraries? (requires generic BLAS lib, too) if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [AC_CHECK_LIB(dgemm, $dgemm, [AC_CHECK_LIB(sgemm, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"], [], [-lblas])], [], [-lblas])]) fi # BLAS in Intel MKL library? if test $ax_blas_ok = no; then # MKL for gfortran if test x"$ac_cv_fc_compiler_gnu" = xyes; then # 64 bit if test $host_cpu = x86_64; then AC_CHECK_LIB(mkl_gf_lp64, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread"],, [-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread]) # 32 bit elif test $host_cpu = i686; then AC_CHECK_LIB(mkl_gf, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl_gf -lmkl_sequential -lmkl_core -lpthread"],, [-lmkl_gf -lmkl_sequential -lmkl_core -lpthread]) fi # MKL for other compilers (Intel, PGI, ...?) else # 64-bit if test $host_cpu = x86_64; then AC_CHECK_LIB(mkl_intel_lp64, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread"],, [-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread]) # 32-bit elif test $host_cpu = i686; then AC_CHECK_LIB(mkl_intel, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl_intel -lmkl_sequential -lmkl_core -lpthread"],, [-lmkl_intel -lmkl_sequential -lmkl_core -lpthread]) fi fi fi # Old versions of MKL if test $ax_blas_ok = no; then AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl -lguide -lpthread"],,[-lguide -lpthread]) fi # BLAS in Apple vecLib library? if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" AC_MSG_CHECKING([for $sgemm in -framework vecLib]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi # BLAS in Alpha CXML library? if test $ax_blas_ok = no; then AC_CHECK_LIB(cxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lcxml"]) fi # BLAS in Alpha DXML library? (now called CXML, see above) if test $ax_blas_ok = no; then AC_CHECK_LIB(dxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-ldxml"]) fi # BLAS in Sun Performance library? if test $ax_blas_ok = no; then if test "x$GCC" != xyes; then # only works with Sun CC AC_CHECK_LIB(sunmath, acosp, [AC_CHECK_LIB(sunperf, $sgemm, [BLAS_LIBS="-xlic_lib=sunperf -lsunmath" ax_blas_ok=yes],[],[-lsunmath])]) fi fi # BLAS in SCSL library? (SGI/Cray Scientific Library) if test $ax_blas_ok = no; then AC_CHECK_LIB(scs, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lscs"]) fi # BLAS in SGIMATH library? if test $ax_blas_ok = no; then AC_CHECK_LIB(complib.sgimath, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"]) fi # BLAS in IBM ESSL library? (requires generic BLAS lib, too) if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [AC_CHECK_LIB(essl, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lessl -lblas"], [], [-lblas $FLIBS])]) fi # Generic BLAS library? if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lblas"]) fi AC_SUBST(BLAS_LIBS) LIBS="$ax_blas_save_LIBS" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_blas_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_BLAS,1,[Define if you have a BLAS library.]),[$1]) : else ax_blas_ok=no $2 fi ])dnl AX_BLAS GMTSAR_V5.7/config.guess000644 015705 000000 00000124652 13505462013 016067 0ustar00sandwellwheel000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-07-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: GMTSAR_V5.7/preproc/000755 015705 000000 00000000000 13505462014 015213 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/ax_lib_hdf5.m4000644 015705 000000 00000025034 13505462013 016152 0ustar00sandwellwheel000000 000000 # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_lib_hdf5.html # =========================================================================== # # SYNOPSIS # # AX_LIB_HDF5([serial/parallel]) # # DESCRIPTION # # This macro provides tests of the availability of HDF5 library. # # The optional macro argument should be either 'serial' or 'parallel'. The # former only looks for serial HDF5 installations via h5cc. The latter # only looks for parallel HDF5 installations via h5pcc. If the optional # argument is omitted, serial installations will be preferred over # parallel ones. # # The macro adds a --with-hdf5 option accepting one of three values: # # no - do not check for the HDF5 library. # yes - do check for HDF5 library in standard locations. # path - complete path to the HDF5 helper script h5cc or h5pcc. # # If HDF5 is successfully found, this macro calls # # AC_SUBST(HDF5_VERSION) # AC_SUBST(HDF5_CC) # AC_SUBST(HDF5_CFLAGS) # AC_SUBST(HDF5_CPPFLAGS) # AC_SUBST(HDF5_LDFLAGS) # AC_SUBST(HDF5_LIBS) # AC_SUBST(HDF5_FC) # AC_SUBST(HDF5_FFLAGS) # AC_SUBST(HDF5_FLIBS) # AC_DEFINE(HAVE_HDF5) # # and sets with_hdf5="yes". Additionally, the macro sets # with_hdf5_fortran="yes" if a matching Fortran wrapper script is found. # Note that Autconf's Fortran support is not used to perform this check. # H5CC and H5FC will contain the appropriate serial or parallel HDF5 # wrapper script locations. # # If HDF5 is disabled or not found, this macros sets with_hdf5="no" and # with_hdf5_fortran="no". # # Your configuration script can test $with_hdf to take any further # actions. HDF5_{C,CPP,LD}FLAGS may be used when building with C or C++. # HDF5_F{FLAGS,LIBS} should be used when building Fortran applications. # # To use the macro, one would code one of the following in "configure.ac" # before AC_OUTPUT: # # 1) dnl Check for HDF5 support # AX_LIB_HDF5() # # 2) dnl Check for serial HDF5 support # AX_LIB_HDF5([serial]) # # 3) dnl Check for parallel HDF5 support # AX_LIB_HDF5([parallel]) # # One could test $with_hdf5 for the outcome or display it as follows # # echo "HDF5 support: $with_hdf5" # # You could also for example, override the default CC in "configure.ac" to # enforce compilation with the compiler that HDF5 uses: # # AX_LIB_HDF5([parallel]) # if test "$with_hdf5" = "yes"; then # CC="$HDF5_CC" # else # AC_MSG_ERROR([Unable to find HDF5, we need parallel HDF5.]) # fi # # LICENSE # # Copyright (c) 2009 Timothy Brown # Copyright (c) 2010 Rhys Ulerich # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 11 AC_DEFUN([AX_LIB_HDF5], [ AC_REQUIRE([AC_PROG_SED]) AC_REQUIRE([AC_PROG_AWK]) AC_REQUIRE([AC_PROG_GREP]) dnl Check first argument is one of the recognized values. dnl Fail eagerly if is incorrect as this simplifies case statements below. if test "m4_normalize(m4_default([$1],[]))" = "" ; then : # Recognized value elif test "m4_normalize(m4_default([$1],[]))" = "serial" ; then : # Recognized value elif test "m4_normalize(m4_default([$1],[]))" = "parallel"; then : # Recognized value else AC_MSG_ERROR([ Unrecognized value for AX[]_LIB_HDF5 within configure.ac. If supplied, argument 1 must be either 'serial' or 'parallel'. ]) fi dnl Add a default --with-hdf5 configuration option. AC_ARG_WITH([hdf5], AS_HELP_STRING( [--with-hdf5=[yes/no/PATH]], m4_case(m4_normalize([$1]), [serial], [location of h5cc for serial HDF5 configuration], [parallel], [location of h5pcc for parallel HDF5 configuration], [location of h5cc or h5pcc for HDF5 configuration]) ), [if test "$withval" = "no"; then with_hdf5="no" elif test "$withval" = "yes"; then with_hdf5="yes" else with_hdf5="yes" H5CC="$withval" fi], [with_hdf5="yes"] ) dnl Set defaults to blank HDF5_CC="" HDF5_VERSION="" HDF5_CFLAGS="" HDF5_CPPFLAGS="" HDF5_LDFLAGS="" HDF5_LIBS="" HDF5_FC="" HDF5_FFLAGS="" HDF5_FLIBS="" dnl Try and find hdf5 compiler tools and options. if test "$with_hdf5" = "yes"; then if test -z "$H5CC"; then dnl Check to see if H5CC is in the path. AC_PATH_PROGS( [H5CC], m4_case(m4_normalize([$1]), [serial], [h5cc], [parallel], [h5pcc], [h5cc h5pcc]), []) else AC_MSG_CHECKING([Using provided HDF5 C wrapper]) AC_MSG_RESULT([$H5CC]) fi AC_MSG_CHECKING([for HDF5 libraries]) if test ! -f "$H5CC" || test ! -x "$H5CC"; then AC_MSG_RESULT([no]) AC_MSG_WARN(m4_case(m4_normalize([$1]), [serial], [ Unable to locate serial HDF5 compilation helper script 'h5cc'. Please specify --with-hdf5= as the full path to h5cc. HDF5 support is being disabled (equivalent to --with-hdf5=no). ], [parallel],[ Unable to locate parallel HDF5 compilation helper script 'h5pcc'. Please specify --with-hdf5= as the full path to h5pcc. HDF5 support is being disabled (equivalent to --with-hdf5=no). ], [ Unable to locate HDF5 compilation helper scripts 'h5cc' or 'h5pcc'. Please specify --with-hdf5= as the full path to h5cc or h5pcc. HDF5 support is being disabled (equivalent to --with-hdf5=no). ])) with_hdf5="no" with_hdf5_fortran="no" else dnl Get the h5cc output HDF5_SHOW=$(eval $H5CC -show) dnl Get the actual compiler used HDF5_CC=$(eval $H5CC -show | $AWK '{print $[]1}') if test "$HDF5_CC" = "ccache"; then HDF5_CC=$(eval $H5CC -show | $AWK '{print $[]2}') fi dnl h5cc provides both AM_ and non-AM_ options dnl depending on how it was compiled either one of dnl these are empty. Lets roll them both into one. dnl Look for "HDF5 Version: X.Y.Z" HDF5_VERSION=$(eval $H5CC -showconfig | $GREP 'HDF5 Version:' \ | $AWK '{print $[]3}') dnl A ideal situation would be where everything we needed was dnl in the AM_* variables. However most systems are not like this dnl and seem to have the values in the non-AM variables. dnl dnl We try the following to find the flags: dnl (1) Look for "NAME:" tags dnl (2) Look for "H5_NAME:" tags dnl (3) Look for "AM_NAME:" tags dnl HDF5_tmp_flags=$(eval $H5CC -showconfig \ | $GREP 'FLAGS\|Extra libraries:' \ | $AWK -F: '{printf("%s "), $[]2}' ) dnl Find the installation directory and append include/ HDF5_tmp_inst=$(eval $H5CC -showconfig \ | $GREP 'Installation point:' \ | $AWK '{print $[]NF}' ) dnl Add this to the CPPFLAGS HDF5_CPPFLAGS="-I${HDF5_tmp_inst}/include" dnl Now sort the flags out based upon their prefixes for arg in $HDF5_SHOW $HDF5_tmp_flags ; do case "$arg" in -I*) echo $HDF5_CPPFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \ || HDF5_CPPFLAGS="$arg $HDF5_CPPFLAGS" ;; -L*) echo $HDF5_LDFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \ || HDF5_LDFLAGS="$arg $HDF5_LDFLAGS" ;; -l*) echo $HDF5_LIBS | $GREP -e "$arg" 2>&1 >/dev/null \ || HDF5_LIBS="$arg $HDF5_LIBS" ;; esac done HDF5_LIBS="$HDF5_LIBS -lhdf5" AC_MSG_RESULT([yes (version $[HDF5_VERSION])]) dnl See if we can compile ax_lib_hdf5_save_CC=$CC ax_lib_hdf5_save_CPPFLAGS=$CPPFLAGS ax_lib_hdf5_save_LIBS=$LIBS ax_lib_hdf5_save_LDFLAGS=$LDFLAGS CC=$HDF5_CC CPPFLAGS=$HDF5_CPPFLAGS LIBS=$HDF5_LIBS LDFLAGS=$HDF5_LDFLAGS AC_CHECK_HEADER([hdf5.h], [ac_cv_hadf5_h=yes], [ac_cv_hadf5_h=no]) AC_CHECK_LIB([hdf5], [H5Fcreate], [ac_cv_libhdf5=yes], [ac_cv_libhdf5=no]) if test "$ac_cv_hadf5_h" = "no" && test "$ac_cv_libhdf5" = "no" ; then AC_MSG_WARN([Unable to compile HDF5 test program]) fi dnl Look for HDF5's high level library AC_HAVE_LIBRARY([hdf5_hl], [HDF5_LIBS="$HDF5_LIBS -lhdf5_hl"], [], []) CC=$ax_lib_hdf5_save_CC CPPFLAGS=$ax_lib_hdf5_save_CPPFLAGS LIBS=$ax_lib_hdf5_save_LIBS LDFLAGS=$ax_lib_hdf5_save_LDFLAGS AC_MSG_CHECKING([for matching HDF5 Fortran wrapper]) dnl Presume HDF5 Fortran wrapper is just a name variant from H5CC H5FC=$(eval echo -n $H5CC | $SED -n 's/cc$/fc/p') if test -x "$H5FC"; then AC_MSG_RESULT([$H5FC]) with_hdf5_fortran="yes" AC_SUBST([H5FC]) dnl Again, pry any remaining -Idir/-Ldir from compiler wrapper for arg in `$H5FC -show` do case "$arg" in #( -I*) echo $HDF5_FFLAGS | $GREP -e "$arg" >/dev/null \ || HDF5_FFLAGS="$arg $HDF5_FFLAGS" ;;#( -L*) echo $HDF5_FFLAGS | $GREP -e "$arg" >/dev/null \ || HDF5_FFLAGS="$arg $HDF5_FFLAGS" dnl HDF5 installs .mod files in with libraries, dnl but some compilers need to find them with -I echo $HDF5_FFLAGS | $GREP -e "-I${arg#-L}" >/dev/null \ || HDF5_FFLAGS="-I${arg#-L} $HDF5_FFLAGS" ;; esac done dnl Make Fortran link line by inserting Fortran libraries for arg in $HDF5_LIBS do case "$arg" in #( -lhdf5_hl) HDF5_FLIBS="$HDF5_FLIBS -lhdf5hl_fortran $arg" ;; #( -lhdf5) HDF5_FLIBS="$HDF5_FLIBS -lhdf5_fortran $arg" ;; #( *) HDF5_FLIBS="$HDF5_FLIBS $arg" ;; esac done else AC_MSG_RESULT([no]) with_hdf5_fortran="no" fi AC_SUBST([HDF5_VERSION]) AC_SUBST([HDF5_CC]) AC_SUBST([HDF5_CFLAGS]) AC_SUBST([HDF5_CPPFLAGS]) AC_SUBST([HDF5_LDFLAGS]) AC_SUBST([HDF5_LIBS]) AC_SUBST([HDF5_FC]) AC_SUBST([HDF5_FFLAGS]) AC_SUBST([HDF5_FLIBS]) AC_DEFINE([HAVE_HDF5], [1], [Defined if you have HDF5 support]) fi fi ]) GMTSAR_V5.7/README.md000644 015705 000000 00000027434 13505462116 015035 0ustar00sandwellwheel000000 000000 # GMTSAR ***************************************************************************************************** # INSTRUCTIONS FOR INSTALLING AND RUNNING GMTSAR Copyright (c) 2009-2017 David T. Sandwell - dsandwell@ucsd.edu Xiaohua Xu - xix016@ucsd.edu Rob Mellors - rmellors@geology.sdsu.edu Xiaopeng Tong - xitong@ucsd.edu Meng Wei - mwei@ucsd.edu Paul Wessel - pwessel@hawaii.edu This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 3 of the LICENSE.TXT This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Significant Modifications: February 13, 2010 March 11, 2010 March 25, 2010 June 8, 2010 September 27, 2010 April 4, 2013 Converted to use GMT API and redone the entire install procedure. Linking with GMT means GMTSAR will use the FFTs recognized by GMT: Accelerate Framework on OS X, FFTW, KISS FFT, or Brenner Fortran-translated FFT. GMT selects the fastest FFT given the dimensions and the availability of libraries. ***************************************************************************************************** 1) Obtain GMT from SOEST and install [see "Obtaining GMT" on gmt.soest.hawaii.edu]. Make sure all the required libraries (e.g., netcdf, GDAL, PCRE) have been installed before you start the GMT build/install procedure. 2) Go to the GMTSAR WIKI and follow the instructions. http://gmt.soest.hawaii.edu/projects/gmt5sar/wiki 3) Download orbit files for ERS and ENVISAT. No need for ALOS orbit data because it is built in raw file. The file is > 1G and contains all the available orbit for ERS and ENVISAT. It takes a while to download but you only need to download it once. Put it anywhere you like; let's refer to this dir as http://topex.ucsd.edu/gmtsar/downloads 4) Obtain GMTSAR subversion. Go to the GMTSAR WIKI and follow the instructions. http://gmt.soest.hawaii.edu/projects/gmt5sar/wiki autoconf (When we install you can specify a system directory such as /usr/local, assuming you have permission). 4) Configure GMTSAR: Run the configure script. To see all options, run ./configure --help Most users will simply run ./configure --with-orbits-dir= --prefix= where was defined in step (3) and is where you want to place all the executables. For example, you might run ./configure --with-orbits-dir=/usr/local/orbits If you are a developer you may also want to add --enable-debug so you can run the programs in a visual debugger. Note: If you ever decide to move the orbits directory then you must also reconfigure GMTSAR. 5) To build all executables, type make Assuming that went well, you can install executables, scripts, and shared data by running make install or sudo make install if you are writing to a system directory that requires admin privileges. After this step you can remove your staging directory/tar-files if you like. 6) test the commands: gmt, esarp, xcorr, conv, gmtsar.csh, etc. If using C-shell you may have to type rehash first. If this does not work then make sure the is in your system $PATH or $path. ***************************************************************************************************** RUN 1) GET DATA. There is an example data set at our website: http://topex.ucsd.edu/gmtsar/downloads/ Uncompress the file and then unpack with tar. 2) ORGANIZE the DISK. The standard GMTSAR run has the following directories. raw SLC topo intf raw - contains the original data. SLC - contains the single look complex images derived from the raw data. topo - contains a digital elevation model for the area in geographic and ultimately radar coordinates. intf - contains subdirectories with the possible interferograms (only 1 for this example). In raw, original data have special name format. If you got data that have different name system, you need to change the name according to the following: For ALOS we just need the IMG- and LED-files. Here is an example. -rw-r--r-- 1 sandwell 14 382547520 Aug 28 15:29 IMG-HH-ALPSRP227730640-H1.0__A -rw-r--r-- 1 sandwell 14 12506972 Aug 28 15:28 LED-ALPSRP227730640-H1.0__A -rw-r--r-- 1 sandwell 14 12506972 Aug 28 15:28 LED-ALPSRP207600640-H1.0__A -rw-r--r-- 1 sandwell 14 747383820 Aug 28 15:28 IMG-HH-ALPSRP207600640-H1.0__A Make sure the images are all from the same orbit direction, same track, and same frame. The filename ALPSRP207600640-H1.0__A can be decomposed as: __A - ascending 0640 - frame number 20760 - orbit number To check that the data are from the same track, the difference between orbit numbers should be divisible by 671. In this case there are 7, 46-day cycles between the acquisitions. For ENVISAT we just need .baq file. Here is an example. ENV1_2_084_2943_42222.baq ENV1_2_084_2943_42723.baq The filename means: ENVISAT _ 2 _ track number _ frame number _ orbit number For ERS we just need .dat and .ldr file. Here is an example. e2_127_2907_23027.ldr e2_127_2907_23027.dat e2_127_2907_23528.ldr e2_127_2907_23528.dat The filename means: ERS2_track number_frame number_orbit number. .dat - raw data file .ldr - leader file 3) MAKE DEM Go to the following web site and construct a file dem.grd that encloses the SAR frame. http://topex.ucsd.edu/gmtsar/demgen Place the file dem.grd in the /topo directory. 4) DO EVERYTHING For ALOS: p2p_ALOS.csh IMG-HH-ALPSRP207600640-H1.0__A IMG-HH-ALPSRP227730640-H1.0__A configure.txt The file configure.txt should be edited to set a number of parameters including the starting point for t he InSAR processing. For ENVISAT: p2p_ENVI.csh ENV1_2_084_2943_42222 ENV1_2_084_2943_42723 dem.grd For ERS: p2p_ERS.csh e2_127_2907_23027 e2_127_2907_23528 dem.grd ********************************************************************************************************* RUN - STEP-BY-STEP INSTRUCTIONS Taking ALOS for example but applicable to ERS and ENVISAT. 1) PREPROCESS the raw data cd raw ls IMG* >> data.in Edit the data.in file and place the master in the first line. Also one can set the -radius and -near_range on the first line to have this frame match other frames along the same track. When this command is done you will have PRM and raw files for every scene in the list data.in, all in the same format and geometry. Execute the command. pre_proc_batch.csh ALOS data.in 2) ALIGN the SLC images. Link the raw data into the SLC directory. cd SLC cp ../raw/*.PRM . ln -s ../raw/*.raw . ln -s ../raw/LED* . Align the images align.csh ALOS IMG-HH-ALPSRP207600640-H1.0__A IMG-HH-ALPSRP227730640-H1.0__A This will keep your computer busy for a while. The first image is called the master and the second is a slave. One can align a slave to the master and then use that slave as a surrogate master. This is useful for alignment of a large stack of data having a large spread in the baseline versus time plot. When this is done you will have 2 output files for each scene, a PRM-file and a Single Look Complex (SLC-file). The PRM-files are ascii text files containing the parameters needed for InSAR processing. master IMG-HH-ALPSRP207600640-H1.0__A.PRM IMG-HH-ALPSRP207600640-H1.0__A.SLC slave IMG-HH-ALPSRP227730640-H1.0__A.PRM IMG-HH-ALPSRP227730640-H1.0__A.SLC (Look inside the script align.csh to see what it does.) 3) MAKE the topo_ra.grd cd topo cp ../SLC/IMG-HH-ALPSRP207600640-H1.0__A.PRM master.PRM ln -s ../raw/LED-ALPSRP207600640-H1.0__A . Next you will need a file dem.grd. Thus can be created at: http://topex.ucsd.edu/gmtsar/demgen Once you have the dem.grd in lon/lat coordinates you can convert it to radar coordinates using the following command. dem2topo_ra.csh master.PRM dem.grd This creates a file called topo_ra.grd. The script also creates postscript images of the dem.ps and topo_ra.ps that can be viewed. The script also creates a file trans.dat that has the complete mapping from lon,lat,topo to range,azimuth. This same file will be used later for geocoding, (i.e., converting the range, azimuth grids back into lon, lat space). 4) INTERFEROGRAM cd intf mkdir 20760_22773 Note these are the orbit numbers of the reference and repeat images. One could also use dates for the directory name. cd 20760_22773 ln -s ../../raw/LED-ALPSRP207600640-H1.0__A . ln -s ../../raw/LED-ALPSRP227730640-H1.0__A . cp ../../SLC/IMG-HH-ALPSRP207600640-H1.0__A.PRM . cp ../../SLC/IMG-HH-ALPSRP227730640-H1.0__A.PRM . ln -s ../../SLC/IMG-HH-ALPSRP207600640-H1.0__A.SLC . ln -s ../../SLC/IMG-HH-ALPSRP227730640-H1.0__A.SLC . ln -s ../../topo/topo_ra.grd . All these files are needed to be linked or copied to make the interferogram. Of course this could all be done with a script. Now make the interferogram. While it is running look inside the script intf.csh to see the grdmath. Also, if you have any kind of error, delete everything and start over. intf.csh IMG-HH-ALPSRP207600640-H1.0__A.PRM IMG-HH-ALPSRP227730640-H1.0__A.PRM -topo topo_ra.grd The output will be three grd and postscript files. display_amp.grd, display_amp.ps - amplitude of interferogram phase.grd, phase.ps - phase of interferogram corr.grd, corr.ps - correlation of interferogram The phase measures the displacement of the repeat images relative to the reference images. The "reference and repeat" is a separate definition from the "master and slave" (refer to the document). Note that the phase is relative measurement so it's not important whether the pixel values are negative or positive. Phase increase means that the ground is moving away from the radar (range increasing); phase decrease means that the ground is moving toward the radar (range decreasing). 5) FILTER INTERFEROGRAM filter.csh IMG-HH-ALPSRP207600640-H1.0__A.PRM IMG-HH-ALPSRP227730640-H1.0__A.PRM gauss_alos_200m 2 The gaussian filter and decimation for the amplitude and phase images are the same. filter is the name of the filter. decimation control the size of the amplitude and phase images. It is either 1 or 2. Set the decimation to be 1 if you want higher resolution images. Set the decimation to be 2 if you want images with smaller file size. The output will be masked and filtered phase as well as phase gradients (xphase.grd and yphase.grd). 6) UNWRAP PHASE cd intf/20760_22773 shaphu.csh .10 7) GEOCODE cd intf/20760_22773 ln -s ../../topo/trans.dat . geocode.csh .10 This command will make postscript and KML images of the phase, correlation, and display amplitude. The argument 0.15 is used to mask the phase when the coherence is less than 0.15. Use your GMT skills to improve on these maps. One can combine the phase (color) and amplitude (shading) in gmt grdimage or combine the phase (color) and gmt grdgradient dem.grd (shading) to make interesting plots. 8) SHIFT THE TOPOPHASE [OPTIONAL] The topo_ra.grd may not be perfectly aligned with the master SLC. This can be corrected by shifting the topo_ra by 1 or 2 pixels, usually in the range direction. cd SLC slc2amp.csh IMG-HH-ALPSRP207600640-H1.0__A.PRM amp_master.grd cd ../topo ln -s ../SLC/amp_master.grd . offset_topo amp_master.grd topo_ra.grd 0 0 5 topo_shift.grd The last line of the output from this program shows the shift needed to maximize the cross correlation between the amplitude of the master image and the range gradient of the topo_ra.grd. The output file is the topography shifted by an integer number of pixels. Now go back to step 4) and use the topo_ra_shift.grd instead of the topo_ra.grd to remake the interferogram. GMTSAR_V5.7/config.sub000644 015705 000000 00000106411 13505462013 015523 0ustar00sandwellwheel000000 000000 #! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-07-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: GMTSAR_V5.7/lib000755 015705 000000 00000000000 13505462014 017032 2../usr/local/libustar00sandwellwheel000000 000000 GMTSAR_V5.7/doc/000755 015705 000000 00000000000 13505462014 014306 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/README.txt000644 015705 000000 00000027442 13505462014 015250 0ustar00sandwellwheel000000 000000 ***************************************************************************************************** # $Id: README.TXT 211 2015-08-07 15:49:42Z pwessel $ # INSTRUCTIONS FOR INSTALLING AND RUNNING GMTSAR Copyright (c) 2009-2017 David T. Sandwell - dsandwell@ucsd.edu Rob Mellors - rmellors@geology.sdsu.edu Xiaopeng Tong - xitong@ucsd.edu Meng Wei - mwei@ucsd.edu Paul Wessel - pwessel@hawaii.edu This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 3 of the LICENSE.TXT This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Significant Modifications: February 13, 2010 March 11, 2010 March 25, 2010 June 8, 2010 September 27, 2010 April 4, 2013 Converted to use GMT API and redone the entire install procedure. Linking with GMT means GMTSAR will use the FFTs recognized by GMT: Accelerate Framework on OS X, FFTW, KISS FFT, or Brenner Fortran-translated FFT. GMT selects the fastest FFT given the dimensions and the availability of libraries. ***************************************************************************************************** 1) Obtain GMT from SOEST and install [see "Obtaining GMT" on gmt.soest.hawaii.edu]. Make sure all the required libraries (e.g., netcdf, GDAL, PCRE) have been installed before you start the GMT build/install procedure. 2) Go to the GMTSAR WIKI and follow the instructions. http://gmt.soest.hawaii.edu/projects/gmt5sar/wiki 3) Download orbit files for ERS and ENVISAT. No need for ALOS orbit data because it is built in raw file. The file is > 1G and contains all the available orbit for ERS and ENVISAT. It takes a while to download but you only need to download it once. Put it anywhere you like; let's refer to this dir as http://topex.ucsd.edu/gmtsar/downloads 4) Obtain GMTSAR subversion. Go to the GMTSAR WIKI and follow the instructions. http://gmt.soest.hawaii.edu/projects/gmt5sar/wiki autoconf (When we install you can specify a system directory such as /usr/local, assuming you have permission). 4) Configure GMTSAR: Run the configure script. To see all options, run ./configure --help Most users will simply run ./configure --with-orbits-dir= --prefix= where was defined in step (3) and is where you want to place all the executables. For example, you might run ./configure --with-orbits-dir=/usr/local/orbits If you are a developer you may also want to add --enable-debug so you can run the programs in a visual debugger. Note: If you ever decide to move the orbits directory then you must also reconfigure GMTSAR. 5) To build all executables, type make Assuming that went well, you can install executables, scripts, and shared data by running make install or sudo make install if you are writing to a system directory that requires admin privileges. After this step you can remove your staging directory/tar-files if you like. 6) test the commands: gmt, esarp, xcorr, conv, gmtsar.csh, etc. If using C-shell you may have to type rehash first. If this does not work then make sure the is in your system $PATH or $path. ***************************************************************************************************** RUN 1) GET DATA. There is an example data set at our website: http://topex.ucsd.edu/gmtsar/downloads/ Uncompress the file and then unpack with tar. 2) ORGANIZE the DISK. The standard GMTSAR run has the following directories. raw SLC topo intf raw - contains the original data. SLC - contains the single look complex images derived from the raw data. topo - contains a digital elevation model for the area in geographic and ultimately radar coordinates. intf - contains subdirectories with the possible interferograms (only 1 for this example). In raw, original data have special name format. If you got data that have different name system, you need to change the name according to the following: For ALOS we just need the IMG- and LED-files. Here is an example. -rw-r--r-- 1 sandwell 14 382547520 Aug 28 15:29 IMG-HH-ALPSRP227730640-H1.0__A -rw-r--r-- 1 sandwell 14 12506972 Aug 28 15:28 LED-ALPSRP227730640-H1.0__A -rw-r--r-- 1 sandwell 14 12506972 Aug 28 15:28 LED-ALPSRP207600640-H1.0__A -rw-r--r-- 1 sandwell 14 747383820 Aug 28 15:28 IMG-HH-ALPSRP207600640-H1.0__A Make sure the images are all from the same orbit direction, same track, and same frame. The filename ALPSRP207600640-H1.0__A can be decomposed as: __A - ascending 0640 - frame number 20760 - orbit number To check that the data are from the same track, the difference between orbit numbers should be divisible by 671. In this case there are 7, 46-day cycles between the acquisitions. For ENVISAT we just need .baq file. Here is an example. ENV1_2_084_2943_42222.baq ENV1_2_084_2943_42723.baq The filename means: ENVISAT _ 2 _ track number _ frame number _ orbit number For ERS we just need .dat and .ldr file. Here is an example. e2_127_2907_23027.ldr e2_127_2907_23027.dat e2_127_2907_23528.ldr e2_127_2907_23528.dat The filename means: ERS2_track number_frame number_orbit number. .dat - raw data file .ldr - leader file 3) MAKE DEM Go to the following web site and construct a file dem.grd that encloses the SAR frame. http://topex.ucsd.edu/gmtsar/demgen Place the file dem.grd in the /topo directory. 4) DO EVERYTHING For ALOS: p2p_ALOS.csh IMG-HH-ALPSRP207600640-H1.0__A IMG-HH-ALPSRP227730640-H1.0__A configure.txt The file configure.txt should be edited to set a number of parameters including the starting point for t he InSAR processing. For ENVISAT: p2p_ENVI.csh ENV1_2_084_2943_42222 ENV1_2_084_2943_42723 dem.grd For ERS: p2p_ERS.csh e2_127_2907_23027 e2_127_2907_23528 dem.grd ********************************************************************************************************* RUN - STEP-BY-STEP INSTRUCTIONS Taking ALOS for example but applicable to ERS and ENVISAT. 1) PREPROCESS the raw data cd raw ls IMG* >> data.in Edit the data.in file and place the master in the first line. Also one can set the -radius and -near_range on the first line to have this frame match other frames along the same track. When this command is done you will have PRM and raw files for every scene in the list data.in, all in the same format and geometry. Execute the command. pre_proc_batch.csh ALOS data.in 2) ALIGN the SLC images. Link the raw data into the SLC directory. cd SLC cp ../raw/*.PRM . ln -s ../raw/*.raw . ln -s ../raw/LED* . Align the images align.csh ALOS IMG-HH-ALPSRP207600640-H1.0__A IMG-HH-ALPSRP227730640-H1.0__A This will keep your computer busy for a while. The first image is called the master and the second is a slave. One can align a slave to the master and then use that slave as a surrogate master. This is useful for alignment of a large stack of data having a large spread in the baseline versus time plot. When this is done you will have 2 output files for each scene, a PRM-file and a Single Look Complex (SLC-file). The PRM-files are ascii text files containing the parameters needed for InSAR processing. master IMG-HH-ALPSRP207600640-H1.0__A.PRM IMG-HH-ALPSRP207600640-H1.0__A.SLC slave IMG-HH-ALPSRP227730640-H1.0__A.PRM IMG-HH-ALPSRP227730640-H1.0__A.SLC (Look inside the script align.csh to see what it does.) 3) MAKE the topo_ra.grd cd topo cp ../SLC/IMG-HH-ALPSRP207600640-H1.0__A.PRM master.PRM ln -s ../raw/LED-ALPSRP207600640-H1.0__A . Next you will need a file dem.grd. Thus can be created at: http://topex.ucsd.edu/gmtsar/demgen Once you have the dem.grd in lon/lat coordinates you can convert it to radar coordinates using the following command. dem2topo_ra.csh master.PRM dem.grd This creates a file called topo_ra.grd. The script also creates postscript images of the dem.ps and topo_ra.ps that can be viewed. The script also creates a file trans.dat that has the complete mapping from lon,lat,topo to range,azimuth. This same file will be used later for geocoding, (i.e., converting the range, azimuth grids back into lon, lat space). 4) INTERFEROGRAM cd intf mkdir 20760_22773 Note these are the orbit numbers of the reference and repeat images. One could also use dates for the directory name. cd 20760_22773 ln -s ../../raw/LED-ALPSRP207600640-H1.0__A . ln -s ../../raw/LED-ALPSRP227730640-H1.0__A . cp ../../SLC/IMG-HH-ALPSRP207600640-H1.0__A.PRM . cp ../../SLC/IMG-HH-ALPSRP227730640-H1.0__A.PRM . ln -s ../../SLC/IMG-HH-ALPSRP207600640-H1.0__A.SLC . ln -s ../../SLC/IMG-HH-ALPSRP227730640-H1.0__A.SLC . ln -s ../../topo/topo_ra.grd . All these files are needed to be linked or copied to make the interferogram. Of course this could all be done with a script. Now make the interferogram. While it is running look inside the script intf.csh to see the grdmath. Also, if you have any kind of error, delete everything and start over. intf.csh IMG-HH-ALPSRP207600640-H1.0__A.PRM IMG-HH-ALPSRP227730640-H1.0__A.PRM -topo topo_ra.grd The output will be three grd and postscript files. display_amp.grd, display_amp.ps - amplitude of interferogram phase.grd, phase.ps - phase of interferogram corr.grd, corr.ps - correlation of interferogram The phase measures the displacement of the repeat images relative to the reference images. The "reference and repeat" is a separate definition from the "master and slave" (refer to the document). Note that the phase is relative measurement so it's not important whether the pixel values are negative or positive. Phase increase means that the ground is moving away from the radar (range increasing); phase decrease means that the ground is moving toward the radar (range decreasing). 5) FILTER INTERFEROGRAM filter.csh IMG-HH-ALPSRP207600640-H1.0__A.PRM IMG-HH-ALPSRP227730640-H1.0__A.PRM gauss_alos_200m 2 The gaussian filter and decimation for the amplitude and phase images are the same. filter is the name of the filter. decimation control the size of the amplitude and phase images. It is either 1 or 2. Set the decimation to be 1 if you want higher resolution images. Set the decimation to be 2 if you want images with smaller file size. The output will be masked and filtered phase as well as phase gradients (xphase.grd and yphase.grd). 6) UNWRAP PHASE cd intf/20760_22773 shaphu.csh .10 7) GEOCODE cd intf/20760_22773 ln -s ../../topo/trans.dat . geocode.csh .10 This command will make postscript and KML images of the phase, correlation, and display amplitude. The argument 0.15 is used to mask the phase when the coherence is less than 0.15. Use your GMT skills to improve on these maps. One can combine the phase (color) and amplitude (shading) in gmt grdimage or combine the phase (color) and gmt grdgradient dem.grd (shading) to make interesting plots. 8) SHIFT THE TOPOPHASE [OPTIONAL] The topo_ra.grd may not be perfectly aligned with the master SLC. This can be corrected by shifting the topo_ra by 1 or 2 pixels, usually in the range direction. cd SLC slc2amp.csh IMG-HH-ALPSRP207600640-H1.0__A.PRM amp_master.grd cd ../topo ln -s ../SLC/amp_master.grd . offset_topo amp_master.grd topo_ra.grd 0 0 5 topo_shift.grd The last line of the output from this program shows the shift needed to maximize the cross correlation between the amplitude of the master image and the range gradient of the topo_ra.grd. The output file is the topography shifted by an integer number of pixels. Now go back to step 4) and use the topo_ra_shift.grd instead of the topo_ra.grd to remake the interferogram. GMTSAR_V5.7/LICENSE.TXT000644 015705 000000 00000104513 13505462014 015230 0ustar00sandwellwheel000000 000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . GMTSAR_V5.7/config.mk.in000644 015705 000000 00000007127 13505462013 015752 0ustar00sandwellwheel000000 000000 #------------------------------------------------------------------------------- # $Id: config.mk.in 227 2015-08-12 00:25:27Z pwessel $ # # Standard Makefile Macro Setup for GMTSAR # # Edit this file only, NOT the makefile itself. #------------------------------------------------------------------------------- # The purpose of this section is to contain common make macros # that should be processed by every execution of that utility. #------------------------------------------------------------------------------- # POSIX shell. On some platforms it is not /bin/sh. SHELL = @SHELL@ # Installation Directories: PACKAGE_TARNAME = @PACKAGE_TARNAME@ GMTSARHOME = @rootdir@ ORBITS_DIR = @ORBITS_DIR@ TIFF_INC = @TIFF_INC@ TIFF_LIB = @TIFF_LIB@ LALIBS = @LALIBS@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = $(DESTDIR)@bindir@ sharedir = $(DESTDIR)@prefix@/share/gmtsar # GMTSAR version number GMTSAR_VERSION = @PACKAGE_VERSION@ # Compilers, if $CC not set in environment CC = @CC@ # Preprocessing: CPP = @CPP@ CPPFLAGS = $(INCLUDES) $(DEFINES) @CPPFLAGS@ HDF5_CPPFLAGS = @HDF5_CPPFLAGS@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ #------------------------------------------------------------------------------- # Math library specification # (Will most of the time be -lm, on Solaris -lsunmath -lm) #------------------------------------------------------------------------------- # LIBS = @LIBS@ HDF5_LIBS = @HDF5_LIBS@ # #------------------------------------------------------------------------------- # Miscellaneous Standard Utilities #------------------------------------------------------------------------------- # INSTALL = @INSTALL@ AWK = @AWK@ AR = @AR@ RANLIB = @RANLIB@ CSH = @CSH@ LD = @LD@ LN_S = @LN_S@ GNUTAR = @GNUTAR@ # #------------------------------------------------------------------------------- # Required directives for GMT includes and library #------------------------------------------------------------------------------- GMT_INC = @GMT_INC@ GMT_LIB = @GMT_LIB@ # #------------------------------------------------------------------------------- # Required directives for GMTSAR library #------------------------------------------------------------------------------- GMTSAR = -L@rootdir@/gmtsar -lgmtsar # #------------------------------------------------------------------------------- # Compiler switches and linker flags #------------------------------------------------------------------------------- # CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ # #------------------------------------------------------------------------------- # Shared library file extension. Examples: # Solaris, Linux, IRIX: so HP: sl Mac OS X: dylib # SL_VERSION is extension for versioned shared libraries. Examples: # Linux: so. Mac OS X: .dylib # Set SL_VERSION = $(SL) to prevent the creation of versioned shared libraries #------------------------------------------------------------------------------- # SL = @SL@ SL_VERSION = @SL_VERSION@ # #------------------------------------------------------------------------------- # Set LIBEXT = a to create static libraries (default) # Set LIBEXT = $(SL) to create shared libraries (and set SL below) #------------------------------------------------------------------------------- # LIBEXT = @LIBEXT@ #------------------------------------------------------------------------------- # Linker switch for building shared libraries # SunOS: -G HP-UX: -b Linux,IRIX: -shared #------------------------------------------------------------------------------- # LD_OPT = @LD_OPT@ #------------------------------------------------------------------------------- GMTSAR_V5.7/BASIC_GIT.txt000644 015705 000000 00000001464 13505462072 015637 0ustar00sandwellwheel000000 000000 # # make changes to an existing repository # cd /usr/local/gmtsar vi README.md git add README.md git commit -m"changed README.md file" git push origin master # # delete a file from an existing repository # git rm BASICSVN.txt git commit -m"removed the SVN instructions" git push origin master # # clone a repository from GMT6 # cd /usr/local sudo mkdir gmt sudo chown -r sandwell gmt git clone https://github.com/GenericMappingTools/gmt # # to make a new repo of GMTSAR # # create a new repository on https://github.com/dsandwell # cd /usr/local/gmtsar make spotless echo "# GMTSAR" >> README.md git init git add README.md git commit -m "first commit" git remote add origin https://github.com/dsandwell/gmtsar.git git push -u origin master git add * git commit -m "adding all the code" git push -u origin master GMTSAR_V5.7/BASICSVN.TXT000644 015705 000000 00000003523 13505462013 015354 0ustar00sandwellwheel000000 000000 # $Id: BASICSVN.TXT 210 2015-08-07 15:46:10Z pwessel $ # For those unfamiliar with subversion, here are some basic commands and approaches Before you start making any edits, make sure your working copy is up-to-date by running svn up in the top GMTSAR directory. That will minimize any conflicts. After making any changes to the code, make an entry in the ChangeLog file, with the most recent changes on top, following the format of others. If you add any new files, make sure you tell subversion about them, e.g. svn add mynewfile Using svn add mynewdir will add the directory as well as any files in it. Likewise, to remove a file from the repository, use svn remove obsoletefile Nothing really happens until you decide to commit your changes. To commit your changes to the repository, use svn commit -m "short explanation of what you did" This will upload your changes to the server and tell you what the new revision number is. The revision number is for the entire repository and increases for each commit; there is no unique number per file. If during commit you get a conflict message, it means that your changes occurs in an area that one of the other developers _JUST_ committed as well. The simplest approach is to answer the question with "fix later" or something (I don't recall the exact wording), then edit that file. Update the file with svn up first. Now, you should easily find sections marked with >>> <<< showing both yours and the other version of the code. It is usually easy to figure out the issue and make the edits. Because the commit was marked as a conflict you must first remove the conflict once you are happy with your changes: svn resolved Now you can continue with the commit. Should you screw up and wish to revert to what it was before your changes, do svn revert svn up GMTSAR_V5.7/gmtsar/000755 015705 000000 00000000000 13507242234 015040 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/gmtsar/solid_tide.c000644 015705 000000 00000147435 13505462013 017336 0ustar00sandwellwheel000000 000000 /* rewritten Dennis Milbert' solid_24d.f */ /* by Xiaohua Xu, 05/20/2018 for GMTSAR */ char *USAGE = "\nsolid_tide yyyyddd.fffffff < lon_lat > lon_lat_dx_dy_dz \n\n" " translated from Dennis Milbert's solid.for\n\n" " compute solid earth tide given certain lon lat\n\n"; #include "lib_functions.h" #include #include #include double pi, pi2, rad; double a = 6378137.0; double e2 = 6.69438002290341574957e-3; int mjd0; int day2date(double, double, double *, double *); int isleapyr(int); int compute_tide(double, double, double, double, double *, double *, double *); int geo2xyz(double, double, double, double *, double *, double *); int civmjd(double, double, double, double, double, double, double *, double *); int mjdciv(double, double, double *, double *, double *, double *, double *, double *); int sunxyz(double, double, double *); int moonxyz(double, double, double *); int detide(double *, double, double, double *, double *, double *); int rge(double, double, double *, double *, double *, double, double, double); double gps2utc(double); double gpsleap(double); double gps2tt(double); int getghar(double, double, double *); int rot3(double, double, double, double, double *); int rot1(double, double, double, double, double *); int sprod(double *, double *, double *, double *, double *); double enorm8(double *); int st1idiu(double *, double *, double *, double, double, double *); int st1isem(double *, double *, double *, double, double, double *); int st1l1(double *, double *, double *, double, double, double *); int step2diu(double *, double, double, double *); int step2lon(double *, double, double, double *); int main(int argc, char **argv) { double yr, day, lon, lat, du, dv, dw; pi = 4.0 * atan(1.0); pi2 = pi * 2; rad = 180.0 / pi; if (argc != 2) { die("", USAGE); } yr = floor(atof(argv[1]) / 1000.0); day = atof(argv[1]) - yr * 1000.0; while (scanf(" %lf %lf ", &lon, &lat) == 2) { if (lon < 0.0) lon = lon + 360.0; // as quote from Dennis Milbert's website "The output file name is // solid.txt. It is plain ASCII text. After the header, solid earth tide // components are computed for 24 hours, at 1 minute intervals. Note: the // time stamps refer to UTC time. The solid earth tide components are NORTH, // EAST, UP in the local geodetic (ellipsoidal) horizon system." compute_tide(yr, day, lon, lat, &du, &dv, &dw); if (lon > 180.0) lon = lon - 360.0; fprintf(stdout, "%.9f %.9f %.12e %.12e %.12e \n", lon, lat, dv, du, dw); // du = north, dv = east, dw = up } return (1); } int compute_tide(double yr, double day, double glod, double glad, double *du, double *dv, double *dw) { double gla0, glo0, eht0, x0, y0, z0, xsta[4], rsun[4], rmoon[4], etide[4]; double fmjd, mjd, iyr, imo, idy, ihr, imn, sec; gla0 = glad / rad; glo0 = glod / rad; eht0 = 0.0; // convert yyyyddd.fffff to iyr,imo,idy,ihr,imn,sec day2date(yr, day, &imo, &idy); // printf("%lf %lf %lf %lf %lf %lf\n",yr,day,imo,idy,glad,glod); iyr = yr; ihr = floor((day - floor(day)) * 86400.0 / 3600.0); imn = floor(((day - floor(day)) * 86400.0 - ihr * 3600.0) / 60.0); sec = (day - floor(day)) * 86400.0 - ihr * 3600.0 - imn * 60.0; // sec = round(sec); //for testing geo2xyz(gla0, glo0, eht0, &x0, &y0, &z0); xsta[1] = x0; xsta[2] = y0; xsta[3] = z0; //*** here comes the sun (and the moon) (go, tide!) // ihr=0.0; // imn=0.0; // sec=49920.0; //GPS time system; civmjd(iyr, imo, idy, ihr, imn, sec, &mjd, &fmjd); mjd0 = mjd; // fprintf(stderr,"%.17lf %.17lf %lf %lf %lf %lf %lf // %.17lf\n",mjd,fmjd,iyr,imo,idy,ihr,imn,sec); // mjdciv(mjd,fmjd,&iyr,&imo,&idy,&ihr,&imn,&sec); // printf("%lf %lf %lf %lf %lf %lf %lf // %lf\n",mjd,fmjd,iyr,imo,idy,ihr,imn,sec); sunxyz(mjd, fmjd, rsun); // printf("%.17lf %.17lf %.17lf %.17lf // %.17lf\n",mjd,fmjd,rsun[1],rsun[2],rsun[3]); moonxyz(mjd, fmjd, rmoon); // printf("%.17lf %.17lf %.17lf %.17lf // %.17lf\n",mjd,fmjd,rmoon[1],rmoon[2],rmoon[3]); detide(xsta, mjd, fmjd, rsun, rmoon, etide); // printf("%.17lf %.17lf %.17lf %.17lf // %.17lf\n",mjd,fmjd,etide[1],etide[2],etide[3]); rge(gla0, glo0, du, dv, dw, etide[1], etide[2], etide[3]); // printf("%.17lf %.17lf %.17lf %.17lf %.17lf\n",mjd,fmjd,*du,*dv,*dw); // printf("hahahahaha\n"); return (1); } int rge(double gla, double glo, double *u, double *v, double *w, double x, double y, double z) { //*** given a rectangular cartesian system (x,y,z) //*** compute a geodetic h cartesian sys (u,v,w) // implicit double precision(a-h,o-z) double sb, cb, sl, cl; sb = sin(gla); cb = cos(gla); sl = sin(glo); cl = cos(glo); *u = -sb * cl * x - sb * sl * y + cb * z; *v = -sl * x + cl * y; *w = cb * cl * x + cb * sl * y + sb * z; return (1); } int detide(double *xsta, double mjd, double fmjd, double *xsun, double *xmon, double *dxtide) { //*** computation of tidal corrections of station displacements caused //*** by lunar and solar gravitational attraction //*** step 1 (here general degree 2 and 3 corrections + //*** call st1idiu + call st1isem + call st1l1) //*** + step 2 (call step2diu + call step2lon + call step2idiu) //*** it has been decided that the step 3 un-correction for permanent tide //*** would *not* be applied in order to avoid jump in the reference frame //*** (this step 3 must added in order to get the mean tide station position //*** and to be conformed with the iag resolution.) //*** inputs //*** xsta(i),i=1,2,3 -- geocentric position of the station (ITRF/ECEF) //*** xsun(i),i=1,2,3 -- geoc. position of the sun (ECEF) //*** xmon(i),i=1,2,3 -- geoc. position of the moon (ECEF) //*** mjd,fmjd -- modified julian day (and fraction) (in GPS time) //****old calling // sequence***************************************************** //*** dmjd -- time in mean julian date (including day // fraction) //*** fhr=hr+zmin/60.+sec/3600. -- hr in the day //*** outputs //*** dxtide(i),i=1,2,3 -- displacement vector (ITRF) //*** author iers 1996 : v. dehant, s. mathews and j. gipson //*** (test between two subroutines) //*** author iers 2000 : v. dehant, c. bruyninx and s. mathews //*** (test in the bernese program by c. bruyninx) //*** created: 96/03/23 (see above) //*** modified from dehanttideinelMJD.f by Dennis Milbert 2006sep10 //*** bug fix regarding fhr (changed calling sequence, too) //*** modified to reflect table 7.5a and b IERS Conventions 2003 //*** modified to use TT time system to call step 2 functions //*** sign correction by V.Dehant to match eq.16b, p.81, Conventions //*** applied by Dennis Milbert 2007may05 // implicit double precision(a-h,o-z) // double precision xsta(3),xsun(3),xmon(3),dxtide(3),xcorsta(3) // double precision h20,l20,h3,l3,h2,l2 // double precision mass_ratio_sun,mass_ratio_moon double h20, l20, h3, l3, h2, l2; double rsta, rsun, rmon, scs, scm, scsun, scmon, cosphi; double tsecgps, tsectt, fmjdtt, dmjdtt, t, fhr; double p2sun, p2mon, p3sun, p3mon, x2sun, x2mon, x3sun, x3mon; double mass_ratio_sun, mass_ratio_moon, re, fac2sun, fac2mon, fac3sun, fac3mon, xcorsta[4]; int i; //*** nominal second degree and third degree love numbers and shida numbers // data h20/0.6078d0/,l20/0.0847d0/,h3/0.292d0/,l3/0.015d0/ h20 = 0.6078; l20 = 0.0847; h3 = 0.292; l3 = 0.015; //*** internal support for new calling sequence //*** also convert GPS time into TT time tsecgps = fmjd * 86400.0; //!*** GPS time (sec of day) tsectt = gps2tt(tsecgps); //!*** TT time (sec of day) fmjdtt = tsectt / 86400.0; //!*** TT time (fract. day) dmjdtt = mjd + fmjdtt; //!*** float MJD in TT //*** commented line was live code in dehanttideinelMJD.f //*** changed on the suggestion of Dr. Don Kim, UNB -- 09mar21 //*** Julian date for 2000 January 1 00:00:00.0 UT is JD 2451544.5 //*** MJD for 2000 January 1 00:00:00.0 UT is MJD 51544.0 //***** t=(dmjdtt-51545.d0)/36525.d0 !*** days to centuries, TT t = (dmjdtt - 51544.0) / 36525.0; //!*** days to centuries, TT fhr = (dmjdtt - floor(dmjdtt)) * 24.0; //!*** hours in the day, TT //*** scalar product of station vector with sun/moon vector sprod(xsta, xsun, &scs, &rsta, &rsun); sprod(xsta, xmon, &scm, &rsta, &rmon); scsun = scs / rsta / rsun; scmon = scm / rsta / rmon; //*** computation of new h2 and l2 cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; h2 = h20 - 0.0006 * (1.0 - 3.0 / 2.0 * cosphi * cosphi); l2 = l20 + 0.0002 * (1.0 - 3.0 / 2.0 * cosphi * cosphi); //*** p2-term p2sun = 3.0 * (h2 / 2.0 - l2) * scsun * scsun - h2 / 2.0; p2mon = 3.0 * (h2 / 2.0 - l2) * scmon * scmon - h2 / 2.0; //*** p3-term p3sun = 5.0 / 2.0 * (h3 - 3.0 * l3) * scsun * scsun * scsun + 3.0 / 2.0 * (l3 - h3) * scsun; p3mon = 5.0 / 2.0 * (h3 - 3.0 * l3) * scmon * scmon * scmon + 3.0 / 2.0 * (l3 - h3) * scmon; //*** term in direction of sun/moon vector x2sun = 3.0 * l2 * scsun; x2mon = 3.0 * l2 * scmon; x3sun = 3.0 * l3 / 2.0 * (5.0 * scsun * scsun - 1.0); x3mon = 3.0 * l3 / 2.0 * (5.0 * scmon * scmon - 1.0); //*** factors for sun/moon mass_ratio_sun = 332945.943062; mass_ratio_moon = 0.012300034; re = 6378136.55; fac2sun = mass_ratio_sun * re * pow(re / rsun, 3); fac2mon = mass_ratio_moon * re * pow(re / rmon, 3); fac3sun = fac2sun * (re / rsun); fac3mon = fac2mon * (re / rmon); //*** total displacement for (i = 1; i <= 3; i++) { dxtide[i] = fac2sun * (x2sun * xsun[i] / rsun + p2sun * xsta[i] / rsta) + fac2mon * (x2mon * xmon[i] / rmon + p2mon * xsta[i] / rsta) + fac3sun * (x3sun * xsun[i] / rsun + p3sun * xsta[i] / rsta) + fac3mon * (x3mon * xmon[i] / rmon + p3mon * xsta[i] / rsta); } // call zero_vec8(xcorsta) xcorsta[1] = 0; xcorsta[2] = 0; xcorsta[3] = 0; xcorsta[0] = 0; // printf("%.15lf %.15lf %.15lf %.15lf %.15lf %.15lf // %.15lf\n",rsta,xsta[1],xsta[2],xsta[3],dxtide[1],dxtide[2],dxtide[3]); //*** corrections for the out-of-phase part of love numbers //*** (part h_2^(0)i and l_2^(0)i ) //*** first, for the diurnal band st1idiu(xsta, xsun, xmon, fac2sun, fac2mon, xcorsta); dxtide[1] = dxtide[1] + xcorsta[1]; dxtide[2] = dxtide[2] + xcorsta[2]; dxtide[3] = dxtide[3] + xcorsta[3]; // printf("%.15lf %.15lf %.15lf\n",xcorsta[1],xcorsta[2],xcorsta[3]); //*** second, for the semi-diurnal band st1isem(xsta, xsun, xmon, fac2sun, fac2mon, xcorsta); dxtide[1] = dxtide[1] + xcorsta[1]; dxtide[2] = dxtide[2] + xcorsta[2]; dxtide[3] = dxtide[3] + xcorsta[3]; // printf("%.15lf %.15lf %.15lf\n",xcorsta[1],xcorsta[2],xcorsta[3]); //*** corrections for the latitude dependence of love numbers (part l^(1) ) st1l1(xsta, xsun, xmon, fac2sun, fac2mon, xcorsta); dxtide[1] = dxtide[1] + xcorsta[1]; dxtide[2] = dxtide[2] + xcorsta[2]; dxtide[3] = dxtide[3] + xcorsta[3]; // printf("%.15lf %.15lf %.15lf\n",xcorsta[1],xcorsta[2],xcorsta[3]); //*** consider corrections for step 2 //*** corrections for the diurnal band: //*** first, we need to know the date converted in julian centuries //*** this is now handled at top of code (also convert to TT time system) //***** t=(dmjd-51545.)/36525. //***** fhr=dmjd-int(dmjd) !*** this is/was a buggy line (day vs. // hr) //*** second, the diurnal band corrections, //*** (in-phase and out-of-phase frequency dependence): step2diu(xsta, fhr, t, xcorsta); dxtide[1] = dxtide[1] + xcorsta[1]; dxtide[2] = dxtide[2] + xcorsta[2]; dxtide[3] = dxtide[3] + xcorsta[3]; //*** corrections for the long-period band, //*** (in-phase and out-of-phase frequency dependence): step2lon(xsta, fhr, t, xcorsta); dxtide[1] = dxtide[1] + xcorsta[1]; dxtide[2] = dxtide[2] + xcorsta[2]; dxtide[3] = dxtide[3] + xcorsta[3]; /**** consider corrections for step 3 *----------------------------------------------------------------------- * The code below is commented to prevent restoring deformation * due to permanent tide. All the code above removes * total tidal deformation with conventional Love numbers. * The code above realizes a conventional tide free crust (i.e. ITRF). * This does NOT conform to Resolution 16 of the 18th General Assembly * of the IAG (1983). This resolution has not been implemented by * the space geodesy community in general (c.f. IERS Conventions 2003). *-----------------------------------------------------------------------*/ //*** uncorrect for the permanent tide (only if you want mean tide system) //*** pi=3.141592654 //*** sinphi=xsta(3)/rsta //*** cosphi=dsqrt(xsta(1)**2+xsta(2)**2)/rsta //*** cosla=xsta(1)/cosphi/rsta //*** sinla=xsta(2)/cosphi/rsta //*** dr=-dsqrt(5./4./pi)*h2*0.31460*(3./2.*sinphi**2-0.5) //*** dn=-dsqrt(5./4./pi)*l2*0.31460*3.*cosphi*sinphi //*** dxtide(1)=dxtide(1)-dr*cosla*cosphi+dn*cosla*sinphi //*** dxtide(2)=dxtide(2)-dr*sinla*cosphi+dn*sinla*sinphi //*** dxtide(3)=dxtide(3)-dr*sinphi -dn*cosphi return (1); } int step2lon(double *xsta, double fhr, double t, double *xcorsta) { // implicit double precision (a-h,o-z) // double precision deg2rad // double precision xsta(3),xcorsta(3),datdi(9,5) double deg2rad = 0.017453292519943295769; double s, pr, h, p, zns, ps, rsta, sinphi, cosphi, cosla, sinla, dr_tot, dn_tot, thetaf, dr, dn, de; int i, j; //*** cf. table 7.5b of IERS conventions 2003 (TN.32, pg.82) //*** columns are s,h,p,N',ps, dR(ip),dT(ip),dR(op),dT(op) //*** IERS cols.= s,h,p,N',ps, dR(ip),dR(op),dT(ip),dT(op) //*** units of mm double datdi[45] /* was [9][5] */ = {0., 0., 0., 1., 0., .47, .23, .16, .07, 0., 2., 0., 0., 0., -.2, -.12, -.11, -.05, 1., 0., -1., 0., 0., -.11, -.08, -.09, -.04, 2., 0., 0., 0., 0., -.13, -.11, -.15, -.07, 2., 0., 0., 1., 0., -.05, -.05, -.06, -.03}; // data ((datdi(i,j),i=1,9),j=1,5)/ //* 0, 0, 0, 1, 0, 0.47, 0.23, 0.16, 0.07, //* 0, 2, 0, 0, 0, -0.20,-0.12,-0.11,-0.05, //* 1, 0,-1, 0, 0, -0.11,-0.08,-0.09,-0.04, //* 2, 0, 0, 0, 0, -0.13,-0.11,-0.15,-0.07, //* 2, 0, 0, 1, 0, -0.05,-0.05,-0.06,-0.03/ s = 218.31664563 + 481267.88194 * t - 0.0014663889 * t * t + 0.00000185139 * t * t * t; pr = 1.396971278 * t + 0.000308889 * t * t + 0.000000021 * t * t * t + 0.000000007 * t * t * t * t; s = s + pr; h = 280.46645 + 36000.7697489 * t + 0.00030322222 * t * t + 0.000000020 * t * t * t - 0.00000000654 * t * t * t * t; p = 83.35324312 + 4069.01363525 * t - 0.01032172222 * t * t - 0.0000124991 * t * t * t + 0.00000005263 * t * t * t * t; zns = 234.95544499 + 1934.13626197 * t - 0.00207561111 * t * t - 0.00000213944 * t * t * t + 0.00000001650 * t * t * t * t; ps = 282.93734098 + 1.71945766667 * t + 0.00045688889 * t * t - 0.00000001778 * t * t * t - 0.00000000334 * t * t * t * t; rsta = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2] + xsta[3] * xsta[3]); sinphi = xsta[3] / rsta; cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; cosla = xsta[1] / cosphi / rsta; sinla = xsta[2] / cosphi / rsta; //*** reduce angles to between 0 and 360 s = fmod(s, 360.0); //***** tau=dmod(tau,360.d0) !*** tau not used here--09jul28 h = fmod(h, 360.0); p = fmod(p, 360.0); zns = fmod(zns, 360.0); ps = fmod(ps, 360.0); dr_tot = 0.0; dn_tot = 0.0; for (i = 1; i <= 3; i++) { xcorsta[i] = 0.0; } //*** 1 2 3 4 5 6 7 8 9 //*** columns are s,h,p,N',ps, dR(ip),dT(ip),dR(op),dT(op) for (j = 1; j <= 5; j++) { thetaf = (datdi[j * 9 - 9] * s + datdi[j * 9 - 8] * h + datdi[j * 9 - 7] * p + datdi[j * 9 - 6] * zns + datdi[j * 9 - 5] * ps) * deg2rad; dr = datdi[j * 9 - 4] * (3.0 * sinphi * sinphi - 1.0) / 2.0 * cos(thetaf) + datdi[j * 9 - 2] * (3.0 * sinphi * sinphi - 1.0) / 2.0 * sin(thetaf); dn = datdi[j * 9 - 3] * (cosphi * sinphi * 2.0) * cos(thetaf) + datdi[j * 9 - 1] * (cosphi * sinphi * 2.0) * sin(thetaf); de = 0.0; dr_tot = dr_tot + dr; dn_tot = dn_tot + dn; xcorsta[1] = xcorsta[1] + dr * cosla * cosphi - de * sinla - dn * sinphi * cosla; xcorsta[2] = xcorsta[2] + dr * sinla * cosphi + de * cosla - dn * sinphi * sinla; xcorsta[3] = xcorsta[3] + dr * sinphi + dn * cosphi; } for (i = 1; i <= 3; i++) { xcorsta[i] = xcorsta[i] / 1000.0; } return (1); } int step2diu(double *xsta, double fhr, double t, double *xcorsta) { //*** last change: vd 17 may 00 1:20 pm //*** these are the subroutines for the step2 of the tidal corrections. //*** they are called to account for the frequency dependence //*** of the love numbers. // implicit double precision (a-h,o-z) // double precision xsta(3),xcorsta(3),datdi(9,31) // double precision deg2rad // data deg2rad/0.017453292519943295769d0/ double deg2rad = 0.017453292519943295769; double s, tau, pr, h, zns, p, ps, rsta, sinphi, cosphi, cosla, sinla, zla, thetaf, dr, dn, de; int i, j; //*** note, following table is derived from dehanttideinelMJD.f (2000oct30 // 16:10) //*** has minor differences from that of dehanttideinel.f (2000apr17 14:10) //*** D.M. edited to strictly follow published table 7.5a (2006aug08 13:46) //*** cf. table 7.5a of IERS conventions 2003 (TN.32, pg.82) //*** columns are s,h,p,N',ps, dR(ip),dR(op),dT(ip),dT(op) //*** units of mm double datdi[279] /* was [9][31] */ = { -3., 0., 2., 0., 0., -.01, -.01, 0., 0., -3., 2., 0., 0., 0., -.01, -.01, 0., 0., -2., 0., 1., -1., 0., -.02, -.01, 0., 0., -2., 0., 1., 0., 0., -.08, 0., .01, .01, -2., 2., -1., 0., 0., -.02, -.01, 0., 0., -1., 0., 0., -1., 0., -.1, 0., 0., 0., -1., 0., 0., 0., 0., -.51, 0., -.02, .03, -1., 2., 0., 0., 0., .01, 0., 0., 0., 0., -2., 1., 0., 0., .01, 0., 0., 0., 0., 0., -1., 0., 0., .02, .01, 0., 0., 0., 0., 1., 0., 0., .06, 0., 0., 0., 0., 0., 1., 1., 0., .01, 0., 0., 0., 0., 2., -1., 0., 0., .01, 0., 0., 0., 1., -3., 0., 0., 1., -.06, 0., 0., 0., 1., -2., 0., 1., 0., .01, 0., 0., 0., 1., -2., 0., 0., 0., -1.23, -.07, .06, .01, 1., -1., 0., 0., -1., .02, 0., 0., 0., 1., -1., 0., 0., 1., .04, 0., 0., 0., 1., 0., 0., -1., 0., -.22, .01, .01, 0., 1., 0., 0., 0., 0., 12., -.78, -.67, -.03, 1., 0., 0., 1., 0., 1.73, -.12, -.1, 0., 1., 0., 0., 2., 0., -.04, 0., 0., 0., 1., 1., 0., 0., -1., -.5, -.01, .03, 0., 1., 1., 0., 0., 1., .01, 0., 0., 0., 1., 1., 0., 1., -1., -.01, 0., 0., 0., 1., 2., -2., 0., 0., -.01, 0., 0., 0., 1., 2., 0., 0., 0., -.11, .01, .01, 0., 2., -2., 1., 0., 0., -.01, 0., 0., 0., 2., 0., -1., 0., 0., -.02, .02, 0., .01, 3., 0., 0., 0., 0., 0., .01, 0., .01, 3., 0., 0., 1., 0., 0., .01, 0., 0.}; /* data ((datdi(i,j),i=1,9),j=1,31)/ * -3., 0., 2., 0., 0.,-0.01,-0.01, 0.0 , 0.0, * -3., 2., 0., 0., 0.,-0.01,-0.01, 0.0 , 0.0, * -2., 0., 1.,-1., 0.,-0.02,-0.01, 0.0 , 0.0, *****----------------------------------------------------------------------- ****** -2., 0., 1., 0., 0.,-0.08,-0.05, 0.01,-0.02, !*** original entry * -2., 0., 1., 0., 0.,-0.08, 0.00, 0.01, 0.01, !*** table 7.5a *****----------------------------------------------------------------------- * -2., 2.,-1., 0., 0.,-0.02,-0.01, 0.0 , 0.0, *****----------------------------------------------------------------------- ****** -1., 0., 0.,-1., 0.,-0.10,-0.05, 0.0 ,-0.02, !*** original entry * -1., 0., 0.,-1., 0.,-0.10, 0.00, 0.00, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- ****** -1., 0., 0., 0., 0.,-0.51,-0.26,-0.02,-0.12, !*** original entry * -1., 0., 0., 0., 0.,-0.51, 0.00,-0.02, 0.03, !*** table 7.5a *****----------------------------------------------------------------------- * -1., 2., 0., 0., 0., 0.01, 0.0 , 0.0 , 0.0, * 0.,-2., 1., 0., 0., 0.01, 0.0 , 0.0 , 0.0, * 0., 0.,-1., 0., 0., 0.02, 0.01, 0.0 , 0.0, *****----------------------------------------------------------------------- ****** 0., 0., 1., 0., 0., 0.06, 0.02, 0.0 , 0.01, !*** original entry * 0., 0., 1., 0., 0., 0.06, 0.00, 0.00, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- * 0., 0., 1., 1., 0., 0.01, 0.0 , 0.0 , 0.0, * 0., 2.,-1., 0., 0., 0.01, 0.0 , 0.0 , 0.0, * 1.,-3., 0., 0., 1.,-0.06, 0.00, 0.00, 0.00, !*** table 7.5a * 1.,-2., 0., 1., 0., 0.01, 0.0 , 0.0 , 0.0, *****----------------------------------------------------------------------- ****** 1.,-2., 0., 0., 0.,-1.23,-0.05, 0.06,-0.06, !*** original entry * 1.,-2., 0., 0., 0.,-1.23,-0.07, 0.06, 0.01, !*** table 7.5a *****----------------------------------------------------------------------- * 1.,-1., 0., 0.,-1., 0.02, 0.0 , 0.0 , 0.0, * 1.,-1., 0., 0., 1., 0.04, 0.0 , 0.0 , 0.0, * 1., 0., 0.,-1., 0.,-0.22, 0.01, 0.01, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- ****** 1., 0., 0., 0., 0.,12.02,-0.45,-0.66, 0.17, !*** original entry * 1., 0., 0., 0., 0.,12.00,-0.78,-0.67,-0.03, !*** table 7.5a *****----------------------------------------------------------------------- ****** 1., 0., 0., 1., 0., 1.73,-0.07,-0.10, 0.02, !*** original entry * 1., 0., 0., 1., 0., 1.73,-0.12,-0.10, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- * 1., 0., 0., 2., 0.,-0.04, 0.0 , 0.0 , 0.0, *****----------------------------------------------------------------------- ****** 1., 1., 0., 0.,-1.,-0.50, 0.0 , 0.03, 0.0, !*** original entry * 1., 1., 0., 0.,-1.,-0.50,-0.01, 0.03, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- * 1., 1., 0., 0., 1., 0.01, 0.0 , 0.0 , 0.0, *****----------------------------------------------------------------------- ****** 0., 1., 0., 1.,-1.,-0.01, 0.0 , 0.0 , 0.0, !*** original entry * 1., 1., 0., 1.,-1.,-0.01, 0.0 , 0.0 , 0.0, !*** v.dehant 2007 *****----------------------------------------------------------------------- * 1., 2.,-2., 0., 0.,-0.01, 0.0 , 0.0 , 0.0, *****----------------------------------------------------------------------- ****** 1., 2., 0., 0., 0.,-0.12, 0.01, 0.01, 0.0, !*** original entry * 1., 2., 0., 0., 0.,-0.11, 0.01, 0.01, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- * 2.,-2., 1., 0., 0.,-0.01, 0.0 , 0.0 , 0.0, * 2., 0.,-1., 0., 0.,-0.02, 0.02, 0.0 , 0.01, * 3., 0., 0., 0., 0., 0.0 , 0.01, 0.0 , 0.01, * 3., 0., 0., 1., 0., 0.0 , 0.01, 0.0 , 0.0/ */ s = 218.31664563 + 481267.88194 * t - 0.0014663889 * t * t + 0.00000185139 * t * t * t; tau = fhr * 15.0 + 280.46061840 + 36000.77005360 * t + 0.000387930 * t * t - 0.0000000258 * t * t * t - s; pr = 1.396971278 * t + 0.000308889 * t * t + 0.000000021 * t * t * t + 0.000000007 * t * t * t * t; s = s + pr; h = 280.46645 + 36000.7697489 * t + 0.00030322222 * t * t + 0.000000020 * t * t * t - 0.00000000654 * t * t * t * t; p = 83.35324312 + 4069.01363525 * t - 0.01032172222 * t * t - 0.0000124991 * t * t * t + 0.00000005263 * t * t * t * t; zns = 234.95544499 + 1934.13626197 * t - 0.00207561111 * t * t - 0.00000213944 * t * t * t + 0.00000001650 * t * t * t * t; ps = 282.93734098 + 1.71945766667 * t + 0.00045688889 * t * t - 0.00000001778 * t * t * t - 0.00000000334 * t * t * t * t; //*** reduce angles to between 0 and 360 s = fmod(s, 360.0); tau = fmod(tau, 360.0); h = fmod(h, 360.0); p = fmod(p, 360.0); zns = fmod(zns, 360.0); ps = fmod(ps, 360.0); rsta = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2] + xsta[3] * xsta[3]); sinphi = xsta[3] / rsta; cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; cosla = xsta[1] / cosphi / rsta; sinla = xsta[2] / cosphi / rsta; zla = atan2(xsta[2], xsta[1]); for (i = 1; i <= 3; i++) { xcorsta[i] = 0.0; } for (j = 1; j <= 31; j++) { thetaf = (tau + datdi[j * 9 - 9] * s + datdi[j * 9 - 8] * h + datdi[j * 9 - 7] * p + datdi[j * 9 - 6] * zns + datdi[j * 9 - 5] * ps) * deg2rad; dr = datdi[j * 9 - 4] * 2.0 * sinphi * cosphi * sin(thetaf + zla) + datdi[j * 9 - 3] * 2.0 * sinphi * cosphi * cos(thetaf + zla); dn = datdi[j * 9 - 2] * (cosphi * cosphi - sinphi * sinphi) * sin(thetaf + zla) + datdi[j * 9 - 1] * (cosphi * cosphi - sinphi * sinphi) * cos(thetaf + zla); //***** following correction by V.Dehant to match eq.16b, p.81, 2003 // Conventions //***** de=datdi(8,j)*sinphi*cos(thetaf+zla)+ de = datdi[j * 9 - 2] * sinphi * cos(thetaf + zla) - datdi[j * 9 - 1] * sinphi * sin(thetaf + zla); xcorsta[1] = xcorsta[1] + dr * cosla * cosphi - de * sinla - dn * sinphi * cosla; xcorsta[2] = xcorsta[2] + dr * sinla * cosphi + de * cosla - dn * sinphi * sinla; xcorsta[3] = xcorsta[3] + dr * sinphi + dn * cosphi; } for (i = 1; i <= 3; i++) { xcorsta[i] = xcorsta[i] / 1000.0; } return (1); } int st1l1(double *xsta, double *xsun, double *xmon, double fac2sun, double fac2mon, double *xcorsta) { //*** this subroutine gives the corrections induced by the latitude dependence //*** given by l^(1) in mahtews et al (1991) //*** input: xsta,xsun,xmon,fac3sun,fac3mon //*** output: xcorsta // implicit double precision (a-h,o-z) // dimension xsta(3),xsun(3),xmon(3),xcorsta(3) double l1, l1d, l1sd, rsta, sinphi, cosphi, sinla, cosla, costwola, sintwola, rmon, rsun, dnsun, dnmon, desun, demon, dn, de; ; l1d = 0.0012; l1sd = 0.0024; rsta = enorm8(xsta); sinphi = xsta[3] / rsta; cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; sinla = xsta[2] / cosphi / rsta; cosla = xsta[1] / cosphi / rsta; rmon = enorm8(xmon); rsun = enorm8(xsun); //*** for the diurnal band l1 = l1d; dnsun = -l1 * sinphi * sinphi * fac2sun * xsun[3] * (xsun[1] * cosla + xsun[2] * sinla) / rsun / rsun; dnmon = -l1 * sinphi * sinphi * fac2mon * xmon[3] * (xmon[1] * cosla + xmon[2] * sinla) / rmon / rmon; desun = l1 * sinphi * (cosphi * cosphi - sinphi * sinphi) * fac2sun * xsun[3] * (xsun[1] * sinla - xsun[2] * cosla) / rsun / rsun; demon = l1 * sinphi * (cosphi * cosphi - sinphi * sinphi) * fac2mon * xmon[3] * (xmon[1] * sinla - xmon[2] * cosla) / rmon / rmon; de = 3.0 * (desun + demon); dn = 3.0 * (dnsun + dnmon); xcorsta[1] = -de * sinla - dn * sinphi * cosla; xcorsta[2] = de * cosla - dn * sinphi * sinla; xcorsta[3] = dn * cosphi; //*** for the semi-diurnal band l1 = l1sd; costwola = cosla * cosla - sinla * sinla; sintwola = 2.0 * cosla * sinla; dnsun = -l1 / 2.0 * sinphi * cosphi * fac2sun * ((xsun[1] * xsun[1] - xsun[2] * xsun[2]) * costwola + 2.0 * xsun[1] * xsun[2] * sintwola) / rsun / rsun; dnmon = -l1 / 2.0 * sinphi * cosphi * fac2mon * ((xmon[1] * xmon[1] - xmon[2] * xmon[2]) * costwola + 2.0 * xmon[1] * xmon[2] * sintwola) / rmon / rmon; desun = -l1 / 2.0 * sinphi * sinphi * cosphi * fac2sun * ((xsun[1] * xsun[1] - xsun[2] * xsun[2]) * sintwola - 2.0 * xsun[1] * xsun[2] * costwola) / rsun / rsun; demon = -l1 / 2.0 * sinphi * sinphi * cosphi * fac2mon * ((xmon[1] * xmon[1] - xmon[2] * xmon[2]) * sintwola - 2.0 * xmon[1] * xmon[2] * costwola) / rmon / rmon; de = 3.0 * (desun + demon); dn = 3.0 * (dnsun + dnmon); xcorsta[1] = xcorsta[1] - de * sinla - dn * sinphi * cosla; xcorsta[2] = xcorsta[2] + de * cosla - dn * sinphi * sinla; xcorsta[3] = xcorsta[3] + dn * cosphi; return (1); } int st1isem(double *xsta, double *xsun, double *xmon, double fac2sun, double fac2mon, double *xcorsta) { //*** this subroutine gives the out-of-phase corrections induced by //*** mantle inelasticity in the diurnal band //*** input: xsta,xsun,xmon,fac2sun,fac2mon //*** output: xcorsta // implicit double precision (a-h,o-z) // dimension xsta(3),xsun(3),xmon(3),xcorsta(3) // data dhi/-0.0022d0/,dli/-0.0007d0/ double dhi, dli, rsta, sinphi, cosphi, sinla, cosla, costwola, sintwola, rmon, rsun, drsun, drmon, dnsun, dnmon, desun, demon, dr, dn, de; dhi = -0.0022; dli = -0.0007; rsta = enorm8(xsta); sinphi = xsta[3] / rsta; cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; sinla = xsta[2] / cosphi / rsta; cosla = xsta[1] / cosphi / rsta; costwola = cosla * cosla - sinla * sinla; sintwola = 2.0 * cosla * sinla; rmon = enorm8(xmon); rsun = enorm8(xsun); drsun = -3.0 / 4.0 * dhi * cosphi * cosphi * fac2sun * ((xsun[1] * xsun[1] - xsun[2] * xsun[2]) * sintwola - 2.0 * xsun[1] * xsun[2] * costwola) / rsun / rsun; drmon = -3.0 / 4.0 * dhi * cosphi * cosphi * fac2mon * ((xmon[1] * xmon[1] - xmon[2] * xmon[2]) * sintwola - 2.0 * xmon[1] * xmon[2] * costwola) / rmon / rmon; dnsun = 1.50 * dli * sinphi * cosphi * fac2sun * ((xsun[1] * xsun[1] - xsun[2] * xsun[2]) * sintwola - 2.0 * xsun[1] * xsun[2] * costwola) / rsun / rsun; dnmon = 1.50 * dli * sinphi * cosphi * fac2mon * ((xmon[1] * xmon[1] - xmon[2] * xmon[2]) * sintwola - 2.0 * xmon[1] * xmon[2] * costwola) / rmon / rmon; desun = -3.0 / 2.0 * dli * cosphi * fac2sun * ((xsun[1] * xsun[1] - xsun[2] * xsun[2]) * costwola + 2.0 * xsun[1] * xsun[2] * sintwola) / rsun / rsun; demon = -3.0 / 2.0 * dli * cosphi * fac2mon * ((xmon[1] * xmon[1] - xmon[2] * xmon[2]) * costwola + 2.0 * xmon[1] * xmon[2] * sintwola) / rmon / rmon; dr = drsun + drmon; dn = dnsun + dnmon; de = desun + demon; xcorsta[1] = dr * cosla * cosphi - de * sinla - dn * sinphi * cosla; xcorsta[2] = dr * sinla * cosphi + de * cosla - dn * sinphi * sinla; xcorsta[3] = dr * sinphi + dn * cosphi; return (1); } int st1idiu(double *xsta, double *xsun, double *xmon, double fac2sun, double fac2mon, double *xcorsta) { //*** this subroutine gives the out-of-phase corrections induced by //*** mantle inelasticity in the diurnal band //*** input: xsta,xsun,xmon,fac2sun,fac2mon //*** output: xcorsta // implicit double precision (a-h,o-z) // dimension xsta(3),xsun(3),xmon(3),xcorsta(3) // data dhi/-0.0025d0/,dli/-0.0007d0/ double dhi, dli, rsta, sinphi, cosphi, cos2phi, sinla, cosla, rmon, rsun, drsun, drmon, dnsun, dnmon, desun, demon, dr, dn, de; dhi = -0.0025; dli = -0.0007; rsta = enorm8(xsta); sinphi = xsta[3] / rsta; cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; cos2phi = cosphi * cosphi - sinphi * sinphi; sinla = xsta[2] / cosphi / rsta; cosla = xsta[1] / cosphi / rsta; rmon = enorm8(xmon); rsun = enorm8(xsun); drsun = -3.0 * dhi * sinphi * cosphi * fac2sun * xsun[3] * (xsun[1] * sinla - xsun[2] * cosla) / rsun / rsun; drmon = -3.0 * dhi * sinphi * cosphi * fac2mon * xmon[3] * (xmon[1] * sinla - xmon[2] * cosla) / rmon / rmon; dnsun = -3.0 * dli * cos2phi * fac2sun * xsun[3] * (xsun[1] * sinla - xsun[2] * cosla) / rsun / rsun; dnmon = -3.0 * dli * cos2phi * fac2mon * xmon[3] * (xmon[1] * sinla - xmon[2] * cosla) / rmon / rmon; desun = -3.0 * dli * sinphi * fac2sun * xsun[3] * (xsun[1] * cosla + xsun[2] * sinla) / rsun / rsun; demon = -3.0 * dli * sinphi * fac2mon * xmon[3] * (xmon[1] * cosla + xmon[2] * sinla) / rmon / rmon; dr = drsun + drmon; dn = dnsun + dnmon; de = desun + demon; xcorsta[1] = dr * cosla * cosphi - de * sinla - dn * sinphi * cosla; xcorsta[2] = dr * sinla * cosphi + de * cosla - dn * sinphi * sinla; xcorsta[3] = dr * sinphi + dn * cosphi; return (1); } double enorm8(double *a) { //*** compute euclidian norm of a vector (of length 3) // double precision a(3) double enorm8_return; enorm8_return = sqrt(a[1] * a[1] + a[2] * a[2] + a[3] * a[3]); return (enorm8_return); } int sprod(double *x, double *y, double *scal, double *r1, double *r2) { //*** computation of the scalar-product of two vectors and their norms //*** input: x(i),i=1,2,3 -- components of vector x //*** y(i),i=1,2,3 -- components of vector y //*** output: scal -- scalar product of x and y //*** r1,r2 -- lengths of the two vectors x and y // implicit double precision (a-h,o-z) // double x(4),y(4); *r1 = sqrt(x[1] * x[1] + x[2] * x[2] + x[3] * x[3]); *r2 = sqrt(y[1] * y[1] + y[2] * y[2] + y[3] * y[3]); *scal = x[1] * y[1] + x[2] * y[2] + x[3] * y[3]; return (1); } int moonxyz(double mjd, double fmjd, double *rm) { //*** get low-precision, geocentric coordinates for moon (ECEF) //*** input: mjd/fmjd, is Modified Julian Date (and fractional) in GPS time //*** output: rm, is geocentric lunar position vector [m] in ECEF //*** 1."satellite orbits: models, methods, applications" montenbruck & // gill(2000) //*** section 3.3.2, pg. 72-73 //*** 2."astronomy on the personal computer, 4th ed." montenbruck & pfleger //(2005) //*** section 3.2, pg. 38-39 routine MiniMoon // implicit double precision(a-h,o-z) // dimension rm(3) // common/stuff/rad,pi,pi2 //*** use TT for lunar ephemerides double tsecgps, tsectt, fmjdtt, tjdtt, t, el0, el, elp, f, d, selond, q, selatd, rse, oblir, sselat, cselat, sselon, cselon, t1, t2, t3; double ghar; tsecgps = fmjd * 86400.0; //!*** GPS time (sec of day) tsectt = gps2tt(tsecgps); //!*** TT time (sec of day) fmjdtt = tsectt / 86400.0; //!*** TT time (fract. day) //*** julian centuries since 1.5 january 2000 (J2000) //*** (note: also low precision use of mjd --> tjd) tjdtt = round(mjd) + fmjdtt + 2400000.50; //!*** Julian Date, TT t = (tjdtt - 2451545.0) / 36525.0; //!*** julian centuries, TT //*** el0 -- mean longitude of Moon (deg) //*** el -- mean anomaly of Moon (deg) //*** elp -- mean anomaly of Sun (deg) //*** f -- mean angular distance of Moon from ascending node (deg) //*** d -- difference between mean longitudes of Sun and Moon (deg) //*** equations 3.47, p.72 el0 = 218.316170 + (481267.880880 - 1.3972) * t; el = 134.962920 + 477198.867530 * t; elp = 357.525430 + 35999.049440 * t; f = 93.272830 + 483202.018730 * t; d = 297.850270 + 445267.111350 * t; //*** longitude w.r.t. equinox and ecliptic of year 2000 selond = el0 //!*** eq 3.48, p.72 + 22640.0 / 3600.0 * sin((el) / rad) + 769.0 / 3600.0 * sin((el + el) / rad) - 4586.0 / 3600.0 * sin((el - d - d) / rad) + 2370.0 / 3600.0 * sin((d + d) / rad) - 668.0 / 3600.0 * sin((elp) / rad) - 412.0 / 3600.0 * sin((f + f) / rad) - 212.0 / 3600.0 * sin((el + el - d - d) / rad) - 206.0 / 3600.0 * sin((el + elp - d - d) / rad) + 192.0 / 3600.0 * sin((el + d + d) / rad) - 165.0 / 3600.0 * sin((elp - d - d) / rad) + 148.0 / 3600.0 * sin((el - elp) / rad) - 125.0 / 3600.0 * sin((d) / rad) - 110.0 / 3600.0 * sin((el + elp) / rad) - 55.0 / 3600.0 * sin((f + f - d - d) / rad); //*** latitude w.r.t. equinox and ecliptic of year 2000 q = 412.0 / 3600.0 * sin((f + f) / rad) + 541.0 / 3600.0 * sin((elp) / rad); selatd = //!*** eq 3.49, p.72 +18520.0 / 3600.0 * sin((f + selond - el0 + q) / rad) - 526.0 / 3600.0 * sin((f - d - d) / rad) + 44.0 / 3600.0 * sin((el + f - d - d) / rad) - 31.0 / 3600.0 * sin((-el + f - d - d) / rad) - 25.0 / 3600.0 * sin((-el - el + f) / rad) - 23.0 / 3600.0 * sin((elp + f - d - d) / rad) + 21.0 / 3600.0 * sin((-el + f) / rad) + 11.0 / 3600.0 * sin((-elp + f - d - d) / rad); //*** distance from Earth center to Moon (m) rse = 385000.0 * 1000.0 //!*** eq 3.50, p.72 - 20905.0 * 1000.0 * cos((el) / rad) - 3699.0 * 1000.0 * cos((d + d - el) / rad) - 2956.0 * 1000.0 * cos((d + d) / rad) - 570.0 * 1000.0 * cos((el + el) / rad) + 246.0 * 1000.0 * cos((el + el - d - d) / rad) - 205.0 * 1000.0 * cos((elp - d - d) / rad) - 171.0 * 1000.0 * cos((el + d + d) / rad) - 152.0 * 1000.0 * cos((el + elp - d - d) / rad); // printf("%.15lf %.15lf %.15lf %.15lf // %.15lf\n",selond,selatd,rse,oblir,selond); //*** convert spherical ecliptic coordinates to equatorial cartesian //*** precession of equinox wrt. J2000 (p.71) selond = selond + 1.39720 * t; //!*** degrees //*** position vector of moon (mean equinox & ecliptic of J2000) (EME2000, // ICRF) //*** (plus long. advance due to precession -- eq. // above) oblir = 23.439291110 / rad; //!*** obliquity of the J2000 ecliptic sselat = sin(selatd / rad); cselat = cos(selatd / rad); sselon = sin(selond / rad); cselon = cos(selond / rad); t1 = rse * cselon * cselat; //!*** meters !*** eq. 3.51, p.72 t2 = rse * sselon * cselat; //!*** meters !*** eq. 3.51, p.72 t3 = rse * sselat; //!*** meters !*** eq. 3.51, p.72 rot1(-oblir, t1, t2, t3, rm); //!*** eq. 3.51, p.72 //*** convert position vector of moon to ECEF (ignore polar motion/LOD) getghar(mjd, fmjd, &ghar); //!*** sec 2.3.1,p.33 rot3(ghar, rm[1], rm[2], rm[3], rm); //!*** eq. 2.89, p.37 return (1); } int rot1(double theta, double x, double y, double z, double *rm) { //*** rotate coordinate axes about 1 axis by angle of theta radians //*** x,y,z transformed into u,v,w // implicit double precision(a-h,o-z) double s, c; s = sin(theta); c = cos(theta); rm[1] = x; rm[2] = c * y + s * z; rm[3] = c * z - s * y; return (1); } int sunxyz(double mjd, double fmjd, double *rs) { //*** get low-precision, geocentric coordinates for sun (ECEF) //*** input, mjd/fmjd, is Modified Julian Date (and fractional) in GPS time //*** output, rs, is geocentric solar position vector [m] in ECEF //*** 1."satellite orbits: models, methods, applications" montenbruck & // gill(2000) //*** section 3.3.2, pg. 70-71 //*** 2."astronomy on the personal computer, 4th ed." montenbruck & pfleger //(2005) //*** section 3.2, pg. 39 routine MiniSun double obe, sobe, cobe, opod, tsecgps, tsectt, fmjdtt, tjdtt, t, emdeg, em, em2, r, slond, slon, sslon, cslon; double rs1, rs2, rs3, ghar; //*** mean elements for year 2000, sun ecliptic orbit wrt. Earth obe = 23.43929111 / rad; //!*** obliquity of the J2000 ecliptic sobe = sin(obe); cobe = cos(obe); opod = 282.9400; //!*** RAAN + arg.peri. (deg.) //*** use TT for solar ephemerides tsecgps = fmjd * 86400.0; //!*** GPS time (sec of day) tsectt = gps2tt(tsecgps); //!*** TT time (sec of day) fmjdtt = tsectt / 86400.0; //!*** TT time (fract. day) //*** julian centuries since 1.5 january 2000 (J2000) //*** (note: also low precision use of mjd --> tjd) tjdtt = round(mjd) + fmjdtt + 2400000.5; //!*** Julian Date, TT t = (tjdtt - 2451545.0) / 36525.0; //!*** julian centuries, TT emdeg = 357.5256 + 35999.049 * t; //!*** degrees em = emdeg / rad; //!*** radians em2 = em + em; //!*** radians //*** series expansions in mean anomaly, em (eq. 3.43, p.71) r = (149.619 - 2.499 * cos(em) - 0.021 * cos(em2)) * 1.0e9; //!*** m. slond = opod + emdeg + (6892.0 * sin(em) + 72.0 * sin(em2)) / 3600.0; //*** precession of equinox wrt. J2000 (p.71) slond = slond + 1.39720 * t; //!*** degrees // fprintf(stderr,"%.12lf\n",em); //*** position vector of sun (mean equinox & ecliptic of J2000) (EME2000, // ICRF) //*** (plus long. advance due to precession -- eq. // above) slon = slond / rad; //!*** radians sslon = sin(slon); cslon = cos(slon); rs1 = r * cslon; //!*** meters !*** eq. 3.46, p.71 rs2 = r * sslon * cobe; //!*** meters !*** eq. 3.46, p.71 rs3 = r * sslon * sobe; //!*** meters !*** eq. 3.46, p.71 // printf("%lf %lf %lf\n",rs1,rs2,rs3); //*** convert position vector of sun to ECEF (ignore polar motion/LOD) getghar(mjd, fmjd, &ghar); //!*** sec 2.3.1,p.33 rot3(ghar, rs1, rs2, rs3, rs); //!*** eq. 2.89, p.37 return (1); } int rot3(double theta, double x, double y, double z, double *rs) { //*** rotate coordinate axes about 3 axis by angle of theta radians //*** x,y,z transformed into u,v,w // implicit double precision(a-h,o-z) double s, c; s = sin(theta); c = cos(theta); rs[1] = c * x + s * y; rs[2] = c * y - s * x; rs[3] = z; return (1); } double gps2tt(double tsec) { //*** convert tsec in GPS to tsec in TT double gps2tt_return; gps2tt_return = tsec + 51.1840; //!*** fixed offset return (gps2tt_return); } int getghar(double mjd, double fmjd, double *ghar) { //*** convert mjd/fmjd in GPS time to Greenwich hour angle (in radians) //*** "satellite orbits: models, methods, applications" montenbruck & // gill(2000) //*** section 2.3.1, pg. 33 //*** need UT to get sidereal time ("astronomy on the personal computer", 4th // ed) //*** (pg.43, montenbruck & pfleger, springer, // 2005) double tsecgps, tsecutc, fmjdutc, d, ghad, i; tsecgps = fmjd * 86400.0; //!*** GPS time (sec of day) tsecutc = gps2utc(tsecgps); //!*** UTC time (sec of day) fmjdutc = tsecutc / 86400.0; //!*** UTC time (fract. day) //***** d = MJD - 51544.5d0 !*** footnote d = (round(mjd) - 51544) + (fmjdutc - 0.5); //!*** days since J2000 //*** greenwich hour angle for J2000 (12:00:00 on 1 Jan 2000) //***** ghad = 100.46061837504d0 + 360.9856473662862d0*d !*** eq. 2.85 //(+digits) ghad = 280.460618375040 + 360.98564736628620 * d; //!*** corrn. (+digits) //**** normalize to 0-360 and convert to radians i = floor(ghad / 360.0); *ghar = (ghad - i * 360.0) / rad; while (*ghar > pi2) { *ghar = *ghar - pi2; } while (*ghar < 0.0) { *ghar = *ghar + pi2; } return (1); } double gps2utc(double tsec) { //*** convert tsec in GPS to tsec in UTC //*** GPS is ahead of UTC (c.f. USNO) //*** UTC is behind GPS //*** gpsleap() is (so far) positive (and increasing) //*** so, must subtract gpsleap from GPS to get UTC double gps2utc_return; gps2utc_return = tsec - gpsleap(tsec); return (gps2utc_return); } double gpsleap(double tsec) { //*** return total leap seconds since GPS epoch 1980jan06 //*** note: does **NOT** return the full TAI-UTC delta //*** input time is GPS seconds -- initialized by setjd0() //*** Y2K -- only functional between 1980jan06-00:00:00 (GPS time start) //*** and hard-coded date // implicit double precision(a-h,o-z) //***** "Julian Date Converter" //***** http://aa.usno.navy.mil/data/docs/JulianDate.php //***** "Bulletin C" //***** http://hpiers.obspm.fr/eoppc/bul/bulc/bulletinc.dat //***** parameter(mjdhard=55196) !*** cut-off date 2009dec31 //***** parameter(mjdhard=55377) !*** cut-off date 2010jun30 //***** parameter(mjdhard=55561) !*** cut-off date 2010dec31 //***** parameter(mjdhard=55742) !*** cut-off date 2011jun30 //***** parameter(mjdhard=55926) !*** cut-off date 2011dec31 //***** parameter(mjdhard=56108) !*** cut-off date 2012jun30 //***** parameter(mjdhard=56292) !*** cut-off date 2012dec31 //***** parameter(mjdhard=56473) !*** cut-off date 2013jun30 //***** parameter(mjdhard=56657) !*** cut-off date 2013dec31 //***** parameter(mjdhard=56838) !*** cut-off date 2014jun30 //***** parameter(mjdhard=57022) !*** cut-off date 2014dec31 //***** parameter(mjdhard=57203) !*** cut-off date 2015jun30 //***** parameter(mjdhard=57387) !*** cut-off date 2015dec31 //***** parameter(mjdhard=57569) !*** cut-off date 2016jun30 //***** parameter(mjdhard=57753) !*** cut-off date 2016dec31 //***** parameter(mjdhard=57934) !*** cut-off date 2017jun30 //***** parameter(mjdhard=58118) !*** cut-off date 2017dec31 // parameter(mjdhard=58299) !*** cut-off date 2018jun30 double mjdhard = 58664.0; double ttsec, mjd0t, tai_utc, gpsleap_return; // save /mjdoff/ // common/mjdoff/mjd0 //*** clone for tests (and do any rollover) ttsec = tsec; mjd0t = mjd0; while (ttsec >= 86400.0) { ttsec = ttsec - 86400.0; mjd0t = mjd0t + 1; } while (ttsec < 0.0) { ttsec = ttsec + 86400.0; mjd0t = mjd0t - 1; } //*** test date limits if (mjd0t > mjdhard) { fprintf(stderr, "FATAL ERROR --\n"); fprintf(stderr, "exceeded cut-off date in gpsleap()\n"); die("", ""); } if (mjd0t < 44244.0) { // then !*** 1980jan06 die("FATAL ERROR --\n", "cut-off date underflow in gpsleap()\n"); } //*** http://maia.usno.navy.mil/ser7/tai-utc.dat //*** 1980 JAN 1 =JD 2444239.5 TAI-UTC= 19.0s //*** 1981 JUL 1 =JD 2444786.5 TAI-UTC= 20.0s //*** 1982 JUL 1 =JD 2445151.5 TAI-UTC= 21.0s //*** 1983 JUL 1 =JD 2445516.5 TAI-UTC= 22.0s //*** 1985 JUL 1 =JD 2446247.5 TAI-UTC= 23.0s //*** 1988 JAN 1 =JD 2447161.5 TAI-UTC= 24.0s //*** 1990 JAN 1 =JD 2447892.5 TAI-UTC= 25.0s //*** 1991 JAN 1 =JD 2448257.5 TAI-UTC= 26.0s //*** 1992 JUL 1 =JD 2448804.5 TAI-UTC= 27.0s //*** 1993 JUL 1 =JD 2449169.5 TAI-UTC= 28.0s //*** 1994 JUL 1 =JD 2449534.5 TAI-UTC= 29.0s //*** 1996 JAN 1 =JD 2450083.5 TAI-UTC= 30.0s //*** 1997 JUL 1 =JD 2450630.5 TAI-UTC= 31.0s //*** 1999 JAN 1 =JD 2451179.5 TAI-UTC= 32.0s //*** 2006 JAN 1 =JD 2453736.5 TAI-UTC= 33.0s //*** 2009 JAN 1 =JD 2454832.5 TAI-UTC= 34.0s //*** 2012 JUL 1 =JD 2456109.5 TAI-UTC= 35.0s //*** 2015 JUL 1 =JD 2457204.5 TAI-UTC= 36.0s //*** 2017 JAN 1 =JD 2457754.5 TAI-UTC= 37.0s //*** test against newest leaps first tai_utc = 0.0; if (mjd0t >= 57754) { // then !*** 2017 JAN 1 = 57754 tai_utc = 37.0; } else if (mjd0t >= 57204) { // then !*** 2015 JUL 1 = 57204 tai_utc = 36.0; } else if (mjd0t >= 56109) { // then !*** 2012 JUL 1 = 56109 tai_utc = 35.0; } else if (mjd0t >= 54832) { // then !*** 2009 JAN 1 = 54832 tai_utc = 34.0; } else if (mjd0t >= 53736) { // then !*** 2006 JAN 1 = 53736 tai_utc = 33.0; } else if (mjd0t >= 51179) { // then !*** 1999 JAN 1 = 51179 tai_utc = 32.0; } else if (mjd0t >= 50630) { // then !*** 1997 JUL 1 = 50630 tai_utc = 31.0; } else if (mjd0t >= 50083) { // then !*** 1996 JAN 1 = 50083 tai_utc = 30.0; } else if (mjd0t >= 49534) { // then !*** 1994 JUL 1 = 49534 tai_utc = 29.0; } else if (mjd0t >= 49169) { // then !*** 1993 JUL 1 = 49169 tai_utc = 28.0; } else if (mjd0t >= 48804) { // then !*** 1992 JUL 1 = 48804 tai_utc = 27.0; } else if (mjd0t >= 48257) { // then !*** 1991 JAN 1 = 48257 tai_utc = 26.0; } else if (mjd0t >= 47892) { // then !*** 1990 JAN 1 = 47892 tai_utc = 25.0; } else if (mjd0t >= 47161) { // then !*** 1988 JAN 1 = 47161 tai_utc = 24.0; } else if (mjd0t >= 46247) { // then !*** 1985 JUL 1 = 46247 tai_utc = 23.0; } else if (mjd0t >= 45516) { // then !*** 1983 JUL 1 = 45516 tai_utc = 22.0; } else if (mjd0t >= 45151) { // then !*** 1982 JUL 1 = 45151 tai_utc = 21.0; } else if (mjd0t >= 44786) { // then !*** 1981 JUL 1 = 44786 tai_utc = 20.0; } else if (mjd0t >= 44239) { // then !*** 1980 JAN 1 = 44239 tai_utc = 19.0; } //*** should never get here else { die("FATAL ERROR --\n", "fell thru tests in gpsleap()\n"); } //*** convert TAI-UTC into GPS leap seconds gpsleap_return = tai_utc - 19.0; return (gpsleap_return); } int civmjd(double iyr, double imo, double idy, double ihr, double imn, double sec, double *mjd, double *fmjd) { //*** convert civil date to modified julian date //*** only valid in range mar-1900 thru feb-2100 (leap year protocols) //*** ref: hofmann-wellenhof, 2nd ed., pg 34-35 //*** operation confirmed against table 3.3 values on pg.34 double m, it1, it2; int y; if (iyr < 1900) die("year should not be smaller than 1900", ""); // stop 34588 if (imo <= 2) { y = iyr - 1.0; m = imo + 12.0; } else { y = iyr; m = imo; } it1 = floor(365.25 * y); it2 = floor(30.6001 * (m + 1.0)); *mjd = it1 + it2 + idy - 679019.0; *fmjd = (3600.0 * ihr + 60.0 * imn + sec) / 86400.0; return (1); } int mjdciv(double mjd, double fmjd, double *iyr, double *imo, double *idy, double *ihr, double *imn, double *sec) { //*** convert modified julian date to civil date //*** imo in range 1-12, idy in range 1-31 //*** only valid in range mar-1900 thru feb-2100 //*** ref: hofmann-wellenhof, 2nd ed., pg 34-35 //*** operation confirmed for leap years (incl. year 2000) double rjd, ia, ib, ic, id, ie, it1, it2, it3, tmp; rjd = mjd + fmjd + 2400000.5; ia = floor(rjd + 0.5); ib = floor(ia + 1537.0); ic = floor((ib - 122.1) / 365.25); id = floor(365.25 * ic); ie = floor((ib - id) / 30.6001); //*** the fractional part of a julian day is fractional mjd + 0.5 //*** therefore, fractional part of julian day + 0.5 is fractional mjd it1 = floor(ie * 30.6001); *idy = floor(ib - id - it1 + fmjd); it2 = floor(ie / 14.0); *imo = ie - 1.0 - 12 * it2; it3 = floor((7.0 + *imo) / 10.0); *iyr = ic - 4715.0 - it3; tmp = fmjd * 24.0; *ihr = floor(tmp); tmp = (tmp - *ihr) * 60.0; *imn = floor(tmp); *sec = (tmp - *imn) * 60.0; return (1); } int geo2xyz(double gla, double glo, double eht, double *x, double *y, double *z) { // convert geodetic lat, long, ellip ht. to x,y,z double sla, cla, w, w2, en; sla = sin(gla); cla = cos(gla); w2 = 1.0 - e2 * sla * sla; w = sqrt(w2); en = a / w; *x = (en + eht) * cla * cos(glo); *y = (en + eht) * cla * sin(glo); *z = (en * (1.0 - e2) + eht) * sla; return (1); } /* below are functions by Kang Wang */ int isleapyr(int yr) { if ((yr % 4) != 0) { return 0; } else if ((yr % 100) != 0) { return 1; } else if ((yr % 400) != 0) { return 0; } else { return 1; } } int day2date(double year, double day, double *mon, double *id) { int yr, iday; int leapyr; // char tmp_str[200]; int month = 0, day_of_month = 0; int day_of_yr[13]; // char month_str[10]; // char yr_str[10],yr_short[10]; // char date_str[10]; // char str_out[10]; yr = (int)year; iday = (int)ceil(day); // printf("yr = %d, day_of_yr = %d\n",yr,iday); leapyr = isleapyr(yr); if (leapyr == 1) { day_of_yr[0] = 0; day_of_yr[1] = 31; day_of_yr[2] = 60; day_of_yr[3] = 91; day_of_yr[4] = 121; day_of_yr[5] = 152; day_of_yr[6] = 182; day_of_yr[7] = 213; day_of_yr[8] = 244; day_of_yr[9] = 274; day_of_yr[10] = 305; day_of_yr[11] = 335; day_of_yr[12] = 366; } else { day_of_yr[0] = 0; day_of_yr[1] = 31; day_of_yr[2] = 59; day_of_yr[3] = 90; day_of_yr[4] = 120; day_of_yr[5] = 151; day_of_yr[6] = 181; day_of_yr[7] = 212; day_of_yr[8] = 243; day_of_yr[9] = 273; day_of_yr[10] = 304; day_of_yr[11] = 334; day_of_yr[12] = 365; } if (iday > day_of_yr[0] && iday <= day_of_yr[1]) { month = 1; day_of_month = iday; } else if (iday > day_of_yr[1] && iday <= day_of_yr[2]) { month = 2; day_of_month = iday - day_of_yr[1]; } else if (iday > day_of_yr[2] && iday <= day_of_yr[3]) { month = 3; day_of_month = iday - day_of_yr[2]; } else if (iday > day_of_yr[3] && iday <= day_of_yr[4]) { month = 4; day_of_month = iday - day_of_yr[3]; } else if (iday > day_of_yr[4] && iday <= day_of_yr[5]) { month = 5; day_of_month = iday - day_of_yr[4]; } else if (iday > day_of_yr[5] && iday <= day_of_yr[6]) { month = 6; day_of_month = iday - day_of_yr[5]; } else if (iday > day_of_yr[6] && iday <= day_of_yr[7]) { month = 7; day_of_month = iday - day_of_yr[6]; } else if (iday > day_of_yr[7] && iday <= day_of_yr[8]) { month = 8; day_of_month = iday - day_of_yr[7]; } else if (iday > day_of_yr[8] && iday <= day_of_yr[9]) { month = 9; day_of_month = iday - day_of_yr[8]; } else if (iday > day_of_yr[9] && iday <= day_of_yr[10]) { month = 10; day_of_month = iday - day_of_yr[9]; } else if (iday > day_of_yr[10] && iday <= day_of_yr[11]) { month = 11; day_of_month = iday - day_of_yr[10]; } else if (iday > day_of_yr[11] && iday <= day_of_yr[12]) { month = 12; day_of_month = iday - day_of_yr[11]; } // sprintf(yr_str,"%d",yr); // memset(yr_short, '\0', sizeof(yr_short)); // yr_str[4]='\0'; // strcpy(yr_str,yr); // sprintf(month_str,"%02d",month); // sprintf(date_str,"%02d",day_of_month); // strncpy(yr_short,yr_str+2,2); // strcat(str_out,yr_short); // strcat(str_out,yr_str); // strcat(str_out,month_str); // strcat(str_out,month_str); // strcat(str_out,date_str); // fprintf(stdout,"%s\n",str_out); // printf("%04d%02d%02d\n",yr,month,day_of_month); *mon = month; *id = day_of_month; return (1); } GMTSAR_V5.7/gmtsar/sbas.h000644 015705 000000 00000004340 13505462013 016137 0ustar00sandwellwheel000000 000000 /* $Id: sbas.h 39 2016-06-18 03/16/24 Xiaohua Xu $ */ /* sbas functions */ #include #include #include"gmt.h" int parse_command_ts(int64_t, char **, float *, double *, double *, double *, int64_t *, int64_t *, int64_t *); int allocate_memory_ts(int64_t **, double **, double **, double **, float **, char ***, char ***, int64_t **, double **, int64_t **, double **, double **, double **, int64_t **, float **, float **, float **, float **, float **, float **, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t **); int init_array_ts(double *, double *, float *, float *, float *, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t); int read_table_data_ts(void *, FILE *, FILE *, char **, char **, int64_t *, float *, int64_t *, float *, float *, int64_t, int64_t, int64_t, int64_t, struct GMT_GRID **, int64_t *, double *); int init_G_ts(double *, double *, int64_t, int64_t, int64_t, int64_t, int64_t *, int64_t *, double *, float, float *, double); int lsqlin_sov_ts(int64_t, int64_t, float *, float *, int64_t *, double *, double *, double *, double *, double *, double *, float *, float *, int64_t, int64_t, int64_t, int64_t, double *, int64_t, int64_t, float *, int64_t, float *, int64_t *, double, double *); int write_output_ts(void *, struct GMT_GRID *, int64_t, char **, int64_t, int64_t, int64_t, int64_t, int64_t, float *, float *, float *, float *, float *, double, int64_t, int64_t *); int free_memory_ts(int64_t, float *, float *, char **, char **, float *, double *, double *, double *, int64_t *, double *, double *, int64_t *, float *, float *, double *, int64_t *, float *, float *, double *, int64_t *, int64_t *); int sum_intfs(float *, int64_t *, float *, int64_t, int64_t, int64_t); int connect(int64_t *, int64_t *, double *, int64_t *, int64_t *, int64_t, int64_t, int64_t, int64_t); double compute_noise(float *, int64_t, int64_t); int apply_screen(float *, float *, int64_t, int64_t, int64_t, int64_t *); int remove_ts(float *, float *, int64_t, int64_t, int64_t, int64_t, int64_t *, int64_t *); int rank_double(double *, int64_t *, int64_t); GMTSAR_V5.7/gmtsar/man/000755 015705 000000 00000000000 13505462013 015610 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/gmtsar/interpolate_orbit.c000644 015705 000000 00000005512 13505462013 020731 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "gmtsar.h" #include "lib_functions.h" #include "orbit.h" #include #include #include #define FACTOR 1000000 void interpolate_SAT_orbit_slow(struct SAT_ORB *, double, double *, double *, double *, int *); void interpolate_SAT_orbit(struct SAT_ORB *, double *, double *, double *, double, double *, double *, double *, int *); void hermite_c(double *, double *, double *, int, int, double, double *, int *); /*---------------------------------------------------------------*/ /* from David Sandwell's code */ void interpolate_SAT_orbit_slow(struct SAT_ORB *orb, double time, double *x, double *y, double *z, int *ir) { int k; double pt0; double *p, *pt, *pv; p = (double *)malloc(orb->nd * sizeof(double)); pv = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); /* seconds from Jan 1 */ pt0 = (24.0 * 60.0 * 60.0) * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) pt[k] = pt0 + k * orb->dsec; interpolate_SAT_orbit(orb, pt, p, pv, time, x, y, z, ir); free((double *)p); free((double *)pt); free((double *)pv); } /*---------------------------------------------------------------*/ void interpolate_SAT_orbit(struct SAT_ORB *orb, double *pt, double *p, double *pv, double time, double *x, double *y, double *z, int *ir) { /* ir; return code */ /* time; seconds since Jan 1 */ /* x, y, z; position */ int k, nval, nd; nval = 6; /* number of points to use in interpolation */ nd = orb->nd; if (debug) fprintf(stderr, " time %lf nd %d\n", time, nd); /* interpolate for each coordinate direction */ /* hermite_c c version */ for (k = 0; k < nd; k++) { p[k] = orb->points[k].px; pv[k] = orb->points[k].vx; } hermite_c(pt, p, pv, nd, nval, time, x, ir); for (k = 0; k < nd; k++) { p[k] = orb->points[k].py; pv[k] = orb->points[k].vy; } hermite_c(pt, p, pv, nd, nval, time, y, ir); if (debug) fprintf(stderr, "C pt %lf py %lf pvy %lf time %lf y %lf ir %d \n", *pt, p[0], pv[0], time, *y, *ir); for (k = 0; k < nd; k++) { p[k] = orb->points[k].pz; pv[k] = orb->points[k].vz; } hermite_c(pt, p, pv, nd, nval, time, z, ir); if (debug) fprintf(stderr, "C pt %lf pz %lf pvz %lf time %lf z %lf ir %d \n", *pt, p[0], pv[0], time, *z, *ir); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/filters/000755 015705 000000 00000000000 13505462013 016505 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/gmtsar/plxyz.c000644 015705 000000 00000014706 13505462013 016377 0ustar00sandwellwheel000000 000000 /************************************************************************ * plh2xyz converts elliptic lat, lon, hgt to geocentric X, Y, Z * * the library found at http://www.ngs.noaa.gov/PC_PROD/XYZWIN/ * ************************************************************************/ /************************************************************************ * Creator: Clyde Goad (National Geodetic Survey) * ************************************************************************/ /************************************************************************ * Modification history: * *:8301.00, CG, Creation * *:9406.16, MSS, Conversion to C. * *:9602.20, MSS, Stripped plh to xyz convertion from tlate. * *:0708.07, DTS, changed comments slightly * ************************************************************************/ #include "gmtsar.h" #include "lib_functions.h" #include "llt2xyz.h" #include void plh2xyz(double *plh, double *xyz, double A, double FL) /********1*********2*********3*********4*********5*********6*********7********* * input parameters * ---------------- * A semi-major axis of ellipsoid [units are of distance] * FL flattening of ellipsoid [unitless] * plh[] ellipsoidal coordinates of point, in geodetic latitude, * longitude east of Greenwich, and height [units for * latitude=plh[0] and longitude=plh[1] are in degrees; * height=plh[2] are distance and will be the same as * those of the input parameters] * * output parameters * ----------------- * xyz[] geocentric Cartesian coordinates [units are of distance] * * * ------------------------------ * Escobal, "Methods of Orbit Determination", 1965, Wiley & Sons, Inc., * pp. 27-29. * * see also: * ------------------------------ * xyz2plh */ { double flatfn = (TWO - FL) * FL; double funsq = (ONE - FL) * (ONE - FL); double g1; double g2; double lat_rad = deg_to_rad * plh[0]; double lon_rad = deg_to_rad * plh[1]; double sin_lat; sin_lat = sin(lat_rad); g1 = A / sqrt(ONE - flatfn * sin_lat * sin_lat); g2 = g1 * funsq + plh[2]; g1 = g1 + plh[2]; xyz[0] = g1 * cos(lat_rad); xyz[1] = xyz[0] * sin(lon_rad); xyz[0] = xyz[0] * cos(lon_rad); xyz[2] = g2 * sin_lat; } /************************************************************************ * xyz2plh Converts XYZ geocentric coordinates to Phi (latitude), * * Lambda (longitude), H (height) referred to an * * ellipsoid of semi-major axis A and flattening FL. * ************************************************************************/ /************************************************************************ * Creator: B. Archinal (USNO) * ************************************************************************/ /************************************************************************ * Modification history: * * 9007.20, BA, Creation * 9507,21, JR, Modified for use with the page programs * 9602.17, MSS, Converted to C. ************************************************************************/ void xyz2plh(double *xyz, double *plh, double A, double FL) /********1*********2*********3*********4*********5*********6*********7** * input: * ----------- * A semi-major axis of ellipsoid [units are of distance] * FL flattening of ellipsoid [unitless] * xyz[] geocentric Cartesian coordinates [units are of distance] * * output: * ----------- * plh[] ellipsoidal coordinates of point, in geodetic latitude, * longitude east of Greenwich, and height [units for * latitude=plh[0] and longitude=plh[1] are in degrees; * height=plh[2] are distance and will be the same as * those of the input parameters] * * Local: * ----------- * B semi-minor axis of ellipsoid [same units as A] * * Notes: * ----------- * This routine will fail for points on the Z axis, i.e. if X= Y= 0 * (Phi = +/- 90 degrees). * * Units of input parameters `A' and `xyz' must be the same. * * References: * ----------- * Borkowski, K. M. (1989). "Accurate algorithms to transform geocentric * to geodetic coordinates", *Bulletin Geodesique*, v. 63, pp. 50-56. * * Borkowski, K. M. (1987). "Transformation of geocentric to geodetic * coordinates without approximations", *Astrophysics and Space Science*, * v. 139, n. 1, pp. 1-4. Correction in (1988), v. 146, n. 1, p. 201. * * An equivalent formulation is recommended in the IERS Standards * (1995), draft. * ********1*********2*********3*********4*********5*********6*********7*/ { double B; double d; double e; double f; double g; double p; double q; double r; double t; double v; double x = xyz[0]; double y = xyz[1]; double z = xyz[2]; double zlong; /* * 1.0 compute semi-minor axis and set sign to that of z in order * to get sign of Phi correct */ B = A * (ONE - FL); if (z < ZERO) B = -B; /* * 2.0 compute intermediate values for latitude */ r = sqrt(x * x + y * y); e = (B * z - (A * A - B * B)) / (A * r); f = (B * z + (A * A - B * B)) / (A * r); /* * 3.0 find solution to: * t^4 + 2*E*t^3 + 2*F*t - 1 = 0 */ p = (FOUR / THREE) * (e * f + ONE); q = TWO * (e * e - f * f); d = p * p * p + q * q; if (d >= ZERO) { v = pow((sqrt(d) - q), (ONE / THREE)) - pow((sqrt(d) + q), (ONE / THREE)); } else { v = TWO * sqrt(-p) * cos(acos(q / (p * sqrt(-p))) / THREE); } /* * 4.0 improve v * NOTE: not really necessary unless point is near pole */ if (v * v < fabs(p)) { v = -(v * v * v + TWO * q) / (THREE * p); } g = (sqrt(e * e + v) + e) / TWO; t = sqrt(g * g + (f - v * g) / (TWO * g - e)) - g; plh[0] = atan((A * (ONE - t * t)) / (TWO * B * t)); /* * 5.0 compute height above ellipsoid */ plh[2] = (r - A * t) * cos(plh[0]) + (z - B) * sin(plh[0]); /* * 6.0 compute longitude east of Greenwich */ zlong = atan2(y, x); if (zlong < ZERO) zlong = zlong + twopi; plh[1] = zlong; /* * 7.0 convert latitude and longitude to degrees */ plh[0] = plh[0] * rad_to_deg; plh[1] = plh[1] * rad_to_deg; return; } GMTSAR_V5.7/gmtsar/rng_cmp.c000644 015705 000000 00000002121 13505462013 016622 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_cmp performs the range compression operation on raw radar echos. * * using a precomputed range reference function. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "gmt.h" #include "siocomplex.h" #include "soi.h" #include void rng_cmp(void *API, int ranfft, fcomplex *data, fcomplex *ref) { int i; GMT_FFT_1D(API, (float *)data, ranfft, GMT_FFT_FWD, GMT_FFT_COMPLEX); for (i = 0; i < ranfft; i++) { data[i] = Cmul(ref[i], data[i]); } GMT_FFT_1D(API, (float *)data, ranfft, GMT_FFT_INV, GMT_FFT_COMPLEX); } GMTSAR_V5.7/gmtsar/sio_struct.c000644 015705 000000 00000047214 13505462013 017407 0ustar00sandwellwheel000000 000000 /************************************************************************ * routines for handling sio struct in PRM files * ************************************************************************/ /************************************************************************ * Creator: Rob J. Mellors, San Deigo State University * * Date : December 18, 2007 * * * * Modification history: * * some slight format changes - Dec 18, 2007 - RJM * ************************************************************************/ /* null_sio_struct(struct PRM *p) sets all values to a NULL value */ /* get_sio_struct(FILE *,struct PRM *p) reads values from FILE */ /* put_sio_struct(struct PRM *p,FILE *,) writes all non-NULL values to FILE */ #include "gmtsar.h" #include "lib_functions.h" /*---------------------------------------------------------------*/ int get_prm(struct PRM *p, char *filename) { FILE *PRMfile; if ((PRMfile = fopen(filename, "r")) == NULL) die("can't open file", filename); /* set all prm parameters in structure to NULL values */ null_sio_struct(p); /* read in prm parameters */ get_sio_struct(PRMfile, p); return (EXIT_SUCCESS); } /*---------------------------------------------------------------*/ void null_sio_struct(struct PRM *p) { /* characters */ strncpy(p->input_file, NULL_CHAR, 8); strncpy(p->SLC_file, NULL_CHAR, 8); strncpy(p->out_amp_file, NULL_CHAR, 8); strncpy(p->out_data_file, NULL_CHAR, 8); strncpy(p->deskew, NULL_CHAR, 8); strncpy(p->iqflip, NULL_CHAR, 8); strncpy(p->offset_video, NULL_CHAR, 8); strncpy(p->srm, NULL_CHAR, 8); strncpy(p->ref_file, NULL_CHAR, 8); strncpy(p->led_file, NULL_CHAR, 8); strncpy(p->orbdir, NULL_CHAR, 8); strncpy(p->lookdir, NULL_CHAR, 8); strncpy(p->dtype, NULL_CHAR, 8); /* ints */ p->debug_flag = NULL_INT; p->bytes_per_line = NULL_INT; p->good_bytes = NULL_INT; p->first_line = NULL_INT; p->num_patches = NULL_INT; p->first_sample = NULL_INT; p->num_valid_az = NULL_INT; p->st_rng_bin = NULL_INT; p->num_rng_bins = NULL_INT; p->chirp_ext = NULL_INT; p->nlooks = NULL_INT; p->rshift = NULL_INT; p->ashift = NULL_INT; p->fdc_ystrt = NULL_INT; p->fdc_strt = NULL_INT; p->rec_start = NULL_INT; p->rec_stop = NULL_INT; p->SC_identity = NULL_INT; p->ref_identity = NULL_INT; p->nrows = NULL_INT; p->num_lines = NULL_INT; p->SLC_format = NULL_INT; /* doubles */ p->SC_clock_start = NULL_DOUBLE; p->SC_clock_stop = NULL_DOUBLE; p->icu_start = NULL_DOUBLE; p->clock_start = NULL_DOUBLE; p->clock_stop = NULL_DOUBLE; p->caltone = NULL_DOUBLE; p->RE = NULL_DOUBLE; p->ra = NULL_DOUBLE; p->rc = NULL_DOUBLE; p->vel = NULL_DOUBLE; p->ht = NULL_DOUBLE; p->ht_start = NULL_DOUBLE; p->ht_end = NULL_DOUBLE; p->near_range = NULL_DOUBLE; p->far_range = NULL_DOUBLE; p->prf = NULL_DOUBLE; p->xmi = NULL_DOUBLE; p->xmq = NULL_DOUBLE; p->az_res = NULL_DOUBLE; p->fs = NULL_DOUBLE; p->chirp_slope = NULL_DOUBLE; p->pulsedur = NULL_DOUBLE; p->lambda = NULL_DOUBLE; p->rhww = NULL_DOUBLE; p->pctbw = NULL_DOUBLE; p->pctbwaz = NULL_DOUBLE; p->fd1 = NULL_DOUBLE; p->fdd1 = NULL_DOUBLE; p->fddd1 = NULL_DOUBLE; p->sub_int_r = NULL_DOUBLE; p->sub_int_a = NULL_DOUBLE; p->stretch_r = NULL_DOUBLE; p->stretch_a = NULL_DOUBLE; p->a_stretch_r = NULL_DOUBLE; p->a_stretch_a = NULL_DOUBLE; p->baseline_start = NULL_DOUBLE; p->baseline_center = NULL_DOUBLE; p->baseline_end = NULL_DOUBLE; p->alpha_start = NULL_DOUBLE; p->alpha_center = NULL_DOUBLE; p->alpha_end = NULL_DOUBLE; p->bpara = NULL_DOUBLE; p->bperp = NULL_DOUBLE; p->SLC_scale = NULL_DOUBLE; /* New parameters 9/25/18 -EXU */ p->B_offset_start = NULL_DOUBLE; p->B_offset_center = NULL_DOUBLE; p->B_offset_end = NULL_DOUBLE; }; /*--------------------------------------------------------------------*/ /* Read parameters into PRM structure from PRM file Based on get_params by Evelyn J. Price Modified by RJM */ /*--------------------------------------------------------------------*/ void get_sio_struct(FILE *fh, struct PRM *s) { char name[128], value[128], equal[128]; char str[1024]; if (debug) { fprintf(stderr, "get_sio_struct:\n"); fprintf(stderr, "PRMname (PRM value) interpreted value\n"); } while (fgets(str, 1024, fh) != NULL) { value[0] = '\0'; sscanf(str, "%s %s %s", name, equal, value); /* strings */ if (strcmp(name, "input_file") == 0) get_string(name, "input_file", value, s->input_file); if (strcmp(name, "led_file") == 0) get_string(name, "led_file", value, s->led_file); if (strcmp(name, "out_amp_file") == 0) get_string(name, "out_amp_file", value, s->out_amp_file); if (strcmp(name, "out_data_file") == 0) get_string(name, "out_data_file", value, s->out_data_file); if (strcmp(name, "scnd_rng_mig") == 0) get_string(name, "scnd_rng_mig", value, s->srm); if (strcmp(name, "deskew") == 0) get_string(name, "deskew", value, s->deskew); if (strcmp(name, "Flip_iq") == 0) get_string(name, "Flip_iq", value, s->iqflip); if (strcmp(name, "offset_video") == 0) get_string(name, "offset_video", value, s->offset_video); if (strcmp(name, "ref_file") == 0) get_string(name, "ref_file", value, s->ref_file); if (strcmp(name, "SLC_file") == 0) get_string(name, "SLC_file", value, s->SLC_file); if (strcmp(name, "orbdir") == 0) get_string(name, "orbdir", value, s->orbdir); if (strcmp(name, "lookdir") == 0) get_string(name, "lookdir", value, s->lookdir); if (strcmp(name, "dtype") == 0) get_string(name, "dtype", value, s->dtype); /* integers */ if (strcmp(name, "nrows") == 0) get_int(name, "nrows", value, &s->nrows); if (strcmp(name, "num_lines") == 0) get_int(name, "num_lines", value, &s->num_lines); if (strcmp(name, "bytes_per_line") == 0) get_int(name, "bytes_per_line", value, &s->bytes_per_line); if (strcmp(name, "good_bytes_per_line") == 0) get_int(name, "good_bytes_per_line", value, &s->good_bytes); if (strcmp(name, "first_line") == 0) get_int(name, "first_line", value, &s->first_line); if (strcmp(name, "num_patches") == 0) get_int(name, "num_patches", value, &s->num_patches); if (strcmp(name, "first_sample") == 0) get_int(name, "first_sample", value, &s->first_sample); if (strcmp(name, "num_valid_az") == 0) get_int(name, "num_valid_az", value, &s->num_valid_az); if (strcmp(name, "SC_identity") == 0) get_int(name, "SC_identity", value, &s->SC_identity); if (strcmp(name, "chirp_ext") == 0) get_int(name, "chirp_ext", value, &s->chirp_ext); if (strcmp(name, "st_rng_bin") == 0) get_int(name, "st_rng_bin", value, &s->st_rng_bin); if (strcmp(name, "num_rng_bins") == 0) get_int(name, "num_rng_bins", value, &s->num_rng_bins); if (strcmp(name, "ref_identity") == 0) get_int(name, "ref_identity", value, &s->ref_identity); if (strcmp(name, "nlooks") == 0) get_int(name, "nlooks", value, &s->nlooks); if (strcmp(name, "rshift") == 0) get_int(name, "rshift", value, &s->rshift); if (strcmp(name, "ashift") == 0) get_int(name, "ashift", value, &s->ashift); /* backwards compatibility for xshift/rshift yshift/ashift */ if (strcmp(name, "xshift") == 0) get_int(name, "rshift", value, &s->rshift); if (strcmp(name, "yshift") == 0) get_int(name, "ashift", value, &s->ashift); if (strcmp(name, "SLC_format") == 0) get_int(name, "SLC_format", value, &s->SLC_format); /* doubles */ if (strcmp(name, "SC_clock_start") == 0) get_double(name, "SC_clock_start", value, &s->SC_clock_start); if (strcmp(name, "SC_clock_stop") == 0) get_double(name, "SC_clock_stop", value, &s->SC_clock_stop); if (strcmp(name, "icu_start") == 0) get_double(name, "icu_start", value, &s->icu_start); if (strcmp(name, "clock_start") == 0) get_double(name, "clock_start", value, &s->clock_start); if (strcmp(name, "clock_stop") == 0) get_double(name, "clock_stop", value, &s->clock_stop); if (strcmp(name, "caltone") == 0) get_double(name, "caltone", value, &s->caltone); if (strcmp(name, "earth_radius") == 0) get_double(name, "earth_radius", value, &s->RE); if (strcmp(name, "equatorial_radius") == 0) get_double(name, "equatorial_radius", value, &s->ra); if (strcmp(name, "polar_radius") == 0) get_double(name, "polar_radius", value, &s->rc); if (strcmp(name, "SC_vel") == 0) get_double(name, "SC_vel", value, &s->vel); if (strcmp(name, "SC_height") == 0) get_double(name, "SC_height", value, &s->ht); if (strcmp(name, "SC_height_start") == 0) get_double(name, "SC_height_start", value, &s->ht_start); if (strcmp(name, "SC_height_end") == 0) get_double(name, "SC_height_end", value, &s->ht_end); if (strcmp(name, "near_range") == 0) get_double(name, "near_range", value, &s->near_range); if (strcmp(name, "PRF") == 0) get_double(name, "PRF", value, &s->prf); if (strcmp(name, "I_mean") == 0) get_double(name, "I_mean", value, &s->xmi); if (strcmp(name, "Q_mean") == 0) get_double(name, "Q_mean", value, &s->xmq); if (strcmp(name, "az_res") == 0) get_double(name, "az_res", value, &s->az_res); if (strcmp(name, "rng_samp_rate") == 0) get_double(name, "rng_samp_rate", value, &s->fs); if (strcmp(name, "chirp_slope") == 0) get_double(name, "chirp_slope", value, &s->chirp_slope); if (strcmp(name, "pulse_dur") == 0) get_double(name, "pulse_dur", value, &s->pulsedur); if (strcmp(name, "radar_wavelength") == 0) get_double(name, "radar_wavelength", value, &s->lambda); if (strcmp(name, "rng_spec_wgt") == 0) get_double(name, "rng_spec_wgt", value, &s->rhww); if (strcmp(name, "rm_rng_band") == 0) get_double(name, "rm_rng_band", value, &s->pctbw); if (strcmp(name, "rm_az_band") == 0) get_double(name, "rm_az_band", value, &s->pctbwaz); if (strcmp(name, "fd1") == 0) get_double(name, "fd1", value, &s->fd1); if (strcmp(name, "fdd1") == 0) get_double(name, "fdd1", value, &s->fdd1); if (strcmp(name, "fddd1") == 0) get_double(name, "fddd1", value, &s->fddd1); if (strcmp(name, "sub_int_r") == 0) get_double(name, "sub_int_r", value, &s->sub_int_r); if (strcmp(name, "sub_int_a") == 0) get_double(name, "sub_int_a", value, &s->sub_int_a); if (strcmp(name, "stretch_r") == 0) get_double(name, "stretch_r", value, &s->stretch_r); if (strcmp(name, "stretch_a") == 0) get_double(name, "stretch_a", value, &s->stretch_a); if (strcmp(name, "a_stretch_r") == 0) get_double(name, "a_stretch_r", value, &s->a_stretch_r); if (strcmp(name, "a_stretch_a") == 0) get_double(name, "a_stretch_a", value, &s->a_stretch_a); if (strcmp(name, "baseline_start") == 0) get_double(name, "baseline_start", value, &s->baseline_start); if (strcmp(name, "baseline_center") == 0) get_double(name, "baseline_center", value, &s->baseline_center); if (strcmp(name, "baseline_end") == 0) get_double(name, "baseline_end", value, &s->baseline_end); if (strcmp(name, "alpha_start") == 0) get_double(name, "alpha_start", value, &s->alpha_start); if (strcmp(name, "alpha_center") == 0) get_double(name, "alpha_center", value, &s->alpha_center); if (strcmp(name, "alpha_end") == 0) get_double(name, "alpha_end", value, &s->alpha_end); if (strcmp(name, "SLC_scale") == 0) get_double(name, "SLC_scale", value, &s->SLC_scale); /* New parameters 9/25/18 -EXU */ if (strcmp(name, "B_offset_start") == 0) get_double(name, "B_offset_start", value, &s->B_offset_start); if (strcmp(name, "B_offset_center") == 0) get_double(name, "B_offset_center", value, &s->B_offset_center); if (strcmp(name, "B_offset_end") == 0) get_double(name, "B_offset_end", value, &s->B_offset_end); } } /*--------------------------------------------------------------------------------*/ void get_string(char *s1, char *name, char *value, char *s2) { strcpy(s2, value); if (debug == 1) fprintf(stderr, " %s (%s) = %s\n", s1, name, value); } /*--------------------------------------------------------------------------------*/ void get_int(char *s1, char *name, char *value, int *iparam) { *iparam = atoi(value); if (debug == 1) fprintf(stderr, " %s (%s) = %s (%d)\n", s1, name, value, *iparam); } /*--------------------------------------------------------------------------------*/ void get_double(char *s1, char *name, char *value, double *param) { *param = atof(value); if (debug == 1) fprintf(stderr, " %s (%s) = %s (%lf)\n", s1, name, value, *param); } /*--------------------------------------------------------------------------------*/ /***************************************************************************/ void put_sio_struct(struct PRM prm, FILE *OUTFILE) { /* set by set_ALOS_defaults */ if (prm.num_valid_az != NULL_INT) fprintf(OUTFILE, "num_valid_az = %d \n", prm.num_valid_az); if (prm.nrows != NULL_INT) fprintf(OUTFILE, "nrows = %d \n", prm.nrows); if (prm.first_line != NULL_INT) fprintf(OUTFILE, "first_line = %d \n", prm.first_line); if (strncmp(prm.deskew, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "deskew = %s \n", prm.deskew); if (prm.caltone != NULL_DOUBLE) fprintf(OUTFILE, "caltone = %lf \n", prm.caltone); if (prm.st_rng_bin != NULL_INT) fprintf(OUTFILE, "st_rng_bin = %d \n", prm.st_rng_bin); if (strncmp(prm.iqflip, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "Flip_iq = %s \n", prm.iqflip); if (strncmp(prm.offset_video, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "offset_video = %s \n", prm.offset_video); if (prm.az_res != NULL_DOUBLE) fprintf(OUTFILE, "az_res = %lf \n", prm.az_res); if (prm.nlooks != NULL_INT) fprintf(OUTFILE, "nlooks = %d \n", prm.nlooks); if (prm.chirp_ext != NULL_INT) fprintf(OUTFILE, "chirp_ext = %d \n", prm.chirp_ext); if (strncmp(prm.srm, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "scnd_rng_mig = %s \n", prm.srm); if (prm.rhww != NULL_DOUBLE) fprintf(OUTFILE, "rng_spec_wgt = %lf \n", prm.rhww); if (prm.pctbw != NULL_DOUBLE) fprintf(OUTFILE, "rm_rng_band = %lf \n", prm.pctbw); if (prm.pctbwaz != NULL_DOUBLE) fprintf(OUTFILE, "rm_az_band = %lf \n", prm.pctbwaz); if (prm.rshift != NULL_INT) fprintf(OUTFILE, "rshift = %d \n", prm.rshift); if (prm.ashift != NULL_INT) fprintf(OUTFILE, "ashift = %d \n", prm.ashift); if (prm.stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "stretch_r = %g \n", prm.stretch_r); if (prm.stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "stretch_a = %g \n", prm.stretch_a); if (prm.a_stretch_r != NULL_DOUBLE) fprintf(OUTFILE, "a_stretch_r = %g \n", prm.a_stretch_r); if (prm.a_stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "a_stretch_a = %g \n", prm.a_stretch_a); if (prm.first_sample != NULL_INT) fprintf(OUTFILE, "first_sample = %d \n", prm.first_sample); if (prm.SC_identity != NULL_INT) fprintf(OUTFILE, "SC_identity = %d \n", prm.SC_identity); if (prm.fs != NULL_DOUBLE) fprintf(OUTFILE, "rng_samp_rate = %.6f \n", prm.fs); /* from read_ALOS_data */ if (strncmp(prm.input_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "input_file = %s \n", prm.input_file); if (prm.num_rng_bins != NULL_INT) fprintf(OUTFILE, "num_rng_bins = %d \n", prm.num_rng_bins); if (prm.bytes_per_line != NULL_INT) fprintf(OUTFILE, "bytes_per_line = %d \n", prm.bytes_per_line); if (prm.good_bytes != NULL_INT) fprintf(OUTFILE, "good_bytes_per_line = %d \n", prm.good_bytes); if (prm.prf != NULL_DOUBLE) fprintf(OUTFILE, "PRF = %lf \n", prm.prf); if (prm.pulsedur != NULL_DOUBLE) fprintf(OUTFILE, "pulse_dur = %e \n", prm.pulsedur); if (prm.near_range != NULL_DOUBLE) fprintf(OUTFILE, "near_range = %lf \n", prm.near_range); if (prm.num_lines != NULL_INT) fprintf(OUTFILE, "num_lines = %d \n", prm.num_lines); if (prm.num_patches != NULL_INT) fprintf(OUTFILE, "num_patches = %d \n", prm.num_patches); if (prm.SC_clock_start != NULL_DOUBLE) fprintf(OUTFILE, "SC_clock_start = %16.10lf \n", prm.SC_clock_start); if (prm.SC_clock_stop != NULL_DOUBLE) fprintf(OUTFILE, "SC_clock_stop = %16.10lf \n", prm.SC_clock_stop); if (prm.clock_start != NULL_DOUBLE) fprintf(OUTFILE, "clock_start = %16.12lf \n", prm.clock_start); if (prm.clock_stop != NULL_DOUBLE) fprintf(OUTFILE, "clock_stop = %16.12lf \n", prm.clock_stop); if (strncmp(prm.led_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "led_file = %s \n", prm.led_file); /* from read_ALOS_ldrfile */ if (strncmp(prm.orbdir, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "orbdir = %s \n", prm.orbdir); if (strncmp(prm.lookdir, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "lookdir = %s \n", prm.lookdir); if (prm.lambda != NULL_DOUBLE) fprintf(OUTFILE, "radar_wavelength = %lg \n", prm.lambda); if (prm.chirp_slope != NULL_DOUBLE) fprintf(OUTFILE, "chirp_slope = %lg \n", prm.chirp_slope); if (prm.fs != NULL_DOUBLE) fprintf(OUTFILE, "rng_samp_rate = %.6f \n", prm.fs); if (prm.xmi != NULL_DOUBLE) fprintf(OUTFILE, "I_mean = %lg \n", prm.xmi); if (prm.xmq != NULL_DOUBLE) fprintf(OUTFILE, "Q_mean = %lg \n", prm.xmq); if (prm.vel != NULL_DOUBLE) fprintf(OUTFILE, "SC_vel = %lf \n", prm.vel); if (prm.RE != NULL_DOUBLE) fprintf(OUTFILE, "earth_radius = %lf \n", prm.RE); if (prm.ra != NULL_DOUBLE) fprintf(OUTFILE, "equatorial_radius = %lf \n", prm.ra); if (prm.rc != NULL_DOUBLE) fprintf(OUTFILE, "polar_radius = %lf \n", prm.rc); if (prm.ht != NULL_DOUBLE) fprintf(OUTFILE, "SC_height = %lf \n", prm.ht); if (prm.ht_start != NULL_DOUBLE) fprintf(OUTFILE, "SC_height_start = %lf \n", prm.ht_start); if (prm.ht_end != NULL_DOUBLE) fprintf(OUTFILE, "SC_height_end = %lf \n", prm.ht_end); if (prm.fd1 != NULL_DOUBLE) fprintf(OUTFILE, "fd1 = %lf \n", prm.fd1); if (prm.fdd1 != NULL_DOUBLE) fprintf(OUTFILE, "fdd1 = %lf \n", prm.fdd1); if (prm.fddd1 != NULL_DOUBLE) fprintf(OUTFILE, "fddd1 = %lf \n", prm.fddd1); /* from calc_baseline */ /* if (prm.rshift != NULL_INT) fprintf(OUTFILE, "rshift = %d \n",prm.rshift); if (prm.ashift != NULL_INT) fprintf(OUTFILE, "ashift = %d\n",prm.ashift); */ if (prm.sub_int_r != NULL_DOUBLE) fprintf(OUTFILE, "sub_int_r = %lf \n", prm.sub_int_r); if (prm.sub_int_a != NULL_DOUBLE) fprintf(OUTFILE, "sub_int_a = %lf \n", prm.sub_int_a); if (prm.bpara != NULL_DOUBLE) fprintf(OUTFILE, "B_parallel = %lf \n", prm.bpara); if (prm.bperp != NULL_DOUBLE) fprintf(OUTFILE, "B_perpendicular = %lf \n", prm.bperp); if (prm.baseline_start != NULL_DOUBLE) fprintf(OUTFILE, "baseline_start = %lf \n", prm.baseline_start); if (prm.baseline_center != NULL_DOUBLE) fprintf(OUTFILE, "baseline_center = %lf \n", prm.baseline_center); if (prm.baseline_end != NULL_DOUBLE) fprintf(OUTFILE, "baseline_end = %lf \n", prm.baseline_end); if (prm.alpha_start != NULL_DOUBLE) fprintf(OUTFILE, "alpha_start = %lf \n", prm.alpha_start); if (prm.alpha_center != NULL_DOUBLE) fprintf(OUTFILE, "alpha_center = %lf \n", prm.alpha_center); if (prm.alpha_end != NULL_DOUBLE) fprintf(OUTFILE, "alpha_end = %lf \n", prm.alpha_end); if (prm.B_offset_start != NULL_DOUBLE) fprintf(OUTFILE, "B_offset_start = %lf \n", prm.B_offset_start); if (prm.B_offset_center != NULL_DOUBLE) fprintf(OUTFILE, "B_offset_center = %lf \n", prm.B_offset_center); if (prm.B_offset_end != NULL_DOUBLE) fprintf(OUTFILE, "B_offset_end = %lf \n", prm.B_offset_end); /* from sarp */ if (strncmp(prm.SLC_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "SLC_file = %s \n", prm.SLC_file); if (strncmp(prm.dtype, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "dtype = %.1s \n", prm.dtype); if (prm.SLC_scale != NULL_DOUBLE) fprintf(OUTFILE, "SLC_scale = %lf \n", prm.SLC_scale); } /***************************************************************************/ GMTSAR_V5.7/gmtsar/sarglobal.h000644 015705 000000 00000000327 13505462013 017156 0ustar00sandwellwheel000000 000000 /* global variables are initialized here */ #ifndef SARGLOBAL_H #define SARGLOBAL_H int verbose = 0; /* controls minimal level of output */ int debug = 0; /* more output */ #endif /* SARGLOBAL_H */ GMTSAR_V5.7/gmtsar/shift.c000644 015705 000000 00000002271 13505462013 016320 0ustar00sandwellwheel000000 000000 /************************************************************************ * shift performs a range shift using the shift property of the FFT * ************************************************************************/ /************************************************************************ * Creator: David T. SandwellScripps Institution of Oceanography) * * Date : 08/09/06 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "gmt.h" #include "siocomplex.h" #include "soi.h" void shift(void *API, int ranfft, fcomplex *data, double shift) { float arg; int i, n2; fcomplex cshift; n2 = ranfft / 2; GMT_FFT_1D(API, (float *)data, ranfft, GMT_FFT_FWD, GMT_FFT_COMPLEX); for (i = 0; i < ranfft; i++) { arg = -2. * PI * shift * i / ranfft; if (i > n2) arg = -2. * PI * shift * (i - ranfft) / ranfft; cshift = Cexp(arg); data[i] = Cmul(cshift, data[i]); } GMT_FFT_1D(API, (float *)data, ranfft, GMT_FFT_INV, GMT_FFT_COMPLEX); } GMTSAR_V5.7/gmtsar/split_spectrum.c000644 015705 000000 00000056203 13505462013 020264 0ustar00sandwellwheel000000 000000 // // split_spectrum.c // // Created by Xiaohua Xu on 7/18/18. // // Used to estimate ionospheric delay in interferograms. // /*************************************************************************** * Modification history: * * * * DATE * ***************************************************************************/ #include "gmt.h" #include "gmtsar.h" #include #include #include #include "tiffio.h" //#include // void right_shift(fcomplex *, int); // void left_shift(fcomplex *, int); void circ_shift(fcomplex *, fcomplex *, int, int); // void bandpass_filter(double, double, int, int, int, double, fcomplex *); // void kaiser(double, int, double *); // double bessi0(double); int fliplr(double *, int); int cos_window(double, double, double, int, double *); int split1(int, char **); int split2(int, char **); fcomplex fmean(short *, int); char *USAGE1 = "\nUSAGE: split_spectrum prm1 [split_half] \n\n" " program used to split range spectrum for SLC using a modified cosine " "filter\n\n" " SLCs are bandpassed and then shifted to the center of the spectrum\n\n" " split_half is build for ALOS FBD FBS cases, put 1 for using half the spectrum\n\n" " output is SLCH SLCL\n\n"; char *USAGE2 = "\nUSAGE: split_spectrum prm1 prm2\n\n" " program used to split range spectrum for coregistered SLC using a " "modified cosine filter\n\n" " SLCs are bandpassed and then shifted to the center of the spectrum\n\n" " output is SLCH1 SLCH2 SLCL1 SLCL2\n"; int main(int argc, char **argv) { if (argc != 3 && argc != 2) die("", USAGE1); split1(argc, argv); return (1); } int split1(int argc1, char **argv1) { FILE *SLC_file1, *SLCH, *SLCL; TIFF *tif, *tifh, *tifl; uint32 width, height, nii; uint16 s = 0; struct PRM p1; int ii, jj, nffti, nc; double bc, bw, cf, fh, fl; double rng_samp_rate, chirp_slope, pulse_dur, rng_bandwidth, wavelength; double SPEED_OF_LIGHT = 299792458.0; double *filterh, *filterl; short *buf1; fcomplex *c1, *c1h, *c1l, *tmp, fm; void *API = NULL; /* GMT API control structure */ // double complex zl,zh,zp,z1h,z2h,z1l,z2l; // double *ph; int half_band = 0; if (argc1 != 2 && argc1 != 3) die("", USAGE1); if ((API = GMT_Create_Session(argv1[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; if (argc1 == 3) half_band = atoi(argv1[2]); /* read in prm files */ get_prm(&p1, argv1[1]); rng_samp_rate = p1.fs; chirp_slope = p1.chirp_slope; pulse_dur = p1.pulsedur; rng_bandwidth = fabs(pulse_dur * chirp_slope); wavelength = p1.lambda; cf = SPEED_OF_LIGHT / wavelength; if (p1.SC_identity == 10) { bc = 42000000.0 / 3.0; } else if (half_band == 1) { bc = rng_bandwidth / 3.0/2; } else { bc = rng_bandwidth / 3.0; } bw = bc; fh = cf + bc; fl = cf - bc; nffti = find_fft_length(p1.num_rng_bins); nc = (int)fabs(round(bc / rng_samp_rate * nffti)); filterh = (double *)malloc(nffti * sizeof(double)); filterl = (double *)malloc(nffti * sizeof(double)); cos_window(bc, bw, rng_samp_rate, nffti, filterh); cos_window(-bc, bw, rng_samp_rate, nffti, filterl); //fprintf(stderr, "%.12f %.12f %.12f %.12f %.12f\n", bc / 1e6, bw / 1e6, fh / 1e6, fl / 1e6, cf / 1e6); printf("low_wavelength = %.12f\n",SOL/fl); printf("center_wavelength = %.12f\n",SOL/cf); printf("high_wavelength = %.12f\n",SOL/fh); printf("low_freq = %.12f\n",fl); printf("center_freq = %.12f\n",cf); printf("high_freq = %.12f\n",fh); printf("low_bandwidth = %.12f\n",bw); printf("center_bandwidth = %.12f\n",rng_bandwidth); printf("high_bandwidth = %.12f\n",bw); // test on how the window look like // for (ii=0;ii fs / 3) { die("center frequency too big!", ""); } for (i = 0; i < N; i++) filter[i] = 0.0; nc = (int)fabs(round(fc / fs * N)); nb = (int)round(fb / fs * N); // fprintf(stderr,"%d %d %d\n",nc,nb,N); // modify the section below to tune the band filter parameters , // 2*flat_nb+2*cos_nb = 1 flat_nb = (int)round(nb / 4); cos_nb = (int)round(nb / 4); for (i = nc - flat_nb - 1; i < nc + flat_nb; i++) filter[i] = 1; for (i = nc - flat_nb - cos_nb - 1; i < nc - flat_nb - 1; i++) filter[i] = 0.5 - cos(PI * (i - (nc - flat_nb - cos_nb - 1) + 1) / cos_nb) / 2.0; for (i = nc + flat_nb; i < nc + flat_nb + cos_nb; i++) filter[i] = cos(PI * (i - (nc + flat_nb) + 1) / cos_nb) / 2.0 + 0.5; if (fc < 0) { fliplr(filter, N); } return (1); } int fliplr(double *a, int N) { int i; double d; for (i = 0; i < (int)(N / 2); i++) { d = a[i]; a[i] = a[N - 1 - i]; a[N - 1 - i] = d; } return (1); } void circ_shift(fcomplex *in, fcomplex *tmp, int na, int nc) { int i, ii; // int ncm; // ncm = nc%na; if (nc % na != 0) { for (i = 0; i < na; i++) { tmp[i].r = in[i].r; tmp[i].i = in[i].i; } for (i = 0; i < na; i++) { ii = (i + nc) % na; if (ii < 0) ii = ii + na; if (ii < 0 || ii > na) { fprintf(stderr, "%d", ii); die("index outside of range", ""); } in[ii].r = tmp[i].r; in[ii].i = tmp[i].i; } // for(i = 0; i < abs(ncm); i++) // left_shift(in, na); } } /* // modified bessel function double bessi0(double x) { double ax,ans; double y; if ((ax=fabs(x)) < 3.75) { y=x/3.75; y*=y; ans=1.0+y*(3.5156229+y*(3.0899424+y*(1.2067492+y*(0.2659732+y*(0.360768e-1+y*0.45813e-2))))); } else { y=3.75/ax; ans=(exp(ax)/sqrt(ax))*(0.39894228+y*(0.1328592e-1+y*(0.225319e-2+y*(-0.157565e-2+y*(0.916281e-2+y*(-0.2057706e-1+y*(0.2635537e-1+y*(-0.1647633e-1+y*0.392377e-2)))))))); } return ans; } // kaiser window, maximizes energy concentration void kaiser(double alpha, int n, double *coef){ int i; int hn; double a; hn = (n - 1) / 2; for(i = -hn; i<=hn; i++){ a = 1.0 - 4.0 * i * i / (n - 1.0) / (n - 1.0); coef[i+hn] = bessi0(alpha * sqrt(a)) / bessi0(alpha); } } // create a band pass filter void bandpass_filter(double bw, double bc, int n, int nfft, int ncshift, double alpha, fcomplex *filter) { int i; double *kw; int hn; fcomplex bwx,bcx; hn = (n-1)/2; if(n > nfft){ die("Error: fft length too small!\n",""); } if(abs(ncshift) > nfft){ die("","Error: fft length too small or shift too big!\n\n"); } //set filter to zero for(i = 0; i < nfft; i++){ filter[i].r = 0.0; filter[i].i = 0.0; } kw = (double *) malloc ((hn*2+1) * sizeof(double)); kaiser(alpha,n,kw); //compute filter for(i=0;i<2*hn+1;i++) { bcx.r = cos(bc*2.0*PI*(i-hn)); bcx.i = sin(bc*2.0*PI*(i-hn)); if(i==hn+1){ bwx.r = 1.0; bwx.i = 0.0; } else{ bwx.r = sin(bw*PI*(i-hn))/(bw*PI*(i-hn)); bwx.i = 0.0; } filter[i] = Cmul(bcx,bwx); filter[i].r = bw*kw[i]*filter[i].r; filter[i].i = bw*kw[i]*filter[i].i; } // shift the filter circ_shift(filter, nfft, -abs(ncshift)); free(kw); } void circ_shift(fcomplex *in, int na, int nc){ int i; int ncm; ncm = nc%na; if(ncm < 0){ for(i = 0; i < abs(ncm); i++) left_shift(in, na); } else if(ncm > 0){ for(i = 0; i < ncm; i++) right_shift(in, na); } else{ //ncm == 0, no need to shift i = 0; } } void left_shift(fcomplex *in, int na){ int i; fcomplex x; if(na < 1){ fprintf(stderr, "Error: array size < 1\n\n"); exit(1); } else if(na > 1){ x.r = in[0].r; x.i = in[0].i; for(i = 0; i <= na - 2; i++){ in[i].r = in[i+1].r; in[i].i = in[i+1].i; } in[na-1].r = x.r; in[na-1].i = x.i; } else{ //na==1, no need to shift i = 0; } } void right_shift(fcomplex *in, int na){ int i; fcomplex x; if(na < 1){ fprintf(stderr, "Error: array size < 1\n\n"); exit(1); } else if(na > 1){ x.r = in[na-1].r; x.i = in[na-1].i; for(i = na - 1; i >= 1; i--){ in[i].r = in[i-1].r; in[i].i = in[i-1].i; } in[0].r = x.r; in[0].i = x.i; } else{ //na==1, no need to shift i = 0; } } */ GMTSAR_V5.7/gmtsar/do_freq_xcorr.c000644 015705 000000 00000006373 13505462013 020046 0ustar00sandwellwheel000000 000000 /* $Id: do_freq_xcorr.c 109 2015-01-19 23:01:24Z sandwell $ */ /*-------------------------------------------------------*/ #include "gmt.h" #include "gmtsar.h" #include "sarleader_fdr.h" #include "siocomplex.h" #include "xcorr.h" #include /*-------------------------------------------------------------------------------*/ void fft_multiply(void *API, int N, int M, struct FCOMPLEX *c1, struct FCOMPLEX *c2, struct FCOMPLEX *c3) { int i, j, isign; /* do forward fft */ GMT_FFT_2D(API, (float *)c1, N, M, GMT_FFT_FWD, GMT_FFT_COMPLEX); GMT_FFT_2D(API, (float *)c2, N, M, GMT_FFT_FWD, GMT_FFT_COMPLEX); /* multiply a with conj(b) */ /* the isign should shift the results appropriately */ /* normalize by absolute values */ for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { isign = (int)lrint(pow(-1.0, (double)(i + j))); c3[i * N + j] = RCmul(isign, Cmul((c1[i * N + j]), (Conjg(c2[i * N + j])))); /* if (norm_flag) { c3[i*N + j] = RCmul(1.0/Cabs(c3[i*N + j]),c3[i*N + j]); if isnan(c3[i*N + j].r) c3[i*N + j].r = 0.0; if isnan(c3[i*N + j].i) c3[i*N + j].i = 0.0; } */ } } /* inverse fft for cross-correlation (c matrix) */ GMT_FFT_2D(API, (float *)c3, N, M, GMT_FFT_INV, GMT_FFT_COMPLEX); } /*-------------------------------------------------------------------------------*/ void do_freq_corr(void *API, struct xcorr *xc, int iloc) { int i, j, ii; float ipeak, jpeak; double cmax, cave, max_corr; max_corr = -999.0; jpeak = ipeak = -999.0f; cmax = -1; cave = 0.0; /* d1, c1 is the master */ /* d2, c2 is the slave */ if (debug) print_complex(xc->c1, xc->npy, xc->npx, 1); if (debug) print_complex(xc->c2, xc->npy, xc->npx, 1); /* multiply c1 and c2 uisng fft */ fft_multiply(API, xc->npx, xc->npy, xc->c1, xc->c2, xc->c3); /* transfer results into correlation matrix */ for (i = 0; i < xc->nyc; i++) { for (j = 0; j < xc->nxc; j++) { ii = (i + xc->ny_corr / 2) * xc->npx + j + (xc->nx_corr / 2); xc->corr[i * xc->nxc + j] = Cabs(xc->c3[ii]); cave += xc->corr[i * xc->nxc + j]; if (xc->corr[i * xc->nxc + j] > cmax) { cmax = xc->corr[i * xc->nxc + j]; jpeak = j - xc->nxc / 2.0f; ipeak = i - xc->nyc / 2.0f; } } } if ((ipeak == -999.0) || (jpeak == -999.0)) { fprintf(stderr, "error! jpeak %f ipeak %f cmax %lf xc %f \n", jpeak, ipeak, cmax, xc->corr[100]); exit(1); } /* calculate normalized correlation at best point */ cave /= (xc->nxc * xc->nyc); /* estimate maximum correlation using frequency - poor */ max_corr = (cmax / cave); /* use normalized time correlation rather than frequency estimate for value */ if (ipeak != -999.0) max_corr = calc_time_corr(xc, (int)ipeak, (int)jpeak); /* put values into correlation matrix and scale to max correlation */ for (i = 0; i < xc->nxc * xc->nyc; i++) xc->corr[i] = max_corr * xc->corr[i] / cmax; if (debug) fprintf(stderr, " (freq) jpeak %f xoffset %d corr %4.2lf \n", jpeak, xc->x_offset, max_corr); if (debug) fprintf(stderr, " (freq) ipeak %f yoffset %d corr %4.2lf \n", ipeak, xc->y_offset, max_corr); xc->loc[iloc].xoff = -1 * jpeak; xc->loc[iloc].yoff = -1 * ipeak; xc->loc[iloc].corr = (float)max_corr; } GMTSAR_V5.7/gmtsar/ldr_orbit.c000644 015705 000000 00000014045 13505462013 017165 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Modified from ALOS_ldr_orbit.c * The only difference is that ra and rc is *reversed. Do this because it seems * reversed but don't want to mess ALOS up. *So make ENVI one for now * ********************************************************************************/ /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 07/13/08 added SC_height_start and * SC_height_end parameters * * *****************************************************************************/ #include "gmtsar.h" #include "orbit.h" #define FACTOR 1000000 void calc_height_velocity(struct SAT_ORB *, struct PRM *, double, double, double *, double *, double *, double *, double *); void interpolate_SAT_orbit_slow(struct SAT_ORB *orb, double time, double *, double *, double *, int *); void polyfit(double *, double *, double *, int *, int *); void ldr_orbit(struct SAT_ORB *orb, struct PRM *prm) { double t1, t2; double re, height, vg; double re_c, re_start, re_end, vg_start, vg_end, vtot, rdot; double height_start, height_end; if (verbose) fprintf(stderr, "ldr_orbit\n"); t1 = (86400.0) * prm->clock_start + (prm->nrows - prm->num_valid_az) / (2.0 * prm->prf); t2 = t1 + prm->num_patches * prm->num_valid_az / prm->prf; calc_height_velocity(orb, prm, t1, t1, &height_start, &re_start, &vg_start, &vtot, &rdot); calc_height_velocity(orb, prm, t2, t2, &height_end, &re_end, &vg_end, &vtot, &rdot); calc_height_velocity(orb, prm, t1, t2, &height, &re_c, &vg, &vtot, &rdot); if (verbose) { fprintf(stderr, " t1 %lf t1 %lf height_start %lf re_start %lf vg_start%lf\n", t1, t1, height_start, re_start, vg_start); fprintf(stderr, " t1 %lf t2 %lf height %lf re_c %lf vg %lf\n", t1, t2, height, re_c, vg); fprintf(stderr, " t2 %lf t2 %lf height_end %lf re__end %lf vg_end %lf\n", t2, t2, height_end, re_end, vg_end); } prm->vel = vg; /* use the center earth radius unless there is a value from the command line */ re = re_c; if (prm->RE > 0.) re = prm->RE; prm->RE = re; prm->ht = height + re_c - re; prm->ht_start = height_start + re_start - re; prm->ht_end = height_end + re_end - re; /* write it all out */ if (verbose) { fprintf(stdout, "SC_vel = %lf \n", prm->vel); fprintf(stdout, "earth_radius = %lf \n", prm->RE); fprintf(stdout, "SC_height = %lf \n", prm->ht); fprintf(stdout, "SC_height_start = %lf \n", prm->ht_start); fprintf(stdout, "SC_height_end = %lf \n", prm->ht_end); } } /*---------------------------------------------------------------*/ /* from David Sandwell's code */ void calc_height_velocity(struct SAT_ORB *orb, struct PRM *prm, double t1, double t2, double *height, double *re2, double *vg, double *vtot, double *rdot) { int k, ir, nt, nc = 3; double xe, ye, ze; double xs, ys, zs; double x1, y1, z1; double x2, y2, z2; double vx, vy, vz, vs, rs; double rlat; /* double rlatg; */ double st, ct, arg, re; double a[3], b[3], c[3]; double time[1000], rng[1000], d[3]; double t0, ro, ra, rc, dt; if (verbose) fprintf(stderr, " ... calc_height_velocity\n"); ro = prm->near_range; /* ra and rc seems revsersed, but don't want to change ALOS */ ra = prm->ra; /* ellipsoid parameters */ rc = prm->rc; /* ellipsoid parameters */ dt = 200. / prm->prf; /* nt = (prm->nrows - prm->num_valid_az)/100.; */ nt = 100; /* changed to fixed value for TSX, ENVI */ /* more time stuff */ t0 = (t1 + t2) / 2.0; t1 = t0 - 2.0; t2 = t0 + 2.0; /* interpolate orbit */ /* _slow does memory allocation each time */ interpolate_SAT_orbit_slow(orb, t0, &xs, &ys, &zs, &ir); interpolate_SAT_orbit_slow(orb, t1, &x1, &y1, &z1, &ir); interpolate_SAT_orbit_slow(orb, t2, &x2, &y2, &z2, &ir); rs = sqrt(xs * xs + ys * ys + zs * zs); /* calculate stuff */ vx = (x2 - x1) / 4.0; vy = (y2 - y1) / 4.0; vz = (z2 - z1) / 4.0; vs = sqrt(vx * vx + vy * vy + vz * vz); *vtot = vs; /* set orbit direction */ if (vz > 0) { strcpy(prm->orbdir, "A"); } else { strcpy(prm->orbdir, "D"); } /* geodetic latitude of the satellite */ rlat = asin(zs / rs); /* rlatg = atan(tan(rlat)*ra*ra/(rc*rc)); */ st = sin(rlat); /* changed from rlatg to rlat, not sure which is right */ ct = cos(rlat); arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1. / (sqrt(arg)); *re2 = re; *height = rs - *re2; /*fprintf(stderr,"time %lf xyz %lf %lf %lf geodetic latitude %lf \n",t0, * xs,ys,zs, rlatg/3.14*180);*/ /* compute the vector orthogonal to both the radial vector and velocity vector */ a[0] = xs / rs; a[1] = ys / rs; a[2] = zs / rs; b[0] = vx / vs; b[1] = vy / vs; b[2] = vz / vs; cross3(a, b, c); /* compute the look angle */ ct = (rs * rs + ro * ro - re * re) / (2. * rs * ro); st = sin(acos(ct)); /* add the satellite and LOS vectors to get the new point */ xe = xs + ro * (-st * c[0] - ct * a[0]); ye = ys + ro * (-st * c[1] - ct * a[1]); ze = zs + ro * (-st * c[2] - ct * a[2]); rlat = asin(ze / re); /* rlatg = atan(tan(rlat)*ra*ra/(rc*rc)); */ /* compute elipse height in the scene */ st = sin(rlat); /* rlatg to rlat */ ct = cos(rlat); arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1. / (sqrt(arg)); /* now check range over time */ for (k = 0; k < nt; k++) { time[k] = dt * (k - nt / 2); t1 = t0 + time[k]; interpolate_SAT_orbit_slow(orb, t1, &xs, &ys, &zs, &ir); rng[k] = sqrt((xe - xs) * (xe - xs) + (ye - ys) * (ye - ys) + (ze - zs) * (ze - zs)) - ro; } /* fit a second order polynomial to the range versus time function */ polyfit(time, rng, d, &nt, &nc); *rdot = d[1]; *vg = sqrt(ro * 2. * d[2]); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/get_PRM.c000644 015705 000000 00000000601 13505462013 016473 0ustar00sandwellwheel000000 000000 #include "update_PRM.h" #include int main(int argc, char **argv) { char *szString = NULL; if (argc != 3 && argc != 4) { printf("Usage: get_PRM file.PRM param \n\nExample: get_PRM " "IMG-HH-ALPSRP049040660-H1.0__A.PRM rshift\n"); return 1; } szString = get_PRM(argv[1], argv[2]); printf("%s\n", szString); if (szString) free(szString); return 0; } GMTSAR_V5.7/gmtsar/CMakeLists.txt000644 015705 000000 00000010644 13505462013 017602 0ustar00sandwellwheel000000 000000 # # $Id: CMakeLists.txt 570 2018-07-27 00:25:30Z sandwell $ # set (GMTSAR_LINK_LIBS ${GMT_LIBRARY} ${TIFF_LIBRARY} ${LAPACK_LIBRARIES}) if (HAVE_M_LIBRARY) # link the math library set (GMTSAR_LINK_LIBS ${GMTSAR_LINK_LIBS} m) endif (HAVE_M_LIBRARY) include_directories (${GMT_INCLUDE_DIR} ${TIFF_INCLUDE_DIR}) add_library (gmtsar aastretch.c acpatch.c calc_dop.c conv2d.c do_freq_xcorr.c do_time_int_xcorr.c fft_bins.c fft_interpolate_routines.c file_stuff.c geoxyz.c get_locations.c get_params.c hermite_c.c highres_corr.c interpolate_orbit.c intp_coef.c ldr_orbit.c parse_xcorr_input.c plxyz.c polyfit.c print_results.c radopp.c read_orb.c read_xcorr_data.c SAT_llt2rat_sub.c rmpatch.c rng_cmp.c rng_ref.c set_prm_defaults.c shift.c sio_struct.c siocomplex.c spline.c trans_col.c utils.c utils_complex.c write_orb.c sbas_utils.c gmtsar.h lib_functions.h llt2xyz.h orbit.h sarleader_ALOS.h sarleader_fdr.h sfd_complex.h siocomplex.h soi.h xcorr.h) target_link_libraries (gmtsar ${GMTSAR_LINK_LIBS}) set (GMTSAR_LINK_LIBS ${GMTSAR_LINK_LIBS} gmtsar) add_executable (bperp bperp.c gmtsar.h) target_link_libraries (bperp ${GMTSAR_LINK_LIBS}) add_executable (calc_dop_orb calc_dop_orb.c gmtsar.h orbit.h) target_link_libraries (calc_dop_orb ${GMTSAR_LINK_LIBS}) add_executable (conv conv.c gmtsar.h) target_link_libraries (conv ${GMTSAR_LINK_LIBS}) add_executable (esarp esarp.c soi.h gmtsar.h) target_link_libraries (esarp ${GMTSAR_LINK_LIBS}) add_executable (extend_orbit extend_orbit.c gmtsar.h orbit.h lib_functions.h) target_link_libraries (extend_orbit ${GMTSAR_LINK_LIBS}) add_executable (make_gaussian_filter make_gaussian_filter.c PRM.h lib_functions.h) target_link_libraries (make_gaussian_filter ${GMTSAR_LINK_LIBS}) add_executable (offset_topo offset_topo.c gmtsar.h) target_link_libraries (offset_topo ${GMTSAR_LINK_LIBS}) add_executable (phase2topo phase2topo.c gmtsar.h) target_link_libraries (phase2topo ${GMTSAR_LINK_LIBS}) add_executable (phasediff phasediff.c gmtsar.h) target_link_libraries (phasediff ${GMTSAR_LINK_LIBS}) add_executable (phasefilt phasefilt.c gmtsar.h) target_link_libraries (phasefilt ${GMTSAR_LINK_LIBS}) add_executable (resamp resamp.c gmtsar.h lib_functions.h) target_link_libraries (resamp ${GMTSAR_LINK_LIBS}) add_executable (SAT_baseline SAT_baseline.c gmtsar.h orbit.h) target_link_libraries (SAT_baseline ${GMTSAR_LINK_LIBS}) add_executable (SAT_llt2rat SAT_llt2rat.c gmtsar.h orbit.h llt2xyz.h) target_link_libraries (SAT_llt2rat ${GMTSAR_LINK_LIBS}) add_executable (SAT_look SAT_look.c gmtsar.h orbit.h llt2xyz.h) target_link_libraries (SAT_look ${GMTSAR_LINK_LIBS}) add_executable (sbas sbas.c gmtsar.h sbas.h) target_link_libraries (sbas ${GMTSAR_LINK_LIBS}) add_executable (xcorr xcorr.c gmtsar.h) target_link_libraries (xcorr ${GMTSAR_LINK_LIBS}) # add the install targets install (TARGETS gmtsar bperp calc_dop_orb conv esarp extend_orbit make_gaussian_filter offset_topo phase2topo phasediff phasefilt resamp SAT_baseline SAT_llt2rat SAT_look sbas xcorr ARCHIVE DESTINATION lib COMPONENT Runtime LIBRARY DESTINATION lib COMPONENT Runtime RUNTIME DESTINATION bin COMPONENT Runtime) install (PROGRAMS align.csh align_ALOS2_SCAN.csh align_ALOS_SLC.csh align_batch.csh align_batch_ALOS2_SCAN.csh align_batch_ALOS_SLC.csh align_tops.csh align_tops_6par.csh align_tops_esd.csh baseline_table.csh cleanup.csh create_frame_tops.csh dem2topo_ra.csh dem2topo_ra_ALOS2.csh detrend_before_unwrap.csh filter.csh fitoffset.csh geocode.csh gmtsar.csh gmtsar_sharedir.csh grd2geotiff.csh grd2kml.csh intf.csh intf_batch.csh intf_batch_ALOS2_SCAN.csh intf_tops.csh landmask.csh landmask_ALOS2.csh m2s.csh make_a_offset.csh make_dem.csh make_los_ascii.csh make_profile.csh merge_batch.csh merge_unwrap_geocode_tops.csh p2p_ALOS.csh p2p_ALOS2_SCAN_SLC.csh p2p_ALOS2_SLC.csh p2p_ALOS_SLC.csh p2p_CSK.csh p2p_CSK_SLC.csh p2p_ENVI.csh p2p_ENVI_SLC.csh p2p_ERS.csh p2p_RS2_SLC.csh p2p_S1A_SLC.csh p2p_S1A_TOPS.csh p2p_S1A_TOPS_Frame.csh p2p_SAT_SLC.csh p2p_TSX_SLC.csh pre_proc.csh pre_proc_batch.csh pre_proc_batch_ALOS2_SCAN.csh pre_proc_batch_ALOS_SLC.csh pre_proc_init.csh preproc_batch_tops.csh preproc_batch_tops_esd.csh proj_ll2ra.csh proj_ll2ra_ascii.csh proj_model.csh proj_ra2ll.csh proj_ra2ll_ascii.csh sarp.csh slc2amp.csh snaphu.csh snaphu_interp.csh stack.csh stack_corr.csh update_PRM.csh select_pairs.csh RUNTIME DESTINATION bin COMPONENT Runtime) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/gmtsar/phasefilt.c000644 015705 000000 00000036275 13505462013 017175 0ustar00sandwellwheel000000 000000 /* $Id: phasefilt.c 80 2014-08-11 17:04:28Z sandwell $ */ #include "gmtsar.h" /*------------------------------------------------------------------------------------- */ /* * implementation of adaptive non-linear phase filter based on: * Goldstein, R. M. and C. L. Werner, 1998, Radar interferogram filtering * for geophysical applications, (25),21, 4035-4038. * * Baran, I., M. P. Stewart, B. M. Kampes, Z. Perski, and P. Lilly, 2003 * A modification of the Golstein radar interferogram filter, * IEE trans. geoscience and remote sensing, (41), 9, 2114-2118. * * rjm, SDSU, may 2010 * comments: * - handled edges in a kludgey way * - added memory allocation checks * * future: * - added option to calculate power spectra with a taper * - (synthetics suggested a slight improvement from reduced sidelobes) * * Dec 2010 - bug in weighting fixed [apply to complex] * default psize changed to 32 * '-complex_out' option added to write out filtered real and imag * *------------------------------------------------------------------------------------- */ int verbose; int debug; int print_cpatch(int nx, int ny, struct FCOMPLEX *m) { int i; for (i = 0; i < nx * ny; i++) { fprintf(stderr, " (%4.2f %4.2f) ", m[i].r, m[i].i); if ((i + 1) / nx == (i + 1) / (float)nx) fprintf(stderr, "\n"); } return (EXIT_SUCCESS); } int print_patch(int nx, int ny, float *m) { int i; for (i = 0; i < nx * ny; i++) { fprintf(stderr, " %4.2f", m[i]); if ((i + 1) / nx == (i + 1) / (float)nx) fprintf(stderr, "\n"); } return (EXIT_SUCCESS); } int write_grdfile(void *API, struct GMT_GRID *T, char *fname, char *prog, char *type, float *data, int verbose) { if (verbose) fprintf(stderr, " writing %s \n", fname); strcpy(T->header->command, prog); strcpy(T->header->remark, type); T->data = data; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, fname, T)) die("cannot create ", fname); T->data = NULL; return (EXIT_SUCCESS); } int read_file_hdr(void *API, char *sim, struct GMT_GRID **IM, char *sre, struct GMT_GRID **RE, unsigned int *xdim, unsigned int *ydim) { struct GMT_GRID *I = NULL, *R = NULL; if ((I = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, sim, NULL)) == NULL) die("error reading file", sim); if ((R = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, sre, NULL)) == NULL) die("error reading file", sre); if (!(R->header->nx == I->header->nx && R->header->ny == I->header->ny)) die("dimensions not equal!", ""); *xdim = I->header->nx; *ydim = I->header->ny; *RE = R; *IM = I; return (EXIT_SUCCESS); } int phasefilt_read_data(void *API, char *imname, struct GMT_GRID *IM, char *rename, struct GMT_GRID *RE, struct FCOMPLEX *cdata, float *amp) { long n, i; n = IM->header->nx * IM->header->ny; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, imname, IM) == NULL) die("error reading file", imname); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, imname, RE) == NULL) die("error reading file", rename); for (i = 0; i < n; i++) { cdata[i].r = RE->data[i]; cdata[i].i = IM->data[i]; amp[i] = sqrtf(RE->data[i] * RE->data[i] + IM->data[i] * IM->data[i]); } if (GMT_Destroy_Data(API, &IM)) die("error freeing data", imname); if (GMT_Destroy_Data(API, &RE)) die("error freeing data", rename); return (EXIT_SUCCESS); } int make_wgt(float *wgt, int nxp, int nyp) { int i, j; float wx, wy; for (i = 0; i < nyp / 2; i++) { wy = 1.0f - fabsf((float)(i) - (nyp / 2.0f - 1.0f)) / (nyp / 2.0f - 1.0f); for (j = 0; j < nxp / 2; j++) { wx = 1.0f - fabsf((float)(j) - (nxp / 2.0f - 1)) / (nxp / 2.0f - 1.0f); wgt[i * nxp + j] = wgt[(i + 1) * nxp - j - 1] = wx * wy; wgt[(nyp - i - 1) * nxp + j] = wgt[(nyp - i) * nxp - j - 1] = wx * wy; } } if (debug) print_patch(nxp, nyp, wgt); return (EXIT_SUCCESS); } /* the classic Goldstein filter */ int apply_pspec(int m, int n, float alpha, struct FCOMPLEX *in, struct FCOMPLEX *out) { int i; float wgt; if (alpha < 0.0f) die("alpha < 0; something is rotten in Denmark", ""); /* pow(x,a/2) == pow(sqrt(x),a) */ for (i = 0; i < m * n; i++) { wgt = powf((in[i].r * in[i].r + in[i].i * in[i].i), alpha / 2.0f); out[i].r = wgt * in[i].r; out[i].i = wgt * in[i].i; } return (EXIT_SUCCESS); } int calc_corr(void *API, char *amp1, char *amp2, unsigned int xdim, unsigned int ydim, float *amp, float *corr) { unsigned int i, n, xdim2, ydim2; float a; struct GMT_GRID *A1 = NULL, *A2 = NULL; /* Grid structures containing ->header and ->data */ n = xdim * ydim; read_file_hdr(API, amp1, &A1, amp2, &A2, &xdim2, &ydim2); if ((xdim != xdim2) || (ydim != ydim2)) die("amp files are different size than real and imag files", ""); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, amp1, A1) == NULL) die("error reading data", amp1); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, amp2, A2) == NULL) die("error reading data", amp2); for (i = 0; i < n; i++) { a = A1->data[i] * A2->data[i]; if (a > 0.0f) { corr[i] = amp[i] / sqrtf(a); } else { corr[i] = 0.0f; } if (corr[i] < 0.0f) corr[i] = 0.0f; if (corr[i] > 1.0f) corr[i] = 1.0f; } if (GMT_Destroy_Data(API, &A1)) die("error freeing data", amp1); if (GMT_Destroy_Data(API, &A2)) die("error freeing data", amp2); return (EXIT_SUCCESS); } int phasefilt_parse_command_line(char **a, int na, char *USAGE, char *sre, char *sim, float *alp, int *ps, char *amp1, char *amp2, int *dflag, int *comflag) { int n; int flag[4]; for (n = 0; n < 4; n++) flag[n] = 0; for (n = 1; n < na; n++) { if (!strcmp(a[n], "-v")) { verbose = 1; /* only args after verbose (if set) will be echoed */ } else if (!strcmp(a[n], "-real")) { n++; if (n == na) die(" no option after -real!\n", ""); strcpy(sre, a[n]); flag[0] = 1; if (verbose) fprintf(stderr, "real %s \n", sre); } else if (!strcmp(a[n], "-imag")) { n++; if (n == na) die(" no option after -imag!\n", ""); strcpy(sim, a[n]); flag[1] = 1; if (verbose) fprintf(stderr, "imag %s \n", sim); } else if (!strcmp(a[n], "-alpha")) { n++; if (n == na) die(" no option after -alpha!\n", ""); *alp = (float)strtod(a[n], NULL); if (verbose) fprintf(stderr, "alpha %f \n", *alp); } else if (!strcmp(a[n], "-amp1")) { n++; if (n == na) die(" no option after -amp1!\n", ""); strcpy(amp1, a[n]); flag[2] = 1; if (verbose) fprintf(stderr, "amp1 %s \n", amp1); } else if (!strcmp(a[n], "-amp2")) { n++; if (n == na) die(" no option after -amp2!\n", ""); strcpy(amp2, a[n]); flag[3] = 1; if (verbose) fprintf(stderr, "amp2 %s \n", amp2); } else if (!strcmp(a[n], "-psize")) { n++; if (n == na) die(" no option after -psize!\n", ""); *ps = atoi(a[n]); if (verbose) fprintf(stderr, "patch size %d \n", *ps); } else if (!strcmp(a[n], "-diff")) { *dflag = 1; if (verbose) fprintf(stderr, "calculate difference \n"); } else if (!strcmp(a[n], "-complex_out")) { *comflag = 1; } else if (!strcmp(a[n], "-debug")) { verbose = 1; debug = 1; } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } /* flag[0] real flag[1] imag flag[2] amp1 only needed if modified filter flag[3] amp2 only needed if modified filter */ /* check for real and imag files are set */ if (flag[0] == 0) die("real file not set", ""); if (flag[1] == 0) die("imag file not set", ""); /* if amp files are defined set alpha = -1 to denote coherence-based alpha */ if ((flag[2] == 1) && (flag[3] == 1)) *alp = -1.0f; if ((flag[2] == 1) && (flag[3] == 0)) die("amp1 set but not amp2 (needed for modified filter)", ""); if ((flag[2] == 0) && (flag[3] == 1)) die("amp2 set but not amp1 (needed for modified filter)", ""); /* if alpha < 0 check that both amp files are set */ if ((*alp < 0) && (flag[2] == 0)) die("amp1 file not set (needed for modified filter)", ""); if ((*alp < 0) && (flag[3] == 0)) die("amp2 file not set (needed for modified filter)", ""); return (EXIT_SUCCESS); } char *USAGE = "phasefilt [GMTSAR] - Apply adaptive non-linear phase filter\n\n" "\n USAGE:\nphasefilt -imag imag.grd -real real.grd [-alpha alpha][-psize " "size][-amp1 amp1.grd -amp2 amp2.grd][-diff][-v]\n" " applies Goldstein adaptive filter to phase [output: filtphase.grd]\n" " or applies modified Goldstein adaptive filter to phase [output: " "filtphase.grd, corrfilt.grd]\n" "-imag [required] GMT format file of imaginary component\n" "-real [required] GMT format file of real component\n" "-alpha exponent for filter - usually between 0.0 and 1.5 (0.0 should " "not filter).\n" " default: 0.5 [Goldstein filter] (anything above 1.0 may be " "excessive)\n" " alpha < 0 will set alpha = (1 - coherence) [modified " "Goldstein]\n" "-psize patch size for filtering. Must be power of two.\n" " default: 32\n" "-amp1 GMT format file of amplitude image of image 1. Needed " "(and applies) modified filter.\n" "-amp2 GMT format file of amplitude image of image 2. Needed " "(and applies) modified filter.\n" "-diff Calculate difference between input phase and output " "phase.\n" "-complex_out Write out filtered real and imaginary " "(filtphase_real.grd and filtphase_imag.grd)\n" "-v Verbose.\n" "-debug Debug.\n" "\n" "example:\n" "phasefilt -imag imag.grd -real real.grd -alpha 0.5\n"; int main(int argc, char **argv) { unsigned int i, j, ii, jj, k1, k2; unsigned int xdim, ydim; unsigned int nxp, nyp; int psize, corrflag, dflag, comflag; float alpha, pcorr, swgt; float *outphase = NULL, *wgt = NULL, *amp = NULL, *corr = NULL, *diff = NULL, *ftmp = NULL; struct FCOMPLEX *data = NULL, *fdata = NULL, *patch0 = NULL, *patch1 = NULL; char sre[256], sim[256]; char amp1[256], amp2[256]; void *API = NULL; /* GMT API control structure */ struct GMT_GRID *RE = NULL, *IM = NULL, *T = NULL; /* Grid structure containing ->header and ->data */ /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; debug = verbose = corrflag = comflag = 0; if (argc < 3) die(USAGE, ""); /* defaults */ psize = 32; /* size of patch # changed from 64 */ alpha = 0.5f; /* exponent */ dflag = 0; /* write out difference */ phasefilt_parse_command_line(argv, argc, USAGE, sre, sim, &alpha, &psize, amp1, amp2, &dflag, &comflag); /* patch size */ /* currently square */ nxp = psize; nyp = psize; /* read dimensions */ read_file_hdr(API, sim, &IM, sre, &RE, &xdim, &ydim); if ((T = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, IM->header->wesn, IM->header->inc, IM->header->registration, 0, NULL)) == NULL) die("could not allocate grid header", ""); if ((data = malloc(T->header->nm * sizeof(struct FCOMPLEX))) == NULL) die("error allocating memory", ""); if ((fdata = malloc(T->header->nm * sizeof(struct FCOMPLEX))) == NULL) die("error allocating memory", ""); if ((patch0 = malloc(nxp * nyp * sizeof(struct FCOMPLEX))) == NULL) die("error allocating memory", ""); if ((patch1 = malloc(nxp * nyp * sizeof(struct FCOMPLEX))) == NULL) die("error allocating memory", ""); if ((amp = malloc(T->header->nm * sizeof(float))) == NULL) die("error allocating memory", ""); if ((wgt = malloc(nxp * nyp * sizeof(float))) == NULL) die("error allocating memory", ""); if ((outphase = malloc(xdim * (ydim + nyp) * sizeof(float))) == NULL) die("error allocating memory", ""); /* array for difference */ if (dflag) { if ((diff = malloc(T->header->nm * sizeof(float))) == NULL) die("error allocating memory", ""); } /* array for writing filtered real and imag */ if (comflag) { if ((ftmp = malloc(T->header->nm * sizeof(float))) == NULL) die("error allocating memory", ""); } for (i = 0; i < T->header->nm; i++) outphase[i] = fdata[i].r = fdata[i].i = 0.0f; /* read data */ phasefilt_read_data(API, sim, IM, sre, RE, data, amp); /* calculate correlation */ if (alpha < 0.0) { corr = (float *)malloc(T->header->nm * sizeof(float)); calc_corr(API, amp1, amp2, xdim, ydim, amp, corr); corrflag = 1; } if (verbose) { if (corrflag == 1) fprintf(stderr, "phasefile: using coherence-dependent alpha (1 - gamma)\n"); if (corrflag == 0) fprintf(stderr, "phasefilt: constant alpha (%6.2f)\n", alpha); } /* create weights for each patch */ /* each patch overlaps each other by half and summed */ /* ideally, total wgt for each pixl = 1 */ /* except at edges... */ make_wgt(wgt, nxp, nyp); for (ii = 0; ii < (ydim - nyp); ii += nyp / 2) { for (jj = 0; jj < (xdim - nxp); jj += nxp / 2) { pcorr = 0.0f; swgt = 0.0f; for (i = 0; i < nyp; i++) { for (j = 0; j < nxp; j++) { k1 = (ii + i) * xdim + jj + j; k2 = i * nxp + j; patch0[k2].r = data[k1].r; patch0[k2].i = data[k1].i; if (corrflag) { pcorr += wgt[k2] * corr[k1]; swgt += wgt[k2]; } } } /* set alpha to 1.0 - coherence */ /* Baran et al., 2003 */ if (corrflag) alpha = 1.0f - pcorr / swgt; GMT_FFT_2D(API, (float *)patch0, nxp, nyp, GMT_FFT_FWD, GMT_FFT_COMPLEX); apply_pspec(nxp, nyp, alpha, patch0, patch1); GMT_FFT_2D(API, (float *)patch1, nxp, nyp, GMT_FFT_INV, GMT_FFT_COMPLEX); for (i = 0; i < nyp; i++) { for (j = 0; j < nxp; j++) { k1 = (ii + i) * xdim + jj + j; k2 = i * nxp + j; fdata[k1].r = fdata[k1].r + wgt[k2] * patch1[k2].r; fdata[k1].i = fdata[k1].i + wgt[k2] * patch1[k2].i; } } } } for (i = 0; i < T->header->nm; i++) outphase[i] = atan2f(fdata[i].i, fdata[i].r); write_grdfile(API, T, "filtphase.grd", "phasefilt", "phase", outphase, verbose); if (corrflag) write_grdfile(API, T, "filtcorr.grd", "phasefilt", "corr", corr, verbose); if (comflag) { for (i = 0; i < T->header->nm; i++) ftmp[i] = fdata[i].r; write_grdfile(API, T, "filtphase_real.grd", "phasefilt", "real", ftmp, verbose); for (i = 0; i < T->header->nm; i++) ftmp[i] = fdata[i].i; write_grdfile(API, T, "filtphase_imag.grd", "phasefilt", "imag", ftmp, verbose); free((void *)ftmp); } if (dflag) { for (i = 0; i < T->header->nm; i++) diff[i] = atan2f(data[i].i, data[i].r) - outphase[i]; write_grdfile(API, T, "filtdiff.grd", "phasefilt", "diff", diff, verbose); free((void *)diff); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ free((void *)patch0); free((void *)patch1); free((void *)data); free((void *)fdata); free((void *)amp); free((void *)outphase); free((void *)wgt); return (EXIT_SUCCESS); } GMTSAR_V5.7/gmtsar/update_PRM.h000644 015705 000000 00000000720 13505462013 017205 0ustar00sandwellwheel000000 000000 #ifndef UPDATE_PRM_H #define UPDATE_PRM_H #include "gmtsar.h" #include void init_lookup_table(); int update_PRM_sub(char *prmfile, char *entry, char *value); int setvalue(struct PRM *prm, char *name, char *value); char *get_PRM_string(char *prmfile, char *valuename); int get_PRM_int(char *prmfile, char *valuename); double get_PRM_double(char *prmfile, char *valuename); char *get_PRM(char *prmfile, char *valuename); #endif /* UPDATE_PRM_H */ GMTSAR_V5.7/gmtsar/csh/000755 015705 000000 00000000000 13507242167 015622 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/gmtsar/make_gaussian_filter.c000644 015705 000000 00000013523 13505462013 021361 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU & David Sandwell * * (Scripps Institution of Oceanography) * * Date : 04/26/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "lib_functions.h" #include #include #include #include double str2double(char *); int strasign(char *, char *, int, int); int strlocate(char *, int, int); char *USAGE = "\n\nUsage: make_gaussian_filter name_of_PRM_file RNG_DEC " "AZI_DEC WAVELENGTH(m)\n" "\nExample: make_gaussian_filter " "IMG-HH-ALPSRP211830620-H1.0__A.PRM 2 4 200\n" "\nOutput: gauss_200\n"; int main(int argc, char **argv) { FILE *fid; int rng_dec, azi_dec, w, n_azi, n_rng; int i, j, idec, jdec; struct PRM prm; double azi_px_size, rng_px_size, x, y; double c_speed = 299792458.0; double sig_azi, sig_rng, a, rng, cost, cosa; double g[50][50]; char out_name[100] = "gauss_"; if (argc < 4) die(USAGE, ""); rng_dec = (int)str2double(argv[2]); azi_dec = (int)str2double(argv[3]); w = (int)str2double(argv[4]); if (rng_dec < 1 || rng_dec > 4) die("Incorrect range decimation factor: \n", argv[2]); if (azi_dec < 1 || azi_dec > 4) die("Incorrect azimuth decimation factor: \n", argv[3]); if (w < 2 || w > 10000) die("Incorrect wavelength: \n", argv[4]); // get the prm get_prm(&prm, argv[1]); // compute the range and azimuth pixel size azi_px_size = prm.vel / sqrt(1 + prm.ht / prm.RE) / prm.prf; // real_vel/prf rng_px_size = c_speed / prm.fs / 2; // compute the cosine of the looking angle and the surface deviate angle a = prm.ht + prm.RE; prm.far_range = prm.near_range + rng_px_size * (double)prm.num_rng_bins; rng = (prm.near_range + prm.far_range) / 2; cost = (pow(a, 2.0) + pow(rng, 2.0) - pow(prm.RE, 2.0)) / 2 / a / rng; cosa = (pow(a, 2.0) + pow(prm.RE, 2.0) - pow(rng, 2.0)) / 2 / a / prm.RE; // fprintf(stderr,"cosa = %.9f, cost = %.9f\n", cosa ,cost); // compute the ground range pixel size rng_px_size = rng_px_size / sin(acos(cost) + acos(cosa)); azi_px_size = azi_px_size * azi_dec; rng_px_size = rng_px_size * rng_dec; sig_azi = w / 5.3 / azi_px_size; sig_rng = w / 5.3 / rng_px_size; idec = floor(sig_azi / 2.); if (idec < 1) idec = 1; jdec = floor(sig_rng / 2.); if (jdec < 1) jdec = 1; fprintf(stdout, " %d %d \n", idec, jdec); n_azi = (int)(sig_azi * 4); n_rng = (int)(sig_rng * 4); if (n_azi % 2 == 0) n_azi = n_azi + 1; if (n_rng % 2 == 0) n_rng = n_rng + 1; strcat(out_name, argv[4]); if ((fid = fopen(out_name, "w")) == NULL) die("Couldn't open file: \n", out_name); fprintf(fid, "%d %d\n", n_rng, n_azi); for (i = 0; i < n_azi; i++) { for (j = 0; j < n_rng; j++) { x = (-(n_rng - 1) / 2 + j); y = (-(n_azi - 1) / 2 + i); g[i][j] = exp(-(x * x / sig_rng / sig_rng + y * y / sig_azi / sig_azi) / 2.0); fprintf(fid, "\t%.16e", g[i][j]); } fprintf(fid, "\n"); } fclose(fid); } int strasign(char *str_out, char *str, int n1, int n2) { // asign n1-n2 of str to str_out int i; if (n1 > n2 || n2 > 199) { return (-1); } for (i = n1; i <= n2; i++) { str_out[i - n1] = str[i]; } str_out[n2 - n1 + 1] = '\0'; return (1); } int strlocate(char *str, int c, int n) { // locate the n-th c in str int i, j = 0; for (i = 0; i < strlen(str); i++) { if (str[i] == (char)c) { j++; if (j == n) { return (i); } } } return (-1); } double str2double(char *str) { int i, n, m; double value = 0.0, value1 = 0.0, value2 = 0.0, sgn = 1.0; char tmp1[100], tmp2[100], tmp[100], str_tmp[100]; strasign(str_tmp, str, 0, strlen(str)); // decide the sign if (str_tmp[0] == '-' || str_tmp[0] == '+') { if (str_tmp[0] == '-') { sgn = -1.0; } strasign(tmp, str_tmp, 1, strlen(str_tmp)); strasign(str_tmp, tmp, 0, strlen(tmp)); } // decide where it is sci form if (strlocate(str_tmp, 'e', 1) != -1 || strlocate(str_tmp, 'E', 1) != -1) { n = strlocate(str_tmp, 'e', 1); if (n == -1) { n = strlocate(str_tmp, 'E', 1); } strasign(tmp2, str_tmp, n + 1, strlen(str)); // exponential part strasign(tmp1, str_tmp, 0, n - 1); // digits part } else { strasign(tmp1, str_tmp, 0, strlen(str_tmp)); // digits part } // decide whether it has fraction n = strlocate(tmp1, '.', 1); if (n != -1) { strasign(tmp, tmp1, 0, n - 1); m = strlen(tmp); for (i = 0; i < m; i++) { value1 = value1 + (double)((int)tmp[i] - 48) * pow(10.0, (double)(m - i - 1)); } m = strlen(tmp1); strasign(tmp, tmp1, n + 1, m); m = strlen(tmp); for (i = 0; i < m; i++) { value2 = value2 + (double)((int)tmp[i] - 48) * pow(10.0, (double)(-i - 1)); } // puts(tmp2); // fprintf(stderr,"%.12f %.12f %.12f\n",value1,value2,str2double(tmp2)); value = value1 + value2; } else { m = strlen(tmp1); for (i = 0; i < m; i++) { value = value + (double)((int)tmp1[i] - 48) * pow(10.0, (double)(m - i - 1)); } } if (strlocate(str_tmp, 'e', 1) != -1 || strlocate(str_tmp, 'E', 1) != -1) { value = value * pow(10.0, str2double(tmp2)); } return (value * sgn); } GMTSAR_V5.7/gmtsar/read_xcorr_data.c000644 015705 000000 00000007122 13505462013 020324 0ustar00sandwellwheel000000 000000 /* $Id: read_xcorr_data.c 39 2013-04-07 00:49:34Z pwessel $ */ #include "gmtsar.h" #include "xcorr.h" #include #include #include #include /*-------------------------------------------------------*/ void read_complex_short2(FILE *f, struct FCOMPLEX *d, int iy, int npy, int nx, short *tmp) { long num_to_seek; int i, j; num_to_seek = 2 * iy * nx * sizeof(short); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers */ for (i = 0; i < npy; i++) { fread(&tmp[0], 2 * sizeof(short), nx, f); /* read whole line */ /* read into complex float */ for (j = 0; j < nx; j++) { d[i * nx + j].r = (float)tmp[2 * j]; d[i * nx + j].i = (float)tmp[2 * j + 1]; // d[i*nx+j].r = // sqrt(((float)tmp[2*j])*((float)tmp[2*j])+((float)tmp[2*j+1])*((float)tmp[2*j+1])); // d[i*nx+j].i = 0.0; } } } /*-------------------------------------------------------*/ void read_real_float2(FILE *f, struct FCOMPLEX *d, int iy, int npy, int nx, float *tmp) { long num_to_seek; int i, j; num_to_seek = iy * nx * sizeof(float); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers */ for (i = 0; i < npy; i++) { fread(&tmp[0], sizeof(float), nx, f); /* read whole line */ /* read into complex float */ for (j = 0; j < nx; j++) { d[i * nx + j].r = (float)tmp[j]; d[i * nx + j].i = 0.0; } } } /*-------------------------------------------------------*/ void read_real_float_grid(struct GMT_GRID *f, struct FCOMPLEX *d, int iy, int npy, int nx, int ny) { // long num; int i, j; // num_to_seek = iy*nx; // fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers */ for (i = 0; i < npy; i++) { // fread(&tmp[0],sizeof(float), nx, f); /* read whole line */ /* read into complex float */ for (j = 0; j < nx; j++) { // num = i+npy+j*ny; d[i * nx + j].r = f->data[(i + iy) * nx + j]; d[i * nx + j].i = 0.0; } } } /*-------------------------------------------------------*/ void read_xcorr_data(struct xcorr *xc, int iloc) { int iy, ishft; short *tmp_m, *tmp_s; float *tmp2_m, *tmp2_s; tmp_m = (short *)malloc(2 * xc->m_nx * sizeof(short)); /* whole line */ tmp2_m = (float *)malloc(2 * xc->m_nx * sizeof(float)); /* whole line */ tmp_s = (short *)malloc(2 * xc->s_nx * sizeof(short)); /* whole line */ tmp2_s = (float *)malloc(2 * xc->s_nx * sizeof(float)); /* whole line */ /* set locations and read data for master */ /* read whole line at correct y offset */ iy = xc->loc[iloc].y - xc->npy / 2; if (debug) fprintf(stderr, " reading data from master at y = %d and %d items\n", iy, xc->m_nx); if (xc->format == 0) read_complex_short2(xc->data1, xc->d1, iy, xc->npy, xc->m_nx, tmp_m); if (xc->format == 1) read_real_float2(xc->data1, xc->d1, iy, xc->npy, xc->m_nx, tmp2_m); if (xc->format == 2) read_real_float_grid(xc->D1, xc->d1, iy, xc->npy, xc->m_nx, xc->m_ny); /* set locations and read data for slave */ ishft = (int)xc->loc[iloc].y * xc->astretcha; iy = xc->loc[iloc].y + xc->y_offset + ishft - xc->npy / 2; if (debug) fprintf(stderr, " reading data from slave at y = %d and %d items\n", iy, xc->s_nx); if (xc->format == 0) read_complex_short2(xc->data2, xc->d2, iy, xc->npy, xc->s_nx, tmp_s); if (xc->format == 1) read_real_float2(xc->data2, xc->d2, iy, xc->npy, xc->s_nx, tmp2_s); if (xc->format == 2) read_real_float_grid(xc->D2, xc->d2, iy, xc->npy, xc->s_nx, xc->s_ny); free((char *)tmp_m); free((char *)tmp2_m); free((char *)tmp_s); free((char *)tmp2_s); } GMTSAR_V5.7/gmtsar/acpatch.c000644 015705 000000 00000012173 13505462013 016610 0ustar00sandwellwheel000000 000000 /************************************************************************ * acpatch is a subroutine to perform azimuth compression of radar echos.* * It is part of the esar SAR processor. Echos should be range * * compressed and migrated before applying azimuth compression. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification history: * * 34MAR2000 - Modified to account for azimuth stretch with azimuth * * * * * ************************************************************************/ #include "gmt.h" #include "siocomplex.h" #include "soi.h" void acpatch(void *API, fcomplex **data, int nrows, double delr, double fd, double fdd, double fddd) { int i, j, k; int n, nfc, nf0; int *np; static int firsttime = 1; double dxsamp1, a2, a4, phase, rd0; double *r, dx, v1, az, y2; float t, sinsq; float *y, *f0, *f_rate; fcomplex cpha, *ref, *fft_vec; /* allocate memory */ if ((np = (int *)malloc(num_rng_bins * sizeof(int))) == NULL) { printf("sorry, couldn't allocate mem for np.\n"); exit(-1); } if ((r = (double *)malloc(num_rng_bins * sizeof(double))) == NULL) { printf("sorry, couldn't allocate mem for r.\n"); exit(-1); } if ((y = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("sorry, couldn't allocate mem for y.\n"); exit(-1); } if ((f0 = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("sorry, couldn't allocate mem for f0.\n"); exit(-1); } if ((f_rate = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("sorry, couldn't allocate mem for f_rate.\n"); exit(-1); } if ((ref = (fcomplex *)malloc(nrows * sizeof(fcomplex))) == NULL) { printf("sorry, couldn't allocate mem for ref.\n"); exit(-1); } if ((fft_vec = (fcomplex *)malloc(nrows * sizeof(fcomplex))) == NULL) { printf("sorry, couldn't allocate mem for fft_vec.\n"); exit(-1); } /* this is the actual x_pix_size that we want to output */ dxsamp1 = vel1 / prf1; a4 = lambda / (2.0 * dxsamp1 * az_res); if ((strcmp(deskew, "y") == 0) || (strcmp(deskew, "Y") == 0)) a2 = -2.0 * PI / (dxsamp1 * (float)nrows); else a2 = 0.0; dx = vel1 / prf1; v1 = pow(lambda, 2.0) / (8.0 * pow(dx, 2.0)); /* convert a resampling coefficients to a function of range instead of pixel */ if (firsttime == 1) { sub_int_a = sub_int_a - stretch_a * near_range / delr; stretch_a = stretch_a / delr; firsttime = 0; } for (i = 0; i < num_rng_bins; i++) { r[i] = near_range + ((float)i) * delr; f0[i] = fd + fdd * r[i] + fddd * r[i] * r[i]; rd0 = r[i] / (1 + v1 * pow((f0[i] / prf1), 2.0)); f_rate[i] = -2.0 * pow(vel1, 2.0) * pow((rd0 / r[i]), 2.0) / (lambda * r[i]); np[i] = (int)(r[i] * a4 / 2); az = stretch_a * r[i] + sub_int_a; y2 = PI2 * az / ((float)nrows); sinsq = lambda * f0[i] / (2.0 * vel1); y[i] = r[i] * a2 * sinsq + y2; /* create reference function */ for (j = 0; j < nrows; j++) { ref[j].r = 0.0f; ref[j].i = 0.0f; } phase = PI * pow(f0[i], 2.0) / f_rate[i]; ref[0] = Cexp(phase); ref[0] = RCmul((1.0 / nrows), ref[0]); for (j = 0; j < np[i]; j++) { t = ((float)(j + 1)) / prf1; phase = PI * f_rate[i] * t * t + PI2 * f0[i] * t; ref[j + 1] = Cexp(phase); ref[j + 1] = RCmul((1.0 / nrows), ref[j + 1]); phase = PI * f_rate[i] * t * t - PI2 * f0[i] * t; ref[-j + nrows - 1] = Cexp(phase); ref[-j + nrows - 1] = RCmul((1.0 / nrows), ref[-j + nrows - 1]); } /* transform the reference */ // dir = -1; // cfft1d_(&nrows,ref,&dir); GMT_FFT_1D(API, (float *)ref, nrows, GMT_FFT_FWD, GMT_FFT_COMPLEX); /* multiply the reference by the data */ n = (int)((f0[i] / prf1) + 0.5); nf0 = nrows * (f0[i] - n * prf1) / prf1; nfc = nf0 + nrows / 2; if (nfc > nrows) nfc = nfc - nrows; phase = -y[i] * nf0; for (k = 0; k < nfc; k++) { ref[k] = Conjg(ref[k]); data[k][i] = Cmul(data[k][i], ref[k]); cpha = Cexp(phase); data[k][i] = Cmul(data[k][i], cpha); phase = phase + y[i]; } phase = -y[i] * nf0; for (k = nrows - 1; k >= nfc; k--) { ref[k] = Conjg(ref[k]); data[k][i] = Cmul(data[k][i], ref[k]); cpha = Cexp(phase); data[k][i] = Cmul(data[k][i], cpha); phase = phase - y[i]; } /* inverse transform the product */ for (j = 0; j < nrows; j++) { fft_vec[j] = data[j][i]; } // dir = 1; // cfft1d_(&nrows,fft_vec,&dir); GMT_FFT_1D(API, (float *)fft_vec, nrows, GMT_FFT_INV, GMT_FFT_COMPLEX); for (j = 0; j < nrows; j++) { data[j][i] = fft_vec[j]; } } free((char *)np); free((char *)r); free((char *)y); free((char *)f0); free((char *)f_rate); free((char *)ref); free((char *)fft_vec); } GMTSAR_V5.7/gmtsar/esarp.c000644 015705 000000 00000025754 13505462013 016330 0ustar00sandwellwheel000000 000000 /* $Id$ */ /************************************************************************ * esarp reads a file of raw radar echos, and an associated parameter * * file and outputs a SAR processed image. It's subroutines * * include range compression, Doppler Centroid frequency * * estimation, range migration, and azimuth compression. This * * processor follows one obtained from Howard Zebker as part of the* * Stanford interferometry package. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History: * * * * Date : May 2003 Hannah Chenh * * - change int *count to int count * * - change (void *) &count to &count in fread * * Date : Oct 2006 Meng Wei * * - add aastrech() * * * ************************************************************************/ /* delete the doppler estimation part */ /* move the doppler units change right after get params */ /* Apr. 24 2006 */ /* delete nrows from declearation, get it from PRM */ /* use SC_identity to enable reading of different data types */ #include "gmtsar.h" #include "soi.h" void print_time(float timer) { int min; float sec; min = (int)timer / 60; sec = timer - ((float)min) * 60.0f; fprintf(stderr, "Processing Elapsed Time: %d min %.2f sec\n", min, sec); } int main(int argc, char *argv[]) { unsigned char *indata; FILE *fph = NULL, *fpq2 = NULL, *fpi = NULL; int ranfft; int n, i, j, k, ipatch, low_ind, hi_ind; long num_to_seek; double delr, rtest, itest, shft, dfact; fcomplex **fdata = NULL, *fft_vec = NULL, *ref = NULL; scomplex *i2data = NULL; int i2test = 1, nclip = 0; int pcount = 24, count = 0; int ineg = 0; void *API = NULL; /* GMT API control structure */ /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; if (argc < 3) { fprintf(stderr, "esarp [GMTSAR] - Produce SAR processed image\n\n"); fprintf(stderr, "\nUsage: %s filein.PRM fileout.SLC [R4]\n\n", argv[0]); exit(-1); } if ((fph = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "Can't open file %s\n", argv[1]); exit(-1); } /* check to see if integer output is desired */ if (argc == 4) { if (argv[3][0] == 'r' || argv[3][0] == 'R') { i2test = 0; } } /* get input parameters */ get_params(fph); fclose(fph); delr = SOL / fs / 2.0; /* if this is ALOS then increase the scale factor by 2 to improve dynamic * range */ if (SC_identity == 5 && xmi1 < 16.) { dfact = 2. * I2SCALE; } else if (SC_identity == 8) { dfact = 2. * I2SCALE; } else { dfact = I2SCALE; } printf("I2SCALE %f \n", dfact); /* change the units of doppler parameters */ radopp(&fd1, &fdd1, &fddd1, near_range, delr); /* compute range parameters */ if (num_rng_bins == 0) num_rng_bins = good_bytes / 2; ranfft = fft_bins(num_rng_bins); near_range = near_range + (st_rng_bin - nextend + xshift - 1) * delr; far_range = near_range + delr * (num_rng_bins - 1); /* Open files. */ if ((fpi = fopen(input_file, "r")) == NULL) { fprintf(stderr, "Can't open file %s\n", input_file); exit(-1); } if ((fpq2 = fopen(argv[2], "w")) == NULL) { fprintf(stderr, "Bad output file pointer.\n"); exit(-1); } /* allocate memory for and seek in data input file */ if ((indata = (unsigned char *)malloc(good_bytes * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } if ((fdata = (fcomplex **)malloc(nrows * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input data.\n"); exit(-1); } for (i = 0; i < nrows; i++) { if ((fdata[i] = (fcomplex *)malloc(num_rng_bins * sizeof(fcomplex))) == NULL) { fprintf(stderr, "sorry, couldn't allocate memory for input data.\n"); exit(-1); } } if (i2test) { if ((i2data = (scomplex *)malloc(num_rng_bins * sizeof(scomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for i2data \n"); exit(-1); } } if ((fft_vec = (fcomplex *)malloc(ranfft * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for ref fnc.\n"); exit(-1); } /* get the fft of the reference function */ if ((ref = (fcomplex *)malloc(ranfft * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for ref fnc.\n"); exit(-1); } fprintf(stderr, "Computing range reference function.\n"); rng_ref(API, ranfft, delr, ref); /* check for negative yshift and set ineg accordingly */ if (yshift < 0) { ineg = yshift; } /* read in data, range compress block, estimate doppler params */ for (ipatch = 1; ipatch <= num_patches; ipatch++) { clock(); /* seek over IMOP file, first_line, data from last patch */ num_to_seek = ((long)((ipatch - 1) * num_valid_az + first_line + 1)) * ((long)bytes_per_line); if ((n = fseek(fpi, num_to_seek, 0)) != 0) { perror(argv[0]); exit(-1); } fprintf(stderr, "Processing patch %d\n", ipatch); print_time((float)clock() / CLOCKS_PER_SEC); fprintf(stderr, "Range Compression\n"); if (ineg >= 0) if ((n = fseek(fpi, ((long)(bytes_per_line) * ((long)yshift)), 1)) != 0) { perror(argv[0]); exit(-1); } for (k = 0; k < nrows; k++) { if (ineg >= 0) { /* this code reads the number of good data from the header */ if (SC_identity == 1 || SC_identity == 2 || SC_identity == 5) { if ((n = fseek(fpi, (long)(pcount), 1)) != 0) { perror(argv[0]); exit(-1); } fread(&count, 4 * sizeof(char), 1, fpi); if ((n = fseek(fpi, (long)(first_sample * 2 - pcount - 4), 1)) != 0) { perror(argv[0]); exit(-1); } } /* this code actually reads the data including trailing bytes that may * be bad */ fread((void *)indata, 2 * sizeof(unsigned char), good_bytes / 2, fpi); fseek(fpi, (long)(bytes_per_line - (first_sample * 2 + good_bytes)), 1); /* if the count is bad then use the good_bytes. TXP. */ if (count == 0) count = good_bytes / 2; /* now fill the row with good data or zero depending on the SC_identity */ for (i = 0; i < ranfft; i++) { if (i < num_rng_bins) { /* ERS-1 and ERS-2 */ if (SC_identity == 1 || SC_identity == 2) { if (i < good_bytes / 2 - first_sample) { if ((((int)indata[2 * i]) != 35) && (((int)indata[2 * i + 1]) != 35) && (i < (int)count)) { fft_vec[i].r = (float)(indata[2 * i] - xmi1); fft_vec[i].i = (float)(indata[2 * i + 1] - xmq1); } else { fft_vec[i].r = 0.0f; fft_vec[i].i = 0.0f; } } else { fft_vec[i].r = 0.0f; fft_vec[i].i = 0.0f; } } /* ENVISAT and ALOS - the number 35 is not used */ else if (SC_identity == 4 || SC_identity == 5 || SC_identity == 8) { if (i < good_bytes / 2 - first_sample) { fft_vec[i].r = (float)(indata[2 * i] - xmi1); fft_vec[i].i = (float)(indata[2 * i + 1] - xmq1); } else { fft_vec[i].r = 0.0f; fft_vec[i].i = 0.0f; } } /* other data formats */ else { fft_vec[i].r = (float)(indata[2 * i] - xmi1); fft_vec[i].i = (float)(indata[2 * i + 1] - xmq1); } } else { fft_vec[i].r = 0.0f; fft_vec[i].i = 0.0f; } } } /* use zero lines for a negative yshift */ else { for (i = 0; i < ranfft; i++) { fft_vec[i].r = 0.0f; fft_vec[i].i = 0.0f; } ineg = ineg + 1; } /* range compress line of data */ rng_cmp(API, ranfft, fft_vec, ref); if (xshift >= 0) { for (i = xshift; i < num_rng_bins + xshift; i++) { fdata[k][i - xshift] = fft_vec[i]; } } else { for (i = 0; i < num_rng_bins; i++) { if (i < (-1 * xshift)) { fdata[k][i].r = 0.0f; fdata[k][i].i = 0.0f; } else { fdata[k][i] = fft_vec[i + xshift]; } } } } /* transform columns */ print_time((float)clock() / CLOCKS_PER_SEC); fprintf(stderr, "Azimuthal Transform\n"); trans_col(API, num_rng_bins, nrows, fdata); /* range migrate patch */ print_time((float)clock() / CLOCKS_PER_SEC); fprintf(stderr, "Range Migration\n"); rmpatch(fdata, nrows, delr, fd1, fdd1, fddd1); /*azimuth compress patch */ print_time((float)clock() / CLOCKS_PER_SEC); fprintf(stderr, "Azimuthal Compression\n"); acpatch(API, fdata, nrows, delr, fd1, fdd1, fddd1); print_time((float)clock() / CLOCKS_PER_SEC); /*apply a azimuth-dependent azimuth shift if a_stretch_a !=0 */ if (a_stretch_a != 0) { fprintf(stderr, "apply azimuth-dependent azimuth shift \n"); aastretch(fdata, ipatch, nrows, num_valid_az, num_rng_bins, a_stretch_a); print_time((float)clock() / CLOCKS_PER_SEC); } fprintf(stderr, "Writing Data\n"); low_ind = (nrows - num_valid_az) / 2; hi_ind = (nrows + num_valid_az) / 2; for (i = low_ind; i < hi_ind; i += nlooks) { /* move the data from the 2-D array into a vector to prepare for shift and * output */ for (j = 0; j < num_rng_bins; j++) { fft_vec[j].r = fdata[i][j].r; fft_vec[j].i = fdata[i][j].i; } /* apply a azimuth-dependent range shift if a_stretch_r != 0 */ if (a_stretch_r != 0.0) { for (j = num_rng_bins; j < ranfft; j++) { fft_vec[j].r = 0.0f; fft_vec[j].i = 0.0f; } shft = -a_stretch_r * (i - low_ind + num_valid_az * (ipatch - 1)); shift(API, ranfft, fft_vec, shft); } /*write data as complex float or complex I2 */ if (i2test) { for (j = 0; j < num_rng_bins; j++) { rtest = dfact * fft_vec[j].r; itest = dfact * fft_vec[j].i; i2data[j].r = (short)clipi2(rtest); i2data[j].i = (short)clipi2(itest); if ((int)(rtest) > I2MAX || (int)(itest) > I2MAX) { nclip++; } } if ((n = (int)fwrite((void *)i2data, 2 * sizeof(short), num_rng_bins, fpq2)) != num_rng_bins) { fprintf(stderr, "Problem writing integer data.\n"); } } else { if ((n = (int)fwrite((void *)fft_vec, 2 * sizeof(float), num_rng_bins, fpq2)) != num_rng_bins) { fprintf(stderr, "Problem writing float data.\n"); } } } } print_time((float)clock() / CLOCKS_PER_SEC); fclose(fpq2); /* close input file */ fclose(fpi); free((char *)ref); free((char **)fdata); free((unsigned char *)indata); free((char *)fft_vec); if (i2test) { free((char *)i2data); fprintf(stderr, "number of points clipped to short int %d \n", nclip); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/gmtsar/print_results.c000644 015705 000000 00000005466 13505462013 020131 0ustar00sandwellwheel000000 000000 /* $Id: print_results.c 33 2013-04-06 05:37:15Z pwessel $ */ #include "gmtsar.h" #include "siocomplex.h" #include "xcorr.h" #include #include #include #include /*-------------------------------------------------------------------------------*/ void print_results(struct xcorr *xc, int iloc) { int ishft; int interp; float xoff, xfrac; float yoff, yfrac; float corr; xoff = xc->loc[iloc].xoff; xfrac = xc->loc[iloc].xfrac; yoff = xc->loc[iloc].yoff; yfrac = xc->loc[iloc].yfrac; corr = xc->loc[iloc].corr; if (xc->interp_flag) { interp = xc->interp_factor; } else { interp = 1; } ishft = (int)xc->loc[iloc].y * xc->astretcha; /* account for range interpolation (xc->ri) */ if (debug) fprintf(stdout, " xoff %f xfrac %f xoff/ri %f rshift %d yoff %f yfrac %f ashift %d\n", xoff, xfrac, xoff / (float)xc->ri, xc->x_offset, yoff, yfrac, xc->y_offset); xoff = (xoff / (float)xc->ri) - (xfrac / (float)xc->ri) + xc->x_offset; yoff = yoff - yfrac + xc->y_offset + ishft; if (verbose) { fprintf(stdout, " location %d (%3d,%3d) interpolation (range %d corr %d) " "correlation %6.2f offset (%6.3f,%6.3f) \n", iloc, xc->loc[iloc].x, xc->loc[iloc].y, xc->ri, interp, corr, xoff, yoff); } fprintf(xc->file, " %d %6.3f %d %6.3f %6.2f \n", xc->loc[iloc].x, xoff, xc->loc[iloc].y, yoff, corr); } /*-------------------------------------------------------------------------------*/ void print_complex(struct FCOMPLEX *a, int ny, int nx, int real_flag) { int i, j; if (real_flag == 0) fprintf(stdout, "\ncomplex: \n"); if (real_flag == 1) fprintf(stdout, "\ncomplex (real only): \n"); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { if (real_flag == 0) fprintf(stdout, "(%6.2f,%6.2f) ", a[i * nx + j].r, a[i * nx + j].i); if (real_flag == 1) fprintf(stdout, "%3.1f ", a[i * nx + j].r); } fprintf(stdout, "\n"); } fprintf(stdout, "\n"); } /*-------------------------------------------------------------------------------*/ void print_float(float *a, int ny, int nx) { int i, j; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) fprintf(stdout, " %4.2f ", a[i * nx + j]); fprintf(stdout, "\n"); } } /*-------------------------------------------------------------------------------*/ void print_double(double *a, int ny, int nx) { int i, j; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) fprintf(stdout, " %4.2lf ", a[i * nx + j]); fprintf(stdout, "\n"); } } /*-------------------------------------------------------------------------------*/ void print_int(int *a, int ny, int nx) { int i, j; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) fprintf(stdout, " %d ", a[i * nx + j]); fprintf(stdout, "\n"); } } /*-------------------------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/conv2d.c000644 015705 000000 00000004451 13505462013 016400 0ustar00sandwellwheel000000 000000 /* $Id: conv2d.c 39 2013-04-07 00:49:34Z pwessel $ */ /************************************************************************ * conv2d is a subroutine to perform a 2-D convolution of a data array * * and a filter. Both arrays are floats. * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography * * Date : 04/20/98 * ************************************************************************/ /************************************************************************ * Modification history: * * * * Date * ************************************************************************/ #include #include #include #define min(x, y) (((x) < (y)) ? (x) : (y)) #define max(x, y) (((x) > (y)) ? (x) : (y)) void conv2d(float *rdat, int *ni, int *nj, float *filt, int *nif, int *njf, float *fdat, int *ic, int *jc, float *rnorm) /* *ni,*nj; size of rdat */ /* *nif,*njf; size of filt, both numbers should be odd */ /* *ic,*jc; location of filter */ /* *rdat; array of unfiltered data */ /* *filt; filter array */ /* *fdat; single filtered point */ /* *rnorm; sum of filter coefficients and used in convolution */ { int nif2, njf2, iflt, jflt; int i, j, i0, i1, j0, j1; float filter; /* check the filter lengths */ nif2 = (int)(*nif / 2.); njf2 = (int)(*njf / 2.); if (2 * nif2 == *nif || 2 * njf2 == *njf) { fprintf(stderr, " nif njf %d %d should be odd \n", *nif, *njf); exit(-1); } /* compute the bounds of the convolution */ i0 = max(0, *ic - nif2); i1 = min(*ni, *ic + nif2); j0 = max(0, *jc - njf2); j1 = min(*nj, *jc + njf2); *fdat = 0.0f; *rnorm = 0.0f; /* do it - but don't use any NaN's */ for (i = i0; i < i1 + 1; i++) { iflt = i - *ic + nif2; for (j = j0; j < j1 + 1; j++) { jflt = j - *jc + njf2; filter = filt[jflt + *njf * iflt]; *fdat = *fdat + filter * rdat[j + *nj * i]; *rnorm = *rnorm + filter; } } } GMTSAR_V5.7/gmtsar/Makefile000644 015705 000000 00000004555 13505462013 016506 0ustar00sandwellwheel000000 000000 # $Id: Makefile 109 2015-01-19 23:01:24Z sandwell $ # # makefile for gmtsar directory (sbas.c not included yet) include ../config.mk INCLUDES = $(GMT_INC) -I./ -I$(TIFF_INC) LIB_C = aastretch.c acpatch.c calc_dop.c conv2d.c do_freq_xcorr.c \ do_time_int_xcorr.c fft_bins.c fft_interpolate_routines.c \ file_stuff.c geoxyz.c get_locations.c get_params.c hermite_c.c \ highres_corr.c interpolate_orbit.c intp_coef.c ldr_orbit.c \ parse_xcorr_input.c plxyz.c polyfit.c print_results.c radopp.c \ read_orb.c read_xcorr_data.c SAT_llt2rat_sub.c \ rmpatch.c rng_cmp.c rng_ref.c set_prm_defaults.c shift.c \ sio_struct.c siocomplex.c spline.c trans_col.c utils.c utils_complex.c \ write_orb.c sbas_utils.c stringutils.c update_PRM_sub.c rng_filter.c \ lib_strfuncs.c LIB_O = $(LIB_C:.c=.o) LIB = libgmtsar.$(LIBEXT) #------------------------------------------------------------------------------- # library #------------------------------------------------------------------------------- $(LIB): $(LIB_O) $(AR) cvur $@ $? $(RANLIB) $@ lib: $(LIB) PROGS_C = bperp.c calc_dop_orb.c conv.c esarp.c offset_topo.c phase2topo.c \ phasediff.c phasefilt.c resamp.c xcorr.c extend_orbit.c update_PRM.c get_PRM.c \ SAT_llt2rat.c SAT_look.c SAT_baseline.c make_gaussian_filter.c sbas.c \ nearest_grid.c fitoffset.c solid_tide.c p_scatter.c split_spectrum.c cut_slc.c \ split_aperture.c phasediff_get_topo_phase.c PROGS_O = $(PROGS_C:.c=.o) PROGS = $(PROGS_C:.c=) #------------------------------------------------------------------------------- # software targets #------------------------------------------------------------------------------- all: $(PROGS) install: all $(INSTALL) -d $(bindir) $(INSTALL) $(PROGS) $(bindir) ls csh/*.csh csh/*.sh > /tmp/t.lis $(INSTALL) `cat /tmp/t.lis` $(bindir) rm -f /tmp/t.lis uninstall: cd $(bindir); rm -f $(PROGS) cd csh; ls *.csh > /tmp/t.lis cd $(bindir); rm -f `cat /tmp/t.lis` rm -f /tmp/t.lis spotless:: clean clean: rm -f *.a *.o *% core tags $(PROGS) #------------------------------------------------------------------------------- # program rules #------------------------------------------------------------------------------- $(PROGS): $(PROGS_O) $(LIB) $(CC) $(LDFLAGS) $@.o $(GMTSAR) $(GMT_LIB) $(LALIBS) $(LIBS) -L$(TIFF_LIB) -ltiff -lm -o $@ GMTSAR_V5.7/gmtsar/cut_slc.c000644 015705 000000 00000011534 13505462013 016641 0ustar00sandwellwheel000000 000000 /* $Id cut_slc.c 2018-08 Xiaohua XU$ */ /*************************************************************************** * cut coregistered slc to a smaller area * **************************************************************************/ /*************************************************************************** * Creator: Xiaohua Xu * * (Scripps Institution of Oceanography) * * Date : 07/11/2018 * **************************************************************************/ /*************************************************************************** * Modification history: * * DATE * * * ***************************************************************************/ #include "gmtsar.h" #include #include char *USAGE = "\nUsage: " "cut_slc stem.PRM new_stem range\n" " stem.PRM - PRM file for coregistered image to be cut\n" " new_stem - stem for newly generated SLC and PRM file\n" " range - range to cut the SLC e.g. 500/1500/900/3600\n" "\n" "Output: new_stem.PRM new_stem.SLC (old .LED file can still be used)\n\n"; int get_range(char *str, int *xl, int *xh, int *yl, int *yh) { int ii = 0, jj = 0, kk = 0, rr[4]; char c; char tmp_c[128]; c = str[ii]; while (c != '\0') { if (c != '/') { tmp_c[jj] = c; jj++; } else if (c == '/') { tmp_c[jj] = '\0'; rr[kk] = atoi(tmp_c); jj = 0; kk++; } ii++; c = str[ii]; } tmp_c[jj] = c; rr[kk] = atoi(tmp_c); *xl = rr[0]; *xh = rr[1]; *yl = rr[2]; *yh = rr[3]; return (1); } int main(int argc, char **argv) { int ii, jj, xl, xh, yl, yh, nl, nr; short *buf_in, *buf_out; struct PRM pp; FILE *SLC_in, *SLC_out, *PRM_out; char str[1024]; double dr; if (argc < 3) die(USAGE, ""); get_prm(&pp, argv[1]); // xl = 0; xh = pp.num_rng_bins-1; // yl = 0; yh = pp.num_patches*num_valid_az-1; get_range(argv[3], &xl, &xh, &yl, &yh); nl = pp.num_patches * pp.num_valid_az; nr = pp.num_rng_bins; // printf("%d %d %d %d %d %d // %d\n",xl,xh,yl,yh,pp.num_rng_bins,pp.num_patches,pp.num_valid_az); if (xl < 0 || xl > xh || xh > nr - 1 || yl < 0 || yl > yh || yh > nl - 1) die("wrong range ", ""); if ((SLC_in = fopen(pp.SLC_file, "rb")) == NULL) die("Can't open SLCfile", pp.SLC_file); strcpy(str, argv[2]); // str[strlen(str)-3] = '\0'; strcat(str, ".SLC"); if ((SLC_out = fopen(str, "wb")) == NULL) die("Can't open SLCfile", str); buf_in = (short *)malloc(pp.num_rng_bins * 2 * sizeof(short)); pp.num_lines = (yh - yl) + 1; if (pp.num_lines % 4 != 0) { printf("Number of lines is set to a multiple of 4\n"); pp.num_lines = pp.num_lines - pp.num_lines % 4; } pp.SC_clock_start = pp.SC_clock_start + ((double)xl*pp.stretch_a + (double)yl*(1+pp.a_stretch_a) + (double)(pp.nrows-pp.num_valid_az)/2.0) / pp.prf / 86400.0; pp.clock_start = pp.clock_start + ((double)xl*pp.stretch_a + (double)yl*(1+pp.a_stretch_a) + (double)(pp.nrows-pp.num_valid_az)/2.0) / pp.prf / 86400.0; pp.SC_clock_stop = pp.SC_clock_start + pp.num_lines / pp.prf / 86400.0; pp.clock_stop = pp.clock_start + pp.num_lines / pp.prf / 86400.0; pp.num_patches = 1; pp.num_valid_az = pp.num_lines; pp.nrows = pp.num_lines; dr = SOL / (2.0 * pp.fs); pp.near_range = pp.near_range + dr * xl * (1 + pp.stretch_r) + dr * yl * pp.a_stretch_r; pp.num_rng_bins = xh - xl + 1; if (pp.num_rng_bins % 4 != 0) { printf("Number of range pixels is set to a multiple of 4\n"); pp.num_rng_bins = pp.num_rng_bins - pp.num_rng_bins % 4; } pp.bytes_per_line = pp.num_rng_bins * 4; pp.good_bytes = pp.bytes_per_line; strcpy(str, argv[2]); strcat(str, ".PRM"); if ((PRM_out = fopen(str, "w")) == NULL) die("can't open prm file", str); put_sio_struct(pp, PRM_out); fclose(PRM_out); printf("New PRM file written ...\n"); buf_out = (short *)malloc(pp.num_rng_bins * 2 * sizeof(short)); printf("Writing image (%d x %d) ...\n", pp.num_rng_bins, pp.num_lines); // printf("Hahahaha %d %d %d %d\n",nr,nl,pp.num_rng_bins,pp.num_lines); for (ii = 0; ii < nl; ii++) { // printf("%d ",ii); fread(buf_in, sizeof(short), nr * 2, SLC_in); if (ii >= yl && ii <= yl + pp.num_lines - 1) { for (jj = xl; jj <= xh; jj++) { buf_out[jj * 2 - xl * 2] = buf_in[jj * 2]; buf_out[jj * 2 - xl * 2 + 1] = buf_in[jj * 2 + 1]; } fwrite(buf_out, sizeof(short), pp.num_rng_bins * 2, SLC_out); } } // printf("\n"); // printf("Hahahaha\n"); fclose(SLC_out); fclose(SLC_in); // fclose(SLC_out); return (1); } GMTSAR_V5.7/gmtsar/extend_orbit.c000644 015705 000000 00000014763 13505462013 017702 0ustar00sandwellwheel000000 000000 /************************************************************************ * extend the state vector for LED files from Sentinel1 and Radarsat2 * ***********************************************************************/ /************************************************************************ * Creator: David T. Sandwell & Xiaohua Xu * * Date : 03/05/2015 * ************************************************************************/ /************************************************************************ * Modification History: * * * * Date : * * * ************************************************************************/ #include "gmtsar.h" #include "lib_functions.h" #include "orbit.h" void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void write_orb(FILE *, struct SAT_ORB *); void polyfit(double *, double *, double *, int *, int *); int main(int argc, char **argv) { struct PRM *prm; struct SAT_ORB *orb; struct SAT_ORB *orb_out; FILE *infile, *outfile; int nd_in, nd_add, nd_out; int n, k; double *pt, *px, *py, *pz, *ppt, *ppx, *ppvx, *ppy, *ppvy, *ppz, *ppvz; double frac, idsec; void extrapolate_poly(double *, double *, double *, double *, double *, int, int, int); int Nodr; if ((argc != 4)) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: extend_orbit file_in.LED file_out.LED frac\n"); fprintf(stderr, " orig.LED - original LED file \n"); fprintf(stderr, " extend.LED - extended LED file \n"); fprintf(stderr, " frac - fraction of frame length to add to each " "end (e.g. 0.25) \n"); fprintf(stderr, "\n"); return (0); } /* don't really need prm except for call to read_orb */ prm = malloc(sizeof(struct PRM)); frac = atof(argv[3]); /* get the orbit data */ if ((infile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); orb = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); orb_out = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); read_orb(infile, prm, orb); /* make a longer structure for the output LED file */ nd_in = orb->nd; nd_add = nd_in * frac; nd_out = nd_in + 2 * nd_add; orb_out->nd = nd_out; orb_out->iy = orb->iy; orb_out->id = orb->id; idsec = orb->dsec; orb_out->dsec = orb->dsec; orb_out->sec = orb->sec - nd_add * idsec; orb_out->points = (struct ORB_XYZ *)malloc(orb_out->nd * sizeof(struct ORB_XYZ)); /* allocate the memory for the vectors to be fit and fill the vectors */ pt = malloc(nd_in * sizeof(double)); px = malloc(nd_in * sizeof(double)); py = malloc(nd_in * sizeof(double)); pz = malloc(nd_in * sizeof(double)); ppt = malloc(nd_add * 2 * sizeof(double)); ppx = malloc(nd_add * 2 * sizeof(double)); ppvx = malloc(nd_add * 2 * sizeof(double)); ppy = malloc(nd_add * 2 * sizeof(double)); ppvy = malloc(nd_add * 2 * sizeof(double)); ppz = malloc(nd_add * 2 * sizeof(double)); ppvz = malloc(nd_add * 2 * sizeof(double)); for (n = 0; n < nd_in; n++) { pt[n] = orb->points[n].pt; px[n] = orb->points[n].px; py[n] = orb->points[n].py; pz[n] = orb->points[n].pz; } /* extrapolate the orbit into the longer structure */ Nodr = 4; extrapolate_poly(pt, px, ppt, ppx, ppvx, nd_in, nd_add, Nodr); extrapolate_poly(pt, py, ppt, ppy, ppvy, nd_in, nd_add, Nodr); extrapolate_poly(pt, pz, ppt, ppz, ppvz, nd_in, nd_add, Nodr); for (n = 0; n < nd_add; n++) { orb_out->points[n].pt = ppt[n]; orb_out->points[nd_out - n - 1].pt = ppt[2 * nd_add - n - 1]; orb_out->points[n].px = ppx[n]; orb_out->points[nd_out - n - 1].px = ppx[2 * nd_add - n - 1]; orb_out->points[n].py = ppy[n]; orb_out->points[nd_out - n - 1].py = ppy[2 * nd_add - n - 1]; orb_out->points[n].pz = ppz[n]; orb_out->points[nd_out - n - 1].pz = ppz[2 * nd_add - n - 1]; orb_out->points[n].vx = ppvx[n]; orb_out->points[nd_out - n - 1].vx = ppvx[2 * nd_add - n - 1]; orb_out->points[n].vy = ppvy[n]; orb_out->points[nd_out - n - 1].vy = ppvy[2 * nd_add - n - 1]; orb_out->points[n].vz = ppvz[n]; orb_out->points[nd_out - n - 1].vz = ppvz[2 * nd_add - n - 1]; } /* replace the original state vector in the interior of the output vector */ k = 0; for (n = nd_add; n < nd_in + nd_add; n++) { orb_out->points[n].pt = orb->points[k].pt; orb_out->points[n].px = orb->points[k].px; orb_out->points[n].py = orb->points[k].py; orb_out->points[n].pz = orb->points[k].pz; orb_out->points[n].vx = orb->points[k].vx; orb_out->points[n].vy = orb->points[k].vy; orb_out->points[n].vz = orb->points[k].vz; k++; } /* write the extrapolated LED file */ if ((outfile = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); write_orb(outfile, orb_out); fclose(infile); fclose(outfile); exit(0); } void extrapolate_poly(double *T, double *Y, double *TT, double *YY, double *DYY, int nd_in, int nd_add, int Nodr) { int i; double dt, mt, my, coef[6], t_tmp, dt_tmp, y_tmp, y_tmp1, y_tmp2; double polyval(double, double *, int); double sum_array(double *, int); dt_tmp = 0.2; if (nd_in < 5) { fprintf(stderr, "Not enough points to estimate polynomial coefficitnets\n"); exit(0); } mt = sum_array(T, nd_in) / nd_in; my = sum_array(Y, nd_in) / nd_in; for (i = 0; i < nd_in; i++) { T[i] = T[i] - mt; Y[i] = Y[i] - my; } dt = T[nd_in / 2 + 1] - T[nd_in / 2]; polyfit(T, Y, coef, &nd_in, &Nodr); /* interpolate nd_add points in the front and at the back */ for (i = 0; i < nd_add; i++) { t_tmp = T[0] - dt * (nd_add - i); y_tmp = polyval(t_tmp, coef, Nodr); y_tmp1 = polyval(t_tmp - dt_tmp, coef, Nodr); y_tmp2 = polyval(t_tmp + dt_tmp, coef, Nodr); TT[i] = t_tmp + mt; YY[i] = y_tmp + my; DYY[i] = (y_tmp2 - y_tmp1) / 2 / dt_tmp; t_tmp = T[nd_in - 1] + dt * (i + 1); y_tmp = polyval(t_tmp, coef, Nodr); y_tmp1 = polyval(t_tmp - dt_tmp, coef, Nodr); y_tmp2 = polyval(t_tmp + dt_tmp, coef, Nodr); TT[nd_add + i] = t_tmp + mt; YY[nd_add + i] = y_tmp + my; DYY[nd_add + i] = (y_tmp2 - y_tmp1) / 2 / dt_tmp; } for (i = 0; i < nd_in; i++) { T[i] = T[i] + mt; Y[i] = Y[i] + my; } } double polyval(double T, double *C, int Nodr) { int j; double y_tmp; y_tmp = 0; for (j = 0; j < Nodr; j++) { y_tmp = y_tmp + C[j] * pow(T, j); } return (y_tmp); } double sum_array(double *a, int num_elements) { int i; double sum = 0; for (i = 0; i < num_elements; i++) { sum = sum + a[i]; } return (sum); } GMTSAR_V5.7/gmtsar/read_data.c000644 015705 000000 00000006370 13505462013 017113 0ustar00sandwellwheel000000 000000 /* $Id: read_data.c 33 2013-04-06 05:37:15Z pwessel $ */ #include "gmtsar.h" #include "xcorr.h" #include #include #include #include /*-------------------------------------------------------*/ void read_complex_short(FILE *f, int *d, int iy, int jx, int npx, int npy, int nx) { long num_to_seek; int i, j; int ireal, iimag; short *tmp; tmp = malloc(2 * nx * sizeof(short)); /* whole line */ num_to_seek = 2 * iy * nx * sizeof(short); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers - use amplitude */ for (i = 0; i < npy; i++) { fread(&tmp[0], 2 * sizeof(short), nx, f); /* read whole line */ for (j = 0; j < npx; j++) { ireal = (int)tmp[2 * (j + jx)]; iimag = (int)tmp[2 * (j + jx) + 1]; d[i * npx + j] = (int)rint(sqrt(ireal * ireal + iimag * iimag)); } } free((short *)tmp); } /*-------------------------------------------------------*/ void read_real_float(FILE *f, int *d, int iy, int jx, int npx, int npy, int nx) { long num_to_seek; int i, j; float *tmp; tmp = malloc(nx * sizeof(float)); /* whole line */ num_to_seek = iy * nx * sizeof(short); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* read the floats */ for (i = 0; i < npy; i++) { fread(&tmp[0], sizeof(float), nx, f); /* read whole line */ for (j = 0; j < npx; j++) d[i * npx + j] = (int)rintf(tmp[j + jx]); } free((float *)tmp); } /*-------------------------------------------------------*/ /*-------------------------------------------------------*/ void read_data(struct xcorr xc) { int iy, jx, ishft; /* set locations and read data for master */ iy = xc.loc[iloc].y - xc.npy / 2; jx = xc.loc[iloc].x - xc.npx / 2; if (verbose) fprintf(stderr, " reading data (format %d) at iloc %d %d : %d %d\n", xc.format, xc.loc[iloc].x, xc.loc[iloc].y, jx, iy); if (xc.format == 0) read_complex_short(xc.data1, xc.d1, iy, jx, xc.npx, xc.npy, xc.m_nx); if (xc.format == 1) read_real_float(xc.data1, xc.d1, iy, jx, xc.npx, xc.npy, xc.m_nx); /* set locations and read data for slave */ ishft = (int)xc.loc[iloc].y * xc.astretcha; iy = xc.loc[iloc].y + xc.y_offset + ishft - xc.npy / 2; jx = xc.loc[iloc].x + xc.x_offset - xc.npx / 2; if (verbose) fprintf(stderr, " reading data (format %d) at iloc %d %d : %d %d\n", xc.format, xc.loc[iloc].x, xc.loc[iloc].y, jx, iy); if (xc.format == 0) read_complex_short(xc.data2, xc.d2, iy, jx, xc.npx, xc.npy, xc.s_nx); if (xc.format == 1) read_real_float(xc.data2, xc.d2, iy, jx, xc.npx, xc.npy, xc.s_nx); } /*-------------------------------------------------------*/ void read_complex_short2float(FILE *f, float *d, int iy, int jx, int npx, int npy, int nx) { long num_to_seek; int i, j; int ireal, iimag; short *tmp; tmp = malloc(2 * nx * sizeof(short)); /* whole line */ num_to_seek = 2 * iy * nx * sizeof(short); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers - use amplitude */ for (i = 0; i < npy; i++) { fread(&tmp[0], 2 * sizeof(short), nx, f); /* read whole line */ for (j = 0; j < npx; j++) { ireal = (int)tmp[2 * (j + jx)]; iimag = (int)tmp[2 * (j + jx) + 1]; d[i * npx + j] = (float)sqrt(ireal * ireal + iimag * iimag); } } free((short *)tmp); } GMTSAR_V5.7/gmtsar/soi.h000644 015705 000000 00000010071 13505462013 015777 0ustar00sandwellwheel000000 000000 /************************************************************************ * soi.h is the include file for the esarp SAR processor. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * * * * 4/23/97- added parameters for orbit calculations: x_target, * * y_target,z_target,baseline,alpha,sc_identity, * * ref_identity,SC_clock_start,SC_clock_stop, * * clock_start,clock_stop * * -DTS * * * * 4/23/97- added parameters: rec_start, rec_stop * * -EJP * * * * 8/28/97- added parameters baseline_start baseline_end * * alpha_start alpha_end * * * * 9/12/97 added clipi2 function to clip to short int * * * * 4/26/06 added nrows, num_lines * ************************************************************************/ #ifndef SOI_H #define SOI_H #include #include #include #include #include #define SOL 299792456.0 #define PI 3.1415926535897932 #define PI2 6.2831853071795864 #define I2MAX1 32767. #define I2SCALE 4.e6 #define TRUE 1 #define FALSE 0 #define RW 0666 #define MULT_FACT 1000.0 #define sgn(A) ((A) >= 0.0 ? 1.0 : -1.0) #define clipi22(A) (((A) > I2MAX1) ? I2MAX1 : (((A) < -I2MAX1) ? -I2MAX1 : A)) #include "sfd_complex.h" char *input_file; char *led_file; char *out_amp_file; char *out_data_file; char *deskew; char *iqflip; char *off_vid; char *srm; char *ref_file; char *orbdir; char *lookdir; int debug_flag; int bytes_per_line; int good_bytes; int first_line; int num_patches; int first_sample; int num_valid_az; int st_rng_bin; int num_rng_bins; int nextend; int nlooks; int xshift; int yshift; int fdc_ystrt; int fdc_strt; /*New parameters 4/23/97 -EJP */ int rec_start; int rec_stop; /* End new parameters 4/23/97 -EJP */ /* New parameters 4/23/97 -DTS */ int SC_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)-Envisat_SLC (7)-TSX (8)-CSK (9)-RS2 (10)-S1A*/ int ref_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)-Envisat_SLC (7)-TSX (8)-CSK (9)-RS2 (10)-S1A*/ double SC_clock_start; /* YYDDD.DDDD */ double SC_clock_stop; /* YYDDD.DDDD */ double icu_start; /* onboard clock counter */ double clock_start; /* DDD.DDDDDDDD clock without year has more precision */ double clock_stop; /* DDD.DDDDDDDD clock without year has more precision */ /* End new parameters 4/23/97 -DTS */ double caltone; double RE; /* Local Earth radius */ double raa; /* ellipsoid semi-major axis - added by RJM */ double rcc; /* ellipsoid semi-minor axis - added by RJM */ double vel1; /* Equivalent SC velocity */ double ht1; /* (SC_radius - RE) center of frame*/ double ht0; /* (SC_radius - RE) start of frame */ double htf; /* (SC_radius - RE) end of frame */ double near_range; double far_range; double prf1; double xmi1; double xmq1; double az_res; double fs; double slope; double pulsedur; double lambda; double rhww; double pctbw; double pctbwaz; double fd1; double fdd1; double fddd1; double sub_int_r; double sub_int_a; double stretch_r; double stretch_a; double a_stretch_r; double a_stretch_a; /* New parameters 8/28/97 -DTS */ double baseline_start; double baseline_center; double baseline_end; double alpha_start; double alpha_center; double alpha_end; /* New parameters 9/25/18 -EXU */ double B_offset_start; double B_offset_center; double B_offset_end; /* End new parameters 8/28/97 -DTS */ double bparaa; /* parallel baseline - added by RJM */ double bperpp; /* perpendicular baseline - added by RJM */ /* New parameters 4/26/06 */ int nrows; int num_lines; /* New parameters 09/18/08 */ double TEC_start; double TEC_end; #endif /* SOI_H */ GMTSAR_V5.7/gmtsar/nearest_grid.c000644 015705 000000 00000015232 13505462013 017652 0ustar00sandwellwheel000000 000000 #include "gmtsar.h" #include #include #include #include char *USAGE = "\nUsage: nearest_grid input.grd output.grd [search_radius]\n\n" " NaNs will be interpolated to its nearest neighbour\n\n"; int create_grid(void *, char *, char *, int); int main(int argc, char **argv) { void *API = NULL; int radius = 0; if (argc != 3 && argc != 4) die(USAGE, ""); if (argc == 4) { radius = atoi(argv[3]); printf("Setting search radius to be %d ...\n", radius); } if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; create_grid(API, argv[1], argv[2], radius); return (1); } int find_nearest(int i, int j, int *r2, int *is, int *js, int *xs, int *ys) { int ct = 0, nx, ny, nx1, ii, k = 0; int rr; rr = *r2 + 1e7; nx = (int)(sqrt((double)(*r2) / 2.0)); for (nx1 = nx; nx1 <= (int)sqrt((double)(*r2)) + 1; nx1++) { if (nx1 * nx1 < *r2) ny = (int)(sqrt((*r2) - nx1 * nx1)); else ny = 0; while (nx1 * nx1 + ny * ny <= (*r2) && ny <= nx1) { ny++; } if (ny <= nx1) { if (rr > nx1 * nx1 + ny * ny) { k = 0; rr = nx1 * nx1 + ny * ny; xs[k] = nx1; ys[k] = ny; } else if (rr == nx1 * nx1 + ny * ny) { k++; xs[k] = nx1; ys[k] = ny; } } } for (ii = 0; ii <= k; ii++) { nx = xs[ii]; ny = ys[ii]; if (ny == 0) { js[ct + 0] = 0; js[ct + 1] = 0; js[ct + 2] = nx; js[ct + 3] = -nx; is[ct + 0] = nx; is[ct + 1] = -nx; is[ct + 2] = 0; is[ct + 3] = 0; ct = ct + 4; } else if (nx != ny) { js[ct + 0] = ny; js[ct + 1] = ny; js[ct + 2] = -ny; js[ct + 3] = -ny; js[ct + 4] = nx; js[ct + 5] = -nx; js[ct + 6] = nx; js[ct + 7] = -nx; is[ct + 0] = nx; is[ct + 1] = -nx; is[ct + 2] = nx; is[ct + 3] = -nx; is[ct + 4] = ny; is[ct + 5] = ny; is[ct + 6] = -ny; is[ct + 7] = -ny; ct = ct + 8; } else { js[ct + 0] = nx; js[ct + 1] = nx; js[ct + 2] = -nx; js[ct + 3] = -nx; is[ct + 0] = nx; is[ct + 1] = -nx; is[ct + 2] = nx; is[ct + 3] = -nx; ct = ct + 4; } } /* if (i==409 && j == 1422) { fprintf(stderr,"Radius2: %d ",rr); for (ii=0;ii= 1) rr = // ((int)sqrt((double)rr)-1)*((int)sqrt((double)rr)-1); if (rr >= 4 && recy > 0 && recx > 0) rr = (recx - 1) * (recx - 1) + (recy - 1) * (recy - 1) - 1; // if (rr >= 4 && recy > 0) rr = ((int)sqrt(rr)-1)*((int)sqrt(rr)-1)-1; else if (rr >= 4 && recy == 0 && recx > 0) rr = (recx - 1) * (recx - 1) - 1; else if (rr >= 4 && recy > 0 && recx == 0) rr = (recy - 1) * (recy - 1) - 1; // else if (idx[j] != 0 && bufr[j] >= 4 && bufx[j] > 0) rr = // (bufx[j]-1)*(bufx[j]-1) + bufy[j]*bufy[j] -1; else if (idx[j] != 0 && // bufr[j] >= 4 && bufx[j] == 0) rr = bufy[j]*bufy[j] -1; else rr = 0; // if (rr<0) rr = 0; // rr = 0; while (flag == 0 && rr <= (double)(radius * radius)) { ct = find_nearest(i, j, &rr, is, js, xs, ys); cs++; for (k = 0; k < ct; k++) { if (is[k] >= 0 && is[k] < ny && js[k] >= 0 && js[k] < nx) { if (isnan(m[is[k] * nx + js[k]]) == 0) { m_interp[i * nx + j] = m[is[k] * nx + js[k]]; flag = 1; kt = k; recx = abs(is[k] - i); recy = abs(js[k] - j); // idx[j] = 1; // bufx[j] = abs(is[k]-i); // bufy[j] = abs(js[k]-j); // bufr[j] = // bufx[j]*bufx[j]+bufy[j]*bufy[j]; break; } } } } } if (i == 0 && rr == -1) fprintf(stderr, "(%d %d %d %d)\n", j, rr, recx, recy); // if (i == 409 && j == 1422) fprintf(stderr,"(%.5f %d %d %.5f %.6f %.6f // %.6f) ",m_interp[i*nx+j],is[kt]-i,js[kt]-j,m[is[kt]*nx+js[kt]], // m[0],m[1],m[2]); } // for(k=0;kheader->nx; ny = T->header->ny; // printf("nx: %d, ny: %d\n",nx,ny); m = T->data; m_interp = (float *)malloc(sizeof(float) * nx * ny); for (i = 0; i < ny; i++) for (j = 0; j < nx; j++) m_interp[i * nx + j] = m[i * nx + j]; if (rr == 0) { rr = sqrt((double)(nx * nx + ny * ny)) + 1; } nearest_interp(nx, ny, m, m_interp, rr); printf("WRITING GRID IMAGE: Width x Heihgt = %d x %d...\n", nx, ny); if (OUT == NULL && (OUT = GMT_Duplicate_Data(API, GMT_IS_GRID, GMT_DUPLICATE_DATA, T)) == NULL) die("error creating output grid", ""); OUT->data = m_interp; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, output, OUT)) die("Failed to write output grid", output); free(m_interp); return (1); } GMTSAR_V5.7/gmtsar/xcorr.h000644 015705 000000 00000007041 13505462013 016345 0ustar00sandwellwheel000000 000000 /* $Id: xcorr.h 39 2013-04-07 00:49:34Z pwessel $ */ #ifndef XCORR_H #define XCORR_H #include struct locs { int x; /* x pixel location */ int y; /* y pixel location */ int qflag; /* quality flag 1 = good */ float corr; /* correlation, normalized time domain */ float yoff; /* estimated y offset */ float xoff; /* estimated x offset */ float xfrac; /* estimated x offset (fraction) */ float yfrac; /* estimated y offset (fraction) */ int m1; /* mean value */ int m2; /* mean value */ }; struct xcorr { int format; /* type of input data [0 short complex, 1 real float, 3 real grd] */ int corr_flag; /* type of correlation flag 0 = standard; 1 = Gatelli; 2 = fft */ int offset_flag; /* set offset to zero (ignore prm) */ int interp_flag; /* interpolation flag 1 = yes 0 = no */ int interp_factor; /* interpolation factor (power of 2) */ int nx_corr; /* size of correlation window */ int ny_corr; /* size of correlation window */ int xsearch; /* size of x search offset */ int ysearch; /* size of y search offset */ int m_nx; /* x size of master file */ int m_ny; /* y size of master file */ int s_nx; /* x size of slave file */ int s_ny; /* y size of slave file */ int nxc; /* x size of correlation */ int nyc; /* y size of correlation */ int npx; /* x size of patch */ int npy; /* y size of patch */ int nxl; /* x number of locations */ int nyl; /* y number of locations */ int x_offset; /* intial starting offset in x */ int y_offset; /* intial starting offset in y */ int nlocs; /* number of locations */ int x_inc; /* x distance between locations */ int y_inc; /* y distance between locations */ int ri; /* range interpolation factor (must be power of two) */ short *mask; /* mask file (short integer) */ int *i1; /* data matrix 1 (integer) */ int *i2; /* data matrix 2 (integer) */ int n2x; /* size of interpolation */ int n2y; /* size of interpolation */ struct FCOMPLEX *d1; /* data 1 (amplitude in real, imag = 0)*/ struct FCOMPLEX *d2; /* data 2 (amplitude in real, imag = 0)*/ struct FCOMPLEX *c1; /* subset data patch 1 (complex float) */ struct FCOMPLEX *c2; /* subset data patch 2 (complex float) */ struct FCOMPLEX *c3; /* c1 * c2 (complex float) */ struct FCOMPLEX *ritmp; /* tmp array for range interpoation */ double *corr; /* correlation (real double) */ double astretcha; /* azimuth stretch parameter estimated from (prf2-prf1)/prf1 */ struct FCOMPLEX *md; /* interpolation file */ struct FCOMPLEX *md_exp; /* interpolation file */ struct FCOMPLEX *sd; /* interpolation file */ struct FCOMPLEX *sd_exp; /* interpolation file */ struct FCOMPLEX *cd_exp; /* interpolation file */ double *interp_corr; /* interpolation file */ FILE *data1; /* data file 1 */ FILE *data2; /* data file 2 */ FILE *param; /* input parameters file */ FILE *file; /* output file (offsets) */ char param_name[128]; char data1_name[128]; char data2_name[128]; char filename[128]; struct locs *loc; struct GMT_GRID *D1; struct GMT_GRID *D2; }; #endif /* XCORR_H */ GMTSAR_V5.7/gmtsar/do_time_int_xcorr.c000644 015705 000000 00000007452 13505462013 020720 0ustar00sandwellwheel000000 000000 /* $Id: do_time_int_xcorr.c 39 2013-04-07 00:49:34Z pwessel $ */ /*-------------------------------------------------------*/ #include "gmtsar.h" #include "xcorr.h" #include /*-------------------------------------------------------------------------------*/ double calc_time_corr(struct xcorr *xc, int ioff, int joff) { int ip, jp; long long a, b; long long gamma_num, gamma_denom1, gamma_denom2; double gamma, gamma_denom; gamma_denom = gamma_num = 0.0; gamma_num = gamma_denom1 = gamma_denom2 = 0; /* calculate normalized correlation */ /* template (b) stays the same */ /* a is master */ for (ip = 0; ip < xc->ny_corr; ip++) { for (jp = 0; jp < xc->nx_corr; jp++) { /* pixel values */ a = xc->i1[(xc->ysearch + ip + ioff) * xc->npx + jp + joff + xc->xsearch]; b = xc->i2[(xc->ysearch + ip) * xc->npx + jp + xc->xsearch]; /* standard correlation */ gamma_num += (a * b); gamma_denom1 += a * a; gamma_denom2 += b * b; } } gamma_denom = sqrt(1.0 * gamma_denom1 * gamma_denom2); if (gamma_denom == 0.0) { if (verbose) fprintf(stderr, "calc_corr: denominator = zero: setting corr to 0 \n"); gamma = 0.0; } else { gamma = 100.0 * fabs(gamma_num / gamma_denom); } if (debug) fprintf(stdout, " corr %6.2lf \n", gamma); return (gamma); } /*-------------------------------------------------------------------------------*/ double calc_time_corr_hat(struct xcorr *xc, int ioff, int joff) { int ip, jp; long long a, b; long long gamma_num, gamma_denom1, gamma_denom2; double gamma_denom; double gamma; gamma_num = gamma_denom1 = gamma_denom2 = 0; gamma_denom = gamma = 0.0; for (ip = 0; ip < xc->ny_corr; ip++) { for (jp = 0; jp < xc->nx_corr; jp++) { /* pixel values */ a = xc->i1[(xc->ysearch + ip + ioff) * xc->npx + jp + joff + xc->xsearch]; b = xc->i2[(xc->ysearch + ip) * xc->npx + jp + xc->xsearch]; /* frequency independent */ gamma_num += ((a * a * b * b)); gamma_denom1 += ((a * a * a * a)); gamma_denom2 += ((b * b * b * b)); } } gamma_denom = sqrtl(1.0 * gamma_denom1 * gamma_denom2); if (gamma_denom == 0.0) { fprintf(stderr, "calc_corr: division by zero \n"); gamma = 0.0; } else { gamma = fabs(gamma_num / gamma_denom); } if (gamma <= 0.5) { gamma = 0.0; } else { gamma = 100.0 * sqrt((gamma * 2.0) - 1.0); } if (debug) fprintf(stdout, " corr %lf \n", gamma); return (gamma); } /*-------------------------------------------------------------------------------*/ void do_time_corr(struct xcorr *xc, int iloc) { int ioff, joff; int ic, jc; float ipeak, jpeak; float max_corr; /* set parameters */ max_corr = -1; ipeak = jpeak = -9999; /* loops to calculate correlation at various offsets */ /* correlation window may not be the same as offset */ /* ioff, joff specifies the offset */ /* ic, jc is offset as non-negative for matrix */ for (ioff = -xc->ysearch; ioff < xc->ysearch; ioff++) { for (joff = -xc->xsearch; joff < xc->xsearch; joff++) { ic = ioff + xc->ysearch; jc = joff + xc->xsearch; /* calculate the correlation for each patch */ /* 0 means standard correlation */ if (xc->corr_flag == 0) xc->corr[ic * xc->nxc + jc] = calc_time_corr(xc, ioff, joff); /* 1 means Gatelli correlation */ if (xc->corr_flag == 1) xc->corr[ic * xc->nxc + jc] = calc_time_corr_hat(xc, ioff, joff); if (fabs(xc->corr[ic * xc->nxc + jc]) > max_corr) { max_corr = (float)fabs(xc->corr[ic * xc->nxc + jc]); jpeak = joff; ipeak = ioff; } } } /* do not do further interpolation in time domain */ if (debug) fprintf(stdout, " (time) jpeak %f xoffset %d \n", jpeak, xc->x_offset); if (debug) fprintf(stdout, " (time) ipeak %f yoffset %d \n", ipeak, xc->y_offset); xc->loc[iloc].xoff = -1 * jpeak; xc->loc[iloc].yoff = -1 * ipeak; xc->loc[iloc].corr = max_corr; } GMTSAR_V5.7/gmtsar/gmtsar.h000644 015705 000000 00000005536 13505462013 016514 0ustar00sandwellwheel000000 000000 /* $Id: gmtsar.h 109 2015-01-19 23:01:24Z sandwell $ */ /* taken from soi.h */ #ifndef GMTSAR_H #define GMTSAR_H #include "gmt.h" #include "sfd_complex.h" #include "lib_functions.h" #include #include #include #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #ifndef SOI_H #define SOL 299792456.0 #define PI 3.1415926535897932 #define PI2 6.2831853071795864 #define I2MAX 32767.0 #define I2SCALE 4.e6 #define DFACT 2.5e-07 #define NS 4 /*number of samples in the sinc function of 2D interpolation */ #define TRUE 1 #define FALSE 0 #define RW 0666 #define MULT_FACT 1000.0 #define sgn(A) ((A) >= 0.0 ? 1.0 : -1.0) #define clipi2(A) (((A) > I2MAX) ? I2MAX : (((A) < -I2MAX) ? -I2MAX : A)) #endif /* SOI_H */ #define nint(x) (int)rint(x) #define ERS1 1 #define ERS2 2 #define RSAT 3 #define ENVS 4 #define ALOS 5 #define EXIT_FLAG 1 #define paka(p) \ { \ perror((p)); \ exit(EXIT_FLAG); \ } #define MALLOC(p, s) \ if (((p) = malloc(s)) == NULL) { \ paka("error: malloc() "); \ } #define NULL_DATA 15 #define NULL_INT -99999 #define NULL_DOUBLE -99999.9999 #define NULL_CHAR "XXXXXXXX" #ifndef MIN #define MIN(x, y) (((x) < (y)) ? (x) : (y)) /* min and max value macros */ #endif #ifndef MAX #define MAX(x, y) (((x) > (y)) ? (x) : (y)) #endif #include "PRM.h" #include "llt2rat.h" #include "siocomplex.h" /* global variables */ int verbose; /* controls minimal level of output */ int debug; /* more output */ int swap; /* whether to swap bytes */ int quad_pol; /* quad polarization data */ int force_slope; /* whether to force the slope */ int dopp; /* whether to calculate doppler */ int roi_flag; /* whether to write roi.in */ int sio_flag; /* whether to write PRM file */ int nodata; int quiet_flag; double forced_slope; /* value to set chirp_slope to */ int SAR_mode; /* 0 => high-res */ /* 1 => wide obs */ /* 2 => polarimetry */ /* from ALOS Product Format 3-2 */ #endif /* GMTSAR_H */ GMTSAR_V5.7/gmtsar/siocomplex.h000644 015705 000000 00000000433 13505462013 017370 0ustar00sandwellwheel000000 000000 #ifndef _COMPLEX_H #define _COMPLEX_H #include"sfd_complex.h" fcomplex Cmul(fcomplex x, fcomplex y); fcomplex Cexp(float theta); fcomplex Conjg(fcomplex z); fcomplex RCmul(float a, fcomplex z); fcomplex Cadd(fcomplex x, fcomplex y); float Cabs(fcomplex z); #endif /* _COMPLEX_H */ GMTSAR_V5.7/gmtsar/sbas_utils.c000644 015705 000000 00000070747 13505462013 017370 0ustar00sandwellwheel000000 000000 /* $Id: sbas.h 39 2016-06-18 03/16/24 Xiaohua Xu $ */ /***************************************************************************************** * Program to do InSAR time-series analysis. * Use Small Baseline Subset (SBAS) *algorithm. * * * * Xiaohua Xu and David T. Sandwell, Jul, 2016 * * * * Taking the old sbas code to add atmospheric correction by means of common *point64_t * stacking by Tymofeyeva & Fialko 2015. * * * ***************************************************************************************** * Creator: Xiaopeng Tong and David Sandwell ** (Scripps Institution of Oceanography) * Date: 12/23/2012 ** ****************************************************************************************/ /***************************************************************************************** * Modification history: ** 08/31/2013 debug the program ** 03/20/2014 add DEM error, mean velocity ** 03/22/2014 add correlation, use weighted least-squares ** 04/01/2014 add seasonal term ** 08/19/2014 allocate memory with 1D array instead of multiple malloc * * 08/19/2014 do not require the velocity curve go through origin * 08/19/2014 *remove seasonal term * * 08/19/2014 fix temporal smoothing * ****************************************************************************************/ /* Reference: P. Berardino, G. Fornaro, R. Lanari, and E. Sansosti, “A new algorithm for surface deformation monitoring based on small baseline differential SAR interferograms,” IEEE Trans. Geosci. Remote Sensing, vol. 40, pp. 2375–2383, Nov. 2002. Schmidt, D. A., and R. Bürgmann(2003), Time-dependent land uplift and subsidence in the Santa Clara valley, California, from a large interferometric synthetic aperture radar data set, J. Geophys. Res., 108, 2416, doi:10.1029/2002JB002267, B9. */ /* Use DGELSY to solve the equations */ /* Calling DGELSY using column-major order */ #include "gmtsar.h" #include #define Malloc(type, n) (type *)malloc((n) * sizeof(type)) #define max(a, b) (((a) > (b)) ? (a) : (b)) #ifdef DEBUG #define checkpoint() printf("Checkpoint64_t at line %lld in file %s\n", __LINE__, __FILE__) #else #define checkpoint() #endif char *sbas_USAGE = " \n\nUSAGE: sbas intf.tab scene.tab N S xdim ydim [-atm ni] [-smooth sf] " "[-wavelength wl] [-incidence inc] [-range -rng] [-rms] [-dem]\n\n" " input: \n" "intf.tab -- list of unwrapped (filtered) interferograms:\n" " format: unwrap.grd corr.grd ref_id rep_id B_perp \n" "scene.tab -- list of the SAR scenes in chronological order\n" " format: scene_id number_of_days \n" " note: the number_of_days is relative to a reference date \n" "N -- number of the interferograms\n" "S -- number of the SAR scenes \n" "xdim and ydim -- dimension of the interferograms\n" "-smooth sf -- smoothing factors, default=0 \n" "-atm ni -- number of iterations for atmospheric correction, " "default=0(skip atm correction) \n" "-wavelength wl -- wavelength of the radar wave (m) default=0.236 \n" "-incidence theta -- incidence angle of the radar wave (degree) " "default=37 \n" "-range rng -- range distance from the radar to the center of the " "interferogram (m) default=866000 \n" "-rms -- output RMS of the data misfit grids (mm): rms.grd\n" "-dem -- output DEM error (m): dem.grd \n\n" " output: \n" "disp_##.grd -- cumulative displacement time series (mm) grids\n" "vel.grd -- mean velocity (mm/yr) grids \n\n" " example:\n" " sbas intf.tab scene.tab 88 28 700 1000 \n\n"; void dgelsy_(const int64_t *m, const int64_t *n, const int64_t *nrhs, double *G, const int64_t *lda, double *b, const int64_t *ldb, int64_t *jpvt, const double *rcond, const int64_t *rank, double *work, const int64_t *lwork, const int64_t *info); int parse_command_ts(int64_t agc, char **agv, float *sf, double *wl, double *theta, double *rng, int64_t *flag_rms, int64_t *flag_dem, int64_t *atm) { int64_t i; for (i = 7; i < agc; i++) { if (!strcmp(agv[i], "-smooth")) { i++; if (i == agc) die("no option after -smooth!\n", ""); *sf = atof(agv[i]); } else if (!strcmp(agv[i], "-wavelength")) { i++; if (i == agc) die("no option after -wavelength!\n", ""); *wl = atof(agv[i]); } else if (!strcmp(agv[i], "-incidence")) { i++; if (i == agc) die("no option after -incidence! \n", ""); *theta = atof(agv[i]); } else if (!strcmp(agv[i], "-range")) { i++; if (i == agc) die("no option after -range \n", ""); *rng = atof(agv[i]); } else if (!strcmp(agv[i], "-rms")) { *flag_rms = 1; fprintf(stderr, "compute RMS misfit\n"); } else if (!strcmp(agv[i], "-dem")) { *flag_dem = 1; fprintf(stderr, "compute DEM error\n"); } else if (!strcmp(agv[i], "-atm")) { i++; if (i == agc) die("no option after -atm \n", ""); *atm = atoi(agv[i]); } else { fprintf(stderr, " %s *** option not recognized ***\n\n", agv[i]); fprintf(stderr, "%s", sbas_USAGE); exit(1); } } fprintf(stderr, "\nsetting smoothing to %7.3lf \n", *sf); fprintf(stderr, "setting radar wavelength to %7.3lf m \n", *wl); fprintf(stderr, "setting radar incidence angle to %7.3lf degree \n", *theta); fprintf(stderr, "setting range to %9.3lf m \n", *rng); return (1); } int allocate_memory_ts(int64_t **jpvt, double **work, double **d, double **ds, float **bperp, char ***gfile, char ***cfile, int64_t **L, double **time, int64_t **H, double **G, double **A, double **Gs, int64_t **flag, float **dem, float **res, float **vel, float **phi, float **var, float **disp, int64_t n, int64_t m, int64_t lwork, int64_t ldb, int64_t N, int64_t S, int64_t xdim, int64_t ydim, int64_t **hit) { int64_t i; char **p1, **p2; if ((*jpvt = Malloc(int64_t, n)) == NULL) die("memory allocation!", "jpvt"); if ((*work = Malloc(double, lwork)) == NULL) die("memory allocation!", "work"); if ((*d = Malloc(double, ldb)) == NULL) die("memory allocation!", "d"); if ((*ds = Malloc(double, N)) == NULL) die("memory allocation!", "ds"); if ((*bperp = Malloc(float, N)) == NULL) die("memory allocation!", "bperp"); if ((*gfile = Malloc(char *, N)) == NULL) die("memory allocation!", "gfile"); if ((*cfile = Malloc(char *, N)) == NULL) die("memory allocation!", "cfile"); p1 = *gfile; p2 = *cfile; for (i = 0; i < N; i++) { if ((p1[i] = Malloc(char, 256)) == NULL) die("memory allocation!", "gfile[i]"); if ((p2[i] = Malloc(char, 256)) == NULL) die("memory allocation!", "cfile[i]"); } if ((*L = Malloc(int64_t, S)) == NULL) die("memory allocation!", "L"); if ((*time = Malloc(double, S)) == NULL) die("memory allocation!", "time"); if ((*H = Malloc(int64_t, N * 2)) == NULL) die("memory allocation!", "H"); if ((*G = Malloc(double, m *n)) == NULL) die("memory allocation!", "G"); if ((*A = Malloc(double, m *n)) == NULL) die("memory allocation!", "A"); if ((*Gs = Malloc(double, N *n)) == NULL) die("memory allocation!", "Gs"); if ((*flag = Malloc(int64_t, xdim * ydim)) == NULL) die("memory allocation!", "flag"); if ((*dem = Malloc(float, xdim *ydim)) == NULL) die("memory allocation!", "dem"); if ((*res = Malloc(float, xdim *ydim)) == NULL) die("memory allocation!", "res"); if ((*vel = Malloc(float, xdim *ydim)) == NULL) die("memory allocation!", "vel"); if ((*phi = Malloc(float, N *xdim *ydim)) == NULL) die("memory allocation!", "phi"); if ((*var = Malloc(float, N *xdim *ydim)) == NULL) die("memory allocation!", "var"); if ((*disp = Malloc(float, S *xdim *ydim)) == NULL) die("memory allocation!", "disp"); if ((*hit = Malloc(int64_t, S * S)) == NULL) die("memory allocation!", "hit"); printf("Memory Allocation Successful...\n"); return (1); } int init_array_ts(double *G, double *Gs, float *res, float *dem, float *disp, int64_t n, int64_t m, int64_t xdim, int64_t ydim, int64_t N, int64_t S) { int64_t i, j, k, p; for (i = 0; i < m * n; i++) G[i] = 0; for (i = 0; i < n * N; i++) Gs[i] = 0; for (k = 0; k < ydim; k++) { for (j = 0; j < xdim; j++) { res[j + xdim * k] = 0; dem[j + xdim * k] = 0; for (p = 0; p < S; p++) { disp[p * xdim * ydim + j * ydim + k] = 0; } } } return (1); } int read_table_data_ts(void *API, FILE *infile, FILE *datefile, char **gfile, char **cfile, int64_t *H, float *bperp, int64_t *flag, float *var, float *phi, int64_t S, int64_t N, int64_t xdim, int64_t ydim, struct GMT_GRID **Out, int64_t *L, double *time) { char tmp1[200], tmp2[200], tmp3[200]; int64_t i, j, k, xin, yin; float *corin, *grdin; struct GMT_GRID *CC = NULL, *GG = NULL; printf("read table file ...\n"); /* read in scene.tab */ i = 0; while (fscanf(datefile, "%s %s", &tmp1[0], &tmp2[0]) == 2) { if (feof(datefile)) break; L[i] = atoi(tmp1); time[i] = atof(tmp2); i = i + 1; } if (i != S) die("S and number of the SAR scenes don't match!", ""); fprintf(stderr, "number of SAR scenes is %lld \n", S); for (i = S - 1; i >= 0; i--) time[i] = time[i] - time[0]; /* read in intf.tab */ i = 0; while (fscanf(infile, "%s %s %s %s %s", gfile[i], cfile[i], &tmp1[0], &tmp2[0], &tmp3[0]) == 5) { if (feof(infile)) break; H[i * 2 + 0] = atoi(tmp1); H[i * 2 + 1] = atoi(tmp2); bperp[i] = atof(tmp3); i = i + 1; } if (i != N) die("N and number of interferograms don't match!", ""); fprintf(stderr, "number of interferograms is %lld \n", N); /* read in N 2-dimensional grd file into 3D array */ printf("read phase and correlation grids ...\n"); for (i = 0; i < N; i++) { if ((CC = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, cfile[i], NULL)) == NULL) die("Can't open ", cfile[i]); xin = CC->header->nx; yin = CC->header->ny; if (xin != xdim || yin != ydim) die("dimension don't match!", cfile[i]); if ((GG = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, gfile[i], NULL)) == NULL) die("Can't open ", gfile[i]); xin = GG->header->nx; yin = GG->header->ny; if (xin != xdim || yin != ydim) die("dimension don't match!", gfile[i]); if ((CC = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, cfile[i], CC)) == NULL) die("Can't read ", cfile[i]); if ((GG = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, gfile[i], GG)) == NULL) die("Can't read ", gfile[i]); corin = CC->data; grdin = GG->data; for (k = 0; k < ydim; k++) { for (j = 0; j < xdim; j++) { phi[i * xdim * ydim + ydim * j + k] = grdin[j + k * xdim]; if (isnan(grdin[j + k * xdim]) != 0) { flag[j + xdim] = 1; } if (corin[j + k * xdim] >= 1e-2 && corin[j + k * xdim] <= 0.99) { /* Rosen et al., 2000 IEEE */ var[i * xdim * ydim + ydim * j + k] = sqrt((1.0 - corin[j + k * xdim] * corin[j + k * xdim]) / (corin[j + k * xdim] * corin[j + k * xdim])); } else if (corin[j + k * xdim] < 1e-2) { var[i * xdim * ydim + j * ydim + k] = 99.99; } else { var[i * xdim * ydim + j * ydim + k] = 0.1; } } } if (*Out == NULL && (*Out = GMT_Duplicate_Data(API, GMT_IS_GRID, GMT_DUPLICATE_DATA, CC)) == NULL) die("error creating output grid", ""); /* Do this once */ if (GMT_Destroy_Data(API, &CC)) die("error freeing data", cfile[i]); if (GMT_Destroy_Data(API, &GG)) die("error freeing data", gfile[i]); } return (1); } int init_G_ts(double *G, double *Gs, int64_t N, int64_t S, int64_t m, int64_t n, int64_t *L, int64_t *H, double *time, float sf, float *bperp, double scale) { int64_t i, j; printf("fill the G matrix ...\n"); for (i = 0; i < N; i++) { for (j = 0; j < S - 1; j++) { if (L[j] >= H[i * 2 + 0] && L[j] < H[i * 2 + 1]) { G[i + m * j] = 1; Gs[i + N * j] = 1; } } G[i + m * (n - 1)] = bperp[i] * scale; Gs[i + N * (n - 1)] = bperp[i] * scale; } for (i = 0; i < S - 2; i++) { G[i + N + i * m] = sf / (time[i + 1] - time[i]); G[i + N + (i + 1) * m] = -sf / (time[i + 2] - time[i + 1]); } return (1); } int64_t lsqlin_sov_ts(int64_t xdim, int64_t ydim, float *disp, float *vel, int64_t *flag, double *d, double *ds, double *time, double *G, double *Gs, double *A, float *var, float *phi, int64_t N, int64_t S, int64_t m, int64_t n, double *work, int64_t lwork, int64_t flag_dem, float *dem, int64_t flag_rms, float *res, int64_t *jpvt, double wl, double *atm_rms) { int64_t i, j, k, p, info = 0; int64_t rank = 0, nrhs = 1, lda, ldb; // double rcond = 1e-3,pred; double rcond = 1e-3; double sumxx, sumxy, sumx, sumy, sumyy, aa; // float new,old; int64_t count; lda = max(1, m); ldb = max(1, max(m, n)); count = 0; for (i = 0; i < S; i++) if (atm_rms[i] != 0.0 && i != 0 && i != 1 && i != S - 1 && i != S - 2) count++; printf("run least-squares problem over %lld by %lld pixel (%lld) ...\n", xdim, ydim, count); for (k = 0; k < ydim; k++) { for (j = 0; j < xdim; j++) { /* check the dummy value of the grd file */ if (flag[j + xdim * k] != 1) { for (i = 0; i < m; i++) { d[i] = 0; if (i < N) { d[i] = (double)phi[i * xdim * ydim + ydim * j + k] / var[i * xdim * ydim + ydim * j + k]; ds[i] = d[i]; } } for (i = 0; i < m; i++) { for (p = 0; p < n; p++) { if (i < N) { G[i + m * p] = A[i + m * p] / var[i * xdim * ydim + ydim * j + k]; } else { G[i + m * p] = A[i + m * p]; } } } dgelsy_(&m, &n, &nrhs, G, &lda, d, &ldb, jpvt, &rcond, &rank, work, &lwork, &info); if (info != 0) printf("warning! input has an illegal value\n"); if (j == 0 && k == 0) { if (rank == n) { printf("matrix is full rank: %lld\n\n", rank); } else if (rank < n) { printf("matrix is rank-deficient: %lld\n\n", rank); if (rank == 0) { printf("WARNING: rank is zero. Check scene.tab and intf.tab for " "possible duplicates.\n\n"); for (i = 0; i < N; i++) { for (p = 0; p < S - 1; p++) { printf("%.2f ", G[i + S * p]); } printf("\n"); } } } } for (i = 0; i < S; i++) { for (p = 0; p < i; p++) { disp[i * xdim * ydim + j * ydim + k] = disp[i * xdim * ydim + j * ydim + k] + d[p]; } // disp[i*xdim*ydim+j*ydim+k]=-79.58*wl*disp[i*xdim*ydim+j*ydim+k]; // //1000/4/pi } if (flag_dem == 1) dem[j + xdim * k] = d[n - 1]; /* if (flag_rms == 1) { new=0; old=0; // check the WRMS reduction for (i=0;i 2) { for (i = 2; i < S - 2; i++) { if (atm_rms[i] != 0.0) { sumxy = sumxy + time[i] * disp[i * xdim * ydim + j * ydim + k]; sumxx = sumxx + time[i] * time[i]; sumy = sumy + disp[i * xdim * ydim + j * ydim + k]; sumx = sumx + time[i]; } } vel[j + xdim * k] = -79.58 * wl * (count * sumxy - sumx * sumy) / (count * sumxx - sumx * sumx) * 365.0; if (flag_rms == 1) { aa = sumy / count - (count * sumxy - sumx * sumy) / (count * sumxx - sumx * sumx) * sumx / count; for (i = 2; i < S - 2; i++) { if (atm_rms[i] != 0.0) { sumyy = sumyy + pow((disp[i * xdim * ydim + j * ydim + k] - time[i] * vel[j + xdim * k] / (-79.58 * wl * 365) - aa), 2); } } res[j + xdim * k] = sqrt(count * sumyy / ((count - 2) * (count * sumxx - sumx * sumx))) * (79.58 * wl * 365); } } else { for (i = 0; i < S; i++) { sumxy = sumxy + time[i] * disp[i * xdim * ydim + j * ydim + k]; sumxx = sumxx + time[i] * time[i]; sumy = sumy + disp[i * xdim * ydim + j * ydim + k]; sumx = sumx + time[i]; } vel[j + xdim * k] = -79.58 * wl * (S * sumxy - sumx * sumy) / (S * sumxx - sumx * sumx) * 365.0; if (flag_rms == 1) { aa = sumy / S - (S * sumxy - sumx * sumy) / (S * sumxx - sumx * sumx) * sumx / S; for (i = 2; i < S - 2; i++) { sumyy = sumyy + pow((disp[i * xdim * ydim + j * ydim + k] - time[i] * vel[j + xdim * k] / (-79.58 * wl * 365) - aa), 2); } res[j + xdim * k] = sqrt(S * sumyy / ((S - 2) * (S * sumxx - sumx * sumx))) * (79.58 * wl * 365); } } } else { for (i = 0; i < S; i++) disp[i * xdim * ydim + j * ydim + k] = NAN; vel[j + xdim * k] = NAN; if (flag_rms == 1) res[j + xdim * k] = NAN; if (flag_dem == 1) dem[j + xdim * k] = NAN; } } } return (1); } int write_output_ts(void *API, struct GMT_GRID *Out, int64_t agc, char **agv, int64_t xdim, int64_t ydim, int64_t S, int64_t flag_rms, int64_t flag_dem, float *disp, float *vel, float *res, float *dem, float *screen, double wl, int64_t n_atm, int64_t *L) { int64_t i, j, k; float *grdin, *save_grid; char tmp1[200], outfile[200]; printf("write output ...\n"); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); strcpy(tmp1, ""); for (i = 0; i < agc; i++) { strcat(tmp1, agv[i]); strcat(tmp1, " "); } strcpy(Out->header->command, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_COMMAND, tmp1, Out)) die("could not set title", ""); // strcpy(Out->header->title,"displacement time series (mm)"); grdin = Out->data; for (i = 0; i < S; i++) { strcpy(outfile, "disp_"); for (k = 0; k < ydim; k++) { for (j = 0; j < xdim; j++) { // disp[i*xdim*ydim+j*ydim+k]=-79.58*wl*disp[i*xdim*ydim+j*ydim+k]; // //1000/4/pi grdin[j + k * xdim] = -79.58 * wl * disp[i * xdim * ydim + j * ydim + k]; } } sprintf(tmp1, "%07lld", L[i]); strcat(outfile, tmp1); strcat(outfile, ".grd"); sprintf(tmp1, "Displacement Time Series %03lld", i + 1); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "Displacement Time Series (mm)", Out)) die("could not set title", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, tmp1, Out)) die("could not set title", ""); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, outfile, Out)) { die("Failed to write output grid", outfile); } } save_grid = Out->data; /* Remember the original grid */ if (flag_rms == 1) { Out->data = res; sprintf(outfile, "rms.grd"); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "WRMS reduction from SBAS (mm)", Out)) die("could not set title", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "Weighed Root Mean Square of Fitting", Out)) die("could not set title", ""); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, outfile, Out)) { die("Failed to write output grid", outfile); } } if (flag_dem == 1) { Out->data = dem; sprintf(outfile, "dem.grd"); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "DEM error estimated from SBAS (m)", Out)) die("could not set title", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "Digital Elevation Model Error", Out)) die("could not set title", ""); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, outfile, Out)) { die("Failed to write output grid", outfile); } } if (n_atm != 0) { grdin = Out->data; for (i = 0; i < S; i++) { strcpy(outfile, "aps_"); for (k = 0; k < ydim; k++) { for (j = 0; j < xdim; j++) { grdin[j + k * xdim] = screen[i * xdim * ydim + j * ydim + k]; } } sprintf(tmp1, "%07lld", L[i]); strcat(outfile, tmp1); strcat(outfile, ".grd"); sprintf(tmp1, "Atmospheric Phase Screen %03lld", i + 1); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "Atmospheric Phase Screen", Out)) die("could not set title", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, tmp1, Out)) die("could not set title", ""); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, outfile, Out)) { die("Failed to write output grid", outfile); } } } Out->data = vel; sprintf(outfile, "vel.grd"); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "Mean LOS velocity from SBAS (mm/yr)", Out)) die("could not set title", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "Mean Line-Of-Sight velocity from SBAS", Out)) die("could not set title", ""); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, outfile, Out)) { die("Failed to write output grid", outfile); } Out->data = save_grid; /* Restore the pointer before destroying */ return (1); } int free_memory_ts(int64_t N, float *phi, float *var, char **gfile, char **cfile, float *disp, double *G, double *A, double *Gs, int64_t *H, double *d, double *ds, int64_t *L, float *res, float *vel, double *time, int64_t *flag, float *bperp, float *dem, double *work, int64_t *jpvt, int64_t *hit) { int64_t i; for (i = 0; i < N; i++) { free(gfile[i]); free(cfile[i]); } free(phi); free(var); free(gfile); free(cfile); free(disp); free(G); free(A); free(Gs); free(H); free(d); free(ds); free(L); free(res); free(vel); free(time); free(flag); free(bperp); free(dem); free(work); free(jpvt); free(hit); return (1); } int sum_intfs(float *phi, int64_t *mark, float *screen, int64_t xdim, int64_t ydim, int64_t N) { int64_t n, i, j, sum = 0; for (i = 0; i < N; i++) sum += llabs(mark[i]); // fprintf(stderr,"%lld sums ",sum); for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { screen[i * xdim + j] = 0.0; } } if (sum != 0) { for (n = 0; n < N; n++) { if (mark[n] == 0) continue; for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { screen[i * xdim + j] += -phi[n * xdim * ydim + i * xdim + j] * (float)mark[n] / (float)sum; } } } } return (1); } int connect(int64_t *L, int64_t *H, double *time, int64_t *hit, int64_t *mark, int64_t N, int64_t S, int64_t n, int64_t mode) { // mode = 0 for all connections, mode = 1 for even connections int64_t i, j; //,sum = 0; for (i = 0; i < N; i++) mark[i] = 0; for (i = 0; i < S; i++) { if (hit[i * S + n] == 1) { for (j = 0; j < N; j++) { if (L[i] == H[2 * j] && L[n] == H[2 * j + 1]) mark[j] = -1; } } if (hit[n * S + i] == 1) { for (j = 0; j < N; j++) { if (L[n] == H[2 * j] && L[i] == H[2 * j + 1]) mark[j] = 1; } } } /* trim the result */ if (mode == 1) { for (i = 0; i < S; i++) { if (hit[i * S + n] == 1) { for (j = n; j < S; j++) { if (hit[n * S + j] == 1 && fabs((time[n] - time[i]) - (time[j] - time[n])) < 5) break; } if (j == S) { for (j = 0; j < N; j++) if (L[i] == H[2 * j] && L[n] == H[2 * j + 1]) mark[j] = 0; } } if (hit[n * S + i] == 1) { for (j = 0; j < n; j++) { if (hit[j * S + n] == 1 && fabs((time[n] - time[j]) - (time[i] - time[n])) < 5) break; } if (j == n) { for (j = 0; j < N; j++) if (L[n] == H[2 * j] && L[i] == H[2 * j + 1]) mark[j] = 0; } } } } /* for (i=0;i 0) { j=N-1; while (j>=0 && mark[j] == 0) j--; if (j<0) die("incorrect process of trimming connection verctor",""); mark[j] = 0; sum -= 1; } if (sum < 0) { j=0; while (j=N) die("incorrect process of trimming connection verctor",""); mark[j] = 0; sum += 1; } } */ return (1); } double compute_noise(float *screen, int64_t xdim, int64_t ydim) { int64_t i, j, n; double sum = 0.0, rms = 0.0; n = 0; for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { if (isnan(screen[i * xdim + j]) == 0) { sum = sum + (double)screen[i * xdim + j]; n++; } } } if (sum != 0) { sum = sum / (double)n; for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { if (isnan(screen[i * xdim + j]) == 0) { rms = rms + ((double)screen[i * xdim + j] - sum) * ((double)screen[i * xdim + j] - sum); } } } rms = sqrt(rms / (double)n); } // fprintf(stderr,"num points calculated: %lld\n",n); return (rms); } int apply_screen(float *screen, float *phi, int64_t xdim, int64_t ydim, int64_t N, int64_t *mark) { // also correct for the ones not used in estimation of aps. int64_t i, j, n; for (n = 0; n < N; n++) { if (mark[n] != 0) { // fprintf(stderr,"applying atm screen to intf %lld...\n",n); for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { phi[n * xdim * ydim + i * xdim + j] = phi[n * xdim * ydim + i * xdim + j] + screen[i * xdim + j] * mark[n]; } } } } return (1); } int remove_ts(float *phi, float *ts, int64_t xdim, int64_t ydim, int64_t N, int64_t S, int64_t *H, int64_t *L) { int64_t i, j, n, h1, h2; for (n = 0; n < N; n++) { for (i = 0; i < S; i++) { if (H[2 * n] == L[i]) h1 = i; if (H[2 * n + 1] == L[i]) h2 = i; } // fprintf(stderr,"removing deformation for pair // %lld_%lld...\n",L[h1],L[h2]); for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { phi[n * xdim * ydim + i * xdim + j] = phi[n * xdim * ydim + i * xdim + j] - ts[h2 * xdim * ydim + i * xdim + j] + ts[h1 * xdim * ydim + i * xdim + j]; } } } return (1); } int rank_double(double *nums, int64_t *seq, int64_t n) { // rank the numbers, seq will record the sequence int64_t i, j, recn, *mark; double *nums2, rec; nums2 = (double *)malloc(n * sizeof(double)); mark = (int64_t *)malloc(n * sizeof(int64_t)); for (i = 0; i < n; i++) nums2[i] = nums[i]; for (i = 0; i < n; i++) { if (nums2[i] == 0.0) mark[i] = 1; else mark[i] = 0; // fprintf(stderr,"%lld ",mark[i]); } // fprintf(stderr,"\n\n"); for (i = 0; i < n; i++) { rec = 0.0; for (j = 0; j < n; j++) { if (rec < fabs(nums2[j])) { rec = fabs(nums2[j]); recn = j; } } if (rec != 0.0) { seq[i] = recn; nums2[recn] = 0.0; } else { break; } } recn = 0; for (i = 0; i < n; i++) if (mark[i] != 0) recn++; for (i = 0; i < recn; i++) { for (j = 0; j < n; j++) { if (mark[j] != 0) { seq[n - recn + i] = j; mark[j] = 0; break; } } } return (1); } GMTSAR_V5.7/gmtsar/llt2xyz.h000644 015705 000000 00000005713 13505462013 016644 0ustar00sandwellwheel000000 000000 /* @(#)physcon.h 1.1 98/12/08 */ /********1*********2*********3*********4*********5*********6*********7** * Name: physcon * Version: 9602.17 * Author: M. Schenewerk * Purpose: physical constants * * Global: * ----------- * C_to_K convert Celcius to Kelvin [degree K] * FIVE (double)5.0 * FOUR (double)4.0 * L1_frequency GPS L1 frequency [Hz] * L1_wavelength GPS L1 wavelength [m] * L2_frequency GPS L2 frequency [Hz] * L2_wavelength GPS L2 wavelength [m] * ONE (double)1.0 * THREE (double)3.0 * TWO (double)2.0 * ZERO (double)0.0 * cee speed of light [m/s] * deg_to_rad conversion for degrees to radians [rad/deg] * eflat Earth flattening factor * emajor Earth's semi-major axis [m] * eom Earth / Moon mass ratio * erate Earth's rotation rate [rad/sec] * pi pi * pio2 pi over two * rad_to_deg conversion for radians to degrees [deg/rad] * rad_to_hours conversion for radians to hours [hours/rad] * st_to_ut conversion for siderial to UT time [sid s/UT s] * soe Sun / Earth mass ratio * soem Sun / (Earth + Moon) mass ratio * tropical_year tropical year [day] * twopi two pi * ut_to_st conversion factor for UT to siderial time [UT s/sid s] * * Notes: * ----------- * * References: * ----------- * "IERS Standards (1992)", IERS Technical Note 13, ed. D.D. McCarthy, * July 1992 * ********1*********2*********3*********4*********5*********6*********7** * Modification History: * 9602.17, MSS, Converted to C. ********1*********2*********3*********4*********5*********6*********7*/ #ifndef physcon_h #define physcon_h #define ZERO ((double)0.0) #define ONE ((double)1.0) #define TWO ((double)2.0) #define THREE ((double)3.0) #define FOUR ((double)4.0) #define FIVE ((double)5.0) #define pi ((double)3.14159265358979) #define pio2 ((double)0.5 * pi) #define twopi ((double)2.0 * pi) #define deg_to_rad (twopi / (double)360.0) #define rad_to_deg ((double)360.0 / twopi) #define rad_to_hours ((double)24.0 / twopi) #define m_to_km ((double)1.0e-3) #define km_to_m ((double)1.0e+3) #define cee ((double)299792458.0) #define C_to_K ((double)273.15) #define J2000 ((long)51545) #define tropical_year ((double)365.2421910) #define ut_to_st ((double)1.00273790934) #define st_to_ut ((double)0.9972695663399999) #define emajor ((double)6378137.0) #define eflat ((double)0.00335281068118) #define erate ((double)7.292115855228083e-5) #define soem ((double)328900.550) #define eom ((double)81.3005870) #define soe (soem * ((double)1.0 + (double)1.0 / eom)) #define L1_frequency ((double)1575.420e+6) #define L2_frequency ((double)1227.600e+6) #define L1_wavelength ((double)cee / L1_frequency) #define L2_wavelength ((double)cee / L2_frequency) #endif /* physcon_h */ GMTSAR_V5.7/gmtsar/write_orb.c000644 015705 000000 00000001427 13505462013 017201 0ustar00sandwellwheel000000 000000 #include "lib_functions.h" #include "orbit.h" #include "siocomplex.h" #include void write_orb(FILE *, struct SAT_ORB *); void write_orb(FILE *ldrfile, struct SAT_ORB *orb) { int n; int nd, iy, id; double isec, idsec, pt, px, py, pz, vx, vy, vz; /* write the header information */ nd = orb->nd; iy = orb->iy; id = orb->id; isec = orb->sec; idsec = orb->dsec; fprintf(ldrfile, "%d %d %d %lf %lf \n", nd, iy, id, isec, idsec); /* write the state vectors */ for (n = 0; n < nd; n++) { pt = orb->points[n].pt; px = orb->points[n].px; py = orb->points[n].py; pz = orb->points[n].pz; vx = orb->points[n].vx; vy = orb->points[n].vy; vz = orb->points[n].vz; fprintf(ldrfile, "%d %d %lf %lf %lf %lf %lf %lf %lf \n", iy, id, pt, px, py, pz, vx, vy, vz); } } GMTSAR_V5.7/gmtsar/PRM.h000644 015705 000000 00000005344 13505462013 015652 0ustar00sandwellwheel000000 000000 #ifndef PRM_H #define PRM_H struct PRM { char input_file[256]; char SLC_file[256]; char out_amp_file[256]; char out_data_file[256]; char deskew[8]; char iqflip[8]; char offset_video[8]; char srm[8]; char ref_file[128]; char led_file[128]; char orbdir[8]; /* orbit direction A or D (ASCEND or DESCEND) - added by RJM*/ char lookdir[8]; /* look direction R or L (RIGHT or LEFT) */ char dtype[8]; /* SLC data type a-SCOMPLEX integer complex, c-FCOMPLEX float complex */ char date[16]; /* yymmdd format - skip first two digits of year - added by RJM*/ int debug_flag; int bytes_per_line; int good_bytes; int first_line; int num_patches; int first_sample; int num_valid_az; int st_rng_bin; int num_rng_bins; int chirp_ext; int nlooks; int rshift; int ashift; int fdc_ystrt; int fdc_strt; int rec_start; int rec_stop; int SC_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)-Envisat_SLC (7)-TSX (8)-CSK (9)-RS2 (10)-S1A */ int ref_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10)-S1A */ int nrows; int num_lines; int SLC_format; /* 1 => complex ints (2 bytes) 2 => complex floats (4 bytes) */ double SC_clock_start; /* YYDDD.DDDD */ double SC_clock_stop; /* YYDDD.DDDD */ double icu_start; /* onboard clock counter */ double clock_start; /* DDD.DDDDDDDD clock without year has more precision */ double clock_stop; /* DDD.DDDDDDDD clock without year has more precision */ double caltone; double RE; /*local earth eadius */ double rc; /* polar radius */ double ra; /* equatorial radius */ double vel; /* Equivalent SC velocity */ double ht; /* (SC_radius - RE) center */ double ht_start; /* (SC_radius - RE) start */ double ht_end; /* (SC_radius - RE) end */ double near_range; double far_range; double prf; double xmi; double xmq; double az_res; double fs; double chirp_slope; double pulsedur; double lambda; double rhww; double pctbw; double pctbwaz; double fd1; double fdd1; double fddd1; double delr; /* added RJM */ double yaw; /* added RJM 12/07*/ double SLC_scale; double sub_int_r; double sub_int_a; double sub_double; double stretch_r; double stretch_a; double a_stretch_r; double a_stretch_a; double baseline_start; double baseline_center; double baseline_end; double alpha_start; double alpha_center; double alpha_end; double bpara; /* parallel baseline - added by RJM */ double bperp; /* perpendicular baseline - added by RJM */ /* New parameters 9/25/18 -EXU */ double B_offset_start; double B_offset_center; double B_offset_end; }; #endif /* PRM_H */ GMTSAR_V5.7/gmtsar/fft_interpolate_routines.c000644 015705 000000 00000006661 13505462013 022327 0ustar00sandwellwheel000000 000000 /* $Id: fft_interpolate_routines.c 109 2015-01-19 23:01:24Z sandwell $ */ #include "gmtsar.h" /*--------------------------------------------------------------------------------------*/ /* some fft-based interpolation routines - rjm July 2009 */ /* */ /* fft_interpolate_1d(vin, N, vout, factor) uses fft to interpolate a * signal */ /* vin - complex vector length N */ /* vout - complex vector length M = factor*N */ /* factor - interpolation factor */ /* N must be even */ /* adjust amplitude */ /* */ /* fft_interpolate_2d(min, N, mout, factor) 2D but uses 1D fft */ /* min - complex matrix length NxN */ /* mout - complex matrix length MxM = factor*N */ /* */ /* fft_arrange_interpolate(in, N, out, factor) rearrange terms of transformed * signal */ /* */ /* all vectors and matrices must be pre-allocated */ /* all use the SIO fcomplex and call GMT_FFT_1D or GMT_FFT_2D */ /* fcomplex - struct {float r; float i} where r is real and i imag */ /*--------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/ void fft_arrange_interpolate(struct FCOMPLEX *in, int N, struct FCOMPLEX *out, int M, int ifactor) { int i, N2; N2 = N / 2; for (i = 0; i < M; i++) out[i].r = out[i].i = 0.0f; for (i = 0; i < N2; i++) { out[i].r = in[i].r; out[i].i = in[i].i; out[i + (2 * ifactor - 1) * N2].r = in[i + N2].r; out[i + (2 * ifactor - 1) * N2].i = in[i + N2].i; } } /*------------------------------------------------------------------------*/ void fft_interpolate_1d(void *API, struct FCOMPLEX *in, int N, struct FCOMPLEX *out, int ifactor) { int i, M; M = ifactor * N; /* forward fft */ // dir = -1; // cfft1d_(&N, in, &dir); GMT_FFT_1D(API, (float *)in, N, GMT_FFT_FWD, GMT_FFT_COMPLEX); /* re-arrange values in fft */ fft_arrange_interpolate(in, N, out, M, ifactor); /* backward fft */ // dir = 1; // cfft1d_(&M, out, &dir); GMT_FFT_1D(API, (float *)out, M, GMT_FFT_INV, GMT_FFT_COMPLEX); /* scale amplitude */ for (i = 0; i < M; i++) { out[i].r = ((float)ifactor) * out[i].r; out[i].i = ((float)ifactor) * out[i].i; } } /*--------------------------------------------------------------------------------------*/ void fft_interpolate_2d(void *API, struct FCOMPLEX *in, int N1, int M1, struct FCOMPLEX *out, int N, int M, int ifactor) { int i, j; struct FCOMPLEX *tmp1, *tmp2, *tmp3; #if 0 /* sanity checks */ if (N != (N1 * ifactor)) error_flag = 1; if (M != (M1 * ifactor)) error_flag = 1; #endif tmp1 = (struct FCOMPLEX *)malloc(N1 * M * sizeof(struct FCOMPLEX)); tmp2 = (struct FCOMPLEX *)malloc(N1 * sizeof(struct FCOMPLEX)); tmp3 = (struct FCOMPLEX *)malloc(N * sizeof(struct FCOMPLEX)); for (i = 0; i < N1 * M; i++) tmp1[i].i = tmp1[i].r = 0.0f; if (debug) print_complex(in, N1, M1, 0); for (i = 0; i < N1; i++) fft_interpolate_1d(API, &in[i * M1], M1, &tmp1[i * M], ifactor); if (debug) print_complex(tmp1, N1, M, 0); /* now do columns - need to transpose */ for (i = 0; i < M; i++) { for (j = 0; j < N1; j++) tmp2[j] = tmp1[j * M + i]; fft_interpolate_1d(API, tmp2, N1, tmp3, ifactor); for (j = 0; j < N; j++) out[j * M + i] = tmp3[j]; } if (debug) print_complex(out, N, M, 0); free((char *)tmp1); free((char *)tmp2); free((char *)tmp3); } /*--------------------------------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/hermite_c.c000644 015705 000000 00000005707 13505462013 017151 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Hermite orbit interpolator based on fortran code of Werner Gunter * * 13th International Workshop on Laser Ranging, 2002, Washington, DC * *******************************************************************************/ /******************************************************************************** * Creator: David T. Sandwell and Rob Mellors * (San Diego State University, *Scripps Institution of Oceanography) * Date : 06/07/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 10/03/2007 - converted from FORTRAN to C * * * *****************************************************************************/ #include "gmtsar.h" #include "lib_functions.h" #include #include #include void hermite_c(double *x, double *y, double *z, int nmax, int nval, double xp, double *yp, int *ir) { /* interpolation by a polynomial using nval out of nmax given data points input: x(i) - arguments of given values (i=1,...,nmax) y(i) - functional values y=f(x) z(i) - derivatives z=f'(x) nmax - number of given points in list nval - number of points to use for interpolation xp - interpolation argument output: yp - interpolated value at xp ir - return code 0 = ok 1 = interpolation not in center interval 2 = argument out of range ***** calls no other routines */ int n, i, j, i0; double sj, hj, f0, f1; /* check to see if interpolation point is inside data range */ *yp = 0.0; n = nval - 1; *ir = 0; /* reduced index by 1 */ if (xp < x[0] || xp > x[nmax - 1]) { fprintf(stderr, "interpolation point outside of data constraints, %f %f %f\n", xp, x[0], x[nmax - 1]); *ir = 2; exit(1); } /* look for given value immediately preceeding interpolation argument */ for (i = 0; i < nmax; i++) { if (x[i] >= xp) break; } /* check to see if interpolation point is centered in data range */ i0 = i - (n + 1) / 2; if (i0 <= 0) { // fprintf(stderr,"hermite: interpolation not in center interval\n"); i0 = 0; *ir = 0; } /* reduced index by 1 */ if (i0 + n > nmax) { fprintf(stderr, "hermite: interpolation not in center interval\n"); i0 = nmax - n - 1; *ir = 0; } /* do Hermite interpolation */ for (i = 0; i <= n; i++) { sj = 0.0; hj = 1.0; for (j = 0; j <= n; j++) { if (j != i) { hj = hj * (xp - x[j + i0]) / (x[i + i0] - x[j + i0]); sj = sj + 1.0 / (x[i + i0] - x[j + i0]); } } f0 = 1.0 - 2.0 * (xp - x[i + i0]) * sj; f1 = xp - x[i + i0]; *yp = *yp + (y[i + i0] * f0 + z[i + i0] * f1) * hj * hj; if (isnan(*yp) != 0) { fprintf(stderr, "nan!\n"); exit(1); } } /* done */ } GMTSAR_V5.7/gmtsar/calc_dop.c000644 015705 000000 00000006421 13505462013 016750 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Calculate Doppler centroid using the method of Masden 1989 * * Doppler variations with range are small for ALOS and not calculated * *******************************************************************************/ /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "gmtsar.h" #include "siocomplex.h" void read_raw_data(fcomplex *, unsigned char *, int, struct PRM *); void calc_dop(struct PRM *prm) { unsigned char *indata; int i, j; long n; float *xr, *ac, *sg; double sumd; fcomplex *ai, *bi, *ab; fcomplex ctmp; FILE *fin; fprintf(stderr, ".... calculating doppler for %s\n", prm->input_file); fin = fopen(prm->input_file, "r"); if (fin == NULL) die("can't open", prm->input_file); /* allocate memory */ indata = (unsigned char *)malloc(prm->bytes_per_line * sizeof(unsigned char)); n = prm->good_bytes / 2 - prm->first_sample; xr = (float *)malloc(n * sizeof(float)); ac = (float *)malloc(n * sizeof(float)); sg = (float *)malloc(n * sizeof(float)); ai = (fcomplex *)malloc(n * sizeof(fcomplex)); bi = (fcomplex *)malloc(n * sizeof(fcomplex)); ab = (fcomplex *)malloc(2 * n * sizeof(fcomplex)); /* read a line of data from fin (input file, chars) to ai (complex floats) */ fread(indata, sizeof(unsigned char), prm->bytes_per_line, fin); for (i = 0; i < n; i++) read_raw_data(ai, indata, i, prm); /* read remaining lines and set ai = bi */ /* inefficient; could put loops inside each other */ for (i = prm->first_line; i < prm->num_lines - 1; i++) { if (i / 2000 == i / 2000.0) fprintf(stderr, " Working on line %d \n", i); fread(indata, sizeof(unsigned char), prm->bytes_per_line, fin); for (j = 0; j < n; j++) { read_raw_data(bi, indata, j, prm); ctmp = Cmul(Conjg(ai[j]), bi[j]); ab[j].r = ab[j].r + ctmp.r; ab[j].i = ab[j].i + ctmp.i; ai[j].r = bi[j].r; ai[j].i = bi[j].i; } } /* compute the Doppler as a function of range */ sumd = 0.0; for (j = 0; j < n; j++) { ac[j] = atan2f(ab[j].i, ab[j].r) / (2.0 * M_PI); sumd = sumd + ac[j]; } /* now either output the average Doppler or a linear trend fit */ prm->fd1 = (sumd / (1.0 * n)) * prm->prf; prm->fdd1 = 0.0 * prm->prf; prm->fddd1 = 0.0 * prm->prf; fclose(fin); free(xr); free(ac); free(sg); free(ai); free(bi); free(ab); } /*---------------------------------------------------*/ void read_raw_data(fcomplex *data, unsigned char *indata, int i, struct PRM *prm) { int ii; ii = i + prm->first_sample; if ((((int)indata[2 * ii]) != NULL_DATA) && (((int)indata[2 * ii + 1]) != NULL_DATA)) { data[i].r = ((float)indata[2 * ii]) - prm->xmi; data[i].i = ((float)indata[2 * ii + 1]) - prm->xmq; } else { data[i].r = 0.0; data[i].i = 0.0; } } /*---------------------------------------------------*/ GMTSAR_V5.7/gmtsar/test_shift/000755 015705 000000 00000000000 13505462013 017211 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/gmtsar/read_orb.c000644 015705 000000 00000002352 13505462013 016760 0ustar00sandwellwheel000000 000000 #include "PRM.h" #include "lib_functions.h" #include "orbit.h" #include "sfd_complex.h" #include "siocomplex.h" #include #include void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void read_orb(FILE *ldrfile, struct PRM *prm, struct SAT_ORB *orb) { int n; int nd, iy, id; double isec, idsec, px, py, pz, vx, vy, vz; /* open each ldrfile and read into structure r */ fscanf(ldrfile, "%d %d %d %lf %lf", &nd, &iy, &id, &isec, &idsec); orb->itype = 0; orb->nd = nd; orb->iy = iy; orb->id = id; orb->sec = isec; orb->dsec = idsec; orb->points = (struct ORB_XYZ *)malloc(orb->nd * sizeof(struct ORB_XYZ)); n = 0; while (fscanf(ldrfile, "%d %d %lf %lf %lf %lf %lf %lf %lf", &iy, &id, &isec, &px, &py, &pz, &vx, &vy, &vz) != EOF) { orb->points[n].pt = isec; orb->points[n].px = px; orb->points[n].py = py; orb->points[n].pz = pz; orb->points[n].vx = vx; orb->points[n].vy = vy; orb->points[n].vz = vz; n++; } /*fprintf(stderr,"debugging the readleader file\n"); for (n=0; nnd; n++){ fprintf(stderr, "%d %lf %lf %lf %lf %lf %lf %lf \n",n,orb->points[n].pt, orb->points[n].px, \ orb->points[n].py,orb->points[n].pz,orb->points[n].vx,orb->points[n].vy,orb->points[n].vz); } */ } GMTSAR_V5.7/gmtsar/update_PRM_sub.c000755 015705 000000 00000054652 13505462013 020071 0ustar00sandwellwheel000000 000000 #include "gmtsar.h" #include "orbit.h" #include "update_PRM.h" #include #include #include #include #include #include #include #include struct list { char *string; char *value; struct list *next; }; typedef struct list LIST; typedef enum type { CHAR, INT, DOUBLE } type; typedef struct PRMPRIMITIVE { char *name; char *alias; type etype; int offset; int size; } prmdata; /* Lookup table for types of PRM values */ /* Make sure the number in the define below matches the number of variables that * get initialized in init_lookup_table() */ #define LOOKUPTABLE_SIZE 86 static struct PRMPRIMITIVE lookuptable[LOOKUPTABLE_SIZE]; char *get_PRM_sub(char *szFile, char *szValueName); int findlongest(char *szFile, int func); int m_strcmp(char *szStringA, char *szStringB); /* Hack to allow use of strcmp on NULL strings without segfault */ int m_strcmp(char *szStringA, char *szStringB) { if (szStringA != NULL && szStringB != NULL) return strcmp(szStringA, szStringB); else return -9999; } char *get_PRM_string(char *prmfile, char *valuename) { return get_PRM(prmfile, valuename); } int get_PRM_int(char *prmfile, char *valuename) { int retval = 0; char *value; value = get_PRM(prmfile, valuename); retval = atoi(value); free(value); return retval; } double get_PRM_double(char *prmfile, char *valuename) { double retval = 0.0; char *value; value = get_PRM(prmfile, valuename); retval = atof(value); free(value); return retval; } int update_PRM_sub(char *prmfile, char *entry, char *value) { FILE *prm_file; struct PRM prm; if ((prm_file = fopen(prmfile, "r")) == NULL) { fprintf(stderr, "\n error - could not open file %s \n\n", prmfile); return 1; } else { init_lookup_table(); null_sio_struct(&prm); get_sio_struct(prm_file, &prm); } setvalue(&prm, entry, value); if ((prm_file = fopen(prmfile, "w+")) == NULL) { return 2; } else { put_sio_struct(prm, prm_file); fclose(prm_file); } return 0; } void init_lookup_table() { /* All char variables */ lookuptable[0].name = "input_file"; lookuptable[0].alias = "input_file"; lookuptable[0].etype = CHAR; lookuptable[0].offset = offsetof(struct PRM, input_file); lookuptable[0].size = 256; lookuptable[1].name = "SLC_file"; lookuptable[1].alias = "SLC_file"; lookuptable[1].etype = CHAR; lookuptable[1].offset = offsetof(struct PRM, SLC_file); lookuptable[1].size = 256; lookuptable[2].name = "out_amp_file"; lookuptable[2].alias = "out_amp_file"; lookuptable[2].etype = CHAR; lookuptable[2].offset = offsetof(struct PRM, out_amp_file); lookuptable[2].size = 256; lookuptable[3].name = "out_data_file"; lookuptable[3].alias = "out_data_file"; lookuptable[3].etype = CHAR; lookuptable[3].offset = offsetof(struct PRM, out_data_file); lookuptable[3].size = 256; lookuptable[4].name = "deskew"; lookuptable[4].alias = "deskew"; lookuptable[4].etype = CHAR; lookuptable[4].offset = offsetof(struct PRM, deskew); lookuptable[4].size = 8; lookuptable[5].name = "iqflip"; lookuptable[5].alias = "Flip_iq"; lookuptable[5].etype = CHAR; lookuptable[5].offset = offsetof(struct PRM, iqflip); lookuptable[5].size = 8; lookuptable[6].name = "offset_video"; lookuptable[6].alias = "offset_video"; lookuptable[6].etype = CHAR; lookuptable[6].offset = offsetof(struct PRM, offset_video); lookuptable[6].size = 8; lookuptable[7].name = "srm"; lookuptable[7].alias = "scnd_rng_mig"; lookuptable[7].etype = CHAR; lookuptable[7].offset = offsetof(struct PRM, srm); lookuptable[7].size = 8; lookuptable[8].name = "ref_file"; lookuptable[8].alias = "ref_file"; lookuptable[8].etype = CHAR; lookuptable[8].offset = offsetof(struct PRM, ref_file); lookuptable[8].size = 128; lookuptable[9].name = "led_file"; lookuptable[9].alias = "led_file"; lookuptable[9].etype = CHAR; lookuptable[9].offset = offsetof(struct PRM, led_file); lookuptable[9].size = 128; lookuptable[10].name = "orbdir"; lookuptable[10].alias = "orbdir"; lookuptable[10].etype = CHAR; lookuptable[10].offset = offsetof(struct PRM, orbdir); lookuptable[10].size = 8; lookuptable[11].name = "lookdir"; lookuptable[11].alias = "lookdir"; lookuptable[11].etype = CHAR; lookuptable[11].offset = offsetof(struct PRM, lookdir); lookuptable[11].size = 8; lookuptable[12].name = "dtype"; lookuptable[12].alias = "dtype"; lookuptable[12].etype = CHAR; lookuptable[12].offset = offsetof(struct PRM, dtype); lookuptable[12].size = 8; lookuptable[13].name = "date"; lookuptable[13].alias = "date"; lookuptable[13].etype = CHAR; lookuptable[13].offset = offsetof(struct PRM, date); lookuptable[13].size = 16; /* All int variables */ for (int i = 14; i <= 35; i++) lookuptable[i].size = sizeof(int); lookuptable[14].name = "debug_flag"; lookuptable[14].alias = "debug_flag"; lookuptable[14].etype = INT; lookuptable[14].offset = offsetof(struct PRM, debug_flag); lookuptable[15].name = "bytes_per_line"; lookuptable[15].alias = "bytes_per_line"; lookuptable[15].etype = INT; lookuptable[15].offset = offsetof(struct PRM, bytes_per_line); lookuptable[16].name = "good_bytes"; lookuptable[16].alias = "good_bytes_per_line"; lookuptable[16].etype = INT; lookuptable[16].offset = offsetof(struct PRM, good_bytes); lookuptable[17].name = "first_line"; lookuptable[17].alias = "first_line"; lookuptable[17].etype = INT; lookuptable[17].offset = offsetof(struct PRM, first_line); lookuptable[18].name = "num_patches"; lookuptable[18].alias = "num_patches"; lookuptable[18].etype = INT; lookuptable[18].offset = offsetof(struct PRM, num_patches); lookuptable[19].name = "first_sample"; lookuptable[19].alias = "first_sample"; lookuptable[19].etype = INT; lookuptable[19].offset = offsetof(struct PRM, first_sample); lookuptable[20].name = "num_valid_az"; lookuptable[20].alias = "num_valid_az"; lookuptable[20].etype = INT; lookuptable[20].offset = offsetof(struct PRM, num_valid_az); lookuptable[21].name = "st_rng_bin"; lookuptable[21].alias = "st_rng_bin"; lookuptable[21].etype = INT; lookuptable[21].offset = offsetof(struct PRM, st_rng_bin); lookuptable[22].name = "num_rng_bins"; lookuptable[22].alias = "num_rng_bins"; lookuptable[22].etype = INT; lookuptable[22].offset = offsetof(struct PRM, num_rng_bins); lookuptable[23].name = "chirp_ext"; lookuptable[23].alias = "chirp_ext"; lookuptable[23].etype = INT; lookuptable[23].offset = offsetof(struct PRM, chirp_ext); lookuptable[24].name = "nlooks"; lookuptable[24].alias = "nlooks"; lookuptable[24].etype = INT; lookuptable[24].offset = offsetof(struct PRM, nlooks); lookuptable[25].name = "rshift"; lookuptable[25].alias = "rshift"; lookuptable[25].etype = INT; lookuptable[25].offset = offsetof(struct PRM, rshift); lookuptable[26].name = "ashift"; lookuptable[26].alias = "ashift"; lookuptable[26].etype = INT; lookuptable[26].offset = offsetof(struct PRM, ashift); lookuptable[27].name = "fdc_ystrt"; lookuptable[27].alias = "fdc_ystrt"; lookuptable[27].etype = INT; lookuptable[27].offset = offsetof(struct PRM, fdc_ystrt); lookuptable[28].name = "fdc_strt"; lookuptable[28].alias = "fdc_strt"; lookuptable[28].etype = INT; lookuptable[28].offset = offsetof(struct PRM, fdc_strt); lookuptable[29].name = "rec_start"; lookuptable[29].alias = "rec_start"; lookuptable[29].etype = INT; lookuptable[29].offset = offsetof(struct PRM, rec_start); lookuptable[30].name = "rec_stop"; lookuptable[30].alias = "rec_stop"; lookuptable[30].etype = INT; lookuptable[30].offset = offsetof(struct PRM, rec_stop); lookuptable[31].name = "SC_identity"; lookuptable[31].alias = "SC_identity"; lookuptable[31].etype = INT; lookuptable[31].offset = offsetof(struct PRM, SC_identity); lookuptable[32].name = "ref_identity"; lookuptable[32].alias = "ref_identity"; lookuptable[32].etype = INT; lookuptable[32].offset = offsetof(struct PRM, ref_identity); lookuptable[33].name = "nrows"; lookuptable[33].alias = "nrows"; lookuptable[33].etype = INT; lookuptable[33].offset = offsetof(struct PRM, nrows); lookuptable[34].name = "num_lines"; lookuptable[34].alias = "num_lines"; lookuptable[34].etype = INT; lookuptable[34].offset = offsetof(struct PRM, num_lines); lookuptable[35].name = "SLC_format"; lookuptable[35].alias = "SLC_format"; lookuptable[35].etype = INT; lookuptable[35].offset = offsetof(struct PRM, SLC_format); /* All double variables */ for (int i = 36; i <= 82; i++) lookuptable[i].size = sizeof(double); lookuptable[36].name = "SC_clock_start"; lookuptable[36].alias = "SC_clock_start"; lookuptable[36].etype = DOUBLE; lookuptable[36].offset = offsetof(struct PRM, SC_clock_start); lookuptable[37].name = "SC_clock_stop"; lookuptable[37].alias = "SC_clock_stop"; lookuptable[37].etype = DOUBLE; lookuptable[37].offset = offsetof(struct PRM, SC_clock_stop); lookuptable[38].name = "icu_start"; lookuptable[38].alias = "icu_start"; lookuptable[38].etype = DOUBLE; lookuptable[38].offset = offsetof(struct PRM, icu_start); lookuptable[39].name = "clock_start"; lookuptable[39].alias = "clock_start"; lookuptable[39].etype = DOUBLE; lookuptable[39].offset = offsetof(struct PRM, clock_start); lookuptable[40].name = "clock_stop"; lookuptable[40].alias = "clock_stop"; lookuptable[40].etype = DOUBLE; lookuptable[40].offset = offsetof(struct PRM, clock_stop); lookuptable[41].name = "caltone"; lookuptable[41].alias = "caltone"; lookuptable[41].etype = DOUBLE; lookuptable[41].offset = offsetof(struct PRM, caltone); lookuptable[42].name = "RE"; /*local earth eadius */ lookuptable[42].alias = "earth_radius"; /*local earth eadius */ lookuptable[42].etype = DOUBLE; lookuptable[42].offset = offsetof(struct PRM, RE); lookuptable[43].name = "rc"; /* polar radius */ lookuptable[43].alias = "polar_radius"; /* polar radius */ lookuptable[43].etype = DOUBLE; lookuptable[43].offset = offsetof(struct PRM, rc); lookuptable[44].name = "ra"; /* equatorial radius */ lookuptable[44].alias = "equatorial_radius"; /* equatorial radius */ lookuptable[44].etype = DOUBLE; lookuptable[44].offset = offsetof(struct PRM, ra); lookuptable[45].name = "vel"; /* Equivalent SC velocity */ lookuptable[45].alias = "SC_vel"; /* Equivalent SC velocity */ lookuptable[45].etype = DOUBLE; lookuptable[45].offset = offsetof(struct PRM, vel); lookuptable[46].name = "ht"; /* (SC_radius - RE) center */ lookuptable[46].alias = "SC_height"; /* (SC_radius - RE) center */ lookuptable[46].etype = DOUBLE; lookuptable[46].offset = offsetof(struct PRM, ht); lookuptable[47].name = "ht_start"; /* (SC_radius - RE) start */ lookuptable[47].alias = "SC_height_start"; /* (SC_radius - RE) start */ lookuptable[47].etype = DOUBLE; lookuptable[47].offset = offsetof(struct PRM, ht_start); lookuptable[48].name = "ht_end"; /* (SC_radius - RE) end */ lookuptable[48].alias = "SC_height_end"; /* (SC_radius - RE) end */ lookuptable[48].etype = DOUBLE; lookuptable[48].offset = offsetof(struct PRM, ht_end); lookuptable[49].name = "near_range"; lookuptable[49].alias = "near_range"; lookuptable[49].etype = DOUBLE; lookuptable[49].offset = offsetof(struct PRM, near_range); lookuptable[50].name = "far_range"; lookuptable[50].alias = "far_range"; lookuptable[50].etype = DOUBLE; lookuptable[50].offset = offsetof(struct PRM, far_range); lookuptable[51].name = "prf"; lookuptable[51].alias = "PRF"; lookuptable[51].etype = DOUBLE; lookuptable[51].offset = offsetof(struct PRM, prf); lookuptable[52].name = "xmi"; lookuptable[52].alias = "I_mean"; lookuptable[52].etype = DOUBLE; lookuptable[52].offset = offsetof(struct PRM, xmi); lookuptable[53].name = "xmq"; lookuptable[53].alias = "Q_mean"; lookuptable[53].etype = DOUBLE; lookuptable[53].offset = offsetof(struct PRM, xmq); lookuptable[54].name = "az_res"; lookuptable[54].alias = "az_res"; lookuptable[54].etype = DOUBLE; lookuptable[54].offset = offsetof(struct PRM, az_res); lookuptable[55].name = "fs"; lookuptable[55].alias = "rng_samp_rate"; lookuptable[55].etype = DOUBLE; lookuptable[55].offset = offsetof(struct PRM, fs); lookuptable[56].name = "chirp_slope"; lookuptable[56].alias = "chirp_slope"; lookuptable[56].etype = DOUBLE; lookuptable[56].offset = offsetof(struct PRM, chirp_slope); lookuptable[57].name = "pulsedur"; lookuptable[57].alias = "pulsedur"; lookuptable[57].etype = DOUBLE; lookuptable[57].offset = offsetof(struct PRM, pulsedur); lookuptable[58].name = "lambda"; lookuptable[58].alias = "radar_wavelength"; lookuptable[58].etype = DOUBLE; lookuptable[58].offset = offsetof(struct PRM, lambda); lookuptable[59].name = "rhww"; lookuptable[59].alias = "rng_spec_wgt"; lookuptable[59].etype = DOUBLE; lookuptable[59].offset = offsetof(struct PRM, rhww); lookuptable[60].name = "pctbw"; lookuptable[60].alias = "rm_rng_band"; lookuptable[60].etype = DOUBLE; lookuptable[60].offset = offsetof(struct PRM, pctbw); lookuptable[61].name = "pctbwaz"; lookuptable[61].alias = "rm_az_band"; lookuptable[61].etype = DOUBLE; lookuptable[61].offset = offsetof(struct PRM, pctbwaz); lookuptable[62].name = "fd1"; lookuptable[62].alias = "fd1"; lookuptable[62].etype = DOUBLE; lookuptable[62].offset = offsetof(struct PRM, fd1); lookuptable[63].name = "fdd1"; lookuptable[63].alias = "fdd1"; lookuptable[63].etype = DOUBLE; lookuptable[63].offset = offsetof(struct PRM, fdd1); lookuptable[64].name = "fddd1"; lookuptable[64].alias = "fddd1"; lookuptable[64].etype = DOUBLE; lookuptable[64].offset = offsetof(struct PRM, fddd1); lookuptable[65].name = "delr"; lookuptable[65].alias = "delr"; lookuptable[65].etype = DOUBLE; lookuptable[65].offset = offsetof(struct PRM, delr); lookuptable[66].name = "yaw"; lookuptable[66].alias = "yaw"; lookuptable[66].etype = DOUBLE; lookuptable[66].offset = offsetof(struct PRM, yaw); lookuptable[67].name = "SLC_scale"; lookuptable[67].alias = "SLC_scale"; lookuptable[67].etype = DOUBLE; lookuptable[67].offset = offsetof(struct PRM, SLC_scale); lookuptable[68].name = "sub_int_r"; lookuptable[68].alias = "sub_int_r"; lookuptable[68].etype = DOUBLE; lookuptable[68].offset = offsetof(struct PRM, sub_int_r); lookuptable[69].name = "sub_int_a"; lookuptable[69].alias = "sub_int_a"; lookuptable[69].etype = DOUBLE; lookuptable[69].offset = offsetof(struct PRM, sub_int_a); lookuptable[70].name = "sub_double"; lookuptable[70].alias = "sub_double"; lookuptable[70].etype = DOUBLE; lookuptable[70].offset = offsetof(struct PRM, sub_double); lookuptable[71].name = "stretch_r"; lookuptable[71].alias = "stretch_r"; lookuptable[71].etype = DOUBLE; lookuptable[71].offset = offsetof(struct PRM, stretch_r); lookuptable[72].name = "stretch_a"; lookuptable[72].alias = "stretch_a"; lookuptable[72].etype = DOUBLE; lookuptable[72].offset = offsetof(struct PRM, stretch_a); lookuptable[73].name = "a_stretch_r"; lookuptable[73].alias = "a_stretch_r"; lookuptable[73].etype = DOUBLE; lookuptable[73].offset = offsetof(struct PRM, a_stretch_r); lookuptable[74].name = "a_stretch_a"; lookuptable[74].alias = "a_stretch_a"; lookuptable[74].etype = DOUBLE; lookuptable[74].offset = offsetof(struct PRM, a_stretch_a); lookuptable[75].name = "baseline_start"; lookuptable[75].alias = "baseline_start"; lookuptable[75].etype = DOUBLE; lookuptable[75].offset = offsetof(struct PRM, baseline_start); lookuptable[76].name = "baseline_center"; lookuptable[76].alias = "baseline_center"; lookuptable[76].etype = DOUBLE; lookuptable[76].offset = offsetof(struct PRM, baseline_center); lookuptable[77].name = "baseline_end"; lookuptable[77].alias = "baseline_end"; lookuptable[77].etype = DOUBLE; lookuptable[77].offset = offsetof(struct PRM, baseline_end); lookuptable[78].name = "alpha_start"; lookuptable[78].alias = "alpha_start"; lookuptable[78].etype = DOUBLE; lookuptable[78].offset = offsetof(struct PRM, alpha_start); lookuptable[79].name = "alpha_center"; lookuptable[79].alias = "alpha_center"; lookuptable[79].etype = DOUBLE; lookuptable[79].offset = offsetof(struct PRM, alpha_center); lookuptable[80].name = "alpha_end"; lookuptable[80].alias = "alpha_end"; lookuptable[80].etype = DOUBLE; lookuptable[80].offset = offsetof(struct PRM, alpha_end); lookuptable[81].name = "bpara"; lookuptable[81].alias = "B_parallel"; lookuptable[81].etype = DOUBLE; lookuptable[81].offset = offsetof(struct PRM, bpara); lookuptable[82].name = "bperp"; lookuptable[82].alias = "B_perpendicular"; lookuptable[82].etype = DOUBLE; lookuptable[82].offset = offsetof(struct PRM, bperp); lookuptable[83].name = "B_offset_start"; lookuptable[83].alias = "B_offset_start"; lookuptable[83].etype = DOUBLE; lookuptable[83].offset = offsetof(struct PRM, B_offset_start); lookuptable[84].name = "B_offset_center"; lookuptable[84].alias = "B_offset_center"; lookuptable[84].etype = DOUBLE; lookuptable[84].offset = offsetof(struct PRM, B_offset_center); lookuptable[85].name = "B_offset_end"; lookuptable[85].alias = "B_offset_end"; lookuptable[85].etype = DOUBLE; lookuptable[85].offset = offsetof(struct PRM, B_offset_end); } int setvalue(struct PRM *prm, char *name, char *value) { struct PRMPRIMITIVE valuetype; int n = 0; int intvalue = 0; double doublevalue = 0.0; char *base; char *newbase; for (n = 0; n <= LOOKUPTABLE_SIZE; n++) { if (m_strcmp(lookuptable[n].name, name) == 0 || m_strcmp(lookuptable[n].alias, name) == 0) { valuetype.name = malloc(sizeof(char) * strlen(lookuptable[n].name)); strcpy(valuetype.name, lookuptable[n].name); valuetype.etype = lookuptable[n].etype; valuetype.offset = lookuptable[n].offset; valuetype.size = lookuptable[n].size; break; } } /* Exit with a fatal error if variable isn't found */ if (n == LOOKUPTABLE_SIZE) { printf("Fatal Error:\n"); die("Variable name not found ", name); } /* We are all good and have valid values in valuetype struct */ base = (char *)prm; newbase = (base + valuetype.offset); switch (valuetype.etype) { case CHAR: sprintf(newbase, "%s", value); break; case INT: intvalue = strtol(value, NULL, 10); /* An int cannot be copied with an assignment to the struct member here */ memcpy(newbase, &intvalue, sizeof(int)); break; case DOUBLE: doublevalue = atof(value); /* A double cannot be copied with an assignment to the struct member here */ memcpy(newbase, &doublevalue, sizeof(double)); break; } return 0; } char *get_PRM(char *prmfile, char *valuename) { struct PRMPRIMITIVE valuetype; int n = 0; char *szReturn = NULL; init_lookup_table(); for (n = 0; n < LOOKUPTABLE_SIZE; n++) { if (m_strcmp(lookuptable[n].name, valuename) == 0 || m_strcmp(lookuptable[n].alias, valuename) == 0) { valuetype.name = strdup(lookuptable[n].name); valuetype.etype = lookuptable[n].etype; valuetype.offset = lookuptable[n].offset; valuetype.size = lookuptable[n].size; valuetype.alias = strdup(lookuptable[n].alias); break; } } /* Exit with a fatal error if variable isn't found */ if (n == LOOKUPTABLE_SIZE) { printf("Fatal Error:\n"); die("Variable name not found ", valuename); } /* We are all good and have a valid valuesname */ szReturn = get_PRM_sub(prmfile, valuetype.name); if (szReturn == NULL) szReturn = get_PRM_sub(prmfile, valuetype.alias); free(valuetype.name); free(valuetype.alias); return szReturn; } char *get_PRM_sub(char *szFile, char *szValueName) { FILE *fp; char *line; int maxline = 0; LIST *current, *head; char *valuename; char *value; char *szRetVal = NULL; maxline = (findlongest(szFile, 1) + 1) * sizeof(char); line = (char *)malloc(maxline); valuename = (char *)malloc(maxline); value = (char *)malloc(maxline); head = current = NULL; fp = fopen(szFile, "r"); while (fgets(line, maxline, fp)) { if (strchr(line, '=') != 0 && strchr(line, '#') == 0) { LIST *node = malloc(sizeof(LIST)); char *token = strtok(line, "="); node->string = strdup(trimwhitespace(token)); token = strtok(NULL, "="); node->value = strdup(trimwhitespace(token)); node->next = NULL; if (head == NULL) { current = head = node; } else { current = current->next = node; } } } fclose(fp); for (current = head; current; current = current->next) { if (strcmp(trimwhitespace(szValueName), current->string) == 0) { free(line); free(valuename); free(value); if (strlen(trimwhitespace(current->value))) szRetVal = strdup(trimwhitespace(current->value)); else szRetVal = NULL; } } // need free for each node for (current = head; current; current = current->next) free(current); return szRetVal; } int findlongest(char *szFile, int func) { FILE *file = fopen(szFile, "rb"); if (file == NULL) { fprintf(stderr, "File open failed!\n"); return EXIT_FAILURE; } size_t buffer_size = 8; char *line = (char *)malloc(buffer_size); char *longest = (char *)malloc(buffer_size); size_t longest_on = 0; size_t longest_length = 0; size_t num_lines = 0; if (line == NULL || longest == NULL) { fprintf(stderr, "Memory allocation failed!\n"); return EXIT_FAILURE; } long pos_before = ftell(file); for (num_lines = 1; fgets(line, buffer_size, file); ++num_lines) { long pos_after = ftell(file); size_t line_length = pos_after - pos_before - 1; pos_before = pos_after - 1; while (line_length == buffer_size - 1 && line[line_length - 1] != '\n') { line = (char *)realloc(line, buffer_size * 2); longest = (char *)realloc(longest, buffer_size * 2); if (line == NULL || longest == NULL) { fprintf(stderr, "Memory allocation failed!\n"); return EXIT_FAILURE; } if (fgets(&line[buffer_size - 1], buffer_size + 1, file) == NULL) { fprintf(stderr, "File read failed!\n"); fclose(file); free(line); free(longest); return EXIT_FAILURE; } pos_after = ftell(file); line_length += pos_after - pos_before - 1; pos_before = pos_after - 1; buffer_size *= 2; } if (line_length > longest_length) { char *tmp = longest; longest = line; line = tmp; longest_on = num_lines; longest_length = line_length; } } if (longest_on) { switch (func) { case 1: return longest_length; break; case 2: return longest_on; break; default: return longest_length; } // printf("File had total of %lu lines.\n", num_lines); // printf("Longest line found on line %lu with %lu characters.\n", // longest_on, longest_length); printf("The line was: "); fwrite(longest, 1, // longest_length, stdout); } else { return EXIT_FAILURE; // fprintf(stderr, "The file had no readable lines!\n"); } fclose(file); free(line); free(longest); return EXIT_SUCCESS; } GMTSAR_V5.7/gmtsar/conv.c000644 015705 000000 00000030521 13505462013 016147 0ustar00sandwellwheel000000 000000 /* $Id: conv.c 109 2015-01-19 23:01:24Z sandwell $ */ /***************************************************************************/ /* conv convolves a 2-D filter with an array and outputs the results */ /* at a sub-sampled interval. Basically it does the same thing as */ /* the GIPS program ihbox but it runs a lot faster. */ /* */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 04/17/98 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 04/17/98 Started hacking at the code * * 06/07/98 Removed edge effects of derivative filter * * 01/14/10 Modified to read and write grd files - RJM * ***************************************************************************/ #include "gmtsar.h" char *USAGE = "conv [GMTSAR] - 2-D image convolution\n\n" "Usage: conv idec jdec filter_file input output \n" " idec - row decimation factor \n" " jdec - column decimation factor \n" " filter_file - eg. filters/gauss17x5 \n" " input - name of file to be filtered (I*2 or R*4) \n" " output - name of filtered output file (R*4 only) \n\n" " examples:\n" " conv 4 2 filters/gauss9x5 IMG-HH-ALPSRP109430660-H1.0__A.PRM " "test.grd \n" " (makes and filters amplitude file from an SLC-file) \n\n" " conv 4 2 filters/gauss5x5 infile.grd outfile.grd \n" " (filters a float file) \n "; int input_file_type, format_flag; /*-------------------------------------------------------------*/ int determine_file_type(char *name, int *input_file_type) { int n, m; char tail[8]; *input_file_type = 1; n = (int)strlen(name); m = n - 3; strncpy(&tail[0], &name[m], 4); if (verbose) fprintf(stderr, " name %s tail %s \n", name, tail); if ((strncmp(tail, "PRM", 3) == 0) || (strncmp(tail, "prm", 3) == 0)) { if (verbose) fprintf(stderr, " input: PRM file\n"); *input_file_type = 2; } if (*input_file_type == 1) if (verbose) fprintf(stderr, " input: GMT binary\n"); return (EXIT_SUCCESS); } /*-------------------------------------------------------------*/ FILE *read_PRM_file(char *prmfilename, char *input_file_name, struct PRM p, int *xdim, int *ydim) { FILE *f_input_prm, *f_input; void change_name(char *); if (verbose) fprintf(stderr, " reading PRM file %s\n", prmfilename); if ((f_input_prm = fopen(prmfilename, "r")) == NULL) die("Can't open input header", prmfilename); get_sio_struct(f_input_prm, &p); strcpy(input_file_name, p.SLC_file); format_flag = 2; if (strncmp(p.dtype, "c", 1) == 0) format_flag = 3; if (verbose) fprintf(stderr, " reading PRM file %s\n", input_file_name); if ((f_input = fopen(input_file_name, "r")) == NULL) die("Can't open input data ", input_file_name); *xdim = p.num_rng_bins; *ydim = p.num_valid_az * p.num_patches; return (f_input); } /*-------------------------------------------------------------*/ int read_float(float *indat, int xdim, FILE *f_input, int yarr, float *buffer, int ibuff) { int i, j; for (i = 0; i < ibuff; i++) { fread(indat, sizeof(float), xdim, f_input); for (j = 0; j < xdim; j++) buffer[j + xdim * (i + yarr)] = indat[j]; } return (EXIT_SUCCESS); } /*-------------------------------------------------------------*/ int read_SLC_int(short *ci2, int xdim, FILE *f_input, int yarr, float *buffer, double dfact, int ibuff) { int i, j; double df2; df2 = dfact * dfact; /* read i2 complex and calculate amplitude */ /* use square of amplitude to match gips ihconv */ for (i = 0; i < ibuff; i++) { fread(ci2, 2 * sizeof(short), xdim, f_input); for (j = 0; j < xdim; j++) buffer[j + xdim * (i + yarr)] = (float)(df2 * ci2[2 * j] * ci2[2 * j] + df2 * ci2[2 * j + 1] * ci2[2 * j + 1]); } return (EXIT_SUCCESS); } /*-------------------------------------------------------------*/ int read_SLC_float(float *cf2, int xdim, FILE *f_input, int yarr, float *buffer, double dfact, int ibuff) { int i, j; double df2; df2 = dfact * dfact; /* read r4 complex and calculate amplitude */ /* use square of amplitude to match gips ihconv */ for (i = 0; i < ibuff; i++) { fread(cf2, 2 * sizeof(float), xdim, f_input); for (j = 0; j < xdim; j++) buffer[j + xdim * (i + yarr)] = (float)(df2 * cf2[2 * j] * cf2[2 * j] + df2 * cf2[2 * j + 1] * cf2[2 * j + 1]); } return (EXIT_SUCCESS); } int main(int argc, char **argv) { int idec, jdec; int iout, jout; int i, j, ic, jc, norm, ic0, ic1; int ydim = 0, xdim = 0; /* size of input file */ int xarr, yarr, narr, yarr2; int nbuff, ibuff, imove; int iend, ylen, iread; uint64_t left_node; unsigned int row; char input_name[128], output_name[128], prmfilename[128], *c = NULL; short *cindat = NULL; float *cfdat = NULL; double inc[2], wesn[4], xmax = 0.0, ymax = 0.0; float *filter = NULL, *buffer = NULL, *indat = NULL; float filtin, filtdat, rnorm, rnormax, anormax; FILE *f_filter = NULL, *f_input = NULL; struct PRM p; void *API = NULL; /* GMT control structure */ struct GMT_GRID *Out = NULL; /* For the output grid */ struct GMT_GRID *In = NULL; /* Grid structure containing ->header and ->data */ if (argc < 6) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; ibuff = 512; verbose = 0; null_sio_struct(&p); input_file_type = 1; /* default; GMT binary */ /* format_flag = 1 => float */ /* format_flag = 2 => i*2 complex */ /* format_flag = 3 => r*4 complex */ format_flag = 1; idec = atoi(argv[1]); /* y decimation factor */ jdec = atoi(argv[2]); /* x decimation factor */ if (idec <= 0 || jdec <= 0) die("idec and jdec should be positive integers.", ""); /* open and filter file */ if ((f_filter = fopen(argv[3], "r")) == NULL) die("Can't open filter", ""); /* get input and output file names */ strcpy(input_name, argv[4]); strcpy(output_name, argv[5]); /* read input file */ /* GMT file or PRM file ? look at suffix (grd or PRM)*/ determine_file_type(input_name, &input_file_type); if (verbose) fprintf(stderr, " input file type: %d \n", input_file_type); switch (input_file_type) { case 1: if (verbose) fprintf(stderr, " reading GMT binary\n"); if ((In = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, input_name, NULL)) == NULL) die("Can't open ", input_name); if ((c = strstr(input_name, "=bf"))) c[0] = '\0'; /* Chop off any trailing =bf flag */ if ((f_input = fopen(input_name, "r")) == NULL) die("Can't open ", input_name); fseek(f_input, 892L, SEEK_SET); /* Skip past the header */ xdim = In->header->nx; ydim = In->header->ny; xmax = In->header->wesn[GMT_XHI]; ymax = In->header->wesn[GMT_YHI]; if (verbose) fprintf(stderr, "%d %d \n", In->header->nx, In->header->ny); format_flag = 1; break; case 2: strcpy(prmfilename, input_name); f_input = read_PRM_file(prmfilename, input_name, p, &xdim, &ydim); if (verbose) fprintf(stderr, " reading PRM file format %d\n", format_flag); xmax = xdim; ymax = ydim; break; default: die("confused about input file type", "quitting"); } if (verbose) fprintf(stderr, " read file %s %d %d \n", input_name, xdim, ydim); /* read size of filter and make sure dimensions are odd */ if (fscanf(f_filter, "%d%d", &xarr, &yarr) != 2 || xarr < 1 || yarr < 1 || (xarr & 1) == 0 || (yarr & 1) == 0) die("filter incomplete", ""); if (ibuff < yarr) die("increase dimension of ibuff", ""); /* size of output file */ iout = jout = 0; for (ic = 0; ic < ydim; ic = ic + idec) iout = iout + 1; for (jc = 0; jc < xdim; jc = jc + jdec) jout = jout + 1; if (verbose) fprintf(stderr, " original: ydim %d xdim %d new: %d %d decimation: %d %d\n", ydim, xdim, iout, jout, idec, jdec); inc[GMT_X] = round(xmax / (double)jout); inc[GMT_Y] = round(ymax / (double)iout); jout = floor(xmax / inc[GMT_X]); iout = floor(ymax / inc[GMT_Y]); if (verbose) fprintf(stderr, " creating GMT grid %s \n", output_name); wesn[GMT_XLO] = 0.0; wesn[GMT_XHI] = inc[GMT_X] * jout; wesn[GMT_YLO] = 0.0; wesn[GMT_YHI] = inc[GMT_Y] * iout; if ((Out = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate output grid", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "conv", Out)) die("could not set title", ""); /* parameters for convolution buffer */ narr = xarr * yarr; yarr2 = (int)(yarr / 2.0); if (ydim < ibuff) ibuff = ydim; imove = ibuff - yarr; nbuff = xdim * ibuff; if ((filter = (float *)malloc(sizeof(float) * narr)) == NULL) die("memory allocation", ""); if ((buffer = (float *)malloc(2 * sizeof(float) * nbuff)) == NULL) die("memory allocation", ""); if (format_flag == 1) if ((indat = (float *)malloc(4 * xdim)) == NULL) die("memory allocation", ""); if (format_flag == 2) if ((cindat = (short *)malloc(4 * xdim)) == NULL) die("memory allocation", ""); if (format_flag == 3) if ((cfdat = (float *)malloc(8 * xdim)) == NULL) die("memory allocation", ""); /* read the filter and calculate normalization constants*/ anormax = rnormax = 0.0f; for (i = 0; i < narr; i++) { if (fscanf(f_filter, "%f", &filtin) == EOF) die("filter incomplete", ""); filter[i] = filtin; anormax = anormax + (float)fabs(filter[i]); rnormax = rnormax + filter[i]; } norm = 0.0f; if (fabs(rnormax) > 0.05 * anormax) norm = 1.0f; ic0 = 0; iend = ylen = ibuff; if (verbose) fprintf(stderr, " format_flag %d \n", format_flag); /* read the data (512 lines) */ if (format_flag == 1) read_float(indat, xdim, f_input, 0, buffer, ibuff); if (format_flag == 2) read_SLC_int(cindat, xdim, f_input, 0, buffer, DFACT, ibuff); if (format_flag == 3) read_SLC_float(cfdat, xdim, f_input, 0, buffer, DFACT, ibuff); for (ic = 0, row = 0; ic < iout * idec; ic = ic + idec) { if (ic / 2000.0 == ic / 1000) if (verbose) fprintf(stderr, " line %d\n", ic); /* check buffer and shift data up if necessary */ if ((ic + yarr2) >= iend && (ic + yarr2) < (ydim - 1)) { for (i = 0; i < yarr; i++) for (j = 0; j < xdim; j++) buffer[j + xdim * i] = buffer[j + xdim * (i + (ylen - yarr))]; iread = MIN(imove, (ydim - iend)); ic0 = iend - yarr; iend = iend + iread; ylen = iread + yarr; /* now read in more data into end of buffer */ if (format_flag == 1) read_float(indat, xdim, f_input, yarr, buffer, iread); if (format_flag == 2) read_SLC_int(cindat, xdim, f_input, yarr, buffer, DFACT, iread); if (format_flag == 3) read_SLC_float(cfdat, xdim, f_input, yarr, buffer, DFACT, iread); } /* end of ic loop */ left_node = GMT_Get_Index(API, Out->header, row, 0); jout = 0; ic1 = ic - ic0; /* now do the 2d convolution */ for (jc = 0; jc < floor(xmax / inc[GMT_X]) * jdec; jc = jc + jdec) { conv2d(buffer, &ylen, &xdim, filter, &yarr, &xarr, &filtdat, &ic1, &jc, &rnorm); /* use a zero or null value if there is not enough data in the filter */ Out->data[left_node + jout] = 0.0f; if (norm > 0) { if (fabs(rnorm) > (0.01 * rnormax)) Out->data[left_node + jout] = filtdat / rnorm; } else { if (fabs(rnorm) < 0.0001 * anormax) Out->data[left_node + jout] = filtdat; } jout++; } /* end of jc loop */ row++; } /* end of data loop */ fclose(f_input); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, output_name, Out)) { die("Failed to write output grid", ""); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/gmtsar/file_stuff.c000644 015705 000000 00000003446 13505462013 017336 0ustar00sandwellwheel000000 000000 /* $Id: file_stuff.c 109 2015-01-19 23:01:24Z sandwell $ */ #include "gmtsar.h" /*--------------------------------------------------------------*/ void print_prm_params(struct PRM p1, struct PRM p2) { fprintf(stderr, " SLC 1: num_rng_bins %d num_lines %d \n", p1.num_rng_bins, p1.num_lines); fprintf(stderr, " SLC 2: num_rng_bins %d num_lines %d \n", p2.num_rng_bins, p2.num_lines); fprintf(stderr, " lambda %f \n", p2.lambda); fprintf(stderr, " baseline_start %f \n", p2.baseline_start); fprintf(stderr, " baseline_end %f \n", p2.baseline_end); fprintf(stderr, " alpha_start %f \n", p2.alpha_start); fprintf(stderr, " alpha_end %f \n", p2.alpha_end); fprintf(stderr, " near_range %f \n", p2.near_range); fprintf(stderr, " rng_samp_rate %f \n", p2.fs); fprintf(stderr, " SC_clock_start %f \n", p2.SC_clock_start); fprintf(stderr, " SC_clock_stop %f \n", p2.SC_clock_stop); fprintf(stderr, " clock_start %f \n", p2.clock_start); fprintf(stderr, " clock_stop %f \n", p2.clock_stop); fprintf(stderr, " prf %f \n", p2.prf); } /*--------------------------------------------------------------*/ void fix_prm_params(struct PRM *p, char *s) { double delr; delr = SOL / p->fs / 2.0; /* these are from prm2gips */ p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift + p->sub_int_r - 1) * delr; p->SC_clock_start = p->SC_clock_start + (p->ashift + p->sub_int_a) / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); p->clock_start = p->clock_start + (p->ashift + p->sub_int_a) / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->clock_stop = p->clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } GMTSAR_V5.7/gmtsar/bperp.c000644 015705 000000 00000014606 13505462013 016320 0ustar00sandwellwheel000000 000000 /* $Id: bperp.c 79 2013-06-10 23:43:27Z pwessel $ */ /*************************************************************************** * bperp reads the PRM file of a repeat pass file and extracts the * * baseline information. Then it computes a complete array of * * perpendicular baseline that depends on both range and azimuth. * * This baseline array is used for taking sums and differences of * * interferograms * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 7/7/95 * ***************************************************************************/ /*************************************************************************** * Modification history: * * Modified from ihBperp to read and write grd files. * * Xiaopeng Nov 24 2010 * * DATE * ***************************************************************************/ #include "gmtsar.h" char *USAGE = "bperp [GMTSAR] - Perpendicular baseline processing\n\n" " Usage: bperp rep.PRM phase.grd bperp.grd \n\n" " rep.PRM - input repeat PRM file that provides the interferometric " "baseline \n" " phase.grd - input phase grd file that provides the dimensions of the " "grd file \n" " bperp.grd - output grd file of the perpendicular baseline\n\n"; void print_prm_params(struct PRM p1, struct PRM p2) { fprintf(stderr, " SLC 1: num_rng_bins %d num_lines %d \n", p1.num_rng_bins, p1.num_lines); fprintf(stderr, " SLC 2: num_rng_bins %d num_lines %d \n", p2.num_rng_bins, p2.num_lines); fprintf(stderr, " lambda %f \n", p2.lambda); fprintf(stderr, " baseline_start %f \n", p2.baseline_start); fprintf(stderr, " B_end %f \n", p2.baseline_end); fprintf(stderr, " alpha_start %f \n", p2.alpha_start); fprintf(stderr, " alpha_end %f \n", p2.alpha_end); fprintf(stderr, " near_range %f \n", p2.near_range); fprintf(stderr, " rng_samp_rate %f \n", p2.fs); fprintf(stderr, " sc_clock_start %f \n", p2.SC_clock_start); fprintf(stderr, " sc_clock_stop %f \n", p2.SC_clock_stop); fprintf(stderr, " clock_start %f \n", p2.clock_start); fprintf(stderr, " clock_stop %f \n", p2.clock_stop); fprintf(stderr, " prf %f \n", p2.prf); } void fix_prm_params(struct PRM *p, char *s) { double delr; delr = SOL / p->fs / 2.0; /* these are from prm2gips */ p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift - 1) * delr; p->SC_clock_start = p->SC_clock_start + p->ashift / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } void calc_theta(int xdim, double range0, double drange, double re, double height, double alpha, float *theta) { int k; double rho, eta; double c, c2, re2; c = re + height; c2 = c * c; re2 = re * re; for (k = 0; k < xdim; k++) { rho = range0 + k * drange; eta = ((rho * rho + c2 - re2) / (2. * rho * c)); if (eta >= 1.) die("eta >= 0", ""); theta[k] = (float)acos(eta); } } int main(int argc, char **argv) { struct PRM prm; float *theta = NULL; double drange, dBh, dBv, Bh0, Bhf, Bv0, Bvf, B, alpha, Bh, Bv, dht, height; unsigned int row, col; uint64_t node; void *API = NULL; /* GMT API control structure */ struct GMT_GRID *P = NULL, *BP = NULL; /* Grid structure containing ->header and ->data */ if (argc < 4) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; /* open PRM file */ get_prm(&prm, argv[1]); /* near_range, SC_clock_start, and SC_clock_stop need to be changed */ fix_prm_params(&prm, argv[1]); /* Get header from residual phase file */ if ((P = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* allocate memory */ if ((BP = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, P->header->wesn, P->header->inc, P->header->registration, GMT_NOTSET, NULL)) == NULL) return EXIT_FAILURE; theta = (float *)malloc(P->header->nx * sizeof(float)); /* calculate drange */ drange = fabs(P->header->inc[GMT_X]) * SOL / (2.0 * prm.fs); /* compute starting and ending baselines in rectangular co-ordinates */ dBh = dBv = 0.; Bh0 = prm.baseline_start * cos(prm.alpha_start * PI / 180.); Bhf = prm.baseline_end * cos(prm.alpha_end * PI / 180.); Bv0 = prm.baseline_start * sin(prm.alpha_start * PI / 180.); Bvf = prm.baseline_end * sin(prm.alpha_end * PI / 180.); dBh = (Bhf - Bh0) / P->header->ny; dBv = (Bvf - Bv0) / P->header->ny; dBh = (Bhf - Bh0) / P->header->ny; dBv = (Bvf - Bv0) / P->header->ny; /* calculate height increment if available */ dht = 0.0; if (prm.ht_start > 0.0 && prm.ht_end > 0.0) { dht = (prm.ht_end - prm.ht_start) / P->header->ny; } for (row = 0; row < BP->header->ny; row++) { /* For each row */ /* change the baseline and alpha along the satellite track */ Bh = Bh0 + dBh * row; Bv = Bv0 + dBv * row; B = sqrt(Bh * Bh + Bv * Bv); alpha = atan2(Bv, Bh); height = prm.ht_start + dht * row; calc_theta(P->header->nx, prm.near_range, drange, prm.RE, height, alpha, theta); /* compute the perpendicular baseline */ for (col = 0; col < BP->header->nx; col++) { /* For each column, get node number */ node = GMT_Get_Index(API, BP->header, row, col); BP->data[node] = (float)(B * cos((double)theta[col] - alpha)); } } /* Write the output grd file */ if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "perpendicular baseline", BP)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[3], BP)) return EXIT_FAILURE; if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/gmtsar/SAT_llt2rat.c000644 015705 000000 00000034031 13505462013 017275 0ustar00sandwellwheel000000 000000 /* $Id$ */ /**************************************************************************** * Program to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/04/09 - update the range sampling rate from new PRM file to solve * * confict of rng_samp_rate between LED file and PRM file in FBD mode. * * 04/28/10 - modified to work with envisat - M.Wei * ****************************************************************************/ #include "gmtsar.h" #include "llt2xyz.h" #include "orbit.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 2 char *USAGE = " \n Usage: " "SAT_llt2rat master.PRM prec [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " precise - (0) standard back geocoding, (1) - " "polynomial refinenent (slower) \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - range, azimuth, lon, lat, elevation [ASCII " "default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: SAT_llt2rat master.PRM 0 < topo.llt > topo.ratll \n"; int npad = 8000; void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void set_prm_defaults(struct PRM *); void hermite_c(double *, double *, double *, int, int, double, double *, int *); void set_prm_defaults(struct PRM *); void interpolate_SAT_orbit_slow(struct SAT_ORB *orb, double time, double *, double *, double *, int *); void polyfit(double *, double *, double *, int *, int *); int main(int argc, char **argv) { FILE *fprm1 = NULL; int otype; double rln, rlt, rht, dr, t1, t11, t2, tm; double ts, rng0; double xp[3]; double xt[3]; double rp[3]; double dd[5]; /* dummy for output double precision */ float ds[5]; /* dummy for output single precision */ double r0, rf, a0, af; double fll, rdd, daa, drr, dopc; double dt, dtt, xs, ys, zs; double time[20], rng[20], d[3]; /* arrays used for polynomial refinement of min range */ int ir, k, ntt = 10, nc = 3; /* size of arrays used for polynomial refinement */ int j, nrec, precise = 0; int goldop(); int stai, endi, midi; double **orb_pos = NULL; struct PRM prm; struct SAT_ORB *orb = NULL; char name[128], value[128]; double rsr; FILE *ldrfile = NULL; int calorb_alos(struct SAT_ORB *, double **orb_pos, double ts, double t1, int nrec); /* Make sure usage is correct and files can be opened */ if (argc < 3 || argc > 4) { fprintf(stderr, "%s\n", USAGE); exit(-1); } precise = atoi(argv[2]); /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 4) { if (!strcmp(argv[3], "-bos")) otype = 2; else if (!strcmp(argv[3], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_prm_defaults(&prm); get_sio_struct(fprm1, &prm); fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); read_orb(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ /* if this is S1A which has a low PRF sample 2 times more often */ ts = 2. / prm.prf; if (prm.prf < 600.) { ts = 2. / (2. * prm.prf); npad = 20000; } nrec = (int)((t2 - t1) / ts); /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* read the llt points and convert to xyz. */ while (scanf(" %lf %lf %lf ", &rln, &rlt, &rht) == 3) { rp[0] = rlt; rp[1] = rln; rp[2] = rht; plh2xyz(rp, xp, prm.ra, fll); if (rp[1] > 180.) rp[1] = rp[1] - 360.; xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ rp[2] = sqrt(xp[0] * xp[0] + xp[1] * xp[1] + xp[2] * xp[2]) - prm.RE; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng0, &tm); if (precise == 1) { /* refine this minimum range and azimuth with a polynomial fit */ dt = 1. / ntt; /* make the polynomial 1 second long */ for (k = 0; k < ntt; k++) { time[k] = dt * (k - ntt / 2 + .5); t11 = tm + time[k]; interpolate_SAT_orbit_slow(orb, t11, &xs, &ys, &zs, &ir); rng[k] = sqrt((xp[0] - xs) * (xp[0] - xs) + (xp[1] - ys) * (xp[1] - ys) + (xp[2] - zs) * (xp[2] - zs)) - rng0; } /* fit a second order polynomial to the range versus time function and * update the tm and rng0 */ polyfit(time, rng, d, &ntt, &nc); dtt = -d[1] / (2. * d[2]); tm = tm + dtt; interpolate_SAT_orbit_slow(orb, tm, &xs, &ys, &zs, &ir); rng0 = sqrt((xp[0] - xs) * (xp[0] - xs) + (xp[1] - ys) * (xp[1] - ys) + (xp[2] - zs) * (xp[2] - zs)); } /* compute the range and azimuth in pixel space */ xt[0] = rng0; xt[1] = tm; xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a); /* For Envisat correct for biases based on Pinon reflector analysis */ if (prm.SC_identity == 4) { xt[0] = xt[0] + 8.4; xt[1] = xt[1] + 4; } /* compute the azimuth and range correction if the Doppler is not zero */ if (prm.fd1 != 0.) { dopc = prm.fd1 + prm.fdd1 * (prm.near_range + dr * prm.num_rng_bins / 2.); rdd = (prm.vel * prm.vel) / rng0; daa = -0.5 * (prm.lambda * dopc) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } if ((xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) && (otype > 1)) continue; if (otype == 1) { fprintf(stdout, "%.9f %.9f %.9f %.9f %.9f \n", xt[0], xt[1], rp[2], rp[1], rp[0]); } else if (otype == 2) { ds[0] = (float)xt[0]; ds[1] = (float)xt[1]; ds[2] = (float)rp[2]; ds[3] = (float)rp[1]; ds[4] = (float)rp[0]; fwrite(ds, sizeof(float), 5, stdout); } else if (otype == 3) { dd[0] = xt[0]; dd[1] = xt[1]; dd[2] = rp[2]; dd[3] = rp[1]; dd[4] = rp[0]; fwrite(dd, sizeof(double), 5, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL && (x2 != x1)) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct SAT_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; // int npad = 8000; /* number of buffer points to add before and after // the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/gmtsar/set_prm_defaults.c000644 015705 000000 00000007263 13505462013 020551 0ustar00sandwellwheel000000 000000 #include "PRM.h" #include "lib_functions.h" #include #include /*------------------------------------------------------*/ /* set some defaults */ /* replaces virgin.prm */ /*------------------------------------------------------*/ void set_prm_defaults(struct PRM *prm) { strncpy(prm->input_file, "data.raw", 8); /* input to SAR processor */ prm->input_file[8] = '\0'; strncpy(prm->deskew, "n", 1); /* to deskew or not to deskew? */ prm->deskew[1] = '\0'; strncpy(prm->iqflip, "n", 1); /* Flip_iq */ prm->iqflip[1] = '\0'; strncpy(prm->offset_video, "n", 1); /* off_video */ prm->offset_video[1] = '\0'; strncpy(prm->srm, "n", 1); /* scnd_rng_mig */ prm->srm[1] = '\0'; strncpy(prm->orbdir, "n", 1); prm->orbdir[1] = '\0'; strncpy(prm->lookdir, "n", 1); prm->lookdir[1] = '\0'; prm->num_valid_az = 9216; prm->nrows = 16384; prm->first_line = 1; prm->caltone = 0.000000; prm->st_rng_bin = 1; prm->az_res = 5; prm->nlooks = 1; prm->chirp_ext = 1000; /* nextend */ prm->rhww = 1.000000; /* rng_spec_wgt */ prm->pctbw = 0.000000; /* rm_rng_band */ prm->pctbwaz = 0.000000; /* rm_az_band */ prm->rshift = 0; prm->ashift = 0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 206; prm->SC_identity = 5; prm->fs = 3.200000e+07; /* rng_samp_rate */ prm->lambda = 0.236057; prm->near_range = -1; /* use -1 as default */ prm->RE = -1; /* use -1 as default */ prm->num_patches = 1000; /* use 1000 as default */ prm->fd1 = 0.0; prm->fdd1 = 0.0; prm->fddd1 = 0.0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->SLC_scale = 1; /* use 1 as default */ } /*------------------------------------------------------*/ void print_prm_defaults(struct PRM *prm) { fprintf(stderr, " \n default settings *************\n\n"); fprintf(stderr, " led_file = %s \n", prm->led_file); fprintf(stderr, " input_file = %s \n", prm->input_file); fprintf(stderr, " num_valid_az = %d \n", prm->num_valid_az); fprintf(stderr, " nrows = %d \n", prm->nrows); fprintf(stderr, " first_line = %d \n", prm->first_line); fprintf(stderr, " deskew = %s \n", prm->deskew); fprintf(stderr, " caltone = %lf \n", prm->caltone); fprintf(stderr, " st_rng_bin = %d \n", prm->st_rng_bin); fprintf(stderr, " Flip_iq(iqflip) = %s \n", prm->iqflip); fprintf(stderr, " offset_video(off_vid) = %s \n", prm->offset_video); fprintf(stderr, " az_res = %lf \n", prm->az_res); fprintf(stderr, " nlooks = %d \n", prm->nlooks); fprintf(stderr, " chirp_ext(nextend) = %d \n", prm->chirp_ext); fprintf(stderr, " scnd_rng_mig(srm) = %s \n", prm->srm); fprintf(stderr, " rng_spec_wgt(rhww) = %lf \n", prm->rhww); fprintf(stderr, " rm_rng_band(pctbw) = %lf \n", prm->pctbw); fprintf(stderr, " rm_az_band(pctbwaz) = %lf \n", prm->pctbwaz); fprintf(stderr, " rshift = %d \n", prm->rshift); fprintf(stderr, " ashift = %d \n", prm->ashift); fprintf(stderr, " stretch_r = %lf \n", prm->stretch_r); fprintf(stderr, " stretch_a = %lf \n", prm->stretch_a); fprintf(stderr, " a_stretch_r = %lf \n", prm->a_stretch_r); fprintf(stderr, " a_stretch_a = %lf \n", prm->a_stretch_a); fprintf(stderr, " first_sample = %d \n", prm->first_sample); fprintf(stderr, " SC_identity = %d \n", prm->SC_identity); fprintf(stderr, " rng_samp_rate(fs) = %lf \n", prm->fs); fprintf(stderr, " near_range = %lf \n", prm->near_range); } /*------------------------------------------------------*/ /* not all variables are called the same in sio.h and the prm file changed offset_video off_video chirp_ext nextend PRM SOI.H ------------------------------- Flip_iq iqflip scnd_rng_mig srm rng_spec_wgt rhww rm_rng_band pctbw rm_az_band pctbwaz rng_samp_rate fs */ GMTSAR_V5.7/gmtsar/phasediff.c000644 015705 000000 00000052127 13505462013 017141 0ustar00sandwellwheel000000 000000 /* $Id: phasediff.c 109 2015-01-19 23:01:24Z sandwell $ */ /*************************************************************************** * phasediff reads two complex SAR_SLC images and computes the phase * * difference of the images removing the effects of the curved earth * * and optionally the topography. Orbit information is provided in the * * second PRM-file. * * The baseline changes linearly between the start and end of the image. * * This linear baseline model is appropriate for a single frame but higher * * order terms are needed for long swaths of data. * * Model phase can also be removed as an option. * * The images should be matched to a level that will * * produce interference fringes and must be the same size. * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Evelyn J. Price * * (Scripps Institution of Oceanography) * * Date : 7/7/95 * * Rewritten: Rob Mellors (San Diego State University) * * Date : 11/7/09 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 11/18/96 Changed sign of earth flattening phase to fit with signs * * of baseline estimates. * * 11/18/96 Changed to read GIPS headers to gather parameters. * * 11/21/96 Changed to update baseline estimate. * * 06/19/97 Changed to NOT update baseline parameters * * 06/25/97 Changed to change baseline along the frame * * 03/10/99 Changed to remove reference phase due to topography * * 04/06/01 Changed to remove model or other known phase * * 06/21/02 Changed to scale the interferogram by 1/sqrt(amp) * * 08/16/06 Changed to use the topo_ra to shift the range * * coordinate of the repeat image for long baselines. * * 07/02/08 provide ability to shift topo_ra * * 07/11/08 Added spacecraft height start and end to make phase * * continuous across patches * * 09/18/08 Added TEC_start and TEC_end to account for the ionosphere * * 08/18/09 Added small correction to the phase for the elevation- * * dependent range shift, important for long baselines * * 11/07/09 Code rewritten by RJM to read PRM-files and write grd-files* * 04/24/10 changed calc_phase subroutine based on pdiff.c * * changed the phase calculation part to match pdiff.c * * this change is to account for slight range change due to * * topography, which is accounted for in pdiff.c * * 10/23/10 changed calc_phase to calc_drho and completely rewrote * * the topographic phase correction to use all the nonlinear * * terms. ***************************************************************************/ #include "gmtsar.h" char *USAGE = "phasediff [GMTSAR] - Compute phase difference of two images\n\n" "\nUsage: " "phasediff ref.PRM rep.PRM [-topo topo_ra.grd] [-model " "modelphase.grd]\n (topo_ra and model in GMT grd format)\n"; /*--------------------------------------------------------------*/ void calc_drho(int xdim, double *range, double *topo, double avet, double re, double height, double B, double alpha, double Bx, double *drho) { int k; /* EX: changing to long double for better precision */ long double rho, sint, cost, cosa, sina, b; // long double term1,term2,c,c2,ret,ret2; long double term1, c, c2, ret, ret2; sina = sin(alpha); cosa = cos(alpha); c = re + height; c2 = c * c; b = B; for (k = 0; k < xdim; k++) { /* compute the look angle using equation (C26) in Appendix C */ rho = range[k]; ret = re + avet + topo[k]; ret2 = ret * ret; cost = ((rho * rho + c2 - ret2) / (2. * rho * c)); // thet = acos(cost); if (cost >= 1.) die("calc_drho", "cost >= 0"); sint = sqrtl(1. - cost * cost); /* compute the range change using equation (c23) in Appendic C */ // term1 = -B*(sint*cosa-cost*sina); // term2 = B*B*(cost*cosa+sint*sina)*(cost*cosa+sint*sina)/(2.*rho); // drho[k] = term1 + term2; /* New (Eric Lindsey, April 2015): compute the range change using the full * nonlinear equation */ // term1 = rho*rho + b*b - 2*rho*b*(sint*cosa-cost*sina); // term1 = rho*rho + b*b - 2*rho*b*sin(thet-alpha); // drho[k] = -rho + sqrtl(term1); /* Compute the offset effect from non-parallel orbit */ term1 = rho * rho + b * b - 2 * rho * b * (sint * cosa - cost * sina) - Bx * Bx; // term1 = rho*rho + b*b - 2*rho*b*(sint*cosa-cost*sina); drho[k] = -rho + sqrtl(term1); } } /*--------------------------------------------------------------*/ void calc_average_topo(double *avet, int xdimt, int ydimt, float *topo) { double sumt; int k, nsum; sumt = 0.0; nsum = 0; /* compute the average topography, save the value, and remove it from the * topography */ for (k = 0; k < xdimt * ydimt; k++) { sumt += topo[k]; nsum++; } *avet = sumt / nsum; for (k = 0; k < xdimt * ydimt; k++) { topo[k] = topo[k] - (float)*avet; } if (verbose) fprintf(stderr, " mean topo %lf\n", *avet); } void print_prm_params(struct PRM p1, struct PRM p2) { fprintf(stderr, " SLC 1: num_rng_bins %d num_lines %d \n", p1.num_rng_bins, p1.num_lines); fprintf(stderr, " SLC 2: num_rng_bins %d num_lines %d \n", p2.num_rng_bins, p2.num_lines); fprintf(stderr, " lambda %f \n", p2.lambda); fprintf(stderr, " baseline_start %f \n", p2.baseline_start); fprintf(stderr, " baseline_end %f \n", p2.baseline_end); fprintf(stderr, " B_offset_start %f \n", p2.B_offset_start); fprintf(stderr, " B_offset_end %f \n", p2.B_offset_end); fprintf(stderr, " alpha_start %f \n", p2.alpha_start); fprintf(stderr, " alpha_end %f \n", p2.alpha_end); fprintf(stderr, " near_range %f \n", p2.near_range); fprintf(stderr, " rng_samp_rate %f \n", p2.fs); fprintf(stderr, " sc_clock_start %f \n", p2.SC_clock_start); fprintf(stderr, " sc_clock_stop %f \n", p2.SC_clock_stop); fprintf(stderr, " clock_start %f \n", p2.clock_start); fprintf(stderr, " clock_stop %f \n", p2.clock_stop); fprintf(stderr, " prf %f \n", p2.prf); } void fix_prm_params(struct PRM *p, char *s) { double delr; delr = SOL / p->fs / 2.0; /* this is the correction for the range and azimuth shifts of the re-aligned * SLC images */ // if(p->sub_int_r < 0.) p->sub_int_r = 0.; // if(p->sub_int_a < 0.) p->sub_int_a = 0.; p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift + p->sub_int_r - 1) * delr; p->SC_clock_start = p->SC_clock_start + (p->ashift + p->sub_int_a) / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } /*--------------------------------------------------------------*/ /* read topo_ra and model files if provided */ /* must be in GMT binary grd format */ void read_optional_args(void *API, int argc, char **argv, struct PRM *tp, int *topoflag, struct PRM *mp, int *modelflag) { int i; struct GMT_GRID *M = NULL, *T = NULL; /* Grid structures containing ->header and ->data */ for (i = 3; i < argc; i++) { if (strcmp(argv[i], "-topo") == 0) { fprintf(stderr, "reading topo %s\n", argv[i + 1]); strcpy(tp->input_file, argv[i + 1]); if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, tp->input_file, NULL)) == NULL) die("cannot open topofile", tp->input_file); tp->num_rng_bins = T->header->nx; tp->num_lines = T->header->ny; *topoflag = 1; i++; GMT_Destroy_Data(API, &T); } if (strcmp(argv[i], "-model") == 0) { fprintf(stderr, "reading model %s\n", argv[i + 1]); strcpy(mp->input_file, argv[i + 1]); if ((M = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, mp->input_file, NULL)) == NULL) die("cannot open model file", mp->input_file); mp->num_rng_bins = M->header->nx; mp->num_lines = M->header->ny; *modelflag = 1; i++; GMT_Destroy_Data(API, &M); } } } int main(int argc, char **argv) { int j, k, istart; int topoflag, modelflag; int xdim = 0, ydim = 0; /* size of SLC file */ int ydim_start; /* start of SLC filesize */ int xt, yt; /* size of topo file, increment */ int xm, ym; /* size of model file, increment */ uint64_t left_node; short *d1 = NULL, *d2 = NULL; /* pointers to input data files */ double *xs = NULL, *shft = NULL, *ss = NULL, *as = NULL, *topo2 = NULL; double *real = NULL, *imag = NULL, *range = NULL, *drho = NULL, *drho0 = NULL; double drange, dt, tspan, time, time2; double ht0, htc, htf, dht, ddht, height; double alpha, cnst, pha, avet; double B, Bh, Bv, dBh, dBv, ddBh, ddBv; double Bx, dBx, ddBx, Bx0, Bxc, Bxf; double Bh0, Bhc, Bhf, Bv0, Bvc, Bvf; double ys, test, inc[2], wesn[4]; double xdect, ydect, xdecm, ydecm, rdumt; FILE *SLCfile1 = NULL, *SLCfile2 = NULL; fcomplex *intfp = NULL, *iptr1 = NULL, *iptr2 = NULL, pshif; struct PRM p1, p2, tp, mp; void *API = NULL; /* GMT control structure */ struct GMT_GRID *M = NULL, *T = NULL; /* Grid structures containing ->header and ->data */ struct GMT_GRID *RE = NULL, *IM = NULL; /* For the real and imaginary grids */ double *range2 = NULL; /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; verbose = 0; topoflag = modelflag = 0; xdect = ydect = 1.0; xdecm = ydecm = 1.0; avet = 0.0; ydim_start = 0; if (argc < 3) die(USAGE, ""); /* read prm file into two pointers */ get_prm(&p1, argv[1]); get_prm(&p2, argv[2]); if (verbose) fprintf(stderr, "near range: %lf %lf \n", p1.near_range, p2.near_range); if (argc > 3) read_optional_args(API, argc, argv, &tp, &topoflag, &mp, &modelflag); if (debug) print_prm_params(p1, p2); if (p2.baseline_start < -9000) die("baseline < -9000 not set ?", ""); /* near_range, SC_clock_start, and SC_clock_stop need to be changed */ fix_prm_params(&p1, argv[1]); fix_prm_params(&p2, argv[2]); if (verbose) fprintf(stderr, "near range: %lf %lf \n", p1.near_range, p2.near_range); /* open SLC files */ if ((SLCfile1 = fopen(p1.SLC_file, "r")) == NULL) die("Can't open SLCfile", p1.SLC_file); if ((SLCfile2 = fopen(p2.SLC_file, "r")) == NULL) die("Can't open SLCfile", p2.SLC_file); /* set width and length */ /* check dimensions of the two SLC files */ if (p1.num_rng_bins == p2.num_rng_bins) { xdim = p1.num_rng_bins; } else { die("The dimensions of range do not match", ""); } if (p1.num_patches * p1.num_valid_az == p2.num_patches * p2.num_valid_az) { ydim = p1.num_patches * p1.num_valid_az; } else { die("The dimensions of azimuth do not match", ""); } fprintf(stderr, " xdim %d, ydim %d \n", xdim, ydim); /* set heights */ htc = p1.ht; ht0 = p1.ht_start; htf = p1.ht_end; inc[GMT_X] = inc[GMT_Y] = 1.0; /* Pixels */ wesn[GMT_XLO] = 0.0; wesn[GMT_XHI] = inc[GMT_X] * xdim; wesn[GMT_YLO] = 0.0; wesn[GMT_YHI] = inc[GMT_Y] * ydim; if ((RE = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "real", RE)) return EXIT_FAILURE; if ((IM = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "imag", RE)) return EXIT_FAILURE; /* allocate memory */ drho = (double *)malloc(xdim * sizeof(double)); drho0 = (double *)malloc(xdim * sizeof(double)); range = (double *)malloc(xdim * sizeof(double)); range2 = (double *)malloc(xdim * sizeof(double)); intfp = (fcomplex *)malloc(xdim * sizeof(fcomplex)); iptr1 = (fcomplex *)malloc(xdim * sizeof(fcomplex)); iptr2 = (fcomplex *)malloc(xdim * sizeof(fcomplex)); d1 = (short *)malloc(2 * xdim * sizeof(short)); d2 = (short *)malloc(2 * xdim * sizeof(short)); shft = (double *)malloc(xdim * sizeof(double)); xs = (double *)malloc(xdim * sizeof(double)); topo2 = (double *)malloc(xdim * sizeof(double)); imag = (double *)malloc(xdim * sizeof(double)); real = (double *)malloc(xdim * sizeof(double)); ss = (double *)malloc(xdim * sizeof(double)); as = (double *)malloc(xdim * sizeof(double)); /* open and read topo file and allocate memory */ if (topoflag) { if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, tp.input_file, NULL)) == NULL) return EXIT_FAILURE; if (xdim % T->header->nx != 0 || ydim % T->header->ny != 0) die("The dimension SLC must be multiplication factor of the topo_ra", tp.input_file); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, tp.input_file, T) == NULL) return EXIT_FAILURE; rdumt = floor(T->header->z_max + 1.0); if (verbose) fprintf(stderr, "\n%s %s %d %d\n", T->header->title, tp.input_file, T->header->nx, T->header->ny); if (verbose) fprintf(stderr, "\n%f %f %f %f %f\n", T->header->wesn[GMT_XLO], T->header->wesn[GMT_YLO], T->header->inc[GMT_X], T->header->inc[GMT_Y], rdumt); /* T->header->inc[GMT_X] or T->header->inc[GMT_Y] may be negative */ xdect = fabs(T->header->inc[GMT_X]); ydect = fabs(T->header->inc[GMT_Y]); /* calculate the average and remove the average from the topography */ calc_average_topo(&avet, T->header->nx, T->header->ny, T->data); if (verbose) fprintf(stderr, " read topo file: average %f \n", avet); } /* open and read the model file and allocate the memory */ if (modelflag) { if ((M = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, mp.input_file, NULL)) == NULL) return EXIT_FAILURE; if (xdim % M->header->nx != 0 || ydim % M->header->ny != 0) die("The dimension SLC must be multiplication factor of the modelphase", mp.input_file); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, mp.input_file, M) == NULL) return EXIT_FAILURE; xdecm = fabs(M->header->inc[GMT_X]); ydecm = fabs(M->header->inc[GMT_Y]); } /* compute the time span and the time spacing */ tspan = 86400. * fabs(p2.SC_clock_stop - p2.SC_clock_start); dt = tspan / (ydim - 1); if (tspan < 0.01 || p2.prf < 0.01) die("check sc_clock_start, _end, or prf", ""); /* setup the default parameters */ drange = SOL / (2.0 * p2.fs); alpha = p2.alpha_start * PI / 180.0; cnst = -4.0 * PI / p2.lambda; for (k = 0; k < xdim; k++) { // range[k]=p1.near_range+k*drange; range[k] = p1.near_range + k * (1 + p1.stretch_r) * drange; topo2[k] = 0.; xs[k] = k; } /* calculate initial baselines */ /* if (p2.SC_identity == 100) { double tmpB = 0.0,alpha = 0.0; tmpB = p2.baseline_start; alpha = p2.alpha_start; p2.baseline_start = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_start = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_start)/PI*180.0; tmpB = p2.baseline_end; alpha = p2.alpha_end; p2.baseline_end = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_end = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_end)/PI*180.0; tmpB = p2.baseline_center; alpha = p2.alpha_center; p2.baseline_center = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_center = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_center)/PI*180.0; } */ Bh0 = p2.baseline_start * cos(p2.alpha_start * PI / 180.0); Bv0 = p2.baseline_start * sin(p2.alpha_start * PI / 180.0); Bhf = p2.baseline_end * cos(p2.alpha_end * PI / 180.0); Bvf = p2.baseline_end * sin(p2.alpha_end * PI / 180.0); Bx0 = p2.B_offset_start; Bxf = p2.B_offset_end; /* first case is quadratic baseline model, second case is default linear model */ if (p2.baseline_center != NULL_DOUBLE || p2.alpha_center != NULL_DOUBLE || p2.B_offset_center != NULL_DOUBLE) { Bhc = p2.baseline_center * cos(p2.alpha_center * PI / 180.0); Bvc = p2.baseline_center * sin(p2.alpha_center * PI / 180.0); Bxc = p2.B_offset_center; dBh = (-3. * Bh0 + 4 * Bhc - Bhf) / tspan; dBv = (-3. * Bv0 + 4 * Bvc - Bvf) / tspan; ddBh = (2. * Bh0 - 4 * Bhc + 2 * Bhf) / (tspan * tspan); ddBv = (2. * Bv0 - 4 * Bvc + 2 * Bvf) / (tspan * tspan); dBx = (-3. * Bx0 + 4 * Bxc - Bxf) / tspan; ddBx = (2. * Bx0 - 4 * Bxc + 2 * Bxf) / (tspan * tspan); } else { dBh = (Bhf - Bh0) / tspan; dBv = (Bvf - Bv0) / tspan; dBx = (Bxf - Bx0) / tspan; ddBh = ddBv = ddBx = 0.0; } /* calculate height increment */ dht = (-3. * ht0 + 4 * htc - htf) / tspan; ddht = (2. * ht0 - 4 * htc + 2 * htf) / (tspan * tspan); /* revise params in accordance with first_line */ if ((p1.first_line > 0) && (p2.first_line > 0)) ydim_start = p1.first_line - 1; /* now go through all the rows */ for (j = ydim_start; j < (ydim + ydim_start); j++) { for (k = 0; k < xdim; k++) { // range[k]=p1.near_range+k*drange; range2[k] = range[k] + j * p1.a_stretch_r * drange; } /* read data from complex i2 SLC */ read_SLC_short2float(SLCfile1, p1.SLC_file, d1, &iptr1[0], xdim, 1, DFACT); read_SLC_short2float(SLCfile2, p2.SLC_file, d2, &iptr2[0], xdim, 1, DFACT); yt = j / ydect; /* for topo_ra */ ym = j / ydecm; /* for modelphase */ /* calculate the change in baseline and height along the frame */ time = j * dt; time2 = time * time; Bh = Bh0 + dBh * time + ddBh * time2; Bv = Bv0 + dBv * time + ddBv * time2; Bx = Bx0 + dBx * time + ddBx * time2; B = sqrt(Bh * Bh + Bv * Bv); alpha = atan2(Bv, Bh); height = ht0 + dht * time + ddht * time2; for (k = 0; k < xdim; k++) { shft[k] = 0.; if (topoflag) { xt = k / xdect; topo2[k] = T->data[xt + T->header->nx * yt]; } } /* calculate the combined earth curvature and topography correction */ calc_drho(xdim, range2, topo2, avet, p1.RE, height, B, alpha, Bx, drho); // if (j == 50) printf("drho = %.12f\n",drho[50]); /* loop over range to make topographic and model phase corrections */ for (k = 0; k < xdim; k++) { // // iptr1[k].r = 1.0; // iptr1[k].i = 1.0; // intfp[k] = iptr1[k]; pha = cnst * drho[k]; if (modelflag) { xm = k / xdecm; /* xm is increment for model phase. note they are all integers */ pha = pha - M->data[xm + M->header->nx * ym]; } pshif = Cexp(pha); intfp[k] = Cmul(intfp[k], pshif); } /* shift the range of the repeat image to improve image matching for very * long baselines > 1000 m */ if ((topoflag > 0) && (p2.baseline_start > 1000.0)) { /* compute the range change with no topography so the range shift can be * determined for the spline */ calc_drho(xdim, range, shft, avet, p1.RE, height, B, alpha, Bx, drho0); for (k = 0; k < xdim; k++) { shft[k] = (drho0[k] - drho[k]) / drange; real[k] = intfp[k].r; imag[k] = intfp[k].i; } /* shift the real part */ spline_(&istart, &xdim, xs, real, ss, as); for (k = 0; k < xdim; k++) { ys = xs[k] + shft[k]; evals_(&istart, &ys, &xdim, xs, real, ss, &test); intfp[k].r = (float)test; } /* shift imaginary part */ spline_(&istart, &xdim, xs, imag, ss, as); for (k = 0; k < xdim; k++) { ys = xs[k] + shft[k]; evals_(&istart, &ys, &xdim, xs, real, ss, &test); intfp[k].i = (float)test; } } /* make interferogram */ left_node = GMT_Get_Index(API, RE->header, j, 0); for (k = 0; k < xdim; k++) { // // iptr2[k].r = 1.0; // iptr2[k].i = 1.0; // iptr2[k] = Conjg(iptr2[k]); intfp[k] = Cmul(intfp[k], iptr2[k]); RE->data[left_node + k] = intfp[k].r; IM->data[left_node + k] = intfp[k].i; } } if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, "real.grd=bf", RE)) { die("Failed to update real.grd grid header", ""); } if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, "imag.grd=bf", IM)) { die("Failed to update imag.grd grid header", ""); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/gmtsar/geoxyz.c000644 015705 000000 00000003513 13505462013 016530 0ustar00sandwellwheel000000 000000 /* adapted from Remko Scharroo's geoxyz/geocen/polcar */ /* This subroutine converts geodetic latitude, longitude and height above the */ /* GRS80 reference ellipsoid to Earth Centered Fixed coordinates X, Y and Z. */ /* */ /* LAT (input) : Geodetic latitude (rad). */ /* LON (input) : Geodetic longitude (rad). */ /* HEIGHT (input) : Height above the reference ellipsoid (m). */ /* XYZ(3) (output) : Earth Centered Fixed coordinates X, Y, and Z (m). */ /* R (output) : Distance to geocenter (m). */ #include "lib_functions.h" #include "sfd_complex.h" #include #include double AE, FLAT, OMFSQ, AP, GM, AM, FFACT, AMSQ; /*------------------------------------------------------------------------------*/ void geocen(double lat, double height, double *latc, double *r) { double rs, lats; lats = atan(OMFSQ * tan(lat)); rs = AP / sqrt(1.0 + FFACT * cos(lats) * cos(lats)); *r = sqrt(height * height + rs * rs + 2 * height * rs * cos(lat - lats)); *latc = lats + asin(height * (sin(lat - lats)) / (*r)); } /*------------------------------------------------------------------------------*/ void polcar(double lat, double lon, double *r, double *xyz) { xyz[0] = *r * cos(lat) * cos(lon); xyz[1] = *r * cos(lat) * sin(lon); xyz[2] = *r * sin(lat); } /*------------------------------------------------------------------------------*/ void geoxyz(double lat, double lon, double height, double *xyz, double *r) { double latc; /* from GRS80.inc */ /* set parameters for GRS80 */ AE = 6378137.0; FLAT = 1.0 / 298.257; GM = 398600.436; OMFSQ = (1.0 - FLAT) * (1.0 - FLAT); AP = AE * (1.0 - FLAT); FFACT = OMFSQ - 1.0; AM = AE * (1.0 - FLAT / 3.0 - FLAT * FLAT / 5.0); AMSQ = AM * AM; geocen(lat, height, &latc, r); polcar(latc, lon, r, xyz); } GMTSAR_V5.7/gmtsar/SAT_llt2rat_sub.c000644 015705 000000 00000025610 13505462013 020151 0ustar00sandwellwheel000000 000000 /**************************************************************************** * Subroutine to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/15/09 - modifed to correct the contradiction of range sampling rate * * between FBS and FBD mode. ****************************************************************************/ #include "gmtsar.h" #include "llt2xyz.h" #include "orbit.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 void set_prm_defaults(struct PRM *); void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void hermite_c(double *, double *, double *, int, int, double, double *, int *); void llt2rat_sub(char *filename, double *target_llt, double *target_rat) { double rln, rlt, rht, dr, t1, t2, tm; // double ts,rng, thet, relp, telp; double ts, rng; double xp[3]; double xt[3]; double rp[3]; /* double r0,rf,a0,af; */ // double rad=PI/180.; double fll, rdd, daa, drr; int j, nrec, npad = 8000; int goldop(); int stai, endi, midi; double **orb_pos; struct PRM prm; struct SAT_ORB *orb; FILE *ldrfile; FILE *fprm1; int calorb_alos(struct SAT_ORB *, double **orb_pos, double ts, double t1, int nrec); double rsr; char value[128], name[128]; /* open and read the parameter file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } /* initialize the prm file */ set_prm_defaults(&prm); get_sio_struct(fprm1, &prm); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); read_orb(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; #if 0 r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* read the llt points and convert to xyz. */ rlt = target_llt[0]; rln = target_llt[1]; rht = target_llt[2]; rp[0] = rlt; rp[1] = rln; rp[2] = rht; plh2xyz(rp, xp, prm.ra, fll); xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ // thet = rlt * rad; // if(prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { // relp=1./sqrt((cos(thet)/prm.ra)*(cos(thet)/prm.ra)+(sin(thet)/prm.rc)*(sin(thet)/prm.rc)); // telp=relp-prm.RE; //} // else { // telp=0.; //} // rp[2]=rht + telp; rp[2] = sqrt(xp[0] * xp[0] + xp[1] * xp[1] + xp[2] * xp[2]) - prm.RE; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); xt[0] = rng; xt[1] = tm; /* compute the range and azimuth in pixel space and correct for an azimuth * bias*/ xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a); /* compute the azimuth and range correction if the Doppler is not zero */ if (prm.fd1 != 0.) { rdd = (prm.vel * prm.vel) / rng; daa = -0.5 * (prm.lambda * prm.fd1) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } target_rat[0] = xt[0]; target_rat[1] = xt[1]; target_rat[2] = rp[2]; free(orb_pos); free(orb); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct SAT_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/gmtsar/rng_ref.c000644 015705 000000 00000011342 13505462013 016624 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_ref computes the range reference function used for range * compression of *raw radar echoes * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * * 08/06/08 DTS - secondary range migration code added from HZ * * * ************************************************************************/ #include "gmt.h" #include "siocomplex.h" #include "soi.h" #define RW 0666 void rng_ref(void *API, int ranfft, float delr, fcomplex *ref1) { float ts, t, phase, rhww1, win1; float wgt; fcomplex cref; fcomplex junk; int npts, k1start, k1end, icaltone; int i, k, index = 0; double delw, rc, kx, omega, omega0; /* Compute range reference function */ /* Compute number of points in reference function. */ if ((strcmp(off_vid, "y") == 0) || (strcmp(off_vid, "Y") == 0)) { npts = 2.0 * fs * pulsedur; ts = 1.0 / (2.0 * fs); } else { npts = fs * pulsedur; ts = 1. / fs; } if (fmod(npts, 2.0) == 0.0) npts = npts + 1; k1start = (int)fabs(pctbw) * npts; k1end = npts - (int)fabs(pctbw) * npts; /* compute reference function */ k = 0; for (i = -npts / 2; i <= npts / 2; i++) { t = i * ts; if ((strcmp(off_vid, "y") == 0) || (strcmp(off_vid, "Y") == 0)) { phase = PI * slope * t * t + PI * fs * t; if ((k >= k1start) && (k < k1end)) { ref1[i + npts / 2].r = cosf(phase); ref1[i + npts / 2].i = 0.0f; } else { ref1[i + npts / 2].r = 0.0f; ref1[i + npts / 2].i = 0.0f; } } else { phase = PI * slope * t * t; if ((k >= k1start) && (k < k1end)) { index = i + npts / 2; ref1[index] = Cexp(phase); } else { ref1[index].r = 0.0f; ref1[index].i = 0.0f; } } k = k + 1; } /* window reference function */ rhww1 = 1.0 - rhww; for (i = 0; i < ranfft; i++) { if (i < npts) { win1 = rhww - rhww1 * cos((2.0 * PI * ((float)i)) / ((float)(npts - 1))); junk = ref1[i]; ref1[i] = RCmul(win1, junk); } else { ref1[i].r = 0.0f; ref1[i].i = 0.0f; } } /* extend the chirp */ if (nextend > 0) { for (i = 0; i < npts; i++) { if ((k = i - nextend) < 0) k = k + ranfft; ref1[k] = ref1[i]; } for (i = 0; i < nextend; i++) { if ((k = npts - nextend + i) < 0) k = k + ranfft; ref1[k].r = 0.0f; ref1[k].i = 0.0f; } } /* Calculate fft of range reference function */ // dir = -1; // cfft1d_(&ranfft,ref1,&dir); GMT_FFT_1D(API, (float *)ref1, ranfft, GMT_FFT_FWD, GMT_FFT_COMPLEX); /* zero out dc and caltone location */ icaltone = (int)(caltone * ranfft + 0.5); for (i = 0; i < 6; i++) { wgt = 0.5 - 0.5 * cos(((float)i) / 5.0 * PI); ref1[i] = RCmul((float)wgt, ref1[i]); if ((strcmp(off_vid, "y") == 0) || (strcmp(off_vid, "Y") == 0)) { ref1[i + ranfft / 2] = RCmul((float)wgt, ref1[i + ranfft / 2]); ref1[ranfft / 2 - i - 1] = RCmul((float)wgt, ref1[ranfft / 2 - 1 - i]); } ref1[i + icaltone] = RCmul((float)wgt, ref1[i + icaltone]); k = icaltone - i; if (k < 0) k = k + ranfft; ref1[k] = RCmul((float)wgt, ref1[k]); if ((strcmp(off_vid, "y") == 0) || (strcmp(off_vid, "Y") == 0)) { k = i + ranfft - icaltone; if (k >= ranfft) k = k - ranfft; ref1[k] = RCmul((float)wgt, ref1[k]); ref1[ranfft - icaltone - 1 - i] = RCmul((float)wgt, ref1[ranfft - icaltone - 1 - i]); } if (i > 0) ref1[ranfft - i] = RCmul((float)wgt, ref1[ranfft - i]); } /* apply secondary range migration */ if ((strcmp(srm, "y") == 0) || (strcmp(srm, "Y") == 0)) { delw = PI2 * fs / ranfft; rc = near_range + delr * num_rng_bins / 2; kx = PI2 * (fd1 + fdd1 * rc + pow(fddd1 * rc, 2.0)) / vel1; omega0 = PI2 * SOL / lambda; /* printf("delw= %f rc=%f kx=%f omega0 = %f \n",delw,rc,kx,omega0);*/ phase = -0.25 * rc * (lambda / PI2) * pow(kx, 2.0) * pow(((omega0 - ranfft / 2. * delw) / omega0), 2.0); /* printf("phase = %f \n",phase);*/ /* loop over frequencies and update the reference function */ for (i = 0; i < ranfft; i++) { k = i; if (i > ranfft / 2) k = i - ranfft; omega = omega0 + k * delw; phase = -0.25 * rc * (lambda / PI2) * pow(kx, 2.0) * pow(((omega) / omega0), 2.0); /* printf("i= %d k= %d phase = %f \n",i,k,phase);*/ junk = Cexp(phase); ref1[i] = Cmul(ref1[i], junk); } } for (i = 0; i < ranfft; i++) { cref = Conjg(ref1[i]); ref1[i] = RCmul((float)(1.0 / ranfft), cref); } } GMTSAR_V5.7/gmtsar/highres_corr.c000644 015705 000000 00000004161 13505462013 017661 0ustar00sandwellwheel000000 000000 /* $Id: highres_corr.c 39 2013-04-07 00:49:34Z pwessel $ */ /*-------------------------------------------------------*/ #include "gmtsar.h" #include "lib_functions.h" #include "xcorr.h" /*-------------------------------------------------------------------------------*/ void do_highres_corr(void *API, struct xcorr *xc, int iloc) { int i, j, ic, jc, k; int nx, ny, nx2, ny2, ifc; float max_corr, ipeak, jpeak, sub_xoff, sub_yoff; ifc = xc->interp_factor; /* size of complex version of correlation */ /* must be power of two */ nx = xc->n2x; ny = xc->n2y; /* size of interpolated matrix */ nx2 = ifc * nx; ny2 = ifc * ny; /* remove calculated offset from 1 pixel resolution */ /* factor of 2 on xoff for range interpolation */ jc = (xc->nxc / 2) - nx / 2 - (int)xc->loc[iloc].xoff; ic = (xc->nyc / 2) - ny / 2 - (int)xc->loc[iloc].yoff; /* copy values from correlation to complex */ /* use values centered around highest value */ for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { if ((k = (ic + i) * xc->nxc + (jc + j)) < 0) continue; xc->md[i * nx + j].r = powf(xc->corr[k], 0.25f); xc->md[i * nx + j].i = 0.0f; } } if (debug) print_complex(xc->md, nx, ny, 1); fft_interpolate_2d(API, xc->md, ny, nx, xc->cd_exp, ny2, nx2, ifc); if (ifc <= 4) print_complex(xc->cd_exp, nx2, ny2, 1); /* find maximum in interpolated matrix */ max_corr = -1.0f; ipeak = jpeak = -1; for (i = 0; i < ny2; i++) { for (j = 0; j < nx2; j++) { if (xc->cd_exp[i * nx2 + j].r > max_corr) { max_corr = xc->cd_exp[i * nx2 + j].r; ipeak = i - (ny2 / 2); jpeak = j - (ny2 / 2); } } } /* fft interpolation */ sub_xoff = jpeak / (float)(ifc); sub_yoff = ipeak / (float)(ifc); if (debug) { fprintf(stderr, " highres [ri %d ifc %d](%4.1f %4.1f) (nx %d ny %d) jpeak %f ipeak " "%f : %f %f : %4.2f\n", xc->ri, ifc, xc->loc[iloc].xoff, xc->loc[iloc].yoff, nx2, ny2, jpeak, ipeak, sub_xoff, sub_yoff, max_corr); } xc->loc[iloc].xfrac = sub_xoff; xc->loc[iloc].yfrac = sub_yoff; } /*-------------------------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/utils.c000644 015705 000000 00000010245 13505462013 016343 0ustar00sandwellwheel000000 000000 /************************************************************************ * various utilities needed for gmtsar * * modified from readgrd * ************************************************************************/ /************************************************************************ * Creator: Rob J. Mellors, San Deigo State University * * Date : December 18, 2007 * * * * Modification history: * * some slight format changes - Dec 18, 2007 - RJM * * comments added - Jan 14, 2010 - DTS * ************************************************************************/ #include "gmtsar.h" #include "lib_functions.h" /*---------------------------------------------------------------*/ /* check endian of machine */ /* 1 if big; -1 if little */ int is_big_endian_() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } int is_big_endian__() { return is_big_endian_(); } /*---------------------------------------------------------------*/ /* write out error message and exit */ /* use two strings to allow more complicated error messages */ void die(char *s1, char *s2) { fprintf(stderr, " %s %s \n", s1, s2); exit(1); } /*---------------------------------------------------------------*/ /* cross3 is a routine to take the cross product of 3-D vectors */ void cross3(double *a, double *b, double *c) /* input and output vectors having 3 elements */ { c[0] = (a[1] * b[2]) - (a[2] * b[1]); c[1] = (-a[0] * b[2]) + (a[2] * b[0]); c[2] = (a[0] * b[1]) - (a[1] * b[0]); } /*----------------------------------------------------------------------*/ /* find_length returns length of a 3 component vector */ double find_length(double *x) { double length; length = sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]); return (length); } /*----------------------------------------------------------------------*/ /* find_distance returns distance between two 3 component vector */ double find_distance(double *xs, double *x) { int i; double dx[3]; for (i = 0; i < 3; i++) dx[i] = xs[i] - x[i]; return (find_length(dx)); } /*----------------------------------------------------------------------*/ /* find_distance returns distance between two 3 component vector */ /* sometimes cannot specify as vectors easily */ double find_distance3(double x11, double x12, double x13, double x21, double x22, double x23) { double dx[3], distance; dx[0] = x11 - x21; dx[1] = x12 - x22; dx[2] = x13 - x23; distance = find_length(dx); return (distance); } /*---------------------------------------------------------------------------*/ void find_unit_vector(double *x, double *xn) { int i; double r; r = find_length(x); for (i = 0; i < 3; i++) xn[i] = x[i] / r; } /*---------------------------------------------------------------------------*/ /* find seconds */ void get_seconds(struct PRM p, double *start, double *end) { int m; double doy; double n_secs_day; n_secs_day = 24.0 * 60.0 * 60.0; doy = p.clock_start; m = p.nrows - p.num_valid_az; /* also correct the time for the azimuth shift */ // if(p.sub_int_a < 0.) p.sub_int_a = 0.; *start = n_secs_day * doy + (p.ashift + p.sub_int_a) / (p.prf) + (1.0 * m) / (2.0 * p.prf); *end = *start + p.num_patches * p.num_valid_az / p.prf; } /*---------------------------------------------------------------------------*/ int find_fft_length(int n) { int nfft; nfft = 2; while (nfft < n) nfft = 2 * nfft; if (debug) fprintf(stderr, "find_fft_length:\n...data length n %d nfft %d \n\n", n, nfft); return (nfft); } /*-----------------------------------------------------------------------*/ int geo2latlon(double *x, double *llt, struct PRM r) { double fll; fll = (r.ra - r.rc) / r.ra; xyz2plh(x, llt, r.ra, fll); if (verbose) fprintf(stderr, " geo2latlon: %8.3f %8.3f %8.0f \n", x[0], x[1], x[2]); return (EXIT_SUCCESS); } /*-----------------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/sarleader_fdr.h000644 015705 000000 00000033216 13505462013 020010 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #ifndef SARLEADER_FDR_H #define SARLEADER_FDR_H #define SARLEADER_FDR_BINARY_WCS \ "*********** SAR FDR BINARY **********\n" \ "record_seq_no ==> %1d\n" \ "record_subtype_code1 ==> %1x\n" \ "record_type_code1 ==> %1x\n" \ "record_subtype_code2 ==> %1x\n" \ "record_subtype_code3 ==> %1x\n" \ "record_length ==> %1d\n\n" #define SARLEADER_FDR_BINARY_RVL(SP) \ (SP)->record_seq_no, (SP)->record_subtype_code1, (SP)->record_type_code1, (SP)->record_subtype_code2, \ (SP)->record_subtype_code3, (SP)->record_length struct sarleader_binary { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; #define SARLEADER_FDR_FIXSEG_RCS "%2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c" #define SARLEADER_FDR_FIXSEG_RVL(SP) \ (SP)->A_E_flag, (SP)->blank_2, (SP)->for_con_doc, (SP)->for_con_doc_rev_level, (SP)->file_des_rev_level, (SP)->softw_rel, \ (SP)->file_number, (SP)->file_name, (SP)->rec_seq_loc_type_flag, (SP)->seq_number_loc, (SP)->seq_number_field_length, \ (SP)->rec_code_loc_type_flag, (SP)->rec_code_loc, (SP)->rec_code_field_length, (SP)->rec_len_loc_type_flag, \ (SP)->rec_len_loc, (SP)->rec_len_field_length, (SP)->reserved_4, (SP)->reserved_segment struct sarleader_fdr_fixseg { char A_E_flag[2]; /* 13 */ char blank_2[2]; /* 15 */ char for_con_doc[12]; /* 17 */ char for_con_doc_rev_level[2]; /* 29 */ char file_des_rev_level[2]; /* 31 */ char softw_rel[12]; /* 33 */ char file_number[4]; /* 45 */ char file_name[16]; /* 49 */ char rec_seq_loc_type_flag[4]; /* 65 */ char seq_number_loc[8]; /* 69 */ char seq_number_field_length[4]; /* 77 */ char rec_code_loc_type_flag[4]; /* 81 */ char rec_code_loc[8]; /* 85 */ char rec_code_field_length[4]; /* 93 */ char rec_len_loc_type_flag[4]; /* 97 */ char rec_len_loc[8]; /* 101 */ char rec_len_field_length[4]; /* 109 */ char reserved_4[4]; /* 113 */ char reserved_segment[64]; /* 117 */ }; #define SARLEADER_FDR_VARSEG_RCS \ "%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%" \ "6c%6c%6c%6c%6c%6c%60c%6c%6c%288c" #define SARLEADER_FDR_VARSEG_RVL(SP) \ (SP)->n_data_set_summ_rec, (SP)->data_set_summ_rec_len, (SP)->n_map_projec_rec, (SP)->map_projec_rec_len, \ (SP)->n_plat_pos_data_rec, (SP)->plat_pos_data_rec_len, (SP)->n_att_data_rec, (SP)->att_data_rec_len, \ (SP)->n_rad_data_rec, (SP)->rad_data_rec_len, (SP)->n_rad_comp_rec, (SP)->rad_comp_rec_len, (SP)->n_data_qua_summ_rec, \ (SP)->data_qua_summ_rec_len, (SP)->n_data_hist_rec, (SP)->data_hist_rec_len, (SP)->n_range_spectra_rec, \ (SP)->range_spectra_rec_len, (SP)->n_DEM_des_rec, (SP)->DEM_des_rec_len, (SP)->n_radar_par_update_rec, \ (SP)->radar_par_update_rec_len, (SP)->n_annotation_data_rec, (SP)->annotation_data_rec_len, (SP)->n_detailed_proc_rec, \ (SP)->detailed_proc_rec_len, (SP)->n_cal_rec, (SP)->cal_rec_len, (SP)->n_GCP_rec, (SP)->GCP_rec_len, (SP)->spare_60, \ (SP)->n_facility_data_rec, (SP)->facility_data_rec_len, (SP)->blanks_288 struct sarleader_fdr_varseg { char n_data_set_summ_rec[6]; /* 181-186 I6*/ char data_set_summ_rec_len[6]; /* 187-192 I6*/ char n_map_projec_rec[6]; /* 193-198 I6*/ char map_projec_rec_len[6]; /* 199-204 I6*/ char n_plat_pos_data_rec[6]; /* 205-210 I6*/ char plat_pos_data_rec_len[6]; /* 211-216 I6*/ char n_att_data_rec[6]; /* 217-222 I6*/ char att_data_rec_len[6]; /* 223-228 I6*/ char n_rad_data_rec[6]; /* 229-234 I6*/ char rad_data_rec_len[6]; /* 235-240 I6*/ char n_rad_comp_rec[6]; /* 241-246 I6*/ char rad_comp_rec_len[6]; /* 247-252 I6*/ char n_data_qua_summ_rec[6]; /* 253-258 I6*/ char data_qua_summ_rec_len[6]; /* 259-264 I6*/ char n_data_hist_rec[6]; /* 265-270 I6*/ char data_hist_rec_len[6]; /* 271-276 I6*/ char n_range_spectra_rec[6]; /* 277-282 I6*/ char range_spectra_rec_len[6]; /* 283-288 I6*/ char n_DEM_des_rec[6]; /* 289-294 I6*/ char DEM_des_rec_len[6]; /* 295-300 I6*/ char n_radar_par_update_rec[6]; /* 301-306 I6*/ char radar_par_update_rec_len[6]; /* 307-312 I6*/ char n_annotation_data_rec[6]; /* 313-318 I6*/ char annotation_data_rec_len[6]; /* 319-324 I6*/ char n_detailed_proc_rec[6]; /* 325-330 I6*/ char detailed_proc_rec_len[6]; /* 331-336 I6*/ char n_cal_rec[6]; /* 337-342 I6*/ char cal_rec_len[6]; /* 343-348 I6*/ char n_GCP_rec[6]; /* 349-354 I6*/ char GCP_rec_len[6]; /* 355-360 I6*/ char spare_60[60]; /* 361-420 I6*/ char n_facility_data_rec[6]; /* 421-426 I6*/ char facility_data_rec_len[6]; /* 427-432 I6*/ char blanks_288[288]; /* 433-720 A80*/ }; #define SARLEADER_FDR_FIXSEG_WCS \ "*********** SAR FDR FIXED SEGMENT ***********\n" \ "A_E_flag ==> %.2s\n" \ "blank_2 ==> %.2s\n" \ "for_con_doc ==> %.12s\n" \ "for_con_doc_rev_level ==> %.2s\n" \ "file_des_rev_level ==> %.2s\n" \ "softw_rel ==> %.12s\n" \ "file_number ==> %.4s\n" \ "file_name ==> %.16s\n" \ "rec_seq_loc_type_flag ==> %.4s\n" \ "seq_number_loc ==> %.8s\n" \ "seq_number_field_length ==> %.4s\n" \ "rec_code_loc_type_flag ==> %.4s\n" \ "rec_code_loc ==> %.8s\n" \ "rec_code_field_length ==> %.4s\n" \ "rec_len_loc_type_flag ==> %.4s\n" \ "rec_len_loc ==> %.8s\n" \ "rec_len_field_length ==> %.4s\n" \ "reserved_4 ==> %.4s\n" \ "reserved_segment ==> %.64s\n\n" #define SARLEADER_FDR_VARSEG_WCS \ "*********** SAR FDR VARIABLE SEG ***********\n" \ "n_data_set_summ_rec ==> %.6s\n" \ "data_set_summ_rec_len ==> %.6s\n" \ "n_map_projec_rec ==> %.6s\n" \ "map_projec_rec_len ==> %.6s\n" \ "n_plat_pos_data_rec ==> %.6s\n" \ "plat_pos_data_rec_len ==> %.6s\n" \ "n_att_data_rec ==> %.6s\n" \ "att_data_rec_len ==> %.6s\n" \ "n_rad_data_rec ==> %.6s\n" \ "rad_data_rec_len ==> %.6s\n" \ "n_rad_comp_rec ==> %.6s\n" \ "rad_comp_rec_len ==> %.6s\n" \ "n_data_qua_summ_rec ==> %.6s\n" \ "data_qua_summ_rec_len ==> %.6s\n" \ "n_data_hist_rec ==> %.6s\n" \ "data_hist_rec_len ==> %.6s\n" \ "n_range_spectra_rec ==> %.6s\n" \ "range_spectra_rec_len ==> %.6s\n" \ "n_DEM_des_rec ==> %.6s\n" \ "DEM_des_rec_len ==> %.6s\n" \ "n_radar_par_update_rec ==> %.6s\n" \ "radar_par_update_rec_len ==> %.6s\n" \ "n_annotation_data_rec ==> %.6s\n" \ "annotation_data_rec_len ==> %.6s\n" \ "n_detailed_proc_rec ==> %.6s\n" \ "detailed_proc_rec_len ==> %.6s\n" \ "n_cal_rec ==> %.6s\n" \ "cal_rec_len ==> %.6s\n" \ "n_GCP_rec ==> %.6s\n" \ "GCP_rec_len ==> %.6s\n" \ "spare_60 ==> %.60s\n" \ "n_facility_data_rec ==> %.6s\n" \ "facility_data_rec_len ==> %.6s\n" \ "blanks_288 ==> %.288s\n\n" #endif /* SARLEADER_FDR_H */ GMTSAR_V5.7/gmtsar/sbas.c000644 015705 000000 00000040075 13505462013 016137 0ustar00sandwellwheel000000 000000 /* $Id: sbas.h 39 2016-06-18 03/16/24 Xiaohua Xu $ */ /***************************************************************************************** * Program to do InSAR time-series analysis. * Use Small Baseline Subset (SBAS) *algorithm. * * * * Xiaohua Xu, Jul 2016 * * * * Taking the old sbas code to add atmospheric correction by means of common *point * stacking by Tymofeyeva & Fialko 2015. * * * ****************************************************************************************/ /***************************************************************************************** * Modification history: ** 07/25/2017 EXU Set num of iterations as a parameter * 07/22/2017 EXU Fixing *a few bugs, using only dates having atm screen for vel compute * 07/05/2017 *EXU Changing count of matrix to int64_t to avoid overflow * * 07/23/2016 EXU Decomposed the program into subroutines. * 08/02/2016 EXU *Start to build in the atmospheric correction Tymofyeyeva & Fialko 2015* * 09/01/2016 EXU Determing the number of iterations. * ****************************************************************************************/ /**************************************************************************************** * Creator: Xiaopeng Tong and David Sandwell ** (Scripps Institution of Oceanography) * Date: 12/23/2012 ** ****************************************************************************************/ /***************************************************************************************** * Modification history: ** 08/31/2013 debug the program ** 03/20/2014 add DEM error, mean velocity ** 03/22/2014 add correlation, use weighted least-squares ** 04/01/2014 add seasonal term ** 08/19/2014 allocate memory with 1D array instead of multiple malloc * * 08/19/2014 do not require the velocity curve go through origin * 08/19/2014 *remove seasonal term * * 08/19/2014 fix temporal smoothing * ****************************************************************************************/ /* Reference: P. Berardino, G. Fornaro, R. Lanari, and E. Sansosti, “A new algorithm for surface deformation monitoring based on small baseline differential SAR interferograms,” IEEE Trans. Geosci. Remote Sensing, vol. 40, pp. 2375–2383, Nov. 2002. Schmidt, D. A., and R. Bürgmann 2003, Time-dependent land uplift and subsidence in the Santa Clara valley, California, from a large interferometric synthetic aperture radar data set, J. Geophys. Res., 108, 2416, doi:10.1029/2002JB002267, B9. Tong, X. and Schmidt, D., 2016. Active movement of the Cascade landslide complex in Washington from a coherence-based InSAR time series method. Remote Sensing of Environment, 186, pp.405-415. Tymofyeyeva, E. and Fialko, Y., 2015. Mitigation of atmospheric phase delays in InSAR data, with application to the eastern California shear zone. Journal of Geophysical Research: Solid Earth, 120(8), pp.5952-5963. */ /* Use DGELSY to solve the equations */ /* Calling DGELSY using column-major order */ #include "sbas.h" #include "gmtsar.h" #include #define max(a, b) (((a) > (b)) ? (a) : (b)) #ifdef DEBUG #define checkpoint() printf("Checkpoint at line %lld in file %s\n", __LINE__, __FILE__) #else #define checkpoint() #endif char *USAGE = "USAGE: sbas intf.tab scene.tab N S xdim ydim [-atm ni] [-smooth sf] " "[-wavelength wl] [-incidence inc] [-range -rng] [-rms] [-dem]\n\n" " input: \n" " intf.tab -- list of unwrapped (filtered) interferograms:\n" " format: unwrap.grd corr.grd ref_id rep_id B_perp \n" " scene.tab -- list of the SAR scenes in chronological order\n" " format: scene_id number_of_days \n" " note: the number_of_days is relative to a reference date \n" " N -- number of the interferograms\n" " S -- number of the SAR scenes \n" " xdim and ydim -- dimension of the interferograms\n" " -smooth sf -- smoothing factors, default=0 \n" " -atm ni -- number of iterations for atmospheric " "correction, default=0(skip atm correction) \n" " -wavelength wl -- wavelength of the radar wave (m) default=0.236 " "\n" " -incidence theta -- incidence angle of the radar wave (degree) " "default=37 \n" " -range rng -- range distance from the radar to the center of " "the interferogram (m) default=866000 \n" " -rms -- output RMS of the data misfit grids (mm): " "rms.grd\n" " -dem -- output DEM error (m): dem.grd \n\n" " output: \n" " disp_##.grd -- cumulative displacement time series (mm) " "grids\n" " vel.grd -- mean velocity (mm/yr) grids \n\n" " example:\n" " sbas intf.tab scene.tab 88 28 700 1000 \n\n" "REFERENCES: \n" "Berardino P., G. Fornaro, R. Lanari, and E. Sansosti, “A new algorithm " "for surface deformation monitoring based on small baseline differential " "SAR interferograms,” IEEE Trans. Geosci. Remote Sensing, vol. 40, pp. " "2375–2383, Nov. 2002. \n\n" "Schmidt, D. A., and R. Bürgmann 2003, Time-dependent land uplift and " "subsidence in the Santa Clara valley, California, from a large " "interferometric synthetic aperture radar data set, J. Geophys. Res., 108, " "2416, doi:10.1029/2002JB002267, B9. \n\n" "Tong, X. and Schmidt, D., 2016. Active movement of the Cascade landslide " "complex in Washington from a coherence-based InSAR time series method. " "Remote Sensing of Environment, 186, pp.405-415. \n\n" "Tymofyeyeva, E. and Fialko, Y., 2015. Mitigation of atmospheric phase " "delays in InSAR data, with application to the eastern California shear " "zone. Journal of Geophysical Research: Solid Earth, 120(8), " "pp.5952-5963.\n\n" "Xu, X., Sandwell, D. T., Tymofyeyeva, E., González-Ortega, A., & Tong, X.\n" "(2017). Tectonic and anthropogenic deformation at the Cerro Prieto\n" "geothermal step-over revealed by Sentinel-1A InSAR. IEEE Transactions on\n" "Geoscience and Remote Sensing, 55(9), 5284-5292.\n\n"; int main(int argc, char **argv) { /* define variables */ double EE = 2.718281828459046; char **gfile = NULL, **cfile = NULL; int64_t i, j, m, n, nrhs = 1, xdim, lwork, ydim, k1, k2; int64_t N, S; int64_t ldb, lda, *flag = NULL, *jpvt = NULL, *H = NULL, *L = NULL, *hit = NULL, *mark = NULL; int64_t flag_rms = 0, flag_dem = 0; float *phi = NULL, *tmp_phi = NULL, sf, *disp = NULL, *res = NULL, *dem = NULL, *bperp = NULL, *vel = NULL, *screen = NULL, *tmp_screen = NULL; float *var = NULL; double *G = NULL, *A = NULL, *Gs = NULL, *d = NULL, *ds = NULL; double *work = NULL, *time = NULL; double rng, wl, theta, scale, aa, bb; FILE *infile = NULL, *datefile = NULL; void *API = NULL; /* GMT control structure */ struct GMT_GRID *Out = NULL; /* For the output grid */ double *atm_rms; int64_t *atm_rank, n_atm = 0, kk; float *sfs; if (argc < 7) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; /* default parameters are for ALOS-1 */ /* use range at the center of the image*/ rng = 866000; /* wavelength of the radar wave*/ wl = 0.236; /* incidence angle at the center of the image*/ theta = 37; /* smoothing factor */ sf = 0; /* reading in some parameters and open corresponding files */ if ((infile = fopen(argv[1], "r")) == NULL) die("Can't open file", argv[1]); if ((datefile = fopen(argv[2], "r")) == NULL) die("Can't open file", argv[2]); N = (int64_t)atoi(argv[3]); S = (int64_t)atoi(argv[4]); xdim = (int64_t)atoi(argv[5]); ydim = (int64_t)atoi(argv[6]); fprintf(stderr, "\n"); /* read in the parameters from command line */ parse_command_ts(argc, argv, &sf, &wl, &theta, &rng, &flag_rms, &flag_dem, &n_atm); /* setting up some parameters */ scale = 4.0 * M_PI / wl / rng / sin(theta / 180.0 * M_PI); m = N + S - 2; // number of rows in the G matrix n = S; // number of columns in the G matrix lwork = max(1, m * n + max(m * n, nrhs) * 16); lda = max(1, m); ldb = max(1, max(m, n)); /* memory allocation */ // also malloc for atm(nx,ny,S), hit(N,S), sum_vec(N) // and atm_rms(S) allocate_memory_ts(&jpvt, &work, &d, &ds, &bperp, &gfile, &cfile, &L, &time, &H, &G, &A, &Gs, &flag, &dem, &res, &vel, &phi, &var, &disp, n, m, lwork, ldb, N, S, xdim, ydim, &hit); // initialization init_array_ts(G, Gs, res, dem, disp, n, m, xdim, ydim, N, S); // reading in the table files read_table_data_ts(API, infile, datefile, gfile, cfile, H, bperp, flag, var, phi, S, N, xdim, ydim, &Out, L, time); printf("%.6f %.6f %.6f %.6f\n", sf, scale, time[0], bperp[0]); if (n_atm == 0) { atm_rms = (double *)malloc(S * sizeof(double)); for (i = 0; i < S; i++) atm_rms[i] = 0.0; init_G_ts(G, Gs, N, S, m, n, L, H, time, sf, bperp, scale); for (i = 0; i < m * n; i++) A[i] = G[i]; for (i = 0; i < xdim * ydim * S; i++) disp[i] = 0.0; lsqlin_sov_ts(xdim, ydim, disp, vel, flag, d, ds, time, G, Gs, A, var, phi, N, S, m, n, work, lwork, flag_dem, dem, flag_rms, res, jpvt, wl, atm_rms); } else { fprintf(stderr, "\n\nApplying atmospheric correction by common point stacking...\n\n"); mark = (int64_t *)malloc(N * sizeof(int64_t)); screen = (float *)malloc(xdim * ydim * sizeof(float) * S); tmp_phi = (float *)malloc(xdim * ydim * sizeof(float) * N); tmp_screen = (float *)malloc(xdim * ydim * sizeof(float)); atm_rms = (double *)malloc(S * sizeof(double)); atm_rank = (int64_t *)malloc(S * sizeof(int64_t)); sfs = (float *)malloc((n_atm + 2) * sizeof(float)); sfs[0] = 1000.0; sfs[n_atm] = sf; if (n_atm >= 2) { bb = (log(1000) - log(sf)) / (double)(n_atm); aa = pow(EE, log(sf) - bb); for (i = 1; i <= n_atm - 1; i++) sfs[n_atm - i] = aa * pow(EE, bb * (double)(i + 1)); } // get the hit matrix which records the pairs processed for (i = 0; i < S * S; i++) hit[i] = 0; fprintf(stderr, "\n\n\nHit Matrix:\n"); for (i = 0; i < N; i++) { for (j = 0; j < S; j++) { if (H[i * 2] == L[j]) k1 = j; if (H[i * 2 + 1] == L[j]) k2 = j; } hit[k1 * S + k2] = 1; } for (i = 0; i < S; i++) { fprintf(stderr, "%lld ", L[i]); for (j = 0; j < S; j++) { fprintf(stderr, "%lld ", hit[i * S + j]); } fprintf(stderr, "\n"); } fprintf(stderr, "\n"); fprintf(stderr, "\n"); // for debuging // example of connect // connect(L,H,time,hit,mark,N,S,10,0); // fprintf(stderr,"\n\n%lld ",L[10]); // for (i=0;i 1) for (i = 0; i < xdim * ydim * N; i++) tmp_phi[i] = phi[i]; fprintf(stderr, "Removing deformation time-series from original " "unwrapped phase...\n"); remove_ts(tmp_phi, disp, xdim, ydim, N, S, H, L); // compute atmospheric phase screen and the noise rms, 1st time, do not // update the phase during computation fprintf(stderr, "Computing atmospheric phase screen by common-point stacking...\n"); if (kk == 1) { fprintf(stderr, "Initial estimate of APS...\n"); for (i = 0; i < S; i++) { connect(L, H, time, hit, mark, N, S, i, 1); // compute atm with original interferograms sum_intfs(phi, mark, tmp_screen, xdim, ydim, N); atm_rms[i] = compute_noise(tmp_screen, xdim, ydim); for (j = 0; j < xdim * ydim; j++) screen[i * xdim * ydim + j] = tmp_screen[j]; // apply_screen(tmp_screen,phi,xdim,ydim,N,mark); } rank_double(atm_rms, atm_rank, S); for (i = 0; i < S; i++) fprintf(stderr, "atm_noise(NO.%lld) = %lf\n ", atm_rank[i], atm_rms[atm_rank[i]]); fprintf(stderr, "\n\n"); } // compute and apply aps and update as you go for (i = 0; i < S; i++) { connect(L, H, time, hit, mark, N, S, atm_rank[i], 1); sum_intfs(tmp_phi, mark, tmp_screen, xdim, ydim, N); atm_rms[atm_rank[i]] = compute_noise(tmp_screen, xdim, ydim); for (j = 0; j < xdim * ydim; j++) screen[atm_rank[i] * xdim * ydim + j] = tmp_screen[j]; connect(L, H, time, hit, mark, N, S, atm_rank[i], 0); apply_screen(tmp_screen, tmp_phi, xdim, ydim, N, mark); } rank_double(atm_rms, atm_rank, S); for (i = 0; i < S; i++) fprintf(stderr, "atm_noise(NO.%lld) = %lf\n ", atm_rank[i], atm_rms[atm_rank[i]]); fprintf(stderr, "\n\n"); // start agian with aps correction fprintf(stderr, "Applying atmospheric phase screen to original unwrapped phase...\n"); for (i = 0; i < xdim * ydim * N; i++) tmp_phi[i] = phi[i]; for (i = 0; i < S; i++) { connect(L, H, time, hit, mark, N, S, i, 0); for (j = 0; j < xdim * ydim; j++) tmp_screen[j] = screen[i * xdim * ydim + j]; apply_screen(tmp_screen, tmp_phi, xdim, ydim, N, mark); } } // lastly compute time-series sf = sfs[n_atm]; fprintf(stderr, "Setting smoothing parameter to %f...\n", sf); init_array_ts(G, Gs, res, dem, disp, n, m, xdim, ydim, N, S); init_G_ts(G, Gs, N, S, m, n, L, H, time, sf, bperp, scale); for (i = 0; i < m * n; i++) A[i] = G[i]; for (i = 0; i < xdim * ydim * S; i++) disp[i] = 0.0; lsqlin_sov_ts(xdim, ydim, disp, vel, flag, d, ds, time, G, Gs, A, var, tmp_phi, N, S, m, n, work, lwork, flag_dem, dem, flag_rms, res, jpvt, wl, atm_rms); } // write output write_output_ts(API, Out, argc, argv, xdim, ydim, S, flag_rms, flag_dem, disp, vel, res, dem, screen, wl, n_atm, L); /* free memory */ free_memory_ts(N, phi, var, gfile, cfile, disp, G, A, Gs, H, d, ds, L, res, vel, time, flag, bperp, dem, work, jpvt, hit); if (n_atm != 0) { free(mark); free(screen); free(tmp_screen); free(atm_rank); free(tmp_phi); free(atm_rms); } fclose(infile); fclose(datefile); if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/gmtsar/fitoffset.c000644 015705 000000 00000027041 13505462013 017176 0ustar00sandwellwheel000000 000000 #define _GNU_SOURCE #include "update_PRM.h" #include #include #include #include #include #include #include #include struct valuelist { double value1; double value2; double value3; double value4; double value5; struct valuelist *next; }; #ifndef MAX_PATH #define MAX_PATH 1024 #endif typedef struct valuelist VALUELIST; VALUELIST *vhead; int NPTS0; int load_freq_xcorr(char *freq_xcorr_file); char **str_split(char *a_str, const char a_delim); void replace_multi_space_with_single_space(char *str); int run_gmt_trend(char *file, int n_model_params, double *coefficient1, double *coefficient2, double *coefficient3); int run_gmt_gmtinfo(char *file, double *coefficient1, double *coefficient2, double *coefficient3, double *coefficient4); int file_exists(char *filename); int main(int argc, char **argv) { double SNR = 20.0; int rng_p = 0; int azi_p = 0; VALUELIST *vcurrent; char s_r_xyz[MAX_PATH] = ""; char s_a_xyz[MAX_PATH] = ""; FILE *r_xyz = NULL; FILE *a_xyz = NULL; int n_r_xyz = -1; int n_a_xyz = -1; int NPTS = 0; double n_coeff1_r = 0.0; double n_coeff2_r = 0.0; double n_coeff3_r = 0.0; double n_coeff1_a = 0.0; double n_coeff2_a = 0.0; double n_coeff3_a = 0.0; double n_range1 = 0.0; double n_range2 = 0.0; double n_range3 = 0.0; double n_range4 = 0.0; double rshift = 0.0; double ashift = 0.0; int int_rshift = 0; int int_ashift = 0; double sub_int_r = 0.0; double sub_int_a = 0.0; double stretch_r = 0.0; double a_stretch_r = 0.0; double stretch_a = 0.0; double a_stretch_a = 0.0; char tmpstring[MAX_PATH]; if (argc > 6 || argc == 1 || argv[1] == NULL || argv[2] == NULL || file_exists(argv[4]) == 0) { printf("Usage: fitoffset npar_rng npar_azi xcorr.dat prmfile.PRM [SNR]\n"); return 1; } if (argc == 5 && atof(argv[4]) != 0.0) SNR = atof(argv[4]); rng_p = atoi(argv[1]); azi_p = atoi(argv[2]); load_freq_xcorr(argv[3]); /* Open a temporary file for r.xyz */ strlcpy(s_r_xyz, "/tmp/r.xyz.XXXXXX", sizeof s_r_xyz); if ((n_r_xyz = mkstemp(s_r_xyz)) == -1 || (r_xyz = fdopen(n_r_xyz, "w+")) == NULL) { if (n_r_xyz != -1) { unlink(s_r_xyz); close(n_r_xyz); } fprintf(stderr, "%s: %s\n", s_r_xyz, strerror(errno)); return (0); } /* Open a temporary file for a.xyz */ strlcpy(s_a_xyz, "/tmp/a.xyz.XXXXXX", sizeof s_a_xyz); if ((n_a_xyz = mkstemp(s_a_xyz)) == -1 || (a_xyz = fdopen(n_a_xyz, "w+")) == NULL) { if (n_a_xyz != -1) { unlink(s_a_xyz); close(n_a_xyz); } fprintf(stderr, "%s: %s\n", s_a_xyz, strerror(errno)); return (0); } for (vcurrent = vhead; vcurrent; vcurrent = vcurrent->next) { if (vcurrent->value5 > SNR) { /* Write the values to r.xyz */ fprintf(r_xyz, "%.6f %.6f %.6f\n", vcurrent->value1, vcurrent->value3, vcurrent->value2); /* Increment NPTS by 1 for every line written */ NPTS++; } } for (vcurrent = vhead; vcurrent; vcurrent = vcurrent->next) { if (vcurrent->value5 > SNR) { /* Write the values to a.xyz */ fprintf(a_xyz, "%.6f %.6f %.6f\n", vcurrent->value1, vcurrent->value3, vcurrent->value4); } } if (NPTS < 8) { if (r_xyz) fclose(r_xyz); if (a_xyz) fclose(a_xyz); /* Remove the temporary files */ unlink(s_r_xyz); unlink(s_a_xyz); printf("FAILED - not enough points to estimate parameters\ntry using a " "lower SNR\nNPTS0 = %d NPTS = %d\n\n", NPTS0, NPTS); return 1; } fflush(r_xyz); fflush(a_xyz); /* Close any open files */ if (r_xyz) fclose(r_xyz); if (a_xyz) fclose(a_xyz); /* Run gmt to get coefficients */ run_gmt_trend(s_r_xyz, rng_p, &n_coeff1_r, &n_coeff2_r, &n_coeff3_r); run_gmt_trend(s_a_xyz, azi_p, &n_coeff1_a, &n_coeff2_a, &n_coeff3_a); /* run gmt gmtinfo to get range and azimuth coefficients */ run_gmt_gmtinfo(s_r_xyz, &n_range1, &n_range2, &n_range3, &n_range4); /* Calculate range and azimuth shifts */ rshift = n_coeff1_r - n_coeff2_r * (n_range2 + n_range1) / (n_range2 - n_range1) - n_coeff3_r * (n_range4 + n_range3) / (n_range4 - n_range3); ashift = n_coeff1_a - n_coeff2_a * (n_range2 + n_range1) / (n_range2 - n_range1) - n_coeff3_a * (n_range4 + n_range3) / (n_range4 - n_range3); /* Calculate range and azimuth stretches */ stretch_r = n_coeff2_r * 2.0 / (n_range2 - n_range1); a_stretch_r = n_coeff3_r * 2.0 / (n_range4 - n_range3); stretch_a = n_coeff2_a * 2.0 / (n_range2 - n_range1); a_stretch_a = n_coeff3_a * 2.0 / (n_range4 - n_range3); if (rshift >= 0) { int_rshift = trunc(rshift); sub_int_r = (rshift - (double)trunc(rshift)); } else { int_rshift = floor(rshift); sub_int_r = 1 + (rshift - (double)trunc(rshift)); } if (ashift >= 0) { int_ashift = trunc(ashift); sub_int_a = (ashift - (double)trunc(ashift)); } else { int_ashift = floor(ashift); sub_int_a = 1 + (ashift - (double)trunc(ashift)); } #ifdef DEBUG printf("s_r_xyz %s\n", s_r_xyz); printf("%d lines\n", NPTS0); printf("SNR = %.3f\n", SNR); printf("n_coeff1_r = %.6f n_coeff2_r = %.6f n_coeff3_r = %.6f\n", n_coeff1_r, n_coeff2_r, n_coeff3_r); printf("n_coeff1_r = %.6f n_coeff2_a = %.6f n_coeff3_a = %.6f\n", n_coeff1_a, n_coeff2_a, n_coeff3_a); printf("n_range1 = %.0f n_range2 = %.0f n_range3 = %.0f n_range4 = %.0f\n\n", n_range1, n_range2, n_range3, n_range4); printf("Range Shift = %.4f\n", rshift); printf("Azimuth Shift = %.4f\n", ashift); printf("rshift = %d\n", int_rshift); printf("sub_int_r = %.4f\n", sub_int_r); printf("stretch_r = %.9f\n", stretch_r); printf("a_stretch_r = %.9f\n", a_stretch_r); printf("ashift = %d\n", int_ashift); printf("sub_int_a = %.4f\n", sub_int_a); printf("stretch_a = %.9f\n", stretch_a); printf("a_stretch_a = %.9f\n", a_stretch_a); #endif /* Update rshift and associated params in PRM*/ sprintf(tmpstring, "%d", int_rshift); update_PRM_sub(argv[4], "rshift", tmpstring); sprintf(tmpstring, "%.4f", sub_int_r); update_PRM_sub(argv[4], "sub_int_r", tmpstring); sprintf(tmpstring, "%.9f", stretch_r); update_PRM_sub(argv[4], "stretch_r", tmpstring); sprintf(tmpstring, "%.9f", a_stretch_r); update_PRM_sub(argv[4], "a_stretch_r", tmpstring); /* Update ashift and associated params in PRM*/ sprintf(tmpstring, "%d", int_ashift); update_PRM_sub(argv[4], "ashift", tmpstring); sprintf(tmpstring, "%.4f", sub_int_a); update_PRM_sub(argv[4], "sub_int_a", tmpstring); sprintf(tmpstring, "%.9f", stretch_a); update_PRM_sub(argv[4], "stretch_a", tmpstring); sprintf(tmpstring, "%.9f", a_stretch_a); update_PRM_sub(argv[4], "a_stretch_a", tmpstring); /* Remove the temporary files */ unlink(s_r_xyz); unlink(s_a_xyz); printf("fitoffset:\nUpdated %s with offset parameters calculated from %s\n", argv[4], argv[3]); return 0; } int load_freq_xcorr(char *freq_xcorr_file) { FILE *fp; char *line = NULL; size_t len = 0; ssize_t read; VALUELIST *vcurrent; char **tokens; vhead = vcurrent = NULL; NPTS0 = 0; fp = fopen(freq_xcorr_file, "r"); if (fp == NULL) return EXIT_FAILURE; while ((read = getline(&line, &len, fp)) != -1) { NPTS0++; replace_multi_space_with_single_space(line); VALUELIST *vnode = malloc(sizeof(VALUELIST)); tokens = str_split(trimwhitespace(line), ' '); if (tokens) { for (int i = 0; *(tokens + i); i++) { switch (i) { case 0: vnode->value1 = atof(*(tokens + i)); break; case 1: vnode->value2 = atof(*(tokens + i)); break; case 2: vnode->value3 = atof(*(tokens + i)); break; case 3: vnode->value4 = atof(*(tokens + i)); break; case 4: vnode->value5 = atof(*(tokens + i)); break; } free(*(tokens + i)); } free(tokens); } if (vhead == NULL) { vcurrent = vhead = vnode; } else { vcurrent = vcurrent->next = vnode; } } // need free for each node if (fp) fclose(fp); return EXIT_SUCCESS; } char **str_split(char *a_str, const char a_delim) { char **result = 0; size_t count = 0; char *tmp = a_str; char *last_comma = 0; char delim[2]; delim[0] = a_delim; delim[1] = 0; /* Count how many elements will be extracted. */ while (*tmp) { if (a_delim == *tmp) { count++; last_comma = tmp; } tmp++; } /* Add space for trailing token. */ count += last_comma < (a_str + strlen(a_str) - 1); /* Add space for terminating null string so caller knows where the list of returned strings ends. */ count++; result = malloc(sizeof(char *) * count); if (result) { size_t idx = 0; char *token = strtok(a_str, delim); while (token) { assert(idx < count); *(result + idx++) = strdup(token); token = strtok(0, delim); } assert(idx == count - 1); *(result + idx) = 0; } return result; } void replace_multi_space_with_single_space(char *str) { char *dest = str; /* Destination to copy to */ /* While we're not at the end of the string, loop... */ while (*str != '\0') { /* Loop while the current character is a space, AND the next * character is a space */ while (*str == ' ' && *(str + 1) == ' ') str++; /* Just skip to next character */ /* Copy from the "source" string to the "destination" string, * while advancing to the next character in both */ *dest++ = *str++; } /* Make sure the string is properly terminated */ *dest = '\0'; } /* Run gmt trend2d and collect the parameters */ int run_gmt_trend(char *file, int n_model_params, double *coefficient1, double *coefficient2, double *coefficient3) { char cmd_line[MAX_PATH] = "gmt trend2d /tmp/r.xyz.ZBbxXu -Fxyz -N\"2\"r -V > /dev/null"; // char buffer[1000]; FILE *pipe; // int len; size_t glen; ssize_t read; // FILE *fp; char *line = NULL; char strfound[] = "trend2d: Model Coefficients:"; char **tokens; sprintf(cmd_line, "gmt trend2d %s -Fxyz -N\"%d\"r -V 2>&1", file, n_model_params); pipe = popen(cmd_line, "r"); if (NULL == pipe) { perror("pipe"); return 1; } while ((read = getline(&line, &glen, pipe)) != -1) { if (strncmp(strfound, line, 28) == 0) { for (int i = 0; i < strlen(line); i++) { if (line[i] == '\t') line[i] = ' '; } tokens = str_split(trimwhitespace(line), ' '); if (tokens) { for (int i = 0; *(tokens + i); i++) { switch (i) { case 3: *coefficient1 = atof(*(tokens + i)); break; case 4: *coefficient2 = atof(*(tokens + i)); break; case 5: *coefficient3 = atof(*(tokens + i)); break; } free(*(tokens + i)); } free(tokens); } } } pclose(pipe); return 0; } /* Run gmt gmtinfo and collect the parameters */ int run_gmt_gmtinfo(char *file, double *coefficient1, double *coefficient2, double *coefficient3, double *coefficient4) { char cmd_line[MAX_PATH] = ""; // char buffer[1000]; FILE *pipe; // int len; size_t glen; ssize_t read; // FILE *fp; char *line = NULL; char **tokens; sprintf(cmd_line, "gmt gmtinfo %s -C 2>&1", file); pipe = popen(cmd_line, "r"); if (NULL == pipe) { perror("pipe"); return 1; } while ((read = getline(&line, &glen, pipe)) != -1) { for (int i = 0; i < strlen(line); i++) { if (line[i] == '\t') line[i] = ' '; } tokens = str_split(trimwhitespace(line), ' '); if (tokens) { for (int i = 0; *(tokens + i); i++) { switch (i) { case 0: *coefficient1 = atof(*(tokens + i)); break; case 1: *coefficient2 = atof(*(tokens + i)); break; case 2: *coefficient3 = atof(*(tokens + i)); break; case 3: *coefficient4 = atof(*(tokens + i)); break; } free(*(tokens + i)); } free(tokens); } } pclose(pipe); return 0; } int file_exists(char *filename) { FILE *file = NULL; file = fopen(filename, "r"); if (file != NULL) { fclose(file); return 1; } return 0; } GMTSAR_V5.7/gmtsar/utils_complex.c000644 015705 000000 00000003405 13505462013 020072 0ustar00sandwellwheel000000 000000 /* $Id: utils_complex.c 39 2013-04-07 00:49:34Z pwessel $ */ #include "gmtsar.h" #include "lib_functions.h" /*--------------------------------------------------------------*/ /* read i2 SLC complex data */ /* SLCfile - SLC file */ /* name - name of SLC_file */ /* sdata - input i2 data */ /* cdata - output complex data (float) */ /* xdim - length of row */ /* */ int read_SLC_short2float(FILE *SLCfile, char *name, short *sdata, fcomplex *cdata, int xdim, int psize, double dfact) { long k; if (fread(sdata, 2 * sizeof(short), psize * xdim, SLCfile) != (size_t)(psize * xdim)) die("error reading SLC file", name); for (k = 0; k < psize * xdim; k++) { if (sdata[2 * k] == 0 && sdata[2 * k + 1] == 0) sdata[2 * k] = 1; cdata[k].r = (float)dfact * sdata[2 * k]; cdata[k].i = (float)dfact * sdata[2 * k + 1]; } return (EXIT_SUCCESS); } /*---------------------------------------------------------------*/ /*--------------------------------------------------------------*/ /* read i2 SLC complex data */ /* SLCfile - SLC file */ /* name - name of SLC_file */ /* sdata - input i2 data */ /* cdata - output complex data (double) */ /* xdim - length of row */ /* */ int read_SLC_short2double(FILE *SLCfile, char *name, short *sdata, dcomplex *cdata, int xdim, int psize, double dfact) { long k; if (fread(sdata, 2 * sizeof(short), psize * xdim, SLCfile) != (size_t)(psize * xdim)) die("error reading SLC file", name); for (k = 0; k < psize * xdim; k++) { if (sdata[2 * k] == 0 && sdata[2 * k + 1] == 0) sdata[2 * k] = 1; cdata[k].r = (double)dfact * sdata[2 * k]; cdata[k].i = (double)dfact * sdata[2 * k + 1]; } return (EXIT_SUCCESS); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/get_params.c000644 015705 000000 00000014644 13505462013 017334 0ustar00sandwellwheel000000 000000 /************************************************************************ * get_params retrieves parameters from the esar parameter file. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History: * 04/21/97 Added sc_clock_start, sc_stop_clock and *sc_identity * 06/12/00 Added icu_start * 04/26/06 Added nrows, *num_lines * 06/09/07 Added *orbdir,rcc,raa,bpara,bperp * 08/01/07 Addes rshift *and ashift to be compatible with Mellors code * 07/10/08 Added height0 and *heightf to make phase continuous * 09/19/08 Added TEC_start and *TEC_end to account for ionosphere * Date ** ************************************************************************/ #include "soi.h" #include #include #define BUFSIZE 80 char *p2strcpy(char strng[]) { char *charptr; if ((charptr = (void *)malloc(strlen(strng) + 1)) != NULL) strcpy(charptr, strng); return (charptr); } void get_params(FILE *fh) { char variable[BUFSIZE], value[BUFSIZE]; while (fscanf(fh, "%s = %s \n", variable, value) != EOF) { if (strcmp(variable, "input_file") == 0) input_file = p2strcpy(value); if (strcmp(variable, "led_file") == 0) led_file = p2strcpy(value); if (strcmp(variable, "out_amp_file") == 0) out_amp_file = p2strcpy(value); if (strcmp(variable, "out_data_file") == 0) out_data_file = p2strcpy(value); if (strcmp(variable, "bytes_per_line") == 0) bytes_per_line = atoi(value); if (strcmp(variable, "good_bytes_per_line") == 0) good_bytes = atoi(value); if (strcmp(variable, "first_line") == 0) first_line = atoi(value); if (strcmp(variable, "num_patches") == 0) num_patches = atoi(value); if (strcmp(variable, "first_sample") == 0) first_sample = atoi(value); if (strcmp(variable, "num_valid_az") == 0) num_valid_az = atoi(value); if (strcmp(variable, "icu_start") == 0) icu_start = atof(value); if (strcmp(variable, "SC_clock_start") == 0) SC_clock_start = atof(value); if (strcmp(variable, "SC_clock_stop") == 0) SC_clock_stop = atof(value); if (strcmp(variable, "SC_identity") == 0) SC_identity = atoi(value); if (strcmp(variable, "clock_start") == 0) clock_start = atof(value); if (strcmp(variable, "clock_stop") == 0) clock_stop = atof(value); if (strcmp(variable, "ref_identity") == 0) ref_identity = atoi(value); if (strcmp(variable, "deskew") == 0) deskew = p2strcpy(value); if (strcmp(variable, "caltone") == 0) caltone = atof(value); if (strcmp(variable, "st_rng_bin") == 0) st_rng_bin = atoi(value); if (strcmp(variable, "num_rng_bins") == 0) num_rng_bins = atoi(value); if (strcmp(variable, "earth_radius") == 0) RE = atof(value); if (strcmp(variable, "SC_vel") == 0) vel1 = atof(value); if (strcmp(variable, "SC_height") == 0) ht1 = atof(value); if (strcmp(variable, "near_range") == 0) near_range = atof(value); if (strcmp(variable, "PRF") == 0) prf1 = atof(value); if (strcmp(variable, "I_mean") == 0) xmi1 = atof(value); if (strcmp(variable, "Q_mean") == 0) xmq1 = atof(value); if (strcmp(variable, "Flip_iq") == 0) iqflip = p2strcpy(value); if (strcmp(variable, "offset_video") == 0) off_vid = p2strcpy(value); if (strcmp(variable, "az_res") == 0) az_res = atof(value); if (strcmp(variable, "nlooks") == 0) nlooks = atoi(value); if (strcmp(variable, "rng_samp_rate") == 0) fs = atof(value); if (strcmp(variable, "chirp_slope") == 0) slope = atof(value); if (strcmp(variable, "pulse_dur") == 0) pulsedur = atof(value); if (strcmp(variable, "chirp_ext") == 0) nextend = atoi(value); if (strcmp(variable, "scnd_rng_mig") == 0) srm = p2strcpy(value); if (strcmp(variable, "radar_wavelength") == 0) lambda = atof(value); if (strcmp(variable, "rng_spec_wgt") == 0) rhww = atof(value); if (strcmp(variable, "rm_rng_band") == 0) pctbw = atof(value); if (strcmp(variable, "rm_az_band") == 0) pctbwaz = atof(value); if (strcmp(variable, "fd1") == 0) fd1 = atof(value); if (strcmp(variable, "fdd1") == 0) fdd1 = atof(value); if (strcmp(variable, "fddd1") == 0) fddd1 = atof(value); if (strcmp(variable, "rshift") == 0) xshift = atoi(value); if (strcmp(variable, "ashift") == 0) yshift = atoi(value); if (strcmp(variable, "xshift") == 0) xshift = atoi(value); if (strcmp(variable, "yshift") == 0) yshift = atoi(value); if (strcmp(variable, "sub_int_r") == 0) sub_int_r = atof(value); if (strcmp(variable, "sub_int_a") == 0) sub_int_a = atof(value); if (strcmp(variable, "stretch_r") == 0) stretch_r = atof(value); if (strcmp(variable, "stretch_a") == 0) stretch_a = atof(value); if (strcmp(variable, "a_stretch_r") == 0) a_stretch_r = atof(value); if (strcmp(variable, "a_stretch_a") == 0) a_stretch_a = atof(value); if (strcmp(variable, "baseline_start") == 0) baseline_start = atof(value); if (strcmp(variable, "alpha_start") == 0) alpha_start = atof(value); if (strcmp(variable, "baseline_end") == 0) baseline_end = atof(value); if (strcmp(variable, "alpha_end") == 0) alpha_end = atof(value); if (strcmp(variable, "reference_file") == 0) ref_file = p2strcpy(value); if (strcmp(variable, "nrows") == 0) nrows = atoi(value); if (strcmp(variable, "num_lines") == 0) num_lines = atoi(value); /* new parameters added June 9, 2007 */ if (strcmp(variable, "orbdir") == 0) orbdir = p2strcpy(value); if (strcmp(variable, "lookdir") == 0) lookdir = p2strcpy(value); if (strcmp(variable, "equatorial_radius") == 0) raa = atof(value); if (strcmp(variable, "polar_radius") == 0) rcc = atof(value); if (strcmp(variable, "B_parallel") == 0) bparaa = atof(value); if (strcmp(variable, "B_perpendicular") == 0) bperpp = atof(value); /* new parameters added July 11, 2008 */ if (strcmp(variable, "SC_height_start") == 0) ht0 = atof(value); if (strcmp(variable, "SC_height_end") == 0) htf = atof(value); /* new parameters added September 18, 2008 */ if (strcmp(variable, "TEC_start") == 0) TEC_start = atof(value); if (strcmp(variable, "TEC_end") == 0) TEC_end = atof(value); } } GMTSAR_V5.7/gmtsar/llt2rat.h000644 015705 000000 00000000760 13505462013 016575 0ustar00sandwellwheel000000 000000 #ifndef LLT2RAT_H #define LLT2RAT_H struct GCP { float lon; float lat; float range; float azimuth; }; struct orbit_coor { double x; double y; double z; double t; }; struct orbit { double t1; double t2; double ts; double fll; double dr; int nrec; int npad; int xoff; int yoff; struct orbit_coor *coor; }; struct topo { int nx; int ny; long n; double xmin; double ymin; double xinc; double yinc; float *data; float *lat; float *lon; int K; }; #endif /* LLT2RAT_H */ GMTSAR_V5.7/gmtsar/rmpatch.c000644 015705 000000 00000011210 13505462013 016632 0ustar00sandwellwheel000000 000000 /************************************************************************ * rmpatch performs range migration on range compressed radar echos. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * 24MAR2000 - modified to handle the range stretch with abs. azimuth * * * * * ************************************************************************/ #include "lib_functions.h" #include "siocomplex.h" #include "soi.h" void rmpatch(fcomplex **data, int nrows, double delr, double fd, double fdd, double fddd) { int *nvtmp; int na, i, j, ifrac, n, k, nfilter = 8192, ideskew; static int firsttime = 1; float *f0, *f_rate, *bdel, *vtmp; static float xintp[73728]; float frac, ratio, freq; float c_xintp[8]; double *r, *rd0, dx, v1, tmpd; fcomplex c_ctmpb[8], tmp[8], *c_ctmpa; /* initializations */ if ((strcmp(deskew, "y") == 0) || (strcmp(deskew, "Y") == 0)) { ideskew = 1; } else { ideskew = 0; } if ((nvtmp = (int *)malloc(num_rng_bins * sizeof(int))) == NULL) { printf("Sorry, can't allocate memory for nvtmp.\n"); exit(-1); } if ((rd0 = (double *)malloc(num_rng_bins * sizeof(double))) == NULL) { printf("Sorry, can't allocate memory for rd0.\n"); exit(-1); } if ((f0 = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("Sorry, can't allocate memory for f0.\n"); exit(-1); } if ((f_rate = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("Sorry, can't allocate memory for f_rate.\n"); exit(-1); } if ((bdel = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("Sorry, can't allocate memory for bdel.\n"); exit(-1); } if ((vtmp = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("Sorry, can't allocate memory for vtmp.\n"); exit(-1); } if ((r = (double *)malloc(num_rng_bins * sizeof(double))) == NULL) { printf("Sorry, can't allocate memory for r.\n"); exit(-1); } if ((c_ctmpa = (fcomplex *)malloc(num_rng_bins * sizeof(fcomplex))) == NULL) { printf("Sorry, can't allocate memory for rd0.\n"); exit(-1); } /* load the interpolation array */ /* convert r resampling coefficients to a function of range instead of pixel */ if (firsttime == 1) { intp_coef(nfilter, xintp); sub_int_r = sub_int_r - stretch_r * near_range / delr; stretch_r = stretch_r / delr; firsttime = 0; } dx = vel1 / prf1; v1 = pow(lambda, 2.0) / (8.0 * pow(dx, 2.0)); for (i = 0; i < num_rng_bins; i++) { r[i] = near_range + i * delr; f0[i] = fd + fdd * r[i] + fddd * r[i] * r[i]; rd0[i] = r[i] / (1 + v1 * pow((f0[i] / prf1), 2.0)); f_rate[i] = -2.0 * pow(vel1, 2.0) * pow((rd0[i] / r[i]), 2.0) / (lambda * r[i]); bdel[i] = stretch_r * r[i] + sub_int_r; } for (na = 0; na < nrows; na++) { /* get the interpolation amounts for a given azimuth pixel na as f(line) */ freq = ((float)na) / ((float)nrows) * prf1; for (i = 0; i < num_rng_bins; i++) { /* frequencies must be within 0.5*prf of centroid */ ratio = (freq - f0[i]) / prf1; n = (int)(ratio + 0.5); freq = freq - n * prf1; /* range of a pixel at freq f, bdel is range correction for * interferogram */ if (ideskew == 1) { tmpd = bdel[i] + ((r[i] - (lambda / 4.0) * pow(f0[i], 2.0) / f_rate[i]) - r[0]) / delr + rd0[i] * (v1 / delr) * (pow(freq, 2.0) - pow(f0[i], 2.0)) / pow(prf1, 2.0); } else { tmpd = i + rd0[i] * (v1 / delr) * (pow(freq, 2.0) - pow(f0[i], 2.0)) / pow(prf1, 2.0) + bdel[i]; } nvtmp[i] = (int)tmpd; vtmp[i] = tmpd - nvtmp[i]; } /* interpolate that line according to coeffs determined above */ for (i = 0; i < num_rng_bins; i++) { c_ctmpa[i].r = 0.0; c_ctmpa[i].i = 0.0; if ((nvtmp[i] >= 3) && (nvtmp[i] < (num_rng_bins - 5))) { frac = vtmp[i]; ifrac = 8 * ((int)(frac * ((float)nfilter) + 0.5)); for (k = 0; k < 8; k++) { c_xintp[k] = xintp[ifrac + k]; c_ctmpb[k] = data[na][nvtmp[i] - 2 + k]; } for (j = 0; j < 8; j++) { tmp[j] = RCmul(c_xintp[j], c_ctmpb[j]); } for (j = 0; j < 8; j++) { c_ctmpa[i] = Cadd(c_ctmpa[i], tmp[j]); } } } for (i = 0; i < num_rng_bins; i++) { data[na][i] = c_ctmpa[i]; } } free((char *)nvtmp); free((char *)f0); free((char *)rd0); free((char *)f_rate); free((char *)bdel); free((char *)vtmp); free((char *)r); free((char *)c_ctmpa); } GMTSAR_V5.7/gmtsar/spline.c000644 015705 000000 00000012710 13505462013 016474 0ustar00sandwellwheel000000 000000 #include #include /* February 11, 2010 converted from fortran routines spline.f providrd by Bob Parker the conversion was first performed using f2c. Then Rob Mellors made some changes to eliminate the f2c.h file so the code has no dependencies. David Sandwell tested the cod against the fortran version and the differences were al the level of the machine precision except when the interpolated point is outside the bounds of the unput data. In this case the fortran code and C-code diverge. THis is not yet understood. */ /* comments from original fortran code follow Finds array s for spline interpolator eval. Based on an alogorithm by Richard F. Thompson in 'Spline interpolation on a digital computer' (x-692-70-261) 1970 Goddard Space Flight Center. Note these splines are not 'natural' since the 2nd derivative is not zero x(1) and x(n). nn number of data points supplied (may be negative, see below) x array of x-coordinates where function is sampled. The sequence xx(1),xx(2)... must be a strictly increasing sequence. THIS IS NOT CHECKED by spline. u array of sample values that are to be interpolated. s output array of 2nd derivative at sample points. a working space array of dimension at least nn. If the user wishes derivatives at the ends of series to assume specified values, du(1)/dx, du(nn)/dx must be placed in s1, s2 and in the call nn=-number of terms in series. Normally a parabola is fitted through the 1st and last 3 points to find the slopes. If 2 points are supplied, a straight lines is fitted. If 3 points are supplied, a parabola is fitted. At evaluation time, straight-line extrapolation is provided outside the interval (x(1), x(n)). */ /*------------------------------------------------------------*/ int spline_(int *istart, int *nn, double *x, double *u, double *s, double *a) { int n, n1, i1, i, j; double r1, r2, r3, r4, r5, r6; double q1, qn, c; /* decrease arrays so that the fortran indexing works */ --a; --s; --u; --x; *istart = 0; n = abs(*nn); if (n <= 2) { s[1] = 0.0; s[2] = 0.0; return (0); } r1 = u[2] - u[1]; r2 = x[2] - x[1]; r3 = u[3] - u[1]; r4 = x[3] - x[1]; r5 = r2; r6 = r4; q1 = (r1 / (r5 * r5) - r3 / (r6 * r6)) / (1.0 / r2 - 1.0 / r4); r1 = u[n - 1] - u[n]; r2 = x[n - 1] - x[n]; r3 = u[n - 2] - u[n]; r4 = x[n - 2] - x[n]; r5 = r2; r6 = r4; qn = (r1 / (r5 * r5) - r3 / (r6 * r6)) / (1.0 / r2 - 1.0 / r4); if (n == 3) { s[1] = (qn - q1) / (x[3] - x[1]); s[2] = s[1]; s[3] = s[1]; return (0); } if (*nn <= 0) { q1 = s[1]; qn = s[2]; } s[1] = ((u[2] - u[1]) / (x[2] - x[1]) - q1) * 6.0; n1 = n - 1; i1 = n1; for (i = 2; i <= i1; ++i) { s[i] = (u[i - 1] / (x[i] - x[i - 1]) - u[i] * (1.0 / (x[i] - x[i - 1]) + 1.0 / (x[i + 1] - x[i])) + u[i + 1] / (x[i + 1] - x[i])) * 6.0; } s[n] = (qn + (u[n1] - u[n]) / (x[n] - x[n1])) * 6.0; a[1] = (x[2] - x[1]) * 2.f; a[2] = (x[2] - x[1]) * 1.5 + (x[3] - x[2]) * 2.0; s[2] -= s[1] * 0.5; i1 = n1; for (i = 3; i <= i1; ++i) { c = (x[i] - x[i - 1]) / a[i - 1]; a[i] = (x[i + 1] - x[i - 1]) * 2.f - c * (x[i] - x[i - 1]); s[i] -= c * s[i - 1]; } c = (x[n] - x[n1]) / a[n1]; a[n] = (2.f - c) * (x[n] - x[n1]); s[n] -= c * s[n1]; s[n] /= a[n]; i1 = n1; for (j = 1; j <= i1; ++j) { i = n - j; s[i] = (s[i] - (x[i + 1] - x[i]) * s[i + 1]) / a[i]; } return (EXIT_SUCCESS); } /*------------------------------------------------------------*/ /* comments from original fortran code follow Performs cubic spline interpolation of a function sampled unequally in x. The routine spline must be called once before eval is used, to set up the array s. See comments in spline. y the coordinate at which function value is desired. nn number of samples of original function. x array of sample coordinates. The sequence x(1),x(2).....x(nn) must be strictly increasing. THIS IS NOT CHECKED! u array of samples of function at the coordinates x(1),x(2)... s array of 2nd derivatives at sample points. Found by spline which must be called once before beginning interpolation. If y falls outside (x(1), x(nn)) extrapolation is based upon the tangent straight line at the endpoint.a */ int evals_(int *istart, double *y, int *nn, double *x, double *u, double *s, double *eval) { int n, l0 = 0, l1, i1; double h, r1, h6, xi; --s; --u; --x; n = abs(*nn); if (*istart > n || *istart < 1) { *istart = (n - 1) * (*y - x[1]) / (x[n] - x[1]) + 1; } if (*y <= x[1]) { goto L3000; } if (*y >= x[n]) { goto L3100; } if (*y < x[*istart]) { goto L1200; } i1 = n; for (l1 = *istart; l1 <= i1; ++l1) { if (x[l1] > *y) { goto L1150; } } L1150: l0 = l1 - 1; goto L1500; L1200: i1 = *istart; for (l1 = 1; l1 <= i1; ++l1) { l0 = *istart - l1; if (x[l0] <= *y) { goto L1350; } } L1350: l1 = l0 + 1; L1500: *istart = l0; xi = (*y - x[l0]) / (x[l1] - x[l0]); r1 = x[l1] - x[l0]; h6 = r1 * r1 / 6.f; *eval = u[l0] + xi * (u[l1] - u[l0] - h6 * (1.0 - xi) * (s[l1] * (xi + 1.f) + s[l0] * (2.0 - xi))); return 0; L3000: h = x[2] - x[1]; *eval = u[1] + (*y - x[1]) * ((u[2] - u[1]) / h - h * (s[2] - s[1] * 2.0) / 6.0); return 0; L3100: h = x[n] - x[n - 1]; *eval = u[n] + (*y - x[n]) * ((u[n] - u[n - 1]) / h + h * (s[n] * 2.0 - s[n - 1]) / 6.0); return (EXIT_SUCCESS); } /*------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/orbit.h000644 015705 000000 00000001201 13505462013 016317 0ustar00sandwellwheel000000 000000 /* orbit.h */ /* structure to hold orbit and attitude */ #define NA 64 /* number of altitude data points */ #define HDR 1 /* orbit information from header */ #define ODR 2 /* orbit information from Delft */ #define DOR 3 /* orbit information from Doris */ struct ORB_XYZ { double pt; double px; double py; double pz; double vx; double vy; double vz; }; struct SAT_ORB { int itype; int nd; int iy; int id; double sec; double dsec; double pt0; struct ORB_XYZ *points; }; struct SAT_ATT { int na; int id[NA]; int msec[NA]; double ap[NA]; double ar[NA]; double ay[NA]; double dp[NA]; double dr[NA]; double dy[NA]; }; GMTSAR_V5.7/gmtsar/calc_dop_orb.c000644 015705 000000 00000005541 13505462013 017614 0ustar00sandwellwheel000000 000000 /* $Id$ */ /******************************************************************************* * Load the PRM file and calculate doppler centroid * *******************************************************************************/ #include "gmtsar.h" #include "orbit.h" void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void ldr_orbit(struct SAT_ORB *, struct PRM *); void calc_dop(struct PRM *); int main(int argc, char **argv) { struct PRM *prm; struct SAT_ORB *orb; FILE *prmfile, *ldrfile, *outfile; double re; if ((argc > 5) || (argc < 4)) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: calc_dop_orb file.PRM added.PRM earth_radius " "[doppler_centroid]\n"); fprintf(stderr, " file.PRM - input name of PRM file \n"); fprintf(stderr, " new.PRM - output additional parameters to add to " "the PRM file \n"); fprintf(stderr, " earth_radius - input set earth radius, 0 calculates radius \n"); fprintf(stderr, " [doppler_centroid] - no parameter calculates doppler \n"); fprintf(stderr, " [doppler_centroid] - use value (e.g. 0.0) to force doppler \n"); fprintf(stderr, "\n"); return (0); } if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); fprintf(stderr, "Successfully opened %s \n", argv[1]); prm = malloc(sizeof(struct PRM)); /* read earth radius */ re = atof(argv[3]); /* get the PRM parameters */ get_sio_struct(prmfile, prm); /*fprintf(stderr,"%lf", prm->near_range);*/ /* get the orbit data */ ldrfile = fopen(prm->led_file, "r"); if (ldrfile == NULL) die("can't open ", prm->led_file); orb = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); read_orb(ldrfile, prm, orb); /* get the orbit parameters */ ldr_orbit(orb, prm); /* write it all out */ if ((outfile = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); fprintf(outfile, "SC_vel = %lf \n", prm->vel); if (re == 0) { fprintf(outfile, "earth_radius = %lf \n", prm->RE); fprintf(outfile, "SC_height = %lf \n", prm->ht); fprintf(outfile, "SC_height_start = %lf \n", prm->ht_start); fprintf(outfile, "SC_height_end = %lf \n", prm->ht_end); } else if (re > 0) { fprintf(outfile, "earth_radius = %lf \n", re); fprintf(outfile, "SC_height = %lf \n", prm->ht + prm->RE - re); fprintf(outfile, "SC_height_start = %lf \n", prm->ht_start + prm->RE - re); fprintf(outfile, "SC_height_end = %lf \n", prm->ht_end + prm->RE - re); } else die("Wrong input earth radius", argv[3]); /* Calculate doppler centroid */ if (argc == 4) { calc_dop(prm); fprintf(outfile, "fd1 = %lf\n", prm->fd1); } if (argc == 5) fprintf(outfile, "fd1 = %lf\n", atof(argv[4])); fclose(prmfile); fclose(ldrfile); fclose(outfile); exit(0); } GMTSAR_V5.7/gmtsar/update_PRM.c000644 015705 000000 00000001572 13505462013 017206 0ustar00sandwellwheel000000 000000 /* $Id$ */ /******************************************************************************* * Update a parameter in the PRM file and write it out. * * Replaces update_PRM.csh with more robust C-code * * Uses routines written by Anders Hogrelius. * *******************************************************************************/ /******************************************************************************** * Creator: David Sandwell, July 27, 2018 * * * Date : 06/07/2007 * ********************************************************************************/ #include "update_PRM.h" #include "gmtsar.h" char *USAGE = "\nUsage: update_PRM file.PRM parameter value \n"; int main(int argc, char **argv) { if (argc < 3) die(USAGE, ""); update_PRM_sub(argv[1], argv[2], argv[3]); } GMTSAR_V5.7/gmtsar/fft_bins.c000644 015705 000000 00000001620 13505462013 016772 0ustar00sandwellwheel000000 000000 /************************************************************************ * fft_bins calculates the appropriate number of elements in an fft * * vector corresponding to the number of elements in an array. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History: * * * * Date * ************************************************************************/ int fft_bins(int num) { int ranfft = 2; while (num > ranfft / 2) { if (num < ranfft) { return (ranfft); } ranfft = ranfft * 2; } return (ranfft); } GMTSAR_V5.7/gmtsar/phasediff_get_topo_phase.c000644 015705 000000 00000052516 13505462013 022223 0ustar00sandwellwheel000000 000000 /* $Id: phasediff.c 109 2015-01-19 23:01:24Z sandwell $ */ /*************************************************************************** * phasediff reads two complex SAR_SLC images and computes the phase * * difference of the images removing the effects of the curved earth * * and optionally the topography. Orbit information is provided in the * * second PRM-file. * * The baseline changes linearly between the start and end of the image. * * This linear baseline model is appropriate for a single frame but higher * * order terms are needed for long swaths of data. * * Model phase can also be removed as an option. * * The images should be matched to a level that will * * produce interference fringes and must be the same size. * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Evelyn J. Price * * (Scripps Institution of Oceanography) * * Date : 7/7/95 * * Rewritten: Rob Mellors (San Diego State University) * * Date : 11/7/09 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 11/18/96 Changed sign of earth flattening phase to fit with signs * * of baseline estimates. * * 11/18/96 Changed to read GIPS headers to gather parameters. * * 11/21/96 Changed to update baseline estimate. * * 06/19/97 Changed to NOT update baseline parameters * * 06/25/97 Changed to change baseline along the frame * * 03/10/99 Changed to remove reference phase due to topography * * 04/06/01 Changed to remove model or other known phase * * 06/21/02 Changed to scale the interferogram by 1/sqrt(amp) * * 08/16/06 Changed to use the topo_ra to shift the range * * coordinate of the repeat image for long baselines. * * 07/02/08 provide ability to shift topo_ra * * 07/11/08 Added spacecraft height start and end to make phase * * continuous across patches * * 09/18/08 Added TEC_start and TEC_end to account for the ionosphere * * 08/18/09 Added small correction to the phase for the elevation- * * dependent range shift, important for long baselines * * 11/07/09 Code rewritten by RJM to read PRM-files and write grd-files* * 04/24/10 changed calc_phase subroutine based on pdiff.c * * changed the phase calculation part to match pdiff.c * * this change is to account for slight range change due to * * topography, which is accounted for in pdiff.c * * 10/23/10 changed calc_phase to calc_drho and completely rewrote * * the topographic phase correction to use all the nonlinear * * terms. ***************************************************************************/ #include "gmtsar.h" char *USAGE = "phasediff [GMTSAR] - Compute phase difference of two images\n\n" "\nUsage: " "phasediff ref.PRM rep.PRM [-topo topo_ra.grd] [-model " "modelphase.grd]\n (topo_ra and model in GMT grd format)\n"; /*--------------------------------------------------------------*/ void calc_drho(int xdim, double *range, double *topo, double avet, double re, double height, double B, double alpha, double Bx, double *drho) { int k; /* EX: changing to long double for better precision */ long double rho, sint, cost, cosa, sina, b; // long double term1,term2,c,c2,ret,ret2; long double term1, c, c2, ret, ret2; sina = sin(alpha); cosa = cos(alpha); c = re + height; c2 = c * c; b = B; for (k = 0; k < xdim; k++) { /* compute the look angle using equation (C26) in Appendix C */ rho = range[k]; ret = re + avet + topo[k]; ret2 = ret * ret; cost = ((rho * rho + c2 - ret2) / (2. * rho * c)); // thet = acos(cost); if (cost >= 1.) die("calc_drho", "cost >= 0"); sint = sqrtl(1. - cost * cost); /* compute the range change using equation (c23) in Appendic C */ // term1 = -B*(sint*cosa-cost*sina); // term2 = B*B*(cost*cosa+sint*sina)*(cost*cosa+sint*sina)/(2.*rho); // drho[k] = term1 + term2; /* New (Eric Lindsey, April 2015): compute the range change using the full * nonlinear equation */ // term1 = rho*rho + b*b - 2*rho*b*(sint*cosa-cost*sina); // term1 = rho*rho + b*b - 2*rho*b*sin(thet-alpha); // drho[k] = -rho + sqrtl(term1); /* Compute the offset effect from non-parallel orbit */ term1 = rho * rho + b * b - 2 * rho * b * (sint * cosa - cost * sina) - Bx * Bx; // term1 = rho*rho + b*b - 2*rho*b*(sint*cosa-cost*sina); drho[k] = -rho + sqrtl(term1); } } /*--------------------------------------------------------------*/ void calc_average_topo(double *avet, int xdimt, int ydimt, float *topo) { double sumt; int k, nsum; sumt = 0.0; nsum = 0; /* compute the average topography, save the value, and remove it from the * topography */ for (k = 0; k < xdimt * ydimt; k++) { sumt += topo[k]; nsum++; } *avet = sumt / nsum; for (k = 0; k < xdimt * ydimt; k++) { topo[k] = topo[k] - (float)*avet; } if (verbose) fprintf(stderr, " mean topo %lf\n", *avet); } void print_prm_params(struct PRM p1, struct PRM p2) { fprintf(stderr, " SLC 1: num_rng_bins %d num_lines %d \n", p1.num_rng_bins, p1.num_lines); fprintf(stderr, " SLC 2: num_rng_bins %d num_lines %d \n", p2.num_rng_bins, p2.num_lines); fprintf(stderr, " lambda %f \n", p2.lambda); fprintf(stderr, " baseline_start %f \n", p2.baseline_start); fprintf(stderr, " baseline_end %f \n", p2.baseline_end); fprintf(stderr, " B_offset_start %f \n", p2.B_offset_start); fprintf(stderr, " B_offset_end %f \n", p2.B_offset_end); fprintf(stderr, " alpha_start %f \n", p2.alpha_start); fprintf(stderr, " alpha_end %f \n", p2.alpha_end); fprintf(stderr, " near_range %f \n", p2.near_range); fprintf(stderr, " rng_samp_rate %f \n", p2.fs); fprintf(stderr, " sc_clock_start %f \n", p2.SC_clock_start); fprintf(stderr, " sc_clock_stop %f \n", p2.SC_clock_stop); fprintf(stderr, " clock_start %f \n", p2.clock_start); fprintf(stderr, " clock_stop %f \n", p2.clock_stop); fprintf(stderr, " prf %f \n", p2.prf); } void fix_prm_params(struct PRM *p, char *s) { double delr; delr = SOL / p->fs / 2.0; /* this is the correction for the range and azimuth shifts of the re-aligned * SLC images */ // if(p->sub_int_r < 0.) p->sub_int_r = 0.; // if(p->sub_int_a < 0.) p->sub_int_a = 0.; p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift + p->sub_int_r - 1) * delr; p->SC_clock_start = p->SC_clock_start + (p->ashift + p->sub_int_a) / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } /*--------------------------------------------------------------*/ /* read topo_ra and model files if provided */ /* must be in GMT binary grd format */ void read_optional_args(void *API, int argc, char **argv, struct PRM *tp, int *topoflag, struct PRM *mp, int *modelflag) { int i; struct GMT_GRID *M = NULL, *T = NULL; /* Grid structures containing ->header and ->data */ for (i = 3; i < argc; i++) { if (strcmp(argv[i], "-topo") == 0) { fprintf(stderr, "reading topo %s\n", argv[i + 1]); strcpy(tp->input_file, argv[i + 1]); if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, tp->input_file, NULL)) == NULL) die("cannot open topofile", tp->input_file); tp->num_rng_bins = T->header->nx; tp->num_lines = T->header->ny; *topoflag = 1; i++; GMT_Destroy_Data(API, &T); } if (strcmp(argv[i], "-model") == 0) { fprintf(stderr, "reading model %s\n", argv[i + 1]); strcpy(mp->input_file, argv[i + 1]); if ((M = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, mp->input_file, NULL)) == NULL) die("cannot open model file", mp->input_file); mp->num_rng_bins = M->header->nx; mp->num_lines = M->header->ny; *modelflag = 1; i++; GMT_Destroy_Data(API, &M); } } } int main(int argc, char **argv) { int j, k, istart; int topoflag, modelflag; int xdim = 0, ydim = 0; /* size of SLC file */ int ydim_start; /* start of SLC filesize */ int xt, yt; /* size of topo file, increment */ int xm, ym; /* size of model file, increment */ uint64_t left_node; short *d1 = NULL, *d2 = NULL; /* pointers to input data files */ double *xs = NULL, *shft = NULL, *ss = NULL, *as = NULL, *topo2 = NULL; double *real = NULL, *imag = NULL, *range = NULL, *drho = NULL, *drho0 = NULL; double drange, dt, tspan, time, time2; double ht0, htc, htf, dht, ddht, height; double alpha, cnst, pha, avet; double B, Bh, Bv, dBh, dBv, ddBh, ddBv; double Bx, dBx, ddBx, Bx0, Bxc, Bxf; double Bh0, Bhc, Bhf, Bv0, Bvc, Bvf; double ys, test, inc[2], wesn[4]; double xdect, ydect, xdecm, ydecm, rdumt; FILE *SLCfile1 = NULL, *SLCfile2 = NULL; fcomplex *intfp = NULL, *iptr1 = NULL, *iptr2 = NULL, pshif; struct PRM p1, p2, tp, mp; void *API = NULL; /* GMT control structure */ struct GMT_GRID *M = NULL, *T = NULL; /* Grid structures containing ->header and ->data */ struct GMT_GRID *RE = NULL, *IM = NULL; /* For the real and imaginary grids */ double *range2 = NULL; /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; verbose = 0; topoflag = modelflag = 0; xdect = ydect = 1.0; xdecm = ydecm = 1.0; avet = 0.0; ydim_start = 0; if (argc < 3) die(USAGE, ""); /* read prm file into two pointers */ get_prm(&p1, argv[1]); get_prm(&p2, argv[2]); if (verbose) fprintf(stderr, "near range: %lf %lf \n", p1.near_range, p2.near_range); if (argc > 3) read_optional_args(API, argc, argv, &tp, &topoflag, &mp, &modelflag); if (debug) print_prm_params(p1, p2); if (p2.baseline_start < -9000) die("baseline < -9000 not set ?", ""); /* near_range, SC_clock_start, and SC_clock_stop need to be changed */ fix_prm_params(&p1, argv[1]); fix_prm_params(&p2, argv[2]); if (verbose) fprintf(stderr, "near range: %lf %lf \n", p1.near_range, p2.near_range); /* open SLC files */ if ((SLCfile1 = fopen(p1.SLC_file, "r")) == NULL) die("Can't open SLCfile", p1.SLC_file); if ((SLCfile2 = fopen(p2.SLC_file, "r")) == NULL) die("Can't open SLCfile", p2.SLC_file); /* set width and length */ /* check dimensions of the two SLC files */ if (p1.num_rng_bins == p2.num_rng_bins) { xdim = p1.num_rng_bins; } else { die("The dimensions of range do not match", ""); } if (p1.num_patches * p1.num_valid_az == p2.num_patches * p2.num_valid_az) { ydim = p1.num_patches * p1.num_valid_az; } else { die("The dimensions of azimuth do not match", ""); } fprintf(stderr, " xdim %d, ydim %d \n", xdim, ydim); /* set heights */ htc = p1.ht; ht0 = p1.ht_start; htf = p1.ht_end; inc[GMT_X] = inc[GMT_Y] = 1.0; /* Pixels */ wesn[GMT_XLO] = 0.0; wesn[GMT_XHI] = inc[GMT_X] * xdim; wesn[GMT_YLO] = 0.0; wesn[GMT_YHI] = inc[GMT_Y] * ydim; if ((RE = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "real", RE)) return EXIT_FAILURE; if ((IM = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "imag", RE)) return EXIT_FAILURE; /* allocate memory */ drho = (double *)malloc(xdim * sizeof(double)); drho0 = (double *)malloc(xdim * sizeof(double)); range = (double *)malloc(xdim * sizeof(double)); range2 = (double *)malloc(xdim * sizeof(double)); intfp = (fcomplex *)malloc(xdim * sizeof(fcomplex)); iptr1 = (fcomplex *)malloc(xdim * sizeof(fcomplex)); iptr2 = (fcomplex *)malloc(xdim * sizeof(fcomplex)); d1 = (short *)malloc(2 * xdim * sizeof(short)); d2 = (short *)malloc(2 * xdim * sizeof(short)); shft = (double *)malloc(xdim * sizeof(double)); xs = (double *)malloc(xdim * sizeof(double)); topo2 = (double *)malloc(xdim * sizeof(double)); imag = (double *)malloc(xdim * sizeof(double)); real = (double *)malloc(xdim * sizeof(double)); ss = (double *)malloc(xdim * sizeof(double)); as = (double *)malloc(xdim * sizeof(double)); /* open and read topo file and allocate memory */ if (topoflag) { if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, tp.input_file, NULL)) == NULL) return EXIT_FAILURE; if (xdim % T->header->nx != 0 || ydim % T->header->ny != 0) die("The dimension SLC must be multiplication factor of the topo_ra", tp.input_file); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, tp.input_file, T) == NULL) return EXIT_FAILURE; rdumt = floor(T->header->z_max + 1.0); if (verbose) fprintf(stderr, "\n%s %s %d %d\n", T->header->title, tp.input_file, T->header->nx, T->header->ny); if (verbose) fprintf(stderr, "\n%f %f %f %f %f\n", T->header->wesn[GMT_XLO], T->header->wesn[GMT_YLO], T->header->inc[GMT_X], T->header->inc[GMT_Y], rdumt); /* T->header->inc[GMT_X] or T->header->inc[GMT_Y] may be negative */ xdect = fabs(T->header->inc[GMT_X]); ydect = fabs(T->header->inc[GMT_Y]); /* calculate the average and remove the average from the topography */ calc_average_topo(&avet, T->header->nx, T->header->ny, T->data); if (verbose) fprintf(stderr, " read topo file: average %f \n", avet); } /* open and read the model file and allocate the memory */ if (modelflag) { if ((M = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, mp.input_file, NULL)) == NULL) return EXIT_FAILURE; if (xdim % M->header->nx != 0 || ydim % M->header->ny != 0) die("The dimension SLC must be multiplication factor of the modelphase", mp.input_file); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, mp.input_file, M) == NULL) return EXIT_FAILURE; xdecm = fabs(M->header->inc[GMT_X]); ydecm = fabs(M->header->inc[GMT_Y]); } /* compute the time span and the time spacing */ tspan = 86400. * fabs(p2.SC_clock_stop - p2.SC_clock_start); dt = tspan / (ydim - 1); if (tspan < 0.01 || p2.prf < 0.01) die("check sc_clock_start, _end, or prf", ""); /* setup the default parameters */ drange = SOL / (2.0 * p2.fs); alpha = p2.alpha_start * PI / 180.0; cnst = -4.0 * PI / p2.lambda; for (k = 0; k < xdim; k++) { // range[k]=p1.near_range+k*drange; range[k] = p1.near_range + k * (1 + p1.stretch_r) * drange; topo2[k] = 0.; xs[k] = k; } /* calculate initial baselines */ /* if (p2.SC_identity == 100) { double tmpB = 0.0,alpha = 0.0; tmpB = p2.baseline_start; alpha = p2.alpha_start; p2.baseline_start = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_start = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_start)/PI*180.0; tmpB = p2.baseline_end; alpha = p2.alpha_end; p2.baseline_end = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_end = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_end)/PI*180.0; tmpB = p2.baseline_center; alpha = p2.alpha_center; p2.baseline_center = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_center = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_center)/PI*180.0; } */ Bh0 = p2.baseline_start * cos(p2.alpha_start * PI / 180.0); Bv0 = p2.baseline_start * sin(p2.alpha_start * PI / 180.0); Bhf = p2.baseline_end * cos(p2.alpha_end * PI / 180.0); Bvf = p2.baseline_end * sin(p2.alpha_end * PI / 180.0); Bx0 = p2.B_offset_start; Bxf = p2.B_offset_end; /* first case is quadratic baseline model, second case is default linear model */ if (p2.baseline_center != NULL_DOUBLE || p2.alpha_center != NULL_DOUBLE || p2.B_offset_center != NULL_DOUBLE) { Bhc = p2.baseline_center * cos(p2.alpha_center * PI / 180.0); Bvc = p2.baseline_center * sin(p2.alpha_center * PI / 180.0); Bxc = p2.B_offset_center; dBh = (-3. * Bh0 + 4 * Bhc - Bhf) / tspan; dBv = (-3. * Bv0 + 4 * Bvc - Bvf) / tspan; ddBh = (2. * Bh0 - 4 * Bhc + 2 * Bhf) / (tspan * tspan); ddBv = (2. * Bv0 - 4 * Bvc + 2 * Bvf) / (tspan * tspan); dBx = (-3. * Bx0 + 4 * Bxc - Bxf) / tspan; ddBx = (2. * Bx0 - 4 * Bxc + 2 * Bxf) / (tspan * tspan); } else { dBh = (Bhf - Bh0) / tspan; dBv = (Bvf - Bv0) / tspan; dBx = (Bxf - Bx0) / tspan; ddBh = ddBv = ddBx = 0.0; } /* calculate height increment */ dht = (-3. * ht0 + 4 * htc - htf) / tspan; ddht = (2. * ht0 - 4 * htc + 2 * htf) / (tspan * tspan); /* revise params in accordance with first_line */ if ((p1.first_line > 0) && (p2.first_line > 0)) ydim_start = p1.first_line - 1; /* now go through all the rows */ for (j = ydim_start; j < (ydim + ydim_start); j++) { for (k = 0; k < xdim; k++) { // range[k]=p1.near_range+k*drange; range2[k] = range[k] + j * p1.a_stretch_r * drange; } /* read data from complex i2 SLC */ read_SLC_short2float(SLCfile1, p1.SLC_file, d1, &iptr1[0], xdim, 1, DFACT); read_SLC_short2float(SLCfile2, p2.SLC_file, d2, &iptr2[0], xdim, 1, DFACT); yt = j / ydect; /* for topo_ra */ ym = j / ydecm; /* for modelphase */ /* calculate the change in baseline and height along the frame */ time = j * dt; time2 = time * time; Bh = Bh0 + dBh * time + ddBh * time2; Bv = Bv0 + dBv * time + ddBv * time2; Bx = Bx0 + dBx * time + ddBx * time2; B = sqrt(Bh * Bh + Bv * Bv); alpha = atan2(Bv, Bh); height = ht0 + dht * time + ddht * time2; for (k = 0; k < xdim; k++) { shft[k] = 0.; if (topoflag) { xt = k / xdect; topo2[k] = T->data[xt + T->header->nx * yt]; } } /* calculate the combined earth curvature and topography correction */ calc_drho(xdim, range2, topo2, avet, p1.RE, height, B, alpha, Bx, drho); // for (k = 0; k < xdim; k++) range2[k] = 0.0; // calc_drho(xdim, range2, topo2, avet, p1.RE, height, B, alpha, Bx, drho0); // if (j == 50) printf("drho = %.12f\n",drho[50]); /* loop over range to make topographic and model phase corrections */ for (k = 0; k < xdim; k++) { // // iptr1[k].r = 1.0; // iptr1[k].i = 1.0; // intfp[k] = iptr1[k]; //pha = cnst * (drho[k] - drho0[k]); pha = cnst * drho[k]; if (modelflag) { xm = k / xdecm; /* xm is increment for model phase. note they are all integers */ pha = pha - M->data[xm + M->header->nx * ym]; } pshif = Cexp(pha); //intfp[k] = Cmul(intfp[k], pshif); intfp[k].r = pha; intfp[k].i = 0.0; } /* shift the range of the repeat image to improve image matching for very * long baselines > 1000 m */ if ((topoflag > 0) && (p2.baseline_start > 1000.0)) { /* compute the range change with no topography so the range shift can be * determined for the spline */ calc_drho(xdim, range, shft, avet, p1.RE, height, B, alpha, Bx, drho0); for (k = 0; k < xdim; k++) { shft[k] = (drho0[k] - drho[k]) / drange; real[k] = intfp[k].r; imag[k] = intfp[k].i; } /* shift the real part */ spline_(&istart, &xdim, xs, real, ss, as); for (k = 0; k < xdim; k++) { ys = xs[k] + shft[k]; evals_(&istart, &ys, &xdim, xs, real, ss, &test); intfp[k].r = (float)test; } /* shift imaginary part */ spline_(&istart, &xdim, xs, imag, ss, as); for (k = 0; k < xdim; k++) { ys = xs[k] + shft[k]; evals_(&istart, &ys, &xdim, xs, real, ss, &test); intfp[k].i = (float)test; } } /* make interferogram */ left_node = GMT_Get_Index(API, RE->header, j, 0); for (k = 0; k < xdim; k++) { //iptr2[k].r = 1.0; //iptr2[k].i = 1.0; //iptr2[k] = Conjg(iptr2[k]); //intfp[k] = Cmul(intfp[k], iptr2[k]); RE->data[left_node + k] = intfp[k].r; IM->data[left_node + k] = intfp[k].i; } } if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, "real.grd=bf", RE)) { die("Failed to update real.grd grid header", ""); } // // if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, "imag.grd=bf", IM)) { // die("Failed to update imag.grd grid header", ""); // } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/gmtsar/p_scatter.c000644 015705 000000 00000021144 13505462013 017167 0ustar00sandwellwheel000000 000000 /* $Id$ */ /*************************************************************************** * p_scatter computes the average amplitude or persistent scatter function * * from aligned SLCs. * **************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 06/06/18 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 06/06/17 Code largely based on resamp.c * ***************************************************************************/ /* References: Ferretti, A., Prati, C., & Rocca, F. (2001). Permanent scatterers in SAR interferometry. IEEE Transactions on geoscience and remote sensing, 39(1), 8-20. Lyons, S., & Sandwell, D. (2003). Fault creep along the southern San Andreas from interferometric synthetic aperture radar, permanent scatterers, and stacking. Journal of Geophysical Research: Solid Earth, 108(B1). */ #include "gmtsar.h" #include #include #include #include char *USAGE = "\nUsage: " "p_scatter PRM_filelist fileout.grd mode \n" " PRM_filelist - list of aligned SLCs \n" " fileout.grd - output file either average amplitude or " "persistent_scatter \n" " mode - (0) amplitude; (1) persistent_scatter; " "(2) compute and apply persistent_scatter \n \n" " Computes the average amplitude or persistent scattering " "function which is mu/(2*sig) \n" " The factor of 2 is used do the display_amplitude is not " "significantly changed. \n \n"; void read_input_file(char *, int, char **); #define BUFSIZE 1024 int main(int argc, char **argv) { char line[BUFSIZE]; char **PRMname; char **SLCname; int i, ii, jj, kk, mm; int nfiles, imode = 1; int debug = 0; int xdimm, ydimm; /* size of master SLC file */ short *slc_rows = NULL; /* pointer to a composite row of all the SLC files*/ float *sum, *sum2; float amp2, ave, sig, sig2; double test1, test2; FILE *fin = NULL; FILE *prmfile = NULL; FILE **slcin = NULL; struct PRM *r; double inc[2], wesn[4]; void *API = NULL; /* GMT control structure */ struct GMT_GRID *scatter = NULL; /* For the scatter grid */ if (argc < 4) die(USAGE, ""); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; imode = atoi(argv[3]); /* open the PRM_filelist count the number of lines */ if ((fin = fopen(argv[1], "r")) == NULL) die("Can't open file", argv[1]); nfiles = 0; while (fgets(line, BUFSIZE, fin) != NULL) { nfiles++; } fclose(fin); if (debug) fprintf(stderr, "number of PRM files %d \n", nfiles); /* allocate memory for the PRM, SLC, and the PRM structures */ PRMname = malloc(nfiles * sizeof(char *)); SLCname = malloc(nfiles * sizeof(char *)); slcin = malloc(nfiles * sizeof(FILE *)); for (i = 0; i < nfiles; i++) { PRMname[i] = (char *)malloc(512 * sizeof(char)); SLCname[i] = (char *)malloc(512 * sizeof(char)); slcin[i] = (FILE *)malloc(sizeof(FILE)); } r = malloc(nfiles * sizeof(struct PRM)); /* get the PRM filenames */ read_input_file(argv[1], nfiles, PRMname); if (debug) for (i = 0; i < nfiles; i++) fprintf(stderr, "%s \n", PRMname[i]); /* read the first PRM file and get the dimensions of the SLC files */ i = 0; if ((prmfile = fopen(PRMname[i], "r")) == NULL) die("Can't open prmfile ", PRMname[i]); get_sio_struct(prmfile, &r[i]); xdimm = r[i].num_rng_bins; ydimm = r[i].num_patches * r[i].num_valid_az; if (debug) fprintf(stderr, " SLC dimensions %d %d \n", xdimm, ydimm); fclose(prmfile); /* prepare the gmt grd file */ inc[GMT_X] = inc[GMT_Y] = 1.0; /* Pixels */ wesn[GMT_XLO] = 0.0; wesn[GMT_XHI] = inc[GMT_X] * xdimm; wesn[GMT_YLO] = 0.0; wesn[GMT_YHI] = inc[GMT_Y] * ydimm; if ((scatter = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "scatter", scatter)) return EXIT_FAILURE; /* allocate the memory for the input SLC files and output scattering (or * amplitude) file */ slc_rows = (short *)malloc(2 * xdimm * nfiles * sizeof(short)); sum = (float *)malloc(xdimm * sizeof(float)); sum2 = (float *)malloc(xdimm * sizeof(float)); /* open all the PRM files and get the names of the SLC files */ for (kk = 0; kk < nfiles; kk++) { if ((prmfile = fopen(PRMname[kk], "r")) == NULL) die("Can't open prmfile ", PRMname[kk]); get_sio_struct(prmfile, &r[kk]); SLCname[kk] = r[kk].SLC_file; if (debug) fprintf(stderr, " SLC name %s \n", SLCname[kk]); fclose(prmfile); } /* open all the SLC files for reading and writing*/ for (kk = 0; kk < nfiles; kk++) { if ((slcin[kk] = fopen(SLCname[kk], "r+")) == NULL) die("Can't open prmfile ", SLCname[kk]); } /* loopover the rows, read a row from each SLC, compute scatter, and save the * output */ for (ii = 0; ii < ydimm; ii++) { /* read all the SLCs with the same row */ for (kk = 0; kk < nfiles; kk++) { fread(slc_rows + kk * 2 * xdimm, 2 * sizeof(short), xdimm, slcin[kk]); } /* zero all the sum and output arrays */ /* loop over all the columns and then the SLCs */ for (jj = 0; jj < xdimm; jj++) { scatter->data[ii * xdimm + jj] = 0.; sum[jj] = 0.; sum2[jj] = 0.; for (kk = 0; kk < nfiles; kk++) { mm = kk * 2 * xdimm + 2 * jj; amp2 = (float)slc_rows[mm] * (float)slc_rows[mm] + (float)slc_rows[mm + 1] * (float)slc_rows[mm + 1]; sum[jj] = sum[jj] + sqrt(amp2); sum2[jj] = sum2[jj] + amp2; } ave = sum[jj] / nfiles; sig2 = sum2[jj] / nfiles - ave * ave; sig = sqrt(sig2); /* output either the scatter function or the average amplitude */ if (imode == 1 || imode == 2) { scatter->data[ii * xdimm + jj] = .1; if (sig > .1) scatter->data[ii * xdimm + jj] = ave / (2. * sig); } else { scatter->data[ii * xdimm + jj] = ave; } } } /* apply the scatter function to all the SLC files */ if (imode == 2) { /* rewind all the SLC files */ for (kk = 0; kk < nfiles; kk++) { rewind(slcin[kk]); } /* loop over the rows, read a row from each SLC, and multiple by the scatter */ for (ii = 0; ii < ydimm; ii++) { /* read all the SLCs with the same row */ for (kk = 0; kk < nfiles; kk++) { fread(slc_rows + kk * 2 * xdimm, 2 * sizeof(short), xdimm, slcin[kk]); } /* loop over all the columns and multiply each SLC by scatter */ for (jj = 0; jj < xdimm; jj++) { for (kk = 0; kk < nfiles; kk++) { mm = kk * 2 * xdimm + 2 * jj; test1 = (float)slc_rows[mm] * scatter->data[ii * xdimm + jj]; slc_rows[mm] = round(test1); test2 = (float)slc_rows[mm + 1] * scatter->data[ii * xdimm + jj]; slc_rows[mm + 1] = round(test2); // if(fabs(test1) > 32767. || fabs(test2) > 32767.) fprintf(stderr," // %f %f test out of bounds \n",test1,test2); } } /* write all the SLCs with the same row */ for (kk = 0; kk < nfiles; kk++) { fseek(slcin[kk], -2 * sizeof(short) * xdimm, SEEK_CUR); fwrite(slc_rows + kk * 2 * xdimm, 2 * sizeof(short), xdimm, slcin[kk]); } } } /* write out the amplitude or scatter function */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[2], scatter)) { die("Failed to write output grd file", ""); } /* close all the files and remove the GMT machinery*/ for (kk = 0; kk < nfiles; kk++) { fclose(slcin[kk]); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; return (EXIT_SUCCESS); } /*---------------------------------------------------------------------------*/ void read_input_file(char *inputfilename, int nfiles, char **filename) { int i; FILE *inputfile; if ((inputfile = fopen(inputfilename, "rw")) == NULL) die("Can't open ", inputfilename); for (i = 0; i < nfiles; i++) fscanf(inputfile, " %s ", filename[i]); fclose(inputfile); } GMTSAR_V5.7/gmtsar/get_locations.c000644 015705 000000 00000002672 13505462013 020042 0ustar00sandwellwheel000000 000000 /* $Id: get_locations.c 33 2013-04-06 05:37:15Z pwessel $ */ #include "gmtsar.h" #include "xcorr.h" #include #include #include #include /*-------------------------------------------------------*/ /* determine pixel location of each point for testing */ /* use master */ /* pixel locations for slave includes x, y offset */ void get_locations(struct xcorr *xc) { int i, j, n; /* need to space more than offset from side */ /* also add two more range locations then below we don't use the first and * last range locations */ /* these first and last locations are unreliable because the data have been * extended */ xc->x_inc = (xc->m_nx - 2 * (xc->xsearch + xc->nx_corr)) / (xc->nxl + 3); xc->y_inc = (xc->m_ny - 2 * (xc->ysearch + xc->ny_corr)) / (xc->nyl + 1); /* add an extra column on memory just in case */ xc->loc = malloc(xc->nyl * (xc->nxl + 1) * sizeof(struct locs)); n = 0; for (j = 1; j <= xc->nyl; j++) { /* remove the first and last of each range line to avoid regions of low SAR * amplitude and unreliable correlation*/ for (i = 2; i <= xc->nxl + 1; i++) { xc->loc[n].x = xc->npx + i * xc->x_inc; xc->loc[n].y = xc->npy + j * xc->y_inc; n++; } } xc->nlocs = n; fprintf(stderr, " locations n %d nx %d nyl %d nxl %d x_inc %d y_inc %d\n", n, xc->m_nx, xc->nyl, xc->nxl, xc->x_inc, xc->y_inc); } /*-------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/parse_xcorr_input.c000644 015705 000000 00000023467 13505462013 020763 0ustar00sandwellwheel000000 000000 /* $Id: parse_xcorr_input.c 109 2015-01-19 23:01:24Z sandwell $ */ #include "gmtsar.h" #include "xcorr.h" #include #include #include #include /*-------------------------------------------------------*/ void print_params(struct xcorr *xc) { /* fprintf(stdout," input %s \n",xc->param_name); */ fprintf(stdout, " format %d [0 => complex short, 1 => real float] \n", xc->format); fprintf(stdout, " m_nx %d \n", xc->m_nx); fprintf(stdout, " m_ny %d \n", xc->m_ny); fprintf(stdout, " s_nx %d \n", xc->s_nx); fprintf(stdout, " s_ny %d \n", xc->s_ny); fprintf(stdout, " nxl %d \n", xc->nxl); fprintf(stdout, " nyl %d \n", xc->nyl); fprintf(stdout, " rshift %d \n", xc->x_offset); fprintf(stdout, " ashift %d \n", xc->y_offset); fprintf(stdout, " nx_corr %d \n", xc->nx_corr); fprintf(stdout, " ny_corr %d \n", xc->ny_corr); fprintf(stdout, " yoff %d \n", xc->ysearch); fprintf(stdout, " xoff %d \n", xc->xsearch); fprintf(stdout, " npx %d \n", xc->npx); fprintf(stdout, " npy %d \n", xc->npy); fprintf(stdout, " npx %d \n", xc->npx); fprintf(stdout, " npy %d \n", xc->npy); fprintf(stderr, "data file 1 %s \n", xc->data1_name); fprintf(stderr, "data file 2 %s \n", xc->data2_name); } /*-------------------------------------------------------*/ void set_defaults(struct xcorr *xc) { xc->format = 0; /* data format */ xc->ri = 2; /* range interpolation factor */ /* default values for time correlation */ if ((xc->corr_flag == 0) || (xc->corr_flag == 1)) { xc->nxl = 16; /* number of points in x direction */ xc->nyl = 32; /* number of points in y direction */ xc->x_offset = 0; /* starting x offset point*/ xc->y_offset = 0; /* starting y offset point*/ /* 128; 64 */ xc->nx_corr = 128; /* size of correlation window */ xc->ny_corr = 128; /* size of correlation window */ xc->xsearch = 64; /* size of search x offset */ xc->ysearch = 64; /* size of search y offset */ } /* default values for fft correlation */ /* xc->npx and xc->npx must be powers of two */ if (xc->corr_flag == 2) { xc->nxl = 16; /* number of points in x direction */ xc->nyl = 32; /* number of points in y direction */ xc->x_offset = 0; /* starting x offset point*/ xc->y_offset = 0; /* starting y offset point*/ /* 128; 64 */ xc->nx_corr = 128; /* size of correlation window */ xc->ny_corr = 128; /* size of correlation window */ xc->xsearch = 64; /* size of search x offset */ xc->ysearch = 64; /* size of search y offset */ } /* default values for fft interpolation */ xc->n2x = 8; xc->n2y = 8; xc->npx = xc->nx_corr + 2 * xc->xsearch; /* size of data required*/ xc->npy = xc->ny_corr + 2 * xc->ysearch; /* size of data required*/ xc->nxc = 2 * xc->xsearch; /* size of correlation patch*/ xc->nyc = 2 * xc->ysearch; /* size of correlation patch*/ xc->astretcha = 0.0; /* azimuth stretch partameter */ xc->interp_flag = 1; /* interpolate or not ? */ xc->interp_factor = 16; /* interpolatation factor */ } /*-------------------------------------------------------*/ /* reads options */ /* start with third arguement */ void parse_command_line(int na, char **a, struct xcorr *xc, int *nfiles, int *input_flag, char *USAGE) { int n; FILE *inputfile; char tmp[128]; for (n = 3; n < na; n++) { if (!strcmp(a[n], "-freq")) { xc->corr_flag = 2; fprintf(stderr, " using frequency cross correlation\n"); } else if (!strcmp(a[n], "-time")) { xc->corr_flag = 0; fprintf(stderr, " using time cross correlation\n"); } else if (!strcmp(a[n], "-time4")) { xc->corr_flag = 1; fprintf(stderr, " using 4th power time cross correlation\n"); } else if (!strcmp(a[n], "-real")) { xc->format = 1; fprintf(stderr, " no interpolation\n"); } else if (!strcmp(a[n], "-nointerp")) { xc->interp_flag = 0; fprintf(stderr, " no interpolation\n"); } else if (!strcmp(a[n], "-noshift")) { xc->offset_flag = 1; fprintf(stderr, " ignoring shift in prm\n"); } else if (!strcmp(a[n], "-interp")) { n++; if (n == na) die(" no option after -interp!\n", ""); xc->interp_flag = 1; xc->interp_factor = atoi(a[n]); fprintf(stderr, " setting interpolation factor to %d\n", xc->interp_factor); } else if (!strcmp(a[n], "-range_interp")) { n++; if (n == na) die(" no option after -range_interp!\n", ""); xc->ri = atoi(a[n]); fprintf(stderr, " setting range interpolation factor to %d\n", xc->ri); } else if (!strcmp(a[n], "-nx")) { n++; if (n == na) die(" no option after -nx!\n", ""); xc->nxl = atoi(a[n]); fprintf(stderr, " setting nx to %d\n", xc->nxl); } else if (!strcmp(a[n], "-ny")) { n++; if (n == na) die(" no option after -ny!\n", ""); xc->nyl = atoi(a[n]); fprintf(stderr, " setting ny to %d\n", xc->nyl); } else if (!strcmp(a[n], "-xsearch")) { n++; if (n == na) die(" no option after -xsearch!\n", ""); xc->xsearch = atoi(a[n]); xc->nx_corr = 2 * xc->xsearch; xc->npx = xc->nx_corr + 2 * xc->xsearch; /* size of data required*/ xc->nxc = 2 * xc->xsearch; /* size of correlation patch*/ if (((xc->xsearch - 1) & xc->xsearch)) die(" xsearch needs to be power of 2! (32 64 128 256) \n", ""); fprintf(stderr, " setting xsearch to %d\n", xc->xsearch); fprintf(stderr, " setting nx_corr to %d\n", xc->nx_corr); } else if (!strcmp(a[n], "-ysearch")) { n++; if (n == na) die(" no option after -ysearch!\n", ""); xc->ysearch = atoi(a[n]); xc->ny_corr = 2 * xc->ysearch; xc->npy = xc->ny_corr + 2 * xc->ysearch; /* size of data required*/ xc->nyc = 2 * xc->ysearch; /* size of correlation patch*/ if (((xc->ysearch - 1) & xc->ysearch)) die(" ysearch needs to be power of 2! (32 64 128 256) \n", ""); fprintf(stderr, " setting ysearch to %d\n", xc->ysearch); fprintf(stderr, " setting ny_corr to %d\n", xc->ny_corr); } else if (!strcmp(a[n], "-v")) { verbose = 1; fprintf(stderr, " verbose output \n"); } else if (!strcmp(a[n], "-norange")) { xc->ri = 1; fprintf(stderr, " no range interpolation \n"); } else if (!strncmp(a[n], "-input", 1)) { n++; if (n == na) die(" no option after -input!\n", ""); fprintf(stderr, "using input file \n"); *input_flag = 1; if ((inputfile = fopen(a[2], "r")) == NULL) die("Can't open ", a[2]); while (fscanf(inputfile, " %s ", tmp) != EOF) (*nfiles)++; fclose(inputfile); } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, " %s someone made a mistake!\n\n", a[n]); fprintf(stderr, " %s I think it was you! \n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } } /*---------------------------------------------------------------------------*/ void handle_prm(void *API, char **argv, struct xcorr *xc, int nfiles) { int i; char **filename; FILE *prmfile; struct PRM *r; char tmp_c[1024]; if (debug) fprintf(stderr, "handle_prm %d\n", nfiles); filename = malloc(nfiles * sizeof(char *)); for (i = 0; i < nfiles; i++) filename[i] = malloc(128 * sizeof(char)); r = malloc(nfiles * sizeof(struct PRM)); for (i = 0; i < nfiles; i++) { strcpy(filename[i], argv[i + 1]); strcpy(tmp_c, &filename[i][strlen(filename[i]) - 4]); // fprintf(stderr,"%s\n",tmp_c); if (strcmp(tmp_c, ".PRM") == 0) { // fprintf(stderr," Reading in PRM file: %s\n",filename[i]); if ((prmfile = fopen(filename[i], "r")) == NULL) die("Can't open prmfile ", filename[i]); get_sio_struct(prmfile, &r[i]); if (i == 0) { strcpy(xc->data1_name, r[i].SLC_file); if ((xc->data1 = fopen(xc->data1_name, "r")) == NULL) die("Cannot open SLC_file", xc->data1_name); xc->m_nx = r[i].num_rng_bins; xc->m_ny = r[i].num_patches * r[i].num_valid_az; } if (i == 1) { strcpy(xc->data2_name, r[i].SLC_file); xc->data2 = fopen(xc->data2_name, "r"); if ((xc->data2 = fopen(xc->data2_name, "r")) == NULL) die("Cannot open SLC_file", xc->data2_name); xc->s_nx = r[i].num_rng_bins; xc->s_ny = r[i].num_patches * r[i].num_valid_az; xc->x_offset = r[i].rshift; xc->y_offset = r[i].ashift; } /* added rjm 5/25/2010 to avoid div by zero and Nan */ if (r[0].prf > 0) { xc->astretcha = (r[1].prf - r[0].prf) / r[0].prf; } else { xc->astretcha = 0.0; } if (xc->offset_flag == 1) { xc->x_offset = xc->y_offset = 0; fprintf(stderr, " setting ashift and rshift to zero\n"); } fclose(prmfile); } else { // fprintf(stderr," Reading in netcdf file: %s\n",filename[i]); xc->format = 2; if (i == 0) { if ((xc->D1 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, filename[i], NULL)) == NULL) die("cannot open topofile", filename[i]); strcpy(xc->data1_name, filename[i]); xc->m_nx = xc->D1->header->nx; xc->m_ny = xc->D1->header->ny; if ((GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, filename[i], xc->D1)) == NULL) die("cannot open topofile", filename[i]); } if (i == 1) { if ((xc->D2 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, filename[i], NULL)) == NULL) die("cannot open topofile", filename[i]); strcpy(xc->data2_name, filename[i]); xc->s_nx = xc->D2->header->nx; xc->s_ny = xc->D2->header->ny; xc->x_offset = 0; xc->y_offset = 0; if ((GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, filename[i], xc->D2)) == NULL) die("cannot open topofile", filename[i]); } } } fprintf(stderr, " %d %d %d %d %d %d %f\n", xc->m_nx, xc->m_ny, xc->s_nx, xc->s_ny, xc->x_offset, xc->y_offset, xc->astretcha); free(r); } /*---------------------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/resamp.c000644 015705 000000 00000046433 13505462013 016502 0ustar00sandwellwheel000000 000000 /* $Id$ */ /*************************************************************************** * resamp resamples a slave image to match the geometry of a master image. * **************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 03/21/13 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 11/18/96 Code largely based on phasediff. * * 01/11/14 Code modified to use mmap() instead of fread() * * 01/06/15 Code modified to use only integer rshift, ashift for * * nearest (imode = 1) interpolation. * * 04/28/16 EXU Modified 4 resampling subroutine to shift pointer before * * interpolation, so that resamp won't fail on files larger * * than 4GB. * ***************************************************************************/ #include "gmtsar.h" #include #include #include #include #include char *USAGE = "\nUsage: " "resamp master.PRM slave.PRM new_slave.PRM new_slave.SLC intrp \n" " master.PRM - PRM for master imagea \n" " slave.PRM - PRM for slave image \n" " new_slave.PRM - PRM for aligned slave image \n" " new_slave.SLC - SLC for aligned slave image \n" " intrp - interpolation method: 1-nearest; " "2-bilinear; 3-biquadratic; 4-bisinc \n \n"; void print_prm_params(struct PRM, struct PRM); void fix_prm_params(struct PRM *, char *); void ram2ras(struct PRM, double *, double *); void nearest(double *, short *, int, int, short *); void bilinear(double *, short *, int, int, short *); void bicubic(double *, short *, int, int, short *); void bicubic_one(double *, double *, double, double, double *); void bisinc(double *, short *, int, int, short *); void sinc_one(double *, double *, double, double, double *); int main(int argc, char **argv) { int ii, jj; int debug, intrp; int xdimm, ydimm; /* size of master SLC file */ int xdims, ydims; /* size of slave SLC file */ short *sinn = NULL, *sout = NULL; /* pointer to input (whole array) and output (row) files.*/ double ram[2], ras[2]; /* range and azimuth locations for master and slave images */ FILE *SLC_file2 = NULL, *prmout = NULL; int fdin; double sv_pr[6]; size_t st_size; // long long int count=0; struct PRM pm, ps; debug = 0; intrp = 2; if (argc < 6) die(USAGE, ""); /* read prm file into two pointers */ get_prm(&pm, argv[1]); get_prm(&ps, argv[2]); intrp = atoi(argv[5]); if (debug) print_prm_params(pm, ps); /* set width and length of the master and slave images */ xdimm = pm.num_rng_bins; ydimm = pm.num_patches * pm.num_valid_az; xdims = ps.num_rng_bins; ydims = ps.num_patches * ps.num_valid_az; /* force integer interpolation if this is nearest neighbor, needed for TOPS */ if (intrp == 1) { sv_pr[0] = ps.sub_int_r; ps.sub_int_r = 0.; sv_pr[1] = ps.stretch_r; ps.stretch_r = 0.; sv_pr[2] = ps.a_stretch_r; ps.a_stretch_r = 0.; sv_pr[3] = ps.sub_int_a; ps.sub_int_a = 0.; sv_pr[4] = ps.stretch_a; ps.stretch_a = 0.; sv_pr[5] = ps.a_stretch_a; ps.a_stretch_a = 0.; } /* allocate memory for one row of the slave image */ if ((sout = (short *)malloc(2 * xdimm * sizeof(short))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for output indata.\n"); exit(-1); } /* open the input file, determine its length and mmap the input file */ if ((fdin = open(ps.SLC_file, O_RDONLY)) < 0) die("can't open %s for reading", ps.SLC_file); st_size = (size_t)4 * (size_t)xdims * (size_t)ydims; /* mmap the file */ if ((sinn = mmap(0, st_size, PROT_READ, MAP_SHARED, fdin, 0)) == MAP_FAILED) die("mmap error for input", " "); /* open the slave slc file for writing and write one row at a time */ if ((SLC_file2 = fopen(argv[4], "w")) == NULL) die("Can't open SLCfile for output", argv[4]); for (ii = 0; ii < ydimm; ii++) { for (jj = 0; jj < xdimm; jj++) { /* convert master ra to slave ra */ ram[0] = jj; ram[1] = ii; ram2ras(ps, ram, ras); /* do nearest, bilinear, bicubic, or sinc interpolation */ if (intrp == 1) { nearest(ras, sinn, ydims, xdims, &sout[2 * jj]); } else if (intrp == 2) { bilinear(ras, sinn, ydims, xdims, &sout[2 * jj]); } else if (intrp == 3) { bicubic(ras, sinn, ydims, xdims, &sout[2 * jj]); } else if (intrp == 4) { bisinc(ras, sinn, ydims, xdims, &sout[2 * jj]); } // if(ras[0]>xdimm||ras[0]<0) count++; } fwrite(sout, 2 * sizeof(short), xdimm, SLC_file2); } // fprintf(stderr,"%llu points out of bounds // (%d,%.6f,%.6f,%.6f)\n",count,ps.rshift,ps.sub_int_r,ps.stretch_r,ps.a_stretch_r); /* restore the affine parameters if this is nearest interpolation */ if (intrp == 1) { ps.sub_int_r = sv_pr[0]; ps.stretch_r = sv_pr[1]; ps.a_stretch_r = sv_pr[2]; ps.sub_int_a = sv_pr[3]; ps.stretch_a = sv_pr[4]; ps.a_stretch_a = sv_pr[5]; } /* update and write the slave PRM file */ ps.num_rng_bins = pm.num_rng_bins; ps.fs = pm.fs; ps.bytes_per_line = pm.bytes_per_line; ps.good_bytes = pm.good_bytes; ps.prf = pm.prf; ps.num_valid_az = pm.num_valid_az; ps.num_lines = pm.num_lines; ps.num_patches = pm.num_patches; ps.nrows = pm.nrows; if ((prmout = fopen(argv[3], "w")) == NULL) die("can't open prfile", argv[3]); put_sio_struct(ps, prmout); fclose(prmout); if (munmap(sinn, st_size) == -1) die("mmap error unmapping file", " "); close(fdin); fclose(SLC_file2); return (EXIT_SUCCESS); } /************************************************************************ * bi-cubic interpolation algorithm modified from GMT * ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/22/13 * ************************************************************************/ #include #include double cubic_kernel(double, double); void bicubic_one(double *rdata, double *idata, double x, double y, double *cz) { int i, j, ij; double wx[4], wy[4]; double arg, w, wsum, rsum, isum; double a = -0.3; /* These weights are based on the cubic convolution kernel, see for example http://undergraduate.csse.uwa.edu.au/units/CITS4241/Handouts/Lecture04.html These weights include a free parameter (a). */ for (i = 0; i < 4; i++) { arg = fabs(x + 1 - i); wx[i] = cubic_kernel(arg, a); arg = fabs(y + 1 - i); wy[i] = cubic_kernel(arg, a); } rsum = isum = wsum = 0.0; ij = 0; for (j = 0; j < 4; j++) { for (i = 0; i < 4; i++) { w = wx[i] * wy[j]; rsum += rdata[ij + i] * w; isum += idata[ij + i] * w; wsum += w; } ij += 4; } if (wsum <= 0.0) printf(" error wsum is zero \n"); cz[0] = rsum / wsum; cz[1] = isum / wsum; } /************************************************************************ kernel computes a bi-cubic spline kernel using the formula given at the following web page http://undergraduate.csse.uwa.edu.au/units/CITS4241/Handouts/Lecture04.html ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/22/13 * ************************************************************************/ #include double cubic_kernel(double arg, double a) /* note arg must be positive and a must be between -3 and 0. */ { double arg2, arg3, f; arg2 = arg * arg; arg3 = arg2 * arg; if (arg <= 1.) { f = (a + 2) * arg3 - (a + 3) * arg2 + 1.; } else if (arg <= 2.) { f = a * arg3 - 5 * a * arg2 + 8 * a * arg - 4 * a; } else { f = 0.; } return (f); } /************************************************************************ * nearest, bilinear, and bicubic interpolations * ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/22/13 * ************************************************************************/ #include "gmtsar.h" #include #include void nearest(double *ras, short *s_in, int ydims, int xdims, short *sout) { int i, j, k; short *tmp_sin; /* compute the indices of the upper left corner */ j = (int)(ras[0] + 0.5); i = (int)(ras[1] + 0.5); // k = 2*xdims*i + 2*j; k = 2 * j; /* shift the pointer by i0-ns2 lines */ tmp_sin = s_in; tmp_sin++; tmp_sin = s_in + (size_t)(2 * xdims) * (size_t)i * (tmp_sin - s_in); /* use the nearest point if it is within the bounds of the slave array */ if (i < 0 || i >= ydims || j < 0 || j >= xdims) { sout[0] = 0; sout[1] = 0; } else { // sout[0] = s_in[k]; // sout[1] = s_in[k+1]; sout[0] = tmp_sin[k]; sout[1] = tmp_sin[k + 1]; } } void bilinear(double *ras, short *s_in, int ydims, int xdims, short *sout) { double dr, da, real, imag; int k00, k01, k10, k11; int i0, j0; int nclip; short *tmp_sin; /* compute the residual offsets */ nclip = 0; j0 = (int)floor(ras[0]); i0 = (int)floor(ras[1]); dr = ras[0] - (double)j0; da = ras[1] - (double)i0; if (dr < 0. || dr > 1. || da < 0. || da > 1) fprintf(stderr, " dr or da out of bounds %f %f \n", dr, da); /* shift the pointer by i0-ns2 lines */ tmp_sin = s_in; tmp_sin++; tmp_sin = s_in + (size_t)(2 * xdims) * (size_t)i0 * (tmp_sin - s_in); /* compute the indices of the 4 corners */ /* k00 = 2*xdims*i0 + 2*j0; k01 = 2*xdims*i0 + 2*(j0+1); k10 = 2*xdims*(i0+1) + 2*j0; k11 = 2*xdims*(i0+1) + 2*(j0+1); */ k00 = 2 * j0; k01 = 2 * (j0 + 1); k10 = 2 * xdims + 2 * j0; k11 = 2 * xdims + 2 * (j0 + 1); /* do the interpolation if all 4 corners are within the bounds of the slave * array */ if (i0 < 0 || i0 >= (ydims - 1) || j0 < 0 || j0 >= (xdims - 1)) { sout[0] = 0; sout[1] = 0; } else { /*real = s_in[k00] * (1.0 - da) * (1.0 - dr) + s_in[k10] * (da) * (1.0 - dr) + s_in[k01] * (1.0 - da) * (dr) + s_in[k11] * (da) * (dr);*/ real = tmp_sin[k00] * (1.0 - da) * (1.0 - dr) + tmp_sin[k10] * (da) * (1.0 - dr) + tmp_sin[k01] * (1.0 - da) * (dr) + tmp_sin[k11] * (da) * (dr); if ((int)fabs(real) > I2MAX) nclip = nclip + 1; sout[0] = (short)clipi2(real + 0.5); /*imag = s_in[k00+1] * (1.0 - da) * (1.0 - dr) + s_in[k10+1] * (da) * (1.0 - dr) + s_in[k01+1] * (1.0 - da) * (dr) + s_in[k11+1] * (da) * (dr);*/ imag = tmp_sin[k00 + 1] * (1.0 - da) * (1.0 - dr) + tmp_sin[k10 + 1] * (da) * (1.0 - dr) + tmp_sin[k01 + 1] * (1.0 - da) * (dr) + tmp_sin[k11 + 1] * (da) * (dr); if ((int)fabs(imag) > I2MAX) nclip = nclip + 1; sout[1] = (short)clipi2(imag + 0.5); } /*if(nclip > 0) fprintf(stderr," %d integers were clipped \n",nclip);*/ } void bicubic(double *ras, short *s_in, int ydims, int xdims, short *sout) { double dr, da; double rdata[16], idata[16], cz[2]; int i, j, k, kk; int i0, j0; int nclip; short *tmp_sin; /* compute the residual offsets */ nclip = 0; j0 = (int)floor(ras[0]); i0 = (int)floor(ras[1]); dr = ras[0] - (double)j0; da = ras[1] - (double)i0; if (dr < 0. || dr > 1. || da < 0. || da > 1) fprintf(stderr, " dr or da out of bounds %f %f \n", dr, da); /* make sure all 4 corners are within the bounds of the slave array */ if ((i0 - 1) < 0 || (i0 + 2) >= ydims || (j0 - 1) < 0 || (j0 + 2) >= xdims) { sout[0] = 0; sout[1] = 0; } else { /* safe to do the interpolation */ /* shift the pointer by i0-1 lines */ tmp_sin = s_in; tmp_sin++; tmp_sin = s_in + (size_t)(2 * xdims) * (size_t)(i0 - 1) * (tmp_sin - s_in); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { k = i * 4 + j; // kk = 2*xdims*(i0-1+i) + 2*(j0-1+j); kk = 2 * xdims * i + 2 * (j0 - 1 + j); // rdata[k] = s_in[kk]; // idata[k] = s_in[kk+1]; rdata[k] = tmp_sin[kk]; idata[k] = tmp_sin[kk + 1]; } } /* interpolate the real and imaginary data */ bicubic_one(rdata, idata, dr, da, cz); if ((int)fabs(cz[0]) > I2MAX) nclip = nclip + 1; sout[0] = (short)clipi2(cz[0] + 0.5); if ((int)fabs(cz[1]) > I2MAX) nclip = nclip + 1; sout[1] = (short)clipi2(cz[1] + 0.5); } /*if(nclip > 0) fprintf(stderr," %d integers were clipped \n",nclip);*/ } void bisinc(double *ras, short *s_in, int ydims, int xdims, short *sout) { double dr, da, ns2 = NS / 2 - 1; double rdata[NS * NS], idata[NS * NS], cz[2]; int i, j, k, kk; int i0, j0; int nclip; short *tmp_sin; /* compute the residual offsets */ nclip = 0; j0 = (int)floor(ras[0]); i0 = (int)floor(ras[1]); dr = ras[0] - (double)j0; da = ras[1] - (double)i0; if (dr < 0. || dr > 1. || da < 0. || da > 1) fprintf(stderr, " dr or da out of bounds %f %f \n", dr, da); /* make sure all 4 corners are within the bounds of the slave array */ if ((i0 - ns2) < 0 || (i0 + ns2 + 1) >= ydims || (j0 - ns2) < 0 || (j0 + ns2 + 1) >= xdims) { sout[0] = 0; sout[1] = 0; } else { /* safe to do the interpolation */ /* shift the pointer by i0-ns2 lines */ tmp_sin = s_in; tmp_sin++; tmp_sin = s_in + (size_t)(2 * xdims) * (size_t)(i0 - ns2) * (tmp_sin - s_in); for (i = 0; i < NS; i++) { for (j = 0; j < NS; j++) { k = i * NS + j; // kk = 2*xdims*(i0-ns2+i) + 2*(j0-ns2+j); kk = 2 * xdims * i + 2 * (j0 + j - ns2); rdata[k] = tmp_sin[kk]; idata[k] = tmp_sin[kk + 1]; } } /* interpolate the real and imaginary data */ sinc_one(rdata, idata, dr, da, cz); if ((int)fabs(cz[0]) > I2MAX) nclip = nclip + 1; sout[0] = (short)clipi2(cz[0] + 0.5); if ((int)fabs(cz[1]) > I2MAX) nclip = nclip + 1; sout[1] = (short)clipi2(cz[1] + 0.5); } /*if(nclip > 0) fprintf(stderr," %d integers were clipped \n",nclip);*/ } #include "gmtsar.h" #include "lib_functions.h" /*--------------------------------------------------------------*/ void print_prm_params(struct PRM p1, struct PRM p2) { fprintf(stderr, " SLC 1: num_rng_bins %d num_lines %d \n", p1.num_rng_bins, p1.num_lines); fprintf(stderr, " SLC 2: num_rng_bins %d num_lines %d \n", p2.num_rng_bins, p2.num_lines); fprintf(stderr, " lambda %f \n", p2.lambda); fprintf(stderr, " near_range %f \n", p2.near_range); fprintf(stderr, " rng_samp_rate %.7f \n", p2.fs); fprintf(stderr, " sc_clock_start %f \n", p2.SC_clock_start); fprintf(stderr, " sc_clock_stop %f \n", p2.SC_clock_stop); fprintf(stderr, " clock_start %f \n", p2.clock_start); fprintf(stderr, " clock_stop %f \n", p2.clock_stop); fprintf(stderr, " prfm %f \n", p1.prf); fprintf(stderr, " prfs %f \n", p2.prf); fprintf(stderr, " rshift %f \n", p2.rshift + p2.sub_int_r); fprintf(stderr, " ashift %f \n", p2.ashift + p2.sub_int_a); } /*--------------------------------------------------------------*/ void fix_prm_params(struct PRM *p, char *s) { double delr; delr = SOL / p->fs / 2.0; /* these are from prm2gips */ p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift - 1) * delr; p->SC_clock_start = p->SC_clock_start + p->ashift / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } /************************************************************************ * ram2ras maps range and azimuth from a master image location into the * * corresponding range and azimuth location of the slave image. * ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/22/13 * ************************************************************************/ /************************************************************************ * Modification history: * * * * DATE * ************************************************************************/ #include "gmtsar.h" #include #include void ram2ras(struct PRM ps, double *ram, double *ras) { /* this is the range coordinate */ ras[0] = ram[0] + ((ps.rshift + ps.sub_int_r) + ram[0] * ps.stretch_r + ram[1] * ps.a_stretch_r); /* this is the azimuth coordinate */ ras[1] = ram[1] + ((ps.ashift + ps.sub_int_a) + ram[0] * ps.stretch_a + ram[1] * ps.a_stretch_a); } /************************************************************************ computes sinc function kernel for interpolation ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/28/13 * ************************************************************************/ #include #define PI 3.1415926535897932 double sinc_kernel(double x) { double arg, f; arg = fabs(PI * x); if (arg > 0.) { f = sin(arg) / arg; } else { f = 1.; } return (f); } /************************************************************************ * sinc function interpolation * ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/28/13 * ************************************************************************/ #include "gmtsar.h" #include #include double sinc_kernel(double); void sinc_one(double *rdata, double *idata, double x, double y, double *cz) { int i, j, ij, ns2 = NS / 2 - 1; double wx[NS], wy[NS]; double arg, w, wsum, rsum, isum; for (i = 0; i < NS; i++) { arg = fabs(x + ns2 - i); wx[i] = sinc_kernel(arg); arg = fabs(y + ns2 - i); wy[i] = sinc_kernel(arg); } rsum = isum = wsum = 0.0; ij = 0; for (j = 0; j < NS; j++) { for (i = 0; i < NS; i++) { w = wx[i] * wy[j]; rsum += rdata[ij + i] * w; isum += idata[ij + i] * w; wsum += w; } ij += NS; } if (wsum <= 0.0) printf(" error wsum is zero \n"); cz[0] = rsum / wsum; cz[1] = isum / wsum; } GMTSAR_V5.7/gmtsar/offset_topo.c000644 015705 000000 00000013423 13505462013 017533 0ustar00sandwellwheel000000 000000 /* $Id: offset_topo.c 79 2013-06-10 23:43:27Z pwessel $ */ /***************************************************************************/ /* offset_topo reads an amplitude image and a topo_ra grid as well as */ /* an initial guess on how to shift the topo_ra to match the master */ /* The program uses cross correlation to estimate the refined shift to */ /* make the topo_ra match the amplitude image more exactly. */ /* There is an option to output a new shifted topo_ra. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Xiaopeng Tong * * (Scripps Institution of Oceanography) * * Date : 7/22/08 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * ***************************************************************************/ #include "gmtsar.h" int main(int argc, char **argv) { int i, j, k, i1, j1, k1; int is, js, ns; int ni, nj, ntot; int xshft, yshft, ib = 200; /* ib is the width of the edge of the images not used for corr. must be > 2 */ int imax = 0, jmax = 0; double ra, rt, avea, suma, sumt, sumc, corr, denom, maxcorr = -9999.; void *API = NULL; /* GMT control structure */ struct GMT_GRID *A = NULL, *T = NULL, *TS = NULL; /* Grid structure containing ->header and ->data */ /* get the information from the command line */ if (argc < 6) { printf("\noffset_topo [GMTSAR] - Determine topography offset\n \n"); printf("\nUsage: offset_topo amp_master.grd topo_ra.grd rshift ashift ns " "[topo_shift.grd] \n \n"); printf(" amp_master.grd - amplitude image of master \n"); printf(" topo_ra.grd - topo in range/azimuth coordinates of master \n"); printf(" rshift - guess at integer range shift \n"); printf(" ashift - guess at integer azimuth shift \n"); printf(" ns - integer search radius \n"); printf(" topo_shift.grd - shifted topo_ra - optional, will be shifted by " "rshift, ashift \n \n"); exit(-1); } /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; xshft = atoi(argv[3]); yshft = atoi(argv[4]); ns = atoi(argv[5]); /* Get header from amplitude and topo grids */ if ((A = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[1], NULL)) == NULL) return EXIT_FAILURE; if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* make sure the dimensions match */ if (A->header->nx != T->header->nx) { fprintf(stderr, "file dimensions do not match (must have same width)\n"); exit(EXIT_FAILURE); } if (argc >= 7) { if ((TS = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, A->header->wesn, A->header->inc, A->header->registration, GMT_NOTSET, NULL)) == NULL) return EXIT_FAILURE; } /* Read the two grids into A->data and T->data which automatically are * allocated */ if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[1], A) == NULL) return EXIT_FAILURE; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[2], T) == NULL) return EXIT_FAILURE; if (A->header->ny < T->header->ny) ni = A->header->ny; else ni = T->header->ny; fprintf(stderr, " %d %d %d \n", ni, A->header->ny, T->header->ny); nj = T->header->nx; /* compute average */ ntot = 0; suma = sumt = 0.0; for (i = 0; i < ni; i++) { for (j = 0; j < nj; j++) { k = i * nj + j; ntot++; suma = suma + A->data[k]; sumt = sumt + T->data[k]; } } avea = suma / ntot; /* compute the normalized cross correlation function */ for (is = -ns + yshft; is < ns + 1 + yshft; is++) { for (js = -ns + xshft; js < ns + 1 + xshft; js++) { ntot = 0; sumc = suma = sumt = 0.0; for (i = 0 + ib; i < ni - ib; i++) { i1 = i - is; for (j = 0 + ib; j < nj - ib; j++) { j1 = j - js; k = i * nj + j; k1 = i1 * nj + j1; if (i1 >= 0 && i1 < ni && j1 >= 0 && j1 < nj) { ntot++; ra = A->data[k] - avea; rt = T->data[k1 + 1] - T->data[k1 - 1]; sumc = sumc + ra * rt; suma = suma + ra * ra; sumt = sumt + rt * rt; } } } corr = 0; denom = suma * sumt; if (denom > 0.) corr = sumc / sqrt(denom); /*printf(" rshift = %d ashift = %d correlation = %f\n",js,is,corr);*/ if (corr > maxcorr) { maxcorr = corr; imax = is; jmax = js; } } } printf(" optimal: rshift = %d ashift = %d max_correlation = %f\n", jmax, imax, maxcorr); if (argc >= 7) { /* write the shifted topo phase file */ for (i = 0; i < ni; i++) { i1 = i - imax; for (j = 0; j < nj; j++) { j1 = j - jmax; k = i * nj + j; k1 = i1 * nj + j1; TS->data[k] = 0.0f; if (i1 >= 0 && i1 < ni && j1 >= 0 && j1 < nj) TS->data[k] = T->data[k1]; } } /* write the shifted grd-file */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[6], TS)) return EXIT_FAILURE; } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/gmtsar/stringutils.c000644 015705 000000 00000003006 13505462013 017567 0ustar00sandwellwheel000000 000000 #include #include #ifndef __DARWIN_C_LEVEL #ifndef HAVE_STRLCAT /* * '_cups_strlcat()' - Safely concatenate two strings. */ size_t /* O - Length of string */ strlcat(char *dst, /* O - Destination string */ const char *src, /* I - Source string */ size_t size) /* I - Size of destination string buffer */ { size_t srclen; /* Length of source string */ size_t dstlen; /* Length of destination string */ /* * Figure out how much room is left... */ dstlen = strlen(dst); size -= dstlen + 1; if (!size) return (dstlen); /* No room, return immediately... */ /* * Figure out how much room is needed... */ srclen = strlen(src); /* * Copy the appropriate amount... */ if (srclen > size) srclen = size; memcpy(dst + dstlen, src, srclen); dst[dstlen + srclen] = '\0'; return (dstlen + srclen); } #endif /* !HAVE_STRLCAT */ #ifndef HAVE_STRLCPY /* * '_cups_strlcpy()' - Safely copy two strings. */ size_t /* O - Length of string */ strlcpy(char *dst, /* O - Destination string */ const char *src, /* I - Source string */ size_t size) /* I - Size of destination string buffer */ { size_t srclen; /* Length of source string */ /* * Figure out how much room is needed... */ size--; srclen = strlen(src); /* * Copy the appropriate amount... */ if (srclen > size) srclen = size; memcpy(dst, src, srclen); dst[srclen] = '\0'; return (srclen); } #endif /* !HAVE_STRLCPY */ #endif GMTSAR_V5.7/gmtsar/sfd_complex.h000644 015705 000000 00000000341 13505462013 017507 0ustar00sandwellwheel000000 000000 #ifndef SFD_COMPLEX_H #define SFD_COMPLEX_H typedef struct SCOMPLEX { short r, i; } scomplex; typedef struct FCOMPLEX { float r, i; } fcomplex; typedef struct DCOMPLEX { double r, i; } dcomplex; #endif /* SFD_COMPLEX_H */ GMTSAR_V5.7/gmtsar/xcorr.c000644 015705 000000 00000025444 13505462013 016347 0ustar00sandwellwheel000000 000000 /* $Id: xcorr.c 73 2013-04-19 17:59:45Z pwessel $ */ /***************************************************************************/ /* xcorr does a 2-D cross correlation on complex or real images */ /* either using a time convolution or wavenumber multiplication. */ /* */ /***************************************************************************/ /*************************************************************************** * Creator: Rob J. Mellors * * (San Diego State University) * * Date : November 7, 2009 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 011810 Testing and very monor cosmetic modfifications DTS * * 061520 Problem with sub-pixel interpolation RJM * * - fixed bug in 2D interpolationa * * - revised read_xcorr_data to read in all x position * * - reads directly into float rather than int * * - add range interpolation * * - eliminated obsolete options and code * * - renamed xcorr_utils.c print_results.c * * - further testing.... * ***************************************************************************/ /*-------------------------------------------------------*/ #include "gmtsar.h" char *USAGE = "xcorr [GMTSAR] - Compute 2-D cross-correlation of two images\n\n" "\nUsage: xcorr master.PRM slave.PRM [-time] [-real] [-freq] [-nx n] [-ny " "n] [-xsearch xs] [-ysearch ys]\n" "master.PRM PRM file for reference image\n" "slave.PRM PRM file of secondary image\n" "-time use time cross-correlation\n" "-freq use frequency cross-correlation (default)\n" "-real read float numbers instead of complex numbers\n" "-noshift ignore ashift and rshift in prm file (set to 0)\n" "-nx nx number of locations in x (range) direction " "(int)\n" "-ny ny number of locations in y (azimuth) direction " "(int)\n" "-nointerp do not interpolate correlation function\n" "-range_interp ri interpolate range by ri (power of two) [default: 2]\n" "-norange do not range interpolate \n" "-xsearch xs search window size in x (range) direction (int " "power of 2 [32 64 128 256])\n" "-ysearch ys search window size in y (azimuth) direction " "(int power of 2 [32 64 128 256])\n" "-interp factor interpolate correlation function by factor " "(int) [default, 16]\n" "-v verbose\n" "output: \n freq_xcorr.dat (default) \n time_xcorr.dat (if -time option))\n" "\nuse fitoffset.csh to convert output to PRM format\n" "\nExample:\n" "xcorr IMG-HH-ALPSRP075880660-H1.0__A.PRM " "IMG-HH-ALPSRP129560660-H1.0__A.PRM -nx 20 -ny 50 \n" "xcorr file1.grd file2.grd -nx 20 -ny 50 (takes grids with real numbers)\n"; /*-------------------------------------------------------------------------------*/ int do_range_interpolate(void *API, struct FCOMPLEX *c, int nx, int ri, struct FCOMPLEX *work) { int i; /* interpolate c and put into work */ fft_interpolate_1d(API, c, nx, work, ri); /* replace original with interpolated (only half) */ for (i = 0; i < nx; i++) { c[i].r = work[i + nx / 2].r; c[i].i = work[i + nx / 2].i; } return (EXIT_SUCCESS); } /*-------------------------------------------------------------------------------*/ /* complex arrays used in fft correlation */ /* load complex arrays and mask out slave */ /* c1 is master */ /* c2 is slave */ /* c3 used in fft complex correlation */ /* c1, c2, and c3 are npy by npx */ /* d1, d2 are npy by nx (length of line in SLC) */ /*-------------------------------------------------------------------------------*/ void assign_values(void *API, struct xcorr *xc, int iloc) { int i, j, k, sx, mx; double mean1, mean2; /* master and slave x offsets */ mx = xc->loc[iloc].x - xc->npx / 2; sx = xc->loc[iloc].x + xc->x_offset - xc->npx / 2; for (i = 0; i < xc->npy; i++) { for (j = 0; j < xc->npx; j++) { k = i * xc->npx + j; xc->c3[k].i = xc->c3[k].r = 0.0f; xc->c1[k].r = xc->d1[i * xc->m_nx + mx + j].r; xc->c1[k].i = xc->d1[i * xc->m_nx + mx + j].i; xc->c2[k].r = xc->d2[i * xc->s_nx + sx + j].r; xc->c2[k].i = xc->d2[i * xc->s_nx + sx + j].i; } } /* range interpolate */ if (xc->ri > 1) { for (i = 0; i < xc->npy; i++) { do_range_interpolate(API, &xc->c1[i * xc->npx], xc->npx, xc->ri, xc->ritmp); do_range_interpolate(API, &xc->c2[i * xc->npx], xc->npx, xc->ri, xc->ritmp); } } /* convert to amplitude and demean */ mean1 = mean2 = 0.0; for (i = 0; i < xc->npy * xc->npx; i++) { xc->c1[i].r = Cabs(xc->c1[i]); xc->c1[i].i = 0.0f; xc->c2[i].r = Cabs(xc->c2[i]); xc->c2[i].i = 0.0f; mean1 += xc->c1[i].r; mean2 += xc->c2[i].r; } mean1 /= (double)(xc->npy * xc->npx); mean2 /= (double)(xc->npy * xc->npx); for (i = 0; i < xc->npy * xc->npx; i++) { xc->c1[i].r = xc->c1[i].r - (float)mean1; xc->c2[i].r = xc->c2[i].r - (float)mean2; } /* apply mask */ for (i = 0; i < xc->npy * xc->npx; i++) { xc->c1[i].i = xc->c2[i].i = 0.0f; xc->c2[i].r = xc->c2[i].r * (float)xc->mask[i]; xc->i1[i] = (int)(xc->c1[i].r); xc->i2[i] = (int)(xc->c2[i].r); } if (debug) fprintf(stderr, " mean %lf\n", mean1); if (debug) fprintf(stderr, " mean %lf\n", mean2); } /*-------------------------------------------------------------------------------*/ void do_correlation(void *API, struct xcorr *xc) { int i, j, iloc, istep; /* opportunity for multiple processors */ istep = 1; /* allocate arrays */ allocate_arrays(xc); /* make mask */ make_mask(xc); iloc = 0; for (i = 0; i < xc->nyl; i += istep) { /* read in data for each row */ read_xcorr_data(xc, iloc); for (j = 0; j < xc->nxl; j++) { if (debug) fprintf(stderr, " initial: iloc %d (%d,%d)\n", iloc, xc->loc[iloc].x, xc->loc[iloc].y); /* copy values from d1,d2 (real) to c1,c2 (complex) */ assign_values(API, xc, iloc); if (debug) print_complex(xc->c1, xc->npy, xc->npx, 1); if (debug) print_complex(xc->c2, xc->npy, xc->npx, 1); /* correlate patch with data over offsets in time domain */ if (xc->corr_flag < 2) do_time_corr(xc, iloc); /* correlate patch with data over offsets in freq domain */ if (xc->corr_flag == 2) do_freq_corr(API, xc, iloc); /* oversample correlation surface to obtain sub-pixel resolution */ if (xc->interp_flag == 1) do_highres_corr(API, xc, iloc); /* write out results */ print_results(xc, iloc); iloc++; } /* end of x iloc loop */ } /* end of y iloc loop */ } /*-------------------------------------------------------------------------------*/ /* want to avoid circular correlation so mask out most of b */ /* could adjust shape for different geometries */ /*-------------------------------------------------------------------------------*/ void make_mask(struct xcorr *xc) { int i, j, imask; imask = 0; for (i = 0; i < xc->npy; i++) { for (j = 0; j < xc->npx; j++) { xc->mask[i * xc->npx + j] = 1; if ((i < xc->ysearch) || (i >= (xc->npy - xc->ysearch))) { xc->mask[i * xc->npx + j] = imask; } if ((j < xc->xsearch) || (j >= (xc->npx - xc->xsearch))) { xc->mask[i * xc->npx + j] = imask; } } } } /*-------------------------------------------------------------------------------*/ void allocate_arrays(struct xcorr *xc) { int nx, ny, nx_exp, ny_exp; xc->d1 = (struct FCOMPLEX *)malloc(xc->m_nx * xc->npy * sizeof(struct FCOMPLEX)); xc->d2 = (struct FCOMPLEX *)malloc(xc->s_nx * xc->npy * sizeof(struct FCOMPLEX)); xc->i1 = (int *)malloc(xc->npx * xc->npy * sizeof(int)); xc->i2 = (int *)malloc(xc->npx * xc->npy * sizeof(int)); xc->c1 = (struct FCOMPLEX *)malloc(xc->npx * xc->npy * sizeof(struct FCOMPLEX)); xc->c2 = (struct FCOMPLEX *)malloc(xc->npx * xc->npy * sizeof(struct FCOMPLEX)); xc->c3 = (struct FCOMPLEX *)malloc(xc->npx * xc->npy * sizeof(struct FCOMPLEX)); xc->ritmp = (struct FCOMPLEX *)malloc(xc->ri * xc->npx * sizeof(struct FCOMPLEX)); xc->mask = (short *)malloc(xc->npx * xc->npy * sizeof(short)); /* this is size of correlation patch */ xc->corr = (double *)malloc(2 * xc->ri * (xc->nxc) * (xc->nyc) * sizeof(double)); if (xc->interp_flag == 1) { nx = 2 * xc->n2x; ny = 2 * xc->n2y; nx_exp = nx * (xc->interp_factor); ny_exp = ny * (xc->interp_factor); xc->md = (struct FCOMPLEX *)malloc(nx * ny * sizeof(struct FCOMPLEX)); xc->cd_exp = (struct FCOMPLEX *)malloc(nx_exp * ny_exp * sizeof(struct FCOMPLEX)); } } /*-------------------------------------------------------*/ int main(int argc, char **argv) { int input_flag, nfiles; struct xcorr *xc; clock_t start, end; double cpu_time; void *API = NULL; /* GMT API control structure */ xc = (struct xcorr *)malloc(sizeof(struct xcorr)); verbose = 0; debug = 0; input_flag = 0; nfiles = 2; xc->interp_flag = 0; xc->corr_flag = 2; /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; if (argc < 3) die(USAGE, ""); set_defaults(xc); parse_command_line(argc, argv, xc, &nfiles, &input_flag, USAGE); /* read prm files */ if (input_flag == 0) handle_prm(API, argv, xc, nfiles); if (debug) print_params(xc); /* output file */ if (xc->corr_flag == 0) strcpy(xc->filename, "time_xcorr.dat"); if (xc->corr_flag == 1) strcpy(xc->filename, "time_xcorr_Gatelli.dat"); if (xc->corr_flag == 2) strcpy(xc->filename, "freq_xcorr.dat"); xc->file = fopen(xc->filename, "w"); if (xc->file == NULL) die("Can't open output file", xc->filename); /* x locations, y locations */ get_locations(xc); /* calculate correlation at all points */ start = clock(); do_correlation(API, xc); /* write the a_stretch_a based on the PRF differences */ /* fprintf(xc->file,"a_stretch_a = %f \n",xc->astretcha); */ end = clock(); cpu_time = ((double)(end - start)) / CLOCKS_PER_SEC; fprintf(stdout, " elapsed time: %lf \n", cpu_time); fclose(xc->data1); fclose(xc->data2); if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/gmtsar/read_optional_args.c000644 015705 000000 00000002406 13505462013 021037 0ustar00sandwellwheel000000 000000 /* $Id: read_optional_args.c 33 2013-04-06 05:37:15Z pwessel $ */ #include "gmtsar.h" #include "lib_functions.h" /*--------------------------------------------------------------*/ /* read topo_ra and model files if provided */ /* must be in GMT binary grd format */ void read_optional_args(int argc, char **argv, struct PRM *tp, int *topoflag, struct PRM *mp, int *modelflag) { int i; int nx, ny; FILE *fin; for (i = 3; i < argc; i++) { if (strcmp(argv[i], "-topo") == 0) { fprintf(stderr, "reading topo %s\n", argv[i + 1]); strcpy(tp->input_file, argv[i + 1]); fin = fopen(tp->input_file, "r"); if (fin == NULL) die("cannot open topofile", tp->input_file); read_GMT_binary_dimensions(fin, &nx, &ny); fclose(fin); tp->num_rng_bins = nx; tp->num_lines = ny; *topoflag = 1; i++; } if (strcmp(argv[i], "-model") == 0) { fprintf(stderr, "reading model %s\n", argv[i + 1]); strcpy(mp->input_file, argv[i + 1]); fin = fopen(tp->input_file, "r"); if (fin == NULL) die("cannot open model file", mp->input_file); read_GMT_binary_dimensions(fin, &nx, &ny); fclose(fin); mp->num_rng_bins = nx; mp->num_lines = ny; *modelflag = 1; i++; } } } /*--------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/trans_col.c000644 015705 000000 00000002453 13505462013 017171 0ustar00sandwellwheel000000 000000 /************************************************************************ * trans_col calls a 1-D fft on columns of data. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * * * ************************************************************************/ #include "gmt.h" #include "soi.h" #include #include int trans_col(void *API, int xnum, int ynum, fcomplex **data) { int i, k; fcomplex *fft_vec; if ((fft_vec = (fcomplex *)malloc(ynum * sizeof(fcomplex))) == NULL) { fprintf(stderr, "trans_col: Can't allocate memory for fft_vec.\n"); return (-1); } for (i = 0; i < xnum; i++) { for (k = 0; k < ynum; k++) { fft_vec[k] = data[k][i]; } // dir = -1; // cfft1d_(&ynum,fft_vec,&dir); GMT_FFT_1D(API, (float *)fft_vec, ynum, GMT_FFT_FWD, GMT_FFT_COMPLEX); for (k = 0; k < ynum; k++) { data[k][i] = fft_vec[k]; } } free((void *)fft_vec); return (0); } GMTSAR_V5.7/gmtsar/sarleader_ALOS.h000644 015705 000000 00000111022 13505462013 017763 0ustar00sandwellwheel000000 000000 /* provides structures to read ALOS SAR tapes */ /* reall just a CEOS reader */ #ifndef SARLEADER_ALOS_H #define SARLEADER_ALOS_H /* include files were modified from the rceos.c programs written by C. Tomassini & F. Lorenna other format information from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada Table 6.1.2.2 "SARLEADER" FILE POINTER RECORD CONTENTS page 6. R. J. Mellors July 1997, IGPP-SIO from esa annex A (Document ER-IS-EPO-GS-5902.I) Issue 2.1.1 Paul F. Jamason 25-FEB-1997, IGPP-SIO Modified to read ALOS format Product Format Description (PALSAR Level 1.0) R. J. Mellors June 2007, SDSU 6/1/07 SARLEADER_DSS_RCS_ALOS 7th line changed to "%4c%4c%16c%16c%16c%16c%16c"\ (2 16c at end rather than 1 32c) */ /* ALOS raw data set summary record format */ #define SARLEADER_DSS_RCS_ALOS \ "%4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c" \ "%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c" \ "%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c" \ "%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c" \ "%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c" \ "%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c" \ "%4c%4c%16c%16c%16c%16c%16c" \ "%4c%8c%8c%8c%8c%4c%8c%16c%4c%4c%16c%4c%28c%120c%8c%8c%2048c%26c" /* ALOS raw data set summary corresponding log file output */ #define SARLEADER_DSS_RVL_ALOS(SP) \ (SP)->dss_rec_seq_num, (SP)->chan_ind, (SP)->reserved1, (SP)->scene_number, (SP)->input_scene_center_time, (SP)->spare1, \ (SP)->center_lat, (SP)->center_long, (SP)->center_heading, (SP)->ellipsoid_designator, (SP)->ellipsoid_semimajor_axis, \ (SP)->ellipsoid_semiminor_axis, (SP)->earth_constant, (SP)->spare2, (SP)->ellipsoid_j2, (SP)->ellipsoid_j3, \ (SP)->ellipsoid_j4, (SP)->spare, (SP)->reserved_new, (SP)->scene_centre_line_number, (SP)->scene_centre_pixel_number, \ (SP)->scene_length, (SP)->scene_width, (SP)->spare3, (SP)->nchan, (SP)->spare4, (SP)->mission_identifier, \ (SP)->sensor_id_and_mode, (SP)->orbit_number, (SP)->lat_nadir_center, (SP)->long_nadir_center, \ (SP)->heading_nadir_center, (SP)->clock_angle, (SP)->incidence_angle_center, (SP)->radar_freq, (SP)->radar_wavelength, \ (SP)->motion_compensation, (SP)->range_pulse_code_specifier, (SP)->range_pulse_amplitude_const, \ (SP)->range_pulse_amplitude_lin, (SP)->range_pulse_amplitude_quad, (SP)->range_pulse_amplitude_cube, \ (SP)->range_pulse_amplitude_quart, (SP)->range_pulse_phase_const, (SP)->range_pulse_phase_lin, \ (SP)->range_pulse_phase_quad, (SP)->range_pulse_phase_cube, (SP)->range_pulse_phase_quart, (SP)->chirp_extraction_index, \ (SP)->spare5, (SP)->sampling_rate, (SP)->range_gate_early_edge_start_image, (SP)->range_pulse_length, (SP)->reserved2, \ (SP)->range_compressed_flag, (SP)->reserved3, (SP)->quantisation_in_bits, (SP)->quantizer_descriptor, (SP)->dc_bias_i, \ (SP)->dc_bias_q, (SP)->gain_imbalance, (SP)->spare6, (SP)->reserved4, (SP)->antenna_mech_bor, (SP)->reserved5, \ (SP)->nominal_prf, (SP)->reserved6, (SP)->satelite_encoded_binary_time, (SP)->satelite_clock_time, \ (SP)->satelite_clock_increment, (SP)->spare7, (SP)->processing_facility_identifier, (SP)->processing_system_id, \ (SP)->processing_version_id, (SP)->reserved7, (SP)->product_type_id, (SP)->alg_id, (SP)->nlooks_az, \ (SP)->neff_looks_range, (SP)->bandwidth_look_az, (SP)->bandwidth_look_range, (SP)->total_look_bandwidth_az, \ (SP)->total_look_bandwidth_range, (SP)->w_func_designator_az, (SP)->w_func_designator_range, (SP)->data_input_source, \ (SP)->nom_res_3db_range, (SP)->nom_res_az, (SP)->reserved8, (SP)->a_track_dop_freq_const_early_image, \ (SP)->a_track_dop_freq_lin_early_image, (SP)->a_track_dop_freq_quad_early_image, (SP)->spare8, \ (SP)->c_track_dop_freq_const_early_image, (SP)->c_track_dop_freq_lin_early_image, \ (SP)->c_track_dop_freq_quad_early_image, (SP)->time_direction_along_pixel, (SP)->time_direction_along_line, \ (SP)->a_track_dop_freq_rate_const_early_image, (SP)->a_track_dop_freq_rate_lin_early_image, \ (SP)->a_track_dop_freq_rate_quad_early_image, (SP)->spare9, (SP)->c_track_dop_freq_rate_const_early_image, \ (SP)->c_track_dop_freq_rate_lin_early_image, (SP)->c_track_dop_freq_rate_quad_early_image, (SP)->spare10, \ (SP)->line_content_indicator, (SP)->clut_lock_flag, (SP)->autofocussing_flag, (SP)->line_spacing, \ (SP)->pixel_spacing_range, (SP)->range_compression_designator, (SP)->spare11, (SP)->spare12, \ (SP)->calibration_data_indicator, (SP)->start_line_upper_image, (SP)->stop_line_upper_image, \ (SP)->start_line_bottom_image, (SP)->stop_line_bottom_image, (SP)->PRF_switch, (SP)->PRF_switch_line, (SP)->spare13, \ (SP)->yaw_steering_mode, (SP)->parameter_table, (SP)->nom_offnadir_angle, (SP)->antenna_beam_number, (SP)->spare14, \ (SP)->spare15, (SP)->num_anno_points, (SP)->spare16, (SP)->image_annotation, (SP)->spare17 struct sarleader_dss_ALOS { char dss_rec_seq_num[4]; /*dss record sequence number (1)*/ char chan_ind[4]; /*sar channel indicator (1)*/ char reserved1[16]; /* scene identifier*/ char scene_number[32]; char input_scene_center_time[32]; char spare1[16]; char center_lat[16]; char center_long[16]; char center_heading[16]; char ellipsoid_designator[16]; char ellipsoid_semimajor_axis[16]; char ellipsoid_semiminor_axis[16]; char earth_constant[16]; char spare2[16]; char ellipsoid_j2[16]; char ellipsoid_j3[16]; char ellipsoid_j4[16]; char spare[16]; char reserved_new[16]; char scene_centre_line_number[8]; char scene_centre_pixel_number[8]; char scene_length[16]; char scene_width[16]; char spare3[16]; char nchan[4]; char spare4[4]; char mission_identifier[16]; char sensor_id_and_mode[32]; char orbit_number[8]; char lat_nadir_center[8]; char long_nadir_center[8]; char heading_nadir_center[8]; char clock_angle[8]; char incidence_angle_center[8]; char radar_freq[8]; char radar_wavelength[16]; char motion_compensation[2]; char range_pulse_code_specifier[16]; char range_pulse_amplitude_const[16]; char range_pulse_amplitude_lin[16]; char range_pulse_amplitude_quad[16]; char range_pulse_amplitude_cube[16]; char range_pulse_amplitude_quart[16]; char range_pulse_phase_const[16]; char range_pulse_phase_lin[16]; char range_pulse_phase_quad[16]; char range_pulse_phase_cube[16]; char range_pulse_phase_quart[16]; char chirp_extraction_index[8]; char spare5[8]; char sampling_rate[16]; char range_gate_early_edge_start_image[16]; char range_pulse_length[16]; char reserved2[4]; char range_compressed_flag[4]; char reserved3[32]; char quantisation_in_bits[8]; char quantizer_descriptor[12]; char dc_bias_i[16]; char dc_bias_q[16]; char gain_imbalance[16]; char spare6[32]; char reserved4[16]; char antenna_mech_bor[16]; char reserved5[4]; char nominal_prf[16]; char reserved6[32]; char satelite_encoded_binary_time[16]; char satelite_clock_time[32]; char satelite_clock_increment[8]; char spare7[8]; char processing_facility_identifier[16]; char processing_system_id[8]; char processing_version_id[8]; char reserved7[32]; char product_type_id[32]; char alg_id[32]; char nlooks_az[16]; char neff_looks_range[16]; char bandwidth_look_az[16]; char bandwidth_look_range[16]; char total_look_bandwidth_az[16]; char total_look_bandwidth_range[16]; char w_func_designator_az[32]; char w_func_designator_range[32]; char data_input_source[16]; char nom_res_3db_range[16]; char nom_res_az[16]; char reserved8[32]; char a_track_dop_freq_const_early_image[16]; char a_track_dop_freq_lin_early_image[16]; char a_track_dop_freq_quad_early_image[16]; char spare8[16]; char c_track_dop_freq_const_early_image[16]; char c_track_dop_freq_lin_early_image[16]; char c_track_dop_freq_quad_early_image[16]; char time_direction_along_pixel[8]; char time_direction_along_line[8]; char a_track_dop_freq_rate_const_early_image[16]; char a_track_dop_freq_rate_lin_early_image[16]; char a_track_dop_freq_rate_quad_early_image[16]; char spare9[16]; char c_track_dop_freq_rate_const_early_image[16]; char c_track_dop_freq_rate_lin_early_image[16]; char c_track_dop_freq_rate_quad_early_image[16]; char spare10[16]; char line_content_indicator[8]; char clut_lock_flag[4]; char autofocussing_flag[4]; char line_spacing[16]; char pixel_spacing_range[16]; char range_compression_designator[16]; char spare11[16]; char spare12[16]; char calibration_data_indicator[4]; char start_line_upper_image[8]; char stop_line_upper_image[8]; char start_line_bottom_image[8]; char stop_line_bottom_image[8]; char PRF_switch[4]; char PRF_switch_line[8]; char spare13[16]; char yaw_steering_mode[4]; char parameter_table[4]; char nom_offnadir_angle[16]; char antenna_beam_number[4]; char spare14[28]; char spare15[120]; char num_anno_points[8]; char spare16[8]; char image_annotation[2048]; char spare17[26]; }; #define SARLEADER_DSS_WCS_ALOS \ "*********** DSS RECORD ***********\n" \ "dss_rec_seq_num ==> %.4s\n" \ "chan_ind ==> %.4s\n" \ "reserved1 ==> %.16s\n" \ "scene_number ==> %.32s\n" \ "input_scene_center_time ==> %.32s\n" \ "spare1 ==> %.16s\n" \ "center_lat ==> %.16s\n" \ "center_long ==> %.16s\n" \ "center_heading ==> %.16s\n" \ "ellipsoid_designator ==> %.16s\n" \ "ellipsoid_semimajor_axis ==> %.16s\n" \ "ellipsoid_semiminor_axis ==> %.16s\n" \ "earth_constant ==> %.16s\n" \ "spare2 ==> %.16s\n" \ "ellipsoid_j2 ==> %.16s\n" \ "ellipsoid_j3 ==> %.16s\n" \ "ellipsoid_j4 ==> %.16s\n" \ "spare ==> %.16s\n" \ "reserved_new ==> %.16s\n" \ "scene_centre_line_number ==> %.8s\n" \ "scene_centre_pixel_number ==> %.8s\n" \ "scene_length ==> %.16s\n" \ "scene_width ==> %.16s\n" \ "spare3 ==> %.16s\n" \ "nchan ==> %.4s\n" \ "spare4 ==> %.4s\n" \ "mission_identifier ==> %.16s\n" \ "sensor_id_and_mode ==> %.32s\n" \ "orbit_number ==> %.8s\n" \ "lat_nadir_center ==> %.8s\n" \ "long_nadir_center ==> %.8s\n" \ "heading_nadir_center ==> %.8s\n" \ "clock_angle ==> %.8s\n" \ "incidence_angle_center ==> %.8s\n" \ "radar_freq ==> %.8s\n" \ "radar_wavelength ==> %.16s\n" \ "motion_compensation ==> %.2s\n" \ "range_pulse_code_specifier ==> %.16s\n" \ "range_pulse_amplitude_const ==> %.16s\n" \ "range_pulse_amplitude_lin ==> %.16s\n" \ "range_pulse_amplitude_quad ==> %.16s\n" \ "range_pulse_amplitude_cube ==> %.16s\n" \ "range_pulse_amplitude_quart ==> %.16s\n" \ "range_pulse_phase_const ==> %.16s\n" \ "range_pulse_phase_lin ==> %.16s\n" \ "range_pulse_phase_quad ==> %.16s\n" \ "range_pulse_phase_cube ==> %.16s\n" \ "range_pulse_phase_quart ==> %.16s\n" \ "chirp_extraction_index ==> %.8s\n" \ "spare5 ==> %.8s\n" \ "sampling_rate ==> %.16s\n" \ "range_gate_early_edge_start_image ==> %.16s\n" \ "range_pulse_length ==> %.16s\n" \ "reserved2 ==> %.4s\n" \ "range_compressed_flag ==> %.4s\n" \ "reserved3 ==> %.32s\n" \ "quantisation_in_bits ==> %.8s\n" \ "quantizer_descriptor ==> %.12s\n" \ "dc_bias_i ==> %.16s\n" \ "dc_bias_q ==> %.16s\n" \ "gain_imbalance ==> %.16s\n" \ "spare6 ==> %.32s\n" \ "reserved4 ==> %.16s\n" \ "antenna_mech_bor ==> %.16s\n" \ "reserved5 ==> %.4s\n" \ "nominal_prf ==> %.16s\n" \ "reserved6 ==> %.32s\n" \ "satelite_encoded_binary_time ==> %.16s\n" \ "satelite_clock_time ==> %.32s\n" \ "satelite_clock_increment ==> %.8s\n" \ "spare7 ==> %.8s\n" \ "processing_facility_identifier ==> %.16s\n" \ "processing_system_id ==> %.8s\n" \ "processing_version_id ==> %.8s\n" \ "reserved7 ==> %.32s\n" \ "product_type_id ==> %.32s\n" \ "alg_id ==> %.32s\n" \ "nlooks_az ==> %.16s\n" \ "neff_looks_range ==> %.16s\n" \ "bandwidth_look_az ==> %.16s\n" \ "bandwidth_look_range ==> %.16s\n" \ "total_look_bandwidth_az ==> %.16s\n" \ "total_look_bandwidth_range ==> %.16s\n" \ "w_func_designator_az ==> %.32s\n" \ "w_func_designator_range ==> %.32s\n" \ "data_input_source ==> %.16s\n" \ "nom_res_3db_range ==> %.16s\n" \ "nom_res_az ==> %.16s\n" \ "reserved8 ==> %.32s\n" \ "a_track_dop_freq_const_early_image ==> %.16s\n" \ "a_track_dop_freq_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_quad_early_image ==> %.16s\n" \ "spare8 ==> %.16s\n" \ "c_track_dop_freq_const_early_image ==> %.16s\n" \ "c_track_dop_freq_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_quad_early_image ==> %.16s\n" \ "time_direction_along_pixel ==> %.8s\n" \ "time_direction_along_line ==> %.8s\n" \ "a_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare9 ==> %.16s\n" \ "c_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare10 ==> %.16s\n" \ "line_content_indicator ==> %.8s\n" \ "clut_lock_flag ==> %.4s\n" \ "autofocussing_flag ==> %.4s\n" \ "line_spacing ==> %.16s\n" \ "pixel_spacing_range ==> %.16s\n" \ "range_compression_designator ==> %.16s\n" \ "spare11 ==> %.16s\n" \ "spare12 ==> %.16s\n" \ "calibration_data_indicator ==> %.4s\n" \ "start_line_upper_image ==> %.8s\n" \ "stop_line_upper_image ==> %.8s\n" \ "start_line_bottom_image ==> %.8s\n" \ "stop_line_bottom_image ==> %.8s\n" \ "PRF_switch ==> %.4s\n" \ "PRF_switch_line ==> %.8s\n" \ "spare13 ==> %.16s\n" \ "yaw_steering_mode ==> %.4s\n" \ "parameter_table ==> %.4s\n" \ "nom_offnadir_angle ==> %.16s\n" \ "antenna_beam_number ==> %.4s\n" \ "spare14 ==> %.28s\n" \ "spare15 ==> %.120s\n" \ "num_anno_points ==> %.8s\n" \ "spare16 ==> %.8s\n" \ "image_annotation ==> %.2048s\n" \ "spare17 ==> %.26s\n" /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define PLATFORM_RCS_ALOS \ "%32c%16c%16c%16c%16c%16c%16c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%" \ "16c%16c%16c" #define PLATFORM_RVL_ALOS(SP) \ (SP)->orbital_elements, (SP)->orbital_element_1, (SP)->orbital_element_2, (SP)->orbital_element_3, (SP)->orbital_element_4, \ (SP)->orbital_element_5, (SP)->orbital_element_6, (SP)->num_data_points, (SP)->year_of_data_points, \ (SP)->month_of_data_points, (SP)->day_of_data_points, (SP)->day_of_data_points_in_year, (SP)->sec_of_day_of_data, \ (SP)->data_points_time_gap, (SP)->ref_coord_sys, (SP)->greenwhich_mean_hour_angle, (SP)->a_track_pos_err, \ (SP)->c_track_pos_err, (SP)->radial_pos_err, (SP)->a_track_vel_err, (SP)->c_track_vel_err, (SP)->radial_vel_err /* ALOS stuff added by RJM June 2007 */ struct platform_ALOS { char orbital_elements[32]; char orbital_element_1[16]; char orbital_element_2[16]; char orbital_element_3[16]; char orbital_element_4[16]; char orbital_element_5[16]; char orbital_element_6[16]; char num_data_points[4]; char year_of_data_points[4]; char month_of_data_points[4]; char day_of_data_points[4]; char day_of_data_points_in_year[4]; char sec_of_day_of_data[22]; char data_points_time_gap[22]; char ref_coord_sys[64]; char greenwhich_mean_hour_angle[22]; char a_track_pos_err[16]; char c_track_pos_err[16]; char radial_pos_err[16]; char a_track_vel_err[16]; char c_track_vel_err[16]; char radial_vel_err[16]; }; #define POSITION_VECTOR_RCS_ALOS "%22c%22c%22c%22c%22c%22c" #define POSITION_VECTOR_RVL_ALOS(SP) (SP)->pos_x, (SP)->pos_y, (SP)->pos_z, (SP)->vel_x, (SP)->vel_y, (SP)->vel_z struct position_vector_ALOS { char pos_x[22]; char pos_y[22]; char pos_z[22]; char vel_x[22]; char vel_y[22]; char vel_z[22]; }; #define PLATFORM_WCS_ALOS \ "*********** PLATFORM POSITION VECTOR **********\n" \ "orbital_elements ==> |%.32s|\n" \ "orbital_element_1 ==> |%.16s|\n" \ "orbital_element_2 ==> |%.16s|\n" \ "orbital_element_3 ==> |%.16s|\n" \ "orbital_element_4 ==> |%.16s|\n" \ "orbital_element_5 ==> |%.16s|\n" \ "orbital_element_6 ==> |%.16s|\n" \ "num_data_points ==> |%.4s|\n" \ "year_of_data_points ==> |%.4s|\n" \ "month_of_data_points ==> |%.4s|\n" \ "day_of_data_points ==> |%.4s|\n" \ "day_of_data_points_in_year ==> |%.4s|\n" \ "sec_of_day_of_data ==> |%.22s|\n" \ "data_points_time_gap ==> |%.22s|\n" \ "ref_coord_sys ==> |%.64s|\n" \ "greenwhich_mean_hour_angle ==> |%.22s|\n" \ "a_track_pos_err ==> |%.16s|\n" \ "c_track_pos_err ==> |%.16s|\n" \ "radial_pos_err ==> |%.16s|\n" \ "a_track_vel_err ==> |%.16s|\n" \ "c_track_vel_err ==> |%.16s|\n" \ "radial_vel_err ==> |%.16s|\n" #define POSITION_VECTOR_WCS_ALOS \ "*********** PLATFORM VECTOR **********\n" \ "pos_x ==> %.22s\n" \ "pos_y ==> %.22s\n" \ "pos_z ==> %.22s\n" \ "vel_x ==> %.22s\n" \ "vel_y ==> %.22s\n" \ "vel_z ==> %.22s\n\n" struct attitude_info_ALOS { char num_att_data_points[4]; }; #define ATTITUDE_INFO_RCS_ALOS "%4c" #define ATTITUDE_INFO_WCS_ALOS \ "*********** ATTITUDE INFO **********\n" \ "num_att_data_points ==> |%.4s|\n" #define ATTITUDE_INFO_RVL_ALOS(SP) (SP)->num_att_data_points #define ATTITUDE_DATA_WCS_ALOS \ "*********** ATTITUDE DATA **********\n" \ "day_of_year ==> |%.4s|\n" \ "millisecond_day ==> |%.8s|\n" \ "pitch_data_quality ==> |%.4s|\n" \ "roll_data_quality ==> |%.4s|\n" \ "yaw_data_quality ==> |%.4s|\n" \ "pitch ==> |%.14s|\n" \ "roll ==> |%.14s|\n" \ "yaw ==> |%.14s|\n" \ "pitch_rate_data_quality ==> |%.4s|\n" \ "roll_rate_data_quality ==> |%.4s|\n" \ "yaw_rate_data_quality ==> |%.4s|\n" \ "pitch_rate ==> |%.14s|\n" \ "roll_rate ==> |%.14s|\n" \ "yaw_rate ==> |%.14s|\n" #define ATTITUDE_DATA_RCS_ALOS "%4c%8c%4c%4c%4c%14c%14c%14c%4c%4c%4c%14c%14c%14c" #define ATTITUDE_DATA_RVL_ALOS(SP) \ (SP)->day_of_year, (SP)->millisecond_day, (SP)->pitch_data_quality, (SP)->roll_data_quality, (SP)->yaw_data_quality, \ (SP)->pitch, (SP)->roll, (SP)->yaw, (SP)->pitch_rate_data_quality, (SP)->roll_rate_data_quality, \ (SP)->yaw_rate_data_quality, (SP)->pitch_rate, (SP)->roll_rate, (SP)->yaw_rate struct attitude_data_ALOS { char day_of_year[4]; char millisecond_day[8]; char pitch_data_quality[4]; char roll_data_quality[4]; char yaw_data_quality[4]; char pitch[14]; char roll[14]; char yaw[14]; char pitch_rate_data_quality[4]; char roll_rate_data_quality[4]; char yaw_rate_data_quality[4]; char pitch_rate[14]; char roll_rate[14]; char yaw_rate[14]; }; struct SAR_info { struct sarleader_fdr_fixseg *fixseg; struct sarleader_fdr_varseg *varseg; struct sarleader_dss_ALOS *dss_ALOS; struct platform_ALOS *platform_ALOS; struct position_vector_ALOS *position_ALOS; struct attitude_info_ALOS *attitude_info_ALOS; struct attitude_data_ALOS *attitude_ALOS; }; #endif /* SARLEADER_ALOS_H */ GMTSAR_V5.7/gmtsar/split_aperture.c000644 015705 000000 00000015605 13505462013 020252 0ustar00sandwellwheel000000 000000 // // split_aperture.c // // // Created by Xiaohua Xu on 1/30/19. // // Program used for creating along-track multi-aperture interferogram // /*************************************************************************** * Modification history: * * * * DATE * ***************************************************************************/ #include "gmt.h" #include "gmtsar.h" #include #include #include #include #include #include int write_column_slc(short *, short *, int, int, int); int read_column_slc(short *, short *, int, int, int, int); fcomplex fmean(short *, int); char *USAGE = "\nUSAGE: split_aperture prm_file\n\n" " program used to split azimuth spectrum.\n\n" " SLCs are bandpassed output is SLCF (forward) SLCB (backward)\n\n"; int main(int argc, char **argv) { if (argc != 2) die("",USAGE); FILE *SLC, *SLC_F, *SLC_B; struct PRM p1; int nl,num_rng_bins,i,j,fin, fout_f, fout_b, nffti; char str_f[1024],str_b[1024]; short *buf, *buf_f, *buf_b; short *in, *out_f, *out_b; fcomplex *fbuf, *fbuf_f, *fbuf_b,fm; size_t st_size; void *API = NULL; double f_f=0.0, f_b=0.0, w_f=0.0, w_b=0.0, prf; if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; // read in PRM file get_prm(&p1,argv[1]); nl = p1.num_valid_az * p1.num_patches; num_rng_bins = p1.num_rng_bins; prf = p1.prf; nffti = find_fft_length(nl); // open all SLCs if ((SLC = fopen(p1.SLC_file, "rb")) == NULL) die("Can't open ", p1.SLC_file); strcpy(str_f,p1.SLC_file); strcat(str_f,"F"); if ((SLC_F = fopen(str_f, "wb")) == NULL) die("Can't open ", str_f); strcpy(str_b,p1.SLC_file); strcat(str_b,"B"); if ((SLC_B = fopen(str_b, "wb")) == NULL) die("Can't open ", str_b); // malloc buf buf = (short *)malloc(nffti * 2 * sizeof(short)); buf_f = (short *)malloc(nl * 2 * sizeof(short)); buf_b = (short *)malloc(nl * 2 * sizeof(short)); fbuf = (fcomplex *)malloc(nffti * sizeof(fcomplex)); fbuf_f = (fcomplex *)malloc(nffti * sizeof(fcomplex)); fbuf_b = (fcomplex *)malloc(nffti * sizeof(fcomplex)); // write original image fprintf(stderr,"Duplicating original SLCs (%d X %d) ...\n",nl,num_rng_bins); for (i=0;i outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - lon, lat, elevation look_E look_N look_U " "[ASCII default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: SAT_look master.PRM < topo.llt > topo.lltn \n"; void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void hermite_c(double *, double *, double *, int, int, double, double *, int *); void set_prm_defaults(struct PRM *); int main(int argc, char **argv) { FILE *fprm1; int otype; double rln, rlt, rht, t1, t2, tm; double ts, rng, thet, relp, telp; double xp[3]; /* double xt[3],dr; */ double rp[3]; double dd[6]; /* dummy for output double precision */ float ds[6]; /* dummy for output single precision */ /* double r0,rf,a0,af; */ double rad = PI / 180.; double fll; int i, j, k, nrec, npad = 8000; int goldop(); int stai, endi, midi, xmin; double **orb_pos; struct PRM prm; struct SAT_ORB *orb; FILE *ldrfile; int calorb_alos(struct SAT_ORB *, double **orb_pos, double ts, double t1, int nrec); double len, unit_x, unit_y, unit_z; double dist(); double Rx[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double Rz[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double A[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double local_look[3] = {0, 0, 0}; double pole_lon, pole_lat, b, g; /* Make sure usage is correct and files can be opened */ if (argc < 2 || argc > 3) { fprintf(stderr, "%s\n", USAGE); exit(-1); } /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 3) { if (!strcmp(argv[2], "-bos")) otype = 2; else if (!strcmp(argv[2], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_prm_defaults(&prm); get_sio_struct(fprm1, &prm); /* dubugging fprintf(stderr,"debug\n"); fprintf(stderr,"%s\n",prm.led_file); fprintf(stderr,"%lf\n",prm.fs); fprintf(stderr,"%d\n",prm.num_rng_bins); fprintf(stderr,"%d\n",prm.num_valid_az); fprintf(stderr,"%lf\n",prm.rc); fprintf(stderr,"%lf\n",prm.ra); fprintf(stderr,"%lf\n",prm.prf); fprintf(stderr,"%lf\n",prm.RE); fprintf(stderr,"%lf\n",prm.sub_int_a); fprintf(stderr,"%lf\n",prm.SC_clock_start); fprintf(stderr,"%lf\n",prm.clock_start); fprintf(stderr,"%d\n",prm.nrows); fprintf(stderr,"%d\n",prm.num_patches); fprintf(stderr,"%lf\n",prm.near_range); fprintf(stderr,"rshift = %d\n",prm.rshift); fprintf(stderr,"sub_int_r = %lf\n",prm.sub_int_r); fprintf(stderr,"chirp_ext = %d\n",prm.chirp_ext); */ fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); read_orb(ldrfile, &prm, orb); #if 0 dr = 0.5*SOL/prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ /* fprintf(stderr,"ts=%lf,t1=%lf,nrec=%d\n",ts,t1,nrec); */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* look at the orb_pos for(i=0;i<4;i++) { for (j=0;j 180.) rp[1] = rp[1] - 360.; /* xt[0]=-1.0; */ /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); xmin = goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); /* xt[0]=rng; xt[1]=tm; */ /* fprintf(stderr,"rng = %f, tm = %f",rng,tm); */ /* calculate the unit look vector originated from ground point to satellite in the global cartesian coordinate */ /* fprintf(stderr,"x y z of the satellite minimum: %f, %f, %f\n",orb_pos[1][xmin],orb_pos[2][xmin],orb_pos[3][xmin]); */ len = dist(xp[0], xp[1], xp[2], xmin, orb_pos); unit_x = (orb_pos[1][xmin] - xp[0]) / len; unit_y = (orb_pos[2][xmin] - xp[1]) / len; unit_z = (orb_pos[3][xmin] - xp[2]) / len; /* fprintf(stderr,"unit look vector: %f, %f, * %f\n",unit_x,unit_y,unit_z); */ /* there is a way to test the sign is right */ /* compute the look vector in local coordinate */ /* rotate the global coordinate to a local coordinate system */ /* location of the rotation pole */ /* refer to a matlab version rot3d.m to check the formula */ pole_lon = fmod((rln + 360.0), 360.0); /* fprintf(stderr,"pole_lon %f\n",pole_lon); */ pole_lat = rlt; /* construct a rotation matrix */ b = (pole_lat - 90) / 180. * 3.14159; Rx[0][0] = 1; Rx[0][1] = 0; Rx[0][2] = 0; Rx[1][0] = 0; Rx[1][1] = cos(b); Rx[1][2] = -sin(b); Rx[2][0] = 0; Rx[2][1] = sin(b); Rx[2][2] = cos(b); g = (pole_lon + 90) / 180. * 3.14159; Rz[0][0] = cos(g); Rz[0][1] = sin(g); Rz[0][2] = 0; Rz[1][0] = -sin(g); Rz[1][1] = cos(g); Rz[1][2] = 0; Rz[2][0] = 0; Rz[2][1] = 0; Rz[2][2] = 1; /* zero A */ for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) A[i][j] = 0; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) for (k = 0; k < 3; k++) A[i][j] += Rx[i][k] * Rz[k][j]; /* print out the matrix */ /* for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rx[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rz[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",A[i][j]); putchar('\n'); } */ for (i = 0; i < 3; i++) local_look[i] = A[i][0] * unit_x + A[i][1] * unit_y + A[i][2] * unit_z; /* compute the range and azimuth in pixel space xt[0] = (xt[0] - prm.near_range)/dr-(prm.rshift+prm.sub_int_r)+prm.chirp_ext; xt[1] = prm.prf*(xt[1]-t1)-(prm.ashift+prm.sub_int_a); fprintf(stderr,"xt[0] = %f\n",xt[0]); if(xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) continue; fprintf(stderr,"%f %f %f %f %f \n",xt[0],xt[1],rp[2],rp[1],rp[0]); */ if (otype == 1) { /* fprintf(stdout,"%f %f %f %f %f * %f\n",rp[1],rp[0],rp[2],unit_x,unit_y,unit_z); */ fprintf(stdout, "%f %f %f %f %f %f\n", rp[1], rp[0], rp[2], local_look[0], local_look[1], local_look[2]); } else if (otype == 2) { ds[0] = (float)rp[1]; ds[1] = (float)rp[0]; ds[2] = (float)rp[2]; ds[3] = (float)local_look[0]; ds[4] = (float)local_look[1]; ds[5] = (float)local_look[2]; fwrite(ds, sizeof(float), 6, stdout); } else if (otype == 3) { dd[0] = rp[1]; dd[1] = rp[0]; dd[2] = rp[2]; dd[3] = local_look[0]; dd[4] = local_look[1]; dd[5] = local_look[2]; fwrite(dd, sizeof(double), 6, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL && fabs(f1-f2) > 1e-6) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct SAT_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/gmtsar/polyfit.c000644 015705 000000 00000005220 13505462013 016666 0ustar00sandwellwheel000000 000000 #include #include #include void gauss_jordan(double **, double *, double *, int *); void polyfit(double *T, double *Y, double *C, int *Mp, int *Np) /* T - array of independent variable of length M - input */ /* Y - array of dependent variable of length M - input */ /* C - array of polynomial coefficients length N - output */ /* FORTRAN callable */ { double **A, *B; int i, j, k; int M, N; M = *Mp; N = *Np; if (N > M) { printf(" underdetermined system \n"); exit(-1); } /* malloc the memory for A, and B */ if ((A = (double **)malloc(N * sizeof(double *))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for A-matrix.\n"); exit(-1); } for (i = 0; i < N; i++) { if ((A[i] = (double *)malloc(N * sizeof(double))) == NULL) { fprintf(stderr, "sorry, couldn't allocate memory for A-matrix.\n"); exit(-1); } } if ((B = (double *)malloc(N * sizeof(double))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for B-vector.\n"); exit(-1); } /* zero all the arrays */ for (i = 0; i < N; i++) { B[i] = 0.0; C[i] = 0.0; for (j = 0; j < N; j++) A[i][j] = 0.0; } /* set up A and B for polynomial fit of order N */ for (j = 0; j < N; j++) { for (k = 0; k < M; k++) { B[j] = B[j] + Y[k] * pow(T[k], j); } } for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { for (k = 0; k < M; k++) A[i][j] = A[i][j] + pow(T[k], j + i); } } gauss_jordan(A, B, C, &N); /* solve the equations */ free(A); free(B); } void gauss_jordan(double **A, double *B, double *X, int *Np) { /* routine for solving an N by N system of linear equations B = A*X using Gaussian elimination with back substitution. FORTRAN callable */ double temp, factor, sum; int m, u, p; int j, k, l, N, N0; N = *Np; N0 = N - 1; for (k = 0; k < N; k++) { m = k; for (l = m + 1; l < N; l++) { if (*(*(A + k) + m) != 0.0) { factor = *(*(A + k) + l) / *(*(A + k) + m); /* perform row operation on A */ for (j = 0; j < N; j++) *(*(A + j) + l) = *(*(A + j) + l) - factor * (*(*(A + j) + m)); /* perform row operation on B */ *(B + l) = *(B + l) - factor * (*(B + m)); } } for (j = 0; j < N; j++) { temp = *(*(A + j) + k); *(*(A + j) + k) = *(*(A + j) + m); *(*(A + j) + m) = temp; } temp = *(B + k); *(B + k) = *(B + m); *(B + m) = temp; } /* back substitute to construct solution vector X */ *(X + N0) = *(B + N0) / (*(*(A + N0) + N0)); for (p = 0; p < N; p++) { sum = 0.0; for (u = N0 - p + 1; u < N; u++) sum = sum + (*(*(A + u) + N0 - p)) * (*(X + u)); *(X + N0 - p) = (*(B + N0 - p) - sum) / (*(*(A + N0 - p) + N0 - p)); } } GMTSAR_V5.7/gmtsar/rng_filter.c000644 015705 000000 00000003053 13505462013 017335 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_filter applies a low-pass filter in the fourier domain by * * zeroing in wavenumber space * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography) * * Date : 10/09/14 * ************************************************************************/ /************************************************************************ * Modification History * * 01/25/18 DTS modified to use the GMT fft routines * * Date * ************************************************************************/ #include "gmt.h" #include "siocomplex.h" #include "soi.h" #include void rng_filter(void *API, fcomplex *cin, int nffti, fcomplex *cout) { int i, nf, nt; nf = .70 * nffti / 2; nt = nffti - 1; /* do the forward fft */ // dir = -1; // cfft1d_(&nffti,cin,&dir); GMT_FFT_1D(API, (float *)cin, nffti, GMT_FFT_FWD, GMT_FFT_COMPLEX); /* first zero the output array */ for (i = 0; i < nffti; i++) { cout[i].r = 0.; cout[i].r = 0.; } /* only keep the lower frequencies */ for (i = 0; i < nf; i++) { cout[i].r = cin[i].r; cout[i].i = cin[i].i; cout[nt - i].r = cin[nt - i].r; cout[nt - i].i = cin[nt - i].i; } /* now inverse fft */ // dir = 1; // cfft1d_(&nffti,cout,&dir); GMT_FFT_1D(API, (float *)cout, nffti, GMT_FFT_INV, GMT_FFT_COMPLEX); } GMTSAR_V5.7/gmtsar/SAT_baseline.c000644 015705 000000 00000051657 13505462013 017510 0ustar00sandwellwheel000000 000000 /* $Id$ */ /******************************************************************************* * Compute the interferometric baseline between reference and repeat * * images. Also estimates the crude offset for image matching. * *******************************************************************************/ /******************************************************************************** * Creator: Matt Wei, 04/26/10 * * * * Based on the program ALOS_baseline by * Creator: Sandwell and Rob Mellors ** (San Diego State University, Scripps Institution of Oceanography) * Date : *06/07/2007 * * Modifications: * 29/26/2018 by Xiaohua Xu * Adding the along track component *for Baseline called B_offset * This further ensures phase closure * ********************************************************************************/ #include "gmtsar.h" #include "orbit.h" char *USAGE = "Usage: (two modes)\n" "mode 1:\n\n" "SAT_baseline PRM_master PRM_master\n\n" "This is used to compute height information\n" "(writes out height information for appending to PRM file)\n" "\nmode 2:\n\n" "SAT_baseline PRM_master PRM_slave \n\n" "PRM_master PRM file for reference image\n" "PRM_slave PRM file of secondary image\n" "Please make sure the orbit file data is in PRM \n" "Program runs through repeat orbit to find nearest point \n" "to the start, center and end on the reference orbit\n" "(writes out parameters for appending to PRM file)\n"; /* "\nor mode 2:\n\n" "SAT_baseline -input file\n\n" "file: list of PRM files\n" "first file is assumed to be master\n" "following are slaves\n" "(writes out decimal year, Bperp, and PRM name)\n"; */ /* function prototypes */ double find_dist(double, double, double, double, double, double); double find_alpha_degrees(double, double); void find_unit_vectors(double, double, double, double *, double *, double *, double *); void endpoint_distance(int, double, double, double, double, double *, double *, double *, double *, int *); void find_parallel_perp_baseline(struct PRM, struct PRM, double, double *, double *); void write_prm_baseline(struct PRM); void get_sign(struct PRM, double, double, double, double, int *); void write_bperp(struct PRM, char *); void baseline_parse_command_line(char **, int *, int *); void read_input_file(char *, int, char **); void baseline(struct PRM *, struct SAT_ORB *, int, int, char **, double); void read_all_ldr(struct PRM *, struct SAT_ORB *, int); void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void llt2rat_sub(char *, double *, double *); void interpolate_SAT_orbit_slow(struct SAT_ORB *orb, double time, double *, double *, double *, int *); void interpolate_SAT_orbit(struct SAT_ORB *, double *, double *, double *, double, double *, double *, double *, int *); void calc_height_velocity(struct SAT_ORB *, struct PRM *, double, double, double *, double *, double *, double *, double *); void polyfit(double *, double *, double *, int *, int *); int main(int argc, char **argv) { int i; int input_flag, nfiles; double fs0 = 0.; struct PRM *r; /* reference orbit is 0; repeats are > 0*/ struct SAT_ORB *orb; /* reference orbit is 0; repeats are > 0*/ char **filename; FILE *prmfile; if (argc < 3) die(USAGE, ""); verbose = 0; input_flag = 0; /* read command line */ baseline_parse_command_line(argv, &nfiles, &input_flag); filename = malloc(nfiles * sizeof(char *)); for (i = 0; i < nfiles; i++) filename[i] = malloc(128 * sizeof(char)); r = malloc(nfiles * sizeof(struct PRM)); if (input_flag == 1) read_input_file(argv[2], nfiles, filename); for (i = 0; i < nfiles; i++) { if (input_flag == 0) strcpy(filename[i], argv[i + 1]); if ((prmfile = fopen(filename[i], "r")) == NULL) die("Can't open prmfile ", filename[i]); get_sio_struct(prmfile, &r[i]); /* check whether range sampling rate is same. If not, warning */ if (i == 0) fs0 = r[0].fs; if (r[i].fs != fs0) { fprintf(stderr, "\nWARNING:\nRange_sampling_rate is not consistant.\nYou " "need to do FBD/FBS conversion.\n\n"); } fclose(prmfile); } printf("SC_identity = %d \n", r[0].SC_identity); orb = malloc(nfiles * sizeof(struct SAT_ORB)); read_all_ldr(r, orb, nfiles); baseline(r, orb, nfiles, input_flag, filename, fs0); return (EXIT_SUCCESS); } /*---------------------------------------------------------------------------*/ /* Get time info and find the orbit */ void read_all_ldr(struct PRM *r, struct SAT_ORB *orb, int nfiles) { int i; FILE *ldrfile; for (i = 0; i < nfiles; i++) { if (i == 0) printf("......master LED file %s \n", r[0].led_file); if (i != 0) printf(".........slave LED file %s \n", r[i].led_file); /* open each ldrfile and read into structure r */ if ((ldrfile = fopen(r[i].led_file, "r")) == NULL) die("Can't open ldrfile %s", r[i].led_file); read_orb(ldrfile, &r[i], &orb[i]); fclose(ldrfile); } } /* interpolation with polynomial refinement */ void poly_interp(struct SAT_ORB *orb, double *t, double *b, double t_ref, double x0, double y0, double z0, double shift) { int ntt = 100, k, ir; double *time, *bs; double ddt, xs, ys, zs; double d3[3]; int nc = 3; ddt = 0.01 / ntt; time = malloc(ntt * sizeof(double)); bs = malloc(ntt * sizeof(double)); for (k = 0; k < ntt; k++) { time[k] = (k - ntt / 2 + 0.5) * ddt; interpolate_SAT_orbit_slow(orb, t_ref + time[k] + shift, &xs, &ys, &zs, &ir); bs[k] = find_dist(xs, ys, zs, x0, y0, z0); bs[k] = bs[k] * bs[k]; } polyfit(time, bs, d3, &ntt, &nc); *t = t_ref + shift - d3[1] / (2.0 * d3[2]); *b = sqrt(d3[0] - d3[1] * d3[1] / 4.0 / d3[2]); free(time); free(bs); } /*---------------------------------------------------------------------------*/ void baseline(struct PRM *r, struct SAT_ORB *orb, int nfiles, int input_flag, char **filename, double fs0) { int ii, nd, ir; int k, ns, ns2, m1, m2, m3, sign1, sign2, sign3; double dr, dt, ds; double bv1, bv2, bv3, bh1, bh2, bh3; double t11, t12, t13, t21, t22, t23; double x11, y11, z11, x12, y12, z12, x13, y13, z13; double x21, y21, z21, x22, y22, z22, x23, y23, z23; double ru1, ru2, ru3, xu1, yu1, zu1, xu2, yu2, zu2, xu3, yu3, zu3; double ts, xs, ys, zs; double b1, b2, b3, bpara, bperp; //, b_tmp; double *pt, *p, *pv, pt0; double height, re_c, vg, vtot, rdot; double radar_look[3] = {0, 0, 0}; double re, rho, b, theta; double t_vel, t_sta, x_vel, x_sta, y_vel, y_sta, z_vel, z_sta, ru33, xu33, yu33, zu33, o1x[3], o1y[3], o1z[3], ru4, xu4, yu4, zu4; double glob_look[3], target[3], target_llt[3], fll; double target_rat_ref[3] = {0, 0, 0}; double target_rat_rep[3] = {0, 0, 0}; double far_range; double dstart; // double d1=0.0,d2=0.0,d3=0.0; /* work on the reference orbit */ get_seconds(r[0], &t11, &t12); t13 = (t11 + t12) / 2.; dr = 0.5 * SOL / fs0; dt = 0.5 / r[0].prf; ns = (int)((t12 - t11) / dt); /* seconds of frame */ dt = (t12 - t11) / (ns - 1); /* set the extension to 50% unless ERS or Envisat and then set to 200% */ ns2 = ns * 0.5; if (r[0].SC_identity < 3 || r[0].SC_identity == 4 || r[0].SC_identity == 10) ns2 = ns * 2; nd = orb[0].nd; for (ii = 1; ii < nfiles; ii++) { if (nd < orb[ii].nd) nd = orb[ii].nd; } /* compute reference start, center and end point */ interpolate_SAT_orbit_slow(&orb[0], t11, &x11, &y11, &z11, &ir); interpolate_SAT_orbit_slow(&orb[0], t12, &x12, &y12, &z12, &ir); interpolate_SAT_orbit_slow(&orb[0], t13, &x13, &y13, &z13, &ir); /* allocate memory */ pt = malloc(nd * sizeof(double)); p = malloc(nd * sizeof(double)); pv = malloc(nd * sizeof(double)); /* work on the repeat orbit */ ii = 1; get_seconds(r[ii], &t21, &t22); t23 = (t21 + t22) / 2.; pt0 = (24.0 * 60.0 * 60.0) * orb[ii].id + orb[ii].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[ii].dsec; verbose = 0; /* look at other orbit information and recalculate the height using the ashift */ calc_height_velocity(&orb[ii], &r[ii], t22, t22, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_end = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t23, t23, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t21, t21, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_start = height + re_c - r[ii].RE; /* loop over repeat orbit */ /* add 2 scene lengths (ns2) for buffer at each end */ b1 = b2 = b3 = -1.0; pt0 = (24.0 * 60.0 * 60.0) * orb[ii].id + orb[ii].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[ii].dsec; /* set some defeault values */ m1 = -99999; x21 = y21 = z21 = -99999.0; x22 = y22 = z22 = -99999.0; x23 = y23 = z23 = -99999.0; printf("hahahah\n"); /* roughly compute baseline */ for (k = -ns2; k < ns + ns2; k++) { ts = t21 + k * dt; interpolate_SAT_orbit(&orb[ii], pt, p, pv, ts, &xs, &ys, &zs, &ir); ds = find_dist(xs, ys, zs, x11, y11, z11); if (b1 < 0.0 || ds < b1) endpoint_distance(k, ds, xs, ys, zs, &b1, &x21, &y21, &z21, &m1); ds = find_dist(xs, ys, zs, x12, y12, z12); if (b2 < 0.0 || ds < b2) endpoint_distance(k, ds, xs, ys, zs, &b2, &x22, &y22, &z22, &m2); ds = find_dist(xs, ys, zs, x13, y13, z13); if (b3 < 0.0 || ds < b3) endpoint_distance(k, ds, xs, ys, zs, &b3, &x23, &y23, &z23, &m3); } // refine the baseline computation with polynomial fit dstart = fabs(t11 - t21); // check whether it's the computation of same orbit. if (dstart > 10.) { poly_interp(&orb[ii], &ts, &b1, t21, x11, y11, z11, m1 * dt); interpolate_SAT_orbit_slow(&orb[ii], ts, &xs, &ys, &zs, &ir); x21 = xs; y21 = ys; z21 = zs; r[ii].B_offset_start = (ts - t21) * r[ii].vel; // seems this does not make much difference // if (r[0].SC_identity == 10) { /* approximate a secondary shift along orbit for alpha and baseline change */ // poly_interp(&orb[0],&ts,&b_tmp,t11,x21,y21,z21,m1*dt); // d1 = + (t11-ts)*r[0].vel; // r[ii].B_offset_start = r[ii].B_offset_start + d1; //} /* compute more orbital information at the min baseline based on m1 */ // calc_height_velocity(&orb[ii], &r[ii], ts, ts, &height, &re_c, &vg, // &vtot, &rdot); poly_interp(&orb[ii], &ts, &b2, t21, x12, y12, z12, m2 * dt); interpolate_SAT_orbit_slow(&orb[ii], ts, &xs, &ys, &zs, &ir); x22 = xs; y22 = ys; z22 = zs; r[ii].B_offset_end = (ts - t22) * r[ii].vel; // if (r[0].SC_identity == 10) { // poly_interp(&orb[0],&ts,&b_tmp,t11,x22,y22,z22,m2*dt); // d2 = (t12-ts)*r[0].vel; // r[ii].B_offset_end = r[ii].B_offset_end + d2; //} poly_interp(&orb[ii], &ts, &b3, t21, x13, y13, z13, m3 * dt); interpolate_SAT_orbit_slow(&orb[ii], ts, &xs, &ys, &zs, &ir); x23 = xs; y23 = ys; z23 = zs; r[ii].B_offset_center = (ts - t23) * r[ii].vel; // if (r[0].SC_identity == 10) { // poly_interp(&orb[0],&ts,&b_tmp,t11,x23,y23,z23,m3*dt); // d3 = (t13-ts)*r[0].vel; // r[ii].B_offset_center = r[ii].B_offset_center + d3; //} } /* Not sure what these codes are used for // change back the dt settings dt = 0.5/r[0].prf; ns = (int) ((t12 - t11)/dt); // seconds of frame dt = (t12 - t11)/(ns - 1); // set the extension to 50% unless ERS or Envisat and then set to 200% ns2 = ns*0.5; if(r[0].SC_identity < 3 || r[0].SC_identity == 4 || r[0].SC_identity == 10) ns2=ns*2; */ /* fd_orbit = -2.0*rdot/r[0].lambda; */ /* shouldn't happen .. */ if (x21 == -99999.0) die("x11 not initialized", ""); if (x22 == -99999.0) die("x12 not initialized", ""); if (m1 == -99999) die("m1 not initialized", ""); /* put in structure */ r[ii].baseline_start = b1; r[ii].baseline_end = b2; r[ii].baseline_center = b3; /* compute unit vectors */ find_unit_vectors(x11, y11, z11, &ru1, &xu1, &yu1, &zu1); find_unit_vectors(x12, y12, z12, &ru2, &xu2, &yu2, &zu2); find_unit_vectors(x13, y13, z13, &ru3, &xu3, &yu3, &zu3); /* compute sign of horizontal baseline */ get_sign(r[ii], x11, y11, x21, y21, &sign1); get_sign(r[ii], x12, y12, x22, y22, &sign2); get_sign(r[ii], x13, y13, x23, y23, &sign3); /* compute baseline components (horizontal and vertical) */ bv1 = (x21 - x11) * xu1 + (y21 - y11) * yu1 + (z21 - z11) * zu1; bh1 = sign1 * sqrt(b1 * b1 - bv1 * bv1); //+ d1*d1); bv2 = (x22 - x12) * xu2 + (y22 - y12) * yu2 + (z22 - z12) * zu2; bh2 = sign2 * sqrt(b2 * b2 - bv2 * bv2); // + d2*d2); bv3 = (x23 - x13) * xu3 + (y23 - y13) * yu3 + (z23 - z13) * zu3; bh3 = sign3 * sqrt(b3 * b3 - bv3 * bv3); // + d3*d3); /* angle from horizontal */ r[ii].alpha_start = find_alpha_degrees(bv1, bh1); r[ii].alpha_end = find_alpha_degrees(bv2, bh2); r[ii].alpha_center = find_alpha_degrees(bv3, bh3); /* calculate parallel baseline */ find_parallel_perp_baseline(r[0], r[ii], dr, &bpara, &bperp); r[ii].bpara = bpara; r[ii].bperp = bperp; /* find expected offset in pixels (rshift and yshift) */ /* r[ii].ashift = -1*m1; r[ii].rshift = -1*(int) (r[ii].bpara/dr + (r[ii].near_range - r[0].near_range)/dr); fprintf(stderr,"ashift = %d\nrshift = %d\n",r[ii].ashift,r[ii].rshift); */ /* a more accurate way to estimate offset in pixels */ /* since t11 point is out of scene, I need add a fraction of orbit time to it */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_sta = t11 + 2.0; interpolate_SAT_orbit(&orb[0], pt, p, pv, t_sta, &x_sta, &y_sta, &z_sta, &ir); re = r[0].RE; far_range = r[0].near_range + dr * r[0].num_rng_bins; rho = (r[0].near_range + far_range) / 2.0; b = r[0].ht + r[0].RE; theta = acos((b * b + rho * rho - re * re) / 2 / b / rho); /* find a unit look vector point to middle range of first line of the scene */ /* in radar coordinate */ radar_look[0] = 0; radar_look[1] = cos(theta); radar_look[2] = -sin(theta); if (strncmp(r[0].lookdir, "L", 1) == 0) radar_look[2] = sin(theta); /* form a rotation matrix to convert the look vector from radar coordinate to global cartesian coordinate */ find_unit_vectors(x_sta, y_sta, z_sta, &ru33, &xu33, &yu33, &zu33); o1y[0] = -xu33; o1y[1] = -yu33; o1y[2] = -zu33; /* get the velocity of the satellite */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_vel = t11 + 2.1; interpolate_SAT_orbit(&orb[0], pt, p, pv, t_vel, &x_vel, &y_vel, &z_vel, &ir); find_unit_vectors(x_vel - x_sta, y_vel - y_sta, z_vel - z_sta, &ru4, &xu4, &yu4, &zu4); o1x[0] = xu4; o1x[1] = yu4; o1x[2] = zu4; cross3(o1x, o1y, o1z); /* look vector in global cartesian cooridate is */ glob_look[0] = radar_look[0] * o1x[0] + radar_look[1] * o1y[0] + radar_look[2] * o1z[0]; glob_look[1] = radar_look[0] * o1x[1] + radar_look[1] * o1y[1] + radar_look[2] * o1z[1]; glob_look[2] = radar_look[0] * o1x[2] + radar_look[1] * o1y[2] + radar_look[2] * o1z[2]; /* shoot the vector on the ground and get the tie point */ target[0] = x_sta + glob_look[0] * rho; target[1] = y_sta + glob_look[1] * rho; target[2] = z_sta + glob_look[2] * rho; fll = (r[0].ra - r[0].rc) / r[0].ra; xyz2plh(target, target_llt, r[0].ra, fll); printf("lon_tie_point = %f\n", (target_llt[1] > 180.0) ? target_llt[1] - 360.0 : target_llt[1]); printf("lat_tie_point = %f\n", target_llt[0]); llt2rat_sub(filename[0], target_llt, target_rat_ref); llt2rat_sub(filename[ii], target_llt, target_rat_rep); /* find expected offset in pixels (rshift and yshift) */ r[ii].ashift = target_rat_rep[1] - target_rat_ref[1]; r[ii].rshift = target_rat_rep[0] - target_rat_ref[0]; /* write out prm format */ if (input_flag == 0) write_prm_baseline(r[ii]); /* write out in x,y format bperp baseline only */ if (input_flag == 1) write_bperp(r[ii], filename[ii]); } /*---------------------------------------------------------------------------*/ void read_input_file(char *inputfilename, int nfiles, char **filename) { int i; FILE *inputfile; if ((inputfile = fopen(inputfilename, "r")) == NULL) die("Can't open ", inputfilename); for (i = 0; i < nfiles; i++) fscanf(inputfile, " %s ", filename[i]); fclose(inputfile); } /*---------------------------------------------------------------------------*/ void baseline_parse_command_line(char **argv, int *nfiles, int *input_flag) { char tmp[132]; FILE *inputfile; *nfiles = 0; if (strncmp(argv[1], "-input", 6) != 0) { printf("using command line\n"); *nfiles = 2; } else { printf("using input file \n"); *input_flag = 1; if ((inputfile = fopen(argv[2], "r")) == NULL) die("Can't open ", argv[2]); /* count the number of files in inputfile */ while (fscanf(inputfile, " %s ", tmp) != EOF) (*nfiles)++; fclose(inputfile); } } /*---------------------------------------------------------------------------*/ void write_bperp(struct PRM r1, char *string) { FILE *GMTscript; float year, dyear; GMTscript = fopen("GMTscript", "w"); year = floor(r1.SC_clock_start / 1000.0); dyear = (r1.SC_clock_start - 1000.0 * year) / 365.0; year = year + dyear; /* write date, baseline */ fprintf(stdout, " %f %f %s\n", year, r1.bperp, string); /* fprintf(GMTscript,"psxy Bperp.dat -R%f/%f/%f/%f -JX8 -P > Bperp.ps\n"); */ fclose(GMTscript); } /*---------------------------------------------------------------------------*/ void get_sign(struct PRM r, double x11, double y11, double x21, double y21, int *sign) { double rlnref, rlnrep; rlnref = atan2(y11, x11); rlnrep = atan2(y21, x21); *sign = 1.0; if (strncmp(r.orbdir, "D", 1) == 0) *sign = -1 * (*sign); if (strncmp(r.lookdir, "L", 1) == 0) *sign = -1 * (*sign); if (rlnrep < rlnref) *sign = -1 * (*sign); } /*---------------------------------------------------------------------------*/ void write_prm_baseline(struct PRM rep) { printf("SC_vel = %.12f \n", rep.vel); printf("SC_height = %.12f \n", rep.ht); printf("SC_height_start = %.12f \n", rep.ht_start); printf("SC_height_end = %.12f \n", rep.ht_end); printf("earth_radius = %.12f \n", rep.RE); printf("rshift = %d \n", rep.rshift); printf("sub_int_r = 0.0 \n"); printf("ashift = %d\n", rep.ashift); printf("sub_int_a = 0.0 \n"); printf("B_parallel = %.12f \n", rep.bpara); printf("B_perpendicular = %.12f \n", rep.bperp); printf("baseline_start = %.12f \n", rep.baseline_start); printf("baseline_center = %.12f \n", rep.baseline_center); printf("baseline_end = %.12f \n", rep.baseline_end); printf("alpha_start = %.12f \n", rep.alpha_start); printf("alpha_center = %.12f \n", rep.alpha_center); printf("alpha_end = %.12f \n", rep.alpha_end); printf("B_offset_start = %.12f \n", rep.B_offset_start); printf("B_offset_center = %.12f \n", rep.B_offset_center); printf("B_offset_end = %.12f \n", rep.B_offset_end); } /*---------------------------------------------------------------------------*/ void find_parallel_perp_baseline(struct PRM ref, struct PRM rep, double dr, double *bpara, double *bperp) { double rc, ra, rad, rlook, far_range, arg1, arg2; rad = M_PI / 180.0; /* this is not ellipsoid axis */ /* use reference ?? */ rc = ref.RE + ref.ht; ra = ref.RE; far_range = rep.near_range + dr * rep.num_rng_bins; /* calculate the look angle 1/2 way between the near and far range */ arg1 = (rep.near_range * rep.near_range + rc * rc - ra * ra) / (2. * rep.near_range * rc); arg2 = (far_range * far_range + rc * rc - ra * ra) / (2. * far_range * rc); rlook = acos((arg1 + arg2) / 2.0); /* add the incidence angle correction to get the incidence angle */ arg1 = (-rep.near_range * rep.near_range + rc * rc + ra * ra) / (2. * ra * rc); arg2 = (-far_range * far_range + rc * rc + ra * ra) / (2. * ra * rc); rlook = rlook + acos((arg1 + arg2) / 2.0); *bpara = rep.baseline_start * sin(rlook - rep.alpha_start * rad); *bperp = rep.baseline_start * cos(rlook - rep.alpha_start * rad); } /*---------------------------------------------------------------------------*/ double find_alpha_degrees(double bv, double bh) { double a, rad; rad = M_PI / 180.0; a = atan2(bv, bh); a = a / rad; return (a); } /*---------------------------------------------------------------------------*/ double find_dist(double xs, double ys, double zs, double x, double y, double z) { double ds; double dx, dy, dz; dx = xs - x; dy = ys - y; dz = zs - z; ds = sqrt(dx * dx + dy * dy + dz * dz); return (ds); } /*---------------------------------------------------------------------------*/ void endpoint_distance(int k, double ds, double xs, double ys, double zs, double *b, double *x, double *y, double *z, int *m) { *b = ds; *x = xs; *y = ys; *z = zs; *m = k; } /*---------------------------------------------------------------------------*/ void find_unit_vectors(double x, double y, double z, double *ru, double *xu, double *yu, double *zu) { *ru = sqrt(x * x + y * y + z * z); *xu = x / (*ru); *yu = y / (*ru); *zu = z / (*ru); } /*---------------------------------------------------------------------------*/ GMTSAR_V5.7/gmtsar/phase2topo.c000644 015705 000000 00000012551 13505462013 017271 0ustar00sandwellwheel000000 000000 /* $Id: phase2topo.c 74 2013-04-21 02:57:20Z pwessel $ */ /***************************************************************************/ /* phase2topo reads residual phase and computes residual topography. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 10 July, 1999 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE: Nov 23 2012 - modified to Use GMT i/o functions [P.Wessel] * * DATE: Nov 9 2010 - modified to read and write grd files * * - use a linear relationship between the stacked * * residual phase and DEM corrections * * - this linear relationship is valid because the * * deviations from the SRTM is small (a few meters) * * by Xiaopeng * ***************************************************************************/ #include "gmtsar.h" char *USAGE = "phase2topo [GMTSAR] - Compute residual topography\n\n" "Usage: phase2topo master.PRM topo_in.grd res_phase.grd topo_out.grd \n \n" " master.PRM - master PRM files used for mapping \n" " topo_in.grd - name of input topography in the radar co-ordinates of " "the master. \n" " res_phase.grd - name of input phase per unit baseline\n" " topo_out.grd - name of output corrected topography in the radar " "co-ordinates of the master. \n\n" " Note the residual phase should be scaled by the perpendicular " "baseline (see bperp). \n"; void calc_phase2topo(int xdim, double range0, double drange, double re, double height, float *scale, float *res) { int k; double rho, etat; double sint, c, c2, ret, ret2; c = re + height; c2 = c * c; for (k = 0; k < xdim; k++) { ret = re + scale[k]; ret2 = ret * ret; rho = range0 + k * drange; etat = ((rho * rho + c2 - ret2) / (2. * rho * c)); if (etat >= 1.) die("eta >= 0", ""); sint = sqrt(1. - etat * etat); scale[k] = (float)(res[k] * rho * c * sint / ret); /* printf("ret = %f res[k] = %f rho = %f c = %f sint = %f scale * = %f \n", ret, res[k], rho, c, sint, scale[k]); */ } } int main(int argc, char **argv) { unsigned int col, row; uint64_t node; int ixdec; float *scale = NULL, *res = NULL; double drange, cnst; struct PRM prm; void *API = NULL; /* GMT control structure */ struct GMT_GRID *P = NULL, *T = NULL; /* Grid structure containing ->header and ->data */ debug = 0; if (argc < 5) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; /* Get header from grd rat file */ if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* Get header from residual phase file */ if ((P = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[3], NULL)) == NULL) return EXIT_FAILURE; /* Make sure the topo and residual phase have the same dimensions */ if (!(T->header->nx == P->header->nx && T->header->ny == P->header->ny)) { die("\n", "topo and residue phase should have the same dimensions. \n"); } get_prm(&prm, argv[1]); /* Open and read PRM file */ /* allocate the memory for work arrays */ scale = malloc(T->header->nx * sizeof(float)); res = malloc(T->header->nx * sizeof(float)); ixdec = (int)prm.num_rng_bins / T->header->nx; drange = ixdec * SOL / (2.0 * prm.fs); cnst = -prm.lambda / 4.0 / M_PI; /* Read the two grids into P->data and T->data which automatically are * allocated */ if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[2], T) == NULL) return EXIT_FAILURE; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[3], P) == NULL) return EXIT_FAILURE; for (row = 0; row < T->header->ny; row++) { /* For each row */ for (col = 0; col < T->header->nx; col++) { /* For each column, get node number */ node = GMT_Get_Index(API, T->header, row, col); scale[col] = T->data[node]; res[col] = P->data[node]; } calc_phase2topo(T->header->nx, prm.near_range, drange, prm.RE, prm.ht, scale, res); for (col = 0; col < T->header->nx; col++) { /* For each column, get node number */ node = GMT_Get_Index(API, T->header, row, col); T->data[node] += (float)(cnst * scale[col] + T->data[node]); } } /* Write the output grd file */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[4], T)) return EXIT_FAILURE; if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/gmtsar/aastretch.c000644 015705 000000 00000005235 13505462013 017164 0ustar00sandwellwheel000000 000000 /************************************************************************ * aastretch performs an azimuth dependent azimuth interpolation * ************************************************************************/ /************************************************************************ * Creator: Meng Wei, Scripps Institution of Oceanography) * * Date : 09/29/06 * ************************************************************************/ /************************************************************************ * Modification History * * 02/23/11 DTS modified interpolation to use cubic spline * * Date * ************************************************************************/ #include "gmt.h" #include "gmtsar.h" #include "siocomplex.h" #include "soi.h" #include void aastretch(fcomplex **fdata, int ipatch, int nrows, int num_valid_az, int num_rng_bins, float coef) { int i, j, low_ind, istart, nsmx; double *xs, *real, *imag, *ss, *as; double yss, test; low_ind = (nrows - num_valid_az) / 2; nsmx = low_ind / 2; /* check to see if the total shift will be larger than 1/4 the length of the * aperture */ if (coef * num_valid_az >= nsmx || coef * num_valid_az <= -nsmx) { fprintf(stderr, "The a_stretch_a is too large.\n"); exit(-1); } /* allocate memory for vectors */ xs = (double *)malloc((nrows) * sizeof(double)); ss = (double *)malloc((nrows) * sizeof(double)); as = (double *)malloc((nrows) * sizeof(double)); real = (double *)malloc((nrows) * sizeof(double)); imag = (double *)malloc((nrows) * sizeof(double)); /* calculate the original and shifted positions */ for (i = 0; i < nrows; i++) { xs[i] = (ipatch - 1) * num_valid_az + i - low_ind; } /* process each column */ for (j = 0; j < num_rng_bins; j++) { /* get a column of data from the 2-D array */ for (i = 0; i < nrows; i++) { real[i] = fdata[i][j].r; imag[i] = fdata[i][j].i; } /* interpolate each column - real then imaginary */ spline_(&istart, &nrows, xs, real, ss, as); for (i = low_ind - nsmx; i < nrows - nsmx; i++) { yss = xs[i] * (1 + coef); evals_(&istart, &yss, &nrows, xs, real, ss, &test); fdata[i][j].r = (float)test; } spline_(&istart, &nrows, xs, imag, ss, as); for (i = low_ind - nsmx; i < nrows - nsmx; i++) { yss = xs[i] * (1 + coef); evals_(&istart, &yss, &nrows, xs, imag, ss, &test); fdata[i][j].i = (float)test; } } free((double *)xs); free((double *)real); free((double *)imag); free((double *)ss); free((double *)as); } GMTSAR_V5.7/gmtsar/lib_strfuncs.c000644 015705 000000 00000000726 13505462013 017703 0ustar00sandwellwheel000000 000000 #include "lib_functions.h" #include #include /* Removes leading and trailing whitespaces from a string */ char *trimwhitespace(char *str) { char *end; // Trim leading space while (isspace((unsigned char)*str)) str++; if (*str == 0) // All spaces? return str; // Trim trailing space end = str + strlen(str) - 1; while (end > str && isspace((unsigned char)*end)) end--; // Write new null terminator *(end + 1) = 0; return str; } GMTSAR_V5.7/gmtsar/intp_coef.c000644 015705 000000 00000003253 13505462013 017152 0ustar00sandwellwheel000000 000000 /************************************************************************ * intp_coef calculates an 8 pt. sinc function for range migration * * interpolation. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "soi.h" #include void intp_coef(int nfilter, float *xintp) { int i, j; float x, y; /* compute the interpolation factors */ for (i = 0; i <= nfilter; i++) { j = i * 8; x = ((float)i) / ((float)nfilter); y = sin(PI * x) / PI; if ((x != 0.0f) && (x != 1.0f)) { xintp[j] = -y / (3.0f + x); xintp[j + 1] = y / (2.0f + x); xintp[j + 2] = -y / (1.0f + x); xintp[j + 3] = y / x; xintp[j + 4] = y / (1.0f - x); xintp[j + 5] = -y / (2.0f - x); xintp[j + 6] = y / (3.0f - x); xintp[j + 7] = -y / (4.0f - x); } else if (x == 0.0f) { xintp[j] = 0.0f; xintp[j + 1] = 0.0f; xintp[j + 2] = 0.0f; xintp[j + 3] = 1.0f; xintp[j + 4] = 0.0f; xintp[j + 5] = 0.0f; xintp[j + 6] = 0.0f; xintp[j + 7] = 0.0f; } else if (x == 1.0f) { xintp[j] = 0.0f; xintp[j + 1] = 0.0f; xintp[j + 2] = 0.0f; xintp[j + 3] = 0.0f; xintp[j + 4] = 1.0f; xintp[j + 5] = 0.0f; xintp[j + 6] = 0.0f; xintp[j + 7] = 0.0f; } } } GMTSAR_V5.7/gmtsar/lib_functions.h000644 015705 000000 00000010525 13505462013 020047 0ustar00sandwellwheel000000 000000 /* $Id: lib_functions.h 39 2013-04-07 00:49:34Z pwessel $ */ /* include files to define sarleader structure */ #ifndef LIB_FUNCTIONS_H #define LIB_FUNCTIONS_H #include "sarleader_ALOS.h" #include "sarleader_fdr.h" #include "sfd_complex.h" #include "xcorr.h" #include "PRM.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* function prototypes */ void null_sio_struct(struct PRM *); void get_sio_struct(FILE *, struct PRM *); void put_sio_struct(struct PRM, FILE *); void get_string(char *, char *, char *, char *); void get_int(char *, char *, char *, int *); void get_double(char *, char *, char *, double *); void ALOS_ldr_prm(struct SAR_info, struct PRM *); int is_big_endian_(void); int is_big_endian__(void); void die(char *, char *); int get_prm(struct PRM *p, char *filename); void cross3(double *, double *, double *); void get_seconds(struct PRM, double *, double *); void plh2xyz(double *, double *, double, double); void xyz2plh(double *, double *, double, double); void find_unit_vector(double *, double *); double find_length(double *); double find_distance(double *, double *); double find_distance3(double, double, double, double, double, double); int geo2latlon(double *, double *, struct PRM); void geoxyz(double, double, double, double *, double *); int spline_(int *istart, int *nn, double *x, double *u, double *s, double *a); int evals_(int *istart, double *y, int *nn, double *x, double *u, double *s, double *eval); int find_fft_length(int n); void aastretch(fcomplex **fdata, int ipatch, int nrows, int num_valid_az, int num_rng_bins, float coef); void acpatch(void *API, fcomplex **data, int nrows, double delr, double fd, double fdd, double fddd); void conv2d(float *rdat, int *ni, int *nj, float *filt, int *nif, int *njf, float *fdat, int *ic, int *jc, float *rnorm); void do_freq_corr(void *API, struct xcorr *xc, int iloc); void do_time_corr(struct xcorr *xc, int iloc); double calc_time_corr(struct xcorr *xc, int ioff, int joff); int fft_bins(int num); void fft_interpolate_1d(void *API, struct FCOMPLEX *in, int N, struct FCOMPLEX *out, int ifactor); void fft_interpolate_2d(void *API, struct FCOMPLEX *in, int N1, int M1, struct FCOMPLEX *out, int N, int M, int ifactor); void print_prm_params(struct PRM p1, struct PRM p2); void fix_prm_params(struct PRM *p, char *s); void get_locations(struct xcorr *xc); void get_params(FILE *fh); void do_highres_corr(void *API, struct xcorr *xc, int iloc); void intp_coef(int nfilter, float *xintp); void print_params(struct xcorr *xc); void set_defaults(struct xcorr *xc); void parse_command_line(int na, char **a, struct xcorr *xc, int *nfiles, int *input_flag, char *USAGE); void handle_prm(void *, char **argv, struct xcorr *xc, int nfiles); void print_results(struct xcorr *xc, int iloc); void print_complex(struct FCOMPLEX *a, int ny, int nx, int real_flag); void print_float(float *a, int ny, int nx); void print_double(double *a, int ny, int nx); void print_int(int *a, int ny, int nx); void radopp(double *fd, double *fdd, double *fddd, double r, double del); void read_complex_short(FILE *f, int *d, int iy, int jx, int npx, int npy, int nx); void read_real_float(FILE *f, int *d, int iy, int jx, int npx, int npy, int nx); void read_data(struct xcorr xc); void read_complex_short2float(FILE *f, float *d, int iy, int jx, int npx, int npy, int nx); void read_optional_args(void *API, int argc, char **argv, struct PRM *tp, int *topoflag, struct PRM *mp, int *modelflag); void read_xcorr_data(struct xcorr *xc, int iloc); void rmpatch(fcomplex **data, int nrows, double delr, double fd, double fdd, double fddd); void rng_cmp(void *API, int ranfft, fcomplex *data, fcomplex *ref); void rng_ref(void *API, int ranfft, float delr, fcomplex *ref1); void rng_filter(void *API, fcomplex *cin, int nffti, fcomplex *cout); void shift(void *API, int ranfft, fcomplex *data, double shift); int trans_col(void *API, int xnum, int ynum, fcomplex **data); int read_SLC_short2float(FILE *SLCfile, char *name, short *sdata, fcomplex *cdata, int xdim, int psize, double dfact); int read_SLC_short2double(FILE *SLCfile, char *name, short *sdata, dcomplex *cdata, int xdim, int psize, double dfact); void handle_input(char *, struct xcorr *); void read_params(struct xcorr *, FILE *); void make_mask(struct xcorr *); void do_highres(struct xcorr *, int); void allocate_arrays(struct xcorr *); char *trimwhitespace(char *str); #endif /* LIB_FUNCTIONS_H */ GMTSAR_V5.7/gmtsar/siocomplex.c000644 015705 000000 00000001461 13505462013 017365 0ustar00sandwellwheel000000 000000 /************************************************************************ * routine for doing complex functions in C * *************************************************************************/ #include "gmtsar.h" #include fcomplex Cmul(fcomplex x, fcomplex y) { fcomplex z; z.r = x.r * y.r - x.i * y.i; z.i = x.i * y.r + x.r * y.i; return z; } fcomplex Cexp(float theta) { fcomplex z; z.r = cos(theta); z.i = sin(theta); return z; } fcomplex Conjg(fcomplex z) { fcomplex x; x.r = z.r; x.i = -z.i; return x; } fcomplex RCmul(float a, fcomplex z) { fcomplex x; x.r = a * z.r; x.i = a * z.i; return x; } fcomplex Cadd(fcomplex x, fcomplex y) { fcomplex z; z.r = x.r + y.r; z.i = x.i + y.i; return z; } float Cabs(fcomplex z) { return hypot(z.r, z.i); } GMTSAR_V5.7/gmtsar/radopp.c000644 015705 000000 00000002027 13505462013 016467 0ustar00sandwellwheel000000 000000 /************************************************************************ * radopp modifies doppler frequencies to make them a function of * * range. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History: * * * * Date: 11/18/96 * * * ************************************************************************/ #include void radopp(double *fd, double *fdd, double *fddd, double r, double del) { double temp1, temp2, temp3, fac; fac = r / del; temp1 = *fd - *fdd * (fac) + *fddd * pow(fac, 2.0); temp2 = *fdd / del - 2.0 * (*fddd) * (fac) / del; temp3 = *fddd / (pow(del, 2.0)); *fd = temp1; *fdd = temp2; *fddd = temp3; } GMTSAR_V5.7/gmtsar/lib_src/read_data.c_old000644 015705 000000 00000006255 13505462013 021370 0ustar00sandwellwheel000000 000000 /* $Id: read_data.c 33 2013-04-06 05:37:15Z pwessel $ */ #include #include #include #include #include "gmtsar.h" #include "xcorr.h" #include "PRM.h" /*-------------------------------------------------------*/ void read_complex_short(FILE *f, int *d, int iy, int jx, int npx, int npy, int nx) { long num_to_seek; int i, j; int ireal, iimag; short *tmp; tmp = malloc(2*nx*sizeof(short)); /* whole line */ num_to_seek = 2*iy*nx*sizeof(short); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers - use amplitude */ for (i=0; i void main(int argc, char *argv[]) { int k,nd=1024; fcomplex *datai, *datao; double arg; void *API = NULL; /* GMT API control structure */ /* Begin: Initializing new GMT session */ API = GMT_Create_Session (argv[0], 0U, 0U, NULL); datai = (fcomplex *) malloc(nd*sizeof(fcomplex)); datao = (fcomplex *) malloc(nd*sizeof(fcomplex)); /* fill the data array with a gaussian function */ for (k=0; k void main() { int k,nd=1024; fcomplex *datai, *datao; double arg; datai = (fcomplex *) malloc(nd*sizeof(fcomplex)); datao = (fcomplex *) malloc(nd*sizeof(fcomplex)); /* fill the data array with a gaussian function */ for (k=0; k $2.PRM # # put in the alignment parameters # awk '{print $4}' < freq_xcorr.dat > tmp.dat set amedian = `sort -n tmp.dat | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }'` set amax = `echo $amedian | awk '{print $1+3}'` set amin = `echo $amedian | awk '{print $1-3}'` awk '{if($4 > '$amin' && $4 < '$amax') print $0}' < freq_xcorr.dat > tmp2.dat fitoffset.csh 2 3 tmp2.dat 10 >> $2.PRM mv freq_xcorr.dat xcorr_$1_$2.dat0 # # refocus the second image # echo "resamp slave" resamp $1.PRM $2.PRM $2.PRMresamp $2.SLCresamp 4 rm $2.SLC mv $2.SLCresamp $2.SLC cp $2.PRMresamp $2.PRM # rm junk* #done GMTSAR_V5.7/gmtsar/csh/p2p_TSX_SLC.csh000755 015705 000000 00000024104 13505462013 020255 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # # process generic L1.1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_SAT_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_SAT_SLC.csh TSX_20110608 TSX_20110619 config.tsx.slc.txt" echo "" echo " Place the L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/csh/p2p_CSK.csh000755 015705 000000 00000024661 13505462013 017526 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Matt Wei, May 2010 # based on Xiaopeng Tong, Feb 10, 2010 # modified for CSK, david Sandwell, January 31, 2014 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv < 3) then echo "" echo "Usage: p2p_CSK.csh master_stem slave_stem configuration_file" echo "" echo "Example: p2p_CSK.csh CSK20140105 CSK20140121 config.csk.txt" echo "" echo " Place the raw data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. The two files of raw data must have a suffix .baq" echo " Execute this command at the directory location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" exit 1 endif # start # # make sure the files exist # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` if ((! $?near_range) || ($near_range == "")) then set near_range = 0 endif set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set npatch = `grep num_patches $3 | awk '{print $3}'` if ((! $?npatch) || ($npatch == "")) then set npatch = 0 endif set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # # cleanup.csh raw # echo "" echo " PREPROCESS CSK DATA -- START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # calculate SC_vel and SC_height # mv $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius $fd cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # mv $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius $fd cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 # # set the number of patches if set in the config file # check patch number, if different, use the smaller one # if ($npatch > 0) then update_PRM $slave.PRM num_patches $npatch update_PRM $master.PRM num_patches $npatch endif set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` if ($pch1 != $pch2) then echo "Different number of patches: $pch1 $pch2" if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp cd .. echo " PREPROCESS CSK DATA -- END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # focus and align SLC files # echo " " echo "ALIGN.CSH - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.raw . ln -s ../raw/$slave.raw . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . # # use the SAT code because it is generic # align.csh SAT $master $slave cd .. echo "ALIGN.CSH - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is a dem.grd # if ($topo_phase == 1) then echo " " echo " DEM2TOPOP_RA.CSH - START " echo " USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make interferogram # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/csh/unwrap_parallel.csh000755 015705 000000 00000001555 13505462013 021512 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # By Xiaohua XU, 03/12/2018 # # Unwrap interferograms parallelly using GNU parallel # # IMPORTANT: put a script called unwrap_intf.csh in the current folder # e.g. # cd $1 # snaphu[_interp].csh 0.1 0 # cd .. # if ($#argv != 2) then echo "" echo "Usage: unwrap_parallel.csh intflist Ncores" echo "" echo " Run unwrapping jobs parallelly. Need to install GNU parallel first." echo " Note, run this in the intf_all folder where all the interferograms are stored. " echo "" exit endif set ncores = $2 set d1 = `date` foreach line (`awk '{print $0}' $1`) echo "unwrap_intf.csh $line > log_$line.txt" >> unwrap.cmd end parallel --jobs $ncores < unwrap.cmd echo "" echo "Finished all unwrapping jobs..." echo "" set d2 = `date` #echo "parallel --jobs $ncores < intf_tops.cmd" | mail -s "Unwrapping finished" "balabala@gmail.com" GMTSAR_V5.7/gmtsar/csh/cleanup.csh000755 015705 000000 00000002147 13505462013 017747 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # David T. Sandwell, MAR 11, 2010 # # Clean the disk area in preparation for process2pass.csh # This should be run in the top directory. An ls will show # raw SLC intf topo # alias rm 'rm -f' unset noclobber # if ($#argv < 1) then echo " " echo "Usage: cleanup.csh directory " echo " " echo " directory could be: raw, SLC, topo, intf, or all " echo " " echo "Example: cleanup.csh all" echo " " exit 1 endif # # if( $1 == all) then echo "" echo "clean up all" rm -rf SLC rm -rf intf rm -f raw/*.PRM* rm -f raw/*.raw rm -f raw/*.LED rm -f raw/*.SLC cd topo ls | grep -v dem.grd | xargs rm -f cd .. echo "" endif if( $1 == raw) then echo "" echo "clean up raw/ folder" rm -f raw/*.PRM* rm -f raw/*.raw rm -f raw/*.LED echo "" endif if( $1 == SLC) then echo "" echo "clean up SLC/ folder" rm -rf SLC/* echo "" endif if( $1 == intf) then echo "" echo "clean up intf/ folder" rm -rf intf/* echo "" endif if ( $1 == topo ) then echo "" echo "clean up topo/ folder" cd topo ls | grep -v dem.grd | xargs rm -f cd .. echo "" endif GMTSAR_V5.7/gmtsar/csh/config.alos.slc.txt000644 015705 000000 00000007536 13505462013 021350 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ALOS_SLC.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ################ # Satellite # # ALOS or ENVI # ################ SAT = ALOS ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches (usually 1~3) num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = # SLC scale factor to convert float to int ( 0.01 is good for ALOS1 L1.1) SLC_factor = 1.0 ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 100m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 150 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = .10 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 0 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .10 GMTSAR_V5.7/gmtsar/csh/p2p_ALOS.csh000755 015705 000000 00000022476 13505462013 017646 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_ALOS.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_ALOS.csh IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A config.alos.txt" echo "" echo " Place the raw data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the config file exists # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set SAT = `grep SAT $3 | awk '{print $3}'` set stage = `grep proc_stage $3 | awk '{print $3}'` set num_patches = `grep num_patches $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = ` echo $1 | awk '{ print substr($1,8,length($1)-7)}'` set slave = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` # if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# # if ($stage == 1) then # # first clean up # cleanup.csh raw # # preprocess the raw data # echo " " echo "PRE_PROC.CSH - START" cd raw set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($near_range == "")) then set commandline = "$commandline -near $near_range" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($fd == "")) then set commandline = "$commandline -fd1 $fd" endif echo $commandline pre_proc.csh $SAT IMG-HH-$master IMG-HH-$slave $commandline cd .. echo "PRE_PROC.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# # if ($stage <= 2) then # # clean up # cleanup.csh SLC # # focus and align SLC images # echo " " echo "ALIGN.CSH - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/IMG-HH-$master.raw . ln -s ../raw/IMG-HH-$slave.raw . ln -s ../raw/IMG-HH-$master.LED . ln -s ../raw/IMG-HH-$slave.LED . align.csh SAT IMG-HH-$master IMG-HH-$slave cd .. echo "ALIGN.CSH - END" endif ################################## # 3 - start from make topo_ra # ################################## # if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/IMG-HH-$master.PRM master.PRM ln -s ../raw/IMG-HH-$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC set rng_samp_rate = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ( $?rng_samp_rate) then if ($rng_samp_rate > 25000000) then echo "processing ALOS FBS data" set rng = 2 else echo "processing ALOS FBD data" set rng = 1 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif slc2amp.csh IMG-HH-$master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## # if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../SLC/IMG-HH-$ref.LED . ln -s ../../SLC/IMG-HH-$rep.LED . ln -s ../../SLC/IMG-HH-$ref.SLC . ln -s ../../SLC/IMG-HH-$rep.SLC . cp ../../SLC/IMG-HH-$ref.PRM . cp ../../SLC/IMG-HH-$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM -topo topo_shift.grd filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM -topo topo_ra.grd filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec endif else intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ # if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../raw/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif # echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" # if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif # echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### # if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../raw/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # # end GMTSAR_V5.7/gmtsar/csh/config.rs2.txt000644 015705 000000 00000007222 13505462013 020330 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_RS2.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # # set the filter wavelength in meters (default is 100m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 80 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 1 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = .18 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/0/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 2 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .18 GMTSAR_V5.7/gmtsar/csh/shift_atime_PRM.csh000755 015705 000000 00000002147 13505462013 021332 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu Mar 2017 # # Script to shift time in azimuth by a number of lines # if ($#argv < 2) then echo " " echo "Usage: shift_aline_PRM.csh file.PRM num_lines " echo " " echo "Example: shift_aline_PRM.csh IMG-HH-ALPSRP049040660-H1.0__A.PRM 12365.84726" echo "" echo "Note: To shift the PRM file with a given number of lines along azimuth." exit 1 endif set nl = $2 set file = $1 set prf = `grep PRF $file | awk '{print $3}'` set ttmp = `grep clock_start $file | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM $file clock_start $ttmp set ttmp = `grep clock_stop $file | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM $file clock_stop $ttmp set ttmp = `grep SC_clock_start $file | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM $file SC_clock_start $ttmp set ttmp = `grep SC_clock_stop $file | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM $file SC_clock_stop $ttmp GMTSAR_V5.7/gmtsar/csh/align.csh000755 015705 000000 00000005454 13505462013 017416 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 4 2010 # M. Wei MAY 4 2010 - ENVISAT # # Align a slave image to a master image and check results # alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv < 3) then echo "" echo "Usage: align.csh SAT master_name slave_name [supermaster_name]" echo "" echo " The supermaster_namestem is required if this is secondary alignment." echo " SAT = ERS or ENVI or ALOS or generic SAT" echo "" echo "Example: align.csh ALOS IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A " echo "" exit 1 endif set SAT = $1 if ($SAT == "CSK_RAW") set SAT = `echo "SAT"` if (($SAT != ENVI) && ($SAT != ERS) && ($SAT != SAT) && ($SAT != ALOS)) then echo "" echo " SAT must be ERS, ENVI, or generic SAT" echo "" exit 1 endif # # focus the master if necessary # Do it no matter what for now. Put SLC_file to PRM. Might not be necessary # if(! -f $2.SLC) then echo "focussing master" sarp.csh $2.PRM else update_PRM $2.PRM SLC_file $2.SLC endif # # focus the slave image # # check the range sampling rate # set rng_samp_rate_m = `grep rng_samp_rate $2.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate $3.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ($rng_samp_rate_m != $rng_samp_rate_s) then echo "The range sampling rate for master and slave differ" echo "Need to run the interferogram in steps until process2pass.csh is fixed" exit 1 endif echo "align.csh" echo "focusing slave" sarp.csh $3.PRM # # get the starting alignment parameters and run xcorr # cp $2.PRM $2.PRM0 cp $3.PRM $3.PRM0 if($#argv == 4) then set RSHIFT = `$1_baseline $4.PRM $3.PRM | grep rshift | awk '{print $3}'` set ASHIFT = `$1_baseline $4.PRM $3.PRM | grep ashift | awk '{print $3}'` # # use the PRF of the supermaster in the surrogate master # set PRF = `grep PRF $4.PRM | awk '{print $3}'` update_PRM $2.PRM PRF $PRF else set RSHIFT = `$1_baseline $2.PRM $3.PRM | grep rshift | awk '{print $3}'` set ASHIFT = `$1_baseline $2.PRM $3.PRM | grep ashift | awk '{print $3}'` endif update_PRM $3.PRM rshift $RSHIFT update_PRM $3.PRM ashift $ASHIFT echo "align.csh" echo "correlate master and slave to find offset parameters" if( $SAT == "ERS") then xcorr $2.PRM $3.PRM -xsearch 128 -ysearch 128 -nx 20 -ny 50 else xcorr $2.PRM $3.PRM -xsearch 128 -ysearch 256 -nx 20 -ny 50 endif # mv $3.SLC $3.SLC0 mv $3.PRM junk.PRM cp $2.PRM0 $2.PRM grep -v shift < junk.PRM > $3.PRM # # put in the alignment parameters # fitoffset.csh 3 3 freq_xcorr.dat 18 >> $3.PRM mv freq_xcorr.dat xcorr_$2_$3.dat0 # # refocus the second image # echo "align.csh" echo "refocus slave" sarp.csh $3.PRM # rm *SLC0 rm junk* #done GMTSAR_V5.7/gmtsar/csh/estimate_ionospheric_phase.csh000755 015705 000000 00000014106 13505462013 023713 0ustar00sandwellwheel000000 000000 #!/bin/csh -f if ($#argv != 4 && $#argv != 6) then echo "" echo "Usage: estimate_ionospheric_phase.csh intf_high intf_low intf_orig intf_to_be_corrected [xratio yratio]" echo "" echo " estimate ionosphere based on split spectrum method in Gomba et. al. 2016" echo " with filtering method in Fattahi et. al. 2017" echo "" echo "Example: estimate_ionospheric_phase.csh ../iono_phase/intf_h ../iono_phase/intf_l ../iono_phase/intf_o" echo "" exit 1 endif set intfH = $1 set intfL = $2 set intfO = $3 set intf = $4 if ($#argv == 3) then set rx = 1 set ry = 1 else set rx = $5 set ry = $6 endif set prm1 = `ls $intfH/*PRM | head -1` set prm2 = `ls $intfH/*PRM | tail -1` set fc = `grep center_freq $intfH/params1 | awk '{print $3}'` set fh = `grep high_freq $intfH/params1 | awk '{print $3}'` set fl = `grep low_freq $intfH/params1 | awk '{print $3}'` set thresh = 0.1 echo "Applying split spectrum result to estimate ionospheric phase ($fh $fl)..." cp $intf/phasefilt.grd ./ph0.grd # determine how much filtering is needed set wavelengh = 20000 set rng_pxl = `grep rng_samp_rate $intfH/$prm1 | head -1 | awk '{printf("%.6f\n",299792458.0/$3/2.0)}'` set prf = `grep PRF $intfH/$prm1 | awk '{print $3}'` set vel = `grep SC_vel $intfH/$prm1 | awk '{print $3}'` set azi_pxl = `echo $vel $prf | head -1 | awk '{printf("%.6f\n",$1/$2)}'` #gmt grdinfo $intfH/phasefilt.grd -C set x_inc = `gmt grdinfo $intfH/phasefilt.grd -C | awk '{print $8}'` set y_inc = `gmt grdinfo $intfH/phasefilt.grd -C | awk '{print $9}'` #echo $wavelengh $rng_pxl $x_inc $rx #echo $wavelengh $azi_pxl $y_inc $ry set filtx = `echo $wavelengh $rng_pxl $x_inc $rx | awk '{print int($1*$4/$2/$3/2)*2+1}'` set filty = `echo $wavelengh $azi_pxl $y_inc $ry | awk '{print int($1*$4/$2/$3/2)*2+1}'` set filt_incx = `echo $filtx | awk '{print int($1/8)}'` set filt_incy = `echo $filty | awk '{print int($1/8)}'` echo "Filtering size is set to $filtx along range and $filty along azimuth ..." set limit = `echo $fh $fl | awk '{printf("%.3f",$1*$2/($1*$1-$2*$2)*3.1415926)}'` # start ionospheric phase estimate cp $intfH/unwrap.grd ./up_h.grd cp $intfL/unwrap.grd ./up_l.grd cp $intfO/unwrap.grd ./up_o.grd # correct for unwrapping errors gmt grdmath up_h.grd up_o.grd SUB = tmp.grd set ch = `gmt grdinfo tmp.grd -L1 -C | awk '{if ($12 >=0) printf("%d\n",int($12/6.2831853072+0.5)); else printf("%d\n",int($12/6.2831853072-0.5))}'` echo "Correcting high passed phase by $ch * 2PI ..." gmt grdmath up_h.grd $ch 2 PI MUL MUL SUB = tmp.grd mv tmp.grd up_h.grd gmt grdmath up_l.grd up_o.grd SUB = tmp.grd set cl = `gmt grdinfo tmp.grd -L1 -C | awk '{if ($12 >=0) printf("%d\n",int($12/6.2831853072+0.5)); else printf("%d\n",int($12/6.2831853072-0.5))}'` echo "Correcting high passed phase by $cl * 2PI ..." gmt grdmath up_l.grd $cl 2 PI MUL MUL SUB = tmp.grd mv tmp.grd up_l.grd gmt grdmath up_h.grd up_l.grd ADD up_o.grd 2 MUL SUB = tmp.grd gmt grdmath tmp.grd 2 PI MUL DIV ABS 0.2 GE 1 SUB -1 MUL 0 NAN = mask_up.grd gmt grdmath up_h.grd mask_up.grd MUL = tmp.grd gmt grdfilter tmp.grd -Dp -Fm21/21 -Gup_h.grd -V -Nr gmt grdmath up_l.grd mask_up.grd MUL = tmp.grd gmt grdfilter tmp.grd -Dp -Fm21/21 -Gup_l.grd -V -Nr gmt grdmath $intfH/corr.grd $intfL/corr.grd ADD 2 DIV 0 DENAN $thresh GE 0 NAN 0 MUL 1 ADD mask_up.grd MUL = mask.grd gmt grdmath $intfH/corr.grd $intfL/corr.grd ADD 2 DIV 0 DENAN $thresh GE 0 NAN ISNAN 1 SUB -1 MUL mask_up.grd 0 DENAN MUL = mask1.grd gmt grdmath mask1.grd 1 SUB -1 MUL = mask2.grd gmt grdmath $fh $fc DIV up_l.grd MUL $fl $fc DIV up_h.grd MUL SUB $fl $fh MUL $fh $fh MUL $fl $fl MUL SUB DIV MUL = tmp_ph0.grd gmt grdmath tmp_ph0.grd mask.grd MUL = tmp_ph.grd cp tmp_ph.grd tmp_ph1.grd set mm = `gmt grdinfo tmp_ph1.grd -L1 -C | awk '{print $12}'` gmt grdmath tmp_ph0.grd $mm $limit ADD LE = tmp1.grd gmt grdmath tmp_ph0.grd $mm $limit SUB GE = tmp2.grd gmt grdmath tmp1.grd tmp2.grd MUL 0 NAN mask.grd MUL = tmp.grd mv tmp.grd mask.grd gmt grdmath tmp1.grd tmp2.grd MUL 0 NAN ISNAN 1 SUB -1 MUL mask1.grd MUL 0 DENAN = tmp.grd mv tmp.grd mask1.grd gmt grdmath tmp_ph0.grd mask.grd MUL = tmp_ph.grd gmt grdmath mask1.grd 1 SUB -1 MUL = mask2.grd nearest_grid tmp_ph.grd tmp_ph_interp.grd #foreach iteration (1 2 3 4 5 ) foreach iteration (1 2 3) set odd = `echo $iteration | awk '{if ($1%2==0) print 0;else print 1}'` if ($odd == 1) then gmt grdfilter tmp_ph_interp.grd -Dp -Fm$filtx/$filty -Gtmp_filt.grd -V -Ni -I$filt_incx/$filt_incy else gmt grdfilter tmp_ph_interp.grd -Dp -Fb$filtx/$filty -Gtmp_filt.grd -V -Ni -I$filt_incx/$filt_incy endif gmt grd2xyz tmp_filt.grd -s | gmt surface -Rtmp_ph0.grd -T0.5 -Gtmp.grd mv tmp.grd tmp_filt.grd #gmt grdfilter tmp_ph_interp.grd -Dp -Fb$filt -Gtmp_filt.grd -V -Ni -I$inc #gmt grdsample tmp_filt.grd -Rmask.grd -Gtmp.grd #mv tmp.grd tmp_filt.grd cp tmp_filt.grd tmp_$iteration.grd gmt grdmath tmp_filt.grd mask.grd MUL = tmp.grd nearest_grid tmp.grd tmp2.grd gmt grdmath tmp2.grd mask2.grd MUL tmp_ph0.grd 0 DENAN mask1.grd MUL ADD = tmp_ph_interp.grd #exit 1 end # needs to be improved set RR = `gmt grdinfo -I- ph0.grd` set II = `gmt grdinfo -I tmp_ph0.grd` gmt grdfilter tmp_ph_interp.grd -Dp -Fb$filtx/$filty -Gtmp_filt.grd -V -Ni -I$filt_incx/$filt_incy gmt grd2xyz tmp_filt.grd -s | gmt surface $RR $II -Gtmp.grd mv tmp.grd tmp_filt.grd #gmt grdfilter tmp_ph_interp.grd -Dp -Fb$filt -Gtmp_filt.grd -V -Ni -I$inc #gmt grdsample tmp_filt.grd -Rmask.grd -Gtmp.grd #mv tmp.grd tmp_filt.grd gmt grdmath tmp_filt.grd PI ADD 2 PI MUL MOD PI SUB = tmp_ph.grd cp tmp_ph.grd ph_iono.grd gmt grdsample tmp_filt.grd -Rph0.grd -Gtmp.grd gmt grdmath ph0.grd tmp.grd SUB PI ADD 2 PI MUL MOD PI SUB = ph_corrected.grd set cc = `gmt grdinfo ph_corrected.grd -L1 -C | awk '{if ($12 >=0) printf("%d\n",int($12/3.141592653+0.5)); else printf("%d\n",int($12/3.141592653-0.5))}'` echo "Correcting iono phase by $cc PI ..." gmt grdmath tmp_filt.grd $cc PI MUL ADD = tmp_ph.grd gmt grdmath tmp_ph.grd PI ADD 2 PI MUL MOD PI SUB = ph_iono.grd gmt grdsample tmp_ph.grd -Rph0.grd -Gtmp.grd gmt grdmath ph0.grd tmp.grd SUB PI ADD 2 PI MUL MOD PI SUB = ph_corrected.grd mv tmp_ph.grd ph_iono_orig.grd #rm tmp*.grd GMTSAR_V5.7/gmtsar/csh/p2p_CSK_SLC.csh000755 015705 000000 00000024104 13505462013 020217 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # # process generic L1.1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_SAT_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_SAT_SLC.csh TSX_20110608 TSX_20110619 config.tsx.slc.txt" echo "" echo " Place the L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/csh/select_pairs.csh000755 015705 000000 00000003674 13505462013 021003 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Select pairs according to the given threshold in time and baseline # used for time series analysis # Xiaohua(Eric) Xu, Jan 21 2016 # if ($#argv != 3) then echo "" echo "Usage: select_pairs.csh baseline_table.dat threshold_time threshold_baseline" echo " generate the input file for intf_tops.csh with given threshold of time and baseline" echo "" echo " outputs:" echo " intf.in" echo "" exit 1 endif set file = $1 set dt = `echo $2 | awk '{print $0}'` set db = `echo $3 | awk '{printf $0}'` # loop over possible pairs rm intf.in awk '{print 2014+$3/365.25, $5, $1}' < $1 > text set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-50, $4+50}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > baseline.ps foreach line1 (`awk '{print $1":"$2":"$3":"$4":"$5}' < $file`) foreach line2 (`awk '{print $1":"$2":"$3":"$4":"$5}' < $file`) set t1 = `echo $line1 | awk -F: '{print $3}'` set t2 = `echo $line2 | awk -F: '{print $3}'` set b1 = `echo $line1 | awk -F: '{print $5}'` set b2 = `echo $line2 | awk -F: '{print $5}'` set n1 = `echo $line1 | awk -F: '{print $1}'` set n2 = `echo $line2 | awk -F: '{print $1}'` #if ($t1 < $t2 && $t2 - $t1 < $dt && $db0 < $db) then if ($t1 < $t2 & $t2 - $t1 < $dt) then set db0 = `echo $b1 $b2 | awk '{printf "%d", sqrt(($1-$2)*($1-$2))}'` if ($db0 < $db) then echo $n1 $n2 | awk '{print $1":"$2}' >> intf.in echo $t1 $b1 | awk '{print $1/365.25+2014, $2}' >> tmp echo $t2 $b2 | awk '{print $1/365.25+2014, $2}' >> tmp gmt psxy tmp -R -J -K -O >> baseline.ps rm tmp endif endif end end awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba0.5:"year":/a50g00f25:"baseline (m)":WSen -O >> baseline.ps GMTSAR_V5.7/gmtsar/csh/config.csk.txt000644 015705 000000 00000007220 13505462013 020400 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_CSK.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 200m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/0/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/gmtsar/csh/make_a_offset.csh000755 015705 000000 00000014214 13505462013 021101 0ustar00sandwellwheel000000 000000 #!/bin/tcsh -f # $Id$ # Script to drive the xcorr to do the azimuthal pixel-tracking # Originated by Matt Wei, April 19, 2010 # Rewrote by Kang Wang # Last update: Aug. 09, 2013 # # Revised by Xiaohua Xu, Nov 15, 2013: adding some pre_proc, redefined some parameters, add blockmedian, # add shaded part, delete some redundant lines, easier to use # # Revised by David Sandwell, Dec 28, 2018: corrected azi pixel size using ground velocity and added more comments # if ($#argv != 7) then echo "" echo "Usage: make_a_offset.csh Master.PRM Slave.PRM nx ny xsearch ysearch do_xcorr" echo "" echo " nx - number of offsets to compute in the range direction (~num_rng/4) " echo " ny - number of offsets to compute in the azimuth direction (~num_az/6) " echo " xsearch - size of correlation window in range (e.g., 16) " echo " ysearch - size of correlation window in azimuth (e.g., 16) " echo " do_xcorr - 1-recalculate xcorr; 0-use results from previous xcorr" echo "" exit 1 endif echo "make_a_offset.csh" $1 $2 $3 $4 $5 $6 # set master = $1 set slave = $2 set nx = $3 set ny = $4 set xsearch = $5 set ysearch = $6 set do_xcorr = $7 # # pre_proc needed files # cd intf/*/ mkdir azi_offset cd azi_offset cp ../../../raw/$1 . cp ../../../raw/$2 . # ln -s ../../../SLC/*.SLC . ln -s ../../../topo/trans.dat ln -s ../../../topo/dem.grd # set PRF = `grep PRF $master |awk -F"=" '{print $2}'` set SC_vel = `grep SC_vel $master|awk -F"=" '{print $2}'` set earth_radius = `grep earth_radius $master|awk -F"=" '{print $2}'` set SC_height = `grep SC_height $master|awk -F"=" '{print $2}'` # # compute the ground velocity from the effrctive velocity using equation B12 # set ground_vel = `echo $SC_vel $earth_radius $SC_height | awk '{print $1/sqrt(1+$3/$2)} '` echo "ground velocity: " $ground_vel set azi_size = `echo $ground_vel $PRF|awk '{printf "%10.3f",$1/$2}' ` echo "azi pixel size", $azi_size # # these SLC's are already aligned so reset all the offsets to zero # update_PRM $master rshift 0 update_PRM $master sub_int_r 0 update_PRM $master stretch_r 0.0 update_PRM $master a_stretch_r 0.0 update_PRM $master ashift 0 update_PRM $master sub_int_a 0.0 update_PRM $master stretch_a 0.0 update_PRM $master a_stretch_a 0.0 update_PRM $slave rshift 0 update_PRM $slave sub_int_r 0 update_PRM $slave stretch_r 0.0 update_PRM $slave a_stretch_r 0.0 update_PRM $slave ashift 0 update_PRM $slave sub_int_a 0.0 update_PRM $slave stretch_a 0.0 update_PRM $slave a_stretch_a 0.0 # # make azimuth offset if do_xcorr = 1 # if ($do_xcorr == 1 ) xcorr $master $slave -nx $nx -ny $ny -xsearch $xsearch -ysearch $ysearch -noshift # # ********assume all offsets are less than 1. pixels # ********edit the following line # awk '{if ($4>-1.1 && $4<1.1) print $1,$3,$4,$5}' freq_xcorr.dat >azi.dat # # do a block median on the offset data and grid the results # set xmin = `gmt gmtinfo azi.dat -C |awk '{print $1}'` set xmax = `gmt gmtinfo azi.dat -C |awk '{print $2}'` set ymin = `gmt gmtinfo azi.dat -C |awk '{print $3}'` set ymax = `gmt gmtinfo azi.dat -C |awk '{print $4}'` # set xinc = `echo $xmax $xmin $nx |awk '{printf "%d", ($1-$2)/($3-1)}'` set yinc = `echo $ymax $ymin $ny |awk '{printf "%d", ($1-$2)/($3-1)}'` # set xinc = `echo $xinc | awk '{print $1*12}'` set yinc = `echo $yinc | awk '{print $1*12}'` echo "xinc:"$xinc" yinc:"$yinc # gmt blockmedian azi.dat -R$xmin/$xmax/$ymin/$ymax -I$xinc/$yinc -Wi | awk '{print $1, $2, $3}' > azi_b.dat #mv azi_b.dat azi.dat gmt xyz2grd azi_b.dat -R$xmin/$xmax/$ymin/$ymax -I$xinc/$yinc -Gaoff.grd gmt grdmath aoff.grd $azi_size MUL = azi_offset.grd # gmt grd2cpt azi_offset.grd -Cpolar -E30 -D > azioff.cpt #gmt makecpt -Cpolar -T-4/4/.4 -Z > azioff.cpt gmt grdimage azi_offset.grd -JX5i -Cazioff.cpt -Q -P > azioff.ps # # project to lon/lat coordinates # proj_ra2ll_ascii.csh trans.dat azi_b.dat aoff.llo # set xmin2 = `gmt gmtinfo aoff.llo -C |awk '{print $1}'` set xmax2 = `gmt gmtinfo aoff.llo -C |awk '{print $2}'` set ymin2 = `gmt gmtinfo aoff.llo -C |awk '{print $3}'` set ymax2 = `gmt gmtinfo aoff.llo -C |awk '{print $4}'` # set xinc2 = `echo $xmax2 $xmin2 $nx |awk '{printf "%12.5f", ($1-$2)/($3-1)}'` set yinc2 = `echo $ymax2 $ymin2 $ny |awk '{printf "%12.5f", ($1-$2)/($3-1)}'` set xinc2 = `echo $xinc2 | awk '{print $1*12}'` set yinc2 = `echo $yinc2 | awk '{print $1*12}'` # echo "xinc2:"$xinc2" yinc2:"$yinc2 # gmt xyz2grd aoff.llo -R$xmin2/$xmax2/$ymin2/$ymax2 -I$xinc2/$yinc2 -r -fg -Gaoff_ll.grd gmt grdmath aoff_ll.grd $azi_size MUL = azi_offset_ll.grd # gmt grdsample dem.grd -Gs_dem.grd -R$xmin2/$xmax2/$ymin2/$ymax2 -I$xinc2/$yinc2 -r gmt grdgradient dem.grd -Gtmp.grd -A325 -Nt.5 gmt grdmath tmp.grd .5 ADD = dem_grd.grd gmt grdgradient s_dem.grd -Gs_dem_grd.grd -A45 -Nt.5 # # plot the azimuth offset # set r_topo = `gmt grdinfo dem.grd -T100` gmt makecpt -Cgray -T-1/1/.1 -Z > topo.cpt # set x1 = `gmt grdinfo azi_offset_ll.grd -C |awk '{print $2 }'` set x2 = `gmt grdinfo azi_offset_ll.grd -C |awk '{print $3 }'` # set y1 = `gmt grdinfo azi_offset_ll.grd -C |awk '{print $4 }'` set y2 = `gmt grdinfo azi_offset_ll.grd -C |awk '{print $5 }'` # set xlim = `echo $x2 $x1|awk '{print $1-$2}'` set ylim = `echo $y2 $y1|awk '{print $1-$2}'` # set length = 20 set width = 16 # set scl1 = `echo $ylim $length | awk '{print $2/$1 }' ` set scl2 = `echo $xlim $width | awk '{print $2/$1}'` set scl = `echo $scl1 $scl2 | awk '{if ($1<$2) {print $1} else {print $2} }'` # set bounds = `gmt grdinfo -I- azi_offset_ll.grd` # gmt gmtdefaults -Ds > gmt.conf gmt set MAP_FRAME_TYPE plain # gmt psbasemap -Baf -BWSne -Jm$scl"c" $bounds -K -P > azioff_ll.ps gmt grdimage dem_grd.grd -J -R -Ctopo.cpt -K -O -Q >> azioff_ll.ps #gmt grdimage azi_offset_ll.grd -Is_dem_grd.grd -J -R -Cazioff.cpt -Q -K -O >> azioff_ll.ps gmt grdimage azi_offset_ll.grd -J -R -Cazioff.cpt -Q -K -O >> azioff_ll.ps gmt pscoast -N3,2p -W1,1p -Slightblue -J -R -K -O -Df -I1 >> azioff_ll.ps gmt psscale -Razi_offset_ll.grd -J -DJTC+w5c/0.35c+e -Cazioff.cpt -Bxaf -By+lm -O >> azioff_ll.ps gmt psconvert azioff_ll.ps -P -Tg -Z echo "Azimuth/Offset map: azioff_ll.png" # rm -f tmp.grd aoff_ll.grd aoff.grd aoff.llo azi.dat dem_grd.grd grey_tmp.cpt ps2rast* raln* ralt* s_dem.grd temp.dat topo.cpt GMTSAR_V5.7/gmtsar/csh/dem2topo_ra.csh000755 015705 000000 00000007205 13505462013 020533 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Matt WEI Feb 1 2010 # modified by Xiaopeng Feb 9 2010 # modified by E. Fielding, DST, XT to add TSX data Jan 10 2014 #======================================================================= # script to make topography for interferograms # The USGS elevations are height above WGS84 so this is OK. # alias rm 'rm -f' unset noclobber # if ($#argv < 2) then echo " " echo "Usage: dem2topo_ra.csh master.PRM dem.grd" echo " " echo " Note: Works for TSX,ALOS,ERS,ENVISAT" echo " " exit 1 endif # # local variables # set scale = -JX7i if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # #========================Mosaic topo data=============================== #----------------------------------------------------------------------- # #------------------------Get bounds in radar coordinates---------------- set XMAX = `grep num_rng_bins $1 | awk '{print $3}'` set yvalid = `grep num_valid_az $1 | awk '{print $3}'` set num_patch = `grep num_patches $1 | awk '{print $3}'` set YMAX = `echo "$yvalid $num_patch" | awk '{print $1*$2}'` set SC = `grep SC_identity $1 | awk '{print $3}'` set PRF = `grep PRF *.PRM | awk 'NR == 1 {printf("%d", $3)}'` # # look for range sampling rate # set rng_samp_rate = `grep rng_samp_rate $1 | awk 'NR == 1 {printf("%d", $3)}'` # # set the range spacing of simulation in units of image range pixel size # if($rng_samp_rate > 0 && $rng_samp_rate < 25000000) then set rng = 1 else if($rng_samp_rate >= 25000000 && $rng_samp_rate < 72000000 || $SC == 7 ) then set rng = 2 else if($rng_samp_rate >= 72000000) then set rng = 4 else echo "range sampling rate out of bounds" exit 0 endif echo " range decimation is: " $rng # if($SC == 10) then gmt grd2xyz --FORMAT_FLOAT_OUT=%lf $2 -s | SAT_llt2rat $1 1 -bod > trans.dat else gmt grd2xyz --FORMAT_FLOAT_OUT=%lf $2 -s | SAT_llt2rat $1 0 -bod > trans.dat endif # # use an azimuth spacing of 2 for low PRF data such as S1 TOPS # if ($PRF < 1000) then gmt gmtconvert trans.dat -o0,1,2 -bi5d -bo3d | gmt blockmedian -R0/$XMAX/0/$YMAX -I$rng/2 -bi3d -bo3d -r $V > temp.rat gmt surface temp.rat -R0/$XMAX/0/$YMAX -I$rng/2 -bi3d -T.50 -N1000 -Gpixel.grd -r -Q >& tmp set RR = `grep Hint tmp | head -1 | awk '{for(i=1;i<=NF;i++) print $i}' | grep /` if ("x$RR" == "x") then gmt surface temp.rat -R0/$XMAX/0/$YMAX -I$rng/2 -bi3d -T.50 -N1000 -Gpixel.grd -r $V else gmt surface temp.rat $RR -I$rng/2 -bi3d -T.50 -N1000 -Gpixel.grd -r $V gmt grdcut pixel.grd -R0/$XMAX/0/$YMAX -Gtmp.grd mv tmp.grd pixel.grd endif else gmt gmtconvert trans.dat -o0,1,2 -bi5d -bo3d | gmt blockmedian -R0/$XMAX/0/$YMAX -I$rng/4 -bi3d -bo3d -r $V > temp.rat gmt surface temp.rat -R0/$XMAX/0/$YMAX -I$rng/4 -bi3d -T.50 -N1000 -Gpixel.grd -r -Q >& tmp set RR = `grep Hint tmp | head -1 | awk '{for(i=1;i<=NF;i++) print $i}' | grep /` if ("x$RR" == "x") then gmt surface temp.rat -R0/$XMAX/0/$YMAX -I$rng/4 -bi3d -T.50 -N1000 -Gpixel.grd -r $V else gmt surface temp.rat $RR -I$rng/4 -bi3d -T.50 -N1000 -Gpixel.grd -r $V gmt grdcut pixel.grd -R0/$XMAX/0/$YMAX -Gtmp.grd mv tmp.grd pixel.grd endif endif # # flip top to bottom for both ascending and descending passes # gmt grdmath pixel.grd FLIPUD = topo_ra.grd # # plotting # gmt grd2cpt topo_ra.grd -Cgray $V -Z > topo_ra.cpt gmt grdimage topo_ra.grd $scale -P -Ctopo_ra.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen $V -K > topo_ra.ps gmt psscale -Rtopo_ra.grd -J -DJTC+w5i/0.2i+h -Ctopo_ra.cpt -Bxaf -By+lm -O >> topo_ra.ps gmt psconvert -Tf -P -Z topo_ra.ps echo "Topo range/azimuth map: topo_ra.pdf" # # clean up # rm pixel.grd temp.rat dem.xyz tmp rm topo_ra.cpt GMTSAR_V5.7/gmtsar/csh/merge_unwrap_geocode_tops.csh000755 015705 000000 00000013041 13505462013 023540 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # # Xiaohua(Eric) XU, July 7, 2016 # # Script for merging 3 subswaths TOPS interferograms and then unwrap and geocode. # if ($#argv != 2) then echo "" echo "Usage: merge_unwrap_geocode_tops.csh inputfile config_file" echo "" echo "Note: Inputfiles should be as following:" echo "" echo " Swath1_Path:Swath1_master.PRM:Swath1_repeat.PRM" echo " Swath2_Path:Swath2_master.PRM:Swath2_repeat.PRM" echo " Swath3_Path:Swath3_master.PRM:Swath3_repeat.PRM" echo " (Use the repeat PRM which contains the shift information.)" echo " e.g. ../F1/intf/2015016_2015030/:S1A20151012_134357_F1.PRM" echo "" echo " Make sure under each path, the processed phasefilt.grd, corr.grd and mask.grd exist." echo " Also make sure the dem.grd is linked. " echo "" echo " config_file is the same one used for processing." echo "" echo "Example: merge_unwrap_geocode_tops.csh filelist batch.config" echo "" exit 1 endif if (-f tmp_phaselist) rm tmp_phaselist if (-f tmp_corrlist) rm tmp_corrlist if (-f tmp_masklist) rm tmp_masklist if (! -f dem.grd ) then echo "Please link dem.grd to current folder" exit 1 endif set region_cut = `grep region_cut $2 | awk '{print $3}'` # Creating inputfiles for merging foreach line (`awk '{print $0}' $1`) set now_dir = `pwd` set pth = `echo $line | awk -F: '{print $1}'` set prm = `echo $line | awk -F: '{print $2}'` set prm2 = `echo $line | awk -F: '{print $3}'` cd $pth set rshift = `grep rshift $prm2 | tail -1 | awk '{print $3}'` set fs1 = `grep first_sample $prm | awk '{print $3}'` set fs2 = `grep first_sample $prm2 | awk '{print $3}'` cp $prm tmp.PRM if ($fs2 > $fs1) then update_PRM tmp.PRM first_sample $fs2 endif update_PRM tmp.PRM rshift $rshift cd $now_dir echo $pth"tmp.PRM:"$pth"phasefilt.grd" >> tmp_phaselist echo $pth"tmp.PRM:"$pth"corr.grd" >> tmp_corrlist echo $pth"tmp.PRM:"$pth"mask.grd" >> tmp_masklist end set pth = `awk -F: 'NR==1 {print $1}' $1` set stem = `awk -F: 'NR==1 {print $2}' $1 | awk -F"." '{print $1}'` #echo $pth $stem echo "" echo "Merging START" merge_swath tmp_phaselist phasefilt.grd $stem merge_swath tmp_corrlist corr.grd merge_swath tmp_masklist mask.grd echo "Merging END" echo "" set iono = `grep correct_iono $2 | awk '{print $3}'` set skip_iono = `grep iono_skip_est $2 | awk '{print $3}'` if ($iono != 0 & $skip_iono == 0) then if (! -f ph_iono_orig.grd) then echo "Need ph_iono_orig.grd to correct ionosphere ..." else echo "Correcting ionosphere ..." gmt grdsample ph_iono_orig.grd -Rphasefilt.grd -Gtmp.grd gmt grdmath phasefilt.grd tmp.grd SUB PI ADD 2 PI MUL MOD PI SUB = tmp2.grd mv phasefilt.grd phasefilt_orig.grd mv tmp2.grd phasefilt.grd rm tmp.grd endif endif # This step is essential, cut the DEM so it can run faster. if (! -f trans.dat) then set led = `grep led_file $pth$stem".PRM" | awk '{print $3}'` cp $pth$led . echo "Recomputing the projection LUT..." # Need to compute the geocoding matrix with supermaster.PRM with rshift set to 0 set rshift = `grep rshift $stem".PRM" | tail -1 | awk '{print $3}'` update_PRM $stem".PRM" rshift 0 gmt grd2xyz --FORMAT_FLOAT_OUT=%lf dem.grd -s | SAT_llt2rat $stem".PRM" 1 -bod > trans.dat # Set rshift back for other usage update_PRM $stem".PRM" rshift $rshift endif # Read in parameters set threshold_snaphu = `grep threshold_snaphu $2 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $2 | awk '{print $3}'` set region_cut = `grep region_cut $2 | awk '{print $3}'` set switch_land = `grep switch_land $2 | awk '{print $3}'` set defomax = `grep defomax $2 | awk '{print $3}'` set near_interp = `grep near_interp $2 | awk '{print $3}'` # Unwrapping if ($region_cut == "") then set region_cut = `gmt grdinfo phasefilt.grd -I- | cut -c3-20` endif if ($threshold_snaphu != 0 ) then if ($switch_land == 1) then if (! -f landmask_ra.grd) then landmask.csh $region_cut endif endif echo "" echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" else echo "" echo "SKIP UNWRAP PHASE" endif # Geocoding #if (-f raln.grd) rm raln.grd #if (-f ralt.grd) rm ralt.grd if ($threshold_geocode != 0) then echo "" echo "GEOCODE-START" proj_ra2ll.csh trans.dat phasefilt.grd phasefilt_ll.grd proj_ra2ll.csh trans.dat corr.grd corr_ll.grd gmt makecpt -Crainbow -T-3.15/3.15/0.05 -Z > phase.cpt set BT = `gmt grdinfo -C corr.grd | awk '{print $7}'` gmt makecpt -Cgray -T0/$BT/0.05 -Z > corr.cpt grd2kml.csh phasefilt_ll phase.cpt grd2kml.csh corr_ll corr.cpt if (-f unwrap.grd) then gmt grdmath unwrap.grd mask.grd MUL = unwrap_mask.grd proj_ra2ll.csh trans.dat unwrap.grd unwrap_ll.grd proj_ra2ll.csh trans.dat unwrap_mask.grd unwrap_mask_ll.grd set BT = `gmt grdinfo -C unwrap.grd | awk '{print $7}'` set BL = `gmt grdinfo -C unwrap.grd | awk '{print $6}'` gmt makecpt -T$BL/$BT/0.5 -Z > unwrap.cpt grd2kml.csh unwrap_mask_ll unwrap.cpt grd2kml.csh unwrap_ll unwrap.cpt endif echo "GEOCODE END" endif rm tmp_phaselist tmp_corrlist tmp_masklist *.eps *.bb GMTSAR_V5.7/gmtsar/csh/align_SAT.csh000755 015705 000000 00000005236 13505462013 020123 0ustar00sandwellwheel000000 000000 #!/bin/tcsh -f # align images using orbits and DEM # by Kang Wang in June. 2018 # if ($#argv != 2) then echo "" echo "Usage: align_SAT.csh data_type(RAW/SLC) align.in" echo "" exit 1 endif if ($1 != RAW && $1 != SLC) then echo "data type must be RAW or SLC" exit 1 endif if (! -e dem.grd) then echo "DEM file not found!" exit 1 endif echo "Downsample the DEM data" gmt grdfilter dem.grd -D3 -Fg2 -I12s -Ni -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt set master = `awk '{if (NR==1) print $1}' $2` awk '{if (NR>1) print $1}' $2 > slave.list mv $master.PRM $master.PRM0 echo "calculating the SAT height for master $master" calc_dop_orb $master.PRM0 $master.log 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM rm -f $master.log set earth_radius = `grep earth_radius $master.PRM|tail -1 | awk '{print $3}'` set fd1 = `grep fd1 $master.PRM |tail -1 |awk '{print $3}'` update_PRM $master.PRM earth_radius $earth_radius update_PRM $master.PRM fd1 $fd1 SAT_llt2rat $master".PRM" 1 < topo.llt > master.ratll set rmax = `grep num_rng_bins $master".PRM" | awk '{print $3}'` set amax = `grep num_lines $master".PRM" | awk '{print $3}'` if ($1 == RAW) then echo "Focusing the master - START" sarp.csh $master.PRM echo "Focusing the master - END" endif set nslave = `cat slave.list |wc -l` set islave = 0 foreach slave (`cat slave.list`) @ islave = $islave + 1 echo "working on " $slave " [ $islave / $nslave ]" mv $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM update_PRM $slave.PRM earth_radius $earth_radius update_PRM $slave.PRM fd1 $fd1 rm -f $slave.log if ($1 == RAW) then echo "Focusing the slave - START" sarp.csh $slave.PRM echo "Focusing the slave - END" endif SAT_llt2rat $slave".PRM" 1 < topo.llt > slave.ratll paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $6 - $1, $2, $7 - $2, "100")}' > tmp.dat awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$2) }' < offset.dat > r.xyz awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$4) }' < offset.dat > a.xyz fitoffset.csh 3 3 offset.dat >> $slave".PRM" resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 mv $slave.SLC $slave.SLC_old mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM end GMTSAR_V5.7/gmtsar/csh/batch.alos2.config000644 015705 000000 00000006452 13505462013 021110 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for batch processing # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ####################################### # processing stage for intf_batch.csh # ####################################### # 1 - start from make topo_ra # 2 - start from make and filter interferograms, unwrap and geocode proc_stage = 1 # the namestem of the master image - REQUIRED master_image = IMG-HH-ALOS2101532950-160409-WBDR1.1__D ######################################### # parameters for preprocess # # - pre_proc_batch.csh # # following 4 parameters are OPTIONAL # ######################################### # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = # SLC scale factor to convert float to int ( 0.01 is good for ALOS1 L1.1) SLC_factor = 2.5 ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put DEM.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # filters # look at the filter/ folder to choose other filters filter_wavelength = 400 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 - OPTIONAL region_cut = # use landmask (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = 0.12 GMTSAR_V5.7/gmtsar/csh/config.alos2.slc.txt000644 015705 000000 00000007357 13505462013 021433 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ALOS2_SLC.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ################ # Satellite # # ALOS or ENVI # ################ SAT = ALOS ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches (usually 1~3) num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = # SLC scale factor to convert float to int ( 0.01 is good for ALOS1 L1.1) SLC_factor = 4.0 ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # filters # look at the filter/ folder to choose other filters filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 0 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .10 GMTSAR_V5.7/gmtsar/csh/organize_files_tops_linux.csh000644 015705 000000 00000025566 13505462013 023613 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu, Mar 20 2017 # # set a directory with all downloaded orbits. e.g. orb_dir/S1A and orb_dir/S1B # # set a local directory that stores S1A and S1B orbits. e.g. orb_dir/S1A and orb_dir/S1B # # For linux users, modify the date command accordingly in order to let the script run. # Some linux system has issues with the if statement comapring tt, t1, t2. This is not fixed yet # # alias wgetasf to 'wget --http-user=**** --http-password=****' in .cshrc or .tcshrc file # requires having an account on with ASF # # modified from organize_files_tops.csh for linux uses. date command and some if statements are changed # if ($#argv != 3) then echo "" echo "Usage: organize_files_tops_linux.csh filelist pins.ll mode" echo " organize one track of S1A TOPS data, redefine frames, precise/restituted orbit is required" echo "" echo "filest:" echo " pth_filename1" echo " pth_filename2" echo " ......" echo "" echo "pins.ll:" echo " lon1 lat1" echo " lon2 lat2" echo " ......" echo "" echo "Note: " echo " files listed in filelist should be the .SAFE directory with absolute path." echo " mode = 1 will tell how many records are gonna be generated. mode = 2 will do the organizing." echo "" exit 1 endif source ~/.cshrc set url_root = "https://s1qc.asf.alaska.edu/aux_poeorb" set orb_dir = "/geosat2/InSAR_Processing/Sentinel_Orbits" if (! -f orbits.list) then wget $url_root -O orbits.html grep EOF orbits.html | awk -F'"' '{print $2}' > orbits.list rm orbits.html endif set ii = 0 set mode = $3 if (-f tmprecord) rm tmprecord # divide the list of files into sets, and create frames based on the given pins foreach line (`awk '{print $0}' $1`) set file1 = `echo $line | awk -F"," '{print $1}'` set date1 = `echo $file1 | awk '{print substr($1,length($1)-54,8)}'` set SAT1 = `echo $file1 | awk '{print substr($1,length($1)-71,3)}'` if ($ii == 0) then set file0 = `echo $file1` set date0 = `echo $date1` set SAT0 = `echo $SAT1` echo $file1 > tmprecord set ii = 1 else # gather files from the same date if ($date1 == $date0 && $SAT1 == $SAT0) then echo $file1 >> tmprecord else echo "" | awk '{printf("%s ","Combing")}' set jj = 1 set t2 = 9999999999 # examining whether the frames are consecutive foreach line2 (`awk '{print $0}' tmprecord`) echo $line2 | awk '{printf("%s ",$1)}' set tt = `echo $line2 | awk '{print substr($1,length($1)-54,15)}'` set ss2 = `echo $tt|awk '{print substr($1,1,4)"/"substr($1,5,2)"/"substr($1,7,2)" "substr($1,10,2)":"substr($1,12,2)":"substr($1,14,2)}'` set t1 = `date --date="$ss2" +%s` #set t1 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` set test = `echo $t1 $t2 | awk '{if ($1 > $2) print 1; else print 0}'` if ($test == 1) set jj = 0 set tt = `echo $line2 | awk '{print substr($1,length($1)-38,15)}'` set ss2 = `echo $tt|awk '{print substr($1,1,4)"/"substr($1,5,2)"/"substr($1,7,2)" "substr($1,10,2)":"substr($1,12,2)":"substr($1,14,2)}'` set t2 = `date --date="$ss2" +%s` #set t2 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` end echo "" | awk '{printf("%s\n","...")}' # get the orbit file names and download #set n1 = `date -v-1d -jf "%Y%m%d" $date0 +%Y%m%d` #set n2 = `date -v+1d -jf "%Y%m%d" $date0 +%Y%m%d` set n1 = ` date --date="$date0 - 1 day" +%Y%m%d ` set n2 = ` date --date="$date0 + 1 day" +%Y%m%d ` set orb = `grep $SAT0 orbits.list | grep $n1 | grep $n2` echo $n1 $n2 $orb if (! -f $orb) then if (-f $orb_dir/$SAT0/$orb) then ln -s $orb_dir/$SAT0/$orb . else wgetasf $url_root"/"$orb endif endif # compute azimuth for the start and end set pin1 = `head -1 $2 | awk '{print $1,$2}'` set f1 = `head -1 tmprecord` make_s1a_tops $f1/annotation/*iw1*vv*xml $f1/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` # refinie the calculation in case the pin is far away from the starting frame. (baseline error) shift_atime_PRM.csh tmp2.PRM $tmpazi set azi1 = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set pin2 = `tail -1 $2 | awk '{print $1,$2}'` set f2 = `tail -1 tmprecord` make_s1a_tops $f2/annotation/*iw1*vv*xml $f2/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` # refinie the calculation in case the pin is far away from the starting frame. shift_atime_PRM.csh tmp2.PRM $tmpazi set azi2 = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set nl = `grep num_lines tmp2.PRM | awk '{print $3}'` if ($azi1 > 0 && $azi2 < $nl && $jj != 0) then awk '{print $1","$2}' $2 > tmpllt set pin0 = `awk NR==1'{print $0}' tmpllt` foreach line2 (`awk '{print $0}' tmpllt`) if ($line2 != $pin0) then echo $pin0 | awk -F"," '{print $1,$2}' > tmp1llt echo $line2 | awk -F"," '{print $1,$2}' >> tmp1llt if ($mode != 1) then create_frame_tops.csh tmprecord $orb tmp1llt 1 set newfile = `ls -t -d *.SAFE | awk NR==1'{print $0}'` set Frame1 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | head -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set Frame2 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | tail -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set dirname = `echo $Frame1"_"$Frame2` echo "Created Frame $Frame1 - $Frame2 ..." echo "" if (! -d $dirname) mkdir $dirname mv $newfile $dirname else echo "" echo "Frames on date $date0 will be re-organized..." echo "" endif set pin0 = `echo $line2` endif end else if ($jj == 0) then echo "" echo "SKIP $date0, as it stopped observation in the middle ..." echo "" else echo "" echo "SKIP $date0, as it does not have enough scenes ..." echo "" endif endif echo $file1 > tmprecord set file0 = `echo $file1` set date0 = `echo $date1` set SAT0 = `echo $SAT1` endif endif end # proces the last set of files echo "" | awk '{printf("%s ","Combing")}' set jj = 1 set t2 = 9999999999 foreach line2 (`awk '{print $0}' tmprecord`) echo $line2 | awk '{printf("%s ",$1)}' set tt = `echo $line2 | awk '{print substr($1,length($1)-54,15)}'` set ss2 = `echo $tt|awk '{print substr($1,1,4)"/"substr($1,5,2)"/"substr($1,7,2)" "substr($1,10,2)":"substr($1,12,2)":"substr($1,14,2)}'` set t1 = `date --date="$ss2" +%s` #set t1 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` set test = `echo $t1 $t2 | awk '{if ($1 > $2) print 1; else print 0}'` if ($test == 1) set jj = 0 set tt = `echo $line2 | awk '{print substr($1,length($1)-38,15)}'` set ss2 = `echo $tt|awk '{print substr($1,1,4)"/"substr($1,5,2)"/"substr($1,7,2)" "substr($1,10,2)":"substr($1,12,2)":"substr($1,14,2)}'` set t2 = `date --date="$ss2" +%s` #set t2 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` end echo "" | awk '{printf("%s\n","...")}' # get the orbit file names and download set n1 = ` date --date="$date0 - 1 day" +%Y%m%d ` set n2 = ` date --date="$date0 + 1 day" +%Y%m%d ` #set n1 = `date -v-1d -jf "%Y%m%d" $date0 +%Y%m%d` #set n2 = `date -v+1d -jf "%Y%m%d" $date0 +%Y%m%d` set orb = `grep $SAT0 orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT0/$orb) then ln -s $orb_dir/$SAT0/$orb . else wgetasf $url_root"/"$orb endif endif # check the start and the end, make sure the start comes later than the first line of the first file and the end comes before the last line of the last file set pin1 = `head -1 $2 | awk '{print $1,$2}'` set f1 = `head -1 tmprecord` make_s1a_tops $f1/annotation/*iw1*vv*xml $f1/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` shift_atime_PRM.csh tmp2.PRM $tmpazi set azi1 = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set pin2 = `tail -1 $2 | awk '{print $1,$2}'` set f2 = `tail -1 tmprecord` make_s1a_tops $f2/annotation/*iw1*vv*xml $f2/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` shift_atime_PRM.csh tmp2.PRM $tmpazi set azi2 = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set nl = `grep num_lines tmp2.PRM | awk '{print $3}'` # do the assembling if ($azi1 >= 0 && $azi2 < $nl && $jj != 0) then awk '{print $1","$2","$3","$4","$5","$6}' $2 > tmpllt set pin0 = `awk NR==1'{print $0}' tmpllt` foreach line2 (`awk '{print $0}' tmpllt`) if ($line2 != $pin0) then echo $pin0 | awk -F"," '{print $1,$2,$3,$4,$5,$6}' > tmp1llt echo $line2 | awk -F"," '{print $1,$2,$3,$4,$5,$6}' >> tmp1llt if ($mode != 1) then create_frame_tops.csh tmprecord $orb tmp1llt 1 set newfile = `ls -t -d *.SAFE | awk NR==1'{print $0}'` set Frame1 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | head -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set Frame2 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | tail -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set dirname = `echo $Frame1"_"$Frame2` echo "Created Frame $Frame1 - $Frame2 ..." echo "" if (! -d $dirname) mkdir $dirname mv $newfile $dirname else echo "" echo "Frames on date $date0 will be re-organized..." echo "" endif set pin0 = `echo $line2` endif end else if ($jj == 0) then echo "" echo "SKIP $date0, as it stopped observation in the middle ..." echo "" else echo "" echo "SKIP $date0, as it does not have enough scenes ..." echo "" endif endif rm tmp* #rm *.EOF GMTSAR_V5.7/gmtsar/csh/p2p_ALOS_SLC.csh000755 015705 000000 00000025464 13505462013 020347 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # # Modification History # # Xiaohua Xu, Oct 9, 2013 # # Changed some code in Part 2 to make it work for one FBD and one FBS files. alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_ALOS_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_ALOS_SLC.csh IMG-HH-ALPSRP022200660-H1.1__A IMG-HH-ALPSRP028910660-H1.1__A config.alos.slc.txt" echo "" echo " Place the raw L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if(! -f raw/$1 ) then echo " no file raw/"$1 exit endif if(! -f raw/$2 ) then echo " no file raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set SAT = `grep SAT $3 | awk '{print $3}'` set stage = `grep proc_stage $3 | awk '{print $3}'` set num_patches = `grep num_patches $3 | awk '{print $3}'` set SLC_factor = `grep SLC_factor $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = ` echo $1 | awk '{ print substr($1,8,length($1)-7)}'` set slave = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # rm raw/*.PRM* rm raw/*.SLC rm raw/*.LED # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif echo $commandline ALOS_pre_process_SLC IMG-HH-$master LED-$master $commandline -ALOS1 ALOS_pre_process_SLC IMG-HH-$slave LED-$slave $commandline -ALOS1 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/IMG-HH-$master.SLC . ln -s ../raw/IMG-HH-$slave.SLC . ln -s ../raw/IMG-HH-$master.LED . ln -s ../raw/IMG-HH-$slave.LED . # if images do not match, convert the FBD image to FBS set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-HH-$slave.PRM IMG-HH-$slave"_"FBS.PRM echo "Overwriting the old slave image" mv IMG-HH-$slave"_"FBS.PRM IMG-HH-$slave.PRM update_PRM IMG-HH-$slave.PRM input_file IMG-HH-$slave.SLC mv IMG-HH-$slave"_"FBS.SLC IMG-HH-$slave.SLC else if ($t == 0.5) then echo "Convert the master image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-HH-$master.PRM IMG-HH-$master"_"FBS.PRM echo "Overwriting the old master image" mv IMG-HH-$master"_"FBS.PRM IMG-HH-$master.PRM update_PRM IMG-HH-$master.PRM input_file IMG-HH-$master.SLC mv IMG-HH-$master"_"FBS.SLC IMG-HH-$master.SLC else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif cp IMG-HH-$slave.PRM IMG-HH-$slave.PRM0 SAT_baseline IMG-HH-$master.PRM IMG-HH-$slave.PRM0 >> IMG-HH-$slave.PRM xcorr IMG-HH-$master.PRM IMG-HH-$slave.PRM -xsearch 64 -ysearch 64 -nx 32 -ny 64 fitoffset.csh 3 3 freq_xcorr.dat >> IMG-HH-$slave.PRM 18 resamp IMG-HH-$master.PRM IMG-HH-$slave.PRM IMG-HH-$slave.PRMresamp IMG-HH-$slave.SLCresamp 4 rm IMG-HH-$slave.SLC mv IMG-HH-$slave.SLCresamp IMG-HH-$slave.SLC cp IMG-HH-$slave.PRMresamp IMG-HH-$slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/IMG-HH-$master.PRM master.PRM ln -s ../raw/IMG-HH-$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC slc2amp.csh IMG-HH-$master.PRM 2 amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../SLC/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../SLC/IMG-HH-$ref.SLC . ln -s ../../SLC/IMG-HH-$rep.SLC . ln -s ../../raw/IMG-HH-$ref.LED . ln -s ../../raw/IMG-HH-$rep.LED . cp ../../SLC/IMG-HH-$ref.PRM . cp ../../SLC/IMG-HH-$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM -topo topo_shift.grd filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM -topo topo_ra.grd filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec endif else intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/csh/pre_proc.csh000755 015705 000000 00000034146 13505462013 020135 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua Xu, Jan, 2018 # # Preprocess the data to Raw or SLC or aligned SLC depending on which satellite to use # alias rm 'rm -f' unset noclobber # # check the number of arguments # if (!($#argv == 3 || $#argv == 5 || $#argv == 7 || $#argv == 9 || $#argv == 11)) then echo "" echo "Usage: pre_proc.csh SAT master_stem slave_stem [-near near_range] [-radius RE] [-npatch num_patches] [-fd1 DOPP]" echo "" echo "Example: pre_proc.csh ALOS IMG-HH-ALPSRP099496420-H1.0__A IMG-HH-ALPSRP220276420-H1.0__A" echo "" exit 1 endif # # parse the command line arguments # echo "pre_proc.csh" set SAT = $1 echo "0" $argv[4-$#argv] | awk '{for (i=1;i<=12;i++) print $i}' > tmp set a = `grep near tmp -n | awk -F: '{print $1}'` set NEAR = `awk 'NR=='$a'+1{print $1}' tmp` set a = `grep near tmp -n | awk -F: '{print $1}'` set RAD = `awk 'NR=='$a'+1{print $1}' tmp` set a = `grep npatch tmp -n | awk -F: '{print $1}'` set num_patches = `awk 'NR=='$a'+1{print $1}' tmp` set a = `grep fd1 tmp -n | awk -F: '{print $1}'` set FD1 = `awk 'NR=='$a'+1{print $1}' tmp` rm tmp set master = `echo $2` set slave = `echo $3` set commandline = `echo $argv[4-$#argv]` if ($SAT == "ALOS") then echo "" echo "Pre-Process ALOS data - START" echo "" set master = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` set slave = ` echo $3 | awk '{ print substr($1,8,length($1)-7)}'` if (! -f IMG-HH-$master || ! -f IMG-HH-$slave || ! -f LED-$master || ! -f LED-$slave) then echo "" echo "$master $slave" echo "Error : Can not find input file at current directory!" echo "" exit 1 endif # # unpack the master if necessary # if (! -f IMG-HH-$master.raw || ! -f IMG-HH-$master.PRM ) then echo "pre_process master image" ALOS_pre_process IMG-HH-$master LED-$master $argv[4-$#argv] endif set NEAR = `grep near_range IMG-HH-$master.PRM | awk '{print $3}'` set RAD = `grep earth_radius IMG-HH-$master.PRM | awk '{print $3}'` set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set FD1 = `grep fd1 IMG-HH-$master.PRM | awk '{print $3}'` set num_patches = `grep num_patches IMG-HH-$master.PRM | awk '{print $3}'` # # unpack the slave image using the same earth radius and near range as the master image # echo "pre_process slave image" ALOS_pre_process IMG-HH-$slave LED-$slave -fd1 $FD1 -near $NEAR -radius $RAD -npatch $num_patches -fd1 $FD1 # # check the range sampling rate of the slave images and do conversion if necessary # set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs IMG-HH-$slave.PRM IMG-HH-$slave"_"FBS.PRM echo "Overwriting the old slave image" mv IMG-HH-$slave"_"FBS.PRM IMG-HH-$slave.PRM update_PRM IMG-HH-$slave.PRM input_file IMG-HH-$slave.raw mv IMG-HH-$slave"_"FBS.raw IMG-HH-$slave.raw echo "IMG-HH-$slave is converted to FBS mode" > ALOS_fbd2fbs_log else if ($t == 0.5) then echo "Use FBS mode image as master" ALOS_fbd2fbs IMG-HH-$master.PRM IMG-HH-$master"_"FBS.PRM echo "Overwriting the old master image" mv IMG-HH-$master"_"FBS.PRM IMG-HH-$master.PRM update_PRM IMG-HH-$master.PRM input_file IMG-HH-$master.raw mv IMG-HH-$master"_"FBS.raw IMG-HH-$master.raw echo "IMG-HH-$master is converted to FBS mode" > ALOS_fbd2fbs_log exit 1 else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif echo "" echo " Pre-Process ALOS data - END" echo "" else if ($SAT == "ERS") then echo "" echo " Pre-Process ERS data - START" echo "" # set 0 for master to use it's own value echo ERS_pre_process $master $NEAR $RAD $num_patches $FD1 set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` set FD1 = `grep fd1 $master.PRM | awk '{print $3}'` set num_patches = `grep num_patches $master.PRM | awk '{print $3}'` ERS_pre_process $slave $NEAR $RAD $num_patches $FD1 # # check patch number, if different, use the smaller one # set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` echo "Different number of patches: $pch1 $pch2" if ($pch1 != $pch2) then if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp echo "" echo " Pre-Process ERS data - END" echo "" else if ($SAT == "ENVI") then echo "" echo " Pre-Process ENVISAT data - START" echo "" ENVI_pre_process $master $NEAR $RAD $num_patches $FD1 set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` ENVI_pre_process $slave $NEAR $RAD $num_patches $FD1 # # check patch number, if different, use the smaller one # set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` echo "Different number of patches: $pch1 $pch2" if ($pch1 != $pch2) then if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp echo "" echo " Pre-Process ENVISAT data - END" echo "" else if ($SAT == "ENVI_SLC") then echo "" echo " Pre-Process ENVISAT SLC data - START" echo "" ENVI_SLC_pre_process $master $RAD set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` echo "ENVI_SLC_pre_process $slave $RAD " ENVI_SLC_pre_process $slave $RAD echo "" echo " Pre-Process ENVISAT SLC data - END" echo "" else if ($SAT == "ALOS_SLC" || $SAT == "ALOS2" || $SAT == "ALOS2_SCAN") then echo "" echo " Pre-Process ALOS SLC data - START" echo "" set master = ` echo $2 | awk '{ print substr($1,5,length($1)-4)}'` set slave = ` echo $3 | awk '{ print substr($1,5,length($1)-4)}'` set master_led = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` set slave_led = ` echo $3 | awk '{ print substr($1,8,length($1)-7)}'` #echo $master $slave $master_led $slave_led if (! -f IMG-$master || ! -f IMG-$slave || ! -f LED-$master_led || ! -f LED-$slave_led) then echo "" echo "Error : Can not find input file at current directory!" echo "" exit 1 endif if ($SAT == "ALOS_SLC") then ALOS_pre_process_SLC IMG-$master LED-$master_led $commandline -ALOS1 ALOS_pre_process_SLC IMG-$slave LED-$slave_led $commandline -ALOS1 else ALOS_pre_process_SLC IMG-$master LED-$master_led $commandline ALOS_pre_process_SLC IMG-$slave LED-$slave_led $commandline endif # make FBD FBS conversion set rng_samp_rate_m = `grep rng_samp_rate IMG-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate IMG-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$slave.PRM IMG-$slave"_"FBS.PRM echo "Overwriting the old slave image" mv IMG-$slave"_"FBS.PRM IMG-$slave.PRM update_PRM IMG-$slave.PRM input_file IMG-$slave.SLC mv IMG-$slave"_"FBS.SLC IMG-$slave.SLC echo "IMG-HH-$slave is converted to FBS mode" > ALOS2_fbd2fbs_log else if ($t == 0.5) then echo "Convert the master image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$master.PRM IMG-$master"_"FBS.PRM echo "Overwriting the old master image" mv IMG-$master"_"FBS.PRM IMG-$master.PRM update_PRM IMG-$master.PRM input_file IMG-$master.SLC mv IMG-$master"_"FBS.SLC IMG-$master.SLC echo "IMG-HH-$master is converted to FBS mode" > ALOS2_fbd2fbs_log else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif echo "" echo " Pre-Process ALOS SLC data - END" echo "" else if ($SAT == "CSK_RAW") then echo "" echo " Pre-Process CSK Raw data - START" echo "" make_raw_csk $master.h5 $master make_raw_csk $slave.h5 $slave # # calculate SC_vel and SC_height # mv $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $RAD $FD1 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # mv $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $RAD $FD1 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 # # check patch number, if different, use the smaller one # set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` echo "Different number of patches: $pch1 $pch2" if ($pch1 != $pch2) then if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp echo "" echo " Pre-Process CSK Raw data - END" echo "" else if ($SAT == "CSK_SLC" || $SAT == "TSX" || $SAT == "S1_STRIP" || $SAT == "RS2") then echo "" echo " Pre-Process CSK/TSX/RS2/S1_STRIP SLC data - START" echo "" if ($SAT == "CSK_SLC") then make_slc_csk $master.h5 $master make_slc_csk $slave.h5 $slave else if ($SAT == "TSX") then make_slc_tsx $master.xml $master.cos $master make_slc_tsx $slave.xml $slave.cos $slave else if ($SAT == "RS2") then make_slc_rs2 $master.xml $master.tif $master make_slc_rs2 $slave.xml $slave.tif $slave mv $master.LED save-$master.LED extend_orbit save-$master.LED $master.LED 3 mv $slave.LED save-$slave.LED extend_orbit save-$slave.LED $slave.LED 3 else make_slc_s1a $master.xml $master.tiff $master mv $master.LED save-$master.LED extend_orbit save-$master.LED $master.LED 3 make_slc_s1a $slave.xml $slave.tiff $slave mv $slave.LED save-$slave.LED extend_orbit save-$slave.LED $slave.LED 3 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $RAD 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $RAD 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 echo "" echo " Pre-Process SLC data - END" echo "" else if ($SAT == "S1_TOPS") then echo "" echo " Pre-Process S1_TOPS data - START" echo "" if (! -f ../topo/dem.grd) then echo "missing file ../topo/dem.grd" exit 1 endif ln -s ../topo/dem.grd . set iono = "" if ($iono == "") set iono = `grep correct_iono config* | head -1 | awk '{print $3}'` if ($iono == "") set iono = `grep correct_iono ../config* | head -1 | awk '{print $3}'` if ($iono == "" || $iono == 0) then align_tops.csh $master $master.EOF $slave $slave.EOF dem.grd else echo "Running align TOPS script with BESD for ionospheric correction" align_tops_esd.csh $master $master.EOF $slave $slave.EOF dem.grd 2 endif echo "" echo " Pre-Process S1_TOPS data - END" echo "" endif # GMTSAR_V5.7/gmtsar/csh/sarp.csh000755 015705 000000 00000001416 13505462013 017263 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 7 2010 # unset noclobber # # script to focus SAR data and deal with negative yshift # # check for number of arguments # if ($#argv < 1) then echo "" echo "Usage: sarp.csh file.PRM " echo "" echo "Example: sarp.csh IMG-HH-ALPSRP049040660-H1.0__A.PRM " echo "" exit 1 endif # set slcfile = ` echo $1 | awk '{ print(substr($1,1,length($1)-3)"SLC")}'` # esarp $1 $slcfile > tmp_sarp # # update the PRM file # grep -v SLC_file $1 | grep -v dtype > tmp.PRM mv tmp.PRM $1 echo "SLC_file = "$slcfile >> $1 if ( $3 == R4) then echo "dtype = c" >> $1 else echo "dtype = a" >> $1 endif # # put in dfact into PRM file # set dfact = `grep I2SCALE tmp_sarp | awk '{print $2}'` update_PRM $1 SLC_scale $dfact rm tmp_sarp GMTSAR_V5.7/gmtsar/csh/slc2amp.csh000755 015705 000000 00000002155 13505462013 017660 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Xiaopeng Tong Nov 23 2009 # unset noclobber # # Converts a complex SLC file to a real amplitude grd # file using optional filter and a PRM file # # define the filters # set sharedir = `gmtsar_sharedir.csh` set fil1 = $sharedir/filters/gauss5x3 set fil2 = $sharedir/filters/gauss9x5 # # check for number of arguments # if ($#argv != 3 ) then echo "" echo "Usage: slc2amp.csh filein.PRM rng_dec fileout.grd " echo "" echo " rng_dec is range decimation" echo " e.g. 1 for ERS ENVISAT ALOS FBD" echo " 2 for ALOS FBS " echo " 4 for TSX" echo "" echo "Example: slc2amp.csh IMG-HH-ALPSRP055750660-H1.0__A.PRM 2 amp-ALPSRP055750660-H1.0__A.grd" echo "" exit 1 endif # # filter the amplitudes done in conv # check the input and output filename before # if ((($1 =~ *PRM*) || ($1 =~ *prm*)) && ($3 =~ *grd*)) then echo " range decimation is:" $2 conv 4 $2 $fil1 $1 $3 else echo "slc2amp.csh" echo "wrong filename" exit 1 endif # # get the zmin and zmax value # gmt grdmath $3 1 MUL = $3 GMTSAR_V5.7/gmtsar/csh/pre_proc_batch_ALOS_SLC.csh000755 015705 000000 00000012151 13505462013 022605 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Mar 2 2010 # modified by D. Sandwell MAR 11 2010 # # preprocess all the data based on data.in table file and generate: # 1. SLC files # 2. PRM files # 3. time-baseline plot for user to create stacking pairs # format in data.in table file: # line 1: master_name # line 2 and below: slave_name alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv != 2) then echo "" echo "Usage: pre_proc_batch_ALOS_SLC.csh data.in batch.config" echo " preprocess a set of images using a common rear_range and radius" echo "" echo " format of data.in is:" echo " line 1: master_name " echo " line 2 and below: slave_name" echo "" echo " example of data.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP089300650-H1.0__A" echo " IMG-HH-ALPSRP236920650-H1.0__A" echo "" echo "Example: pre_proc_batch_ALOS_SLC.csh data.in batch.config" echo "" exit 1 endif # # read parameters from configuration file # set num_patches = `grep num_patches $2 | awk '{print $3}'` set earth_radius = `grep earth_radius $2 | awk '{print $3}'` set SLC_factor = `grep SLC_factor $2 | awk '{print $3}'` set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif echo $commandline # # open and read data.in table # echo "" echo "START PREPROCESS A STACK OF IMAGES" echo "" echo "preprocess master image" set line1 = `awk 'NR==1 {print $0}' $1` set master = `echo $line1[1] | awk '{ print substr($1,8,length($1)-7)}'` # # unpack the master if necessary # if(! -f IMG-HH-$master.SLC || ! -f IMG-HH-$master.PRM ) then echo "ALOS_pre_process_SLC IMG-HH-$master LED-$master -ALOS1 $commandline" ALOS_pre_process_SLC IMG-HH-$master LED-$master -ALOS1 $commandline endif set RAD = `grep earth_radius IMG-HH-$master.PRM | awk '{print $3}'` set SLC_factor = `grep SLC_factor IMG-HH-$master.PRM | awk '{print $3}'` set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set npatch = `grep num_patch IMG-HH-$master.PRM | awk '{print $3}'` baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM >! baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM GMT >! table.gmt # # loop and unpack the slave image using the same earth radius and near range as the master image # foreach line2 (`awk 'NR>1 {print $0}' $1`) echo "pre_proc_batch.csh" echo "preprocess slave images" set slave = ` echo $line2 | awk '{ print substr($1,8,length($1)-7)}'` if(! -f IMG-HH-$slave.SLC || ! -f IMG-HH-$slave.PRM ) then echo "ALOS_pre_process_SLC IMG-HH-$slave LED-$slave -ALOS1 -radius $RAD " ALOS_pre_process_SLC IMG-HH-$slave LED-$slave -ALOS1 -radius $RAD endif # # check the range sampling rate of the slave images and do conversion if necessary # set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM GMT >> table.gmt else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-HH-$slave.PRM IMG-HH-$slave"_"FBS.PRM # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM GMT >> table.gmt echo "Overwriting the old slave image" mv IMG-HH-$slave"_"FBS.PRM IMG-HH-$slave.PRM update_PRM IMG-HH-$slave.PRM input_file IMG-HH-$slave.SLC mv IMG-HH-$slave"_"FBS.SLC IMG-HH-$slave.SLC else if ($t == 0.5) then echo "Use FBS mode image as master" exit 1 else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif # end of the loop over slave images end # # make baseline plots # awk '{print 2006.5+($1-181)/365.25,$2,$7}' < table.gmt > text # awk '{print 2006.5+($1-181)/365.25,$2,9,$4,$5,$6,$7}' < table.gmt > text set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-500, $4+500}'` # set region = `minmax text -C | awk '{print $1-0.5, $2+0.5, -1200, 1200}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > stacktable_all.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba1:"year":/a200g00f100:"baseline (m)":WSen -O >> stacktable_all.ps echo "" echo "END PREPROCESS A STACK OF IMAGES" echo "" # # clean up the mess # rm text text2 GMTSAR_V5.7/gmtsar/csh/gmtsar_sharedir.csh.in000644 015705 000000 00000000224 13505462013 022072 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id: gmtsar_sharedir.csh.in 42 2013-04-08 20:43:57Z pwessel $ # Just report the GMTSAR share directory echo "@prefix@/share/gmtsar" GMTSAR_V5.7/gmtsar/csh/preproc_batch_tops.csh000755 015705 000000 00000030626 13505462013 022203 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu, Feb 26 2016 # Take previous code, make it work with multiple frames # Take previous code, make it work with bursts mismatch # Preprocess and align tops image stacks # used for time series analysis # Xiaohua(Eric) Xu, Jan 19 2016 # if ($#argv != 3) then echo "" echo "Usage: preproc_batch_tops.csh data.in dem.grd mode" echo " preprocess and align a set of tops images in data.in, precise orbits required" echo "" echo " format of data.in:" echo " image_name:orbit_name" echo "" echo " example of data.in" echo " s1a-iw1-slc-vv-20150626...001:s1a-iw1-slc-vv-20150626...001:s1a-iw1-slc-vv-20150626...001:S1A_OPER_AUX_POEORB_V20150601_20150603.EOF" echo " s1a-iw1-slc-vv-20150715...001:s1a-iw1-slc-vv-20150715...001:s1a-iw1-slc-vv-20150715...001:S1A_OPER_AUX_POEORB_V20150625_20150627.EOF" echo "" echo " outputs:" echo " baseline.ps align_table.ra (contains info for precise geomatric alignment)" echo " *.PRM *.LED *.SLC(mode 2)" echo "" echo " Note:" echo " The names must be in time order in each line to be stitched together" echo "" echo "Reference: Xu, X., Sandwell, D.T., Tymofyeyeva, E., González-Ortega, A. and Tong, X., " echo " 2017. Tectonic and Anthropogenic Deformation at the Cerro Prieto Geothermal " echo " Step-Over Revealed by Sentinel-1A InSAR. IEEE Transactions on Geoscience and " echo " Remote Sensing." exit 1 endif # set up some parameters set mode = $3 set sl = `echo "1"` # sample the dem if ($mode == 2) then gmt grdfilter $2 -D2 -Fg2 -I12s -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt endif # first line is the super-master, all images aligned to it set master = `awk -F: 'NR==1 {print $1}' $1 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set mmaster = `awk -F: 'NR==1 {print $1}' $1 | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` # clean up a little bit rm *.PRM* *.SLC *.LED tmp* if($mode == 1) then rm baseline_table.dat endif # loop over all the acquisitions foreach line (`awk '{print $0}' $1`) # record the first one as the stem_master set stem_master = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set m_stem_master = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` if($mode == 1) then # for mode 1, generate baseline_plots set image = `echo $line | awk -F: '{print $1}'` set orbit = `echo $line | awk -F: '{print $NF}'` # generate prms and leds make_s1a_tops $image.xml $image.tiff $m_stem_master 0 ext_orb_s1a $m_stem_master.PRM $orbit $m_stem_master # get the height and baseline info cp $m_stem_master.PRM junk1 calc_dop_orb junk1 junk2 0 0 cat junk1 junk2 > $m_stem_master.PRM baseline_table.csh $mmaster.PRM $m_stem_master.PRM >> baseline_table.dat baseline_table.csh $mmaster.PRM $m_stem_master.PRM GMT >> table.gmt # clean up the mess rm junk1 junk2 else if($mode == 2) then # for mode 2, stitch and align all the images # find the files to be stitched echo $line | awk -F: '{for (i=1;i tmp.filelist set orbit = `echo $line | awk -F: '{print $NF}'` if (-f tmp.stitchlist) then rm tmp.stitchlist endif set tmp_da = 0 # loop over all the files in this line rm *par* foreach file (`awk '{print $0}' tmp.filelist`) # generate prms and leds set stem = `echo $file | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` # get images aligned if($sl == 1) then # sl=1 means processing the super_master image, simpley generate images and stitch them together make_s1a_tops $file.xml $file.tiff $stem 1 ext_orb_s1a $stem.PRM $orbit $stem echo $stem >> tmp.stitchlist else # sl>1 measn processing slave images, point-by-point alignment and corregistration is required make_s1a_tops $file.xml $file.tiff $stem 0 ext_orb_s1a $stem.PRM $orbit $stem # compute the time difference between first frame and the rest frames set t1 = `grep clock_start $stem_master.PRM | grep -v SC_clock_start | awk '{printf("%.13f", $3)}'` set t2 = `grep clock_start $stem.PRM | grep -v SC_clock_start | awk '{printf("%.13f", $3)}'` set prf = `grep PRF $stem_master.PRM | awk '{printf("%.6f",$3)}'` set nl = `echo $t1 $t2 $prf | awk '{printf("%d",($2 - $1)*$3*86400.0+0.2)}'` echo "Shifting the master PRM by $nl lines..." cp $master.PRM tmp.PRM # shift the super-master's PRM based on $nl so SAT_llt2rat gives precise estimate. set ttmp = `grep clock_start tmp.PRM | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_start $ttmp set ttmp = `grep clock_stop tmp.PRM | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_stop $ttmp set ttmp = `grep SC_clock_start tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_start $ttmp set ttmp = `grep SC_clock_stop tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_stop $ttmp # compute whether there are any image offset if ($tmp_da == 0) then cp tmp.PRM junk1.PRM cp $stem.PRM junk2.PRM calc_dop_orb junk1.PRM junk $earth_radius 0 cat junk >> junk1.PRM calc_dop_orb junk2.PRM junk $earth_radius 0 cat junk >> junk2.PRM set lontie = `SAT_baseline junk1.PRM junk2.PRM | grep lon_tie_point | awk '{print $3}'` set lattie = `SAT_baseline junk1.PRM junk2.PRM | grep lat_tie_point | awk '{print $3}'` set tmp_am = `echo $lontie $lattie 0 | SAT_llt2rat tmp.PRM 1 | awk '{print $2}'` set tmp_as = `echo $lontie $lattie 0 | SAT_llt2rat $stem.PRM 1 | awk '{print $2}'` set tmp_da = `echo $tmp_am $tmp_as | awk '{printf("%d",$2-$1)}'` rm junk1.PRM junk2.PRM junk endif # in case the images are offset by more than a burst, shift the super-master's PRM again so SAT_llt2rat gives precise estimate if ($tmp_da > -1000 && $tmp_da < 1000) then cp tmp.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > tmp.PRM cp $stem.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > $stem.PRM rm junk1 junk2 SAT_llt2rat tmp.PRM 1 < topo.llt > tmpm.dat & SAT_llt2rat $stem.PRM 1 < topo.llt > tmp1.dat & wait else echo "Modifying master PRM by $tmp_da lines..." set prf = `grep PRF tmp.PRM | awk '{print $3}'` set ttmp = `grep clock_start tmp.PRM | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_start $ttmp set ttmp = `grep clock_stop tmp.PRM | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_stop $ttmp set ttmp = `grep SC_clock_start tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_start $ttmp set ttmp = `grep SC_clock_stop tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_stop $ttmp cp tmp.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > tmp.PRM cp $stem.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > $stem.PRM rm junk1 junk2 SAT_llt2rat tmp.PRM 1 < topo.llt > tmpm.dat & SAT_llt2rat $stem.PRM 1 < topo.llt > tmp1.dat & wait endif # get r, dr, a, da, SNR table to be used by fitoffset.csh paste tmpm.dat tmp1.dat | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $6 - $1, $2, $7 - $2, "100")}' > tmp.dat set rmax = `grep num_rng_bins $stem.PRM | awk '{print $3}'` set amax = `grep num_lines $stem.PRM | awk '{print $3}'` awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat # prepare the offset parameters for the stitched image if ($tmp_da > -1000 && $tmp_da < 1000) then awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 + '$nl', $4, $5)}' < offset.dat >> par_tmp.dat else awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 + '$nl' - '$tmp_da', $4 + '$tmp_da', $5)}' < offset.dat >> par_tmp.dat endif # prepare the rshift and ashift look up table to be used by make_s1a_tops awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$2) }' < offset.dat > r.xyz awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$4) }' < offset.dat > a.xyz gmt blockmedian r.xyz -R0/$rmax/0/$amax -I8/4 -r -bo3d > rtmp.xyz gmt blockmedian a.xyz -R0/$rmax/0/$amax -I8/4 -r -bo3d > atmp.xyz gmt surface rtmp.xyz -bi3d -R0/$rmax/0/$amax -I8/4 -Grtmp.grd -T0.5 -N1000 -r & gmt surface atmp.xyz -bi3d -R0/$rmax/0/$amax -I8/4 -Gatmp.grd -T0.5 -N1000 -r & wait gmt grdmath rtmp.grd FLIPUD = r.grd gmt grdmath atmp.grd FLIPUD = a.grd # generate the image with point-by-point shifts make_s1a_tops $file.xml $file.tiff $stem 1 r.grd a.grd # need to update shift parameter so stitch_tops will know how to stitch fitoffset.csh 3 3 offset.dat >> $stem.PRM #fitoffset.csh 1 1 offset.dat >> $stem.PRM echo $stem >> tmp.stitchlist endif end set nf = `wc -l tmp.stitchlist | awk '{print $1}'` # get the name for stitched file set stem = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` # stitch images together and get the precise orbit if ($nf > 1) then stitch_tops tmp.stitchlist $stem else set tmp_stem = `cat tmp.stitchlist` cp $tmp_stem.PRM $stem.PRM cp $tmp_stem.LED $stem.LED mv $tmp_stem.SLC $stem.SLC update_PRM $stem.PRM input_file $stem.raw update_PRM $stem.PRM SLC_file $stem.SLC update_PRM $stem.PRM led_file $stem.LED endif ext_orb_s1a $stem.PRM $orbit $stem # for images except the super-master if ($sl != 1) then cp $stem.PRM $stem.PRM0 #if ($bshift != 0) echo "Updated shift caused by burst offset is $bshift" if ($tmp_da > -1000 && $tmp_da < 1000) then update_PRM $stem.PRM ashift 0 else update_PRM $stem.PRM ashift $tmp_da echo "Restoring $tmp_da lines shift to the image..." endif update_PRM $stem.PRM rshift 0 resamp $mmaster.PRM $stem.PRM $stem.PRMresamp $stem.SLCresamp 1 mv $stem.PRMresamp $stem.PRM mv $stem.SLCresamp $stem.SLC fitoffset.csh 3 3 par_tmp.dat >> $stem.PRM endif cp $stem.PRM junk1 if ($sl == 1) then calc_dop_orb junk1 junk2 0 0 set earth_radius = `grep earth_radius junk2 | awk '{print $3}'` else calc_dop_orb junk1 junk2 $earth_radius 0 endif cat junk1 junk2 > $stem.PRM rm junk1 junk2 set sl = `echo "2"` endif end # for mode 1, plot the time-baseline figure if($mode == 1) then awk '{print 2014+$1/365.25,$2,$7}' < table.gmt > text set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-50, $4+50}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > baseline.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba0.5:"year":/a50g00f25:"baseline (m)":WSen -O >> baseline.ps rm text text2 table.gmt endif # clean up a little bit if($mode == 2) rm tmp* topo.llt flt.grd atmp* rtmp* GMTSAR_V5.7/gmtsar/csh/dem2topo_ra_ALOS2.csh000755 015705 000000 00000007116 13505462013 021434 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Matt WEI Feb 1 2010 # modified by Xiaopeng Feb 9 2010 # modified by E. Fielding, DST, XT to add TSX data Jan 10 2014 #======================================================================= # script to make topography for interferograms # The USGS elevations are height above WGS84 so this is OK. # alias rm 'rm -f' unset noclobber # if ($#argv < 2) then echo " " echo "Usage: dem2topo_ra.csh master.PRM dem.grd" echo " " echo " Note: Works for TSX,ALOS,ERS,ENVISAT" echo " " exit 1 endif # # local variables # set scale = -JX7i if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # #========================Mosaic topo data=============================== #----------------------------------------------------------------------- # #------------------------Get bounds in radar coordinates---------------- set XMAX = `grep num_rng_bins $1 | awk '{print $3}'` set yvalid = `grep num_valid_az $1 | awk '{print $3}'` set num_patch = `grep num_patches $1 | awk '{print $3}'` set YMAX = `echo "$yvalid $num_patch" | awk '{print $1*$2}'` set SC = `grep SC_identity $1 | awk '{print $3}'` set PRF = `grep PRF *.PRM | awk 'NR == 1 {printf("%d", $3)}'` # # look for range sampling rate # set rng_samp_rate = `grep rng_samp_rate $1 | awk 'NR == 1 {printf("%d", $3)}'` # set the range spacing of simulation in units of image range pixel size if($rng_samp_rate > 0 && $rng_samp_rate < 25000000) then set rng = 1 else if($rng_samp_rate >= 25000000 && $rng_samp_rate < 72000000 || $SC == 7 ) then set rng = 2 else if($rng_samp_rate >= 72000000) then set rng = 4 else echo "range sampling rate out of bounds" exit 0 endif echo " range decimation is: " $rng # use special SAT_llt2rat if ($SC == 5) then echo " processing for ALOS data" gmt grd2xyz --FORMAT_FLOAT_OUT=%lf $2 -s | SAT_llt2rat $1 0 -bod > trans.dat else echo " processing generic data" if($SC == 10) then gmt grd2xyz --FORMAT_FLOAT_OUT=%lf $2 -s | SAT_llt2rat $1 1 -bod > trans.dat else gmt grd2xyz --FORMAT_FLOAT_OUT=%lf $2 -s | SAT_llt2rat $1 0 -bod > trans.dat endif endif # # use an aximuth spacing of 2 for low PRF data such as S1 TOPS # if ($PRF < 1000) then gmt gmtconvert trans.dat -o0,1,2 -bi5d -bo3d | gmt blockmedian -R0/$XMAX/0/$YMAX -I2/32 -bi3d -bo3d -r $V > temp.rat gmt surface temp.rat -Q -R0/$XMAX/0/$YMAX -I2/32 -bi3d -T.50 -N1000 -Gpixel.grd -r $V >& tmp.hint set nregion = `grep Hint tmp.hint | awk 'NR==1 {print $4}'` echo "region=$nregion" gmt surface temp.rat $nregion -I2/32 -bi3d -T.50 -N1000 -Gpixel.grd -r $V gmt grdsample pixel.grd -R0/$XMAX/0/$YMAX -I2/32 -r -Gpixel.grd else gmt gmtconvert trans.dat -o0,1,2 -bi5d -bo3d | gmt blockmedian -R0/$XMAX/0/$YMAX -I2/32 -bi3d -bo3d -r $V > temp.rat gmt surface temp.rat -Q -R0/$XMAX/0/$YMAX -I2/32 -bi3d -T.50 -N1000 -Gpixel.grd -r $V >& tmp.hint set nregion = `grep Hint tmp.hint | awk 'NR==1 {print $4}'` echo "region=$nregion" gmt surface temp.rat $nregion -I2/32 -bi3d -T.50 -N1000 -Gpixel.grd -r $V gmt grdsample pixel.grd -R0/$XMAX/0/$YMAX -I2/32 -r -Gpixel.grd endif # # flip top to bottom for both ascending and descending passes # gmt grdmath pixel.grd FLIPUD = topo_ra.grd # # plotting # gmt grd2cpt topo_ra.grd -Cgray $V -Z > topo_ra.cpt gmt grdimage topo_ra.grd $scale -P -Ctopo_ra.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen $V -K > topo_ra.ps gmt psscale -Rtopo_ra.grd -J -DJTC+w5i/0.2i+h+e -Ctopo_ra.cpt -Bxaf -By+lm -O >> topo_ra.ps gmt psconvert -Tf -P -Z topo_ra.ps echo "Topo range/azimuth map: topo_ra.pdf" # # clean up # rm pixel.grd temp.rat dem.xyz rm topo_ra.cpt GMTSAR_V5.7/gmtsar/csh/fetchOrbit.py000644 015705 000000 00000007770 13505462013 020270 0ustar00sandwellwheel000000 000000 #!/usr/bin/env python3 import numpy as np import requests import os import argparse import datetime from html.parser import HTMLParser server = 'https://qc.sentinel1.eo.esa.int/' orbitMap = [('precise','aux_poeorb'), ('restituted','aux_resorb')] datefmt = "%Y%m%dT%H%M%S" queryfmt = "%Y-%m-%d" def cmdLineParse(): ''' Command line parser. ''' parser = argparse.ArgumentParser(description='Fetch orbits corresponding to given SAFE package') parser.add_argument('-i', '--input', dest='input', type=str, required=True, help='Path to SAFE package of interest') parser.add_argument('-o', '--output', dest='outdir', type=str, default='.', help='Path to output directory') return parser.parse_args() def FileToTimeStamp(safename): ''' Return timestamp from SAFE name. ''' fields = safename.split('_') tstamp = datetime.datetime.strptime(fields[-4], datefmt) return tstamp class MyHTMLParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.fileList = [] self.in_td = False self.in_a = False def handle_starttag(self, tag, attrs): if tag == 'td': self.in_td = True elif tag == 'a': self.in_a = True def handle_data(self,data): if self.in_td and self.in_a: if 'S1A_OPER' in data: self.fileList.append(data.strip()) def handle_tag(self, tag): if tag == 'td': self.in_td = False self.in_a = False elif tag == 'a': self.in_a = False def download_file(url, outdir='.', session=None): ''' Download file to specified directory. ''' if session is None: session = requests.session() path = os.path.join(outdir, os.path.basename(url)) print('Downloading URL: ', url) request = session.get(url, stream=True, verify=False) try: val = request.raise_for_status() success = True except: success = False if success: with open(path,'wb') as f: for chunk in request.iter_content(chunk_size=1024): if chunk: f.write(chunk) f.flush() return success if __name__ == '__main__': ''' Main driver. ''' inps = cmdLineParse() fileTS = FileToTimeStamp(inps.input) print('Reference time: ', fileTS) match = None session = requests.Session() for spec in orbitMap: oType = spec[0] if oType == 'precise': delta = datetime.timedelta(days=2) elif oType == 'restituted': delta = datetime.timedelta(hours=6) timebef = (fileTS - delta).strftime(queryfmt) timeaft = (fileTS + delta).strftime(queryfmt) url = server + spec[1] query = url + '/?validity_start_time={0}..{1}'.format(timebef, timeaft) print(query) success = False match = None try: print('Querying for {0} orbits'.format(oType)) r = session.get(query, verify=False) r.raise_for_status() res = r.text parser = MyHTMLParser() parser.feed(r.text) match = None for result in parser.fileList: fields = result.split('_') taft = datetime.datetime.strptime(fields[-1][0:15], datefmt) tbef = datetime.datetime.strptime(fields[-2][1:16], datefmt) if (tbef <= fileTS) and (taft >= fileTS): match = os.path.join(url, result) break if match is not None: success = True except : pass if match is None: print('Failed to find {0} orbits for Time {1}'.format(oType, fileTS)) if success: break if match: res = download_file(match, inps.outdir, session=session) if res is False: print('Failed to download URL: ', match) session.close() GMTSAR_V5.7/gmtsar/csh/align_tops_esd.csh000755 015705 000000 00000022667 13505462013 021323 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Xiaohua Xu 04 01 2015 # # script to align S1 TOPS mode data # # 1) Make PRM and LED files for both master and slave. # # 2) Do geometric back geocoding to make the range and azimuth alignment grids # # 3) Do spectral diversity to estimate residual shift and update azimuth shift # # 3) Make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level. # alias rm 'rm -f' unset noclobber # if ($#argv < 5 || $#argv > 6) then echo " " echo "Usage: align_tops.csh master_prefix master_orb_file slave_s1a_prefix slave_orb_file dem.grd [mode]" echo " " echo "Be sure the tiff, xml, orbit and dem files are available in the local directory." echo " " echo "Example: align_tops.csh s1a-iw3-slc-vv-20150526t014937-20150526t015002-006086-007e23-003 S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944.EOF.txt s1a-iw3-slc-vv-20150607t014937-20150607t015003-006261-00832e-006 S1A_OPER_AUX_POEORB_OPOD_20150627T155155_V20150606T225944_20150608T005944.EOF.txt dem.grd " echo " " echo "Output: S1_20150526_F3.PRM S1_20150526_F3.LED S1_20150526_F3.SLC S1_20150607_F3.PRM S1_20150607_F3.LED S1_20150607_F3.SLC " echo "" echo "Note: set mode = 0 for constant sum correction, set mode = 1 for constant median correction, set mode = 2 for non-constant correction with mapping the residual azimuth shift" echo " " exit 1 endif # # set the running mode # if ($#argv == 5) then set mode = `echo "1"` else set mode = `echo $6` endif # # make sure the files are available # if(! -f $1.xml) then echo "****** missing file: "$1 exit endif if(! -f $2) then echo "****** missing file: "$2 exit endif if(! -f $3.xml) then echo "****** missing file: "$3 exit endif if(! -f $4) then echo "****** missing file: "$4 exit endif if(! -f $5) then echo "****** missing file: "$5 exit endif # # set the full names and create an output prefix # set mtiff = ` echo $1.tiff ` set mxml = ` echo $1.xml ` set stiff = ` echo $3.tiff ` set sxml = ` echo $3.xml ` set mpre = ` echo $1 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set spre = ` echo $3 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` echo $mpre echo $spre # # 1) make PRM and LED files for both master and slave but not the SLC file # make_s1a_tops $mxml $mtiff $mpre 0 make_s1a_tops $sxml $stiff $spre 0 # # replace the LED with the precise orbit # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2# # 2) do a geometric back projection to determine the alignment parameters # # Filter and downsample the topography to 12 seconds or about 360 m # gmt grdfilter $5 -D3 -Fg2 -I12s -Ni -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt # # map the topography into the range and azimuth of the master and slave using polynomial refinement # can do this in parallel # # first check whether there are any burst shift # set lontie = `SAT_baseline $mpre".PRM" $spre".PRM" | grep lon_tie_point | awk '{print $3}'` set lattie = `SAT_baseline $mpre".PRM" $spre".PRM" | grep lat_tie_point | awk '{print $3}'` set tmp_am = `echo $lontie $lattie 0 | SAT_llt2rat $mpre".PRM" 1 | awk '{print $2}'` set tmp_as = `echo $lontie $lattie 0 | SAT_llt2rat $spre".PRM" 1 | awk '{print $2}'` set tmp_da = `echo $tmp_am $tmp_as | awk '{printf("%d",$2 - $1)}'` # # if ther is, modify the master PRM start_time to get a better r/a estimate # if ($tmp_da > -1000 && $tmp_da < 1000) then SAT_llt2rat $mpre".PRM" 1 < topo.llt > master.ratll & SAT_llt2rat $spre".PRM" 1 < topo.llt > slave.ratll & wait else echo "Modifying master PRM by $tmp_da lines..." cp $mpre".PRM" tmp.PRM set prf = `grep PRF tmp.PRM | awk '{print $3}'` set ttmp = `grep clock_start tmp.PRM | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_start $ttmp set ttmp = `grep clock_stop tmp.PRM | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_stop $ttmp set ttmp = `grep SC_clock_start tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_start $ttmp set ttmp = `grep SC_clock_stop tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_stop $ttmp # # restore the modified lines # #SAT_llt2rat tmp.PRM 1 < topo.llt > tmp.ratll & SAT_llt2rat tmp.PRM 1 < topo.llt > master.ratll & SAT_llt2rat $spre".PRM" 1 < topo.llt > slave.ratll & wait #echo "Restoring $tmp_da lines to master ashifts..." #awk '{printf("%.6f %.6f %.6f %.6f %.6f\n",$1,$2-'$tmp_da',$3,$4,$5)}' tmp.ratll > master.ratll endif # # paste the files and compute the dr and da # #paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $6, $6-$1, $7, $7-$2, "100")}' > tmp.dat paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $6 - $1, $2, $7 - $2, "100")}' > tmp.dat # # make sure the range and azimuth are within the bounds of the slave # set rmax = `grep num_rng_bins $spre".PRM" | awk '{print $3}'` set amax = `grep num_lines $spre".PRM" | awk '{print $3}'` if ($tmp_da > -1000 && $tmp_da < 1000) then awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat else awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 - '$tmp_da', $4 + '$tmp_da', "100") }' < tmp.dat > offset2.dat endif # # extract the range and azimuth data # awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$2) }' < offset.dat > r.xyz awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$4) }' < offset.dat > a.xyz # # fit a surface to the range and azimuth offsets # gmt blockmedian r.xyz -R0/$rmax/0/$amax -I16/8 -r -bo3d > rtmp.xyz gmt blockmedian a.xyz -R0/$rmax/0/$amax -I16/8 -r -bo3d > atmp.xyz gmt surface rtmp.xyz -bi3d -R0/$rmax/0/$amax -I16/8 -T0.3 -Grtmp.grd -N1000 -r & gmt surface atmp.xyz -bi3d -R0/$rmax/0/$amax -I16/8 -T0.3 -Gatmp.grd -N1000 -r & wait gmt grdmath rtmp.grd FLIPUD = r.grd gmt grdmath atmp.grd FLIPUD = a.grd # # 3) make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level but still need a integer alignment from # resamp # # make the new PRM files and SLC # make_s1a_tops $mxml $mtiff $mpre 2 make_s1a_tops $sxml $stiff $spre 2 r.grd a.grd echo "Running Spectral Diversity..." set sharedir = `gmtsar_sharedir.csh` if ($tmp_da > -1000 && $tmp_da < 1000) then spectral_diversity $mpre $spre 0 $sharedir/filters/gauss25x7 > tmp else spectral_diversity $mpre $spre $tmp_da $sharedir/filters/gauss25x7 > tmp endif set spec_sep = `grep spectral_spectrationXdta tmp | awk '{print $3}'` awk '{print $3}' < ddphase > tmp2 if ($mode == 2) then set res_shift = `sort -n tmp2 | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }' | awk '{print $1/2.0/3.141592653/'$spec_sep'}'` echo "Updating azimuth shift with mapping the residual da ...(mapping $res_shift)" awk '{print $1,$2,$3}' < ddphase > test #gmt blockmedian test -R0/$rmax/0/$amax -I500/100 -r -bo3d > test_b #gmt surface test_b -bi3d -Gtest.grd -R0/$rmax/0/$amax -I1000/500 -T0.8 -r -N1000 #gmt grdsample test.grd -R0/$rmax/0/$amax -Gtest_b.grd -I16/8 -r -nc gmt blockmedian test -R0/$rmax/0/$amax -I400/100 | gmt greenspline -Gtest.grd -R0/$rmax/0/$amax -I400/100 -D1 -Cn700 -r gmt grdfilter test.grd -D0 -Fg8000/1500 -Gtest2.grd -V gmt grdsample test2.grd -R0/$rmax/0/$amax -Gtest_b.grd -I16/8 -r -nc gmt grdmath test_b.grd FLIPUD $spec_sep DIV 2 PI MUL DIV = res_shift.grd gmt grdmath a.grd res_shift.grd ADD = tmp.grd mv tmp.grd a.grd mv tmp spec_div_output rm test* else if ($mode == 1) then set res_shift = `sort -n tmp2 | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }' | awk '{print $1/2.0/3.141592653/'$spec_sep'}'` else set res_shift = `grep residual_shift tmp | awk '{print $3}'` endif echo "Updating azimuth shift with a constant...(medain $res_shift)" gmt grdmath a.grd $res_shift ADD = tmp.grd mv tmp.grd a.grd endif make_s1a_tops $mxml $mtiff $mpre 1 make_s1a_tops $sxml $stiff $spre 1 r.grd a.grd # # resamp the slave and set the aoffset to zero # cp $spre".PRM" $spre".PRM0" if ($tmp_da > -1000 && $tmp_da < 1000) then update_PRM $spre".PRM" ashift 0 else update_PRM $spre".PRM" ashift $tmp_da echo "Restoring $tmp_da lines with resamp..." endif resamp $mpre".PRM" $spre".PRM" $spre".PRMresamp" $spre".SLCresamp" 1 mv $spre".SLCresamp" $spre".SLC" mv $spre".PRMresamp" $spre".PRM" # if ($tmp_da > -1000 && $tmp_da < 1000) then fitoffset.csh 3 3 offset.dat >> $spre.PRM else fitoffset.csh 3 3 offset2.dat >> $spre.PRM endif # # re-extract the lED files # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2 # rm topo.llt master.ratll slave.ratll *tmp* flt.grd r.xyz a.xyz *.PRM0 *SLCH *SLCL GMTSAR_V5.7/gmtsar/csh/align_batch_ALOS_SLC.csh000755 015705 000000 00000004426 13505462013 022074 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Align a stack of SLC images # can be used to do stacking and time-series analysis # Xiaopeng Tong, Aug 27 2010 # if ($#argv != 1) then echo "" echo "Usage: align_batch_ALOS_SLC.csh align.in " echo " align a set of images listed in align.in file" echo "" echo " format of align.in:" echo " master_name:slave_name:supermaster_name" echo "" echo " example of align.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP089300650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP236920650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " " echo "" exit 1 endif # # make working directories # mkdir -p SLC/ # # clean up # cleanup.csh SLC echo "" echo "START ALIGN A STACK OF IMAGES" echo "" # # loop start focus and align SLC images # foreach line (`awk '{print $0}' $1`) set master = `echo $line | awk -F: '{print $1}'` set slave = `echo $line | awk -F: '{print $2}'` set supermaster = `echo $line | awk -F: '{print $3}'` set masterstem = ` echo $master | awk '{ print substr($1,8,length($1)-7)}'` set slavestem = ` echo $slave | awk '{ print substr($1,8,length($1)-7)}'` set supermasterstem = ` echo $supermaster | awk '{ print substr($1,8,length($1)-7)}'` if ($master != "" && $slave != "" && $supermaster != "") then echo " " echo "Align $slave to $master via $supermaster - START" cd SLC cp ../raw/IMG-HH-$masterstem.PRM . cp ../raw/IMG-HH-$slavestem.PRM . cp ../raw/IMG-HH-$supermasterstem.PRM . # # need to add the SLC_file name to the master PRM's # update_PRM IMG-HH-$masterstem.PRM SLC_file IMG-HH-$masterstem.SLC update_PRM IMG-HH-$supermasterstem.PRM SLC_file IMG-HH-$supermasterstem.SLC ln -s ../raw/IMG-HH-$masterstem.SLC . ln -s ../raw/IMG-HH-$slavestem.SLC . ln -s ../raw/LED-$masterstem . ln -s ../raw/LED-$slavestem . ln -s ../raw/LED-$supermasterstem . align_ALOS_SLC.csh $master $slave $supermaster cd .. echo "Align $slave to $master via $supermaster - END" else echo "" echo "Wrong format in align.in" exit 1 endif end echo "" echo "END ALIGN A STACK OF IMAGES" echo "" GMTSAR_V5.7/gmtsar/csh/preproc_batch_tops_esd.csh000755 015705 000000 00000033704 13505462013 023036 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu, Feb 26 2016 # Take previous code, make it work with multiple frames # Take previous code, make it work with bursts mismatch # Preprocess and align tops image stacks # used for time series analysis # Xiaohua(Eric) Xu, Jan 19 2016 # if ($#argv != 3) then echo "" echo "Usage: preproc_tops_batch.csh data.in dem.grd mode" echo " preprocess and align a set of tops images in data.in, precise orbits required" echo "" echo " format of data.in:" echo " image_name:orbit_name" echo "" echo " example of data.in" echo " s1a-iw1-slc-vv-20150626...001:s1a-iw1-slc-vv-20150626...001:s1a-iw1-slc-vv-20150626...001:S1A_OPER_AUX_POEORB_V20150601_20150603.EOF" echo " s1a-iw1-slc-vv-20150715...001:s1a-iw1-slc-vv-20150715...001:s1a-iw1-slc-vv-20150715...001:S1A_OPER_AUX_POEORB_V20150625_20150627.EOF" echo "" echo " outputs:" echo " baseline.ps align_table.ra (contains info for precise geomatric alignment)" echo " *.PRM *.LED *.SLC(mode 2)" echo "" echo " Note:" echo " The names must be in time order in each line to be stitched together" echo "" exit 1 endif # set up some parameters set mode = $3 set sl = `echo "1"` # sample the dem if ($mode == 2) then gmt grdfilter $2 -D2 -Fg2 -I12s -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt endif # first line is the super-master, all images aligned to it set master = `awk -F: 'NR==1 {print $1}' $1 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set mmaster = `awk -F: 'NR==1 {print $1}' $1 | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` # clean up a little bit rm *.PRM* *.SLC *.LED *tmp* if (-f baseline_table.dat) rm baseline_table.dat if (-f masterlist) rm masterlist set sharedir = `gmtsar_sharedir.csh` # loop over all the acquisitions foreach line (`awk '{print $0}' $1`) # record the first one as the stem_master set stem_master = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set m_stem_master = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` if($mode == 1) then # for mode 1, generate baseline_plots set image = `echo $line | awk -F: '{print $1}'` set orbit = `echo $line | awk -F: '{print $NF}'` # generate prms and leds make_s1a_tops $image.xml $image.tiff $m_stem_master 0 ext_orb_s1a $m_stem_master.PRM $orbit $m_stem_master # get the height and baseline info cp $m_stem_master.PRM junk1 calc_dop_orb junk1 junk2 0 0 cat junk1 junk2 > $m_stem_master.PRM baseline_table.csh $mmaster.PRM $m_stem_master.PRM >> baseline_table.dat baseline_table.csh $mmaster.PRM $m_stem_master.PRM GMT >> table.gmt # clean up the mess rm junk1 junk2 else if($mode == 2) then # for mode 2, stitch and align all the images # find the files to be stitched echo $line | awk -F: '{for (i=1;i tmp.filelist set orbit = `echo $line | awk -F: '{print $NF}'` if (-f tmp.stitchlist) then rm tmp.stitchlist endif set tmp_da = 0 # loop over all the files in this line rm *par* set count = 0 foreach file (`awk '{print $0}' tmp.filelist`) # generate prms and leds set count = `echo $count | awk '{print $1+1}'` set stem = `echo $file | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` # get images aligned if($sl == 1) then # sl=1 means processing the super_master image, simpley generate images and stitch them together make_s1a_tops $file.xml $file.tiff $stem 1 make_s1a_tops $file.xml $file.tiff $stem 2 ext_orb_s1a $stem.PRM $orbit $stem echo $stem >> masterlist echo $stem >> tmp.stitchlist else # sl>1 measn processing slave images, point-by-point alignment and corregistration is required make_s1a_tops $file.xml $file.tiff $stem 0 ext_orb_s1a $stem.PRM $orbit $stem # compute the time difference between first frame and the rest frames set tmp_master = `awk 'NR == '$count' {print $0}' < masterlist` if ($tmp_master == "") set tmp_master = `awk 'NR == '$count'-1 {print $0}' < masterlist` if ($tmp_master == "") set tmp_master = `awk 'NR == '$count'-2 {print $0}' < masterlist` cp $tmp_master.PRM tmp.PRM set t1 = `grep clock_start $master.PRM | grep -v SC_clock_start | awk '{printf("%.13f", $3)}'` set t2 = `grep clock_start $tmp_master.PRM | grep -v SC_clock_start | awk '{printf("%.13f", $3)}'` set prf = `grep PRF $master.PRM | awk '{printf("%.6f",$3)}'` set nl = `echo $t1 $t2 $prf | awk '{printf("%d",($2 - $1)*$3*86400.0+0.2)}'` # compute whether there are any image offset if ($tmp_da == 0) then cp tmp.PRM junk1.PRM cp $stem.PRM junk2.PRM calc_dop_orb junk1.PRM junk $earth_radius 0 cat junk >> junk1.PRM calc_dop_orb junk2.PRM junk $earth_radius 0 cat junk >> junk2.PRM set lontie = `SAT_baseline junk1.PRM junk2.PRM | grep lon_tie_point | awk '{print $3}'` set lattie = `SAT_baseline junk1.PRM junk2.PRM | grep lat_tie_point | awk '{print $3}'` set tmp_am = `echo $lontie $lattie 0 | SAT_llt2rat tmp.PRM 1 | awk '{print $2}'` set tmp_as = `echo $lontie $lattie 0 | SAT_llt2rat $stem.PRM 1 | awk '{print $2}'` set tmp_da = `echo $tmp_am $tmp_as | awk '{printf("%d",$2 - $1)}'` rm junk1.PRM junk2.PRM junk endif # in case the images are offset by more than a burst, shift the super-master's PRM again so SAT_llt2rat gives precise estimate if ($tmp_da > -1000 && $tmp_da < 1000) then cp tmp.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > tmp.PRM cp $stem.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > $stem.PRM rm junk1 junk2 SAT_llt2rat tmp.PRM 1 < topo.llt > tmpm.dat & SAT_llt2rat $stem.PRM 1 < topo.llt > tmp1.dat & wait else echo "Modifying master PRM by $tmp_da lines..." set prf = `grep PRF tmp.PRM | awk '{print $3}'` set ttmp = `grep clock_start tmp.PRM | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_start $ttmp set ttmp = `grep clock_stop tmp.PRM | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_stop $ttmp set ttmp = `grep SC_clock_start tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_start $ttmp set ttmp = `grep SC_clock_stop tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_stop $ttmp cp tmp.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > tmp.PRM cp $stem.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > $stem.PRM rm junk1 junk2 #SAT_llt2rat tmp.PRM 1 < topo.llt > tmp_tmp.dat & SAT_llt2rat tmp.PRM 1 < topo.llt > tmpm.dat & SAT_llt2rat $stem.PRM 1 < topo.llt > tmp1.dat & wait endif # get r, dr, a, da, SNR table to be used by fitoffset.csh paste tmpm.dat tmp1.dat | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $6 - $1, $2, $7 - $2, "100")}' > tmp.dat set rmax = `grep num_rng_bins $stem.PRM | awk '{print $3}'` set amax = `grep num_lines $stem.PRM | awk '{print $3}'` awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat # prepare the offset parameters for the stitched image if ($tmp_da > -1000 && $tmp_da < 1000) then awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 + '$nl', $4, $5)}' < offset.dat >> par_tmp.dat else awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 + '$nl' - '$tmp_da', $4 + '$tmp_da', $5)}' < offset.dat >> par_tmp.dat endif # prepare the rshift and ashift look up table to be used by make_s1a_tops awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$2) }' < offset.dat > r.xyz awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$4) }' < offset.dat > a.xyz gmt blockmedian r.xyz -R0/$rmax/0/$amax -I8/4 -r -bo3d > rtmp.xyz gmt blockmedian a.xyz -R0/$rmax/0/$amax -I8/4 -r -bo3d > atmp.xyz gmt surface rtmp.xyz -bi3d -R0/$rmax/0/$amax -I8/4 -Grtmp.grd -T0.5 -N1000 -r & gmt surface atmp.xyz -bi3d -R0/$rmax/0/$amax -I8/4 -Gatmp.grd -T0.5 -N1000 -r & wait gmt grdmath rtmp.grd FLIPUD = r.grd gmt grdmath atmp.grd FLIPUD = a.grd # generate the image with point-by-point shifts make_s1a_tops $file.xml $file.tiff $stem 2 r.grd a.grd if ($tmp_da > -1000 && $tmp_da < 1000) then spectral_diversity $tmp_master $stem 0 $sharedir/filters/gauss25x7 > tmp else spectral_diversity $tmp_master $stem $tmp_da $sharedir/filters/gauss25x7 > tmp endif set spec_sep = `grep spectral_spectrationXdta tmp | awk '{print $3}'` awk '{print $3}' < ddphase > tmp2 if ($mode == 2) then set res_shift = `sort -n tmp2 | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }' | awk '{print $1/2.0/3.141592653/'$spec_sep'}'` echo "Updating azimuth shift with mapping the residual da ...(mapping $res_shift)" awk '{print $1,$2,$3}' < ddphase > test gmt blockmedian test -R0/$rmax/0/$amax -I400/100 | gmt greenspline -Gtest.grd -R0/$rmax/0/$amax -I400/100 -D1 -Cn900 -r -V gmt grdfilter test.grd -D0 -Fg8000/1500 -Gtest2.grd -V gmt grdsample test2.grd -Gtest_b.grd -Ra.grd -nc gmt grdmath test_b.grd FLIPUD $spec_sep DIV 2 PI MUL DIV = res_shift.grd gmt grdmath a.grd res_shift.grd ADD = tmp.grd mv tmp.grd a.grd mv tmp spec_div_output rm test* else if ($mode == 1) then set res_shift = `sort -n tmp2 | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }' | awk '{print $1/2.0/3.141592653/'$spec_sep'}'` else set res_shift = `grep residual_shift tmp | awk '{print $3}'` endif echo "Updating azimuth shift with a constant...(medain $res_shift)" gmt grdmath a.grd $res_shift ADD = tmp.grd mv tmp.grd a.grd endif set res_shift = `sort -n tmp2 | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }' | awk '{print $1/2.0/3.141592653/'$spec_sep'}'` echo "Updating ashift table with spectral diversity estimate ($res_shift)..." gmt grdmath a.grd $res_shift ADD = tmp.grd mv tmp.grd a.grd make_s1a_tops $file.xml $file.tiff $stem 1 r.grd a.grd mv r.grd $stem"_r.grd" mv a.grd $stem"_a.grd" # need to update shift parameter so stitch_tops will know how to stitch fitoffset.csh 3 3 offset.dat >> $stem.PRM #fitoffset.csh 1 1 offset.dat >> $stem.PRM echo $stem >> tmp.stitchlist endif end set nf = `wc -l tmp.stitchlist | awk '{print $1}'` # get the name for stitched file set stem = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` # stitch images together and get the precise orbit if ($nf > 1) then stitch_tops tmp.stitchlist $stem else set tmp_stem = `cat tmp.stitchlist` cp $tmp_stem.PRM $stem.PRM cp $tmp_stem.LED $stem.LED mv $tmp_stem.SLC $stem.SLC update_PRM $stem.PRM input_file $stem.raw update_PRM $stem.PRM SLC_file $stem.SLC update_PRM $stem.PRM led_file $stem.LED endif ext_orb_s1a $stem.PRM $orbit $stem # for images except the super-master if ($sl != 1) then cp $stem.PRM $stem.PRM0 #if ($bshift != 0) echo "Updated shift caused by burst offset is $bshift" if ($tmp_da > -1000 && $tmp_da < 1000) then update_PRM $stem.PRM ashift 0 else update_PRM $stem.PRM ashift $tmp_da echo "Restoring $tmp_da lines shift to the image..." endif update_PRM $stem.PRM rshift 0 resamp $mmaster.PRM $stem.PRM $stem.PRMresamp $stem.SLCresamp 1 mv $stem.PRMresamp $stem.PRM mv $stem.SLCresamp $stem.SLC fitoffset.csh 3 3 par_tmp.dat >> $stem.PRM endif cp $stem.PRM junk1 if ($sl == 1) then calc_dop_orb junk1 junk2 0 0 set earth_radius = `grep earth_radius junk2 | awk '{print $3}'` else calc_dop_orb junk1 junk2 $earth_radius 0 endif cat junk1 junk2 > $stem.PRM rm junk1 junk2 set sl = `echo $sl | awk '{print $1+1}'` endif end # for mode 1, plot the time-baseline figure if($mode == 1) then awk '{print 2014+$1/365.25,$2,$7}' < table.gmt > text set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-50, $4+50}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > baseline.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba0.5:"year":/a50g00f25:"baseline (m)":WSen -O >> baseline.ps rm text text2 table.gmt endif # clean up a little bit if($mode == 2) rm tmp* topo.llt flt.grd atmp* rtmp* *SLCL *SLCH *BB GMTSAR_V5.7/gmtsar/csh/get_baseline_table.csh000755 015705 000000 00000000537 13505462013 022111 0ustar00sandwellwheel000000 000000 #!/bin/csh -f if ($#argv != 2) then echo "" echo "Usage: get_baseline_table.csh prmlist master_prm" echo "" echo " product: baseline_table.dat" echo "" exit 1 endif set list = $1 set master = $2 if (-f baseline_table.dat) rm baseline_table.dat foreach prm (`cat $list`) baseline_table.csh $master $prm >> baseline_table.dat end GMTSAR_V5.7/gmtsar/csh/example.intf.config000644 015705 000000 00000005471 13505462013 021402 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for intf_batch.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from make topo_ra # 2 - start from make interferograms proc_stage = 1 # the namestem of the master image master_image = ENV1_2_399_2907_12477 ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put DEM.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 1 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # filters # look at the filter/ folder to choose other filters filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = .1 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/1000/22300 region_cut = 300/5900/1000/22300 # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .1 GMTSAR_V5.7/gmtsar/csh/p2p_S1_SLC.csh000755 015705 000000 00000024102 13505462013 020060 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # # process generic L1.1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_S1_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_S1_SLC.csh TSX_20110608 TSX_20110619 config.tsx.slc.txt" echo "" echo " Place the L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/csh/align_tops.csh000755 015705 000000 00000017542 13505462013 020464 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Xiaohua Xu and David Sandwell Dec 23 2015 # # script to align S1 TOPS mode data # # 1) Make PRM and LED files for both master and slave. # # 2) Do geometric back geocoding to make the range and azimuth alignment grids # # 3) Make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level. # alias rm 'rm -f' unset noclobber # if ($#argv != 5 && $#argv != 6) then echo " " echo "Usage: align_tops.csh master_prefix master_orb_file slave_s1a_prefix slave_orb_file dem.grd [run_with_a/r_ready]" echo " " echo "Be sure the tiff, xml, orbit and dem files are available in the local directory." echo " " echo "Example: align_tops.csh s1a-iw3-slc-vv-20150526t014937-20150526t015002-006086-007e23-003 S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944.EOF.txt s1a-iw3-slc-vv-20150607t014937-20150607t015003-006261-00832e-006 S1A_OPER_AUX_POEORB_OPOD_20150627T155155_V20150606T225944_20150608T005944.EOF.txt dem.grd " echo " " echo "Output: S1_20150526_F3.PRM S1_20150526_F3.LED S1_20150526_F3.SLC S1_20150607_F3.PRM S1_20150607_F3.LED S1_20150607_F3.SLC " echo " " exit 1 endif # # make sure the files are available # if(! -f $1.xml) then echo "****** missing file: "$1 exit endif if(! -f $2) then echo "****** missing file: "$2 exit endif if(! -f $3.xml) then echo "****** missing file: "$3 exit endif if(! -f $4) then echo "****** missing file: "$4 exit endif if(! -f $5) then echo "****** missing file: "$5 exit endif if ($#argv == 6) then set mode = 1 else set mode = 0 endif # # set the full names and create an output prefix # set mtiff = ` echo $1.tiff ` set mxml = ` echo $1.xml ` set stiff = ` echo $3.tiff ` set sxml = ` echo $3.xml ` set mpre = ` echo $1 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set spre = ` echo $3 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` echo $mpre echo $spre # # 1) make PRM and LED files for both master and slave but not the SLC file # make_s1a_tops $mxml $mtiff $mpre 0 make_s1a_tops $sxml $stiff $spre 0 # # replace the LED with the precise orbit # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2# # 2) do a geometric back projection to determine the alignment parameters # # Filter and downsample the topography to 12 seconds or about 360 m # if ($mode == 0) then gmt grdfilter $5 -D3 -Fg2 -I12s -Ni -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt # # map the topography into the range and azimuth of the master and slave using polynomial refinement # can do this in parallel # # first check whether there are any burst shift # endif set lontie = `SAT_baseline $mpre".PRM" $spre".PRM" | grep lon_tie_point | awk '{print $3}'` set lattie = `SAT_baseline $mpre".PRM" $spre".PRM" | grep lat_tie_point | awk '{print $3}'` set tmp_am = `echo $lontie $lattie 0 | SAT_llt2rat $mpre".PRM" 1 | awk '{print $2}'` set tmp_as = `echo $lontie $lattie 0 | SAT_llt2rat $spre".PRM" 1 | awk '{print $2}'` set tmp_da = `echo $tmp_am $tmp_as | awk '{printf("%d",$2-$1)}'` # # if ther is, modify the master PRM start_time to get a better r/a estimate # if ($mode == 0) then if ($tmp_da > -1000 && $tmp_da < 1000) then SAT_llt2rat $mpre".PRM" 1 < topo.llt > master.ratll & SAT_llt2rat $spre".PRM" 1 < topo.llt > slave.ratll & wait else echo "Modifying master PRM by $tmp_da lines..." cp $mpre".PRM" tmp.PRM set prf = `grep PRF tmp.PRM | awk '{print $3}'` set ttmp = `grep clock_start tmp.PRM | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_start $ttmp set ttmp = `grep clock_stop tmp.PRM | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_stop $ttmp set ttmp = `grep SC_clock_start tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_start $ttmp set ttmp = `grep SC_clock_stop tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_stop $ttmp # # restore the modified lines # #SAT_llt2rat tmp.PRM 1 < topo.llt > tmp.ratll & SAT_llt2rat tmp.PRM 1 < topo.llt > master.ratll & SAT_llt2rat $spre".PRM" 1 < topo.llt > slave.ratll & wait #echo "Restoring $tmp_da lines to master ashifts..." #awk '{printf("%.6f %.6f %.6f %.6f %.6f\n",$1,$2-'$tmp_da',$3,$4,$5)}' tmp.ratll > master.ratll endif # # paste the files and compute the dr and da # #paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $6, $6-$1, $7, $7-$2, "100")}' > tmp.dat paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $6 - $1, $2, $7 - $2, "100")}' > tmp.dat # # make sure the range and azimuth are within the bounds of the slave # set rmax = `grep num_rng_bins $spre".PRM" | awk '{print $3}'` set amax = `grep num_lines $spre".PRM" | awk '{print $3}'` if ($tmp_da > -1000 && $tmp_da < 1000) then awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat else awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 - '$tmp_da', $4 + '$tmp_da', "100") }' < tmp.dat > offset2.dat endif # # extract the range and azimuth data # awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$2) }' < offset.dat > r.xyz awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$4) }' < offset.dat > a.xyz # # fit a surface to the range and azimuth offsets # gmt blockmedian r.xyz -R0/$rmax/0/$amax -I16/8 -r -bo3d > rtmp.xyz gmt blockmedian a.xyz -R0/$rmax/0/$amax -I16/8 -r -bo3d > atmp.xyz gmt surface rtmp.xyz -bi3d -R0/$rmax/0/$amax -I16/8 -T0.3 -Grtmp.grd -N1000 -r & gmt surface atmp.xyz -bi3d -R0/$rmax/0/$amax -I16/8 -T0.3 -Gatmp.grd -N1000 -r & wait gmt grdmath rtmp.grd FLIPUD = r.grd gmt grdmath atmp.grd FLIPUD = a.grd # endif # 3) make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level but still need a integer alignment from # resamp # # make the new PRM files and SLC # make_s1a_tops $mxml $mtiff $mpre 1 make_s1a_tops $sxml $stiff $spre 1 r.grd a.grd # # resamp the slave and set the aoffset to zero # cp $spre".PRM" $spre".PRM0" if ($tmp_da > -1000 && $tmp_da < 1000) then update_PRM $spre".PRM" ashift 0 else update_PRM $spre".PRM" ashift $tmp_da echo "Restoring $tmp_da lines with resamp..." endif resamp $mpre".PRM" $spre".PRM" $spre".PRMresamp" $spre".SLCresamp" 1 mv $spre".SLCresamp" $spre".SLC" mv $spre".PRMresamp" $spre".PRM" # if ($tmp_da > -1000 && $tmp_da < 1000) then fitoffset.csh 3 3 offset.dat >> $spre.PRM else fitoffset.csh 3 3 offset2.dat >> $spre.PRM endif # # re-extract the lED files # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2 # rm topo.llt master.ratll slave.ratll *tmp* flt.grd r.xyz a.xyz *.PRM0 GMTSAR_V5.7/gmtsar/csh/tide_correction.csh000755 015705 000000 00000003467 13505462013 021502 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # by Xiaohua Xu, Jun 2018 # make solid earth tide correction # if ($#argv < 2) then echo "" echo " Usage: tide_correction.csh PRM1 PRM2 dem.grd" echo "" echo " Output: tide.grd" echo "" echo "" exit 1 endif set prm = $1 set prm2 = $2 set dem = $3 set inc1 = "0.02/0.02" set inc2 = "200/50" # # get the information from the two PRM files # set rng = `grep num_rng_bins $prm | awk '{print $3}'` set azi = `grep num_lines $prm | awk '{print $3}'` set wave = `grep wavelength $prm | awk '{print $3}'` set tt1 = `grep SC_clock_start $prm | awk '{print $3}'` set tt2 = `grep SC_clock_start $prm2 | awk '{print $3}'` echo "" echo "Computing tidal correction for dates $tt1 $tt2 ..." echo "" # # downsanple the dem and compute the three components of the solid earth tide as E N and U # gmt grdsample $dem -I$inc1 -Gtmp_dem.grd gmt grd2xyz tmp_dem.grd | awk '{print $1,$2}' > topo.ll solid_tide $tt1 < topo.ll > topo1.llenu solid_tide $tt2 < topo.ll > topo2.llenu paste topo1.llenu topo2.llenu | awk '{printf("%.6f %.6f %.12f %.12f %.12f \n",$1,$2,$8-$3,$9-$4,$10-$5)}' > topo.llenu # # generate the look vector for the downsampled dem and apply to the tide difference vector to make # LOS tide difference in the LL coordinates # gmt grd2xyz tmp_dem.grd > topo.llt SAT_look $prm < topo.llt > topo.lltn paste topo.llenu topo.lltn | awk '{printf("%.12f\n",($3*$9) + ($4*$10) + ($5*$11))}' > topo.d # # project the LOS tide into radar coordinates and convert to phase in the range direction # SAT_llt2rat $prm 1 < topo.llt > topo.ratll paste topo.ratll topo.d | awk '{printf("%.6f %.6f %.12f\n", $1,$2,-$6*2.0*2.0*3.141592653/'$wave')}' > topo.rad gmt blockmedian topo.rad -R0/$rng/0/$azi -I$inc2 -r > tmp.rad gmt surface tmp.rad -R0/$rng/0/$azi -I$inc2 -T0.5 -r -Gtide.grd # # clean up # rm tmp_dem.grd tmp.rad topo* GMTSAR_V5.7/gmtsar/csh/align_tops_6par.csh000755 015705 000000 00000013617 13505462013 021413 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Xiaohua Xu and David Sandwell Dec 23 2015 # # script to align S1 TOPS mode data # # 1) Make PRM and LED files for both master and slave. # # 2) Do geometric back projection to determine the alignment parameters. # # 3) Make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level. # alias rm 'rm -f' unset noclobber # if ($#argv < 5) then echo " " echo "Usage: align_tops.csh master_prefix master_orb_file slave_s1a_prefix slave_orb_file dem.grd" echo " " echo "Be sure the tiff, xml, orbit and dem files are available in the local directory." echo " " echo "Example: align_tops.csh s1a-iw3-slc-vv-20150526t014937-20150526t015002-006086-007e23-003 S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944.EOF.txt s1a-iw3-slc-vv-20150607t014937-20150607t015003-006261-00832e-006 S1A_OPER_AUX_POEORB_OPOD_20150627T155155_V20150606T225944_20150608T005944.EOF.txt dem.grd " echo " " echo "Output: S1_20150526_F3.PRM S1_20150526_F3.LED S1_20150526_F3.SLC S1_20150607_F3.PRM S1_20150607_F3.LED S1_20150607_F3.SLC " echo " " exit 1 endif # # make sure the files are available # if(! -f $1.xml) then echo "****** missing file: "$1 exit endif if(! -f $2) then echo "****** missing file: "$2 exit endif if(! -f $3.xml) then echo "****** missing file: "$3 exit endif if(! -f $4) then echo "****** missing file: "$4 exit endif if(! -f $5) then echo "****** missing file: "$5 exit endif # # set the full names and create an output prefix # set mtiff = ` echo $1.tiff ` set mxml = ` echo $1.xml ` set stiff = ` echo $3.tiff ` set sxml = ` echo $3.xml ` set mpre = ` echo $1 | awk '{ print "S1"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set spre = ` echo $3 | awk '{ print "S1"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set swath = ` echo $1 | awk '{ print substr($1,7,1)}'` echo $mpre echo $spre # # 1) make PRM and LED files for both master and slave but not the SLC file # make_s1a_tops_6par $mxml $mtiff $mpre 0 0. 0. 0. 0. 0. 0. make_s1a_tops_6par $sxml $stiff $spre 0 0. 0. 0. 0. 0. 0. # # replace the LED with the precise orbit # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2 # # 2) do a geometric back projection to determine the alignment parameters # # Downsample the topography. The topo value is irrelevant so it can be filtered and downsampled. # gmt grdfilter $5 -D2 -Fg4 -I30s -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt # # zero the alignment parameters of the slave image # don'd change the alignment parameters of the master image in case this is a surrogate master # update_PRM $spre".PRM" rshift 0 update_PRM $spre".PRM" sub_int_r 0.0 update_PRM $spre".PRM" stretch_r 0.0 update_PRM $spre".PRM" a_stretch_r 0.0 update_PRM $spre".PRM" ashift 0 update_PRM $spre".PRM" sub_int_a 0.0 update_PRM $spre".PRM" stretch_a 0.0 update_PRM $spre".PRM" a_stretch_a 0.0 # # map the topography into the range and azimuth of the master and slave using polynomial refinement # SAT_llt2rat $mpre".PRM" 1 < topo.llt > master.ratll SAT_llt2rat $spre".PRM" 1 < topo.llt > slave.ratll # # paste the files and compute the dr and da # #paste master.ratll slave.ratll | awk '{print( $6, $6-$1, $7, $7-$2, "100")}' > tmp.dat paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $6, $6-$1, $7, $7-$2, "100")}' > tmp.dat # # make sure the range and azimuth are within the bounds of the master # set rmax = `grep num_rng_bins $spre".PRM" | awk '{print $3}'` set amax = `grep num_lines $spre".PRM" | awk '{print $3}'` awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat # # run fitoffset # fitoffset.csh 3 3 offset.dat >> $spre".PRM" # # save the rshift and ashift for the end # set rshift = `grep rshift $spre".PRM" | tail -1 | awk '{print $3}'` set ashift = `grep ashift $spre".PRM" | tail -1 | awk '{print $3}'` # # clean up the mess # rm topo.llt master.ratll slave.ratll tmp.dat offset.dat flt.grd # # 3) make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level but still need a integer alignment from # resamp # set sub_int_r = `grep sub_int_r $spre".PRM" | tail -1 | awk '{print $3}'` set sub_int_a = `grep sub_int_a $spre".PRM" | tail -1 | awk '{print $3}'` set stretch_r = `grep stretch_r $spre".PRM" | grep -v a_stretch_r | tail -1 | awk '{print $3}'` set stretch_a = `grep stretch_a $spre".PRM" | grep -v a_stretch_a | tail -1 | awk '{print $3}'` set a_stretch_a = `grep a_stretch_a $spre".PRM" | tail -1 | awk '{print $3}'` set a_stretch_r = `grep a_stretch_r $spre".PRM" | tail -1 | awk '{print $3}'` #echo $rshift $sub_int_r $stretch_r $a_stretch_r $ashift $sub_int_a $stretch_a $a_stretch_a # # make the new PRM files and SLC # make_s1a_tops_6par $mxml $mtiff $mpre 1 0. 0. 0. 0. 0. 0. make_s1a_tops_6par $sxml $stiff $spre 1 $sub_int_r $sub_int_a $stretch_a $a_stretch_a $stretch_r $a_stretch_r # # restore the integer rshift and ashift # update_PRM $spre".PRM" rshift $rshift update_PRM $spre".PRM" ashift $ashift # # re-extract the lED files # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2 # # do integer resampling of the slave # resamp $mpre".PRM" $spre".PRM" $spre".PRMresamp" $spre".SLCresamp" 1 mv $spre".SLCresamp" $spre".SLC" mv $spre".PRMresamp" $spre".PRM" # rm topo.llt master.ratll slave.ratll *tmp* flt.grd r.xyz a.xyz GMTSAR_V5.7/gmtsar/csh/config.s1a.txt000644 015705 000000 00000007265 13505462013 020315 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_S1A_TOPS.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # filters # look at the filter/ folder to choose other filters # for tops processing, to force the decimation factor # recommended range decimation to be 8, azimuth decimation to be 2 filter_wavelength = 200 range_dec = 8 azimuth_dec = 2 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/0/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .10 GMTSAR_V5.7/gmtsar/csh/samp_slc.csh000755 015705 000000 00000005177 13505462013 020127 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Xiaohua Xu, Dec 17, 2018 # # resample a focused SLC image to a certain prf and rng_samp_rate # # if ($#argv != 3) then echo "" echo "Usage: samp_slc.csh image_stem new_prf new_rng_samp_rate " echo "" echo "Example: p2p_ALOS_SLC.csh IMG-ALPSRP022200660-H1.1__A 2000 3200000" echo "" echo "Note: A very small change in prf or rng_samp_rate change will be ignored" echo " as they can be accounted during normal processing with resamp." echo " Put 0 in new_prf or new_rng_samp_rate to igore resamping." echo "" exit 1 endif set image = $1 set nprf = $2 set nrsr = $3 set oprf = `grep PRF $image.PRM | awk '{print $3}'` set orsr = `grep rng_samp_rate $image.PRM | awk '{print $3}'` set trsr = `echo $nrsr $orsr | awk '{printf("%.10f", $1/$2)}'` set tprf = `echo $nprf $oprf | awk '{printf("%.10f", $1/$2)}'` cp $image.PRM tmp_master.PRM cp $image.PRM tmp_slave.PRM set ta = `echo $tprf | awk '{if($1>1) print 1;else if($1<1) print 2;else print 0;}'` set tr = `echo $trsr | awk '{if($1>1) print 1;else if($1<1) print 2;else print 0;}'` if ($ta == 2 && $nprf != 0) echo "Downsampling along azimuth is not recommended, may cause aliasing ..." if ($tr == 2 && $nrsr != 0) echo "Downsampling along range is not recommended, may cause aliasing ..." if ($nrsr == 0 && $nprf == 0) then echo "specify at least one of new_prf/new_rng_samp_rate to be non-zero to run the script" exit 1 endif if ($nrsr != 0) then set r = `echo $trsr | awk '{printf("%.10f", -(1 - 1/$1))}'` set tmp = `grep num_rng_bins tmp_master.PRM | awk '{print $3}'` set new_num_rng_bins = `echo $tmp $trsr | awk '{printf("%d",$1*$2/4)}' | awk '{printf("%d",$1*4)}'` update_PRM tmp_slave.PRM stretch_r $r update_PRM tmp_master.PRM rng_samp_rate $nrsr update_PRM tmp_master.PRM num_rng_bins $new_num_rng_bins set bytes = `echo $new_num_rng_bins | awk '{printf("%d",$1*4)}'` update_PRM tmp_master.PRM bytes_per_line $bytes update_PRM tmp_master.PRM good_bytes_per_line $bytes endif if ($nprf != 0) then set a = `echo $tprf | awk '{printf("%.10f", -(1 - 1/$1))}'` set tmp = `grep num_lines tmp_master.PRM | awk '{print $3}'` set new_nl = `echo $tmp $tprf | awk '{printf("%d",$1*$2/4)}' | awk '{printf("%d",$1*4)}'` update_PRM tmp_slave.PRM a_stretch_a $a update_PRM tmp_master.PRM PRF $nprf update_PRM tmp_master.PRM num_lines $new_nl update_PRM tmp_master.PRM num_valid_az $new_nl update_PRM tmp_master.PRM num_patches 1 update_PRM tmp_master.PRM nrows $new_nl endif resamp tmp_master.PRM tmp_slave.PRM tmp_slave.PRMresamp tmp_slave.SLCresamp 4 mv tmp_master.PRM $image.PRM mv tmp_slave.SLCresamp $image.SLC rm tmp* GMTSAR_V5.7/gmtsar/csh/p2p_S1_TOPS_Frame.csh000755 015705 000000 00000016654 13505462013 021353 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # Xiaohua XU, Mar 10, 2017 # # process Sentinel-1A TOPS data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 7) then echo "" echo "Usage: p2p_S1_TOPS_Frame.csh Master.SAFE Master.EOF Slave.SAFE Slave.EOF config.s1a.txt polarization parallel" echo "" echo "Example: p2p_S1_TOPS_Frame.csh S1A_IW_SLC__1SDV_20150607T014936_20150607T015003_006261_00832E_3626.SAFE S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944.EOF S1A_IW_SLC__1SSV_20150526T014935_20150526T015002_006086_007E23_679A.SAFE S1A_OPER_AUX_POEORB_OPOD_20150627T155155_V20150606T225944_20150608T005944.EOF config.s1a.txt vv 1" echo "" echo " Place the .SAFE file in the raw folder, DEM in the topo folder" echo " During processing, F1, F2, F3 and merge folder will be generated" echo " Final results will be placed in the merge folder, with phase" echo " corr [unwrapped phase]." echo " polarization = vv vh hh or hv " echo " parallel = 0-sequential 1-parallel " echo "" exit 1 endif # start # # set polarization # set pol = $6 echo $pol # # set processing mode seq # set seq = $7 echo $seq #if (6 == 9) then #:< $5 echo "Linking files for Subswath 1 ..." cd topo ln -s ../../topo/dem.grd . cd ../raw ln -s ../topo/dem.grd . ln -s ../../raw/$1/*/$f1m.xml . ln -s ../../raw/$1/*/$f1m.tiff . ln -s ../../raw/$2 ./$f1m.EOF ln -s ../../raw/$3/*/$f1s.xml . ln -s ../../raw/$3/*/$f1s.tiff . ln -s ../../raw/$4 ./$f1s.EOF cd ../.. mkdir F2 mkdir F2/raw F2/topo cd F2 sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g"> $5 echo "Linking files for Subswath 2 ..." cd topo ln -s ../../topo/dem.grd . cd ../raw ln -s ../topo/dem.grd . ln -s ../../raw/$1/*/$f2m.xml . ln -s ../../raw/$1/*/$f2m.tiff . ln -s ../../raw/$2 ./$f2m.EOF ln -s ../../raw/$3/*/$f2s.xml . ln -s ../../raw/$3/*/$f2s.tiff . ln -s ../../raw/$4 ./$f2s.EOF cd ../.. mkdir F3 mkdir F3/raw F3/topo cd F3 echo "Linking files for Subswath 3 ..." sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g"> $5 cd topo ln -s ../../topo/dem.grd . cd ../raw ln -s ../topo/dem.grd . ln -s ../../raw/$1/*/$f3m.xml . ln -s ../../raw/$1/*/$f3m.tiff . ln -s ../../raw/$2 ./$f3m.EOF ln -s ../../raw/$3/*/$f3s.xml . ln -s ../../raw/$3/*/$f3s.tiff . ln -s ../../raw/$4 ./$f3s.EOF cd ../.. # # process data # if ($seq == 0) then cd F1 p2p_processing.csh S1_TOPS $f1m $f1s $5 cd ../F2 p2p_processing.csh S1_TOPS $f2m $f2s $5 cd ../F3 p2p_processing.csh S1_TOPS $f3m $f3s $5 cd .. else if ($seq == 1) then cd F1 p2p_processing.csh S1_TOPS $f1m $f1s $5 >&log& cd ../F2 p2p_processing.csh S1_TOPS $f2m $f2s $5 >&log& cd ../F3 p2p_processing.csh S1_TOPS $f3m $f3s $5 >&log& cd .. wait else echo "Invalid mode" exit endif #supercalifragilisticexpialidocious # # merge_unwrap_geocode # #endif mkdir merge cd merge ln -s ../topo/dem.grd . ln -s ../F1/intf/*/gauss* . if (-f tmp.filelist) then rm tmp.filelist endif set pth1 = `ls ../F1/intf/*/*PRM | awk NR==1'{print $1}' | awk -F"/" '{for (i=1;i tmp.filelist set pth2 = `ls ../F2/intf/*/*PRM | awk NR==1'{print $1}' | awk -F"/" '{for (i=1;i> tmp.filelist set pth3 = `ls ../F3/intf/*/*PRM | awk NR==1'{print $1}' | awk -F"/" '{for (i=1;i> tmp.filelist set iono = `grep correct_iono ../$5 | awk '{print $3}'` if ($iono != 0) then sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g" > $5 merge_unwrap_geocode_tops.csh tmp.filelist $5 cd .. mkdir iono cd iono mkdir intf_h intf_l intf_o iono_correction cd intf_h echo "../../F1/iono_phase/intf_h/:"$prm1m":"$prm1s > tmp.filelist echo "../../F2/iono_phase/intf_h/:"$prm2m":"$prm2s >> tmp.filelist echo "../../F3/iono_phase/intf_h/:"$prm3m":"$prm3s >> tmp.filelist sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0.1/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g" > $5 ln -s ../../topo/dem.grd . ln -s ../../merge/trans.dat . merge_unwrap_geocode_tops.csh tmp.filelist $5 cp ../../F1/SLC/params* . cd ../intf_l echo "../../F1/iono_phase/intf_l/:"$prm1m":"$prm1s > tmp.filelist echo "../../F2/iono_phase/intf_l/:"$prm2m":"$prm2s >> tmp.filelist echo "../../F3/iono_phase/intf_l/:"$prm3m":"$prm3s >> tmp.filelist sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0.1/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g" > $5 ln -s ../../topo/dem.grd . ln -s ../../merge/trans.dat . merge_unwrap_geocode_tops.csh tmp.filelist $5 cp ../../F1/SLC/params* . cd ../intf_o echo "../../F1/iono_phase/intf_o/:"$prm1m":"$prm1s > tmp.filelist echo "../../F2/iono_phase/intf_o/:"$prm2m":"$prm2s >> tmp.filelist echo "../../F3/iono_phase/intf_o/:"$prm3m":"$prm3s >> tmp.filelist sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0.1/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g" > $5 ln -s ../../topo/dem.grd . ln -s ../../merge/trans.dat . merge_unwrap_geocode_tops.csh tmp.filelist $5 cp ../../F1/SLC/params* . cd ../iono_correction estimate_ionospheric_phase.csh ../intf_h ../intf_l ../intf_o ../../merge 0.8 0.8 cd ../../merge ln -s ../iono/iono_correction/ph_iono_orig.grd . cp ../$5 . merge_unwrap_geocode_tops.csh tmp.filelist $5 else cp ../$5 . merge_unwrap_geocode_tops.csh tmp.filelist $5 endif GMTSAR_V5.7/gmtsar/csh/batch.config000644 015705 000000 00000006246 13505462013 020072 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for batch processing # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ####################################### # processing stage for intf_batch.csh # ####################################### # 1 - start from make topo_ra # 2 - start from make and filter interferograms, unwrap and geocode proc_stage = 1 # the namestem of the master image - REQUIRED master_image = ######################################### # parameters for preprocess # # - pre_proc_batch.csh # # following 4 parameters are OPTIONAL # ######################################### # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put DEM.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 1 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # filters # look at the filter/ folder to choose other filters filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 - OPTIONAL region_cut = # use landmask (1 -- yes; else -- no) switch_land = 0 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/gmtsar/csh/align_batch.csh000755 015705 000000 00000004750 13505462013 020555 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Align a stack of SLC images # can be used to do stacking and time-series analysis # Xiaopeng Tong, Aug 27 2010 # if ($#argv != 2) then echo "" echo "Usage: align_batch.csh SAT align.in " echo " align a set of images listed in align.in file" echo "" echo " SAT can be ALOS ENVISAT or ERS" echo "" echo " format of align.in:" echo " master_name:slave_name:supermaster_name" echo "" echo " example of align.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP089300650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP236920650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " " echo " example of align.in for ERS is:" echo " e1_05783:e1_07787:e1_05783" echo " e1_05783:e1_10292:e1_05783" echo "" echo " example of align.in for ENVISAT is:" echo " ENV1_2_127_2925_07195:ENV1_2_127_2925_12706:ENV1_2_127_2925_07195" echo " ENV1_2_127_2925_07195:ENV1_2_127_2925_13207:ENV1_2_127_2925_07195" echo "" echo "Example: align_batch.csh ALOS align.in " echo "" exit 1 endif set SAT = $1 if ($SAT != ENVI && $SAT != ERS && $SAT != ALOS) then echo "" echo " SAT can be ALOS ENVISAT or ERS " echo "" exit 1 endif # # make working directories # mkdir -p SLC/ # # clean up # cleanup.csh SLC echo "" echo "START ALIGN A STACK OF IMAGES" echo "" # # loop start focus and align SLC images # foreach line (`awk '{print $0}' $2`) set master = `echo $line | awk -F: '{print $1}'` set slave = `echo $line | awk -F: '{print $2}'` set supermaster = `echo $line | awk -F: '{print $3}'` if ($master != "" && $slave != "" && $supermaster != "") then echo " " echo "Align $slave to $master via $supermaster - START" cd SLC cp ../raw/$master.PRM . cp ../raw/$slave.PRM . cp ../raw/$supermaster.PRM . # # need to add the SLF_file name to the master PRM's # update_PRM $master.PRM SLC_file $master.SLC update_PRM $supermaster.PRM SLC_file $supermaster.SLC ln -s ../raw/$master.raw . ln -s ../raw/$slave.raw . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . align.csh SAT $master $slave $supermaster cd .. echo "Align $slave to $master via $supermaster - END" else echo "" echo "Wrong format in align.in" exit 1 endif end echo "" echo "END ALIGN A STACK OF IMAGES" echo "" GMTSAR_V5.7/gmtsar/csh/intf_batch_ALOS2_SCAN.csh000755 015705 000000 00000021160 13505462013 022121 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Loop through a list of interferometry pairs # modified from process2pass.csh # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: intf_batch_ALOS2_SCAN.csh SAT intf.in batch.config" echo " make a stack of interferograms listed in intf.in" echo "" echo " SAT can only be ALOS " echo "" echo " format for intf.in:" echo " reference1_name:repeat1_name" echo " reference2_name:repeat2_name" echo " reference3_name:repeat3_name" echo " ......" echo "" echo " Example of intf.in for ALOS2 ScanSAR" echo " IMG-HH-ALOS2101532950-160409-WBDR1.1__D:IMG-HH-ALOS2149142950-170225-WBDR1.1__D" echo " IMG-HH-ALOS2101532950-160409-WBDR1.1__D:IMG-HH-ALOS2155352950-170408-WBDR1.1__D" echo "" echo " batch.alos2.config is a config file for making interferograms" echo " See example.batch.config for an example" echo "" exit 1 endif set SAT = $1 if ($SAT != ALOS) then echo "" echo " SAT can only be ALOS " echo "" exit 1 endif # # make sure the file exsit # if (! -f $2) then echo "no input file:" $2 exit endif if (! -f $3) then echo "no config file:" $3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` if ($SAT == ALOS) then set master = `grep master_image $3 | awk '{print $3}' | awk '{ print substr($1,8,length($1)-7)}'` endif if ($master == "") then echo "" echo "master image not set." echo "" exit 1 endif # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif set dec = `grep dec_factor $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set range_dec = `grep range_dec $3 | awk '{print $3}'` set azimuth_dec = `grep azimuth_dec $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # loop over 5 subswath # foreach subswath (1 2 3 4 5) mkdir -p F$subswath set region_cut = `grep region_cut $3 | awk '{print $3}'` cd F$subswath mkdir -p topo ################################## # 1 - start from make topo_ra # ################################## if ($stage <= 1) then # # clean up # cleanup.csh topo # # make topo_ra # if ($topo_phase == 1) then echo " " echo "DEM2TOPOPHASE.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo if ($SAT == ALOS) then cp ../SLC/IMG-HH-$master-F$subswath.PRM master.PRM ln -s ../SLC/IMG-HH-$master-F$subswath.LED . endif if (-f ../../topo/dem.grd) then ln -s ../../topo/dem.grd . dem2topo_ra_ALOS2.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPOPHASE.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC if ($SAT == ALOS) then set rng_samp_rate = `grep rng_samp_rate IMG-HH-$master-F$subswath.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ( $?rng_samp_rate) then if ($rng_samp_rate > 25000000) then echo "processing ALOS FBS data" set rng = 2 else echo "processing ALOS FBD data" set rng = 1 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif slc2amp.csh IMG-HH-$master-F$subswath.PRM $rng amp-$master.grd else if ($SAT == ERS || $SAT == ENVI) then slc2amp.csh $master.PRM 1 amp-$master.grd endif cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPOPHASE SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPOPHASE IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif endif # stage 1 ################################################## # 2 - start from make and filter interferograms # # unwrap phase and geocode # ################################################## if ($stage <= 2) then # # make working directories # echo "" echo "START FORM A STACK OF INTERFEROGRAMS" mkdir -p intf/ ln -s ../$2 . # # loop over intf.in # foreach line (`awk '{print $0}' $2`) if ($SAT == ALOS) then set ref = `echo $line | awk -F: '{print $1}' | awk '{ print substr($1,8,length($1)-7)}'` set rep = `echo $line | awk -F: '{print $2}' | awk '{ print substr($1,8,length($1)-7)}'` set ref_id = `grep SC_clock_start ./SLC/IMG-HH-$ref-F$subswath.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ./SLC/IMG-HH-$rep-F$subswath.PRM | awk '{printf("%d",int($3))}' ` echo "" echo "INTF.CSH, FILTER.CSH - START" cd intf rm -r $ref_id"_"$rep_id mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../SLC/IMG-HH-$ref-F$subswath.LED . ln -s ../../SLC/IMG-HH-$rep-F$subswath.LED . ln -s ../../SLC/IMG-HH-$ref-F$subswath.SLC . ln -s ../../SLC/IMG-HH-$rep-F$subswath.SLC . cp ../../SLC/IMG-HH-$ref-F$subswath.PRM . cp ../../SLC/IMG-HH-$rep-F$subswath.PRM . endif if ($SAT == ALOS) then if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM -topo topo_shift.grd # filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec 2 8 filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec $range_dec $azimuth_dec else ln -s ../../topo/topo_ra.grd . intf.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM -topo topo_ra.grd # filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec 2 8 filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec $range_dec $azimuth_dec endif else intf.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM # filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec 2 8 filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec $range_dec $azimuth_dec endif endif echo "INTF.CSH, FILTER.CSH - END" if ($region_cut == "") then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` set rs = `gmt grdinfo phase.grd -C | awk '{print $2}'` set re = `gmt grdinfo phase.grd -C | awk '{print $3-16}'` set as = `gmt grdinfo phase.grd -C | awk '{print $4}'` set ae = `gmt grdinfo phase.grd -C | awk '{print $5}'` set region_cut = "$rs/$re/$as/$ae" endif if ($threshold_snaphu != 0 ) then if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask_ALOS2.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo "" echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" else echo "" echo "SKIP UNWRAP PHASE" endif echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. end # loop of foreach endif # stage 2 # end of subswath loop cd .. end echo "" echo "END FORM A STACK OF INTERFEROGRAMS" echo "" GMTSAR_V5.7/gmtsar/csh/intf_tops.csh000755 015705 000000 00000014555 13505462013 020333 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # generate interferograms for tops stacks # used for time series analysis # Xiaohua(Eric) Xu, Jan 20 2016 # if ($#argv != 2) then echo "" echo "Usage: intf_tops.csh intf.in batch_tops.config" echo " generate interferograms for a set of tops images in intf.in, dem required in ./topo" echo " supermaster's name required in batch_tops.config" echo "" echo " format of data.in:" echo " master_image_stem:slave_image_stem" echo "" echo " example of data.in" echo " S1_20150628_ALL_F1:S1_20150720_ALL_F1" echo " S1_20150720_ALL_F1:S1_20150809_ALL_F1" echo "" echo " outputs:" echo " to ./intf_all" echo "" exit 1 endif # # make sure the files exist # if (! -f $1) then echo "no input file:" $2 exit endif if (! -f $2) then echo "no config file:" $2 exit endif # # read parameters from config file # set stage = `grep proc_stage $2 | awk '{print $3}'` set master = `grep master_image $2 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $2 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif set dec = `grep dec_factor $2 | awk '{print $3}'` set topo_phase = `grep topo_phase $2 | awk '{print $3}'` set shift_topo = `grep shift_topo $2 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $2 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $2 | awk '{print $3}'` set region_cut = `grep region_cut $2 | awk '{print $3}'` set switch_land = `grep switch_land $2 | awk '{print $3}'` set defomax = `grep defomax $2 | awk '{print $3}'` set range_dec = `grep range_dec $2 | awk '{print $3}'` set azimuth_dec = `grep azimuth_dec $2 | awk '{print $3}'` set near_interp = `grep near_interp $2 | awk '{print $3}'` ################################## # 1 - start from make topo_ra # ################################## if ($stage <= 1) then # # clean up # cleanup.csh topo # # make topo_ra # if ($topo_phase == 1) then echo " " echo "DEM2TOPOPHASE.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../raw/$master.PRM ./master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPOPHASE.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd topo ln -s ../raw/$master.SLC . slc2amp.csh master.PRM 4 amp-$master.grd offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPOPHASE SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPOPHASE IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 2 - start from make and filter interferograms # # unwrap phase and geocode # ################################################## if ($stage <= 2) then # # make working directories # echo "" echo "START FORM A STACK OF INTERFEROGRAMS" echo "" mkdir -p intf/ mkdir -p intf_all/ # # loop over intf.in # foreach line (`awk '{print $0}' $1`) set ref = `echo $line | awk -F: '{print $1}'` set rep = `echo $line | awk -F: '{print $2}'` set ref_id = `grep SC_clock_start ./raw/$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ./raw/$rep.PRM | awk '{printf("%d",int($3))}' ` echo "" echo "INTF.CSH, FILTER.CSH - START" cd intf mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../raw/$ref.SLC . ln -s ../../raw/$rep.SLC . cp ../../raw/$ref.PRM . cp ../../raw/$rep.PRM . if ($region_cut != "") then echo "Cutting SLC image to $region_cut" cut_slc $ref.PRM junk1 $region_cut cut_slc $rep.PRM junk2 $region_cut mv junk1.PRM $ref.PRM mv junk2.PRM $rep.PRM mv junk1.SLC $ref.SLC mv junk2.SLC $rep.SLC endif if($topo_phase == 1) then if($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd endif else intf.csh $ref.PRM $rep.PRM endif filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec echo "INTF.CSH, FILTER.CSH - END" # # unwrapping # if ($threshold_snaphu != 0 ) then if ($switch_land == 1) then if ($region_cut == "") then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo "" echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" else echo "" echo "SKIP UNWRAP PHASE" endif # # geocoding # echo "" echo "GEOCODE.CSH - START" if ($topo_phase == 1 && $threshold_geocode != 0) then if (-f raln.grd) rm raln.grd if (-f ralt.grd) rm ralt.grd rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else if($topo_phase == 1 && $threshold_geocode == 0) then echo "SKIP GEOCODING" else echo "topo_ra is needed to geocode" exit 1 endif cd ../.. if(-f intf_all/$ref_id"_"$rep_id) rm -rf intf_all/$ref_id"_"$rep_id mv intf/$ref_id"_"$rep_id intf_all/$ref_id"_"$rep_id end endif echo "" echo "END STACK OF TOPS INTERFEROGRAMS" echo "" GMTSAR_V5.7/gmtsar/csh/landmask_ALOS2.csh000755 015705 000000 00000001753 13505462013 021014 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # make a landmask # if ($#argv != 1) then echo "" echo "Usage: landmask.csh region_cut[0/10600/0/27648]" echo "" echo " make a landmask in radar coordinates " echo "NOTE: The region_cut can be specified in batch.config file" echo "" exit 1 endif if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif echo "" echo "MAKE LANDMASK -- START" echo "REQUIRE FULL RESOLUTION COASTLINE FROM GMT" echo "" gmt grdlandmask -Glandmask.grd `gmt grdinfo -I- dem.grd` `gmt grdinfo -I dem.grd` $V -NNaN/1 -Df proj_ll2ra.csh trans.dat landmask.grd landmask_ra.grd # if the landmask region is smaller than the region_cut pad with NaN gmt grd2xyz landmask_ra.grd -bo > landmask_ra.xyz gmt xyz2grd landmask_ra.xyz -bi -r -R$1 `gmt grdinfo -I landmask_ra.grd` -Gtmp.grd mv tmp.grd landmask_ra.grd gmt grdsample landmask_ra.grd -Gtmp.grd -R$1 -I2/32 -nl+t0.1 mv tmp.grd landmask_ra.grd # cleanup rm landmask.grd landmask_ra.xyz echo "MAKE LANDMASK -- END" # GMTSAR_V5.7/gmtsar/csh/prep_data.csh000755 015705 000000 00000005223 13505462013 020255 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # By Xiaohua XU, Jun, 2015 # # prepare input data.in for preproc_batch_tops.csh # # alias wgetasf to 'wget --http-user=**** --http-password=****' in .cshrc or .tcshrc file # requires having an account on with ASF # # set a local directory that stores S1A and S1B orbits. e.g. orb_dir/S1A and orb_dir/S1B # set orb_dir = "/geosat2/InSAR_Processing/Sentinel_Orbits" rm data.in ls *.xml > text.dat set mstem = `awk 'NR==1 {print $0}' text.dat | awk '{print substr($1,16,8)}'` set mname = `awk 'NR==1 {print $0}' text.dat | awk '{print substr($1,1,64)}'` set rec = 0 if (! -f orbits.list) then set url_root = "https://s1qc.asf.alaska.edu/aux_poeorb/" wget $url_root -O orbits.html grep EOF orbits.html | awk -F'"' '{print $2}' > orbits.list rm orbits.html endif echo "Looping over all the lines" foreach line ( ` awk '{ print $0 }' < text.dat ` ) set stem = `echo $line | awk '{print substr($1,16,8)}'` set name = `echo $line | awk '{print substr($1,1,64)}'` if ($stem != $mstem) then echo "Writing record $mstem" #set n1 = `echo $mstem | awk '{print $1-1}'` #set n2 = `echo $mstem | awk '{print $1+1}'` # uses date for time manipulation -ben set n1 = `date -v-1d -jf "%Y%m%d" $mstem +%Y%m%d` set n2 = `date -v+1d -jf "%Y%m%d" $mstem +%Y%m%d` set SAT = `echo $mname | awk '{print toupper(substr($1,1,3))}'` #cp ../../../../orbit/*$n1*$n2* . set orb = `grep $SAT orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT/$orb) then cp $orb_dir/$SAT/$orb . else wgetasf $url_root/$orb endif endif #if (! -f $orb) wget $url_root"/"$orb #set orb = `ls *$n1*$n2*` #set orb = `ls *$mstem*EOF` set tmp_rec = `echo $rec $orb | awk '{print $1":"$2}'` echo $tmp_rec >> data.in set rec = `echo $name` set mstem = `echo $stem` set mname = `echo $name` else if ($rec == 0) then echo "Setting a new name for rec" set rec = `echo $name` else set tmp_rec = `echo $name $rec | awk '{print $2":"$1}'` set rec = `echo $tmp_rec` endif endif end set n1 = `date -v-1d -jf "%Y%m%d" $mstem +%Y%m%d` set n2 = `date -v+1d -jf "%Y%m%d" $mstem +%Y%m%d` set SAT = `echo $mname | awk '{print toupper(substr($1,1,3))}'` echo "Writing record $mstem" #set orb = `ls *$n1*$n2*` set orb = `grep $SAT orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT/$orb) then cp $orb_dir/$SAT/$orb . else wgetasf $url_root/$orb endif endif #if (! -f $orb) wget $url_root"/"$orb #set orb = `ls *$mstem*EOF` set tmp_rec = `echo $rec $orb | awk '{print $1":"$2}'` echo $tmp_rec >> data.in rm text.dat rm orbits.list GMTSAR_V5.7/gmtsar/csh/config.envi.txt000644 015705 000000 00000007223 13505462013 020564 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ENVI.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 200m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 1 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/0/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 60 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/gmtsar/csh/landmask.csh000755 015705 000000 00000001752 13505462013 020113 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # make a landmask # if ($#argv != 1) then echo "" echo "Usage: landmask.csh region_cut[0/10600/0/27648]" echo "" echo " make a landmask in radar coordinates " echo "NOTE: The region_cut can be specified in batch.config file" echo "" exit 1 endif if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif echo "" echo "MAKE LANDMASK -- START" echo "REQUIRE FULL RESOLUTION COASTLINE FROM GMT" echo "" gmt grdlandmask -Glandmask.grd `gmt grdinfo -I- dem.grd` `gmt grdinfo -I dem.grd` $V -NNaN/1 -Df proj_ll2ra.csh trans.dat landmask.grd landmask_ra.grd # if the landmask region is smaller than the region_cut pad with NaN gmt grd2xyz landmask_ra.grd -bo > landmask_ra.xyz gmt xyz2grd landmask_ra.xyz -bi -r -R$1 `gmt grdinfo -I landmask_ra.grd` -Gtmp.grd mv tmp.grd landmask_ra.grd gmt grdsample landmask_ra.grd -Gtmp.grd -R$1 -I4/8 -nl+t0.1 mv tmp.grd landmask_ra.grd # cleanup rm landmask.grd landmask_ra.xyz echo "MAKE LANDMASK -- END" # GMTSAR_V5.7/gmtsar/csh/update_PRM.csh000755 015705 000000 00000001740 13505462013 020316 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. T. Sandwell AUG 30 2007 # # Script to replace a value in a PRM-file # # alias rm 'rm -f' unset noclobber # if ($#argv < 2) then echo " " echo "Usage: update_PRM file.PRM param value " echo " " echo "Example: update_PRM IMG-HH-ALPSRP049040660-H1.0__A.PRM rshift 10" exit 1 endif # # copy the file to junk.PRM # cp $1 junk.PRM # # remove the line with the matching parameter # if ($2 != 'clock_start' && $2 != 'clock_stop') then grep -v $2 < junk.PRM > junk2.PRM else if ($2 == 'clock_start') then set tmptime = `grep SC_clock_start < junk.PRM | awk '{print $3}'` grep -v $2 < junk.PRM > junk2.PRM echo 'SC_clock_start' ' = ' $tmptime >> junk2.PRM else set tmptime = `grep SC_clock_stop < junk.PRM | awk '{print $3}'` grep -v $2 < junk.PRM > junk2.PRM echo 'SC_clock_stop' ' = ' $tmptime >> junk2.PRM endif endif # # add a new line # echo $2 ' = ' $3 >> junk2.PRM # mv junk2.PRM $1 rm junk.PRM GMTSAR_V5.7/gmtsar/csh/snaphu.conf.brief000644 015705 000000 00000025234 13505462013 021053 0ustar00sandwellwheel000000 000000 # snaphu configuration file # # Lines with fewer than two fields and lines whose first non-whitespace # characters are not alphnumeric are ignored. For the remaining lines, # anything after the first two fields (delimited by whitespace) is # also ignored. Inputs are converted in the order they appear in the file; # if multiple assignments are made to the same parameter, the last one # given is the one used. Parameters in this file will be superseded by # parameters given on the command line after the -f flag specifying this # file. Multiple configuration files may be given on the command line. ############################################# # File input and output and runtime options # ############################################# # See section below for file format configuration options. # Input file name # INFILE snaphu.in # Input file line length # LINELENGTH 1000 # Output file name # OUTFILE snaphu.out # Amplitude file name(s) # AMPFILE snaphu.amp.in # Single file containing amplitude images # Correlation file name # CORRFILE snaphu.corr.in # Statistical-cost mode (TOPO, DEFO, SMOOTH, or NOSTATCOSTS) # STATCOSTMODE TOPO # Initialize-only mode (TRUE or FALSE) # INITONLY FALSE # Algorithm used for initialization of wrapped phase values. Possible # values are MST and MCF. # INITMETHOD MST # Verbose-output mode (TRUE or FALSE) # VERBOSE FALSE ################ # File formats # ################ # Valid data formats: # # COMPLEX_DATA: complex values: real, imag, real, imag # ALT_LINE_DATA: real values from different arrays, alternating by line # ALT_SAMPLE_DATA: real values from different arrays, alternating by sample # FLOAT_DATA: single array of floating-point data # # The ALT_SAMPLE_DATA format is sometimes known as .amp or sample- # interleaved format; the ALT_LINE_DATA format is sometimes known as # .hgt or line-interleaved format. For the ALT_LINE_DATA format, the # first array is always assumed to be the interferogram magnitude. All # formats assume single-precision (32-bit) floating-point data (real*4 # and complex*8 in Fortran) in the native byte order (big vs. little # endian) of the system. # Input file format # Allowable formats: # COMPLEX_DATA (default) # ALT_LINE_DATA (magnitude in channel 1, phase in radians in channel 2) # ALT_SAMPLE_DATA (magnitude in channel 1, phase in radians in channel 2) # FLOAT_DATA (phase in radians) # #INFILEFORMAT COMPLEX_DATA INFILEFORMAT FLOAT_DATA # Output file format # Allowable formats: # ALT_LINE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2; default) # ALT_SAMPLE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2) # FLOAT_DATA (unwrapped phase in radians) # #OUTFILEFORMAT ALT_LINE_DATA OUTFILEFORMAT FLOAT_DATA # Amplitude or power file format # Units should be consistent with interferogram. Allowable formats: # ALT_LINE_DATA (first image amplitude in channel 1, # second image amplitude in channel 2) # ALT_SAMPLE_DATA (first image amplitude in channel 1, # second image amplitude in channel 2; default) # FLOAT_DATA (square root of average power of two images) # #AMPFILEFORMAT ALT_SAMPLE_DATA AMPFILEFORMAT FLOAT_DATA # Correlation file format # Allowable formats: # ALT_LINE_DATA (channel 1 ignored; correlation values # between 0 and 1 in channel 2; default) # ALT_SAMPLE_DATA (channel 1 ignored; correlation values # between 0 and 1 in channel 2) # FLOAT_DATA (correlation values between 0 and 1) # #CORRFILEFORMAT ALT_LINE_DATA CORRFILEFORMAT FLOAT_DATA ############################### # SAR and geometry parameters # ############################### # Orbital radius (double, meters) or altitude (double, meters). The # radius should be the local radius if the orbit is not circular. The # altitude is just defined as the orbit radius minus the earth radius. # Only one of these two parameters should be given. ORBITRADIUS 7153000.0 #ALTITUDE 775000.0 # Local earth radius (double, meters). A spherical-earth model is # used. EARTHRADIUS 6378000.0 # The baseline parameters are not used in deformation mode, but they # are very important in topography mode. The parameter BASELINE # (double, meters) is the physical distance (always positive) between # the antenna phase centers. The along-track componenet of the # baseline is assumed to be zero. The parameter BASELINEANGLE_DEG # (double, degrees) is the angle between the antenna phase centers # with respect to the local horizontal. Suppose the interferogram is # s1*conj(s2). The baseline angle is defined as the angle of antenna2 # above the horizontal line extending from antenna1 towards the side # of the SAR look direction. Thus, if the baseline angle minus the # look angle is less than -pi/2 or greater than pi/2, the topographic # height increases with increasing elevation. The units of # BASELINEANGLE_RAD are radians. BASELINE 150.0 BASELINEANGLE_DEG 225.0 #BASELINEANGLE_RAD 3.92699 # If the BPERP parameter is given, the baseline angle is taken to be # equal to the look angle (mod pi) at midswath, and the length of the # baseline is set accordingly. Particular attention must be paid to # the sign of this parameter--it should be negative if increasing # phase implies increasing topographic height. #BPERP -150.0 # The transmit mode should be either REPEATPASS or PINGPONG if both # antennas transmitted and both received (REPEATPASS and PINGPONG have # the same effect); the transmit mode should be SINGLEANTENNATRANSMIT # if only one antenna was used to transmit while both antennas # received. In single-antenna-transmit mode, the baseline is # effectively halved. This parameter is ignored for cost modes other # than topography. TRANSMITMODE REPEATPASS # Slant range from platform to first range bin in input data file # (double, meters). Be sure to modify this parameter if the input # file is extracted from a larger scene. The parameter does not need # to be modified is snaphu is unwrapping only a subset of the input file. NEARRANGE 831000.0 # Slant range and azimuth pixel spacings of input interferogram after # any multilook averaging. This is not the same as the resolution. # (double, meters). DR 8.0 DA 20.0 # Single-look slant range and azimuth resolutions. This is not the # same as the pixel spacing. (double, meters). RANGERES 10.0 AZRES 6.0 # Wavelength (double, meters). LAMBDA 0.0565647 # Number of real (not necessarily independent) looks taken in range and # azimuth to form the input interferogram (long). NLOOKSRANGE 1 NLOOKSAZ 5 # Number of looks (assumed independent) from nonspatial averaging (long). NLOOKSOTHER 1 # Equivalent number of independent looks (double, dimensionless) that were # used to generate correlation file if one is specified. This parameter # is ignored if the correlation data are generated by the interferogram # and amplitude data. # # The equivalent number of independent looks is approximately equal to the # real number of looks divided by the product of range and azimuth # resolutions, and multiplied by the product of the single-look range and # azimuth pixel spacings. It is about 0.53 times the number of real looks # for ERS data processed without windowing. NCORRLOOKS 23.8 # Number of looks that should be taken in range and azimuth for estimating # the correlation coefficient from the interferogram and the amplitude # data. These numbers must be larger than NLOOKSRANGE and NLOOKSAZ. # The actual numbers used may be different since we prefer odd integer # multiples of NLOOKSRANGE and NLOOKSAZ (long). These numbers are ignored # if a separate correlation file is given as input. NCORRLOOKSRANGE 3 NCORRLOOKSAZ 15 ############################### # Scattering model parameters # ############################### # Threshold brightness (normalized) for layover height integration # (double, dimensionless) LAYMINEI 1.25 ################################## # Decorrelation model parameters # ################################## # Here, rho is the magnitude of the complex correlation coefficient # between the two observations forming the interferogram (0<=rho<=1) # See Zebker & Villasenor, 1992 # Default value to use uniformly for true, unbiased correlation if no # correlation file is specified and correlation cannot be generated # from the available data (double). DEFAULTCORR 0.01 # Factor applied to expected minimum measured (biased) correlation. # Values smaller than the threshold rhominfactor*rho0 are assumed to # come from zero statistical correlation because of estimator bias (double). # This is used only in topo mode; for defo mode, use DEFOTHRESHFACTOR. RHOMINFACTOR 1.3 ######################## # PDF model parameters # ######################## # Algorithm costs are based on the negative log pdf: # # cost = -log(f(phi | EI, rho)) # Factor applied to range layover probability density to get azimuth # layover probability density (double). AZDZFACTOR 0.99 # Ratio of layover probability density to peak probability density # for non-layover slopes expected (double). LAYCONST 0.9 ############################### # Deformation mode parameters # ############################### # Factor applied to range discontinuity probability density to get # corresponding value for azimuth (double). DEFOAZDZFACTOR 1.0 # Factor applied to rho0 to get threshold for whether or not phase # discontinuity is possible (double). rho0 is the expected, biased # correlation measure if true correlation is 0. DEFOTHRESHFACTOR 1.2 # Maximum phase discontinuity likely (double). Units are radians or cycles. # If abrupt phase discontinuities are not expected, this paramter can be # set to zero. DEFOMAX_CYCLE 65 #DEFOMAX_RAD 7.5398 # Ratio of phase discontinuity probability density to peak probability # density expected for discontinuity-possible pixel differences (double). # Value of 1 means zero cost for discontinuity, 0 means infinite cost. DEFOCONST 0.9 ######################## # Algorithm parameters # ######################## # Maximum flow increment (long) for solver. Not the same as maximum # flow possible. MAXFLOW 4 # Scaling constant factor applied to double precision costs to get # integer costs (double). COSTSCALE 100.0 # End of snaphu configuration file GMTSAR_V5.7/gmtsar/csh/filter_alos_ss.csh000755 015705 000000 00000015414 13505462013 021331 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong and David Sandwell # FEB 4 2010 # Matt Wei May 4 2010, ENVISAT # DTS - May 26, 2010, added phase gadient # EF, DTS, XT - Jan 10 2014, TSX # # Convolve the real.grd and imag.grd with gaussian filters. # Form amplitude, phase, phase gradient, and correlation images. # # alias rm 'rm -f' gmt set IO_NC4_CHUNK_SIZE classic # # # set grdimage options # set scale = "-JX6.5i" set thresh = "5.e-21" gmt set COLOR_MODEL = hsv gmt set PROJ_LENGTH_UNIT = inch if ($#argv != 4 && $#argv != 6) then errormessage: echo "" echo "Usage: filter.csh master.PRM slave.PRM filter decimation [rng_dec azi_dec]" echo "" echo " Apply gaussian filter to amplitude and phase images." echo " " echo " filter - wavelength of the filter in meters (0.5 gain)" echo " decimation - (1) better resolution, (2) smaller files" echo " " echo "Example: filter.csh IMG-HH-ALPSRP055750660-H1.0__A.PRM IMG-HH-ALPSRP049040660-H1.0__A.PRM 300 2" echo "" exit 1 endif echo "filter.csh" # # define filter and decimation variables # set sharedir = `gmtsar_sharedir.csh` set filter3 = $sharedir/filters/fill.3x3 set filter4 = $sharedir/filters/xdir set filter5 = $sharedir/filters/ydir set dec = $4 set az_lks = 4 set PRF = `grep PRF *.PRM | awk 'NR == 1 {printf("%d", $3)}'` if( $PRF < 1000 ) then set az_lks = 1 endif # # look for range sampling rate # set rng_samp_rate = `grep rng_samp_rate $1 | awk 'NR == 1 {printf("%d", $3)}'` # # set the range spacing in units of image range pixel size # if ($?rng_samp_rate) then if ($rng_samp_rate > 110000000) then set dec_rng = 4 set filter1 = $sharedir/filters/gauss15x5 else if ($rng_samp_rate < 110000000 && $rng_samp_rate > 20000000) then set dec_rng = 2 set filter1 = $sharedir/filters/gauss15x5 # # special for TOPS mode # if($az_lks == 1) then set filter1 = $sharedir/filters/gauss5x5 endif else set dec_rng = 1 set filter1 = $sharedir/filters/gauss15x3 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif # # make the custom filter2 and set the decimation # make_gaussian_filter $1 $dec_rng $az_lks $3 > ijdec set filter2 = gauss_$3 set idec = `cat ijdec | awk -v dc="$dec" '{ print dc*$1 }'` set jdec = `cat ijdec | awk -v dc="$dec" '{ print dc*$2 }'` if($#argv == 6) then set idec = `echo $6 $az_lks | awk '{printf("%d",$1/$2)}'` set jdec = `echo $5 $dec_rng | awk '{printf("%d",$1/$2)}'` echo "setting range_dec = $5, azimuth_dec = $6" endif echo "$filter2 $idec $jdec ($az_lks $dec_rng)" # # filter the two amplitude images # echo "making amplitudes..." conv $az_lks $dec_rng $filter1 $1 amp1_tmp.grd=bf conv $idec $jdec $filter2 amp1_tmp.grd=bf amp1.grd rm amp1_tmp.grd conv $az_lks $dec_rng $filter1 $2 amp2_tmp.grd=bf conv $idec $jdec $filter2 amp2_tmp.grd=bf amp2.grd rm amp2_tmp.grd # # filter the real and imaginary parts of the interferogram # also compute gradients # echo "filtering interferogram..." conv $az_lks $dec_rng $filter1 real.grd=bf real_tmp.grd=bf conv $idec $jdec $filter2 real_tmp.grd=bf realfilt.grd # conv $dec $dec $filter4 real_tmp.grd xreal.grd # conv $dec $dec $filter5 real_tmp.grd yreal.grd rm real_tmp.grd rm real.grd conv $az_lks $dec_rng $filter1 imag.grd=bf imag_tmp.grd=bf conv $idec $jdec $filter2 imag_tmp.grd=bf imagfilt.grd # conv $dec $dec $filter4 imag_tmp.grd ximag.grd # conv $dec $dec $filter5 imag_tmp.grd yimag.grd rm imag_tmp.grd rm imag.grd # # form amplitude image # echo "making amplitude..." gmt grdmath realfilt.grd imagfilt.grd HYPOT = amp.grd gmt grdmath amp.grd 0.5 POW FLIPUD = display_amp.grd set AMAX = `gmt grdinfo -L2 display_amp.grd | grep stdev | awk '{ print 3*$5 }'` gmt grd2cpt display_amp.grd -Z -D -L0/$AMAX -Cgray > display_amp.cpt echo "N 255 255 254" >> display_amp.cpt gmt grdimage display_amp.grd -Cdisplay_amp.cpt $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > display_amp.ps gmt psscale -Rdisplay_amp.grd -J -DJTC+w5i/0.2i+h+ef -Cdisplay_amp.cpt -Bx0+l"Amplitude (histogram equalized)" -O >> display_amp.ps gmt psconvert -Tf -P -Z display_amp.ps echo "Amplitude map: display_amp.pdf" # # form the correlation # echo "making correlation..." gmt grdmath amp1.grd amp2.grd MUL = tmp.grd gmt grdmath tmp.grd $thresh GE 0 NAN = mask.grd gmt grdmath amp.grd tmp.grd SQRT DIV mask.grd MUL FLIPUD = tmp2.grd=bf conv 1 1 $filter3 tmp2.grd=bf corr.grd gmt makecpt -T0./.8/0.1 -Cgray -Z -N > corr.cpt echo "N 255 255 254" >> corr.cpt gmt grdimage corr.grd $scale -Ccorr.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > corr.ps gmt psscale -Rcorr.grd -J -DJTC+w5i/0.2i+h+ef -Ccorr.cpt -Baf+lCorrelation -O >> corr.ps gmt psconvert -Tf -P -Z corr.ps echo "Correlation map: corr.pdf" # # form the phase # echo "making phase..." gmt grdmath imagfilt.grd realfilt.grd ATAN2 mask.grd MUL FLIPUD = phase.grd gmt makecpt -Crainbow -T-3.15/3.15/0.1 -Z -N > phase.cpt gmt grdimage phase.grd $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phase.ps gmt psscale -Rphase.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -B1.57+l"Phase" -By+lrad -O >> phase.ps gmt psconvert -Tf -P -Z phase.ps echo "Phase map: phase.pdf" # # make the Werner/Goldstein filtered phase # echo "filtering phase..." # phasefilt -imag imagfilt.grd -real realfilt.grd -amp1 amp1.grd -amp2 amp2.grd -psize 16 phasefilt -imag imagfilt.grd -real realfilt.grd -amp1 amp1.grd -amp2 amp2.grd -alpha -1 -psize 32 gmt grdedit filtphase.grd `gmt grdinfo mask.grd -I- --FORMAT_FLOAT_OUT=%.12lg` gmt grdmath filtphase.grd mask.grd MUL FLIPUD = phasefilt.grd rm filtphase.grd gmt grdimage phasefilt.grd $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phasefilt.ps gmt psscale -Rphasefilt.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -Bxa1.57+l"Phase" -By+lrad -O >> phasefilt.ps gmt psconvert -Tf -P -Z phasefilt.ps echo "Filtered phase map: phasefilt.pdf" # # form the phase gradients # # echo "making phase gradient..." # gmt grdmath amp.grd 2. POW = amp_pow.grd # gmt grdmath realfilt.grd ximag.grd MUL imagfilt.grd xreal.grd MUL SUB amp_pow.grd DIV mask.grd MUL FLIPUD = xphase.grd # gmt grdmath realfilt.grd yimag.grd MUL imagfilt.grd yreal.grd MUL SUB amp_pow.grd DIV mask.grd MUL FLIPUD = yphase.grd # gmt makecpt -Cgray -T-0.7/0.7/0.1 -Z -N > phase_grad.cpt # echo "N 255 255 254" >> phase_grad.cpt # gmt grdimage xphase.grd $scale -Cphase_grad.cpt -X.2i -Y.5i -P > xphase.ps # gmt grdimage yphase.grd $scale -Cphase_grad.cpt -X.2i -Y.5i -P > yphase.ps # mv mask.grd tmp.grd gmt grdmath tmp.grd FLIPUD = mask.grd # # delete files rm tmp.grd tmp2.grd ximag.grd yimag.grd xreal.grd yreal.grd GMTSAR_V5.7/gmtsar/csh/pre_proc_batch_ALOS2_SCAN.csh000755 015705 000000 00000012216 13505462013 022774 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # preprocess all the data based on data.in table file and generate: # 1. SLC files # 2. PRM files # 3. LED files # 4. time-baseline plot for user to create stacking pairs # format in data.in table file: # line 1: master_name # line 2 and below: slave_name alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv != 2) then echo "" echo "Usage: pre_proc_batch_ALOS2_SCAN.csh data.in batch.config" echo " preprocess a set of images using a common radius" echo " preprocess all 5 subswaths " echo "" echo " format of data.in is:" echo " line 1: master_name " echo " line 2 and below: slave_name" echo "" echo " example of data.in for ALOS2 SCANSAR is:" echo " IMG-HH-ALOS2047473650-150410-WBDR1.1__D" echo " IMG-HH-ALOS2101293650-160408-WBDR1.1__D" echo "" echo "Example: pre_proc_batch_ALOS2_SCAN.csh data.in batch.config" echo "" exit 1 endif # # read parameters from configuration file # set earth_radius = `grep earth_radius $2 | awk '{print $3}'` set SLC_factor = `grep SLC_factor $2 | awk '{print $3}'` set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif echo $commandline # # open and read data.in table # echo "" echo "START PREPROCESS A STACK OF IMAGES" echo "" echo "preprocess master image" set line1 = `awk 'NR==1 {print $0}' $1` set master = `echo $line1[1] | awk '{ print substr($1,8,length($1)-7)}'` # # loop over 5 subswath # foreach subswath (1 2 3 4 5) # # unpack the master if necessary # if(! -f IMG-HH-$master-F$subswath.SLC || ! -f IMG-HH-$master-F$subswath.PRM ) then echo "ALOS_pre_process_SLC IMG-HH-$master-F$subswath LED-$master -ALOS2 $commandline" ALOS_pre_process_SLC IMG-HH-$master-F$subswath LED-$master -ALOS2 $commandline endif set RAD = `grep earth_radius IMG-HH-$master-F$subswath.PRM | awk '{print $3}'` set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master-F$subswath.PRM | awk 'NR == 1 {printf("%d", $3)}'` baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$master-F$subswath.PRM >! baseline_table.dat baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$master-F$subswath.PRM GMT >! table.gmt # # loop and unpack the slave image using the same earth radius as the master image # foreach line2 (`awk 'NR>1 {print $0}' $1`) echo "pre_proc_batch.csh" echo "preprocess slave images" set slave = ` echo $line2 | awk '{ print substr($1,8,length($1)-7)}'` if(! -f IMG-HH-$slave-F$subswath.SLC || ! -f IMG-HH-$slave-F$subswath.PRM ) then echo "ALOS_pre_process_SLC IMG-HH-$slave-F$subswath LED-$slave -ALOS2 -radius $RAD -SLC_factor $SLC_factor" ALOS_pre_process_SLC IMG-HH-$slave-F$subswath LED-$slave -ALOS2 -radius $RAD -SLC_factor $SLC_factor endif # # check the range sampling rate of the slave images and do conversion if necessary # set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave-F$subswath.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m # baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$slave-F$subswath.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$slave-F$subswath.PRM GMT >> table.gmt else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-HH-$slave-F$subswath.PRM IMG-HH-$slave-F$subswath"_"FBS.PRM # baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$slave-F$subswath"_"FBS.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$slave-F$subswath"_"FBS.PRM GMT >> table.gmt echo "Overwriting the old slave image" mv IMG-HH-$slave-F$subswath"_"FBS.PRM IMG-HH-$slave-F$subswath.PRM update_PRM IMG-HH-$slave-F$subswath.PRM input_file IMG-HH-$slave-F$subswath.SLC mv IMG-HH-$slave-F$subswath"_"FBS.SLC IMG-HH-$slave-F$subswath.SLC else if ($t == 0.5) then echo "Use FBS mode image as master" exit 1 else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif # end of the loop over slave images end # end of the loop over subswath end # # make baseline plots # awk '{print 2014.5+($1-181)/365.25,$2,$7}' < table.gmt > text # awk '{print 2014.5+($1-181)/365.25,$2,9,$4,$5,$6,$7}' < table.gmt > text set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-500, $4+500}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > stacktable_all.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba1:"year":/a200g00f100:"baseline (m)":WSen -O >> stacktable_all.ps echo "" echo "END PREPROCESS A STACK OF IMAGES" echo "" # # clean up the mess # rm text text2 GMTSAR_V5.7/gmtsar/csh/proj_ll2ra_ascii.csh000755 015705 000000 00000003202 13505462013 021527 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # D. Sandwell 1/12/07 # M. Wei 1/31/08 # alias rm 'rm -f' unset noclobber if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # # # project an xy file from lon/lat coordinates into range/azimuth coordinates # this version only works with GMT V4.0 and higher # # Input: # trans.dat - file generated by llt_grid2rat (r a topo lon lat) # phase_ll.xyz - an ascii file of phase or anything in longitude/latitude coordinates # # Output: # phase_ra.zyz - an ascii file of phase in radar coordinates # # check for number of arguments # if ($#argv < 3) then echo " " echo "Usage: proj_ll2ra_ascii.csh trans.dat phase_ll.xyz phase_ra.xyz" echo " " echo " trans.dat - file generated by llt_grid2rat (r a topo lon lat)" echo " phase_ll.xyz - an Ascii file of phase or anything in lon/lat-coordinates" echo " phase_ra.xyz - output an Ascii file in radar coordinates" echo " " exit 1 endif # # extract the phase in the r a positions # # make grids of longitude and latitude versus range and azimuth # gmt gmtconvert $1 -o3,4,0 -bi5d -bo3f > llr gmt gmtconvert $1 -o3,4,1 -bi5d -bo3f > lla #awk '{ printf("%f %f %e \n",$4,$5,$1) }' < $1 | gmtconvert -bos3 > llr #awk '{ printf("%f %f %e \n",$4,$5,$2) }' < $1 | gmtconvert -bos3 > lla # gmt surface llr `gmt gmtinfo $2 -I0.01` -bi3f -I0.005 -T.50 -Gllr.grd $V gmt surface lla `gmt gmtinfo $2 -I0.01` -bi3f -I0.005 -T.50 -Glla.grd $V # gmt grdtrack $2 -nl -Gllr.grd > llpr gmt grdtrack llpr -nl -Glla.grd > llpra # # get the range, azimuth, phase columns and grid # awk '{print $4,$5,$3}' < llpra > $3 # # # # clean # rm ll* GMTSAR_V5.7/gmtsar/csh/intf_tops_parallel.csh000755 015705 000000 00000001570 13505462013 022200 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # by Xiaohua XU, 03/06/2018 # if ($#argv != 3) then echo "" echo "Usage: intf_tops_parallel.csh intf.in batch.config Ncores" echo "" echo " Run intf jobs parallelly. Need to install GNU parallel first." echo " e.g. sudo port install parallel" echo "" exit endif rm -f intf_tops.cmd set t1 = `date` set ncores = $3 foreach intf (`awk '{print $0}' $1`) set date1 = `echo $intf |awk -F":" '{print $1}'|cut -c 4-11` set date2 = `echo $intf |awk -F":" '{print $2}'|cut -c 4-11` set logfile = "intf_"$date1"_"$date2".log" set infile = "intf_"$date1"_"$date2".in" echo $intf > $infile echo "intf_tops.csh $infile $2 > $logfile" >> intf_tops.cmd end parallel --jobs $ncores < intf_tops.cmd set t2 = `date` set dir0 = `pwd` #echo "Job started on $t1 and finishe don $t2 at $dir0 "|mail -s "TOPS intfs job finished" balabala@gmail.com GMTSAR_V5.7/gmtsar/csh/prep_data_linux.csh000755 015705 000000 00000005570 13505462013 021501 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # By Xiaohua XU, Jun, 2015 # # prepare input data.in for preproc_batch_tops.csh # # alias wgetasf to 'wget --http-user=**** --http-password=****' in .cshrc or .tcshrc file # requires having an account on with ASF # # set a local directory that stores S1A and S1B orbits. e.g. orb_dir/S1A and orb_dir/S1B # source ~/.cshrc set orb_dir = "/geosat2/InSAR_Processing/Sentinel_Orbits" rm data.in ls *.xml > text.dat set mstem = `awk 'NR==1 {print $0}' text.dat | awk '{print substr($1,16,8)}'` set mname = `awk 'NR==1 {print $0}' text.dat | awk '{print substr($1,1,64)}'` set rec = 0 if (! -f orbits.list) then set url_root = "https://s1qc.asf.alaska.edu/aux_poeorb/" wget $url_root -O orbits.html grep EOF orbits.html | awk -F'"' '{print $2}' > orbits.list rm orbits.html endif echo "Looping over all the lines" foreach line ( ` awk '{ print $0 }' < text.dat ` ) set stem = `echo $line | awk '{print substr($1,16,8)}'` set name = `echo $line | awk '{print substr($1,1,64)}'` if ($stem != $mstem) then echo "Writing record $mstem" #set n1 = `echo $mstem | awk '{print $1-1}'` #set n2 = `echo $mstem | awk '{print $1+1}'` # uses date for time manipulation -ben #set n1 = `date -v-1d -jf "%Y%m%d" $mstem +%Y%m%d` #set n2 = `date -v+1d -jf "%Y%m%d" $mstem +%Y%m%d` set n1 = ` date --date="$mstem - 1 day" +%Y%m%d ` set n2 = ` date --date="$mstem + 1 day" +%Y%m%d ` set SAT = `echo $mname | awk '{print toupper(substr($1,1,3))}'` #cp ../../../../orbit/*$n1*$n2* . set orb = `grep $SAT orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT/$orb) then cp $orb_dir/$SAT/$orb . else wgetasf $url_root/$orb endif endif #if (! -f $orb) wget $url_root"/"$orb #set orb = `ls *$n1*$n2*` #set orb = `ls *$mstem*EOF` set tmp_rec = `echo $rec $orb | awk '{print $1":"$2}'` echo $tmp_rec >> data.in set rec = `echo $name` set mstem = `echo $stem` set mname = `echo $name` else if ($rec == 0) then echo "Setting a new name for rec" set rec = `echo $name` else set tmp_rec = `echo $name $rec | awk '{print $2":"$1}'` set rec = `echo $tmp_rec` endif endif end #set n1 = `date -v-1d -jf "%Y%m%d" $mstem +%Y%m%d` #set n2 = `date -v+1d -jf "%Y%m%d" $mstem +%Y%m%d` set n1 = ` date --date="$mstem - 1 day" +%Y%m%d ` set n2 = ` date --date="$mstem + 1 day" +%Y%m%d ` set SAT = `echo $mname | awk '{print toupper(substr($1,1,3))}'` echo "Writing record $mstem" #set orb = `ls *$n1*$n2*` set orb = `grep $SAT orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT/$orb) then cp $orb_dir/$SAT/$orb . else wgetasf $url_root/$orb endif endif #if (! -f $orb) wget $url_root"/"$orb #set orb = `ls *$mstem*EOF` set tmp_rec = `echo $rec $orb | awk '{print $1":"$2}'` echo $tmp_rec >> data.in rm text.dat rm orbits.list GMTSAR_V5.7/gmtsar/csh/p2p_ENVI.csh000755 015705 000000 00000022613 13505462013 017642 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Matt Wei, May 2010 # based on Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv < 3) then echo "" echo "Usage: p2p_ENVI.csh master_stem slave_stem configuration_file" echo "" echo "Example: p2p_ENVI.csh ENV1_2_077_0639_0657_41714 ENV1_2_077_0639_0657_42716 config.envi.txt" echo "" echo " Place the raw data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. The two files of raw data must have a suffix .baq" echo " Execute this command at the directory location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" exit 1 endif # start # # make sure the files exist # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` if ((! $?near_range) || ($near_range == "")) then set near_range = 0 endif set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set npatch = `grep num_patches $3 | awk '{print $3}'` if ((! $?npatch) || ($npatch == "")) then set npatch = 0 endif set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # cleanup.csh raw # # preprocess the raw data # echo "" echo " PREPROCESS Envisat DATA -- START" cd raw ENVI_pre_process $master $near_range $earth_radius $npatch $fd set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` ENVI_pre_process $slave $NEAR $RAD $npatch $fd # # check patch number, if different, use the smaller one # set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` echo "Different number of patches: $pch1 $pch2" if ($pch1 != $pch2) then if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp cd .. echo " PREPROCESS Envisat DATA -- END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # focus and align SLC files # echo " " echo "ALIGN.CSH - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.raw . ln -s ../raw/$slave.raw . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . align.csh SAT $master $slave cd .. echo "ALIGN.CSH - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is a dem.grd # if ($topo_phase == 1) then echo " " echo " DEM2TOPOP_RA.CSH - START " echo " USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC slc2amp.csh $master.PRM 1 amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make interferogram # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/csh/snaphu_interp.csh000755 015705 000000 00000011500 13505462013 021170 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # alias rm 'rm -f' unset noclobber # if ($#argv < 2) then errormessage: echo "" echo "snaphu_interp.csh [GMTSAR] - Unwrap the phase with nearest neighbor interpolating low coherence and blank pixels" echo " " echo "Usage: snaphu_interp.csh correlation_threshold maximum_discontinuity [///]" echo "" echo " correlation is reset to zero when < threshold" echo " maximum_discontinuity enables phase jumps for earthquake ruptures, etc." echo " set maximum_discontinuity = 0 for continuous phase such as interseismic " echo "" echo "Example: snaphu.csh .12 40 1000/3000/24000/27000" echo "" echo "Reference:" echo "Chen C. W. and H. A. Zebker, Network approaches to two-dimensional phase unwrapping: intractability and two new algorithms, Journal of the Optical Society of America A, vol. 17, pp. 401-414 (2000)." echo "Agram, P. S., & Zebker, H. A. (2009). Sparse two-dimensional phase unwrapping using regular-grid methods. IEEE Geoscience and Remote Sensing Letters, 6(2), 327-331." exit 1 endif # if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # prepare the files adding the correlation mask # if ($#argv == 3 ) then gmt grdcut mask.grd -R$3 -Gmask_patch.grd gmt grdcut corr.grd -R$3 -Gcorr_patch.grd gmt grdcut phasefilt.grd -R$3 -Gphase_patch.grd else ln -s mask.grd mask_patch.grd ln -s corr.grd corr_patch.grd ln -s phasefilt.grd phase_patch.grd endif # # create landmask # if (-e landmask_ra.grd) then if ($#argv == 3 ) then gmt grdsample landmask_ra.grd -R$3 `gmt grdinfo -I phase_patch.grd` -Glandmask_ra_patch.grd else gmt grdsample landmask_ra.grd `gmt grdinfo -I phase_patch.grd` -Glandmask_ra_patch.grd endif gmt grdmath phase_patch.grd landmask_ra_patch.grd MUL = phase_patch.grd $V endif # # user defined mask # if (-e mask_def.grd) then if ($#argv == 3 ) then gmt grdcut mask_def.grd -R$3 -Gmask_def_patch.grd else cp mask_def.grd mask_def_patch.grd endif gmt grdmath corr_patch.grd mask_def_patch.grd MUL = corr_patch.grd $V endif # # interpolate, in case there is a big vacant area, do not go too far # gmt grdmath corr_patch.grd $1 GE 0 NAN mask_patch.grd MUL = mask2_patch.grd gmt grdmath corr_patch.grd 0. XOR 1. MIN = corr_patch.grd gmt grdmath mask2_patch.grd corr_patch.grd MUL = corr_tmp.grd gmt grdmath mask2_patch.grd phase_patch.grd MUL = phase_tmp.grd nearest_grid phase_tmp.grd tmp.grd 300 mv tmp.grd phase_tmp.grd gmt grd2xyz phase_tmp.grd -ZTLf -do0 > phase.in gmt grd2xyz corr_tmp.grd -ZTLf -do0 > corr.in # # run snaphu # set sharedir = `gmtsar_sharedir.csh` echo "unwrapping phase with snaphu - higher threshold for faster unwrapping " if ($2 == 0) then snaphu phase.in `gmt grdinfo -C phase_patch.grd | cut -f 10` -f $sharedir/snaphu/config/snaphu.conf.brief -c corr.in -o unwrap.out -v -s else sed "s/.*DEFOMAX_CYCLE.*/DEFOMAX_CYCLE $2/g" $sharedir/snaphu/config/snaphu.conf.brief > snaphu.conf.brief snaphu phase.in `gmt grdinfo -C phase_patch.grd | cut -f 10` -f snaphu.conf.brief -c corr.in -o unwrap.out -v -d endif # # convert to grd # gmt xyz2grd unwrap.out -ZTLf -r `gmt grdinfo -I- phase_patch.grd` `gmt grdinfo -I phase_patch.grd` -Gtmp.grd gmt grdmath tmp.grd mask2_patch.grd MUL = tmp.grd #gmt grdmath tmp.grd mask_patch.grd MUL = tmp.grd # # detrend the unwrapped if DEFOMAX = 0 for interseismic # #if ($2 == 0) then # gmt grdtrend tmp.grd -N3r -Dunwrap.grd #else mv tmp.grd unwrap.grd #endif # # landmask if (-e landmask_ra.grd) then gmt grdmath unwrap.grd landmask_ra_patch.grd MUL = tmp.grd $V mv tmp.grd unwrap.grd endif # # user defined mask # if (-e mask_def.grd) then gmt grdmath unwrap.grd mask_def_patch.grd MUL = tmp.grd $V mv tmp.grd unwrap.grd endif # # plot the unwrapped phase # gmt grdgradient unwrap.grd -Nt.9 -A0. -Gunwrap_grad.grd set tmp = `gmt grdinfo -C -L2 unwrap.grd` set limitU = `echo $tmp | awk '{printf("%5.1f", $12+$13*2)}'` set limitL = `echo $tmp | awk '{printf("%5.1f", $12-$13*2)}'` set std = `echo $tmp | awk '{printf("%5.1f", $13)}'` gmt makecpt -Cseis -I -Z -T"$limitL"/"$limitU"/1 -D > unwrap.cpt set boundR = `gmt grdinfo unwrap.grd -C | awk '{print ($3-$2)/4}'` set boundA = `gmt grdinfo unwrap.grd -C | awk '{print ($5-$4)/4}'` gmt grdimage unwrap.grd -Iunwrap_grad.grd -Cunwrap.cpt -JX6.5i -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > unwrap.ps gmt psscale -Runwrap.grd -J -DJTC+w5/0.2+h+e -Cunwrap.cpt -Bxaf+l"Unwrapped phase" -By+lrad -O >> unwrap.ps gmt psconvert -Tf -P -Z unwrap.ps echo "Unwrapped phase map: unwrap.pdf" # # clean up # rm -f tmp.grd corr_tmp.grd unwrap.out tmp2.grd unwrap_grad.grd phase_tmp.grd rm -f phase.in corr.in mv -f phase_patch.grd phasefilt_interp.grd # # cleanup more # rm -f mask_patch.grd mask3.grd mask3.out rm -f corr_patch.grd corr_cut.grd #rm -f wrap.grd # GMTSAR_V5.7/gmtsar/csh/detrend_before_unwrap.csh000755 015705 000000 00000013070 13505462013 022660 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # Original version: Eric Lindsey, May 2015 if ($#argv != 3) then echo " usage: detrend_before_unwrap.csh master # bounds" echo " master is the stem name for the master image, eg. ALOS2040533050-150222-WBDR1.1__D" echo " # is the frame number (1-5) to use for detrending" echo " bounds (eg. 0/1000/0/1000) is the GMT bounds in range/az coordinates to use" exit 1 endif if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # correlation threshold for the detrending set corr_threshold = 0.2 set master = $1 # go to the selected frame directory cd F$2/intf/*/ if ( -e phasefilt_nodetrend.grd ) then mv phasefilt_nodetrend.grd phasefilt.grd endif # unwrap a part of the selected frame for detrending mkdir detrend_part cd detrend_part ln -s ../corr.grd . ln -s ../mask.grd . ln -s ../phasefilt.grd . # ## convert to range(meters) / azimuth (seconds) coordinates before fitting the trend # #speed of light set cee = "299792458.0" # convert coordinates for each frame to absolute range and azimuth (time) #compute far range in meters #range_meters = near_range + i * speed_of_light/(2*rng_samp_rate) set near_range = `grep near_range ../*$master*PRM | head -n1 |awk '{print $3}'` set rng_samp_rate = `grep rng_samp_rate ../*$master*PRM | head -n1 |awk '{print $3}'` set numrng = `grep num_rng_bins ../*$master*PRM | head -n1 |awk '{print $3}'` set far_range = `echo $near_range $numrng $cee $rng_samp_rate |awk '{printf("%.14f", $1 + $2*$3/(2.0*$4))}'` set drng = `echo $far_range $near_range $numrng |awk '{printf("%.14f", ($1-$2)/$3)}'` #compute start time relative to the start time of the selected frame, in seconds #azi_time(n,j) = (SC_clock_start(1) - SC_clock_start(n)) + j / PRF(n) set numaz = `grep num_lines ../*$master*PRM | head -n1 |awk '{print $3}'` set PRF = `grep PRF ../*$master*PRM | head -n1 |awk '{print $3}'` set azi_start = "0.0" set azi_end = `echo $numaz $PRF |awk '{printf("%.14f", $1/$2 )}'` set daz = `echo $azi_end $azi_start $numaz |awk '{printf("%.14f", ($1-$2)/$3)}'` # unwrap the patch echo "unwrap the selected region" #snaphu_interp_lindsey.csh $corr_threshold 0 $3 snaphu.csh $corr_threshold 1 $3 set rng_actual_min = `gmt grdinfo -I- unwrap.grd | sed -e 's:R:/:' | awk -F/ '{print $2}'` set rng_actual_max = `gmt grdinfo -I- unwrap.grd | sed -e 's:R:/:' | awk -F/ '{print $3}'` set az_actual_min = `gmt grdinfo -I- unwrap.grd | sed -e 's:R:/:' | awk -F/ '{print $4}'` set az_actual_max = `gmt grdinfo -I- unwrap.grd | sed -e 's:R:/:' | awk -F/ '{print $5}'` set near_range_crop = `echo $near_range $rng_actual_min $drng |awk '{print $1 + $2*$3}'` set far_range_crop = `echo $near_range $rng_actual_max $drng |awk '{print $1 + $2*$3}'` set azi_start_crop = `echo $azi_start $az_actual_min $daz |awk '{print $1 + $2*$3}'` set azi_end_crop = `echo $azi_start $az_actual_max $daz |awk '{print $1 + $2*$3}'` # edit the coordinates echo "edit unwrap.grd coordinates to -R$near_range_crop/$far_range_crop/$azi_start_crop/$azi_end_crop" gmt grdedit unwrap.grd -R$near_range_crop/$far_range_crop/$azi_start_crop/$azi_end_crop gmt grd2xyz unwrap.grd -S > unwrap.dat # compute the trend echo "find the trend from a simple 3-parameter inversion" set params = `fit_planar_trend.py unwrap.dat` set mean = `echo $params |cut -d\ -f 1` set rslope = `echo $params |cut -d\ -f 2` set aslope = `echo $params |cut -d\ -f 3` echo "found trend parameters (mean, range, az) $mean, $rslope, $aslope" set SC_clock_start0 = `grep SC_clock_start ../*$master*PRM | head -n1 |awk '{print $3}'` #back to top directory cd ../../../../ foreach n ( 1 2 3 4 5 ) cd F$n/intf/*/ echo "detrending F$n" if ( -e phasefilt_nodetrend.grd ) then #don't detrend something that was already detrended mv phasefilt_nodetrend.grd phasefilt.grd endif mv phasefilt.grd phasefilt_nodetrend.grd # convert coordinates for each frame to absolute range and azimuth (time) #compute far range in meters: range_meters = near_range + i * (rng_samp_rate)/(2*C) set near_range = `grep near_range *$master*PRM | head -n1 |awk '{print $3}'` set rng_samp_rate = `grep rng_samp_rate *$master*PRM | head -n1 |awk '{print $3}'` set numrng = `grep num_rng_bins *$master*PRM | head -n1 |awk '{print $3}'` set far_range = `echo $near_range $numrng $cee $rng_samp_rate |awk '{printf("%.14f", $1 + $2*$3/(2.0*$4))}'` #compute start time relative to the start time of the selected frame, in seconds set SC_clock_start = `grep SC_clock_start *$master*PRM | head -n1 |awk '{print $3}'` set numaz = `grep num_lines *$master*PRM | head -n1 |awk '{print $3}'` set PRF = `grep PRF *$master*PRM | head -n1 |awk '{print $3}'` set azi_start = `echo $SC_clock_start $SC_clock_start0 |awk '{printf("%.14f", 86400.0*($1-$2))}'` set azi_end = `echo $SC_clock_start $SC_clock_start0 $numaz $PRF |awk '{printf("%.14f", 86400.0*($1-$2) + $3/$4)}'` # edit the coordinates echo "edit coordinates to -R$near_range/$far_range/$azi_start/$azi_end" gmt grdedit phasefilt_nodetrend.grd -R$near_range/$far_range/$azi_start/$azi_end # subtract the fitted trend gmt grdmath $V phasefilt_nodetrend.grd X $rslope MUL SUB Y $aslope MUL SUB 2 PI MUL MOD PI SUB = phasefilt.grd # edit the coordinates back gmt grdedit phasefilt.grd -Rcorr.grd gmt grdedit phasefilt_nodetrend.grd -Rcorr.grd #geocode again if it was done before if ( -e phasefilt_mask_ll.grd ) then echo "redoing geocoding of phasefilt" gmt grdmath phasefilt.grd mask2.grd MUL = phasefilt_mask.grd proj_ra2ll.csh trans.dat phasefilt_mask.grd phasefilt_mask_ll.grd grd2kml.csh phasefilt_mask_ll phase.cpt endif cd ../../../ end GMTSAR_V5.7/gmtsar/csh/proj_ll2ra.csh000755 015705 000000 00000003275 13505462013 020371 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # D. Sandwell 1/12/07 # M. Wei 1/31/08 # alias rm 'rm -f' unset noclobber if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # # # project a grd file from lon/lat coordinates into range/azimuth coordinates # this version only works with GMT V4.0 and higher # # Input: # trans.dat - file generated by llt_grid2rat (r a topo lon lat) # phase_ll.grd - a GRD file of phase or anything in longitude/latitude coordinates # # Output: # phase_ra.grd - a GRD file of phase in radar coordinates # # check for number of arguments # if ($#argv < 3) then echo " " echo "Usage: proj_ll2ra.csh trans.dat phase_ll.grd phase_ra.grd" echo " " echo " trans.dat - file generated by llt_grid2rat (r a topo lon lat)" echo " phase_ll.grd - a GRD file of phase or anything in lon/lat-coordinates" echo " phase_ra.grd - output a GRD file in radar coordinates" echo " " exit 1 endif # # extract the phase in the r a positions # gmt set FORMAT_GEO_OUT D gmt grd2xyz $2 -s -bo3f -fg > llp # # make grids of longitude and latitude versus range and azimuth # gmt gmtconvert $1 -o3,4,0 -bi5d -bo3f > llr gmt gmtconvert $1 -o3,4,1 -bi5d -bo3f > lla # gmt surface llr `gmt gmtinfo llp -I0.08333333333 -bi3f` -bi3f -I.00083333333333 -T.50 -Gllr.grd $V gmt surface lla `gmt gmtinfo llp -I0.08333333333 -bi3f` -bi3f -I.00083333333333 -T.50 -Glla.grd $V # gmt grdtrack llp -nl -Gllr.grd -bi3f -bo4f > llpr gmt grdtrack llpr -nl -Glla.grd -bi4f -bo5f > llpra # # get the range, azimuth, phase columns and grid # gmt gmtconvert llpra -bi5f -bo3f -o3,4,2 > rap # # gmt xyz2grd rap `gmt gmtinfo rap -I32/64 -bi3f` -I32/64 -r -G$3 -bi3f # # clean # rm ll* rap GMTSAR_V5.7/gmtsar/csh/p2p_RS2_SLC.csh000755 015705 000000 00000024103 13505462013 020204 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # # process generic L1.1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_SAT_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_SAT_SLC.csh TSX_20110608 TSX_20110619 config.tsx.slc.txt" echo "" echo " Place the L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/csh/MAI_processing.csh000755 015705 000000 00000014431 13505462013 021161 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua Xu, Jan, 2019 # # Automatically generate Multi Aperture Interferogram # if ($#argv != 3 && $#argv != 4) then echo "" echo "Usage: MAI_processing.csh SAT master_image slave_image [configuration_file] " echo "" echo "Example: MAI_processing.csh ALOS_SLC IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A [config.alos.txt]" echo "" exit 1 endif if ($#argv == 4) then if(! -f $4 ) then echo " no configure file: "$4 echo " Leave it blank to generate config file with default values." exit 1 endif endif set SAT = `echo $1` if ($#argv == 4) then set conf = `echo $4` else pop_config.csh $SAT > config.$SAT.txt set conf = `echo "config.$SAT.txt"` endif set master = ` echo $2 ` set slave = ` echo $3 ` set region_cut = `grep region_cut $conf | awk '{print $3}'` set filter = `grep filter_wavelength $conf | awk '{print $3}'` set dec = `grep dec_factor $conf | awk '{print $3}'` set range_dec = `grep range_dec $conf | awk '{print $3}'` set azimuth_dec = `grep azimuth_dec $conf | awk '{print $3}'` set near_interp = `grep near_interp $conf | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $conf | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $conf | awk '{print $3}'` set mask_water = `grep mask_water $conf | awk '{print $3}'` set switch_land = `grep switch_land $conf | awk '{print $3}'` set defomax = `grep defomax $conf | awk '{print $3}'` set near_interp = `grep near_interp $conf | awk '{print $3}'` rm -r SLC_F SLC_B MAI_intf sed "s/.*skip_stage.*/skip_stage = 4,5,6/g" $conf > tmp_config p2p_processing.csh $SAT $master $slave tmp_config echo "" echo "Splitting aperture ..." cd raw if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then sarp.csh $master.PRM sarp.csh $slave.PRM endif split_aperture $master.PRM > MAI_m.rec split_aperture $slave.PRM > MAI_s.rec cd .. mkdir SLC_F cd SLC_F ln -s ../raw/$master.LED . cp ../raw/$master.PRM . ln -s ../raw/$master.SLCF ./$master.SLC ln -s ../raw/$slave.LED . cp ../raw/$slave.PRM . ln -s ../raw/$slave.SLCF ./$slave.SLC cp $slave.PRM $slave.PRM0 if ($SAT == "ALOS2_SCAN") then ln -s ../SLC/freq_alos2.dat fitoffset.csh 2 3 freq_alos2.dat 10 >> $slave.PRM else if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 3 3 freq_xcorr.dat 18 >> $slave.PRM else ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 2 2 freq_xcorr.dat 18 >> $slave.PRM endif resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM if ($region_cut != "") then echo "Cutting SLC image to $region_cut" cut_slc $master.PRM junk1 $region_cut cut_slc $slave.PRM junk2 $region_cut mv junk1.PRM $master.PRM mv junk2.PRM $slave.PRM mv junk1.SLC $master.SLC mv junk2.SLC $slave.SLC endif intf.csh $master.PRM $slave.PRM cd .. mkdir SLC_B cd SLC_B ln -s ../raw/$master.LED . cp ../raw/$master.PRM . ln -s ../raw/$master.SLCB ./$master.SLC ln -s ../raw/$slave.LED . cp ../raw/$slave.PRM . ln -s ../raw/$slave.SLCB ./$slave.SLC cp $slave.PRM $slave.PRM0 if ($SAT == "ALOS2_SCAN") then ln -s ../SLC/freq_alos2.dat fitoffset.csh 2 3 freq_alos2.dat 10 >> $slave.PRM else if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 3 3 freq_xcorr.dat 18 >> $slave.PRM else ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 2 2 freq_xcorr.dat 18 >> $slave.PRM endif resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM if ($region_cut != "") then echo "Cutting SLC image to $region_cut" cut_slc $master.PRM junk1 $region_cut cut_slc $slave.PRM junk2 $region_cut mv junk1.PRM $master.PRM mv junk2.PRM $slave.PRM mv junk1.SLC $master.SLC mv junk2.SLC $slave.SLC endif intf.csh $master.PRM $slave.PRM cd .. cd raw set prf = `grep PRF $master.PRM | awk '{print $3}'` set height = `grep SC_height $master.PRM | head -1 | awk '{print $3}'` set radius = `grep earth_radius $master.PRM | head -1 | awk '{print $3}'` set SC_vel = `grep SC_vel $master.PRM | head -1 | awk '{print $3}'` set spec_sep = `grep frequency_separation MAI_m.rec | awk '{print $3}'` cd .. set pix_size = `echo $prf $height $radius $SC_vel | awk '{printf("%.6f",$4/($2+$3)*$3/$1)}'` mkdir MAI_intf cd MAI_intf gmt grdmath ../SLC_F/real.grd=bf ../SLC_B/real.grd=bf MUL ../SLC_F/imag.grd=bf ../SLC_B/imag.grd=bf MUL ADD 3e5 MUL = real.grd=bf gmt grdmath ../SLC_F/imag.grd=bf ../SLC_B/real.grd=bf MUL ../SLC_F/real.grd=bf ../SLC_B/imag.grd=bf MUL -1 MUL ADD 3e5 MUL = imag.grd=bf cp ../SLC/$master.PRM . cp ../SLC/$slave.PRM . ln -s ../SLC/$master.LED . ln -s ../SLC/$slave.LED . ln -s ../SLC/$master.SLC . ln -s ../SLC/$slave.SLC . filter.csh $master.PRM $slave.PRM $filter $dec $range_dec $azimuth_dec gmt grdmath phase.grd 2 PI MUL DIV $spec_sep DIV $prf MUL $pix_size MUL = MAI_intf.grd gmt grdmath phasefilt.grd 2 PI MUL DIV $spec_sep DIV $prf MUL $pix_size MUL = MAI_intf_filt.grd #gmt grdmath ../intf_f/*/phase.grd ../intf_b/*/phase.grd SUB PI ADD 2 PI MUL MOD PI SUB 2 PI MUL DIV $spec_sep DIV $prf MUL $pix_size MUL = MAI_intf.grd if ($threshold_geocode != 0) then ln -s ../topo/trans.dat . if ($mask_water != 0 || $switch_land != 0) then set region = `gmt grdinfo MAI_intf.grd -I- | awk -F'R' '{print $2}'` cd ../topo landmask.csh $region gmt grdedit landmask_ra.grd -R$region cd ../MAI_intf ln -s ../topo/landmask_ra.grd . gmt grdsample landmask_ra.grd -RMAI_intf.grd -Glandmask_ra_patch.grd gmt grdmath MAI_intf.grd landmask_ra_patch.grd MUL = tmp.grd mv tmp.grd MAI_intf.grd endif proj_ra2ll.csh trans.dat MAI_intf.grd MAI_intf_ll.grd proj_ra2ll.csh trans.dat MAI_intf_filt.grd MAI_intf_filt_ll.grd gmt makecpt -Cjet -T-$pix_size/$pix_size/0.1 -D -Z > MAI.cpt grd2kml.csh MAI_intf_ll MAI.cpt grd2kml.csh MAI_intf_filt_ll MAI.cpt endif cd .. GMTSAR_V5.7/gmtsar/csh/make_los_ascii.csh000755 015705 000000 00000002040 13505462013 021252 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # subsample and LOS grid and add the look vector # need to include the PRM and LED file in the local directory # if ($#argv <1 || $#argv >5) then echo "" echo "Usage: make_los_ascii.csh los.grd dem.grd -I0.01/0.01 PRM_file Satellite " echo "" echo "Example: make_los_ascii.csh los_ll.grd dem.grd -I0.01/0.01 IMG-HH-ALOS2046743050-150405-WBDR1.1__D-F1.PRM ALOS" echo "" echo "output: los.lltnde" exit 1 endif if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif gmt grdsample $2 -Gtmp_topo.grd `grdinfo $1 -I-` `grdinfo $1 -I` -F gmt grdmath $1 0 MUL 1 ADD tmp_topo.grd MUL = tmp_topo.grd gmt grd2xyz $1 > tmp.xyz gmt grd2xyz tmp_topo.grd > tmp_topo.xyz gmt blockmedian tmp.xyz `grdinfo $1 -I-` $3 $V > tmp_b.xyz gmt blockmedian tmp_topo.xyz `grdinfo $1 -I-` $3 $V > tmp_topo_b.xyz set SAT = $5 if($SAT == ERS) then set SAT = 'ENVI' endif $SAT"_"look $4 < tmp_topo_b.xyz > tmp_topo_b_n.lltn awk '{ a=$3;getline <"tmp_topo_b_n.lltn";print $1,$2,$3,$4,$5,$6,a,-1}' tmp_b.xyz > los.lltnde rm tmp* GMTSAR_V5.7/gmtsar/csh/m2s.csh000755 015705 000000 00000001710 13505462013 017014 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Usage: m2s.csh pixel_size_in_meters llpfile # # Convert pixel dimension in meters to dx/dy in arc seconds at mean latitude set pix = $1 # Input pixel dimension in meters set llp = $2 # lon lat phase binary float file # 1. Get w e s n in array set range = (`gmt gmtinfo $2 -bi3f -C`) # 2. Get mean latitude set mlat = `gmt math -Q ${range[3]} ${range[4]} ADD 2 DIV = ` # 3. Get nearest integer 1/2 arc second for latitude (at least 1") set dy = `gmt math -Q $pix 111195.079734 DIV 3600 MUL 2 MUL RINT 1 MAX 2 DIV = ` # 4. Get nearest integer 1/2 arc second for longitude at mean latitude (at least 1") set dx = `gmt math -Q $pix 111195.079734 DIV $mlat COSD DIV 3600 MUL 2 MUL RINT 1 MAX 2 DIV = ` # Report two -Idx/dy settings: first for actual grid and 2nd for 10 times larger intervals set inc1 = "${dx}s/${dy}s" set dx = `gmt math -Q $dx 10 MUL = ` set dy = `gmt math -Q $dy 10 MUL = ` set inc2 = "${dx}s/${dy}s" echo $inc1 $inc2 GMTSAR_V5.7/gmtsar/csh/proj_ra2ll_ascii.csh000755 015705 000000 00000003133 13505462013 021532 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # D. Sandwell 1/12/07 # alias rm 'rm -f' unset noclobber if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # # # project an ASCII file from range/azimuth coordinates into lon/lat coordinates # this version only works with GMT V4.0 and higher # # Input: # trans.dat - file generated by llt_grid2rat (r a topo lon lat) # phase_ra.txt - an ASCII file of phase or anything # # Output: # phase_ll.txt - an ASCII file of phase in longitude/latitude coordinates # # check for number of arguments # if ($#argv < 3) then echo " " echo "Usage: proj_ra2ll_ascii.csh trans.dat phase.txt phase_ll.txt" echo " trans.dat - file generated by SAT_llt2rat (r a topo lon lat)" echo " phase_ra.txt - an ASCII file of phase or anything" echo " phase_ll.txt - output file in lon/lat-coordinates" echo " " exit 1 endif # # make grids of longitude and latitude versus range and azimuth unless they already exist # if (! -f raln.grd || ! -f ralt.grd ) then gmt gmtconvert $1 -o0,1,3 -bi5d -bo3f > raln gmt gmtconvert $1 -o0,1,4 -bi5d -bo3f > ralt # awk '{ if ($4 > 180.) printf("%f %f %e \n",$1,$2,$4-360.); else printf("%f %f %e \n",$1,$2,$4) }' < $1 | gmtconvert -bos3 > raln # awk '{ printf("%f %f %e \n",$1,$2,$5) }' < $1 | gmtconvert -bos3 > ralt # gmt surface raln `gmt gmtinfo $2 -I16/32` -bi3f -I8/32 -T.50 -Graln.grd $V gmt surface ralt `gmt gmtinfo $2 -I16/32` -bi3f -I8/32 -T.50 -Gralt.grd $V endif # # get the lon, lat, phase columns and grid # gmt grdtrack $2 -nl -Graln.grd -Gralt.grd -o3,4,2 > $3 # # clean # rm -f rap* llp llpb GMTSAR_V5.7/gmtsar/csh/p2p_ALOS_SS.csh000755 015705 000000 00000025513 13505462013 020246 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 4) then echo "" echo "Usage: p2p_ALOS_SS.csh master_image slave_image configuration_file subswath" echo "" echo "Example: p2p_ALOS_SS.csh IMG-HH-ALPSRP055750660-W1.0__D IMG-HH-ALPSRP049040660-W1.0__D config.alos.ss.txt 1" echo "" echo " Place the raw data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the config file exists # if(! -f $3 ) then echo " no configure file: "$3 exit endif set subswath = "SW"$4 set sub_swath = $4 # # read parameters from configuration file # set SAT = `grep SAT $3 | awk '{print $3}'` set stage = `grep proc_stage $3 | awk '{print $3}'` set num_patches = `grep num_patches $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` set num_burst = `grep num_burst $3 | awk '{print $3}'` set burst_skip = `grep burst_skip $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = ` echo $1 | awk '{ print substr($1,8,length($1)-7)}'` set slave = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` if ($switch_master == 0) then set ref = "$master" set rep = "$slave" else if ($switch_master == 1) then set ref = "$slave" set rep = "$master" else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p "$subswath" cd "$subswath" mkdir -p intf/ SLC/ topo/ cd .. ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # # cleanup.csh raw # # preprocess the raw data # echo " " echo "PRE_PROC.CSH - START" cd raw set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($near_range == "")) then set commandline = "$commandline -near $near_range" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($fd == "")) then set commandline = "$commandline -fd1 $fd" endif if (!($num_burst == "")) then set commandline = "$commandline -num_burst $num_burst" endif if (!($sub_swath == "")) then set commandline = "$commandline -swath $sub_swath" endif if (!($burst_skip == "")) then set commandline = "$commandline -burst_skip $burst_skip" endif echo $commandline ALOS_pre_process_SS IMG-HH-"$master" LED-"$master" $commandline ALOS_pre_process_SS IMG-HH-"$slave" LED-"$slave" $commandline cd .. echo "PRE_PROC.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cd "$subswath" # cleanup.csh SLC # # focus and align SLC images # echo " " echo "ALIGN.CSH - START" cd SLC cp ../../raw/IMG-HH-"$master"_"$subswath".PRM . cp ../../raw/IMG-HH-"$slave"_"$subswath".PRM . ln -s ../../raw/IMG-HH-"$master"_"$subswath".raw . ln -s ../../raw/IMG-HH-"$slave"_"$subswath".raw . ln -s ../../raw/LED-"$master" . ln -s ../../raw/LED-"$slave" . set azimuth = `grep num_valid_az IMG-HH-"$master"_"$subswath".PRM | awk '{printf("%d",int($3/8)*8)}'` update_PRM IMG-HH-"$master"_"$subswath".PRM num_valid_az $azimuth update_PRM IMG-HH-"$slave"_"$subswath".PRM num_valid_az $azimuth align.csh $SAT IMG-HH-"$master"_"$subswath" IMG-HH-"$slave"_"$subswath" cd ../.. echo "ALIGN.CSH - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cd "$subswath" # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo ln -s ../../topo/dem.grd . cp ../SLC/IMG-HH-"$master"_"$subswath".PRM master.PRM ln -s ../../raw/LED-"$master" . if (-f dem.grd) then dem2topo_ra_ALOS.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC set rng_samp_rate = `grep rng_samp_rate IMG-HH-"$master".PRM | awk 'NR == 1 {printf("%d", $3)}'` if ( $?rng_samp_rate) then if ($rng_samp_rate > 25000000) then echo "processing ALOS FBS data" set rng = 2 else echo "processing ALOS FBD data" set rng = 1 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif slc2amp.csh IMG-HH-"$master"_"$subswath".PRM $rng amp-"$master".grd cd .. cd topo ln -s ../SLC/amp-"$master".grd . offset_topo amp-"$master".grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif cd .. endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cd "$subswath" # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../SLC/IMG-HH-"$ref"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-"$rep"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../../raw/LED-$ref . ln -s ../../../raw/LED-$rep . ln -s ../../SLC/IMG-HH-"$ref"_"$subswath".SLC . ln -s ../../SLC/IMG-HH-"$rep"_"$subswath".SLC . cp ../../SLC/IMG-HH-"$ref"_"$subswath".PRM . cp ../../SLC/IMG-HH-"$rep"_"$subswath".PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf_ALOS.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$rep"_"$subswath".PRM -topo topo_shift.grd filter_alos_ss.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$repN_"$subswath".PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf_ALOS.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$rep"_"$subswath".PRM -topo topo_ra.grd filter_alos_ss.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$rep"_"$subswath".PRM $filter $dec endif else intf_ALOS.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$rep"_"$subswath".PRM filter_alos_ss.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$rep"_"$subswath".PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" cd .. endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd "$subswath" cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-HH-"$ref"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-"$rep"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd "$subswath" cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-HH-"$ref"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-"$rep"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../../.. endif # end GMTSAR_V5.7/gmtsar/csh/p2p_ALOS2_SCAN_SLC.csh000755 015705 000000 00000030763 13505462013 021233 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # # Modification History # # Xiaohua Xu, Oct 9, 2013 # # Changed some code in Part 2 to make it work for one FBD and one FBS files. # # Xiaopeng Tong, Oct, 2016 # # Add options to do subswaths # alias rm 'rm -f' unset noclobber # if ($#argv != 4) then echo "" echo "Usage: p2p_ALOS2_SCAN_SLC.csh master_image slave_image configuration_file subswatch" echo "" echo "Example: p2p_ALOS2_SCAN_SLC.csh IMG-HH-ALOS2047033500-150407-WBDR1.1__D IMG-HH-ALOS2100853500-160405-WBDR1.1__D config.alos2.slc.txt 1" echo "" echo " Place the raw L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if(! -f raw/$1"-F"$4 ) then echo " no file raw/"$1"-F"$4 exit endif if(! -f raw/$2"-F"$4 ) then echo " no file raw/"$2"-F"$4 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif set subswath = "F"$4 # # read parameters from configuration file # set SAT = `grep SAT $3 | awk '{print $3}'` set stage = `grep proc_stage $3 | awk '{print $3}'` set num_patches = `grep num_patches $3 | awk '{print $3}'` set SLC_factor = `grep SLC_factor $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 300m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 300 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = ` echo $1 | awk '{ print substr($1,5,length($1)-4)}'` set slave = ` echo $2 | awk '{ print substr($1,5,length($1)-4)}'` set master_led = ` echo $1 | awk '{ print substr($1,8,length($1)-7)}'` set slave_led = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p $subswath cd $subswath mkdir -p intf/ SLC/ topo/ cd .. ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # rm raw/*.PRM* rm raw/*.SLC rm raw/*.LED # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif echo $commandline # ALOS_pre_process_SLC IMG-$master LED-$master_led $commandline -rbias -68. # ALOS_pre_process_SLC IMG-$slave LED-$slave_led $commandline -rbias -68. ALOS_pre_process_SLC IMG-$master-$subswath LED-$master_led $commandline ALOS_pre_process_SLC IMG-$slave-$subswath LED-$slave_led $commandline # # special code to filter the SLC data in range does not seem to work # cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cd $subswath cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../../raw/*.PRM . ln -s ../../raw/IMG-$master-$subswath.SLC . ln -s ../../raw/IMG-$slave-$subswath.SLC . ln -s ../../raw/IMG-$master-$subswath.LED . ln -s ../../raw/IMG-$slave-$subswath.LED . # if images do not match, convert the FBD image to FBS set rng_samp_rate_m = `grep rng_samp_rate IMG-$master-$subswath.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate IMG-$slave-$subswath.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$slave-$subswath.PRM IMG-$slave-$subswath"_"FBS.PRM echo "Overwriting the old slave image" mv IMG-$slave-$subswath"_"FBS.PRM IMG-$slave-$subswath.PRM update_PRM IMG-$slave-$subswath.PRM input_file IMG-$slave-$subswath.SLC mv IMG-$slave-$subswath"_"FBS.SLC IMG-$slave-$subswath.SLC else if ($t == 0.5) then echo "Convert the master image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$master-$subswath.PRM IMG-$master-$subswath"_"FBS.PRM echo "Overwriting the old master image" mv IMG-$master-$subswath"_"FBS.PRM IMG-$master-$subswath.PRM update_PRM IMG-$master-$subswath.PRM input_file IMG-$master-$subswath.SLC mv IMG-$master-$subswath"_"FBS.SLC IMG-$master-$subswath.SLC else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif cp IMG-$slave-$subswath.PRM IMG-$slave-$subswath.PRM0 SAT_baseline IMG-$master-$subswath.PRM IMG-$slave-$subswath.PRM0 >> IMG-$slave-$subswath.PRM # # there is a bug in xcorr so xsearch and ysearch must be the same # # xcorr IMG-$master.PRM IMG-$slave.PRM -xsearch 128 -ysearch 128 -nx 64 -ny 256 xcorr IMG-$master-$subswath.PRM IMG-$slave-$subswath.PRM -xsearch 32 -ysearch 256 -nx 32 -ny 128 awk '{print $4}' < freq_xcorr.dat > tmp.dat set amedian = `sort -n tmp.dat | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }'` set amax = `echo $amedian | awk '{print $1+3}'` set amin = `echo $amedian | awk '{print $1-3}'` awk '{if($4 > '$amin' && $4 < '$amax') print $0}' < freq_xcorr.dat > tmp2.dat fitoffset.csh 2 3 tmp2.dat >> IMG-$slave-$subswath.PRM 10 resamp IMG-$master-$subswath.PRM IMG-$slave-$subswath.PRM IMG-$slave-$subswath.PRMresamp IMG-$slave-$subswath.SLCresamp 4 rm IMG-$slave-$subswath.SLC mv IMG-$slave-$subswath.SLCresamp IMG-$slave-$subswath.SLC cp IMG-$slave-$subswath.PRMresamp IMG-$slave-$subswath.PRM cd ../.. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cd $subswath cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/IMG-$master-$subswath.PRM master.PRM ln -s ../../raw/IMG-$master-$subswath.LED . if (-f ../../topo/dem.grd) then ln -s ../../topo/dem.grd . dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC slc2amp.csh IMG-$master-$subswath.PRM 2 amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif cd .. endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cd $subswath cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../SLC/IMG-$ref-$subswath.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep-$subswath.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../../raw/IMG-$ref-$subswath.LED . ln -s ../../../raw/IMG-$rep-$subswath.LED . ln -s ../../SLC/IMG-$ref-$subswath.SLC . ln -s ../../SLC/IMG-$rep-$subswath.SLC . cp ../../SLC/IMG-$ref-$subswath.PRM . cp ../../SLC/IMG-$rep-$subswath.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM -topo topo_shift.grd filter.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM -topo topo_ra.grd filter.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM $filter $dec endif else intf.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM filter.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" cd .. endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd $subswath cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-$ref-$subswath.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep-$subswath.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd $subswath cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-$ref-$subswath.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep-$subswath.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../../.. endif # end GMTSAR_V5.7/gmtsar/csh/grd2kml.csh000755 015705 000000 00000001662 13505462013 017663 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 10 2010 # unset noclobber # # script to convert a grd file to a kml file for Google Earth # if ($#argv < 2 || $#argv > 3) then echo " " echo "Usage: grd2kml.csh grd_file_stem cptfile [-R///] " echo " " echo "Example: grd2kml.csh phase phase.cpt " echo " " exit 1 endif # if ( -f ~/.quiet ) then set V = "" set VS = "" else set V = "-V" set VS = "-S -V" endif # set DX = `gmt grdinfo $1.grd -C | cut -f8` set DPI = `gmt gmtmath -Q $DX INV RINT = ` #echo $DPI gmt set COLOR_MODEL = hsv gmt set PS_MEDIA = tabloid # if ($#argv == 3) then gmt grdimage $1.grd -C$2 $3 -Jx1id -P -Y2i -X2i -Q $V > $1.ps else if ($#argv == 2) then gmt grdimage $1.grd -C$2 -Jx1id -P -Y2i -X2i -Q $V > $1.ps endif # # now make the kml and png # echo "Make $1.kml and $1.png" gmt psconvert $1.ps -W+k+t"$1" -E$DPI -TG -P $VS -F$1.png rm -f $1.ps grad.grd ps2raster* psconvert* # GMTSAR_V5.7/gmtsar/csh/make_dem.csh000755 015705 000000 00000014341 13505462013 020061 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # unset noclobber # # Rewritten by Xiaohua XU for GMTSAR, Feb 2016 # # Matt WEI Jan 28 2010 # Modified by Xiaopeng Feb 8 2010 # Modified by Matt Feb 12 2010 - zero.hgt and add 0 to names as N01W072.hgt # Note this script requires a local copy of the SRTM or other global dem data. # We have setup a web site http://gmtsar.ucsd.edu to prepare and deliver the file dem.grd #======================================================================= # script to make topography for interferograms # The USGS elevations are height above WGS84 so this is OK. if ($#argv < 2) then error_message: echo " " echo " Usage: make_dem.csh lonW lonE latS latN DEM_type" echo " " echo " DEM_type: 1--SRTM1 2--SRTM3 3--ASTER" echo " " echo " notes: 1 has not been tested if the tiles cross equator or E180" echo " 2 custom dem.grd also available from http://topex.ucsd.edu/gmtsar " echo " " exit 1 endif # # for plotting # set scale = -JX8i # # set local variables if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif set V = "" # if ($5 == 1) then set demdir = "/palsar/DEM/SRTM1/" set pixel = 0.000277777778 set INC = 1s else if ($5 == 2) then set demdir = "/palsar/DEM/SRTM3/World/" set pixel = 0.000833333333333 set INC = 3s else if ($5 == 3) then set demdir = "/palsar/DEM/ASTER/World/" set pixel = 0.000277777778 set INC = 1s else goto error_message endif set system = `uname -p` # #========================Mosaic topo data=============================== # # Get the center of the frame from SAT_baseline #----------------------------------------------------------------------- #----------------------------------------------------------------------- # Estimate bound of required topography set lon1 = $1 set lon2 = $2 set lat1 = $3 set lat2 = $4 set bound = $1/$2/$3/$4 echo $bound $lon1 $lon2 $lat1 $lat2 #----------------------------------------------------------------------- # Mosaic topography data # first, convert "lon1 lon2 lat1 lat2" into "lat_s lat_e lon_s lon_e" # that can be used in hgt format @ lon10 = `echo "$lon1" | awk '{printf("%d",$1) }'` @ lon20 = `echo "$lon2" | awk '{printf("%d",$1) }'` @ lat10 = `echo "$lat1" | awk '{printf("%d",$1) }'` @ lat20 = `echo "$lat2" | awk '{printf("%d",$1) }'` echo $lon10 $lon20 $lat10 $lat20 # correct the lon and lat if in the west or south if ($lon10 < 0 ) @ lon10 = $lon10 - 1 if ($lon20 < 0 ) @ lon20 = $lon20 - 1 if ($lat10 < 0 ) @ lat10 = $lat10 - 1 if ($lat20 < 0 ) @ lat20 = $lat20 - 1 set lon_control = 0 set lat_control = 0 set lon_tmp = $lon10 set lat_tmp = $lat10 rm *tmp* while ( $lat_tmp <= $lat20 ) echo $lat_tmp while ( $lon_tmp <= $lon20 ) # get the hgt file name right if ($lat_tmp >= 0) then set NS = "N" @ lat_s = $lat_tmp else if ($lat_tmp < 0 ) then set NS = "S" @ lat_s = - $lat_tmp endif # if ($lon_tmp < 0) then set WE = "W" @ lon_s = - $lon_tmp else if ($lon_tmp >= 0) then set WE = "E" @ lon_s = $lon_tmp endif # if ($lat_s < 10 && $lon_s >= 100) then set demtmp = $NS"0"$lat_s$WE$lon_s".hgt" set demtmpgrd = $NS"0"$lat_s$WE$lon_s".grd" else if ($lat_s < 10 && $lon_s >= 10) then set demtmp = $NS"0"$lat_s$WE"0"$lon_s".hgt" set demtmpgrd = $NS"0"$lat_s$WE"0"$lon_s".grd" else if ($lat_s < 10) then set demtmp = $NS"0"$lat_s$WE"00"$lon_s".hgt" set demtmpgrd = $NS"0"$lat_s$WE"00"$lon_s".grd" else if ($lon_s >= 100) then set demtmp = $NS$lat_s$WE$lon_s".hgt" set demtmpgrd = $NS$lat_s$WE$lon_s".grd" else if ($lon_s >= 10) then set demtmp = $NS$lat_s$WE"0"$lon_s".hgt" set demtmpgrd = $NS$lat_s$WE"0"$lon_s".grd" else set demtmp = $NS$lat_s$WE"00"$lon_s".hgt" set demtmpgrd = $NS$lat_s$WE"00"$lon_s".grd" endif set range = `echo "$lon_tmp $lat_tmp" | awk '{print $1"/"$1+1"/"$2"/"$2+1}'` set demlat = $NS$lat_tmp.grd echo $demtmp $demlat $range if (! -e $demdir$demtmp) then # file does not exist set demtmp = "zero.hgt" endif ln -s $demdir$demtmp . # bytes swap if ($system =~ "sparc" || $system =~ "powerpc") then gmt xyz2grd $demtmp -G$demtmpgrd"=bf" -I$pixel -R$range -di-32768 -ZTLh $V else if ($system =~ "i686" || $system =~ "i386") then gmt xyz2grd $demtmp -G$demtmpgrd"=bf" -I$pixel -R$range -di-32768 -ZTLhw $V endif # paste grd files together along longitude if (-e tmplon.grd) then gmt grdpaste $demtmpgrd"=bf" tmplon.grd"=bf" -Gtmplon.grd"=bf" else cp $demtmpgrd tmplon.grd endif rm -f $demtmp @ lon_tmp = $lon_tmp + 1 if ($lon_tmp > 181) @ lon_tmp = $lon_tmp - 360 end # paste grd files together along latitude if (-e tmplat.grd) then gmt grdpaste tmplon.grd"=bf" tmplat.grd"=bf" -Gtmplat.grd"=bf" rm -f tmplon.grd else mv -f tmplon.grd tmplat.grd endif set lon_control = 0 set lon_tmp = $lon10 @ lat_tmp = $lat_tmp + 1 rm -f $demlat end #mv tmplat.grd dem_ortho.grd gmt grdcut -R$bound tmplat.grd"=bf" -Gdem_ortho.grd # # add the egm96 geoid model if available # if (-e $demdir/geoid.egm96.grd) then # file does not exist echo "adding the egm96 geoid to the dem" gmt grdsample $demdir/geoid.egm96.grd `gmt grdinfo -I- dem_ortho.grd` `gmt grdinfo -I dem_ortho.grd` -fg -Gegm96.grd -T gmt grdedit egm96.grd `gmt grdinfo -I- dem_ortho.grd` $V gmt grdmath dem_ortho.grd egm96.grd ADD = dem.grd rm -f egm96.grd else mv -f dem_ortho.grd dem.grd endif # # plot the dem.grd # gmt grd2cpt dem.grd -Cgray -Z $V > dem.cpt gmt grdimage dem.grd $scale -Baf -BWSne -P $V -X0.2i -Cdem.cpt -K > dem.ps gmt psscale -Rdem.grd -J -DJTC+w5i/0.2i+h -Cdem.cpt -Baf -O >> dem.ps gmt psconvert -Tf -P -Z dem.ps echo "DEM map: dem.pdf" # # make a kml file of shaded relief # gmt grdgradient dem.grd -N.7 -A325 -Gdem_grad.grd $V gmt grd2cpt dem_grad.grd -Cgray -Z $V > dem_grad.cpt grd2kml.csh dem_grad dem_grad.cpt # # clean up # rm -f tmp.log all.grd tmplat.grd rm -f dem.cpt *.bb *.eps rm -f N*.grd S*.grd dem_grad.grd GMTSAR_V5.7/gmtsar/csh/organize_files_tops.csh000755 015705 000000 00000023304 13505462013 022363 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu, Mar 20 2017 # # set a directory with all downloaded orbits. e.g. orb_dir/S1A and orb_dir/S1B # # set a local directory that stores S1A and S1B orbits. e.g. orb_dir/S1A and orb_dir/S1B # # For linux users, modify the date command accordingly in order to let the script run. # Some linux system has issues with the if statement comapring tt, t1, t2. This is not fixed yet # # alias wgetasf to 'wget --http-user=**** --http-password=****' in .cshrc or .tcshrc file # requires having an account on with ASF # if ($#argv != 3) then echo "" echo "Usage: organize_files_tops.csh filelist pins.ll mode" echo " organize one track of S1A TOPS data, redefine frames, precise/restituted orbit is required" echo "" echo "filest:" echo " pth_filename1" echo " pth_filename2" echo " ......" echo "" echo "pins.ll:" echo " lon11 lat11 [lon12 lat12] [lon13 lat13]" echo " lon21 lat21 [lon22 lat22] [lon23 lat23]" echo " ......" echo "" echo "Note: " echo " files listed in filelist should be the .SAFE directory with absolute path." echo " mode = 1 will tell how many records are gonna be generated. mode = 2 will do the organizing." echo "" exit 1 endif set url_root = "https://s1qc.asf.alaska.edu/aux_poeorb" set orb_dir = "/geosat2/InSAR_Processing/Sentinel_Orbits" if (! -f orbits.list) then wget $url_root -O orbits.html grep EOF orbits.html | awk -F'"' '{print $2}' > orbits.list rm orbits.html endif set ii = 0 set mode = $3 if (-f tmprecord) rm tmprecord # divide the list of files into sets, and create frames based on the given pins foreach line (`awk '{print $0}' $1`) set file1 = `echo $line | awk -F"," '{print $1}'` set date1 = `echo $file1 | awk '{print substr($1,length($1)-54,8)}'` set SAT1 = `echo $file1 | awk '{print substr($1,length($1)-71,3)}'` if ($ii == 0) then set file0 = `echo $file1` set date0 = `echo $date1` set SAT0 = `echo $SAT1` echo $file1 > tmprecord set ii = 1 else # gather files from the same date if ($date1 == $date0 && $SAT1 == $SAT0) then echo $file1 >> tmprecord else echo "" | awk '{printf("%s ","Combing")}' set jj = 1 set t2 = 9999999999 # examining whether the frames are consecutive foreach line2 (`awk '{print $0}' tmprecord`) echo $line2 | awk '{printf("%s ",$1)}' set tt = `echo $line2 | awk '{print substr($1,length($1)-54,15)}'` set t1 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` if ($t1 > $t2) set jj = 0 set tt = `echo $line2 | awk '{print substr($1,length($1)-38,15)}'` set t2 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` end echo "" | awk '{printf("%s\n","...")}' # get the orbit file names and download set n1 = `date -v-1d -jf "%Y%m%d" $date0 +%Y%m%d` set n2 = `date -v+1d -jf "%Y%m%d" $date0 +%Y%m%d` set orb = `grep $SAT0 orbits.list | grep $n1 | grep $n2` echo $n1 $n2 $orb if (! -f $orb) then if (-f $orb_dir/$SAT0/$orb) then ln -s $orb_dir/$SAT0/$orb . else wgetasf $url_root"/"$orb endif endif # compute azimuth for the start and end set pin1 = `head -1 $2 | awk '{print $1,$2}'` set f1 = `head -1 tmprecord` make_s1a_tops $f1/annotation/*iw1*vv*xml $f1/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` # refinie the calculation in case the pin is far away from the starting frame. (baseline error) shift_atime_PRM.csh tmp2.PRM $tmpazi set azi1 = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set pin2 = `tail -1 $2 | awk '{print $1,$2}'` set f2 = `tail -1 tmprecord` make_s1a_tops $f2/annotation/*iw1*vv*xml $f2/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` # refinie the calculation in case the pin is far away from the starting frame. shift_atime_PRM.csh tmp2.PRM $tmpazi set azi2 = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set nl = `grep num_lines tmp2.PRM | awk '{print $3}'` if ($azi1 > 0 && $azi2 < $nl && $jj != 0) then awk '{print $1","$2}' $2 > tmpllt set pin0 = `awk NR==1'{print $0}' tmpllt` foreach line2 (`awk '{print $0}' tmpllt`) if ($line2 != $pin0) then echo $pin0 | awk -F"," '{print $1,$2}' > tmp1llt echo $line2 | awk -F"," '{print $1,$2}' >> tmp1llt if ($mode != 1) then create_frame_tops.csh tmprecord $orb tmp1llt 1 set newfile = `ls -t -d *.SAFE | awk NR==1'{print $0}'` set Frame1 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | head -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set Frame2 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | tail -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set dirname = `echo $Frame1"_"$Frame2` echo "Created Frame $Frame1 - $Frame2 ..." echo "" if (! -d $dirname) mkdir $dirname mv $newfile $dirname else echo "" echo "Frames on date $date0 will be re-organized..." echo "" endif set pin0 = `echo $line2` endif end else if ($jj == 0) then echo "" echo "SKIP $date0, as it stopped observation in the middle ..." echo "" else echo "" echo "SKIP $date0, as it does not have enough scenes ..." echo "" endif endif echo $file1 > tmprecord set file0 = `echo $file1` set date0 = `echo $date1` set SAT0 = `echo $SAT1` endif endif end # proces the last set of files echo "" | awk '{printf("%s ","Combing")}' set jj = 1 set t2 = 9999999999 foreach line2 (`awk '{print $0}' tmprecord`) echo $line2 | awk '{printf("%s ",$1)}' set tt = `echo $line2 | awk '{print substr($1,length($1)-54,15)}'` set t1 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` if ($t1 > $t2) set jj = 0 set tt = `echo $line2 | awk '{print substr($1,length($1)-38,15)}'` set t2 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` end echo "" | awk '{printf("%s\n","...")}' # get the orbit file names and download set n1 = `date -v-1d -jf "%Y%m%d" $date0 +%Y%m%d` set n2 = `date -v+1d -jf "%Y%m%d" $date0 +%Y%m%d` set orb = `grep $SAT0 orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT0/$orb) then ln -s $orb_dir/$SAT0/$orb . else wgetasf $url_root"/"$orb endif endif # check the start and the end, make sure the start comes later than the first line of the first file and the end comes before the last line of the last file set pin1 = `head -1 $2 | awk '{print $1,$2}'` set f1 = `head -1 tmprecord` make_s1a_tops $f1/annotation/*iw1*vv*xml $f1/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` shift_atime_PRM.csh tmp2.PRM $tmpazi set azi1 = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set pin2 = `tail -1 $2 | awk '{print $1,$2}'` set f2 = `tail -1 tmprecord` make_s1a_tops $f2/annotation/*iw1*vv*xml $f2/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` shift_atime_PRM.csh tmp2.PRM $tmpazi set azi2 = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set nl = `grep num_lines tmp2.PRM | awk '{print $3}'` # do the assembling if ($azi1 >= 0 && $azi2 < $nl && $jj != 0) then awk '{print $1","$2","$3","$4","$5","$6}' $2 > tmpllt set pin0 = `awk NR==1'{print $0}' tmpllt` foreach line2 (`awk '{print $0}' tmpllt`) if ($line2 != $pin0) then echo $pin0 | awk -F"," '{print $1,$2,$3,$4,$5,$6}' > tmp1llt echo $line2 | awk -F"," '{print $1,$2,$3,$4,$5,$6}' >> tmp1llt if ($mode != 1) then create_frame_tops.csh tmprecord $orb tmp1llt 1 set newfile = `ls -t -d *.SAFE | awk NR==1'{print $0}'` set Frame1 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | head -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set Frame2 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | tail -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set dirname = `echo $Frame1"_"$Frame2` echo "Created Frame $Frame1 - $Frame2 ..." echo "" if (! -d $dirname) mkdir $dirname mv $newfile $dirname else echo "" echo "Frames on date $date0 will be re-organized..." echo "" endif set pin0 = `echo $line2` endif end else if ($jj == 0) then echo "" echo "SKIP $date0, as it stopped observation in the middle ..." echo "" else echo "" echo "SKIP $date0, as it does not have enough scenes ..." echo "" endif endif rm tmp* rm *.EOF GMTSAR_V5.7/gmtsar/csh/stack_phase.bash000755 015705 000000 00000006075 13505462013 020751 0ustar00sandwellwheel000000 000000 #!/bin/bash -f # compute the mean LOS velocity and its standard deviations from a stack of unwrapped phase # Creator: Xiaopeng Tong, David Sandwell # Date: July 6th 2013 # Reference: GMTSAR document Appendix C if [ $# -ne 3 ]; then echo "" echo "Usage: stack_phase.bash stack.list mean.grd std.grd" echo "" echo " compute the mean LOS velocity (mm/yr) and its standard deviations" echo " from a stack of unwrapped phase" echo "" echo " Note the unwrapped phase can be pre-processed (detrended/filtered, etc)" echo "" echo " stack.list -- phase grd files to be stacked " echo " with PRM files corresponding to the interferogram" echo "" echo " example of the stack.list:" echo " unwrap_03562_05575.grd IMG-HH-ALPSRP035620660-H1.0__A.PRM IMG-HH-ALPSRP055750660-H1.0__A.PRM" echo " unwrap_03562_12956.grd IMG-HH-ALPSRP035620660-H1.0__A.PRM IMG-HH-ALPSRP129560660-H1.0__A.PRM" echo " unwrap_05575_12956.grd IMG-HH-ALPSRP055750660-H1.0__A.PRM IMG-HH-ALPSRP129560660-H1.0__A.PRM" echo "" echo " Make sure the required grd files and PRM files exist" echo "" echo " mean.grd -- output file: mean LOS velocity" echo " std.grd -- output file: standard deviation from the mean" echo "" exit 1 fi if [ ! -e $1 ] then echo "" echo "no input file found: $1" echo "" exit 1 fi list=$1 outmean=$2 outstd=$3 # compute the mean LOS velocity from the unwrapped phase echo echo " compute the mean LOS velocity .. " echo let "ac=0" exec<$list declare -a dayarray=() while read grd ref rep do # echo $grd $ref $rep if [ ! -e $grd ]; then echo "file does not exist: $grd" exit 1 fi year_ref=`grep SC_clock_start $ref | awk '{print $3}' | cut -c1-4` day_ref=`grep SC_clock_start $ref | awk '{print $3}' | cut -c5-7` year_rep=`grep SC_clock_start $rep | awk '{print $3}' | cut -c1-4` day_rep=`grep SC_clock_start $rep | awk '{print $3}' | cut -c5-7` numdays=`echo "($year_rep-$year_ref)*365+$day_rep-$day_ref" | bc` dayarray=(${dayarray[@]} $numdays) if [ "$numdays" -lt 0 ]; then echo "time span should be >= 0" exit 1 else echo "time span (days) of $grd:" $numdays fi if [ "$ac" -eq 0 ]; then gmt grdmath $grd = sum.grd wavel=`grep wavelength $ref | awk '{print($3)}'` else gmt grdmath $grd sum.grd ADD = tmp.grd mv tmp.grd sum.grd fi let "ac += $numdays" echo "accumulative days in the stack:" $ac done gmt grdmath sum.grd $ac DIV 365 MUL $wavel MUL -79.58 MUL = $outmean # compute the standard deviation from the mean LOS velocity echo echo " compute the standard deviations .. " echo let "num=0" exec<$list while read grd ref rep do if [ "$num" -eq 0 ]; then gmt grdmath $grd ${dayarray[$num]} DIV 365 MUL $wavel MUL -79.58 MUL $outmean SUB SQR = sum2.grd else gmt grdmath $grd ${dayarray[$num]} DIV 365 MUL $wavel MUL -79.58 MUL $outmean SUB SQR sum2.grd ADD = sum2tmp.grd mv sum2tmp.grd sum2.grd fi let "num += 1" done gmt grdmath sum2.grd $num DIV SQRT = $outstd # clean up rm sum.grd sum2.grd GMTSAR_V5.7/gmtsar/csh/align_ALOS_SLC.csh000755 015705 000000 00000005035 13505462013 020730 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 4 2010 # M. Wei MAY 4 2010 - ENVISAT # # Align a slave image to a master image and check results # alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv < 2) then echo "" echo "Usage: align_ALOS_SLC.csh master_name slave_name [supermaster_name]" echo "" echo " The supermaster_namestem is required if this is secondary alignment." echo "" echo "Example: align_ALOS_SLC.csh IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A " echo "" exit 1 endif # # focus the master if necessary # Do it no matter what for now. Put SLC_file to PRM. Might not be necessary # if(! -f $1.SLC) then ln -s ../raw/$1.SLC . cp ../raw/$1.PRM . update_PRM $1.PRM SLC_file $1.SLC endif # # focus the slave image # # check the range sampling rate # set rng_samp_rate_m = `grep rng_samp_rate $1.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate $2.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ($rng_samp_rate_m != $rng_samp_rate_s) then echo "The range sampling rate for master and slave differ" echo "Need to run the interferogram in steps until process2pass.csh is fixed" exit 1 endif echo "align.csh" if(! -f $2.SLC) then ln -s ../raw/$2.SLC . cp ../raw/$2.PRM . update_PRM $2.PRM SLC_file $2.SLC endif # # get the starting alignment parameters and run xcorr # cp $1.PRM $1.PRM0 cp $2.PRM $2.PRM0 if($#argv == 3) then set RSHIFT = `SAT_baseline $3.PRM $2.PRM | grep rshift | awk '{print $3}'` set ASHIFT = `SAT_baseline $3.PRM $2.PRM | grep ashift | awk '{print $3}'` # # use the PRF of the supermaster in the surrogate master # set PRF = `grep PRF $3.PRM | awk '{print $3}'` update_PRM $1.PRM PRM $PRF else set RSHIFT = `SAT_baseline $1.PRM $2.PRM | grep rshift | awk '{print $3}'` set ASHIFT = `SAT_baseline $1.PRM $2.PRM | grep ashift | awk '{print $3}'` endif update_PRM $2.PRM rshift $RSHIFT update_PRM $2.PRM ashift $ASHIFT echo "align.csh" echo "correlate master and slave to find offset parameters" xcorr $1.PRM $2.PRM -xsearch 64 -ysearch 64 -nx 32 -ny 64 # mv $2.PRM junk.PRM cp $1.PRM0 $1.PRM grep -v shift < junk.PRM > $2.PRM # # put in the alignment parameters # fitoffset.csh 3 3 freq_xcorr.dat 18 >> $2.PRM mv freq_xcorr.dat xcorr_$1_$2.dat0 # # refocus the second image # echo "resamp slave" resamp $1.PRM $2.PRM $2.PRMresamp $2.SLCresamp 4 rm $2.SLC mv $2.SLCresamp $2.SLC cp $2.PRMresamp $2.PRM # rm junk* #done GMTSAR_V5.7/gmtsar/csh/proj_model.csh000755 015705 000000 00000004736 13505462013 020460 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Creator: Xiaopeng Tong, David Sandwell # Date: July 6th 2013 alias rm 'rm -f' if ($#argv != 7) then echo "" echo "Usage: proj_model.csh SAT ve.grd vn.grd vu.grd master.PRM dem.grd los.grd" echo "" echo " project a simulated crust motion model into radar look directions " echo " the radar look direction is spatial variable" echo "" echo " SAT -- can be ALOS or ERS or ENVI or generic SAT" echo " ve, vn, vu.grd -- input: east, north, vertical motion simulated from numerical model " echo " master.PRM -- PRM file of the radar image" echo " dem.grd -- DEM grid (wider than the coverage of the radar image)" echo " los.grd -- output: file name of the LOS grid " echo "" echo " note that the grid of the grd files must be consistent" echo " note the program need master.PRM and its LED file" echo "" exit 1 endif if ((! -e $2) || (! -e $3) || (! -e $4)) then echo "" echo "no input model file found: $2, $3, $4" echo "" exit 1 endif if (! -e $5) then echo "" echo "no input PRM file found: $5" echo "" exit 1 endif if (! -e $6) then echo "" echo "no input DEM grid found: $6" echo "" exit 1 endif set SAT = $1 if ($SAT != ENVI && $SAT != ERS && $SAT != ALOS && $SAT != SAT) then echo "" echo " SAT can be ALOS ENVISAT or ERS or generic SAT" echo "" exit 1 endif set ve = $2 set vn = $3 set vu = $4 set prm = $5 set dem = $6 set out = $7 set int = `gmt grdinfo -I $ve` gmt set FORMAT_GEO_OUT D gmt grd2xyz $dem -fg | $SAT"_look" $prm -bos > look.xyz gmt blockmedian look.xyz -i0,1,3 -bi6f `gmt grdinfo -I- $dem` $int -bo -fg | gmt surface -fg -bi -Gtmp.grd $int `gmt grdinfo -I- $dem` -T0.5 gmt grdsample tmp.grd -T -Glle.grd gmt blockmedian look.xyz -i0,1,4 -bi6f `gmt grdinfo -I- $dem` $int -bo -fg | gmt surface -fg -bi -Gtmp.grd $int `gmt grdinfo -I- $dem` -T0.5 gmt grdsample tmp.grd -T -Glln.grd gmt blockmedian look.xyz -i0,1,5 -bi6f `gmt grdinfo -I- $dem` $int -bo -fg | gmt surface -fg -bi -Gtmp.grd $int `gmt grdinfo -I- $dem` -T0.5 gmt grdsample tmp.grd -T -Gllu.grd set region = `gmt grdinfo -I- llu.grd` #echo $region gmt grdsample $ve $region $int -Gtmpve.grd -fg gmt grdsample $vn $region $int -Gtmpvn.grd -fg gmt grdsample $vu $region $int -Gtmpvu.grd -fg gmt grdmath tmpve.grd "lle.grd" MUL tmpvn.grd "lln.grd" MUL ADD tmpvu.grd "llu.grd" MUL ADD = $out #clean up rm look.xyz tmp.grd rm lle.grd llu.grd lln.grd tmpve.grd tmpvn.grd tmpvu.grd GMTSAR_V5.7/gmtsar/csh/geocode.csh000755 015705 000000 00000014762 13505462013 017733 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 10 2010 # Kurt Feigl 20150811 add annotation to grd files # alias rm 'rm -f' unset noclobber # if ($#argv < 1) then errormessage: echo "" echo "Usage: geocode.csh correlation_threshold" echo "" echo " phase is masked when correlation is less than correlation_threshold" echo "" echo "Example: geocode.csh .12" echo "" exit 1 endif # if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # first mask the phase and phase gradient using the correlation # gmt grdmath corr.grd $1 GE 0 NAN mask.grd MUL = mask2.grd $V gmt grdmath phase.grd mask2.grd MUL = phase_mask.grd if (-e xphase.grd) then gmt grdmath xphase.grd mask2.grd MUL = xphase_mask.grd gmt grdmath yphase.grd mask2.grd MUL = yphase_mask.grd endif if (-e unwrap.grd) then gmt grdsample mask2.grd `gmt grdinfo unwrap.grd -I-` `gmt grdinfo unwrap.grd -I` -Gmask3.grd gmt grdmath unwrap.grd mask3.grd MUL = unwrap_mask.grd endif if (-e phasefilt.grd) then gmt grdmath phasefilt.grd mask2.grd MUL = phasefilt_mask.grd endif # # look at the masked phase # gmt grdimage phase_mask.grd -JX6.5i -Cphase.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > phase_mask.ps gmt psscale -Rphase_mask.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -Bxa1.57+l"Phase" -By+lrad -O >> phase_mask.ps gmt psconvert -Tf -P -Z phase_mask.ps echo "Masked phase map: phase_mask.pdf" if (-e xphase_mask.grd) then gmt grdimage xphase_mask.grd -JX8i -Cphase_grad.cpt -X.2i -Y.5i -P -K > xphase_mask.ps gmt psscale -Rxphase_mask.grd -J -DJTC+w5i/0.2i+h -Cphase_grad.cpt -Bxa1.57+l"Phase" -By+lrad -O >> xphase_mask.ps gmt psconvert -Tf -P -Z xphase_mask.ps echo "Masked x phase map: xphase_mask.pdf" gmt grdimage yphase_mask.grd -JX8i -Cphase_grad.cpt -X.2i -Y.5i -P -K > yphase_mask.ps gmt psscale -Ryphase_mask.grd -J -DJTC+w5i/0.2i+h -Cphase_grad.cpt -Bxa1.57+l"Phase" -By+lrad -O >> yphase_mask.ps gmt psconvert -Tf -P -Z yphase_mask.ps echo "Masked y phase map: yphase_mask.pdf" endif if (-e unwrap_mask.grd) then gmt grdimage unwrap_mask.grd -JX6.5i -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cunwrap.cpt -X1.3i -Y3i -P -K > unwrap_mask.ps gmt psscale -Runwrap_mask.grd -J -DJTC+w5i/0.2i+h+e -Cunwrap.cpt -Bxaf+l"Unwrapped phase" -By+lrad -O >> unwrap_mask.ps gmt psconvert -Tf -P -Z unwrap_mask.ps echo "Unwrapped masked phase map: unwrap_mask.pdf" endif if (-e phasefilt_mask.grd) then gmt grdimage phasefilt_mask.grd -JX6.5i -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phasefilt_mask.ps gmt psscale -Rphasefilt_mask.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -Bxa1.57+l"Phase" -By+lrad -O >> phasefilt_mask.ps gmt psconvert -Tf -P -Z phasefilt_mask.ps echo "Filtered masked phase map: phasefilt_mask.pdf" endif # line-of-sight displacement if (-e unwrap_mask.grd) then set wavel = `grep wavelength *.PRM | awk '{print($3)}' | head -1 ` gmt grdmath unwrap_mask.grd $wavel MUL -79.58 MUL = los.grd gmt grdgradient los.grd -Nt.9 -A0. -Glos_grad.grd set tmp = `gmt grdinfo -C -L2 los.grd` set limitU = `echo $tmp | awk '{printf("%5.1f", $12+$13*2)}'` set limitL = `echo $tmp | awk '{printf("%5.1f", $12-$13*2)}'` gmt makecpt -Cpolar -Z -T"$limitL"/"$limitU"/1 -D > los.cpt gmt grdimage los.grd -Ilos_grad.grd -Clos.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen -JX6.5i -X1.3i -Y3i -P -K > los.ps gmt psscale -Rlos.grd -J -DJTC+w5i/0.2i+h+e -Clos.cpt -Bxaf+l"LOS displacement [range decrease @~\256@~]" -By+lmm -O >> los.ps gmt psconvert -Tf -P -Z los.ps echo "Line-of-sight map: los.pdf" endif # # now reproject the phase to lon/lat space # echo "geocode.csh" echo "project correlation, phase, unwrapped and amplitude back to lon lat coordinates" set maker = $0:t set today = `date` set remarked = `echo by $USER on $today with $maker` echo remarked is $remarked proj_ra2ll.csh trans.dat corr.grd corr_ll.grd ; gmt grdedit -D//"dimensionless"/1///"$PWD:t geocoded correlation"/"$remarked" corr_ll.grd #proj_ra2ll.csh trans.dat phase.grd phase_ll.grd ; gmt grdedit -D//"radians"/1///"$PWD:t wrapped phase"/"$remarked" phase_ll.grd proj_ra2ll.csh trans.dat phasefilt.grd phasefilt_ll.grd ; gmt grdedit -D//"radians"/1///"$PWD:t wrapped phase after filtering"/"$remarked" phasefilt_ll.grd proj_ra2ll.csh trans.dat phase_mask.grd phase_mask_ll.grd ; gmt grdedit -D//"radians"/1///"$PWD:t wrapped phase after masking"/"$remarked" phase_mask_ll.grd proj_ra2ll.csh trans.dat display_amp.grd display_amp_ll.grd ; gmt grdedit -D//"dimensionless"/1///"PWD:t amplitude"/"$remarked" display_amp_ll.grd if (-e xphase_mask.grd) then proj_ra2ll.csh trans.dat xphase_mask.grd xphase_mask_ll.grd ; gmt grdedit -D//"radians"/1///PWD:t xphase"/"$remarked" xphase_mask_ll.grd proj_ra2ll.csh trans.dat yphase_mask.grd yphase_mask_ll.grd ; gmt grdedit -D//"radians"/1///PWD:t yphase"/"$remarked" yphase_mask_ll.grd endif if (-e unwrap_mask.grd) then proj_ra2ll.csh trans.dat unwrap_mask.grd unwrap_mask_ll.grd ; gmt grdedit -D//"radians"/1///"PWD:t unwrapped, masked phase"/"$remarked" unwrap_mask_ll.grd endif if (-e unwrap.grd) then proj_ra2ll.csh trans.dat unwrap.grd unwrap_ll.grd ; gmt grdedit -D//"radians"/1///"PWD:t unwrapped phase"/"$remarked" unwrap_ll.grd endif if (-e phasefilt_mask.grd) then proj_ra2ll.csh trans.dat phasefilt_mask.grd phasefilt_mask_ll.grd ; gmt grdedit -D//"phase in radians"/1///"PWD:t wrapped phase masked filtered"/"$remarked" phasefilt_mask_ll.grd endif # # now image for google earth # echo "geocode.csh" echo "make the KML files for Google Earth" grd2kml.csh display_amp_ll display_amp.cpt grd2kml.csh corr_ll corr.cpt grd2kml.csh phase_mask_ll phase.cpt grd2kml.csh phasefilt_mask_ll phase.cpt #ln -s phasefilt_mask_ll.grd phase_mask_ll_bw.grd #grd2kml.csh phase_mask_ll_bw phase_bw.cpt #rm phase_mask_ll_bw.grd if (-e xphase_mask_ll.grd) then grd2kml.csh xphase_mask_ll phase_grad.cpt grd2kml.csh yphase_mask_ll phase_grad.cpt endif if (-e unwrap_mask_ll.grd) then grd2kml.csh unwrap_mask_ll unwrap.cpt endif if (-e phasefilt_mask_ll.grd) then grd2kml.csh phasefilt_mask_ll phase.cpt endif if (-e unwrap_mask_ll.grd) then # constant is negative to make LOS = -1 * range change # constant is (1000 mm) / (4 * pi) gmt grdmath unwrap_mask_ll.grd $wavel MUL -79.58 MUL = los_ll.grd gmt grdedit -D//"mm"/1///"$PWD:t LOS displacement"/"equals negative range" los_ll.grd grd2kml.csh los_ll los.cpt endif GMTSAR_V5.7/gmtsar/csh/gmtsar_uninstall.sh000755 015705 000000 00000003643 13505462013 021545 0ustar00sandwellwheel000000 000000 #!/bin/bash # $Id$ # Uninstall GMTSAR installation (share and executables) # printf "gmtsar_uninstall.sh will uninstall the GMTSAR executables and share directory\n" >&2 printf "You may need sudo privileges on this computer.\n\nContinue? (y/n) [y]:" >&2 read answer if [ "X$answer" = "Xn" ]; then exit 0 fi here=`pwd` sharedir=`gmtsar_sharedir.csh` bin=`which gmtsar_sharedir.csh` dir=`dirname $bin` modules="ALOS_fbd2fbs ALOS_fbd2fbs_SLC ALOS_fbd2ss ALOS_look ALOS_merge \ ALOS_pre_process ALOS_pre_process_SLC ALOS_pre_process_SS ENVI_baseline ENVI_llt2rat ENVI_look \ ENVI_pre_process ERS_baseline ERS_llt2rat ERS_pre_process SAT_baseline SAT_llt2rat SAT_look \ align.csh align_batch.csh asa_cat asa_im_decode baseline_table.csh bperp calc_dop_orb \ calc_dop_orb_envi cleanup.csh conv dem2topo_ra.csh detrend_before_unwrap.csh dump_orbit_envi.pl \ dump_orbit_ers.pl dump_time_envi.pl ers_line_fixer esarp extend_orbit filter.csh find_auxi.pl \ fitoffset.csh geocode.csh gmtsar.csh gmtsar_sharedir.csh grd2geotiff.csh grd2kml.csh intf.csh \ intf_batch.csh landmask.csh make_a_offset.csh make_dem.csh make_los_ascii.csh make_profile.csh \ make_raw_csk make_slc_csk make_slc_rs2 make_slc_s1a make_slc_tsx offset_topo p2p_ALOS.csh \ p2p_ALOS2_SLC.csh p2p_ALOS_SLC.csh p2p_CSK.csh p2p_CSK_SLC.csh p2p_ENVI.csh p2p_ERS.csh \ p2p_RS2_SLC.csh p2p_S1A_SLC.csh p2p_S1A_TOPS.csh p2p_SAT_SLC.csh p2p_TSX_SLC.csh phase2topo \ phasediff phasefilt pre_proc.csh pre_proc_batch.csh pre_proc_init.csh proj_ll2ra.csh \ proj_ll2ra_ascii.csh proj_model.csh proj_ra2ll.csh proj_ra2ll_ascii.csh read_data_file_ccrs \ read_data_file_dpaf read_sarleader_dpaf resamp sarp.csh sbas slc2amp.csh snaphu snaphu.csh \ snaphu_interp.csh stack.csh stack_corr.csh update_PRM.csh xcorr gmtsar_uninstall.sh" printf "Remove: %s\n" $sharedir >&2 sudo rm -rf $sharedir cd $dir for exe in ${modules}; do printf "Remove: %s\n" $exe >&2 sudo rm -f ${exe} done cd $here GMTSAR_V5.7/gmtsar/csh/p2p_ENVI_SLC.csh000755 015705 000000 00000022256 13505462013 020346 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # Modified by Anders Hogrelius, April 18, 2017 # # process envisat formatted L1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_ENVI_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_ENVI_SLC.csh ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000 ASA_IMS_1PNESA20070709_054254_000000172059_00392_28001_0000 config.envi.slc.txt" echo "" echo " Place the L.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # # # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` if ((! $?near_range) || ($near_range == "")) then set near_range = 0 endif set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set npatch = `grep num_patches $3 | awk '{print $3}'` if ((! $?npatch) || ($npatch == "")) then set npatch = 0 endif set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # cleanup.csh raw # # preprocess the raw data # echo "" echo " PREPROCESS Envisat SLC DATA -- START" cd raw echo "ENVI_SLC_pre_process $master $earth_radius " ENVI_SLC_pre_process $master $earth_radius set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` echo "ENVI_SLC_pre_process $slave $RAD " ENVI_SLC_pre_process $slave $RAD # cd .. endif # ############################################# # 2 - start from align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/csh/config.alos.ss.txt000644 015705 000000 00000007500 13505462013 021203 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ALOS.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ################ # Satellite # # ALOS or ENVI # ################ SAT = ALOS ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches (usually 1~3) num_patches = # earth radius earth_radius = 6372062 # near_range near_range = # Doppler centroid fd1 = 0 # num_burst = 44 # burst_skip = 0 ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 200m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 1000 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 4 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0.01 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 region_cut = 400/5000/0/52000 # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 0 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 1 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = 0.01 GMTSAR_V5.7/gmtsar/csh/p2p_SAT_SLC.csh000755 015705 000000 00000024104 13505462013 020226 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # # process generic L1.1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_SAT_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_SAT_SLC.csh TSX_20110608 TSX_20110619 config.tsx.slc.txt" echo "" echo " Place the L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 endif echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/csh/batch_tops.config000644 015705 000000 00000006501 13505462013 021131 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for batch processing # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ####################################### # processing stage for intf_batch.csh # ####################################### # 1 - start from make topo_ra # 2 - start from make and filter interferograms, unwrap and geocode proc_stage = 1 # the namestem of the master image - REQUIRED master_image = ######################################### # parameters for preprocess # # - pre_proc_batch.csh # # following 4 parameters are OPTIONAL # ######################################### # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put DEM.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # region to process in radar coordinates (leave it blank if to process the whole region) # example format 500/10800/500/27200 - OPTIONAL region_cut = # filters # look at the filter/ folder to choose other filters filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # for tops processing, to force the decimation factor # recommended range decimation to be 8, azimuth decimation to be 2 range_dec = 8 azimuth_dec = 2 ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # use landmask (1 -- yes; else -- no) switch_land = 0 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/gmtsar/csh/p2p_S1_TOPS.csh000755 015705 000000 00000024321 13505462013 020227 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # David Dandwell, December 29, 2015 # # process Sentinel-1A TOPS data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv < 3) then echo "" echo "Usage: p2p_S1_TOPS.csh master_image slave_image configuration_file" echo "" echo "Example: p2p_S1_TOPS.csh S1_20150526_F1 S1_20150607_F1 config.tsx.slc.txt " echo "" echo " Place the pre-processed data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "Reference: Xu, X., Sandwell, D.T., Tymofyeyeva, E., González-Ortega, A. and Tong, X., " echo " 2017. Tectonic and Anthropogenic Deformation at the Cerro Prieto Geothermal " echo " Step-Over Revealed by Sentinel-1A InSAR. IEEE Transactions on Geoscience and " echo " Remote Sensing." exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set range_dec = `grep range_dec $3 | awk '{print $3}'` set azimuth_dec = `grep azimuth_dec $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # set the higher Doppler terms to zerp to be zero # update_PRM $master.PRM fdd1 0 update_PRM $master.PRM fddd1 0 # update_PRM $slave.PRM fdd1 0 update_PRM $slave.PRM fddd1 0 # rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . # cp $slave.PRM $slave.PRM0 # resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 1 # rm $slave.SLC # mv $slave.SLCresamp $slave.SLC # cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## #if (6 == 9) then if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then if ($threshold_geocode != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. else echo "" echo "SKIP GEOCODE" echo "" endif endif # end GMTSAR_V5.7/gmtsar/csh/merge_batch.csh000755 015705 000000 00000007157 13505462013 020566 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # # Xiaohua(Eric) XU, July 7, 2016 # # Script for merging 3 subswaths TOPS interferograms and then unwrap and geocode for a stack of interferograms. # # if ($#argv != 2) then echo "" echo "Usage: merge_batch.csh inputfile config_file" echo "" echo "Note: Inputfiles should be as following:" echo "" echo " IF1_Swath1_Path:master.PRM:repeat.PRM,IF1_Swath2_Path:master.PRM:repeat.PRM,IF1_Swath3_Path:master.PRM:repeat.PRM" echo " IF2_Swath1_Path:master.PRM:repeat.PRM,IF2_Swath2_Path:master.PRM:repeat.PRM,IF1_Swath3_Path:master.PRM:repeat.PRM" echo " (Use the repeat PRM which contains the shift information.)" echo " e.g. ../F1/intf_all/2015092_2015128/:S1A20150403_ALL_F1.PRM:S1A20150509_ALL_F1.PRM,../F2/intf_all/2015092_2015128/:S1A20150403_ALL_F2.PRM:S1A20150509_ALL_F2.PRM,../F3/intf_all/2015092_2015128/:S1A20150403_ALL_F3.PRM:S1A20150509_ALL_F3.PRM" echo "" echo " Make sure under each path, the processed phasefilt.grd, corr.grd and mask.grd exist." echo " Also make sure the dem.grd is linked. " echo " If trans.dat exits, recomputation of projection matrix will not proceed." echo " The master image of firet line should be the super_master." echo "" echo " config_file is the same one used for processing." echo "" echo "Example: merge_batch.csh filelist batch.config" echo "" exit 1 endif if (! -f dem.grd) then echo "dem.grd is required ..." exit 1 endif set input_file = $1 awk 'NR==1{print $0}' $input_file | awk -F, '{for (i=1;i<=NF;i++) print "../"$i}' | awk -F: '{print $1$2}'> tmpm.filelist set now_dir = `pwd` foreach line (`awk '{print $0}' $input_file`) set dir_name = `echo $line | awk -F, '{print $1}' | awk -F: '{print $1}' | awk -F"/" '{print $(NF-1)}'` mkdir $dir_name cd $dir_name echo $line | awk -F, '{for (i=1;i<=NF;i++) print "../"$i}' > tmp.filelist paste ../tmpm.filelist tmp.filelist | awk '{print $1","$2}' > tmp rm tmp.filelist foreach f_name (`awk '{print $0}' < tmp`) set mm = `echo $f_name | awk -F, '{print $1}'` set pth = `echo $f_name | awk -F, '{print $2}' | awk -F: '{print $1}'` set f1 = `echo $f_name | awk -F, '{print $2}' | awk -F: '{print $2}'` set f2 = `echo $f_name | awk -F, '{print $2}' | awk -F: '{print $3}'` cp $mm ./supermaster.PRM set rshift = `grep rshift $pth$f1 | tail -1 | awk '{print $3}'` update_PRM supermaster.PRM rshift $rshift set fs1 = `grep first_sample supermaster.PRM | awk '{print $3}'` set fs2 = `grep first_sample $pth$f1 | awk '{print $3}'` if ($fs2 > $fs1) then update_PRM supermaster.PRM first_sample $fs2 endif cp supermaster.PRM $pth echo $pth":supermaster.PRM:"$f2 >> tmp.filelist end if (-f ../trans.dat) ln -s ../trans.dat . if (-f ../raln.grd) ln -s ../raln.grd . if (-f ../ralt.grd) ln -s ../ralt.grd . if (-f ../landmask_ra.grd ) ln -s ../landmask_ra.grd . ln -s ../dem.grd . ln -s ../$2 . rm tmp merge_unwrap_geocode_tops.csh tmp.filelist $2 if (! -f ../trans.dat && -f trans.dat) then mv trans.dat ../ ln -s ../trans.dat . endif if (! -f ../landmask_ra.grd && -f landmask_ra.grd ) then mv landmask_ra.grd ../ ln -s ../landmask_ra.grd . endif if (! -f ../raln.grd && -f raln.grd) then mv raln.grd ../ ln -s ../raln.grd . endif if (! -f ../ralt.grd && -f raln.grd) then mv ralt.grd ../ ln -s ../ralt.grd . endif cd $now_dir end GMTSAR_V5.7/gmtsar/csh/pre_proc_batch.csh000755 015705 000000 00000022213 13505462013 021266 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Mar 2 2010 # modified by D. Sandwell MAR 11 2010 # modified by A Hogrelius May 22 2017 (added support for ENVI_SLC) # # preprocess all the data based on data.in table file and generate: # 1. raw files # 2. PRM files # 3. time-baseline plot for user to create stacking pairs # format in data.in table file: # line 1: master_name # line 2 and below: slave_name alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv != 3) then echo "" echo "Usage: pre_proc_batch.csh SAT data.in batch.config" echo " preprocess a set of images using a common rear_range and radius" echo "" echo " SAT can be ALOS ERS ENVI(ENVISAT) ENVI_SLC" echo "" echo " format of data.in is:" echo " line 1: master_name " echo " line 2 and below: slave_name" echo "" echo " example of data.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP089300650-H1.0__A" echo " IMG-HH-ALPSRP236920650-H1.0__A" echo "" echo " example of data.in for ERS is:" echo " e1_05783" echo " e1_07787" echo " e1_10292" echo "" echo " example of data.in for ENVISAT is:" echo " ENV1_2_127_2925_07195" echo " ENV1_2_127_2925_12706" echo " ENV1_2_127_2925_13207" echo "" echo " example of data.in for ENVI_SLC is:" echo " ASA_IMS_1PNESA20030908_175832_000000182019_00399_07968_0000" echo " ASA_IMS_1PNESA20040719_175832_000000182028_00399_12477_0000" echo " ASA_IMS_1PNESA20051121_175837_000000172042_00399_19491_0000" echo "" echo "Example: pre_proc_batch.csh ENVI data.in batch.config" echo "" exit 1 endif set SAT = $1 if ($SAT != ALOS && $SAT != ENVI && $SAT != ENVI_SLC && $SAT != ERS) then echo "" echo " SAT can be ALOS ERS ENVI(ENVISAT) or ENVI_SLC" echo "" exit 1 endif # # read parameters from configuration file # set num_patches = `grep num_patches $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set fd = `grep fd1 $3 | awk '{print $3}'` set commandline = "" if ($SAT == ERS || $SAT == ENVI) then if (!($near_range == "")) then set commandline = "$commandline $near_range" else set commandline = "$commandline 0" endif if (!($earth_radius == "")) then set commandline = "$commandline $earth_radius" else set commandline = "$commandline 0" endif if (!($num_patches == "")) then set commandline = "$commandline $num_patches" else set commandline = "$commandline 0" endif if (!($fd == "")) then set commandline = "$commandline $fd" else set commandline = "$commandline" endif else if ($SAT == ALOS) then if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($near_range == "")) then set commandline = "$commandline -near $near_range" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($fd == "")) then set commandline = "$commandline -fd1 $fd" endif endif echo $commandline # # open and read data.in table # echo "" echo "START PREPROCESS A STACK OF IMAGES" echo "" echo "preprocess master image" set line1 = `awk 'NR==1 {print $0}' $2` if ($SAT == ERS || $SAT == ENVI || $SAT == ENVI_SLC) then set master = $line1[1] else if ($SAT == ALOS) then set master = `echo $line1[1] | awk '{ print substr($1,8,length($1)-7)}'` endif # # unpack the master if necessary # if ($SAT == ERS || $SAT == ENVI) then if(! -f $master.raw || ! -f $master.LED) then $1_pre_process $master $commandline endif set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` set FD1 = `grep fd1 $master.PRM | awk '{print $3}'` set npatch = `grep num_patch $master.PRM | awk '{print $3}'` echo "before baseline" baseline_table.csh $master.PRM $master.PRM >! baseline_table.dat baseline_table.csh $master.PRM $master.PRM GMT >! table.gmt echo "after baseline" else if ($SAT == ENVI_SLC) then if ($earth_radius == "") then set earth_radius = 0 endif if(! -f $master.SLC || ! -f $master.LED) then ENVI_SLC_pre_process $master $earth_radius endif set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` set FD1 = `grep fd1 $master.PRM | awk '{print $3}'` set npatch = `grep num_patch $master.PRM | awk '{print $3}'` echo "before baseline" baseline_table.csh $master.PRM $master.PRM >! baseline_table.dat baseline_table.csh $master.PRM $master.PRM GMT >! table.gmt echo "after baseline" else if ($SAT == ALOS) then if(! -f IMG-HH-$master.raw || ! -f IMG-HH-$master.PRM ) then $1_pre_process IMG-HH-$master LED-$master $commandline endif set NEAR = `grep near_range IMG-HH-$master.PRM | awk '{print $3}'` set RAD = `grep earth_radius IMG-HH-$master.PRM | awk '{print $3}'` set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set FD1 = `grep fd1 IMG-HH-$master.PRM | awk '{print $3}'` set npatch = `grep num_patch IMG-HH-$master.PRM | awk '{print $3}'` baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM >! baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM GMT >! table.gmt endif # # loop and unpack the slave image using the same earth radius and near range as the master image # foreach line2 (`awk 'NR>1 {print $0}' $2`) echo "pre_proc_batch.csh" echo "preprocess slave images" if ($SAT == ERS || $SAT == ENVI) then set slave = $line2 if(! -f $slave.raw || ! -f $slave.LED) then $1_pre_process $slave $NEAR $RAD $npatch $FD1 endif baseline_table.csh $master.PRM $slave.PRM >> baseline_table.dat baseline_table.csh $master.PRM $slave.PRM GMT >> table.gmt else if ($SAT == ENVI_SLC) then set slave = $line2 if(! -f $slave.SLC || ! -f $slave.LED) then $1_pre_process $slave $RAD endif baseline_table.csh $master.PRM $slave.PRM >> baseline_table.dat baseline_table.csh $master.PRM $slave.PRM GMT >> table.gmt else if ($SAT == ALOS) then set slave = ` echo $line2 | awk '{ print substr($1,8,length($1)-7)}'` if(! -f IMG-HH-$slave.raw || ! -f IMG-HH-$slave.PRM ) then $1_pre_process IMG-HH-$slave LED-$slave -fd1 $FD1 -near $NEAR -radius $RAD -npatch $npatch endif # # check the range sampling rate of the slave images and do conversion if necessary # set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM GMT >> table.gmt else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs IMG-HH-$slave.PRM IMG-HH-$slave"_"FBS.PRM # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM GMT >> table.gmt echo "Overwriting the old slave image" mv IMG-HH-$slave"_"FBS.PRM IMG-HH-$slave.PRM update_PRM IMG-HH-$slave.PRM input_file IMG-HH-$slave.raw mv IMG-HH-$slave"_"FBS.raw IMG-HH-$slave.raw else if ($t == 0.5) then echo "Use FBS mode image as master" exit 1 else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif # end of the if ($SAT == ALOS) endif # end of the loop over slave images end # # make baseline plots # if ($SAT == ERS || $SAT == ENVI || $SAT == ENVI_SLC) then awk '{print 1992+$1/365.25,$2,$7}' < table.gmt > text # awk '{print 1992+$1/365.25,$2,7,$4,$5,$6,$7}' < table.gmt > text # awk '{print 1992+$1/365.25,$2,7,-45,$5,$6,$7}' < table.gmt > text else if ($SAT == ALOS) then awk '{print 2006.5+($1-181)/365.25,$2,$7}' < table.gmt > text # awk '{print 2006.5+($1-181)/365.25,$2,9,$4,$5,$6,$7}' < table.gmt > text endif set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-500, $4+500}'` # set region = `minmax text -C | awk '{print $1-0.5, $2+0.5, -1200, 1200}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > stacktable_all.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba1:"year":/a200g00f100:"baseline (m)":WSen -O >> stacktable_all.ps echo "" echo "END PREPROCESS A STACK OF IMAGES" echo "" # # clean up the mess # rm text text2 GMTSAR_V5.7/gmtsar/csh/gmtsar.csh000755 015705 000000 00000005470 13505462013 017617 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # summary of shell scripts # echo ' ' echo 'align.csh - align a pair of SAR images' echo 'align_batch.csh - align a stack of SAR images' echo 'baseline_table.csh - make baseline vs time table' echo 'cleanup.csh - cleanup the directories' echo 'dem2topo_ra.csh - transform a dem into range and azimuth coordinates' echo 'filter.csh - filter the interferogram and make amp, phase and corr' echo 'fitoffset.csh - solve for the affine parameters' echo 'geocode.csh - convert range/azimuth to lon/lat' echo 'grd2kml.csh - make a kml file for google earth' echo 'intf.csh - make the interferogram from a single pair of SLCs' echo 'intf_batch.csh - make interferograms for a set of aligned SLCs' echo 'landmask.csh - make a landmask' echo 'make_a_offset.csh - make azimuth offsets' echo 'make_dem.csh - construct a dem from tiles' echo 'pre_proc.csh - preprocess the raw SAR data for a pair of images' echo 'pre_proc_batch.csh - preprocess raw SAR data for a stack of images with common parameters ' echo 'pre_proc_init.csh - preprocess raw SAR data for a stack of images with default parameters ' echo 'p2p_ALOS.csh - process an interferogram from end-to-end for ALOS' echo 'p2p_ALOS_SLC.csh - process an interferogram from end-to-end for ALOS 1 0r 2 starting at SLC' echo 'p2p_CSK.csh - process an interferogram from end-to-end for CSK' echo 'p2p_CSK_SLC.csh - process an interferogram from end-to-end for CSK_SLC' echo 'p2p_ENVI.csh - process an interferogram from end-to-end for ENVI' echo 'p2p_ERS.csh - process an interferogram from end-to-end for ERS' echo 'p2p_ERS.csh - process an interferogram from end-to-end for ERS' echo 'p2p_RS2_SLC.csh - process an interferogram from end-to-end for RS2_SLC' echo 'p2p_S1A_SLC.csh - process an interferogram from end-to-end for S1A_SLC' echo 'p2p_TSX_SLC.csh - process an interferogram from end-to-end for TSX_SLC' echo 'proj_ll2ra.csh - project a grd file from lon/lat to range/azimuth' echo 'proj_ll2ra_ascii.csh - project points from lon/lat to range/azimuth' echo 'proj_model.csh - project a crust motion model into radar looking directions' echo 'proj_ra2ll.csh - project a grd file from range/azimuth to lon/lat' echo 'proj_ra2ll_ascii.csh - project points from range/azimuth to lon/lat' echo 'sarp.csh - focus a single SAR image' echo 'slc2amp.csh - make and amplitude image from and SLC' echo 'snaphu.csh - unwrap phase using snaphu' echo 'stack_corr.bash - stack the correlation to compute mean correlation' echo 'stack_phase.bash - stack the phase to compute mean LOS velocity' echo 'update_PRM - replace a value in a PRF-file' echo ' ' GMTSAR_V5.7/gmtsar/csh/create_frame_tops.csh000755 015705 000000 00000020244 13505462013 022000 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu, Mar 18, 2017 # # used for creating a new frame based on two input frames. # if ($#argv != 3 && $#argv != 4) then echo "" echo "Usage: create_frame_tops.csh SAFE_filelist ****.EOF two_pins.ll [mode]" echo " create one frame based on the two input frames, precise/restituted orbit is required" echo "" echo " format of two_pins.llt (lon2/lat2 comes later than lon1/lat1 in orbit time):" echo " lon11 lat11 [lon12 lat12] [lon13 lat13]" echo " lon21 lat21 [lon22 lat22] [lon23 lat23]" echo " (drop more columns if you want subsath 2 and 3 to have different boundaries)" echo "" echo " outputs:" echo " new.SAFE --> datetime1-datetime2.SAFE" echo "" echo " Note:" echo " The two input .SAFE file should be in time order, if the two_pin.llt is at wrong location, the program will output all the bursts." echo " mode = 1, output vv; mode = 2, output vh; default is vv" echo " Files listed in SAFE_filelist should be the absolute path" echo "" exit 1 endif if ($#argv == 3) then set mode = `echo "vv"` else if ($4 == 1) then set mode = `echo "vv"` else set mode = `echo "vh"` endif endif set ncol = `awk '{print NF}' $3 | head -1` echo "Combining $mode data..." set pth = `pwd` set filelist = $1 #set file1 = $1 #set file2 = $2 set orb = $2 set tps = $3 if (-d new.SAFE) then rm -r new.SAFE endif mkdir new.SAFE mkdir new.SAFE/annotation new.SAFE/measurement # work on the first subswath echo "" echo "Working on subswath 1 ..." set a = `awk NR==1'{print $0}' $filelist` cd $a/annotation set f0 = `ls *iw1*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` set head1 = `echo $f0 | awk '{print substr($1,1,15)}'` cd $pth set a = "" foreach line (`awk '{print $0}' $filelist`) cd $line/annotation set f1 = `ls *iw1*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` cd $pth set a = `echo $a $f1` cd new.SAFE ln -s $line/annotation/$f1.xml . ln -s $line/measurement/$f1.tiff . cd .. end cd new.SAFE make_s1a_tops $f0.xml $f0.tiff tmp1 0 ext_orb_s1a tmp1.PRM ../$orb tmp1 set ll1 = `awk NR==1'{print $1,$2}' ../$tps` set ll2 = `awk NR==2'{print $1,$2}' ../$tps` set tmpazi = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{print $2}'` shift_atime_PRM.csh tmp1.PRM $tmpazi set azi1 = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set azi2 = `echo "$ll2 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` echo "Working on bursts covering $azi1 ($ll1) - $azi2 ($ll2)..." assemble_tops $azi1 $azi2 $a new set tail1 = `echo $f1 | awk '{print substr($1,length($1)-16,17)}'` set date = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,1,4)substr($1,6,2)substr($1,9,2)}'` set t1 = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` set t2 = `grep stopTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` mv new.xml annotation/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.xml mv new.tiff measurement/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.tiff rm *.tiff *.xml tmp1* cd .. # wrok on the second subswath echo "" echo "Working on subswath 2 ..." set a = `awk NR==1'{print $0}' $filelist` cd $a/annotation set f0 = `ls *iw2*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` set head1 = `echo $f0 | awk '{print substr($1,1,15)}'` cd $pth set a = "" foreach line (`awk '{print $0}' $filelist`) cd $line/annotation set f1 = `ls *iw2*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` cd $pth set a = `echo $a $f1` cd new.SAFE ln -s $line/annotation/$f1.xml . ln -s $line/measurement/$f1.tiff . cd .. end cd new.SAFE make_s1a_tops $f0.xml $f0.tiff tmp1 0 ext_orb_s1a tmp1.PRM ../$orb tmp1 if ($ncol >= 4) then set ll1 = `awk NR==1'{print $3,$4}' ../$tps` set ll2 = `awk NR==2'{print $3,$4}' ../$tps` else set ll1 = `awk NR==1'{print $1,$2}' ../$tps` set ll2 = `awk NR==2'{print $1,$2}' ../$tps` endif set tmpazi = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{print $2}'` shift_atime_PRM.csh tmp1.PRM $tmpazi set azi1 = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set azi2 = `echo "$ll2 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` echo "Working on bursts covering $azi1 ($ll1) - $azi2 ($ll2) ..." assemble_tops $azi1 $azi2 $a new set tail1 = `echo $f1 | awk '{print substr($1,length($1)-16,17)}'` set date = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,1,4)substr($1,6,2)substr($1,9,2)}'` set t1 = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` set t2 = `grep stopTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` mv new.xml annotation/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.xml mv new.tiff measurement/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.tiff rm *.tiff *.xml tmp1* cd .. # wrok on the third subswath echo "" echo "Working on subswath 3 ..." set a = `awk NR==1'{print $0}' $filelist` cd $a/annotation set f0 = `ls *iw3*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` set head1 = `echo $f0 | awk '{print substr($1,1,15)}'` cd $pth set a = "" foreach line (`awk '{print $0}' $filelist`) cd $line/annotation set f1 = `ls *iw3*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` cd $pth set a = `echo $a $f1` cd new.SAFE ln -s $line/annotation/$f1.xml . ln -s $line/measurement/$f1.tiff . cd .. end cd new.SAFE make_s1a_tops $f0.xml $f0.tiff tmp1 0 ext_orb_s1a tmp1.PRM ../$orb tmp1 if ($ncol >= 6) then set ll1 = `awk NR==1'{print $5,$6}' ../$tps` set ll2 = `awk NR==2'{print $5,$6}' ../$tps` else set ll1 = `awk NR==1'{print $1,$2}' ../$tps` set ll2 = `awk NR==2'{print $1,$2}' ../$tps` endif set tmpazi = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{print $2}'` shift_atime_PRM.csh tmp1.PRM $tmpazi set azi1 = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set azi2 = `echo "$ll2 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` echo "Working on bursts covering $azi1 ($ll1) - $azi2 ($ll2) ..." assemble_tops $azi1 $azi2 $a new set tail1 = `echo $f1 | awk '{print substr($1,length($1)-16,17)}'` set date = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,1,4)substr($1,6,2)substr($1,9,2)}'` set t1 = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` set t2 = `grep stopTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` mv new.xml annotation/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.xml mv new.tiff measurement/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.tiff rm *.tiff *.xml tmp1* cd .. set a = `awk NR==1'{print $0}' $filelist` cp $a/manifest.safe new.SAFE/ # edit the name of the new .SAFE file echo "" echo "Editing name of the new file..." set tail2 = `echo $a | awk '{print substr($1,length($1)-22,23)}'` set t1 = `ls new.SAFE/annotation/*.xml | awk '{print substr($1,length($1)-43,6)}' | gmt gmtinfo -C | awk '{printf("%.6d", $1)}'` set t2 = `ls new.SAFE/annotation/*.xml | awk '{print substr($1,length($1)-27,6)}' | gmt gmtinfo -C | awk '{printf("%.6d", $2)}'` set date1 = `ls new.SAFE/annotation/*.xml | awk '{print substr($1,length($1)-52,8)}' | gmt gmtinfo -C | awk '{print $1}'` set a = `awk NR==1'{print $0}' $filelist` set head2 = `echo $a | awk '{print substr($1,length($1)-71,17)}'` set newname = `echo $head2$date1"T"$t1"_"$date1"T"$t2"_"$tail2` if (-d $newname) rm -r $newname mv new.SAFE $newname GMTSAR_V5.7/gmtsar/csh/config.ers.txt000644 015705 000000 00000007231 13505462013 020413 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ERS.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 1 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 200m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0.12 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/300/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 65 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/gmtsar/csh/make_profile.csh000755 015705 000000 00000003301 13505462013 020746 0ustar00sandwellwheel000000 000000 #!/bin/csh -e # $Id$ # # Kurt Feigl 20150807 # # make profile across strike # if ($#argv != 4) then echo "make profile across strike" echo "" echo "" echo "Usage: $0:t longitude_in_degrees latitude_in_degrees strike_in_degrees_CW_fromN step_size_in_degrees" echo "" echo "" echo "" exit 1 endif # longitude of crossing point set maxx = $1 # latitude of crossing point set maxy = $2 # strike in degrees clockwise from north set dir_strike = $3 set dir_cross = `gmt math -Q $dir_strike 90. ADD 360. MOD =` # step size in latitude #set step = `gmt math -Q 1 360 DIV =` set step = $4 # draw a line through the maximum (units will be km) #echo $maxx $maxy #gmt project -G0.1 -C$maxx/$maxy -A90. -Q -L-50/50 >! profile.rsp ##gmt project -G0.1 -C$maxx/$maxy -A$dir_cross -Q -L-50/50 >! profile.rsp # make 5 more lines #set newy = `gmt math -Q 1 360 DIV 2. MUL $maxy EXCH SUB =` set newxy = "$maxx/$maxy" #echo newxy is $newxy \rm -f profile.rsp touch profile.rsp set j = 1 while ( $j <= 50 ) #set newy = `gmt math -Q 1 360 DIV $newy ADD =` # calculate coordinates of a point located 0.1 km along strike set newxy = `gmt project -G0.1 -C$newxy -A$dir_strike -Q -L0/0.1 | awk 'NR==2{print $1"/"$2}'` #echo newxy is $newxy echo '>' >> profile.rsp gmt project -G0.1 -C$newxy -A$dir_cross -Q -L-50/50 >> profile.rsp # calculate coordinates of a point located 1 km along strike set newxy = `gmt project -G0.1 -C$newxy -A$dir_strike -Q -L-0.1/0. | awk 'NR==2{print $1"/"$2}'` #echo newxy is $newxy echo '>' >> profile.rsp gmt project -G0.1 -C$newxy -A$dir_cross -Q -L-50/50 >> profile.rsp @ j++ end echo "created:" \ls -l profile.rsp exit 0 GMTSAR_V5.7/gmtsar/csh/config.alos.txt000644 015705 000000 00000007376 13505462013 020572 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ALOS.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ################ # Satellite # # ALOS or ENVI # ################ SAT = ALOS ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches (usually 1~3) num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 1 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 200m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = .12 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/gmtsar/csh/stack.csh000755 015705 000000 00000003545 13505462013 017430 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # compute the mean and standard deviations of grid files # Creator: Xiaopeng Tong, David Sandwell # Date: July 6th 2013 # input: a list of the gird files # output: the mean and standard deviations of the grids alias rm 'rm -f' if ($#argv != 4) then echo "" echo "Usage: stack.csh grid.list scale mean.grd std.grd " echo "" echo " compute the mean and standard deviations of grid files " echo "" echo " grid.list -- a list of grd file names" echo " scale -- a scale factor put 1 if not scale" echo " mean.grd -- output file name of the mean grid " echo " std.grd -- output file name of the standard deviation grid " echo "" echo " note that the grid of the grd files must be consistent" echo "" exit 1 endif if (! -e $1) then echo "" echo "no input file found: $1" echo "" exit 1 endif set list = $1 set scale = $2 set outmean = $3 set outstd = $4 # compute the mean echo "computing the mean of the grids .." @ num = 1 foreach name (`cat $list`) if (! -e $name) then echo " Error: file not found: $name " echo "" exit 1 endif if ($num == 1) then gmt grdmath $name = sum.grd else gmt grdmath $name sum.grd ADD = sumtmp.grd mv sumtmp.grd sum.grd endif @ num ++ end @ num -- gmt grdmath sum.grd $num DIV = $outmean # compute the standard deviation echo "compute the standard deviation .. " @ num = 1 foreach name (`cat $list`) if ($num == 1) then gmt grdmath $name $outmean SUB SQR = sum2.grd else gmt grdmath $name $outmean SUB SQR sum2.grd ADD = sum2tmp.grd mv sum2tmp.grd sum2.grd endif @ num ++ end @ num -- gmt grdmath sum2.grd $num DIV SQRT = $outstd # scale them gmt grdmath $outmean $scale MUL = tmp.grd mv tmp.grd $outmean gmt grdmath $outstd $scale MUL = tmp.grd mv tmp.grd $outstd # clean up rm sum.grd sum2.grd GMTSAR_V5.7/gmtsar/csh/p2p_processing.csh000755 015705 000000 00000061736 13505462013 021266 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua Xu, Jan, 2018 # # Automatically perform two-path processing on raw(1.0)/SLC(1.1) data # if ($#argv != 3 && $#argv != 4) then echo "" echo "Usage: p2p_processing.csh SAT master_image slave_image [configuration_file] " echo "" echo "Example: p2p_processing.csh ALOS IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A [config.alos.txt]" echo "" echo " Put the data and orbit files in the raw folder, put DEM in the topo folder" echo " The SAT needs to be specified, choices with in ERS, ENVI, ALOS, ALOS_SLC, ALOS2, ALOS2_SCAN" echo " S1_STRIP, S1_TOPS, ENVI_SLC, CSK_RAW, CSK_SLC, TSX, RS2" echo "" echo " Make sure the files from the same date have the same stem, e.g. aaaa.tif aaaa.xml aaaa.cos aaaa.EOF, etc" echo "" echo " If the configuration file is left blank, the program will generate one " echo " with default parameters " echo "" exit 1 endif # start # Make sure the config exist if ($#argv == 4) then if(! -f $4 ) then echo " no configure file: "$4 echo " Leave it blank to generate config file with default values." exit 1 endif endif # # Read parameters from the configure file # set SAT = `echo $1` if ($#argv == 4) then set conf = `echo $4` else pop_config.csh $SAT > config.$SAT.txt set conf = `echo "config.$SAT.txt"` endif # conf may need to be changed later on set stage = `grep proc_stage $conf | awk '{print $3}'` set s_stages = `grep skip_stage $conf | awk '{print $3}' | awk -F, '{print $1,$2,$3,$4,$5,$6}'` set skip_1 = 0 set skip_2 = 0 set skip_3 = 0 set skip_4 = 0 set skip_5 = 0 set skip_6 = 0 foreach line (`echo $s_stages`) if ($line == 1) set skip_1 = 1 if ($line == 2) set skip_2 = 1 if ($line == 3) set skip_3 = 1 if ($line == 4) set skip_4 = 1 if ($line == 5) set skip_5 = 1 if ($line == 6) set skip_6 = 1 end if ("x$s_stages" != "x") then echo "" echo "Skipping stage $s_stages ..." endif set num_patches = `grep num_patches $conf | awk '{print $3}'` set near_range = `grep near_range $conf | awk '{print $3}'` set earth_radius = `grep earth_radius $conf | awk '{print $3}'` set fd = `grep fd1 $conf | awk '{print $3}'` set topo_phase = `grep topo_phase $conf | awk '{print $3}'` set shift_topo = `grep shift_topo $conf | awk '{print $3}'` set switch_master = `grep switch_master $conf | awk '{print $3}'` set filter = `grep filter_wavelength $conf | awk '{print $3}'` set iono = `grep correct_iono $conf | awk '{print $3}'` if ( "x$filter" == "x" ) then set iono = 0 endif set iono_filt_rng = `grep iono_filt_rng $conf | awk '{print $3}'` set iono_filt_azi = `grep iono_filt_azi $conf | awk '{print $3}'` set iono_dsamp = `grep iono_dsamp $conf | awk '{print $3}'` set iono_skip_est = `grep iono_skip_est $conf | awk '{print $3}'` # set filter = 200 # echo " " # echo "WARNING filter wavelength was not set in config.txt file" # echo " please specify wavelength (e.g., filter_wavelength = 200)" # echo " remove filter1 = gauss_alos_200m" #endif set dec = `grep dec_factor $conf | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $conf | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $conf | awk '{print $3}'` set region_cut = `grep region_cut $conf | awk '{print $3}'` set mask_water = `grep mask_water $conf | awk '{print $3}'` set switch_land = `grep switch_land $conf | awk '{print $3}'` set defomax = `grep defomax $conf | awk '{print $3}'` set range_dec = `grep range_dec $conf | awk '{print $3}'` set azimuth_dec = `grep azimuth_dec $conf | awk '{print $3}'` set SLC_factor = `grep SLC_factor $conf | awk '{print $3}'` set near_interp = `grep near_interp $conf | awk '{print $3}'` set master = ` echo $2 ` set slave = ` echo $3 ` echo "" # # combine preprocess parameters # set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif ############################# # 1 - start from preprocess # ############################# # # make sure the files exist # if ($stage == 1 && $skip_1 == 0) then echo "" echo "PREPROCESS - START" echo "" echo "Working on images $master $slave ..." if ($SAT == "ALOS" || $SAT == "ALOS2" || $SAT == "ALOS_SLC" || $SAT == "ALOS2_SCAN") then if(! -f raw/$master ) then echo " no file raw/"$master exit endif if(! -f raw/$slave ) then echo " no file raw/"$slave exit endif else if ($SAT == "ENVI_SLC") then if(! -f raw/$master.N1 ) then echo " no file raw/"$master.N1 exit endif if(! -f raw/$slave.N1 ) then echo " no file raw/"$slave.N1 exit endif else if ($SAT == "ERS") then if(! -f raw/$master.dat ) then echo " no file raw/"$master.dat exit endif if(! -f raw/$slave.dat ) then echo " no file raw/"$slave.dat exit endif if(! -f raw/$master.ldr ) then echo " no file raw/"$master.ldr exit endif if(! -f raw/$slave.ldr ) then echo " no file raw/"$slave.ldr exit endif else if ($SAT == "ENVI") then if(! -f raw/$master.baq ) then echo " no file raw/"$master.baq exit endif if(! -f raw/$slave.baq ) then echo " no file raw/"$slave.baq exit endif else if ($SAT == "S1_STRIP" || $SAT == "S1_TOPS") then if(! -f raw/$master.xml ) then echo " no file raw/"$master".xml" exit endif if(! -f raw/$master.tiff ) then echo " no file raw/"$master".tiff" exit endif if(! -f raw/$slave.xml ) then echo " no file raw/"$slave".xml" exit endif if(! -f raw/$slave.tiff ) then echo " no file raw/"$slave".tiff" exit endif if ($SAT == "S1_TOPS") then if(! -f raw/$master.EOF ) then echo " no file raw/"$master".EOF" endif if(! -f raw/$slave.EOF ) then echo " no file raw/"$slave".EOF" endif endif else if ($SAT == "CSK_RAW" || $SAT == "CSK_SLC") then if(! -f raw/$master.h5 ) then echo " no file raw/"$master".h5" exit endif if(! -f raw/$slave.h5 ) then echo " no file raw/"$slave".h5" exit endif else if ($SAT == "RS2") then if(! -f raw/$master.xml ) then echo " no file raw/"$master".xml" exit endif if(! -f raw/$master.tif ) then echo " no file raw/"$master".tif" exit endif if(! -f raw/$slave.xml ) then echo " no file raw/"$slave".xml" exit endif if(! -f raw/$slave.tif ) then echo " no file raw/"$slave".tif" exit endif else if ($SAT == "TSX") then if(! -f raw/$master.xml ) then echo " no file raw/"$master".xml" exit endif if(! -f raw/$slave.xml ) then echo " no file raw/"$slave".xml" exit endif if(! -f raw/$master.cos ) then echo " no file raw/"$master".cos" exit endif if(! -f raw/$slave.cos ) then echo " no file raw/"$slave".cos" exit endif endif # # Start preprocessing # rm raw/*.PRM* rm raw/*.SLC rm raw/*.LED cd raw #echo "pre_proc.csh $SAT $master $slave $commandline" pre_proc.csh $SAT $master $slave $commandline cd .. echo " " echo "PREPROCESS - END" echo "" endif ############################################# # 2 - start from focus and align SLC images # ############################################# # mkdir -p intf SLC if ($iono == 1) then mkdir -p SLC_L mkdir -p SLC_H endif if ($SAT == "S1_TOPS") then set master = `echo $master | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set slave = `echo $slave | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` endif if ($stage <= 2 && $skip_2 == 0) then cleanup.csh SLC if ($iono == 1) then rm -rf SLC_L/* SLC_H/* endif # # focus and align SLC images # echo " " echo "ALIGN.CSH - START" echo "" cd SLC if ($SAT != "S1_TOPS") then if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then cp ../raw/*.PRM . ln -s ../raw/$master.raw . ln -s ../raw/$slave.raw . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . if ($iono == 1) then # set chirp extention to zero for ionospheric phase estimation sed "s/.*fd1.*/fd1 = 0.0000/g" $master.PRM > tmp sed "s/.*chirp_ext.*/chirp_ext = 0/g" tmp > tmp2 mv tmp2 $master.PRM sed "s/.*fd1.*/fd1 = 0.0000/g" $slave.PRM > tmp sed "s/.*chirp_ext.*/chirp_ext = 0/g" tmp > tmp2 mv tmp2 $slave.PRM rm tmp endif else cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . endif if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then sarp.csh $master.PRM sarp.csh $slave.PRM endif if ($iono == 1) then if (-f ../raw/ALOS_fbd2fbs_log || -f ../raw/ALOS2_fbd2fbs_log) then set cfile = `grep IMG-HH ../raw/ALOS*fbd2fbs_log | awk '{print $1}'` if ($cfile == $slave) then split_spectrum $master.PRM 1 > params1 else split_spectrum $master.PRM > params1 endif endif mv SLCH ../SLC_H/$master.SLC mv SLCL ../SLC_L/$master.SLC if (-f ../raw/ALOS_fbd2fbs_log || -f ../raw/ALOS2_fbd2fbs_log) then set cfile = `grep IMG-HH ../raw/ALOS*fbd2fbs_log | awk '{print $1}'` if ($cfile == $master) then split_spectrum $slave.PRM 1 > params2 else split_spectrum $slave.PRM > params2 endif endif mv SLCH ../SLC_H/$slave.SLC mv SLCL ../SLC_L/$slave.SLC cd ../SLC_L set wl1 = `grep low_wavelength ../SLC/params1 | awk '{print $3}'` set wl2 = `grep low_wavelength ../SLC/params2 | awk '{print $3}'` cp ../SLC/$master.PRM . ln -s ../raw/$master.LED . sed "s/.*wavelength.*/radar_wavelength = $wl1/g" $master.PRM > tmp mv tmp $master.PRM cp ../SLC/$slave.PRM . ln -s ../raw/$slave.LED . sed "s/.*wavelength.*/radar_wavelength = $wl2/g" $slave.PRM > tmp mv tmp $slave.PRM cd ../SLC_H set wh1 = `grep high_wavelength ../SLC/params1 | awk '{print $3}'` set wh2 = `grep high_wavelength ../SLC/params2 | awk '{print $3}'` cp ../SLC/$master.PRM . ln -s ../raw/$master.LED . sed "s/.*wavelength.*/radar_wavelength = $wh1/g" $master.PRM > tmp mv tmp $master.PRM cp ../SLC/$slave.PRM . ln -s ../raw/$slave.LED . sed "s/.*wavelength.*/radar_wavelength = $wh2/g" $slave.PRM > tmp mv tmp $slave.PRM cd ../SLC endif cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM if ($SAT == "ALOS2_SCAN") then xcorr $master.PRM $slave.PRM -xsearch 32 -ysearch 256 -nx 32 -ny 128 awk '{print $4}' < freq_xcorr.dat > tmp.dat set amedian = `sort -n tmp.dat | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }'` set amax = `echo $amedian | awk '{print $1+3}'` set amin = `echo $amedian | awk '{print $1-3}'` awk '{if($4 > '$amin' && $4 < '$amax') print $0}' < freq_xcorr.dat > freq_alos2.dat fitoffset.csh 2 3 freq_alos2.dat 10 >> $slave.PRM else if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 -nx 20 -ny 50 fitoffset.csh 3 3 freq_xcorr.dat 18 >> $slave.PRM else xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 -nx 20 -ny 50 fitoffset.csh 2 2 freq_xcorr.dat 18 >> $slave.PRM endif resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM if ($iono == 1) then cd ../SLC_L cp $slave.PRM $slave.PRM0 if ($SAT == "ALOS2_SCAN") then ln -s ../SLC/freq_alos2.dat fitoffset.csh 2 3 freq_alos2.dat 10 >> $slave.PRM else if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 3 3 freq_xcorr.dat 18 >> $slave.PRM else ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 2 2 freq_xcorr.dat 18 >> $slave.PRM endif resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd ../SLC_H cp $slave.PRM $slave.PRM0 if ($SAT == "ALOS2_SCAN") then ln -s ../SLC/freq_alos2.dat fitoffset.csh 2 3 freq_alos2.dat 10 >> $slave.PRM else if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 3 3 freq_xcorr.dat 18 >> $slave.PRM else ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 2 2 freq_xcorr.dat 18 >> $slave.PRM endif resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd ../SLC endif else if ($SAT == "S1_TOPS") then cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . if ($iono == 1) then cd .. mkdir -p SLC_L mkdir -p SLC_H cd SLC ln -s ../raw/$2.tiff . ln -s ../raw/$3.tiff . split_spectrum $master.PRM > params1 mv high.tiff ../SLC_H/$2.tiff mv low.tiff ../SLC_L/$2.tiff split_spectrum $slave.PRM > params2 mv high.tiff ../SLC_H/$3.tiff mv low.tiff ../SLC_L/$3.tiff cd ../SLC_L ln -s ../raw/$2.xml . ln -s ../raw/$2.EOF . ln -s ../raw/$3.xml . ln -s ../raw/$3.EOF . ln -s ../topo/dem.grd . ln -s ../raw/a.grd . ln -s ../raw/r.grd . ln -s ../raw/offset*.dat . align_tops.csh $2 $2.EOF $3 $3.EOF dem.grd 1 set wl1 = `grep low_wavelength ../SLC/params1 | awk '{print $3}'` set wl2 = `grep low_wavelength ../SLC/params2 | awk '{print $3}'` #cp ../raw/$master.PRM . #ln -s ../raw/$master.LED . sed "s/.*wavelength.*/radar_wavelength = $wl1/g" $master.PRM > tmp mv tmp $master.PRM #cp ../raw/$slave.PRM . #ln -s ../raw/$slave.LED . sed "s/.*wavelength.*/radar_wavelength = $wl2/g" $slave.PRM > tmp mv tmp $slave.PRM cd ../SLC_H ln -s ../raw/$2.xml . ln -s ../raw/$2.EOF . ln -s ../raw/$3.xml . ln -s ../raw/$3.EOF . ln -s ../topo/dem.grd . ln -s ../raw/a.grd . ln -s ../raw/r.grd . ln -s ../raw/offset*.dat . align_tops.csh $2 $2.EOF $3 $3.EOF dem.grd 1 set wh1 = `grep high_wavelength ../SLC/params1 | awk '{print $3}'` set wh2 = `grep high_wavelength ../SLC/params2 | awk '{print $3}'` #cp ../raw/$master.PRM . #ln -s ../raw/$master.LED . sed "s/.*wavelength.*/radar_wavelength = $wh1/g" $master.PRM > tmp mv tmp $master.PRM #cp ../raw/$slave.PRM . #ln -s ../raw/$slave.LED . sed "s/.*wavelength.*/radar_wavelength = $wh2/g" $slave.PRM > tmp mv tmp $slave.PRM cd ../SLC endif endif if ($region_cut != "") then echo "Cutting SLC image to $region_cut" cut_slc $master.PRM junk1 $region_cut cut_slc $slave.PRM junk2 $region_cut mv junk1.PRM $master.PRM mv junk2.PRM $slave.PRM mv junk1.SLC $master.SLC mv junk2.SLC $slave.SLC if ($iono == 1) then cd ../SLC_L cut_slc $master.PRM junk1 $region_cut cut_slc $slave.PRM junk2 $region_cut mv junk1.PRM $master.PRM mv junk2.PRM $slave.PRM mv junk1.SLC $master.SLC mv junk2.SLC $slave.SLC cd ../SLC_H cut_slc $master.PRM junk1 $region_cut cut_slc $slave.PRM junk2 $region_cut mv junk1.PRM $master.PRM mv junk2.PRM $slave.PRM mv junk1.SLC $master.SLC mv junk2.SLC $slave.SLC endif endif cd .. echo "" echo "ALIGN.CSH - END" echo "" endif ################################## # 3 - start from make topo_ra # ################################## # if ($stage <= 3 && $skip_3 == 0) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC set rng_samp_rate = `grep rng_samp_rate $master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng = `gmt grdinfo ../topo/topo_ra.grd | grep x_inc | awk '{print $7}'` slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## # if ($stage <= 4 && $skip_4 == 0) then # # clean up # cleanup.csh intf # # select the master # if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$rep.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../SLC/$ref.LED . ln -s ../../SLC/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec endif else echo "NO TOPOGRAPHIC PHASE REMOVAL PORFORMED" intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec endif cd ../.. if ($iono == 1) then if (-e iono_phase ) rm -r iono_phase mkdir -p iono_phase cd iono_phase mkdir -p intf_o intf_h intf_l iono_correction set new_incx = `echo $range_dec $iono_dsamp | awk '{print $1*$2}'` set new_incy = `echo $azimuth_dec $iono_dsamp | awk '{print $1*$2}'` echo "" cd intf_h ln -s ../../SLC_H/*.SLC . ln -s ../../SLC_H/*.LED . cp ../../SLC_H/*.PRM . cp ../../SLC/params* . intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM 500 $dec $new_incx $new_incy cp phase.grd phasefilt.grd if ($iono_skip_est == 0) then if ($mask_water == 1 || $switch_land == 1) then set rcut = `gmt grdinfo phase.grd -I- | cut -c3-20` cd ../../topo landmask.csh $rcut cd ../iono_phase/intf_h ln -s ../../topo/landmask_ra.grd . endif snaphu_interp.csh 0.05 0 endif cd .. echo "" cd intf_l ln -s ../../SLC_L/*.SLC . ln -s ../../SLC_L/*.LED . cp ../../SLC_L/*.PRM . cp ../../SLC/params* . intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM 500 $dec $new_incx $new_incy cp phase.grd phasefilt.grd if ($iono_skip_est == 0) then if ($mask_water == 1 || $switch_land == 1) ln -s ../../topo/landmask_ra.grd . snaphu_interp.csh 0.05 0 endif cd .. echo "" cd intf_o ln -s ../../SLC/*.SLC . ln -s ../../SLC/*.LED . cp ../../SLC/*.PRM . intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM 500 $dec $new_incx $new_incy cp phase.grd phasefilt.grd if ($iono_skip_est == 0) then if ($mask_water == 1 || $switch_land == 1) ln -s ../../topo/landmask_ra.grd . snaphu_interp.csh 0.05 0 endif cd ../iono_correction echo "" if ($iono_skip_est == 0) then estimate_ionospheric_phase.csh ../intf_h ../intf_l ../intf_o ../../intf/$ref_id"_"$rep_id $iono_filt_rng $iono_filt_azi cd ../../intf/$ref_id"_"$rep_id mv phasefilt.grd phasefilt_non_corrected.grd gmt grdsample ../../iono_phase/iono_correction/ph_iono_orig.grd -Rphasefilt_non_corrected.grd -Gph_iono.grd gmt grdmath phasefilt_non_corrected.grd ph_iono.grd SUB PI ADD 2 PI MUL MOD PI SUB = phasefilt.grd gmt grdimage phasefilt.grd -JX6.5i -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phasefilt.ps gmt psscale -Rphasefilt.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -Bxa1.57+l"Phase" -By+lrad -O >> phasefilt.ps gmt psconvert -Tf -P -Z phasefilt.ps #rm phasefilt.ps endif cd ../../ endif echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ # if ($stage <= 5 && $skip_5 == 0) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../raw/$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id # # landmask # if ($mask_water == 1 || $switch_land == 1) then if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif # echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" # if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif # echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### # if ($stage <= 6 && $skip_6 == 0) then if ($threshold_geocode != 0 ) then cd intf set ref_id = `grep SC_clock_start ../raw/$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" if (-f raln.grd) rm raln.grd if (-f ralt.grd) rm ralt.grd if (-f trans.dat) rm trans.dat if ($topo_phase == 1) then ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. else echo "" echo "SKIP GEOCODE" echo "" endif endif # # end GMTSAR_V5.7/gmtsar/csh/config.tsx.txt000644 015705 000000 00000007217 13505462013 020444 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_TSX.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 100m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 100 decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 1 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/0/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .14 GMTSAR_V5.7/gmtsar/csh/pop_config.csh000755 015705 000000 00000013740 13505462013 020444 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # create a configure file for p2p_processing.csh # syntax: pop_config.csh SAT # SAT can be ERS, ENVI, ALOS, ALOS_SLC, ALOS2, ALOS2_SCAN # S1_STRIP, S1_TOPS,, CSK_RAW, CSK_SLC, TSX, RS2 if ($#argv != 1) then echo "" echo "Usage: pop_config.csh SAT" echo "" echo " SAT can be ERS, ENVI, ALOS, ALOS_SLC, ALOS2, ALOS2_SCAN" echo " S1_STRIP, S1_TOPS, CSK_RAW, CSK_SLC, TSX, RS2" echo "" exit 1 endif set SAT = `echo $1` echo "#" echo "# This is an example configuration file for p2p_processing.csh" echo "#" echo "# all the comments or explanations are marked by "\""#"\" echo "# The parameters in this configuration file is distinguished by their first word so " echo "# user should follow the naming of each parameter." echo "# the parameter name, "\""="\"" sign, parameter value should be separated by space "\"" "\"". " echo "# leave the parameter value blank if using default value. " echo "#" echo " " echo "#####################" echo "# processing stage #" echo "#####################" echo "# 1 - start from preprocess" echo "# 2 - start from align SLC images" echo "# 3 - start from make topo_ra " echo "# 4 - start from make and filter interferograms " echo "# 5 - start from unwrap phase" echo "# 6 - start from geocode " echo "proc_stage = 1" echo "skip_stage = " echo "" echo "##################################" echo "# parameters for preprocess #" echo "# - pre_proc.csh #" echo "##################################" echo "# num of patches" echo "num_patches = " echo "" echo "# earth radius " echo "earth_radius =" echo "" echo "# near_range" echo "near_range = " echo "" echo "# Doppler centroid " echo "fd1 = " echo "" if ($SAT == "ALOS_SLC") then echo "# SLC scale factor to convert float to int " echo "SLC_factor = 0.02" echo "" else if ($SAT == "ALOS2" || $SAT == "ALOS2_SCAN") then echo "# SLC scale factor to convert float to int" echo "SLC_factor = 2.0" echo "" endif endif echo "################################################" echo "# parameters for focus and align SLC images #" echo "# - align.csh #" echo "################################################" echo "# region to cut in radar coordinates (leave it blank if process the whole image)" echo "# example 300/5900/0/25000" echo "region_cut =" echo "" echo "#" echo "#####################################" echo "# parameters for make topo_ra #" echo "# - dem2topo_ra.csh #" echo "#####################################" echo "# subtract topo_ra from the phase" echo "# (1 -- yes; 0 -- no)" echo "topo_phase = 1" echo "# if above parameter = 1 then one should have put dem.grd in topo/" echo "" echo "# topo_ra shift (1 -- yes; 0 -- no)" if ($SAT == "ALOS_SLC" || $SAT == "ALOS" || $SAT == "ERS") then echo "shift_topo = 1" else echo "shift_topo = 0" endif echo "" echo "####################################################" echo "# parameters for make and filter interferograms #" echo "# - intf.csh #" echo "# - filter.csh #" echo "####################################################" echo "# switch the master and slave when doing intf. " echo "# put "\""1"\"" if assume master as repeat and slave as reference " echo "# put "\""0"\"" if assume master as reference and slave as repeat [Default]" echo "# phase = repeat phase - reference phase" echo "switch_master = 0" echo "" echo "# filters " echo "# look at the filter/ folder to choose other filters" echo "# for tops processing, to force the decimation factor" echo "# recommended range decimation to be 8, azimuth decimation to be 2" if ($SAT == "ALOS2_SCAN") then echo "filter_wavelength = 400" else if ($SAT == "RS2" || $SAT == "TSX") then echo "filter_wavelength = 100" else echo "filter_wavelength = 200" endif echo "" echo "# decimation of images " echo "# decimation control the size of the amplitude and phase images. It is either 1 or 2." echo "# Set the decimation to be 1 if you want higher resolution images." echo "# Set the decimation to be 2 if you want images with smaller file size." echo "# " if ($SAT == "RS2" || $SAT == "TSX") then echo "dec_factor = 1 " else if ($SAT == "ALOS2_SCAN") then echo "dec_factor = 4 " else echo "dec_factor = 2 " endif if ($SAT == "S1_TOPS") then echo "range_dec = 8" echo "azimuth_dec = 2" endif echo "#" echo "# make ionospheric phase corrections using split spectrum method" echo "correct_iono = 0" echo "iono_filt_rng = 1.0" echo "iono_filt_azi = 1.0" echo "iono_dsamp = 1" echo "# " echo "# set the following parameter to skip ionospheric phase estimation" echo "iono_skip_est = 1 " echo "#" echo "#####################################" echo "# parameters for unwrap phase #" echo "# - snaphu.csh #" echo "#####################################" echo "# correlation threshold for snaphu.csh (0~1)" echo "# set it to be 0 to skip unwrapping." echo "threshold_snaphu = 0" echo "" echo "# interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, " echo "# others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details" echo "# this could be very slow in case a large blank area exist" echo "near_interp = 1" echo "" echo "# mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no)" echo "mask_water = 1" echo "" echo "#" echo "# Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps." echo "# defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation" echo "# defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band" echo "#" echo "defomax = 0" echo "" echo "#####################################" echo "# parameters for geocode #" echo "# - geocode.csh #" echo "#####################################" echo "# correlation threshold for geocode.csh (0< threshold <=1), set 0 to skip" echo "threshold_geocode = .10" echo "" GMTSAR_V5.7/gmtsar/csh/grd2geotiff.csh000644 015705 000000 00000001667 13505462013 020525 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # D. Sandwell FEB 18 2015 # unset noclobber # # script to convert a grd file to a geotiff file # if ($#argv < 2 || $#argv > 3) then echo " " echo "Usage: grd2geotiff.csh grd_file_stem cptfile [-R///] " echo " " echo "Example: grd2geotiff.csh phase phase.cpt " echo " " exit 1 endif # # if ( -f ~/.quiet ) then set V = "" set VS = "" else set V = "-V" set VS = "-S -V" endif set DX = `gmt grdinfo $1.grd -C | cut -f8` set DPI = `gmt math -Q $DX INV RINT = ` echo $DPI gmt set COLOR_MODEL = hsv gmt set PAPER_MEDIA = tabloid # gmt grdgradient $1.grd -Ggrad.grd $V -Nt0.7 -A60 if ($#argv == 3) then gmt grdimage $1.grd -Igrad.grd -C$2 $3 -Jx1id -P -Y2i -X2i -Q $V > $1.ps else if ($#argv == 2) then gmt grdimage $1.grd -Igrad.grd -C$2 -Jx1id -P -Y2i -X2i -Q $V > $1.ps endif # # now make the geotiff # echo "Make $1.tiff" gmt psconvert $1.ps -W+g+t"$1" -E$DPI -P $VS rm -f $1.ps grad.grd # GMTSAR_V5.7/gmtsar/csh/align_batch_ALOS2_SCAN.csh000755 015705 000000 00000005126 13505462013 022257 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Align a stack of SLC images # can be used to do stacking and time-series analysis # Xiaopeng Tong, Aug 27 2010 # if ($#argv != 1) then echo "" echo "Usage: align_batch_ALOS2_SCAN.csh align.in " echo " align a set of images listed in align.in file" echo "" echo " format of align.in:" echo " master_name:slave_name:supermaster_name" echo "" echo " example of align.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP089300650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP236920650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " " echo "" exit 1 endif # # loop over 5 subswath # foreach subswath (1 2 3 4 5) mkdir -p F$subswath cd F$subswath ln -s ../$1 . # # make working directories # mkdir -p SLC/ # # clean up # cleanup.csh SLC echo "" echo "START ALIGN A STACK OF IMAGES" echo "" # # loop start focus and align SLC images # foreach line (`awk '{print $0}' $1`) set master = `echo $line | awk -F: '{print $1}'` set slave = `echo $line | awk -F: '{print $2}'` set supermaster = `echo $line | awk -F: '{print $3}'` set masterstem = ` echo $master | awk '{ print substr($1,8,length($1)-7)}'` set slavestem = ` echo $slave | awk '{ print substr($1,8,length($1)-7)}'` set supermasterstem = ` echo $supermaster | awk '{ print substr($1,8,length($1)-7)}'` if ($master != "" && $slave != "" && $supermaster != "") then echo " " echo "subswath: $subswath" echo "Align $slave to $master via $supermaster - START" cd SLC cp ../../raw/IMG-HH-$masterstem-F$subswath.PRM . cp ../../raw/IMG-HH-$slavestem-F$subswath.PRM . cp ../../raw/IMG-HH-$supermasterstem-F$subswath.PRM . # # need to add the SLC_file name to the master PRM's # update_PRM IMG-HH-$masterstem-F$subswath.PRM SLC_file IMG-HH-$masterstem-F$subswath.SLC update_PRM IMG-HH-$supermasterstem-F$subswath.PRM SLC_file IMG-HH-$supermasterstem-F$subswath.SLC ln -s ../../raw/IMG-HH-$masterstem-F$subswath.SLC . ln -s ../../raw/IMG-HH-$slavestem-F$subswath.SLC . ln -s ../../raw/LED-$masterstem . ln -s ../../raw/LED-$slavestem . ln -s ../../raw/LED-$supermasterstem . align_ALOS2_SCAN.csh $master-F$subswath $slave-F$subswath $supermaster-F$subswath cd .. echo "Align $slave to $master via $supermaster - END" else echo "" echo "Wrong format in align.in" exit 1 endif end cd .. end echo "" echo "END ALIGN A STACK OF IMAGES" echo "" GMTSAR_V5.7/gmtsar/csh/filter.csh000755 015705 000000 00000016501 13505462013 017604 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong and David Sandwell # FEB 4 2010 # Matt Wei May 4 2010, ENVISAT # DTS - May 26, 2010, added phase gadient # EF, DTS, XT - Jan 10 2014, TSX # # Convolve the real.grd and imag.grd with gaussian filters. # Form amplitude, phase, phase gradient, and correlation images. # # alias rm 'rm -f' gmt set IO_NC4_CHUNK_SIZE classic # # # set grdimage options # set scale = "-JX6.5i" set thresh = "5.e-21" gmt set COLOR_MODEL = hsv gmt set PROJ_LENGTH_UNIT = inch if ($#argv != 4 && $#argv != 6) then errormessage: echo "" echo "Usage: filter.csh master.PRM slave.PRM filter decimation [rng_dec azi_dec]" echo "" echo " Apply gaussian filter to amplitude and phase images." echo " " echo " filter - wavelength of the filter in meters (0.5 gain)" echo " decimation - (1) better resolution, (2) smaller files" echo " " echo "Example: filter.csh IMG-HH-ALPSRP055750660-H1.0__A.PRM IMG-HH-ALPSRP049040660-H1.0__A.PRM 300 2" echo "" exit 1 endif echo "filter.csh" # # define filter and decimation variables # set sharedir = `gmtsar_sharedir.csh` set filter3 = $sharedir/filters/fill.3x3 set filter4 = $sharedir/filters/xdir set filter5 = $sharedir/filters/ydir set dec = $4 set az_lks = 4 set PRF = `grep PRF *.PRM | awk 'NR == 1 {printf("%d", $3)}'` if( $PRF < 1000 ) then set az_lks = 1 endif # # look for range sampling rate # set rng_samp_rate = `grep rng_samp_rate $1 | awk 'NR == 1 {printf("%d", $3)}'` # # set the range spacing in units of image range pixel size # if ($?rng_samp_rate) then if ($rng_samp_rate > 110000000) then set dec_rng = 4 set filter1 = $sharedir/filters/gauss15x5 else if ($rng_samp_rate < 110000000 && $rng_samp_rate > 20000000) then set dec_rng = 2 set filter1 = $sharedir/filters/gauss15x5 # # special for TOPS mode # if($az_lks == 1) then set filter1 = $sharedir/filters/gauss5x5 endif else set dec_rng = 1 set filter1 = $sharedir/filters/gauss15x3 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif # # set az_lks and dec_rng to 1 for odd decimation # if($#argv == 6) then set jud = `echo $6 | awk '{if($1%2 == 0) print 1;else print 0}'` if ($jud == 0) then set az_lks = 1 endif set jud = `echo $5 | awk '{if($1%2 == 0) print 1;else print 0}'` if ($jud == 0) then set dec_rng = 1 endif endif # # make the custom filter2 and set the decimation # make_gaussian_filter $1 $dec_rng $az_lks $3 > ijdec set filter2 = gauss_$3 set idec = `cat ijdec | awk -v dc="$dec" '{ print dc*$1 }'` set jdec = `cat ijdec | awk -v dc="$dec" '{ print dc*$2 }'` if($#argv == 6) then set idec = `echo $6 $az_lks | awk '{printf("%d",$1/$2)}'` set jdec = `echo $5 $dec_rng | awk '{printf("%d",$1/$2)}'` echo "setting range_dec = $5, azimuth_dec = $6" endif echo "$filter2 $idec $jdec ($az_lks $dec_rng)" # # filter the two amplitude images # echo "making amplitudes..." conv $az_lks $dec_rng $filter1 $1 amp1_tmp.grd=bf conv $idec $jdec $filter2 amp1_tmp.grd=bf amp1.grd rm amp1_tmp.grd conv $az_lks $dec_rng $filter1 $2 amp2_tmp.grd=bf conv $idec $jdec $filter2 amp2_tmp.grd=bf amp2.grd rm amp2_tmp.grd # # filter the real and imaginary parts of the interferogram # also compute gradients # echo "filtering interferogram..." conv $az_lks $dec_rng $filter1 real.grd=bf real_tmp.grd=bf conv $idec $jdec $filter2 real_tmp.grd=bf realfilt.grd # conv $dec $dec $filter4 real_tmp.grd xreal.grd # conv $dec $dec $filter5 real_tmp.grd yreal.grd rm real_tmp.grd rm real.grd conv $az_lks $dec_rng $filter1 imag.grd=bf imag_tmp.grd=bf conv $idec $jdec $filter2 imag_tmp.grd=bf imagfilt.grd # conv $dec $dec $filter4 imag_tmp.grd ximag.grd # conv $dec $dec $filter5 imag_tmp.grd yimag.grd rm imag_tmp.grd rm imag.grd # # form amplitude image # echo "making amplitude..." gmt grdmath realfilt.grd imagfilt.grd HYPOT = amp.grd gmt grdmath amp.grd 0.5 POW FLIPUD = display_amp.grd set AMAX = `gmt grdinfo -L2 display_amp.grd | grep stdev | awk '{ print 3*$5 }'` gmt grd2cpt display_amp.grd -Z -D -L0/$AMAX -Cgray > display_amp.cpt echo "N 255 255 254" >> display_amp.cpt gmt grdimage display_amp.grd -Cdisplay_amp.cpt $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > display_amp.ps gmt psscale -Rdisplay_amp.grd -J -DJTC+w5i/0.2i+h+ef -Cdisplay_amp.cpt -Bx0+l"Amplitude (histogram equalized)" -O >> display_amp.ps gmt psconvert -Tf -P -Z display_amp.ps #echo "Amplitude map: display_amp.pdf" # # form the correlation # echo "making correlation..." gmt grdmath amp1.grd amp2.grd MUL = tmp.grd gmt grdmath tmp.grd $thresh GE 0 NAN = mask.grd gmt grdmath amp.grd tmp.grd SQRT DIV mask.grd MUL FLIPUD = tmp2.grd=bf conv 1 1 $filter3 tmp2.grd=bf corr.grd gmt makecpt -T0./.8/0.1 -Cgray -Z -N > corr.cpt echo "N 255 255 254" >> corr.cpt gmt grdimage corr.grd $scale -Ccorr.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > corr.ps gmt psscale -Rcorr.grd -J -DJTC+w5i/0.2i+h+ef -Ccorr.cpt -Baf+lCorrelation -O >> corr.ps gmt psconvert -Tf -P -Z corr.ps #echo "Correlation map: corr.pdf" # # form the phase # echo "making phase..." gmt grdmath imagfilt.grd realfilt.grd ATAN2 mask.grd MUL FLIPUD = phase.grd gmt makecpt -Crainbow -T-3.15/3.15/0.1 -Z -N > phase.cpt gmt grdimage phase.grd $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phase.ps gmt psscale -Rphase.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -B1.57+l"Phase" -By+lrad -O >> phase.ps gmt psconvert -Tf -P -Z phase.ps #echo "Phase map: phase.pdf" # # compute the solid earth tide # uncomment lines with ## # ##ln -s ../../topo/dem.grd . ##tide_correction.csh $1 $2 dem.grd ##mv tide.grd tmp.grd ##gmt grdsample tmp.grd -Rimagfilt.grd -Gtide.grd # # make the Werner/Goldstein filtered phase # echo "filtering phase..." phasefilt -imag imagfilt.grd -real realfilt.grd -amp1 amp1.grd -amp2 amp2.grd -psize 32 gmt grdedit filtphase.grd `gmt grdinfo mask.grd -I- --FORMAT_FLOAT_OUT=%.12lg` gmt grdmath filtphase.grd mask.grd MUL FLIPUD = phasefilt.grd ##cp phasefilt.grd phasefilt_old.grd ##gmt grdmath phasefilt.grd tide.grd SUB PI ADD 2 PI MUL MOD PI SUB = phasefilt.grd rm filtphase.grd gmt grdimage phasefilt.grd $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phasefilt.ps gmt psscale -Rphasefilt.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -Bxa1.57+l"Phase" -By+lrad -O >> phasefilt.ps gmt psconvert -Tf -P -Z phasefilt.ps #echo "Filtered phase map: phasefilt.pdf" # # form the phase gradients # # echo "making phase gradient..." # gmt grdmath amp.grd 2. POW = amp_pow.grd # gmt grdmath realfilt.grd ximag.grd MUL imagfilt.grd xreal.grd MUL SUB amp_pow.grd DIV mask.grd MUL FLIPUD = xphase.grd # gmt grdmath realfilt.grd yimag.grd MUL imagfilt.grd yreal.grd MUL SUB amp_pow.grd DIV mask.grd MUL FLIPUD = yphase.grd # gmt makecpt -Cgray -T-0.7/0.7/0.1 -Z -N > phase_grad.cpt # echo "N 255 255 254" >> phase_grad.cpt # gmt grdimage xphase.grd $scale -Cphase_grad.cpt -X.2i -Y.5i -P > xphase.ps # gmt grdimage yphase.grd $scale -Cphase_grad.cpt -X.2i -Y.5i -P > yphase.ps # mv mask.grd tmp.grd gmt grdmath tmp.grd FLIPUD = mask.grd # # delete files rm tmp.grd tmp2.grd #rm ximag.grd yimag.grd xreal.grd yreal.grd GMTSAR_V5.7/gmtsar/csh/pre_proc_init.csh000755 015705 000000 00000014627 13505462013 021162 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Mar 2 2010 # modified by D. Sandwell MAR 11 2010 # # preprocess all the data based on data.in table file and generate: # 1. raw files # 2. PRM files # 3. time-baseline plot for user to create stacking pairs # format in data.in table file: # line 1: master_name # line 2 and below: slave_name alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv != 2) then echo "" echo "Usage: pre_proc_init.csh SAT data.in" echo "" echo " preprocess a set of images using default Dopper centroid, rear_range and radius, number of patches" echo " a baseline-time plot will be generated" echo " after running this command " echo " the user should choose an appropriate master image " echo " the user should also decide a common Dopper centroid, rear_range and radius, number of patches to run batch processing" echo " the data with completely different Doppler centroid or baselines can be omitted from further processing" echo "" echo " SAT can be ALOS ERS or ENVI(ENVISAT)" echo "" echo " format of data.in is:" echo " line 1: master_name" echo " line 2 and below: slave_name" echo "" echo " example of data.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP089300650-H1.0__A" echo " IMG-HH-ALPSRP236920650-H1.0__A" echo "" echo " example of data.in for ERS is:" echo " e1_05783" echo " e1_07787" echo " e1_10292" echo "" echo " example of data.in for ENVISAT is:" echo " ENV1_2_127_2925_07195" echo " ENV1_2_127_2925_12706" echo " ENV1_2_127_2925_13207" echo "" echo "Example: pre_proc_init.csh ENVI data.in" echo "" exit 1 endif set SAT = $1 if ($SAT != ALOS && $SAT != ENVI && $SAT != ERS) then echo "" echo " SAT can be ALOS ERS or ENVI(ENVISAT)" echo "" exit 1 endif # # open and read data.in table # echo "" echo "running pre_proc_init.csh" echo "" echo "preprocess master image" set line1 = `awk 'NR==1 {print $0}' $2` if ($SAT == ERS || $SAT == ENVI) then set master = $line1[1] else if ($SAT == ALOS) then set master = `echo $line1[1] | awk '{ print substr($1,8,length($1)-7)}'` endif # # unpack the master if necessary # if ($SAT == ERS || $SAT == ENVI) then if(! -f $master.raw || ! -f $master.LED) then $1_pre_process $master 0 0 0 endif echo "before baseline" baseline_table.csh $master.PRM $master.PRM >! baseline_table.dat baseline_table.csh $master.PRM $master.PRM GMT >! table.gmt echo "after baseline" else if ($SAT == ALOS) then if(! -f IMG-HH-$master.raw || ! -f IMG-HH-$master.PRM ) then $1_pre_process IMG-HH-$master LED-$master endif set NEAR = `grep near_range IMG-HH-$master.PRM | awk '{print $3}'` set RAD = `grep earth_radius IMG-HH-$master.PRM | awk '{print $3}'` set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set FD1 = `grep fd1 IMG-HH-$master.PRM | awk '{print $3}'` baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM >! baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM GMT >! table.gmt endif # # loop and unpack the slave image using the same earth radius and near range as the master image # foreach line2 (`awk 'NR>1 {print $0}' $2`) echo "pre_proc_batch.csh" echo "preprocess slave images" if ($SAT == ERS || $SAT == ENVI) then set slave = $line2 if(! -f $slave.raw || ! -f $slave.LED) then $1_pre_process $slave 0 0 0 endif baseline_table.csh $master.PRM $slave.PRM >> baseline_table.dat baseline_table.csh $master.PRM $slave.PRM GMT >> table.gmt else if ($SAT == ALOS) then set slave = ` echo $line2 | awk '{ print substr($1,8,length($1)-7)}'` if(! -f IMG-HH-$slave.raw || ! -f IMG-HH-$slave.PRM ) then $1_pre_process IMG-HH-$slave LED-$slave endif # # check the range sampling rate of the slave images and do conversion if necessary # set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM GMT >> table.gmt else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs IMG-HH-$slave.PRM IMG-HH-$slave"_"FBS.PRM # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM GMT >> table.gmt echo "Overwriting the old slave image" mv IMG-HH-$slave"_"FBS.PRM IMG-HH-$slave.PRM update_PRM IMG-HH-$slave.PRM input_file IMG-HH-$slave.raw mv IMG-HH-$slave"_"FBS.raw IMG-HH-$slave.raw else if ($t == 0.5) then echo "Use the FBS mode image as master" exit 1 else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif # end of the if ($SAT == ALOS) endif # end of the loop over slave images end # # make baseline plots # if ($SAT == ERS || $SAT == ENVI) then awk '{print 1992+$1/365.25,$2,$7}' < table.gmt > text # awk '{print 1992+$1/365.25,$2,7,$4,$5,$6,$7}' < table.gmt > text # awk '{print 1992+$1/365.25,$2,7,-45,$5,$6,$7}' < table.gmt > text else if ($SAT == ALOS) then awk '{print 2006.5+($1-181)/365.25,$2,$7}' < table.gmt > text # awk '{print 2006.5+($1-181)/365.25,$2,9,$4,$5,$6,$7}' < table.gmt > text endif set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-500, $4+500}'` # set region = `minmax text -C | awk '{print $1-0.5, $2+0.5, -1200, 1200}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > stacktable_all.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba1:"year":/a200g00f100:"baseline (m)":WSen -O >> stacktable_all.ps # # clean up the mess # rm text text2 GMTSAR_V5.7/gmtsar/csh/p2p_ALOS2_SCAN_Frame.csh000755 015705 000000 00000017323 13505462013 021641 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # Xiaohua XU, Jan 10, 2019 # # process ALOS2 ScanSAR data # Automatically process a single frame of interferogram. # alias rm 'rm -f' unset noclobber # if ($#argv != 4) then echo "" echo "Usage: p2p_ALOS2_Scan_Frame.csh Master_stem Slave_stem config.alos2.txt parallel" echo "" echo "Example: p2p_ALOS2_Scan_Frame.csh IMG-HH-ALOS2234653650-180927-WBDR1.1__D IMG-HH-ALOS2236723650-181011-WBDR1.1__D config.alos2.txt 1" echo "" echo " Place the IMG-files and LED-files in the raw folder, DEM in the topo folder." echo " During processing, F1 - F5 and merge folder will be generated." echo " All SLCs will be upsampled to PRF 3350 and then processed." echo " Final results will be placed in the merge folder, with phase" echo " corr [unwrapped phase]." echo " parallel = 0-sequential 1-parallel " echo "" exit 1 endif # start # # set processing mode seq # set seq = $4 echo "Processing 0-sequential 1-parallel [$seq] ..." set master = `echo $1 | awk '{print substr($1,8,length($1)-7)}'` set slave = `echo $2 | awk '{print substr($1,8,length($1)-7)}'` #if ( 6 == 9 ) then # # determine file names # set pth = `pwd` foreach swath (1 2 3 4 5) echo "Linking files for Subswath $swath ..." mkdir F$swath cd F$swath mkdir raw topo cd topo ln -s ../../topo/dem.grd . cd ../raw ln -s ../../raw/$1"-F"$swath . ln -s ../../raw/$2"-F"$swath . ln -s ../../raw/LED-$master ./LED-$master"-F"$swath ln -s ../../raw/LED-$slave ./LED-$slave"-F"$swath cd .. sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../$3 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g"> $3 cd .. end # # process data # if ($seq == 0) then foreach swath (1 2 3 4 5) cd F$swath sed "s/.*skip_stage.*/skip_stage = 2,3,4,5,6/g" $3 > tmp_config p2p_processing.csh ALOS2_SCAN $1"-F"$swath $2"-F"$swath tmp_config cd raw samp_slc.csh $1"-F"$swath 3350 0 samp_slc.csh $2"-F"$swath 3350 0 cd .. sed "s/.*skip_stage.*/skip_stage = 1/g" $3 > tmp_config p2p_processing.csh ALOS2_SCAN $1"-F"$swath $2"-F"$swath tmp_config rm tmp_config cd .. end else if ($seq == 1) then foreach swath (1 2 3 4 5) cd F$swath sed "s/.*skip_stage.*/skip_stage = 2,3,4,5,6/g" $3 > tmp_config p2p_processing.csh ALOS2_SCAN $1"-F"$swath $2"-F"$swath tmp_config >&log& cd .. end wait foreach swath (1 2 3 4 5) cd F$swath/raw samp_slc.csh $1"-F"$swath 3350 0 samp_slc.csh $2"-F"$swath 3350 0 cd ../.. end wait foreach swath (1 2 3 4 5) cd F$swath sed "s/.*skip_stage.*/skip_stage = 1/g" $3 > tmp_config p2p_processing.csh ALOS2_SCAN $1"-F"$swath $2"-F"$swath tmp_config >&log& cd .. end wait else echo "Invalid parallel mode" exit 1 endif #endif # # merge_unwrap_geocode # mkdir merge cd merge ln -s ../topo/dem.grd . ln -s ../F1/intf/*/gauss* . set pth1 = `ls ../F1/intf/*/*PRM | awk NR==1'{print $1}' | awk -F"/" '{for (i=1;i phaselist echo $pth2$prm2m":"$pth2"phasefilt.grd" >> phaselist echo $pth3$prm3m":"$pth3"phasefilt.grd" >> phaselist echo $pth4$prm4m":"$pth4"phasefilt.grd" >> phaselist echo $pth5$prm5m":"$pth5"phasefilt.grd" >> phaselist head -3 phaselist > first.txt merge_swath first.txt first.grd first echo "first.PRM:first.grd" > second.txt tail -2 phaselist >> second.txt merge_swath second.txt second.grd second mv second.PRM $prm1m mv second.grd phasefilt.grd rm first* second* echo $pth1$prm1m":"$pth1"corr.grd" > corrlist echo $pth2$prm2m":"$pth2"corr.grd" >> corrlist echo $pth3$prm3m":"$pth3"corr.grd" >> corrlist echo $pth4$prm4m":"$pth4"corr.grd" >> corrlist echo $pth5$prm5m":"$pth5"corr.grd" >> corrlist head -3 corrlist > first.txt merge_swath first.txt first.grd first echo "first.PRM:first.grd" > second.txt tail -2 corrlist >> second.txt merge_swath second.txt second.grd second mv second.grd corr.grd rm first* second* echo $pth1$prm1m":"$pth1"mask.grd" > masklist echo $pth2$prm2m":"$pth2"mask.grd" >> masklist echo $pth3$prm3m":"$pth3"mask.grd" >> masklist echo $pth4$prm4m":"$pth4"mask.grd" >> masklist echo $pth5$prm5m":"$pth5"mask.grd" >> masklist head -3 masklist > first.txt merge_swath first.txt first.grd first echo "first.PRM:first.grd" > second.txt tail -2 masklist >> second.txt merge_swath second.txt second.grd second mv second.grd mask.grd rm first* second* if (! -f trans.dat) then if (! -f dem.grd) then echo "ERROR: missing dem.grd ... (link from the topo folder)" exit 1 endif set led = `grep led_file $prm1m | awk '{print $3}'` cp $pth1$led . gmt grd2xyz --FORMAT_FLOAT_OUT=%lf dem.grd -s | SAT_llt2rat $prm1m 1 -bod > trans.dat endif # Read in parameters set threshold_snaphu = `grep threshold_snaphu $2 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $2 | awk '{print $3}'` set region_cut = `grep region_cut $2 | awk '{print $3}'` set mask_water = `grep mask_water $2 | awk '{print $3}'` set defomax = `grep defomax $2 | awk '{print $3}'` set near_interp = `grep near_interp $2 | awk '{print $3}'` # Unwrapping if ($region_cut == "") then set region_cut = `gmt grdinfo phasefilt.grd -I- | cut -c3-20` endif if ($threshold_snaphu != 0 ) then if ($mask_water == 1) then if (! -f landmask_ra.grd) then landmask.csh $region_cut endif endif echo "" echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" else echo "" echo "SKIP UNWRAP PHASE" endif if ($threshold_geocode != 0) then echo "" echo "GEOCODE-START" proj_ra2ll.csh trans.dat phasefilt.grd phasefilt_ll.grd proj_ra2ll.csh trans.dat corr.grd corr_ll.grd gmt makecpt -Crainbow -T-3.15/3.15/0.05 -Z > phase.cpt set BT = `gmt grdinfo -C corr.grd | awk '{print $7}'` gmt makecpt -Cgray -T0/$BT/0.05 -Z > corr.cpt grd2kml.csh phasefilt_ll phase.cpt grd2kml.csh corr_ll corr.cpt if (-f unwrap.grd) then gmt grdmath unwrap.grd mask.grd MUL = unwrap_mask.grd proj_ra2ll.csh trans.dat unwrap.grd unwrap_ll.grd proj_ra2ll.csh trans.dat unwrap_mask.grd unwrap_mask_ll.grd set BT = `gmt grdinfo -C unwrap.grd | awk '{print $7}'` set BL = `gmt grdinfo -C unwrap.grd | awk '{print $6}'` gmt makecpt -T$BL/$BT/0.5 -Z > unwrap.cpt grd2kml.csh unwrap_mask_ll unwrap.cpt grd2kml.csh unwrap_ll unwrap.cpt endif echo "GEOCODE END" endif GMTSAR_V5.7/gmtsar/csh/proj_ra2ll.csh000755 015705 000000 00000004316 13505462013 020366 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # D. Sandwell 1/12/07 # alias rm 'rm -f' unset noclobber if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # # # project a grd file from range/azimuth coordinates into lon/lat coordinates # this version only works with GMT V4.0 and higher # # Input: # trans.dat - file generated by llt_grid2rat (r a topo lon lat) # phase_ra.grd - a GRD file of phase or anything # # Output: # phase_ll.grd - a GRD file of phase in longitude/latitude coordinates # # check for number of arguments # if ($#argv < 3) then echo " " echo "Usage: proj_ra2ll.csh trans.dat phase.grd phase_ll.grd" echo " trans.dat - file generated by llt_grid2rat (r a topo lon lat)" echo " phase_ra.grd - a GRD file of phase or anything" echo " phase_ll.grd - output file in lon/lat-coordinates" echo " " exit 1 endif echo "proj_ra2ll.csh" # # extract the phase in the r a positions # gmt grd2xyz $2 -s -bo3f > rap # # make grids of longitude and latitude versus range and azimuth unless they already exist # if (! -f raln.grd || ! -f ralt.grd ) then gmt gmtconvert $1 -o0,1,3 -bi5d -bo3f > raln gmt gmtconvert $1 -o0,1,4 -bi5d -bo3f > ralt # gmt surface raln `gmt gmtinfo rap -I16/32 -bi3f` -bi3f -I16/32 -T.50 -Graln.grd $V gmt surface ralt `gmt gmtinfo rap -I16/32 -bi3f` -bi3f -I16/32 -T.50 -Gralt.grd $V endif # gmt grdtrack rap -nl -Graln.grd -bi3f -bo4f > rapln gmt grdtrack rapln -nl -Gralt.grd -bi4f -bo5f > raplnlt # # get the lon, lat, phase columns and grid # gmt gmtconvert raplnlt -bi5f -bo3f -o3,4,2 > llp # # use higher resolution for data with higher range resolution and PRF # set filt = `ls gauss_*` if ( $filt != "" ) then set pix_m = `ls gauss_* | awk -F_ '{print $2/4}'` # Use 1/4 the filter width echo "Sampling in geocoordinates with $pix_m meter pixels ..." else set pix_m = 60 echo "Sampling in geocoordinates with deault ($pix_m meter) pixel size ..." endif set incs = `m2s.csh $pix_m llp` # Get fine and crude grid interval for lookup grids # set R = `gmt gmtinfo llp -I$incs[2] -bi3f ` gmt blockmedian llp $R -bi3f -bo3f -I$incs[1] -r -V > llpb gmt xyz2grd llpb $R -I$incs[1] -r -fg -G$3 -bi3f # # clean # rm rap* llp llpb raln ralt GMTSAR_V5.7/gmtsar/csh/intf.csh000755 015705 000000 00000002451 13505462013 017256 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong FEB 4 2010 # # Make the interferogram. # # Matt Wei May 4 2010, ENVISAT # # add in TSX, Jan 10 2014 alias rm 'rm -f' gmt set IO_NC4_CHUNK_SIZE classic # # if ($#argv < 2) then errormessage: echo "" echo "Usage: intf.csh ref.PRM rep.PRM [-topo topogrd] [-model modelgrd]" echo "" echo " The dimensions of topogrd and modelgrd should be compatible with SLC file." echo "" echo "Example: intf.csh IMG-HH-ALPSRP055750660-H1.0__A.PRM IMG-HH-ALPSRP049040660-H1.0__A.PRM -topo topo_ra.grd" echo "" exit 1 endif # # which satellite # set SC = `grep SC_identity $1 | awk '{print $3}'` if ($SC == 1 || $SC == 2 || $SC == 4 || $SC == 6 || $SC == 5) then cp $2 $2"0" cp $1 $1"0" SAT_baseline $1 $2 | tail -n9 >> $2 SAT_baseline $1 $1 | grep height >> $1 else if ($SC > 6) then cp $2 $2"0" cp $1 $1"0" SAT_baseline $1 $2 | tail -n9 >> $2 SAT_baseline $1 $1 | grep height >> $1 else echo "Incorrect satellite id in prm file" exit 0 endif # # form the interferogram optionally using topo_ra and modelphase # if ($#argv == 2 || $#argv == 4 || $#argv == 6) then echo "intf.csh" echo "running phasediff..." phasediff $argv else goto errormessage endif mv $1"0" $1 mv $2"0" $2 GMTSAR_V5.7/gmtsar/csh/snaphu.csh000755 015705 000000 00000010267 13505462013 017620 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # alias rm 'rm -f' unset noclobber # if ($#argv < 2) then errormessage: echo "" echo "snaphu.csh [GMTSAR] - Unwrap the phase" echo " " echo "Usage: snaphu.csh correlation_threshold maximum_discontinuity [///]" echo "" echo " correlation is reset to zero when < threshold" echo " maximum_discontinuity enables phase jumps for earthquake ruptures, etc." echo " set maximum_discontinuity = 0 for continuous phase such as interseismic " echo "" echo "Example: snaphu.csh .12 40 1000/3000/24000/27000" echo "" echo "Reference:" echo "Chen C. W. and H. A. Zebker, Network approaches to two-dimensional phase unwrapping: intractability and two new algorithms, Journal of the Optical Society of America A, vol. 17, pp. 401-414 (2000)." exit 1 endif # if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # prepare the files adding the correlation mask # if ($#argv == 3 ) then gmt grdcut mask.grd -R$3 -Gmask_patch.grd gmt grdcut corr.grd -R$3 -Gcorr_patch.grd gmt grdcut phasefilt.grd -R$3 -Gphase_patch.grd else ln -s mask.grd mask_patch.grd ln -s corr.grd corr_patch.grd ln -s phasefilt.grd phase_patch.grd endif # # create landmask # if (-e landmask_ra.grd) then if ($#argv == 3 ) then gmt grdsample landmask_ra.grd -R$3 `gmt grdinfo -I phase_patch.grd` -Glandmask_ra_patch.grd else gmt grdsample landmask_ra.grd `gmt grdinfo -I phase_patch.grd` -Glandmask_ra_patch.grd endif gmt grdmath phase_patch.grd landmask_ra_patch.grd MUL = phase_patch.grd $V endif # # user defined mask # if (-e mask_def.grd) then if ($#argv == 3 ) then gmt grdcut mask_def.grd -R$3 -Gmask_def_patch.grd else cp mask_def.grd mask_def_patch.grd endif gmt grdmath corr_patch.grd mask_def_patch.grd MUL = corr_patch.grd $V endif gmt grdmath corr_patch.grd $1 GE 0 NAN mask_patch.grd MUL = mask2_patch.grd gmt grdmath corr_patch.grd 0. XOR 1. MIN = corr_patch.grd gmt grdmath mask2_patch.grd corr_patch.grd MUL = corr_tmp.grd gmt grd2xyz phase_patch.grd -ZTLf -do0 > phase.in gmt grd2xyz corr_tmp.grd -ZTLf -do0 > corr.in # # run snaphu # set sharedir = `gmtsar_sharedir.csh` echo "unwrapping phase with snaphu - higher threshold for faster unwrapping " if ($2 == 0) then snaphu phase.in `gmt grdinfo -C phase_patch.grd | cut -f 10` -f $sharedir/snaphu/config/snaphu.conf.brief -c corr.in -o unwrap.out -v -s else sed "s/.*DEFOMAX_CYCLE.*/DEFOMAX_CYCLE $2/g" $sharedir/snaphu/config/snaphu.conf.brief > snaphu.conf.brief snaphu phase.in `gmt grdinfo -C phase_patch.grd | cut -f 10` -f snaphu.conf.brief -c corr.in -o unwrap.out -v -d endif # # convert to grd # gmt xyz2grd unwrap.out -ZTLf -r `gmt grdinfo -I- phase_patch.grd` `gmt grdinfo -I phase_patch.grd` -Gtmp.grd #gmt grdmath tmp.grd mask2_patch.grd MUL = tmp.grd gmt grdmath tmp.grd mask_patch.grd MUL = tmp.grd # # detrend the unwrapped if DEFOMAX = 0 for interseismic # #if ($2 == 0) then # gmt grdtrend tmp.grd -N3r -Dunwrap.grd #else mv tmp.grd unwrap.grd #endif # # landmask if (-e landmask_ra.grd) then gmt grdmath unwrap.grd landmask_ra_patch.grd MUL = tmp.grd $V mv tmp.grd unwrap.grd endif # # user defined mask # if (-e mask_def.grd) then gmt grdmath unwrap.grd mask_def_patch.grd MUL = tmp.grd $V mv tmp.grd unwrap.grd endif # # plot the unwrapped phase # gmt grdgradient unwrap.grd -Nt.9 -A0. -Gunwrap_grad.grd set tmp = `gmt grdinfo -C -L2 unwrap.grd` set limitU = `echo $tmp | awk '{printf("%5.1f", $12+$13*2)}'` set limitL = `echo $tmp | awk '{printf("%5.1f", $12-$13*2)}'` set std = `echo $tmp | awk '{printf("%5.1f", $13)}'` gmt makecpt -Cseis -I -Z -T"$limitL"/"$limitU"/1 -D > unwrap.cpt gmt grdimage unwrap.grd -Iunwrap_grad.grd -Cunwrap.cpt -JX6.5i -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > unwrap.ps gmt psscale -Runwrap.grd -J -DJTC+w5/0.2+h+e -Cunwrap.cpt -Bxaf+l"Unwrapped phase" -By+lrad -O >> unwrap.ps gmt psconvert -Tf -P -Z unwrap.ps echo "Unwrapped phase map: unwrap.pdf" # # clean up # rm -f tmp.grd corr_tmp.grd unwrap.out tmp2.grd unwrap_grad.grd rm -f phase.in corr.in # # cleanup more # rm -f mask_patch.grd mask3.grd mask3.out #rm -f wrap.grd rm -f corr_cut.grd corr_patch.grd # GMTSAR_V5.7/gmtsar/csh/fit_planar_trend.py000755 015705 000000 00000001143 13505462013 021501 0ustar00sandwellwheel000000 000000 #!/usr/bin/python import subprocess import os.path import numpy as np import sys def get_trend(x,y,z): G=np.column_stack((np.ones(np.shape(x)),x,y)) #p=(G'*G)\G'*z p=np.dot(np.dot(np.linalg.inv(np.dot(np.transpose(G),G)),np.transpose(G)),z) return p if __name__ == '__main__': # load data from the unwrapped subset unwrap=sys.argv[1] # eg. unwrap.dat data=np.loadtxt(unwrap) x=data[:,0] y=data[:,1] z=data[:,2] # find the trend trend_params=get_trend(x,y,z) print('%.15f %.15f %.15f') %(trend_params[0], trend_params[1],trend_params[2]) ## END ## GMTSAR_V5.7/gmtsar/csh/baseline_table.csh000755 015705 000000 00000006322 13505462013 021250 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # April 21, 1999 - David T. Sandwell # May 23, 2017 - Anders Hogrelius, updated to fully support Envisat formatted SLC data # # Script to calculate a table of parameters from master and # slave PRM files. # unset noclobber # # Modified by M.Wei to add ALOS function, 9/27/06 # if ($#argv < 2) then echo " " echo "Usage: baseline_table master.PRM slave.PRM [GMT] " echo " [GMT] creates table for pstext" echo " " echo " Output:" echo " sat_orb slave_time slave_days(1992ERS,2006ALOS) Bpl Bperp xshift yshift" echo " " exit 1 endif # # Detect if we are dealing with Envisat formatted ERS SLC data without using SC_identity # Kludge to get correct SC_identity functionality until we can correct the values throughout the chain # set ERSSLC = `echo $1|cut -c1-10` # # get the time information from the master # set MT0 = `grep SC_clock_start $1 | awk '{print $3}'` set MTF = `grep SC_clock_stop $1 | awk '{print $3}'` set MSC = `grep SC_identity $1 | awk '{print $3}'` # # get the time information from the slaver # set ST0 = `grep SC_clock_start $2 | awk '{print $3}'` set STF = `grep SC_clock_stop $2 | awk '{print $3}'` set SSC = `grep SC_identity $2 | awk '{print $3}'` # # convert the start time to days since 1992 # @ T0 = `grep SC_clock_start $2 | awk '{print $3}' | awk -F"." '{print $1}'` @ DAY = $T0 % 1000 # if ($SSC == 1 || $SSC == 2) then SAT_baseline $1 $2 > temp @ YR = $T0 / 1000 - 1992 @ YDAY = $YR * 365 + $DAY else if ($SSC == 4 || $SSC == 6) then SAT_baseline $1 $2 > temp @ YR = $T0 / 1000 - 1992 @ YDAY = $YR * 365 + $DAY else if ($SSC == 5) then SAT_baseline $1 $2 > temp @ YR1 = $T0 / 1000 if ($YR1 < 2013) then @ YR = $T0 / 1000 - 2006 else @ YR = $T0 / 1000 - 2014 endif @ YDAY = $YR * 365 + $DAY else SAT_baseline $1 $2 > temp if ($SSC == 7 || $SSC == 8) then @ YR = $T0 / 1000 - 2007 else if ($SSC == 9) then @ YR = $T0 / 1000 - 2008 else if ($SSC == 10) then @ YR = $T0 / 1000 - 2014 endif @ YDAY = $YR * 365 + $DAY endif # # get the needed parameters from temp # set BPL = `grep B_parallel temp | awk '{print $3}'` set BPR = `grep B_perpendicular temp | awk '{print $3}'` set XS = `grep xshift temp | awk '{print $3}'` set YS = `grep yshift temp | awk '{print $3}'` set NM = `grep SC_identity $2 | awk '{print $3}'` if ($SSC == 5) then if ($YR1 < 2013) then set ORB = `grep input_file $2 | awk '{print $3}' | awk '{print substr($1,14,5)}'` else if ($#argv < 3) then set ORB = `grep input_file $2 | awk '{print $3}' | awk -F"." '{print $1".1__D"}'` else set ORB = `grep input_file $2 | awk '{print $3}' | awk '{print substr($1,13,5)}'` endif endif else if ($SSC == 6 || $ERSSLC == "SAR_IMS_1P") then set ORB = `grep input_file $2 | awk '{print $3}' | cut -c50-54` else if ($SSC == 4) then set ORB = `grep input_file $2 | awk '{print $3}' | cut -c17-21` else if ($SSC == 1 || $SSC == 2) then set ORB = `grep input_file $2 | awk '{print $3}' | cut -c1-8` else set ORB = `grep input_file $2 | awk '{print $3}' | awk -F"." '{print $1}'` endif # if ($#argv < 3) then echo $ORB $ST0 $YDAY $BPL $BPR $XS $YS else echo $YDAY $BPR '8' '0.' '0' '5' $ORB endif # # clean up # rm temp GMTSAR_V5.7/gmtsar/csh/p2p_ERS.csh000755 015705 000000 00000022676 13505462013 017543 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Matt Wei, May 2010 # based on Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv < 3) then echo "" echo "Usage: p2p_ERS.csh master_stem slave_stem configuration_file" echo "" echo "Example: p2p_ERS.csh ERS_127_2943_61103 ERS2_127_2943_65111 config.ers.txt" echo "" echo " Place the raw data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. The raw data should have 4 files " echo " - two with a suffix of .dat and two with a suffix of .ldr. " echo " Execute this command at the directory location above raw and topo. " echo " The file dem.grd is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" exit 1 endif # start # # make sure the files exist # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` if ((! $?near_range) || ($near_range == "")) then set near_range = 0 endif set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set npatch = `grep num_patches $3 | awk '{print $3}'` if ((! $?npatch) || ($npatch == "")) then set npatch = 0 endif set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # cleanup.csh raw # # preprocess the raw data # echo "" echo " PREPROCESS ERS DATA -- START" cd raw ERS_pre_process $master $near_range $earth_radius $npatch $fd set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` ERS_pre_process $slave $NEAR $RAD $npatch $fd # # check patch number, if different, use the smaller one # set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` echo "Different number of patches: $pch1 $pch2" if ($pch1 != $pch2) then if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp cd .. echo " PREPROCESS ERS DATA -- END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # focus and align SLC files # echo " " echo "ALIGN.CSH - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.raw . ln -s ../raw/$slave.raw . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . align.csh SAT $master $slave cd .. echo "ALIGN.CSH - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is a dem.grd # if ($topo_phase == 1) then echo " " echo " DEM2TOPOP_RA.CSH - START " echo " USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC slc2amp.csh $master.PRM 1 amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 11 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make interferogram # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/csh/intf_batch.csh000644 015705 000000 00000020024 13505462013 020410 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # intf_batch.csh # Loop through a list of interferometry pairs # modified from process2pass.csh # Xiaopeng Tong D.Sandwell Aug 27 2010 # added support for ENVI_SLC # Anders Hogrelius May 22 2017 alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: intf_batch.csh SAT intf.in batch.config" echo " make a stack of interferograms listed in intf.in" echo "" echo " SAT can be ALOS ENVI(ENVISAT) ENVI_SLC and ERS " echo "" echo " format for intf.in:" echo " reference1_name:repeat1_name" echo " reference2_name:repeat2_name" echo " reference3_name:repeat3_name" echo " ......" echo "" echo " Example of intf.in for ALOS:" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP236920650-H1.0__A" echo " IMG-HH-ALPSRP089300650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP089300650-H1.0__A:IMG-HH-ALPSRP236920650-H1.0__A" echo "" echo " Example of intf.in for ERS is:" echo " e1_05783:e1_07787" echo " e1_05783:e1_10292" echo "" echo " Example of intf.in for ENVISAT is:" echo " ENV1_2_127_2925_07195:ENV1_2_127_2925_12706" echo " ENV1_2_127_2925_07195:ENV1_2_127_2925_13207" echo "" echo " Example of intf.in for ENVI_SLC is:" echo " ASA_IMS_1PNESA20030908_175832_000000182019_00399_07968_0000:ASA_IMS_1PNESA20051121_175837_000000172042_00399_19491_0000" echo " ASA_IMS_1PNESA20040719_175832_000000182028_00399_12477_0000:ASA_IMS_1PNESA20051121_175837_000000172042_00399_19491_0000" echo " ASA_IMS_1PNESA20040719_175832_000000182028_00399_12477_0000:ASA_IMS_1PNESA20030908_175832_000000182019_00399_07968_0000" echo " ASA_IMS_1PNESA20051121_175837_000000172042_00399_19491_0000:ASA_IMS_1PNESA20040719_175832_000000182028_00399_12477_0000" echo "" echo " batch.config is a config file for making interferograms" echo " See example.batch.config for an example" echo "" exit 1 endif # set SAT = $1 if ($SAT != ALOS && $SAT != ENVI && $SAT != ERS && $SAT != ENVI_SLC) then echo "" echo " SAT can be ALOS ENVI(ENVISAT) ENVI_SLC and ERS" echo "" exit 1 endif # # make sure the file exsit # if (! -f $2) then echo "no input file:" $2 exit endif if (! -f $3) then echo "no config file:" $3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set master = `grep master_image $3 | awk '{print $3}'` if ($master == "") then echo "" echo "master image not set." echo "" exit 1 endif # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif set dec = `grep dec_factor $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # ################################## # 1 - start from make topo_ra # ################################## # if ($stage <= 1) then # # clean up # cleanup.csh topo # # make topo_ra # if ($topo_phase == 1) then echo " " echo "DEM2TOPOPHASE.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPOPHASE.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC if ($SAT == ALOS) then set rng_samp_rate = `grep rng_samp_rate $master.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ( $?rng_samp_rate) then if ($rng_samp_rate > 25000000) then echo "processing ALOS FBS data" set rng = 2 else echo "processing ALOS FBD data" set rng = 1 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif slc2amp.csh $master.PRM $rng amp-$master.grd else if ($SAT == ERS || $SAT == ENVI || $SAT == ENVI_SLC) then slc2amp.csh $master.PRM 1 amp-$master.grd endif cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPOPHASE SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif # else if ($topo_phase == 0) then echo "NO TOPOPHASE IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif # endif # stage 1 # ################################################## # 2 - start from make and filter interferograms # # unwrap phase and geocode # ################################################## # if ($stage <= 2) then # # make working directories # echo "" echo "START FORM A STACK OF INTERFEROGRAMS" echo "" mkdir -p intf/ # # loop over intf.in # foreach line (`awk '{print $0}' $2`) set ref = `echo $line | awk -F: '{print $1}'` set rep = `echo $line | awk -F: '{print $2}'` set ref_id = `grep SC_clock_start ./SLC/$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ./SLC/$rep.PRM | awk '{printf("%d",int($3))}' ` # echo "" echo "INTF.CSH, FILTER.CSH - START" cd intf mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . # if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif echo "INTF.CSH, FILTER.CSH - END" # if ($region_cut == "") then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif if ($threshold_snaphu != 0 ) then if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo "" echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" else echo "" echo "SKIP UNWRAP PHASE" endif echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. end # loop of foreach endif # stage 2 echo "" echo "END FORM A STACK OF INTERFEROGRAMS" echo "" GMTSAR_V5.7/gmtsar/csh/fitoffset.csh000755 015705 000000 00000006005 13505462013 020306 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # D. Sandwell DEC 10 2007 # # compute 2-6 alignment parameters from xcorr.dat # alias rm 'rm -f' unset noclobber # # check for number of arguments # if ($#argv == 0) then echo " " echo "Usage: fitoffset.csh npar_rng npar_azi xcorr.dat [SNR]" echo " " echo " npar_rng - number of parameters to fit in range " echo " npar_aiz - number of parameters to fit in azimuth " echo " xcorr.dat - files of range and azimuth offset estimates " echo " SNR - optional SNR cutoff (default 20)" echo " " echo "Example: fitoffset.csh 3 3 freq_xcorr.dat " echo " " exit 1 endif # if ($#argv == 4) then set SNR = $4 else set SNR = 20. endif endif # # first extract the range and azimuth data # awk '{ if ($5 > '$SNR') printf("%f %f %f \n",$1,$3,$2); }' < $3 > r.xyz awk '{ if ($5 > '$SNR') printf("%f %f %f \n",$1,$3,$4); }' < $3 > a.xyz # # make sure there are enough points remaining, otherwise exit # set NPTS0 = ` wc -l $3 | awk '{print $1}'` set NPTS = ` wc -l r.xyz | awk '{print $1}'` if($NPTS < 8) then echo " " echo " FAILED - not enough points to estimate parameters" echo " try lower SNR " echo " NPTS0, NPTS " $NPTS0 $NPTS echo " " exit 1 endif # # compute requested number of parameters # set azi_p = $2 set rng_p = $1 ( gmt trend2d r.xyz -Fxyz -N"$rng_p"r -V > /dev/null ) |& grep oefficients | awk -F":" '{print $NF, 0, 0, 0'} > rm.coef ( gmt trend2d a.xyz -Fxyz -N"$azi_p"r -V > /dev/null ) |& grep oefficients | awk -F":" '{print $NF, 0 ,0, 0'} > am.coef awk '{print $1, $2, $3}' < rm.coef > tmp.coef mv tmp.coef rm.coef awk '{print $1, $2, $3}' < am.coef > tmp.coef mv tmp.coef am.coef rm tmp.coef # # get the data range and paste to the coeffifients # gmt gmtinfo r.xyz -C | awk '{print $1, $2, $3, $4 }' > range.coef paste rm.coef range.coef > rm.rng paste am.coef range.coef > am.rng rm r.xyz a.xyz am.coef rm.coef range.coef # # now convert to range coefficients # awk '{print ( $1 - $2*($5+$4)/($5-$4) -$3*($7+$6)/($7-$6) ) }' < rm.rng > rshift awk '{if($1 >= 0) {printf("%s %g \n","rshift = ",int($1)); printf("%s %g \n","sub_int_r = ",($1 %1))}}' < rshift awk '{if($1 < 0) {printf("%s %g \n","rshift = ",int($1)-1); printf("%s %g \n","sub_int_r = ",($1 %1)+1)}}' < rshift awk '{printf ("%s %g \n","stretch_r = ",$2*2./($5-$4))}' < rm.rng awk '{printf ("%s %g \n","a_stretch_r = ",$3*2./($7-$6))}' < rm.rng # # now convert to azimuth coefficients # awk '{print ( $1 - $2*($5+$4)/($5-$4) -$3*($7+$6)/($7-$6) ) }' < am.rng > ashift awk '{if($1 >= 0) {printf("%s %g \n","ashift = ",int($1)); printf("%s %g \n","sub_int_a = ",($1 %1))}}' < ashift awk '{if($1 < 0) {printf("%s %g \n","ashift = ",int($1)-1); printf("%s %g \n","sub_int_a = ",($1 %1)+1)}}' < ashift awk '{printf ("%s %g \n","stretch_a = ",$2*2./($5-$4))}' < am.rng awk '{printf ("%s %g \n","a_stretch_a = ",$3*2./($7-$6))}' < am.rng # # cleanup # rm rshift ashift rm.rng am.rng # # OK we are done # # echo " NPTS0, NPTS " $NPTS0 $NPTS GMTSAR_V5.7/gmtsar/csh/stack_corr.csh000755 015705 000000 00000002521 13505462013 020446 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # compute the mean correlation # Creator: Xiaopeng Tong, David Sandwell # Date: July 6th 2013 # input: a list of the correlation gird files # output: the mean correlation # Reference: Synthetic Aperture Radar Interferometry, Rosen et al., 2000 if ($#argv != 2) then echo "" echo "Usage: stack_corr.csh list meancorr.grd" echo "" echo " compute the mean correlation from a stack of correlation grid files " echo "" echo " list -- a list of corr.grd file names" echo " meancorr.grd -- output file name of the mean correlation grid " echo "" echo " note that the grid of the grd files must be consistent" echo "" exit 1 endif if (! -e $1) then echo "" echo "no input file found: $1" echo "" exit 1 endif set list = $1 set out = $2 # compute the mean echo "computing the mean correlation of the grids .." @ num = 1 foreach cor (`cat $list`) if (! -e $cor) then echo " Error: file not found: $cor " echo "" exit 1 endif gmt grdmath $cor SQR = tmp.grd if ($num == 1) then gmt grdmath 1 tmp.grd SUB tmp.grd DIV = sum.grd else gmt grdmath 1 tmp.grd SUB tmp.grd DIV sum.grd ADD = tmp2.grd mv tmp2.grd sum.grd endif @ num ++ end @ num -- gmt grdmath 1 sum.grd $num DIV 1 ADD DIV SQRT = $out # clean up rm tmp.grd sum.grd GMTSAR_V5.7/gmtsar/csh/geocode.csh_orig000755 015705 000000 00000010364 13505462013 020745 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 10 20100 # # alias rm 'rm -f' unset noclobber # if ($#argv < 1) then errormessage: echo "" echo "Usage: geocode.csh correlation_threshold" echo "" echo " phase is masked when correlation is less than correlation_threshold" echo "" echo "Example: geocode.csh .12" echo "" exit 1 endif # # first mask the phase and phase gradient using the correlation # gmt grdmath corr.grd $1 GE 0 NAN mask.grd MUL = mask2.grd -V gmt grdmath phase.grd mask2.grd MUL = phase_mask.grd if (-e xphase.grd) then gmt grdmath xphase.grd mask2.grd MUL = xphase_mask.grd gmt grdmath yphase.grd mask2.grd MUL = yphase_mask.grd endif if (-e unwrap.grd) then gmt grdcut mask2.grd `gmt grdinfo unwrap.grd -I-` -Gmask3.grd gmt grdmath unwrap.grd mask3.grd MUL = unwrap_mask.grd endif if (-e phasefilt.grd) then gmt grdmath phasefilt.grd mask2.grd MUL = phasefilt_mask.grd endif # # look at the masked phase # set boundR = `gmt grdinfo display_amp.grd -C | awk '{print ($3-$2)/4}'` set boundA = `gmt grdinfo display_amp.grd -C | awk '{print ($5-$4)/4}'` gmt grdimage phase_mask.grd -JX6.5i -Cphase.cpt -B"$boundR":Range:/"$boundA":Azimuth:WSen -X1.3i -Y3i -P -K > phase_mask.ps gmt psscale -D3.3/-1.5/5/0.2h -Cphase.cpt -B1.57:"phase, rad": -O >> phase_mask.ps if (-e xphase_mask.grd) then gmt grdimage xphase_mask.grd -JX8i -Cphase_grad.cpt -X.2i -Y.5i -P > xphase_mask.ps gmt grdimage yphase_mask.grd -JX8i -Cphase_grad.cpt -X.2i -Y.5i -P > yphase_mask.ps endif if (-e unwrap_mask.grd) then gmt grdimage unwrap_mask.grd -JX6.5i -B"$boundR":Range:/"$boundA":Azimuth:WSen -Cunwrap.cpt -X1.3i -Y3i -P -K > unwrap_mask.ps set std = `gmt grdinfo -C -L2 unwrap_mask.grd | awk '{printf("%5.1f", $13)}'` gmt psscale -D3.3/-1.5/5/0.2h -Cunwrap.cpt -B"$std":"unwrapped phase, rad": -O -E >> unwrap_mask.ps endif if (-e phasefilt_mask.grd) then gmt grdimage phasefilt_mask.grd -JX6.5i -B"$boundR":Range:/"$boundA":Azimuth:WSen -Cphase.cpt -X1.3i -Y3i -P -K > phasefilt_mask.ps gmt psscale -D3.3/-1.5/5/0.2h -Cphase.cpt -B1.57:"phase, rad": -O >> phasefilt_mask.ps endif # line-of-sight displacement if (-e unwrap_mask.grd) then set wavel = `grep wavelength *.PRM | awk '{print($3)}' | head -1 ` gmt grdmath unwrap_mask.grd $wavel MUL -79.58 MUL = los.grd gmt grdgradient los.grd -Nt.9 -A0. -Glos_grad.grd set tmp = `gmt grdinfo -C -L2 los.grd` set limitU = `echo $tmp | awk '{printf("%5.1f", $12+$13*2)}'` set limitL = `echo $tmp | awk '{printf("%5.1f", $12-$13*2)}'` set std = `echo $tmp | awk '{printf("%5.1f", $13)}'` gmt makecpt -Cpolar -Z -T"$limitL"/"$limitU"/1 -D > los.cpt gmt grdimage los.grd -Ilos_grad.grd -Clos.cpt -B"$boundR":Range:/"$boundA":Azimuth:WSen -JX6.5i -X1.3i -Y3i -P -K > los.ps gmt psscale -D3.3/-1.5/4/0.2h -Clos.cpt -B"$std":"LOS displacement, mm":/:"range decrease": -O -E >> los.ps endif # # now reproject the phase to lon/lat space # echo "geocode.csh" echo "project correlation, phase, unwrapped and amplitude back to lon lat coordinates" proj_ra2ll.csh trans.dat corr.grd corr_ll.grd proj_ra2ll.csh trans.dat phase_mask.grd phase_mask_ll.grd proj_ra2ll.csh trans.dat display_amp.grd display_amp_ll.grd if (-e xphase_mask.grd) then proj_ra2ll.csh trans.dat xphase_mask.grd xphase_mask_ll.grd proj_ra2ll.csh trans.dat yphase_mask.grd yphase_mask_ll.grd endif if (-e unwrap_mask.grd) then proj_ra2ll.csh trans.dat unwrap_mask.grd unwrap_mask_ll.grd endif if (-e phasefilt_mask.grd) then proj_ra2ll.csh trans.dat phasefilt_mask.grd phasefilt_mask_ll.grd endif # # now image for google earth # echo "geocode.csh" echo "make the KML files for Google Earth" grd2kml.csh display_amp_ll display_amp.cpt grd2kml.csh corr_ll corr.cpt grd2kml.csh phase_mask_ll phase.cpt #ln -s phasefilt_mask_ll.grd phase_mask_ll_bw.grd #grd2kml.csh phase_mask_ll_bw phase_bw.cpt #rm phase_mask_ll_bw.grd if (-e xphase_mask_ll.grd) then grd2kml.csh xphase_mask_ll phase_grad.cpt grd2kml.csh yphase_mask_ll phase_grad.cpt endif if (-e unwrap_mask_ll.grd) then grd2kml.csh unwrap_mask_ll unwrap.cpt endif if (-e phasefilt_mask_ll.grd) then grd2kml.csh phasefilt_mask_ll phase.cpt endif if (-e unwrap_mask_ll.grd) then gmt grdmath unwrap_mask_ll.grd $wavel MUL -79.58 MUL = los_ll.grd grd2kml.csh los_ll los.cpt endif GMTSAR_V5.7/gmtsar/csh/p2p_ALOS2_SLC.csh000755 015705 000000 00000025767 13505462013 020437 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # # Modification History # # Xiaohua Xu, Oct 9, 2013 # # Changed some code in Part 2 to make it work for one FBD and one FBS files. alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_ALOS_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_ALOS_SLC.csh IMG-ALPSRP022200660-H1.1__A IMG-ALPSRP028910660-H1.1__A config.alos.slc.txt" echo "" echo " Place the raw L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set SAT = `grep SAT $3 | awk '{print $3}'` set stage = `grep proc_stage $3 | awk '{print $3}'` set num_patches = `grep num_patches $3 | awk '{print $3}'` set SLC_factor = `grep SLC_factor $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = ` echo $1 | awk '{ print substr($1,5,length($1)-4)}'` set slave = ` echo $2 | awk '{ print substr($1,5,length($1)-4)}'` set master_led = ` echo $1 | awk '{ print substr($1,8,length($1)-7)}'` set slave_led = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # rm raw/*.PRM* rm raw/*.SLC rm raw/*.LED # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif # # make sure the files exits # echo $commandline if(! -f $1 ) then echo " no file "$1 exit endif if(! -f $2 ) then echo " no file "$2 exit endif # ALOS_pre_process_SLC IMG-$master LED-$master_led $commandline -rbias -68. # ALOS_pre_process_SLC IMG-$slave LED-$slave_led $commandline -rbias -68. ALOS_pre_process_SLC IMG-$master LED-$master_led $commandline ALOS_pre_process_SLC IMG-$slave LED-$slave_led $commandline # # special code to filter the SLC data in range does not seem to work # cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/IMG-$master.SLC . ln -s ../raw/IMG-$slave.SLC . ln -s ../raw/IMG-$master.LED . ln -s ../raw/IMG-$slave.LED . # if images do not match, convert the FBD image to FBS set rng_samp_rate_m = `grep rng_samp_rate IMG-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate IMG-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$slave.PRM IMG-$slave"_"FBS.PRM echo "Overwriting the old slave image" mv IMG-$slave"_"FBS.PRM IMG-$slave.PRM update_PRM IMG-$slave.PRM input_file IMG-$slave.SLC mv IMG-$slave"_"FBS.SLC IMG-$slave.SLC else if ($t == 0.5) then echo "Convert the master image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$master.PRM IMG-$master"_"FBS.PRM echo "Overwriting the old master image" mv IMG-$master"_"FBS.PRM IMG-$master.PRM update_PRM IMG-$master.PRM input_file IMG-$master.SLC mv IMG-$master"_"FBS.SLC IMG-$master.SLC else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif cp IMG-$slave.PRM IMG-$slave.PRM0 SAT_baseline IMG-$master.PRM IMG-$slave.PRM0 >> IMG-$slave.PRM xcorr IMG-$master.PRM IMG-$slave.PRM -xsearch 64 -ysearch 64 -nx 32 -ny 64 fitoffset.csh 2 2 freq_xcorr.dat 18 >> IMG-$slave.PRM resamp IMG-$master.PRM IMG-$slave.PRM IMG-$slave.PRMresamp IMG-$slave.SLCresamp 4 rm IMG-$slave.SLC mv IMG-$slave.SLCresamp IMG-$slave.SLC cp IMG-$slave.PRMresamp IMG-$slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/IMG-$master.PRM master.PRM ln -s ../raw/IMG-$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC slc2amp.csh IMG-$master.PRM 2 amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../SLC/IMG-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/IMG-$ref.LED . ln -s ../../raw/IMG-$rep.LED . ln -s ../../SLC/IMG-$ref.SLC . ln -s ../../SLC/IMG-$rep.SLC . cp ../../SLC/IMG-$ref.PRM . cp ../../SLC/IMG-$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh IMG-$ref.PRM IMG-$rep.PRM -topo topo_shift.grd filter.csh IMG-$ref.PRM IMG-$rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh IMG-$ref.PRM IMG-$rep.PRM -topo topo_ra.grd filter.csh IMG-$ref.PRM IMG-$rep.PRM $filter $dec endif else intf.csh IMG-$ref.PRM IMG-$rep.PRM filter.csh IMG-$ref.PRM IMG-$rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/gmtsar/filters/gauss_alos_500m000644 015705 000000 00000016124 13505462013 021335 0ustar00sandwellwheel000000 000000 17 17 2.0933767904898495e-01 2.6477823918585797e-01 3.2457309988371241e-01 3.8560095924594417e-01 4.4397553226904352e-01 4.9542203193290119e-01 5.3578055097952493e-01 5.6155709860666592e-01 5.7042197393738581e-01 5.6155709860666592e-01 5.3578055097952493e-01 4.9542203193290119e-01 4.4397553226904352e-01 3.8560095924594417e-01 3.2457309988371241e-01 2.6477823918585797e-01 2.0933767904898495e-01 2.3877503057920269e-01 3.0201171831811829e-01 3.7021501433473469e-01 4.3982469497894550e-01 5.0640798052008740e-01 5.6508895752449972e-01 6.1112274687034396e-01 6.4052402797682184e-01 6.5063549423454303e-01 6.4052402797682184e-01 6.1112274687034396e-01 5.6508895752449972e-01 5.0640798052008740e-01 4.3982469497894550e-01 3.7021501433473469e-01 3.0201171831811829e-01 2.3877503057920269e-01 2.6761567436194961e-01 3.3849045885099371e-01 4.1493174759429097e-01 4.9294929232052326e-01 5.6757489625450064e-01 6.3334370463936573e-01 6.8493772412013243e-01 7.1789026380290033e-01 7.2922305205460392e-01 7.1789026380290033e-01 6.8493772412013243e-01 6.3334370463936573e-01 5.6757489625450064e-01 4.9294929232052326e-01 4.1493174759429097e-01 3.3849045885099371e-01 2.6761567436194961e-01 2.9472387367924102e-01 3.7277793789126790e-01 4.5696236685333025e-01 5.4288271905796148e-01 6.2506754294584732e-01 6.9749841987661654e-01 7.5431866897565736e-01 7.9060914473358690e-01 8.0308989071788695e-01 7.9060914473358690e-01 7.5431866897565736e-01 6.9749841987661654e-01 6.2506754294584732e-01 5.4288271905796148e-01 4.5696236685333025e-01 3.7277793789126790e-01 2.9472387367924102e-01 3.1893355914226024e-01 4.0339926663276843e-01 4.9449890921703471e-01 5.8747707006057448e-01 6.7641285277416030e-01 7.5479346403223080e-01 8.1628113400032309e-01 8.5555264075664061e-01 8.6905860037854576e-01 8.5555264075664061e-01 8.1628113400032309e-01 7.5479346403223080e-01 6.7641285277416030e-01 5.8747707006057448e-01 4.9449890921703471e-01 4.0339926663276843e-01 3.1893355914226024e-01 3.3913003513326356e-01 4.2894453576420832e-01 5.2581306560257957e-01 6.2467907091822328e-01 7.1924671440289467e-01 8.0259077992301009e-01 8.6797215820324447e-01 9.0973053415409766e-01 9.2409175902301177e-01 9.0973053415409766e-01 8.6797215820324447e-01 8.0259077992301009e-01 7.1924671440289467e-01 6.2467907091822328e-01 5.2581306560257957e-01 4.2894453576420832e-01 3.3913003513326356e-01 3.5433448639227083e-01 4.4817570260639489e-01 5.4938720619488068e-01 6.5268573945929131e-01 7.5149319946589610e-01 8.3857388707974656e-01 9.0688655388155914e-01 9.5051711196322997e-01 9.6552220355262852e-01 9.5051711196322997e-01 9.0688655388155914e-01 8.3857388707974656e-01 7.5149319946589610e-01 6.5268573945929131e-01 5.4938720619488068e-01 4.4817570260639489e-01 3.5433448639227083e-01 3.6378243363970464e-01 4.6012582476051994e-01 5.6403602402628417e-01 6.7008890136529042e-01 7.7153095581766928e-01 8.6093355612825651e-01 9.3106770657634486e-01 9.7586162647280494e-01 9.9126681265989003e-01 9.7586162647280494e-01 9.3106770657634486e-01 8.6093355612825651e-01 7.7153095581766928e-01 6.7008890136529042e-01 5.6403602402628417e-01 4.6012582476051994e-01 3.6378243363970464e-01 3.6698740338492564e-01 4.6417959209776560e-01 5.6900525350262943e-01 6.7599247024847409e-01 7.7832824216862639e-01 8.6851849081691013e-01 9.3927053209618572e-01 9.8445909215325389e-01 1.0000000000000000e+00 9.8445909215325389e-01 9.3927053209618572e-01 8.6851849081691013e-01 7.7832824216862639e-01 6.7599247024847409e-01 5.6900525350262943e-01 4.6417959209776560e-01 3.6698740338492564e-01 3.6378243363970464e-01 4.6012582476051994e-01 5.6403602402628417e-01 6.7008890136529042e-01 7.7153095581766928e-01 8.6093355612825651e-01 9.3106770657634486e-01 9.7586162647280494e-01 9.9126681265989003e-01 9.7586162647280494e-01 9.3106770657634486e-01 8.6093355612825651e-01 7.7153095581766928e-01 6.7008890136529042e-01 5.6403602402628417e-01 4.6012582476051994e-01 3.6378243363970464e-01 3.5433448639227083e-01 4.4817570260639489e-01 5.4938720619488068e-01 6.5268573945929131e-01 7.5149319946589610e-01 8.3857388707974656e-01 9.0688655388155914e-01 9.5051711196322997e-01 9.6552220355262852e-01 9.5051711196322997e-01 9.0688655388155914e-01 8.3857388707974656e-01 7.5149319946589610e-01 6.5268573945929131e-01 5.4938720619488068e-01 4.4817570260639489e-01 3.5433448639227083e-01 3.3913003513326356e-01 4.2894453576420832e-01 5.2581306560257957e-01 6.2467907091822328e-01 7.1924671440289467e-01 8.0259077992301009e-01 8.6797215820324447e-01 9.0973053415409766e-01 9.2409175902301177e-01 9.0973053415409766e-01 8.6797215820324447e-01 8.0259077992301009e-01 7.1924671440289467e-01 6.2467907091822328e-01 5.2581306560257957e-01 4.2894453576420832e-01 3.3913003513326356e-01 3.1893355914226024e-01 4.0339926663276843e-01 4.9449890921703471e-01 5.8747707006057448e-01 6.7641285277416030e-01 7.5479346403223080e-01 8.1628113400032309e-01 8.5555264075664061e-01 8.6905860037854576e-01 8.5555264075664061e-01 8.1628113400032309e-01 7.5479346403223080e-01 6.7641285277416030e-01 5.8747707006057448e-01 4.9449890921703471e-01 4.0339926663276843e-01 3.1893355914226024e-01 2.9472387367924102e-01 3.7277793789126790e-01 4.5696236685333025e-01 5.4288271905796148e-01 6.2506754294584732e-01 6.9749841987661654e-01 7.5431866897565736e-01 7.9060914473358690e-01 8.0308989071788695e-01 7.9060914473358690e-01 7.5431866897565736e-01 6.9749841987661654e-01 6.2506754294584732e-01 5.4288271905796148e-01 4.5696236685333025e-01 3.7277793789126790e-01 2.9472387367924102e-01 2.6761567436194961e-01 3.3849045885099371e-01 4.1493174759429097e-01 4.9294929232052326e-01 5.6757489625450064e-01 6.3334370463936573e-01 6.8493772412013243e-01 7.1789026380290033e-01 7.2922305205460392e-01 7.1789026380290033e-01 6.8493772412013243e-01 6.3334370463936573e-01 5.6757489625450064e-01 4.9294929232052326e-01 4.1493174759429097e-01 3.3849045885099371e-01 2.6761567436194961e-01 2.3877503057920269e-01 3.0201171831811829e-01 3.7021501433473469e-01 4.3982469497894550e-01 5.0640798052008740e-01 5.6508895752449972e-01 6.1112274687034396e-01 6.4052402797682184e-01 6.5063549423454303e-01 6.4052402797682184e-01 6.1112274687034396e-01 5.6508895752449972e-01 5.0640798052008740e-01 4.3982469497894550e-01 3.7021501433473469e-01 3.0201171831811829e-01 2.3877503057920269e-01 2.0933767904898495e-01 2.6477823918585797e-01 3.2457309988371241e-01 3.8560095924594417e-01 4.4397553226904352e-01 4.9542203193290119e-01 5.3578055097952493e-01 5.6155709860666592e-01 5.7042197393738581e-01 5.6155709860666592e-01 5.3578055097952493e-01 4.9542203193290119e-01 4.4397553226904352e-01 3.8560095924594417e-01 3.2457309988371241e-01 2.6477823918585797e-01 2.0933767904898495e-01 GMTSAR_V5.7/gmtsar/filters/gauss33x33000644 015705 000000 00000065200 13505462013 020261 0ustar00sandwellwheel000000 000000 33 33 3.6787944117144233e-01 3.9084151837960834e-01 4.1361797370441067e-01 4.3601522130172388e-01 4.5783336177161427e-01 4.7886903850371154e-01 4.9891851158647194e-01 5.1778088662775290e-01 5.3526142851899028e-01 5.5117488474881937e-01 5.6534873961061416e-01 5.7762631975431722e-01 5.8786967312234650e-01 5.9596214740448550e-01 6.0181060067169445e-01 6.0534718563050682e-01 6.0653065971263342e-01 6.0534718563050682e-01 6.0181060067169445e-01 5.9596214740448550e-01 5.8786967312234650e-01 5.7762631975431722e-01 5.6534873961061416e-01 5.5117488474881937e-01 5.3526142851899028e-01 5.1778088662775290e-01 4.9891851158647194e-01 4.7886903850371154e-01 4.5783336177161427e-01 4.3601522130172388e-01 4.1361797370441067e-01 3.9084151837960834e-01 3.6787944117144233e-01 3.9084151837960834e-01 4.1523682868184131e-01 4.3943493106588422e-01 4.6323015656308297e-01 4.8641012857325439e-01 5.0875879749570174e-01 5.3005970650389300e-01 5.5009942190061234e-01 5.6867105371867210e-01 5.8557778646711967e-01 6.0063633645794234e-01 6.1368025119835856e-01 6.2456296802241085e-01 6.3316055348629974e-01 6.3937405198420272e-01 6.4313138137118653e-01 6.4438872482519527e-01 6.4313138137118653e-01 6.3937405198420272e-01 6.3316055348629974e-01 6.2456296802241085e-01 6.1368025119835856e-01 6.0063633645794234e-01 5.8557778646711967e-01 5.6867105371867210e-01 5.5009942190061234e-01 5.3005970650389300e-01 5.0875879749570174e-01 4.8641012857325439e-01 4.6323015656308297e-01 4.3943493106588422e-01 4.1523682868184131e-01 3.9084151837960834e-01 4.1361797370441067e-01 4.3943493106588422e-01 4.6504318813405632e-01 4.9022509049385532e-01 5.1475588520860704e-01 5.3840693229546044e-01 5.6094916081447077e-01 5.8215669912915313e-01 6.0181060067169445e-01 6.1970258044489490e-01 6.3563867382605199e-01 6.4944272823273841e-01 6.6095963999744889e-01 6.7005825340235914e-01 6.7663384616172895e-01 6.8061013551304317e-01 6.8194075119034814e-01 6.8061013551304317e-01 6.7663384616172895e-01 6.7005825340235914e-01 6.6095963999744889e-01 6.4944272823273841e-01 6.3563867382605199e-01 6.1970258044489490e-01 6.0181060067169445e-01 5.8215669912915313e-01 5.6094916081447077e-01 5.3840693229546044e-01 5.1475588520860704e-01 4.9022509049385532e-01 4.6504318813405632e-01 4.3943493106588422e-01 4.1361797370441067e-01 4.3601522130172388e-01 4.6323015656308297e-01 4.9022509049385532e-01 5.1677058277957666e-01 5.4262971020207929e-01 5.6756145201502428e-01 5.9132433317882593e-01 6.1368025119835856e-01 6.3439840363686328e-01 6.5325922694797267e-01 6.7005825340235914e-01 6.8460979182581672e-01 6.9675033974937317e-01 7.0634163942561956e-01 7.1327329789899030e-01 7.1746490172593602e-01 7.1886756970917576e-01 7.1746490172593602e-01 7.1327329789899030e-01 7.0634163942561956e-01 6.9675033974937317e-01 6.8460979182581672e-01 6.7005825340235914e-01 6.5325922694797267e-01 6.3439840363686328e-01 6.1368025119835856e-01 5.9132433317882593e-01 5.6756145201502428e-01 5.4262971020207929e-01 5.1677058277957666e-01 4.9022509049385532e-01 4.6323015656308297e-01 4.3601522130172388e-01 4.5783336177161427e-01 4.8641012857325439e-01 5.1475588520860704e-01 5.4262971020207929e-01 5.6978282473092301e-01 5.9596214740448550e-01 6.2091411980609579e-01 6.4438872482519527e-01 6.6614361070348771e-01 6.8594822696556568e-01 7.0358787434562753e-01 7.1886756970917576e-01 7.3161562894664178e-01 7.4168687591234372e-01 7.4896539360271563e-01 7.5336674469678067e-01 7.5483960198900735e-01 7.5336674469678067e-01 7.4896539360271563e-01 7.4168687591234372e-01 7.3161562894664178e-01 7.1886756970917576e-01 7.0358787434562753e-01 6.8594822696556568e-01 6.6614361070348771e-01 6.4438872482519527e-01 6.2091411980609579e-01 5.9596214740448550e-01 5.6978282473092301e-01 5.4262971020207929e-01 5.1475588520860704e-01 4.8641012857325439e-01 4.5783336177161427e-01 4.7886903850371154e-01 5.0875879749570174e-01 5.3840693229546044e-01 5.6756145201502428e-01 5.9596214740448550e-01 6.2334430895963433e-01 6.4944272823273841e-01 6.7399590079153104e-01 6.9675033974937317e-01 7.1746490172593602e-01 7.3591502285242671e-01 7.5189676127152860e-01 7.6523054465116569e-01 7.7576452656182626e-01 7.8337746406081821e-01 7.8798104025801019e-01 7.8952156966078790e-01 7.8798104025801019e-01 7.8337746406081821e-01 7.7576452656182626e-01 7.6523054465116569e-01 7.5189676127152860e-01 7.3591502285242671e-01 7.1746490172593602e-01 6.9675033974937317e-01 6.7399590079153104e-01 6.4944272823273841e-01 6.2334430895963433e-01 5.9596214740448550e-01 5.6756145201502428e-01 5.3840693229546044e-01 5.0875879749570174e-01 4.7886903850371154e-01 4.9891851158647194e-01 5.3005970650389300e-01 5.6094916081447077e-01 5.9132433317882593e-01 6.2091411980609579e-01 6.4944272823273841e-01 6.7663384616172895e-01 7.0221502039265316e-01 7.2592215095240831e-01 7.4750399817687097e-01 7.6672659607082005e-01 7.8337746406081821e-01 7.9726951141132441e-01 8.0824453412811437e-01 8.1617621302233978e-01 8.2097253351834554e-01 8.2257756239866464e-01 8.2097253351834554e-01 8.1617621302233978e-01 8.0824453412811437e-01 7.9726951141132441e-01 7.8337746406081821e-01 7.6672659607082005e-01 7.4750399817687097e-01 7.2592215095240831e-01 7.0221502039265316e-01 6.7663384616172895e-01 6.4944272823273841e-01 6.2091411980609579e-01 5.9132433317882593e-01 5.6094916081447077e-01 5.3005970650389300e-01 4.9891851158647194e-01 5.1778088662775290e-01 5.5009942190061234e-01 5.8215669912915313e-01 6.1368025119835856e-01 6.4438872482519527e-01 6.7399590079153104e-01 7.0221502039265316e-01 7.2876332991949122e-01 7.5336674469678067e-01 7.7576452656182626e-01 7.9571386407822486e-01 8.1299424352048699e-01 8.2741150090255378e-01 8.3880145108698256e-01 8.4703299919538910e-01 8.5201065190078951e-01 8.5367636134514768e-01 8.5201065190078951e-01 8.4703299919538910e-01 8.3880145108698256e-01 8.2741150090255378e-01 8.1299424352048699e-01 7.9571386407822486e-01 7.7576452656182626e-01 7.5336674469678067e-01 7.2876332991949122e-01 7.0221502039265316e-01 6.7399590079153104e-01 6.4438872482519527e-01 6.1368025119835856e-01 5.8215669912915313e-01 5.5009942190061234e-01 5.1778088662775290e-01 5.3526142851899028e-01 5.6867105371867210e-01 6.0181060067169445e-01 6.3439840363686328e-01 6.6614361070348771e-01 6.9675033974937317e-01 7.2592215095240831e-01 7.5336674469678067e-01 7.7880078307140488e-01 8.0195472526270872e-01 8.2257756239866464e-01 8.4044133610003946e-01 8.5534532730742252e-01 8.6711980791095333e-01 8.7562925720353824e-01 8.8077495795567795e-01 8.8249690258459546e-01 8.8077495795567795e-01 8.7562925720353824e-01 8.6711980791095333e-01 8.5534532730742252e-01 8.4044133610003946e-01 8.2257756239866464e-01 8.0195472526270872e-01 7.7880078307140488e-01 7.5336674469678067e-01 7.2592215095240831e-01 6.9675033974937317e-01 6.6614361070348771e-01 6.3439840363686328e-01 6.0181060067169445e-01 5.6867105371867210e-01 5.3526142851899028e-01 5.5117488474881937e-01 5.8557778646711967e-01 6.1970258044489490e-01 6.5325922694797267e-01 6.8594822696556568e-01 7.1746490172593602e-01 7.4750399817687097e-01 7.7576452656182626e-01 8.0195472526270872e-01 8.2579703995010068e-01 8.4703299919538910e-01 8.6542786735967525e-01 8.8077495795567795e-01 8.9289949681435277e-01 9.0166193416406737e-01 9.0696061788738358e-01 9.0873375636107001e-01 9.0696061788738358e-01 9.0166193416406737e-01 8.9289949681435277e-01 8.8077495795567795e-01 8.6542786735967525e-01 8.4703299919538910e-01 8.2579703995010068e-01 8.0195472526270872e-01 7.7576452656182626e-01 7.4750399817687097e-01 7.1746490172593602e-01 6.8594822696556568e-01 6.5325922694797267e-01 6.1970258044489490e-01 5.8557778646711967e-01 5.5117488474881937e-01 5.6534873961061416e-01 6.0063633645794234e-01 6.3563867382605199e-01 6.7005825340235914e-01 7.0358787434562753e-01 7.3591502285242671e-01 7.6672659607082005e-01 7.9571386407822486e-01 8.2257756239866464e-01 8.4703299919538910e-01 8.6881505626284317e-01 8.8768296156792947e-01 9.0342471353308673e-01 9.1586104354699049e-01 9.2484881321620482e-01 9.3028375636666649e-01 9.3210249235952758e-01 9.3028375636666649e-01 9.2484881321620482e-01 9.1586104354699049e-01 9.0342471353308673e-01 8.8768296156792947e-01 8.6881505626284317e-01 8.4703299919538910e-01 8.2257756239866464e-01 7.9571386407822486e-01 7.6672659607082005e-01 7.3591502285242671e-01 7.0358787434562753e-01 6.7005825340235914e-01 6.3563867382605199e-01 6.0063633645794234e-01 5.6534873961061416e-01 5.7762631975431722e-01 6.1368025119835856e-01 6.4944272823273841e-01 6.8460979182581672e-01 7.1886756970917576e-01 7.5189676127152860e-01 7.8337746406081821e-01 8.1299424352048699e-01 8.4044133610003946e-01 8.6542786735967525e-01 8.8768296156792947e-01 9.0696061788738358e-01 9.2304423073912845e-01 9.3575063836662076e-01 9.4493359386485609e-01 9.5048656672942344e-01 9.5234479989517640e-01 9.5048656672942344e-01 9.4493359386485609e-01 9.3575063836662076e-01 9.2304423073912845e-01 9.0696061788738358e-01 8.8768296156792947e-01 8.6542786735967525e-01 8.4044133610003946e-01 8.1299424352048699e-01 7.8337746406081821e-01 7.5189676127152860e-01 7.1886756970917576e-01 6.8460979182581672e-01 6.4944272823273841e-01 6.1368025119835856e-01 5.7762631975431722e-01 5.8786967312234650e-01 6.2456296802241085e-01 6.6095963999744889e-01 6.9675033974937317e-01 7.3161562894664178e-01 7.6523054465116569e-01 7.9726951141132441e-01 8.2741150090255378e-01 8.5534532730742252e-01 8.8077495795567795e-01 9.0342471353308673e-01 9.2304423073912845e-01 9.3941306281347581e-01 9.5234479989517640e-01 9.6169060160542530e-01 9.6734204827797121e-01 9.6923323447634413e-01 9.6734204827797121e-01 9.6169060160542530e-01 9.5234479989517640e-01 9.3941306281347581e-01 9.2304423073912845e-01 9.0342471353308673e-01 8.8077495795567795e-01 8.5534532730742252e-01 8.2741150090255378e-01 7.9726951141132441e-01 7.6523054465116569e-01 7.3161562894664178e-01 6.9675033974937317e-01 6.6095963999744889e-01 6.2456296802241085e-01 5.8786967312234650e-01 5.9596214740448550e-01 6.3316055348629974e-01 6.7005825340235914e-01 7.0634163942561956e-01 7.4168687591234372e-01 7.7576452656182626e-01 8.0824453412811437e-01 8.3880145108698256e-01 8.6711980791095333e-01 8.9289949681435277e-01 9.1586104354699049e-01 9.3575063836662076e-01 9.5234479989517640e-01 9.6545455219783782e-01 9.7492900599449983e-01 9.8065824913953858e-01 9.8257546895790038e-01 9.8065824913953858e-01 9.7492900599449983e-01 9.6545455219783782e-01 9.5234479989517640e-01 9.3575063836662076e-01 9.1586104354699049e-01 8.9289949681435277e-01 8.6711980791095333e-01 8.3880145108698256e-01 8.0824453412811437e-01 7.7576452656182626e-01 7.4168687591234372e-01 7.0634163942561956e-01 6.7005825340235914e-01 6.3316055348629974e-01 5.9596214740448550e-01 6.0181060067169445e-01 6.3937405198420272e-01 6.7663384616172895e-01 7.1327329789899030e-01 7.4896539360271563e-01 7.8337746406081821e-01 8.1617621302233978e-01 8.4703299919538910e-01 8.7562925720353824e-01 9.0166193416406737e-01 9.2484881321620482e-01 9.4493359386485609e-01 9.6169060160542530e-01 9.7492900599449983e-01 9.8449643700540845e-01 9.9028190387360837e-01 9.9221793826024351e-01 9.9028190387360837e-01 9.8449643700540845e-01 9.7492900599449983e-01 9.6169060160542530e-01 9.4493359386485609e-01 9.2484881321620482e-01 9.0166193416406737e-01 8.7562925720353824e-01 8.4703299919538910e-01 8.1617621302233978e-01 7.8337746406081821e-01 7.4896539360271563e-01 7.1327329789899030e-01 6.7663384616172895e-01 6.3937405198420272e-01 6.0181060067169445e-01 6.0534718563050682e-01 6.4313138137118653e-01 6.8061013551304317e-01 7.1746490172593602e-01 7.5336674469678067e-01 7.8798104025801019e-01 8.2097253351834554e-01 8.5201065190078951e-01 8.8077495795567795e-01 9.0696061788738358e-01 9.3028375636666649e-01 9.5048656672942344e-01 9.6734204827797121e-01 9.8065824913953858e-01 9.9028190387360837e-01 9.9610136947011751e-01 9.9804878110747552e-01 9.9610136947011751e-01 9.9028190387360837e-01 9.8065824913953858e-01 9.6734204827797121e-01 9.5048656672942344e-01 9.3028375636666649e-01 9.0696061788738358e-01 8.8077495795567795e-01 8.5201065190078951e-01 8.2097253351834554e-01 7.8798104025801019e-01 7.5336674469678067e-01 7.1746490172593602e-01 6.8061013551304317e-01 6.4313138137118653e-01 6.0534718563050682e-01 6.0653065971263342e-01 6.4438872482519527e-01 6.8194075119034814e-01 7.1886756970917576e-01 7.5483960198900735e-01 7.8952156966078790e-01 8.2257756239866464e-01 8.5367636134514768e-01 8.8249690258459546e-01 9.0873375636107001e-01 9.3210249235952758e-01 9.5234479989517640e-01 9.6923323447634413e-01 9.8257546895790038e-01 9.9221793826024351e-01 9.9804878110747552e-01 1.0000000000000000e+00 9.9804878110747552e-01 9.9221793826024351e-01 9.8257546895790038e-01 9.6923323447634413e-01 9.5234479989517640e-01 9.3210249235952758e-01 9.0873375636107001e-01 8.8249690258459546e-01 8.5367636134514768e-01 8.2257756239866464e-01 7.8952156966078790e-01 7.5483960198900735e-01 7.1886756970917576e-01 6.8194075119034814e-01 6.4438872482519527e-01 6.0653065971263342e-01 6.0534718563050682e-01 6.4313138137118653e-01 6.8061013551304317e-01 7.1746490172593602e-01 7.5336674469678067e-01 7.8798104025801019e-01 8.2097253351834554e-01 8.5201065190078951e-01 8.8077495795567795e-01 9.0696061788738358e-01 9.3028375636666649e-01 9.5048656672942344e-01 9.6734204827797121e-01 9.8065824913953858e-01 9.9028190387360837e-01 9.9610136947011751e-01 9.9804878110747552e-01 9.9610136947011751e-01 9.9028190387360837e-01 9.8065824913953858e-01 9.6734204827797121e-01 9.5048656672942344e-01 9.3028375636666649e-01 9.0696061788738358e-01 8.8077495795567795e-01 8.5201065190078951e-01 8.2097253351834554e-01 7.8798104025801019e-01 7.5336674469678067e-01 7.1746490172593602e-01 6.8061013551304317e-01 6.4313138137118653e-01 6.0534718563050682e-01 6.0181060067169445e-01 6.3937405198420272e-01 6.7663384616172895e-01 7.1327329789899030e-01 7.4896539360271563e-01 7.8337746406081821e-01 8.1617621302233978e-01 8.4703299919538910e-01 8.7562925720353824e-01 9.0166193416406737e-01 9.2484881321620482e-01 9.4493359386485609e-01 9.6169060160542530e-01 9.7492900599449983e-01 9.8449643700540845e-01 9.9028190387360837e-01 9.9221793826024351e-01 9.9028190387360837e-01 9.8449643700540845e-01 9.7492900599449983e-01 9.6169060160542530e-01 9.4493359386485609e-01 9.2484881321620482e-01 9.0166193416406737e-01 8.7562925720353824e-01 8.4703299919538910e-01 8.1617621302233978e-01 7.8337746406081821e-01 7.4896539360271563e-01 7.1327329789899030e-01 6.7663384616172895e-01 6.3937405198420272e-01 6.0181060067169445e-01 5.9596214740448550e-01 6.3316055348629974e-01 6.7005825340235914e-01 7.0634163942561956e-01 7.4168687591234372e-01 7.7576452656182626e-01 8.0824453412811437e-01 8.3880145108698256e-01 8.6711980791095333e-01 8.9289949681435277e-01 9.1586104354699049e-01 9.3575063836662076e-01 9.5234479989517640e-01 9.6545455219783782e-01 9.7492900599449983e-01 9.8065824913953858e-01 9.8257546895790038e-01 9.8065824913953858e-01 9.7492900599449983e-01 9.6545455219783782e-01 9.5234479989517640e-01 9.3575063836662076e-01 9.1586104354699049e-01 8.9289949681435277e-01 8.6711980791095333e-01 8.3880145108698256e-01 8.0824453412811437e-01 7.7576452656182626e-01 7.4168687591234372e-01 7.0634163942561956e-01 6.7005825340235914e-01 6.3316055348629974e-01 5.9596214740448550e-01 5.8786967312234650e-01 6.2456296802241085e-01 6.6095963999744889e-01 6.9675033974937317e-01 7.3161562894664178e-01 7.6523054465116569e-01 7.9726951141132441e-01 8.2741150090255378e-01 8.5534532730742252e-01 8.8077495795567795e-01 9.0342471353308673e-01 9.2304423073912845e-01 9.3941306281347581e-01 9.5234479989517640e-01 9.6169060160542530e-01 9.6734204827797121e-01 9.6923323447634413e-01 9.6734204827797121e-01 9.6169060160542530e-01 9.5234479989517640e-01 9.3941306281347581e-01 9.2304423073912845e-01 9.0342471353308673e-01 8.8077495795567795e-01 8.5534532730742252e-01 8.2741150090255378e-01 7.9726951141132441e-01 7.6523054465116569e-01 7.3161562894664178e-01 6.9675033974937317e-01 6.6095963999744889e-01 6.2456296802241085e-01 5.8786967312234650e-01 5.7762631975431722e-01 6.1368025119835856e-01 6.4944272823273841e-01 6.8460979182581672e-01 7.1886756970917576e-01 7.5189676127152860e-01 7.8337746406081821e-01 8.1299424352048699e-01 8.4044133610003946e-01 8.6542786735967525e-01 8.8768296156792947e-01 9.0696061788738358e-01 9.2304423073912845e-01 9.3575063836662076e-01 9.4493359386485609e-01 9.5048656672942344e-01 9.5234479989517640e-01 9.5048656672942344e-01 9.4493359386485609e-01 9.3575063836662076e-01 9.2304423073912845e-01 9.0696061788738358e-01 8.8768296156792947e-01 8.6542786735967525e-01 8.4044133610003946e-01 8.1299424352048699e-01 7.8337746406081821e-01 7.5189676127152860e-01 7.1886756970917576e-01 6.8460979182581672e-01 6.4944272823273841e-01 6.1368025119835856e-01 5.7762631975431722e-01 5.6534873961061416e-01 6.0063633645794234e-01 6.3563867382605199e-01 6.7005825340235914e-01 7.0358787434562753e-01 7.3591502285242671e-01 7.6672659607082005e-01 7.9571386407822486e-01 8.2257756239866464e-01 8.4703299919538910e-01 8.6881505626284317e-01 8.8768296156792947e-01 9.0342471353308673e-01 9.1586104354699049e-01 9.2484881321620482e-01 9.3028375636666649e-01 9.3210249235952758e-01 9.3028375636666649e-01 9.2484881321620482e-01 9.1586104354699049e-01 9.0342471353308673e-01 8.8768296156792947e-01 8.6881505626284317e-01 8.4703299919538910e-01 8.2257756239866464e-01 7.9571386407822486e-01 7.6672659607082005e-01 7.3591502285242671e-01 7.0358787434562753e-01 6.7005825340235914e-01 6.3563867382605199e-01 6.0063633645794234e-01 5.6534873961061416e-01 5.5117488474881937e-01 5.8557778646711967e-01 6.1970258044489490e-01 6.5325922694797267e-01 6.8594822696556568e-01 7.1746490172593602e-01 7.4750399817687097e-01 7.7576452656182626e-01 8.0195472526270872e-01 8.2579703995010068e-01 8.4703299919538910e-01 8.6542786735967525e-01 8.8077495795567795e-01 8.9289949681435277e-01 9.0166193416406737e-01 9.0696061788738358e-01 9.0873375636107001e-01 9.0696061788738358e-01 9.0166193416406737e-01 8.9289949681435277e-01 8.8077495795567795e-01 8.6542786735967525e-01 8.4703299919538910e-01 8.2579703995010068e-01 8.0195472526270872e-01 7.7576452656182626e-01 7.4750399817687097e-01 7.1746490172593602e-01 6.8594822696556568e-01 6.5325922694797267e-01 6.1970258044489490e-01 5.8557778646711967e-01 5.5117488474881937e-01 5.3526142851899028e-01 5.6867105371867210e-01 6.0181060067169445e-01 6.3439840363686328e-01 6.6614361070348771e-01 6.9675033974937317e-01 7.2592215095240831e-01 7.5336674469678067e-01 7.7880078307140488e-01 8.0195472526270872e-01 8.2257756239866464e-01 8.4044133610003946e-01 8.5534532730742252e-01 8.6711980791095333e-01 8.7562925720353824e-01 8.8077495795567795e-01 8.8249690258459546e-01 8.8077495795567795e-01 8.7562925720353824e-01 8.6711980791095333e-01 8.5534532730742252e-01 8.4044133610003946e-01 8.2257756239866464e-01 8.0195472526270872e-01 7.7880078307140488e-01 7.5336674469678067e-01 7.2592215095240831e-01 6.9675033974937317e-01 6.6614361070348771e-01 6.3439840363686328e-01 6.0181060067169445e-01 5.6867105371867210e-01 5.3526142851899028e-01 5.1778088662775290e-01 5.5009942190061234e-01 5.8215669912915313e-01 6.1368025119835856e-01 6.4438872482519527e-01 6.7399590079153104e-01 7.0221502039265316e-01 7.2876332991949122e-01 7.5336674469678067e-01 7.7576452656182626e-01 7.9571386407822486e-01 8.1299424352048699e-01 8.2741150090255378e-01 8.3880145108698256e-01 8.4703299919538910e-01 8.5201065190078951e-01 8.5367636134514768e-01 8.5201065190078951e-01 8.4703299919538910e-01 8.3880145108698256e-01 8.2741150090255378e-01 8.1299424352048699e-01 7.9571386407822486e-01 7.7576452656182626e-01 7.5336674469678067e-01 7.2876332991949122e-01 7.0221502039265316e-01 6.7399590079153104e-01 6.4438872482519527e-01 6.1368025119835856e-01 5.8215669912915313e-01 5.5009942190061234e-01 5.1778088662775290e-01 4.9891851158647194e-01 5.3005970650389300e-01 5.6094916081447077e-01 5.9132433317882593e-01 6.2091411980609579e-01 6.4944272823273841e-01 6.7663384616172895e-01 7.0221502039265316e-01 7.2592215095240831e-01 7.4750399817687097e-01 7.6672659607082005e-01 7.8337746406081821e-01 7.9726951141132441e-01 8.0824453412811437e-01 8.1617621302233978e-01 8.2097253351834554e-01 8.2257756239866464e-01 8.2097253351834554e-01 8.1617621302233978e-01 8.0824453412811437e-01 7.9726951141132441e-01 7.8337746406081821e-01 7.6672659607082005e-01 7.4750399817687097e-01 7.2592215095240831e-01 7.0221502039265316e-01 6.7663384616172895e-01 6.4944272823273841e-01 6.2091411980609579e-01 5.9132433317882593e-01 5.6094916081447077e-01 5.3005970650389300e-01 4.9891851158647194e-01 4.7886903850371154e-01 5.0875879749570174e-01 5.3840693229546044e-01 5.6756145201502428e-01 5.9596214740448550e-01 6.2334430895963433e-01 6.4944272823273841e-01 6.7399590079153104e-01 6.9675033974937317e-01 7.1746490172593602e-01 7.3591502285242671e-01 7.5189676127152860e-01 7.6523054465116569e-01 7.7576452656182626e-01 7.8337746406081821e-01 7.8798104025801019e-01 7.8952156966078790e-01 7.8798104025801019e-01 7.8337746406081821e-01 7.7576452656182626e-01 7.6523054465116569e-01 7.5189676127152860e-01 7.3591502285242671e-01 7.1746490172593602e-01 6.9675033974937317e-01 6.7399590079153104e-01 6.4944272823273841e-01 6.2334430895963433e-01 5.9596214740448550e-01 5.6756145201502428e-01 5.3840693229546044e-01 5.0875879749570174e-01 4.7886903850371154e-01 4.5783336177161427e-01 4.8641012857325439e-01 5.1475588520860704e-01 5.4262971020207929e-01 5.6978282473092301e-01 5.9596214740448550e-01 6.2091411980609579e-01 6.4438872482519527e-01 6.6614361070348771e-01 6.8594822696556568e-01 7.0358787434562753e-01 7.1886756970917576e-01 7.3161562894664178e-01 7.4168687591234372e-01 7.4896539360271563e-01 7.5336674469678067e-01 7.5483960198900735e-01 7.5336674469678067e-01 7.4896539360271563e-01 7.4168687591234372e-01 7.3161562894664178e-01 7.1886756970917576e-01 7.0358787434562753e-01 6.8594822696556568e-01 6.6614361070348771e-01 6.4438872482519527e-01 6.2091411980609579e-01 5.9596214740448550e-01 5.6978282473092301e-01 5.4262971020207929e-01 5.1475588520860704e-01 4.8641012857325439e-01 4.5783336177161427e-01 4.3601522130172388e-01 4.6323015656308297e-01 4.9022509049385532e-01 5.1677058277957666e-01 5.4262971020207929e-01 5.6756145201502428e-01 5.9132433317882593e-01 6.1368025119835856e-01 6.3439840363686328e-01 6.5325922694797267e-01 6.7005825340235914e-01 6.8460979182581672e-01 6.9675033974937317e-01 7.0634163942561956e-01 7.1327329789899030e-01 7.1746490172593602e-01 7.1886756970917576e-01 7.1746490172593602e-01 7.1327329789899030e-01 7.0634163942561956e-01 6.9675033974937317e-01 6.8460979182581672e-01 6.7005825340235914e-01 6.5325922694797267e-01 6.3439840363686328e-01 6.1368025119835856e-01 5.9132433317882593e-01 5.6756145201502428e-01 5.4262971020207929e-01 5.1677058277957666e-01 4.9022509049385532e-01 4.6323015656308297e-01 4.3601522130172388e-01 4.1361797370441067e-01 4.3943493106588422e-01 4.6504318813405632e-01 4.9022509049385532e-01 5.1475588520860704e-01 5.3840693229546044e-01 5.6094916081447077e-01 5.8215669912915313e-01 6.0181060067169445e-01 6.1970258044489490e-01 6.3563867382605199e-01 6.4944272823273841e-01 6.6095963999744889e-01 6.7005825340235914e-01 6.7663384616172895e-01 6.8061013551304317e-01 6.8194075119034814e-01 6.8061013551304317e-01 6.7663384616172895e-01 6.7005825340235914e-01 6.6095963999744889e-01 6.4944272823273841e-01 6.3563867382605199e-01 6.1970258044489490e-01 6.0181060067169445e-01 5.8215669912915313e-01 5.6094916081447077e-01 5.3840693229546044e-01 5.1475588520860704e-01 4.9022509049385532e-01 4.6504318813405632e-01 4.3943493106588422e-01 4.1361797370441067e-01 3.9084151837960834e-01 4.1523682868184131e-01 4.3943493106588422e-01 4.6323015656308297e-01 4.8641012857325439e-01 5.0875879749570174e-01 5.3005970650389300e-01 5.5009942190061234e-01 5.6867105371867210e-01 5.8557778646711967e-01 6.0063633645794234e-01 6.1368025119835856e-01 6.2456296802241085e-01 6.3316055348629974e-01 6.3937405198420272e-01 6.4313138137118653e-01 6.4438872482519527e-01 6.4313138137118653e-01 6.3937405198420272e-01 6.3316055348629974e-01 6.2456296802241085e-01 6.1368025119835856e-01 6.0063633645794234e-01 5.8557778646711967e-01 5.6867105371867210e-01 5.5009942190061234e-01 5.3005970650389300e-01 5.0875879749570174e-01 4.8641012857325439e-01 4.6323015656308297e-01 4.3943493106588422e-01 4.1523682868184131e-01 3.9084151837960834e-01 3.6787944117144233e-01 3.9084151837960834e-01 4.1361797370441067e-01 4.3601522130172388e-01 4.5783336177161427e-01 4.7886903850371154e-01 4.9891851158647194e-01 5.1778088662775290e-01 5.3526142851899028e-01 5.5117488474881937e-01 5.6534873961061416e-01 5.7762631975431722e-01 5.8786967312234650e-01 5.9596214740448550e-01 6.0181060067169445e-01 6.0534718563050682e-01 6.0653065971263342e-01 6.0534718563050682e-01 6.0181060067169445e-01 5.9596214740448550e-01 5.8786967312234650e-01 5.7762631975431722e-01 5.6534873961061416e-01 5.5117488474881937e-01 5.3526142851899028e-01 5.1778088662775290e-01 4.9891851158647194e-01 4.7886903850371154e-01 4.5783336177161427e-01 4.3601522130172388e-01 4.1361797370441067e-01 3.9084151837960834e-01 3.6787944117144233e-01 GMTSAR_V5.7/gmtsar/filters/gauss_tsx_100m.m000644 015705 000000 00000000541 13505462013 021440 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for tsx after 4 x 2 decimation so the 0.5 gain % is att 100 km wavelength % clear sigx=3.; sigy=3.; nx=7; ny=7; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_tsx_100m -ascii gauss GMTSAR_V5.7/gmtsar/filters/gauss3x21000644 015705 000000 00000003057 13505462013 020175 0ustar00sandwellwheel000000 000000 21 3 1.8315638888734179e-02 2.6782676492638175e-02 3.7628256807176200e-02 5.0792833864898503e-02 6.5874754426402976e-02 8.2084998623898800e-02 9.8273585604361502e-02 1.1304153064044985e-01 1.2493021219858241e-01 1.3265546508012172e-01 1.3533528323661270e-01 1.3265546508012172e-01 1.2493021219858241e-01 1.1304153064044985e-01 9.8273585604361502e-02 8.2084998623898800e-02 6.5874754426402976e-02 5.0792833864898503e-02 3.7628256807176200e-02 2.6782676492638175e-02 1.8315638888734179e-02 1.3533528323661270e-01 1.9789869908361465e-01 2.7803730045319408e-01 3.7531109885139957e-01 4.8675225595997168e-01 6.0653065971263342e-01 7.2614903707369094e-01 8.3527021141127200e-01 9.2311634638663576e-01 9.8019867330675525e-01 1.0000000000000000e+00 9.8019867330675525e-01 9.2311634638663576e-01 8.3527021141127200e-01 7.2614903707369094e-01 6.0653065971263342e-01 4.8675225595997168e-01 3.7531109885139957e-01 2.7803730045319408e-01 1.9789869908361465e-01 1.3533528323661270e-01 1.8315638888734179e-02 2.6782676492638175e-02 3.7628256807176200e-02 5.0792833864898503e-02 6.5874754426402976e-02 8.2084998623898800e-02 9.8273585604361502e-02 1.1304153064044985e-01 1.2493021219858241e-01 1.3265546508012172e-01 1.3533528323661270e-01 1.3265546508012172e-01 1.2493021219858241e-01 1.1304153064044985e-01 9.8273585604361502e-02 8.2084998623898800e-02 6.5874754426402976e-02 5.0792833864898503e-02 3.7628256807176200e-02 2.6782676492638175e-02 1.8315638888734179e-02 GMTSAR_V5.7/gmtsar/filters/gauss_ers_200m000644 015705 000000 00000003766 13505462013 021175 0ustar00sandwellwheel000000 000000 9 9 8.6860849005128124e-02 1.7235576631676686e-01 2.8118910837651029e-01 3.7717430677833419e-01 4.1596485279363227e-01 3.7717430677833419e-01 2.8118910837651029e-01 1.7235576631676686e-01 8.6860849005128124e-02 1.2749313243948338e-01 2.5298136955160189e-01 4.1272541824533826e-01 5.5361114239191378e-01 6.1054736022966816e-01 5.5361114239191378e-01 4.1272541824533826e-01 2.5298136955160189e-01 1.2749313243948338e-01 1.6769943245613345e-01 3.3276170476018868e-01 5.4288271905796148e-01 7.2819823785084037e-01 8.0308989071788695e-01 7.2819823785084037e-01 5.4288271905796148e-01 3.3276170476018868e-01 1.6769943245613345e-01 1.9767806148653011e-01 3.9224753340267682e-01 6.3993063033165543e-01 8.5837390102029842e-01 9.4665348875326483e-01 8.5837390102029842e-01 6.3993063033165543e-01 3.9224753340267682e-01 1.9767806148653011e-01 2.0881776049531126e-01 4.1435175390233203e-01 6.7599247024847398e-01 9.0674561623469008e-01 1.0000000000000000e+00 9.0674561623469008e-01 6.7599247024847398e-01 4.1435175390233203e-01 2.0881776049531126e-01 1.9767806148653011e-01 3.9224753340267682e-01 6.3993063033165543e-01 8.5837390102029842e-01 9.4665348875326483e-01 8.5837390102029842e-01 6.3993063033165543e-01 3.9224753340267682e-01 1.9767806148653011e-01 1.6769943245613345e-01 3.3276170476018868e-01 5.4288271905796148e-01 7.2819823785084037e-01 8.0308989071788695e-01 7.2819823785084037e-01 5.4288271905796148e-01 3.3276170476018868e-01 1.6769943245613345e-01 1.2749313243948338e-01 2.5298136955160189e-01 4.1272541824533826e-01 5.5361114239191378e-01 6.1054736022966816e-01 5.5361114239191378e-01 4.1272541824533826e-01 2.5298136955160189e-01 1.2749313243948338e-01 8.6860849005128124e-02 1.7235576631676686e-01 2.8118910837651029e-01 3.7717430677833419e-01 4.1596485279363227e-01 3.7717430677833419e-01 2.8118910837651029e-01 1.7235576631676686e-01 8.6860849005128124e-02 GMTSAR_V5.7/gmtsar/filters/gauss_ers_100m.m000644 015705 000000 00000000556 13505462013 021421 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for ers after 4 x 1 decimation so the 0.5 gain % is at 100 km wavelength % clear sigx=0.93; sigy=1.16; nx=5; ny=5; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_ers_100km -ASCII -double gauss GMTSAR_V5.7/gmtsar/filters/gauss_alos_100m000644 015705 000000 00000001172 13505462013 021326 0ustar00sandwellwheel000000 000000 5 5 8.6860849005128124e-02 2.8118910837651029e-01 4.1596485279363227e-01 2.8118910837651029e-01 8.6860849005128124e-02 1.6769943245613345e-01 5.4288271905796148e-01 8.0308989071788695e-01 5.4288271905796148e-01 1.6769943245613345e-01 2.0881776049531126e-01 6.7599247024847398e-01 1.0000000000000000e+00 6.7599247024847398e-01 2.0881776049531126e-01 1.6769943245613345e-01 5.4288271905796148e-01 8.0308989071788695e-01 5.4288271905796148e-01 1.6769943245613345e-01 8.6860849005128124e-02 2.8118910837651029e-01 4.1596485279363227e-01 2.8118910837651029e-01 8.6860849005128124e-02 GMTSAR_V5.7/gmtsar/filters/gauss15x3.m000644 015705 000000 00000000545 13505462013 020432 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter oriented along the San % Andreas fault % clear sigx=0.6; sigy=3; theta=30.*pi/180. cost=cos(theta); sint=sin(theta); nx=7; ny=15; xp=((-nx/2:(nx/2-1))+.5); yp=((-ny/2:(ny/2-1))+.5); x2=(xp*cost+yp*sint).^2; y2=(-xp*cost+yp*sint).^2; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); GMTSAR_V5.7/gmtsar/filters/gauss17x5000644 015705 000000 00000001551 13505462013 020201 0ustar00sandwellwheel000000 000000 5 17 0.018316 0.082085 0.135335 0.082085 0.018316 0.029268 0.131171 0.216265 0.131171 0.029268 0.043937 0.196912 0.324652 0.196912 0.043937 0.061961 0.277690 0.457833 0.277690 0.061961 0.082085 0.367879 0.606531 0.367879 0.082085 0.102156 0.457833 0.754840 0.457833 0.102156 0.119433 0.535261 0.882497 0.535261 0.119433 0.131171 0.587870 0.969233 0.587870 0.131171 0.135335 0.606531 1.000000 0.606531 0.135335 0.131171 0.587870 0.969233 0.587870 0.131171 0.119433 0.535261 0.882497 0.535261 0.119433 0.102156 0.457833 0.754840 0.457833 0.102156 0.082085 0.367879 0.606531 0.367879 0.082085 0.061961 0.277690 0.457833 0.277690 0.061961 0.043937 0.196912 0.324652 0.196912 0.043937 0.029268 0.131171 0.216265 0.131171 0.029268 0.018316 0.082085 0.135335 0.082085 0.018316 GMTSAR_V5.7/gmtsar/filters/gauss_alos_100m.m000644 015705 000000 00000000560 13505462013 021561 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for alos after 4 x 2 decimation so the 0.5 gail % is att 100 km wavelength % clear sigx=1.13; sigy=1.51; nx=5; ny=5; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_alos_100m -ASCII -double gauss GMTSAR_V5.7/gmtsar/filters/gauss15x15000644 015705 000000 00000013016 13505462013 020257 0ustar00sandwellwheel000000 000000 15 15 4.6770622383958980e-02 7.0211020014988038e-02 9.9013408363826300e-02 1.3117145431019428e-01 1.6324551245395841e-01 1.9085333986431632e-01 2.0961138715109781e-01 2.1626516682988731e-01 2.0961138715109781e-01 1.9085333986431632e-01 1.6324551245395841e-01 1.3117145431019428e-01 9.9013408363826300e-02 7.0211020014988038e-02 4.6770622383958980e-02 7.0211020014988038e-02 1.0539922456186433e-01 1.4863673053812251e-01 1.9691167520419406e-01 2.4506053924552590e-01 2.8650479686019009e-01 3.1466396101845900e-01 3.2465246735834974e-01 3.1466396101845900e-01 2.8650479686019009e-01 2.4506053924552590e-01 1.9691167520419406e-01 1.4863673053812251e-01 1.0539922456186433e-01 7.0211020014988038e-02 9.9013408363826300e-02 1.4863673053812251e-01 2.0961138715109781e-01 2.7768997095378994e-01 3.4559075257697452e-01 4.0403652366334208e-01 4.4374731008107987e-01 4.5783336177161427e-01 4.4374731008107987e-01 4.0403652366334208e-01 3.4559075257697452e-01 2.7768997095378994e-01 2.0961138715109781e-01 1.4863673053812251e-01 9.9013408363826300e-02 1.3117145431019428e-01 1.9691167520419406e-01 2.7768997095378994e-01 3.6787944117144233e-01 4.5783336177161427e-01 5.3526142851899028e-01 5.8786967312234650e-01 6.0653065971263342e-01 5.8786967312234650e-01 5.3526142851899028e-01 4.5783336177161427e-01 3.6787944117144233e-01 2.7768997095378994e-01 1.9691167520419406e-01 1.3117145431019428e-01 1.6324551245395841e-01 2.4506053924552590e-01 3.4559075257697452e-01 4.5783336177161427e-01 5.6978282473092301e-01 6.6614361070348771e-01 7.3161562894664178e-01 7.5483960198900735e-01 7.3161562894664178e-01 6.6614361070348771e-01 5.6978282473092301e-01 4.5783336177161427e-01 3.4559075257697452e-01 2.4506053924552590e-01 1.6324551245395841e-01 1.9085333986431632e-01 2.8650479686019009e-01 4.0403652366334208e-01 5.3526142851899028e-01 6.6614361070348771e-01 7.7880078307140488e-01 8.5534532730742252e-01 8.8249690258459546e-01 8.5534532730742252e-01 7.7880078307140488e-01 6.6614361070348771e-01 5.3526142851899028e-01 4.0403652366334208e-01 2.8650479686019009e-01 1.9085333986431632e-01 2.0961138715109781e-01 3.1466396101845900e-01 4.4374731008107987e-01 5.8786967312234650e-01 7.3161562894664178e-01 8.5534532730742252e-01 9.3941306281347581e-01 9.6923323447634413e-01 9.3941306281347581e-01 8.5534532730742252e-01 7.3161562894664178e-01 5.8786967312234650e-01 4.4374731008107987e-01 3.1466396101845900e-01 2.0961138715109781e-01 2.1626516682988731e-01 3.2465246735834974e-01 4.5783336177161427e-01 6.0653065971263342e-01 7.5483960198900735e-01 8.8249690258459546e-01 9.6923323447634413e-01 1.0000000000000000e+00 9.6923323447634413e-01 8.8249690258459546e-01 7.5483960198900735e-01 6.0653065971263342e-01 4.5783336177161427e-01 3.2465246735834974e-01 2.1626516682988731e-01 2.0961138715109781e-01 3.1466396101845900e-01 4.4374731008107987e-01 5.8786967312234650e-01 7.3161562894664178e-01 8.5534532730742252e-01 9.3941306281347581e-01 9.6923323447634413e-01 9.3941306281347581e-01 8.5534532730742252e-01 7.3161562894664178e-01 5.8786967312234650e-01 4.4374731008107987e-01 3.1466396101845900e-01 2.0961138715109781e-01 1.9085333986431632e-01 2.8650479686019009e-01 4.0403652366334208e-01 5.3526142851899028e-01 6.6614361070348771e-01 7.7880078307140488e-01 8.5534532730742252e-01 8.8249690258459546e-01 8.5534532730742252e-01 7.7880078307140488e-01 6.6614361070348771e-01 5.3526142851899028e-01 4.0403652366334208e-01 2.8650479686019009e-01 1.9085333986431632e-01 1.6324551245395841e-01 2.4506053924552590e-01 3.4559075257697452e-01 4.5783336177161427e-01 5.6978282473092301e-01 6.6614361070348771e-01 7.3161562894664178e-01 7.5483960198900735e-01 7.3161562894664178e-01 6.6614361070348771e-01 5.6978282473092301e-01 4.5783336177161427e-01 3.4559075257697452e-01 2.4506053924552590e-01 1.6324551245395841e-01 1.3117145431019428e-01 1.9691167520419406e-01 2.7768997095378994e-01 3.6787944117144233e-01 4.5783336177161427e-01 5.3526142851899028e-01 5.8786967312234650e-01 6.0653065971263342e-01 5.8786967312234650e-01 5.3526142851899028e-01 4.5783336177161427e-01 3.6787944117144233e-01 2.7768997095378994e-01 1.9691167520419406e-01 1.3117145431019428e-01 9.9013408363826300e-02 1.4863673053812251e-01 2.0961138715109781e-01 2.7768997095378994e-01 3.4559075257697452e-01 4.0403652366334208e-01 4.4374731008107987e-01 4.5783336177161427e-01 4.4374731008107987e-01 4.0403652366334208e-01 3.4559075257697452e-01 2.7768997095378994e-01 2.0961138715109781e-01 1.4863673053812251e-01 9.9013408363826300e-02 7.0211020014988038e-02 1.0539922456186433e-01 1.4863673053812251e-01 1.9691167520419406e-01 2.4506053924552590e-01 2.8650479686019009e-01 3.1466396101845900e-01 3.2465246735834974e-01 3.1466396101845900e-01 2.8650479686019009e-01 2.4506053924552590e-01 1.9691167520419406e-01 1.4863673053812251e-01 1.0539922456186433e-01 7.0211020014988038e-02 4.6770622383958980e-02 7.0211020014988038e-02 9.9013408363826300e-02 1.3117145431019428e-01 1.6324551245395841e-01 1.9085333986431632e-01 2.0961138715109781e-01 2.1626516682988731e-01 2.0961138715109781e-01 1.9085333986431632e-01 1.6324551245395841e-01 1.3117145431019428e-01 9.9013408363826300e-02 7.0211020014988038e-02 4.6770622383958980e-02 GMTSAR_V5.7/gmtsar/filters/gauss25x25000644 015705 000000 00000036450 13505462013 020270 0ustar00sandwellwheel000000 000000 25 25 3.6787944117144233e-01 3.9846369506125967e-01 4.2860384615383690e-01 4.5783336177161427e-01 4.8567178524771237e-01 5.1163751208597108e-01 5.3526142851899028e-01 5.5610088377320865e-01 5.7375342073743274e-01 5.8786967312234650e-01 5.9816485313198164e-01 6.0442830251543478e-01 6.0653065971263342e-01 6.0442830251543478e-01 5.9816485313198164e-01 5.8786967312234650e-01 5.7375342073743274e-01 5.5610088377320865e-01 5.3526142851899028e-01 5.1163751208597108e-01 4.8567178524771237e-01 4.5783336177161427e-01 4.2860384615383690e-01 3.9846369506125967e-01 3.6787944117144233e-01 3.9846369506125967e-01 4.3159062049319485e-01 4.6423652192169051e-01 4.9589608071851543e-01 5.2604889667268739e-01 5.5417332631729532e-01 5.7976125535117784e-01 6.0233323251091775e-01 6.2145334176076350e-01 6.3674317167840966e-01 6.4789425817266211e-01 6.5467842957732847e-01 6.5695556964926849e-01 6.5467842957732847e-01 6.4789425817266211e-01 6.3674317167840966e-01 6.2145334176076350e-01 6.0233323251091775e-01 5.7976125535117784e-01 5.5417332631729532e-01 5.2604889667268739e-01 4.9589608071851543e-01 4.6423652192169051e-01 4.3159062049319485e-01 3.9846369506125967e-01 4.2860384615383690e-01 4.6423652192169051e-01 4.9935178859927615e-01 5.3340610480433592e-01 5.6583970678742268e-01 5.9609149350216650e-01 6.2361491642617306e-01 6.4789425817266200e-01 6.6846062962616570e-01 6.8490699598517257e-01 6.9690156065811215e-01 7.0419889286941895e-01 7.0664827785771622e-01 7.0419889286941895e-01 6.9690156065811215e-01 6.8490699598517257e-01 6.6846062962616570e-01 6.4789425817266200e-01 6.2361491642617306e-01 5.9609149350216650e-01 5.6583970678742268e-01 5.3340610480433592e-01 4.9935178859927615e-01 4.6423652192169051e-01 4.2860384615383690e-01 4.5783336177161427e-01 4.9589608071851543e-01 5.3340610480433592e-01 5.6978282473092301e-01 6.0442830251543478e-01 6.3674317167840955e-01 6.6614361070348771e-01 6.9207873180225443e-01 7.1404766900731564e-01 7.3161562894664178e-01 7.4442818748170425e-01 7.5222317618338685e-01 7.5483960198900735e-01 7.5222317618338685e-01 7.4442818748170425e-01 7.3161562894664178e-01 7.1404766900731564e-01 6.9207873180225443e-01 6.6614361070348771e-01 6.3674317167840955e-01 6.0442830251543478e-01 5.6978282473092301e-01 5.3340610480433592e-01 4.9589608071851543e-01 4.5783336177161427e-01 4.8567178524771237e-01 5.2604889667268739e-01 5.6583970678742268e-01 6.0442830251543478e-01 6.4118038842995462e-01 6.7546015374827406e-01 7.0664827785771633e-01 7.3416037639923104e-01 7.5746512839696645e-01 7.7610130299524549e-01 7.8969292539959679e-01 7.9796188610635388e-01 8.0073740291680806e-01 7.9796188610635388e-01 7.8969292539959679e-01 7.7610130299524549e-01 7.5746512839696645e-01 7.3416037639923104e-01 7.0664827785771633e-01 6.7546015374827406e-01 6.4118038842995462e-01 6.0442830251543478e-01 5.6583970678742268e-01 5.2604889667268739e-01 4.8567178524771237e-01 5.1163751208597108e-01 5.5417332631729532e-01 5.9609149350216650e-01 6.3674317167840955e-01 6.7546015374827406e-01 7.1157263624179690e-01 7.4442818748170414e-01 7.7341117985970542e-01 7.9796188610635377e-01 8.1759441633744401e-01 8.3191269481974750e-01 8.4062374333450529e-01 8.4354764906423441e-01 8.4062374333450529e-01 8.3191269481974750e-01 8.1759441633744401e-01 7.9796188610635377e-01 7.7341117985970542e-01 7.4442818748170414e-01 7.1157263624179690e-01 6.7546015374827406e-01 6.3674317167840955e-01 5.9609149350216650e-01 5.5417332631729532e-01 5.1163751208597108e-01 5.3526142851899028e-01 5.7976125535117784e-01 6.2361491642617306e-01 6.6614361070348771e-01 7.0664827785771633e-01 7.4442818748170414e-01 7.7880078307140488e-01 8.0912201155161290e-01 8.3480630128078936e-01 8.5534532730742252e-01 8.7032472583339060e-01 8.7943799091221064e-01 8.8249690258459546e-01 8.7943799091221064e-01 8.7032472583339060e-01 8.5534532730742252e-01 8.3480630128078936e-01 8.0912201155161290e-01 7.7880078307140488e-01 7.4442818748170414e-01 7.0664827785771633e-01 6.6614361070348771e-01 6.2361491642617306e-01 5.7976125535117784e-01 5.3526142851899028e-01 5.5610088377320865e-01 6.0233323251091775e-01 6.4789425817266200e-01 6.9207873180225443e-01 7.3416037639923104e-01 7.7341117985970542e-01 8.0912201155161290e-01 8.4062374333450529e-01 8.6730800537259367e-01 8.8864668198311347e-01 9.0420927684770191e-01 9.1367735075396794e-01 9.1685535573202892e-01 9.1367735075396794e-01 9.0420927684770191e-01 8.8864668198311347e-01 8.6730800537259367e-01 8.4062374333450529e-01 8.0912201155161290e-01 7.7341117985970542e-01 7.3416037639923104e-01 6.9207873180225443e-01 6.4789425817266200e-01 6.0233323251091775e-01 5.5610088377320865e-01 5.7375342073743274e-01 6.2145334176076350e-01 6.6846062962616570e-01 7.1404766900731564e-01 7.5746512839696645e-01 7.9796188610635377e-01 8.3480630128078936e-01 8.6730800537259367e-01 8.9483931681436979e-01 9.1685535573202892e-01 9.3291196038714741e-01 9.4268058322165171e-01 9.4595946890676541e-01 9.4268058322165171e-01 9.3291196038714741e-01 9.1685535573202892e-01 8.9483931681436979e-01 8.6730800537259367e-01 8.3480630128078936e-01 7.9796188610635377e-01 7.5746512839696645e-01 7.1404766900731564e-01 6.6846062962616570e-01 6.2145334176076350e-01 5.7375342073743274e-01 5.8786967312234650e-01 6.3674317167840966e-01 6.8490699598517257e-01 7.3161562894664178e-01 7.7610130299524549e-01 8.1759441633744401e-01 8.5534532730742252e-01 8.8864668198311347e-01 9.1685535573202892e-01 9.3941306281347581e-01 9.5586471362529535e-01 9.6587367724104967e-01 9.6923323447634413e-01 9.6587367724104967e-01 9.5586471362529535e-01 9.3941306281347581e-01 9.1685535573202892e-01 8.8864668198311347e-01 8.5534532730742252e-01 8.1759441633744401e-01 7.7610130299524549e-01 7.3161562894664178e-01 6.8490699598517257e-01 6.3674317167840966e-01 5.8786967312234650e-01 5.9816485313198164e-01 6.4789425817266211e-01 6.9690156065811215e-01 7.4442818748170425e-01 7.8969292539959679e-01 8.3191269481974750e-01 8.7032472583339060e-01 9.0420927684770191e-01 9.3291196038714741e-01 9.5586471362529535e-01 9.7260447711634834e-01 9.8278872462042910e-01 9.8620711674391626e-01 9.8278872462042910e-01 9.7260447711634834e-01 9.5586471362529535e-01 9.3291196038714741e-01 9.0420927684770191e-01 8.7032472583339060e-01 8.3191269481974750e-01 7.8969292539959679e-01 7.4442818748170425e-01 6.9690156065811215e-01 6.4789425817266211e-01 5.9816485313198164e-01 6.0442830251543478e-01 6.5467842957732847e-01 7.0419889286941895e-01 7.5222317618338685e-01 7.9796188610635388e-01 8.4062374333450529e-01 8.7943799091221064e-01 9.1367735075396794e-01 9.4268058322165171e-01 9.6587367724104967e-01 9.8278872462042910e-01 9.9307961249031607e-01 9.9653379897036909e-01 9.9307961249031607e-01 9.8278872462042910e-01 9.6587367724104967e-01 9.4268058322165171e-01 9.1367735075396794e-01 8.7943799091221064e-01 8.4062374333450529e-01 7.9796188610635388e-01 7.5222317618338685e-01 7.0419889286941895e-01 6.5467842957732847e-01 6.0442830251543478e-01 6.0653065971263342e-01 6.5695556964926849e-01 7.0664827785771622e-01 7.5483960198900735e-01 8.0073740291680806e-01 8.4354764906423441e-01 8.8249690258459546e-01 9.1685535573202892e-01 9.4595946890676541e-01 9.6923323447634413e-01 9.8620711674391626e-01 9.9653379897036909e-01 1.0000000000000000e+00 9.9653379897036909e-01 9.8620711674391626e-01 9.6923323447634413e-01 9.4595946890676541e-01 9.1685535573202892e-01 8.8249690258459546e-01 8.4354764906423441e-01 8.0073740291680806e-01 7.5483960198900735e-01 7.0664827785771622e-01 6.5695556964926849e-01 6.0653065971263342e-01 6.0442830251543478e-01 6.5467842957732847e-01 7.0419889286941895e-01 7.5222317618338685e-01 7.9796188610635388e-01 8.4062374333450529e-01 8.7943799091221064e-01 9.1367735075396794e-01 9.4268058322165171e-01 9.6587367724104967e-01 9.8278872462042910e-01 9.9307961249031607e-01 9.9653379897036909e-01 9.9307961249031607e-01 9.8278872462042910e-01 9.6587367724104967e-01 9.4268058322165171e-01 9.1367735075396794e-01 8.7943799091221064e-01 8.4062374333450529e-01 7.9796188610635388e-01 7.5222317618338685e-01 7.0419889286941895e-01 6.5467842957732847e-01 6.0442830251543478e-01 5.9816485313198164e-01 6.4789425817266211e-01 6.9690156065811215e-01 7.4442818748170425e-01 7.8969292539959679e-01 8.3191269481974750e-01 8.7032472583339060e-01 9.0420927684770191e-01 9.3291196038714741e-01 9.5586471362529535e-01 9.7260447711634834e-01 9.8278872462042910e-01 9.8620711674391626e-01 9.8278872462042910e-01 9.7260447711634834e-01 9.5586471362529535e-01 9.3291196038714741e-01 9.0420927684770191e-01 8.7032472583339060e-01 8.3191269481974750e-01 7.8969292539959679e-01 7.4442818748170425e-01 6.9690156065811215e-01 6.4789425817266211e-01 5.9816485313198164e-01 5.8786967312234650e-01 6.3674317167840966e-01 6.8490699598517257e-01 7.3161562894664178e-01 7.7610130299524549e-01 8.1759441633744401e-01 8.5534532730742252e-01 8.8864668198311347e-01 9.1685535573202892e-01 9.3941306281347581e-01 9.5586471362529535e-01 9.6587367724104967e-01 9.6923323447634413e-01 9.6587367724104967e-01 9.5586471362529535e-01 9.3941306281347581e-01 9.1685535573202892e-01 8.8864668198311347e-01 8.5534532730742252e-01 8.1759441633744401e-01 7.7610130299524549e-01 7.3161562894664178e-01 6.8490699598517257e-01 6.3674317167840966e-01 5.8786967312234650e-01 5.7375342073743274e-01 6.2145334176076350e-01 6.6846062962616570e-01 7.1404766900731564e-01 7.5746512839696645e-01 7.9796188610635377e-01 8.3480630128078936e-01 8.6730800537259367e-01 8.9483931681436979e-01 9.1685535573202892e-01 9.3291196038714741e-01 9.4268058322165171e-01 9.4595946890676541e-01 9.4268058322165171e-01 9.3291196038714741e-01 9.1685535573202892e-01 8.9483931681436979e-01 8.6730800537259367e-01 8.3480630128078936e-01 7.9796188610635377e-01 7.5746512839696645e-01 7.1404766900731564e-01 6.6846062962616570e-01 6.2145334176076350e-01 5.7375342073743274e-01 5.5610088377320865e-01 6.0233323251091775e-01 6.4789425817266200e-01 6.9207873180225443e-01 7.3416037639923104e-01 7.7341117985970542e-01 8.0912201155161290e-01 8.4062374333450529e-01 8.6730800537259367e-01 8.8864668198311347e-01 9.0420927684770191e-01 9.1367735075396794e-01 9.1685535573202892e-01 9.1367735075396794e-01 9.0420927684770191e-01 8.8864668198311347e-01 8.6730800537259367e-01 8.4062374333450529e-01 8.0912201155161290e-01 7.7341117985970542e-01 7.3416037639923104e-01 6.9207873180225443e-01 6.4789425817266200e-01 6.0233323251091775e-01 5.5610088377320865e-01 5.3526142851899028e-01 5.7976125535117784e-01 6.2361491642617306e-01 6.6614361070348771e-01 7.0664827785771633e-01 7.4442818748170414e-01 7.7880078307140488e-01 8.0912201155161290e-01 8.3480630128078936e-01 8.5534532730742252e-01 8.7032472583339060e-01 8.7943799091221064e-01 8.8249690258459546e-01 8.7943799091221064e-01 8.7032472583339060e-01 8.5534532730742252e-01 8.3480630128078936e-01 8.0912201155161290e-01 7.7880078307140488e-01 7.4442818748170414e-01 7.0664827785771633e-01 6.6614361070348771e-01 6.2361491642617306e-01 5.7976125535117784e-01 5.3526142851899028e-01 5.1163751208597108e-01 5.5417332631729532e-01 5.9609149350216650e-01 6.3674317167840955e-01 6.7546015374827406e-01 7.1157263624179690e-01 7.4442818748170414e-01 7.7341117985970542e-01 7.9796188610635377e-01 8.1759441633744401e-01 8.3191269481974750e-01 8.4062374333450529e-01 8.4354764906423441e-01 8.4062374333450529e-01 8.3191269481974750e-01 8.1759441633744401e-01 7.9796188610635377e-01 7.7341117985970542e-01 7.4442818748170414e-01 7.1157263624179690e-01 6.7546015374827406e-01 6.3674317167840955e-01 5.9609149350216650e-01 5.5417332631729532e-01 5.1163751208597108e-01 4.8567178524771237e-01 5.2604889667268739e-01 5.6583970678742268e-01 6.0442830251543478e-01 6.4118038842995462e-01 6.7546015374827406e-01 7.0664827785771633e-01 7.3416037639923104e-01 7.5746512839696645e-01 7.7610130299524549e-01 7.8969292539959679e-01 7.9796188610635388e-01 8.0073740291680806e-01 7.9796188610635388e-01 7.8969292539959679e-01 7.7610130299524549e-01 7.5746512839696645e-01 7.3416037639923104e-01 7.0664827785771633e-01 6.7546015374827406e-01 6.4118038842995462e-01 6.0442830251543478e-01 5.6583970678742268e-01 5.2604889667268739e-01 4.8567178524771237e-01 4.5783336177161427e-01 4.9589608071851543e-01 5.3340610480433592e-01 5.6978282473092301e-01 6.0442830251543478e-01 6.3674317167840955e-01 6.6614361070348771e-01 6.9207873180225443e-01 7.1404766900731564e-01 7.3161562894664178e-01 7.4442818748170425e-01 7.5222317618338685e-01 7.5483960198900735e-01 7.5222317618338685e-01 7.4442818748170425e-01 7.3161562894664178e-01 7.1404766900731564e-01 6.9207873180225443e-01 6.6614361070348771e-01 6.3674317167840955e-01 6.0442830251543478e-01 5.6978282473092301e-01 5.3340610480433592e-01 4.9589608071851543e-01 4.5783336177161427e-01 4.2860384615383690e-01 4.6423652192169051e-01 4.9935178859927615e-01 5.3340610480433592e-01 5.6583970678742268e-01 5.9609149350216650e-01 6.2361491642617306e-01 6.4789425817266200e-01 6.6846062962616570e-01 6.8490699598517257e-01 6.9690156065811215e-01 7.0419889286941895e-01 7.0664827785771622e-01 7.0419889286941895e-01 6.9690156065811215e-01 6.8490699598517257e-01 6.6846062962616570e-01 6.4789425817266200e-01 6.2361491642617306e-01 5.9609149350216650e-01 5.6583970678742268e-01 5.3340610480433592e-01 4.9935178859927615e-01 4.6423652192169051e-01 4.2860384615383690e-01 3.9846369506125967e-01 4.3159062049319485e-01 4.6423652192169051e-01 4.9589608071851543e-01 5.2604889667268739e-01 5.5417332631729532e-01 5.7976125535117784e-01 6.0233323251091775e-01 6.2145334176076350e-01 6.3674317167840966e-01 6.4789425817266211e-01 6.5467842957732847e-01 6.5695556964926849e-01 6.5467842957732847e-01 6.4789425817266211e-01 6.3674317167840966e-01 6.2145334176076350e-01 6.0233323251091775e-01 5.7976125535117784e-01 5.5417332631729532e-01 5.2604889667268739e-01 4.9589608071851543e-01 4.6423652192169051e-01 4.3159062049319485e-01 3.9846369506125967e-01 3.6787944117144233e-01 3.9846369506125967e-01 4.2860384615383690e-01 4.5783336177161427e-01 4.8567178524771237e-01 5.1163751208597108e-01 5.3526142851899028e-01 5.5610088377320865e-01 5.7375342073743274e-01 5.8786967312234650e-01 5.9816485313198164e-01 6.0442830251543478e-01 6.0653065971263342e-01 6.0442830251543478e-01 5.9816485313198164e-01 5.8786967312234650e-01 5.7375342073743274e-01 5.5610088377320865e-01 5.3526142851899028e-01 5.1163751208597108e-01 4.8567178524771237e-01 4.5783336177161427e-01 4.2860384615383690e-01 3.9846369506125967e-01 3.6787944117144233e-01 GMTSAR_V5.7/gmtsar/filters/gauss29x29000644 015705 000000 00000051104 13505462013 020271 0ustar00sandwellwheel000000 000000 29 29 3.6787944117144233e-01 3.9411109241650727e-01 4.2006452910691128e-01 4.4544857564370921e-01 4.6996265691059791e-01 4.9330252455860574e-01 5.1516640906053812e-01 5.3526142851899028e-01 5.5331006704435692e-01 5.6905652422419184e-01 5.8227273363059850e-01 5.9276385294463241e-01 6.0037304119840440e-01 6.0498535950574184e-01 6.0653065971263342e-01 6.0498535950574184e-01 6.0037304119840440e-01 5.9276385294463241e-01 5.8227273363059850e-01 5.6905652422419184e-01 5.5331006704435692e-01 5.3526142851899028e-01 5.1516640906053812e-01 4.9330252455860574e-01 4.6996265691059791e-01 4.4544857564370921e-01 4.2006452910691128e-01 3.9411109241650727e-01 3.6787944117144233e-01 3.9411109241650727e-01 4.2221319210210367e-01 4.5001723913840164e-01 4.7721129564428472e-01 5.0347335398849669e-01 5.2847747138718093e-01 5.5190036063069603e-01 5.7342825587181856e-01 5.9276385294463241e-01 6.0963311158293287e-01 6.2379170307741350e-01 6.3503089187350303e-01 6.4318265345481795e-01 6.4812385321550336e-01 6.4977934108595947e-01 6.4812385321550336e-01 6.4318265345481795e-01 6.3503089187350303e-01 6.2379170307741350e-01 6.0963311158293287e-01 5.9276385294463241e-01 5.7342825587181856e-01 5.5190036063069603e-01 5.2847747138718093e-01 5.0347335398849669e-01 4.7721129564428472e-01 4.5001723913840164e-01 4.2221319210210367e-01 3.9411109241650727e-01 4.2006452910691128e-01 4.5001723913840164e-01 4.7965226883004430e-01 5.0863713822463141e-01 5.3662863449056497e-01 5.6327935050165345e-01 5.8824470958371211e-01 6.1119028343619353e-01 6.3179918949258207e-01 6.4977934108595958e-01 6.6487031970439592e-01 6.7684964391023072e-01 6.8553822425200905e-01 6.9080481732851629e-01 6.9256932420519779e-01 6.9080481732851629e-01 6.8553822425200905e-01 6.7684964391023072e-01 6.6487031970439592e-01 6.4977934108595958e-01 6.3179918949258207e-01 6.1119028343619353e-01 5.8824470958371211e-01 5.6327935050165345e-01 5.3662863449056497e-01 5.0863713822463141e-01 4.7965226883004430e-01 4.5001723913840164e-01 4.2006452910691128e-01 4.4544857564370921e-01 4.7721129564428472e-01 5.0863713822463141e-01 5.3937353202224170e-01 5.6905652422419184e-01 5.9731771426626490e-01 6.2379170307741350e-01 6.4812385321550336e-01 6.6997813324222000e-01 6.8904480600832141e-01 7.0504771619201201e-01 7.1775093804225576e-01 7.2696455992515951e-01 7.3254940754229336e-01 7.3442054166685833e-01 7.3254940754229336e-01 7.2696455992515951e-01 7.1775093804225576e-01 7.0504771619201201e-01 6.8904480600832141e-01 6.6997813324222000e-01 6.4812385321550336e-01 6.2379170307741350e-01 5.9731771426626490e-01 5.6905652422419184e-01 5.3937353202224170e-01 5.0863713822463141e-01 4.7721129564428472e-01 4.4544857564370921e-01 4.6996265691059791e-01 5.0347335398849669e-01 5.3662863449056497e-01 5.6905652422419184e-01 6.0037304119840440e-01 6.3018951090073738e-01 6.5812042549111271e-01 6.8379163099607920e-01 7.0684860337809208e-01 7.2696455992515951e-01 7.4384814783956865e-01 7.5725045782212541e-01 7.6697112695571013e-01 7.7286332185339535e-01 7.7483742888324936e-01 7.7286332185339535e-01 7.6697112695571013e-01 7.5725045782212541e-01 7.4384814783956865e-01 7.2696455992515951e-01 7.0684860337809208e-01 6.8379163099607920e-01 6.5812042549111271e-01 6.3018951090073738e-01 6.0037304119840440e-01 5.6905652422419184e-01 5.3662863449056497e-01 5.0347335398849669e-01 4.6996265691059791e-01 4.9330252455860574e-01 5.2847747138718093e-01 5.6327935050165345e-01 5.9731771426626490e-01 6.3018951090073738e-01 6.6148676305748488e-01 6.9080481732851617e-01 7.1775093804225576e-01 7.4195299434922901e-01 7.6306797444958896e-01 7.8079005602206075e-01 7.9485796812548970e-01 8.0506139717136060e-01 8.1124621755118997e-01 8.1331836512984568e-01 8.1124621755118997e-01 8.0506139717136060e-01 7.9485796812548970e-01 7.8079005602206075e-01 7.6306797444958896e-01 7.4195299434922901e-01 7.1775093804225576e-01 6.9080481732851617e-01 6.6148676305748488e-01 6.3018951090073738e-01 5.9731771426626490e-01 5.6327935050165345e-01 5.2847747138718093e-01 4.9330252455860574e-01 5.1516640906053812e-01 5.5190036063069603e-01 5.8824470958371211e-01 6.2379170307741350e-01 6.5812042549111271e-01 6.9080481732851617e-01 7.2142229035475625e-01 7.4956270228277133e-01 7.7483742888324936e-01 7.9688825557508569e-01 8.1539580554746294e-01 8.3008722795156986e-01 8.4074288779512862e-01 8.4720182839879177e-01 8.4936581656831245e-01 8.4720182839879177e-01 8.4074288779512862e-01 8.3008722795156986e-01 8.1539580554746294e-01 7.9688825557508569e-01 7.7483742888324936e-01 7.4956270228277133e-01 7.2142229035475625e-01 6.9080481732851617e-01 6.5812042549111271e-01 6.2379170307741350e-01 5.8824470958371211e-01 5.5190036063069603e-01 5.1516640906053812e-01 5.3526142851899028e-01 5.7342825587181856e-01 6.1119028343619353e-01 6.4812385321550336e-01 6.8379163099607920e-01 7.1775093804225576e-01 7.4956270228277133e-01 7.7880078307140488e-01 8.0506139717136072e-01 8.2797235717867368e-01 8.4720182839879177e-01 8.6246631693044606e-01 8.7353762051189809e-01 8.8024850405056032e-01 8.8249690258459546e-01 8.8024850405056032e-01 8.7353762051189809e-01 8.6246631693044606e-01 8.4720182839879177e-01 8.2797235717867368e-01 8.0506139717136072e-01 7.7880078307140488e-01 7.4956270228277133e-01 7.1775093804225576e-01 6.8379163099607920e-01 6.4812385321550336e-01 6.1119028343619353e-01 5.7342825587181856e-01 5.3526142851899028e-01 5.5331006704435692e-01 5.9276385294463241e-01 6.3179918949258207e-01 6.6997813324222000e-01 7.0684860337809208e-01 7.4195299434922901e-01 7.7483742888324936e-01 8.0506139717136072e-01 8.3220750069030125e-01 8.5589100213887825e-01 8.7576887759026367e-01 8.9154807392842805e-01 9.0299269407203009e-01 9.0992986387890007e-01 9.1225407682854520e-01 9.0992986387890007e-01 9.0299269407203009e-01 8.9154807392842805e-01 8.7576887759026367e-01 8.5589100213887825e-01 8.3220750069030125e-01 8.0506139717136072e-01 7.7483742888324936e-01 7.4195299434922901e-01 7.0684860337809208e-01 6.6997813324222000e-01 6.3179918949258207e-01 5.9276385294463241e-01 5.5331006704435692e-01 5.6905652422419184e-01 6.0963311158293287e-01 6.4977934108595958e-01 6.8904480600832141e-01 7.2696455992515951e-01 7.6306797444958896e-01 7.9688825557508569e-01 8.2797235717867368e-01 8.5589100213887825e-01 8.8024850405056032e-01 9.0069207698923948e-01 9.1692032794301626e-01 9.2869064651822897e-01 9.3582523880811397e-01 9.3821559571910784e-01 9.3582523880811397e-01 9.2869064651822897e-01 9.1692032794301626e-01 9.0069207698923948e-01 8.8024850405056032e-01 8.5589100213887825e-01 8.2797235717867368e-01 7.9688825557508569e-01 7.6306797444958896e-01 7.2696455992515951e-01 6.8904480600832141e-01 6.4977934108595958e-01 6.0963311158293287e-01 5.6905652422419184e-01 5.8227273363059850e-01 6.2379170307741350e-01 6.6487031970439592e-01 7.0504771619201201e-01 7.4384814783956865e-01 7.8079005602206075e-01 8.1539580554746294e-01 8.4720182839879177e-01 8.7576887759026367e-01 9.0069207698923948e-01 9.2161044729772479e-01 9.3821559571910784e-01 9.5025927728806214e-01 9.5755956887444671e-01 9.6000544128547771e-01 9.5755956887444671e-01 9.5025927728806214e-01 9.3821559571910784e-01 9.2161044729772479e-01 9.0069207698923948e-01 8.7576887759026367e-01 8.4720182839879177e-01 8.1539580554746294e-01 7.8079005602206075e-01 7.4384814783956865e-01 7.0504771619201201e-01 6.6487031970439592e-01 6.2379170307741350e-01 5.8227273363059850e-01 5.9276385294463241e-01 6.3503089187350303e-01 6.7684964391023072e-01 7.1775093804225576e-01 7.5725045782212541e-01 7.9485796812548970e-01 8.3008722795156986e-01 8.6246631693044606e-01 8.9154807392842805e-01 9.1692032794301626e-01 9.3821559571910784e-01 9.5511992798210699e-01 9.6738060700435480e-01 9.7481243184935951e-01 9.7730237285197818e-01 9.7481243184935951e-01 9.6738060700435480e-01 9.5511992798210699e-01 9.3821559571910784e-01 9.1692032794301626e-01 8.9154807392842805e-01 8.6246631693044606e-01 8.3008722795156986e-01 7.9485796812548970e-01 7.5725045782212541e-01 7.1775093804225576e-01 6.7684964391023072e-01 6.3503089187350303e-01 5.9276385294463241e-01 6.0037304119840440e-01 6.4318265345481795e-01 6.8553822425200905e-01 7.2696455992515951e-01 7.6697112695571013e-01 8.0506139717136060e-01 8.4074288779512862e-01 8.7353762051189809e-01 9.0299269407203009e-01 9.2869064651822897e-01 9.5025927728806214e-01 9.6738060700435480e-01 9.7979867385370434e-01 9.8732589951310379e-01 9.8984780337873379e-01 9.8732589951310379e-01 9.7979867385370434e-01 9.6738060700435480e-01 9.5025927728806214e-01 9.2869064651822897e-01 9.0299269407203009e-01 8.7353762051189809e-01 8.4074288779512862e-01 8.0506139717136060e-01 7.6697112695571013e-01 7.2696455992515951e-01 6.8553822425200905e-01 6.4318265345481795e-01 6.0037304119840440e-01 6.0498535950574184e-01 6.4812385321550336e-01 6.9080481732851629e-01 7.3254940754229336e-01 7.7286332185339535e-01 8.1124621755118997e-01 8.4720182839879177e-01 8.8024850405056032e-01 9.0992986387890007e-01 9.3582523880811397e-01 9.5755956887444671e-01 9.7481243184935951e-01 9.8732589951310379e-01 9.9491095248707251e-01 9.9745223067928046e-01 9.9491095248707251e-01 9.8732589951310379e-01 9.7481243184935951e-01 9.5755956887444671e-01 9.3582523880811397e-01 9.0992986387890007e-01 8.8024850405056032e-01 8.4720182839879177e-01 8.1124621755118997e-01 7.7286332185339535e-01 7.3254940754229336e-01 6.9080481732851629e-01 6.4812385321550336e-01 6.0498535950574184e-01 6.0653065971263342e-01 6.4977934108595947e-01 6.9256932420519779e-01 7.3442054166685833e-01 7.7483742888324936e-01 8.1331836512984568e-01 8.4936581656831245e-01 8.8249690258459546e-01 9.1225407682854520e-01 9.3821559571910784e-01 9.6000544128547771e-01 9.7730237285197818e-01 9.8984780337873379e-01 9.9745223067928046e-01 1.0000000000000000e+00 9.9745223067928046e-01 9.8984780337873379e-01 9.7730237285197818e-01 9.6000544128547771e-01 9.3821559571910784e-01 9.1225407682854520e-01 8.8249690258459546e-01 8.4936581656831245e-01 8.1331836512984568e-01 7.7483742888324936e-01 7.3442054166685833e-01 6.9256932420519779e-01 6.4977934108595947e-01 6.0653065971263342e-01 6.0498535950574184e-01 6.4812385321550336e-01 6.9080481732851629e-01 7.3254940754229336e-01 7.7286332185339535e-01 8.1124621755118997e-01 8.4720182839879177e-01 8.8024850405056032e-01 9.0992986387890007e-01 9.3582523880811397e-01 9.5755956887444671e-01 9.7481243184935951e-01 9.8732589951310379e-01 9.9491095248707251e-01 9.9745223067928046e-01 9.9491095248707251e-01 9.8732589951310379e-01 9.7481243184935951e-01 9.5755956887444671e-01 9.3582523880811397e-01 9.0992986387890007e-01 8.8024850405056032e-01 8.4720182839879177e-01 8.1124621755118997e-01 7.7286332185339535e-01 7.3254940754229336e-01 6.9080481732851629e-01 6.4812385321550336e-01 6.0498535950574184e-01 6.0037304119840440e-01 6.4318265345481795e-01 6.8553822425200905e-01 7.2696455992515951e-01 7.6697112695571013e-01 8.0506139717136060e-01 8.4074288779512862e-01 8.7353762051189809e-01 9.0299269407203009e-01 9.2869064651822897e-01 9.5025927728806214e-01 9.6738060700435480e-01 9.7979867385370434e-01 9.8732589951310379e-01 9.8984780337873379e-01 9.8732589951310379e-01 9.7979867385370434e-01 9.6738060700435480e-01 9.5025927728806214e-01 9.2869064651822897e-01 9.0299269407203009e-01 8.7353762051189809e-01 8.4074288779512862e-01 8.0506139717136060e-01 7.6697112695571013e-01 7.2696455992515951e-01 6.8553822425200905e-01 6.4318265345481795e-01 6.0037304119840440e-01 5.9276385294463241e-01 6.3503089187350303e-01 6.7684964391023072e-01 7.1775093804225576e-01 7.5725045782212541e-01 7.9485796812548970e-01 8.3008722795156986e-01 8.6246631693044606e-01 8.9154807392842805e-01 9.1692032794301626e-01 9.3821559571910784e-01 9.5511992798210699e-01 9.6738060700435480e-01 9.7481243184935951e-01 9.7730237285197818e-01 9.7481243184935951e-01 9.6738060700435480e-01 9.5511992798210699e-01 9.3821559571910784e-01 9.1692032794301626e-01 8.9154807392842805e-01 8.6246631693044606e-01 8.3008722795156986e-01 7.9485796812548970e-01 7.5725045782212541e-01 7.1775093804225576e-01 6.7684964391023072e-01 6.3503089187350303e-01 5.9276385294463241e-01 5.8227273363059850e-01 6.2379170307741350e-01 6.6487031970439592e-01 7.0504771619201201e-01 7.4384814783956865e-01 7.8079005602206075e-01 8.1539580554746294e-01 8.4720182839879177e-01 8.7576887759026367e-01 9.0069207698923948e-01 9.2161044729772479e-01 9.3821559571910784e-01 9.5025927728806214e-01 9.5755956887444671e-01 9.6000544128547771e-01 9.5755956887444671e-01 9.5025927728806214e-01 9.3821559571910784e-01 9.2161044729772479e-01 9.0069207698923948e-01 8.7576887759026367e-01 8.4720182839879177e-01 8.1539580554746294e-01 7.8079005602206075e-01 7.4384814783956865e-01 7.0504771619201201e-01 6.6487031970439592e-01 6.2379170307741350e-01 5.8227273363059850e-01 5.6905652422419184e-01 6.0963311158293287e-01 6.4977934108595958e-01 6.8904480600832141e-01 7.2696455992515951e-01 7.6306797444958896e-01 7.9688825557508569e-01 8.2797235717867368e-01 8.5589100213887825e-01 8.8024850405056032e-01 9.0069207698923948e-01 9.1692032794301626e-01 9.2869064651822897e-01 9.3582523880811397e-01 9.3821559571910784e-01 9.3582523880811397e-01 9.2869064651822897e-01 9.1692032794301626e-01 9.0069207698923948e-01 8.8024850405056032e-01 8.5589100213887825e-01 8.2797235717867368e-01 7.9688825557508569e-01 7.6306797444958896e-01 7.2696455992515951e-01 6.8904480600832141e-01 6.4977934108595958e-01 6.0963311158293287e-01 5.6905652422419184e-01 5.5331006704435692e-01 5.9276385294463241e-01 6.3179918949258207e-01 6.6997813324222000e-01 7.0684860337809208e-01 7.4195299434922901e-01 7.7483742888324936e-01 8.0506139717136072e-01 8.3220750069030125e-01 8.5589100213887825e-01 8.7576887759026367e-01 8.9154807392842805e-01 9.0299269407203009e-01 9.0992986387890007e-01 9.1225407682854520e-01 9.0992986387890007e-01 9.0299269407203009e-01 8.9154807392842805e-01 8.7576887759026367e-01 8.5589100213887825e-01 8.3220750069030125e-01 8.0506139717136072e-01 7.7483742888324936e-01 7.4195299434922901e-01 7.0684860337809208e-01 6.6997813324222000e-01 6.3179918949258207e-01 5.9276385294463241e-01 5.5331006704435692e-01 5.3526142851899028e-01 5.7342825587181856e-01 6.1119028343619353e-01 6.4812385321550336e-01 6.8379163099607920e-01 7.1775093804225576e-01 7.4956270228277133e-01 7.7880078307140488e-01 8.0506139717136072e-01 8.2797235717867368e-01 8.4720182839879177e-01 8.6246631693044606e-01 8.7353762051189809e-01 8.8024850405056032e-01 8.8249690258459546e-01 8.8024850405056032e-01 8.7353762051189809e-01 8.6246631693044606e-01 8.4720182839879177e-01 8.2797235717867368e-01 8.0506139717136072e-01 7.7880078307140488e-01 7.4956270228277133e-01 7.1775093804225576e-01 6.8379163099607920e-01 6.4812385321550336e-01 6.1119028343619353e-01 5.7342825587181856e-01 5.3526142851899028e-01 5.1516640906053812e-01 5.5190036063069603e-01 5.8824470958371211e-01 6.2379170307741350e-01 6.5812042549111271e-01 6.9080481732851617e-01 7.2142229035475625e-01 7.4956270228277133e-01 7.7483742888324936e-01 7.9688825557508569e-01 8.1539580554746294e-01 8.3008722795156986e-01 8.4074288779512862e-01 8.4720182839879177e-01 8.4936581656831245e-01 8.4720182839879177e-01 8.4074288779512862e-01 8.3008722795156986e-01 8.1539580554746294e-01 7.9688825557508569e-01 7.7483742888324936e-01 7.4956270228277133e-01 7.2142229035475625e-01 6.9080481732851617e-01 6.5812042549111271e-01 6.2379170307741350e-01 5.8824470958371211e-01 5.5190036063069603e-01 5.1516640906053812e-01 4.9330252455860574e-01 5.2847747138718093e-01 5.6327935050165345e-01 5.9731771426626490e-01 6.3018951090073738e-01 6.6148676305748488e-01 6.9080481732851617e-01 7.1775093804225576e-01 7.4195299434922901e-01 7.6306797444958896e-01 7.8079005602206075e-01 7.9485796812548970e-01 8.0506139717136060e-01 8.1124621755118997e-01 8.1331836512984568e-01 8.1124621755118997e-01 8.0506139717136060e-01 7.9485796812548970e-01 7.8079005602206075e-01 7.6306797444958896e-01 7.4195299434922901e-01 7.1775093804225576e-01 6.9080481732851617e-01 6.6148676305748488e-01 6.3018951090073738e-01 5.9731771426626490e-01 5.6327935050165345e-01 5.2847747138718093e-01 4.9330252455860574e-01 4.6996265691059791e-01 5.0347335398849669e-01 5.3662863449056497e-01 5.6905652422419184e-01 6.0037304119840440e-01 6.3018951090073738e-01 6.5812042549111271e-01 6.8379163099607920e-01 7.0684860337809208e-01 7.2696455992515951e-01 7.4384814783956865e-01 7.5725045782212541e-01 7.6697112695571013e-01 7.7286332185339535e-01 7.7483742888324936e-01 7.7286332185339535e-01 7.6697112695571013e-01 7.5725045782212541e-01 7.4384814783956865e-01 7.2696455992515951e-01 7.0684860337809208e-01 6.8379163099607920e-01 6.5812042549111271e-01 6.3018951090073738e-01 6.0037304119840440e-01 5.6905652422419184e-01 5.3662863449056497e-01 5.0347335398849669e-01 4.6996265691059791e-01 4.4544857564370921e-01 4.7721129564428472e-01 5.0863713822463141e-01 5.3937353202224170e-01 5.6905652422419184e-01 5.9731771426626490e-01 6.2379170307741350e-01 6.4812385321550336e-01 6.6997813324222000e-01 6.8904480600832141e-01 7.0504771619201201e-01 7.1775093804225576e-01 7.2696455992515951e-01 7.3254940754229336e-01 7.3442054166685833e-01 7.3254940754229336e-01 7.2696455992515951e-01 7.1775093804225576e-01 7.0504771619201201e-01 6.8904480600832141e-01 6.6997813324222000e-01 6.4812385321550336e-01 6.2379170307741350e-01 5.9731771426626490e-01 5.6905652422419184e-01 5.3937353202224170e-01 5.0863713822463141e-01 4.7721129564428472e-01 4.4544857564370921e-01 4.2006452910691128e-01 4.5001723913840164e-01 4.7965226883004430e-01 5.0863713822463141e-01 5.3662863449056497e-01 5.6327935050165345e-01 5.8824470958371211e-01 6.1119028343619353e-01 6.3179918949258207e-01 6.4977934108595958e-01 6.6487031970439592e-01 6.7684964391023072e-01 6.8553822425200905e-01 6.9080481732851629e-01 6.9256932420519779e-01 6.9080481732851629e-01 6.8553822425200905e-01 6.7684964391023072e-01 6.6487031970439592e-01 6.4977934108595958e-01 6.3179918949258207e-01 6.1119028343619353e-01 5.8824470958371211e-01 5.6327935050165345e-01 5.3662863449056497e-01 5.0863713822463141e-01 4.7965226883004430e-01 4.5001723913840164e-01 4.2006452910691128e-01 3.9411109241650727e-01 4.2221319210210367e-01 4.5001723913840164e-01 4.7721129564428472e-01 5.0347335398849669e-01 5.2847747138718093e-01 5.5190036063069603e-01 5.7342825587181856e-01 5.9276385294463241e-01 6.0963311158293287e-01 6.2379170307741350e-01 6.3503089187350303e-01 6.4318265345481795e-01 6.4812385321550336e-01 6.4977934108595947e-01 6.4812385321550336e-01 6.4318265345481795e-01 6.3503089187350303e-01 6.2379170307741350e-01 6.0963311158293287e-01 5.9276385294463241e-01 5.7342825587181856e-01 5.5190036063069603e-01 5.2847747138718093e-01 5.0347335398849669e-01 4.7721129564428472e-01 4.5001723913840164e-01 4.2221319210210367e-01 3.9411109241650727e-01 3.6787944117144233e-01 3.9411109241650727e-01 4.2006452910691128e-01 4.4544857564370921e-01 4.6996265691059791e-01 4.9330252455860574e-01 5.1516640906053812e-01 5.3526142851899028e-01 5.5331006704435692e-01 5.6905652422419184e-01 5.8227273363059850e-01 5.9276385294463241e-01 6.0037304119840440e-01 6.0498535950574184e-01 6.0653065971263342e-01 6.0498535950574184e-01 6.0037304119840440e-01 5.9276385294463241e-01 5.8227273363059850e-01 5.6905652422419184e-01 5.5331006704435692e-01 5.3526142851899028e-01 5.1516640906053812e-01 4.9330252455860574e-01 4.6996265691059791e-01 4.4544857564370921e-01 4.2006452910691128e-01 3.9411109241650727e-01 3.6787944117144233e-01 GMTSAR_V5.7/gmtsar/filters/gauss19x19000644 015705 000000 00000021532 13505462013 020271 0ustar00sandwellwheel000000 000000 19 19 2.8206295169381546e-01 3.2212600181340278e-01 3.6217599908082571e-01 4.0089228649107739e-01 4.3686764570555725e-01 4.6869056706378820e-01 4.9503589692619859e-01 5.1475588520860704e-01 5.2696296924337094e-01 5.3109599103534522e-01 5.2696296924337094e-01 5.1475588520860704e-01 4.9503589692619859e-01 4.6869056706378820e-01 4.3686764570555725e-01 4.0089228649107739e-01 3.6217599908082571e-01 3.2212600181340278e-01 2.8206295169381546e-01 3.2212600181340278e-01 3.6787944117144233e-01 4.1361797370441067e-01 4.5783336177161427e-01 4.9891851158647194e-01 5.3526142851899028e-01 5.6534873961061416e-01 5.8786967312234650e-01 6.0181060067169445e-01 6.0653065971263342e-01 6.0181060067169445e-01 5.8786967312234650e-01 5.6534873961061416e-01 5.3526142851899028e-01 4.9891851158647194e-01 4.5783336177161427e-01 4.1361797370441067e-01 3.6787944117144233e-01 3.2212600181340278e-01 3.6217599908082571e-01 4.1361797370441067e-01 4.6504318813405632e-01 5.1475588520860704e-01 5.6094916081447077e-01 6.0181060067169445e-01 6.3563867382605199e-01 6.6095963999744889e-01 6.7663384616172895e-01 6.8194075119034814e-01 6.7663384616172895e-01 6.6095963999744889e-01 6.3563867382605199e-01 6.0181060067169445e-01 5.6094916081447077e-01 5.1475588520860704e-01 4.6504318813405632e-01 4.1361797370441067e-01 3.6217599908082571e-01 4.0089228649107739e-01 4.5783336177161427e-01 5.1475588520860704e-01 5.6978282473092301e-01 6.2091411980609579e-01 6.6614361070348771e-01 7.0358787434562753e-01 7.3161562894664178e-01 7.4896539360271563e-01 7.5483960198900735e-01 7.4896539360271563e-01 7.3161562894664178e-01 7.0358787434562753e-01 6.6614361070348771e-01 6.2091411980609579e-01 5.6978282473092301e-01 5.1475588520860704e-01 4.5783336177161427e-01 4.0089228649107739e-01 4.3686764570555725e-01 4.9891851158647194e-01 5.6094916081447077e-01 6.2091411980609579e-01 6.7663384616172895e-01 7.2592215095240831e-01 7.6672659607082005e-01 7.9726951141132441e-01 8.1617621302233978e-01 8.2257756239866464e-01 8.1617621302233978e-01 7.9726951141132441e-01 7.6672659607082005e-01 7.2592215095240831e-01 6.7663384616172895e-01 6.2091411980609579e-01 5.6094916081447077e-01 4.9891851158647194e-01 4.3686764570555725e-01 4.6869056706378820e-01 5.3526142851899028e-01 6.0181060067169445e-01 6.6614361070348771e-01 7.2592215095240831e-01 7.7880078307140488e-01 8.2257756239866464e-01 8.5534532730742252e-01 8.7562925720353824e-01 8.8249690258459546e-01 8.7562925720353824e-01 8.5534532730742252e-01 8.2257756239866464e-01 7.7880078307140488e-01 7.2592215095240831e-01 6.6614361070348771e-01 6.0181060067169445e-01 5.3526142851899028e-01 4.6869056706378820e-01 4.9503589692619859e-01 5.6534873961061416e-01 6.3563867382605199e-01 7.0358787434562753e-01 7.6672659607082005e-01 8.2257756239866464e-01 8.6881505626284317e-01 9.0342471353308673e-01 9.2484881321620482e-01 9.3210249235952758e-01 9.2484881321620482e-01 9.0342471353308673e-01 8.6881505626284317e-01 8.2257756239866464e-01 7.6672659607082005e-01 7.0358787434562753e-01 6.3563867382605199e-01 5.6534873961061416e-01 4.9503589692619859e-01 5.1475588520860704e-01 5.8786967312234650e-01 6.6095963999744889e-01 7.3161562894664178e-01 7.9726951141132441e-01 8.5534532730742252e-01 9.0342471353308673e-01 9.3941306281347581e-01 9.6169060160542530e-01 9.6923323447634413e-01 9.6169060160542530e-01 9.3941306281347581e-01 9.0342471353308673e-01 8.5534532730742252e-01 7.9726951141132441e-01 7.3161562894664178e-01 6.6095963999744889e-01 5.8786967312234650e-01 5.1475588520860704e-01 5.2696296924337094e-01 6.0181060067169445e-01 6.7663384616172895e-01 7.4896539360271563e-01 8.1617621302233978e-01 8.7562925720353824e-01 9.2484881321620482e-01 9.6169060160542530e-01 9.8449643700540845e-01 9.9221793826024351e-01 9.8449643700540845e-01 9.6169060160542530e-01 9.2484881321620482e-01 8.7562925720353824e-01 8.1617621302233978e-01 7.4896539360271563e-01 6.7663384616172895e-01 6.0181060067169445e-01 5.2696296924337094e-01 5.3109599103534522e-01 6.0653065971263342e-01 6.8194075119034814e-01 7.5483960198900735e-01 8.2257756239866464e-01 8.8249690258459546e-01 9.3210249235952758e-01 9.6923323447634413e-01 9.9221793826024351e-01 1.0000000000000000e+00 9.9221793826024351e-01 9.6923323447634413e-01 9.3210249235952758e-01 8.8249690258459546e-01 8.2257756239866464e-01 7.5483960198900735e-01 6.8194075119034814e-01 6.0653065971263342e-01 5.3109599103534522e-01 5.2696296924337094e-01 6.0181060067169445e-01 6.7663384616172895e-01 7.4896539360271563e-01 8.1617621302233978e-01 8.7562925720353824e-01 9.2484881321620482e-01 9.6169060160542530e-01 9.8449643700540845e-01 9.9221793826024351e-01 9.8449643700540845e-01 9.6169060160542530e-01 9.2484881321620482e-01 8.7562925720353824e-01 8.1617621302233978e-01 7.4896539360271563e-01 6.7663384616172895e-01 6.0181060067169445e-01 5.2696296924337094e-01 5.1475588520860704e-01 5.8786967312234650e-01 6.6095963999744889e-01 7.3161562894664178e-01 7.9726951141132441e-01 8.5534532730742252e-01 9.0342471353308673e-01 9.3941306281347581e-01 9.6169060160542530e-01 9.6923323447634413e-01 9.6169060160542530e-01 9.3941306281347581e-01 9.0342471353308673e-01 8.5534532730742252e-01 7.9726951141132441e-01 7.3161562894664178e-01 6.6095963999744889e-01 5.8786967312234650e-01 5.1475588520860704e-01 4.9503589692619859e-01 5.6534873961061416e-01 6.3563867382605199e-01 7.0358787434562753e-01 7.6672659607082005e-01 8.2257756239866464e-01 8.6881505626284317e-01 9.0342471353308673e-01 9.2484881321620482e-01 9.3210249235952758e-01 9.2484881321620482e-01 9.0342471353308673e-01 8.6881505626284317e-01 8.2257756239866464e-01 7.6672659607082005e-01 7.0358787434562753e-01 6.3563867382605199e-01 5.6534873961061416e-01 4.9503589692619859e-01 4.6869056706378820e-01 5.3526142851899028e-01 6.0181060067169445e-01 6.6614361070348771e-01 7.2592215095240831e-01 7.7880078307140488e-01 8.2257756239866464e-01 8.5534532730742252e-01 8.7562925720353824e-01 8.8249690258459546e-01 8.7562925720353824e-01 8.5534532730742252e-01 8.2257756239866464e-01 7.7880078307140488e-01 7.2592215095240831e-01 6.6614361070348771e-01 6.0181060067169445e-01 5.3526142851899028e-01 4.6869056706378820e-01 4.3686764570555725e-01 4.9891851158647194e-01 5.6094916081447077e-01 6.2091411980609579e-01 6.7663384616172895e-01 7.2592215095240831e-01 7.6672659607082005e-01 7.9726951141132441e-01 8.1617621302233978e-01 8.2257756239866464e-01 8.1617621302233978e-01 7.9726951141132441e-01 7.6672659607082005e-01 7.2592215095240831e-01 6.7663384616172895e-01 6.2091411980609579e-01 5.6094916081447077e-01 4.9891851158647194e-01 4.3686764570555725e-01 4.0089228649107739e-01 4.5783336177161427e-01 5.1475588520860704e-01 5.6978282473092301e-01 6.2091411980609579e-01 6.6614361070348771e-01 7.0358787434562753e-01 7.3161562894664178e-01 7.4896539360271563e-01 7.5483960198900735e-01 7.4896539360271563e-01 7.3161562894664178e-01 7.0358787434562753e-01 6.6614361070348771e-01 6.2091411980609579e-01 5.6978282473092301e-01 5.1475588520860704e-01 4.5783336177161427e-01 4.0089228649107739e-01 3.6217599908082571e-01 4.1361797370441067e-01 4.6504318813405632e-01 5.1475588520860704e-01 5.6094916081447077e-01 6.0181060067169445e-01 6.3563867382605199e-01 6.6095963999744889e-01 6.7663384616172895e-01 6.8194075119034814e-01 6.7663384616172895e-01 6.6095963999744889e-01 6.3563867382605199e-01 6.0181060067169445e-01 5.6094916081447077e-01 5.1475588520860704e-01 4.6504318813405632e-01 4.1361797370441067e-01 3.6217599908082571e-01 3.2212600181340278e-01 3.6787944117144233e-01 4.1361797370441067e-01 4.5783336177161427e-01 4.9891851158647194e-01 5.3526142851899028e-01 5.6534873961061416e-01 5.8786967312234650e-01 6.0181060067169445e-01 6.0653065971263342e-01 6.0181060067169445e-01 5.8786967312234650e-01 5.6534873961061416e-01 5.3526142851899028e-01 4.9891851158647194e-01 4.5783336177161427e-01 4.1361797370441067e-01 3.6787944117144233e-01 3.2212600181340278e-01 2.8206295169381546e-01 3.2212600181340278e-01 3.6217599908082571e-01 4.0089228649107739e-01 4.3686764570555725e-01 4.6869056706378820e-01 4.9503589692619859e-01 5.1475588520860704e-01 5.2696296924337094e-01 5.3109599103534522e-01 5.2696296924337094e-01 5.1475588520860704e-01 4.9503589692619859e-01 4.6869056706378820e-01 4.3686764570555725e-01 4.0089228649107739e-01 3.6217599908082571e-01 3.2212600181340278e-01 2.8206295169381546e-01 GMTSAR_V5.7/gmtsar/filters/sanandreas11x7000644 015705 000000 00000002344 13505462013 021173 0ustar00sandwellwheel000000 000000 7 11 1.0495176e-16 6.0075483e-12 4.0999171e-08 3.3359775e-05 3.2362451e-03 3.7430871e-02 5.1616517e-02 1.2641811e-13 2.3430967e-09 5.1777536e-06 1.3641521e-03 4.2850357e-02 1.6047831e-01 7.1655326e-02 6.6755448e-11 4.0062773e-07 2.8665898e-04 2.4454586e-02 2.4872838e-01 3.0162032e-01 4.3607994e-02 1.5453327e-08 3.0029607e-05 6.9574093e-03 1.9218332e-01 6.3292767e-01 2.4852078e-01 1.1634336e-02 1.5682494e-06 9.8677047e-04 7.4026534e-02 6.6210814e-01 7.0605849e-01 8.9768233e-02 1.3607393e-03 6.9769577e-05 1.4214791e-02 3.4529089e-01 1.0000000e+00 3.4529089e-01 1.4214791e-02 6.9769577e-05 1.3607393e-03 8.9768233e-02 7.0605849e-01 6.6210814e-01 7.4026534e-02 9.8677047e-04 1.5682494e-06 1.1634336e-02 2.4852078e-01 6.3292767e-01 1.9218332e-01 6.9574093e-03 3.0029607e-05 1.5453327e-08 4.3607994e-02 3.0162032e-01 2.4872838e-01 2.4454586e-02 2.8665898e-04 4.0062773e-07 6.6755448e-11 7.1655326e-02 1.6047831e-01 4.2850357e-02 1.3641521e-03 5.1777536e-06 2.3430967e-09 1.2641811e-13 5.1616517e-02 3.7430871e-02 3.2362451e-03 3.3359775e-05 4.0999171e-08 6.0075483e-12 1.0495176e-16 GMTSAR_V5.7/gmtsar/filters/gauss_tsx_100m000644 015705 000000 00000001351 13505462013 021205 0ustar00sandwellwheel000000 000000 7 7 3.67879441e-01 4.85671785e-01 5.73753421e-01 6.06530660e-01 5.73753421e-01 4.85671785e-01 3.67879441e-01 4.85671785e-01 6.41180388e-01 7.57465128e-01 8.00737403e-01 7.57465128e-01 6.41180388e-01 4.85671785e-01 5.73753421e-01 7.57465128e-01 8.94839317e-01 9.45959469e-01 8.94839317e-01 7.57465128e-01 5.73753421e-01 6.06530660e-01 8.00737403e-01 9.45959469e-01 1.00000000e+00 9.45959469e-01 8.00737403e-01 6.06530660e-01 5.73753421e-01 7.57465128e-01 8.94839317e-01 9.45959469e-01 8.94839317e-01 7.57465128e-01 5.73753421e-01 4.85671785e-01 6.41180388e-01 7.57465128e-01 8.00737403e-01 7.57465128e-01 6.41180388e-01 4.85671785e-01 3.67879441e-01 4.85671785e-01 5.73753421e-01 6.06530660e-01 5.73753421e-01 4.85671785e-01 3.67879441e-01 GMTSAR_V5.7/gmtsar/filters/gauss1x1000644 015705 000000 00000000020 13505462013 020074 0ustar00sandwellwheel000000 000000 1 1 1.0000 GMTSAR_V5.7/gmtsar/filters/gauss9x5000644 015705 000000 00000000720 13505462013 020117 0ustar00sandwellwheel000000 000000 5 9 0.018316 0.082085 0.135335 0.082085 0.018316 0.043937 0.196912 0.324652 0.196912 0.043937 0.082085 0.367879 0.606531 0.367879 0.082085 0.119433 0.535261 0.882497 0.535261 0.119433 0.135335 0.606531 1.000000 0.606531 0.135335 0.119433 0.535261 0.882497 0.535261 0.119433 0.082085 0.367879 0.606531 0.367879 0.082085 0.043937 0.196912 0.324652 0.196912 0.043937 0.018316 0.082085 0.135335 0.082085 0.018316 GMTSAR_V5.7/gmtsar/filters/gauss5x5.m000644 015705 000000 00000000357 13505462013 020354 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % clear sigx=1; sigy=1; nx=5; ny=5; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); GMTSAR_V5.7/gmtsar/filters/gauss33x9000644 015705 000000 00000011272 13505462013 020204 0ustar00sandwellwheel000000 000000 9 33 1.8315639e-02 4.3936934e-02 8.2084999e-02 1.1943297e-01 1.3533528e-01 1.1943297e-01 8.2084999e-02 4.3936934e-02 1.8315639e-02 2.3334729e-02 5.5977106e-02 1.0457900e-01 1.5216155e-01 1.7242162e-01 1.5216155e-01 1.0457900e-01 5.5977106e-02 2.3334729e-02 2.9268308e-02 7.0211020e-02 1.3117145e-01 1.9085334e-01 2.1626517e-01 1.9085334e-01 1.3117145e-01 7.0211020e-02 2.9268308e-02 3.6141536e-02 8.6699037e-02 1.6197513e-01 2.3567242e-01 2.6705184e-01 2.3567242e-01 1.6197513e-01 8.6699037e-02 3.6141536e-02 4.3936934e-02 1.0539922e-01 1.9691168e-01 2.8650480e-01 3.2465247e-01 2.8650480e-01 1.9691168e-01 1.0539922e-01 4.3936934e-02 5.2585624e-02 1.2614635e-01 2.3567242e-01 3.4290134e-01 3.8855813e-01 3.4290134e-01 2.3567242e-01 1.2614635e-01 5.2585624e-02 6.1961008e-02 1.4863673e-01 2.7768997e-01 4.0403652e-01 4.5783336e-01 4.0403652e-01 2.7768997e-01 1.4863673e-01 6.1961008e-02 7.1876026e-02 1.7242162e-01 3.2212600e-01 4.6869057e-01 5.3109599e-01 4.6869057e-01 3.2212600e-01 1.7242162e-01 7.1876026e-02 8.2084999e-02 1.9691168e-01 3.6787944e-01 5.3526143e-01 6.0653066e-01 5.3526143e-01 3.6787944e-01 1.9691168e-01 8.2084999e-02 9.2290645e-02 2.2139375e-01 4.1361797e-01 6.0181060e-01 6.8194075e-01 6.0181060e-01 4.1361797e-01 2.2139375e-01 9.2290645e-02 1.0215643e-01 2.4506054e-01 4.5783336e-01 6.6614361e-01 7.5483960e-01 6.6614361e-01 4.5783336e-01 2.4506054e-01 1.0215643e-01 1.1132377e-01 2.6705184e-01 4.9891851e-01 7.2592215e-01 8.2257756e-01 7.2592215e-01 4.9891851e-01 2.6705184e-01 1.1132377e-01 1.1943297e-01 2.8650480e-01 5.3526143e-01 7.7880078e-01 8.8249690e-01 7.7880078e-01 5.3526143e-01 2.8650480e-01 1.1943297e-01 1.2614635e-01 3.0260937e-01 5.6534874e-01 8.2257756e-01 9.3210249e-01 8.2257756e-01 5.6534874e-01 3.0260937e-01 1.2614635e-01 1.3117145e-01 3.1466396e-01 5.8786967e-01 8.5534533e-01 9.6923323e-01 8.5534533e-01 5.8786967e-01 3.1466396e-01 1.3117145e-01 1.3428210e-01 3.2212600e-01 6.0181060e-01 8.7562926e-01 9.9221794e-01 8.7562926e-01 6.0181060e-01 3.2212600e-01 1.3428210e-01 1.3533528e-01 3.2465247e-01 6.0653066e-01 8.8249690e-01 1.0000000e+00 8.8249690e-01 6.0653066e-01 3.2465247e-01 1.3533528e-01 1.3428210e-01 3.2212600e-01 6.0181060e-01 8.7562926e-01 9.9221794e-01 8.7562926e-01 6.0181060e-01 3.2212600e-01 1.3428210e-01 1.3117145e-01 3.1466396e-01 5.8786967e-01 8.5534533e-01 9.6923323e-01 8.5534533e-01 5.8786967e-01 3.1466396e-01 1.3117145e-01 1.2614635e-01 3.0260937e-01 5.6534874e-01 8.2257756e-01 9.3210249e-01 8.2257756e-01 5.6534874e-01 3.0260937e-01 1.2614635e-01 1.1943297e-01 2.8650480e-01 5.3526143e-01 7.7880078e-01 8.8249690e-01 7.7880078e-01 5.3526143e-01 2.8650480e-01 1.1943297e-01 1.1132377e-01 2.6705184e-01 4.9891851e-01 7.2592215e-01 8.2257756e-01 7.2592215e-01 4.9891851e-01 2.6705184e-01 1.1132377e-01 1.0215643e-01 2.4506054e-01 4.5783336e-01 6.6614361e-01 7.5483960e-01 6.6614361e-01 4.5783336e-01 2.4506054e-01 1.0215643e-01 9.2290645e-02 2.2139375e-01 4.1361797e-01 6.0181060e-01 6.8194075e-01 6.0181060e-01 4.1361797e-01 2.2139375e-01 9.2290645e-02 8.2084999e-02 1.9691168e-01 3.6787944e-01 5.3526143e-01 6.0653066e-01 5.3526143e-01 3.6787944e-01 1.9691168e-01 8.2084999e-02 7.1876026e-02 1.7242162e-01 3.2212600e-01 4.6869057e-01 5.3109599e-01 4.6869057e-01 3.2212600e-01 1.7242162e-01 7.1876026e-02 6.1961008e-02 1.4863673e-01 2.7768997e-01 4.0403652e-01 4.5783336e-01 4.0403652e-01 2.7768997e-01 1.4863673e-01 6.1961008e-02 5.2585624e-02 1.2614635e-01 2.3567242e-01 3.4290134e-01 3.8855813e-01 3.4290134e-01 2.3567242e-01 1.2614635e-01 5.2585624e-02 4.3936934e-02 1.0539922e-01 1.9691168e-01 2.8650480e-01 3.2465247e-01 2.8650480e-01 1.9691168e-01 1.0539922e-01 4.3936934e-02 3.6141536e-02 8.6699037e-02 1.6197513e-01 2.3567242e-01 2.6705184e-01 2.3567242e-01 1.6197513e-01 8.6699037e-02 3.6141536e-02 2.9268308e-02 7.0211020e-02 1.3117145e-01 1.9085334e-01 2.1626517e-01 1.9085334e-01 1.3117145e-01 7.0211020e-02 2.9268308e-02 2.3334729e-02 5.5977106e-02 1.0457900e-01 1.5216155e-01 1.7242162e-01 1.5216155e-01 1.0457900e-01 5.5977106e-02 2.3334729e-02 1.8315639e-02 4.3936934e-02 8.2084999e-02 1.1943297e-01 1.3533528e-01 1.1943297e-01 8.2084999e-02 4.3936934e-02 1.8315639e-02 GMTSAR_V5.7/gmtsar/filters/gaussian.m000644 015705 000000 00000000362 13505462013 020476 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % clear sigx=1.0; sigy=4; nx=5; ny=17; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); GMTSAR_V5.7/gmtsar/filters/slcfilter000644 015705 000000 00000000014 13505462013 020412 0ustar00sandwellwheel000000 000000 1 3 .5 1 .5 GMTSAR_V5.7/gmtsar/filters/gauss15x5_53km000644 015705 000000 00000002304 13505462013 021033 0ustar00sandwellwheel000000 000000 5 15 1.6389554e-02 4.6446952e-02 6.5728529e-02 4.6446952e-02 1.6389554e-02 3.3746152e-02 9.5634445e-02 1.3533528e-01 9.5634445e-02 3.3746152e-02 6.2176524e-02 1.7620431e-01 2.4935221e-01 1.7620431e-01 6.2176524e-02 1.0251176e-01 2.9051179e-01 4.1111229e-01 2.9051179e-01 1.0251176e-01 1.5123976e-01 4.2860385e-01 6.0653066e-01 4.2860385e-01 1.5123976e-01 1.9966564e-01 5.6583971e-01 8.0073740e-01 5.6583971e-01 1.9966564e-01 2.3587708e-01 6.6846063e-01 9.4595947e-01 6.6846063e-01 2.3587708e-01 2.4935221e-01 7.0664828e-01 1.0000000e+00 7.0664828e-01 2.4935221e-01 2.3587708e-01 6.6846063e-01 9.4595947e-01 6.6846063e-01 2.3587708e-01 1.9966564e-01 5.6583971e-01 8.0073740e-01 5.6583971e-01 1.9966564e-01 1.5123976e-01 4.2860385e-01 6.0653066e-01 4.2860385e-01 1.5123976e-01 1.0251176e-01 2.9051179e-01 4.1111229e-01 2.9051179e-01 1.0251176e-01 6.2176524e-02 1.7620431e-01 2.4935221e-01 1.7620431e-01 6.2176524e-02 3.3746152e-02 9.5634445e-02 1.3533528e-01 9.5634445e-02 3.3746152e-02 1.6389554e-02 4.6446952e-02 6.5728529e-02 4.6446952e-02 1.6389554e-02 GMTSAR_V5.7/gmtsar/filters/gauss17x17000644 015705 000000 00000016116 13505462013 020267 0ustar00sandwellwheel000000 000000 17 17 1.6901331540606609e-01 2.0816079512556979e-01 2.4935220877729622e-01 2.9051179209304512e-01 3.2919298780790557e-01 3.6280532298705126e-01 3.8889556398922293e-01 4.0544186667908066e-01 4.1111229050718745e-01 4.0544186667908066e-01 3.8889556398922293e-01 3.6280532298705126e-01 3.2919298780790557e-01 2.9051179209304512e-01 2.4935220877729622e-01 2.0816079512556979e-01 1.6901331540606609e-01 2.0816079512556979e-01 2.5637575668641222e-01 3.0710807560157544e-01 3.5780119152240508e-01 4.0544186667908055e-01 4.4683961336020983e-01 4.7897297101301678e-01 4.9935178859927615e-01 5.0633561664810056e-01 4.9935178859927615e-01 4.7897297101301678e-01 4.4683961336020983e-01 4.0544186667908055e-01 3.5780119152240508e-01 3.0710807560157544e-01 2.5637575668641222e-01 2.0816079512556979e-01 2.4935220877729622e-01 3.0710807560157544e-01 3.6787944117144233e-01 4.2860384615383690e-01 4.8567178524771237e-01 5.3526142851899028e-01 5.7375342073743274e-01 5.9816485313198164e-01 6.0653065971263342e-01 5.9816485313198164e-01 5.7375342073743274e-01 5.3526142851899028e-01 4.8567178524771237e-01 4.2860384615383690e-01 3.6787944117144233e-01 3.0710807560157544e-01 2.4935220877729622e-01 2.9051179209304512e-01 3.5780119152240508e-01 4.2860384615383690e-01 4.9935178859927615e-01 5.6583970678742268e-01 6.2361491642617306e-01 6.6846062962616570e-01 6.9690156065811215e-01 7.0664827785771622e-01 6.9690156065811215e-01 6.6846062962616570e-01 6.2361491642617306e-01 5.6583970678742268e-01 4.9935178859927615e-01 4.2860384615383690e-01 3.5780119152240508e-01 2.9051179209304512e-01 3.2919298780790557e-01 4.0544186667908055e-01 4.8567178524771237e-01 5.6583970678742268e-01 6.4118038842995462e-01 7.0664827785771633e-01 7.5746512839696645e-01 7.8969292539959679e-01 8.0073740291680806e-01 7.8969292539959679e-01 7.5746512839696645e-01 7.0664827785771633e-01 6.4118038842995462e-01 5.6583970678742268e-01 4.8567178524771237e-01 4.0544186667908055e-01 3.2919298780790557e-01 3.6280532298705126e-01 4.4683961336020983e-01 5.3526142851899028e-01 6.2361491642617306e-01 7.0664827785771633e-01 7.7880078307140488e-01 8.3480630128078936e-01 8.7032472583339060e-01 8.8249690258459546e-01 8.7032472583339060e-01 8.3480630128078936e-01 7.7880078307140488e-01 7.0664827785771633e-01 6.2361491642617306e-01 5.3526142851899028e-01 4.4683961336020983e-01 3.6280532298705126e-01 3.8889556398922293e-01 4.7897297101301678e-01 5.7375342073743274e-01 6.6846062962616570e-01 7.5746512839696645e-01 8.3480630128078936e-01 8.9483931681436979e-01 9.3291196038714741e-01 9.4595946890676541e-01 9.3291196038714741e-01 8.9483931681436979e-01 8.3480630128078936e-01 7.5746512839696645e-01 6.6846062962616570e-01 5.7375342073743274e-01 4.7897297101301678e-01 3.8889556398922293e-01 4.0544186667908066e-01 4.9935178859927615e-01 5.9816485313198164e-01 6.9690156065811215e-01 7.8969292539959679e-01 8.7032472583339060e-01 9.3291196038714741e-01 9.7260447711634834e-01 9.8620711674391626e-01 9.7260447711634834e-01 9.3291196038714741e-01 8.7032472583339060e-01 7.8969292539959679e-01 6.9690156065811215e-01 5.9816485313198164e-01 4.9935178859927615e-01 4.0544186667908066e-01 4.1111229050718745e-01 5.0633561664810056e-01 6.0653065971263342e-01 7.0664827785771622e-01 8.0073740291680806e-01 8.8249690258459546e-01 9.4595946890676541e-01 9.8620711674391626e-01 1.0000000000000000e+00 9.8620711674391626e-01 9.4595946890676541e-01 8.8249690258459546e-01 8.0073740291680806e-01 7.0664827785771622e-01 6.0653065971263342e-01 5.0633561664810056e-01 4.1111229050718745e-01 4.0544186667908066e-01 4.9935178859927615e-01 5.9816485313198164e-01 6.9690156065811215e-01 7.8969292539959679e-01 8.7032472583339060e-01 9.3291196038714741e-01 9.7260447711634834e-01 9.8620711674391626e-01 9.7260447711634834e-01 9.3291196038714741e-01 8.7032472583339060e-01 7.8969292539959679e-01 6.9690156065811215e-01 5.9816485313198164e-01 4.9935178859927615e-01 4.0544186667908066e-01 3.8889556398922293e-01 4.7897297101301678e-01 5.7375342073743274e-01 6.6846062962616570e-01 7.5746512839696645e-01 8.3480630128078936e-01 8.9483931681436979e-01 9.3291196038714741e-01 9.4595946890676541e-01 9.3291196038714741e-01 8.9483931681436979e-01 8.3480630128078936e-01 7.5746512839696645e-01 6.6846062962616570e-01 5.7375342073743274e-01 4.7897297101301678e-01 3.8889556398922293e-01 3.6280532298705126e-01 4.4683961336020983e-01 5.3526142851899028e-01 6.2361491642617306e-01 7.0664827785771633e-01 7.7880078307140488e-01 8.3480630128078936e-01 8.7032472583339060e-01 8.8249690258459546e-01 8.7032472583339060e-01 8.3480630128078936e-01 7.7880078307140488e-01 7.0664827785771633e-01 6.2361491642617306e-01 5.3526142851899028e-01 4.4683961336020983e-01 3.6280532298705126e-01 3.2919298780790557e-01 4.0544186667908055e-01 4.8567178524771237e-01 5.6583970678742268e-01 6.4118038842995462e-01 7.0664827785771633e-01 7.5746512839696645e-01 7.8969292539959679e-01 8.0073740291680806e-01 7.8969292539959679e-01 7.5746512839696645e-01 7.0664827785771633e-01 6.4118038842995462e-01 5.6583970678742268e-01 4.8567178524771237e-01 4.0544186667908055e-01 3.2919298780790557e-01 2.9051179209304512e-01 3.5780119152240508e-01 4.2860384615383690e-01 4.9935178859927615e-01 5.6583970678742268e-01 6.2361491642617306e-01 6.6846062962616570e-01 6.9690156065811215e-01 7.0664827785771622e-01 6.9690156065811215e-01 6.6846062962616570e-01 6.2361491642617306e-01 5.6583970678742268e-01 4.9935178859927615e-01 4.2860384615383690e-01 3.5780119152240508e-01 2.9051179209304512e-01 2.4935220877729622e-01 3.0710807560157544e-01 3.6787944117144233e-01 4.2860384615383690e-01 4.8567178524771237e-01 5.3526142851899028e-01 5.7375342073743274e-01 5.9816485313198164e-01 6.0653065971263342e-01 5.9816485313198164e-01 5.7375342073743274e-01 5.3526142851899028e-01 4.8567178524771237e-01 4.2860384615383690e-01 3.6787944117144233e-01 3.0710807560157544e-01 2.4935220877729622e-01 2.0816079512556979e-01 2.5637575668641222e-01 3.0710807560157544e-01 3.5780119152240508e-01 4.0544186667908055e-01 4.4683961336020983e-01 4.7897297101301678e-01 4.9935178859927615e-01 5.0633561664810056e-01 4.9935178859927615e-01 4.7897297101301678e-01 4.4683961336020983e-01 4.0544186667908055e-01 3.5780119152240508e-01 3.0710807560157544e-01 2.5637575668641222e-01 2.0816079512556979e-01 1.6901331540606609e-01 2.0816079512556979e-01 2.4935220877729622e-01 2.9051179209304512e-01 3.2919298780790557e-01 3.6280532298705126e-01 3.8889556398922293e-01 4.0544186667908066e-01 4.1111229050718745e-01 4.0544186667908066e-01 3.8889556398922293e-01 3.6280532298705126e-01 3.2919298780790557e-01 2.9051179209304512e-01 2.4935220877729622e-01 2.0816079512556979e-01 1.6901331540606609e-01 GMTSAR_V5.7/gmtsar/filters/sanandreas2000644 015705 000000 00000010200 13505462013 020622 0ustar00sandwellwheel000000 000000 13 19 8.5343789e-02 1.2628606e-02 1.2593889e-04 8.4641878e-08 3.8338198e-12 1.1703050e-17 2.4076172e-24 3.3380801e-32 3.1190839e-41 1.9641666e-51 8.3358632e-63 2.3842061e-75 4.5957669e-89 1.0961128e-01 1.0425174e-01 6.6823983e-03 2.8867047e-05 8.4041411e-09 1.6489417e-13 2.1804103e-19 1.9430864e-26 1.1669896e-34 4.7234882e-44 1.2884859e-54 2.3687403e-66 2.9347845e-79 3.6759359e-02 2.2471940e-01 9.2583622e-02 2.5706843e-03 4.8104344e-06 6.0665366e-10 5.1560643e-15 2.9533628e-21 1.1400824e-28 2.9660377e-37 5.2004157e-47 6.1449793e-58 4.8935471e-70 3.2189180e-03 1.2648153e-01 3.3493868e-01 5.9775670e-02 7.1895974e-04 5.8278139e-07 3.1836678e-11 1.1721165e-16 2.9082706e-23 4.8631740e-31 5.4805706e-40 4.1624854e-50 2.1305937e-61 7.3600577e-05 1.8588442e-02 3.1639219e-01 3.6293552e-01 2.8057836e-02 1.4618400e-04 5.1329436e-08 1.2146583e-12 1.9371476e-18 2.0820554e-25 1.5081440e-33 7.3623139e-43 2.4221823e-53 4.3942205e-07 7.1332623e-04 7.8039687e-02 5.7539200e-01 2.8591246e-01 9.5746594e-03 2.1608994e-05 3.2867506e-09 3.3691466e-14 2.3275234e-20 1.0836503e-27 3.4002062e-36 7.1902224e-46 6.8503346e-10 7.1476407e-06 5.0261403e-03 2.3819217e-01 7.6074889e-01 1.6374805e-01 2.3753737e-03 2.3222486e-06 1.5300529e-10 6.7939940e-16 2.0331286e-22 4.1003932e-30 5.5732323e-39 2.7885026e-13 1.8701074e-08 8.4524579e-05 2.5746634e-02 5.2854124e-01 7.3123719e-01 6.8180258e-02 4.2843010e-04 1.8143551e-07 5.1782806e-12 9.9602409e-18 1.2911452e-24 1.1279797e-32 2.9638733e-17 1.2776141e-11 3.7115964e-07 7.2667925e-04 9.5883914e-02 8.5264789e-01 5.1099266e-01 2.0638616e-02 5.6178154e-05 1.0305648e-08 1.2741019e-13 1.0615830e-19 5.9610772e-27 8.2257883e-22 2.2790937e-15 4.2556685e-10 5.3554304e-06 4.5419458e-03 2.5960347e-01 1.0000000e+00 2.5960347e-01 4.5419458e-03 5.3554304e-06 4.2556685e-10 2.2790937e-15 8.2257883e-22 5.9610772e-27 1.0615830e-19 1.2741019e-13 1.0305648e-08 5.6178154e-05 2.0638616e-02 5.1099266e-01 8.5264789e-01 9.5883914e-02 7.2667925e-04 3.7115964e-07 1.2776141e-11 2.9638733e-17 1.1279797e-32 1.2911452e-24 9.9602409e-18 5.1782806e-12 1.8143551e-07 4.2843010e-04 6.8180258e-02 7.3123719e-01 5.2854124e-01 2.5746634e-02 8.4524579e-05 1.8701074e-08 2.7885026e-13 5.5732323e-39 4.1003932e-30 2.0331286e-22 6.7939940e-16 1.5300529e-10 2.3222486e-06 2.3753737e-03 1.6374805e-01 7.6074889e-01 2.3819217e-01 5.0261403e-03 7.1476407e-06 6.8503346e-10 7.1902224e-46 3.4002062e-36 1.0836503e-27 2.3275234e-20 3.3691466e-14 3.2867506e-09 2.1608994e-05 9.5746594e-03 2.8591246e-01 5.7539200e-01 7.8039687e-02 7.1332623e-04 4.3942205e-07 2.4221823e-53 7.3623139e-43 1.5081440e-33 2.0820554e-25 1.9371476e-18 1.2146583e-12 5.1329436e-08 1.4618400e-04 2.8057836e-02 3.6293552e-01 3.1639219e-01 1.8588442e-02 7.3600577e-05 2.1305937e-61 4.1624854e-50 5.4805706e-40 4.8631740e-31 2.9082706e-23 1.1721165e-16 3.1836678e-11 5.8278139e-07 7.1895974e-04 5.9775670e-02 3.3493868e-01 1.2648153e-01 3.2189180e-03 4.8935471e-70 6.1449793e-58 5.2004157e-47 2.9660377e-37 1.1400824e-28 2.9533628e-21 5.1560643e-15 6.0665366e-10 4.8104344e-06 2.5706843e-03 9.2583622e-02 2.2471940e-01 3.6759359e-02 2.9347845e-79 2.3687403e-66 1.2884859e-54 4.7234882e-44 1.1669896e-34 1.9430864e-26 2.1804103e-19 1.6489417e-13 8.4041411e-09 2.8867047e-05 6.6823983e-03 1.0425174e-01 1.0961128e-01 4.5957669e-89 2.3842061e-75 8.3358632e-63 1.9641666e-51 3.1190839e-41 3.3380801e-32 2.4076172e-24 1.1703050e-17 3.8338198e-12 8.4641878e-08 1.2593889e-04 1.2628606e-02 8.5343789e-02 GMTSAR_V5.7/gmtsar/filters/gauss_alos_700m.m000644 015705 000000 00000000557 13505462013 021575 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for alos after 4 x 2 decimation so the 0.5 gain % is at 700 m wavelength % clear sigx=7.9; sigy=10.6; nx=17; ny=17; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_alos_700m -ASCII -double gauss GMTSAR_V5.7/gmtsar/filters/gauss17x17_2sig000644 015705 000000 00000016120 13505462013 021206 0ustar00sandwellwheel000000 000000 17 17 3.6787944117144233e-01 4.1361797370441067e-01 4.5783336177161427e-01 4.9891851158647194e-01 5.3526142851899028e-01 5.6534873961061416e-01 5.8786967312234650e-01 6.0181060067169445e-01 6.0653065971263342e-01 6.0181060067169445e-01 5.8786967312234650e-01 5.6534873961061416e-01 5.3526142851899028e-01 4.9891851158647194e-01 4.5783336177161427e-01 4.1361797370441067e-01 3.6787944117144233e-01 4.1361797370441067e-01 4.6504318813405632e-01 5.1475588520860704e-01 5.6094916081447077e-01 6.0181060067169445e-01 6.3563867382605199e-01 6.6095963999744889e-01 6.7663384616172895e-01 6.8194075119034814e-01 6.7663384616172895e-01 6.6095963999744889e-01 6.3563867382605199e-01 6.0181060067169445e-01 5.6094916081447077e-01 5.1475588520860704e-01 4.6504318813405632e-01 4.1361797370441067e-01 4.5783336177161427e-01 5.1475588520860704e-01 5.6978282473092301e-01 6.2091411980609579e-01 6.6614361070348771e-01 7.0358787434562753e-01 7.3161562894664178e-01 7.4896539360271563e-01 7.5483960198900735e-01 7.4896539360271563e-01 7.3161562894664178e-01 7.0358787434562753e-01 6.6614361070348771e-01 6.2091411980609579e-01 5.6978282473092301e-01 5.1475588520860704e-01 4.5783336177161427e-01 4.9891851158647194e-01 5.6094916081447077e-01 6.2091411980609579e-01 6.7663384616172895e-01 7.2592215095240831e-01 7.6672659607082005e-01 7.9726951141132441e-01 8.1617621302233978e-01 8.2257756239866464e-01 8.1617621302233978e-01 7.9726951141132441e-01 7.6672659607082005e-01 7.2592215095240831e-01 6.7663384616172895e-01 6.2091411980609579e-01 5.6094916081447077e-01 4.9891851158647194e-01 5.3526142851899028e-01 6.0181060067169445e-01 6.6614361070348771e-01 7.2592215095240831e-01 7.7880078307140488e-01 8.2257756239866464e-01 8.5534532730742252e-01 8.7562925720353824e-01 8.8249690258459546e-01 8.7562925720353824e-01 8.5534532730742252e-01 8.2257756239866464e-01 7.7880078307140488e-01 7.2592215095240831e-01 6.6614361070348771e-01 6.0181060067169445e-01 5.3526142851899028e-01 5.6534873961061416e-01 6.3563867382605199e-01 7.0358787434562753e-01 7.6672659607082005e-01 8.2257756239866464e-01 8.6881505626284317e-01 9.0342471353308673e-01 9.2484881321620482e-01 9.3210249235952758e-01 9.2484881321620482e-01 9.0342471353308673e-01 8.6881505626284317e-01 8.2257756239866464e-01 7.6672659607082005e-01 7.0358787434562753e-01 6.3563867382605199e-01 5.6534873961061416e-01 5.8786967312234650e-01 6.6095963999744889e-01 7.3161562894664178e-01 7.9726951141132441e-01 8.5534532730742252e-01 9.0342471353308673e-01 9.3941306281347581e-01 9.6169060160542530e-01 9.6923323447634413e-01 9.6169060160542530e-01 9.3941306281347581e-01 9.0342471353308673e-01 8.5534532730742252e-01 7.9726951141132441e-01 7.3161562894664178e-01 6.6095963999744889e-01 5.8786967312234650e-01 6.0181060067169445e-01 6.7663384616172895e-01 7.4896539360271563e-01 8.1617621302233978e-01 8.7562925720353824e-01 9.2484881321620482e-01 9.6169060160542530e-01 9.8449643700540845e-01 9.9221793826024351e-01 9.8449643700540845e-01 9.6169060160542530e-01 9.2484881321620482e-01 8.7562925720353824e-01 8.1617621302233978e-01 7.4896539360271563e-01 6.7663384616172895e-01 6.0181060067169445e-01 6.0653065971263342e-01 6.8194075119034814e-01 7.5483960198900735e-01 8.2257756239866464e-01 8.8249690258459546e-01 9.3210249235952758e-01 9.6923323447634413e-01 9.9221793826024351e-01 1.0000000000000000e+00 9.9221793826024351e-01 9.6923323447634413e-01 9.3210249235952758e-01 8.8249690258459546e-01 8.2257756239866464e-01 7.5483960198900735e-01 6.8194075119034814e-01 6.0653065971263342e-01 6.0181060067169445e-01 6.7663384616172895e-01 7.4896539360271563e-01 8.1617621302233978e-01 8.7562925720353824e-01 9.2484881321620482e-01 9.6169060160542530e-01 9.8449643700540845e-01 9.9221793826024351e-01 9.8449643700540845e-01 9.6169060160542530e-01 9.2484881321620482e-01 8.7562925720353824e-01 8.1617621302233978e-01 7.4896539360271563e-01 6.7663384616172895e-01 6.0181060067169445e-01 5.8786967312234650e-01 6.6095963999744889e-01 7.3161562894664178e-01 7.9726951141132441e-01 8.5534532730742252e-01 9.0342471353308673e-01 9.3941306281347581e-01 9.6169060160542530e-01 9.6923323447634413e-01 9.6169060160542530e-01 9.3941306281347581e-01 9.0342471353308673e-01 8.5534532730742252e-01 7.9726951141132441e-01 7.3161562894664178e-01 6.6095963999744889e-01 5.8786967312234650e-01 5.6534873961061416e-01 6.3563867382605199e-01 7.0358787434562753e-01 7.6672659607082005e-01 8.2257756239866464e-01 8.6881505626284317e-01 9.0342471353308673e-01 9.2484881321620482e-01 9.3210249235952758e-01 9.2484881321620482e-01 9.0342471353308673e-01 8.6881505626284317e-01 8.2257756239866464e-01 7.6672659607082005e-01 7.0358787434562753e-01 6.3563867382605199e-01 5.6534873961061416e-01 5.3526142851899028e-01 6.0181060067169445e-01 6.6614361070348771e-01 7.2592215095240831e-01 7.7880078307140488e-01 8.2257756239866464e-01 8.5534532730742252e-01 8.7562925720353824e-01 8.8249690258459546e-01 8.7562925720353824e-01 8.5534532730742252e-01 8.2257756239866464e-01 7.7880078307140488e-01 7.2592215095240831e-01 6.6614361070348771e-01 6.0181060067169445e-01 5.3526142851899028e-01 4.9891851158647194e-01 5.6094916081447077e-01 6.2091411980609579e-01 6.7663384616172895e-01 7.2592215095240831e-01 7.6672659607082005e-01 7.9726951141132441e-01 8.1617621302233978e-01 8.2257756239866464e-01 8.1617621302233978e-01 7.9726951141132441e-01 7.6672659607082005e-01 7.2592215095240831e-01 6.7663384616172895e-01 6.2091411980609579e-01 5.6094916081447077e-01 4.9891851158647194e-01 4.5783336177161427e-01 5.1475588520860704e-01 5.6978282473092301e-01 6.2091411980609579e-01 6.6614361070348771e-01 7.0358787434562753e-01 7.3161562894664178e-01 7.4896539360271563e-01 7.5483960198900735e-01 7.4896539360271563e-01 7.3161562894664178e-01 7.0358787434562753e-01 6.6614361070348771e-01 6.2091411980609579e-01 5.6978282473092301e-01 5.1475588520860704e-01 4.5783336177161427e-01 4.1361797370441067e-01 4.6504318813405632e-01 5.1475588520860704e-01 5.6094916081447077e-01 6.0181060067169445e-01 6.3563867382605199e-01 6.6095963999744889e-01 6.7663384616172895e-01 6.8194075119034814e-01 6.7663384616172895e-01 6.6095963999744889e-01 6.3563867382605199e-01 6.0181060067169445e-01 5.6094916081447077e-01 5.1475588520860704e-01 4.6504318813405632e-01 4.1361797370441067e-01 3.6787944117144233e-01 4.1361797370441067e-01 4.5783336177161427e-01 4.9891851158647194e-01 5.3526142851899028e-01 5.6534873961061416e-01 5.8786967312234650e-01 6.0181060067169445e-01 6.0653065971263342e-01 6.0181060067169445e-01 5.8786967312234650e-01 5.6534873961061416e-01 5.3526142851899028e-01 4.9891851158647194e-01 4.5783336177161427e-01 4.1361797370441067e-01 3.6787944117144233e-01 GMTSAR_V5.7/gmtsar/filters/gauss29x9000644 015705 000000 00000010166 13505462013 020212 0ustar00sandwellwheel000000 000000 9 29 1.8315639e-02 4.3936934e-02 8.2084999e-02 1.1943297e-01 1.3533528e-01 1.1943297e-01 8.2084999e-02 4.3936934e-02 1.8315639e-02 2.4125406e-02 5.7873841e-02 1.0812257e-01 1.5731741e-01 1.7826398e-01 1.5731741e-01 1.0812257e-01 5.7873841e-02 2.4125406e-02 3.1136088e-02 7.4691592e-02 1.3954226e-01 2.0303280e-01 2.3006630e-01 2.0303280e-01 1.3954226e-01 7.4691592e-02 3.1136088e-02 3.9372256e-02 9.4449132e-02 1.7645421e-01 2.5673936e-01 2.9092381e-01 2.5673936e-01 1.7645421e-01 9.4449132e-02 3.9372256e-02 4.8781304e-02 1.1702026e-01 2.1862264e-01 3.1809406e-01 3.6044779e-01 3.1809406e-01 2.1862264e-01 1.1702026e-01 4.8781304e-02 5.9217948e-02 1.4205647e-01 2.6539643e-01 3.8614953e-01 4.3756474e-01 3.8614953e-01 2.6539643e-01 1.4205647e-01 5.9217948e-02 7.0435265e-02 1.6896542e-01 3.1566896e-01 4.5929562e-01 5.2045012e-01 4.5929562e-01 3.1566896e-01 1.6896542e-01 7.0435265e-02 8.2084999e-02 1.9691168e-01 3.6787944e-01 5.3526143e-01 6.0653066e-01 5.3526143e-01 3.6787944e-01 1.9691168e-01 8.2084999e-02 9.3729066e-02 2.2484434e-01 4.2006453e-01 6.1119028e-01 6.9256932e-01 6.1119028e-01 4.2006453e-01 2.2484434e-01 9.3729066e-02 1.0486284e-01 2.5155288e-01 4.6996266e-01 6.8379163e-01 7.7483743e-01 6.8379163e-01 4.6996266e-01 2.5155288e-01 1.0486284e-01 1.1494916e-01 2.7574871e-01 5.1516641e-01 7.4956270e-01 8.4936582e-01 7.4956270e-01 5.1516641e-01 2.7574871e-01 1.1494916e-01 1.2346016e-01 2.9616554e-01 5.5331007e-01 8.0506140e-01 9.1225408e-01 8.0506140e-01 5.5331007e-01 2.9616554e-01 1.2346016e-01 1.2992261e-01 3.1166814e-01 5.8227273e-01 8.4720183e-01 9.6000544e-01 8.4720183e-01 5.8227273e-01 3.1166814e-01 1.2992261e-01 1.3396133e-01 3.2135653e-01 6.0037304e-01 8.7353762e-01 9.8984780e-01 8.7353762e-01 6.0037304e-01 3.2135653e-01 1.3396133e-01 1.3533528e-01 3.2465247e-01 6.0653066e-01 8.8249690e-01 1.0000000e+00 8.8249690e-01 6.0653066e-01 3.2465247e-01 1.3533528e-01 1.3396133e-01 3.2135653e-01 6.0037304e-01 8.7353762e-01 9.8984780e-01 8.7353762e-01 6.0037304e-01 3.2135653e-01 1.3396133e-01 1.2992261e-01 3.1166814e-01 5.8227273e-01 8.4720183e-01 9.6000544e-01 8.4720183e-01 5.8227273e-01 3.1166814e-01 1.2992261e-01 1.2346016e-01 2.9616554e-01 5.5331007e-01 8.0506140e-01 9.1225408e-01 8.0506140e-01 5.5331007e-01 2.9616554e-01 1.2346016e-01 1.1494916e-01 2.7574871e-01 5.1516641e-01 7.4956270e-01 8.4936582e-01 7.4956270e-01 5.1516641e-01 2.7574871e-01 1.1494916e-01 1.0486284e-01 2.5155288e-01 4.6996266e-01 6.8379163e-01 7.7483743e-01 6.8379163e-01 4.6996266e-01 2.5155288e-01 1.0486284e-01 9.3729066e-02 2.2484434e-01 4.2006453e-01 6.1119028e-01 6.9256932e-01 6.1119028e-01 4.2006453e-01 2.2484434e-01 9.3729066e-02 8.2084999e-02 1.9691168e-01 3.6787944e-01 5.3526143e-01 6.0653066e-01 5.3526143e-01 3.6787944e-01 1.9691168e-01 8.2084999e-02 7.0435265e-02 1.6896542e-01 3.1566896e-01 4.5929562e-01 5.2045012e-01 4.5929562e-01 3.1566896e-01 1.6896542e-01 7.0435265e-02 5.9217948e-02 1.4205647e-01 2.6539643e-01 3.8614953e-01 4.3756474e-01 3.8614953e-01 2.6539643e-01 1.4205647e-01 5.9217948e-02 4.8781304e-02 1.1702026e-01 2.1862264e-01 3.1809406e-01 3.6044779e-01 3.1809406e-01 2.1862264e-01 1.1702026e-01 4.8781304e-02 3.9372256e-02 9.4449132e-02 1.7645421e-01 2.5673936e-01 2.9092381e-01 2.5673936e-01 1.7645421e-01 9.4449132e-02 3.9372256e-02 3.1136088e-02 7.4691592e-02 1.3954226e-01 2.0303280e-01 2.3006630e-01 2.0303280e-01 1.3954226e-01 7.4691592e-02 3.1136088e-02 2.4125406e-02 5.7873841e-02 1.0812257e-01 1.5731741e-01 1.7826398e-01 1.5731741e-01 1.0812257e-01 5.7873841e-02 2.4125406e-02 1.8315639e-02 4.3936934e-02 8.2084999e-02 1.1943297e-01 1.3533528e-01 1.1943297e-01 8.2084999e-02 4.3936934e-02 1.8315639e-02 GMTSAR_V5.7/gmtsar/filters/ydir000644 015705 000000 00000000677 13505462013 017411 0ustar00sandwellwheel000000 000000 1 17 2.8580304317007326e-03 1.8456092566716510e-03 -2.1764579221615073e-02 2.1530490335147274e-02 3.0529940042665758e-02 -8.7413051581473736e-02 -2.4469607245389439e-02 6.7318181998379500e-01 0.0000000000000000e+00 -6.7318181998379500e-01 2.4469607245389439e-02 8.7413051581473736e-02 -3.0529940042665758e-02 -2.1530490335147274e-02 2.1764579221615073e-02 -1.8456092566716510e-03 -2.8580304317007326e-03 GMTSAR_V5.7/gmtsar/filters/box5x3000644 015705 000000 00000000061 13505462013 017555 0ustar00sandwellwheel000000 000000 3 5 1. 1. 0. 1. 1. 0. 1. 1. 0. 1. 1. 0. 0. 0. 0. GMTSAR_V5.7/gmtsar/filters/gauss15x5.m000644 015705 000000 00000000425 13505462013 020431 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % clear sigx=5; sigy=.5; nx=21; ny=3; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss3x21 -ASCII -double gauss GMTSAR_V5.7/gmtsar/filters/gauss15x3000644 015705 000000 00000001344 13505462013 020175 0ustar00sandwellwheel000000 000000 3 15 1.6389554e-02 6.5728529e-02 1.6389554e-02 3.3746152e-02 1.3533528e-01 3.3746152e-02 6.2176524e-02 2.4935221e-01 6.2176524e-02 1.0251176e-01 4.1111229e-01 1.0251176e-01 1.5123976e-01 6.0653066e-01 1.5123976e-01 1.9966564e-01 8.0073740e-01 1.9966564e-01 2.3587708e-01 9.4595947e-01 2.3587708e-01 2.4935221e-01 1.0000000e+00 2.4935221e-01 2.3587708e-01 9.4595947e-01 2.3587708e-01 1.9966564e-01 8.0073740e-01 1.9966564e-01 1.5123976e-01 6.0653066e-01 1.5123976e-01 1.0251176e-01 4.1111229e-01 1.0251176e-01 6.2176524e-02 2.4935221e-01 6.2176524e-02 3.3746152e-02 1.3533528e-01 3.3746152e-02 1.6389554e-02 6.5728529e-02 1.6389554e-02 GMTSAR_V5.7/gmtsar/filters/fill.3x3000644 015705 000000 00000000032 13505462013 017765 0ustar00sandwellwheel000000 000000 3 3 1 2 1 2 4 2 1 2 1 GMTSAR_V5.7/gmtsar/filters/gauss15x5000644 015705 000000 00000002304 13505462013 020174 0ustar00sandwellwheel000000 000000 5 15 8.8909268e-02 1.7317161e-01 2.1626517e-01 1.7317161e-01 8.8909268e-02 1.3346862e-01 2.5996137e-01 3.2465247e-01 2.5996137e-01 1.3346862e-01 1.8822092e-01 3.6660430e-01 4.5783336e-01 3.6660430e-01 1.8822092e-01 2.4935221e-01 4.8567179e-01 6.0653066e-01 4.8567179e-01 2.4935221e-01 3.1032384e-01 6.0442830e-01 7.5483960e-01 6.0442830e-01 3.1032384e-01 3.6280532e-01 7.0664828e-01 8.8249690e-01 7.0664828e-01 3.6280532e-01 3.9846370e-01 7.7610130e-01 9.6923323e-01 7.7610130e-01 3.9846370e-01 4.1111229e-01 8.0073740e-01 1.0000000e+00 8.0073740e-01 4.1111229e-01 3.9846370e-01 7.7610130e-01 9.6923323e-01 7.7610130e-01 3.9846370e-01 3.6280532e-01 7.0664828e-01 8.8249690e-01 7.0664828e-01 3.6280532e-01 3.1032384e-01 6.0442830e-01 7.5483960e-01 6.0442830e-01 3.1032384e-01 2.4935221e-01 4.8567179e-01 6.0653066e-01 4.8567179e-01 2.4935221e-01 1.8822092e-01 3.6660430e-01 4.5783336e-01 3.6660430e-01 1.8822092e-01 1.3346862e-01 2.5996137e-01 3.2465247e-01 2.5996137e-01 1.3346862e-01 8.8909268e-02 1.7317161e-01 2.1626517e-01 1.7317161e-01 8.8909268e-02 GMTSAR_V5.7/gmtsar/filters/gauss_dir_azi.m000644 015705 000000 00000001351 13505462013 021506 0ustar00sandwellwheel000000 000000 % % matlab script to design a differentiating filter for phase_grad % clear clg sig2=2.*8.*8.; xg=4.*(-4:4); g = exp(-(xg.*xg)/sig2); g = g/sum(g); n = 16; x = 4*(-8:8); f = [0.0002,.5,.75,1.]; w = 1./f; m = [0.0002,pi/2.,pi/4.,.0]; b = remez(n,f,m,'derivative'); bg=conv(b,g); subplot(2,1,1),plot(x,b,x,b,'o',xg,g,'--',xg,g,'o'),xlabel('lag (m)'),ylabel('impulse response'),title('azimuth') axis([-32,32,-1,1]) [hp,wp]=freqz(b,1,2048); [hp2,wp2]=freqz(bg,1,2048); nk=length(wp); k=(1:nk)/(8*nk); dir=4.*2.*pi*k; subplot(2,1,2),plot(k,abs(hp),k,abs(hp2),'--',k,dir,':') axis([.001,.0625,.02,2]) xlabel('wavenumber (1/m)') ylabel('gain') pause GMTSAR_V5.7/gmtsar/filters/gauss_tsx_50m.m000644 015705 000000 00000000540 13505462013 021363 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for tsx after 4 x 2 decimation so the 0.5 gain % is at 50 km wavelength % clear sigx=1.5; sigy=1.5; nx=5; ny=5; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_tsx_50m -ascii gauss GMTSAR_V5.7/gmtsar/filters/xdir000644 015705 000000 00000000677 13505462013 017410 0ustar00sandwellwheel000000 000000 17 1 -2.8580304317007326e-03 -1.8456092566716510e-03 2.1764579221615073e-02 -2.1530490335147274e-02 -3.0529940042665758e-02 8.7413051581473736e-02 2.4469607245389439e-02 -6.7318181998379500e-01 0.0000000000000000e+00 6.7318181998379500e-01 -2.4469607245389439e-02 -8.7413051581473736e-02 3.0529940042665758e-02 2.1530490335147274e-02 -2.1764579221615073e-02 1.8456092566716510e-03 2.8580304317007326e-03 GMTSAR_V5.7/gmtsar/filters/gauss21x21000644 015705 000000 00000025454 13505462013 020262 0ustar00sandwellwheel000000 000000 21 21 3.6787944117144233e-01 4.0454188510301881e-01 4.4043165450599925e-01 4.7473429993991240e-01 5.0661699236558966e-01 5.3526142851899028e-01 5.5989836656540204e-01 5.7984178333984637e-01 5.9452054797019427e-01 6.0350557542704053e-01 6.0653065971263342e-01 6.0350557542704053e-01 5.9452054797019427e-01 5.7984178333984637e-01 5.5989836656540204e-01 5.3526142851899028e-01 5.0661699236558966e-01 4.7473429993991240e-01 4.4043165450599925e-01 4.0454188510301881e-01 3.6787944117144233e-01 4.0454188510301881e-01 4.4485806622294111e-01 4.8432456895536241e-01 5.2204577676101604e-01 5.5710586181217392e-01 5.8860496967835518e-01 6.1569719676428503e-01 6.3762815162177322e-01 6.5376978512984718e-01 6.6365025013631929e-01 6.6697681085847438e-01 6.6365025013631929e-01 6.5376978512984718e-01 6.3762815162177322e-01 6.1569719676428503e-01 5.8860496967835518e-01 5.5710586181217392e-01 5.2204577676101604e-01 4.8432456895536241e-01 4.4485806622294111e-01 4.0454188510301881e-01 4.4043165450599925e-01 4.8432456895536241e-01 5.2729242404304855e-01 5.6836014675754043e-01 6.0653065971263342e-01 6.4082427603231873e-01 6.7032004603563922e-01 6.9419665087797877e-01 7.1177032276260965e-01 7.2252735364207221e-01 7.2614903707369094e-01 7.2252735364207221e-01 7.1177032276260965e-01 6.9419665087797877e-01 6.7032004603563922e-01 6.4082427603231873e-01 6.0653065971263342e-01 5.6836014675754043e-01 5.2729242404304855e-01 4.8432456895536241e-01 4.4043165450599925e-01 4.7473429993991240e-01 5.2204577676101604e-01 5.6836014675754043e-01 6.1262639418441611e-01 6.5376978512984729e-01 6.9073433063735468e-01 7.2252735364207221e-01 7.4826356757856516e-01 7.6720594997585567e-01 7.7880078307140488e-01 7.8270453824186825e-01 7.7880078307140488e-01 7.6720594997585567e-01 7.4826356757856516e-01 7.2252735364207221e-01 6.9073433063735468e-01 6.5376978512984729e-01 6.1262639418441611e-01 5.6836014675754043e-01 5.2204577676101604e-01 4.7473429993991240e-01 5.0661699236558966e-01 5.5710586181217392e-01 6.0653065971263342e-01 6.5376978512984729e-01 6.9767632607103103e-01 7.3712337439162767e-01 7.7105158580356625e-01 7.9851621875937706e-01 8.1873075307798182e-01 8.3110428385212565e-01 8.3527021141127200e-01 8.3110428385212565e-01 8.1873075307798182e-01 7.9851621875937706e-01 7.7105158580356625e-01 7.3712337439162767e-01 6.9767632607103103e-01 6.5376978512984729e-01 6.0653065971263342e-01 5.5710586181217392e-01 5.0661699236558966e-01 5.3526142851899028e-01 5.8860496967835518e-01 6.4082427603231873e-01 6.9073433063735468e-01 7.3712337439162767e-01 7.7880078307140488e-01 8.1464731641141452e-01 8.4366481659638370e-01 8.6502229311074130e-01 8.7809543092056130e-01 8.8249690258459546e-01 8.7809543092056130e-01 8.6502229311074130e-01 8.4366481659638370e-01 8.1464731641141452e-01 7.7880078307140488e-01 7.3712337439162767e-01 6.9073433063735468e-01 6.4082427603231873e-01 5.8860496967835518e-01 5.3526142851899028e-01 5.5989836656540204e-01 6.1569719676428503e-01 6.7032004603563922e-01 7.2252735364207221e-01 7.7105158580356625e-01 8.1464731641141452e-01 8.5214378896621135e-01 8.8249690258459546e-01 9.0483741803595952e-01 9.1851228440145738e-01 9.2311634638663576e-01 9.1851228440145738e-01 9.0483741803595952e-01 8.8249690258459546e-01 8.5214378896621135e-01 8.1464731641141452e-01 7.7105158580356625e-01 7.2252735364207221e-01 6.7032004603563922e-01 6.1569719676428503e-01 5.5989836656540204e-01 5.7984178333984637e-01 6.3762815162177322e-01 6.9419665087797877e-01 7.4826356757856516e-01 7.9851621875937706e-01 8.4366481659638370e-01 8.8249690258459546e-01 9.1393118527122819e-01 9.3706746337740343e-01 9.5122942450071402e-01 9.5599748183309996e-01 9.5122942450071402e-01 9.3706746337740343e-01 9.1393118527122819e-01 8.8249690258459546e-01 8.4366481659638370e-01 7.9851621875937706e-01 7.4826356757856516e-01 6.9419665087797877e-01 6.3762815162177322e-01 5.7984178333984637e-01 5.9452054797019427e-01 6.5376978512984718e-01 7.1177032276260965e-01 7.6720594997585567e-01 8.1873075307798182e-01 8.6502229311074130e-01 9.0483741803595952e-01 9.3706746337740343e-01 9.6078943915232318e-01 9.7530991202833262e-01 9.8019867330675525e-01 9.7530991202833262e-01 9.6078943915232318e-01 9.3706746337740343e-01 9.0483741803595952e-01 8.6502229311074130e-01 8.1873075307798182e-01 7.6720594997585567e-01 7.1177032276260965e-01 6.5376978512984718e-01 5.9452054797019427e-01 6.0350557542704053e-01 6.6365025013631929e-01 7.2252735364207221e-01 7.7880078307140488e-01 8.3110428385212565e-01 8.7809543092056130e-01 9.1851228440145738e-01 9.5122942450071402e-01 9.7530991202833262e-01 9.9004983374916811e-01 9.9501247919268232e-01 9.9004983374916811e-01 9.7530991202833262e-01 9.5122942450071402e-01 9.1851228440145738e-01 8.7809543092056130e-01 8.3110428385212565e-01 7.7880078307140488e-01 7.2252735364207221e-01 6.6365025013631929e-01 6.0350557542704053e-01 6.0653065971263342e-01 6.6697681085847438e-01 7.2614903707369094e-01 7.8270453824186825e-01 8.3527021141127200e-01 8.8249690258459546e-01 9.2311634638663576e-01 9.5599748183309996e-01 9.8019867330675525e-01 9.9501247919268232e-01 1.0000000000000000e+00 9.9501247919268232e-01 9.8019867330675525e-01 9.5599748183309996e-01 9.2311634638663576e-01 8.8249690258459546e-01 8.3527021141127200e-01 7.8270453824186825e-01 7.2614903707369094e-01 6.6697681085847438e-01 6.0653065971263342e-01 6.0350557542704053e-01 6.6365025013631929e-01 7.2252735364207221e-01 7.7880078307140488e-01 8.3110428385212565e-01 8.7809543092056130e-01 9.1851228440145738e-01 9.5122942450071402e-01 9.7530991202833262e-01 9.9004983374916811e-01 9.9501247919268232e-01 9.9004983374916811e-01 9.7530991202833262e-01 9.5122942450071402e-01 9.1851228440145738e-01 8.7809543092056130e-01 8.3110428385212565e-01 7.7880078307140488e-01 7.2252735364207221e-01 6.6365025013631929e-01 6.0350557542704053e-01 5.9452054797019427e-01 6.5376978512984718e-01 7.1177032276260965e-01 7.6720594997585567e-01 8.1873075307798182e-01 8.6502229311074130e-01 9.0483741803595952e-01 9.3706746337740343e-01 9.6078943915232318e-01 9.7530991202833262e-01 9.8019867330675525e-01 9.7530991202833262e-01 9.6078943915232318e-01 9.3706746337740343e-01 9.0483741803595952e-01 8.6502229311074130e-01 8.1873075307798182e-01 7.6720594997585567e-01 7.1177032276260965e-01 6.5376978512984718e-01 5.9452054797019427e-01 5.7984178333984637e-01 6.3762815162177322e-01 6.9419665087797877e-01 7.4826356757856516e-01 7.9851621875937706e-01 8.4366481659638370e-01 8.8249690258459546e-01 9.1393118527122819e-01 9.3706746337740343e-01 9.5122942450071402e-01 9.5599748183309996e-01 9.5122942450071402e-01 9.3706746337740343e-01 9.1393118527122819e-01 8.8249690258459546e-01 8.4366481659638370e-01 7.9851621875937706e-01 7.4826356757856516e-01 6.9419665087797877e-01 6.3762815162177322e-01 5.7984178333984637e-01 5.5989836656540204e-01 6.1569719676428503e-01 6.7032004603563922e-01 7.2252735364207221e-01 7.7105158580356625e-01 8.1464731641141452e-01 8.5214378896621135e-01 8.8249690258459546e-01 9.0483741803595952e-01 9.1851228440145738e-01 9.2311634638663576e-01 9.1851228440145738e-01 9.0483741803595952e-01 8.8249690258459546e-01 8.5214378896621135e-01 8.1464731641141452e-01 7.7105158580356625e-01 7.2252735364207221e-01 6.7032004603563922e-01 6.1569719676428503e-01 5.5989836656540204e-01 5.3526142851899028e-01 5.8860496967835518e-01 6.4082427603231873e-01 6.9073433063735468e-01 7.3712337439162767e-01 7.7880078307140488e-01 8.1464731641141452e-01 8.4366481659638370e-01 8.6502229311074130e-01 8.7809543092056130e-01 8.8249690258459546e-01 8.7809543092056130e-01 8.6502229311074130e-01 8.4366481659638370e-01 8.1464731641141452e-01 7.7880078307140488e-01 7.3712337439162767e-01 6.9073433063735468e-01 6.4082427603231873e-01 5.8860496967835518e-01 5.3526142851899028e-01 5.0661699236558966e-01 5.5710586181217392e-01 6.0653065971263342e-01 6.5376978512984729e-01 6.9767632607103103e-01 7.3712337439162767e-01 7.7105158580356625e-01 7.9851621875937706e-01 8.1873075307798182e-01 8.3110428385212565e-01 8.3527021141127200e-01 8.3110428385212565e-01 8.1873075307798182e-01 7.9851621875937706e-01 7.7105158580356625e-01 7.3712337439162767e-01 6.9767632607103103e-01 6.5376978512984729e-01 6.0653065971263342e-01 5.5710586181217392e-01 5.0661699236558966e-01 4.7473429993991240e-01 5.2204577676101604e-01 5.6836014675754043e-01 6.1262639418441611e-01 6.5376978512984729e-01 6.9073433063735468e-01 7.2252735364207221e-01 7.4826356757856516e-01 7.6720594997585567e-01 7.7880078307140488e-01 7.8270453824186825e-01 7.7880078307140488e-01 7.6720594997585567e-01 7.4826356757856516e-01 7.2252735364207221e-01 6.9073433063735468e-01 6.5376978512984729e-01 6.1262639418441611e-01 5.6836014675754043e-01 5.2204577676101604e-01 4.7473429993991240e-01 4.4043165450599925e-01 4.8432456895536241e-01 5.2729242404304855e-01 5.6836014675754043e-01 6.0653065971263342e-01 6.4082427603231873e-01 6.7032004603563922e-01 6.9419665087797877e-01 7.1177032276260965e-01 7.2252735364207221e-01 7.2614903707369094e-01 7.2252735364207221e-01 7.1177032276260965e-01 6.9419665087797877e-01 6.7032004603563922e-01 6.4082427603231873e-01 6.0653065971263342e-01 5.6836014675754043e-01 5.2729242404304855e-01 4.8432456895536241e-01 4.4043165450599925e-01 4.0454188510301881e-01 4.4485806622294111e-01 4.8432456895536241e-01 5.2204577676101604e-01 5.5710586181217392e-01 5.8860496967835518e-01 6.1569719676428503e-01 6.3762815162177322e-01 6.5376978512984718e-01 6.6365025013631929e-01 6.6697681085847438e-01 6.6365025013631929e-01 6.5376978512984718e-01 6.3762815162177322e-01 6.1569719676428503e-01 5.8860496967835518e-01 5.5710586181217392e-01 5.2204577676101604e-01 4.8432456895536241e-01 4.4485806622294111e-01 4.0454188510301881e-01 3.6787944117144233e-01 4.0454188510301881e-01 4.4043165450599925e-01 4.7473429993991240e-01 5.0661699236558966e-01 5.3526142851899028e-01 5.5989836656540204e-01 5.7984178333984637e-01 5.9452054797019427e-01 6.0350557542704053e-01 6.0653065971263342e-01 6.0350557542704053e-01 5.9452054797019427e-01 5.7984178333984637e-01 5.5989836656540204e-01 5.3526142851899028e-01 5.0661699236558966e-01 4.7473429993991240e-01 4.4043165450599925e-01 4.0454188510301881e-01 3.6787944117144233e-01 GMTSAR_V5.7/gmtsar/filters/smooth3x3000644 015705 000000 00000000141 13505462013 020273 0ustar00sandwellwheel000000 000000 3 3 0.7000 1.0000 0.7000 1.0000 3.0000 1.0000 0.7000 1.0000 0.7000 GMTSAR_V5.7/gmtsar/filters/sanandreas13x9000644 015705 000000 00000003545 13505462013 021203 0ustar00sandwellwheel000000 000000 9 13 4.7875768e-10 7.3336806e-08 5.1611161e-06 1.6687092e-04 2.4787522e-03 1.6916128e-02 5.3037641e-02 7.6398152e-02 5.0558818e-02 1.3962475e-08 1.4554879e-06 6.9706010e-05 1.5337241e-03 1.5503854e-02 7.2002484e-02 1.5362812e-01 1.5059458e-01 6.7820871e-02 2.9177241e-07 2.0698096e-05 6.7457772e-04 1.0100642e-02 6.9483451e-02 2.1959840e-01 3.1885437e-01 2.1270171e-01 6.5187600e-02 4.3687904e-06 2.1090524e-04 4.6776631e-03 4.7663497e-02 2.2313016e-01 4.7989481e-01 4.7418655e-01 2.1526222e-01 4.4895394e-02 4.6871988e-05 1.5398539e-03 2.3241334e-02 1.6116027e-01 5.1341712e-01 7.5144655e-01 5.0529063e-01 1.5609889e-01 2.2155102e-02 3.6033024e-04 8.0557657e-03 8.2742444e-02 3.9044985e-01 8.4648172e-01 8.4311208e-01 3.8580552e-01 8.1108612e-02 7.8339520e-03 1.9848296e-03 3.0197383e-02 2.1107209e-01 6.7780958e-01 1.0000000e+00 6.7780958e-01 2.1107209e-01 3.0197383e-02 1.9848296e-03 7.8339520e-03 8.1108612e-02 3.8580552e-01 8.4311208e-01 8.4648172e-01 3.9044985e-01 8.2742444e-02 8.0557657e-03 3.6033024e-04 2.2155102e-02 1.5609889e-01 5.0529063e-01 7.5144655e-01 5.1341712e-01 1.6116027e-01 2.3241334e-02 1.5398539e-03 4.6871988e-05 4.4895394e-02 2.1526222e-01 4.7418655e-01 4.7989481e-01 2.2313016e-01 4.7663497e-02 4.6776631e-03 2.1090524e-04 4.3687904e-06 6.5187600e-02 2.1270171e-01 3.1885437e-01 2.1959840e-01 6.9483451e-02 1.0100642e-02 6.7457772e-04 2.0698096e-05 2.9177241e-07 6.7820871e-02 1.5059458e-01 1.5362812e-01 7.2002484e-02 1.5503854e-02 1.5337241e-03 6.9706010e-05 1.4554879e-06 1.3962475e-08 5.0558818e-02 7.6398152e-02 5.3037641e-02 1.6916128e-02 2.4787522e-03 1.6687092e-04 5.1611161e-06 7.3336806e-08 4.7875768e-10 GMTSAR_V5.7/gmtsar/filters/gauss_alos_500m.m000644 015705 000000 00000000560 13505462013 021565 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for alos after 4 x 2 decimation so the 0.5 gain % is at 300 m wavelength % clear sigx=5.65; sigy=7.55; nx=17; ny=17; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_alos_500m -ASCII -double gauss GMTSAR_V5.7/gmtsar/filters/gauss5x3000644 015705 000000 00000000335 13505462013 020113 0ustar00sandwellwheel000000 000000 3 5 0.0439 0.3247 0.0439 0.0821 0.6065 0.0821 0.1194 0.8825 0.1194 0.1353 1.0000 0.1353 0.1194 0.8825 0.1194 0.0821 0.6065 0.0821 0.0439 0.3247 0.0439 GMTSAR_V5.7/gmtsar/filters/gauss_alos_300m000644 015705 000000 00000005742 13505462013 021337 0ustar00sandwellwheel000000 000000 11 11 1.8326193626491494e-01 2.7110055855733639e-01 3.6761892081926906e-01 4.5695622828788085e-01 5.2066771385996735e-01 5.4382102907765173e-01 5.2066771385996735e-01 4.5695622828788085e-01 3.6761892081926906e-01 2.7110055855733639e-01 1.8326193626491494e-01 2.2819604428228568e-01 3.3757187295060820e-01 4.5775563242447509e-01 5.6899760981850345e-01 6.4833055412332374e-01 6.7716084508488417e-01 6.4833055412332374e-01 5.6899760981850345e-01 4.5775563242447509e-01 3.3757187295060820e-01 2.2819604428228568e-01 2.7063280104735304e-01 4.0034883960745415e-01 5.4288271905796148e-01 6.7481194697634939e-01 7.6889813939950991e-01 8.0308989071788706e-01 7.6889813939950991e-01 6.7481194697634939e-01 5.4288271905796148e-01 4.0034883960745415e-01 2.7063280104735304e-01 3.0569563184412057e-01 4.5221751025090007e-01 6.1321789220457434e-01 7.6223969788053136e-01 8.6851557400972634e-01 9.0713716378996689e-01 8.6851557400972634e-01 7.6223969788053136e-01 6.1321789220457434e-01 4.5221751025090007e-01 3.0569563184412057e-01 3.2887776573092120e-01 4.8651098970087037e-01 6.5972068059285249e-01 8.2004341140925907e-01 9.3437861627174890e-01 9.7592903712427370e-01 9.3437861627174890e-01 8.2004341140925907e-01 6.5972068059285249e-01 4.8651098970087037e-01 3.2887776573092120e-01 3.3698942568612422e-01 4.9851062033613674e-01 6.7599247024847409e-01 8.4026950753063367e-01 9.5742475193180065e-01 1.0000000000000000e+00 9.5742475193180065e-01 8.4026950753063367e-01 6.7599247024847409e-01 4.9851062033613674e-01 3.3698942568612422e-01 3.2887776573092120e-01 4.8651098970087037e-01 6.5972068059285249e-01 8.2004341140925907e-01 9.3437861627174890e-01 9.7592903712427370e-01 9.3437861627174890e-01 8.2004341140925907e-01 6.5972068059285249e-01 4.8651098970087037e-01 3.2887776573092120e-01 3.0569563184412057e-01 4.5221751025090007e-01 6.1321789220457434e-01 7.6223969788053136e-01 8.6851557400972634e-01 9.0713716378996689e-01 8.6851557400972634e-01 7.6223969788053136e-01 6.1321789220457434e-01 4.5221751025090007e-01 3.0569563184412057e-01 2.7063280104735304e-01 4.0034883960745415e-01 5.4288271905796148e-01 6.7481194697634939e-01 7.6889813939950991e-01 8.0308989071788706e-01 7.6889813939950991e-01 6.7481194697634939e-01 5.4288271905796148e-01 4.0034883960745415e-01 2.7063280104735304e-01 2.2819604428228568e-01 3.3757187295060820e-01 4.5775563242447509e-01 5.6899760981850345e-01 6.4833055412332374e-01 6.7716084508488417e-01 6.4833055412332374e-01 5.6899760981850345e-01 4.5775563242447509e-01 3.3757187295060820e-01 2.2819604428228568e-01 1.8326193626491494e-01 2.7110055855733639e-01 3.6761892081926906e-01 4.5695622828788085e-01 5.2066771385996735e-01 5.4382102907765173e-01 5.2066771385996735e-01 4.5695622828788085e-01 3.6761892081926906e-01 2.7110055855733639e-01 1.8326193626491494e-01 GMTSAR_V5.7/gmtsar/filters/gauss_dir_range.m000644 015705 000000 00000001644 13505462013 022024 0ustar00sandwellwheel000000 000000 % % matlab script to design a differentiating filter for phase_grad % clear clg sig2=2.*8.*8.; xg=8.*(-2:2); g = exp(-(xg.*xg)/sig2); g = g/sum(g); n = 16; x = 8*(-8:8); f = [0.0002,.5,.75,1.]; w = 1./f; m = [0.0002,pi/2.,pi/4.,.0]; b = remez(n,f,m,'derivative'); bg=conv(b,g); fd=zeros(1,17); fd(1,9)=-1.; fd(1,10)=1.; fg=conv(fd,g); subplot(2,1,1),plot(x,b,x,b,'o',xg,g,'--',xg,g,'o',x,fd,':',x,fd,'o'),xlabel('lag (m)'),ylabel('impulse response'),title('range') axis([-64,64,-1,1]),grid [hp,wp]=freqz(b,1,2048); [hp2,wp2]=freqz(bg,1,2048); [hf2,wp2]=freqz(fg,1,2048); [hfd,wp]=freqz(fd,1,2048); nk=length(wp); k=(1:nk)/(16*nk); dir=8.*2.*pi*k; subplot(2,1,2),plot(k,abs(hp),k,abs(hp2),'--',k,dir,k,abs(hfd),':',k,abs(hf2),'-.') axis([.001,.0625,.02,1.8]) xlabel('wavenumber (1/m)') ylabel('gain') pause GMTSAR_V5.7/gmtsar/filters/gauss_alos_700m000644 015705 000000 00000016121 13505462013 021334 0ustar00sandwellwheel000000 000000 17 17 4.5043693347551461e-01 5.0795411777260913e-01 5.6371065686729904e-01 6.1564346344509868e-01 6.6167323567356540e-01 6.9984059568633905e-01 7.2844364985708787e-01 7.4616360183213915e-01 7.5216552907458945e-01 7.4616360183213915e-01 7.2844364985708787e-01 6.9984059568633905e-01 6.6167323567356540e-01 6.1564346344509868e-01 5.6371065686729904e-01 5.0795411777260913e-01 4.5043693347551461e-01 4.8152965010655330e-01 5.4301712498121202e-01 6.0262242100847008e-01 6.5814004028428497e-01 7.0734715113249602e-01 7.4814912394283795e-01 7.7872658694203523e-01 7.9766971003057563e-01 8.0408593772026005e-01 7.9766971003057563e-01 7.7872658694203523e-01 7.4814912394283795e-01 7.0734715113249602e-01 6.5814004028428497e-01 6.0262242100847008e-01 5.4301712498121202e-01 4.8152965010655330e-01 5.1020753614722270e-01 5.7535694709787133e-01 6.3851208452432839e-01 6.9733610031900528e-01 7.4947378027543898e-01 7.9270574743032562e-01 8.2510427585947044e-01 8.4517557189658699e-01 8.5197392319268905e-01 8.4517557189658699e-01 8.2510427585947044e-01 7.9270574743032562e-01 7.4947378027543898e-01 6.9733610031900528e-01 6.3851208452432839e-01 5.7535694709787133e-01 5.1020753614722270e-01 5.3580344180573591e-01 6.0422124465234306e-01 6.7054472598768267e-01 7.3231980356028847e-01 7.8707310763606808e-01 8.3247392035737744e-01 8.6649780634868057e-01 8.8757603184765799e-01 8.9471544035299400e-01 8.8757603184765799e-01 8.6649780634868057e-01 8.3247392035737744e-01 7.8707310763606808e-01 7.3231980356028847e-01 6.7054472598768267e-01 6.0422124465234306e-01 5.3580344180573591e-01 5.5769778993479158e-01 6.2891132546407869e-01 6.9794495995669004e-01 7.6224433085879717e-01 8.1923499999630733e-01 8.6649101020517372e-01 9.0190520231710647e-01 9.2384473995223226e-01 9.3127588360343549e-01 9.2384473995223226e-01 9.0190520231710647e-01 8.6649101020517372e-01 8.1923499999630733e-01 7.6224433085879717e-01 6.9794495995669004e-01 6.2891132546407869e-01 5.5769778993479158e-01 5.7534340922962912e-01 6.4881014884053201e-01 7.2002801510666004e-01 7.8636182516257636e-01 8.4515568532775065e-01 8.9390688088715620e-01 9.3044158192510507e-01 9.5307528893942006e-01 9.6074155479150147e-01 9.5307528893942006e-01 9.3044158192510507e-01 8.9390688088715620e-01 8.4515568532775065e-01 7.8636182516257636e-01 7.2002801510666004e-01 6.4881014884053201e-01 5.7534340922962912e-01 5.8828822535052538e-01 6.6340791417403566e-01 7.3622813160739431e-01 8.0405440505125836e-01 8.6417108511263163e-01 9.1401914778143079e-01 9.5137585352019205e-01 9.7451880279006164e-01 9.8235755415287818e-01 9.7451880279006164e-01 9.5137585352019205e-01 9.1401914778143079e-01 8.6417108511263163e-01 8.0405440505125836e-01 7.3622813160739431e-01 6.6340791417403566e-01 5.8828822535052538e-01 5.9619449848487238e-01 6.7232375498628727e-01 7.4612263645526833e-01 8.1486045804921237e-01 8.7578507352729762e-01 9.2630306699140164e-01 9.6416182649605986e-01 9.8761580439131602e-01 9.9555990430036567e-01 9.8761580439131602e-01 9.6416182649605986e-01 9.2630306699140164e-01 8.7578507352729762e-01 8.1486045804921237e-01 7.4612263645526833e-01 6.7232375498628727e-01 5.9619449848487238e-01 5.9885346518033067e-01 6.7532225040618310e-01 7.4945026736448317e-01 8.1849465263655763e-01 8.7969098568986626e-01 9.3043428425571784e-01 9.6846188996897076e-01 9.9202047021506723e-01 1.0000000000000000e+00 9.9202047021506723e-01 9.6846188996897076e-01 9.3043428425571784e-01 8.7969098568986626e-01 8.1849465263655763e-01 7.4945026736448317e-01 6.7532225040618310e-01 5.9885346518033067e-01 5.9619449848487238e-01 6.7232375498628727e-01 7.4612263645526833e-01 8.1486045804921237e-01 8.7578507352729762e-01 9.2630306699140164e-01 9.6416182649605986e-01 9.8761580439131602e-01 9.9555990430036567e-01 9.8761580439131602e-01 9.6416182649605986e-01 9.2630306699140164e-01 8.7578507352729762e-01 8.1486045804921237e-01 7.4612263645526833e-01 6.7232375498628727e-01 5.9619449848487238e-01 5.8828822535052538e-01 6.6340791417403566e-01 7.3622813160739431e-01 8.0405440505125836e-01 8.6417108511263163e-01 9.1401914778143079e-01 9.5137585352019205e-01 9.7451880279006164e-01 9.8235755415287818e-01 9.7451880279006164e-01 9.5137585352019205e-01 9.1401914778143079e-01 8.6417108511263163e-01 8.0405440505125836e-01 7.3622813160739431e-01 6.6340791417403566e-01 5.8828822535052538e-01 5.7534340922962912e-01 6.4881014884053201e-01 7.2002801510666004e-01 7.8636182516257636e-01 8.4515568532775065e-01 8.9390688088715620e-01 9.3044158192510507e-01 9.5307528893942006e-01 9.6074155479150147e-01 9.5307528893942006e-01 9.3044158192510507e-01 8.9390688088715620e-01 8.4515568532775065e-01 7.8636182516257636e-01 7.2002801510666004e-01 6.4881014884053201e-01 5.7534340922962912e-01 5.5769778993479158e-01 6.2891132546407869e-01 6.9794495995669004e-01 7.6224433085879717e-01 8.1923499999630733e-01 8.6649101020517372e-01 9.0190520231710647e-01 9.2384473995223226e-01 9.3127588360343549e-01 9.2384473995223226e-01 9.0190520231710647e-01 8.6649101020517372e-01 8.1923499999630733e-01 7.6224433085879717e-01 6.9794495995669004e-01 6.2891132546407869e-01 5.5769778993479158e-01 5.3580344180573591e-01 6.0422124465234306e-01 6.7054472598768267e-01 7.3231980356028847e-01 7.8707310763606808e-01 8.3247392035737744e-01 8.6649780634868057e-01 8.8757603184765799e-01 8.9471544035299400e-01 8.8757603184765799e-01 8.6649780634868057e-01 8.3247392035737744e-01 7.8707310763606808e-01 7.3231980356028847e-01 6.7054472598768267e-01 6.0422124465234306e-01 5.3580344180573591e-01 5.1020753614722270e-01 5.7535694709787133e-01 6.3851208452432839e-01 6.9733610031900528e-01 7.4947378027543898e-01 7.9270574743032562e-01 8.2510427585947044e-01 8.4517557189658699e-01 8.5197392319268905e-01 8.4517557189658699e-01 8.2510427585947044e-01 7.9270574743032562e-01 7.4947378027543898e-01 6.9733610031900528e-01 6.3851208452432839e-01 5.7535694709787133e-01 5.1020753614722270e-01 4.8152965010655330e-01 5.4301712498121202e-01 6.0262242100847008e-01 6.5814004028428497e-01 7.0734715113249602e-01 7.4814912394283795e-01 7.7872658694203523e-01 7.9766971003057563e-01 8.0408593772026005e-01 7.9766971003057563e-01 7.7872658694203523e-01 7.4814912394283795e-01 7.0734715113249602e-01 6.5814004028428497e-01 6.0262242100847008e-01 5.4301712498121202e-01 4.8152965010655330e-01 4.5043693347551461e-01 5.0795411777260913e-01 5.6371065686729904e-01 6.1564346344509868e-01 6.6167323567356540e-01 6.9984059568633905e-01 7.2844364985708787e-01 7.4616360183213915e-01 7.5216552907458945e-01 7.4616360183213915e-01 7.2844364985708787e-01 6.9984059568633905e-01 6.6167323567356540e-01 6.1564346344509868e-01 5.6371065686729904e-01 5.0795411777260913e-01 4.5043693347551461e-01 GMTSAR_V5.7/gmtsar/filters/gauss_alos_200m.m000644 015705 000000 00000000560 13505462013 021562 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for alos after 4 x 2 decimation so the 0.5 gail % is att 100 km wavelength % clear sigx=2.26; sigy=3.02; nx=9; ny=9; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_alos_200m -ASCII -double gauss GMTSAR_V5.7/gmtsar/filters/gauss5x5000644 015705 000000 00000001172 13505462013 020115 0ustar00sandwellwheel000000 000000 5 5 1.8315638888734179e-02 8.2084998623898800e-02 1.3533528323661270e-01 8.2084998623898800e-02 1.8315638888734179e-02 8.2084998623898800e-02 3.6787944117144233e-01 6.0653065971263342e-01 3.6787944117144233e-01 8.2084998623898800e-02 1.3533528323661270e-01 6.0653065971263342e-01 1.0000000000000000e+00 6.0653065971263342e-01 1.3533528323661270e-01 8.2084998623898800e-02 3.6787944117144233e-01 6.0653065971263342e-01 3.6787944117144233e-01 8.2084998623898800e-02 1.8315638888734179e-02 8.2084998623898800e-02 1.3533528323661270e-01 8.2084998623898800e-02 1.8315638888734179e-02 GMTSAR_V5.7/gmtsar/filters/gauss9x9000644 015705 000000 00000003770 13505462013 020133 0ustar00sandwellwheel000000 000000 9 9 1.8315638888734179e-02 4.3936933623407420e-02 8.2084998623898800e-02 1.1943296826671962e-01 1.3533528323661270e-01 1.1943296826671962e-01 8.2084998623898800e-02 4.3936933623407420e-02 1.8315638888734179e-02 4.3936933623407420e-02 1.0539922456186433e-01 1.9691167520419406e-01 2.8650479686019009e-01 3.2465246735834974e-01 2.8650479686019009e-01 1.9691167520419406e-01 1.0539922456186433e-01 4.3936933623407420e-02 8.2084998623898800e-02 1.9691167520419406e-01 3.6787944117144233e-01 5.3526142851899028e-01 6.0653065971263342e-01 5.3526142851899028e-01 3.6787944117144233e-01 1.9691167520419406e-01 8.2084998623898800e-02 1.1943296826671962e-01 2.8650479686019009e-01 5.3526142851899028e-01 7.7880078307140488e-01 8.8249690258459546e-01 7.7880078307140488e-01 5.3526142851899028e-01 2.8650479686019009e-01 1.1943296826671962e-01 1.3533528323661270e-01 3.2465246735834974e-01 6.0653065971263342e-01 8.8249690258459546e-01 1.0000000000000000e+00 8.8249690258459546e-01 6.0653065971263342e-01 3.2465246735834974e-01 1.3533528323661270e-01 1.1943296826671962e-01 2.8650479686019009e-01 5.3526142851899028e-01 7.7880078307140488e-01 8.8249690258459546e-01 7.7880078307140488e-01 5.3526142851899028e-01 2.8650479686019009e-01 1.1943296826671962e-01 8.2084998623898800e-02 1.9691167520419406e-01 3.6787944117144233e-01 5.3526142851899028e-01 6.0653065971263342e-01 5.3526142851899028e-01 3.6787944117144233e-01 1.9691167520419406e-01 8.2084998623898800e-02 4.3936933623407420e-02 1.0539922456186433e-01 1.9691167520419406e-01 2.8650479686019009e-01 3.2465246735834974e-01 2.8650479686019009e-01 1.9691167520419406e-01 1.0539922456186433e-01 4.3936933623407420e-02 1.8315638888734179e-02 4.3936933623407420e-02 8.2084998623898800e-02 1.1943296826671962e-01 1.3533528323661270e-01 1.1943296826671962e-01 8.2084998623898800e-02 4.3936933623407420e-02 1.8315638888734179e-02 GMTSAR_V5.7/gmtsar/filters/gauss_tsx_200m000644 015705 000000 00000004771 13505462013 021217 0ustar00sandwellwheel000000 000000 13 13 3.67879441e-01 4.28603846e-01 4.85671785e-01 5.35261429e-01 5.73753421e-01 5.98164853e-01 6.06530660e-01 5.98164853e-01 5.73753421e-01 5.35261429e-01 4.85671785e-01 4.28603846e-01 3.67879441e-01 4.28603846e-01 4.99351789e-01 5.65839707e-01 6.23614916e-01 6.68460630e-01 6.96901561e-01 7.06648278e-01 6.96901561e-01 6.68460630e-01 6.23614916e-01 5.65839707e-01 4.99351789e-01 4.28603846e-01 4.85671785e-01 5.65839707e-01 6.41180388e-01 7.06648278e-01 7.57465128e-01 7.89692925e-01 8.00737403e-01 7.89692925e-01 7.57465128e-01 7.06648278e-01 6.41180388e-01 5.65839707e-01 4.85671785e-01 5.35261429e-01 6.23614916e-01 7.06648278e-01 7.78800783e-01 8.34806301e-01 8.70324726e-01 8.82496903e-01 8.70324726e-01 8.34806301e-01 7.78800783e-01 7.06648278e-01 6.23614916e-01 5.35261429e-01 5.73753421e-01 6.68460630e-01 7.57465128e-01 8.34806301e-01 8.94839317e-01 9.32911960e-01 9.45959469e-01 9.32911960e-01 8.94839317e-01 8.34806301e-01 7.57465128e-01 6.68460630e-01 5.73753421e-01 5.98164853e-01 6.96901561e-01 7.89692925e-01 8.70324726e-01 9.32911960e-01 9.72604477e-01 9.86207117e-01 9.72604477e-01 9.32911960e-01 8.70324726e-01 7.89692925e-01 6.96901561e-01 5.98164853e-01 6.06530660e-01 7.06648278e-01 8.00737403e-01 8.82496903e-01 9.45959469e-01 9.86207117e-01 1.00000000e+00 9.86207117e-01 9.45959469e-01 8.82496903e-01 8.00737403e-01 7.06648278e-01 6.06530660e-01 5.98164853e-01 6.96901561e-01 7.89692925e-01 8.70324726e-01 9.32911960e-01 9.72604477e-01 9.86207117e-01 9.72604477e-01 9.32911960e-01 8.70324726e-01 7.89692925e-01 6.96901561e-01 5.98164853e-01 5.73753421e-01 6.68460630e-01 7.57465128e-01 8.34806301e-01 8.94839317e-01 9.32911960e-01 9.45959469e-01 9.32911960e-01 8.94839317e-01 8.34806301e-01 7.57465128e-01 6.68460630e-01 5.73753421e-01 5.35261429e-01 6.23614916e-01 7.06648278e-01 7.78800783e-01 8.34806301e-01 8.70324726e-01 8.82496903e-01 8.70324726e-01 8.34806301e-01 7.78800783e-01 7.06648278e-01 6.23614916e-01 5.35261429e-01 4.85671785e-01 5.65839707e-01 6.41180388e-01 7.06648278e-01 7.57465128e-01 7.89692925e-01 8.00737403e-01 7.89692925e-01 7.57465128e-01 7.06648278e-01 6.41180388e-01 5.65839707e-01 4.85671785e-01 4.28603846e-01 4.99351789e-01 5.65839707e-01 6.23614916e-01 6.68460630e-01 6.96901561e-01 7.06648278e-01 6.96901561e-01 6.68460630e-01 6.23614916e-01 5.65839707e-01 4.99351789e-01 4.28603846e-01 3.67879441e-01 4.28603846e-01 4.85671785e-01 5.35261429e-01 5.73753421e-01 5.98164853e-01 6.06530660e-01 5.98164853e-01 5.73753421e-01 5.35261429e-01 4.85671785e-01 4.28603846e-01 3.67879441e-01 GMTSAR_V5.7/gmtsar/filters/gauss_tsx_50m000644 015705 000000 00000000600 13505462013 021125 0ustar00sandwellwheel000000 000000 5 5 1.69013315e-01 3.29192988e-01 4.11112291e-01 3.29192988e-01 1.69013315e-01 3.29192988e-01 6.41180388e-01 8.00737403e-01 6.41180388e-01 3.29192988e-01 4.11112291e-01 8.00737403e-01 1.00000000e+00 8.00737403e-01 4.11112291e-01 3.29192988e-01 6.41180388e-01 8.00737403e-01 6.41180388e-01 3.29192988e-01 1.69013315e-01 3.29192988e-01 4.11112291e-01 3.29192988e-01 1.69013315e-01 GMTSAR_V5.7/gmtsar/filters/gauss_ers_100m000644 015705 000000 00000001172 13505462013 021161 0ustar00sandwellwheel000000 000000 5 5 2.2399159097414190e-02 1.2689093801639992e-01 2.2620224226027566e-01 1.2689093801639992e-01 2.2399159097414190e-02 6.8290302310343234e-02 3.8686365322452360e-01 6.8964283168179330e-01 3.8686365322452360e-01 6.8290302310343234e-02 9.9022710268455202e-02 5.6096233507002591e-01 1.0000000000000000e+00 5.6096233507002591e-01 9.9022710268455202e-02 6.8290302310343234e-02 3.8686365322452360e-01 6.8964283168179330e-01 3.8686365322452360e-01 6.8290302310343234e-02 2.2399159097414190e-02 1.2689093801639992e-01 2.2620224226027566e-01 1.2689093801639992e-01 2.2399159097414190e-02 GMTSAR_V5.7/gmtsar/filters/gauss_alos_300m.m000644 015705 000000 00000000561 13505462013 021564 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for alos after 4 x 2 decimation so the 0.5 gain % is at 300 km wavelength % clear sigx=3.39; sigy=4.53; nx=11; ny=11; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_alos_300m -ASCII -double gauss GMTSAR_V5.7/gmtsar/filters/gauss25x7000644 015705 000000 00000005413 13505462013 020203 0ustar00sandwellwheel000000 000000 7 25 1.8315639e-02 5.5637998e-02 1.0836802e-01 1.3533528e-01 1.0836802e-01 5.5637998e-02 1.8315639e-02 2.5208966e-02 7.6578077e-02 1.4915373e-01 1.8627046e-01 1.4915373e-01 7.6578077e-02 2.5208966e-02 3.3746152e-02 1.0251176e-01 1.9966564e-01 2.4935221e-01 1.9966564e-01 1.0251176e-01 3.3746152e-02 4.3936934e-02 1.3346862e-01 2.5996137e-01 3.2465247e-01 2.5996137e-01 1.3346862e-01 4.3936934e-02 5.5637998e-02 1.6901332e-01 3.2919299e-01 4.1111229e-01 3.2919299e-01 1.6901332e-01 5.5637998e-02 6.8525074e-02 2.0816080e-01 4.0544187e-01 5.0633562e-01 4.0544187e-01 2.0816080e-01 6.8525074e-02 8.2084999e-02 2.4935221e-01 4.8567179e-01 6.0653066e-01 4.8567179e-01 2.4935221e-01 8.2084999e-02 9.5634445e-02 2.9051179e-01 5.6583971e-01 7.0664828e-01 5.6583971e-01 2.9051179e-01 9.5634445e-02 1.0836802e-01 3.2919299e-01 6.4118039e-01 8.0073740e-01 6.4118039e-01 3.2919299e-01 1.0836802e-01 1.1943297e-01 3.6280532e-01 7.0664828e-01 8.8249690e-01 7.0664828e-01 3.6280532e-01 1.1943297e-01 1.2802169e-01 3.8889556e-01 7.5746513e-01 9.4595947e-01 7.5746513e-01 3.8889556e-01 1.2802169e-01 1.3346862e-01 4.0544187e-01 7.8969293e-01 9.8620712e-01 7.8969293e-01 4.0544187e-01 1.3346862e-01 1.3533528e-01 4.1111229e-01 8.0073740e-01 1.0000000e+00 8.0073740e-01 4.1111229e-01 1.3533528e-01 1.3346862e-01 4.0544187e-01 7.8969293e-01 9.8620712e-01 7.8969293e-01 4.0544187e-01 1.3346862e-01 1.2802169e-01 3.8889556e-01 7.5746513e-01 9.4595947e-01 7.5746513e-01 3.8889556e-01 1.2802169e-01 1.1943297e-01 3.6280532e-01 7.0664828e-01 8.8249690e-01 7.0664828e-01 3.6280532e-01 1.1943297e-01 1.0836802e-01 3.2919299e-01 6.4118039e-01 8.0073740e-01 6.4118039e-01 3.2919299e-01 1.0836802e-01 9.5634445e-02 2.9051179e-01 5.6583971e-01 7.0664828e-01 5.6583971e-01 2.9051179e-01 9.5634445e-02 8.2084999e-02 2.4935221e-01 4.8567179e-01 6.0653066e-01 4.8567179e-01 2.4935221e-01 8.2084999e-02 6.8525074e-02 2.0816080e-01 4.0544187e-01 5.0633562e-01 4.0544187e-01 2.0816080e-01 6.8525074e-02 5.5637998e-02 1.6901332e-01 3.2919299e-01 4.1111229e-01 3.2919299e-01 1.6901332e-01 5.5637998e-02 4.3936934e-02 1.3346862e-01 2.5996137e-01 3.2465247e-01 2.5996137e-01 1.3346862e-01 4.3936934e-02 3.3746152e-02 1.0251176e-01 1.9966564e-01 2.4935221e-01 1.9966564e-01 1.0251176e-01 3.3746152e-02 2.5208966e-02 7.6578077e-02 1.4915373e-01 1.8627046e-01 1.4915373e-01 7.6578077e-02 2.5208966e-02 1.8315639e-02 5.5637998e-02 1.0836802e-01 1.3533528e-01 1.0836802e-01 5.5637998e-02 1.8315639e-02 GMTSAR_V5.7/gmtsar/filters/gauss_alos_200m000644 015705 000000 00000003766 13505462013 021342 0ustar00sandwellwheel000000 000000 9 9 8.6860849005128124e-02 1.7235576631676686e-01 2.8118910837651029e-01 3.7717430677833419e-01 4.1596485279363227e-01 3.7717430677833419e-01 2.8118910837651029e-01 1.7235576631676686e-01 8.6860849005128124e-02 1.2749313243948338e-01 2.5298136955160189e-01 4.1272541824533826e-01 5.5361114239191378e-01 6.1054736022966816e-01 5.5361114239191378e-01 4.1272541824533826e-01 2.5298136955160189e-01 1.2749313243948338e-01 1.6769943245613345e-01 3.3276170476018868e-01 5.4288271905796148e-01 7.2819823785084037e-01 8.0308989071788695e-01 7.2819823785084037e-01 5.4288271905796148e-01 3.3276170476018868e-01 1.6769943245613345e-01 1.9767806148653011e-01 3.9224753340267682e-01 6.3993063033165543e-01 8.5837390102029842e-01 9.4665348875326483e-01 8.5837390102029842e-01 6.3993063033165543e-01 3.9224753340267682e-01 1.9767806148653011e-01 2.0881776049531126e-01 4.1435175390233203e-01 6.7599247024847398e-01 9.0674561623469008e-01 1.0000000000000000e+00 9.0674561623469008e-01 6.7599247024847398e-01 4.1435175390233203e-01 2.0881776049531126e-01 1.9767806148653011e-01 3.9224753340267682e-01 6.3993063033165543e-01 8.5837390102029842e-01 9.4665348875326483e-01 8.5837390102029842e-01 6.3993063033165543e-01 3.9224753340267682e-01 1.9767806148653011e-01 1.6769943245613345e-01 3.3276170476018868e-01 5.4288271905796148e-01 7.2819823785084037e-01 8.0308989071788695e-01 7.2819823785084037e-01 5.4288271905796148e-01 3.3276170476018868e-01 1.6769943245613345e-01 1.2749313243948338e-01 2.5298136955160189e-01 4.1272541824533826e-01 5.5361114239191378e-01 6.1054736022966816e-01 5.5361114239191378e-01 4.1272541824533826e-01 2.5298136955160189e-01 1.2749313243948338e-01 8.6860849005128124e-02 1.7235576631676686e-01 2.8118910837651029e-01 3.7717430677833419e-01 4.1596485279363227e-01 3.7717430677833419e-01 2.8118910837651029e-01 1.7235576631676686e-01 8.6860849005128124e-02 GMTSAR_V5.7/gmtsar/filters/gauss_tsx_200m.m000644 015705 000000 00000000543 13505462013 021443 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for tsx after 4 x 2 decimation so the 0.5 gain % is att 200 km wavelength % clear sigx=6.; sigy=6.; nx=13; ny=13; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_tsx_200m -ascii gauss GMTSAR_V5.7/gmtsar/filters/gauss13x13000644 015705 000000 00000010225 13505462013 020252 0ustar00sandwellwheel000000 000000 13 13 1.0539922456186433e-01 1.4863673053812251e-01 1.9691167520419406e-01 2.4506053924552590e-01 2.8650479686019009e-01 3.1466396101845906e-01 3.2465246735834974e-01 3.1466396101845906e-01 2.8650479686019009e-01 2.4506053924552590e-01 1.9691167520419406e-01 1.4863673053812251e-01 1.0539922456186433e-01 1.4863673053812251e-01 2.0961138715109784e-01 2.7768997095378994e-01 3.4559075257697452e-01 4.0403652366334208e-01 4.4374731008107987e-01 4.5783336177161427e-01 4.4374731008107987e-01 4.0403652366334208e-01 3.4559075257697452e-01 2.7768997095378994e-01 2.0961138715109784e-01 1.4863673053812251e-01 1.9691167520419406e-01 2.7768997095378994e-01 3.6787944117144233e-01 4.5783336177161427e-01 5.3526142851899028e-01 5.8786967312234650e-01 6.0653065971263342e-01 5.8786967312234650e-01 5.3526142851899028e-01 4.5783336177161427e-01 3.6787944117144233e-01 2.7768997095378994e-01 1.9691167520419406e-01 2.4506053924552590e-01 3.4559075257697452e-01 4.5783336177161427e-01 5.6978282473092301e-01 6.6614361070348771e-01 7.3161562894664178e-01 7.5483960198900735e-01 7.3161562894664178e-01 6.6614361070348771e-01 5.6978282473092301e-01 4.5783336177161427e-01 3.4559075257697452e-01 2.4506053924552590e-01 2.8650479686019009e-01 4.0403652366334208e-01 5.3526142851899028e-01 6.6614361070348771e-01 7.7880078307140488e-01 8.5534532730742252e-01 8.8249690258459546e-01 8.5534532730742252e-01 7.7880078307140488e-01 6.6614361070348771e-01 5.3526142851899028e-01 4.0403652366334208e-01 2.8650479686019009e-01 3.1466396101845906e-01 4.4374731008107987e-01 5.8786967312234650e-01 7.3161562894664178e-01 8.5534532730742252e-01 9.3941306281347581e-01 9.6923323447634413e-01 9.3941306281347581e-01 8.5534532730742252e-01 7.3161562894664178e-01 5.8786967312234650e-01 4.4374731008107987e-01 3.1466396101845906e-01 3.2465246735834974e-01 4.5783336177161427e-01 6.0653065971263342e-01 7.5483960198900735e-01 8.8249690258459546e-01 9.6923323447634413e-01 1.0000000000000000e+00 9.6923323447634413e-01 8.8249690258459546e-01 7.5483960198900735e-01 6.0653065971263342e-01 4.5783336177161427e-01 3.2465246735834974e-01 3.1466396101845906e-01 4.4374731008107987e-01 5.8786967312234650e-01 7.3161562894664178e-01 8.5534532730742252e-01 9.3941306281347581e-01 9.6923323447634413e-01 9.3941306281347581e-01 8.5534532730742252e-01 7.3161562894664178e-01 5.8786967312234650e-01 4.4374731008107987e-01 3.1466396101845906e-01 2.8650479686019009e-01 4.0403652366334208e-01 5.3526142851899028e-01 6.6614361070348771e-01 7.7880078307140488e-01 8.5534532730742252e-01 8.8249690258459546e-01 8.5534532730742252e-01 7.7880078307140488e-01 6.6614361070348771e-01 5.3526142851899028e-01 4.0403652366334208e-01 2.8650479686019009e-01 2.4506053924552590e-01 3.4559075257697452e-01 4.5783336177161427e-01 5.6978282473092301e-01 6.6614361070348771e-01 7.3161562894664178e-01 7.5483960198900735e-01 7.3161562894664178e-01 6.6614361070348771e-01 5.6978282473092301e-01 4.5783336177161427e-01 3.4559075257697452e-01 2.4506053924552590e-01 1.9691167520419406e-01 2.7768997095378994e-01 3.6787944117144233e-01 4.5783336177161427e-01 5.3526142851899028e-01 5.8786967312234650e-01 6.0653065971263342e-01 5.8786967312234650e-01 5.3526142851899028e-01 4.5783336177161427e-01 3.6787944117144233e-01 2.7768997095378994e-01 1.9691167520419406e-01 1.4863673053812251e-01 2.0961138715109784e-01 2.7768997095378994e-01 3.4559075257697452e-01 4.0403652366334208e-01 4.4374731008107987e-01 4.5783336177161427e-01 4.4374731008107987e-01 4.0403652366334208e-01 3.4559075257697452e-01 2.7768997095378994e-01 2.0961138715109784e-01 1.4863673053812251e-01 1.0539922456186433e-01 1.4863673053812251e-01 1.9691167520419406e-01 2.4506053924552590e-01 2.8650479686019009e-01 3.1466396101845906e-01 3.2465246735834974e-01 3.1466396101845906e-01 2.8650479686019009e-01 2.4506053924552590e-01 1.9691167520419406e-01 1.4863673053812251e-01 1.0539922456186433e-01 GMTSAR_V5.7/gmtsar/man/manl/000755 015705 000000 00000000000 13505462013 016537 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/gmtsar/man/manl/ers_baseline.l000644 015705 000000 00000006577 13505462013 021366 0ustar00sandwellwheel000000 000000 .TH ERS_BASELINE l "05 MAR 2000, Copyright 1997 David Sandwell" " " "SIOSAR Baseline Calculator" .SH NAME ers_baseline \- calculates baseline parameters from a precise ERS-1/2 orbit .SH SYNOPSIS .B ers_baseline .I ref_t0 ref_tf ref# rep_t0 rep_tf rep# xt yt zt .SH DESCRIPTION The .B ers_baseline Command reads start-time and stop-time of reference and repeat ERS-1/2 frames. Precise orbit information, stored in ODR files, is used to calculate the position of the baseline between the reference and repeat orbits at the start and end of the frame. The program returns the following information needed for the SAR processor as well as for interferometry: .sp .br earth_radius - radius of ellipse beneath repeat orbit (m) .br sc_height - height of satellite above ellipse (m) .br sc_velocity - equivalent velocity for SAR processor (m/s) .br baseline_start- length of baseline (m) at start of frame .br alpha_start - baseline alpha (deg) at start of frame .br baseline_end - length of baseline (m) at end of frame .br alpha_end - baseline alpha (deg) at end of frame .br xshift - number of range cells to allign rep. to ref. .br yshift - number of echos to allign rep. to ref. .br (Note that if the reference and repeat times are the same then only the relevant part of the information is returned.) .br .SH INPUT .TP 10 .I ref_t0 starting time of reference frame in format YYYYDDD.DD .TP 10 .I ref_tf ending time of reference frame in format YYYYDDD.DD .TP 10 .I ref# spacecraft number of reference (1)-ERS-1 (2)-ERS2 .TP 10 .I rep_t0 starting time of repeat frame in format YYYYDDD.DD .TP 10 .I rep_tf ending time of repeat frame in format YYYYDDD.DD .TP 10 .I rep# spacecraft number of repeat (1)-ERS-1 (2)-ERS2 .sp .SH EXAMPLE Compute orbit parameters for an interferogram spanning the Landers 1992. .br .sp %ers_baseline 1992220.7697722 1992220.7699099 1 1992115.7695606 1992115.7696984 1 .br .sp ref_clock_start = 1992220.7697721999 .br ref_clock_stop = 1992220.7699098999 .br ref_identity = 1 .br SC_clock_start = 1992115.7695605999 .br SC_clock_stop = 1992115.7696984001 .br SC_identity = 1 .br earth_radius = 6371413.7408 .br SC_height = 788146.89 .br SC_vel = 7124.7584 .br yshift = 61 .br baseline_start = 150.588 .br baseline_end = 146.081 .br alpha_start = 153.530 .br alpha_end = 152.028 .br B_parallel = -109.18 .br B_perpendicular = -103.72 .br xshift = 13 .br .sp Note the two SAR frames reach the reference point at slightly different times corresponding to an along-track shift of 61.5 echos. Also note the baseline (B_start = 150.588 m, B_end =146.081, alpha_start = 153.530deg, alpha_end = 152.028deg ) closely match the values published in Zebker et al., 1994 (B = 146.1 m, alpha = -152 deg). .br .sp .SH SEE ALSO .B getorb software and precise orbit files were provided by Remko Scharroo (remko.scharroo@lr.tudelft.nl). For more up-to-date information on this package and the DUT orbits, netsurf to: .br http://www.deos.tudelft.nl/ers/precorbs/ .sp .br .SH AUTHORS David T. Sandwell and Karen Watson, Scripps Institution of Oceanography .SH DIAGNOSTICS 11 NOV 1997 - bug fixed on computation of baselines .br 03 MAR 2000 - fixed Y2K bugs and expanded year to YYYY GMTSAR_V5.7/gmtsar/man/manl/ers_line_fixer.l000644 015705 000000 00000001146 13505462013 021713 0ustar00sandwellwheel000000 000000 .TH ERS_LINE_FIXER l "08/28/97 \(co JPL" "ers_line_fixer.l 1.0" .SH NAME ers_line_fixer \- fixes missing lines in raw ERS SAR data .SH SYNOPSIS .B ers_line_fixer .I -a -h header -l line -s .I station ifile ofile .SH DESCRIPTION The .B ers_line_fixer fixes missing lines in raw SAR data. .TP 10 .I -a align window sampling times .TP 10 .I -h header length (bytes) .TP 10 .I -l line length in bytes .TP 10 .I -s station - either DPAF/ESRIN, CO, EIC, UK, CCRS, or unknown .TP 10 .I input_file .TP 10 .I output_file .sp .TP 0 .B example: ers_line_fixer -s CCRS input.raw out.fix .SH SEE ALSO .B read_ccrs(l) GMTSAR_V5.7/gmtsar/man/manl/ers_repeat_times.l000644 015705 000000 00000004711 13505462013 022251 0ustar00sandwellwheel000000 000000 .TH ERS_REP_TIMES l "05 MAR 2000, Copyright 1997 David Sandwell" " " "SIOSAR Repeat Frame Alignment" .SH NAME ers_repeat_times \- calculates repeat_times of an ERS-2 pass given start and end times of an ERS-1/2 frame .SH SYNOPSIS .B ers_repeat_times .I ref_t0 ref_tf ref# rep_t0 rep# .SH DESCRIPTION The .B ers_repeat_times Command reads start-time and stop-time of reference frame and computes the corresponding times for a repeat pass. Precise orbit information, stored in ODR files, is used to calculate the position of the repeat_times corresponding to the times at the start and end of the reference orbit. The program returns the following information needed for makedpaf which extracts subsets of data from long data takes. .sp .br SC_clock_start - start time of repeat pass .br SC_clock_stop - stop time of repeat pass .br SC_ICU_start - start value of ICU onboard clock counter .br SC_ICU_stop - stop value of ICU onboard clock counter .br B_parallel - approximate parallel baseline .br B_perpendicular- approximate perpendicular baseline .br xshift - number of range cells to allign rep. to ref. .br .br .SH INPUT .TP 10 .I ref_t0 starting time of reference frame in format YYYYDDD.DDDD .TP 10 .I ref_tf ending time of reference frame in format YYYYDDD.DDDD .TP 10 .I ref# spacecraft number of reference (1)-ERS-1 (2)-ERS2 .TP 10 .I rep_t0 starting day of repeat frame in format YYYYDDD.00 .TP 10 .I rep# spacecraft number of repeat (2)-ERS2 .sp .SH EXAMPLE Compute repeat times and ICU clock counter for frames in the Salton Sea area. .br .sp ers_repeat_times 1996004.7659481482 1996004.7661548401 1 99169 2 .br SC_clock_start = 1999169.7658588917 .br SC_clock_stop = 1999169.7660655845 .br SC_MJD_start = 18065.7658588917 .br SC_MJD_stop = 18065.7660655846 .br SC_ICU_start = 3555330077.95 .br SC_ICU_stop = 3555334649.67 .br B_parallel = -162.02 .br B_perpendicular = -540.64 .br xshift = 20 .br .sp .SH SEE ALSO .B getorb software and precise orbit files were provided by Remko Scharroo (remko.scharroo@lr.tudelft.nl). For more up-to-date information on this package and the DUT orbits, netsurf to: .br http://www.deos.tudelft.nl/ers/precorbs/ .sp .br .SH AUTHOR David T. Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS 11 NOV 1997 - bug fixed on computation of repeat_times 05 MAR 2000 - fixed Y2K bugs and expanded year to YYYY GMTSAR_V5.7/gmtsar/man/manl/ihBperp.l000644 015705 000000 00000002313 13505462013 020304 0ustar00sandwellwheel000000 000000 .TH IHBPERP l "06/30/98 \(co 1998 David Sandwell" "ihBperp.l 1.0" "SIOSAR Command" .SH NAME ihBperp \- computes a file of perpendicular baselines .SH SYNOPSIS .B ihBperp .I phase.head baseline.gips .SH DESCRIPTION The .B ihBperp command reads the header information from the phase.head file and computes a matching sized file of perpendicular baselines. This file can be used to scale and subtract a reference phase. Here is an example where we have two files; .I phase.gips is wrapped phase from an interferogram and .I topophase.gips is total unwrapped phase for a synthetic interferogram with a nominal perpendicular baseline of 100m. .sp ihBperp phase.gips scale.gips .br iha "p = p1 - p2*p3/100." phase.gips topophase.gips scale.gips > diff_phase.gips .br .sp 2 .TP 10 .I phase.head input gips header file (or data file) containing starting and ending baselines as well as file size information .TP 10 .I scale.gips output file of perpendicular baseline in meters .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B ers_baseline(l) plane_wrap(l) .sp .SH AUTHOR David T. Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/gmtsar/man/manl/prm2gips.l000644 015705 000000 00000001730 13505462013 020460 0ustar00sandwellwheel000000 000000 .TH PRM2GIPS l "11/17/96 \(co 1996 David Sandwell" "prm2gips.l 1.0" "SIOSAR Conversion Command" .SH NAME prm2gips \- translate a SIOSAR parameter file into a GIPS file header for an SLC image. .SH SYNOPSIS .B prm2gips .I file.PRM file.head [R4] .SH DESCRIPTION The .B prm2gips command reads a parameter PRM file used for focussing raw SAR signal data into a single look complex (SLC) image. Parameters are used to create a header for the SLC image. .TP 10 .I file.PRM parameter file for SAR processor .TP 10 .I file.head gips header file .TP 10 .I [R4] creates header for real*4 SLC rather than the default integer*2 SLC .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /usr/gips/tables/cprofile image header definition file .SH SEE ALSO .B esarp(l) .sp General Image Processing System -- GIPS(tm) by Peter G. Ford, MIT center for Space Research. .br http://delcano.mit.edu/info/gips .SH AUTHOR David T. Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/gmtsar/man/manl/pdiff.l000644 015705 000000 00000004551 13505462013 020011 0ustar00sandwellwheel000000 000000 .TH PDIFF l "06/26/97 \(co 1996 David Sandwell" "pdiff.l 1.0" "SIOSAR Command" .SH NAME pdiff \- calculates interferogram and subtracts phase due to a curved earth, topography, and a phase model. .SH SYNOPSIS .B pdiff .I ref.gips rep.gips real.gips imag.gips [topophase.gips] [modelphase.gips] .SH DESCRIPTION The .B pdiff command reads two matched SLC SAR images, (reference and repeat) and forms an interferogram. Two baseline estimates at the start and end of the frame, stored in the header of the repeat image, are used to correct the phase for the "earth flattening". As an option, a file topophase.gips can be supplied to remove the phase due to the topography above the local spherical radius of the Earth. This file must have dimensions that are integral factors of the SLC images. For example if the SLC image has 5120 columns and 28000 rows, topophase.gips could have dimensions 2650 by 7000. The topographic phase must correspond to a perpendicular baseline of 100 m. In addition to a topophase, a model-phase can be removed from the interferogram. This phase is not scaled by the baseline so it represents either ground deformation or a phase correction due to atmospheric or ionospheric delay. The dimensions of the model-phase file must match the topophase file. The real and imaginary components of the interferogram are written to separate files. The reference and repeat input files do not have to have the gips headers attached to the SLC image. One can supply just the header files to pdiff as long as the header contains a pointer to the SLC image. An example pointer is: .br input_file = 19369_585.SLC .TP 10 .I ref.gips reference SLC image or header of reference SLC image containing pointer to image .TP 10 .I repeat.gips repeat SLC image or header of repeat SLC image containing pointer to image .TP 10 .I real.gips real component of interferogram .TP 10 .I imag.gips imaginary component of interferogram .TP 10 .I [topophase.gips] optional file of phase for topography with a 100 m standard baseline .TP 10 .I [modelphase.gips] optional file of phase for direct removal from interferogram .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B esarp(l) prm2gips(l) ers_baseline(l) ihBperp(l) .sp .SH AUTHOR Evelyn Price and David T. Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/gmtsar/man/manl/fitoffset.l000644 015705 000000 00000002777 13505462013 020722 0ustar00sandwellwheel000000 000000 .TH FITOFFSET l "04/10/98 \(co 1998 David Sandwell" "fitoffset.l 1.0" "SIOSAR Command" .SH NAME fitoffset \- calculates 6 parameters needed to align slave image to master image .SH SYNOPSIS .B fitoffset .I offset.dat [SNR] .SH DESCRIPTION The .B fitoffset command reads numerous estimates of pixel offset between master and slave images and performs a least-squares adjustment to establish 6 parameters needed for reprocessing the slave image using .B esarp so it will be in sub-pixel alignment with the master image. The optional SNR parameter will edit offset estimates with SNR less than this value prior to the adjustment. If no SNR value is provided then the program will run in an interactive mode. Here is an example run: .sp .br fitoffset offset.dat 50 .br stretch_r = -9.25792E-06 .br stretch_a = 4.23417E-06 .br yshift = 653 .br sub_int_a = 0.333923 .br xshift = -3 .br sub_int_r = 0.806506 .br These parameters should be appended to the slave.PRM file. .sp .TP 10 .I offset.dat file of offsets generated by running the program offset .TP 10 .I SNR optional signal-to-noise ratio for editing individual offsets prior to least-squares estimation of alignment parameters. .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B offset(l) esarp(l) .sp .SH AUTHOR Howard Zebker. Modified by David T. Sandwell. .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/gmtsar/man/manl/sarp.l000644 015705 000000 00000001542 13505462013 017663 0ustar00sandwellwheel000000 000000 .TH ESARP l "4/10/98 \(co 1996 Evelyn Price" "esarp.l 1.0" "SIOSAR SAR Processor" .SH NAME esarp \- focusses raw signal data into a single-look complex image (SLC). .SH SYNOPSIS .B esarp .I file.PRM file.SLC [R4] .SH DESCRIPTION The .B esarp command reads a parameter PRM file used provide all of the information needed tp process the raw signal data data into a single look complex (SLC) image. Program looks for file.fix, a fixed raw signal file, for an input stream. .TP 10 .I file.PRM parameter file for SAR processor .TP 10 .I file.SLC single-look complex image, 2-integer*2 per pixel .TP 10 .I [R4] option to print output as 2-real*4 per pixel .SH SEE ALSO .B pre_proc(l) ers_baseline(l) offset(l) .SH AUTHOR Evelyn Price and David Sandwell, Scripps Institution of Oceanography. C-code based on JPL-heritage SAR processor soi. .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/gmtsar/man/manl/read_ccrs.l000644 015705 000000 00000001777 13505462013 020655 0ustar00sandwellwheel000000 000000 .TH READ_CCRS l "08/28/97 \@ 1996 David Sandwell and Rob Mellors" "1.0" "SIOSAR Command" .SH NAME read_ccrs \- reads files from CCRS SAR data tape and writes to disk .SH SYNOPSIS .B read_ccrs .I input_device orbit_frame .SH DESCRIPTION Reads files from a raw SAR data tape (CCRS format) and writes 3 files to disk. .TP 10 .I input device tape drive name (example /dev/rmt/0n) .TP 10 .I vdf SAR volume descriptor file - describes what files are on the tape. .TP 10 .I leader Mixed ASCII and binary file which contains parameters about the acquisition of the SAR data. Time information is not included. .TP 10 .I data SAR data (also has a mixed ASCII and binary header). Time information is encoded. .TP 10 .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B read_SAR_tape(l) .sp CCT.format* files in SAR_tape_data_description .sp .SH AUTHORS David Sandwell and Rob Mellors, Scripps Institution of Oceanography .SH DIAGNOSTICS no bugs, just features GMTSAR_V5.7/gmtsar/man/manl/stack_table.l000644 015705 000000 00000003501 13505462013 021167 0ustar00sandwellwheel000000 000000 .TH STACK_TABLE l "4/22/99 \(co 1999 David Sandwell" "stack_table.l 1.0" "SIOSAR SAR Processor" .SH NAME stack_table \- prepares a table of Bperp vs days into mission. .SH SYNOPSIS .B stack_table .I master.PRM slave.PRM [GMT] .SH DESCRIPTION The .B stack_table command reads master and slave parameter files and creates a table of .I sat_orb slave_time slave_days(1992) Bpl Bperp xshift yshift. The optional GMT parameter reformats the table for use with the GMT command pstext. This command is most useful for assembly of many repeat sar images into a stack for topographic recovery and change detection. .TP 10 .I master.PRM parameter file for master SAR image for the entire stack .TP 10 .I slave.PRM parameter file for one of the slave SAR images .TP 10 .I [GMT] option to create a textfile suitable for plotting with pstext .SH EXAMPLE .br stack_table 23390_2925.PRM 15240_2925.PRM GMT > temp.txt .br stack_table 23390_2925.PRM 15741_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 20384_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 20885_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 21386_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 22388_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 22889_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 23390_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 23891_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 24893_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 25394_2925.PRM GMT >> temp.txt .br # .br # now sort the table .br # .br sort -n +0 -1 < temp.txt > gmttable.txt .br # .br pstext gmttable.txt -Jx.004/.0045 -R50/2450/-750/770 -B200/100SWen > plot.ps .SH SEE ALSO .B pre_proc_ccrs(l) ers_baseline(l) .SH AUTHOR David Sandwell, Scripps Institution of Oceanography. UNIX shell script .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/gmtsar/man/manl/offset.l000644 015705 000000 00000003555 13505462013 020212 0ustar00sandwellwheel000000 000000 .TH OFFSET l "04/10/98 \(co 1998 David Sandwell" "offset.l 1.0" "SIOSAR Command" .SH NAME offset \- calculates offsets in range and azimuth between master and slave SCL images .SH SYNOPSIS .B offset .I master.head slave.head offset.dat [-V] .SH DESCRIPTION The .B offset command reads two SLC SAR images, (master and slave) and computes row and column offsets needed to align the slave to the master. These offsets are used by a program .B fitoffset to generate parameters for the SAR processor .B esarp. Here is an example run: .sp .br offset 22876_585.head 19369_585.head offset.dat .br .sp The second header file (created with the .B prm2gips command) contains initial offsets needed to bring the alignment to within 40 pixels. These initial offsets can be estimated using .B ers_baseline. .sp .br xshift = 0 yshift = 653 .sp .br Then one runs .B fitoffset to refine these parameters. .sp .br fitoffset offset.dat 50 .br stretch_r = -9.25792E-06 .br stretch_a = 4.23417E-06 .br yshift = 653 .br sub_int_a = 0.333923 .br xshift = -3 .br sub_int_r = 0.806506 .br .sp .TP 10 .I master.head gips header for master image must contain pointer to SLC file. Example pointer is .br input_file = 22876_585.SLC .TP 10 .I slave.head gips header for slave image must also contain pointer to SLC file. .TP 10 .I offset.dat ascii output file containing range and azimuthal offsets for numerous points in the master image. SNR of crosscorrelation is also output in the last column. .TP 10 .I -V optional verbose mode .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B esarp(l) prm2gips(l) ers_baseline(1) fitoffset(l) .sp .SH AUTHOR Howard Zebker. Modified by David T. Sandwell. .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/gmtsar/man/manl/exact_ers_time.l000644 015705 000000 00000004614 13505462013 021714 0ustar00sandwellwheel000000 000000 .TH EXACT_ERS_TIME l "15 JUN 2000, Copyright 2000 David Sandwell" " " "SIOSAR ERS time correction" .SH NAME exact_ers_time \- corrects the start time of the first radar echo using the ICU clock imbedded in the raw data file .SH SYNOPSIS .B exact_ers_time .I SC_clock_start SC_identity icu_start .SH DESCRIPTION The .B exact_ers_time command reads the approximate start-time and ICU clock counter of the first radar echo and computes a new corrected start time. The approximate time is used to determine the correct PATN file that, in turn, is used to translate the onboard computer clock counter into UTC. The PATN files are generated at ESA from precise tracking data. .sp .br icu - ldr - exact start time minus app. start time (s) .br SC_clock_start - start time of repeat pass .br .br .SH INPUT .TP 10 .I SC_clock_start start time of frame in format YYYYDDD.DDDD .TP 10 .I SC_identity spacecraft number of reference (1)-ERS-1 (2)-ERS2 .TP 10 .I icu_start onboard clock counter of first record in frame .sp .SH INPUT .br icu - ldr - exact start time minus start time (s) .br SC_clock_start - exact start time of frame .br .SH EXAMPLES Compute exact start time for frames in the Salton Sea area. These are recent ERS-2 data and the largest difference is 2.7 milliseconds. .br .sp exact_ers_time 1999169.7658487617 2 3555329853.933 .br icu - ldr = 0.000167 .br SC_clock_start = 1999169.76584876352 .br .sp exact_ers_time 1999204.7658464119 2 34506524.933 .br icu - ldr = -0.000049 .br SC_clock_start = 1999204.76584641146 .br .sp exact_ers_time 1999274.7658527894 2 1582794635.714 .br icu - ldr = 0.002735 .br SC_clock_start = 1999274.76585282106 .br .sp exact_ers_time 1999344.7658110070 2 3131081524.933 .br icu - ldr = 0.000059 .br SC_clock_start = 1999344.76581100770 .br .sp exact_ers_time 2000014.7658063078 2 3905225265.714 .br icu - ldr = 0.002198 .br SC_clock_start = 2000014.76580633316 .br .sp exact_ers_time 2000049.7658661806 2 384403147.933 .br icu - ldr = 0.001426 .br SC_clock_start = 2000049.76586619718 .br .sp .SH SEE ALSO .B getorb software and precise orbit files were provided by Remko Scharroo (remko.scharroo@lr.tudelft.nl). For more up-to-date information on this package and the DUT orbits, netsurf to: .br http://www.deos.tudelft.nl/ers/precorbs/ .sp .br .SH AUTHOR David T. Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS GMTSAR_V5.7/gmtsar/man/manl/ihconv.l000644 015705 000000 00000002523 13505462013 020204 0ustar00sandwellwheel000000 000000 .TH IHCONV l "04/25/98 \(co 1998 David Sandwell" "ihconv.l 1.0" "SIOSAR Command" .SH NAME ihconv \- convolves a 2-D filter with an array .SH SYNOPSIS .B ihconv .I idec jdec filter_file < input.gips >_out.gips .SH DESCRIPTION The .B ihconv convolves a filter with an array by skipping through the rows and columns by idec and jdec. The complete input file is used for the convolution but output can be decimated in one step which saves a lot of computer time with respect to the GIPS command .B ihbox. .TP 10 .I idec skips rows at an increment of idec .TP 10 .I jdec skips columns at an increment of jdec .TP 10 .I filter_file ascii file of filter coefficients in free format. The first line of the file gives the number_of_columns, number_of_rows in the filter (i.e. 2 integers). The coefficients follow starting at the top and moving across the first row. .TP 10 .I input.gips input file to be filtered (standart input only). This file must have a gips header attached. The elements can be almost any type but complex numbers will be converted to amplitudes prior to filtering. .TP 10 .I output.gips filtered and decimated output file (standard output only). .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B ihbox(l) phased_grad(l) .sp .SH AUTHOR David T. Sandwell. .SH DIAGNOSTICS GMTSAR_V5.7/gmtsar/man/manl/pre_proc.l000644 015705 000000 00000003055 13505462013 020530 0ustar00sandwellwheel000000 000000 .TH PRE_PROC l "04/01/98 \@ 1996 Rob Mellors, Paul Jamason and David Sandwell" "1.0" "SIOSAR Command" .SH NAME pre_proc \- reads raw SAR data files and creates a parameter file and a fixed raw data file .SH SYNOPSIS .B pre_proc (pre_proc_dpaf or pre_proc_ccrs) .I sat_orbit_frame [swst] .SH DESCRIPTION Reads 3 files from tape or disk (DPAF-pre_proc_dpaf or CCRS-pre_proc_ccrs format) and creates a parameter file and a fixed raw data file that are fed to the SAR processor (esarp). The script first checks the local disk for two files that it could get from the tape if necessary (sat_orbit_frame.ldr and sat_orbit_frame.raw). Then the script runs .B ers_line_fixer to create sat_orbit_frame.fix. The optional parameter .I swst is the sample window start time for proper near-range alignment of raw data. The default value is 878 which is good for the radius of the earth at the latitude of Southern California. For other latitudes, this number will need to be changed. During this processing, the parameter file (sat_orbit_frame.PRM) is constructed. .TP 10 .I sat_orbit_frame orbit number and frame number of data tape .TP 10 .I sat_orbit_frame.PRM parameter file used for the SAR processor (esarp) .TP 10 .I sat_orbit_frame.fix fixed raw signal data to be read by the SAR processor .SH FILES /opt/siosar/lib/virgin.PRM .SH SEE ALSO .B read_ccrs ers_line_fixer read_sarleader read_data_file ers_baseline .sp CCT.format* files in SAR_tape_data_description .sp .SH AUTHORS Rob Mellors, Paul Jamason, and David Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS GMTSAR_V5.7/preproc/ALOS_preproc/000755 015705 000000 00000000000 13507242234 017505 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/CMakeLists.txt000644 015705 000000 00000000270 13505462014 017752 0ustar00sandwellwheel000000 000000 # # $Id: CMakeLists.txt 380 2016-08-14 06:42:31Z fwobbe $ # # Add subdirectories add_subdirectory (ALOS_preproc) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/preproc/RS2_preproc/000755 015705 000000 00000000000 13505462014 017353 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ERS_preproc/000755 015705 000000 00000000000 13505462014 017376 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/CSK_preproc/000755 015705 000000 00000000000 13505462014 017365 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/TSX_preproc/000755 015705 000000 00000000000 13505462014 017423 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/S1A_preproc/000755 015705 000000 00000000000 13505462014 017331 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/000755 015705 000000 00000000000 13507242234 017510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/Makefile000644 015705 000000 00000001642 13505462014 021151 0ustar00sandwellwheel000000 000000 include ../../config.mk LIB = lib/ibENVI.a DIRS = ASA_CAT Dop_orbit ENVI_decode ENVI_SLC_decode SCRIPT = scripts all: $(LIB) for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done $(INSTALL) $(SCRIPT)/dump_orbit_envi.pl $(bindir) $(INSTALL) $(SCRIPT)/dump_time_envi.pl $(bindir) $(INSTALL) $(SCRIPT)/find_auxi.pl $(bindir) $(INSTALL) $(SCRIPT)/ENVI_pre_process $(bindir) $(INSTALL) $(SCRIPT)/ENVI_SLC_pre_process $(bindir) uninstall: for d in $(DIRS); do \ (cd $$d; $(MAKE) uninstall); \ done rm -f $(bindir)/dump_orbit_envi.pl rm -f $(bindir)/dump_time_envi.pl rm -f $(bindir)/find_auxi.pl rm -f $(bindir)/ENVI_pre_process rm -f $(bindir)/ENVI_SLC_pre_process clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done (cd lib_src; $(MAKE) clean) $(LIB): mkdir -p lib (cd lib_src; $(MAKE) all) spotless: clean rm -rf lib GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_decode/000755 015705 000000 00000000000 13507242234 021554 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/ASA_CAT/000755 015705 000000 00000000000 13507242234 020603 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_look/000755 015705 000000 00000000000 13505462014 021273 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_llt2rat/000755 015705 000000 00000000000 13505462014 021713 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_baseline/000755 015705 000000 00000000000 13505462014 022111 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/scripts/000755 015705 000000 00000000000 13507242167 021204 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/lib_src/000755 015705 000000 00000000000 13507242234 021125 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/Dop_orbit/000755 015705 000000 00000000000 13507242234 021431 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/000755 015705 000000 00000000000 13507242234 022255 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/envisat_dump_header.c000755 015705 000000 00000021044 13505462014 026431 0ustar00sandwellwheel000000 000000 /* BK: simple program to get header info for ENVISAT * 13-Jun-2003 * simply dumps all header info. a unix script will be used to * convert this to doris input $Id: envisat_dump_header.c,v 1.4 2004/05/13 18:13:39 kampes Exp $ */ #include "epr_api-2.3/src/epr_api.h" #include #include #include #include #include #include #include #if defined(WIN32) && defined(_DEBUG) #include #endif /* if defined(WIN32) && defined(_DEBUG) */ int main(int argc, char **argv) { EPR_SProductId *product_id; EPR_SDatasetId *MDS1_SQ_ADS; EPR_SDatasetId *MAIN_PROC_PM_ID; EPR_SDatasetId *DOP_CENTROID_COEFFS_ADS; EPR_SDatasetId *CHIRP_PARAMS_ADS; EPR_SDatasetId *GEOLOCATION_GRID_ADS; EPR_SRecord *mph; EPR_SRecord *sph; EPR_SRecord *rec0; EPR_SRecord *rec1; EPR_SRecord *rec2; EPR_SRecord *rec3; EPR_SRecord *rec4; // EPR_SField* azitime0_field; EPR_EErrCode err_code = e_err_none; int status; const char *product_file_path; /* const char* datasetname; */ /* --- Handle input ----------------------------------------- */ printf("+-----------------------------------------------+\n"); printf("| This is envisat_dump_header by Bert Kampes |\n"); printf("+-----------------------------------------------+\n"); if (argc <= 1) { printf("Usage: envisat_dump_header envisat-product\n"); printf(" where envisat-product is the input filename\n"); printf("Example:\n"); printf(" envisat_dump_header " "ASA_IMS_1PNDPA20021025_175208_000000162010_00356_03416_0005.N1\n\n"); exit(1); } product_file_path = argv[1]; printf("\nInitializing api.\n"); printf("-------------------------------------------------\n"); /* Initialize the API. Set log-level to DEBUG and use default log-output * (stdout) */ /* How to set error logging without exiting? */ /*status = epr_init_api(e_log_debug, epr_log_message, epr_log_message);*/ status = epr_init_api(e_log_debug, epr_log_message, NULL); if (status != 0) { printf("envisat_dump_header: fatal error in epr_init_api\n"); printf("exiting.\n"); exit(1); }; /* Open the product; an argument is a path to product data file */ /* PRODUCT dataset record field element */ printf("\nOpening product.\n"); printf("-------------------------------------------------\n"); product_id = epr_open_product(product_file_path); err_code = epr_get_last_err_code(); if (err_code != e_err_none) { printf("envisat_dump_header: fatal error in epr_open_product\n"); printf("exiting.\n"); exit(1); } /* Read fields that I want for Doris */ /* product DATASET record field element */ /* --- MAIN PRODUCT HEADER ---------------------------------------- */ printf("\nTrying to read record: MPH\n"); printf("-------------------------------------------------\n"); mph = epr_get_mph(product_id); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(mph, stdout); } else { printf("envisat_dump_header: likely fatal error in epr_get_mph\n"); printf("continuing.\n"); epr_clear_err(); } /* --- SECOND PRODUCT HEADER -------------------------------------- */ printf("\nTrying to read record: SPH\n"); printf("-------------------------------------------------\n"); sph = epr_get_sph(product_id); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(sph, stdout); } else { printf("envisat_dump_header: likely fatal error in epr_get_sph\n"); epr_clear_err(); } /* dsd = epr_get_dsd(product_id); */ /* epr_print_record(dsd, stdout);*/ /* --- MDS1_SQ_ADS ------------------------------------------------ */ printf("\nTrying to read record: MDS1_SQ_ADS\n"); printf("-------------------------------------------------\n"); MDS1_SQ_ADS = epr_get_dataset_id(product_id, "MDS1_SQ_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec0 = epr_read_record(MDS1_SQ_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(rec0, stdout); } else { printf("envisat_dump_header: non-fatal error in epr_read_record " "MDS1_SQ_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("envisat_dump_header: error in epr_get_dataset_id MDS1_SQ_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- MAIN_PROC_PM_ID -------------------------------------------- */ printf("\nTrying to read record: MAIN_PROCESSING_PARAMS_ADS\n"); printf("-------------------------------------------------\n"); MAIN_PROC_PM_ID = epr_get_dataset_id(product_id, "MAIN_PROCESSING_PARAMS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec1 = epr_read_record(MAIN_PROC_PM_ID, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(rec1, stdout); } else { printf("envisat_dump_header: error in epr_read_record " "MAIN_PROCESSING_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("envisat_dump_header: error in epr_get_dataset_id " "MAIN_PROCESSING_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- DOP_CENTROID_COEFFS_ADS ------------------------------------ */ printf("\nTrying to read record: DOP_CENTROID_COEFFS_ADS\n"); printf("-------------------------------------------------\n"); DOP_CENTROID_COEFFS_ADS = epr_get_dataset_id(product_id, "DOP_CENTROID_COEFFS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec2 = epr_read_record(DOP_CENTROID_COEFFS_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(rec2, stdout); } else { printf("envisat_dump_header: error in epr_read_record " "DOP_CENTROID_COEFFS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("envisat_dump_header: error in epr_get_dataset_id " "DOP_CENTROID_COEFFS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- CHIRP_PARAMS_ADS ------------------------------------------- */ printf("\nTrying to read record: CHIRP_PARAMS_ADS\n"); printf("-------------------------------------------------\n"); /* it seems ESRIN does not include this. For now do not read it at all Problems with BAM data, report Z.Perksi #%// Bert Kampes, 12-May-2004 */ CHIRP_PARAMS_ADS = epr_get_dataset_id(product_id, "CHIRP_PARAMS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec3 = epr_read_record(CHIRP_PARAMS_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(rec3, stdout); } else { printf("envisat_dump_header: error in epr_read_record CHIRP_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("envisat_dump_header: error in epr_get_dataset_id CHIRP_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- GEOLOCATION_GRID_ADS --------------------------------------- */ printf("\nTrying to read record: GEOLOCATION_GRID_ADS\n"); printf("-------------------------------------------------\n"); GEOLOCATION_GRID_ADS = epr_get_dataset_id(product_id, "GEOLOCATION_GRID_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec4 = epr_read_record(GEOLOCATION_GRID_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(rec4, stdout); } else { printf("envisat_dump_header: error in epr_read_record " "GEOLOCATION_GRID_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("envisat_dump_header: error in epr_get_dataset_id " "GEOLOCATION_GRID_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* product dataset record FIELD element */ /* azitime0_field = epr_get_field(rec1, "first_zero_doppler_time"); epr_print_field(azitime0_field, stdout); */ /* Close product_id and release rest of the allocated memory */ printf("\n"); epr_close_product(product_id); /* Closes product reader API, release all allocated resources */ epr_close_api(); printf("\n+-----------------------------------------------+\n"); printf("| Thank you for using envisat_dump_header |\n"); printf("+-----------------------------------------------+\n\n"); return 0; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/000755 015705 000000 00000000000 13505462014 024172 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/Makefile000755 015705 000000 00000003442 13505462014 023721 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = envi_slc_decode CSRCS = envi_slc_decode.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../../../gmtsar -I../../S1A_preproc/include -I$(TIFF_INC) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lENVI -L../../S1A_preproc/lib -lxmlC -lm LIB_SRC = epr_api-2.3/src/epr_api.c \ epr_api-2.3/src/epr_band.c \ epr_api-2.3/src/epr_bitmask.c \ epr_api-2.3/src/epr_core.c \ epr_api-2.3/src/epr_dataset.c \ epr_api-2.3/src/epr_dddb.c \ epr_api-2.3/src/epr_dsd.c \ epr_api-2.3/src/epr_dump.c \ epr_api-2.3/src/epr_field.c \ epr_api-2.3/src/epr_msph.c \ epr_api-2.3/src/epr_param.c \ epr_api-2.3/src/epr_product.c \ epr_api-2.3/src/epr_ptrarray.c \ epr_api-2.3/src/epr_record.c \ epr_api-2.3/src/epr_string.c \ epr_api-2.3/src/epr_swap.c \ epr_api-2.3/src/epr_typconv.c all: epr envi_slc_decode envisat_dump_data envisat_dump_header epr: $(LIB_SRC) (cd epr_api-2.3/src/; make) install: $(INSTALL) $(PROG) $(bindir) $(INSTALL) envisat_dump_data $(bindir) $(INSTALL) envisat_dump_header $(bindir) clean: rm -f $(OBJS) envi_slc_decode envisat_dump_data envisat_dump_header tags core (cd epr_api-2.3/src/; make clean) envi_slc_decode: $(CC) $(CFLAGS) $(INCLUDES) $(LFLAGS) \ -o envi_slc_decode \ envi_slc_decode.c \ epr_api-2.3/src/*.o $(CLIBS) envisat_dump_data: $(CC) $(CFLAGS) $(INCLUDES) $(LFLAGS) \ -o envisat_dump_data \ envisat_dump_data.c \ epr_api-2.3/src/*.o $(CLIBS) envisat_dump_header: $(CC) $(CFLAGS) $(INCLUDES) $(LFLAGS) \ -o envisat_dump_header \ envisat_dump_header.c \ epr_api-2.3/src/*.o $(CLIBS) GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/envi_slc_decode.c000644 015705 000000 00000104626 13505462014 025535 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Anders Hogrelius * * Earth Consultants International, Inc * * Date : 04/17/2017 * * * * Based on make_slc_s1a by Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * Date : 05/17/2010, Anders Hogrelius * * Added range and azimuth bias for ERS-1 and ERS-2 * * * ***************************************************************************/ #include "PRM.h" #include "epr_api-2.3/src/epr_api.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include "tiffio.h" #include #include #include #include #include #include #include #if defined(WIN32) && defined(_DEBUG) #include #endif /* if defined(WIN32) && defined(_DEBUG) */ //#include #include int write_orb(state_vector *sv, FILE *fp, int); int dump_data(EPR_ELogLevel log_level, const char *infile, FILE *outstream, int pixflag, unsigned int l0, unsigned int lN, unsigned int p0, unsigned int pN); char *remove_ext(char *mystr, char dot, char sep); int read_header(EPR_ELogLevel log_level, const char *infile, struct PRM *prm, state_vector *sv, int *n_state_vectors); int monthtonum(char *szMonth); char *USAGE = "\n\nUsage: envi_slc_decode name_of_data_file (*.E1 *.E2 or *.N1) \n" "\nExample: envi_slc_decode " "SAR_IMS_1PNESA19920914_183429_00000018C087_00442_06098_0000.E1 \n" "\nOutput: SAR_IMS_1PNESA19920914_183429_00000018C087_00442_06098_0000.SLC " "SAR_IMS_1PNESA19920914_183429_00000018C087_00442_06098_0000.PRM " "SAR_IMS_1PNESA19920914_183429_00000018C087_00442_06098_0000.LED\n"; int main(int argc, char **argv) { FILE *OUTPUT_PRM, *OUTPUT_SLC, *OUTPUT_LED; char *filename = 0; char tmp_str[200]; struct PRM prm; state_vector sv[200]; int n = 0; /* EPR_LogLevel can be set to e_log_debug, e_log_info, e_log_warning or * e_log_error */ enum EPR_LogLevel eloglevel = e_log_error; if (argc != 2) die(USAGE, ""); // initiate the prm null_sio_struct(&prm); if (read_header(eloglevel, argv[1], &prm, sv, &n) != 0) { die("Couldn't read envisat header in input file: \n", argv[1]); } // generate the PRM file, test to make sure we can write to it by opening the // file strcpy(tmp_str, argv[1]); filename = remove_ext(tmp_str, '.', '/'); strcpy(tmp_str, filename); free(filename); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "wb")) == NULL) { die("Couldn't open prm file: \n", tmp_str); } else { put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); } // generate the LED file, test to make sure we can write to it by opening the // file strcpy(tmp_str, argv[1]); filename = remove_ext(tmp_str, '.', '/'); strcpy(tmp_str, filename); free(filename); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "wb")) == NULL) { die("Couldn't open slc file: \n", tmp_str); } else { write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); } // generate the SLC file, test to make sure we can write to it by opening the // file and closing it for writing with dump data strcpy(tmp_str, argv[1]); filename = remove_ext(tmp_str, '.', '/'); strcpy(tmp_str, filename); free(filename); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLC = fopen(tmp_str, "wb")) == NULL) { die("Couldn't open slc file: \n", tmp_str); } else { dump_data(eloglevel, argv[1], OUTPUT_SLC, 1, 0, 0, 0, 0); fclose(OUTPUT_SLC); } return 0; } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 100.0) / 100.0 - trunc((sv[0].sec) * 100.0) / 100.0; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.6lf %lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int dump_data(EPR_ELogLevel log_level, const char *infile, FILE *outstream, int pixflag, unsigned int l0, unsigned int lN, unsigned int p0, unsigned int pN) { EPR_SProductId *product_id; EPR_SDatasetId *MAIN_PROC_PM_ID; EPR_SDatasetId *MDS1; EPR_SRecord *rec1 = NULL; EPR_SRecord *rec5 = NULL; EPR_SField numlines_field; EPR_SField numpixels_field; EPR_SField line_field; ulong numlines; ulong numberoflines; ulong numpixels; int cnt; int x, y; /* loop counter go upto 25.000 or so */ short realpart_short; /* written to output file */ short imagpart_short; /* written to output file */ int status; /* Initialize the API. Set log-level to DEBUG and use default log-output * (stdout) */ epr_init_api(log_level, epr_log_message, NULL); /* Open the product; an argument is a path to product data file */ /* PRODUCT dataset record field element */ product_id = epr_open_product(infile); /* product DATASET record field element */ MAIN_PROC_PM_ID = epr_get_dataset_id(product_id, "MAIN_PROCESSING_PARAMS_ADS"); MDS1 = epr_get_dataset_id(product_id, "MDS1"); /* product dataset RECORD field element */ rec1 = epr_read_record(MAIN_PROC_PM_ID, 0, NULL); /* product dataset record FIELD element */ numlines_field = *(epr_get_field(rec1, "num_output_lines")); numpixels_field = *(epr_get_field(rec1, "num_samples_per_line")); /* epr_free_record(rec1); */ epr_print_field(&numlines_field, stdout); epr_print_field(&numpixels_field, stdout); numlines = epr_get_field_elem_as_uint(&numlines_field, 0); numpixels = epr_get_field_elem_as_uint(&numpixels_field, 0); if (pixflag) { l0 = 1; lN = numlines; p0 = 1; pN = numpixels; } /* loop over data record to get data and dump it to file */ numberoflines = epr_get_num_records(MDS1); if (log_level == e_log_debug) { printf("numberoflines: %f\n", (float)numberoflines); printf("numlines: %f\n", (float)numlines); printf("numpixels: %f\n", (float)numpixels); printf("l0: %f\n", (float)l0); printf("lN: %f\n", (float)lN); printf("p0: %f\n", (float)p0); printf("pN: %f\n", (float)pN); } /* check if number of records indeed equals the number of lines */ if (numberoflines != numlines) { printf("numlines not equal in check, ASAR format error?."); return 1; } /* --- Check if input as acceptable ---------------------------- */ if (l0 < 1) { printf("l0<1 not allowed. first line is 1 not 0.\n"); return 1; } if (p0 < 1) { printf("p0<1 not allowed. first line is 1 not 0.\n"); return 1; } if (lN > numlines) { printf("lN>numlines not allowed.\n"); return 1; } if (pN > numpixels) { printf("pN>numpixels not allowed.\n"); return 1; } /* --- read in whole line of cpx data -------------------------- */ for (y = l0; y <= lN; y++) { rec5 = epr_read_record(MDS1, y - 1, NULL); line_field = *(epr_get_field(rec5, "proc_data")); cnt = 2 * (p0 - 1); /* p0 starts at 1 for first element (BUGFIX!) */ /* write out selected pixels */ for (x = p0; x <= pN; x++) { realpart_short = epr_get_field_elem_as_short(&line_field, cnt); cnt++; imagpart_short = epr_get_field_elem_as_short(&line_field, cnt); cnt++; status = fwrite(&realpart_short, 2, 1, outstream); if (status != 1 && log_level == e_log_debug) fprintf(stderr, "fwrite could not write to disk?"); status = fwrite(&imagpart_short, 2, 1, outstream); if (status != 1 && log_level == e_log_debug) fprintf(stderr, "fwrite could not write to disk?"); } /* this program seemed to fill all memory for some reason? try to free it */ epr_free_record(rec5); } // below it's closing the file twice, may cause bug on Linux // fclose(outstream); epr_close_product(product_id); /* Closes product reader API, release all allocated resources */ epr_close_api(); return 0; } // remove_ext: removes the "extension" from a file spec. // mystr is the string to process. // dot is the extension separator. // sep is the path separator (0 means to ignore). // Returns an allocated string identical to the original but // with the extension removed. It must be freed when you're // finished with it. // If you pass in NULL or the new string can't be allocated, // it returns NULL. char *remove_ext(char *mystr, char dot, char sep) { char *retstr, *lastdot, *lastsep; // Error checks and allocate string. if (mystr == NULL) return NULL; if ((retstr = malloc(strlen(mystr) + 1)) == NULL) return NULL; // Make a copy and find the relevant characters. strcpy(retstr, mystr); lastdot = strrchr(retstr, dot); lastsep = (sep == 0) ? NULL : strrchr(retstr, sep); // If it has an extension separator. if (lastdot != NULL) { // and it's before the extenstion separator. if (lastsep != NULL) { if (lastsep < lastdot) { // then remove it. *lastdot = '\0'; } } else { // Has extension separator with no path separator. *lastdot = '\0'; } } // Return the modified string. return retstr; } int read_header(EPR_ELogLevel log_level, const char *infile, struct PRM *prm, state_vector *sv, int *n_state_vectors) { EPR_SProductId *product_id; EPR_SDatasetId *MDS1_SQ_ADS; EPR_SDatasetId *MAIN_PROC_PM_ID; EPR_SDatasetId *DOP_CENTROID_COEFFS_ADS; EPR_SDatasetId *CHIRP_PARAMS_ADS; EPR_SDatasetId *GEOLOCATION_GRID_ADS; EPR_SRecord *mph; EPR_SRecord *sph; EPR_SRecord *rec0 = NULL; EPR_SRecord *rec1 = NULL; EPR_SRecord *rec2 = NULL; EPR_SRecord *rec3 = NULL; EPR_SRecord *rec4 = NULL; // EPR_SField* azitime0_field; EPR_EErrCode err_code = e_err_none; int status; char tmp_c[200]; char filename[200]; double rbias = 0.; double tbias = 0.; int tmp_i; double c_speed = 299792458.0; char *tmp_string; EPR_SField num_looks_range_field; uint num_looks_range = 0; EPR_SField range_samp_rate_field; double range_samp_rate; EPR_SField product_field; const char *product_name; int SC_identity = 0; const char dot = '.'; char *Str_SC_identity; EPR_SField radar_freq_field; double radar_freq; EPR_SField pulse_length_field; double pulse_length; EPR_SField look_bandwidth_field; double look_bandwidth; EPR_SField output_mean_field; double output_mean_i; double output_mean_q; EPR_SField line_time_interval_field; double line_time_interval; EPR_SField slant_range_time_field; double slant_range_time_ns; double slant_range_time_s; double near_range; EPR_SField geogrid_slant_range_time_field1; EPR_SField geogrid_slant_range_time_field2; double geogrid_slant_range_time1_ns; double geogrid_slant_range_time2_ns; EPR_SField pass_field; const char *pass; char orbdir[1]; EPR_SField start_time_field; const char *start_time; char s_name[200]; char s_out[200]; char year[5]; char month[4]; char day[3]; EPR_SField stop_time_field; const char *stop_time; EPR_SField num_samples_per_line_field; int num_samples_per_line; EPR_SField num_output_lines_field; int num_output_lines; EPR_SField orbit_state_vector_time_field; EPR_SField orbit_state_vector_value_field; char orbit_state_vector_time_field_name[50]; char orbit_state_vector_value_field_name[50]; const EPR_STime *orbit_state_vector_time_value; int year_for_state_vectors; int day_for_state_vectors; EPR_SField zero_doppler_time_field; const EPR_STime *zero_doppler_time_mjd; EPR_SField attach_flag_field; int attach_flag_value; EPR_SField dop_coef_field; double dop_coef_value_D0; double dop_coef_value_D1; double dop_coef_value_D2; double dop_coef_value_D3; double dop_coef_value_D4; EPR_SField dop_conf_field; double dop_conf_value; EPR_SField dop_thresh_flag_field; int dop_thresh_flag_value; int q; double dr; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; strasign(prm->dtype, "a", 0, 0); // Routine to save the filename without extension in the variable filename strcpy(filename, infile); tmp_string = remove_ext(filename, '.', '/'); strcpy(filename, tmp_string); free(tmp_string); /* Initialize the API. Set log-level and use default log-output (stdout) */ /* How to set error logging without exiting? */ /*status = epr_init_api(e_log_debug, epr_log_message, epr_log_message);*/ status = epr_init_api(log_level, epr_log_message, NULL); if (status != 0) { printf("read_header: fatal error in epr_init_api\n"); printf("exiting.\n"); return 1; }; /* Open the product; an argument is a path to product data file */ /* PRODUCT dataset record field element */ if (log_level == e_log_debug) { printf("\nOpening product.\n"); printf("-------------------------------------------------\n"); } product_id = epr_open_product(infile); err_code = epr_get_last_err_code(); if (err_code != e_err_none) { printf("read_header: fatal error in epr_open_product\n"); printf("exiting.\n"); return 1; } /* Read fields that I want */ /* product DATASET record field element */ /* --- MAIN PRODUCT HEADER ---------------------------------------- */ if (log_level == e_log_debug) { printf("\nTrying to read record: MPH\n"); printf("-------------------------------------------------\n"); } mph = epr_get_mph(product_id); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(mph, stdout); } else { printf("read_header: likely fatal error in epr_get_mph\n"); epr_clear_err(); printf("exiting.\n"); return 1; } /* --- SECOND PRODUCT HEADER -------------------------------------- */ if (log_level == e_log_debug) { printf("\nTrying to read record: SPH\n"); printf("-------------------------------------------------\n"); } sph = epr_get_sph(product_id); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(sph, stdout); } else { printf("read_header: likely fatal error in epr_get_sph\n"); epr_clear_err(); printf("exiting.\n"); return 1; } /* dsd = epr_get_dsd(product_id); */ /* epr_print_record(dsd, stdout);*/ /* --- MDS1_SQ_ADS ------------------------------------------------ */ if (log_level == e_log_debug) { printf("\nTrying to read record: MDS1_SQ_ADS\n"); printf("-------------------------------------------------\n"); } MDS1_SQ_ADS = epr_get_dataset_id(product_id, "MDS1_SQ_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec0 = epr_read_record(MDS1_SQ_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(rec0, stdout); } else { printf("read_header: non-fatal error in epr_read_record MDS1_SQ_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("read_header: error in epr_get_dataset_id MDS1_SQ_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- MAIN_PROC_PM_ID -------------------------------------------- */ if (log_level == e_log_debug) { printf("\nTrying to read record: MAIN_PROCESSING_PARAMS_ADS\n"); printf("-------------------------------------------------\n"); } MAIN_PROC_PM_ID = epr_get_dataset_id(product_id, "MAIN_PROCESSING_PARAMS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec1 = epr_read_record(MAIN_PROC_PM_ID, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(rec1, stdout); } else { printf("read_header: error in epr_read_record MAIN_PROCESSING_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("read_header: error in epr_get_dataset_id " "MAIN_PROCESSING_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- DOP_CENTROID_COEFFS_ADS ------------------------------------ */ if (log_level == e_log_debug) { printf("\nTrying to read record: DOP_CENTROID_COEFFS_ADS\n"); printf("-------------------------------------------------\n"); } DOP_CENTROID_COEFFS_ADS = epr_get_dataset_id(product_id, "DOP_CENTROID_COEFFS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec2 = epr_read_record(DOP_CENTROID_COEFFS_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(rec2, stdout); } else { printf("read_header: error in epr_read_record DOP_CENTROID_COEFFS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("read_header: error in epr_get_dataset_id DOP_CENTROID_COEFFS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- CHIRP_PARAMS_ADS ------------------------------------------- */ if (log_level == e_log_debug) { printf("\nTrying to read record: CHIRP_PARAMS_ADS\n"); printf("-------------------------------------------------\n"); } /* it seems ESRIN does not include this. For now do not read it at all Problems with BAM data, report Z.Perksi #%// Bert Kampes, 12-May-2004 */ CHIRP_PARAMS_ADS = epr_get_dataset_id(product_id, "CHIRP_PARAMS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec3 = epr_read_record(CHIRP_PARAMS_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(rec3, stdout); } else { printf("read_header: error in epr_read_record CHIRP_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("read_header: error in epr_get_dataset_id CHIRP_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- GEOLOCATION_GRID_ADS --------------------------------------- */ if (log_level == e_log_debug) { printf("\nTrying to read record: GEOLOCATION_GRID_ADS\n"); printf("-------------------------------------------------\n"); } GEOLOCATION_GRID_ADS = epr_get_dataset_id(product_id, "GEOLOCATION_GRID_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec4 = epr_read_record(GEOLOCATION_GRID_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(rec4, stdout); } else { printf("read_header: error in epr_read_record GEOLOCATION_GRID_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("read_header: error in epr_get_dataset_id GEOLOCATION_GRID_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* product dataset record FIELD element */ /* azitime0_field = epr_get_field(rec1, "first_zero_doppler_time"); epr_print_field(azitime0_field, stdout); */ /*Set all values in the prm struct */ num_looks_range_field = *(epr_get_field(rec1, "num_looks_range")); num_looks_range = epr_get_field_elem_as_uint(&num_looks_range_field, 0); prm->nlooks = num_looks_range; // nlooks range_samp_rate = 0.0; range_samp_rate_field = *(epr_get_field(rec1, "range_samp_rate")); range_samp_rate = epr_get_field_elem_as_double(&range_samp_rate_field, 0); prm->fs = range_samp_rate; // rng_samp_rate product_field = *(epr_get_field(mph, "PRODUCT")); product_name = epr_get_field_elem_as_str(&product_field); Str_SC_identity = strrchr(product_name, dot); // Returns the last part of the original file // name for identification of the platform // printf("Str_SC_identity %s\n",Str_SC_identity); if (strcasecmp(Str_SC_identity, ".N1") == 0) { SC_identity = 6; } else if (strcasecmp(Str_SC_identity, ".E1") == 0) { SC_identity = 1; } else if (strcasecmp(Str_SC_identity, ".E2") == 0) { SC_identity = 2; } else { SC_identity = 0; } prm->SC_identity = SC_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)-Envisat_SLC (7)-TSX (8)-CSK (9)-RS2 (10)-Sentinel-1a*/ radar_freq = 0.0; radar_freq_field = *(epr_get_field(rec1, "radar_freq")); radar_freq = epr_get_field_elem_as_double(&radar_freq_field, 0); prm->lambda = c_speed / radar_freq; // radar_wavelength pulse_length = 0.0; pulse_length_field = *(epr_get_field(rec1, "image_parameters.tx_pulse_len_value")); pulse_length = epr_get_field_elem_as_double(&pulse_length_field, 0); // printf("pulse_length %f\n",pulse_length); look_bandwidth = 0.0; look_bandwidth_field = *(epr_get_field(rec1, "bandwidth.look_bw_range")); look_bandwidth = epr_get_field_elem_as_double(&look_bandwidth_field, 0); // printf("look_bandwidth %f\n",look_bandwidth); prm->chirp_slope = look_bandwidth / pulse_length; prm->pulsedur = pulse_length; output_mean_i = 0.0; output_mean_q = 0.0; output_mean_field = *(epr_get_field(rec0, "output_mean")); output_mean_i = epr_get_field_elem_as_double(&output_mean_field, 0); output_mean_q = epr_get_field_elem_as_double(&output_mean_field, 1); // printf("output_mean_i %f\noutput_mean_q %f\n",output_mean_i,output_mean_q); prm->xmi = output_mean_i; // I_mean prm->xmq = output_mean_q; // Q_mean line_time_interval = 0.0; line_time_interval_field = *(epr_get_field(rec1, "line_time_interval")); line_time_interval = epr_get_field_elem_as_double(&line_time_interval_field, 0); prm->prf = 1 / line_time_interval; // Pulse Repetition Frequency slant_range_time_ns = 0.0; slant_range_time_s = 0.0; near_range = 0.0; // slant_range_time_field = *(epr_get_field(rec2, "slant_range_time")); // slant_range_time_ns = // epr_get_field_elem_as_double(&slant_range_time_field, 0); geogrid_slant_range_time_field1 = *(epr_get_field(rec4, "first_line_tie_points.slant_range_times")); geogrid_slant_range_time_field2 = *(epr_get_field(rec4, "last_line_tie_points.slant_range_times")); geogrid_slant_range_time1_ns = epr_get_field_elem_as_double(&geogrid_slant_range_time_field1, 0); geogrid_slant_range_time2_ns = epr_get_field_elem_as_double(&geogrid_slant_range_time_field2, 0); slant_range_time_ns = (geogrid_slant_range_time1_ns + geogrid_slant_range_time2_ns) / 2; slant_range_time_s = slant_range_time_ns * 0.000000001; near_range = slant_range_time_s * c_speed / 2; /* convert to pixel space */ dr = 0.5 * c_speed / prm->fs; /* make a bias correction the range for ENVI and ERS*/ if (SC_identity == 1) { rbias = -10.52 * dr; } else if (SC_identity == 2) { rbias = -5.3 * dr; } else if (SC_identity == 6) { rbias = -0.8 * dr; } else { printf(" SC_identity out of range "); } prm->near_range = near_range + rbias; // near_range /* Read Doppler Processing Parameters */ /* Zero Doppler azimuth time at which estimate applies */ zero_doppler_time_field = *(epr_get_field(rec2, "zero_doppler_time")); zero_doppler_time_mjd = epr_get_field_elem_as_mjd(&zero_doppler_time_field); /* Attachment Flag (always set to zero for this ADSR */ attach_flag_field = *(epr_get_field(rec2, "attach_flag")); attach_flag_value = epr_get_field_elem_as_double(&attach_flag_field, 0); /* 2-way slant range time origin (t0) */ slant_range_time_ns = 0; slant_range_time_field = *(epr_get_field(rec2, "slant_range_time")); slant_range_time_ns = epr_get_field_elem_as_double(&slant_range_time_field, 0); /* Doppler centroid coefficients as a function of slant range time: D0, D1, * D2, D3, and D4. */ dop_coef_field = *(epr_get_field(rec2, "dop_coef")); dop_coef_value_D0 = epr_get_field_elem_as_double(&dop_coef_field, 0); dop_coef_value_D1 = epr_get_field_elem_as_double(&dop_coef_field, 1); dop_coef_value_D2 = epr_get_field_elem_as_double(&dop_coef_field, 2); dop_coef_value_D3 = epr_get_field_elem_as_double(&dop_coef_field, 3); dop_coef_value_D4 = epr_get_field_elem_as_double(&dop_coef_field, 4); /* Doppler Centroid Confidence Measure */ dop_conf_field = *(epr_get_field(rec2, "dop_conf")); dop_conf_value = epr_get_field_elem_as_double(&dop_conf_field, 0); /* Doppler Confidence Below Threshold Flag */ dop_thresh_flag_field = *(epr_get_field(rec2, "dop_thresh_flag")); dop_thresh_flag_value = epr_get_field_elem_as_double(&dop_thresh_flag_field, 0); /* printf("\nINFO:\nDoppler Centroid Coefficients ADSR\n"); printf("Zero Doppler azimuth time at which estimate applies: d=%d (days), j=%d (seconds), m=%d (microseconds)\n",zero_doppler_time_mjd->days,zero_doppler_time_mjd->seconds,zero_doppler_time_mjd->microseconds); printf("Attachment Flag (always set to zero for this ADSR): %d\n",attach_flag_value); printf("2-way slant range time origin (t0): %f (ns)\n",slant_range_time_ns); printf("Doppler centroid coefficients as a function of slant range time, D0, D1, D2, D3, and D4: D0=%f (Hz), D1=%f (Hz/s), D2=%f (Hz/s2), D3=%f (Hz/s3), D4=%f (Hz/s4)\n",dop_coef_value_D0,dop_coef_value_D1,dop_coef_value_D2,dop_coef_value_D3,dop_coef_value_D4); printf("Doppler Centroid Confidence Measure: %f\n",dop_conf_value); printf("Value between 0 and 1, 0 = poorest confidence, 1= highest confidence\n"); printf("If multiple Doppler Centroid estimates were performed, this value is the lowest confidence value attained.\n"); printf("Doppler Confidence Below Threshold Flag: %d\n",dop_thresh_flag_value); printf("0 = confidence above threshold, Doppler Centroid calculated from data\n"); printf("1 = confidence below threshold, Doppler Centroid calculated from orbit parameters\n"); printf("\n"); */ /* Set fd1 to the value of D0 for now and make the assumption that it is close * enough, we'll make the precise calculations later */ /* David noted that this value is about twice of what it is supposed to be, * divide by 2 for now */ // prm->fd1 = dop_coef_value_D0/2; prm->fd1 = 0; /* End Read Doppler Processing Parameters */ prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius pass_field = *(epr_get_field(sph, "PASS")); pass = epr_get_field_elem_as_str(&pass_field); strncpy(orbdir, pass, 1); strasign(prm->orbdir, orbdir, 0, 0); // orbdir strasign(prm->lookdir, "R", 0, 0); strcpy(tmp_c, filename); strcat(tmp_c, ".SLC"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, filename); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, filename); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; start_time_field = *(epr_get_field(sph, "FIRST_LINE_TIME")); start_time = epr_get_field_elem_as_str(&start_time_field); strcpy(tmp_c, start_time); for (q = 0; q < strlen(tmp_c); q++) { if (tmp_c[q] == ' ') tmp_c[q] = 'T'; } /* Ugly routine to convert the date format to be the same as in Sentinel-1 * data */ year[4] = '\0'; month[3] = '\0'; day[2] = '\0'; strncpy(year, &tmp_c[7], 4); strncpy(month, &tmp_c[3], 3); strncpy(day, &tmp_c[0], 2); // Convert month to number if (monthtonum(month) < 10) sprintf(tmp_c, "%s-0%d-%s%s", year, monthtonum(month), day, &tmp_c[11]); else sprintf(tmp_c, "%s-%d-%s%s", year, monthtonum(month), day, &tmp_c[11]); cat_nums(s_name, tmp_c); str_date2JD(s_out, s_name); /* make a time bias correction for ENVI and ERS*/ if (SC_identity == 1) { tbias = 19.2501 / prm->prf / 86400.; } else if (SC_identity == 2) { tbias = 0.; } else if (SC_identity == 6) { tbias = -4.25 / prm->prf / 86400.; } else { printf(" SC_identity out of range "); } prm->clock_start = atof(s_out) + 1 + tbias; tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * atof(tmp_c); stop_time_field = *(epr_get_field(sph, "LAST_LINE_TIME")); stop_time = epr_get_field_elem_as_str(&stop_time_field); strcpy(tmp_c, stop_time); for (int q = 0; q < strlen(tmp_c); q++) { if (tmp_c[q] == ' ') tmp_c[q] = 'T'; } /* Ugly routine to convert the date format to be the same as in Sentinel-1 * data */ year[4] = '\0'; month[3] = '\0'; day[2] = '\0'; strncpy(year, &tmp_c[7], 4); strncpy(month, &tmp_c[3], 3); strncpy(day, &tmp_c[0], 2); // Save year and day for use in state vectors year_for_state_vectors = str2double(year); // Convert month to number if (monthtonum(month) < 10) sprintf(tmp_c, "%s-0%d-%s%s", year, monthtonum(month), day, &tmp_c[11]); else sprintf(tmp_c, "%s-%d-%s%s", year, monthtonum(month), day, &tmp_c[11]); cat_nums(s_name, tmp_c); str_date2JD(s_out, s_name); // Save day for use in state vectors day_for_state_vectors = atof(s_out) + 1; // Why doesn't str2double work here? prm->clock_stop = atof(s_out) + 1; tmp_c[4] = '\0'; prm->SC_clock_stop = prm->clock_stop + 1000. * atof(tmp_c); strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); num_samples_per_line = 0.0; tmp_i = 0; num_samples_per_line_field = *(epr_get_field(rec1, "num_samples_per_line")); num_samples_per_line = (int)epr_get_field_elem_as_double(&num_samples_per_line_field, 0); /* This does not work with ERS/ENVISAT data tmp_i = num_samples_per_line - num_samples_per_line%4; */ tmp_i = num_samples_per_line; prm->bytes_per_line = tmp_i * 4; prm->good_bytes = prm->bytes_per_line; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig prm->az_res = 0.0; // prm.antenna_side = -1; prm->fdd1 = 0.0; prm->fddd1 = 0.0; num_output_lines = 0.0; num_output_lines_field = *(epr_get_field(rec1, "num_output_lines")); num_output_lines = (int)epr_get_field_elem_as_double(&num_output_lines_field, 0); tmp_i = 0; tmp_i = num_output_lines % 4; prm->num_lines = num_output_lines - tmp_i; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->num_rng_bins = prm->bytes_per_line / 4; prm->chirp_ext = 0; printf("PRM set for Image File...\n"); // Read orbit state vectors, there should always be five of them for (int n_orbit_state_vector = 1; n_orbit_state_vector < 6; n_orbit_state_vector++) { // Time values sprintf(orbit_state_vector_time_field_name, "orbit_state_vectors.%d.state_vect_time_1", n_orbit_state_vector); orbit_state_vector_time_field = *(epr_get_field(rec1, orbit_state_vector_time_field_name)); orbit_state_vector_time_value = epr_get_field_elem_as_mjd(&orbit_state_vector_time_field); sv[n_orbit_state_vector - 1].yr = year_for_state_vectors; sv[n_orbit_state_vector - 1].jd = day_for_state_vectors; sv[n_orbit_state_vector - 1].sec = orbit_state_vector_time_value->seconds; // x pos sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.x_pos_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].x = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100; // y pos sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.y_pos_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].y = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100; // z pos sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.z_pos_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].z = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100; // x vel sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.x_vel_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].vx = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100000; // y vel sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.y_vel_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].vy = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100000; // z vel sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.z_vel_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].vz = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100000; *n_state_vectors = n_orbit_state_vector; } printf("LED set for Image File...\n"); /* Close product_id and release rest of the allocated memory */ printf("\n"); epr_close_product(product_id); /* Closes product reader API, release all allocated resources */ epr_close_api(); return 0; } // Converts month to number 1 - 12 int monthtonum(char *szMonth) { const char *months[12] = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; int nMonth = 0; int i; for (i = 0; i < 12; ++i) { if (strncasecmp(szMonth, months[i], 3) == 0) nMonth = i + 1; } return nMonth; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/envisat_dump_data.c000755 015705 000000 00000014220 13505462014 026110 0ustar00sandwellwheel000000 000000 /* BK: simple program to dump binary data for ENVISAT 08-July-2004 Modified by Anders Hogrelius, Earth Consultants International, Inc 17-April-1017 $Id: envisat_dump_data.c,v 1.5 2004/08/09 09:43:28 kampes Exp $ */ #include "epr_api-2.3/src/epr_api.h" #include #include #include #include #include #include #include #if defined(WIN32) && defined(_DEBUG) #include #endif /* if defined(WIN32) && defined(_DEBUG) */ //#include int dump_data(EPR_ELogLevel log_level, const char *infile, const char *outfile, int pixflag, unsigned int l0, unsigned int lN, unsigned int p0, unsigned int pN); int main(int argc, char **argv) { int status = 0; // ulong l0; // ulong lN; // ulong p0; // ulong pN; unsigned int l0 = 0; // MA due to difference between 32-bit/64-bit data // structure: define typedef like Doris see constant.h unsigned int lN = 0; unsigned int p0 = 0; unsigned int pN = 0; const char *infile; const char *outfile; int pixflag = 0; /* handle input */ printf("argc: %d\n", argc); if (argc != 3 && argc != 7) { printf("Usage: envisat_dump_data envisat-product outputfile [l0 lN p0 pN]\n"); printf(" where envisat-product is the input filename\n"); printf(" outputfile is the output filename\n"); printf(" l0 is the first azimuth line (starting at 1)\n"); printf(" lN is the last azimuth line\n"); printf(" p0 is the first range pixel (starting at 1)\n"); printf(" pN is the last range pixel\n"); printf("Example:\n"); printf(" envisat_dump_data " "ASA_IMS_1PNDPA20021025_175208_000000162010_00356_03416_0005.N1 " "crop.out 0 10 0 100\n\n"); return 1; } infile = argv[1]; outfile = argv[2]; printf("infile: %s\n", infile); printf("outfile: %s\n", outfile); if (argc == 7) { status = sscanf(argv[3], "%u", &l0); status = sscanf(argv[4], "%u", &lN); status = sscanf(argv[5], "%u", &p0); status = sscanf(argv[6], "%u", &pN); printf("sscanf l0: %f\n", (float)l0); printf("sscanf lN: %f\n", (float)lN); printf("sscanf p0: %f\n", (float)p0); printf("sscanf pN: %f\n", (float)pN); // printf("sscanf lN: %s\n", typeid(lN)); } if (argc == 3) pixflag = 1; return dump_data(e_log_info, infile, outfile, pixflag, l0, lN, p0, pN); } int dump_data(EPR_ELogLevel log_level, const char *infile, const char *outfile, int pixflag, unsigned int l0, unsigned int lN, unsigned int p0, unsigned int pN) { FILE *outstream; EPR_SProductId *product_id; EPR_SDatasetId *MAIN_PROC_PM_ID; EPR_SDatasetId *MDS1; EPR_SRecord *rec1; EPR_SRecord *rec5; EPR_SField numlines_field; EPR_SField numpixels_field; EPR_SField line_field; ulong numlines; ulong numberoflines; ulong numpixels; int cnt; int x, y; /* loop counter go upto 25.000 or so */ short realpart_short; /* written to output file */ short imagpart_short; /* written to output file */ int status; /* Initialize the API. Set log-level to DEBUG and use default log-output * (stdout) */ epr_init_api(log_level, epr_log_message, NULL); /* Open the product; an argument is a path to product data file */ /* PRODUCT dataset record field element */ product_id = epr_open_product(infile); /* product DATASET record field element */ MAIN_PROC_PM_ID = epr_get_dataset_id(product_id, "MAIN_PROCESSING_PARAMS_ADS"); MDS1 = epr_get_dataset_id(product_id, "MDS1"); /* product dataset RECORD field element */ rec1 = epr_read_record(MAIN_PROC_PM_ID, 0, NULL); /* product dataset record FIELD element */ numlines_field = *(epr_get_field(rec1, "num_output_lines")); numpixels_field = *(epr_get_field(rec1, "num_samples_per_line")); /* epr_free_record(rec1); */ epr_print_field(&numlines_field, stdout); epr_print_field(&numpixels_field, stdout); numlines = epr_get_field_elem_as_uint(&numlines_field, 0); numpixels = epr_get_field_elem_as_uint(&numpixels_field, 0); if (pixflag) { l0 = 1; lN = numlines; p0 = 1; pN = numpixels; } /* loop over data record to get data and dump it to file */ numberoflines = epr_get_num_records(MDS1); if (log_level == e_log_debug) { printf("numberoflines: %f\n", (float)numberoflines); printf("numlines: %f\n", (float)numlines); printf("numpixels: %f\n", (float)numpixels); printf("l0: %f\n", (float)l0); printf("lN: %f\n", (float)lN); printf("p0: %f\n", (float)p0); printf("pN: %f\n", (float)pN); } /* check if number of records indeed equals the number of lines */ if (numberoflines != numlines) { printf("numlines not equal in check, ASAR format error?."); return 1; } /* --- Check if input as acceptable ---------------------------- */ if (l0 < 1) { printf("l0<1 not allowed. first line is 1 not 0.\n"); return 1; } if (p0 < 1) { printf("p0<1 not allowed. first line is 1 not 0.\n"); return 1; } if (lN > numlines) { printf("lN>numlines not allowed.\n"); return 1; } if (pN > numpixels) { printf("pN>numpixels not allowed.\n"); return 1; } /* --- read in whole line of cpx data -------------------------- */ outstream = fopen(outfile, "wb"); for (y = l0; y <= lN; y++) { rec5 = epr_read_record(MDS1, y - 1, NULL); line_field = *(epr_get_field(rec5, "proc_data")); cnt = 2 * (p0 - 1); /* p0 starts at 1 for first element (BUGFIX!) */ /* write out selected pixels */ for (x = p0; x <= pN; x++) { realpart_short = epr_get_field_elem_as_short(&line_field, cnt); cnt++; imagpart_short = epr_get_field_elem_as_short(&line_field, cnt); cnt++; status = fwrite(&realpart_short, 2, 1, outstream); if (status != 1 && log_level == e_log_debug) fprintf(stderr, "fwrite could not write to disk?"); status = fwrite(&imagpart_short, 2, 1, outstream); if (status != 1 && log_level == e_log_debug) fprintf(stderr, "fwrite could not write to disk?"); } /* this program seemed to fill all memory for some reason? try to free it */ epr_free_record(rec5); } fclose(outstream); epr_close_product(product_id); /* Closes product reader API, release all allocated resources */ epr_close_api(); return 0; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/000755 015705 000000 00000000000 13507242234 024763 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_bitmask.c000644 015705 000000 00000071534 13505462014 027437 0ustar00sandwellwheel000000 000000 /* * $Id: epr_bitmask.c,v 1.2 2004-10-28 20:10:57 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" void epr_resolve_bm_ref(EPR_SBmEvalContext* context, EPR_SBmTerm* term); EPR_SBmEvalContext* epr_create_bm_eval_context(EPR_SProductId* product_id, int offset_x, int offset_y, EPR_SRaster* bitmask_raster) { EPR_SBmEvalContext* context; context = (EPR_SBmEvalContext*) calloc(1, sizeof (EPR_SBmEvalContext)); if (context == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_bm_eval_context: out of memory"); return NULL; } context->product_id = product_id; context->offset_x = offset_x; context->offset_y = offset_y; context->bitmask_raster = bitmask_raster; context->flag_band_ids = epr_create_ptr_array(4); context->flag_rasters = epr_create_ptr_array(4); return context; } void epr_free_bm_eval_context(EPR_SBmEvalContext* context) { EPR_SRaster* flag_raster; uint flag_index; if (context == NULL) { return; } if (context->flag_band_ids != NULL) { for (flag_index = 0; flag_index < context->flag_band_ids->length; flag_index++) { /* * Note that the release of band ID's is handled by the epr_close_product() function, * The rasters need to be released, because they are internally used by this * context. */ flag_raster = (EPR_SRaster*)context->flag_rasters->elems[flag_index]; epr_free_raster(flag_raster); } epr_free_ptr_array(context->flag_band_ids); epr_free_ptr_array(context->flag_rasters); } free(context); } /** * Reads bit-mask pixels of the given product for the given bit-mask expression * for the given region offset and raster. * * @param product_id the product ID * @param bm_expr the bit-mask expression * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right raster corner to be searched for * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right raster corner to be searched for * @param raster the instance to the buffer information was used * * @return zero for success, an error code otherwise */ int epr_read_bitmask_raster(EPR_SProductId* product_id, const char* bm_expr, int offset_x, int offset_y, EPR_SRaster* bm_raster) { EPR_SBmEvalContext* context; EPR_SBmTerm* term; uint x, y; uint pos; uchar* bm_buffer = NULL; EPR_EErrCode errcode; epr_clear_err(); if (bm_raster->data_type != e_tid_uchar && bm_raster->data_type != e_tid_char) { epr_set_err(e_err_illegal_data_type, "epr_read_bitmask_raster: illegal raster datatype; must be 'char' or 'uchar'"); return e_err_illegal_data_type; } bm_buffer = (uchar*) bm_raster->buffer; if (bm_buffer == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_bitmask_raster: false memory allocation for a raster buffer"); return e_err_out_of_memory; } context = epr_create_bm_eval_context(product_id, offset_x, offset_y, bm_raster); if (context == NULL) { epr_set_err(e_err_illegal_arg, "epr_read_bitmask_raster: the context cannot be created"); return e_err_illegal_arg; } term = epr_parse_bm_expr_str(bm_expr); if (term == NULL) { epr_set_err(e_err_illegal_arg, "epr_read_bitmask_raster: the term was not build"); return e_err_illegal_arg; } pos = 0; epr_clear_err(); errcode = epr_get_last_err_code(); for (y = 0; y < bm_raster->raster_height; y++) { for (x = 0; x < bm_raster->raster_width; x++) { bm_buffer[pos] = (uchar) epr_eval_bm_term(context, term, x, y); pos++; errcode = epr_get_last_err_code(); if (errcode != 0) { break; } } if (errcode != 0) { break; } } epr_free_bm_term(term); epr_free_bm_eval_context(context); return errcode; } /** * Evaluates the given bitmask expression. * * @param term the bitmask term * @param x the pixel's x co-ordinate * @param y the pixel's y co-ordinate */ epr_boolean epr_eval_bm_term(EPR_SBmEvalContext* context, EPR_SBmTerm* term, int x, int y) { uint temp; uint eval; if (term == NULL) { return FALSE; } switch (term->op_code) { case BMT_REF: { EPR_SRaster* flag_raster = term->op.ref.flag_raster; uint flag_mask = term->op.ref.flag_mask; if (flag_raster == NULL) { epr_resolve_bm_ref(context, term); flag_raster = term->op.ref.flag_raster; flag_mask = term->op.ref.flag_mask; if (flag_raster == NULL) { return FALSE; } } assert(flag_raster != NULL); assert(flag_mask != FLAG_MASK_NOT_COMPUTED); temp = epr_get_pixel_as_uint(flag_raster, x, y); eval = temp & flag_mask; return (eval) == flag_mask; } case BMT_AND: { if (!epr_eval_bm_term(context, term->op.binary.arg1, x, y)) { return FALSE; } return epr_eval_bm_term(context, term->op.binary.arg2, x, y); } case BMT_OR: { if (epr_eval_bm_term(context, term->op.binary.arg1, x, y)) { return TRUE; } return epr_eval_bm_term(context, term->op.binary.arg2, x, y); } case BMT_NOT: { return !epr_eval_bm_term(context, term->op.unary.arg, x, y); } default: assert(0); return FALSE; } } void epr_resolve_bm_ref(EPR_SBmEvalContext* context, EPR_SBmTerm* term) { const char* band_name = term->op.ref.band_name; const char* flag_name = term->op.ref.flag_name; EPR_SBandId* flag_band_id = NULL; uint flag_band_index = (uint) -1; uint band_index = 0; uint num_bands = context->flag_band_ids->length; EPR_SRaster* flag_raster = NULL; uint flag_mask = 0; uint flag_computed = 0; /* Find the corresponding flag_band_id for band_name */ for (band_index = 0; band_index < num_bands; band_index++) { flag_band_id = (EPR_SBandId*) context->flag_band_ids->elems[band_index]; if (epr_equal_names(band_name, flag_band_id->band_name)) { flag_band_index = band_index; break; } } /* flag_band_id found? */ if (flag_band_index != (uint) -1) { /* Yes, found: get flag_band_id and the corresponding raster */ flag_band_id = (EPR_SBandId*)(context->flag_band_ids->elems[flag_band_index]); flag_raster = (EPR_SRaster*)(context->flag_rasters->elems[flag_band_index]); } else { /* Not found: get flag_band_id from product and load the corresponding raster */ flag_band_id = epr_get_band_id(context->product_id, band_name); if (flag_band_id != NULL) { flag_raster = epr_create_compatible_raster(flag_band_id, context->bitmask_raster->source_width, context->bitmask_raster->source_height, context->bitmask_raster->source_step_x, context->bitmask_raster->source_step_y); epr_read_band_raster(flag_band_id, context->offset_x, context->offset_y, flag_raster); /* register flag_band_id and flag_raster for later use */ epr_add_ptr_array_elem(context->flag_band_ids, flag_band_id); epr_add_ptr_array_elem(context->flag_rasters, flag_raster); } else { epr_set_err(e_err_flag_not_found, "flags band not found"); return; } } /* Now, compute flag_mask */ /* Does the band have a flag coding? */ if (flag_band_id->flag_coding != NULL) { /* Yes, now find flag definition for flag_name */ EPR_SFlagDef* flag_def = NULL; uint flag_def_index; for (flag_def_index = 0; flag_def_index < flag_band_id->flag_coding->length; flag_def_index++) { flag_def = (EPR_SFlagDef*) flag_band_id->flag_coding->elems[flag_def_index]; if (epr_equal_names(flag_def->name, flag_name)) { flag_computed = 1; flag_mask |= flag_def->bit_mask; /* TODO!!! */ break; } } } if (flag_computed == 0) { flag_mask = FLAG_MASK_NOT_COMPUTED; epr_set_err(e_err_flag_not_found, "flag not found"); } term->op.ref.flag_mask = flag_mask; term->op.ref.flag_raster = flag_raster; } /** * Parses the bit-mask expression given as character string. * * @param bm_expr the bit-mask expression given as character string * @return the bit-mask term tree representing the bit-mask expression * @throws BitmaskExpressionParseException if the given code could not be epr_parse'd * @throws IOException if an I/O error occurs */ EPR_SBmTerm* epr_parse_bm_expr_str(const char* bm_expr) { EPR_SBmTerm* term; EPR_SParseInfo parse_info; parse_info.bm_expr = bm_expr; parse_info.bm_expr_pos = 0; parse_info.pushed_back = FALSE; parse_info.token = NULL; parse_info.err_message = NULL; term = epr_parse_bm_expr(&parse_info, FALSE); epr_free_string(parse_info.token); parse_info.token = NULL; if (epr_is_bm_expr_error(&parse_info)) { char tmp[256] = {"bitmap-expression error: "}; strcat(tmp, parse_info.err_message); epr_set_err(e_err_invalid_value, tmp); } return term; } EPR_SPtrArray* epr_create_flag_coding(EPR_SProductId* product_id, const char* flag_coding_name) { int num_descr; int i, j; const struct FlagDescriptorTable* fc_tables; int fct_index; EPR_SPtrArray* flag_coding = NULL; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_create_flag_coding: product_id must not be NULL"); return NULL; } /* @DDDB */ fc_tables = dddb_flag_coding_tables; fct_index = -1; for (i = 0; i < EPR_NUM_FLAG_CODING_TABLES; i++) { const char* id = fc_tables[i].name; if (epr_equal_names(id, flag_coding_name)) { fct_index = i; break; } } if (fct_index == -1) { epr_set_err(e_err_null_pointer, "epr_create_flag_coding: unknown flag coding"); return NULL; } flag_coding = epr_create_ptr_array(16); num_descr = fc_tables[fct_index].num_descriptors; for (i = 0; i < num_descr; i++) { EPR_SFlagDef* flag_def = (EPR_SFlagDef*) calloc(1, sizeof (EPR_SFlagDef)); if (flag_def == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_flag_coding: out of memory"); return NULL; } /* 1: flag_name */ epr_assign_string(&flag_def->name, fc_tables[fct_index].descriptors[i].id); if (flag_def->name == NULL) { epr_set_err(e_err_out_of_memory, "epr_get_flag_coding: out of memory"); epr_free_flag_def(flag_def); return NULL; } /* 2: dataset_name */ /* flag_def->bit_index = (uint)fc_tables[fct_index].descriptors[i].bit_index; */ flag_def->bit_mask = 0; for (j = 0; j < fc_tables[fct_index].descriptors[i].num_indices; j++) { flag_def->bit_mask |= (1 << fc_tables[fct_index].descriptors[i].bit_indices[j]); } /* 3: sample_offset */ epr_assign_string(&flag_def->description, fc_tables[fct_index].descriptors[i].description); epr_add_ptr_array_elem(flag_coding, flag_def); } return flag_coding; } void epr_free_flag_coding(EPR_SPtrArray* flag_coding) { EPR_SFlagDef* flag_def = NULL; uint flag_index; if (flag_coding == NULL) { return; } for (flag_index = 0; flag_index < flag_coding->length; flag_index++) { flag_def = (EPR_SFlagDef*) flag_coding->elems[flag_index]; epr_free_flag_def(flag_def); flag_def = NULL; } epr_free_ptr_array(flag_coding); } EPR_SFlagDef* epr_create_flag_def() { EPR_SFlagDef* flag_def = NULL; flag_def = (EPR_SFlagDef*) calloc(1, sizeof (EPR_SFlagDef)); if (flag_def == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_flag_def: out of memory"); return NULL; } flag_def->magic = EPR_MAGIC_FLAG_DEF; return flag_def; } void epr_free_flag_def(EPR_SFlagDef* flag_def) { if (flag_def == NULL) return; epr_free_string(flag_def->name); flag_def->name = NULL; flag_def->bit_mask = 0; epr_free_string(flag_def->description); flag_def->description = NULL; free(flag_def); } EPR_SBmTerm* epr_parse_bm_expr(EPR_SParseInfo* parse_info, epr_boolean term_required) { return epr_parse_bm_OR_expr(parse_info, term_required); } EPR_SBmTerm* epr_parse_bm_OR_expr(EPR_SParseInfo* parse_info, epr_boolean term_required) { EPR_SBmTerm* term1 = epr_parse_bm_AND_expr(parse_info, term_required); if (term1 == NULL) { return NULL; } while (!epr_is_bm_expr_error(parse_info)) { epr_next_bm_expr_token(parse_info); if (epr_is_bm_OR_keyword(parse_info) || epr_is_bm_OR_operator(parse_info)) { EPR_SBmTerm* term2 = epr_parse_bm_OR_expr(parse_info, TRUE); term1 = epr_create_bm_OR_term(term1, term2); } else { epr_push_back_bm_expr_token(parse_info); break; } } return term1; } EPR_SBmTerm* epr_parse_bm_AND_expr(EPR_SParseInfo* parse_info, epr_boolean term_required) { EPR_SBmTerm* term1 = epr_parse_bm_unary_expr(parse_info, term_required); if (term1 == NULL) { return NULL; } while (!epr_is_bm_expr_error(parse_info)) { epr_next_bm_expr_token(parse_info); if (epr_is_bm_AND_keyword(parse_info) || epr_is_bm_AND_operator(parse_info)) { EPR_SBmTerm* term2 = epr_parse_bm_AND_expr(parse_info, TRUE); term1 = epr_create_bm_AND_term(term1, term2); } else { epr_push_back_bm_expr_token(parse_info); break; } } return term1; } EPR_SBmTerm* epr_parse_bm_unary_expr(EPR_SParseInfo* parse_info, epr_boolean term_required) { EPR_SBmTerm* term = NULL; epr_next_bm_expr_token(parse_info); if (epr_is_bm_NOT_keyword(parse_info) || epr_is_bm_NOT_operator(parse_info)) { term = epr_parse_bm_unary_expr(parse_info, TRUE); term = epr_create_bm_NOT_term(term); } else { epr_push_back_bm_expr_token(parse_info); term = epr_parse_bm_primary_expr(parse_info, term_required); } return term; } EPR_SBmTerm* epr_parse_bm_primary_expr(EPR_SParseInfo* parse_info, epr_boolean term_required) { EPR_SBmTerm* term = NULL; epr_next_bm_expr_token(parse_info); if (epr_get_token_char(parse_info) == '(') { term = epr_parse_bm_expr(parse_info, TRUE); epr_next_bm_expr_token(parse_info); if (epr_get_token_char(parse_info) != ')') { epr_set_bm_expr_error(parse_info, "')' expected"); } } else if (epr_is_bm_name_token(parse_info)) { char* ds_name = epr_consume_token(parse_info); epr_next_bm_expr_token(parse_info); if (epr_get_token_char(parse_info) == '.') { epr_next_bm_expr_token(parse_info); if (epr_is_bm_name_token(parse_info)) { char* flag_name = epr_consume_token(parse_info); term = epr_create_bm_REF_term(ds_name, flag_name); } else { epr_set_bm_expr_error(parse_info, "flag name expected"); } } else { epr_set_bm_expr_error(parse_info, "'.' expected"); } } else if (epr_is_bm_EOS_token(parse_info)) { if (term_required) { epr_set_bm_expr_error(parse_info, "operator or flag name expected"); } } else { epr_set_bm_expr_error(parse_info, "operator or flag name expected"); } return term; } epr_boolean epr_is_bm_OR_keyword(EPR_SParseInfo* parse_info) { return epr_is_bm_name_token(parse_info) && stricmp("or", parse_info->token) == 0; } epr_boolean epr_is_bm_AND_keyword(EPR_SParseInfo* parse_info) { return epr_is_bm_name_token(parse_info) && stricmp("and", parse_info->token) == 0; } epr_boolean epr_is_bm_NOT_keyword(EPR_SParseInfo* parse_info) { return epr_is_bm_name_token(parse_info) && stricmp("not", parse_info->token) == 0; } epr_boolean epr_is_bm_AND_operator(EPR_SParseInfo* parse_info) { return epr_get_token_char(parse_info) == '&'; } epr_boolean epr_is_bm_OR_operator(EPR_SParseInfo* parse_info) { return epr_get_token_char(parse_info) == '|'; } epr_boolean epr_is_bm_NOT_operator(EPR_SParseInfo* parse_info) { return epr_get_token_char(parse_info) == '!'; } epr_boolean epr_is_bm_name_token(EPR_SParseInfo* parse_info) { return parse_info->token_type == BME_NAME && parse_info->token != NULL; } epr_boolean epr_is_bm_EOS_token(EPR_SParseInfo* parse_info) { return parse_info->token_type == BME_EOS; } epr_boolean epr_is_bm_expr_error(EPR_SParseInfo* parse_info) { return parse_info->err_message != NULL; } int epr_get_token_char(EPR_SParseInfo* parse_info) { if (parse_info->token_type == BME_SPECIAL && parse_info->token != NULL) { return parse_info->token[0]; } return '\0'; } char* epr_consume_token(EPR_SParseInfo* parse_info) { char* token = parse_info->token; /* Prevent from being released by epr_free_string() */ parse_info->token = NULL; parse_info->token_type = BME_UNKNOWN; parse_info->pushed_back = FALSE; return token; } void epr_next_bm_expr_token(EPR_SParseInfo* parse_info) { if (parse_info->pushed_back) { parse_info->pushed_back = FALSE; return; } epr_free_string(parse_info->token); parse_info->token_type = epr_tokenize_bm_expr(parse_info->bm_expr, &(parse_info->bm_expr_pos), &(parse_info->token)); } void epr_push_back_bm_expr_token(EPR_SParseInfo* parse_info) { parse_info->pushed_back = TRUE; } void epr_set_bm_expr_error(EPR_SParseInfo* parse_info, const char* message) { static char msg_buf[2048]; epr_push_back_bm_expr_token(parse_info); if (message != NULL) { if (!epr_is_bm_EOS_token(parse_info)) { sprintf(msg_buf, "%s, but found token '%s'", message, parse_info->token); } else { sprintf(msg_buf, "%s, but found 'end-of-string'", message); } } else { if (!epr_is_bm_EOS_token(parse_info)) { sprintf(msg_buf, "unexpected token '%s' found", parse_info->token); } else { sprintf(msg_buf, "unexpected 'end-of-string' found"); } } parse_info->err_message = epr_clone_string(msg_buf); } int epr_tokenize_bm_expr(const char* bm_expr, int* bm_expr_pos, char** token) { int pos = *bm_expr_pos; while (isspace(bm_expr[pos])) { pos++; } if (bm_expr[pos] == '\0') { *bm_expr_pos = pos; *token = NULL; return BME_EOS; } if (isalpha(bm_expr[pos]) || bm_expr[pos] == '_') { int pos0 = pos; size_t len; char* tok; pos++; while (isalnum(bm_expr[pos]) || bm_expr[pos] == '_') { pos++; } len = pos - pos0; tok = epr_create_string(len + 1); strncpy(tok, bm_expr + pos0, len); tok[len] = '\0'; *token = tok; *bm_expr_pos = pos; return BME_NAME; } if (bm_expr[pos] == '(' || bm_expr[pos] == ')' || bm_expr[pos] == '.' || bm_expr[pos] == '&' || bm_expr[pos] == '|' || bm_expr[pos] == '!') { char* tok; tok = epr_create_string(2); tok[0] = bm_expr[pos]; tok[1] = '\0'; pos++; *token = tok; *bm_expr_pos = pos; return BME_SPECIAL; } *token = NULL; *bm_expr_pos = pos; return BME_UNKNOWN; } EPR_SBmTerm* epr_create_bm_term(EPR_EBmOpCode op_code) { EPR_SBmTerm* term = (EPR_SBmTerm*) malloc(sizeof (EPR_SBmTerm)); term->op_code = op_code; return term; } EPR_SBmTerm* epr_create_bm_REF_term(char* band_name, char* flag_name) { EPR_SBmTerm* term = epr_create_bm_term(BMT_REF); term->op.ref.band_name = band_name; term->op.ref.flag_name = flag_name; term->op.ref.flag_mask = FLAG_MASK_NOT_COMPUTED; /* not computed */ term->op.ref.flag_raster = NULL; return term; } EPR_SBmTerm* epr_create_bm_NOT_term(EPR_SBmTerm* arg) { EPR_SBmTerm* term = epr_create_bm_term(BMT_NOT); term->op.unary.arg = arg; return term; } EPR_SBmTerm* epr_create_bm_OR_term(EPR_SBmTerm* arg1, EPR_SBmTerm* arg2) { EPR_SBmTerm* term = epr_create_bm_term(BMT_OR); term->op.binary.arg1 = arg1; term->op.binary.arg2 = arg2; return term; } EPR_SBmTerm* epr_create_bm_AND_term(EPR_SBmTerm* arg1, EPR_SBmTerm* arg2) { EPR_SBmTerm* term = epr_create_bm_term(BMT_AND); term->op.binary.arg1 = arg1; term->op.binary.arg2 = arg2; return term; } uint epr_get_pixel_as_uint(const EPR_SRaster* raster, int x, int y) { epr_clear_err(); switch (raster->data_type) { case (e_tid_uchar) : return (uint) ((uchar*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_char) : return (uint) ((char*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_ushort): return (uint) ((ushort*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_short) : return (uint) ((short*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_uint): return (uint) ((uint*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_int) : return (uint) ((int*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_float) : return (uint) ((float*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_double) : return (uint) ((double*)raster->buffer)[y * raster->raster_width + x]; default: return 0; } } int epr_get_pixel_as_int(const EPR_SRaster* raster, int x, int y) { epr_clear_err(); switch (raster->data_type) { case (e_tid_uchar) : return (int) ((uchar*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_char) : return (int) ((char*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_ushort): return (int) ((ushort*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_short) : return (int) ((short*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_uint): return (int) ((uint*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_int) : return (int) ((int*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_float) : return (int) ((float*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_double) : return (int) ((double*)raster->buffer)[y * raster->raster_width + x]; default: return 0; } } float epr_get_pixel_as_float(const EPR_SRaster* raster, int x, int y) { epr_clear_err(); switch (raster->data_type) { case (e_tid_uchar) : return (float) ((uchar*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_char) : return (float) ((char*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_ushort): return (float) ((ushort*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_short) : return (float) ((short*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_uint): return (float) ((uint*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_int) : return (float) ((int*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_float) : return (float) ((float*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_double) : return (float) ((double*)raster->buffer)[y * raster->raster_width + x]; default: return 0; } } double epr_get_pixel_as_double(const EPR_SRaster* raster, int x, int y) { epr_clear_err(); switch (raster->data_type) { case (e_tid_uchar) : return (double) ((uchar*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_char) : return (double) ((char*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_ushort): return (double) ((ushort*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_short) : return (double) ((short*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_uint): return (double) ((uint*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_int) : return (double) ((int*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_float) : return (double) ((float*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_double) : return (double) ((double*)raster->buffer)[y * raster->raster_width + x]; default: return 0; } } /** * Releases a new bitmask term instance. */ void epr_free_bm_term(EPR_SBmTerm* term) { if (term == NULL) return; switch (term->op_code) { case BMT_REF: epr_free_string(term->op.ref.band_name); epr_free_string(term->op.ref.flag_name); term->op.ref.band_name = NULL; term->op.ref.flag_name = NULL; break; case BMT_AND: /* OR */ case BMT_OR: epr_free_bm_term(term->op.binary.arg1); epr_free_bm_term(term->op.binary.arg2); term->op.binary.arg1 = NULL; term->op.binary.arg2 = NULL; break; case BMT_NOT: epr_free_bm_term(term->op.unary.arg); term->op.unary.arg = NULL; break; default: assert(0); } free(term); } /** * Creates a new bitmask expression from the given bitmask term. *

The expression returned is a valid in the sense that the epr_parse_bm_expr() * applied to the returned string would return an equivalent term. * * @param term the term to be converted */ char* epr_create_bm_expr(EPR_SBmTerm* term) { if (term == NULL) return NULL; switch (term->op_code) { case BMT_REF: { char* s0 = epr_create_string(strlen(term->op.ref.band_name) + strlen(term->op.ref.flag_name) + 16); sprintf(s0, "%s.%s", term->op.ref.band_name, term->op.ref.flag_name); return s0; } case BMT_AND: { char* s1 = epr_create_bm_expr(term->op.binary.arg1); char* s2 = epr_create_bm_expr(term->op.binary.arg2); char* s0 = epr_create_string(strlen(s1) + strlen(s2) + 16); sprintf(s0, "(%s) AND (%s)", s1, s2); epr_free_string(s1); epr_free_string(s2); return s0; } case BMT_OR: { char* s1 = epr_create_bm_expr(term->op.binary.arg1); char* s2 = epr_create_bm_expr(term->op.binary.arg2); char* s0 = epr_create_string(strlen(s1) + strlen(s2) + 16); sprintf(s0, "(%s) OR (%s)", s1, s2); epr_free_string(s1); epr_free_string(s2); return s0; } case BMT_NOT: { char* s1 = epr_create_bm_expr(term->op.unary.arg); char* s0 = epr_create_string(strlen(s1) + 16); sprintf(s0, "NOT (%s)", s1); epr_free_string(s1); return s0; } default: assert(FALSE); return NULL; } } /** * Prints the given term as an expression to the console. */ void epr_print_bm_term(EPR_SBmTerm* term) { epr_write_bm_term(term, stdout); } /** * Writes the given term as an expression to the given output stream. */ void epr_write_bm_term(EPR_SBmTerm* term, FILE* ostream) { char* bm_expr = epr_create_bm_expr(term); fprintf(ostream, "%s", bm_expr); epr_free_string(bm_expr); } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dsd.h000644 015705 000000 00000005542 13505462014 026560 0ustar00sandwellwheel000000 000000 /* * $Id: epr_dsd.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_DSD_H_INCL #define EPR_DSD_H_INCL #ifdef __cplusplus extern "C" { #endif #include "epr_ptrarray.h" #include /* just to get the ANSI-C type FILE */ /** * Opens dsd for a dataset description, * obtained from an ENVISAT product file. * * @param dsd_index the number of dsd (zero-based), emrty dsd inclusive * * @return the the pointer at the dsd information. */ EPR_SDSD* epr_create_dsd(int dsd_index); /** * Release the memory allocated through a dataset description, * obtained from an ENVISAT product file. * * @param dsd the file identifier, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise * @see epr_free_dsd_id */ void epr_free_dsd(EPR_SDSD* dsd); /** * Reads a dataset description from an ENVISAT product file. * * @param envisat_source_file the handle of the given ENVISAT product file, * must not be NULL * @param pos number of the dataset description in ENVISAT product file, * @return a new dataset description or NULL if an error occured. */ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos); /** * Reads all dataset descriptions from an ENVISAT product file. * * @param product_id the file identifier, if NULL the function * immediately returns NULL. * @return an array of dataset descriptions or NULL if an error occured. */ EPR_SPtrArray* epr_read_all_dsds(EPR_SProductId* product_id); /** * Finds the first dataset description from an ENVISAT product file. * * @param envisat_source_file the handle of the given ENVISAT product file, * must not be NULL * @param sph_length [bytes] the length of SPH part from the given ENVISAT product file, * must not be NULL * @return the offset to first founded dsd or 0 if not found. */ uint epr_find_first_dsd(FILE* envisat_source_file, uint sph_length); int epr_detect_meris_iodd_version(EPR_SProductId* product_id); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_DSD_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_param.h000644 015705 000000 00000003150 13505462014 027077 0ustar00sandwellwheel000000 000000 /* * $Id: epr_param.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_PARAM_H_INCL #define EPR_PARAM_H_INCL #ifdef __cplusplus extern "C" { #endif #include /* just to get the ANSI-C type FILE */ /** * The EPR_ParamElem structure contains meta information * how many time is a correspondent parameter represents. */ struct EPR_ParamElem { /** * This is parameter name. */ char* param_name; /** * The number of data elements represented of this parameter. */ uint param_value; }; EPR_SPtrArray* epr_create_param_table(void); EPR_SParamElem* epr_create_param_elem(const char* param_name, int param_value); int epr_set_dyn_dddb_params(EPR_SProductId* product_id); void epr_free_param_table(EPR_SPtrArray* param_table); void epr_free_param_elem(EPR_SParamElem* param_elem); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_PARAM_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_api.def000644 015705 000000 00000002174 13505462014 027064 0ustar00sandwellwheel000000 000000 ; $Revision: 1.1.1.1 $ $Date: 2003/07/08 10:41:38 $ ; Declares the WIN32 epr_api.dll parameters. LIBRARY epr_api.dll DESCRIPTION 'ENVISAT PRODUCT READER C-API' EXPORTS epr_init_api epr_close_api epr_open_product epr_close_product epr_get_scene_width epr_get_scene_height epr_get_num_datasets epr_get_dataset_id_at epr_get_dataset_id epr_get_dataset_name epr_get_mph epr_get_sph epr_get_dsd epr_get_num_dsds epr_get_dsd_at epr_get_num_records epr_create_record epr_read_record epr_free_record epr_get_field epr_get_num_fields epr_get_field_at epr_get_field_unit epr_get_field_description epr_get_field_num_elems epr_get_field_name epr_get_field_type epr_create_compatible_raster epr_create_bitmask_raster epr_create_raster epr_free_raster epr_read_bitmask_raster epr_read_band_raster epr_get_raster_width epr_get_raster_height epr_get_num_bands epr_get_band_id_at epr_get_band_id epr_get_band_name epr_get_pixel_as_float epr_log_message epr_get_last_err_code epr_get_last_err_message epr_print_record epr_print_field epr_print_element epr_dump_record epr_dump_field epr_dump_element GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dddb.h000644 015705 000000 00000004461 13505462014 026702 0ustar00sandwellwheel000000 000000 #ifndef EPR_DDDB_H_INCL #define EPR_DDDB_H_INCL #include "epr_api.h" #ifdef __cplusplus extern "C" { #endif struct RecordDescriptor { const char* id; const EPR_EDataTypeId type; const char* unit; const int elem_size; const char* num_elem; const char* description; }; struct DatasetDescriptor { const char* id; const char* ds_name; const struct RecordDescriptor* rec_descriptor; const char* description; }; struct BandDescriptor { const char* id; const char* rec_name; const EPR_ESampleModel sample_offset; const EPR_EDataTypeId type; const int spectral_index; const EPR_EScalingMethod scale_method; const char* scale_offset; const char* scale_factor; const char* bitmask_expr; const char* flag_coding_name; const char* unit; const char* description; }; struct FlagDescriptor { const char* id; const int num_indices; const int bit_indices[2]; const char* description; }; struct DatasetDescriptorTable { const char* name; const char* description; int num_descriptors; const struct DatasetDescriptor* descriptors; }; struct BandDescriptorTable { const char* name; const char* description; int num_descriptors; const struct BandDescriptor* descriptors; }; struct FlagDescriptorTable { const char* name; const char* description; int num_descriptors; const struct FlagDescriptor* descriptors; }; struct RecordDescriptorTable { const char* name; const char* description; int num_descriptors; const struct RecordDescriptor* descriptors; }; extern const struct DatasetDescriptorTable dddb_product_tables[46]; extern const struct BandDescriptorTable dddb_band_tables[37]; extern const struct FlagDescriptorTable dddb_flag_coding_tables[6]; extern const struct RecordDescriptorTable dddb_meris_rec_tables[23]; extern const struct RecordDescriptorTable dddb_aatsr_rec_tables[20]; extern const struct RecordDescriptorTable dddb_asar_rec_tables[20]; #define EPR_NUM_PRODUCT_TABLES 46 #define EPR_NUM_BAND_TABLES 37 #define EPR_NUM_FLAG_CODING_TABLES 6 #define EPR_NUM_MERIS_REC_TABLES 23 #define EPR_NUM_AATSR_REC_TABLES 20 #define EPR_NUM_ASAR_REC_TABLES 20 #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_DDDB_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_api.c000644 015705 000000 00000007664 13505462014 026561 0ustar00sandwellwheel000000 000000 /* * $Id: epr_api.c,v 1.1.1.1 2004-10-28 19:22:21 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_dddb.h" /*********************************** API ***********************************/ /** * Initializes the ENVISAT product reader API. */ int epr_init_api(EPR_ELogLevel log_level, EPR_FLogHandler log_handler, EPR_FErrHandler err_handler) { if (epr_api.init_flag) { return e_err_none; } epr_clear_err(); /* Determine endian order architecture */ if (epr_is_little_endian_order()) { epr_api.little_endian_order = TRUE; } else if (epr_is_big_endian_order()) { epr_api.little_endian_order = FALSE; } else { epr_set_err(e_err_unknown_endian_order, "epr_init_api: failed to determine endian order"); return epr_get_last_err_code(); } epr_api.log_level = log_level; epr_api.log_handler = log_handler; epr_api.err_handler = err_handler; epr_api.last_err_code = e_err_none; epr_api.last_err_message = NULL; epr_api.init_flag = TRUE; epr_log(e_log_info, EPR_PRODUCT_API_NAME_STR ", version " EPR_PRODUCT_API_VERSION_STR); epr_log(e_log_info, "API successfully initialized"); if (epr_api.little_endian_order) { epr_log(e_log_debug, "running on a little endian order architecture"); } else { epr_log(e_log_debug, "running on a big endian order architecture"); } return epr_get_last_err_code(); } /* Function: epr_close_api Access: public API Changelog: 2002/01/05 mp initial version */ /** * Closes the ENVISAT product reader API by releasing all * resources allocated by the API. */ void epr_close_api() { epr_clear_err(); if (epr_api.init_flag) { epr_log(e_log_info, "ENVISAT product reader API is being closed"); epr_api.last_err_code = e_err_none; epr_free_and_null_string(&epr_api.last_err_message); epr_api.init_flag = FALSE; } } /* Function: epr_set_log_handler Access: public API Changelog: 2002/01/05 nf initial version */ /** * Sets the log handler for the ENVISAT API. * * @param log_handler the new log handler (function pointer), * can be NULL, if logging shall be disabled * @return zero for success, an error code otherwise */ void epr_set_log_handler(EPR_FLogHandler log_handler) { epr_api.log_handler = log_handler; } void epr_log_message(EPR_ELogLevel log_level, const char* log_message) { struct tm* ptm; time_t millis; time(&millis); ptm = gmtime(&millis); fprintf(stdout, "%c %04d/%02d/%02d %02d:%02d:%02d - %s\n", log_level == e_log_debug ? 'D' : log_level == e_log_info ? 'I' : log_level == e_log_warning ? 'W' : log_level == e_log_error ? 'E' : '?', ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, log_message); } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_msph.h000644 015705 000000 00000002763 13505462014 026757 0ustar00sandwellwheel000000 000000 /* * $Id: epr_msph.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_MSPH_H_INCL #define EPR_MSPH_H_INCL #ifdef __cplusplus extern "C" { #endif #include /* just to get the ANSI-C type FILE */ /*void epr_read_mph(EPR_SProductId* product_id);*/ EPR_SRecord* epr_parse_header(const char* header_name, const char* ascii_source); void epr_set_header_field_values(EPR_SRecord* record, EPR_SPtrArray* header_values); uint epr_compare_param(EPR_SProductId* product_id); void epr_parse_double_token(EPR_SPtrArray* header_values, char* token_value, uint* value_number, uint* l, EPR_EDataTypeId* tp); void epr_parse_int_token(EPR_SPtrArray* header_values, char* token_value, uint* value_number, uint* l, EPR_EDataTypeId* tp); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* EPR_MSPH_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dump.c000644 015705 000000 00000016073 13505462014 026747 0ustar00sandwellwheel000000 000000 /* * $Id: epr_dump.c,v 1.2 2009-03-27 10:25:54 sabine Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" /****************************** RESULTS OUTPUT ******************************/ /** * Dumps the record content to stdout. * * @param record the pointer to the record to be printed out. */ void epr_dump_record(const EPR_SRecord* record) { epr_print_record(record, stdout); } /** * Dumps the record content to an output FILE stream. * * @param record the pointer to the record to be printed out. * @param ostream the identifier of the output file. */ void epr_print_record(const EPR_SRecord* record, FILE* ostream) { uint field_index; EPR_SField* field = NULL; epr_clear_err(); for (field_index = 0; field_index < record->num_fields; field_index++) { field = record->fields[field_index]; epr_print_field(field, ostream); } } /** * Dumps the field content to stdout. * * @param field the pointer to the field to be printed out */ void epr_dump_field(const EPR_SField* field) { epr_print_field(field, stdout); } /** * Gets the field content to output FILE stream. * * @param field the pointer to the field to be printed out * @param ostream the identifier of the output file. */ void epr_print_field(const EPR_SField* field, FILE* ostream) { uint i; epr_clear_err(); fprintf(ostream, "%s = ", field->info->name); if (field->info->data_type_id == e_tid_string) { fprintf(ostream, "\"%s\"", (const char*) field->elems); /* fprintf(ostream, "\""); for (i = 0; i < field->info->num_elems; i++) { fprintf(ostream, "%c", ((char*) field->elems)[i]); } fprintf(ostream, "\""); */ } else if (field->info->data_type_id == e_tid_time) { EPR_STime* time = (EPR_STime*) field->elems; fprintf(ostream, "{d=%d, j=%d, m=%d}", time->days, time->seconds, time->microseconds); } else { if (field->info->num_elems > 1) { fprintf(ostream, "{"); } for (i = 0; i < field->info->num_elems; i++) { if (i > 0) fprintf(ostream, ", "); switch (field->info->data_type_id) { case e_tid_uchar: fprintf(ostream, "%u", ((uchar*) field->elems)[i]); break; case e_tid_char: fprintf(ostream, "%d", ((char*) field->elems)[i]); break; case e_tid_ushort: fprintf(ostream, "%u", ((ushort*) field->elems)[i]); break; case e_tid_short: fprintf(ostream, "%d", ((short*) field->elems)[i]); break; case e_tid_uint: fprintf(ostream, "%u", ((uint*) field->elems)[i]); break; case e_tid_int: fprintf(ostream, "%d", ((int*) field->elems)[i]); break; case e_tid_float: fprintf(ostream, "%f", ((float*) field->elems)[i]); break; case e_tid_double: fprintf(ostream, "%f", ((double*) field->elems)[i]); break; default: fprintf(ostream, "<>"); } } if (field->info->num_elems > 1) { fprintf(ostream, "}"); } } fprintf(ostream, "\n"); } /** * Dumps the element content to stdout. * * @param record the pointer to the element to be printed out. */ void epr_dump_element(const EPR_SRecord* record, uint field_index, uint element_index) { epr_print_element(record, field_index, element_index, stdout); } /** * Dumps the element content to an output FILE stream.. * * @param record the pointer to the element to be written out. */ void epr_print_element(const EPR_SRecord* record, uint field_index, uint element_index, FILE* ostream) { EPR_SField* field = NULL; epr_clear_err(); if (field_index >= record->num_fields) { epr_set_err(e_err_illegal_arg, "epr_print_element: element_index too large"); return; } field = record->fields[field_index]; if (element_index >= field->info->num_elems) { epr_set_err(e_err_illegal_arg, "epr_print_element: element_index too large"); return; } fprintf(ostream, "%s [%d][%d] = ", field->info->name, field_index, element_index); if (field->info->data_type_id == e_tid_string) { fprintf(ostream, "\""); fprintf(ostream, "%c", ((char*) field->elems)[element_index]); fprintf(ostream, "\""); } else if (field->info->data_type_id == e_tid_time) { EPR_STime* time = (EPR_STime*) field->elems; fprintf(ostream, "{d=%d, j=%d, m=%d}", time->days, time->seconds, time->microseconds); } else { fprintf(ostream, "{ "); switch (field->info->data_type_id) { case e_tid_uchar: fprintf(ostream, "%u", ((uchar*) field->elems)[element_index]); break; case e_tid_char: fprintf(ostream, "%d", ((char*) field->elems)[element_index]); break; case e_tid_ushort: fprintf(ostream, "%u", ((ushort*) field->elems)[element_index]); break; case e_tid_short: fprintf(ostream, "%d", ((short*) field->elems)[element_index]); break; case e_tid_uint: fprintf(ostream, "%u", ((uint*) field->elems)[element_index]); break; case e_tid_int: fprintf(ostream, "%d", ((int*) field->elems)[element_index]); break; case e_tid_float: fprintf(ostream, "%f", ((float*) field->elems)[element_index]); break; case e_tid_double: fprintf(ostream, "%f", ((double*) field->elems)[element_index]); break; default: fprintf(ostream, "<>"); } fprintf(ostream, " }"); } fprintf(ostream, " [%s]\n", field->info->unit); } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_band.c000644 015705 000000 00000204503 13505462014 026703 0ustar00sandwellwheel000000 000000 /* * $Id: epr_band.c,v 1.2 2009-03-27 10:25:54 sabine Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" /** * Obtains all bands infos from the dddb. */ EPR_SPtrArray* epr_create_band_ids(EPR_SProductId* product_id) { EPR_SBandId* band_id = NULL; EPR_SPtrArray* band_ids = NULL; char test_block[1024]; int bt_index; int i; const struct BandDescriptorTable* b_tables; int num_descr; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_create_band_ids: product_id must not be NULL"); return NULL; } /* @DDDB */ b_tables = dddb_band_tables; bt_index = -1; for (i = 0; i < EPR_NUM_BAND_TABLES; i++) { const char* id = b_tables[i].name; if (strncmp(product_id->id_string, id, 10) == 0) { if (product_id->meris_iodd_version == 5) { if (strcmp(id, "MER_RR__1P_IODD5") == 0 || strcmp(id, "MER_FR__1P_IODD5") == 0) { bt_index = i; } } else if (product_id->meris_iodd_version == 6) { if (strcmp(id, "MER_RR__2P_IODD6") == 0 || strcmp(id, "MER_FR__2P_IODD6") == 0) { bt_index = i; } } else { bt_index = i; } } if (bt_index != -1) { break; } } if (bt_index == -1) { epr_set_err(e_err_null_pointer, "epr_create_band_ids: unknown product type"); return NULL; } band_ids = epr_create_ptr_array(16); num_descr = b_tables[bt_index].num_descriptors; for (i = 0; i < num_descr; i++) { band_id = (EPR_SBandId*) calloc(1, sizeof (EPR_SBandId)); if (band_id == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_band_ids: out of memory"); return NULL; } band_id->magic = EPR_MAGIC_BAND_ID; band_id->product_id = product_id; /* 1: band_name */ epr_assign_string(&band_id->band_name, b_tables[bt_index].descriptors[i].id); /* 2: dataset_name */ band_id->dataset_ref = epr_get_ref_struct(product_id, b_tables[bt_index].descriptors[i].rec_name); if (band_id->dataset_ref.dataset_id == NULL) { epr_set_err(e_err_invalid_dataset_name, "epr_create_band_ids: invalid dataset name in DDDB"); epr_free_band_id(band_id); return NULL; } /* 3: sample_offset */ band_id->sample_model = b_tables[bt_index].descriptors[i].sample_offset; /* 4: band_datatype */ band_id->data_type = b_tables[bt_index].descriptors[i].type; /* 5: spectr_band_index*/ band_id->spectr_band_index = b_tables[bt_index].descriptors[i].spectral_index; /* 6: scaling_method*/ if (b_tables[bt_index].descriptors[i].scale_method == e_smid_non) { band_id->scaling_method = 0; band_id->scaling_offset = 0.0; band_id->scaling_factor = 1.0; } else { band_id->scaling_method = b_tables[bt_index].descriptors[i].scale_method; /* 7: scaling_offset*/ strcpy (test_block, b_tables[bt_index].descriptors[i].scale_offset); if (test_block == NULL) { band_id->scaling_offset = 0.0; } else { float scaling_offset = (float)atof(test_block); if (epr_numeral_suspicion(test_block) == 1) { band_id->scaling_offset = scaling_offset; } else { scaling_offset = epr_get_scaling_params(product_id, test_block); if (scaling_offset == -909.909) { /* @todo what an ugly return value. Eeeek!*/ epr_set_err(e_err_invalid_dataset_name, "epr_create_band_ids: invalid dataset name in dddb"); epr_free_band_id(band_id); return NULL; } band_id->scaling_offset = scaling_offset; } } /* 8: scaling_factor*/ strcpy (test_block, b_tables[bt_index].descriptors[i].scale_factor); if (test_block == NULL) { band_id->scaling_factor = 0.0; } else { float scaling_factor = (float)atof(test_block); if (epr_numeral_suspicion(test_block) == 1) { band_id->scaling_factor = scaling_factor; } else { scaling_factor = epr_get_scaling_params(product_id, test_block); if (scaling_factor == -909.909) { /* @todo what an ugly return value. Eeeek!*/ epr_set_err(e_err_invalid_dataset_name, "epr_create_band_ids: invalid dataset name in dddb"); epr_free_band_id(band_id); return NULL; } band_id->scaling_factor = scaling_factor; } } } /* 9: bit_expr*/ epr_assign_string(&band_id->bm_expr, b_tables[bt_index].descriptors[i].bitmask_expr); /* 10: flags_definition_file*/ if (b_tables[bt_index].descriptors[i].flag_coding_name != NULL) { band_id->flag_coding = epr_create_flag_coding(product_id, b_tables[bt_index].descriptors[i].flag_coding_name); if (band_id->flag_coding == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_band_ids: out of memory"); epr_free_band_id(band_id); return NULL; } } else { band_id->flag_coding = NULL; } /* 11: unit*/ epr_assign_string(&band_id->unit, b_tables[bt_index].descriptors[i].unit); /* 12: description*/ epr_assign_string(&band_id->description, b_tables[bt_index].descriptors[i].description); /* lines_flipped*/ if (strncmp(product_id->id_string, EPR_ENVISAT_PRODUCT_MERIS, 3) == 0 || strncmp(product_id->id_string, EPR_ENVISAT_PRODUCT_AATSR, 3) == 0) { band_id->lines_mirrored = TRUE; } else { if (strncmp(product_id->id_string, EPR_ENVISAT_PRODUCT_ASAR, 3) == 0 && strncmp(product_id->id_string, "ASA_IMG", 7) != 0 && strncmp(product_id->id_string, "ASA_APG", 7) != 0) { band_id->lines_mirrored = TRUE; } else { if (strncmp(product_id->id_string, EPR_ENVISAT_PRODUCT_SAR, 3) == 0 && strncmp(product_id->id_string, "SAR_IMG", 7) != 0 && strncmp(product_id->id_string, "SAR_APG", 7) != 0) { band_id->lines_mirrored = TRUE; } else { band_id->lines_mirrored = FALSE; } } } epr_add_ptr_array_elem(band_ids, band_id); } return band_ids; } uint epr_get_num_bands(EPR_SProductId* product_id) { epr_clear_err(); if (!epr_check_api_init_flag()) { return 0; } if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_num_bands: product_id must not be NULL"); return (uint) -1; } return product_id->band_ids->length; } EPR_SBandId* epr_get_band_id_at(EPR_SProductId* product_id, uint index) { EPR_SBandId* band_id = NULL; epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_band_id_at: product_id must not be NULL"); return NULL; } if (index >= product_id->band_ids->length) { epr_set_err(e_err_index_out_of_range, "epr_get_band_id_at: band index out of range"); return NULL; } band_id = (EPR_SBandId*)epr_get_ptr_array_elem_at(product_id->band_ids, index); return band_id; } EPR_SBandId* epr_get_band_id(EPR_SProductId* product_id, const char* band_name) { EPR_SBandId* band_id = NULL; int num_bands, i; epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_band_id: product_id must not be NULL"); return NULL; } if (band_name == NULL) { epr_set_err(e_err_null_pointer, "epr_get_band_id: dataset_name must not be NULL"); return NULL; } num_bands = epr_get_num_bands(product_id); for (i = 0; i < num_bands; i++) { band_id = epr_get_band_id_at(product_id, i); if (epr_equal_names(band_name, epr_get_band_name(band_id))) { return band_id; } } epr_set_err(e_err_invalid_band_name, "epr_get_band_id: band not found"); return NULL; } const char* epr_get_band_name(EPR_SBandId* band_id) { epr_clear_err(); if (band_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_band_name: band_id must not be NULL"); return NULL; } return band_id->band_name; } /** * Release the memory allocated through a band ID. * * @param band the dataset description identifier, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise */ void epr_free_band_id(EPR_SBandId* band_id) { if (band_id == NULL) return; band_id->dataset_ref.elem_index = -1; band_id->dataset_ref.field_index = -1; band_id->dataset_ref.dataset_id = NULL; epr_free_and_null_string(&band_id->band_name); epr_free_and_null_string(&band_id->bm_expr); epr_free_flag_coding(band_id->flag_coding); band_id->flag_coding = NULL; band_id->spectr_band_index = 0; band_id->scaling_offset = 0; band_id->scaling_factor = 0; band_id->data_type = e_tid_unknown; epr_free_and_null_string(&band_id->unit); epr_free_and_null_string(&band_id->description); band_id->lines_mirrored = FALSE; free(band_id); } /** * Gets the scaling params: factor or offset by the given dataset_id, field_index, elem_index * * @param product_id the the product file identifier * @param str the string with the name, separator ('.') and indexes. * @return the dataset_id, field_index and elem_index (-1 if no). * NULL if correspondent dataset name was not found. */ float epr_get_scaling_params(EPR_SProductId* product_id, const char* str) { EPR_SDatasetRef scal_fact; const EPR_SField* field = NULL; EPR_SRecord* record = NULL; float ziff; scal_fact = epr_get_ref_struct(product_id, str); if (scal_fact.dataset_id == NULL) { return (float)(-909.909); } /*'Scaling_Factor_GADS'*/ record = epr_create_record(scal_fact.dataset_id); record = epr_read_record(scal_fact.dataset_id, 0, record); field = epr_get_field_at(record, scal_fact.field_index - 1); ziff = epr_get_field_elem_as_float(field, (uint)(scal_fact.elem_index - 1)); epr_free_record(record); return ziff; } /** * Gets the scaling factor by the given dataset_id, field_index, elem_index * * @param product_id the the product file identifier * @param str the string with the name, separator ('.') and indexes. * @return the dataset_id, field_index and elem_index (-1 if no). * NULL if correspondent dataset name was not found. */ float epr_get_scaling_factor(EPR_SProductId* product_id, const char* str) { EPR_SDatasetRef scal_fact; const EPR_SField* field = NULL; EPR_SRecord* record = NULL; float ziff; scal_fact = epr_get_ref_struct(product_id, str); if (scal_fact.dataset_id == NULL) { return (float)(-909.909); } /*'Scaling_Factor_GADS'*/ record = epr_create_record(scal_fact.dataset_id); record = epr_read_record(scal_fact.dataset_id, 0, record); field = epr_get_field_at(record, scal_fact.field_index - 1); ziff = epr_get_field_elem_as_float(field, (uint)(scal_fact.elem_index - 1)); epr_free_record(record); return ziff; } /** * Gets the dataset_id, field_index and elem_index * * @param product_id the the product file identifier * @param str the string with the name, separator ('.') and indexes. * @return the dataset_id, field_index and elem_index (-1 if no). * NULL if correspondent dataset name was not found. */ EPR_SDatasetRef epr_get_ref_struct(EPR_SProductId* product_id, const char* str) { EPR_SDatasetRef ref_struct; int pos = 0; char* stopstring; char* token; ref_struct.dataset_id = NULL; ref_struct.field_index = -1; ref_struct.elem_index = -1; token = epr_str_tok(str, ".", &pos); ref_struct.dataset_id = epr_get_dataset_id(product_id, token); if (ref_struct.dataset_id == NULL) { epr_free_and_null_string(&token); return ref_struct; } epr_free_and_null_string(&token); token = epr_str_tok(str, ".", &pos); if (token == NULL) { ref_struct.field_index = -1; } else { ref_struct.field_index = strtol(token, &stopstring, 10); } epr_free_and_null_string(&token); token = epr_str_tok(str, ".", &pos); if (token == NULL) { ref_struct.elem_index = -1; } else { ref_struct.elem_index = strtol(token, &stopstring, 10); } epr_free_and_null_string(&token); return ref_struct; } /** * Converts the given string into a scaling method identifier. * * @param str the string to be converted. * @return the scaling method identifier represented by the given string. * If the string is equal of '*' the value * e_non_smid is returned. */ EPR_EScalingMethod epr_str_to_scaling_method(const char* str) { assert(str != NULL); if (epr_equal_names(str, "Linear_Scale")) return e_smid_lin; else if (epr_equal_names(str, "Log_Scale")) return e_smid_log; else return e_smid_non; } /** * Converts the given string into a sample offset identifier. * * @param str the string to be converted. * @return the sample offset identifier represented by the given string. * If the string is equal of '*' the value * e_none_samoff is returned. */ EPR_ESampleModel epr_str_to_sample_offset(const char* str) { assert(str != NULL); if (epr_equal_names(str, "1OF2")) return e_smod_1OF2; else if (epr_equal_names(str, "2OF2")) return e_smod_2OF2; else if (epr_equal_names(str, "3TOI")) return e_smod_3TOI; else if (epr_equal_names(str, "2TOF")) return e_smod_2TOF; else return e_smod_1OF1; } /** * Creates a raster to be used for reading bitmasks. The raster returned is always of type byte. * * @param source_width the width (across track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_height the height (along track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_step_x the subsampling step across track of the source when reading into the raster. See description of epr_create_compatible_raster. * @param source_step_y the subsampling step along track of the source when reading into the raster. See description of epr_create_compatible_raster. * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_bitmask_raster(uint source_width, uint source_height, uint source_step_x, uint source_step_y) { return epr_create_raster(e_tid_uchar, source_width, source_height, source_step_x, source_step_y); } /** * Creates a raster for the given datatype and dimension. * * @param data_type the data type identifier * @param source_width the source's width * @param source_height the source's height * @param source_step_x the sub-sampling in X * @param source_step_y the sub-sampling in Y * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_raster(EPR_EDataTypeId data_type, uint source_width, uint source_height, uint source_step_x, uint source_step_y) { EPR_SRaster* raster = NULL; uint num_elems; epr_clear_err(); if (data_type == e_tid_string || data_type == e_tid_spare || data_type == e_tid_time) { epr_set_err(e_err_illegal_data_type, "epr_create_raster: illegal data type"); return NULL; } raster = (EPR_SRaster*) calloc(1, sizeof (EPR_SRaster)); if (raster == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_raster: out of memory"); return NULL; } raster->magic = EPR_MAGIC_RASTER; raster->data_type = data_type; raster->elem_size = epr_get_data_type_size(data_type); raster->source_height = source_height; raster->source_width = source_width; raster->source_step_x = source_step_x; raster->source_step_y = source_step_y; raster->raster_width = (source_width - 1) / source_step_x + 1; raster->raster_height = (source_height - 1) / source_step_y + 1; num_elems = raster->raster_width * raster->raster_height; raster->buffer = calloc(raster->elem_size, num_elems); if (raster->buffer == NULL) { epr_free_raster(raster); epr_set_err(e_err_out_of_memory, "epr_create_raster: out of memory"); return NULL; } return raster; } /** * Creates a compatible raster for the given band. * * @param band_id the band identifier, must not be NULL * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_compatible_raster(EPR_SBandId* band_id, uint source_width, uint source_height, uint source_step_x, uint source_step_y) { epr_clear_err(); if (band_id == NULL) { epr_set_err(e_err_invalid_band, "epr_create_raster: band_id must not be NULL"); return NULL; } return epr_create_raster(band_id->data_type, source_width, source_height, source_step_x, source_step_y); } void epr_free_raster(EPR_SRaster* raster) { epr_clear_err(); if (raster == NULL) return; raster->data_type = e_tid_unknown; raster->elem_size = 0; raster->raster_height = 0; raster->raster_width = 0; raster->source_height = 0; raster->source_width = 0; raster->source_step_x = 0; raster->source_step_y = 0; if (raster->buffer != NULL) { free(raster->buffer); raster->buffer = NULL; } free(raster); } int epr_read_band_raster(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster/*, EPR_SRaster** bitmask_raster*/) { EPR_SProductId* product_id = NULL; EPR_SDatasetId* dataset_id = NULL; char* rec_type; epr_clear_err(); if (band_id == NULL) { epr_set_err(e_err_invalid_band, "epr_read_band_raster: band_id must not be NULL"); return epr_get_last_err_code(); } if (band_id->data_type != raster->data_type) { epr_set_err(e_err_illegal_data_type, "epr_read_band_raster: illegal raster data type"); return epr_get_last_err_code(); } if (raster->buffer == NULL) { epr_set_err(e_err_illegal_arg, "epr_read_band_raster: raster->buffer must not be NULL"); return epr_get_last_err_code(); } if ((offset_x<0) || (offset_y<0) || (raster->raster_width<0) || (raster->raster_height<0) || (raster->source_step_x<0) || (raster->source_step_y<0)) { epr_set_err(e_err_invalid_value, "epr_read_band_raster: all digit parameter must be positive"); return epr_get_last_err_code(); } /* removed because the source_step_x can truly be greater than raster_width. if ((raster->source_step_x>raster->raster_width) || (raster->source_step_y>raster->raster_height)) { epr_set_err(e_err_invalid_value, "epr_read_band_raster: too small raster sizes or large steps"); return epr_get_last_err_code(); } */ product_id = band_id->product_id; dataset_id = band_id->dataset_ref.dataset_id; rec_type = dataset_id->dsd->ds_type; if (strcmp(rec_type, "M") == 0) { if (epr_read_band_measurement_data(band_id, offset_x, offset_y, raster) != 0) { epr_set_err(e_err_file_read_error, "epr_read_band_raster: unsuccessfully reading band measurement data"); return epr_get_last_err_code(); } if (band_id->bm_expr != NULL) { EPR_SRaster* bm_raster; int rd_bm; bm_raster = epr_create_raster(e_tid_uchar, /*was char*/ raster->source_width, raster->source_height, raster->source_step_x, raster->source_step_y); rd_bm = epr_read_bitmask_raster(product_id, band_id->bm_expr, offset_x, offset_y, bm_raster); epr_zero_invalid_pixels(raster, bm_raster); epr_free_raster(bm_raster); } } else if (strcmp(rec_type, "A") == 0) { if (epr_read_band_annotation_data (band_id, offset_x, offset_y, raster) == 1) { epr_set_err(e_err_file_read_error, "epr_read_band_raster: unsuccessfully reading band annotation data"); return epr_get_last_err_code(); } } else { epr_set_err(e_err_invalid_value, "epr_read_band_raster: illegat DS-TYPE; 'A' or'M' will be accepted"); return epr_get_last_err_code(); } return e_err_none; } /** * Reads the measurement data and converts its into physical values. * * @param band_id the information about properties and quantities of ENVISAT data. * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster the instance to the buffer information was used * * @return zero for success, an error code otherwise */ int epr_read_band_measurement_data(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster) { EPR_SProductId* product_id = NULL; const EPR_SField* field = NULL; EPR_SFieldInfo* field_info = NULL; EPR_SDatasetId* dataset_id = NULL; EPR_SRecord* record = NULL; EPR_SRecord* sph_record = NULL; EPR_EDataTypeId band_datatype, datatype_id; EPR_ESampleModel band_smod; uint rec_size; uint rec_numb; int iY, raster_pos, delta_raster_pos; int offset_x_mirrored = 0; uint scan_line_length; EPR_FLineDecoder decode_func; uint scene_width; product_id = band_id->product_id; if (strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) == 0) { sph_record = product_id->sph_record; field = epr_get_field(sph_record, "LINE_LENGTH"); scan_line_length = epr_get_field_elem_as_uint(field, 0); } else if (strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) == 0) { scan_line_length = EPR_ATS_LINE_LENGTH; } else if (strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) == 0) { scan_line_length = epr_get_scene_width(product_id); } else if (strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) == 0) { scan_line_length = epr_get_scene_width(product_id); } else { epr_set_err(e_err_illegal_arg, "epr_read_band_measurement_data: scan line length unknown"); return epr_get_last_err_code(); } dataset_id = band_id->dataset_ref.dataset_id; /*the length of measurement record size*/ rec_size = dataset_id->dsd->dsr_size; /*the number of measurement records*/ rec_numb = dataset_id->dsd->num_dsr; /*data type in the band*/ band_datatype = band_id->data_type; /*data model in the band*/ band_smod = band_id->sample_model; record = epr_create_record(dataset_id); field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(record->info->field_infos, band_id->dataset_ref.field_index - 1); datatype_id = field_info->data_type_id; /* if the user raster (or part of) is outside bbox in source coordinates*/ if (offset_x + raster->raster_width > (int)scan_line_length) { epr_set_err(e_err_illegal_arg, "epr_read_band_measurement_data: raster x co-ordinates out of bounds"); epr_free_record(record); return epr_get_last_err_code(); } if (offset_y + raster->raster_height > (int)(rec_numb)) { epr_set_err(e_err_illegal_arg, "epr_read_band_measurement_data: raster y co-ordinates out of bounds"); epr_free_record(record); return epr_get_last_err_code(); } raster_pos = 0; delta_raster_pos = (int)floor((raster->source_width - 1) / raster->source_step_x) + 1; /*select the correspondent function to scaling and transform data type*/ decode_func = select_line_decode_function(band_datatype, band_smod, datatype_id); if (decode_func == NULL) { epr_set_err(e_err_illegal_data_type, "epr_read_band_measurement_data: internal error: unknown data type"); epr_free_record(record); return epr_get_last_err_code(); } scene_width = band_id->product_id->scene_width; if (band_id->lines_mirrored) { offset_x_mirrored = (scene_width - 1) - (offset_x + raster->source_width - 1); } else { offset_x_mirrored = offset_x; } for (iY = offset_y; (uint)iY < offset_y + raster->source_height; iY += raster->source_step_y ) { /*get the next record by the given name*/ record = epr_read_record(dataset_id, iY, record); if (record == NULL) { return epr_get_last_err_code(); } /*get the field at its number*/ field = epr_get_field_at(record, band_id->dataset_ref.field_index - 1); /*get the scaled "line" of physical values*/ decode_func(field->elems, band_id, offset_x_mirrored, raster->source_width, raster->source_step_x, raster->buffer, raster_pos); /*locate "data point" for the next "line"*/ raster_pos += delta_raster_pos; } if (band_id->lines_mirrored) { if (band_datatype == e_tid_float) { mirror_float_array((float*)raster->buffer, raster->raster_width, raster->raster_height); } else if (band_datatype == e_tid_uchar || band_datatype == e_tid_char) { mirror_uchar_array((uchar*)raster->buffer, raster->raster_width, raster->raster_height); } else if (band_datatype == e_tid_ushort || band_datatype == e_tid_short) { mirror_ushort_array((ushort*)raster->buffer, raster->raster_width, raster->raster_height); } else if (band_datatype == e_tid_uint || band_datatype == e_tid_int) { mirror_uint_array((uint*)raster->buffer, raster->raster_width, raster->raster_height); } else { epr_set_err(e_err_illegal_data_type, "epr_read_band_measurement_data: internal error: unknown data type"); epr_free_record(record); return epr_get_last_err_code(); } } epr_free_record(record); return 0; } /** * Reads the annotation data and converts its into physical values. * * @param band_id the information about properties and quantities of ENVISAT data. * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster the instance to the buffer information was used * * @return zero for success, an error code otherwise */ int epr_read_band_annotation_data(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster) { EPR_SProductId* product_id = NULL; const EPR_SField* field = NULL; const EPR_SField* field_beg = NULL; const EPR_SField* field_end = NULL; EPR_SFieldInfo* field_info = NULL; EPR_SDatasetId* dataset_id = NULL; EPR_SRecord* record = NULL; EPR_SRecord* record_beg = NULL; EPR_SRecord* record_end = NULL; EPR_SRecord* sph_record = NULL; EPR_EDataTypeId band_datatype = 0, datatype_id = 0; EPR_ESampleModel band_smod = 0; uint rec_size = 0; uint rec_numb = 0; uint lines_per_tie_pt, samples_per_tie_pt, scan_line_length; int iY, raster_pos, delta_raster_pos; EPR_FArrayTransformer transform_array_func = NULL; int y_beg, y_end, y_beg_old, y_end_old; int offset_x_mirrored = 0; uint num_elems = 0; float y_mod = 0; float scan_offset_x = 0; float scan_offset_y = 0; void* line_beg_buffer = NULL; void* line_end_buffer = NULL; product_id = band_id->product_id; dataset_id = band_id->dataset_ref.dataset_id; /*the length of annotation record size*/ rec_size = dataset_id->dsd->dsr_size; /*the number of annotation records*/ rec_numb = dataset_id->dsd->num_dsr; /*data type in the band*/ band_datatype = band_id->data_type; /*data model in the band*/ band_smod = band_id->sample_model; record = epr_create_record(dataset_id); field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(record->info->field_infos, band_id->dataset_ref.field_index - 1); datatype_id = field_info->data_type_id; /*find LINES_PER_TIE_PT & SAMPLES_PER_TIE_PT for different products*/ if (strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) == 0) { /*elements number in the band (e.g.71)*/ scan_offset_x = 0.0F; /*!! was 0.5F !!*/ scan_offset_y = 0.0F; /*!! was 0.5F !!*/ num_elems = field_info->num_elems; sph_record = product_id->sph_record; field = epr_get_field(sph_record, "LINES_PER_TIE_PT"); lines_per_tie_pt = epr_get_field_elem_as_uint(field, 0); field = epr_get_field(sph_record, "SAMPLES_PER_TIE_PT"); samples_per_tie_pt = epr_get_field_elem_as_uint(field, 0); field = epr_get_field(sph_record, "LINE_LENGTH"); scan_line_length = epr_get_field_elem_as_uint(field, 0); } else if (strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) == 0) { scan_offset_y = 0.0F; /*!! EPR-7: was 0.5F !!*/ scan_line_length = EPR_ATS_LINE_LENGTH; lines_per_tie_pt = EPR_AATSR_LINES_PER_TIE_PT; num_elems = field_info->num_elems; if (num_elems == EPR_ATS_NUM_PER_POINT_ACROSS_LOCAT) { scan_offset_x = -19.0F; samples_per_tie_pt = 25; } else if (num_elems == EPR_ATS_NUM_PER_POINT_ACROSS_SOLAR) { scan_offset_x = 6.0F; samples_per_tie_pt = 50; } else { epr_set_err(e_err_invalid_value, "epr_read_band_annotation_data: internal error: illegal value for samples_per_tie_pt"); epr_free_record(record); return epr_get_last_err_code(); } } else if ((strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) == 0) || (strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) == 0)) { EPR_SDatasetId* dataset_id = NULL; uint num_rec; scan_offset_x = 0.5F; /* @todo CHECK THIS FOR ASAR! */ scan_offset_y = 0.5F; scan_line_length = epr_get_scene_width(product_id); samples_per_tie_pt = scan_line_length / (EPR_ASAR_NUM_PER_POINT_ACROSS_LOCAT - 1); dataset_id = epr_get_dataset_id(product_id, "GEOLOCATION_GRID_ADS"); num_rec = epr_get_num_records(dataset_id); lines_per_tie_pt = epr_get_scene_height(product_id) / (num_rec - 1); num_elems = field_info->num_elems; } else { epr_set_err(e_err_illegal_arg, "epr_read_band_annotation_data: unhandled ENVISAT product type"); epr_free_record(record); return epr_get_last_err_code(); } /*memory allocate for the increasingly begin tie point line*/ line_beg_buffer = calloc(sizeof(float), num_elems); if (line_beg_buffer == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_band_annotation_data: out of memory"); epr_free_record(record); return epr_get_last_err_code(); } /*memory allocate for the increasingly end tie point line*/ line_end_buffer = calloc(sizeof(float), num_elems); if (line_end_buffer == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_band_annotation_data: out of memory"); epr_free_record(record); free(line_beg_buffer); return epr_get_last_err_code(); } /* if the user raster (or its part) is outside of orbit in source coordinates*/ if (offset_x + raster->raster_width > (int)scan_line_length) { epr_set_err(e_err_illegal_arg, "epr_read_band_data: raster x co-ordinates out of bounds"); epr_free_record(record); free(line_beg_buffer); free(line_end_buffer); return epr_get_last_err_code(); } if (offset_y + raster->raster_height > (int)(rec_numb * lines_per_tie_pt)) { epr_set_err(e_err_illegal_arg, "epr_read_band_data: raster y co-ordinates out of bounds"); epr_free_record(record); free(line_beg_buffer); free(line_end_buffer); return epr_get_last_err_code(); } raster_pos = 0; delta_raster_pos = (int)floor((raster->source_width - 1) / raster->source_step_x) + 1; /*select the correspondent function to scaling and transform data type*/ transform_array_func = select_transform_array_function(band_datatype, datatype_id); if (transform_array_func == NULL) { epr_set_err(e_err_illegal_data_type, "epr_read_band_annotation_data: internal error: illegal data type"); epr_free_record(record); free(line_beg_buffer); free(line_end_buffer); return epr_get_last_err_code(); } y_beg_old = 9999; y_end_old = 9999; if (band_id->lines_mirrored) { offset_x_mirrored = num_elems - (offset_x + raster->source_width - 1) - 1; } else { offset_x_mirrored = offset_x; } for (iY = offset_y; (uint)iY < offset_y + raster->source_height; iY += raster->source_step_y ) { /*find the increasing neighbour begin and end tie point lines*/ y_mod = ((float)iY - scan_offset_y) / lines_per_tie_pt; y_beg = (uint)floor(y_mod); if (y_beg < 0) { y_beg = 0; } if ((uint)y_beg > dataset_id->dsd->num_dsr - 2) { y_beg = dataset_id->dsd->num_dsr - 2; } y_mod -= y_beg; y_end = y_beg + 1; /*as long as between increasing neighbour tie point lines, not to change them*/ if (y_beg_old != y_beg) { record_beg = epr_read_record(dataset_id, y_beg, record_beg); y_beg_old = y_beg; } if (y_end_old != y_end) { record_end = epr_read_record(dataset_id, y_end, record_end); y_end_old = y_end; } /*get the values for the increasing neighbour tie point lines*/ field_beg = epr_get_field_at(record_beg, band_id->dataset_ref.field_index - 1); field_end = epr_get_field_at(record_end, band_id->dataset_ref.field_index - 1); /*transform and scale the values for the increasing neighbour tie point lines*/ transform_array_func(field_beg->elems, band_id, line_beg_buffer, num_elems); transform_array_func(field_end->elems, band_id, line_end_buffer, num_elems); /*get the "line" of interpolated physical values from tie point data*/ decode_tiepoint_band(line_beg_buffer, line_end_buffer, samples_per_tie_pt, num_elems, band_id, offset_x, scan_offset_x, y_mod, raster->source_width, raster->source_step_x, raster->buffer, raster_pos); /*locate "data point" for the next "line"*/ raster_pos += delta_raster_pos; } if (strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) == 0) { mirror_float_array((float*)raster->buffer, raster->raster_width, raster->raster_height); } else { if (strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) == 0) { mirror_float_array((float*)raster->buffer, raster->raster_width, raster->raster_height); } else { if (strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) == 0 && strncmp(product_id->id_string, "ASA_IMG", 7) != 0 && strncmp(product_id->id_string, "ASA_APG", 7) != 0) { mirror_float_array((float*)raster->buffer, raster->raster_width, raster->raster_height); } else { if (strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) == 0 && strncmp(product_id->id_string, "SAR_IMG", 7) != 0 && strncmp(product_id->id_string, "SAR_APG", 7) != 0) { mirror_float_array((float*)raster->buffer, raster->raster_width, raster->raster_height); } } } } epr_free_record(record_beg); epr_free_record(record_end); epr_free_record(record); free(line_beg_buffer); free(line_end_buffer); return 0; } uint epr_get_raster_elem_size(const EPR_SRaster* raster) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_elem_size: raster must not be NULL"); return 0; } return raster->elem_size; } void* epr_get_raster_elem_addr(const EPR_SRaster* raster, uint offset) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_elem_addr: raster must not be NULL"); return 0; } return ((uchar*) raster->buffer) + epr_get_raster_elem_size(raster) * offset; } void* epr_get_raster_pixel_addr(const EPR_SRaster* raster, uint x, uint y) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_pixel_addr: raster must not be NULL"); return 0; } return epr_get_raster_elem_addr(raster, y * raster->raster_width + x); } void* epr_get_raster_line_addr(const EPR_SRaster* raster, uint y) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_line_addr: raster must not be NULL"); return 0; } return epr_get_raster_elem_addr(raster, y * raster->raster_width); } uint epr_get_raster_width(EPR_SRaster* raster) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_width: raster must not be NULL"); return 0; } return raster->raster_width; } uint epr_get_raster_height(EPR_SRaster* raster) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_height: raster must not be NULL"); return 0; } return raster->raster_height; } /******************************************************************/ EPR_FLineDecoder select_line_decode_function(EPR_EDataTypeId band_tid, EPR_ESampleModel band_smod, EPR_EDataTypeId raw_tid) { EPR_FLineDecoder decode_func; if ((band_tid == e_tid_char || band_tid == e_tid_uchar) && band_smod == e_smod_1OF1 && (raw_tid == e_tid_char || raw_tid == e_tid_uchar)) decode_func = decode_line_uchar_1_of_1_to_uchar; else if ((band_tid == e_tid_char || band_tid == e_tid_uchar) && band_smod == e_smod_1OF2 && (raw_tid == e_tid_char || raw_tid == e_tid_uchar)) decode_func = decode_line_uchar_1_of_2_to_uchar; else if ((band_tid == e_tid_char || band_tid == e_tid_uchar) && band_smod == e_smod_2OF2 && (raw_tid == e_tid_char || raw_tid == e_tid_uchar)) decode_func = decode_line_uchar_2_of_2_to_uchar; else if ((band_tid == e_tid_short || band_tid == e_tid_ushort) && band_smod == e_smod_1OF1 && (raw_tid == e_tid_short || raw_tid == e_tid_ushort)) decode_func = decode_line_ushort_1_of_1_to_ushort; else if (band_tid == e_tid_float && band_smod == e_smod_1OF1 && raw_tid == e_tid_uchar) decode_func = decode_line_uchar_1_of_1_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_1OF1 && raw_tid == e_tid_char) decode_func = decode_line_char_1_of_1_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_1OF1 && raw_tid == e_tid_ushort) decode_func = decode_line_ushort_1_of_1_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_1OF1 && raw_tid == e_tid_short) decode_func = decode_line_short_1_of_1_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_1OF2 && raw_tid == e_tid_short) decode_func = decode_line_short_1_of_2_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_2OF2 && raw_tid == e_tid_short) decode_func = decode_line_short_2_of_2_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_1OF2 && raw_tid == e_tid_uchar) decode_func = decode_line_uchar_1_of_2_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_2OF2 && raw_tid == e_tid_uchar) decode_func = decode_line_uchar_2_of_2_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_2TOF && raw_tid == e_tid_uchar) decode_func = decode_line_uchar_2_to_f_to_float; else if (band_tid == e_tid_uint && band_smod == e_smod_3TOI && raw_tid == e_tid_uchar) decode_func = decode_line_uchar_3_to_i_to_uint; else { return NULL; } return decode_func; } EPR_FArrayTransformer select_transform_array_function(EPR_EDataTypeId band_tid, EPR_EDataTypeId raw_tid) { EPR_FArrayTransformer transform_array_func; if (band_tid == e_tid_float && raw_tid == e_tid_short) transform_array_func = transform_array_short_to_float; else if (band_tid == e_tid_float && raw_tid == e_tid_ushort) transform_array_func = transform_array_ushort_to_float; else if (band_tid == e_tid_float && raw_tid == e_tid_int) transform_array_func = transform_array_int_to_float; else if (band_tid == e_tid_float && raw_tid == e_tid_uint) transform_array_func = transform_array_uint_to_float; else { return NULL; } return transform_array_func; } void decode_line_uchar_1_of_1_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[x]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[x]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } } void decode_line_char_1_of_1_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; char* sa = (char*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[x]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[x]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } } void decode_line_ushort_1_of_1_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; ushort* sa = (ushort*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[x]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[x]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } } void decode_line_short_1_of_1_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; short* sa = (short*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[x]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[x]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } } void decode_line_short_1_of_2_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; short* sa = (short*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[2 * x]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[2 * x]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)(sa[2 * x]); } } } void decode_line_short_2_of_2_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; short* sa = (short*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[2 * x + 1]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[2 * x + 1]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)(sa[2 * x + 1]); } } } void decode_line_uchar_1_of_1_to_uchar(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; uchar* buf = (uchar*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } void decode_line_uchar_1_of_2_to_uchar(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; uchar* buf = (uchar*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[2 * x]; } } void decode_line_uchar_2_of_2_to_uchar(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; uchar* buf = (uchar*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[2 * x + 1]; } } void decode_line_ushort_1_of_1_to_ushort(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; ushort* sa = (ushort*) source_array; ushort* buf = (ushort*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } void decode_line_uchar_2_to_f_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2, shi; uchar* sa = (uchar*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { shi = (((sa[2 * x] & 0xff)) | ((sa[2 * x + 1] & 0xff) << 8)) & 0xffff; buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * shi); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { shi = (((sa[2 * x] & 0xff)) | ((sa[2 * x + 1] & 0xff) << 8)) & 0xffff; buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * shi; } } else { for (x = x1; x <= x2; x += step_x) { shi = (((sa[2 * x] & 0xff)) | ((sa[2 * x + 1] & 0xff) << 8)) & 0xffff; buf[raster_pos++] = (float)shi; } } } void decode_line_uchar_1_of_2_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * (sa[2 * x] & 0xff)); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * (sa[2 * x] & 0xff); } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)(sa[2 * x] & 0xff); } } } void decode_line_uchar_2_of_2_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * (sa[2 * x + 1] & 0xff)); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * (sa[2 * x + 1] & 0xff); } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)(sa[2 * x + 1] & 0xff); } } } void decode_line_uchar_3_to_i_to_uint(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2, n; uchar* sa = (uchar*) source_array; uint* buf = (uint*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; for (x = x1; x <= x2; x += step_x) { n = 3 * x; buf[raster_pos++] = (sa[n] & 0xff) << 16 | ((sa[n+1] & 0xff) << 8) | ((sa[n+2] & 0xff) ); } } /** * Computes the physical values for the annotation data. * * @param sa_beg the float array of tie points "before" Y-coordinate of the point to search * @param sa_end the float array of tie points "after" Y-coordinate of the point to search * @param samples_per_tie_pt the "distance" between two neighbour tie points (in scan-line direction) * @param num_elems number of elements in one tie point scan-line * @param band_id the information about properties and quantities of ENVISAT data. * @param offset_x [PIXEL] X-coordinate (0-based) of the upper right raster corner to search * @param y_mod [PIXEL] relative location of the point is being searched for (in flight direction) * @param raster_width [PIXEL] the width of the raster is being searched for * @param s_x [PIXEL] X-step to get the next point (in source coordinates) to search * @param raster_buffer the float user array to be filled with physical values * @param raster_pos the actual "filled" position in raster_buffer-array * */ void decode_tiepoint_band(float* sa_beg, float* sa_end, uint samples_per_tie_pt, uint num_elems, EPR_SBandId* band_id, int offset_x, float scan_offset_x, float y_mod, int raster_width, int s_x, float* raster_buffer, int raster_pos) { int ix; float x_mod; uint x_knot; int inti_flag = 0; int intersection = 0; float circle; float half_circle; float null_point; circle = EPR_LONGI_ABS_MAX - EPR_LONGI_ABS_MIN; half_circle = 0.5F * circle; null_point = 0.5F * (EPR_LONGI_ABS_MAX + EPR_LONGI_ABS_MIN); if (strncmp(band_id->band_name, EPR_LONGI_BAND_NAME, strlen(EPR_LONGI_BAND_NAME)) == 0) { inti_flag = 1; } else { inti_flag = 0; } for (ix = offset_x; ix < offset_x + raster_width; ix += s_x) { x_mod = (ix - scan_offset_x) / samples_per_tie_pt; if (x_mod >= 0.0F) { x_knot = (uint)floor(x_mod); if (x_knot >= num_elems - 1) { x_knot = num_elems - 2; } } else { x_knot = (uint)0; } x_mod -= x_knot; if (inti_flag == 1) { if (fabs((float)(sa_beg[x_knot + 1] - sa_beg[x_knot])) > half_circle || fabs((float)(sa_beg[x_knot] - sa_end[x_knot])) > half_circle || fabs((float)(sa_end[x_knot] - sa_end[x_knot + 1])) > half_circle || fabs((float)(sa_end[x_knot + 1] - sa_beg[x_knot + 1])) > half_circle) { intersection = 1; if (sa_beg[x_knot] < (float)null_point) { sa_beg[x_knot] += circle; } if (sa_beg[x_knot + 1] < (float)null_point) { sa_beg[x_knot + 1] += circle; } if (sa_end[x_knot] < (float)null_point) { sa_end[x_knot] += circle; } if (sa_end[x_knot + 1] < (float)null_point) { sa_end[x_knot + 1] += circle; } } } else { intersection = 0; } raster_buffer[raster_pos] = epr_interpolate2D(x_mod, y_mod, sa_beg[x_knot], sa_beg[x_knot + 1], sa_end[x_knot], sa_end[x_knot + 1]); if (inti_flag == 1 && intersection == 1 && raster_buffer[raster_pos] > EPR_LONGI_ABS_MAX) { raster_buffer[raster_pos] -= circle; } raster_pos++; } } float epr_interpolate2D(float wi, float wj, float x00, float x10, float x01, float x11) { return x00 + wi * (x10 - x00) + wj * (x01 - x00) + wi * wj * (x11 + x00 - x01 - x10); } void transform_array_short_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel) { uint ix; short* sa = (short*) sourceArray; for (ix = 0; ix < nel; ix ++) { raster_buffer[ix] = band_id->scaling_offset + band_id->scaling_factor * sa[ix]; } } void transform_array_ushort_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel) { uint ix; ushort* sa = (ushort*) sourceArray; for (ix = 0; ix < nel; ix ++) { raster_buffer[ix] = band_id->scaling_offset + band_id->scaling_factor * sa[ix]; } } void transform_array_int_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel) { uint ix; int* sa = (int*) sourceArray; for (ix = 0; ix < nel; ix ++) { raster_buffer[ix] = band_id->scaling_offset + band_id->scaling_factor * sa[ix]; } } void transform_array_uint_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel) { uint ix; uint* sa = (uint*) sourceArray; for (ix = 0; ix < nel; ix ++) { raster_buffer[ix] = band_id->scaling_offset + band_id->scaling_factor * sa[ix]; } } void mirror_float_array(float* raster_buffer, uint raster_width, uint raster_height) { uint w, h, pol_w, offset; float tmp; pol_w = raster_width / 2; for (h = 0; h < raster_height; h ++) { for (w = 0; w < pol_w; w ++) { offset = h * raster_width; tmp = raster_buffer[w + offset]; raster_buffer[w + offset] = raster_buffer[raster_width - 1 - w + offset]; raster_buffer[raster_width - 1 - w + offset] = tmp; } } } void mirror_uchar_array(uchar* raster_buffer, uint raster_width, uint raster_height) { uint w, h, pol_w, offset; uchar tmp; pol_w = raster_width / 2; for (h = 0; h < raster_height; h ++) { for (w = 0; w < pol_w; w ++) { offset = h * raster_width; tmp = raster_buffer[w + offset]; raster_buffer[w + offset] = raster_buffer[raster_width - 1 - w + offset]; raster_buffer[raster_width - 1 - w + offset] = tmp; } } } void mirror_ushort_array(ushort* raster_buffer, uint raster_width, uint raster_height) { uint w, h, pol_w, offset; ushort tmp; pol_w = raster_width / 2; for (h = 0; h < raster_height; h ++) { for (w = 0; w < pol_w; w ++) { offset = h * raster_width; tmp = raster_buffer[w + offset]; raster_buffer[w + offset] = raster_buffer[raster_width - 1 - w + offset]; raster_buffer[raster_width - 1 - w + offset] = tmp; } } } void mirror_uint_array(uint* raster_buffer, uint raster_width, uint raster_height) { uint w, h, pol_w, offset; uint tmp; pol_w = raster_width / 2; for (h = 0; h < raster_height; h ++) { for (w = 0; w < pol_w; w ++) { offset = h * raster_width; tmp = raster_buffer[w + offset]; raster_buffer[w + offset] = raster_buffer[raster_width - 1 - w + offset]; raster_buffer[raster_width - 1 - w + offset] = tmp; } } } void epr_zero_invalid_pixels(EPR_SRaster* raster, EPR_SRaster* bm_raster) { uchar* bm_pixels; uint bm_pos = 0; uint bm_len = raster->raster_width * raster->raster_height; assert(bm_raster->data_type == e_tid_char || bm_raster->data_type == e_tid_uchar); bm_pixels = (uchar*) bm_raster->buffer; switch (raster->data_type) { case e_tid_char: case e_tid_uchar: { char* pixels = (char*) raster->buffer; for (bm_pos = 0; bm_pos < bm_len; bm_pos++) { if (bm_pixels[bm_pos] == 0) { pixels[bm_pos] = 0; } } } break; case e_tid_short: case e_tid_ushort: { short* pixels = (short*) raster->buffer; for (bm_pos = 0; bm_pos < bm_len; bm_pos++) { if (bm_pixels[bm_pos] == 0) { pixels[bm_pos] = 0; } } } break; case e_tid_int: case e_tid_uint: { int* pixels = (int*) raster->buffer; for (bm_pos = 0; bm_pos < bm_len; bm_pos++) { if (bm_pixels[bm_pos] == 0) { pixels[bm_pos] = 0; } } } break; case e_tid_float: { float* pixels = (float*) raster->buffer; for (bm_pos = 0; bm_pos < bm_len; bm_pos++) { if (bm_pixels[bm_pos] == 0) { pixels[bm_pos] = 0.0F; } } } break; case e_tid_double: { double* pixels = (double*) raster->buffer; for (bm_pos = 0; bm_pos < bm_len; bm_pos++) { if (bm_pixels[bm_pos] == 0) { pixels[bm_pos] = 0.0; } } } break; default: {} break; } } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_core.c000644 015705 000000 00000033114 13505462014 026725 0ustar00sandwellwheel000000 000000 /* * $Id: epr_core.c,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" /** * The one and only ENVISAT API instance. */ EPR_SAPI epr_api; /* Function: epr_str_to_data_type_id Access: private API implementation helper Changelog: 2002/01/05 nf initial version */ /** * Converts the given string into a data type identifier. * * @param str the string to be converted. * @return the data type identifier represented by the given string. * If the string can not be converted the special value * e_tid_unknown is returned. */ EPR_EDataTypeId epr_str_to_data_type_id(const char* str) { assert(str != NULL); if (epr_equal_names(str, "UChar") || epr_equal_names(str, "uchar")) return e_tid_uchar; else if (epr_equal_names(str, "AChar") || epr_equal_names(str, "SChar") || epr_equal_names(str, "char")) return e_tid_char; else if (epr_equal_names(str, "UShort") || epr_equal_names(str, "ushort")) return e_tid_ushort; else if (epr_equal_names(str, "SShort") || epr_equal_names(str, "short")) return e_tid_short; else if (epr_equal_names(str, "UInt") || epr_equal_names(str, "uint")) return e_tid_uint; else if (epr_equal_names(str, "SInt") || epr_equal_names(str, "int")) return e_tid_int; else if (epr_equal_names(str, "ULong") || epr_equal_names(str, "ulong")) return e_tid_uint; else if (epr_equal_names(str, "SLong") || epr_equal_names(str, "long")) return e_tid_int; else if (epr_equal_names(str, "Float") || epr_equal_names(str, "float")) return e_tid_float; else if (epr_equal_names(str, "Double") || epr_equal_names(str, "double")) return e_tid_double; else if (epr_equal_names(str, "@/types/UTC.dd") || epr_equal_names(str, "time")) return e_tid_time; else if (epr_equal_names(str, "String") || epr_equal_names(str, "string")) return e_tid_string; else if (epr_equal_names(str, "Spare") || epr_equal_names(str, "spare")) return e_tid_spare; else return e_tid_unknown; } /* Function: epr_data_type_id_to_str Access: public API implementation helper Changelog: 2003/07/10 nf initial version */ /** * Converts the given data type identifier to a string representing the C-type of the data type. * * @param data_type_id the data type identifier. * If the identifier can not be converted, an empty string * "" is returned. * @return the C-type string */ const char* epr_data_type_id_to_str(EPR_EDataTypeId data_type_id) { switch (data_type_id) { case e_tid_uchar: return "uchar"; case e_tid_char: return "char"; case e_tid_ushort: return "ushort"; case e_tid_short: return "short"; case e_tid_uint: return "uint"; case e_tid_int: return "int"; case e_tid_float: return "float"; case e_tid_double: return "double"; case e_tid_string: return "string"; case e_tid_spare: return "spare"; case e_tid_time: return "time"; default: return ""; } } /* Function: epr_get_data_type_size Access: private API implementation helper Changelog: 2002/01/24 nf initial version */ /** * Determines the length of the given data type identifier. * * @param data_type_id the data type identifier. * @return the the length of the data type identifier. * If the data type identifier is unknown, * e_tid_unknown is returned. */ uint epr_get_data_type_size(EPR_EDataTypeId data_type_id) { switch (data_type_id) { case e_tid_uchar: return sizeof(uchar); case e_tid_char: return sizeof(char); case e_tid_ushort: return sizeof(ushort); case e_tid_short: return sizeof(short); case e_tid_uint: return sizeof(uint); case e_tid_int: return sizeof(int); case e_tid_float: return sizeof(float); case e_tid_double: return sizeof(double); case e_tid_string: return sizeof(char); case e_tid_spare: return sizeof(uchar); case e_tid_time: return sizeof (int) /* days */ + sizeof (uint) /* seconds */ + sizeof (uint); /* microseconds */ default: return 0; } } /* * ===================== Logging ============================== */ /* Function: epr_log Access: private API implementation helper Changelog: 2002/01/05 mp initial version */ /** * Logs a message with the given log level. * *

The function calls this API's log handler if * it is not NULL and if the given log * level is greater than or equal to the global log level. * * @param log_level the log level (or message type) for the mesage * @param log_message the mesage */ void epr_log(EPR_ELogLevel log_level, const char* log_message) { if (epr_api.log_handler != NULL && log_level >= epr_api.log_level) epr_api.log_handler(log_level, log_message); } /* * ===================== Error Handling ============================== */ /* Function: epr_set_error Access: private API implementation helper Changelog: 2002/01/05 mp initial version */ /** * Sets the given error code and the associated error message and * calls this API's error handler if it is not NULL. * * @param err_code the error code * @param err_message the error mesage */ void epr_set_err(EPR_EErrCode err_code, const char* err_message) { epr_api.last_err_code = err_code; epr_assign_string(&epr_api.last_err_message, err_message); if (epr_api.log_handler != NULL) { epr_api.log_handler(e_log_error, err_message); } if (epr_api.err_handler != NULL) { epr_api.err_handler(err_code, err_message); } } /* Function: epr_set_error Access: private API implementation helper Changelog: 2002/01/05 mp initial version */ /** * Clears the last error. After calling this function, calling * epr_get_last_err_code returns e_err_none or zero and * epr_get_last_err_message returns NULL. */ void epr_clear_err() { epr_api.last_err_code = e_err_none; epr_free_string(epr_api.last_err_message); epr_api.last_err_message = NULL; } /* Function: epr_get_last_err_code Access: private API implementation helper Changelog: 2002/01/05 nf initial version */ /** * Sets the error code of the error that occured during * the last API function call. * * @return the error code, e_err_none or zero if no error occured */ EPR_EErrCode epr_get_last_err_code() { return epr_api.last_err_code; } /* Function: epr_get_last_err_message Access: private API implementation helper Changelog: 2002/01/05 nf initial version */ /** * Sets the error message of the error that occured during * the last API function call. * * @return the error message, NULL if no error occured */ const char* epr_get_last_err_message() { return epr_api.last_err_message; } /** * Opens a file to read. * * @param file_path the path to the file. * * @return the file handle or * NULL if an error occured. */ FILE* epr_open_file(char* file_path) { FILE* db_file; epr_log(e_log_debug, "about to open file: "); epr_log(e_log_debug, file_path); db_file = fopen(epr_trim_string(file_path), "rb"); if (db_file == NULL) { epr_log(e_log_debug, "open failed"); if (errno == ENOENT) { epr_set_err(e_err_file_not_found, "epr_open_file: file not found"); } else { epr_set_err(e_err_file_access_denied, "epr_open_file: file open failed"); } } /*epr_log(e_log_debug, "open successful");*/ return db_file; } /** * Converts the given string into an int number. * * @param str the string to be converted. * @return the int type number represented by the given string. * If the string can not be converted, * the value of 1 is returned. */ int epr_str_to_number(const char* str) { char *stopstring; int l; assert(str != NULL); if (strcmp(str, "*") == 0) return 1; if (strcmp(str, "") == 0) return 1; errno = 0; l = strtol( str, &stopstring, 10 ); if (errno == EDOM) { epr_set_err(e_err_illegal_conversion, "failed to convert string to integer: errno = EDOM"); return -1; } if (errno == ERANGE) { epr_set_err(e_err_illegal_conversion, "failed to convert string to integer: errno = ERANGE"); return -1; } return l; } /** * Converts the given string into a field length. * * The string can represent a single integer value or a sequence * of integer value and parameter references (names). Integers * and value are expected to be separated by the asterisk * character ('*'). E.g. the string "3 * 4 * num_pixels_across" * is represents a valid field length as long as the parameter * name 'num_pixels_across' is found in the given parameter table. * * @param count the string to be converted * @param product_id the Product identifier containing the values * for the Product * @return the field length computed from the given string or * (uint)-1 if an error occured. */ uint epr_parse_value_count(EPR_SProductId* product_id, const char* count) { char seps[] = EPR_COUNT_SEPARATOR_ARRAY; char * token; char * str; uint c; int pos = 0; uint comes_from_convert; c = 1; str = epr_clone_string(count); if (str == NULL) { epr_set_err(e_err_out_of_memory, "epr_parse_value_count: cannot allocate memory"); return 16111;/*8999*/ /* @todo check: why in the hell 16111 ? */ } while ((token = epr_str_tok(str, seps, &pos)) != NULL) { comes_from_convert = epr_str_to_number(token); if (comes_from_convert == 0 && (strcmp(token, "0") != 0)) { /* check if "token" belongs to param_table*/ comes_from_convert = epr_param_to_value(token, product_id->param_table); if (comes_from_convert == -1) { epr_set_err(e_err_illegal_conversion, "epr_parse_value_count: parameter not found"); return 16111; /* @todo check: why in the hell 16111 ? */ } } c *= comes_from_convert; epr_free_string(token); token = NULL; } epr_free_string(str); return c; } /** * Finds in the param_table the value corresponding to its name. * * @param str the parameter name * @param param_table the pointer to param_table * * @return the value of the given name or * (uint)-1 if an error occured. */ uint epr_param_to_value(const char* str, EPR_SPtrArray* param_table) { EPR_SParamElem* param_elem = NULL; int elem_index; int param_table_length; param_table_length = (int)epr_get_ptr_array_length(param_table); for (elem_index = 0; elem_index < param_table_length; elem_index++) { param_elem = (EPR_SParamElem*)epr_get_ptr_array_elem_at(param_table, elem_index); if (epr_equal_names(param_elem->param_name, str)) { return param_elem->param_value; } } return (uint) -1; /*error*/ } /** * Adapts path description to operating system. * * @param path the path to a file. * */ void epr_make_os_compatible_path(char* path) { if (path != NULL) { char* pc = path; while (*pc != '\0') { #ifdef WIN32 if (*pc == '/') *pc = '\\'; #elif _M_MPPC if (*pc == '/') *pc = ':'; /* UK note: the colon is an old-style path separator of the Mac OS */ /* possibly not used any more but supported for Classic compatibility */ /* @to do: check whether the forward slash / should be used in Mac OS X */ #else if (*pc == '\\') *pc = '/'; #endif pc++; } } } epr_boolean epr_check_api_init_flag() { if (!epr_api.init_flag) { epr_set_err(e_err_api_not_initialized, "epr_open_product: API not initialized (forgot to call epr_init_api?)"); return FALSE; } return TRUE; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/Makefile000755 015705 000000 00000001455 13505462014 026431 0ustar00sandwellwheel000000 000000 ### makefile for bert to create a lib of object code #%// BK 13-Jun-2003 #%// MA 24-Dec-2008 -m32 switch for 64-bit machines #%// MA 05-Jan-2010 64-bit native with new epr_api_2.2 include ../../../../../config.mk SRC = epr_api.c \ epr_band.c \ epr_bitmask.c \ epr_core.c \ epr_dataset.c \ epr_dddb.c \ epr_dsd.c \ epr_dump.c \ epr_field.c \ epr_msph.c \ epr_param.c \ epr_product.c \ epr_ptrarray.c \ epr_record.c \ epr_string.c \ epr_swap.c \ epr_typconv.c OBJ = $(SRC:.c=.o) #CC = gcc #CFLAGS = -O3 #CFLAGS = -m32 # for 64-bit systems, if epr_api version < 2.2 CFLAGS = -w #CFLAGS = -fPIC -ansi -c .c.o: $(CC) $(CFLAGS) -c -o $(@) $< default: $(OBJ) echo "objects created done" # ar ... clean: rm -f *.o @echo "removed all object files" GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_field.c000644 015705 000000 00000022042 13505462014 027056 0ustar00sandwellwheel000000 000000 /* * $Id: epr_field.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" /** * Creates the field information of the given record and returns the poiter at it. * * @param data_type_id the data type identifier * @param description the field description * @param field_name the field name * @param num_elems the number of field elements * @param num_bytes the number of bytes in each element * @param more_count the number of the element repetition * @param unit the unit descrimtion (name) * * @return the the pointer at the field information, or NULL if the file * it is not enough memory for some field_info element. */ EPR_SFieldInfo* epr_create_field_info(EPR_EDataTypeId data_type_id, char* description, char* field_name, uint num_elems, uint num_bytes, uint more_count, char* unit) { EPR_SFieldInfo* field_info = NULL; uint data_type_size; field_info = (EPR_SFieldInfo*) calloc(1, sizeof (EPR_SFieldInfo)); if (field_info == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_field_info: out of memory"); return NULL; } epr_assign_string(&field_info->name, field_name); if (field_info->name == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_field_info: out of memory"); return NULL; } if (description == NULL) { field_info->description = NULL; } else epr_assign_string(&field_info->description, description); if (unit == NULL) { field_info->unit = NULL; } else epr_assign_string(&field_info->unit, unit); data_type_size = epr_get_data_type_size(data_type_id); field_info->num_elems = num_elems; /* IMPORTANT !!!!it's one or the other !!!!*/ field_info->tot_size = num_elems * num_bytes * more_count; /*for the case data_type_size=num_bytes*/ /*this is not true for the case "spare" (1!=60)*/ /* field_info->tot_size = num_elems * data_type_size * more_count;*/ field_info->data_type_id = data_type_id; return field_info; } /** * Frees the memory allocated by the given 'field_info'. * *

After calling this function the give field_info pointer * should not be used anymore. * * @param field_info the field_info to be released */ void epr_free_field_info(EPR_SFieldInfo* field_info) { if (field_info == NULL) return; epr_free_string(field_info->name); field_info->name = NULL; epr_free_string(field_info->description); field_info->description = NULL; epr_free_string(field_info->unit); field_info->unit = NULL; field_info->num_elems = 0; field_info->tot_size = 0; field_info->data_type_id = 0; free(field_info); } /* Function: epr_create_field Access: public API Changelog: 2002/01/23 mp initial version */ /** * Creates a new field instance belongs to the given * record_info. * * @param the pointer at the field information. * must not be NULL * @return the new field instance * or NULL if an error occured. */ EPR_SField* epr_create_field(EPR_SFieldInfo* field_info) { EPR_SField* field = NULL; uint data_type_size = 0; field = (EPR_SField*) calloc(1, sizeof(EPR_SField)); if (field == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_field: out of memory"); return NULL; } field->magic = EPR_MAGIC_FIELD; data_type_size = epr_get_data_type_size(field_info->data_type_id); if (data_type_size == 0) { epr_set_err(e_err_illegal_data_type, "epr_create_field: illegal field_info data type identifier"); return NULL; } field->info = field_info; if (field_info->num_elems == 0) { free(field); epr_set_err(e_err_invalid_value, "epr_create_field: field_info->num_elems is zero"); return NULL; } if (field_info->data_type_id == e_tid_spare) { field->elems = calloc(field_info->tot_size, 1 /*byte*/); } else { if (field_info->data_type_id == e_tid_string) { /* Note that string always are considered as one single element, so we get the total number of characters from tot_size. Addidionally we reserve an extra character for the trailing zero (terminator), */ field->elems = calloc(field_info->tot_size + 1, sizeof (char)); } else { field->elems = calloc(field_info->num_elems, data_type_size); } } if (field->elems == NULL) { free(field); epr_set_err(e_err_out_of_memory, "epr_create_field: out of memory"); return NULL; } /* if (field->info->data_type_id == e_tid_string) { printf("string field: name=%s, num_elems=%d, tot_size=%d\n", field->info->name, field->info->num_elems, field->info->tot_size); } */ return field; } /** * Frees the memory allocated by the given 'field'. * *

After calling this function the give field pointer * should not be used anymore. * * @param field the field to be released */ void epr_free_field(EPR_SField* field) { if (field == NULL) return; /* Do NOT free field->info since many fields can share the same field->info! */ field->info = NULL; if (field->elems != NULL) { free(field->elems); field->elems = NULL; } free(field); } /** * Gets a full field from the given record. * *

The field is hier identified through the given name. *
It contains the field info and all corresponding values. * * @param record the record identifier, must not be NULL * @param field_name the the name of required field, must not be NULL. * * @return the field or NULL if an error occured. */ const EPR_SField* epr_get_field(const EPR_SRecord* record, const char* field_name) { EPR_SField* field; uint field_index; epr_clear_err(); if (record == NULL) { epr_set_err(e_err_invalid_record_name, "epr_get_field: record must not be NULL"); return NULL; } if (field_name == NULL) { epr_set_err(e_err_invalid_record_name, "epr_get_field: field_name must not be NULL"); return NULL; } for (field_index = 0; field_index < record->num_fields; field_index++) { field = record->fields[field_index]; if (strcmp(field_name, field->info->name) == 0) { return field; } } epr_set_err(e_err_illegal_arg, "epr_get_field: field not found"); return NULL; } uint epr_get_field_num_elems(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_num_elems: field-identifier must not be NULL"); return 0; } return field->info->num_elems; } const char* epr_get_field_name(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_name: field-identifier must not be NULL"); return NULL; } return field->info->name; } EPR_EDataTypeId epr_get_field_type(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_type: field-identifier must not be NULL"); return e_tid_unknown; } return field->info->data_type_id; } const char* epr_get_field_unit(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_unit: field-identifier must not be NULL"); return NULL; } return field->info->unit; } const char* epr_get_field_description(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_description: field-identifier must not be NULL"); return NULL; } return field->info->description; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dataset.h000644 015705 000000 00000003266 13505462014 027434 0ustar00sandwellwheel000000 000000 /* * $Id: epr_dataset.h,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_DATASET_H_INCL #define EPR_DATASET_H_INCL #ifdef __cplusplus extern "C" { #endif /** * @todo add docu here... */ EPR_SDatasetId* epr_create_dataset_id(EPR_SProductId* product_id, const EPR_SDSD* dsd, const char* dataset_name, const struct RecordDescriptor* record_info_ref, const char* dsd_name, const char* description); /** * Release the memory allocated through a dataset ID. * * @param product_id the file identifier, if NULL the function * immediately returns * @see epr_create_dataset_id */ void epr_free_dataset_id(EPR_SDatasetId* dataset_id); EPR_SPtrArray* epr_create_dataset_ids(EPR_SProductId* product_id); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_DATASET_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_record.h000644 015705 000000 00000004641 13505462014 027263 0ustar00sandwellwheel000000 000000 /* * $Id: epr_record.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_RECORD_H_INCL #define EPR_RECORD_H_INCL #ifdef __cplusplus extern "C" { #endif #include /* just to get the ANSI-C type FILE */ /** * The EPR_RecordInfo structure contains meta information * about a particular record. */ struct EPR_RecordInfo { /** * The name of the dataset to which this record belongs to. */ char* dataset_name; /** * The array of field info pointers. */ EPR_SPtrArray* field_infos; /** * The total size in bytes of all data elements of all fields * of a record in a product file. * tot_size is a derived variable, it is computed at * runtime and not stored in the DSD-DB. */ uint tot_size; }; /** * Returns information about the structure of the records contained in * a dataset specified by the given dataset_id. * * @param dataset_id the the dataset identifier * * @return the the pointer for the record structure information. */ EPR_SRecordInfo* epr_get_record_info(EPR_SDatasetId* dataset_id); EPR_SRecordInfo* epr_read_record_info(EPR_SProductId* product_id, EPR_SDatasetId* dataset_id); void epr_read_sub_record_info(EPR_SProductId* product_id, FILE* db_file_istream, const char* parent_name, EPR_SPtrArray* field_infos); EPR_SRecordInfo* epr_create_record_info(const char* dataset_name, EPR_SPtrArray* field_infos); EPR_SRecord* epr_create_record_from_info(EPR_SRecordInfo* record_info); char* epr_get_record_info_path(EPR_SProductId* product_id, const char* dataset_name); void epr_free_record_info(EPR_SRecordInfo* record_info); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_RECORD_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_ptrarray.c000644 015705 000000 00000006434 13505462014 027646 0ustar00sandwellwheel000000 000000 /* * $Id: epr_ptrarray.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_ptrarray.h" #include "epr_string.h" EPR_SPtrArray* epr_create_ptr_array(unsigned int capacity) { EPR_SPtrArray* ptr_array = NULL; void** elems = NULL; elems = (void**) calloc(capacity, sizeof (void*)); if (elems == NULL) { return NULL; } ptr_array = (EPR_SPtrArray*) calloc(1, sizeof (EPR_SPtrArray)); if (ptr_array == NULL) { free(elems); return NULL; } ptr_array->capacity = capacity; ptr_array->length = 0; ptr_array->elems = elems; return ptr_array; } void epr_free_ptr_array(EPR_SPtrArray* ptr_array) { if (ptr_array == NULL) return; if (ptr_array->elems != NULL) free(ptr_array->elems); ptr_array->capacity = 0; ptr_array->length = 0; ptr_array->elems = NULL; free(ptr_array); } void epr_free_char_ptr_array(EPR_SPtrArray* char_ptr_array) { uint i; for (i = 0; i < char_ptr_array->length; i++) { epr_free_string((char*) char_ptr_array->elems[i]); } epr_free_ptr_array(char_ptr_array); } int epr_add_ptr_array_elem(EPR_SPtrArray* ptr_array, void* elem) { assert(ptr_array != NULL); assert(ptr_array->elems != NULL); if (ptr_array->length + 1 > ptr_array->capacity) { int status = epr_grow_ptr_array(ptr_array, 2 * ptr_array->capacity); if (status != 0) return status; } ptr_array->elems[ptr_array->length++] = elem; return e_err_none; } int epr_grow_ptr_array(EPR_SPtrArray* ptr_array, unsigned int capacity) { void* elems = NULL; assert(ptr_array != NULL); assert(capacity >= ptr_array->capacity); if (capacity == ptr_array->capacity) return e_err_none; elems = (void**) realloc(ptr_array->elems, capacity * sizeof (void*)); if (elems == NULL) return e_err_out_of_memory; memset(((char*)elems) + ptr_array->length * sizeof (void*), 0, (capacity - ptr_array->length) * sizeof (void*)); ptr_array->capacity = capacity; ptr_array->elems = elems; return e_err_none; } unsigned int epr_get_ptr_array_length(const EPR_SPtrArray* ptr_array) { assert(ptr_array != NULL); return ptr_array->length; } void* epr_get_ptr_array_elem_at(const EPR_SPtrArray* ptr_array, unsigned int index) { assert(ptr_array != NULL); assert(ptr_array->elems != NULL); assert(index < ptr_array->length); return ptr_array->elems[index]; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_string.c000644 015705 000000 00000021164 13505462014 027305 0ustar00sandwellwheel000000 000000 /* * $Id: epr_string.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" char* epr_assign_string(char** str_clone, const char* str) { assert(str_clone != NULL); epr_free_string(*str_clone); *str_clone = epr_clone_string(str); return *str_clone; } char* epr_create_string(unsigned int length) { return (char*) calloc(length + 1, sizeof (char)); } char* epr_clone_string(const char* str) { char* str_clone = NULL; if (str != NULL) { str_clone = epr_create_string(strlen(str)); strcpy(str_clone, str); } return str_clone; } void epr_cut_string(char** sub_str, const char* str, int start, int length) { *sub_str = epr_create_string(length); strncpy(*sub_str, str + start, length); *sub_str[length] = '\0'; } char* epr_sub_string(const char* str, int start, int length) { char* str_sub_string = NULL; if (str != NULL) { str_sub_string = epr_create_string(length); strncpy(str_sub_string, str + start, length); str_sub_string[length] = '\0'; } return str_sub_string; } /* Function: epr_get_last_err_code Access: private API implementation helper Changelog: 2002/01/05 nf initial version */ /** * Compares the two given names and returns TRUE if * they are equal ignoring the case of each letter. * *

This function is used to compare names throughout the * ENVISAT product reader API. * * @param name1 the first name, must not be NULL * @param name2 the second name, must not be NULL * @return TRUE if the names are equal, * FALSE otherwise */ epr_boolean epr_equal_names(const char* name1, const char* name2) { assert(name1 != NULL); assert(name2 != NULL); return stricmp(name1, name2) == 0; } void epr_free_string(char* str) { if (str == NULL) return; free(str); } /* Function: epr_str_tok Access: private API implementation helper Changelog: 2002/01/10 mp initial version */ /** * Findes substrings between separators. * * @param str the string to search * @param seps the separator simbols string * @param pos position with a search begin * * @return the next substring (or own string) of the found name or * (uint)NULL if an error occured. */ char* epr_str_tok(const char* str, const char* seps, int* pos) { char* token = NULL; int i, old_pos; int token_len = 0; assert(str != NULL); if (*pos >= (int)strlen(str)) return NULL; old_pos = *pos; for (i = *pos; str[i] != '\0'; i++) { if (strchr(seps, str[i]) != NULL) { token_len = i - *pos; token = epr_create_string(token_len); strncpy(token, str + *pos, token_len); token[token_len] = '\0'; *pos = i + 1; return token; } } if (strlen(str) > 0) { if (old_pos == 0) { *pos = i + 1; token = epr_clone_string(str); return token; } else if (old_pos > 0) { token_len = i - old_pos; token = epr_create_string(token_len); strncpy(token, str + *pos, token_len); token[token_len] = '\0'; *pos = (int)strlen(str); return token; } } return NULL; } /* Function: epr_str_tok_tok Access: private API implementation helper Changelog: 2002/01/10 mp initial version */ /** * Findes substrings between double separators. * * @param str the string to search * @param seps the separator simbols string * @param pos position with a search begin * * @return the next substring (or own string) of the found name or * (uint)NULL if an error occured. */ char* epr_str_tok_tok(const char* str, const char* seps, const char* exceptions, uint* pos) { char* token = NULL; uint i, old_pos; uint token_len = 0; assert(str != NULL); if (*pos >= (uint)strlen(str)) return NULL; old_pos = *pos; for (i = *pos; str[i] != '\0'; i++) { if (((strchr(seps, str[i]) != NULL) && (i == 0)) || ((strchr(seps, str[i]) != NULL) && (i > 0) && (strchr(exceptions, str[i - 1]) == NULL))) { token_len = i - *pos; token = epr_create_string(token_len); strncpy(token, str + *pos, token_len); token[token_len] = '\0'; *pos = i + 1; return token; } } if (strlen(str) > 0) { if (old_pos == 0) { *pos = i + 1; token = epr_clone_string(str); return token; } else if (old_pos > 0) { token_len = i - old_pos; token = epr_create_string(token_len); strncpy(token, str + *pos, token_len); token[token_len] = '\0'; *pos = (int)strlen(str); return token; } } return NULL; } int epr_find_first_not_white(const char* str) { int i; char white[] = {" "}; for (i = 0; i < (int)strlen(str); i ++) { if (strchr(white, str[i]) == NULL) return i; } return (int)strlen(str); } int epr_find_last_not_white(const char* str) { int i; char white[] = {" "}; if ((int)strlen(str) == 0) return -1; for (i = (int)strlen(str) - 1; i >= 0; i --) { if (strchr(white, str[i]) == NULL) return i; } return -1; } char* epr_trim_string(char* str) { int i, i1, i2, n; assert(str != NULL); n = strlen(str); if (n == 0) return str; i1 = -1; for (i = 0; str[i] != '\0'; i++) { if (!isspace(str[i])) { i1 = i; break; } } if (i1 == -1) { str[0] = '\0'; return str; } i2 = -1; for (i = n - 1; i >= 0; i--) { if (!isspace(str[i])) { i2 = i; break; } } assert(i1 > -1 && i2 > -1); if (i1 > 0) { int j = 0; for (i = i1; i <= i2; i++) { str[j] = str[i]; j++; } } str[i2 - i1 + 1] = '\0'; return str; } char* epr_strip_string_r(char* str) { int i, i1, n; assert(str != NULL); n = strlen(str); if (n == 0) { return str; } i1 = -1; for (i = n - 1; i >= 0; i--) { if (33 <= str[i] && str[i] <= 126) { i1 = i; break; } } if (i1 == -1) { str[0] = '\0'; } else { str[i1+1] = '\0'; } return str; } int epr_if_no_letters(const char* str) { int i; char ciffer[] = {"0123456789+- "}; for (i = 0; i < (int)strlen(str); i ++) { if (strchr(ciffer, str[i]) == NULL) return 0; } return 1; } int epr_get_positive_int(const char* str) { int i; char ciffer[] = {"0123456789 "}; for (i = 0; i < (int)strlen(str); i ++) { if (strchr(ciffer, str[i]) == NULL) return -1; } return atoi(str); } /*'Verdacht': if float-or-double*/ int epr_numeral_suspicion(const char* str) { int i; char ciffer[] = {"0123456789+- .eE"}; for (i = 0; i < (int)strlen(str); i ++) { if (strchr(ciffer, str[i]) == NULL) return 0; } /*if YES*/ return 1; } int epr_if_no_scaling(const char* str) { int result; result = strrchr(str, EPR_IRRELEVANCE_SYMBOL) - str + 1; if (result == 1) return 1; return 0; } void epr_free_and_null_string(char** str) { if (*str == NULL) return; epr_free_string(*str); *str = NULL; } int stricmp(const char* s1, const char* s2) { int d; assert(s1 != NULL); assert(s2 != NULL); while (*s1 != '\0' && *s2 != '\0') { d = tolower(*s1) - tolower(*s2); if (d != 0) { break; } s1++; s2++; } d = tolower(*s1) - tolower(*s2); return d; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_swap.c000644 015705 000000 00000014262 13505462014 026752 0ustar00sandwellwheel000000 000000 /* * $Id: epr_swap.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_field.h" /* * Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_short(short *buffer, uint number_of_swaps) { short* temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = (short)(((*temp & 0x00ff) << 8) | ((*temp & 0xff00) >> 8)); } } /* Function: byte_swap_int.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_int(int *buffer, uint number_of_swaps) { int *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_ushort(ushort* buffer, uint number_of_swaps) { byte_swap_short((short*) buffer, number_of_swaps); } /* * Function: byte_swap_uint.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_uint(uint* buffer, uint number_of_swaps) { byte_swap_int((int*) buffer, number_of_swaps); } /* * Function: byte_swap_int.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_float(float* buffer, uint number_of_swaps) { byte_swap_int((int*) buffer, number_of_swaps); } /** * A boolean value indicating whether this code run's on a * little endian order machine or not. *

1 stands for little endian (LE), * 0 stands for big endian (BE). */ /* Function: epr_is_little_endian_order Access: public API Changelog: 2002/02/04 nf nitial version */ /** * Returns a oolean value indicating whether this code run's on a * little endian order machine or not. *

1 stands for little endian (LE), 0/code> otherwise */ int epr_is_little_endian_order() { uint le_value = EPR_LE_MAGIC_NUMBER; return (((uchar*)(&le_value))[0] == EPR_LE_MAGIC_BYTE_0) && (((uchar*)(&le_value))[1] == EPR_LE_MAGIC_BYTE_1) && (((uchar*)(&le_value))[2] == EPR_LE_MAGIC_BYTE_2) && (((uchar*)(&le_value))[3] == EPR_LE_MAGIC_BYTE_3); } /* Function: epr_is_big_endian_order Access: public API Changelog: 2002/02/04 nf nitial version */ /** * Returns a oolean value indicating whether this code run's on a * little endian order machine or not. *

1 stands for little endian (BE), 0/code> otherwise */ int epr_is_big_endian_order() { uint be_value = EPR_BE_MAGIC_NUMBER; return (((uchar*)(&be_value))[0] == EPR_LE_MAGIC_BYTE_0) && (((uchar*)(&be_value))[1] == EPR_LE_MAGIC_BYTE_1) && (((uchar*)(&be_value))[2] == EPR_LE_MAGIC_BYTE_2) && (((uchar*)(&be_value))[3] == EPR_LE_MAGIC_BYTE_3); } /* Function: epr_swap_endian_order Access: public API Changelog: 2002/02/04 mp nitial version */ /** * Converts bytes for a little endian order machine * * @param field the pointer at data reading in * */ void epr_swap_endian_order(const EPR_SField* field) { switch (field->info->data_type_id) { case e_tid_uchar: case e_tid_char: case e_tid_string: /* no conversion required */ break; case e_tid_time: byte_swap_uint((uint*)field->elems, 3); break; case e_tid_spare: /* no conversion required */ break; case e_tid_ushort: byte_swap_ushort((ushort*) field->elems, field->info->num_elems); break; case e_tid_short: byte_swap_short((short*) field->elems, field->info->num_elems); break; case e_tid_uint: byte_swap_uint((uint*) field->elems, field->info->num_elems); break; case e_tid_int: byte_swap_int((int*) field->elems, field->info->num_elems); break; case e_tid_float: byte_swap_float((float*) field->elems, field->info->num_elems); break; case e_tid_double: epr_set_err(e_err_invalid_data_format, "epr_swap_endian_order: DOUBLE type was not yet processed"); break; default: epr_set_err(e_err_invalid_data_format, "epr_swap_endian_order: unknown data type"); } } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_product.c000644 015705 000000 00000036504 13505462014 027463 0ustar00sandwellwheel000000 000000 /* * $Id: epr_product.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_dataset.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" uint epr_compute_scene_width(const EPR_SProductId* product_id); uint epr_compute_scene_height(const EPR_SProductId* product_id); /*********************************** PRODUCT ***********************************/ /* Function: epr_open_product Access: public API Changelog: 2002/01/05 nf initial version */ /** * Opens the ENVISAT product file with the given file path */ EPR_SProductId* epr_open_product(const char* product_file_path) { EPR_SProductId* product_id = NULL; char message_buffer[80]; int s_par; uint compare_ok = 0; epr_clear_err(); if (!epr_check_api_init_flag()) { return NULL; } if (product_file_path == NULL) { epr_set_err(e_err_null_pointer, "epr_open_product: product file path must not be NULL"); return NULL; } product_id = (EPR_SProductId*) calloc(1, sizeof (EPR_SProductId)); if (product_id == NULL) { epr_set_err(e_err_out_of_memory, "epr_open_product: out of memory"); return NULL; } product_id->magic = EPR_MAGIC_PRODUCT_ID; epr_assign_string(&product_id->file_path, product_file_path); if (product_id->file_path == NULL) { epr_set_err(e_err_out_of_memory, "epr_open_product: out of memory"); return NULL; } /* Convert to OS compatible path */ epr_make_os_compatible_path(product_id->file_path); product_id->istream = fopen(epr_trim_string(product_id->file_path), "rb"); if (product_id->istream == NULL) { if (errno == ENOENT) { epr_set_err(e_err_file_not_found, "epr_open_product: file not found"); } else { epr_set_err(e_err_file_access_denied, "epr_open_product: file open failed"); } return NULL; } epr_log(e_log_debug, "product opened:"); epr_log(e_log_debug, epr_trim_string(product_id->file_path)); /* Set file pointer to start of product identifier */ if (fseek(product_id->istream, EPR_PRODUCT_ID_OFFSET, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_open_product: file seek failed"); epr_close_product(product_id); return NULL; } if (fread(product_id->id_string, 1, EPR_PRODUCT_ID_STRLEN, product_id->istream) != (uint) EPR_PRODUCT_ID_STRLEN) { epr_set_err(e_err_file_access_denied, "epr_open_product: file read failed"); epr_close_product(product_id); return NULL; } /* Product identifier filter*/ if ((strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) != 0) && (strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) != 0) && (strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) != 0) && (strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) != 0)) { epr_set_err(e_err_invalid_product_id, "epr_open_product: invalid product identifier"); epr_close_product(product_id); return NULL; } if (product_id->id_string[9] != 'P') { char* ch = product_id->id_string + 9; if (*ch == 'C') { epr_log(e_log_info, "child product detected, mapping to 'P'"); } else { sprintf(message_buffer, "unknown product sub-type '%c', mapping to 'P'", *ch); epr_log(e_log_warning, message_buffer); } *ch = 'P'; } /* Set file to end of file in order to determine file size */ if (fseek(product_id->istream, 0, SEEK_END) != 0) { epr_set_err(e_err_file_access_denied, "epr_open_product: file seek failed"); epr_close_product(product_id); return NULL; } /* Get file size */ product_id->tot_size = (uint) ftell(product_id->istream); if (product_id->tot_size == (uint) -1) { epr_set_err(e_err_file_access_denied, "epr_open_product: failed to determine file size"); epr_close_product(product_id); return NULL; } sprintf(message_buffer, "product size: %u", product_id->tot_size); epr_log(e_log_debug, message_buffer); /* Set file pointer back to start */ if (fseek(product_id->istream, 0, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_open_product: file seek failed"); epr_close_product(product_id); return NULL; } product_id->record_info_cache = epr_create_ptr_array(32); product_id->param_table = epr_create_param_table(); epr_log(e_log_info, "reading MPH"); product_id->mph_record = epr_read_mph(product_id); epr_log(e_log_info, "reading SPH"); product_id->sph_record = epr_read_sph(product_id); s_par = epr_set_dyn_dddb_params(product_id); epr_log(e_log_info, "reading all DSDs"); product_id->dsd_array = epr_read_all_dsds(product_id); compare_ok = epr_compare_param(product_id); if (compare_ok == 0) { epr_set_err(e_err_invalid_value, "epr_open_product: MPH_SIZE+SPH_SIZE must be equal to DSD[0].DS_OFFSET"); epr_close_product(product_id); return NULL; } if (strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) == 0) { product_id->meris_iodd_version = epr_detect_meris_iodd_version(product_id); sprintf(message_buffer, "product type %s (MERIS IODD%d)", product_id->id_string, product_id->meris_iodd_version); epr_log(e_log_info, message_buffer); } epr_log(e_log_info, "creating dataset identifiers"); product_id->dataset_ids = epr_create_dataset_ids(product_id); if (product_id->dataset_ids == NULL) { epr_close_product(product_id); return NULL; } epr_log(e_log_info, "creating band identifiers"); product_id->band_ids = epr_create_band_ids(product_id); if (product_id->band_ids == NULL) { epr_close_product(product_id); return NULL; } /* Get scene size */ product_id->scene_width = epr_compute_scene_width(product_id); product_id->scene_height = epr_compute_scene_height(product_id); sprintf(message_buffer, "product scene raster size: %u x %u", product_id->scene_width, product_id->scene_height); epr_log(e_log_debug, message_buffer); return product_id; } /* Function: epr_close_product Access: public API Changelog: 2002/01/05 nf initial version */ /** * Closes the ENVISAT product file determined by the gibven file identifier. */ int epr_close_product(EPR_SProductId* product_id) { /* Nothing to close, return */ if (product_id == NULL) { return e_err_none; } epr_clear_err(); if (!epr_check_api_init_flag()) { return epr_get_last_err_code(); } assert(product_id->istream != NULL); if (fclose(product_id->istream) != 0) { epr_set_err(e_err_file_close_failed, "epr_close_product: product file close failed"); return epr_get_last_err_code(); } product_id->istream = NULL; epr_log(e_log_info, "product closed: file path: "); epr_log(e_log_info, product_id->file_path); epr_free_product_id(product_id); return e_err_none; } /* Function: epr_free_product_id Access: private API implementation helper Changelog: 2002/01/05 nf initial version */ /** * Destructor for an EPR_SProductId structure instance. * * @param product_id the product file identifier to be destructed */ void epr_free_product_id(EPR_SProductId* product_id) { if (product_id == NULL) return; product_id->istream = NULL; epr_free_string(product_id->file_path); product_id->file_path = NULL; product_id->id_string[0] = '\0'; epr_free_param_table(product_id->param_table); product_id->param_table = NULL; if (product_id->record_info_cache != NULL) { EPR_SRecordInfo* record_info = NULL; uint record_info_index = 0; for (record_info_index = 0; record_info_index < product_id->record_info_cache->length; record_info_index++) { record_info = (EPR_SRecordInfo*)epr_get_ptr_array_elem_at(product_id->record_info_cache, record_info_index); epr_free_record_info(record_info); } epr_free_ptr_array(product_id->record_info_cache); product_id->record_info_cache = NULL; } if (product_id->dsd_array != NULL) { EPR_SDSD* dsd = NULL; uint dsd_index = 0; for (dsd_index = 0; dsd_index < product_id->dsd_array->length; dsd_index++) { dsd = (EPR_SDSD*)epr_get_ptr_array_elem_at(product_id->dsd_array, dsd_index); epr_free_dsd(dsd); } epr_free_ptr_array(product_id->dsd_array); product_id->dsd_array = NULL; } if (product_id->mph_record != NULL) { epr_free_record(product_id->mph_record); product_id->mph_record = NULL; } if (product_id->sph_record != NULL) { epr_free_record(product_id->sph_record); product_id->sph_record = NULL; } if (product_id->dataset_ids != NULL) { EPR_SDatasetId* dataset_id = NULL; uint d_index = 0; for (d_index = 0; d_index < product_id->dataset_ids->length; d_index++) { dataset_id = (EPR_SDatasetId*)epr_get_ptr_array_elem_at(product_id->dataset_ids, d_index); epr_free_dataset_id(dataset_id); } epr_free_ptr_array(product_id->dataset_ids); product_id->dataset_ids = NULL; } if (product_id->band_ids != NULL) { EPR_SBandId* band_id = NULL; uint b_index = 0; for (b_index = 0; b_index < product_id->band_ids->length; b_index++) { band_id = (EPR_SBandId*)epr_get_ptr_array_elem_at(product_id->band_ids, b_index); epr_free_band_id(band_id); } epr_free_ptr_array(product_id->band_ids); product_id->band_ids = NULL; } product_id->tot_size = 0; free(product_id); } /** * Gets the scene width in pixel. * * @param product_id the product identifier, must not be NULL * @return width pixel number, or 0 if an error occured. */ uint epr_get_scene_width(const EPR_SProductId* product_id) { epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_scene_width: product_id must not be NULL"); return (uint)0; } return product_id->scene_width; } /** * Gets the scene height in pixel. * * @param product_id the product identifier, must not be NULL * @return height pixel number, or 0 if an error occured. */ uint epr_get_scene_height(const EPR_SProductId* product_id) { epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_scene_height: product_id must not be NULL"); return (uint)0; } return product_id->scene_height; } /*********************************** RECORD ***********************************/ EPR_SRecord* epr_get_sph(const EPR_SProductId* product_id) { epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_sph: product-identifier must not be NULL"); return NULL; } return product_id->sph_record; } EPR_SRecord* epr_get_mph(const EPR_SProductId* product_id) { epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_mph: product-identifier must not be NULL"); return NULL; } return product_id->mph_record; } /** * Gets the scene width in pixel. * * @param product_id the product identifier, must not be NULL * * @return width pixel number, or 0 if an error occured. */ uint epr_compute_scene_width(const EPR_SProductId* product_id) { EPR_SRecord* sph_record = NULL; uint scan_line_length; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_compute_scene_width: product ID must not be NULL"); return (uint)0; } sph_record = product_id->sph_record; if (strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) == 0) { const EPR_SField* field = field = epr_get_field(sph_record, "LINE_LENGTH"); scan_line_length = epr_get_field_elem_as_uint(field, 0); } else if (strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) == 0) { scan_line_length = EPR_ATS_LINE_LENGTH; } else if (strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) == 0) { const EPR_SField* field = field = epr_get_field(sph_record, "LINE_LENGTH"); scan_line_length = epr_get_field_elem_as_uint(field, 0); } else if (strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) == 0) { const EPR_SField* field = field = epr_get_field(sph_record, "LINE_LENGTH"); scan_line_length = epr_get_field_elem_as_uint(field, 0); } else { epr_set_err(e_err_illegal_arg, "epr_compute_scene_width: unknown product type"); scan_line_length = (uint)0; } return scan_line_length; } /** * Computes the scene height in pixel of a product. The scene height is * the minimum number of records in all measurement datasets. * * @param product_id the product identifier, must not be NULL * @return height pixel number, or 0 if an error occured. */ uint epr_compute_scene_height(const EPR_SProductId* product_id) { EPR_SDSD* dsd = NULL; uint min_num_mds_recs = 0; uint dsd_index; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_compute_scene_height: product ID must not be NULL"); return (uint)0; } for (dsd_index = 0; dsd_index < product_id->dsd_array->length; dsd_index++) { dsd = (EPR_SDSD*)epr_get_ptr_array_elem_at(product_id->dsd_array, dsd_index); if (epr_equal_names(dsd->ds_type, "M")) { if (dsd->num_dsr > min_num_mds_recs) { min_num_mds_recs = dsd->num_dsr; } } } if (min_num_mds_recs == 0) { epr_set_err(e_err_invalid_data_format, "epr_compute_scene_height: product height was zero"); } return min_num_mds_recs; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dddb.c000644 015705 000000 00002104011 13505462014 026667 0ustar00sandwellwheel000000 000000 #include "epr_api.h" #include "epr_dddb.h" static const struct RecordDescriptor MER_LRC_2P_MDSR_cl_thick_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"cl_opt_thick_pix", e_tid_uchar, NULL, 1, "sceneRasterWidth", "cloud optical thickness pixel #1- #281"} }; static const struct RecordDescriptor MER_LRC_2P_MDSR_cl_top_press_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"cl_top_press_pix", e_tid_uchar, NULL, 1, "sceneRasterWidth", "cloud top pressure pixel #1- #281"} }; static const struct RecordDescriptor MER_LRC_2P_MDSR_flag_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"pixel_info", e_tid_uchar, "counts", 1, "3*sceneRasterWidth", "Flags associated with pixel #1 - #281"} }; static const struct RecordDescriptor MER_LRC_2P_MDSR_twv_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"wvapour_cont_pix", e_tid_uchar, NULL, 1, "sceneRasterWidth", "Water Vapour Content pixel #1- #281"} }; static const struct RecordDescriptor MER_RRC_2P_GADS_sfgi_meris_rec_data[] = { {"sf_cl_opt_thick", e_tid_float, NULL, 4, "1", "scaling factor - Cloud optical thickness"}, {"sf_cloud_top_press", e_tid_float, NULL, 4, "1", "scaling factor - Cloud Top Pressure"}, {"sf_wvapour", e_tid_float, NULL, 4, "1", "scaling factor - Water vapour"}, {"off_cl_opt_thick", e_tid_float, NULL, 4, "1", "offset-Cloud optical thickness"}, {"off_cloud_top_press", e_tid_float, "hPa", 4, "1", "offset - Cloud Top Pressure"}, {"off_wvapour", e_tid_float, "g.cm-2", 4, "1", "offset-Water vapour"}, {"spare_1", e_tid_spare, NULL, 52, "1", "Spare"} }; static const struct RecordDescriptor MER_RRV_2P_GADS_sfgi_meris_rec_data[] = { {"sf_toa_veg_ind", e_tid_float, NULL, 4, "1", "scaling factor - TOA Vegetation Index"}, {"sf_boa_veg_ind", e_tid_float, NULL, 4, "1", "scaling factor - BOA Vegetation Index"}, {"off_toa_veg_ind", e_tid_float, NULL, 4, "1", "offset-TOA Vegetation Index"}, {"off_boa_veg_ind", e_tid_float, NULL, 4, "1", "offset-BOA Vegetation Index"}, {"spare_1", e_tid_spare, NULL, 60, "1", "Spare"} }; static const struct RecordDescriptor MER_RR__1P_ADSR_sq_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of the first line in the MDS corresponding to this record."}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (Set to 1 if all the records in all the bands are blank for the period corresponding to this record, set to zero otherwise)"}, {"range_flag", e_tid_ushort, "flag", 2, "5", "Out of Range flag. For every band, when the number of out of range samples is above a given threshold then it is set to TRUE, otherwise it is left to FALSE. The 15 flags for all the bands of a module are stored in an unsigned integer. To have this informati"}, {"range_blind_flag", e_tid_ushort, "flag", 2, "5", "Out of Range blind flag. Flags set to TRUE when the number of out of range blind spectral samples per module is above a given threshold. Flag ordering same as described in field 3."} }; static const struct RecordDescriptor MER_RR__1P_ADSR_tie_pt_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start time of the measurement"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if all MDSRs corresponding to this ADSR are blank, set to zero otherwise)"}, {"lat_tie_pt", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "Latitude of the tie points WGS84, positive N"}, {"long_tie_pt", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "Longitude of the tie points WGS84, Greenwich origin, positive E"}, {"dem_alt_tie_pt", e_tid_int, "m", 4, "tiePointGridWidth", "DEM altitude"}, {"dem_rough", e_tid_uint, "m", 4, "tiePointGridWidth", "DEM roughness"}, {"dem_lat_corrc", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "DEM latitude corrections"}, {"dem_long_corrc", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "DEM longitude corrections"}, {"sun_zen_ang", e_tid_uint, "(1e-6) degrees", 4, "tiePointGridWidth", "Sun zenith angles"}, {"sun_azi_ang", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "Sun azimuth angles"}, {"vw_zen_ang", e_tid_uint, "(1e-6) degrees", 4, "tiePointGridWidth", "Viewing zenith angles"}, {"vw_azi_ang", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "Viewing azimuth angles"}, {"zon_wind", e_tid_short, "m*s-1", 2, "tiePointGridWidth", "Zonal winds"}, {"meri_wind", e_tid_short, "m*s-1", 2, "tiePointGridWidth", "Meridional winds"}, {"atm_pres", e_tid_ushort, "hPa", 2, "tiePointGridWidth", "Mean sea level pressures"}, {"tot_ozone", e_tid_ushort, "DU", 2, "tiePointGridWidth", "Total ozone"}, {"rel_humid", e_tid_ushort, "%", 2, "tiePointGridWidth", "Relative humidity"} }; static const struct RecordDescriptor MER_RR__1P_GADS_sfgi_meris_rec_data[] = { {"sf_alt", e_tid_float, NULL, 4, "1", "scaling factor - altitude"}, {"sf_rough", e_tid_float, NULL, 4, "1", "scaling factor - roughness"}, {"sf_zon_wind", e_tid_float, NULL, 4, "1", "scaling factor - zonal wind"}, {"sf_merr_wind", e_tid_float, NULL, 4, "1", "scaling factor - meridional wind"}, {"sf_atm_pres", e_tid_float, NULL, 4, "1", "scaling factor - atmospheric pressure"}, {"sf_ozone", e_tid_float, NULL, 4, "1", "scaling factor - ozone"}, {"sf_rel_hum", e_tid_float, NULL, 4, "1", "scaling factor - relative humidity"}, {"sf_rad", e_tid_float, NULL, 4, "15", "scaling factor - radiances"}, {"gain_set", e_tid_uchar, NULL, 1, "5*16", "Gain setting"}, {"samp_rate", e_tid_uint, "(10-6) s", 4, "1", "sampling rate"}, {"sun_spec_flux", e_tid_float, "LU", 4, "15", "Sun Spectral Flux (for bands 1-15)"}, {"spare_1", e_tid_spare, NULL, 60, "1", "Spare"} }; static const struct RecordDescriptor MER_RR__1P_MDSR_16_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start time of the Data Set Record"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"flags", e_tid_uchar, NULL, 1, "sceneRasterWidth", "Flags and spectral shift index"}, {"detector_index", e_tid_short, NULL, 2, "sceneRasterWidth", "Flags and spectral shift index"} }; static const struct RecordDescriptor MER_RR__1P_MDSR_16_IODD5_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start time of the Data Set Record"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"pixel_info", e_tid_uchar, NULL, 1, "2*sceneRasterWidth", "Flags and spectral shift index"} }; static const struct RecordDescriptor MER_RR__1P_MDSR_1_15_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start time of the Data Set Record"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"toa_rad", e_tid_ushort, "LU", 2, "sceneRasterWidth", "TOA radiance"} }; static const struct RecordDescriptor MER_RR__2P_ADSR_sq_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start time of the measurement"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if all MDSRs corresponding to this ADSR are blank, set to zero otherwise)"}, {"perc_water_abs_aero", e_tid_uchar, "%", 1, "1", "% of water pixels having absorbing aerosols"}, {"perc_water", e_tid_uchar, "%", 1, "1", "% of water pixels"}, {"perc_ddv_land", e_tid_uchar, "%", 1, "1", "% of DDV land pixels"}, {"perc_land", e_tid_uchar, "%", 1, "1", "% of land pixels"}, {"perc_cloud", e_tid_uchar, "%", 1, "1", "% of cloud pixels"}, {"perc_low_poly_press", e_tid_uchar, "%", 1, "1", "% of pixels with low polynomial pressure"}, {"perc_low_neural_press", e_tid_uchar, "%", 1, "1", "% of pixels with low Neural Network pressure"}, {"perc_out_ran_inp_wvapour", e_tid_uchar, "%", 1, "1", "% of pixels with out of range inputs for water vapour proc."}, {"per_out_ran_outp_wvapour", e_tid_uchar, "%", 1, "1", "% of pixels with out of range outputs for water vapour proc."}, {"perc_out_range_inp_cl", e_tid_uchar, "%", 1, "1", "% of pixels with out of range inputs for Cloud proc."}, {"perc_out_ran_outp_cl", e_tid_uchar, "%", 1, "1", "% of pixels with out of range outputs for Cloud proc."}, {"perc_in_ran_inp_land", e_tid_uchar, "%", 1, "1", "% of pixels with out of range inputs for Land proc."}, {"perc_out_ran_outp_land", e_tid_uchar, "%", 1, "1", "% of pixels with out of range outputs for Land proc."}, {"perc_out_ran_inp_ocean", e_tid_uchar, "%", 1, "1", "% of pixels with out of range inputs for Ocean proc."}, {"perc_out_ran_outp_ocean", e_tid_uchar, "%", 1, "1", "% of pixels with out of range outputs for Ocean proc."}, {"perc_out_ran_inp_case1", e_tid_uchar, "%", 1, "1", "% of pixels with out of range inputs for Case 1 proc."}, {"perc_out_ran_outp_case1", e_tid_uchar, "%", 1, "1", "% of pixels with out of range outputs for Case 1 proc."}, {"perc_out_ran_inp_case2", e_tid_uchar, "%", 1, "1", "% of pixels with. out of range inputs for Case 2 proc."}, {"perc_out_ran_outp_case2", e_tid_uchar, "%", 1, "1", "% of pixels with. out of range outputs for Case 2 proc."} }; static const struct RecordDescriptor MER_RR__2P_GADS_sfgi_meris_rec_data[] = { {"sf_alt", e_tid_float, NULL, 4, "1", "scaling factor - altitude"}, {"sf_rough", e_tid_float, NULL, 4, "1", "scaling factor - roughness"}, {"sf_zon_wind", e_tid_float, NULL, 4, "1", "scaling factor - zonal wind"}, {"sf_merr_wind", e_tid_float, NULL, 4, "1", "scaling factor - meridional wind"}, {"sf_atm_pres", e_tid_float, NULL, 4, "1", "scaling factor - atmospheric pressure"}, {"sf_ozone", e_tid_float, NULL, 4, "1", "scaling factor - ozone"}, {"sf_rel_humid", e_tid_float, NULL, 4, "1", "scaling factor - relative humidity"}, {"sf_reflec", e_tid_float, NULL, 4, "13", "scaling factor - reflectances"}, {"sf_algal_pig_ind", e_tid_float, NULL, 4, "1", "scaling factor - Algal pigment index"}, {"sf_yellow_subs", e_tid_float, NULL, 4, "1", "scaling factor - Yellow substance"}, {"sf_susp_sed", e_tid_float, NULL, 4, "1", "scaling factor - Suspended sediment"}, {"sf_aero_epsilon", e_tid_float, NULL, 4, "1", "scaling factor - Aerosol epsilon"}, {"sf_aer_opt_thick", e_tid_float, NULL, 4, "1", "scaling factor - Aerosol optical thickness"}, {"sf_cl_opt_thick", e_tid_float, NULL, 4, "1", "scaling factor - Cloud optical thickness"}, {"sf_surf_pres", e_tid_float, NULL, 4, "1", "scaling factor - Surface pressure"}, {"sf_wvapour", e_tid_float, NULL, 4, "1", "scaling factor - Water vapour"}, {"sf_photosyn_rad", e_tid_float, NULL, 4, "1", "scaling factor - Photosynthetically active radiation"}, {"sf_toa_veg", e_tid_float, NULL, 4, "1", "scaling factor - TOA Vegetation index"}, {"sf_boa_veg", e_tid_float, NULL, 4, "1", "scaling factor - BOA Vegetation index"}, {"sf_cloud_albedo", e_tid_float, NULL, 4, "1", "scaling factor - Cloud Albedo"}, {"sf_cloud_top_press", e_tid_float, NULL, 4, "1", "scaling factor - Cloud Top Pressure"}, {"off_reflec", e_tid_float, NULL, 4, "13", "offset - reflectances"}, {"off_algal", e_tid_float, "log10(mg.m-3)", 4, "1", "offset - Algal pigment index"}, {"off_yellow_subs", e_tid_float, "m-1", 4, "1", "offset - Yellow substance"}, {"off_total_susp", e_tid_float, "log10(g.m-3)", 4, "1", "offset - Total suspended matter"}, {"off_aero_epsilon", e_tid_float, NULL, 4, "1", "offset - Aerosol epsilon"}, {"off_aer_opt_thick", e_tid_float, NULL, 4, "1", "offset - Aerosol optical thickness"}, {"off_cl_opt_thick", e_tid_float, NULL, 4, "1", "offset - Cloud optical thickness"}, {"off_surf_pres", e_tid_float, "hPa", 4, "1", "offset - Surface pressure"}, {"off_wvapour", e_tid_float, "g.cm-2", 4, "1", "offset - Water vapour"}, {"off_photosyn_rad", e_tid_float, "W.m-2", 4, "1", "offset - Photosynthetically active radiation"}, {"off_toa_veg", e_tid_float, NULL, 4, "1", "offset - TOA Vegetation index"}, {"off_boa_veg", e_tid_float, NULL, 4, "1", "offset - BOA Vegetation index"}, {"off_cloud_albedo", e_tid_float, NULL, 4, "1", "offset - Cloud Albedo"}, {"off_cloud_top_press", e_tid_float, "hPa", 4, "1", "offset - Cloud Top Pressure"}, {"gain_set", e_tid_uchar, NULL, 1, "5*16", "Gain setting"}, {"sampl_rate", e_tid_uint, "(10-6) s", 4, "1", "sampling rate"}, {"sun_spec_flux", e_tid_float, "LU", 4, "15", "Sun Spectral Flux (for bands 1-15)"}, {"sf_rect_refl_nir", e_tid_float, NULL, 4, "1", "scaling factor - Rectified near infrared reflectance"}, {"off_rect_refl_nir", e_tid_float, NULL, 4, "1", "offset - Rectified near infrared reflectance"}, {"sf_rect_refl_red", e_tid_float, NULL, 4, "1", "scaling factor - Rectified infrared reflectance"}, {"off_rect_refl_red", e_tid_float, NULL, 4, "1", "offset - Rectified infrared reflectance"}, {"spare_1", e_tid_spare, NULL, 1, "44", "spare"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_14_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"wvapour_content_pix", e_tid_uchar, "g.cm-2", 1, "sceneRasterWidth", "Water vapour content pixels"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_15_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"algal_toavi_cl_pix", e_tid_uchar, "mg.m-3, or -, or hPa", 1, "sceneRasterWidth", "Algal I or TOAVI or cloud top pressure pixels"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_16_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"ys_tsm_pix", e_tid_uchar, NULL, 1, "2*sceneRasterWidth", "Yellow Substance, Total Suspended Matter or Rectified Reflectances pixels, interleaved by pixel"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_17_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"algal2_boavi_pix", e_tid_uchar, "mg.m-3 or -", 1, "sceneRasterWidth", "Algal II or BOAVI pixels"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_18_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"par_sp_cl_albe_pix", e_tid_uchar, "W.m-2 or -", 1, "sceneRasterWidth", "PAR or surface pressure or cloud albedo pixels"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_19_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"aer_cl_opt_pix", e_tid_uchar, NULL, 1, "2*sceneRasterWidth", "Aerosol Angstrom exponent or cloud type and optical thickness pixels, interleaved by pixel"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_19_IODD6_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"air_cl_opt_pix", e_tid_uchar, NULL, 1, "2*sceneRasterWidth", "Aerosol epsilon or cloud type and optical thickness pixels, interleaved by pixel"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_1_13_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of the measurement"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"norm_surf_reflec_pix", e_tid_ushort, NULL, 2, "sceneRasterWidth", "Normalised surface reflectance pixels"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_20_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"pixel_info", e_tid_uchar, "counts", 1, "3*sceneRasterWidth", "Flags associated with pixels"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_lr_large_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"pix_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, nadir view"}, {"pix_ls_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over land surface, nadir view"}, {"perc_cl_pix_ls_nad", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over land surface, nadir view"}, {"lat_corr_nad", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic latitude correction, nadir view"}, {"long_corr_nad", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic longitude correction, nadir view"}, {"sa_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (nadir view)"}, {"sd_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (nadir view)"}, {"sd_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (nadir view)"}, {"sd_37bt_clr_nad", e_tid_int, "%/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (nadir view)"}, {"sd_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (nadir view)"}, {"sd_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (nadir view)"}, {"sd_37bt_cl_nad", e_tid_int, "%/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"fail_flag_nad", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, nadir view"}, {"pix_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, forward view"}, {"pix_ls_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over land surface, forward view"}, {"perc_cl_pix_ls_for", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over land surface, forward view"}, {"lat_corr_for", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic latitude correction, forward view"}, {"long_corr_for", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic longitude correction, forward view"}, {"sa_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (forward view)"}, {"sd_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (forward view)"}, {"sd_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (forward view)"}, {"sd_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (forward view)"}, {"sd_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (forward view)"}, {"sd_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (forward view)"}, {"sd_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"fail_flag_for", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, forward view"}, {"pix_nsig_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels (N-Sigma), nadir view"}, {"pix_ss", e_tid_short, "%/100", 2, "1", "Percentage filled pixels over land surface"}, {"low_11bt_cl_nad", e_tid_short, "K/100", 2, "1", "Lowest 11 micron BT of all cloudy pixels, nadir view"}, {"corr_12bt_nad", e_tid_short, "K/100", 2, "1", "Corresponding 12 micron BT, nadir view"}, {"corr_37bt_nad", e_tid_short, "K/100", 2, "1", "Corresponding 3.7 micron BT, nadir view"}, {"corr_16ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 1.6 micron reflectance, nadir view"}, {"corr_87ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.87 micron reflectance, nadir view"}, {"corr_67ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.67 micron reflectance, nadir view"}, {"corr_55ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.55 micron reflectance, nadir view"}, {"low_11bt_cl_for", e_tid_short, "K/100", 2, "1", "Lowest 11 micron BT of all cloudy pixels, forward view"}, {"corr_12bt_for", e_tid_short, "K/100", 2, "1", "Corresponding 12 micron BT, forward view"}, {"corr_37bt_for", e_tid_short, "K/100", 2, "1", "Corresponding 3.7 micron BT, forward view"}, {"corr_16ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 1.6 micron reflectance, forward view"}, {"corr_87ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.87 micron reflectance, forward view"}, {"corr_67ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.67 micron reflectance, forward view"}, {"corr_55ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.55 micron reflectance, forward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_lr_small_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"pix_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, nadir view"}, {"pix_ls_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over land surface, nadir view"}, {"perc_cl_pix_ls_nad", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over land surface, nadir view"}, {"lat_corr_nad", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic latitude correction, nadir view"}, {"long_corr_nad", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic longitude correction, nadir view"}, {"sa_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (nadir view)"}, {"sa_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (nadir view)"}, {"sa_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (nadir view)"}, {"sa_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (nadir view)"}, {"sa_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (nadir view)"}, {"sa_37bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (nadir view)"}, {"sa_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"fail_flag_nad", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, nadir view"}, {"pix_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, forward view"}, {"pix_ss_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over land surface, forward view"}, {"perc_cl_pix_ss_for", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over land surface, forward view"}, {"lat_corr_for", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic latitude correction, forward view"}, {"long_corr_for", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic longitude correction, forward view"}, {"sa_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (forward view)"}, {"sa_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (forward view)"}, {"sa_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (forward view)"}, {"sa_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (forward view)"}, {"sa_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (forward view)"}, {"sa_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (forward view)"}, {"sa_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (forward view)"}, {"fail_flag_for", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, forward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_lst_large_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"m_lst", e_tid_short, "K/100", 2, "1", "mean land surface temperature (ST)"}, {"sd_lst", e_tid_short, "K/100", 2, "1", "standard deviation of land ST"}, {"pix_lst", e_tid_ushort, NULL, 2, "1", "Number of pixels in land surface temperature average"}, {"m_ndvi", e_tid_short, NULL, 2, "1", "mean NDVI"}, {"sd_ndvi", e_tid_short, NULL, 2, "1", "standard deviation of NDVI"}, {"pix_ndvi", e_tid_ushort, NULL, 2, "1", "Number of pixels in NDVI average"}, {"ast_conf_flags", e_tid_ushort, "flags", 2, "2", "AST confidence word"}, {"cl_top_temp_nad", e_tid_short, "K/100", 2, "1", "Cloud-top temperature, nadir view"}, {"perc_cl_cov_nad", e_tid_short, "%/100", 2, "1", "Percentage cloud-cover, nadir view"}, {"cl_top_temp_for", e_tid_short, "K/100", 2, "1", "Cloud-top temperature, forward view"}, {"perc_cl_cov_for", e_tid_short, "%/100", 2, "1", "Percentage cloud-cover, forward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_lst_small_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"m_lst", e_tid_short, "K/100", 2, "1", "mean land ST in cells"}, {"pix_lst", e_tid_ushort, NULL, 2, "1", "Number of pixels in land surface temperature average"}, {"m_ndvi", e_tid_short, NULL, 2, "1", "mean NDVI"}, {"pix_ndvi", e_tid_ushort, NULL, 2, "1", "Number of pixels in NDVI average"}, {"ast_conf_flags", e_tid_ushort, "flags", 2, "2", "AST confidence word"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_sr_large_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"pix_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, nadir view"}, {"pix_ss_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over sea surface, nadir view"}, {"clpix_ss_nad", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over sea surface, nadir view"}, {"sa_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (nadir view)"}, {"sd_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (nadir view)"}, {"sd_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (nadir view)"}, {"sd_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (nadir view)"}, {"sd_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (nadir view)"}, {"sd_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (nadir view)"}, {"sd_37bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"fail_flag_nad", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, nadir view"}, {"pix_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, forward view"}, {"pix_ss_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over sea surface, forward view"}, {"perc_cl_pix_ss_for", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over sea surface, forward view"}, {"sa_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (forward view)"}, {"sd_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (forward view)"}, {"sd_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (forward view)"}, {"sd_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (forward view)"}, {"sd_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (forward view)"}, {"sd_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (forward view)"}, {"sd_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"fail_flag_for", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, foward view"}, {"pix_nsig_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels (N-Sigma), nadir view"}, {"pix_ss", e_tid_short, "%/100", 2, "1", "Percentage filled pixels over sea surface"}, {"low_11bt_cl_nad", e_tid_short, "K/100", 2, "1", "Lowest 11 micron BT of all cloudy pixels, nadir view"}, {"corr_12bt_nad", e_tid_short, "K/100", 2, "1", "Corresponding 12 micron BT, nadir view"}, {"corr_37bt_nad", e_tid_short, "K/100", 2, "1", "Corresponding 3.7 micron BT, nadir view"}, {"corr_16ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 1.6 micron reflectance, nadir view"}, {"corr_87ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.87 micron reflectance, nadir view"}, {"corr_67ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.67 micron reflectance, nadir view"}, {"corr_55ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.55 micron reflectance, nadir view"}, {"low_11bt_cl_for", e_tid_short, "K/100", 2, "1", "Lowest 11 micron BT of all cloudy pixels, forward view"}, {"corr_12bt_for", e_tid_short, "K/100", 2, "1", "Corresponding 12 micron BT, forward view"}, {"corr_37bt_for", e_tid_short, "K/100", 2, "1", "Corresponding 3.7 micron BT, forward view"}, {"corr_16ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 1.6 micron reflectance, forward view"}, {"corr_87ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.87 micron reflectance, forward view"}, {"corr_67ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.67 micron reflectance, forward view"}, {"corr_55ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.55 micron reflectance, forward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_sr_small_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"pix_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, nadir view"}, {"pix_ss_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over sea surface, nadir view"}, {"clpix_ss_nad", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over sea surface, nadir view"}, {"sa_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (nadir view)"}, {"sa_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (nadir view)"}, {"sa_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (nadir view)"}, {"sa_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (nadir view)"}, {"sa_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (nadir view)"}, {"sa_37bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (nadir view)"}, {"sa_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"fail_flag_nad", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, nadir view"}, {"pix_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, forward view"}, {"pix_ss_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over sea surface, forward view"}, {"perc_cl_pix_ss_for", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over sea surface, forward view"}, {"sa_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (forward view)"}, {"sa_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (forward view)"}, {"sa_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (forward view)"}, {"sa_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (forward view)"}, {"sa_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (forward view)"}, {"sa_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (forward view)"}, {"sa_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (forward view)"}, {"fail_flag_for", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, foward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_sst_large_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"m_nad", e_tid_short, "K/100", 2, "1", "mean nadir-only SST"}, {"sd_nad", e_tid_short, "K/100", 2, "1", "standard deviation of nadir-only SST"}, {"pix_nad", e_tid_ushort, NULL, 2, "1", "Number of pixels in nadir-only average"}, {"m_dual_vw", e_tid_short, "K/100", 2, "1", "mean dual-view SST"}, {"sd_dual_vw", e_tid_short, "K/100", 2, "1", "standard deviation of dual-view SST"}, {"pix_dual_vw", e_tid_ushort, NULL, 2, "1", "Number of pixels in dual view average"}, {"ast_conf_flags", e_tid_ushort, "flags", 2, "2", "AST confidence word"}, {"cl_top_temp_nad", e_tid_short, "K/100", 2, "1", "Cloud-top temperature, nadir view"}, {"perc_cl_cov_nad", e_tid_short, "%/100", 2, "1", "Percentage cloud-cover, nadir view"}, {"cl_top_temp_for", e_tid_short, "K/100", 2, "1", "Cloud-top temperature, forward view"}, {"perc_cl_cov_for", e_tid_short, "%/100", 2, "1", "Percentage cloud-cover, forward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_sst_small_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"m_nad", e_tid_short, "K/100", 2, "1", "mean nadir-only SST"}, {"pix_nad", e_tid_ushort, NULL, 2, "1", "Number of pixels in nadir-only average"}, {"m_dual_vw", e_tid_short, "K/100", 2, "1", "mean dual-view SST"}, {"pix_dual_vw", e_tid_ushort, NULL, 2, "1", "Number of pixels in dual-view average"}, {"ast_conf_flags", e_tid_ushort, "flags", 2, "2", "AST confidence word"} }; static const struct RecordDescriptor ATS_MET_2P_meteo_user_prod_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"rec_qua_ind", e_tid_char, NULL, 1, "1", "Record Quality indicator"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of 10 arcmin cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of 10 arcmin cell"}, {"sa_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Nadir spatially averaged 12 micron BT of all clear pixels 10 arcmin cells"}, {"sa_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Nadir spatially averaged 11 micron BT of all clear pixels in 10 arcmin cells"}, {"sa_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Nadir spatially averaged 3.7 micron BT of all clear pixels in 10 arcmin cells"}, {"sa_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Forward spatially averaged 12 micron BT of all clear pixels in 10 arcmin cells"}, {"sa_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Forward spatially averaged 11 micron BT of all clear pixels in 10 arcmin cells"}, {"sa_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Forward spatially averaged 3.7 micron BT of all clear pixels in 10 arcmin cells"}, {"m_actrk_pix_num", e_tid_short, "none", 2, "1", "Mean across-track pixel number"}, {"m_nad", e_tid_short, "K/100", 2, "1", "Mean nadir-only SST 10 arcmin cells"}, {"pix_nad", e_tid_ushort, "none", 2, "1", "Number of pixels in nadir-only average, 10 arcmin cells"}, {"m_dual_vw", e_tid_short, "K/100", 2, "1", "Mean dual-view SST in 10 arcmin cells"}, {"pix_dual_vw", e_tid_ushort, "none", 2, "1", "Number of pixels in dual-view average, 10 arcmin cells"}, {"ast_conf_flags", e_tid_ushort, "flags", 2, "2", "AST confidence word"} }; static const struct RecordDescriptor ATS_NR__2P_ADSR_sq_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment flag(set to 1 if all MDSRs corresponding to this ADSR are blank, set to 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"scan_num", e_tid_ushort, NULL, 2, "1", "image scan number"}, {"pv_nad_null_pac", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans null packet"}, {"pv_nad_fail_val", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans failing basic validation"}, {"pv_nad_fail_crc_chk", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans failing CRC check"}, {"pv_nad_show_buf_full", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans showing buffers full"}, {"pv_nad_scan_jitt", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans showing scan jitter"}, {"per_cloud_pix", e_tid_short, "0.01 %", 2, "1", "percentage of cloudy pixels"}, {"per_ndvi_inv", e_tid_short, "0.01 %", 2, "1", "percentage of NDVI invalid"}, {"per_sst_for_inv", e_tid_short, "0.01 %", 2, "1", "percentage of SST (nadir view) invalid"}, {"per_sst_dual_inv", e_tid_short, "0.01 %", 2, "1", "percentage of SST (dual view) invalid"}, {"pv_nad_scan_error", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans - all other errors"}, {"pv_for_null_pac", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans null packet"}, {"pv_for_fail_val", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans failing basic validation"}, {"pv_for_fail_crc_chk", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans failing CRC check"}, {"pv_for_show_buf_full", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans showing buffers full"}, {"pv_for_scan_jitt", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans showing scan jitter"}, {"resv_char_5", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_6", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_7", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_8", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"pv_for_scan_error", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans - all other errors"}, {"spare_2", e_tid_spare, NULL, 28, "1", "Spare"} }; static const struct RecordDescriptor ATS_NR__2P_MDSR_dp_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"conf_wd_flags", e_tid_ushort, "flags", 2, "512", "confidence words (Defined in Table 7.5.1.7.8 3)"}, {"nad_field", e_tid_short, "K/100", 2, "512", "nadir field (Note 1)"}, {"comb_field", e_tid_short, "See Note 1", 2, "512", "combined field (Note 1)"} }; static const struct RecordDescriptor ATS_TOA_1P_ADSR_loc_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if all MDSRs corresponding to this ADSR are blank, set to 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"tie_pt_lat", e_tid_int, "(1e-6) degrees", 4, "23", "tie point latitudes"}, {"tie_pt_long", e_tid_int, "(1e-6) degrees", 4, "23", "tie point longitudes"}, {"lat_corr_nadv", e_tid_int, "(1e-6) degrees", 4, "23", "latitude corrections, nadir view"}, {"long_corr_nadv", e_tid_int, "(1e-6) degrees", 4, "23", "longitude corrections, nadir view"}, {"lat_corr_forv", e_tid_int, "(1e-6) degrees", 4, "23", "latitude corrections, forward view"}, {"long_corr_forv", e_tid_int, "(1e-6) degrees", 4, "23", "longitude corrections, forward view"}, {"topo_alt", e_tid_short, "metres", 2, "23", "Topographic Altitude"}, {"spare_2", e_tid_spare, NULL, 8, "1", "Spare"} }; static const struct RecordDescriptor ATS_TOA_1P_ADSR_pix_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment flag (always set to zero for this ADS)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"instr_scan_num", e_tid_ushort, NULL, 2, "512", "instrument scan number"}, {"pix_num", e_tid_ushort, NULL, 2, "512", "pixel number"} }; static const struct RecordDescriptor ATS_TOA_1P_ADSR_sa_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADS)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"tie_pt_sol_elev", e_tid_int, "mdeg", 4, "11", "tie point solar elevation"}, {"tie_pt_sat_elev_nad", e_tid_int, "mdeg", 4, "11", "tie point satellite elevation nadir"}, {"tie_pt_sol_az", e_tid_int, "mdeg", 4, "11", "tie point solar azimuth"}, {"tie_pt_sat_azi", e_tid_int, "mdeg", 4, "11", "tie point satellite azimuth"}, {"spare_2", e_tid_spare, NULL, 20, "1", "Spare"} }; static const struct RecordDescriptor ATS_TOA_1P_ADSR_scan_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Scan UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADS)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"instr_scan_num", e_tid_ushort, NULL, 2, "1", "instrument scan number"}, {"tie_pix_x", e_tid_int, "m", 4, "99", "tie pixel x coordinate"}, {"tie_pix_y", e_tid_int, "m", 4, "99", "tie pixel y coordinate"}, {"spare_2", e_tid_spare, NULL, 20, "1", "spare"} }; static const struct RecordDescriptor ATS_TOA_1P_ADSR_sq_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment flag(set to 1 if all MDSRs corresponding to this ADSR are blank, set to 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"scan_num", e_tid_ushort, NULL, 2, "1", "scan number"}, {"pv_nad_null_pac", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans null packet"}, {"pv_nad_fail_val", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans failing basic validation"}, {"pv_nad_fail_crc_chk", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans failing CRC check"}, {"pv_nad_show_buf_full", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans showing buffers full"}, {"pv_nad_scan_jitt", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans showing scan jitter"}, {"resv_char_1", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_2", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_3", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_4", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"pv_nad_scan_error", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans - all other errors"}, {"pv_for_null_pac", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans null packet"}, {"pv_for_fail_val", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans failing basic validation"}, {"pv_for_fail_crc_chk", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans failing CRC check"}, {"pv_for_show_buf_full", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans showing buffers full"}, {"pv_for_scan_jitt", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans showing scan jitter"}, {"resv_char_5", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_6", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_7", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_8", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"pv_for_scan_error", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans - all other errors"}, {"spare_2", e_tid_spare, NULL, 28, "1", "Spare"} }; static const struct RecordDescriptor ATS_TOA_1P_MDSR_brgt_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"bt_rad_pix", e_tid_short, "K/100%/100", 2, "512", "BT or refectance for pixel 0 - 511(Units are K/100 for BT, %/100 for reflectance. Small negative values may be used to represent channel-specific exceptional values)."} }; static const struct RecordDescriptor ATS_TOA_1P_MDSR_cl_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"cl_land_flags", e_tid_ushort, "flags", 2, "512", "cloud/land flags"} }; static const struct RecordDescriptor ATS_TOA_1P_MDSR_conf_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"conf_wd_flags", e_tid_ushort, "flags", 2, "512", "Confidence words"} }; static const struct RecordDescriptor ATS_VC1_AX_GADS_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of cal in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment flag (always set to zero for this flag)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"slp_16_mic", e_tid_float, NULL, 4, "1", "1.6 micron slope"}, {"slp_087_mic", e_tid_float, NULL, 4, "1", "0.870 micron slope"}, {"slp_067_mic", e_tid_float, NULL, 4, "1", "0.670 micron slope"}, {"slp_055_mic", e_tid_float, NULL, 4, "1", "0.555 micron slope"}, {"asc_time", e_tid_time, "MJD", 12, "1", "UTC at ascending node crossing, in MJD format"}, {"ave_mon_cnt", e_tid_float, NULL, 4, "1", "Average Monitor count"}, {"sd_mon_cnt", e_tid_float, NULL, 4, "1", "Standard deviation of Monitor count"}, {"sol_irr_16", e_tid_float, NULL, 4, "1", "Solar irradiance (1.6 micron)"}, {"sol_irr_087", e_tid_float, NULL, 4, "1", "Solar irradiance (0.870 micron)"}, {"sol_irr_067", e_tid_float, NULL, 4, "1", "Solar irradiance (0.670 micron)"}, {"sol_irr_055", e_tid_float, NULL, 4, "1", "Solar irradiance (0.555 micron)"}, {"ave_vispix_16", e_tid_float, NULL, 4, "1", "Average VISCAL Pixel Counts (1.6 (m)"}, {"ave_vispix_087", e_tid_float, NULL, 4, "1", "Average VISCAL Pixel Counts (0.87 (m)"}, {"ave_vispix_067", e_tid_float, NULL, 4, "1", "Average VISCAL Pixel Counts (0.67 (m)"}, {"ave_vispix_055", e_tid_float, NULL, 4, "1", "Average VISCAL Pixel Counts (0.55 (m)"}, {"vis_pixnois_16", e_tid_float, NULL, 4, "1", "VISCAL Pixel Noise (1.6 micron)"}, {"vis_pixnois_087", e_tid_float, NULL, 4, "1", "VISCAL Pixel Noise (0.87 micron)"}, {"vis_pixnois_067", e_tid_float, NULL, 4, "1", "VISCAL Pixel Noise (0.67 micron)"}, {"vis_pixnois_055", e_tid_float, NULL, 4, "1", "VISCAL Pixel Noise (0.55 micron)"}, {"ave_xbb_16", e_tid_float, NULL, 4, "1", "Average -X BB Pixel Counts (1.6 (m)"}, {"ave_xbb_cnt_087", e_tid_float, NULL, 4, "1", "Average -X BB Pixel Counts (0.87 (m)"}, {"ave_xbb_cnt_067", e_tid_float, NULL, 4, "1", "Average -X BB Pixel Counts (0.67 (m)"}, {"ave_xbb_cnt_055", e_tid_float, NULL, 4, "1", "Average -X BB Pixel Counts (0.55 (m)"}, {"xbb_nois_16", e_tid_float, NULL, 4, "1", "-X BB Pixel Noise (1.6 micron)"}, {"xbb_nois_087", e_tid_float, NULL, 4, "1", "-X BB Pixel Noise (0.87 micron)"}, {"xbb_nois_067", e_tid_float, NULL, 4, "1", "-X BB Pixel Noise (0.67 micron)"}, {"xbb_nois_055", e_tid_float, NULL, 4, "1", "-X BB Pixel Noise (0.55 micron)"}, {"parity_char", e_tid_short, NULL, 2, "1", "(Reserved for parity indicator)"}, {"spare_2", e_tid_spare, NULL, 20, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Antenna_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler azimuth time at which pattern applies"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"beam_id", e_tid_string, "ascii", 3, "1", "Beam ID to which pattern applies SS1 to SS5 or NSØ"}, {"elevation_pattern.slant_range_time", e_tid_float, "ns", 4, "11", "2 way slant range times"}, {"elevation_pattern.elevation_angles", e_tid_float, "degrees", 4, "11", "Corresponding elevation angles"}, {"elevation_pattern.antenna_pattern", e_tid_float, "dB", 4, "11", "Corresponding two-way antenna elevation pattern values"}, {"spare_1", e_tid_spare, NULL, 14, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Chirp_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler azimuth time in azimuth at which estimate applies"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"beam_id", e_tid_string, "ascii", 3, "1", "Beam ID: SS1, SS2, SS3, SS4, or SS5 for WS and GM images. Set to NSØ for AP, IM, and WV images."}, {"polar", e_tid_string, "ascii", 3, "1", "Tx/Rx polarization H/H, H/V, V/V, or V/H"}, {"chirp_width", e_tid_float, "samples", 4, "1", "3-dB pulse width of chirp replica cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_sidelobe", e_tid_float, "dB", 4, "1", "First side lobe level of chirp replica cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_islr", e_tid_float, "dB", 4, "1", "ISLR of chirp replica cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_peak_loc", e_tid_float, "samples", 4, "1", "Peak location of cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_power", e_tid_float, "dB", 4, "1", "Chirp power"}, {"elev_corr_factor", e_tid_float, NULL, 4, "1", "Elevation gain correction scaling factor applied to range compressed samples"}, {"spare_1", e_tid_spare, NULL, 16, "1", "Spare"}, {"cal_pulse_info.1.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 1)"}, {"cal_pulse_info.1.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 1)"}, {"cal_pulse_info.1.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 1)"}, {"cal_pulse_info.1.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 1)"}, {"cal_pulse_info.2.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 2)"}, {"cal_pulse_info.2.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 2)"}, {"cal_pulse_info.2.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 2)"}, {"cal_pulse_info.2.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 2)"}, {"cal_pulse_info.3.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 3)"}, {"cal_pulse_info.3.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 3)"}, {"cal_pulse_info.3.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 3)"}, {"cal_pulse_info.3.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 3)"}, {"cal_pulse_info.4.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 4)"}, {"cal_pulse_info.4.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 4)"}, {"cal_pulse_info.4.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 4)"}, {"cal_pulse_info.4.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 4)"}, {"cal_pulse_info.5.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 5)"}, {"cal_pulse_info.5.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 5)"}, {"cal_pulse_info.5.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 5)"}, {"cal_pulse_info.5.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 5)"}, {"cal_pulse_info.6.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 6)"}, {"cal_pulse_info.6.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 6)"}, {"cal_pulse_info.6.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 6)"}, {"cal_pulse_info.6.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 6)"}, {"cal_pulse_info.7.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 7)"}, {"cal_pulse_info.7.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 7)"}, {"cal_pulse_info.7.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 7)"}, {"cal_pulse_info.7.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 7)"}, {"cal_pulse_info.8.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 8)"}, {"cal_pulse_info.8.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 8)"}, {"cal_pulse_info.8.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 8)"}, {"cal_pulse_info.8.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 8)"}, {"cal_pulse_info.9.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 9)"}, {"cal_pulse_info.9.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 9)"}, {"cal_pulse_info.9.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 9)"}, {"cal_pulse_info.9.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 9)"}, {"cal_pulse_info.10.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 10)"}, {"cal_pulse_info.10.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 10)"}, {"cal_pulse_info.10.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 10)"}, {"cal_pulse_info.10.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 10)"}, {"cal_pulse_info.11.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 11)"}, {"cal_pulse_info.11.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 11)"}, {"cal_pulse_info.11.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 11)"}, {"cal_pulse_info.11.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 11)"}, {"cal_pulse_info.12.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 12)"}, {"cal_pulse_info.12.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 12)"}, {"cal_pulse_info.12.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 12)"}, {"cal_pulse_info.12.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 12)"}, {"cal_pulse_info.13.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 13)"}, {"cal_pulse_info.13.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 13)"}, {"cal_pulse_info.13.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 13)"}, {"cal_pulse_info.13.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 13)"}, {"cal_pulse_info.14.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 14)"}, {"cal_pulse_info.14.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 14)"}, {"cal_pulse_info.14.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 14)"}, {"cal_pulse_info.14.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 14)"}, {"cal_pulse_info.15.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 15)"}, {"cal_pulse_info.15.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 15)"}, {"cal_pulse_info.15.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 15)"}, {"cal_pulse_info.15.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 15)"}, {"cal_pulse_info.16.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 16)"}, {"cal_pulse_info.16.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 16)"}, {"cal_pulse_info.16.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 16)"}, {"cal_pulse_info.16.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 16)"}, {"cal_pulse_info.17.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 17)"}, {"cal_pulse_info.17.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 17)"}, {"cal_pulse_info.17.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 17)"}, {"cal_pulse_info.17.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 17)"}, {"cal_pulse_info.18.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 18)"}, {"cal_pulse_info.18.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 18)"}, {"cal_pulse_info.18.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 18)"}, {"cal_pulse_info.18.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 18)"}, {"cal_pulse_info.19.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 19)"}, {"cal_pulse_info.19.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 19)"}, {"cal_pulse_info.19.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 19)"}, {"cal_pulse_info.19.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 19)"}, {"cal_pulse_info.20.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 20)"}, {"cal_pulse_info.20.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 20)"}, {"cal_pulse_info.20.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 20)"}, {"cal_pulse_info.20.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 20)"}, {"cal_pulse_info.21.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 21)"}, {"cal_pulse_info.21.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 21)"}, {"cal_pulse_info.21.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 21)"}, {"cal_pulse_info.21.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 21)"}, {"cal_pulse_info.22.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 22)"}, {"cal_pulse_info.22.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 22)"}, {"cal_pulse_info.22.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 22)"}, {"cal_pulse_info.22.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 22)"}, {"cal_pulse_info.23.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 23)"}, {"cal_pulse_info.23.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 23)"}, {"cal_pulse_info.23.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 23)"}, {"cal_pulse_info.23.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 23)"}, {"cal_pulse_info.24.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 24)"}, {"cal_pulse_info.24.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 24)"}, {"cal_pulse_info.24.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 24)"}, {"cal_pulse_info.24.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 24)"}, {"cal_pulse_info.25.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 25)"}, {"cal_pulse_info.25.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 25)"}, {"cal_pulse_info.25.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 25)"}, {"cal_pulse_info.25.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 25)"}, {"cal_pulse_info.26.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 26)"}, {"cal_pulse_info.26.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 26)"}, {"cal_pulse_info.26.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 26)"}, {"cal_pulse_info.26.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 26)"}, {"cal_pulse_info.27.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 27)"}, {"cal_pulse_info.27.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 27)"}, {"cal_pulse_info.27.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 27)"}, {"cal_pulse_info.27.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 27)"}, {"cal_pulse_info.28.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 28)"}, {"cal_pulse_info.28.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 28)"}, {"cal_pulse_info.28.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 28)"}, {"cal_pulse_info.28.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 28)"}, {"cal_pulse_info.29.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 29)"}, {"cal_pulse_info.29.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 29)"}, {"cal_pulse_info.29.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 29)"}, {"cal_pulse_info.29.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 29)"}, {"cal_pulse_info.30.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 30)"}, {"cal_pulse_info.30.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 30)"}, {"cal_pulse_info.30.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 30)"}, {"cal_pulse_info.30.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 30)"}, {"cal_pulse_info.31.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 31)"}, {"cal_pulse_info.31.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 31)"}, {"cal_pulse_info.31.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 31)"}, {"cal_pulse_info.31.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 31)"}, {"cal_pulse_info.32.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 32)"}, {"cal_pulse_info.32.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 32)"}, {"cal_pulse_info.32.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 32)"}, {"cal_pulse_info.32.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 32)"}, {"spare_2", e_tid_spare, NULL, 16, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Dop_Cen_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler azimuth time at which estimate applies"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"slant_range_time", e_tid_float, "ns", 4, "1", "2-way slant range time origin (t0)"}, {"dop_coef", e_tid_float, "HzHz/sHz/s2Hz/s3Hz/s4", 4, "5", "Doppler centroid coefficients as a function of slant range time: D0, D1, D2, D3, and D4. where Doppler Centroid = D0 + D1(tSR-t0) + D2(tSR-t0)2 + D3(tSR-t0)3 + D4(tSR-t0)4"}, {"dop_conf", e_tid_float, NULL, 4, "1", "Doppler Centroid Confidence Measure. Value between 0 and 1, 0 = poorest confidence, 1= highest confidence. If multiple Doppler Centroid estimates were performed, this value is the lowest confidence value attained."}, {"dop_thresh_flag", e_tid_uchar, "flag", 1, "1", "Doppler Confidence Below Threshold Flag. 0 = confidence above threshold, Doppler Centroid calculated from data. 1 = confidence below threshold, Doppler Centroid calculated from orbit."}, {"spare_1", e_tid_spare, NULL, 13, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Geo_Grid_ADSR_asar_rec_data[] = { {"first_zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time in azimuth of first line of the granule. Gives azimuth location of grid line for first line of the granule."}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if all MDSRs corresponding to this ADSR are blank, set to zero otherwise)."}, {"line_num", e_tid_uint, NULL, 4, "1", "Range line number corresponding to the first line of the granule"}, {"num_lines", e_tid_uint, "lines", 4, "1", "Number of output lines in this granule"}, {"sub_sat_track", e_tid_float, "deg.", 4, "1", "Subsatellite track heading (relative to North) for first line of granule. This is the heading on the ground (includes Earth rotation)."}, {"first_line_tie_points.samp_numbers", e_tid_uint, NULL, 4, "11", "Range sample number. Gives the range location of the grid points. First range sample is 1, last is M. Zero filled samples are included."}, {"first_line_tie_points.slant_range_times", e_tid_float, "ns", 4, "11", "2 way slant range time to range sample"}, {"first_line_tie_points.angles", e_tid_float, "deg.", 4, "11", "Incidence Angle at range sample"}, {"first_line_tie_points.lats", e_tid_int, "(1e-6) degrees", 4, "11", "geodetic latitude (positive north)"}, {"first_line_tie_points.longs", e_tid_int, "(1e-6) degrees", 4, "11", "geodetic longitude (positive east)"}, {"spare_1", e_tid_spare, NULL, 22, "1", "Spare"}, {"last_zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero doppler time for the last line of the granule"}, {"last_line_tie_points.samp_numbers", e_tid_uint, NULL, 4, "11", "Range sample number. Gives the range location of the grid points. First range sample is 1, last is M."}, {"last_line_tie_points.slant_range_times", e_tid_float, "ns", 4, "11", "2 way slant range time to range sample"}, {"last_line_tie_points.angles", e_tid_float, "deg.", 4, "11", "Incidence Angle at range sample"}, {"last_line_tie_points.lats", e_tid_int, "(1e-6) degrees", 4, "11", "geodetic latitude (positive north)"}, {"last_line_tie_points.longs", e_tid_int, "(1e-6) degrees", 4, "11", "geodetic longitude (positive east)"}, {"spare_2", e_tid_spare, NULL, 22, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Image_MDSR_BP_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time (MJD format)"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"line_num", e_tid_uint, NULL, 4, "1", "Range line number. Numbered sequentially, for each product (or slice) first range line in MDS is 1"}, {"proc_data", e_tid_uchar, NULL, 1, "sceneRasterWidth", "SAR Processed Data for Browse Products (detected data)"} }; static const struct RecordDescriptor ASAR_Image_MDSR_Gen_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time (MJD format)"}, {"quality_flag", e_tid_char, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"line_num", e_tid_uint, NULL, 4, "1", "Range line number. Numbered sequentially, for each product (or slice) first range line in MDS is 1"}, {"proc_data", e_tid_ushort, NULL, 2, "sceneRasterWidth", "SAR Processed Data. Real samples (detected products)"} }; static const struct RecordDescriptor ASAR_Image_MDSR_SLC_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time (MJD format)"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"line_num", e_tid_uint, NULL, 4, "1", "Range line number. Numbered sequentially, for each product (or slice) first range line in MDS is 1"}, {"proc_data", e_tid_short, NULL, 2, "2*sceneRasterWidth", "SAR Processed Data for SLC products. Alternates Real Part, Imaginary Part, Real Part Imaginary Part)"} }; static const struct RecordDescriptor ASAR_Main_ADSR_asar_rec_data[] = { {"first_zero_doppler_time", e_tid_time, "MJD", 12, "1", "First Zero Doppler Azimuth time of MDS which this data set describes Time of first range line in the MDS described by this data set."}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"last_zero_doppler_time", e_tid_time, "MJD", 12, "1", "Last Zero Doppler Azimuth time of MDS which this data set describes Time of last range line in the MDS described by this data set"}, {"work_order_id", e_tid_string, "ascii", 12, "1", "Work Order ID (left-justified)"}, {"time_diff", e_tid_float, "s", 4, "1", "Time difference between sensing time of first input line and zero Doppler time of first output image line (tdelta). (TBC)May be used during child product extraction from a stripline product (TBC). Left blank (set to zero) for non-stripline products."}, {"swath_id", e_tid_string, "ascii", 3, "1", "Swath number IS1, IS2, IS3, IS4, IS5, IS6, or IS7 for IM, WV and AP modes.Set to WSØ for WS and GM modes"}, {"range_spacing", e_tid_float, "m", 4, "1", "Range sample spacing"}, {"azimuth_spacing", e_tid_float, "m", 4, "1", "Azimuth sample spacing at image center"}, {"line_time_interval", e_tid_float, "s", 4, "1", "Azimuth sample spacing in time (Line Time Interval)"}, {"num_output_lines", e_tid_uint, "lines", 4, "1", "Number of output range lines in the image described by this ADS"}, {"num_samples_per_line", e_tid_uint, "samples", 4, "1", "Number of samples per output range line (includes zero filled samples)"}, {"data_type", e_tid_string, "ascii", 5, "1", "Output data type. SWORD, UWORD, or UBYTE"}, {"spare_1", e_tid_spare, NULL, 51, "1", "Spare"}, {"data_analysis_flag", e_tid_uchar, "flag", 1, "1", "Raw Data Analysis used for Raw Data Correction. 0 = correction done using default parameters. 1 = correction done using raw data analysis results."}, {"ant_elev_corr_flag", e_tid_uchar, "flag", 1, "1", "Antenna Elevation Pattern Correction Applied. 0 = no correction applied. 1 = correction applied."}, {"chirp_extract_flag", e_tid_uchar, "flag", 1, "1", "Reconstructed Chirp used. 0 = nominal chirp replica used. 1 = reconstructed chirp used."}, {"srgr_flag", e_tid_uchar, "flag", 1, "1", "Slant Range to Ground Range Conversion Applied. 0 = no conversion applied. 1 = conversion applied"}, {"dop_cen_flag", e_tid_uchar, "flag", 1, "1", "Doppler Centroid Estimation Performed. 0 = no estimation done. 1 = estimation done."}, {"dop_amb_flag", e_tid_uchar, "flag", 1, "1", "Doppler Ambiguity Estimation Performed. 0 = no estimate done. 1 = estimate done"}, {"range_spread_comp_flag", e_tid_uchar, "flag", 1, "1", "Range-spreading loss compensation Applied. 0 = no compensation applied. 1 = compensation applied."}, {"detected_flag", e_tid_uchar, "flag", 1, "1", "Detection Applied. 0 = output product is complex. 1 = output product was detected."}, {"look_sum_flag", e_tid_uchar, "flag", 1, "1", "Look Summation Performed. 0 = product is single look. 1 = product is multi-looked."}, {"rms_equal_flag", e_tid_uchar, "flag", 1, "1", "RMS Equalization performed. 0= rms equalization not performed during FBAQ decoding. 1 = rms equalization performed during FBAQ decoding."}, {"ant_scal_flag", e_tid_uchar, "flag", 1, "1", "Antenna Elevation Gain Scaling Factor Applied. 0= no scaling factor applied. 1 = scaling factor applied."}, {"vga_com_echo_flag", e_tid_uchar, "flag", 1, "1", "Receive Gain Droop Compensation Applied to Echo Data. 0 = no compensation applied. 1 = compensation applied."}, {"vga_com_pulse_2_flag", e_tid_uchar, "flag", 1, "1", "Receive Gain Droop Compensation Applied Calibration Pulse P2. 0 = no compensation applied. 1 = compensation applied."}, {"vga_com_pulse_zero_flag", e_tid_uchar, "flag", 1, "1", "Receive Gain Droop Compensation Applied Calibration Pulse P2 Order Zero: Nominal Time Delay Applied. 0 = no compensation applied. 1 = compensation applied."}, {"inv_filt_comp_flag", e_tid_uchar, "flag", 1, "1", "Inverse FIlter used for range compression (GM Mode only). 0 = matched filter used for range compression. 1 = inverse filter used for range compression"}, {"spare_2", e_tid_spare, NULL, 6, "1", "Spare"}, {"raw_data_analysis.1.num_gaps", e_tid_uint, "gaps", 4, "1", "Number of input data gaps (a gap is defined as a predetermined number of range lines) (record 1)"}, {"raw_data_analysis.1.num_missing_lines", e_tid_uint, "lines", 4, "1", "Number of missing lines, excluding data gaps (record 1)"}, {"raw_data_analysis.1.range_samp_skip", e_tid_uint, "samples", 4, "1", "Range sample skipping factor for raw data analysis (record 1)"}, {"raw_data_analysis.1.range_lines_skip", e_tid_uint, "lines", 4, "1", "Range lines skipping factor for raw data analysis (record 1)"}, {"raw_data_analysis.1.calc_i_bias", e_tid_float, NULL, 4, "1", "Calculated I channel bias (record 1)"}, {"raw_data_analysis.1.calc_q_bias", e_tid_float, NULL, 4, "1", "Calculated Q channel bias (record 1)"}, {"raw_data_analysis.1.calc_i_std_dev", e_tid_float, NULL, 4, "1", "Calculated I channel standard deviation (record 1)"}, {"raw_data_analysis.1.calc_q_std_dev", e_tid_float, NULL, 4, "1", "Calculated Q channel standard deviation (record 1)"}, {"raw_data_analysis.1.calc_gain", e_tid_float, NULL, 4, "1", "Calculated I/Q gain imbalance (record 1)"}, {"raw_data_analysis.1.calc_quad", e_tid_float, NULL, 4, "1", "Calculated I/Q quadrature departure (record 1)"}, {"raw_data_analysis.1.i_bias_max", e_tid_float, NULL, 4, "1", "I bias upper bound (record 1)"}, {"raw_data_analysis.1.i_bias_min", e_tid_float, NULL, 4, "1", "I bias lower bound (record 1)"}, {"raw_data_analysis.1.q_bias_max", e_tid_float, NULL, 4, "1", "Q bias upper bound (record 1)"}, {"raw_data_analysis.1.q_bias_min", e_tid_float, NULL, 4, "1", "Q bias lower bound (record 1)"}, {"raw_data_analysis.1.gain_min", e_tid_float, NULL, 4, "1", "I/Q gain lower bound (record 1)"}, {"raw_data_analysis.1.gain_max", e_tid_float, NULL, 4, "1", "I/Q gain upper bound (record 1)"}, {"raw_data_analysis.1.quad_min", e_tid_float, NULL, 4, "1", "I/Q quadrature departure lower bound (record 1)"}, {"raw_data_analysis.1.quad_max", e_tid_float, NULL, 4, "1", "I/Q quadrature departure upper bound (record 1)"}, {"raw_data_analysis.1.i_bias_flag", e_tid_uchar, "flag", 1, "1", "I bias significance. 0 = I bias falls within acceptable range. 1 = I bias falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.q_bias_flag", e_tid_uchar, "flag", 1, "1", "Q bias Significance. 0 = Q bias falls within acceptable range. 1 = Q bias falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.gain_flag", e_tid_uchar, "flag", 1, "1", "I/Q Gain Significance. 0 = Gain falls within acceptable range. 1 = Gain falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.quad_flag", e_tid_uchar, "flag", 1, "1", "I/Q Quadrature Departure Significance. 0 = Quadrature departure falls within acceptable range. 1 =Quadrature departure falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.used_i_bias", e_tid_float, NULL, 4, "1", "I channel bias used for correction (may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_q_bias", e_tid_float, NULL, 4, "1", "Q channel bias used for correction (may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_gain", e_tid_float, NULL, 4, "1", "I/Q gain imbalance used for correction (may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_quad", e_tid_float, NULL, 4, "1", "I/Q quadrature departure used for correction (may be different from measured value) (record 1)"}, {"raw_data_analysis.2.num_gaps", e_tid_uint, "gaps", 4, "1", "Number of input data gaps (a gap is defined as a predetermined number of range lines) (record 2)"}, {"raw_data_analysis.2.num_missing_lines", e_tid_uint, "lines", 4, "1", "Number of missing lines, excluding data gaps (record 2)"}, {"raw_data_analysis.2.range_samp_skip", e_tid_uint, "samples", 4, "1", "Range sample skipping factor for raw data analysis (record 2)"}, {"raw_data_analysis.2.range_lines_skip", e_tid_uint, "lines", 4, "1", "Range lines skipping factor for raw data analysis (record 2)"}, {"raw_data_analysis.2.calc_i_bias", e_tid_float, NULL, 4, "1", "Calculated I channel bias (record 2)"}, {"raw_data_analysis.2.calc_q_bias", e_tid_float, NULL, 4, "1", "Calculated Q channel bias (record 2)"}, {"raw_data_analysis.2.calc_i_std_dev", e_tid_float, NULL, 4, "1", "Calculated I channel standard deviation (record 2)"}, {"raw_data_analysis.2.calc_q_std_dev", e_tid_float, NULL, 4, "1", "Calculated Q channel standard deviation (record 2)"}, {"raw_data_analysis.2.calc_gain", e_tid_float, NULL, 4, "1", "Calculated I/Q gain imbalance (record 2)"}, {"raw_data_analysis.2.calc_quad", e_tid_float, NULL, 4, "1", "Calculated I/Q quadrature departure (record 2)"}, {"raw_data_analysis.2.i_bias_max", e_tid_float, NULL, 4, "1", "I bias upper bound (record 2)"}, {"raw_data_analysis.2.i_bias_min", e_tid_float, NULL, 4, "1", "I bias lower bound (record 2)"}, {"raw_data_analysis.2.q_bias_max", e_tid_float, NULL, 4, "1", "Q bias upper bound (record 2)"}, {"raw_data_analysis.2.q_bias_min", e_tid_float, NULL, 4, "1", "Q bias lower bound (record 2)"}, {"raw_data_analysis.2.gain_min", e_tid_float, NULL, 4, "1", "I/Q gain lower bound (record 2)"}, {"raw_data_analysis.2.gain_max", e_tid_float, NULL, 4, "1", "I/Q gain upper bound (record 2)"}, {"raw_data_analysis.2.quad_min", e_tid_float, NULL, 4, "1", "I/Q quadrature departure lower bound (record 2)"}, {"raw_data_analysis.2.quad_max", e_tid_float, NULL, 4, "1", "I/Q quadrature departure upper bound (record 2)"}, {"raw_data_analysis.2.i_bias_flag", e_tid_uchar, "flag", 1, "1", "I bias significance. 0 = I bias falls within acceptable range. 1 = I bias falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.q_bias_flag", e_tid_uchar, "flag", 1, "1", "Q bias Significance. 0 = Q bias falls within acceptable range. 1 = Q bias falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.gain_flag", e_tid_uchar, "flag", 1, "1", "I/Q Gain Significance. 0 = Gain falls within acceptable range. 1 = Gain falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.quad_flag", e_tid_uchar, "flag", 1, "1", "I/Q Quadrature Departure Significance. 0 = Quadrature departure falls within acceptable range. 1 =Quadrature departure falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.used_i_bias", e_tid_float, NULL, 4, "1", "I channel bias used for correction (may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_q_bias", e_tid_float, NULL, 4, "1", "Q channel bias used for correction (may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_gain", e_tid_float, NULL, 4, "1", "I/Q gain imbalance used for correction (may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_quad", e_tid_float, NULL, 4, "1", "I/Q quadrature departure used for correction (may be different from measured value) (record 2)"}, {"spare_3", e_tid_spare, NULL, 32, "1", "Spare"}, {"start_time.1.first_obt", e_tid_uint, NULL, 4, "2", "On-board binary time of first input line processed. LSB accurate to 15.26 us. (Contained in two long integers) (record 1)"}, {"start_time.1.first_mjd", e_tid_time, "MJD", 12, "1", "Sensing time (MJD format) of first input line processed converted from satellite binary time (record 1)"}, {"start_time.2.first_obt", e_tid_uint, NULL, 4, "2", "On-board binary time of first input line processed. LSB accurate to 15.26 us. (Contained in two long integers) (record 2)"}, {"start_time.2.first_mjd", e_tid_time, "MJD", 12, "1", "Sensing time (MJD format) of first input line processed converted from satellite binary time (record 2)"}, {"parameter_codes.first_swst_code", e_tid_ushort, "code", 2, "5", "Sampling Window Start time code of first processed line"}, {"parameter_codes.last_swst_code", e_tid_ushort, "code", 2, "5", "Sampling Window Start time code of last processed line"}, {"parameter_codes.pri_code", e_tid_ushort, "code", 2, "5", "Pulse Repetition Interval code"}, {"parameter_codes.tx_pulse_len_code", e_tid_ushort, "code", 2, "5", "Tx pulse length"}, {"parameter_codes.tx_bw_code", e_tid_ushort, "code", 2, "5", "Tx pulse bandwidth"}, {"parameter_codes.echo_win_len_code", e_tid_ushort, "code", 2, "5", "Echo Window Length"}, {"parameter_codes.up_code", e_tid_ushort, "code", 2, "5", "Upconverter Level - Upconverter gain set on the instrument"}, {"parameter_codes.down_code", e_tid_ushort, "code", 2, "5", "Downconverter Level - Downconverter gain set on the instrument"}, {"parameter_codes.resamp_code", e_tid_ushort, "code", 2, "5", "Resampling factor for echo data"}, {"parameter_codes.beam_adj_code", e_tid_ushort, "code", 2, "5", "Beam adjustment delta"}, {"parameter_codes.beam_set_num_code", e_tid_ushort, "code", 2, "5", "Antenna Beam Set Number"}, {"parameter_codes.tx_monitor_code", e_tid_ushort, "code", 2, "5", "Auxiliary Tx Monitor Level"}, {"spare_4", e_tid_spare, NULL, 60, "1", "Spare"}, {"error_counters.num_err_swst", e_tid_uint, NULL, 4, "1", "Number of errors detected in Sampling Window start time field."}, {"error_counters.num_err_pri", e_tid_uint, NULL, 4, "1", "Number of errors detected in PRI code field"}, {"error_counters.num_err_tx_pulse_len", e_tid_uint, NULL, 4, "1", "Number of errors detected in Tx pulse length field"}, {"error_counters.num_err_tx_pulse_bw", e_tid_uint, NULL, 4, "1", "Number of errors detected in Tx pulse bandwidth field."}, {"error_counters.num_err_echo_win_len", e_tid_uint, NULL, 4, "1", "Number of errors detected in Echo Window Length field."}, {"error_counters.num_err_up", e_tid_uint, NULL, 4, "1", "Number of errors detected in Upconverter Level field."}, {"error_counters.num_err_down", e_tid_uint, NULL, 4, "1", "Number of errors detected in Downconverter Level field."}, {"error_counters.num_err_resamp", e_tid_uint, NULL, 4, "1", "Number of errors detected in Resampling factor for echo data field."}, {"error_counters.num_err_beam_adj", e_tid_uint, NULL, 4, "1", "Number of errors detected in Beam adjustment delta field."}, {"error_counters.num_err_beam_set_num", e_tid_uint, NULL, 4, "1", "Number of errors detected in Antenna Beam Set Number field."}, {"spare_5", e_tid_spare, NULL, 26, "1", "Spare"}, {"image_parameters.first_swst_value", e_tid_float, "s", 4, "5", "Sampling Window Start time of first processed line"}, {"image_parameters.last_swst_value", e_tid_float, "s", 4, "5", "Sampling Window Start time of last processed line"}, {"image_parameters.swst_changes", e_tid_uint, NULL, 4, "5", "Number of Sample Window Start Time changes within a beam"}, {"image_parameters.prf_value", e_tid_float, "Hz", 4, "5", "Pulse Repetition Frequency"}, {"image_parameters.tx_pulse_len_value", e_tid_float, "s", 4, "5", "Tx pulse length"}, {"image_parameters.tx_pulse_bw_value", e_tid_float, "Hz", 4, "5", "Tx pulse bandwidth"}, {"image_parameters.echo_win_len_value", e_tid_float, "s", 4, "5", "Echo Window Length"}, {"image_parameters.up_value", e_tid_float, "dB", 4, "5", "Upconverter Level - Upconverter gain set on the instrument"}, {"image_parameters.down_value", e_tid_float, "dB", 4, "5", "Downconverter Level - Downconverter gain set on the instrument"}, {"image_parameters.resamp_value", e_tid_float, NULL, 4, "5", "Resampling factor"}, {"image_parameters.beam_adj_value", e_tid_float, "deg.", 4, "5", "Beam adjustment delta"}, {"image_parameters.beam_set_value", e_tid_ushort, NULL, 2, "5", "Antenna Beam Set Number"}, {"image_parameters.tx_monitor_value", e_tid_float, NULL, 4, "5", "Auxiliary Tx Monitor Level"}, {"spare_6", e_tid_spare, NULL, 82, "1", "Spare"}, {"first_proc_range_samp", e_tid_uint, "samples", 4, "1", "First processed input range sample, first sample is 1"}, {"range_ref", e_tid_float, "m", 4, "1", "Range spreading loss reference range"}, {"range_samp_rate", e_tid_float, "Hz", 4, "1", "Range sampling rate"}, {"radar_freq", e_tid_float, "Hz", 4, "1", "Radar Frequency"}, {"num_looks_range", e_tid_ushort, "looks", 2, "1", "Number of range looks"}, {"filter_window", e_tid_string, "ascii", 7, "1", "Matched filter window type:HAMMING or KAISERØ or NONEØØØ"}, {"window_coef_range", e_tid_float, NULL, 4, "1", "Window coefficient for range-matched filter"}, {"bandwidth.look_bw_range", e_tid_float, "Hz", 4, "5", "Range Look Bandwidth (null to null)"}, {"bandwidth.tot_bw_range", e_tid_float, "Hz", 4, "5", "Total processed range bandwidth (null to null)"}, {"nominal_chirp.1.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 1)"}, {"nominal_chirp.1.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 1)"}, {"nominal_chirp.2.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 2)"}, {"nominal_chirp.2.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 2)"}, {"nominal_chirp.3.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 3)"}, {"nominal_chirp.3.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 3)"}, {"nominal_chirp.4.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 4)"}, {"nominal_chirp.4.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 4)"}, {"nominal_chirp.5.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 5)"}, {"nominal_chirp.5.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 5)"}, {"spare_7", e_tid_spare, NULL, 60, "1", "Spare"}, {"num_lines_proc", e_tid_uint, "lines", 4, "1", "Number of input lines processed"}, {"num_look_az", e_tid_ushort, "looks", 2, "1", "Number of Azimuth Looks"}, {"look_bw_az", e_tid_float, "Hz", 4, "1", "Azimuth Look Bandwidth (null to null) -- this is the nominal value only for GM, WS, and AP."}, {"to_bw_az", e_tid_float, "Hz", 4, "1", "Processed Azimuth bandwidth (null to null) -- this field is used only for IM products and WV imagettes. Filled with zeros otherwise."}, {"filter_az", e_tid_string, "ascii", 7, "1", "Matched filter window type:HAMMING or KAISERØ or NONEØØØ"}, {"filter_coef_az", e_tid_float, NULL, 4, "1", "Window coefficient for azimuth-matched filter"}, {"az_fm_rate", e_tid_float, "Hz/sHz/s2Hz/s3", 4, "3", "3 co-efficients for Azimuth FM rate: Azimuth FM rate = C0 + C1(tSR-t0) + C2(tSR - t0)2tSR = 2 way slant range time"}, {"ax_fm_origin", e_tid_float, "ns", 4, "1", "2 way slant range time origin (t0) for Azimuth FM rate calculation"}, {"dop_amb_conf", e_tid_float, NULL, 4, "1", "Doppler Centroid Ambiguity Confidence Measure. Value between 0 and 1, 0 = poorest confidence, 1= highest confidence"}, {"spare_8", e_tid_spare, NULL, 68, "1", "Spare"}, {"calibration_factors.1.proc_scaling_fact", e_tid_float, NULL, 4, "1", "Processor scaling factor (factor units are linear when using Range/Doppler algorithm, dB when Specan is used) (record 1)"}, {"calibration_factors.1.ext_cal_fact", e_tid_float, NULL, 4, "1", "External Calibration Scaling Factor (mode/swath/polarization dependent) (record 1)"}, {"calibration_factors.2.proc_scaling_fact", e_tid_float, NULL, 4, "1", "Processor scaling factor (factor units are linear when using Range/Doppler algorithm, dB when Specan is used) (record 2)"}, {"calibration_factors.2.ext_cal_fact", e_tid_float, NULL, 4, "1", "External Calibration Scaling Factor (mode/swath/polarization dependent) (record 2)"}, {"noise_estimation.noise_power_corr", e_tid_float, NULL, 4, "5", "Noise power correction factors"}, {"noise_estimation.num_noise_lines", e_tid_uint, NULL, 4, "5", "Number of noise lines used to calculate factors"}, {"spare_9", e_tid_spare, NULL, 64, "1", "Spare"}, {"spare_10", e_tid_spare, NULL, 12, "1", "Spare"}, {"output_statistics.1.out_mean", e_tid_float, NULL, 4, "1", "Output data mean. Magnitude for detected products, real sample mean for SLC products (record 1)"}, {"output_statistics.1.out_imag_mean", e_tid_float, NULL, 4, "1", "Output imaginary data mean. Used for SLC products only (set to zero otherwise) (record 1)"}, {"output_statistics.1.out_std_dev", e_tid_float, NULL, 4, "1", "Output data standard deviation. Magnitude std. dev. for detected products, real sample std. dev. for SLC products (record 1)"}, {"output_statistics.1.out_imag_std_dev", e_tid_float, NULL, 4, "1", "Output imaginary data standard deviation. Used for SLC products only (set to zero otherwise) (record 1)"}, {"output_statistics.2.out_mean", e_tid_float, NULL, 4, "1", "Output data mean. Magnitude for detected products, real sample mean for SLC products (record 2)"}, {"output_statistics.2.out_imag_mean", e_tid_float, NULL, 4, "1", "Output imaginary data mean. Used for SLC products only (set to zero otherwise) (record 2)"}, {"output_statistics.2.out_std_dev", e_tid_float, NULL, 4, "1", "Output data standard deviation. Magnitude std. dev. for detected products, real sample std. dev. for SLC products (record 2)"}, {"output_statistics.2.out_imag_std_dev", e_tid_float, NULL, 4, "1", "Output imaginary data standard deviation. Used for SLC products only (set to zero otherwise) (record 2)"}, {"spare_11", e_tid_spare, NULL, 52, "1", "Spare"}, {"echo_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples. FBAQ, S&MØ, NONE"}, {"echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples. 8/4, 8/3, 8/2, or 8/8"}, {"init_cal_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples. FBAQ, S&MØ, NONE"}, {"init_cal_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples. 8/4, 8/3, 8/2, or 8/8"}, {"per_cal_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples. FBAQ, S&MØ, NONE"}, {"per_cal_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples. 8/4, 8/3, 8/2, or 8/8"}, {"noise_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples. FBAQ, S&MØ, NONE"}, {"noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples. 8/4, 8/3, 8/2, or 8/8"}, {"spare_12", e_tid_spare, NULL, 64, "1", "Spare"}, {"beam_merge_sl_range", e_tid_uint, NULL, 4, "4", "Number of slant range samples in beam merging, one value per mergae rregion (1-2, 2-3, 3-4, 4-5)"}, {"beam_merge_alg_param", e_tid_float, NULL, 4, "4", "Beam merge algorithm parameter used for beam merging, one value per merge region (1-2, 2-3, 3-4. 4-5)"}, {"lines_per_burst", e_tid_uint, "lines", 4, "5", "Number of lines per burst for this image. 5 values for beams SS1 to SS5 in WS and GM modes. Two values for AP mode, all others set to zero."}, {"spare_13", e_tid_spare, NULL, 28, "1", "Spare"}, {"orbit_state_vectors.1.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 1)"}, {"orbit_state_vectors.1.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.2.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 2)"}, {"orbit_state_vectors.2.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.3.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 3)"}, {"orbit_state_vectors.3.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.4.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 4)"}, {"orbit_state_vectors.4.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.5.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 5)"}, {"orbit_state_vectors.5.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 5)"}, {"spare_14", e_tid_spare, NULL, 64, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Map_GADS_asar_rec_data[] = { {"map_descriptor", e_tid_string, "ascii", 32, "1", "Map projection descriptorone of:UNIVERSAL_TRANSVERSE_MERCATORØØØUNIVERSAL_POLAR_STEREOGRAPHICØØØLAMBERT_CONFORMAL_CONICØØØØØØØØØTRANSVERSE_MERCATORØØØØØØØØØØØØØMERCATORØØØØØØØØØØØØØØØØØØØØØØØØPOLAR_STEREOGRAPHICØØØØØØØØØØØØØ"}, {"samples", e_tid_uint, NULL, 4, "1", "Number of samples per line"}, {"lines", e_tid_uint, NULL, 4, "1", "Number of lines"}, {"sample_spacing", e_tid_float, "m", 4, "1", "Nominal inter-sample distance"}, {"line_spacing", e_tid_float, "m", 4, "1", "Nominal inter-line distance"}, {"orientation", e_tid_float, "deg", 4, "1", "Output scene centre orientation"}, {"spare_1", e_tid_spare, NULL, 40, "1", "Spare"}, {"heading", e_tid_float, "deg", 4, "1", "Platform heading, degrees"}, {"ellipsoid_name", e_tid_string, "ascii", 32, "1", "Reference ellipsoid name"}, {"semi_major", e_tid_float, "m", 4, "1", "Ellipsoid semi-major axis, metres"}, {"semi_minor", e_tid_float, "m", 4, "1", "Ellipsoid semi-minor axis, metres"}, {"shift_dx", e_tid_float, "m", 4, "1", "Datum shift parameter referenced to Greenwich: dx (metres)"}, {"shift_dy", e_tid_float, "m", 4, "1", "Datum shift parameter perpendicular to Greenwich: dy (metres)"}, {"shift_dz", e_tid_float, "m", 4, "1", "Datum shift parameter direction of the rotation axis: dz (metres)"}, {"avg_height", e_tid_float, NULL, 4, "1", "average scene height above ellipsoid used for geocoding"}, {"spare_2", e_tid_spare, NULL, 12, "1", "Spare"}, {"projection_description", e_tid_string, "ascii", 32, "1", "Map projection alphanumeric description"}, {"utm_descriptor", e_tid_string, "ascii", 32, "1", "UTM descriptorUNIVERSAL_TRANSVERSE_MERCATORØØØ"}, {"utm_zone", e_tid_string, "ascii", 4, "1", "UTM zone signature"}, {"utm_origin_easting", e_tid_float, "m", 4, "1", "Map origin, false easting"}, {"utm_origin_northing", e_tid_float, "m", 4, "1", "Map origin, false northing"}, {"utm_center_long", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre longitude, deg"}, {"utm_center_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre latitude, deg"}, {"utm_para1", e_tid_float, "deg", 4, "1", "1st standard parallel, deg"}, {"utm_para2", e_tid_float, "deg", 4, "1", "2nd standard parallel, deg"}, {"utm_scale", e_tid_float, NULL, 4, "1", "Scale factor"}, {"ups_descriptor", e_tid_string, "ascii", 32, "1", "UPS descriptor"}, {"ups_center_long", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre longitude, deg"}, {"ups_center_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre latitude, deg"}, {"ups_scale", e_tid_float, NULL, 4, "1", "Scale factor"}, {"nsp_descriptor", e_tid_string, "ascii", 32, "1", "NSP descriptor"}, {"origin_easting", e_tid_float, "m", 4, "1", "Map origin, false easting"}, {"origin_northing", e_tid_float, "m", 4, "1", "Map origin, false northing"}, {"center_long", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre longitude, deg"}, {"center_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre latitude, deg"}, {"standard_parallel_parameters.para1", e_tid_float, "deg", 4, "1", "Standard parallel1, deg"}, {"standard_parallel_parameters.para2", e_tid_float, "deg", 4, "1", "Standard parallel2, deg"}, {"standard_parallel_parameters.para3", e_tid_float, "deg", 4, "1", "Standard parallel3, deg"}, {"standard_parallel_parameters.para4", e_tid_float, "deg", 4, "1", "Standard parallel4, deg"}, {"central_meridian_parameters.central_m1", e_tid_float, "deg", 4, "1", "Central meridian1, deg"}, {"central_meridian_parameters.central_m2", e_tid_float, "deg", 4, "1", "Central meridian2, deg"}, {"central_meridian_parameters.central_m3", e_tid_float, "deg", 4, "1", "Central meridian3, deg"}, {"projection_parameters.spare_3", e_tid_spare, NULL, 4, "1", "Spare"}, {"projection_parameters.spare_4", e_tid_spare, NULL, 4, "1", "Spare"}, {"projection_parameters.spare_5", e_tid_spare, NULL, 4, "1", "Spare"}, {"projection_parameters.spare_6", e_tid_spare, NULL, 4, "1", "Spare"}, {"position_northings_eastings.tl_northing", e_tid_float, "m", 4, "1", "Top left corner northing, meters;"}, {"position_northings_eastings.tl_easting", e_tid_float, "m", 4, "1", "Top left corner easting, meters;"}, {"position_northings_eastings.tr_northing", e_tid_float, "m", 4, "1", "Top right corner northing, meters;"}, {"position_northings_eastings.tr_easting", e_tid_float, "m", 4, "1", "Top right corner easting, meters;"}, {"position_northings_eastings.br_northing", e_tid_float, "m", 4, "1", "Bottom right corner northing, meters;"}, {"position_northings_eastings.br_easting", e_tid_float, "m", 4, "1", "Bottom right corner easting, meters;"}, {"position_northings_eastings.bl_northing", e_tid_float, "m", 4, "1", "Bottom left corner northing, meters;"}, {"position_northings_eastings.bl_easting", e_tid_float, "m", 4, "1", "Bottom left corner easting, meters;"}, {"position_lat_long.tl_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Top left corner latitude"}, {"position_lat_long.tl_long", e_tid_int, "(1e-6) degrees", 4, "1", "Top left corner longitude"}, {"position_lat_long.tr_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Top right corner latitude"}, {"position_lat_long.tr_long", e_tid_int, "(1e-6) degrees", 4, "1", "Top right corner longitude"}, {"position_lat_long.br_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Bottom right corner latitude"}, {"position_lat_long.br_long", e_tid_int, "(1e-6) degrees", 4, "1", "Bottom right corner longitude"}, {"position_lat_long.bl_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Bottom left corner latitude"}, {"position_lat_long.bl_long", e_tid_int, "(1e-6) degrees", 4, "1", "Bottom left corner longitude"}, {"spare_7", e_tid_spare, NULL, 32, "1", "Spare"}, {"image_to_map_coefs", e_tid_float, NULL, 4, "8", "8 coefficients to convert a line(L) and sample (S) position to the map projection frame of reference, say (E,N)E = A11 + A12*L + A13 *S + A14 *L*SN = A21 + A22*L + A23 *S + A24 *L*S"}, {"map_to_image_coefs", e_tid_float, NULL, 4, "8", "8 coefficients to convert from the map projection (E,N) to line (L) and sample(S) position in the imageL = B11 + B12*E + B13 *N + B14 *E*NS = B21 + B22*E + B23 *N + B24 *E*N"}, {"spare_8", e_tid_spare, NULL, 35, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Ocean_Spectra_MDSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "First Zero Doppler Azimuth time of the wave cellTime of first range line in the SLC Imagette MDS described by this data set"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"range_spectral_res", e_tid_float, NULL, 4, "1", "Range spectral bin size of the cartesian cross spectrum"}, {"az_spectral_res", e_tid_float, NULL, 4, "1", "Azimuth spectral bin size of the cartesian cross spectrum"}, {"spare_1", e_tid_spare, NULL, 4, "1", "Spare"}, {"spec_tot_energy", e_tid_float, NULL, 4, "1", "Spectrum Total Energy"}, {"spec_max_energy", e_tid_float, NULL, 4, "1", "Spectrum Max Energy"}, {"spec_max_dir", e_tid_float, "deg", 4, "1", "Direction of Spectrum Max (deg)on higher resolution grid"}, {"spec_max_wl", e_tid_float, "m", 4, "1", "Wavelength of Spectrum Max (m)on higher resolution grid"}, {"az_image_shift_var", e_tid_float, "m^2", 4, "1", "Variance of the azimuth image shift caused by the orbital velocity"}, {"az_cutoff", e_tid_float, "m", 4, "1", "Azimuthal Clutter Cut-off length (m)"}, {"nonlinear_spectral_width", e_tid_float, "m", 4, "1", "Spectral width of the non-linear part of the cross spectra"}, {"image_intensity", e_tid_float, NULL, 4, "1", "Image intensity"}, {"image_variance", e_tid_float, NULL, 4, "1", "Normalised image variance"}, {"spare_2", e_tid_spare, NULL, 56, "1", "Spare"}, {"min_spectrum", e_tid_float, "m^4", 4, "1", "Min value of ocean wave spectrum"}, {"max_spectrum", e_tid_float, "m^4", 4, "1", "Max value of ocean wave spectrum"}, {"spare_3", e_tid_spare, NULL, 8, "1", "Spare"}, {"wind_speed", e_tid_float, "m/s", 4, "1", "Forcast Wind speed (if provided)"}, {"wind_direction", e_tid_float, "deg", 4, "1", "Forcast Wind direction (if provided)"}, {"SAR_wave_height", e_tid_float, "m", 4, "1", "SAR swell wave height"}, {"SAR_az_shift_var", e_tid_float, "m^2", 4, "1", "Variance of the azimuth shift computed from the SAR swell wave spectra"}, {"backscatter", e_tid_float, "dB", 4, "1", "Backscattering coefficient"}, {"confidence", e_tid_int, NULL, 4, "1", "Confidence measure of the swell inversion"}, {"signal_to_noise", e_tid_float, NULL, 4, "1", "Average signal-to-noise ratio"}, {"radar_vel_corr", e_tid_float, "m/s", 4, "1", "Radar velocity off-set correction"}, {"cmod_cal_const", e_tid_float, NULL, 4, "1", "Calibration constant - CMOD"}, {"spare_4", e_tid_spare, NULL, 28, "1", "Spare"}, {"ocean_spectra", e_tid_uchar, NULL, 1, "!REF_TBD!", "Ocean Wave Swell spectra polar grid. Number of bins in wavelength and direction defined in SPH (nominally 24 by 36). Arranged as 24 wavelength cells from shortest to longest wavelength, for zero degrees, then 10 degrees, up to 350 degrees."} }; static const struct RecordDescriptor ASAR_Spectra_MDSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "First Zero Doppler Azimuth time of the wave cellTime of first range line in the SLC Imagette MDS described by this data set"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"range_spectral_res", e_tid_float, NULL, 4, "1", "Range spectral resolution of the cartesian cross spectrum"}, {"az_spectral_res", e_tid_float, NULL, 4, "1", "Azimuth spectral resolution of the cartesian cross spectrum"}, {"az_resample_factor", e_tid_float, NULL, 4, "1", "Azimuth re-sampling factor in look extraction(Swath specific)"}, {"spec_tot_energy", e_tid_float, NULL, 4, "1", "Spectrum Total Energy"}, {"spec_max_energy", e_tid_float, NULL, 4, "1", "Spectrum Max Energy"}, {"spec_max_dir", e_tid_float, "deg", 4, "1", "Direction of Spectrum Max (deg)on higher resolution grid"}, {"spec_max_wl", e_tid_float, "m", 4, "1", "Wavelength of Spectrum Max (m)on higher resolution grid"}, {"clutter_noise", e_tid_float, NULL, 4, "1", "Clutter Noise"}, {"az_cutoff", e_tid_float, "m", 4, "1", "Azimuthal Clutter Cut-off length (m)"}, {"num_iterations", e_tid_float, NULL, 4, "1", "Number of iterations to compute Azimuthal Clutter Cut-off"}, {"range_offset", e_tid_float, "m", 4, "1", "Range offset of peak of cross covariance function (m)"}, {"ax_offset", e_tid_float, "m", 4, "1", "Azimuth offset of peak of cross covariance function (m)"}, {"cc_range_res", e_tid_float, "rad/m", 4, "1", "Range resolution of cross co-variance spectrum (rad/m)"}, {"cc_azimuth_res", e_tid_float, "rad/m", 4, "1", "Azimuth resolution of cross co-variance spectrum (rad/m)"}, {"sublook_means", e_tid_float, NULL, 4, "2", "1st and last Sub-look Image Means"}, {"sublook_variance", e_tid_float, NULL, 4, "2", "1st and last Sub-look Image Variance"}, {"sublook_skewness", e_tid_float, NULL, 4, "2", "1st and last Sub-look Image Skewness"}, {"sublook_kurtosis", e_tid_float, NULL, 4, "2", "1st and last Sub-look Image Kurtosis"}, {"range_sublook_detrend_coeff", e_tid_float, NULL, 4, "2", "1st and last Sub-look de-trend coefficient in range"}, {"az_sublook_detrend_coeff", e_tid_float, NULL, 4, "2", "1st and last Sub-look de-trend coefficient in azimuth"}, {"min_imag", e_tid_float, NULL, 4, "1", "Min value of Imaginary part of cross spectrum"}, {"max_imag", e_tid_float, NULL, 4, "1", "Max value of Imaginary part of cross spectrum"}, {"min_real", e_tid_float, NULL, 4, "1", "Min value of Real part of cross spectrum"}, {"max_real", e_tid_float, NULL, 4, "1", "Max value of Real part of cross spectrum"}, {"spare_1", e_tid_spare, NULL, 64, "1", "Spare"}, {"real_spectra", e_tid_uchar, NULL, 1, ".SPH.num_wl_bins,.SPH.num_dir_bins", "Real part of cross spectra polar gridNumber of bins in wavelength and direction defined in SPH (nominally 24 by 36). However, only 0 to 180 degree of the spectrum need be supplied (24 by 18). Arranged as: 24 wavelength values for 0-10 deg. sector, 24 valu"}, {"imag_spectra", e_tid_uchar, NULL, 1, ".SPH.num_wl_bins,.SPH.num_dir_bins", "Complex part of cross spectra polar gridNumber of bins in wavelength and direction defined in SPH (nominally 24 by 36). However, only 0 to 180 degree of the spectrum need be supplied (24 by 18). Arranged as: 24 wavelength values for 0-10 deg. sector, 24 v"} }; static const struct RecordDescriptor ASAR_SQ1_Image_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero doppler time at which SQ information applies"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if all MDSRs corresponding to this ADSR are blank, set to zero otherwise).Note: in practice for ASAR products, this flag will always be zero since this ADSR is updated once per slice or scene. Therefore, if there are no MDSRs, this ADSR is not produced at all."}, {"input_mean_flag", e_tid_uchar, "flag", 1, "1", "Input data mean outside nominal range flag. 0 = mean of I and Q input values are both within specified range from expected mean. For expected mean of x, the measured mean must fall between x-threshold to x+threshold. 1 = otherwise"}, {"input_std_dev_flag", e_tid_uchar, "flag", 1, "1", "Input data standard deviation outside nominal range flag. 0 = standard deviation values of I and Q input values are both within specified range of expected standard deviation. For expected std. dev. x, the measured std. dev. must fall between x-threshold to x+threshold. 1 = otherwise"}, {"input_gaps_flag", e_tid_uchar, "flag", 1, "1", "Significant gaps in the input data flag. An input data gap is defined as a contiguous block of N missing lines (the value of N is predefined for each product). 0 = number of input gaps <= threshold value. 1 = number of input data gaps > threshold value"}, {"input_missing_lines_flag", e_tid_uchar, "flag", 1, "1", "Missing lines significant flag. 0 = percentage of missing lines <= threshold value 1 = percentage of missing lines > threshold value. The number of missing lines is the number of lines missing from the input data excluding data gaps."}, {"dop_cen_flag", e_tid_uchar, "flag", 1, "1", "Doppler Centroid Uncertain flag. 0 = confidence measure >= specified value. 1 = confidence measure < specified value (note: if more than one Doppler centroid estimation is performed in a slice the flag is set if any confidence measure is less than the threshold)."}, {"dop_amb_flag", e_tid_uchar, "flag", 1, "1", "Doppler ambiguity estimate uncertain flag. 0 = confidence measure >= specified value. 1 = confidence measure < specified value"}, {"output_mean_flag", e_tid_uchar, "flag", 1, "1", "Output data mean outside nominal range flag. 0 = mean of I and Q output values for SLC image or mean of detected pixels for a detected product, are both within specified range from expected mean. For expected mean of x, the measured mean must fall between x-threshold to x+threshold. 1 = otherwise."}, {"output_std_dev_flag", e_tid_uchar, "flag", 1, "1", "Output data standard deviation outside nominal range flag. 0 = std. dev. of I and Q output values for SLC image or std. dev. of detected pixels for a detected product, are both within specified range from expected std. dev. For expected std. dev. of x, the measured std. dev must fall between x-threshold and x+threshold. 1 = otherwise."}, {"chirp_flag", e_tid_uchar, "flag", 1, "1", "Chirp extraction failed or is of low quality flag. 0 = able to extract all chirps or chirp extraction not requested (nominal chirp used) AND all quality measures were acceptable. 1 = unable to extract a chirp during processing and chirp extraction was requequested or the quality is below the acceptable levels."}, {"missing_data_sets_flag", e_tid_uchar, "flag", 1, "1", "Data sets missing flag. 0 = all data sets which are supposed to be in the product are present. 1 = any data sets (including ADSs) are missing from the product which are supposed to be included under normal circumstances. Which data sets are missing can be determined by an examination of the DSDs in the SPH."}, {"invalid_downlink_flag", e_tid_uchar, "flag", 1, "1", "Invalid downlink parameters flag. 0 = all parameters read from the downlinked data were valid. 1 = displayed if any downlink parameter is out of range and therefore a default value has been used during processing."}, {"spare_1", e_tid_spare, NULL, 7, "1", "Spare"}, {"thresh_chirp_broadening", e_tid_float, "%", 4, "1", "Threshold for setting the chirp quality flag - Maximum percentage broadening permitted in cross-correlation pulse width compared to theoretical width."}, {"thresh_chirp_sidelobe", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - First sidelobe of the chirp cross correlation function"}, {"thresh_chirp_islr", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - ISLR of the chirp cross correlation function"}, {"thresh_input_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of input data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T."}, {"exp_input_mean", e_tid_float, NULL, 4, "1", "Expected mean input value for this product for both I and Q."}, {"thresh_input_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of input data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D."}, {"exp_input_std_dev", e_tid_float, NULL, 4, "1", "Expected input std. dev. for this product for both I and Q."}, {"thresh_dop_cen", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid quality flag - Threshold for Doppler Centroid confidence"}, {"thresh_dop_amb", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid ambiguity quality flag - Threshold for setting the Doppler Centroid ambiguity confidence flag"}, {"thresh_output_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of output data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T."}, {"exp_output_mean", e_tid_float, NULL, 4, "1", "Expected mean output value for this product. For an SLC product this is the expected mean of both the I and Q values."}, {"thresh_output_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of output data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D."}, {"exp_output_std_dev", e_tid_float, NULL, 4, "1", "Expected output std. dev. for this product. For an SLC product this is the expected output std. dev. for both I and Q values."}, {"thresh_input_missing_lines", e_tid_float, "%", 4, "1", "Threshold for setting the missing lines quality flag - maximum percentage of missing lines to total lines."}, {"thresh_input_gaps", e_tid_float, NULL, 4, "1", "Threshold for setting the missing gaps quality flag - maximum number of missing gaps allowed."}, {"lines_per_gaps", e_tid_uint, "lines", 4, "1", "Number of missing lines which constitute a gap"}, {"spare_2", e_tid_spare, NULL, 15, "1", "Spare"}, {"input_mean", e_tid_float, NULL, 4, "2", "Input data mean (i channel, q channel)"}, {"input_std_dev", e_tid_float, NULL, 4, "2", "Input data standard deviation (i channel, q channel)"}, {"num_gaps", e_tid_float, NULL, 4, "1", "Number of gaps (composed of a predetermined number of consecutive missing lines)"}, {"num_missing_lines", e_tid_float, NULL, 4, "1", "Number of missing lines (excluding gaps)"}, {"output_mean", e_tid_float, NULL, 4, "2", "Output data mean (detected samples, followed by zero, or i channel followed by q channel for SLC)"}, {"output_std_dev", e_tid_float, NULL, 4, "2", "Output data standard deviation (detected samples followed by zero, or i channel followed by q channel for SLC)"}, {"tot_errors", e_tid_uint, NULL, 4, "1", "Total number of errors detected in ISP headers"}, {"Spare_3", e_tid_spare, NULL, 16, "1", "Spare"} }; static const struct RecordDescriptor ASAR_SRGR_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time in azimuth from which parameters apply"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"slant_range_time", e_tid_float, "ns", 4, "1", "2 way slant range time to first range sample"}, {"ground_range_origin", e_tid_float, "m", 4, "1", "Ground range origin of the polynomial (GR0) measured for the first pixel of the line."}, {"srgr_coeff", e_tid_float, "m, m-1, m-2, m-3, m-4", 4, "5", "The coefficients S0, S1, S2, S3, and S4 of the ground range to slant range conversion polynomial. Slant range = S0 + S1(GR-GR0) + S2 (GR-GR0)2 + S3(GR-GR0)3 + S4(GR-GR0)4"}, {"spare_1", e_tid_spare, NULL, 14, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Wave_Geolocation_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time of first line of the first line of the imagette"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if unable to compute the cross spectra for a given SLC imagette (i.e. no Cross Spectra MDSR corresponding to this ADSR), set to 0 otherwise)"}, {"center_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Geodetic latitude of center point (positive north) This is the center point of the wave cell. It is calculated after the cross spectra processing, and thus may differ from the center sample latitude of the SLC imagette if slant range to ground range conve"}, {"center_long", e_tid_int, "(1e-6) degrees", 4, "1", "Geodetic longitude of center point (positive east)This is the center point of the wave cell. It is calculated after the cross spectra processing, and thus may differ from the center sample latitude of the SLC imagette if slant range to ground range conver"}, {"spare_1", e_tid_spare, NULL, 4, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Wave_Param_ADSR_asar_rec_data[] = { {"first_zero_doppler_time", e_tid_time, "MJD", 12, "1", "First Zero Doppler Azimuth time of MDS which this data set describesTime of first range line in the MDS described by this data set"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"last_zero_doppler_time", e_tid_time, "MJD", 12, "1", "Last Zero Doppler Azimuth time of MDS which this data set describesTime of last range line in the MDS described by this data set"}, {"work_order_id", e_tid_string, "ascii", 12, "1", "Work Order ID (left-justified)"}, {"time_diff", e_tid_float, "s", 4, "1", "Time difference between sensing time of first input line and zero Doppler time of first output image line (tdelta). (TBC)May be used during child product extraction from a stripline product (TBC). Left blank (set to zero) for non-stripline products"}, {"swath_id", e_tid_string, "ascii", 3, "1", "Swath number IS1, IS2, IS3, IS4, IS5, IS6, or IS7 for IM, WV and AP modes.Set to WSØ for WS and GM modes"}, {"range_spacing", e_tid_float, "m", 4, "1", "Range sample spacing"}, {"azimuth_spacing", e_tid_float, "m", 4, "1", "Azimuth sample spacing at image center"}, {"line_time_interval", e_tid_float, "s", 4, "1", "Azimuth sample spacing in time (Line Time Interval)"}, {"num_output_lines", e_tid_uint, "lines", 4, "1", "Number of output range lines in the image described by this ADS"}, {"num_samples_per_line", e_tid_uint, "samples", 4, "1", "Number of samples per output range line (includes zero filled samples)"}, {"data_type", e_tid_string, "ascii", 5, "1", "Output data typeSWORD, UWORD, or UBYTE"}, {"spare_1", e_tid_spare, NULL, 51, "1", "Spare"}, {"data_analysis_flag", e_tid_uchar, "flag", 1, "1", "Raw Data Analysis used for Raw Data Correction 0 = correction done using default parameters1 = correction done using raw data analysis results"}, {"ant_elev_corr_flag", e_tid_uchar, "flag", 1, "1", "Antenna Elevation Pattern Correction Applied 0 = no correction applied1 = correction applied"}, {"chirp_extract_flag", e_tid_uchar, "flag", 1, "1", "reconstructed Chirp used 0 = nominal chirp replica used1 = reconstructed chirp used"}, {"srgr_flag", e_tid_uchar, "flag", 1, "1", "Slant Range to Ground Range Conversion Applied0 = no conversion applied1 = conversion applied"}, {"dop_cen_flag", e_tid_uchar, "flag", 1, "1", "Doppler Centroid Estimation Performed0 = no estimation done1 = estimation done"}, {"dop_amb_flag", e_tid_uchar, "flag", 1, "1", "Doppler Ambiguity Estimation Performed0 = no estimate done1 = estimate done"}, {"range_spread_comp_flag", e_tid_uchar, "flag", 1, "1", "Range-spreading loss compensation Applied0 = no compensation applied1 = compensation applied"}, {"detected_flag", e_tid_uchar, "flag", 1, "1", "Detection Applied0 = output product is complex1 = output product was detected"}, {"look_sum_flag", e_tid_uchar, "flag", 1, "1", "Look Summation Performed0 = product is single look1 = product is multi-looked"}, {"rms_equal_flag", e_tid_uchar, "flag", 1, "1", "RMS Equalization performed 0= rms equalization not performed during FBAQ decoding, 1 = rms equalization performed during FBAQ decoding"}, {"ant_scal_flag", e_tid_uchar, "flag", 1, "1", "Antenna Elevationscaling Factor applied 0= no scaling factor applied, 1 = scaling factor applied"}, {"spare_2", e_tid_spare, NULL, 10, "1", "Spare"}, {"raw_data_analysis.1.num_gaps", e_tid_uint, "gaps", 4, "1", "Number of input data gaps (a gap is defined as a predetermined number of range lines) (record 1)"}, {"raw_data_analysis.1.num_missing_lines", e_tid_uint, "lines", 4, "1", "Number of missing lines, excluding data gaps (record 1)"}, {"raw_data_analysis.1.range_samp_skip", e_tid_uint, "samples", 4, "1", "Range sample skipping factor for raw data analysis (record 1)"}, {"raw_data_analysis.1.range_lines_skip", e_tid_uint, "lines", 4, "1", "Range lines skipping factor for raw data analysis (record 1)"}, {"raw_data_analysis.1.calc_i_bias", e_tid_float, NULL, 4, "1", "Calculated I channel bias (record 1)"}, {"raw_data_analysis.1.calc_q_bias", e_tid_float, NULL, 4, "1", "Calculated Q channel bias (record 1)"}, {"raw_data_analysis.1.calc_i_std_dev", e_tid_float, NULL, 4, "1", "Calculated I channel standard deviation (record 1)"}, {"raw_data_analysis.1.calc_q_std_dev", e_tid_float, NULL, 4, "1", "Calculated Q channel standard deviation (record 1)"}, {"raw_data_analysis.1.calc_gain", e_tid_float, NULL, 4, "1", "Calculated I/Q gain imbalance (record 1)"}, {"raw_data_analysis.1.calc_quad", e_tid_float, NULL, 4, "1", "Calculated I/Q quadrature departure (record 1)"}, {"raw_data_analysis.1.i_bias_max", e_tid_float, NULL, 4, "1", "I bias upper bound (record 1)"}, {"raw_data_analysis.1.i_bias_min", e_tid_float, NULL, 4, "1", "I bias lower bound (record 1)"}, {"raw_data_analysis.1.q_bias_max", e_tid_float, NULL, 4, "1", "Q bias upper bound (record 1)"}, {"raw_data_analysis.1.q_bias_min", e_tid_float, NULL, 4, "1", "Q bias lower bound (record 1)"}, {"raw_data_analysis.1.gain_min", e_tid_float, NULL, 4, "1", "I/Q gain lower bound (record 1)"}, {"raw_data_analysis.1.gain_max", e_tid_float, NULL, 4, "1", "I/Q gain upper bound (record 1)"}, {"raw_data_analysis.1.quad_min", e_tid_float, NULL, 4, "1", "I/Q quadrature departure lower bound (record 1)"}, {"raw_data_analysis.1.quad_max", e_tid_float, NULL, 4, "1", "I/Q quadrature departure upper bound (record 1)"}, {"raw_data_analysis.1.i_bias_flag", e_tid_uchar, "flag", 1, "1", "I bias significance0 = I bias falls within acceptable range1 = I bias falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.q_bias_flag", e_tid_uchar, "flag", 1, "1", "Q bias Significance0 = Q bias falls within acceptable range1 = Q bias falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.gain_flag", e_tid_uchar, "flag", 1, "1", "I/Q Gain Significance0 = Gain falls within acceptable range1 = Gain falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.quad_flag", e_tid_uchar, "flag", 1, "1", "I/Q Quadrature Departure Significance0 = Quadrature departure falls within acceptable range1 =Quadrature departure falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.used_i_bias", e_tid_float, NULL, 4, "1", "I channel bias used for correction (may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_q_bias", e_tid_float, NULL, 4, "1", "Q channel bias used for correction(may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_gain", e_tid_float, NULL, 4, "1", "I/Q gain imbalance used for correction(may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_quad", e_tid_float, NULL, 4, "1", "I/Q quadrature departure used for correction(may be different from measured value) (record 1)"}, {"raw_data_analysis.2.num_gaps", e_tid_uint, "gaps", 4, "1", "Number of input data gaps (a gap is defined as a predetermined number of range lines) (record 2)"}, {"raw_data_analysis.2.num_missing_lines", e_tid_uint, "lines", 4, "1", "Number of missing lines, excluding data gaps (record 2)"}, {"raw_data_analysis.2.range_samp_skip", e_tid_uint, "samples", 4, "1", "Range sample skipping factor for raw data analysis (record 2)"}, {"raw_data_analysis.2.range_lines_skip", e_tid_uint, "lines", 4, "1", "Range lines skipping factor for raw data analysis (record 2)"}, {"raw_data_analysis.2.calc_i_bias", e_tid_float, NULL, 4, "1", "Calculated I channel bias (record 2)"}, {"raw_data_analysis.2.calc_q_bias", e_tid_float, NULL, 4, "1", "Calculated Q channel bias (record 2)"}, {"raw_data_analysis.2.calc_i_std_dev", e_tid_float, NULL, 4, "1", "Calculated I channel standard deviation (record 2)"}, {"raw_data_analysis.2.calc_q_std_dev", e_tid_float, NULL, 4, "1", "Calculated Q channel standard deviation (record 2)"}, {"raw_data_analysis.2.calc_gain", e_tid_float, NULL, 4, "1", "Calculated I/Q gain imbalance (record 2)"}, {"raw_data_analysis.2.calc_quad", e_tid_float, NULL, 4, "1", "Calculated I/Q quadrature departure (record 2)"}, {"raw_data_analysis.2.i_bias_max", e_tid_float, NULL, 4, "1", "I bias upper bound (record 2)"}, {"raw_data_analysis.2.i_bias_min", e_tid_float, NULL, 4, "1", "I bias lower bound (record 2)"}, {"raw_data_analysis.2.q_bias_max", e_tid_float, NULL, 4, "1", "Q bias upper bound (record 2)"}, {"raw_data_analysis.2.q_bias_min", e_tid_float, NULL, 4, "1", "Q bias lower bound (record 2)"}, {"raw_data_analysis.2.gain_min", e_tid_float, NULL, 4, "1", "I/Q gain lower bound (record 2)"}, {"raw_data_analysis.2.gain_max", e_tid_float, NULL, 4, "1", "I/Q gain upper bound (record 2)"}, {"raw_data_analysis.2.quad_min", e_tid_float, NULL, 4, "1", "I/Q quadrature departure lower bound (record 2)"}, {"raw_data_analysis.2.quad_max", e_tid_float, NULL, 4, "1", "I/Q quadrature departure upper bound (record 2)"}, {"raw_data_analysis.2.i_bias_flag", e_tid_uchar, "flag", 1, "1", "I bias significance0 = I bias falls within acceptable range1 = I bias falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.q_bias_flag", e_tid_uchar, "flag", 1, "1", "Q bias Significance0 = Q bias falls within acceptable range1 = Q bias falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.gain_flag", e_tid_uchar, "flag", 1, "1", "I/Q Gain Significance0 = Gain falls within acceptable range1 = Gain falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.quad_flag", e_tid_uchar, "flag", 1, "1", "I/Q Quadrature Departure Significance0 = Quadrature departure falls within acceptable range1 =Quadrature departure falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.used_i_bias", e_tid_float, NULL, 4, "1", "I channel bias used for correction (may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_q_bias", e_tid_float, NULL, 4, "1", "Q channel bias used for correction(may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_gain", e_tid_float, NULL, 4, "1", "I/Q gain imbalance used for correction(may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_quad", e_tid_float, NULL, 4, "1", "I/Q quadrature departure used for correction(may be different from measured value) (record 2)"}, {"spare_3", e_tid_spare, NULL, 32, "1", "Spare"}, {"start_time.1.first_obt", e_tid_uint, NULL, 4, "2", "On-board binary time of first input line processedLSB accurate to 15.26 ms. (Contained in two long integers) (record 1)"}, {"start_time.1.first_mjd", e_tid_time, "MJD", 12, "1", "Sensing time (MJD format) of first input line processedconverted from satellite binary time (record 1)"}, {"start_time.2.first_obt", e_tid_uint, NULL, 4, "2", "On-board binary time of first input line processedLSB accurate to 15.26 ms. (Contained in two long integers) (record 2)"}, {"start_time.2.first_mjd", e_tid_time, "MJD", 12, "1", "Sensing time (MJD format) of first input line processedconverted from satellite binary time (record 2)"}, {"parameter_codes.swst_code", e_tid_ushort, "code", 2, "5", "Sampling Window Start time code of first processed line"}, {"parameter_codes.last_swst_code", e_tid_ushort, "code", 2, "5", "Sampling Window Start time code of last processed line"}, {"parameter_codes.pri_code", e_tid_ushort, "code", 2, "5", "Pulse Repetition Interval code"}, {"parameter_codes.tx_pulse_len_code", e_tid_ushort, "code", 2, "5", "Tx pulse length"}, {"parameter_codes.tx_bw_code", e_tid_ushort, "code", 2, "5", "Tx pulse bandwidth"}, {"parameter_codes.echo_win_len_code", e_tid_ushort, "code", 2, "5", "Echo Window Length"}, {"parameter_codes.up_code", e_tid_ushort, "code", 2, "5", "Upconverter Level - Upconverter gain set on the instrument"}, {"parameter_codes.down_code", e_tid_ushort, "code", 2, "5", "Downconverter Level - Downconverter gain set on the instrument"}, {"parameter_codes.resamp_code", e_tid_ushort, "code", 2, "5", "Resampling factor for echo data"}, {"parameter_codes.beam_adj_code", e_tid_ushort, "code", 2, "5", "Beam adjustment delta"}, {"parameter_codes.beam_set_num_code", e_tid_ushort, "code", 2, "5", "Antenna Beam Set Number"}, {"parameter_codes.tx_monitor_code", e_tid_ushort, "code", 2, "5", "Auxiliary Tx Monitor Level"}, {"spare_4", e_tid_spare, NULL, 60, "1", "Spare"}, {"error_counters.num_err_swst", e_tid_uint, NULL, 4, "1", "Number of errors detected in Sampling Window start time field."}, {"error_counters.num_err_pri", e_tid_uint, NULL, 4, "1", "Number of errors detected in PRI code field"}, {"error_counters.num_err_tx_pulse_len", e_tid_uint, NULL, 4, "1", "Number of errors detected in Tx pulse length field"}, {"error_counters.num_err_tx_pulse_bw", e_tid_uint, NULL, 4, "1", "Number of errors detected in Tx pulse bandwidth field."}, {"error_counters.num_err_echo_win_len", e_tid_uint, NULL, 4, "1", "Number of errors detected in Echo Window Length field."}, {"error_counters.num_err_up", e_tid_uint, NULL, 4, "1", "Number of errors detected in Upconverter Level field."}, {"error_counters.num_err_down", e_tid_uint, NULL, 4, "1", "Number of errors detected in Downconverter Level field."}, {"error_counters.num_err_resamp", e_tid_uint, NULL, 4, "1", "Number of errors detected in Resampling factor for echo data field."}, {"error_counters.num_err_beam_adj", e_tid_uint, NULL, 4, "1", "Number of errors detected in Beam adjustment delta field."}, {"error_counters.num_err_beam_set_num", e_tid_uint, NULL, 4, "1", "Number of errors detected in Antenna Beam Set Number field."}, {"spare_5", e_tid_spare, NULL, 26, "1", "Spare"}, {"image_parameters.swst_value", e_tid_float, "s", 4, "5", "Sampling Window Start time of first processed line"}, {"image_parameters.last_swst_value", e_tid_float, "s", 4, "5", "Sampling Window Start time of last processed line"}, {"image_parameters.swst_changes", e_tid_uint, NULL, 4, "5", "Number of Sample Window Start Time changes within a beam"}, {"image_parameters.prf_value", e_tid_float, "Hz", 4, "5", "Pulse Repetition Frequency"}, {"image_parameters.tx_pulse_len_value", e_tid_float, "s", 4, "5", "Tx pulse length"}, {"image_parameters.tx_pulse_bw_value", e_tid_float, "Hz", 4, "5", "Tx pulse bandwidth"}, {"image_parameters.echo_win_len_value", e_tid_float, "s", 4, "5", "Echo Window Length"}, {"image_parameters.up_value", e_tid_float, "dB", 4, "5", "Upconverter Level - Upconverter gain set on the instrument"}, {"image_parameters.down_value", e_tid_float, "dB", 4, "5", "Downconverter Level - Downconverter gain set on the instrument"}, {"image_parameters.resamp_value", e_tid_float, NULL, 4, "5", "Resampling factor"}, {"image_parameters.beam_adj_value", e_tid_float, "deg.", 4, "5", "Beam adjustment delta"}, {"image_parameters.beam_set_value", e_tid_ushort, NULL, 2, "5", "Antenna Beam Set Number"}, {"image_parameters.tx_monitor_value", e_tid_float, NULL, 4, "5", "Auxiliary Tx Monitor Level"}, {"spare_6", e_tid_spare, NULL, 82, "1", "Spare"}, {"first_proc_range_samp", e_tid_uint, "samples", 4, "1", "First processed input range sample, first sample is 1"}, {"range_ref", e_tid_float, "m", 4, "1", "Range spreading loss reference range"}, {"range_samp_rate", e_tid_float, "Hz", 4, "1", "Range sampling rate"}, {"radar_freq", e_tid_float, "Hz", 4, "1", "Radar Frequency"}, {"num_looks_range", e_tid_ushort, "looks", 2, "1", "Number of range looks"}, {"filter_range", e_tid_string, "ascii", 7, "1", "Matched filter window type:HAMMING or KAISERØ or NONEØØØ"}, {"filter_coef_range", e_tid_float, NULL, 4, "1", "Window coefficient for range-matched filter"}, {"bandwidth.look_bw_range", e_tid_float, "Hz", 4, "5", "Range Look Bandwidth (null to null)"}, {"bandwidth.tot_bw_range", e_tid_float, "Hz", 4, "5", "Total processed range bandwidth (null to null)"}, {"nominal_chirp.1.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 1)"}, {"nominal_chirp.1.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 1)"}, {"nominal_chirp.2.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 2)"}, {"nominal_chirp.2.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 2)"}, {"nominal_chirp.3.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 3)"}, {"nominal_chirp.3.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 3)"}, {"nominal_chirp.4.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 4)"}, {"nominal_chirp.4.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 4)"}, {"nominal_chirp.5.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 5)"}, {"nominal_chirp.5.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 5)"}, {"spare_7", e_tid_spare, NULL, 60, "1", "Spare"}, {"num_lines_proc", e_tid_uint, "lines", 4, "1", "Number of input lines processed"}, {"num_look_az", e_tid_ushort, "looks", 2, "1", "Number of Azimuth Looks"}, {"look_bw_az", e_tid_float, "Hz", 4, "1", "Azimuth Look Bandwidth (null to null) -- this is the nominal value only for GM, WS, and AP."}, {"to_bw_az", e_tid_float, "Hz", 4, "1", "Processed Azimuth bandwidth (null to null) -- this field is used only for IM products and WV imagettes. Filled with zeros otherwise."}, {"filter_az", e_tid_string, "ascii", 7, "1", "Matched filter window type:HAMMING or KAISERØ or NONEØØØ"}, {"filter_coef_az", e_tid_float, NULL, 4, "1", "Window coefficient for azimuth-matched filter"}, {"az_fm_rate", e_tid_float, "Hz/sHz/s2Hz/s3", 4, "3", "3 co-efficients for Azimuth FM rate:Azimuth FM rate = C0 + C1(tSR-t0) + C2(tSR - t0)2tSR = 2 way slant range time"}, {"ax_fm_origin", e_tid_float, "ns", 4, "1", "2 way slant range time origin (t0) for Azimuth FM rate calculation"}, {"dop_amb_conf", e_tid_float, NULL, 4, "1", "Doppler Centroid Ambiguity Confidence MeasureValue between 0 and 1, 0 = poorest confidence, 1= highest confidence"}, {"spare_8", e_tid_spare, NULL, 68, "1", "Spare"}, {"calibration_factors.1.proc_scaling_fact", e_tid_float, NULL, 4, "1", "Processor scaling factor (record 1)"}, {"calibration_factors.1.ext_cal_fact", e_tid_float, NULL, 4, "1", "External Calibration Scaling Factor (mode/swath/polarization dependent) (record 1)"}, {"calibration_factors.2.proc_scaling_fact", e_tid_float, NULL, 4, "1", "Processor scaling factor (record 2)"}, {"calibration_factors.2.ext_cal_fact", e_tid_float, NULL, 4, "1", "External Calibration Scaling Factor (mode/swath/polarization dependent) (record 2)"}, {"noise_estimation.noise_power_corr", e_tid_float, NULL, 4, "5", "Noise power correction factors"}, {"noise_estimation.num_noise_lines", e_tid_uint, NULL, 4, "5", "Number of noise lines used to calculate factors"}, {"spare_9", e_tid_spare, NULL, 64, "1", "Spare"}, {"spare_10", e_tid_spare, NULL, 12, "1", "Spare"}, {"output_statistics.1.out_mean", e_tid_float, NULL, 4, "1", "Output data mean Magnitude for detected products, real sample mean for SLC products (record 1)"}, {"output_statistics.1.out_imag_mean", e_tid_float, NULL, 4, "1", "Output imaginary data mean Used for SLC products only (set to zero otherwise) (record 1)"}, {"output_statistics.1.out_std_dev", e_tid_float, NULL, 4, "1", "Output data standard deviation Magnitude std. dev. for detected products, real sample std. dev. for SLC products (record 1)"}, {"output_statistics.1.out_imag_std_dev", e_tid_float, NULL, 4, "1", "Output imaginary data standard deviation Used for SLC products only (set to zero otherwise) (record 1)"}, {"output_statistics.2.out_mean", e_tid_float, NULL, 4, "1", "Output data mean Magnitude for detected products, real sample mean for SLC products (record 2)"}, {"output_statistics.2.out_imag_mean", e_tid_float, NULL, 4, "1", "Output imaginary data mean Used for SLC products only (set to zero otherwise) (record 2)"}, {"output_statistics.2.out_std_dev", e_tid_float, NULL, 4, "1", "Output data standard deviation Magnitude std. dev. for detected products, real sample std. dev. for SLC products (record 2)"}, {"output_statistics.2.out_imag_std_dev", e_tid_float, NULL, 4, "1", "Output imaginary data standard deviation Used for SLC products only (set to zero otherwise) (record 2)"}, {"spare_11", e_tid_spare, NULL, 52, "1", "Spare"}, {"echo_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S&MØ, NONE"}, {"echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples8/4, 8/3, 8/2, or 8/8"}, {"init_cal_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S&MØ, NONE"}, {"init_cal_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, or 8/8"}, {"per_cal_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S&MØ, NONE"}, {"per_cal_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples8/4, 8/3, 8/2, or 8/8"}, {"noise_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S&MØ, NONE"}, {"noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples8/4, 8/3, 8/2, or 8/8"}, {"spare_12", e_tid_spare, NULL, 64, "1", "Spare"}, {"beam_overlap", e_tid_uint, NULL, 4, "4", "Number of slant range samples in beam overlap(1-2, 2-3, 3-4, 4-5)"}, {"lines_per_burst", e_tid_uint, "lines", 4, "5", "Number of lines per burst for this image 5 values for beams SS1 to SS5 in WS and GM modes.One value for AP mode, all others set to zero."}, {"spare_13", e_tid_spare, NULL, 44, "1", "Spare"}, {"orbit_state_vectors.1.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 1)"}, {"orbit_state_vectors.1.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.2.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 2)"}, {"orbit_state_vectors.2.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.3.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 3)"}, {"orbit_state_vectors.3.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.4.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 4)"}, {"orbit_state_vectors.4.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.5.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 5)"}, {"orbit_state_vectors.5.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 5)"}, {"spare_14", e_tid_spare, NULL, 64, "1", "Spare"}, {"slant_range_time", e_tid_float, "ns", 4, "1", "2-way slant range time origin (t0)"}, {"dop_coef", e_tid_float, "HzHz/sHz/s2Hz/s3Hz/s4", 4, "5", "Doppler centroid coefficients as a function of slant range time: D0, D1, D2, D3, and D4.where Doppler Centroid = D0 + D1(tSR-t0) + D2(tSR-t0)2 + D3(tSR-t0)3 + D4(tSR-t0)4"}, {"dop_conf", e_tid_float, NULL, 4, "1", "Doppler Centroid Confidence MeasureValue between 0 and 1, 0 = poorest confidence, 1= highest confidence"}, {"spare_15", e_tid_spare, NULL, 14, "1", "Spare"}, {"chirp_width", e_tid_float, "samples", 4, "1", "3-dB pulse width of chirp replica cross-correlation function between extract chirp and nominal chirp"}, {"chirp_sidelobe", e_tid_float, "dB", 4, "1", "First side lobe level of chirp replica cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_islr", e_tid_float, "dB", 4, "1", "ISLR of chirp replica cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_peak_loc", e_tid_float, "samples", 4, "1", "Peak location of cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_power", e_tid_float, NULL, 4, "1", "Chirp power"}, {"elev_corr_factor", e_tid_float, NULL, 4, "1", "Elevation gain correction scaling factor applied to range compressed samples"}, {"spare_16", e_tid_spare, NULL, 16, "1", "Spare"}, {"cal_info.1.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 1)"}, {"cal_info.1.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 1)"}, {"cal_info.1.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 1)"}, {"cal_info.1.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 1)"}, {"cal_info.2.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 2)"}, {"cal_info.2.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 2)"}, {"cal_info.2.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 2)"}, {"cal_info.2.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 2)"}, {"cal_info.3.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 3)"}, {"cal_info.3.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 3)"}, {"cal_info.3.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 3)"}, {"cal_info.3.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 3)"}, {"cal_info.4.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 4)"}, {"cal_info.4.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 4)"}, {"cal_info.4.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 4)"}, {"cal_info.4.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 4)"}, {"cal_info.5.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 5)"}, {"cal_info.5.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 5)"}, {"cal_info.5.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 5)"}, {"cal_info.5.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 5)"}, {"cal_info.6.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 6)"}, {"cal_info.6.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 6)"}, {"cal_info.6.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 6)"}, {"cal_info.6.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 6)"}, {"cal_info.7.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 7)"}, {"cal_info.7.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 7)"}, {"cal_info.7.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 7)"}, {"cal_info.7.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 7)"}, {"cal_info.8.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 8)"}, {"cal_info.8.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 8)"}, {"cal_info.8.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 8)"}, {"cal_info.8.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 8)"}, {"cal_info.9.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 9)"}, {"cal_info.9.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 9)"}, {"cal_info.9.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 9)"}, {"cal_info.9.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 9)"}, {"cal_info.10.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 10)"}, {"cal_info.10.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 10)"}, {"cal_info.10.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 10)"}, {"cal_info.10.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 10)"}, {"cal_info.11.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 11)"}, {"cal_info.11.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 11)"}, {"cal_info.11.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 11)"}, {"cal_info.11.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 11)"}, {"cal_info.12.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 12)"}, {"cal_info.12.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 12)"}, {"cal_info.12.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 12)"}, {"cal_info.12.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 12)"}, {"cal_info.13.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 13)"}, {"cal_info.13.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 13)"}, {"cal_info.13.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 13)"}, {"cal_info.13.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 13)"}, {"cal_info.14.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 14)"}, {"cal_info.14.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 14)"}, {"cal_info.14.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 14)"}, {"cal_info.14.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 14)"}, {"cal_info.15.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 15)"}, {"cal_info.15.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 15)"}, {"cal_info.15.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 15)"}, {"cal_info.15.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 15)"}, {"cal_info.16.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 16)"}, {"cal_info.16.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 16)"}, {"cal_info.16.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 16)"}, {"cal_info.16.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 16)"}, {"cal_info.17.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 17)"}, {"cal_info.17.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 17)"}, {"cal_info.17.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 17)"}, {"cal_info.17.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 17)"}, {"cal_info.18.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 18)"}, {"cal_info.18.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 18)"}, {"cal_info.18.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 18)"}, {"cal_info.18.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 18)"}, {"cal_info.19.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 19)"}, {"cal_info.19.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 19)"}, {"cal_info.19.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 19)"}, {"cal_info.19.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 19)"}, {"cal_info.20.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 20)"}, {"cal_info.20.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 20)"}, {"cal_info.20.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 20)"}, {"cal_info.20.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 20)"}, {"cal_info.21.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 21)"}, {"cal_info.21.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 21)"}, {"cal_info.21.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 21)"}, {"cal_info.21.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 21)"}, {"cal_info.22.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 22)"}, {"cal_info.22.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 22)"}, {"cal_info.22.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 22)"}, {"cal_info.22.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 22)"}, {"cal_info.23.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 23)"}, {"cal_info.23.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 23)"}, {"cal_info.23.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 23)"}, {"cal_info.23.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 23)"}, {"cal_info.24.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 24)"}, {"cal_info.24.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 24)"}, {"cal_info.24.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 24)"}, {"cal_info.24.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 24)"}, {"cal_info.25.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 25)"}, {"cal_info.25.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 25)"}, {"cal_info.25.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 25)"}, {"cal_info.25.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 25)"}, {"cal_info.26.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 26)"}, {"cal_info.26.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 26)"}, {"cal_info.26.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 26)"}, {"cal_info.26.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 26)"}, {"cal_info.27.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 27)"}, {"cal_info.27.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 27)"}, {"cal_info.27.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 27)"}, {"cal_info.27.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 27)"}, {"cal_info.28.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 28)"}, {"cal_info.28.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 28)"}, {"cal_info.28.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 28)"}, {"cal_info.28.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 28)"}, {"cal_info.29.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 29)"}, {"cal_info.29.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 29)"}, {"cal_info.29.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 29)"}, {"cal_info.29.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 29)"}, {"cal_info.30.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 30)"}, {"cal_info.30.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 30)"}, {"cal_info.30.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 30)"}, {"cal_info.30.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 30)"}, {"cal_info.31.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 31)"}, {"cal_info.31.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 31)"}, {"cal_info.31.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 31)"}, {"cal_info.31.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 31)"}, {"cal_info.32.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 32)"}, {"cal_info.32.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 32)"}, {"cal_info.32.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 32)"}, {"cal_info.32.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 32)"}, {"spare_17", e_tid_spare, NULL, 16, "1", "Spare"}, {"first_line_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time at first line of imagette"}, {"first_line_tie_points.range_samp_nums_first", e_tid_uint, NULL, 4, "3", "Range sample number Gives the range location of the grid points. First range sample is 1, is M (includes zero filled samples)"}, {"first_line_tie_points.slant_range_times_first", e_tid_float, "ns", 4, "3", "2 way slant range time to range sample"}, {"first_line_tie_points.inc_angles_first", e_tid_float, "deg.", 4, "3", "Incidence Angle at range sample"}, {"first_line_tie_points.lats_first", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic latitude of range sample (positive north)"}, {"first_line_tie_points.longs_first", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic longitude of range sample (positive east)"}, {"mid_line_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time at centre line of imagette"}, {"mid_range_line_nums", e_tid_uint, NULL, 4, "1", "Range line number of the center range line"}, {"mid_line_tie_points.range_samp_nums_mid", e_tid_uint, NULL, 4, "3", "Range sample number Gives the range location of the grid points. First range sample is 1, is M (includes zero filled samples)"}, {"mid_line_tie_points.slant_range_times_mid", e_tid_float, "ns", 4, "3", "2 way slant range time to range sample"}, {"mid_line_tie_points.inc_angles_mid", e_tid_float, "deg.", 4, "3", "Incidence Angle at range sample"}, {"mid_line_tie_points.lats_mid", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic latitude of range sample (positive north)"}, {"mid_line_tie_points.longs_mid", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic longitude of range sample (positive east)"}, {"last_line_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time at last line of imagette"}, {"last_line_num", e_tid_uint, NULL, 4, "1", "Range line number of the last range line"}, {"last_line_tie_points.range_samp_nums_last", e_tid_uint, NULL, 4, "3", "Range sample number Gives the range location of the grid points. First range sample is 1, is M (includes zero filled samples)"}, {"last_line_tie_points.slant_range_times_last", e_tid_float, "ns", 4, "3", "2 way slant range time to range sample"}, {"last_line_tie_points.inc_angles_last", e_tid_float, "deg.", 4, "3", "Incidence Angle at range sample"}, {"last_line_tie_points.lats_last", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic latitude of range sample (positive north)"}, {"last_line_tie_points.longs_last", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic longitude of range sample (positive east)"}, {"swst_offset", e_tid_float, "ns", 4, "1", "Wave cell SWST offset from center of the sub-swath to start of imagette. 208 ns increments"}, {"ground_range_bias", e_tid_float, "km", 4, "1", "Wave cell Ground range bias from centre of the Sub-Swath to the centre of the imagette (Ground range, km)"}, {"elev_angle_bias", e_tid_float, "deg", 4, "1", "Wave cell Elevation angle biasfrom centre of the Sub-Swath elevation to the centre of the imagette (deg)"}, {"imagette_range_len", e_tid_float, "m", 4, "1", "Imagette length in range (m)"}, {"imagette_az_len", e_tid_float, "m", 4, "1", "Imagette length in azimuth (m)"}, {"imagette_range_res", e_tid_float, "m", 4, "1", "Nominal Imagette resolution in slant range (m)"}, {"ground_res", e_tid_float, "m", 4, "1", "Nominal resolution in ground range"}, {"imagette_az_res", e_tid_float, "m", 4, "1", "Nominal Imagette resolution in azimuth (m)"}, {"platform_alt", e_tid_float, "m", 4, "1", "Altitude (platform to ellipsoid) in metres (centre of wave cell)"}, {"platform_vel", e_tid_float, "m/s", 4, "1", "Platform Velocity (m/s)w.r.t moving earth"}, {"slant_range", e_tid_float, "m", 4, "1", "Range to centre of imagette (m)from platform to target"}, {"cw_drift", e_tid_float, NULL, 4, "1", "CW signal drift"}, {"wave_subcycle", e_tid_ushort, NULL, 2, "1", "Wave sub-cycle (1 or 2) of this wave cell"}, {"earth_radius", e_tid_float, "m", 4, "1", "Earth Radius at imagette center sample"}, {"sat_height", e_tid_float, "m", 4, "1", "Satellite distance to earth center"}, {"first_sample_slant_range", e_tid_float, "m", 4, "1", "Distance from satellite to first range pixel in the full SLC image"}, {"spare_18", e_tid_spare, NULL, 12, "1", "Spare"}, {"elevation_pattern.slant_range_time", e_tid_float, "ns", 4, "11", "2 way slant range times"}, {"elevation_pattern.elevation_angles", e_tid_float, "degrees", 4, "11", "Corresponding elevation angles"}, {"elevation_pattern.antenna_pattern", e_tid_float, "dB", 4, "11", "Corresponding two-way antenna elevation pattern values"}, {"spare_19", e_tid_spare, NULL, 14, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Wave_SQ_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero doppler time at which SQ information applies"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag. Set to 1 if PF-ASAR was unable to produce an imagette for the wave cell. The fields in other DSR's corresponding to this one are set to zero, apart from the Zero Doppler Time."}, {"input_mean_flag", e_tid_uchar, "flag", 1, "1", "Input data mean outside nominal range flag0 = mean of I and Q input values are both within specified range from expected mean. For expected mean of x, the measured mean must fall between x-threshold to x+threshold.1 = otherwise"}, {"input_std_dev_flag", e_tid_uchar, "flag", 1, "1", "Input data standard deviation outside nominal range flag0 = standard deviation values of I and Q input values are both within specified range of expected standard deviation. For expected std. dev. x, the measured std. dev. must fall between x-threshold to"}, {"input_gaps_flag", e_tid_uchar, "flag", 1, "1", "Significant gaps in the input data flagAn input data gap is defined as a contiguous block of N missing lines (the value of N is predefined for each product)0 = number of input gaps <= threshold value1 = number of input data gaps > threshold value"}, {"input_missing_lines_flag", e_tid_uchar, "flag", 1, "1", "Missing lines significant flag 0 = percentage of missing lines <= threshold value 1 = percentage of missing lines > threshold valueThe number of missing lines is the number of lines missing from the input data excluding data gaps."}, {"dop_cen_flag", e_tid_uchar, "flag", 1, "1", "Doppler Centroid Uncertain flag0 = confidence measure >= specified value1 = Error message generated if confidence measure < specified value(note: if more than one Doppler centroid estimation is performed in a slice the flag is set if any confidence measur"}, {"dop_amb_flag", e_tid_uchar, "flag", 1, "1", "Doppler ambiguity estimate uncertain flag0 = confidence measure >= specified value1 = confidence measure < specified value"}, {"output_mean_flag", e_tid_uchar, "flag", 1, "1", "Output data mean outside nominal range flag0 = mean of I and Q output values for SLC image or mean of detected pixels for a detected product, are both within specified range from expected mean. For expected mean of x, the measured mean must fall between x"}, {"output_std_dev_flag", e_tid_uchar, "flag", 1, "1", "Output data standard deviation outside nominal range flag0 = std. dev. of I and Q output values for SLC image or std. dev. of detected pixels for a detected product, are both within specified range from expected std. dev. For expected std. dev. of x, the"}, {"chirp_flag", e_tid_uchar, "flag", 1, "1", "Chirp extraction failed or is of low quality flag 0 = able to extract all chirps or chirp extraction not requested (nominal chirp used) AND all quality measures were acceptable.1 = unable to extract a chirp during processing and chirp extraction was reque"}, {"missing_data_sets_flag", e_tid_uchar, "flag", 1, "1", "Data sets missing flag0 = all data sets which are supposed to be in the product are present1 = any data sets (including ADSs) are missing from the product which are supposed to be included under normal circumstances. Which data sets are missing can be det"}, {"invalid_downlink_flag", e_tid_uchar, "flag", 1, "1", "Invalid downlink parameters flag0 = all parameters read from the downlinked data were valid1 = displayed if any downlink parameter is out of range and therefore a default value has been used during processing."}, {"spare_1", e_tid_spare, NULL, 7, "1", "Spare"}, {"thresh_chirp_broadening", e_tid_float, "%", 4, "1", "Threshold for setting the chirp quality flag. Maximum percentage broadening permitted in cross-correlation pulse width compared to theoretical width."}, {"thresh_chirp_sidelobe", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - First sidelobe of the chirp cross correlation function"}, {"thresh_chirp_islr", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - ISLR of the chirp cross correlation function"}, {"thresh_input_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of input data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T."}, {"exp_input_mean", e_tid_float, NULL, 4, "1", "Expected mean input value for this product for both I and Q."}, {"thresh_input_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of input data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D."}, {"exp_input_std_dev", e_tid_float, NULL, 4, "1", "Expected input std. dev. for this product for both I and Q."}, {"thresh_dop_cen", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid quality flag - Threshold for Doppler Centroid confidence"}, {"thresh_dop_amb", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid ambiguity quality flag - Threshold for setting the Doppler Centroid ambiguity confidence flag"}, {"thresh_output_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of output data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T."}, {"exp_output_mean", e_tid_float, NULL, 4, "1", "Expected mean output value for this product. For an SLC product this is the expected mean of both the I and Q values."}, {"thresh_output_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of output data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D."}, {"exp_output_std_dev", e_tid_float, NULL, 4, "1", "Expected output std. dev. for this product. For an SLC product this is the expected output std. dev. for both I and Q values."}, {"thresh_input_missing_lines", e_tid_float, "%", 4, "1", "Threshold for setting the missing lines quality flag - maximum percentage of missing lines to total lines."}, {"thresh_input_gaps", e_tid_float, NULL, 4, "1", "Threshold for setting the missing gaps quality flag - maximum number of missing gaps allowed."}, {"lines_per_gaps", e_tid_uint, "lines", 4, "1", "Number of missing lines which constitute a gap"}, {"spare_2", e_tid_spare, NULL, 15, "1", "Spare"}, {"input_mean", e_tid_float, NULL, 4, "2", "Input data mean (i channel, q channel"}, {"input_std_dev", e_tid_float, NULL, 4, "2", "Input data standard deviation (i channel, q channel)"}, {"num_gaps", e_tid_float, NULL, 4, "1", "Number of gaps (composed of a predetermined number of consecutive missing lines)"}, {"num_missing_lines", e_tid_float, NULL, 4, "1", "Number of missing lines (excluding gaps)"}, {"output_mean", e_tid_float, NULL, 4, "2", "Output data mean (detected samples, followed by zero, or i channel followed by q channel for SLC)"}, {"output_std_dev", e_tid_float, NULL, 4, "2", "Output data standard deviation (detected samples followed by zero, or i channel followed by q channel for SLC)"}, {"tot_errors", e_tid_uint, NULL, 4, "1", "Total number of errors detected in ISP headers"}, {"Spare_3", e_tid_spare, NULL, 16, "1", "Spare"}, {"land_flag", e_tid_uchar, "flag", 1, "1", "Land Flag 0 = no land in imagette1 = land in imagette"}, {"look_conf_flag", e_tid_uchar, "flag", 1, "1", "Look image statistics confidence parameter flag 1 = The ratio of the standard deviation to the mean of the first look image is outside the range given by a minimum and a maximum threshold.0 =otherwise"}, {"inter_look_conf_flag", e_tid_uchar, "flag", 1, "1", "Inter-look confidence statistics confidence parameter flag1 = The normalised deviation of the two inter-look sub-images is greater than a maximum threshold.0 = otherwise"}, {"az_cutoff_flag", e_tid_uchar, "flag", 1, "1", "Azimuth cut-off convergence measure flag1 = The normalised RMS error between the fitted co-variance profile is greater than a maximum threshold.0 = otherwise"}, {"az_cutoff_iteration_flag", e_tid_uchar, "flag", 1, "1", "Azimuth cut-off Iteration count overflow flag1 = The Azimuth cut-off fit did not converge within a minimum number of iterations.0 = otherwise"}, {"phase_flag", e_tid_uchar, "flag", 1, "1", "Phase information confidence measure flag1 = The imaginary spectral peak is less than a minimum threshold, and the zero lag shift is greater than a minimum threshold.0 = otherwise"}, {"spare_4", e_tid_spare, NULL, 4, "1", "Spare"}, {"look_conf_thresh", e_tid_float, NULL, 4, "2", "Look image statistics confidence parameter thresholds (minimum and maximum)"}, {"inter_look_conf_thresh", e_tid_float, NULL, 4, "1", "Inter-look confidence statistics confidence parameter threshold"}, {"az_cutoff_thresh", e_tid_float, NULL, 4, "1", "Azimuth cut-off convergence measure threshold"}, {"az_cutoff_iterations_thresh", e_tid_uint, NULL, 4, "1", "Azimuth cut-off Iteration count overflow threshold"}, {"phase_peak_thresh", e_tid_float, NULL, 4, "1", "Phase information confidence measure threshold for the spectral peak"}, {"phase_cross_thresh", e_tid_float, "m", 4, "1", "Phase information confidence measure threshold for cross covariance peak offset"}, {"spare_5", e_tid_spare, NULL, 12, "1", "Spare"}, {"look_conf", e_tid_float, NULL, 4, "1", "Look image statistics confidence parameterThe ratio of the standard deviation to the mean of the first look image"}, {"inter_look_conf", e_tid_float, NULL, 4, "1", "Inter-look confidence statistics confidence parameter.The normalised deviation of the two inter-look sub-images"}, {"az_cutoff", e_tid_float, NULL, 4, "1", "Azimuth cut-off convergence measureThe normalised RMS error between the fitted co-variance profile"}, {"phase_peak_conf", e_tid_float, NULL, 4, "1", "Phase information confidence measure for the spectral peakThe imaginary spectral peak"}, {"phase_cross_conf", e_tid_float, "m", 4, "1", "Phase information confidence measure for cross covariance peak offset"}, {"spare_6", e_tid_spare, NULL, 12, "1", "Spare"} }; static const struct RecordDescriptor ASA_CON_AX_GADS_asar_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of creation"}, {"dsr_length", e_tid_uint, "bytes", 4, "1", "Length of this DSR in bytes"}, {"thresh_chirp_broadening", e_tid_float, "%", 4, "1", "Threshold for setting the chirp quality flag. Maximum percentage broadening permitted in cross-correlation pulse width compared to theoretical width."}, {"thresh_chirp_sidelobe", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - First sidelobe of the chirp cross correlation function"}, {"thresh_chirp_islr", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - ISLR of the chirp cross correlation function"}, {"thresh_input_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of input data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T. Used for both I and Q channels."}, {"thresh_input_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of input data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D. Used for both I and Q channels."}, {"thresh_dop_cen", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid quality flag - Threshold for Doppler Centroid confidence"}, {"thresh_dop_amb", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid ambiguity quality flag - Threshold for setting the Doppler Centroid ambiguity confidence flag"}, {"thresh_output_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of output data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T."}, {"thresh_output_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of output data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D."}, {"thresh_missing_lines", e_tid_float, NULL, 4, "1", "Threshold for setting the missing lines quality flag - maximum percentage of missing lines to total lines."}, {"thresh_gaps", e_tid_float, NULL, 4, "1", "Threshold for setting the missing gaps quality flag - maximum number of gaps allowed."}, {"spare_1", e_tid_spare, NULL, 64, "1", "Spare"}, {"lines_per_gap", e_tid_uint, "lines", 4, "1", "Number of missing lines which constitute a gap"}, {"exp_im_mean", e_tid_float, NULL, 4, "1", "Expected mean of I and Q samples for IM (and WV) SLC images"}, {"exp_im_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of I and Q samples for IM (and WV) SLC images"}, {"exp_ap_mean", e_tid_float, NULL, 4, "1", "Expected mean of I and Q samples for AP SLC images"}, {"exp_ap_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of I and Q samples for AP SLC images"}, {"exp_imp_mean", e_tid_float, NULL, 4, "1", "Expected mean of IM PRI samples"}, {"exp_imp_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of IM PRI samples"}, {"exp_app_mean", e_tid_float, NULL, 4, "1", "Expected mean of AP PRI samples"}, {"exp_app_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of AP PRI samples"}, {"exp_imm_mean", e_tid_float, NULL, 4, "1", "Expected mean of IMM samples"}, {"exp_imm_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of IMM samples"}, {"exp_apm_mean", e_tid_float, NULL, 4, "1", "Expected mean of APM samples"}, {"exp_apm_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of APM samples"}, {"exp_wsm_mean", e_tid_float, NULL, 4, "1", "Expected mean of WSM samples"}, {"exp_wsm_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of WSM samples"}, {"exp_gm1_mean", e_tid_float, NULL, 4, "1", "Expected mean of GM1 samples"}, {"exp_gm1_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of GM1 samples"}, {"input_mean", e_tid_float, NULL, 4, "1", "Expected input mean"}, {"expected_input_std_dev", e_tid_float, NULL, 4, "1", "Expected input standard deviation"}, {"look_conf_thresh", e_tid_float, NULL, 4, "2", "Look image statistics confidence parameter thresholds (minimum and maximum)"}, {"inter_look_conf_thresh", e_tid_float, NULL, 4, "1", "Inter-look confidence statistics confidence parameter threshold"}, {"az_cutoff_thresh", e_tid_float, NULL, 4, "1", "Azimuth cut-off convergence measure threshold"}, {"az_cutoff_iterations_thresh", e_tid_float, NULL, 4, "1", "Azimuth cut-off Iteration count overflow threshold"}, {"phs_peak_thresh", e_tid_float, NULL, 4, "1", "Phase information confidence measure threshold for the spectral peak"}, {"phs_cross_thresh", e_tid_float, "m", 4, "1", "Phase information confidence measure threshold for the cross covariance peak offset"}, {"spare_2", e_tid_spare, NULL, 64, "1", "Spare"}, {"spare_3", e_tid_spare, NULL, 504, "1", "Spare"} }; static const struct RecordDescriptor ASA_INS_AX_GADS_asar_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of creation"}, {"dsr_length", e_tid_uint, "bytes", 4, "1", "Length of this DSR in bytes"}, {"radar_freq", e_tid_float, "Hz", 4, "1", "Radar Frequency"}, {"samp_rate", e_tid_float, "Hz", 4, "1", "Radar Sampling Rate"}, {"offset_freq", e_tid_float, "Hz", 4, "1", "Offset frequency for wave mode calibration pulses"}, {"cal_pulse_im_hh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_hh_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_hh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_hh_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_hh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_hh_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ws_hh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_hh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_hh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_hh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_hh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_hh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"nom_pulse_im.1.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 1)"}, {"nom_pulse_im.1.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 1)"}, {"nom_pulse_im.1.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 1)"}, {"nom_pulse_im.2.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 2)"}, {"nom_pulse_im.2.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 2)"}, {"nom_pulse_im.2.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 2)"}, {"nom_pulse_im.3.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 3)"}, {"nom_pulse_im.3.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 3)"}, {"nom_pulse_im.3.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 3)"}, {"nom_pulse_im.4.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 4)"}, {"nom_pulse_im.4.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 4)"}, {"nom_pulse_im.4.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 4)"}, {"nom_pulse_im.5.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 5)"}, {"nom_pulse_im.5.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 5)"}, {"nom_pulse_im.5.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 5)"}, {"nom_pulse_im.6.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 6)"}, {"nom_pulse_im.6.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 6)"}, {"nom_pulse_im.6.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 6)"}, {"nom_pulse_im.7.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 7)"}, {"nom_pulse_im.7.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 7)"}, {"nom_pulse_im.7.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 7)"}, {"nom_pulse_ap.1.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 1)"}, {"nom_pulse_ap.1.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 1)"}, {"nom_pulse_ap.1.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 1)"}, {"nom_pulse_ap.2.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 2)"}, {"nom_pulse_ap.2.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 2)"}, {"nom_pulse_ap.2.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 2)"}, {"nom_pulse_ap.3.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 3)"}, {"nom_pulse_ap.3.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 3)"}, {"nom_pulse_ap.3.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 3)"}, {"nom_pulse_ap.4.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 4)"}, {"nom_pulse_ap.4.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 4)"}, {"nom_pulse_ap.4.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 4)"}, {"nom_pulse_ap.5.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 5)"}, {"nom_pulse_ap.5.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 5)"}, {"nom_pulse_ap.5.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 5)"}, {"nom_pulse_ap.6.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 6)"}, {"nom_pulse_ap.6.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 6)"}, {"nom_pulse_ap.6.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 6)"}, {"nom_pulse_ap.7.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 7)"}, {"nom_pulse_ap.7.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 7)"}, {"nom_pulse_ap.7.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 7)"}, {"nom_pulse_wv.1.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 1)"}, {"nom_pulse_wv.1.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 1)"}, {"nom_pulse_wv.1.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 1)"}, {"nom_pulse_wv.2.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 2)"}, {"nom_pulse_wv.2.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 2)"}, {"nom_pulse_wv.2.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 2)"}, {"nom_pulse_wv.3.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 3)"}, {"nom_pulse_wv.3.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 3)"}, {"nom_pulse_wv.3.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 3)"}, {"nom_pulse_wv.4.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 4)"}, {"nom_pulse_wv.4.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 4)"}, {"nom_pulse_wv.4.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 4)"}, {"nom_pulse_wv.5.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 5)"}, {"nom_pulse_wv.5.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 5)"}, {"nom_pulse_wv.5.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 5)"}, {"nom_pulse_wv.6.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 6)"}, {"nom_pulse_wv.6.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 6)"}, {"nom_pulse_wv.6.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 6)"}, {"nom_pulse_wv.7.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 7)"}, {"nom_pulse_wv.7.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 7)"}, {"nom_pulse_wv.7.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 7)"}, {"nom_pulse_ws.1.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 1)"}, {"nom_pulse_ws.1.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 1)"}, {"nom_pulse_ws.1.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 1)"}, {"nom_pulse_ws.2.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 2)"}, {"nom_pulse_ws.2.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 2)"}, {"nom_pulse_ws.2.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 2)"}, {"nom_pulse_ws.3.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 3)"}, {"nom_pulse_ws.3.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 3)"}, {"nom_pulse_ws.3.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 3)"}, {"nom_pulse_ws.4.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 4)"}, {"nom_pulse_ws.4.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 4)"}, {"nom_pulse_ws.4.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 4)"}, {"nom_pulse_ws.5.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 5)"}, {"nom_pulse_ws.5.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 5)"}, {"nom_pulse_ws.5.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 5)"}, {"nom_pulse_gm.1.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 1)"}, {"nom_pulse_gm.1.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 1)"}, {"nom_pulse_gm.1.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 1)"}, {"nom_pulse_gm.2.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 2)"}, {"nom_pulse_gm.2.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 2)"}, {"nom_pulse_gm.2.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 2)"}, {"nom_pulse_gm.3.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 3)"}, {"nom_pulse_gm.3.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 3)"}, {"nom_pulse_gm.3.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 3)"}, {"nom_pulse_gm.4.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 4)"}, {"nom_pulse_gm.4.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 4)"}, {"nom_pulse_gm.4.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 4)"}, {"nom_pulse_gm.5.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 5)"}, {"nom_pulse_gm.5.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 5)"}, {"nom_pulse_gm.5.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 5)"}, {"az_pattern", e_tid_float, "dB", 4, "101", "2 way antenna azimuth pattern(pattern values are from beam center - 0.25 deg to beam center + 0.25 deg. in 0.005 degree steps. TBC by ESA)"}, {"range_gate_bias", e_tid_float, "s", 4, "1", "Range Gate bias"}, {"adc_lut_i", e_tid_float, NULL, 4, "255", "Look Up Table for ADC Characterization (I Channel)Contains 255 normalized amplitude levels corresponding to voltage thresholds. First value in LUT is for -127, last value is for +127. Format as is given in PO-TN-MMS-SR-0248."}, {"adc_lut_q", e_tid_float, NULL, 4, "255", "Look Up Table for ADC Characterization (Q Channel)Contains 255 normalized amplitude levels corresponding to voltage thresholds. First value in LUT is for -127, last value is for +127. Format as is given in PO-TN-MMS-SR-0248."}, {"spare_1", e_tid_spare, NULL, 60, "1", "Spare"}, {"full8_lut_i", e_tid_float, NULL, 4, "256", "Reconstruction Look Up Table for Full 8-bit Quantization (I Channel)Contains normalized amplitude levels corresponding to sample codewords. First value in LUT is for codeword 0, last value is for +255 (binary offset format). Format as is given in PO-TN-MM"}, {"full8_lut_q", e_tid_float, NULL, 4, "256", "Reconstruction Look Up Table for Full 8-bit Quantization (Q Channel)Contains normalized amplitude levels corresponding to sample codewords. First value in LUT is for codeword 0, last value is for +255 (binary- offset format). Format as is given in PO-TN-M"}, {"fbaq4_lut_i", e_tid_float, NULL, 4, "4096", "Reconstruction Look Up Table for FBAQ 4-bit Quantization (I Channel)Gives 4096 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq3_lut_i", e_tid_float, NULL, 4, "2048", "Reconstruction Look Up Table for FBAQ 3-bit Quantization (I Channel)Gives 2048 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq2_lut_i", e_tid_float, NULL, 4, "1024", "Reconstruction Look Up Table for FBAQ 2-bit Quantization (I Channel)Gives 1024 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq4_lut_q", e_tid_float, NULL, 4, "4096", "Reconstruction Look Up Table for FBAQ 4-bit Quantization (Q Channel)Gives 4096 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq3_lut_q", e_tid_float, NULL, 4, "2048", "Reconstruction Look Up Table for FBAQ 3-bit Quantization (Q Channel)Gives 2048 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq2_lut_q", e_tid_float, NULL, 4, "1024", "Reconstruction Look Up Table for FBAQ 2-bit Quantization (Q Channel)Gives 1024 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq4_no_adc", e_tid_float, "values from-127 to +127", 4, "4096", "Reconstruction Look Up Table for FBAQ 4-bit Quantization (no ADC)This is the FBAQ reconstruction LUT which does not have ADC correction incorporated into it. It gives 4096 reconstruction levels which decodes FBAQ codewords to floating point values on the"}, {"fbaq3_no_adc", e_tid_float, "values from-127 to +127", 4, "2048", "Reconstruction Look Up Table for FBAQ 3-bit Quantization (no ADC)This is the FBAQ reconstruction LUT which does not have ADC correction incorporated into it. It gives 2048 reconstruction levels which decodes FBAQ codewords to floating point values on the"}, {"fbaq2_no_adc", e_tid_float, "values from-127 to +127-", 4, "1024", "Reconstruction Look Up Table for FBAQ 2-bit Quantization (No ADC)This is the FBAQ reconstruction LUT which does not have ADC correction incorporated into it. It gives 1024 reconstruction levels which decodes FBAQ codewords to floating point values on the"}, {"sm_lut_i", e_tid_float, NULL, 4, "16", "Reconstruction Look Up Table for Sign + Magnitude Quantization (I Channel)Contains normalized amplitude reconstruction levels corresponding to sample codewords. First value in LUT is for threshold -7, last value is for threshold +7. Format as is given in"}, {"sm_lut_q", e_tid_float, NULL, 4, "16", "Reconstruction Look Up Table for Sign + Magnitude Quantization (Q Channel)Contains normalized amplitude reconstruction levels corresponding to sample codewords. First value in LUT is for threshold -7, last value is for threshold +7. Format as is given in"}, {"data_config_im.echo_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S+MØ, NONE"}, {"data_config_im.echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_im.echo_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to echo samples? (1=yes, 0=no)"}, {"data_config_im.init_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S+MØ, NONE"}, {"data_config_im.init_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, 8/8"}, {"data_config_im.init_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to initial calibration samples? (1=yes, 0=no)"}, {"data_config_im.per_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S+MØ, NONE"}, {"data_config_im.per_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_im.per_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to periodic calibration samples? (1=yes, 0=no)"}, {"data_config_im.noise_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S+MØ, NONE"}, {"data_config_im.noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_im.noise_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to noise samples? (1=yes, 0=no)"}, {"data_config_ap.echo_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S+MØ, NONE"}, {"data_config_ap.echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ap.echo_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to echo samples? (1=yes, 0=no)"}, {"data_config_ap.init_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S+MØ, NONE"}, {"data_config_ap.init_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, 8/8"}, {"data_config_ap.init_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to initial calibration samples? (1=yes, 0=no)"}, {"data_config_ap.per_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S+MØ, NONE"}, {"data_config_ap.per_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ap.per_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to periodic calibration samples? (1=yes, 0=no)"}, {"data_config_ap.noise_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S+MØ, NONE"}, {"data_config_ap.noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ap.noise_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to noise samples? (1=yes, 0=no)"}, {"data_config_ws.echo_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S+MØ, NONE"}, {"data_config_ws.echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ws.echo_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to echo samples? (1=yes, 0=no)"}, {"data_config_ws.init_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S+MØ, NONE"}, {"data_config_ws.init_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, 8/8"}, {"data_config_ws.init_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to initial calibration samples? (1=yes, 0=no)"}, {"data_config_ws.per_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S+MØ, NONE"}, {"data_config_ws.per_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ws.per_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to periodic calibration samples? (1=yes, 0=no)"}, {"data_config_ws.noise_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S+MØ, NONE"}, {"data_config_ws.noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ws.noise_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to noise samples? (1=yes, 0=no)"}, {"data_config_gm.echo_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S+MØ, NONE"}, {"data_config_gm.echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_gm.echo_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to echo samples? (1=yes, 0=no)"}, {"data_config_gm.init_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S+MØ, NONE"}, {"data_config_gm.init_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, 8/8"}, {"data_config_gm.init_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to initial calibration samples? (1=yes, 0=no)"}, {"data_config_gm.per_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S+MØ, NONE"}, {"data_config_gm.per_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_gm.per_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to periodic calibration samples? (1=yes, 0=no)"}, {"data_config_gm.noise_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S+MØ, NONE"}, {"data_config_gm.noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_gm.noise_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to noise samples? (1=yes, 0=no)"}, {"data_config_wv.echo_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S+MØ, NONE"}, {"data_config_wv.echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_wv.echo_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to echo samples? (1=yes, 0=no)"}, {"data_config_wv.init_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S+MØ, NONE"}, {"data_config_wv.init_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, 8/8"}, {"data_config_wv.init_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to initial calibration samples? (1=yes, 0=no)"}, {"data_config_wv.per_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S+MØ, NONE"}, {"data_config_wv.per_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_wv.per_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to periodic calibration samples? (1=yes, 0=no)"}, {"data_config_wv.noise_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S+MØ, NONE"}, {"data_config_wv.noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_wv.noise_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to noise samples? (1=yes, 0=no)"}, {"swath_config_im.num_samp_windows_echo", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for echo samples, initial calibration samples (from beam 1 (IS1 or SS1) to beam 7 (IS7))"}, {"swath_config_im.num_samp_windows_init_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for initial calibration samples (from beam 1 to beam 7)"}, {"swath_config_im.num_samp_windows_per_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for periodic calibration samples (from beam 1 to beam 7)"}, {"swath_config_im.num_samp_windows_noise", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for noise samples (from beam 1 to beam 7)"}, {"swath_config_im.resample_factor", e_tid_float, NULL, 4, "7", "Resampling factor (beam 1 to beam 7)"}, {"swath_config_ap.num_samp_windows_echo", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for echo samples, initial calibration samples (from beam 1 (IS1 or SS1) to beam 7 (IS7))"}, {"swath_config_ap.num_samp_windows_init_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for initial calibration samples (from beam 1 to beam 7)"}, {"swath_config_ap.num_samp_windows_per_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for periodic calibration samples (from beam 1 to beam 7)"}, {"swath_config_ap.num_samp_windows_noise", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for noise samples (from beam 1 to beam 7)"}, {"swath_config_ap.resample_factor", e_tid_float, NULL, 4, "7", "Resampling factor (beam 1 to beam 7)"}, {"swath_config_ws.num_samp_windows_echo", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for echo samples, initial calibration samples (from beam 1 (IS1 or SS1) to beam 7 (IS7))"}, {"swath_config_ws.num_samp_windows_init_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for initial calibration samples (from beam 1 to beam 7)"}, {"swath_config_ws.num_samp_windows_per_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for periodic calibration samples (from beam 1 to beam 7)"}, {"swath_config_ws.num_samp_windows_noise", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for noise samples (from beam 1 to beam 7)"}, {"swath_config_ws.resample_factor", e_tid_float, NULL, 4, "7", "Resampling factor (beam 1 to beam 7)"}, {"swath_config_gm.num_samp_windows_echo", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for echo samples, initial calibration samples (from beam 1 (IS1 or SS1) to beam 7 (IS7))"}, {"swath_config_gm.num_samp_windows_init_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for initial calibration samples (from beam 1 to beam 7)"}, {"swath_config_gm.num_samp_windows_per_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for periodic calibration samples (from beam 1 to beam 7)"}, {"swath_config_gm.num_samp_windows_noise", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for noise samples (from beam 1 to beam 7)"}, {"swath_config_gm.resample_factor", e_tid_float, NULL, 4, "7", "Resampling factor (beam 1 to beam 7)"}, {"swath_config_wv.num_samp_windows_echo", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for echo samples, initial calibration samples (from beam 1 (IS1 or SS1) to beam 7 (IS7))"}, {"swath_config_wv.num_samp_windows_init_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for initial calibration samples (from beam 1 to beam 7)"}, {"swath_config_wv.num_samp_windows_per_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for periodic calibration samples (from beam 1 to beam 7)"}, {"swath_config_wv.num_samp_windows_noise", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for noise samples (from beam 1 to beam 7)"}, {"swath_config_wv.resample_factor", e_tid_float, NULL, 4, "7", "Resampling factor (beam 1 to beam 7)"}, {"per_cal_widows_ec", e_tid_ushort, NULL, 2, "1", "Number of periodic calibration sample windows per source packet for External Characterization mode"}, {"per_cal_windows_ms", e_tid_ushort, NULL, 2, "1", "Number of periodic calibration sample windows per source packet for Module Stepping mode"}, {"swath_id_im.swath_num", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_im.beam_set_num", e_tid_ushort, NULL, 2, "7", "Antenna Beam Set numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_ap.swath_num", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_ap.beam_set_num", e_tid_ushort, NULL, 2, "7", "Antenna Beam Set numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_ws.swath_num", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_ws.beam_set_num", e_tid_ushort, NULL, 2, "7", "Antenna Beam Set numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_gm.swath_num", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_gm.beam_set_num", e_tid_ushort, NULL, 2, "7", "Antenna Beam Set numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_wv.swath_num", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_wv.beam_set_num", e_tid_ushort, NULL, 2, "7", "Antenna Beam Set numbers (IS1 to IS7 or SS1 to SS5)"}, {"init_cal_beam_set_wv", e_tid_ushort, NULL, 2, "1", "Beam Set number for Wave Mode initial calibration"}, {"beam_set_ec", e_tid_ushort, NULL, 2, "1", "Beam Set number for External Characterization Mode"}, {"beam_set_ms", e_tid_ushort, NULL, 2, "1", "Beam Set number for Module Stepping Mode"}, {"cal_seq", e_tid_ushort, NULL, 2, "32", "Calibration Row Sequence Table(32 numbers give the Row number sequence used during initial and periodic calibration)"}, {"timeline_im.swath_nums", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"timeline_im.m_values", e_tid_ushort, NULL, 2, "7", "M values (IS1 to IS7 or SS1 to SS5) M is the number of echo sampling PTIs in a cycle or subcycle"}, {"timeline_im.r_values", e_tid_ushort, NULL, 2, "7", "R values (IS1 to IS7 or SS1 to SS5) R is the rank (i.e., the number of PRI between transmitted pulse and return echo)"}, {"timeline_im.g_values", e_tid_ushort, NULL, 2, "7", "G values (IS1 to IS7 or SS1 to SS5) G is the number of cycles"}, {"timeline_ap.swath_nums", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"timeline_ap.m_values", e_tid_ushort, NULL, 2, "7", "M values (IS1 to IS7 or SS1 to SS5) M is the number of echo sampling PTIs in a cycle or subcycle"}, {"timeline_ap.r_values", e_tid_ushort, NULL, 2, "7", "R values (IS1 to IS7 or SS1 to SS5) R is the rank (i.e., the number of PRI between transmitted pulse and return echo)"}, {"timeline_ap.g_values", e_tid_ushort, NULL, 2, "7", "G values (IS1 to IS7 or SS1 to SS5) G is the number of cycles"}, {"timeline_ws.swath_nums", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"timeline_ws.m_values", e_tid_ushort, NULL, 2, "7", "M values (IS1 to IS7 or SS1 to SS5) M is the number of echo sampling PTIs in a cycle or subcycle"}, {"timeline_ws.r_values", e_tid_ushort, NULL, 2, "7", "R values (IS1 to IS7 or SS1 to SS5) R is the rank (i.e., the number of PRI between transmitted pulse and return echo)"}, {"timeline_ws.g_values", e_tid_ushort, NULL, 2, "7", "G values (IS1 to IS7 or SS1 to SS5) G is the number of cycles"}, {"timeline_gm.swath_nums", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"timeline_gm.m_values", e_tid_ushort, NULL, 2, "7", "M values (IS1 to IS7 or SS1 to SS5) M is the number of echo sampling PTIs in a cycle or subcycle"}, {"timeline_gm.r_values", e_tid_ushort, NULL, 2, "7", "R values (IS1 to IS7 or SS1 to SS5) R is the rank (i.e., the number of PRI between transmitted pulse and return echo)"}, {"timeline_gm.g_values", e_tid_ushort, NULL, 2, "7", "G values (IS1 to IS7 or SS1 to SS5) G is the number of cycles"}, {"timeline_wv.swath_nums", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"timeline_wv.m_values", e_tid_ushort, NULL, 2, "7", "M values (IS1 to IS7 or SS1 to SS5) M is the number of echo sampling PTIs in a cycle or subcycle"}, {"timeline_wv.r_values", e_tid_ushort, NULL, 2, "7", "R values (IS1 to IS7 or SS1 to SS5) R is the rank (i.e., the number of PRI between transmitted pulse and return echo)"}, {"timeline_wv.g_values", e_tid_ushort, NULL, 2, "7", "G values (IS1 to IS7 or SS1 to SS5) G is the number of cycles"}, {"m_ec", e_tid_ushort, NULL, 2, "1", "M value (see field above) for External Characterization"}, {"spare_2", e_tid_spare, NULL, 64, "1", "Spare"}, {"ref_elev_angle_is1", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS1"}, {"ref_elev_angle_is2", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS2"}, {"ref_elev_angle_is3_ss2", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS3 / SS2"}, {"ref_elev_angle_is4_ss3", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS4 / SS3"}, {"ref_elev_angle_is5_ss4", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS5 / SS4"}, {"ref_elev_angle_is6_ss5", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS6 / SS5"}, {"ref_elev_angle_is7", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS7"}, {"ref_elev_angle_ss1", e_tid_float, "deg.", 4, "1", "Reference elevation angle for SS1"}, {"spare_3", e_tid_spare, NULL, 64, "1", "Spare"}, {"cal_loop_ref_is1", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS1(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_ref_is2", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS2(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_ref_is3_ss2", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS3/SS2(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_ref_is4_ss3", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS4/SS3(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_ref_is5_ss4", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS5/SS4(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_ref_is6_ss5", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS6/SS5(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_ref_is7", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS7(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_ref_iss1", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for SS1(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_cen_is1", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS1(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_cen_is2", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS2(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_cen_is3_ss2", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS3/SS2(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_cen_is4_ss3", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS4/SS3(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_cen_is5_ss4", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS5/SS4(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_cen_is6_ss5", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS6/SS5(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_cen_is7", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS7(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_cen_iss1", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for SS1(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"spare_4", e_tid_spare, NULL, 1024, "1", "Spare"} }; static const struct RecordDescriptor ASA_XCA_AX_GADS_asar_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of creation of this file"}, {"dsr_length", e_tid_uint, "bytes", 4, "1", "Length of this DSR in bytes"}, {"ext_cal_im_hh", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for IM mode, HH polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_im_vv", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for IM mode, VV polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_ap_hh", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for AP mode, HH polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_ap_vv", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for AP mode, VV polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_ap_hv", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for AP mode, HV polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_ap_vh", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for AP mode, VH polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_wv_hh", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for WV mode, HH polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_wv_vv", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for WV mode, VV polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_ws_hh", e_tid_float, NULL, 4, "1", "External Calibration scaling factors for WS mode, HH polar."}, {"ext_cal_ws_vv", e_tid_float, NULL, 4, "1", "External Calibration scaling factors for WS mode, VV polar."}, {"ext_cal_gm_hh", e_tid_float, NULL, 4, "1", "External Calibration scaling factors for GM mode, HH polar."}, {"ext_cal_gm_vv", e_tid_float, NULL, 4, "1", "External Calibration scaling factors for GM mode, VV polar."}, {"elev_ang_is1", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS1"}, {"elev_ang_is2", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS2"}, {"elev_ang_is3_ss2", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS3 / SS2"}, {"elev_ang_is4_ss3", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS4 / SS3"}, {"elev_ang_is5_ss4", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS5 / SS4"}, {"elev_ang_is6_ss5", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS6 / SS5"}, {"elev_ang_is7", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS7"}, {"elev_ang_ss1", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for SS1"}, {"pattern_is1", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS1 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is2", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS2 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is3_ss2", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS3 / SS2 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is4_ss3", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS4 / SS3 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is5_ss4", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS5 / SS4 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is6_ss5", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS6 / SS5 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is7", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS7 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_ss1", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for SS1 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps. )"}, {"spare_1", e_tid_spare, NULL, 32, "1", "Spare"} }; static const struct RecordDescriptor ASA_XCH_AX_GADS_asar_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of characterization"}, {"dsr_length", e_tid_uint, "bytes", 4, "1", "Length of this DSR in bytes"}, {"complex_loop_factors", e_tid_float, NULL, 4, "128", "Complex Loop Paths Characterization Factors relative to free space (from External Characterization data). 64 complex (I,Q) values of gnp where n is the index of the row (1 to 32) and p is the index of the polarization (H=1, V=2) (TBC) Arranged H: 1 to 32, then V: 1-32)"}, {"pointing_error", e_tid_float, NULL, 4, "1", "Antenna pointing error DP1 (from External Characterization data)"}, {"spare_1", e_tid_spare, NULL, 64, "1", "Spare"} }; static const struct DatasetDescriptor ASA_APG_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MAP_PROJECTION_GADS", "MAP PROJECTION GADS", ASAR_Map_GADS_asar_rec_data, "Map Projection parameters"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 2"} }; static const struct DatasetDescriptor ASA_APM_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 2 (if requested)"} }; static const struct DatasetDescriptor ASA_APP_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 2"} }; static const struct DatasetDescriptor ASA_APS_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set 2"} }; static const struct DatasetDescriptor ASA_AP__BP_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_BP_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_BP_asar_rec_data, "Measurement Data Set 2"} }; static const struct DatasetDescriptor ASA_GM1_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_IMG_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MAP_PROJECTION_GADS", "MAP PROJECTION GADS", ASAR_Map_GADS_asar_rec_data, "Map Projection parameters"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_IMM_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_IMP_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_IMS_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_IM__BP_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_BP_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_WSM_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_WS__BP_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_BP_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_BP_asar_rec_data, "Measurement Data Set 2"} }; static const struct DatasetDescriptor ASA_WVI_1P_dataset_data[] = { {"SQ_ADS", "SQ ADS", ASAR_Wave_SQ_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_ADS", "GEOLOCATION ADS", ASAR_Wave_Geolocation_ADSR_asar_rec_data, "Wave Mode Geolocation ADS"}, {"PROCESSING_PARAMS_ADS", "PROCESSING PARAMS ADS", ASAR_Wave_Param_ADSR_asar_rec_data, "Wave Mode processing parameters"}, {"CROSS_SPECTRA_MDS", "CROSS SPECTRA MDS", ASAR_Spectra_MDSR_asar_rec_data, "Measurement Data Set containing spectra. 1 MDSR per spectra."}, {"SLC_IMAGETTE_MDS", "SLC IMAGETTE MDS", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_001", "SLC IMAGETTE MDS 001", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_002", "SLC IMAGETTE MDS 002", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_003", "SLC IMAGETTE MDS 003", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_004", "SLC IMAGETTE MDS 004", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_005", "SLC IMAGETTE MDS 005", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_006", "SLC IMAGETTE MDS 006", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_007", "SLC IMAGETTE MDS 007", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_008", "SLC IMAGETTE MDS 008", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_009", "SLC IMAGETTE MDS 009", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_010", "SLC IMAGETTE MDS 010", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_011", "SLC IMAGETTE MDS 011", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_012", "SLC IMAGETTE MDS 012", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_013", "SLC IMAGETTE MDS 013", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_014", "SLC IMAGETTE MDS 014", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_015", "SLC IMAGETTE MDS 015", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_016", "SLC IMAGETTE MDS 016", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_017", "SLC IMAGETTE MDS 017", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_018", "SLC IMAGETTE MDS 018", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_019", "SLC IMAGETTE MDS 019", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_020", "SLC IMAGETTE MDS 020", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_021", "SLC IMAGETTE MDS 021", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_022", "SLC IMAGETTE MDS 022", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_023", "SLC IMAGETTE MDS 023", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_024", "SLC IMAGETTE MDS 024", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_025", "SLC IMAGETTE MDS 025", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_026", "SLC IMAGETTE MDS 026", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_027", "SLC IMAGETTE MDS 027", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_028", "SLC IMAGETTE MDS 028", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_029", "SLC IMAGETTE MDS 029", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_030", "SLC IMAGETTE MDS 030", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_031", "SLC IMAGETTE MDS 031", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_032", "SLC IMAGETTE MDS 032", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_033", "SLC IMAGETTE MDS 033", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_034", "SLC IMAGETTE MDS 034", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_035", "SLC IMAGETTE MDS 035", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_036", "SLC IMAGETTE MDS 036", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_037", "SLC IMAGETTE MDS 037", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_038", "SLC IMAGETTE MDS 038", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_039", "SLC IMAGETTE MDS 039", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_040", "SLC IMAGETTE MDS 040", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_041", "SLC IMAGETTE MDS 041", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_042", "SLC IMAGETTE MDS 042", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_043", "SLC IMAGETTE MDS 043", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_044", "SLC IMAGETTE MDS 044", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_045", "SLC IMAGETTE MDS 045", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_046", "SLC IMAGETTE MDS 046", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_047", "SLC IMAGETTE MDS 047", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_048", "SLC IMAGETTE MDS 048", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_049", "SLC IMAGETTE MDS 049", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_050", "SLC IMAGETTE MDS 050", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_051", "SLC IMAGETTE MDS 051", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_052", "SLC IMAGETTE MDS 052", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_053", "SLC IMAGETTE MDS 053", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_054", "SLC IMAGETTE MDS 054", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_055", "SLC IMAGETTE MDS 055", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_056", "SLC IMAGETTE MDS 056", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_057", "SLC IMAGETTE MDS 057", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_058", "SLC IMAGETTE MDS 058", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_059", "SLC IMAGETTE MDS 059", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_060", "SLC IMAGETTE MDS 060", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_061", "SLC IMAGETTE MDS 061", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_062", "SLC IMAGETTE MDS 062", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_063", "SLC IMAGETTE MDS 063", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_064", "SLC IMAGETTE MDS 064", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_065", "SLC IMAGETTE MDS 065", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_066", "SLC IMAGETTE MDS 066", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_067", "SLC IMAGETTE MDS 067", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_068", "SLC IMAGETTE MDS 068", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_069", "SLC IMAGETTE MDS 069", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_070", "SLC IMAGETTE MDS 070", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_071", "SLC IMAGETTE MDS 071", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_072", "SLC IMAGETTE MDS 072", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_073", "SLC IMAGETTE MDS 073", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_074", "SLC IMAGETTE MDS 074", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_075", "SLC IMAGETTE MDS 075", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_076", "SLC IMAGETTE MDS 076", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_077", "SLC IMAGETTE MDS 077", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_078", "SLC IMAGETTE MDS 078", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_079", "SLC IMAGETTE MDS 079", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_080", "SLC IMAGETTE MDS 080", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_081", "SLC IMAGETTE MDS 081", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_082", "SLC IMAGETTE MDS 082", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_083", "SLC IMAGETTE MDS 083", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_084", "SLC IMAGETTE MDS 084", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_085", "SLC IMAGETTE MDS 085", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_086", "SLC IMAGETTE MDS 086", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_087", "SLC IMAGETTE MDS 087", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_088", "SLC IMAGETTE MDS 088", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_089", "SLC IMAGETTE MDS 089", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_090", "SLC IMAGETTE MDS 090", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_091", "SLC IMAGETTE MDS 091", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_092", "SLC IMAGETTE MDS 092", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_093", "SLC IMAGETTE MDS 093", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_094", "SLC IMAGETTE MDS 094", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_095", "SLC IMAGETTE MDS 095", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_096", "SLC IMAGETTE MDS 096", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_097", "SLC IMAGETTE MDS 097", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_098", "SLC IMAGETTE MDS 098", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_099", "SLC IMAGETTE MDS 099", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_100", "SLC IMAGETTE MDS 100", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_101", "SLC IMAGETTE MDS 101", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_102", "SLC IMAGETTE MDS 102", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_103", "SLC IMAGETTE MDS 103", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_104", "SLC IMAGETTE MDS 104", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_105", "SLC IMAGETTE MDS 105", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_106", "SLC IMAGETTE MDS 106", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_107", "SLC IMAGETTE MDS 107", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_108", "SLC IMAGETTE MDS 108", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_109", "SLC IMAGETTE MDS 109", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_110", "SLC IMAGETTE MDS 110", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_111", "SLC IMAGETTE MDS 111", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_112", "SLC IMAGETTE MDS 112", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_113", "SLC IMAGETTE MDS 113", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_114", "SLC IMAGETTE MDS 114", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_115", "SLC IMAGETTE MDS 115", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_116", "SLC IMAGETTE MDS 116", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_117", "SLC IMAGETTE MDS 117", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_118", "SLC IMAGETTE MDS 118", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_119", "SLC IMAGETTE MDS 119", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_120", "SLC IMAGETTE MDS 120", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_121", "SLC IMAGETTE MDS 121", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_122", "SLC IMAGETTE MDS 122", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_123", "SLC IMAGETTE MDS 123", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_124", "SLC IMAGETTE MDS 124", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_125", "SLC IMAGETTE MDS 125", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_126", "SLC IMAGETTE MDS 126", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_127", "SLC IMAGETTE MDS 127", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_128", "SLC IMAGETTE MDS 128", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_129", "SLC IMAGETTE MDS 129", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_130", "SLC IMAGETTE MDS 130", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_131", "SLC IMAGETTE MDS 131", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_132", "SLC IMAGETTE MDS 132", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_133", "SLC IMAGETTE MDS 133", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_134", "SLC IMAGETTE MDS 134", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_135", "SLC IMAGETTE MDS 135", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_136", "SLC IMAGETTE MDS 136", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_137", "SLC IMAGETTE MDS 137", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_138", "SLC IMAGETTE MDS 138", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_139", "SLC IMAGETTE MDS 139", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_140", "SLC IMAGETTE MDS 140", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_141", "SLC IMAGETTE MDS 141", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_142", "SLC IMAGETTE MDS 142", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_143", "SLC IMAGETTE MDS 143", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_144", "SLC IMAGETTE MDS 144", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_145", "SLC IMAGETTE MDS 145", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_146", "SLC IMAGETTE MDS 146", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_147", "SLC IMAGETTE MDS 147", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_148", "SLC IMAGETTE MDS 148", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_149", "SLC IMAGETTE MDS 149", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_150", "SLC IMAGETTE MDS 150", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_151", "SLC IMAGETTE MDS 151", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_152", "SLC IMAGETTE MDS 152", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_153", "SLC IMAGETTE MDS 153", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_154", "SLC IMAGETTE MDS 154", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_155", "SLC IMAGETTE MDS 155", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_156", "SLC IMAGETTE MDS 156", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_157", "SLC IMAGETTE MDS 157", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_158", "SLC IMAGETTE MDS 158", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_159", "SLC IMAGETTE MDS 159", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_160", "SLC IMAGETTE MDS 160", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_161", "SLC IMAGETTE MDS 161", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_162", "SLC IMAGETTE MDS 162", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_163", "SLC IMAGETTE MDS 163", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_164", "SLC IMAGETTE MDS 164", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_165", "SLC IMAGETTE MDS 165", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_166", "SLC IMAGETTE MDS 166", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_167", "SLC IMAGETTE MDS 167", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_168", "SLC IMAGETTE MDS 168", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_169", "SLC IMAGETTE MDS 169", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_170", "SLC IMAGETTE MDS 170", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_171", "SLC IMAGETTE MDS 171", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_172", "SLC IMAGETTE MDS 172", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_173", "SLC IMAGETTE MDS 173", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_174", "SLC IMAGETTE MDS 174", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_175", "SLC IMAGETTE MDS 175", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_176", "SLC IMAGETTE MDS 176", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_177", "SLC IMAGETTE MDS 177", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_178", "SLC IMAGETTE MDS 178", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_179", "SLC IMAGETTE MDS 179", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_180", "SLC IMAGETTE MDS 180", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_181", "SLC IMAGETTE MDS 181", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_182", "SLC IMAGETTE MDS 182", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_183", "SLC IMAGETTE MDS 183", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_184", "SLC IMAGETTE MDS 184", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_185", "SLC IMAGETTE MDS 185", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_186", "SLC IMAGETTE MDS 186", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_187", "SLC IMAGETTE MDS 187", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_188", "SLC IMAGETTE MDS 188", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_189", "SLC IMAGETTE MDS 189", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_190", "SLC IMAGETTE MDS 190", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_191", "SLC IMAGETTE MDS 191", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_192", "SLC IMAGETTE MDS 192", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_193", "SLC IMAGETTE MDS 193", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_194", "SLC IMAGETTE MDS 194", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_195", "SLC IMAGETTE MDS 195", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_196", "SLC IMAGETTE MDS 196", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_197", "SLC IMAGETTE MDS 197", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_198", "SLC IMAGETTE MDS 198", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_199", "SLC IMAGETTE MDS 199", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_200", "SLC IMAGETTE MDS 200", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_201", "SLC IMAGETTE MDS 201", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_202", "SLC IMAGETTE MDS 202", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_203", "SLC IMAGETTE MDS 203", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_204", "SLC IMAGETTE MDS 204", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_205", "SLC IMAGETTE MDS 205", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_206", "SLC IMAGETTE MDS 206", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_207", "SLC IMAGETTE MDS 207", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_208", "SLC IMAGETTE MDS 208", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_209", "SLC IMAGETTE MDS 209", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_210", "SLC IMAGETTE MDS 210", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_211", "SLC IMAGETTE MDS 211", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_212", "SLC IMAGETTE MDS 212", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_213", "SLC IMAGETTE MDS 213", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_214", "SLC IMAGETTE MDS 214", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_215", "SLC IMAGETTE MDS 215", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_216", "SLC IMAGETTE MDS 216", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_217", "SLC IMAGETTE MDS 217", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_218", "SLC IMAGETTE MDS 218", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_219", "SLC IMAGETTE MDS 219", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_220", "SLC IMAGETTE MDS 220", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_221", "SLC IMAGETTE MDS 221", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_222", "SLC IMAGETTE MDS 222", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_223", "SLC IMAGETTE MDS 223", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_224", "SLC IMAGETTE MDS 224", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_225", "SLC IMAGETTE MDS 225", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_226", "SLC IMAGETTE MDS 226", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_227", "SLC IMAGETTE MDS 227", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_228", "SLC IMAGETTE MDS 228", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_229", "SLC IMAGETTE MDS 229", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_230", "SLC IMAGETTE MDS 230", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_231", "SLC IMAGETTE MDS 231", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_232", "SLC IMAGETTE MDS 232", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_233", "SLC IMAGETTE MDS 233", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_234", "SLC IMAGETTE MDS 234", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_235", "SLC IMAGETTE MDS 235", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_236", "SLC IMAGETTE MDS 236", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_237", "SLC IMAGETTE MDS 237", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_238", "SLC IMAGETTE MDS 238", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_239", "SLC IMAGETTE MDS 239", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_240", "SLC IMAGETTE MDS 240", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_241", "SLC IMAGETTE MDS 241", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_242", "SLC IMAGETTE MDS 242", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_243", "SLC IMAGETTE MDS 243", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_244", "SLC IMAGETTE MDS 244", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_245", "SLC IMAGETTE MDS 245", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_246", "SLC IMAGETTE MDS 246", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_247", "SLC IMAGETTE MDS 247", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_248", "SLC IMAGETTE MDS 248", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_249", "SLC IMAGETTE MDS 249", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_250", "SLC IMAGETTE MDS 250", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_251", "SLC IMAGETTE MDS 251", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_252", "SLC IMAGETTE MDS 252", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_253", "SLC IMAGETTE MDS 253", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_254", "SLC IMAGETTE MDS 254", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_255", "SLC IMAGETTE MDS 255", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_256", "SLC IMAGETTE MDS 256", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_257", "SLC IMAGETTE MDS 257", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_258", "SLC IMAGETTE MDS 258", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_259", "SLC IMAGETTE MDS 259", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_260", "SLC IMAGETTE MDS 260", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_261", "SLC IMAGETTE MDS 261", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_262", "SLC IMAGETTE MDS 262", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_263", "SLC IMAGETTE MDS 263", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_264", "SLC IMAGETTE MDS 264", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_265", "SLC IMAGETTE MDS 265", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_266", "SLC IMAGETTE MDS 266", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_267", "SLC IMAGETTE MDS 267", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_268", "SLC IMAGETTE MDS 268", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_269", "SLC IMAGETTE MDS 269", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_270", "SLC IMAGETTE MDS 270", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_271", "SLC IMAGETTE MDS 271", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_272", "SLC IMAGETTE MDS 272", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_273", "SLC IMAGETTE MDS 273", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_274", "SLC IMAGETTE MDS 274", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_275", "SLC IMAGETTE MDS 275", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_276", "SLC IMAGETTE MDS 276", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_277", "SLC IMAGETTE MDS 277", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_278", "SLC IMAGETTE MDS 278", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_279", "SLC IMAGETTE MDS 279", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_280", "SLC IMAGETTE MDS 280", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_281", "SLC IMAGETTE MDS 281", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_282", "SLC IMAGETTE MDS 282", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_283", "SLC IMAGETTE MDS 283", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_284", "SLC IMAGETTE MDS 284", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_285", "SLC IMAGETTE MDS 285", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_286", "SLC IMAGETTE MDS 286", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_287", "SLC IMAGETTE MDS 287", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_288", "SLC IMAGETTE MDS 288", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_289", "SLC IMAGETTE MDS 289", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_290", "SLC IMAGETTE MDS 290", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_291", "SLC IMAGETTE MDS 291", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_292", "SLC IMAGETTE MDS 292", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_293", "SLC IMAGETTE MDS 293", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_294", "SLC IMAGETTE MDS 294", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_295", "SLC IMAGETTE MDS 295", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_296", "SLC IMAGETTE MDS 296", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_297", "SLC IMAGETTE MDS 297", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_298", "SLC IMAGETTE MDS 298", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_299", "SLC IMAGETTE MDS 299", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_300", "SLC IMAGETTE MDS 300", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_301", "SLC IMAGETTE MDS 301", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_302", "SLC IMAGETTE MDS 302", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_303", "SLC IMAGETTE MDS 303", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_304", "SLC IMAGETTE MDS 304", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_305", "SLC IMAGETTE MDS 305", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_306", "SLC IMAGETTE MDS 306", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_307", "SLC IMAGETTE MDS 307", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_308", "SLC IMAGETTE MDS 308", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_309", "SLC IMAGETTE MDS 309", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_310", "SLC IMAGETTE MDS 310", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_311", "SLC IMAGETTE MDS 311", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_312", "SLC IMAGETTE MDS 312", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_313", "SLC IMAGETTE MDS 313", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_314", "SLC IMAGETTE MDS 314", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_315", "SLC IMAGETTE MDS 315", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_316", "SLC IMAGETTE MDS 316", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_317", "SLC IMAGETTE MDS 317", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_318", "SLC IMAGETTE MDS 318", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_319", "SLC IMAGETTE MDS 319", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_320", "SLC IMAGETTE MDS 320", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_321", "SLC IMAGETTE MDS 321", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_322", "SLC IMAGETTE MDS 322", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_323", "SLC IMAGETTE MDS 323", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_324", "SLC IMAGETTE MDS 324", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_325", "SLC IMAGETTE MDS 325", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_326", "SLC IMAGETTE MDS 326", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_327", "SLC IMAGETTE MDS 327", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_328", "SLC IMAGETTE MDS 328", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_329", "SLC IMAGETTE MDS 329", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_330", "SLC IMAGETTE MDS 330", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_331", "SLC IMAGETTE MDS 331", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_332", "SLC IMAGETTE MDS 332", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_333", "SLC IMAGETTE MDS 333", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_334", "SLC IMAGETTE MDS 334", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_335", "SLC IMAGETTE MDS 335", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_336", "SLC IMAGETTE MDS 336", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_337", "SLC IMAGETTE MDS 337", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_338", "SLC IMAGETTE MDS 338", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_339", "SLC IMAGETTE MDS 339", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_340", "SLC IMAGETTE MDS 340", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_341", "SLC IMAGETTE MDS 341", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_342", "SLC IMAGETTE MDS 342", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_343", "SLC IMAGETTE MDS 343", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_344", "SLC IMAGETTE MDS 344", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_345", "SLC IMAGETTE MDS 345", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_346", "SLC IMAGETTE MDS 346", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_347", "SLC IMAGETTE MDS 347", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_348", "SLC IMAGETTE MDS 348", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_349", "SLC IMAGETTE MDS 349", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_350", "SLC IMAGETTE MDS 350", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_351", "SLC IMAGETTE MDS 351", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_352", "SLC IMAGETTE MDS 352", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_353", "SLC IMAGETTE MDS 353", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_354", "SLC IMAGETTE MDS 354", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_355", "SLC IMAGETTE MDS 355", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_356", "SLC IMAGETTE MDS 356", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_357", "SLC IMAGETTE MDS 357", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_358", "SLC IMAGETTE MDS 358", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_359", "SLC IMAGETTE MDS 359", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_360", "SLC IMAGETTE MDS 360", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_361", "SLC IMAGETTE MDS 361", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_362", "SLC IMAGETTE MDS 362", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_363", "SLC IMAGETTE MDS 363", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_364", "SLC IMAGETTE MDS 364", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_365", "SLC IMAGETTE MDS 365", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_366", "SLC IMAGETTE MDS 366", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_367", "SLC IMAGETTE MDS 367", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_368", "SLC IMAGETTE MDS 368", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_369", "SLC IMAGETTE MDS 369", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_370", "SLC IMAGETTE MDS 370", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_371", "SLC IMAGETTE MDS 371", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_372", "SLC IMAGETTE MDS 372", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_373", "SLC IMAGETTE MDS 373", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_374", "SLC IMAGETTE MDS 374", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_375", "SLC IMAGETTE MDS 375", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_376", "SLC IMAGETTE MDS 376", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_377", "SLC IMAGETTE MDS 377", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_378", "SLC IMAGETTE MDS 378", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_379", "SLC IMAGETTE MDS 379", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_380", "SLC IMAGETTE MDS 380", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_381", "SLC IMAGETTE MDS 381", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_382", "SLC IMAGETTE MDS 382", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_383", "SLC IMAGETTE MDS 383", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_384", "SLC IMAGETTE MDS 384", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_385", "SLC IMAGETTE MDS 385", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_386", "SLC IMAGETTE MDS 386", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_387", "SLC IMAGETTE MDS 387", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_388", "SLC IMAGETTE MDS 388", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_389", "SLC IMAGETTE MDS 389", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_390", "SLC IMAGETTE MDS 390", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_391", "SLC IMAGETTE MDS 391", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_392", "SLC IMAGETTE MDS 392", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_393", "SLC IMAGETTE MDS 393", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_394", "SLC IMAGETTE MDS 394", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_395", "SLC IMAGETTE MDS 395", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_396", "SLC IMAGETTE MDS 396", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_397", "SLC IMAGETTE MDS 397", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_398", "SLC IMAGETTE MDS 398", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_399", "SLC IMAGETTE MDS 399", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_400", "SLC IMAGETTE MDS 400", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"} }; static const struct DatasetDescriptor ASA_WVS_1P_dataset_data[] = { {"SQ_ADS", "SQ ADS", ASAR_Wave_SQ_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_ADS", "GEOLOCATION ADS", ASAR_Wave_Geolocation_ADSR_asar_rec_data, "Wave Mode Geolocation ADS"}, {"PROCESSING_PARAMS_ADS", "PROCESSING PARAMS ADS", ASAR_Wave_Param_ADSR_asar_rec_data, "Wave Mode processing parameters"}, {"CROSS_SPECTRA_MDS", "CROSS SPECTRA MDS", ASAR_Spectra_MDSR_asar_rec_data, "Measurement Data Set containing spectra. 1 MDSR per spectra."} }; static const struct DatasetDescriptor ASA_WVW_2P_dataset_data[] = { {"SQ_ADS", "SQ ADS", ASAR_Wave_SQ_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_ADS", "GEOLOCATION ADS", ASAR_Wave_Geolocation_ADSR_asar_rec_data, "Wave Mode Geolocation ADS"}, {"PROCESSING_PARAMS_ADS", "PROCESSING PARAMS ADS", ASAR_Wave_Param_ADSR_asar_rec_data, "Wave Mode processing parameters"}, {"WAVE_SPECTRA_MDS", "WAVE SPECTRA MDS", ASAR_Ocean_Spectra_MDSR_asar_rec_data, "Ocean Wave Spectra"} }; static const struct DatasetDescriptor ATS_AR__2P_dataset_data[] = { {"SEA_ST_50_KM_CELL_MDS", "SEA_ST_50_KM_CELL_MDS", ATS_AR__2P_MDSR_sst_large_aatsr_rec_data, "SST record 50 km cell MDS"}, {"SEA_ST_17_KM_CELL_MDS", "SEA_ST_17_KM_CELL_MDS", ATS_AR__2P_MDSR_sst_small_aatsr_rec_data, "SST record 17 km cell MDS"}, {"SEA_ST_10_MIN_CELL_MDS", "SEA_ST_10_MIN_CELL_MDS", ATS_AR__2P_MDSR_sst_small_aatsr_rec_data, "SST record 10 arc minute cell MDS"}, {"SEA_ST_30_MIN_CELL_MDS", "SEA_ST_30_MIN_CELL_MDS", ATS_AR__2P_MDSR_sst_large_aatsr_rec_data, "SST record 30 arc minute cell MDS"}, {"LAND_ST_50_KM_CELL_MDS", "LAND_ST_50_KM_CELL_MDS", ATS_AR__2P_MDSR_lst_large_aatsr_rec_data, "LST record 50 km cell MDS"}, {"LAND_ST_17_KM_CELL_MDS", "LAND_ST_17_KM_CELL_MDS", ATS_AR__2P_MDSR_lst_small_aatsr_rec_data, "LST record 17 km cell MDS"}, {"LAND_ST_10_MIN_CELL_MDS", "LAND_ST_10_MIN_CELL_MDS", ATS_AR__2P_MDSR_lst_small_aatsr_rec_data, "LST record 10 arc minute cell MDS"}, {"LAND_ST_30_MIN_CELL_MDS", "LAND_ST_30_MIN_CELL_MDS", ATS_AR__2P_MDSR_lst_large_aatsr_rec_data, "LST record 30 arc minute cell MDS"}, {"BT_TOA_LAND_50_KM_CELL_MDS", "BT_TOA_LAND_50_KM_CELL_MDS", ATS_AR__2P_MDSR_lr_large_aatsr_rec_data, "BT/TOA Land record 50 km cell MDS"}, {"BT_TOA_LAND_17_KM_CELL_MDS", "BT_TOA_LAND_17_KM_CELL_MDS", ATS_AR__2P_MDSR_lr_small_aatsr_rec_data, "BT/TOA Land record 17 km cell MDS"}, {"BT_TOA_LAND_10_MIN_CELL_MDS", "BT_TOA_LAND_10_MIN_CELL_MDS", ATS_AR__2P_MDSR_lr_small_aatsr_rec_data, "BT/TOA Land record 10 arc minute cell MDS"}, {"BT_TOA_LAND_30_MIN_CELL_MDS", "BT_TOA_LAND_30_MIN_CELL_MDS", ATS_AR__2P_MDSR_lr_large_aatsr_rec_data, "BT/TOA Land record 30 arc minute cell MDS"}, {"BT_TOA_SEA_50_KM_CELL_MDS", "BT_TOA_SEA_50_KM_CELL_MDS", ATS_AR__2P_MDSR_sr_large_aatsr_rec_data, "BT/TOA Sea record 50 km cell MDS"}, {"BT_TOA_SEA_17_KM_CELL_MDS", "BT_TOA_SEA_17_KM_CELL_MDS", ATS_AR__2P_MDSR_sr_small_aatsr_rec_data, "BT/TOA Sea record 17 km cell MDS"}, {"BT_TOA_SEA_10_MIN_CELL_MDS", "BT_TOA_SEA_10_MIN_CELL_MDS", ATS_AR__2P_MDSR_sr_small_aatsr_rec_data, "BT/TOA Sea record 10 arc minute cell MDS"}, {"BT_TOA_SEA_30_MIN_CELL_MDS", "BT_TOA_SEA_30_MIN_CELL_MDS", ATS_AR__2P_MDSR_sr_large_aatsr_rec_data, "BT/TOA Sea record 30 arc minute cell MDS"} }; static const struct DatasetDescriptor ATS_MET_2P_dataset_data[] = { {"SEA_ST_10_MIN_CELL_MDS", "SEA_ST_10_MIN_CELL_MDS", ATS_MET_2P_meteo_user_prod_aatsr_rec_data, "10-arcminute mds"} }; static const struct DatasetDescriptor ATS_NR__2P_dataset_data[] = { {"SUMMARY_QUALITY_ADS", "SUMMARY_QUALITY_ADS", ATS_NR__2P_ADSR_sq_aatsr_rec_data, "Summary Quality ADS"}, {"GEOLOCATION_ADS", "GEOLOCATION_ADS", ATS_TOA_1P_ADSR_loc_aatsr_rec_data, "Grid pixel latitude and longtitude topographic corrections ADS"}, {"SCAN_PIXEL_X_AND_Y_ADS", "SCAN_PIXEL_X_AND_Y_ADS", ATS_TOA_1P_ADSR_scan_aatsr_rec_data, "Scan pixel x and y ADS"}, {"NADIR_VIEW_SOLAR_ANGLES_ADS", "NADIR_VIEW_SOLAR_ANGLES_ADS", ATS_TOA_1P_ADSR_sa_aatsr_rec_data, "Nadir view solar angles ADS"}, {"FWARD_VIEW_SOLAR_ANGLES_ADS", "FWARD_VIEW_SOLAR_ANGLES_ADS", ATS_TOA_1P_ADSR_sa_aatsr_rec_data, "Forward view solar angles ADS"}, {"NADIR_VIEW_SCAN_PIX_NUM_ADS", "NADIR_VIEW_SCAN_PIX_NUM_ADS", ATS_TOA_1P_ADSR_pix_aatsr_rec_data, "Scan and pixel number nadir view ADS"}, {"FWARD_VIEW_SCAN_PIX_NUM_ADS", "FWARD_VIEW_SCAN_PIX_NUM_ADS", ATS_TOA_1P_ADSR_pix_aatsr_rec_data, "Scan and pixel number forward view ADS"}, {"DISTRIB_SST_CLOUD_LAND_MDS", "DISTRIB_SST_CLOUD_LAND_MDS", ATS_NR__2P_MDSR_dp_aatsr_rec_data, "Distributed product MDS"} }; static const struct DatasetDescriptor ATS_TOA_1P_dataset_data[] = { {"SUMMARY_QUALITY_ADS", "SUMMARY_QUALITY_ADS", ATS_TOA_1P_ADSR_sq_aatsr_rec_data, "Summary Quality ADS"}, {"GEOLOCATION_ADS", "GEOLOCATION_ADS", ATS_TOA_1P_ADSR_loc_aatsr_rec_data, "Grid pixel latitude and longtitude topographic corrections ADS"}, {"SCAN_PIXEL_X_AND_Y_ADS", "SCAN_PIXEL_X_AND_Y_ADS", ATS_TOA_1P_ADSR_scan_aatsr_rec_data, "Scan pixel x and y ADS"}, {"NADIR_VIEW_SOLAR_ANGLES_ADS", "NADIR_VIEW_SOLAR_ANGLES_ADS", ATS_TOA_1P_ADSR_sa_aatsr_rec_data, "Nadir view solar angles ADS"}, {"FWARD_VIEW_SOLAR_ANGLES_ADS", "FWARD_VIEW_SOLAR_ANGLES_ADS", ATS_TOA_1P_ADSR_sa_aatsr_rec_data, "Forward view solar angles ADS"}, {"VISIBLE_CALIB_COEFS_GADS", "VISIBLE_CALIB_COEFS_GADS", ATS_VC1_AX_GADS_aatsr_rec_data, "Visible calibration coefficients GADS"}, {"NADIR_VIEW_SCAN_PIX_NUM_ADS", "NADIR_VIEW_SCAN_PIX_NUM_ADS", ATS_TOA_1P_ADSR_pix_aatsr_rec_data, "Scan and pixel number nadir view ADS"}, {"FWARD_VIEW_SCAN_PIX_NUM_ADS", "FWARD_VIEW_SCAN_PIX_NUM_ADS", ATS_TOA_1P_ADSR_pix_aatsr_rec_data, "Scan and pixel number forward view ADS"}, {"11500_12500_NM_NADIR_TOA_MDS", "11500_12500_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "12 micron nadir view MDS"}, {"10400_11300_NM_NADIR_TOA_MDS", "10400_11300_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "11 micron nadir view MDS"}, {"03505_03895_NM_NADIR_TOA_MDS", "03505_03895_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "3.7 micron nadir view MDS"}, {"01580_01640_NM_NADIR_TOA_MDS", "01580_01640_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "1.6 micron nadir view MDS"}, {"00855_00875_NM_NADIR_TOA_MDS", "00855_00875_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.87 micron nadir view MDS"}, {"00649_00669_NM_NADIR_TOA_MDS", "00649_00669_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.67 micron nadir view MDS"}, {"00545_00565_NM_NADIR_TOA_MDS", "00545_00565_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.55 micron nadir view MDS"}, {"11500_12500_NM_FWARD_TOA_MDS", "11500_12500_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "12 micron forward view MDS"}, {"10400_11300_NM_FWARD_TOA_MDS", "10400_11300_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "11 micron forward view MDS"}, {"03505_03895_NM_FWARD_TOA_MDS", "03505_03895_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "3.7 micron forward view MDS"}, {"01580_01640_NM_FWARD_TOA_MDS", "01580_01640_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "1.6 micron forward view MDS"}, {"00855_00875_NM_FWARD_TOA_MDS", "00855_00875_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.87 micron forward view MDS"}, {"00649_00669_NM_FWARD_TOA_MDS", "00649_00669_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.67 micron forward view MDS"}, {"00545_00565_NM_FWARD_TOA_MDS", "00545_00565_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.55 micron forward view MDS"}, {"NADIR_VIEW_CONFIDENCE_MDS", "NADIR_VIEW_CONFIDENCE_MDS", ATS_TOA_1P_MDSR_conf_aatsr_rec_data, "Confidence words nadir view MDS"}, {"FWARD_VIEW_CONFIDENCE_MDS", "FWARD_VIEW_CONFIDENCE_MDS", ATS_TOA_1P_MDSR_conf_aatsr_rec_data, "Confidence words forward view MDS"}, {"NADIR_VIEW_CLOUD_MDS", "NADIR_VIEW_CLOUD_MDS", ATS_TOA_1P_MDSR_cl_aatsr_rec_data, "Cloud flag nadir view MDS"}, {"FWARD_VIEW_CLOUD_MDS", "FWARD_VIEW_CLOUD_MDS", ATS_TOA_1P_MDSR_cl_aatsr_rec_data, "Cloud flag forward view MDS"} }; static const struct DatasetDescriptor MER_FR__1P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__1P_ADSR_sq_meris_rec_data, "Level 1b Summary Quality ADS(SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__1P_GADS_sfgi_meris_rec_data, "Level 1b GADS Scaling Factor and General Info"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 1b ADS Tie Point Location and Auxiliary Data (LADS)"}, {"Radiance_1", "Radiance MDS(1)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (1) TOA Radiance"}, {"Radiance_2", "Radiance MDS(2)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (2) TOA Radiance"}, {"Radiance_3", "Radiance MDS(3)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (3) TOA Radiance"}, {"Radiance_4", "Radiance MDS(4)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (4) TOA Radiance"}, {"Radiance_5", "Radiance MDS(5)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (5) TOA Radiance"}, {"Radiance_6", "Radiance MDS(6)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (6) TOA Radiance"}, {"Radiance_7", "Radiance MDS(7)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (7) TOA Radiance"}, {"Radiance_8", "Radiance MDS(8)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (8) TOA Radiance"}, {"Radiance_9", "Radiance MDS(9)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (9) TOA Radiance"}, {"Radiance_10", "Radiance MDS(10)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (10) TOA Radiance"}, {"Radiance_11", "Radiance MDS(11)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (11) TOA Radiance"}, {"Radiance_12", "Radiance MDS(12)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (12) TOA Radiance"}, {"Radiance_13", "Radiance MDS(13)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (13) TOA Radiance"}, {"Radiance_14", "Radiance MDS(14)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (14) TOA Radiance"}, {"Radiance_15", "Radiance MDS(15)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (15) TOA Radiance"}, {"Flags", "Flags MDS(16)", MER_RR__1P_MDSR_16_meris_rec_data, "Level 1b MDS (16) Flags & Detector Index"} }; static const struct DatasetDescriptor MER_FR__1P_IODD5_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__1P_ADSR_sq_meris_rec_data, "Level 1b Summary Quality ADS(SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__1P_GADS_sfgi_meris_rec_data, "Level 1b GADS Scaling Factor and General Info"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 1b ADS Tie Point Location and Auxiliary Data (LADS)"}, {"Radiance_1", "Radiance MDS(1)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (1) TOA Radiance"}, {"Radiance_2", "Radiance MDS(2)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (2) TOA Radiance"}, {"Radiance_3", "Radiance MDS(3)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (3) TOA Radiance"}, {"Radiance_4", "Radiance MDS(4)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (4) TOA Radiance"}, {"Radiance_5", "Radiance MDS(5)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (5) TOA Radiance"}, {"Radiance_6", "Radiance MDS(6)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (6) TOA Radiance"}, {"Radiance_7", "Radiance MDS(7)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (7) TOA Radiance"}, {"Radiance_8", "Radiance MDS(8)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (8) TOA Radiance"}, {"Radiance_9", "Radiance MDS(9)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (9) TOA Radiance"}, {"Radiance_10", "Radiance MDS(10)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (10) TOA Radiance"}, {"Radiance_11", "Radiance MDS(11)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (11) TOA Radiance"}, {"Radiance_12", "Radiance MDS(12)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (12) TOA Radiance"}, {"Radiance_13", "Radiance MDS(13)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (13) TOA Radiance"}, {"Radiance_14", "Radiance MDS(14)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (14) TOA Radiance"}, {"Radiance_15", "Radiance MDS(15)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (15) TOA Radiance"}, {"Flags", "Flags MDS(16)", MER_RR__1P_MDSR_16_IODD5_meris_rec_data, "Level 1b MDS (16) Flags & Spectral Shift Index"} }; static const struct DatasetDescriptor MER_FR__2P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 ADS Summary Quality (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factors and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data(L ADS)"}, {"Norm_rho_surf_1", "Norm. rho_surf - MDS(1)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(1) normalised surface reflectance"}, {"Norm_rho_surf_2", "Norm. rho_surf - MDS(2)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(2) normalised surface reflectance"}, {"Norm_rho_surf_3", "Norm. rho_surf - MDS(3)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(3) normalised surface reflectance"}, {"Norm_rho_surf_4", "Norm. rho_surf - MDS(4)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(4) normalised surface reflectance"}, {"Norm_rho_surf_5", "Norm. rho_surf - MDS(5)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(5) normalised surface reflectance"}, {"Norm_rho_surf_6", "Norm. rho_surf - MDS(6)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(6) normalised surface reflectance"}, {"Norm_rho_surf_7", "Norm. rho_surf - MDS(7)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(7) normalised surface reflectance"}, {"Norm_rho_surf_8", "Norm. rho_surf - MDS(8)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(8) normalised surface reflectance"}, {"Norm_rho_surf_9", "Norm. rho_surf - MDS(9)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(9) normalised surface reflectance"}, {"Norm_rho_surf_10", "Norm. rho_surf - MDS(10)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(10) normalised surface reflectance"}, {"Norm_rho_surf_11", "Norm. rho_surf - MDS(11)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(11) normalised surface reflectance"}, {"Norm_rho_surf_12", "Norm. rho_surf - MDS(12)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(12) normalised surface reflectance"}, {"Norm_rho_surf_13", "Norm. rho_surf - MDS(13)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(13) normalised surface reflectance"}, {"Vapour_Content", "Vapour Content - MDS(14)", MER_RR__2P_MDSR_14_meris_rec_data, "Level 2 MDS(14) water vapour content"}, {"Chl_1_TOAVI_CTP", "Chl_1, TOAVI - MDS(15)", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS(15) algal index I or TOAVI"}, {"YS_SPM_Rect_rho", "YS, SPM, Rect. Rho- MDS(16)", MER_RR__2P_MDSR_16_meris_rec_data, "Level 2 MDS(16) yellow substance total suspended matter"}, {"Chl_2_BOAVI", "Chl_2, BOAVI - MDS(17)", MER_RR__2P_MDSR_17_meris_rec_data, "Level 2 MDS(17) algal index II BOAVI"}, {"Press_PAR_Alb", "Press PAR Alb - MDS(18)", MER_RR__2P_MDSR_18_meris_rec_data, "Level 2 MDS(18) surface pressure PAR cloud albedo"}, {"Alpha_OPT", "Alpha, OPT - MDS(19)", MER_RR__2P_MDSR_19_meris_rec_data, "Level 2 MDS(19) aerosol Angstrom exponent or cloud type and optical thickness"}, {"Flags", "Flags - MDS(20)", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS(20) flags"} }; static const struct DatasetDescriptor MER_FR__2P_IODD6_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 ADS Summary Quality (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factors and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data(L ADS)"}, {"Norm_rho_surf_1", "Norm. rho_surf - MDS(1)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(1) normalised surface reflectance"}, {"Norm_rho_surf_2", "Norm. rho_surf - MDS(2)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(2) normalised surface reflectance"}, {"Norm_rho_surf_3", "Norm. rho_surf - MDS(3)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(3) normalised surface reflectance"}, {"Norm_rho_surf_4", "Norm. rho_surf - MDS(4)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(4) normalised surface reflectance"}, {"Norm_rho_surf_5", "Norm. rho_surf - MDS(5)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(5) normalised surface reflectance"}, {"Norm_rho_surf_6", "Norm. rho_surf - MDS(6)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(6) normalised surface reflectance"}, {"Norm_rho_surf_7", "Norm. rho_surf - MDS(7)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(7) normalised surface reflectance"}, {"Norm_rho_surf_8", "Norm. rho_surf - MDS(8)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(8) normalised surface reflectance"}, {"Norm_rho_surf_9", "Norm. rho_surf - MDS(9)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(9) normalised surface reflectance"}, {"Norm_rho_surf_10", "Norm. rho_surf - MDS(10)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(10) normalised surface reflectance"}, {"Norm_rho_surf_11", "Norm. rho_surf - MDS(11)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(11) normalised surface reflectance"}, {"Norm_rho_surf_12", "Norm. rho_surf - MDS(12)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(12) normalised surface reflectance"}, {"Norm_rho_surf_13", "Norm. rho_surf - MDS(13)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(13) normalised surface reflectance"}, {"Vapour_Content", "Vapour Content - MDS(14)", MER_RR__2P_MDSR_14_meris_rec_data, "Level 2 MDS(14) water vapour content"}, {"Chl_1_TOAVI_CTP", "Chl_1, TOAVI - MDS(15)", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS(15) algal index I or TOAVI"}, {"YS_SPM_Rect_rho", "YS, SPM, Rect. Rho- MDS(16)", MER_RR__2P_MDSR_16_meris_rec_data, "Level 2 MDS(16) yellow substance total suspended matter"}, {"Chl_2_BOAVI", "Chl_2, BOAVI - MDS(17)", MER_RR__2P_MDSR_17_meris_rec_data, "Level 2 MDS(17) algal index II BOAVI"}, {"Press_PAR_Alb", "Press PAR Alb - MDS(18)", MER_RR__2P_MDSR_18_meris_rec_data, "Level 2 MDS(18) surface pressure PAR cloud albedo"}, {"Epsilon_OPT", "Epsilon, OPT - MDS(19)", MER_RR__2P_MDSR_19_IODD6_meris_rec_data, "Level 2 MDS(19) aerosol epsilon or cloud type and optical thickness"}, {"Flags", "Flags - MDS(20)", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS(20) flags"} }; static const struct DatasetDescriptor MER_LRC_2P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 Summary Quality ADS(SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RRC_2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factor and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data ( L ADS)"}, {"Cloud_Type_OT", "MDS Cloud Type, OT", MER_LRC_2P_MDSR_cl_thick_meris_rec_data, "Level 2 MDS Cloud Optical Thickness"}, {"Cloud_Top_Pressure", "MDS Cloud Top Pressure", MER_LRC_2P_MDSR_cl_top_press_meris_rec_data, "Level 2 MDS Cloud Top Pressure"}, {"Vapour_Content", "MDS Vapour Content", MER_LRC_2P_MDSR_twv_meris_rec_data, "Level 2 MDS Total Water vapour"}, {"Flags", "MDS Flags", MER_LRC_2P_MDSR_flag_meris_rec_data, "Level 2 MDS Flags"} }; static const struct DatasetDescriptor MER_RRC_2P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 Summary Quality ADS (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RRC_2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factor And Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux Data( L ADS)"}, {"Cloud_Type_OT", "MDS Cloud Type, OT", MER_RR__2P_MDSR_19_meris_rec_data, "Level 2 MDS Cloud Optical Thickness"}, {"Cloud_Top_Pressure", "MDS Cloud Top Pressure", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS Cloud Top Pressure"}, {"Vapour_Content", "MDS Vapour Content", MER_RR__2P_MDSR_14_meris_rec_data, "Level 2 MDS Total Water vapour"}, {"Flags", "MDS Flags", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS Flags"} }; static const struct DatasetDescriptor MER_RRV_2P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 Summary Quality ADS (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RRV_2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factor and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data (L ADS)"}, {"TOAVI", "MDS TOAVI", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS TOA Vegetable Index"}, {"BOAVI", "MDS BOAVI", MER_RR__2P_MDSR_17_meris_rec_data, "Level 2 MDS BOA Vegetable Index"}, {"Flags", "MDS Flags", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS Flag"} }; static const struct DatasetDescriptor MER_RR__1P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__1P_ADSR_sq_meris_rec_data, "Level 1b Summary Quality ADS(SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__1P_GADS_sfgi_meris_rec_data, "Level 1b GADS Scaling Factor and General Info"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 1b ADS Tie Point Location and Auxiliary Data (LADS)"}, {"Radiance_1", "Radiance MDS(1)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (1) TOA Radiance"}, {"Radiance_2", "Radiance MDS(2)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (2) TOA Radiance"}, {"Radiance_3", "Radiance MDS(3)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (3) TOA Radiance"}, {"Radiance_4", "Radiance MDS(4)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (4) TOA Radiance"}, {"Radiance_5", "Radiance MDS(5)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (5) TOA Radiance"}, {"Radiance_6", "Radiance MDS(6)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (6) TOA Radiance"}, {"Radiance_7", "Radiance MDS(7)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (7) TOA Radiance"}, {"Radiance_8", "Radiance MDS(8)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (8) TOA Radiance"}, {"Radiance_9", "Radiance MDS(9)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (9) TOA Radiance"}, {"Radiance_10", "Radiance MDS(10)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (10) TOA Radiance"}, {"Radiance_11", "Radiance MDS(11)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (11) TOA Radiance"}, {"Radiance_12", "Radiance MDS(12)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (12) TOA Radiance"}, {"Radiance_13", "Radiance MDS(13)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (13) TOA Radiance"}, {"Radiance_14", "Radiance MDS(14)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (14) TOA Radiance"}, {"Radiance_15", "Radiance MDS(15)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (15) TOA Radiance"}, {"Flags", "Flags MDS(16)", MER_RR__1P_MDSR_16_meris_rec_data, "Level 1b MDS (16) Flags & Detector Index"} }; static const struct DatasetDescriptor MER_RR__1P_IODD5_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__1P_ADSR_sq_meris_rec_data, "Level 1b Summary Quality ADS(SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__1P_GADS_sfgi_meris_rec_data, "Level 1b GADS Scaling Factor and General Info"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 1b ADS Tie Point Location and Auxiliary Data (LADS)"}, {"Radiance_1", "Radiance MDS(1)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (1) TOA Radiance"}, {"Radiance_2", "Radiance MDS(2)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (2) TOA Radiance"}, {"Radiance_3", "Radiance MDS(3)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (3) TOA Radiance"}, {"Radiance_4", "Radiance MDS(4)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (4) TOA Radiance"}, {"Radiance_5", "Radiance MDS(5)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (5) TOA Radiance"}, {"Radiance_6", "Radiance MDS(6)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (6) TOA Radiance"}, {"Radiance_7", "Radiance MDS(7)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (7) TOA Radiance"}, {"Radiance_8", "Radiance MDS(8)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (8) TOA Radiance"}, {"Radiance_9", "Radiance MDS(9)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (9) TOA Radiance"}, {"Radiance_10", "Radiance MDS(10)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (10) TOA Radiance"}, {"Radiance_11", "Radiance MDS(11)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (11) TOA Radiance"}, {"Radiance_12", "Radiance MDS(12)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (12) TOA Radiance"}, {"Radiance_13", "Radiance MDS(13)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (13) TOA Radiance"}, {"Radiance_14", "Radiance MDS(14)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (14) TOA Radiance"}, {"Radiance_15", "Radiance MDS(15)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (15) TOA Radiance"}, {"Flags", "Flags MDS(16)", MER_RR__1P_MDSR_16_IODD5_meris_rec_data, "Level 1b MDS (16) Flags & Spectral Shift Index"} }; static const struct DatasetDescriptor MER_RR__2P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 ADS Summary Quality (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factors and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data(L ADS)"}, {"Norm_rho_surf_1", "Norm. rho_surf - MDS(1)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(1) normalised surface reflectance"}, {"Norm_rho_surf_2", "Norm. rho_surf - MDS(2)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(2) normalised surface reflectance"}, {"Norm_rho_surf_3", "Norm. rho_surf - MDS(3)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(3) normalised surface reflectance"}, {"Norm_rho_surf_4", "Norm. rho_surf - MDS(4)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(4) normalised surface reflectance"}, {"Norm_rho_surf_5", "Norm. rho_surf - MDS(5)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(5) normalised surface reflectance"}, {"Norm_rho_surf_6", "Norm. rho_surf - MDS(6)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(6) normalised surface reflectance"}, {"Norm_rho_surf_7", "Norm. rho_surf - MDS(7)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(7) normalised surface reflectance"}, {"Norm_rho_surf_8", "Norm. rho_surf - MDS(8)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(8) normalised surface reflectance"}, {"Norm_rho_surf_9", "Norm. rho_surf - MDS(9)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(9) normalised surface reflectance"}, {"Norm_rho_surf_10", "Norm. rho_surf - MDS(10)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(10) normalised surface reflectance"}, {"Norm_rho_surf_11", "Norm. rho_surf - MDS(11)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(11) normalised surface reflectance"}, {"Norm_rho_surf_12", "Norm. rho_surf - MDS(12)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(12) normalised surface reflectance"}, {"Norm_rho_surf_13", "Norm. rho_surf - MDS(13)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(13) normalised surface reflectance"}, {"Vapour_Content", "Vapour Content - MDS(14)", MER_RR__2P_MDSR_14_meris_rec_data, "Level 2 MDS(14) water vapour content"}, {"Chl_1_TOAVI_CTP", "Chl_1, TOAVI - MDS(15)", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS(15) algal index I or TOAVI"}, {"YS_SPM_Rect_rho", "YS, SPM, Rect. Rho- MDS(16)", MER_RR__2P_MDSR_16_meris_rec_data, "Level 2 MDS(16) yellow substance total suspended matter"}, {"Chl_2_BOAVI", "Chl_2, BOAVI - MDS(17)", MER_RR__2P_MDSR_17_meris_rec_data, "Level 2 MDS(17) algal index II BOAVI"}, {"Press_PAR_Alb", "Press PAR Alb - MDS(18)", MER_RR__2P_MDSR_18_meris_rec_data, "Level 2 MDS(18) surface pressure PAR cloud albedo"}, {"Alpha_OPT", "Alpha, OPT - MDS(19)", MER_RR__2P_MDSR_19_meris_rec_data, "Level 2 MDS(19) aerosol Angstrom exponent or cloud type and optical thickness"}, {"Flags", "Flags - MDS(20)", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS(20) flags"} }; static const struct DatasetDescriptor MER_RR__2P_IODD6_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 ADS Summary Quality (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factors and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data(L ADS)"}, {"Norm_rho_surf_1", "Norm. rho_surf - MDS(1)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(1) normalised surface reflectance"}, {"Norm_rho_surf_2", "Norm. rho_surf - MDS(2)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(2) normalised surface reflectance"}, {"Norm_rho_surf_3", "Norm. rho_surf - MDS(3)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(3) normalised surface reflectance"}, {"Norm_rho_surf_4", "Norm. rho_surf - MDS(4)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(4) normalised surface reflectance"}, {"Norm_rho_surf_5", "Norm. rho_surf - MDS(5)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(5) normalised surface reflectance"}, {"Norm_rho_surf_6", "Norm. rho_surf - MDS(6)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(6) normalised surface reflectance"}, {"Norm_rho_surf_7", "Norm. rho_surf - MDS(7)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(7) normalised surface reflectance"}, {"Norm_rho_surf_8", "Norm. rho_surf - MDS(8)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(8) normalised surface reflectance"}, {"Norm_rho_surf_9", "Norm. rho_surf - MDS(9)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(9) normalised surface reflectance"}, {"Norm_rho_surf_10", "Norm. rho_surf - MDS(10)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(10) normalised surface reflectance"}, {"Norm_rho_surf_11", "Norm. rho_surf - MDS(11)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(11) normalised surface reflectance"}, {"Norm_rho_surf_12", "Norm. rho_surf - MDS(12)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(12) normalised surface reflectance"}, {"Norm_rho_surf_13", "Norm. rho_surf - MDS(13)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(13) normalised surface reflectance"}, {"Vapour_Content", "Vapour Content - MDS(14)", MER_RR__2P_MDSR_14_meris_rec_data, "Level 2 MDS(14) water vapour content"}, {"Chl_1_TOAVI_CTP", "Chl_1, TOAVI - MDS(15)", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS(15) algal index I or TOAVI"}, {"YS_SPM_Rect_rho", "YS, SPM, Rect. Rho- MDS(16)", MER_RR__2P_MDSR_16_meris_rec_data, "Level 2 MDS(16) yellow substance total suspended matter"}, {"Chl_2_BOAVI", "Chl_2, BOAVI - MDS(17)", MER_RR__2P_MDSR_17_meris_rec_data, "Level 2 MDS(17) algal index II BOAVI"}, {"Press_PAR_Alb", "Press PAR Alb - MDS(18)", MER_RR__2P_MDSR_18_meris_rec_data, "Level 2 MDS(18) surface pressure PAR cloud albedo"}, {"Epsilon_OPT", "Epsilon, OPT - MDS(19)", MER_RR__2P_MDSR_19_IODD6_meris_rec_data, "Level 2 MDS(19) aerosol epsilon or cloud type and optical thickness"}, {"Flags", "Flags - MDS(20)", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS(20) flags"} }; static const struct BandDescriptor ASA_APG_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data_1", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Geocoded Image"}, {"proc_data_2", "MDS2.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Geocoded Image"} }; static const struct BandDescriptor ASA_APM_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data_1", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Medium Resolution Image"}, {"proc_data_2", "MDS2.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Medium Resolution Image"} }; static const struct BandDescriptor ASA_APP_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data_1", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Precision Mode Image"}, {"proc_data_2", "MDS2.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Precision Mode Image"} }; static const struct BandDescriptor ASA_APS_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"i", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization SLC Image (i)"}, {"q", "MDS2.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization SLC Image (q)"} }; static const struct BandDescriptor ASA_AP__BP_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Mode Browse Product"} }; static const struct BandDescriptor ASA_IMG_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode Geocoded Image"} }; static const struct BandDescriptor ASA_IMM_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode Medium Resolution Image (stripline)"} }; static const struct BandDescriptor ASA_IMP_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode Precision Image"} }; static const struct BandDescriptor ASA_IMS_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"i", "MDS1.4", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode SLC Image (i)"}, {"q", "MDS1.4", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode SLC Image (q)"} }; static const struct BandDescriptor ASA_IM__BP_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode Browse Image"} }; static const struct BandDescriptor ASA_WSM_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Wide Swath Mode Medium Resolution Image"} }; static const struct BandDescriptor ASA_WS__BP_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Mode Browse Product"} }; static const struct BandDescriptor ATS_NR__2P_band_data[] = { {"latitude", "GEOLOCATION_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitudes"}, {"longitude", "GEOLOCATION_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitudes"}, {"lat_corr_nadir", "GEOLOCATION_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude corrections, nadir view"}, {"lon_corr_nadir", "GEOLOCATION_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude corrections, nadir view"}, {"lat_corr_fward", "GEOLOCATION_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude corrections, forward view"}, {"lon_corr_fward", "GEOLOCATION_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude corrections, forward view"}, {"altitude", "GEOLOCATION_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Topographic altitude"}, {"sun_elev_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar elevation nadir view"}, {"view_elev_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite elevation nadir view"}, {"sun_azimuth_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar azimuth nadir view"}, {"view_azimuth_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite azimuth nadir view"}, {"sun_elev_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar elevation forward view"}, {"view_elev_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite elevation forward view"}, {"sun_azimuth_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar azimuth forward view"}, {"view_azimuth_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite azimuth forward view"}, {"sst_nadir", "DISTRIB_SST_CLOUD_LAND_MDS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", "!flags.NADIR_CLOUD and !flags.LAND", NULL, "K", "Sea surface temperature nadir view"}, {"sst_comb", "DISTRIB_SST_CLOUD_LAND_MDS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", "!flags.NADIR_CLOUD and !flags.LAND", NULL, "K", "Sea surface temperature combined views"}, {"cloud_top_temp", "DISTRIB_SST_CLOUD_LAND_MDS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", "flags.NADIR_CLOUD", NULL, "K", "Cloud top temperature"}, {"cloud_top_height", "DISTRIB_SST_CLOUD_LAND_MDS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", "flags.NADIR_CLOUD", NULL, "m", "Cloud top height"}, {"lst", "DISTRIB_SST_CLOUD_LAND_MDS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", "!flags.NADIR_CLOUD and flags.LAND", NULL, "K", "Land surface temperature"}, {"ndvi", "DISTRIB_SST_CLOUD_LAND_MDS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.0001", "!flags.NADIR_CLOUD and flags.LAND", NULL, NULL, "Normalized difference vegetation index"}, {"flags", "DISTRIB_SST_CLOUD_LAND_MDS.5", e_smod_1OF1, e_tid_ushort, -1, e_smid_non, NULL, NULL, NULL, "ATS_NR__2P_flags", NULL, "Classification and quality flags"} }; static const struct BandDescriptor ATS_TOA_1P_band_data[] = { {"latitude", "GEOLOCATION_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitudes"}, {"longitude", "GEOLOCATION_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitudes"}, {"lat_corr_nadir", "GEOLOCATION_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude corrections, nadir view"}, {"lon_corr_nadir", "GEOLOCATION_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude corrections, nadir view"}, {"lat_corr_fward", "GEOLOCATION_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude corrections, forward view"}, {"lon_corr_fward", "GEOLOCATION_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude corrections, forward view"}, {"altitude", "GEOLOCATION_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Topographic altitude"}, {"sun_elev_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar elevation, nadir view"}, {"view_elev_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite elevation, nadir view"}, {"sun_azimuth_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar azimuth, nadir view"}, {"view_azimuth_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite azimuth, nadir view"}, {"sun_elev_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar elevation, forward view"}, {"view_elev_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite elevation, forward view"}, {"sun_azimuth_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar azimuth, forward view"}, {"view_azimuth_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite azimuth, forward view"}, {"btemp_nadir_1200", "11500_12500_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, nadir view (11500-12500 nm)"}, {"btemp_nadir_1100", "10400_11300_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, nadir view (10400-11300 nm)"}, {"btemp_nadir_0370", "03505_03895_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, nadir view (3505-3895 nm)"}, {"reflec_nadir_1600", "01580_01640_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, nadir view (1580-1640 nm)"}, {"reflec_nadir_0870", "00855_00875_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, nadir view (855-875 nm)"}, {"reflec_nadir_0670", "00649_00669_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, nadir view (649-669 nm)"}, {"reflec_nadir_0550", "00545_00565_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, nadir view (545-565 nm)"}, {"btemp_fward_1200", "11500_12500_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, forward view (11500-12500 nm)"}, {"btemp_fward_1100", "10400_11300_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, forward view (10400-11300 nm)"}, {"btemp_fward_0370", "03505_03895_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, forward view (3505-3895 nm)"}, {"reflec_fward_1600", "01580_01640_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, forward view (1580-1640 nm)"}, {"reflec_fward_0870", "00855_00875_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, forward view (855-875 nm)"}, {"reflec_fward_0670", "00649_00669_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, forward view (649-669 nm)"}, {"reflec_fward_0550", "00545_00565_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, forward view (545-565 nm)"}, {"confid_flags_nadir", "NADIR_VIEW_CONFIDENCE_MDS.5", e_smod_1OF1, e_tid_ushort, -1, e_smid_non, NULL, NULL, NULL, "ATS_TOA_1P_confid_flags", NULL, "Confidence flags, nadir view"}, {"confid_flags_fward", "FWARD_VIEW_CONFIDENCE_MDS.5", e_smod_1OF1, e_tid_ushort, -1, e_smid_non, NULL, NULL, NULL, "ATS_TOA_1P_confid_flags", NULL, "Confidence flags, forward view"}, {"cloud_flags_nadir", "NADIR_VIEW_CLOUD_MDS.5", e_smod_1OF1, e_tid_ushort, -1, e_smid_non, NULL, NULL, NULL, "ATS_TOA_1P_cloud_flags", NULL, "Cloud flags, nadir view"}, {"cloud_flags_fward", "FWARD_VIEW_CLOUD_MDS.5", e_smod_1OF1, e_tid_ushort, -1, e_smid_non, NULL, NULL, NULL, "ATS_TOA_1P_cloud_flags", NULL, "Cloud flags, forward view"} }; static const struct BandDescriptor MER_FR__1P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"radiance_1", "Radiance_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.1", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 1"}, {"radiance_2", "Radiance_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.2", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 2"}, {"radiance_3", "Radiance_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.3", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 3"}, {"radiance_4", "Radiance_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.4", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 4"}, {"radiance_5", "Radiance_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.5", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 5"}, {"radiance_6", "Radiance_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.6", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 6"}, {"radiance_7", "Radiance_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.7", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 7"}, {"radiance_8", "Radiance_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.8", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 8"}, {"radiance_9", "Radiance_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.9", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 9"}, {"radiance_10", "Radiance_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.10", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 10"}, {"radiance_11", "Radiance_11.3", e_smod_1OF1, e_tid_float, 11, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.11", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 11"}, {"radiance_12", "Radiance_12.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.12", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 12"}, {"radiance_13", "Radiance_13.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.13", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 13"}, {"radiance_14", "Radiance_14.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.14", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 14"}, {"radiance_15", "Radiance_15.3", e_smod_1OF1, e_tid_float, 15, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.15", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 15"}, {"l1_flags", "Flags.3", e_smod_1OF1, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__1P_flags", NULL, "Level 1b classification and quality flags"}, {"detector_index", "Flags.4", e_smod_1OF1, e_tid_short, -1, e_smid_non, NULL, NULL, NULL, NULL, NULL, "Detector index"} }; static const struct BandDescriptor MER_FR__1P_IODD5_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"radiance_1", "Radiance_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.1", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 1"}, {"radiance_2", "Radiance_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.2", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 2"}, {"radiance_3", "Radiance_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.3", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 3"}, {"radiance_4", "Radiance_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.4", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 4"}, {"radiance_5", "Radiance_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.5", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 5"}, {"radiance_6", "Radiance_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.6", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 6"}, {"radiance_7", "Radiance_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.7", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 7"}, {"radiance_8", "Radiance_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.8", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 8"}, {"radiance_9", "Radiance_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.9", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 9"}, {"radiance_10", "Radiance_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.10", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 10"}, {"radiance_11", "Radiance_11.3", e_smod_1OF1, e_tid_float, 11, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.11", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 11"}, {"radiance_12", "Radiance_12.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.12", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 12"}, {"radiance_13", "Radiance_13.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.13", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 13"}, {"radiance_14", "Radiance_14.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.14", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 14"}, {"radiance_15", "Radiance_15.3", e_smod_1OF1, e_tid_float, 15, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.15", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 15"}, {"l1_flags", "Flags.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__1P_flags", NULL, "Level 1b classification and quality flags"}, {"ssi", "Flags.3", e_smod_2OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, NULL, NULL, "Spectral shift index"} }; static const struct BandDescriptor MER_FR__2P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"reflec_1", "Norm_rho_surf_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "Scaling_Factor_GADS.22.1", "Scaling_Factor_GADS.8.1", NULL, NULL, "dl", "Normalized surface reflectance, band 1"}, {"reflec_2", "Norm_rho_surf_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "Scaling_Factor_GADS.22.2", "Scaling_Factor_GADS.8.2", NULL, NULL, "dl", "Normalized surface reflectance, band 2"}, {"reflec_3", "Norm_rho_surf_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "Scaling_Factor_GADS.22.3", "Scaling_Factor_GADS.8.3", NULL, NULL, "dl", "Normalized surface reflectance, band 3"}, {"reflec_4", "Norm_rho_surf_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "Scaling_Factor_GADS.22.4", "Scaling_Factor_GADS.8.4", NULL, NULL, "dl", "Normalized surface reflectance, band 4"}, {"reflec_5", "Norm_rho_surf_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "Scaling_Factor_GADS.22.5", "Scaling_Factor_GADS.8.5", NULL, NULL, "dl", "Normalized surface reflectance, band 5"}, {"reflec_6", "Norm_rho_surf_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "Scaling_Factor_GADS.22.6", "Scaling_Factor_GADS.8.6", NULL, NULL, "dl", "Normalized surface reflectance, band 6"}, {"reflec_7", "Norm_rho_surf_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "Scaling_Factor_GADS.22.7", "Scaling_Factor_GADS.8.7", NULL, NULL, "dl", "Normalized surface reflectance, band 7"}, {"reflec_8", "Norm_rho_surf_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "Scaling_Factor_GADS.22.8", "Scaling_Factor_GADS.8.8", NULL, NULL, "dl", "Normalized surface reflectance, band 8"}, {"reflec_9", "Norm_rho_surf_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "Scaling_Factor_GADS.22.9", "Scaling_Factor_GADS.8.9", NULL, NULL, "dl", "Normalized surface reflectance, band 9"}, {"reflec_10", "Norm_rho_surf_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "Scaling_Factor_GADS.22.10", "Scaling_Factor_GADS.8.10", NULL, NULL, "dl", "Normalized surface reflectance, band 10"}, {"reflec_12", "Norm_rho_surf_11.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "Scaling_Factor_GADS.22.11", "Scaling_Factor_GADS.8.11", NULL, NULL, "dl", "Normalized surface reflectance, band 12"}, {"reflec_13", "Norm_rho_surf_12.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "Scaling_Factor_GADS.22.12", "Scaling_Factor_GADS.8.12", NULL, NULL, "dl", "Normalized surface reflectance, band 13"}, {"reflec_14", "Norm_rho_surf_13.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "Scaling_Factor_GADS.22.13", "Scaling_Factor_GADS.8.13", NULL, NULL, "dl", "Normalized surface reflectance, band 14"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.30.1", "Scaling_Factor_GADS.16.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"algal_1", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 1 content"}, {"algal_2", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 2 content"}, {"yellow_subs", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.24.1", "Scaling_Factor_GADS.10.1", "l2_flags.WATER", NULL, "1/m", "Yellow substance"}, {"total_susp", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.25.1", "Scaling_Factor_GADS.11.1", "l2_flags.WATER", NULL, "g/m^3", "Total suspended matter"}, {"photosyn_rad", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.31.1", "Scaling_Factor_GADS.17.1", "l2_flags.WATER", NULL, "myEinstein/(m^2*s)", "Photosynthetically active radiation"}, {"toa_veg", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.32.1", "Scaling_Factor_GADS.18.1", "l2_flags.LAND", NULL, "1", "MGVI - MERIS global vegetation index"}, {"boa_veg", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.33.1", "Scaling_Factor_GADS.19.1", "l2_flags.LAND", NULL, "1", "MTCI - MERIS terrestrial chlorophyll index"}, {"rect_refl_red", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.40.1", "Scaling_Factor_GADS.39.1", "l2_flags.LAND", NULL, "dl", "Rectified reflectance in a red band"}, {"rect_refl_nir", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.42.1", "Scaling_Factor_GADS.41.1", "l2_flags.LAND", NULL, "dl", "Rectified reflectances in a near infrared band"}, {"surf_press", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.29.1", "Scaling_Factor_GADS.15.1", "l2_flags.LAND", NULL, "hPa", "Surface pressure"}, {"aero_alpha", "Alpha_OPT.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.26.1", "Scaling_Factor_GADS.12.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol Angstrom exponent"}, {"aero_opt_thick_443", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.LAND", NULL, "dl", "Aerosol optical thickness at 443 nm"}, {"aero_opt_thick_865", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.WATER", NULL, "dl", "Aerosol optical thickness at 865 nm"}, {"cloud_albedo", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.34.1", "Scaling_Factor_GADS.20.1", "l2_flags.CLOUD", NULL, "dl", "Cloud albedo"}, {"cloud_opt_thick", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.28.1", "Scaling_Factor_GADS.14.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.35.1", "Scaling_Factor_GADS.21.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"cloud_type", "Alpha_OPT.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, "l2_flags.CLOUD", NULL, NULL, "Cloud type"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags", NULL, "Level 2 classification and quality flags"} }; static const struct BandDescriptor MER_FR__2P_IODD6_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"reflec_1", "Norm_rho_surf_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "Scaling_Factor_GADS.22.1", "Scaling_Factor_GADS.8.1", NULL, NULL, "dl", "Normalized surface reflectance, band 1"}, {"reflec_2", "Norm_rho_surf_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "Scaling_Factor_GADS.22.2", "Scaling_Factor_GADS.8.2", NULL, NULL, "dl", "Normalized surface reflectance, band 2"}, {"reflec_3", "Norm_rho_surf_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "Scaling_Factor_GADS.22.3", "Scaling_Factor_GADS.8.3", NULL, NULL, "dl", "Normalized surface reflectance, band 3"}, {"reflec_4", "Norm_rho_surf_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "Scaling_Factor_GADS.22.4", "Scaling_Factor_GADS.8.4", NULL, NULL, "dl", "Normalized surface reflectance, band 4"}, {"reflec_5", "Norm_rho_surf_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "Scaling_Factor_GADS.22.5", "Scaling_Factor_GADS.8.5", NULL, NULL, "dl", "Normalized surface reflectance, band 5"}, {"reflec_6", "Norm_rho_surf_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "Scaling_Factor_GADS.22.6", "Scaling_Factor_GADS.8.6", NULL, NULL, "dl", "Normalized surface reflectance, band 6"}, {"reflec_7", "Norm_rho_surf_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "Scaling_Factor_GADS.22.7", "Scaling_Factor_GADS.8.7", NULL, NULL, "dl", "Normalized surface reflectance, band 7"}, {"reflec_8", "Norm_rho_surf_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "Scaling_Factor_GADS.22.8", "Scaling_Factor_GADS.8.8", NULL, NULL, "dl", "Normalized surface reflectance, band 8"}, {"reflec_9", "Norm_rho_surf_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "Scaling_Factor_GADS.22.9", "Scaling_Factor_GADS.8.9", NULL, NULL, "dl", "Normalized surface reflectance, band 9"}, {"reflec_10", "Norm_rho_surf_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "Scaling_Factor_GADS.22.10", "Scaling_Factor_GADS.8.10", NULL, NULL, "dl", "Normalized surface reflectance, band 10"}, {"reflec_12", "Norm_rho_surf_11.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "Scaling_Factor_GADS.22.11", "Scaling_Factor_GADS.8.11", NULL, NULL, "dl", "Normalized surface reflectance, band 12"}, {"reflec_13", "Norm_rho_surf_12.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "Scaling_Factor_GADS.22.12", "Scaling_Factor_GADS.8.12", NULL, NULL, "dl", "Normalized surface reflectance, band 13"}, {"reflec_14", "Norm_rho_surf_13.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "Scaling_Factor_GADS.22.13", "Scaling_Factor_GADS.8.13", NULL, NULL, "dl", "Normalized surface reflectance, band 14"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.30.1", "Scaling_Factor_GADS.16.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"algal_1", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 1 content"}, {"algal_2", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 2 content"}, {"yellow_subs", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.24.1", "Scaling_Factor_GADS.10.1", "l2_flags.WATER", NULL, "1/m", "Yellow substance"}, {"total_susp", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.25.1", "Scaling_Factor_GADS.11.1", "l2_flags.WATER", NULL, "g/m^3", "Total suspended matter"}, {"photosyn_rad", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.31.1", "Scaling_Factor_GADS.17.1", "l2_flags.WATER", NULL, "myEinstein/m^2", "Photosynthetically active radiation"}, {"toa_veg", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.32.1", "Scaling_Factor_GADS.18.1", "l2_flags.LAND", NULL, "1", "TOA vegetation index"}, {"boa_veg", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.33.1", "Scaling_Factor_GADS.19.1", "l2_flags.LAND", NULL, "1", "BOA vegetation index"}, {"rect_refl_nir", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.40.1", "Scaling_Factor_GADS.39.1", "l2_flags.LAND", NULL, "dl", "Rectified surface reflectances"}, {"rect_refl_red", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.42.1", "Scaling_Factor_GADS.41.1", "l2_flags.LAND", NULL, "dl", "Rectified surface reflectances"}, {"surf_press", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.29.1", "Scaling_Factor_GADS.15.1", "l2_flags.LAND", NULL, "hPa", "Surface pressure"}, {"aero_epsilon", "Epsilon_OPT.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.26.1", "Scaling_Factor_GADS.12.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol epsilon"}, {"aero_opt_thick", "Epsilon_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol optical thickness"}, {"cloud_albedo", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.34.1", "Scaling_Factor_GADS.20.1", "l2_flags.CLOUD", NULL, "dl", "Cloud albedo"}, {"cloud_opt_thick", "Epsilon_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.28.1", "Scaling_Factor_GADS.14.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.35.1", "Scaling_Factor_GADS.21.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"cloud_type", "Epsilon_OPT.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, "l2_flags.CLOUD", NULL, NULL, "Cloud type"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags_IODD6", NULL, "Level 2 classification and quality flags"} }; static const struct BandDescriptor MER_LRC_2P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "dl", "Relative humidity"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.6.1", "Scaling_Factor_GADS.3.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"cloud_opt_thick", "Cloud_Type_OT.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.4.1", "Scaling_Factor_GADS.1.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Cloud_Top_Pressure.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.5.1", "Scaling_Factor_GADS.2.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags", NULL, "Level 2 classification and quality flags"} }; static const struct BandDescriptor MER_RRC_2P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "dl", "Relative humidity"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.6.1", "Scaling_Factor_GADS.3.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"cloud_opt_thick", "Cloud_Type_OT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.4.1", "Scaling_Factor_GADS.1.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Cloud_Top_Pressure.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.5.1", "Scaling_Factor_GADS.2.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"cloud_type", "Cloud_Type_OT.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, "l2_flags.CLOUD", NULL, NULL, "Cloud type"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags", NULL, "Level 2 Classification and quality flags"} }; static const struct BandDescriptor MER_RRV_2P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "dl", "Relative humidity"}, {"toa_veg", "TOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.3.1", "Scaling_Factor_GADS.1.1", "l2_flags.LAND", NULL, "dl", "TOA vegetation index"}, {"boa_veg", "BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.4.1", "Scaling_Factor_GADS.2.1", "l2_flags.LAND", NULL, "dl", "BOA vegetation index"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags", NULL, "Level 2 Classification and quality flags"} }; static const struct BandDescriptor MER_RR__1P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"radiance_1", "Radiance_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.1", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 1"}, {"radiance_2", "Radiance_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.2", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 2"}, {"radiance_3", "Radiance_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.3", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 3"}, {"radiance_4", "Radiance_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.4", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 4"}, {"radiance_5", "Radiance_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.5", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 5"}, {"radiance_6", "Radiance_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.6", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 6"}, {"radiance_7", "Radiance_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.7", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 7"}, {"radiance_8", "Radiance_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.8", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 8"}, {"radiance_9", "Radiance_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.9", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 9"}, {"radiance_10", "Radiance_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.10", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 10"}, {"radiance_11", "Radiance_11.3", e_smod_1OF1, e_tid_float, 11, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.11", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 11"}, {"radiance_12", "Radiance_12.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.12", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 12"}, {"radiance_13", "Radiance_13.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.13", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 13"}, {"radiance_14", "Radiance_14.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.14", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 14"}, {"radiance_15", "Radiance_15.3", e_smod_1OF1, e_tid_float, 15, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.15", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 15"}, {"l1_flags", "Flags.3", e_smod_1OF1, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__1P_flags", NULL, "Level 1b classification and quality flags"}, {"detector_index", "Flags.4", e_smod_1OF1, e_tid_short, -1, e_smid_non, NULL, NULL, NULL, NULL, NULL, "Detector index"} }; static const struct BandDescriptor MER_RR__1P_IODD5_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"radiance_1", "Radiance_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.1", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 1"}, {"radiance_2", "Radiance_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.2", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 2"}, {"radiance_3", "Radiance_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.3", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 3"}, {"radiance_4", "Radiance_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.4", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 4"}, {"radiance_5", "Radiance_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.5", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 5"}, {"radiance_6", "Radiance_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.6", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 6"}, {"radiance_7", "Radiance_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.7", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 7"}, {"radiance_8", "Radiance_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.8", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 8"}, {"radiance_9", "Radiance_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.9", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 9"}, {"radiance_10", "Radiance_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.10", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 10"}, {"radiance_11", "Radiance_11.3", e_smod_1OF1, e_tid_float, 11, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.11", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 11"}, {"radiance_12", "Radiance_12.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.12", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 12"}, {"radiance_13", "Radiance_13.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.13", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 13"}, {"radiance_14", "Radiance_14.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.14", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 14"}, {"radiance_15", "Radiance_15.3", e_smod_1OF1, e_tid_float, 15, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.15", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 15"}, {"l1_flags", "Flags.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__1P_flags", NULL, "Level 1b classification and quality flags"}, {"ssi", "Flags.3", e_smod_2OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, NULL, NULL, "Spectral shift index"} }; static const struct BandDescriptor MER_RR__2P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"reflec_1", "Norm_rho_surf_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "Scaling_Factor_GADS.22.1", "Scaling_Factor_GADS.8.1", NULL, NULL, "dl", "Normalized surface reflectance, band 1"}, {"reflec_2", "Norm_rho_surf_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "Scaling_Factor_GADS.22.2", "Scaling_Factor_GADS.8.2", NULL, NULL, "dl", "Normalized surface reflectance, band 2"}, {"reflec_3", "Norm_rho_surf_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "Scaling_Factor_GADS.22.3", "Scaling_Factor_GADS.8.3", NULL, NULL, "dl", "Normalized surface reflectance, band 3"}, {"reflec_4", "Norm_rho_surf_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "Scaling_Factor_GADS.22.4", "Scaling_Factor_GADS.8.4", NULL, NULL, "dl", "Normalized surface reflectance, band 4"}, {"reflec_5", "Norm_rho_surf_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "Scaling_Factor_GADS.22.5", "Scaling_Factor_GADS.8.5", NULL, NULL, "dl", "Normalized surface reflectance, band 5"}, {"reflec_6", "Norm_rho_surf_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "Scaling_Factor_GADS.22.6", "Scaling_Factor_GADS.8.6", NULL, NULL, "dl", "Normalized surface reflectance, band 6"}, {"reflec_7", "Norm_rho_surf_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "Scaling_Factor_GADS.22.7", "Scaling_Factor_GADS.8.7", NULL, NULL, "dl", "Normalized surface reflectance, band 7"}, {"reflec_8", "Norm_rho_surf_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "Scaling_Factor_GADS.22.8", "Scaling_Factor_GADS.8.8", NULL, NULL, "dl", "Normalized surface reflectance, band 8"}, {"reflec_9", "Norm_rho_surf_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "Scaling_Factor_GADS.22.9", "Scaling_Factor_GADS.8.9", NULL, NULL, "dl", "Normalized surface reflectance, band 9"}, {"reflec_10", "Norm_rho_surf_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "Scaling_Factor_GADS.22.10", "Scaling_Factor_GADS.8.10", NULL, NULL, "dl", "Normalized surface reflectance, band 10"}, {"reflec_12", "Norm_rho_surf_11.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "Scaling_Factor_GADS.22.11", "Scaling_Factor_GADS.8.11", NULL, NULL, "dl", "Normalized surface reflectance, band 12"}, {"reflec_13", "Norm_rho_surf_12.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "Scaling_Factor_GADS.22.12", "Scaling_Factor_GADS.8.12", NULL, NULL, "dl", "Normalized surface reflectance, band 13"}, {"reflec_14", "Norm_rho_surf_13.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "Scaling_Factor_GADS.22.13", "Scaling_Factor_GADS.8.13", NULL, NULL, "dl", "Normalized surface reflectance, band 14"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.30.1", "Scaling_Factor_GADS.16.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"algal_1", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 1 content"}, {"algal_2", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 2 content"}, {"yellow_subs", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.24.1", "Scaling_Factor_GADS.10.1", "l2_flags.WATER", NULL, "1/m", "Yellow substance"}, {"total_susp", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.25.1", "Scaling_Factor_GADS.11.1", "l2_flags.WATER", NULL, "g/m^3", "Total suspended matter"}, {"photosyn_rad", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.31.1", "Scaling_Factor_GADS.17.1", "l2_flags.WATER", NULL, "myEinstein/(m^2*s)", "Photosynthetically active radiation"}, {"toa_veg", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.32.1", "Scaling_Factor_GADS.18.1", "l2_flags.LAND", NULL, "1", "MGVI - MERIS global vegetation index"}, {"boa_veg", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.33.1", "Scaling_Factor_GADS.19.1", "l2_flags.LAND", NULL, "1", "MTCI - MERIS terrestrial chlorophyll index"}, {"rect_refl_red", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.40.1", "Scaling_Factor_GADS.39.1", "l2_flags.LAND", NULL, "dl", "Rectified reflectance in a red band"}, {"rect_refl_nir", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.42.1", "Scaling_Factor_GADS.41.1", "l2_flags.LAND", NULL, "dl", "Rectified reflectances in a near infrared band"}, {"surf_press", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.29.1", "Scaling_Factor_GADS.15.1", "l2_flags.LAND", NULL, "hPa", "Surface pressure"}, {"aero_alpha", "Alpha_OPT.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.26.1", "Scaling_Factor_GADS.12.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol Angstrom exponent"}, {"aero_opt_thick_443", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.LAND", NULL, "dl", "Aerosol optical thickness at 443 nm"}, {"aero_opt_thick_865", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.WATER", NULL, "dl", "Aerosol optical thickness at 865 nm"}, {"cloud_albedo", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.34.1", "Scaling_Factor_GADS.20.1", "l2_flags.CLOUD", NULL, "dl", "Cloud albedo"}, {"cloud_opt_thick", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.28.1", "Scaling_Factor_GADS.14.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.35.1", "Scaling_Factor_GADS.21.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"cloud_type", "Alpha_OPT.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, "l2_flags.CLOUD", NULL, NULL, "Cloud type"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags", NULL, "Level 2 classification and quality flags"} }; static const struct BandDescriptor MER_RR__2P_IODD6_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"reflec_1", "Norm_rho_surf_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "Scaling_Factor_GADS.22.1", "Scaling_Factor_GADS.8.1", NULL, NULL, "dl", "Normalized surface reflectance, band 1"}, {"reflec_2", "Norm_rho_surf_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "Scaling_Factor_GADS.22.2", "Scaling_Factor_GADS.8.2", NULL, NULL, "dl", "Normalized surface reflectance, band 2"}, {"reflec_3", "Norm_rho_surf_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "Scaling_Factor_GADS.22.3", "Scaling_Factor_GADS.8.3", NULL, NULL, "dl", "Normalized surface reflectance, band 3"}, {"reflec_4", "Norm_rho_surf_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "Scaling_Factor_GADS.22.4", "Scaling_Factor_GADS.8.4", NULL, NULL, "dl", "Normalized surface reflectance, band 4"}, {"reflec_5", "Norm_rho_surf_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "Scaling_Factor_GADS.22.5", "Scaling_Factor_GADS.8.5", NULL, NULL, "dl", "Normalized surface reflectance, band 5"}, {"reflec_6", "Norm_rho_surf_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "Scaling_Factor_GADS.22.6", "Scaling_Factor_GADS.8.6", NULL, NULL, "dl", "Normalized surface reflectance, band 6"}, {"reflec_7", "Norm_rho_surf_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "Scaling_Factor_GADS.22.7", "Scaling_Factor_GADS.8.7", NULL, NULL, "dl", "Normalized surface reflectance, band 7"}, {"reflec_8", "Norm_rho_surf_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "Scaling_Factor_GADS.22.8", "Scaling_Factor_GADS.8.8", NULL, NULL, "dl", "Normalized surface reflectance, band 8"}, {"reflec_9", "Norm_rho_surf_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "Scaling_Factor_GADS.22.9", "Scaling_Factor_GADS.8.9", NULL, NULL, "dl", "Normalized surface reflectance, band 9"}, {"reflec_10", "Norm_rho_surf_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "Scaling_Factor_GADS.22.10", "Scaling_Factor_GADS.8.10", NULL, NULL, "dl", "Normalized surface reflectance, band 10"}, {"reflec_12", "Norm_rho_surf_11.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "Scaling_Factor_GADS.22.11", "Scaling_Factor_GADS.8.11", NULL, NULL, "dl", "Normalized surface reflectance, band 12"}, {"reflec_13", "Norm_rho_surf_12.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "Scaling_Factor_GADS.22.12", "Scaling_Factor_GADS.8.12", NULL, NULL, "dl", "Normalized surface reflectance, band 13"}, {"reflec_14", "Norm_rho_surf_13.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "Scaling_Factor_GADS.22.13", "Scaling_Factor_GADS.8.13", NULL, NULL, "dl", "Normalized surface reflectance, band 14"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.30.1", "Scaling_Factor_GADS.16.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"algal_1", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 1 content"}, {"algal_2", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 2 content"}, {"yellow_subs", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.24.1", "Scaling_Factor_GADS.10.1", "l2_flags.WATER", NULL, "1/m", "Yellow substance"}, {"total_susp", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.25.1", "Scaling_Factor_GADS.11.1", "l2_flags.WATER", NULL, "g/m^3", "Total suspended matter"}, {"photosyn_rad", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.31.1", "Scaling_Factor_GADS.17.1", "l2_flags.WATER", NULL, "myEinstein/m^2", "Photosynthetically active radiation"}, {"toa_veg", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.32.1", "Scaling_Factor_GADS.18.1", "l2_flags.LAND", NULL, "1", "TOA vegetation index"}, {"boa_veg", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.33.1", "Scaling_Factor_GADS.19.1", "l2_flags.LAND", NULL, "1", "BOA vegetation index"}, {"rect_refl_nir", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.40.1", "Scaling_Factor_GADS.39.1", "l2_flags.LAND", NULL, "dl", "Rectified surface reflectances"}, {"rect_refl_red", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.42.1", "Scaling_Factor_GADS.41.1", "l2_flags.LAND", NULL, "dl", "Rectified surface reflectances"}, {"surf_press", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.29.1", "Scaling_Factor_GADS.15.1", "l2_flags.LAND", NULL, "hPa", "Surface pressure"}, {"aero_epsilon", "Epsilon_OPT.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.26.1", "Scaling_Factor_GADS.12.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol epsilon"}, {"aero_opt_thick", "Epsilon_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol optical thickness"}, {"cloud_albedo", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.34.1", "Scaling_Factor_GADS.20.1", "l2_flags.CLOUD", NULL, "dl", "Cloud albedo"}, {"cloud_opt_thick", "Epsilon_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.28.1", "Scaling_Factor_GADS.14.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.35.1", "Scaling_Factor_GADS.21.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"cloud_type", "Epsilon_OPT.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, "l2_flags.CLOUD", NULL, NULL, "Cloud type"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags_IODD6", NULL, "Level 2 classification and quality flags"} }; static const struct FlagDescriptor ATS_NR__2P_flags_data[] = { {"NADIR_SST_ONLY_VALID", 1, {0, 0}, "Nadir-only SST is valid"}, {"NADIR_SST_ONLY_37_MY_VALID", 1, {1, 0}, "Nadir-only SST retrieval includes 3.7 micron channel"}, {"DUAL_SST_VALID", 1, {2, 0}, "Dual-view SST is valid"}, {"DUAL_SST_VALID_37_MY", 1, {3, 0}, "Dual-view SST retrieval includes 3.7 micron channel"}, {"LAND", 1, {4, 0}, "Pixel is over land"}, {"NADIR_CLOUD", 1, {5, 0}, "Nadir-view pixel is cloudy"}, {"NADIR_BLANKING", 1, {6, 0}, "Nadir-view pixel has blanking pulse"}, {"NADIR_COSMETIC", 1, {7, 0}, "Nadir-view pixel is cosmetic fill"}, {"FWARD_CLOUD", 1, {8, 0}, "Forward-view pixel is cloudy"}, {"FWARD_BLANKING", 1, {9, 0}, "Forward-view pixel has blanking pulse"}, {"FWARD_COSMETIC", 1, {10, 0}, "Forward-view pixel is cosmetic fill"}, {"CLOUDY_16_MY", 1, {11, 0}, "One or both views flagged cloudy by 1.6 micron test (daytime only)"}, {"CLOUDY_11_12_MY", 1, {12, 0}, "Cloud flagged by 11 micron/12 micron nadir-forward test"}, {"CLOUDY_HISTO", 1, {13, 0}, "One or both views flagged cloudy by infra-red histogram test"} }; static const struct FlagDescriptor ATS_TOA_1P_cloud_flags_data[] = { {"LAND", 1, {0, 0}, "Pixel is over land"}, {"CLOUDY", 1, {1, 0}, "Pixel is cloudy (result of all cloud tests)"}, {"SUN_GLINT", 1, {2, 0}, "Sunglint detected in pixel"}, {"CLOUDY_REFL_HIST", 1, {3, 0}, "1.6 micron reflectance histogram test shows pixel cloudy (day-time only)"}, {"CLOUDY_SPAT_COHER_16", 1, {4, 0}, "1.6 micron spatial coherence test shows pixel cloudy (day-time only)"}, {"CLOUDY_SPAT_COHER_11", 1, {5, 0}, "11 micron spatial coherence test shows pixel cloudy"}, {"CLOUDY_GROSS_12", 1, {6, 0}, "12 micron gross cloud test shows pixel cloudy"}, {"CLOUDY_CIRRUS_11_12", 1, {7, 0}, "11/12 micron thin cirrus test shows pixel cloudy"}, {"CLOUDY_MED_HI_LEVEL_37_12", 1, {8, 0}, "3.7/12 micron medium/high level test shows pixel cloudy (night-time only)"}, {"CLOUDY_FOG_LOW_STRATUS_11_37", 1, {9, 0}, "11/3.7 micron fog/low stratus test shows pixel cloudy (night-time only)"}, {"CLOUDY_VW_DIFF_11_12", 1, {10, 0}, "11/12 micron view-difference test shows pixel cloudy"}, {"CLOUDY_VW_DIFF_37_11", 1, {11, 0}, "3.7/11 micron view-difference test shows pixel cloudy (night-time only)"}, {"CLOUDY_THERM_HIST_11_12", 1, {12, 0}, "11/12 micron thermal histogram test shows pixel cloudy"} }; static const struct FlagDescriptor ATS_TOA_1P_confid_flags_data[] = { {"BLANKING", 1, {0, 0}, "Blanking Pulse"}, {"COSMETIC", 1, {1, 0}, "Cosmetic Fill Pixel"}, {"SCAN_ABSENT", 1, {2, 0}, "Entire scan absent from telemetry"}, {"ABSENT", 1, {3, 0}, "Pixel absent from telemetry"}, {"NOT_DECOMPR", 1, {4, 0}, "Pixel not decompressed owing to error in packet validation"}, {"NO_SIGNAL", 1, {5, 0}, "No signal in some channel (zero count)"}, {"SATURATION", 1, {6, 0}, "Saturation in some channel (maximum count)"}, {"OUT_OF_RANGE", 1, {7, 0}, "Derived radiance of some channel outside range of calibration"}, {"NO_CALIB_PARAM", 1, {8, 0}, "Calibration Parameters unavailable for pixel"}, {"UNFILLED", 1, {9, 0}, "Pixel unfilled (cosmetic fill algorithm unable to find nearest neighbour pixel)"} }; static const struct FlagDescriptor MER_RR__1P_flags_data[] = { {"COSMETIC", 1, {0, 0}, "Pixel is cosmetic"}, {"DUPLICATED", 1, {1, 0}, "Pixel has been duplicated (filled in)"}, {"GLINT_RISK", 1, {2, 0}, "Pixel has glint risk"}, {"SUSPECT", 1, {3, 0}, "Pixel is suspect"}, {"LAND_OCEAN", 1, {4, 0}, "Pixel is over land, not ocean"}, {"BRIGHT", 1, {5, 0}, "Pixel is bright (saturation)"}, {"COASTLINE", 1, {6, 0}, "Pixel is part of a coastline"}, {"INVALID", 1, {7, 0}, "Pixel is invalid"} }; static const struct FlagDescriptor MER_RR__2P_flags_data[] = { {"LAND", 1, {23, 0}, "Land product available"}, {"CLOUD", 1, {22, 0}, "Cloud product available"}, {"WATER", 1, {21, 0}, "Water product available"}, {"PCD_1_13", 1, {20, 0}, "Uncertain normalized surface reflectance"}, {"PCD_14", 1, {19, 0}, "Uncertain total water vapour content"}, {"PCD_15", 1, {18, 0}, "Uncertain algal pigment index 1 or cloud top pressure or top of atmosphere vegetation index"}, {"PCD_16", 1, {17, 0}, "Uncertain yellow substance and total suspended matter or rectified reflectances"}, {"PCD_17", 1, {16, 0}, "Uncertain algal pigment index 2 or bottom of atmosphere vegetation index"}, {"PCD_18", 1, {15, 0}, "Uncertain PAR or cloud albedo or land surface pressure"}, {"PCD_19", 1, {14, 0}, "Uncertain aerosol type and optical thickness or cloud optical thickness"}, {"COASTLINE", 1, {13, 0}, "Coastline pixel"}, {"COSMETIC", 1, {12, 0}, "Cosmetic pixel (from level-1b)"}, {"SUSPECT", 1, {11, 0}, "Suspect pixel (from level-1b)"}, {"OOADB", 1, {10, 0}, "Aerosol model is out of aerosol model database"}, {"ABSOA_DUST", 1, {9, 0}, "Dust-like absorbing aerosol selected for atmosphere correction"}, {"CASE2_S", 1, {8, 0}, "Turbid (sediment dominated Case 2) water"}, {"CASE2_ANOM", 2, {7, 21}, "Anomalous scattering water"}, {"TOAVI_BRIGHT", 2, {7, 23}, "Bright pixel flagged by MGVI processing"}, {"CASE2_Y", 2, {6, 21}, "Yellow substance loaded water"}, {"TOAVI_BAD", 2, {6, 23}, "Bad pixel flagged by MGVI processing"}, {"ICE_HAZE", 2, {5, 21}, "Ice or high aerosol load pixel"}, {"TOAVI_CSI", 2, {5, 23}, "Cloud, snow or ice over land pixel acc. to MGVI processing"}, {"MEDIUM_GLINT", 2, {4, 21}, "Corrected for glint (water)"}, {"TOAVI_WS", 2, {4, 23}, "Water/shadow pixel acc. to MGVI processing (land)"}, {"LARS_ON", 2, {3, 23}, "Land aerosol remote sensing turned on"}, {"BPAC_ON", 2, {3, 21}, "Bright pixels atmospheric correction activated (water)"}, {"HIGH_GLINT", 2, {2, 21}, "High (uncorrected) glint (water)"}, {"TOAVI_INVAL_REC", 2, {2, 23}, "Invalid rectification (land)"}, {"LOW_SUN", 1, {1, 0}, "Sun low above horizon (or conversely high sun zenith angle)"}, {"LOW_PRESSURE", 1, {0, 0}, "Computed pressure is lower than ECMWF one (land, cloud)"}, {"WHITE_SCATTERER", 2, {0, 21}, "Presense of white scatterer in water"} }; static const struct FlagDescriptor MER_RR__2P_flags_IODD6_data[] = { {"LAND", 1, {23, 0}, "Land product available"}, {"CLOUD", 1, {22, 0}, "Cloud product available"}, {"WATER", 1, {21, 0}, "Water product available"}, {"PCD_1_13", 1, {20, 0}, "Uncertain normalized surface reflectance"}, {"PCD_14", 1, {19, 0}, "Uncertain total water vapour content"}, {"PCD_15", 1, {18, 0}, "Uncertain algal pigment index 1 or cloud top pressure or top of atmosphere vegetation index"}, {"PCD_16", 1, {17, 0}, "Uncertain yellow substance and total suspended matter or rectified reflectances"}, {"PCD_17", 1, {16, 0}, "Uncertain algal pigment index 2 or bottom of atmosphere vegetation index"}, {"PCD_18", 1, {15, 0}, "Uncertain PAR or cloud albedo or land surface pressure"}, {"PCD_19", 1, {14, 0}, "Uncertain aerosol type and optical thickness or cloud optical thickness"}, {"COASTLINE", 1, {13, 0}, "Coastline pixel"}, {"COSMETIC", 1, {12, 0}, "Cosmetic pixel (from level-1B)"}, {"SUSPECT", 1, {11, 0}, "Suspect pixel (from level-1B)"}, {"ABSOA_CONT", 1, {10, 0}, "Continental absorbing aerosol"}, {"ABSOA_DUST", 1, {9, 0}, "Dust-like absorbing aerosol"}, {"CASE2_S", 1, {8, 0}, "Turbid water"}, {"CASE2_ANOM", 2, {7, 21}, "Anomalous scattering water"}, {"TOAVI_BRIGHT", 2, {7, 23}, "Bright pixel flagged by TOAVI processing"}, {"CASE2_Y", 2, {6, 21}, "Yellow substance loaded water"}, {"TOAVI_BAD", 2, {6, 23}, "Bad pixel flagged by TOAVI processing"}, {"ICE_HAZE", 2, {5, 21}, "Ice at high aerosol load pixel"}, {"TOAVI_CSI", 2, {5, 23}, "Cloud, snow or ice flagged by TOAVI"}, {"MEDIUM_GLINT", 2, {4, 21}, "Corrected for glint"}, {"TOAVI_WS", 2, {4, 23}, "Water or deep shadow flagged by TOAVI"}, {"DDV", 1, {3, 0}, "Dense dark vegetation"}, {"HIGH_GLINT", 2, {2, 21}, "High (uncorrected) glint"}, {"TOAVI_INVAL_REC", 2, {2, 23}, "Invalid rectification flagged by TOAVI"}, {"P_CONFIDENCE", 1, {1, 0}, "The two pressure estimates do not compare successfully"}, {"LOW_PRESSURE", 1, {0, 0}, "Computed pressure lower than ECMWF one"} }; const struct DatasetDescriptorTable dddb_product_tables[46] = { {"ASA_APG_1P", "ASAR Alternating Polarization Ellipsoid Geocoded Image", 11, ASA_APG_1P_dataset_data}, {"ASA_APM_1P", "ASAR Alternating Polarization Medium Resolution Image product", 10, ASA_APM_1P_dataset_data}, {"ASA_APP_1P", "ASAR Alternating Polarization Mode Precision Image", 10, ASA_APP_1P_dataset_data}, {"ASA_APS_1P", "ASAR Alternating Polarization Mode Single Look Complex", 8, ASA_APS_1P_dataset_data}, {"ASA_AP__BP", "ASAR Alternating Polarization Browse Product", 5, ASA_AP__BP_dataset_data}, {"ASA_GM1_1P", "ASAR Global Monitoring Mode Image", 8, ASA_GM1_1P_dataset_data}, {"ASA_IMG_1P", "ASAR Image Mode Ellipsoid Geocoded Image", 9, ASA_IMG_1P_dataset_data}, {"ASA_IMM_1P", "ASAR Image Mode Medium Resolution Image", 8, ASA_IMM_1P_dataset_data}, {"ASA_IMP_1P", "ASAR Image Mode Precision Image", 8, ASA_IMP_1P_dataset_data}, {"ASA_IMS_1P", "ASAR Image Mode Single Look Complex", 6, ASA_IMS_1P_dataset_data}, {"ASA_IM__BP", "ASAR Image Mode Browse Product", 3, ASA_IM__BP_dataset_data}, {"ASA_WSM_1P", "ASAR Wide Swath Medium Resolution Image", 8, ASA_WSM_1P_dataset_data}, {"ASA_WS__BP", "ASAR Wide Swath Mode Browse Image", 5, ASA_WS__BP_dataset_data}, {"ASA_WVI_1P", "ASAR Wave Mode SLC Imagette and Imagette Cross Spectra", 405, ASA_WVI_1P_dataset_data}, {"ASA_WVS_1P", "ASAR Wave Mode Imagette Cross Spectra", 4, ASA_WVS_1P_dataset_data}, {"ASA_WVW_2P", "ASAR Wave Mode Wave Spectra", 4, ASA_WVW_2P_dataset_data}, {"ATS_AR__2P", "AATSR averaged geophysical product", 16, ATS_AR__2P_dataset_data}, {"ATS_MET_2P", "AATSR Spatially Averaged Sea Surface Temperature for Meteo Users", 1, ATS_MET_2P_dataset_data}, {"ATS_NR__2P", "AATSR geophysical product (full resolution)", 8, ATS_NR__2P_dataset_data}, {"ATS_TOA_1P", "AATSR Gridded brightness temperature and reflectance", 26, ATS_TOA_1P_dataset_data}, {"MER_FR__1P", "MERIS Full Resolution Geolocated and Calibrated TOA Radiance", 19, MER_FR__1P_dataset_data}, {"MER_FRS_1P", "MERIS Full Resolution Full Swath Geolocated and Calibrated TOA Radiance", 19, MER_FR__1P_dataset_data}, {"MER_FR__1P_IODD5", "MERIS Full Resolution Geolocated and Calibrated TOA Radiance", 19, MER_FR__1P_IODD5_dataset_data}, {"MER_FR__2P", "MERIS Full Resolution Geophysical Product", 23, MER_FR__2P_dataset_data}, {"MER_FRS_2P", "MERIS Full Resolution Full Swath Geophysical Product", 23, MER_FR__2P_dataset_data}, {"MER_FR__2P_IODD6", "MERIS Full Resolution Geophysical Product", 23, MER_FR__2P_IODD6_dataset_data}, {"MER_LRC_2P", "MERIS Extracted Cloud Thickness and Water Vapour for Meteo Users", 7, MER_LRC_2P_dataset_data}, {"MER_RRC_2P", "MERIS Extracted Cloud Thickness and Water Vapour", 7, MER_RRC_2P_dataset_data}, {"MER_RRV_2P", "MERIS Extracted Vegetation Indices", 6, MER_RRV_2P_dataset_data}, {"MER_RR__1P", "MERIS Reduced Resolution Geolocated and Calibrated TOA Radiance", 19, MER_RR__1P_dataset_data}, {"MER_RR__1P_IODD5", "MERIS Reduced Resolution Geolocated and Calibrated TOA Radiance", 19, MER_RR__1P_IODD5_dataset_data}, {"MER_RR__2P", "MERIS Reduced Resolution Geophysical Product", 23, MER_RR__2P_dataset_data}, {"MER_RR__2P_IODD6", "MERIS Reduced Resolution Geophysical Product", 23, MER_RR__2P_IODD6_dataset_data}, {"SAR_APG_1P", "ERS Simulated Alternating Polarization Ellipsoid Geocoded Image", 11, ASA_APG_1P_dataset_data}, {"SAR_APM_1P", "ERS Simulated Alternating Polarization Medium Resolution Image product", 10, ASA_APM_1P_dataset_data}, {"SAR_APP_1P", "ERS Simulated Alternating Polarization Mode Precision Image", 10, ASA_APP_1P_dataset_data}, {"SAR_APS_1P", "ERS Simulated Alternating Polarization Mode Single Look Complex", 8, ASA_APS_1P_dataset_data}, {"SAR_AP__BP", "ERS Simulated Alternating Polarization Browse Product", 5, ASA_AP__BP_dataset_data}, {"SAR_IMG_1P", "ERS Image Mode Ellipsoid Geocoded Image", 9, ASA_IMG_1P_dataset_data}, {"SAR_IMM_1P", "ERS Image Mode Medium Resolution Image", 8, ASA_IMM_1P_dataset_data}, {"SAR_IMP_1P", "ERS Image Mode Precision Image", 8, ASA_IMP_1P_dataset_data}, {"SAR_IMS_1P", "ERS Image Mode Single Look Complex", 6, ASA_IMS_1P_dataset_data}, {"SAR_IM__BP", "ERS Image Mode Browse Product", 3, ASA_IM__BP_dataset_data}, {"SAR_WVI_1P", "ERS Wave Mode SLC Imagette and Imagette Cross Spectra", 405, ASA_WVI_1P_dataset_data}, {"SAR_WVS_1P", "ERS Wave Mode Imagette Cross Spectra", 4, ASA_WVS_1P_dataset_data}, {"SAR_WVW_2P", "ERS Wave Mode Wave Spectra", 4, ASA_WVW_2P_dataset_data}, }; const struct BandDescriptorTable dddb_band_tables[37] = { {"ASA_APG_1P", "ASAR Alternating Polarization Geocoded Image", 6, ASA_APG_1P_band_data}, {"ASA_APM_1P", "ASAR Alternating Polarization Medium Resolution Image", 6, ASA_APM_1P_band_data}, {"ASA_APP_1P", "ASAR Alternating Polarization Precision Image", 6, ASA_APP_1P_band_data}, {"ASA_APS_1P", "ASAR Alternating Polarization SLC Image", 6, ASA_APS_1P_band_data}, {"ASA_AP__BP", "ASAR Alternatin Polarization Mode Browse Product", 5, ASA_AP__BP_band_data}, {"ASA_IMG_1P", "ASAR Image Mode Geocoded Image", 5, ASA_IMG_1P_band_data}, {"ASA_IMM_1P", "ASAR Image Mode Medium Resolution Image", 5, ASA_IMM_1P_band_data}, {"ASA_IMP_1P", "ASAR Image Mode Precision Image", 5, ASA_IMP_1P_band_data}, {"ASA_IMS_1P", "ASAR Image Mode SLC Image", 6, ASA_IMS_1P_band_data}, {"ASA_IM__BP", "ASAR Image Mode Browse Product", 5, ASA_IM__BP_band_data}, {"ASA_WSM_1P", "ASAR Wide Swath Mode Medium Resolution Image", 5, ASA_WSM_1P_band_data}, {"ASA_WS__BP", "ASAR Wide Swap Mode Browse Image", 5, ASA_WS__BP_band_data}, {"ATS_NR__2P", "AATSR Geophysical Level 2 Product", 22, ATS_NR__2P_band_data}, {"ATS_TOA_1P", "AATSR Gridded brightness temperature and reflectance", 33, ATS_TOA_1P_band_data}, {"MER_FR__1P", "MERIS Level 1b Full Resolution Geophysical Product", 32, MER_FR__1P_band_data}, {"MER_FRS_1P", "MERIS Level 1b Full Resolution Full Swath Geophysical Product", 32, MER_FR__1P_band_data}, {"MER_FR__1P_IODD5", "MERIS Level 1b Full Resolution Geophysical Product", 32, MER_FR__1P_IODD5_band_data}, {"MER_FR__2P", "MERIS Level 2 Full Resolution Geophysical Product", 47, MER_FR__2P_band_data}, {"MER_FRS_2P", "MERIS Level 2 Full Resolution Full Swath Geophysical Product", 47, MER_FR__2P_band_data}, {"MER_FR__2P_IODD6", "MERIS Level 2 Full Resolution Geophysical Product", 46, MER_FR__2P_IODD6_band_data}, {"MER_LRC_2P", "MERIS Level 2 Extracted Cloud Thickness and Water Vapour for Meteo Users", 19, MER_LRC_2P_band_data}, {"MER_RRC_2P", "MERIS Level 2 Extracted Cloud Thickness and Water Vapour", 20, MER_RRC_2P_band_data}, {"MER_RRV_2P", "MERIS Level 2 Extracted Vegetation Indices", 18, MER_RRV_2P_band_data}, {"MER_RR__1P", "MERIS Level 1b Reduced Resolution Geophysical Product", 32, MER_RR__1P_band_data}, {"MER_RR__1P_IODD5", "MERIS Level 1b Reduced Resolution Geophysical Product", 32, MER_RR__1P_IODD5_band_data}, {"MER_RR__2P", "MERIS Level 2 Reduced Resolution Geophysical Product", 47, MER_RR__2P_band_data}, {"MER_RR__2P_IODD6", "MERIS Level 2 Reduced Resolution Geophysical Product", 46, MER_RR__2P_IODD6_band_data}, {"SAR_APG_1P", "ERS Simulated Alternating Polarization Geocoded Image", 6, ASA_APG_1P_band_data}, {"SAR_APM_1P", "ERS Simulated Alternating Polarization Medium Resolution Image", 6, ASA_APM_1P_band_data}, {"SAR_APP_1P", "ERS Simulated Alternating Polarization Precision Image", 6, ASA_APP_1P_band_data}, {"SAR_APS_1P", "ERS Simulated Alternating Polarization SLC Image", 6, ASA_APS_1P_band_data}, {"SAR_AP__BP", "ERS Simulated Alternatin Polarization Mode Browse Product", 5, ASA_AP__BP_band_data}, {"SAR_IMG_1P", "ERS Image Mode Geocoded Image", 5, ASA_IMG_1P_band_data}, {"SAR_IMM_1P", "ERS Image Mode Medium Resolution Image", 5, ASA_IMM_1P_band_data}, {"SAR_IMP_1P", "ERS Image Mode Precision Image", 5, ASA_IMP_1P_band_data}, {"SAR_IMS_1P", "ERS Image Mode SLC Image", 6, ASA_IMS_1P_band_data}, {"SAR_IM__BP", "ERS Image Mode Browse Product", 5, ASA_IM__BP_band_data}, }; const struct FlagDescriptorTable dddb_flag_coding_tables[6] = { {"ATS_NR__2P_flags", "AATSR Level 2 Flags Codings", 14, ATS_NR__2P_flags_data}, {"ATS_TOA_1P_cloud_flags", "AATSR TOA Level 1b Cloud Flags Codings", 13, ATS_TOA_1P_cloud_flags_data}, {"ATS_TOA_1P_confid_flags", "AATSR TOA Level 1b Confidence Flag Codings", 10, ATS_TOA_1P_confid_flags_data}, {"MER_RR__1P_flags", "MERIS RR Level 1b Flag Codings", 8, MER_RR__1P_flags_data}, {"MER_RR__2P_flags", "MERIS Level 2 Flag Codings", 31, MER_RR__2P_flags_data}, {"MER_RR__2P_flags_IODD6", "MERIS Level 2 Flag Codings", 29, MER_RR__2P_flags_IODD6_data}, }; const struct RecordDescriptorTable dddb_meris_rec_tables[23] = { {"MER_LRC_2P_MDSR_cl_thick", "Level 2 MDS Cloud Optical Thickness", 3, MER_LRC_2P_MDSR_cl_thick_meris_rec_data}, {"MER_LRC_2P_MDSR_cl_top_press", "Level 2 MDS Cloud Top Pressure", 3, MER_LRC_2P_MDSR_cl_top_press_meris_rec_data}, {"MER_LRC_2P_MDSR_flag", "Level 2 MDS Flags", 3, MER_LRC_2P_MDSR_flag_meris_rec_data}, {"MER_LRC_2P_MDSR_twv", "Level 2 MDS Total Water vapour", 3, MER_LRC_2P_MDSR_twv_meris_rec_data}, {"MER_RRC_2P_GADS_sfgi", "Level 2 GADS Scaling Factor and Offsets", 7, MER_RRC_2P_GADS_sfgi_meris_rec_data}, {"MER_RRV_2P_GADS_sfgi", "Level 2 GADS Scaling Factor and Offsets", 5, MER_RRV_2P_GADS_sfgi_meris_rec_data}, {"MER_RR__1P_ADSR_sq", "Level 1b Summary Quality ADS(SQ ADS)", 4, MER_RR__1P_ADSR_sq_meris_rec_data}, {"MER_RR__1P_ADSR_tie_pt", "Level 2 ADS Tie Points Location & Aux. Data ( L ADS)", 17, MER_RR__1P_ADSR_tie_pt_meris_rec_data}, {"MER_RR__1P_GADS_sfgi", "Level 1b GADS Scaling Factor and General Info", 12, MER_RR__1P_GADS_sfgi_meris_rec_data}, {"MER_RR__1P_MDSR_16", "Level 1b MDS (16) Flags & Spectral Shift Index", 4, MER_RR__1P_MDSR_16_meris_rec_data}, {"MER_RR__1P_MDSR_16_IODD5", "Level 1b MDS (16) Flags & Detector Index", 3, MER_RR__1P_MDSR_16_IODD5_meris_rec_data}, {"MER_RR__1P_MDSR_1_15", "Level 1b MDS (1) TOA Radiance", 3, MER_RR__1P_MDSR_1_15_meris_rec_data}, {"MER_RR__2P_ADSR_sq", "Level 2 ADS Summary Quality ADS (SQ ADS)", 21, MER_RR__2P_ADSR_sq_meris_rec_data}, {"MER_RR__2P_GADS_sfgi", "Level 2 GADS Scaling Factors and Offsets", 43, MER_RR__2P_GADS_sfgi_meris_rec_data}, {"MER_RR__2P_MDSR_14", "Level 2 MDS(14) water vapour content", 3, MER_RR__2P_MDSR_14_meris_rec_data}, {"MER_RR__2P_MDSR_15", "Level 2 MDS(15) algal index I TOAVI", 3, MER_RR__2P_MDSR_15_meris_rec_data}, {"MER_RR__2P_MDSR_16", "Level 2 MDS(16) yellow substance total suspended matter or rectified reflectances", 3, MER_RR__2P_MDSR_16_meris_rec_data}, {"MER_RR__2P_MDSR_17", "Level 2 MDS(17) algal index II BOAVI", 3, MER_RR__2P_MDSR_17_meris_rec_data}, {"MER_RR__2P_MDSR_18", "Level 2 MDS(18) surface pressure PAR cloud albedo", 3, MER_RR__2P_MDSR_18_meris_rec_data}, {"MER_RR__2P_MDSR_19", "Level 2 MDS(19) aerosol epsilon or cloud type and optical thickness", 3, MER_RR__2P_MDSR_19_meris_rec_data}, {"MER_RR__2P_MDSR_19_IODD6", "Level 2 MDS(19) aerosol epsilon or cloud type and optical thickness", 3, MER_RR__2P_MDSR_19_IODD6_meris_rec_data}, {"MER_RR__2P_MDSR_1_13", "Level 2 MDS(1) normalised surface reflectance", 3, MER_RR__2P_MDSR_1_13_meris_rec_data}, {"MER_RR__2P_MDSR_20", "Level 2 MDS(20) flags", 3, MER_RR__2P_MDSR_20_meris_rec_data} }; const struct RecordDescriptorTable dddb_aatsr_rec_tables[20] = { {"ATS_AR__2P_MDSR_lr_large", "BT/TOA Land record 50 km cell MDS", 90, ATS_AR__2P_MDSR_lr_large_aatsr_rec_data}, {"ATS_AR__2P_MDSR_lr_small", "BT/TOA Land record 17 km cell MDS", 46, ATS_AR__2P_MDSR_lr_small_aatsr_rec_data}, {"ATS_AR__2P_MDSR_lst_large", "LST record 50 km cell MDS", 17, ATS_AR__2P_MDSR_lst_large_aatsr_rec_data}, {"ATS_AR__2P_MDSR_lst_small", "LST record 17 km cell MDS", 11, ATS_AR__2P_MDSR_lst_small_aatsr_rec_data}, {"ATS_AR__2P_MDSR_sr_large", "BT/TOA Sea record 50 km cell MDS", 86, ATS_AR__2P_MDSR_sr_large_aatsr_rec_data}, {"ATS_AR__2P_MDSR_sr_small", "BT/TOA Sea record 17 km cell MDS", 42, ATS_AR__2P_MDSR_sr_small_aatsr_rec_data}, {"ATS_AR__2P_MDSR_sst_large", "SST record 50 km cell MDS", 17, ATS_AR__2P_MDSR_sst_large_aatsr_rec_data}, {"ATS_AR__2P_MDSR_sst_small", "SST record 17 km cell MDS", 11, ATS_AR__2P_MDSR_sst_small_aatsr_rec_data}, {"ATS_MET_2P_meteo_user_prod", "10-arcminute mds", 17, ATS_MET_2P_meteo_user_prod_aatsr_rec_data}, {"ATS_NR__2P_ADSR_sq", "Summary Quality ADS", 25, ATS_NR__2P_ADSR_sq_aatsr_rec_data}, {"ATS_NR__2P_MDSR_dp", "Distributed product MDS", 7, ATS_NR__2P_MDSR_dp_aatsr_rec_data}, {"ATS_TOA_1P_ADSR_loc", "Grid pixel latitude and longtitude topographic corrections ADS", 12, ATS_TOA_1P_ADSR_loc_aatsr_rec_data}, {"ATS_TOA_1P_ADSR_pix", "Scan and pixel number nadir view ADS", 6, ATS_TOA_1P_ADSR_pix_aatsr_rec_data}, {"ATS_TOA_1P_ADSR_sa", "Nadir view solar angles ADS", 9, ATS_TOA_1P_ADSR_sa_aatsr_rec_data}, {"ATS_TOA_1P_ADSR_scan", "Scan pixel x and y ADS", 7, ATS_TOA_1P_ADSR_scan_aatsr_rec_data}, {"ATS_TOA_1P_ADSR_sq", "Summary quality ADS", 25, ATS_TOA_1P_ADSR_sq_aatsr_rec_data}, {"ATS_TOA_1P_MDSR_brgt", "12 micron nadir view MDS", 5, ATS_TOA_1P_MDSR_brgt_aatsr_rec_data}, {"ATS_TOA_1P_MDSR_cl", "Cloud flag nadir view MDS", 5, ATS_TOA_1P_MDSR_cl_aatsr_rec_data}, {"ATS_TOA_1P_MDSR_conf", "Confidence words nadir view MDS", 5, ATS_TOA_1P_MDSR_conf_aatsr_rec_data}, {"ATS_VC1_AX_GADS", "Visible calibration coefficients GADS", 32, ATS_VC1_AX_GADS_aatsr_rec_data} }; const struct RecordDescriptorTable dddb_asar_rec_tables[20] = { {"ASAR_Antenna_ADSR", "Antenna Elevation patterns(s)", 7, ASAR_Antenna_ADSR_asar_rec_data}, {"ASAR_Chirp_ADSR", "chirp parameters", 140, ASAR_Chirp_ADSR_asar_rec_data}, {"ASAR_Dop_Cen_ADSR", "Doppler Centroid Parameters", 7, ASAR_Dop_Cen_ADSR_asar_rec_data}, {"ASAR_Geo_Grid_ADSR", "Geolocation Grid ADSRs", 18, ASAR_Geo_Grid_ADSR_asar_rec_data}, {"ASAR_Image_MDSR_BP", "Measurement Data Set 1", 4, ASAR_Image_MDSR_BP_asar_rec_data}, {"ASAR_Image_MDSR_Gen", "Measurement Data Set 1", 4, ASAR_Image_MDSR_Gen_asar_rec_data}, {"ASAR_Image_MDSR_SLC", "Measurement Data Set 1", 4, ASAR_Image_MDSR_SLC_asar_rec_data}, {"ASAR_Main_ADSR", "Main Processing parameters", 220, ASAR_Main_ADSR_asar_rec_data}, {"ASAR_Map_GADS", "Map Projection parameters", 66, ASAR_Map_GADS_asar_rec_data}, {"ASAR_Ocean_Spectra_MDSR", "Ocean Wave spectrum.", 29, ASAR_Ocean_Spectra_MDSR_asar_rec_data}, {"ASAR_SQ1_Image_ADSR", "SQ ADSRs", 39, ASAR_SQ1_Image_ADSR_asar_rec_data}, {"ASAR_SRGR_ADSR", "Slant Range to Ground Range conversion parameters", 6, ASAR_SRGR_ADSR_asar_rec_data}, {"ASAR_Spectra_MDSR", "Measurement Data Set containing spectra. 1 MDSR per spectra.", 29, ASAR_Spectra_MDSR_asar_rec_data}, {"ASAR_Wave_Geolocation_ADSR", "Wave Mode Geolocation ADS", 5, ASAR_Wave_Geolocation_ADSR_asar_rec_data}, {"ASAR_Wave_Param_ADSR", "Wave Mode processing parameters", 396, ASAR_Wave_Param_ADSR_asar_rec_data}, {"ASAR_Wave_SQ_ADSR", "SQ ADSRs", 59, ASAR_Wave_SQ_ADSR_asar_rec_data}, {"ASA_CON_AX_GADS", "Contains ASAR processor configuration data", 41, ASA_CON_AX_GADS_asar_rec_data}, {"ASA_INS_AX_GADS", "Contains ASAR instrument characterization data", 721, ASA_INS_AX_GADS_asar_rec_data}, {"ASA_XCA_AX_GADS", "Contains ASAR external calibration data", 31, ASA_XCA_AX_GADS_asar_rec_data}, {"ASA_XCH_AX_GADS", "Contains ASAR external characterization data", 5, ASA_XCH_AX_GADS_asar_rec_data} }; GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_api.h000644 015705 000000 00000143677 13505462014 026573 0ustar00sandwellwheel000000 000000 /* * $Id: epr_api.h,v 1.3 2009-03-27 10:25:54 sabine Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_API_H_INCL #define EPR_API_H_INCL #ifdef __cplusplus extern "C" { #endif /* to make the FILE structure available */ #include /* to make dynamic arrays available*/ #include "epr_ptrarray.h" #define EPR_PRODUCT_API_NAME_STR "ENVISAT Product Reader API" #define EPR_PRODUCT_API_VERSION_STR "2.3" /* needed by Doxygen */ /** \mainpage * \htmlinclude doxygen_main_content.html */ /** * The EPR_DataTypeId enumeration lists all possible data * types for field elements in ENVISAT dataset records. */ enum EPR_DataTypeId { /** The ID for unknown types. */ e_tid_unknown = 0, /** An array of unsigned 8-bit integers, C type is uchar* */ e_tid_uchar = 1, /** An array of signed 8-bit integers, C type is char* */ e_tid_char = 2, /** An array of unsigned 16-bit integers, C type is ushort* */ e_tid_ushort = 3, /** An array of signed 16-bit integers, C type is short* */ e_tid_short = 4, /** An array of unsigned 32-bit integers, C type is uint* */ e_tid_uint = 5, /** An array of signed 32-bit integers, C type is int* */ e_tid_int = 6, /** An array of 32-bit floating point numbers, C type is float* */ e_tid_float = 7, /** An array of 64-bit floating point numbers, C type is double* */ e_tid_double = 8, /** A zero-terminated ASCII string, C type is char* */ e_tid_string = 11, /** An array of unsigned character, C type is uchar* */ e_tid_spare = 13, /** A time (MJD) structure, C type is EPR_Time */ e_tid_time = 21 }; /** * The EPR_ErrCode enumeration lists all possible error * codes for the ENVISAT product reader API. */ enum EPR_ErrCode { /* Not an error */ e_err_none = 0, /* Low level errors */ e_err_null_pointer = 1, e_err_illegal_arg = 2, e_err_illegal_state = 3, e_err_out_of_memory = 4, e_err_index_out_of_range = 5, e_err_illegal_conversion = 6, e_err_illegal_data_type = 7, /* I/O errors */ e_err_file_not_found = 101, e_err_file_access_denied = 102, e_err_file_read_error = 103, e_err_file_write_error = 104, e_err_file_open_failed = 105, e_err_file_close_failed = 106, /* API related errors */ e_err_api_not_initialized = 201, e_err_invalid_product_id = 203, e_err_invalid_record = 204, e_err_invalid_band = 205, e_err_invalid_raster = 206, e_err_invalid_dataset_name = 207, e_err_invalid_field_name = 208, e_err_invalid_record_name = 209, e_err_invalid_product_name = 210, e_err_invalid_band_name = 211, e_err_invalid_data_format = 212, e_err_invalid_value = 213, e_err_invalid_keyword_name = 214, e_err_unknown_endian_order = 216, /* Bitmask term errors */ e_err_flag_not_found = 301, /* DDDB errors */ e_err_invalid_ddbb_format = 402 }; /** * The EPR_LogLevel enumeration lists possible log levels * for the ENVISAT product reader API. */ enum EPR_LogLevel { e_log_debug = -1, e_log_info = 0, e_log_warning = 1, e_log_error = 2 }; enum EPR_SampleModel { e_smod_1OF1 = 0, e_smod_1OF2 = 1, e_smod_2OF2 = 2, e_smod_3TOI = 3, e_smod_2TOF = 4 }; enum EPR_ScalingMethod { e_smid_non = 0, e_smid_lin = 1, e_smid_log = 2 }; struct EPR_ProductId; struct EPR_DatasetId; struct EPR_BandId; struct EPR_Record; struct EPR_RecordInfo; struct EPR_Field; struct EPR_FieldInfo; struct EPR_ProductInfo; struct EPR_DSD; struct EPR_Raster; struct EPR_DatasetRef; struct EPR_Flag; struct EPR_BandId; struct EPR_ParamElem; struct EPR_Time; typedef enum EPR_DataTypeId EPR_EDataTypeId; typedef enum EPR_ErrCode EPR_EErrCode; typedef enum EPR_LogLevel EPR_ELogLevel; typedef enum EPR_SampleModel EPR_ESampleModel; typedef enum EPR_ScalingMethod EPR_EScalingMethod; typedef struct EPR_ProductId EPR_SProductId; typedef struct EPR_DatasetId EPR_SDatasetId; typedef struct EPR_BandId EPR_SBandId; typedef struct EPR_Record EPR_SRecord; typedef struct EPR_RecordInfo EPR_SRecordInfo; typedef struct EPR_Field EPR_SField; typedef struct EPR_FieldInfo EPR_SFieldInfo; typedef struct EPR_DSD EPR_SDSD; typedef struct EPR_Raster EPR_SRaster; typedef struct EPR_FlagDef EPR_SFlagDef; typedef struct EPR_ParamElem EPR_SParamElem; typedef struct EPR_Time EPR_STime; typedef struct EPR_DatasetRef EPR_SDatasetRef; typedef struct EPR_BitmaskTerm EPR_SBitmaskTerm; typedef struct EPR_FlagSet EPR_SFlagSet; typedef void (*EPR_FErrHandler)(EPR_EErrCode err_code, const char* err_message); typedef void (*EPR_FLogHandler)(EPR_ELogLevel log_level, const char* log_message); typedef int epr_boolean; typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint; typedef unsigned long ulong; typedef int EPR_Magic; #define EPR_MAGIC_PRODUCT_ID 0xCAFFEE64 #define EPR_MAGIC_DATASET_ID 0xEFEABDCA #define EPR_MAGIC_BAND_ID 0xFEC21ABD #define EPR_MAGIC_RECORD 0x7BABACAE #define EPR_MAGIC_FIELD 0xBA0BABBA #define EPR_MAGIC_RASTER 0x0BABA0EB #define EPR_MAGIC_FLAG_DEF 0xCABA11AD #define TRUE 1 #define FALSE 0 #define EPR_PRODUCT_ID_STRLEN 48 /*************************************************************************/ /******************************** STRUCTURES *****************************/ /*************************************************************************/ /** * The EPR_ProductId structure contains information * about an ENVISAT product file which has been opened with the * epr_open_product() function. * * @see epr_open_product */ struct EPR_ProductId { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The file's path including the file name. */ char* file_path; /** * The input stream as returned by the ANSI C fopen * function for the given file path. */ FILE* istream; /** * The total size in bytes of the product file. */ uint tot_size; /** * The total width of product's scene raster in pixels. */ uint scene_width; /** * The total height of product's scene raster in pixels. */ uint scene_height; /** * The product identifier string obtained from the MPH * parameter 'PRODUCT'. *

The first 10 characters of this string identify the * the product type, e.g. "MER_1P__FR" for a MERIS Level 1b * full resolution product. The rest of the string decodes * product instance properties. */ char id_string[EPR_PRODUCT_ID_STRLEN + 1]; /** * The record representing the main product header (MPH). */ EPR_SRecord* mph_record; /** * The record representing the specific product header (SPH). */ EPR_SRecord* sph_record; /** * An array containing all (!) DSDs read from the product's * specific product header (SPH). */ EPR_SPtrArray* dsd_array; /** * Cache for record infos. Contains all record infos read * from the database for this file so far. * * The reason for caching record infos on a per-file-base is that * a some record infos instances can contain file related content * such as the number of pixels in a measurecment dataset record * (MDSR). */ EPR_SPtrArray* record_info_cache; /** * A table containing dynamic field info parameters. * Dynamic field info parameters are created at runtime because * the are derived from the product file contents and can * not be staically stored in the record info database. */ EPR_SPtrArray* param_table; /** * Contains and array of all dataset IDs for the product (type EPR_SDatasetId*) */ EPR_SPtrArray* dataset_ids; /** * Contains and array of all band IDs for the product (type EPR_SBandId*) */ EPR_SPtrArray* band_ids; /** * For MERIS L1b and RR and FR to provide backward compatibility */ int meris_iodd_version; }; /** * The EPR_DatasetId structure contains information * about a dataset within an ENVISAT product file which has been opened with the * epr_open_product() API function. * * A new EPR_DatasetId instance can be obtained with the * epr_get_dataset_id() or epr_get_dataset_id_at() API functions. * * @see epr_open_product * @see epr_get_dataset_id * @see epr_get_dataset_id_at */ struct EPR_DatasetId { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The ID of the product to which this dataset belongs to. */ EPR_SProductId* product_id; /** * The name as presented to the user in a dsd selection dialog */ char* dsd_name; /** * The dataset descriptor obtained from the current product. */ const EPR_SDSD* dsd; /** * The name as presented to the user in a dataset selection dialog */ char* dataset_name; /** * The record descriptor found in the DDDB for this dataset. */ const struct RecordDescriptor* record_descriptor; /** * The record info which describes a record of this dataset. */ EPR_SRecordInfo* record_info; /** * A short description of the band's contents */ char* description; }; /** * The EPR_DSD structure contains information * about the propertier of a dataset properties and its location * within an ENVISAT product file * * @see epr_read_each_dsd */ struct EPR_DSD { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The index of this DSD (zero-based) */ int index; /** * The dataset name. */ char* ds_name; /** * The dataset type descriptor. */ char* ds_type; /** * The filename in the DDDB with the description of this dataset. */ char* filename; /** * The offset of dataset-information the product file. */ uint ds_offset; /** * The size of dataset-information in dataset product file. */ uint ds_size; /** * The number of dataset records for the given dataset name. */ uint num_dsr; /** * The size of dataset record for the given dataset name. */ uint dsr_size; }; /** * The EPR_Record structure represents a * record instance read from an ENVISAT dataset. * A record is composed of multiple fields. * * @see EPR_Field */ struct EPR_Record { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The corresponding record info for this record (a 'soft' pointer). */ EPR_SRecordInfo* info; /** * The number of fields contained in this record. * The value is always equal info->field_infos->length and is * provided here for convenience only. */ uint num_fields; /** * The record fields. An array of EPR_Field* * of length info->num_fields */ EPR_SField** fields; }; /** * Represents a field within a record. A field is composed of * one or more data elements of one of the types defined in the * in field_info. * * @see EPR_Record */ struct EPR_Field { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The corresponding field info for this field. * supplierCardinality 1 */ EPR_SFieldInfo* info; /** * The elements of this field. * * In order to use the data, this member must be casted to one * of the following array data types: * * -# unsigned char* - array of unsigned 8-bit integer elements * -# char* - array of signed 8-bit integer fields * -# unsigned short* - array of unsigned 16-bit integer elements * -# short* - array of signed 16-bit integer elements * -# unsigned int* - array of unsigned 32-bit integer elements * -# int* - array of signed 32-bit integer elements * -# float* - array of signed 32-bit floating point elements * -# double* - array of signed 64-bit floating point elements * -# EPR_STime* - array of MJD elements * * Dedicated access routine are available * The element type is given by info->data_type_id and the array length by * info->num_elems. */ void* elems; }; /** * Represents a raster in which data will be stored. * * All 'size' parameter are in PIXEL. */ struct EPR_Raster { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The data type of the band's pixel values. *
All corresponding with EPR_DataTypeId types are possible */ EPR_EDataTypeId data_type; /** * The size in byte of a single element (sample) of this raster's buffer. */ uint elem_size; /** * The width of the source . */ uint source_width; /** * The height of the source. */ uint source_height; /** * The sub-sampling for the across-track direction in pixel. */ uint source_step_x; /** * The sub-sampling for the along-track direction in pixel. */ uint source_step_y; /** * The width of the raster in pixel. *
raster_width = (source_width - 1) / source_step_x + 1 */ uint raster_width; /** * The height of the raster in pixel. *
raster_height = (source_height - 1) / source_step_y + 1 */ uint raster_height; /** * The elements of this raster. *
Its volume is raster_width * raster_height * sizeof(data_type) in bytes. */ void* buffer; }; /** * The EPR_DatasetRef structure represents the information from dddb *
with the reference to data name (in dddb), field-name and index * of the element in field-array, in which (by name) searchable values are located. * Example for the search for a scaling_offset information: * This information for the reflec_10 is described with the Scaling_Factor_GADS.22.10 * In dataset_id the searched ENVISAT product name (e.g. MER_RR__2P) is located. *
In the corresponding file (e.g. /product/MER_RR__2P.dd) the path, * how to find that information will be decribed. * In that file, in the field number 22 there is an information about the location * of the searched value in the ENVISAT product data. * * @see EPR_SDatasetId */ struct EPR_DatasetRef { EPR_SDatasetId* dataset_id; int field_index; /* -1 if not used */ int elem_index; /* -1 if not used */ }; /** * Represents a flag-field within a flag-record. * */ struct EPR_FlagDef { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The flag name. */ char* name; /** * The bit mask describing this flag */ uint bit_mask; /** * The flag description. */ char* description; }; /** * The EPR_BandId structure contains information * about a band within an ENVISAT product file which has been opened with the * epr_open_product() API function. * * A new EPR_BandId instance can be obtained with the * epr_get_band_id() API function. * * @see epr_open_product * @see epr_get_band_id */ struct EPR_BandId { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The ID of the product to which this band belongs to. */ EPR_SProductId* product_id; /** * The name as presented to the user in a band selection dialog * (also known as spectral subset) */ char* band_name; /** * The (zero-based) spectral band index. -1 if this is not a spectral band. */ int spectr_band_index; /** * The reference of the source dataset containing the raw data used to * create the band's pixel values. The external format used in the DDDB * is MDS-name.field, where field is a one-based * index (field=1 corresponds to the first field) */ EPR_SDatasetRef dataset_ref; /** * The sample model operation applied to the source dataset for getting the * correct samples from the MDS (for example MERIS L2). * Possible values are: * - * --> no operation (direct copy) * - 1OF2 --> first byte of 2-byte interleaved MDS * - 2OF2 --> second byte of 2-byte interleaved MDS * - 0123 --> combine 3-bytes interleaved to 4-byte integer */ EPR_ESampleModel sample_model; /** * The data type of the band's pixel values. Possible values are: * - * --> the datatype remains unchanged. * - uint8_t --> 8-bit unsigned integer * - uint32_t --> 32-bit unsigned integer * - Float --> 32-bit IEEE floating point */ EPR_EDataTypeId data_type; /** * The scaling method which must be applied to the raw source data in order * to get the 'real' pixel values in geo-physical units. * Possible values are: * - * --> no scaling applied * - Linear_Scale --> linear scaling applied: y = offset + scale * x * - Log_Scale --> logarithmic scaling applied: y = log10(offset + scale * x) */ EPR_EScalingMethod scaling_method; /** * The scaling offset. Possible values are:
* - * --> no offset provided (implies scaling_method=*) * - const --> a floating point constant * - GADS.field[.field2] --> value is provided in * global annotation dataset with name GADS in field * field. Optionally a second element index * for multiple-element fields can be given too */ float scaling_offset; /** * The scaling factor. * Possible values are: * - * --> no factor provided (implies scaling_method=*) * - const --> a floating point constant * - GADS.field[.field2] --> value is provided in global annotation dataset with name * GADS in field field. Optionally * a second element index for multiple-element fields can be * given too */ float scaling_factor; /** * A bit-mask expression used to filter valid pixels. All others are set to zero. */ char* bm_expr; /** * The flag coding is a list of EPR_SFlag instances. It determines each of the flags * used in this band (= flags dataset). * Each flag has a name, a bit-index and a description. */ EPR_SPtrArray* flag_coding; /** * The geophysical unit for the band's pixel values */ char* unit; /** * A short description of the band's contents */ char* description; /** * If true (=1) lines will be mirrored (flipped) after read into a raster * in order to ensure a pixel ordering in raster X direction from * WEST to EAST. */ epr_boolean lines_mirrored; }; /** * Represents a binary time value field in ENVISAT records. * *

Refer to ENVISAT documentation for the exact definition of * this data type. */ struct EPR_Time { int days; uint seconds; uint microseconds; }; /*************************************************************************/ /********************************* FUNCTIONS *****************************/ /*************************************************************************/ /* * ============================ (1) Initialisation ========================== */ /** * @defgroup INIT API Initialisation * @{ */ /** * Initializes the ENVISAT product reader API. * * * @param log_level the log level. All logging messages with a log level lower * than the given one, will be supressed * @param log_handler the log handler function pointer which * will be used for logging, can be NULL, * if logging shall be disabled * @param err_handler the new error handler (function pointer), * can be NULL, if errors shall not be reported * @return zero for success, an error code otherwise * * @author Norman Fomferra */ int epr_init_api(EPR_ELogLevel log_level, EPR_FLogHandler log_handler, EPR_FErrHandler err_handler); /** * Closes the ENVISAT product reader API by releasing all * resources allocated by the API. * * @author Norman Fomferra */ void epr_close_api(); /** @} */ /* * ============================ (2) Logging ============================ */ /** * @defgroup LOGGING Logging * @{ */ /** * Sets the log level for the ENVISAT API. All logging * messages with a log level lower than the given one, will * be supressed, thus the log handler will not be called * for such messages. * * @param log_level the new log level. All logging messages with a log level lower * than the given one, will be supressed * @return zero for success, an error code otherwise */ int epr_set_log_level(EPR_ELogLevel log_level); /** * Sets the log handler for the ENVISAT API. * * @param log_handler the log handler function pointer which * will be used for logging, can be NULL, if logging shall * be disabled * * @see epr_log_message */ void epr_set_log_handler(EPR_FLogHandler log_handler); /** * A default implementation for a logging function to be passed into * the epr_init() function. The function writes to * stdout, the format is: log_level date time log_message. * * @param log_level the log level * @param log_message the log message */ void epr_log_message(EPR_ELogLevel log_level, const char* log_message); /** @} */ /* * ========================= (3) Error Handling ========================== */ /** * @defgroup ERROR Error Handling * @{ */ /** * Sets the error handler for the ENVISAT API. * * @param err_handler the new error handler (function pointer), * can be NULL, if errors shall not be reported */ void epr_set_err_handler(EPR_FErrHandler err_handler); /** * Gets the error code of the error that occured during * the last API function call. * * @return the error code, e_err_none or zero if no error occured */ EPR_EErrCode epr_get_last_err_code(); /** * Gets the error message of the error that occured during * the last API function call. * * @return the error message, NULL if no error occured */ const char* epr_get_last_err_message(); /** * Clears the last error. After calling this function, calling * epr_get_last_err_code returns e_err_none or zero and * epr_get_last_err_message returns NULL. */ void epr_clear_err(); /** @} */ /* * ========================== (4) Input / Output ============================ */ /** * @defgroup IO Input / Output * @{ */ /* * ======================= (4.1) Product File Access ========================== */ /** * @defgroup ProductIO Product IO * @{ */ /** * Opens the ENVISAT product file with the given file path, *
reads MPH, SPH and all DSDs,
organized the table with * parameter of line length and tie points number; *
returns a file identifier for the product. * *

The ENVISAT product reader API must be initialized before. * * @param product_file_path the path to the ENVISAT product file * @return the product identifier, or NULL if the file * could not be opened. epr_get_error_code() should * be called in this case in order to obtain the error code. */ EPR_SProductId* epr_open_product(const char* product_file_path); /** * Closes the ENVISAT product file determined by the given product identifier. * * @param product_id the product identifier, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise */ int epr_close_product(EPR_SProductId* product_id); /** @} */ /** @} */ /* * ================= (4.2) Writing to a file or standard output ================= */ /** * @ingroup IO * @defgroup WtFoSO Writing to a file or standard output * This group of functions is for writing an object to a file * or standard output. * * An object can be: * - record * - field * - field element * * If FILE* istream is given, the ASCII file will be outputed, * else printed to standard output device. * *

In case record and/or field: * @param record the record, must not be NULL * @param field the field, must not be NULL * *

In case field element: * @param record the record, must not be NULL * @param field_index the index of field in the given record * @param element_index the index of element in the given field * * @param ostream the identifier of the output file. */ /** @{ */ void epr_print_record(const EPR_SRecord* record, FILE* ostream); void epr_print_field(const EPR_SField* field, FILE* ostream); void epr_print_element(const EPR_SRecord* record, uint field_index, uint element_index, FILE* ostream); void epr_dump_record(const EPR_SRecord* record); void epr_dump_field(const EPR_SField* field); void epr_dump_element(const EPR_SRecord* record, uint field_index, uint element_index); /** @} */ /* * ======================= (5) Basic Data Access ========================= */ /** * @defgroup DA Basic Data Access * @{ */ /** * Gets the product's scene width in pixels. * * @param product_id the product identifier, must not be NULL * @return the product's total scene width in pixels, or 0 * if an error occured. */ uint epr_get_scene_width(const EPR_SProductId* product_id); /** * Gets the product's scene height in pixels. * * @param product_id the product identifier, must not be NULL * @return the product's total scene height in pixels, or 0 * if an error occured. */ uint epr_get_scene_height(const EPR_SProductId* product_id); /** @} */ /* * ============================ (5.1) Dataset ============================== */ /** * @ingroup DA * @defgroup DATASET Dataset Access * @{ */ /** * Gets the number off all datasets contained in a product. * * @param product_id the product identifier, must not be NULL * @return the number off all dataset */ uint epr_get_num_datasets(EPR_SProductId* product_id); /** * Gets the dataset_id at the specified position within the product. * * @param product_id the product identifier, must not be NULL * @param index the index identifying the position of the dataset, starting with 0, * must not be negative * @return the requested dataset_id */ EPR_SDatasetId* epr_get_dataset_id_at(EPR_SProductId* product_id, uint index); /** * Gets the dataset_id coresponding to the specified dataset name. * * @param product_id the product identifier, must not be NULL * @param dataset_name the dataset name, must not be NULL * @return the requested dataset_id */ EPR_SDatasetId* epr_get_dataset_id(EPR_SProductId* product_id, const char* dataset_name); /** * Gets the name of the dataset for the given dataset ID. * * @param dataset_id the dataset identifier, must not be NULL * @return the name of the dataset. */ const char* epr_get_dataset_name(EPR_SDatasetId* dataset_id); /** * Gets the name of the dsd for the given dataset ID. * * @param dataset_id the dataset identifier, must not be NULL * @return the name of the dsd. */ const char* epr_get_dsd_name(const EPR_SDatasetId* dataset_id); /** * Gets the MPH record from the given product_id. * * @param product_id the product identifier, must not be NULL * @return the MPH record or NULL if an error occured. */ EPR_SRecord* epr_get_mph(const EPR_SProductId* product_id); /** * Gets the SPH record from the given product_id. * * @param product_id the product identifier, must not be NULL * @return the SPH record or NULL if an error occured. */ EPR_SRecord* epr_get_sph(const EPR_SProductId* product_id); /** * Gets the dataset descriptor (DSD) for the dataset specified by dataset_id. * * @param dataset_id the dataset identifier, must not be NULL * @return the pointer at the dsd or NULL if an error occured. */ const EPR_SDSD* epr_get_dsd(const EPR_SDatasetId* dataset_id); /** * Gets the number of records of the dataset specified by dataset_id. * * @param dataset_id the dataset identifier, must not be NULL * @return the number of records or 0 if an error occured. */ uint epr_get_num_records(const EPR_SDatasetId* dataset_id); uint epr_get_num_dsds(const EPR_SProductId* product_id); EPR_SDSD* epr_get_dsd_at(const EPR_SProductId* product_id, uint dsd_index); /** @} */ /* * ================================= (5.2) Records ============================ */ /** * @ingroup DA * @defgroup REC Record Access * @{ */ /** * Creates a new, empty record with a structure compatible with the dataset specified * by dataset_id. Such a record is typically used in subsequent calls to epr_read_record. * * @param dataset_id the dataset identifier, must not be NULL * @return the new record instance * or NULL if an error occured. */ EPR_SRecord* epr_create_record(EPR_SDatasetId* dataset_id); /** * Reads a record of a dataset specified by dataset_id. *

* The record is identified through the given dataset identifier and the given * zero-based record index. In order to reduce memory reallocation, a * record (pre-) created by the function epr_create_record * can be passed to this function. Data is then read into this given record. * If no record (NULL) is given, the function initiates a new * one. In both cases, the record in which the data is read into will be * returned. * * @param dataset_id the dataset identifier, must not be NULL * @param record_index the zero-based record index * @param record a pre-created record to reduce memory reallocation, * can be NULL to let the function allocate a new record * @return the record in which the data has been read into * or NULL if an error occured. */ EPR_SRecord* epr_read_record(EPR_SDatasetId* dataset_id, uint record_index, EPR_SRecord* record); /** * Frees the memory allocated through the given record. * *

After calling this function the given record pointer becomes * invalid and should not be used anymore. * */ void epr_free_record(EPR_SRecord* record); /** @} */ /* * =========================== (5.3) Field Access ============================= */ /** * @ingroup DA * @defgroup FA Field Access * @{ */ /** * Gets a field from the given record. * *

The field is here identified through the given name. *
It contains the field info and all corresponding values. * * @param record the record identifier, must not be NULL * @param field_name the the name of required field, must not be NULL. * @return the field or NULL if an error occured. */ const EPR_SField* epr_get_field(const EPR_SRecord* record, const char* field_name); /** * Gets the number of fields contained in the given record. * * @param record the record to be analysed, must not be NULL * @return the fields number or 0 if an error occured. */ uint epr_get_num_fields(const EPR_SRecord* record); /** * Gets a field at the specified position within the record. * * @param record the record from the field shall be returned, * must not be NULL * @param field_index the zero-based index (position within record) of the field * @return the field or NULL if an error occured. */ const EPR_SField* epr_get_field_at(const EPR_SRecord* record, uint field_index); /** * Gets the unit of the field. * * @param field the field from which the unit shall be returned, must not be NULL * @return the field unit or NULL if an error occured. */ const char* epr_get_field_unit(const EPR_SField* field); /** * Gets the description of the field. * * @param field field from which the description shall be returned, must not be NULL * * @return the field description or NULL if an error occured. */ const char* epr_get_field_description(const EPR_SField* field); /** * Gets the number of elements of the field. * * @param field field to be analysed, must not be NULL * * @return the number of elements of the field or 0 if an error occured. */ uint epr_get_field_num_elems(const EPR_SField* field); /** * Gets the name of the field. * * @param field field to be analysed, must not be NULL * * @return the field name or NULL if an error occured. */ const char* epr_get_field_name(const EPR_SField* field); /** * Gets the type of the field. * * @param field field to be analysed, must not be NULL * * @return the field type or 0 if an error occured. */ EPR_EDataTypeId epr_get_field_type(const EPR_SField* field); /** @} */ /* * ========================= (5.4) Single Element Access ========================= */ /** * @ingroup DA * @defgroup FSEA Field Single Element Access * This group of functions is for getting the elements of a field as a typed value. *
Typed value means that the returned variable is of a certain variable type, * e.g. such as short or float. *
The type is located in the field info. See epr_get_field_type. *
One field must have one type only. * * @param field the field, must not be NULL * @param elem_index the zero-based index of element to be returned, must not be negative. * * @return the typed value from given field */ /*@{*/ char epr_get_field_elem_as_char(const EPR_SField* field, uint elem_index); uchar epr_get_field_elem_as_uchar(const EPR_SField* field, uint elem_index); short epr_get_field_elem_as_short(const EPR_SField* field, uint elem_index); ushort epr_get_field_elem_as_ushort(const EPR_SField* field, uint elem_index); int epr_get_field_elem_as_int(const EPR_SField* field, uint elem_index); uint epr_get_field_elem_as_uint(const EPR_SField* field, uint elem_index); float epr_get_field_elem_as_float(const EPR_SField* field, uint elem_index); double epr_get_field_elem_as_double(const EPR_SField* field, uint elem_index); const EPR_STime* epr_get_field_elem_as_mjd(const EPR_SField* field); const char* epr_get_field_elem_as_str(const EPR_SField* field); /*@}*/ /* * =========================== (5.5) Array Element Access ============================= */ /** * @ingroup DA * @defgroup FAEA Field Array Element Access * This group of functions is for getting an array of field elements * of a certain data type. *

If the given field is not of the expected type, the functions * return NULL. * * @param field the field, must not be NULL * @return the data array of the expected type or NULL * if the field is of a different type */ /*@{*/ const char* epr_get_field_elems_char(const EPR_SField* field); const uchar* epr_get_field_elems_uchar(const EPR_SField* field); const short* epr_get_field_elems_short(const EPR_SField* field); const ushort* epr_get_field_elems_ushort(const EPR_SField* field); const int* epr_get_field_elems_int(const EPR_SField* field); const uint* epr_get_field_elems_uint(const EPR_SField* field); const float* epr_get_field_elems_float(const EPR_SField* field); const double* epr_get_field_elems_double(const EPR_SField* field); /*@}*/ /** * @ingroup DA * @defgroup CFE Copy Field Elems * This group of functions is for copying the data of the given field into the given * buffer of elements by selected type. The actual number of elements copied is the * minimum of the given number of elements (the buffer's size) and the actual number * of elements contained * in the field. *

If the actual field data type is not selected type, the function automatically * performs the conversion. * * @param field the field from which to copy the elements * @param buffer the buffer in which to copy the data * @param num_elems the number of elements in the given buffer * @return the actual number of elements copied */ /*@{*/ uint epr_copy_field_elems_as_ints(const EPR_SField* field, int* buffer, uint num_elems); uint epr_copy_field_elems_as_uints(const EPR_SField* field, uint* buffer, uint num_elems); uint epr_copy_field_elems_as_floats(const EPR_SField* field, float* buffer, uint num_elems); uint epr_copy_field_elems_as_doubles(const EPR_SField* field, double* buffer, uint num_elems); /*@}*/ /* * ======================== (6) Geophysical Data Access ========================= */ /** * @defgroup GDA Geopysical Data Access * @{ */ /** @} */ /* * ================================== (6.1) Raster =============================== */ /** * @ingroup GDA * @defgroup RASTER Raster Data Access * @{ */ /** * Creates a raster which is compatible with the data type contained in the band * identified by band_id. The created raster is used to read the data in it * (see epr_read_band_raster). *

* The raster is defined on the grid of the product, from which the data are read. Spatial * subsets and undersampling are possible) through the parameter of the function. *

* The concept of defining the raster is such: A certain portion of the ENVISAT product * will be read into the raster. This is called the source. The complete ENVISAT product can be * much greater than the source. One can move the raster over the complete ENVISAT product and * read in turn different parts - always of the size of the source - of it into the raster. * The source is specified by the parameter source_height and source_width. *

* A typical example is a processing in blocks. Lets say, a block * has 64x32 pixel. Then, my source has a width of 64 pixel and a height of 32 pixel. Another * example is a processing of complete image lines. Then, my source has a widths of the complete * product (for example 1121 for a MERIS RR product), and a height of 1). One can loop over all blocks * read into the raster and process it. *

* In addition, it is possible to defined a subsampling step for a raster. This means, that the * source is not read 1:1 into the raster, but that only every 2nd or 3rd pixel is read. This step * can be set differently for the across track (source_step_x) and along track (source_step_y) directions. * * @param band_id the band identifier. The raster will be compatible with the data type * of that band; must not be NULL * @param source_width the width (across track dimension) of the source to be read into the raster. See text above. * @param source_height the height (along track dimension) of the source to be read into the raster. See text above. * @param source_step_x the subsampling step across track of the source when reading into the raster. See text above. * @param source_step_y the subsampling step along track of the source when reading into the raster. See text above. * * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_compatible_raster(EPR_SBandId* band_id, uint source_width, uint source_height, uint source_step_x, uint source_step_y); /** * Creates a raster of the specified data type. This function can be used to create any type of raster, * e.g. for later use as a bit-mask. * * @param data_type the type of the data to stored in the raster, must not be NULL * @param source_width the width (across track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_height the height (along track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_step_x the subsampling step across track of the source when reading into the raster. See description of epr_create_compatible_raster. * @param source_step_y the subsampling step along track of the source when reading into the raster. See description of epr_create_compatible_raster. * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_raster(EPR_EDataTypeId data_type, uint source_width, uint source_height, uint source_step_x, uint source_step_y); /** * Creates a raster to be used for reading bitmasks. The raster returned always is of type byte. * * @param source_width the width (across track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_height the height (along track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_step_x the subsampling step across track of the source when reading into the raster. See description of epr_create_compatible_raster. * @param source_step_y the subsampling step along track of the source when reading into the raster. See description of epr_create_compatible_raster. * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_bitmask_raster(uint source_width, uint source_height, uint source_step_x, uint source_step_y); /** * Reads (geo-)physical values of the given band of the specified source-region. *

The source-region is a defined part of the whole ENVISAT product image, which shall be read into * a raster. In this routine the co-ordinates are specified, where the source-region to be read starts. * The dimension of the region and the sub-sampling are attributes of the raster into which the data are * read. * * @param band_id the identified of the band to be read into the raster. * @param offset_x across-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region * @param offset_y along-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region * @param raster the identifier to given raster information and raster buffer * * @return zero for success, and error code otherwise * * @see epr_create_compatible_raster * @see epr_create_rater */ int epr_read_band_raster(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster); /** * @todo 1 se/nf - doku */ uint epr_get_raster_elem_size(const EPR_SRaster* raster); /** * @todo 1 se/nf - doku */ void* epr_get_raster_elem_addr(const EPR_SRaster* raster, uint offset); /** * @todo 1 se/nf - doku */ void* epr_get_raster_pixel_addr(const EPR_SRaster* raster, uint x, uint y); /** * @todo 1 se/nf - doku */ void* epr_get_raster_line_addr(const EPR_SRaster* raster, uint y); /** * Gets the raster's scene width in pixels. * * @param raster the raster identifier, must not be NULL * @return the raster's total scene width in pixels, or 0 * if an error occured. */ uint epr_get_raster_width(EPR_SRaster* raster); /** * Gets the raster's scene height in pixels. * * @param raster the product identifier, must not be NULL * @return the raster's total scene height in pixels, or 0 * if an error occured. */ uint epr_get_raster_height(EPR_SRaster* raster); /** * Gets the number of all bands contained in a product. * * @param product_id the source product ID, must not be NULL * @return the number off all bands */ uint epr_get_num_bands(EPR_SProductId* product_id); /** * Gets the band ID at the specified position within the product. * * @param product_id the source product ID, must not be NULL * @param index the index identifying the position of the band, starting with 0, * must not be negative * @return the requested band ID, or NULL if not found */ EPR_SBandId* epr_get_band_id_at(EPR_SProductId* product_id, uint index); /** * Gets the band ID corresponding to the specified name. * * @param product_id the source product ID, must not be NULL * @param band_name the name of the band, must not be NULL * @return the requested band ID, or NULL if not found */ EPR_SBandId* epr_get_band_id(EPR_SProductId* product_id, const char* band_name); /** * Gets the name of the band for the given band ID. * * @param band_id the band identifier, must not be NULL * @return the name of the band. */ const char* epr_get_band_name(EPR_SBandId* band_id); /** * Release the memory allocated through a raster. * * @param raster the raster to be released. */ void epr_free_raster(EPR_SRaster* raster); /** @} */ /* * ============================ (6.2) Single Pixel Access ======================== */ /** * @ingroup GDA * @defgroup SPA Single Pixel Access * @{ */ /** * This group of functions is for getting the values of the elements of a raster * (i.e. pixel) in a type-safe way.
* * @param raster the raster which contains the pixel, must not be NULL * @param x the (zero-based) X co-ordinate of the pixel * @param y the (zero-based) Y co-ordinate of the pixel * * @return the typed value at the given co-ordinate. */ uint epr_get_pixel_as_uint(const EPR_SRaster* raster, int x, int y); int epr_get_pixel_as_int(const EPR_SRaster* raster, int x, int y); float epr_get_pixel_as_float(const EPR_SRaster* raster, int x, int y); double epr_get_pixel_as_double(const EPR_SRaster* raster, int x, int y); /*@}*/ /* * ================================= (7) Bitmasks ========================== */ /** * @defgroup BM Bitmask * @{ */ /** * Calculates a bit-mask, composed of flags of the given product and combined as described in the * given bit-mask expression, for the a certain dimension and sub-sampling as defined in the * given raster. *

* * @param product_id Identifier of the ENVISAT product for which the bit-mask shall be created. * This is used by the function to retreive the needed flags. * @param bm_expr A string holding the logical expression for the defintion of the bit-mask. * In a bit-mask expression, any number of the flag-names (found in the DDDB) can * be composed with "(", ")", "NOT", "AND", "OR". Valid bit-mask expression are for example:
* "flags.LAND OR flags.CLOUD" or "NOT flags.WATER AND flags.TURBID_S". * @param offset_x across-track co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region * @param offset_y along-track co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region * @param raster the raster for the bit-mask. The data type of the raster must be either e_tid_uchar or e_tid_char. * * @return zero for success, an error code otherwise * * @see create_band_raster */ int epr_read_bitmask_raster(EPR_SProductId* product_id, const char* bm_expr, int offset_x, int offset_y, EPR_SRaster* raster); /** @} */ /* * ================================= (8) Utility functions ========================== */ /** * @defgroup UTILS Utility Functions * @{ */ /** * Gets the size in bytes for an element of the given data type. */ uint epr_get_data_type_size(EPR_EDataTypeId data_type_id); /** * Gets the 'C' data type string for the given data type. */ const char* epr_data_type_id_to_str(EPR_EDataTypeId data_type_id); /** @} */ #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_API_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_param.c000644 015705 000000 00000015367 13505462014 027107 0ustar00sandwellwheel000000 000000 /* * $Id: epr_param.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" /** * Creates a new element (pair 'name-value') for the parameter table. * * @param param_name the name of the parameter, * @param param_value the value of this parameter, * @return the pointer at this element * or NULL if an error occured. */ EPR_SParamElem* epr_create_param_elem(const char* param_name, int param_value) { EPR_SParamElem* param_elem = NULL; /* LINE_LENGTH=+02241 -1 / LINES_PER_TIE_PT=+064 +1 = */ param_elem = (EPR_SParamElem*) calloc(1, sizeof (EPR_SParamElem)); if (param_elem == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_field_info: out of memory"); return NULL; } param_elem->param_name = epr_clone_string(param_name); param_elem->param_value = param_value; return param_elem; } EPR_SPtrArray* epr_create_param_table() { EPR_SPtrArray* param_table = NULL; param_table = epr_create_ptr_array(16); return param_table; } /** * Frees the memory allocated by the given param_table. * *

After calling this function the give record_info pointer gets * invalid and should not be used anymore. * * @param param_table the table to be released, if NULL * the function immediately returns */ void epr_free_param_table(EPR_SPtrArray* param_table) { EPR_SParamElem* param_elem = NULL; int param_index = 0; if (param_table == NULL) return; for (param_index = 0; param_index < (int)param_table->length; param_index++) { param_elem = (EPR_SParamElem*)epr_get_ptr_array_elem_at(param_table, param_index); epr_free_param_elem(param_elem); } epr_free_ptr_array(param_table); } /** * Frees the memory allocated by the given param_elem. * *

After calling this function the give record_info pointer gets * invalid and should not be used anymore. * * @param param_table the table to be released, if NULL * the function immediately returns */ void epr_free_param_elem(EPR_SParamElem* param_elem) { if (param_elem == NULL) return; epr_free_string(param_elem->param_name); param_elem->param_name = NULL; param_elem->param_value = 0; free(param_elem); return; } int epr_set_dyn_dddb_params(EPR_SProductId* product_id) { const EPR_SField* field; const EPR_SField* product_field; char* tmp; EPR_SParamElem* param_elem = NULL; uint line_length = 0; uint num_tie_points_across = 0; uint ntpa = 0; product_field = epr_get_field(product_id->mph_record, "PRODUCT"); tmp = epr_sub_string((char*)product_field->elems, 0, 3); /* MERIS */ if (strcmp(EPR_ENVISAT_PRODUCT_MERIS, tmp) == 0) { if (product_id->sph_record == NULL) { product_id->sph_record = epr_read_sph(product_id); if (product_id->sph_record == NULL) { epr_set_err(e_err_file_read_error, "epr_set_param: wrong SPH"); epr_free_string(tmp); return 0; } } field = epr_get_field(product_id->sph_record, "LINE_LENGTH"); if (field == NULL) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: unable to read LINE_LENGTH"); epr_free_string(tmp); return 0; } line_length = ((uint*) field->elems)[0]; if (line_length == 0) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: LINE_LENGTH must be > 0"); epr_free_string(tmp); return 0; } field = epr_get_field(product_id->sph_record, "LINES_PER_TIE_PT"); if (field == NULL) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: unable to read LINES_PER_TIE_PT"); epr_free_string(tmp); return 0; } num_tie_points_across = ((uint*) field->elems)[0]; if (num_tie_points_across == 0) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: LINES_PER_TIE_PT must be > 0"); epr_free_string(tmp); return 0; } param_elem = epr_create_param_elem("sceneRasterWidth", line_length); epr_add_ptr_array_elem(product_id->param_table, param_elem); ntpa = ((line_length - 1) / num_tie_points_across) + 1; param_elem = epr_create_param_elem("tiePointGridWidth", ntpa); epr_add_ptr_array_elem(product_id->param_table, param_elem); } /* AATSR does NOT have any dynamic parameters in DDDB */ /* ASAR */ else if ((strcmp(EPR_ENVISAT_PRODUCT_ASAR, epr_sub_string((char*)product_field->elems, 0, 3)) == 0) || (strcmp(EPR_ENVISAT_PRODUCT_SAR, epr_sub_string((char*)product_field->elems, 0, 3)) == 0)) { field = epr_get_field(product_id->sph_record, "LINE_LENGTH"); if (field == NULL) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: unable to read LINE_LENGTH"); epr_free_string(tmp); return 0; } line_length = ((uint*) field->elems)[0]; if (line_length == 0) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: LINE_LENGTH must be > 0"); epr_free_string(tmp); return 0; } param_elem = epr_create_param_elem("sceneRasterWidth", line_length); epr_add_ptr_array_elem(product_id->param_table, param_elem); param_elem = epr_create_param_elem("tiePointGridWidth", EPR_ASAR_NUM_PER_POINT_ACROSS_LOCAT); epr_add_ptr_array_elem(product_id->param_table, param_elem); } epr_free_string(tmp); return 1; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dsd.c000644 015705 000000 00000052416 13505462014 026555 0ustar00sandwellwheel000000 000000 /* * $Id: epr_dsd.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" /** * Opens dsd for a dataset description, * obtained from an ENVISAT product file. * * @param dsd_index the number of dsd (zero-based), emrty dsd inclusive * * @return the the pointer at the dsd information. */ EPR_SDSD* epr_create_dsd(int dsd_index) { EPR_SDSD* dsd; dsd = (EPR_SDSD*) calloc(1, sizeof (EPR_SDSD)); if (dsd == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_dsd: out of memory"); return NULL; } dsd->index = dsd_index; return dsd; } uint epr_get_num_datasets(EPR_SProductId* product_id) { epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_num_datasets: product_id must not be NULL"); return (uint)-1; } return product_id->dataset_ids->length; } EPR_SDatasetId* epr_get_dataset_id_at(EPR_SProductId* product_id, uint index) { EPR_SDatasetId* dataset_id = NULL; epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_dataset_id_at: product_id must not be NULL"); return NULL; } if (index >= product_id->dataset_ids->length){ epr_set_err(e_err_index_out_of_range, "epr_get_dataset_id_at: dataset index out of range"); return NULL; } dataset_id = (EPR_SDatasetId*)epr_get_ptr_array_elem_at(product_id->dataset_ids, index); return dataset_id; } EPR_SDatasetId* epr_get_dataset_id(EPR_SProductId* product_id, const char* dataset_name) { EPR_SDatasetId* dataset_id = NULL; int datasets_num, i; epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_dataset_id: product_id must not be NULL"); return NULL; } if (dataset_name == NULL) { epr_set_err(e_err_null_pointer, "epr_get_dataset_id: dataset_name must not be NULL"); return NULL; } datasets_num = epr_get_num_datasets(product_id); for (i = 0; i < datasets_num; i ++) { dataset_id = epr_get_dataset_id_at(product_id, i); if (epr_equal_names(dataset_name, epr_get_dataset_name(dataset_id))) return dataset_id; } epr_set_err(e_err_invalid_band_name, "epr_get_dataset_id: dataset_id not found"); return NULL; } int epr_detect_meris_iodd_version(EPR_SProductId* product_id) { EPR_SDSD** elems; int size = 0; int rec_size = 0; int i, ioddFormat = 7; char* name; /* reflect L1b product format change from IODD5 to IODD6 */ if (strncmp("MER_RR__1P", product_id->id_string, 10) == 0 || strncmp("MER_FR__1P", product_id->id_string, 10) == 0) { elems = (EPR_SDSD**)product_id->dsd_array->elems; size = product_id->dsd_array->length; for (i=0; i< size;i++){ name = elems[i]->ds_name; if (strcmp("Flags MDS(16)", name) == 0) { rec_size = elems[i]->dsr_size; if (rec_size == 2255 || rec_size == 4495) { ioddFormat = 5; } break; } } } /* reflect L2 product format change from IODD6 to IODD7 */ else if (strncmp("MER_RR__2P", product_id->id_string, 10) == 0 || strncmp("MER_FR__2P", product_id->id_string, 10) == 0) { elems = (EPR_SDSD**)product_id->dsd_array->elems; size = product_id->dsd_array->length; for (i=0; ids_name; if (strcmp("Epsilon, OPT - MDS(19)", name) == 0) { ioddFormat = 6; break; } } } return ioddFormat; } /** * Release the memory allocated through a dataset ID. * * @param dsd the dataset description identifier, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise */ void epr_free_dsd(EPR_SDSD* dsd) { if (dsd == NULL) return; epr_free_string(dsd->ds_name); dsd->ds_name = NULL; epr_free_string(dsd->ds_type); dsd->ds_type = NULL; epr_free_string(dsd->filename); dsd->filename = NULL; dsd->index = 0; dsd->ds_offset = 0; dsd->ds_size = 0; dsd->num_dsr = 0; dsd->dsr_size = 0; free(dsd); } #define EPR_LENGTH_DS_NAME_IDENTIFIER 9 #define EPR_LENGTH_DS_TYPE_IDENTIFIER 8 #define EPR_LENGTH_FILENAME_IDENTIFIER 10 #define EPR_LENGTH_DS_OFFSEN_IDENTIFIER 11 #define EPR_LENGTH_DS_SIZE_IDENTIFIER 9 #define EPR_LENGTH_NUM_DSR_IDENTIFIER 9 #define EPR_LENGTH_DSR_SIZE_IDENTIFIER 10 #define EPR_LENGTH_DS_NAME_FIELD 39 #define EPR_LENGTH_DS_TYPE_FIELD 10 #define EPR_LENGTH_DS_FILENAME_FIELD 74 #define EPR_LENGTH_DS_OFFSEN_FIELD 39 #define EPR_LENGTH_DS_SIZE_FIELD 37 #define EPR_LENGTH_NUM_DSR_FIELD 20 #define EPR_LENGTH_DSR_SIZE_FIELD 28 #define EPR_LENGTH_EMPTY_FIELD 33 /** * Reads a dataset description from an ENVISAT product file. * * @param envisat_source_file the handle of the given ENVISAT product file, * must not be NULL * @param pos number of the dataset description in ENVISAT product file, * @return a new dataset description or NULL if an error occured. */ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos) { uint l; uint l_limit; char code_block[EPR_LINE_MAX_LENGTH]; EPR_SDSD* dsd; int ch = '"'; char* tmp; if (envisat_source_file == NULL) { epr_set_err(e_err_file_access_denied, "epr_read_each_dsd: the product file handle must not be NULL"); return NULL; } dsd = (EPR_SDSD*) calloc(1, sizeof (EPR_SDSD)); if (dsd == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_each_dsd: out of memory"); return NULL; } if (* pos == 0) { l_limit = 9999; } else l_limit = 0; for (l = 0; l <= l_limit; l++) { fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DS_NAME=\"", EPR_LENGTH_DS_NAME_IDENTIFIER) == 0) { /* DS_NAME to be searched for */ if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_NAME_FIELD)) || ((uint)(strrchr(code_block, ch) - code_block) != (uint)(strlen(code_block) - 2))) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset name format"); epr_free_dsd(dsd); return NULL; } dsd->ds_name = epr_sub_string(code_block, EPR_LENGTH_DS_NAME_IDENTIFIER, strlen(code_block) - EPR_LENGTH_DS_NAME_IDENTIFIER - 2); if (dsd->ds_name == NULL) { epr_set_err(e_err_invalid_value, "epr_read_each_dsd: invalid DS_NAME value"); epr_free_dsd(dsd); return NULL; } /* DS_TYPE to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DS_TYPE=", EPR_LENGTH_DS_TYPE_IDENTIFIER) == 0) { dsd->ds_type = epr_sub_string(code_block, EPR_LENGTH_DS_TYPE_IDENTIFIER, strlen(code_block) - EPR_LENGTH_DS_TYPE_IDENTIFIER - 1); if (dsd->ds_type == NULL) { epr_set_err(e_err_invalid_value, "epr_read_each_dsd: invalid DS_TYPE value"); epr_free_dsd(dsd); return NULL; } } /* FILENAME to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "FILENAME=\"", EPR_LENGTH_FILENAME_IDENTIFIER) == 0) { if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_FILENAME_FIELD)) || ((uint)(strrchr(code_block, ch) - code_block) != (uint)(strlen(code_block) - 2))) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset filename format"); epr_free_dsd(dsd); return NULL; } dsd->filename = epr_sub_string(code_block, EPR_LENGTH_FILENAME_IDENTIFIER, strlen(code_block) - EPR_LENGTH_FILENAME_IDENTIFIER - 1); if (dsd->ds_name == NULL) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid file name"); epr_free_dsd(dsd); return NULL; } } /* DS_OFFSET to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DS_OFFSET=+", EPR_LENGTH_DS_OFFSEN_IDENTIFIER) == 0) { if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_OFFSEN_FIELD)) || (strncmp(code_block + strlen(code_block) - strlen("") - 1, "", strlen("")) != 0)) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset filename format"); epr_free_dsd(dsd); return NULL; } tmp = epr_sub_string(code_block, EPR_LENGTH_DS_OFFSEN_IDENTIFIER, strlen(code_block) - strlen("") - EPR_LENGTH_DS_OFFSEN_IDENTIFIER - 1); dsd->ds_offset = (uint)epr_str_to_number(tmp); epr_free_string(tmp); if (dsd->ds_offset == -1) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid OFFSET value"); epr_free_dsd(dsd); return NULL; } } /* DS_SIZE to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DS_SIZE=+", EPR_LENGTH_DS_SIZE_IDENTIFIER) == 0) { if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_SIZE_FIELD)) || (strncmp(code_block + strlen(code_block) - strlen("") - 1, "", strlen("")) != 0)) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset filename format"); epr_free_dsd(dsd); return NULL; } tmp = epr_sub_string(code_block, EPR_LENGTH_DS_SIZE_IDENTIFIER, strlen(code_block) - strlen("") - EPR_LENGTH_DS_SIZE_IDENTIFIER - 1); dsd->ds_size = (uint)epr_str_to_number(tmp); epr_free_string(tmp); if (dsd->ds_size == -1) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid OFFSET value"); epr_free_dsd(dsd); return NULL; } } /* NUM_DSR to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "NUM_DSR=+", EPR_LENGTH_NUM_DSR_IDENTIFIER) == 0) { if ((uint)strlen(code_block) != (uint)(EPR_LENGTH_NUM_DSR_FIELD)) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset record number format"); epr_free_dsd(dsd); return NULL; } tmp = epr_sub_string(code_block, EPR_LENGTH_NUM_DSR_IDENTIFIER, strlen(code_block) - EPR_LENGTH_NUM_DSR_IDENTIFIER - 1); dsd->num_dsr = (uint)epr_str_to_number(tmp); epr_free_string(tmp); if (dsd->num_dsr == -1) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dsr number value"); epr_free_dsd(dsd); return NULL; } } /* DSR_SIZE to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DSR_SIZE=+", EPR_LENGTH_DSR_SIZE_IDENTIFIER) == 0) { if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DSR_SIZE_FIELD)) || (strncmp(code_block + strlen(code_block) - strlen("") - 1, "", strlen("")) != 0)) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset record size format"); epr_free_dsd(dsd); return NULL; } tmp = epr_sub_string(code_block, EPR_LENGTH_DSR_SIZE_IDENTIFIER, strlen(code_block) - strlen("") - EPR_LENGTH_DSR_SIZE_IDENTIFIER - 1); dsd->dsr_size = (uint)epr_str_to_number(tmp); epr_free_string(tmp); if (dsd->dsr_size == -1) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid record size value"); epr_free_dsd(dsd); return NULL; } } /* EMPTY LINE BETWEEN DSD's */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if ((strlen(code_block) > 0) && (code_block[0] != ' ')) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid code_block, must be empty"); epr_free_dsd(dsd); return NULL; } *pos = *pos + 1; return dsd; } } epr_free_dsd(dsd); return NULL; } /** * Finds the first dataset description from an ENVISAT product file. * * @param envisat_source_file the handle of the given ENVISAT product file, * must not be NULL * @param sph_length [bytes] the length of SPH part from the given ENVISAT product file, * must not be NULL * @return the offset to first searched for dsd or 0 if not found. */ uint epr_find_first_dsd(FILE* envisat_source_file, uint sph_length) { uint l; char code_block[EPR_LINE_MAX_LENGTH]; if (envisat_source_file == NULL) { epr_set_err(e_err_file_access_denied, "epr_find_first_dsd: the product file handle must not be NULL"); return 0; } l = 0; while (l < sph_length) { fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DS_NAME=\"", EPR_LENGTH_DS_NAME_IDENTIFIER) == 0) { return l; } else { l += strlen(code_block); } } return 0; } #define EPR_LENGTH_NUM_DSD_FIELD 20 /** * Reads all dataset descriptions from an ENVISAT product file. * * @param product_id the file identifier, if NULL the function * immediately returns NULL. * @return an array of dataset descriptions or NULL if an error occured. */ EPR_SPtrArray* epr_read_all_dsds(EPR_SProductId* product_id) { EPR_SPtrArray* dsds_array = NULL; EPR_SRecord* dsd_record = NULL; const EPR_SField* field; EPR_SDSD* dsd; uint sph_length; char* code_block; int numread; uint dsd_number = 0; uint dsd_begin = 0; uint dsd_index; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_read_all_dsds: product_id must not be NULL"); return NULL; } dsds_array = epr_create_ptr_array(32); field = epr_get_field(product_id->mph_record, "NUM_DSD"); dsd_number = ((uint*) field->elems)[0]; /*dsd_begin = epr_api.epr_head_size - dsd_number * EPR_DSD_SIZE;*/ if (fseek(product_id->istream, EPR_MPH_SIZE, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_read_all_dsds: file seek failed"); if (dsds_array != NULL) { epr_free_ptr_array(dsds_array); } return NULL; } field = epr_get_field(product_id->mph_record, "SPH_SIZE"); sph_length = ((uint*) field->elems)[0]; dsd_begin = EPR_MPH_SIZE + (uint)epr_find_first_dsd(product_id->istream, sph_length); if (dsd_begin == EPR_MPH_SIZE) { epr_set_err(e_err_file_access_denied, "epr_read_all_dsds: no DS_NAME in SPH"); if (dsds_array != NULL) { epr_free_ptr_array(dsds_array); } return NULL; } for(dsd_index = 0; dsd_index < dsd_number; dsd_index ++) { if (fseek(product_id->istream, dsd_begin + dsd_index * EPR_DSD_SIZE, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_read_all_dsds: file seek failed"); if (dsds_array != NULL) { epr_free_ptr_array(dsds_array); } return NULL; } code_block = epr_create_string(EPR_DSD_SIZE); numread = fread(code_block, 1, EPR_DSD_SIZE, product_id->istream); if ((uint)numread != EPR_DSD_SIZE) { epr_set_err(e_err_file_read_error, "epr_read_all_dsds: error in reading SPH from product data file"); if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } if (dsds_array != NULL) { epr_free_ptr_array(dsds_array); } return NULL; } /* If this is NOT an empty DSD (empty DSD's seem to be quite 'normal') */ if ((strlen(code_block) > 0) && (code_block[0] != ' ')) { dsd_record = epr_parse_header("dsd", code_block); dsd = epr_create_dsd(dsd_index); if (dsd == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_all_dsds: out of memory"); if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } if (dsd_record != NULL) { epr_free_record_info(dsd_record->info); dsd_record->info = NULL; epr_free_record(dsd_record); dsd_record = NULL; } if (dsds_array != NULL) { epr_free_ptr_array(dsds_array); } return NULL; } field = epr_get_field(dsd_record, "DS_NAME"); dsd->ds_name = epr_clone_string((char*)field->elems); field = epr_get_field(dsd_record, "DS_TYPE"); dsd->ds_type = epr_sub_string((char*)field->elems, 0, sizeof(uchar)); field = epr_get_field(dsd_record, "FILENAME"); dsd->filename = epr_clone_string((char*)field->elems); field = epr_get_field(dsd_record, "DS_OFFSET"); dsd->ds_offset = (uint)((uint*) field->elems)[0]; field = epr_get_field(dsd_record, "DS_SIZE"); dsd->ds_size = (uint)((uint*) field->elems)[0]; field = epr_get_field(dsd_record, "NUM_DSR"); dsd->num_dsr = (uint)((uint*) field->elems)[0]; field = epr_get_field(dsd_record, "DSR_SIZE"); dsd->dsr_size = (uint)((uint*) field->elems)[0]; epr_add_ptr_array_elem(dsds_array, dsd); if (dsd_record != NULL) { /* NOTE:dsd_record->info is not a shared object, it is NOT used by * multiple instances of a DSD record, and thus, we free it here! */ epr_free_record_info(dsd_record->info); dsd_record->info = NULL; epr_free_record(dsd_record); dsd_record = NULL; } else { printf("%s\n", epr_get_last_err_message()); } } else { epr_log(e_log_debug, "empty DSD seen (don't worry)"); } epr_free_string(code_block); code_block = NULL; } rewind(product_id->istream); return dsds_array; } uint epr_get_num_dsds(const EPR_SProductId* product_id) { return product_id->dsd_array->length; } EPR_SDSD* epr_get_dsd_at(const EPR_SProductId* product_id, uint dsd_index) { EPR_SDSD* dsd = NULL; dsd = (EPR_SDSD*) epr_get_ptr_array_elem_at(product_id->dsd_array, dsd_index); return dsd; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_bitmask.h000644 015705 000000 00000035546 13505462014 027447 0ustar00sandwellwheel000000 000000 /* * $Id: epr_bitmask.h,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_BITMASK_H_INCL #define EPR_BITMASK_H_INCL #ifdef __cplusplus extern "C" { #endif #define FLAG_MASK_NOT_COMPUTED ((uint) -1) typedef struct EPR_BmTerm EPR_SBmTerm; typedef struct EPR_BmEvalContext EPR_SBmEvalContext; typedef struct EPR_BmFlagDataset EPR_SBmFlagDataset; typedef enum EPR_BmOpCode EPR_EBmOpCode; /* private implementations */ enum EPR_BmOpCode { BMT_UNKNOWN = 0, BMT_REF, BMT_AND, BMT_OR, BMT_NOT }; enum EPR_Tok { BME_UNKNOWN = 0, BME_EOS, BME_SPECIAL, BME_NAME }; /** * The EPR_BmTerm structure is the union of structures: * each of them can contain either the subject (operand) for the logic operators * or this operators itself with referd operand(s). Thus they are recursive. * The example of term: flags.WATER or flags.LAND * here: 'flags' is a band_name; 'WATER' and 'LAND' - flag_name's; 'or' - logical operator. * * @see EPR_SRaster */ struct EPR_BmTerm { EPR_EBmOpCode op_code; union { struct /*BMT_REF*/ { char* band_name; char* flag_name; uint flag_mask; EPR_SRaster* flag_raster; } ref; struct /*BMT_NOT*/ { EPR_SBmTerm* arg; } unary; struct /*BMT_AND and BMT_OR*/ { EPR_SBmTerm* arg1; EPR_SBmTerm* arg2; } binary; } op; }; /** * The EPR_BmEvalContext structure represents an evaluation context for bitmask * expressions. It is used internally only. *

* An instance of this structure holds the product ID, references to all flag datasets * required to evaluate the expression as well as information about the bitmask raster beeing * created. * * @see EPR_SProductId * @see EPR_SRaster * @see EPR_SPtrArray */ struct EPR_BmEvalContext { /** * The ID of the product to which this band belongs to. */ EPR_SProductId* product_id; /** * X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster. */ int offset_x; /** * Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster. */ int offset_y; /** * The result 0/1 bit mask raster for all flag bands */ EPR_SRaster* bitmask_raster; /** * The band_id of flags (can be 0, 1 or 4 - for AATSR) */ EPR_SPtrArray* flag_band_ids; /** * The corresponding 0/1 bit mask raster for each flag bands */ EPR_SPtrArray* flag_rasters; }; /** * Represents a flag-field within a flag-record. * */ struct EPR_BmFlagDataset { /*The name of bitmask dataset*/ char* name; /*The value of bitmask dataset (the number of the relevant bit in bitmask)*/ uint bit_index; /*The description of bitmask dataset*/ char* description; }; /** * Creates bit-mask evaluation context * for the given raster and offsets of start corner * * @param product_id the product ID * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster the bitmask_raster * * @return bit-mask evaluated context for success, and error code otherwise */ EPR_SBmEvalContext* epr_create_bm_eval_context(EPR_SProductId* product_id, int offset_x, int offset_y, EPR_SRaster* raster); /** * Release the memory allocated through a EPR_SBmEvalContext. * * @param context the bit mask context, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise */ void epr_free_bm_eval_context(EPR_SBmEvalContext* context); /** * Reads bit-mask pixels of the given product for the given bit-mask expression * for the given region and and with the given sub-sampling. * *

*

bit-mask-expression :=
*     or-expression * *

or-expression :=
*     and-expression
*     or-expression or and-expression * *

and-expression :=
*     not-expression
*     and-expression and not-expression * *

not-expression :=
*     primary-expression
*     not not-expression * *

primary-expression :=
*     flag-reference
*     ( bit-mask-expression ) * *

flag-reference :=
*     dataset-name.flag-name *

* *

Where dataset-name and flag-name are names specific for a particular data product. * Names are in general resolved case-insenitively. The parser also accepts an alternate notation for * the boolean operators: *

* The | character for the or operator,
* the & character for the and operator and finally
* the ! character for the not operator. *
* * @param product_id the product ID * @param bm_expr the bit-mask expression * @param xo X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param yo Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster_width the width in pixel co-ordinates of the raster to search * @param raster_height the height in pixel co-ordinates of raster to search * @param s_x X-step in pixel co-ordinates to get the next raster to search * @param s_y Y-step in pixel co-ordinates to get the next raster to search * @param raster_buffer [BYTE] the memory buffer to save information was read * * @return zero for success, and error code otherwise */ int epr_read_bitmask_data(const EPR_SProductId* product_id, const char* bm_expr, int xo, int yo, int raster_width, int raster_height, int s_x, int s_y, void* raster_buffer); /** * Evaluates the given bitmask expression. * * @param term the bitmask term * @param x the x co-ordinate in pixels * @param y the y co-ordinate in pixels */ epr_boolean epr_eval_bm_term(EPR_SBmEvalContext* context, EPR_SBmTerm* term, int x, int y); /** * Parses a bitmask expression string. * *

The bit-mask expressions recognized by this parser must have the following syntax: * *

*

bit-mask-expression :=
*     or-expression * *

or-expression :=
*     and-expression
*     or-expression or and-expression * *

and-expression :=
*     not-expression
*     and-expression and not-expression * *

not-expression :=
*     primary-expression
*     not not-expression * *

primary-expression :=
*     flag-reference
*     ( bit-mask-expression ) * *

flag-reference :=
*     dataset-name.flag-name *

* *

Where dataset-name and flag-name are names specific for a particular data product. * Names are in general resolved case-insenitively. The parser also accepts an alternate notation for * the boolean operators: *

* The | character for the or operator,
* the & character for the and operator and finally
* the ! character for the not operator. *
* *

For example, the following parseBitmaskExpression request will perform without errors: *

 *     BitmaskTerm term = BitmaskExpressionParser.parse("flags.LAND and not flags.DDV");
 * 
*

Another example for a valid expression in alternatate notation is: *

 *     BitmaskTerm term = BitmaskExpressionParser.parse("flags.LAND | (flags.COASTLINE & !flags.CLOUD)");
 * 
* *

The terms created in the examples above could successfully be evaluated in an evaluation context * provided by an ENVISAT MERIS Level 2 data product. * * @param bm_expr the bitmask expression * @return the bitmask term representing the given expression */ EPR_SBmTerm* epr_parse_bm_expr_str(const char* bm_expr); struct EPR_ParseInfo { const char* bm_expr; int bm_expr_pos; epr_boolean pushed_back; int token_type; char* token; char* err_message; }; typedef struct EPR_ParseInfo EPR_SParseInfo; /** * This group of functions is for parsing the expression. * * @param parse_info parse_info structure * @param term_required the boolean value expression. * * @return the bit mask term (see EPR_BmTerm). */ /*@{*/ EPR_SBmTerm* epr_parse_bm_expr(EPR_SParseInfo* parse_info, epr_boolean term_required); EPR_SBmTerm* epr_parse_bm_OR_expr(EPR_SParseInfo* parse_info, epr_boolean term_required); EPR_SBmTerm* epr_parse_bm_AND_expr(EPR_SParseInfo* parse_info, epr_boolean term_required); EPR_SBmTerm* epr_parse_bm_unary_expr(EPR_SParseInfo* parse_info, epr_boolean term_required); EPR_SBmTerm* epr_parse_bm_primary_expr(EPR_SParseInfo* parse_info, epr_boolean term_required); /*@}*/ /** * This group of functions is for recognizing the keyword. * * @param parse_info parse_info structure * * @return TRUE or FALSE. */ /*@{*/ epr_boolean epr_is_bm_OR_keyword(EPR_SParseInfo* parse_info); epr_boolean epr_is_bm_AND_keyword(EPR_SParseInfo* parse_info); epr_boolean epr_is_bm_NOT_keyword(EPR_SParseInfo* parse_info); /*@}*/ /** * This group of functions is for recognizing the operator. * * @param parse_info parse_info structure * * @return TRUE or FALSE. */ /*@{*/ epr_boolean epr_is_bm_AND_operator(EPR_SParseInfo* parse_info); epr_boolean epr_is_bm_OR_operator(EPR_SParseInfo* parse_info); epr_boolean epr_is_bm_NOT_operator(EPR_SParseInfo* parse_info); /*@}*/ /** * Tests the given expression for operand name only (not operator). * * @param parse_info parse_info structure * * @return TRUE if the term is not NULL and an operand, or FALSE otherwise */ epr_boolean epr_is_bm_name_token(EPR_SParseInfo* parse_info); /** * Tests the given expression for the end of string. * * @param parse_info parse_info structure * * @return TRUE if the EOS occurs, or FALSE otherwise */ epr_boolean epr_is_bm_EOS_token(EPR_SParseInfo* parse_info); /** * Tests the given expression for errors. * * @param parse_info parse_info structure * * @return TRUE if no error occurs, or FALSE otherwise */ epr_boolean epr_is_bm_expr_error(EPR_SParseInfo* parse_info); /** * Gets the first character of token for the given expression or EOS. * * @param parse_info parse_info structure * * @return '(' , ')', '.' , '&' , '|' ,'!', or '\0' otherwise */ int epr_get_token_char(EPR_SParseInfo* parse_info); /** * Releases the actual token given expression. * * @param parse_info parse_info structure * * @return token */ char* epr_consume_token(EPR_SParseInfo* parse_info); /** * Selectss the next token given expression. * * @param parse_info parse_info structure */ void epr_next_bm_expr_token(EPR_SParseInfo* parse_info); void epr_push_back_bm_expr_token(EPR_SParseInfo* parse_info); void epr_set_bm_expr_error(EPR_SParseInfo* parse_info, const char* message); int epr_tokenize_bm_expr(const char* bm_expr, int* bm_expr_pos, char** token); /** * Creates a new bitmask term instance. */ EPR_SBmTerm* epr_create_bm_term(EPR_EBmOpCode op_code); /** * Creates a new bitmask reference term instance. */ EPR_SBmTerm* epr_create_bm_REF_term(char* ds_name, char* flag_name); /** * Creates a new bitmask NOT term instance. */ EPR_SBmTerm* epr_create_bm_NOT_term(EPR_SBmTerm* arg); /** * Creates a new bitmask OR term instance. */ EPR_SBmTerm* epr_create_bm_OR_term(EPR_SBmTerm* arg1, EPR_SBmTerm* arg2); /** * Creates a new bitmask reference AND term instance. */ EPR_SBmTerm* epr_create_bm_AND_term(EPR_SBmTerm* arg1, EPR_SBmTerm* arg2); /** * Releases a new bitmask term instance. */ void epr_free_bm_term(EPR_SBmTerm* term); /** * Creates a new bitmask expression from the given bitmask term. *

The expression returned is a valid in the sense that the epr_parse_bm_expr() * applied to the returned string would return an equivalent term. * * @param term the term to be converted */ char* epr_create_bm_expr(EPR_SBmTerm* term); /** * Prints the given term as an expression to the console. */ void epr_print_bm_term(EPR_SBmTerm* term); /** * Writes the given term as an expression to the given output stream. */ void epr_write_bm_term(EPR_SBmTerm* term, FILE* ostream); /** * Creates the coding flag info * * @param str the local path to dddb * * @return the the pointer at the coding flag information. */ EPR_SPtrArray* epr_create_flag_coding(EPR_SProductId* product_id, const char* str); /** * Creates the coding flag definition * * @return the the pointer at the coding flag definition information. */ EPR_SFlagDef* epr_create_flag_def(); /** * Releases the coding flag definition */ void epr_free_flag_def(EPR_SFlagDef* flag_def); /** * Releases the coding flag info */ void epr_free_flag_coding(EPR_SPtrArray* flag_coding); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_BITMASK_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_core.h000644 015705 000000 00000020371 13505462014 026733 0ustar00sandwellwheel000000 000000 /* * $Id: epr_core.h,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_CORE_H_INCL #define EPR_CORE_H_INCL #ifdef __cplusplus extern "C" { #endif #include /* just to get the ANSI-C type FILE */ #include "epr_ptrarray.h" struct EPR_API; struct EPR_Parameter; typedef struct EPR_API EPR_SAPI; typedef struct EPR_Parameter EPR_SParameter; #define EPR_ENVISAT_PRODUCT_MERIS "MER" #define EPR_ENVISAT_PRODUCT_ASAR "ASA" #define EPR_ENVISAT_PRODUCT_SAR "SAR" #define EPR_ENVISAT_PRODUCT_AATSR "ATS" #define EPR_LONGI_BAND_NAME "longitude" #define EPR_AATSR_LINES_PER_TIE_PT 32 #define EPR_MPH_SIZE 1247 #define EPR_SPH_SIZE 11622 #define EPR_DSD_SIZE 280 #define EPR_PRODUCT_MPH_SIZE 1048 /*??????*/ #define EPR_PRODUCT_MAGIC_STR "PRODUCT=\"" #define EPR_PRODUCT_ID_OFFSET 9 #define EPR_PRODUCT_TYPE_ID_STRLEN 10 #define EPR_LENGTH_NUM_DSD_IDENTIFIER 9 #define EPR_COUNT_SEPARATOR_ARRAY ",*" #define EPR_IRRELEVANCE_SYMBOL '*' #define EPR_FIELD_SEPARATOR_ARRAY "|" #define EPR_HEADER_SEPARATOR_ARRAY "=<>" #define EPR_HEADER_EXCEPTIONS_ARRAY "eE" #define EPR_LONGI_ABS_MAX 180 #define EPR_LONGI_ABS_MIN -180 #define EPR_LINE_MAX_LENGTH 2000 #define EPR_BE_MAGIC_NUMBER 1162761801UL #define EPR_LE_MAGIC_NUMBER 1230392901UL #define EPR_LE_MAGIC_BYTE_0 'E' #define EPR_LE_MAGIC_BYTE_1 'N' #define EPR_LE_MAGIC_BYTE_2 'V' #define EPR_LE_MAGIC_BYTE_3 'I' #define EPR_ATS_NUM_PER_POINT_ACROSS_LOCAT 23 #define EPR_ATS_NUM_PER_POINT_ACROSS_SOLAR 11 #define EPR_ATS_LINE_LENGTH 512 #define EPR_ASAR_NUM_PER_POINT_ACROSS_LOCAT 11 /** * The EPR_API structure is a container for all globally * required information related to to the ENVISAT product reader API. * *

A single global (but hidden) instance exists for this structure. */ struct EPR_API { /** * The directory path to the record info database. */ epr_boolean init_flag; /** * A boolean value indicating whether this code run's on a * little endian order machine or not. *

1 stands for little endian (LE), * 0 stands for big endian (BE). */ int little_endian_order; /** * A unsigned int value indicating head length */ uint epr_head_size; /** * The directory path to the record info database. */ /*char* db_dir_path;*/ /** * The current log level for the ENVISAT API. */ EPR_ELogLevel log_level; /** * The log handler (function pointer) for the ENVISAT API. * Can be NULL. */ EPR_FLogHandler log_handler; /** * The error code of the last error occured. */ EPR_EErrCode last_err_code; /** * The error message of the last error occured. */ char* last_err_message; /** * The error handler (function pointer) for the ENVISAT API. * Can be NULL. */ EPR_FErrHandler err_handler; }; /** * The one and only ENVISAT API instance. */ extern EPR_SAPI epr_api; /* * ====================================================================== */ /** * Frees the memory allocated by the given product file identifier. * *

After calling this function the give product file identifier pointer * gets invalid and should not be used anymore. * * @param record the product file identifier to be released, * if NULL the function immediately returns */ void epr_free_product_id(EPR_SProductId* product_id); /** * Logs a message with the given log level. * *

The function calls this API's log handler if * it is not NULL and if the given log * level is greater than or equal to the global log level. * * @param log_level the log level (or message type) for the mesage * @param log_message the mesage */ void epr_log(EPR_ELogLevel log_level, const char* log_message); /** * Sets the given error code and the associated error message and * calls this API's error handler if it is not NULL. * * @param err_code the error code * @param err_message the error mesage */ void epr_set_err(EPR_EErrCode err_code, const char* err_message); /** * Reads the full main product header (MPH) of the ENVISAT product file * given by the given product identifier. * * @param product_id the product identifier, must not be NULL * @return a record representing the MPH of the specified product file * or NULL if an error occured. */ EPR_SRecord* epr_read_mph(EPR_SProductId* product_id); /** * Reads the full specific product header (SPH) of the ENVISAT product file * given by the given product identifier. * * @param product_id the product identifier, must not be NULL * @return a record representing the MPH of the specified product file * or NULL if an error occured. */ EPR_SRecord* epr_read_sph(EPR_SProductId* product_id); /** * Converts the given string into a data type identifier. * * @param str the string to be converted. * @return the data type identifier represented by the given string. * If the string can not be converted the special value * e_tid_unknown is returned. */ EPR_EDataTypeId epr_str_to_data_type_id(const char* str); /* * Converts the given string into a field length. * * The string can represent a single integer value or a sequence * of integer value and parameter references (names). Integers * and value are expected to be separated by the asterisk * character ('*'). E.g. the string "3 * 4 * num_pixels_across" * is represents a valid field length as long as the parameter * name 'num_pixels_across' is found in the given parameter table. * * @param str the string to be converted * @param param_table the parameter table containing the values * for the parameter references in the string * @return the field length computed from the given string or * (uint)-1 if an error occured. */ /*uint epr_str_to_field_length(const char* str, EPR_SParamTable* param_table);*/ /** * Compares the two given names and returns TRUE if * they are equal ignoring the case of each letter. * *

This function is used to compare names throughout the * ENVISAT product reader API. * * @param name1 the first name, must not be NULL * @param name2 the second name, must not be NULL * @return TRUE if the names are equal, * FALSE otherwise */ char* epr_build_db_file_istream_name(EPR_SProductId* product_id, char* what); FILE* epr_open_file(char* path_to_file); int epr_str_to_number(const char* str); uint epr_parse_value_count(EPR_SProductId* product_id, const char* str); uint epr_param_to_value(const char* str, EPR_SPtrArray* param_table); void epr_make_os_compatible_path(char* path); epr_boolean epr_check_api_init_flag(); /* void epr_make_image_header(EPR_SProductId* product_id, EPR_SDatasetId* dataset_id, EPR_SRecord* record); int epr_make_image(EPR_SProductId* product_id, EPR_SDatasetId* dataset_id, EPR_SRecord* record); */ /** * Gets the element content to output FILE stream. * * @param field the pointer at the field to get out. * @param istream the identifier of the output file. */ void epr_output_element(const EPR_SField* field, uint field_index, uint element_index, FILE* istream); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_CORE_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_band.h000644 015705 000000 00000027111 13505462014 026706 0ustar00sandwellwheel000000 000000 /* * $Id: epr_band.h,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_BAND_H_INCL #define EPR_BAND_H_INCL #ifdef __cplusplus extern "C" { #endif #include "epr_ptrarray.h" #include /* just to get the ANSI-C type FILE */ /** * Converts the given string into a scaling method identifier. * * @param str the string to be converted. * @return the scaling method identifier represented by the given string. * If the string is equal of '*' the value * e_non_smid is returned. */ EPR_EScalingMethod epr_str_to_scaling_method(const char* str); /** * Converts the given string into a sample offset identifier. * * @param str the string to be converted. * @return the sample offset identifier represented by the given string. * If the string is equal of '*' the value * e_none_samoff is returned. */ EPR_ESampleModel epr_str_to_sample_offset(const char* str); /** * Gets the dataset_id, field_index and elem_index * * @param product_id the the product file identifier * @param str the string with the name, separator ('.') and indexes. * @return the dataset_id, field_index and elem_index (-1 if no). * NULL if correspondent dataset name was not found. */ EPR_SDatasetRef epr_get_ref_struct(EPR_SProductId* product_id, const char* str); /** * Gets the scaling factor by the given dataset_id, field_index, elem_index * * @param product_id the the product file identifier * @param str the string with the name, separator ('.') and indexes. * @return the dataset_id, field_index and elem_index (-1 if no). * NULL if correspondent dataset name was not found. */ float epr_get_scaling_factor(EPR_SProductId* product_id, const char* str); float epr_get_scaling_params(EPR_SProductId* product_id, const char* str); /** * Reads the measurement data and converts its in physical values. * * @param band_id the information about properties and quantities of ENVISAT data. * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster the instance to the buffer information was used * * @return zero for success, and error code otherwise */ int epr_read_band_measurement_data(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster); /** * Reads the annotation data and converts its in physical values. * * @param band_id the information about properties and quantities of ENVISAT data. * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster the instance to the buffer information was used * * @return zero for success, and error code otherwise */ int epr_read_band_annotation_data(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster); /** * This group of functions is for scaling the field element for a physical measurement values. *
The type is located in the field info. *
One field must have one type only. * * @param sourceArray the sourse array identifier (to be scaled) * @param band_id the band ID with the information about the field's physical properties * @param xo [PIXEL] X-coordinate (0-bazed) of the upper right corner raster to search * @param raster_width [PIXEL] the width of the raster is been research * @param s_x X-step to get the next raster to search * @param raster_buffer [BYTE] the memory buffer to save information was scaled * @param raster_pos shows the point of filling of the array raster_buffer * */ /*@{*/ void decode_line_uchar_1_of_1_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_ushort_1_of_1_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_short_1_of_1_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_short_1_of_2_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_short_2_of_2_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_char_1_of_1_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_1_of_1_to_uchar (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_1_of_2_to_uchar (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_2_of_2_to_uchar (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_ushort_1_of_1_to_ushort (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_1_of_2_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_2_of_2_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_2_to_f_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_3_to_i_to_uint (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); /*@}*/ /** * This group of functions is for scaling the field element for a physical annotation values. *
The type is located in the field info. *
One field must have one type only. * * @param sourceArray the sourse array identifier (to be scaled) * @param band_id the band ID with the information about the field's physical properties * @param raster_buffer [BYTE] the memory buffer to save information was scaled * @param nel number of element to scale * */ /*@{*/ void transform_array_short_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel); void transform_array_ushort_to_float(void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel); void transform_array_int_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel); void transform_array_uint_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel); /*@}*/ /** * This group of functions is for mirroring the scaled line of a physical MERIS values. * * @param raster_buffer [BYTE] the memory buffer to be Y-mirrored * @param raster_width [PIXEL] the width of the raster is been Y-mirrored * @param raster_height [PIXEL] the height of the raster is been Y-mirrored * */ /*@{*/ void mirror_float_array (float* raster_buffer, uint raster_width, uint raster_height); void mirror_uchar_array (uchar* raster_buffer, uint raster_width, uint raster_height); void mirror_ushort_array (ushort* raster_buffer, uint raster_width, uint raster_height); void mirror_uint_array (uint* raster_buffer, uint raster_width, uint raster_height); /*@}*/ /** * Two dimenzional interpolation * * @param wi the interpolation point location in [0,1] in "horizontal" direction * @param wj the interpolation point location in [0,1] in "vertical" direction * @param x00 the first point in "horizontal" direction * @param x10 the second point in "horizontal" direction * @param x01 the first point in "vertical" direction * @param x11 the second point in "vertical" direction * * @return float interpolated value */ float epr_interpolate2D(float wi, float wj, float x00, float x10, float x01, float x11); /** * Computes the physical values for the annotation data. * * @param sa_beg the float array of tie points "before" Y-coordinate of the point to search * @param sa_end the float array of tie points "after" Y-coordinate of the point to search * @param samples_per_tie_pt the "distance" between two neighbour tie point (in scan-line direction) * @param num_elems number of elements in one tie point scan-line * @param band_id the information about properties and quantities of ENVISAT data. * @param xo [PIXEL] X-coordinate (0-bazed) of the upper right corner raster to search * @param y_mod [PIXEL] relativ location of the point is been researched (in fly direction) * @param raster_width [PIXEL] the width of the raster is been researched * @param s_x [PIXEL] X-step to get the next point (in source coordinates) to search * @param raster_buffer the float user array to be filled with physical values * @param raster_pos the actual "filled" position in raster_buffer-array * */ void decode_tiepoint_band(float* sa_beg, float* sa_end, uint samples_per_tie_pt, uint num_elems, EPR_SBandId* band_id, int xo, float scan_offset_x, float y_mod, int raster_width, int s_x, float* raster_buffer, int raster_pos); typedef void (*EPR_FLineDecoder)(void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); /** * Selects the line decode function, depended on measurement data type. */ EPR_FLineDecoder select_line_decode_function(EPR_EDataTypeId band_daty, EPR_ESampleModel band_smod, EPR_EDataTypeId daty_id); typedef void (*EPR_FArrayTransformer)(void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel); /** * Selects the transform array function, dependent on annotation data type. */ EPR_FArrayTransformer select_transform_array_function(EPR_EDataTypeId band_daty, EPR_EDataTypeId daty_id); /** * Masks the band information out. * The band information will be masked dependent on bit mask filter for the same * selected area (described in raster). * * @param raster selected and physically processed the ENVISAT product data band information * @param bm_raster selected the ENVISAT flag bit mask filter */ void epr_zero_invalid_pixels(EPR_SRaster* raster, EPR_SRaster* bm_raster); /** * Release the memory allocated through a band ID. * * @param band_id the band identifier to be released. */ void epr_free_band_id(EPR_SBandId* band_id); EPR_SPtrArray* epr_create_band_ids(EPR_SProductId* product_id); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_BAND_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_msph.c000644 015705 000000 00000045371 13505462014 026754 0ustar00sandwellwheel000000 000000 /* * $Id: epr_msph.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" /** * Reads the full main product header (MPH) of the ENVISAT product file * by the given product identifier. * * @param product_id the product identifier, must not be NULL * @return a record representing the MPH of the specified product file * or NULL if an error occured. */ EPR_SRecord* epr_read_mph(EPR_SProductId* product_id) { EPR_SRecord* record = NULL; char* code_block; int numread; epr_clear_err(); code_block = epr_create_string(EPR_MPH_SIZE); if (code_block == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_mph: out of memory"); return NULL; } rewind(product_id->istream); numread = fread(code_block, 1, EPR_MPH_SIZE, product_id->istream); if (numread != EPR_MPH_SIZE) { epr_set_err(e_err_file_read_error, "epr_read_mph: wrong reading MPH from product data file"); return NULL; } record = epr_parse_header("mph", code_block); if (record == NULL) { epr_set_err(e_err_invalid_record, "epr_read_mph: can not recognize the correct MPH from product data file"); } else { epr_add_ptr_array_elem(product_id->record_info_cache, record->info); } epr_free_string(code_block); return record; } /** * Reads the full specific product header (SPH) of the ENVISAT product file * by the given product identifier. * * @param product_id the product identifier, must not be NULL * @return a record representing the MPH of the specified product file * or NULL if an error occured. */ EPR_SRecord* epr_read_sph(EPR_SProductId* product_id) { EPR_SRecord* sph_record = NULL; const EPR_SField* field; char* code_block; int numread; uint sph_length = 0; uint sph_without_dsd_length = 0; uint dsd_number = 0; epr_clear_err(); if (product_id->mph_record == NULL) { product_id->mph_record = epr_read_mph(product_id); if (product_id->mph_record == NULL) { epr_set_err(e_err_file_read_error, "epr_read_sph: wrong MPH"); return NULL; } } field = epr_get_field(product_id->mph_record, "SPH_SIZE"); sph_length = ((uint*) field->elems)[0]; if (sph_length == 0) { epr_set_err(e_err_invalid_value, "epr_read_sph: wrong MPH: SPH_SIZE must be > 0"); return NULL; } field = epr_get_field(product_id->mph_record, "NUM_DSD"); dsd_number = ((uint*) field->elems)[0]; if (dsd_number == 0) { epr_set_err(e_err_invalid_value, "epr_read_sph: wrong MPH: NUM_DSD must be > 0"); return NULL; } epr_api.epr_head_size = sph_length + EPR_MPH_SIZE; if (fseek(product_id->istream, EPR_MPH_SIZE, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_read_sph: file seek failed"); return NULL; } sph_without_dsd_length = sph_length - dsd_number * EPR_DSD_SIZE; code_block = epr_create_string(sph_without_dsd_length); numread = fread(code_block, 1, sph_without_dsd_length, product_id->istream); if ((uint)numread != sph_without_dsd_length) { epr_set_err(e_err_file_read_error, "epr_read_sph: wrong reading SPH from product data file"); return NULL; } sph_record = epr_parse_header("sph", code_block); if (sph_record == NULL) { epr_set_err(e_err_invalid_record, "epr_read_sph: can not recognize the correct SPH from product data file"); } else { epr_add_ptr_array_elem(product_id->record_info_cache, sph_record->info); } epr_free_string(code_block); return sph_record; } void epr_store_header(const char* header_name, const char* ascii_source) { FILE* os; char fname[1024]; sprintf(fname, "%s.txt", header_name); os=fopen(fname, "w"); fprintf(os,"%s", ascii_source); fclose(os); } /** * Parses the header ASCII information. * * @param header_name name of the header ascii information; * @param ascii_source the header ascii information was read; * @param record the identifier of header ascii information. */ EPR_SRecord* epr_parse_header(const char* header_name, const char* ascii_source) { EPR_SRecordInfo* record_info; EPR_SPtrArray* field_infos = NULL; EPR_SFieldInfo* field_info; EPR_SPtrArray* header_values = NULL; EPR_SRecord* record = NULL; EPR_EDataTypeId tp; char * code_block; char seps[] = EPR_HEADER_SEPARATOR_ARRAY; char * token_name; char * token_value; char * token_unit; char * h_name; int pos = 0; int pos_ascii = 0; uint num_bytes = 0; uint num_elems = 0; epr_clear_err(); /* uncomment for debugging purpose */ /* epr_store_header(header_name, ascii_source); */ header_values = epr_create_ptr_array(16); field_infos = epr_create_ptr_array(16); h_name = epr_clone_string(header_name); while ((code_block = epr_str_tok(ascii_source, "\n", &pos_ascii)) != NULL) { /*if EMPTY code_block*/ if ((strlen(code_block) > 0) && (code_block[0] == ' ')) { /* epr_log(e_log_info, "code_block is empty"); */ if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } continue; } /*if '=' separator*/ pos = 0; token_name = epr_str_tok(code_block, seps, &pos); if (pos == 1) { epr_set_err(e_err_invalid_keyword_name, "epr_parse_header: invalid ascii header: keyword is empty"); epr_free_string(token_name); if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } continue; } if (pos == (int)strlen(code_block) + 1) { epr_set_err(e_err_invalid_keyword_name, "epr_parse_header: invalid ascii header: keyword not found"); epr_free_string(token_name); if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } continue; } /*if STRING value*/ if (code_block[pos] == '\"') { pos ++; /* Note that strings always are considered as one single element, so we get the total number of characters from tot_size. Addidionally we reserve an extra character for the trailing zero (terminator), */ token_value = epr_strip_string_r(epr_str_tok(code_block, "\"", &pos)); token_unit = NULL; tp = e_tid_string; num_bytes = (uint)strlen(token_value); num_elems = 1; epr_add_ptr_array_elem(header_values, token_value); } else { token_value = epr_str_tok(code_block, seps, &pos); if (token_value == NULL) { epr_set_err(e_err_invalid_value, "epr_parse_header: invalid ascii header: value not found"); token_value = epr_clone_string(""); token_unit = NULL; tp = e_tid_uchar; num_bytes = 0; num_elems = 1; epr_add_ptr_array_elem(header_values, token_value); } else { /*if FLOAT-DOUBLE value*/ if (strchr(token_value, '.') != NULL || strchr(token_value, 'e') != NULL || strchr(token_value, 'E') != NULL) { epr_parse_double_token(header_values, token_value, &num_elems, &num_bytes, &tp); token_unit = epr_str_tok(code_block, seps, &pos); epr_free_string(token_value); token_value = NULL; /*if INTEGER_LONG value*/ } else if ((strlen(token_value) > 1)) { epr_parse_int_token(header_values, token_value, &num_elems, &num_bytes, &tp); epr_free_string(token_value); token_value = NULL; token_unit = epr_str_tok(code_block, seps, &pos); } else { /*if CHAR value*/ if (strlen(token_value) > 1) { epr_set_err(e_err_invalid_value, "epr_parse_header: invalid ascii header: illegal value"); token_value = epr_clone_string(""); token_unit = NULL; tp = e_tid_uchar; num_bytes = 0; num_elems = 1; epr_add_ptr_array_elem(header_values, token_value); epr_free_string(token_name); if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } continue; } else { token_unit = NULL; tp = e_tid_uchar; num_bytes = (uint)strlen(token_value); num_elems = 1; epr_add_ptr_array_elem(header_values, token_value); } } } } field_info = epr_create_field_info(tp, h_name, token_name, num_elems, num_bytes, 1, token_unit); epr_add_ptr_array_elem(field_infos, field_info); epr_free_string(token_name); epr_free_string(token_unit); epr_free_string(code_block); } if (field_infos->length > 0) { record_info = epr_create_record_info(h_name, field_infos); record = epr_create_record_from_info(record_info); epr_set_header_field_values(record, header_values); } epr_free_char_ptr_array(header_values); epr_free_string(h_name); return record; } void epr_parse_string_token(EPR_SPtrArray* header_values, char* token_value, uint* num_elems, uint* num_bytes, EPR_EDataTypeId* tp) { char exceptions[] = EPR_HEADER_EXCEPTIONS_ARRAY; char * token_value_o; char * tmp; uint pos_value = 0; int cyc = 0; pos_value = 0; *num_elems = 0; while ((tmp = epr_str_tok_tok(token_value + 1, "+-", exceptions, &pos_value)) != NULL) { cyc ++; token_value_o = epr_create_string(strlen(tmp) + 1); if (strlen(tmp) == strlen(token_value) - 1) { token_value_o[0] = token_value[0]; } else if (pos_value < (uint)strlen(token_value) - 1) { token_value_o[0] = token_value[pos_value - strlen(tmp) - 1]; } else { token_value_o[0] = token_value[pos_value - strlen(tmp)]; } strcat(token_value_o, tmp); epr_add_ptr_array_elem(header_values, token_value_o); epr_free_string(tmp); } *num_bytes = sizeof(double); *tp = e_tid_double; *num_elems = cyc; } void epr_parse_double_token(EPR_SPtrArray* header_values, char* token_value, uint* num_elems, uint* num_bytes, EPR_EDataTypeId* tp) { char exceptions[] = EPR_HEADER_EXCEPTIONS_ARRAY; char * token_value_o; char * tmp; uint pos_value = 0; int cyc = 0; pos_value = 0; *num_elems = 0; while ((tmp = epr_str_tok_tok(token_value + 1, "+-", exceptions, &pos_value)) != NULL) { cyc ++; token_value_o = epr_create_string(strlen(tmp) + 1); if (strlen(tmp) == strlen(token_value) - 1) { token_value_o[0] = token_value[0]; } else if (pos_value < (uint)strlen(token_value) - 1) { token_value_o[0] = token_value[pos_value - strlen(tmp) - 1]; } else { token_value_o[0] = token_value[pos_value - strlen(tmp)]; } strcat(token_value_o, tmp); epr_add_ptr_array_elem(header_values, token_value_o); epr_free_string(tmp); } *num_bytes = sizeof(double); *tp = e_tid_double; *num_elems = cyc; } void epr_parse_int_token(EPR_SPtrArray* header_values, char* token_value, uint* num_elems, uint* num_bytes, EPR_EDataTypeId* tp) { char * token_value_o; char * tmp; char * tmp_v; char * stopstring; int pos_value = 0; uint dlina; uint i; char value_buffer[32]; int lmp; uint ulmp; int flag_int = 0; int flag_negative = 0; int cyc = 0; pos_value = 0; *num_elems = 0; flag_int = 0; flag_negative = 0; if (strchr(token_value, '-') != NULL) { flag_int = 1; *num_bytes = sizeof(int); *tp = e_tid_int; } else { *num_bytes = sizeof(uint); *tp = e_tid_uint; } while ((tmp = epr_str_tok(token_value + 1, "+-", &pos_value)) != NULL) { if (epr_if_no_letters(tmp) == 0) { epr_set_err(e_err_invalid_value, "epr_parse_header: invalid ascii header: illegal value"); cyc ++; tmp = epr_clone_string("-999999"); *num_bytes = sizeof(int); *tp = e_tid_int; epr_add_ptr_array_elem(header_values, tmp); } else { cyc ++; token_value_o = epr_create_string(strlen(tmp) + 1); if (strlen(tmp) == strlen(token_value) - 1) { token_value_o[0] = token_value[0]; } else if (pos_value < (int)strlen(token_value) - 1) { token_value_o[0] = token_value[pos_value - strlen(tmp) - 1]; } else if (strlen(tmp) == 1) { if (cyc == 1) token_value_o[0] = token_value[pos_value]; else token_value_o[0] = token_value[pos_value - 1]; } else { token_value_o[0] = token_value[pos_value - strlen(tmp)]; } strcat(token_value_o, tmp); dlina = (uint)strlen(token_value_o); tmp_v = epr_create_string(dlina); /*if int*/ if (flag_int == 1) { lmp = strtol(token_value_o, &stopstring, 10); if (lmp != 0) { tmp_v[0] = token_value_o[0]; for (i = 1; i < dlina; i ++) if (token_value_o[i] != '0') break; if (token_value_o[0] == '+') strncpy(tmp_v + 0, token_value_o + i, dlina - i); if (token_value_o[0] == '-') strncpy(tmp_v + 1, token_value_o + i, dlina - i); sprintf(value_buffer, "%d", lmp); /*if int value too large*/ if (strcmp(tmp_v, value_buffer) != 0) epr_log(e_log_warning, "product header: int integer value out of range"); } } else if (flag_int == 0) { ulmp = strtoul(token_value_o, &stopstring, 10); if (ulmp != 0UL) { tmp_v[0] = token_value_o[0]; for (i = 1; i < dlina; i ++) if (token_value_o[i] != '0') break; strncpy(tmp_v, token_value_o + i, dlina - i); sprintf(value_buffer, "%u", ulmp); /*if uint value too large*/ if (strcmp(tmp_v, value_buffer) != 0) epr_log(e_log_warning, "product header: unsigned int integer value out of range"); } } epr_free_string(tmp_v); epr_add_ptr_array_elem(header_values, token_value_o); epr_free_string(tmp); } } *num_elems = cyc; } /** * Fills the record for the header ASCII information. * * @param record to fill; * @param header_values values from the given product file; * @param record beeng filling. */ void epr_set_header_field_values(EPR_SRecord* record, EPR_SPtrArray* header_values) { EPR_SFieldInfo* field_info; EPR_SField* field; uint ptr_index = 0; uint field_index; uint field_info_index; char * tmp; char * stopstring; assert(header_values != NULL); for (field_index = 0; field_index < record->num_fields; field_index++) { field = record->fields[field_index]; field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(record->info->field_infos, field_index); for (field_info_index = 0; field_info_index < field->info->num_elems; field_info_index++) { tmp = (char*)epr_get_ptr_array_elem_at(header_values, ptr_index); switch (field_info->data_type_id) { case e_tid_uchar: *(((uchar*)field->elems) + field_info_index) = (uchar) tmp[field_info_index]; break; case e_tid_int: *(((int*)field->elems) + field_info_index) = strtol(tmp, &stopstring, 10); break; case e_tid_uint: *(((uint*)field->elems) + field_info_index) = strtoul(tmp, &stopstring, 10); break; case e_tid_string:; /*epr_assign_string(&(char*)field->elems, tmp);*/ strncpy((char*)field->elems, tmp, field->info->tot_size); break; case e_tid_double: *(((double*)field->elems) + field_info_index) = strtod(tmp, &stopstring); break; default: epr_set_err(e_err_invalid_value, "epr_set_header_field_values: internal error: illegal value type"); } ptr_index ++; } } } uint epr_compare_param(EPR_SProductId* product_id) { EPR_SDSD* dsd; uint of; epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_invalid_product_id, "epr_compare_param: invalid product identifier"); return 0UL; } of = epr_api.epr_head_size; dsd = (EPR_SDSD*)epr_get_ptr_array_elem_at(product_id->dsd_array, 0); if (dsd->ds_offset == epr_api.epr_head_size) return of; return 0UL; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_record.c000644 015705 000000 00000031146 13505462014 027256 0ustar00sandwellwheel000000 000000 /* * $Id: epr_record.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" /* * ===================== Record Info Access ============================== */ /* Function: epr_create_record_info Access: public API Changelog: 2002/01/16 mp initial version */ /** * Creates a new record_info for the record by the given * dataset name. * * @param dataset_name the name of the dataset, to which the record * belongs to, must not be NULL * @param field_infos the pointer at the strucrure with information * of all fields wich belong to record, * must not be NULL * @return the new record instance * or NULL if an error occured. */ EPR_SRecordInfo* epr_create_record_info(const char* dataset_name, EPR_SPtrArray* field_infos) { EPR_SRecordInfo* record_info = NULL; EPR_SFieldInfo* field_info = NULL; int field_infos_index; int field_infos_length; uint tot_record_size = 0; record_info = (EPR_SRecordInfo*) calloc(1, sizeof (EPR_SRecordInfo)); if (record_info == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_record_info: out of memory"); return NULL; } epr_assign_string(&record_info->dataset_name, dataset_name); if (record_info->dataset_name == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_record_info: out of memory"); return NULL; } record_info->field_infos = field_infos; field_infos_length = (int)epr_get_ptr_array_length(field_infos); for (field_infos_index = 0; field_infos_index < field_infos_length; field_infos_index++) { field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(field_infos, field_infos_index); tot_record_size += field_info->tot_size; } record_info->tot_size = tot_record_size; return record_info; } /** * Frees the memory allocated by the given record_info. * *

After calling this function the give record_info pointer gets * invalid and should not be used anymore. * * @param record_info the record to be released, if NULL * the function immediately returns */ void epr_free_record_info(EPR_SRecordInfo* record_info) { EPR_SFieldInfo* field_info = NULL; uint field_info_index = 0; if (record_info == NULL) return; if (record_info->field_infos != NULL) { for (field_info_index = 0; field_info_index < record_info->field_infos->length; field_info_index++) { field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(record_info->field_infos, field_info_index); epr_free_field_info(field_info); } epr_free_ptr_array(record_info->field_infos); record_info->field_infos = NULL; } epr_free_string(record_info->dataset_name); record_info->dataset_name = NULL; record_info->field_infos = NULL; record_info->tot_size = 0; free(record_info); } /* Function: epr_get_record_info Access: private API implementation helper Changelog: 2002/01/05 mp initial version */ /** * Returns information about the structure of the records contained in * a dataset specified by the given dataset_id. * * @param dataset_id the the dataset identifier * * @return the the pointer for the record structure information. */ EPR_SRecordInfo* epr_get_record_info(EPR_SDatasetId* dataset_id) { EPR_SProductId* product_id; EPR_SRecordInfo* record_info; uint num_record_infos; uint record_index = 0; assert(dataset_id != NULL); product_id = dataset_id->product_id; assert(product_id != NULL); assert(product_id->record_info_cache != NULL); /* * checks, if 'record_info_cache' is not empty, then returns this cache, * not making moreover */ num_record_infos = product_id->record_info_cache->length; for (record_index = 0; record_index < num_record_infos; record_index++) { record_info = (EPR_SRecordInfo*) product_id->record_info_cache->elems[record_index]; if (epr_equal_names(record_info->dataset_name, dataset_id->dataset_name)) return record_info; } record_info = epr_read_record_info(product_id, dataset_id); if (record_info == NULL) { epr_set_err(e_err_file_access_denied, "epr_get_record_info: invalid DDDB resource path: missing any 'ASAR' files"); return NULL; } epr_add_ptr_array_elem(product_id->record_info_cache, record_info); return record_info; } EPR_SRecordInfo* epr_read_record_info(EPR_SProductId* product_id, EPR_SDatasetId* dataset_id) { EPR_SRecordInfo* record_info = NULL; EPR_SFieldInfo* field_info = NULL; EPR_SPtrArray* field_infos = NULL; EPR_EDataTypeId data_type_id = e_tid_unknown; uint num_elems = 0; uint num_bytes = 0; uint more_count = 0; char* field_name = NULL; char* data_type = NULL; char* unit = NULL; char* description = NULL; int i; int rt_index; const struct RecordDescriptorTable* r_tables; int num_descr; int num_r_tables; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_read_record_info: product_id must not be NULL"); return NULL; } /* @DDDB */ if (strncmp(product_id->id_string, "MER", 3) == 0) { r_tables = dddb_meris_rec_tables; num_r_tables = EPR_NUM_MERIS_REC_TABLES; } else if (strncmp(product_id->id_string, "ATS", 3) == 0) { r_tables = dddb_aatsr_rec_tables; num_r_tables = EPR_NUM_AATSR_REC_TABLES; } else if (strncmp(product_id->id_string, "ASA", 3) == 0) { r_tables = dddb_asar_rec_tables; num_r_tables = EPR_NUM_ASAR_REC_TABLES; } else if (strncmp(product_id->id_string, "SAR", 3) == 0) { r_tables = dddb_asar_rec_tables; num_r_tables = EPR_NUM_ASAR_REC_TABLES; } else { epr_set_err(e_err_invalid_product_id, "epr_read_record_info: invalid product identifier"); return NULL; } rt_index = -1; for (i = 0; i < num_r_tables; i++) { if (dataset_id->record_descriptor == r_tables[i].descriptors) { rt_index = i; break; } } if (rt_index == -1) { epr_set_err(e_err_invalid_product_id, "epr_read_record_info: unknown record"); return NULL; } field_infos = epr_create_ptr_array(16); num_descr = r_tables[rt_index].num_descriptors; for (i = 0; i < num_descr; i++) { /* 1: field_name */ field_name = epr_clone_string(r_tables[rt_index].descriptors[i].id); /* 2: data_type_id */ data_type_id = r_tables[rt_index].descriptors[i].type; /* 3: unit */ unit = epr_clone_string(r_tables[rt_index].descriptors[i].unit); /* 4: num_elems */ num_bytes = r_tables[rt_index].descriptors[i].elem_size; /* 5: num_elems and more_count*/ /* @todo: check return value! and check epr_parse_value_count */ num_elems = epr_parse_value_count(product_id, r_tables[rt_index].descriptors[i].num_elem); more_count = 1; /* 6: description*/ description = epr_clone_string(r_tables[rt_index].descriptors[i].description); field_info = epr_create_field_info(data_type_id, description, field_name, num_elems, num_bytes, more_count, unit); epr_add_ptr_array_elem(field_infos, field_info); epr_free_string(field_name); epr_free_string(data_type); epr_free_string(unit); epr_free_string(description); } record_info = epr_create_record_info(dataset_id->dataset_name, field_infos); return record_info; } /* Function: epr_read_record_info Access: private API implementation helper Changelog: 2002/01/05 mp initial version */ /** * Reads the record information with the given file path and * returns the poiter at it. * * @param product_id the the product file identifier * @param dataset_name the name of the dataset * @param db_file_istream the DB-table file identifier * * @return the the pointer at the record information. */ /* EPR_SRecordInfo* epr_read_record_info(EPR_SProductId* product_id, EPR_SDatasetId* dataset_id, FILE* db_file_istream) } */ /* Function: epr_create_record Access: public API Changelog: 2002/01/23 mp initial version */ /** * Creates a new record instance from the dataset specified by the given * dataset name. * * @param the pointer at the record information. * must not be NULL * @return the new record instance * or NULL if an error occured. */ EPR_SRecord* epr_create_record_from_info(EPR_SRecordInfo* record_info) { EPR_SRecord* record = NULL; EPR_SFieldInfo* field_info = NULL; uint field_infos_index = 0; int field_infos_length; if (record_info == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_record_from_info: out of memory"); return NULL; } record = (EPR_SRecord*) calloc(1, sizeof(EPR_SRecord)); if (record == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_record: out of memory"); return NULL; } record->magic = EPR_MAGIC_RECORD; record->info = record_info; record->num_fields = record_info->field_infos->length; record->fields = (EPR_SField**) calloc(record->num_fields, sizeof(EPR_SField*)); if (record->fields == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_record: out of memory"); return NULL; } field_infos_length = (int)epr_get_ptr_array_length(record_info->field_infos); for (field_infos_index = 0; field_infos_index < record_info->field_infos->length; field_infos_index++) { field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(record_info->field_infos, field_infos_index); record->fields[field_infos_index] = epr_create_field(field_info); } return record; } const EPR_SField* epr_get_field_at(const EPR_SRecord* record, uint field_index){ EPR_SField* field = NULL; epr_clear_err(); if (record == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_at: record-identifier must not be NULL"); return NULL; } if ((field_index < 0) || (field_index >= record->num_fields)) { epr_set_err(e_err_index_out_of_range, "epr_get_field_at: field_index out of range"); return NULL; } field = record->fields[field_index]; return field; } uint epr_get_num_fields(const EPR_SRecord* record) { epr_clear_err(); if (record == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_at: record-identifier must not be NULL"); return (uint)-1; } return record->num_fields; } /** * Frees the memory allocated by the given record. * *

After calling this function the give record pointer gets * invalid and should not be used anymore. * * @param record the record to be released, if NULL * the function immediately returns */ void epr_free_record(EPR_SRecord* record) { EPR_SField* field = NULL; uint fields_index = 0; epr_clear_err(); if (record == NULL) return; if (record->fields != NULL) { for (fields_index = 0; fields_index < record->num_fields; fields_index++) { field = (EPR_SField*)record->fields[fields_index]; epr_free_field(field); } free(record->fields); record->fields = NULL; } /* Do NOT free record->info since many records can share the same record->info! */ record->info = NULL; record->num_fields = 0; free(record); } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dataset.c000644 015705 000000 00000025626 13505462014 027433 0ustar00sandwellwheel000000 000000 /* * $Id: epr_dataset.c,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_dataset.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" EPR_SDatasetId* epr_create_dataset_id(EPR_SProductId* product_id, const EPR_SDSD* dsd, const char* dataset_name, const struct RecordDescriptor* record_descriptor, const char* dsd_name, const char* description) { EPR_SDatasetId* dataset_id = (EPR_SDatasetId*) calloc(1, sizeof (EPR_SDatasetId)); if (dataset_id == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_dataset_id: out of memory"); return NULL; } dataset_id->magic = EPR_MAGIC_DATASET_ID; dataset_id->product_id = product_id; dataset_id->dsd = dsd; dataset_id->record_info = NULL; epr_assign_string(&dataset_id->dataset_name, dataset_name); dataset_id->record_descriptor = record_descriptor; epr_assign_string(&dataset_id->dsd_name, dsd_name); epr_assign_string(&dataset_id->description, description); return dataset_id; } /** * Release the memory allocated through a dataset ID. * * @param product_id the file identifier, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise */ void epr_free_dataset_id(EPR_SDatasetId* dataset_id) { if (dataset_id == NULL) return; /* Don't free the product ID, it is NOT owned by a dataset ID */ dataset_id->product_id = NULL; /* Don't free the record information, it is NOT owned by a dataset ID */ dataset_id->record_info = NULL; /* Don't free the DSD, it is NOT owned by a dataset ID */ dataset_id->dsd = NULL; epr_free_and_null_string(&dataset_id->dataset_name); epr_free_and_null_string(&dataset_id->dsd_name); epr_free_and_null_string(&dataset_id->description); free(dataset_id); } /** * Creates an array of dataset_id for the given ENVISAT product * * @param product_id the the product file identifier * @return the instance of the array */ EPR_SPtrArray* epr_create_dataset_ids(EPR_SProductId* product_id) { EPR_SPtrArray* dataset_ids = NULL; EPR_SDatasetId* dataset_id = NULL; const EPR_SDSD* dsd = NULL; uint dsd_index; int i; const struct DatasetDescriptorTable* p_tables; int pt_index; int num_descr; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "create_dataset_ids: product_id must not be NULL"); return NULL; } /* @DDDB */ p_tables = dddb_product_tables; pt_index = -1; for (i = 0; i < EPR_NUM_PRODUCT_TABLES; i++) { const char* id = p_tables[i].name; if (strncmp(product_id->id_string, id, 10) == 0) { if (product_id->meris_iodd_version == 5) { if (strcmp(id, "MER_RR__1P_IODD5") == 0 || strcmp(id, "MER_FR__1P_IODD5") == 0) { pt_index = i; } } else if (product_id->meris_iodd_version == 6) { if (strcmp(id, "MER_RR__2P_IODD6") == 0 || strcmp(id, "MER_FR__2P_IODD6") == 0) { pt_index = i; } } else { pt_index = i; } } if (pt_index != -1) { break; } } if (pt_index == -1) { epr_set_err(e_err_null_pointer, "create_dataset_ids: unknown product type"); return NULL; } dataset_ids = epr_create_ptr_array(16); num_descr = p_tables[pt_index].num_descriptors; for (i = 0; i < num_descr; i++) { for (dsd_index = 0; dsd_index < product_id->dsd_array->length; dsd_index++) { dsd = (EPR_SDSD*)epr_get_ptr_array_elem_at(product_id->dsd_array, dsd_index); if (strncmp(dsd->ds_name, p_tables[pt_index].descriptors[i].ds_name, strlen(epr_strip_string_r(dsd->ds_name))) == 0) { dataset_id = epr_create_dataset_id(product_id, dsd, p_tables[pt_index].descriptors[i].id, p_tables[pt_index].descriptors[i].rec_descriptor, p_tables[pt_index].descriptors[i].ds_name, p_tables[pt_index].descriptors[i].description); epr_add_ptr_array_elem(dataset_ids, dataset_id); break; } } } return dataset_ids; } const char* epr_get_dataset_name(EPR_SDatasetId* dataset_id) { epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_dataset_name: band_id must not be NULL"); return NULL; } return epr_trim_string(dataset_id->dataset_name); } uint epr_get_num_records(const EPR_SDatasetId* dataset_id) { epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_invalid_dataset_name, "epr_get_num_records: invalid dataset name"); return (uint)-1; } return dataset_id->dsd->num_dsr; } const EPR_SDSD* epr_get_dsd(const EPR_SDatasetId* dataset_id) { epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_invalid_dataset_name, "epr_get_dsd: invalid dataset name"); return NULL; } return dataset_id->dsd; } const char* epr_get_dsd_name(const EPR_SDatasetId* dataset_id) { epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_invalid_dataset_name, "epr_get_dsd_name: invalid dataset name"); return NULL; } return epr_trim_string(dataset_id->dsd_name); } uint epr_get_dataset_offset(EPR_SDatasetId* dataset_id) { if (dataset_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_dataset_offset: dataset_id must not be NULL"); return (uint)0; } return dataset_id->dsd->ds_offset; } /*********************************** RECORD ***********************************/ /* Function: epr_create_record Access: public API Changelog: 2002/01/23 mp initial version */ /** * Creates a new record for the dataset given by the specified * dataset identifier. */ EPR_SRecord* epr_create_record(EPR_SDatasetId* dataset_id) { EPR_SRecord* record = NULL; epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_illegal_arg, "epr_create_record: dataset ID must not be NULL"); return NULL; } if (dataset_id->record_info == NULL) { dataset_id->record_info = epr_get_record_info(dataset_id); } record = epr_create_record_from_info(dataset_id->record_info); if (record == NULL) { epr_set_err(e_err_invalid_record_name, "epr_create_record: invalid record name"); return NULL; } return record; } /** * Reads a full record from ENVISAT product file. */ EPR_SRecord* epr_read_record(EPR_SDatasetId* dataset_id, uint record_index, EPR_SRecord* record) { uint field_index; uint dsd_offset; uint record_size; uint data_type_size; uint elements_to_read; uint elements_read; EPR_SField* field = NULL; epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_invalid_dataset_name, "epr_read_record: invalid dataset name"); return NULL; } if ((record_index < 0) || (record_index >= dataset_id->dsd->num_dsr)) { epr_set_err(e_err_invalid_value, "epr_read_record: invalid record_index parameter, must be >=0 and info != dataset_id->record_info) { epr_set_err(e_err_invalid_record_name, "epr_read_record: invalid record name"); return NULL; } /*READ FILE with: dataset_id->product_id->istream after the setting it to begin*/ rewind(dataset_id->product_id->istream); /*GET OFFSET*/ dsd_offset = dataset_id->dsd->ds_offset; record_size = record->info->tot_size; if (record_size != dataset_id->dsd->dsr_size) { //epr_set_err(e_err_invalid_data_format, // "epr_read_record: wrong record size"); //return NULL; } /* Set file pointer to begin of demanded record */ if (fseek(dataset_id->product_id->istream, dsd_offset + record_size * record_index, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_read_record: file seek failed"); return NULL; } for (field_index = 0; field_index < record->num_fields; field_index++) { field = record->fields[field_index]; elements_to_read = field->info->num_elems ; data_type_size = epr_get_data_type_size(field->info->data_type_id); assert(data_type_size != 0); assert(field->elems != NULL); if (elements_to_read * data_type_size != field->info->tot_size) { /*epr_log(e_log_info, "Spare");*/ data_type_size = field->info->tot_size / elements_to_read; } elements_read = fread(field->elems, data_type_size, elements_to_read, dataset_id->product_id->istream); if (elements_read != elements_to_read) { epr_set_err(e_err_file_read_error, "epr_read_record: file read failed"); return NULL; } /* * SWAP bytes on little endian (LE) order architectures (I368, Pentium Processors). * ENVISAT products are stored in big endian (BE) order. */ if (epr_api.little_endian_order) { epr_swap_endian_order(field); } } return record; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_ptrarray.h000644 015705 000000 00000007563 13505462014 027657 0ustar00sandwellwheel000000 000000 /* * $Id: epr_ptrarray.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_PTRARRAY_H_INCL #define EPR_PTRARRAY_H_INCL #ifdef __cplusplus extern "C" { #endif #include /** * The EPR_PtrArray structure represents a dynamic * array of pointers. */ struct EPR_PtrArray { /** The current capacity */ unsigned int capacity; /** The current length */ unsigned int length; /** The pointer elements */ void** elems; }; typedef struct EPR_PtrArray EPR_SPtrArray; /** * Creates a new dynamic pointer array instance. * * @param capacity the initial capacity * @return a new dynamic pointer array instance with the given capacity or * NULL if memory could not be allocated */ EPR_SPtrArray* epr_create_ptr_array(unsigned int capacity); /** * Frees the memory allocated through the given dynamic pointer array. * *

After calling this function the give record pointer array gets * invalid and should not be used anymore. * * @param ptr_array the pointer array to be released, if NULL * the function immediately returns */ void epr_free_ptr_array(EPR_SPtrArray* ptr_array); /** * Special application of the epr_free_ptr_array for * arrays that contain dynamically allocated strings (type char*). * *

For each element in the given array the epr_free_string * function is called. * * @param char_ptr_array an array containing strings */ void epr_free_char_ptr_array(EPR_SPtrArray* char_ptr_array); /** * Adds a new pointer to the given pointer array. * The function automatically grows the array if necessary. * * @param ptr_array the pointer array to which to add the new element, * must not be NULL. * @param elem the element to be added * @return zero for success, an error code otherwise */ int epr_add_ptr_array_elem(EPR_SPtrArray* ptr_array, void* elem); /** * Grows the given pointer array so that is has the given capacity. * The length of the array is not touched by this function. * * @param ptr_array the pointer array to which to add the new element, * must not be NULL. * @param capacity the new capacity * @return zero for success, an error code otherwise */ int epr_grow_ptr_array(EPR_SPtrArray* ptr_array, unsigned int capacity); /** * Returns the length of the given pointer array. * @param ptr_array the pointer array, must not be NULL. * @return the length of the given pointer array */ unsigned int epr_get_ptr_array_length(const EPR_SPtrArray* ptr_array); /** * Returns the capacity of the given pointer array. * @param ptr_array the pointer array, must not be NULL. * @return the capacity of the given pointer array */ unsigned int epr_get_ptr_array_capacity(const EPR_SPtrArray* ptr_array); /** * Gets the element with the specified index of the given pointer array. * @param ptr_array the pointer array, must not be NULL. * @param index the zero-based index, must be less than the array's length * @return the element at the given index */ void* epr_get_ptr_array_elem_at(const EPR_SPtrArray* ptr_array, unsigned int index); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_PTRARRAY_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_field.h000644 015705 000000 00000004114 13505462014 027063 0ustar00sandwellwheel000000 000000 /* * $Id: epr_field.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_FIELD_H_INCL #define EPR_FIELD_H_INCL #ifdef __cplusplus extern "C" { #endif #include /* just to get the ANSI-C type FILE */ /** * The EPR_FieldInfo structure contains meta information * about a particular record field. */ struct EPR_FieldInfo { /** * This field's name. */ char* name; /** * This field's internal data type. */ EPR_EDataTypeId data_type_id; /** * The number of data elements contained in this field (field-width). */ uint num_elems; /** * This field's unit. Optional, can be NULL. */ char* unit; /** * This field's description. Optional, can be NULL. */ char* description; /** * The total size in bytes of all data elements of a field. * tot_size is a derived variable, it is computed at * runtime and not stored in the DSD-DB. */ uint tot_size; }; EPR_SFieldInfo* epr_create_field_info(EPR_EDataTypeId data_type_id, char* description, char* field_name, uint num_elems, uint num_bytes, uint more_count, char* unit); EPR_SField* epr_create_field(EPR_SFieldInfo* field_info); void epr_free_field_info(EPR_SFieldInfo* field_info); void epr_free_field(EPR_SField* field); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_FIELD_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_typconv.c000644 015705 000000 00000070430 13505462014 027501 0ustar00sandwellwheel000000 000000 /* * $Id: epr_typconv.c,v 1.2 2009-03-27 10:25:54 sabine Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_field.h" /*********************************** TYPE CONVERSION ***********************************/ /** * Interpretes a memory as a char value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the char typed element * or error_code if an error occured. */ char epr_get_field_elem_as_char(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_char: invalid field name"); return (char)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_char: invalid elem_index parameter"); return (char)0; } if (field->info->data_type_id != e_tid_char) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_char: invalid type"); return (char)0; } return ((char*) field->elems)[elem_index]; } /** * Interpretes a memory data as a char data * * @param field the pointer at the array to convert * * @return the char typed element * or NULL if an error occured. */ const char* epr_get_field_elems_char(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_chars: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_char) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_chars: invalid type"); return NULL; } return (char*) field->elems; } /** * Interpretes a memory as a uchar value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the uchar typed element * or error_code if an error occured. */ uchar epr_get_field_elem_as_uchar(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_uchar: invalid field name"); return (uchar)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_uchar: invalid elem_index parameter"); return (uchar)0; } if (field->info->data_type_id != e_tid_uchar) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_uchar: invalid type"); return (uchar)0; } return ((uchar*) field->elems)[elem_index]; } /** * Interpretes a memory data as a uchar data * * @param field the pointer at the array to convert * * @return the uchar typed element * or NULL if an error occured. */ const uchar* epr_get_field_elems_uchar(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_uchars: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_uchar) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_uchars: invalid type"); return NULL; } return (uchar*) field->elems; } /** * Interpretes a memory as a short value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the short typed element * or error_code if an error occured. */ short epr_get_field_elem_as_short(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_short: invalid field name"); return (short)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_short: invalid elem_index parameter"); return (short)0; } if (field->info->data_type_id == e_tid_uchar) { return (short)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (short)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_short) { return (short)((short*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_short: invalid type"); return (short)0; } /** * Interpretes a memory data as a short data * * @param field the pointer at the array to convert * * @return the short typed element * or NULL if an error occured. */ const short* epr_get_field_elems_short(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_shorts: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_short) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_shorts: invalid type"); return NULL; } return (short*) field->elems; } /** * Interpretes a memory as a ushort value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the ushort typed element * or error_code if an error occured. */ ushort epr_get_field_elem_as_ushort(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_ushort: invalid field name"); return (ushort)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_ushort: invalid elem_index parameter"); return (ushort)0; } if (field->info->data_type_id == e_tid_uchar) { return (ushort)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (ushort)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_ushort) { return (ushort)((ushort*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_ushort: invalid type"); return (ushort)0; } /** * Interpretes a memory data as a ushort data * * @param field the pointer at the array to convert * * @return the ushort typed element * or NULL if an error occured. */ const ushort* epr_get_field_elems_ushort(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_ushorts: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_ushort) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_ushorts: invalid type"); return NULL; } return (ushort*) field->elems; } /** * Interpretes a memory as a int value. * *

If an error occurs the method returns 0 (zero). * Whether an error really occured when zero is returned can by determined by * using the epr_get_last_err_code function. * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return a int value */ int epr_get_field_elem_as_int(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_long: invalid field name"); return (int)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_long: invalid elem_index parameter"); return (int)0; } if (field->info->data_type_id == e_tid_uchar) { return (int)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (int)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_ushort) { return (int)((ushort*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_short) { return (int)((short*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_int) { return (int)((int*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_long: invalid type"); return (int)0; } /** * Interpretes a memory data as a int data * * @param field the pointer at the array to convert * * @return the int typed element * or NULL if an error occured. */ const int* epr_get_field_elems_int(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_longs: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_int) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_longs: invalid type"); return NULL; } return (int*) field->elems; } /** * Interpretes a memory as a uint value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the uint typed element * or error_code if an error occured. */ uint epr_get_field_elem_as_uint(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_uint: invalid field name"); return (uint)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_uint: invalid elem_index parameter"); return (uint)0; } if (field->info->data_type_id == e_tid_uint) { return (uint)((uint*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_uchar) { return (uint)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (uint)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_ushort) { return (uint)((ushort*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_short) { return (uint)((short*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_uint: invalid type"); return (uint)0; } /** * Interpretes a memory data as a uint data * * @param field the pointer at the array to convert * * @return the uint typed element * or NULL if an error occured. */ const uint* epr_get_field_elems_uint(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_uints: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_uint) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_uints: invalid type"); return NULL; } return (uint*) field->elems; } /** * Interpretes a memory as a float value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the float typed element * or error_code if an error occured. */ float epr_get_field_elem_as_float(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_float: invalid field name"); return 0.0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_float: invalid elem_index parameter"); return 0.0; } if (field->info->data_type_id == e_tid_float) { return (float)((float*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_uchar) { return (float)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (float)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_ushort) { return (float)((ushort*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_short) { return (float)((short*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_uint) { return (float)((uint*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_int) { return (float)((int*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_float: invalid type"); return 0.0; } /** * Interpretes a memory data as a float data * * @param field the pointer at the array to convert * * @return the float typed element * or NULL if an error occured. */ const float* epr_get_field_elems_float(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_floats: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_float) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_floats: invalid type"); return NULL; } return (float*) field->elems; } /** * Interpretes a memory as a double value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the double typed element * or error_code if an error occured. */ double epr_get_field_elem_as_double(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_double: invalid field name"); return 0.0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elems_as_double: invalid elem_index parameter"); return 0.0; } if (field->info->data_type_id == e_tid_double) { return (double)((double*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_float) { return (double)((float*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_uchar) { return (double)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (double)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_ushort) { return (double)((ushort*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_short) { return (double)((short*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_uint) { return (double)((uint*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_int) { return (double)((int*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_double: invalid type"); return 0.0; } /** * Interpretes a memory data as a double data * * @param field the pointer at the array to convert * * @return the double typed element * or NULL if an error occured. */ const double* epr_get_field_elems_double(const EPR_SField* field) { epr_clear_err(); epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_doubles: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_double) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_doubles: invalid type"); return NULL; } return (double*) field->elems; } /** * Interpretes a memory data as a short data * * @param field the pointer at the array to convert * @param time the pointer at the time structure to get * * @return the time [days, seconds, microseconds] * or NULL if an error occured. */ const EPR_STime* epr_get_field_elem_as_mjd(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_mjd: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_time) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_mjd: invalid type"); return NULL; } return (const EPR_STime*) field->elems; } /** * Interpretes a memory data as a string. * * @param field the pointer at the array to convert * * @return the char typed element * or NULL if an error occured. */ const char* epr_get_field_elem_as_str(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_str: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_string) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_str: invalid type"); return NULL; } return (const char*) field->elems; } /** * Copies the data of the given field into the given buffer of double * elements. The actual number of elements copied is the minimum of the given * number of elements (the buffer's size) and the actual number of elements contained * in the field. *

If the actual field data type is not double the function automatically * performs the conversion. * * @param field the field from which to copy the elements * @param buffer the buffer in which to copy the data * @param num_elems the number of elements in the given buffer * @return the actual number of elements copied */ uint epr_copy_field_elems_as_doubles(const EPR_SField* field, double* buffer, uint num_elems) { uint num_elems_min = 0; uint i; epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_doubles: invalid field name"); return num_elems_min; } num_elems_min = num_elems; if (field->info->num_elems < num_elems_min) { num_elems_min = field->info->num_elems; } if (field->info->data_type_id == e_tid_uchar) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((uchar*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_char) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((char*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_ushort) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((ushort*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_short) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((short*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_uint) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((uint*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_int) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((int*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_float) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((float*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_double) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((double*) field->elems)[i]; } } else { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_double: invalid type"); return 0; } return num_elems_min; } /** * Copies the data of the given field into the given buffer of float * elements. The actual number of elements copied is the minimum of the given * number of elements (the buffer's size) and the actual number of elements contained * in the field. *

If the actual field data type is not float the function automatically * performs the conversion. * * @param field the field from which to copy the elements * @param buffer the buffer in which to copy the data * @param num_elems the number of elements in the given buffer * @return the actual number of elements copied */ uint epr_copy_field_elems_as_floats(const EPR_SField* field, float* buffer, uint num_elems) { uint num_elems_min = 0; uint i; epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_copy_field_elems_as_floats: invalid field name"); return num_elems_min; } num_elems_min = num_elems; if (field->info->num_elems < num_elems_min) { num_elems_min = field->info->num_elems; } if (field->info->data_type_id == e_tid_uchar) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((uchar*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_char) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((char*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_ushort) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((ushort*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_short) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((short*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_uint) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((uint*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_int) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((int*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_float) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((float*) field->elems)[i]; } } else { epr_set_err(e_err_invalid_data_format, "epr_copy_field_elems_as_floats: invalid type"); return 0; } return num_elems_min; } /** * Copies the data of the given field into the given buffer of int * elements. The actual number of elements copied is the minimum of the given * number of elements (the buffer's size) and the actual number of elements contained * in the field. *

If the actual field data type is not int the function automatically * performs the conversion. * * @param field the field from which to copy the elements * @param buffer the buffer in which to copy the data * @param num_elems the number of elements in the given buffer * @return the actual number of elements copied */ uint epr_copy_field_elems_as_longs(const EPR_SField* field, int* buffer, uint num_elems) { uint num_elems_min = 0; uint i; epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_copy_field_elems_as_longs: invalid field name"); return num_elems_min; } num_elems_min = num_elems; if (field->info->num_elems < num_elems_min) { num_elems_min = field->info->num_elems; } if (field->info->data_type_id == e_tid_uchar) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (int)((uchar*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_char) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (int)((char*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_ushort) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (int)((ushort*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_short) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (int)((short*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_int) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (int)((int*) field->elems)[i]; } } else { epr_set_err(e_err_invalid_data_format, "epr_copy_field_elems_as_longs: invalid type"); return 0; } return num_elems_min; } /** * Copies the data of the given field into the given buffer of uint * elements. The actual number of elements copied is the minimum of the given * number of elements (the buffer's size) and the actual number of elements contained * in the field. *

If the actual field data type is not uint the function automatically * performs the conversion. * * @param field the field from which to copy the elements * @param buffer the buffer in which to copy the data * @param num_elems the number of elements in the given buffer * @return the actual number of elements copied */ uint epr_copy_field_elems_as_uints(const EPR_SField* field, uint* buffer, uint num_elems) { uint num_elems_min = 0; uint i; epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_copy_field_elems_as_uints: invalid field name"); return num_elems_min; } num_elems_min = num_elems; if (field->info->num_elems < num_elems_min) { num_elems_min = field->info->num_elems; } if (field->info->data_type_id == e_tid_uchar) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (uint)((uchar*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_char) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (uint)((char*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_ushort) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (uint)((ushort*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_short) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (uint)((short*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_int) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (uint)((uint*) field->elems)[i]; } } else { epr_set_err(e_err_invalid_data_format, "epr_copy_field_elems_as_uints: invalid type"); return 0; } return num_elems_min; } /***************************************************************************************/ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_swap.h000644 015705 000000 00000002563 13505462014 026760 0ustar00sandwellwheel000000 000000 /* * $Id: epr_swap.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_SWAP_H_INCL #define EPR_SWAP_H_INCL #include /* just to get the ANSI-C type FILE */ #ifdef __cplusplus extern "C" { #endif void byte_swap_short(short *buffer, uint number_of_swaps); void byte_swap_ushort(ushort* buffer, uint number_of_swaps); void byte_swap_long(int *buffer, uint number_of_swaps); void byte_swap_uint(uint* buffer, uint number_of_swaps); void byte_swap_float(float* buffer, uint number_of_swaps); void epr_swap_endian_order(const EPR_SField* field); int epr_is_big_endian_order(); int epr_is_little_endian_order(); #ifdef __cplusplus } #endif #endif /* EPR_SWAP_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_string.h000644 015705 000000 00000003756 13505462014 027321 0ustar00sandwellwheel000000 000000 /* * $Id: epr_string.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_STRING_H_INCL #define EPR_STRING_H_INCL #ifdef __cplusplus extern "C" { #endif #include #include #include char* epr_assign_string(char** str_clone, const char* str); char* epr_create_string(unsigned int length); char* epr_clone_string(const char* str); void epr_cut_string(char** sub_str, const char* str, int start, int length); char* epr_sub_string(const char* str, int start, int length); epr_boolean epr_equal_names(const char* name1, const char* name2); void epr_free_string(char* str); char* epr_str_tok(const char* str, const char* seps, int* pos); char* epr_str_tok_tok(const char* str, const char* seps, const char* exceptions, uint* pos); int epr_find_first_not_white(const char* str); int epr_find_last_not_white(const char* str); char* epr_trim_string(char* str); char* epr_strip_string_r(char* str); int epr_if_no_letters(const char* str); int epr_numeral_suspicion(const char* str); int epr_get_positive_int(const char* str); void epr_free_and_null_string(char** str); int epr_if_no_scaling(const char* str); /** * Non-ANSI string compare (ignores case). */ int stricmp(const char* s1, const char* s2); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_STRING_H_INCL */ GMTSAR_V5.7/preproc/ENVI_preproc/Dop_orbit/Makefile000644 015705 000000 00000000577 13505462014 023100 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = calc_dop_orb_envi CSRCS = calc_dop_orb_envi.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../../ALOS_preproc/include CLIBS = -L../../ALOS_preproc/lib -L../lib -lENVI -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ENVI_preproc/Dop_orbit/calc_dop_orb_envi.c000644 015705 000000 00000004646 13505462014 025234 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Load the PRM file and calculate doppler centroid * *******************************************************************************/ #include "image_sio.h" #include "lib_functions.h" void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); void ENVI_ldr_orbit(struct ALOS_ORB *, struct PRM *); int main(int argc, char **argv) { struct PRM *prm; struct ALOS_ORB *orb; FILE *prmfile, *ldrfile, *outfile; double re; if ((argc > 5) || (argc < 4)) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: calc_dop_orb_envi PRM output earth_radius " "[doppler_centroid]\n"); fprintf(stderr, "\n"); return (0); } if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); fprintf(stderr, "Successfully opened %s \n", argv[1]); prm = malloc(sizeof(struct PRM)); /* read earth radius */ re = atof(argv[3]); /* get the PRM parameters */ get_sio_struct(prmfile, prm); /*fprintf(stderr,"%lf", prm->near_range);*/ /* get the orbit data */ ldrfile = fopen(prm->led_file, "r"); if (ldrfile == NULL) die("can't open ", prm->led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ENVI_orb(ldrfile, prm, orb); /* get the orbit parameters */ ENVI_ldr_orbit(orb, prm); /* write it all out */ if ((outfile = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); fprintf(outfile, "SC_vel = %lf \n", prm->vel); if (re == 0) { fprintf(outfile, "earth_radius = %lf \n", prm->RE); fprintf(outfile, "SC_height = %lf \n", prm->ht); fprintf(outfile, "SC_height_start = %lf \n", prm->ht_start); fprintf(outfile, "SC_height_end = %lf \n", prm->ht_end); } else if (re > 0) { fprintf(outfile, "earth_radius = %lf \n", re); fprintf(outfile, "SC_height = %lf \n", prm->ht + prm->RE - re); fprintf(outfile, "SC_height_start = %lf \n", prm->ht_start + prm->RE - re); fprintf(outfile, "SC_height_end = %lf \n", prm->ht_end + prm->RE - re); } else die("Wrong input earth radius", argv[3]); /* Calculate doppler centroid */ if (argc == 4) { calc_dop(prm); fprintf(outfile, "fd1 = %lf\n", prm->fd1); } if (argc == 5) fprintf(outfile, "fd1 = %lf\n", atof(argv[4])); fclose(prmfile); fclose(ldrfile); fclose(outfile); exit(0); } GMTSAR_V5.7/preproc/ENVI_preproc/Dop_orbit/calc_dop_orb_envi000755 015705 000000 00000066344 13507242216 025023 0ustar00sandwellwheel000000 000000  H__PAGEZERO(__TEXTPP__text__TEXTw=__stubs__TEXThEhE__stub_helper__TEXTEE__cstring__TEXTGG__const__TEXTOO__unwind_info__TEXTOxO__DATAPP__nl_symbol_ptr__DATAPP__got__DATAPP__la_symbol_ptr__DATA(P(P__common__DATAP\H__LINKEDIT`` "0``X```adF j P**8i5 /usr/lib/dyldEY*A9ߍԌ 2   *( 8/usr/lib/libSystem.B.dylib&d()dUHAWAVAUATSHtKHHH3 =H H=>H=H3 k=1H[A\A]A^A_]IH~H5>9=HEHuIwH=> HGH8IWH5>1 =*=II<EH}L MIƠH5q>L<IHuH=>L 0<ILLHLLSIH5T>w<IHuIwH= >[ AH5)>LK<fWMf.u^z\AH5>L <AH5$>L<AH5*>L;AH5=LE;AAX\EH5=L;AAX\EH5=Lr;AAX\EH5=LJ;u-IwH==) tu-Lg&Ap I :H5=L:H}:L:L:1:UHAWAVAUATSHXIIHLUH5`=HUHMLELM1AR:HAHcEAGMAOMAO HMIOHMIOHk8:IG(HL]LuH]LmLUH5<LMLeLHUHMLEASMAVSMAUAR&:H0E1@IG(J(HEIO(JD)HEIO(JD)HEIO(JD)HEIO(JD) HEIO(JD)(HEIO(JD)0HH}H5I<HUHMLELMH]SATH]SAVH]S|9H0I8YHX[A\A]A^A_]ÐUHAWAVAUATSHHIL%DA<$t HyCHH=;9Y8B`)*X*^X^XX]f(UL8L,$HUHMLXL0LHf(M^L,$HUHML`LHE(M5L,$HUHMLELHEMM A<$L5sBI>Up]hXH5:E(7I>Ux])@eeH5:EM7I>UU]]`H5:E(W7Uuf(@pxhEA<$%EmeM]UuXXfWfTfUfVX\\\u|L5AI>H5:6I>H5:g6I>H5!:N6I>H5):56I>H51:6Hĸ[A\A]A^A_]UHAWAVAUATSH@ML@IHf(IIH7@HHEDž|HOA8t@H@HH=95AAAH >A^8DždXYx> x>X` l>XHHHHxLI&HHHL`Iy&H H(H0LIQ&f)`Yf)пYXf( f(fYf\fY%=f)X0\Y ]=f(f(Yf(YXPf(YXQf)AfW1f.WQf)D@AfA f(^X83!3YHY^YY^XQ <^A $f(f(\Hf(`fпf^f)MXEf(f(f^f)MP^EH}HuHpf(f(Yf(YXY\f(XY^f(2n2qMf(fW;pYEY\YXxYEY\YXYUYe\YXf)E1LLHxD)W*Y8B0XLHLLI #\\YYf(\XYXWQ\BIHcI9IH0HHHL|1(HHMHXYQH@H:HH;EuH@[A\A]A^A_]/UH]DUH]DUHHHHg:H8H5>41//@UHGOYFYN\OYFY\JOYFY\B]UHp)X 8(^Y8W*X^XW*f(X^XhW*^X]UHAWAVAUATSHxIH29HHEH:H5 3HH1Hh.fIHpIHxIHIHIHIHIHI HIHI HI(HI8HLLL-%5DLH5"2-u=LL-;u-H8H81LLH 1M-f.fLH51-u=HpL-;u)H7H81LLH 1M2-LH51]-u=HxLP-;u)Hj7H81LLH `1M,LH5S1 -u=HL-;u)H7H81LLH 1M,LH51,u=HL,;u)H6H81LLH 0MB,LH50m,u=HL`,;u)Hz6H81LLH 0M+LH50,u=HL,;u)H*6H81LLH O0M+LH5=0+u=HL+;u)H5H81LLH 0MR+LH5/}+u=HLp+;u)H5H81LLH /M+LH5/-+u=HL +;u)H:5H81LLH }/M*LH5l/*u=HL*;u)H4H81LLH 6/Mb*LH5#/*u=HL*;u)H4H81LLH .M*LH5.=*u=HL0*;u)HJ4H81LLH .M)ILH5.)uJL)AA}u4H3H81H50LH O.MAd)f.LH56.)uML')AA}u7H3H81H50LH -MA)f.LH5--)uML(ALA}u7H63H81H5!0LH -MA(f.LH5-(uMLg(APA}u7H2H81H5/LH Q-MAG(f.LH5C-m(uML(ATA}u7Hv2H81H5a/LH -MA'f.LH5, (uML'AXA}u7H2H81H5/LH ,MA'f.LH5,'uMLG'A\A}u7H1H81H5.LH \,MA''f.LH5G,M'uML&A`A}u7HV1H81H5A.LH ,MA&f.LH5+&uML&AA}u7H0H81H5-LH +MAg&f.LH5+&uML'&AlA}u7H0H81H5-LH b+MA&f.LH5J+-&uML%AdA}u7H60H81H5!-LH +MA%f.LH5*%uMLg%AhA}u7H/H81H5,LH *MAG%f.LH5*m%uML%AA}u7Hv/H81H5a,LH d*MA$f.LH5O* %uML$ApA}u7H/H81H5,LH *MA$f.LH5)$uMLG$AtA}u7H.H81H5+LH )MA'$f.LH5)M$uML#AxA}u7HV.H81H5A+LH _)MA#f.LH5D)#uML#AtA}u7H-H81H5*LH (MAg#f.LH5(#uML'#AxA}u7H-H81H5*LH (MA#f.LH5(-#uML"AA}u7H6-H81H5!*LH T(MA"f.LH5=("LuJL^"A;u4H,H8H5)LH 'MI"f.DLH5'm"L-x)uFL!A;u0Hq,H8H5p)LH 'M!f.LH5' "u=L!A;u'H,H8H5)LH ^'M!fLH5T'!u=LQ!A;u'H+H8H5(LH 'MMBY;MXMEIM9uHEHUHMHH9HEH)HE1HEHMf.E1f.}0HUAHML<W*ECHps E1fE1H]LmDEBMXEECBDMXEECBDMXEECBDMXECIM9pHMHtQHEN4E1f.fECM5HMMXMECIL9uIHEI9HUHHHHuH9H|H]HLuLHUHLHx[A\A]A^A_]H HH== .w=H=~ y'H HH= H HH= fUHAWAVAUATSHULc9EMEAMM)AE1WMVLM9J Bf.u ^1AtKfHBY\H\BY\HI9uMtH BY\BY \HL9MIMM9.BDJDB^DH]BDEMIN NJ HCHEHGHEE1DHMLMLUDD)D9}SE\$HcMIAtNDfWJ4H4B Y XHuAs%MIfWfWAEA)HEHHuH 1f.NLLMC YLH\LBYTXH\LBY\LXCYXXHA9uH]LMLUHMC \JKB^ B IM9[A\A]A^A_]Ð% % % % % % % % % % % % % % % % % % % % % % % % L AS% hhh%h=hIhUhchoh{hhhxhnhdhZhPhFh=E POc0m P P P QB000/ p5 9-7JZkqP=z Q Q Q Q 4 Q (Q 0Q 8Q @Q  +6<BJPV\dkt{*+,0123456789:;<=>?@ABCDE@-./*+,0123456789:;<=>?@ABCD _ALOS_format_Cabs_Cadd_Cexp_Cmul_Conjg_ENVI_ldr_orbit_RCmul_SAR_mode__mh_execute_header_calc_dop_calc_height_velocity_envi_cross3__debug_die_dopp_force_slope_forced_slope_gauss_jordan_get_double_get_int_get_seconds_get_sio_struct_get_string_hermite_c_interpolate_ALOS_orbit_interpolate_ALOS_orbit_slow_is_big_endian__is_big_endian___main_polyfit_prefix_off_quad_pol_quiet_flag_rbias_read_ENVI_orb_read_data_roi_slc_fact_swap_tbias_verbose___bzero___sincos_stret___stack_chk_fail___stack_chk_guard___stderrp___stdoutp_acos_asin_atan2f_atof_atoi_exit_fclose_fopen_fprintf_fputc_fread_free_fscanf_fwrite_hypot_malloc_pow_puts_sin_strcmp_strcpydyld_stub_binderGMTSAR_V5.7/preproc/ENVI_preproc/lib_src/read_ENVI_orb.c000644 015705 000000 00000002250 13505462014 023664 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); void read_ENVI_orb(FILE *ldrfile, struct PRM *prm, struct ALOS_ORB *orb) { int n; int nd, iy, id; double isec, idsec, px, py, pz, vx, vy, vz; /* open each ldrfile and read into structure r */ fscanf(ldrfile, "%d %d %d %lf %lf", &nd, &iy, &id, &isec, &idsec); orb->itype = 0; orb->nd = nd; orb->iy = iy; orb->id = id; orb->sec = isec; orb->dsec = idsec; orb->points = (struct ORB_XYZ *)malloc(orb->nd * sizeof(struct ORB_XYZ)); n = 0; while (fscanf(ldrfile, "%d %d %lf %lf %lf %lf %lf %lf %lf", &iy, &id, &isec, &px, &py, &pz, &vx, &vy, &vz) != EOF) { orb->points[n].pt = 0.0; orb->points[n].px = px; orb->points[n].py = py; orb->points[n].pz = pz; orb->points[n].vx = vx; orb->points[n].vy = vy; orb->points[n].vz = vz; n++; } /*fprintf(stderr,"debugging the readleader file\n"); for (n=0; nnd; n++){ fprintf(stderr, "%d %lf %lf %lf %lf %lf %lf %lf \n",n,orb->points[n].pt, orb->points[n].px, \ orb->points[n].py,orb->points[n].pz,orb->points[n].vx,orb->points[n].vy,orb->points[n].vz); } */ } GMTSAR_V5.7/preproc/ENVI_preproc/lib_src/ENVI_ldr_orbit.c000644 015705 000000 00000013740 13505462014 024075 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Modified from ALOS_ldr_orbit.c * The only difference is that ra and rc is *reversed. Do this because it seems * reversed but don't want to mess ALOS up. *So make ENVI one for now * ********************************************************************************/ /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 07/13/08 added SC_height_start and * SC_height_end parameters * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #define FACTOR 1000000 void calc_height_velocity_envi(struct ALOS_ORB *, struct PRM *, double, double, double *, double *, double *, double *, double *); void ENVI_ldr_orbit(struct ALOS_ORB *orb, struct PRM *prm) { double t1, t2; double re, height, vg; double re_c, re_start, re_end, vg_start, vg_end, vtot, rdot; double height_start, height_end; if (verbose) fprintf(stderr, "ALOS_ldr_orbit\n"); t1 = (86400.0) * prm->clock_start + (prm->nrows - prm->num_valid_az) / (2.0 * prm->prf); t2 = t1 + prm->num_patches * prm->num_valid_az / prm->prf; calc_height_velocity_envi(orb, prm, t1, t1, &height_start, &re_start, &vg_start, &vtot, &rdot); calc_height_velocity_envi(orb, prm, t2, t2, &height_end, &re_end, &vg_end, &vtot, &rdot); calc_height_velocity_envi(orb, prm, t1, t2, &height, &re_c, &vg, &vtot, &rdot); // fd_orbit = -2.0*rdot/prm->lambda; if (verbose) { fprintf(stderr, " t1 %lf t1 %lf height_start %lf re_start %lf vg_start%lf\n", t1, t1, height_start, re_start, vg_start); fprintf(stderr, " t1 %lf t2 %lf height %lf re_c %lf vg %lf\n", t1, t2, height, re_c, vg); fprintf(stderr, " t2 %lf t2 %lf height_end %lf re__end %lf vg_end %lf\n", t2, t2, height_end, re_end, vg_end); } prm->vel = vg; /* use the center earth radius unless there is a value from the command line */ re = re_c; if (prm->RE > 0.) re = prm->RE; prm->RE = re; prm->ht = height + re_c - re; prm->ht_start = height_start + re_start - re; prm->ht_end = height_end + re_end - re; /* write it all out */ if (verbose) { fprintf(stdout, "SC_vel = %lf \n", prm->vel); fprintf(stdout, "earth_radius = %lf \n", prm->RE); fprintf(stdout, "SC_height = %lf \n", prm->ht); fprintf(stdout, "SC_height_start = %lf \n", prm->ht_start); fprintf(stdout, "SC_height_end = %lf \n", prm->ht_end); } } /*---------------------------------------------------------------*/ /* from David Sandwell's code */ void calc_height_velocity_envi(struct ALOS_ORB *orb, struct PRM *prm, double t1, double t2, double *height, double *re2, double *vg, double *vtot, double *rdot) { int k, ir, nt, nc = 3; double xe, ye, ze; double xs, ys, zs; double x1, y1, z1; double x2, y2, z2; double vx, vy, vz, vs, rs; double rlat; // double rlatg; double st, ct, arg, re; double a[3], b[3], c[3]; double time[1000], rng[1000], d[3]; double t0, ro, ra, rc, dt; if (verbose) fprintf(stderr, " ... calc_height_velocity_envi\n"); ro = prm->near_range; /* ra and rc seems revsersed, but don't want to change ALOS */ ra = prm->ra; /* ellipsoid parameters */ rc = prm->rc; /* ellipsoid parameters */ dt = 200. / prm->prf; /* nt = (prm->nrows - prm->num_valid_az)/100.; */ nt = 100; /* changed to fixed value for TSX, ENVI */ /* more time stuff */ t0 = (t1 + t2) / 2.0; t1 = t0 - 2.0; t2 = t0 + 2.0; /* interpolate orbit */ /* _slow does memory allocation each time */ interpolate_ALOS_orbit_slow(orb, t0, &xs, &ys, &zs, &ir); interpolate_ALOS_orbit_slow(orb, t1, &x1, &y1, &z1, &ir); interpolate_ALOS_orbit_slow(orb, t2, &x2, &y2, &z2, &ir); rs = sqrt(xs * xs + ys * ys + zs * zs); /* calculate stuff */ vx = (x2 - x1) / 4.0; vy = (y2 - y1) / 4.0; vz = (z2 - z1) / 4.0; vs = sqrt(vx * vx + vy * vy + vz * vz); *vtot = vs; /* set orbit direction */ if (vz > 0) { strcpy(prm->orbdir, "A"); } else { strcpy(prm->orbdir, "D"); } /* geodetic latitude of the satellite */ rlat = asin(zs / rs); // rlatg = atan(tan(rlat)*ra*ra/(rc*rc)); st = sin(rlat); /* changed from rlatg to rlat, not sure which is right */ ct = cos(rlat); arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1. / (sqrt(arg)); *re2 = re; *height = rs - *re2; /*fprintf(stderr,"time %lf xyz %lf %lf %lf geodetic latitude %lf \n",t0, * xs,ys,zs, rlatg/3.14*180);*/ /* compute the vector orthogonal to both the radial vector and velocity vector */ a[0] = xs / rs; a[1] = ys / rs; a[2] = zs / rs; b[0] = vx / vs; b[1] = vy / vs; b[2] = vz / vs; cross3_(a, b, c); /* compute the look angle */ ct = (rs * rs + ro * ro - re * re) / (2. * rs * ro); st = sin(acos(ct)); /* add the satellite and LOS vectors to get the new point */ xe = xs + ro * (-st * c[0] - ct * a[0]); ye = ys + ro * (-st * c[1] - ct * a[1]); ze = zs + ro * (-st * c[2] - ct * a[2]); rlat = asin(ze / re); // rlatg = atan(tan(rlat)*ra*ra/(rc*rc)); /* compute elipse height in the scene */ st = sin(rlat); /* rlatg to rlat */ ct = cos(rlat); arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1. / (sqrt(arg)); /* now check range over time */ for (k = 0; k < nt; k++) { time[k] = dt * (k - nt / 2); t1 = t0 + time[k]; interpolate_ALOS_orbit_slow(orb, t1, &xs, &ys, &zs, &ir); rng[k] = sqrt((xe - xs) * (xe - xs) + (ye - ys) * (ye - ys) + (ze - zs) * (ze - zs)) - ro; } /* fit a second order polynomial to the range versus time function */ polyfit(time, rng, d, &nt, &nc); *rdot = d[1]; *vg = sqrt(ro * 2. * d[2]); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ENVI_preproc/lib_src/Makefile000644 015705 000000 00000000461 13505462014 022564 0ustar00sandwellwheel000000 000000 include ../../../config.mk # Makefile for lib src LIB = libENVI.a INCLUDES = -I../../ALOS_preproc/include SRCS = read_ENVI_orb.c \ ENVI_ldr_orbit.c OBJS= $(SRCS:.c=.o) $(LIB) : $(OBJS) $(AR) r $(LIB) $? $(RANLIB) $(LIB) all: install install: $(LIB) $(INSTALL) *.a ../lib clean: rm -f *.a *.o GMTSAR_V5.7/preproc/ENVI_preproc/scripts/find_auxi.pl000755 015705 000000 00000001044 13505462014 023502 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl use strict; my $auxi_file; my $time_file; my @auxi_list; my @data_time; my $n = 0; $auxi_file = $ARGV[0]; $time_file = $ARGV[1]; open(DAT,$auxi_file) || die("Could not open file!"); chomp(@auxi_list = ); close(DAT); open(DAT2,$time_file) || die("Could not open file!"); chomp(@data_time = ); close(DAT2); LINE:foreach(@auxi_list){ if($_ =~ /IEC(\d*)_(\d*)_(\d*)_(\d*)_(\d*)_(\d*)/){ if(($3 < $data_time[0]) && ( $5 > $data_time[1]) ) { print $_; $n++; } } last LINE if($n >=1); } GMTSAR_V5.7/preproc/ENVI_preproc/scripts/dump_orbit_envi.pl000755 015705 000000 00000014005 13505462014 024722 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl use strict; if ($#ARGV < 3 ) { # print $#ARGV; # very strange, this number should be 0 if no input, but here -1 print "\nusage: dump_orbit_envi.pl start_time stop_time envi.LED orbdir\n\n"; print "input: start and stop time in Julian day format\n"; print " orbdir directory with Doris orbit data \n"; print "output: envi.LED store the orbit information, used by ENVI_baseline \n\n"; print " year day_of_year sec_of_day x y z vx vy vz \n\n"; exit; } my %month = ( "JAN" => "01", "FEB" => "02", "MAR" => "03", "APR" => "04", "MAY" => "05", "JUN" => "06", "JUL" => "07", "AUG" => "08", "SEP" => "09", "OCT" => "10", "NOV" => "11", "DEC" => "12"); my $orb_dir = $ARGV[3]; my @orb_list = `ls $orb_dir`; my @orb_data; my @out_orb_data; my $start_time_ymd; my $stop_time_ymd; my $tmp_start; my $tmp_stop; my $tmp_time; my $tmp_time_jul; my $tmp_jul_day; my $tmp_sec_of_day; my $start_time_jul; my $stop_time_jul; my $start_orb_time; my $stop_orb_time; my $orb_file; my $out_file; my $n; my $count; my $first_time; my $test_start_time_jul; my $test_stop_time_jul; ####################### grep start and stop time from PRM ############### $start_time_jul = $ARGV[0]; $stop_time_jul = $ARGV[1]; $out_file = $ARGV[2]; $start_time_ymd = jul2ymd($start_time_jul); $stop_time_ymd = jul2ymd($stop_time_jul); $test_start_time_jul = ymd2jul($start_time_ymd); $test_stop_time_jul = ymd2jul($stop_time_ymd); $start_orb_time = ($start_time_jul+$stop_time_jul)/2-14/60/24; # 28 points $stop_orb_time = ($start_time_jul+$stop_time_jul)/2+14/60/24; #print "Julian input: $start_time_jul $stop_time_jul \nYMD converted:$start_time_ymd $stop_time_ymd \nJulian converted back:$test_start_time_jul $test_stop_time_jul\n"; #print "orb time range: $start_orb_time $stop_orb_time \n"; ####################### Orbit file ###################################### $n = 0; LINE:foreach(@orb_list){ if($_ =~ /AXVF-P(\d*)_(\d*)_(\d*)_(\d*)_(\d*)_(\d*)/){ $tmp_start = $3.".$4"; $tmp_stop = $5.".$6"; #print "$tmp_start,$tmp_stop \n"; if(($tmp_start < $start_time_ymd) && ( $tmp_stop > $stop_time_ymd) ) { print "Orbit data: \n".$orb_dir."/".$_; $orb_file = $orb_dir."/".$_; $n++; } } last LINE if($n >=1); } ####################### Read orbit file and print out 28 points ####### open(DAT,$orb_file) || die("Could not open file!"); @orb_data = ; close(DAT); $count = 0; LINE:foreach(@orb_data){ if($_ =~ /^(\d*)-(\w*)-(\d*) (\d*):(\d*):(\d*).(\d*) (\S*) (\S*) (\S*) (\S*) (\S*) (\S*) (\S*) (\S*)/){ $tmp_time = $3.$month{$2}.$1.".".$4.$5.$6; $tmp_time_jul = ymd2jul($tmp_time); $tmp_jul_day = int($tmp_time_jul)-int($tmp_time_jul/1000)*1000; $tmp_sec_of_day = $4*60*60+$5*60+$6; #print "$tmp_time_jul\n"; if (($tmp_time_jul > $start_orb_time) && ($tmp_time_jul < $stop_orb_time)){ $count++; if ($count == 1) { $first_time = "$3 $tmp_jul_day $tmp_sec_of_day"; push(@out_orb_data,"$3 $tmp_jul_day $tmp_sec_of_day $10 $11 $12 $13 $14 $15\n"); } else { push(@out_orb_data,"$3 $tmp_jul_day $tmp_sec_of_day $10 $11 $12 $13 $14 $15\n"); } } } } unshift(@out_orb_data,"$count $first_time 60 \n"); open(DAT2,">$out_file") || die("Could not open file!"); print DAT2 @out_orb_data; close(DAT2); ################## subroutine to convert time format ################# sub ymd2jul { # convert year month day hour min sec to Julian day #$jul.day = ymd2jul($ymd.hms); #print "$_[0]\n"; my $iyear = substr($_[0],0,4); my $imon = substr($_[0],4,2); my $iday = substr($_[0],6,2); my $ihou = substr($_[0],9,2); my $imin = substr($_[0],11,2); my $isec = substr($_[0],13,2); my $jday; my $julday; #print "$_ \n$iyear $imon $iday $ihou $imin $isec \n"; my @jsum = (0,31,59,90,120,151,181,212,243,273,304,334); my @jsum2= (0,31,60,91,121,152,182,213,244,274,305,335); if ($iyear%400 == 0) { #leap year $jday=$jsum2[$imon-1]+$iday; } elsif ($iyear%100 == 0) { #not a leap year $jday=$jsum[$imon-1]+$iday; } elsif ($iyear%4 == 0) { #leap year $jday=$jsum2[$imon-1]+$iday; } else { #not a leap year $jday=$jsum[$imon-1]+$iday; } $julday = $iyear*1000 + $jday + $ihou/24 + $imin/60/24 + $isec/60/60/24; return $julday; } sub jul2ymd { # convert Julian day to year month day hour min sec #$ymd.hms = jul2ymd($julday); my $iyear = substr($_[0],0,4); my $jday = substr($_[0],4,3); my $decimal = sprintf("%.8f", ($_[0] - int($_[0]))); my $imon; my $iday; my $ihou; my $imin; my $isec; my $ymd; my @jsum = (0,31,59,90,120,151,181,212,243,273,304,334); my @jsum2= (0,31,60,91,121,152,182,213,244,274,305,335); if ($iyear%400 == 0) { #leap year $imon = findmonth($jday,@jsum2); $iday = $jday-$jsum2[$imon-1]; } elsif ($iyear%100 == 0) { #not a leap year $imon = findmonth($jday,@jsum); $iday = $jday-$jsum[$imon-1]; } elsif ($iyear%4 == 0) { #leap year $imon = findmonth($jday,@jsum2); $iday = $jday-$jsum2[$imon-1]; } else { #not a leap year $imon = findmonth($jday,@jsum); $iday = $jday-$jsum[$imon-1]; } $ihou = int(24*$decimal); $imin = int(60*24*$decimal-60*$ihou); $isec = int(60*60*24*$decimal-60*60*$ihou-60*$imin); #print "$_ \n$iyear $imon $iday $ihou $imin $isec \n"; $ymd = sprintf("%.6f", $iyear*10000+$imon*100+$iday+$ihou/100+$imin/10000+$isec/1e6); return $ymd; } sub findmonth { #$imon = findmonth($jday,@jsum); my $jday = $_[0]; my @jsum = ($_[1],$_[2],$_[3],$_[4],$_[5],$_[6],$_[7],$_[8],$_[9],$_[10],$_[11],$_[12]); #print "$jday @jsum \n"; my $n = 0; my $count = 0; my $imonth; my $diff; LINE:foreach(@jsum){ $count++; $diff = $_ - $jday; #print "$count $diff \n"; if ($diff >= 0){ $n++; } last LINE if($n >=1); } if ( ($count == 12) & ($diff <= 0) ){ $imonth = 12; } else { $imonth = $count-1; } #print "$n $count $imonth \n"; return $imonth; } GMTSAR_V5.7/preproc/ENVI_preproc/scripts/ENVI_SLC_pre_process000644 015705 000000 00000005754 13507242167 025010 0ustar00sandwellwheel000000 000000 #! /bin/csh -f # D. Sandwell and R. Mellors 09/09/97 # # Modified by Anders Hogrelius 04/18/2017 # # Script to preprocess Envisat L.1 ASAR data # produces .SLC .PRM and .LED files from Envisat formatted archive files ( files with extension .E1 .E2 or .N1) # # if ($#argv < 2) then echo "" echo " Usage: ENVI_SLC_pre_process " echo "" echo " name_stem - filename of the data file" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo "" echo " Example: " echo " command line: ENVI_SLC_pre_process ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000 6378000 " echo " will preprocess Envisat formatted L.1 ASAR data 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.N1' " echo " then output parameter file 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.PRM', SLC data file 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.SLC' and LED file 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.LED' " echo " with earth radius 6378000 meters" echo "" echo " ENVI_SLC_pre_process will digest Envisat formatted L.1 data from the ERS-1 ERS-2 and ENVISAT platforms (files with extension .E1 .E2 or .N1)" echo "" echo " It will not (yet) read the Wide Scan mode format (file names starting with ASA_WSS_1P)" echo "" exit 1 endif # set ORBITS = "/usr/local/GMTSAR_5.7" echo " " echo "=========================" echo "Start pre-process $1" # # make sure the file exists # set FEXTENSION = "" set ORBDIR = "" set SCID = 0 if ( -f $1.N1) then set FEXTENSION = "N1" set ORBDIR = "ENVI/Doris" set SCID = 4 # ENVISAT else if ( -f $1.E1) then set FEXTENSION = "E1" set ORBDIR = "ERS/ers1" set SCID = 1 # ERS-1 else if ( -f $1.E2) then set FEXTENSION = "E2" set ORBDIR = "ERS/ers2" set SCID = 2 #ERS-2 else echo "" echo "error - raw file does not have correct .N1 .E1 or .E2 suffix" echo "" exit 1 endif # # 1) extract binary data and initial PRM and LED files from archive # echo envi_slc_decode $1.$FEXTENSION envi_slc_decode $1.$FEXTENSION # # 2) make orbit file # set START = `grep SC_clock_start $1.PRM | awk '{print $3}'` set END = `grep SC_clock_stop $1.PRM | awk '{print $3}'` if ($SCID == 1) then echo "Reading ERS1 orbits" echo dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 else if ($SCID == 2) then echo "REading ERS2 orbits" echo dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 else if ($SCID == 4) then echo "Reading ENVISAT orbits" echo dump_orbit_envi.pl $START $END $1.LED $ORBITS/$ORBDIR dump_orbit_envi.pl $START $END $1.LED $ORBITS/$ORBDIR else echo "ERROR: Unknown satellite platform" exit 1 endif # # 4) add the orbital information but keep the FD1 # set FD1 = `grep fd1 $1.PRM | awk '{print $3}'` calc_dop_orb $1.PRM $1.log $2 $FD1 cat $1.log >> $1.PRM update_PRM.csh $1.PRM fd1 $FD1 # # clean unwanted files # rm *$1.log* # echo "End pre-process $1" # GMTSAR_V5.7/preproc/ENVI_preproc/scripts/ENVI_SLC_pre_process.in000644 015705 000000 00000005743 13505462014 025404 0ustar00sandwellwheel000000 000000 #! /bin/csh -f # D. Sandwell and R. Mellors 09/09/97 # # Modified by Anders Hogrelius 04/18/2017 # # Script to preprocess Envisat L.1 ASAR data # produces .SLC .PRM and .LED files from Envisat formatted archive files ( files with extension .E1 .E2 or .N1) # # if ($#argv < 2) then echo "" echo " Usage: ENVI_SLC_pre_process " echo "" echo " name_stem - filename of the data file" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo "" echo " Example: " echo " command line: ENVI_SLC_pre_process ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000 6378000 " echo " will preprocess Envisat formatted L.1 ASAR data 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.N1' " echo " then output parameter file 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.PRM', SLC data file 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.SLC' and LED file 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.LED' " echo " with earth radius 6378000 meters" echo "" echo " ENVI_SLC_pre_process will digest Envisat formatted L.1 data from the ERS-1 ERS-2 and ENVISAT platforms (files with extension .E1 .E2 or .N1)" echo "" echo " It will not (yet) read the Wide Scan mode format (file names starting with ASA_WSS_1P)" echo "" exit 1 endif # set ORBITS = "@ORBITS_DIR@" echo " " echo "=========================" echo "Start pre-process $1" # # make sure the file exists # set FEXTENSION = "" set ORBDIR = "" set SCID = 0 if ( -f $1.N1) then set FEXTENSION = "N1" set ORBDIR = "ENVI/Doris" set SCID = 4 # ENVISAT else if ( -f $1.E1) then set FEXTENSION = "E1" set ORBDIR = "ERS/ers1" set SCID = 1 # ERS-1 else if ( -f $1.E2) then set FEXTENSION = "E2" set ORBDIR = "ERS/ers2" set SCID = 2 #ERS-2 else echo "" echo "error - raw file does not have correct .N1 .E1 or .E2 suffix" echo "" exit 1 endif # # 1) extract binary data and initial PRM and LED files from archive # echo envi_slc_decode $1.$FEXTENSION envi_slc_decode $1.$FEXTENSION # # 2) make orbit file # set START = `grep SC_clock_start $1.PRM | awk '{print $3}'` set END = `grep SC_clock_stop $1.PRM | awk '{print $3}'` if ($SCID == 1) then echo "Reading ERS1 orbits" echo dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 else if ($SCID == 2) then echo "REading ERS2 orbits" echo dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 else if ($SCID == 4) then echo "Reading ENVISAT orbits" echo dump_orbit_envi.pl $START $END $1.LED $ORBITS/$ORBDIR dump_orbit_envi.pl $START $END $1.LED $ORBITS/$ORBDIR else echo "ERROR: Unknown satellite platform" exit 1 endif # # 4) add the orbital information but keep the FD1 # set FD1 = `grep fd1 $1.PRM | awk '{print $3}'` calc_dop_orb $1.PRM $1.log $2 $FD1 cat $1.log >> $1.PRM update_PRM.csh $1.PRM fd1 $FD1 # # clean unwanted files # rm *$1.log* # echo "End pre-process $1" # GMTSAR_V5.7/preproc/ENVI_preproc/scripts/ENVI_pre_process000644 015705 000000 00000011276 13507242167 024303 0ustar00sandwellwheel000000 000000 #! /bin/csh -f # D. Sandwell and R. Mellors 09/09/97 # # M. Wei 04/05/2006 # Modified by Xiaopeng Tong, 01/21/2011 # script to preprocess Envisat ASAR data # produce .PRM file and decode level 0 image data file # # if ($#argv < 4) then echo "" echo " Usage: ENVI_pre_process [Doppler]" echo "" echo " name_stem - filename of the .baq file" echo " near_range - near range (in meters) of the SAR image (put 0 if use default value)" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo " num_patch - number of patches (put 0 if use default value)" echo " Doppler - Doppler value (blank if use default value)" echo "" echo " Example: " echo " command line: Envisat_pre_process ENV1_2463_2943_15046 978992.922 6378000 5" echo " will preprocess raw Envisat ASAR data 'ENV1_2463_2943_15046.baq' " echo " then output parameter file 'ENV1_2463_2943_15046.PRM' and raw data file 'ENV1_2463_2943_15046.raw' and LED file 'ENV1_2463_2943_15046.LED' " echo " with near range close to 978992.922 meters and earth radius 6378000 meters and 5 patches" echo "" exit 1 endif # # 0) start with a virgin header, Need to be modified for other users # set ORBITS = "/usr/local/GMTSAR_5.7" set ENVIPRE = `gmtsar_sharedir.csh` cp $ENVIPRE/virgin_envisat.PRM $1.PRM echo " " echo "=========================" echo "Start pre-process $1" # # make sure the baq file exists # if(! -f $1.baq ) then echo "" echo "error - raw file does not have correct .baq suffix" echo "" exit 1 endif # echo "dump start and stop time of operation" # # 1) add info provided by user # echo "input_file = $1.raw" >> $1.PRM # # 2) add the parameters from envisat_baseline # # 2a) get the start and stop time dump_time_envi.pl $1.baq > $1.time # 2b) make orbit file set START = `grep SENSING_START0 $1.time | awk '{print $2}'` set END = `grep SENSING_STOP0 $1.time | awk '{print $2}'` echo "clock_start = $START" >> $1.PRM echo "clock_stop = $END" >> $1.PRM set START = `grep SENSING_STARTY $1.time | awk '{print $2}'` set END = `grep SENSING_STOPY $1.time | awk '{print $2}'` echo "SC_clock_start = $START" >> $1.PRM echo "SC_clock_stop = $END" >> $1.PRM dump_orbit_envi.pl $START $END $1.LED $ORBITS/ENVI/Doris echo "led_file = $1.LED" >> $1.PRM # # 3) decode L0 image data and add info to .PRM # # 3a) find the right auxiliary file cp $ORBITS/ENVI/ASA_INS/list $1.list grep START2 $1.time | awk '{print int($2)}' > sensing_$1.time grep STOP2 $1.time | awk '{print int($2)}' >> sensing_$1.time set AUXI = `find_auxi.pl $1.list sensing_$1.time` # 3b) decode the L0 image data echo "decode L0 image data using asa_im_decode" echo "auxiliary file is:" echo $AUXI asa_im_decode $1.baq $ORBITS/ENVI/ASA_INS/$AUXI $1.raw 1 $2 >> $1.log # 3c) grep parameters from .log file #set NOS = `grep "number of output samples" $1.log |awk '{print $5}'` #echo "num_rng_bins = $NOS" >> $1.PRM set BPL = `grep "number of output samples" $1.log |awk '{print $5*2}'` echo "bytes_per_line = $BPL" >> $1.PRM echo "good_bytes_per_line = $BPL" >> $1.PRM set NPATCH = `grep "number of output lines" $1.log | awk '{print int($5/2800)}'` echo "num_patches = $NPATCH" >> $1.PRM set PRF = `grep prf $1.log | awk '{print $3}'` echo "PRF = $PRF" >> $1.PRM set RSR = `grep "range sampling frequency" $1.log |awk '{print $5}'` echo "rng_samp_rate = $RSR" >> $1.PRM set CS = `grep "chirp slope" $1.log |awk '{print $4}'` echo "chirp_slope = $CS" >> $1.PRM set PD = `grep "pulse length" $1.log |awk '{print $4}'` echo "pulse_dur = $PD" >> $1.PRM set WAVELENGTH = `grep wavelength $1.log | awk '{print $3}'` echo "radar_wavelength = $WAVELENGTH" >> $1.PRM set NLINES = `grep "number of output lines" $1.log |awk '{print $5}'` echo "num_lines = $NLINES" >> $1.PRM set NEARRG = `grep "starting range" $1.log |awk '{print $4}'` echo "near_range = $NEARRG" >> $1.PRM # # 4) doppler centroid estimation and orbital information # if ($#argv == 5) then calc_dop_orb_envi $1.PRM $1.log2 $3 $5 else if ($#argv == 4) then calc_dop_orb_envi $1.PRM $1.log2 $3 endif cat $1.PRM $1.log2 > $1_tmp.PRM echo "fdd1 = 0" >> $1_tmp.PRM echo "fddd1 = 0" >> $1_tmp.PRM mv $1_tmp.PRM $1.PRM # 5) other stuff echo "SLC_file = $1.SLC" >> $1.PRM # # 6) change the number of patches # if ($4 != 0) then update_PRM.csh $1.PRM num_patches $4 echo "Number of patches is set to $4" endif # # clean unwanted files # rm *$1.time $1.list rm *$1.log* # echo "End pre-process $1" # GMTSAR_V5.7/preproc/ENVI_preproc/scripts/virgin_envisat.PRM000644 015705 000000 00000001174 13505462014 024607 0ustar00sandwellwheel000000 000000 num_valid_az = 2800 nrows = 4096 first_line = 1 deskew = n caltone = 0.000000 st_rng_bin = 1 num_rng_bins = 6144 Flip_iq = n offset_video = n az_res = 5 nlooks = 1 chirp_ext = 500 scnd_rng_mig = n rng_spec_wgt = 1.000000 rm_rng_band = 0.000000 rm_az_band = 0.000000 rshift = 0 sub_int_r = 0.0 ashift = 0 sub_int_a = 0.0 stretch_r = 0.0 stretch_a = 0.0 a_stretch_r = 0.0 a_stretch_a = 0.0 I_mean = 128. Q_mean = 128. first_sample = 0 SC_identity = 4 equatorial_radius = 6378137.000000 polar_radius = 6356752.314100 SLC_scale = 4000000.0 lookdir = R GMTSAR_V5.7/preproc/ENVI_preproc/scripts/ENVI_pre_process.in000755 015705 000000 00000011265 13505462014 024702 0ustar00sandwellwheel000000 000000 #! /bin/csh -f # D. Sandwell and R. Mellors 09/09/97 # # M. Wei 04/05/2006 # Modified by Xiaopeng Tong, 01/21/2011 # script to preprocess Envisat ASAR data # produce .PRM file and decode level 0 image data file # # if ($#argv < 4) then echo "" echo " Usage: ENVI_pre_process [Doppler]" echo "" echo " name_stem - filename of the .baq file" echo " near_range - near range (in meters) of the SAR image (put 0 if use default value)" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo " num_patch - number of patches (put 0 if use default value)" echo " Doppler - Doppler value (blank if use default value)" echo "" echo " Example: " echo " command line: Envisat_pre_process ENV1_2463_2943_15046 978992.922 6378000 5" echo " will preprocess raw Envisat ASAR data 'ENV1_2463_2943_15046.baq' " echo " then output parameter file 'ENV1_2463_2943_15046.PRM' and raw data file 'ENV1_2463_2943_15046.raw' and LED file 'ENV1_2463_2943_15046.LED' " echo " with near range close to 978992.922 meters and earth radius 6378000 meters and 5 patches" echo "" exit 1 endif # # 0) start with a virgin header, Need to be modified for other users # set ORBITS = "@ORBITS_DIR@" set ENVIPRE = `gmtsar_sharedir.csh` cp $ENVIPRE/virgin_envisat.PRM $1.PRM echo " " echo "=========================" echo "Start pre-process $1" # # make sure the baq file exists # if(! -f $1.baq ) then echo "" echo "error - raw file does not have correct .baq suffix" echo "" exit 1 endif # echo "dump start and stop time of operation" # # 1) add info provided by user # echo "input_file = $1.raw" >> $1.PRM # # 2) add the parameters from envisat_baseline # # 2a) get the start and stop time dump_time_envi.pl $1.baq > $1.time # 2b) make orbit file set START = `grep SENSING_START0 $1.time | awk '{print $2}'` set END = `grep SENSING_STOP0 $1.time | awk '{print $2}'` echo "clock_start = $START" >> $1.PRM echo "clock_stop = $END" >> $1.PRM set START = `grep SENSING_STARTY $1.time | awk '{print $2}'` set END = `grep SENSING_STOPY $1.time | awk '{print $2}'` echo "SC_clock_start = $START" >> $1.PRM echo "SC_clock_stop = $END" >> $1.PRM dump_orbit_envi.pl $START $END $1.LED $ORBITS/ENVI/Doris echo "led_file = $1.LED" >> $1.PRM # # 3) decode L0 image data and add info to .PRM # # 3a) find the right auxiliary file cp $ORBITS/ENVI/ASA_INS/list $1.list grep START2 $1.time | awk '{print int($2)}' > sensing_$1.time grep STOP2 $1.time | awk '{print int($2)}' >> sensing_$1.time set AUXI = `find_auxi.pl $1.list sensing_$1.time` # 3b) decode the L0 image data echo "decode L0 image data using asa_im_decode" echo "auxiliary file is:" echo $AUXI asa_im_decode $1.baq $ORBITS/ENVI/ASA_INS/$AUXI $1.raw 1 $2 >> $1.log # 3c) grep parameters from .log file #set NOS = `grep "number of output samples" $1.log |awk '{print $5}'` #echo "num_rng_bins = $NOS" >> $1.PRM set BPL = `grep "number of output samples" $1.log |awk '{print $5*2}'` echo "bytes_per_line = $BPL" >> $1.PRM echo "good_bytes_per_line = $BPL" >> $1.PRM set NPATCH = `grep "number of output lines" $1.log | awk '{print int($5/2800)}'` echo "num_patches = $NPATCH" >> $1.PRM set PRF = `grep prf $1.log | awk '{print $3}'` echo "PRF = $PRF" >> $1.PRM set RSR = `grep "range sampling frequency" $1.log |awk '{print $5}'` echo "rng_samp_rate = $RSR" >> $1.PRM set CS = `grep "chirp slope" $1.log |awk '{print $4}'` echo "chirp_slope = $CS" >> $1.PRM set PD = `grep "pulse length" $1.log |awk '{print $4}'` echo "pulse_dur = $PD" >> $1.PRM set WAVELENGTH = `grep wavelength $1.log | awk '{print $3}'` echo "radar_wavelength = $WAVELENGTH" >> $1.PRM set NLINES = `grep "number of output lines" $1.log |awk '{print $5}'` echo "num_lines = $NLINES" >> $1.PRM set NEARRG = `grep "starting range" $1.log |awk '{print $4}'` echo "near_range = $NEARRG" >> $1.PRM # # 4) doppler centroid estimation and orbital information # if ($#argv == 5) then calc_dop_orb_envi $1.PRM $1.log2 $3 $5 else if ($#argv == 4) then calc_dop_orb_envi $1.PRM $1.log2 $3 endif cat $1.PRM $1.log2 > $1_tmp.PRM echo "fdd1 = 0" >> $1_tmp.PRM echo "fddd1 = 0" >> $1_tmp.PRM mv $1_tmp.PRM $1.PRM # 5) other stuff echo "SLC_file = $1.SLC" >> $1.PRM # # 6) change the number of patches # if ($4 != 0) then update_PRM.csh $1.PRM num_patches $4 echo "Number of patches is set to $4" endif # # clean unwanted files # rm *$1.time $1.list rm *$1.log* # echo "End pre-process $1" # GMTSAR_V5.7/preproc/ENVI_preproc/scripts/dump_time_envi.pl000755 015705 000000 00000004761 13505462014 024551 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl use strict; #use warnings; if ($#ARGV != 0) { # print $#ARGV; # very strange, this number should be 0 if no input, but here -1 print "\nusage: dump_time_envi.pl envisat.baq/N1 \n\n"; print "input: envisat.raw: envisat raw data in .N1 or .baq \n"; print "output: print out start time and end time \n\n"; exit; } my %month = ( "JAN" => "01", "FEB" => "02", "MAR" => "03", "APR" => "04", "MAY" => "05", "JUN" => "06", "JUL" => "07", "AUG" => "08", "SEP" => "09", "OCT" => "10", "NOV" => "11", "DEC" => "12"); my @text = (); my $file = $ARGV[0]; my $file2 = "tmp_time"; # print out so other program can do julian day conversion my $start = ""; my $stop = ""; my $date = ""; my $time = ""; my $year = ""; my $jday = ""; my $ptime =""; my $ftime0 =""; my $ftimey =""; my $ftime2 =""; my @tmp = (); my $n = 0; @text = `head -15 $file`; LINE:foreach(@text){ if($_ =~ /sensing_start="(.*)"/i){ $start = $1; $n++; } if($_ =~ /sensing_stop="(.*)"/i){ $stop = $1; $n++; } last LINE if($n >= 2) ; } close File; @tmp = split /\s+/, $start; $date = $tmp[0]; $time = $tmp[1]; @tmp = split /-/, $date; $year = $tmp[2]; $ftime2 = $tmp[2]*10000+$month{$tmp[1]}*100+$tmp[0]; $jday = juldate($tmp[2],$month{$tmp[1]},$tmp[0]); @tmp = split /:/, $time; $ptime = ($tmp[0] + $tmp[1]/60 + $tmp[2]/3600)/24; $ftime0 = $jday+$ptime; $ftimey = $year*1000+$jday+$ptime; print "SENSING_START0 "; print "$ftime0 \n"; print "SENSING_STARTY "; print "$ftimey \n"; print "START2 "; print "$ftime2 \n"; @tmp = split /\s+/, $stop; $date = $tmp[0]; $time = $tmp[1]; @tmp = split /-/, $date; $year = $tmp[2]; $ftime2 = $tmp[2]*10000+$month{$tmp[1]}*100+$tmp[0]; $jday = juldate($tmp[2],$month{$tmp[1]},$tmp[0]); @tmp = split /:/, $time; $ptime = ($tmp[0] + $tmp[1]/60 + $tmp[2]/3600)/24; $ftime0 = $jday+$ptime; $ftimey = $year*1000+$jday+$ptime; print "SENSING_STOP0 "; print "$ftime0 \n"; print "SENSING_STOPY "; print "$ftimey \n"; print "STOP2 "; print "$ftime2 \n"; `rm -f tmp_time`; sub juldate { my $iyear = $_[0]; my $imon = $_[1]; my $iday = $_[2]; my @jsum = (0,31,59,90,120,151,181,212,243,273,304,334); my @jsum2= (0,31,60,91,121,152,182,213,244,274,305,335); if ($iyear%400 == 0) { #leap year $jday=$jsum2[$imon-1]+$iday; } elsif ($iyear%100 == 0) { #not a leap year $jday=$jsum[$imon-1]+$iday; } elsif ($iyear%4 == 0) { #leap year $jday=$jsum2[$imon-1]+$iday; } else { #not a leap year $jday=$jsum[$imon-1]+$iday; } return $jday; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_baseline/ENVI_baseline.c000644 015705 000000 00000042207 13505462014 024665 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Compute the interferometric baseline between reference and repeat * * images. Also estimates the crude offset for image matching. * *******************************************************************************/ /******************************************************************************** * Creator: Matt Wei, 04/26/10 * * * * Based on the program ALOS_baseline by * Creator: Sandwell and Rob Mellors ** (San Diego State University, Scripps Institution of Oceanography) * Date : *06/07/2007 * ********************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "Usage: (two modes)\n" "mode 1:\n\n" "SAT_baseline PRM_master PRM_slave \n\n" "PRM_master PRM file for reference image\n" "PRM_slave PRM file of secondary image\n" "Please make sure the orbit file data is in PRM \n" "(writes out parameters for appending to PRM file)\n" "\nor mode 2:\n\n" "SAT_baseline -input file\n\n" "file: list of PRM files\n" "first file is assumed to be master\n" "following are slaves\n" "(writes out decimal year, Bperp, and PRM name)\n"; /* function prototypes */ double find_distance(double, double, double, double, double, double); double find_alpha_degrees(double, double); void find_unit_vectors(double, double, double, double *, double *, double *, double *); void endpoint_distance(int, double, double, double, double, double *, double *, double *, double *, int *); void find_parallel_perp_baseline(struct PRM, struct PRM, double, double *, double *); void write_prm_baseline(struct PRM); void get_sign(struct PRM, double, double, double, double, int *); void write_bperp(struct PRM, char *); void parse_command_line(char **, int *, int *); void read_input_file(char *, int, char **); void ENVI_baseline(struct PRM *, struct ALOS_ORB *, int, int, char **, double); void read_all_ENVI_ldr(struct PRM *, struct ALOS_ORB *, int); void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); void ENVI_llt2rat_sub(char *, double *, double *); int main(int argc, char **argv) { int i; int input_flag, nfiles; double fs0 = 0.; struct PRM *r; /* reference orbit is 0; repeats are > 0*/ struct ALOS_ORB *orb; /* reference orbit is 0; repeats are > 0*/ char **filename; FILE *prmfile; if (argc < 3) die(USAGE, ""); verbose = 0; input_flag = 0; /* read command line */ parse_command_line(argv, &nfiles, &input_flag); filename = malloc(nfiles * sizeof(char *)); for (i = 0; i < nfiles; i++) filename[i] = malloc(128 * sizeof(char)); r = malloc(nfiles * sizeof(struct PRM)); if (input_flag == 1) read_input_file(argv[2], nfiles, filename); for (i = 0; i < nfiles; i++) { if (input_flag == 0) strcpy(filename[i], argv[i + 1]); if ((prmfile = fopen(filename[i], "r")) == NULL) die("Can't open prmfile ", filename[i]); get_sio_struct(prmfile, &r[i]); /* check whether range sampling rate is same. If not, warning */ if (i == 0) fs0 = r[0].fs; if (r[i].fs != fs0) { fprintf(stderr, "\nWARNING:\nRange_sampling_rate is not consistant.\nYou " "need to do FBD/FBS conversion.\n\n"); } fclose(prmfile); } fprintf(stderr, "SC_identity = %d \n", r[0].SC_identity); orb = malloc(nfiles * sizeof(struct ALOS_ORB)); read_all_ENVI_ldr(r, orb, nfiles); ENVI_baseline(r, orb, nfiles, input_flag, filename, fs0); return (EXIT_SUCCESS); } /*---------------------------------------------------------------------------*/ /* Get time info and find the orbit */ void read_all_ENVI_ldr(struct PRM *r, struct ALOS_ORB *orb, int nfiles) { int i; FILE *ldrfile; for (i = 0; i < nfiles; i++) { if (i == 0) fprintf(stderr, "......master LED file %s \n", r[0].led_file); if (i != 0) fprintf(stderr, ".........slave LED file %s \n", r[i].led_file); /* open each ldrfile and read into structure r */ if ((ldrfile = fopen(r[i].led_file, "r")) == NULL) die("Can't open ldrfile %s", r[i].led_file); read_ENVI_orb(ldrfile, &r[i], &orb[i]); fclose(ldrfile); } } /*---------------------------------------------------------------------------*/ void ENVI_baseline(struct PRM *r, struct ALOS_ORB *orb, int nfiles, int input_flag, char **filename, double fs0) { int ii, nd, ir; int k, ns, ns2, m1, m2, m3, sign1, sign2, sign3; double dr, dt, ds; double bv1, bv2, bv3, bh1, bh2, bh3; double t11, t12, t21, t22, t23; double x11, y11, z11, x12, y12, z12, x13, y13, z13; double x21, y21, z21, x22, y22, z22, x23, y23, z23; double ru1, ru2, ru3, xu1, yu1, zu1, xu2, yu2, zu2, xu3, yu3, zu3; double ts, xs, ys, zs; /* double rr1, rr2, t13; */ /* near range from reference and repeat orbits */ double b1, b2, b3, bpara, bperp; double *pt, *p, *pv, pt0; double height, re_c, vg, vtot, rdot; double radar_look[3] = {0, 0, 0}; double re, rho, b, theta; double t_vel, t_sta, x_vel, x_sta, y_vel, y_sta, z_vel, z_sta, ru33, xu33, yu33, zu33, o1x[3], o1y[3], o1z[3], ru4, xu4, yu4, zu4; double glob_look[3], target[3], target_llt[3], fll; double target_rat_ref[3] = {0, 0, 0}; double target_rat_rep[3] = {0, 0, 0}; double far_range; /* reference orbit */ get_seconds(r[0], &t11, &t12); // t13 = (t11 + t12)/2.; dr = 0.5 * SOL / fs0; dt = 1.0 / r[0].prf; // rr1 = r[0].near_range; ns = (int)((t12 - t11) / dt); /* seconds of frame */ dt = (t12 - t11) / (ns - 1); ns2 = ns * 2; nd = orb[0].nd; pt = malloc(nd * sizeof(double)); p = malloc(nd * sizeof(double)); pv = malloc(nd * sizeof(double)); for (ii = 1; ii < nfiles; ii++) { get_seconds(r[ii], &t21, &t22); t23 = (t21 + t22) / 2.; // rr2 = r[ii].near_range; pt0 = (24.0 * 60.0 * 60.0) * orb[ii].id + orb[ii].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[ii].dsec; verbose = 0; /* interpolate_ALOS_orbit assumes p, pt, and pv ate allocated and pt * assigned */ interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t21, &x21, &y21, &z21, &ir); /* look at other orbit information and recalculate the height using the * ashift */ calc_height_velocity(&orb[ii], &r[ii], t22, t22, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_end = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t23, t23, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t21, t21, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_start = height + re_c - r[ii].RE; // fd_orbit = -2.0*rdot/r[ii].lambda; interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t22, &x22, &y22, &z22, &ir); interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t23, &x23, &y23, &z23, &ir); /* loop over reference orbit */ /* add 2 scene lengths (ns2) for buffer at each end */ b1 = b2 = b3 = -1.0; pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; /* set some default values */ m1 = -99999; x11 = y11 = z11 = -99999.0; x12 = y12 = z12 = -99999.0; x13 = y13 = z13 = -99999.0; for (k = -ns2; k < ns + ns2; k++) { ts = t11 + k * dt; interpolate_ALOS_orbit(&orb[0], pt, p, pv, ts, &xs, &ys, &zs, &ir); ds = find_distance(xs, ys, zs, x21, y21, z21); if (b1 < 0.0 || ds < b1) endpoint_distance(k, ds, xs, ys, zs, &b1, &x11, &y11, &z11, &m1); ds = find_distance(xs, ys, zs, x22, y22, z22); if (b2 < 0.0 || ds < b2) endpoint_distance(k, ds, xs, ys, zs, &b2, &x12, &y12, &z12, &m2); ds = find_distance(xs, ys, zs, x23, y23, z23); if (b3 < 0.0 || ds < b3) endpoint_distance(k, ds, xs, ys, zs, &b3, &x13, &y13, &z13, &m3); } /* compute more orbital information at the min baseline based on m1 */ ts = t11 + m1 * dt; calc_height_velocity(&orb[0], &r[0], ts, ts, &height, &re_c, &vg, &vtot, &rdot); // fd_orbit = -2.0*rdot/r[0].lambda; /* shouldn't happen .. */ if (x11 == -99999.0) die("x11 not initialized", ""); if (x12 == -99999.0) die("x12 not initialized", ""); if (m1 == -99999) die("m1 not initialized", ""); /* put in structure */ r[ii].baseline_start = b1; r[ii].baseline_end = b2; r[ii].baseline_center = b3; /* compute unit vectors */ find_unit_vectors(x11, y11, z11, &ru1, &xu1, &yu1, &zu1); find_unit_vectors(x12, y12, z12, &ru2, &xu2, &yu2, &zu2); find_unit_vectors(x13, y13, z13, &ru3, &xu3, &yu3, &zu3); /* compute sign of horizontal baseline */ get_sign(r[ii], x11, y11, x21, y21, &sign1); get_sign(r[ii], x12, y12, x22, y22, &sign2); get_sign(r[ii], x13, y13, x23, y23, &sign3); /* compute baseline components (horizontal and vertical) */ bv1 = (x21 - x11) * xu1 + (y21 - y11) * yu1 + (z21 - z11) * zu1; bh1 = sign1 * sqrt(b1 * b1 - bv1 * bv1); bv2 = (x22 - x12) * xu2 + (y22 - y12) * yu2 + (z22 - z12) * zu2; bh2 = sign2 * sqrt(b2 * b2 - bv2 * bv2); bv3 = (x23 - x13) * xu3 + (y23 - y13) * yu3 + (z23 - z13) * zu3; bh3 = sign3 * sqrt(b3 * b3 - bv3 * bv3); /* angle from horizontal */ r[ii].alpha_start = find_alpha_degrees(bv1, bh1); r[ii].alpha_end = find_alpha_degrees(bv2, bh2); r[ii].alpha_center = find_alpha_degrees(bv3, bh3); /* calculate parallel baseline */ find_parallel_perp_baseline(r[0], r[ii], dr, &bpara, &bperp); r[ii].bpara = bpara; r[ii].bperp = bperp; /* find expected offset in pixels (rshift and yshift) */ /* r[ii].ashift = -1*m1; r[ii].rshift = -1*(int) (r[ii].bpara/dr + (rr2 - rr1)/dr); */ /* a more accurate way to estimate offset in pixels */ /* since t11 point is out of scene, I need add a fraction of orbit time to * it */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_sta = t11 + 2.0; interpolate_ALOS_orbit(&orb[0], pt, p, pv, t_sta, &x_sta, &y_sta, &z_sta, &ir); re = r[0].RE; far_range = r[0].near_range + dr * r[0].num_rng_bins; rho = (r[0].near_range + far_range) / 2.0; b = r[0].ht + r[0].RE; theta = acos((b * b + rho * rho - re * re) / 2 / b / rho); /* find a unit look vector point to middle range of first line of the scene */ /* in radar coordinate */ radar_look[0] = 0; radar_look[1] = cos(theta); radar_look[2] = -sin(theta); /* form a rotation matrix to convert the look vector from radar coordinate to global cartesian coordinate */ find_unit_vectors(x_sta, y_sta, z_sta, &ru33, &xu33, &yu33, &zu33); o1y[0] = -xu33; o1y[1] = -yu33; o1y[2] = -zu33; /* get the velocity of the satellite */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_vel = t11 + 2.1; interpolate_ALOS_orbit(&orb[0], pt, p, pv, t_vel, &x_vel, &y_vel, &z_vel, &ir); find_unit_vectors(x_vel - x_sta, y_vel - y_sta, z_vel - z_sta, &ru4, &xu4, &yu4, &zu4); o1x[0] = xu4; o1x[1] = yu4; o1x[2] = zu4; cross3_(o1x, o1y, o1z); /* look vector in global cartesian cooridate is */ glob_look[0] = radar_look[0] * o1x[0] + radar_look[1] * o1y[0] + radar_look[2] * o1z[0]; glob_look[1] = radar_look[0] * o1x[1] + radar_look[1] * o1y[1] + radar_look[2] * o1z[1]; glob_look[2] = radar_look[0] * o1x[2] + radar_look[1] * o1y[2] + radar_look[2] * o1z[2]; /* shoot the vector on the ground and get the tie point */ target[0] = x_sta + glob_look[0] * rho; target[1] = y_sta + glob_look[1] * rho; target[2] = z_sta + glob_look[2] * rho; fll = (r[0].ra - r[0].rc) / r[0].ra; xyz2plh(target, target_llt, r[0].ra, fll); fprintf(stderr, "lon_tie_point = %f\n", target_llt[1]); fprintf(stderr, "lat_tie_point = %f\n", target_llt[0]); ENVI_llt2rat_sub(filename[0], target_llt, target_rat_ref); ENVI_llt2rat_sub(filename[ii], target_llt, target_rat_rep); /* find expected offset in pixels (rshift and yshift) */ r[ii].ashift = target_rat_rep[1] - target_rat_ref[1]; r[ii].rshift = target_rat_rep[0] - target_rat_ref[0]; /* write out prm format */ if (input_flag == 0) write_prm_baseline(r[ii]); /* write out in x,y format bperp baseline only */ if (input_flag == 1) write_bperp(r[ii], filename[ii]); } } /*---------------------------------------------------------------------------*/ void read_input_file(char *inputfilename, int nfiles, char **filename) { int i; FILE *inputfile; if ((inputfile = fopen(inputfilename, "r")) == NULL) die("Can't open ", inputfilename); for (i = 0; i < nfiles; i++) fscanf(inputfile, " %s ", filename[i]); fclose(inputfile); } /*---------------------------------------------------------------------------*/ void parse_command_line(char **argv, int *nfiles, int *input_flag) { char tmp[132]; FILE *inputfile; *nfiles = 0; if (strncmp(argv[1], "-input", 6) != 0) { fprintf(stderr, "using command line\n"); *nfiles = 2; } else { fprintf(stderr, "using input file \n"); *input_flag = 1; if ((inputfile = fopen(argv[2], "r")) == NULL) die("Can't open ", argv[2]); /* count the number of files in inputfile */ while (fscanf(inputfile, " %s ", tmp) != EOF) (*nfiles)++; fclose(inputfile); } } /*---------------------------------------------------------------------------*/ void write_bperp(struct PRM r1, char *string) { FILE *GMTscript; float year, dyear; GMTscript = fopen("GMTscript", "w"); year = floor(r1.SC_clock_start / 1000.0); dyear = (r1.SC_clock_start - 1000.0 * year) / 365.0; year = year + dyear; /* write date, baseline */ fprintf(stdout, " %f %f %s\n", year, r1.bperp, string); /* fprintf(GMTscript,"psxy Bperp.dat -R%f/%f/%f/%f -JX8 -P > Bperp.ps\n"); */ fclose(GMTscript); } /*---------------------------------------------------------------------------*/ void get_sign(struct PRM r, double x11, double y11, double x21, double y21, int *sign) { double rlnref, rlnrep; rlnref = atan2(y11, x11); rlnrep = atan2(y21, x21); *sign = 1.0; if (strncmp(r.orbdir, "D", 1) == 0) *sign = -1 * (*sign); if (rlnrep < rlnref) *sign = -1 * (*sign); } /*---------------------------------------------------------------------------*/ void write_prm_baseline(struct PRM rep) { printf("SC_vel = %f \n", rep.vel); printf("SC_height = %f \n", rep.ht); printf("SC_height_start = %f \n", rep.ht_start); printf("SC_height_end = %f \n", rep.ht_end); printf("earth_radius = %f \n", rep.RE); printf("rshift = %d \n", rep.rshift); printf("sub_int_r = 0.0 \n"); printf("ashift = %d\n", rep.ashift); printf("sub_int_a = 0.0 \n"); printf("B_parallel = %f \n", rep.bpara); printf("B_perpendicular = %f \n", rep.bperp); printf("baseline_start = %f \n", rep.baseline_start); printf("baseline_center = %f \n", rep.baseline_center); printf("baseline_end = %f \n", rep.baseline_end); printf("alpha_start = %f \n", rep.alpha_start); printf("alpha_center = %f \n", rep.alpha_center); printf("alpha_end = %f \n", rep.alpha_end); } /*---------------------------------------------------------------------------*/ void find_parallel_perp_baseline(struct PRM ref, struct PRM rep, double dr, double *bpara, double *bperp) { double rc, ra, rad, rlook, far_range, arg1, arg2; rad = M_PI / 180.0; /* this is not ellipsoid axis */ /* use reference ?? */ rc = ref.RE + ref.ht; ra = ref.RE; far_range = rep.near_range + dr * rep.num_rng_bins; /* calculate the look angle 1/2 way between the near and far range */ arg1 = (rep.near_range * rep.near_range + rc * rc - ra * ra) / (2. * rep.near_range * rc); arg2 = (far_range * far_range + rc * rc - ra * ra) / (2. * far_range * rc); rlook = acos((arg1 + arg2) / 2.0); /* add the incidence angle correction to get the incidence angle */ arg1 = (-rep.near_range * rep.near_range + rc * rc + ra * ra) / (2. * ra * rc); arg2 = (-far_range * far_range + rc * rc + ra * ra) / (2. * ra * rc); rlook = rlook + acos((arg1 + arg2) / 2.0); *bpara = rep.baseline_start * sin(rlook - rep.alpha_start * rad); *bperp = rep.baseline_start * cos(rlook - rep.alpha_start * rad); } /*---------------------------------------------------------------------------*/ double find_alpha_degrees(double bv, double bh) { double a, rad; rad = M_PI / 180.0; a = atan2(bv, bh); a = a / rad; return (a); } /*---------------------------------------------------------------------------*/ double find_distance(double xs, double ys, double zs, double x, double y, double z) { double ds; double dx, dy, dz; dx = xs - x; dy = ys - y; dz = zs - z; ds = sqrt(dx * dx + dy * dy + dz * dz); return (ds); } /*---------------------------------------------------------------------------*/ void endpoint_distance(int k, double ds, double xs, double ys, double zs, double *b, double *x, double *y, double *z, int *m) { *b = ds; *x = xs; *y = ys; *z = zs; *m = k; } /*---------------------------------------------------------------------------*/ void find_unit_vectors(double x, double y, double z, double *ru, double *xu, double *yu, double *zu) { *ru = sqrt(x * x + y * y + z * z); *xu = x / (*ru); *yu = y / (*ru); *zu = z / (*ru); } /*---------------------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_baseline/ENVI_llt2rat_sub.c000644 015705 000000 00000025402 13505462014 025336 0ustar00sandwellwheel000000 000000 /**************************************************************************** * Subroutine to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/15/09 - modifed to correct the contradiction of range sampling rate * * between FBS and FBD mode. ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 void set_ALOS_defaults(struct PRM *); void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); void ENVI_llt2rat_sub(char *filename, double *target_llt, double *target_rat) { double rln, rlt, rht, dr, t1, t2, tm; double ts, rng, thet, relp, telp; double xp[3]; double xt[3]; double rp[3]; // double r0,rf,a0,af; double rad = PI / 180.; double fll, rdd, daa, drr; int j, nrec, npad = 8000; int goldop(); int stai, endi, midi; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; FILE *ldrfile; FILE *fprm1; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); double rsr; char value[128], name[128]; /* open and read the parameter file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ENVI_orb(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; #if 0 r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* read the llt points and convert to xyz. */ rlt = target_llt[0]; rln = target_llt[1]; rht = target_llt[2]; rp[0] = rlt; rp[1] = rln; rp[2] = rht; plh2xyz(rp, xp, prm.ra, fll); xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); xt[0] = rng; xt[1] = tm; /* compute the range and azimuth in pixel space and correct for an azimuth * bias*/ xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a); /* compute the azimuth and range correction if the Doppler is not zero */ if (prm.fd1 != 0.) { rdd = (prm.vel * prm.vel) / rng; daa = -0.5 * (prm.lambda * prm.fd1) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } target_rat[0] = xt[0]; target_rat[1] = xt[1]; target_rat[2] = rp[2]; free(orb_pos); free(orb); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_baseline/Makefile000644 015705 000000 00000000613 13505462014 023551 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ENVI_baseline CSRCS = ENVI_baseline.c \ ENVI_llt2rat_sub.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../../ALOS_preproc/include CLIBS = -L../../ALOS_preproc/lib -lALOS -L../lib -lENVI -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_llt2rat/ENVI_llt2rat.c000644 015705 000000 00000034264 13505462014 024275 0ustar00sandwellwheel000000 000000 /**************************************************************************** * Program to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/04/09 - update the range sampling rate from new PRM file to solve * * confict of rng_samp_rate between LED file and PRM file in FBD mode. * * 04/28/10 - modified to work with envisat - M.Wei * ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 char *USAGE = " \n Usage: " "SAT_llt2rat master.PRM [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - range, azimuth, lon, lat, elevation [ASCII " "default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: SAT_llt2rat master.PRM < topo.llt > topo.ratll \n"; /* int parse_ALOS_llt2rat(char **, char *); */ void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); int main(int argc, char **argv) { FILE *fprm1; int otype; double rln, rlt, rht, dr, t1, t2, tm; double ts, rng, thet, relp, telp; double xp[3]; double xt[3]; double rp[3]; double dd[5]; /* dummy for output double precision */ float ds[5]; /* dummy for output single precision */ double r0, rf, a0, af; double rad = PI / 180.; double fll, rdd, daa, drr; int j, nrec, npad = 8000; int goldop(); int stai, endi, midi; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; char name[128], value[128]; double rsr; FILE *ldrfile; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); /* Make sure usage is correct and files can be opened */ if (argc < 2 || argc > 3) { fprintf(stderr, "%s\n", USAGE); exit(-1); } /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 3) { if (!strcmp(argv[2], "-bos")) otype = 2; else if (!strcmp(argv[2], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* dubugging fprintf(stderr,"debug\n"); fprintf(stderr,"%s\n",prm.led_file); fprintf(stderr,"%lf\n",prm.fs); fprintf(stderr,"%d\n",prm.num_rng_bins); fprintf(stderr,"%d\n",prm.num_valid_az); fprintf(stderr,"%lf\n",prm.rc); fprintf(stderr,"%lf\n",prm.ra); fprintf(stderr,"%lf\n",prm.prf); fprintf(stderr,"%lf\n",prm.RE); fprintf(stderr,"%lf\n",prm.sub_int_a); fprintf(stderr,"%lf\n",prm.SC_clock_start); fprintf(stderr,"%lf\n",prm.clock_start); fprintf(stderr,"%d\n",prm.nrows); fprintf(stderr,"%d\n",prm.num_patches); fprintf(stderr,"%lf\n",prm.near_range); fprintf(stderr,"rshift = %d\n",prm.rshift); fprintf(stderr,"sub_int_r = %lf\n",prm.sub_int_r); fprintf(stderr,"chirp_ext = %d\n",prm.chirp_ext); */ fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ENVI_orb(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ /* fprintf(stderr,"ts=%lf,t1=%lf,nrec=%d\n",ts,t1,nrec); */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* look at the orb_pos for(i=0;i<4;i++) { for (j=0;j 180.) rp[1] = rp[1] - 360.; xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); xt[0] = rng; xt[1] = tm; /* fprintf(stderr,"rng = %f, tm = %f",rng,tm); */ /* compute the range and azimuth in pixel space and correct for an azimuth * bias*/ xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a); /* For Envisat correct for biases based on Pinon reflector analysis */ if (prm.SC_identity == 4) { xt[0] = xt[0] + 8.4; xt[1] = xt[1] + 4; } /* compute the azimuth and range correction if the Doppler is not zero */ if (prm.fd1 != 0.) { rdd = (prm.vel * prm.vel) / rng; daa = -0.5 * (prm.lambda * prm.fd1) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; /*fprintf(stderr," rng, rdd, daa, drr %f %f %f %f \n",rng, rdd, daa, drr); */ xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } /* fprintf(stderr,"xt[0] = %f\n",xt[0]); */ if (xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) continue; /* fprintf(stderr,"%f %f %f %f %f \n",xt[0],xt[1],rp[2],rp[1],rp[0]); */ if (otype == 1) { fprintf(stdout, "%f %f %f %f %f \n", xt[0], xt[1], rp[2], rp[1], rp[0]); } else if (otype == 2) { ds[0] = (float)xt[0]; ds[1] = (float)xt[1]; ds[2] = (float)rp[2]; ds[3] = (float)rp[1]; ds[4] = (float)rp[0]; fwrite(ds, sizeof(float), 5, stdout); } else if (otype == 3) { dd[0] = xt[0]; dd[1] = xt[1]; dd[2] = rp[2]; dd[3] = rp[1]; dd[4] = rp[0]; fwrite(dd, sizeof(double), 5, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_llt2rat/Makefile000644 015705 000000 00000000565 13505462014 023361 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ENVI_llt2rat CSRCS = ENVI_llt2rat.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../../ALOS_preproc/include CLIBS = -L../../ALOS_preproc/lib -lALOS -L../lib -lENVI -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_look/Makefile000644 015705 000000 00000000600 13505462014 022727 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ENVI_look CSRCS = ENVI_look.c OBJS = $(CSRCS:.c=.o) $(FSRCS:.f=.o) INCLUDES = -I../../ALOS_preproc/include CLIBS = -L../../ALOS_preproc/lib -lALOS -L../lib -lENVI -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_look/ENVI_look.c000644 015705 000000 00000041116 13505462014 023227 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Program to project a longitude, latitude, and topography * into a file of longitude latitude, and topography and unit look vector. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography and * unit look vector then transform the unit look vector from global to * local coordinate ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 11/28/08 - modified from ALOS_llt2rat.c to compute accurate look vector.* * need to specify the latitude and longitude of the pole to * * transform from global elipsoid cartesian to local East-North- * * up coordinate * * The start and end clock of the orbit is changed to allow for * * long swath, the start time should be in the first frame so * * PRM file. * * 12/03/10 - modified to work with ENVISAT, Matt Wei * ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 char *USAGE = " \n Usage: " "ENVI_look master.PRM [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - lon, lat, elevation look_E look_N look_U " "[ASCII default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: ENVI_look master.PRM < topo.llt > topo.lltn \n"; /* int parse_ALOS_look(char **, char *); */ void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); int main(int argc, char **argv) { FILE *fprm1; int otype; double rln, rlt, rht, t1, t2, tm; double ts, rng, thet, relp, telp; double xp[3]; // double xt[3]; double rp[3]; double dd[6]; /* dummy for output double precision */ float ds[6]; /* dummy for output single precision */ // double r0,rf,a0,af,dr; double rad = PI / 180.; double fll; int i, j, k, nrec, npad = 8000; int goldop(); int stai, endi, midi, xmin; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; FILE *ldrfile; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); double len, unit_x, unit_y, unit_z; double dist(); double Rx[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double Rz[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double A[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double local_look[3] = {0, 0, 0}; double pole_lon, pole_lat, b, g; /* Make sure usage is correct and files can be opened */ if (argc < 2 || argc > 3) { fprintf(stderr, "%s\n", USAGE); exit(-1); } /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 3) { if (!strcmp(argv[2], "-bos")) otype = 2; else if (!strcmp(argv[2], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* dubugging fprintf(stderr,"debug\n"); fprintf(stderr,"%s\n",prm.led_file); fprintf(stderr,"%lf\n",prm.fs); fprintf(stderr,"%d\n",prm.num_rng_bins); fprintf(stderr,"%d\n",prm.num_valid_az); fprintf(stderr,"%lf\n",prm.rc); fprintf(stderr,"%lf\n",prm.ra); fprintf(stderr,"%lf\n",prm.prf); fprintf(stderr,"%lf\n",prm.RE); fprintf(stderr,"%lf\n",prm.sub_int_a); fprintf(stderr,"%lf\n",prm.SC_clock_start); fprintf(stderr,"%lf\n",prm.clock_start); fprintf(stderr,"%d\n",prm.nrows); fprintf(stderr,"%d\n",prm.num_patches); fprintf(stderr,"%lf\n",prm.near_range); fprintf(stderr,"rshift = %d\n",prm.rshift); fprintf(stderr,"sub_int_r = %lf\n",prm.sub_int_r); fprintf(stderr,"chirp_ext = %d\n",prm.chirp_ext); */ fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ENVI_orb(ldrfile, &prm, orb); #if 0 dr = 0.5*SOL/prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); /* t2=t1+prm.num_patches*prm.num_valid_az/prm.prf; */ /* make the orbit longer */ t2 = t1 + 20 * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ /* fprintf(stderr,"ts=%lf,t1=%lf,nrec=%d\n",ts,t1,nrec); */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* look at the orb_pos for(i=0;i<4;i++) { for (j=0;j 180.) rp[1] = rp[1] - 360.; // xt[0]=-1.0; /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); xmin = goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); // xt[0]=rng; // xt[1]=tm; /* fprintf(stderr,"rng = %f, tm = %f",rng,tm); */ /* calculate the unit look vector originated from ground point to satellite in the global cartesian coordinate */ /* fprintf(stderr,"x y z of the satellite minimum: %f, %f, %f\n",orb_pos[1][xmin],orb_pos[2][xmin],orb_pos[3][xmin]); */ len = dist(xp[0], xp[1], xp[2], xmin, orb_pos); unit_x = (orb_pos[1][xmin] - xp[0]) / len; unit_y = (orb_pos[2][xmin] - xp[1]) / len; unit_z = (orb_pos[3][xmin] - xp[2]) / len; /* fprintf(stderr,"unit look vector: %f, %f, * %f\n",unit_x,unit_y,unit_z); */ /* there is a way to test the sign is right */ /* compute the look vector in local coordinate */ /* rotate the global coordinate to a local coordinate system */ /* location of the rotation pole */ /* refer to a matlab version rot3d.m to check the formula */ pole_lon = fmod((rln + 360.0), 360.0); /* fprintf(stderr,"pole_lon %f\n",pole_lon); */ pole_lat = rlt; /* construct a rotation matrix */ b = (pole_lat - 90) / 180. * 3.14159; Rx[0][0] = 1; Rx[0][1] = 0; Rx[0][2] = 0; Rx[1][0] = 0; Rx[1][1] = cos(b); Rx[1][2] = -sin(b); Rx[2][0] = 0; Rx[2][1] = sin(b); Rx[2][2] = cos(b); g = (pole_lon + 90) / 180. * 3.14159; Rz[0][0] = cos(g); Rz[0][1] = sin(g); Rz[0][2] = 0; Rz[1][0] = -sin(g); Rz[1][1] = cos(g); Rz[1][2] = 0; Rz[2][0] = 0; Rz[2][1] = 0; Rz[2][2] = 1; /* zero A */ for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) A[i][j] = 0; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) for (k = 0; k < 3; k++) A[i][j] += Rx[i][k] * Rz[k][j]; /* print out the matrix */ /* for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rx[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rz[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",A[i][j]); putchar('\n'); } */ for (i = 0; i < 3; i++) local_look[i] = A[i][0] * unit_x + A[i][1] * unit_y + A[i][2] * unit_z; /* compute the range and azimuth in pixel space xt[0] = (xt[0] - prm.near_range)/dr-(prm.rshift+prm.sub_int_r)+prm.chirp_ext; xt[1] = prm.prf*(xt[1]-t1)-(prm.ashift+prm.sub_int_a); fprintf(stderr,"xt[0] = %f\n",xt[0]); if(xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) continue; fprintf(stderr,"%f %f %f %f %f \n",xt[0],xt[1],rp[2],rp[1],rp[0]); */ if (otype == 1) { /* fprintf(stdout,"%f %f %f %f %f * %f\n",rp[1],rp[0],rp[2],unit_x,unit_y,unit_z); */ fprintf(stdout, "%f %f %f %f %f %f\n", rp[1], rp[0], rp[2], local_look[0], local_look[1], local_look[2]); } else if (otype == 2) { ds[0] = (float)rp[1]; ds[1] = (float)rp[0]; ds[2] = (float)rp[2]; ds[3] = (float)local_look[0]; ds[4] = (float)local_look[1]; ds[5] = (float)local_look[2]; fwrite(ds, sizeof(float), 6, stdout); } else if (otype == 3) { dd[0] = rp[1]; dd[1] = rp[0]; dd[2] = rp[2]; dd[3] = local_look[0]; dd[4] = local_look[1]; dd[5] = local_look[2]; fwrite(dd, sizeof(double), 6, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/preproc/ENVI_preproc/ASA_CAT/Makefile000644 015705 000000 00000000422 13505462014 022237 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = asa_cat CSRCS = asa_cat.c OBJS = $(CSRCS:.c=.o) CLIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ENVI_preproc/ASA_CAT/asa_cat000755 015705 000000 00000103474 13507242216 022135 0ustar00sandwellwheel000000 000000 ` H__PAGEZERO(__TEXTpp__text__TEXT N __stubs__TEXTZrZ__stub_helper__TEXT$[$[__const__TEXT\\__cstring__TEXT\\__unwind_info__TEXTo`o8__DATApp__nl_symbol_ptr__DATApp__got__DATApp__la_symbol_ptr__DATAppH__LINKEDIT<"08@X % P) /usr/lib/dyldZJ|.>i&աO2   *( 8/usr/lib/libSystem.B.dylib&x )UHAWAVAUATSHIAHcHHEDžRH=w\NAlH=5`NH=y`NH=`NH=!axNH=UalNH=a`NH=aTNH=aHNH=Yb$I|$H5PHlS1(NlSH=O1NlS`*ec*EwA9b*L5WP1DITH1LMHclSH9|I|H58PH01HMH=#P1HMHclSHD9}I|H5GOHR1kMRtuH=O1 H=*P1,MH=5[,MlSLRE1fK|1H5OHHL1H=PHLHH5PLH#HH=.]LLHl#IL(SHHULH=H8SC#HHL/)HVH5LAE RAEfRAEfRAE fRAE"fRAE$fRH RKAHRKAHRK@SHR}KHRoKAHRZKxRH=NDD@SAEtKA*A*f(fLX^bLf: XY@LYPLYPLf: \Y FL^f: @SW*XXWA* Lf(xR^XW*^X^ KX KXX KL(SB\B`YLoJH8SQJIHclSI9LRgH=XgJHclSADHE1Df.DEA)\Au1ADH)1@Ո\f.v!Հ\Ո\f.f(HZՐ\f.vՈ\Ր\ Df(HH9uAt.݈\f.v݀\݈\f.D9EDƃu1HI)1f.Հ\1Df.`Yu{HH9|f_HH̀\1f.`Yu{HH9|f_HI{Ht4Հ\1f.f.`Yu{ HH9|_H= L1DHlS~-L5L1f_1LHHHclSH9|޿ HH5KH0GH$IălSDžSDžRHRHRDžRHHSDžSH8SDž4SE1DžhSE1fWRfWRLSfED0SRRRDщRHRHc_HRH|1H5ILLFs1H=JFLH5JFHSHH=.WFFHlIǾHHSXFH=DXSFHpSHL2#HVH8FH=T>FLc$YLFHLS"HLHSHEL9P"HUHHVHHpSHRHL0HİlURHRLpR~EHUHLIhEH='UnELRLL4EH=!L&EH8HHRLIEH=TELRLLLDL99!1HWH5HHHH,RL>HH0RL>HcH4RL>H@H8RL\>HHRL9>HH^SL>HH`SL=HHbSL=HHdSL=HnHfSL=HKHRLg=H(H_LD=HHpaLL#=Hfo_f8>f_f_f_f_f_f_f_f_AEH8SRH8SD;RAHhR9HSL@SLSLu9H SL\9H$SLC9DSD SD$SHRL9HRL8HRL8H\SL8\SfxRH^SL8H`SL8HbSLq8HdSLX8HfSL?8HVSL&8H_LL@S8fo_fo 9fof8f_f_f_f_f_f_f_f___H_H_f(_f_o_f8_f_f_f_f_f_H_H_f)_f_ D=;au&AuHHSH1H=;HhRA7AEADDxRfARXSH(SP9RH9RLS9hSEA݃LcHLHS^6HSLW6H H SL46H H$SL6H HRL5H HRL5H HRL5Hi H\SL5HF H^SLb5H# H`SL?5H HbSL5H HdSL4H HfSL4H HVSL4Ht H_L4HQ HLLo4H0 HHSHHSH8SDDH8SlhSLSEA݃LcHLHS3HSL3H H SL3H H$SL3Hk HRL3HH HRLd3H% HRLA3H H\SL3H H^SL2H H`SL2H HbSL2Hv HdSL2HS HfSLo2H0 HVSLL2H H_L)2HHLL2HHHSHHSH8SDDH8SDžREXSLShS)fAA)D0Ss1SAHHSz1D0SXSRH9R:1D4SE11H=6D1HHSp1H=d6RH(ShS11H=6LRD0ADCDD*DT f: f.A2LraE1E1E1DσLLH%HƄpa1f.@HIփ)tuf.LH>t4JT2)уtufD fIWA*I?I@f.C,LcIBƄpaAL@SEAAAE;`H(SL@SAʼnH(SD;Rp!f.@D0ShSXShSD4SlSH9R1HWH53HRAELRLLRLRHPRSHRS/HLH52.SDLH52.DLH52.DLH52.DLH52.DLH52y.DLH5k2`.DLH5V2G.DLH5A2.. DLH5,2. DLH52- DLEELSH51- DPR*RS*f(%.X^.f: XY j.Yz.Yz.f: \Yp.^f: W*RXXW*RH.^XW*R^X^-.X-.XX).RHpRHHHHHH f(*1 1HH 2L,fEAHpRH-,HR!,HS,HclSHhRHH9FfWR1H8SDžS1HHS1HR1HRfWRR\RRH=k11S+H=11LHSD+HHHRHHHHf RY,f: D,H 0H1*HHC'Lc$YL8SG7H 0HpS1z*H*=*HpSHxSHHHP H}SHHH <0H1E&*H 0H 1E*LRI=R*HHHHHP HI ="*HHHfH 11L)H=q8)HL)H=H=$9)LLL)L9HRi)La)LG)H='8w)Ht>HH;Eu*1H[A\A]A^A_]H=8G)((H=9H=9H=e,H1) )(H=J9H=7(LHSAuH=-1H(S(H5,HRLRLRLR1HWLHPRSHRS(HH5w,L(SDH5\,Lb(ADEH5E,LG(AEEH5.,L,(AEH5,L(ADEH5,L'AEH5+L'ADEH5+L'AEH5+L'A DEH5+L' AEH5+Ls'A DEH5z+LX' AEPR*R(*f(-(X^% (f: XY%(Y%(YWf: Y'\^Wf: XW*RW*R%'^XW*R^X^'XX'XX'@SHpRHHHHHH f(*H +HL 1%HHLRIIHIfA @S\RY&Af: D,H +H1%HIG'Lc$YH8SF3H *HpS1$I*=%HpSHxSHHHP H}SHHH *H1At$H n*H 1LHSN$HRHH=$HHHHHP HH =i$HHHfH 11L$H=h3/$LL#H=uZH=o3$HRLHS#L9u.HR#HR#HS#v#H=3`H=3TH=4HH=Q4HFnHGNHF_HNgHOGHG?HHGvHHGnHHGfHFxHHO^HGVHHHHG~fHHHHHHfHHHHH?HH7HH'H/HHHGHwfHoHH_HgHHyfHHHHH HHH?HH7HH/HHH'HGH= Hx] AHH= Hx< ALH=x Hx APHH ITI\H(Id0fAl2AnH5= HxApHK=HxAxHf=HxhAH=HxEAH=Hx"AH=bHxAH=?HxAfAH&IHIHIHHIIH=HEIIHMIUfAWAHZ=Hx$AHv=`HxAHIHIHHIIHHI HI(fA0A2IH=HxdA4H=HxCA8HHI<IDHILH ITHI\H=9HxAdH*=HxAhHP=HxAlHl=HxyApH=HxXAtH=Hx7AxHHI|IHIHIHIEMo>Mg?MwVI_~IHEIHEIHEIHEIHEIHEIHEIGHEITHEIHEIHEIHxIHpIHhI<H`I|HXH=p!H5r!1L6H={!H5|!1LH=!H5!1LL%!H5!1LLH=!H5!1HH=!H5!1HUL5!H5!1LHUH=!H5!1HUH5!1LHUpH5!1LHU[H5!1LHUFH5!1LHU1H5!1H=m HUAHL-!H5!1LALH5!1LAPH5!1LH5!1LHUApH!H5!HAxH5!HyAH5!H_AH5!HEAH5!H+AH5!HAH5!HH=!H5!1HUH5!1LHUH5!1LHxAH!H5!1HAH5!1HzH=!H5!1Hp^H5!1LHhFA4H5!1L.A8H5!1LH5!1LH`AdH5!1LAhH5!1LAlH5!1LApH5!1LAtH5!1LAxH5"1LnH5 "1LHXV RLHĈ[A\A]A^A_]UH* Y*%f(X^-f: XY-Y-Wf: \Y^Wf: XW*^WA*X^W*X^XXXX]UH΅E1Af.fAE)Au1AfDDȃH)1fLf.v D (HALf.vLDf.D(HH9uAtLf.v DAAA91]f.DUHAWAVAUATSH(AHILmF(GHF HGHFHNHOHH~.=?HxYnAG H{N=HxYIAG(H{o=HxY$AG0H=HxjYAG8H=HxBAG@HHIGHIOPHIGXHIG`HIGhHIGpfAGxH=7HxAG|H=HxAH4=HxAHP=HxzAHaHiIIHqIHyIHIHIfAH=SHxAH=2HxAH=HxAH=HxAH=HxnAH7=HxGAH`=Hx*AHx=fHxAMHdL AhAdAkfAiBAHH"IlItH*I|H2IH:IDuEMoHIHEIdHEIiHEIlHEH=H51LCAG L5eH5L%AG(H5LAG0H5LAG8H5LAG@H5LH=#H5U1LAW|L-gH5 1LAH5 1L}AH5 1LeAH51LMH51H=HU4AH51LAH5LAH51LAH5LAH51LAH5LAH51LLmAH5LhH=H51LPH=H51HU7H=H51HUH=H51HUIcpHEHDeIctHEHME1E1DIDCCC/HCK/HHKK/K/C&C/HC2HK:K/HKBK/HKJK/HKRK/HKZK/HKbK/HKhK/K/H{r=3Hx C/H=Hx C/H= Hx C/H= Hxp C/EO/K/HEK/HE1H=kL%qLDH jY 1H=pLDH oLE: 1H=qLDH qLE G/1H kHLDH e G/1H=ELDH V G/1H="LDH G G/1H=LDeDH 4 IH]IlL;uEu b LH([A\A]A^A_]f.UHσHHc H]ÅtJHH1Ht܍JHH1HUtJHH`1HtJHH1HtJHH1HKH=] H=]{ NȉɉNFȉF]AAL)HN1fo f.Do ~oT~f8f8 ~T~HH9uE)1f.fHH9uAAL)HN1foG o ~oT~f8f8 ~T~HH9uEm)1f.fHH9uNAAL)H1fo o oTf8f8 THH9uE)1f.4Ή4H9uAAL)H1fot @o oTf8f8 THH9uE)1f.4Ή4H9ukAAL)H1fo @o oTf8f8 THH9uE)1f.4Ή4H9u9WuUHAWAVAUATSH(ILuF(GHF HGHFHNHOHHF.HN6HGHO$HF>HG,HFFHG4HFNHG @.A       %d Number of input files: %d ERROR: File names missing in input list. %s Number of files to be concatenated. %s Number of input file names provided. %d Input file %d : %s %sOutput file: %s catAbortFlag: %d. Files will NOT be concatenated if they don't overlap. catAbortFlag: %d. Files will be concatenated even if they don't overlap. Opening file: %s rb*** ERROR - cannot open file: %s Date and time of first line of file (yyyy mo dd hh mm ss): %d %d %d %d %d %f File order after sorting: %dwb Input file: %d %2d-%3c-%4d %2d:%2d:%lfJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECNumber of lines in frame %d: %d Line %6d of input file %d. Output Line: %8d Line %6d of input file %d. Output Line: %8d modePacketCount: %d WARNING: No overlap between frames %d and %d. Continuing concatenation with with missing lines. At output Line %5d : Mode packet count at successive frame edges - %d %d Number of missing lines: %d %.27s%08d%021d%020d%010d Number of duplicate lines found between overlapping frames: %8d Total number of lines in output files: %8d %s%.62s product: %s%.1s procStage: %s%.23s refDoc: %s%.40s spare1: %s%.20s acquisitionStation: %s%.6s procCenter: %s%.27s procTime: %s%.14s softwareVer: spare2: sensingStart: sensingStop: spare3: phase: %s%d cycle: relOrbit: absOrbit: stateVectorTime: %s%f deltaUt1: xPosition: yPosition: zPosition: xVelocity: yVelocity: zVelocity: %s%.2s vectorSource: spare4: utcSbtTime: %s%u satBinaryTime: clockStep: %s%.32s spare5: leapUtc: leapSign: leapErr: spare6: productErr: totSize: sphSize: numDsd: dsdSize: numDataSets: spare7: %s%.28s sphDescriptor: startLat: startLon: stopLat: stopLon: satTrack: %s%.50s ispErrorsSignificant: missingIspsSignificant: ispDiscardedSignificant: rsSignificant: numErrorIsps: errorIspsThresh: numMissingIsps: missingIspsThresh: numDiscardedIsps: discardedIspsThresh: numRsIsps: rsThresh: %s%.100s %s%.5s txRxPolar: %s%.3s swath: %s%.41s %s%d%s%.28s dsd[ ].dsName: %s%d%s%.1s ].dsType: %s%d%s%.62s ].filename: %s%d%s%d ].dsOffset: ].dsSize: ].numDsr: ].dsrSize: %s%.51s *** asa_cat v1.3 by Dochul Yang and Vikas Gudipati*** It is running under Linux or Windows... Sorting files in ascending order of their sensing start times ... Writing updated MPH of output file... Done. Reading SPH...Reading and Writing MDSR... WARNING: No overlap between frames. Aborting further concatenation.Writing updated MPH of output file...Writing updated SPH of output file...ERROR - outFile write error Initializing MPH of output file...Initializing SPH of output file... ERROR - outFile write error ERROR - sph read error ERROR - sph allocation memoryReading MPH...ERROR - mph read error ERROR - mph allocation memoryERROR: Maximum number of files allowed for concatenation exceeded. Max: 100. Look at command usage. ERROR: Number of files to concatenate is less than one(1). Look at command usage. Concatenates Envisat ASAR Image Mode / Wide Swath Mode Level 0 data. Usage: asa_cat <...> [catAbort] NumFiles2Cat Number of files to be concatenated (positive integer, Max: 100) asa_file1 First file to be merged (along track) asa_file2 Second file to be merged (along track) ... Rest of files to be merged (along track) out_file output data file [catAbort] Flag to discontinue concatenation if non-overlaping frames are found. (0: Discontinue, 1: Continue, Default: 0)Notes: swap_endian_order: DOUBLE type was not yet processedswap_endian_order: unknown data type$$X <<Z< $7p9B FI4[>[H[R[\[f[p[z[[[[[[[[[[[["`@___stack_chk_guardQr@dyld_stub_binderr@___sprintf_chkr @___stack_chk_failr(@_atofr0@_atoir8@_exitr@@_fcloserH@_fopenrP@_freadrX@_freer`@_fseekrh@_fwriterp@_mallocrx@_memcpyr@_printfr@_putcharr@_putsr@_sscanfr@_strchrr@_strcmp__mh_execute_headerWmain[read`date2MJDrbxswap_endian_orderis_bigendianMphmSphoЇubbleSortyte_swap_AuxshortlongintufloatЫintshortlongаWQTD" Z3WBUR@UcWsXPXC0U 7E@RN%+3:AGNV^fnw} !"#$@ !"# __mh_execute_header_bubbleSort_byte_swap_float_byte_swap_int_byte_swap_long_byte_swap_short_byte_swap_uint_byte_swap_ulong_byte_swap_ushort_date2MJD_is_bigendian_main_readMph_readSph_readSphAux_swap_endian_order___sprintf_chk___stack_chk_fail___stack_chk_guard_atof_atoi_exit_fclose_fopen_fread_free_fseek_fwrite_malloc_memcpy_printf_putchar_puts_sscanf_strchr_strcmpdyld_stub_binderGMTSAR_V5.7/preproc/ENVI_preproc/ASA_CAT/asa_cat.c000644 015705 000000 00000200032 13505462014 022335 0ustar00sandwellwheel000000 000000 /*********************************************************************************************************************************** asa_cat.c version 1.3 Concatenates Envisat ASAR Image Mode / Wide Swath Mode Level 0 data compiled on a Linux with command: gcc -O2 -lm asa_cat.c -o asa_cat Dochul Yang and Vikas Gudipati version 1.0 July 15 2008 This code is based on ASAR IM Mode Level 0 data decoder written by Sean M Buckley. version 1.1 July 15 2008 : First working version version 1.2 August 19 2008 : Replaced the use of roundl() by floor(), to round off floats to integers : Included header for older gcc compilers. version 1.3 Sept 10 2008 : Concatenates files even if they are non-overlapping (by filling (127,127 or (128,128) for (I,Q) pairs) ***********************************************************************************************************************************/ #include #include #include #include /** * The EPR_DataTypeId enumeration lists all possible data * types for field elements in ENVISAT dataset records. */ // added by Z. Li on 16/02/2005 // extracted from ESA BEAM epr_api package #define fileSize 100 /* Maximum number of file that can be concatenated. later change */ enum EPR_DataTypeId { /** The ID for unknown types. */ e_tid_unknown = 0, /** An array of unsigned 8-bit integers, C type is uchar* */ e_tid_uchar = 1, /** An array of signed 8-bit integers, C type is char* */ e_tid_char = 2, /** An array of unsigned 16-bit integers, C type is ushort* */ e_tid_ushort = 3, /** An array of signed 16-bit integers, C type is short* */ e_tid_short = 4, /** An array of unsigned 32-bit integers, C type is ulong* */ e_tid_ulong = 5, /** An array of signed 32-bit integers, C type is long* */ e_tid_long = 6, /** An array of 32-bit floating point numbers, C type is float* */ e_tid_float = 7, /** An array of 64-bit floating point numbers, C type is double* */ e_tid_double = 8, /** A zero-terminated ASCII string, C type is char* */ e_tid_string = 11, /** An array of unsigned character, C type is uchar* */ e_tid_spare = 13, /** A time (MJD) structure, C type is EPR_Time */ e_tid_time = 21 }; /* structures */ struct mphStruct { char product[62]; char procStage[1]; char refDoc[23]; char spare1[40]; char acquisitionStation[20]; char procCenter[6]; char procTime[27]; char softwareVer[14]; char spare2[40]; char sensingStart[27]; char sensingStop[27]; char spare3[40]; char phase[1]; int cycle; int relOrbit; int absOrbit; char stateVectorTime[27]; double deltaUt1; double xPosition; double yPosition; double zPosition; double xVelocity; double yVelocity; double zVelocity; char vectorSource[2]; char spare4[40]; char utcSbtTime[27]; unsigned int satBinaryTime; unsigned int clockStep; char spare5[32]; char leapUtc[27]; int leapSign; int leapErr; char spare6[40]; int productErr; int totSize; int sphSize; int numDsd; int dsdSize; int numDataSets; char spare7[40]; }; struct dsdStruct { char dsName[28]; char dsType[1]; char filename[62]; int dsOffset; int dsSize; int numDsr; int dsrSize; }; struct sphStruct { char sphDescriptor[28]; double startLat; double startLon; double stopLat; double stopLon; double satTrack; char spare1[50]; int ispErrorsSignificant; int missingIspsSignificant; int ispDiscardedSignificant; int rsSignificant; char spare2[50]; int numErrorIsps; double errorIspsThresh; int numMissingIsps; double missingIspsThresh; int numDiscardedIsps; double discardedIspsThresh; int numRsIsps; double rsThresh; char spare3[100]; char txRxPolar[5]; char swath[3]; char spare4[41]; struct dsdStruct dsd[4]; }; struct sphAuxStruct { char sphDescriptor[28]; char spare1[51]; struct dsdStruct dsd[1]; }; struct dsrTimeStruct { int days; int seconds; int microseconds; }; struct calPulseStruct { float nomAmplitude[32]; float nomPhase[32]; }; struct nomPulseStruct { float pulseAmpCoeff[4]; float pulsePhsCoeff[4]; float pulseDuration; }; struct dataConfigStruct { char echoCompMethod[4]; char echoCompRatio[3]; char echoResampFlag[1]; char initCalCompMethod[4]; char initCalCompRatio[3]; char initCalResampFlag[1]; char perCalCompMethod[4]; char perCalCompRatio[3]; char perCalResampFlag[1]; char noiseCompMethod[4]; char noiseCompRatio[3]; char noiseResampFlag[1]; }; struct swathConfigStruct { unsigned short numSampWindowsEcho[7]; unsigned short numSampWindowsInitCal[7]; unsigned short numSampWindowsPerCal[7]; unsigned short numSampWindowsNoise[7]; float resampleFactor[7]; }; struct swathIdStruct { unsigned short swathNum[7]; unsigned short beamSetNum[7]; }; struct timelineStruct { unsigned short swathNums[7]; unsigned short mValues[7]; unsigned short rValues[7]; unsigned short gValues[7]; }; /* problems begin with field 132 - check the double statement */ struct testStruct { float operatingTemp; float rxGainDroopCoeffSmb[16]; /* this needs to be converted to a double array of eight elements */ // double rxGainDroopCoeffSmb[ 8 ]; /* Something wrong here, why?*/ }; struct insGadsStruct { /* see pages 455-477 for the 142 fields associated with this gads - got length of 121712 bytes */ struct dsrTimeStruct dsrTime; unsigned int dsrLength; float radarFrequency; float sampRate; float offsetFreq; struct calPulseStruct calPulseIm0TxH1; struct calPulseStruct calPulseIm0TxV1; struct calPulseStruct calPulseIm0TxH1a; struct calPulseStruct calPulseIm0TxV1a; struct calPulseStruct calPulseIm0RxH2; struct calPulseStruct calPulseIm0RxV2; struct calPulseStruct calPulseIm0H3; struct calPulseStruct calPulseIm0V3; struct calPulseStruct calPulseImTxH1[7]; struct calPulseStruct calPulseImTxV1[7]; struct calPulseStruct calPulseImTxH1a[7]; struct calPulseStruct calPulseImTxV1a[7]; struct calPulseStruct calPulseImRxH2[7]; struct calPulseStruct calPulseImRxV2[7]; struct calPulseStruct calPulseImH3[7]; struct calPulseStruct calPulseImV3[7]; struct calPulseStruct calPulseApTxH1[7]; struct calPulseStruct calPulseApTxV1[7]; struct calPulseStruct calPulseApTxH1a[7]; struct calPulseStruct calPulseApTxV1a[7]; struct calPulseStruct calPulseApRxH2[7]; struct calPulseStruct calPulseApRxV2[7]; struct calPulseStruct calPulseApH3[7]; struct calPulseStruct calPulseApV3[7]; struct calPulseStruct calPulseWvTxH1[7]; struct calPulseStruct calPulseWvTxV1[7]; struct calPulseStruct calPulseWvTxH1a[7]; struct calPulseStruct calPulseWvTxV1a[7]; struct calPulseStruct calPulseWvRxH2[7]; struct calPulseStruct calPulseWvRxV2[7]; struct calPulseStruct calPulseWvH3[7]; struct calPulseStruct calPulseWvV3[7]; struct calPulseStruct calPulseWsTxH1[5]; struct calPulseStruct calPulseWsTxV1[5]; struct calPulseStruct calPulseWsTxH1a[5]; struct calPulseStruct calPulseWsTxV1a[5]; struct calPulseStruct calPulseWsRxH2[5]; struct calPulseStruct calPulseWsRxV2[5]; struct calPulseStruct calPulseWsH3[5]; struct calPulseStruct calPulseWsV3[5]; struct calPulseStruct calPulseGmTxH1[5]; struct calPulseStruct calPulseGmTxV1[5]; struct calPulseStruct calPulseGmTxH1a[5]; struct calPulseStruct calPulseGmTxV1a[5]; struct calPulseStruct calPulseGmRxH2[5]; struct calPulseStruct calPulseGmRxV2[5]; struct calPulseStruct calPulseGmH3[5]; struct calPulseStruct calPulseGmV3[5]; struct nomPulseStruct nomPulseIm[7]; struct nomPulseStruct nomPulseAp[7]; struct nomPulseStruct nomPulseWv[7]; struct nomPulseStruct nomPulseWs[5]; struct nomPulseStruct nomPulseGm[5]; float azPatternIs1[101]; float azPatternIs2[101]; float azPatternIs3Ss2[101]; float azPatternIs4Ss3[101]; float azPatternIs5Ss4[101]; float azPatternIs6Ss5[101]; float azPatternIs7[101]; float azPatternSs1[101]; float rangeGateBias; float rangeGateBiasGm; float adcLutI[255]; float adcLutQ[255]; char spare1[648]; float full8LutI[256]; float full8LutQ[256]; float fbaq4LutI[4096]; float fbaq3LutI[2048]; float fbaq2LutI[1024]; float fbaq4LutQ[4096]; float fbaq3LutQ[2048]; float fbaq2LutQ[1024]; float fbaq4NoAdc[4096]; float fbaq3NoAdc[2048]; float fbaq2NoAdc[1024]; float smLutI[16]; float smLutQ[16]; struct dataConfigStruct dataConfigIm; struct dataConfigStruct dataConfigAp; struct dataConfigStruct dataConfigWs; struct dataConfigStruct dataConfigGm; struct dataConfigStruct dataConfigWv; struct swathConfigStruct swathConfigIm; struct swathConfigStruct swathConfigAp; struct swathConfigStruct swathConfigWs; struct swathConfigStruct swathConfigGm; struct swathConfigStruct swathConfigWv; unsigned short perCalWindowsEc; unsigned short perCalWindowsMs; struct swathIdStruct swathIdIm; struct swathIdStruct swathIdAp; struct swathIdStruct swathIdWs; struct swathIdStruct swathIdGm; struct swathIdStruct swathIdWv; unsigned short initCalBeamSetWv; unsigned short beamSetEc; unsigned short beamSetMs; unsigned short calSeq[32]; struct timelineStruct timelineIm; struct timelineStruct timelineAp; struct timelineStruct timelineWs; struct timelineStruct timelineGm; struct timelineStruct timelineWv; unsigned short mEc; char spare2[44]; float refElevAngleIs1; float refElevAngleIs2; float refElevAngleIs3Ss2; float refElevAngleIs4Ss3; float refElevAngleIs5Ss4; float refElevAngleIs6Ss5; float refElevAngleIs7; float refElevAngleSs1; char spare3[64]; float calLoopRefIs1[128]; float calLoopRefIs2[128]; float calLoopRefIs3Ss2[128]; float calLoopRefIs4Ss3[128]; float calLoopRefIs5Ss4[128]; float calLoopRefIs6Ss5[128]; float calLoopRefIs7[128]; float calLoopRefSs1[128]; char spare4[5120]; struct testStruct im; struct testStruct ap; struct testStruct ws; struct testStruct gm; struct testStruct wv; float swstCalP2; char spare5[72]; }; // added by Z. Li on 16/02/2005 typedef enum EPR_DataTypeId EPR_EDataTypeId; typedef int boolean; typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint; typedef unsigned long ulong; /* function prototypes */ struct mphStruct readMph(const char *mphPtr, const int printMphIfZero); struct sphStruct readSph(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph); struct sphAuxStruct readSphAux(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph); // added by Z. Li on 16/02/2005 int is_bigendian(); void byte_swap_short(short *buffer, uint number_of_swaps); void byte_swap_ushort(ushort *buffer, uint number_of_swaps); void byte_swap_long(long *buffer, uint number_of_swaps); void byte_swap_ulong(ulong *buffer, uint number_of_swaps); void byte_swap_float(float *buffer, uint number_of_swaps); /* new byte_swap_int type added below*/ void byte_swap_int(int *buffer, uint number_of_swaps); void byte_swap_uint(uint *buffer, uint number_of_swaps); /* new byte_swap_uint type added above*/ void swap_endian_order(EPR_EDataTypeId data_type_id, void *elems, uint num_elems); double date2MJD(int yr, int mo, int day, int hr, int min, double sec); void bubbleSort(double array[], int len); /**********************************************************************************************************************************/ int main(int argc, char *argv[]) { /* variable definitions */ FILE *imFilePtr; FILE *outFilePtr; // FILE *blockIdFilePtr; // FILE *insFilePtr; char imFileName[200]; char outFileName[200]; // char blockIdFileName[ 200 ] = "blockId"; // char insFileName[ 200 ]; char syear[4]; /* need to figure out */ char smonth[3]; char sday[3]; char shh[3]; char smm[3]; char sss[3]; // char sfracsec_start[6]; // char sfracsec_end[6]; char sensingStopTime[32]; char ssensingStopTime[32]; // char sensingStartTime[27]; // char ssensingStartTime[27]; // char start_lat[20]; // char sstart_lat[20]; // char stop_lon[20]; // char sstop_lon[20]; char totsize[22]; char ds_size[21]; char num_dsr[11]; char secduration[16]; char *mphPtr; char *sphPtr; char *mphPtr2 = NULL; char *sphPtr2 = NULL; // char *gadsPtr; // unsigned char onBoardTimeLSB; // unsigned char auxTxMonitorLevel; // unsigned char mdsrBlockId[ 200 ]; // unsigned char mdsrCheck[ 63 ]; // unsigned char beamAdjDeltaCodeword; // unsigned char compressionRatio; // unsigned char echoFlag; // unsigned char noiseFlag; // unsigned char calFlag; // unsigned char calType; // unsigned char spare; // unsigned char antennaBeamSetNumber; // unsigned char TxPolarization; // unsigned char RxPolarization; // unsigned char calibrationRowNumber; // unsigned char chirpPulseBandwidthCodeword; unsigned char mdsrLineChar[20000]; unsigned char tempmdsrLineChar[20000]; int printImMphIfZero = 1; int printImSphIfZero = 1; // int printImMdsrIfZero = 1; // int printInsMphIfZero = 1; // int printInsSphIfZero = 1; // int printBlockIdIfZero = 1; // int noAdcIfZero = 1; int firstTimeEqualsZero = 0; int mphSize = 1247; /* fixed size */ // int outSamples = 0; int outLines = 0; int duplicateLines = 0; // int sampleShift = 0; int bytesRead = 0; int bytesToBeWritten = 0; // int nonOverlappingLineIfZero = 0; // int outType = 4; int i; int ii; int j; // int k; // int m; // int n; // int counter = 1; int numFiles; int mdsrDsrTimeDays; int mdsrDsrTimeSeconds; int mdsrDsrTimeMicroseconds; int mdsrGsrtTimeDays; int mdsrGsrtTimeSeconds; int mdsrGsrtTimeMicroseconds; // int mdsrLineInt; int tempmdsrDsrTimeDays; int tempmdsrDsrTimeSeconds; int tempmdsrDsrTimeMicroseconds; int tempmdsrGsrtTimeDays; int tempmdsrGsrtTimeSeconds; int tempmdsrGsrtTimeMicroseconds; int newmdsrDsrTimeDays; int newmdsrDsrTimeSeconds; int newmdsrDsrTimeMicroseconds; int oldmdsrDsrTimeDays = 0; int oldmdsrDsrTimeSeconds = 0; int oldmdsrDsrTimeMicroseconds = 0; int file_order[fileSize]; /* need to change */ int totfilesize; // int ifracsec_diff; int imjd_diffsec; int duration; int oldFrameID; int FrameID; int catAbortFlag = 0; int jjj, kkk; int tempsamplecount; unsigned int modePacketCount = 0; unsigned int modePacketCountOld = 0; unsigned int tempmodePacketCount; // unsigned int onBoardTimeIntegerSeconds = 0; // short upConverterLevel; // short downConverterLevel; unsigned short tempmdsrIspLength; unsigned short tempmdsrILen; // unsigned short resamplingFactor; // unsigned short onBoardTimeMSW; // unsigned short onBoardTimeLSW; unsigned short mdsrIspLength; unsigned short mdsrILen; unsigned short mdsrCrcErrs; unsigned short mdsrRsErrs; unsigned short mdsrSpare1; unsigned short mdsrPacketIdentification; unsigned short mdsrPacketSequenceControl; unsigned short mdsrPacketLength; unsigned short tempmdsrPacketLength; unsigned short mdsrPacketDataHeader[15]; unsigned short tempmdsrPacketDataHeader[15]; // unsigned short onBoardTimeFractionalSecondsInt = 0; // unsigned short TxPulseLengthCodeword; // unsigned short priCodeword; // unsigned short priCodewordOld; // unsigned short priCodewordOldOld; // unsigned short windowStartTimeCodeword; // unsigned short windowStartTimeCodeword0; // unsigned short windowStartTimeCodewordOld; // unsigned short windowStartTimeCodewordOldOld; // unsigned short windowLengthCodeword; // unsigned short modeID; // unsigned short cyclePacketCount; // float mdsrLine[ 20000 ]; // double onBoardTimeFractionalSeconds; // double TxPulseLength; // double beamAdjDelta; // double chirpPulseBandwidth; // double c = 299792458.; // double timeCode; // double pri; // double windowStartTime; // double windowLength; // double curser; double newt, oldt, delta1, est_pri; double temptimesec; int nmsl, msl; int year; int month; int day; int hh; int mm; double ss; double MJD[fileSize]; /* need to change */ double MJD_original[fileSize]; /* need to change */ double mjd_start = 0.0; double mjd_end = 0.0; double mjd_diffsec; // double fracsec_start; // double fracsec_end; // double fracsec_diff; char stmonthstr[4]; char emonthstr[4]; int stday, styear, stmonth = 0, sthour, stmin; int eday, eyear, emonth = 0, ehour, emin; double stseconds; double eseconds; struct mphStruct mph; // struct mphStruct mphIns; struct sphStruct sph; // struct sphAuxStruct sphIns; // struct insGadsStruct insGads; int is_littlendian; /* usage note */ printf("\n*** asa_cat v1.3 by Dochul Yang and Vikas Gudipati***\n\n"); if ((argc - 1) < 3) { printf("Concatenates Envisat ASAR Image Mode / Wide Swath Mode Level 0 " "data.\n\n"); printf("Usage: asa_cat <...> " " [catAbort]\n\n"); printf(" NumFiles2Cat Number of files to be concatenated (positive " "integer, Max: 100) \n"); printf(" asa_file1 First file to be merged (along track)\n"); printf(" asa_file2 Second file to be merged (along track)\n"); printf(" ... Rest of files to be merged (along track)\n"); printf(" out_file output data file\n"); printf(" [catAbort] Flag to discontinue concatenation if " "non-overlaping frames are found. (0: Discontinue, 1: Continue, " "Default: 0)\n"); printf("Notes:\n\n"); return 0; } sscanf(argv[1], "%d", &numFiles); printf("\nNumber of input files: %d\n", numFiles); if (numFiles < 1) { printf("ERROR: Number of files to concatenate is less than one(1). Look at " "command usage.\n\n"); exit(-1); } if (numFiles > 100) { printf("ERROR: Maximum number of files allowed for concatenation exceeded. " "Max: 100. Look at command usage.\n\n"); exit(-1); } if ((argc - 3) < numFiles) { printf("\nERROR: File names missing in input list. %s\n", argv[1]); printf("\nNumber of files to be concatenated. %s\n", argv[1]); printf("\nNumber of input file names provided. %d\n", (argc - 3)); exit(-1); } for (ii = 0; ii < numFiles; ii++) { printf("Input file %d : %s\n", ii + 1, argv[ii + 2]); } sscanf(argv[numFiles + 2], "%s", outFileName); printf("Output file: %s\n\n", outFileName); if (argc > (numFiles + 3)) { sscanf(argv[numFiles + 3], "%d", &catAbortFlag); } if (catAbortFlag == 0) { printf("catAbortFlag: %d. Files will NOT be concatenated if they don't " "overlap.\n", catAbortFlag); } else if (catAbortFlag == 1) { printf("catAbortFlag: %d. Files will be concatenated even if they don't " "overlap.\n", catAbortFlag); } if (is_bigendian()) { printf("It is running under Unix or Mac...\n"); is_littlendian = 0; } else { printf("It is running under Linux or Windows...\n"); is_littlendian = 1; } /* begin loop over files for extract mph product name (DATE + HHMMSS) and sort * by MJD*/ for (ii = 0; ii < numFiles; ii++) { /* open image file */ sscanf(argv[ii + 2], "%s", imFileName); printf("\nOpening file: %s\n", imFileName); imFilePtr = fopen(imFileName, "rb"); if (imFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", imFileName); printf("\n"); exit(-1); } /* read image MPH */ printf("Reading MPH...\n"); mphPtr = (char *)malloc(sizeof(char) * mphSize); if (mphPtr == NULL) { printf("ERROR - mph allocation memory\n"); exit(-1); } if ((fread(mphPtr, sizeof(char), mphSize, imFilePtr)) != mphSize) { printf("ERROR - mph read error\n\n"); exit(-1); } mph = readMph(mphPtr, printImMphIfZero); /* extract information from MPH */ memcpy(syear, mphPtr + 23, 4); memcpy(smonth, mphPtr + 27, 2); memcpy(sday, mphPtr + 29, 2); memcpy(shh, mphPtr + 32, 2); memcpy(smm, mphPtr + 34, 2); memcpy(sss, mphPtr + 36, 2); year = atoi(syear); month = atoi(smonth); day = atoi(sday); hh = atoi(shh); mm = atoi(smm); ss = atof(sss); printf("Date and time of first line of file (yyyy mo dd hh mm ss): %d %d " "%d %d %d %f\n", year, month, day, hh, mm, ss); MJD[ii] = date2MJD(year, month, day, hh, mm, ss); MJD_original[ii] = MJD[ii]; free(mphPtr); fclose(imFilePtr); } /* end of for loop */ // for (i=0; i< numFiles; i++){printf("\n%d : %f", i, MJD[i]);} printf("\nSorting files in ascending order of their sensing start times ...\n"); bubbleSort(MJD, numFiles); // for (i=0; i< numFiles; i++){printf("\n%d : %f", i, MJD[i]);} for (i = 0; i < numFiles; i++) { for (j = 0; j < numFiles; j++) { if (MJD[i] == MJD_original[j]) { file_order[i] = j; break; } } } printf("File order after sorting:"); for (i = 0; i < numFiles; i++) { printf(" %d", file_order[i] + 1); } printf("\n"); /* open files */ outFilePtr = fopen(outFileName, "wb"); if (outFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", outFileName); printf("\n"); exit(-1); } /* begin loop over files */ firstTimeEqualsZero = 0; for (ii = 0; ii < numFiles; ii++) { FrameID = ii; if (firstTimeEqualsZero == 0) { oldFrameID = ii; } /* open image file */ sscanf(argv[file_order[ii] + 2], "%s", imFileName); printf("\nInput file: %d\n", file_order[ii] + 1); imFilePtr = fopen(imFileName, "rb"); if (imFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", imFileName); printf("\n"); exit(-1); } /* read image MPH */ printf("Reading MPH...\n"); mphPtr = (char *)malloc(sizeof(char) * mphSize); if (mphPtr == NULL) { printf("ERROR - mph allocation memory\n"); exit(-1); } if ((fread(mphPtr, sizeof(char), mphSize, imFilePtr)) != mphSize) { printf("ERROR - mph read error\n\n"); exit(-1); } mph = readMph(mphPtr, printImMphIfZero); /* extract information from MPH */ /* read image SPH */ printf("Reading SPH...\n"); sphPtr = (char *)malloc(sizeof(char) * mph.sphSize); if (sphPtr == NULL) { printf("ERROR - sph allocation memory\n"); exit(-1); } if ((fread(sphPtr, sizeof(char), mph.sphSize, imFilePtr)) != mph.sphSize) { printf("ERROR - sph read error\n\n"); exit(-1); } sph = readSph(sphPtr, printImSphIfZero, mph); /* extract information from SPH */ /* writing dummy mph and sph for first file */ if (ii == 0) { /* Write MPH of output frame file */ mphPtr2 = (char *)malloc(sizeof(char) * mphSize); if (mphPtr2 == NULL) { printf("ERROR - mph allocation memory\n"); exit(-1); } memcpy(mphPtr2, mphPtr, mphSize); printf("\nInitializing MPH of output file...\n"); if ((fwrite(mphPtr2, sizeof(char), mphSize, outFilePtr)) != mphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } /* Write SPH of output frame file */ sphPtr2 = (char *)malloc(sizeof(char) * mph.sphSize); if (sphPtr2 == NULL) { printf("ERROR - sph allocation memory\n"); exit(-1); } memcpy(sphPtr2, sphPtr, mph.sphSize); printf("Initializing SPH of output file...\n\n"); if ((fwrite(sphPtr2, sizeof(char), mph.sphSize, outFilePtr)) != mph.sphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } } /* end of if(ii==0) */ if (ii == 0) { sscanf(mph.sensingStart, "%2d-%3c-%4d %2d:%2d:%lf", &stday, stmonthstr, &styear, &sthour, &stmin, &stseconds); if (strcmp(stmonthstr, "JAN") == 0) { stmonth = 1; } if (strcmp(stmonthstr, "FEB") == 0) { stmonth = 2; } if (strcmp(stmonthstr, "MAR") == 0) { stmonth = 3; } if (strcmp(stmonthstr, "APR") == 0) { stmonth = 4; } if (strcmp(stmonthstr, "MAY") == 0) { stmonth = 5; } if (strcmp(stmonthstr, "JUN") == 0) { stmonth = 6; } if (strcmp(stmonthstr, "JUL") == 0) { stmonth = 7; } if (strcmp(stmonthstr, "AUG") == 0) { stmonth = 8; } if (strcmp(stmonthstr, "SEP") == 0) { stmonth = 9; } if (strcmp(stmonthstr, "OCT") == 0) { stmonth = 10; } if (strcmp(stmonthstr, "NOV") == 0) { stmonth = 11; } if (strcmp(stmonthstr, "DEC") == 0) { stmonth = 12; } mjd_start = date2MJD(styear, stmonth, stday, sthour, stmin, stseconds); } /* read image MDSR from file */ printf("Reading and Writing MDSR...\n"); printf("Number of lines in frame %d: %d\n", ii + 1, sph.dsd[0].numDsr); for (i = 0; i < sph.dsd[0].numDsr; i++) { if ((i) % 2000 == 0) printf("Line %6d of input file %d. Output Line: %8d\n", i + 1, ii + 1, outLines + 1); /* sensing time added by Level 0 processor, as converted from Satellite * Binary Time (SBT) counter embedded in each ISP */ /** * Represents a binary time value field in ENVISAT records. * *

Refer to ENVISAT documentation for the exact definition of * this data type. */ /* long days; ulong seconds; ulong microseconds; */ bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeDays, 4, 1, imFilePtr); bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeSeconds, 4, 1, imFilePtr); bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeMicroseconds, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_long, &mdsrDsrTimeDays, 1); swap_endian_order(e_tid_ulong, &mdsrDsrTimeSeconds, 1); swap_endian_order(e_tid_ulong, &mdsrDsrTimeMicroseconds, 1); } newmdsrDsrTimeDays = mdsrDsrTimeDays; newmdsrDsrTimeSeconds = mdsrDsrTimeSeconds; newmdsrDsrTimeMicroseconds = mdsrDsrTimeMicroseconds; if (is_littlendian) { swap_endian_order(e_tid_long, &mdsrDsrTimeDays, 1); swap_endian_order(e_tid_ulong, &mdsrDsrTimeSeconds, 1); swap_endian_order(e_tid_ulong, &mdsrDsrTimeMicroseconds, 1); } bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeDays, 4, 1, imFilePtr); bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeSeconds, 4, 1, imFilePtr); bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeMicroseconds, 4, 1, imFilePtr); bytesRead = bytesRead + 2 * fread(&mdsrIspLength, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrIspLength, 1); } mdsrILen = mdsrIspLength; if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrIspLength, 1); } bytesRead = bytesRead + 2 * fread(&mdsrCrcErrs, 2, 1, imFilePtr); bytesRead = bytesRead + 2 * fread(&mdsrRsErrs, 2, 1, imFilePtr); bytesRead = bytesRead + 2 * fread(&mdsrSpare1, 2, 1, imFilePtr); /* 6-byte ISP Packet Header */ bytesRead = bytesRead + 2 * fread(&mdsrPacketIdentification, 2, 1, imFilePtr); bytesRead = bytesRead + 2 * fread(&mdsrPacketSequenceControl, 2, 1, imFilePtr); bytesRead = bytesRead + 2 * fread(&mdsrPacketLength, 2, 1, imFilePtr); /* 30-byte Data Field Header in Packet Data Field */ bytesRead = bytesRead + 30 * fread(&mdsrPacketDataHeader, 30, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketDataHeader, 15); } modePacketCount = mdsrPacketDataHeader[5] * 256 + ((mdsrPacketDataHeader[6] >> 8) & 255); for (jjj = 0; jjj < 15; jjj++) { tempmdsrPacketDataHeader[jjj] = mdsrPacketDataHeader[jjj]; } if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketDataHeader, 15); } if (((i) == 24890) || ((i) == 24891)) printf("Line %6d of input file %d. Output Line: %8d " "modePacketCount: %d\n", i + 1, ii + 1, outLines + 1, modePacketCount); if ((modePacketCount == modePacketCountOld + 1) || (firstTimeEqualsZero == 0)) { firstTimeEqualsZero = 1; modePacketCountOld = modePacketCount; outLines = outLines + 1; bytesRead = bytesRead + (mdsrILen + 1 - 30) * fread(&mdsrLineChar, (mdsrILen + 1 - 30), 1, imFilePtr); if ((fwrite(&mdsrDsrTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrIspLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrCrcErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrRsErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrSpare1, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketIdentification, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketSequenceControl, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketDataHeader, 30, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrLineChar, (mdsrILen + 1 - 30), 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } bytesToBeWritten = bytesToBeWritten + 68 + (mdsrILen + 1 - 30); } else if ((modePacketCount > modePacketCountOld + 1) && (oldFrameID == FrameID)) { modePacketCountOld = modePacketCount; outLines = outLines + 1; bytesRead = bytesRead + (mdsrILen + 1 - 30) * fread(&mdsrLineChar, (mdsrILen + 1 - 30), 1, imFilePtr); if ((fwrite(&mdsrDsrTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrIspLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrCrcErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrRsErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrSpare1, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketIdentification, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketSequenceControl, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketDataHeader, 30, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrLineChar, (mdsrILen + 1 - 30), 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } bytesToBeWritten = bytesToBeWritten + 68 + (mdsrILen + 1 - 30); } else if (modePacketCount < modePacketCountOld + 1) { // printf( "Line %5d : duplicate line\n", outLines +1 ); duplicateLines = duplicateLines + 1; fseek(imFilePtr, mdsrILen + 1 - 30, SEEK_CUR); bytesRead = bytesRead + mdsrILen + 1 - 30; } else if ((modePacketCount > modePacketCountOld + 1) && (oldFrameID != FrameID) && (catAbortFlag == 1)) { printf("\nWARNING: No overlap between frames %d and %d. Continuing " "concatenation with with missing lines.\n", modePacketCount, modePacketCountOld + 1); printf("At output Line %5d : Mode packet count at successive frame " "edges - %d %d\n\n", outLines + 1, modePacketCountOld, modePacketCount); printf("Number of missing lines: %d \n", modePacketCount - (modePacketCountOld + 1)); nmsl = modePacketCount - (modePacketCountOld + 1); oldFrameID = FrameID; newt = ((double)newmdsrDsrTimeSeconds + newmdsrDsrTimeMicroseconds * 1e-06); oldt = ((double)oldmdsrDsrTimeSeconds + oldmdsrDsrTimeMicroseconds * 1e-06); delta1 = newt - oldt + ((newmdsrDsrTimeDays - oldmdsrDsrTimeDays) * 24. * 3600.); est_pri = delta1 / (double)(nmsl + 1); /* Fill missing lines with LUT indices corresponding to 127 and 128 for * alternate samples */ /* To get a byte value of 127 after decoding, first byte of block= 0, * sample value = 10011001=153, corresponding to LUTi: -0.002563 LUTq: * -0.002611 */ /* To get a byte value of 128 after decoding, first byte of block= 0, * sample value = 10001000=136, corresponding to LUTi: 0.001774 LUTq: * 0.001816 */ tempsamplecount = 0; for (jjj = 0; jjj < floor((mdsrILen + 1 - 30) / 64); jjj++) { tempmdsrLineChar[jjj * 64] = (unsigned char)(0); for (kkk = 1; kkk < 64; kkk++) { if (((tempsamplecount) % 2) == 1) { tempmdsrLineChar[jjj * 64 + kkk] = (unsigned char)(153); } else if (((tempsamplecount) % 2) == 0) { tempmdsrLineChar[jjj * 64 + kkk] = (unsigned char)(136); } tempsamplecount = tempsamplecount + 1; } } jjj = floor((mdsrILen + 1 - 30) / 64); tempmdsrLineChar[jjj * 64] = (unsigned char)(0); for (kkk = 1; kkk <= (((mdsrILen + 1 - 30) % 64) - 1); kkk++) { if (((tempsamplecount) % 2) == 1) { tempmdsrLineChar[jjj * 64 + kkk] = (unsigned char)(102); } else if (((tempsamplecount) % 2) == 0) { tempmdsrLineChar[jjj * 64 + kkk] = (unsigned char)(136); } tempsamplecount = tempsamplecount + 1; } for (msl = 1; msl <= nmsl; msl++) { temptimesec = oldt + (msl * est_pri); tempmdsrDsrTimeDays = oldmdsrDsrTimeDays; if (temptimesec > (24. * 3600.)) { temptimesec = temptimesec - 24. * 3600.; tempmdsrDsrTimeDays = tempmdsrDsrTimeDays + 1; } tempmdsrDsrTimeSeconds = floor(temptimesec); tempmdsrDsrTimeMicroseconds = floor((temptimesec - (double)(tempmdsrDsrTimeSeconds)) * 1e06); tempmdsrGsrtTimeDays = tempmdsrDsrTimeDays; tempmdsrGsrtTimeSeconds = tempmdsrDsrTimeSeconds; tempmdsrGsrtTimeMicroseconds = tempmdsrDsrTimeMicroseconds; tempmdsrIspLength = mdsrILen; tempmdsrILen = mdsrILen; tempmodePacketCount = modePacketCountOld + msl; tempmdsrPacketLength = mdsrILen; tempmdsrPacketDataHeader[5] = (unsigned short)(((tempmodePacketCount >> 8) & 65535)); tempmdsrPacketDataHeader[6] = (unsigned short)(((tempmodePacketCount << 8) & 65280)) + (unsigned short)((tempmdsrPacketDataHeader[6]) & 255); if (is_littlendian) { swap_endian_order(e_tid_long, &tempmdsrDsrTimeDays, 1); swap_endian_order(e_tid_ulong, &tempmdsrDsrTimeSeconds, 1); swap_endian_order(e_tid_ulong, &tempmdsrDsrTimeMicroseconds, 1); swap_endian_order(e_tid_long, &tempmdsrGsrtTimeDays, 1); swap_endian_order(e_tid_ulong, &tempmdsrGsrtTimeSeconds, 1); swap_endian_order(e_tid_ulong, &tempmdsrGsrtTimeMicroseconds, 1); swap_endian_order(e_tid_ushort, &tempmdsrIspLength, 1); swap_endian_order(e_tid_ushort, &tempmdsrPacketLength, 1); swap_endian_order(e_tid_ushort, &tempmdsrPacketDataHeader, 15); } if ((fwrite(&tempmdsrDsrTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrDsrTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrDsrTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrGsrtTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrGsrtTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrGsrtTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrIspLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrCrcErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrRsErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrSpare1, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketIdentification, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketSequenceControl, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrPacketLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrPacketDataHeader, 30, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrLineChar, (tempmdsrILen + 1 - 30), 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if (is_littlendian) { swap_endian_order(e_tid_ushort, &tempmdsrPacketDataHeader, 15); } outLines = outLines + 1; bytesToBeWritten = bytesToBeWritten + 68 + (tempmdsrILen + 1 - 30); } modePacketCountOld = modePacketCount; outLines = outLines + 1; bytesRead = bytesRead + (mdsrILen + 1 - 30) * fread(&mdsrLineChar, (mdsrILen + 1 - 30), 1, imFilePtr); if ((fwrite(&mdsrDsrTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrIspLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrCrcErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrRsErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrSpare1, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketIdentification, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketSequenceControl, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketDataHeader, 30, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrLineChar, (mdsrILen + 1 - 30), 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } bytesToBeWritten = bytesToBeWritten + 68 + (mdsrILen + 1 - 30); } else if ((modePacketCount > modePacketCountOld + 1) && (oldFrameID != FrameID) && (catAbortFlag == 0)) { printf("\nWARNING: No overlap between frames. Aborting further " "concatenation.\n"); printf("At output Line %5d : Mode packet count at successive frame " "edges - %d %d\n\n", outLines + 1, modePacketCountOld, modePacketCount); sscanf(mph.sensingStop, "%2d-%3c-%4d %2d:%2d:%lf", &eday, emonthstr, &eyear, &ehour, &emin, &eseconds); if (strcmp(emonthstr, "JAN") == 0) { emonth = 1; } if (strcmp(emonthstr, "FEB") == 0) { emonth = 2; } if (strcmp(emonthstr, "MAR") == 0) { emonth = 3; } if (strcmp(emonthstr, "APR") == 0) { emonth = 4; } if (strcmp(emonthstr, "MAY") == 0) { emonth = 5; } if (strcmp(emonthstr, "JUN") == 0) { emonth = 6; } if (strcmp(emonthstr, "JUL") == 0) { emonth = 7; } if (strcmp(emonthstr, "AUG") == 0) { emonth = 8; } if (strcmp(emonthstr, "SEP") == 0) { emonth = 9; } if (strcmp(emonthstr, "OCT") == 0) { emonth = 10; } if (strcmp(emonthstr, "NOV") == 0) { emonth = 11; } if (strcmp(emonthstr, "DEC") == 0) { emonth = 12; } mjd_end = date2MJD(eyear, emonth, eday, ehour, emin, eseconds); memcpy(sensingStopTime, mphPtr + 380 + 14, 27); sprintf(ssensingStopTime, "%.27s", sensingStopTime); memcpy(mphPtr2 + 380 + 14, ssensingStopTime, 27); mjd_diffsec = (mjd_end - mjd_start) * 86400.0; imjd_diffsec = floor(mjd_diffsec); duration = imjd_diffsec; sprintf(secduration, "%08d", duration); memcpy(mphPtr2 + 0 + 9 + 30, secduration, 8); totfilesize = bytesToBeWritten + mphSize + mph.sphSize; sprintf(totsize, "%021d", totfilesize); memcpy(strchr(mphPtr2 + 1066 + 0, '=') + 1, totsize, 21); sprintf(ds_size, "%020d", bytesToBeWritten); sprintf(num_dsr, "%010d", outLines); memcpy(strchr(sphPtr2 + 836 + mph.dsdSize * 0 + 162 + 0, '=') + 2, ds_size, 20); memcpy(strchr(sphPtr2 + 836 + mph.dsdSize * 0 + 199 + 0, '=') + 2, num_dsr, 10); /* writing update MPH and SPH in outfile */ fseek(outFilePtr, 0.0, SEEK_SET); /* go back to start of the file */ printf("Writing updated MPH of output file...\n"); if ((fwrite(mphPtr2, sizeof(char), mphSize, outFilePtr)) != mphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } printf("Writing updated SPH of output file...\n"); if ((fwrite(sphPtr2, sizeof(char), mph.sphSize, outFilePtr)) != mph.sphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } free(mphPtr2); free(sphPtr2); fclose(outFilePtr); exit(-1); } oldmdsrDsrTimeDays = newmdsrDsrTimeDays; oldmdsrDsrTimeSeconds = newmdsrDsrTimeSeconds; oldmdsrDsrTimeMicroseconds = newmdsrDsrTimeMicroseconds; } /* end for of each data line,i */ /* updating the MPH and SPH of concatenated data */ if (ii == (numFiles - 1)) { sscanf(mph.sensingStop, "%2d-%3c-%4d %2d:%2d:%lf", &eday, emonthstr, &eyear, &ehour, &emin, &eseconds); if (strcmp(emonthstr, "JAN") == 0) { emonth = 1; } if (strcmp(emonthstr, "FEB") == 0) { emonth = 2; } if (strcmp(emonthstr, "MAR") == 0) { emonth = 3; } if (strcmp(emonthstr, "APR") == 0) { emonth = 4; } if (strcmp(emonthstr, "MAY") == 0) { emonth = 5; } if (strcmp(emonthstr, "JUN") == 0) { emonth = 6; } if (strcmp(emonthstr, "JUL") == 0) { emonth = 7; } if (strcmp(emonthstr, "AUG") == 0) { emonth = 8; } if (strcmp(emonthstr, "SEP") == 0) { emonth = 9; } if (strcmp(emonthstr, "OCT") == 0) { emonth = 10; } if (strcmp(emonthstr, "NOV") == 0) { emonth = 11; } if (strcmp(emonthstr, "DEC") == 0) { emonth = 12; } mjd_end = date2MJD(eyear, emonth, eday, ehour, emin, eseconds); memcpy(sensingStopTime, mphPtr + 380 + 14, 27); sprintf(ssensingStopTime, "%.27s", sensingStopTime); } oldFrameID = FrameID; free(mphPtr); free(sphPtr); fclose(imFilePtr); } /* end of for ii, input files*/ printf("\nNumber of duplicate lines found between overlapping frames: %8d\n", duplicateLines); printf("\nTotal number of lines in output files: %8d\n", outLines); /* updating the sensing stop time in MPH */ memcpy(mphPtr2 + 380 + 14, ssensingStopTime, 27); /* Update duration on product name in MPH */ mjd_diffsec = (mjd_end - mjd_start) * 86400.0; imjd_diffsec = floor(mjd_diffsec); duration = imjd_diffsec; sprintf(secduration, "%08d", duration); memcpy(mphPtr2 + 0 + 9 + 30, secduration, 8); /* Update DSD_SIZE and NUM_DSR in SPH of output frame file pointer */ totfilesize = bytesToBeWritten + mphSize + mph.sphSize; sprintf(totsize, "%021d", totfilesize); memcpy(strchr(mphPtr2 + 1066 + 0, '=') + 1, totsize, 21); sprintf(ds_size, "%020d", bytesToBeWritten); sprintf(num_dsr, "%010d", outLines); memcpy(strchr(sphPtr2 + 836 + mph.dsdSize * 0 + 162 + 0, '=') + 2, ds_size, 20); memcpy(strchr(sphPtr2 + 836 + mph.dsdSize * 0 + 199 + 0, '=') + 2, num_dsr, 10); /* writing update MPH and SPH in outfile */ fseek(outFilePtr, 0.0, SEEK_SET); /* go back to start of the file */ printf("\nWriting updated MPH of output file...\n"); if ((fwrite(mphPtr2, sizeof(char), mphSize, outFilePtr)) != mphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } printf("Writing updated SPH of output file...\n"); if ((fwrite(sphPtr2, sizeof(char), mph.sphSize, outFilePtr)) != mph.sphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } free(mphPtr2); free(sphPtr2); fclose(outFilePtr); printf("\nDone.\n\n"); return 0; } /* end main */ /**********************************************************************************************************************************/ struct mphStruct readMph(const char *mphPtr, const int printMphIfZero) { struct mphStruct mph; if (1 == 0) { printf("check:\n%s\n", mphPtr + 1247); } memcpy(mph.product, mphPtr + 0 + 9, 62); memcpy(mph.procStage, mphPtr + 73 + 11, 1); memcpy(mph.refDoc, mphPtr + 86 + 9, 23); memcpy(mph.spare1, mphPtr + 120 + 0, 40); memcpy(mph.acquisitionStation, mphPtr + 161 + 21, 20); memcpy(mph.procCenter, mphPtr + 204 + 13, 6); memcpy(mph.procTime, mphPtr + 225 + 11, 27); memcpy(mph.softwareVer, mphPtr + 265 + 14, 14); memcpy(mph.spare2, mphPtr + 295 + 0, 40); memcpy(mph.sensingStart, mphPtr + 336 + 15, 27); memcpy(mph.sensingStop, mphPtr + 380 + 14, 27); memcpy(mph.spare3, mphPtr + 423 + 0, 40); memcpy(mph.phase, mphPtr + 464 + 6, 1); mph.cycle = atoi((char *)strchr(mphPtr + 472 + 0, '=') + 1); mph.relOrbit = atoi((char *)strchr(mphPtr + 483 + 0, '=') + 1); mph.absOrbit = atoi((char *)strchr(mphPtr + 500 + 0, '=') + 1); memcpy(mph.stateVectorTime, mphPtr + 517 + 19, 27); mph.deltaUt1 = atof((char *)strchr(mphPtr + 565 + 0, '=') + 1); mph.xPosition = atof((char *)strchr(mphPtr + 587 + 0, '=') + 1); mph.yPosition = atof((char *)strchr(mphPtr + 614 + 0, '=') + 1); mph.zPosition = atof((char *)strchr(mphPtr + 641 + 0, '=') + 1); mph.xVelocity = atof((char *)strchr(mphPtr + 668 + 0, '=') + 1); mph.yVelocity = atof((char *)strchr(mphPtr + 697 + 0, '=') + 1); mph.zVelocity = atof((char *)strchr(mphPtr + 726 + 0, '=') + 1); memcpy(mph.vectorSource, mphPtr + 755 + 15, 2); memcpy(mph.spare4, mphPtr + 774 + 0, 40); memcpy(mph.utcSbtTime, mphPtr + 815 + 14, 27); mph.satBinaryTime = atoi((char *)strchr(mphPtr + 858 + 0, '=') + 1); mph.clockStep = atoi((char *)strchr(mphPtr + 886 + 0, '=') + 1); memcpy(mph.spare5, mphPtr + 913 + 0, 32); memcpy(mph.leapUtc, mphPtr + 946 + 10, 27); mph.leapSign = atoi((char *)strchr(mphPtr + 985 + 0, '=') + 1); mph.leapErr = atoi((char *)strchr(mphPtr + 1000 + 0, '=') + 1); memcpy(mph.spare6, mphPtr + 1011 + 0, 40); mph.productErr = atoi((char *)strchr(mphPtr + 1052 + 0, '=') + 1); mph.totSize = atoi((char *)strchr(mphPtr + 1066 + 0, '=') + 1); mph.sphSize = atoi((char *)strchr(mphPtr + 1104 + 0, '=') + 1); mph.numDsd = atoi((char *)strchr(mphPtr + 1132 + 0, '=') + 1); mph.dsdSize = atoi((char *)strchr(mphPtr + 1152 + 0, '=') + 1); mph.numDataSets = atoi((char *)strchr(mphPtr + 1180 + 0, '=') + 1); memcpy(mph.spare7, mphPtr + 1206 + 0, 40); if (printMphIfZero == 0) { printf("%s%.62s\n", "product: ", mph.product); printf("%s%.1s\n", "procStage: ", mph.procStage); printf("%s%.23s\n", "refDoc: ", mph.refDoc); printf("%s%.40s\n", "spare1: ", mph.spare1); printf("%s%.20s\n", "acquisitionStation: ", mph.acquisitionStation); printf("%s%.6s\n", "procCenter: ", mph.procCenter); printf("%s%.27s\n", "procTime: ", mph.procTime); printf("%s%.14s\n", "softwareVer: ", mph.softwareVer); printf("%s%.40s\n", "spare2: ", mph.spare2); printf("%s%.27s\n", "sensingStart: ", mph.sensingStart); printf("%s%.27s\n", "sensingStop: ", mph.sensingStop); printf("%s%.40s\n", "spare3: ", mph.spare3); printf("%s%.1s\n", "phase: ", mph.phase); printf("%s%d\n", "cycle: ", mph.cycle); printf("%s%d\n", "relOrbit: ", mph.relOrbit); printf("%s%d\n", "absOrbit: ", mph.absOrbit); printf("%s%.27s\n", "stateVectorTime: ", mph.stateVectorTime); printf("%s%f\n", "deltaUt1: ", mph.deltaUt1); printf("%s%f\n", "xPosition: ", mph.xPosition); printf("%s%f\n", "yPosition: ", mph.yPosition); printf("%s%f\n", "zPosition: ", mph.zPosition); printf("%s%f\n", "xVelocity: ", mph.xVelocity); printf("%s%f\n", "yVelocity: ", mph.yVelocity); printf("%s%f\n", "zVelocity: ", mph.zVelocity); printf("%s%.2s\n", "vectorSource: ", mph.vectorSource); printf("%s%.40s\n", "spare4: ", mph.spare4); printf("%s%.27s\n", "utcSbtTime: ", mph.utcSbtTime); printf("%s%u\n", "satBinaryTime: ", mph.satBinaryTime); printf("%s%u\n", "clockStep: ", mph.clockStep); printf("%s%.32s\n", "spare5: ", mph.spare5); printf("%s%.27s\n", "leapUtc: ", mph.leapUtc); printf("%s%d\n", "leapSign: ", mph.leapSign); printf("%s%d\n", "leapErr: ", mph.leapErr); printf("%s%.40s\n", "spare6: ", mph.spare6); printf("%s%d\n", "productErr: ", mph.productErr); printf("%s%d\n", "totSize: ", mph.totSize); printf("%s%d\n", "sphSize: ", mph.sphSize); printf("%s%d\n", "numDsd: ", mph.numDsd); printf("%s%d\n", "dsdSize: ", mph.dsdSize); printf("%s%d\n", "numDataSets: ", mph.numDataSets); printf("%s%.40s\n", "spare7: ", mph.spare7); printf("\n"); } return mph; } /* end readMph */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ struct sphStruct readSph(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph) { struct sphStruct sph; int i; memcpy(sph.sphDescriptor, sphPtr + 0 + 16, 28); sph.startLat = atof((char *)strchr(sphPtr + 46 + 0, '=') + 1) * 1.e-6; sph.startLon = atof((char *)strchr(sphPtr + 78 + 0, '=') + 1) * 1.e-6; sph.stopLat = atof((char *)strchr(sphPtr + 111 + 0, '=') + 1) * 1.e-6; sph.stopLon = atof((char *)strchr(sphPtr + 142 + 0, '=') + 1) * 1.e-6; sph.satTrack = atof((char *)strchr(sphPtr + 174 + 0, '=') + 1); memcpy(sph.spare1, sphPtr + 205 + 0, 50); sph.ispErrorsSignificant = atoi((char *)strchr(sphPtr + 256 + 0, '=') + 1); sph.missingIspsSignificant = atoi((char *)strchr(sphPtr + 281 + 0, '=') + 1); sph.ispDiscardedSignificant = atoi((char *)strchr(sphPtr + 308 + 0, '=') + 1); sph.rsSignificant = atoi((char *)strchr(sphPtr + 336 + 0, '=') + 1); memcpy(sph.spare2, sphPtr + 353 + 0, 50); sph.numErrorIsps = atoi((char *)strchr(sphPtr + 404 + 0, '=') + 1); sph.errorIspsThresh = atof((char *)strchr(sphPtr + 431 + 0, '=') + 1); sph.numMissingIsps = atoi((char *)strchr(sphPtr + 468 + 0, '=') + 1); sph.missingIspsThresh = atof((char *)strchr(sphPtr + 497 + 0, '=') + 1); sph.numDiscardedIsps = atoi((char *)strchr(sphPtr + 536 + 0, '=') + 1); sph.discardedIspsThresh = atof((char *)strchr(sphPtr + 567 + 0, '=') + 1); sph.numRsIsps = atoi((char *)strchr(sphPtr + 608 + 0, '=') + 1); sph.rsThresh = atof((char *)strchr(sphPtr + 632 + 0, '=') + 1); memcpy(sph.spare3, sphPtr + 661 + 0, 100); memcpy(sph.txRxPolar, sphPtr + 762 + 13, 5); memcpy(sph.swath, sphPtr + 782 + 7, 3); memcpy(sph.spare4, sphPtr + 794 + 0, 41); if (1 == 0) { printf("check:\n%s\n", sphPtr + 836 + 0); } if (printSphIfZero == 0) { printf("%s%.28s\n", "sphDescriptor: ", sph.sphDescriptor); printf("%s%f\n", "startLat: ", sph.startLat); printf("%s%f\n", "startLon: ", sph.startLon); printf("%s%f\n", "stopLat: ", sph.stopLat); printf("%s%f\n", "stopLon: ", sph.stopLon); printf("%s%f\n", "satTrack: ", sph.satTrack); printf("%s%.50s\n", "spare1: ", sph.spare1); printf("%s%d\n", "ispErrorsSignificant: ", sph.ispErrorsSignificant); printf("%s%d\n", "missingIspsSignificant: ", sph.missingIspsSignificant); printf("%s%d\n", "ispDiscardedSignificant: ", sph.ispDiscardedSignificant); printf("%s%d\n", "rsSignificant: ", sph.rsSignificant); printf("%s%.50s\n", "spare2: ", sph.spare2); printf("%s%d\n", "numErrorIsps: ", sph.numErrorIsps); printf("%s%f\n", "errorIspsThresh: ", sph.errorIspsThresh); printf("%s%d\n", "numMissingIsps: ", sph.numMissingIsps); printf("%s%f\n", "missingIspsThresh: ", sph.missingIspsThresh); printf("%s%d\n", "numDiscardedIsps: ", sph.numDiscardedIsps); printf("%s%f\n", "discardedIspsThresh: ", sph.discardedIspsThresh); printf("%s%d\n", "numRsIsps: ", sph.numRsIsps); printf("%s%f\n", "rsThresh: ", sph.rsThresh); printf("%s%.100s\n", "spare3: ", sph.spare3); printf("%s%.5s\n", "txRxPolar: ", sph.txRxPolar); printf("%s%.3s\n", "swath: ", sph.swath); printf("%s%.41s\n", "spare4: ", sph.spare4); } for (i = 0; i < mph.numDsd; i++) { /* extract DSDs from SPH */ if (i != 3) { /* fourth is a spare DSD - see pdf page 537 */ if (1 == 0) { printf("check:\n%s\n", sphPtr + 836 + mph.dsdSize * i + 0 + 0); } memcpy(sph.dsd[i].dsName, sphPtr + 836 + mph.dsdSize * i + 0 + 9, 28); memcpy(sph.dsd[i].dsType, sphPtr + 836 + mph.dsdSize * i + 39 + 8, 1); memcpy(sph.dsd[i].filename, sphPtr + 836 + mph.dsdSize * i + 49 + 10, 62); sph.dsd[i].dsOffset = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 123 + 0, '=') + 1); sph.dsd[i].dsSize = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 162 + 0, '=') + 1); sph.dsd[i].numDsr = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 199 + 0, '=') + 1); sph.dsd[i].dsrSize = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 219 + 0, '=') + 1); /* write out a few things */ if (printSphIfZero == 0) { printf("%s%d%s%.28s\n", "dsd[ ", i, " ].dsName: ", sph.dsd[i].dsName); printf("%s%d%s%.1s\n", "dsd[ ", i, " ].dsType: ", sph.dsd[i].dsType); printf("%s%d%s%.62s\n", "dsd[ ", i, " ].filename: ", sph.dsd[i].filename); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsOffset: ", sph.dsd[i].dsOffset); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsSize: ", sph.dsd[i].dsSize); printf("%s%d%s%d\n", "dsd[ ", i, " ].numDsr: ", sph.dsd[i].numDsr); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsrSize: ", sph.dsd[i].dsrSize); } } } if (printSphIfZero == 0) { printf("\n"); } return sph; } /* end readSph */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ struct sphAuxStruct readSphAux(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph) { struct sphAuxStruct sph; int i; memcpy(sph.sphDescriptor, sphPtr + 0 + 16, 28); memcpy(sph.spare1, sphPtr + 46 + 0, 51); if (printSphIfZero == 0) { printf("%s%.28s\n", "sphDescriptor: ", sph.sphDescriptor); printf("%s%.51s\n", "spare1: ", sph.spare1); } for (i = 0; i < mph.numDsd; i++) { /* extract DSDs from SPH */ memcpy(sph.dsd[i].dsName, sphPtr + 98 + mph.dsdSize * i + 0 + 9, 28); memcpy(sph.dsd[i].dsType, sphPtr + 98 + mph.dsdSize * i + 39 + 8, 1); memcpy(sph.dsd[i].filename, sphPtr + 98 + mph.dsdSize * i + 49 + 10, 62); sph.dsd[i].dsOffset = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 123 + 0, '=') + 1); sph.dsd[i].dsSize = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 162 + 0, '=') + 1); sph.dsd[i].numDsr = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 199 + 0, '=') + 1); sph.dsd[i].dsrSize = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 219 + 0, '=') + 1); /* write out a few things */ if (printSphIfZero == 0) { printf("%s%d%s%.28s\n", "dsd[ ", i, " ].dsName: ", sph.dsd[i].dsName); printf("%s%d%s%.1s\n", "dsd[ ", i, " ].dsType: ", sph.dsd[i].dsType); printf("%s%d%s%.62s\n", "dsd[ ", i, " ].filename: ", sph.dsd[i].filename); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsOffset: ", sph.dsd[i].dsOffset); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsSize: ", sph.dsd[i].dsSize); printf("%s%d%s%d\n", "dsd[ ", i, " ].numDsr: ", sph.dsd[i].numDsr); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsrSize: ", sph.dsd[i].dsrSize); } } if (printSphIfZero == 0) { printf("\n"); } return sph; } /* end readSphAux */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ /********************************************************** ** Function: is_bigendian ** ** Purpose: Test whether it is a bigendian machine ** ** Return values: true: 1, false: 0 ** ** Comment: ** ** Author: Eric J Fielding at JPL ** ** Created: ** ** Modified: ** ;**********************************************************/ int is_bigendian() { int bigendian, littleendian, test; unsigned char t[4]; littleendian = 256; bigendian = 256 * 256; t[0] = 0; t[1] = 1; t[2] = 0; t[3] = 0; memcpy(&test, &t[0], 4); /* printf("test: %i\n",test); */ if (test == bigendian) return (1); if (test == littleendian) return (0); printf("Error in endian test, test= %i ********\n", test); return (-1); } /* * Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_short(short *buffer, uint number_of_swaps) { short *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = (short)(((*temp & 0x00ff) << 8) | ((*temp & 0xff00) >> 8)); } } /* Function: byte_swap_long.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_long(long *buffer, uint number_of_swaps) { long *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* ADDED THESE LINES TO TEST THE 4-BYTE INT TYPE ON 64 BIT */ /* Function: byte_swap_int.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_int(int *buffer, uint number_of_swaps) { int *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* Function: byte_swap_uint.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_uint(uint *buffer, uint number_of_swaps) { uint *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* ADDDED NEW LINES ABOVE */ /* ************************************************************************** */ /* Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_ushort(ushort *buffer, uint number_of_swaps) { byte_swap_short((short *)buffer, number_of_swaps); } /* * Function: byte_swap_ulong.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_ulong(ulong *buffer, uint number_of_swaps) { byte_swap_long((long *)buffer, number_of_swaps); } /* * Function: byte_swap_long.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_float(float *buffer, uint number_of_swaps) { byte_swap_int((int *)buffer, number_of_swaps); } /* Function: epr_swap_endian_order Access: public API Changelog: 2002/02/04 mp nitial version */ /** * Converts bytes for a little endian order machine * * @param field the pointer at data reading in * */ void swap_endian_order(EPR_EDataTypeId data_type_id, void *elems, uint num_elems) { switch (data_type_id) { case e_tid_uchar: case e_tid_char: case e_tid_string: /* no conversion required */ break; case e_tid_time: byte_swap_uint((uint *)elems, 3); break; case e_tid_spare: /* no conversion required */ break; case e_tid_ushort: byte_swap_ushort((ushort *)elems, num_elems); break; case e_tid_short: byte_swap_short((short *)elems, num_elems); break; case e_tid_ulong: byte_swap_uint((uint *)elems, num_elems); break; case e_tid_long: byte_swap_int((int *)elems, num_elems); break; case e_tid_float: byte_swap_float((float *)elems, num_elems); break; case e_tid_double: printf("swap_endian_order: DOUBLE type was not yet processed\n"); break; default: printf("swap_endian_order: unknown data type\n"); } } double date2MJD(int yr, int mo, int day, int hr, int min, double sec) { /* convert to date to MJD */ double part1, part2; double JD, MJD; part1 = 367 * ((double)yr) - floor(7 * ((double)yr + floor(((double)mo + 9) / 12.0)) / 4.0) + floor(275 * (double)mo / 9.0) + (double)day; part2 = 1721013.5 + ((sec / 60.0 + (double)min) / 60.0 + (double)hr) / 24.0; JD = part1 + part2; MJD = JD - 2400000.5; return MJD; } void bubbleSort(double array[], int len) { double tmp; int pass; int j; for (pass = 0; pass < len - 1; pass++) { for (j = 0; j < len - 1 - pass; j++) { if (array[j + 1] < array[j]) { tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; } } } } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_decode/Makefile000644 015705 000000 00000000435 13505462014 023214 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = asa_im_decode CSRCS = asa_im_decode.c OBJS = $(CSRCS:.c=.o) CLIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_decode/asa_im_decode.c000644 015705 000000 00000207603 13505462014 024462 0ustar00sandwellwheel000000 000000 /*********************************************************************************************************************************** asa_im_decode.c Decodes Envisat ASAR Image Mode Level 0 data compiled on a Sun and SGI with command gcc -O2 asa_im_decode.c -o asa_im_decode v1.0, Feb/Mar 2004, Sean M. Buckley v1.05, Mar 25, 2004, Sean M. Buckley, now fills missing lines with zeroes in float mode and 0.*127.5+127.5 + .5 = 128 for byte mode v1.1, 17 Feb 2005, Zhenhong Li: 1. This program can run on a little endian machine as well as a big endian machine! 2. On Linux, compiled with command gcc -O2 asa_im_decode.c -o asa_im_decode 3. On Unix, compiled with command gcc -O2 asa_im_decode.c -o asa_im_decode v1.1.1, 8 Nov 2005, Vikas Gudipati, now runs correctly on 64-bit compilers. ***********************************************************************************************************************************/ #include #include #include #include /** * The EPR_DataTypeId enumeration lists all possible data * types for field elements in ENVISAT dataset records. */ // added by Z. Li on 16/02/2005 // extracted from ESA BEAM epr_api package enum EPR_DataTypeId { /** The ID for unknown types. */ e_tid_unknown = 0, /** An array of unsigned 8-bit integers, C type is uchar* */ e_tid_uchar = 1, /** An array of signed 8-bit integers, C type is char* */ e_tid_char = 2, /** An array of unsigned 16-bit integers, C type is ushort* */ e_tid_ushort = 3, /** An array of signed 16-bit integers, C type is short* */ e_tid_short = 4, /** An array of unsigned 32-bit integers, C type is ulong* */ e_tid_ulong = 5, /** An array of signed 32-bit integers, C type is long* */ e_tid_long = 6, /** An array of 32-bit floating point numbers, C type is float* */ e_tid_float = 7, /** An array of 64-bit floating point numbers, C type is double* */ e_tid_double = 8, /** A zero-terminated ASCII string, C type is char* */ e_tid_string = 11, /** An array of unsigned character, C type is uchar* */ e_tid_spare = 13, /** A time (MJD) structure, C type is EPR_Time */ e_tid_time = 21 }; /* structures */ struct mphStruct { char product[62]; char procStage[1]; char refDoc[23]; char spare1[40]; char acquisitionStation[20]; char procCenter[6]; char procTime[27]; char softwareVer[14]; char spare2[40]; char sensingStart[27]; char sensingStop[27]; char spare3[40]; char phase[1]; int cycle; int relOrbit; int absOrbit; char stateVectorTime[27]; double deltaUt1; double xPosition; double yPosition; double zPosition; double xVelocity; double yVelocity; double zVelocity; char vectorSource[2]; char spare4[40]; char utcSbtTime[27]; unsigned int satBinaryTime; unsigned int clockStep; char spare5[32]; char leapUtc[27]; int leapSign; int leapErr; char spare6[40]; int productErr; int totSize; int sphSize; int numDsd; int dsdSize; int numDataSets; char spare7[40]; }; struct dsdStruct { char dsName[28]; char dsType[1]; char filename[62]; int dsOffset; int dsSize; int numDsr; int dsrSize; }; struct sphStruct { char sphDescriptor[28]; double startLat; double startLon; double stopLat; double stopLon; double satTrack; char spare1[50]; int ispErrorsSignificant; int missingIspsSignificant; int ispDiscardedSignificant; int rsSignificant; char spare2[50]; int numErrorIsps; double errorIspsThresh; int numMissingIsps; double missingIspsThresh; int numDiscardedIsps; double discardedIspsThresh; int numRsIsps; double rsThresh; char spare3[100]; char txRxPolar[5]; char swath[3]; char spare4[41]; struct dsdStruct dsd[4]; }; struct sphAuxStruct { char sphDescriptor[28]; char spare1[51]; struct dsdStruct dsd[1]; }; struct dsrTimeStruct { int days; int seconds; int microseconds; }; struct calPulseStruct { float nomAmplitude[32]; float nomPhase[32]; }; struct nomPulseStruct { float pulseAmpCoeff[4]; float pulsePhsCoeff[4]; float pulseDuration; }; struct dataConfigStruct { char echoCompMethod[4]; char echoCompRatio[3]; char echoResampFlag[1]; char initCalCompMethod[4]; char initCalCompRatio[3]; char initCalResampFlag[1]; char perCalCompMethod[4]; char perCalCompRatio[3]; char perCalResampFlag[1]; char noiseCompMethod[4]; char noiseCompRatio[3]; char noiseResampFlag[1]; }; struct swathConfigStruct { unsigned short numSampWindowsEcho[7]; unsigned short numSampWindowsInitCal[7]; unsigned short numSampWindowsPerCal[7]; unsigned short numSampWindowsNoise[7]; float resampleFactor[7]; }; struct swathIdStruct { unsigned short swathNum[7]; unsigned short beamSetNum[7]; }; struct timelineStruct { unsigned short swathNums[7]; unsigned short mValues[7]; unsigned short rValues[7]; unsigned short gValues[7]; }; /* problems begin with field 132 - check the double statement */ struct testStruct { float operatingTemp; float rxGainDroopCoeffSmb[16]; /* this needs to be converted to a double array of eight elements */ // double rxGainDroopCoeffSmb[ 8 ]; /* Something wrong here, why?*/ }; struct insGadsStruct { /* see pages 455-477 for the 142 fields associated with this gads - got length of 121712 bytes */ struct dsrTimeStruct dsrTime; unsigned int dsrLength; float radarFrequency; float sampRate; float offsetFreq; struct calPulseStruct calPulseIm0TxH1; struct calPulseStruct calPulseIm0TxV1; struct calPulseStruct calPulseIm0TxH1a; struct calPulseStruct calPulseIm0TxV1a; struct calPulseStruct calPulseIm0RxH2; struct calPulseStruct calPulseIm0RxV2; struct calPulseStruct calPulseIm0H3; struct calPulseStruct calPulseIm0V3; struct calPulseStruct calPulseImTxH1[7]; struct calPulseStruct calPulseImTxV1[7]; struct calPulseStruct calPulseImTxH1a[7]; struct calPulseStruct calPulseImTxV1a[7]; struct calPulseStruct calPulseImRxH2[7]; struct calPulseStruct calPulseImRxV2[7]; struct calPulseStruct calPulseImH3[7]; struct calPulseStruct calPulseImV3[7]; struct calPulseStruct calPulseApTxH1[7]; struct calPulseStruct calPulseApTxV1[7]; struct calPulseStruct calPulseApTxH1a[7]; struct calPulseStruct calPulseApTxV1a[7]; struct calPulseStruct calPulseApRxH2[7]; struct calPulseStruct calPulseApRxV2[7]; struct calPulseStruct calPulseApH3[7]; struct calPulseStruct calPulseApV3[7]; struct calPulseStruct calPulseWvTxH1[7]; struct calPulseStruct calPulseWvTxV1[7]; struct calPulseStruct calPulseWvTxH1a[7]; struct calPulseStruct calPulseWvTxV1a[7]; struct calPulseStruct calPulseWvRxH2[7]; struct calPulseStruct calPulseWvRxV2[7]; struct calPulseStruct calPulseWvH3[7]; struct calPulseStruct calPulseWvV3[7]; struct calPulseStruct calPulseWsTxH1[5]; struct calPulseStruct calPulseWsTxV1[5]; struct calPulseStruct calPulseWsTxH1a[5]; struct calPulseStruct calPulseWsTxV1a[5]; struct calPulseStruct calPulseWsRxH2[5]; struct calPulseStruct calPulseWsRxV2[5]; struct calPulseStruct calPulseWsH3[5]; struct calPulseStruct calPulseWsV3[5]; struct calPulseStruct calPulseGmTxH1[5]; struct calPulseStruct calPulseGmTxV1[5]; struct calPulseStruct calPulseGmTxH1a[5]; struct calPulseStruct calPulseGmTxV1a[5]; struct calPulseStruct calPulseGmRxH2[5]; struct calPulseStruct calPulseGmRxV2[5]; struct calPulseStruct calPulseGmH3[5]; struct calPulseStruct calPulseGmV3[5]; struct nomPulseStruct nomPulseIm[7]; struct nomPulseStruct nomPulseAp[7]; struct nomPulseStruct nomPulseWv[7]; struct nomPulseStruct nomPulseWs[5]; struct nomPulseStruct nomPulseGm[5]; float azPatternIs1[101]; float azPatternIs2[101]; float azPatternIs3Ss2[101]; float azPatternIs4Ss3[101]; float azPatternIs5Ss4[101]; float azPatternIs6Ss5[101]; float azPatternIs7[101]; float azPatternSs1[101]; float rangeGateBias; float rangeGateBiasGm; float adcLutI[255]; float adcLutQ[255]; char spare1[648]; float full8LutI[256]; float full8LutQ[256]; float fbaq4LutI[4096]; float fbaq3LutI[2048]; float fbaq2LutI[1024]; float fbaq4LutQ[4096]; float fbaq3LutQ[2048]; float fbaq2LutQ[1024]; float fbaq4NoAdc[4096]; float fbaq3NoAdc[2048]; float fbaq2NoAdc[1024]; float smLutI[16]; float smLutQ[16]; struct dataConfigStruct dataConfigIm; struct dataConfigStruct dataConfigAp; struct dataConfigStruct dataConfigWs; struct dataConfigStruct dataConfigGm; struct dataConfigStruct dataConfigWv; struct swathConfigStruct swathConfigIm; struct swathConfigStruct swathConfigAp; struct swathConfigStruct swathConfigWs; struct swathConfigStruct swathConfigGm; struct swathConfigStruct swathConfigWv; unsigned short perCalWindowsEc; unsigned short perCalWindowsMs; struct swathIdStruct swathIdIm; struct swathIdStruct swathIdAp; struct swathIdStruct swathIdWs; struct swathIdStruct swathIdGm; struct swathIdStruct swathIdWv; unsigned short initCalBeamSetWv; unsigned short beamSetEc; unsigned short beamSetMs; unsigned short calSeq[32]; struct timelineStruct timelineIm; struct timelineStruct timelineAp; struct timelineStruct timelineWs; struct timelineStruct timelineGm; struct timelineStruct timelineWv; unsigned short mEc; char spare2[44]; float refElevAngleIs1; float refElevAngleIs2; float refElevAngleIs3Ss2; float refElevAngleIs4Ss3; float refElevAngleIs5Ss4; float refElevAngleIs6Ss5; float refElevAngleIs7; float refElevAngleSs1; char spare3[64]; float calLoopRefIs1[128]; float calLoopRefIs2[128]; float calLoopRefIs3Ss2[128]; float calLoopRefIs4Ss3[128]; float calLoopRefIs5Ss4[128]; float calLoopRefIs6Ss5[128]; float calLoopRefIs7[128]; float calLoopRefSs1[128]; char spare4[5120]; struct testStruct im; struct testStruct ap; struct testStruct ws; struct testStruct gm; struct testStruct wv; float swstCalP2; char spare5[72]; }; // added by Z. Li on 16/02/2005 typedef enum EPR_DataTypeId EPR_EDataTypeId; typedef int boolean; typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint; typedef unsigned long ulong; /* function prototypes */ struct mphStruct readMph(const char *mphPtr, const int printMphIfZero); struct sphStruct readSph(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph); struct sphAuxStruct readSphAux(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph); struct insGadsStruct readInsGads(const char *gadsPtr, const int printInsGadsIfZero); void printInsGads(const struct insGadsStruct); // added by Z. Li on 16/02/2005 int is_bigendian(); void byte_swap_short(short *buffer, uint number_of_swaps); void byte_swap_ushort(ushort *buffer, uint number_of_swaps); void byte_swap_long(long *buffer, uint number_of_swaps); void byte_swap_ulong(ulong *buffer, uint number_of_swaps); void byte_swap_float(float *buffer, uint number_of_swaps); /* new byte_swap_int type added below*/ void byte_swap_int(int *buffer, uint number_of_swaps); void byte_swap_uint(uint *buffer, uint number_of_swaps); /* new byte_swap_uint type added above*/ void swap_endian_order(EPR_EDataTypeId data_type_id, void *elems, uint num_elems); void byte_swap_InsGads(struct insGadsStruct *InsGads); /**********************************************************************************************************************************/ int main(int argc, char *argv[]) { /* variable definitions */ FILE *imFilePtr; FILE *outFilePtr; FILE *blockIdFilePtr; FILE *insFilePtr; char imFileName[200]; char outFileName[200]; char blockIdFileName[200] = "blockId"; char insFileName[200]; char *mphPtr; char *sphPtr; // char *gadsPtr; unsigned char onBoardTimeLSB; unsigned char auxTxMonitorLevel; unsigned char mdsrBlockId[200]; unsigned char mdsrCheck[63]; unsigned char beamAdjDeltaCodeword; unsigned char compressionRatio; unsigned char echoFlag; unsigned char noiseFlag; unsigned char calFlag; unsigned char calType; // unsigned char spare; unsigned char antennaBeamSetNumber = 0; unsigned char TxPolarization; unsigned char RxPolarization; unsigned char calibrationRowNumber; unsigned char chirpPulseBandwidthCodeword = 0; unsigned char mdsrLineChar[20000]; int printImMphIfZero = 1; int printImSphIfZero = 1; int printImMdsrIfZero = 1; int printInsMphIfZero = 1; int printInsSphIfZero = 1; int printInsGadsIfZero = 1; int printBlockIdIfZero = 1; int noAdcIfZero = 1; int firstTimeEqualsZero = 0; int mphSize = 1247; /* fixed size */ int outSamples = 0; int outLines = 0; int sampleShift = 0; int bytesRead = 0; // int nonOverlappingLineIfZero = 0; int outType = 4; int i; int ii; int j; int k; // int m; // int n; int numFiles; int mdsrDsrTimeDays; int mdsrDsrTimeSeconds; int mdsrDsrTimeMicroseconds; int mdsrGsrtTimeDays; int mdsrGsrtTimeSeconds; int mdsrGsrtTimeMicroseconds; int mdsrLineInt; unsigned int modePacketCount = 0; unsigned int modePacketCountOld = 0; unsigned int onBoardTimeIntegerSeconds = 0; short upConverterLevel; short downConverterLevel; unsigned short resamplingFactor; unsigned short onBoardTimeMSW; unsigned short onBoardTimeLSW; unsigned short mdsrIspLength; unsigned short mdsrCrcErrs; unsigned short mdsrRsErrs; unsigned short mdsrSpare1; unsigned short mdsrPacketIdentification; unsigned short mdsrPacketSequenceControl; unsigned short mdsrPacketLength; unsigned short mdsrPacketDataHeader[15]; unsigned short onBoardTimeFractionalSecondsInt = 0; unsigned short TxPulseLengthCodeword = 0; unsigned short priCodeword = 0; unsigned short priCodewordOld = 0; unsigned short priCodewordOldOld = 0; unsigned short windowStartTimeCodeword = 0; unsigned short windowStartTimeCodeword0 = 0; unsigned short windowStartTimeCodewordOld = 0; unsigned short windowStartTimeCodewordOldOld = 0; unsigned short windowLengthCodeword; unsigned short dataFieldHeaderLength; unsigned short modeID; unsigned short cyclePacketCount; float LUTi[4096]; float LUTq[4096]; float mdsrLine[20000]; // double onBoardTimeFractionalSeconds; double TxPulseLength; // double beamAdjDelta; double chirpPulseBandwidth; double c = 299792458.; // double timeCode; double pri; double windowStartTime; // double windowLength; double near_range; double swst0; struct mphStruct mph; struct mphStruct mphIns; struct sphStruct sph; // struct sphAuxStruct sphIns; struct insGadsStruct insGads; int is_littlendian; /* usage note */ // printf( "\n*** asa_im_decode v1.0 by smb ***\n\n" ); printf("\n*** asa_im_decode v1.1 by smb ***\n\n"); if ((argc - 1) < 5) { printf("Decodes Envisat ASAR Image Mode Level 0 data.\n\n"); printf("Usage: asa_im_decode " "\n\n"); printf(" asa_im input image file(s) (multiple files if merging " "along-track)\n"); printf(" asa_ins input auxilary instrument characterization data " "file\n"); printf(" out output raw data file\n"); printf(" outType output file type (1=byte,4=float)\n"); printf(" near_range near range to which to align all lines (0=use " "first line near range)\n\n"); printf("Notes:\n\n"); printf("out is a complex file with no headers (byte/float I1, byte/float " "Q1, byte/float I2, byte/float Q2, ...)\n\n"); printf("if outType is byte, then the decoded floats are multiplied by " "127.5, shifted by 127.5, rounded to the nearest integer and " "limited to the range 0-255\n\n"); printf("starting range computed as (rank*pri+windowStartTime)*c/2 where rank " "is the number of pri between transmitted pulse and return echo\n\n"); printf("calibration/noise lines are replaced with previous echo data " "line\n\n"); printf("missing lines within a data set and between adjacent along-track " "data sets are filled with zeroes in float mode and 0.*127.5+127.5 " "+ .5 = 128 for byte mode\n\n"); printf("auxilary data files can be found at " "http://envisat.esa.int/services/auxiliary_data/asar/\n\n"); printf("Envisat ASAR Product Handbook, Issue 1.1, 1 December 2002 can be " "found at " "http://envisat.esa.int/dataproducts/asar/" "CNTR6-3-6.htm#eph.asar.asardf.0pASA_IM__0P\n\n"); return 0; } /* read in command-line arguments */ numFiles = (argc - 1) - 4; sscanf(argv[numFiles + 1], "%s", insFileName); sscanf(argv[numFiles + 2], "%s", outFileName); sscanf(argv[numFiles + 3], "%d", &outType); sscanf(argv[numFiles + 4], "%lf", &near_range); /*//debug numFiles = 1; //sscanf( "D:\\data\\scign\\ASAR_RAW\\09786-2925-20040113\\ASA_IM__0CNPDK20040113_180720_000000152023_00213_09786_1579.N1", "%s", insFileName ); sscanf( "D:\\data\\scign\\ASARAux\\ASA_INS_AXVIEC20031209_113421_20030211_000000_20041231_000000", "%s", insFileName ); sscanf( "D:\\temp\\tmp_IMAGERY.raw", "%s", outFileName ); sscanf( "1", "%d", &outType ); sscanf( "0", "%hd", &windowStartTimeCodeword0 ); printImMphIfZero = 0; printImSphIfZero = 0; printImMdsrIfZero = 1; printInsMphIfZero = 0; printInsSphIfZero = 0; printInsGadsIfZero = 0; printBlockIdIfZero = 0; */ if (is_bigendian()) { printf("It is running under Unix or Mac...\n"); is_littlendian = 0; } else { printf("It is running under Linux or Windows...\n"); is_littlendian = 1; } /* open files */ outFilePtr = fopen(outFileName, "wb"); if (outFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", outFileName); printf("\n"); exit(-1); } if (printBlockIdIfZero == 0) { blockIdFilePtr = fopen(blockIdFileName, "wb"); if (blockIdFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", blockIdFileName); printf("\n"); exit(-1); } } insFilePtr = fopen(insFileName, "rb"); if (insFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", insFileName); printf("\n"); exit(-1); } /* read MPH of ins file */ printf("Reading MPH of ins file...\n\n"); mphPtr = (char *)malloc(sizeof(char) * mphSize); if (mphPtr == NULL) { printf("ERROR - mph allocation memory\n"); exit(-1); } if ((fread(mphPtr, sizeof(char), mphSize, insFilePtr)) != mphSize) { printf("ERROR - mph read error\n\n"); exit(-1); } mphIns = readMph(mphPtr, printInsMphIfZero); /* extract information from MPH */ free(mphPtr); /* read SPH from ins file */ printf("Reading SPH from ins file...\n\n"); sphPtr = (char *)malloc(sizeof(char) * mphIns.sphSize); if (sphPtr == NULL) { printf("ERROR - sph allocation memory\n"); exit(-1); } if ((fread(sphPtr, sizeof(char), mphIns.sphSize, insFilePtr)) != mphIns.sphSize) { printf("ERROR - sph read error\n\n"); exit(-1); } // sphIns = readSphAux( sphPtr, printInsSphIfZero, mphIns ); /* extract // information from SPH */ (void)readSphAux(sphPtr, printInsSphIfZero, mphIns); /* extract information from SPH */ free(sphPtr); /* read GADS from ins file */ printf("Reading GADS from ins file...\n\n"); /*gadsPtr = ( char * ) malloc( sizeof( char ) * sphIns.dsd[ 0 ].dsrSize ); if ( gadsPtr == NULL ){ printf( "ERROR - gads allocation memory\n" ); exit( -1 ); } //edited by Z. Li at UCL on 16/02/2005 if ( (fread( gadsPtr, sizeof( char ), sizeof( insGads ), insFilePtr ) ) != sizeof( insGads ) ){ printf( "sizeof( insGads ): %d\n", sizeof( insGads ) ); printf( "ERROR - gads read error\n\n" ); printf( "%d %d %d\n", 171648, sizeof ( insGads ), 171648-sizeof( insGads ) ); exit( -1 ); } insGads = readInsGads( gadsPtr, printInsGadsIfZero ); free (gadsPtr); */ if ((fread(&insGads, sizeof(insGads), 1, insFilePtr)) != 1) { printf("sizeof( insGads ): %ld\n", sizeof(insGads)); printf("ERROR - gads read error\n\n"); printf("%d %ld %ld\n", 171648, sizeof(insGads), 171648 - sizeof(insGads)); exit(-1); } if (is_littlendian) { byte_swap_InsGads(&insGads); } if (printInsGadsIfZero == 0) printInsGads(insGads); fclose(insFilePtr); /* fill LUTs */ for (i = 0; i < 4096; i++) { if (i < 2048) ii = i; else ii = 256 * (23 - (i / 256)) + (i % 256); if (noAdcIfZero == 0) { LUTi[i] = insGads.fbaq4NoAdc[ii]; LUTq[i] = insGads.fbaq4NoAdc[ii]; } else { LUTi[i] = insGads.fbaq4LutI[ii]; LUTq[i] = insGads.fbaq4LutQ[ii]; } } /* begin loop over files */ for (ii = 0; ii < numFiles; ii++) { /* open image file */ sscanf(argv[ii + 1], "%s", imFileName); // debug // sscanf( // "D:\\data\\scign\\ASAR_RAW\\09786-2925-20040113\\ASA_IM__0CNPDK20040113_180720_000000152023_00213_09786_1579.N1", // "%s", imFileName ); imFilePtr = fopen(imFileName, "rb"); if (imFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", imFileName); printf("\n"); exit(-1); } /* read image MPH */ printf("Reading image MPH...\n\n"); mphPtr = (char *)malloc(sizeof(char) * mphSize); if (mphPtr == NULL) { printf("ERROR - mph allocation memory\n"); exit(-1); } if ((fread(mphPtr, sizeof(char), mphSize, imFilePtr)) != mphSize) { printf("ERROR - mph read error\n\n"); exit(-1); } mph = readMph(mphPtr, printImMphIfZero); /* extract information from MPH */ free(mphPtr); /* read image SPH */ printf("Reading image SPH...\n\n"); sphPtr = (char *)malloc(sizeof(char) * mph.sphSize); if (sphPtr == NULL) { printf("ERROR - sph allocation memory\n"); exit(-1); } if ((fread(sphPtr, sizeof(char), mph.sphSize, imFilePtr)) != mph.sphSize) { printf("ERROR - sph read error\n\n"); exit(-1); } sph = readSph(sphPtr, printImSphIfZero, mph); /* extract information from SPH */ free(sphPtr); /* read image MDSR from file */ printf("Reading and decoding image MDSR...\n\n"); bytesRead = 0; for (i = 0; i < sph.dsd[0].numDsr; i++) { if ((i + 1) % 1000 == 0) printf("Line %5d\n", i + 1); modePacketCountOld = modePacketCount; /* sensing time added by Level 0 processor, as converted from Satellite * Binary Time (SBT) counter embedded in each ISP */ /** * Represents a binary time value field in ENVISAT records. * *

Refer to ENVISAT documentation for the exact definition of * this data type. */ /* long days; ulong seconds; ulong microseconds; */ bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeDays, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_long, &mdsrDsrTimeDays, 1); } /* header added to the ISP by the Front End Processor (FEP) */ bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeSeconds, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ulong, &mdsrDsrTimeSeconds, 1); } bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeMicroseconds, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ulong, &mdsrDsrTimeMicroseconds, 1); } bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeDays, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_long, &mdsrGsrtTimeDays, 1); } bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeSeconds, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ulong, &mdsrGsrtTimeSeconds, 1); } bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeMicroseconds, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ulong, &mdsrGsrtTimeMicroseconds, 1); } bytesRead = bytesRead + 2 * fread(&mdsrIspLength, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrIspLength, 1); } bytesRead = bytesRead + 2 * fread(&mdsrCrcErrs, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrCrcErrs, 1); } bytesRead = bytesRead + 2 * fread(&mdsrRsErrs, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrRsErrs, 1); } bytesRead = bytesRead + 2 * fread(&mdsrSpare1, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrSpare1, 1); } /* 6-byte ISP Packet Header */ bytesRead = bytesRead + 2 * fread(&mdsrPacketIdentification, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketIdentification, 1); } bytesRead = bytesRead + 2 * fread(&mdsrPacketSequenceControl, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketSequenceControl, 1); } bytesRead = bytesRead + 2 * fread(&mdsrPacketLength, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketLength, 1); } /* 30-byte Data Field Header in Packet Data Field */ bytesRead = bytesRead + 30 * fread(&mdsrPacketDataHeader, 30, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketDataHeader, 15); } priCodewordOldOld = priCodewordOld; windowStartTimeCodewordOldOld = windowStartTimeCodewordOld; priCodewordOld = priCodeword; windowStartTimeCodewordOld = windowStartTimeCodeword; dataFieldHeaderLength = mdsrPacketDataHeader[0]; modeID = mdsrPacketDataHeader[1]; onBoardTimeMSW = mdsrPacketDataHeader[2]; onBoardTimeLSW = mdsrPacketDataHeader[3]; onBoardTimeLSB = (unsigned char)((mdsrPacketDataHeader[4] >> 8) & 255); modePacketCount = mdsrPacketDataHeader[5] * 256 + ((mdsrPacketDataHeader[6] >> 8) & 255); antennaBeamSetNumber = (unsigned char)((mdsrPacketDataHeader[6] >> 2) & 63); compressionRatio = (unsigned char)((mdsrPacketDataHeader[6]) & 3); /* 1 is 8/4 compression */ echoFlag = (unsigned char)((mdsrPacketDataHeader[7] >> 15) & 1); noiseFlag = (unsigned char)((mdsrPacketDataHeader[7] >> 14) & 1); calFlag = (unsigned char)((mdsrPacketDataHeader[7] >> 13) & 1); calType = (unsigned char)((mdsrPacketDataHeader[7] >> 12) & 1); cyclePacketCount = (mdsrPacketDataHeader[7] & 4095); priCodeword = mdsrPacketDataHeader[8]; windowStartTimeCodeword = mdsrPacketDataHeader[9]; windowLengthCodeword = mdsrPacketDataHeader[10]; upConverterLevel = (short)((mdsrPacketDataHeader[11] >> 12) & 15); downConverterLevel = (short)((mdsrPacketDataHeader[11] >> 7) & 31); TxPolarization = (unsigned char)((mdsrPacketDataHeader[11] >> 6) & 1); RxPolarization = (unsigned char)((mdsrPacketDataHeader[11] >> 5) & 1); calibrationRowNumber = (unsigned char)((mdsrPacketDataHeader[11]) & 31); TxPulseLengthCodeword = (unsigned short)((mdsrPacketDataHeader[12] >> 6) & 1023); beamAdjDeltaCodeword = (unsigned char)((mdsrPacketDataHeader[12]) & 63); chirpPulseBandwidthCodeword = (unsigned char)((mdsrPacketDataHeader[13] >> 8) & 255); auxTxMonitorLevel = (unsigned char)((mdsrPacketDataHeader[13]) & 255); resamplingFactor = mdsrPacketDataHeader[14]; if (printImMdsrIfZero == 0) { onBoardTimeIntegerSeconds = (unsigned int)(onBoardTimeMSW * 256 + ((onBoardTimeLSW >> 8) & 255)); onBoardTimeFractionalSecondsInt = (unsigned short)((onBoardTimeLSW & 255) * 256 + onBoardTimeLSB); /* onBoardTimeFractionalSeconds = (double) * ((double)onBoardTimeFractionalSecondsInt/65536.); */ printf("%6d %2u %2x %8d %5d %d %d %d %d %d %d %d %4d %5d %5d %5d %2d " "%2d %1d %1d %2u %4d %2d %3d %3d %5d\n", i + 1, dataFieldHeaderLength, modeID, onBoardTimeIntegerSeconds, onBoardTimeFractionalSecondsInt, modePacketCount, antennaBeamSetNumber, compressionRatio, echoFlag, noiseFlag, calFlag, calType, cyclePacketCount, priCodeword, windowStartTimeCodeword, windowLengthCodeword, upConverterLevel, downConverterLevel, TxPolarization, RxPolarization, calibrationRowNumber, TxPulseLengthCodeword, beamAdjDeltaCodeword, chirpPulseBandwidthCodeword, auxTxMonitorLevel, resamplingFactor); } if ((modePacketCount == modePacketCountOld + 1) || (firstTimeEqualsZero == 0)) { /* write out data */ if ((echoFlag == 1) && (noiseFlag == 0) && (calFlag == 0)) { if (firstTimeEqualsZero == 0) { outSamples = ((mdsrIspLength + 1 - 30) / 64) * 63 + ((mdsrIspLength + 1 - 30) % 64) - 1; /* compute windowStartTimeCodeword0 from the near_range Jan 21 2011 * by Xiaopeng */ if (fabs(near_range) < 1e-9) windowStartTimeCodeword0 = windowStartTimeCodeword; else { pri = priCodeword / insGads.sampRate; swst0 = near_range * 2 / c - pri * insGads.timelineIm.rValues[antennaBeamSetNumber - 1]; windowStartTimeCodeword0 = (int)floor(swst0 * insGads.sampRate + 0.5); } /* end of modification: compute windowStartTimeCodeword0 from the * near_range */ if (windowStartTimeCodeword0 == 0) windowStartTimeCodeword0 = windowStartTimeCodeword; else if (windowStartTimeCodeword0 != windowStartTimeCodeword) printf("Line %5d : windowStartTimeCodeword %5d : shifting this " "and subsequent data to %5d\n", i + 1, windowStartTimeCodeword, windowStartTimeCodeword0); windowStartTimeCodewordOld = windowStartTimeCodeword; firstTimeEqualsZero = 1; } /* check a few things - still need to check TxPulseLength, * chirpPulseBandwidthCodeword, beamAdjDeltaCodeword */ if ((i != 0) && (priCodeword != priCodewordOld)) { printf("Line %5d : priCodeword changes from %5d to %5d : no action " "taken\n", i + 1, priCodewordOld, priCodeword); } if (windowStartTimeCodeword != windowStartTimeCodewordOld) { printf("Line %5d : windowStartTimeCodeword changes from %5d to %5d " ": shifting this and subsequent data to %5d\n", i + 1, windowStartTimeCodewordOld, windowStartTimeCodeword, windowStartTimeCodeword0); } /* read 64-byte blocks */ for (j = 0; j < (mdsrIspLength + 1 - 30) / 64; j++) { fread(&mdsrBlockId[j], sizeof(char), 1, imFilePtr); fread(&mdsrCheck, sizeof(char), 63, imFilePtr); bytesRead = bytesRead + 64; for (k = 0; k < 63; k++) { mdsrLine[2 * 63 * j + 2 * k] = LUTi[256 * (15 - ((mdsrCheck[k] >> 4) & 15)) + mdsrBlockId[j]]; mdsrLine[2 * 63 * j + 2 * k + 1] = LUTq[256 * (15 - (mdsrCheck[k] & 15)) + mdsrBlockId[j]]; /* if ( i == 0 ) { printf( "k,sample,blockId,i_in,q_in,i_out,q_out: %2d %4d %3d %2d %2d %15f %15f\n", k, 63*j+k, mdsrBlockId[ j ], ((mdsrCheck[ k ] >> 4) & 15), ( mdsrCheck[ k ] & 15), mdsrLine[ 2*k ], mdsrLine[ 2*k+1 ] ); } */ } } /* read partial last block */ fread(&mdsrBlockId[j], sizeof(char), 1, imFilePtr); fread(&mdsrCheck, sizeof(char), ((mdsrIspLength + 1 - 30) % 64) - 1, imFilePtr); bytesRead = bytesRead + (mdsrIspLength + 1 - 30) % 64; for (k = 0; k < ((mdsrIspLength + 1 - 30) % 64) - 1; k++) { mdsrLine[2 * 63 * j + 2 * k] = LUTi[256 * (15 - ((mdsrCheck[k] >> 4) & 15)) + mdsrBlockId[j]]; mdsrLine[2 * 63 * j + 2 * k + 1] = LUTq[256 * (15 - (mdsrCheck[k] & 15)) + mdsrBlockId[j]]; /* if ( i == 0 ) { printf( "k,sample,blockId,i_in,q_in,i_out,q_out: %2d %4d %3d %2d %2d %15f %15f\n", k, 63*j+k, mdsrBlockId[ j ], ((mdsrCheck[ k ] >> 4) & 15), ( mdsrCheck[ k ] & 15), mdsrLine[ 2*k ], mdsrLine[ 2*k+1 ] ); } */ } if (windowStartTimeCodeword != windowStartTimeCodeword0) { sampleShift = windowStartTimeCodeword - windowStartTimeCodeword0; if (sampleShift < 0) { for (k = 0; k < outSamples + sampleShift; k++) { mdsrLine[2 * k] = mdsrLine[2 * (k - sampleShift)]; mdsrLine[2 * k + 1] = mdsrLine[2 * (k - sampleShift) + 1]; } for (k = outSamples + sampleShift; k < outSamples; k++) { mdsrLine[2 * k] = 0.; mdsrLine[2 * k + 1] = 0.; } } else { for (k = outSamples - 1; k >= sampleShift; k--) { mdsrLine[2 * k] = mdsrLine[2 * (k - sampleShift)]; mdsrLine[2 * k + 1] = mdsrLine[2 * (k - sampleShift) + 1]; } for (k = sampleShift - 1; k >= 0; k--) { mdsrLine[2 * k] = 0.; mdsrLine[2 * k + 1] = 0.; } } } } else { /* skip ahead and write out previous line as a placeholder */ fseek(imFilePtr, mdsrIspLength + 1 - 30, SEEK_CUR); bytesRead = bytesRead + mdsrIspLength + 1 - 30; } if (printBlockIdIfZero == 0) { if ((fwrite(&mdsrBlockId, sizeof(unsigned char), outSamples / 63 + 1, blockIdFilePtr)) != outSamples / 63 + 1) { printf("ERROR - blockIdFile write error\n\n"); exit(-1); } } if (outType == 1) { for (k = 0; k < 2 * outSamples; k++) { mdsrLineInt = (mdsrLine[k] * 127.5 + 127.5) + .5; /* 5 for rounding */ if (mdsrLineInt < 0) mdsrLineInt = 0; if (mdsrLineInt > 255) mdsrLineInt = 255; mdsrLineChar[k] = mdsrLineInt; } if ((fwrite(&mdsrLineChar, 2 * sizeof(unsigned char), outSamples, outFilePtr)) != outSamples) { printf("ERROR - outFile write error\n\n"); exit(-1); } } else { if ((fwrite(&mdsrLine, 2 * sizeof(float), outSamples, outFilePtr)) != outSamples) { printf("ERROR - outFile write error\n\n"); exit(-1); } } outLines = outLines + 1; } else if (modePacketCount > modePacketCountOld + 1) { /* printf( "Line %5d : missing line - no action taken - %d %d\n", i+1, modePacketCount, modePacketCountOld ); fseek( imFilePtr, mdsrIspLength+1-30, SEEK_CUR ); bytesRead = bytesRead + mdsrIspLength+1-30; */ printf("Line %5d : missing line(s) - filling with zeroes - %d %d\n", i + 1, modePacketCount, modePacketCountOld); for (j = 0; j < (modePacketCount - modePacketCountOld - 1); j++) { if (outType == 1) { for (k = 0; k < 2 * outSamples; k++) { mdsrLineChar[k] = 128; /* (0.*127.5+127.5) + .5 */ } if ((fwrite(&mdsrLineChar, 2 * sizeof(unsigned char), outSamples, outFilePtr)) != outSamples) { printf("ERROR - outFile write error\n\n"); exit(-1); } } else { for (k = 0; k < 2 * outSamples; k++) { mdsrLine[k] = 0.; } if ((fwrite(&mdsrLine, 2 * sizeof(float), outSamples, outFilePtr)) != outSamples) { printf("ERROR - outFile write error\n\n"); exit(-1); } } outLines = outLines + 1; } modePacketCountOld = modePacketCount - 1; /* set up to re-read header and decode current line */ fseek(imFilePtr, -68, SEEK_CUR); bytesRead = bytesRead - 68; modePacketCountOld = modePacketCountOld - 1; modePacketCount = modePacketCount - 1; priCodewordOld = priCodewordOldOld; priCodeword = priCodewordOld; windowStartTimeCodewordOld = windowStartTimeCodewordOldOld; windowStartTimeCodeword = windowStartTimeCodewordOld; i = i - 1; } else if (modePacketCount < modePacketCountOld + 1) { printf("Line %5d : duplicate line\n", i + 1); fseek(imFilePtr, mdsrIspLength + 1 - 30, SEEK_CUR); bytesRead = bytesRead + mdsrIspLength + 1 - 30; modePacketCount = modePacketCountOld; } else { printf("Line %5d : error - %d %d\n", i + 1, modePacketCount, modePacketCountOld); exit(-1); } } if ((i - 1 + 1) % 1000 != 0) printf("Line %5d\n\n", i - 1 + 1); /* write out a few things */ /* pri = priCodeword / insGads.sampRate; windowStartTime = windowStartTimeCodeword0 / insGads.sampRate; TxPulseLength = TxPulseLengthCodeword / insGads.sampRate; chirpPulseBandwidth = (double)chirpPulseBandwidthCodeword*16.e6/255.; windowLength = windowLengthCodeword / insGads.sampRate; beamAdjDelta = (double)(beamAdjDeltaCodeword-32)*360./4096.; printf( "%s%d\n", "swathNum: ", insGads.timelineIm.swathNums[ antennaBeamSetNumber-1 ] ); printf( "%s%d\n", "mValue: ", insGads.timelineIm.mValues[ antennaBeamSetNumber-1 ] ); printf( "%s%d\n", "rValue: ", insGads.timelineIm.rValues[ antennaBeamSetNumber-1 ] ); printf( "%s%d\n", "gValue: ", insGads.timelineIm.gValues[ antennaBeamSetNumber-1 ] ); printf( "%s%.9g\n", "(rank*pri+windowStartTime)*c/2 (m): ", (insGads.timelineIm.rValues[ antennaBeamSetNumber-1 ]*pri+windowStartTime)*c/2. ); printf( "%s%.9g\n", "(last)windowStartTime*c/2 (m): ", windowStartTime*c/2. ); printf( "%s%.9g\n", "windowLength*c/2 (m): ", windowLength*c/2. ); printf( "%s%.9g\n", "rangeGateBias*c/2 (m): ", insGads.rangeGateBias*c/2. ); printf( "\nOutput information:\n\n" ); printf( "%s%d\n", "number of output samples: ", outSamples ); printf( "%s%d\n", "number of output lines: ", outLines ); printf( "%s%.9g\n", "chirp pulse bandwidth (Hz): ", chirpPulseBandwidth ); printf( "%s%.9g\n", "prf (Hz): ", 1./pri ); printf( "%s%.9g\n", "range sampling frequency (Hz): ", insGads.sampRate ); printf( "%s%.9g\n", "range sample spacing (m): ", c/(2.*insGads.sampRate)); printf( "%s%.9g\n", "chirp slope (Hz/s): ", chirpPulseBandwidth/TxPulseLength ); printf( "%s%.9g\n", "pulse length (s): ", TxPulseLength ); printf( "%s%.9g\n", "radar frequency (Hz): ", insGads.radarFrequency ); printf( "%s%.9g\n", "wavelength (m): ", c/insGads.radarFrequency ); printf( "%s%.9g\n", "starting range (m): ", (insGads.timelineIm.rValues[ antennaBeamSetNumber-1 ]*pri+windowStartTime)*c/2. ); printf( "\n" ); */ fclose(imFilePtr); } /* write out a few things */ pri = priCodeword / insGads.sampRate; windowStartTime = windowStartTimeCodeword0 / insGads.sampRate; TxPulseLength = TxPulseLengthCodeword / insGads.sampRate; chirpPulseBandwidth = (double)chirpPulseBandwidthCodeword * 16.e6 / 255.; /*//debug */ printf("%s%d\n", "priCodeword=: ", priCodeword); printf("%s%.12f\n", "insGads.sampRate=: ", insGads.sampRate); printf("%s%.12f\n", "pri=: ", pri); printf("%s%d\n", "windowStartTimeCodeword0=:", windowStartTimeCodeword0); printf("%s%.12f\n", "windowStartTime=: ", windowStartTime); printf("%s%.12f\n", "TxPulseLength=: ", TxPulseLength); printf("%s%.12f\n", "chirpPulseBandwidth=: ", chirpPulseBandwidth); /* //end of debug */ printf("\nOutput information:\n\n"); printf("%s%d\n", "number of output samples: ", outSamples); printf("%s%d\n", "number of output lines: ", outLines); printf("%s%.9g\n", "chirp pulse bandwidth (Hz): ", chirpPulseBandwidth); printf("%s%.9g\n", "prf (Hz): ", 1. / pri); printf("%s%.9g\n", "range sampling frequency (Hz): ", insGads.sampRate); printf("%s%.9g\n", "range sample spacing (m): ", c / (2. * insGads.sampRate)); printf("%s%.9g\n", "chirp slope (Hz/s): ", chirpPulseBandwidth / TxPulseLength); printf("%s%.9g\n", "pulse length (s): ", TxPulseLength); printf("%s%.9g\n", "radar frequency (Hz): ", insGads.radarFrequency); printf("%s%.9g\n", "wavelength (m): ", c / insGads.radarFrequency); printf("%s%.9g\n", "starting range (m): ", (insGads.timelineIm.rValues[antennaBeamSetNumber - 1] * pri + windowStartTime) * c / 2.); printf("%s%.9g\n", "rangeGateBias*c/2 (m): ", insGads.rangeGateBias * c / 2.); printf("\n"); /* end program */ fclose(outFilePtr); printf("\nDone.\n\n"); return 0; } /* end main */ /**********************************************************************************************************************************/ struct mphStruct readMph(const char *mphPtr, const int printMphIfZero) { struct mphStruct mph; if (1 == 0) { printf("check:\n%s\n", mphPtr + 1247); } memcpy(mph.product, mphPtr + 0 + 9, 62); memcpy(mph.procStage, mphPtr + 73 + 11, 1); memcpy(mph.refDoc, mphPtr + 86 + 9, 23); memcpy(mph.spare1, mphPtr + 120 + 0, 40); memcpy(mph.acquisitionStation, mphPtr + 161 + 21, 20); memcpy(mph.procCenter, mphPtr + 204 + 13, 6); memcpy(mph.procTime, mphPtr + 225 + 11, 27); memcpy(mph.softwareVer, mphPtr + 265 + 14, 14); memcpy(mph.spare2, mphPtr + 295 + 0, 40); memcpy(mph.sensingStart, mphPtr + 336 + 15, 27); memcpy(mph.sensingStop, mphPtr + 380 + 14, 27); memcpy(mph.spare3, mphPtr + 423 + 0, 40); memcpy(mph.phase, mphPtr + 464 + 6, 1); mph.cycle = atoi((char *)strchr(mphPtr + 472 + 0, '=') + 1); mph.relOrbit = atoi((char *)strchr(mphPtr + 483 + 0, '=') + 1); mph.absOrbit = atoi((char *)strchr(mphPtr + 500 + 0, '=') + 1); memcpy(mph.stateVectorTime, mphPtr + 517 + 19, 27); mph.deltaUt1 = atof((char *)strchr(mphPtr + 565 + 0, '=') + 1); mph.xPosition = atof((char *)strchr(mphPtr + 587 + 0, '=') + 1); mph.yPosition = atof((char *)strchr(mphPtr + 614 + 0, '=') + 1); mph.zPosition = atof((char *)strchr(mphPtr + 641 + 0, '=') + 1); mph.xVelocity = atof((char *)strchr(mphPtr + 668 + 0, '=') + 1); mph.yVelocity = atof((char *)strchr(mphPtr + 697 + 0, '=') + 1); mph.zVelocity = atof((char *)strchr(mphPtr + 726 + 0, '=') + 1); memcpy(mph.vectorSource, mphPtr + 755 + 15, 2); memcpy(mph.spare4, mphPtr + 774 + 0, 40); memcpy(mph.utcSbtTime, mphPtr + 815 + 14, 27); mph.satBinaryTime = atoi((char *)strchr(mphPtr + 858 + 0, '=') + 1); mph.clockStep = atoi((char *)strchr(mphPtr + 886 + 0, '=') + 1); memcpy(mph.spare5, mphPtr + 913 + 0, 32); memcpy(mph.leapUtc, mphPtr + 946 + 10, 27); mph.leapSign = atoi((char *)strchr(mphPtr + 985 + 0, '=') + 1); mph.leapErr = atoi((char *)strchr(mphPtr + 1000 + 0, '=') + 1); memcpy(mph.spare6, mphPtr + 1011 + 0, 40); mph.productErr = atoi((char *)strchr(mphPtr + 1052 + 0, '=') + 1); mph.totSize = atoi((char *)strchr(mphPtr + 1066 + 0, '=') + 1); mph.sphSize = atoi((char *)strchr(mphPtr + 1104 + 0, '=') + 1); mph.numDsd = atoi((char *)strchr(mphPtr + 1132 + 0, '=') + 1); mph.dsdSize = atoi((char *)strchr(mphPtr + 1152 + 0, '=') + 1); mph.numDataSets = atoi((char *)strchr(mphPtr + 1180 + 0, '=') + 1); memcpy(mph.spare7, mphPtr + 1206 + 0, 40); if (printMphIfZero == 0) { printf("%s%.62s\n", "product: ", mph.product); printf("%s%.1s\n", "procStage: ", mph.procStage); printf("%s%.23s\n", "refDoc: ", mph.refDoc); printf("%s%.40s\n", "spare1: ", mph.spare1); printf("%s%.20s\n", "acquisitionStation: ", mph.acquisitionStation); printf("%s%.6s\n", "procCenter: ", mph.procCenter); printf("%s%.27s\n", "procTime: ", mph.procTime); printf("%s%.14s\n", "softwareVer: ", mph.softwareVer); printf("%s%.40s\n", "spare2: ", mph.spare2); printf("%s%.27s\n", "sensingStart: ", mph.sensingStart); printf("%s%.27s\n", "sensingStop: ", mph.sensingStop); printf("%s%.40s\n", "spare3: ", mph.spare3); printf("%s%.1s\n", "phase: ", mph.phase); printf("%s%d\n", "cycle: ", mph.cycle); printf("%s%d\n", "relOrbit: ", mph.relOrbit); printf("%s%d\n", "absOrbit: ", mph.absOrbit); printf("%s%.27s\n", "stateVectorTime: ", mph.stateVectorTime); printf("%s%f\n", "deltaUt1: ", mph.deltaUt1); printf("%s%f\n", "xPosition: ", mph.xPosition); printf("%s%f\n", "yPosition: ", mph.yPosition); printf("%s%f\n", "zPosition: ", mph.zPosition); printf("%s%f\n", "xVelocity: ", mph.xVelocity); printf("%s%f\n", "yVelocity: ", mph.yVelocity); printf("%s%f\n", "zVelocity: ", mph.zVelocity); printf("%s%.2s\n", "vectorSource: ", mph.vectorSource); printf("%s%.40s\n", "spare4: ", mph.spare4); printf("%s%.27s\n", "utcSbtTime: ", mph.utcSbtTime); printf("%s%u\n", "satBinaryTime: ", mph.satBinaryTime); printf("%s%u\n", "clockStep: ", mph.clockStep); printf("%s%.32s\n", "spare5: ", mph.spare5); printf("%s%.27s\n", "leapUtc: ", mph.leapUtc); printf("%s%d\n", "leapSign: ", mph.leapSign); printf("%s%d\n", "leapErr: ", mph.leapErr); printf("%s%.40s\n", "spare6: ", mph.spare6); printf("%s%d\n", "productErr: ", mph.productErr); printf("%s%d\n", "totSize: ", mph.totSize); printf("%s%d\n", "sphSize: ", mph.sphSize); printf("%s%d\n", "numDsd: ", mph.numDsd); printf("%s%d\n", "dsdSize: ", mph.dsdSize); printf("%s%d\n", "numDataSets: ", mph.numDataSets); printf("%s%.40s\n", "spare7: ", mph.spare7); printf("\n"); } return mph; } /* end readMph */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ struct sphStruct readSph(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph) { struct sphStruct sph; int i; memcpy(sph.sphDescriptor, sphPtr + 0 + 16, 28); sph.startLat = atof((char *)strchr(sphPtr + 46 + 0, '=') + 1) * 1.e-6; sph.startLon = atof((char *)strchr(sphPtr + 78 + 0, '=') + 1) * 1.e-6; sph.stopLat = atof((char *)strchr(sphPtr + 111 + 0, '=') + 1) * 1.e-6; sph.stopLon = atof((char *)strchr(sphPtr + 142 + 0, '=') + 1) * 1.e-6; sph.satTrack = atof((char *)strchr(sphPtr + 174 + 0, '=') + 1); memcpy(sph.spare1, sphPtr + 205 + 0, 50); sph.ispErrorsSignificant = atoi((char *)strchr(sphPtr + 256 + 0, '=') + 1); sph.missingIspsSignificant = atoi((char *)strchr(sphPtr + 281 + 0, '=') + 1); sph.ispDiscardedSignificant = atoi((char *)strchr(sphPtr + 308 + 0, '=') + 1); sph.rsSignificant = atoi((char *)strchr(sphPtr + 336 + 0, '=') + 1); memcpy(sph.spare2, sphPtr + 353 + 0, 50); sph.numErrorIsps = atoi((char *)strchr(sphPtr + 404 + 0, '=') + 1); sph.errorIspsThresh = atof((char *)strchr(sphPtr + 431 + 0, '=') + 1); sph.numMissingIsps = atoi((char *)strchr(sphPtr + 468 + 0, '=') + 1); sph.missingIspsThresh = atof((char *)strchr(sphPtr + 497 + 0, '=') + 1); sph.numDiscardedIsps = atoi((char *)strchr(sphPtr + 536 + 0, '=') + 1); sph.discardedIspsThresh = atof((char *)strchr(sphPtr + 567 + 0, '=') + 1); sph.numRsIsps = atoi((char *)strchr(sphPtr + 608 + 0, '=') + 1); sph.rsThresh = atof((char *)strchr(sphPtr + 632 + 0, '=') + 1); memcpy(sph.spare3, sphPtr + 661 + 0, 100); memcpy(sph.txRxPolar, sphPtr + 762 + 13, 5); memcpy(sph.swath, sphPtr + 782 + 7, 3); memcpy(sph.spare4, sphPtr + 794 + 0, 41); if (1 == 0) { printf("check:\n%s\n", sphPtr + 836 + 0); } if (printSphIfZero == 0) { printf("%s%.28s\n", "sphDescriptor: ", sph.sphDescriptor); printf("%s%f\n", "startLat: ", sph.startLat); printf("%s%f\n", "startLon: ", sph.startLon); printf("%s%f\n", "stopLat: ", sph.stopLat); printf("%s%f\n", "stopLon: ", sph.stopLon); printf("%s%f\n", "satTrack: ", sph.satTrack); printf("%s%.50s\n", "spare1: ", sph.spare1); printf("%s%d\n", "ispErrorsSignificant: ", sph.ispErrorsSignificant); printf("%s%d\n", "missingIspsSignificant: ", sph.missingIspsSignificant); printf("%s%d\n", "ispDiscardedSignificant: ", sph.ispDiscardedSignificant); printf("%s%d\n", "rsSignificant: ", sph.rsSignificant); printf("%s%.50s\n", "spare2: ", sph.spare2); printf("%s%d\n", "numErrorIsps: ", sph.numErrorIsps); printf("%s%f\n", "errorIspsThresh: ", sph.errorIspsThresh); printf("%s%d\n", "numMissingIsps: ", sph.numMissingIsps); printf("%s%f\n", "missingIspsThresh: ", sph.missingIspsThresh); printf("%s%d\n", "numDiscardedIsps: ", sph.numDiscardedIsps); printf("%s%f\n", "discardedIspsThresh: ", sph.discardedIspsThresh); printf("%s%d\n", "numRsIsps: ", sph.numRsIsps); printf("%s%f\n", "rsThresh: ", sph.rsThresh); printf("%s%.100s\n", "spare3: ", sph.spare3); printf("%s%.5s\n", "txRxPolar: ", sph.txRxPolar); printf("%s%.3s\n", "swath: ", sph.swath); printf("%s%.41s\n", "spare4: ", sph.spare4); } for (i = 0; i < mph.numDsd; i++) { /* extract DSDs from SPH */ if (i != 3) { /* fourth is a spare DSD - see pdf page 537 */ if (1 == 0) { printf("check:\n%s\n", sphPtr + 836 + mph.dsdSize * i + 0 + 0); } memcpy(sph.dsd[i].dsName, sphPtr + 836 + mph.dsdSize * i + 0 + 9, 28); memcpy(sph.dsd[i].dsType, sphPtr + 836 + mph.dsdSize * i + 39 + 8, 1); memcpy(sph.dsd[i].filename, sphPtr + 836 + mph.dsdSize * i + 49 + 10, 62); sph.dsd[i].dsOffset = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 123 + 0, '=') + 1); sph.dsd[i].dsSize = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 162 + 0, '=') + 1); sph.dsd[i].numDsr = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 199 + 0, '=') + 1); sph.dsd[i].dsrSize = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 219 + 0, '=') + 1); /* write out a few things */ if (printSphIfZero == 0) { printf("%s%d%s%.28s\n", "dsd[ ", i, " ].dsName: ", sph.dsd[i].dsName); printf("%s%d%s%.1s\n", "dsd[ ", i, " ].dsType: ", sph.dsd[i].dsType); printf("%s%d%s%.62s\n", "dsd[ ", i, " ].filename: ", sph.dsd[i].filename); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsOffset: ", sph.dsd[i].dsOffset); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsSize: ", sph.dsd[i].dsSize); printf("%s%d%s%d\n", "dsd[ ", i, " ].numDsr: ", sph.dsd[i].numDsr); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsrSize: ", sph.dsd[i].dsrSize); } } } if (printSphIfZero == 0) { printf("\n"); } return sph; } /* end readSph */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ struct sphAuxStruct readSphAux(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph) { struct sphAuxStruct sph; int i; memcpy(sph.sphDescriptor, sphPtr + 0 + 16, 28); memcpy(sph.spare1, sphPtr + 46 + 0, 51); if (printSphIfZero == 0) { printf("%s%.28s\n", "sphDescriptor: ", sph.sphDescriptor); printf("%s%.51s\n", "spare1: ", sph.spare1); } for (i = 0; i < mph.numDsd; i++) { /* extract DSDs from SPH */ memcpy(sph.dsd[i].dsName, sphPtr + 98 + mph.dsdSize * i + 0 + 9, 28); memcpy(sph.dsd[i].dsType, sphPtr + 98 + mph.dsdSize * i + 39 + 8, 1); memcpy(sph.dsd[i].filename, sphPtr + 98 + mph.dsdSize * i + 49 + 10, 62); sph.dsd[i].dsOffset = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 123 + 0, '=') + 1); sph.dsd[i].dsSize = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 162 + 0, '=') + 1); sph.dsd[i].numDsr = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 199 + 0, '=') + 1); sph.dsd[i].dsrSize = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 219 + 0, '=') + 1); /* write out a few things */ if (printSphIfZero == 0) { printf("%s%d%s%.28s\n", "dsd[ ", i, " ].dsName: ", sph.dsd[i].dsName); printf("%s%d%s%.1s\n", "dsd[ ", i, " ].dsType: ", sph.dsd[i].dsType); printf("%s%d%s%.62s\n", "dsd[ ", i, " ].filename: ", sph.dsd[i].filename); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsOffset: ", sph.dsd[i].dsOffset); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsSize: ", sph.dsd[i].dsSize); printf("%s%d%s%d\n", "dsd[ ", i, " ].numDsr: ", sph.dsd[i].numDsr); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsrSize: ", sph.dsd[i].dsrSize); } } if (printSphIfZero == 0) { printf("\n"); } return sph; } /* end readSphAux */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ void printInsGads(const struct insGadsStruct insGads) { int i; printf("%s%d\n", "dsrTime.days: ", insGads.dsrTime.days); printf("%s%d\n", "dsrTime.seconds: ", insGads.dsrTime.seconds); printf("%s%d\n", "dsrTime.microseconds: ", insGads.dsrTime.microseconds); printf("%s%d\n", "dsrLength: ", insGads.dsrLength); printf("%s%.9g\n", "radarFrequency: ", insGads.radarFrequency); printf("%s%.9g\n", "sampRate: ", insGads.sampRate); printf("%s%.9g\n", "offsetFreq: ", insGads.offsetFreq); printf("%s%.9g\n", "rangeGateBias: ", insGads.rangeGateBias); printf("%s%.9g\n", "rangeGateBiasGm: ", insGads.rangeGateBiasGm); printf("%s%f\n", "refElevAngleIs1: ", insGads.refElevAngleIs1); printf("%s%f\n", "refElevAngleIs2: ", insGads.refElevAngleIs2); printf("%s%f\n", "refElevAngleIs3Ss2: ", insGads.refElevAngleIs3Ss2); printf("%s%f\n", "refElevAngleIs4Ss3: ", insGads.refElevAngleIs4Ss3); printf("%s%f\n", "refElevAngleIs5Ss4: ", insGads.refElevAngleIs5Ss4); printf("%s%f\n", "refElevAngleIs6Ss5: ", insGads.refElevAngleIs6Ss5); printf("%s%f\n", "refElevAngleIs7: ", insGads.refElevAngleIs7); printf("%s%f\n", "refElevAngleSs1: ", insGads.refElevAngleSs1); printf("%s%.9g\n", "swstCalP2: ", insGads.swstCalP2); printf("%s%u\n", "perCalWindowsEc: ", insGads.perCalWindowsEc); printf("%s%u\n", "perCalWindowsMs: ", insGads.perCalWindowsMs); printf("%s%u\n", "initCalBeamSetWv: ", insGads.initCalBeamSetWv); printf("%s%u\n", "beamSetEc: ", insGads.beamSetEc); printf("%s%u\n", "beamSetMs: ", insGads.beamSetMs); printf("%s%u\n", "mEc: ", insGads.mEc); printf(".\n"); printf(".\n"); printf(".\n"); for (i = 0; i < 4096; i++) printf("%s%4d%s%15f %15f %15f\n", "fbaq4LutI,Q,NoAdc[ ", i, " ]: ", insGads.fbaq4LutI[i], insGads.fbaq4LutQ[i], insGads.fbaq4NoAdc[i]); printf(".\n"); printf(".\n"); printf(".\n"); printf("\n"); /* exit( 0 ); */ return; } /* end printInsGads */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ /********************************************************** ** Function: byte_swap_InsGads ** ** Purpose: Convert the bytes of struct insGadsStruct for a little endian order machine ** ** Comment: struct testStruct should be redefined in the future! ** ** Author: Zhenhong Li at UCL ** ** Created: 17/02/2005 ** ** Modified: ** ;**********************************************************/ void byte_swap_InsGads(struct insGadsStruct *InsGads) { swap_endian_order(e_tid_long, &(*InsGads).dsrTime, 3); swap_endian_order(e_tid_ulong, &(*InsGads).dsrLength, 1); swap_endian_order(e_tid_float, &(*InsGads).radarFrequency, 1); swap_endian_order(e_tid_float, &(*InsGads).sampRate, 1); swap_endian_order(e_tid_float, &(*InsGads).offsetFreq, 1); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0TxH1, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0TxV1, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0TxH1a, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0TxV1a, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0RxH2, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0RxV2, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0H3, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0V3, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseImTxH1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImTxV1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImTxH1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImTxV1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImRxH2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImRxV2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImH3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImV3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApTxH1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApTxV1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApTxH1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApTxV1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApRxH2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApRxV2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApH3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApV3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvTxH1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvTxV1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvTxH1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvTxV1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvRxH2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvRxV2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvH3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvV3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsTxH1, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsTxV1, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsTxH1a, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsTxV1a, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsRxH2, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsRxV2, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsH3, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsV3, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmTxH1, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmTxV1, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmTxH1a, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmTxV1a, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmRxH2, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmRxV2, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmH3, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmV3, 320); swap_endian_order(e_tid_float, &(*InsGads).nomPulseIm, 63); swap_endian_order(e_tid_float, &(*InsGads).nomPulseAp, 63); swap_endian_order(e_tid_float, &(*InsGads).nomPulseWv, 63); swap_endian_order(e_tid_float, &(*InsGads).nomPulseWs, 45); swap_endian_order(e_tid_float, &(*InsGads).nomPulseGm, 45); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs1, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs2, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs3Ss2, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs4Ss3, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs5Ss4, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs6Ss5, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs7, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternSs1, 101); swap_endian_order(e_tid_float, &(*InsGads).rangeGateBias, 1); swap_endian_order(e_tid_float, &(*InsGads).rangeGateBiasGm, 1); swap_endian_order(e_tid_float, &(*InsGads).adcLutI, 255); swap_endian_order(e_tid_float, &(*InsGads).adcLutQ, 255); swap_endian_order(e_tid_float, &(*InsGads).full8LutI, 256); swap_endian_order(e_tid_float, &(*InsGads).full8LutQ, 256); swap_endian_order(e_tid_float, &(*InsGads).fbaq4LutI, 4096); swap_endian_order(e_tid_float, &(*InsGads).fbaq3LutI, 2048); swap_endian_order(e_tid_float, &(*InsGads).fbaq2LutI, 1024); swap_endian_order(e_tid_float, &(*InsGads).fbaq4LutQ, 4096); swap_endian_order(e_tid_float, &(*InsGads).fbaq3LutQ, 2048); swap_endian_order(e_tid_float, &(*InsGads).fbaq2LutQ, 1024); swap_endian_order(e_tid_float, &(*InsGads).fbaq4NoAdc, 4096); swap_endian_order(e_tid_float, &(*InsGads).fbaq3NoAdc, 2048); swap_endian_order(e_tid_float, &(*InsGads).fbaq2NoAdc, 1024); swap_endian_order(e_tid_float, &(*InsGads).smLutI, 16); swap_endian_order(e_tid_float, &(*InsGads).smLutQ, 16); swap_endian_order(e_tid_ushort, &(*InsGads).swathConfigIm, 28); swap_endian_order(e_tid_float, &(*InsGads).swathConfigIm.resampleFactor, 7); swap_endian_order(e_tid_ushort, &(*InsGads).swathConfigAp, 28); swap_endian_order(e_tid_float, &(*InsGads).swathConfigAp.resampleFactor, 7); swap_endian_order(e_tid_ushort, &(*InsGads).swathConfigWs, 28); swap_endian_order(e_tid_float, &(*InsGads).swathConfigWs.resampleFactor, 7); swap_endian_order(e_tid_ushort, &(*InsGads).swathConfigGm, 28); swap_endian_order(e_tid_float, &(*InsGads).swathConfigGm.resampleFactor, 7); swap_endian_order(e_tid_ushort, &(*InsGads).swathConfigWv, 28); swap_endian_order(e_tid_float, &(*InsGads).swathConfigWv.resampleFactor, 7); swap_endian_order(e_tid_ushort, &(*InsGads).perCalWindowsEc, 1); swap_endian_order(e_tid_ushort, &(*InsGads).perCalWindowsMs, 1); swap_endian_order(e_tid_ushort, &(*InsGads).swathIdIm, 14); swap_endian_order(e_tid_ushort, &(*InsGads).swathIdAp, 14); swap_endian_order(e_tid_ushort, &(*InsGads).swathIdWs, 14); swap_endian_order(e_tid_ushort, &(*InsGads).swathIdGm, 14); swap_endian_order(e_tid_ushort, &(*InsGads).swathIdWv, 14); swap_endian_order(e_tid_ushort, &(*InsGads).initCalBeamSetWv, 1); swap_endian_order(e_tid_ushort, &(*InsGads).beamSetEc, 1); swap_endian_order(e_tid_ushort, &(*InsGads).beamSetMs, 1); swap_endian_order(e_tid_ushort, &(*InsGads).calSeq, 32); swap_endian_order(e_tid_ushort, &(*InsGads).timelineIm, 28); swap_endian_order(e_tid_ushort, &(*InsGads).timelineAp, 28); swap_endian_order(e_tid_ushort, &(*InsGads).timelineWs, 28); swap_endian_order(e_tid_ushort, &(*InsGads).timelineGm, 28); swap_endian_order(e_tid_ushort, &(*InsGads).timelineWv, 28); swap_endian_order(e_tid_ushort, &(*InsGads).mEc, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs1, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs2, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs3Ss2, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs4Ss3, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs5Ss4, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs6Ss5, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs7, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleSs1, 1); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs1, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs2, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs3Ss2, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs4Ss3, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs5Ss4, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs6Ss5, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs7, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefSs1, 128); // struct testStruct should be redefined in the future. swap_endian_order(e_tid_float, &(*InsGads).im, 17); swap_endian_order(e_tid_float, &(*InsGads).ap, 17); swap_endian_order(e_tid_float, &(*InsGads).ws, 17); swap_endian_order(e_tid_float, &(*InsGads).gm, 17); swap_endian_order(e_tid_float, &(*InsGads).wv, 17); swap_endian_order(e_tid_float, &(*InsGads).swstCalP2, 1); } /********************************************************** ** Function: is_bigendian ** ** Purpose: Test whether it is a bigendian machine ** ** Return values: true: 1, false: 0 ** ** Comment: ** ** Author: Eric J Fielding at JPL ** ** Created: ** ** Modified: ** ;**********************************************************/ int is_bigendian() { int bigendian, littleendian, test; unsigned char t[4]; littleendian = 256; bigendian = 256 * 256; t[0] = 0; t[1] = 1; t[2] = 0; t[3] = 0; memcpy(&test, &t[0], 4); /* printf("test: %i\n",test); */ if (test == bigendian) return (1); if (test == littleendian) return (0); printf("Error in endian test, test= %i ********\n", test); return (-1); } /* * Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_short(short *buffer, uint number_of_swaps) { short *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = (short)(((*temp & 0x00ff) << 8) | ((*temp & 0xff00) >> 8)); } } /* Function: byte_swap_long.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_long(long *buffer, uint number_of_swaps) { long *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* ADDED THESE LINES TO TEST THE 4-BYTE INT TYPE ON 64 BIT */ /* Function: byte_swap_int.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_int(int *buffer, uint number_of_swaps) { int *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* Function: byte_swap_uint.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_uint(uint *buffer, uint number_of_swaps) { uint *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* ADDDED NEW LINES ABOVE */ /* ************************************************************************** */ /* Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_ushort(ushort *buffer, uint number_of_swaps) { byte_swap_short((short *)buffer, number_of_swaps); } /* * Function: byte_swap_ulong.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_ulong(ulong *buffer, uint number_of_swaps) { byte_swap_long((long *)buffer, number_of_swaps); } /* * Function: byte_swap_long.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_float(float *buffer, uint number_of_swaps) { byte_swap_int((int *)buffer, number_of_swaps); } /* Function: epr_swap_endian_order Access: public API Changelog: 2002/02/04 mp nitial version */ /** * Converts bytes for a little endian order machine * * @param field the pointer at data reading in * */ void swap_endian_order(EPR_EDataTypeId data_type_id, void *elems, uint num_elems) { switch (data_type_id) { case e_tid_uchar: case e_tid_char: case e_tid_string: /* no conversion required */ break; case e_tid_time: byte_swap_uint((uint *)elems, 3); break; case e_tid_spare: /* no conversion required */ break; case e_tid_ushort: byte_swap_ushort((ushort *)elems, num_elems); break; case e_tid_short: byte_swap_short((short *)elems, num_elems); break; case e_tid_ulong: byte_swap_uint((uint *)elems, num_elems); break; case e_tid_long: byte_swap_int((int *)elems, num_elems); break; case e_tid_float: byte_swap_float((float *)elems, num_elems); break; case e_tid_double: printf("swap_endian_order: DOUBLE type was not yet processed\n"); break; default: printf("swap_endian_order: unknown data type\n"); } } GMTSAR_V5.7/preproc/ENVI_preproc/ENVI_decode/asa_im_decode000755 015705 000000 00000153474 13507242217 024255 0ustar00sandwellwheel000000 000000 ` H__PAGEZERO(__TEXT__text__TEXTі__stubs__TEXTr__stub_helper__TEXT__const__TEXTЦЦ__cstring__TEXT__unwind_info__TEXTX8__DATA__nl_symbol_ptr__DATA__got__DATA__la_symbol_ptr__DATAH__LINKEDIT<"08@P % P) /usr/lib/dyldŀz?ޢ33{2   *( 8/usr/lib/libSystem.B.dylib&p )UHAWAVAUATSHشHAH?HHEDžNH=AH=ޖH=ŪҖH= ƖH=M躖H=讖H=袖H=薖H=6芖H=A~H=rH=9fH=ZH=NH=BH=McJ|HML%H`1LHMJ|L01LHMLJ|H5HN1ԕJ|H5HM1躕H=訕H5L]HMHH5H`:HIH=q^6H^HþHLH=CLQLHH@LHĔH=HcH軔HIľHHL脔H9H@UHHHQLI$LSH=ʦwHQL(HAHQ&L1HMHH=rH)H Hcɋ`un`.HH=uE/IcHMADž NDžNDžNH@NDžNHhNDžLN1E1Dž NE11HPNHNJ|1H5+HHDHH5AH8NHVH=HILMHH8N角H=HxNHLHH莒LnH=E蒒LcTLeHIƾHLH8N*L9UHHHHxNLtPLH=M'M1 NHNDAAHXNF(NHHiMbHH?H&i9u1H=(N蜑HMH8NHRMȉMHMH+MȉMHMHMȉMHMHݐMȉMHMH趐MȉMHMH菐MȉMHfNHhffNHMHGfMHMH&fMHMHfMHMHfMHMHÏfMHNH袏fNHH聏fof8f ff "ff"f$f&(ffNf(*fNf*f,AAA  NNHNwHPN@A9dN1H=(NDLPND賎AEL(ND$NH@ND4LcEDNN,1f.DNu7@NH0~L:H00f.f@NH~L躍HLHMۍL9D9yND$NL(NAHƼH8N蒍DHPNDHhNHXN;MP f.@%= N3fDPNDDNLhNfNAL))Mf(fT f.щ%w[WA*Q^ZX^u NU*Y\WZYXWf: ,ЍDH@NDžNff9LN1H=(NHhN?LhNHNffNHH8N%čf(-f(5fEfo=fDo &N2 @NuH@NHHHOHsj1f.EL8NA9j1H=D(NDYfNHL#DDHhN HHH!HYHHHƉH3H)H\1f.fZZfYfYfXfXfXfXffffA8=f89fA8ZZfYfYfXfXfXfXfff~50ffA8=f89fA8f~54HHVHtNZZfYfYfXfXfXffXfffA8=f89fA8f~50H9ʾtDfZYXX,ЅHց| 0HH9|Hc@NH0LNfPND$NXNt(fD9t"A1H=(NDCHNPNf9t"DLN1H=(NDfDXNDfNAHHH8N谈A@EAALE1f?HPH8NoB=1 PҁH ‹nATHH Ƌ.ATHH?uJ=IǾHH8NIM9WE1DDElMcHPLH8N誇E~lH~LDIHI1DPցH ƋnAtHH Nj.A4HH9uLNHNf9% f(-]f(5efEfo=hfDo ouȉLNDXNUDLhNEE)D9@NDXN~kH@NHcIcʍTHcHHB43|6C4)Bt3D)fHHcZHcHH9EIcCLC6)HcHH AE)EIcH1D$NH|0HHDPNN7dH@NDDXNH@NB<D)wE11HLGC 6C)DALcHNE1Dž NDžLNDžN1H@NDžNDž N NW*Q^DLNWA*Z8N^WZPNAW*^Z(NNW*Y^NL5H51LQZHH5HH5H8NH51LDrH5HPNYH5H(N@H5HN'H='H51LH@NH51LN~HH5HN~^8NH5H~QZH5ȃH~QZX(^H5ƒHa~N^(NH5ȃH@~H5ރH(N'~QZH5H ~QWZ^H5ۃH} NEW*Y8NXPNYbYbH5H}bZY5Y5H5Hj} f}HM}H=ݏT}H{HH;Eu1Hش[A\A]A^A_]|H="}|H=1(NDHPN||H=H=[H=2H= H=~H1| |X|H=~H0H=t~H`H=~1a|H=a|H=~11;|{f.UHAWAVAUATSHAHIHF?HG6HF9HG0HF1HG(HF)HG HF!HGHFHGHF HNHOHFTG>HFnHGNHF_HNgHOGHG?HHGvHHGnHHGfHFxHHO^HGVHHHHG~fHHHHHHfHHHHH?HH7HH'H/HHHGHwfHoHH_HgHHyfHHHHH HHH?HH7HH/HHH'HGH=yHx]yAHH=yHxMg?MwVI_~IHEIHEIHEIHEIHEIHEIHEIGHEITHEIHEIHEIHxIHpIHhI<H`I|HXH=zH5z1LHG,HFFHG4HFNHGuf@ufBufDufFufHufJuLuȉLuoPuf8Pu`uȉ`uduȉduohuf8hufxufzuo|uf8|uouf8ufufuouf8uuȉuuȉuuȉufufufufufufufuouf8uouf8ufufufufufuouf8uvȉvvȉv vȉ vfvfvfvfvovf8vo(vf8(vo8vf88voHvf8HvXvȉXv\vȉ\v`vȉ`vfdvofvf8fvovvf8vvovf8vovf8vovf8vovf8vovf8vovf8vovf8vovf8vowf8wowf8wo&wf8&wo6wf86woFwf8FwoVwf8Vwofwf8fwovwf8vwowf8wowf8wowf8wowf8wowf8wowf8wowf8wowf8woxf8xoxf8xo&xf8&xo6xf86xfFxfHxfJxfLxfNxfPxfRxoxf8xoxf8xoxoxf8f8xxoyoyf8f8yyo yo0yf8f8 y0yo@yoPyf8f8@yPyo`yopyf8f8`ypyoyoyf8f8yyoyoyf8f8yyoyoyf8f8yyoyoyf8f8yyozozf8f8zzo zo0zf8f8 z0zo@zoPzf8f8@zPzo`zopzf8f8`zpzozozf8f8zzozozf8f8zzozozf8f8zzozozf8f8zzo{o{f8f8{{o {o0{f8f8 {0{o@{oP{f8f8@{P{o`{op{f8f8`{p{o{o{f8f8{{o{o{f8f8{{o{o{f8f8{{o{o{f8f8{{o|o|f8f8||o |o0|f8f8 |0|o@|oP|f8f8@|P|o`|op|f8f8`|p|o|o|f8f8||o|o|f8f8||o|o|f8f8||o|o|f8f8||o}o}f8f8}}o }o0}f8f8 }0}o@}oP}f8f8@}P}o`}op}f8f8`}p}o}o}f8f8}}o}o}f8f8}}o}o}f8f8}}o}o}f8f8}}o~o~f8f8~~o ~o0~f8f8 ~0~o@~oP~f8f8@~P~o`~op~f8f8`~p~o~o~f8f8~~o~o~f8f8~~o~o~f8f8~~o~o~f8f8~~oof8f8o o0f8f8 0o@oPf8f8@Po`opf8f8`poof8f8oof8f8oof8f8oof8f8oof8f8o o0f8f8 0o@oPf8f8@Po`opf8f8`poof8f8oof8f8ooЀf8f8Ѐoof8f8oof8f8o o0f8f8 0o@oPf8f8@Po`opf8f8`poof8f8oof8f8ooЁf8f8Ёoof8f8oof8f8o o0f8f8 0o@oPf8f8@Po`opf8f8`poof8f8oof8f8ooЂf8f8Ђoof8f8oof8f8o o0f8f8 0o@oPf8f8@Po`opf8f8`poof8f8oof8f8ooЃf8f8Ѓoof8f8oof8f8o o0f8f8 0o@oPf8f8@Po`opf8f8`poof8f8oof8f8ooЄf8f8Єoof8f8oof8f8o o0f8f8 0o@oPf8f8@Po`opf8f8`poof8f8oof8f8ooЅf8f8Ѕoof8f8oof8f8o o0f8f8 0o@oPf8f8@Po`opf8f8`poof8f8oof8f8ooІf8f8Іoof8f8oof8f8o o0f8f8 0o@oPf8f8@Po`opf8f8`poof8f8oof8f8ooЇf8f8Їoof8f8oof8f8o o0f8f8 0o@oPf8f8@Po`opf8f8`poof8f8oof8f8ooЈf8f8Јof8of8of8of8o f8 o0f80o@f8@oPf8Po`f8`opf8pof8of8of8of8of8oНf8Нof8of8of8of8o f8 0ȉ04ȉ4]DUHAWAVAUATSPLmUL5H5#11LUH5#1LUH5#1LUH5#1L{E ZL5EH5#LZE$ZH5$L@E(ZH5 $L&(ZH5$L ,ZH5$LxZL=AH5$LxZH5$$LxZH5,$LxZH54$LqxZH5<$LTxZH5D$L7xZH5L$LxZH5T$LDZH5\$LtvL5LH5b$1LvvH5o$1LwH5|$1LwH5$1LywH5$1LabxH5$1LIL5,LFL>L6L5$L=$L%$f.DA#ZAZAZҰLLLHHuH,HHH H[A\A]A^A_]UHAWAVAUATSH(AHILmF(GHF HGHFHNHOHH~.=UHxYAG H{N=0HxYAG(H{o= HxYAG0H=HxzYAG8H=HxRAG@HHIGHIOPHIGXHIG`HIGhHIGpfAGxH=MHxAG|H=/HxAH4=HxAHP=HxAHaHiIIHqIHyIHIHIfAH=iHxAH=HHxAH=%HxAH=HxAH=Hx~AH7=HxWAH`=Hx:AHx=|HxAMHdL+ AhAdAkfAiBAHH"IlItH*I|H2IH:IDuEMoHIHEIdHEIiHEIlHEH=_H5a1LYAG L5H5]L;AG(H5`L$AG0H5cL AG8H5fL AG@H5iL H=rH51L AW|L-|H5X1L AH5Z1L AH5\1L{ AH5^1Lc H51H=HUJ AH5G1L2 AH5GL AH5I1L AH5IL AH5K1L AH5KL AH5M1LLm AH5IL~ H=RH5<1Lf H=DH5E1HUM H=MH5N1HU4 H=VH5l1HU IcpHEHDeIctHEHME1E1DIDCCC/HCK/HHKK/K/C&C/HC2HK:K/HKBK/HKJK/HKRK/HKZK/HKbK/HKhK/K/H{r=I Hx C/H=' Hx C/H= Hx C/H= Hx C/EO/K/HEK/HE1H=L%LDH o 1H=LDH LEP 1H=LDH LE1 G/1H HLDH  G/1H=LDH  G/1H=qLDH  G/1H=NLDeDH  IH]IlL;uEu x LH([A\A]A^A_]f.UHσHHc H]ÅtJHH1Ht܍JHH1HUtJHH`1HtJHH1HtJHH1HKH="]H=5"]NȉɉNFȉF]AAL)HN1foO f.Do ~oT~f8f8 ~T~HH9uE)1f.fHH9uAAL)HN1foo ~oT~f8f8 ~T~HH9uEm)1f.fHH9uNAAL)H1foo oTf8f8 THH9uE)1f.4Ή4H9uAAL)H1foT@o oTf8f8 THH9uE)1f.4Ή4H9ukAAL)H1fo@o oTf8f8 THH9uE)1f.4Ή4H9u9WuUH1]UHNHHs1HOAAL)HO1fofo WoTWf8f8 WTWHH9uEt)1f.@fHH9u]fUH%NHHs 1IAAL)L 1fDoefDo lfotfo|f.fo$olfofA8fofA8fofA8ffofA8ffof8fof8f8fff8ff$lHH9uEtQ)1f.fIJxޱA?_@nAo@?ư>%s%d%lfwb*** ERROR - cannot open file: %s rbsizeof( insGads ): %ld %d %ld %ld Line %5d Line %5d : windowStartTimeCodeword %5d : shifting this and subsequent data to %5d Line %5d : priCodeword changes from %5d to %5d : no action taken Line %5d : windowStartTimeCodeword changes from %5d to %5d : shifting this and subsequent data to %5d Line %5d : missing line(s) - filling with zeroes - %d %d Line %5d : duplicate line Line %5d : error - %d %d Line %5d %s%d priCodeword=: %s%.12f insGads.sampRate=: pri=: windowStartTimeCodeword0=:windowStartTime=: TxPulseLength=: chirpPulseBandwidth=: number of output samples: number of output lines: %s%.9g chirp pulse bandwidth (Hz): prf (Hz): range sampling frequency (Hz): range sample spacing (m): chirp slope (Hz/s): pulse length (s): radar frequency (Hz): wavelength (m): starting range (m): rangeGateBias*c/2 (m): %s%.62s product: %s%.1s procStage: %s%.23s refDoc: %s%.40s spare1: %s%.20s acquisitionStation: %s%.6s procCenter: %s%.27s procTime: %s%.14s softwareVer: spare2: sensingStart: sensingStop: spare3: phase: cycle: relOrbit: absOrbit: stateVectorTime: %s%f deltaUt1: xPosition: yPosition: zPosition: xVelocity: yVelocity: zVelocity: %s%.2s vectorSource: spare4: utcSbtTime: %s%u satBinaryTime: clockStep: %s%.32s spare5: leapUtc: leapSign: leapErr: spare6: productErr: totSize: sphSize: numDsd: dsdSize: numDataSets: spare7: %s%.28s sphDescriptor: startLat: startLon: stopLat: stopLon: satTrack: %s%.50s ispErrorsSignificant: missingIspsSignificant: ispDiscardedSignificant: rsSignificant: numErrorIsps: errorIspsThresh: numMissingIsps: missingIspsThresh: numDiscardedIsps: discardedIspsThresh: numRsIsps: rsThresh: %s%.100s %s%.5s txRxPolar: %s%.3s swath: %s%.41s %s%d%s%.28s dsd[ ].dsName: %s%d%s%.1s ].dsType: %s%d%s%.62s ].filename: %s%d%s%d ].dsOffset: ].dsSize: ].numDsr: ].dsrSize: %s%.51s dsrTime.days: dsrTime.seconds: dsrTime.microseconds: dsrLength: radarFrequency: sampRate: offsetFreq: rangeGateBias: rangeGateBiasGm: refElevAngleIs1: refElevAngleIs2: refElevAngleIs3Ss2: refElevAngleIs4Ss3: refElevAngleIs5Ss4: refElevAngleIs6Ss5: refElevAngleIs7: refElevAngleSs1: swstCalP2: perCalWindowsEc: perCalWindowsMs: initCalBeamSetWv: beamSetEc: beamSetMs: mEc: %s%4d%s%15f %15f %15f fbaq4LutI,Q,NoAdc[ ]: *** asa_im_decode v1.1 by smb *** It is running under Linux or Windows...Reading MPH of ins file... Reading SPH from ins file... Reading GADS from ins file... Output information: Done. Reading image MPH... Reading image SPH... Reading and decoding image MDSR... ERROR - outFile write error ERROR - gads read error ERROR - sph read error ERROR - sph allocation memoryERROR - mph read error ERROR - mph allocation memoryDecodes Envisat ASAR Image Mode Level 0 data. Usage: asa_im_decode asa_im input image file(s) (multiple files if merging along-track) asa_ins input auxilary instrument characterization data file out output raw data file outType output file type (1=byte,4=float) near_range near range to which to align all lines (0=use first line near range) Notes: out is a complex file with no headers (byte/float I1, byte/float Q1, byte/float I2, byte/float Q2, ...) if outType is byte, then the decoded floats are multiplied by 127.5, shifted by 127.5, rounded to the nearest integer and limited to the range 0-255 starting range computed as (rank*pri+windowStartTime)*c/2 where rank is the number of pri between transmitted pulse and return echo calibration/noise lines are replaced with previous echo data line missing lines within a data set and between adjacent along-track data sets are filled with zeroes in float mode and 0.*127.5+127.5 + .5 = 128 for byte mode auxilary data files can be found at http://envisat.esa.int/services/auxiliary_data/asar/ Envisat ASAR Product Handbook, Issue 1.1, 1 December 2002 can be found at http://envisat.esa.int/dataproducts/asar/CNTR6-3-6.htm#eph.asar.asardf.0pASA_IM__0P .swap_endian_order: DOUBLE type was not yet processedswap_endian_order: unknown data type$$X<<< )@Ѝ",6@JT^hr|"`@___stack_chk_guardQr@dyld_stub_binderr@___bzeror @___stack_chk_failr(@_atofr0@_atoir8@_exitr@@_fcloserH@_fopenrP@_freadrX@_freer`@_fseekrh@_fwriterp@_mallocrx@_memcpyr@_memsetr@_printfr@_putcharr@_putsr@_sscanfr@_strchr__mh_execute_headerfmainjreadobyte_swap_printInsGadsswap_endian_orderis_bigendianMph|SphSAuxkInsGadsshortlongintufloatqЦintshortlong6T8):IYjz )P5 $*08?FLS[cks{ !"#$@ !"# __mh_execute_header_byte_swap_InsGads_byte_swap_float_byte_swap_int_byte_swap_long_byte_swap_short_byte_swap_uint_byte_swap_ulong_byte_swap_ushort_is_bigendian_main_printInsGads_readMph_readSph_readSphAux_swap_endian_order___bzero___stack_chk_fail___stack_chk_guard_atof_atoi_exit_fclose_fopen_fread_free_fseek_fwrite_malloc_memcpy_memset_printf_putchar_puts_sscanf_strchrdyld_stub_binderGMTSAR_V5.7/preproc/S1A_preproc/src_assembly/000755 015705 000000 00000000000 13507242234 022021 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/S1A_preproc/src_stitch/000755 015705 000000 00000000000 13507242234 021500 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/S1A_preproc/Makefile000644 015705 000000 00000000725 13505462014 020775 0ustar00sandwellwheel000000 000000 include ../../config.mk # # make all the files # DIRS = lib src_swath src_tops src_orbit src_stitch src_spec_div src_assembly all: $(LN_S) -f ../S1A_preproc/include include $(LN_S) -f ../S1A_preproc/lib lib for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done uninstall: (cd src; $(MAKE) uninstall) clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done spotless: clean GMTSAR_V5.7/preproc/S1A_preproc/include/000755 015705 000000 00000000000 13507242215 020755 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/S1A_preproc/src_swath/000755 015705 000000 00000000000 13507242234 021330 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/S1A_preproc/src_orbit/000755 015705 000000 00000000000 13507242234 021321 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/S1A_preproc/src_spec_div/000755 015705 000000 00000000000 13507242234 021776 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/S1A_preproc/lib/000755 015705 000000 00000000000 13507242234 020101 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/S1A_preproc/src_tops/000755 015705 000000 00000000000 13507242234 021167 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/S1A_preproc/src_tops/Makefile000644 015705 000000 00000001067 13505462014 022631 0ustar00sandwellwheel000000 000000 include ../../../config.mk INCLUDES = -I../include -I$(GMTSARHOME)/gmtsar -I$(TIFF_INC) $(GMT_INC) CLIBS = -L../lib -lxmlC $(GMTSAR) $(GMT_LIB) $(LALIBS) -L$(TIFF_LIB) -ltiff -lm make_s1a_tops: make_s1a_tops.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ make_s1a_tops.o $(CLIBS) make_s1a_tops_6par: make_s1a_tops_6par.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ make_s1a_tops_6par.o $(CLIBS) all: make_s1a_tops make_s1a_tops_6par install: $(INSTALL) make_s1a_tops $(bindir) $(INSTALL) make_s1a_tops_6par $(bindir) clean: rm -f *.o make_s1a_tops make_s1a_tops_6par tags core GMTSAR_V5.7/preproc/S1A_preproc/src_tops/make_s1a_tops.c000644 015705 000000 00000131413 13505462014 024062 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU and David Sandwell * * (Scripps Institution of Oceanography) * * Date : 02/01/2016 * ***************************************************************************/ /*************************************************************************** * Adapted from previous make_slc_s1a_tops code, start with point-by-point * * precise shift for aligning two images * * * * 01/28/16 EXU added resampling module to do point-by-point co-registr * * 01/30/16 EXU added grid reading part to read in shift LUT * * 02/08/16 EXU added burst shift to take account conditions images have * * a few bursts offset (not used now) * * 02/17/16 EXU modified outputing SLCH SLCL, added BB file, for ESD use * * 03/15/16 EXU modified dramp-dmod to read in correct parameters, fnc etc.* * 04/05/16 EXU added elevation antenna pattern for early version * * * ***************************************************************************/ /*************************************************************************** * Modification history of previous make_slc_s1a_tops code: * * * * Date : 08/21/15 DTS begin modification for precision shifting * * Date : 10/24/15 DTS Added the deramp and reramp * * Date : 12/29/15 DTS added 3-parameter phase shift and reramp * * Date : 01/14/16 EXU added range stretch and line interpolator * * * ***************************************************************************/ #include "PRM.h" #include "ctype.h" #include "gmtsar.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include "tiffio.h" #include #include #include #include #define max(a, b) (((a) > (b)) ? (a) : (b)) typedef struct burst_bounds { int SL; int SC; int SH; int EL; int EC; int EH; } burst_bounds; int pop_led(struct tree *, struct state_vector *); int write_orb(struct state_vector *sv, FILE *fp, int); int pop_burst(struct PRM *, struct tree *, struct burst_bounds *, char *, char *); double dramp_dmod(struct tree *, int, fcomplex *, int, int, int, struct GMT_GRID *, struct GMT_GRID *, int, int); double shift_write_slc(void *, struct PRM *, struct tree *, burst_bounds *, int, TIFF *, FILE *, FILE *, FILE *, char *, char *); int shift_burst(fcomplex *, fcomplex *, int, int, int, struct GMT_GRID *, struct GMT_GRID *, int); int compute_eap(fcomplex *, struct tree *, int); void fbisinc(double *, fcomplex *, int, int, fcomplex *); int get_words(char *); char *USAGE = "\nUsage: make_slc_s1a_tops xml_file tiff_file output mode dr.grd da.grd\n" " xml_file - name of xml file \n" " tiff_file - name of tiff file \n" " output - stem name of output files .PRM, .LED, .SLC \n" " mode - (0) no SLC; (1) center SLC; (2) high SLCH and low " "SLCL \n" " dr.grd - range shift table to be read in \n" " da.grd - azimuth shift table to be read in \n" "\nExample: make_slc_s1a_tops s1a-s1-slc-vv-20140807.xml " "s1a-s1-slc-vv-20140807.tiff S1A20140807 1 dr.grd da.grd\n" "\n make_slc_s1a_tops s1a-s1-slc-vv-20140807.xml " "s1a-s1-slc-vv-20140807.tiff S1A20140807 1\n" "\nOutput: mode 1: S1A20140807.PRM S1A20140807.LED S1A20140807.SLC\n" "\n mode 2: S1A20140807.PRM S1A20140807.LED S1A20140807.SLCH " "S1A20140807.SLCL S1A20140807.BB\n" "\nNote: if dr and da are not given, SLCs will be written with no shifts.\n" "\n s1a-aux.xml and manifest.safe(exclude the first line) should be " "concatenated to the xml_file for \n" "\n acquisitions acquired before Mar 2015 (IPF version change). If " "not concatenated or IPF version is 2.43+, \n" "\n elevation antenna pattern correction(EAP) will not be applied\n"; int main(int argc, char **argv) { FILE *XML_FILE, *OUTPUT_PRM, *OUTPUT_LED; FILE *OUTPUT_SLCL = NULL, *OUTPUT_SLCC = NULL, *OUTPUT_SLCH = NULL, *BB = NULL; TIFF *TIFF_FILE; char tmp_str[200], rshifts[200], ashifts[200]; struct PRM prm; struct tree *xml_tree; struct state_vector sv[400]; struct burst_bounds bb[200]; int ch, n = 0, nc = 0, nlmx = 0, imode = 0; double spec_sep = 0.0, dta = 0.0; // Begin: Initializing new GMT session void *API = NULL; // GMT API control structure if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; if (argc == 5) { rshifts[0] = '\0'; ashifts[0] = '\0'; } else if (argc == 7) { strcpy(rshifts, argv[5]); strcpy(ashifts, argv[6]); } else { die(USAGE, ""); } null_MEM_STR(); imode = atoi(argv[4]); // find the number of lines and the maximum line length of the xml file if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } fclose(XML_FILE); printf("Reading in %d lines of info from XML...\n", n); xml_tree = (struct tree *)malloc(n * 5 * sizeof(struct tree)); // generate the xml tree if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_tree(XML_FILE, xml_tree, 1); fclose(XML_FILE); // show_tree(xml_tree,0,0); // generate the LED file n = pop_led(xml_tree, sv); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // initiate the prm null_sio_struct(&prm); // analyze the burst and generate the PRM pop_burst(&prm, xml_tree, bb, argv[3], argv[2]); // open the TIFF file and the three SLC files SLCL-low SLCC-center and // SLCH-high TIFFSetWarningHandler(NULL); if ((TIFF_FILE = TIFFOpen(argv[2], "rb")) == NULL) die("Couldn't open tiff file: \n", argv[2]); // open output files depending on the imode imode = atoi(argv[4]); if (imode == 1) { strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLCC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(C) file: \n", tmp_str); } else if (imode == 2) { strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLCL"); if ((OUTPUT_SLCL = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(L) file: \n", tmp_str); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLCH"); if ((OUTPUT_SLCH = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(H) file: \n", tmp_str); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".BB"); if ((BB = fopen(tmp_str, "w")) == NULL) die("Couldn't open burst boundary file: \n", tmp_str); } else { // don't open any files } /* apply range and azimuth shifts to each burst and write the three SLC files * SLCL SLC and SLCH depending on imode */ if (imode == 1 || imode == 2) { spec_sep = shift_write_slc(API, &prm, xml_tree, bb, imode, TIFF_FILE, OUTPUT_SLCL, OUTPUT_SLCC, OUTPUT_SLCH, rshifts, ashifts); } /* shift applied */ // write the boundary file if mode == 2 if (imode == 2) { search_tree(xml_tree, "/product/swathTiming/burstList/", tmp_str, 3, 0, 1); nc = (int)str2double(tmp_str); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_str, 1, 0, 1); dta = str2double(tmp_str); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfSamples/", tmp_str, 1, 0, 1); fprintf(BB, "%d %d %.6f %.12f\n", nc, (int)str2double(tmp_str) - (int)str2double(tmp_str) % 4, spec_sep, dta); for (n = 1; n <= nc; n++) { fprintf(BB, "%d %d %d %d %d %d\n", bb[n].SL, bb[n].SC, bb[n].SH, bb[n].EL, bb[n].EC, bb[n].EH); } } TIFFClose(TIFF_FILE); if (imode == 2) fclose(OUTPUT_SLCL); if (imode == 1) fclose(OUTPUT_SLCC); if (imode == 2) fclose(OUTPUT_SLCH); if (imode == 2) fclose(BB); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); free(xml_tree); if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } int pop_led(tree *xml_tree, state_vector *sv) { int i, count; char tmp_c[200]; double tmp_d; search_tree(xml_tree, "/product/generalAnnotation/orbitList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); for (i = 0; i < count; i++) { search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 2, 4, i + 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 1, 4, i + 1); tmp_c[4] = '\0'; sv[i].yr = (int)(str2double(tmp_c)); sv[i].jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); sv[i].sec = (tmp_d - trunc(tmp_d)) * 86400; search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/x/", tmp_c, 1, 4, i + 1); sv[i].x = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/y/", tmp_c, 1, 4, i + 1); sv[i].y = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/z/", tmp_c, 1, 4, i + 1); sv[i].z = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, i + 1); sv[i].vx = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, i + 1); sv[i].vy = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, i + 1); sv[i].vz = str2double(tmp_c); } printf("Writing %d lines for orbit...\n", count); return (count); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 100.0) / 100.0 - trunc((sv[0].sec) * 100.0) / 100.0; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.6lf %lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_burst(struct PRM *prm, tree *xml_tree, struct burst_bounds *bb, char *file_name, char *tiff_name) { char tmp_c[200], tmp_cc[60000]; double tmp_d, dt, t[100]; int i, j, k, nl = 0, nlf, ntl = 0, count, lpb, tmp_i, flag, flag0; int k_start = 0, kC; int *kF, *ksa, *ksr, *kea, *ker, *kover; double t0 = -1., time; char *cflag, *cflag_orig; int first_samp = 1; int lines_this_burst = 0; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/numberOfLooks/", tmp_c, 1, 0, 1); prm->nlooks = (int)str2double(tmp_c); prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; strasign(prm->dtype, "a", 0, 0); search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_c, 1, 0, 1); prm->fs = str2double(tmp_c); // rng_samp_rate prm->SC_identity = 10; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ search_tree(xml_tree, "/product/generalAnnotation/productInformation/radarFrequency/", tmp_c, 1, 0, 1); prm->lambda = SOL / str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/downlinkInformationList/" "downlinkInformation/downlinkValues/txPulseLength/", tmp_c, 1, 0, 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/lookBandwidth/", tmp_c, 1, 0, 1); prm->chirp_slope = str2double(tmp_c) / tmp_d; prm->pulsedur = tmp_d; search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/re/", tmp_c, 1, 0, 1); // prm->xmi = str2double(tmp_c); //I_mean prm->xmi = 0.0; // I_mean search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/im/", tmp_c, 1, 0, 1); // prm->xmq = str2double(tmp_c); //Q_mean prm->xmq = 0.0; // Q_mean search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dt = str2double(tmp_c); prm->prf = 1 / dt; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_c, 1, 0, 1); /* subtract a correction of 1 * drange to the near range based on Pinon corner * reflector analysis DTS 09/24/18 */ prm->near_range = (str2double(tmp_c) - 1. / prm->fs) * SOL / 2; prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius search_tree(xml_tree, "/product/generalAnnotation/productInformation/pass/", tmp_c, 1, 0, 1); strasign(prm->orbdir, tmp_c, 0, 0); strasign(prm->lookdir, "R", 0, 0); strcpy(tmp_c, tiff_name); //strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfSamples/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c) - (int)str2double(tmp_c) % 4; prm->bytes_per_line = tmp_i * 4; prm->good_bytes = prm->bytes_per_line; prm->num_rng_bins = prm->bytes_per_line / 4; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig prm->az_res = 0.0; // prm->antenna_side = -1; prm->fdd1 = 0.0; prm->fddd1 = 0.0; // manipulate the lines search_tree(xml_tree, "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); // count = 1; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfLines/", tmp_c, 1, 0, 1); ntl = (int)str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/linesPerBurst/", tmp_c, 1, 0, 1); lpb = (int)str2double(tmp_c); nlf = count * lpb; // allocate some memory kF = (int *)malloc(nlf * sizeof(int)); ksa = (int *)malloc((count + 1) * sizeof(int)); ksr = (int *)malloc((count + 1) * sizeof(int)); kea = (int *)malloc((count + 1) * sizeof(int)); ker = (int *)malloc((count + 1) * sizeof(int)); kover = (int *)malloc((count + 1) * sizeof(int)); cflag_orig = (char *)malloc(sizeof(char) * 80 * (lpb + 1)); cflag = cflag_orig; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/productFirstLineUtcTime/", tmp_c, 2, 0, 1); prm->clock_start = str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/productFirstLineUtcTime/", tmp_c, 1, 0, 1); tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(tmp_c); k = 0; flag0 = -1; for (i = 1; i <= count; i++) { search_tree(xml_tree, "/product/swathTiming/burstList/burst/azimuthAnxTime/", tmp_c, 1, 4, i); t[i] = str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/burstList/burst/firstValidSample/", tmp_cc, 1, 4, i); lines_this_burst = get_words(tmp_cc); strcpy(cflag, tmp_cc); for (j = 0; j < lines_this_burst; j++) { flag = (int)strtol(cflag, &cflag, 10); first_samp = max(first_samp, flag); time = t[i] + (double)j / prm->prf; kF[k] = -1; // don't use flagged data if (flag >= 0) { if (t0 < 0.) { t0 = time; k_start = k; } // the kF array uniquely maps the line on the input file into the SLC // line on output kF[k] = (int)((time - t0) * prm->prf + .1); nl = kF[k]; } // calculate the start and end index for each burst if (flag > flag0) { ksa[i] = kF[k]; ksr[i] = j; } if (flag < flag0) { kea[i] = kF[k - 1]; ker[i] = j - 1; } flag0 = flag; k++; } } prm->first_sample = first_samp; // calculate the burst overlap. The first one is zero. kover[0] = 0; for (i = 1; i <= count; i++) { kover[i] = 0; if (i < count) kover[i] = kea[i] - ksa[i + 1] + 1; } // calculate the approximate center shift kC = kover[1] / 2; // calculate the relative start S and end E lines for each burst in the L and // H configurations for (i = 1; i <= count; i++) { bb[i].SL = ksr[i]; bb[i].SH = ksr[i] + kover[i - 1]; bb[i].EL = ker[i] - kover[i]; bb[i].EH = ker[i]; } // make the center start end locations for (i = 1; i < count; i++) { bb[i].EC = bb[i].EL + kC; bb[i + 1].SC = bb[i + 1].SL + kC; } bb[1].SC = bb[1].SL; bb[count].EC = bb[i].EL; // make sure the number of lines is divisible by 4 prm->num_lines = nl - nl % 4; // advance the start time to account for the zero lines at the start of the // first burst prm->SC_clock_start = prm->SC_clock_start + (double)(k_start) / prm->prf / 86400.; prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_start = prm->clock_start + (double)(k_start) / prm->prf / 86400.; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->chirp_ext = 0; free(kF); free(ksa); free(ksr); free(kea); free(ker); free(kover); free(cflag_orig); return (1); } double dramp_dmod(struct tree *xml_tree, int nb, fcomplex *cramp, int lpb, int width, int al_start, struct GMT_GRID *R, struct GMT_GRID *A, int bshift, int imode) { /* this is a routine to apply an azimuth shift to a burst of TOPS data */ int ii, jj, k; char tmp_c[200]; double kpsi, fc, dta, dts = 0., ts0, tau0, vx, vy, vz; double ks, vtot, ka, taus, phase, pramp, pmod; double fnc[3], fka[3]; double *eta, *etaref, *kt, *fnct; double t_brst, t1 = 0., t2 = 0.; double dr, da; double sum_spec_sep = 0.0; // get all the parameters needed for the remod_deramp // find the constant parameters search_tree(xml_tree, "/product/generalAnnotation/productInformation/radarFrequency/", tmp_c, 1, 0, 1); fc = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/productInformation/azimuthSteeringRate/", tmp_c, 1, 0, 1); kpsi = PI * str2double(tmp_c) / 180.; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dta = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_c, 1, 0, 1); if (str2double(tmp_c) != 0.) dts = 1. / str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_c, 1, 0, 1); ts0 = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/t0/", tmp_c, 1, 0, 1); tau0 = str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 2, 4, nb); t_brst = str2double(tmp_c) + dta * (double)lpb / 2.0 / 86400.0; // first find the parameters that depends on burst, find the neareast one. search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/dcEstimate/azimuthTime/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } if (t_brst - t1 < t2 - t_brst) jj = ii - 1; else jj = ii; // fprintf(stderr,"finding the %d DcPolynomial\n",jj); search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/dcEstimate/dataDcPolynomial/", tmp_c, 1, 4, jj); str2dbs(fnc, tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/" "azimuthTime/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } if (t_brst - t1 < t2 - t_brst) jj = ii - 1; else jj = ii; // fprintf(stderr,"finding the %d AziFmRate\n",jj); ii = search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/t0/", tmp_c, 1, 0, 1); if (xml_tree[xml_tree[ii].sibr].sibr < 0) { search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/" "azimuthFmRatePolynomial/", tmp_c, 1, 4, jj); str2dbs(fka, tmp_c); } else { search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c0/", tmp_c, 1, 4, jj); fka[0] = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c1/", tmp_c, 1, 4, jj); fka[1] = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c2/", tmp_c, 1, 4, jj); fka[2] = str2double(tmp_c); } // find the velocity by linearly interpolating between 2 neareast point search_tree(xml_tree, "/product/generalAnnotation/orbitList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, ii - 1); vx = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, ii); vx = (str2double(tmp_c) * (t2 - t_brst) + vx * (t_brst - t1)) / (t2 - t1); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, ii - 1); vy = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, ii); vy = (str2double(tmp_c) * (t2 - t_brst) + vy * (t_brst - t1)) / (t2 - t1); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, ii - 1); vz = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, ii); vz = (str2double(tmp_c) * (t2 - t_brst) + vz * (t_brst - t1)) / (t2 - t1); // malloc the memory eta = (double *)malloc(lpb * sizeof(double)); etaref = (double *)malloc(width * sizeof(double)); kt = (double *)malloc(width * sizeof(double)); fnct = (double *)malloc(width * sizeof(double)); // compute velocity and then Doppler rate vtot = sqrt(vx * vx + vy * vy + vz * vz); ks = 2. * vtot * fc * kpsi / SOL; if (imode == 0) { for (ii = 0; ii < lpb; ii++) { eta[ii] = ((double)ii - (double)lpb / 2. + .5) * dta; } for (jj = 0; jj < width; jj++) { // This is silly because ts0 = tau0 in the test I did taus = ts0 + ((double)jj) * dts - tau0; ka = fka[0] + fka[1] * taus + fka[2] * taus * taus; kt[jj] = ka * ks / (ka - ks); fnct[jj] = fnc[0] + fnc[1] * taus + fnc[2] * taus * taus; etaref[jj] = -fnct[jj] / ka + fnc[0] / fka[0]; } for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; pramp = -M_PI * kt[jj] * pow((eta[ii] - etaref[jj]), 2); pmod = -2. * M_PI * fnct[jj] * eta[ii]; phase = pramp + pmod; cramp[k] = Cexp(phase); } } } else if (imode == 1) { for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; if (floor((al_start + ii) / R->header->inc[GMT_Y] + 0.5) < 0 || (int)floor((al_start + ii) / R->header->inc[GMT_Y] + 0.5) >= R->header->ny) { cramp[k].r = 1; cramp[k].i = 0; } else { dr = R->data[(int)(jj / R->header->inc[GMT_X] + 0.5) + R->header->nx * (int)((al_start + ii) / R->header->inc[GMT_Y] + 0.5)]; da = A->data[(int)(jj / A->header->inc[GMT_X] + 0.5) + A->header->nx * (int)((al_start + ii) / A->header->inc[GMT_Y] + 0.5)] - (double)bshift; eta[0] = ((double)ii - (double)lpb / 2. + .5 + da) * dta; taus = ts0 + ((double)jj + dr) * dts - tau0; ka = fka[0] + fka[1] * taus + fka[2] * taus * taus; kt[0] = ka * ks / (ka - ks); fnct[0] = fnc[0] + fnc[1] * taus + fnc[2] * taus * taus; etaref[0] = -fnct[0] / ka + fnc[0] / fka[0]; pramp = -M_PI * kt[0] * pow((eta[0] - etaref[0]), 2); pmod = -2. * M_PI * fnct[0] * eta[0]; phase = pramp + pmod; cramp[k] = Cexp(phase); } } } } else if (imode == 2) { for (jj = 0; jj < width; jj++) { taus = ts0 + ((double)jj) * dts - tau0; ka = fka[0] + fka[1] * taus + fka[2] * taus * taus; kt[jj] = ka * ks / (ka - ks); } for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { sum_spec_sep += kt[jj]; } } } return (sum_spec_sep); } double shift_write_slc(void *API, struct PRM *prm, struct tree *xml_tree, struct burst_bounds *bb, int imode, TIFF *tif, FILE *slcl, FILE *slcc, FILE *slch, char *dr_table, char *da_table) { uint16 s = 0; uint16 *buf; uint32 it; short *tmp, *brst; float *rtmp; int ii, jj, nl, k, k2, kk; int count, lpb, nlf, width2, nclip = 0; uint32 width, height, widthi; char tmp_c[200]; fcomplex *cbrst, *cramp; float rtest, itest; int al_start = 0, cl; int bshift = 0; double sum_spec_sep = 0.0, spec_sep = 0.0, dta; struct GMT_GRID *R = NULL, *A = NULL; if (dr_table[0] != '\0' && da_table[0] != '\0') { fprintf(stderr, "Reading in range and azimuth shifts table...\n"); if ((R = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, dr_table, NULL)) == NULL) die("cannot open range shift tables", dr_table); if ((A = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, da_table, NULL)) == NULL) die("cannot open azimuth shift tables", dr_table); if (R->header->inc[GMT_X] != A->header->inc[GMT_X]) die("shift table size does not match", ""); if (R->header->inc[GMT_Y] != A->header->inc[GMT_Y]) die("shift table size does not match", ""); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, dr_table, R) == NULL) return EXIT_FAILURE; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, da_table, A) == NULL) return EXIT_FAILURE; } // get the burst information and compare with the TIFF file search_tree(xml_tree, "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/linesPerBurst/", tmp_c, 1, 4, 0); lpb = (int)str2double(tmp_c); nlf = count * lpb; // get the width the file and make width divisible by 4 TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &widthi); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); width = widthi - widthi % 4; width2 = 2 * width; if (nlf != height) { fprintf(stderr, "XML and TIFF file disagree on image height %d %d \n", nlf, height); } // allocate memory for the burst and other arrays brst = (short *)malloc(lpb * width2 * sizeof(short)); cbrst = (fcomplex *)malloc(lpb * width * sizeof(fcomplex)); cramp = (fcomplex *)malloc(lpb * width * sizeof(fcomplex)); buf = (uint16 *)_TIFFmalloc(TIFFScanlineSize(tif)); tmp = (short *)malloc(width * 2 * sizeof(short)); rtmp = (float *)malloc(width * 2 * sizeof(float)); nl = prm->num_lines; if (imode == 1) printf("Writing SLC..Image Size: %d X %d...\n", width, nl); else if (imode == 2) printf("Writing SLCL & SLCH..\n"); it = 0; // fix the shift when there are burst with no overlap cl = 0; if (dr_table[0] != '\0' && da_table[0] != '\0') { for (kk = 1; kk <= count; kk++) { cl = cl + (bb[kk].EL - bb[kk].SL + 1); // fprintf(stderr,"SC:%d, EC:%d, SH:%d, EH:%d, SL:%d, // EL:%d\n",bb[kk].SC,bb[kk].EC,bb[kk].SH,bb[kk].EH,bb[kk].SL,bb[kk].EL); if (floor(A->data[0] / (double)cl + 0.2) == 1) { bshift = cl; fprintf(stderr, "Image has %d bursts mismatch...making corrections to azimuth " "shifts (%d)...\n", kk, bshift); } else if (ceil(A->data[0] / (double)cl - 0.2) == -1) { bshift = -cl; fprintf(stderr, "Image has %d bursts mismatch...making corrections to azimuth " "shifts (%d)...\n", kk, bshift); } } if (bshift != 0) { prm->ashift = bshift; fprintf(stderr, "Updated ashift is %d\n", bshift); } cl = 0; } fprintf(stderr, "Working on burst "); // loop over the bursts for (kk = 1; kk <= count; kk++) { fprintf(stderr, " #%d", kk); if (imode == 2) { sum_spec_sep = dramp_dmod(xml_tree, kk, cramp, lpb, width, al_start, R, A, bshift, 2); spec_sep += sum_spec_sep; } // read a burst into memory for (ii = 0; ii < lpb; ii++) { TIFFReadScanline(tif, buf, it, s); for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; brst[k] = (short)buf[jj]; } it++; } // load the burst into a complex float array for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; k2 = ii * width2 + jj * 2; cbrst[k].r = (float)brst[k2]; cbrst[k].i = (float)brst[k2 + 1]; } } // do not shift anything if dr and da is not given if (dr_table[0] != '\0' && da_table[0] != '\0') { // complute the complex deramp_demod array for each burst with no shift al_start = cl - bb[kk].SC; // generate the dramp_dmod dramp_dmod(xml_tree, kk, cramp, lpb, width, al_start, R, A, bshift, 0); // apply the dramp_dmod for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cbrst[k] = Cmul(cbrst[k], cramp[k]); } } // split_spectrum here // shift the burst with the given table, cramp is just some available // memory to use shift_burst(cbrst, cramp, al_start, lpb, width, R, A, bshift); // regenerate the shifted dramp_dmod dramp_dmod(xml_tree, kk, cramp, lpb, width, al_start, R, A, bshift, 1); // reramp the slc for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cramp[k].i = -cramp[k].i; cbrst[k] = Cmul(cbrst[k], cramp[k]); } } } // compute the elevation antenna pattern (EAP) change if ipf version is 2.36 // and aux_file and manifest file are concatenated to xml ii = search_tree(xml_tree, "/product/", tmp_c, 1, 0, 1); // printf("Hahahaha...%d,%d\n",ii,xml_tree[ii].sib); if (xml_tree[ii].sibr != -1) { jj = 1; // search_tree(xml_tree,"/xfdu:XFDU/metadataSection/metadataObject/metadataWrap/xmlData/safe:processing/safe:facility/safe:software/",tmp_c,3,3,12); ii = search_tree(xml_tree, "/xfdu:XFDU/metadataSection/metadataObject/", tmp_c, 1, 3, jj); // while(strncmp(xml_tree[ii].name,"metadataWrap",12) != 0 || // strncmp(xml_tree[xml_tree[ii].firstchild].name,"xmlData",7) != 0 || // strncmp(xml_tree[xml_tree[xml_tree[ii].firstchild].firstchild].name,"safe:processing",15) // != 0) { while (strncmp(&xml_tree[ii].name[19], "processing", 10) != 0) { jj++; ii = search_tree(xml_tree, "/xfdu:XFDU/metadataSection/metadataObject/", tmp_c, 1, 3, jj); if (ii == -1) break; // if(jj==21) // printf("%s\n%s\n%s\n",xml_tree[ii].name,xml_tree[xml_tree[ii].firstchild].name,xml_tree[xml_tree[xml_tree[ii].firstchild].firstchild].name) } // printf("find %d\n",jj); search_tree(xml_tree, "/xfdu:XFDU/metadataSection/metadataObject/metadataWrap/" "xmlData/safe:processing/safe:facility/safe:software/", tmp_c, 3, 3, jj); if (strncmp(&tmp_c[strlen(tmp_c) - 3], "236", 3) == 0) { fprintf(stderr, "(EAP)"); // printf("Making elevation antenna pattern correction\n"); compute_eap(cramp, xml_tree, kk); for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cramp[k].i = -cramp[k].i; cbrst[k] = Cmul(cbrst[k], cramp[k]); } } } } // printf("Hahahaha...\n"); // unload the float complex array into a short burst array, multiply by 2 // and clip if needed for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; k2 = ii * width2 + jj * 2; rtest = 2. * cbrst[k].r; itest = 2. * cbrst[k].i; brst[k2] = (short)clipi2(rtest); brst[k2 + 1] = (short)clipi2(itest); if ((int)(rtest) > I2MAX || (int)(itest) > I2MAX) { nclip++; } } } // write the burst in L, C, and H configurations for (ii = 0; ii < lpb; ii++) { // write low if (kk > 1 && ii >= bb[kk].SL && ii <= bb[kk].SH - 1) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 2) fwrite(tmp, sizeof(short), width * 2, slcl); } // write center if (ii >= bb[kk].SC && ii <= bb[kk].EC) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 1) fwrite(tmp, sizeof(short), width * 2, slcc); cl++; } // write high if (kk < count && ii >= bb[kk].EL + 1 && ii <= bb[kk].EH) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 2) fwrite(tmp, sizeof(short), width * 2, slch); } } } fprintf(stderr, "\n"); if (imode == 2) { search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dta = str2double(tmp_c); spec_sep = spec_sep * dta / count / width; } fprintf(stderr, "number of points clipped to short int %d \n", nclip); _TIFFfree(buf); free(brst); free(cbrst); free(cramp); free(tmp); free(rtmp); return (spec_sep); } int compute_eap(fcomplex *cramp, tree *xml_tree, int nb) { // // mode 1=S1_HH, 2=S1_HV, 3=S1_VV, 4=S1_VH, 5=S2_HH, 6=S2_HV, 7=S2_VV, // 8=S2_VH, // 9=S3_HH, 10=S3_HV, 11=S3_VV, 12=S3_VH, // char tmp_str[200], *str; int n = 0, srtcount; int ii, jj, n_samples, lpb, mode; double fs, dta, tau0, *tau_sub, *theta_sub, anx_time, *tau; double *Geap, dtheta, t_brst, t1 = 0, t2, theta_offnadir, *theta_eap, height, *theta, *p_corr; double H[5], Torb, Worb, phi[5], real, imag; // get some of the parameters needed for computation search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfSamples/", tmp_str, 1, 0, 1); n_samples = (int)str2double(tmp_str); n_samples = n_samples - n_samples % 4; search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_str, 1, 0, 1); fs = str2double(tmp_str); search_tree(xml_tree, "/product/swathTiming/linesPerBurst/", tmp_str, 1, 4, 0); lpb = (int)str2double(tmp_str); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_str, 1, 0, 1); dta = str2double(tmp_str); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_str, 1, 0, 1); tau0 = str2double(tmp_str); // find the correct one to be read in search_tree(xml_tree, "/product/swathTiming/burstList/burst/azimuthTime/", tmp_str, 2, 4, nb); t_brst = str2double(tmp_str) + dta * (double)lpb / 2.0 / 86400.0; search_tree(xml_tree, "/product/antennaPattern/antennaPatternList/", tmp_str, 3, 0, 1); jj = (int)str2double(tmp_str); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/antennaPattern/antennaPatternList/antennaPattern/" "azimuthTime/", tmp_str, 2, 4, ii); t2 = str2double(tmp_str); } if (t_brst - t1 < t2 - t_brst) jj = ii - 1; else jj = ii; // readin parameters from data xml search_tree(xml_tree, "/product/antennaPattern/antennaPatternList/antennaPattern/" "slantRangeTime/", tmp_str, 3, 4, jj); srtcount = (int)str2double(tmp_str); str = (char *)malloc(200 * srtcount * sizeof(char)); tau_sub = (double *)malloc(srtcount * sizeof(double)); search_tree(xml_tree, "/product/antennaPattern/antennaPatternList/antennaPattern/" "slantRangeTime/", str, 1, 4, jj); str2dbs(tau_sub, str); theta_sub = (double *)malloc(srtcount * sizeof(double)); search_tree(xml_tree, "/product/antennaPattern/antennaPatternList/antennaPattern/" "elevationAngle/", str, 1, 4, jj); str2dbs(theta_sub, str); // determine which antenna pattern to read in in the aux file mode = 0; search_tree(xml_tree, "/product/adsHeader/imageNumber/", tmp_str, 1, 0, 1); ii = (int)str2double(tmp_str); mode = mode + (ii - 1) * 4; search_tree(xml_tree, "/product/adsHeader/polarisation/", tmp_str, 1, 0, 1); if (tmp_str[0] - 'H' == 0 && tmp_str[1] - 'H' == 0) mode = mode + 1; else if (tmp_str[0] - 'H' == 0 && tmp_str[1] - 'V' == 0) mode = mode + 2; else if (tmp_str[0] - 'V' == 0 && tmp_str[1] - 'V' == 0) mode = mode + 3; else if (tmp_str[0] - 'V' == 0 && tmp_str[1] - 'H' == 0) mode = mode + 4; mode = mode + 24; // printf("Reading in antenna pattern %d (%s IW%d)...\n",mode,tmp_str,ii); // read in parameters from aux xml search_tree(xml_tree, "/auxiliaryCalibration/calibrationParamsList/calibrationParams/" "elevationAntennaPattern/values/", tmp_str, 3, 3, mode); n = (int)str2double(tmp_str); Geap = (double *)malloc(n * 2 * sizeof(double)); theta_eap = (double *)malloc(n * sizeof(double)); tau = (double *)malloc(n_samples * sizeof(double)); theta = (double *)malloc(n_samples * sizeof(double)); p_corr = (double *)malloc(n_samples * sizeof(double)); search_tree(xml_tree, "/auxiliaryCalibration/calibrationParamsList/calibrationParams/" "elevationAntennaPattern/values/", str, 1, 3, mode); str2dbs(Geap, str); search_tree(xml_tree, "/auxiliaryCalibration/calibrationParamsList/calibrationParams/" "elevationAntennaPattern/elevationAngleIncrement/", tmp_str, 1, 3, mode); dtheta = str2double(tmp_str); // search_tree(xml_tree,"/xfdu:XFDU/metadataSection/metadataObject/metadataWrap/xmlData/safe:orbitReference/safe:extension/s1:orbitProperties/s1:ascendingNodeTime/",tmp_str,2,3,14); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/ascendingNodeTime/", tmp_str, 2, 1, 1); anx_time = (str2double(tmp_str) - (int)str2double(tmp_str)) * 86400.0; t_brst = (t_brst - (int)t_brst) * 86400.0; // compute the satellite altitude and roll steering H[0] = 707714.8; H[1] = 8351.5; H[2] = 8947.0; H[3] = 23.32; H[4] = 11.74; phi[1] = 3.1495; phi[2] = -1.5655; phi[3] = -3.1297; phi[4] = 4.7222; Torb = 12.0 * 24.0 * 60.0 * 60.0 / 175.0; Worb = 2.0 * M_PI / Torb; t1 = t_brst - anx_time; height = H[0] + H[1] * sin(Worb * t1 + phi[1]) + H[2] * sin(Worb * 2.0 * t1 + phi[2]) + H[3] * sin(Worb * 3.0 * t1 + phi[3]) + H[4] * sin(Worb * 4.0 * t1 + phi[4]); theta_offnadir = 29.450 - 0.0566 * (height / 1000.0 - 711.7); for (ii = 0; ii < n; ii++) theta_eap[ii] = (-(n - 1) / 2 + ii) * dtheta + theta_offnadir; // compute the elevation antenna pattern for (ii = 0; ii < n_samples; ii++) tau[ii] = tau0 + (double)(ii - 1) / fs; jj = 0; // printf("%f,%f,%f,%f\n",t_brst-anx_time,dtheta,height,theta_offnadir); while (tau_sub[jj] < tau0) jj++; for (ii = 0; ii < n_samples; ii++) { while (tau_sub[jj] < tau[ii]) jj++; if (jj < 1 || jj > srtcount) { // fprintf(stderr,"\ntheta: %d %d %e %e // %d\n",jj,srtcount,tau0,tau[ii],ii); die("elevationAngle table size not // match slantRangeTime table size",""); theta[ii] = 0.0; } else { theta[ii] = ((tau[ii] - tau_sub[jj - 1]) * theta_sub[jj - 1] + (tau_sub[jj] - tau[ii]) * theta_sub[jj]) / (tau_sub[jj] - tau_sub[jj - 1]); } } // printf("%d ",jj); jj = 0; while (theta_eap[jj] < theta[0]) jj++; // printf("%d ",jj); for (ii = 0; ii < n_samples; ii++) { while (theta_eap[jj] < theta[ii]) jj++; if (jj < 1 || jj > srtcount) { // fprintf(stderr,"p_corr: %d %d",jj,srtcount); // die("elevationAngle table size not match slantRangeTime table // size",""); p_corr[ii] = 0.0; } else { real = (Geap[(jj - 1) * 2] * (theta[ii] - theta_eap[jj - 1]) + Geap[jj * 2] * (theta_eap[jj] - theta[ii])) / dtheta; imag = (Geap[(jj - 1) * 2 + 1] * (theta[ii] - theta_eap[jj - 1]) + Geap[jj * 2 + 1] * (theta_eap[jj] - theta[ii])) / dtheta; p_corr[ii] = atan2(imag, real); } } // printf("%d \n",jj); /* if(nb == 1) { for(jj=0;jjheader->inc[GMT_X]; incy = R->header->inc[GMT_Y]; for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cbrst2[k].r = cbrst[k].r; cbrst2[k].i = cbrst[k].i; } } for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; if (floor((al_start + ii) / incy + 0.5) < 0 || (int)floor((al_start + ii) / incy + 0.5) >= R->header->ny) { cbrst[k].r = 0; cbrst[k].i = 0; } else { kr = (int)floor(jj / incx + 0.5) + R->header->nx * (int)floor((al_start + ii) / incy + 0.5); ka = (int)floor(jj / incx + 0.5) + A->header->nx * (int)floor((al_start + ii) / incy + 0.5); ras[0] = (double)jj + R->data[kr]; ras[1] = (double)ii + A->data[ka] - (double)bshift; fbisinc(ras, cbrst2, lpb, width, &cbrst[k]); } } } return (1); } void sinc_one(double *, double *, double, double, double *); void fbisinc(double *ras, fcomplex *s_in, int ydims, int xdims, fcomplex *sout) { double dr, da, ns2 = NS / 2 - 1; double rdata[NS * NS], idata[NS * NS], cz[2]; int i, j, k, kk; int i0, j0; int nclip; /* compute the residual offsets */ nclip = 0; j0 = (int)floor(ras[0]); i0 = (int)floor(ras[1]); dr = ras[0] - (double)j0; da = ras[1] - (double)i0; if (dr < 0. || dr > 1. || da < 0. || da > 1) fprintf(stderr, " dr or da out of bounds %f %f \n", dr, da); /* make sure all 4 corners are within the bounds of the slave array */ if ((i0 - ns2) < 0 || (i0 + ns2 + 1) >= ydims || (j0 - ns2) < 0 || (j0 + ns2 + 1) >= xdims) { sout->r = 0; sout->i = 0; } else { /* safe to do the interpolation */ for (i = 0; i < NS; i++) { for (j = 0; j < NS; j++) { k = i * NS + j; kk = xdims * (i0 - ns2 + i) + (j0 - ns2 + j); rdata[k] = (double)s_in[kk].r; idata[k] = (double)s_in[kk].i; } } /* interpolate the real and imaginary data */ sinc_one(rdata, idata, dr, da, cz); if ((int)fabs(cz[0]) > I2MAX) nclip = nclip + 1; sout->r = (float)cz[0]; if ((int)fabs(cz[1]) > I2MAX) nclip = nclip + 1; sout->i = (float)cz[1]; } // if(nclip > 0) fprintf(stderr," %d integers were clipped \n",nclip); } double sinc_kernel(double); void sinc_one(double *rdata, double *idata, double x, double y, double *cz) { int i, j, ij, ns2 = NS / 2 - 1; double wx[NS], wy[NS]; double arg, w, wsum, rsum, isum; for (i = 0; i < NS; i++) { arg = fabs(x + ns2 - i); wx[i] = sinc_kernel(arg); arg = fabs(y + ns2 - i); wy[i] = sinc_kernel(arg); } rsum = isum = wsum = 0.0; ij = 0; for (j = 0; j < NS; j++) { for (i = 0; i < NS; i++) { w = wx[i] * wy[j]; rsum += rdata[ij + i] * w; isum += idata[ij + i] * w; wsum += w; } ij += NS; } if (wsum <= 0.0) printf(" error wsum is zero \n"); cz[0] = rsum / wsum; cz[1] = isum / wsum; } #define PI 3.1415926535897932 double sinc_kernel(double x) { double arg, f; arg = fabs(PI * x); if (arg > 0.) { f = sin(arg) / arg; } else { f = 1.; } return (f); } // added by Kang Wang int get_words(char *buffer) { // Function that gets the word count, by counting // the spaces. int count; int wordcount = 0; char ch; for (count = 0; count < strlen(buffer); count++) { ch = buffer[count]; if ((isblank(ch)) || (buffer[count] == '\0')) { // if the character is blank, or null byte // add 1 to the wordcounter wordcount += 1; } } // printf("%d\n\n", wordcount); return wordcount + 1; } GMTSAR_V5.7/preproc/S1A_preproc/src_tops/Makefile_orig000644 015705 000000 00000000623 13505462014 023646 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_s1a_tops CSRCS = make_s1a_tops.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I$(GMTSARHOME)/gmtsar/include -I$(TIFF_INC) $(GMT_INC) CLIBS = -L../lib -lxmlC $(GMTSAR) $(GMT_LIB) $(LALIBS) -L$(TIFF_LIB) -ltiff -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/S1A_preproc/src_tops/make_s1a_tops_6par.c000644 015705 000000 00000076134 13505462014 025022 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: David Sandwell and Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 04/06/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * Date : 08/21/15 DTS begin modification for precision shifting * * Date : 10/24/15 DTS Added the deramp and reramp * * Date : 12/29/15 DTS added 3-parameter phase shift and reramp * * Date : 01/14/15 EXU added range stretch and line interpolator * * * ***************************************************************************/ #include "PRM.h" #include "gmtsar.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include "tiffio.h" #include #include #include #include typedef struct burst_bounds { int SL; int SC; int SH; int EL; int EC; int EH; } burst_bounds; int pop_led(struct tree *, struct state_vector *); int write_orb(struct state_vector *sv, FILE *fp, int); int pop_burst(struct PRM *, struct tree *, struct burst_bounds *, char *); int shift_write_slcs(void *, struct PRM *, struct tree *, burst_bounds *, TIFF *, FILE *, FILE *, FILE *, int, double, double, double, double, double, double); int dramp_dmod(struct tree *, int, fcomplex *, int, int, double, double, double); int azi_shift(void *, fcomplex *, int, int, fcomplex *, int, double, double); int rng_shift(void *, fcomplex *, int, int, fcomplex *, int, double); int rng_interp(fcomplex *, fcomplex *, int, int, int, int, double, double, double); double sinc_kernel(double); char *USAGE = "\nUsage: make_s1a_tops_6par xml_file tiff_file output mode rng_shift " "azi_shift stretch_a a_stretch_a stretch_r a_stretch_r\n" " xml_file - name of xml file \n" " tiff_file - name of tiff file \n" " output - stem name of output files .PRM, .LED, .SLC \n" " mode - (0) no SLC; (1) center SLC; (2) high SLCH and low " "SLCL \n" " rng_shift - fractional part of desired range shift \n" " azi_shift - fractional part of desired azimuth shift \n" " stretch_a - additional azimuth shift in range dir \n" " a_stretch_a - additional azimuth shift in azimuth dir \n" " stretch_r - additional range shift in range dir \n" " a_stretch_r - additional range shift in azimuth dir \n" "\nExample: make_s1a_tops_6par s1a-s1-slc-vv-20140807.xml " "s1a-s1-slc-vv-20140807.tiff S1A20140807 1 0.4596 .9109 2.18065e-06 " "-3.63255e-06 1.37343e-05 -3.13352e-05 \n" "\nOutput: S1A20140807.PRM S1A20140807.LED S1A20140807.SLC\n"; int main(int argc, char **argv) { FILE *XML_FILE, *OUTPUT_PRM, *OUTPUT_LED; FILE *OUTPUT_SLCL = NULL, *OUTPUT_SLCC = NULL, *OUTPUT_SLCH = NULL; TIFF *TIFF_FILE; char tmp_str[200]; struct PRM prm; struct tree *xml_tree; struct state_vector sv[400]; struct burst_bounds bb[200]; int ch, n = 0, nc = 0, nlmx = 0, imode = 0; double rng, azi, stretch_a, a_stretch_a, stretch_r, a_stretch_r; // Begin: Initializing new GMT session void *API = NULL; // GMT API control structure if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; if (argc < 11) die(USAGE, ""); // find the number of lines and the maximum line length of the xml file if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } fclose(XML_FILE); xml_tree = (struct tree *)malloc(n * 5 * sizeof(struct tree)); // generate the xml tree if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_tree(XML_FILE, xml_tree, 1); fclose(XML_FILE); // show_tree(xml_tree,0,0); // generate the LED file n = pop_led(xml_tree, sv); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // initiate the prm null_sio_struct(&prm); // analyze the burst and generate the PRM pop_burst(&prm, xml_tree, bb, argv[3]); // open the TIFF file and the three SLC files SLCL-low SLCC-center and // SLCH-high TIFFSetWarningHandler(NULL); if ((TIFF_FILE = TIFFOpen(argv[2], "rb")) == NULL) die("Couldn't open tiff file: \n", argv[2]); // open output files depending on the imode imode = atoi(argv[4]); if (imode == 1) { strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLCC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(C) file: \n", tmp_str); } else if (imode == 2) { strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLCL"); if ((OUTPUT_SLCL = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(L) file: \n", tmp_str); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLCH"); if ((OUTPUT_SLCH = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(H) file: \n", tmp_str); } else { // don't open any files } /* apply range and azimuth shifts to each burst and write the three SLC files * SLCL SLC and SLCH depending on imode */ /* the negative signs are needed for all but the azimuth stretch versus range */ rng = atof(argv[5]); azi = -atof(argv[6]); stretch_r = atof(argv[9]); a_stretch_r = atof(argv[10]); stretch_a = atof(argv[7]); a_stretch_a = -atof(argv[8]); prm.sub_int_r = rng; prm.sub_int_a = -azi; prm.stretch_a = stretch_a; prm.a_stretch_a = -a_stretch_a; prm.stretch_r = stretch_r; prm.a_stretch_r = a_stretch_r; shift_write_slcs(API, &prm, xml_tree, bb, TIFF_FILE, OUTPUT_SLCL, OUTPUT_SLCC, OUTPUT_SLCH, imode, rng, azi, stretch_a, a_stretch_a, stretch_r, a_stretch_r); TIFFClose(TIFF_FILE); if (imode == 2) fclose(OUTPUT_SLCL); if (imode == 1) fclose(OUTPUT_SLCC); if (imode == 2) fclose(OUTPUT_SLCH); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); free(xml_tree); if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 100.0) / 100.0 - trunc((sv[0].sec) * 100.0) / 100.0; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.6lf %lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led(tree *xml_tree, state_vector *sv) { int i, count; char tmp_c[200]; double tmp_d; search_tree(xml_tree, "/product/generalAnnotation/orbitList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); for (i = 0; i < count; i++) { search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 2, 4, i + 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 1, 4, i + 1); tmp_c[4] = '\0'; sv[i].yr = (int)(str2double(tmp_c)); sv[i].jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); sv[i].sec = (tmp_d - trunc(tmp_d)) * 86400; search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/x/", tmp_c, 1, 4, i + 1); sv[i].x = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/y/", tmp_c, 1, 4, i + 1); sv[i].y = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/z/", tmp_c, 1, 4, i + 1); sv[i].z = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, i + 1); sv[i].vx = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, i + 1); sv[i].vy = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, i + 1); sv[i].vz = str2double(tmp_c); } printf("Writing %d lines for orbit...\n", count); return (count); } int pop_burst(struct PRM *prm, tree *xml_tree, struct burst_bounds *bb, char *file_name) { char tmp_c[200], tmp_cc[60000]; double tmp_d, dt, t[100]; int i, j, k, nl = 0, nlf, ntl, count, lpb, tmp_i, flag, flag0; int k_start, kC; int *kF, *ksa, *ksr, *kea, *ker, *kover; double t0 = -1., time; char *cflag, *cflag_orig; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/numberOfLooks/", tmp_c, 1, 0, 1); prm->nlooks = (int)str2double(tmp_c); prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; strasign(prm->dtype, "a", 0, 0); search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_c, 1, 0, 1); prm->fs = str2double(tmp_c); // rng_samp_rate prm->SC_identity = 10; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ search_tree(xml_tree, "/product/generalAnnotation/productInformation/radarFrequency/", tmp_c, 1, 0, 1); prm->lambda = SOL / str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/downlinkInformationList/" "downlinkInformation/downlinkValues/txPulseLength/", tmp_c, 1, 0, 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/lookBandwidth/", tmp_c, 1, 0, 1); prm->chirp_slope = str2double(tmp_c) / tmp_d; prm->pulsedur = tmp_d; search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/re/", tmp_c, 1, 0, 1); // prm->xmi = str2double(tmp_c); //I_mean prm->xmi = 0.0; // I_mean search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/im/", tmp_c, 1, 0, 1); // prm->xmq = str2double(tmp_c); //Q_mean prm->xmq = 0.0; // Q_mean search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dt = str2double(tmp_c); prm->prf = 1 / dt; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_c, 1, 0, 1); /* subtract a correction of 1 * drange to the near range based on Pinon corner * reflector analysis DTS 09/24/18 */ prm->near_range = (str2double(tmp_c) - 1. / prm->fs) * SOL / 2; prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius search_tree(xml_tree, "/product/generalAnnotation/productInformation/pass/", tmp_c, 1, 0, 1); strasign(prm->orbdir, tmp_c, 0, 0); strasign(prm->lookdir, "R", 0, 0); strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfSamples/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c) - (int)str2double(tmp_c) % 4; prm->bytes_per_line = tmp_i * 4; prm->good_bytes = prm->bytes_per_line; prm->num_rng_bins = prm->bytes_per_line / 4; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig prm->az_res = 0.0; // prm->antenna_side = -1; prm->fdd1 = 0.0; prm->fddd1 = 0.0; // manipulate the lines search_tree(xml_tree, "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); // count = 1; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfLines/", tmp_c, 1, 0, 1); ntl = (int)str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/linesPerBurst/", tmp_c, 1, 4, 0); lpb = (int)str2double(tmp_c); nlf = count * lpb; // allocate some memory kF = (int *)malloc(nlf * sizeof(int)); ksa = (int *)malloc((count + 1) * sizeof(int)); ksr = (int *)malloc((count + 1) * sizeof(int)); kea = (int *)malloc((count + 1) * sizeof(int)); ker = (int *)malloc((count + 1) * sizeof(int)); kover = (int *)malloc((count + 1) * sizeof(int)); cflag_orig = (char *)malloc(sizeof(char) * 80 * (lpb + 1)); cflag = cflag_orig; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/productFirstLineUtcTime/", tmp_c, 2, 0, 1); prm->clock_start = str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/productFirstLineUtcTime/", tmp_c, 1, 0, 1); tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(tmp_c); k = 0; flag0 = -1; for (i = 1; i <= count; i++) { search_tree(xml_tree, "/product/swathTiming/burstList/burst/azimuthAnxTime/", tmp_c, 1, 4, i); t[i] = str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/burstList/burst/firstValidSample/", tmp_cc, 1, 4, i); strcpy(cflag, tmp_cc); for (j = 0; j < lpb; j++) { flag = (int)strtol(cflag, &cflag, 10); time = t[i] + (double)j / prm->prf; kF[k] = -1; // don't use flagged data if (flag >= 0) { if (t0 < 0.) { t0 = time; k_start = k; } // the kF array uniquely maps the line on the input file into the SLC // line on output kF[k] = (int)((time - t0) * prm->prf + .1); nl = kF[k]; } // calculate the start and end index for each burst if (flag > flag0) { ksa[i] = kF[k]; ksr[i] = j; } if (flag < flag0) { kea[i] = kF[k - 1]; ker[i] = j - 1; } flag0 = flag; k++; } } // calculate the burst overlap. The first one is zero. kover[0] = 0; for (i = 1; i <= count; i++) { kover[i] = 0; if (i < count) kover[i] = kea[i] - ksa[i + 1] + 1; } // calculate the approximate center shift kC = kover[1] / 2; // calculate the relative start S and end E lines for each burst in the L and // H configurations for (i = 1; i <= count; i++) { bb[i].SL = ksr[i]; bb[i].SH = ksr[i] + kover[i - 1]; bb[i].EL = ker[i] - kover[i]; bb[i].EH = ker[i]; } // make the center start end locations for (i = 1; i < count; i++) { bb[i].EC = bb[i].EL + kC; bb[i + 1].SC = bb[i + 1].SL + kC; } bb[1].SC = bb[1].SL; bb[count].EC = bb[i].EL; // make sure the number of lines is divisible by 4 prm->num_lines = nl - nl % 4; // advance the start time to account for the zero lines at the start of the // first burst prm->SC_clock_start = prm->SC_clock_start + (double)(k_start) / prm->prf / 86400.; prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_start = prm->clock_start + (double)(k_start) / prm->prf / 86400.; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->chirp_ext = 0; free(kF); free(ksa); free(ksr); free(kea); free(ker); free(kover); free(cflag_orig); /* freeing this memory causes a crash!!!! */ return (1); } int shift_write_slcs(void *API, struct PRM *prm, tree *xml_tree, burst_bounds *bb, TIFF *tif, FILE *slcl, FILE *slcc, FILE *slch, int imode, double rng, double azi, double stretch_a, double a_stretch_a, double stretch_r, double a_stretch_r) { uint16 s = 0; uint16 *buf; uint32 it; short *tmp, *brst; float *rtmp; int ii, jj, nl, k, k2, kk; int count, lpb, nlf, width2, nclip = 0; uint32 width, height, widthi; char tmp_c[200]; fcomplex *cbrst, *cramp; fcomplex *fft_vec_rng, *fft_vec_azi; int ranfft_rng, ranfft_azi; double rtest, itest, azi_new; int cl; // get the burst information and compare with the TIFF file search_tree(xml_tree, "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/linesPerBurst/", tmp_c, 1, 4, 0); lpb = (int)str2double(tmp_c); nlf = count * lpb; // get the width the file and make width divisible by 4 TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &widthi); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); width = widthi - widthi % 4; width2 = 2 * width; if (nlf != height) { fprintf(stderr, "XML and TIFF file disagree on image height %d %d \n", nlf, height); } // allocate memory for the burst and other arrays brst = (short *)malloc(lpb * width2 * sizeof(short)); cbrst = (fcomplex *)malloc(lpb * width * sizeof(fcomplex)); cramp = (fcomplex *)malloc(lpb * width * sizeof(fcomplex)); buf = (uint16 *)_TIFFmalloc(TIFFScanlineSize(tif)); tmp = (short *)malloc(width * 2 * sizeof(short)); rtmp = (float *)malloc(width * 2 * sizeof(float)); ranfft_rng = fft_bins(width); ranfft_azi = fft_bins(lpb); fft_vec_rng = (fcomplex *)malloc(ranfft_rng * sizeof(fcomplex)); fft_vec_azi = (fcomplex *)malloc(ranfft_azi * sizeof(fcomplex)); nl = prm->num_lines; // don't do anything if imode = 0 if (imode == 0) return (1); printf("Writing SLC..Image Size: %d X %d...\n", width, nl); it = 0; // loop over the bursts cl = 0; for (kk = 1; kk <= count; kk++) { fprintf(stderr, "burst # %d \n", kk); // read a burst into memory for (ii = 0; ii < lpb; ii++) { TIFFReadScanline(tif, buf, it, s); for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; brst[k] = (short)buf[jj]; } it++; } // load the burst into a complex float array for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; k2 = ii * width2 + jj * 2; cbrst[k].r = (float)brst[k2]; cbrst[k].i = (float)brst[k2 + 1]; } } // don't need this code if there are no shifts if (azi != 0. || rng != 0.) { // shift the burst in range if != 0. if (rng != 0.) { rng_interp(cbrst, fft_vec_rng, cl, bb[kk].SC, bb[kk].EC, width, rng, stretch_r, a_stretch_r); // rng_shift (API,cbrst,lpb,width,fft_vec_rng,ranfft_rng,rng); } // complute the complex deramp_demod array for each burst with no shift dramp_dmod(xml_tree, kk, cramp, lpb, width, 0., 0., 0.); // apply the dramp_dmod for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cbrst[k] = Cmul(cbrst[k], cramp[k]); } } // shift the burst cramp in azimuth if azi != 0. if (azi != 0.) { azi_new = azi + (cl + (bb[kk].EC - bb[kk].SC + 1) / 2.) * a_stretch_a; azi_shift(API, cbrst, lpb, width, fft_vec_azi, ranfft_azi, azi_new, stretch_a); } // now make a shifted version of the dramp_dmod dramp_dmod(xml_tree, kk, cramp, lpb, width, 0.0, azi_new, stretch_a); // reramp the slc for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cramp[k].i = -cramp[k].i; cbrst[k] = Cmul(cbrst[k], cramp[k]); } } } // unload the float complex array into a short burst array, multiply by 2 // and clip if needed for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; k2 = ii * width2 + jj * 2; rtest = 2. * cbrst[k].r; itest = 2. * cbrst[k].i; brst[k2] = (short)clipi2(rtest); brst[k2 + 1] = (short)clipi2(itest); if ((int)(rtest) > I2MAX || (int)(itest) > I2MAX) { nclip++; } } } // write the burst in L, C, and H configurations for (ii = 0; ii < lpb; ii++) { // write low if (ii >= bb[kk].SL && ii <= bb[kk].EL) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 2) fwrite(tmp, sizeof(short), width * 2, slcl); } // write center if (ii >= bb[kk].SC && ii <= bb[kk].EC) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 1) fwrite(tmp, sizeof(short), width * 2, slcc); cl++; } // write high if (ii >= bb[kk].SH && ii <= bb[kk].EH) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 2) fwrite(tmp, sizeof(short), width * 2, slch); } } } fprintf(stderr, "number of points clipped to short int %d \n", nclip); _TIFFfree(buf); free(fft_vec_rng); free(fft_vec_azi); free(brst); free(cbrst); free(cramp); free(tmp); free(rtmp); return (1); } int dramp_dmod(tree *xml_tree, int nb, fcomplex *cramp, int lpb, int width, double rng, double azi, double stretch_a) { /* this is a routine to apply an azimuth shift to a burst of TOPS data */ int ii, jj, k; char tmp_c[200]; double kpsi, fc, dta, dts = 0., ts0, tau0, vx, vy, vz; double ks, vtot, ka, taus, phase, pramp, pmod; double fnc[3], fka[3]; double *eta, *etaref, *kt, *fnct; double azi_rng; double t_brst, t1, t2; // get all the parameters needed for the remod_deramp search_tree(xml_tree, "/product/generalAnnotation/productInformation/radarFrequency/", tmp_c, 1, 0, 1); fc = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/productInformation/azimuthSteeringRate/", tmp_c, 1, 0, 1); kpsi = PI * str2double(tmp_c) / 180.; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dta = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_c, 1, 0, 1); if (str2double(tmp_c) != 0.) dts = 1. / str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_c, 1, 0, 1); ts0 = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/t0/", tmp_c, 1, 0, 1); tau0 = str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 2, 4, nb); t_brst = str2double(tmp_c) + dta * (double)lpb / 2.0 / 86400.0; // first find the parameters that depends on burst, find the neareast one. search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/dcEstimate/azimuthTime/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } if (t_brst - t1 < t2 - t_brst) jj = ii - 1; else jj = ii; // fprintf(stderr,"finding the %d DcPolynomial\n",jj); search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/dcEstimate/dataDcPolynomial/", tmp_c, 1, 4, jj); str2dbs(fnc, tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/" "azimuthTime/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } if (t_brst - t1 < t2 - t_brst) jj = ii - 1; else jj = ii; // fprintf(stderr,"finding the %d AziFmRate\n",jj); ii = search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/t0/", tmp_c, 1, 0, 1); if (xml_tree[xml_tree[ii].sibr].sibr < 0) { search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/" "azimuthFmRatePolynomial/", tmp_c, 1, 4, jj); str2dbs(fka, tmp_c); } else { search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c0/", tmp_c, 1, 4, jj); fka[0] = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c1/", tmp_c, 1, 4, jj); fka[1] = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c2/", tmp_c, 1, 4, jj); fka[2] = str2double(tmp_c); } // find the velocity by linearly interpolating between 2 neareast point search_tree(xml_tree, "/product/generalAnnotation/orbitList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, ii - 1); vx = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, ii); vx = (str2double(tmp_c) * (t2 - t_brst) + vx * (t_brst - t1)) / (t2 - t1); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, ii - 1); vy = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, ii); vy = (str2double(tmp_c) * (t2 - t_brst) + vy * (t_brst - t1)) / (t2 - t1); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, ii - 1); vz = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, ii); vz = (str2double(tmp_c) * (t2 - t_brst) + vz * (t_brst - t1)) / (t2 - t1); // malloc the memory eta = (double *)malloc(lpb * sizeof(double)); etaref = (double *)malloc(width * sizeof(double)); kt = (double *)malloc(width * sizeof(double)); fnct = (double *)malloc(width * sizeof(double)); // malloc the memory eta = (double *)malloc(lpb * sizeof(double)); etaref = (double *)malloc(width * sizeof(double)); kt = (double *)malloc(width * sizeof(double)); fnct = (double *)malloc(width * sizeof(double)); // compute velocity and then Doppler rate vtot = sqrt(vx * vx + vy * vy + vz * vz); ks = 2. * vtot * fc * kpsi / SOL; for (ii = 0; ii < lpb; ii++) { // eta[ii] = ((double)(ii-lpb/2)-azi)*dta; eta[ii] = ((double)ii - (double)lpb / 2. + .5 - azi) * dta; } for (jj = 0; jj < width; jj++) { // This is silly because ts0 = tau0 in the test I did taus = ts0 + ((double)jj - rng) * dts - tau0; ka = fka[0] + fka[1] * taus + fka[2] * taus * taus; kt[jj] = ka * ks / (ka - ks); fnct[jj] = fnc[0] + fnc[1] * taus + fnc[2] * taus * taus; etaref[jj] = -fnct[jj] / ka + fnc[0] / fka[0]; } for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; /* include the phase shift with range */ azi_rng = jj * stretch_a; pramp = -M_PI * kt[jj] * pow((eta[ii] + azi_rng * dta - etaref[jj]), 2); pmod = -2. * M_PI * fnct[jj] * eta[ii]; phase = pramp + pmod; cramp[k] = Cexp(phase); } } return (1); } int azi_shift(void *API, fcomplex *cbrst, int lpb, int width, fcomplex *fft_vec, int ranfft, double azi, double stretch_a) { /* this is a routine to apply an azimuth shift to a burst of TOPS data */ int ii, jj, k; double sumr, sumi, azi_new; // loop over columns of the burst for (jj = 0; jj < width; jj++) { azi_new = azi + jj * stretch_a; // compute the mean value for (ii = 0; ii < lpb; ii++) { k = ii * width + jj; sumr = sumr + cbrst[k].r; sumi = sumi + cbrst[k].i; } sumr = sumr / (double)lpb; sumi = sumi / (double)lpb; // load the complex vector and append the mean for (ii = 0; ii < ranfft; ii++) { if (ii < lpb) { k = ii * width + jj; fft_vec[ii].r = cbrst[k].r; fft_vec[ii].i = cbrst[k].i; } else { fft_vec[ii].r = sumr; fft_vec[ii].i = sumi; } } // apply the shift theorem shift(API, ranfft, fft_vec, azi_new); // unload the complex vector for (ii = 0; ii < lpb; ii++) { k = ii * width + jj; cbrst[k].r = fft_vec[ii].r; cbrst[k].i = fft_vec[ii].i; } } return (1); } int rng_shift(void *API, fcomplex *cbrst, int lpb, int width, fcomplex *fft_vec, int ranfft, double rng) { /* this is a routine to apply a range shift to a burst of TOPS data */ int ii, jj, k; // loop over rows of the burst for (ii = 0; ii < lpb; ii++) { // load the complex vector for (jj = 0; jj < ranfft; jj++) { if (jj < width) { k = ii * width + jj; fft_vec[jj].r = cbrst[k].r; fft_vec[jj].i = cbrst[k].i; } else { fft_vec[jj].r = 0.0f; fft_vec[jj].i = 0.0f; } } // apply the shift theorem shift(API, ranfft, fft_vec, rng); // unload the complex vector for (jj = 0; jj < width; jj++) { k = ii * width + jj; cbrst[k].r = fft_vec[jj].r; cbrst[k].i = fft_vec[jj].i; } } return (1); } int rng_interp(fcomplex *cbrst, fcomplex *ctmp, int cl, int lstart, int lend, int width, double rng, double stretch_r, double a_stretch_r) { /* this is a routine to shift and stretch along range for TOPS data */ int ii, jj, ns2, j, k, kk; double ra, w, wsum; ns2 = NS / 2 - 1; for (ii = lstart; ii <= lend; ii++) { // read in the line for (jj = 0; jj < width; jj++) { kk = ii * width + jj; ctmp[jj].i = cbrst[kk].i; ctmp[jj].r = cbrst[kk].r; } // compute the output for (jj = 0; jj < width; jj++) { ra = (double)jj + (rng + (double)jj * stretch_r + (cl + ii - lstart) * a_stretch_r); j = (int)ra; // make sure the point is safe for interpolation, use original input if // can not be interpolated if (j - ns2 < 0 || j + ns2 + 1 >= width) continue; kk = ii * width + jj; cbrst[kk].i = 0.0; cbrst[kk].r = 0.0; wsum = 0.0; for (k = j - ns2; k <= j + ns2 + 1; k++) { w = sinc_kernel(fabs(ra - (double)k)); cbrst[kk].i += w * ctmp[k].i; cbrst[kk].r += w * ctmp[k].r; wsum += w; } cbrst[kk].i = cbrst[kk].i / wsum; cbrst[kk].r = cbrst[kk].r / wsum; } } return (1); } double sinc_kernel(double x) { double arg, f; arg = fabs(PI * x); if (arg > 0.) { f = sin(arg) / arg; } else { f = 1.; } return (f); } GMTSAR_V5.7/preproc/S1A_preproc/src_tops/s1a-aux-cal.xml000644 015705 000000 00005622711 13505462014 023741 0ustar00sandwellwheel000000 000000 S1 HH 17.14 22.7 0.05 1.934e+10 1.092e+10 2.119e+10 2.312e+10 2.324e+10 4.261e+10 2.411e+10 7.261e+10 2.213e+10 1.165e+11 1.547e+10 1.776e+11 2.088e+09 2.599e+11 -2.033e+10 3.675e+11 -5.426e+10 5.046e+11 -1.025e+11 6.761e+11 -1.682e+11 8.872e+11 -2.545e+11 1.143e+12 -3.650e+11 1.449e+12 -5.036e+11 1.811e+12 -6.739e+11 2.235e+12 -8.811e+11 2.728e+12 -1.129e+12 3.297e+12 -1.421e+12 3.946e+12 -1.762e+12 4.681e+12 -2.157e+12 5.509e+12 -2.610e+12 6.435e+12 -3.123e+12 7.466e+12 -3.703e+12 8.607e+12 -4.352e+12 9.861e+12 -5.074e+12 1.123e+13 -5.873e+12 1.273e+13 -6.751e+12 1.436e+13 -7.712e+12 1.611e+13 -8.757e+12 1.800e+13 -9.889e+12 2.003e+13 -1.111e+13 2.219e+13 -1.242e+13 2.448e+13 -1.381e+13 2.692e+13 -1.530e+13 2.948e+13 -1.687e+13 3.219e+13 -1.853e+13 3.502e+13 -2.027e+13 3.799e+13 -2.209e+13 4.108e+13 -2.399e+13 4.428e+13 -2.597e+13 4.760e+13 -2.801e+13 5.103e+13 -3.012e+13 5.456e+13 -3.229e+13 5.818e+13 -3.450e+13 6.188e+13 -3.677e+13 6.566e+13 -3.907e+13 6.950e+13 -4.141e+13 7.340e+13 -4.376e+13 7.734e+13 -4.613e+13 8.131e+13 -4.851e+13 8.531e+13 -5.089e+13 8.932e+13 -5.325e+13 9.333e+13 -5.560e+13 9.733e+13 -5.792e+13 1.013e+14 -6.020e+13 1.052e+14 -6.243e+13 1.091e+14 -6.461e+13 1.130e+14 -6.673e+13 1.168e+14 -6.877e+13 1.205e+14 -7.074e+13 1.241e+14 -7.262e+13 1.276e+14 -7.442e+13 1.311e+14 -7.613e+13 1.344e+14 -7.772e+13 1.376e+14 -7.922e+13 1.407e+14 -8.060e+13 1.437e+14 -8.186e+13 1.466e+14 -8.301e+13 1.494e+14 -8.403e+13 1.520e+14 -8.493e+13 1.545e+14 -8.571e+13 1.568e+14 -8.637e+13 1.591e+14 -8.690e+13 1.612e+14 -8.732e+13 1.631e+14 -8.761e+13 1.650e+14 -8.779e+13 1.668e+14 -8.785e+13 1.684e+14 -8.781e+13 1.699e+14 -8.766e+13 1.714e+14 -8.741e+13 1.727e+14 -8.706e+13 1.740e+14 -8.663e+13 1.752e+14 -8.611e+13 1.763e+14 -8.551e+13 1.773e+14 -8.483e+13 1.783e+14 -8.410e+13 1.793e+14 -8.330e+13 1.802e+14 -8.244e+13 1.811e+14 -8.154e+13 1.820e+14 -8.060e+13 1.829e+14 -7.962e+13 1.838e+14 -7.862e+13 1.846e+14 -7.759e+13 1.855e+14 -7.654e+13 1.865e+14 -7.549e+13 1.874e+14 -7.443e+13 1.884e+14 -7.337e+13 1.895e+14 -7.231e+13 1.906e+14 -7.126e+13 1.918e+14 -7.023e+13 1.930e+14 -6.923e+13 1.944e+14 -6.827e+13 1.958e+14 -6.736e+13 1.973e+14 -6.647e+13 1.990e+14 -6.562e+13 2.007e+14 -6.481e+13 2.025e+14 -6.403e+13 2.044e+14 -6.330e+13 2.064e+14 -6.262e+13 2.085e+14 -6.198e+13 2.107e+14 -6.139e+13 2.130e+14 -6.086e+13 2.154e+14 -6.038e+13 2.179e+14 -5.996e+13 2.204e+14 -5.959e+13 2.231e+14 -5.928e+13 2.258e+14 -5.903e+13 2.286e+14 -5.885e+13 2.315e+14 -5.872e+13 2.344e+14 -5.865e+13 2.373e+14 -5.865e+13 2.403e+14 -5.871e+13 2.433e+14 -5.882e+13 2.464e+14 -5.900e+13 2.494e+14 -5.924e+13 2.524e+14 -5.954e+13 2.554e+14 -5.989e+13 2.584e+14 -6.030e+13 2.613e+14 -6.076e+13 2.641e+14 -6.127e+13 2.669e+14 -6.183e+13 2.695e+14 -6.244e+13 2.721e+14 -6.309e+13 2.745e+14 -6.378e+13 2.767e+14 -6.450e+13 2.788e+14 -6.525e+13 2.808e+14 -6.603e+13 2.825e+14 -6.683e+13 2.840e+14 -6.765e+13 2.853e+14 -6.848e+13 2.863e+14 -6.932e+13 2.871e+14 -7.017e+13 2.877e+14 -7.101e+13 2.881e+14 -7.184e+13 2.882e+14 -7.265e+13 2.879e+14 -7.345e+13 2.874e+14 -7.422e+13 2.865e+14 -7.495e+13 2.853e+14 -7.565e+13 2.838e+14 -7.630e+13 2.819e+14 -7.690e+13 2.797e+14 -7.744e+13 2.771e+14 -7.792e+13 2.742e+14 -7.834e+13 2.710e+14 -7.868e+13 2.674e+14 -7.894e+13 2.635e+14 -7.912e+13 2.592e+14 -7.921e+13 2.547e+14 -7.921e+13 2.498e+14 -7.911e+13 2.447e+14 -7.892e+13 2.393e+14 -7.863e+13 2.336e+14 -7.824e+13 2.277e+14 -7.775e+13 2.215e+14 -7.715e+13 2.152e+14 -7.645e+13 2.086e+14 -7.565e+13 2.019e+14 -7.475e+13 1.951e+14 -7.374e+13 1.881e+14 -7.264e+13 1.811e+14 -7.145e+13 1.739e+14 -7.016e+13 1.667e+14 -6.879e+13 1.595e+14 -6.734e+13 1.523e+14 -6.580e+13 1.452e+14 -6.420e+13 1.380e+14 -6.253e+13 1.309e+14 -6.080e+13 1.240e+14 -5.902e+13 1.171e+14 -5.719e+13 1.103e+14 -5.532e+13 1.037e+14 -5.341e+13 9.730e+13 -5.146e+13 9.103e+13 -4.950e+13 8.496e+13 -4.754e+13 7.909e+13 -4.556e+13 7.343e+13 -4.359e+13 6.798e+13 -4.163e+13 6.277e+13 -3.969e+13 5.779e+13 -3.777e+13 5.305e+13 -3.587e+13 4.856e+13 -3.401e+13 4.430e+13 -3.218e+13 4.029e+13 -3.040e+13 3.652e+13 -2.866e+13 3.298e+13 -2.698e+13 2.968e+13 -2.534e+13 2.662e+13 -2.377e+13 2.377e+13 -2.225e+13 2.115e+13 -2.079e+13 1.873e+13 -1.940e+13 1.651e+13 -1.807e+13 1.448e+13 -1.680e+13 1.264e+13 -1.560e+13 1.097e+13 -1.447e+13 9.461e+12 -1.340e+13 8.104e+12 -1.239e+13 6.888e+12 -1.144e+13 5.804e+12 -1.056e+13 4.841e+12 -9.732e+12 3.989e+12 -8.962e+12 3.238e+12 -8.247e+12 2.579e+12 -7.583e+12 2.004e+12 -6.968e+12 1.504e+12 -6.400e+12 1.072e+12 -5.874e+12 6.997e+11 -5.389e+12 3.812e+11 -4.941e+12 1.105e+11 -4.527e+12 -1.180e+11 -4.145e+12 -3.089e+11 -3.792e+12 -4.665e+11 -3.466e+12 -5.951e+11 -3.164e+12 -6.975e+11 -2.884e+12 -7.768e+11 -2.624e+12 -8.354e+11 -2.382e+12 -8.757e+11 -2.157e+12 -8.997e+11 -1.948e+12 -9.093e+11 -1.754e+12 -9.062e+11 -1.573e+12 -8.920e+11 -1.405e+12 -8.680e+11 -1.249e+12 -8.358e+11 -1.105e+12 -7.966e+11 -9.720e+11 -7.517e+11 -8.497e+11 -7.023e+11 -7.377e+11 -6.497e+11 -6.354e+11 -5.947e+11 -5.427e+11 -5.386e+11 -4.590e+11 -4.823e+11 -3.840e+11 -4.266e+11 -3.173e+11 -3.724e+11 -2.585e+11 -3.204e+11 -2.072e+11 -2.712e+11 -1.628e+11 -2.254e+11 -1.250e+11 -1.834e+11 -9.332e+10 -1.456e+11 -6.720e+10 -1.121e+11 -4.619e+10 -8.310e+10 -2.977e+10 -5.870e+10 -1.748e+10 -3.883e+10 -8.818e+09 -2.339e+10 -3.290e+09 -1.217e+10 -3.972e+08 -4.940e+09 6.653e+08 -1.334e+09 1.869e+09 4.961e+08 4.456e+09 3.479e+09 8.263e+09 8.714e+09 1.287e+10 1.601e+10 1.796e+10 2.497e+10 2.324e+10 3.516e+10 2.851e+10 4.618e+10 3.355e+10 5.766e+10 3.821e+10 6.920e+10 4.237e+10 8.051e+10 4.591e+10 9.125e+10 4.878e+10 1.012e+11 5.093e+10 1.101e+11 5.234e+10 1.178e+11 5.303e+10 1.241e+11 5.302e+10 1.291e+11 5.234e+10 1.325e+11 5.107e+10 1.345e+11 4.925e+10 1.350e+11 4.696e+10 1.341e+11 4.429e+10 1.319e+11 4.130e+10 1.285e+11 3.808e+10 1.240e+11 3.471e+10 1.186e+11 3.126e+10 1.123e+11 2.780e+10 1.054e+11 2.439e+10 9.806e+10 2.109e+10 9.036e+10 1.795e+10 8.249e+10 1.501e+10 7.458e+10 1.228e+10 6.676e+10 9.813e+09 5.915e+10 7.607e+09 5.185e+10 5.671e+09 4.493e+10 4.008e+09 3.848e+10 2.611e+09 3.253e+10 1.465e+09 2.713e+10 5.581e+08 2.231e+10 -1.325e+08 1.805e+10 -6.305e+08 1.435e+10 -9.601e+08 1.119e+10 -1.148e+09 8.551e+09 -1.222e+09 6.377e+09 -1.208e+09 4.633e+09 -1.129e+09 3.267e+09 -1.010e+09 2.224e+09 -9.016e+08 1.451e+09 -7.393e+08 9.097e+08 -5.990e+08 5.340e+08 -4.754e+08 2.865e+08 -3.703e+08 1.289e+08 -2.814e+08 3.228e+07 -2.045e+08 -2.295e+07 -1.363e+08 -4.864e+07 -7.656e+07 -5.219e+07 -2.959e+07 -4.094e+07 8.231e+05 -2.592e+07 2.912e+07 -1.855e+07 9.677e+07 -3.891e+06 2.324e+08 5.033e+07 4.553e+08 1.732e+08 7.829e+08 3.936e+08 1.233e+09 7.421e+08 1.821e+09 1.250e+09 2.561e+09 1.948e+09 3.464e+09 2.864e+09 4.541e+09 4.027e+09 5.795e+09 5.458e+09 7.229e+09 7.176e+09 8.844e+09 9.197e+09 1.063e+10 1.152e+10 1.259e+10 1.416e+10 1.470e+10 1.711e+10 1.694e+10 2.035e+10 1.931e+10 2.387e+10 2.179e+10 2.765e+10 2.433e+10 3.164e+10 2.694e+10 3.583e+10 2.957e+10 4.017e+10 3.219e+10 4.461e+10 3.479e+10 4.911e+10 3.733e+10 5.362e+10 3.979e+10 5.808e+10 4.213e+10 6.245e+10 4.434e+10 6.667e+10 4.639e+10 7.069e+10 4.826e+10 7.447e+10 4.993e+10 7.797e+10 5.139e+10 8.114e+10 5.262e+10 8.394e+10 5.360e+10 8.634e+10 5.432e+10 8.830e+10 5.478e+10 8.981e+10 5.498e+10 9.085e+10 5.491e+10 9.140e+10 5.459e+10 9.148e+10 5.401e+10 9.107e+10 5.319e+10 9.020e+10 5.214e+10 8.887e+10 5.087e+10 8.711e+10 4.941e+10 8.495e+10 4.776e+10 8.241e+10 4.596e+10 7.953e+10 4.402e+10 7.636e+10 4.196e+10 7.292e+10 3.981e+10 6.927e+10 3.759e+10 6.545e+10 3.533e+10 6.150e+10 3.305e+10 5.747e+10 3.076e+10 5.340e+10 2.849e+10 4.933e+10 2.626e+10 4.531e+10 2.409e+10 4.136e+10 2.199e+10 3.752e+10 1.997e+10 3.382e+10 1.804e+10 3.029e+10 1.622e+10 2.695e+10 1.452e+10 2.380e+10 1.292e+10 2.088e+10 1.145e+10 1.817e+10 1.010e+10 1.569e+10 8.866e+09 1.345e+10 7.750e+09 1.142e+10 6.746e+09 9.622e+09 5.852e+09 8.032e+09 5.060e+09 6.643e+09 4.364e+09 5.443e+09 3.759e+09 4.418e+09 3.236e+09 3.552e+09 2.789e+09 2.828e+09 2.410e+09 2.230e+09 2.093e+09 1.743e+09 1.831e+09 1.351e+09 1.618e+09 1.039e+09 1.449e+09 7.933e+08 1.318e+09 6.012e+08 1.221e+09 4.520e+08 1.152e+09 3.364e+08 1.108e+09 2.473e+08 1.084e+09 1.793e+08 1.078e+09 1.286e+08 1.087e+09 9.278e+07 1.110e+09 7.040e+07 1.144e+09 6.064e+07 1.189e+09 6.318e+07 1.245e+09 7.796e+07 1.311e+09 1.052e+08 1.388e+09 1.451e+08 1.476e+09 1.982e+08 1.575e+09 2.650e+08 1.684e+09 3.459e+08 1.805e+09 4.415e+08 1.936e+09 5.521e+08 2.076e+09 6.780e+08 2.225e+09 8.188e+08 2.382e+09 9.744e+08 2.543e+09 1.144e+09 2.708e+09 1.325e+09 2.874e+09 1.518e+09 3.039e+09 1.718e+09 3.198e+09 1.925e+09 3.351e+09 2.135e+09 3.493e+09 2.344e+09 3.622e+09 2.549e+09 3.735e+09 2.747e+09 3.830e+09 2.934e+09 3.904e+09 3.106e+09 3.956e+09 3.260e+09 3.983e+09 3.393e+09 3.986e+09 3.502e+09 3.962e+09 3.586e+09 3.912e+09 3.643e+09 3.837e+09 3.671e+09 3.737e+09 3.671e+09 3.613e+09 3.642e+09 3.467e+09 3.584e+09 3.302e+09 3.500e+09 3.120e+09 3.390e+09 2.923e+09 3.257e+09 2.715e+09 3.103e+09 2.500e+09 2.932e+09 2.279e+09 2.746e+09 2.058e+09 2.548e+09 1.838e+09 2.343e+09 1.622e+09 2.133e+09 1.414e+09 1.921e+09 1.217e+09 1.712e+09 1.031e+09 1.507e+09 8.590e+08 1.310e+09 7.025e+08 1.123e+09 5.623e+08 9.480e+08 4.389e+08 7.864e+08 3.324e+08 6.398e+08 2.426e+08 5.089e+08 1.689e+08 3.940e+08 1.103e+08 2.955e+08 6.560e+07 2.130e+08 3.330e+07 1.459e+08 1.175e+07 9.345e+07 -9.396e+05 5.462e+07 -6.934e+06 2.808e+07 -8.988e+06 1.206e+07 -1.075e+07 2.972e+06 -1.477e+07 -4.963e+06 -2.065e+07 -1.627e+07 -2.659e+07 -3.228e+07 -3.102e+07 -5.275e+07 -3.270e+07 -7.707e+07 -3.062e+07 -1.048e+08 -2.382e+07 -1.358e+08 -1.128e+07 -1.702e+08 8.171e+06 -2.083e+08 3.605e+07 -2.511e+08 7.427e+07 -2.994e+08 1.252e+08 -3.543e+08 1.919e+08 -4.171e+08 2.779e+08 -4.892e+08 3.871e+08 -5.717e+08 5.241e+08 -6.661e+08 6.936e+08 -7.736e+08 9.007e+08 -8.955e+08 1.151e+09 -1.033e+09 1.449e+09 -1.188e+09 1.801e+09 -1.362e+09 2.211e+09 -1.556e+09 2.685e+09 -1.773e+09 3.227e+09 -2.014e+09 3.842e+09 -2.281e+09 4.534e+09 -2.578e+09 5.305e+09 -2.906e+09 6.159e+09 -3.267e+09 7.097e+09 -3.666e+09 8.121e+09 -4.103e+09 9.233e+09 -4.583e+09 1.043e+10 -5.107e+09 1.171e+10 -5.678e+09 1.308e+10 -6.299e+09 1.453e+10 -6.971e+09 1.605e+10 -7.695e+09 1.765e+10 -8.474e+09 1.931e+10 -9.309e+09 2.103e+10 -1.020e+10 2.281e+10 -1.114e+10 2.464e+10 -1.214e+10 2.650e+10 -1.319e+10 2.838e+10 -1.429e+10 3.029e+10 -1.544e+10 3.221e+10 -1.662e+10 3.412e+10 -1.785e+10 3.603e+10 -1.910e+10 3.790e+10 -2.038e+10 3.973e+10 -2.167e+10 4.151e+10 -2.297e+10 4.322e+10 -2.426e+10 4.485e+10 -2.554e+10 4.640e+10 -2.679e+10 4.783e+10 -2.800e+10 4.915e+10 -2.916e+10 5.034e+10 -3.026e+10 5.139e+10 -3.127e+10 5.229e+10 -3.220e+10 5.303e+10 -3.302e+10 5.360e+10 -3.373e+10 5.399e+10 -3.430e+10 5.419e+10 -3.473e+10 5.421e+10 -3.501e+10 5.404e+10 -3.513e+10 5.366e+10 -3.507e+10 5.309e+10 -3.484e+10 5.233e+10 -3.443e+10 5.137e+10 -3.383e+10 5.022e+10 -3.304e+10 4.888e+10 -3.207e+10 4.737e+10 -3.092e+10 4.569e+10 -2.960e+10 4.385e+10 -2.811e+10 4.186e+10 -2.648e+10 3.975e+10 -2.471e+10 3.752e+10 -2.282e+10 3.519e+10 -2.083e+10 3.278e+10 -1.878e+10 3.031e+10 -1.667e+10 2.781e+10 -1.455e+10 2.529e+10 -1.244e+10 2.279e+10 -1.037e+10 2.033e+10 -8.374e+09 1.793e+10 -6.480e+09 1.564e+10 -4.718e+09 1.346e+10 -3.109e+09 1.145e+10 -1.674e+09 9.622e+09 -4.210e+08 8.015e+09 6.615e+08 6.655e+09 1.605e+09 5.551e+09 2.476e+09 4.684e+09 3.378e+09 3.999e+09 4.431e+09 3.401e+09 5.756e+09 2.783e+09 7.446e+09 2.040e+09 9.558e+09 1.089e+09 1.212e+10 -1.336e+08 1.515e+10 -1.672e+09 1.863e+10 -3.558e+09 2.256e+10 -5.814e+09 2.691e+10 -8.451e+09 3.166e+10 -1.148e+10 3.678e+10 -1.489e+10 4.223e+10 -1.869e+10 4.797e+10 -2.287e+10 5.396e+10 -2.741e+10 6.014e+10 -3.230e+10 6.647e+10 -3.751e+10 7.289e+10 -4.302e+10 7.934e+10 -4.881e+10 8.577e+10 -5.484e+10 9.211e+10 -6.108e+10 9.831e+10 -6.750e+10 1.043e+11 -7.405e+10 1.101e+11 -8.070e+10 1.155e+11 -8.741e+10 1.206e+11 -9.414e+10 1.252e+11 -1.008e+11 1.295e+11 -1.075e+11 1.332e+11 -1.140e+11 1.364e+11 -1.204e+11 1.390e+11 -1.266e+11 1.411e+11 -1.326e+11 1.426e+11 -1.383e+11 1.435e+11 -1.438e+11 1.437e+11 -1.489e+11 1.434e+11 -1.537e+11 1.424e+11 -1.581e+11 1.409e+11 -1.621e+11 1.387e+11 -1.657e+11 1.360e+11 -1.688e+11 1.328e+11 -1.716e+11 1.290e+11 -1.738e+11 1.247e+11 -1.756e+11 1.200e+11 -1.770e+11 1.149e+11 -1.779e+11 1.095e+11 -1.783e+11 1.037e+11 -1.782e+11 9.765e+10 -1.777e+11 9.138e+10 -1.768e+11 8.491e+10 -1.754e+11 7.832e+10 -1.736e+11 7.164e+10 -1.713e+11 6.491e+10 0.005 -51.282 -50.302 -49.323 -48.343 -47.414 -46.579 -45.831 -45.163 -44.571 -44.051 -43.598 -43.212 -42.888 -42.627 -42.426 -42.285 -42.204 -42.184 -42.224 -42.326 -42.491 -42.722 -43.021 -43.392 -43.839 -44.366 -44.982 -45.693 -46.510 -47.447 -48.519 -49.749 -51.167 -52.815 -54.755 -57.085 -59.976 -63.769 -69.353 -81.103 -78.834 -72.144 -69.813 -69.256 -69.501 -68.999 -66.292 -62.597 -59.162 -56.218 -53.707 -51.542 -49.654 -47.992 -46.518 -45.203 -44.027 -42.971 -42.024 -41.174 -40.414 -39.736 -39.135 -38.606 -38.146 -37.753 -37.423 -37.155 -36.947 -36.799 -36.711 -36.682 -36.714 -36.805 -36.959 -37.177 -37.460 -37.812 -38.235 -38.735 -39.316 -39.983 -40.744 -41.608 -42.585 -43.686 -44.927 -46.326 -47.906 -49.694 -51.727 -54.057 -56.768 -60.034 -64.261 -69.716 -69.639 -64.559 -59.642 -55.873 -52.782 -50.141 -47.835 -45.796 -43.979 -42.348 -40.881 -39.555 -38.357 -37.273 -36.293 -35.409 -34.614 -33.902 -33.269 -32.712 -32.227 -31.812 -31.466 -31.188 -30.978 -30.836 -30.764 -30.763 -30.835 -30.982 -31.210 -31.523 -31.927 -32.432 -33.047 -33.786 -34.666 -35.710 -36.949 -38.426 -40.205 -42.384 -45.127 -48.746 -53.911 -60.403 -62.792 -58.670 -57.331 -57.298 -55.256 -50.070 -44.969 -40.805 -37.357 -34.419 -31.858 -29.584 -27.538 -25.679 -23.975 -22.403 -20.944 -19.586 -18.316 -17.125 -16.005 -14.950 -13.954 -13.013 -12.122 -11.279 -10.479 -9.721 -9.002 -8.320 -7.673 -7.060 -6.479 -5.928 -5.407 -4.914 -4.449 -4.010 -3.597 -3.210 -2.846 -2.507 -2.190 -1.897 -1.626 -1.376 -1.149 -0.942 -0.757 -0.592 -0.448 -0.324 -0.220 -0.136 -0.072 -0.029 -0.004 0.000 -0.015 -0.050 -0.105 -0.179 -0.273 -0.388 -0.523 -0.679 -0.855 -1.052 -1.271 -1.511 -1.773 -2.058 -2.365 -2.696 -3.051 -3.430 -3.835 -4.265 -4.722 -5.207 -5.721 -6.265 -6.840 -7.447 -8.089 -8.766 -9.482 -10.238 -11.036 -11.881 -12.775 -13.722 -14.727 -15.796 -16.935 -18.153 -19.460 -20.867 -22.392 -24.056 -25.888 -27.930 -30.243 -32.927 -36.163 -40.333 -46.552 -57.906 -55.380 -48.108 -45.352 -44.195 -43.915 -44.231 -44.927 -45.630 -45.698 -44.691 -42.899 -40.901 -39.031 -37.390 -35.980 -34.778 -33.756 -32.890 -32.160 -31.551 -31.050 -30.647 -30.333 -30.103 -29.951 -29.872 -29.865 -29.926 -30.053 -30.246 -30.504 -30.828 -31.217 -31.672 -32.195 -32.789 -33.456 -34.201 -35.027 -35.940 -36.948 -38.059 -39.283 -40.634 -42.129 -43.786 -45.634 -47.707 -50.050 -52.722 -55.799 -59.329 -63.058 -65.652 -65.369 -62.999 -60.296 -57.721 -55.332 -53.148 -51.177 -49.413 -47.841 -46.446 -45.209 -44.116 -43.152 -42.306 -41.567 -40.926 -40.378 -39.914 -39.531 -39.225 -38.992 -38.830 -38.736 -38.709 -38.748 -38.853 -39.024 -39.261 -39.566 -39.940 -40.385 -40.903 -41.500 -42.178 -42.944 -43.803 -44.763 -45.833 -47.023 -48.345 -49.811 -51.431 -53.209 -55.132 -57.152 -59.156 -60.969 -62.434 -63.561 -64.542 -65.547 -66.383 -66.140 -64.160 -61.305 -58.481 -55.973 -53.792 -51.894 -50.233 -48.772 -47.479 -46.332 -45.312 -44.404 -43.596 -42.879 -42.246 -41.690 -41.205 -40.788 -40.434 -40.140 -39.905 -39.725 -39.599 -39.526 -39.504 -39.533 -39.613 -39.743 -39.924 -40.155 -40.437 -40.771 -41.159 -41.601 -42.100 -42.658 -43.277 -43.961 -44.714 -45.539 -46.443 -47.388 -48.334 -49.280 0 1 1.0 4353721066.7 S1 HV 17.14 22.7 0.05 2.187e+10 -8.616e+09 3.292e+10 -1.786e+09 4.976e+10 9.787e+09 7.391e+10 2.940e+10 1.067e+11 6.060e+10 1.492e+11 1.071e+11 2.028e+11 1.731e+11 2.689e+11 2.631e+11 3.484e+11 3.816e+11 4.427e+11 5.341e+11 5.531e+11 7.263e+11 6.804e+11 9.636e+11 8.259e+11 1.252e+12 9.908e+11 1.599e+12 1.175e+12 2.010e+12 1.381e+12 2.494e+12 1.609e+12 3.057e+12 1.858e+12 3.704e+12 2.130e+12 4.443e+12 2.425e+12 5.282e+12 2.742e+12 6.225e+12 3.082e+12 7.280e+12 3.445e+12 8.454e+12 3.830e+12 9.751e+12 4.237e+12 1.118e+13 4.665e+12 1.274e+13 5.114e+12 1.444e+13 5.582e+12 1.628e+13 6.068e+12 1.827e+13 6.571e+12 2.040e+13 7.090e+12 2.269e+13 7.623e+12 2.513e+13 8.169e+12 2.772e+13 8.725e+12 3.045e+13 9.291e+12 3.335e+13 9.864e+12 3.638e+13 1.044e+13 3.956e+13 1.102e+13 4.288e+13 1.160e+13 4.633e+13 1.218e+13 4.991e+13 1.276e+13 5.360e+13 1.333e+13 5.741e+13 1.389e+13 6.131e+13 1.445e+13 6.531e+13 1.499e+13 6.939e+13 1.552e+13 7.353e+13 1.604e+13 7.773e+13 1.654e+13 8.198e+13 1.703e+13 8.624e+13 1.749e+13 9.053e+13 1.794e+13 9.482e+13 1.837e+13 9.909e+13 1.879e+13 1.033e+14 1.918e+13 1.075e+14 1.956e+13 1.117e+14 1.992e+13 1.158e+14 2.026e+13 1.198e+14 2.059e+13 1.237e+14 2.091e+13 1.275e+14 2.121e+13 1.312e+14 2.150e+13 1.348e+14 2.178e+13 1.383e+14 2.206e+13 1.416e+14 2.233e+13 1.448e+14 2.260e+13 1.479e+14 2.286e+13 1.508e+14 2.313e+13 1.535e+14 2.340e+13 1.561e+14 2.368e+13 1.586e+14 2.396e+13 1.609e+14 2.426e+13 1.630e+14 2.456e+13 1.650e+14 2.488e+13 1.669e+14 2.521e+13 1.686e+14 2.556e+13 1.701e+14 2.593e+13 1.716e+14 2.631e+13 1.729e+14 2.672e+13 1.740e+14 2.715e+13 1.751e+14 2.760e+13 1.761e+14 2.808e+13 1.769e+14 2.858e+13 1.777e+14 2.910e+13 1.784e+14 2.965e+13 1.790e+14 3.023e+13 1.796e+14 3.083e+13 1.801e+14 3.146e+13 1.805e+14 3.211e+13 1.810e+14 3.280e+13 1.813e+14 3.350e+13 1.817e+14 3.424e+13 1.821e+14 3.500e+13 1.824e+14 3.579e+13 1.828e+14 3.660e+13 1.832e+14 3.743e+13 1.836e+14 3.830e+13 1.840e+14 3.918e+13 1.845e+14 4.009e+13 1.851e+14 4.103e+13 1.857e+14 4.198e+13 1.863e+14 4.295e+13 1.871e+14 4.395e+13 1.879e+14 4.496e+13 1.889e+14 4.598e+13 1.899e+14 4.703e+13 1.911e+14 4.809e+13 1.923e+14 4.916e+13 1.937e+14 5.025e+13 1.952e+14 5.135e+13 1.967e+14 5.245e+13 1.984e+14 5.356e+13 2.002e+14 5.467e+13 2.021e+14 5.578e+13 2.042e+14 5.689e+13 2.063e+14 5.799e+13 2.086e+14 5.907e+13 2.109e+14 6.015e+13 2.134e+14 6.120e+13 2.160e+14 6.222e+13 2.186e+14 6.322e+13 2.214e+14 6.418e+13 2.242e+14 6.510e+13 2.271e+14 6.598e+13 2.300e+14 6.680e+13 2.330e+14 6.756e+13 2.361e+14 6.826e+13 2.391e+14 6.889e+13 2.422e+14 6.944e+13 2.453e+14 6.991e+13 2.483e+14 7.029e+13 2.513e+14 7.057e+13 2.543e+14 7.075e+13 2.572e+14 7.083e+13 2.600e+14 7.079e+13 2.627e+14 7.065e+13 2.653e+14 7.038e+13 2.678e+14 6.998e+13 2.701e+14 6.947e+13 2.723e+14 6.882e+13 2.742e+14 6.804e+13 2.760e+14 6.715e+13 2.775e+14 6.614e+13 2.789e+14 6.501e+13 2.800e+14 6.376e+13 2.809e+14 6.238e+13 2.815e+14 6.087e+13 2.818e+14 5.925e+13 2.818e+14 5.751e+13 2.815e+14 5.567e+13 2.808e+14 5.372e+13 2.799e+14 5.168e+13 2.786e+14 4.955e+13 2.770e+14 4.734e+13 2.750e+14 4.505e+13 2.727e+14 4.271e+13 2.700e+14 4.031e+13 2.671e+14 3.786e+13 2.638e+14 3.538e+13 2.601e+14 3.288e+13 2.562e+14 3.035e+13 2.519e+14 2.783e+13 2.473e+14 2.530e+13 2.425e+14 2.279e+13 2.373e+14 2.029e+13 2.319e+14 1.783e+13 2.263e+14 1.541e+13 2.204e+14 1.304e+13 2.144e+14 1.072e+13 2.081e+14 8.460e+12 2.017e+14 6.276e+12 1.951e+14 4.169e+12 1.884e+14 2.145e+12 1.816e+14 2.112e+11 1.747e+14 -1.628e+12 1.677e+14 -3.369e+12 1.607e+14 -5.005e+12 1.537e+14 -6.535e+12 1.467e+14 -7.956e+12 1.398e+14 -9.264e+12 1.328e+14 -1.046e+13 1.260e+14 -1.154e+13 1.192e+14 -1.249e+13 1.126e+14 -1.333e+13 1.060e+14 -1.406e+13 9.967e+13 -1.467e+13 9.345e+13 -1.518e+13 8.741e+13 -1.559e+13 8.156e+13 -1.589e+13 7.591e+13 -1.610e+13 7.048e+13 -1.622e+13 6.526e+13 -1.625e+13 6.027e+13 -1.620e+13 5.551e+13 -1.608e+13 5.098e+13 -1.589e+13 4.670e+13 -1.563e+13 4.265e+13 -1.532e+13 3.884e+13 -1.495e+13 3.527e+13 -1.455e+13 3.193e+13 -1.410e+13 2.881e+13 -1.363e+13 2.592e+13 -1.313e+13 2.325e+13 -1.262e+13 2.078e+13 -1.209e+13 1.851e+13 -1.155e+13 1.643e+13 -1.101e+13 1.453e+13 -1.047e+13 1.280e+13 -9.935e+12 1.124e+13 -9.409e+12 9.821e+12 -8.896e+12 8.547e+12 -8.396e+12 7.402e+12 -7.913e+12 6.377e+12 -7.447e+12 5.463e+12 -7.001e+12 4.649e+12 -6.573e+12 3.927e+12 -6.166e+12 3.288e+12 -5.778e+12 2.723e+12 -5.410e+12 2.226e+12 -5.061e+12 1.790e+12 -4.730e+12 1.408e+12 -4.415e+12 1.075e+12 -4.118e+12 7.852e+11 -3.835e+12 5.339e+11 -3.567e+12 3.174e+11 -3.312e+12 1.323e+11 -3.068e+12 -2.487e+10 -2.836e+12 -1.567e+11 -2.615e+12 -2.656e+11 -2.404e+12 -3.539e+11 -2.202e+12 -4.235e+11 -2.010e+12 -4.762e+11 -1.827e+12 -5.139e+11 -1.652e+12 -5.380e+11 -1.487e+12 -5.499e+11 -1.331e+12 -5.513e+11 -1.184e+12 -5.434e+11 -1.047e+12 -5.275e+11 -9.182e+11 -5.050e+11 -7.989e+11 -4.770e+11 -6.890e+11 -4.448e+11 -5.882e+11 -4.094e+11 -4.966e+11 -3.719e+11 -4.141e+11 -3.333e+11 -3.404e+11 -2.945e+11 -2.753e+11 -2.563e+11 -2.184e+11 -2.193e+11 -1.694e+11 -1.843e+11 -1.278e+11 -1.517e+11 -9.319e+10 -1.220e+11 -6.497e+10 -9.534e+10 -4.263e+10 -7.212e+10 -2.559e+10 -5.240e+10 -1.321e+10 -3.621e+10 -4.856e+09 -2.356e+10 2.573e+08 -1.432e+10 3.181e+09 -8.247e+09 5.422e+09 -4.651e+09 8.481e+09 -2.086e+09 1.299e+10 9.288e+08 1.877e+10 5.138e+09 2.542e+10 1.066e+10 3.256e+10 1.732e+10 3.985e+10 2.487e+10 4.700e+10 3.301e+10 5.379e+10 4.146e+10 6.001e+10 4.992e+10 6.552e+10 5.817e+10 7.022e+10 6.597e+10 7.402e+10 7.314e+10 7.688e+10 7.952e+10 7.878e+10 8.499e+10 7.972e+10 8.945e+10 7.974e+10 9.286e+10 7.889e+10 9.517e+10 7.722e+10 9.641e+10 7.482e+10 9.657e+10 7.177e+10 9.573e+10 6.816e+10 9.393e+10 6.409e+10 9.128e+10 5.965e+10 8.784e+10 5.497e+10 8.375e+10 5.012e+10 7.909e+10 4.519e+10 7.400e+10 4.029e+10 6.857e+10 3.550e+10 6.293e+10 3.086e+10 5.718e+10 2.647e+10 5.143e+10 2.236e+10 4.577e+10 1.857e+10 4.027e+10 1.515e+10 3.503e+10 1.209e+10 3.009e+10 9.418e+09 2.551e+10 7.124e+09 2.132e+10 5.197e+09 1.755e+10 3.615e+09 1.421e+10 2.355e+09 1.130e+10 1.384e+09 8.810e+09 6.644e+08 6.720e+09 1.603e+08 5.008e+09 -1.680e+08 3.635e+09 -3.587e+08 2.563e+09 -4.561e+08 1.756e+09 -4.751e+08 1.163e+09 -4.469e+08 7.412e+08 -3.974e+08 4.533e+08 -3.398e+08 2.620e+08 -2.806e+08 1.376e+08 -2.210e+08 5.908e+07 -1.609e+08 1.313e+07 -1.017e+08 -8.362e+06 -4.868e+07 -1.187e+07 -1.129e+07 -5.503e+06 3.465e+06 1.736e+05 4.102e+07 1.257e+07 1.425e+08 6.171e+07 3.274e+08 1.714e+08 6.147e+08 3.677e+08 1.023e+09 6.788e+08 1.571e+09 1.134e+09 2.273e+09 1.760e+09 3.142e+09 2.585e+09 4.189e+09 3.634e+09 5.420e+09 4.925e+09 6.840e+09 6.476e+09 8.451e+09 8.300e+09 1.025e+10 1.040e+10 1.223e+10 1.278e+10 1.438e+10 1.543e+10 1.669e+10 1.835e+10 1.914e+10 2.151e+10 2.173e+10 2.490e+10 2.441e+10 2.849e+10 2.718e+10 3.226e+10 3.001e+10 3.616e+10 3.287e+10 4.016e+10 3.572e+10 4.423e+10 3.855e+10 4.832e+10 4.132e+10 5.238e+10 4.399e+10 5.638e+10 4.653e+10 6.028e+10 4.892e+10 6.402e+10 5.113e+10 6.758e+10 5.313e+10 7.091e+10 5.489e+10 7.398e+10 5.638e+10 7.674e+10 5.759e+10 7.916e+10 5.850e+10 8.122e+10 5.909e+10 8.288e+10 5.935e+10 8.414e+10 5.929e+10 8.496e+10 5.891e+10 8.534e+10 5.821e+10 8.528e+10 5.720e+10 8.478e+10 5.590e+10 8.384e+10 5.433e+10 8.248e+10 5.252e+10 8.071e+10 5.049e+10 7.855e+10 4.828e+10 7.604e+10 4.591e+10 7.320e+10 4.342e+10 7.008e+10 4.084e+10 6.670e+10 3.821e+10 6.313e+10 3.556e+10 5.939e+10 3.291e+10 5.553e+10 3.030e+10 5.161e+10 2.775e+10 4.766e+10 2.529e+10 4.372e+10 2.292e+10 3.985e+10 2.068e+10 3.607e+10 1.856e+10 3.242e+10 1.658e+10 2.892e+10 1.474e+10 2.561e+10 1.305e+10 2.251e+10 1.151e+10 1.962e+10 1.010e+10 1.696e+10 8.838e+09 1.454e+10 7.706e+09 1.236e+10 6.698e+09 1.041e+10 5.808e+09 8.680e+09 5.027e+09 7.173e+09 4.345e+09 5.870e+09 3.754e+09 4.757e+09 3.246e+09 3.818e+09 2.812e+09 3.035e+09 2.446e+09 2.390e+09 2.140e+09 1.866e+09 1.887e+09 1.444e+09 1.682e+09 1.109e+09 1.520e+09 8.456e+08 1.395e+09 6.391e+08 1.302e+09 4.780e+08 1.237e+09 3.526e+08 1.196e+09 2.548e+08 1.175e+09 1.792e+08 1.170e+09 1.220e+08 1.179e+09 8.045e+07 1.200e+09 5.320e+07 1.233e+09 3.942e+07 1.275e+09 3.874e+07 1.328e+09 5.113e+07 1.390e+09 7.672e+07 1.463e+09 1.159e+08 1.547e+09 1.693e+08 1.642e+09 2.374e+08 1.748e+09 3.214e+08 1.866e+09 4.220e+08 1.996e+09 5.403e+08 2.138e+09 6.772e+08 2.290e+09 8.335e+08 2.451e+09 1.010e+09 2.620e+09 1.206e+09 2.795e+09 1.421e+09 2.972e+09 1.656e+09 3.150e+09 1.907e+09 3.325e+09 2.174e+09 3.494e+09 2.453e+09 3.654e+09 2.742e+09 3.800e+09 3.036e+09 3.929e+09 3.330e+09 4.039e+09 3.621e+09 4.125e+09 3.904e+09 4.187e+09 4.172e+09 4.221e+09 4.421e+09 4.227e+09 4.646e+09 4.202e+09 4.842e+09 4.148e+09 5.006e+09 4.063e+09 5.135e+09 3.949e+09 5.224e+09 3.808e+09 5.273e+09 3.642e+09 5.280e+09 3.454e+09 5.245e+09 3.246e+09 5.168e+09 3.022e+09 5.051e+09 2.787e+09 4.897e+09 2.542e+09 4.708e+09 2.294e+09 4.489e+09 2.046e+09 4.244e+09 1.800e+09 3.977e+09 1.561e+09 3.693e+09 1.333e+09 3.399e+09 1.116e+09 3.098e+09 9.152e+08 2.797e+09 7.307e+08 2.499e+09 5.642e+08 2.208e+09 4.166e+08 1.930e+09 2.884e+08 1.667e+09 1.794e+08 1.421e+09 8.896e+07 1.194e+09 1.631e+07 9.894e+08 -3.996e+07 8.063e+08 -8.139e+07 6.455e+08 -1.098e+08 5.068e+08 -1.274e+08 3.892e+08 -1.363e+08 2.916e+08 -1.388e+08 2.122e+08 -1.372e+08 1.488e+08 -1.337e+08 9.865e+07 -1.300e+08 5.873e+07 -1.273e+08 2.568e+07 -1.257e+08 -3.611e+06 -1.249e+08 -3.180e+07 -1.239e+08 -6.084e+07 -1.213e+08 -9.198e+07 -1.158e+08 -1.260e+08 -1.062e+08 -1.635e+08 -9.121e+07 -2.051e+08 -6.926e+07 -2.515e+08 -3.855e+07 -3.037e+08 3.234e+06 -3.629e+08 5.900e+07 -4.302e+08 1.325e+08 -5.070e+08 2.279e+08 -5.946e+08 3.504e+08 -6.941e+08 5.058e+08 -8.064e+08 7.003e+08 -9.323e+08 9.405e+08 -1.072e+09 1.234e+09 -1.227e+09 1.588e+09 -1.396e+09 2.009e+09 -1.581e+09 2.507e+09 -1.780e+09 3.088e+09 -1.995e+09 3.759e+09 -2.224e+09 4.529e+09 -2.469e+09 5.404e+09 -2.729e+09 6.389e+09 -3.005e+09 7.490e+09 -3.296e+09 8.713e+09 -3.605e+09 1.006e+10 -3.930e+09 1.154e+10 -4.273e+09 1.314e+10 -4.634e+09 1.488e+10 -5.016e+09 1.674e+10 -5.418e+09 1.873e+10 -5.842e+09 2.085e+10 -6.289e+09 2.309e+10 -6.759e+09 2.544e+10 -7.254e+09 2.790e+10 -7.772e+09 3.046e+10 -8.316e+09 3.311e+10 -8.884e+09 3.584e+10 -9.474e+09 3.864e+10 -1.009e+10 4.150e+10 -1.072e+10 4.441e+10 -1.136e+10 4.735e+10 -1.202e+10 5.032e+10 -1.268e+10 5.329e+10 -1.334e+10 5.626e+10 -1.400e+10 5.921e+10 -1.465e+10 6.213e+10 -1.528e+10 6.500e+10 -1.587e+10 6.781e+10 -1.643e+10 7.055e+10 -1.694e+10 7.319e+10 -1.740e+10 7.574e+10 -1.778e+10 7.818e+10 -1.808e+10 8.049e+10 -1.829e+10 8.266e+10 -1.840e+10 8.467e+10 -1.839e+10 8.652e+10 -1.826e+10 8.820e+10 -1.800e+10 8.968e+10 -1.759e+10 9.096e+10 -1.702e+10 9.203e+10 -1.630e+10 9.287e+10 -1.541e+10 9.347e+10 -1.435e+10 9.383e+10 -1.311e+10 9.393e+10 -1.170e+10 9.376e+10 -1.011e+10 9.333e+10 -8.354e+09 9.263e+10 -6.430e+09 9.165e+10 -4.345e+09 9.040e+10 -2.107e+09 8.888e+10 2.686e+08 8.711e+10 2.772e+09 8.508e+10 5.393e+09 8.282e+10 8.113e+09 8.036e+10 1.092e+10 7.770e+10 1.380e+10 7.489e+10 1.675e+10 7.194e+10 1.975e+10 6.890e+10 2.281e+10 6.579e+10 2.593e+10 6.265e+10 2.913e+10 5.951e+10 3.242e+10 5.637e+10 3.584e+10 5.326e+10 3.941e+10 5.018e+10 4.319e+10 4.711e+10 4.723e+10 4.405e+10 5.157e+10 4.094e+10 5.629e+10 3.776e+10 6.144e+10 3.443e+10 6.705e+10 3.090e+10 7.318e+10 2.710e+10 7.984e+10 2.295e+10 8.705e+10 1.839e+10 9.481e+10 1.335e+10 1.031e+11 7.785e+09 1.119e+11 1.636e+09 1.212e+11 -5.129e+09 1.309e+11 -1.254e+10 1.410e+11 -2.062e+10 1.514e+11 -2.937e+10 1.619e+11 -3.880e+10 1.727e+11 -4.889e+10 1.835e+11 -5.964e+10 1.942e+11 -7.101e+10 2.049e+11 -8.299e+10 2.153e+11 -9.553e+10 2.255e+11 -1.086e+11 2.353e+11 -1.221e+11 2.446e+11 -1.361e+11 2.534e+11 -1.504e+11 2.616e+11 -1.651e+11 2.690e+11 -1.801e+11 2.757e+11 -1.952e+11 2.816e+11 -2.105e+11 2.866e+11 -2.259e+11 2.906e+11 -2.413e+11 2.937e+11 -2.566e+11 2.957e+11 -2.718e+11 2.966e+11 -2.868e+11 2.964e+11 -3.015e+11 2.951e+11 -3.159e+11 2.926e+11 -3.299e+11 2.890e+11 -3.434e+11 2.843e+11 -3.563e+11 2.783e+11 -3.686e+11 2.712e+11 -3.801e+11 2.629e+11 -3.909e+11 2.535e+11 -4.008e+11 2.431e+11 -4.097e+11 2.316e+11 -4.178e+11 2.192e+11 -4.247e+11 2.058e+11 -4.306e+11 1.917e+11 -4.354e+11 1.767e+11 -4.390e+11 1.611e+11 -4.414e+11 1.450e+11 -4.427e+11 1.283e+11 -4.427e+11 1.113e+11 -4.415e+11 9.394e+10 -4.391e+11 7.642e+10 0.005 -52.363 -51.281 -50.198 -49.115 -48.089 -47.168 -46.341 -45.602 -44.943 -44.360 -43.848 -43.405 -43.027 -42.712 -42.459 -42.266 -42.133 -42.059 -42.045 -42.091 -42.199 -42.369 -42.604 -42.907 -43.281 -43.731 -44.262 -44.882 -45.599 -46.424 -47.372 -48.464 -49.725 -51.194 -52.928 -55.019 -57.628 -61.085 -66.262 -77.509 -74.609 -67.112 -63.739 -61.879 -60.837 -60.340 -60.224 -60.325 -60.390 -60.064 -59.073 -57.484 -55.611 -53.720 -51.944 -50.326 -48.872 -47.572 -46.412 -45.379 -44.461 -43.648 -42.932 -42.306 -41.763 -41.300 -40.913 -40.600 -40.357 -40.185 -40.081 -40.047 -40.081 -40.186 -40.362 -40.613 -40.940 -41.347 -41.840 -42.423 -43.103 -43.889 -44.788 -45.814 -46.978 -48.293 -49.774 -51.430 -53.260 -55.244 -57.323 -59.418 -61.500 -63.749 -66.748 -71.015 -69.982 -64.250 -58.957 -55.012 -51.874 -49.261 -47.024 -45.072 -43.348 -41.813 -40.438 -39.201 -38.085 -37.080 -36.174 -35.359 -34.629 -33.979 -33.405 -32.905 -32.474 -32.113 -31.820 -31.594 -31.436 -31.347 -31.328 -31.382 -31.511 -31.719 -32.012 -32.395 -32.876 -33.466 -34.178 -35.027 -36.036 -37.233 -38.657 -40.363 -42.425 -44.941 -47.992 -51.338 -53.741 -53.799 -52.767 -52.376 -53.094 -54.165 -52.799 -48.067 -43.291 -39.369 -36.111 -33.325 -30.888 -28.717 -26.759 -24.975 -23.336 -21.820 -20.413 -19.099 -17.869 -16.713 -15.626 -14.600 -13.631 -12.715 -11.847 -11.024 -10.244 -9.503 -8.801 -8.134 -7.501 -6.901 -6.332 -5.793 -5.283 -4.801 -4.345 -3.915 -3.511 -3.131 -2.775 -2.442 -2.132 -1.845 -1.579 -1.335 -1.112 -0.911 -0.729 -0.569 -0.428 -0.308 -0.207 -0.127 -0.066 -0.024 -0.002 0.000 -0.017 -0.053 -0.109 -0.185 -0.281 -0.396 -0.531 -0.687 -0.864 -1.061 -1.279 -1.519 -1.780 -2.064 -2.370 -2.700 -3.053 -3.430 -3.832 -4.260 -4.715 -5.197 -5.707 -6.246 -6.817 -7.420 -8.056 -8.728 -9.437 -10.186 -10.977 -11.813 -12.698 -13.635 -14.628 -15.685 -16.810 -18.013 -19.302 -20.690 -22.194 -23.833 -25.637 -27.646 -29.922 -32.563 -35.749 -39.859 -46.006 -57.274 -54.642 -47.239 -44.318 -42.951 -42.406 -42.400 -42.765 -43.314 -43.759 -43.717 -42.969 -41.666 -40.135 -38.624 -37.246 -36.034 -34.987 -34.092 -33.335 -32.702 -32.182 -31.764 -31.440 -31.204 -31.050 -30.974 -30.973 -31.044 -31.186 -31.397 -31.678 -32.028 -32.448 -32.940 -33.504 -34.144 -34.863 -35.664 -36.553 -37.535 -38.616 -39.804 -41.105 -42.529 -44.084 -45.776 -47.609 -49.582 -51.694 -53.944 -56.355 -58.957 -61.545 -62.915 -61.506 -58.281 -55.074 -52.315 -49.965 -47.944 -46.187 -44.648 -43.291 -42.090 -41.026 -40.082 -39.246 -38.507 -37.857 -37.289 -36.798 -36.378 -36.026 -35.739 -35.514 -35.349 -35.241 -35.190 -35.195 -35.255 -35.370 -35.540 -35.765 -36.047 -36.386 -36.783 -37.242 -37.764 -38.352 -39.010 -39.742 -40.555 -41.454 -42.447 -43.545 -44.759 -46.105 -47.602 -49.274 -51.153 -53.280 -55.708 -58.507 -61.749 -65.449 -69.347 -72.578 -74.589 -75.897 -74.722 -70.236 -65.707 -61.991 -58.960 -56.442 -54.311 -52.485 -50.902 -49.520 -48.307 -47.240 -46.300 -45.473 -44.747 -44.113 -43.564 -43.092 -42.694 -42.364 -42.099 -41.897 -41.755 -41.671 -41.643 -41.672 -41.756 -41.894 -42.088 -42.336 -42.641 -43.002 -43.422 -43.902 -44.444 -45.052 -45.729 -46.479 -47.308 -48.178 -49.049 -49.919 0 1 1.0 4353721066.7 S1 VV 17.14 22.7 0.05 2.080e+09 -4.638e+09 8.978e+09 -8.948e+09 2.291e+10 -1.565e+10 4.673e+10 -2.467e+10 8.342e+10 -3.600e+10 1.362e+11 -4.952e+10 2.088e+11 -6.507e+10 3.053e+11 -8.238e+10 4.296e+11 -1.010e+11 5.866e+11 -1.205e+11 7.812e+11 -1.402e+11 1.018e+12 -1.593e+11 1.303e+12 -1.769e+11 1.642e+12 -1.919e+11 2.039e+12 -2.031e+11 2.504e+12 -2.090e+11 3.040e+12 -2.080e+11 3.653e+12 -1.986e+11 4.349e+12 -1.786e+11 5.135e+12 -1.462e+11 6.016e+12 -9.903e+10 6.998e+12 -3.450e+10 8.087e+12 4.992e+10 9.288e+12 1.568e+11 1.060e+13 2.890e+11 1.204e+13 4.496e+11 1.361e+13 6.416e+11 1.530e+13 8.680e+11 1.713e+13 1.132e+12 1.909e+13 1.437e+12 2.119e+13 1.786e+12 2.343e+13 2.181e+12 2.581e+13 2.626e+12 2.832e+13 3.123e+12 3.098e+13 3.675e+12 3.376e+13 4.283e+12 3.668e+13 4.949e+12 3.973e+13 5.675e+12 4.290e+13 6.461e+12 4.618e+13 7.307e+12 4.957e+13 8.213e+12 5.307e+13 9.180e+12 5.666e+13 1.020e+13 6.034e+13 1.128e+13 6.410e+13 1.242e+13 6.792e+13 1.360e+13 7.180e+13 1.484e+13 7.572e+13 1.611e+13 7.968e+13 1.743e+13 8.366e+13 1.879e+13 8.765e+13 2.017e+13 9.165e+13 2.158e+13 9.564e+13 2.302e+13 9.961e+13 2.447e+13 1.035e+14 2.594e+13 1.074e+14 2.741e+13 1.113e+14 2.889e+13 1.151e+14 3.036e+13 1.188e+14 3.183e+13 1.225e+14 3.330e+13 1.260e+14 3.475e+13 1.295e+14 3.620e+13 1.330e+14 3.763e+13 1.363e+14 3.904e+13 1.395e+14 4.043e+13 1.426e+14 4.180e+13 1.456e+14 4.314e+13 1.484e+14 4.445e+13 1.512e+14 4.573e+13 1.538e+14 4.698e+13 1.563e+14 4.820e+13 1.587e+14 4.938e+13 1.610e+14 5.053e+13 1.631e+14 5.163e+13 1.652e+14 5.270e+13 1.671e+14 5.374e+13 1.689e+14 5.473e+13 1.706e+14 5.568e+13 1.722e+14 5.659e+13 1.737e+14 5.745e+13 1.751e+14 5.828e+13 1.764e+14 5.906e+13 1.776e+14 5.980e+13 1.788e+14 6.050e+13 1.799e+14 6.115e+13 1.810e+14 6.177e+13 1.820e+14 6.236e+13 1.829e+14 6.291e+13 1.839e+14 6.343e+13 1.848e+14 6.392e+13 1.858e+14 6.438e+13 1.867e+14 6.483e+13 1.876e+14 6.525e+13 1.886e+14 6.567e+13 1.896e+14 6.608e+13 1.906e+14 6.648e+13 1.916e+14 6.689e+13 1.927e+14 6.730e+13 1.939e+14 6.773e+13 1.951e+14 6.817e+13 1.963e+14 6.864e+13 1.977e+14 6.915e+13 1.991e+14 6.969e+13 2.005e+14 7.027e+13 2.020e+14 7.089e+13 2.036e+14 7.155e+13 2.052e+14 7.225e+13 2.069e+14 7.301e+13 2.087e+14 7.381e+13 2.105e+14 7.467e+13 2.123e+14 7.559e+13 2.142e+14 7.656e+13 2.161e+14 7.758e+13 2.180e+14 7.867e+13 2.200e+14 7.981e+13 2.220e+14 8.101e+13 2.240e+14 8.227e+13 2.260e+14 8.358e+13 2.280e+14 8.495e+13 2.300e+14 8.638e+13 2.320e+14 8.785e+13 2.340e+14 8.939e+13 2.360e+14 9.097e+13 2.379e+14 9.260e+13 2.398e+14 9.428e+13 2.417e+14 9.601e+13 2.435e+14 9.779e+13 2.452e+14 9.960e+13 2.469e+14 1.015e+14 2.485e+14 1.034e+14 2.500e+14 1.053e+14 2.514e+14 1.072e+14 2.527e+14 1.092e+14 2.539e+14 1.112e+14 2.549e+14 1.132e+14 2.558e+14 1.153e+14 2.565e+14 1.173e+14 2.571e+14 1.193e+14 2.574e+14 1.213e+14 2.576e+14 1.233e+14 2.575e+14 1.252e+14 2.573e+14 1.271e+14 2.568e+14 1.290e+14 2.560e+14 1.308e+14 2.550e+14 1.325e+14 2.537e+14 1.341e+14 2.522e+14 1.356e+14 2.503e+14 1.370e+14 2.482e+14 1.383e+14 2.457e+14 1.394e+14 2.430e+14 1.404e+14 2.399e+14 1.412e+14 2.366e+14 1.418e+14 2.329e+14 1.422e+14 2.290e+14 1.425e+14 2.248e+14 1.425e+14 2.203e+14 1.424e+14 2.156e+14 1.420e+14 2.106e+14 1.414e+14 2.054e+14 1.406e+14 2.000e+14 1.396e+14 1.944e+14 1.384e+14 1.886e+14 1.370e+14 1.827e+14 1.354e+14 1.766e+14 1.335e+14 1.704e+14 1.315e+14 1.642e+14 1.293e+14 1.578e+14 1.270e+14 1.514e+14 1.245e+14 1.450e+14 1.218e+14 1.386e+14 1.190e+14 1.321e+14 1.161e+14 1.257e+14 1.131e+14 1.194e+14 1.099e+14 1.131e+14 1.067e+14 1.069e+14 1.034e+14 1.008e+14 1.000e+14 9.483e+13 9.661e+13 8.897e+13 9.314e+13 8.326e+13 8.965e+13 7.769e+13 8.612e+13 7.229e+13 8.258e+13 6.706e+13 7.903e+13 6.202e+13 7.549e+13 5.717e+13 7.198e+13 5.252e+13 6.849e+13 4.807e+13 6.504e+13 4.384e+13 6.164e+13 3.981e+13 5.830e+13 3.600e+13 5.502e+13 3.241e+13 5.181e+13 2.903e+13 4.868e+13 2.587e+13 4.564e+13 2.292e+13 4.269e+13 2.018e+13 3.983e+13 1.764e+13 3.708e+13 1.531e+13 3.444e+13 1.317e+13 3.191e+13 1.122e+13 2.949e+13 9.450e+12 2.719e+13 7.850e+12 2.501e+13 6.413e+12 2.295e+13 5.132e+12 2.101e+13 3.994e+12 1.919e+13 2.990e+12 1.749e+13 2.112e+12 1.590e+13 1.348e+12 1.443e+13 6.886e+11 1.307e+13 1.249e+11 1.182e+13 -3.532e+11 1.067e+13 -7.545e+11 9.614e+12 -1.087e+12 8.651e+12 -1.360e+12 7.775e+12 -1.580e+12 6.978e+12 -1.753e+12 6.256e+12 -1.887e+12 5.603e+12 -1.986e+12 5.012e+12 -2.056e+12 4.479e+12 -2.100e+12 3.998e+12 -2.123e+12 3.564e+12 -2.126e+12 3.172e+12 -2.114e+12 2.818e+12 -2.088e+12 2.498e+12 -2.050e+12 2.209e+12 -2.000e+12 1.947e+12 -1.941e+12 1.710e+12 -1.874e+12 1.495e+12 -1.800e+12 1.300e+12 -1.719e+12 1.124e+12 -1.632e+12 9.658e+11 -1.541e+12 8.229e+11 -1.447e+12 6.948e+11 -1.349e+12 5.803e+11 -1.250e+12 4.785e+11 -1.151e+12 3.888e+11 -1.051e+12 3.102e+11 -9.527e+11 2.419e+11 -8.563e+11 1.833e+11 -7.626e+11 1.337e+11 -6.726e+11 9.227e+10 -5.868e+11 5.835e+10 -5.060e+11 3.121e+10 -4.306e+11 1.010e+10 -3.610e+11 -5.662e+09 -2.977e+11 -1.678e+10 -2.408e+11 -2.396e+10 -1.904e+11 -2.785e+10 -1.466e+11 -2.907e+10 -1.092e+11 -2.823e+10 -7.802e+10 -2.587e+10 -5.284e+10 -2.250e+10 -3.327e+10 -1.860e+10 -1.887e+10 -1.462e+10 -9.059e+09 -1.103e+10 -2.906e+09 -8.357e+09 1.157e+09 -7.090e+09 5.213e+09 -7.120e+09 1.072e+10 -7.726e+09 1.807e+10 -8.211e+09 2.701e+10 -8.212e+09 3.718e+10 -7.593e+09 4.814e+10 -6.339e+09 5.948e+10 -4.490e+09 7.084e+10 -2.119e+09 8.186e+10 6.756e+08 9.225e+10 3.790e+09 1.018e+11 7.118e+09 1.102e+11 1.055e+10 1.175e+11 1.398e+10 1.234e+11 1.733e+10 1.278e+11 2.050e+10 1.309e+11 2.343e+10 1.324e+11 2.606e+10 1.326e+11 2.835e+10 1.314e+11 3.025e+10 1.289e+11 3.177e+10 1.253e+11 3.287e+10 1.207e+11 3.357e+10 1.151e+11 3.387e+10 1.088e+11 3.378e+10 1.018e+11 3.334e+10 9.446e+10 3.257e+10 8.677e+10 3.150e+10 7.893e+10 3.016e+10 7.105e+10 2.860e+10 6.329e+10 2.685e+10 5.576e+10 2.495e+10 4.854e+10 2.295e+10 4.173e+10 2.088e+10 3.541e+10 1.879e+10 2.961e+10 1.670e+10 2.438e+10 1.466e+10 1.973e+10 1.270e+10 1.567e+10 1.084e+10 1.219e+10 9.116e+09 9.254e+09 7.534e+09 6.836e+09 6.111e+09 4.894e+09 4.858e+09 3.374e+09 3.776e+09 2.220e+09 2.863e+09 1.394e+09 2.100e+09 7.858e+08 1.525e+09 3.970e+08 1.058e+09 1.575e+08 7.100e+08 2.296e+07 4.606e+08 -4.263e+07 2.882e+08 -6.609e+07 1.728e+08 -6.512e+07 9.674e+07 -5.007e+07 4.721e+07 -2.823e+07 1.696e+07 -7.970e+06 2.262e+06 1.949e+06 -1.359e+06 2.817e+07 -1.030e+07 1.093e+08 -2.409e+07 2.726e+08 -3.422e+07 5.479e+08 -2.932e+07 9.672e+08 4.609e+06 1.564e+09 8.370e+07 2.368e+09 2.251e+08 3.410e+09 4.468e+08 4.719e+09 7.666e+08 6.317e+09 1.200e+09 8.222e+09 1.763e+09 1.045e+10 2.469e+09 1.301e+10 3.325e+09 1.590e+10 4.338e+09 1.913e+10 5.514e+09 2.268e+10 6.850e+09 2.653e+10 8.345e+09 3.067e+10 9.993e+09 3.506e+10 1.178e+10 3.968e+10 1.371e+10 4.448e+10 1.575e+10 4.943e+10 1.790e+10 5.447e+10 2.013e+10 5.956e+10 2.244e+10 6.464e+10 2.480e+10 6.965e+10 2.720e+10 7.455e+10 2.962e+10 7.926e+10 3.203e+10 8.375e+10 3.442e+10 8.795e+10 3.677e+10 9.182e+10 3.906e+10 9.529e+10 4.126e+10 9.833e+10 4.336e+10 1.009e+11 4.533e+10 1.029e+11 4.716e+10 1.045e+11 4.881e+10 1.054e+11 5.027e+10 1.058e+11 5.151e+10 1.056e+11 5.252e+10 1.049e+11 5.328e+10 1.036e+11 5.377e+10 1.017e+11 5.397e+10 9.938e+10 5.388e+10 9.658e+10 5.350e+10 9.335e+10 5.281e+10 8.974e+10 5.182e+10 8.580e+10 5.055e+10 8.159e+10 4.900e+10 7.716e+10 4.720e+10 7.258e+10 4.516e+10 6.789e+10 4.291e+10 6.315e+10 4.050e+10 5.842e+10 3.794e+10 5.374e+10 3.527e+10 4.916e+10 3.254e+10 4.471e+10 2.978e+10 4.044e+10 2.702e+10 3.637e+10 2.431e+10 3.252e+10 2.168e+10 2.891e+10 1.914e+10 2.556e+10 1.674e+10 2.247e+10 1.448e+10 1.965e+10 1.239e+10 1.708e+10 1.048e+10 1.478e+10 8.747e+09 1.272e+10 7.200e+09 1.090e+10 5.838e+09 9.300e+09 4.651e+09 7.912e+09 3.633e+09 6.717e+09 2.773e+09 5.699e+09 2.054e+09 4.840e+09 1.462e+09 4.125e+09 9.804e+08 3.537e+09 5.924e+08 3.060e+09 2.818e+08 2.682e+09 3.322e+07 2.386e+09 -1.678e+08 2.160e+09 -3.331e+08 1.994e+09 -4.726e+08 1.876e+09 -5.935e+08 1.798e+09 -7.005e+08 1.754e+09 -7.963e+08 1.738e+09 -8.821e+08 1.746e+09 -9.580e+08 1.775e+09 -1.023e+09 1.823e+09 -1.078e+09 1.890e+09 -1.120e+09 1.973e+09 -1.149e+09 2.073e+09 -1.164e+09 2.189e+09 -1.165e+09 2.320e+09 -1.150e+09 2.466e+09 -1.119e+09 2.627e+09 -1.072e+09 2.803e+09 -1.007e+09 2.992e+09 -9.225e+08 3.194e+09 -8.185e+08 3.408e+09 -6.938e+08 3.632e+09 -5.469e+08 3.865e+09 -3.772e+08 4.104e+09 -1.839e+08 4.346e+09 3.361e+07 4.589e+09 2.751e+08 4.830e+09 5.399e+08 5.064e+09 8.272e+08 5.287e+09 1.135e+09 5.496e+09 1.460e+09 5.686e+09 1.801e+09 5.853e+09 2.152e+09 5.992e+09 2.508e+09 6.101e+09 2.863e+09 6.176e+09 3.213e+09 6.214e+09 3.551e+09 6.213e+09 3.872e+09 6.172e+09 4.169e+09 6.091e+09 4.436e+09 5.968e+09 4.669e+09 5.806e+09 4.862e+09 5.607e+09 5.012e+09 5.372e+09 5.116e+09 5.105e+09 5.172e+09 4.811e+09 5.180e+09 4.493e+09 5.140e+09 4.156e+09 5.054e+09 3.806e+09 4.924e+09 3.447e+09 4.755e+09 3.086e+09 4.549e+09 2.726e+09 4.313e+09 2.374e+09 4.052e+09 2.033e+09 3.770e+09 1.708e+09 3.475e+09 1.403e+09 3.170e+09 1.121e+09 2.863e+09 8.636e+08 2.557e+09 6.334e+08 2.258e+09 4.313e+08 1.969e+09 2.578e+08 1.695e+09 1.123e+08 1.439e+09 -6.259e+06 1.203e+09 -9.952e+07 9.883e+08 -1.702e+08 7.971e+08 -2.212e+08 6.299e+08 -2.567e+08 4.861e+08 -2.809e+08 3.644e+08 -2.988e+08 2.620e+08 -3.148e+08 1.748e+08 -3.331e+08 9.664e+07 -3.556e+08 2.086e+07 -3.827e+08 -5.944e+07 -4.128e+08 -1.504e+08 -4.429e+08 -2.567e+08 -4.695e+08 -3.819e+08 -4.886e+08 -5.285e+08 -4.961e+08 -6.982e+08 -4.877e+08 -8.923e+08 -4.592e+08 -1.112e+09 -4.059e+08 -1.358e+09 -3.232e+08 -1.630e+09 -2.061e+08 -1.930e+09 -4.929e+07 -2.258e+09 1.526e+08 -2.613e+09 4.055e+08 -2.996e+09 7.153e+08 -3.406e+09 1.088e+09 -3.842e+09 1.530e+09 -4.304e+09 2.048e+09 -4.791e+09 2.647e+09 -5.301e+09 3.334e+09 -5.834e+09 4.115e+09 -6.387e+09 4.996e+09 -6.959e+09 5.981e+09 -7.550e+09 7.076e+09 -8.157e+09 8.284e+09 -8.780e+09 9.609e+09 -9.417e+09 1.105e+10 -1.007e+10 1.262e+10 -1.073e+10 1.430e+10 -1.141e+10 1.611e+10 -1.209e+10 1.804e+10 -1.279e+10 2.008e+10 -1.350e+10 2.223e+10 -1.422e+10 2.449e+10 -1.495e+10 2.684e+10 -1.569e+10 2.929e+10 -1.643e+10 3.181e+10 -1.718e+10 3.440e+10 -1.794e+10 3.704e+10 -1.869e+10 3.972e+10 -1.943e+10 4.243e+10 -2.017e+10 4.515e+10 -2.089e+10 4.786e+10 -2.158e+10 5.055e+10 -2.224e+10 5.320e+10 -2.286e+10 5.579e+10 -2.343e+10 5.830e+10 -2.395e+10 6.072e+10 -2.441e+10 6.304e+10 -2.479e+10 6.524e+10 -2.509e+10 6.730e+10 -2.530e+10 6.922e+10 -2.541e+10 7.098e+10 -2.542e+10 7.258e+10 -2.533e+10 7.401e+10 -2.513e+10 7.525e+10 -2.481e+10 7.632e+10 -2.437e+10 7.720e+10 -2.382e+10 7.789e+10 -2.316e+10 7.839e+10 -2.238e+10 7.870e+10 -2.148e+10 7.883e+10 -2.048e+10 7.878e+10 -1.937e+10 7.854e+10 -1.816e+10 7.813e+10 -1.684e+10 7.754e+10 -1.544e+10 7.679e+10 -1.394e+10 7.587e+10 -1.236e+10 7.479e+10 -1.069e+10 7.357e+10 -8.958e+09 7.221e+10 -7.150e+09 7.070e+10 -5.275e+09 6.907e+10 -3.342e+09 6.733e+10 -1.352e+09 6.547e+10 6.907e+08 6.352e+10 2.779e+09 6.149e+10 4.911e+09 5.939e+10 7.087e+09 5.724e+10 9.301e+09 5.506e+10 1.156e+10 5.286e+10 1.386e+10 5.067e+10 1.622e+10 4.851e+10 1.866e+10 4.639e+10 2.118e+10 4.431e+10 2.382e+10 4.229e+10 2.660e+10 4.032e+10 2.957e+10 3.840e+10 3.275e+10 3.652e+10 3.621e+10 3.464e+10 3.998e+10 3.273e+10 4.412e+10 3.076e+10 4.866e+10 2.867e+10 5.364e+10 2.641e+10 5.910e+10 2.393e+10 6.504e+10 2.117e+10 7.149e+10 1.807e+10 7.843e+10 1.460e+10 8.586e+10 1.070e+10 9.376e+10 6.335e+09 1.021e+11 1.481e+09 1.108e+11 -3.897e+09 1.199e+11 -9.814e+09 1.293e+11 -1.628e+10 1.389e+11 -2.331e+10 1.487e+11 -3.090e+10 1.587e+11 -3.905e+10 1.688e+11 -4.775e+10 1.789e+11 -5.700e+10 1.889e+11 -6.677e+10 1.989e+11 -7.706e+10 2.087e+11 -8.784e+10 2.183e+11 -9.910e+10 2.277e+11 -1.108e+11 2.368e+11 -1.229e+11 2.455e+11 -1.355e+11 2.538e+11 -1.484e+11 2.617e+11 -1.616e+11 2.691e+11 -1.752e+11 2.759e+11 -1.890e+11 2.821e+11 -2.031e+11 2.877e+11 -2.173e+11 2.925e+11 -2.317e+11 2.966e+11 -2.461e+11 3.000e+11 -2.606e+11 3.024e+11 -2.750e+11 3.039e+11 -2.894e+11 3.045e+11 -3.035e+11 3.040e+11 -3.174e+11 3.025e+11 -3.310e+11 2.998e+11 -3.442e+11 2.960e+11 -3.569e+11 2.911e+11 -3.691e+11 2.850e+11 -3.805e+11 2.777e+11 -3.912e+11 2.693e+11 -4.012e+11 2.597e+11 -4.101e+11 2.491e+11 -4.182e+11 2.373e+11 -4.251e+11 2.246e+11 -4.310e+11 2.109e+11 -4.357e+11 1.964e+11 -4.392e+11 1.811e+11 0.005 -51.591 -50.498 -49.405 -48.312 -47.274 -46.338 -45.494 -44.735 -44.054 -43.447 -42.909 -42.436 -42.026 -41.677 -41.386 -41.152 -40.974 -40.852 -40.784 -40.772 -40.816 -40.915 -41.073 -41.289 -41.566 -41.906 -42.313 -42.789 -43.341 -43.972 -44.690 -45.503 -46.420 -47.454 -48.619 -49.934 -51.423 -53.114 -55.034 -57.205 -59.597 -62.015 -63.914 -64.658 -64.417 -63.889 -63.484 -63.253 -63.010 -62.412 -61.184 -59.391 -57.340 -55.293 -53.379 -51.639 -50.074 -48.674 -47.423 -46.305 -45.309 -44.422 -43.637 -42.945 -42.340 -41.817 -41.372 -41.002 -40.703 -40.475 -40.316 -40.226 -40.204 -40.251 -40.367 -40.555 -40.816 -41.154 -41.571 -42.071 -42.661 -43.345 -44.130 -45.024 -46.035 -47.168 -48.429 -49.813 -51.300 -52.835 -54.314 -55.573 -56.438 -56.815 -56.732 -56.265 -55.459 -54.331 -52.914 -51.290 -49.565 -47.831 -46.149 -44.556 -43.068 -41.689 -40.418 -39.250 -38.179 -37.202 -36.311 -35.503 -34.773 -34.119 -33.536 -33.023 -32.578 -32.200 -31.888 -31.642 -31.463 -31.350 -31.306 -31.333 -31.434 -31.612 -31.872 -32.220 -32.664 -33.213 -33.880 -34.680 -35.634 -36.770 -38.125 -39.751 -41.720 -44.128 -47.046 -50.230 -52.427 -52.217 -50.823 -49.942 -50.130 -51.936 -57.017 -59.676 -50.537 -43.878 -39.389 -35.908 -33.024 -30.541 -28.352 -26.390 -24.609 -22.978 -21.473 -20.077 -18.775 -17.557 -16.415 -15.340 -14.326 -13.369 -12.464 -11.607 -10.795 -10.025 -9.295 -8.603 -7.946 -7.323 -6.732 -6.171 -5.641 -5.139 -4.665 -4.217 -3.795 -3.398 -3.025 -2.676 -2.351 -2.048 -1.767 -1.508 -1.270 -1.054 -0.858 -0.683 -0.528 -0.394 -0.279 -0.184 -0.109 -0.053 -0.017 0.000 -0.003 -0.024 -0.065 -0.126 -0.206 -0.306 -0.425 -0.565 -0.725 -0.905 -1.106 -1.327 -1.570 -1.835 -2.121 -2.430 -2.762 -3.117 -3.496 -3.900 -4.329 -4.783 -5.265 -5.775 -6.313 -6.882 -7.482 -8.115 -8.782 -9.485 -10.226 -11.007 -11.832 -12.702 -13.622 -14.595 -15.626 -16.720 -17.883 -19.123 -20.450 -21.875 -23.412 -25.079 -26.901 -28.908 -31.145 -33.672 -36.569 -39.922 -43.677 -46.975 -48.116 -47.374 -46.347 -45.772 -45.666 -45.845 -45.995 -45.716 -44.773 -43.305 -41.635 -40.004 -38.522 -37.217 -36.086 -35.117 -34.292 -33.596 -33.018 -32.546 -32.171 -31.887 -31.687 -31.567 -31.524 -31.553 -31.654 -31.825 -32.065 -32.374 -32.752 -33.200 -33.719 -34.311 -34.979 -35.725 -36.554 -37.469 -38.474 -39.575 -40.775 -42.079 -43.487 -44.995 -46.592 -48.253 -49.937 -51.578 -53.094 -54.382 -55.315 -55.731 -55.474 -54.527 -53.071 -51.369 -49.626 -47.954 -46.403 -44.985 -43.702 -42.545 -41.505 -40.573 -39.742 -39.002 -38.348 -37.774 -37.274 -36.845 -36.483 -36.185 -35.949 -35.772 -35.652 -35.590 -35.583 -35.631 -35.733 -35.891 -36.104 -36.373 -36.699 -37.083 -37.528 -38.037 -38.611 -39.254 -39.972 -40.769 -41.652 -42.629 -43.710 -44.907 -46.236 -47.718 -49.377 -51.251 -53.388 -55.860 -58.778 -62.329 -66.862 -73.216 -84.675 -87.638 -82.111 -78.545 -72.967 -67.839 -63.753 -60.476 -57.784 -55.527 -53.603 -51.945 -50.503 -49.242 -48.135 -47.163 -46.310 -45.562 -44.911 -44.347 -43.864 -43.457 -43.122 -42.853 -42.650 -42.509 -42.428 -42.407 -42.443 -42.537 -42.689 -42.898 -43.165 -43.491 -43.878 -44.327 -44.840 -45.422 -46.075 -46.803 -47.614 -48.512 -49.457 -50.403 -51.349 0 1 1.0 4353721066.7 S1 VH 17.14 22.7 0.05 4.649e+09 -1.239e+09 1.201e+10 1.189e+09 2.554e+10 7.279e+09 4.710e+10 1.911e+10 7.872e+10 3.888e+10 1.226e+11 6.899e+10 1.813e+11 1.122e+11 2.574e+11 1.716e+11 3.538e+11 2.504e+11 4.735e+11 3.524e+11 6.199e+11 4.817e+11 7.962e+11 6.423e+11 1.006e+12 8.387e+11 1.253e+12 1.076e+12 1.541e+12 1.359e+12 1.875e+12 1.694e+12 2.258e+12 2.087e+12 2.693e+12 2.541e+12 3.184e+12 3.063e+12 3.736e+12 3.660e+12 4.351e+12 4.336e+12 5.033e+12 5.097e+12 5.786e+12 5.951e+12 6.612e+12 6.901e+12 7.514e+12 7.953e+12 8.495e+12 9.114e+12 9.556e+12 1.039e+13 1.070e+13 1.178e+13 1.193e+13 1.329e+13 1.324e+13 1.493e+13 1.463e+13 1.670e+13 1.611e+13 1.859e+13 1.768e+13 2.062e+13 1.932e+13 2.279e+13 2.105e+13 2.508e+13 2.286e+13 2.752e+13 2.475e+13 3.008e+13 2.671e+13 3.277e+13 2.874e+13 3.559e+13 3.084e+13 3.853e+13 3.301e+13 4.158e+13 3.523e+13 4.475e+13 3.751e+13 4.802e+13 3.984e+13 5.138e+13 4.222e+13 5.484e+13 4.464e+13 5.837e+13 4.710e+13 6.197e+13 4.959e+13 6.564e+13 5.211e+13 6.935e+13 5.465e+13 7.310e+13 5.720e+13 7.688e+13 5.976e+13 8.067e+13 6.233e+13 8.447e+13 6.491e+13 8.828e+13 6.747e+13 9.206e+13 7.002e+13 9.582e+13 7.256e+13 9.956e+13 7.507e+13 1.032e+14 7.756e+13 1.069e+14 8.001e+13 1.104e+14 8.243e+13 1.140e+14 8.481e+13 1.174e+14 8.715e+13 1.208e+14 8.943e+13 1.240e+14 9.166e+13 1.272e+14 9.383e+13 1.303e+14 9.593e+13 1.333e+14 9.796e+13 1.361e+14 9.993e+13 1.389e+14 1.018e+14 1.415e+14 1.036e+14 1.440e+14 1.054e+14 1.464e+14 1.070e+14 1.486e+14 1.086e+14 1.507e+14 1.101e+14 1.527e+14 1.116e+14 1.546e+14 1.129e+14 1.563e+14 1.142e+14 1.580e+14 1.154e+14 1.595e+14 1.166e+14 1.609e+14 1.177e+14 1.621e+14 1.188e+14 1.633e+14 1.198e+14 1.644e+14 1.208e+14 1.653e+14 1.218e+14 1.662e+14 1.227e+14 1.670e+14 1.236e+14 1.678e+14 1.246e+14 1.684e+14 1.255e+14 1.690e+14 1.264e+14 1.696e+14 1.273e+14 1.702e+14 1.283e+14 1.707e+14 1.292e+14 1.712e+14 1.302e+14 1.717e+14 1.313e+14 1.722e+14 1.323e+14 1.727e+14 1.334e+14 1.732e+14 1.346e+14 1.738e+14 1.357e+14 1.744e+14 1.370e+14 1.750e+14 1.382e+14 1.757e+14 1.395e+14 1.765e+14 1.409e+14 1.773e+14 1.423e+14 1.782e+14 1.437e+14 1.792e+14 1.452e+14 1.802e+14 1.467e+14 1.813e+14 1.482e+14 1.825e+14 1.497e+14 1.837e+14 1.512e+14 1.850e+14 1.528e+14 1.864e+14 1.543e+14 1.878e+14 1.559e+14 1.893e+14 1.574e+14 1.908e+14 1.590e+14 1.924e+14 1.605e+14 1.940e+14 1.620e+14 1.957e+14 1.635e+14 1.975e+14 1.649e+14 1.992e+14 1.663e+14 2.010e+14 1.676e+14 2.029e+14 1.690e+14 2.047e+14 1.702e+14 2.066e+14 1.714e+14 2.085e+14 1.726e+14 2.104e+14 1.736e+14 2.123e+14 1.746e+14 2.142e+14 1.756e+14 2.161e+14 1.764e+14 2.180e+14 1.772e+14 2.199e+14 1.779e+14 2.217e+14 1.784e+14 2.236e+14 1.789e+14 2.253e+14 1.793e+14 2.271e+14 1.795e+14 2.287e+14 1.796e+14 2.303e+14 1.795e+14 2.319e+14 1.794e+14 2.333e+14 1.790e+14 2.346e+14 1.785e+14 2.358e+14 1.778e+14 2.369e+14 1.770e+14 2.379e+14 1.761e+14 2.387e+14 1.749e+14 2.394e+14 1.735e+14 2.398e+14 1.720e+14 2.401e+14 1.702e+14 2.401e+14 1.682e+14 2.399e+14 1.660e+14 2.395e+14 1.636e+14 2.388e+14 1.610e+14 2.379e+14 1.582e+14 2.367e+14 1.552e+14 2.352e+14 1.520e+14 2.334e+14 1.486e+14 2.313e+14 1.451e+14 2.290e+14 1.413e+14 2.263e+14 1.374e+14 2.234e+14 1.334e+14 2.202e+14 1.292e+14 2.167e+14 1.250e+14 2.129e+14 1.206e+14 2.090e+14 1.161e+14 2.047e+14 1.116e+14 2.003e+14 1.070e+14 1.956e+14 1.023e+14 1.907e+14 9.768e+13 1.857e+14 9.302e+13 1.805e+14 8.836e+13 1.752e+14 8.374e+13 1.697e+14 7.914e+13 1.642e+14 7.460e+13 1.585e+14 7.013e+13 1.529e+14 6.574e+13 1.471e+14 6.143e+13 1.414e+14 5.722e+13 1.356e+14 5.313e+13 1.299e+14 4.915e+13 1.242e+14 4.530e+13 1.185e+14 4.159e+13 1.129e+14 3.802e+13 1.073e+14 3.460e+13 1.018e+14 3.134e+13 9.645e+13 2.823e+13 9.118e+13 2.528e+13 8.603e+13 2.249e+13 8.100e+13 1.985e+13 7.611e+13 1.739e+13 7.137e+13 1.508e+13 6.678e+13 1.293e+13 6.235e+13 1.094e+13 5.808e+13 9.101e+12 5.398e+13 7.417e+12 5.005e+13 5.882e+12 4.630e+13 4.489e+12 4.272e+13 3.234e+12 3.932e+13 2.113e+12 3.610e+13 1.116e+12 3.305e+13 2.397e+11 3.019e+13 -5.239e+11 2.750e+13 -1.182e+12 2.498e+13 -1.743e+12 2.263e+13 -2.213e+12 2.045e+13 -2.600e+12 1.844e+13 -2.912e+12 1.657e+13 -3.156e+12 1.486e+13 -3.340e+12 1.329e+13 -3.470e+12 1.185e+13 -3.553e+12 1.055e+13 -3.596e+12 9.363e+12 -3.604e+12 8.293e+12 -3.583e+12 7.328e+12 -3.538e+12 6.461e+12 -3.473e+12 5.684e+12 -3.392e+12 4.989e+12 -3.299e+12 4.369e+12 -3.196e+12 3.817e+12 -3.086e+12 3.326e+12 -2.971e+12 2.890e+12 -2.851e+12 2.503e+12 -2.729e+12 2.160e+12 -2.606e+12 1.856e+12 -2.482e+12 1.586e+12 -2.357e+12 1.348e+12 -2.231e+12 1.138e+12 -2.106e+12 9.525e+11 -1.980e+12 7.893e+11 -1.855e+12 6.462e+11 -1.731e+12 5.211e+11 -1.608e+12 4.126e+11 -1.487e+12 3.188e+11 -1.367e+12 2.386e+11 -1.250e+12 1.707e+11 -1.136e+12 1.138e+11 -1.025e+12 6.693e+10 -9.186e+11 2.910e+10 -8.164e+11 -6.981e+08 -7.192e+11 -2.336e+10 -6.274e+11 -3.976e+10 -5.413e+11 -5.075e+10 -4.615e+11 -5.713e+10 -3.880e+11 -5.966e+10 -3.212e+11 -5.905e+10 -2.610e+11 -5.599e+10 -2.077e+11 -5.110e+10 -1.610e+11 -4.495e+10 -1.209e+11 -3.808e+10 -8.726e+10 -3.095e+10 -5.970e+10 -2.395e+10 -3.796e+10 -1.745e+10 -2.164e+10 -1.172e+10 -1.031e+10 -6.986e+09 -3.489e+09 -3.465e+09 -3.564e+08 -1.440e+09 1.751e+09 -8.297e+08 5.687e+09 -2.110e+08 1.206e+10 1.382e+09 2.045e+10 4.102e+09 3.036e+10 7.863e+09 4.131e+10 1.253e+10 5.288e+10 1.796e+10 6.466e+10 2.396e+10 7.629e+10 3.035e+10 8.746e+10 3.695e+10 9.785e+10 4.358e+10 1.073e+11 5.005e+10 1.155e+11 5.622e+10 1.224e+11 6.194e+10 1.278e+11 6.708e+10 1.318e+11 7.155e+10 1.343e+11 7.527e+10 1.353e+11 7.817e+10 1.349e+11 8.023e+10 1.331e+11 8.144e+10 1.300e+11 8.180e+10 1.258e+11 8.134e+10 1.206e+11 8.012e+10 1.146e+11 7.818e+10 1.079e+11 7.559e+10 1.006e+11 7.244e+10 9.294e+10 6.882e+10 8.505e+10 6.480e+10 7.709e+10 6.047e+10 6.918e+10 5.594e+10 6.142e+10 5.127e+10 5.395e+10 4.656e+10 4.685e+10 4.188e+10 4.018e+10 3.729e+10 3.402e+10 3.287e+10 2.840e+10 2.865e+10 2.334e+10 2.468e+10 1.887e+10 2.101e+10 1.497e+10 1.764e+10 1.163e+10 1.460e+10 8.816e+09 1.190e+10 6.501e+09 9.540e+09 4.634e+09 7.500e+09 3.172e+09 5.776e+09 2.060e+09 4.347e+09 1.244e+09 3.186e+09 6.654e+08 2.278e+09 2.886e+08 1.574e+09 6.176e+07 1.046e+09 -6.040e+07 6.669e+08 -1.131e+08 4.060e+08 -1.239e+08 2.333e+08 -1.120e+08 1.232e+08 -8.883e+07 5.498e+07 -6.069e+07 1.484e+07 -3.272e+07 -5.460e+06 -1.093e+07 -1.312e+07 7.413e+06 -2.210e+07 5.208e+07 -4.295e+07 1.568e+08 -6.866e+07 3.513e+08 -8.739e+07 6.657e+08 -8.483e+07 1.132e+09 -4.419e+07 1.784e+09 5.362e+07 2.652e+09 2.287e+08 3.766e+09 5.022e+08 5.156e+09 8.955e+08 6.841e+09 1.427e+09 8.843e+09 2.117e+09 1.118e+10 2.980e+09 1.385e+10 4.029e+09 1.686e+10 5.273e+09 2.021e+10 6.719e+09 2.387e+10 8.367e+09 2.784e+10 1.022e+10 3.209e+10 1.226e+10 3.659e+10 1.449e+10 4.129e+10 1.688e+10 4.616e+10 1.944e+10 5.115e+10 2.211e+10 5.620e+10 2.490e+10 6.128e+10 2.777e+10 6.630e+10 3.069e+10 7.123e+10 3.364e+10 7.600e+10 3.658e+10 8.055e+10 3.948e+10 8.485e+10 4.232e+10 8.884e+10 4.506e+10 9.248e+10 4.766e+10 9.571e+10 5.011e+10 9.850e+10 5.237e+10 1.008e+11 5.442e+10 1.026e+11 5.622e+10 1.039e+11 5.776e+10 1.047e+11 5.902e+10 1.049e+11 5.998e+10 1.047e+11 6.063e+10 1.039e+11 6.096e+10 1.026e+11 6.097e+10 1.008e+11 6.065e+10 9.855e+10 6.000e+10 9.590e+10 5.904e+10 9.287e+10 5.778e+10 8.950e+10 5.623e+10 8.583e+10 5.441e+10 8.192e+10 5.235e+10 7.780e+10 5.007e+10 7.352e+10 4.760e+10 6.913e+10 4.498e+10 6.468e+10 4.224e+10 6.021e+10 3.940e+10 5.575e+10 3.651e+10 5.136e+10 3.360e+10 4.707e+10 3.071e+10 4.290e+10 2.785e+10 3.889e+10 2.507e+10 3.506e+10 2.239e+10 3.143e+10 1.982e+10 2.802e+10 1.740e+10 2.484e+10 1.513e+10 2.189e+10 1.303e+10 1.918e+10 1.110e+10 1.671e+10 9.356e+09 1.448e+10 7.787e+09 1.248e+10 6.395e+09 1.071e+10 5.172e+09 9.142e+09 4.113e+09 7.778e+09 3.207e+09 6.598e+09 2.441e+09 5.588e+09 1.802e+09 4.735e+09 1.275e+09 4.022e+09 8.461e+08 3.433e+09 5.006e+08 2.956e+09 2.242e+08 2.574e+09 3.105e+06 2.276e+09 -1.751e+08 2.048e+09 -3.211e+08 1.879e+09 -4.441e+08 1.759e+09 -5.503e+08 1.681e+09 -6.444e+08 1.636e+09 -7.289e+08 1.620e+09 -8.048e+08 1.628e+09 -8.721e+08 1.659e+09 -9.303e+08 1.708e+09 -9.786e+08 1.775e+09 -1.016e+09 1.859e+09 -1.041e+09 1.958e+09 -1.054e+09 2.072e+09 -1.054e+09 2.200e+09 -1.039e+09 2.341e+09 -1.010e+09 2.495e+09 -9.652e+08 2.660e+09 -9.052e+08 2.837e+09 -8.290e+08 3.022e+09 -7.362e+08 3.217e+09 -6.265e+08 3.417e+09 -4.997e+08 3.623e+09 -3.559e+08 3.831e+09 -1.951e+08 4.040e+09 -1.814e+07 4.246e+09 1.741e+08 4.447e+09 3.803e+08 4.639e+09 5.986e+08 4.820e+09 8.265e+08 4.987e+09 1.062e+09 5.135e+09 1.301e+09 5.262e+09 1.540e+09 5.366e+09 1.775e+09 5.443e+09 2.003e+09 5.492e+09 2.219e+09 5.510e+09 2.420e+09 5.496e+09 2.603e+09 5.449e+09 2.763e+09 5.370e+09 2.899e+09 5.257e+09 3.007e+09 5.113e+09 3.086e+09 4.938e+09 3.134e+09 4.735e+09 3.151e+09 4.506e+09 3.138e+09 4.255e+09 3.094e+09 3.984e+09 3.022e+09 3.698e+09 2.924e+09 3.401e+09 2.802e+09 3.096e+09 2.659e+09 2.790e+09 2.498e+09 2.484e+09 2.323e+09 2.185e+09 2.138e+09 1.895e+09 1.945e+09 1.619e+09 1.748e+09 1.359e+09 1.551e+09 1.119e+09 1.356e+09 9.007e+08 1.167e+09 7.055e+08 9.869e+08 5.349e+08 8.171e+08 3.890e+08 6.599e+08 2.679e+08 5.172e+08 1.709e+08 3.906e+08 9.662e+07 2.811e+08 4.345e+07 1.899e+08 8.977e+06 1.176e+08 -1.009e+07 6.459e+07 -1.901e+07 3.031e+07 -2.654e+07 9.578e+06 -4.071e+07 -1.010e+07 -6.274e+07 -4.105e+07 -8.932e+07 -8.928e+07 -1.168e+08 -1.567e+08 -1.418e+08 -2.440e+08 -1.612e+08 -3.513e+08 -1.721e+08 -4.792e+08 -1.712e+08 -6.279e+08 -1.557e+08 -7.976e+08 -1.223e+08 -9.889e+08 -6.774e+07 -1.202e+09 1.121e+07 -1.438e+09 1.182e+08 -1.697e+09 2.566e+08 -1.978e+09 4.303e+08 -2.284e+09 6.430e+08 -2.614e+09 8.986e+08 -2.968e+09 1.201e+09 -3.347e+09 1.554e+09 -3.751e+09 1.961e+09 -4.180e+09 2.427e+09 -4.635e+09 2.954e+09 -5.117e+09 3.547e+09 -5.625e+09 4.207e+09 -6.161e+09 4.939e+09 -6.726e+09 5.743e+09 -7.319e+09 6.623e+09 -7.943e+09 7.579e+09 -8.600e+09 8.612e+09 -9.289e+09 9.722e+09 -1.001e+10 1.091e+10 -1.077e+10 1.217e+10 -1.157e+10 1.350e+10 -1.240e+10 1.491e+10 -1.328e+10 1.637e+10 -1.419e+10 1.790e+10 -1.515e+10 1.949e+10 -1.614e+10 2.112e+10 -1.717e+10 2.278e+10 -1.824e+10 2.448e+10 -1.933e+10 2.620e+10 -2.046e+10 2.793e+10 -2.161e+10 2.966e+10 -2.277e+10 3.137e+10 -2.394e+10 3.306e+10 -2.511e+10 3.471e+10 -2.627e+10 3.631e+10 -2.741e+10 3.785e+10 -2.852e+10 3.931e+10 -2.959e+10 4.067e+10 -3.060e+10 4.193e+10 -3.155e+10 4.308e+10 -3.242e+10 4.410e+10 -3.321e+10 4.499e+10 -3.390e+10 4.574e+10 -3.448e+10 4.633e+10 -3.496e+10 4.677e+10 -3.531e+10 4.704e+10 -3.553e+10 4.716e+10 -3.563e+10 4.711e+10 -3.560e+10 4.690e+10 -3.543e+10 4.652e+10 -3.513e+10 4.599e+10 -3.469e+10 4.531e+10 -3.413e+10 4.448e+10 -3.344e+10 4.351e+10 -3.263e+10 4.240e+10 -3.170e+10 4.117e+10 -3.065e+10 3.983e+10 -2.950e+10 3.838e+10 -2.826e+10 3.683e+10 -2.691e+10 3.520e+10 -2.549e+10 3.349e+10 -2.398e+10 3.172e+10 -2.241e+10 2.990e+10 -2.078e+10 2.804e+10 -1.911e+10 2.614e+10 -1.740e+10 2.423e+10 -1.567e+10 2.232e+10 -1.394e+10 2.041e+10 -1.221e+10 1.853e+10 -1.051e+10 1.668e+10 -8.855e+09 1.488e+10 -7.260e+09 1.314e+10 -5.750e+09 1.149e+10 -4.340e+09 9.940e+09 -3.047e+09 8.506e+09 -1.886e+09 7.210e+09 -8.632e+08 6.073e+09 2.699e+07 5.116e+09 8.063e+08 4.350e+09 1.523e+09 3.765e+09 2.256e+09 3.329e+09 3.098e+09 2.980e+09 4.147e+09 2.642e+09 5.484e+09 2.242e+09 7.162e+09 1.718e+09 9.212e+09 1.022e+09 1.165e+10 1.190e+08 1.448e+10 -1.018e+09 1.770e+10 -2.409e+09 2.130e+10 -4.068e+09 2.526e+10 -6.004e+09 2.956e+10 -8.226e+09 3.419e+10 -1.074e+10 3.911e+10 -1.353e+10 4.429e+10 -1.662e+10 4.971e+10 -1.998e+10 5.532e+10 -2.362e+10 6.108e+10 -2.752e+10 6.697e+10 -3.167e+10 7.294e+10 -3.606e+10 7.894e+10 -4.067e+10 8.495e+10 -4.549e+10 9.092e+10 -5.048e+10 9.680e+10 -5.564e+10 1.026e+11 -6.095e+10 1.082e+11 -6.636e+10 1.136e+11 -7.186e+10 1.188e+11 -7.744e+10 1.237e+11 -8.305e+10 1.283e+11 -8.867e+10 1.326e+11 -9.428e+10 1.366e+11 -9.985e+10 1.401e+11 -1.053e+11 1.432e+11 -1.107e+11 1.459e+11 -1.160e+11 1.481e+11 -1.211e+11 1.499e+11 -1.260e+11 1.511e+11 -1.307e+11 1.518e+11 -1.352e+11 1.519e+11 -1.395e+11 1.515e+11 -1.434e+11 1.505e+11 -1.471e+11 1.490e+11 -1.504e+11 1.470e+11 -1.534e+11 1.444e+11 -1.560e+11 1.413e+11 -1.583e+11 1.376e+11 -1.601e+11 1.336e+11 -1.616e+11 1.290e+11 -1.626e+11 1.241e+11 -1.633e+11 1.188e+11 -1.635e+11 1.131e+11 -1.632e+11 1.072e+11 0.005 -50.510 -49.519 -48.529 -47.539 -46.598 -45.749 -44.984 -44.297 -43.683 -43.138 -42.659 -42.243 -41.887 -41.591 -41.352 -41.171 -41.045 -40.976 -40.963 -41.007 -41.108 -41.269 -41.490 -41.774 -42.123 -42.541 -43.032 -43.600 -44.252 -44.995 -45.836 -46.788 -47.862 -49.074 -50.445 -52.000 -53.771 -55.798 -58.126 -60.799 -63.822 -67.047 -69.988 -72.035 -73.080 -72.547 -69.552 -65.526 -61.781 -58.566 -55.819 -53.449 -51.384 -49.566 -47.954 -46.516 -45.229 -44.073 -43.034 -42.100 -41.261 -40.510 -39.840 -39.246 -38.724 -38.270 -37.881 -37.556 -37.293 -37.090 -36.946 -36.862 -36.836 -36.870 -36.964 -37.119 -37.336 -37.618 -37.966 -38.383 -38.873 -39.439 -40.086 -40.819 -41.642 -42.561 -43.582 -44.710 -45.945 -47.286 -48.718 -50.212 -51.706 -53.100 -54.244 -54.965 -55.116 -54.639 -53.599 -52.152 -50.473 -48.710 -46.961 -45.281 -43.698 -42.224 -40.861 -39.604 -38.451 -37.395 -36.431 -35.553 -34.758 -34.042 -33.400 -32.830 -32.331 -31.899 -31.535 -31.237 -31.005 -30.839 -30.742 -30.714 -30.757 -30.875 -31.070 -31.348 -31.715 -32.179 -32.749 -33.439 -34.264 -35.247 -36.416 -37.814 -39.501 -41.570 -44.182 -47.639 -52.598 -58.821 -60.849 -56.237 -54.367 -55.069 -59.474 -61.679 -52.215 -45.313 -40.635 -37.002 -33.994 -31.408 -29.131 -27.094 -25.248 -23.560 -22.005 -20.564 -19.222 -17.969 -16.794 -15.689 -14.649 -13.667 -12.739 -11.862 -11.031 -10.243 -9.497 -8.789 -8.118 -7.481 -6.878 -6.306 -5.765 -5.253 -4.769 -4.312 -3.882 -3.477 -3.097 -2.741 -2.409 -2.100 -1.813 -1.549 -1.307 -1.085 -0.885 -0.706 -0.548 -0.410 -0.292 -0.194 -0.116 -0.057 -0.019 0.000 -0.001 -0.021 -0.060 -0.120 -0.199 -0.298 -0.417 -0.556 -0.716 -0.896 -1.097 -1.319 -1.563 -1.829 -2.116 -2.427 -2.760 -3.117 -3.498 -3.904 -4.336 -4.794 -5.280 -5.793 -6.336 -6.909 -7.515 -8.153 -8.826 -9.536 -10.285 -11.075 -11.909 -12.790 -13.721 -14.706 -15.751 -16.860 -18.041 -19.301 -20.649 -22.098 -23.663 -25.363 -27.222 -29.272 -31.560 -34.146 -37.114 -40.554 -44.415 -47.843 -49.150 -48.617 -47.856 -47.603 -47.829 -48.160 -47.935 -46.689 -44.703 -42.541 -40.531 -38.770 -37.255 -35.960 -34.855 -33.914 -33.117 -32.445 -31.886 -31.429 -31.065 -30.786 -30.588 -30.466 -30.416 -30.435 -30.521 -30.674 -30.891 -31.173 -31.520 -31.932 -32.410 -32.956 -33.572 -34.261 -35.027 -35.874 -36.806 -37.830 -38.953 -40.184 -41.531 -43.005 -44.618 -46.378 -48.293 -50.356 -52.538 -54.754 -56.828 -58.468 -59.337 -59.245 -58.293 -56.775 -54.993 -53.159 -51.393 -49.751 -48.252 -46.900 -45.688 -44.608 -43.649 -42.802 -42.058 -41.411 -40.854 -40.381 -39.988 -39.671 -39.427 -39.253 -39.147 -39.108 -39.136 -39.229 -39.387 -39.612 -39.905 -40.266 -40.698 -41.203 -41.787 -42.451 -43.203 -44.047 -44.993 -46.047 -47.222 -48.527 -49.976 -51.579 -53.340 -55.248 -57.255 -59.254 -61.077 -62.585 -63.832 -65.122 -66.960 -70.252 -78.237 -77.209 -67.518 -62.304 -58.705 -55.923 -53.656 -51.749 -50.114 -48.694 -47.450 -46.355 -45.387 -44.531 -43.775 -43.109 -42.527 -42.020 -41.585 -41.217 -40.912 -40.668 -40.482 -40.353 -40.279 -40.258 -40.291 -40.377 -40.515 -40.705 -40.949 -41.247 -41.600 -42.009 -42.477 -43.005 -43.597 -44.255 -44.984 -45.788 -46.673 -47.647 -48.667 -49.688 -50.709 0 1 1.0 4353721066.7 S2 HH 20.21 25.51 0.05 -1.327e+10 -2.841e+10 -1.437e+10 -2.518e+10 -1.516e+10 -2.208e+10 -1.566e+10 -1.913e+10 -1.588e+10 -1.634e+10 -1.585e+10 -1.371e+10 -1.557e+10 -1.125e+10 -1.506e+10 -8.966e+09 -1.433e+10 -6.876e+09 -1.341e+10 -4.984e+09 -1.231e+10 -3.302e+09 -1.106e+10 -1.841e+09 -9.700e+09 -6.091e+08 -8.257e+09 3.883e+08 -6.785e+09 1.148e+09 -5.337e+09 1.674e+09 -3.968e+09 1.989e+09 -2.737e+09 2.131e+09 -1.682e+09 2.162e+09 -7.959e+08 2.173e+09 1.468e+07 2.269e+09 9.468e+08 2.514e+09 2.238e+09 2.885e+09 4.091e+09 3.290e+09 6.654e+09 3.611e+09 1.004e+10 3.722e+09 1.433e+10 3.494e+09 1.957e+10 2.797e+09 2.581e+10 1.496e+09 3.306e+10 -5.426e+08 4.130e+10 -3.451e+09 5.052e+10 -7.365e+09 6.063e+10 -1.241e+10 7.154e+10 -1.869e+10 8.316e+10 -2.632e+10 9.531e+10 -3.539e+10 1.078e+11 -4.596e+10 1.205e+11 -5.808e+10 1.331e+11 -7.177e+10 1.453e+11 -8.701e+10 1.570e+11 -1.038e+11 1.678e+11 -1.220e+11 1.773e+11 -1.416e+11 1.854e+11 -1.624e+11 1.917e+11 -1.842e+11 1.959e+11 -2.069e+11 1.978e+11 -2.303e+11 1.970e+11 -2.540e+11 1.933e+11 -2.780e+11 1.866e+11 -3.019e+11 1.766e+11 -3.255e+11 1.632e+11 -3.486e+11 1.463e+11 -3.710e+11 1.258e+11 -3.926e+11 1.015e+11 -4.133e+11 7.335e+10 -4.331e+11 4.109e+10 -4.520e+11 4.512e+09 -4.701e+11 -3.685e+10 -4.877e+11 -8.366e+10 -5.050e+11 -1.367e+11 -5.222e+11 -1.971e+11 -5.396e+11 -2.665e+11 -5.573e+11 -3.466e+11 -5.750e+11 -4.397e+11 -5.926e+11 -5.483e+11 -6.095e+11 -6.751e+11 -6.248e+11 -8.234e+11 -6.371e+11 -9.970e+11 -6.446e+11 -1.199e+12 -6.453e+11 -1.433e+12 -6.368e+11 -1.702e+12 -6.161e+11 -2.012e+12 -5.800e+11 -2.364e+12 -5.250e+11 -2.764e+12 -4.472e+11 -3.214e+12 -3.424e+11 -3.718e+12 -2.062e+11 -4.281e+12 -3.356e+10 -4.905e+12 1.802e+11 -5.593e+12 4.404e+11 -6.350e+12 7.527e+11 -7.177e+12 1.122e+12 -8.076e+12 1.555e+12 -9.051e+12 2.057e+12 -1.010e+13 2.634e+12 -1.123e+13 3.292e+12 -1.244e+13 4.037e+12 -1.374e+13 4.874e+12 -1.511e+13 5.809e+12 -1.656e+13 6.849e+12 -1.810e+13 7.998e+12 -1.971e+13 9.261e+12 -2.141e+13 1.064e+13 -2.318e+13 1.215e+13 -2.502e+13 1.378e+13 -2.694e+13 1.555e+13 -2.893e+13 1.745e+13 -3.098e+13 1.949e+13 -3.309e+13 2.166e+13 -3.527e+13 2.398e+13 -3.749e+13 2.644e+13 -3.978e+13 2.904e+13 -4.211e+13 3.179e+13 -4.448e+13 3.467e+13 -4.689e+13 3.769e+13 -4.932e+13 4.085e+13 -5.177e+13 4.414e+13 -5.424e+13 4.755e+13 -5.672e+13 5.109e+13 -5.920e+13 5.474e+13 -6.168e+13 5.851e+13 -6.414e+13 6.237e+13 -6.659e+13 6.632e+13 -6.902e+13 7.036e+13 -7.142e+13 7.448e+13 -7.378e+13 7.866e+13 -7.611e+13 8.289e+13 -7.839e+13 8.717e+13 -8.062e+13 9.148e+13 -8.281e+13 9.581e+13 -8.493e+13 1.001e+14 -8.700e+13 1.045e+14 -8.900e+13 1.088e+14 -9.094e+13 1.131e+14 -9.281e+13 1.174e+14 -9.462e+13 1.216e+14 -9.636e+13 1.258e+14 -9.803e+13 1.299e+14 -9.964e+13 1.339e+14 -1.012e+14 1.378e+14 -1.026e+14 1.416e+14 -1.041e+14 1.454e+14 -1.054e+14 1.490e+14 -1.067e+14 1.525e+14 -1.079e+14 1.559e+14 -1.091e+14 1.591e+14 -1.103e+14 1.623e+14 -1.114e+14 1.652e+14 -1.124e+14 1.681e+14 -1.135e+14 1.708e+14 -1.145e+14 1.734e+14 -1.155e+14 1.758e+14 -1.165e+14 1.782e+14 -1.175e+14 1.804e+14 -1.184e+14 1.825e+14 -1.194e+14 1.844e+14 -1.204e+14 1.862e+14 -1.213e+14 1.878e+14 -1.223e+14 1.894e+14 -1.233e+14 1.907e+14 -1.243e+14 1.920e+14 -1.254e+14 1.932e+14 -1.265e+14 1.942e+14 -1.276e+14 1.951e+14 -1.287e+14 1.959e+14 -1.299e+14 1.966e+14 -1.311e+14 1.973e+14 -1.324e+14 1.978e+14 -1.337e+14 1.982e+14 -1.350e+14 1.986e+14 -1.364e+14 1.989e+14 -1.378e+14 1.992e+14 -1.393e+14 1.994e+14 -1.408e+14 1.996e+14 -1.424e+14 1.997e+14 -1.440e+14 1.998e+14 -1.457e+14 1.998e+14 -1.474e+14 1.998e+14 -1.491e+14 1.998e+14 -1.509e+14 1.998e+14 -1.527e+14 1.998e+14 -1.545e+14 1.998e+14 -1.563e+14 1.997e+14 -1.582e+14 1.997e+14 -1.600e+14 1.997e+14 -1.619e+14 1.996e+14 -1.637e+14 1.996e+14 -1.655e+14 1.995e+14 -1.673e+14 1.995e+14 -1.691e+14 1.994e+14 -1.708e+14 1.994e+14 -1.725e+14 1.993e+14 -1.740e+14 1.993e+14 -1.755e+14 1.992e+14 -1.770e+14 1.991e+14 -1.783e+14 1.990e+14 -1.795e+14 1.989e+14 -1.806e+14 1.987e+14 -1.816e+14 1.985e+14 -1.824e+14 1.983e+14 -1.831e+14 1.980e+14 -1.837e+14 1.977e+14 -1.841e+14 1.972e+14 -1.843e+14 1.967e+14 -1.843e+14 1.962e+14 -1.841e+14 1.955e+14 -1.838e+14 1.948e+14 -1.832e+14 1.940e+14 -1.824e+14 1.930e+14 -1.814e+14 1.920e+14 -1.802e+14 1.908e+14 -1.788e+14 1.895e+14 -1.772e+14 1.881e+14 -1.753e+14 1.866e+14 -1.733e+14 1.849e+14 -1.710e+14 1.831e+14 -1.684e+14 1.811e+14 -1.657e+14 1.790e+14 -1.628e+14 1.768e+14 -1.597e+14 1.744e+14 -1.564e+14 1.719e+14 -1.529e+14 1.693e+14 -1.492e+14 1.664e+14 -1.453e+14 1.635e+14 -1.414e+14 1.604e+14 -1.372e+14 1.572e+14 -1.330e+14 1.539e+14 -1.286e+14 1.504e+14 -1.241e+14 1.468e+14 -1.196e+14 1.431e+14 -1.150e+14 1.393e+14 -1.104e+14 1.354e+14 -1.057e+14 1.315e+14 -1.010e+14 1.274e+14 -9.632e+13 1.233e+14 -9.163e+13 1.191e+14 -8.696e+13 1.149e+14 -8.233e+13 1.107e+14 -7.776e+13 1.064e+14 -7.325e+13 1.021e+14 -6.882e+13 9.776e+13 -6.448e+13 9.345e+13 -6.025e+13 8.916e+13 -5.612e+13 8.490e+13 -5.213e+13 8.067e+13 -4.827e+13 7.650e+13 -4.455e+13 7.239e+13 -4.098e+13 6.835e+13 -3.756e+13 6.439e+13 -3.430e+13 6.052e+13 -3.121e+13 5.675e+13 -2.828e+13 5.309e+13 -2.551e+13 4.954e+13 -2.291e+13 4.611e+13 -2.048e+13 4.280e+13 -1.821e+13 3.962e+13 -1.611e+13 3.658e+13 -1.416e+13 3.368e+13 -1.237e+13 3.092e+13 -1.073e+13 2.829e+13 -9.230e+12 2.581e+13 -7.871e+12 2.347e+13 -6.646e+12 2.128e+13 -5.547e+12 1.922e+13 -4.567e+12 1.730e+13 -3.699e+12 1.552e+13 -2.936e+12 1.386e+13 -2.270e+12 1.234e+13 -1.694e+12 1.094e+13 -1.201e+12 9.657e+12 -7.832e+11 8.489e+12 -4.333e+11 7.431e+12 -1.446e+11 6.475e+12 8.980e+10 5.615e+12 2.759e+11 4.846e+12 4.200e+11 4.161e+12 5.277e+11 3.554e+12 6.043e+11 3.020e+12 6.548e+11 2.552e+12 6.838e+11 2.144e+12 6.953e+11 1.791e+12 6.930e+11 1.487e+12 6.801e+11 1.227e+12 6.595e+11 1.006e+12 6.335e+11 8.186e+11 6.041e+11 6.604e+11 5.728e+11 5.275e+11 5.408e+11 4.162e+11 5.087e+11 3.229e+11 4.772e+11 2.449e+11 4.464e+11 1.797e+11 4.164e+11 1.250e+11 3.872e+11 7.941e+10 3.587e+11 4.138e+10 3.306e+11 9.857e+09 3.030e+11 -1.592e+10 2.757e+11 -3.664e+10 2.488e+11 -5.284e+10 2.224e+11 -6.492e+10 1.966e+11 -7.332e+10 1.715e+11 -7.839e+10 1.474e+11 -8.051e+10 1.245e+11 -8.006e+10 1.031e+11 -7.741e+10 8.329e+10 -7.298e+10 6.533e+10 -6.716e+10 4.935e+10 -6.035e+10 3.546e+10 -5.297e+10 2.371e+10 -4.540e+10 1.405e+10 -3.800e+10 6.980e+09 -3.122e+10 7.226e+08 -2.524e+10 -3.921e+09 -2.026e+10 -7.780e+09 -1.637e+10 -1.155e+10 -1.341e+10 -1.586e+10 -1.094e+10 -2.111e+10 -8.429e+09 -2.742e+10 -5.411e+09 -3.470e+10 -1.558e+09 -4.277e+10 3.285e+09 -5.139e+10 9.169e+09 -6.033e+10 1.607e+10 -6.933e+10 2.386e+10 -7.817e+10 3.243e+10 -8.665e+10 4.161e+10 -9.456e+10 5.121e+10 -1.018e+11 6.104e+10 -1.081e+11 7.090e+10 -1.134e+11 8.060e+10 -1.177e+11 8.996e+10 -1.209e+11 9.880e+10 -1.229e+11 1.069e+11 -1.238e+11 1.143e+11 -1.236e+11 1.207e+11 -1.222e+11 1.261e+11 -1.199e+11 1.303e+11 -1.166e+11 1.334e+11 -1.124e+11 1.354e+11 -1.075e+11 1.362e+11 -1.020e+11 1.358e+11 -9.597e+10 1.343e+11 -8.954e+10 1.318e+11 -8.282e+10 1.283e+11 -7.595e+10 1.239e+11 -6.902e+10 1.188e+11 -6.214e+10 1.130e+11 -5.542e+10 1.067e+11 -4.893e+10 9.995e+10 -4.273e+10 9.288e+10 -3.691e+10 8.564e+10 -3.149e+10 7.832e+10 -2.653e+10 7.104e+10 -2.203e+10 6.389e+10 -1.802e+10 5.694e+10 -1.448e+10 5.027e+10 -1.142e+10 4.394e+10 -8.814e+09 3.801e+10 -6.634e+09 3.251e+10 -4.853e+09 2.748e+10 -3.434e+09 2.292e+10 -2.336e+09 1.885e+10 -1.519e+09 1.526e+10 -9.403e+08 1.214e+10 -5.569e+08 9.463e+09 -3.287e+08 7.213e+09 -2.168e+08 5.353e+09 -1.855e+08 3.851e+09 -2.035e+08 2.673e+09 -2.446e+08 1.780e+09 -2.913e+08 1.136e+09 -3.407e+08 7.060e+08 -4.144e+08 4.438e+08 -5.566e+08 2.907e+08 -8.122e+08 1.816e+08 -1.209e+09 7.382e+07 -1.761e+09 -4.299e+07 -2.480e+09 -1.584e+08 -3.380e+09 -2.529e+08 -4.474e+09 -3.034e+08 -5.775e+09 -2.849e+08 -7.296e+09 -1.718e+08 -9.046e+09 6.203e+07 -1.103e+10 4.421e+08 -1.326e+10 9.941e+08 -1.573e+10 1.742e+09 -1.844e+10 2.708e+09 -2.138e+10 3.911e+09 -2.454e+10 5.369e+09 -2.789e+10 7.092e+09 -3.142e+10 9.090e+09 -3.509e+10 1.136e+10 -3.888e+10 1.391e+10 -4.276e+10 1.672e+10 -4.666e+10 1.977e+10 -5.056e+10 2.306e+10 -5.440e+10 2.653e+10 -5.814e+10 3.018e+10 -6.172e+10 3.394e+10 -6.510e+10 3.778e+10 -6.824e+10 4.166e+10 -7.108e+10 4.551e+10 -7.359e+10 4.928e+10 -7.574e+10 5.293e+10 -7.749e+10 5.639e+10 -7.881e+10 5.962e+10 -7.969e+10 6.256e+10 -8.011e+10 6.516e+10 -8.007e+10 6.738e+10 -7.956e+10 6.918e+10 -7.860e+10 7.054e+10 -7.719e+10 7.142e+10 -7.535e+10 7.181e+10 -7.311e+10 7.170e+10 -7.050e+10 7.109e+10 -6.755e+10 6.997e+10 -6.431e+10 6.838e+10 -6.081e+10 6.632e+10 -5.711e+10 6.383e+10 -5.324e+10 6.094e+10 -4.926e+10 5.770e+10 -4.522e+10 5.415e+10 -4.116e+10 5.034e+10 -3.713e+10 4.634e+10 -3.317e+10 4.219e+10 -2.933e+10 3.797e+10 -2.564e+10 3.372e+10 -2.214e+10 2.952e+10 -1.885e+10 2.542e+10 -1.581e+10 2.148e+10 -1.302e+10 1.776e+10 -1.051e+10 1.430e+10 -8.280e+09 1.115e+10 -6.338e+09 8.342e+09 -4.684e+09 5.919e+09 -3.309e+09 3.900e+09 -2.206e+09 2.305e+09 -1.361e+09 1.142e+09 -7.673e+08 3.948e+08 -4.351e+08 -2.002e+07 -3.306e+08 -3.720e+08 -3.115e+08 -9.640e+08 -2.595e+08 -1.915e+09 -1.484e+08 -3.219e+09 5.998e+06 -4.843e+09 1.778e+08 -6.743e+09 3.391e+08 -8.875e+09 4.631e+08 -1.119e+10 5.245e+08 -1.365e+10 5.010e+08 -1.619e+10 3.732e+08 -1.876e+10 1.252e+08 -2.132e+10 -2.550e+08 -2.382e+10 -7.762e+08 -2.622e+10 -1.443e+09 -2.847e+10 -2.255e+09 -3.054e+10 -3.211e+09 -3.240e+10 -4.305e+09 -3.403e+10 -5.527e+09 -3.539e+10 -6.870e+09 -3.650e+10 -8.318e+09 -3.732e+10 -9.859e+09 -3.787e+10 -1.148e+10 -3.814e+10 -1.317e+10 -3.815e+10 -1.491e+10 -3.790e+10 -1.669e+10 -3.742e+10 -1.850e+10 -3.672e+10 -2.035e+10 -3.582e+10 -2.221e+10 -3.475e+10 -2.410e+10 -3.352e+10 -2.602e+10 -3.216e+10 -2.797e+10 -3.069e+10 -2.996e+10 -2.912e+10 -3.201e+10 -2.746e+10 -3.413e+10 -2.572e+10 -3.632e+10 -2.389e+10 -3.860e+10 -2.198e+10 -4.097e+10 -1.998e+10 -4.345e+10 -1.789e+10 -4.603e+10 -1.569e+10 -4.872e+10 -1.336e+10 -5.150e+10 -1.092e+10 -5.438e+10 -8.334e+09 -5.733e+10 -5.608e+09 -6.035e+10 -2.737e+09 -6.340e+10 2.781e+08 -6.647e+10 3.435e+09 -6.953e+10 6.724e+09 -7.254e+10 1.013e+10 -7.549e+10 1.364e+10 -7.834e+10 1.723e+10 -8.106e+10 2.087e+10 -8.363e+10 2.455e+10 -8.601e+10 2.823e+10 -8.817e+10 3.187e+10 -9.010e+10 3.545e+10 -9.177e+10 3.894e+10 -9.316e+10 4.229e+10 -9.426e+10 4.548e+10 -9.506e+10 4.848e+10 -9.553e+10 5.126e+10 -9.569e+10 5.380e+10 -9.552e+10 5.606e+10 -9.503e+10 5.804e+10 -9.423e+10 5.970e+10 -9.311e+10 6.105e+10 -9.170e+10 6.208e+10 -9.000e+10 6.277e+10 -8.804e+10 6.314e+10 -8.583e+10 6.317e+10 -8.339e+10 6.289e+10 -8.075e+10 6.231e+10 -7.795e+10 6.144e+10 -7.499e+10 6.029e+10 -7.191e+10 5.889e+10 -6.872e+10 5.726e+10 -6.544e+10 5.543e+10 -6.211e+10 5.340e+10 -5.875e+10 5.123e+10 -5.538e+10 4.892e+10 -5.203e+10 4.651e+10 -4.871e+10 4.402e+10 -4.544e+10 4.148e+10 -4.224e+10 3.891e+10 -3.913e+10 3.633e+10 -3.612e+10 3.378e+10 -3.322e+10 3.126e+10 -3.044e+10 2.879e+10 -2.778e+10 2.640e+10 -2.527e+10 2.408e+10 -2.289e+10 2.187e+10 -2.065e+10 1.976e+10 -1.856e+10 1.776e+10 -1.661e+10 1.588e+10 -1.481e+10 1.412e+10 -1.314e+10 1.249e+10 -1.161e+10 1.098e+10 -1.021e+10 9.598e+09 -8.941e+09 8.335e+09 -7.790e+09 7.193e+09 -6.755e+09 6.164e+09 -5.827e+09 5.244e+09 -5.000e+09 4.429e+09 -4.269e+09 3.710e+09 -3.623e+09 3.082e+09 -3.060e+09 2.538e+09 -2.570e+09 2.071e+09 -2.145e+09 1.672e+09 -1.781e+09 1.336e+09 -1.470e+09 1.054e+09 -1.206e+09 8.216e+08 -9.839e+08 6.315e+08 -7.989e+08 4.779e+08 -6.456e+08 3.554e+08 -5.198e+08 2.591e+08 -4.173e+08 1.845e+08 -3.346e+08 1.276e+08 -2.685e+08 8.490e+07 -2.161e+08 5.346e+07 -1.750e+08 3.065e+07 -1.430e+08 1.441e+07 -1.182e+08 3.042e+06 -9.928e+07 -4.795e+06 -8.483e+07 -1.008e+07 -7.389e+07 -1.354e+07 -6.565e+07 -1.568e+07 -5.955e+07 -1.686e+07 -5.513e+07 -1.734e+07 -5.209e+07 -1.730e+07 -5.020e+07 -1.688e+07 -4.931e+07 -1.619e+07 -4.932e+07 -1.532e+07 -5.017e+07 -1.434e+07 -5.178e+07 -1.331e+07 -5.411e+07 -1.226e+07 -5.712e+07 -1.126e+07 -6.072e+07 -1.034e+07 -6.484e+07 -9.557e+06 -6.938e+07 -8.967e+06 -7.423e+07 -8.636e+06 -7.926e+07 -8.633e+06 -8.433e+07 -9.028e+06 -8.929e+07 -9.882e+06 -9.400e+07 -1.125e+07 -9.831e+07 -1.318e+07 -1.021e+08 -1.569e+07 -1.052e+08 -1.878e+07 -1.075e+08 -2.245e+07 -1.090e+08 -2.666e+07 -1.095e+08 -3.135e+07 -1.091e+08 -3.647e+07 -1.077e+08 -4.194e+07 -1.053e+08 -4.766e+07 -1.019e+08 -5.357e+07 -9.761e+07 -5.958e+07 -9.242e+07 -6.564e+07 -8.640e+07 -7.167e+07 -7.961e+07 -7.764e+07 -7.208e+07 -8.353e+07 -6.384e+07 -8.933e+07 -5.494e+07 -9.505e+07 -4.532e+07 -1.007e+08 -3.491e+07 -1.064e+08 -2.362e+07 -1.122e+08 -1.125e+07 -1.180e+08 2.429e+06 -1.241e+08 1.772e+07 -1.302e+08 3.499e+07 -1.365e+08 5.470e+07 -1.429e+08 7.734e+07 -1.492e+08 1.035e+08 -1.552e+08 1.338e+08 -1.607e+08 0.005 -53.436 -52.380 -51.324 -50.268 -49.212 -48.167 -47.229 -46.389 -45.637 -44.969 -44.377 -43.858 -43.408 -43.025 -42.706 -42.449 -42.254 -42.119 -42.044 -42.030 -42.076 -42.183 -42.354 -42.590 -42.892 -43.266 -43.713 -44.240 -44.851 -45.554 -46.357 -47.272 -48.312 -49.494 -50.842 -52.385 -54.163 -56.235 -58.686 -61.647 -65.335 -70.087 -75.782 -77.807 -75.651 -73.133 -70.239 -66.764 -63.235 -60.025 -57.212 -54.767 -52.627 -50.741 -49.070 -47.581 -46.248 -45.054 -43.981 -43.018 -42.155 -41.382 -40.695 -40.086 -39.551 -39.088 -38.693 -38.363 -38.098 -37.895 -37.754 -37.675 -37.657 -37.702 -37.810 -37.982 -38.220 -38.527 -38.905 -39.359 -39.891 -40.507 -41.213 -42.015 -42.921 -43.939 -45.077 -46.345 -47.752 -49.303 -50.997 -52.826 -54.773 -56.824 -58.997 -61.354 -63.741 -64.546 -61.950 -58.122 -54.628 -51.659 -49.112 -46.897 -44.948 -43.217 -41.669 -40.280 -39.029 -37.900 -36.882 -35.965 -35.140 -34.402 -33.745 -33.166 -32.661 -32.228 -31.865 -31.571 -31.346 -31.190 -31.104 -31.089 -31.147 -31.281 -31.496 -31.795 -32.186 -32.675 -33.273 -33.992 -34.848 -35.861 -37.058 -38.474 -40.158 -42.173 -44.607 -47.549 -50.978 -54.243 -55.888 -56.200 -56.942 -58.212 -55.231 -49.421 -44.382 -40.338 -36.985 -34.124 -31.618 -29.386 -27.371 -25.536 -23.851 -22.294 -20.848 -19.499 -18.238 -17.053 -15.939 -14.889 -13.897 -12.959 -12.071 -11.230 -10.433 -9.677 -8.960 -8.280 -7.634 -7.022 -6.442 -5.893 -5.373 -4.881 -4.417 -3.980 -3.568 -3.181 -2.819 -2.481 -2.165 -1.873 -1.603 -1.355 -1.129 -0.924 -0.740 -0.577 -0.434 -0.312 -0.210 -0.128 -0.066 -0.024 -0.002 0.000 -0.018 -0.054 -0.111 -0.188 -0.284 -0.402 -0.539 -0.697 -0.876 -1.076 -1.298 -1.541 -1.807 -2.095 -2.406 -2.741 -3.099 -3.483 -3.891 -4.326 -4.788 -5.278 -5.797 -6.347 -6.927 -7.541 -8.189 -8.874 -9.597 -10.361 -11.168 -12.023 -12.927 -13.887 -14.906 -15.990 -17.147 -18.386 -19.717 -21.155 -22.717 -24.428 -26.322 -28.447 -30.878 -33.742 -37.270 -41.976 -49.250 -54.691 -47.972 -44.510 -42.799 -42.041 -41.928 -42.324 -43.141 -44.246 -45.281 -45.559 -44.589 -42.776 -40.803 -38.998 -37.439 -36.115 -34.997 -34.057 -33.271 -32.619 -32.085 -31.658 -31.327 -31.086 -30.928 -30.848 -30.843 -30.909 -31.046 -31.251 -31.523 -31.864 -32.272 -32.750 -33.300 -33.923 -34.622 -35.402 -36.268 -37.226 -38.283 -39.448 -40.732 -42.149 -43.715 -45.449 -47.375 -49.519 -51.907 -54.554 -57.433 -60.384 -62.949 -64.369 -64.152 -62.587 -60.317 -57.857 -55.485 -53.315 -51.375 -49.657 -48.142 -46.809 -45.636 -44.607 -43.707 -42.923 -42.246 -41.667 -41.180 -40.779 -40.458 -40.215 -40.046 -39.950 -39.924 -39.968 -40.080 -40.263 -40.515 -40.838 -41.235 -41.707 -42.257 -42.890 -43.611 -44.425 -45.340 -46.362 -47.501 -48.766 -50.165 -51.701 -53.369 -55.139 -56.942 -58.657 -60.132 -61.294 -62.239 -63.228 -64.599 -66.747 -69.896 -71.630 -67.374 -62.599 -58.953 -56.093 -53.758 -51.796 -50.115 -48.656 -47.377 -46.250 -45.253 -44.370 -43.588 -42.897 -42.289 -41.757 -41.296 -40.901 -40.569 -40.297 -40.082 -39.922 -39.816 -39.761 -39.758 -39.805 -39.902 -40.049 -40.245 -40.492 -40.789 -41.137 -41.538 -41.994 -42.505 -43.073 -43.702 -44.395 -45.154 -45.985 -46.891 -47.806 -48.720 -49.635 -50.549 0 1 1.0 3669771408.11 S2 HV 20.21 25.51 0.05 -3.904e+10 4.509e+09 -3.853e+10 7.391e+09 -3.788e+10 1.012e+10 -3.705e+10 1.266e+10 -3.602e+10 1.498e+10 -3.476e+10 1.705e+10 -3.327e+10 1.881e+10 -3.153e+10 2.024e+10 -2.954e+10 2.128e+10 -2.733e+10 2.191e+10 -2.490e+10 2.209e+10 -2.229e+10 2.182e+10 -1.956e+10 2.110e+10 -1.674e+10 1.995e+10 -1.391e+10 1.839e+10 -1.113e+10 1.649e+10 -8.489e+09 1.431e+10 -6.056e+09 1.195e+10 -3.910e+09 9.526e+09 -2.117e+09 7.149e+09 -7.399e+08 4.965e+09 2.027e+08 3.122e+09 7.814e+08 1.756e+09 1.286e+09 8.703e+08 2.179e+09 7.844e+07 3.728e+09 -1.209e+09 5.962e+09 -3.419e+09 8.829e+09 -6.800e+09 1.226e+10 -1.152e+10 1.616e+10 -1.771e+10 2.043e+10 -2.544e+10 2.493e+10 -3.482e+10 2.953e+10 -4.586e+10 3.405e+10 -5.859e+10 3.832e+10 -7.298e+10 4.214e+10 -8.899e+10 4.531e+10 -1.065e+11 4.762e+10 -1.255e+11 4.887e+10 -1.456e+11 4.884e+10 -1.669e+11 4.735e+10 -1.889e+11 4.419e+10 -2.116e+11 3.919e+10 -2.345e+11 3.221e+10 -2.574e+11 2.310e+10 -2.799e+11 1.177e+10 -3.017e+11 -1.879e+09 -3.224e+11 -1.789e+10 -3.417e+11 -3.628e+10 -3.592e+11 -5.707e+10 -3.746e+11 -8.026e+10 -3.876e+11 -1.058e+11 -3.979e+11 -1.337e+11 -4.054e+11 -1.639e+11 -4.098e+11 -1.966e+11 -4.111e+11 -2.317e+11 -4.091e+11 -2.696e+11 -4.039e+11 -3.105e+11 -3.954e+11 -3.550e+11 -3.836e+11 -4.037e+11 -3.682e+11 -4.575e+11 -3.490e+11 -5.175e+11 -3.256e+11 -5.850e+11 -2.971e+11 -6.616e+11 -2.626e+11 -7.488e+11 -2.204e+11 -8.485e+11 -1.687e+11 -9.623e+11 -1.052e+11 -1.092e+12 -2.719e+10 -1.240e+12 6.898e+10 -1.408e+12 1.864e+11 -1.597e+12 3.291e+11 -1.809e+12 5.014e+11 -2.044e+12 7.074e+11 -2.305e+12 9.519e+11 -2.593e+12 1.240e+12 -2.907e+12 1.577e+12 -3.249e+12 1.968e+12 -3.620e+12 2.419e+12 -4.019e+12 2.934e+12 -4.448e+12 3.521e+12 -4.905e+12 4.184e+12 -5.391e+12 4.930e+12 -5.904e+12 5.764e+12 -6.445e+12 6.693e+12 -7.012e+12 7.722e+12 -7.604e+12 8.856e+12 -8.220e+12 1.010e+13 -8.857e+12 1.147e+13 -9.514e+12 1.295e+13 -1.019e+13 1.456e+13 -1.088e+13 1.630e+13 -1.158e+13 1.818e+13 -1.230e+13 2.019e+13 -1.302e+13 2.235e+13 -1.374e+13 2.464e+13 -1.447e+13 2.709e+13 -1.519e+13 2.967e+13 -1.591e+13 3.240e+13 -1.662e+13 3.528e+13 -1.731e+13 3.830e+13 -1.799e+13 4.146e+13 -1.866e+13 4.477e+13 -1.931e+13 4.821e+13 -1.993e+13 5.178e+13 -2.052e+13 5.548e+13 -2.108e+13 5.929e+13 -2.161e+13 6.322e+13 -2.210e+13 6.725e+13 -2.256e+13 7.138e+13 -2.297e+13 7.560e+13 -2.334e+13 7.990e+13 -2.367e+13 8.427e+13 -2.395e+13 8.871e+13 -2.419e+13 9.319e+13 -2.439e+13 9.773e+13 -2.454e+13 1.023e+14 -2.465e+13 1.069e+14 -2.471e+13 1.115e+14 -2.474e+13 1.161e+14 -2.472e+13 1.207e+14 -2.467e+13 1.253e+14 -2.459e+13 1.299e+14 -2.448e+13 1.345e+14 -2.434e+13 1.390e+14 -2.418e+13 1.435e+14 -2.400e+13 1.479e+14 -2.381e+13 1.523e+14 -2.361e+13 1.566e+14 -2.340e+13 1.608e+14 -2.320e+13 1.650e+14 -2.300e+13 1.690e+14 -2.282e+13 1.730e+14 -2.265e+13 1.769e+14 -2.251e+13 1.806e+14 -2.239e+13 1.843e+14 -2.231e+13 1.878e+14 -2.227e+13 1.913e+14 -2.227e+13 1.946e+14 -2.232e+13 1.978e+14 -2.242e+13 2.008e+14 -2.258e+13 2.037e+14 -2.279e+13 2.066e+14 -2.307e+13 2.093e+14 -2.341e+13 2.119e+14 -2.382e+13 2.143e+14 -2.431e+13 2.166e+14 -2.487e+13 2.188e+14 -2.550e+13 2.209e+14 -2.622e+13 2.228e+14 -2.701e+13 2.246e+14 -2.788e+13 2.263e+14 -2.884e+13 2.279e+14 -2.988e+13 2.294e+14 -3.099e+13 2.308e+14 -3.220e+13 2.321e+14 -3.348e+13 2.334e+14 -3.484e+13 2.345e+14 -3.629e+13 2.356e+14 -3.781e+13 2.367e+14 -3.941e+13 2.377e+14 -4.109e+13 2.386e+14 -4.285e+13 2.396e+14 -4.468e+13 2.405e+14 -4.658e+13 2.413e+14 -4.855e+13 2.422e+14 -5.059e+13 2.430e+14 -5.269e+13 2.439e+14 -5.485e+13 2.447e+14 -5.707e+13 2.455e+14 -5.933e+13 2.464e+14 -6.165e+13 2.472e+14 -6.401e+13 2.480e+14 -6.640e+13 2.489e+14 -6.882e+13 2.497e+14 -7.126e+13 2.505e+14 -7.371e+13 2.514e+14 -7.617e+13 2.522e+14 -7.863e+13 2.529e+14 -8.108e+13 2.537e+14 -8.350e+13 2.544e+14 -8.589e+13 2.551e+14 -8.821e+13 2.557e+14 -9.047e+13 2.563e+14 -9.266e+13 2.568e+14 -9.478e+13 2.573e+14 -9.682e+13 2.576e+14 -9.876e+13 2.579e+14 -1.006e+14 2.581e+14 -1.023e+14 2.582e+14 -1.039e+14 2.582e+14 -1.054e+14 2.580e+14 -1.067e+14 2.577e+14 -1.079e+14 2.573e+14 -1.089e+14 2.567e+14 -1.098e+14 2.560e+14 -1.105e+14 2.552e+14 -1.110e+14 2.541e+14 -1.113e+14 2.529e+14 -1.115e+14 2.515e+14 -1.115e+14 2.500e+14 -1.113e+14 2.482e+14 -1.109e+14 2.463e+14 -1.103e+14 2.441e+14 -1.095e+14 2.418e+14 -1.086e+14 2.393e+14 -1.075e+14 2.366e+14 -1.062e+14 2.336e+14 -1.048e+14 2.305e+14 -1.031e+14 2.272e+14 -1.014e+14 2.237e+14 -9.942e+13 2.199e+14 -9.734e+13 2.160e+14 -9.512e+13 2.119e+14 -9.276e+13 2.076e+14 -9.029e+13 2.032e+14 -8.770e+13 1.986e+14 -8.500e+13 1.938e+14 -8.221e+13 1.889e+14 -7.933e+13 1.838e+14 -7.638e+13 1.786e+14 -7.338e+13 1.733e+14 -7.033e+13 1.679e+14 -6.726e+13 1.624e+14 -6.415e+13 1.568e+14 -6.102e+13 1.512e+14 -5.789e+13 1.456e+14 -5.476e+13 1.399e+14 -5.165e+13 1.342e+14 -4.856e+13 1.284e+14 -4.552e+13 1.227e+14 -4.252e+13 1.171e+14 -3.958e+13 1.114e+14 -3.672e+13 1.059e+14 -3.393e+13 1.004e+14 -3.123e+13 9.500e+13 -2.863e+13 8.970e+13 -2.613e+13 8.451e+13 -2.374e+13 7.945e+13 -2.146e+13 7.452e+13 -1.929e+13 6.974e+13 -1.724e+13 6.511e+13 -1.532e+13 6.064e+13 -1.352e+13 5.633e+13 -1.184e+13 5.220e+13 -1.029e+13 4.824e+13 -8.849e+12 4.446e+13 -7.531e+12 4.087e+13 -6.328e+12 3.746e+13 -5.237e+12 3.423e+13 -4.253e+12 3.118e+13 -3.372e+12 2.832e+13 -2.589e+12 2.563e+13 -1.899e+12 2.313e+13 -1.296e+12 2.079e+13 -7.734e+11 1.862e+13 -3.268e+11 1.662e+13 5.021e+10 1.477e+13 3.638e+11 1.308e+13 6.195e+11 1.153e+13 8.230e+11 1.012e+13 9.802e+11 8.845e+12 1.096e+12 7.695e+12 1.177e+12 6.662e+12 1.226e+12 5.738e+12 1.248e+12 4.916e+12 1.248e+12 4.189e+12 1.230e+12 3.549e+12 1.197e+12 2.989e+12 1.153e+12 2.501e+12 1.100e+12 2.079e+12 1.042e+12 1.717e+12 9.800e+11 1.407e+12 9.168e+11 1.143e+12 8.538e+11 9.212e+11 7.924e+11 7.344e+11 7.333e+11 5.781e+11 6.773e+11 4.480e+11 6.247e+11 3.400e+11 5.756e+11 2.503e+11 5.300e+11 1.762e+11 4.875e+11 1.149e+11 4.477e+11 6.415e+10 4.104e+11 2.245e+10 3.751e+11 -1.165e+10 3.414e+11 -3.924e+10 3.092e+11 -6.111e+10 2.781e+11 -7.793e+10 2.482e+11 -9.024e+10 2.194e+11 -9.847e+10 1.917e+11 -1.030e+11 1.653e+11 -1.044e+11 1.404e+11 -1.029e+11 1.171e+11 -9.890e+10 9.546e+10 -9.291e+10 7.581e+10 -8.532e+10 5.823e+10 -7.658e+10 4.279e+10 -6.710e+10 2.959e+10 -5.732e+10 1.862e+10 -4.766e+10 9.808e+09 -3.848e+10 3.177e+09 -3.024e+10 -1.819e+09 -2.314e+10 -5.545e+09 -1.732e+10 -8.546e+09 -1.286e+10 -1.160e+10 -9.462e+09 -1.542e+10 -6.484e+09 -2.035e+10 -3.202e+09 -2.646e+10 9.668e+08 -3.360e+10 6.361e+09 -4.150e+10 1.310e+10 -4.994e+10 2.118e+10 -5.867e+10 3.052e+10 -6.743e+10 4.094e+10 -7.600e+10 5.224e+10 -8.420e+10 6.422e+10 -9.183e+10 7.660e+10 -9.873e+10 8.915e+10 -1.048e+11 1.016e+11 -1.099e+11 1.138e+11 -1.139e+11 1.254e+11 -1.168e+11 1.362e+11 -1.186e+11 1.460e+11 -1.192e+11 1.548e+11 -1.187e+11 1.623e+11 -1.171e+11 1.684e+11 -1.144e+11 1.732e+11 -1.108e+11 1.764e+11 -1.063e+11 1.782e+11 -1.011e+11 1.785e+11 -9.513e+10 1.774e+11 -8.866e+10 1.750e+11 -8.177e+10 1.713e+11 -7.459e+10 1.664e+11 -6.724e+10 1.605e+11 -5.986e+10 1.537e+11 -5.253e+10 1.462e+11 -4.539e+10 1.380e+11 -3.852e+10 1.294e+11 -3.201e+10 1.204e+11 -2.592e+10 1.112e+11 -2.032e+10 1.019e+11 -1.525e+10 9.272e+10 -1.072e+10 8.369e+10 -6.769e+09 7.491e+10 -3.381e+09 6.647e+10 -5.534e+08 5.844e+10 1.739e+09 5.089e+10 3.526e+09 4.385e+10 4.844e+09 3.738e+10 5.740e+09 3.147e+10 6.260e+09 2.614e+10 6.457e+09 2.139e+10 6.382e+09 1.721e+10 6.087e+09 1.358e+10 5.622e+09 1.048e+10 5.034e+09 7.862e+09 4.367e+09 5.699e+09 3.663e+09 3.954e+09 2.957e+09 2.582e+09 2.282e+09 1.543e+09 1.667e+09 7.939e+08 1.138e+09 2.907e+08 7.176e+08 -1.629e+07 4.172e+08 -1.921e+08 2.146e+08 -3.270e+08 3.105e+07 -5.095e+08 -2.370e+08 -7.773e+08 -6.649e+08 -1.118e+09 -1.295e+09 -1.503e+09 -2.156e+09 -1.901e+09 -3.269e+09 -2.286e+09 -4.654e+09 -2.628e+09 -6.326e+09 -2.899e+09 -8.302e+09 -3.073e+09 -1.059e+10 -3.121e+09 -1.320e+10 -3.019e+09 -1.613e+10 -2.741e+09 -1.938e+10 -2.265e+09 -2.293e+10 -1.572e+09 -2.679e+10 -6.461e+08 -3.091e+10 5.240e+08 -3.528e+10 1.943e+09 -3.986e+10 3.617e+09 -4.462e+10 5.542e+09 -4.949e+10 7.711e+09 -5.443e+10 1.011e+10 -5.939e+10 1.273e+10 -6.430e+10 1.553e+10 -6.911e+10 1.850e+10 -7.374e+10 2.160e+10 -7.814e+10 2.479e+10 -8.226e+10 2.805e+10 -8.601e+10 3.132e+10 -8.937e+10 3.456e+10 -9.226e+10 3.774e+10 -9.467e+10 4.080e+10 -9.654e+10 4.371e+10 -9.785e+10 4.643e+10 -9.858e+10 4.891e+10 -9.873e+10 5.111e+10 -9.830e+10 5.301e+10 -9.729e+10 5.457e+10 -9.572e+10 5.577e+10 -9.362e+10 5.658e+10 -9.102e+10 5.700e+10 -8.797e+10 5.701e+10 -8.450e+10 5.662e+10 -8.067e+10 5.581e+10 -7.654e+10 5.461e+10 -7.216e+10 5.303e+10 -6.759e+10 5.109e+10 -6.288e+10 4.883e+10 -5.810e+10 4.626e+10 -5.329e+10 4.343e+10 -4.852e+10 4.038e+10 -4.382e+10 3.716e+10 -3.925e+10 3.382e+10 -3.484e+10 3.041e+10 -3.063e+10 2.697e+10 -2.665e+10 2.357e+10 -2.293e+10 2.025e+10 -1.948e+10 1.706e+10 -1.631e+10 1.406e+10 -1.345e+10 1.127e+10 -1.090e+10 8.736e+09 -8.652e+09 6.494e+09 -6.714e+09 4.566e+09 -5.076e+09 2.968e+09 -3.735e+09 1.703e+09 -2.687e+09 7.595e+08 -1.928e+09 8.834e+07 -1.448e+09 -4.115e+08 -1.198e+09 -9.001e+08 -1.086e+09 -1.537e+09 -1.014e+09 -2.413e+09 -9.234e+08 -3.546e+09 -7.945e+08 -4.919e+09 -6.319e+08 -6.500e+09 -4.506e+08 -8.248e+09 -2.702e+08 -1.013e+10 -1.120e+08 -1.209e+10 3.325e+06 -1.411e+10 5.612e+07 -1.613e+10 2.857e+07 -1.813e+10 -9.463e+07 -2.006e+10 -3.263e+08 -2.190e+10 -6.762e+08 -2.362e+10 -1.151e+09 -2.519e+10 -1.755e+09 -2.659e+10 -2.490e+09 -2.782e+10 -3.353e+09 -2.886e+10 -4.342e+09 -2.971e+10 -5.451e+09 -3.036e+10 -6.673e+09 -3.081e+10 -8.003e+09 -3.108e+10 -9.431e+09 -3.117e+10 -1.095e+10 -3.110e+10 -1.256e+10 -3.087e+10 -1.426e+10 -3.051e+10 -1.604e+10 -3.002e+10 -1.790e+10 -2.943e+10 -1.986e+10 -2.874e+10 -2.192e+10 -2.797e+10 -2.408e+10 -2.712e+10 -2.635e+10 -2.619e+10 -2.875e+10 -2.519e+10 -3.127e+10 -2.411e+10 -3.394e+10 -2.294e+10 -3.676e+10 -2.168e+10 -3.972e+10 -2.032e+10 -4.283e+10 -1.885e+10 -4.608e+10 -1.726e+10 -4.947e+10 -1.554e+10 -5.299e+10 -1.368e+10 -5.661e+10 -1.168e+10 -6.031e+10 -9.546e+09 -6.408e+10 -7.270e+09 -6.789e+10 -4.865e+09 -7.170e+10 -2.336e+09 -7.550e+10 3.018e+08 -7.923e+10 3.031e+09 -8.289e+10 5.836e+09 -8.642e+10 8.693e+09 -8.979e+10 1.158e+10 -9.298e+10 1.447e+10 -9.595e+10 1.733e+10 -9.867e+10 2.015e+10 -1.011e+11 2.290e+10 -1.032e+11 2.554e+10 -1.050e+11 2.806e+10 -1.065e+11 3.044e+10 -1.076e+11 3.264e+10 -1.083e+11 3.466e+10 -1.086e+11 3.648e+10 -1.085e+11 3.809e+10 -1.080e+11 3.947e+10 -1.072e+11 4.061e+10 -1.059e+11 4.152e+10 -1.043e+11 4.219e+10 -1.023e+11 4.262e+10 -9.997e+10 4.281e+10 -9.735e+10 4.278e+10 -9.444e+10 4.252e+10 -9.128e+10 4.206e+10 -8.790e+10 4.140e+10 -8.432e+10 4.055e+10 -8.059e+10 3.954e+10 -7.675e+10 3.838e+10 -7.281e+10 3.709e+10 -6.882e+10 3.567e+10 -6.482e+10 3.416e+10 -6.082e+10 3.257e+10 -5.686e+10 3.091e+10 -5.297e+10 2.921e+10 -4.917e+10 2.747e+10 -4.548e+10 2.572e+10 -4.191e+10 2.397e+10 -3.848e+10 2.223e+10 -3.521e+10 2.052e+10 -3.210e+10 1.885e+10 -2.915e+10 1.722e+10 -2.638e+10 1.566e+10 -2.378e+10 1.416e+10 -2.136e+10 1.273e+10 -1.910e+10 1.137e+10 -1.702e+10 1.010e+10 -1.510e+10 8.919e+09 -1.334e+10 7.820e+09 -1.173e+10 6.808e+09 -1.027e+10 5.883e+09 -8.946e+09 5.043e+09 -7.754e+09 4.287e+09 -6.686e+09 3.612e+09 -5.732e+09 3.014e+09 -4.889e+09 2.489e+09 -4.145e+09 2.034e+09 -3.492e+09 1.640e+09 -2.924e+09 1.306e+09 -2.433e+09 1.024e+09 -2.012e+09 7.892e+08 -1.653e+09 5.965e+08 -1.350e+09 4.404e+08 -1.097e+09 3.158e+08 -8.870e+08 2.181e+08 -7.149e+08 1.429e+08 -5.750e+08 8.607e+07 -4.629e+08 4.403e+07 -3.740e+08 1.361e+07 -3.042e+08 -7.961e+06 -2.503e+08 -2.291e+07 -2.091e+08 -3.309e+07 -1.781e+08 -3.994e+07 -1.553e+08 -4.451e+07 -1.389e+08 -4.757e+07 -1.278e+08 -4.966e+07 -1.209e+08 -5.111e+07 -1.176e+08 -5.218e+07 -1.173e+08 -5.304e+07 -1.199e+08 -5.380e+07 -1.250e+08 -5.457e+07 -1.325e+08 -5.540e+07 -1.423e+08 -5.637e+07 -1.541e+08 -5.751e+07 -1.679e+08 -5.888e+07 -1.834e+08 -6.053e+07 -2.002e+08 -6.250e+07 -2.181e+08 -6.487e+07 -2.366e+08 -6.769e+07 -2.553e+08 -7.103e+07 -2.737e+08 -7.495e+07 -2.914e+08 -7.950e+07 -3.080e+08 -8.471e+07 -3.230e+08 -9.061e+07 -3.361e+08 -9.719e+07 -3.471e+08 -1.044e+08 -3.556e+08 -1.123e+08 -3.616e+08 -1.208e+08 -3.650e+08 -1.298e+08 -3.658e+08 -1.393e+08 -3.641e+08 -1.492e+08 -3.599e+08 -1.594e+08 -3.534e+08 -1.699e+08 -3.449e+08 -1.806e+08 -3.344e+08 -1.915e+08 -3.223e+08 -2.026e+08 -3.088e+08 -2.140e+08 -2.939e+08 -2.256e+08 -2.781e+08 -2.377e+08 -2.612e+08 -2.501e+08 -2.437e+08 -2.632e+08 -2.254e+08 -2.770e+08 -2.064e+08 -2.918e+08 -1.866e+08 -3.078e+08 -1.660e+08 -3.251e+08 -1.442e+08 -3.440e+08 -1.211e+08 -3.646e+08 -9.623e+07 -3.872e+08 -6.922e+07 -4.117e+08 -3.968e+07 -4.382e+08 -7.154e+06 -4.665e+08 2.881e+07 -4.966e+08 0.005 -52.065 -51.077 -50.089 -49.101 -48.114 -47.136 -46.255 -45.462 -44.750 -44.115 -43.552 -43.056 -42.625 -42.256 -41.948 -41.699 -41.507 -41.373 -41.295 -41.274 -41.310 -41.405 -41.558 -41.772 -42.048 -42.391 -42.802 -43.286 -43.847 -44.493 -45.230 -46.068 -47.019 -48.097 -49.323 -50.722 -52.330 -54.198 -56.403 -59.064 -62.384 -66.685 -71.842 -73.277 -70.675 -68.396 -67.078 -66.233 -65.265 -63.696 -61.526 -59.120 -56.783 -54.637 -52.709 -50.990 -49.459 -48.093 -46.875 -45.788 -44.819 -43.957 -43.193 -42.519 -41.931 -41.422 -40.989 -40.630 -40.341 -40.121 -39.969 -39.885 -39.867 -39.918 -40.037 -40.226 -40.488 -40.824 -41.239 -41.735 -42.318 -42.992 -43.765 -44.642 -45.630 -46.736 -47.962 -49.310 -50.768 -52.313 -53.901 -55.473 -56.985 -58.456 -60.004 -61.812 -63.801 -64.368 -61.662 -57.809 -54.342 -51.427 -48.947 -46.803 -44.926 -43.265 -41.786 -40.461 -39.271 -38.201 -37.240 -36.376 -35.604 -34.917 -34.310 -33.781 -33.325 -32.942 -32.630 -32.388 -32.217 -32.117 -32.090 -32.137 -32.263 -32.470 -32.764 -33.151 -33.640 -34.240 -34.965 -35.830 -36.855 -38.067 -39.498 -41.185 -43.162 -45.424 -47.813 -49.808 -50.741 -50.736 -50.624 -51.122 -52.680 -54.706 -52.313 -46.950 -42.257 -38.486 -35.353 -32.672 -30.316 -28.211 -26.306 -24.565 -22.963 -21.479 -20.098 -18.808 -17.598 -16.461 -15.389 -14.378 -13.422 -12.517 -11.660 -10.847 -10.076 -9.344 -8.649 -7.990 -7.364 -6.771 -6.208 -5.675 -5.171 -4.694 -4.244 -3.819 -3.420 -3.045 -2.694 -2.366 -2.061 -1.778 -1.518 -1.278 -1.060 -0.863 -0.687 -0.531 -0.396 -0.280 -0.185 -0.109 -0.053 -0.017 0.000 -0.003 -0.026 -0.067 -0.129 -0.210 -0.311 -0.432 -0.574 -0.736 -0.918 -1.122 -1.347 -1.594 -1.862 -2.154 -2.467 -2.805 -3.166 -3.552 -3.963 -4.401 -4.865 -5.357 -5.878 -6.429 -7.012 -7.627 -8.277 -8.964 -9.688 -10.454 -11.263 -12.119 -13.025 -13.985 -15.005 -16.090 -17.248 -18.488 -19.820 -21.259 -22.821 -24.533 -26.427 -28.553 -30.985 -33.849 -37.378 -42.085 -49.360 -54.803 -48.087 -44.630 -42.928 -42.185 -42.100 -42.547 -43.465 -44.766 -46.134 -46.757 -45.840 -43.819 -41.626 -39.667 -38.006 -36.613 -35.449 -34.477 -33.667 -32.998 -32.453 -32.017 -31.681 -31.437 -31.277 -31.197 -31.193 -31.263 -31.403 -31.612 -31.890 -32.236 -32.652 -33.137 -33.693 -34.322 -35.027 -35.812 -36.679 -37.634 -38.682 -39.828 -41.079 -42.442 -43.921 -45.522 -47.246 -49.088 -51.035 -53.055 -55.081 -56.945 -58.279 -58.539 -57.527 -55.709 -53.643 -51.623 -49.754 -48.058 -46.533 -45.164 -43.939 -42.844 -41.867 -40.996 -40.223 -39.541 -38.943 -38.424 -37.979 -37.604 -37.296 -37.052 -36.869 -36.747 -36.684 -36.678 -36.729 -36.837 -37.001 -37.223 -37.502 -37.841 -38.240 -38.701 -39.228 -39.823 -40.490 -41.233 -42.059 -42.974 -43.986 -45.106 -46.347 -47.725 -49.261 -50.981 -52.923 -55.136 -57.694 -60.714 -64.371 -68.951 -74.596 -78.760 -76.603 -73.197 -69.945 -66.716 -63.661 -60.911 -58.492 -56.379 -54.533 -52.916 -51.494 -50.242 -49.137 -48.162 -47.304 -46.550 -45.892 -45.321 -44.831 -44.417 -44.074 -43.800 -43.590 -43.443 -43.356 -43.329 -43.360 -43.448 -43.593 -43.796 -44.056 -44.374 -44.753 -45.192 -45.694 -46.262 -46.899 -47.608 -48.395 -49.264 -50.223 -51.191 -52.158 -53.126 -54.094 0 1 1.0 3669771408.11 S2 VV 20.21 25.51 0.05 -8.242e+09 4.169e+10 -5.245e+09 4.184e+10 -2.398e+09 4.180e+10 2.896e+08 4.154e+10 2.798e+09 4.104e+10 5.099e+09 4.025e+10 7.165e+09 3.915e+10 8.966e+09 3.773e+10 1.047e+10 3.597e+10 1.165e+10 3.388e+10 1.249e+10 3.147e+10 1.297e+10 2.877e+10 1.309e+10 2.583e+10 1.285e+10 2.269e+10 1.227e+10 1.943e+10 1.137e+10 1.613e+10 1.020e+10 1.289e+10 8.827e+09 9.792e+09 7.315e+09 6.953e+09 5.749e+09 4.470e+09 4.233e+09 2.441e+09 2.889e+09 9.334e+08 1.858e+09 -7.301e+07 1.241e+09 -8.386e+08 8.545e+08 -1.916e+09 2.689e+08 -3.752e+09 -8.779e+08 -6.521e+09 -2.818e+09 -1.026e+10 -5.717e+09 -1.498e+10 -9.705e+09 -2.062e+10 -1.489e+10 -2.713e+10 -2.138e+10 -3.442e+10 -2.925e+10 -4.236e+10 -3.854e+10 -5.082e+10 -4.930e+10 -5.962e+10 -6.154e+10 -6.856e+10 -7.522e+10 -7.743e+10 -9.031e+10 -8.600e+10 -1.067e+11 -9.402e+10 -1.243e+11 -1.012e+11 -1.431e+11 -1.074e+11 -1.627e+11 -1.122e+11 -1.830e+11 -1.155e+11 -2.038e+11 -1.169e+11 -2.249e+11 -1.163e+11 -2.460e+11 -1.135e+11 -2.669e+11 -1.083e+11 -2.873e+11 -1.004e+11 -3.071e+11 -8.992e+10 -3.260e+11 -7.658e+10 -3.440e+11 -6.031e+10 -3.608e+11 -4.105e+10 -3.765e+11 -1.867e+10 -3.911e+11 6.984e+09 -4.047e+11 3.608e+10 -4.174e+11 6.895e+10 -4.293e+11 1.060e+11 -4.407e+11 1.479e+11 -4.518e+11 1.953e+11 -4.627e+11 2.494e+11 -4.734e+11 3.114e+11 -4.839e+11 3.829e+11 -4.938e+11 4.659e+11 -5.026e+11 5.623e+11 -5.094e+11 6.745e+11 -5.132e+11 8.052e+11 -5.127e+11 9.567e+11 -5.061e+11 1.132e+12 -4.916e+11 1.335e+12 -4.669e+11 1.568e+12 -4.296e+11 1.834e+12 -3.771e+11 2.137e+12 -3.064e+11 2.479e+12 -2.143e+11 2.864e+12 -9.731e+10 3.296e+12 4.814e+10 3.778e+12 2.260e+11 4.313e+12 4.407e+11 4.905e+12 6.962e+11 5.557e+12 9.972e+11 6.272e+12 1.349e+12 7.055e+12 1.755e+12 7.907e+12 2.222e+12 8.831e+12 2.755e+12 9.832e+12 3.357e+12 1.091e+13 4.036e+12 1.207e+13 4.795e+12 1.331e+13 5.639e+12 1.464e+13 6.574e+12 1.605e+13 7.603e+12 1.754e+13 8.731e+12 1.913e+13 9.961e+12 2.080e+13 1.130e+13 2.256e+13 1.274e+13 2.440e+13 1.429e+13 2.632e+13 1.596e+13 2.833e+13 1.774e+13 3.042e+13 1.962e+13 3.259e+13 2.163e+13 3.483e+13 2.374e+13 3.714e+13 2.596e+13 3.951e+13 2.828e+13 4.196e+13 3.071e+13 4.446e+13 3.324e+13 4.702e+13 3.587e+13 4.963e+13 3.858e+13 5.228e+13 4.138e+13 5.496e+13 4.426e+13 5.768e+13 4.721e+13 6.043e+13 5.023e+13 6.320e+13 5.331e+13 6.599e+13 5.646e+13 6.879e+13 5.965e+13 7.160e+13 6.289e+13 7.442e+13 6.617e+13 7.724e+13 6.948e+13 8.006e+13 7.282e+13 8.287e+13 7.618e+13 8.567e+13 7.956e+13 8.847e+13 8.295e+13 9.125e+13 8.635e+13 9.401e+13 8.975e+13 9.676e+13 9.314e+13 9.949e+13 9.651e+13 1.022e+14 9.986e+13 1.049e+14 1.032e+14 1.076e+14 1.065e+14 1.102e+14 1.097e+14 1.128e+14 1.129e+14 1.154e+14 1.160e+14 1.180e+14 1.191e+14 1.205e+14 1.221e+14 1.230e+14 1.250e+14 1.255e+14 1.278e+14 1.280e+14 1.304e+14 1.304e+14 1.330e+14 1.328e+14 1.354e+14 1.351e+14 1.377e+14 1.374e+14 1.399e+14 1.397e+14 1.419e+14 1.420e+14 1.437e+14 1.442e+14 1.454e+14 1.465e+14 1.470e+14 1.487e+14 1.484e+14 1.508e+14 1.496e+14 1.530e+14 1.507e+14 1.551e+14 1.515e+14 1.573e+14 1.523e+14 1.594e+14 1.528e+14 1.615e+14 1.532e+14 1.636e+14 1.535e+14 1.657e+14 1.536e+14 1.679e+14 1.536e+14 1.700e+14 1.535e+14 1.722e+14 1.533e+14 1.744e+14 1.529e+14 1.766e+14 1.525e+14 1.788e+14 1.520e+14 1.811e+14 1.514e+14 1.834e+14 1.507e+14 1.858e+14 1.500e+14 1.882e+14 1.493e+14 1.907e+14 1.485e+14 1.932e+14 1.476e+14 1.958e+14 1.467e+14 1.985e+14 1.458e+14 2.011e+14 1.449e+14 2.039e+14 1.440e+14 2.067e+14 1.430e+14 2.095e+14 1.420e+14 2.124e+14 1.410e+14 2.153e+14 1.400e+14 2.182e+14 1.390e+14 2.211e+14 1.379e+14 2.241e+14 1.369e+14 2.271e+14 1.358e+14 2.300e+14 1.347e+14 2.330e+14 1.335e+14 2.359e+14 1.323e+14 2.388e+14 1.311e+14 2.416e+14 1.299e+14 2.444e+14 1.286e+14 2.471e+14 1.274e+14 2.496e+14 1.260e+14 2.521e+14 1.247e+14 2.545e+14 1.233e+14 2.567e+14 1.219e+14 2.588e+14 1.205e+14 2.608e+14 1.191e+14 2.626e+14 1.176e+14 2.643e+14 1.162e+14 2.657e+14 1.147e+14 2.670e+14 1.132e+14 2.680e+14 1.117e+14 2.689e+14 1.102e+14 2.695e+14 1.087e+14 2.699e+14 1.072e+14 2.700e+14 1.057e+14 2.699e+14 1.042e+14 2.695e+14 1.027e+14 2.688e+14 1.012e+14 2.679e+14 9.979e+13 2.666e+14 9.833e+13 2.651e+14 9.689e+13 2.633e+14 9.545e+13 2.611e+14 9.401e+13 2.587e+14 9.258e+13 2.560e+14 9.115e+13 2.529e+14 8.971e+13 2.496e+14 8.826e+13 2.460e+14 8.681e+13 2.421e+14 8.534e+13 2.379e+14 8.385e+13 2.334e+14 8.234e+13 2.287e+14 8.081e+13 2.237e+14 7.925e+13 2.185e+14 7.767e+13 2.130e+14 7.605e+13 2.074e+14 7.440e+13 2.016e+14 7.272e+13 1.956e+14 7.101e+13 1.895e+14 6.925e+13 1.833e+14 6.746e+13 1.769e+14 6.565e+13 1.705e+14 6.380e+13 1.640e+14 6.193e+13 1.575e+14 6.004e+13 1.509e+14 5.813e+13 1.444e+14 5.621e+13 1.378e+14 5.428e+13 1.313e+14 5.233e+13 1.248e+14 5.039e+13 1.184e+14 4.845e+13 1.121e+14 4.651e+13 1.059e+14 4.458e+13 9.987e+13 4.266e+13 9.393e+13 4.077e+13 8.813e+13 3.889e+13 8.250e+13 3.704e+13 7.704e+13 3.521e+13 7.175e+13 3.342e+13 6.665e+13 3.167e+13 6.176e+13 2.995e+13 5.706e+13 2.827e+13 5.256e+13 2.663e+13 4.828e+13 2.504e+13 4.421e+13 2.349e+13 4.036e+13 2.199e+13 3.672e+13 2.054e+13 3.329e+13 1.915e+13 3.008e+13 1.781e+13 2.707e+13 1.652e+13 2.427e+13 1.528e+13 2.167e+13 1.410e+13 1.927e+13 1.298e+13 1.706e+13 1.191e+13 1.503e+13 1.090e+13 1.317e+13 9.949e+12 1.149e+13 9.052e+12 9.963e+12 8.210e+12 8.589e+12 7.423e+12 7.358e+12 6.692e+12 6.262e+12 6.014e+12 5.291e+12 5.387e+12 4.434e+12 4.809e+12 3.684e+12 4.279e+12 3.030e+12 3.794e+12 2.464e+12 3.353e+12 1.978e+12 2.954e+12 1.565e+12 2.595e+12 1.214e+12 2.272e+12 9.205e+11 1.984e+12 6.765e+11 1.728e+12 4.753e+11 1.502e+12 3.114e+11 1.303e+12 1.791e+11 1.128e+12 7.344e+10 9.759e+11 -9.814e+09 8.430e+11 -7.459e+10 7.274e+11 -1.243e+11 6.271e+11 -1.616e+11 5.399e+11 -1.889e+11 4.639e+11 -2.081e+11 3.976e+11 -2.207e+11 3.396e+11 -2.278e+11 2.885e+11 -2.304e+11 2.434e+11 -2.291e+11 2.035e+11 -2.245e+11 1.681e+11 -2.171e+11 1.368e+11 -2.071e+11 1.092e+11 -1.950e+11 8.490e+10 -1.811e+11 6.378e+10 -1.658e+11 4.562e+10 -1.495e+11 3.023e+10 -1.325e+11 1.748e+10 -1.153e+11 7.195e+09 -9.819e+10 -8.190e+08 -8.165e+10 -6.742e+09 -6.606e+10 -1.081e+10 -5.173e+10 -1.331e+10 -3.897e+10 -1.475e+10 -2.788e+10 -1.483e+10 -1.916e+10 -1.480e+10 -1.200e+10 -1.493e+10 -6.399e+09 -1.572e+10 -1.661e+09 -1.743e+10 3.172e+09 -1.999e+10 8.958e+09 -2.309e+10 1.625e+10 -2.643e+10 2.527e+10 -2.971e+10 3.600e+10 -3.272e+10 4.830e+10 -3.527e+10 6.195e+10 -3.725e+10 7.664e+10 -3.856e+10 9.208e+10 -3.916e+10 1.080e+11 -3.900e+10 1.239e+11 -3.809e+10 1.396e+11 -3.646e+10 1.548e+11 -3.414e+10 1.692e+11 -3.118e+10 1.824e+11 -2.766e+10 1.944e+11 -2.365e+10 2.048e+11 -1.925e+10 2.136e+11 -1.454e+10 2.206e+11 -9.613e+09 2.257e+11 -4.563e+09 2.290e+11 5.237e+08 2.304e+11 5.554e+09 2.299e+11 1.045e+10 2.277e+11 1.515e+10 2.239e+11 1.956e+10 2.185e+11 2.365e+10 2.116e+11 2.736e+10 2.036e+11 3.064e+10 1.945e+11 3.347e+10 1.844e+11 3.582e+10 1.737e+11 3.769e+10 1.624e+11 3.905e+10 1.508e+11 3.993e+10 1.389e+11 4.032e+10 1.270e+11 4.026e+10 1.152e+11 3.976e+10 1.037e+11 3.886e+10 9.252e+10 3.758e+10 8.181e+10 3.598e+10 7.165e+10 3.410e+10 6.212e+10 3.197e+10 5.327e+10 2.966e+10 4.513e+10 2.722e+10 3.775e+10 2.468e+10 3.111e+10 2.210e+10 2.523e+10 1.953e+10 2.008e+10 1.701e+10 1.564e+10 1.458e+10 1.187e+10 1.227e+10 8.726e+09 1.011e+10 6.163e+09 8.125e+09 4.122e+09 6.344e+09 2.551e+09 4.777e+09 1.387e+09 3.434e+09 5.722e+08 2.325e+09 4.801e+07 1.452e+09 -2.470e+08 8.115e+08 -3.782e+08 3.799e+08 -4.239e+08 8.459e+07 -4.734e+08 -2.072e+08 -5.866e+08 -6.278e+08 -7.550e+08 -1.251e+09 -9.287e+08 -2.105e+09 -1.057e+09 -3.200e+09 -1.097e+09 -4.542e+09 -1.010e+09 -6.135e+09 -7.597e+08 -7.975e+09 -3.134e+08 -1.006e+10 3.605e+08 -1.240e+10 1.291e+09 -1.496e+10 2.501e+09 -1.775e+10 4.015e+09 -2.075e+10 5.848e+09 -2.393e+10 8.011e+09 -2.728e+10 1.051e+10 -3.077e+10 1.335e+10 -3.437e+10 1.651e+10 -3.806e+10 1.998e+10 -4.178e+10 2.375e+10 -4.551e+10 2.779e+10 -4.920e+10 3.207e+10 -5.282e+10 3.654e+10 -5.632e+10 4.117e+10 -5.967e+10 4.592e+10 -6.281e+10 5.072e+10 -6.572e+10 5.554e+10 -6.835e+10 6.031e+10 -7.067e+10 6.498e+10 -7.265e+10 6.949e+10 -7.427e+10 7.378e+10 -7.550e+10 7.781e+10 -7.631e+10 8.152e+10 -7.671e+10 8.486e+10 -7.668e+10 8.778e+10 -7.622e+10 9.023e+10 -7.534e+10 9.219e+10 -7.405e+10 9.362e+10 -7.238e+10 9.450e+10 -7.033e+10 9.479e+10 -6.794e+10 9.450e+10 -6.525e+10 9.362e+10 -6.229e+10 9.216e+10 -5.911e+10 9.012e+10 -5.575e+10 8.754e+10 -5.224e+10 8.443e+10 -4.865e+10 8.084e+10 -4.502e+10 7.681e+10 -4.138e+10 7.240e+10 -3.777e+10 6.767e+10 -3.425e+10 6.268e+10 -3.083e+10 5.749e+10 -2.755e+10 5.219e+10 -2.444e+10 4.684e+10 -2.151e+10 4.152e+10 -1.878e+10 3.629e+10 -1.625e+10 3.124e+10 -1.393e+10 2.642e+10 -1.183e+10 2.189e+10 -9.934e+09 1.772e+10 -8.247e+09 1.394e+10 -6.759e+09 1.059e+10 -5.461e+09 7.703e+09 -4.343e+09 5.294e+09 -3.403e+09 3.369e+09 -2.644e+09 1.911e+09 -2.086e+09 8.662e+08 -1.761e+09 1.202e+08 -1.682e+09 -5.238e+08 -1.810e+09 -1.282e+09 -2.073e+09 -2.297e+09 -2.410e+09 -3.616e+09 -2.791e+09 -5.233e+09 -3.205e+09 -7.114e+09 -3.650e+09 -9.217e+09 -4.133e+09 -1.150e+10 -4.659e+09 -1.390e+10 -5.235e+09 -1.638e+10 -5.867e+09 -1.889e+10 -6.563e+09 -2.137e+10 -7.326e+09 -2.379e+10 -8.162e+09 -2.611e+10 -9.073e+09 -2.827e+10 -1.006e+10 -3.026e+10 -1.112e+10 -3.203e+10 -1.226e+10 -3.356e+10 -1.347e+10 -3.483e+10 -1.475e+10 -3.581e+10 -1.608e+10 -3.651e+10 -1.748e+10 -3.691e+10 -1.891e+10 -3.702e+10 -2.039e+10 -3.683e+10 -2.190e+10 -3.637e+10 -2.344e+10 -3.564e+10 -2.500e+10 -3.466e+10 -2.658e+10 -3.346e+10 -2.818e+10 -3.206e+10 -2.981e+10 -3.049e+10 -3.148e+10 -2.876e+10 -3.320e+10 -2.689e+10 -3.498e+10 -2.491e+10 -3.684e+10 -2.282e+10 -3.879e+10 -2.062e+10 -4.086e+10 -1.833e+10 -4.306e+10 -1.593e+10 -4.541e+10 -1.341e+10 -4.791e+10 -1.076e+10 -5.058e+10 -7.978e+09 -5.340e+10 -5.037e+09 -5.638e+10 -1.931e+09 -5.950e+10 1.345e+09 -6.274e+10 4.796e+09 -6.607e+10 8.415e+09 -6.948e+10 1.219e+10 -7.294e+10 1.611e+10 -7.641e+10 2.014e+10 -7.985e+10 2.427e+10 -8.325e+10 2.845e+10 -8.656e+10 3.266e+10 -8.976e+10 3.685e+10 -9.281e+10 4.100e+10 -9.569e+10 4.506e+10 -9.836e+10 4.900e+10 -1.008e+11 5.279e+10 -1.030e+11 5.639e+10 -1.049e+11 5.978e+10 -1.066e+11 6.293e+10 -1.079e+11 6.583e+10 -1.089e+11 6.846e+10 -1.096e+11 7.080e+10 -1.099e+11 7.284e+10 -1.099e+11 7.459e+10 -1.096e+11 7.603e+10 -1.089e+11 7.716e+10 -1.078e+11 7.799e+10 -1.065e+11 7.852e+10 -1.048e+11 7.875e+10 -1.028e+11 7.869e+10 -1.005e+11 7.833e+10 -9.791e+10 7.770e+10 -9.508e+10 7.681e+10 -9.201e+10 7.566e+10 -8.874e+10 7.427e+10 -8.529e+10 7.265e+10 -8.169e+10 7.081e+10 -7.797e+10 6.876e+10 -7.416e+10 6.654e+10 -7.028e+10 6.414e+10 -6.637e+10 6.159e+10 -6.246e+10 5.891e+10 -5.856e+10 5.612e+10 -5.471e+10 5.323e+10 -5.094e+10 5.028e+10 -4.726e+10 4.729e+10 -4.368e+10 4.427e+10 -4.023e+10 4.126e+10 -3.692e+10 3.827e+10 -3.376e+10 3.531e+10 -3.076e+10 3.243e+10 -2.793e+10 2.962e+10 -2.526e+10 2.692e+10 -2.276e+10 2.432e+10 -2.042e+10 2.186e+10 -1.826e+10 1.953e+10 -1.625e+10 1.734e+10 -1.441e+10 1.531e+10 -1.271e+10 1.343e+10 -1.116e+10 1.170e+10 -9.757e+09 1.013e+10 -8.481e+09 8.711e+09 -7.334e+09 7.440e+09 -6.304e+09 6.308e+09 -5.384e+09 5.308e+09 -4.568e+09 4.433e+09 -3.848e+09 3.672e+09 -3.216e+09 3.016e+09 -2.666e+09 2.457e+09 -2.192e+09 1.983e+09 -1.785e+09 1.586e+09 -1.439e+09 1.255e+09 -1.149e+09 9.831e+08 -9.064e+08 7.611e+08 -7.073e+08 5.822e+08 -5.456e+08 4.395e+08 -4.159e+08 3.269e+08 -3.137e+08 2.393e+08 -2.343e+08 1.720e+08 -1.736e+08 1.210e+08 -1.283e+08 8.314e+07 -9.519e+07 5.543e+07 -7.159e+07 3.553e+07 -5.548e+07 2.150e+07 -4.521e+07 1.164e+07 -3.959e+07 4.453e+06 -3.782e+07 -1.312e+06 -3.938e+07 -6.694e+06 -4.404e+07 -1.245e+07 -5.174e+07 -1.906e+07 -6.263e+07 -2.681e+07 -7.695e+07 -3.587e+07 -9.495e+07 -4.634e+07 -1.169e+08 -5.827e+07 -1.428e+08 -7.170e+07 -1.729e+08 -8.664e+07 -2.070e+08 -1.031e+08 -2.448e+08 -1.210e+08 -2.861e+08 -1.404e+08 -3.302e+08 -1.612e+08 -3.767e+08 -1.835e+08 -4.248e+08 -2.073e+08 -4.739e+08 -2.326e+08 -5.232e+08 -2.594e+08 -5.720e+08 -2.878e+08 -6.197e+08 -3.178e+08 -6.657e+08 -3.497e+08 -7.095e+08 -3.835e+08 -7.506e+08 -4.192e+08 -7.887e+08 -4.571e+08 -8.237e+08 -4.973e+08 -8.553e+08 -5.400e+08 -8.833e+08 -5.854e+08 -9.078e+08 -6.337e+08 -9.287e+08 -6.850e+08 -9.460e+08 -7.397e+08 -9.596e+08 -7.978e+08 -9.695e+08 -8.594e+08 -9.758e+08 -9.246e+08 -9.782e+08 -9.936e+08 -9.765e+08 -1.066e+09 -9.705e+08 -1.142e+09 -9.600e+08 -1.222e+09 -9.445e+08 -1.304e+09 -9.236e+08 -1.389e+09 -8.969e+08 -1.475e+09 -8.641e+08 -1.562e+09 -8.247e+08 -1.650e+09 -7.782e+08 -1.736e+09 0.005 -50.849 -49.863 -48.877 -47.891 -46.906 -45.929 -45.046 -44.248 -43.529 -42.883 -42.307 -41.796 -41.347 -40.959 -40.628 -40.354 -40.135 -39.970 -39.859 -39.801 -39.797 -39.847 -39.951 -40.112 -40.329 -40.605 -40.943 -41.345 -41.814 -42.354 -42.971 -43.670 -44.458 -45.344 -46.339 -47.456 -48.711 -50.125 -51.725 -53.545 -55.631 -58.039 -60.837 -64.061 -67.539 -70.388 -71.286 -70.542 -69.026 -66.873 -64.209 -61.404 -58.742 -56.330 -54.179 -52.271 -50.576 -49.069 -47.726 -46.527 -45.458 -44.505 -43.657 -42.907 -42.246 -41.670 -41.174 -40.754 -40.407 -40.130 -39.923 -39.785 -39.714 -39.711 -39.777 -39.911 -40.117 -40.395 -40.749 -41.181 -41.696 -42.297 -42.988 -43.776 -44.663 -45.654 -46.747 -47.935 -49.201 -50.508 -51.792 -52.966 -53.938 -54.651 -55.103 -55.322 -55.301 -54.961 -54.187 -52.940 -51.328 -49.531 -47.710 -45.954 -44.305 -42.780 -41.377 -40.094 -38.922 -37.855 -36.885 -36.007 -35.213 -34.501 -33.867 -33.306 -32.817 -32.399 -32.049 -31.768 -31.555 -31.410 -31.336 -31.334 -31.407 -31.557 -31.791 -32.112 -32.530 -33.052 -33.690 -34.459 -35.378 -36.470 -37.763 -39.290 -41.081 -43.121 -45.239 -46.899 -47.403 -46.830 -45.933 -45.292 -45.183 -45.816 -47.581 -51.576 -58.891 -49.636 -42.758 -38.220 -34.745 -31.889 -29.443 -27.295 -25.372 -23.631 -22.037 -20.569 -19.207 -17.938 -16.751 -15.639 -14.592 -13.606 -12.675 -11.796 -10.963 -10.175 -9.429 -8.721 -8.051 -7.415 -6.813 -6.243 -5.703 -5.193 -4.711 -4.256 -3.828 -3.425 -3.047 -2.694 -2.364 -2.058 -1.774 -1.512 -1.272 -1.054 -0.857 -0.680 -0.525 -0.390 -0.275 -0.180 -0.105 -0.050 -0.015 0.000 -0.004 -0.028 -0.071 -0.134 -0.217 -0.320 -0.443 -0.587 -0.751 -0.936 -1.142 -1.369 -1.618 -1.889 -2.182 -2.498 -2.838 -3.201 -3.589 -4.002 -4.441 -4.907 -5.401 -5.923 -6.476 -7.059 -7.675 -8.325 -9.010 -9.734 -10.497 -11.304 -12.155 -13.056 -14.009 -15.019 -16.092 -17.234 -18.453 -19.757 -21.160 -22.674 -24.320 -26.123 -28.116 -30.349 -32.892 -35.853 -39.397 -43.703 -48.213 -49.219 -47.206 -45.603 -44.855 -44.820 -45.381 -46.407 -47.558 -48.004 -46.941 -44.795 -42.495 -40.442 -38.698 -37.231 -36.000 -34.966 -34.099 -33.377 -32.782 -32.299 -31.918 -31.630 -31.429 -31.308 -31.263 -31.292 -31.392 -31.561 -31.798 -32.102 -32.473 -32.912 -33.420 -33.998 -34.648 -35.372 -36.173 -37.055 -38.019 -39.070 -40.210 -41.442 -42.764 -44.172 -45.656 -47.194 -48.751 -50.267 -51.663 -52.824 -53.626 -53.941 -53.699 -52.934 -51.783 -50.418 -48.980 -47.560 -46.208 -44.947 -43.788 -42.731 -41.773 -40.909 -40.134 -39.443 -38.832 -38.296 -37.831 -37.434 -37.102 -36.832 -36.623 -36.471 -36.377 -36.339 -36.356 -36.427 -36.553 -36.734 -36.970 -37.262 -37.610 -38.017 -38.484 -39.014 -39.610 -40.274 -41.012 -41.828 -42.728 -43.720 -44.812 -46.016 -47.344 -48.814 -50.446 -52.268 -54.313 -56.633 -59.283 -62.343 -65.914 -70.150 -75.423 -83.068 -90.489 -77.931 -71.511 -67.055 -63.591 -60.771 -58.414 -56.411 -54.690 -53.199 -51.900 -50.767 -49.776 -48.912 -48.161 -47.513 -46.958 -46.491 -46.104 -45.795 -45.559 -45.393 -45.294 -45.263 -45.296 -45.394 -45.556 -45.784 -46.077 -46.437 -46.866 -47.368 -47.945 -48.601 -49.343 -50.177 -51.111 -52.157 -53.327 -54.511 -55.694 -56.878 -58.061 0 1 1.0 3669771408.11 S2 VH 20.21 25.51 0.05 -3.364e+10 4.299e+09 -3.051e+10 6.326e+09 -2.747e+10 7.998e+09 -2.452e+10 9.333e+09 -2.169e+10 1.035e+10 -1.897e+10 1.106e+10 -1.638e+10 1.149e+10 -1.392e+10 1.164e+10 -1.160e+10 1.154e+10 -9.433e+09 1.119e+10 -7.426e+09 1.063e+10 -5.598e+09 9.870e+09 -3.961e+09 8.943e+09 -2.527e+09 7.882e+09 -1.312e+09 6.731e+09 -3.278e+08 5.539e+09 4.333e+08 4.363e+09 9.865e+08 3.267e+09 1.377e+09 2.304e+09 1.693e+09 1.497e+09 2.060e+09 7.964e+08 2.606e+09 4.526e+07 3.394e+09 -9.769e+08 4.414e+09 -2.480e+09 5.616e+09 -4.638e+09 6.930e+09 -7.589e+09 8.272e+09 -1.144e+10 9.549e+09 -1.629e+10 1.066e+10 -2.221e+10 1.150e+10 -2.926e+10 1.195e+10 -3.745e+10 1.189e+10 -4.682e+10 1.119e+10 -5.732e+10 9.712e+09 -6.892e+10 7.342e+09 -8.153e+10 3.951e+09 -9.504e+10 -5.723e+08 -1.093e+11 -6.339e+09 -1.241e+11 -1.344e+10 -1.393e+11 -2.194e+10 -1.547e+11 -3.191e+10 -1.698e+11 -4.337e+10 -1.846e+11 -5.634e+10 -1.987e+11 -7.080e+10 -2.117e+11 -8.674e+10 -2.234e+11 -1.041e+11 -2.335e+11 -1.228e+11 -2.417e+11 -1.427e+11 -2.478e+11 -1.639e+11 -2.514e+11 -1.862e+11 -2.525e+11 -2.095e+11 -2.508e+11 -2.338e+11 -2.461e+11 -2.592e+11 -2.385e+11 -2.858e+11 -2.277e+11 -3.136e+11 -2.136e+11 -3.431e+11 -1.961e+11 -3.744e+11 -1.749e+11 -4.081e+11 -1.497e+11 -4.448e+11 -1.199e+11 -4.852e+11 -8.471e+10 -5.299e+11 -4.317e+10 -5.799e+11 6.104e+09 -6.358e+11 6.487e+10 -6.985e+11 1.350e+11 -7.685e+11 2.191e+11 -8.465e+11 3.199e+11 -9.326e+11 4.403e+11 -1.027e+12 5.838e+11 -1.131e+12 7.548e+11 -1.243e+12 9.564e+11 -1.363e+12 1.193e+12 -1.490e+12 1.470e+12 -1.624e+12 1.790e+12 -1.764e+12 2.160e+12 -1.908e+12 2.584e+12 -2.056e+12 3.067e+12 -2.205e+12 3.615e+12 -2.353e+12 4.233e+12 -2.498e+12 4.927e+12 -2.638e+12 5.701e+12 -2.770e+12 6.563e+12 -2.891e+12 7.517e+12 -2.998e+12 8.567e+12 -3.088e+12 9.721e+12 -3.157e+12 1.098e+13 -3.201e+12 1.235e+13 -3.217e+12 1.384e+13 -3.201e+12 1.545e+13 -3.148e+12 1.718e+13 -3.056e+12 1.904e+13 -2.919e+12 2.103e+13 -2.734e+12 2.314e+13 -2.497e+12 2.539e+13 -2.205e+12 2.777e+13 -1.854e+12 3.027e+13 -1.442e+12 3.291e+13 -9.647e+11 3.568e+13 -4.209e+11 3.857e+13 1.925e+11 4.158e+13 8.766e+11 4.471e+13 1.632e+12 4.796e+13 2.458e+12 5.133e+13 3.357e+12 5.480e+13 4.328e+12 5.837e+13 5.374e+12 6.204e+13 6.492e+12 6.580e+13 7.681e+12 6.963e+13 8.941e+12 7.354e+13 1.027e+13 7.752e+13 1.166e+13 8.155e+13 1.312e+13 8.564e+13 1.464e+13 8.977e+13 1.621e+13 9.393e+13 1.784e+13 9.813e+13 1.952e+13 1.023e+14 2.125e+13 1.066e+14 2.302e+13 1.108e+14 2.482e+13 1.150e+14 2.666e+13 1.193e+14 2.853e+13 1.235e+14 3.042e+13 1.277e+14 3.233e+13 1.318e+14 3.426e+13 1.359e+14 3.619e+13 1.400e+14 3.811e+13 1.440e+14 4.003e+13 1.480e+14 4.194e+13 1.518e+14 4.383e+13 1.557e+14 4.569e+13 1.594e+14 4.751e+13 1.631e+14 4.929e+13 1.666e+14 5.102e+13 1.701e+14 5.269e+13 1.735e+14 5.429e+13 1.767e+14 5.582e+13 1.799e+14 5.727e+13 1.829e+14 5.863e+13 1.859e+14 5.989e+13 1.887e+14 6.105e+13 1.914e+14 6.210e+13 1.940e+14 6.304e+13 1.965e+14 6.388e+13 1.989e+14 6.461e+13 2.013e+14 6.521e+13 2.035e+14 6.569e+13 2.056e+14 6.604e+13 2.077e+14 6.626e+13 2.097e+14 6.635e+13 2.115e+14 6.632e+13 2.134e+14 6.616e+13 2.151e+14 6.588e+13 2.168e+14 6.549e+13 2.185e+14 6.498e+13 2.201e+14 6.436e+13 2.217e+14 6.365e+13 2.233e+14 6.283e+13 2.249e+14 6.193e+13 2.264e+14 6.095e+13 2.280e+14 5.989e+13 2.296e+14 5.876e+13 2.312e+14 5.756e+13 2.328e+14 5.631e+13 2.344e+14 5.501e+13 2.360e+14 5.367e+13 2.377e+14 5.229e+13 2.394e+14 5.087e+13 2.412e+14 4.943e+13 2.429e+14 4.796e+13 2.447e+14 4.648e+13 2.466e+14 4.498e+13 2.484e+14 4.346e+13 2.503e+14 4.194e+13 2.521e+14 4.041e+13 2.540e+14 3.888e+13 2.559e+14 3.735e+13 2.578e+14 3.582e+13 2.596e+14 3.429e+13 2.615e+14 3.277e+13 2.633e+14 3.125e+13 2.651e+14 2.975e+13 2.668e+14 2.826e+13 2.685e+14 2.681e+13 2.701e+14 2.538e+13 2.716e+14 2.397e+13 2.731e+14 2.259e+13 2.744e+14 2.123e+13 2.757e+14 1.991e+13 2.769e+14 1.862e+13 2.779e+14 1.737e+13 2.788e+14 1.616e+13 2.796e+14 1.500e+13 2.802e+14 1.390e+13 2.807e+14 1.285e+13 2.810e+14 1.187e+13 2.812e+14 1.095e+13 2.811e+14 1.011e+13 2.809e+14 9.342e+12 2.804e+14 8.656e+12 2.797e+14 8.054e+12 2.788e+14 7.539e+12 2.777e+14 7.113e+12 2.763e+14 6.778e+12 2.746e+14 6.534e+12 2.727e+14 6.380e+12 2.705e+14 6.317e+12 2.680e+14 6.341e+12 2.653e+14 6.450e+12 2.623e+14 6.640e+12 2.590e+14 6.905e+12 2.554e+14 7.240e+12 2.516e+14 7.639e+12 2.475e+14 8.094e+12 2.431e+14 8.599e+12 2.385e+14 9.144e+12 2.336e+14 9.721e+12 2.285e+14 1.032e+13 2.232e+14 1.094e+13 2.176e+14 1.156e+13 2.119e+14 1.219e+13 2.060e+14 1.280e+13 2.000e+14 1.339e+13 1.938e+14 1.395e+13 1.875e+14 1.447e+13 1.811e+14 1.496e+13 1.747e+14 1.542e+13 1.682e+14 1.582e+13 1.616e+14 1.618e+13 1.550e+14 1.649e+13 1.484e+14 1.675e+13 1.418e+14 1.695e+13 1.353e+14 1.709e+13 1.288e+14 1.718e+13 1.224e+14 1.722e+13 1.160e+14 1.720e+13 1.098e+14 1.713e+13 1.036e+14 1.701e+13 9.764e+13 1.684e+13 9.178e+13 1.662e+13 8.607e+13 1.636e+13 8.053e+13 1.606e+13 7.515e+13 1.572e+13 6.996e+13 1.534e+13 6.496e+13 1.493e+13 6.015e+13 1.450e+13 5.555e+13 1.403e+13 5.115e+13 1.355e+13 4.696e+13 1.304e+13 4.298e+13 1.252e+13 3.922e+13 1.198e+13 3.566e+13 1.144e+13 3.232e+13 1.088e+13 2.918e+13 1.032e+13 2.625e+13 9.763e+12 2.353e+13 9.205e+12 2.100e+13 8.650e+12 1.867e+13 8.103e+12 1.652e+13 7.565e+12 1.456e+13 7.038e+12 1.276e+13 6.525e+12 1.113e+13 6.028e+12 9.659e+12 5.549e+12 8.334e+12 5.091e+12 7.149e+12 4.654e+12 6.095e+12 4.238e+12 5.160e+12 3.845e+12 4.337e+12 3.476e+12 3.616e+12 3.130e+12 2.988e+12 2.809e+12 2.446e+12 2.511e+12 1.980e+12 2.238e+12 1.583e+12 1.987e+12 1.246e+12 1.760e+12 9.637e+11 1.554e+12 7.281e+11 1.369e+12 5.334e+11 1.203e+12 3.739e+11 1.056e+12 2.441e+11 9.254e+11 1.396e+11 8.100e+11 5.622e+10 7.083e+11 -9.803e+09 6.188e+11 -6.140e+10 5.402e+11 -1.012e+11 4.707e+11 -1.314e+11 4.095e+11 -1.537e+11 3.551e+11 -1.693e+11 3.066e+11 -1.795e+11 2.633e+11 -1.850e+11 2.244e+11 -1.865e+11 1.895e+11 -1.845e+11 1.580e+11 -1.795e+11 1.298e+11 -1.719e+11 1.045e+11 -1.621e+11 8.215e+10 -1.505e+11 6.246e+10 -1.375e+11 4.534e+10 -1.234e+11 3.075e+10 -1.088e+11 1.855e+10 -9.408e+10 8.593e+09 -7.953e+10 7.664e+08 -6.561e+10 -5.134e+09 -5.265e+10 -9.343e+09 -4.095e+10 -1.204e+10 -3.091e+10 -1.382e+10 -2.245e+10 -1.507e+10 -1.550e+10 -1.628e+10 -9.929e+09 -1.795e+10 -5.178e+09 -2.040e+10 -5.186e+08 -2.369e+10 4.742e+09 -2.765e+10 1.110e+10 -3.204e+10 1.881e+10 -3.658e+10 2.790e+10 -4.104e+10 3.829e+10 -4.523e+10 4.983e+10 -4.898e+10 6.225e+10 -5.215e+10 7.532e+10 -5.465e+10 8.877e+10 -5.640e+10 1.023e+11 -5.737e+10 1.157e+11 -5.754e+10 1.286e+11 -5.691e+10 1.408e+11 -5.553e+10 1.521e+11 -5.343e+10 1.623e+11 -5.068e+10 1.712e+11 -4.737e+10 1.788e+11 -4.357e+10 1.848e+11 -3.938e+10 1.893e+11 -3.490e+10 1.922e+11 -3.023e+10 1.936e+11 -2.546e+10 1.934e+11 -2.069e+10 1.917e+11 -1.600e+10 1.886e+11 -1.147e+10 1.842e+11 -7.165e+09 1.786e+11 -3.150e+09 1.720e+11 5.241e+08 1.644e+11 3.823e+09 1.561e+11 6.721e+09 1.471e+11 9.195e+09 1.377e+11 1.124e+10 1.279e+11 1.286e+10 1.179e+11 1.407e+10 1.079e+11 1.488e+10 9.802e+10 1.532e+10 8.830e+10 1.541e+10 7.889e+10 1.520e+10 6.985e+10 1.472e+10 6.128e+10 1.400e+10 5.324e+10 1.309e+10 4.577e+10 1.203e+10 3.891e+10 1.087e+10 3.269e+10 9.637e+09 2.711e+10 8.373e+09 2.217e+10 7.117e+09 1.786e+10 5.897e+09 1.414e+10 4.743e+09 1.099e+10 3.680e+09 8.366e+09 2.728e+09 6.221e+09 1.902e+09 4.507e+09 1.215e+09 3.175e+09 6.699e+08 2.175e+09 2.635e+08 1.459e+09 -2.524e+07 9.865e+08 -2.482e+08 7.190e+08 -4.892e+08 6.099e+08 -8.326e+08 6.056e+08 -1.329e+09 6.680e+08 -1.995e+09 7.899e+08 -2.836e+09 9.863e+08 -3.853e+09 1.283e+09 -5.044e+09 1.708e+09 -6.409e+09 2.292e+09 -7.944e+09 3.064e+09 -9.647e+09 4.054e+09 -1.151e+10 5.286e+09 -1.352e+10 6.787e+09 -1.568e+10 8.577e+09 -1.795e+10 1.067e+10 -2.033e+10 1.308e+10 -2.280e+10 1.582e+10 -2.533e+10 1.888e+10 -2.789e+10 2.226e+10 -3.047e+10 2.595e+10 -3.303e+10 2.993e+10 -3.554e+10 3.417e+10 -3.797e+10 3.865e+10 -4.030e+10 4.332e+10 -4.249e+10 4.814e+10 -4.451e+10 5.307e+10 -4.635e+10 5.805e+10 -4.797e+10 6.303e+10 -4.937e+10 6.796e+10 -5.052e+10 7.276e+10 -5.140e+10 7.738e+10 -5.202e+10 8.177e+10 -5.235e+10 8.585e+10 -5.241e+10 8.958e+10 -5.218e+10 9.290e+10 -5.167e+10 9.576e+10 -5.089e+10 9.812e+10 -4.985e+10 9.992e+10 -4.857e+10 1.011e+11 -4.705e+10 1.018e+11 -4.532e+10 1.018e+11 -4.340e+10 1.011e+11 -4.131e+10 9.982e+10 -3.908e+10 9.789e+10 -3.673e+10 9.536e+10 -3.430e+10 9.223e+10 -3.181e+10 8.856e+10 -2.929e+10 8.438e+10 -2.677e+10 7.974e+10 -2.427e+10 7.471e+10 -2.183e+10 6.937e+10 -1.947e+10 6.377e+10 -1.721e+10 5.800e+10 -1.506e+10 5.215e+10 -1.306e+10 4.629e+10 -1.120e+10 4.051e+10 -9.497e+09 3.489e+10 -7.958e+09 2.950e+10 -6.584e+09 2.442e+10 -5.373e+09 1.971e+10 -4.316e+09 1.542e+10 -3.408e+09 1.162e+10 -2.639e+09 8.329e+09 -1.994e+09 5.585e+09 -1.458e+09 3.406e+09 -1.019e+09 1.797e+09 -6.780e+08 7.414e+08 -4.842e+08 1.532e+08 -5.117e+08 -2.760e+08 -7.271e+08 -9.372e+08 -1.046e+09 -2.012e+09 -1.435e+09 -3.507e+09 -1.894e+09 -5.385e+09 -2.433e+09 -7.594e+09 -3.064e+09 -1.008e+10 -3.795e+09 -1.278e+10 -4.635e+09 -1.565e+10 -5.588e+09 -1.861e+10 -6.658e+09 -2.162e+10 -7.844e+09 -2.462e+10 -9.143e+09 -2.755e+10 -1.055e+10 -3.037e+10 -1.206e+10 -3.302e+10 -1.366e+10 -3.546e+10 -1.534e+10 -3.766e+10 -1.709e+10 -3.957e+10 -1.890e+10 -4.118e+10 -2.074e+10 -4.245e+10 -2.260e+10 -4.337e+10 -2.447e+10 -4.393e+10 -2.633e+10 -4.413e+10 -2.816e+10 -4.396e+10 -2.995e+10 -4.344e+10 -3.169e+10 -4.257e+10 -3.337e+10 -4.138e+10 -3.498e+10 -3.988e+10 -3.652e+10 -3.811e+10 -3.798e+10 -3.609e+10 -3.939e+10 -3.386e+10 -4.073e+10 -3.143e+10 -4.205e+10 -2.886e+10 -4.333e+10 -2.615e+10 -4.462e+10 -2.333e+10 -4.592e+10 -2.041e+10 -4.726e+10 -1.740e+10 -4.866e+10 -1.429e+10 -5.015e+10 -1.110e+10 -5.173e+10 -7.804e+09 -5.343e+10 -4.390e+09 -5.524e+10 -8.435e+08 -5.717e+10 2.848e+09 -5.921e+10 6.702e+09 -6.134e+10 1.072e+10 -6.355e+10 1.491e+10 -6.582e+10 1.927e+10 -6.811e+10 2.379e+10 -7.039e+10 2.844e+10 -7.265e+10 3.320e+10 -7.484e+10 3.804e+10 -7.694e+10 4.292e+10 -7.893e+10 4.781e+10 -8.078e+10 5.265e+10 -8.246e+10 5.741e+10 -8.395e+10 6.205e+10 -8.525e+10 6.653e+10 -8.632e+10 7.079e+10 -8.717e+10 7.482e+10 -8.779e+10 7.857e+10 -8.816e+10 8.202e+10 -8.828e+10 8.514e+10 -8.816e+10 8.792e+10 -8.780e+10 9.033e+10 -8.718e+10 9.238e+10 -8.634e+10 9.404e+10 -8.525e+10 9.532e+10 -8.395e+10 9.622e+10 -8.243e+10 9.674e+10 -8.070e+10 9.688e+10 -7.879e+10 9.666e+10 -7.670e+10 9.608e+10 -7.445e+10 9.516e+10 -7.206e+10 9.391e+10 -6.954e+10 9.234e+10 -6.690e+10 9.048e+10 -6.416e+10 8.834e+10 -6.135e+10 8.594e+10 -5.847e+10 8.331e+10 -5.555e+10 8.045e+10 -5.260e+10 7.741e+10 -4.965e+10 7.419e+10 -4.670e+10 7.084e+10 -4.378e+10 6.736e+10 -4.090e+10 6.380e+10 -3.808e+10 6.017e+10 -3.533e+10 5.650e+10 -3.266e+10 5.283e+10 -3.009e+10 4.917e+10 -2.761e+10 4.556e+10 -2.525e+10 4.201e+10 -2.300e+10 3.855e+10 -2.087e+10 3.519e+10 -1.887e+10 3.197e+10 -1.699e+10 2.888e+10 -1.523e+10 2.596e+10 -1.360e+10 2.320e+10 -1.210e+10 2.062e+10 -1.071e+10 1.822e+10 -9.445e+09 1.600e+10 -8.289e+09 1.397e+10 -7.239e+09 1.212e+10 -6.291e+09 1.045e+10 -5.440e+09 8.945e+09 -4.677e+09 7.607e+09 -4.001e+09 6.427e+09 -3.402e+09 5.391e+09 -2.874e+09 4.488e+09 -2.413e+09 3.707e+09 -2.011e+09 3.038e+09 -1.664e+09 2.468e+09 -1.366e+09 1.988e+09 -1.112e+09 1.586e+09 -8.977e+08 1.253e+09 -7.178e+08 9.794e+08 -5.682e+08 7.567e+08 -4.451e+08 5.773e+08 -3.449e+08 4.346e+08 -2.643e+08 3.224e+08 -2.002e+08 2.352e+08 -1.501e+08 1.686e+08 -1.113e+08 1.184e+08 -8.193e+07 8.127e+07 -6.001e+07 5.439e+07 -4.401e+07 3.536e+07 -3.260e+07 2.221e+07 -2.475e+07 1.337e+07 -1.962e+07 7.539e+06 -1.660e+07 3.676e+06 -1.522e+07 9.879e+05 -1.515e+07 -1.095e+06 -1.617e+07 -2.927e+06 -1.817e+07 -4.696e+06 -2.113e+07 -6.487e+06 -2.509e+07 -8.343e+06 -3.011e+07 -1.029e+07 -3.627e+07 -1.235e+07 -4.364e+07 -1.457e+07 -5.227e+07 -1.698e+07 -6.216e+07 -1.966e+07 -7.329e+07 -2.268e+07 -8.556e+07 -2.614e+07 -9.886e+07 -3.016e+07 -1.130e+08 -3.485e+07 -1.278e+08 -4.036e+07 -1.429e+08 -4.683e+07 -1.582e+08 -5.440e+07 -1.733e+08 -6.321e+07 -1.879e+08 -7.337e+07 -2.017e+08 -8.499e+07 -2.144e+08 -9.817e+07 -2.257e+08 -1.130e+08 -2.355e+08 -1.294e+08 -2.434e+08 -1.475e+08 -2.492e+08 -1.673e+08 -2.528e+08 -1.888e+08 -2.539e+08 -2.121e+08 -2.525e+08 -2.370e+08 -2.483e+08 -2.637e+08 -2.413e+08 -2.921e+08 -2.313e+08 -3.222e+08 -2.181e+08 -3.541e+08 -2.014e+08 -3.879e+08 -1.810e+08 -4.236e+08 -1.566e+08 -4.612e+08 -1.277e+08 -5.010e+08 -9.387e+07 -5.428e+08 -5.460e+07 -5.867e+08 -9.232e+06 -6.327e+08 4.284e+07 -6.806e+08 1.023e+08 -7.303e+08 1.699e+08 -7.815e+08 0.005 -52.224 -51.170 -50.116 -49.061 -48.007 -46.964 -46.024 -45.179 -44.420 -43.740 -43.136 -42.602 -42.134 -41.731 -41.389 -41.108 -40.885 -40.719 -40.611 -40.560 -40.566 -40.629 -40.751 -40.933 -41.176 -41.484 -41.858 -42.302 -42.821 -43.418 -44.101 -44.877 -45.755 -46.745 -47.862 -49.122 -50.548 -52.166 -54.012 -56.132 -58.585 -61.444 -64.782 -68.595 -72.519 -75.128 -74.450 -71.076 -67.000 -63.205 -59.898 -57.055 -54.590 -52.438 -50.543 -48.864 -47.369 -46.033 -44.835 -43.761 -42.797 -41.934 -41.163 -40.477 -39.871 -39.340 -38.881 -38.491 -38.167 -37.908 -37.712 -37.578 -37.507 -37.499 -37.553 -37.670 -37.853 -38.102 -38.419 -38.809 -39.273 -39.815 -40.440 -41.153 -41.958 -42.860 -43.865 -44.974 -46.188 -47.501 -48.891 -50.322 -51.729 -53.022 -54.100 -54.868 -55.245 -55.143 -54.478 -53.256 -51.618 -49.767 -47.879 -46.051 -44.331 -42.735 -41.265 -39.917 -38.684 -37.558 -36.532 -35.599 -34.753 -33.990 -33.305 -32.695 -32.157 -31.688 -31.288 -30.954 -30.688 -30.487 -30.354 -30.289 -30.295 -30.372 -30.526 -30.760 -31.079 -31.490 -32.002 -32.626 -33.375 -34.267 -35.326 -36.583 -38.080 -39.873 -42.036 -44.644 -47.643 -50.341 -51.201 -50.373 -49.449 -49.326 -50.503 -54.050 -61.020 -51.491 -44.393 -39.676 -36.050 -33.066 -30.512 -28.268 -26.264 -24.449 -22.791 -21.264 -19.850 -18.534 -17.305 -16.153 -15.071 -14.052 -13.091 -12.183 -11.324 -10.512 -9.743 -9.014 -8.324 -7.670 -7.051 -6.464 -5.909 -5.384 -4.888 -4.420 -3.980 -3.565 -3.176 -2.812 -2.472 -2.156 -1.863 -1.592 -1.344 -1.118 -0.913 -0.730 -0.567 -0.425 -0.304 -0.203 -0.122 -0.062 -0.021 -0.001 0.000 -0.019 -0.057 -0.116 -0.194 -0.293 -0.413 -0.552 -0.713 -0.894 -1.096 -1.320 -1.566 -1.834 -2.124 -2.437 -2.774 -3.135 -3.521 -3.931 -4.368 -4.832 -5.324 -5.844 -6.394 -6.976 -7.590 -8.238 -8.922 -9.644 -10.406 -11.211 -12.062 -12.961 -13.913 -14.922 -15.994 -17.135 -18.353 -19.657 -21.059 -22.573 -24.218 -26.020 -28.013 -30.245 -32.788 -35.748 -39.290 -43.594 -48.101 -49.102 -47.080 -45.462 -44.686 -44.601 -45.061 -45.891 -46.708 -46.809 -45.693 -43.756 -41.675 -39.777 -38.135 -36.736 -35.551 -34.550 -33.706 -33.001 -32.418 -31.943 -31.568 -31.283 -31.083 -30.962 -30.916 -30.943 -31.039 -31.203 -31.434 -31.733 -32.097 -32.530 -33.031 -33.602 -34.246 -34.966 -35.766 -36.650 -37.623 -38.693 -39.866 -41.152 -42.561 -44.103 -45.789 -47.629 -49.626 -51.770 -54.019 -56.267 -58.299 -59.775 -60.328 -59.816 -58.462 -56.655 -54.715 -52.820 -51.054 -49.444 -47.994 -46.699 -45.546 -44.523 -43.621 -42.828 -42.138 -41.543 -41.036 -40.612 -40.268 -39.999 -39.803 -39.678 -39.621 -39.632 -39.711 -39.857 -40.071 -40.353 -40.706 -41.131 -41.631 -42.210 -42.871 -43.621 -44.463 -45.407 -46.458 -47.623 -48.910 -50.318 -51.837 -53.433 -55.029 -56.493 -57.659 -58.428 -58.861 -59.150 -59.514 -60.142 -61.218 -63.023 -66.197 -72.474 -79.501 -67.312 -61.612 -57.944 -55.218 -53.051 -51.262 -49.750 -48.453 -47.331 -46.355 -45.505 -44.764 -44.122 -43.569 -43.097 -42.700 -42.374 -42.116 -41.921 -41.788 -41.715 -41.700 -41.743 -41.842 -41.998 -42.212 -42.483 -42.813 -43.203 -43.656 -44.173 -44.758 -45.416 -46.150 -46.967 -47.874 -48.881 -49.999 -51.130 -52.260 -53.390 -54.520 0 1 1.0 3669771408.11 S3 HH 25.38 30.17 0.05 1.312e+09 7.787e+08 1.368e+09 8.200e+08 1.426e+09 8.603e+08 1.488e+09 8.999e+08 1.552e+09 9.391e+08 1.622e+09 9.779e+08 1.695e+09 1.017e+09 1.775e+09 1.057e+09 1.860e+09 1.098e+09 1.951e+09 1.140e+09 2.049e+09 1.186e+09 2.152e+09 1.234e+09 2.262e+09 1.286e+09 2.378e+09 1.342e+09 2.498e+09 1.403e+09 2.622e+09 1.469e+09 2.749e+09 1.541e+09 2.876e+09 1.619e+09 3.003e+09 1.701e+09 3.126e+09 1.789e+09 3.243e+09 1.881e+09 3.352e+09 1.976e+09 3.452e+09 2.074e+09 3.538e+09 2.172e+09 3.608e+09 2.269e+09 3.661e+09 2.363e+09 3.695e+09 2.452e+09 3.707e+09 2.533e+09 3.698e+09 2.603e+09 3.666e+09 2.661e+09 3.610e+09 2.704e+09 3.532e+09 2.729e+09 3.433e+09 2.735e+09 3.313e+09 2.720e+09 3.175e+09 2.684e+09 3.020e+09 2.625e+09 2.852e+09 2.544e+09 2.673e+09 2.442e+09 2.486e+09 2.320e+09 2.294e+09 2.180e+09 2.101e+09 2.024e+09 1.909e+09 1.855e+09 1.720e+09 1.678e+09 1.538e+09 1.494e+09 1.365e+09 1.309e+09 1.201e+09 1.125e+09 1.049e+09 9.472e+08 9.085e+08 7.782e+08 7.817e+08 6.214e+08 6.685e+08 4.791e+08 5.692e+08 3.532e+08 4.844e+08 2.447e+08 4.143e+08 1.533e+08 3.597e+08 7.727e+07 3.211e+08 1.304e+07 2.985e+08 -4.504e+07 2.912e+08 -1.039e+08 2.971e+08 -1.703e+08 3.137e+08 -2.495e+08 3.387e+08 -3.453e+08 3.703e+08 -4.591e+08 4.079e+08 -5.919e+08 4.512e+08 -7.440e+08 5.006e+08 -9.151e+08 5.568e+08 -1.105e+09 6.212e+08 -1.315e+09 6.950e+08 -1.543e+09 7.800e+08 -1.790e+09 8.784e+08 -2.057e+09 9.922e+08 -2.343e+09 1.124e+09 -2.649e+09 1.276e+09 -2.975e+09 1.452e+09 -3.319e+09 1.654e+09 -3.682e+09 1.885e+09 -4.062e+09 2.149e+09 -4.459e+09 2.447e+09 -4.869e+09 2.783e+09 -5.291e+09 3.159e+09 -5.721e+09 3.575e+09 -6.154e+09 4.034e+09 -6.587e+09 4.534e+09 -7.013e+09 5.073e+09 -7.426e+09 5.651e+09 -7.820e+09 6.261e+09 -8.186e+09 6.898e+09 -8.517e+09 7.555e+09 -8.806e+09 8.223e+09 -9.044e+09 8.890e+09 -9.224e+09 9.544e+09 -9.339e+09 1.017e+10 -9.384e+09 1.076e+10 -9.353e+09 1.129e+10 -9.244e+09 1.174e+10 -9.054e+09 1.210e+10 -8.785e+09 1.236e+10 -8.437e+09 1.249e+10 -8.015e+09 1.249e+10 -7.527e+09 1.235e+10 -6.979e+09 1.205e+10 -6.381e+09 1.159e+10 -5.747e+09 1.099e+10 -5.087e+09 1.023e+10 -4.417e+09 9.330e+09 -3.750e+09 8.309e+09 -3.102e+09 7.190e+09 -2.486e+09 6.004e+09 -1.917e+09 4.788e+09 -1.407e+09 3.590e+09 -9.659e+08 2.464e+09 -6.033e+08 1.473e+09 -3.250e+08 6.885e+08 -1.343e+08 1.902e+08 -3.132e+07 -3.902e+07 1.053e+07 -4.140e+08 7.111e+07 -1.338e+09 1.953e+08 -2.954e+09 3.698e+08 -5.383e+09 5.741e+08 -8.753e+09 7.829e+08 -1.320e+10 9.658e+08 -1.888e+10 1.086e+09 -2.592e+10 1.101e+09 -3.449e+10 9.602e+08 -4.474e+10 6.071e+08 -5.683e+10 -2.379e+07 -7.092e+10 -1.008e+09 -8.716e+10 -2.430e+09 -1.057e+11 -4.384e+09 -1.267e+11 -6.979e+09 -1.503e+11 -1.033e+10 -1.765e+11 -1.458e+10 -2.056e+11 -1.986e+10 -2.375e+11 -2.634e+10 -2.723e+11 -3.418e+10 -3.101e+11 -4.359e+10 -3.507e+11 -5.475e+10 -3.943e+11 -6.788e+10 -4.406e+11 -8.320e+10 -4.895e+11 -1.009e+11 -5.408e+11 -1.213e+11 -5.945e+11 -1.447e+11 -6.503e+11 -1.712e+11 -7.077e+11 -2.010e+11 -7.665e+11 -2.346e+11 -8.262e+11 -2.721e+11 -8.864e+11 -3.138e+11 -9.465e+11 -3.599e+11 -1.006e+12 -4.106e+11 -1.065e+12 -4.662e+11 -1.122e+12 -5.268e+11 -1.177e+12 -5.928e+11 -1.229e+12 -6.643e+11 -1.278e+12 -7.415e+11 -1.324e+12 -8.248e+11 -1.365e+12 -9.142e+11 -1.402e+12 -1.010e+12 -1.433e+12 -1.113e+12 -1.459e+12 -1.224e+12 -1.480e+12 -1.342e+12 -1.493e+12 -1.468e+12 -1.501e+12 -1.604e+12 -1.500e+12 -1.750e+12 -1.493e+12 -1.907e+12 -1.477e+12 -2.076e+12 -1.452e+12 -2.258e+12 -1.418e+12 -2.456e+12 -1.373e+12 -2.670e+12 -1.316e+12 -2.903e+12 -1.246e+12 -3.158e+12 -1.162e+12 -3.435e+12 -1.061e+12 -3.739e+12 -9.414e+11 -4.072e+12 -8.002e+11 -4.437e+12 -6.345e+11 -4.836e+12 -4.412e+11 -5.274e+12 -2.166e+11 -5.754e+12 4.328e+10 -6.279e+12 3.429e+11 -6.853e+12 6.865e+11 -7.478e+12 1.079e+12 -8.160e+12 1.526e+12 -8.902e+12 2.032e+12 -9.706e+12 2.602e+12 -1.058e+13 3.243e+12 -1.152e+13 3.960e+12 -1.254e+13 4.760e+12 -1.363e+13 5.648e+12 -1.480e+13 6.629e+12 -1.606e+13 7.710e+12 -1.740e+13 8.897e+12 -1.884e+13 1.019e+13 -2.036e+13 1.160e+13 -2.198e+13 1.314e+13 -2.369e+13 1.479e+13 -2.551e+13 1.658e+13 -2.742e+13 1.849e+13 -2.943e+13 2.054e+13 -3.155e+13 2.273e+13 -3.376e+13 2.505e+13 -3.608e+13 2.751e+13 -3.851e+13 3.011e+13 -4.103e+13 3.285e+13 -4.366e+13 3.573e+13 -4.639e+13 3.873e+13 -4.923e+13 4.187e+13 -5.216e+13 4.514e+13 -5.519e+13 4.852e+13 -5.833e+13 5.203e+13 -6.156e+13 5.564e+13 -6.488e+13 5.935e+13 -6.830e+13 6.316e+13 -7.180e+13 6.705e+13 -7.540e+13 7.102e+13 -7.908e+13 7.506e+13 -8.285e+13 7.914e+13 -8.670e+13 8.327e+13 -9.063e+13 8.743e+13 -9.463e+13 9.161e+13 -9.871e+13 9.579e+13 -1.029e+14 9.997e+13 -1.071e+14 1.041e+14 -1.113e+14 1.083e+14 -1.157e+14 1.124e+14 -1.201e+14 1.164e+14 -1.246e+14 1.204e+14 -1.291e+14 1.243e+14 -1.336e+14 1.281e+14 -1.382e+14 1.317e+14 -1.428e+14 1.352e+14 -1.475e+14 1.386e+14 -1.521e+14 1.419e+14 -1.568e+14 1.449e+14 -1.615e+14 1.478e+14 -1.661e+14 1.504e+14 -1.708e+14 1.529e+14 -1.755e+14 1.552e+14 -1.801e+14 1.572e+14 -1.847e+14 1.590e+14 -1.893e+14 1.605e+14 -1.938e+14 1.618e+14 -1.983e+14 1.629e+14 -2.027e+14 1.637e+14 -2.071e+14 1.642e+14 -2.114e+14 1.645e+14 -2.156e+14 1.645e+14 -2.197e+14 1.642e+14 -2.238e+14 1.637e+14 -2.278e+14 1.629e+14 -2.317e+14 1.619e+14 -2.355e+14 1.606e+14 -2.392e+14 1.590e+14 -2.428e+14 1.572e+14 -2.463e+14 1.552e+14 -2.497e+14 1.529e+14 -2.530e+14 1.504e+14 -2.562e+14 1.477e+14 -2.592e+14 1.447e+14 -2.622e+14 1.416e+14 -2.651e+14 1.382e+14 -2.679e+14 1.347e+14 -2.705e+14 1.310e+14 -2.731e+14 1.272e+14 -2.756e+14 1.232e+14 -2.780e+14 1.190e+14 -2.804e+14 1.148e+14 -2.826e+14 1.104e+14 -2.847e+14 1.058e+14 -2.867e+14 1.012e+14 -2.886e+14 9.647e+13 -2.904e+14 9.164e+13 -2.921e+14 8.674e+13 -2.937e+14 8.177e+13 -2.951e+14 7.673e+13 -2.965e+14 7.165e+13 -2.977e+14 6.652e+13 -2.988e+14 6.136e+13 -2.998e+14 5.619e+13 -3.006e+14 5.100e+13 -3.013e+14 4.581e+13 -3.018e+14 4.062e+13 -3.022e+14 3.546e+13 -3.024e+14 3.033e+13 -3.024e+14 2.523e+13 -3.023e+14 2.019e+13 -3.019e+14 1.520e+13 -3.014e+14 1.029e+13 -3.007e+14 5.460e+12 -2.997e+14 7.189e+11 -2.986e+14 -3.915e+12 -2.972e+14 -8.434e+12 -2.956e+14 -1.283e+13 -2.938e+14 -1.710e+13 -2.918e+14 -2.122e+13 -2.895e+14 -2.519e+13 -2.870e+14 -2.899e+13 -2.843e+14 -3.263e+13 -2.813e+14 -3.609e+13 -2.781e+14 -3.937e+13 -2.747e+14 -4.245e+13 -2.710e+14 -4.535e+13 -2.672e+14 -4.374e+13 -2.656e+14 -4.844e+13 -2.609e+14 -5.076e+13 -2.565e+14 -5.287e+13 -2.519e+14 -5.478e+13 -2.472e+14 -5.648e+13 -2.422e+14 -5.796e+13 -2.371e+14 -5.924e+13 -2.318e+14 -6.032e+13 -2.264e+14 -6.119e+13 -2.209e+14 -6.186e+13 -2.152e+14 -6.234e+13 -2.094e+14 -6.262e+13 -2.036e+14 -6.272e+13 -1.976e+14 -6.264e+13 -1.916e+14 -6.238e+13 -1.855e+14 -6.196e+13 -1.794e+14 -6.138e+13 -1.732e+14 -6.065e+13 -1.670e+14 -5.977e+13 -1.608e+14 -5.876e+13 -1.546e+14 -5.763e+13 -1.485e+14 -5.638e+13 -1.423e+14 -5.502e+13 -1.362e+14 -5.357e+13 -1.302e+14 -5.202e+13 -1.242e+14 -5.040e+13 -1.183e+14 -4.871e+13 -1.125e+14 -4.696e+13 -1.068e+14 -4.516e+13 -1.012e+14 -4.332e+13 -9.569e+13 -4.145e+13 -9.032e+13 -3.955e+13 -8.508e+13 -3.765e+13 -7.999e+13 -3.574e+13 -7.504e+13 -3.384e+13 -7.025e+13 -3.195e+13 -6.562e+13 -3.008e+13 -6.115e+13 -2.824e+13 -5.686e+13 -2.643e+13 -5.275e+13 -2.467e+13 -4.881e+13 -2.296e+13 -4.506e+13 -2.130e+13 -4.150e+13 -1.970e+13 -3.812e+13 -1.815e+13 -3.491e+13 -1.667e+13 -3.189e+13 -1.526e+13 -2.904e+13 -1.391e+13 -2.636e+13 -1.264e+13 -2.386e+13 -1.143e+13 -2.153e+13 -1.030e+13 -1.936e+13 -9.244e+12 -1.735e+13 -8.257e+12 -1.549e+13 -7.341e+12 -1.378e+13 -6.496e+12 -1.222e+13 -5.718e+12 -1.079e+13 -5.006e+12 -9.481e+12 -4.358e+12 -8.299e+12 -3.771e+12 -7.232e+12 -3.242e+12 -6.271e+12 -2.769e+12 -5.411e+12 -2.346e+12 -4.644e+12 -1.972e+12 -3.964e+12 -1.644e+12 -3.363e+12 -1.356e+12 -2.835e+12 -1.107e+12 -2.374e+12 -8.929e+11 -1.973e+12 -7.102e+11 -1.627e+12 -5.560e+11 -1.331e+12 -4.272e+11 -1.078e+12 -3.209e+11 -8.648e+11 -2.344e+11 -6.861e+11 -1.651e+11 -5.379e+11 -1.107e+11 -4.162e+11 -6.884e+10 -3.175e+11 -3.761e+10 -2.386e+11 -1.505e+10 -1.764e+11 5.594e+08 -1.283e+11 1.083e+10 -9.207e+10 1.728e+10 -6.538e+10 2.130e+10 -4.629e+10 2.410e+10 -3.297e+10 2.664e+10 -2.367e+10 2.947e+10 -1.693e+10 3.273e+10 -1.165e+10 3.623e+10 -7.140e+09 3.969e+10 -3.108e+09 4.279e+10 5.134e+08 4.529e+10 3.680e+09 4.701e+10 6.309e+09 4.786e+10 8.328e+09 4.780e+10 9.700e+09 4.686e+10 1.042e+10 4.510e+10 1.052e+10 4.260e+10 1.006e+10 3.950e+10 9.134e+09 3.593e+10 7.841e+09 3.202e+10 6.295e+09 2.795e+10 4.614e+09 2.385e+10 2.908e+09 1.986e+10 1.278e+09 1.613e+10 -1.965e+08 1.276e+10 -1.462e+09 9.852e+09 -2.510e+09 7.464e+09 -3.390e+09 5.596e+09 -4.222e+09 4.153e+09 -5.193e+09 2.952e+09 -6.495e+09 1.764e+09 -8.266e+09 3.909e+08 -1.056e+10 -1.291e+09 -1.336e+10 -3.333e+09 -1.661e+10 -5.733e+09 -2.024e+10 -8.452e+09 -2.416e+10 -1.143e+10 -2.830e+10 -1.459e+10 -3.257e+10 -1.787e+10 -3.688e+10 -2.116e+10 -4.116e+10 -2.440e+10 -4.531e+10 -2.750e+10 -4.928e+10 -3.040e+10 -5.298e+10 -3.303e+10 -5.636e+10 -3.535e+10 -5.936e+10 -3.731e+10 -6.193e+10 -3.887e+10 -6.406e+10 -4.002e+10 -6.570e+10 -4.074e+10 -6.685e+10 -4.103e+10 -6.750e+10 -4.092e+10 -6.764e+10 -4.040e+10 -6.729e+10 -3.952e+10 -6.646e+10 -3.830e+10 -6.518e+10 -3.679e+10 -6.348e+10 -3.501e+10 -6.140e+10 -3.303e+10 -5.897e+10 -3.087e+10 -5.625e+10 -2.860e+10 -5.327e+10 -2.624e+10 -5.009e+10 -2.385e+10 -4.676e+10 -2.145e+10 -4.333e+10 -1.910e+10 -3.985e+10 -1.681e+10 -3.635e+10 -1.462e+10 -3.290e+10 -1.255e+10 -2.952e+10 -1.062e+10 -2.626e+10 -8.850e+09 -2.314e+10 -7.240e+09 -2.020e+10 -5.800e+09 -1.745e+10 -4.531e+09 -1.492e+10 -3.431e+09 -1.260e+10 -2.497e+09 -1.052e+10 -1.717e+09 -8.669e+09 -1.084e+09 -7.044e+09 -5.826e+08 -5.639e+09 -1.998e+08 -4.441e+09 8.005e+07 -3.439e+09 2.730e+08 -2.616e+09 3.958e+08 -1.952e+09 4.642e+08 -1.428e+09 4.939e+08 -1.025e+09 4.985e+08 -7.196e+08 4.896e+08 -4.921e+08 4.750e+08 -3.225e+08 4.585e+08 -1.934e+08 4.405e+08 -9.150e+07 4.190e+08 -8.136e+06 3.912e+08 6.161e+07 3.552e+08 1.196e+08 3.106e+08 1.665e+08 2.584e+08 2.029e+08 2.007e+08 2.302e+08 1.399e+08 2.515e+08 7.617e+07 2.715e+08 6.480e+06 2.962e+08 -7.721e+07 3.308e+08 -1.872e+08 3.785e+08 -3.376e+08 4.389e+08 -5.419e+08 5.095e+08 -8.121e+08 5.864e+08 -1.158e+09 6.651e+08 -1.587e+09 7.415e+08 -2.105e+09 8.116e+08 -2.715e+09 8.718e+08 -3.417e+09 9.190e+08 -4.212e+09 9.504e+08 -5.095e+09 9.641e+08 -6.060e+09 9.582e+08 -7.100e+09 9.318e+08 -8.205e+09 8.846e+08 -9.362e+09 8.167e+08 -1.056e+10 7.290e+08 -1.178e+10 6.231e+08 -1.301e+10 5.012e+08 -1.424e+10 3.659e+08 -1.544e+10 2.206e+08 -1.660e+10 6.932e+07 -1.770e+10 -8.408e+07 -1.873e+10 -2.351e+08 -1.966e+10 -3.789e+08 -2.050e+10 -5.112e+08 -2.122e+10 -6.279e+08 -2.181e+10 -7.253e+08 -2.227e+10 -7.993e+08 -2.259e+10 -8.466e+08 -2.276e+10 -8.646e+08 -2.278e+10 -8.519e+08 -2.265e+10 -8.077e+08 -2.238e+10 -7.326e+08 -2.196e+10 -6.275e+08 -2.140e+10 -4.947e+08 -2.071e+10 -3.375e+08 -1.991e+10 -1.596e+08 -1.901e+10 3.446e+07 -1.801e+10 2.395e+08 -1.695e+10 4.502e+08 -1.582e+10 6.612e+08 -1.464e+10 8.666e+08 -1.345e+10 1.061e+09 -1.224e+10 1.241e+09 -1.104e+10 1.401e+09 -9.859e+09 1.537e+09 -8.714e+09 1.648e+09 -7.619e+09 1.732e+09 -6.583e+09 1.787e+09 -5.616e+09 1.815e+09 -4.727e+09 1.817e+09 -3.920e+09 1.795e+09 -3.198e+09 1.753e+09 -2.563e+09 1.697e+09 -2.014e+09 1.631e+09 -1.546e+09 1.563e+09 -1.152e+09 1.498e+09 -8.224e+08 1.445e+09 -5.442e+08 1.408e+09 -3.042e+08 1.392e+09 -8.711e+07 1.398e+09 1.197e+08 1.422e+09 3.248e+08 1.462e+09 5.336e+08 1.510e+09 7.478e+08 1.562e+09 9.658e+08 1.610e+09 1.184e+09 1.651e+09 1.399e+09 1.681e+09 1.604e+09 1.696e+09 1.795e+09 1.694e+09 1.965e+09 1.675e+09 2.111e+09 1.636e+09 2.228e+09 1.579e+09 2.314e+09 1.503e+09 2.365e+09 1.411e+09 2.380e+09 1.302e+09 2.359e+09 1.180e+09 2.302e+09 1.047e+09 2.212e+09 9.052e+08 2.091e+09 7.584e+08 1.942e+09 6.102e+08 1.770e+09 4.639e+08 1.581e+09 3.234e+08 1.381e+09 1.923e+08 1.176e+09 7.401e+07 9.746e+08 -2.898e+07 7.839e+08 -1.151e+08 6.112e+08 -1.851e+08 4.621e+08 -2.430e+08 3.387e+08 -2.976e+08 2.364e+08 -3.625e+08 1.418e+08 -4.530e+08 3.552e+07 -5.810e+08 -1.018e+08 -7.525e+08 -2.857e+08 -9.686e+08 -5.268e+08 -1.227e+09 -8.312e+08 -1.525e+09 -1.203e+09 -1.859e+09 -1.642e+09 -2.223e+09 -2.149e+09 -2.613e+09 -2.720e+09 -3.022e+09 -3.352e+09 -3.447e+09 -4.038e+09 -3.880e+09 -4.773e+09 -4.315e+09 -5.550e+09 -4.746e+09 -6.359e+09 -5.167e+09 -7.194e+09 -5.573e+09 -8.043e+09 -5.958e+09 -8.897e+09 -6.317e+09 -9.746e+09 -6.647e+09 -1.058e+10 -6.943e+09 -1.139e+10 -7.203e+09 -1.217e+10 -7.422e+09 -1.290e+10 -7.601e+09 -1.359e+10 -7.738e+09 -1.422e+10 -7.832e+09 -1.478e+10 -7.884e+09 -1.528e+10 -7.894e+09 -1.571e+10 -7.862e+09 -1.606e+10 -7.790e+09 -1.633e+10 -7.678e+09 -1.652e+10 -7.530e+09 -1.664e+10 -7.347e+09 -1.667e+10 -7.130e+09 -1.662e+10 -6.883e+09 -1.650e+10 -6.608e+09 0.005 -53.452 -52.493 -51.535 -50.576 -49.617 -48.659 -47.700 -46.831 -46.054 -45.363 -44.753 -44.219 -43.756 -43.358 -43.027 -42.759 -42.556 -42.414 -42.336 -42.319 -42.366 -42.478 -42.655 -42.902 -43.219 -43.612 -44.085 -44.644 -45.295 -46.049 -46.917 -47.913 -49.057 -50.374 -51.901 -53.688 -55.813 -58.405 -61.698 -66.225 -73.723 -82.799 -75.491 -71.138 -69.814 -69.761 -69.577 -67.375 -63.691 -60.089 -56.982 -54.336 -52.063 -50.087 -48.353 -46.819 -45.453 -44.233 -43.139 -42.159 -41.281 -40.496 -39.797 -39.177 -38.632 -38.159 -37.754 -37.415 -37.140 -36.927 -36.776 -36.687 -36.659 -36.693 -36.789 -36.950 -37.176 -37.471 -37.836 -38.276 -38.794 -39.396 -40.086 -40.870 -41.759 -42.762 -43.892 -45.163 -46.587 -48.178 -49.951 -51.915 -54.079 -56.445 -59.016 -61.701 -63.760 -63.433 -60.418 -56.785 -53.504 -50.656 -48.173 -45.987 -44.047 -42.313 -40.756 -39.352 -38.083 -36.935 -35.895 -34.956 -34.108 -33.344 -32.659 -32.049 -31.512 -31.046 -30.649 -30.319 -30.055 -29.858 -29.728 -29.665 -29.673 -29.753 -29.908 -30.142 -30.459 -30.866 -31.371 -31.983 -32.715 -33.582 -34.606 -35.814 -37.243 -38.944 -40.993 -43.503 -46.645 -50.653 -55.403 -58.788 -59.467 -60.387 -61.880 -57.196 -49.751 -44.216 -39.996 -36.558 -33.643 -31.104 -28.851 -26.824 -24.982 -23.294 -21.737 -20.293 -18.949 -17.693 -16.516 -15.411 -14.371 -13.390 -12.464 -11.588 -10.760 -9.976 -9.233 -8.530 -7.862 -7.226 -6.625 -6.055 -5.517 -5.009 -4.529 -4.077 -3.653 -3.254 -2.881 -2.532 -2.208 -1.908 -1.631 -1.377 -1.145 -0.935 -0.747 -0.580 -0.435 -0.311 -0.207 -0.125 -0.063 -0.021 -0.000 0.000 -0.020 -0.056 -0.112 -0.190 -0.287 -0.406 -0.546 -0.707 -0.889 -1.093 -1.320 -1.568 -1.839 -2.134 -2.452 -2.794 -3.161 -3.554 -3.972 -4.418 -4.891 -5.393 -5.925 -6.488 -7.083 -7.712 -8.377 -9.079 -9.820 -10.601 -11.426 -12.298 -13.221 -14.201 -15.242 -16.349 -17.532 -18.797 -20.157 -21.628 -23.227 -24.978 -26.915 -29.087 -31.571 -34.493 -38.092 -42.906 -49.859 -54.812 -49.896 -46.301 -44.638 -43.995 -44.004 -44.429 -44.980 -45.195 -44.622 -43.250 -41.485 -39.703 -38.080 -36.660 -35.438 -34.396 -33.511 -32.766 -32.146 -31.637 -31.229 -30.914 -30.686 -30.539 -30.469 -30.473 -30.548 -30.694 -30.908 -31.191 -31.542 -31.962 -32.453 -33.016 -33.655 -34.372 -35.173 -36.063 -37.047 -38.134 -39.337 -40.669 -42.148 -43.794 -45.637 -47.714 -50.075 -52.792 -55.968 -59.754 -64.335 -69.317 -71.159 -68.690 -64.964 -61.484 -58.375 -55.637 -53.251 -51.177 -49.372 -47.800 -46.428 -45.230 -44.184 -43.275 -42.488 -41.811 -41.234 -40.749 -40.348 -40.030 -39.790 -39.626 -39.536 -39.517 -39.569 -39.691 -39.884 -40.149 -40.486 -40.899 -41.389 -41.961 -42.620 -43.370 -44.221 -45.179 -46.257 -47.468 -48.829 -50.360 -52.086 -54.037 -56.239 -58.708 -61.402 -64.137 -66.512 -68.168 -69.228 -69.922 -69.612 -67.343 -63.999 -60.734 -57.866 -55.395 -53.259 -51.399 -49.766 -48.325 -47.046 -45.908 -44.894 -43.990 -43.184 -42.468 -41.835 -41.277 -40.790 -40.370 -40.013 -39.716 -39.476 -39.292 -39.162 -39.083 -39.057 -39.081 -39.154 -39.278 -39.452 -39.676 -39.950 -40.276 -40.654 -41.086 -41.573 -42.114 -42.716 -43.380 -44.112 -44.915 -45.794 -46.744 -47.695 -48.645 -49.596 -50.547 -51.497 0 1 1.0 10036369385.73 S3 HV 25.38 30.17 0.05 7.267e+08 -3.433e+09 9.321e+08 -3.753e+09 1.165e+09 -4.086e+09 1.428e+09 -4.429e+09 1.722e+09 -4.780e+09 2.048e+09 -5.136e+09 2.407e+09 -5.494e+09 2.800e+09 -5.850e+09 3.225e+09 -6.201e+09 3.682e+09 -6.542e+09 4.170e+09 -6.870e+09 4.686e+09 -7.180e+09 5.228e+09 -7.469e+09 5.794e+09 -7.733e+09 6.378e+09 -7.969e+09 6.977e+09 -8.172e+09 7.586e+09 -8.342e+09 8.199e+09 -8.477e+09 8.810e+09 -8.574e+09 9.415e+09 -8.633e+09 1.001e+10 -8.655e+09 1.058e+10 -8.639e+09 1.113e+10 -8.587e+09 1.165e+10 -8.499e+09 1.213e+10 -8.377e+09 1.257e+10 -8.224e+09 1.297e+10 -8.041e+09 1.331e+10 -7.832e+09 1.360e+10 -7.599e+09 1.383e+10 -7.345e+09 1.401e+10 -7.073e+09 1.412e+10 -6.785e+09 1.417e+10 -6.484e+09 1.415e+10 -6.173e+09 1.407e+10 -5.854e+09 1.393e+10 -5.529e+09 1.372e+10 -5.200e+09 1.345e+10 -4.870e+09 1.312e+10 -4.539e+09 1.274e+10 -4.210e+09 1.231e+10 -3.883e+09 1.182e+10 -3.561e+09 1.129e+10 -3.246e+09 1.072e+10 -2.939e+09 1.012e+10 -2.640e+09 9.486e+09 -2.354e+09 8.830e+09 -2.080e+09 8.157e+09 -1.821e+09 7.473e+09 -1.578e+09 6.787e+09 -1.353e+09 6.103e+09 -1.147e+09 5.430e+09 -9.623e+08 4.775e+09 -7.984e+08 4.143e+09 -6.560e+08 3.542e+09 -5.351e+08 2.977e+09 -4.350e+08 2.454e+09 -3.545e+08 1.979e+09 -2.918e+08 1.553e+09 -2.448e+08 1.180e+09 -2.105e+08 8.632e+08 -1.860e+08 6.020e+08 -1.682e+08 3.962e+08 -1.548e+08 2.439e+08 -1.449e+08 1.397e+08 -1.413e+08 7.205e+07 -1.529e+08 2.001e+07 -1.913e+08 -3.849e+07 -2.632e+08 -1.155e+08 -3.701e+08 -2.123e+08 -5.115e+08 -3.257e+08 -6.882e+08 -4.506e+08 -9.013e+08 -5.805e+08 -1.151e+09 -7.093e+08 -1.438e+09 -8.306e+08 -1.763e+09 -9.381e+08 -2.124e+09 -1.026e+09 -2.520e+09 -1.089e+09 -2.950e+09 -1.123e+09 -3.410e+09 -1.122e+09 -3.899e+09 -1.083e+09 -4.412e+09 -1.005e+09 -4.945e+09 -8.832e+08 -5.494e+09 -7.176e+08 -6.055e+09 -5.078e+08 -6.621e+09 -2.542e+08 -7.186e+09 4.194e+07 -7.746e+09 3.777e+08 -8.293e+09 7.496e+08 -8.820e+09 1.153e+09 -9.320e+09 1.582e+09 -9.786e+09 2.030e+09 -1.021e+10 2.488e+09 -1.058e+10 2.947e+09 -1.089e+10 3.397e+09 -1.114e+10 3.828e+09 -1.131e+10 4.227e+09 -1.140e+10 4.581e+09 -1.141e+10 4.881e+09 -1.131e+10 5.112e+09 -1.112e+10 5.264e+09 -1.082e+10 5.329e+09 -1.041e+10 5.296e+09 -9.899e+09 5.160e+09 -9.282e+09 4.917e+09 -8.566e+09 4.569e+09 -7.760e+09 4.122e+09 -6.877e+09 3.588e+09 -5.935e+09 2.985e+09 -4.957e+09 2.339e+09 -3.970e+09 1.685e+09 -3.008e+09 1.067e+09 -2.112e+09 5.358e+08 -1.326e+09 1.462e+08 -7.065e+08 -9.222e+07 -3.134e+08 -3.651e+08 -1.023e+08 -9.825e+08 1.767e+08 -2.154e+09 7.763e+08 -4.007e+09 1.817e+09 -6.680e+09 3.374e+09 -1.032e+10 5.508e+09 -1.509e+10 8.272e+09 -2.116e+10 1.172e+10 -2.871e+10 1.587e+10 -3.791e+10 2.076e+10 -4.895e+10 2.639e+10 -6.203e+10 3.276e+10 -7.729e+10 3.983e+10 -9.495e+10 4.755e+10 -1.152e+11 5.586e+10 -1.381e+11 6.464e+10 -1.638e+11 7.379e+10 -1.926e+11 8.315e+10 -2.244e+11 9.254e+10 -2.594e+11 1.018e+11 -2.976e+11 1.106e+11 -3.391e+11 1.188e+11 -3.838e+11 1.262e+11 -4.317e+11 1.323e+11 -4.828e+11 1.369e+11 -5.371e+11 1.397e+11 -5.944e+11 1.403e+11 -6.546e+11 1.384e+11 -7.174e+11 1.336e+11 -7.827e+11 1.256e+11 -8.502e+11 1.138e+11 -9.196e+11 9.795e+10 -9.907e+11 7.761e+10 -1.063e+12 5.239e+10 -1.137e+12 2.184e+10 -1.211e+12 -1.444e+10 -1.285e+12 -5.686e+10 -1.360e+12 -1.059e+11 -1.434e+12 -1.620e+11 -1.507e+12 -2.256e+11 -1.580e+12 -2.973e+11 -1.651e+12 -3.776e+11 -1.721e+12 -4.670e+11 -1.789e+12 -5.664e+11 -1.855e+12 -6.765e+11 -1.919e+12 -7.980e+11 -1.980e+12 -9.321e+11 -2.039e+12 -1.080e+12 -2.096e+12 -1.243e+12 -2.149e+12 -1.422e+12 -2.199e+12 -1.620e+12 -2.246e+12 -1.838e+12 -2.288e+12 -2.079e+12 -2.326e+12 -2.346e+12 -2.358e+12 -2.640e+12 -2.384e+12 -2.965e+12 -2.402e+12 -3.326e+12 -2.410e+12 -3.724e+12 -2.407e+12 -4.165e+12 -2.391e+12 -4.653e+12 -2.359e+12 -5.191e+12 -2.308e+12 -5.784e+12 -2.236e+12 -6.438e+12 -2.138e+12 -7.156e+12 -2.011e+12 -7.944e+12 -1.852e+12 -8.808e+12 -1.657e+12 -9.749e+12 -1.421e+12 -1.078e+13 -1.140e+12 -1.189e+13 -8.082e+11 -1.310e+13 -4.216e+11 -1.441e+13 2.484e+10 -1.583e+13 5.356e+11 -1.735e+13 1.116e+12 -1.899e+13 1.771e+12 -2.074e+13 2.505e+12 -2.262e+13 3.323e+12 -2.462e+13 4.229e+12 -2.675e+13 5.227e+12 -2.902e+13 6.323e+12 -3.142e+13 7.518e+12 -3.396e+13 8.817e+12 -3.664e+13 1.022e+13 -3.947e+13 1.174e+13 -4.244e+13 1.336e+13 -4.556e+13 1.510e+13 -4.882e+13 1.696e+13 -5.224e+13 1.892e+13 -5.579e+13 2.100e+13 -5.950e+13 2.319e+13 -6.335e+13 2.549e+13 -6.734e+13 2.790e+13 -7.147e+13 3.042e+13 -7.573e+13 3.303e+13 -8.013e+13 3.574e+13 -8.465e+13 3.854e+13 -8.930e+13 4.141e+13 -9.405e+13 4.437e+13 -9.892e+13 4.739e+13 -1.039e+14 5.046e+13 -1.090e+14 5.359e+13 -1.141e+14 5.674e+13 -1.193e+14 5.993e+13 -1.247e+14 6.313e+13 -1.300e+14 6.633e+13 -1.354e+14 6.952e+13 -1.409e+14 7.271e+13 -1.464e+14 7.587e+13 -1.520e+14 7.899e+13 -1.575e+14 8.204e+13 -1.631e+14 8.502e+13 -1.687e+14 8.791e+13 -1.742e+14 9.070e+13 -1.798e+14 9.338e+13 -1.853e+14 9.593e+13 -1.908e+14 9.835e+13 -1.962e+14 1.006e+14 -2.016e+14 1.027e+14 -2.069e+14 1.047e+14 -2.122e+14 1.064e+14 -2.174e+14 1.080e+14 -2.225e+14 1.094e+14 -2.275e+14 1.105e+14 -2.325e+14 1.115e+14 -2.373e+14 1.122e+14 -2.420e+14 1.128e+14 -2.467e+14 1.131e+14 -2.512e+14 1.131e+14 -2.556e+14 1.130e+14 -2.600e+14 1.126e+14 -2.641e+14 1.119e+14 -2.682e+14 1.111e+14 -2.721e+14 1.100e+14 -2.759e+14 1.086e+14 -2.796e+14 1.071e+14 -2.832e+14 1.053e+14 -2.866e+14 1.033e+14 -2.899e+14 1.011e+14 -2.930e+14 9.865e+13 -2.960e+14 9.601e+13 -2.989e+14 9.318e+13 -3.016e+14 9.015e+13 -3.042e+14 8.694e+13 -3.066e+14 8.355e+13 -3.089e+14 7.999e+13 -3.111e+14 7.628e+13 -3.132e+14 7.242e+13 -3.152e+14 6.843e+13 -3.171e+14 6.430e+13 -3.189e+14 6.004e+13 -3.205e+14 5.567e+13 -3.220e+14 5.118e+13 -3.234e+14 4.660e+13 -3.247e+14 4.193e+13 -3.258e+14 3.718e+13 -3.268e+14 3.236e+13 -3.277e+14 2.748e+13 -3.285e+14 2.255e+13 -3.292e+14 1.759e+13 -3.297e+14 1.259e+13 -3.301e+14 7.577e+12 -3.303e+14 2.553e+12 -3.304e+14 -2.467e+12 -3.304e+14 -7.481e+12 -3.302e+14 -1.247e+13 -3.299e+14 -1.742e+13 -3.294e+14 -2.233e+13 -3.288e+14 -2.718e+13 -3.280e+14 -3.196e+13 -3.270e+14 -3.667e+13 -3.259e+14 -4.129e+13 -3.245e+14 -4.580e+13 -3.230e+14 -5.020e+13 -3.213e+14 -5.447e+13 -3.194e+14 -5.860e+13 -3.173e+14 -6.259e+13 -3.150e+14 -6.641e+13 -3.124e+14 -7.007e+13 -3.097e+14 -7.355e+13 -3.068e+14 -7.683e+13 -3.036e+14 -7.991e+13 -3.002e+14 -8.279e+13 -2.967e+14 -8.545e+13 -2.929e+14 -8.789e+13 -2.889e+14 -9.009e+13 -2.847e+14 -9.107e+13 -2.815e+14 -9.234e+13 -2.777e+14 -9.385e+13 -2.730e+14 -9.512e+13 -2.680e+14 -9.615e+13 -2.629e+14 -9.694e+13 -2.576e+14 -9.748e+13 -2.522e+14 -9.779e+13 -2.466e+14 -9.786e+13 -2.408e+14 -9.770e+13 -2.349e+14 -9.732e+13 -2.290e+14 -9.672e+13 -2.229e+14 -9.591e+13 -2.167e+14 -9.490e+13 -2.104e+14 -9.370e+13 -2.041e+14 -9.231e+13 -1.977e+14 -9.075e+13 -1.912e+14 -8.903e+13 -1.847e+14 -8.717e+13 -1.782e+14 -8.516e+13 -1.717e+14 -8.303e+13 -1.652e+14 -8.078e+13 -1.587e+14 -7.843e+13 -1.523e+14 -7.599e+13 -1.459e+14 -7.347e+13 -1.395e+14 -7.088e+13 -1.332e+14 -6.824e+13 -1.270e+14 -6.556e+13 -1.209e+14 -6.285e+13 -1.148e+14 -6.011e+13 -1.089e+14 -5.737e+13 -1.031e+14 -5.462e+13 -9.744e+13 -5.189e+13 -9.190e+13 -4.917e+13 -8.651e+13 -4.649e+13 -8.126e+13 -4.384e+13 -7.618e+13 -4.124e+13 -7.126e+13 -3.869e+13 -6.651e+13 -3.620e+13 -6.194e+13 -3.378e+13 -5.755e+13 -3.143e+13 -5.335e+13 -2.917e+13 -4.934e+13 -2.699e+13 -4.552e+13 -2.489e+13 -4.188e+13 -2.289e+13 -3.844e+13 -2.097e+13 -3.518e+13 -1.915e+13 -3.210e+13 -1.743e+13 -2.921e+13 -1.580e+13 -2.650e+13 -1.427e+13 -2.396e+13 -1.283e+13 -2.160e+13 -1.149e+13 -1.941e+13 -1.025e+13 -1.737e+13 -9.096e+12 -1.550e+13 -8.036e+12 -1.377e+13 -7.063e+12 -1.219e+13 -6.174e+12 -1.075e+13 -5.367e+12 -9.437e+12 -4.637e+12 -8.247e+12 -3.981e+12 -7.173e+12 -3.394e+12 -6.209e+12 -2.872e+12 -5.346e+12 -2.411e+12 -4.577e+12 -2.006e+12 -3.896e+12 -1.652e+12 -3.296e+12 -1.347e+12 -2.769e+12 -1.084e+12 -2.309e+12 -8.607e+11 -1.911e+12 -6.723e+11 -1.568e+12 -5.153e+11 -1.275e+12 -3.859e+11 -1.026e+12 -2.808e+11 -8.171e+11 -1.968e+11 -6.428e+11 -1.309e+11 -4.990e+11 -8.044e+10 -3.819e+11 -4.283e+10 -2.878e+11 -1.575e+10 -2.134e+11 2.920e+09 -1.556e+11 1.514e+10 -1.118e+11 2.275e+10 -7.939e+10 2.747e+10 -5.612e+10 3.077e+10 -3.976e+10 3.384e+10 -2.823e+10 3.734e+10 -1.974e+10 4.141e+10 -1.292e+10 4.585e+10 -6.958e+09 5.026e+10 -1.479e+09 5.426e+10 3.581e+09 5.755e+10 8.147e+09 5.991e+10 1.209e+10 6.120e+10 1.530e+10 6.139e+10 1.768e+10 6.047e+10 1.921e+10 5.853e+10 1.990e+10 5.565e+10 1.979e+10 5.199e+10 1.897e+10 4.769e+10 1.755e+10 4.293e+10 1.566e+10 3.787e+10 1.343e+10 3.270e+10 1.102e+10 2.756e+10 8.548e+09 2.263e+10 6.156e+09 1.803e+10 3.958e+09 1.389e+10 2.045e+09 1.030e+10 4.795e+08 7.354e+09 -7.188e+08 5.084e+09 -1.605e+09 3.468e+09 -2.339e+09 2.357e+09 -3.186e+09 1.466e+09 -4.416e+09 4.971e+08 -6.180e+09 -7.483e+08 -8.496e+09 -2.347e+09 -1.131e+10 -4.294e+09 -1.455e+10 -6.540e+09 -1.813e+10 -9.020e+09 -2.195e+10 -1.165e+10 -2.592e+10 -1.435e+10 -2.996e+10 -1.705e+10 -3.397e+10 -1.965e+10 -3.787e+10 -2.211e+10 -4.157e+10 -2.435e+10 -4.501e+10 -2.633e+10 -4.811e+10 -2.801e+10 -5.083e+10 -2.936e+10 -5.313e+10 -3.036e+10 -5.496e+10 -3.101e+10 -5.632e+10 -3.129e+10 -5.719e+10 -3.123e+10 -5.756e+10 -3.085e+10 -5.745e+10 -3.016e+10 -5.688e+10 -2.919e+10 -5.586e+10 -2.799e+10 -5.445e+10 -2.658e+10 -5.266e+10 -2.500e+10 -5.055e+10 -2.330e+10 -4.817e+10 -2.149e+10 -4.556e+10 -1.964e+10 -4.276e+10 -1.775e+10 -3.984e+10 -1.588e+10 -3.684e+10 -1.404e+10 -3.380e+10 -1.226e+10 -3.077e+10 -1.056e+10 -2.778e+10 -8.962e+09 -2.487e+10 -7.479e+09 -2.207e+10 -6.120e+09 -1.942e+10 -4.893e+09 -1.692e+10 -3.803e+09 -1.459e+10 -2.849e+09 -1.246e+10 -2.031e+09 -1.051e+10 -1.343e+09 -8.772e+09 -7.774e+08 -7.224e+09 -3.266e+08 -5.870e+09 2.046e+07 -4.702e+09 2.764e+08 -3.708e+09 4.541e+08 -2.878e+09 5.674e+08 -2.196e+09 6.306e+08 -1.646e+09 6.572e+08 -1.212e+09 6.599e+08 -8.739e+08 6.490e+08 -6.136e+08 6.321e+08 -4.128e+08 6.129e+08 -2.551e+08 5.915e+08 -1.274e+08 5.657e+08 -2.085e+07 5.326e+08 6.962e+07 4.895e+08 1.461e+08 4.355e+08 2.088e+08 3.711e+08 2.575e+08 2.985e+08 2.929e+08 2.207e+08 3.167e+08 1.403e+08 3.329e+08 5.707e+07 3.473e+08 -3.375e+07 3.664e+08 -1.429e+08 3.953e+08 -2.861e+08 4.353e+08 -4.805e+08 4.834e+08 -7.422e+08 5.334e+08 -1.085e+09 5.777e+08 -1.521e+09 6.082e+08 -2.056e+09 6.175e+08 -2.698e+09 5.989e+08 -3.449e+09 5.466e+08 -4.308e+09 4.564e+08 -5.275e+09 3.250e+08 -6.342e+09 1.508e+08 -7.503e+09 -6.631e+07 -8.747e+09 -3.251e+08 -1.006e+10 -6.227e+08 -1.143e+10 -9.546e+08 -1.284e+10 -1.316e+09 -1.428e+10 -1.699e+09 -1.571e+10 -2.096e+09 -1.714e+10 -2.501e+09 -1.853e+10 -2.903e+09 -1.987e+10 -3.295e+09 -2.114e+10 -3.668e+09 -2.232e+10 -4.014e+09 -2.340e+10 -4.325e+09 -2.437e+10 -4.595e+09 -2.522e+10 -4.819e+09 -2.592e+10 -4.994e+09 -2.649e+10 -5.116e+09 -2.690e+10 -5.181e+09 -2.716e+10 -5.191e+09 -2.726e+10 -5.145e+09 -2.721e+10 -5.045e+09 -2.700e+10 -4.894e+09 -2.665e+10 -4.696e+09 -2.616e+10 -4.455e+09 -2.553e+10 -4.177e+09 -2.478e+10 -3.867e+09 -2.392e+10 -3.531e+09 -2.295e+10 -3.176e+09 -2.189e+10 -2.806e+09 -2.076e+10 -2.429e+09 -1.956e+10 -2.050e+09 -1.832e+10 -1.675e+09 -1.704e+10 -1.309e+09 -1.574e+10 -9.573e+08 -1.444e+10 -6.232e+08 -1.314e+10 -3.105e+08 -1.186e+10 -2.315e+07 -1.062e+10 2.368e+08 -9.421e+09 4.674e+08 -8.276e+09 6.670e+08 -7.196e+09 8.351e+08 -6.186e+09 9.717e+08 -5.256e+09 1.078e+09 -4.409e+09 1.154e+09 -3.648e+09 1.204e+09 -2.976e+09 1.231e+09 -2.392e+09 1.239e+09 -1.891e+09 1.234e+09 -1.471e+09 1.222e+09 -1.123e+09 1.212e+09 -8.341e+08 1.210e+09 -5.927e+08 1.221e+09 -3.842e+08 1.251e+09 -1.948e+08 1.299e+09 -1.451e+07 1.362e+09 1.639e+08 1.436e+09 3.438e+08 1.514e+09 5.246e+08 1.590e+09 7.039e+08 1.656e+09 8.779e+08 1.709e+09 1.042e+09 1.742e+09 1.190e+09 1.754e+09 1.319e+09 1.741e+09 1.424e+09 1.702e+09 1.502e+09 1.638e+09 1.550e+09 1.550e+09 1.569e+09 1.438e+09 1.556e+09 1.308e+09 1.515e+09 1.161e+09 1.446e+09 1.003e+09 1.352e+09 8.380e+08 1.239e+09 6.719e+08 1.110e+09 5.099e+08 9.713e+08 3.572e+08 8.294e+08 2.182e+08 6.907e+08 9.648e+07 5.622e+08 -6.556e+06 4.500e+08 -9.301e+07 3.584e+08 -1.699e+08 2.868e+08 -2.498e+08 2.277e+08 -3.490e+08 1.676e+08 -4.824e+08 9.127e+07 -6.595e+08 -1.421e+07 -8.848e+08 -1.583e+08 -1.159e+09 -3.470e+08 -1.482e+09 -5.846e+08 -1.850e+09 -8.733e+08 -2.262e+09 -1.214e+09 -2.713e+09 -1.606e+09 -3.199e+09 -2.048e+09 -3.715e+09 -2.537e+09 -4.256e+09 -3.070e+09 -4.816e+09 -3.644e+09 -5.391e+09 -4.252e+09 -5.973e+09 -4.890e+09 -6.556e+09 -5.552e+09 -7.135e+09 -6.229e+09 -7.702e+09 -6.915e+09 -8.252e+09 -7.603e+09 -8.779e+09 -8.283e+09 -9.276e+09 -8.948e+09 -9.737e+09 -9.590e+09 -1.016e+10 -1.020e+10 -1.054e+10 -1.078e+10 -1.086e+10 -1.130e+10 -1.114e+10 -1.178e+10 -1.135e+10 -1.220e+10 -1.151e+10 -1.256e+10 -1.161e+10 -1.285e+10 -1.165e+10 -1.308e+10 -1.163e+10 -1.323e+10 -1.155e+10 -1.331e+10 -1.140e+10 -1.332e+10 -1.120e+10 -1.325e+10 -1.094e+10 0.005 -52.647 -51.709 -50.770 -49.832 -48.894 -47.955 -47.017 -46.165 -45.401 -44.719 -44.116 -43.585 -43.124 -42.725 -42.390 -42.117 -41.905 -41.753 -41.661 -41.629 -41.658 -41.748 -41.900 -42.118 -42.402 -42.758 -43.188 -43.699 -44.296 -44.988 -45.784 -46.699 -47.749 -48.958 -50.359 -51.997 -53.947 -56.328 -59.368 -63.582 -70.688 -79.266 -71.311 -66.107 -63.681 -62.402 -61.779 -61.530 -61.343 -60.808 -59.625 -57.865 -55.844 -53.826 -51.939 -50.222 -48.678 -47.295 -46.057 -44.951 -43.964 -43.085 -42.305 -41.617 -41.014 -40.491 -40.045 -39.672 -39.370 -39.138 -38.973 -38.876 -38.846 -38.884 -38.990 -39.166 -39.415 -39.739 -40.141 -40.626 -41.199 -41.866 -42.631 -43.505 -44.499 -45.623 -46.893 -48.320 -49.913 -51.671 -53.576 -55.581 -57.611 -59.597 -61.553 -63.511 -64.900 -64.065 -60.721 -56.903 -53.536 -50.663 -48.192 -46.038 -44.141 -42.455 -40.947 -39.593 -38.373 -37.273 -36.281 -35.387 -34.583 -33.863 -33.221 -32.654 -32.161 -31.738 -31.385 -31.100 -30.884 -30.735 -30.657 -30.649 -30.714 -30.857 -31.081 -31.390 -31.792 -32.294 -32.906 -33.643 -34.521 -35.562 -36.797 -38.264 -40.020 -42.141 -44.719 -47.811 -51.095 -53.281 -53.452 -52.872 -53.189 -55.421 -58.015 -54.092 -47.186 -42.047 -38.127 -34.927 -32.203 -29.821 -27.699 -25.784 -24.037 -22.432 -20.948 -19.569 -18.283 -17.078 -15.947 -14.884 -13.882 -12.936 -12.042 -11.196 -10.395 -9.636 -8.917 -8.235 -7.587 -6.971 -6.387 -5.835 -5.312 -4.819 -4.354 -3.915 -3.503 -3.117 -2.755 -2.417 -2.104 -1.813 -1.545 -1.300 -1.076 -0.875 -0.695 -0.535 -0.397 -0.280 -0.183 -0.107 -0.051 -0.015 0.000 -0.005 -0.030 -0.071 -0.132 -0.214 -0.316 -0.439 -0.583 -0.748 -0.934 -1.142 -1.372 -1.624 -1.898 -2.196 -2.517 -2.862 -3.232 -3.627 -4.048 -4.495 -4.971 -5.475 -6.009 -6.573 -7.170 -7.801 -8.467 -9.171 -9.913 -10.695 -11.520 -12.393 -13.317 -14.297 -15.337 -16.445 -17.627 -18.892 -20.251 -21.720 -23.317 -25.066 -27.001 -29.170 -31.650 -34.568 -38.163 -42.972 -49.921 -54.871 -49.954 -46.362 -44.714 -44.110 -44.206 -44.822 -45.745 -46.512 -46.409 -45.135 -43.183 -41.159 -39.337 -37.771 -36.444 -35.325 -34.385 -33.600 -32.950 -32.421 -31.999 -31.677 -31.446 -31.300 -31.235 -31.247 -31.333 -31.494 -31.726 -32.030 -32.405 -32.852 -33.373 -33.970 -34.646 -35.405 -36.250 -37.188 -38.222 -39.362 -40.616 -41.995 -43.510 -45.173 -46.992 -48.978 -51.138 -53.478 -56.027 -58.869 -62.185 -65.699 -66.145 -62.687 -58.558 -55.164 -52.403 -50.097 -48.132 -46.432 -44.950 -43.649 -42.504 -41.494 -40.605 -39.824 -39.143 -38.550 -38.041 -37.607 -37.244 -36.950 -36.723 -36.560 -36.459 -36.419 -36.439 -36.519 -36.658 -36.857 -37.116 -37.436 -37.819 -38.267 -38.783 -39.370 -40.032 -40.773 -41.601 -42.522 -43.545 -44.682 -45.946 -47.356 -48.933 -50.708 -52.720 -55.017 -57.667 -60.743 -64.285 -68.084 -71.205 -72.596 -72.980 -72.657 -70.461 -66.812 -63.169 -60.015 -57.347 -55.079 -53.132 -51.444 -49.970 -48.678 -47.539 -46.536 -45.651 -44.872 -44.188 -43.593 -43.078 -42.639 -42.270 -41.969 -41.731 -41.555 -41.437 -41.378 -41.374 -41.427 -41.534 -41.696 -41.914 -42.187 -42.516 -42.902 -43.348 -43.852 -44.420 -45.054 -45.761 -46.543 -47.406 -48.346 -49.287 -50.227 -51.168 -52.108 -53.049 0 1 1.0 10036369385.73 S3 VV 25.38 30.17 0.05 -3.295e+09 -1.737e+09 -3.548e+09 -2.045e+09 -3.804e+09 -2.385e+09 -4.058e+09 -2.759e+09 -4.308e+09 -3.166e+09 -4.551e+09 -3.607e+09 -4.781e+09 -4.082e+09 -4.997e+09 -4.589e+09 -5.192e+09 -5.127e+09 -5.364e+09 -5.693e+09 -5.508e+09 -6.285e+09 -5.621e+09 -6.899e+09 -5.700e+09 -7.530e+09 -5.742e+09 -8.174e+09 -5.745e+09 -8.826e+09 -5.706e+09 -9.480e+09 -5.625e+09 -1.013e+10 -5.503e+09 -1.077e+10 -5.341e+09 -1.140e+10 -5.139e+09 -1.200e+10 -4.901e+09 -1.257e+10 -4.628e+09 -1.311e+10 -4.324e+09 -1.362e+10 -3.994e+09 -1.408e+10 -3.641e+09 -1.448e+10 -3.271e+09 -1.484e+10 -2.887e+09 -1.514e+10 -2.496e+09 -1.538e+10 -2.101e+09 -1.556e+10 -1.708e+09 -1.568e+10 -1.321e+09 -1.573e+10 -9.447e+08 -1.571e+10 -5.823e+08 -1.564e+10 -2.377e+08 -1.549e+10 8.667e+07 -1.529e+10 3.879e+08 -1.502e+10 6.637e+08 -1.469e+10 9.130e+08 -1.431e+10 1.134e+09 -1.387e+10 1.327e+09 -1.338e+10 1.490e+09 -1.284e+10 1.624e+09 -1.226e+10 1.729e+09 -1.164e+10 1.805e+09 -1.099e+10 1.853e+09 -1.031e+10 1.874e+09 -9.614e+09 1.868e+09 -8.898e+09 1.837e+09 -8.173e+09 1.783e+09 -7.446e+09 1.708e+09 -6.724e+09 1.612e+09 -6.013e+09 1.499e+09 -5.321e+09 1.372e+09 -4.654e+09 1.232e+09 -4.019e+09 1.084e+09 -3.422e+09 9.310e+08 -2.867e+09 7.765e+08 -2.359e+09 6.247e+08 -1.903e+09 4.797e+08 -1.499e+09 3.455e+08 -1.149e+09 2.262e+08 -8.540e+08 1.250e+08 -6.127e+08 4.412e+07 -4.231e+08 -1.611e+07 -2.832e+08 -6.042e+07 -1.893e+08 -1.017e+08 -1.351e+08 -1.597e+08 -1.074e+08 -2.504e+08 -9.022e+07 -3.810e+08 -7.394e+07 -5.517e+08 -5.754e+07 -7.617e+08 -4.455e+07 -1.010e+09 -4.042e+07 -1.293e+09 -5.126e+07 -1.609e+09 -8.314e+07 -1.955e+09 -1.419e+08 -2.326e+09 -2.329e+08 -2.718e+09 -3.606e+08 -3.128e+09 -5.293e+08 -3.549e+09 -7.417e+08 -3.976e+09 -1.000e+09 -4.406e+09 -1.307e+09 -4.830e+09 -1.661e+09 -5.245e+09 -2.062e+09 -5.645e+09 -2.509e+09 -6.024e+09 -2.999e+09 -6.378e+09 -3.528e+09 -6.701e+09 -4.092e+09 -6.988e+09 -4.683e+09 -7.236e+09 -5.295e+09 -7.440e+09 -5.920e+09 -7.597e+09 -6.548e+09 -7.704e+09 -7.169e+09 -7.759e+09 -7.771e+09 -7.760e+09 -8.341e+09 -7.707e+09 -8.868e+09 -7.597e+09 -9.336e+09 -7.433e+09 -9.732e+09 -7.216e+09 -1.004e+10 -6.946e+09 -1.025e+10 -6.628e+09 -1.035e+10 -6.265e+09 -1.032e+10 -5.862e+09 -1.016e+10 -5.423e+09 -9.862e+09 -4.956e+09 -9.416e+09 -4.467e+09 -8.826e+09 -3.964e+09 -8.098e+09 -3.456e+09 -7.244e+09 -2.951e+09 -6.282e+09 -2.458e+09 -5.242e+09 -1.988e+09 -4.160e+09 -1.548e+09 -3.083e+09 -1.147e+09 -2.070e+09 -7.935e+08 -1.191e+09 -5.002e+08 -5.207e+08 -3.107e+08 -1.022e+08 -2.926e+08 2.417e+08 -4.178e+08 9.075e+08 -6.015e+08 2.211e+09 -8.229e+08 4.324e+09 -1.107e+09 7.404e+09 -1.496e+09 1.160e+10 -2.047e+09 1.708e+10 -2.830e+09 2.400e+10 -3.930e+09 3.253e+10 -5.444e+09 4.280e+10 -7.486e+09 5.496e+10 -1.019e+10 6.916e+10 -1.368e+10 8.548e+10 -1.813e+10 1.040e+11 -2.371e+10 1.249e+11 -3.059e+10 1.481e+11 -3.897e+10 1.737e+11 -4.905e+10 2.017e+11 -6.103e+10 2.319e+11 -7.514e+10 2.643e+11 -9.159e+10 2.989e+11 -1.106e+11 3.353e+11 -1.324e+11 3.736e+11 -1.571e+11 4.133e+11 -1.850e+11 4.543e+11 -2.164e+11 4.963e+11 -2.513e+11 5.390e+11 -2.900e+11 5.820e+11 -3.326e+11 6.249e+11 -3.793e+11 6.673e+11 -4.302e+11 7.087e+11 -4.856e+11 7.487e+11 -5.454e+11 7.868e+11 -6.098e+11 8.225e+11 -6.790e+11 8.553e+11 -7.530e+11 8.846e+11 -8.319e+11 9.100e+11 -9.160e+11 9.308e+11 -1.005e+12 9.466e+11 -1.100e+12 9.566e+11 -1.200e+12 9.605e+11 -1.307e+12 9.575e+11 -1.419e+12 9.471e+11 -1.538e+12 9.284e+11 -1.665e+12 9.009e+11 -1.799e+12 8.637e+11 -1.941e+12 8.158e+11 -2.093e+12 7.562e+11 -2.255e+12 6.838e+11 -2.428e+12 5.970e+11 -2.614e+12 4.942e+11 -2.813e+12 3.735e+11 -3.028e+12 2.326e+11 -3.259e+12 6.889e+10 -3.508e+12 -1.204e+11 -3.778e+12 -3.390e+11 -4.069e+12 -5.905e+11 -4.382e+12 -8.789e+11 -4.721e+12 -1.209e+12 -5.085e+12 -1.586e+12 -5.476e+12 -2.015e+12 -5.895e+12 -2.502e+12 -6.344e+12 -3.053e+12 -6.822e+12 -3.674e+12 -7.331e+12 -4.372e+12 -7.870e+12 -5.153e+12 -8.440e+12 -6.024e+12 -9.041e+12 -6.992e+12 -9.673e+12 -8.064e+12 -1.034e+13 -9.248e+12 -1.103e+13 -1.055e+13 -1.175e+13 -1.198e+13 -1.250e+13 -1.354e+13 -1.328e+13 -1.525e+13 -1.409e+13 -1.710e+13 -1.492e+13 -1.910e+13 -1.578e+13 -2.127e+13 -1.666e+13 -2.360e+13 -1.756e+13 -2.610e+13 -1.849e+13 -2.879e+13 -1.943e+13 -3.165e+13 -2.040e+13 -3.471e+13 -2.138e+13 -3.796e+13 -2.238e+13 -4.140e+13 -2.339e+13 -4.505e+13 -2.442e+13 -4.890e+13 -2.546e+13 -5.296e+13 -2.651e+13 -5.721e+13 -2.757e+13 -6.168e+13 -2.865e+13 -6.635e+13 -2.973e+13 -7.123e+13 -3.081e+13 -7.631e+13 -3.191e+13 -8.158e+13 -3.301e+13 -8.705e+13 -3.412e+13 -9.270e+13 -3.524e+13 -9.854e+13 -3.636e+13 -1.045e+14 -3.748e+13 -1.107e+14 -3.862e+13 -1.170e+14 -3.976e+13 -1.235e+14 -4.091e+13 -1.301e+14 -4.207e+13 -1.368e+14 -4.325e+13 -1.436e+14 -4.444e+13 -1.504e+14 -4.564e+13 -1.574e+14 -4.686e+13 -1.644e+14 -4.810e+13 -1.715e+14 -4.935e+13 -1.785e+14 -5.064e+13 -1.856e+14 -5.196e+13 -1.927e+14 -5.331e+13 -1.997e+14 -5.471e+13 -2.067e+14 -5.615e+13 -2.136e+14 -5.764e+13 -2.204e+14 -5.918e+13 -2.271e+14 -6.079e+13 -2.337e+14 -6.247e+13 -2.402e+14 -6.421e+13 -2.465e+14 -6.603e+13 -2.527e+14 -6.792e+13 -2.587e+14 -6.990e+13 -2.646e+14 -7.197e+13 -2.702e+14 -7.413e+13 -2.757e+14 -7.638e+13 -2.809e+14 -7.873e+13 -2.859e+14 -8.118e+13 -2.908e+14 -8.373e+13 -2.954e+14 -8.638e+13 -2.998e+14 -8.913e+13 -3.039e+14 -9.199e+13 -3.078e+14 -9.495e+13 -3.115e+14 -9.801e+13 -3.149e+14 -1.012e+14 -3.181e+14 -1.044e+14 -3.211e+14 -1.078e+14 -3.238e+14 -1.112e+14 -3.263e+14 -1.148e+14 -3.286e+14 -1.184e+14 -3.306e+14 -1.221e+14 -3.323e+14 -1.259e+14 -3.338e+14 -1.298e+14 -3.351e+14 -1.337e+14 -3.362e+14 -1.377e+14 -3.370e+14 -1.418e+14 -3.376e+14 -1.459e+14 -3.379e+14 -1.501e+14 -3.381e+14 -1.543e+14 -3.381e+14 -1.587e+14 -3.379e+14 -1.630e+14 -3.375e+14 -1.674e+14 -3.369e+14 -1.718e+14 -3.361e+14 -1.762e+14 -3.351e+14 -1.806e+14 -3.340e+14 -1.850e+14 -3.326e+14 -1.894e+14 -3.310e+14 -1.938e+14 -3.293e+14 -1.982e+14 -3.274e+14 -2.025e+14 -3.253e+14 -2.068e+14 -3.231e+14 -2.110e+14 -3.207e+14 -2.152e+14 -3.182e+14 -2.193e+14 -3.155e+14 -2.233e+14 -3.127e+14 -2.272e+14 -3.098e+14 -2.310e+14 -3.067e+14 -2.347e+14 -3.036e+14 -2.382e+14 -3.003e+14 -2.416e+14 -2.968e+14 -2.449e+14 -2.933e+14 -2.479e+14 -2.896e+14 -2.508e+14 -2.859e+14 -2.534e+14 -2.820e+14 -2.559e+14 -2.780e+14 -2.581e+14 -2.740e+14 -2.600e+14 -2.698e+14 -2.617e+14 -2.655e+14 -2.632e+14 -2.612e+14 -2.643e+14 -2.567e+14 -2.652e+14 -2.522e+14 -2.657e+14 -2.476e+14 -2.660e+14 -2.429e+14 -2.659e+14 -2.381e+14 -2.655e+14 -2.333e+14 -2.648e+14 -2.284e+14 -2.638e+14 -2.234e+14 -2.641e+14 -2.160e+14 -2.607e+14 -2.154e+14 -2.587e+14 -2.102e+14 -2.563e+14 -2.050e+14 -2.536e+14 -1.998e+14 -2.506e+14 -1.945e+14 -2.472e+14 -1.892e+14 -2.436e+14 -1.839e+14 -2.397e+14 -1.786e+14 -2.356e+14 -1.732e+14 -2.311e+14 -1.679e+14 -2.264e+14 -1.626e+14 -2.215e+14 -1.572e+14 -2.164e+14 -1.520e+14 -2.111e+14 -1.467e+14 -2.056e+14 -1.415e+14 -1.999e+14 -1.363e+14 -1.941e+14 -1.311e+14 -1.882e+14 -1.260e+14 -1.821e+14 -1.209e+14 -1.760e+14 -1.159e+14 -1.697e+14 -1.110e+14 -1.635e+14 -1.062e+14 -1.571e+14 -1.014e+14 -1.508e+14 -9.671e+13 -1.445e+14 -9.210e+13 -1.381e+14 -8.758e+13 -1.318e+14 -8.317e+13 -1.256e+14 -7.885e+13 -1.194e+14 -7.463e+13 -1.133e+14 -7.053e+13 -1.073e+14 -6.654e+13 -1.013e+14 -6.267e+13 -9.555e+13 -5.892e+13 -8.989e+13 -5.529e+13 -8.437e+13 -5.178e+13 -7.902e+13 -4.840e+13 -7.382e+13 -4.516e+13 -6.880e+13 -4.204e+13 -6.396e+13 -3.906e+13 -5.931e+13 -3.621e+13 -5.485e+13 -3.349e+13 -5.060e+13 -3.091e+13 -4.654e+13 -2.846e+13 -4.268e+13 -2.614e+13 -3.903e+13 -2.396e+13 -3.558e+13 -2.189e+13 -3.232e+13 -1.995e+13 -2.927e+13 -1.814e+13 -2.642e+13 -1.644e+13 -2.376e+13 -1.486e+13 -2.128e+13 -1.339e+13 -1.899e+13 -1.202e+13 -1.688e+13 -1.076e+13 -1.494e+13 -9.603e+12 -1.317e+13 -8.537e+12 -1.155e+13 -7.562e+12 -1.008e+13 -6.673e+12 -8.748e+12 -5.864e+12 -7.552e+12 -5.131e+12 -6.482e+12 -4.470e+12 -5.528e+12 -3.876e+12 -4.682e+12 -3.344e+12 -3.938e+12 -2.869e+12 -3.285e+12 -2.448e+12 -2.716e+12 -2.076e+12 -2.225e+12 -1.750e+12 -1.803e+12 -1.464e+12 -1.444e+12 -1.216e+12 -1.142e+12 -1.002e+12 -8.886e+11 -8.181e+11 -6.796e+11 -6.617e+11 -5.093e+11 -5.297e+11 -3.723e+11 -4.192e+11 -2.641e+11 -3.277e+11 -1.804e+11 -2.530e+11 -1.171e+11 -1.927e+11 -7.056e+10 -1.450e+11 -3.755e+10 -1.081e+11 -1.488e+10 -8.035e+10 3.573e+08 -6.034e+10 1.086e+10 -4.656e+10 1.897e+10 -3.743e+10 2.631e+10 -3.139e+10 3.368e+10 -2.707e+10 4.119e+10 -2.355e+10 4.852e+10 -2.031e+10 5.526e+10 -1.718e+10 6.101e+10 -1.414e+10 6.549e+10 -1.128e+10 6.848e+10 -8.668e+09 6.992e+10 -6.394e+09 6.981e+10 -4.512e+09 6.822e+10 -3.052e+09 6.530e+10 -2.011e+09 6.123e+10 -1.367e+09 5.624e+10 -1.076e+09 5.056e+10 -1.080e+09 4.443e+10 -1.310e+09 3.810e+10 -1.694e+09 3.180e+10 -2.156e+09 2.574e+10 -2.626e+09 2.012e+10 -3.042e+09 1.509e+10 -3.355e+09 1.078e+10 -3.539e+09 7.279e+09 -3.605e+09 4.601e+09 -3.623e+09 2.659e+09 -3.744e+09 1.195e+09 -4.179e+09 -1.866e+08 -5.097e+09 -1.849e+09 -6.535e+09 -4.000e+09 -8.439e+09 -6.700e+09 -1.073e+10 -9.911e+09 -1.333e+10 -1.355e+10 -1.617e+10 -1.752e+10 -1.918e+10 -2.171e+10 -2.231e+10 -2.599e+10 -2.549e+10 -3.025e+10 -2.866e+10 -3.439e+10 -3.176e+10 -3.831e+10 -3.474e+10 -4.191e+10 -3.753e+10 -4.513e+10 -4.009e+10 -4.790e+10 -4.237e+10 -5.018e+10 -4.436e+10 -5.193e+10 -4.601e+10 -5.313e+10 -4.730e+10 -5.379e+10 -4.821e+10 -5.390e+10 -4.875e+10 -5.349e+10 -4.890e+10 -5.258e+10 -4.868e+10 -5.123e+10 -4.810e+10 -4.946e+10 -4.718e+10 -4.734e+10 -4.594e+10 -4.491e+10 -4.441e+10 -4.224e+10 -4.263e+10 -3.937e+10 -4.062e+10 -3.637e+10 -3.843e+10 -3.330e+10 -3.610e+10 -3.020e+10 -3.367e+10 -2.712e+10 -3.116e+10 -2.410e+10 -2.863e+10 -2.119e+10 -2.610e+10 -1.842e+10 -2.360e+10 -1.581e+10 -2.117e+10 -1.338e+10 -1.883e+10 -1.116e+10 -1.660e+10 -9.153e+09 -1.450e+10 -7.361e+09 -1.255e+10 -5.789e+09 -1.074e+10 -4.431e+09 -9.104e+09 -3.278e+09 -7.627e+09 -2.320e+09 -6.314e+09 -1.540e+09 -5.164e+09 -9.216e+08 -4.169e+09 -4.457e+08 -3.323e+09 -9.151e+07 -2.615e+09 1.626e+08 -2.033e+09 3.376e+08 -1.564e+09 4.540e+08 -1.192e+09 5.298e+08 -9.010e+08 5.794e+08 -6.727e+08 6.126e+08 -4.911e+08 6.340e+08 -3.416e+08 6.441e+08 -2.137e+08 6.410e+08 -1.011e+08 6.224e+08 -4.361e+05 5.867e+08 8.860e+07 5.340e+08 1.654e+08 4.663e+08 2.293e+08 3.875e+08 2.805e+08 3.019e+08 3.213e+08 2.128e+08 3.563e+08 1.204e+08 3.930e+08 1.868e+07 4.399e+08 -1.055e+08 5.046e+08 -2.700e+08 5.908e+08 -4.945e+08 6.980e+08 -7.974e+08 8.223e+08 -1.194e+09 9.583e+08 -1.697e+09 1.100e+09 -2.314e+09 1.241e+09 -3.054e+09 1.376e+09 -3.916e+09 1.499e+09 -4.903e+09 1.606e+09 -6.009e+09 1.693e+09 -7.227e+09 1.758e+09 -8.549e+09 1.798e+09 -9.960e+09 1.812e+09 -1.144e+10 1.801e+09 -1.298e+10 1.766e+09 -1.456e+10 1.708e+09 -1.615e+10 1.631e+09 -1.774e+10 1.537e+09 -1.929e+10 1.430e+09 -2.080e+10 1.316e+09 -2.223e+10 1.198e+09 -2.356e+10 1.080e+09 -2.479e+10 9.671e+08 -2.588e+10 8.629e+08 -2.684e+10 7.702e+08 -2.763e+10 6.916e+08 -2.826e+10 6.297e+08 -2.872e+10 5.868e+08 -2.900e+10 5.637e+08 -2.911e+10 5.608e+08 -2.904e+10 5.778e+08 -2.880e+10 6.138e+08 -2.840e+10 6.674e+08 -2.783e+10 7.368e+08 -2.712e+10 8.195e+08 -2.628e+10 9.134e+08 -2.531e+10 1.016e+09 -2.424e+10 1.124e+09 -2.307e+10 1.234e+09 -2.182e+10 1.345e+09 -2.051e+10 1.454e+09 -1.916e+10 1.557e+09 -1.777e+10 1.654e+09 -1.637e+10 1.740e+09 -1.497e+10 1.816e+09 -1.358e+10 1.879e+09 -1.221e+10 1.928e+09 -1.089e+10 1.961e+09 -9.623e+09 1.979e+09 -8.416e+09 1.981e+09 -7.281e+09 1.967e+09 -6.225e+09 1.937e+09 -5.255e+09 1.892e+09 -4.375e+09 1.835e+09 -3.587e+09 1.766e+09 -2.894e+09 1.691e+09 -2.294e+09 1.611e+09 -1.782e+09 1.531e+09 -1.354e+09 1.459e+09 -9.986e+08 1.398e+09 -7.041e+08 1.356e+09 -4.568e+08 1.335e+09 -2.412e+08 1.338e+09 -4.381e+07 1.362e+09 1.454e+08 1.404e+09 3.326e+08 1.458e+09 5.204e+08 1.517e+09 7.071e+08 1.573e+09 8.891e+08 1.621e+09 1.062e+09 1.656e+09 1.219e+09 1.673e+09 1.356e+09 1.669e+09 1.467e+09 1.643e+09 1.548e+09 1.593e+09 1.597e+09 1.521e+09 1.612e+09 1.426e+09 1.592e+09 1.312e+09 1.539e+09 1.181e+09 1.454e+09 1.037e+09 1.343e+09 8.845e+08 1.208e+09 7.282e+08 1.056e+09 5.732e+08 8.943e+08 4.253e+08 7.291e+08 2.896e+08 5.681e+08 1.711e+08 4.194e+08 7.401e+07 2.912e+08 5.526e+05 1.906e+08 -5.179e+07 1.201e+08 -9.474e+07 6.991e+07 -1.507e+08 1.633e+07 -2.423e+08 -6.564e+07 -3.818e+08 -1.921e+08 -5.718e+08 -3.716e+08 -8.125e+08 -6.090e+08 -1.103e+09 -9.063e+08 -1.442e+09 -1.265e+09 -1.826e+09 -1.684e+09 -2.255e+09 -2.162e+09 -2.722e+09 -2.697e+09 -3.227e+09 -3.286e+09 -3.763e+09 -3.923e+09 -4.326e+09 -4.604e+09 -4.910e+09 -5.325e+09 -5.511e+09 -6.077e+09 -6.121e+09 -6.854e+09 -6.735e+09 -7.650e+09 -7.348e+09 -8.454e+09 -7.951e+09 -9.259e+09 -8.539e+09 -1.006e+10 -9.107e+09 -1.084e+10 -9.648e+09 -1.160e+10 -1.016e+10 -1.232e+10 -1.063e+10 -1.300e+10 -1.105e+10 -1.363e+10 -1.143e+10 -1.420e+10 -1.176e+10 -1.471e+10 -1.203e+10 -1.515e+10 -1.224e+10 -1.551e+10 -1.239e+10 -1.580e+10 -1.248e+10 -1.600e+10 -1.251e+10 -1.612e+10 -1.247e+10 -1.615e+10 -1.238e+10 -1.609e+10 -1.222e+10 -1.595e+10 -1.200e+10 0.005 -51.828 -50.876 -49.925 -48.973 -48.021 -47.069 -46.118 -45.250 -44.469 -43.769 -43.145 -42.592 -42.106 -41.681 -41.317 -41.013 -40.768 -40.579 -40.447 -40.372 -40.353 -40.392 -40.487 -40.642 -40.858 -41.136 -41.480 -41.893 -42.378 -42.942 -43.590 -44.329 -45.170 -46.125 -47.208 -48.440 -49.848 -51.470 -53.360 -55.603 -58.342 -61.848 -66.745 -74.793 -76.867 -71.089 -67.831 -66.150 -65.062 -63.901 -62.256 -60.140 -57.835 -55.585 -53.504 -51.622 -49.936 -48.428 -47.081 -45.877 -44.801 -43.842 -42.988 -42.231 -41.564 -40.981 -40.478 -40.051 -39.697 -39.414 -39.200 -39.055 -38.977 -38.967 -39.025 -39.153 -39.352 -39.623 -39.971 -40.398 -40.908 -41.507 -42.198 -42.988 -43.887 -44.901 -46.040 -47.310 -48.708 -50.218 -51.801 -53.372 -54.795 -55.908 -56.587 -56.788 -56.509 -55.733 -54.465 -52.801 -50.911 -48.957 -47.050 -45.246 -43.570 -42.025 -40.607 -39.310 -38.125 -37.044 -36.060 -35.167 -34.358 -33.628 -32.972 -32.389 -31.876 -31.432 -31.055 -30.745 -30.501 -30.323 -30.213 -30.171 -30.200 -30.304 -30.486 -30.749 -31.101 -31.548 -32.101 -32.771 -33.575 -34.533 -35.672 -37.030 -38.658 -40.625 -43.020 -45.884 -48.878 -50.681 -50.323 -48.960 -48.006 -47.938 -49.051 -51.892 -54.106 -50.005 -43.861 -39.201 -35.593 -32.626 -30.087 -27.861 -25.872 -24.072 -22.429 -20.916 -19.515 -18.212 -16.995 -15.857 -14.788 -13.781 -12.832 -11.936 -11.088 -10.287 -9.529 -8.811 -8.129 -7.481 -6.867 -6.286 -5.737 -5.218 -4.728 -4.266 -3.832 -3.424 -3.041 -2.684 -2.350 -2.041 -1.755 -1.491 -1.250 -1.031 -0.834 -0.658 -0.504 -0.370 -0.257 -0.165 -0.093 -0.042 -0.011 0.000 -0.009 -0.035 -0.080 -0.146 -0.232 -0.339 -0.466 -0.614 -0.783 -0.974 -1.186 -1.419 -1.675 -1.954 -2.255 -2.580 -2.929 -3.302 -3.700 -4.124 -4.574 -5.052 -5.559 -6.094 -6.660 -7.258 -7.889 -8.554 -9.256 -9.994 -10.771 -11.591 -12.456 -13.371 -14.340 -15.366 -16.455 -17.612 -18.846 -20.167 -21.585 -23.113 -24.768 -26.572 -28.553 -30.750 -33.213 -36.003 -39.177 -42.666 -45.899 -47.677 -47.671 -47.115 -46.893 -47.172 -47.803 -48.330 -48.027 -46.586 -44.493 -42.349 -40.421 -38.762 -37.353 -36.160 -35.153 -34.307 -33.601 -33.019 -32.548 -32.179 -31.903 -31.715 -31.608 -31.579 -31.626 -31.747 -31.939 -32.203 -32.536 -32.941 -33.418 -33.968 -34.594 -35.298 -36.084 -36.954 -37.913 -38.965 -40.117 -41.375 -42.741 -44.216 -45.796 -47.463 -49.185 -50.901 -52.519 -53.917 -54.954 -55.487 -55.409 -54.705 -53.492 -51.974 -50.341 -48.721 -47.184 -45.761 -44.461 -43.283 -42.220 -41.267 -40.415 -39.659 -38.991 -38.405 -37.897 -37.459 -37.088 -36.784 -36.543 -36.364 -36.246 -36.185 -36.183 -36.238 -36.350 -36.519 -36.746 -37.031 -37.377 -37.783 -38.254 -38.790 -39.396 -40.076 -40.834 -41.677 -42.612 -43.647 -44.794 -46.067 -47.482 -49.063 -50.839 -52.849 -55.147 -57.811 -60.952 -64.745 -69.447 -75.324 -81.025 -81.247 -77.183 -72.101 -67.501 -63.688 -60.545 -57.920 -55.696 -53.790 -52.139 -50.700 -49.440 -48.334 -47.361 -46.508 -45.760 -45.110 -44.547 -44.067 -43.664 -43.333 -43.070 -42.874 -42.741 -42.669 -42.658 -42.706 -42.813 -42.979 -43.205 -43.490 -43.836 -44.245 -44.718 -45.255 -45.863 -46.546 -47.311 -48.161 -49.105 -50.141 -51.176 -52.212 -53.247 -54.282 -55.318 0 1 1.0 10036369385.73 S3 VH 25.38 30.17 0.05 1.176e+09 -1.114e+09 1.234e+09 -1.153e+09 1.293e+09 -1.194e+09 1.352e+09 -1.238e+09 1.411e+09 -1.286e+09 1.472e+09 -1.337e+09 1.535e+09 -1.393e+09 1.600e+09 -1.452e+09 1.668e+09 -1.517e+09 1.740e+09 -1.587e+09 1.817e+09 -1.661e+09 1.899e+09 -1.739e+09 1.987e+09 -1.821e+09 2.082e+09 -1.907e+09 2.183e+09 -1.994e+09 2.291e+09 -2.082e+09 2.405e+09 -2.169e+09 2.526e+09 -2.254e+09 2.652e+09 -2.334e+09 2.782e+09 -2.409e+09 2.915e+09 -2.474e+09 3.049e+09 -2.530e+09 3.182e+09 -2.574e+09 3.312e+09 -2.603e+09 3.435e+09 -2.618e+09 3.549e+09 -2.616e+09 3.651e+09 -2.596e+09 3.738e+09 -2.560e+09 3.807e+09 -2.506e+09 3.856e+09 -2.435e+09 3.881e+09 -2.349e+09 3.881e+09 -2.249e+09 3.855e+09 -2.137e+09 3.801e+09 -2.015e+09 3.719e+09 -1.885e+09 3.610e+09 -1.750e+09 3.474e+09 -1.614e+09 3.314e+09 -1.477e+09 3.131e+09 -1.343e+09 2.929e+09 -1.214e+09 2.711e+09 -1.092e+09 2.481e+09 -9.774e+08 2.244e+09 -8.722e+08 2.003e+09 -7.767e+08 1.764e+09 -6.911e+08 1.530e+09 -6.153e+08 1.306e+09 -5.488e+08 1.094e+09 -4.909e+08 8.987e+08 -4.408e+08 7.222e+08 -3.978e+08 5.662e+08 -3.611e+08 4.321e+08 -3.305e+08 3.197e+08 -3.064e+08 2.279e+08 -2.899e+08 1.537e+08 -2.830e+08 9.209e+07 -2.881e+08 3.667e+07 -3.075e+08 -1.939e+07 -3.423e+08 -8.198e+07 -3.928e+08 -1.552e+08 -4.585e+08 -2.411e+08 -5.386e+08 -3.407e+08 -6.332e+08 -4.542e+08 -7.423e+08 -5.812e+08 -8.662e+08 -7.210e+08 -1.006e+09 -8.734e+08 -1.163e+09 -1.037e+09 -1.338e+09 -1.211e+09 -1.533e+09 -1.396e+09 -1.751e+09 -1.589e+09 -1.993e+09 -1.789e+09 -2.262e+09 -1.995e+09 -2.561e+09 -2.206e+09 -2.891e+09 -2.418e+09 -3.255e+09 -2.630e+09 -3.656e+09 -2.838e+09 -4.095e+09 -3.040e+09 -4.574e+09 -3.230e+09 -5.093e+09 -3.406e+09 -5.653e+09 -3.561e+09 -6.251e+09 -3.692e+09 -6.886e+09 -3.793e+09 -7.555e+09 -3.859e+09 -8.251e+09 -3.886e+09 -8.970e+09 -3.868e+09 -9.702e+09 -3.803e+09 -1.044e+10 -3.687e+09 -1.117e+10 -3.518e+09 -1.188e+10 -3.297e+09 -1.255e+10 -3.023e+09 -1.318e+10 -2.700e+09 -1.374e+10 -2.333e+09 -1.422e+10 -1.927e+09 -1.461e+10 -1.490e+09 -1.489e+10 -1.033e+09 -1.505e+10 -5.668e+08 -1.507e+10 -1.034e+08 -1.494e+10 3.436e+08 -1.467e+10 7.610e+08 -1.424e+10 1.135e+09 -1.365e+10 1.453e+09 -1.291e+10 1.704e+09 -1.202e+10 1.879e+09 -1.101e+10 1.969e+09 -9.882e+09 1.972e+09 -8.662e+09 1.888e+09 -7.379e+09 1.722e+09 -6.069e+09 1.486e+09 -4.768e+09 1.196e+09 -3.522e+09 8.759e+08 -2.383e+09 5.564e+08 -1.403e+09 2.760e+08 -6.453e+08 8.132e+07 -1.749e+08 -1.349e+07 3.812e+07 -1.771e+08 3.812e+08 -6.034e+08 1.211e+09 -1.388e+09 2.636e+09 -2.622e+09 4.740e+09 -4.403e+09 7.610e+09 -6.842e+09 1.134e+10 -1.006e+10 1.601e+10 -1.417e+10 2.172e+10 -1.933e+10 2.855e+10 -2.566e+10 3.659e+10 -3.332e+10 4.590e+10 -4.247e+10 5.657e+10 -5.328e+10 6.864e+10 -6.589e+10 8.217e+10 -8.050e+10 9.718e+10 -9.728e+10 1.137e+11 -1.164e+11 1.317e+11 -1.380e+11 1.511e+11 -1.623e+11 1.719e+11 -1.894e+11 1.940e+11 -2.195e+11 2.172e+11 -2.527e+11 2.414e+11 -2.891e+11 2.664e+11 -3.289e+11 2.920e+11 -3.722e+11 3.179e+11 -4.189e+11 3.436e+11 -4.692e+11 3.691e+11 -5.231e+11 3.938e+11 -5.806e+11 4.174e+11 -6.416e+11 4.394e+11 -7.061e+11 4.592e+11 -7.739e+11 4.765e+11 -8.450e+11 4.906e+11 -9.193e+11 5.010e+11 -9.964e+11 5.073e+11 -1.076e+12 5.088e+11 -1.159e+12 5.050e+11 -1.244e+12 4.953e+11 -1.332e+12 4.793e+11 -1.421e+12 4.562e+11 -1.513e+12 4.257e+11 -1.607e+12 3.870e+11 -1.703e+12 3.395e+11 -1.800e+12 2.827e+11 -1.901e+12 2.158e+11 -2.003e+12 1.381e+11 -2.109e+12 4.862e+10 -2.217e+12 -5.363e+10 -2.329e+12 -1.699e+11 -2.445e+12 -3.013e+11 -2.565e+12 -4.498e+11 -2.691e+12 -6.171e+11 -2.823e+12 -8.053e+11 -2.961e+12 -1.017e+12 -3.106e+12 -1.255e+12 -3.258e+12 -1.523e+12 -3.419e+12 -1.824e+12 -3.588e+12 -2.162e+12 -3.765e+12 -2.542e+12 -3.950e+12 -2.968e+12 -4.144e+12 -3.446e+12 -4.345e+12 -3.980e+12 -4.554e+12 -4.577e+12 -4.769e+12 -5.243e+12 -4.989e+12 -5.984e+12 -5.212e+12 -6.806e+12 -5.439e+12 -7.716e+12 -5.665e+12 -8.719e+12 -5.891e+12 -9.824e+12 -6.114e+12 -1.104e+13 -6.331e+12 -1.236e+13 -6.541e+12 -1.381e+13 -6.740e+12 -1.539e+13 -6.926e+12 -1.710e+13 -7.097e+12 -1.895e+13 -7.250e+12 -2.095e+13 -7.383e+12 -2.310e+13 -7.492e+12 -2.541e+13 -7.576e+12 -2.788e+13 -7.631e+12 -3.052e+13 -7.656e+12 -3.333e+13 -7.648e+12 -3.632e+13 -7.605e+12 -3.948e+13 -7.527e+12 -4.283e+13 -7.410e+12 -4.636e+13 -7.254e+12 -5.007e+13 -7.059e+12 -5.397e+13 -6.823e+12 -5.806e+13 -6.547e+12 -6.233e+13 -6.231e+12 -6.678e+13 -5.876e+12 -7.142e+13 -5.483e+12 -7.624e+13 -5.053e+12 -8.123e+13 -4.589e+12 -8.639e+13 -4.094e+12 -9.172e+13 -3.570e+12 -9.721e+13 -3.022e+12 -1.029e+14 -2.454e+12 -1.086e+14 -1.870e+12 -1.146e+14 -1.277e+12 -1.206e+14 -6.787e+11 -1.268e+14 -8.236e+10 -1.331e+14 5.056e+11 -1.395e+14 1.078e+12 -1.460e+14 1.628e+12 -1.525e+14 2.147e+12 -1.592e+14 2.632e+12 -1.658e+14 3.080e+12 -1.726e+14 3.480e+12 -1.793e+14 3.818e+12 -1.861e+14 4.087e+12 -1.929e+14 4.277e+12 -1.997e+14 4.382e+12 -2.064e+14 4.392e+12 -2.130e+14 4.301e+12 -2.197e+14 4.100e+12 -2.262e+14 3.783e+12 -2.326e+14 3.343e+12 -2.390e+14 2.775e+12 -2.452e+14 2.072e+12 -2.513e+14 1.229e+12 -2.572e+14 2.430e+11 -2.630e+14 -8.918e+11 -2.687e+14 -2.177e+12 -2.741e+14 -3.616e+12 -2.794e+14 -5.211e+12 -2.845e+14 -6.962e+12 -2.893e+14 -8.870e+12 -2.940e+14 -1.094e+13 -2.985e+14 -1.316e+13 -3.027e+14 -1.554e+13 -3.067e+14 -1.807e+13 -3.105e+14 -2.076e+13 -3.141e+14 -2.359e+13 -3.174e+14 -2.658e+13 -3.205e+14 -2.970e+13 -3.234e+14 -3.296e+13 -3.261e+14 -3.637e+13 -3.285e+14 -3.990e+13 -3.306e+14 -4.355e+13 -3.326e+14 -4.733e+13 -3.343e+14 -5.122e+13 -3.358e+14 -5.523e+13 -3.371e+14 -5.933e+13 -3.381e+14 -6.354e+13 -3.389e+14 -6.784e+13 -3.395e+14 -7.223e+13 -3.400e+14 -7.672e+13 -3.403e+14 -8.128e+13 -3.404e+14 -8.592e+13 -3.403e+14 -9.062e+13 -3.400e+14 -9.536e+13 -3.396e+14 -1.002e+14 -3.389e+14 -1.050e+14 -3.381e+14 -1.098e+14 -3.371e+14 -1.147e+14 -3.359e+14 -1.196e+14 -3.346e+14 -1.244e+14 -3.331e+14 -1.293e+14 -3.314e+14 -1.341e+14 -3.296e+14 -1.389e+14 -3.276e+14 -1.437e+14 -3.255e+14 -1.484e+14 -3.232e+14 -1.530e+14 -3.208e+14 -1.575e+14 -3.183e+14 -1.619e+14 -3.156e+14 -1.662e+14 -3.127e+14 -1.704e+14 -3.097e+14 -1.744e+14 -3.066e+14 -1.783e+14 -3.034e+14 -1.820e+14 -3.000e+14 -1.856e+14 -2.964e+14 -1.889e+14 -2.928e+14 -1.920e+14 -2.890e+14 -1.949e+14 -2.850e+14 -1.976e+14 -2.810e+14 -2.000e+14 -2.768e+14 -2.021e+14 -2.725e+14 -2.040e+14 -2.681e+14 -2.056e+14 -2.635e+14 -2.070e+14 -2.588e+14 -2.080e+14 -2.540e+14 -2.087e+14 -2.491e+14 -2.092e+14 -2.441e+14 -2.093e+14 -2.390e+14 -2.092e+14 -2.339e+14 -2.083e+14 -2.302e+14 -2.074e+14 -2.258e+14 -2.064e+14 -2.204e+14 -2.051e+14 -2.149e+14 -2.034e+14 -2.094e+14 -2.015e+14 -2.038e+14 -1.994e+14 -1.981e+14 -1.969e+14 -1.925e+14 -1.942e+14 -1.868e+14 -1.913e+14 -1.810e+14 -1.881e+14 -1.753e+14 -1.847e+14 -1.696e+14 -1.811e+14 -1.638e+14 -1.772e+14 -1.581e+14 -1.732e+14 -1.524e+14 -1.690e+14 -1.468e+14 -1.647e+14 -1.412e+14 -1.602e+14 -1.356e+14 -1.556e+14 -1.301e+14 -1.508e+14 -1.247e+14 -1.460e+14 -1.193e+14 -1.411e+14 -1.140e+14 -1.361e+14 -1.088e+14 -1.310e+14 -1.037e+14 -1.259e+14 -9.866e+13 -1.208e+14 -9.374e+13 -1.157e+14 -8.893e+13 -1.105e+14 -8.424e+13 -1.054e+14 -7.966e+13 -1.003e+14 -7.521e+13 -9.530e+13 -7.089e+13 -9.033e+13 -6.669e+13 -8.543e+13 -6.263e+13 -8.062e+13 -5.871e+13 -7.590e+13 -5.493e+13 -7.129e+13 -5.129e+13 -6.680e+13 -4.780e+13 -6.244e+13 -4.445e+13 -5.821e+13 -4.125e+13 -5.414e+13 -3.820e+13 -5.021e+13 -3.529e+13 -4.645e+13 -3.253e+13 -4.286e+13 -2.992e+13 -3.942e+13 -2.745e+13 -3.616e+13 -2.512e+13 -3.306e+13 -2.293e+13 -3.014e+13 -2.087e+13 -2.738e+13 -1.894e+13 -2.479e+13 -1.715e+13 -2.237e+13 -1.548e+13 -2.011e+13 -1.393e+13 -1.801e+13 -1.249e+13 -1.606e+13 -1.117e+13 -1.427e+13 -9.952e+12 -1.263e+13 -8.838e+12 -1.112e+13 -7.819e+12 -9.748e+12 -6.892e+12 -8.503e+12 -6.050e+12 -7.378e+12 -5.290e+12 -6.366e+12 -4.605e+12 -5.461e+12 -3.991e+12 -4.654e+12 -3.442e+12 -3.940e+12 -2.953e+12 -3.312e+12 -2.520e+12 -2.761e+12 -2.139e+12 -2.282e+12 -1.804e+12 -1.868e+12 -1.512e+12 -1.513e+12 -1.258e+12 -1.211e+12 -1.039e+12 -9.569e+11 -8.515e+11 -7.445e+11 -6.916e+11 -5.693e+11 -5.564e+11 -4.266e+11 -4.431e+11 -3.120e+11 -3.489e+11 -2.215e+11 -2.715e+11 -1.515e+11 -2.087e+11 -9.868e+10 -1.583e+11 -5.990e+10 -1.187e+11 -3.240e+10 -8.827e+10 -1.354e+10 -6.553e+10 -8.893e+08 -4.920e+10 7.778e+09 -3.804e+10 1.438e+10 -3.073e+10 2.027e+10 -2.599e+10 2.609e+10 -2.273e+10 3.195e+10 -2.018e+10 3.759e+10 -1.793e+10 4.269e+10 -1.584e+10 4.695e+10 -1.388e+10 5.014e+10 -1.207e+10 5.211e+10 -1.048e+10 5.283e+10 -9.148e+09 5.231e+10 -8.088e+09 5.063e+10 -7.306e+09 4.794e+10 -6.782e+09 4.440e+10 -6.481e+09 4.020e+10 -6.359e+09 3.555e+10 -6.360e+09 3.067e+10 -6.432e+09 2.574e+10 -6.521e+09 2.097e+10 -6.585e+09 1.653e+10 -6.593e+09 1.256e+10 -6.541e+09 9.150e+09 -6.455e+09 6.350e+09 -6.408e+09 4.107e+09 -6.521e+09 2.253e+09 -6.947e+09 5.233e+08 -7.812e+09 -1.368e+09 -9.168e+09 -3.646e+09 -1.099e+10 -6.427e+09 -1.323e+10 -9.741e+09 -1.579e+10 -1.356e+10 -1.861e+10 -1.782e+10 -2.163e+10 -2.241e+10 -2.478e+10 -2.725e+10 -2.801e+10 -3.222e+10 -3.126e+10 -3.719e+10 -3.448e+10 -4.207e+10 -3.761e+10 -4.675e+10 -4.062e+10 -5.112e+10 -4.345e+10 -5.512e+10 -4.605e+10 -5.865e+10 -4.839e+10 -6.166e+10 -5.045e+10 -6.411e+10 -5.220e+10 -6.595e+10 -5.362e+10 -6.717e+10 -5.469e+10 -6.777e+10 -5.539e+10 -6.774e+10 -5.573e+10 -6.713e+10 -5.571e+10 -6.594e+10 -5.531e+10 -6.423e+10 -5.457e+10 -6.205e+10 -5.349e+10 -5.944e+10 -5.209e+10 -5.648e+10 -5.040e+10 -5.321e+10 -4.844e+10 -4.972e+10 -4.625e+10 -4.606e+10 -4.385e+10 -4.229e+10 -4.129e+10 -3.848e+10 -3.860e+10 -3.469e+10 -3.583e+10 -3.097e+10 -3.300e+10 -2.737e+10 -3.016e+10 -2.392e+10 -2.734e+10 -2.067e+10 -2.458e+10 -1.763e+10 -2.190e+10 -1.484e+10 -1.934e+10 -1.230e+10 -1.691e+10 -1.003e+10 -1.464e+10 -8.024e+09 -1.254e+10 -6.281e+09 -1.062e+10 -4.791e+09 -8.889e+09 -3.540e+09 -7.346e+09 -2.513e+09 -5.991e+09 -1.688e+09 -4.818e+09 -1.043e+09 -3.819e+09 -5.547e+08 -2.983e+09 -1.978e+08 -2.296e+09 5.205e+07 -1.743e+09 2.191e+08 -1.307e+09 3.260e+08 -9.711e+08 3.924e+08 -7.158e+08 4.337e+08 -5.223e+08 4.601e+08 -3.728e+08 4.763e+08 -2.530e+08 4.829e+08 -1.524e+08 4.782e+08 -6.471e+07 4.603e+08 1.273e+07 4.286e+08 8.056e+07 3.839e+08 1.388e+08 3.288e+08 1.875e+08 2.668e+08 2.283e+08 2.010e+08 2.649e+08 1.322e+08 3.033e+08 5.668e+07 3.513e+08 -3.511e+07 4.164e+08 -1.570e+08 5.039e+08 -3.246e+08 6.159e+08 -5.528e+08 7.520e+08 -8.544e+08 9.105e+08 -1.240e+09 1.088e+09 -1.717e+09 1.283e+09 -2.292e+09 1.491e+09 -2.968e+09 1.710e+09 -3.745e+09 1.935e+09 -4.621e+09 2.164e+09 -5.592e+09 2.392e+09 -6.651e+09 2.617e+09 -7.787e+09 2.835e+09 -8.990e+09 3.043e+09 -1.024e+10 3.239e+09 -1.154e+10 3.418e+09 -1.285e+10 3.580e+09 -1.416e+10 3.722e+09 -1.546e+10 3.844e+09 -1.672e+10 3.945e+09 -1.792e+10 4.024e+09 -1.905e+10 4.083e+09 -2.008e+10 4.122e+09 -2.101e+10 4.143e+09 -2.181e+10 4.148e+09 -2.247e+10 4.138e+09 -2.299e+10 4.117e+09 -2.335e+10 4.087e+09 -2.355e+10 4.051e+09 -2.359e+10 4.011e+09 -2.346e+10 3.969e+09 -2.317e+10 3.926e+09 -2.272e+10 3.885e+09 -2.213e+10 3.845e+09 -2.139e+10 3.806e+09 -2.054e+10 3.769e+09 -1.957e+10 3.733e+09 -1.850e+10 3.695e+09 -1.736e+10 3.655e+09 -1.616e+10 3.611e+09 -1.492e+10 3.560e+09 -1.365e+10 3.502e+09 -1.238e+10 3.433e+09 -1.112e+10 3.353e+09 -9.884e+09 3.260e+09 -8.692e+09 3.154e+09 -7.556e+09 3.036e+09 -6.487e+09 2.904e+09 -5.492e+09 2.761e+09 -4.582e+09 2.609e+09 -3.760e+09 2.451e+09 -3.028e+09 2.290e+09 -2.388e+09 2.130e+09 -1.837e+09 1.976e+09 -1.368e+09 1.833e+09 -9.756e+08 1.708e+09 -6.470e+08 1.604e+09 -3.687e+08 1.527e+09 -1.268e+08 1.477e+09 9.437e+07 1.453e+09 3.073e+08 1.452e+09 5.200e+08 1.467e+09 7.370e+08 1.491e+09 9.592e+08 1.519e+09 1.184e+09 1.544e+09 1.407e+09 1.563e+09 1.622e+09 1.571e+09 1.825e+09 1.567e+09 2.008e+09 1.549e+09 2.167e+09 1.515e+09 2.295e+09 1.466e+09 2.390e+09 1.402e+09 2.447e+09 1.323e+09 2.466e+09 1.232e+09 2.444e+09 1.128e+09 2.382e+09 1.015e+09 2.282e+09 8.951e+08 2.147e+09 7.697e+08 1.980e+09 6.419e+08 1.787e+09 5.150e+08 1.574e+09 3.919e+08 1.348e+09 2.760e+08 1.117e+09 1.706e+08 8.898e+08 7.895e+07 6.745e+08 3.691e+06 4.810e+08 -5.314e+07 3.179e+08 -9.161e+07 1.918e+08 -1.165e+08 1.017e+08 -1.411e+08 2.974e+07 -1.867e+08 -5.697e+07 -2.707e+08 -1.895e+08 -3.988e+08 -3.862e+08 -5.694e+08 -6.567e+08 -7.801e+08 -1.006e+09 -1.028e+09 -1.434e+09 -1.311e+09 -1.943e+09 -1.626e+09 -2.531e+09 -1.970e+09 -3.192e+09 -2.338e+09 -3.924e+09 -2.726e+09 -4.719e+09 -3.129e+09 -5.570e+09 -3.541e+09 -6.468e+09 -3.958e+09 -7.405e+09 -4.374e+09 -8.369e+09 -4.783e+09 -9.353e+09 -5.180e+09 -1.034e+10 -5.561e+09 -1.133e+10 -5.919e+09 -1.230e+10 -6.253e+09 -1.325e+10 -6.558e+09 -1.417e+10 -6.830e+09 -1.504e+10 -7.067e+09 -1.585e+10 -7.268e+09 -1.661e+10 -7.431e+09 -1.729e+10 -7.556e+09 -1.790e+10 -7.642e+09 -1.844e+10 -7.689e+09 -1.888e+10 -7.698e+09 -1.924e+10 -7.670e+09 -1.952e+10 -7.607e+09 -1.969e+10 -7.508e+09 -1.978e+10 -7.377e+09 -1.977e+10 -7.215e+09 -1.968e+10 -7.023e+09 -1.949e+10 -6.805e+09 0.005 -52.638 -51.666 -50.694 -49.722 -48.750 -47.778 -46.806 -45.921 -45.128 -44.418 -43.788 -43.231 -42.743 -42.319 -41.959 -41.660 -41.423 -41.245 -41.126 -41.067 -41.067 -41.127 -41.248 -41.431 -41.680 -41.995 -42.381 -42.842 -43.383 -44.009 -44.727 -45.549 -46.483 -47.546 -48.755 -50.136 -51.719 -53.551 -55.695 -58.252 -61.382 -65.386 -70.930 -79.829 -83.004 -78.453 -75.634 -72.000 -67.415 -63.188 -59.618 -56.616 -54.058 -51.851 -49.923 -48.224 -46.716 -45.371 -44.168 -43.090 -42.123 -41.257 -40.484 -39.796 -39.187 -38.654 -38.192 -37.799 -37.471 -37.209 -37.009 -36.871 -36.795 -36.781 -36.830 -36.941 -37.118 -37.360 -37.671 -38.053 -38.509 -39.043 -39.658 -40.358 -41.152 -42.045 -43.045 -44.158 -45.387 -46.731 -48.181 -49.710 -51.268 -52.761 -54.055 -54.983 -55.373 -55.105 -54.167 -52.688 -50.884 -48.954 -47.035 -45.200 -43.480 -41.888 -40.421 -39.074 -37.840 -36.711 -35.680 -34.741 -33.887 -33.113 -32.414 -31.788 -31.232 -30.745 -30.324 -29.968 -29.677 -29.450 -29.289 -29.192 -29.163 -29.205 -29.318 -29.506 -29.773 -30.126 -30.570 -31.116 -31.774 -32.558 -33.486 -34.584 -35.885 -37.434 -39.299 -41.580 -44.433 -48.058 -52.279 -54.881 -54.289 -52.909 -52.922 -55.000 -56.676 -52.180 -45.734 -40.837 -37.038 -33.914 -31.244 -28.906 -26.821 -24.939 -23.222 -21.645 -20.187 -18.832 -17.569 -16.389 -15.281 -14.240 -13.259 -12.333 -11.459 -10.632 -9.850 -9.110 -8.408 -7.741 -7.109 -6.512 -5.947 -5.413 -4.909 -4.433 -3.986 -3.566 -3.172 -2.804 -2.460 -2.141 -1.845 -1.573 -1.323 -1.096 -0.891 -0.708 -0.546 -0.406 -0.286 -0.188 -0.110 -0.053 -0.016 0.000 -0.004 -0.024 -0.065 -0.126 -0.208 -0.311 -0.434 -0.578 -0.743 -0.930 -1.139 -1.369 -1.622 -1.897 -2.195 -2.517 -2.863 -3.234 -3.630 -4.051 -4.500 -4.975 -5.480 -6.013 -6.577 -7.174 -7.803 -8.467 -9.168 -9.905 -10.681 -11.500 -12.365 -13.280 -14.249 -15.275 -16.364 -17.523 -18.758 -20.080 -21.500 -23.030 -24.687 -26.494 -28.479 -30.680 -33.146 -35.941 -39.119 -42.612 -45.846 -47.620 -47.600 -47.006 -46.696 -46.784 -47.044 -47.017 -46.245 -44.707 -42.800 -40.897 -39.169 -37.657 -36.353 -35.236 -34.284 -33.478 -32.801 -32.240 -31.782 -31.421 -31.149 -30.959 -30.847 -30.810 -30.845 -30.952 -31.127 -31.369 -31.679 -32.056 -32.503 -33.019 -33.607 -34.270 -35.011 -35.834 -36.742 -37.743 -38.843 -40.054 -41.383 -42.843 -44.445 -46.203 -48.127 -50.220 -52.465 -54.807 -57.109 -59.110 -60.429 -60.713 -59.904 -58.299 -56.317 -54.266 -52.309 -50.510 -48.888 -47.439 -46.150 -45.007 -43.999 -43.114 -42.341 -41.671 -41.095 -40.606 -40.198 -39.869 -39.616 -39.436 -39.327 -39.288 -39.317 -39.415 -39.581 -39.816 -40.121 -40.499 -40.951 -41.482 -42.095 -42.795 -43.590 -44.486 -45.495 -46.628 -47.900 -49.330 -50.939 -52.752 -54.793 -57.068 -59.527 -61.974 -63.998 -65.240 -65.901 -66.587 -67.858 -70.076 -72.049 -69.329 -64.593 -60.688 -57.596 -55.076 -52.968 -51.170 -49.616 -48.259 -47.067 -46.017 -45.090 -44.271 -43.550 -42.918 -42.367 -41.892 -41.487 -41.149 -40.875 -40.661 -40.506 -40.407 -40.365 -40.377 -40.443 -40.562 -40.736 -40.963 -41.246 -41.584 -41.979 -42.433 -42.947 -43.522 -44.164 -44.877 -45.667 -46.538 -47.498 -48.544 -49.589 -50.634 -51.680 -52.725 -53.771 0 1 1.0 10036369385.73 S4 HH 30.06 34.35 0.05 -3.893e+10 -3.153e+10 -3.835e+10 -3.282e+10 -3.766e+10 -3.395e+10 -3.688e+10 -3.490e+10 -3.601e+10 -3.567e+10 -3.506e+10 -3.625e+10 -3.404e+10 -3.665e+10 -3.294e+10 -3.687e+10 -3.179e+10 -3.690e+10 -3.058e+10 -3.676e+10 -2.933e+10 -3.645e+10 -2.805e+10 -3.598e+10 -2.674e+10 -3.536e+10 -2.541e+10 -3.460e+10 -2.408e+10 -3.372e+10 -2.274e+10 -3.271e+10 -2.140e+10 -3.161e+10 -2.008e+10 -3.042e+10 -1.877e+10 -2.916e+10 -1.748e+10 -2.784e+10 -1.622e+10 -2.647e+10 -1.499e+10 -2.506e+10 -1.380e+10 -2.363e+10 -1.264e+10 -2.218e+10 -1.153e+10 -2.074e+10 -1.046e+10 -1.930e+10 -9.440e+09 -1.788e+10 -8.467e+09 -1.648e+10 -7.546e+09 -1.512e+10 -6.677e+09 -1.379e+10 -5.863e+09 -1.251e+10 -5.104e+09 -1.128e+10 -4.402e+09 -1.010e+10 -3.756e+09 -8.989e+09 -3.166e+09 -7.936e+09 -2.632e+09 -6.949e+09 -2.153e+09 -6.031e+09 -1.728e+09 -5.182e+09 -1.355e+09 -4.405e+09 -1.032e+09 -3.699e+09 -7.574e+08 -3.064e+09 -5.273e+08 -2.499e+09 -3.392e+08 -2.003e+09 -1.895e+08 -1.573e+09 -7.451e+07 -1.206e+09 9.621e+06 -9.006e+08 6.732e+07 -6.512e+08 1.033e+08 -4.538e+08 1.231e+08 -3.037e+08 1.331e+08 -1.945e+08 1.410e+08 -1.178e+08 1.544e+08 -6.274e+07 1.781e+08 -1.639e+07 2.127e+08 3.206e+07 2.555e+08 8.864e+07 3.032e+08 1.552e+08 3.529e+08 2.314e+08 4.021e+08 3.155e+08 4.490e+08 4.058e+08 4.924e+08 5.009e+08 5.312e+08 5.995e+08 5.649e+08 7.009e+08 5.928e+08 8.047e+08 6.147e+08 9.110e+08 6.304e+08 1.020e+09 6.399e+08 1.134e+09 6.430e+08 1.253e+09 6.397e+08 1.379e+09 6.296e+08 1.515e+09 6.127e+08 1.664e+09 5.885e+08 1.828e+09 5.563e+08 2.010e+09 5.153e+08 2.215e+09 4.644e+08 2.447e+09 4.021e+08 2.709e+09 3.269e+08 3.007e+09 2.369e+08 3.345e+09 1.301e+08 3.729e+09 4.603e+06 4.164e+09 -1.418e+08 4.654e+09 -3.114e+08 5.205e+09 -5.056e+08 5.822e+09 -7.264e+08 6.509e+09 -9.754e+08 7.273e+09 -1.253e+09 8.116e+09 -1.561e+09 9.043e+09 -1.898e+09 1.006e+10 -2.265e+09 1.116e+10 -2.660e+09 1.236e+10 -3.083e+09 1.366e+10 -3.532e+09 1.506e+10 -4.004e+09 1.655e+10 -4.499e+09 1.815e+10 -5.011e+09 1.985e+10 -5.539e+09 2.166e+10 -6.080e+09 2.356e+10 -6.629e+09 2.557e+10 -7.185e+09 2.768e+10 -7.744e+09 2.989e+10 -8.303e+09 3.219e+10 -8.861e+09 3.458e+10 -9.418e+09 3.707e+10 -9.969e+09 3.965e+10 -1.051e+10 4.229e+10 -1.104e+10 4.501e+10 -1.155e+10 4.778e+10 -1.205e+10 5.060e+10 -1.253e+10 5.344e+10 -1.300e+10 5.630e+10 -1.344e+10 5.915e+10 -1.385e+10 6.199e+10 -1.425e+10 6.477e+10 -1.461e+10 6.749e+10 -1.495e+10 7.011e+10 -1.526e+10 7.261e+10 -1.553e+10 7.496e+10 -1.576e+10 7.714e+10 -1.596e+10 7.912e+10 -1.612e+10 8.087e+10 -1.624e+10 8.236e+10 -1.631e+10 8.358e+10 -1.633e+10 8.450e+10 -1.630e+10 8.511e+10 -1.623e+10 8.539e+10 -1.611e+10 8.534e+10 -1.593e+10 8.493e+10 -1.571e+10 8.419e+10 -1.544e+10 8.310e+10 -1.513e+10 8.167e+10 -1.477e+10 7.993e+10 -1.438e+10 7.789e+10 -1.396e+10 7.556e+10 -1.351e+10 7.298e+10 -1.304e+10 7.017e+10 -1.256e+10 6.716e+10 -1.206e+10 6.399e+10 -1.156e+10 6.069e+10 -1.106e+10 5.729e+10 -1.057e+10 5.382e+10 -1.009e+10 5.033e+10 -9.621e+09 4.685e+10 -9.170e+09 4.340e+10 -8.739e+09 4.003e+10 -8.328e+09 3.673e+10 -7.937e+09 3.354e+10 -7.567e+09 3.047e+10 -7.216e+09 2.755e+10 -6.882e+09 2.478e+10 -6.564e+09 2.217e+10 -6.261e+09 1.974e+10 -5.969e+09 1.749e+10 -5.687e+09 1.541e+10 -5.413e+09 1.351e+10 -5.146e+09 1.179e+10 -4.884e+09 1.024e+10 -4.627e+09 8.846e+09 -4.374e+09 7.608e+09 -4.125e+09 6.514e+09 -3.880e+09 5.553e+09 -3.637e+09 4.713e+09 -3.397e+09 3.984e+09 -3.159e+09 3.354e+09 -2.922e+09 2.812e+09 -2.685e+09 2.349e+09 -2.447e+09 1.954e+09 -2.208e+09 1.620e+09 -1.967e+09 1.339e+09 -1.725e+09 1.104e+09 -1.483e+09 9.110e+08 -1.244e+09 7.533e+08 -1.012e+09 6.263e+08 -7.917e+08 5.253e+08 -5.900e+08 4.464e+08 -4.127e+08 3.869e+08 -2.646e+08 3.471e+08 -1.446e+08 3.323e+08 -4.010e+07 3.526e+08 7.440e+07 4.196e+08 2.298e+08 5.402e+08 4.522e+08 7.173e+08 7.593e+08 9.530e+08 1.162e+09 1.249e+09 1.668e+09 1.609e+09 2.281e+09 2.033e+09 3.002e+09 2.521e+09 3.828e+09 3.070e+09 4.756e+09 3.677e+09 5.777e+09 4.332e+09 6.883e+09 5.027e+09 8.059e+09 5.749e+09 9.290e+09 6.484e+09 1.056e+10 7.215e+09 1.185e+10 7.924e+09 1.313e+10 8.593e+09 1.439e+10 9.203e+09 1.560e+10 9.736e+09 1.674e+10 1.017e+10 1.778e+10 1.050e+10 1.870e+10 1.070e+10 1.948e+10 1.076e+10 2.009e+10 1.068e+10 2.052e+10 1.045e+10 2.075e+10 1.007e+10 2.076e+10 9.548e+09 2.056e+10 8.886e+09 2.012e+10 8.100e+09 1.947e+10 7.206e+09 1.859e+10 6.224e+09 1.751e+10 5.181e+09 1.625e+10 4.101e+09 1.483e+10 3.015e+09 1.328e+10 1.954e+09 1.165e+10 9.476e+08 9.996e+09 2.428e+07 8.363e+09 -7.940e+08 6.811e+09 -1.499e+09 5.399e+09 -2.100e+09 4.171e+09 -2.641e+09 3.133e+09 -3.211e+09 2.234e+09 -3.936e+09 1.347e+09 -4.955e+09 2.988e+08 -6.381e+09 -1.084e+09 -8.282e+09 -2.944e+09 -1.069e+10 -5.387e+09 -1.361e+10 -8.483e+09 -1.705e+10 -1.227e+10 -2.100e+10 -1.677e+10 -2.545e+10 -2.197e+10 -3.038e+10 -2.783e+10 -3.577e+10 -3.430e+10 -4.158e+10 -4.130e+10 -4.778e+10 -4.871e+10 -5.433e+10 -5.642e+10 -6.118e+10 -6.426e+10 -6.828e+10 -7.206e+10 -7.557e+10 -7.966e+10 -8.299e+10 -8.684e+10 -9.048e+10 -9.340e+10 -9.798e+10 -9.916e+10 -1.054e+11 -1.039e+11 -1.128e+11 -1.074e+11 -1.200e+11 -1.096e+11 -1.270e+11 -1.103e+11 -1.339e+11 -1.094e+11 -1.405e+11 -1.069e+11 -1.470e+11 -1.026e+11 -1.534e+11 -9.656e+10 -1.598e+11 -8.884e+10 -1.664e+11 -7.944e+10 -1.735e+11 -6.835e+10 -1.814e+11 -5.546e+10 -1.907e+11 -4.057e+10 -2.018e+11 -2.328e+10 -2.155e+11 -2.893e+09 -2.327e+11 2.155e+10 -2.543e+11 5.137e+10 -2.814e+11 8.827e+10 -3.152e+11 1.342e+11 -3.566e+11 1.915e+11 -4.071e+11 2.628e+11 -4.680e+11 3.509e+11 -5.407e+11 4.587e+11 -6.268e+11 5.896e+11 -7.282e+11 7.468e+11 -8.468e+11 9.339e+11 -9.849e+11 1.155e+12 -1.145e+12 1.413e+12 -1.330e+12 1.713e+12 -1.543e+12 2.059e+12 -1.787e+12 2.455e+12 -2.066e+12 2.905e+12 -2.384e+12 3.413e+12 -2.746e+12 3.983e+12 -3.155e+12 4.620e+12 -3.618e+12 5.328e+12 -4.139e+12 6.110e+12 -4.724e+12 6.969e+12 -5.379e+12 7.910e+12 -6.111e+12 8.935e+12 -6.925e+12 1.004e+13 -7.828e+12 1.124e+13 -8.828e+12 1.253e+13 -9.931e+12 1.391e+13 -1.114e+13 1.538e+13 -1.248e+13 1.695e+13 -1.394e+13 1.860e+13 -1.553e+13 2.034e+13 -1.726e+13 2.216e+13 -1.914e+13 2.407e+13 -2.117e+13 2.606e+13 -2.337e+13 2.812e+13 -2.573e+13 3.024e+13 -2.827e+13 3.243e+13 -3.099e+13 3.467e+13 -3.390e+13 3.696e+13 -3.700e+13 3.928e+13 -4.030e+13 4.163e+13 -4.380e+13 4.400e+13 -4.751e+13 4.637e+13 -5.143e+13 5.003e+13 -5.506e+13 5.196e+13 -5.980e+13 5.436e+13 -6.439e+13 5.672e+13 -6.919e+13 5.902e+13 -7.420e+13 6.125e+13 -7.944e+13 6.340e+13 -8.490e+13 6.545e+13 -9.056e+13 6.738e+13 -9.644e+13 6.919e+13 -1.025e+14 7.084e+13 -1.088e+14 7.234e+13 -1.153e+14 7.366e+13 -1.219e+14 7.478e+13 -1.287e+14 7.570e+13 -1.357e+14 7.639e+13 -1.428e+14 7.685e+13 -1.501e+14 7.705e+13 -1.575e+14 7.699e+13 -1.650e+14 7.664e+13 -1.726e+14 7.601e+13 -1.803e+14 7.508e+13 -1.880e+14 7.383e+13 -1.958e+14 7.227e+13 -2.036e+14 7.037e+13 -2.114e+14 6.814e+13 -2.192e+14 6.557e+13 -2.270e+14 6.265e+13 -2.347e+14 5.938e+13 -2.423e+14 5.576e+13 -2.498e+14 5.180e+13 -2.572e+14 4.748e+13 -2.644e+14 4.282e+13 -2.715e+14 3.781e+13 -2.784e+14 3.248e+13 -2.851e+14 2.681e+13 -2.915e+14 2.083e+13 -2.977e+14 1.455e+13 -3.037e+14 7.962e+12 -3.093e+14 1.105e+12 -3.146e+14 -6.021e+12 -3.197e+14 -1.341e+13 -3.244e+14 -2.103e+13 -3.289e+14 -2.886e+13 -3.329e+14 -3.690e+13 -3.366e+14 -4.511e+13 -3.399e+14 -5.347e+13 -3.428e+14 -6.197e+13 -3.453e+14 -7.056e+13 -3.474e+14 -7.925e+13 -3.491e+14 -8.799e+13 -3.503e+14 -9.677e+13 -3.511e+14 -1.055e+14 -3.515e+14 -1.143e+14 -3.514e+14 -1.230e+14 -3.510e+14 -1.317e+14 -3.500e+14 -1.403e+14 -3.487e+14 -1.487e+14 -3.470e+14 -1.570e+14 -3.448e+14 -1.652e+14 -3.422e+14 -1.731e+14 -3.393e+14 -1.808e+14 -3.359e+14 -1.883e+14 -3.322e+14 -1.956e+14 -3.281e+14 -2.025e+14 -3.237e+14 -2.092e+14 -3.189e+14 -2.155e+14 -3.138e+14 -2.215e+14 -3.084e+14 -2.271e+14 -3.026e+14 -2.324e+14 -2.966e+14 -2.372e+14 -2.904e+14 -2.417e+14 -2.839e+14 -2.457e+14 -2.771e+14 -2.494e+14 -2.701e+14 -2.525e+14 -2.630e+14 -2.553e+14 -2.557e+14 -2.575e+14 -2.482e+14 -2.593e+14 -2.405e+14 -2.606e+14 -2.328e+14 -2.615e+14 -2.250e+14 -2.619e+14 -2.171e+14 -2.618e+14 -2.092e+14 -2.613e+14 -2.013e+14 -2.603e+14 -1.934e+14 -2.588e+14 -1.854e+14 -2.569e+14 -1.775e+14 -2.546e+14 -1.697e+14 -2.518e+14 -1.619e+14 -2.486e+14 -1.542e+14 -2.450e+14 -1.465e+14 -2.410e+14 -1.390e+14 -2.366e+14 -1.317e+14 -2.319e+14 -1.244e+14 -2.268e+14 -1.174e+14 -2.214e+14 -1.105e+14 -2.158e+14 -1.038e+14 -2.099e+14 -9.732e+13 -2.037e+14 -9.104e+13 -1.974e+14 -8.499e+13 -1.908e+14 -7.916e+13 -1.841e+14 -7.358e+13 -1.773e+14 -6.823e+13 -1.705e+14 -6.314e+13 -1.635e+14 -5.828e+13 -1.565e+14 -5.368e+13 -1.495e+14 -4.933e+13 -1.425e+14 -4.522e+13 -1.355e+14 -4.136e+13 -1.286e+14 -3.774e+13 -1.218e+14 -3.436e+13 -1.151e+14 -3.120e+13 -1.086e+14 -2.827e+13 -1.021e+14 -2.556e+13 -9.588e+13 -2.305e+13 -8.979e+13 -2.074e+13 -8.389e+13 -1.862e+13 -7.819e+13 -1.668e+13 -7.270e+13 -1.491e+13 -6.743e+13 -1.330e+13 -6.238e+13 -1.184e+13 -5.756e+13 -1.052e+13 -5.296e+13 -9.326e+12 -4.861e+13 -8.250e+12 -4.448e+13 -7.288e+12 -4.059e+13 -6.431e+12 -3.693e+13 -5.671e+12 -3.349e+13 -4.998e+12 -3.028e+13 -4.404e+12 -2.729e+13 -3.881e+12 -2.451e+13 -3.423e+12 -2.194e+13 -3.021e+12 -1.956e+13 -2.671e+12 -1.738e+13 -2.366e+12 -1.538e+13 -2.099e+12 -1.355e+13 -1.868e+12 -1.189e+13 -1.666e+12 -1.039e+13 -1.490e+12 -9.033e+12 -1.336e+12 -7.816e+12 -1.201e+12 -6.729e+12 -1.083e+12 -5.762e+12 -9.777e+11 -4.907e+12 -8.843e+11 -4.155e+12 -8.006e+11 -3.496e+12 -7.252e+11 -2.924e+12 -6.569e+11 -2.429e+12 -5.945e+11 -2.004e+12 -5.374e+11 -1.642e+12 -4.850e+11 -1.335e+12 -4.366e+11 -1.077e+12 -3.921e+11 -8.632e+11 -3.511e+11 -6.862e+11 -3.134e+11 -5.414e+11 -2.790e+11 -4.240e+11 -2.478e+11 -3.297e+11 -2.196e+11 -2.547e+11 -1.943e+11 -1.955e+11 -1.718e+11 -1.491e+11 -1.519e+11 -1.131e+11 -1.343e+11 -8.534e+10 -1.188e+11 -6.398e+10 -1.051e+11 -4.767e+10 -9.291e+10 -3.532e+10 -8.188e+10 -2.606e+10 -7.174e+10 -1.924e+10 -6.231e+10 -1.438e+10 -5.346e+10 -1.104e+10 -4.513e+10 -8.902e+09 -3.731e+10 -7.654e+09 -3.007e+10 -7.036e+09 -2.350e+10 -6.837e+09 -1.772e+10 -6.920e+09 -1.287e+10 -7.283e+09 -8.986e+09 -8.120e+09 -6.007e+09 -9.796e+09 -3.589e+09 -1.271e+10 -1.153e+09 -1.712e+10 1.918e+09 -2.317e+10 6.090e+09 -3.091e+10 1.165e+10 -4.035e+10 1.873e+10 -5.146e+10 2.738e+10 -6.423e+10 3.759e+10 -7.856e+10 4.930e+10 -9.434e+10 6.241e+10 -1.114e+11 7.679e+10 -1.297e+11 9.229e+10 -1.488e+11 1.087e+11 -1.687e+11 1.259e+11 -1.891e+11 1.435e+11 -2.096e+11 1.615e+11 -2.302e+11 1.795e+11 -2.504e+11 1.973e+11 -2.701e+11 2.147e+11 -2.889e+11 2.314e+11 -3.067e+11 2.473e+11 -3.231e+11 2.620e+11 -3.381e+11 2.755e+11 -3.513e+11 2.875e+11 -3.627e+11 2.979e+11 -3.720e+11 3.065e+11 -3.793e+11 3.133e+11 -3.845e+11 3.182e+11 -3.875e+11 3.211e+11 -3.882e+11 3.221e+11 -3.868e+11 3.211e+11 -3.832e+11 3.183e+11 -3.775e+11 3.136e+11 -3.699e+11 3.071e+11 -3.605e+11 2.991e+11 -3.494e+11 2.896e+11 -3.368e+11 2.788e+11 -3.229e+11 2.669e+11 -3.079e+11 2.540e+11 -2.919e+11 2.403e+11 -2.753e+11 2.261e+11 -2.581e+11 2.115e+11 -2.407e+11 1.967e+11 -2.232e+11 1.818e+11 -2.057e+11 1.671e+11 -1.884e+11 1.526e+11 -1.716e+11 1.386e+11 -1.552e+11 1.251e+11 -1.396e+11 1.122e+11 -1.247e+11 1.000e+11 -1.105e+11 8.860e+10 -9.734e+10 7.799e+10 -8.507e+10 6.822e+10 -7.376e+10 5.928e+10 -6.344e+10 5.120e+10 -5.410e+10 4.394e+10 -4.571e+10 3.747e+10 -3.825e+10 3.178e+10 -3.169e+10 2.680e+10 -2.596e+10 2.249e+10 -2.105e+10 1.881e+10 -1.686e+10 1.569e+10 -1.334e+10 1.307e+10 -1.042e+10 1.090e+10 -8.028e+09 9.133e+09 -6.104e+09 7.710e+09 -4.582e+09 6.596e+09 -3.394e+09 5.752e+09 -2.476e+09 5.144e+09 -1.771e+09 4.749e+09 -1.224e+09 4.544e+09 -7.924e+08 4.513e+09 -4.416e+08 4.642e+09 -1.497e+08 4.923e+09 9.491e+07 5.352e+09 2.947e+08 5.931e+09 4.462e+08 6.665e+09 5.411e+08 7.564e+09 5.675e+08 8.642e+09 5.111e+08 9.913e+09 3.552e+08 1.140e+10 8.117e+07 1.311e+10 -3.313e+08 1.506e+10 -9.045e+08 1.727e+10 -1.661e+09 1.975e+10 -2.622e+09 2.250e+10 -3.814e+09 2.554e+10 -5.255e+09 2.885e+10 -6.966e+09 3.242e+10 -8.965e+09 3.624e+10 -1.127e+10 4.029e+10 -1.388e+10 4.454e+10 -1.681e+10 4.896e+10 -2.007e+10 5.349e+10 -2.364e+10 5.810e+10 -2.752e+10 6.273e+10 -3.171e+10 6.734e+10 -3.616e+10 7.185e+10 -4.088e+10 7.623e+10 -4.582e+10 8.040e+10 -5.097e+10 8.431e+10 -5.627e+10 8.791e+10 -6.171e+10 9.114e+10 -6.722e+10 9.397e+10 -7.278e+10 9.634e+10 -7.835e+10 9.824e+10 -8.386e+10 9.961e+10 -8.929e+10 1.005e+11 -9.459e+10 1.008e+11 -9.972e+10 1.005e+11 -1.047e+11 9.975e+10 -1.093e+11 9.840e+10 -1.137e+11 9.651e+10 -1.178e+11 9.408e+10 -1.216e+11 9.115e+10 -1.250e+11 8.776e+10 -1.281e+11 8.392e+10 -1.307e+11 7.968e+10 -1.330e+11 7.508e+10 -1.348e+11 7.015e+10 -1.363e+11 6.493e+10 -1.373e+11 5.947e+10 -1.380e+11 5.380e+10 -1.382e+11 4.797e+10 -1.381e+11 4.201e+10 -1.377e+11 3.597e+10 -1.369e+11 2.988e+10 0.005 -55.687 -54.659 -53.630 -52.601 -51.573 -50.544 -49.523 -48.610 -47.795 -47.070 -46.430 -45.868 -45.380 -44.964 -44.617 -44.337 -44.121 -43.971 -43.884 -43.862 -43.905 -44.013 -44.189 -44.435 -44.753 -45.148 -45.624 -46.187 -46.844 -47.604 -48.480 -49.484 -50.637 -51.964 -53.500 -55.293 -57.418 -59.995 -63.241 -67.622 -74.565 -98.282 -78.309 -73.556 -71.682 -70.338 -68.271 -65.300 -62.097 -59.120 -56.483 -54.169 -52.134 -50.334 -48.735 -47.306 -46.026 -44.875 -43.841 -42.911 -42.076 -41.329 -40.663 -40.073 -39.556 -39.108 -38.725 -38.407 -38.152 -37.958 -37.825 -37.752 -37.740 -37.790 -37.901 -38.076 -38.316 -38.623 -39.001 -39.452 -39.981 -40.592 -41.290 -42.085 -42.981 -43.986 -45.109 -46.358 -47.744 -49.273 -50.951 -52.787 -54.791 -57.008 -59.552 -62.624 -65.749 -66.002 -62.101 -57.744 -54.194 -51.269 -48.786 -46.631 -44.734 -43.048 -41.538 -40.181 -38.957 -37.853 -36.855 -35.956 -35.148 -34.425 -33.783 -33.217 -32.725 -32.304 -31.953 -31.672 -31.460 -31.317 -31.245 -31.247 -31.323 -31.477 -31.713 -32.037 -32.456 -32.979 -33.616 -34.383 -35.296 -36.381 -37.668 -39.200 -41.033 -43.234 -45.859 -48.799 -51.351 -52.389 -52.035 -51.652 -52.253 -54.501 -56.461 -52.572 -46.380 -41.526 -37.749 -34.639 -31.977 -29.642 -27.557 -25.671 -23.949 -22.364 -20.897 -19.532 -18.257 -17.062 -15.941 -14.885 -13.889 -12.948 -12.057 -11.214 -10.414 -9.657 -8.938 -8.257 -7.611 -6.999 -6.418 -5.869 -5.349 -4.857 -4.394 -3.956 -3.545 -3.159 -2.798 -2.460 -2.146 -1.854 -1.585 -1.338 -1.113 -0.909 -0.727 -0.565 -0.423 -0.303 -0.202 -0.122 -0.061 -0.021 -0.001 0.000 -0.019 -0.056 -0.113 -0.190 -0.288 -0.405 -0.543 -0.702 -0.881 -1.082 -1.303 -1.547 -1.813 -2.101 -2.412 -2.747 -3.105 -3.488 -3.896 -4.331 -4.792 -5.281 -5.798 -6.346 -6.924 -7.535 -8.180 -8.861 -9.580 -10.339 -11.141 -11.988 -12.884 -13.834 -14.841 -15.912 -17.052 -18.271 -19.579 -20.988 -22.517 -24.188 -26.031 -28.091 -30.437 -33.181 -36.537 -40.997 -48.336 -56.505 -51.153 -45.813 -43.449 -42.303 -41.873 -41.949 -42.409 -43.131 -43.909 -44.379 -44.151 -43.156 -41.703 -40.150 -38.697 -37.411 -36.303 -35.361 -34.569 -33.912 -33.375 -32.947 -32.619 -32.383 -32.234 -32.166 -32.175 -32.260 -32.418 -32.649 -32.951 -33.326 -33.773 -34.294 -34.891 -35.567 -36.327 -37.175 -38.118 -39.163 -40.319 -41.600 -43.019 -44.595 -46.353 -48.322 -50.544 -53.071 -55.974 -59.330 -63.144 -66.789 -68.216 -66.683 -63.887 -61.041 -58.394 -55.987 -53.829 -51.911 -50.215 -48.718 -47.401 -46.242 -45.226 -44.338 -43.567 -42.903 -42.338 -41.866 -41.482 -41.179 -40.955 -40.807 -40.733 -40.732 -40.803 -40.946 -41.162 -41.451 -41.816 -42.259 -42.784 -43.394 -44.095 -44.894 -45.799 -46.818 -47.964 -49.249 -50.686 -52.288 -54.061 -55.991 -58.015 -59.991 -61.693 -62.948 -63.827 -64.641 -65.757 -67.441 -69.310 -68.807 -65.293 -61.439 -58.194 -55.522 -53.286 -51.379 -49.726 -48.278 -47.001 -45.869 -44.863 -43.967 -43.171 -42.463 -41.837 -41.286 -40.805 -40.390 -40.037 -39.742 -39.504 -39.321 -39.190 -39.110 -39.081 -39.101 -39.171 -39.289 -39.456 -39.671 -39.937 -40.252 -40.619 -41.037 -41.510 -42.039 -42.626 -43.273 -43.985 -44.765 -45.618 -46.549 -47.485 -48.422 -49.358 -50.295 -51.231 0 1 1.0 4476553695.58 S4 HV 30.06 34.35 0.05 -4.800e+10 1.674e+10 -4.945e+10 1.573e+10 -5.075e+10 1.469e+10 -5.192e+10 1.362e+10 -5.293e+10 1.252e+10 -5.379e+10 1.140e+10 -5.448e+10 1.027e+10 -5.500e+10 9.114e+09 -5.534e+10 7.953e+09 -5.550e+10 6.789e+09 -5.549e+10 5.626e+09 -5.529e+10 4.474e+09 -5.491e+10 3.338e+09 -5.435e+10 2.226e+09 -5.363e+10 1.148e+09 -5.272e+10 1.113e+08 -5.166e+10 -8.768e+08 -5.045e+10 -1.807e+09 -4.909e+10 -2.672e+09 -4.760e+10 -3.467e+09 -4.599e+10 -4.185e+09 -4.427e+10 -4.820e+09 -4.246e+10 -5.370e+09 -4.058e+10 -5.834e+09 -3.862e+10 -6.209e+09 -3.662e+10 -6.498e+09 -3.459e+10 -6.701e+09 -3.254e+10 -6.823e+09 -3.048e+10 -6.867e+09 -2.843e+10 -6.841e+09 -2.641e+10 -6.749e+09 -2.441e+10 -6.600e+09 -2.247e+10 -6.401e+09 -2.058e+10 -6.161e+09 -1.875e+10 -5.886e+09 -1.700e+10 -5.586e+09 -1.532e+10 -5.267e+09 -1.373e+10 -4.937e+09 -1.222e+10 -4.600e+09 -1.081e+10 -4.264e+09 -9.491e+09 -3.932e+09 -8.265e+09 -3.609e+09 -7.135e+09 -3.296e+09 -6.099e+09 -2.996e+09 -5.156e+09 -2.712e+09 -4.306e+09 -2.443e+09 -3.545e+09 -2.190e+09 -2.872e+09 -1.953e+09 -2.284e+09 -1.734e+09 -1.776e+09 -1.531e+09 -1.343e+09 -1.346e+09 -9.817e+08 -1.178e+09 -6.846e+08 -1.030e+09 -4.442e+08 -9.009e+08 -2.516e+08 -7.936e+08 -9.623e+07 -7.082e+08 3.392e+07 -6.441e+08 1.504e+08 -5.987e+08 2.637e+08 -5.674e+08 3.811e+08 -5.441e+08 5.064e+08 -5.224e+08 6.406e+08 -4.965e+08 7.829e+08 -4.618e+08 9.306e+08 -4.149e+08 1.082e+09 -3.534e+08 1.233e+09 -2.754e+08 1.383e+09 -1.802e+08 1.531e+09 -6.677e+07 1.674e+09 6.574e+07 1.812e+09 2.174e+08 1.947e+09 3.890e+08 2.077e+09 5.817e+08 2.204e+09 7.963e+08 2.328e+09 1.034e+09 2.451e+09 1.298e+09 2.573e+09 1.589e+09 2.696e+09 1.910e+09 2.820e+09 2.263e+09 2.947e+09 2.651e+09 3.077e+09 3.077e+09 3.211e+09 3.545e+09 3.352e+09 4.058e+09 3.499e+09 4.619e+09 3.656e+09 5.234e+09 3.822e+09 5.906e+09 4.001e+09 6.640e+09 4.195e+09 7.443e+09 4.404e+09 8.318e+09 4.631e+09 9.272e+09 4.879e+09 1.031e+10 5.148e+09 1.144e+10 5.442e+09 1.267e+10 5.761e+09 1.400e+10 6.107e+09 1.543e+10 6.481e+09 1.698e+10 6.885e+09 1.863e+10 7.318e+09 2.039e+10 7.783e+09 2.227e+10 8.278e+09 2.424e+10 8.804e+09 2.632e+10 9.359e+09 2.848e+10 9.944e+09 3.072e+10 1.056e+10 3.302e+10 1.120e+10 3.536e+10 1.186e+10 3.773e+10 1.255e+10 4.009e+10 1.326e+10 4.242e+10 1.399e+10 4.470e+10 1.473e+10 4.690e+10 1.549e+10 4.899e+10 1.625e+10 5.095e+10 1.702e+10 5.275e+10 1.779e+10 5.437e+10 1.855e+10 5.580e+10 1.931e+10 5.701e+10 2.004e+10 5.800e+10 2.075e+10 5.876e+10 2.142e+10 5.928e+10 2.206e+10 5.956e+10 2.265e+10 5.961e+10 2.318e+10 5.943e+10 2.364e+10 5.904e+10 2.403e+10 5.844e+10 2.434e+10 5.764e+10 2.457e+10 5.667e+10 2.469e+10 5.554e+10 2.472e+10 5.426e+10 2.464e+10 5.286e+10 2.445e+10 5.134e+10 2.415e+10 4.972e+10 2.374e+10 4.802e+10 2.322e+10 4.624e+10 2.259e+10 4.441e+10 2.187e+10 4.254e+10 2.104e+10 4.063e+10 2.013e+10 3.869e+10 1.914e+10 3.674e+10 1.809e+10 3.478e+10 1.698e+10 3.282e+10 1.584e+10 3.087e+10 1.467e+10 2.895e+10 1.349e+10 2.705e+10 1.232e+10 2.519e+10 1.116e+10 2.337e+10 1.003e+10 2.161e+10 8.943e+09 1.990e+10 7.904e+09 1.826e+10 6.925e+09 1.669e+10 6.012e+09 1.521e+10 5.169e+09 1.381e+10 4.400e+09 1.250e+10 3.708e+09 1.128e+10 3.089e+09 1.016e+10 2.544e+09 9.133e+09 2.069e+09 8.206e+09 1.660e+09 7.374e+09 1.312e+09 6.634e+09 1.019e+09 5.983e+09 7.767e+08 5.417e+09 5.783e+08 4.930e+09 4.190e+08 4.517e+09 2.936e+08 4.172e+09 1.980e+08 3.890e+09 1.284e+08 3.664e+09 8.201e+07 3.491e+09 5.660e+07 3.364e+09 5.082e+07 3.281e+09 6.401e+07 3.236e+09 9.618e+07 3.227e+09 1.479e+08 3.251e+09 2.206e+08 3.305e+09 3.158e+08 3.387e+09 4.359e+08 3.493e+09 5.835e+08 3.622e+09 7.618e+08 3.770e+09 9.741e+08 3.937e+09 1.225e+09 4.118e+09 1.517e+09 4.312e+09 1.857e+09 4.517e+09 2.248e+09 4.729e+09 2.697e+09 4.947e+09 3.208e+09 5.167e+09 3.789e+09 5.388e+09 4.446e+09 5.606e+09 5.182e+09 5.819e+09 6.004e+09 6.024e+09 6.915e+09 6.215e+09 7.916e+09 6.388e+09 9.009e+09 6.539e+09 1.019e+10 6.662e+09 1.144e+10 6.752e+09 1.277e+10 6.802e+09 1.415e+10 6.808e+09 1.555e+10 6.766e+09 1.696e+10 6.672e+09 1.835e+10 6.521e+09 1.968e+10 6.313e+09 2.092e+10 6.046e+09 2.204e+10 5.719e+09 2.299e+10 5.334e+09 2.374e+10 4.892e+09 2.426e+10 4.396e+09 2.453e+10 3.850e+09 2.452e+10 3.259e+09 2.421e+10 2.629e+09 2.361e+10 1.968e+09 2.271e+10 1.286e+09 2.152e+10 5.934e+08 2.008e+10 -9.642e+07 1.842e+10 -7.697e+08 1.657e+10 -1.411e+09 1.460e+10 -2.003e+09 1.256e+10 -2.532e+09 1.053e+10 -2.987e+09 8.571e+09 -3.365e+09 6.754e+09 -3.676e+09 5.134e+09 -3.955e+09 3.735e+09 -4.271e+09 2.522e+09 -4.727e+09 1.384e+09 -5.447e+09 1.473e+08 -6.537e+09 -1.384e+09 -8.064e+09 -3.382e+09 -1.005e+10 -5.974e+09 -1.250e+10 -9.247e+09 -1.540e+10 -1.325e+10 -1.873e+10 -1.801e+10 -2.247e+10 -2.351e+10 -2.659e+10 -2.974e+10 -3.107e+10 -3.665e+10 -3.587e+10 -4.416e+10 -4.096e+10 -5.220e+10 -4.630e+10 -6.064e+10 -5.185e+10 -6.937e+10 -5.758e+10 -7.824e+10 -6.344e+10 -8.709e+10 -6.940e+10 -9.574e+10 -7.545e+10 -1.040e+11 -8.154e+10 -1.117e+11 -8.766e+10 -1.186e+11 -9.381e+10 -1.246e+11 -9.999e+10 -1.295e+11 -1.062e+11 -1.330e+11 -1.124e+11 -1.351e+11 -1.188e+11 -1.356e+11 -1.252e+11 -1.345e+11 -1.319e+11 -1.318e+11 -1.389e+11 -1.273e+11 -1.463e+11 -1.211e+11 -1.543e+11 -1.134e+11 -1.633e+11 -1.040e+11 -1.735e+11 -9.303e+10 -1.856e+11 -8.030e+10 -2.001e+11 -6.552e+10 -2.180e+11 -4.814e+10 -2.401e+11 -2.731e+10 -2.678e+11 -1.832e+09 -3.024e+11 2.988e+10 -3.453e+11 6.970e+10 -3.983e+11 1.198e+11 -4.630e+11 1.829e+11 -5.414e+11 2.615e+11 -6.356e+11 3.587e+11 -7.477e+11 4.776e+11 -8.804e+11 6.215e+11 -1.036e+12 7.939e+11 -1.218e+12 9.984e+11 -1.429e+12 1.239e+12 -1.673e+12 1.518e+12 -1.954e+12 1.841e+12 -2.276e+12 2.212e+12 -2.643e+12 2.633e+12 -3.061e+12 3.110e+12 -3.534e+12 3.645e+12 -4.069e+12 4.243e+12 -4.671e+12 4.907e+12 -5.347e+12 5.640e+12 -6.103e+12 6.445e+12 -6.947e+12 7.327e+12 -7.886e+12 8.285e+12 -8.928e+12 9.323e+12 -1.008e+13 1.044e+13 -1.135e+13 1.164e+13 -1.275e+13 1.293e+13 -1.428e+13 1.430e+13 -1.596e+13 1.575e+13 -1.779e+13 1.728e+13 -1.978e+13 1.889e+13 -2.194e+13 2.058e+13 -2.428e+13 2.234e+13 -2.680e+13 2.417e+13 -2.952e+13 2.606e+13 -3.243e+13 2.801e+13 -3.555e+13 3.002e+13 -3.889e+13 3.206e+13 -4.243e+13 3.414e+13 -4.620e+13 3.625e+13 -5.019e+13 3.837e+13 -5.441e+13 4.049e+13 -5.886e+13 4.261e+13 -6.354e+13 4.515e+13 -6.845e+13 4.753e+13 -7.364e+13 4.962e+13 -7.903e+13 5.165e+13 -8.464e+13 5.361e+13 -9.047e+13 5.548e+13 -9.653e+13 5.726e+13 -1.028e+14 5.892e+13 -1.093e+14 6.045e+13 -1.160e+14 6.183e+13 -1.229e+14 6.306e+13 -1.299e+14 6.411e+13 -1.372e+14 6.497e+13 -1.446e+14 6.562e+13 -1.522e+14 6.605e+13 -1.599e+14 6.624e+13 -1.677e+14 6.619e+13 -1.757e+14 6.587e+13 -1.838e+14 6.528e+13 -1.920e+14 6.440e+13 -2.002e+14 6.322e+13 -2.086e+14 6.173e+13 -2.169e+14 5.993e+13 -2.253e+14 5.779e+13 -2.337e+14 5.532e+13 -2.421e+14 5.252e+13 -2.504e+14 4.936e+13 -2.587e+14 4.586e+13 -2.669e+14 4.201e+13 -2.750e+14 3.780e+13 -2.830e+14 3.325e+13 -2.909e+14 2.835e+13 -2.985e+14 2.311e+13 -3.060e+14 1.753e+13 -3.133e+14 1.162e+13 -3.203e+14 5.398e+12 -3.271e+14 -1.130e+12 -3.336e+14 -7.953e+12 -3.398e+14 -1.506e+13 -3.456e+14 -2.242e+13 -3.511e+14 -3.004e+13 -3.563e+14 -3.790e+13 -3.611e+14 -4.596e+13 -3.656e+14 -5.423e+13 -3.696e+14 -6.266e+13 -3.733e+14 -7.123e+13 -3.765e+14 -7.993e+13 -3.792e+14 -8.873e+13 -3.816e+14 -9.759e+13 -3.834e+14 -1.065e+14 -3.848e+14 -1.155e+14 -3.858e+14 -1.244e+14 -3.863e+14 -1.333e+14 -3.864e+14 -1.422e+14 -3.860e+14 -1.510e+14 -3.851e+14 -1.597e+14 -3.838e+14 -1.683e+14 -3.821e+14 -1.767e+14 -3.800e+14 -1.850e+14 -3.774e+14 -1.930e+14 -3.744e+14 -2.009e+14 -3.711e+14 -2.085e+14 -3.673e+14 -2.159e+14 -3.632e+14 -2.230e+14 -3.587e+14 -2.298e+14 -3.539e+14 -2.363e+14 -3.487e+14 -2.424e+14 -3.432e+14 -2.482e+14 -3.374e+14 -2.537e+14 -3.314e+14 -2.587e+14 -3.250e+14 -2.634e+14 -3.184e+14 -2.676e+14 -3.115e+14 -2.714e+14 -3.044e+14 -2.747e+14 -2.971e+14 -2.776e+14 -2.896e+14 -2.800e+14 -2.819e+14 -2.820e+14 -2.741e+14 -2.834e+14 -2.661e+14 -2.844e+14 -2.580e+14 -2.848e+14 -2.497e+14 -2.848e+14 -2.414e+14 -2.843e+14 -2.332e+14 -2.832e+14 -2.248e+14 -2.817e+14 -2.165e+14 -2.797e+14 -2.081e+14 -2.773e+14 -1.998e+14 -2.743e+14 -1.914e+14 -2.709e+14 -1.832e+14 -2.671e+14 -1.749e+14 -2.628e+14 -1.668e+14 -2.582e+14 -1.588e+14 -2.531e+14 -1.509e+14 -2.477e+14 -1.432e+14 -2.420e+14 -1.356e+14 -2.360e+14 -1.282e+14 -2.297e+14 -1.210e+14 -2.231e+14 -1.140e+14 -2.163e+14 -1.072e+14 -2.094e+14 -1.006e+14 -2.022e+14 -9.425e+13 -1.950e+14 -8.814e+13 -1.876e+14 -8.227e+13 -1.802e+14 -7.665e+13 -1.727e+14 -7.128e+13 -1.652e+14 -6.616e+13 -1.578e+14 -6.130e+13 -1.503e+14 -5.669e+13 -1.430e+14 -5.233e+13 -1.357e+14 -4.822e+13 -1.285e+14 -4.435e+13 -1.214e+14 -4.072e+13 -1.145e+14 -3.732e+13 -1.078e+14 -3.414e+13 -1.012e+14 -3.118e+13 -9.482e+13 -2.843e+13 -8.863e+13 -2.588e+13 -8.264e+13 -2.352e+13 -7.689e+13 -2.135e+13 -7.135e+13 -1.934e+13 -6.604e+13 -1.750e+13 -6.098e+13 -1.581e+13 -5.614e+13 -1.425e+13 -5.155e+13 -1.283e+13 -4.720e+13 -1.154e+13 -4.309e+13 -1.037e+13 -3.922e+13 -9.303e+12 -3.558e+13 -8.342e+12 -3.218e+13 -7.473e+12 -2.900e+13 -6.691e+12 -2.605e+13 -5.987e+12 -2.331e+13 -5.353e+12 -2.078e+13 -4.785e+12 -1.846e+13 -4.275e+12 -1.633e+13 -3.818e+12 -1.438e+13 -3.409e+12 -1.261e+13 -3.043e+12 -1.101e+13 -2.715e+12 -9.569e+12 -2.421e+12 -8.274e+12 -2.158e+12 -7.117e+12 -1.923e+12 -6.089e+12 -1.712e+12 -5.181e+12 -1.523e+12 -4.382e+12 -1.354e+12 -3.684e+12 -1.202e+12 -3.078e+12 -1.066e+12 -2.554e+12 -9.442e+11 -2.105e+12 -8.349e+11 -1.723e+12 -7.370e+11 -1.399e+12 -6.495e+11 -1.128e+12 -5.714e+11 -9.023e+11 -5.019e+11 -7.159e+11 -4.402e+11 -5.635e+11 -3.857e+11 -4.399e+11 -3.377e+11 -3.406e+11 -2.958e+11 -2.615e+11 -2.592e+11 -1.990e+11 -2.276e+11 -1.501e+11 -2.004e+11 -1.119e+11 -1.770e+11 -8.240e+10 -1.569e+11 -5.963e+10 -1.395e+11 -4.218e+10 -1.244e+11 -2.892e+10 -1.110e+11 -1.896e+10 -9.889e+10 -1.167e+10 -8.779e+10 -6.561e+09 -7.743e+10 -3.217e+09 -6.763e+10 -1.314e+09 -5.831e+10 -5.521e+08 -4.946e+10 -6.487e+08 -4.112e+10 -1.336e+09 -3.336e+10 -2.366e+09 -2.633e+10 -3.527e+09 -2.014e+10 -4.686e+09 -1.494e+10 -5.857e+09 -1.082e+10 -7.277e+09 -7.746e+09 -9.408e+09 -5.433e+09 -1.277e+10 -3.337e+09 -1.774e+10 -8.448e+08 -2.451e+10 2.511e+09 -3.316e+10 6.999e+09 -4.368e+10 1.274e+10 -5.604e+10 1.976e+10 -7.015e+10 2.800e+10 -8.590e+10 3.737e+10 -1.031e+11 4.774e+10 -1.216e+11 5.895e+10 -1.411e+11 7.083e+10 -1.615e+11 8.317e+10 -1.823e+11 9.578e+10 -2.034e+11 1.084e+11 -2.244e+11 1.210e+11 -2.451e+11 1.331e+11 -2.651e+11 1.447e+11 -2.841e+11 1.557e+11 -3.020e+11 1.657e+11 -3.184e+11 1.747e+11 -3.332e+11 1.827e+11 -3.461e+11 1.894e+11 -3.571e+11 1.949e+11 -3.661e+11 1.991e+11 -3.728e+11 2.020e+11 -3.774e+11 2.036e+11 -3.798e+11 2.040e+11 -3.800e+11 2.030e+11 -3.781e+11 2.010e+11 -3.742e+11 1.978e+11 -3.683e+11 1.937e+11 -3.606e+11 1.886e+11 -3.513e+11 1.827e+11 -3.404e+11 1.761e+11 -3.283e+11 1.689e+11 -3.150e+11 1.611e+11 -3.007e+11 1.530e+11 -2.857e+11 1.445e+11 -2.701e+11 1.358e+11 -2.540e+11 1.270e+11 -2.377e+11 1.182e+11 -2.213e+11 1.094e+11 -2.050e+11 1.007e+11 -1.889e+11 9.213e+10 -1.731e+11 8.383e+10 -1.577e+11 7.582e+10 -1.428e+11 6.816e+10 -1.286e+11 6.088e+10 -1.151e+11 5.401e+10 -1.023e+11 4.759e+10 -9.032e+10 4.163e+10 -7.918e+10 3.616e+10 -6.889e+10 3.117e+10 -5.945e+10 2.666e+10 -5.088e+10 2.263e+10 -4.316e+10 1.906e+10 -3.626e+10 1.594e+10 -3.017e+10 1.325e+10 -2.485e+10 1.095e+10 -2.023e+10 8.999e+09 -1.628e+10 7.381e+09 -1.295e+10 6.052e+09 -1.017e+10 4.975e+09 -7.891e+09 4.119e+09 -6.059e+09 3.450e+09 -4.611e+09 2.941e+09 -3.494e+09 2.570e+09 -2.653e+09 2.319e+09 -2.036e+09 2.179e+09 -1.597e+09 2.147e+09 -1.292e+09 2.224e+09 -1.085e+09 2.412e+09 -9.537e+08 2.713e+09 -8.860e+08 3.133e+09 -8.806e+08 3.675e+09 -9.443e+08 4.346e+09 -1.090e+09 5.152e+09 -1.334e+09 6.102e+09 -1.694e+09 7.203e+09 -2.193e+09 8.461e+09 -2.852e+09 9.882e+09 -3.691e+09 1.147e+10 -4.733e+09 1.322e+10 -5.999e+09 1.514e+10 -7.504e+09 1.721e+10 -9.265e+09 1.942e+10 -1.129e+10 2.177e+10 -1.360e+10 2.423e+10 -1.618e+10 2.677e+10 -1.904e+10 2.939e+10 -2.217e+10 3.204e+10 -2.556e+10 3.470e+10 -2.919e+10 3.735e+10 -3.305e+10 3.994e+10 -3.710e+10 4.244e+10 -4.133e+10 4.484e+10 -4.570e+10 4.709e+10 -5.016e+10 4.916e+10 -5.470e+10 5.103e+10 -5.928e+10 5.267e+10 -6.385e+10 5.406e+10 -6.839e+10 5.517e+10 -7.285e+10 5.599e+10 -7.720e+10 5.650e+10 -8.141e+10 5.669e+10 -8.545e+10 5.656e+10 -8.929e+10 5.608e+10 -9.291e+10 5.526e+10 -9.629e+10 5.409e+10 -9.942e+10 5.258e+10 -1.023e+11 5.073e+10 -1.048e+11 4.854e+10 -1.071e+11 4.604e+10 -1.090e+11 4.323e+10 -1.107e+11 4.014e+10 -1.120e+11 3.678e+10 -1.131e+11 3.318e+10 -1.138e+11 2.936e+10 -1.143e+11 2.534e+10 -1.145e+11 2.115e+10 -1.143e+11 1.681e+10 -1.140e+11 1.236e+10 -1.133e+11 7.812e+09 -1.124e+11 3.197e+09 0.005 -53.528 -52.583 -51.639 -50.694 -49.749 -48.804 -47.866 -47.023 -46.268 -45.594 -44.995 -44.469 -44.011 -43.619 -43.291 -43.024 -42.818 -42.672 -42.586 -42.559 -42.593 -42.688 -42.846 -43.068 -43.358 -43.717 -44.152 -44.666 -45.267 -45.961 -46.760 -47.676 -48.726 -49.933 -51.328 -52.956 -54.886 -57.231 -60.197 -64.238 -70.767 -93.976 -73.392 -67.951 -65.501 -64.255 -63.708 -63.543 -63.380 -62.730 -61.297 -59.271 -57.060 -54.929 -52.980 -51.231 -49.671 -48.281 -47.041 -45.936 -44.952 -44.076 -43.300 -42.615 -42.016 -41.497 -41.054 -40.685 -40.386 -40.156 -39.994 -39.898 -39.870 -39.908 -40.014 -40.190 -40.437 -40.757 -41.154 -41.632 -42.195 -42.849 -43.599 -44.457 -45.426 -46.517 -47.738 -49.095 -50.592 -52.223 -53.972 -55.809 -57.707 -59.684 -61.876 -64.545 -67.292 -67.239 -63.117 -58.614 -54.976 -52.003 -49.499 -47.341 -45.454 -43.785 -42.297 -40.966 -39.771 -38.696 -37.731 -36.865 -36.091 -35.404 -34.799 -34.273 -33.822 -33.445 -33.141 -32.910 -32.751 -32.667 -32.660 -32.732 -32.887 -33.129 -33.465 -33.903 -34.454 -35.130 -35.949 -36.934 -38.113 -39.526 -41.219 -43.241 -45.593 -48.025 -49.732 -49.892 -48.914 -47.873 -47.345 -47.572 -48.830 -51.619 -54.004 -50.449 -44.525 -39.889 -36.292 -33.333 -30.800 -28.575 -26.586 -24.785 -23.136 -21.618 -20.209 -18.897 -17.670 -16.519 -15.438 -14.418 -13.455 -12.544 -11.682 -10.864 -10.090 -9.355 -8.657 -7.996 -7.368 -6.773 -6.209 -5.675 -5.169 -4.691 -4.240 -3.815 -3.415 -3.040 -2.689 -2.361 -2.055 -1.773 -1.512 -1.273 -1.055 -0.859 -0.683 -0.527 -0.392 -0.277 -0.182 -0.107 -0.052 -0.016 0.000 -0.004 -0.027 -0.068 -0.128 -0.209 -0.309 -0.430 -0.570 -0.731 -0.913 -1.116 -1.340 -1.586 -1.853 -2.143 -2.456 -2.791 -3.151 -3.535 -3.945 -4.380 -4.841 -5.331 -5.849 -6.396 -6.975 -7.586 -8.231 -8.911 -9.630 -10.388 -11.188 -12.035 -12.930 -13.878 -14.883 -15.952 -17.091 -18.307 -19.612 -21.018 -22.544 -24.211 -26.051 -28.107 -30.447 -33.186 -36.537 -40.992 -48.324 -56.487 -51.130 -45.786 -43.421 -42.280 -41.868 -41.985 -42.535 -43.443 -44.566 -45.545 -45.782 -44.928 -43.321 -41.527 -39.860 -38.411 -37.182 -36.150 -35.291 -34.581 -34.005 -33.546 -33.195 -32.941 -32.778 -32.700 -32.703 -32.784 -32.941 -33.172 -33.478 -33.856 -34.309 -34.836 -35.441 -36.124 -36.891 -37.744 -38.688 -39.728 -40.871 -42.123 -43.493 -44.988 -46.616 -48.388 -50.314 -52.416 -54.729 -57.312 -60.183 -62.798 -63.251 -60.977 -57.785 -54.878 -52.401 -50.279 -48.438 -46.827 -45.407 -44.149 -43.032 -42.041 -41.162 -40.385 -39.700 -39.100 -38.581 -38.138 -37.765 -37.460 -37.219 -37.040 -36.922 -36.862 -36.861 -36.918 -37.031 -37.203 -37.432 -37.720 -38.068 -38.479 -38.953 -39.495 -40.107 -40.794 -41.562 -42.415 -43.364 -44.416 -45.586 -46.887 -48.340 -49.972 -51.818 -53.926 -56.367 -59.242 -62.694 -66.860 -71.323 -73.547 -72.933 -72.140 -71.815 -70.901 -68.373 -65.058 -61.911 -59.179 -56.844 -54.843 -53.116 -51.614 -50.302 -49.152 -48.142 -47.255 -46.478 -45.800 -45.213 -44.709 -44.283 -43.930 -43.645 -43.426 -43.270 -43.175 -43.140 -43.163 -43.243 -43.381 -43.576 -43.828 -44.139 -44.509 -44.940 -45.433 -45.992 -46.620 -47.319 -48.095 -48.954 -49.901 -50.855 -51.809 -52.763 -53.717 -54.670 0 1 1.0 4476553695.58 S4 VV 30.06 34.35 0.05 -1.862e+08 4.806e+10 -1.643e+09 4.904e+10 -3.089e+09 4.988e+10 -4.520e+09 5.056e+10 -5.930e+09 5.109e+10 -7.311e+09 5.145e+10 -8.658e+09 5.165e+10 -9.965e+09 5.168e+10 -1.122e+10 5.155e+10 -1.243e+10 5.124e+10 -1.357e+10 5.078e+10 -1.464e+10 5.015e+10 -1.564e+10 4.937e+10 -1.656e+10 4.844e+10 -1.738e+10 4.737e+10 -1.811e+10 4.616e+10 -1.873e+10 4.483e+10 -1.925e+10 4.338e+10 -1.965e+10 4.184e+10 -1.994e+10 4.021e+10 -2.011e+10 3.850e+10 -2.017e+10 3.673e+10 -2.011e+10 3.492e+10 -1.994e+10 3.307e+10 -1.966e+10 3.120e+10 -1.927e+10 2.932e+10 -1.878e+10 2.744e+10 -1.820e+10 2.558e+10 -1.754e+10 2.375e+10 -1.681e+10 2.195e+10 -1.602e+10 2.020e+10 -1.518e+10 1.851e+10 -1.430e+10 1.687e+10 -1.340e+10 1.530e+10 -1.248e+10 1.381e+10 -1.155e+10 1.239e+10 -1.064e+10 1.104e+10 -9.737e+09 9.779e+09 -8.858e+09 8.598e+09 -8.011e+09 7.499e+09 -7.200e+09 6.482e+09 -6.430e+09 5.547e+09 -5.705e+09 4.694e+09 -5.027e+09 3.919e+09 -4.398e+09 3.223e+09 -3.819e+09 2.603e+09 -3.290e+09 2.056e+09 -2.811e+09 1.580e+09 -2.381e+09 1.172e+09 -1.998e+09 8.271e+08 -1.662e+09 5.414e+08 -1.371e+09 3.096e+08 -1.122e+09 1.252e+08 -9.137e+08 -1.912e+07 -7.433e+08 -1.317e+08 -6.065e+08 -2.222e+08 -4.976e+08 -3.001e+08 -4.095e+08 -3.742e+08 -3.337e+08 -4.508e+08 -2.621e+08 -5.335e+08 -1.878e+08 -6.225e+08 -1.057e+08 -7.163e+08 -1.238e+07 -8.121e+08 9.400e+07 -9.067e+08 2.145e+08 -9.971e+08 3.497e+08 -1.081e+09 4.994e+08 -1.156e+09 6.638e+08 -1.220e+09 8.437e+08 -1.273e+09 1.039e+09 -1.314e+09 1.250e+09 -1.341e+09 1.478e+09 -1.356e+09 1.724e+09 -1.356e+09 1.990e+09 -1.342e+09 2.277e+09 -1.314e+09 2.587e+09 -1.270e+09 2.922e+09 -1.210e+09 3.284e+09 -1.133e+09 3.675e+09 -1.038e+09 4.098e+09 -9.252e+08 4.557e+09 -7.927e+08 5.052e+09 -6.400e+08 5.589e+09 -4.658e+08 6.171e+09 -2.689e+08 6.803e+09 -4.837e+07 7.488e+09 1.973e+08 8.233e+09 4.701e+08 9.041e+09 7.712e+08 9.919e+09 1.103e+09 1.087e+10 1.467e+09 1.191e+10 1.865e+09 1.303e+10 2.299e+09 1.424e+10 2.773e+09 1.555e+10 3.285e+09 1.696e+10 3.839e+09 1.846e+10 4.435e+09 2.007e+10 5.072e+09 2.177e+10 5.749e+09 2.357e+10 6.464e+09 2.545e+10 7.213e+09 2.742e+10 7.992e+09 2.946e+10 8.796e+09 3.155e+10 9.615e+09 3.369e+10 1.044e+10 3.584e+10 1.126e+10 3.801e+10 1.207e+10 4.015e+10 1.285e+10 4.225e+10 1.359e+10 4.430e+10 1.427e+10 4.625e+10 1.489e+10 4.810e+10 1.543e+10 4.983e+10 1.589e+10 5.140e+10 1.625e+10 5.281e+10 1.651e+10 5.405e+10 1.667e+10 5.510e+10 1.672e+10 5.594e+10 1.666e+10 5.659e+10 1.650e+10 5.702e+10 1.625e+10 5.725e+10 1.591e+10 5.727e+10 1.550e+10 5.709e+10 1.502e+10 5.672e+10 1.448e+10 5.616e+10 1.391e+10 5.543e+10 1.331e+10 5.452e+10 1.269e+10 5.346e+10 1.208e+10 5.226e+10 1.147e+10 5.092e+10 1.088e+10 4.945e+10 1.032e+10 4.787e+10 9.788e+09 4.619e+10 9.298e+09 4.442e+10 8.850e+09 4.258e+10 8.444e+09 4.066e+10 8.080e+09 3.869e+10 7.757e+09 3.667e+10 7.470e+09 3.463e+10 7.216e+09 3.256e+10 6.989e+09 3.049e+10 6.784e+09 2.843e+10 6.595e+09 2.639e+10 6.416e+09 2.439e+10 6.243e+09 2.243e+10 6.070e+09 2.053e+10 5.894e+09 1.870e+10 5.712e+09 1.695e+10 5.521e+09 1.530e+10 5.322e+09 1.374e+10 5.114e+09 1.228e+10 4.898e+09 1.093e+10 4.676e+09 9.700e+09 4.450e+09 8.578e+09 4.224e+09 7.566e+09 4.000e+09 6.665e+09 3.783e+09 5.868e+09 3.573e+09 5.172e+09 3.375e+09 4.570e+09 3.192e+09 4.056e+09 3.024e+09 3.621e+09 2.873e+09 3.261e+09 2.740e+09 2.967e+09 2.625e+09 2.733e+09 2.528e+09 2.555e+09 2.449e+09 2.425e+09 2.386e+09 2.341e+09 2.338e+09 2.300e+09 2.303e+09 2.297e+09 2.280e+09 2.333e+09 2.266e+09 2.405e+09 2.260e+09 2.513e+09 2.258e+09 2.656e+09 2.257e+09 2.835e+09 2.255e+09 3.050e+09 2.247e+09 3.302e+09 2.230e+09 3.591e+09 2.199e+09 3.918e+09 2.151e+09 4.285e+09 2.079e+09 4.693e+09 1.980e+09 5.144e+09 1.847e+09 5.640e+09 1.676e+09 6.183e+09 1.459e+09 6.776e+09 1.193e+09 7.422e+09 8.699e+08 8.121e+09 4.850e+08 8.876e+09 3.174e+07 9.687e+09 -4.949e+08 1.055e+10 -1.098e+09 1.146e+10 -1.782e+09 1.242e+10 -2.547e+09 1.341e+10 -3.390e+09 1.442e+10 -4.307e+09 1.544e+10 -5.288e+09 1.644e+10 -6.323e+09 1.742e+10 -7.395e+09 1.833e+10 -8.486e+09 1.917e+10 -9.573e+09 1.990e+10 -1.063e+10 2.050e+10 -1.164e+10 2.094e+10 -1.258e+10 2.119e+10 -1.340e+10 2.124e+10 -1.411e+10 2.106e+10 -1.466e+10 2.065e+10 -1.505e+10 1.999e+10 -1.526e+10 1.908e+10 -1.529e+10 1.795e+10 -1.512e+10 1.659e+10 -1.477e+10 1.504e+10 -1.424e+10 1.333e+10 -1.354e+10 1.151e+10 -1.270e+10 9.623e+09 -1.174e+10 7.729e+09 -1.070e+10 5.887e+09 -9.608e+09 4.154e+09 -8.517e+09 2.572e+09 -7.480e+09 1.159e+09 -6.562e+09 -1.128e+08 -5.829e+09 -1.342e+09 -5.336e+09 -2.694e+09 -5.099e+09 -4.373e+09 -5.081e+09 -6.574e+09 -5.199e+09 -9.440e+09 -5.356e+09 -1.306e+10 -5.468e+09 -1.750e+10 -5.470e+09 -2.277e+10 -5.319e+09 -2.887e+10 -4.989e+09 -3.578e+10 -4.468e+09 -4.344e+10 -3.755e+09 -5.180e+10 -2.865e+09 -6.077e+10 -1.821e+09 -7.025e+10 -6.589e+08 -8.013e+10 5.713e+08 -9.026e+10 1.811e+09 -1.005e+11 2.985e+09 -1.107e+11 4.010e+09 -1.208e+11 4.792e+09 -1.304e+11 5.227e+09 -1.396e+11 5.203e+09 -1.481e+11 4.607e+09 -1.557e+11 3.321e+09 -1.624e+11 1.233e+09 -1.681e+11 -1.770e+09 -1.726e+11 -5.788e+09 -1.759e+11 -1.091e+10 -1.780e+11 -1.724e+10 -1.789e+11 -2.486e+10 -1.788e+11 -3.386e+10 -1.779e+11 -4.439e+10 -1.763e+11 -5.664e+10 -1.744e+11 -7.092e+10 -1.724e+11 -8.772e+10 -1.706e+11 -1.077e+11 -1.694e+11 -1.319e+11 -1.686e+11 -1.617e+11 -1.685e+11 -1.986e+11 -1.685e+11 -2.448e+11 -1.681e+11 -3.027e+11 -1.667e+11 -3.748e+11 -1.633e+11 -4.642e+11 -1.567e+11 -5.743e+11 -1.459e+11 -7.085e+11 -1.297e+11 -8.709e+11 -1.066e+11 -1.066e+12 -7.540e+10 -1.297e+12 -3.491e+10 -1.570e+12 1.619e+10 -1.890e+12 7.897e+10 -2.263e+12 1.545e+11 -2.693e+12 2.438e+11 -3.189e+12 3.475e+11 -3.756e+12 4.661e+11 -4.402e+12 6.003e+11 -5.133e+12 7.499e+11 -5.958e+12 9.146e+11 -6.884e+12 1.094e+12 -7.921e+12 1.288e+12 -9.074e+12 1.493e+12 -1.035e+13 1.710e+12 -1.177e+13 1.935e+12 -1.333e+13 2.167e+12 -1.504e+13 2.401e+12 -1.692e+13 2.635e+12 -1.897e+13 2.864e+12 -2.119e+13 3.083e+12 -2.360e+13 3.288e+12 -2.621e+13 3.473e+12 -2.902e+13 3.632e+12 -3.204e+13 3.759e+12 -3.527e+13 3.845e+12 -3.872e+13 3.884e+12 -4.241e+13 3.868e+12 -4.631e+13 3.789e+12 -5.046e+13 3.638e+12 -5.484e+13 3.405e+12 -5.945e+13 3.083e+12 -6.430e+13 2.660e+12 -6.939e+13 2.128e+12 -7.470e+13 1.477e+12 -8.025e+13 6.946e+11 -8.603e+13 -9.919e+11 -9.195e+13 -8.301e+11 -9.863e+13 -2.030e+12 -1.051e+14 -3.399e+12 -1.117e+14 -4.949e+12 -1.185e+14 -6.692e+12 -1.255e+14 -8.635e+12 -1.327e+14 -1.079e+13 -1.400e+14 -1.317e+13 -1.475e+14 -1.578e+13 -1.551e+14 -1.864e+13 -1.628e+14 -2.175e+13 -1.706e+14 -2.512e+13 -1.785e+14 -2.876e+13 -1.865e+14 -3.268e+13 -1.945e+14 -3.689e+13 -2.026e+14 -4.139e+13 -2.106e+14 -4.619e+13 -2.187e+14 -5.129e+13 -2.267e+14 -5.671e+13 -2.347e+14 -6.244e+13 -2.426e+14 -6.847e+13 -2.504e+14 -7.482e+13 -2.581e+14 -8.149e+13 -2.657e+14 -8.847e+13 -2.730e+14 -9.575e+13 -2.803e+14 -1.033e+14 -2.873e+14 -1.112e+14 -2.940e+14 -1.194e+14 -3.005e+14 -1.278e+14 -3.068e+14 -1.365e+14 -3.127e+14 -1.454e+14 -3.183e+14 -1.545e+14 -3.235e+14 -1.639e+14 -3.284e+14 -1.735e+14 -3.329e+14 -1.832e+14 -3.370e+14 -1.930e+14 -3.406e+14 -2.030e+14 -3.439e+14 -2.131e+14 -3.467e+14 -2.233e+14 -3.490e+14 -2.335e+14 -3.508e+14 -2.438e+14 -3.522e+14 -2.541e+14 -3.532e+14 -2.643e+14 -3.536e+14 -2.745e+14 -3.536e+14 -2.847e+14 -3.531e+14 -2.947e+14 -3.521e+14 -3.045e+14 -3.506e+14 -3.143e+14 -3.486e+14 -3.238e+14 -3.462e+14 -3.331e+14 -3.434e+14 -3.422e+14 -3.400e+14 -3.510e+14 -3.363e+14 -3.596e+14 -3.321e+14 -3.678e+14 -3.275e+14 -3.758e+14 -3.226e+14 -3.834e+14 -3.172e+14 -3.906e+14 -3.116e+14 -3.974e+14 -3.055e+14 -4.039e+14 -2.992e+14 -4.099e+14 -2.925e+14 -4.155e+14 -2.856e+14 -4.206e+14 -2.784e+14 -4.253e+14 -2.709e+14 -4.295e+14 -2.632e+14 -4.332e+14 -2.553e+14 -4.363e+14 -2.473e+14 -4.390e+14 -2.391e+14 -4.411e+14 -2.307e+14 -4.427e+14 -2.222e+14 -4.437e+14 -2.136e+14 -4.442e+14 -2.049e+14 -4.440e+14 -1.962e+14 -4.434e+14 -1.875e+14 -4.421e+14 -1.787e+14 -4.402e+14 -1.700e+14 -4.378e+14 -1.613e+14 -4.348e+14 -1.527e+14 -4.312e+14 -1.441e+14 -4.271e+14 -1.357e+14 -4.224e+14 -1.274e+14 -4.172e+14 -1.193e+14 -4.115e+14 -1.114e+14 -4.053e+14 -1.036e+14 -3.986e+14 -9.609e+13 -3.914e+14 -8.878e+13 -3.838e+14 -8.169e+13 -3.757e+14 -7.485e+13 -3.673e+14 -6.827e+13 -3.585e+14 -6.195e+13 -3.494e+14 -5.592e+13 -3.400e+14 -5.017e+13 -3.303e+14 -4.471e+13 -3.203e+14 -3.956e+13 -3.102e+14 -3.470e+13 -2.999e+14 -3.014e+13 -2.895e+14 -2.588e+13 -2.790e+14 -2.192e+13 -2.684e+14 -1.826e+13 -2.578e+14 -1.488e+13 -2.472e+14 -1.179e+13 -2.367e+14 -8.975e+12 -2.262e+14 -6.427e+12 -2.157e+14 -4.137e+12 -2.054e+14 -2.094e+12 -1.953e+14 -2.899e+11 -1.853e+14 1.290e+12 -1.755e+14 2.656e+12 -1.659e+14 3.821e+12 -1.565e+14 4.798e+12 -1.474e+14 5.599e+12 -1.385e+14 6.238e+12 -1.299e+14 6.727e+12 -1.216e+14 7.080e+12 -1.136e+14 7.308e+12 -1.058e+14 7.425e+12 -9.842e+13 7.443e+12 -9.131e+13 7.373e+12 -8.452e+13 7.227e+12 -7.804e+13 7.016e+12 -7.189e+13 6.754e+12 -6.604e+13 6.454e+12 -6.051e+13 6.120e+12 -5.529e+13 5.757e+12 -5.038e+13 5.372e+12 -4.577e+13 4.973e+12 -4.147e+13 4.568e+12 -3.745e+13 4.162e+12 -3.372e+13 3.760e+12 -3.026e+13 3.368e+12 -2.706e+13 2.989e+12 -2.411e+13 2.626e+12 -2.141e+13 2.284e+12 -1.894e+13 1.963e+12 -1.669e+13 1.665e+12 -1.465e+13 1.391e+12 -1.281e+13 1.142e+12 -1.115e+13 9.181e+11 -9.659e+12 7.185e+11 -8.331e+12 5.427e+11 -7.150e+12 3.899e+11 -6.107e+12 2.589e+11 -5.189e+12 1.481e+11 -4.386e+12 5.614e+10 -3.686e+12 -1.858e+10 -3.080e+12 -7.784e+10 -2.559e+12 -1.233e+11 -2.113e+12 -1.567e+11 -1.734e+12 -1.796e+11 -1.414e+12 -1.938e+11 -1.146e+12 -2.007e+11 -9.229e+11 -2.017e+11 -7.387e+11 -1.982e+11 -5.880e+11 -1.913e+11 -4.655e+11 -1.820e+11 -3.668e+11 -1.713e+11 -2.879e+11 -1.598e+11 -2.253e+11 -1.482e+11 -1.759e+11 -1.368e+11 -1.371e+11 -1.260e+11 -1.067e+11 -1.158e+11 -8.297e+10 -1.061e+11 -6.443e+10 -9.705e+10 -4.994e+10 -8.835e+10 -3.867e+10 -7.991e+10 -2.998e+10 -7.160e+10 -2.336e+10 -6.336e+10 -1.842e+10 -5.519e+10 -1.484e+10 -4.712e+10 -1.235e+10 -3.926e+10 -1.068e+10 -3.177e+10 -9.620e+09 -2.482e+10 -8.982e+09 -1.860e+10 -8.661e+09 -1.330e+10 -8.681e+09 -9.022e+09 -9.257e+09 -5.668e+09 -1.076e+10 -2.852e+09 -1.356e+10 9.000e+07 -1.790e+10 3.862e+09 -2.384e+10 8.980e+09 -3.139e+10 1.573e+10 -4.056e+10 2.424e+10 -5.131e+10 3.452e+10 -6.355e+10 4.648e+10 -7.723e+10 6.003e+10 -9.219e+10 7.496e+10 -1.083e+11 9.106e+10 -1.254e+11 1.081e+11 -1.432e+11 1.258e+11 -1.615e+11 1.438e+11 -1.801e+11 1.620e+11 -1.988e+11 1.799e+11 -2.172e+11 1.974e+11 -2.351e+11 2.141e+11 -2.523e+11 2.298e+11 -2.686e+11 2.442e+11 -2.837e+11 2.573e+11 -2.974e+11 2.688e+11 -3.096e+11 2.786e+11 -3.202e+11 2.867e+11 -3.290e+11 2.929e+11 -3.359e+11 2.972e+11 -3.409e+11 2.996e+11 -3.440e+11 3.002e+11 -3.452e+11 2.991e+11 -3.445e+11 2.963e+11 -3.420e+11 2.920e+11 -3.377e+11 2.862e+11 -3.317e+11 2.790e+11 -3.242e+11 2.707e+11 -3.153e+11 2.613e+11 -3.051e+11 2.511e+11 -2.937e+11 2.400e+11 -2.814e+11 2.283e+11 -2.683e+11 2.162e+11 -2.545e+11 2.037e+11 -2.403e+11 1.910e+11 -2.256e+11 1.781e+11 -2.108e+11 1.653e+11 -1.959e+11 1.526e+11 -1.811e+11 1.401e+11 -1.665e+11 1.279e+11 -1.522e+11 1.161e+11 -1.383e+11 1.048e+11 -1.249e+11 9.395e+10 -1.121e+11 8.370e+10 -9.990e+10 7.407e+10 -8.842e+10 6.508e+10 -7.770e+10 5.678e+10 -6.774e+10 4.916e+10 -5.857e+10 4.223e+10 -5.021e+10 3.599e+10 -4.265e+10 3.044e+10 -3.586e+10 2.552e+10 -2.984e+10 2.125e+10 -2.456e+10 1.756e+10 -1.997e+10 1.441e+10 -1.603e+10 1.176e+10 -1.269e+10 9.562e+09 -9.902e+09 7.758e+09 -7.612e+09 6.305e+09 -5.765e+09 5.155e+09 -4.302e+09 4.265e+09 -3.169e+09 3.599e+09 -2.310e+09 3.126e+09 -1.670e+09 2.824e+09 -1.197e+09 2.678e+09 -8.450e+08 2.678e+09 -5.734e+08 2.816e+09 -3.565e+08 3.089e+09 -1.803e+08 3.495e+09 -4.205e+07 4.036e+09 5.239e+07 4.718e+09 9.183e+07 5.547e+09 6.124e+07 6.533e+09 -5.697e+07 7.685e+09 -2.821e+08 9.011e+09 -6.348e+08 1.052e+10 -1.136e+09 1.222e+10 -1.808e+09 1.410e+10 -2.670e+09 1.618e+10 -3.744e+09 1.844e+10 -5.046e+09 2.088e+10 -6.594e+09 2.348e+10 -8.399e+09 2.623e+10 -1.047e+10 2.911e+10 -1.281e+10 3.210e+10 -1.543e+10 3.516e+10 -1.832e+10 3.828e+10 -2.146e+10 4.141e+10 -2.486e+10 4.453e+10 -2.849e+10 4.759e+10 -3.233e+10 5.058e+10 -3.636e+10 5.345e+10 -4.055e+10 5.616e+10 -4.486e+10 5.869e+10 -4.928e+10 6.100e+10 -5.376e+10 6.306e+10 -5.827e+10 6.484e+10 -6.278e+10 6.633e+10 -6.725e+10 6.749e+10 -7.164e+10 6.832e+10 -7.593e+10 6.879e+10 -8.009e+10 6.889e+10 -8.409e+10 6.861e+10 -8.790e+10 6.794e+10 -9.151e+10 6.688e+10 -9.488e+10 6.543e+10 -9.802e+10 6.359e+10 -1.009e+11 6.139e+10 -1.035e+11 5.883e+10 -1.058e+11 5.592e+10 -1.079e+11 5.270e+10 -1.097e+11 4.918e+10 -1.112e+11 4.537e+10 -1.124e+11 4.132e+10 -1.133e+11 3.705e+10 -1.139e+11 3.258e+10 -1.143e+11 2.794e+10 -1.145e+11 2.316e+10 -1.143e+11 1.827e+10 0.005 -52.677 -51.731 -50.784 -49.838 -48.891 -47.945 -47.005 -46.156 -45.392 -44.706 -44.093 -43.549 -43.071 -42.656 -42.302 -42.007 -41.769 -41.588 -41.463 -41.394 -41.381 -41.425 -41.525 -41.684 -41.903 -42.184 -42.530 -42.944 -43.430 -43.993 -44.638 -45.374 -46.208 -47.152 -48.221 -49.431 -50.808 -52.382 -54.199 -56.320 -58.840 -61.900 -65.688 -70.122 -72.794 -71.420 -69.489 -68.218 -67.257 -66.021 -64.142 -61.765 -59.272 -56.910 -54.766 -52.851 -51.147 -49.631 -48.280 -47.076 -46.001 -45.044 -44.192 -43.438 -42.774 -42.194 -41.694 -41.270 -40.919 -40.638 -40.427 -40.283 -40.206 -40.196 -40.254 -40.381 -40.577 -40.846 -41.188 -41.607 -42.108 -42.693 -43.368 -44.140 -45.012 -45.989 -47.074 -48.266 -49.557 -50.925 -52.326 -53.688 -54.912 -55.890 -56.540 -56.810 -56.657 -56.033 -54.932 -53.438 -51.707 -49.892 -48.100 -46.392 -44.796 -43.319 -41.962 -40.719 -39.584 -38.550 -37.611 -36.761 -35.996 -35.312 -34.705 -34.172 -33.713 -33.324 -33.007 -32.759 -32.583 -32.479 -32.450 -32.499 -32.628 -32.842 -33.148 -33.553 -34.068 -34.705 -35.480 -36.417 -37.542 -38.893 -40.516 -42.459 -44.716 -47.036 -48.608 -48.600 -47.407 -46.081 -45.158 -44.797 -45.107 -46.314 -48.960 -53.268 -51.383 -45.200 -40.025 -36.191 -33.115 -30.521 -28.264 -26.259 -24.451 -22.802 -21.286 -19.884 -18.579 -17.360 -16.220 -15.147 -14.137 -13.183 -12.282 -11.429 -10.622 -9.856 -9.131 -8.443 -7.790 -7.172 -6.585 -6.030 -5.504 -5.007 -4.538 -4.095 -3.678 -3.286 -2.919 -2.575 -2.255 -1.957 -1.682 -1.429 -1.197 -0.986 -0.797 -0.628 -0.480 -0.351 -0.243 -0.155 -0.087 -0.038 -0.009 0.000 -0.010 -0.038 -0.085 -0.152 -0.239 -0.345 -0.472 -0.619 -0.786 -0.974 -1.183 -1.413 -1.665 -1.938 -2.234 -2.552 -2.894 -3.259 -3.649 -4.064 -4.504 -4.971 -5.466 -5.988 -6.541 -7.124 -7.739 -8.387 -9.071 -9.792 -10.552 -11.354 -12.200 -13.094 -14.038 -15.039 -16.100 -17.227 -18.428 -19.711 -21.088 -22.572 -24.180 -25.932 -27.860 -30.000 -32.407 -35.150 -38.297 -41.784 -44.941 -46.343 -45.746 -44.685 -44.013 -43.851 -44.161 -44.869 -45.826 -46.667 -46.786 -45.830 -44.134 -42.262 -40.524 -39.012 -37.725 -36.639 -35.730 -34.974 -34.353 -33.852 -33.460 -33.166 -32.965 -32.849 -32.814 -32.857 -32.975 -33.166 -33.431 -33.768 -34.176 -34.657 -35.211 -35.840 -36.547 -37.334 -38.203 -39.159 -40.204 -41.341 -42.572 -43.897 -45.311 -46.806 -48.364 -49.954 -51.533 -53.032 -54.352 -55.340 -55.789 -55.536 -54.598 -53.192 -51.575 -49.931 -48.358 -46.895 -45.556 -44.341 -43.244 -42.257 -41.372 -40.583 -39.882 -39.264 -38.724 -38.258 -37.862 -37.532 -37.265 -37.059 -36.913 -36.825 -36.794 -36.819 -36.900 -37.036 -37.229 -37.478 -37.785 -38.151 -38.578 -39.067 -39.623 -40.247 -40.945 -41.720 -42.580 -43.532 -44.585 -45.751 -47.043 -48.479 -50.085 -51.890 -53.939 -56.292 -59.042 -62.335 -66.432 -71.865 -79.807 -84.951 -80.679 -77.201 -73.290 -69.122 -65.397 -62.248 -59.600 -57.355 -55.433 -53.773 -52.331 -51.072 -49.970 -49.005 -48.162 -47.428 -46.792 -46.247 -45.786 -45.403 -45.095 -44.857 -44.687 -44.582 -44.541 -44.562 -44.646 -44.790 -44.997 -45.266 -45.598 -45.995 -46.459 -46.993 -47.599 -48.283 -49.049 -49.904 -50.854 -51.911 -52.975 -54.039 -55.104 -56.168 -57.232 0 1 1.0 4476553695.58 S4 VH 30.06 34.35 0.05 -4.036e+10 2.478e+10 -4.139e+10 2.377e+10 -4.223e+10 2.272e+10 -4.287e+10 2.164e+10 -4.331e+10 2.052e+10 -4.355e+10 1.938e+10 -4.359e+10 1.823e+10 -4.344e+10 1.707e+10 -4.311e+10 1.593e+10 -4.260e+10 1.479e+10 -4.192e+10 1.368e+10 -4.109e+10 1.259e+10 -4.011e+10 1.153e+10 -3.901e+10 1.051e+10 -3.779e+10 9.530e+09 -3.647e+10 8.595e+09 -3.506e+10 7.704e+09 -3.358e+10 6.861e+09 -3.204e+10 6.068e+09 -3.045e+10 5.322e+09 -2.883e+10 4.627e+09 -2.719e+10 3.982e+09 -2.554e+10 3.385e+09 -2.389e+10 2.837e+09 -2.224e+10 2.335e+09 -2.062e+10 1.879e+09 -1.903e+10 1.468e+09 -1.747e+10 1.099e+09 -1.595e+10 7.723e+08 -1.448e+10 4.855e+08 -1.307e+10 2.369e+08 -1.172e+10 2.467e+07 -1.043e+10 -1.530e+08 -9.219e+09 -2.981e+08 -8.080e+09 -4.130e+08 -7.017e+09 -4.998e+08 -6.034e+09 -5.609e+08 -5.132e+09 -5.987e+08 -4.312e+09 -6.160e+08 -3.573e+09 -6.151e+08 -2.915e+09 -5.989e+08 -2.336e+09 -5.699e+08 -1.834e+09 -5.308e+08 -1.405e+09 -4.843e+08 -1.045e+09 -4.327e+08 -7.508e+08 -3.787e+08 -5.159e+08 -3.248e+08 -3.346e+08 -2.735e+08 -2.004e+08 -2.277e+08 -1.050e+08 -1.904e+08 -3.794e+07 -1.646e+08 1.319e+07 -1.521e+08 6.115e+07 -1.513e+08 1.151e+08 -1.582e+08 1.787e+08 -1.678e+08 2.521e+08 -1.766e+08 3.336e+08 -1.823e+08 4.209e+08 -1.835e+08 5.120e+08 -1.795e+08 6.052e+08 -1.698e+08 6.991e+08 -1.543e+08 7.931e+08 -1.326e+08 8.870e+08 -1.045e+08 9.807e+08 -6.965e+07 1.075e+09 -2.770e+07 1.170e+09 2.203e+07 1.268e+09 8.022e+07 1.371e+09 1.479e+08 1.479e+09 2.268e+08 1.595e+09 3.180e+08 1.722e+09 4.236e+08 1.861e+09 5.462e+08 2.015e+09 6.880e+08 2.186e+09 8.522e+08 2.377e+09 1.042e+09 2.591e+09 1.262e+09 2.830e+09 1.515e+09 3.098e+09 1.805e+09 3.395e+09 2.137e+09 3.726e+09 2.515e+09 4.093e+09 2.944e+09 4.498e+09 3.426e+09 4.944e+09 3.967e+09 5.433e+09 4.571e+09 5.967e+09 5.239e+09 6.550e+09 5.975e+09 7.183e+09 6.783e+09 7.868e+09 7.662e+09 8.608e+09 8.615e+09 9.406e+09 9.644e+09 1.026e+10 1.075e+10 1.118e+10 1.192e+10 1.216e+10 1.318e+10 1.320e+10 1.450e+10 1.431e+10 1.589e+10 1.549e+10 1.736e+10 1.673e+10 1.889e+10 1.805e+10 2.048e+10 1.943e+10 2.213e+10 2.088e+10 2.384e+10 2.240e+10 2.560e+10 2.398e+10 2.741e+10 2.562e+10 2.926e+10 2.732e+10 3.115e+10 2.907e+10 3.306e+10 3.086e+10 3.500e+10 3.269e+10 3.695e+10 3.454e+10 3.890e+10 3.640e+10 4.084e+10 3.825e+10 4.276e+10 4.009e+10 4.465e+10 4.189e+10 4.649e+10 4.364e+10 4.826e+10 4.532e+10 4.996e+10 4.691e+10 5.157e+10 4.839e+10 5.307e+10 4.975e+10 5.445e+10 5.095e+10 5.568e+10 5.199e+10 5.675e+10 5.286e+10 5.766e+10 5.352e+10 5.838e+10 5.398e+10 5.890e+10 5.422e+10 5.922e+10 5.423e+10 5.932e+10 5.401e+10 5.920e+10 5.357e+10 5.887e+10 5.289e+10 5.831e+10 5.199e+10 5.753e+10 5.087e+10 5.654e+10 4.955e+10 5.535e+10 4.804e+10 5.397e+10 4.635e+10 5.241e+10 4.451e+10 5.070e+10 4.253e+10 4.884e+10 4.044e+10 4.687e+10 3.826e+10 4.479e+10 3.601e+10 4.264e+10 3.371e+10 4.043e+10 3.139e+10 3.819e+10 2.906e+10 3.593e+10 2.675e+10 3.368e+10 2.448e+10 3.145e+10 2.227e+10 2.927e+10 2.012e+10 2.714e+10 1.806e+10 2.507e+10 1.609e+10 2.309e+10 1.422e+10 2.118e+10 1.247e+10 1.938e+10 1.084e+10 1.767e+10 9.326e+09 1.606e+10 7.941e+09 1.456e+10 6.683e+09 1.317e+10 5.549e+09 1.188e+10 4.536e+09 1.069e+10 3.642e+09 9.604e+09 2.859e+09 8.613e+09 2.180e+09 7.712e+09 1.600e+09 6.898e+09 1.108e+09 6.162e+09 6.978e+08 5.499e+09 3.614e+08 4.902e+09 9.099e+07 4.362e+09 -1.199e+08 3.874e+09 -2.772e+08 3.431e+09 -3.862e+08 3.026e+09 -4.519e+08 2.654e+09 -4.785e+08 2.311e+09 -4.708e+08 1.993e+09 -4.335e+08 1.698e+09 -3.723e+08 1.426e+09 -2.936e+08 1.177e+09 -2.045e+08 9.518e+08 -1.125e+08 7.529e+08 -2.427e+07 5.837e+08 5.689e+07 4.484e+08 1.354e+08 3.509e+08 2.283e+08 2.901e+08 3.628e+08 2.560e+08 5.670e+08 2.310e+08 8.626e+08 1.982e+08 1.264e+09 1.460e+08 1.781e+09 6.795e+07 2.421e+09 -3.957e+07 3.186e+09 -1.781e+08 4.078e+09 -3.481e+08 5.092e+09 -5.497e+08 6.223e+09 -7.826e+08 7.456e+09 -1.046e+09 8.780e+09 -1.339e+09 1.017e+10 -1.660e+09 1.162e+10 -2.009e+09 1.309e+10 -2.385e+09 1.455e+10 -2.785e+09 1.598e+10 -3.207e+09 1.735e+10 -3.649e+09 1.863e+10 -4.108e+09 1.978e+10 -4.579e+09 2.079e+10 -5.058e+09 2.161e+10 -5.538e+09 2.223e+10 -6.011e+09 2.263e+10 -6.471e+09 2.278e+10 -6.908e+09 2.268e+10 -7.312e+09 2.232e+10 -7.673e+09 2.170e+10 -7.979e+09 2.083e+10 -8.220e+09 1.971e+10 -8.386e+09 1.837e+10 -8.467e+09 1.683e+10 -8.456e+09 1.513e+10 -8.347e+09 1.330e+10 -8.138e+09 1.140e+10 -7.831e+09 9.475e+09 -7.433e+09 7.585e+09 -6.956e+09 5.786e+09 -6.424e+09 4.127e+09 -5.868e+09 2.645e+09 -5.336e+09 1.345e+09 -4.891e+09 1.696e+08 -4.604e+09 -1.007e+09 -4.534e+09 -2.374e+09 -4.699e+09 -4.139e+09 -5.068e+09 -6.478e+09 -5.574e+09 -9.516e+09 -6.145e+09 -1.334e+10 -6.723e+09 -1.800e+10 -7.262e+09 -2.351e+10 -7.735e+09 -2.987e+10 -8.125e+09 -3.706e+10 -8.431e+09 -4.502e+10 -8.661e+09 -5.369e+10 -8.836e+09 -6.296e+10 -8.988e+09 -7.271e+10 -9.161e+09 -8.281e+10 -9.407e+09 -9.309e+10 -9.789e+09 -1.034e+11 -1.038e+10 -1.135e+11 -1.125e+10 -1.232e+11 -1.249e+10 -1.324e+11 -1.418e+10 -1.408e+11 -1.639e+10 -1.483e+11 -1.922e+10 -1.546e+11 -2.273e+10 -1.597e+11 -2.700e+10 -1.634e+11 -3.207e+10 -1.657e+11 -3.802e+10 -1.665e+11 -4.489e+10 -1.659e+11 -5.276e+10 -1.641e+11 -6.170e+10 -1.610e+11 -7.185e+10 -1.570e+11 -8.343e+10 -1.523e+11 -9.674e+10 -1.470e+11 -1.123e+11 -1.414e+11 -1.307e+11 -1.355e+11 -1.531e+11 -1.292e+11 -1.805e+11 -1.221e+11 -2.146e+11 -1.136e+11 -2.572e+11 -1.029e+11 -3.103e+11 -8.879e+10 -3.763e+11 -6.996e+10 -4.576e+11 -4.491e+10 -5.573e+11 -1.208e+10 -6.783e+11 3.024e+10 -8.240e+11 8.387e+10 -9.982e+11 1.505e+11 -1.205e+12 2.321e+11 -1.448e+12 3.304e+11 -1.732e+12 4.471e+11 -2.063e+12 5.841e+11 -2.445e+12 7.431e+11 -2.885e+12 9.255e+11 -3.388e+12 1.133e+12 -3.961e+12 1.366e+12 -4.611e+12 1.627e+12 -5.344e+12 1.916e+12 -6.167e+12 2.233e+12 -7.090e+12 2.579e+12 -8.118e+12 2.953e+12 -9.260e+12 3.356e+12 -1.052e+13 3.785e+12 -1.192e+13 4.240e+12 -1.345e+13 4.718e+12 -1.512e+13 5.217e+12 -1.695e+13 5.734e+12 -1.894e+13 6.266e+12 -2.109e+13 6.807e+12 -2.342e+13 7.353e+12 -2.593e+13 7.900e+12 -2.863e+13 8.441e+12 -3.152e+13 8.968e+12 -3.461e+13 9.477e+12 -3.790e+13 9.957e+12 -4.139e+13 1.040e+13 -4.509e+13 1.080e+13 -4.901e+13 1.115e+13 -5.314e+13 1.143e+13 -5.748e+13 1.164e+13 -6.204e+13 1.177e+13 -6.681e+13 1.180e+13 -7.179e+13 1.172e+13 -7.698e+13 1.194e+13 -8.257e+13 1.188e+13 -8.836e+13 1.147e+13 -9.420e+13 1.090e+13 -1.002e+14 1.017e+13 -1.065e+14 9.264e+12 -1.129e+14 8.171e+12 -1.195e+14 6.877e+12 -1.262e+14 5.370e+12 -1.331e+14 3.641e+12 -1.401e+14 1.677e+12 -1.473e+14 -5.346e+11 -1.546e+14 -3.000e+12 -1.620e+14 -5.732e+12 -1.694e+14 -8.742e+12 -1.769e+14 -1.203e+13 -1.845e+14 -1.561e+13 -1.921e+14 -1.950e+13 -1.997e+14 -2.368e+13 -2.074e+14 -2.818e+13 -2.149e+14 -3.299e+13 -2.225e+14 -3.811e+13 -2.299e+14 -4.355e+13 -2.372e+14 -4.930e+13 -2.445e+14 -5.537e+13 -2.515e+14 -6.175e+13 -2.584e+14 -6.844e+13 -2.651e+14 -7.542e+13 -2.716e+14 -8.269e+13 -2.779e+14 -9.025e+13 -2.839e+14 -9.808e+13 -2.896e+14 -1.062e+14 -2.949e+14 -1.145e+14 -3.000e+14 -1.231e+14 -3.047e+14 -1.318e+14 -3.091e+14 -1.408e+14 -3.130e+14 -1.500e+14 -3.166e+14 -1.593e+14 -3.198e+14 -1.687e+14 -3.225e+14 -1.783e+14 -3.248e+14 -1.879e+14 -3.267e+14 -1.977e+14 -3.281e+14 -2.075e+14 -3.292e+14 -2.173e+14 -3.298e+14 -2.272e+14 -3.299e+14 -2.370e+14 -3.295e+14 -2.467e+14 -3.287e+14 -2.564e+14 -3.275e+14 -2.660e+14 -3.258e+14 -2.754e+14 -3.236e+14 -2.847e+14 -3.210e+14 -2.938e+14 -3.179e+14 -3.027e+14 -3.145e+14 -3.114e+14 -3.106e+14 -3.198e+14 -3.063e+14 -3.279e+14 -3.017e+14 -3.357e+14 -2.966e+14 -3.432e+14 -2.912e+14 -3.503e+14 -2.855e+14 -3.571e+14 -2.794e+14 -3.634e+14 -2.730e+14 -3.694e+14 -2.663e+14 -3.749e+14 -2.594e+14 -3.800e+14 -2.522e+14 -3.846e+14 -2.447e+14 -3.887e+14 -2.371e+14 -3.923e+14 -2.292e+14 -3.954e+14 -2.212e+14 -3.979e+14 -2.130e+14 -4.000e+14 -2.047e+14 -4.015e+14 -1.963e+14 -4.024e+14 -1.878e+14 -4.028e+14 -1.793e+14 -4.027e+14 -1.707e+14 -4.019e+14 -1.621e+14 -4.007e+14 -1.535e+14 -3.988e+14 -1.450e+14 -3.964e+14 -1.365e+14 -3.935e+14 -1.282e+14 -3.901e+14 -1.199e+14 -3.861e+14 -1.118e+14 -3.817e+14 -1.039e+14 -3.768e+14 -9.612e+13 -3.714e+14 -8.856e+13 -3.655e+14 -8.122e+13 -3.592e+14 -7.409e+13 -3.525e+14 -6.720e+13 -3.454e+14 -6.056e+13 -3.379e+14 -5.418e+13 -3.301e+14 -4.808e+13 -3.220e+14 -4.227e+13 -3.136e+14 -3.675e+13 -3.049e+14 -3.152e+13 -2.959e+14 -2.661e+13 -2.868e+14 -2.199e+13 -2.775e+14 -1.769e+13 -2.680e+14 -1.370e+13 -2.585e+14 -1.001e+13 -2.488e+14 -6.625e+12 -2.391e+14 -3.541e+12 -2.294e+14 -7.472e+11 -2.196e+14 1.762e+12 -2.100e+14 3.993e+12 -2.003e+14 5.960e+12 -1.908e+14 7.671e+12 -1.814e+14 9.138e+12 -1.721e+14 1.037e+13 -1.629e+14 1.139e+13 -1.540e+14 1.221e+13 -1.452e+14 1.283e+13 -1.367e+14 1.328e+13 -1.284e+14 1.356e+13 -1.204e+14 1.370e+13 -1.126e+14 1.370e+13 -1.051e+14 1.359e+13 -9.784e+13 1.337e+13 -9.090e+13 1.305e+13 -8.426e+13 1.266e+13 -7.792e+13 1.220e+13 -7.188e+13 1.168e+13 -6.614e+13 1.112e+13 -6.070e+13 1.053e+13 -5.556e+13 9.919e+12 -5.072e+13 9.290e+12 -4.618e+13 8.651e+12 -4.192e+13 8.009e+12 -3.795e+13 7.372e+12 -3.425e+13 6.745e+12 -3.081e+13 6.135e+12 -2.764e+13 5.544e+12 -2.470e+13 4.978e+12 -2.201e+13 4.440e+12 -1.954e+13 3.931e+12 -1.728e+13 3.454e+12 -1.523e+13 3.011e+12 -1.337e+13 2.601e+12 -1.169e+13 2.226e+12 -1.017e+13 1.884e+12 -8.818e+12 1.577e+12 -7.607e+12 1.301e+12 -6.532e+12 1.058e+12 -5.581e+12 8.437e+11 -4.743e+12 6.580e+11 -4.010e+12 4.986e+11 -3.372e+12 3.636e+11 -2.818e+12 2.507e+11 -2.342e+12 1.579e+11 -1.934e+12 8.316e+10 -1.587e+12 2.414e+10 -1.294e+12 -2.111e+10 -1.049e+12 -5.458e+10 -8.443e+11 -7.820e+10 -6.758e+11 -9.369e+10 -5.378e+11 -1.026e+11 -4.258e+11 -1.065e+11 -3.356e+11 -1.066e+11 -2.637e+11 -1.039e+11 -2.066e+11 -9.937e+10 -1.617e+11 -9.367e+10 -1.265e+11 -8.731e+10 -9.905e+10 -8.063e+10 -7.764e+10 -7.383e+10 -6.098e+10 -6.699e+10 -4.798e+10 -6.014e+10 -3.788e+10 -5.327e+10 -3.007e+10 -4.642e+10 -2.405e+10 -3.961e+10 -1.947e+10 -3.294e+10 -1.602e+10 -2.653e+10 -1.345e+10 -2.054e+10 -1.158e+10 -1.515e+10 -1.028e+10 -1.052e+10 -9.559e+09 -6.727e+09 -9.574e+09 -3.646e+09 -1.059e+10 -8.630e+08 -1.283e+10 2.288e+09 -1.643e+10 6.484e+09 -2.138e+10 1.222e+10 -2.770e+10 1.980e+10 -3.538e+10 2.936e+10 -4.439e+10 4.096e+10 -5.471e+10 5.459e+10 -6.629e+10 7.015e+10 -7.903e+10 8.751e+10 -9.286e+10 1.065e+11 -1.076e+11 1.269e+11 -1.232e+11 1.485e+11 -1.393e+11 1.711e+11 -1.559e+11 1.942e+11 -1.727e+11 2.177e+11 -1.895e+11 2.412e+11 -2.061e+11 2.644e+11 -2.223e+11 2.870e+11 -2.379e+11 3.087e+11 -2.527e+11 3.292e+11 -2.665e+11 3.482e+11 -2.791e+11 3.654e+11 -2.904e+11 3.808e+11 -3.003e+11 3.940e+11 -3.086e+11 4.050e+11 -3.152e+11 4.135e+11 -3.202e+11 4.196e+11 -3.234e+11 4.232e+11 -3.248e+11 4.242e+11 -3.245e+11 4.228e+11 -3.224e+11 4.190e+11 -3.186e+11 4.128e+11 -3.131e+11 4.044e+11 -3.062e+11 3.940e+11 -2.978e+11 3.817e+11 -2.881e+11 3.677e+11 -2.772e+11 3.523e+11 -2.653e+11 3.357e+11 -2.525e+11 3.181e+11 -2.391e+11 2.997e+11 -2.250e+11 2.808e+11 -2.107e+11 2.616e+11 -1.960e+11 2.423e+11 -1.813e+11 2.231e+11 -1.667e+11 2.043e+11 -1.524e+11 1.859e+11 -1.383e+11 1.681e+11 -1.247e+11 1.511e+11 -1.117e+11 1.350e+11 -9.931e+10 1.198e+11 -8.763e+10 1.056e+11 -7.672e+10 9.252e+10 -6.660e+10 8.049e+10 -5.731e+10 6.956e+10 -4.886e+10 5.971e+10 -4.124e+10 5.089e+10 -3.444e+10 4.310e+10 -2.843e+10 3.627e+10 -2.318e+10 3.033e+10 -1.865e+10 2.524e+10 -1.479e+10 2.091e+10 -1.154e+10 1.727e+10 -8.838e+09 1.425e+10 -6.632e+09 1.178e+10 -4.853e+09 9.792e+09 -3.443e+09 8.226e+09 -2.338e+09 7.029e+09 -1.474e+09 6.149e+09 -7.945e+08 5.547e+09 -2.445e+08 5.185e+09 2.206e+08 5.034e+09 6.335e+08 5.072e+09 1.016e+09 5.280e+09 1.381e+09 5.651e+09 1.730e+09 6.182e+09 2.059e+09 6.878e+09 2.364e+09 7.747e+09 2.633e+09 8.803e+09 2.855e+09 1.006e+10 3.017e+09 1.154e+10 3.102e+09 1.325e+10 3.092e+09 1.523e+10 2.969e+09 1.747e+10 2.711e+09 2.000e+10 2.296e+09 2.282e+10 1.701e+09 2.594e+10 9.015e+08 2.937e+10 -1.242e+08 3.309e+10 -1.400e+09 3.710e+10 -2.945e+09 4.138e+10 -4.778e+09 4.589e+10 -6.915e+09 5.062e+10 -9.369e+09 5.552e+10 -1.214e+10 6.055e+10 -1.525e+10 6.566e+10 -1.868e+10 7.080e+10 -2.242e+10 7.590e+10 -2.648e+10 8.092e+10 -3.083e+10 8.579e+10 -3.545e+10 9.045e+10 -4.032e+10 9.485e+10 -4.540e+10 9.892e+10 -5.067e+10 1.026e+11 -5.607e+10 1.059e+11 -6.159e+10 1.087e+11 -6.716e+10 1.109e+11 -7.274e+10 1.127e+11 -7.830e+10 1.139e+11 -8.379e+10 1.145e+11 -8.917e+10 1.145e+11 -9.439e+10 1.139e+11 -9.942e+10 1.128e+11 -1.042e+11 1.110e+11 -1.087e+11 1.087e+11 -1.130e+11 1.058e+11 -1.169e+11 1.024e+11 -1.205e+11 9.855e+10 -1.237e+11 9.424e+10 -1.265e+11 8.953e+10 -1.290e+11 8.446e+10 -1.310e+11 7.906e+10 -1.327e+11 7.339e+10 -1.340e+11 6.748e+10 -1.349e+11 6.138e+10 -1.355e+11 5.513e+10 -1.357e+11 4.877e+10 0.005 -54.840 -53.810 -52.779 -51.749 -50.719 -49.689 -48.666 -47.747 -46.923 -46.186 -45.531 -44.951 -44.444 -44.005 -43.632 -43.323 -43.076 -42.891 -42.766 -42.701 -42.697 -42.753 -42.872 -43.055 -43.302 -43.618 -44.006 -44.468 -45.011 -45.640 -46.362 -47.186 -48.123 -49.187 -50.396 -51.772 -53.343 -55.150 -57.246 -59.707 -62.642 -66.209 -70.609 -75.731 -78.978 -77.506 -74.055 -69.978 -65.978 -62.414 -59.331 -56.667 -54.350 -52.319 -50.524 -48.930 -47.505 -46.229 -45.084 -44.054 -43.129 -42.300 -41.559 -40.900 -40.318 -39.809 -39.369 -38.996 -38.688 -38.444 -38.261 -38.140 -38.080 -38.082 -38.145 -38.271 -38.460 -38.715 -39.038 -39.431 -39.897 -40.440 -41.063 -41.772 -42.570 -43.461 -44.448 -45.533 -46.713 -47.978 -49.310 -50.670 -52.000 -53.218 -54.221 -54.893 -55.118 -54.800 -53.920 -52.572 -50.929 -49.162 -47.391 -45.686 -44.080 -42.586 -41.207 -39.938 -38.774 -37.710 -36.739 -35.856 -35.057 -34.337 -33.692 -33.120 -32.619 -32.187 -31.823 -31.525 -31.295 -31.133 -31.039 -31.017 -31.068 -31.194 -31.400 -31.691 -32.074 -32.558 -33.151 -33.869 -34.729 -35.752 -36.970 -38.421 -40.160 -42.249 -44.739 -47.510 -49.847 -50.601 -49.851 -48.880 -48.533 -49.200 -51.421 -55.394 -53.241 -46.841 -41.486 -37.500 -34.295 -31.591 -29.238 -27.149 -25.267 -23.552 -21.978 -20.522 -19.169 -17.907 -16.727 -15.618 -14.575 -13.591 -12.661 -11.782 -10.950 -10.162 -9.416 -8.708 -8.037 -7.401 -6.798 -6.228 -5.688 -5.177 -4.695 -4.240 -3.811 -3.409 -3.031 -2.678 -2.348 -2.042 -1.759 -1.498 -1.258 -1.041 -0.844 -0.669 -0.515 -0.381 -0.267 -0.174 -0.100 -0.047 -0.014 0.000 -0.006 -0.030 -0.074 -0.137 -0.221 -0.325 -0.449 -0.593 -0.758 -0.943 -1.150 -1.378 -1.628 -1.900 -2.194 -2.511 -2.852 -3.216 -3.605 -4.019 -4.458 -4.925 -5.419 -5.942 -6.494 -7.077 -7.692 -8.341 -9.025 -9.747 -10.508 -11.311 -12.158 -13.053 -14.000 -15.002 -16.065 -17.195 -18.399 -19.684 -21.065 -22.552 -24.164 -25.921 -27.853 -29.998 -32.411 -35.160 -38.313 -41.805 -44.967 -46.373 -45.777 -44.711 -44.022 -43.819 -44.038 -44.561 -45.173 -45.504 -45.159 -44.062 -42.520 -40.889 -39.365 -38.016 -36.849 -35.854 -35.012 -34.308 -33.727 -33.256 -32.888 -32.612 -32.424 -32.318 -32.290 -32.336 -32.456 -32.647 -32.909 -33.241 -33.644 -34.118 -34.665 -35.287 -35.987 -36.769 -37.637 -38.598 -39.656 -40.821 -42.102 -43.508 -45.052 -46.745 -48.597 -50.613 -52.781 -55.054 -57.316 -59.335 -60.758 -61.245 -60.703 -59.358 -57.572 -55.644 -53.752 -51.982 -50.368 -48.915 -47.616 -46.461 -45.440 -44.540 -43.754 -43.071 -42.484 -41.991 -41.582 -41.255 -41.005 -40.830 -40.729 -40.699 -40.740 -40.851 -41.034 -41.289 -41.617 -42.021 -42.504 -43.070 -43.724 -44.471 -45.318 -46.275 -47.351 -48.557 -49.906 -51.408 -53.065 -54.858 -56.721 -58.502 -59.964 -60.916 -61.402 -61.695 -62.109 -62.920 -64.423 -67.129 -72.171 -74.252 -67.062 -61.826 -58.207 -55.447 -53.215 -51.351 -49.760 -48.384 -47.184 -46.130 -45.203 -44.387 -43.669 -43.040 -42.493 -42.021 -41.619 -41.283 -41.011 -40.798 -40.643 -40.545 -40.501 -40.512 -40.575 -40.692 -40.862 -41.085 -41.361 -41.693 -42.081 -42.527 -43.033 -43.602 -44.236 -44.940 -45.719 -46.577 -47.522 -48.562 -49.609 -50.656 -51.703 -52.750 -53.796 0 1 1.0 4476553695.58 S5 HH 34.25 38.05 0.05 1.247e+10 -1.461e+09 1.242e+10 -1.122e+09 1.232e+10 -7.786e+08 1.216e+10 -4.345e+08 1.196e+10 -9.384e+07 1.170e+10 2.385e+08 1.140e+10 5.588e+08 1.105e+10 8.630e+08 1.066e+10 1.147e+09 1.023e+10 1.407e+09 9.767e+09 1.640e+09 9.265e+09 1.843e+09 8.732e+09 2.013e+09 8.173e+09 2.147e+09 7.591e+09 2.245e+09 6.992e+09 2.303e+09 6.378e+09 2.323e+09 5.758e+09 2.303e+09 5.136e+09 2.245e+09 4.517e+09 2.151e+09 3.909e+09 2.023e+09 3.319e+09 1.863e+09 2.752e+09 1.677e+09 2.217e+09 1.470e+09 1.721e+09 1.249e+09 1.273e+09 1.019e+09 8.797e+08 7.908e+08 5.502e+08 5.732e+08 2.921e+08 3.770e+08 1.124e+08 2.152e+08 9.813e+06 1.034e+08 -5.922e+07 4.746e+07 -1.813e+08 -8.643e+05 -4.108e+08 -1.065e+08 -7.628e+08 -3.075e+08 -1.243e+09 -6.239e+08 -1.858e+09 -1.072e+09 -2.612e+09 -1.669e+09 -3.509e+09 -2.430e+09 -4.553e+09 -3.369e+09 -5.746e+09 -4.501e+09 -7.089e+09 -5.838e+09 -8.580e+09 -7.390e+09 -1.022e+10 -9.168e+09 -1.200e+10 -1.118e+10 -1.392e+10 -1.343e+10 -1.598e+10 -1.592e+10 -1.815e+10 -1.865e+10 -2.044e+10 -2.162e+10 -2.283e+10 -2.481e+10 -2.532e+10 -2.823e+10 -2.787e+10 -3.185e+10 -3.049e+10 -3.565e+10 -3.314e+10 -3.963e+10 -3.582e+10 -4.375e+10 -3.850e+10 -4.798e+10 -4.116e+10 -5.229e+10 -4.379e+10 -5.665e+10 -4.635e+10 -6.103e+10 -4.884e+10 -6.539e+10 -5.122e+10 -6.968e+10 -5.349e+10 -7.387e+10 -5.561e+10 -7.792e+10 -5.757e+10 -8.178e+10 -5.935e+10 -8.542e+10 -6.093e+10 -8.880e+10 -6.230e+10 -9.187e+10 -6.344e+10 -9.461e+10 -6.434e+10 -9.698e+10 -6.498e+10 -9.895e+10 -6.537e+10 -1.005e+11 -6.550e+10 -1.016e+11 -6.537e+10 -1.023e+11 -6.497e+10 -1.025e+11 -6.431e+10 -1.023e+11 -6.339e+10 -1.016e+11 -6.222e+10 -1.004e+11 -6.082e+10 -9.878e+10 -5.918e+10 -9.674e+10 -5.734e+10 -9.430e+10 -5.530e+10 -9.147e+10 -5.308e+10 -8.830e+10 -5.071e+10 -8.480e+10 -4.820e+10 -8.103e+10 -4.558e+10 -7.700e+10 -4.287e+10 -7.278e+10 -4.010e+10 -6.839e+10 -3.728e+10 -6.389e+10 -3.445e+10 -5.931e+10 -3.162e+10 -5.470e+10 -2.883e+10 -5.010e+10 -2.609e+10 -4.556e+10 -2.342e+10 -4.110e+10 -2.084e+10 -3.677e+10 -1.838e+10 -3.260e+10 -1.604e+10 -2.862e+10 -1.384e+10 -2.485e+10 -1.180e+10 -2.133e+10 -9.914e+09 -1.807e+10 -8.198e+09 -1.508e+10 -6.655e+09 -1.238e+10 -5.285e+09 -9.962e+09 -4.089e+09 -7.837e+09 -3.064e+09 -5.998e+09 -2.204e+09 -4.436e+09 -1.503e+09 -3.142e+09 -9.508e+08 -2.102e+09 -5.376e+08 -1.299e+09 -2.511e+08 -7.127e+08 -7.758e+07 -3.221e+08 1.939e+06 -1.038e+08 4.155e+07 -1.113e+07 1.182e+08 6.917e+07 2.559e+08 2.192e+08 4.372e+08 4.393e+08 6.465e+08 7.080e+08 8.707e+08 1.004e+09 1.097e+09 1.307e+09 1.315e+09 1.599e+09 1.514e+09 1.866e+09 1.687e+09 2.094e+09 1.827e+09 2.274e+09 1.930e+09 2.399e+09 1.991e+09 2.465e+09 2.010e+09 2.472e+09 1.986e+09 2.420e+09 1.923e+09 2.313e+09 1.821e+09 2.157e+09 1.687e+09 1.961e+09 1.525e+09 1.733e+09 1.342e+09 1.483e+09 1.146e+09 1.224e+09 9.434e+08 9.646e+08 7.432e+08 7.180e+08 5.531e+08 4.943e+08 3.813e+08 3.034e+08 2.357e+08 1.542e+08 1.238e+08 5.283e+07 5.351e+07 -2.893e+06 1.954e+07 -4.482e+07 -1.386e+07 -1.255e+08 -8.529e+07 -2.703e+08 -2.066e+08 -4.792e+08 -3.801e+08 -7.493e+08 -6.054e+08 -1.076e+09 -8.799e+08 -1.452e+09 -1.200e+09 -1.871e+09 -1.562e+09 -2.324e+09 -1.959e+09 -2.801e+09 -2.385e+09 -3.292e+09 -2.831e+09 -3.785e+09 -3.289e+09 -4.270e+09 -3.751e+09 -4.735e+09 -4.208e+09 -5.171e+09 -4.650e+09 -5.566e+09 -5.070e+09 -5.913e+09 -5.459e+09 -6.204e+09 -5.808e+09 -6.432e+09 -6.113e+09 -6.592e+09 -6.366e+09 -6.681e+09 -6.564e+09 -6.698e+09 -6.702e+09 -6.644e+09 -6.779e+09 -6.519e+09 -6.794e+09 -6.329e+09 -6.747e+09 -6.077e+09 -6.640e+09 -5.771e+09 -6.477e+09 -5.418e+09 -6.261e+09 -5.027e+09 -5.998e+09 -4.607e+09 -5.695e+09 -4.168e+09 -5.357e+09 -3.718e+09 -4.992e+09 -3.268e+09 -4.607e+09 -2.827e+09 -4.212e+09 -2.402e+09 -3.811e+09 -2.000e+09 -3.414e+09 -1.628e+09 -3.026e+09 -1.289e+09 -2.653e+09 -9.879e+08 -2.301e+09 -7.255e+08 -1.974e+09 -5.021e+08 -1.673e+09 -3.170e+08 -1.402e+09 -1.681e+08 -1.161e+09 -5.251e+07 -9.502e+08 3.324e+07 -7.677e+08 9.297e+07 -6.118e+08 1.307e+08 -4.800e+08 1.501e+08 -3.698e+08 1.545e+08 -2.781e+08 1.467e+08 -2.027e+08 1.293e+08 -1.415e+08 1.049e+08 -9.297e+07 7.627e+07 -5.590e+07 4.692e+07 -2.945e+07 2.139e+07 -1.356e+07 4.018e+06 -8.486e+06 -1.026e+07 -1.016e+07 -4.178e+07 -1.333e+07 -1.110e+08 -1.964e+07 -2.319e+08 -3.410e+07 -4.185e+08 -6.329e+07 -6.866e+08 -1.150e+08 -1.052e+09 -1.982e+08 -1.532e+09 -3.229e+08 -2.143e+09 -4.998e+08 -2.902e+09 -7.402e+08 -3.823e+09 -1.056e+09 -4.921e+09 -1.458e+09 -6.207e+09 -1.958e+09 -7.690e+09 -2.567e+09 -9.379e+09 -3.293e+09 -1.127e+10 -4.145e+09 -1.337e+10 -5.128e+09 -1.568e+10 -6.247e+09 -1.817e+10 -7.501e+09 -2.084e+10 -8.890e+09 -2.367e+10 -1.041e+10 -2.663e+10 -1.205e+10 -2.970e+10 -1.380e+10 -3.284e+10 -1.565e+10 -3.602e+10 -1.758e+10 -3.920e+10 -1.957e+10 -4.234e+10 -2.159e+10 -4.540e+10 -2.362e+10 -4.832e+10 -2.564e+10 -5.105e+10 -2.761e+10 -5.357e+10 -2.949e+10 -5.580e+10 -3.127e+10 -5.773e+10 -3.291e+10 -5.930e+10 -3.438e+10 -6.048e+10 -3.565e+10 -6.125e+10 -3.670e+10 -6.159e+10 -3.750e+10 -6.148e+10 -3.804e+10 -6.091e+10 -3.830e+10 -5.988e+10 -3.826e+10 -5.841e+10 -3.794e+10 -5.652e+10 -3.731e+10 -5.423e+10 -3.640e+10 -5.157e+10 -3.522e+10 -4.859e+10 -3.377e+10 -4.534e+10 -3.209e+10 -4.186e+10 -3.020e+10 -3.823e+10 -2.814e+10 -3.449e+10 -2.593e+10 -3.072e+10 -2.363e+10 -2.696e+10 -2.126e+10 -2.329e+10 -1.887e+10 -1.977e+10 -1.650e+10 -1.644e+10 -1.419e+10 -1.335e+10 -1.199e+10 -1.054e+10 -9.917e+09 -8.048e+09 -8.014e+09 -5.890e+09 -6.305e+09 -4.079e+09 -4.809e+09 -2.614e+09 -3.545e+09 -1.485e+09 -2.519e+09 -6.641e+08 -1.734e+09 -1.069e+08 -1.181e+09 2.562e+08 -8.265e+08 5.236e+08 -5.994e+08 7.969e+08 -4.161e+08 1.133e+09 -2.179e+08 1.529e+09 1.389e+07 1.948e+09 2.697e+08 2.341e+09 5.267e+08 2.662e+09 7.579e+08 2.870e+09 9.366e+08 2.937e+09 1.041e+09 2.846e+09 1.057e+09 2.596e+09 9.804e+08 2.203e+09 8.189e+08 1.702e+09 5.945e+08 1.147e+09 3.457e+08 6.142e+08 1.281e+08 2.009e+08 1.688e+07 1.941e+07 -9.996e+07 -2.277e+08 -4.946e+08 -9.651e+08 -1.329e+09 -2.415e+09 -2.751e+09 -4.764e+09 -4.923e+09 -8.214e+09 -8.024e+09 -1.298e+10 -1.224e+10 -1.926e+10 -1.776e+10 -2.726e+10 -2.479e+10 -3.720e+10 -3.351e+10 -4.924e+10 -4.412e+10 -6.356e+10 -5.680e+10 -8.031e+10 -7.169e+10 -9.957e+10 -8.894e+10 -1.214e+11 -1.087e+11 -1.459e+11 -1.309e+11 -1.730e+11 -1.557e+11 -2.027e+11 -1.831e+11 -2.348e+11 -2.129e+11 -2.692e+11 -2.451e+11 -3.055e+11 -2.796e+11 -3.437e+11 -3.160e+11 -3.832e+11 -3.541e+11 -4.238e+11 -3.937e+11 -4.650e+11 -4.281e+11 -5.171e+11 -4.732e+11 -5.550e+11 -5.144e+11 -5.959e+11 -5.552e+11 -6.353e+11 -5.951e+11 -6.727e+11 -6.336e+11 -7.075e+11 -6.699e+11 -7.392e+11 -7.037e+11 -7.671e+11 -7.343e+11 -7.909e+11 -7.611e+11 -8.100e+11 -7.838e+11 -8.241e+11 -8.017e+11 -8.328e+11 -8.145e+11 -8.358e+11 -8.219e+11 -8.330e+11 -8.236e+11 -8.243e+11 -8.195e+11 -8.097e+11 -8.093e+11 -7.893e+11 -7.932e+11 -7.633e+11 -7.713e+11 -7.321e+11 -7.439e+11 -6.960e+11 -7.112e+11 -6.555e+11 -6.737e+11 -6.114e+11 -6.320e+11 -5.641e+11 -5.866e+11 -5.146e+11 -5.384e+11 -4.635e+11 -4.881e+11 -4.117e+11 -4.365e+11 -3.601e+11 -3.846e+11 -3.095e+11 -3.333e+11 -2.608e+11 -2.832e+11 -2.146e+11 -2.355e+11 -1.719e+11 -1.909e+11 -1.331e+11 -1.500e+11 -9.882e+10 -1.136e+11 -6.949e+10 -8.201e+10 -4.532e+10 -5.569e+10 -2.641e+10 -3.484e+10 -1.269e+10 -1.947e+10 -3.796e+09 -9.446e+09 1.049e+09 -4.056e+09 3.667e+09 -1.052e+09 6.995e+09 2.705e+09 1.278e+10 8.412e+09 2.046e+10 1.566e+10 2.897e+10 2.355e+10 3.724e+10 3.107e+10 4.429e+10 3.723e+10 4.924e+10 4.113e+10 5.137e+10 4.211e+10 5.023e+10 3.978e+10 4.568e+10 3.417e+10 3.800e+10 2.588e+10 2.798e+10 1.614e+10 1.702e+10 6.995e+09 7.208e+09 1.191e+09 1.188e+09 -3.630e+09 -3.618e+09 -1.887e+10 -1.849e+10 -5.391e+10 -5.199e+10 -1.171e+11 -1.113e+11 -2.185e+11 -2.048e+11 -3.699e+11 -3.421e+11 -5.853e+11 -5.347e+11 -8.808e+11 -7.951e+11 -1.274e+12 -1.137e+12 -1.786e+12 -1.577e+12 -2.441e+12 -2.133e+12 -3.261e+12 -2.821e+12 -4.277e+12 -3.664e+12 -5.519e+12 -4.683e+12 -7.019e+12 -5.901e+12 -8.812e+12 -7.343e+12 -1.094e+13 -9.035e+12 -1.343e+13 -1.100e+13 -1.634e+13 -1.328e+13 -1.971e+13 -1.588e+13 -2.358e+13 -1.885e+13 -2.800e+13 -2.221e+13 -3.302e+13 -2.599e+13 -3.869e+13 -3.022e+13 -4.505e+13 -3.493e+13 -5.217e+13 -4.016e+13 -6.009e+13 -4.593e+13 -6.887e+13 -5.228e+13 -7.855e+13 -5.923e+13 -8.917e+13 -6.679e+13 -1.008e+14 -7.499e+13 -1.134e+14 -8.384e+13 -1.272e+14 -9.337e+13 -1.420e+14 -1.036e+14 -1.580e+14 -1.145e+14 -1.751e+14 -1.261e+14 -1.934e+14 -1.384e+14 -2.130e+14 -1.514e+14 -2.337e+14 -1.651e+14 -2.557e+14 -1.794e+14 -2.789e+14 -1.944e+14 -3.032e+14 -2.101e+14 -3.288e+14 -2.263e+14 -3.554e+14 -2.431e+14 -3.832e+14 -2.604e+14 -4.121e+14 -2.783e+14 -4.419e+14 -2.965e+14 -4.727e+14 -3.151e+14 -5.044e+14 -3.341e+14 -5.368e+14 -3.533e+14 -5.699e+14 -3.727e+14 -6.037e+14 -3.923e+14 -6.379e+14 -4.118e+14 -6.725e+14 -4.314e+14 -7.073e+14 -4.509e+14 -7.423e+14 -4.701e+14 -7.773e+14 -4.891e+14 -8.121e+14 -5.078e+14 -8.466e+14 -5.261e+14 -8.807e+14 -5.438e+14 -9.143e+14 -5.610e+14 -9.472e+14 -5.775e+14 -9.791e+14 -5.932e+14 -1.010e+15 -6.082e+14 -1.040e+15 -6.222e+14 -1.068e+15 -6.353e+14 -1.096e+15 -6.471e+14 -1.121e+15 -6.578e+14 -1.145e+15 -6.673e+14 -1.167e+15 -6.756e+14 -1.188e+15 -6.828e+14 -1.206e+15 -6.886e+14 -1.222e+15 -6.932e+14 -1.236e+15 -6.965e+14 -1.248e+15 -6.984e+14 -1.257e+15 -6.990e+14 -1.264e+15 -6.983e+14 -1.269e+15 -6.963e+14 -1.271e+15 -6.930e+14 -1.271e+15 -6.883e+14 -1.269e+15 -6.824e+14 -1.264e+15 -6.752e+14 -1.256e+15 -6.669e+14 -1.247e+15 -6.574e+14 -1.235e+15 -6.468e+14 -1.221e+15 -6.351e+14 -1.204e+15 -6.224e+14 -1.186e+15 -6.088e+14 -1.165e+15 -5.943e+14 -1.143e+15 -5.791e+14 -1.119e+15 -5.631e+14 -1.093e+15 -5.465e+14 -1.066e+15 -5.293e+14 -1.037e+15 -5.116e+14 -1.007e+15 -4.935e+14 -9.757e+14 -4.750e+14 -9.436e+14 -4.563e+14 -9.106e+14 -4.375e+14 -8.770e+14 -4.185e+14 -8.427e+14 -3.995e+14 -8.081e+14 -3.805e+14 -7.732e+14 -3.617e+14 -7.381e+14 -3.431e+14 -7.030e+14 -3.246e+14 -6.682e+14 -3.065e+14 -6.336e+14 -2.888e+14 -5.995e+14 -2.715e+14 -5.660e+14 -2.548e+14 -5.331e+14 -2.384e+14 -5.008e+14 -2.226e+14 -4.693e+14 -2.073e+14 -4.386e+14 -1.926e+14 -4.089e+14 -1.785e+14 -3.802e+14 -1.650e+14 -3.525e+14 -1.521e+14 -3.259e+14 -1.398e+14 -3.004e+14 -1.282e+14 -2.761e+14 -1.172e+14 -2.531e+14 -1.068e+14 -2.312e+14 -9.703e+13 -2.105e+14 -8.789e+13 -1.911e+14 -7.937e+13 -1.728e+14 -7.143e+13 -1.558e+14 -6.407e+13 -1.399e+14 -5.727e+13 -1.251e+14 -5.101e+13 -1.115e+14 -4.526e+13 -9.897e+13 -4.000e+13 -8.747e+13 -3.521e+13 -7.696e+13 -3.086e+13 -6.741e+13 -2.693e+13 -5.876e+13 -2.339e+13 -5.095e+13 -2.022e+13 -4.395e+13 -1.740e+13 -3.771e+13 -1.489e+13 -3.215e+13 -1.267e+13 -2.725e+13 -1.071e+13 -2.294e+13 -9.006e+12 -1.918e+13 -7.521e+12 -1.591e+13 -6.237e+12 -1.310e+13 -5.134e+12 -1.068e+13 -4.192e+12 -8.636e+12 -3.393e+12 -6.911e+12 -2.722e+12 -5.469e+12 -2.161e+12 -4.275e+12 -1.697e+12 -3.299e+12 -1.317e+12 -2.509e+12 -1.009e+12 -1.876e+12 -7.616e+11 -1.377e+12 -5.655e+11 -9.901e+11 -4.122e+11 -6.946e+11 -2.941e+11 -4.740e+11 -2.048e+11 -3.128e+11 -1.386e+11 -1.985e+11 -9.072e+10 -1.200e+11 -5.701e+10 -6.833e+10 -3.406e+10 -3.599e+10 -1.909e+10 -1.710e+10 -9.837e+09 -7.023e+09 -4.510e+09 -2.310e+09 -1.738e+09 -5.201e+08 -5.023e+08 -5.053e+07 -8.032e+07 -7.202e+05 3.638e+06 -3.319e+07 3.849e+07 -2.685e+08 1.337e+08 -1.127e+09 2.822e+08 -3.254e+09 3.988e+08 -7.424e+09 3.378e+08 -1.447e+10 -8.176e+07 -2.519e+10 -1.052e+09 -4.030e+10 -2.764e+09 -6.046e+10 -5.392e+09 -8.608e+10 -9.077e+09 -1.175e+11 -1.393e+10 -1.548e+11 -2.004e+10 -1.978e+11 -2.740e+10 -2.463e+11 -3.602e+10 -3.000e+11 -4.586e+10 -3.580e+11 -5.680e+10 -4.196e+11 -6.870e+10 -4.840e+11 -8.143e+10 -5.500e+11 -9.477e+10 -6.167e+11 -1.085e+11 -6.830e+11 -1.225e+11 -7.477e+11 -1.364e+11 -8.098e+11 -1.500e+11 -8.683e+11 -1.633e+11 -9.221e+11 -1.758e+11 -9.703e+11 -1.874e+11 -1.012e+12 -1.979e+11 -1.047e+12 -2.072e+11 -1.074e+12 -2.152e+11 -1.094e+12 -2.216e+11 -1.105e+12 -2.265e+11 -1.108e+12 -2.298e+11 -1.103e+12 -2.315e+11 -1.090e+12 -2.316e+11 -1.070e+12 -2.301e+11 -1.042e+12 -2.271e+11 -1.008e+12 -2.227e+11 -9.678e+11 -2.170e+11 -9.227e+11 -2.100e+11 -8.732e+11 -2.021e+11 -8.203e+11 -1.932e+11 -7.647e+11 -1.835e+11 -7.073e+11 -1.733e+11 -6.491e+11 -1.625e+11 -5.906e+11 -1.515e+11 -5.328e+11 -1.402e+11 -4.763e+11 -1.290e+11 -4.217e+11 -1.178e+11 -3.696e+11 -1.068e+11 -3.204e+11 -9.611e+10 -2.746e+11 -8.580e+10 -2.323e+11 -7.597e+10 -1.939e+11 -6.667e+10 -1.594e+11 -5.794e+10 -1.288e+11 -4.984e+10 -1.021e+11 -4.240e+10 -7.918e+10 -3.562e+10 -5.986e+10 -2.951e+10 -4.392e+10 -2.409e+10 -3.108e+10 -1.933e+10 -2.103e+10 -1.523e+10 -1.344e+10 -1.176e+10 -7.945e+09 -8.923e+09 -4.171e+09 -6.688e+09 -1.720e+09 -5.048e+09 -1.566e+08 -3.969e+09 9.492e+08 -3.363e+09 1.924e+09 -3.065e+09 2.903e+09 -2.891e+09 3.854e+09 -2.710e+09 4.680e+09 -2.469e+09 5.284e+09 -2.157e+09 5.594e+09 -1.786e+09 5.572e+09 -1.379e+09 5.217e+09 -9.653e+08 4.565e+09 -5.732e+08 3.687e+09 -2.316e+08 2.684e+09 3.412e+07 1.682e+09 2.029e+08 8.304e+08 2.639e+08 2.662e+08 2.542e+08 -1.237e+08 3.572e+08 0.005 -53.323 -52.263 -51.204 -50.144 -49.085 -48.047 -47.118 -46.290 -45.552 -44.899 -44.326 -43.827 -43.399 -43.041 -42.748 -42.520 -42.356 -42.256 -42.218 -42.244 -42.334 -42.491 -42.714 -43.009 -43.376 -43.822 -44.350 -44.967 -45.681 -46.502 -47.442 -48.516 -49.745 -51.156 -52.786 -54.685 -56.932 -59.649 -63.056 -67.611 -74.664 -90.038 -80.049 -75.175 -72.553 -69.392 -65.583 -61.900 -58.660 -55.863 -53.439 -51.323 -49.459 -47.806 -46.332 -45.011 -43.825 -42.758 -41.798 -40.936 -40.162 -39.471 -38.858 -38.318 -37.847 -37.443 -37.104 -36.828 -36.613 -36.459 -36.366 -36.333 -36.362 -36.453 -36.608 -36.828 -37.116 -37.475 -37.909 -38.422 -39.019 -39.708 -40.494 -41.388 -42.401 -43.546 -44.839 -46.297 -47.939 -49.784 -51.847 -54.128 -56.611 -59.269 -62.141 -65.396 -68.115 -65.498 -60.388 -56.076 -52.573 -49.646 -47.143 -44.964 -43.043 -41.336 -39.808 -38.434 -37.196 -36.076 -35.064 -34.151 -33.327 -32.588 -31.928 -31.342 -30.828 -30.383 -30.006 -29.694 -29.448 -29.267 -29.152 -29.103 -29.122 -29.211 -29.374 -29.614 -29.935 -30.344 -30.848 -31.456 -32.181 -33.036 -34.042 -35.222 -36.611 -38.255 -40.220 -42.602 -45.553 -49.318 -54.280 -60.526 -64.910 -67.968 -65.333 -55.234 -48.339 -43.347 -39.405 -36.120 -33.296 -30.817 -28.606 -26.609 -24.790 -23.120 -21.578 -20.146 -18.812 -17.564 -16.394 -15.295 -14.259 -13.282 -12.360 -11.487 -10.662 -9.880 -9.140 -8.438 -7.774 -7.145 -6.549 -5.986 -5.453 -4.950 -4.475 -4.028 -3.608 -3.213 -2.844 -2.500 -2.179 -1.882 -1.608 -1.357 -1.128 -0.921 -0.735 -0.571 -0.427 -0.305 -0.203 -0.122 -0.061 -0.020 0.000 -0.000 -0.020 -0.060 -0.120 -0.201 -0.302 -0.424 -0.567 -0.731 -0.916 -1.122 -1.351 -1.602 -1.875 -2.171 -2.491 -2.835 -3.203 -3.597 -4.017 -4.463 -4.938 -5.440 -5.973 -6.536 -7.132 -7.762 -8.427 -9.129 -9.871 -10.655 -11.483 -12.360 -13.288 -14.271 -15.316 -16.427 -17.613 -18.881 -20.242 -21.710 -23.302 -25.041 -26.956 -29.093 -31.517 -34.331 -37.723 -42.087 -48.546 -65.075 -55.165 -49.598 -47.520 -46.830 -46.891 -47.210 -47.093 -45.952 -43.985 -41.806 -39.772 -37.986 -36.449 -35.133 -34.009 -33.051 -32.237 -31.550 -30.976 -30.505 -30.127 -29.835 -29.623 -29.487 -29.424 -29.429 -29.502 -29.640 -29.843 -30.110 -30.441 -30.838 -31.300 -31.831 -32.432 -33.106 -33.858 -34.692 -35.614 -36.630 -37.751 -38.987 -40.351 -41.861 -43.537 -45.408 -47.508 -49.883 -52.590 -55.698 -59.265 -63.235 -67.052 -69.000 -67.915 -65.024 -61.669 -58.485 -55.666 -53.224 -51.117 -49.295 -47.716 -46.342 -45.146 -44.104 -43.200 -42.417 -41.746 -41.175 -40.698 -40.308 -40.000 -39.772 -39.619 -39.539 -39.531 -39.595 -39.728 -39.933 -40.209 -40.558 -40.983 -41.486 -42.071 -42.744 -43.509 -44.375 -45.351 -46.447 -47.678 -49.060 -50.612 -52.355 -54.308 -56.478 -58.825 -61.205 -63.316 -64.848 -65.877 -66.911 -68.584 -71.525 -74.264 -69.783 -64.418 -60.406 -57.296 -54.775 -52.667 -50.867 -49.308 -47.946 -46.747 -45.688 -44.750 -43.921 -43.188 -42.543 -41.978 -41.488 -41.069 -40.715 -40.423 -40.192 -40.018 -39.901 -39.838 -39.828 -39.871 -39.967 -40.115 -40.316 -40.569 -40.877 -41.239 -41.657 -42.134 -42.671 -43.271 -43.937 -44.674 -45.486 -46.378 -47.357 -48.433 -49.526 -50.620 -51.713 -52.807 0 1 1.0 9205761128.73 S5 HV 34.25 38.05 0.05 9.355e+09 -1.303e+10 9.589e+09 -1.265e+10 9.779e+09 -1.221e+10 9.922e+09 -1.173e+10 1.002e+10 -1.121e+10 1.006e+10 -1.066e+10 1.004e+10 -1.007e+10 9.970e+09 -9.450e+09 9.840e+09 -8.813e+09 9.652e+09 -8.160e+09 9.406e+09 -7.498e+09 9.104e+09 -6.833e+09 8.747e+09 -6.171e+09 8.340e+09 -5.517e+09 7.885e+09 -4.880e+09 7.388e+09 -4.264e+09 6.853e+09 -3.674e+09 6.289e+09 -3.117e+09 5.702e+09 -2.597e+09 5.099e+09 -2.116e+09 4.489e+09 -1.681e+09 3.880e+09 -1.293e+09 3.282e+09 -9.537e+08 2.703e+09 -6.647e+08 2.155e+09 -4.261e+08 1.646e+09 -2.373e+08 1.188e+09 -9.686e+07 7.911e+08 -2.168e+06 4.669e+08 5.075e+07 2.266e+08 6.797e+07 7.771e+07 6.322e+07 -7.926e+06 7.186e+07 -1.227e+08 1.195e+08 -3.463e+08 1.967e+08 -7.122e+08 2.851e+08 -1.236e+09 3.722e+08 -1.929e+09 4.476e+08 -2.805e+09 5.011e+08 -3.876e+09 5.223e+08 -5.149e+09 5.007e+08 -6.637e+09 4.259e+08 -8.347e+09 2.877e+08 -1.028e+10 7.628e+07 -1.245e+10 -2.178e+08 -1.485e+10 -6.032e+08 -1.747e+10 -1.087e+09 -2.033e+10 -1.676e+09 -2.340e+10 -2.376e+09 -2.668e+10 -3.188e+09 -3.015e+10 -4.117e+09 -3.380e+10 -5.162e+09 -3.760e+10 -6.320e+09 -4.153e+10 -7.588e+09 -4.557e+10 -8.963e+09 -4.967e+10 -1.043e+10 -5.381e+10 -1.200e+10 -5.796e+10 -1.364e+10 -6.208e+10 -1.534e+10 -6.613e+10 -1.710e+10 -7.008e+10 -1.889e+10 -7.389e+10 -2.071e+10 -7.752e+10 -2.253e+10 -8.096e+10 -2.435e+10 -8.414e+10 -2.613e+10 -8.706e+10 -2.786e+10 -8.967e+10 -2.954e+10 -9.196e+10 -3.112e+10 -9.390e+10 -3.261e+10 -9.547e+10 -3.398e+10 -9.666e+10 -3.521e+10 -9.745e+10 -3.630e+10 -9.786e+10 -3.722e+10 -9.786e+10 -3.798e+10 -9.747e+10 -3.855e+10 -9.668e+10 -3.894e+10 -9.550e+10 -3.913e+10 -9.396e+10 -3.912e+10 -9.205e+10 -3.892e+10 -8.980e+10 -3.851e+10 -8.722e+10 -3.791e+10 -8.435e+10 -3.712e+10 -8.121e+10 -3.616e+10 -7.782e+10 -3.502e+10 -7.420e+10 -3.372e+10 -7.041e+10 -3.228e+10 -6.646e+10 -3.071e+10 -6.239e+10 -2.904e+10 -5.824e+10 -2.727e+10 -5.403e+10 -2.544e+10 -4.981e+10 -2.357e+10 -4.560e+10 -2.166e+10 -4.145e+10 -1.976e+10 -3.738e+10 -1.787e+10 -3.343e+10 -1.602e+10 -2.963e+10 -1.422e+10 -2.599e+10 -1.249e+10 -2.255e+10 -1.086e+10 -1.934e+10 -9.323e+09 -1.635e+10 -7.898e+09 -1.362e+10 -6.593e+09 -1.114e+10 -5.414e+09 -8.932e+09 -4.364e+09 -6.989e+09 -3.442e+09 -5.311e+09 -2.646e+09 -3.890e+09 -1.973e+09 -2.719e+09 -1.415e+09 -1.784e+09 -9.672e+08 -1.070e+09 -6.186e+08 -5.578e+08 -3.599e+08 -2.280e+08 -1.808e+08 -5.521e+07 -7.257e+07 2.232e+07 -3.054e+07 1.188e+08 -1.868e+07 2.960e+08 4.927e+06 5.430e+08 4.859e+07 8.384e+08 1.049e+08 1.162e+09 1.660e+08 1.497e+09 2.246e+08 1.825e+09 2.745e+08 2.134e+09 3.111e+08 2.410e+09 3.308e+08 2.647e+09 3.311e+08 2.835e+09 3.110e+08 2.972e+09 2.704e+08 3.055e+09 2.103e+08 3.084e+09 1.324e+08 3.061e+09 3.925e+07 2.990e+09 -6.595e+07 2.876e+09 -1.799e+08 2.725e+09 -2.992e+08 2.544e+09 -4.203e+08 2.342e+09 -5.404e+08 2.127e+09 -6.575e+08 1.906e+09 -7.706e+08 1.687e+09 -8.806e+08 1.476e+09 -9.899e+08 1.276e+09 -1.103e+09 1.089e+09 -1.227e+09 9.109e+08 -1.368e+09 7.368e+08 -1.535e+09 5.581e+08 -1.733e+09 3.655e+08 -1.965e+09 1.502e+08 -2.234e+09 -9.553e+07 -2.536e+09 -3.767e+08 -2.868e+09 -6.955e+08 -3.222e+09 -1.052e+09 -3.593e+09 -1.445e+09 -3.970e+09 -1.868e+09 -4.344e+09 -2.316e+09 -4.707e+09 -2.780e+09 -5.047e+09 -3.252e+09 -5.357e+09 -3.721e+09 -5.626e+09 -4.178e+09 -5.848e+09 -4.611e+09 -6.015e+09 -5.011e+09 -6.122e+09 -5.367e+09 -6.165e+09 -5.671e+09 -6.143e+09 -5.916e+09 -6.055e+09 -6.097e+09 -5.902e+09 -6.207e+09 -5.689e+09 -6.247e+09 -5.419e+09 -6.214e+09 -5.101e+09 -6.112e+09 -4.740e+09 -5.944e+09 -4.347e+09 -5.715e+09 -3.930e+09 -5.433e+09 -3.499e+09 -5.105e+09 -3.064e+09 -4.741e+09 -2.634e+09 -4.351e+09 -2.218e+09 -3.945e+09 -1.824e+09 -3.532e+09 -1.457e+09 -3.122e+09 -1.124e+09 -2.725e+09 -8.274e+08 -2.347e+09 -5.700e+08 -1.996e+09 -3.524e+08 -1.675e+09 -1.733e+08 -1.388e+09 -3.041e+07 -1.138e+09 7.965e+07 -9.234e+08 1.615e+08 -7.433e+08 2.202e+08 -5.948e+08 2.606e+08 -4.737e+08 2.873e+08 -3.754e+08 3.036e+08 -2.954e+08 3.118e+08 -2.297e+08 3.123e+08 -1.753e+08 3.048e+08 -1.303e+08 2.885e+08 -9.376e+07 2.626e+08 -6.516e+07 2.274e+08 -4.415e+07 1.840e+08 -2.992e+07 1.355e+08 -2.108e+07 8.658e+07 -1.555e+07 4.367e+07 -1.220e+07 1.398e+07 -1.687e+07 -6.383e+06 -3.954e+07 -4.419e+07 -8.602e+07 -1.296e+08 -1.635e+08 -2.812e+08 -2.823e+08 -5.156e+08 -4.543e+08 -8.507e+08 -6.926e+08 -1.305e+09 -1.011e+09 -1.895e+09 -1.424e+09 -2.641e+09 -1.946e+09 -3.557e+09 -2.591e+09 -4.660e+09 -3.373e+09 -5.963e+09 -4.306e+09 -7.476e+09 -5.398e+09 -9.203e+09 -6.661e+09 -1.115e+10 -8.099e+09 -1.332e+10 -9.715e+09 -1.569e+10 -1.151e+10 -1.826e+10 -1.348e+10 -2.102e+10 -1.561e+10 -2.393e+10 -1.789e+10 -2.697e+10 -2.030e+10 -3.011e+10 -2.281e+10 -3.330e+10 -2.541e+10 -3.650e+10 -2.805e+10 -3.968e+10 -3.070e+10 -4.278e+10 -3.332e+10 -4.576e+10 -3.588e+10 -4.856e+10 -3.831e+10 -5.114e+10 -4.060e+10 -5.345e+10 -4.268e+10 -5.544e+10 -4.452e+10 -5.707e+10 -4.608e+10 -5.832e+10 -4.733e+10 -5.915e+10 -4.823e+10 -5.955e+10 -4.878e+10 -5.950e+10 -4.894e+10 -5.900e+10 -4.871e+10 -5.805e+10 -4.810e+10 -5.667e+10 -4.710e+10 -5.487e+10 -4.574e+10 -5.269e+10 -4.402e+10 -5.015e+10 -4.199e+10 -4.731e+10 -3.968e+10 -4.420e+10 -3.712e+10 -4.088e+10 -3.437e+10 -3.741e+10 -3.147e+10 -3.383e+10 -2.847e+10 -3.022e+10 -2.542e+10 -2.661e+10 -2.238e+10 -2.308e+10 -1.939e+10 -1.967e+10 -1.650e+10 -1.643e+10 -1.376e+10 -1.342e+10 -1.121e+10 -1.066e+10 -8.878e+09 -8.184e+09 -6.796e+09 -6.029e+09 -4.983e+09 -4.203e+09 -3.457e+09 -2.718e+09 -2.223e+09 -1.573e+09 -1.281e+09 -7.571e+08 -6.240e+08 -2.490e+08 -2.414e+08 -1.522e+06 -7.832e+07 1.400e+08 5.756e+07 3.902e+08 3.039e+08 8.037e+08 6.722e+08 1.337e+09 1.126e+09 1.934e+09 1.621e+09 2.539e+09 2.110e+09 3.100e+09 2.550e+09 3.568e+09 2.898e+09 3.900e+09 3.120e+09 4.063e+09 3.190e+09 4.036e+09 3.093e+09 3.812e+09 2.828e+09 3.400e+09 2.412e+09 2.828e+09 1.880e+09 2.145e+09 1.285e+09 1.420e+09 7.072e+08 7.466e+08 2.471e+08 2.381e+08 2.991e+07 2.154e+07 -2.039e+08 -2.803e+08 -9.427e+08 -1.161e+09 -2.439e+09 -2.863e+09 -4.904e+09 -5.587e+09 -8.563e+09 -9.541e+09 -1.366e+10 -1.494e+10 -2.043e+10 -2.199e+10 -2.912e+10 -3.090e+10 -3.997e+10 -4.186e+10 -5.321e+10 -5.503e+10 -6.903e+10 -7.056e+10 -8.764e+10 -8.859e+10 -1.092e+11 -1.092e+11 -1.337e+11 -1.324e+11 -1.614e+11 -1.582e+11 -1.921e+11 -1.865e+11 -2.259e+11 -2.174e+11 -2.627e+11 -2.506e+11 -3.023e+11 -2.859e+11 -3.445e+11 -3.231e+11 -3.890e+11 -3.620e+11 -4.355e+11 -4.020e+11 -4.835e+11 -4.430e+11 -5.326e+11 -4.844e+11 -5.817e+11 -5.300e+11 -6.313e+11 -5.740e+11 -6.806e+11 -6.146e+11 -7.285e+11 -6.535e+11 -7.747e+11 -6.903e+11 -8.185e+11 -7.244e+11 -8.591e+11 -7.553e+11 -8.960e+11 -7.824e+11 -9.286e+11 -8.053e+11 -9.562e+11 -8.235e+11 -9.783e+11 -8.365e+11 -9.945e+11 -8.440e+11 -1.004e+12 -8.458e+11 -1.007e+12 -8.417e+11 -1.004e+12 -8.315e+11 -9.928e+11 -8.153e+11 -9.749e+11 -7.931e+11 -9.500e+11 -7.652e+11 -9.185e+11 -7.320e+11 -8.805e+11 -6.937e+11 -8.366e+11 -6.510e+11 -7.875e+11 -6.046e+11 -7.337e+11 -5.551e+11 -6.761e+11 -5.033e+11 -6.158e+11 -4.501e+11 -5.535e+11 -3.964e+11 -4.903e+11 -3.432e+11 -4.274e+11 -2.913e+11 -3.659e+11 -2.417e+11 -3.067e+11 -1.952e+11 -2.509e+11 -1.526e+11 -1.994e+11 -1.145e+11 -1.530e+11 -8.145e+10 -1.124e+11 -5.390e+10 -7.809e+10 -3.198e+10 -5.039e+10 -1.572e+10 -2.946e+10 -4.841e+09 -1.517e+10 1.372e+09 -6.895e+09 4.645e+09 -2.454e+09 8.087e+09 1.971e+09 1.428e+10 8.688e+09 2.313e+10 1.764e+10 3.345e+10 2.790e+10 4.402e+10 3.829e+10 5.369e+10 4.756e+10 6.138e+10 5.457e+10 6.619e+10 5.833e+10 6.741e+10 5.816e+10 6.463e+10 5.375e+10 5.783e+10 4.533e+10 4.745e+10 3.379e+10 3.454e+10 2.079e+10 2.080e+10 8.905e+09 8.736e+09 1.501e+09 1.431e+09 -4.484e+09 -4.300e+09 -2.315e+10 -2.188e+10 -6.561e+10 -6.123e+10 -1.414e+11 -1.305e+11 -2.620e+11 -2.392e+11 -4.405e+11 -3.984e+11 -6.924e+11 -6.207e+11 -1.036e+12 -9.206e+11 -1.490e+12 -1.314e+12 -2.077e+12 -1.819e+12 -2.823e+12 -2.455e+12 -3.755e+12 -3.243e+12 -4.903e+12 -4.208e+12 -6.300e+12 -5.374e+12 -7.980e+12 -6.766e+12 -9.983e+12 -8.416e+12 -1.235e+13 -1.035e+13 -1.511e+13 -1.260e+13 -1.833e+13 -1.521e+13 -2.205e+13 -1.820e+13 -2.630e+13 -2.160e+13 -3.115e+13 -2.546e+13 -3.664e+13 -2.980e+13 -4.282e+13 -3.467e+13 -4.975e+13 -4.009e+13 -5.748e+13 -4.611e+13 -6.606e+13 -5.276e+13 -7.554e+13 -6.009e+13 -8.596e+13 -6.810e+13 -9.737e+13 -7.683e+13 -1.098e+14 -8.631e+13 -1.233e+14 -9.656e+13 -1.380e+14 -1.076e+14 -1.537e+14 -1.194e+14 -1.706e+14 -1.321e+14 -1.887e+14 -1.456e+14 -2.080e+14 -1.599e+14 -2.286e+14 -1.750e+14 -2.503e+14 -1.910e+14 -2.732e+14 -2.078e+14 -2.973e+14 -2.253e+14 -3.225e+14 -2.437e+14 -3.489e+14 -2.627e+14 -3.764e+14 -2.825e+14 -4.049e+14 -3.030e+14 -4.344e+14 -3.241e+14 -4.649e+14 -3.458e+14 -4.961e+14 -3.680e+14 -5.282e+14 -3.907e+14 -5.610e+14 -4.137e+14 -5.944e+14 -4.371e+14 -6.283e+14 -4.608e+14 -6.625e+14 -4.846e+14 -6.971e+14 -5.085e+14 -7.318e+14 -5.325e+14 -7.665e+14 -5.563e+14 -8.012e+14 -5.800e+14 -8.356e+14 -6.034e+14 -8.696e+14 -6.264e+14 -9.031e+14 -6.489e+14 -9.360e+14 -6.709e+14 -9.681e+14 -6.922e+14 -9.993e+14 -7.128e+14 -1.029e+15 -7.325e+14 -1.058e+15 -7.512e+14 -1.086e+15 -7.688e+14 -1.112e+15 -7.852e+14 -1.136e+15 -8.002e+14 -1.159e+15 -8.139e+14 -1.180e+15 -8.263e+14 -1.199e+15 -8.372e+14 -1.216e+15 -8.467e+14 -1.231e+15 -8.546e+14 -1.243e+15 -8.610e+14 -1.254e+15 -8.658e+14 -1.262e+15 -8.689e+14 -1.267e+15 -8.705e+14 -1.270e+15 -8.704e+14 -1.271e+15 -8.687e+14 -1.269e+15 -8.653e+14 -1.265e+15 -8.604e+14 -1.259e+15 -8.539e+14 -1.250e+15 -8.459e+14 -1.239e+15 -8.363e+14 -1.225e+15 -8.254e+14 -1.209e+15 -8.130e+14 -1.192e+15 -7.994e+14 -1.172e+15 -7.845e+14 -1.150e+15 -7.684e+14 -1.127e+15 -7.513e+14 -1.102e+15 -7.331e+14 -1.075e+15 -7.140e+14 -1.047e+15 -6.940e+14 -1.017e+15 -6.734e+14 -9.868e+14 -6.520e+14 -9.552e+14 -6.301e+14 -9.228e+14 -6.077e+14 -8.896e+14 -5.850e+14 -8.559e+14 -5.619e+14 -8.217e+14 -5.387e+14 -7.872e+14 -5.153e+14 -7.525e+14 -4.920e+14 -7.178e+14 -4.686e+14 -6.832e+14 -4.455e+14 -6.488e+14 -4.225e+14 -6.148e+14 -3.999e+14 -5.814e+14 -3.776e+14 -5.485e+14 -3.559e+14 -5.162e+14 -3.345e+14 -4.847e+14 -3.137e+14 -4.539e+14 -2.935e+14 -4.240e+14 -2.739e+14 -3.950e+14 -2.549e+14 -3.671e+14 -2.367e+14 -3.401e+14 -2.192e+14 -3.143e+14 -2.024e+14 -2.896e+14 -1.863e+14 -2.660e+14 -1.711e+14 -2.436e+14 -1.566e+14 -2.225e+14 -1.430e+14 -2.024e+14 -1.301e+14 -1.836e+14 -1.180e+14 -1.660e+14 -1.067e+14 -1.495e+14 -9.614e+13 -1.342e+14 -8.633e+13 -1.199e+14 -7.724e+13 -1.068e+14 -6.886e+13 -9.472e+13 -6.115e+13 -8.365e+13 -5.409e+13 -7.354e+13 -4.765e+13 -6.436e+13 -4.179e+13 -5.606e+13 -3.650e+13 -4.858e+13 -3.172e+13 -4.187e+13 -2.743e+13 -3.590e+13 -2.361e+13 -3.059e+13 -2.020e+13 -2.591e+13 -1.719e+13 -2.180e+13 -1.454e+13 -1.821e+13 -1.222e+13 -1.511e+13 -1.020e+13 -1.243e+13 -8.456e+12 -1.014e+13 -6.953e+12 -8.195e+12 -5.669e+12 -6.558e+12 -4.580e+12 -5.191e+12 -3.665e+12 -4.060e+12 -2.900e+12 -3.134e+12 -2.269e+12 -2.384e+12 -1.752e+12 -1.784e+12 -1.334e+12 -1.312e+12 -9.989e+11 -9.440e+11 -7.345e+11 -6.633e+11 -5.290e+11 -4.535e+11 -3.720e+11 -3.000e+11 -2.545e+11 -1.909e+11 -1.684e+11 -1.158e+11 -1.071e+11 -6.624e+10 -6.492e+10 -3.508e+10 -3.699e+10 -1.677e+10 -1.946e+10 -6.935e+09 -9.171e+09 -2.291e+09 -3.674e+09 -5.070e+08 -1.125e+09 -3.905e+07 -1.967e+08 -7.023e+05 1.132e+07 -5.168e+07 9.887e+07 -3.412e+08 2.702e+08 -1.232e+09 4.646e+08 -3.306e+09 5.318e+08 -7.289e+09 1.978e+08 -1.397e+10 -8.923e+08 -2.408e+10 -3.123e+09 -3.833e+10 -6.880e+09 -5.730e+10 -1.253e+10 -8.139e+10 -2.035e+10 -1.109e+11 -3.060e+10 -1.458e+11 -4.344e+10 -1.861e+11 -5.891e+10 -2.315e+11 -7.701e+10 -2.815e+11 -9.766e+10 -3.355e+11 -1.207e+11 -3.926e+11 -1.457e+11 -4.521e+11 -1.726e+11 -5.129e+11 -2.008e+11 -5.741e+11 -2.300e+11 -6.346e+11 -2.597e+11 -6.934e+11 -2.895e+11 -7.495e+11 -3.190e+11 -8.021e+11 -3.477e+11 -8.501e+11 -3.751e+11 -8.928e+11 -4.008e+11 -9.296e+11 -4.244e+11 -9.599e+11 -4.456e+11 -9.832e+11 -4.641e+11 -9.993e+11 -4.797e+11 -1.008e+12 -4.921e+11 -1.010e+12 -5.012e+11 -1.004e+12 -5.070e+11 -9.911e+11 -5.093e+11 -9.718e+11 -5.083e+11 -9.462e+11 -5.039e+11 -9.150e+11 -4.965e+11 -8.787e+11 -4.860e+11 -8.380e+11 -4.727e+11 -7.936e+11 -4.569e+11 -7.462e+11 -4.388e+11 -6.965e+11 -4.187e+11 -6.453e+11 -3.969e+11 -5.933e+11 -3.739e+11 -5.411e+11 -3.497e+11 -4.894e+11 -3.249e+11 -4.389e+11 -2.998e+11 -3.899e+11 -2.746e+11 -3.430e+11 -2.496e+11 -2.986e+11 -2.251e+11 -2.571e+11 -2.014e+11 -2.186e+11 -1.786e+11 -1.835e+11 -1.570e+11 -1.518e+11 -1.368e+11 -1.235e+11 -1.179e+11 -9.868e+10 -1.006e+11 -7.720e+10 -8.495e+10 -5.892e+10 -7.087e+10 -4.368e+10 -5.843e+10 -3.124e+10 -4.757e+10 -2.131e+10 -3.824e+10 -1.361e+10 -3.039e+10 -7.817e+09 -2.391e+10 -3.593e+09 -1.868e+10 -6.032e+08 -1.457e+10 1.483e+09 -1.144e+10 2.960e+09 -9.097e+09 4.059e+09 -7.349e+09 4.921e+09 -6.012e+09 5.607e+09 -4.916e+09 6.105e+09 -3.961e+09 6.374e+09 -3.091e+09 6.376e+09 -2.289e+09 6.090e+09 -1.564e+09 5.522e+09 -9.324e+08 4.709e+09 -4.129e+08 3.721e+09 -2.276e+07 2.654e+09 2.292e+08 1.627e+09 3.437e+08 7.778e+08 3.368e+08 2.277e+08 2.725e+08 -1.614e+08 3.241e+08 0.005 -52.570 -51.527 -50.483 -49.439 -48.395 -47.372 -46.453 -45.630 -44.895 -44.241 -43.664 -43.158 -42.722 -42.351 -42.044 -41.799 -41.615 -41.492 -41.428 -41.425 -41.483 -41.602 -41.785 -42.034 -42.351 -42.740 -43.204 -43.750 -44.384 -45.114 -45.951 -46.908 -48.003 -49.259 -50.708 -52.396 -54.392 -56.809 -59.851 -63.962 -70.468 -85.183 -74.467 -69.067 -66.951 -66.306 -66.630 -67.454 -67.380 -65.020 -61.598 -58.383 -55.626 -53.279 -51.264 -49.515 -47.985 -46.637 -45.445 -44.388 -43.451 -42.622 -41.891 -41.250 -40.694 -40.217 -39.817 -39.489 -39.232 -39.044 -38.925 -38.874 -38.892 -38.980 -39.138 -39.369 -39.676 -40.063 -40.534 -41.093 -41.749 -42.508 -43.380 -44.377 -45.510 -46.796 -48.248 -49.880 -51.693 -53.665 -55.724 -57.738 -59.568 -61.231 -63.037 -65.455 -67.676 -64.844 -59.694 -55.430 -52.012 -49.185 -46.781 -44.696 -42.864 -41.238 -39.784 -38.478 -37.301 -36.238 -35.280 -34.416 -33.639 -32.944 -32.325 -31.780 -31.306 -30.900 -30.560 -30.287 -30.079 -29.938 -29.863 -29.856 -29.919 -30.055 -30.267 -30.561 -30.941 -31.416 -31.993 -32.684 -33.504 -34.471 -35.609 -36.950 -38.537 -40.429 -42.713 -45.507 -48.946 -52.987 -56.504 -57.832 -58.832 -62.768 -61.476 -52.291 -45.999 -41.426 -37.789 -34.736 -32.095 -29.763 -27.672 -25.776 -24.042 -22.445 -20.966 -19.590 -18.305 -17.101 -15.969 -14.905 -13.901 -12.952 -12.055 -11.207 -10.403 -9.641 -8.919 -8.235 -7.587 -6.972 -6.390 -5.839 -5.318 -4.826 -4.362 -3.924 -3.513 -3.127 -2.766 -2.429 -2.116 -1.825 -1.558 -1.312 -1.089 -0.886 -0.705 -0.546 -0.407 -0.288 -0.190 -0.112 -0.055 -0.017 0.000 -0.003 -0.026 -0.068 -0.130 -0.213 -0.316 -0.439 -0.583 -0.749 -0.935 -1.143 -1.372 -1.623 -1.897 -2.194 -2.514 -2.858 -3.227 -3.620 -4.040 -4.486 -4.960 -5.462 -5.994 -6.556 -7.151 -7.779 -8.443 -9.144 -9.884 -10.665 -11.492 -12.366 -13.291 -14.272 -15.313 -16.421 -17.602 -18.866 -20.223 -21.686 -23.272 -25.005 -26.915 -29.045 -31.462 -34.269 -37.655 -42.014 -48.470 -65.001 -55.104 -49.570 -47.572 -47.060 -47.519 -48.667 -49.819 -49.439 -47.050 -44.154 -41.582 -39.438 -37.660 -36.179 -34.936 -33.891 -33.012 -32.275 -31.664 -31.164 -30.764 -30.456 -30.234 -30.091 -30.025 -30.031 -30.107 -30.252 -30.465 -30.745 -31.092 -31.507 -31.992 -32.549 -33.179 -33.886 -34.675 -35.549 -36.516 -37.581 -38.752 -40.040 -41.455 -43.008 -44.710 -46.571 -48.597 -50.783 -53.106 -55.526 -57.986 -60.383 -62.288 -62.423 -60.258 -57.250 -54.372 -51.837 -49.635 -47.720 -46.046 -44.576 -43.281 -42.137 -41.126 -40.234 -39.449 -38.760 -38.161 -37.644 -37.203 -36.834 -36.534 -36.300 -36.129 -36.020 -35.970 -35.979 -36.047 -36.172 -36.355 -36.597 -36.898 -37.260 -37.685 -38.174 -38.731 -39.359 -40.063 -40.848 -41.720 -42.689 -43.763 -44.956 -46.283 -47.765 -49.430 -51.314 -53.469 -55.971 -58.936 -62.556 -67.165 -73.297 -79.560 -79.199 -78.971 -80.238 -75.892 -69.528 -64.775 -61.158 -58.275 -55.901 -53.901 -52.191 -50.714 -49.428 -48.305 -47.321 -46.461 -45.710 -45.057 -44.495 -44.015 -43.614 -43.285 -43.025 -42.832 -42.702 -42.634 -42.626 -42.678 -42.789 -42.958 -43.187 -43.475 -43.824 -44.236 -44.712 -45.254 -45.867 -46.553 -47.318 -48.168 -49.109 -50.151 -51.212 -52.273 -53.334 -54.395 0 1 1.0 9205761128.73 S5 VV 34.25 38.05 0.05 -3.287e+09 -9.816e+09 -2.870e+09 -9.520e+09 -2.458e+09 -9.182e+09 -2.056e+09 -8.805e+09 -1.668e+09 -8.391e+09 -1.299e+09 -7.943e+09 -9.535e+08 -7.466e+09 -6.346e+08 -6.961e+09 -3.463e+08 -6.436e+09 -9.080e+07 -5.894e+09 1.297e+08 -5.340e+09 3.133e+08 -4.781e+09 4.594e+08 -4.223e+09 5.679e+08 -3.672e+09 6.393e+08 -3.135e+09 6.743e+08 -2.619e+09 6.763e+08 -2.131e+09 6.484e+08 -1.678e+09 5.950e+08 -1.267e+09 5.211e+08 -9.040e+08 4.332e+08 -5.963e+08 3.390e+08 -3.489e+08 2.480e+08 -1.653e+08 1.739e+08 -4.295e+07 1.309e+08 4.173e+07 1.156e+08 1.420e+08 9.940e+07 3.075e+08 5.207e+07 5.629e+08 -4.829e+07 9.181e+08 -2.182e+08 1.378e+09 -4.725e+08 1.946e+09 -8.258e+08 2.627e+09 -1.292e+09 3.422e+09 -1.885e+09 4.334e+09 -2.620e+09 5.366e+09 -3.510e+09 6.517e+09 -4.566e+09 7.787e+09 -5.802e+09 9.177e+09 -7.227e+09 1.068e+10 -8.850e+09 1.230e+10 -1.068e+10 1.403e+10 -1.272e+10 1.587e+10 -1.496e+10 1.779e+10 -1.742e+10 1.981e+10 -2.009e+10 2.190e+10 -2.295e+10 2.405e+10 -2.599e+10 2.625e+10 -2.921e+10 2.848e+10 -3.259e+10 3.072e+10 -3.609e+10 3.295e+10 -3.971e+10 3.516e+10 -4.340e+10 3.732e+10 -4.715e+10 3.942e+10 -5.093e+10 4.142e+10 -5.469e+10 4.330e+10 -5.840e+10 4.506e+10 -6.205e+10 4.666e+10 -6.559e+10 4.808e+10 -6.898e+10 4.932e+10 -7.221e+10 5.036e+10 -7.523e+10 5.119e+10 -7.804e+10 5.179e+10 -8.060e+10 5.218e+10 -8.289e+10 5.233e+10 -8.488e+10 5.225e+10 -8.657e+10 5.195e+10 -8.793e+10 5.143e+10 -8.895e+10 5.070e+10 -8.963e+10 4.977e+10 -8.995e+10 4.865e+10 -8.993e+10 4.737e+10 -8.955e+10 4.593e+10 -8.882e+10 4.435e+10 -8.775e+10 4.266e+10 -8.634e+10 4.087e+10 -8.461e+10 3.900e+10 -8.256e+10 3.707e+10 -8.021e+10 3.509e+10 -7.759e+10 3.308e+10 -7.470e+10 3.106e+10 -7.156e+10 2.904e+10 -6.822e+10 2.704e+10 -6.468e+10 2.506e+10 -6.097e+10 2.311e+10 -5.714e+10 2.121e+10 -5.321e+10 1.936e+10 -4.921e+10 1.758e+10 -4.518e+10 1.586e+10 -4.115e+10 1.421e+10 -3.716e+10 1.264e+10 -3.324e+10 1.114e+10 -2.943e+10 9.737e+09 -2.577e+10 8.417e+09 -2.228e+10 7.187e+09 -1.899e+10 6.050e+09 -1.593e+10 5.007e+09 -1.312e+10 4.063e+09 -1.058e+10 3.218e+09 -8.312e+09 2.472e+09 -6.333e+09 1.827e+09 -4.644e+09 1.283e+09 -3.239e+09 8.384e+08 -2.112e+09 4.907e+08 -1.251e+09 2.370e+08 -6.369e+08 7.208e+07 -2.510e+08 -1.196e+07 -6.248e+07 -4.138e+07 3.816e+07 -9.270e+07 1.960e+08 -2.130e+08 4.633e+08 -3.936e+08 8.216e+08 -6.188e+08 1.244e+09 -8.769e+08 1.704e+09 -1.157e+09 2.177e+09 -1.450e+09 2.641e+09 -1.746e+09 3.077e+09 -2.035e+09 3.469e+09 -2.309e+09 3.803e+09 -2.563e+09 4.070e+09 -2.789e+09 4.264e+09 -2.984e+09 4.380e+09 -3.144e+09 4.419e+09 -3.267e+09 4.383e+09 -3.352e+09 4.276e+09 -3.400e+09 4.105e+09 -3.411e+09 3.876e+09 -3.388e+09 3.600e+09 -3.334e+09 3.286e+09 -3.253e+09 2.944e+09 -3.147e+09 2.585e+09 -3.023e+09 2.218e+09 -2.884e+09 1.854e+09 -2.737e+09 1.499e+09 -2.586e+09 1.160e+09 -2.438e+09 8.405e+08 -2.300e+09 5.420e+08 -2.177e+09 2.619e+08 -2.075e+09 -6.331e+06 -2.001e+09 -2.720e+08 -1.955e+09 -5.463e+08 -1.940e+09 -8.415e+08 -1.952e+09 -1.168e+09 -1.988e+09 -1.534e+09 -2.040e+09 -1.942e+09 -2.102e+09 -2.395e+09 -2.166e+09 -2.887e+09 -2.224e+09 -3.414e+09 -2.273e+09 -3.968e+09 -2.305e+09 -4.537e+09 -2.317e+09 -5.111e+09 -2.307e+09 -5.676e+09 -2.270e+09 -6.218e+09 -2.207e+09 -6.726e+09 -2.117e+09 -7.185e+09 -2.000e+09 -7.583e+09 -1.858e+09 -7.910e+09 -1.693e+09 -8.157e+09 -1.509e+09 -8.316e+09 -1.309e+09 -8.384e+09 -1.098e+09 -8.358e+09 -8.805e+08 -8.240e+09 -6.617e+08 -8.031e+09 -4.464e+08 -7.739e+09 -2.395e+08 -7.372e+09 -4.573e+07 -6.940e+09 1.313e+08 -6.454e+09 2.884e+08 -5.929e+09 4.229e+08 -5.377e+09 5.335e+08 -4.812e+09 6.194e+08 -4.248e+09 6.808e+08 -3.697e+09 7.188e+08 -3.169e+09 7.351e+08 -2.674e+09 7.320e+08 -2.220e+09 7.123e+08 -1.811e+09 6.792e+08 -1.452e+09 6.360e+08 -1.142e+09 5.858e+08 -8.815e+08 5.319e+08 -6.674e+08 4.772e+08 -4.955e+08 4.240e+08 -3.609e+08 3.742e+08 -2.580e+08 3.291e+08 -1.810e+08 2.889e+08 -1.248e+08 2.534e+08 -8.504e+07 2.218e+08 -5.826e+07 1.928e+08 -4.195e+07 1.654e+08 -3.417e+07 1.393e+08 -3.329e+07 1.145e+08 -3.815e+07 9.219e+07 -4.891e+07 7.380e+07 -6.890e+07 6.019e+07 -1.059e+08 4.956e+07 -1.712e+08 3.667e+07 -2.781e+08 1.437e+07 -4.412e+08 -2.458e+07 -6.764e+08 -8.703e+07 -1.002e+09 -1.798e+08 -1.437e+09 -3.096e+08 -2.003e+09 -4.831e+08 -2.720e+09 -7.074e+08 -3.613e+09 -9.892e+08 -4.702e+09 -1.334e+09 -6.011e+09 -1.749e+09 -7.558e+09 -2.239e+09 -9.363e+09 -2.806e+09 -1.144e+10 -3.454e+09 -1.381e+10 -4.183e+09 -1.646e+10 -4.992e+09 -1.941e+10 -5.878e+09 -2.266e+10 -6.835e+09 -2.618e+10 -7.856e+09 -2.996e+10 -8.931e+09 -3.399e+10 -1.005e+10 -3.821e+10 -1.119e+10 -4.260e+10 -1.234e+10 -4.710e+10 -1.349e+10 -5.165e+10 -1.461e+10 -5.621e+10 -1.570e+10 -6.068e+10 -1.671e+10 -6.502e+10 -1.766e+10 -6.914e+10 -1.851e+10 -7.298e+10 -1.925e+10 -7.645e+10 -1.987e+10 -7.950e+10 -2.036e+10 -8.207e+10 -2.070e+10 -8.409e+10 -2.089e+10 -8.552e+10 -2.093e+10 -8.633e+10 -2.082e+10 -8.650e+10 -2.055e+10 -8.601e+10 -2.015e+10 -8.486e+10 -1.960e+10 -8.308e+10 -1.893e+10 -8.070e+10 -1.814e+10 -7.774e+10 -1.724e+10 -7.426e+10 -1.626e+10 -7.032e+10 -1.520e+10 -6.599e+10 -1.409e+10 -6.134e+10 -1.293e+10 -5.645e+10 -1.174e+10 -5.140e+10 -1.054e+10 -4.627e+10 -9.345e+09 -4.115e+10 -8.171e+09 -3.610e+10 -7.033e+09 -3.121e+10 -5.945e+09 -2.654e+10 -4.920e+09 -2.215e+10 -3.970e+09 -1.810e+10 -3.107e+09 -1.441e+10 -2.338e+09 -1.114e+10 -1.671e+09 -8.296e+09 -1.111e+09 -5.893e+09 -6.600e+08 -3.935e+09 -3.177e+08 -2.410e+09 -8.062e+07 -1.297e+09 5.868e+07 -5.667e+08 1.124e+08 -1.726e+08 1.093e+08 7.327e+06 1.323e+08 2.077e+08 2.411e+08 5.409e+08 4.086e+08 9.839e+08 5.969e+08 1.477e+09 7.817e+08 1.959e+09 9.433e+08 2.372e+09 1.065e+09 2.665e+09 1.134e+09 2.800e+09 1.141e+09 2.753e+09 1.083e+09 2.519e+09 9.615e+08 2.115e+09 7.871e+08 1.582e+09 5.770e+08 9.936e+08 3.575e+08 4.517e+08 1.626e+08 9.143e+07 3.444e+07 -7.205e+07 -1.848e+07 -6.310e+08 -1.856e+08 -1.972e+09 -5.839e+08 -4.372e+09 -1.284e+09 -8.125e+09 -2.356e+09 -1.355e+10 -3.869e+09 -2.098e+10 -5.890e+09 -3.075e+10 -8.485e+09 -4.322e+10 -1.172e+10 -5.870e+10 -1.564e+10 -7.751e+10 -2.029e+10 -9.998e+10 -2.571e+10 -1.263e+11 -3.192e+10 -1.568e+11 -3.894e+10 -1.915e+11 -4.678e+10 -2.305e+11 -5.540e+10 -2.739e+11 -6.480e+10 -3.217e+11 -7.495e+10 -3.737e+11 -8.578e+10 -4.297e+11 -9.725e+10 -4.894e+11 -1.093e+11 -5.524e+11 -1.218e+11 -6.183e+11 -1.347e+11 -6.867e+11 -1.478e+11 -7.568e+11 -1.612e+11 -8.280e+11 -1.745e+11 -8.997e+11 -1.878e+11 -9.719e+11 -1.926e+11 -1.044e+12 -2.193e+11 -1.112e+12 -2.317e+11 -1.177e+12 -2.434e+11 -1.239e+12 -2.542e+11 -1.295e+12 -2.639e+11 -1.346e+12 -2.723e+11 -1.391e+12 -2.793e+11 -1.429e+12 -2.846e+11 -1.459e+12 -2.881e+11 -1.480e+12 -2.898e+11 -1.492e+12 -2.894e+11 -1.495e+12 -2.868e+11 -1.488e+12 -2.822e+11 -1.471e+12 -2.753e+11 -1.444e+12 -2.664e+11 -1.408e+12 -2.553e+11 -1.362e+12 -2.423e+11 -1.306e+12 -2.275e+11 -1.243e+12 -2.112e+11 -1.171e+12 -1.935e+11 -1.093e+12 -1.748e+11 -1.010e+12 -1.555e+11 -9.224e+11 -1.357e+11 -8.320e+11 -1.161e+11 -7.401e+11 -9.679e+10 -6.484e+11 -7.827e+10 -5.584e+11 -6.091e+10 -4.716e+11 -4.499e+10 -3.893e+11 -3.080e+10 -3.130e+11 -1.859e+10 -2.438e+11 -8.514e+09 -1.827e+11 -6.596e+08 -1.303e+11 4.942e+09 -8.719e+10 8.374e+09 -5.343e+10 9.814e+09 -2.889e+10 9.591e+09 -1.291e+10 8.332e+09 -3.945e+09 7.286e+09 1.541e+09 8.153e+09 8.089e+09 1.135e+10 1.753e+10 1.565e+10 2.908e+10 1.999e+10 4.125e+10 2.371e+10 5.240e+10 2.635e+10 6.099e+10 2.757e+10 6.574e+10 2.716e+10 6.575e+10 2.505e+10 6.063e+10 2.137e+10 5.069e+10 1.644e+10 3.707e+10 1.083e+10 2.195e+10 5.427e+09 8.650e+09 1.410e+09 6.393e+08 -7.355e+08 -7.883e+09 -4.576e+09 -3.474e+10 -1.611e+10 -9.232e+10 -3.826e+10 -1.926e+11 -7.458e+10 -3.499e+11 -1.294e+11 -5.812e+11 -2.076e+11 -9.055e+11 -3.148e+11 -1.345e+12 -4.575e+11 -1.926e+12 -6.431e+11 -2.675e+12 -8.794e+11 -3.626e+12 -1.176e+12 -4.811e+12 -1.541e+12 -6.269e+12 -1.987e+12 -8.042e+12 -2.526e+12 -1.018e+13 -3.168e+12 -1.272e+13 -3.928e+12 -1.572e+13 -4.819e+12 -1.923e+13 -5.856e+12 -2.331e+13 -7.054e+12 -2.803e+13 -8.429e+12 -3.344e+13 -9.997e+12 -3.960e+13 -1.177e+13 -4.658e+13 -1.378e+13 -5.446e+13 -1.602e+13 -6.328e+13 -1.852e+13 -7.313e+13 -2.129e+13 -8.407e+13 -2.436e+13 -9.615e+13 -2.774e+13 -1.095e+14 -3.145e+13 -1.240e+14 -3.550e+13 -1.399e+14 -3.989e+13 -1.572e+14 -4.464e+13 -1.759e+14 -4.977e+13 -1.960e+14 -5.527e+13 -2.176e+14 -6.116e+13 -2.408e+14 -6.744e+13 -2.654e+14 -7.412e+13 -2.916e+14 -8.120e+13 -3.193e+14 -8.868e+13 -3.485e+14 -9.655e+13 -3.793e+14 -1.048e+14 -4.115e+14 -1.135e+14 -4.451e+14 -1.225e+14 -4.801e+14 -1.320e+14 -5.165e+14 -1.417e+14 -5.541e+14 -1.519e+14 -5.928e+14 -1.623e+14 -6.327e+14 -1.731e+14 -6.735e+14 -1.842e+14 -7.152e+14 -1.955e+14 -7.577e+14 -2.071e+14 -8.008e+14 -2.189e+14 -8.445e+14 -2.309e+14 -8.885e+14 -2.430e+14 -9.327e+14 -2.552e+14 -9.771e+14 -2.675e+14 -1.021e+15 -2.798e+14 -1.065e+15 -2.921e+14 -1.109e+15 -3.043e+14 -1.152e+15 -3.164e+14 -1.194e+15 -3.284e+14 -1.236e+15 -3.401e+14 -1.276e+15 -3.515e+14 -1.315e+15 -3.627e+14 -1.353e+15 -3.734e+14 -1.389e+15 -3.837e+14 -1.423e+15 -3.935e+14 -1.455e+15 -4.025e+14 -1.485e+15 -4.109e+14 -1.513e+15 -4.186e+14 -1.538e+15 -4.257e+14 -1.561e+15 -4.320e+14 -1.581e+15 -4.376e+14 -1.598e+15 -4.425e+14 -1.613e+15 -4.466e+14 -1.624e+15 -4.498e+14 -1.633e+15 -4.523e+14 -1.638e+15 -4.539e+14 -1.641e+15 -4.548e+14 -1.640e+15 -4.547e+14 -1.636e+15 -4.539e+14 -1.629e+15 -4.523e+14 -1.619e+15 -4.498e+14 -1.606e+15 -4.466e+14 -1.590e+15 -4.426e+14 -1.571e+15 -4.379e+14 -1.549e+15 -4.325e+14 -1.525e+15 -4.263e+14 -1.498e+15 -4.196e+14 -1.469e+15 -4.122e+14 -1.438e+15 -4.042e+14 -1.404e+15 -3.957e+14 -1.369e+15 -3.867e+14 -1.332e+15 -3.772e+14 -1.294e+15 -3.673e+14 -1.254e+15 -3.570e+14 -1.213e+15 -3.463e+14 -1.171e+15 -3.353e+14 -1.128e+15 -3.241e+14 -1.085e+15 -3.126e+14 -1.041e+15 -3.010e+14 -9.966e+14 -2.892e+14 -9.524e+14 -2.773e+14 -9.082e+14 -2.654e+14 -8.642e+14 -2.534e+14 -8.206e+14 -2.414e+14 -7.774e+14 -2.295e+14 -7.350e+14 -2.178e+14 -6.934e+14 -2.061e+14 -6.526e+14 -1.946e+14 -6.127e+14 -1.834e+14 -5.739e+14 -1.723e+14 -5.361e+14 -1.616e+14 -4.996e+14 -1.511e+14 -4.644e+14 -1.409e+14 -4.305e+14 -1.311e+14 -3.979e+14 -1.216e+14 -3.668e+14 -1.125e+14 -3.371e+14 -1.038e+14 -3.089e+14 -9.549e+13 -2.822e+14 -8.759e+13 -2.570e+14 -8.011e+13 -2.332e+14 -7.304e+13 -2.110e+14 -6.640e+13 -1.902e+14 -6.016e+13 -1.708e+14 -5.433e+13 -1.528e+14 -4.891e+13 -1.362e+14 -4.387e+13 -1.209e+14 -3.921e+13 -1.069e+14 -3.492e+13 -9.413e+13 -3.098e+13 -8.249e+13 -2.738e+13 -7.195e+13 -2.410e+13 -6.245e+13 -2.112e+13 -5.393e+13 -1.843e+13 -4.632e+13 -1.601e+13 -3.956e+13 -1.383e+13 -3.359e+13 -1.189e+13 -2.834e+13 -1.017e+13 -2.375e+13 -8.649e+12 -1.976e+13 -7.308e+12 -1.632e+13 -6.136e+12 -1.337e+13 -5.115e+12 -1.086e+13 -4.232e+12 -8.732e+12 -3.473e+12 -6.952e+12 -2.825e+12 -5.473e+12 -2.276e+12 -4.256e+12 -1.814e+12 -3.265e+12 -1.430e+12 -2.467e+12 -1.112e+12 -1.833e+12 -8.529e+11 -1.336e+12 -6.437e+11 -9.523e+11 -4.770e+11 -6.623e+11 -3.463e+11 -4.473e+11 -2.455e+11 -2.917e+11 -1.692e+11 -1.825e+11 -1.129e+11 -1.084e+11 -7.240e+10 -6.037e+10 -4.420e+10 -3.089e+10 -2.538e+10 -1.408e+10 -1.344e+10 -5.417e+09 -6.370e+09 -1.579e+09 -2.573e+09 -2.491e+08 -8.024e+08 2.569e+07 -1.488e+08 1.501e+07 1.702e+07 -6.825e+07 1.482e+08 -5.247e+08 4.705e+08 -1.899e+09 9.994e+08 -4.934e+09 1.667e+09 -1.049e+10 2.321e+09 -1.944e+10 2.751e+09 -3.262e+10 2.718e+09 -5.077e+10 1.967e+09 -7.443e+10 2.611e+08 -1.040e+11 -2.619e+09 -1.398e+11 -6.862e+09 -1.816e+11 -1.260e+10 -2.292e+11 -1.992e+10 -2.824e+11 -2.889e+10 -3.403e+11 -3.949e+10 -4.023e+11 -5.166e+10 -4.673e+11 -6.531e+10 -5.342e+11 -8.028e+10 -6.020e+11 -9.641e+10 -6.697e+11 -1.135e+11 -7.358e+11 -1.313e+11 -7.995e+11 -1.498e+11 -8.598e+11 -1.685e+11 -9.153e+11 -1.873e+11 -9.654e+11 -2.057e+11 -1.009e+12 -2.237e+11 -1.046e+12 -2.409e+11 -1.076e+12 -2.571e+11 -1.097e+12 -2.720e+11 -1.111e+12 -2.855e+11 -1.117e+12 -2.974e+11 -1.115e+12 -3.074e+11 -1.105e+12 -3.156e+11 -1.087e+12 -3.217e+11 -1.063e+12 -3.257e+11 -1.032e+12 -3.275e+11 -9.955e+11 -3.272e+11 -9.537e+11 -3.248e+11 -9.075e+11 -3.203e+11 -8.575e+11 -3.137e+11 -8.047e+11 -3.054e+11 -7.496e+11 -2.952e+11 -6.932e+11 -2.836e+11 -6.361e+11 -2.705e+11 -5.791e+11 -2.562e+11 -5.228e+11 -2.410e+11 -4.678e+11 -2.251e+11 -4.147e+11 -2.087e+11 -3.641e+11 -1.919e+11 -3.162e+11 -1.751e+11 -2.714e+11 -1.585e+11 -2.302e+11 -1.422e+11 -1.925e+11 -1.264e+11 -1.585e+11 -1.113e+11 -1.284e+11 -9.705e+10 -1.020e+11 -8.374e+10 -7.931e+10 -7.146e+10 -6.010e+10 -6.031e+10 -4.416e+10 -5.031e+10 -3.122e+10 -4.149e+10 -2.101e+10 -3.386e+10 -1.315e+10 -2.739e+10 -7.268e+09 -2.204e+10 -2.984e+09 -1.775e+10 1.041e+08 -1.441e+10 2.369e+09 -1.188e+10 4.115e+09 -9.979e+09 5.548e+09 -8.517e+09 6.771e+09 -7.298e+09 7.785e+09 -6.196e+09 8.543e+09 -5.134e+09 8.989e+09 -4.081e+09 9.075e+09 -3.045e+09 8.784e+09 -2.050e+09 8.129e+09 -1.128e+09 7.159e+09 -3.197e+08 5.952e+09 3.420e+08 4.614e+09 8.321e+08 3.276e+09 1.141e+09 2.070e+09 1.291e+09 1.095e+09 1.368e+09 0.005 -52.404 -51.320 -50.236 -49.152 -48.068 -47.004 -46.047 -45.186 -44.414 -43.722 -43.107 -42.564 -42.088 -41.678 -41.329 -41.042 -40.813 -40.642 -40.529 -40.473 -40.474 -40.533 -40.651 -40.828 -41.067 -41.369 -41.739 -42.178 -42.692 -43.284 -43.963 -44.735 -45.610 -46.600 -47.719 -48.988 -50.432 -52.084 -53.992 -56.223 -58.876 -62.102 -66.105 -70.871 -74.260 -73.723 -72.643 -72.319 -71.420 -68.455 -64.574 -60.998 -57.951 -55.365 -53.150 -51.230 -49.552 -48.074 -46.767 -45.608 -44.578 -43.665 -42.856 -42.144 -41.521 -40.982 -40.522 -40.138 -39.828 -39.588 -39.419 -39.318 -39.287 -39.326 -39.436 -39.618 -39.874 -40.209 -40.624 -41.126 -41.719 -42.410 -43.207 -44.118 -45.155 -46.326 -47.643 -49.108 -50.711 -52.411 -54.107 -55.614 -56.709 -57.258 -57.302 -56.946 -56.207 -55.035 -53.437 -51.547 -49.546 -47.568 -45.686 -43.933 -42.316 -40.831 -39.473 -38.230 -37.095 -36.059 -35.116 -34.259 -33.484 -32.784 -32.158 -31.601 -31.113 -30.690 -30.332 -30.037 -29.806 -29.639 -29.537 -29.500 -29.531 -29.632 -29.806 -30.058 -30.393 -30.817 -31.339 -31.968 -32.718 -33.606 -34.652 -35.887 -37.348 -39.090 -41.188 -43.747 -46.880 -50.503 -53.414 -53.780 -53.028 -53.128 -55.127 -58.999 -53.627 -46.625 -41.640 -37.786 -34.616 -31.910 -29.541 -27.429 -25.522 -23.784 -22.186 -20.709 -19.337 -18.057 -16.859 -15.735 -14.677 -13.680 -12.739 -11.849 -11.008 -10.212 -9.457 -8.743 -8.066 -7.424 -6.817 -6.242 -5.698 -5.183 -4.698 -4.240 -3.810 -3.405 -3.025 -2.671 -2.340 -2.033 -1.749 -1.487 -1.248 -1.030 -0.834 -0.659 -0.505 -0.372 -0.259 -0.167 -0.095 -0.043 -0.012 0.000 -0.008 -0.036 -0.084 -0.152 -0.240 -0.349 -0.478 -0.628 -0.799 -0.991 -1.204 -1.439 -1.696 -1.975 -2.278 -2.603 -2.953 -3.327 -3.726 -4.151 -4.603 -5.082 -5.589 -6.126 -6.694 -7.293 -7.926 -8.594 -9.299 -10.043 -10.828 -11.657 -12.534 -13.460 -14.441 -15.481 -16.586 -17.762 -19.018 -20.361 -21.805 -23.364 -25.057 -26.908 -28.951 -31.232 -33.816 -36.805 -40.356 -44.703 -49.899 -53.437 -52.257 -50.829 -50.528 -51.134 -51.894 -51.217 -48.599 -45.518 -42.795 -40.524 -38.639 -37.064 -35.739 -34.621 -33.677 -32.882 -32.216 -31.666 -31.220 -30.869 -30.606 -30.424 -30.320 -30.290 -30.331 -30.442 -30.620 -30.867 -31.180 -31.561 -32.011 -32.531 -33.123 -33.791 -34.537 -35.365 -36.281 -37.289 -38.397 -39.610 -40.937 -42.384 -43.954 -45.648 -47.455 -49.342 -51.247 -53.063 -54.637 -55.791 -56.346 -56.157 -55.224 -53.743 -51.986 -50.169 -48.418 -46.788 -45.297 -43.947 -42.730 -41.638 -40.660 -39.787 -39.011 -38.324 -37.720 -37.195 -36.741 -36.357 -36.038 -35.783 -35.588 -35.453 -35.375 -35.353 -35.386 -35.475 -35.619 -35.818 -36.073 -36.385 -36.755 -37.184 -37.675 -38.231 -38.854 -39.549 -40.320 -41.174 -42.116 -43.157 -44.306 -45.577 -46.987 -48.557 -50.316 -52.301 -54.565 -57.184 -60.271 -64.004 -68.701 -74.950 -83.539 -91.411 -85.695 -76.879 -70.572 -65.941 -62.351 -59.457 -57.060 -55.036 -53.305 -51.810 -50.512 -49.379 -48.391 -47.529 -46.780 -46.132 -45.578 -45.110 -44.722 -44.409 -44.169 -43.998 -43.893 -43.853 -43.876 -43.963 -44.112 -44.324 -44.600 -44.940 -45.347 -45.822 -46.369 -46.992 -47.695 -48.483 -49.364 -50.348 -51.444 -52.562 -53.680 -54.798 -55.917 0 1 1.0 9205761128.73 S5 VH 34.25 38.05 0.05 3.945e+09 -7.079e+09 4.012e+09 -6.705e+09 4.053e+09 -6.309e+09 4.066e+09 -5.895e+09 4.051e+09 -5.467e+09 4.006e+09 -5.030e+09 3.932e+09 -4.588e+09 3.828e+09 -4.145e+09 3.695e+09 -3.707e+09 3.533e+09 -3.276e+09 3.343e+09 -2.857e+09 3.129e+09 -2.454e+09 2.891e+09 -2.071e+09 2.633e+09 -1.710e+09 2.359e+09 -1.376e+09 2.073e+09 -1.072e+09 1.780e+09 -7.995e+08 1.486e+09 -5.619e+08 1.199e+09 -3.607e+08 9.246e+08 -1.970e+08 6.727e+08 -7.187e+07 4.522e+08 1.528e+07 2.727e+08 6.761e+07 1.426e+08 9.459e+07 5.648e+07 1.205e+08 -2.427e+07 1.783e+08 -1.543e+08 2.822e+08 -3.733e+08 4.296e+08 -7.060e+08 6.146e+08 -1.170e+09 8.312e+08 -1.781e+09 1.074e+09 -2.557e+09 1.339e+09 -3.509e+09 1.620e+09 -4.654e+09 1.911e+09 -6.005e+09 2.206e+09 -7.574e+09 2.499e+09 -9.371e+09 2.782e+09 -1.141e+10 3.050e+09 -1.369e+10 3.294e+09 -1.622e+10 3.509e+09 -1.900e+10 3.686e+09 -2.203e+10 3.820e+09 -2.531e+10 3.904e+09 -2.882e+10 3.931e+09 -3.257e+10 3.897e+09 -3.653e+10 3.795e+09 -4.068e+10 3.622e+09 -4.501e+10 3.373e+09 -4.949e+10 3.047e+09 -5.408e+10 2.639e+09 -5.877e+10 2.150e+09 -6.351e+10 1.579e+09 -6.827e+10 9.271e+08 -7.302e+10 1.948e+08 -7.770e+10 -6.136e+08 -8.228e+10 -1.495e+09 -8.673e+10 -2.445e+09 -9.099e+10 -3.455e+09 -9.504e+10 -4.520e+09 -9.883e+10 -5.633e+09 -1.023e+11 -6.782e+09 -1.055e+11 -7.960e+09 -1.083e+11 -9.157e+09 -1.108e+11 -1.036e+10 -1.128e+11 -1.155e+10 -1.145e+11 -1.272e+10 -1.156e+11 -1.386e+10 -1.164e+11 -1.496e+10 -1.166e+11 -1.599e+10 -1.165e+11 -1.696e+10 -1.158e+11 -1.784e+10 -1.147e+11 -1.862e+10 -1.132e+11 -1.930e+10 -1.112e+11 -1.986e+10 -1.088e+11 -2.031e+10 -1.061e+11 -2.062e+10 -1.029e+11 -2.080e+10 -9.947e+10 -2.084e+10 -9.568e+10 -2.075e+10 -9.161e+10 -2.052e+10 -8.728e+10 -2.015e+10 -8.274e+10 -1.966e+10 -7.803e+10 -1.905e+10 -7.317e+10 -1.832e+10 -6.821e+10 -1.749e+10 -6.319e+10 -1.658e+10 -5.814e+10 -1.559e+10 -5.312e+10 -1.453e+10 -4.816e+10 -1.343e+10 -4.329e+10 -1.230e+10 -3.856e+10 -1.116e+10 -3.400e+10 -1.001e+10 -2.964e+10 -8.887e+09 -2.553e+10 -7.791e+09 -2.167e+10 -6.741e+09 -1.811e+10 -5.745e+09 -1.485e+10 -4.816e+09 -1.192e+10 -3.962e+09 -9.312e+09 -3.189e+09 -7.048e+09 -2.501e+09 -5.124e+09 -1.902e+09 -3.531e+09 -1.391e+09 -2.262e+09 -9.668e+08 -1.302e+09 -6.267e+08 -6.290e+08 -3.661e+08 -2.198e+08 -1.820e+08 -2.815e+07 -8.031e+07 9.869e+07 -5.705e+07 3.250e+08 -5.442e+07 6.919e+08 -2.637e+07 1.171e+09 3.072e+07 1.731e+09 1.102e+08 2.337e+09 2.045e+08 2.962e+09 3.065e+08 3.577e+09 4.095e+08 4.156e+09 5.077e+08 4.679e+09 5.963e+08 5.127e+09 6.715e+08 5.487e+09 7.304e+08 5.749e+09 7.711e+08 5.907e+09 7.927e+08 5.959e+09 7.951e+08 5.906e+09 7.788e+08 5.754e+09 7.454e+08 5.509e+09 6.966e+08 5.183e+09 6.350e+08 4.788e+09 5.631e+08 4.339e+09 4.841e+08 3.849e+09 4.010e+08 3.336e+09 3.170e+08 2.815e+09 2.355e+08 2.301e+09 1.593e+08 1.811e+09 9.127e+07 1.358e+09 3.410e+07 9.557e+08 -1.013e+07 6.149e+08 -3.968e+07 3.460e+08 -5.361e+07 1.560e+08 -5.277e+07 4.598e+07 -4.534e+07 -1.751e+07 -5.504e+07 -1.083e+08 -9.956e+07 -2.781e+08 -1.708e+08 -5.345e+08 -2.598e+08 -8.745e+08 -3.627e+08 -1.292e+09 -4.765e+08 -1.779e+09 -5.979e+08 -2.325e+09 -7.239e+08 -2.920e+09 -8.507e+08 -3.551e+09 -9.748e+08 -4.205e+09 -1.093e+09 -4.868e+09 -1.201e+09 -5.525e+09 -1.295e+09 -6.163e+09 -1.374e+09 -6.767e+09 -1.434e+09 -7.325e+09 -1.472e+09 -7.824e+09 -1.489e+09 -8.254e+09 -1.482e+09 -8.604e+09 -1.451e+09 -8.870e+09 -1.398e+09 -9.044e+09 -1.323e+09 -9.124e+09 -1.228e+09 -9.110e+09 -1.116e+09 -9.003e+09 -9.900e+08 -8.807e+09 -8.529e+08 -8.529e+09 -7.085e+08 -8.175e+09 -5.607e+08 -7.755e+09 -4.134e+08 -7.281e+09 -2.700e+08 -6.764e+09 -1.342e+08 -6.216e+09 -8.987e+06 -5.649e+09 1.032e+08 -5.075e+09 2.004e+08 -4.506e+09 2.811e+08 -3.953e+09 3.448e+08 -3.424e+09 3.911e+08 -2.927e+09 4.208e+08 -2.469e+09 4.347e+08 -2.053e+09 4.345e+08 -1.683e+09 4.220e+08 -1.359e+09 3.993e+08 -1.081e+09 3.687e+08 -8.464e+08 3.326e+08 -6.529e+08 2.930e+08 -4.964e+08 2.517e+08 -3.726e+08 2.107e+08 -2.769e+08 1.710e+08 -2.047e+08 1.338e+08 -1.519e+08 1.001e+08 -1.149e+08 7.030e+07 -9.094e+07 4.500e+07 -7.870e+07 2.388e+07 -7.868e+07 4.709e+06 -9.327e+07 -1.758e+07 -1.263e+08 -5.035e+07 -1.833e+08 -1.016e+08 -2.718e+08 -1.789e+08 -4.014e+08 -2.895e+08 -5.840e+08 -4.413e+08 -8.335e+08 -6.420e+08 -1.165e+09 -8.995e+08 -1.595e+09 -1.222e+09 -2.142e+09 -1.618e+09 -2.823e+09 -2.095e+09 -3.658e+09 -2.659e+09 -4.665e+09 -3.317e+09 -5.860e+09 -4.074e+09 -7.261e+09 -4.933e+09 -8.881e+09 -5.897e+09 -1.073e+10 -6.964e+09 -1.282e+10 -8.134e+09 -1.515e+10 -9.402e+09 -1.773e+10 -1.076e+10 -2.054e+10 -1.220e+10 -2.358e+10 -1.371e+10 -2.683e+10 -1.527e+10 -3.027e+10 -1.687e+10 -3.387e+10 -1.848e+10 -3.759e+10 -2.010e+10 -4.140e+10 -2.169e+10 -4.526e+10 -2.323e+10 -4.910e+10 -2.470e+10 -5.290e+10 -2.609e+10 -5.657e+10 -2.735e+10 -6.008e+10 -2.847e+10 -6.335e+10 -2.943e+10 -6.635e+10 -3.021e+10 -6.899e+10 -3.079e+10 -7.125e+10 -3.116e+10 -7.308e+10 -3.130e+10 -7.443e+10 -3.122e+10 -7.527e+10 -3.091e+10 -7.559e+10 -3.037e+10 -7.536e+10 -2.961e+10 -7.459e+10 -2.864e+10 -7.328e+10 -2.748e+10 -7.145e+10 -2.613e+10 -6.913e+10 -2.463e+10 -6.634e+10 -2.299e+10 -6.314e+10 -2.124e+10 -5.956e+10 -1.942e+10 -5.569e+10 -1.754e+10 -5.157e+10 -1.564e+10 -4.727e+10 -1.375e+10 -4.287e+10 -1.189e+10 -3.843e+10 -1.010e+10 -3.401e+10 -8.395e+09 -2.970e+10 -6.803e+09 -2.555e+10 -5.343e+09 -2.161e+10 -4.030e+09 -1.794e+10 -2.876e+09 -1.458e+10 -1.891e+09 -1.156e+10 -1.075e+09 -8.913e+09 -4.297e+08 -6.644e+09 5.343e+07 -4.756e+09 3.865e+08 -3.245e+09 5.869e+08 -2.090e+09 6.796e+08 -1.258e+09 6.986e+08 -6.977e+08 6.884e+08 -3.331e+08 6.993e+08 -6.636e+07 7.655e+08 1.825e+08 8.834e+08 4.459e+08 1.022e+09 7.142e+08 1.146e+09 9.563e+08 1.228e+09 1.137e+09 1.247e+09 1.228e+09 1.195e+09 1.208e+09 1.071e+09 1.075e+09 8.838e+08 8.439e+08 6.520e+08 5.511e+08 4.054e+08 2.583e+08 1.840e+08 5.306e+07 3.820e+07 -4.522e+07 -2.426e+07 -3.993e+08 -2.277e+08 -1.270e+09 -7.127e+08 -2.863e+09 -1.570e+09 -5.407e+09 -2.891e+09 -9.155e+09 -4.773e+09 -1.437e+10 -7.309e+09 -2.134e+10 -1.060e+10 -3.036e+10 -1.473e+10 -4.171e+10 -1.978e+10 -5.569e+10 -2.584e+10 -7.259e+10 -3.297e+10 -9.263e+10 -4.121e+10 -1.160e+11 -5.060e+10 -1.431e+11 -6.116e+10 -1.738e+11 -7.289e+10 -2.082e+11 -8.575e+10 -2.466e+11 -9.972e+10 -2.887e+11 -1.147e+11 -3.345e+11 -1.306e+11 -3.839e+11 -1.474e+11 -4.365e+11 -1.648e+11 -4.920e+11 -1.828e+11 -5.500e+11 -2.011e+11 -6.101e+11 -2.197e+11 -6.717e+11 -2.381e+11 -7.342e+11 -2.564e+11 -7.981e+11 -2.786e+11 -8.615e+11 -2.988e+11 -9.229e+11 -3.156e+11 -9.821e+11 -3.312e+11 -1.038e+12 -3.454e+11 -1.091e+12 -3.580e+11 -1.140e+12 -3.687e+11 -1.183e+12 -3.774e+11 -1.220e+12 -3.837e+11 -1.251e+12 -3.877e+11 -1.274e+12 -3.892e+11 -1.290e+12 -3.880e+11 -1.297e+12 -3.842e+11 -1.296e+12 -3.777e+11 -1.287e+12 -3.685e+11 -1.268e+12 -3.567e+11 -1.241e+12 -3.424e+11 -1.205e+12 -3.259e+11 -1.161e+12 -3.073e+11 -1.109e+12 -2.869e+11 -1.050e+12 -2.650e+11 -9.854e+11 -2.419e+11 -9.154e+11 -2.180e+11 -8.411e+11 -1.937e+11 -7.639e+11 -1.694e+11 -6.849e+11 -1.454e+11 -6.053e+11 -1.222e+11 -5.267e+11 -1.002e+11 -4.501e+11 -7.974e+10 -3.768e+11 -6.106e+10 -3.082e+11 -4.448e+10 -2.451e+11 -3.019e+10 -1.884e+11 -1.830e+10 -1.390e+11 -8.913e+09 -9.723e+10 -1.978e+09 -6.337e+10 2.610e+09 -3.746e+10 5.060e+09 -1.918e+10 5.734e+09 -7.862e+09 5.297e+09 -1.867e+09 5.042e+09 2.229e+09 6.465e+09 7.911e+09 9.567e+09 1.581e+10 1.325e+10 2.495e+10 1.675e+10 3.397e+10 1.952e+10 4.152e+10 2.120e+10 4.643e+10 2.151e+10 4.778e+10 2.032e+10 4.510e+10 1.770e+10 3.844e+10 1.386e+10 2.858e+10 9.298e+09 1.717e+10 4.763e+09 6.858e+09 1.303e+09 5.232e+08 -5.825e+08 -6.367e+09 -3.877e+09 -2.832e+10 -1.382e+10 -7.592e+10 -3.309e+10 -1.596e+11 -6.484e+10 -2.920e+11 -1.129e+11 -4.882e+11 -1.815e+11 -7.652e+11 -2.756e+11 -1.143e+12 -4.008e+11 -1.645e+12 -5.633e+11 -2.296e+12 -7.697e+11 -3.125e+12 -1.028e+12 -4.164e+12 -1.346e+12 -5.447e+12 -1.731e+12 -7.012e+12 -2.195e+12 -8.902e+12 -2.747e+12 -1.116e+13 -3.396e+12 -1.383e+13 -4.154e+12 -1.697e+13 -5.032e+12 -2.062e+13 -6.042e+12 -2.485e+13 -7.195e+12 -2.971e+13 -8.503e+12 -3.526e+13 -9.978e+12 -4.156e+13 -1.163e+13 -4.868e+13 -1.348e+13 -5.667e+13 -1.552e+13 -6.560e+13 -1.778e+13 -7.553e+13 -2.026e+13 -8.653e+13 -2.298e+13 -9.867e+13 -2.595e+13 -1.120e+14 -2.917e+13 -1.265e+14 -3.265e+13 -1.424e+14 -3.639e+13 -1.596e+14 -4.041e+13 -1.781e+14 -4.469e+13 -1.981e+14 -4.924e+13 -2.195e+14 -5.406e+13 -2.424e+14 -5.915e+13 -2.667e+14 -6.451e+13 -2.925e+14 -7.013e+13 -3.198e+14 -7.600e+13 -3.486e+14 -8.211e+13 -3.788e+14 -8.846e+13 -4.105e+14 -9.502e+13 -4.435e+14 -1.018e+14 -4.778e+14 -1.088e+14 -5.134e+14 -1.159e+14 -5.503e+14 -1.232e+14 -5.882e+14 -1.306e+14 -6.271e+14 -1.381e+14 -6.670e+14 -1.457e+14 -7.077e+14 -1.534e+14 -7.491e+14 -1.611e+14 -7.911e+14 -1.688e+14 -8.335e+14 -1.765e+14 -8.762e+14 -1.842e+14 -9.191e+14 -1.917e+14 -9.620e+14 -1.992e+14 -1.005e+15 -2.065e+14 -1.047e+15 -2.136e+14 -1.089e+15 -2.206e+14 -1.130e+15 -2.272e+14 -1.171e+15 -2.337e+14 -1.210e+15 -2.398e+14 -1.248e+15 -2.456e+14 -1.285e+15 -2.510e+14 -1.321e+15 -2.560e+14 -1.354e+15 -2.606e+14 -1.386e+15 -2.645e+14 -1.416e+15 -2.679e+14 -1.444e+15 -2.707e+14 -1.469e+15 -2.731e+14 -1.492e+15 -2.749e+14 -1.512e+15 -2.763e+14 -1.530e+15 -2.771e+14 -1.545e+15 -2.773e+14 -1.558e+15 -2.771e+14 -1.567e+15 -2.763e+14 -1.573e+15 -2.750e+14 -1.577e+15 -2.731e+14 -1.577e+15 -2.708e+14 -1.575e+15 -2.680e+14 -1.569e+15 -2.648e+14 -1.561e+15 -2.611e+14 -1.550e+15 -2.569e+14 -1.535e+15 -2.524e+14 -1.519e+15 -2.475e+14 -1.499e+15 -2.422e+14 -1.477e+15 -2.366e+14 -1.452e+15 -2.307e+14 -1.425e+15 -2.246e+14 -1.396e+15 -2.182e+14 -1.365e+15 -2.116e+14 -1.331e+15 -2.048e+14 -1.296e+15 -1.979e+14 -1.260e+15 -1.908e+14 -1.222e+15 -1.837e+14 -1.183e+15 -1.765e+14 -1.143e+15 -1.692e+14 -1.102e+15 -1.620e+14 -1.060e+15 -1.547e+14 -1.018e+15 -1.475e+14 -9.751e+14 -1.403e+14 -9.323e+14 -1.332e+14 -8.894e+14 -1.262e+14 -8.467e+14 -1.193e+14 -8.043e+14 -1.126e+14 -7.623e+14 -1.060e+14 -7.209e+14 -9.957e+13 -6.804e+14 -9.335e+13 -6.405e+14 -8.731e+13 -6.016e+14 -8.147e+13 -5.637e+14 -7.584e+13 -5.268e+14 -7.043e+13 -4.910e+14 -6.524e+13 -4.565e+14 -6.029e+13 -4.233e+14 -5.556e+13 -3.914e+14 -5.108e+13 -3.609e+14 -4.683e+13 -3.317e+14 -4.282e+13 -3.041e+14 -3.905e+13 -2.779e+14 -3.551e+13 -2.531e+14 -3.220e+13 -2.298e+14 -2.912e+13 -2.080e+14 -2.625e+13 -1.875e+14 -2.360e+13 -1.685e+14 -2.114e+13 -1.508e+14 -1.889e+13 -1.345e+14 -1.682e+13 -1.194e+14 -1.493e+13 -1.057e+14 -1.320e+13 -9.305e+13 -1.164e+13 -8.157e+13 -1.022e+13 -7.118e+13 -8.946e+12 -6.181e+13 -7.798e+12 -5.339e+13 -6.770e+12 -4.587e+13 -5.854e+12 -3.919e+13 -5.039e+12 -3.327e+13 -4.317e+12 -2.808e+13 -3.682e+12 -2.353e+13 -3.123e+12 -1.958e+13 -2.634e+12 -1.616e+13 -2.210e+12 -1.324e+13 -1.841e+12 -1.074e+13 -1.524e+12 -8.635e+12 -1.252e+12 -6.869e+12 -1.021e+12 -5.402e+12 -8.249e+11 -4.196e+12 -6.605e+11 -3.214e+12 -5.233e+11 -2.425e+12 -4.097e+11 -1.798e+12 -3.166e+11 -1.307e+12 -2.410e+11 -9.296e+11 -1.803e+11 -6.444e+11 -1.324e+11 -4.335e+11 -9.501e+10 -2.814e+11 -6.637e+10 -1.750e+11 -4.491e+10 -1.033e+11 -2.922e+10 -5.698e+10 -1.810e+10 -2.883e+10 -1.052e+10 -1.295e+10 -5.616e+09 -4.896e+09 -2.657e+09 -1.411e+09 -1.050e+09 -2.433e+08 -3.085e+08 -3.775e+06 -5.148e+07 2.456e+06 1.007e+07 -7.136e+07 9.374e+07 -5.116e+08 3.631e+08 -1.897e+09 9.118e+08 -4.998e+09 1.794e+09 -1.069e+10 3.030e+09 -1.985e+10 4.605e+09 -3.333e+10 6.490e+09 -5.186e+10 8.638e+09 -7.600e+10 1.098e+10 -1.062e+11 1.346e+10 -1.426e+11 1.600e+10 -1.852e+11 1.851e+10 -2.339e+11 2.093e+10 -2.882e+11 2.319e+10 -3.474e+11 2.521e+10 -4.109e+11 2.692e+10 -4.777e+11 2.827e+10 -5.466e+11 2.920e+10 -6.166e+11 2.967e+10 -6.867e+11 2.964e+10 -7.555e+11 2.908e+10 -8.220e+11 2.792e+10 -8.851e+11 2.619e+10 -9.436e+11 2.391e+10 -9.965e+11 2.110e+10 -1.043e+12 1.778e+10 -1.083e+12 1.400e+10 -1.114e+12 9.817e+09 -1.138e+12 5.278e+09 -1.153e+12 4.666e+08 -1.160e+12 -4.542e+09 -1.159e+12 -9.672e+09 -1.149e+12 -1.483e+10 -1.131e+12 -1.992e+10 -1.106e+12 -2.488e+10 -1.073e+12 -2.962e+10 -1.034e+12 -3.404e+10 -9.901e+11 -3.810e+10 -9.410e+11 -4.172e+10 -8.878e+11 -4.485e+10 -8.315e+11 -4.745e+10 -7.728e+11 -4.949e+10 -7.128e+11 -5.095e+10 -6.521e+11 -5.183e+10 -5.916e+11 -5.212e+10 -5.320e+11 -5.185e+10 -4.740e+11 -5.104e+10 -4.181e+11 -4.972e+10 -3.650e+11 -4.795e+10 -3.151e+11 -4.576e+10 -2.687e+11 -4.321e+10 -2.261e+11 -4.037e+10 -1.875e+11 -3.729e+10 -1.529e+11 -3.403e+10 -1.225e+11 -3.068e+10 -9.604e+10 -2.727e+10 -7.352e+10 -2.389e+10 -5.471e+10 -2.060e+10 -3.937e+10 -1.744e+10 -2.717e+10 -1.449e+10 -1.782e+10 -1.180e+10 -1.093e+10 -9.427e+09 -6.093e+09 -7.442e+09 -2.883e+09 -5.915e+09 -7.955e+08 -4.897e+09 6.935e+08 -4.370e+09 2.012e+09 -4.196e+09 3.366e+09 -4.171e+09 4.747e+09 -4.129e+09 6.044e+09 -3.979e+09 7.134e+09 -3.690e+09 7.915e+09 -3.259e+09 8.312e+09 -2.709e+09 8.294e+09 -2.074e+09 7.869e+09 -1.396e+09 7.080e+09 -7.222e+08 6.009e+09 -1.002e+08 4.761e+09 4.259e+08 3.472e+09 8.220e+08 2.284e+09 1.083e+09 1.312e+09 1.270e+09 0.005 -53.159 -52.059 -50.960 -49.860 -48.760 -47.682 -46.715 -45.848 -45.073 -44.383 -43.772 -43.235 -42.769 -42.370 -42.036 -41.766 -41.557 -41.409 -41.322 -41.295 -41.328 -41.424 -41.582 -41.805 -42.095 -42.454 -42.887 -43.398 -43.992 -44.675 -45.456 -46.345 -47.355 -48.499 -49.799 -51.280 -52.974 -54.927 -57.199 -59.875 -63.074 -66.959 -71.689 -76.981 -79.864 -76.812 -71.598 -66.767 -62.703 -59.300 -56.417 -53.941 -51.787 -49.895 -48.220 -46.729 -45.395 -44.198 -43.123 -42.158 -41.292 -40.517 -39.826 -39.214 -38.677 -38.211 -37.812 -37.480 -37.211 -37.005 -36.862 -36.780 -36.760 -36.803 -36.909 -37.079 -37.317 -37.624 -38.003 -38.457 -38.992 -39.612 -40.323 -41.133 -42.048 -43.080 -44.236 -45.527 -46.959 -48.533 -50.232 -52.007 -53.755 -55.298 -56.409 -56.890 -56.649 -55.692 -54.135 -52.197 -50.109 -48.032 -46.051 -44.203 -42.498 -40.932 -39.500 -38.190 -36.993 -35.900 -34.904 -33.997 -33.175 -32.431 -31.763 -31.166 -30.638 -30.176 -29.780 -29.447 -29.178 -28.971 -28.828 -28.750 -28.737 -28.791 -28.916 -29.114 -29.389 -29.748 -30.197 -30.743 -31.397 -32.173 -33.087 -34.162 -35.425 -36.918 -38.697 -40.845 -43.490 -46.837 -51.193 -56.477 -59.108 -58.331 -58.986 -61.946 -55.970 -48.549 -43.258 -39.172 -35.820 -32.967 -30.477 -28.265 -26.273 -24.461 -22.800 -21.268 -19.847 -18.524 -17.287 -16.127 -15.038 -14.013 -13.045 -12.132 -11.269 -10.453 -9.680 -8.948 -8.256 -7.599 -6.978 -6.391 -5.835 -5.310 -4.814 -4.347 -3.907 -3.494 -3.106 -2.744 -2.406 -2.093 -1.802 -1.535 -1.290 -1.067 -0.866 -0.687 -0.528 -0.391 -0.275 -0.179 -0.104 -0.049 -0.014 0.000 -0.006 -0.031 -0.077 -0.143 -0.230 -0.337 -0.464 -0.613 -0.782 -0.973 -1.186 -1.420 -1.676 -1.955 -2.257 -2.583 -2.932 -3.306 -3.706 -4.131 -4.583 -5.063 -5.571 -6.109 -6.677 -7.278 -7.913 -8.582 -9.289 -10.035 -10.823 -11.654 -12.533 -13.463 -14.447 -15.491 -16.600 -17.780 -19.039 -20.388 -21.838 -23.402 -25.101 -26.959 -29.009 -31.296 -33.887 -36.881 -40.436 -44.780 -49.963 -53.468 -52.209 -50.602 -49.902 -49.679 -49.170 -47.734 -45.537 -43.173 -40.988 -39.076 -37.430 -36.021 -34.815 -33.784 -32.905 -32.159 -31.531 -31.010 -30.586 -30.250 -29.997 -29.823 -29.721 -29.691 -29.728 -29.832 -30.001 -30.234 -30.532 -30.894 -31.322 -31.816 -32.379 -33.014 -33.723 -34.510 -35.381 -36.342 -37.398 -38.559 -39.836 -41.239 -42.784 -44.488 -46.368 -48.446 -50.735 -53.238 -55.918 -58.646 -61.113 -62.737 -62.884 -61.520 -59.286 -56.820 -54.452 -52.295 -50.371 -48.669 -47.168 -45.846 -44.682 -43.660 -42.764 -41.984 -41.308 -40.729 -40.239 -39.833 -39.507 -39.257 -39.080 -38.975 -38.938 -38.971 -39.071 -39.239 -39.475 -39.782 -40.161 -40.614 -41.144 -41.757 -42.457 -43.250 -44.145 -45.151 -46.281 -47.548 -48.968 -50.559 -52.335 -54.293 -56.385 -58.451 -60.165 -61.180 -61.509 -61.542 -61.692 -62.236 -63.408 -65.537 -68.988 -71.582 -67.101 -62.128 -58.466 -55.652 -53.387 -51.505 -49.908 -48.535 -47.344 -46.305 -45.397 -44.603 -43.911 -43.310 -42.794 -42.355 -41.989 -41.691 -41.458 -41.288 -41.178 -41.126 -41.133 -41.196 -41.316 -41.492 -41.726 -42.016 -42.366 -42.776 -43.248 -43.784 -44.389 -45.065 -45.818 -46.653 -47.577 -48.599 -49.729 -50.879 -52.030 -53.181 -54.331 0 1 1.0 9205761128.73 S6 HH 36.71 40.21 0.05 -1.759e+07 -2.902e+08 -2.948e+07 -2.631e+08 -3.934e+07 -2.366e+08 -4.727e+07 -2.109e+08 -5.334e+07 -1.862e+08 -5.769e+07 -1.629e+08 -6.045e+07 -1.409e+08 -6.181e+07 -1.206e+08 -6.192e+07 -1.019e+08 -6.096e+07 -8.486e+07 -5.912e+07 -6.953e+07 -5.657e+07 -5.589e+07 -5.347e+07 -4.387e+07 -4.997e+07 -3.338e+07 -4.623e+07 -2.433e+07 -4.234e+07 -1.662e+07 -3.842e+07 -1.009e+07 -3.455e+07 -4.610e+06 -3.078e+07 -4.541e+04 -2.715e+07 3.743e+06 -2.370e+07 6.874e+06 -2.042e+07 9.470e+06 -1.729e+07 1.164e+07 -1.431e+07 1.349e+07 -1.143e+07 1.511e+07 -8.587e+06 1.658e+07 -5.717e+06 1.795e+07 -2.733e+06 1.928e+07 4.619e+05 2.059e+07 3.961e+06 2.187e+07 7.861e+06 2.311e+07 1.225e+07 2.426e+07 1.721e+07 2.526e+07 2.279e+07 2.605e+07 2.903e+07 2.654e+07 3.594e+07 2.665e+07 4.351e+07 2.630e+07 5.173e+07 2.542e+07 6.053e+07 2.394e+07 6.983e+07 2.182e+07 7.955e+07 1.901e+07 8.958e+07 1.552e+07 9.978e+07 1.133e+07 1.100e+08 6.467e+06 1.202e+08 9.810e+05 1.301e+08 -5.062e+06 1.396e+08 -1.159e+07 1.485e+08 -1.849e+07 1.568e+08 -2.566e+07 1.642e+08 -3.298e+07 1.707e+08 -4.030e+07 1.761e+08 -4.750e+07 1.804e+08 -5.445e+07 1.835e+08 -6.100e+07 1.854e+08 -6.703e+07 1.859e+08 -7.244e+07 1.852e+08 -7.712e+07 1.832e+08 -8.100e+07 1.801e+08 -8.400e+07 1.757e+08 -8.610e+07 1.703e+08 -8.727e+07 1.640e+08 -8.753e+07 1.568e+08 -8.688e+07 1.489e+08 -8.539e+07 1.403e+08 -8.310e+07 1.314e+08 -8.009e+07 1.220e+08 -7.647e+07 1.125e+08 -7.233e+07 1.030e+08 -6.776e+07 9.353e+07 -6.289e+07 8.426e+07 -5.784e+07 7.528e+07 -5.269e+07 6.671e+07 -4.755e+07 5.860e+07 -4.252e+07 5.102e+07 -3.766e+07 4.402e+07 -3.305e+07 3.764e+07 -2.874e+07 3.187e+07 -2.477e+07 2.673e+07 -2.116e+07 2.221e+07 -1.793e+07 1.827e+07 -1.509e+07 1.489e+07 -1.262e+07 1.204e+07 -1.050e+07 9.657e+06 -8.726e+06 7.702e+06 -7.257e+06 6.122e+06 -6.066e+06 4.866e+06 -5.122e+06 3.888e+06 -4.396e+06 3.141e+06 -3.862e+06 2.586e+06 -3.497e+06 2.189e+06 -3.284e+06 1.921e+06 -3.213e+06 1.762e+06 -3.278e+06 1.696e+06 -3.483e+06 1.719e+06 -3.835e+06 1.830e+06 -4.350e+06 2.034e+06 -5.048e+06 2.343e+06 -5.952e+06 2.772e+06 -7.090e+06 3.338e+06 -8.490e+06 4.061e+06 -1.018e+07 4.964e+06 -1.219e+07 6.066e+06 -1.454e+07 7.384e+06 -1.723e+07 8.938e+06 -2.029e+07 1.074e+07 -2.370e+07 1.279e+07 -2.745e+07 1.511e+07 -3.152e+07 1.769e+07 -3.586e+07 2.053e+07 -4.041e+07 2.360e+07 -4.512e+07 2.691e+07 -4.990e+07 3.041e+07 -5.466e+07 3.409e+07 -5.931e+07 3.791e+07 -6.374e+07 4.183e+07 -6.785e+07 4.581e+07 -7.153e+07 4.980e+07 -7.469e+07 5.376e+07 -7.722e+07 5.764e+07 -7.907e+07 6.140e+07 -8.015e+07 6.498e+07 -8.043e+07 6.836e+07 -7.988e+07 7.149e+07 -7.849e+07 7.435e+07 -7.629e+07 7.692e+07 -7.331e+07 7.919e+07 -6.962e+07 8.117e+07 -6.528e+07 8.287e+07 -6.038e+07 8.432e+07 -5.502e+07 8.555e+07 -4.928e+07 8.661e+07 -4.326e+07 8.755e+07 -3.703e+07 8.842e+07 -3.065e+07 8.929e+07 -2.418e+07 9.018e+07 -1.763e+07 9.113e+07 -1.104e+07 9.214e+07 -4.405e+06 9.321e+07 2.270e+06 9.430e+07 8.962e+06 9.535e+07 1.565e+07 9.630e+07 2.228e+07 9.704e+07 2.878e+07 9.745e+07 3.504e+07 9.743e+07 4.094e+07 9.686e+07 4.632e+07 9.564e+07 5.101e+07 9.367e+07 5.485e+07 9.090e+07 5.765e+07 8.726e+07 5.927e+07 8.274e+07 5.959e+07 7.734e+07 5.851e+07 7.111e+07 5.600e+07 6.412e+07 5.210e+07 5.650e+07 4.689e+07 4.841e+07 4.057e+07 4.005e+07 3.342e+07 3.169e+07 2.580e+07 2.362e+07 1.818e+07 1.620e+07 1.114e+07 9.834e+06 5.307e+06 5.032e+06 1.271e+06 2.285e+06 -1.275e+06 8.535e+05 -4.845e+06 -1.686e+06 -1.275e+07 -7.159e+06 -2.664e+07 -1.632e+07 -4.755e+07 -2.970e+07 -7.656e+07 -4.774e+07 -1.147e+08 -7.080e+07 -1.629e+08 -9.917e+07 -2.220e+08 -1.331e+08 -2.929e+08 -1.726e+08 -3.759e+08 -2.176e+08 -4.715e+08 -2.681e+08 -5.797e+08 -3.236e+08 -7.004e+08 -3.837e+08 -8.330e+08 -4.477e+08 -9.768e+08 -5.148e+08 -1.130e+09 -5.840e+08 -1.293e+09 -6.542e+08 -1.461e+09 -7.242e+08 -1.634e+09 -7.927e+08 -1.809e+09 -8.580e+08 -1.983e+09 -9.185e+08 -2.152e+09 -9.728e+08 -2.314e+09 -1.019e+09 -2.466e+09 -1.056e+09 -2.604e+09 -1.083e+09 -2.724e+09 -1.097e+09 -2.825e+09 -1.098e+09 -2.901e+09 -1.085e+09 -2.952e+09 -1.058e+09 -2.975e+09 -1.016e+09 -2.967e+09 -9.597e+08 -2.929e+09 -8.894e+08 -2.860e+09 -8.062e+08 -2.760e+09 -7.117e+08 -2.629e+09 -6.076e+08 -2.472e+09 -4.966e+08 -2.289e+09 -3.812e+08 -2.086e+09 -2.648e+08 -1.866e+09 -1.508e+08 -1.637e+09 -4.268e+07 -1.403e+09 5.635e+07 -1.172e+09 1.438e+08 -9.527e+08 2.194e+08 -7.525e+08 2.863e+08 -5.785e+08 3.535e+08 -4.344e+08 4.375e+08 -3.162e+08 5.591e+08 -2.093e+08 7.379e+08 -9.029e+07 9.883e+08 6.664e+07 1.319e+09 2.836e+08 1.737e+09 5.773e+08 2.246e+09 9.611e+08 2.851e+09 1.444e+09 3.556e+09 2.034e+09 4.365e+09 2.737e+09 5.278e+09 3.556e+09 6.298e+09 4.493e+09 7.425e+09 5.550e+09 8.658e+09 6.724e+09 9.991e+09 8.011e+09 1.142e+10 9.407e+09 1.295e+10 1.090e+10 1.455e+10 1.249e+10 1.623e+10 1.415e+10 1.797e+10 1.589e+10 1.975e+10 1.767e+10 2.158e+10 1.949e+10 2.341e+10 2.132e+10 2.525e+10 2.316e+10 2.707e+10 2.497e+10 2.885e+10 2.674e+10 3.057e+10 2.844e+10 3.222e+10 3.007e+10 3.377e+10 3.159e+10 3.520e+10 3.299e+10 3.651e+10 3.425e+10 3.766e+10 3.535e+10 3.864e+10 3.628e+10 3.944e+10 3.703e+10 4.006e+10 3.758e+10 4.047e+10 3.793e+10 4.067e+10 3.807e+10 4.066e+10 3.800e+10 4.044e+10 3.772e+10 4.000e+10 3.723e+10 3.935e+10 3.654e+10 3.851e+10 3.567e+10 3.746e+10 3.460e+10 3.624e+10 3.338e+10 3.485e+10 3.200e+10 3.331e+10 3.048e+10 3.164e+10 2.885e+10 2.985e+10 2.712e+10 2.797e+10 2.532e+10 2.602e+10 2.347e+10 2.402e+10 2.158e+10 2.199e+10 1.969e+10 1.997e+10 1.781e+10 1.796e+10 1.595e+10 1.598e+10 1.415e+10 1.407e+10 1.241e+10 1.223e+10 1.075e+10 1.048e+10 9.182e+09 8.845e+09 7.724e+09 7.328e+09 6.383e+09 5.941e+09 5.166e+09 4.696e+09 4.079e+09 3.598e+09 3.125e+09 2.649e+09 2.305e+09 1.852e+09 1.619e+09 1.206e+09 1.063e+09 7.057e+08 6.323e+08 3.467e+08 3.210e+08 1.203e+08 1.205e+08 1.652e+07 2.120e+07 -2.377e+07 -9.504e+06 -1.313e+08 -8.235e+07 -3.223e+08 -2.198e+08 -5.829e+08 -4.115e+08 -8.979e+08 -6.451e+08 -1.252e+09 -9.083e+08 -1.630e+09 -1.189e+09 -2.018e+09 -1.475e+09 -2.401e+09 -1.756e+09 -2.767e+09 -2.023e+09 -3.104e+09 -2.267e+09 -3.404e+09 -2.482e+09 -3.656e+09 -2.661e+09 -3.857e+09 -2.800e+09 -4.001e+09 -2.897e+09 -4.086e+09 -2.951e+09 -4.111e+09 -2.961e+09 -4.079e+09 -2.929e+09 -3.992e+09 -2.857e+09 -3.854e+09 -2.750e+09 -3.671e+09 -2.612e+09 -3.430e+09 -2.524e+09 -3.198e+09 -2.306e+09 -2.924e+09 -2.103e+09 -2.635e+09 -1.891e+09 -2.340e+09 -1.676e+09 -2.044e+09 -1.462e+09 -1.756e+09 -1.254e+09 -1.482e+09 -1.057e+09 -1.225e+09 -8.745e+08 -9.916e+08 -7.085e+08 -7.835e+08 -5.610e+08 -6.022e+08 -4.330e+08 -4.489e+08 -3.247e+08 -3.229e+08 -2.357e+08 -2.225e+08 -1.646e+08 -1.458e+08 -1.100e+08 -8.972e+07 -6.966e+07 -5.100e+07 -4.130e+07 -2.617e+07 -2.260e+07 -1.169e+07 -1.118e+07 -4.300e+06 -4.890e+06 -1.203e+06 -1.886e+06 -2.402e+05 -7.023e+05 -8.475e+04 -3.532e+05 -3.185e+05 -4.158e+05 -1.499e+06 -1.059e+06 -5.326e+06 -2.955e+06 -1.453e+07 -7.283e+06 -3.285e+07 -1.570e+07 -6.491e+07 -3.024e+07 -1.159e+08 -5.315e+07 -1.917e+08 -8.687e+07 -2.983e+08 -1.338e+08 -4.414e+08 -1.961e+08 -6.266e+08 -2.757e+08 -8.586e+08 -3.740e+08 -1.141e+09 -4.918e+08 -1.475e+09 -6.290e+08 -1.862e+09 -7.850e+08 -2.299e+09 -9.578e+08 -2.782e+09 -1.145e+09 -3.306e+09 -1.343e+09 -3.861e+09 -1.547e+09 -4.435e+09 -1.751e+09 -5.014e+09 -1.950e+09 -5.581e+09 -2.136e+09 -6.120e+09 -2.303e+09 -6.611e+09 -2.444e+09 -7.035e+09 -2.552e+09 -7.373e+09 -2.620e+09 -7.608e+09 -2.643e+09 -7.723e+09 -2.618e+09 -7.705e+09 -2.542e+09 -7.547e+09 -2.414e+09 -7.244e+09 -2.237e+09 -6.799e+09 -2.013e+09 -6.221e+09 -1.751e+09 -5.527e+09 -1.460e+09 -4.739e+09 -1.152e+09 -3.890e+09 -8.413e+08 -3.019e+09 -5.459e+08 -2.172e+09 -2.839e+08 -1.401e+09 -7.512e+07 -7.640e+08 6.285e+07 -3.171e+08 1.276e+08 -5.910e+07 1.831e+08 1.938e+08 3.626e+08 7.136e+08 7.386e+08 1.636e+09 1.306e+09 3.012e+09 2.064e+09 4.870e+09 3.014e+09 7.220e+09 4.155e+09 1.005e+10 5.475e+09 1.332e+10 6.959e+09 1.698e+10 8.580e+09 2.094e+10 1.030e+10 2.509e+10 1.209e+10 2.928e+10 1.388e+10 3.336e+10 1.562e+10 3.713e+10 1.725e+10 4.039e+10 1.869e+10 4.295e+10 1.988e+10 4.460e+10 2.075e+10 4.513e+10 2.123e+10 4.439e+10 2.124e+10 4.227e+10 2.075e+10 3.875e+10 1.972e+10 3.388e+10 1.815e+10 2.786e+10 1.607e+10 2.108e+10 1.353e+10 1.408e+10 1.066e+10 7.659e+09 7.689e+09 2.686e+09 5.058e+09 -9.075e+08 3.671e+09 -6.203e+09 3.890e+09 -1.789e+10 4.558e+09 -3.986e+10 4.219e+09 -7.580e+10 1.938e+09 -1.299e+11 -3.078e+09 -2.070e+11 -1.166e+10 -3.130e+11 -2.475e+10 -4.544e+11 -4.336e+10 -6.388e+11 -6.862e+10 -8.750e+11 -1.018e+11 -1.173e+12 -1.442e+11 -1.542e+12 -1.973e+11 -1.997e+12 -2.626e+11 -2.549e+12 -3.418e+11 -3.213e+12 -4.365e+11 -4.006e+12 -5.485e+11 -4.946e+12 -6.795e+11 -6.049e+12 -8.314e+11 -7.338e+12 -1.006e+12 -8.834e+12 -1.205e+12 -1.056e+13 -1.430e+12 -1.254e+13 -1.683e+12 -1.480e+13 -1.965e+12 -1.736e+13 -2.277e+12 -2.026e+13 -2.621e+12 -2.352e+13 -2.998e+12 -2.717e+13 -3.405e+12 -3.124e+13 -3.842e+12 -3.577e+13 -4.308e+12 -4.077e+13 -4.804e+12 -4.629e+13 -5.329e+12 -5.235e+13 -5.883e+12 -5.898e+13 -6.462e+12 -6.622e+13 -7.064e+12 -7.409e+13 -7.686e+12 -8.261e+13 -8.325e+12 -9.183e+13 -8.976e+12 -1.017e+14 -9.635e+12 -1.124e+14 -1.030e+13 -1.238e+14 -1.096e+13 -1.359e+14 -1.160e+13 -1.489e+14 -1.224e+13 -1.626e+14 -1.285e+13 -1.771e+14 -1.343e+13 -1.924e+14 -1.397e+13 -2.085e+14 -1.447e+13 -2.254e+14 -1.491e+13 -2.430e+14 -1.529e+13 -2.615e+14 -1.559e+13 -2.806e+14 -1.581e+13 -3.005e+14 -1.595e+13 -3.210e+14 -1.598e+13 -3.422e+14 -1.591e+13 -3.639e+14 -1.572e+13 -3.863e+14 -1.541e+13 -4.091e+14 -1.497e+13 -4.323e+14 -1.439e+13 -4.559e+14 -1.366e+13 -4.799e+14 -1.278e+13 -5.040e+14 -1.174e+13 -5.284e+14 -1.054e+13 -5.528e+14 -9.181e+12 -5.772e+14 -7.651e+12 -6.015e+14 -5.953e+12 -6.256e+14 -4.085e+12 -6.494e+14 -2.049e+12 -6.730e+14 1.507e+11 -6.963e+14 2.506e+12 -7.191e+14 5.017e+12 -7.413e+14 7.684e+12 -7.627e+14 1.050e+13 -7.834e+14 1.345e+13 -8.031e+14 1.654e+13 -8.219e+14 1.975e+13 -8.396e+14 2.306e+13 -8.561e+14 2.648e+13 -8.714e+14 2.997e+13 -8.854e+14 3.354e+13 -8.980e+14 3.715e+13 -9.092e+14 4.080e+13 -9.189e+14 4.447e+13 -9.270e+14 4.814e+13 -9.336e+14 5.180e+13 -9.386e+14 5.541e+13 -9.419e+14 5.897e+13 -9.437e+14 6.246e+13 -9.437e+14 6.586e+13 -9.421e+14 6.915e+13 -9.388e+14 7.231e+13 -9.339e+14 7.532e+13 -9.274e+14 7.818e+13 -9.193e+14 8.086e+13 -9.097e+14 8.335e+13 -8.985e+14 8.564e+13 -8.859e+14 8.771e+13 -8.719e+14 8.956e+13 -8.566e+14 9.117e+13 -8.400e+14 9.254e+13 -8.222e+14 9.366e+13 -8.033e+14 9.453e+13 -7.834e+14 9.514e+13 -7.626e+14 9.550e+13 -7.409e+14 9.560e+13 -7.184e+14 9.545e+13 -6.953e+14 9.505e+13 -6.717e+14 9.440e+13 -6.476e+14 9.351e+13 -6.232e+14 9.239e+13 -5.986e+14 9.104e+13 -5.737e+14 8.948e+13 -5.488e+14 8.773e+13 -5.238e+14 8.580e+13 -4.990e+14 8.369e+13 -4.743e+14 8.143e+13 -4.498e+14 7.903e+13 -4.256e+14 7.650e+13 -4.018e+14 7.387e+13 -3.785e+14 7.113e+13 -3.557e+14 6.832e+13 -3.334e+14 6.544e+13 -3.118e+14 6.252e+13 -2.909e+14 5.956e+13 -2.706e+14 5.659e+13 -2.511e+14 5.361e+13 -2.324e+14 5.064e+13 -2.145e+14 4.770e+13 -1.974e+14 4.479e+13 -1.811e+14 4.193e+13 -1.657e+14 3.913e+13 -1.511e+14 3.640e+13 -1.373e+14 3.375e+13 -1.244e+14 3.118e+13 -1.123e+14 2.871e+13 -1.010e+14 2.633e+13 -9.055e+13 2.406e+13 -8.083e+13 2.190e+13 -7.185e+13 1.986e+13 -6.360e+13 1.792e+13 -5.604e+13 1.611e+13 -4.914e+13 1.440e+13 -4.289e+13 1.282e+13 -3.723e+13 1.135e+13 -3.214e+13 9.996e+12 -2.757e+13 8.752e+12 -2.351e+13 7.615e+12 -1.989e+13 6.580e+12 -1.671e+13 5.646e+12 -1.393e+13 4.808e+12 -1.150e+13 4.058e+12 -9.403e+12 3.394e+12 -7.603e+12 2.810e+12 -6.069e+12 2.299e+12 -4.776e+12 1.857e+12 -3.698e+12 1.478e+12 -2.807e+12 1.157e+12 -2.084e+12 8.872e+11 -1.504e+12 6.645e+11 -1.048e+12 4.833e+11 -6.987e+11 3.389e+11 -4.386e+11 2.265e+11 -2.525e+11 1.418e+11 -1.274e+11 8.073e+10 -5.114e+10 3.956e+10 -1.273e+10 1.510e+10 2.478e+09 5.193e+09 1.791e+10 1.346e+09 4.510e+10 -5.459e+09 8.135e+10 -1.726e+10 1.221e+11 -3.254e+10 1.636e+11 -4.977e+10 2.032e+11 -6.760e+10 2.386e+11 -8.492e+10 2.683e+11 -1.009e+11 2.916e+11 -1.148e+11 3.078e+11 -1.263e+11 3.169e+11 -1.349e+11 3.192e+11 -1.407e+11 3.151e+11 -1.435e+11 3.053e+11 -1.436e+11 2.907e+11 -1.409e+11 2.719e+11 -1.360e+11 2.501e+11 -1.289e+11 2.260e+11 -1.202e+11 2.007e+11 -1.101e+11 1.748e+11 -9.900e+10 1.491e+11 -8.734e+10 1.244e+11 -7.548e+10 1.011e+11 -6.373e+10 7.971e+10 -5.239e+10 6.064e+10 -4.174e+10 4.408e+10 -3.200e+10 3.018e+10 -2.336e+10 1.902e+10 -1.598e+10 1.063e+10 -9.989e+09 4.801e+09 -5.419e+09 1.376e+09 -2.309e+09 -2.866e+07 -6.932e+08 -1.074e+09 -1.514e+08 -3.447e+09 9.032e+08 -7.163e+09 2.991e+09 -1.193e+10 6.086e+09 -1.741e+10 1.005e+10 -2.333e+10 1.473e+10 -2.941e+10 1.996e+10 -3.540e+10 2.557e+10 -4.105e+10 3.140e+10 -4.621e+10 3.729e+10 0.005 -51.980 -50.972 -49.964 -48.955 -47.976 -47.099 -46.315 -45.617 -44.999 -44.456 -43.984 -43.580 -43.242 -42.968 -42.757 -42.607 -42.519 -42.491 -42.525 -42.622 -42.783 -43.009 -43.303 -43.669 -44.110 -44.631 -45.239 -45.939 -46.742 -47.658 -48.703 -49.895 -51.257 -52.824 -54.642 -56.777 -59.337 -62.507 -66.663 -72.849 -88.682 -82.353 -75.473 -72.055 -69.138 -65.939 -62.674 -59.631 -56.914 -54.519 -52.406 -50.537 -48.872 -47.385 -46.052 -44.853 -43.775 -42.805 -41.932 -41.150 -40.450 -39.829 -39.281 -38.803 -38.392 -38.045 -37.762 -37.540 -37.380 -37.280 -37.241 -37.263 -37.346 -37.494 -37.706 -37.985 -38.335 -38.759 -39.260 -39.845 -40.519 -41.289 -42.164 -43.154 -44.270 -45.524 -46.932 -48.505 -50.254 -52.178 -54.261 -56.459 -58.717 -61.008 -63.282 -64.826 -63.926 -60.656 -56.863 -53.486 -50.594 -48.099 -45.921 -44.000 -42.290 -40.760 -39.384 -38.142 -37.021 -36.008 -35.092 -34.268 -33.527 -32.866 -32.280 -31.766 -31.321 -30.944 -30.634 -30.389 -30.210 -30.098 -30.052 -30.076 -30.171 -30.340 -30.588 -30.919 -31.340 -31.860 -32.488 -33.237 -34.123 -35.168 -36.398 -37.853 -39.585 -41.668 -44.211 -47.362 -51.229 -55.308 -57.713 -58.036 -59.712 -63.140 -59.829 -50.409 -44.616 -40.329 -36.873 -33.953 -31.416 -29.166 -27.143 -25.305 -23.620 -22.065 -20.624 -19.280 -18.024 -16.846 -15.739 -14.695 -13.711 -12.780 -11.900 -11.066 -10.276 -9.527 -8.817 -8.144 -7.505 -6.900 -6.327 -5.784 -5.270 -4.785 -4.327 -3.896 -3.490 -3.108 -2.752 -2.419 -2.109 -1.821 -1.556 -1.313 -1.091 -0.890 -0.711 -0.552 -0.413 -0.294 -0.196 -0.117 -0.058 -0.019 0.000 -0.000 -0.020 -0.059 -0.118 -0.197 -0.295 -0.414 -0.553 -0.712 -0.892 -1.092 -1.314 -1.557 -1.822 -2.109 -2.419 -2.752 -3.109 -3.490 -3.896 -4.327 -4.785 -5.270 -5.784 -6.327 -6.901 -7.507 -8.146 -8.821 -9.532 -10.284 -11.077 -11.915 -12.800 -13.738 -14.732 -15.788 -16.911 -18.111 -19.395 -20.776 -22.269 -23.893 -25.676 -27.655 -29.884 -32.452 -35.512 -39.372 -44.849 -56.225 -55.825 -49.448 -45.876 -44.330 -43.763 -43.835 -44.365 -45.146 -45.781 -45.678 -44.572 -42.844 -40.992 -39.278 -37.777 -36.488 -35.392 -34.463 -33.682 -33.031 -32.496 -32.065 -31.730 -31.483 -31.319 -31.232 -31.220 -31.279 -31.407 -31.603 -31.866 -32.197 -32.596 -33.064 -33.603 -34.215 -34.903 -35.671 -36.525 -37.471 -38.516 -39.670 -40.943 -42.351 -43.912 -45.648 -47.586 -49.763 -52.220 -55.005 -58.151 -61.620 -65.107 -67.755 -68.420 -66.875 -64.064 -60.972 -58.075 -55.508 -53.273 -51.335 -49.651 -48.186 -46.908 -45.795 -44.825 -43.984 -43.258 -42.638 -42.116 -41.684 -41.337 -41.071 -40.883 -40.769 -40.729 -40.761 -40.864 -41.040 -41.287 -41.609 -42.007 -42.485 -43.045 -43.694 -44.438 -45.285 -46.244 -47.330 -48.558 -49.948 -51.529 -53.332 -55.400 -57.776 -60.470 -63.328 -65.772 -66.948 -66.994 -66.920 -67.423 -68.887 -71.367 -72.690 -68.796 -63.974 -60.212 -57.250 -54.831 -52.801 -51.065 -49.559 -48.241 -47.081 -46.055 -45.148 -44.344 -43.635 -43.010 -42.465 -41.991 -41.586 -41.246 -40.966 -40.745 -40.581 -40.471 -40.414 -40.411 -40.458 -40.558 -40.708 -40.911 -41.165 -41.472 -41.832 -42.248 -42.721 -43.254 -43.848 -44.507 -45.235 -46.036 -46.917 -47.883 -48.943 -50.030 -51.117 -52.204 0 1 1.0 3348270364.71 S6 HV 36.71 40.21 0.05 -5.298e+08 -5.114e+08 -4.896e+08 -4.328e+08 -4.490e+08 -3.607e+08 -4.087e+08 -2.953e+08 -3.691e+08 -2.368e+08 -3.309e+08 -1.851e+08 -2.943e+08 -1.402e+08 -2.597e+08 -1.016e+08 -2.275e+08 -6.898e+07 -1.978e+08 -4.193e+07 -1.707e+08 -1.984e+07 -1.462e+08 -2.146e+06 -1.243e+08 1.177e+07 -1.048e+08 2.251e+07 -8.761e+07 3.060e+07 -7.250e+07 3.653e+07 -5.914e+07 4.077e+07 -4.731e+07 4.367e+07 -3.674e+07 4.550e+07 -2.720e+07 4.646e+07 -1.850e+07 4.672e+07 -1.048e+07 4.640e+07 -2.969e+06 4.560e+07 4.165e+06 4.439e+07 1.107e+07 4.283e+07 1.791e+07 4.094e+07 2.482e+07 3.873e+07 3.197e+07 3.613e+07 3.951e+07 3.307e+07 4.755e+07 2.940e+07 5.617e+07 2.499e+07 6.543e+07 1.965e+07 7.531e+07 1.323e+07 8.578e+07 5.571e+06 9.678e+07 -3.463e+06 1.082e+08 -1.396e+07 1.199e+08 -2.598e+07 1.317e+08 -3.956e+07 1.436e+08 -5.466e+07 1.553e+08 -7.123e+07 1.667e+08 -8.917e+07 1.777e+08 -1.084e+08 1.881e+08 -1.286e+08 1.979e+08 -1.497e+08 2.069e+08 -1.714e+08 2.150e+08 -1.934e+08 2.222e+08 -2.155e+08 2.284e+08 -2.374e+08 2.335e+08 -2.587e+08 2.376e+08 -2.790e+08 2.404e+08 -2.981e+08 2.421e+08 -3.156e+08 2.426e+08 -3.313e+08 2.419e+08 -3.447e+08 2.401e+08 -3.557e+08 2.370e+08 -3.641e+08 2.328e+08 -3.696e+08 2.275e+08 -3.722e+08 2.211e+08 -3.718e+08 2.137e+08 -3.684e+08 2.053e+08 -3.620e+08 1.961e+08 -3.530e+08 1.861e+08 -3.413e+08 1.754e+08 -3.273e+08 1.642e+08 -3.112e+08 1.526e+08 -2.934e+08 1.408e+08 -2.742e+08 1.288e+08 -2.540e+08 1.169e+08 -2.332e+08 1.052e+08 -2.122e+08 9.380e+07 -1.913e+08 8.286e+07 -1.709e+08 7.251e+07 -1.512e+08 6.282e+07 -1.325e+08 5.386e+07 -1.149e+08 4.570e+07 -9.877e+07 3.836e+07 -8.406e+07 3.184e+07 -7.083e+07 2.613e+07 -5.914e+07 2.120e+07 -4.894e+07 1.700e+07 -4.015e+07 1.348e+07 -3.272e+07 1.056e+07 -2.651e+07 8.185e+06 -2.141e+07 6.277e+06 -1.729e+07 4.766e+06 -1.403e+07 3.583e+06 -1.149e+07 2.671e+06 -9.576e+06 1.971e+06 -8.183e+06 1.433e+06 -7.230e+06 1.017e+06 -6.658e+06 6.849e+05 -6.423e+06 4.063e+05 -6.505e+06 1.566e+05 -6.903e+06 -8.416e+04 -7.632e+06 -3.317e+05 -8.728e+06 -5.971e+05 -1.024e+07 -8.879e+05 -1.221e+07 -1.208e+06 -1.473e+07 -1.556e+06 -1.785e+07 -1.927e+06 -2.165e+07 -2.308e+06 -2.620e+07 -2.681e+06 -3.154e+07 -3.022e+06 -3.772e+07 -3.297e+06 -4.478e+07 -3.464e+06 -5.271e+07 -3.476e+06 -6.150e+07 -3.275e+06 -7.110e+07 -2.799e+06 -8.145e+07 -1.985e+06 -9.243e+07 -7.645e+05 -1.039e+08 9.262e+05 -1.158e+08 3.145e+06 -1.278e+08 5.944e+06 -1.397e+08 9.360e+06 -1.515e+08 1.341e+07 -1.627e+08 1.811e+07 -1.732e+08 2.343e+07 -1.827e+08 2.933e+07 -1.910e+08 3.576e+07 -1.980e+08 4.263e+07 -2.034e+08 4.984e+07 -2.071e+08 5.728e+07 -2.090e+08 6.483e+07 -2.090e+08 7.234e+07 -2.071e+08 7.970e+07 -2.034e+08 8.679e+07 -1.980e+08 9.347e+07 -1.909e+08 9.968e+07 -1.824e+08 1.053e+08 -1.726e+08 1.104e+08 -1.618e+08 1.148e+08 -1.503e+08 1.186e+08 -1.381e+08 1.219e+08 -1.257e+08 1.246e+08 -1.131e+08 1.269e+08 -1.006e+08 1.289e+08 -8.834e+07 1.306e+08 -7.638e+07 1.321e+08 -6.483e+07 1.335e+08 -5.371e+07 1.348e+08 -4.304e+07 1.360e+08 -3.284e+07 1.370e+08 -2.310e+07 1.378e+08 -1.383e+07 1.381e+08 -5.088e+06 1.379e+08 3.058e+06 1.369e+08 1.052e+07 1.351e+08 1.716e+07 1.322e+08 2.284e+07 1.280e+08 2.743e+07 1.225e+08 3.078e+07 1.155e+08 3.279e+07 1.071e+08 3.338e+07 9.737e+07 3.253e+07 8.635e+07 3.030e+07 7.431e+07 2.681e+07 6.157e+07 2.230e+07 4.858e+07 1.710e+07 3.587e+07 1.165e+07 2.410e+07 6.485e+06 1.406e+07 2.235e+06 6.608e+06 -5.815e+05 2.235e+06 -2.504e+06 -9.788e+05 -6.251e+06 -7.339e+06 -1.486e+07 -1.972e+07 -2.960e+07 -3.943e+07 -5.150e+07 -6.749e+07 -8.169e+07 -1.047e+08 -1.213e+08 -1.518e+08 -1.713e+08 -2.093e+08 -2.327e+08 -2.774e+08 -3.062e+08 -3.562e+08 -3.924e+08 -4.454e+08 -4.917e+08 -5.446e+08 -6.042e+08 -6.528e+08 -7.294e+08 -7.690e+08 -8.671e+08 -8.919e+08 -1.016e+09 -1.020e+09 -1.175e+09 -1.150e+09 -1.343e+09 -1.282e+09 -1.517e+09 -1.412e+09 -1.694e+09 -1.538e+09 -1.874e+09 -1.658e+09 -2.051e+09 -1.769e+09 -2.224e+09 -1.868e+09 -2.390e+09 -1.954e+09 -2.544e+09 -2.023e+09 -2.684e+09 -2.073e+09 -2.806e+09 -2.103e+09 -2.908e+09 -2.112e+09 -2.987e+09 -2.098e+09 -3.039e+09 -2.059e+09 -3.064e+09 -1.997e+09 -3.059e+09 -1.912e+09 -3.024e+09 -1.803e+09 -2.958e+09 -1.673e+09 -2.862e+09 -1.524e+09 -2.737e+09 -1.358e+09 -2.584e+09 -1.179e+09 -2.406e+09 -9.913e+08 -2.208e+09 -7.993e+08 -1.993e+09 -6.084e+08 -1.766e+09 -4.240e+08 -1.535e+09 -2.516e+08 -1.305e+09 -9.571e+07 -1.085e+09 4.120e+07 -8.835e+08 1.609e+08 -7.090e+08 2.725e+08 -5.676e+08 3.950e+08 -4.591e+08 5.547e+08 -3.727e+08 7.788e+08 -2.878e+08 1.089e+09 -1.797e+08 1.499e+09 -2.668e+07 2.019e+09 1.881e+08 2.656e+09 4.775e+08 3.414e+09 8.506e+08 4.298e+09 1.314e+09 5.309e+09 1.873e+09 6.448e+09 2.529e+09 7.712e+09 3.285e+09 9.101e+09 4.141e+09 1.061e+10 5.094e+09 1.222e+10 6.138e+09 1.394e+10 7.270e+09 1.575e+10 8.482e+09 1.764e+10 9.763e+09 1.959e+10 1.111e+10 2.159e+10 1.249e+10 2.362e+10 1.392e+10 2.567e+10 1.537e+10 2.771e+10 1.682e+10 2.973e+10 1.826e+10 3.171e+10 1.968e+10 3.363e+10 2.106e+10 3.547e+10 2.238e+10 3.721e+10 2.363e+10 3.883e+10 2.480e+10 4.032e+10 2.586e+10 4.165e+10 2.682e+10 4.282e+10 2.765e+10 4.381e+10 2.835e+10 4.460e+10 2.891e+10 4.518e+10 2.932e+10 4.554e+10 2.958e+10 4.567e+10 2.968e+10 4.558e+10 2.962e+10 4.524e+10 2.940e+10 4.467e+10 2.903e+10 4.386e+10 2.851e+10 4.281e+10 2.784e+10 4.154e+10 2.703e+10 4.005e+10 2.609e+10 3.836e+10 2.503e+10 3.649e+10 2.386e+10 3.445e+10 2.259e+10 3.227e+10 2.124e+10 2.997e+10 1.983e+10 2.758e+10 1.837e+10 2.513e+10 1.687e+10 2.266e+10 1.536e+10 2.020e+10 1.384e+10 1.777e+10 1.235e+10 1.541e+10 1.089e+10 1.315e+10 9.474e+09 1.101e+10 8.124e+09 9.026e+09 6.849e+09 7.212e+09 5.665e+09 5.588e+09 4.580e+09 4.167e+09 3.604e+09 2.958e+09 2.744e+09 1.966e+09 2.004e+09 1.186e+09 1.387e+09 6.153e+08 8.941e+08 2.371e+08 5.264e+08 2.226e+07 2.846e+08 -1.027e+08 1.642e+08 -2.625e+08 1.090e+08 -5.268e+08 3.740e+07 -8.940e+08 -8.739e+07 -1.342e+09 -2.685e+08 -1.847e+09 -4.979e+08 -2.384e+09 -7.635e+08 -2.931e+09 -1.053e+09 -3.469e+09 -1.354e+09 -3.978e+09 -1.654e+09 -4.444e+09 -1.942e+09 -4.854e+09 -2.208e+09 -5.198e+09 -2.444e+09 -5.469e+09 -2.643e+09 -5.664e+09 -2.801e+09 -5.779e+09 -2.912e+09 -5.817e+09 -2.977e+09 -5.779e+09 -2.995e+09 -5.671e+09 -2.967e+09 -5.499e+09 -2.897e+09 -5.270e+09 -2.788e+09 -4.992e+09 -2.646e+09 -4.673e+09 -2.475e+09 -4.323e+09 -2.283e+09 -3.954e+09 -2.099e+09 -3.572e+09 -1.893e+09 -3.182e+09 -1.669e+09 -2.796e+09 -1.448e+09 -2.420e+09 -1.235e+09 -2.061e+09 -1.032e+09 -1.724e+09 -8.457e+08 -1.415e+09 -6.771e+08 -1.135e+09 -5.282e+08 -8.883e+08 -4.001e+08 -6.752e+08 -2.929e+08 -4.959e+08 -2.059e+08 -3.496e+08 -1.378e+08 -2.344e+08 -8.663e+07 -1.473e+08 -5.022e+07 -8.513e+07 -2.604e+07 -4.368e+07 -1.140e+07 -1.868e+07 -3.694e+06 -5.789e+06 -5.365e+05 -8.260e+05 1.698e+05 2.075e+05 1.766e+05 1.073e+06 2.857e+05 1.611e+06 -4.728e+04 1.304e+06 -7.614e+05 3.763e+05 -2.211e+06 -2.579e+06 -6.554e+06 -1.205e+07 -1.689e+07 -3.402e+07 -3.651e+07 -7.573e+07 -6.923e+07 -1.456e+08 -1.192e+08 -2.524e+08 -1.908e+08 -4.058e+08 -2.882e+08 -6.149e+08 -4.154e+08 -8.878e+08 -5.758e+08 -1.231e+09 -7.719e+08 -1.651e+09 -1.006e+09 -2.148e+09 -1.277e+09 -2.722e+09 -1.584e+09 -3.370e+09 -1.925e+09 -4.081e+09 -2.295e+09 -4.846e+09 -2.688e+09 -5.651e+09 -3.095e+09 -6.474e+09 -3.508e+09 -7.295e+09 -3.914e+09 -8.091e+09 -4.303e+09 -8.834e+09 -4.661e+09 -9.499e+09 -4.975e+09 -1.006e+10 -5.232e+09 -1.049e+10 -5.420e+09 -1.078e+10 -5.529e+09 -1.089e+10 -5.550e+09 -1.083e+10 -5.477e+09 -1.058e+10 -5.307e+09 -1.013e+10 -5.040e+09 -9.510e+09 -4.681e+09 -8.717e+09 -4.240e+09 -7.777e+09 -3.729e+09 -6.723e+09 -3.166e+09 -5.591e+09 -2.573e+09 -4.426e+09 -1.975e+09 -3.285e+09 -1.403e+09 -2.223e+09 -8.868e+08 -1.304e+09 -4.611e+08 -5.961e+08 -1.599e+08 -1.652e+08 -6.883e+06 4.944e+07 9.377e+07 3.911e+08 3.555e+08 1.176e+09 8.753e+08 2.471e+09 1.664e+09 4.312e+09 2.733e+09 6.719e+09 4.087e+09 9.694e+09 5.720e+09 1.321e+10 7.615e+09 1.723e+10 9.746e+09 2.167e+10 1.207e+10 2.642e+10 1.454e+10 3.136e+10 1.709e+10 3.632e+10 1.964e+10 4.111e+10 2.211e+10 4.550e+10 2.441e+10 4.927e+10 2.643e+10 5.217e+10 2.808e+10 5.396e+10 2.924e+10 5.441e+10 2.984e+10 5.335e+10 2.976e+10 5.064e+10 2.896e+10 4.626e+10 2.739e+10 4.029e+10 2.505e+10 3.299e+10 2.198e+10 2.480e+10 1.831e+10 1.641e+10 1.422e+10 8.751e+09 1.004e+10 2.869e+09 6.405e+09 -1.412e+09 4.404e+09 -7.884e+09 4.215e+09 -2.214e+10 4.011e+09 -4.875e+10 1.665e+09 -9.200e+10 -4.313e+09 -1.568e+11 -1.530e+10 -2.487e+11 -3.279e+10 -3.745e+11 -5.852e+10 -5.417e+11 -9.442e+10 -7.587e+11 -1.426e+11 -1.036e+12 -2.057e+11 -1.383e+12 -2.862e+11 -1.812e+12 -3.872e+11 -2.338e+12 -5.120e+11 -2.974e+12 -6.639e+11 -3.737e+12 -8.468e+11 -4.643e+12 -1.065e+12 -5.712e+12 -1.322e+12 -6.962e+12 -1.623e+12 -8.417e+12 -1.972e+12 -1.010e+13 -2.375e+12 -1.203e+13 -2.836e+12 -1.424e+13 -3.360e+12 -1.675e+13 -3.953e+12 -1.959e+13 -4.619e+12 -2.279e+13 -5.364e+12 -2.638e+13 -6.193e+12 -3.038e+13 -7.108e+12 -3.484e+13 -8.112e+12 -3.978e+13 -9.210e+12 -4.522e+13 -1.041e+13 -5.122e+13 -1.171e+13 -5.778e+13 -1.311e+13 -6.495e+13 -1.463e+13 -7.275e+13 -1.626e+13 -8.122e+13 -1.800e+13 -9.036e+13 -1.985e+13 -1.002e+14 -2.183e+13 -1.108e+14 -2.392e+13 -1.222e+14 -2.612e+13 -1.343e+14 -2.844e+13 -1.472e+14 -3.087e+13 -1.609e+14 -3.341e+13 -1.754e+14 -3.606e+13 -1.907e+14 -3.881e+13 -2.068e+14 -4.165e+13 -2.237e+14 -4.459e+13 -2.414e+14 -4.762e+13 -2.598e+14 -5.072e+13 -2.790e+14 -5.389e+13 -2.989e+14 -5.712e+13 -3.194e+14 -6.040e+13 -3.407e+14 -6.372e+13 -3.624e+14 -6.706e+13 -3.848e+14 -7.042e+13 -4.076e+14 -7.378e+13 -4.309e+14 -7.713e+13 -4.545e+14 -8.045e+13 -4.784e+14 -8.373e+13 -5.026e+14 -8.694e+13 -5.269e+14 -9.009e+13 -5.514e+14 -9.314e+13 -5.758e+14 -9.608e+13 -6.001e+14 -9.890e+13 -6.243e+14 -1.016e+14 -6.482e+14 -1.041e+14 -6.718e+14 -1.065e+14 -6.950e+14 -1.086e+14 -7.178e+14 -1.106e+14 -7.401e+14 -1.124e+14 -7.617e+14 -1.140e+14 -7.826e+14 -1.153e+14 -8.026e+14 -1.164e+14 -8.217e+14 -1.172e+14 -8.397e+14 -1.178e+14 -8.567e+14 -1.181e+14 -8.725e+14 -1.182e+14 -8.870e+14 -1.180e+14 -9.002e+14 -1.175e+14 -9.121e+14 -1.168e+14 -9.225e+14 -1.158e+14 -9.314e+14 -1.145e+14 -9.388e+14 -1.131e+14 -9.447e+14 -1.113e+14 -9.489e+14 -1.094e+14 -9.515e+14 -1.072e+14 -9.524e+14 -1.049e+14 -9.517e+14 -1.024e+14 -9.494e+14 -9.964e+13 -9.453e+14 -9.678e+13 -9.397e+14 -9.377e+13 -9.324e+14 -9.064e+13 -9.235e+14 -8.740e+13 -9.131e+14 -8.407e+13 -9.012e+14 -8.067e+13 -8.878e+14 -7.720e+13 -8.731e+14 -7.369e+13 -8.570e+14 -7.014e+13 -8.397e+14 -6.658e+13 -8.212e+14 -6.303e+13 -8.016e+14 -5.948e+13 -7.810e+14 -5.596e+13 -7.595e+14 -5.248e+13 -7.373e+14 -4.904e+13 -7.142e+14 -4.567e+13 -6.906e+14 -4.237e+13 -6.665e+14 -3.915e+13 -6.420e+14 -3.603e+13 -6.171e+14 -3.303e+13 -5.921e+14 -3.014e+13 -5.669e+14 -2.736e+13 -5.418e+14 -2.469e+13 -5.166e+14 -2.215e+13 -4.916e+14 -1.972e+13 -4.668e+14 -1.743e+13 -4.423e+14 -1.527e+13 -4.182e+14 -1.324e+13 -3.946e+14 -1.134e+13 -3.714e+14 -9.582e+12 -3.488e+14 -7.956e+12 -3.268e+14 -6.465e+12 -3.054e+14 -5.106e+12 -2.848e+14 -3.875e+12 -2.648e+14 -2.771e+12 -2.457e+14 -1.789e+12 -2.273e+14 -9.235e+11 -2.097e+14 -1.705e+11 -1.930e+14 4.765e+11 -1.771e+14 1.024e+12 -1.620e+14 1.478e+12 -1.477e+14 1.845e+12 -1.343e+14 2.134e+12 -1.217e+14 2.349e+12 -1.099e+14 2.500e+12 -9.883e+13 2.593e+12 -8.859e+13 2.635e+12 -7.910e+13 2.633e+12 -7.033e+13 2.593e+12 -6.228e+13 2.521e+12 -5.490e+13 2.424e+12 -4.815e+13 2.306e+12 -4.204e+13 2.172e+12 -3.651e+13 2.027e+12 -3.152e+13 1.875e+12 -2.706e+13 1.720e+12 -2.308e+13 1.564e+12 -1.954e+13 1.410e+12 -1.642e+13 1.260e+12 -1.370e+13 1.115e+12 -1.132e+13 9.782e+11 -9.258e+12 8.498e+11 -7.491e+12 7.308e+11 -5.986e+12 6.214e+11 -4.716e+12 5.222e+11 -3.656e+12 4.330e+11 -2.781e+12 3.536e+11 -2.068e+12 2.839e+11 -1.497e+12 2.233e+11 -1.047e+12 1.714e+11 -7.012e+11 1.277e+11 -4.431e+11 9.150e+10 -2.578e+11 6.221e+10 -1.323e+11 3.923e+10 -5.484e+10 2.194e+10 -1.497e+10 1.005e+10 8.551e+08 5.179e+09 1.533e+10 5.740e+09 4.081e+10 6.761e+09 7.549e+10 5.827e+09 1.150e+11 3.109e+09 1.558e+11 -9.613e+08 1.950e+11 -5.946e+09 2.306e+11 -1.144e+10 2.611e+11 -1.709e+10 2.856e+11 -2.258e+10 3.034e+11 -2.766e+10 3.146e+11 -3.212e+10 3.191e+11 -3.580e+10 3.174e+11 -3.859e+10 3.100e+11 -4.044e+10 2.977e+11 -4.131e+10 2.812e+11 -4.124e+10 2.614e+11 -4.027e+10 2.391e+11 -3.850e+10 2.151e+11 -3.602e+10 1.901e+11 -3.298e+10 1.650e+11 -2.950e+10 1.403e+11 -2.574e+10 1.167e+11 -2.185e+10 9.458e+10 -1.796e+10 7.440e+10 -1.421e+10 5.643e+10 -1.071e+10 4.087e+10 -7.576e+09 2.787e+10 -4.897e+09 1.751e+10 -2.753e+09 9.697e+09 -1.179e+09 4.332e+09 -2.002e+08 1.251e+09 1.982e+08 1.116e+08 2.860e+08 -1.018e+09 9.565e+08 -3.433e+09 2.230e+09 -7.114e+09 3.986e+09 -1.178e+10 6.138e+09 -1.714e+10 8.611e+09 -2.293e+10 1.133e+10 -2.886e+10 1.420e+10 -3.470e+10 1.717e+10 -4.024e+10 2.014e+10 0.005 -51.469 -50.457 -49.445 -48.433 -47.450 -46.566 -45.773 -45.064 -44.432 -43.873 -43.384 -42.960 -42.601 -42.303 -42.065 -41.886 -41.765 -41.703 -41.699 -41.754 -41.868 -42.044 -42.283 -42.588 -42.962 -43.408 -43.933 -44.541 -45.241 -46.043 -46.958 -48.002 -49.197 -50.571 -52.166 -54.042 -56.298 -59.110 -62.843 -68.535 -83.808 -76.918 -69.677 -66.562 -65.145 -64.634 -64.662 -64.786 -64.290 -62.675 -60.300 -57.787 -55.451 -53.370 -51.537 -49.922 -48.498 -47.239 -46.122 -45.132 -44.255 -43.481 -42.801 -42.210 -41.701 -41.271 -40.915 -40.633 -40.421 -40.279 -40.206 -40.202 -40.268 -40.405 -40.616 -40.901 -41.265 -41.712 -42.246 -42.874 -43.602 -44.438 -45.392 -46.474 -47.695 -49.064 -50.584 -52.247 -54.019 -55.827 -57.563 -59.136 -60.568 -62.030 -63.661 -64.819 -63.747 -60.444 -56.694 -53.394 -50.591 -48.189 -46.099 -44.260 -42.628 -41.169 -39.859 -38.679 -37.615 -36.655 -35.791 -35.016 -34.323 -33.709 -33.169 -32.700 -32.301 -31.971 -31.709 -31.514 -31.387 -31.329 -31.342 -31.429 -31.592 -31.837 -32.168 -32.593 -33.120 -33.762 -34.533 -35.450 -36.537 -37.828 -39.365 -41.207 -43.431 -46.112 -49.187 -51.990 -53.084 -52.468 -51.903 -52.468 -55.229 -59.553 -56.898 -47.961 -42.534 -38.532 -35.303 -32.569 -30.186 -28.066 -26.153 -24.410 -22.808 -21.326 -19.948 -18.662 -17.458 -16.326 -15.260 -14.254 -13.304 -12.405 -11.553 -10.746 -9.980 -9.254 -8.565 -7.911 -7.290 -6.702 -6.144 -5.616 -5.116 -4.643 -4.197 -3.776 -3.381 -3.010 -2.662 -2.338 -2.036 -1.756 -1.498 -1.262 -1.046 -0.851 -0.677 -0.523 -0.389 -0.275 -0.181 -0.107 -0.052 -0.016 0.000 -0.003 -0.026 -0.068 -0.129 -0.210 -0.310 -0.431 -0.571 -0.732 -0.913 -1.114 -1.337 -1.581 -1.847 -2.134 -2.445 -2.778 -3.134 -3.515 -3.921 -4.352 -4.809 -5.294 -5.806 -6.348 -6.921 -7.525 -8.163 -8.836 -9.546 -10.295 -11.086 -11.921 -12.804 -13.739 -14.730 -15.782 -16.901 -18.096 -19.376 -20.752 -22.240 -23.859 -25.635 -27.606 -29.829 -32.388 -35.438 -39.289 -44.755 -56.120 -55.708 -49.320 -45.739 -44.190 -43.633 -43.748 -44.394 -45.450 -46.617 -47.169 -46.366 -44.509 -42.389 -40.437 -38.757 -37.338 -36.146 -35.147 -34.313 -33.621 -33.055 -32.600 -32.247 -31.988 -31.816 -31.725 -31.711 -31.771 -31.904 -32.107 -32.381 -32.725 -33.139 -33.626 -34.186 -34.822 -35.538 -36.337 -37.224 -38.204 -39.285 -40.474 -41.780 -43.210 -44.775 -46.480 -48.327 -50.311 -52.407 -54.575 -56.749 -58.829 -60.578 -61.439 -60.787 -58.779 -56.241 -53.752 -51.500 -49.506 -47.749 -46.198 -44.826 -43.612 -42.535 -41.581 -40.738 -39.994 -39.342 -38.775 -38.286 -37.870 -37.525 -37.246 -37.031 -36.877 -36.782 -36.746 -36.768 -36.847 -36.982 -37.175 -37.424 -37.733 -38.101 -38.531 -39.025 -39.585 -40.216 -40.922 -41.707 -42.579 -43.546 -44.617 -45.805 -47.126 -48.601 -50.256 -52.127 -54.266 -56.746 -59.681 -63.254 -67.756 -73.297 -77.818 -77.382 -76.282 -75.771 -73.706 -69.662 -65.601 -62.194 -59.383 -57.034 -55.042 -53.333 -51.852 -50.562 -49.434 -48.446 -47.580 -46.824 -46.167 -45.600 -45.117 -44.710 -44.377 -44.114 -43.916 -43.782 -43.709 -43.698 -43.745 -43.851 -44.017 -44.241 -44.524 -44.868 -45.275 -45.745 -46.282 -46.889 -47.570 -48.329 -49.173 -50.108 -51.144 -52.208 -53.273 -54.337 0 1 1.0 3348270364.71 S6 VV 36.71 40.21 0.05 -3.800e+08 6.441e+08 -3.168e+08 6.198e+08 -2.574e+08 5.933e+08 -2.018e+08 5.651e+08 -1.502e+08 5.356e+08 -1.026e+08 5.052e+08 -5.877e+07 4.743e+08 -1.867e+07 4.432e+08 1.788e+07 4.123e+08 5.121e+07 3.818e+08 8.169e+07 3.520e+08 1.097e+08 3.231e+08 1.356e+08 2.953e+08 1.602e+08 2.685e+08 1.837e+08 2.427e+08 2.069e+08 2.178e+08 2.302e+08 1.933e+08 2.541e+08 1.690e+08 2.787e+08 1.443e+08 3.043e+08 1.186e+08 3.309e+08 9.163e+07 3.582e+08 6.288e+07 3.861e+08 3.199e+07 4.140e+08 -1.181e+06 4.414e+08 -3.674e+07 4.680e+08 -7.468e+07 4.931e+08 -1.148e+08 5.162e+08 -1.568e+08 5.368e+08 -2.004e+08 5.546e+08 -2.451e+08 5.691e+08 -2.904e+08 5.801e+08 -3.359e+08 5.876e+08 -3.811e+08 5.913e+08 -4.253e+08 5.913e+08 -4.683e+08 5.878e+08 -5.094e+08 5.809e+08 -5.482e+08 5.708e+08 -5.843e+08 5.578e+08 -6.175e+08 5.424e+08 -6.473e+08 5.247e+08 -6.735e+08 5.053e+08 -6.959e+08 4.845e+08 -7.143e+08 4.626e+08 -7.284e+08 4.401e+08 -7.383e+08 4.172e+08 -7.438e+08 3.943e+08 -7.449e+08 3.716e+08 -7.415e+08 3.494e+08 -7.337e+08 3.279e+08 -7.215e+08 3.071e+08 -7.051e+08 2.873e+08 -6.847e+08 2.685e+08 -6.604e+08 2.506e+08 -6.325e+08 2.336e+08 -6.015e+08 2.176e+08 -5.676e+08 2.023e+08 -5.313e+08 1.878e+08 -4.931e+08 1.739e+08 -4.535e+08 1.605e+08 -4.130e+08 1.476e+08 -3.723e+08 1.350e+08 -3.319e+08 1.227e+08 -2.923e+08 1.107e+08 -2.541e+08 9.898e+07 -2.177e+08 8.752e+07 -1.836e+08 7.643e+07 -1.521e+08 6.578e+07 -1.236e+08 5.565e+07 -9.812e+07 4.617e+07 -7.591e+07 3.742e+07 -5.693e+07 2.948e+07 -4.109e+07 2.246e+07 -2.828e+07 1.641e+07 -1.828e+07 1.134e+07 -1.082e+07 7.297e+06 -5.598e+06 4.255e+06 -2.273e+06 2.189e+06 -4.533e+05 1.051e+06 3.907e+05 5.169e+05 1.087e+06 -5.821e+04 2.186e+06 -1.026e+06 3.653e+06 -2.436e+06 5.280e+06 -4.240e+06 6.879e+06 -6.368e+06 8.299e+06 -8.763e+06 9.434e+06 -1.139e+07 1.021e+07 -1.422e+07 1.059e+07 -1.727e+07 1.054e+07 -2.057e+07 1.003e+07 -2.418e+07 9.048e+06 -2.818e+07 7.550e+06 -3.266e+07 5.473e+06 -3.772e+07 2.732e+06 -4.345e+07 -7.848e+05 -4.994e+07 -5.216e+06 -5.724e+07 -1.070e+07 -6.537e+07 -1.740e+07 -7.436e+07 -2.545e+07 -8.415e+07 -3.499e+07 -9.467e+07 -4.613e+07 -1.058e+08 -5.897e+07 -1.174e+08 -7.353e+07 -1.292e+08 -8.981e+07 -1.410e+08 -1.078e+08 -1.524e+08 -1.273e+08 -1.633e+08 -1.482e+08 -1.731e+08 -1.703e+08 -1.817e+08 -1.934e+08 -1.886e+08 -2.170e+08 -1.935e+08 -2.408e+08 -1.961e+08 -2.644e+08 -1.962e+08 -2.873e+08 -1.936e+08 -3.090e+08 -1.882e+08 -3.291e+08 -1.800e+08 -3.471e+08 -1.690e+08 -3.626e+08 -1.554e+08 -3.751e+08 -1.394e+08 -3.843e+08 -1.214e+08 -3.901e+08 -1.017e+08 -3.921e+08 -8.085e+07 -3.904e+08 -5.921e+07 -3.850e+08 -3.730e+07 -3.759e+08 -1.562e+07 -3.635e+08 5.402e+06 -3.480e+08 2.534e+07 -3.297e+08 4.383e+07 -3.093e+08 6.061e+07 -2.871e+08 7.546e+07 -2.636e+08 8.824e+07 -2.393e+08 9.893e+07 -2.148e+08 1.075e+08 -1.903e+08 1.141e+08 -1.664e+08 1.189e+08 -1.433e+08 1.219e+08 -1.212e+08 1.235e+08 -1.002e+08 1.238e+08 -8.060e+07 1.229e+08 -6.221e+07 1.210e+08 -4.508e+07 1.181e+08 -2.910e+07 1.144e+08 -1.421e+07 1.098e+08 -3.117e+05 1.044e+08 1.268e+07 9.807e+07 2.483e+07 9.084e+07 3.620e+07 8.269e+07 4.689e+07 7.362e+07 5.702e+07 6.363e+07 6.681e+07 5.261e+07 7.660e+07 4.034e+07 8.688e+07 2.633e+07 9.826e+07 9.694e+06 1.115e+08 -1.092e+07 1.273e+08 -3.733e+07 1.463e+08 -7.190e+07 1.690e+08 -1.174e+08 1.956e+08 -1.768e+08 2.260e+08 -2.535e+08 2.599e+08 -3.511e+08 2.968e+08 -4.730e+08 3.356e+08 -6.228e+08 3.753e+08 -8.042e+08 4.144e+08 -1.020e+09 4.511e+08 -1.274e+09 4.836e+08 -1.568e+09 5.096e+08 -1.903e+09 5.265e+08 -2.282e+09 5.318e+08 -2.703e+09 5.226e+08 -3.166e+09 4.962e+08 -3.669e+09 4.496e+08 -4.208e+09 3.803e+08 -4.780e+09 2.859e+08 -5.378e+09 1.643e+08 -5.996e+09 1.365e+07 -6.626e+09 -1.669e+08 -7.261e+09 -3.779e+08 -7.891e+09 -6.194e+08 -8.507e+09 -8.902e+08 -9.099e+09 -1.189e+09 -9.659e+09 -1.513e+09 -1.018e+10 -1.858e+09 -1.064e+10 -2.223e+09 -1.105e+10 -2.601e+09 -1.139e+10 -2.990e+09 -1.166e+10 -3.384e+09 -1.186e+10 -3.778e+09 -1.198e+10 -4.168e+09 -1.201e+10 -4.547e+09 -1.197e+10 -4.912e+09 -1.184e+10 -5.258e+09 -1.163e+10 -5.580e+09 -1.135e+10 -5.875e+09 -1.099e+10 -6.140e+09 -1.056e+10 -6.372e+09 -1.006e+10 -6.569e+09 -9.507e+09 -6.730e+09 -8.903e+09 -6.855e+09 -8.254e+09 -6.944e+09 -7.570e+09 -6.998e+09 -6.858e+09 -7.020e+09 -6.126e+09 -7.013e+09 -5.384e+09 -6.983e+09 -4.639e+09 -6.934e+09 -3.896e+09 -6.877e+09 -3.161e+09 -6.819e+09 -2.434e+09 -6.772e+09 -1.712e+09 -6.749e+09 -9.878e+08 -6.762e+09 -2.476e+08 -6.824e+09 5.283e+08 -6.946e+09 1.364e+09 -7.137e+09 2.289e+09 -7.401e+09 3.333e+09 -7.738e+09 4.526e+09 -8.145e+09 5.897e+09 -8.614e+09 7.469e+09 -9.135e+09 9.259e+09 -9.696e+09 1.128e+10 -1.028e+10 1.355e+10 -1.089e+10 1.606e+10 -1.149e+10 1.880e+10 -1.209e+10 2.178e+10 -1.266e+10 2.497e+10 -1.320e+10 2.835e+10 -1.369e+10 3.190e+10 -1.413e+10 3.557e+10 -1.451e+10 3.935e+10 -1.483e+10 4.319e+10 -1.508e+10 4.705e+10 -1.526e+10 5.089e+10 -1.536e+10 5.466e+10 -1.539e+10 5.832e+10 -1.535e+10 6.183e+10 -1.523e+10 6.515e+10 -1.506e+10 6.824e+10 -1.482e+10 7.107e+10 -1.453e+10 7.359e+10 -1.419e+10 7.579e+10 -1.380e+10 7.763e+10 -1.337e+10 7.911e+10 -1.291e+10 8.019e+10 -1.242e+10 8.088e+10 -1.190e+10 8.116e+10 -1.137e+10 8.103e+10 -1.081e+10 8.050e+10 -1.024e+10 7.956e+10 -9.659e+09 7.823e+10 -9.065e+09 7.653e+10 -8.463e+09 7.446e+10 -7.854e+09 7.206e+10 -7.240e+09 6.933e+10 -6.622e+09 6.632e+10 -6.004e+09 6.306e+10 -5.389e+09 5.956e+10 -4.778e+09 5.588e+10 -4.177e+09 5.205e+10 -3.590e+09 4.810e+10 -3.021e+09 4.408e+10 -2.476e+09 4.004e+10 -1.959e+09 3.601e+10 -1.475e+09 3.205e+10 -1.032e+09 2.819e+10 -6.312e+08 2.446e+10 -2.780e+08 2.092e+10 2.411e+07 1.758e+10 2.730e+08 1.449e+10 4.677e+08 1.167e+10 6.079e+08 9.145e+09 6.953e+08 6.926e+09 7.327e+08 5.029e+09 7.245e+08 3.456e+09 6.763e+08 2.202e+09 5.954e+08 1.259e+09 4.911e+08 6.085e+08 3.767e+08 2.184e+08 2.764e+08 6.858e+06 2.377e+08 -1.940e+08 2.880e+08 -5.102e+08 3.896e+08 -9.629e+08 5.026e+08 -1.529e+09 6.077e+08 -2.177e+09 6.966e+08 -2.872e+09 7.650e+08 -3.582e+09 8.113e+08 -4.279e+09 8.355e+08 -4.935e+09 8.388e+08 -5.529e+09 8.231e+08 -6.042e+09 7.915e+08 -6.462e+09 7.472e+08 -6.780e+09 6.937e+08 -6.990e+09 6.344e+08 -7.091e+09 5.726e+08 -7.087e+09 5.111e+08 -6.983e+09 4.523e+08 -6.788e+09 3.980e+08 -6.512e+09 3.495e+08 -6.167e+09 3.073e+08 -5.766e+09 2.716e+08 -5.322e+09 2.422e+08 -4.848e+09 2.182e+08 -4.352e+09 2.349e+08 -3.878e+09 1.651e+08 -3.386e+09 1.537e+08 -2.911e+09 1.439e+08 -2.461e+09 1.346e+08 -2.042e+09 1.251e+08 -1.661e+09 1.150e+08 -1.321e+09 1.040e+08 -1.024e+09 9.207e+07 -7.703e+08 7.948e+07 -5.601e+08 6.654e+07 -3.908e+08 5.370e+07 -2.596e+08 4.150e+07 -1.620e+08 3.040e+07 -9.331e+07 2.082e+07 -4.828e+07 1.306e+07 -2.144e+07 7.247e+06 -7.500e+06 3.341e+06 -1.710e+06 1.121e+06 -1.233e+05 1.852e+05 3.398e+04 -2.548e+04 -3.751e+04 -2.804e+05 -1.018e+06 -1.126e+06 -5.357e+06 -3.300e+06 -1.772e+07 -7.487e+06 -4.496e+07 -1.424e+07 -9.597e+07 -2.399e+07 -1.813e+08 -3.694e+07 -3.132e+08 -5.315e+07 -5.047e+08 -7.251e+07 -7.687e+08 -9.470e+07 -1.118e+09 -1.193e+08 -1.565e+09 -1.460e+08 -2.118e+09 -1.741e+08 -2.783e+09 -2.031e+08 -3.563e+09 -2.328e+08 -4.456e+09 -2.626e+08 -5.454e+09 -2.923e+08 -6.546e+09 -3.218e+08 -7.713e+09 -3.508e+08 -8.932e+09 -3.791e+08 -1.018e+10 -4.063e+08 -1.141e+10 -4.321e+08 -1.261e+10 -4.560e+08 -1.373e+10 -4.772e+08 -1.473e+10 -4.947e+08 -1.557e+10 -5.074e+08 -1.623e+10 -5.138e+08 -1.667e+10 -5.127e+08 -1.686e+10 -5.027e+08 -1.680e+10 -4.827e+08 -1.646e+10 -4.518e+08 -1.586e+10 -4.097e+08 -1.498e+10 -3.569e+08 -1.387e+10 -2.946e+08 -1.254e+10 -2.246e+08 -1.103e+10 -1.499e+08 -9.401e+09 -7.427e+07 -7.703e+09 -2.222e+06 -6.003e+09 6.116e+07 -4.377e+09 1.103e+08 -2.901e+09 1.398e+08 -1.656e+09 1.443e+08 -7.252e+08 1.199e+08 -1.811e+08 7.299e+07 9.688e+07 7.569e+07 5.782e+08 1.881e+08 1.633e+09 3.599e+08 3.318e+09 5.697e+08 5.654e+09 8.122e+08 8.646e+09 1.082e+09 1.226e+10 1.371e+09 1.645e+10 1.672e+09 2.113e+10 1.977e+09 2.618e+10 2.277e+09 3.143e+10 2.562e+09 3.672e+10 2.828e+09 4.180e+10 3.069e+09 4.645e+10 3.280e+09 5.038e+10 3.462e+09 5.334e+10 3.617e+09 5.505e+10 3.750e+09 5.528e+10 3.861e+09 5.381e+10 3.946e+09 5.055e+10 4.000e+09 4.547e+10 4.014e+09 3.873e+10 3.966e+09 3.067e+10 3.822e+09 2.187e+10 3.531e+09 1.320e+10 3.028e+09 5.911e+09 2.259e+09 1.341e+09 1.514e+09 -2.435e+09 2.124e+09 -1.163e+10 4.646e+09 -3.192e+10 8.659e+09 -6.756e+10 1.424e+10 -1.234e+11 2.173e+10 -2.052e+11 3.158e+10 -3.195e+11 4.432e+10 -4.739e+11 6.054e+10 -6.772e+11 8.091e+10 -9.392e+11 1.062e+11 -1.270e+12 1.372e+11 -1.684e+12 1.748e+11 -2.192e+12 2.201e+11 -2.810e+12 2.741e+11 -3.554e+12 3.382e+11 -4.441e+12 4.136e+11 -5.489e+12 5.016e+11 -6.720e+12 6.041e+11 -8.155e+12 7.226e+11 -9.815e+12 8.591e+11 -1.173e+13 1.016e+12 -1.391e+13 1.194e+12 -1.640e+13 1.398e+12 -1.922e+13 1.629e+12 -2.240e+13 1.890e+12 -2.597e+13 2.185e+12 -2.996e+13 2.516e+12 -3.440e+13 2.888e+12 -3.932e+13 3.306e+12 -4.476e+13 3.779e+12 -5.075e+13 4.308e+12 -5.731e+13 4.898e+12 -6.449e+13 5.553e+12 -7.232e+13 6.277e+12 -8.081e+13 7.077e+12 -9.002e+13 7.957e+12 -9.995e+13 8.923e+12 -1.106e+14 9.978e+12 -1.221e+14 1.113e+13 -1.344e+14 1.238e+13 -1.475e+14 1.373e+13 -1.614e+14 1.519e+13 -1.761e+14 1.676e+13 -1.917e+14 1.845e+13 -2.082e+14 2.025e+13 -2.254e+14 2.216e+13 -2.435e+14 2.419e+13 -2.625e+14 2.634e+13 -2.821e+14 2.860e+13 -3.026e+14 3.098e+13 -3.238e+14 3.346e+13 -3.457e+14 3.606e+13 -3.682e+14 3.875e+13 -3.913e+14 4.155e+13 -4.149e+14 4.444e+13 -4.391e+14 4.742e+13 -4.636e+14 5.048e+13 -4.885e+14 5.362e+13 -5.136e+14 5.683e+13 -5.390e+14 6.010e+13 -5.644e+14 6.342e+13 -5.899e+14 6.679e+13 -6.153e+14 7.021e+13 -6.406e+14 7.366e+13 -6.656e+14 7.713e+13 -6.904e+14 8.062e+13 -7.147e+14 8.413e+13 -7.385e+14 8.764e+13 -7.619e+14 9.115e+13 -7.846e+14 9.469e+13 -8.066e+14 9.822e+13 -8.279e+14 1.017e+14 -8.482e+14 1.052e+14 -8.675e+14 1.086e+14 -8.857e+14 1.120e+14 -9.028e+14 1.153e+14 -9.187e+14 1.185e+14 -9.333e+14 1.216e+14 -9.466e+14 1.246e+14 -9.584e+14 1.275e+14 -9.688e+14 1.303e+14 -9.777e+14 1.329e+14 -9.850e+14 1.354e+14 -9.907e+14 1.377e+14 -9.947e+14 1.398e+14 -9.971e+14 1.417e+14 -9.978e+14 1.433e+14 -9.968e+14 1.448e+14 -9.942e+14 1.460e+14 -9.898e+14 1.469e+14 -9.837e+14 1.476e+14 -9.760e+14 1.480e+14 -9.667e+14 1.482e+14 -9.557e+14 1.480e+14 -9.432e+14 1.476e+14 -9.292e+14 1.469e+14 -9.137e+14 1.459e+14 -8.969e+14 1.446e+14 -8.787e+14 1.431e+14 -8.594e+14 1.413e+14 -8.389e+14 1.393e+14 -8.174e+14 1.370e+14 -7.949e+14 1.345e+14 -7.716e+14 1.317e+14 -7.475e+14 1.288e+14 -7.229e+14 1.257e+14 -6.976e+14 1.224e+14 -6.720e+14 1.190e+14 -6.460e+14 1.154e+14 -6.199e+14 1.117e+14 -5.935e+14 1.079e+14 -5.672e+14 1.040e+14 -5.410e+14 1.001e+14 -5.149e+14 9.615e+13 -4.890e+14 9.216e+13 -4.635e+14 8.816e+13 -4.385e+14 8.417e+13 -4.138e+14 8.020e+13 -3.898e+14 7.626e+13 -3.663e+14 7.237e+13 -3.434e+14 6.852e+13 -3.213e+14 6.475e+13 -2.999e+14 6.105e+13 -2.793e+14 5.742e+13 -2.594e+14 5.389e+13 -2.404e+14 5.045e+13 -2.222e+14 4.711e+13 -2.048e+14 4.388e+13 -1.883e+14 4.077e+13 -1.726e+14 3.776e+13 -1.578e+14 3.488e+13 -1.438e+14 3.212e+13 -1.306e+14 2.948e+13 -1.183e+14 2.697e+13 -1.068e+14 2.459e+13 -9.606e+13 2.234e+13 -8.609e+13 2.022e+13 -7.687e+13 1.823e+13 -6.835e+13 1.636e+13 -6.052e+13 1.463e+13 -5.336e+13 1.301e+13 -4.681e+13 1.152e+13 -4.088e+13 1.015e+13 -3.552e+13 8.898e+12 -3.069e+13 7.753e+12 -2.636e+13 6.716e+12 -2.250e+13 5.780e+12 -1.907e+13 4.940e+12 -1.605e+13 4.192e+12 -1.340e+13 3.528e+12 -1.109e+13 2.943e+12 -9.094e+12 2.432e+12 -7.378e+12 1.989e+12 -5.913e+12 1.608e+12 -4.677e+12 1.283e+12 -3.643e+12 1.008e+12 -2.787e+12 7.789e+11 -2.088e+12 5.898e+11 -1.526e+12 4.359e+11 -1.081e+12 3.127e+11 -7.363e+11 2.161e+11 -4.765e+11 1.422e+11 -2.870e+11 8.747e+10 -1.555e+11 4.875e+10 -7.090e+10 2.316e+10 -2.315e+10 8.143e+09 -3.759e+09 1.533e+09 5.664e+09 -1.190e+09 2.240e+10 -5.642e+09 4.889e+10 -1.334e+10 8.088e+10 -2.309e+10 1.150e+11 -3.388e+10 1.485e+11 -4.490e+10 1.795e+11 -5.547e+10 2.065e+11 -6.511e+10 2.286e+11 -7.344e+10 2.451e+11 -8.020e+10 2.560e+11 -8.524e+10 2.613e+11 -8.848e+10 2.612e+11 -8.992e+10 2.562e+11 -8.965e+10 2.470e+11 -8.777e+10 2.341e+11 -8.445e+10 2.182e+11 -7.986e+10 2.001e+11 -7.423e+10 1.805e+11 -6.779e+10 1.599e+11 -6.077e+10 1.391e+11 -5.339e+10 1.186e+11 -4.589e+10 9.888e+10 -3.850e+10 8.035e+10 -3.138e+10 6.338e+10 -2.472e+10 4.822e+10 -1.867e+10 3.505e+10 -1.335e+10 2.401e+10 -8.851e+09 1.518e+10 -5.267e+09 8.484e+09 -2.604e+09 3.851e+09 -8.685e+08 1.155e+09 -1.996e+07 1.453e+08 2.400e+08 -7.695e+08 1.023e+09 -2.760e+09 2.554e+09 -5.837e+09 4.720e+09 -9.766e+09 7.398e+09 -1.430e+10 1.048e+10 -1.922e+10 1.384e+10 -2.427e+10 1.737e+10 -2.926e+10 2.097e+10 -3.400e+10 2.453e+10 0.005 -51.499 -50.441 -49.384 -48.326 -47.298 -46.370 -45.535 -44.784 -44.112 -43.512 -42.983 -42.518 -42.117 -41.776 -41.494 -41.269 -41.101 -40.988 -40.932 -40.930 -40.985 -41.096 -41.266 -41.495 -41.786 -42.141 -42.564 -43.058 -43.628 -44.280 -45.021 -45.859 -46.807 -47.877 -49.087 -50.461 -52.029 -53.834 -55.937 -58.428 -61.445 -65.180 -69.657 -72.987 -72.463 -70.740 -69.597 -68.869 -67.753 -65.672 -62.934 -60.130 -57.554 -55.273 -53.271 -51.509 -49.957 -48.583 -47.365 -46.282 -45.322 -44.470 -43.720 -43.062 -42.491 -42.001 -41.589 -41.253 -40.988 -40.795 -40.672 -40.619 -40.636 -40.723 -40.883 -41.117 -41.428 -41.818 -42.293 -42.857 -43.515 -44.275 -45.143 -46.127 -47.234 -48.467 -49.824 -51.284 -52.797 -54.266 -55.543 -56.474 -56.979 -57.086 -56.859 -56.310 -55.396 -54.097 -52.482 -50.684 -48.838 -47.037 -45.331 -43.742 -42.274 -40.924 -39.687 -38.556 -37.523 -36.583 -35.729 -34.956 -34.260 -33.639 -33.088 -32.607 -32.193 -31.844 -31.562 -31.345 -31.195 -31.111 -31.097 -31.154 -31.285 -31.495 -31.788 -32.172 -32.655 -33.247 -33.963 -34.819 -35.838 -37.050 -38.497 -40.234 -42.333 -44.862 -47.751 -50.314 -51.090 -50.030 -48.796 -48.227 -48.617 -50.398 -54.179 -56.165 -49.137 -43.010 -38.673 -35.272 -32.444 -30.005 -27.852 -25.921 -24.167 -22.560 -21.078 -19.701 -18.419 -17.218 -16.092 -15.032 -14.033 -13.089 -12.197 -11.352 -10.552 -9.793 -9.074 -8.392 -7.745 -7.131 -6.549 -5.998 -5.477 -4.983 -4.517 -4.077 -3.663 -3.274 -2.909 -2.568 -2.250 -1.954 -1.680 -1.428 -1.198 -0.988 -0.799 -0.631 -0.483 -0.355 -0.247 -0.158 -0.089 -0.040 -0.010 0.000 -0.009 -0.037 -0.084 -0.151 -0.238 -0.344 -0.470 -0.616 -0.782 -0.969 -1.176 -1.405 -1.654 -1.926 -2.219 -2.535 -2.874 -3.236 -3.622 -4.034 -4.470 -4.933 -5.423 -5.942 -6.489 -7.067 -7.677 -8.320 -8.998 -9.712 -10.465 -11.260 -12.099 -12.985 -13.921 -14.913 -15.964 -17.081 -18.271 -19.541 -20.904 -22.371 -23.960 -25.691 -27.596 -29.714 -32.105 -34.862 -38.129 -42.134 -47.006 -50.657 -50.062 -47.963 -46.611 -46.152 -46.391 -47.146 -48.083 -48.451 -47.500 -45.520 -43.296 -41.253 -39.495 -38.007 -36.753 -35.698 -34.813 -34.075 -33.466 -32.971 -32.581 -32.286 -32.080 -31.957 -31.912 -31.942 -32.045 -32.219 -32.464 -32.779 -33.165 -33.622 -34.152 -34.756 -35.439 -36.203 -37.051 -37.990 -39.025 -40.161 -41.405 -42.763 -44.238 -45.833 -47.537 -49.329 -51.163 -52.957 -54.593 -55.921 -56.769 -56.968 -56.429 -55.234 -53.618 -51.833 -50.052 -48.365 -46.808 -45.390 -44.108 -42.953 -41.915 -40.987 -40.158 -39.421 -38.769 -38.197 -37.700 -37.273 -36.913 -36.617 -36.382 -36.206 -36.087 -36.025 -36.017 -36.064 -36.165 -36.321 -36.530 -36.795 -37.115 -37.493 -37.930 -38.428 -38.989 -39.618 -40.317 -41.093 -41.949 -42.894 -43.936 -45.086 -46.357 -47.766 -49.333 -51.087 -53.063 -55.315 -57.913 -60.965 -64.637 -69.201 -75.049 -81.906 -85.696 -81.972 -75.961 -70.613 -66.342 -62.916 -60.110 -57.764 -55.773 -54.064 -52.584 -51.297 -50.172 -49.189 -48.331 -47.584 -46.938 -46.384 -45.916 -45.527 -45.214 -44.972 -44.798 -44.690 -44.647 -44.667 -44.750 -44.895 -45.102 -45.372 -45.707 -46.107 -46.576 -47.116 -47.730 -48.424 -49.203 -50.074 -51.047 -52.131 -53.248 -54.365 -55.483 0 1 1.0 3348270364.71 S6 VH 36.71 40.21 0.05 -2.825e+08 8.601e+07 -2.637e+08 1.002e+08 -2.446e+08 1.129e+08 -2.254e+08 1.241e+08 -2.062e+08 1.339e+08 -1.871e+08 1.423e+08 -1.682e+08 1.494e+08 -1.496e+08 1.553e+08 -1.313e+08 1.600e+08 -1.134e+08 1.637e+08 -9.581e+07 1.664e+08 -7.866e+07 1.681e+08 -6.190e+07 1.691e+08 -4.549e+07 1.693e+08 -2.942e+07 1.688e+08 -1.363e+07 1.678e+08 1.968e+06 1.662e+08 1.742e+07 1.642e+08 3.283e+07 1.618e+08 4.833e+07 1.590e+08 6.397e+07 1.559e+08 7.987e+07 1.523e+08 9.613e+07 1.482e+08 1.128e+08 1.436e+08 1.298e+08 1.383e+08 1.473e+08 1.323e+08 1.652e+08 1.254e+08 1.833e+08 1.175e+08 2.017e+08 1.087e+08 2.200e+08 9.870e+07 2.381e+08 8.762e+07 2.559e+08 7.543e+07 2.730e+08 6.215e+07 2.893e+08 4.789e+07 3.046e+08 3.272e+07 3.185e+08 1.680e+07 3.310e+08 3.220e+05 3.419e+08 -1.655e+07 3.509e+08 -3.357e+07 3.581e+08 -5.052e+07 3.632e+08 -6.715e+07 3.663e+08 -8.323e+07 3.673e+08 -9.850e+07 3.663e+08 -1.127e+08 3.633e+08 -1.257e+08 3.584e+08 -1.373e+08 3.517e+08 -1.472e+08 3.432e+08 -1.555e+08 3.332e+08 -1.618e+08 3.218e+08 -1.662e+08 3.092e+08 -1.687e+08 2.955e+08 -1.693e+08 2.808e+08 -1.679e+08 2.654e+08 -1.648e+08 2.495e+08 -1.600e+08 2.332e+08 -1.536e+08 2.166e+08 -1.459e+08 1.999e+08 -1.370e+08 1.833e+08 -1.272e+08 1.668e+08 -1.167e+08 1.508e+08 -1.058e+08 1.351e+08 -9.462e+07 1.200e+08 -8.345e+07 1.056e+08 -7.252e+07 9.190e+07 -6.200e+07 7.901e+07 -5.205e+07 6.703e+07 -4.283e+07 5.600e+07 -3.444e+07 4.598e+07 -2.697e+07 3.699e+07 -2.048e+07 2.904e+07 -1.497e+07 2.214e+07 -1.042e+07 1.629e+07 -6.793e+06 1.144e+07 -4.033e+06 7.555e+06 -2.048e+06 4.590e+06 -7.432e+05 2.470e+06 1.126e+03 1.114e+06 3.260e+05 3.934e+05 4.413e+05 -2.562e+04 6.445e+05 -5.779e+05 1.041e+06 -1.431e+06 1.532e+06 -2.567e+06 2.010e+06 -3.923e+06 2.393e+06 -5.426e+06 2.618e+06 -7.017e+06 2.641e+06 -8.649e+06 2.429e+06 -1.028e+07 1.959e+06 -1.190e+07 1.213e+06 -1.350e+07 1.731e+05 -1.508e+07 -1.178e+06 -1.666e+07 -2.869e+06 -1.825e+07 -4.937e+06 -1.987e+07 -7.430e+06 -2.154e+07 -1.041e+07 -2.327e+07 -1.394e+07 -2.505e+07 -1.810e+07 -2.685e+07 -2.296e+07 -2.866e+07 -2.859e+07 -3.043e+07 -3.502e+07 -3.210e+07 -4.230e+07 -3.362e+07 -5.045e+07 -3.491e+07 -5.943e+07 -3.590e+07 -6.919e+07 -3.650e+07 -7.965e+07 -3.666e+07 -9.070e+07 -3.628e+07 -1.022e+08 -3.530e+07 -1.139e+08 -3.366e+07 -1.258e+08 -3.131e+07 -1.374e+08 -2.822e+07 -1.487e+08 -2.435e+07 -1.593e+08 -1.972e+07 -1.691e+08 -1.434e+07 -1.778e+08 -8.257e+06 -1.851e+08 -1.543e+06 -1.909e+08 5.722e+06 -1.951e+08 1.342e+07 -1.974e+08 2.143e+07 -1.979e+08 2.961e+07 -1.965e+08 3.780e+07 -1.932e+08 4.586e+07 -1.881e+08 5.362e+07 -1.812e+08 6.096e+07 -1.729e+08 6.773e+07 -1.631e+08 7.384e+07 -1.523e+08 7.920e+07 -1.405e+08 8.376e+07 -1.281e+08 8.748e+07 -1.153e+08 9.038e+07 -1.023e+08 9.247e+07 -8.929e+07 9.382e+07 -7.648e+07 9.447e+07 -6.399e+07 9.452e+07 -5.193e+07 9.401e+07 -4.034e+07 9.301e+07 -2.925e+07 9.154e+07 -1.867e+07 8.962e+07 -8.573e+06 8.722e+07 1.064e+06 8.432e+07 1.024e+07 8.084e+07 1.898e+07 7.674e+07 2.725e+07 7.193e+07 3.501e+07 6.637e+07 4.222e+07 6.001e+07 4.883e+07 5.284e+07 5.479e+07 4.488e+07 6.012e+07 3.613e+07 6.486e+07 2.657e+07 6.913e+07 1.608e+07 7.317e+07 4.403e+06 7.724e+07 -8.941e+06 8.168e+07 -2.478e+07 8.680e+07 -4.426e+07 9.279e+07 -6.886e+07 9.964e+07 -1.004e+08 1.071e+08 -1.409e+08 1.146e+08 -1.925e+08 1.214e+08 -2.575e+08 1.264e+08 -3.383e+08 1.284e+08 -4.371e+08 1.260e+08 -5.564e+08 1.174e+08 -6.983e+08 1.010e+08 -8.647e+08 7.496e+07 -1.058e+09 3.722e+07 -1.279e+09 -1.422e+07 -1.529e+09 -8.131e+07 -1.808e+09 -1.661e+08 -2.117e+09 -2.705e+08 -2.455e+09 -3.960e+08 -2.820e+09 -5.443e+08 -3.211e+09 -7.166e+08 -3.623e+09 -9.136e+08 -4.055e+09 -1.136e+09 -4.500e+09 -1.383e+09 -4.955e+09 -1.655e+09 -5.412e+09 -1.951e+09 -5.867e+09 -2.269e+09 -6.311e+09 -2.607e+09 -6.739e+09 -2.962e+09 -7.144e+09 -3.330e+09 -7.517e+09 -3.708e+09 -7.853e+09 -4.092e+09 -8.146e+09 -4.478e+09 -8.389e+09 -4.861e+09 -8.579e+09 -5.236e+09 -8.710e+09 -5.600e+09 -8.779e+09 -5.946e+09 -8.785e+09 -6.270e+09 -8.725e+09 -6.568e+09 -8.600e+09 -6.837e+09 -8.411e+09 -7.072e+09 -8.158e+09 -7.270e+09 -7.845e+09 -7.430e+09 -7.475e+09 -7.549e+09 -7.053e+09 -7.626e+09 -6.585e+09 -7.661e+09 -6.075e+09 -7.654e+09 -5.531e+09 -7.608e+09 -4.958e+09 -7.525e+09 -4.365e+09 -7.408e+09 -3.757e+09 -7.262e+09 -3.142e+09 -7.093e+09 -2.525e+09 -6.907e+09 -1.909e+09 -6.713e+09 -1.297e+09 -6.521e+09 -6.871e+08 -6.340e+09 -7.511e+07 -6.181e+09 5.482e+08 -6.054e+09 1.198e+09 -5.967e+09 1.894e+09 -5.927e+09 2.659e+09 -5.937e+09 3.520e+09 -5.995e+09 4.505e+09 -6.098e+09 5.641e+09 -6.236e+09 6.953e+09 -6.400e+09 8.463e+09 -6.576e+09 1.019e+10 -6.753e+09 1.214e+10 -6.918e+09 1.433e+10 -7.059e+09 1.675e+10 -7.167e+09 1.942e+10 -7.231e+09 2.232e+10 -7.243e+09 2.544e+10 -7.197e+09 2.877e+10 -7.089e+09 3.227e+10 -6.914e+09 3.593e+10 -6.672e+09 3.971e+10 -6.362e+09 4.358e+10 -5.986e+09 4.749e+10 -5.547e+09 5.141e+10 -5.048e+09 5.529e+10 -4.496e+09 5.909e+10 -3.897e+09 6.275e+10 -3.260e+09 6.624e+10 -2.592e+09 6.951e+10 -1.903e+09 7.252e+10 -1.203e+09 7.522e+10 -5.011e+08 7.759e+10 1.926e+08 7.959e+10 8.693e+08 8.120e+10 1.520e+09 8.240e+10 2.135e+09 8.317e+10 2.709e+09 8.351e+10 3.233e+09 8.342e+10 3.704e+09 8.289e+10 4.117e+09 8.193e+10 4.468e+09 8.057e+10 4.756e+09 7.882e+10 4.980e+09 7.670e+10 5.140e+09 7.425e+10 5.238e+09 7.148e+10 5.276e+09 6.844e+10 5.257e+09 6.516e+10 5.186e+09 6.168e+10 5.066e+09 5.804e+10 4.903e+09 5.427e+10 4.702e+09 5.041e+10 4.469e+09 4.650e+10 4.210e+09 4.258e+10 3.930e+09 3.869e+10 3.634e+09 3.487e+10 3.329e+09 3.115e+10 3.020e+09 2.754e+10 2.710e+09 2.409e+10 2.406e+09 2.081e+10 2.109e+09 1.774e+10 1.825e+09 1.488e+10 1.556e+09 1.226e+10 1.305e+09 9.895e+09 1.074e+09 7.786e+09 8.639e+08 5.940e+09 6.770e+08 4.358e+09 5.134e+08 3.039e+09 3.735e+08 1.976e+09 2.572e+08 1.158e+09 1.637e+08 5.732e+08 9.224e+07 2.041e+08 4.161e+07 3.105e+07 1.048e+07 -3.032e+07 6.080e+06 -1.862e+08 2.836e+06 -4.659e+08 -1.195e+07 -8.463e+08 -3.774e+07 -1.302e+09 -7.226e+07 -1.808e+09 -1.132e+08 -2.339e+09 -1.583e+08 -2.873e+09 -2.054e+08 -3.390e+09 -2.524e+08 -3.870e+09 -2.975e+08 -4.299e+09 -3.390e+08 -4.664e+09 -3.755e+08 -4.954e+09 -4.059e+08 -5.165e+09 -4.295e+08 -5.292e+09 -4.456e+08 -5.335e+09 -4.540e+08 -5.297e+09 -4.548e+08 -5.182e+09 -4.483e+08 -4.997e+09 -4.350e+08 -4.751e+09 -4.157e+08 -4.454e+09 -3.912e+08 -4.128e+09 -3.823e+08 -3.768e+09 -3.590e+08 -3.382e+09 -3.228e+08 -2.989e+09 -2.856e+08 -2.599e+09 -2.483e+08 -2.220e+09 -2.121e+08 -1.862e+09 -1.776e+08 -1.531e+09 -1.457e+08 -1.230e+09 -1.167e+08 -9.644e+08 -9.118e+07 -7.352e+08 -6.916e+07 -5.426e+08 -5.070e+07 -3.859e+08 -3.571e+07 -2.625e+08 -2.393e+07 -1.692e+08 -1.505e+07 -1.021e+08 -8.695e+06 -5.664e+07 -4.423e+06 -2.811e+07 -1.800e+06 -1.202e+07 -4.039e+05 -4.196e+06 1.691e+05 -1.157e+06 2.886e+05 -3.532e+05 2.984e+05 -3.710e+05 4.453e+05 -1.148e+06 8.502e+05 -3.966e+06 1.732e+06 -1.157e+07 3.317e+06 -2.817e+07 5.796e+06 -5.925e+07 9.374e+06 -1.115e+08 1.431e+07 -1.926e+08 2.091e+07 -3.105e+08 2.957e+07 -4.735e+08 4.075e+07 -6.900e+08 5.503e+07 -9.669e+08 7.299e+07 -1.310e+09 9.533e+07 -1.725e+09 1.227e+08 -2.213e+09 1.559e+08 -2.773e+09 1.954e+08 -3.403e+09 2.418e+08 -4.095e+09 2.954e+08 -4.840e+09 3.564e+08 -5.625e+09 4.250e+08 -6.432e+09 5.006e+08 -7.242e+09 5.825e+08 -8.034e+09 6.695e+08 -8.782e+09 7.602e+08 -9.462e+09 8.527e+08 -1.005e+10 9.450e+08 -1.051e+10 1.034e+09 -1.084e+10 1.118e+09 -1.101e+10 1.194e+09 -1.099e+10 1.258e+09 -1.080e+10 1.307e+09 -1.041e+10 1.340e+09 -9.829e+09 1.352e+09 -9.074e+09 1.343e+09 -8.163e+09 1.309e+09 -7.123e+09 1.251e+09 -5.991e+09 1.168e+09 -4.813e+09 1.060e+09 -3.644e+09 9.298e+08 -2.541e+09 7.795e+08 -1.570e+09 6.144e+08 -7.973e+08 4.436e+08 -2.789e+08 2.910e+08 2.458e+07 2.228e+08 3.747e+08 2.892e+08 1.088e+09 4.344e+08 2.291e+09 5.878e+08 4.021e+09 7.255e+08 6.290e+09 8.372e+08 9.088e+09 9.164e+08 1.237e+10 9.590e+08 1.609e+10 9.637e+08 2.014e+10 9.311e+08 2.439e+10 8.651e+08 2.870e+10 7.724e+08 3.288e+10 6.628e+08 3.673e+10 5.491e+08 4.004e+10 4.463e+08 4.256e+10 3.727e+08 4.408e+10 3.472e+08 4.441e+10 3.832e+08 4.336e+10 4.898e+08 4.084e+10 6.701e+08 3.684e+10 9.167e+08 3.146e+10 1.206e+09 2.499e+10 1.494e+09 1.789e+10 1.710e+09 1.086e+10 1.755e+09 4.920e+09 1.518e+09 1.171e+09 1.159e+09 -1.867e+09 1.865e+09 -9.230e+09 4.441e+09 -2.558e+10 8.885e+09 -5.446e+10 1.554e+10 -9.986e+10 2.503e+10 -1.666e+11 3.815e+10 -2.601e+11 5.583e+10 -3.869e+11 7.916e+10 -5.542e+11 1.095e+11 -7.706e+11 1.482e+11 -1.045e+12 1.971e+11 -1.389e+12 2.580e+11 -1.813e+12 3.333e+11 -2.330e+12 4.252e+11 -2.955e+12 5.366e+11 -3.703e+12 6.706e+11 -4.590e+12 8.304e+11 -5.636e+12 1.020e+12 -6.859e+12 1.243e+12 -8.279e+12 1.504e+12 -9.921e+12 1.809e+12 -1.181e+13 2.161e+12 -1.396e+13 2.568e+12 -1.640e+13 3.034e+12 -1.917e+13 3.567e+12 -2.229e+13 4.172e+12 -2.578e+13 4.859e+12 -2.968e+13 5.634e+12 -3.401e+13 6.506e+12 -3.881e+13 7.490e+12 -4.411e+13 8.591e+12 -4.993e+13 9.817e+12 -5.631e+13 1.118e+13 -6.328e+13 1.269e+13 -7.086e+13 1.435e+13 -7.909e+13 1.618e+13 -8.800e+13 1.818e+13 -9.759e+13 2.037e+13 -1.079e+14 2.276e+13 -1.190e+14 2.535e+13 -1.308e+14 2.816e+13 -1.434e+14 3.119e+13 -1.567e+14 3.446e+13 -1.709e+14 3.796e+13 -1.858e+14 4.172e+13 -2.016e+14 4.572e+13 -2.181e+14 4.998e+13 -2.354e+14 5.450e+13 -2.535e+14 5.928e+13 -2.723e+14 6.432e+13 -2.918e+14 6.963e+13 -3.121e+14 7.519e+13 -3.329e+14 8.101e+13 -3.544e+14 8.708e+13 -3.764e+14 9.338e+13 -3.989e+14 9.992e+13 -4.219e+14 1.067e+14 -4.453e+14 1.136e+14 -4.690e+14 1.208e+14 -4.929e+14 1.281e+14 -5.170e+14 1.356e+14 -5.412e+14 1.433e+14 -5.655e+14 1.510e+14 -5.897e+14 1.589e+14 -6.137e+14 1.668e+14 -6.375e+14 1.748e+14 -6.610e+14 1.828e+14 -6.840e+14 1.909e+14 -7.066e+14 1.989e+14 -7.288e+14 2.069e+14 -7.504e+14 2.149e+14 -7.713e+14 2.227e+14 -7.913e+14 2.305e+14 -8.103e+14 2.381e+14 -8.285e+14 2.455e+14 -8.455e+14 2.527e+14 -8.614e+14 2.596e+14 -8.760e+14 2.663e+14 -8.894e+14 2.727e+14 -9.014e+14 2.788e+14 -9.121e+14 2.845e+14 -9.212e+14 2.899e+14 -9.289e+14 2.948e+14 -9.351e+14 2.993e+14 -9.396e+14 3.034e+14 -9.426e+14 3.070e+14 -9.440e+14 3.101e+14 -9.437e+14 3.127e+14 -9.418e+14 3.148e+14 -9.383e+14 3.164e+14 -9.332e+14 3.174e+14 -9.265e+14 3.178e+14 -9.182e+14 3.177e+14 -9.084e+14 3.170e+14 -8.971e+14 3.157e+14 -8.843e+14 3.139e+14 -8.702e+14 3.115e+14 -8.548e+14 3.086e+14 -8.381e+14 3.051e+14 -8.202e+14 3.011e+14 -8.013e+14 2.966e+14 -7.813e+14 2.916e+14 -7.604e+14 2.862e+14 -7.387e+14 2.803e+14 -7.163e+14 2.740e+14 -6.932e+14 2.673e+14 -6.696e+14 2.603e+14 -6.455e+14 2.530e+14 -6.211e+14 2.454e+14 -5.965e+14 2.375e+14 -5.717e+14 2.295e+14 -5.469e+14 2.212e+14 -5.221e+14 2.128e+14 -4.973e+14 2.043e+14 -4.728e+14 1.958e+14 -4.485e+14 1.872e+14 -4.246e+14 1.786e+14 -4.011e+14 1.700e+14 -3.780e+14 1.615e+14 -3.555e+14 1.531e+14 -3.335e+14 1.448e+14 -3.122e+14 1.366e+14 -2.916e+14 1.286e+14 -2.716e+14 1.208e+14 -2.524e+14 1.131e+14 -2.339e+14 1.057e+14 -2.163e+14 9.854e+13 -1.994e+14 9.162e+13 -1.833e+14 8.494e+13 -1.681e+14 7.853e+13 -1.536e+14 7.240e+13 -1.400e+14 6.654e+13 -1.272e+14 6.097e+13 -1.152e+14 5.569e+13 -1.039e+14 5.069e+13 -9.346e+13 4.598e+13 -8.374e+13 4.156e+13 -7.474e+13 3.742e+13 -6.643e+13 3.356e+13 -5.881e+13 2.997e+13 -5.183e+13 2.665e+13 -4.546e+13 2.358e+13 -3.969e+13 2.077e+13 -3.447e+13 1.821e+13 -2.977e+13 1.586e+13 -2.556e+13 1.374e+13 -2.181e+13 1.183e+13 -1.848e+13 1.012e+13 -1.555e+13 8.589e+12 -1.298e+13 7.235e+12 -1.074e+13 6.040e+12 -8.804e+12 4.996e+12 -7.140e+12 4.089e+12 -5.721e+12 3.307e+12 -4.524e+12 2.640e+12 -3.523e+12 2.076e+12 -2.694e+12 1.603e+12 -2.017e+12 1.213e+12 -1.473e+12 8.956e+11 -1.043e+12 6.413e+11 -7.097e+11 4.419e+11 -4.587e+11 2.896e+11 -2.758e+11 1.770e+11 -1.491e+11 9.770e+10 -6.768e+10 4.567e+10 -2.192e+10 1.557e+10 -3.496e+09 2.755e+09 5.605e+09 -2.993e+09 2.187e+10 -1.286e+10 4.738e+10 -2.922e+10 7.799e+10 -4.951e+10 1.104e+11 -7.166e+10 1.421e+11 -9.394e+10 1.710e+11 -1.150e+11 1.958e+11 -1.339e+11 2.157e+11 -1.498e+11 2.301e+11 -1.624e+11 2.389e+11 -1.713e+11 2.422e+11 -1.766e+11 2.404e+11 -1.782e+11 2.339e+11 -1.765e+11 2.234e+11 -1.716e+11 2.096e+11 -1.641e+11 1.932e+11 -1.543e+11 1.749e+11 -1.426e+11 1.554e+11 -1.296e+11 1.354e+11 -1.157e+11 1.156e+11 -1.012e+11 9.636e+10 -8.680e+10 7.824e+10 -7.270e+10 6.159e+10 -5.926e+10 4.672e+10 -4.678e+10 3.382e+10 -3.551e+10 2.301e+10 -2.562e+10 1.436e+10 -1.729e+10 7.877e+09 -1.062e+10 3.427e+09 -5.614e+09 8.658e+08 -2.289e+09 -1.358e+08 -6.183e+08 -9.917e+08 3.281e+07 -2.971e+09 1.356e+09 -6.018e+09 3.824e+09 -9.876e+09 7.371e+09 -1.429e+10 1.182e+10 -1.901e+10 1.700e+10 -2.383e+10 2.271e+10 -2.854e+10 2.877e+10 -3.295e+10 3.498e+10 -3.693e+10 4.119e+10 0.005 -52.014 -50.960 -49.905 -48.851 -47.827 -46.906 -46.080 -45.340 -44.682 -44.098 -43.586 -43.141 -42.761 -42.445 -42.189 -41.994 -41.857 -41.780 -41.761 -41.802 -41.902 -42.064 -42.289 -42.580 -42.938 -43.367 -43.872 -44.458 -45.131 -45.898 -46.769 -47.755 -48.870 -50.133 -51.567 -53.199 -55.071 -57.235 -59.760 -62.746 -66.321 -70.618 -75.457 -78.483 -76.458 -72.048 -67.612 -63.718 -60.381 -57.518 -55.043 -52.882 -50.979 -49.292 -47.789 -46.443 -45.236 -44.152 -43.178 -42.304 -41.520 -40.822 -40.203 -39.658 -39.184 -38.779 -38.439 -38.163 -37.950 -37.799 -37.710 -37.683 -37.717 -37.814 -37.976 -38.204 -38.500 -38.868 -39.310 -39.831 -40.435 -41.129 -41.918 -42.809 -43.811 -44.931 -46.174 -47.545 -49.035 -50.621 -52.244 -53.799 -55.131 -56.067 -56.483 -56.320 -55.577 -54.312 -52.654 -50.779 -48.843 -46.951 -45.157 -43.484 -41.939 -40.518 -39.216 -38.023 -36.933 -35.938 -35.032 -34.210 -33.467 -32.799 -32.203 -31.676 -31.215 -30.821 -30.490 -30.224 -30.021 -29.883 -29.810 -29.804 -29.866 -30.001 -30.211 -30.501 -30.878 -31.348 -31.922 -32.610 -33.427 -34.393 -35.534 -36.883 -38.490 -40.422 -42.777 -45.689 -49.238 -52.873 -54.609 -53.799 -53.103 -53.988 -57.113 -58.616 -51.222 -44.810 -40.245 -36.659 -33.677 -31.108 -28.845 -26.819 -24.982 -23.303 -21.756 -20.322 -18.988 -17.742 -16.574 -15.476 -14.443 -13.468 -12.546 -11.675 -10.851 -10.070 -9.329 -8.628 -7.963 -7.332 -6.735 -6.170 -5.634 -5.128 -4.650 -4.200 -3.775 -3.376 -3.002 -2.652 -2.326 -2.022 -1.741 -1.483 -1.246 -1.030 -0.836 -0.662 -0.509 -0.377 -0.264 -0.172 -0.099 -0.046 -0.013 0.000 -0.006 -0.032 -0.076 -0.141 -0.226 -0.330 -0.454 -0.599 -0.764 -0.950 -1.156 -1.384 -1.633 -1.904 -2.197 -2.512 -2.851 -3.214 -3.601 -4.012 -4.450 -4.913 -5.404 -5.924 -6.472 -7.052 -7.663 -8.308 -8.987 -9.704 -10.460 -11.257 -12.098 -12.987 -13.927 -14.922 -15.977 -17.098 -18.292 -19.568 -20.936 -22.409 -24.004 -25.742 -27.655 -29.781 -32.182 -34.948 -38.225 -42.242 -47.126 -50.788 -50.203 -48.106 -46.744 -46.243 -46.365 -46.845 -47.250 -46.964 -45.710 -43.857 -41.901 -40.097 -38.518 -37.160 -36.002 -35.017 -34.186 -33.488 -32.910 -32.439 -32.066 -31.784 -31.586 -31.467 -31.424 -31.452 -31.551 -31.718 -31.953 -32.255 -32.625 -33.063 -33.571 -34.152 -34.807 -35.540 -36.356 -37.260 -38.259 -39.359 -40.572 -41.907 -43.379 -45.004 -46.799 -48.784 -50.979 -53.390 -55.999 -58.716 -61.301 -63.287 -64.064 -63.332 -61.444 -59.055 -56.630 -54.370 -52.336 -50.531 -48.936 -47.530 -46.292 -45.203 -44.248 -43.413 -42.688 -42.064 -41.533 -41.090 -40.728 -40.445 -40.237 -40.102 -40.037 -40.042 -40.117 -40.260 -40.474 -40.758 -41.116 -41.550 -42.063 -42.660 -43.346 -44.130 -45.021 -46.029 -47.171 -48.465 -49.935 -51.612 -53.534 -55.739 -58.230 -60.841 -62.981 -63.772 -63.314 -62.557 -62.084 -62.099 -62.710 -64.076 -66.466 -69.601 -70.139 -65.518 -61.134 -57.817 -55.215 -53.095 -51.320 -49.806 -48.499 -47.362 -46.369 -45.500 -44.740 -44.076 -43.501 -43.006 -42.587 -42.237 -41.954 -41.734 -41.574 -41.473 -41.430 -41.442 -41.510 -41.634 -41.812 -42.046 -42.336 -42.683 -43.090 -43.557 -44.087 -44.684 -45.351 -46.092 -46.913 -47.821 -48.825 -49.933 -51.073 -52.213 -53.353 0 1 1.0 3348270364.71 IW1 HH 26.72 31.67 0.050 -3.053e+09 -9.646e+09 -2.320e+09 -9.077e+09 -1.650e+09 -8.555e+09 -1.037e+09 -8.080e+09 -4.752e+08 -7.649e+09 3.978e+07 -7.262e+09 5.148e+08 -6.913e+09 9.556e+08 -6.600e+09 1.366e+09 -6.317e+09 1.751e+09 -6.058e+09 2.112e+09 -5.817e+09 2.450e+09 -5.588e+09 2.767e+09 -5.365e+09 3.060e+09 -5.143e+09 3.327e+09 -4.915e+09 3.565e+09 -4.679e+09 3.773e+09 -4.431e+09 3.946e+09 -4.168e+09 4.082e+09 -3.889e+09 4.180e+09 -3.593e+09 4.237e+09 -3.282e+09 4.252e+09 -2.957e+09 4.226e+09 -2.620e+09 4.160e+09 -2.274e+09 4.056e+09 -1.923e+09 3.917e+09 -1.572e+09 3.749e+09 -1.224e+09 3.557e+09 -8.850e+08 3.346e+09 -5.571e+08 3.125e+09 -2.438e+08 2.901e+09 5.382e+07 2.680e+09 3.371e+08 2.471e+09 6.095e+08 2.277e+09 8.775e+08 2.101e+09 1.151e+09 1.942e+09 1.440e+09 1.796e+09 1.757e+09 1.655e+09 2.114e+09 1.511e+09 2.518e+09 1.352e+09 2.976e+09 1.171e+09 3.490e+09 9.586e+08 4.060e+09 7.096e+08 4.680e+09 4.201e+08 5.345e+09 8.862e+07 6.048e+09 -2.840e+08 6.780e+09 -6.958e+08 7.531e+09 -1.143e+09 8.290e+09 -1.619e+09 9.047e+09 -2.119e+09 9.791e+09 -2.636e+09 1.051e+10 -3.160e+09 1.120e+10 -3.686e+09 1.185e+10 -4.203e+09 1.244e+10 -4.705e+09 1.298e+10 -5.184e+09 1.345e+10 -5.632e+09 1.385e+10 -6.042e+09 1.418e+10 -6.409e+09 1.443e+10 -6.729e+09 1.460e+10 -6.997e+09 1.469e+10 -7.209e+09 1.470e+10 -7.365e+09 1.462e+10 -7.462e+09 1.447e+10 -7.500e+09 1.424e+10 -7.479e+09 1.394e+10 -7.402e+09 1.356e+10 -7.270e+09 1.313e+10 -7.086e+09 1.263e+10 -6.854e+09 1.208e+10 -6.579e+09 1.148e+10 -6.265e+09 1.084e+10 -5.918e+09 1.018e+10 -5.545e+09 9.489e+09 -5.149e+09 8.787e+09 -4.739e+09 8.081e+09 -4.319e+09 7.379e+09 -3.897e+09 6.688e+09 -3.477e+09 6.018e+09 -3.067e+09 5.375e+09 -2.671e+09 4.766e+09 -2.294e+09 4.197e+09 -1.940e+09 3.672e+09 -1.612e+09 3.195e+09 -1.314e+09 2.769e+09 -1.047e+09 2.394e+09 -8.108e+08 2.072e+09 -6.056e+08 1.802e+09 -4.293e+08 1.583e+09 -2.782e+08 1.414e+09 -1.481e+08 1.293e+09 -3.294e+07 1.219e+09 7.398e+07 1.193e+09 1.792e+08 1.213e+09 2.890e+08 1.281e+09 4.086e+08 1.399e+09 5.415e+08 1.574e+09 6.905e+08 1.810e+09 8.574e+08 2.119e+09 1.043e+09 2.510e+09 1.248e+09 2.996e+09 1.473e+09 3.594e+09 1.716e+09 4.318e+09 1.977e+09 5.184e+09 2.256e+09 6.210e+09 2.551e+09 7.410e+09 2.859e+09 8.800e+09 3.181e+09 1.039e+10 3.515e+09 1.220e+10 3.859e+09 1.423e+10 4.214e+09 1.648e+10 4.579e+09 1.896e+10 4.954e+09 2.166e+10 5.342e+09 2.457e+10 5.745e+09 2.768e+10 6.166e+09 3.095e+10 6.608e+09 3.438e+10 7.076e+09 3.793e+10 7.574e+09 4.156e+10 8.107e+09 4.523e+10 8.680e+09 4.889e+10 9.297e+09 5.250e+10 9.961e+09 5.600e+10 1.068e+10 5.934e+10 1.144e+10 6.247e+10 1.226e+10 6.531e+10 1.313e+10 6.782e+10 1.405e+10 6.993e+10 1.501e+10 7.160e+10 1.600e+10 7.276e+10 1.701e+10 7.338e+10 1.804e+10 7.342e+10 1.907e+10 7.283e+10 2.007e+10 7.160e+10 2.104e+10 6.973e+10 2.195e+10 6.721e+10 2.279e+10 6.407e+10 2.353e+10 6.033e+10 2.415e+10 5.607e+10 2.465e+10 5.135e+10 2.501e+10 4.626e+10 2.524e+10 4.093e+10 2.535e+10 3.547e+10 2.535e+10 3.000e+10 2.533e+10 2.466e+10 2.537e+10 1.954e+10 2.563e+10 1.469e+10 2.630e+10 1.008e+10 2.761e+10 5.524e+09 2.978e+10 7.262e+08 3.300e+10 -4.737e+09 3.739e+10 -1.134e+10 4.299e+10 -1.954e+10 4.981e+10 -2.977e+10 5.782e+10 -4.235e+10 6.702e+10 -5.754e+10 7.736e+10 -7.552e+10 8.883e+10 -9.639e+10 1.014e+11 -1.202e+11 1.151e+11 -1.469e+11 1.298e+11 -1.764e+11 1.455e+11 -2.085e+11 1.622e+11 -2.429e+11 1.799e+11 -2.793e+11 1.985e+11 -3.173e+11 2.180e+11 -3.565e+11 2.383e+11 -3.963e+11 2.594e+11 -4.362e+11 2.813e+11 -4.756e+11 3.039e+11 -5.139e+11 3.272e+11 -5.503e+11 3.513e+11 -5.844e+11 3.760e+11 -6.155e+11 4.015e+11 -6.429e+11 4.277e+11 -6.662e+11 4.547e+11 -6.849e+11 4.825e+11 -6.986e+11 5.114e+11 -7.071e+11 5.413e+11 -7.100e+11 5.727e+11 -7.073e+11 6.057e+11 -6.991e+11 6.408e+11 -6.854e+11 6.785e+11 -6.666e+11 7.196e+11 -6.427e+11 7.651e+11 -6.141e+11 8.161e+11 -5.809e+11 8.743e+11 -5.433e+11 9.415e+11 -5.011e+11 1.020e+12 -4.537e+11 1.112e+12 -4.003e+11 1.222e+12 -3.394e+11 1.352e+12 -2.691e+11 1.506e+12 -1.867e+11 1.688e+12 -8.935e+10 1.902e+12 2.677e+10 2.153e+12 1.656e+11 2.445e+12 3.312e+11 2.784e+12 5.282e+11 3.174e+12 7.612e+11 3.620e+12 1.034e+12 4.128e+12 1.353e+12 4.704e+12 1.721e+12 5.352e+12 2.142e+12 6.081e+12 2.620e+12 6.894e+12 3.160e+12 7.800e+12 3.763e+12 8.958e+12 4.511e+12 1.008e+13 5.261e+12 1.132e+13 6.081e+12 1.268e+13 6.973e+12 1.416e+13 7.936e+12 1.578e+13 8.968e+12 1.752e+13 1.007e+13 1.942e+13 1.124e+13 2.146e+13 1.247e+13 2.366e+13 1.374e+13 2.601e+13 1.508e+13 2.851e+13 1.646e+13 3.119e+13 1.787e+13 3.404e+13 1.931e+13 3.705e+13 2.077e+13 4.024e+13 2.225e+13 4.361e+13 2.372e+13 4.714e+13 2.518e+13 5.084e+13 2.662e+13 5.471e+13 2.801e+13 5.874e+13 2.935e+13 6.294e+13 3.062e+13 6.729e+13 3.182e+13 7.177e+13 3.291e+13 7.641e+13 3.390e+13 8.117e+13 3.475e+13 8.606e+13 3.547e+13 9.104e+13 3.603e+13 9.612e+13 3.643e+13 1.013e+14 3.663e+13 1.065e+14 3.665e+13 1.119e+14 3.645e+13 1.171e+14 3.604e+13 1.224e+14 3.539e+13 1.278e+14 3.451e+13 1.331e+14 3.337e+13 1.384e+14 3.197e+13 1.436e+14 3.030e+13 1.488e+14 2.837e+13 1.538e+14 2.616e+13 1.587e+14 2.367e+13 1.635e+14 2.091e+13 1.681e+14 1.786e+13 1.725e+14 1.454e+13 1.767e+14 1.093e+13 1.808e+14 7.052e+12 1.846e+14 2.906e+12 1.881e+14 -1.501e+12 1.914e+14 -6.166e+12 1.944e+14 -1.107e+13 1.971e+14 -1.622e+13 1.994e+14 -2.160e+13 2.015e+14 -2.718e+13 2.033e+14 -3.297e+13 2.047e+14 -3.895e+13 2.058e+14 -4.511e+13 2.066e+14 -5.144e+13 2.070e+14 -5.792e+13 2.070e+14 -6.453e+13 2.067e+14 -7.126e+13 2.060e+14 -7.809e+13 2.050e+14 -8.500e+13 2.035e+14 -9.198e+13 2.017e+14 -9.902e+13 1.996e+14 -1.061e+14 1.971e+14 -1.132e+14 1.942e+14 -1.203e+14 1.910e+14 -1.273e+14 1.874e+14 -1.344e+14 1.836e+14 -1.414e+14 1.793e+14 -1.484e+14 1.748e+14 -1.553e+14 1.698e+14 -1.621e+14 1.647e+14 -1.688e+14 1.591e+14 -1.755e+14 1.534e+14 -1.820e+14 1.472e+14 -1.882e+14 1.409e+14 -1.945e+14 1.342e+14 -2.006e+14 1.273e+14 -2.065e+14 1.201e+14 -2.121e+14 1.127e+14 -2.177e+14 1.049e+14 -2.230e+14 9.707e+13 -2.281e+14 8.892e+13 -2.330e+14 8.059e+13 -2.376e+14 7.205e+13 -2.421e+14 6.331e+13 -2.462e+14 5.441e+13 -2.502e+14 4.534e+13 -2.539e+14 3.611e+13 -2.572e+14 2.673e+13 -2.603e+14 1.725e+13 -2.632e+14 7.629e+12 -2.657e+14 2.596e+12 -2.698e+14 -9.449e+12 -2.717e+14 -1.934e+13 -2.736e+14 -2.929e+13 -2.751e+14 -3.927e+13 -2.764e+14 -4.930e+13 -2.773e+14 -5.933e+13 -2.778e+14 -6.935e+13 -2.781e+14 -7.936e+13 -2.780e+14 -8.932e+13 -2.777e+14 -9.919e+13 -2.769e+14 -1.090e+14 -2.758e+14 -1.187e+14 -2.744e+14 -1.282e+14 -2.727e+14 -1.376e+14 -2.705e+14 -1.468e+14 -2.682e+14 -1.557e+14 -2.654e+14 -1.646e+14 -2.623e+14 -1.730e+14 -2.589e+14 -1.812e+14 -2.551e+14 -1.891e+14 -2.511e+14 -1.967e+14 -2.468e+14 -2.039e+14 -2.422e+14 -2.107e+14 -2.373e+14 -2.171e+14 -2.321e+14 -2.231e+14 -2.267e+14 -2.287e+14 -2.210e+14 -2.337e+14 -2.151e+14 -2.383e+14 -2.090e+14 -2.423e+14 -2.027e+14 -2.459e+14 -1.963e+14 -2.489e+14 -1.897e+14 -2.514e+14 -1.829e+14 -2.533e+14 -1.762e+14 -2.547e+14 -1.692e+14 -2.554e+14 -1.622e+14 -2.557e+14 -1.552e+14 -2.554e+14 -1.482e+14 -2.545e+14 -1.412e+14 -2.532e+14 -1.342e+14 -2.512e+14 -1.274e+14 -2.488e+14 -1.205e+14 -2.460e+14 -1.138e+14 -2.426e+14 -1.073e+14 -2.388e+14 -1.008e+14 -2.346e+14 -9.455e+13 -2.299e+14 -8.846e+13 -2.249e+14 -8.254e+13 -2.194e+14 -7.684e+13 -2.137e+14 -7.135e+13 -2.076e+14 -6.608e+13 -2.013e+14 -6.106e+13 -1.948e+14 -5.627e+13 -1.880e+14 -5.173e+13 -1.812e+14 -4.745e+13 -1.741e+14 -4.341e+13 -1.671e+14 -3.963e+13 -1.598e+14 -3.609e+13 -1.527e+14 -3.280e+13 -1.454e+14 -2.975e+13 -1.382e+14 -2.693e+13 -1.311e+14 -2.434e+13 -1.240e+14 -2.196e+13 -1.171e+14 -1.979e+13 -1.103e+14 -1.783e+13 -1.037e+14 -1.604e+13 -9.712e+13 -1.443e+13 -9.079e+13 -1.298e+13 -8.467e+13 -1.169e+13 -7.877e+13 -1.054e+13 -7.308e+13 -9.515e+12 -6.763e+13 -8.610e+12 -6.242e+13 -7.812e+12 -5.745e+13 -7.109e+12 -5.272e+13 -6.493e+12 -4.825e+13 -5.953e+12 -4.402e+13 -5.480e+12 -4.005e+13 -5.067e+12 -3.632e+13 -4.704e+12 -3.283e+13 -4.385e+12 -2.958e+13 -4.105e+12 -2.658e+13 -3.858e+12 -2.379e+13 -3.638e+12 -2.159e+13 -3.499e+12 -1.919e+13 -3.315e+12 -1.699e+13 -3.144e+12 -1.499e+13 -2.984e+12 -1.317e+13 -2.833e+12 -1.153e+13 -2.688e+12 -1.004e+13 -2.549e+12 -8.717e+12 -2.414e+12 -7.531e+12 -2.283e+12 -6.479e+12 -2.155e+12 -5.550e+12 -2.030e+12 -4.733e+12 -1.909e+12 -4.019e+12 -1.790e+12 -3.398e+12 -1.676e+12 -2.861e+12 -1.566e+12 -2.399e+12 -1.460e+12 -2.003e+12 -1.359e+12 -1.666e+12 -1.264e+12 -1.381e+12 -1.174e+12 -1.139e+12 -1.090e+12 -9.363e+11 -1.011e+12 -7.657e+11 -9.379e+11 -6.230e+11 -8.693e+11 -5.035e+11 -8.051e+11 -4.037e+11 -7.446e+11 -3.206e+11 -6.874e+11 -2.514e+11 -6.327e+11 -1.941e+11 -5.802e+11 -1.470e+11 -5.293e+11 -1.086e+11 -4.798e+11 -7.778e+10 -4.315e+11 -5.345e+10 -3.843e+11 -3.473e+10 -3.384e+11 -2.085e+10 -2.939e+11 -1.106e+10 -2.512e+11 -4.668e+09 -2.105e+11 -1.010e+09 -1.724e+11 5.400e+08 -1.372e+11 5.870e+08 -1.053e+11 -2.855e+08 -7.717e+10 -1.544e+09 -5.316e+10 -2.725e+09 -3.355e+10 -3.457e+09 -1.860e+10 -3.581e+09 -8.451e+09 -3.648e+09 -2.707e+09 -5.289e+09 1.082e+09 -9.486e+09 6.731e+09 -1.611e+10 1.639e+10 -2.491e+10 3.042e+10 -3.580e+10 4.867e+10 -4.870e+10 7.084e+10 -6.351e+10 9.656e+10 -8.008e+10 1.254e+11 -9.825e+10 1.568e+11 -1.178e+11 1.904e+11 -1.385e+11 2.257e+11 -1.600e+11 2.620e+11 -1.822e+11 2.989e+11 -2.047e+11 3.357e+11 -2.272e+11 3.721e+11 -2.494e+11 4.074e+11 -2.711e+11 4.412e+11 -2.919e+11 4.730e+11 -3.116e+11 5.025e+11 -3.299e+11 5.291e+11 -3.466e+11 5.527e+11 -3.616e+11 5.729e+11 -3.745e+11 5.894e+11 -3.854e+11 6.021e+11 -3.940e+11 6.109e+11 -4.003e+11 6.156e+11 -4.042e+11 6.164e+11 -4.058e+11 6.132e+11 -4.050e+11 6.061e+11 -4.018e+11 5.953e+11 -3.964e+11 5.811e+11 -3.889e+11 5.636e+11 -3.795e+11 5.432e+11 -3.682e+11 5.203e+11 -3.554e+11 4.952e+11 -3.410e+11 4.682e+11 -3.253e+11 4.397e+11 -3.086e+11 4.101e+11 -2.909e+11 3.797e+11 -2.727e+11 3.491e+11 -2.540e+11 3.185e+11 -2.350e+11 2.882e+11 -2.160e+11 2.587e+11 -1.973e+11 2.303e+11 -1.788e+11 2.031e+11 -1.609e+11 1.774e+11 -1.436e+11 1.533e+11 -1.271e+11 1.311e+11 -1.115e+11 1.107e+11 -9.688e+10 9.234e+10 -8.329e+10 7.588e+10 -7.077e+10 6.136e+10 -5.938e+10 4.873e+10 -4.910e+10 3.788e+10 -3.995e+10 2.874e+10 -3.190e+10 2.116e+10 -2.490e+10 1.502e+10 -1.893e+10 1.017e+10 -1.393e+10 6.454e+09 -9.832e+09 3.721e+09 -6.575e+09 1.821e+09 -4.090e+09 6.026e+08 -2.303e+09 -8.286e+07 -1.135e+09 -3.968e+08 -4.582e+08 -5.421e+08 -2.406e+07 -7.383e+08 4.788e+08 -1.088e+09 1.233e+09 -1.537e+09 2.273e+09 -1.996e+09 3.579e+09 -2.397e+09 5.123e+09 -2.684e+09 6.880e+09 -2.818e+09 8.834e+09 -2.761e+09 1.097e+10 -2.483e+09 1.328e+10 -1.957e+09 1.576e+10 -1.154e+09 1.842e+10 -4.802e+07 2.125e+10 1.389e+09 2.426e+10 3.185e+09 2.744e+10 5.366e+09 3.081e+10 7.962e+09 3.437e+10 1.100e+10 3.809e+10 1.450e+10 4.197e+10 1.848e+10 4.601e+10 2.296e+10 5.018e+10 2.793e+10 5.446e+10 3.341e+10 5.882e+10 3.937e+10 6.322e+10 4.578e+10 6.765e+10 5.263e+10 7.205e+10 5.987e+10 7.639e+10 6.743e+10 8.062e+10 7.526e+10 8.471e+10 8.329e+10 8.861e+10 9.142e+10 9.227e+10 9.958e+10 9.567e+10 1.077e+11 9.875e+10 1.156e+11 1.015e+11 1.233e+11 1.038e+11 1.306e+11 1.058e+11 1.375e+11 1.073e+11 1.439e+11 1.083e+11 1.496e+11 1.089e+11 1.546e+11 1.090e+11 1.589e+11 1.087e+11 1.624e+11 1.078e+11 1.650e+11 1.065e+11 1.667e+11 1.048e+11 1.676e+11 1.026e+11 1.675e+11 1.001e+11 1.665e+11 9.716e+10 1.646e+11 9.390e+10 1.619e+11 9.036e+10 1.584e+11 8.655e+10 1.542e+11 8.253e+10 1.492e+11 7.833e+10 1.437e+11 7.399e+10 1.375e+11 6.956e+10 1.309e+11 6.506e+10 1.239e+11 6.054e+10 1.165e+11 5.604e+10 1.089e+11 5.158e+10 1.011e+11 4.720e+10 9.323e+10 4.293e+10 8.536e+10 3.879e+10 7.756e+10 3.480e+10 6.990e+10 3.099e+10 6.244e+10 2.737e+10 5.524e+10 2.395e+10 4.836e+10 2.076e+10 4.185e+10 1.779e+10 3.575e+10 1.505e+10 3.009e+10 1.256e+10 2.491e+10 1.030e+10 2.021e+10 8.288e+09 1.603e+10 6.513e+09 1.235e+10 4.973e+09 9.187e+09 3.661e+09 6.529e+09 2.570e+09 4.362e+09 1.692e+09 2.669e+09 1.013e+09 1.424e+09 5.229e+08 5.970e+08 2.141e+08 1.452e+08 7.703e+07 -6.190e+07 3.284e+07 -3.049e+08 -7.060e+07 -7.930e+08 -2.679e+08 -1.508e+09 -5.458e+08 -2.407e+09 -8.857e+08 -3.447e+09 -1.269e+09 -4.587e+09 -1.679e+09 -5.788e+09 -2.096e+09 -7.013e+09 -2.506e+09 -8.227e+09 -2.893e+09 -9.403e+09 -3.244e+09 -1.051e+10 -3.547e+09 -1.153e+10 -3.794e+09 -1.244e+10 -3.976e+09 -1.323e+10 -4.087e+09 -1.388e+10 -4.127e+09 -1.440e+10 -4.093e+09 -1.477e+10 -3.989e+09 -1.500e+10 -3.817e+09 -1.510e+10 -3.582e+09 -1.507e+10 -3.290e+09 -1.491e+10 -2.948e+09 -1.465e+10 -2.565e+09 -1.428e+10 -2.147e+09 -1.383e+10 -1.704e+09 -1.331e+10 -1.245e+09 -1.273e+10 -7.755e+08 -1.210e+10 -3.039e+08 -1.145e+10 0.005 -54.017 -53.002 -51.987 -50.972 -49.957 -48.942 -47.927 -47.001 -46.175 -45.440 -44.790 -44.219 -43.723 -43.300 -42.946 -42.658 -42.434 -42.275 -42.179 -42.146 -42.178 -42.274 -42.436 -42.667 -42.969 -43.346 -43.801 -44.341 -44.972 -45.703 -46.544 -47.509 -48.615 -49.884 -51.349 -53.051 -55.055 -57.461 -60.438 -64.330 -70.032 -82.707 -80.970 -75.020 -72.557 -71.772 -70.242 -66.880 -62.962 -59.427 -56.415 -53.854 -51.643 -49.712 -48.012 -46.503 -45.157 -43.953 -42.873 -41.904 -41.036 -40.259 -39.568 -38.956 -38.419 -37.954 -37.557 -37.226 -36.960 -36.756 -36.616 -36.538 -36.523 -36.571 -36.683 -36.862 -37.108 -37.426 -37.819 -38.290 -38.845 -39.491 -40.234 -41.084 -42.051 -43.149 -44.393 -45.800 -47.394 -49.201 -51.241 -53.528 -56.053 -58.773 -61.635 -64.558 -66.710 -65.650 -61.402 -57.075 -53.425 -50.353 -47.724 -45.438 -43.426 -41.640 -40.042 -38.607 -37.313 -36.144 -35.086 -34.130 -33.264 -32.482 -31.780 -31.155 -30.602 -30.119 -29.704 -29.355 -29.071 -28.853 -28.699 -28.611 -28.590 -28.638 -28.758 -28.953 -29.226 -29.578 -30.015 -30.550 -31.193 -31.955 -32.854 -33.910 -35.149 -36.608 -38.337 -40.407 -42.926 -46.053 -50.033 -55.101 -60.349 -63.467 -63.687 -59.006 -51.912 -46.113 -41.604 -37.928 -34.818 -32.120 -29.737 -27.605 -25.676 -23.916 -22.300 -20.803 -19.403 -18.097 -16.879 -15.739 -14.671 -13.668 -12.715 -11.808 -10.954 -10.150 -9.393 -8.678 -7.991 -7.338 -6.725 -6.151 -5.609 -5.090 -4.596 -4.137 -3.712 -3.309 -2.923 -2.565 -2.240 -1.939 -1.653 -1.391 -1.160 -0.952 -0.756 -0.584 -0.443 -0.320 -0.208 -0.124 -0.071 -0.026 0.000 -0.004 -0.039 -0.060 -0.111 -0.193 -0.296 -0.413 -0.561 -0.735 -0.922 -1.126 -1.362 -1.623 -1.896 -2.193 -2.523 -2.877 -3.245 -3.638 -4.065 -4.523 -5.004 -5.511 -6.056 -6.638 -7.249 -7.885 -8.559 -9.276 -10.039 -10.843 -11.682 -12.570 -13.517 -14.526 -15.602 -16.744 -17.956 -19.259 -20.666 -22.194 -23.859 -25.689 -27.712 -29.988 -32.610 -35.728 -39.646 -45.191 -57.380 -67.638 -51.015 -47.617 -46.341 -46.116 -46.498 -46.990 -46.848 -45.582 -43.526 -41.319 -39.295 -37.538 -36.039 -34.765 -33.684 -32.768 -31.996 -31.351 -30.819 -30.390 -30.054 -29.804 -29.631 -29.532 -29.506 -29.551 -29.667 -29.851 -30.102 -30.421 -30.808 -31.263 -31.790 -32.390 -33.067 -33.825 -34.668 -35.605 -36.641 -37.785 -39.049 -40.451 -42.012 -43.757 -45.722 -47.951 -50.509 -53.485 -57.001 -61.203 -66.040 -70.038 -70.484 -68.014 -64.483 -60.849 -57.533 -54.655 -52.190 -50.078 -48.260 -46.688 -45.323 -44.136 -43.103 -42.204 -41.425 -40.756 -40.187 -39.711 -39.321 -39.014 -38.783 -38.628 -38.546 -38.535 -38.593 -38.722 -38.921 -39.191 -39.533 -39.950 -40.445 -41.021 -41.684 -42.440 -43.296 -44.262 -45.351 -46.577 -47.960 -49.524 -51.303 -53.337 -55.673 -58.355 -61.360 -64.397 -66.623 -67.385 -67.397 -67.561 -67.928 -67.552 -65.427 -62.271 -59.155 -56.414 -54.054 -52.019 -50.251 -48.702 -47.339 -46.134 -45.065 -44.116 -43.274 -42.528 -41.870 -41.293 -40.790 -40.358 -39.991 -39.687 -39.443 -39.256 -39.126 -39.049 -39.026 -39.055 -39.136 -39.269 -39.454 -39.691 -39.980 -40.324 -40.722 -41.177 -41.691 -42.267 -42.908 -43.616 -44.397 -45.255 -46.196 -47.211 -48.227 -49.242 -50.257 -51.273 -52.288 0.03 -18.0399 -17.6856 -17.3348 -16.9875 -16.6437 -16.3034 -15.9667 -15.6334 -15.3037 -14.9775 -14.6548 -14.3356 -14.0199 -13.7078 -13.3991 -13.094 -12.7924 -12.4942 -12.1997 -11.9086 -11.621 -11.337 -11.0564 -10.7794 -10.5059 -10.2359 -9.9694 -9.7064 -9.447 -9.191 -8.9386 -8.6897 -8.4443 -8.2024 -7.964 -7.7292 -7.4978 -7.27 -7.0456 -6.8248 -6.6075 -6.3938 -6.1835 -5.9768 -5.7735 -5.5738 -5.3776 -5.1849 -4.9957 -4.81 -4.6279 -4.4492 -4.2741 -4.1025 -3.9344 -3.7698 -3.6087 -3.4512 -3.2971 -3.1466 -2.9996 -2.8561 -2.7161 -2.5796 -2.4466 -2.3172 -2.1912 -2.0688 -1.9499 -1.8345 -1.7226 -1.6142 -1.5094 -1.4081 -1.3102 -1.2159 -1.1251 -1.0378 -0.95405 -0.87379 -0.79704 -0.72381 -0.65409 -0.58789 -0.5252 -0.46602 -0.41036 -0.35821 -0.30957 -0.26445 -0.22284 -0.18474 -0.15016 -0.11909 -0.091539 -0.067498 -0.046971 -0.029958 -0.016458 -0.0064723 0 0.0029586 0.0024035 -0.0016653 -0.0092478 -0.020344 -0.034954 -0.053077 -0.074714 -0.099865 -0.12853 -0.16071 -0.1964 -0.23561 -0.27832 -0.32456 -0.3743 -0.42756 -0.48434 -0.54463 -0.60843 -0.67574 -0.74657 -0.82091 -0.89877 -0.98014 -1.065 -1.1534 -1.2453 -1.3408 -1.4397 -1.5421 -1.6481 -1.7576 -1.8706 -1.9871 -2.1071 -2.2306 -2.3577 -2.4883 -2.6223 -2.7599 -2.901 -3.0456 -3.1938 -3.3454 -3.5006 -3.6592 -3.8214 -3.9871 -4.1563 -4.3291 -4.5053 -4.685 -4.8683 -5.0551 -5.2454 -5.4392 -5.6365 -5.8373 -6.0417 -6.2496 -6.4609 -6.6758 -6.8942 -7.1161 -7.3416 -7.5705 -7.803 -8.039 -8.2784 -8.5214 -8.7679 -9.018 -9.2715 -9.5286 -9.7891 -10.0532 -10.3208 -10.5919 -10.8665 -11.1447 -11.4263 -11.7115 -12.0002 -12.2924 -12.5881 -12.8873 -13.19 -13.4963 -13.806 -14.1193 -14.4361 -14.7564 -15.0802 -15.4075 -15.7384 -16.0727 -16.4106 -16.752 -17.0969 1.0 59658.3803 IW1 HV 26.72 31.67 0.050 -7.712e+09 -4.395e+09 -6.771e+09 -4.441e+09 -5.919e+09 -4.467e+09 -5.149e+09 -4.479e+09 -4.456e+09 -4.479e+09 -3.833e+09 -4.471e+09 -3.273e+09 -4.456e+09 -2.768e+09 -4.436e+09 -2.311e+09 -4.412e+09 -1.896e+09 -4.382e+09 -1.517e+09 -4.345e+09 -1.171e+09 -4.300e+09 -8.539e+08 -4.244e+09 -5.628e+08 -4.174e+09 -2.969e+08 -4.088e+09 -5.574e+07 -3.983e+09 1.617e+08 -3.859e+09 3.548e+08 -3.714e+09 5.236e+08 -3.548e+09 6.680e+08 -3.362e+09 7.873e+08 -3.155e+09 8.818e+08 -2.931e+09 9.517e+08 -2.690e+09 9.975e+08 -2.437e+09 1.020e+09 -2.174e+09 1.021e+09 -1.905e+09 1.002e+09 -1.636e+09 9.647e+08 -1.371e+09 9.124e+08 -1.115e+09 8.483e+08 -8.743e+08 7.765e+08 -6.531e+08 7.019e+08 -4.554e+08 6.305e+08 -2.834e+08 5.692e+08 -1.358e+08 5.249e+08 -5.421e+06 5.024e+08 1.208e+08 5.022e+08 2.612e+08 5.196e+08 4.343e+08 5.464e+08 6.551e+08 5.743e+08 9.325e+08 5.959e+08 1.271e+09 6.059e+08 1.671e+09 6.001e+08 2.131e+09 5.761e+08 2.644e+09 5.323e+08 3.205e+09 4.685e+08 3.804e+09 3.850e+08 4.431e+09 2.832e+08 5.075e+09 1.654e+08 5.722e+09 3.413e+07 6.359e+09 -1.071e+08 6.974e+09 -2.544e+08 7.551e+09 -4.036e+08 8.079e+09 -5.504e+08 8.546e+09 -6.902e+08 8.941e+09 -8.190e+08 9.254e+09 -9.328e+08 9.481e+09 -1.028e+09 9.614e+09 -1.102e+09 9.653e+09 -1.152e+09 9.597e+09 -1.178e+09 9.449e+09 -1.178e+09 9.214e+09 -1.153e+09 8.896e+09 -1.104e+09 8.505e+09 -1.033e+09 8.050e+09 -9.418e+08 7.542e+09 -8.345e+08 6.992e+09 -7.142e+08 6.414e+09 -5.847e+08 5.818e+09 -4.505e+08 5.217e+09 -3.155e+08 4.623e+09 -1.834e+08 4.046e+09 -5.799e+07 3.496e+09 5.788e+07 2.981e+09 1.621e+08 2.508e+09 2.530e+08 2.082e+09 3.306e+08 1.707e+09 3.963e+08 1.385e+09 4.532e+08 1.117e+09 5.065e+08 8.997e+08 5.638e+08 7.292e+08 6.335e+08 5.982e+08 7.241e+08 4.975e+08 8.424e+08 4.173e+08 9.923e+08 3.501e+08 1.176e+09 2.914e+08 1.393e+09 2.399e+08 1.644e+09 1.975e+08 1.929e+09 1.682e+08 2.248e+09 1.575e+08 2.603e+09 1.724e+08 2.996e+09 2.204e+08 3.430e+09 3.102e+08 3.909e+09 4.513e+08 4.439e+09 6.543e+08 5.026e+09 9.315e+08 5.678e+09 1.296e+09 6.403e+09 1.765e+09 7.211e+09 2.355e+09 8.111e+09 3.086e+09 9.111e+09 3.981e+09 1.022e+10 5.066e+09 1.145e+10 6.364e+09 1.280e+10 7.900e+09 1.428e+10 9.703e+09 1.588e+10 1.179e+10 1.761e+10 1.419e+10 1.947e+10 1.692e+10 2.145e+10 1.998e+10 2.353e+10 2.339e+10 2.572e+10 2.715e+10 2.799e+10 3.124e+10 3.032e+10 3.565e+10 3.271e+10 4.035e+10 3.513e+10 4.531e+10 3.756e+10 5.046e+10 3.997e+10 5.578e+10 4.235e+10 6.117e+10 4.466e+10 6.658e+10 4.689e+10 7.193e+10 4.901e+10 7.713e+10 5.100e+10 8.209e+10 5.283e+10 8.672e+10 5.449e+10 9.094e+10 5.595e+10 9.465e+10 5.720e+10 9.777e+10 5.821e+10 1.002e+11 5.898e+10 1.019e+11 5.947e+10 1.029e+11 5.969e+10 1.029e+11 5.962e+10 1.021e+11 5.924e+10 1.004e+11 5.856e+10 9.782e+10 5.756e+10 9.432e+10 5.625e+10 8.996e+10 5.462e+10 8.479e+10 5.268e+10 7.889e+10 5.045e+10 7.234e+10 4.793e+10 6.527e+10 4.515e+10 5.780e+10 4.215e+10 5.009e+10 3.897e+10 4.231e+10 3.566e+10 3.464e+10 3.230e+10 2.726e+10 2.897e+10 2.035e+10 2.582e+10 1.406e+10 2.302e+10 8.486e+09 2.077e+10 3.570e+09 1.931e+10 -9.384e+08 1.880e+10 -5.563e+09 1.925e+10 -1.102e+10 2.052e+10 -1.808e+10 2.234e+10 -2.738e+10 2.449e+10 -3.943e+10 2.674e+10 -5.455e+10 2.899e+10 -7.299e+10 3.113e+10 -9.492e+10 3.314e+10 -1.204e+11 3.500e+10 -1.494e+11 3.677e+10 -1.820e+11 3.848e+10 -2.179e+11 4.024e+10 -2.571e+11 4.216e+10 -2.991e+11 4.438e+10 -3.437e+11 4.707e+10 -3.904e+11 5.041e+10 -4.388e+11 5.462e+10 -4.882e+11 5.992e+10 -5.381e+11 6.653e+10 -5.879e+11 7.471e+10 -6.368e+11 8.469e+10 -6.841e+11 9.672e+10 -7.293e+11 1.110e+11 -7.715e+11 1.278e+11 -8.102e+11 1.474e+11 -8.448e+11 1.698e+11 -8.748e+11 1.953e+11 -8.997e+11 2.241e+11 -9.194e+11 2.564e+11 -9.336e+11 2.922e+11 -9.422e+11 3.319e+11 -9.455e+11 3.756e+11 -9.437e+11 4.238e+11 -9.371e+11 4.771e+11 -9.264e+11 5.363e+11 -9.122e+11 6.024e+11 -8.950e+11 6.770e+11 -8.756e+11 7.619e+11 -8.545e+11 8.595e+11 -8.319e+11 9.727e+11 -8.078e+11 1.105e+12 -7.818e+11 1.261e+12 -7.531e+11 1.444e+12 -7.201e+11 1.659e+12 -6.812e+11 1.913e+12 -6.340e+11 2.210e+12 -5.758e+11 2.556e+12 -5.039e+11 2.957e+12 -4.151e+11 3.420e+12 -3.064e+11 3.951e+12 -1.748e+11 4.556e+12 -1.713e+10 5.243e+12 1.693e+11 6.018e+12 3.869e+11 6.888e+12 6.381e+11 7.861e+12 9.249e+11 8.942e+12 1.248e+12 1.121e+13 1.779e+12 1.265e+13 2.219e+12 1.423e+13 2.699e+12 1.597e+13 3.220e+12 1.785e+13 3.779e+12 1.989e+13 4.374e+12 2.209e+13 5.002e+12 2.446e+13 5.658e+12 2.701e+13 6.338e+12 2.972e+13 7.035e+12 3.261e+13 7.745e+12 3.568e+13 8.455e+12 3.894e+13 9.163e+12 4.237e+13 9.857e+12 4.597e+13 1.053e+13 4.976e+13 1.117e+13 5.371e+13 1.177e+13 5.784e+13 1.232e+13 6.214e+13 1.279e+13 6.657e+13 1.318e+13 7.115e+13 1.349e+13 7.588e+13 1.369e+13 8.073e+13 1.378e+13 8.571e+13 1.374e+13 9.078e+13 1.355e+13 9.594e+13 1.321e+13 1.012e+14 1.271e+13 1.065e+14 1.203e+13 1.119e+14 1.116e+13 1.172e+14 1.011e+13 1.226e+14 8.844e+12 1.280e+14 7.364e+12 1.334e+14 5.665e+12 1.387e+14 3.736e+12 1.439e+14 1.576e+12 1.492e+14 -8.220e+11 1.542e+14 -3.463e+12 1.592e+14 -6.347e+12 1.640e+14 -9.475e+12 1.686e+14 -1.285e+13 1.731e+14 -1.648e+13 1.774e+14 -2.033e+13 1.815e+14 -2.444e+13 1.853e+14 -2.877e+13 1.889e+14 -3.334e+13 1.922e+14 -3.813e+13 1.953e+14 -4.314e+13 1.981e+14 -4.835e+13 2.005e+14 -5.377e+13 2.025e+14 -5.936e+13 2.043e+14 -6.514e+13 2.057e+14 -7.109e+13 2.069e+14 -7.718e+13 2.076e+14 -8.341e+13 2.078e+14 -8.977e+13 2.078e+14 -9.627e+13 2.075e+14 -1.029e+14 2.067e+14 -1.096e+14 2.056e+14 -1.163e+14 2.040e+14 -1.231e+14 2.021e+14 -1.299e+14 1.998e+14 -1.368e+14 1.970e+14 -1.436e+14 1.940e+14 -1.505e+14 1.905e+14 -1.573e+14 1.867e+14 -1.641e+14 1.825e+14 -1.708e+14 1.779e+14 -1.774e+14 1.730e+14 -1.840e+14 1.679e+14 -1.905e+14 1.623e+14 -1.968e+14 1.564e+14 -2.031e+14 1.502e+14 -2.092e+14 1.437e+14 -2.152e+14 1.369e+14 -2.209e+14 1.298e+14 -2.266e+14 1.225e+14 -2.320e+14 1.149e+14 -2.373e+14 1.071e+14 -2.423e+14 9.897e+13 -2.472e+14 9.066e+13 -2.519e+14 8.213e+13 -2.563e+14 7.341e+13 -2.605e+14 6.449e+13 -2.645e+14 5.538e+13 -2.683e+14 4.611e+13 -2.718e+14 3.668e+13 -2.750e+14 2.709e+13 -2.780e+14 1.737e+13 -2.807e+14 7.538e+12 -2.832e+14 -2.421e+12 -2.854e+14 -1.247e+13 -2.873e+14 -2.259e+13 -2.888e+14 -3.281e+13 -2.902e+14 -4.187e+13 -2.923e+14 -5.158e+13 -2.939e+14 -6.193e+13 -2.945e+14 -7.230e+13 -2.946e+14 -8.265e+13 -2.946e+14 -9.298e+13 -2.942e+14 -1.033e+14 -2.935e+14 -1.135e+14 -2.925e+14 -1.236e+14 -2.912e+14 -1.336e+14 -2.896e+14 -1.436e+14 -2.876e+14 -1.534e+14 -2.854e+14 -1.629e+14 -2.827e+14 -1.724e+14 -2.797e+14 -1.815e+14 -2.765e+14 -1.904e+14 -2.730e+14 -1.991e+14 -2.692e+14 -2.074e+14 -2.650e+14 -2.154e+14 -2.605e+14 -2.231e+14 -2.559e+14 -2.304e+14 -2.508e+14 -2.373e+14 -2.456e+14 -2.438e+14 -2.401e+14 -2.499e+14 -2.343e+14 -2.554e+14 -2.284e+14 -2.605e+14 -2.222e+14 -2.651e+14 -2.159e+14 -2.692e+14 -2.094e+14 -2.728e+14 -2.027e+14 -2.758e+14 -1.960e+14 -2.783e+14 -1.891e+14 -2.802e+14 -1.821e+14 -2.815e+14 -1.751e+14 -2.823e+14 -1.680e+14 -2.825e+14 -1.608e+14 -2.822e+14 -1.538e+14 -2.812e+14 -1.466e+14 -2.798e+14 -1.396e+14 -2.779e+14 -1.326e+14 -2.753e+14 -1.257e+14 -2.723e+14 -1.189e+14 -2.689e+14 -1.123e+14 -2.649e+14 -1.057e+14 -2.606e+14 -9.943e+13 -2.559e+14 -9.319e+13 -2.507e+14 -8.718e+13 -2.451e+14 -8.137e+13 -2.392e+14 -7.577e+13 -2.329e+14 -7.038e+13 -2.264e+14 -6.522e+13 -2.196e+14 -6.030e+13 -2.126e+14 -5.561e+13 -2.053e+14 -5.118e+13 -1.980e+14 -4.698e+13 -1.904e+14 -4.304e+13 -1.828e+14 -3.933e+13 -1.752e+14 -3.587e+13 -1.675e+14 -3.265e+13 -1.597e+14 -2.967e+13 -1.520e+14 -2.691e+13 -1.444e+14 -2.437e+13 -1.369e+14 -2.204e+13 -1.294e+14 -1.991e+13 -1.220e+14 -1.799e+13 -1.148e+14 -1.624e+13 -1.078e+14 -1.465e+13 -1.009e+14 -1.324e+13 -9.426e+13 -1.197e+13 -8.787e+13 -1.084e+13 -8.168e+13 -9.841e+12 -7.572e+13 -8.954e+12 -7.002e+13 -8.170e+12 -6.456e+13 -7.481e+12 -5.938e+13 -6.874e+12 -5.445e+13 -6.342e+12 -4.979e+13 -5.876e+12 -4.538e+13 -5.466e+12 -4.126e+13 -5.106e+12 -3.738e+13 -4.787e+12 -3.376e+13 -4.504e+12 -3.040e+13 -4.251e+12 -2.729e+13 -4.027e+12 -2.441e+13 -3.823e+12 -2.385e+13 -3.984e+12 -2.121e+13 -3.795e+12 -1.878e+13 -3.616e+12 -1.658e+13 -3.445e+12 -1.457e+13 -3.280e+12 -1.276e+13 -3.120e+12 -1.112e+13 -2.963e+12 -9.662e+12 -2.810e+12 -8.355e+12 -2.660e+12 -7.195e+12 -2.513e+12 -6.171e+12 -2.369e+12 -5.269e+12 -2.228e+12 -4.480e+12 -2.092e+12 -3.794e+12 -1.959e+12 -3.199e+12 -1.832e+12 -2.686e+12 -1.711e+12 -2.247e+12 -1.595e+12 -1.872e+12 -1.486e+12 -1.554e+12 -1.383e+12 -1.284e+12 -1.287e+12 -1.056e+12 -1.198e+12 -8.646e+11 -1.114e+12 -7.036e+11 -1.037e+12 -5.683e+11 -9.642e+11 -4.549e+11 -8.961e+11 -3.600e+11 -8.317e+11 -2.807e+11 -7.701e+11 -2.146e+11 -7.109e+11 -1.600e+11 -6.534e+11 -1.153e+11 -5.971e+11 -7.915e+10 -5.419e+11 -5.055e+10 -4.877e+11 -2.849e+10 -4.344e+11 -1.214e+10 -3.823e+11 -7.245e+08 -3.318e+11 6.548e+09 -2.831e+11 1.040e+10 -2.368e+11 1.153e+10 -1.934e+11 1.064e+10 -1.534e+11 8.405e+09 -1.173e+11 5.475e+09 -8.548e+10 2.426e+09 -5.842e+10 -2.173e+08 -3.646e+10 -2.032e+09 -1.984e+10 -2.816e+09 -8.690e+09 -3.194e+09 -2.616e+09 -5.209e+09 1.323e+09 -1.012e+10 7.551e+09 -1.784e+10 1.831e+10 -2.811e+10 3.383e+10 -4.087e+10 5.387e+10 -5.601e+10 7.800e+10 -7.337e+10 1.057e+11 -9.280e+10 1.366e+11 -1.141e+11 1.700e+11 -1.369e+11 2.053e+11 -1.610e+11 2.421e+11 -1.861e+11 2.796e+11 -2.118e+11 3.173e+11 -2.379e+11 3.547e+11 -2.638e+11 3.913e+11 -2.894e+11 4.264e+11 -3.143e+11 4.597e+11 -3.381e+11 4.907e+11 -3.605e+11 5.190e+11 -3.813e+11 5.443e+11 -4.002e+11 5.664e+11 -4.170e+11 5.850e+11 -4.315e+11 5.999e+11 -4.435e+11 6.110e+11 -4.528e+11 6.182e+11 -4.595e+11 6.215e+11 -4.634e+11 6.210e+11 -4.646e+11 6.166e+11 -4.630e+11 6.086e+11 -4.587e+11 5.971e+11 -4.519e+11 5.823e+11 -4.426e+11 5.645e+11 -4.311e+11 5.441e+11 -4.176e+11 5.212e+11 -4.021e+11 4.963e+11 -3.850e+11 4.695e+11 -3.664e+11 4.413e+11 -3.466e+11 4.121e+11 -3.259e+11 3.822e+11 -3.045e+11 3.520e+11 -2.826e+11 3.218e+11 -2.606e+11 2.920e+11 -2.387e+11 2.629e+11 -2.171e+11 2.347e+11 -1.959e+11 2.077e+11 -1.755e+11 1.822e+11 -1.558e+11 1.583e+11 -1.372e+11 1.361e+11 -1.197e+11 1.157e+11 -1.033e+11 9.721e+10 -8.823e+10 8.062e+10 -7.445e+10 6.594e+10 -6.198e+10 5.309e+10 -5.082e+10 4.200e+10 -4.096e+10 3.259e+10 -3.236e+10 2.472e+10 -2.496e+10 1.827e+10 -1.871e+10 1.309e+10 -1.353e+10 9.031e+09 -9.328e+09 5.944e+09 -6.036e+09 3.680e+09 -3.558e+09 2.095e+09 -1.808e+09 1.053e+09 -7.015e+08 4.324e+08 -1.497e+08 1.218e+08 8.792e+07 2.408e+07 4.445e+08 2.635e+06 1.145e+09 -3.758e+07 2.141e+09 -4.773e+07 3.385e+09 2.804e+07 4.840e+09 2.382e+08 6.475e+09 6.251e+08 8.266e+09 1.226e+09 1.020e+10 2.076e+09 1.226e+10 3.210e+09 1.445e+10 4.657e+09 1.675e+10 6.453e+09 1.917e+10 8.631e+09 2.170e+10 1.122e+10 2.433e+10 1.426e+10 2.707e+10 1.778e+10 2.990e+10 2.180e+10 3.282e+10 2.635e+10 3.581e+10 3.145e+10 3.885e+10 3.710e+10 4.193e+10 4.332e+10 4.503e+10 5.009e+10 4.812e+10 5.740e+10 5.118e+10 6.522e+10 5.420e+10 7.351e+10 5.713e+10 8.222e+10 5.996e+10 9.128e+10 6.266e+10 1.006e+11 6.521e+10 1.102e+11 6.757e+10 1.199e+11 6.974e+10 1.296e+11 7.168e+10 1.392e+11 7.337e+10 1.486e+11 7.480e+10 1.577e+11 7.595e+10 1.663e+11 7.681e+10 1.745e+11 7.737e+10 1.821e+11 7.761e+10 1.889e+11 7.754e+10 1.949e+11 7.715e+10 2.001e+11 7.645e+10 2.042e+11 7.544e+10 2.074e+11 7.414e+10 2.096e+11 7.256e+10 2.106e+11 7.072e+10 2.107e+11 6.864e+10 2.096e+11 6.634e+10 2.075e+11 6.385e+10 2.045e+11 6.119e+10 2.005e+11 5.840e+10 1.955e+11 5.550e+10 1.898e+11 5.252e+10 1.832e+11 4.948e+10 1.760e+11 4.643e+10 1.682e+11 4.338e+10 1.599e+11 4.035e+10 1.512e+11 3.738e+10 1.421e+11 3.447e+10 1.329e+11 3.164e+10 1.235e+11 2.892e+10 1.140e+11 2.631e+10 1.046e+11 2.383e+10 9.535e+10 2.147e+10 8.627e+10 1.925e+10 7.745e+10 1.716e+10 6.896e+10 1.521e+10 6.085e+10 1.340e+10 5.317e+10 1.172e+10 4.596e+10 1.018e+10 3.925e+10 8.766e+09 3.307e+10 7.477e+09 2.744e+10 6.309e+09 2.237e+10 5.256e+09 1.785e+10 4.315e+09 1.390e+10 3.480e+09 1.050e+10 2.746e+09 7.633e+09 2.109e+09 5.278e+09 1.564e+09 3.411e+09 1.108e+09 1.999e+09 7.382e+08 1.006e+09 4.608e+08 3.842e+08 2.960e+08 4.732e+07 2.617e+08 -1.801e+08 3.099e+08 -5.168e+08 3.633e+08 -1.043e+09 3.948e+08 -1.738e+09 4.017e+08 -2.562e+09 3.878e+08 -3.478e+09 3.593e+08 -4.447e+09 3.229e+08 -5.434e+09 2.852e+08 -6.408e+09 2.527e+08 -7.343e+09 2.311e+08 -8.213e+09 2.261e+08 -8.996e+09 2.414e+08 -9.681e+09 2.803e+08 -1.025e+10 3.449e+08 -1.071e+10 4.362e+08 -1.104e+10 5.542e+08 -1.125e+10 6.981e+08 -1.134e+10 8.662e+08 -1.132e+10 1.056e+09 -1.119e+10 1.264e+09 -1.096e+10 1.487e+09 -1.064e+10 1.721e+09 -1.026e+10 1.962e+09 -9.807e+09 2.209e+09 -9.309e+09 0.005 -51.343 -50.482 -49.621 -48.759 -47.898 -47.037 -46.176 -45.385 -44.675 -44.042 -43.480 -42.986 -42.558 -42.195 -41.892 -41.650 -41.467 -41.342 -41.276 -41.269 -41.321 -41.434 -41.609 -41.848 -42.154 -42.530 -42.980 -43.510 -44.126 -44.835 -45.648 -46.577 -47.638 -48.853 -50.249 -51.869 -53.770 -56.049 -58.869 -62.562 -68.009 -80.353 -78.181 -71.670 -68.571 -67.533 -67.530 -67.721 -66.653 -63.843 -60.519 -57.483 -54.858 -52.599 -50.640 -48.927 -47.418 -46.082 -44.896 -43.839 -42.899 -42.064 -41.324 -40.673 -40.105 -39.614 -39.198 -38.854 -38.579 -38.372 -38.233 -38.160 -38.155 -38.217 -38.349 -38.551 -38.828 -39.181 -39.616 -40.137 -40.752 -41.466 -42.291 -43.237 -44.320 -45.555 -46.963 -48.568 -50.398 -52.476 -54.799 -57.302 -59.804 -62.047 -63.976 -65.860 -67.221 -65.706 -61.252 -56.863 -53.224 -50.197 -47.627 -45.405 -43.457 -41.732 -40.193 -38.813 -37.570 -36.450 -35.440 -34.529 -33.706 -32.966 -32.306 -31.721 -31.208 -30.766 -30.392 -30.084 -29.844 -29.669 -29.562 -29.522 -29.552 -29.654 -29.834 -30.093 -30.436 -30.866 -31.390 -32.023 -32.778 -33.671 -34.722 -35.959 -37.417 -39.145 -41.206 -43.678 -46.628 -49.944 -52.923 -54.567 -55.272 -56.636 -57.915 -54.561 -48.406 -43.259 -39.220 -35.895 -33.056 -30.574 -28.367 -26.381 -24.574 -22.919 -21.393 -19.975 -18.645 -17.402 -16.239 -15.150 -14.128 -13.166 -12.249 -11.376 -10.552 -9.777 -9.046 -8.355 -7.690 -7.059 -6.465 -5.909 -5.385 -4.883 -4.406 -3.963 -3.553 -3.164 -2.791 -2.446 -2.132 -1.843 -1.567 -1.316 -1.095 -0.897 -0.710 -0.547 -0.414 -0.298 -0.191 -0.111 -0.062 -0.022 0.000 -0.008 -0.047 -0.077 -0.138 -0.228 -0.338 -0.458 -0.608 -0.786 -0.977 -1.187 -1.428 -1.694 -1.970 -2.271 -2.603 -2.960 -3.332 -3.728 -4.159 -4.620 -5.104 -5.614 -6.160 -6.745 -7.358 -7.999 -8.676 -9.398 -10.165 -10.974 -11.817 -12.710 -13.662 -14.676 -15.758 -16.905 -18.122 -19.431 -20.844 -22.378 -24.051 -25.890 -27.922 -30.209 -32.844 -35.978 -39.916 -45.488 -57.713 -68.021 -51.472 -48.186 -47.091 -47.176 -48.089 -49.329 -49.610 -47.921 -45.099 -42.350 -40.019 -38.088 -36.485 -35.146 -34.022 -33.078 -32.287 -31.628 -31.087 -30.651 -30.311 -30.060 -29.886 -29.786 -29.761 -29.808 -29.927 -30.114 -30.369 -30.691 -31.082 -31.543 -32.074 -32.679 -33.359 -34.120 -34.965 -35.899 -36.930 -38.062 -39.304 -40.670 -42.174 -43.830 -45.657 -47.674 -49.907 -52.390 -55.173 -58.320 -61.737 -64.048 -62.953 -59.724 -56.423 -53.581 -51.151 -49.050 -47.215 -45.601 -44.176 -42.914 -41.794 -40.803 -39.924 -39.147 -38.464 -37.869 -37.354 -36.915 -36.548 -36.249 -36.016 -35.845 -35.736 -35.687 -35.696 -35.764 -35.890 -36.074 -36.316 -36.618 -36.981 -37.406 -37.896 -38.454 -39.083 -39.788 -40.573 -41.445 -42.412 -43.482 -44.669 -45.986 -47.453 -49.092 -50.935 -53.021 -55.405 -58.156 -61.355 -65.059 -69.056 -72.455 -74.331 -75.052 -74.039 -70.434 -66.183 -62.492 -59.433 -56.880 -54.721 -52.871 -51.271 -49.877 -48.658 -47.588 -46.650 -45.827 -45.109 -44.485 -43.948 -43.493 -43.112 -42.803 -42.562 -42.386 -42.273 -42.221 -42.229 -42.296 -42.422 -42.607 -42.851 -43.154 -43.519 -43.946 -44.438 -44.999 -45.630 -46.337 -47.123 -47.995 -48.961 -50.010 -51.058 -52.107 -53.155 -54.204 -55.252 0.03 -18.7983 -18.4273 -18.06 -17.6963 -17.3364 -16.9801 -16.6276 -16.2787 -15.9336 -15.5921 -15.2544 -14.9203 -14.59 -14.2633 -13.9403 -13.6211 -13.3055 -12.9936 -12.6855 -12.381 -12.0802 -11.7831 -11.4898 -11.2001 -10.9141 -10.6318 -10.3532 -10.0783 -9.8072 -9.5397 -9.2759 -9.0158 -8.7594 -8.5067 -8.2577 -8.0124 -7.7708 -7.5329 -7.2987 -7.0681 -6.8413 -6.6182 -6.3988 -6.1831 -5.9711 -5.7627 -5.5581 -5.3572 -5.16 -4.9664 -4.7766 -4.5905 -4.408 -4.2293 -4.0542 -3.8829 -3.7153 -3.5513 -3.3911 -3.2345 -3.0817 -2.9325 -2.7871 -2.6453 -2.5072 -2.3729 -2.2422 -2.1152 -1.992 -1.8724 -1.7565 -1.6444 -1.5359 -1.4311 -1.33 -1.2327 -1.139 -1.049 -0.9627 -0.88011 -0.80122 -0.72603 -0.65453 -0.58674 -0.52264 -0.46224 -0.40553 -0.35253 -0.30322 -0.25762 -0.21571 -0.17749 -0.14298 -0.11216 -0.085047 -0.061627 -0.041906 -0.025882 -0.013557 -0.0049293 0 0.0012313 -0.0012355 -0.0074004 -0.017263 -0.030824 -0.048083 -0.06904 -0.093696 -0.12205 -0.1541 -0.18985 -0.2293 -0.27244 -0.31929 -0.36983 -0.42407 -0.482 -0.54364 -0.60897 -0.67801 -0.75074 -0.82716 -0.90729 -0.99111 -1.0786 -1.1699 -1.2648 -1.3634 -1.4657 -1.5717 -1.6814 -1.7948 -1.9119 -2.0327 -2.1573 -2.2855 -2.4174 -2.5529 -2.6922 -2.8352 -2.9819 -3.1323 -3.2864 -3.4442 -3.6057 -3.7709 -3.9397 -4.1123 -4.2886 -4.4686 -4.6522 -4.8396 -5.0307 -5.2254 -5.4239 -5.6261 -5.8319 -6.0415 -6.2547 -6.4717 -6.6923 -6.9167 -7.1447 -7.3765 -7.6119 -7.8511 -8.0939 -8.3405 -8.5907 -8.8446 -9.1023 -9.3636 -9.6286 -9.8973 -10.1698 -10.4459 -10.7257 -11.0092 -11.2965 -11.5874 -11.882 -12.1803 -12.4823 -12.788 -13.0974 -13.4105 -13.7273 -14.0478 -14.372 -14.6999 -15.0315 -15.3668 -15.7058 -16.0485 -16.3949 -16.745 -17.0987 -17.4562 -17.8174 -18.1823 1.0 59658.3803 IW1 VV 26.72 31.67 0.050 -8.338e+09 5.696e+09 -8.016e+09 4.746e+09 -7.712e+09 3.889e+09 -7.426e+09 3.116e+09 -7.158e+09 2.420e+09 -6.907e+09 1.792e+09 -6.672e+09 1.225e+09 -6.447e+09 7.125e+08 -6.230e+09 2.484e+08 -6.017e+09 -1.717e+08 -5.804e+09 -5.516e+08 -5.586e+09 -8.925e+08 -5.361e+09 -1.196e+09 -5.125e+09 -1.463e+09 -4.878e+09 -1.693e+09 -4.617e+09 -1.885e+09 -4.342e+09 -2.040e+09 -4.055e+09 -2.157e+09 -3.755e+09 -2.237e+09 -3.446e+09 -2.281e+09 -3.129e+09 -2.290e+09 -2.808e+09 -2.265e+09 -2.485e+09 -2.209e+09 -2.165e+09 -2.123e+09 -1.851e+09 -2.012e+09 -1.546e+09 -1.879e+09 -1.257e+09 -1.727e+09 -9.851e+08 -1.562e+09 -7.355e+08 -1.388e+09 -5.113e+08 -1.212e+09 -3.149e+08 -1.039e+09 -1.472e+08 -8.752e+08 -6.845e+06 -7.273e+08 1.113e+08 -6.008e+08 2.177e+08 -4.988e+08 3.275e+08 -4.198e+08 4.582e+08 -3.555e+08 6.250e+08 -2.930e+08 8.379e+08 -2.179e+08 1.101e+09 -1.179e+08 1.415e+09 1.616e+07 1.776e+09 1.897e+08 2.182e+09 4.056e+08 2.625e+09 6.643e+08 3.099e+09 9.642e+08 3.595e+09 1.302e+09 4.105e+09 1.672e+09 4.618e+09 2.068e+09 5.125e+09 2.483e+09 5.614e+09 2.906e+09 6.077e+09 3.330e+09 6.502e+09 3.742e+09 6.880e+09 4.133e+09 7.204e+09 4.494e+09 7.465e+09 4.814e+09 7.658e+09 5.086e+09 7.781e+09 5.302e+09 7.829e+09 5.456e+09 7.803e+09 5.545e+09 7.704e+09 5.567e+09 7.536e+09 5.521e+09 7.305e+09 5.411e+09 7.015e+09 5.239e+09 6.674e+09 5.010e+09 6.291e+09 4.732e+09 5.874e+09 4.411e+09 5.433e+09 4.057e+09 4.978e+09 3.679e+09 4.517e+09 3.286e+09 4.059e+09 2.888e+09 3.614e+09 2.493e+09 3.186e+09 2.110e+09 2.783e+09 1.747e+09 2.409e+09 1.409e+09 2.069e+09 1.100e+09 1.765e+09 8.255e+08 1.501e+09 5.861e+08 1.276e+09 3.815e+08 1.092e+09 2.096e+08 9.489e+08 6.518e+07 8.466e+08 -5.976e+07 7.833e+08 -1.750e+08 7.560e+08 -2.916e+08 7.612e+08 -4.194e+08 7.957e+08 -5.653e+08 8.577e+08 -7.335e+08 9.475e+08 -9.257e+08 1.067e+09 -1.141e+09 1.221e+09 -1.379e+09 1.414e+09 -1.636e+09 1.653e+09 -1.912e+09 1.947e+09 -2.203e+09 2.305e+09 -2.508e+09 2.738e+09 -2.824e+09 3.258e+09 -3.149e+09 3.880e+09 -3.480e+09 4.619e+09 -3.813e+09 5.493e+09 -4.146e+09 6.524e+09 -4.473e+09 7.730e+09 -4.788e+09 9.137e+09 -5.083e+09 1.077e+10 -5.350e+09 1.265e+10 -5.576e+09 1.480e+10 -5.751e+09 1.725e+10 -5.859e+09 2.002e+10 -5.887e+09 2.312e+10 -5.820e+09 2.656e+10 -5.643e+09 3.036e+10 -5.341e+09 3.452e+10 -4.904e+09 3.902e+10 -4.321e+09 4.386e+10 -3.585e+09 4.900e+10 -2.695e+09 5.443e+10 -1.651e+09 6.008e+10 -4.605e+08 6.591e+10 8.630e+08 7.187e+10 2.303e+09 7.787e+10 3.837e+09 8.383e+10 5.434e+09 8.968e+10 7.065e+09 9.532e+10 8.691e+09 1.007e+11 1.027e+10 1.056e+11 1.177e+10 1.101e+11 1.314e+10 1.140e+11 1.435e+10 1.172e+11 1.535e+10 1.197e+11 1.611e+10 1.214e+11 1.661e+10 1.222e+11 1.681e+10 1.222e+11 1.669e+10 1.212e+11 1.626e+10 1.192e+11 1.550e+10 1.163e+11 1.442e+10 1.125e+11 1.305e+10 1.078e+11 1.139e+10 1.023e+11 9.495e+09 9.603e+10 7.396e+09 8.909e+10 5.144e+09 8.159e+10 2.796e+09 7.369e+10 4.172e+08 6.551e+10 -1.930e+09 5.722e+10 -4.179e+09 4.901e+10 -6.261e+09 4.106e+10 -8.125e+09 3.355e+10 -9.738e+09 2.670e+10 -1.111e+10 2.066e+10 -1.232e+10 1.550e+10 -1.357e+10 1.118e+10 -1.517e+10 7.385e+09 -1.756e+10 3.592e+09 -2.120e+10 -8.542e+08 -2.643e+10 -6.584e+09 -3.346e+10 -1.410e+10 -4.242e+10 -2.373e+10 -5.336e+10 -3.575e+10 -6.635e+10 -5.028e+10 -8.143e+10 -6.738e+10 -9.863e+10 -8.705e+10 -1.180e+11 -1.092e+11 -1.395e+11 -1.337e+11 -1.630e+11 -1.603e+11 -1.886e+11 -1.887e+11 -2.162e+11 -2.185e+11 -2.455e+11 -2.493e+11 -2.764e+11 -2.806e+11 -3.088e+11 -3.117e+11 -3.423e+11 -3.422e+11 -3.768e+11 -3.712e+11 -4.118e+11 -3.982e+11 -4.472e+11 -4.225e+11 -4.825e+11 -4.433e+11 -5.174e+11 -4.600e+11 -5.516e+11 -4.720e+11 -5.849e+11 -4.789e+11 -6.169e+11 -4.800e+11 -6.473e+11 -4.751e+11 -6.762e+11 -4.640e+11 -7.034e+11 -4.465e+11 -7.288e+11 -4.227e+11 -7.528e+11 -3.925e+11 -7.755e+11 -3.562e+11 -7.975e+11 -3.139e+11 -8.194e+11 -2.656e+11 -8.422e+11 -2.114e+11 -8.672e+11 -1.508e+11 -8.958e+11 -8.292e+10 -9.297e+11 -6.532e+09 -9.708e+11 8.050e+10 -1.021e+12 1.810e+11 -1.083e+12 2.983e+11 -1.158e+12 4.370e+11 -1.248e+12 6.021e+11 -1.357e+12 7.987e+11 -1.484e+12 1.033e+12 -1.632e+12 1.311e+12 -1.803e+12 1.640e+12 -1.998e+12 2.026e+12 -2.219e+12 2.476e+12 -2.468e+12 2.996e+12 -2.747e+12 3.594e+12 -3.059e+12 4.276e+12 -3.406e+12 5.049e+12 -3.790e+12 5.921e+12 -4.216e+12 6.898e+12 -4.686e+12 7.985e+12 -5.203e+12 1.011e+13 -6.349e+12 1.156e+13 -7.029e+12 1.315e+13 -7.774e+12 1.488e+13 -8.589e+12 1.675e+13 -9.479e+12 1.878e+13 -1.045e+13 2.095e+13 -1.151e+13 2.330e+13 -1.266e+13 2.579e+13 -1.392e+13 2.844e+13 -1.528e+13 3.125e+13 -1.675e+13 3.421e+13 -1.834e+13 3.732e+13 -2.005e+13 4.057e+13 -2.192e+13 4.396e+13 -2.391e+13 4.749e+13 -2.604e+13 5.114e+13 -2.834e+13 5.489e+13 -3.080e+13 5.876e+13 -3.341e+13 6.271e+13 -3.621e+13 6.672e+13 -3.917e+13 7.080e+13 -4.233e+13 7.490e+13 -4.565e+13 7.903e+13 -4.917e+13 8.316e+13 -5.287e+13 8.729e+13 -5.676e+13 9.136e+13 -6.084e+13 9.539e+13 -6.511e+13 9.932e+13 -6.956e+13 1.032e+14 -7.419e+13 1.069e+14 -7.900e+13 1.105e+14 -8.398e+13 1.139e+14 -8.913e+13 1.172e+14 -9.444e+13 1.202e+14 -9.990e+13 1.230e+14 -1.055e+14 1.256e+14 -1.113e+14 1.280e+14 -1.171e+14 1.301e+14 -1.231e+14 1.320e+14 -1.291e+14 1.334e+14 -1.353e+14 1.346e+14 -1.416e+14 1.355e+14 -1.478e+14 1.361e+14 -1.542e+14 1.364e+14 -1.606e+14 1.362e+14 -1.670e+14 1.358e+14 -1.734e+14 1.349e+14 -1.798e+14 1.337e+14 -1.863e+14 1.322e+14 -1.927e+14 1.302e+14 -1.990e+14 1.279e+14 -2.053e+14 1.253e+14 -2.116e+14 1.221e+14 -2.177e+14 1.187e+14 -2.238e+14 1.148e+14 -2.297e+14 1.107e+14 -2.356e+14 1.061e+14 -2.414e+14 1.012e+14 -2.471e+14 9.588e+13 -2.525e+14 9.021e+13 -2.577e+14 8.417e+13 -2.628e+14 7.779e+13 -2.677e+14 7.105e+13 -2.724e+14 6.399e+13 -2.769e+14 5.659e+13 -2.811e+14 4.888e+13 -2.850e+14 4.088e+13 -2.887e+14 3.258e+13 -2.920e+14 2.400e+13 -2.951e+14 1.517e+13 -2.979e+14 6.093e+12 -3.005e+14 -3.225e+12 -3.026e+14 -1.275e+13 -3.045e+14 -2.247e+13 -3.060e+14 -3.238e+13 -3.072e+14 -4.245e+13 -3.080e+14 -5.266e+13 -3.086e+14 -6.301e+13 -3.088e+14 -7.346e+13 -3.086e+14 -8.401e+13 -3.080e+14 -9.464e+13 -3.072e+14 -1.054e+14 -3.060e+14 -1.161e+14 -3.045e+14 -1.268e+14 -3.026e+14 -1.375e+14 -3.004e+14 -1.483e+14 -2.978e+14 -1.591e+14 -2.950e+14 -1.698e+14 -2.918e+14 -1.804e+14 -2.883e+14 -1.910e+14 -2.844e+14 -2.015e+14 -2.803e+14 -2.118e+14 -2.759e+14 -2.221e+14 -2.712e+14 -2.342e+14 -2.641e+14 -2.420e+14 -2.631e+14 -2.517e+14 -2.575e+14 -2.614e+14 -2.517e+14 -2.708e+14 -2.456e+14 -2.800e+14 -2.393e+14 -2.890e+14 -2.326e+14 -2.977e+14 -2.259e+14 -3.062e+14 -2.188e+14 -3.143e+14 -2.116e+14 -3.223e+14 -2.041e+14 -3.298e+14 -1.966e+14 -3.369e+14 -1.887e+14 -3.438e+14 -1.808e+14 -3.502e+14 -1.726e+14 -3.562e+14 -1.643e+14 -3.618e+14 -1.560e+14 -3.669e+14 -1.475e+14 -3.715e+14 -1.390e+14 -3.757e+14 -1.304e+14 -3.794e+14 -1.217e+14 -3.825e+14 -1.130e+14 -3.851e+14 -1.045e+14 -3.871e+14 -9.582e+13 -3.887e+14 -8.725e+13 -3.895e+14 -7.876e+13 -3.899e+14 -7.038e+13 -3.896e+14 -6.211e+13 -3.888e+14 -5.401e+13 -3.874e+14 -4.608e+13 -3.854e+14 -3.835e+13 -3.828e+14 -3.085e+13 -3.796e+14 -2.358e+13 -3.760e+14 -1.660e+13 -3.717e+14 -9.892e+12 -3.669e+14 -3.490e+12 -3.616e+14 2.586e+12 -3.558e+14 8.328e+12 -3.496e+14 1.373e+13 -3.430e+14 1.876e+13 -3.359e+14 2.344e+13 -3.285e+14 2.774e+13 -3.207e+14 3.168e+13 -3.126e+14 3.525e+13 -3.042e+14 3.844e+13 -2.956e+14 4.125e+13 -2.867e+14 4.369e+13 -2.777e+14 4.577e+13 -2.685e+14 4.749e+13 -2.592e+14 4.888e+13 -2.498e+14 4.992e+13 -2.403e+14 5.065e+13 -2.307e+14 5.107e+13 -2.211e+14 5.121e+13 -2.116e+14 5.108e+13 -2.022e+14 5.068e+13 -1.928e+14 5.006e+13 -1.835e+14 4.921e+13 -1.743e+14 4.816e+13 -1.652e+14 4.693e+13 -1.563e+14 4.555e+13 -1.477e+14 4.402e+13 -1.392e+14 4.237e+13 -1.310e+14 4.062e+13 -1.229e+14 3.877e+13 -1.152e+14 3.687e+13 -1.077e+14 3.492e+13 -1.004e+14 3.292e+13 -9.346e+13 3.092e+13 -8.674e+13 2.891e+13 -8.034e+13 2.691e+13 -7.422e+13 2.494e+13 -6.841e+13 2.301e+13 -6.289e+13 2.112e+13 -5.767e+13 1.929e+13 -5.274e+13 1.752e+13 -4.810e+13 1.584e+13 -4.374e+13 1.423e+13 -3.968e+13 1.271e+13 -3.588e+13 1.127e+13 -3.236e+13 9.929e+12 -2.910e+13 8.681e+12 -2.608e+13 7.523e+12 -2.545e+13 7.053e+12 -2.269e+13 6.000e+12 -2.017e+13 5.045e+12 -1.787e+13 4.184e+12 -1.578e+13 3.415e+12 -1.389e+13 2.733e+12 -1.218e+13 2.134e+12 -1.065e+13 1.612e+12 -9.280e+12 1.161e+12 -8.060e+12 7.774e+11 -6.979e+12 4.540e+11 -6.023e+12 1.849e+11 -5.184e+12 -3.544e+10 -4.450e+12 -2.127e+11 -3.810e+12 -3.524e+11 -3.255e+12 -4.599e+11 -2.776e+12 -5.400e+11 -2.363e+12 -5.972e+11 -2.010e+12 -6.355e+11 -1.709e+12 -6.586e+11 -1.452e+12 -6.695e+11 -1.233e+12 -6.708e+11 -1.047e+12 -6.645e+11 -8.889e+11 -6.523e+11 -7.539e+11 -6.353e+11 -6.387e+11 -6.143e+11 -5.398e+11 -5.898e+11 -4.549e+11 -5.623e+11 -3.818e+11 -5.320e+11 -3.187e+11 -4.991e+11 -2.644e+11 -4.638e+11 -2.177e+11 -4.264e+11 -1.777e+11 -3.873e+11 -1.437e+11 -3.470e+11 -1.150e+11 -3.059e+11 -9.093e+10 -2.648e+11 -7.109e+10 -2.243e+11 -5.493e+10 -1.852e+11 -4.195e+10 -1.481e+11 -3.167e+10 -1.139e+11 -2.362e+10 -8.324e+10 -1.736e+10 -5.674e+10 -1.249e+10 -3.501e+10 -8.645e+09 -1.850e+10 -5.663e+09 -7.494e+09 -4.002e+09 -1.477e+09 -4.671e+09 3.057e+09 -7.444e+09 1.087e+10 -1.150e+10 2.416e+10 -1.654e+10 4.314e+10 -2.261e+10 6.758e+10 -2.973e+10 9.706e+10 -3.795e+10 1.311e+11 -4.728e+10 1.690e+11 -5.769e+10 2.104e+11 -6.910e+10 2.543e+11 -8.144e+10 3.002e+11 -9.459e+10 3.472e+11 -1.084e+11 3.948e+11 -1.227e+11 4.421e+11 -1.374e+11 4.884e+11 -1.522e+11 5.331e+11 -1.669e+11 5.757e+11 -1.815e+11 6.154e+11 -1.956e+11 6.518e+11 -2.092e+11 6.845e+11 -2.220e+11 7.132e+11 -2.338e+11 7.374e+11 -2.446e+11 7.570e+11 -2.541e+11 7.718e+11 -2.623e+11 7.818e+11 -2.690e+11 7.868e+11 -2.742e+11 7.871e+11 -2.779e+11 7.825e+11 -2.799e+11 7.734e+11 -2.803e+11 7.599e+11 -2.791e+11 7.424e+11 -2.762e+11 7.210e+11 -2.719e+11 6.963e+11 -2.661e+11 6.686e+11 -2.589e+11 6.381e+11 -2.504e+11 6.054e+11 -2.408e+11 5.708e+11 -2.301e+11 5.348e+11 -2.186e+11 4.978e+11 -2.063e+11 4.603e+11 -1.935e+11 4.226e+11 -1.802e+11 3.853e+11 -1.667e+11 3.486e+11 -1.532e+11 3.129e+11 -1.396e+11 2.785e+11 -1.263e+11 2.458e+11 -1.133e+11 2.148e+11 -1.007e+11 1.860e+11 -8.873e+10 1.592e+11 -7.736e+10 1.348e+11 -6.671e+10 1.127e+11 -5.683e+10 9.294e+10 -4.776e+10 7.548e+10 -3.953e+10 6.028e+10 -3.216e+10 4.724e+10 -2.564e+10 3.621e+10 -1.995e+10 2.705e+10 -1.508e+10 1.961e+10 -1.098e+10 1.369e+10 -7.628e+09 9.118e+09 -4.962e+09 5.707e+09 -2.932e+09 3.272e+09 -1.485e+09 1.643e+09 -5.650e+08 6.574e+08 -1.105e+08 1.688e+08 9.396e+07 -3.580e+06 4.355e+08 -1.345e+08 1.101e+09 -3.857e+08 2.053e+09 -6.903e+08 3.257e+09 -9.765e+08 4.686e+09 -1.184e+09 6.321e+09 -1.263e+09 8.147e+09 -1.171e+09 1.016e+10 -8.688e+08 1.235e+10 -3.239e+08 1.471e+10 4.953e+08 1.726e+10 1.621e+09 2.000e+10 3.085e+09 2.292e+10 4.916e+09 2.602e+10 7.147e+09 2.932e+10 9.808e+09 3.278e+10 1.292e+10 3.642e+10 1.652e+10 4.021e+10 2.061e+10 4.414e+10 2.522e+10 4.819e+10 3.034e+10 5.234e+10 3.599e+10 5.655e+10 4.215e+10 6.080e+10 4.880e+10 6.506e+10 5.592e+10 6.929e+10 6.347e+10 7.346e+10 7.140e+10 7.754e+10 7.968e+10 8.149e+10 8.821e+10 8.528e+10 9.694e+10 8.887e+10 1.058e+11 9.223e+10 1.147e+11 9.532e+10 1.235e+11 9.813e+10 1.322e+11 1.006e+11 1.406e+11 1.027e+11 1.486e+11 1.045e+11 1.562e+11 1.059e+11 1.632e+11 1.069e+11 1.696e+11 1.074e+11 1.753e+11 1.075e+11 1.801e+11 1.072e+11 1.841e+11 1.064e+11 1.871e+11 1.052e+11 1.892e+11 1.036e+11 1.902e+11 1.016e+11 1.903e+11 9.918e+10 1.893e+11 9.641e+10 1.874e+11 9.330e+10 1.845e+11 8.988e+10 1.807e+11 8.620e+10 1.760e+11 8.228e+10 1.705e+11 7.817e+10 1.642e+11 7.390e+10 1.573e+11 6.953e+10 1.499e+11 6.508e+10 1.419e+11 6.061e+10 1.336e+11 5.615e+10 1.250e+11 5.174e+10 1.162e+11 4.741e+10 1.074e+11 4.319e+10 9.852e+10 3.911e+10 8.975e+10 3.520e+10 8.116e+10 3.148e+10 7.280e+10 2.795e+10 6.475e+10 2.464e+10 5.706e+10 2.155e+10 4.978e+10 1.869e+10 4.296e+10 1.607e+10 3.662e+10 1.367e+10 3.080e+10 1.149e+10 2.549e+10 9.543e+09 2.073e+10 7.806e+09 1.650e+10 6.275e+09 1.281e+10 4.942e+09 9.636e+09 3.795e+09 6.970e+09 2.824e+09 4.787e+09 2.019e+09 3.064e+09 1.368e+09 1.768e+09 8.632e+08 8.625e+08 5.029e+08 3.027e+08 2.935e+08 1.268e+06 2.260e+08 -2.141e+08 2.209e+08 -5.483e+08 1.900e+08 -1.068e+09 1.083e+08 -1.749e+09 -2.258e+07 -2.554e+09 -1.950e+08 -3.445e+09 -3.993e+08 -4.386e+09 -6.244e+08 -5.344e+09 -8.604e+08 -6.288e+09 -1.097e+09 -7.192e+09 -1.326e+09 -8.030e+09 -1.536e+09 -8.783e+09 -1.721e+09 -9.435e+09 -1.874e+09 -9.975e+09 -1.990e+09 -1.040e+10 -2.065e+09 -1.069e+10 -2.095e+09 -1.086e+10 -2.082e+09 -1.092e+10 -2.023e+09 -1.085e+10 -1.922e+09 -1.068e+10 -1.782e+09 -1.041e+10 -1.605e+09 -1.005e+10 -1.398e+09 -9.620e+09 -1.167e+09 -9.128e+09 -9.167e+08 -8.589e+09 0.005 -51.504 -50.602 -49.700 -48.798 -47.896 -46.994 -46.092 -45.262 -44.515 -43.845 -43.247 -42.718 -42.255 -41.855 -41.517 -41.239 -41.018 -40.855 -40.749 -40.699 -40.707 -40.773 -40.899 -41.084 -41.332 -41.645 -42.026 -42.478 -43.007 -43.618 -44.317 -45.112 -46.015 -47.037 -48.194 -49.506 -50.998 -52.704 -54.663 -56.926 -59.539 -62.494 -65.542 -67.913 -68.917 -69.097 -69.283 -69.368 -68.128 -65.145 -61.664 -58.489 -55.743 -53.376 -51.321 -49.522 -47.935 -46.527 -45.274 -44.156 -43.157 -42.267 -41.474 -40.772 -40.153 -39.614 -39.150 -38.758 -38.436 -38.181 -37.992 -37.870 -37.813 -37.822 -37.898 -38.042 -38.256 -38.543 -38.907 -39.350 -39.879 -40.499 -41.219 -42.046 -42.992 -44.070 -45.293 -46.677 -48.236 -49.978 -51.872 -53.813 -55.554 -56.730 -57.122 -56.869 -56.251 -55.397 -54.287 -52.871 -51.181 -49.330 -47.440 -45.601 -43.864 -42.249 -40.761 -39.397 -38.149 -37.011 -35.974 -35.031 -34.174 -33.399 -32.701 -32.079 -31.529 -31.049 -30.637 -30.291 -30.012 -29.798 -29.651 -29.571 -29.559 -29.619 -29.753 -29.965 -30.259 -30.637 -31.105 -31.677 -32.365 -33.185 -34.154 -35.298 -36.650 -38.253 -40.165 -42.456 -45.179 -48.199 -50.777 -51.846 -51.667 -51.691 -53.154 -57.936 -58.050 -50.862 -44.120 -39.533 -35.963 -33.001 -30.454 -28.212 -26.207 -24.391 -22.734 -21.204 -19.780 -18.455 -17.220 -16.067 -14.988 -13.975 -13.010 -12.093 -11.228 -10.414 -9.648 -8.923 -8.228 -7.567 -6.945 -6.363 -5.813 -5.287 -4.788 -4.323 -3.892 -3.483 -3.091 -2.726 -2.394 -2.086 -1.793 -1.524 -1.286 -1.071 -0.867 -0.687 -0.538 -0.404 -0.278 -0.179 -0.111 -0.051 -0.011 0.000 -0.020 -0.037 -0.084 -0.161 -0.255 -0.355 -0.485 -0.643 -0.815 -1.007 -1.230 -1.477 -1.733 -2.010 -2.320 -2.654 -3.002 -3.374 -3.780 -4.215 -4.670 -5.149 -5.664 -6.215 -6.794 -7.399 -8.039 -8.719 -9.443 -10.203 -10.995 -11.832 -12.721 -13.666 -14.670 -15.729 -16.846 -18.039 -19.317 -20.691 -22.171 -23.771 -25.500 -27.389 -29.479 -31.814 -34.460 -37.508 -41.072 -45.191 -49.251 -51.501 -51.421 -51.001 -51.298 -52.036 -51.928 -49.933 -46.867 -43.916 -41.416 -39.341 -37.614 -36.166 -34.944 -33.912 -33.041 -32.309 -31.699 -31.199 -30.798 -30.488 -30.258 -30.103 -30.024 -30.017 -30.082 -30.215 -30.415 -30.681 -31.014 -31.414 -31.882 -32.418 -33.026 -33.708 -34.466 -35.304 -36.226 -37.235 -38.334 -39.533 -40.837 -42.248 -43.768 -45.391 -47.102 -48.870 -50.637 -52.316 -53.780 -54.868 -55.393 -55.210 -54.334 -52.955 -51.325 -49.641 -48.014 -46.497 -45.106 -43.846 -42.710 -41.692 -40.781 -39.969 -39.250 -38.618 -38.068 -37.593 -37.192 -36.859 -36.593 -36.390 -36.249 -36.168 -36.146 -36.182 -36.277 -36.429 -36.640 -36.910 -37.240 -37.631 -38.086 -38.608 -39.198 -39.862 -40.604 -41.429 -42.344 -43.359 -44.483 -45.731 -47.117 -48.665 -50.400 -52.361 -54.597 -57.177 -60.202 -63.830 -68.238 -73.413 -78.117 -79.715 -77.962 -73.581 -68.774 -64.691 -61.348 -58.582 -56.257 -54.275 -52.567 -51.084 -49.789 -48.655 -47.660 -46.788 -46.026 -45.364 -44.793 -44.306 -43.898 -43.563 -43.299 -43.103 -42.971 -42.902 -42.895 -42.949 -43.063 -43.238 -43.473 -43.770 -44.129 -44.552 -45.043 -45.604 -46.238 -46.950 -47.745 -48.629 -49.610 -50.678 -51.746 -52.814 -53.881 -54.949 -56.017 0.03 -19.3259 -18.9422 -18.5623 -18.1863 -17.8141 -17.4457 -17.0813 -16.7206 -16.3638 -16.0109 -15.6618 -15.3165 -14.9751 -14.6376 -14.3039 -13.974 -13.648 -13.3259 -13.0075 -12.6931 -12.3825 -12.0757 -11.7728 -11.4737 -11.1785 -10.8871 -10.5996 -10.3159 -10.036 -9.76 -9.4879 -9.2196 -8.9552 -8.6946 -8.4378 -8.1849 -7.9359 -7.6907 -7.4493 -7.2118 -6.9781 -6.7483 -6.5224 -6.3002 -6.082 -5.8676 -5.657 -5.4503 -5.2474 -5.0483 -4.8532 -4.6618 -4.4743 -4.2907 -4.1109 -3.935 -3.7629 -3.5946 -3.4302 -3.2697 -3.113 -2.9601 -2.8111 -2.6659 -2.5246 -2.3872 -2.2535 -2.1238 -1.9978 -1.8758 -1.7575 -1.6432 -1.5326 -1.426 -1.3231 -1.2241 -1.129 -1.0377 -0.95026 -0.86666 -0.78691 -0.71101 -0.63896 -0.57076 -0.5064 -0.44589 -0.38923 -0.33642 -0.28745 -0.24233 -0.20106 -0.16364 -0.13007 -0.10034 -0.074465 -0.052434 -0.034252 -0.019917 -0.0094302 -0.0027912 0 -0.0010566 -0.0059611 -0.014713 -0.027314 -0.043762 -0.064057 -0.088201 -0.11619 -0.14803 -0.18372 -0.22325 -0.26664 -0.31387 -0.36495 -0.41987 -0.47865 -0.54127 -0.60774 -0.67806 -0.75222 -0.83023 -0.9121 -0.9978 -1.0874 -1.1808 -1.278 -1.3791 -1.4841 -1.5929 -1.7055 -1.822 -1.9423 -2.0665 -2.1946 -2.3264 -2.4622 -2.6018 -2.7452 -2.8925 -3.0436 -3.1985 -3.3574 -3.52 -3.6865 -3.8569 -4.0311 -4.2092 -4.3911 -4.5768 -4.7664 -4.9599 -5.1572 -5.3583 -5.5633 -5.7722 -5.9848 -6.2014 -6.4218 -6.646 -6.8741 -7.106 -7.3418 -7.5814 -7.8249 -8.0722 -8.3233 -8.5784 -8.8372 -9.0999 -9.3665 -9.6369 -9.9111 -10.1892 -10.4712 -10.757 -11.0466 -11.3401 -11.6375 -11.9387 -12.2437 -12.5526 -12.8653 -13.1819 -13.5023 -13.8266 -14.1547 -14.4867 -14.8225 -15.1622 -15.5057 -15.853 -16.2042 -16.5593 -16.9182 -17.281 -17.6476 -18.018 -18.3923 -18.7705 -19.1524 1.0 59658.3803 IW1 VH 26.72 31.67 0.050 -1.139e+10 -1.686e+09 -1.055e+10 -2.200e+09 -9.790e+09 -2.674e+09 -9.095e+09 -3.114e+09 -8.461e+09 -3.525e+09 -7.883e+09 -3.910e+09 -7.355e+09 -4.272e+09 -6.867e+09 -4.613e+09 -6.414e+09 -4.933e+09 -5.987e+09 -5.232e+09 -5.578e+09 -5.507e+09 -5.183e+09 -5.755e+09 -4.796e+09 -5.972e+09 -4.413e+09 -6.155e+09 -4.031e+09 -6.299e+09 -3.648e+09 -6.398e+09 -3.262e+09 -6.450e+09 -2.875e+09 -6.454e+09 -2.487e+09 -6.406e+09 -2.099e+09 -6.306e+09 -1.716e+09 -6.156e+09 -1.338e+09 -5.957e+09 -9.705e+08 -5.711e+09 -6.159e+08 -5.425e+09 -2.779e+08 -5.103e+09 4.054e+07 -4.751e+09 3.363e+08 -4.378e+09 6.077e+08 -3.991e+09 8.541e+08 -3.598e+09 1.076e+09 -3.209e+09 1.276e+09 -2.829e+09 1.459e+09 -2.466e+09 1.631e+09 -2.123e+09 1.802e+09 -1.801e+09 1.981e+09 -1.498e+09 2.179e+09 -1.208e+09 2.405e+09 -9.187e+08 2.666e+09 -6.193e+08 2.966e+09 -2.964e+08 3.305e+09 6.203e+07 3.681e+09 4.664e+08 4.089e+09 9.236e+08 4.522e+09 1.437e+09 4.974e+09 2.009e+09 5.437e+09 2.637e+09 5.902e+09 3.315e+09 6.362e+09 4.039e+09 6.810e+09 4.799e+09 7.239e+09 5.585e+09 7.641e+09 6.386e+09 8.012e+09 7.193e+09 8.347e+09 7.990e+09 8.640e+09 8.767e+09 8.889e+09 9.513e+09 9.092e+09 1.022e+10 9.244e+09 1.086e+10 9.347e+09 1.145e+10 9.398e+09 1.196e+10 9.399e+09 1.240e+10 9.349e+09 1.275e+10 9.250e+09 1.301e+10 9.105e+09 1.318e+10 8.914e+09 1.326e+10 8.681e+09 1.325e+10 8.408e+09 1.315e+10 8.100e+09 1.297e+10 7.760e+09 1.270e+10 7.392e+09 1.235e+10 7.000e+09 1.193e+10 6.590e+09 1.145e+10 6.168e+09 1.091e+10 5.737e+09 1.033e+10 5.303e+09 9.707e+09 4.872e+09 9.058e+09 4.448e+09 8.390e+09 4.036e+09 7.713e+09 3.640e+09 7.035e+09 3.264e+09 6.365e+09 2.912e+09 5.711e+09 2.587e+09 5.080e+09 2.289e+09 4.479e+09 2.021e+09 3.914e+09 1.783e+09 3.389e+09 1.575e+09 2.909e+09 1.398e+09 2.475e+09 1.249e+09 2.090e+09 1.128e+09 1.753e+09 1.034e+09 1.465e+09 9.666e+08 1.224e+09 9.259e+08 1.026e+09 9.130e+08 8.687e+08 9.303e+08 7.477e+08 9.813e+08 6.582e+08 1.070e+09 5.959e+08 1.203e+09 5.573e+08 1.384e+09 5.405e+08 1.622e+09 5.459e+08 1.923e+09 5.758e+08 2.297e+09 6.346e+08 2.753e+09 7.285e+08 3.302e+09 8.655e+08 3.956e+09 1.055e+09 4.726e+09 1.308e+09 5.625e+09 1.635e+09 6.667e+09 2.048e+09 7.861e+09 2.558e+09 9.219e+09 3.177e+09 1.075e+10 3.915e+09 1.247e+10 4.780e+09 1.437e+10 5.780e+09 1.647e+10 6.918e+09 1.875e+10 8.196e+09 2.123e+10 9.608e+09 2.388e+10 1.115e+10 2.671e+10 1.281e+10 2.969e+10 1.457e+10 3.281e+10 1.642e+10 3.604e+10 1.832e+10 3.935e+10 2.025e+10 4.272e+10 2.218e+10 4.610e+10 2.408e+10 4.945e+10 2.589e+10 5.274e+10 2.760e+10 5.591e+10 2.916e+10 5.891e+10 3.052e+10 6.170e+10 3.165e+10 6.422e+10 3.252e+10 6.643e+10 3.309e+10 6.826e+10 3.333e+10 6.969e+10 3.322e+10 7.066e+10 3.274e+10 7.114e+10 3.188e+10 7.110e+10 3.063e+10 7.052e+10 2.899e+10 6.938e+10 2.699e+10 6.768e+10 2.464e+10 6.545e+10 2.198e+10 6.269e+10 1.904e+10 5.947e+10 1.588e+10 5.583e+10 1.255e+10 5.184e+10 9.134e+09 4.762e+10 5.683e+09 4.326e+10 2.270e+09 3.888e+10 -1.057e+09 3.462e+10 -4.270e+09 3.062e+10 -7.384e+09 2.700e+10 -1.049e+10 2.384e+10 -1.376e+10 2.117e+10 -1.746e+10 1.887e+10 -2.195e+10 1.676e+10 -2.763e+10 1.456e+10 -3.486e+10 1.195e+10 -4.397e+10 8.653e+09 -5.521e+10 4.425e+09 -6.875e+10 -9.213e+08 -8.476e+10 -7.517e+09 -1.033e+11 -1.543e+10 -1.245e+11 -2.468e+10 -1.482e+11 -3.525e+10 -1.745e+11 -4.703e+10 -2.032e+11 -5.990e+10 -2.343e+11 -7.368e+10 -2.675e+11 -8.813e+10 -3.025e+11 -1.030e+11 -3.390e+11 -1.179e+11 -3.767e+11 -1.324e+11 -4.152e+11 -1.463e+11 -4.541e+11 -1.591e+11 -4.928e+11 -1.702e+11 -5.309e+11 -1.794e+11 -5.680e+11 -1.860e+11 -6.035e+11 -1.898e+11 -6.370e+11 -1.902e+11 -6.680e+11 -1.868e+11 -6.963e+11 -1.794e+11 -7.215e+11 -1.677e+11 -7.435e+11 -1.514e+11 -7.621e+11 -1.304e+11 -7.774e+11 -1.046e+11 -7.896e+11 -7.375e+10 -7.989e+11 -3.796e+10 -8.060e+11 3.069e+09 -8.114e+11 4.965e+10 -8.162e+11 1.023e+11 -8.213e+11 1.618e+11 -8.279e+11 2.296e+11 -8.372e+11 3.074e+11 -8.506e+11 3.978e+11 -8.692e+11 5.039e+11 -8.942e+11 6.296e+11 -9.264e+11 7.794e+11 -9.664e+11 9.584e+11 -1.015e+12 1.172e+12 -1.071e+12 1.426e+12 -1.135e+12 1.728e+12 -1.208e+12 2.082e+12 -1.289e+12 2.497e+12 -1.377e+12 2.979e+12 -1.473e+12 3.534e+12 -1.577e+12 4.171e+12 -1.689e+12 4.895e+12 -1.810e+12 5.715e+12 -1.942e+12 6.638e+12 -2.084e+12 7.670e+12 -2.239e+12 8.818e+12 -2.409e+12 1.054e+13 -2.711e+12 1.199e+13 -2.925e+12 1.359e+13 -3.163e+12 1.534e+13 -3.429e+12 1.724e+13 -3.725e+12 1.928e+13 -4.059e+12 2.150e+13 -4.433e+12 2.388e+13 -4.857e+12 2.642e+13 -5.333e+12 2.913e+13 -5.871e+12 3.201e+13 -6.476e+12 3.506e+13 -7.157e+12 3.828e+13 -7.921e+12 4.166e+13 -8.780e+12 4.520e+13 -9.738e+12 4.891e+13 -1.080e+13 5.276e+13 -1.199e+13 5.676e+13 -1.331e+13 6.090e+13 -1.476e+13 6.515e+13 -1.635e+13 6.950e+13 -1.811e+13 7.396e+13 -2.003e+13 7.850e+13 -2.212e+13 8.310e+13 -2.440e+13 8.775e+13 -2.685e+13 9.243e+13 -2.950e+13 9.712e+13 -3.235e+13 1.018e+14 -3.539e+13 1.065e+14 -3.865e+13 1.111e+14 -4.210e+13 1.155e+14 -4.577e+13 1.200e+14 -4.964e+13 1.243e+14 -5.371e+13 1.284e+14 -5.798e+13 1.325e+14 -6.246e+13 1.363e+14 -6.712e+13 1.399e+14 -7.197e+13 1.433e+14 -7.699e+13 1.465e+14 -8.218e+13 1.494e+14 -8.754e+13 1.520e+14 -9.306e+13 1.544e+14 -9.870e+13 1.564e+14 -1.045e+14 1.581e+14 -1.104e+14 1.595e+14 -1.164e+14 1.605e+14 -1.224e+14 1.613e+14 -1.286e+14 1.616e+14 -1.349e+14 1.615e+14 -1.411e+14 1.611e+14 -1.475e+14 1.602e+14 -1.538e+14 1.591e+14 -1.602e+14 1.575e+14 -1.666e+14 1.555e+14 -1.729e+14 1.532e+14 -1.792e+14 1.505e+14 -1.856e+14 1.475e+14 -1.918e+14 1.440e+14 -1.981e+14 1.401e+14 -2.042e+14 1.358e+14 -2.101e+14 1.312e+14 -2.161e+14 1.261e+14 -2.219e+14 1.208e+14 -2.276e+14 1.151e+14 -2.330e+14 1.090e+14 -2.384e+14 1.024e+14 -2.435e+14 9.569e+13 -2.484e+14 8.857e+13 -2.532e+14 8.112e+13 -2.577e+14 7.337e+13 -2.619e+14 6.533e+13 -2.659e+14 5.701e+13 -2.697e+14 4.840e+13 -2.732e+14 3.957e+13 -2.764e+14 3.049e+13 -2.793e+14 2.117e+13 -2.820e+14 1.166e+13 -2.842e+14 1.957e+12 -2.862e+14 -7.926e+12 -2.879e+14 -1.796e+13 -2.893e+14 -2.813e+13 -2.902e+14 -3.843e+13 -2.909e+14 -4.882e+13 -2.912e+14 -5.930e+13 -2.912e+14 -6.986e+13 -2.909e+14 -8.047e+13 -2.901e+14 -9.111e+13 -2.891e+14 -1.017e+14 -2.877e+14 -1.124e+14 -2.860e+14 -1.230e+14 -2.839e+14 -1.337e+14 -2.815e+14 -1.442e+14 -2.788e+14 -1.547e+14 -2.758e+14 -1.651e+14 -2.723e+14 -1.747e+14 -2.702e+14 -1.847e+14 -2.673e+14 -1.948e+14 -2.631e+14 -2.048e+14 -2.587e+14 -2.146e+14 -2.539e+14 -2.242e+14 -2.488e+14 -2.336e+14 -2.434e+14 -2.429e+14 -2.377e+14 -2.519e+14 -2.318e+14 -2.607e+14 -2.257e+14 -2.691e+14 -2.193e+14 -2.773e+14 -2.127e+14 -2.852e+14 -2.058e+14 -2.927e+14 -1.988e+14 -3.000e+14 -1.916e+14 -3.068e+14 -1.841e+14 -3.133e+14 -1.765e+14 -3.193e+14 -1.687e+14 -3.248e+14 -1.608e+14 -3.300e+14 -1.528e+14 -3.347e+14 -1.447e+14 -3.389e+14 -1.364e+14 -3.426e+14 -1.282e+14 -3.458e+14 -1.199e+14 -3.485e+14 -1.116e+14 -3.505e+14 -1.033e+14 -3.521e+14 -9.495e+13 -3.530e+14 -8.673e+13 -3.534e+14 -7.858e+13 -3.531e+14 -7.055e+13 -3.524e+14 -6.264e+13 -3.510e+14 -5.491e+13 -3.491e+14 -4.734e+13 -3.466e+14 -4.000e+13 -3.436e+14 -3.288e+13 -3.400e+14 -2.601e+13 -3.358e+14 -1.943e+13 -3.311e+14 -1.313e+13 -3.260e+14 -7.135e+12 -3.203e+14 -1.475e+12 -3.142e+14 3.851e+12 -3.078e+14 8.839e+12 -3.010e+14 1.347e+13 -2.939e+14 1.774e+13 -2.864e+14 2.165e+13 -2.785e+14 2.518e+13 -2.705e+14 2.835e+13 -2.622e+14 3.115e+13 -2.537e+14 3.359e+13 -2.451e+14 3.569e+13 -2.363e+14 3.744e+13 -2.274e+14 3.886e+13 -2.185e+14 3.995e+13 -2.095e+14 4.075e+13 -2.005e+14 4.125e+13 -1.916e+14 4.148e+13 -1.827e+14 4.145e+13 -1.739e+14 4.119e+13 -1.652e+14 4.070e+13 -1.566e+14 4.002e+13 -1.482e+14 3.914e+13 -1.400e+14 3.811e+13 -1.320e+14 3.693e+13 -1.241e+14 3.563e+13 -1.165e+14 3.422e+13 -1.091e+14 3.272e+13 -1.020e+14 3.116e+13 -9.508e+13 2.953e+13 -8.846e+13 2.787e+13 -8.212e+13 2.618e+13 -7.605e+13 2.448e+13 -7.026e+13 2.279e+13 -6.475e+13 2.112e+13 -5.952e+13 1.947e+13 -5.457e+13 1.786e+13 -4.990e+13 1.629e+13 -4.551e+13 1.479e+13 -4.139e+13 1.335e+13 -3.754e+13 1.197e+13 -3.395e+13 1.066e+13 -3.061e+13 9.431e+12 -2.752e+13 8.280e+12 -2.466e+13 7.210e+12 -2.298e+13 6.489e+12 -2.048e+13 5.548e+12 -1.819e+13 4.689e+12 -1.610e+13 3.913e+12 -1.420e+13 3.217e+12 -1.249e+13 2.597e+12 -1.094e+13 2.050e+12 -9.554e+12 1.572e+12 -8.314e+12 1.158e+12 -7.210e+12 8.040e+11 -6.233e+12 5.049e+11 -5.370e+12 2.553e+11 -4.613e+12 5.027e+10 -3.951e+12 -1.152e+11 -3.376e+12 -2.462e+11 -2.877e+12 -3.473e+11 -2.448e+12 -4.229e+11 -2.079e+12 -4.773e+11 -1.764e+12 -5.140e+11 -1.495e+12 -5.365e+11 -1.267e+12 -5.475e+11 -1.073e+12 -5.494e+11 -9.081e+11 -5.442e+11 -7.684e+11 -5.334e+11 -6.497e+11 -5.180e+11 -5.486e+11 -4.990e+11 -4.623e+11 -4.769e+11 -3.884e+11 -4.520e+11 -3.250e+11 -4.247e+11 -2.706e+11 -3.953e+11 -2.239e+11 -3.640e+11 -1.840e+11 -3.313e+11 -1.499e+11 -2.973e+11 -1.210e+11 -2.627e+11 -9.674e+10 -2.280e+11 -7.647e+10 -1.936e+11 -5.974e+10 -1.604e+11 -4.611e+10 -1.287e+11 -3.512e+10 -9.940e+10 -2.635e+10 -7.300e+10 -1.941e+10 -5.010e+10 -1.391e+10 -3.119e+10 -9.591e+09 -1.673e+10 -6.309e+09 -6.964e+09 -4.459e+09 -1.401e+09 -4.807e+09 2.841e+09 -7.052e+09 9.810e+09 -1.037e+10 2.160e+10 -1.442e+10 3.854e+10 -1.918e+10 6.049e+10 -2.468e+10 8.717e+10 -3.097e+10 1.182e+11 -3.805e+10 1.530e+11 -4.591e+10 1.913e+11 -5.452e+10 2.323e+11 -6.381e+10 2.754e+11 -7.371e+10 3.200e+11 -8.411e+10 3.655e+11 -9.490e+10 4.111e+11 -1.060e+11 4.561e+11 -1.172e+11 5.000e+11 -1.284e+11 5.421e+11 -1.395e+11 5.818e+11 -1.504e+11 6.186e+11 -1.609e+11 6.520e+11 -1.709e+11 6.815e+11 -1.802e+11 7.069e+11 -1.888e+11 7.278e+11 -1.966e+11 7.441e+11 -2.034e+11 7.555e+11 -2.093e+11 7.620e+11 -2.140e+11 7.636e+11 -2.176e+11 7.604e+11 -2.201e+11 7.525e+11 -2.214e+11 7.402e+11 -2.215e+11 7.236e+11 -2.203e+11 7.031e+11 -2.180e+11 6.790e+11 -2.146e+11 6.520e+11 -2.102e+11 6.221e+11 -2.046e+11 5.900e+11 -1.982e+11 5.559e+11 -1.908e+11 5.204e+11 -1.826e+11 4.839e+11 -1.738e+11 4.469e+11 -1.643e+11 4.097e+11 -1.544e+11 3.729e+11 -1.442e+11 3.368e+11 -1.337e+11 3.017e+11 -1.231e+11 2.679e+11 -1.125e+11 2.358e+11 -1.021e+11 2.056e+11 -9.180e+10 1.773e+11 -8.183e+10 1.513e+11 -7.226e+10 1.275e+11 -6.315e+10 1.061e+11 -5.456e+10 8.692e+10 -4.657e+10 7.008e+10 -3.919e+10 5.544e+10 -3.246e+10 4.291e+10 -2.641e+10 3.239e+10 -2.103e+10 2.370e+10 -1.633e+10 1.669e+10 -1.230e+10 1.120e+10 -8.910e+09 7.026e+09 -6.145e+09 4.000e+09 -3.974e+09 1.940e+09 -2.362e+09 6.600e+08 -1.271e+09 -3.475e+07 -6.318e+08 -3.958e+08 -2.578e+08 -7.253e+08 1.312e+08 -1.222e+09 7.316e+08 -1.886e+09 1.600e+09 -2.636e+09 2.735e+09 -3.393e+09 4.120e+09 -4.096e+09 5.741e+09 -4.696e+09 7.588e+09 -5.153e+09 9.653e+09 -5.433e+09 1.193e+10 -5.510e+09 1.444e+10 -5.358e+09 1.716e+10 -4.951e+09 2.012e+10 -4.265e+09 2.332e+10 -3.275e+09 2.676e+10 -1.956e+09 3.045e+10 -2.804e+08 3.439e+10 1.776e+09 3.858e+10 4.235e+09 4.299e+10 7.118e+09 4.763e+10 1.044e+10 5.246e+10 1.421e+10 5.746e+10 1.844e+10 6.261e+10 2.311e+10 6.787e+10 2.822e+10 7.319e+10 3.375e+10 7.854e+10 3.968e+10 8.386e+10 4.595e+10 8.912e+10 5.253e+10 9.427e+10 5.936e+10 9.925e+10 6.639e+10 1.040e+11 7.353e+10 1.085e+11 8.073e+10 1.127e+11 8.790e+10 1.166e+11 9.495e+10 1.200e+11 1.018e+11 1.230e+11 1.084e+11 1.256e+11 1.146e+11 1.277e+11 1.204e+11 1.292e+11 1.256e+11 1.302e+11 1.303e+11 1.306e+11 1.343e+11 1.305e+11 1.376e+11 1.298e+11 1.401e+11 1.285e+11 1.419e+11 1.267e+11 1.428e+11 1.243e+11 1.429e+11 1.214e+11 1.421e+11 1.181e+11 1.406e+11 1.143e+11 1.383e+11 1.101e+11 1.353e+11 1.056e+11 1.315e+11 1.007e+11 1.271e+11 9.559e+10 1.221e+11 9.024e+10 1.166e+11 8.472e+10 1.106e+11 7.909e+10 1.043e+11 7.340e+10 9.766e+10 6.771e+10 9.083e+10 6.205e+10 8.386e+10 5.648e+10 7.684e+10 5.105e+10 6.986e+10 4.578e+10 6.296e+10 4.072e+10 5.623e+10 3.591e+10 4.974e+10 3.136e+10 4.351e+10 2.709e+10 3.762e+10 2.313e+10 3.211e+10 1.949e+10 2.699e+10 1.618e+10 2.230e+10 1.320e+10 1.807e+10 1.055e+10 1.430e+10 8.230e+09 1.099e+10 6.230e+09 8.151e+09 4.540e+09 5.770e+09 3.147e+09 3.835e+09 2.037e+09 2.329e+09 1.192e+09 1.226e+09 5.943e+08 4.992e+08 2.284e+08 1.085e+08 6.524e+07 -7.127e+07 -1.369e+07 -2.997e+08 -1.869e+08 -7.563e+08 -4.861e+08 -1.419e+09 -8.938e+08 -2.248e+09 -1.387e+09 -3.204e+09 -1.944e+09 -4.251e+09 -2.544e+09 -5.353e+09 -3.165e+09 -6.475e+09 -3.789e+09 -7.586e+09 -4.397e+09 -8.660e+09 -4.972e+09 -9.668e+09 -5.500e+09 -1.059e+10 -5.968e+09 -1.141e+10 -6.364e+09 -1.212e+10 -6.679e+09 -1.269e+10 -6.909e+09 -1.313e+10 -7.049e+09 -1.343e+10 -7.099e+09 -1.360e+10 -7.059e+09 -1.363e+10 -6.933e+09 -1.354e+10 -6.726e+09 -1.334e+10 -6.443e+09 -1.303e+10 -6.094e+09 -1.262e+10 -5.688e+09 -1.214e+10 -5.234e+09 -1.158e+10 -4.744e+09 -1.098e+10 -4.229e+09 -1.033e+10 -3.698e+09 -9.655e+09 0.005 -54.182 -53.126 -52.071 -51.015 -49.959 -48.904 -47.848 -46.883 -46.019 -45.247 -44.561 -43.955 -43.424 -42.965 -42.575 -42.250 -41.989 -41.791 -41.655 -41.581 -41.568 -41.617 -41.730 -41.907 -42.151 -42.465 -42.851 -43.313 -43.858 -44.490 -45.217 -46.048 -46.996 -48.073 -49.298 -50.693 -52.287 -54.119 -56.236 -58.698 -61.566 -64.853 -68.335 -71.266 -72.908 -73.340 -72.000 -68.530 -64.441 -60.732 -57.564 -54.865 -52.532 -50.494 -48.697 -47.102 -45.678 -44.402 -43.255 -42.225 -41.298 -40.466 -39.722 -39.059 -38.472 -37.958 -37.513 -37.134 -36.820 -36.569 -36.379 -36.251 -36.185 -36.179 -36.236 -36.356 -36.541 -36.792 -37.113 -37.507 -37.977 -38.528 -39.166 -39.896 -40.727 -41.668 -42.726 -43.913 -45.237 -46.707 -48.318 -50.043 -51.807 -53.461 -54.785 -55.571 -55.743 -55.345 -54.440 -53.087 -51.387 -49.490 -47.540 -45.638 -43.837 -42.161 -40.615 -39.195 -37.896 -36.708 -35.624 -34.637 -33.737 -32.919 -32.180 -31.517 -30.927 -30.406 -29.953 -29.566 -29.244 -28.986 -28.793 -28.664 -28.601 -28.606 -28.682 -28.829 -29.053 -29.353 -29.734 -30.208 -30.784 -31.473 -32.290 -33.253 -34.385 -35.719 -37.300 -39.190 -41.481 -44.313 -47.892 -52.383 -56.748 -58.526 -58.930 -62.386 -61.559 -53.720 -46.508 -41.570 -37.728 -34.551 -31.828 -29.441 -27.313 -25.393 -23.645 -22.036 -20.541 -19.154 -17.864 -16.660 -15.536 -14.481 -13.480 -12.529 -11.634 -10.792 -9.999 -9.251 -8.532 -7.850 -7.209 -6.608 -6.041 -5.498 -4.982 -4.501 -4.055 -3.632 -3.227 -2.850 -2.506 -2.186 -1.882 -1.603 -1.355 -1.130 -0.917 -0.728 -0.571 -0.430 -0.299 -0.196 -0.123 -0.059 -0.015 0.000 -0.016 -0.024 -0.062 -0.130 -0.217 -0.314 -0.442 -0.597 -0.764 -0.951 -1.168 -1.410 -1.662 -1.937 -2.244 -2.575 -2.919 -3.288 -3.690 -4.122 -4.574 -5.051 -5.564 -6.113 -6.689 -7.289 -7.925 -8.602 -9.321 -10.077 -10.864 -11.696 -12.580 -13.519 -14.518 -15.572 -16.684 -17.871 -19.143 -20.510 -21.982 -23.574 -25.294 -27.173 -29.249 -31.568 -34.194 -37.215 -40.743 -44.812 -48.798 -50.936 -50.675 -49.945 -49.710 -49.702 -49.171 -47.599 -45.297 -42.888 -40.696 -38.796 -37.172 -35.789 -34.610 -33.606 -32.755 -32.036 -31.435 -30.941 -30.544 -30.237 -30.007 -29.853 -29.773 -29.764 -29.826 -29.956 -30.153 -30.415 -30.743 -31.139 -31.601 -32.134 -32.738 -33.416 -34.173 -35.013 -35.942 -36.962 -38.084 -39.318 -40.678 -42.179 -43.837 -45.672 -47.708 -49.968 -52.469 -55.203 -58.088 -60.862 -62.927 -63.505 -62.397 -60.226 -57.711 -55.250 -52.994 -50.978 -49.195 -47.624 -46.242 -45.029 -43.963 -43.029 -42.215 -41.510 -40.905 -40.394 -39.969 -39.628 -39.365 -39.177 -39.062 -39.019 -39.047 -39.144 -39.312 -39.550 -39.861 -40.246 -40.708 -41.251 -41.878 -42.597 -43.415 -44.341 -45.385 -46.564 -47.896 -49.405 -51.121 -53.085 -55.341 -57.931 -60.829 -63.740 -65.818 -66.410 -66.249 -66.336 -67.113 -68.515 -69.216 -66.938 -63.082 -59.566 -56.650 -54.223 -52.170 -50.408 -48.880 -47.542 -46.366 -45.327 -44.409 -43.599 -42.885 -42.258 -41.712 -41.241 -40.840 -40.504 -40.232 -40.021 -39.867 -39.770 -39.728 -39.740 -39.807 -39.926 -40.099 -40.326 -40.607 -40.943 -41.336 -41.788 -42.300 -42.877 -43.520 -44.234 -45.023 -45.892 -46.849 -47.884 -48.919 -49.953 -50.988 -52.022 -53.057 0.03 -18.6176 -18.2496 -17.8852 -17.5245 -17.1675 -16.8141 -16.4644 -16.1184 -15.7761 -15.4374 -15.1024 -14.7711 -14.4435 -14.1195 -13.7993 -13.4826 -13.1697 -12.8604 -12.5548 -12.2529 -11.9547 -11.6601 -11.3692 -11.082 -10.7985 -10.5186 -10.2424 -9.9699 -9.701 -9.4359 -9.1744 -8.9165 -8.6624 -8.4119 -8.1651 -7.922 -7.6825 -7.4468 -7.2147 -6.9862 -6.7615 -6.5404 -6.323 -6.1092 -5.8992 -5.6928 -5.4901 -5.2911 -5.0957 -4.904 -4.716 -4.5317 -4.351 -4.174 -4.0007 -3.831 -3.6651 -3.5028 -3.3442 -3.1892 -3.0379 -2.8904 -2.7464 -2.6062 -2.4696 -2.3367 -2.2075 -2.0819 -1.9601 -1.8419 -1.7273 -1.6165 -1.5093 -1.4058 -1.306 -1.2098 -1.1173 -1.0285 -0.94337 -0.86191 -0.78412 -0.71001 -0.63958 -0.57281 -0.50972 -0.45031 -0.39457 -0.3425 -0.29411 -0.24939 -0.20835 -0.17098 -0.13729 -0.10727 -0.080919 -0.058247 -0.039249 -0.023925 -0.012276 -0.0043008 0 0.00062659 -0.0024211 -0.009143 -0.019539 -0.03361 -0.051354 -0.072773 -0.097866 -0.12663 -0.15908 -0.19519 -0.23498 -0.27845 -0.32558 -0.3764 -0.43088 -0.48905 -0.55088 -0.61639 -0.68558 -0.75843 -0.83497 -0.91517 -0.99905 -1.0866 -1.1778 -1.2727 -1.3713 -1.4736 -1.5795 -1.6891 -1.8024 -1.9193 -2.0399 -2.1642 -2.2922 -2.4239 -2.5592 -2.6982 -2.8409 -2.9872 -3.1372 -3.2909 -3.4483 -3.6093 -3.774 -3.9424 -4.1145 -4.2902 -4.4696 -4.6527 -4.8395 -5.0299 -5.224 -5.4218 -5.6233 -5.8284 -6.0372 -6.2497 -6.4658 -6.6857 -6.9092 -7.1363 -7.3672 -7.6017 -7.8399 -8.0818 -8.3273 -8.5766 -8.8295 -9.086 -9.3463 -9.6102 -9.8778 -10.149 -10.424 -10.7026 -10.9849 -11.2709 -11.5605 -11.8538 -12.1508 -12.4515 -12.7558 -13.0638 -13.3755 -13.6909 -14.0099 -14.3326 -14.659 -14.989 -15.3228 -15.6602 -16.0012 -16.346 -16.6944 -17.0465 -17.4023 -17.7617 -18.1249 1.0 59658.3803 IW2 HH 31.58 36.15 0.050 -4.761e+09 -1.485e+09 -4.467e+09 -1.486e+09 -4.155e+09 -1.472e+09 -3.829e+09 -1.444e+09 -3.493e+09 -1.402e+09 -3.153e+09 -1.348e+09 -2.812e+09 -1.281e+09 -2.474e+09 -1.204e+09 -2.146e+09 -1.118e+09 -1.829e+09 -1.024e+09 -1.530e+09 -9.240e+08 -1.250e+09 -8.205e+08 -9.940e+08 -7.153e+08 -7.637e+08 -6.104e+08 -5.619e+08 -5.084e+08 -3.909e+08 -4.117e+08 -2.507e+08 -3.224e+08 -1.415e+08 -2.434e+08 -6.177e+07 -1.774e+08 -6.983e+06 -1.273e+08 3.268e+07 -9.515e+07 7.337e+07 -7.780e+07 1.299e+08 -6.554e+07 2.090e+08 -4.825e+07 3.114e+08 -1.938e+07 4.353e+08 2.444e+07 5.776e+08 8.463e+07 7.350e+08 1.616e+08 9.042e+08 2.553e+08 1.081e+09 3.650e+08 1.263e+09 4.895e+08 1.444e+09 6.277e+08 1.623e+09 7.777e+08 1.795e+09 9.376e+08 1.957e+09 1.105e+09 2.106e+09 1.279e+09 2.238e+09 1.455e+09 2.352e+09 1.632e+09 2.445e+09 1.807e+09 2.515e+09 1.976e+09 2.561e+09 2.139e+09 2.582e+09 2.291e+09 2.577e+09 2.431e+09 2.546e+09 2.557e+09 2.491e+09 2.667e+09 2.411e+09 2.759e+09 2.309e+09 2.831e+09 2.186e+09 2.883e+09 2.044e+09 2.915e+09 1.886e+09 2.926e+09 1.715e+09 2.916e+09 1.534e+09 2.886e+09 1.345e+09 2.838e+09 1.152e+09 2.772e+09 9.573e+08 2.691e+09 7.643e+08 2.597e+09 5.750e+08 2.492e+09 3.917e+08 2.378e+09 2.159e+08 2.258e+09 4.870e+07 2.134e+09 -1.092e+08 2.009e+09 -2.579e+08 1.886e+09 -3.981e+08 1.764e+09 -5.303e+08 1.647e+09 -6.561e+08 1.533e+09 -7.768e+08 1.425e+09 -8.937e+08 1.320e+09 -1.008e+09 1.219e+09 -1.120e+09 1.120e+09 -1.231e+09 1.021e+09 -1.340e+09 9.219e+08 -1.446e+09 8.207e+08 -1.548e+09 7.168e+08 -1.644e+09 6.095e+08 -1.733e+09 4.986e+08 -1.811e+09 3.845e+08 -1.878e+09 2.678e+08 -1.931e+09 1.494e+08 -1.969e+09 3.076e+07 -1.990e+09 -8.659e+07 -1.993e+09 -2.011e+08 -1.977e+09 -3.108e+08 -1.943e+09 -4.139e+08 -1.890e+09 -5.088e+08 -1.819e+09 -5.936e+08 -1.731e+09 -6.668e+08 -1.628e+09 -7.273e+08 -1.512e+09 -7.738e+08 -1.384e+09 -8.058e+08 -1.248e+09 -8.229e+08 -1.105e+09 -8.249e+08 -9.599e+08 -8.124e+08 -8.145e+08 -7.861e+08 -6.722e+08 -7.473e+08 -5.358e+08 -6.975e+08 -4.081e+08 -6.390e+08 -2.914e+08 -5.741e+08 -1.878e+08 -5.057e+08 -9.804e+07 -4.371e+08 -2.222e+07 -3.715e+08 4.154e+07 -3.120e+08 9.737e+07 -2.609e+08 1.515e+08 -2.182e+08 2.114e+08 -1.811e+08 2.843e+08 -1.438e+08 3.746e+08 -9.885e+07 4.845e+08 -3.903e+07 6.137e+08 4.202e+07 7.604e+08 1.492e+08 9.215e+08 2.863e+08 1.094e+09 4.561e+08 1.273e+09 6.603e+08 1.455e+09 9.001e+08 1.634e+09 1.176e+09 1.806e+09 1.487e+09 1.965e+09 1.833e+09 2.107e+09 2.212e+09 2.226e+09 2.622e+09 2.318e+09 3.061e+09 2.377e+09 3.525e+09 2.400e+09 4.012e+09 2.383e+09 4.519e+09 2.321e+09 5.041e+09 2.212e+09 5.577e+09 2.052e+09 6.121e+09 1.839e+09 6.673e+09 1.571e+09 7.227e+09 1.246e+09 7.782e+09 8.610e+08 8.334e+09 4.156e+08 8.883e+09 -9.197e+07 9.423e+09 -6.636e+08 9.955e+09 -1.301e+09 1.048e+10 -2.004e+09 1.098e+10 -2.775e+09 1.147e+10 -3.615e+09 1.194e+10 -4.523e+09 1.238e+10 -5.501e+09 1.280e+10 -6.547e+09 1.318e+10 -7.659e+09 1.352e+10 -8.837e+09 1.383e+10 -1.008e+10 1.409e+10 -1.137e+10 1.429e+10 -1.272e+10 1.443e+10 -1.411e+10 1.451e+10 -1.553e+10 1.451e+10 -1.698e+10 1.443e+10 -1.844e+10 1.426e+10 -1.989e+10 1.401e+10 -2.133e+10 1.366e+10 -2.273e+10 1.322e+10 -2.409e+10 1.269e+10 -2.538e+10 1.206e+10 -2.659e+10 1.134e+10 -2.770e+10 1.052e+10 -2.870e+10 9.628e+09 -2.958e+10 8.654e+09 -3.031e+10 7.612e+09 -3.088e+10 6.509e+09 -3.129e+10 5.358e+09 -3.153e+10 4.170e+09 -3.159e+10 2.958e+09 -3.146e+10 1.735e+09 -3.115e+10 5.174e+08 -3.065e+10 -6.831e+08 -2.998e+10 -1.852e+09 -2.913e+10 -2.973e+09 -2.811e+10 -4.036e+09 -2.694e+10 -5.028e+09 -2.564e+10 -5.936e+09 -2.421e+10 -6.753e+09 -2.267e+10 -7.470e+09 -2.106e+10 -8.080e+09 -1.938e+10 -8.581e+09 -1.766e+10 -8.970e+09 -1.592e+10 -9.248e+09 -1.418e+10 -9.419e+09 -1.247e+10 -9.488e+09 -1.080e+10 -9.465e+09 -9.195e+09 -9.358e+09 -7.668e+09 -9.183e+09 -6.232e+09 -8.953e+09 -4.892e+09 -8.685e+09 -3.649e+09 -8.398e+09 -2.500e+09 -8.110e+09 -1.432e+09 -7.835e+09 -4.273e+08 -7.587e+09 5.344e+08 -7.374e+09 1.480e+09 -7.198e+09 2.436e+09 -7.057e+09 3.423e+09 -6.938e+09 4.463e+09 -6.828e+09 5.565e+09 -6.709e+09 6.735e+09 -6.561e+09 7.970e+09 -6.367e+09 9.262e+09 -6.109e+09 1.059e+10 -5.773e+09 1.195e+10 -5.350e+09 1.331e+10 -4.832e+09 1.465e+10 -4.215e+09 1.594e+10 -3.499e+09 1.716e+10 -2.685e+09 1.828e+10 -1.782e+09 1.929e+10 -7.957e+08 2.016e+10 2.620e+08 2.087e+10 1.377e+09 2.142e+10 2.536e+09 2.177e+10 3.723e+09 2.194e+10 4.918e+09 2.192e+10 6.107e+09 2.169e+10 7.271e+09 2.128e+10 8.393e+09 2.068e+10 9.456e+09 1.991e+10 1.045e+10 1.898e+10 1.135e+10 1.790e+10 1.216e+10 1.670e+10 1.286e+10 1.540e+10 1.345e+10 1.402e+10 1.392e+10 1.257e+10 1.427e+10 1.109e+10 1.452e+10 9.581e+09 1.465e+10 8.075e+09 1.468e+10 6.582e+09 1.461e+10 5.116e+09 1.445e+10 3.686e+09 1.422e+10 2.300e+09 1.392e+10 9.613e+08 1.355e+10 -3.277e+08 1.314e+10 -1.567e+09 1.267e+10 -2.760e+09 1.216e+10 -3.907e+09 1.161e+10 -5.011e+09 1.101e+10 -6.073e+09 1.037e+10 -7.091e+09 9.675e+09 -8.061e+09 8.923e+09 -8.981e+09 8.108e+09 -9.842e+09 7.227e+09 -1.063e+10 6.277e+09 -1.135e+10 5.256e+09 -1.198e+10 4.164e+09 -1.251e+10 3.004e+09 -1.293e+10 1.779e+09 -1.324e+10 4.948e+08 -1.342e+10 -8.433e+08 -1.348e+10 -2.231e+09 -1.342e+10 -3.663e+09 -1.322e+10 -5.135e+09 -1.289e+10 -6.649e+09 -1.243e+10 -8.203e+09 -1.184e+10 -9.803e+09 -1.110e+10 -1.145e+10 -1.021e+10 -1.316e+10 -9.157e+09 -1.493e+10 -7.916e+09 -1.678e+10 -6.466e+09 -1.869e+10 -4.781e+09 -2.066e+10 -2.828e+09 -2.268e+10 -5.832e+08 -2.473e+10 1.980e+09 -2.678e+10 4.886e+09 -2.878e+10 8.144e+09 -3.069e+10 1.176e+10 -3.243e+10 1.572e+10 -3.395e+10 2.001e+10 -3.516e+10 2.458e+10 -3.598e+10 2.940e+10 -3.634e+10 3.440e+10 -3.616e+10 3.951e+10 -3.535e+10 4.465e+10 -3.385e+10 4.974e+10 -3.159e+10 5.469e+10 -2.853e+10 5.944e+10 -2.462e+10 6.393e+10 -1.981e+10 6.811e+10 -1.407e+10 7.200e+10 -7.318e+09 7.561e+10 5.220e+08 7.899e+10 9.612e+09 8.224e+10 2.021e+10 8.541e+10 3.269e+10 8.856e+10 4.759e+10 9.167e+10 6.566e+10 9.458e+10 8.784e+10 9.699e+10 1.153e+11 9.841e+10 1.494e+11 9.810e+10 1.917e+11 9.512e+10 2.440e+11 8.826e+10 3.083e+11 7.609e+10 3.866e+11 5.689e+10 4.813e+11 2.868e+10 5.950e+11 -1.073e+10 7.302e+11 -6.387e+10 8.899e+11 -1.336e+11 1.078e+12 -2.230e+11 1.296e+12 -3.354e+11 1.549e+12 -4.747e+11 1.841e+12 -6.446e+11 2.175e+12 -8.496e+11 2.555e+12 -1.095e+12 2.987e+12 -1.454e+12 3.473e+12 -1.772e+12 4.032e+12 -2.177e+12 4.648e+12 -2.644e+12 5.335e+12 -3.179e+12 6.098e+12 -3.659e+12 6.703e+12 -4.328e+12 7.608e+12 -5.084e+12 8.604e+12 -5.932e+12 9.695e+12 -6.877e+12 1.089e+13 -7.927e+12 1.220e+13 -9.089e+12 1.362e+13 -1.037e+13 1.516e+13 -1.177e+13 1.682e+13 -1.330e+13 1.862e+13 -1.497e+13 2.056e+13 -1.677e+13 2.264e+13 -1.872e+13 2.488e+13 -2.081e+13 2.726e+13 -2.306e+13 2.981e+13 -2.546e+13 3.252e+13 -2.801e+13 3.540e+13 -3.071e+13 3.845e+13 -3.358e+13 4.169e+13 -3.660e+13 4.509e+13 -3.976e+13 4.868e+13 -4.307e+13 5.246e+13 -4.653e+13 5.642e+13 -5.013e+13 6.058e+13 -5.386e+13 6.491e+13 -5.770e+13 6.945e+13 -6.166e+13 7.416e+13 -6.573e+13 7.906e+13 -6.989e+13 8.416e+13 -7.413e+13 8.943e+13 -7.844e+13 9.489e+13 -8.280e+13 1.005e+14 -8.720e+13 1.064e+14 -9.162e+13 1.123e+14 -9.604e+13 1.185e+14 -1.005e+14 1.247e+14 -1.049e+14 1.312e+14 -1.092e+14 1.379e+14 -1.136e+14 1.447e+14 -1.179e+14 1.516e+14 -1.219e+14 1.586e+14 -1.260e+14 1.659e+14 -1.299e+14 1.732e+14 -1.336e+14 1.806e+14 -1.372e+14 1.881e+14 -1.406e+14 1.957e+14 -1.437e+14 2.033e+14 -1.467e+14 2.111e+14 -1.494e+14 2.189e+14 -1.519e+14 2.267e+14 -1.541e+14 2.346e+14 -1.560e+14 2.425e+14 -1.577e+14 2.504e+14 -1.590e+14 2.584e+14 -1.601e+14 2.664e+14 -1.609e+14 2.743e+14 -1.613e+14 2.823e+14 -1.614e+14 2.902e+14 -1.612e+14 2.981e+14 -1.606e+14 3.059e+14 -1.597e+14 3.138e+14 -1.585e+14 3.215e+14 -1.570e+14 3.293e+14 -1.551e+14 3.370e+14 -1.527e+14 3.446e+14 -1.502e+14 3.521e+14 -1.473e+14 3.595e+14 -1.441e+14 3.668e+14 -1.406e+14 3.740e+14 -1.368e+14 3.812e+14 -1.326e+14 3.882e+14 -1.281e+14 3.950e+14 -1.234e+14 4.019e+14 -1.185e+14 4.085e+14 -1.132e+14 4.150e+14 -1.077e+14 4.213e+14 -1.021e+14 4.277e+14 -9.619e+13 4.339e+14 -9.011e+13 4.398e+14 -8.382e+13 4.456e+14 -7.736e+13 4.512e+14 -7.072e+13 4.566e+14 -6.394e+13 4.618e+14 -5.701e+13 4.668e+14 -4.997e+13 4.715e+14 -4.283e+13 4.760e+14 -3.561e+13 4.801e+14 -2.832e+13 4.840e+14 -2.100e+13 4.877e+14 -1.365e+13 4.910e+14 -6.287e+12 4.939e+14 1.046e+12 4.966e+14 8.342e+12 4.988e+14 1.558e+13 5.008e+14 2.273e+13 5.023e+14 2.977e+13 5.034e+14 3.670e+13 5.041e+14 4.347e+13 5.045e+14 5.008e+13 5.044e+14 5.650e+13 5.038e+14 6.271e+13 5.028e+14 6.870e+13 5.014e+14 7.444e+13 4.995e+14 7.992e+13 4.971e+14 8.511e+13 4.943e+14 9.002e+13 4.910e+14 9.461e+13 4.872e+14 9.888e+13 4.830e+14 1.028e+14 4.784e+14 1.064e+14 4.732e+14 1.096e+14 4.676e+14 1.125e+14 4.616e+14 1.150e+14 4.551e+14 1.171e+14 4.482e+14 1.189e+14 4.408e+14 1.203e+14 4.331e+14 1.213e+14 4.250e+14 1.221e+14 4.164e+14 1.225e+14 4.076e+14 1.224e+14 3.984e+14 1.221e+14 3.888e+14 1.213e+14 3.790e+14 1.202e+14 3.690e+14 1.189e+14 3.587e+14 1.172e+14 3.483e+14 1.152e+14 3.375e+14 1.130e+14 3.268e+14 1.105e+14 3.158e+14 1.077e+14 3.047e+14 1.047e+14 2.936e+14 1.016e+14 2.825e+14 9.821e+13 2.713e+14 9.471e+13 2.602e+14 9.108e+13 2.491e+14 8.734e+13 2.381e+14 8.350e+13 2.271e+14 7.960e+13 2.163e+14 7.567e+13 2.056e+14 7.170e+13 1.951e+14 6.774e+13 1.848e+14 6.378e+13 1.747e+14 5.987e+13 1.648e+14 5.602e+13 1.553e+14 5.223e+13 1.459e+14 4.852e+13 1.368e+14 4.491e+13 1.280e+14 4.142e+13 1.196e+14 3.804e+13 1.115e+14 3.481e+13 1.036e+14 3.171e+13 9.614e+13 2.874e+13 8.899e+13 2.594e+13 8.218e+13 2.330e+13 7.569e+13 2.081e+13 6.955e+13 1.849e+13 6.374e+13 1.632e+13 5.826e+13 1.431e+13 5.314e+13 1.246e+13 4.833e+13 1.076e+13 4.383e+13 9.209e+12 3.963e+13 7.801e+12 3.574e+13 6.529e+12 3.211e+13 5.390e+12 2.877e+13 4.375e+12 2.570e+13 3.478e+12 2.286e+13 2.691e+12 2.028e+13 2.008e+12 1.791e+13 1.369e+12 1.520e+13 8.860e+11 1.332e+13 4.809e+11 1.163e+13 1.456e+11 1.011e+13 -1.269e+11 8.754e+12 -3.433e+11 7.546e+12 -5.107e+11 6.475e+12 -6.352e+11 5.530e+12 -7.229e+11 4.701e+12 -7.792e+11 3.976e+12 -8.094e+11 3.345e+12 -8.181e+11 2.800e+12 -8.095e+11 2.331e+12 -7.873e+11 1.929e+12 -7.549e+11 1.587e+12 -7.150e+11 1.297e+12 -6.700e+11 1.052e+12 -6.218e+11 8.475e+11 -5.721e+11 6.764e+11 -5.220e+11 5.343e+11 -4.724e+11 4.169e+11 -4.240e+11 3.204e+11 -3.772e+11 2.415e+11 -3.324e+11 1.774e+11 -2.897e+11 1.259e+11 -2.493e+11 8.497e+10 -2.113e+11 5.294e+10 -1.759e+11 2.845e+10 -1.431e+11 1.031e+10 -1.133e+11 -2.448e+09 -8.667e+10 -1.075e+10 -6.334e+10 -1.539e+10 -4.360e+10 -1.716e+10 -2.761e+10 -1.685e+10 -1.540e+10 -1.531e+10 -6.660e+09 -1.356e+10 -2.155e+08 -1.267e+10 6.087e+09 -1.325e+10 1.460e+10 -1.494e+10 2.678e+10 -1.678e+10 4.318e+10 -1.787e+10 6.383e+10 -1.758e+10 8.860e+10 -1.544e+10 1.172e+11 -1.112e+10 1.493e+11 -4.381e+09 1.845e+11 4.952e+09 2.222e+11 1.698e+10 2.620e+11 3.171e+10 3.032e+11 4.911e+10 3.454e+11 6.911e+10 3.879e+11 9.151e+10 4.301e+11 1.161e+11 4.715e+11 1.427e+11 5.115e+11 1.710e+11 5.495e+11 2.006e+11 5.850e+11 2.312e+11 6.176e+11 2.625e+11 6.468e+11 2.940e+11 6.724e+11 3.254e+11 6.940e+11 3.563e+11 7.113e+11 3.863e+11 7.242e+11 4.151e+11 7.325e+11 4.422e+11 7.363e+11 4.674e+11 7.356e+11 4.905e+11 7.304e+11 5.111e+11 7.210e+11 5.291e+11 7.074e+11 5.442e+11 6.901e+11 5.564e+11 6.693e+11 5.657e+11 6.452e+11 5.718e+11 6.183e+11 5.749e+11 5.889e+11 5.748e+11 5.573e+11 5.717e+11 5.241e+11 5.658e+11 4.897e+11 5.570e+11 4.543e+11 5.456e+11 4.185e+11 5.318e+11 3.826e+11 5.158e+11 3.469e+11 4.978e+11 3.119e+11 4.780e+11 2.778e+11 4.568e+11 2.448e+11 4.344e+11 2.133e+11 4.110e+11 1.835e+11 3.870e+11 1.554e+11 3.625e+11 1.293e+11 3.378e+11 1.051e+11 3.131e+11 8.310e+10 2.888e+11 6.316e+10 2.648e+11 4.533e+10 2.415e+11 2.954e+10 2.191e+11 1.573e+10 1.975e+11 3.834e+09 1.770e+11 -6.279e+09 1.576e+11 -1.473e+10 1.395e+11 -2.164e+10 1.226e+11 -2.718e+10 1.070e+11 -3.150e+10 9.265e+10 -3.474e+10 7.957e+10 -3.706e+10 6.770e+10 -3.862e+10 5.700e+10 -3.955e+10 4.739e+10 -3.999e+10 3.877e+10 -4.006e+10 3.106e+10 -3.985e+10 2.414e+10 -3.944e+10 1.791e+10 -3.891e+10 1.223e+10 -3.829e+10 7.021e+09 -3.762e+10 2.162e+09 -3.689e+10 -2.449e+09 -3.611e+10 -6.891e+09 -3.525e+10 -1.124e+10 -3.428e+10 -1.556e+10 -3.318e+10 -1.990e+10 -3.190e+10 -2.428e+10 -3.040e+10 -2.874e+10 -2.867e+10 -3.329e+10 -2.664e+10 -3.792e+10 -2.431e+10 -4.266e+10 -2.163e+10 -4.747e+10 -1.857e+10 -5.236e+10 -1.513e+10 -5.730e+10 -1.127e+10 -6.226e+10 -6.984e+09 -6.723e+10 -2.265e+09 -7.217e+10 2.886e+09 -7.704e+10 8.463e+09 -8.180e+10 1.446e+10 -8.643e+10 0.005 -52.830 -51.861 -50.892 -49.923 -48.954 -47.985 -47.058 -46.228 -45.488 -44.830 -44.251 -43.745 -43.309 -42.940 -42.637 -42.398 -42.221 -42.107 -42.055 -42.065 -42.139 -42.277 -42.482 -42.755 -43.101 -43.522 -44.023 -44.611 -45.293 -46.077 -46.976 -48.007 -49.187 -50.541 -52.103 -53.923 -56.073 -58.672 -61.929 -66.300 -73.143 -80.664 -78.131 -73.043 -70.604 -68.460 -65.741 -62.595 -59.494 -56.676 -54.185 -51.992 -50.054 -48.335 -46.801 -45.428 -44.194 -43.085 -42.087 -41.190 -40.385 -39.665 -39.024 -38.458 -37.964 -37.537 -37.176 -36.879 -36.645 -36.472 -36.360 -36.309 -36.320 -36.394 -36.533 -36.737 -37.010 -37.353 -37.771 -38.269 -38.851 -39.524 -40.296 -41.176 -42.177 -43.312 -44.597 -46.055 -47.708 -49.588 -51.727 -54.167 -56.962 -60.230 -64.361 -70.810 -72.895 -66.895 -60.371 -55.899 -52.393 -49.480 -46.983 -44.805 -42.881 -41.167 -39.630 -38.246 -36.996 -35.865 -34.841 -33.916 -33.080 -32.328 -31.654 -31.055 -30.529 -30.072 -29.681 -29.355 -29.094 -28.898 -28.766 -28.698 -28.696 -28.764 -28.903 -29.117 -29.410 -29.789 -30.259 -30.829 -31.510 -32.316 -33.264 -34.376 -35.684 -37.228 -39.067 -41.288 -44.024 -47.497 -52.092 -58.244 -63.513 -65.275 -65.431 -58.681 -50.952 -45.229 -40.842 -37.270 -34.246 -31.619 -29.293 -27.207 -25.314 -23.583 -21.990 -20.517 -19.146 -17.867 -16.669 -15.544 -14.486 -13.488 -12.547 -11.658 -10.817 -10.022 -9.269 -8.556 -7.881 -7.242 -6.637 -6.065 -5.524 -5.014 -4.532 -4.079 -3.653 -3.253 -2.880 -2.531 -2.206 -1.905 -1.628 -1.373 -1.141 -0.932 -0.744 -0.577 -0.432 -0.308 -0.205 -0.123 -0.061 -0.020 0.000 -0.000 -0.021 -0.061 -0.121 -0.202 -0.304 -0.427 -0.571 -0.736 -0.923 -1.132 -1.362 -1.615 -1.892 -2.191 -2.514 -2.862 -3.234 -3.632 -4.057 -4.508 -4.988 -5.497 -6.035 -6.606 -7.209 -7.847 -8.520 -9.232 -9.984 -10.779 -11.619 -12.509 -13.451 -14.451 -15.513 -16.644 -17.852 -19.145 -20.535 -22.037 -23.669 -25.455 -27.430 -29.647 -32.182 -35.161 -38.827 -43.753 -51.725 -61.828 -52.137 -48.240 -46.688 -46.245 -46.409 -46.698 -46.474 -45.298 -43.400 -41.316 -39.370 -37.658 -36.182 -34.919 -33.841 -32.925 -32.149 -31.498 -30.959 -30.520 -30.174 -29.914 -29.734 -29.631 -29.600 -29.639 -29.746 -29.920 -30.161 -30.466 -30.838 -31.277 -31.787 -32.368 -33.023 -33.758 -34.578 -35.489 -36.496 -37.611 -38.844 -40.210 -41.728 -43.422 -45.324 -47.477 -49.941 -52.803 -56.190 -60.300 -65.347 -70.434 -71.967 -68.993 -65.176 -61.542 -58.243 -55.350 -52.852 -50.700 -48.841 -47.230 -45.829 -44.608 -43.545 -42.620 -41.818 -41.127 -40.539 -40.044 -39.638 -39.314 -39.068 -38.898 -38.802 -38.776 -38.821 -38.936 -39.122 -39.380 -39.709 -40.114 -40.595 -41.158 -41.807 -42.547 -43.387 -44.336 -45.404 -46.608 -47.964 -49.496 -51.233 -53.206 -55.447 -57.964 -60.659 -63.182 -64.934 -65.675 -65.906 -66.262 -66.915 -67.246 -66.057 -63.325 -60.161 -57.268 -54.772 -52.630 -50.779 -49.166 -47.751 -46.502 -45.397 -44.416 -43.547 -42.777 -42.096 -41.498 -40.977 -40.528 -40.146 -39.827 -39.568 -39.368 -39.223 -39.134 -39.097 -39.114 -39.182 -39.303 -39.475 -39.699 -39.976 -40.307 -40.693 -41.135 -41.635 -42.197 -42.822 -43.514 -44.278 -45.118 -46.041 -47.053 -48.105 -49.156 -50.208 -51.259 -52.311 0.03 -18.4993 -18.1353 -17.7749 -17.4182 -17.065 -16.7155 -16.3696 -16.0273 -15.6886 -15.3536 -15.0221 -14.6943 -14.3701 -14.0495 -13.7325 -13.4192 -13.1094 -12.8033 -12.5008 -12.2019 -11.9066 -11.6149 -11.3269 -11.0425 -10.7616 -10.4844 -10.2109 -9.9409 -9.6745 -9.4118 -9.1527 -8.8972 -8.6453 -8.397 -8.1524 -7.9113 -7.6739 -7.4401 -7.2099 -6.9833 -6.7603 -6.541 -6.3253 -6.1132 -5.9047 -5.6998 -5.4985 -5.3009 -5.1068 -4.9164 -4.7296 -4.5464 -4.3669 -4.1909 -4.0186 -3.8499 -3.6847 -3.5233 -3.3654 -3.2111 -3.0605 -2.9135 -2.7701 -2.6303 -2.4941 -2.3615 -2.2326 -2.1073 -1.9855 -1.8674 -1.753 -1.6421 -1.5349 -1.4312 -1.3312 -1.2348 -1.142 -1.0529 -0.9673 -0.88536 -0.80704 -0.73234 -0.66125 -0.59378 -0.52992 -0.46968 -0.41306 -0.36005 -0.31066 -0.26488 -0.22272 -0.18418 -0.14925 -0.11794 -0.09024 -0.06616 -0.045696 -0.028848 -0.015616 -0.0059999 0 0.0023839 0.0011517 -0.0036964 -0.012161 -0.024241 -0.039937 -0.059249 -0.082178 -0.10872 -0.13888 -0.17266 -0.21005 -0.25106 -0.29568 -0.34392 -0.39578 -0.45125 -0.51034 -0.57305 -0.63937 -0.7093 -0.78286 -0.86002 -0.94081 -1.0252 -1.1132 -1.2049 -1.3001 -1.399 -1.5015 -1.6075 -1.7173 -1.8306 -1.9475 -2.0681 -2.1923 -2.3201 -2.4515 -2.5865 -2.7251 -2.8674 -3.0133 -3.1628 -3.3159 -3.4726 -3.6329 -3.7969 -3.9644 -4.1356 -4.3104 -4.4888 -4.6709 -4.8565 -5.0458 -5.2387 -5.4352 -5.6353 -5.839 -6.0464 -6.2573 -6.4719 -6.6901 -6.9119 -7.1373 -7.3664 -7.599 -7.8353 -8.0752 -8.3187 -8.5658 -8.8166 -9.0709 -9.3289 -9.5905 -9.8557 -10.1245 -10.3969 -10.673 -10.9526 -11.2359 -11.5228 -11.8133 -12.1075 -12.4052 -12.7066 -13.0115 -13.3201 -13.6323 -13.9482 -14.2676 -14.5907 -14.9173 -15.2476 -15.5815 -15.9191 -16.2602 -16.605 -16.9533 -17.3053 -17.6609 1.0 52734.43872 IW2 HV 31.58 36.15 0.050 -4.447e+09 1.942e+09 -4.174e+09 1.723e+09 -3.884e+09 1.509e+09 -3.584e+09 1.303e+09 -3.275e+09 1.106e+09 -2.962e+09 9.225e+08 -2.650e+09 7.524e+08 -2.342e+09 5.973e+08 -2.042e+09 4.587e+08 -1.754e+09 3.368e+08 -1.481e+09 2.319e+08 -1.226e+09 1.441e+08 -9.925e+08 7.281e+07 -7.814e+08 1.726e+07 -5.953e+08 -2.349e+07 -4.360e+08 -5.053e+07 -3.033e+08 -6.591e+07 -1.977e+08 -7.169e+07 -1.182e+08 -7.070e+07 -6.272e+07 -6.699e+07 -2.553e+07 -6.628e+07 4.209e+06 -7.384e+07 3.872e+07 -9.060e+07 8.536e+07 -1.137e+08 1.463e+08 -1.398e+08 2.210e+08 -1.662e+08 3.074e+08 -1.909e+08 4.029e+08 -2.123e+08 5.049e+08 -2.291e+08 6.105e+08 -2.405e+08 7.168e+08 -2.455e+08 8.211e+08 -2.438e+08 9.207e+08 -2.350e+08 1.013e+09 -2.190e+08 1.096e+09 -1.960e+08 1.168e+09 -1.661e+08 1.226e+09 -1.301e+08 1.270e+09 -8.858e+07 1.298e+09 -4.248e+07 1.311e+09 7.125e+06 1.307e+09 5.912e+07 1.287e+09 1.122e+08 1.252e+09 1.651e+08 1.203e+09 2.166e+08 1.141e+09 2.653e+08 1.068e+09 3.103e+08 9.850e+08 3.505e+08 8.955e+08 3.851e+08 8.013e+08 4.138e+08 7.047e+08 4.364e+08 6.079e+08 4.531e+08 5.130e+08 4.644e+08 4.215e+08 4.713e+08 3.345e+08 4.750e+08 2.525e+08 4.770e+08 1.752e+08 4.791e+08 1.012e+08 4.826e+08 2.874e+07 4.887e+08 -4.461e+07 4.981e+08 -1.215e+08 5.105e+08 -2.041e+08 5.250e+08 -2.944e+08 5.405e+08 -3.934e+08 5.551e+08 -5.014e+08 5.670e+08 -6.180e+08 5.744e+08 -7.423e+08 5.757e+08 -8.726e+08 5.697e+08 -1.007e+09 5.553e+08 -1.144e+09 5.316e+08 -1.280e+09 4.984e+08 -1.414e+09 4.557e+08 -1.542e+09 4.036e+08 -1.663e+09 3.427e+08 -1.774e+09 2.736e+08 -1.873e+09 1.974e+08 -1.958e+09 1.153e+08 -2.028e+09 2.858e+07 -2.081e+09 -6.149e+07 -2.116e+09 -1.532e+08 -2.132e+09 -2.449e+08 -2.129e+09 -3.352e+08 -2.106e+09 -4.223e+08 -2.064e+09 -5.046e+08 -2.004e+09 -5.806e+08 -1.925e+09 -6.488e+08 -1.830e+09 -7.079e+08 -1.720e+09 -7.566e+08 -1.597e+09 -7.940e+08 -1.463e+09 -8.192e+08 -1.320e+09 -8.317e+08 -1.171e+09 -8.313e+08 -1.019e+09 -8.179e+08 -8.673e+08 -7.921e+08 -7.181e+08 -7.547e+08 -5.747e+08 -7.068e+08 -4.399e+08 -6.502e+08 -3.163e+08 -5.870e+08 -2.060e+08 -5.199e+08 -1.101e+08 -4.517e+08 -2.853e+07 -3.860e+08 4.037e+07 -3.258e+08 1.010e+08 -2.734e+08 1.599e+08 -2.289e+08 2.252e+08 -1.891e+08 3.047e+08 -1.476e+08 4.035e+08 -9.571e+07 5.240e+08 -2.471e+07 6.660e+08 7.360e+07 8.276e+08 2.061e+08 1.006e+09 3.789e+08 1.196e+09 5.971e+08 1.395e+09 8.651e+08 1.596e+09 1.187e+09 1.794e+09 1.565e+09 1.983e+09 2.003e+09 2.156e+09 2.502e+09 2.307e+09 3.065e+09 2.429e+09 3.691e+09 2.515e+09 4.380e+09 2.557e+09 5.134e+09 2.550e+09 5.950e+09 2.486e+09 6.827e+09 2.358e+09 7.764e+09 2.160e+09 8.757e+09 1.885e+09 9.803e+09 1.528e+09 1.090e+10 1.082e+09 1.204e+10 5.438e+08 1.322e+10 -9.340e+07 1.444e+10 -8.333e+08 1.569e+10 -1.679e+09 1.696e+10 -2.634e+09 1.825e+10 -3.702e+09 1.955e+10 -4.882e+09 2.084e+10 -6.177e+09 2.213e+10 -7.586e+09 2.341e+10 -9.107e+09 2.465e+10 -1.074e+10 2.586e+10 -1.248e+10 2.702e+10 -1.432e+10 2.812e+10 -1.625e+10 2.915e+10 -1.828e+10 3.010e+10 -2.038e+10 3.095e+10 -2.256e+10 3.170e+10 -2.479e+10 3.232e+10 -2.705e+10 3.281e+10 -2.934e+10 3.316e+10 -3.164e+10 3.335e+10 -3.391e+10 3.337e+10 -3.616e+10 3.322e+10 -3.834e+10 3.288e+10 -4.044e+10 3.236e+10 -4.244e+10 3.165e+10 -4.430e+10 3.075e+10 -4.601e+10 2.966e+10 -4.753e+10 2.839e+10 -4.886e+10 2.695e+10 -4.996e+10 2.534e+10 -5.082e+10 2.358e+10 -5.142e+10 2.169e+10 -5.175e+10 1.969e+10 -5.179e+10 1.759e+10 -5.155e+10 1.542e+10 -5.101e+10 1.321e+10 -5.018e+10 1.098e+10 -4.907e+10 8.751e+09 -4.768e+10 6.559e+09 -4.604e+10 4.424e+09 -4.416e+10 2.372e+09 -4.206e+10 4.263e+08 -3.978e+10 -1.394e+09 -3.734e+10 -3.070e+09 -3.477e+10 -4.587e+09 -3.211e+10 -5.935e+09 -2.939e+10 -7.106e+09 -2.666e+10 -8.096e+09 -2.393e+10 -8.907e+09 -2.125e+10 -9.544e+09 -1.866e+10 -1.001e+10 -1.616e+10 -1.034e+10 -1.380e+10 -1.052e+10 -1.158e+10 -1.059e+10 -9.519e+09 -1.058e+10 -7.620e+09 -1.050e+10 -5.878e+09 -1.039e+10 -4.276e+09 -1.027e+10 -2.791e+09 -1.017e+10 -1.392e+09 -1.011e+10 -4.110e+07 -1.009e+10 1.301e+09 -1.011e+10 2.668e+09 -1.017e+10 4.093e+09 -1.026e+10 5.599e+09 -1.034e+10 7.195e+09 -1.041e+10 8.889e+09 -1.042e+10 1.067e+10 -1.036e+10 1.254e+10 -1.020e+10 1.446e+10 -9.920e+09 1.642e+10 -9.509e+09 1.838e+10 -8.953e+09 2.033e+10 -8.240e+09 2.223e+10 -7.368e+09 2.404e+10 -6.336e+09 2.575e+10 -5.146e+09 2.731e+10 -3.805e+09 2.871e+10 -2.324e+09 2.991e+10 -7.157e+08 3.090e+10 1.004e+09 3.166e+10 2.814e+09 3.218e+10 4.696e+09 3.244e+10 6.628e+09 3.244e+10 8.584e+09 3.219e+10 1.054e+10 3.168e+10 1.248e+10 3.092e+10 1.437e+10 2.992e+10 1.620e+10 2.871e+10 1.795e+10 2.729e+10 1.959e+10 2.569e+10 2.111e+10 2.393e+10 2.250e+10 2.202e+10 2.376e+10 2.000e+10 2.488e+10 1.788e+10 2.584e+10 1.569e+10 2.665e+10 1.344e+10 2.731e+10 1.115e+10 2.781e+10 8.837e+09 2.815e+10 6.518e+09 2.835e+10 4.207e+09 2.839e+10 1.917e+09 2.828e+10 -3.408e+08 2.801e+10 -2.552e+09 2.759e+10 -4.703e+09 2.702e+10 -6.781e+09 2.630e+10 -8.769e+09 2.542e+10 -1.065e+10 2.439e+10 -1.241e+10 2.320e+10 -1.404e+10 2.186e+10 -1.550e+10 2.039e+10 -1.680e+10 1.878e+10 -1.791e+10 1.705e+10 -1.881e+10 1.522e+10 -1.951e+10 1.329e+10 -1.998e+10 1.130e+10 -2.024e+10 9.258e+09 -2.028e+10 7.192e+09 -2.011e+10 5.122e+09 -1.974e+10 3.071e+09 -1.920e+10 1.052e+09 -1.850e+10 -9.194e+08 -1.766e+10 -2.839e+09 -1.672e+10 -4.710e+09 -1.568e+10 -6.543e+09 -1.456e+10 -8.356e+09 -1.337e+10 -1.018e+10 -1.210e+10 -1.204e+10 -1.073e+10 -1.398e+10 -9.221e+09 -1.602e+10 -7.524e+09 -1.817e+10 -5.589e+09 -2.044e+10 -3.357e+09 -2.281e+10 -7.787e+08 -2.526e+10 2.191e+09 -2.772e+10 5.589e+09 -3.012e+10 9.425e+09 -3.239e+10 1.370e+10 -3.441e+10 1.839e+10 -3.608e+10 2.347e+10 -3.730e+10 2.886e+10 -3.794e+10 3.452e+10 -3.790e+10 4.035e+10 -3.709e+10 4.627e+10 -3.540e+10 5.220e+10 -3.276e+10 5.807e+10 -2.909e+10 6.384e+10 -2.433e+10 6.949e+10 -1.839e+10 7.503e+10 -1.117e+10 8.054e+10 -2.508e+09 8.611e+10 7.869e+09 9.188e+10 2.033e+10 9.794e+10 3.546e+10 1.044e+11 5.406e+10 1.112e+11 7.715e+10 1.182e+11 1.060e+11 1.250e+11 1.423e+11 1.311e+11 1.877e+11 1.357e+11 2.444e+11 1.376e+11 3.146e+11 1.357e+11 4.009e+11 1.282e+11 5.060e+11 1.133e+11 6.332e+11 8.882e+10 7.853e+11 5.237e+10 9.660e+11 1.089e+09 1.179e+12 -6.802e+10 1.429e+12 -1.584e+11 1.720e+12 -2.739e+11 2.056e+12 -4.185e+11 2.442e+12 -5.966e+11 2.883e+12 -8.133e+11 3.386e+12 -1.094e+12 3.961e+12 -1.422e+12 4.609e+12 -1.794e+12 5.331e+12 -2.227e+12 6.136e+12 -2.728e+12 7.032e+12 -3.141e+12 7.627e+12 -3.769e+12 8.675e+12 -4.482e+12 9.827e+12 -5.288e+12 1.110e+13 -6.192e+12 1.249e+13 -7.203e+12 1.401e+13 -8.329e+12 1.566e+13 -9.570e+12 1.745e+13 -1.094e+13 1.939e+13 -1.246e+13 2.149e+13 -1.410e+13 2.373e+13 -1.589e+13 2.615e+13 -1.784e+13 2.874e+13 -1.994e+13 3.151e+13 -2.219e+13 3.446e+13 -2.462e+13 3.758e+13 -2.721e+13 4.091e+13 -2.996e+13 4.443e+13 -3.289e+13 4.814e+13 -3.598e+13 5.204e+13 -3.925e+13 5.615e+13 -4.267e+13 6.048e+13 -4.626e+13 6.499e+13 -4.999e+13 6.971e+13 -5.388e+13 7.464e+13 -5.791e+13 7.976e+13 -6.207e+13 8.507e+13 -6.635e+13 9.060e+13 -7.074e+13 9.631e+13 -7.523e+13 1.022e+14 -7.981e+13 1.083e+14 -8.445e+13 1.145e+14 -8.915e+13 1.210e+14 -9.388e+13 1.277e+14 -9.864e+13 1.344e+14 -1.034e+14 1.414e+14 -1.082e+14 1.485e+14 -1.129e+14 1.558e+14 -1.176e+14 1.633e+14 -1.222e+14 1.708e+14 -1.268e+14 1.785e+14 -1.311e+14 1.864e+14 -1.354e+14 1.943e+14 -1.396e+14 2.023e+14 -1.436e+14 2.103e+14 -1.474e+14 2.186e+14 -1.509e+14 2.268e+14 -1.543e+14 2.351e+14 -1.574e+14 2.435e+14 -1.604e+14 2.520e+14 -1.630e+14 2.604e+14 -1.654e+14 2.689e+14 -1.674e+14 2.774e+14 -1.692e+14 2.859e+14 -1.707e+14 2.944e+14 -1.719e+14 3.029e+14 -1.728e+14 3.115e+14 -1.733e+14 3.199e+14 -1.735e+14 3.284e+14 -1.733e+14 3.368e+14 -1.728e+14 3.452e+14 -1.720e+14 3.535e+14 -1.708e+14 3.618e+14 -1.693e+14 3.699e+14 -1.675e+14 3.781e+14 -1.652e+14 3.861e+14 -1.628e+14 3.941e+14 -1.599e+14 4.019e+14 -1.567e+14 4.097e+14 -1.532e+14 4.174e+14 -1.495e+14 4.250e+14 -1.453e+14 4.324e+14 -1.409e+14 4.397e+14 -1.362e+14 4.470e+14 -1.314e+14 4.540e+14 -1.262e+14 4.610e+14 -1.208e+14 4.678e+14 -1.152e+14 4.745e+14 -1.094e+14 4.810e+14 -1.033e+14 4.874e+14 -9.717e+13 4.935e+14 -9.079e+13 4.994e+14 -8.425e+13 5.051e+14 -7.756e+13 5.106e+14 -7.075e+13 5.158e+14 -6.384e+13 5.209e+14 -5.684e+13 5.255e+14 -4.978e+13 5.299e+14 -4.266e+13 5.341e+14 -3.552e+13 5.378e+14 -2.838e+13 5.413e+14 -2.125e+13 5.444e+14 -1.416e+13 5.471e+14 -7.132e+12 5.495e+14 -1.886e+11 5.514e+14 6.654e+12 5.530e+14 1.337e+13 5.541e+14 1.994e+13 5.548e+14 2.634e+13 5.551e+14 3.255e+13 5.548e+14 3.855e+13 5.541e+14 4.432e+13 5.529e+14 4.986e+13 5.512e+14 5.513e+13 5.490e+14 6.012e+13 5.464e+14 6.481e+13 5.433e+14 6.920e+13 5.395e+14 7.326e+13 5.353e+14 7.701e+13 5.306e+14 8.040e+13 5.254e+14 8.346e+13 5.197e+14 8.616e+13 5.135e+14 8.851e+13 5.068e+14 9.051e+13 4.996e+14 9.214e+13 4.918e+14 9.344e+13 4.838e+14 9.445e+13 4.751e+14 9.513e+13 4.660e+14 9.546e+13 4.565e+14 9.546e+13 4.467e+14 9.513e+13 4.364e+14 9.448e+13 4.258e+14 9.353e+13 4.149e+14 9.228e+13 4.037e+14 9.076e+13 3.923e+14 8.898e+13 3.806e+14 8.696e+13 3.687e+14 8.472e+13 3.566e+14 8.227e+13 3.444e+14 7.965e+13 3.321e+14 7.685e+13 3.197e+14 7.391e+13 3.072e+14 7.086e+13 2.947e+14 6.770e+13 2.823e+14 6.447e+13 2.699e+14 6.117e+13 2.577e+14 5.784e+13 2.454e+14 5.448e+13 2.335e+14 5.113e+13 2.216e+14 4.778e+13 2.099e+14 4.448e+13 1.984e+14 4.123e+13 1.873e+14 3.804e+13 1.764e+14 3.493e+13 1.658e+14 3.192e+13 1.555e+14 2.901e+13 1.455e+14 2.620e+13 1.359e+14 2.353e+13 1.266e+14 2.098e+13 1.177e+14 1.857e+13 1.092e+14 1.630e+13 1.010e+14 1.418e+13 9.319e+13 1.219e+13 8.578e+13 1.036e+13 7.875e+13 8.667e+12 7.212e+13 7.119e+12 6.586e+13 5.715e+12 5.998e+13 4.447e+12 5.448e+13 3.312e+12 4.933e+13 2.305e+12 4.452e+13 1.419e+12 4.006e+13 6.477e+11 3.592e+13 -1.419e+10 3.210e+13 -5.741e+11 2.859e+13 -1.040e+12 2.536e+13 -1.420e+12 2.241e+13 -1.719e+12 1.972e+13 -1.844e+12 1.637e+13 -1.999e+12 1.428e+13 -2.099e+12 1.239e+13 -2.153e+12 1.071e+13 -2.166e+12 9.208e+12 -2.145e+12 7.878e+12 -2.096e+12 6.703e+12 -2.024e+12 5.671e+12 -1.935e+12 4.769e+12 -1.832e+12 3.986e+12 -1.719e+12 3.309e+12 -1.601e+12 2.728e+12 -1.481e+12 2.231e+12 -1.360e+12 1.809e+12 -1.241e+12 1.454e+12 -1.126e+12 1.155e+12 -1.015e+12 9.069e+11 -9.109e+11 7.013e+11 -8.128e+11 5.321e+11 -7.213e+11 3.939e+11 -6.364e+11 2.820e+11 -5.580e+11 1.921e+11 -4.859e+11 1.205e+11 -4.197e+11 6.433e+10 -3.591e+11 2.098e+10 -3.038e+11 -1.166e+10 -2.535e+11 -3.537e+10 -2.080e+11 -5.167e+10 -1.671e+11 -6.187e+10 -1.309e+11 -6.712e+10 -9.916e+10 -6.848e+10 -7.183e+10 -6.695e+10 -4.876e+10 -6.352e+10 -2.958e+10 -5.916e+10 -1.367e+10 -5.478e+10 -3.440e+07 -5.117e+10 1.274e+10 -4.874e+10 2.625e+10 -4.743e+10 4.190e+10 -4.670e+10 6.074e+10 -4.568e+10 8.332e+10 -4.350e+10 1.098e+11 -3.935e+10 1.400e+11 -3.260e+10 1.737e+11 -2.277e+10 2.104e+11 -9.538e+09 2.497e+11 7.316e+09 2.909e+11 2.790e+10 3.334e+11 5.216e+10 3.766e+11 8.001e+10 4.199e+11 1.113e+11 4.625e+11 1.456e+11 5.038e+11 1.827e+11 5.432e+11 2.223e+11 5.801e+11 2.636e+11 6.140e+11 3.064e+11 6.443e+11 3.501e+11 6.707e+11 3.940e+11 6.927e+11 4.376e+11 7.102e+11 4.804e+11 7.228e+11 5.218e+11 7.305e+11 5.613e+11 7.333e+11 5.983e+11 7.310e+11 6.324e+11 7.239e+11 6.632e+11 7.121e+11 6.904e+11 6.959e+11 7.136e+11 6.755e+11 7.326e+11 6.514e+11 7.472e+11 6.239e+11 7.575e+11 5.936e+11 7.635e+11 5.606e+11 7.651e+11 5.257e+11 7.624e+11 4.892e+11 7.555e+11 4.515e+11 7.446e+11 4.132e+11 7.300e+11 3.747e+11 7.121e+11 3.363e+11 6.910e+11 2.986e+11 6.672e+11 2.618e+11 6.410e+11 2.262e+11 6.128e+11 1.922e+11 5.830e+11 1.599e+11 5.520e+11 1.296e+11 5.201e+11 1.014e+11 4.876e+11 7.543e+10 4.550e+11 5.169e+10 4.224e+11 3.024e+10 3.903e+11 1.109e+10 3.588e+11 -5.836e+09 3.281e+11 -2.058e+10 2.985e+11 -3.323e+10 2.702e+11 -4.392e+10 2.431e+11 -5.276e+10 2.175e+11 -5.990e+10 1.935e+11 -6.549e+10 1.709e+11 -6.968e+10 1.500e+11 -7.263e+10 1.306e+11 -7.450e+10 1.127e+11 -7.544e+10 9.638e+10 -7.559e+10 8.145e+10 -7.510e+10 6.785e+10 -7.408e+10 5.549e+10 -7.264e+10 4.429e+10 -7.088e+10 3.413e+10 -6.888e+10 2.489e+10 -6.670e+10 1.647e+10 -6.439e+10 8.760e+09 -6.198e+10 1.640e+09 -5.949e+10 -4.970e+09 -5.693e+10 -1.116e+10 -5.428e+10 -1.704e+10 -5.153e+10 -2.264e+10 -4.865e+10 -2.804e+10 -4.563e+10 -3.330e+10 -4.241e+10 -3.843e+10 -3.898e+10 -4.347e+10 -3.528e+10 -4.844e+10 -3.131e+10 -5.334e+10 -2.702e+10 -5.816e+10 -2.237e+10 -6.292e+10 -1.737e+10 -6.757e+10 -1.198e+10 -7.211e+10 -6.184e+09 -7.652e+10 8.553e+06 -8.074e+10 6.600e+09 -8.476e+10 1.359e+10 -8.853e+10 2.094e+10 -9.201e+10 2.863e+10 -9.517e+10 3.663e+10 -9.795e+10 0.005 -52.164 -51.194 -50.225 -49.256 -48.286 -47.317 -46.389 -45.557 -44.812 -44.148 -43.561 -43.045 -42.597 -42.215 -41.896 -41.639 -41.442 -41.305 -41.228 -41.210 -41.252 -41.354 -41.520 -41.750 -42.047 -42.414 -42.856 -43.378 -43.985 -44.686 -45.491 -46.416 -47.474 -48.689 -50.092 -51.727 -53.662 -56.006 -58.962 -62.973 -69.389 -76.409 -73.331 -67.782 -65.337 -64.265 -64.041 -64.334 -64.589 -63.921 -61.932 -59.233 -56.538 -54.118 -52.000 -50.152 -48.532 -47.106 -45.844 -44.727 -43.735 -42.857 -42.081 -41.400 -40.805 -40.293 -39.858 -39.498 -39.210 -38.993 -38.844 -38.764 -38.753 -38.813 -38.943 -39.147 -39.426 -39.784 -40.225 -40.755 -41.379 -42.107 -42.948 -43.915 -45.021 -46.287 -47.733 -49.387 -51.278 -53.434 -55.869 -58.551 -61.383 -64.286 -67.613 -73.070 -74.300 -67.725 -60.879 -56.252 -52.689 -49.769 -47.294 -45.151 -43.267 -41.595 -40.101 -38.758 -37.548 -36.456 -35.470 -34.580 -33.779 -33.062 -32.422 -31.857 -31.365 -30.942 -30.586 -30.296 -30.073 -29.916 -29.825 -29.801 -29.847 -29.966 -30.161 -30.437 -30.798 -31.253 -31.810 -32.480 -33.277 -34.219 -35.329 -36.639 -38.192 -40.047 -42.287 -45.025 -48.374 -52.170 -55.105 -55.946 -56.176 -58.030 -60.104 -54.712 -47.847 -42.709 -38.741 -35.483 -32.702 -30.269 -28.102 -26.146 -24.364 -22.728 -21.217 -19.814 -18.506 -17.282 -16.133 -15.053 -14.035 -13.074 -12.165 -11.306 -10.493 -9.722 -8.992 -8.301 -7.645 -7.025 -6.437 -5.881 -5.355 -4.858 -4.390 -3.949 -3.534 -3.145 -2.781 -2.441 -2.126 -1.833 -1.564 -1.316 -1.091 -0.888 -0.706 -0.546 -0.406 -0.287 -0.189 -0.111 -0.054 -0.017 0.000 -0.004 -0.027 -0.070 -0.133 -0.217 -0.321 -0.446 -0.592 -0.759 -0.947 -1.157 -1.389 -1.643 -1.920 -2.220 -2.544 -2.892 -3.264 -3.662 -4.087 -4.538 -5.017 -5.525 -6.063 -6.632 -7.234 -7.870 -8.542 -9.251 -10.001 -10.793 -11.630 -12.517 -13.455 -14.451 -15.509 -16.635 -17.837 -19.124 -20.507 -22.001 -23.624 -25.402 -27.366 -29.571 -32.094 -35.059 -38.709 -43.618 -51.571 -61.656 -51.951 -48.048 -46.517 -46.158 -46.557 -47.364 -47.911 -47.305 -45.419 -43.054 -40.819 -38.883 -37.243 -35.859 -34.691 -33.706 -32.878 -32.186 -31.614 -31.151 -30.786 -30.511 -30.320 -30.210 -30.175 -30.213 -30.322 -30.500 -30.747 -31.062 -31.446 -31.901 -32.427 -33.028 -33.707 -34.469 -35.318 -36.261 -37.304 -38.456 -39.729 -41.133 -42.685 -44.403 -46.305 -48.414 -50.756 -53.358 -56.262 -59.559 -63.386 -66.902 -66.825 -62.703 -58.512 -55.125 -52.339 -49.990 -47.973 -46.222 -44.690 -43.343 -42.155 -41.105 -40.177 -39.360 -38.642 -38.016 -37.474 -37.010 -36.620 -36.300 -36.046 -35.856 -35.728 -35.661 -35.652 -35.702 -35.810 -35.977 -36.202 -36.487 -36.831 -37.238 -37.709 -38.246 -38.853 -39.534 -40.295 -41.140 -42.078 -43.117 -44.269 -45.547 -46.970 -48.559 -50.344 -52.364 -54.670 -57.331 -60.437 -64.073 -68.197 -72.228 -75.087 -76.506 -75.685 -71.974 -67.373 -63.366 -60.089 -57.383 -55.108 -53.168 -51.494 -50.038 -48.763 -47.645 -46.662 -45.798 -45.042 -44.383 -43.813 -43.324 -42.912 -42.571 -42.298 -42.090 -41.944 -41.859 -41.833 -41.866 -41.956 -42.103 -42.308 -42.571 -42.893 -43.275 -43.719 -44.227 -44.802 -45.447 -46.167 -46.966 -47.852 -48.831 -49.851 -50.871 -51.892 -52.912 -53.932 0.03 -19.0393 -18.6638 -18.292 -17.924 -17.5597 -17.1991 -16.8423 -16.4892 -16.1398 -15.7942 -15.4524 -15.1143 -14.7799 -14.4492 -14.1223 -13.7992 -13.4798 -13.1641 -12.8521 -12.5439 -12.2395 -11.9387 -11.6418 -11.3485 -11.059 -10.7733 -10.4912 -10.2129 -9.9384 -9.6676 -9.4005 -9.1372 -8.8776 -8.6218 -8.3697 -8.1213 -7.8767 -7.6358 -7.3987 -7.1653 -6.9356 -6.7097 -6.4875 -6.2691 -6.0544 -5.8434 -5.6362 -5.4327 -5.233 -5.0369 -4.8447 -4.6562 -4.4714 -4.2903 -4.113 -3.9395 -3.7696 -3.6036 -3.4412 -3.2826 -3.1278 -2.9766 -2.8292 -2.6856 -2.5457 -2.4095 -2.2771 -2.1484 -2.0235 -1.9023 -1.7848 -1.6711 -1.5611 -1.4549 -1.3524 -1.2536 -1.1586 -1.0673 -0.97975 -0.89595 -0.81588 -0.73956 -0.66697 -0.59813 -0.53303 -0.47166 -0.41404 -0.36015 -0.31001 -0.26361 -0.22094 -0.18202 -0.14683 -0.11539 -0.087686 -0.063722 -0.043497 -0.027013 -0.014269 -0.0052644 0 0.0015244 -0.00069116 -0.0066467 -0.016342 -0.029778 -0.046953 -0.067869 -0.092524 -0.12092 -0.15305 -0.18893 -0.22855 -0.2719 -0.319 -0.36983 -0.42441 -0.48272 -0.54478 -0.61057 -0.68011 -0.75338 -0.8304 -0.91115 -0.99565 -1.0839 -1.1759 -1.2716 -1.371 -1.4742 -1.5812 -1.6918 -1.8062 -1.9244 -2.0463 -2.1719 -2.3013 -2.4344 -2.5713 -2.7119 -2.8562 -3.0043 -3.1561 -3.3116 -3.4709 -3.634 -3.8007 -3.9713 -4.1455 -4.3235 -4.5052 -4.6907 -4.8799 -5.0729 -5.2696 -5.47 -5.6742 -5.8821 -6.0938 -6.3092 -6.5283 -6.7512 -6.9778 -7.2081 -7.4422 -7.6801 -7.9216 -8.1669 -8.416 -8.6688 -8.9253 -9.1856 -9.4496 -9.7174 -9.9889 -10.2641 -10.5431 -10.8258 -11.1122 -11.4024 -11.6964 -11.994 -12.2954 -12.6006 -12.9095 -13.2221 -13.5385 -13.8586 -14.1825 -14.5101 -14.8414 -15.1765 -15.5153 -15.8578 -16.2041 -16.5542 -16.9079 -17.2654 -17.6267 -17.9917 -18.3604 1.0 52734.43872 IW2 VV 31.58 36.15 0.050 -8.219e+07 1.569e+09 -1.050e+08 1.365e+09 -1.202e+08 1.166e+09 -1.280e+08 9.772e+08 -1.292e+08 7.996e+08 -1.244e+08 6.361e+08 -1.146e+08 4.886e+08 -1.008e+08 3.588e+08 -8.429e+07 2.482e+08 -6.631e+07 1.576e+08 -4.818e+07 8.781e+07 -3.145e+07 3.900e+07 -1.816e+07 1.025e+07 -1.187e+07 -3.694e+06 -1.313e+07 -2.057e+07 -1.385e+07 -5.446e+07 -9.804e+06 -1.061e+08 3.761e+05 -1.741e+08 1.736e+07 -2.568e+08 4.154e+07 -3.524e+08 7.302e+07 -4.585e+08 1.118e+08 -5.730e+08 1.577e+08 -6.936e+08 2.102e+08 -8.177e+08 2.689e+08 -9.427e+08 3.332e+08 -1.066e+09 4.021e+08 -1.186e+09 4.748e+08 -1.299e+09 5.503e+08 -1.403e+09 6.273e+08 -1.496e+09 7.048e+08 -1.576e+09 7.814e+08 -1.641e+09 8.559e+08 -1.689e+09 9.268e+08 -1.720e+09 9.931e+08 -1.733e+09 1.053e+09 -1.727e+09 1.106e+09 -1.703e+09 1.151e+09 -1.660e+09 1.186e+09 -1.599e+09 1.211e+09 -1.523e+09 1.226e+09 -1.431e+09 1.229e+09 -1.328e+09 1.221e+09 -1.214e+09 1.202e+09 -1.092e+09 1.173e+09 -9.652e+08 1.133e+09 -8.359e+08 1.084e+09 -7.068e+08 1.028e+09 -5.804e+08 9.659e+08 -4.590e+08 8.990e+08 -3.444e+08 8.294e+08 -2.381e+08 7.591e+08 -1.411e+08 6.899e+08 -5.368e+07 6.233e+08 2.465e+07 5.610e+08 9.486e+07 5.036e+08 1.587e+08 4.513e+08 2.186e+08 4.036e+08 2.766e+08 3.591e+08 3.353e+08 3.161e+08 3.965e+08 2.723e+08 4.613e+08 2.257e+08 5.300e+08 1.744e+08 6.024e+08 1.170e+08 6.773e+08 5.281e+07 7.532e+08 -1.874e+07 8.287e+08 -9.731e+07 9.017e+08 -1.824e+08 9.705e+08 -2.733e+08 1.033e+09 -3.685e+08 1.088e+09 -4.666e+08 1.135e+09 -5.663e+08 1.171e+09 -6.655e+08 1.195e+09 -7.627e+08 1.208e+09 -8.560e+08 1.209e+09 -9.437e+08 1.197e+09 -1.024e+09 1.173e+09 -1.096e+09 1.136e+09 -1.157e+09 1.087e+09 -1.206e+09 1.028e+09 -1.243e+09 9.580e+08 -1.266e+09 8.797e+08 -1.274e+09 7.939e+08 -1.268e+09 7.021e+08 -1.247e+09 6.063e+08 -1.212e+09 5.082e+08 -1.162e+09 4.096e+08 -1.099e+09 3.127e+08 -1.025e+09 2.194e+08 -9.413e+08 1.315e+08 -8.495e+08 5.074e+07 -7.524e+08 -2.139e+07 -6.525e+08 -8.397e+07 -5.530e+08 -1.364e+08 -4.567e+08 -1.790e+08 -3.659e+08 -2.130e+08 -2.826e+08 -2.409e+08 -2.070e+08 -2.662e+08 -1.367e+08 -2.935e+08 -6.702e+07 -3.270e+08 9.358e+06 -3.697e+08 1.008e+08 -4.224e+08 2.153e+08 -4.834e+08 3.593e+08 -5.493e+08 5.381e+08 -6.156e+08 7.553e+08 -6.771e+08 1.013e+09 -7.281e+08 1.313e+09 -7.628e+08 1.656e+09 -7.752e+08 2.040e+09 -7.590e+08 2.466e+09 -7.084e+08 2.929e+09 -6.171e+08 3.429e+09 -4.795e+08 3.961e+09 -2.898e+08 4.522e+09 -4.260e+07 5.106e+09 2.669e+08 5.711e+09 6.437e+08 6.329e+09 1.092e+09 6.956e+09 1.615e+09 7.585e+09 2.217e+09 8.212e+09 2.901e+09 8.828e+09 3.668e+09 9.429e+09 4.522e+09 1.001e+10 5.464e+09 1.056e+10 6.493e+09 1.107e+10 7.613e+09 1.155e+10 8.821e+09 1.197e+10 1.012e+10 1.234e+10 1.150e+10 1.264e+10 1.297e+10 1.288e+10 1.452e+10 1.304e+10 1.615e+10 1.312e+10 1.785e+10 1.311e+10 1.963e+10 1.301e+10 2.146e+10 1.280e+10 2.335e+10 1.249e+10 2.529e+10 1.206e+10 2.726e+10 1.152e+10 2.926e+10 1.086e+10 3.127e+10 1.007e+10 3.328e+10 9.159e+09 3.528e+10 8.120e+09 3.724e+10 6.954e+09 3.915e+10 5.663e+09 4.099e+10 4.251e+09 4.274e+10 2.723e+09 4.437e+10 1.087e+09 4.588e+10 -6.459e+08 4.722e+10 -2.466e+09 4.840e+10 -4.358e+09 4.937e+10 -6.304e+09 5.014e+10 -8.288e+09 5.067e+10 -1.029e+10 5.096e+10 -1.229e+10 5.099e+10 -1.426e+10 5.075e+10 -1.618e+10 5.024e+10 -1.802e+10 4.946e+10 -1.977e+10 4.840e+10 -2.140e+10 4.708e+10 -2.288e+10 4.550e+10 -2.420e+10 4.368e+10 -2.534e+10 4.164e+10 -2.628e+10 3.939e+10 -2.702e+10 3.697e+10 -2.753e+10 3.441e+10 -2.782e+10 3.172e+10 -2.789e+10 2.895e+10 -2.774e+10 2.613e+10 -2.737e+10 2.330e+10 -2.680e+10 2.047e+10 -2.605e+10 1.770e+10 -2.512e+10 1.500e+10 -2.405e+10 1.241e+10 -2.285e+10 9.938e+09 -2.156e+10 7.620e+09 -2.020e+10 5.461e+09 -1.880e+10 3.472e+09 -1.738e+10 1.656e+09 -1.599e+10 7.500e+06 -1.463e+10 -1.485e+09 -1.332e+10 -2.839e+09 -1.209e+10 -4.081e+09 -1.093e+10 -5.243e+09 -9.851e+09 -6.356e+09 -8.827e+09 -7.457e+09 -7.841e+09 -8.577e+09 -6.867e+09 -9.738e+09 -5.870e+09 -1.096e+10 -4.818e+09 -1.225e+10 -3.683e+09 -1.360e+10 -2.438e+09 -1.500e+10 -1.061e+09 -1.644e+10 4.580e+08 -1.788e+10 2.128e+09 -1.931e+10 3.950e+09 -2.069e+10 5.916e+09 -2.200e+10 8.018e+09 -2.319e+10 1.024e+10 -2.425e+10 1.256e+10 -2.514e+10 1.495e+10 -2.583e+10 1.739e+10 -2.631e+10 1.984e+10 -2.655e+10 2.229e+10 -2.655e+10 2.469e+10 -2.628e+10 2.701e+10 -2.574e+10 2.922e+10 -2.494e+10 3.130e+10 -2.387e+10 3.320e+10 -2.255e+10 3.492e+10 -2.099e+10 3.641e+10 -1.920e+10 3.767e+10 -1.721e+10 3.868e+10 -1.505e+10 3.943e+10 -1.273e+10 3.991e+10 -1.029e+10 4.013e+10 -7.767e+09 4.008e+10 -5.180e+09 3.977e+10 -2.565e+09 3.921e+10 5.333e+07 3.842e+10 2.646e+09 3.740e+10 5.188e+09 3.619e+10 7.662e+09 3.480e+10 1.005e+10 3.324e+10 1.233e+10 3.154e+10 1.448e+10 2.970e+10 1.651e+10 2.776e+10 1.840e+10 2.572e+10 2.014e+10 2.359e+10 2.172e+10 2.140e+10 2.314e+10 1.914e+10 2.439e+10 1.684e+10 2.547e+10 1.450e+10 2.636e+10 1.214e+10 2.706e+10 9.766e+09 2.756e+10 7.397e+09 2.785e+10 5.045e+09 2.792e+10 2.729e+09 2.777e+10 4.691e+08 2.740e+10 -1.718e+09 2.680e+10 -3.810e+09 2.597e+10 -5.786e+09 2.493e+10 -7.628e+09 2.367e+10 -9.317e+09 2.223e+10 -1.084e+10 2.061e+10 -1.218e+10 1.883e+10 -1.334e+10 1.693e+10 -1.431e+10 1.493e+10 -1.510e+10 1.285e+10 -1.571e+10 1.073e+10 -1.617e+10 8.573e+09 -1.650e+10 6.404e+09 -1.672e+10 4.227e+09 -1.685e+10 2.034e+09 -1.692e+10 -1.941e+08 -1.693e+10 -2.484e+09 -1.689e+10 -4.872e+09 -1.678e+10 -7.400e+09 -1.658e+10 -1.010e+10 -1.624e+10 -1.300e+10 -1.571e+10 -1.612e+10 -1.494e+10 -1.945e+10 -1.384e+10 -2.296e+10 -1.237e+10 -2.661e+10 -1.047e+10 -3.033e+10 -8.078e+09 -3.402e+10 -5.172e+09 -3.758e+10 -1.729e+09 -4.091e+10 2.258e+09 -4.387e+10 6.789e+09 -4.635e+10 1.184e+10 -4.823e+10 1.739e+10 -4.941e+10 2.344e+10 -4.979e+10 2.996e+10 -4.931e+10 3.698e+10 -4.789e+10 4.459e+10 -4.548e+10 5.291e+10 -4.200e+10 6.218e+10 -3.732e+10 7.272e+10 -3.118e+10 8.496e+10 -2.322e+10 9.941e+10 -1.281e+10 1.167e+11 9.475e+08 1.373e+11 1.921e+10 1.619e+11 4.351e+10 1.910e+11 7.572e+10 2.252e+11 1.180e+11 2.647e+11 1.729e+11 3.099e+11 2.435e+11 3.610e+11 3.328e+11 4.181e+11 4.446e+11 4.813e+11 5.831e+11 5.502e+11 7.525e+11 6.247e+11 9.578e+11 7.043e+11 1.205e+12 7.884e+11 1.499e+12 8.761e+11 1.846e+12 9.666e+11 2.254e+12 1.059e+12 2.728e+12 1.151e+12 3.278e+12 1.241e+12 3.912e+12 1.366e+12 4.623e+12 1.389e+12 5.493e+12 1.458e+12 6.434e+12 1.516e+12 7.496e+12 1.560e+12 8.687e+12 1.406e+12 8.884e+12 1.414e+12 1.022e+13 1.401e+12 1.169e+13 1.364e+12 1.334e+13 1.299e+12 1.514e+13 1.203e+12 1.712e+13 1.074e+12 1.930e+13 9.060e+11 2.168e+13 6.975e+11 2.427e+13 4.442e+11 2.708e+13 1.435e+11 3.012e+13 -2.080e+11 3.341e+13 -6.131e+11 3.694e+13 -1.074e+12 4.073e+13 -1.593e+12 4.478e+13 -2.172e+12 4.912e+13 -2.810e+12 5.372e+13 -3.511e+12 5.861e+13 -4.274e+12 6.379e+13 -5.098e+12 6.926e+13 -5.982e+12 7.502e+13 -6.925e+12 8.109e+13 -7.922e+12 8.744e+13 -8.973e+12 9.410e+13 -1.007e+13 1.010e+14 -1.122e+13 1.082e+14 -1.240e+13 1.157e+14 -1.361e+13 1.235e+14 -1.485e+13 1.316e+14 -1.610e+13 1.400e+14 -1.737e+13 1.486e+14 -1.863e+13 1.574e+14 -1.989e+13 1.664e+14 -2.111e+13 1.757e+14 -2.232e+13 1.852e+14 -2.347e+13 1.949e+14 -2.457e+13 2.048e+14 -2.561e+13 2.149e+14 -2.656e+13 2.251e+14 -2.741e+13 2.354e+14 -2.816e+13 2.459e+14 -2.880e+13 2.564e+14 -2.929e+13 2.671e+14 -2.964e+13 2.778e+14 -2.984e+13 2.886e+14 -2.985e+13 2.994e+14 -2.969e+13 3.101e+14 -2.932e+13 3.209e+14 -2.876e+13 3.317e+14 -2.797e+13 3.425e+14 -2.694e+13 3.532e+14 -2.567e+13 3.638e+14 -2.417e+13 3.742e+14 -2.240e+13 3.846e+14 -2.035e+13 3.950e+14 -1.804e+13 4.050e+14 -1.545e+13 4.150e+14 -1.257e+13 4.249e+14 -9.409e+12 4.346e+14 -5.956e+12 4.441e+14 -2.211e+12 4.533e+14 1.822e+12 4.624e+14 6.147e+12 4.713e+14 1.076e+13 4.799e+14 1.565e+13 4.883e+14 2.083e+13 4.965e+14 2.628e+13 5.045e+14 3.199e+13 5.121e+14 3.797e+13 5.195e+14 4.420e+13 5.266e+14 5.065e+13 5.335e+14 5.734e+13 5.400e+14 6.424e+13 5.463e+14 7.133e+13 5.523e+14 7.862e+13 5.581e+14 8.605e+13 5.635e+14 9.358e+13 5.686e+14 1.013e+14 5.734e+14 1.090e+14 5.779e+14 1.169e+14 5.822e+14 1.248e+14 5.861e+14 1.328e+14 5.896e+14 1.408e+14 5.929e+14 1.489e+14 5.957e+14 1.569e+14 5.982e+14 1.649e+14 6.004e+14 1.729e+14 6.023e+14 1.808e+14 6.037e+14 1.886e+14 6.048e+14 1.962e+14 6.055e+14 2.037e+14 6.058e+14 2.111e+14 6.059e+14 2.182e+14 6.054e+14 2.252e+14 6.046e+14 2.318e+14 6.035e+14 2.383e+14 6.019e+14 2.444e+14 6.000e+14 2.503e+14 5.976e+14 2.557e+14 5.948e+14 2.609e+14 5.918e+14 2.657e+14 5.882e+14 2.700e+14 5.843e+14 2.739e+14 5.800e+14 2.774e+14 5.752e+14 2.805e+14 5.701e+14 2.831e+14 5.645e+14 2.852e+14 5.587e+14 2.868e+14 5.523e+14 2.880e+14 5.456e+14 2.886e+14 5.385e+14 2.886e+14 5.310e+14 2.882e+14 5.232e+14 2.872e+14 5.149e+14 2.857e+14 5.063e+14 2.837e+14 4.973e+14 2.813e+14 4.881e+14 2.782e+14 4.783e+14 2.749e+14 4.682e+14 2.710e+14 4.579e+14 2.666e+14 4.472e+14 2.618e+14 4.364e+14 2.565e+14 4.252e+14 2.509e+14 4.138e+14 2.449e+14 4.022e+14 2.386e+14 3.905e+14 2.319e+14 3.786e+14 2.249e+14 3.666e+14 2.178e+14 3.544e+14 2.103e+14 3.422e+14 2.027e+14 3.300e+14 1.949e+14 3.177e+14 1.870e+14 3.054e+14 1.790e+14 2.931e+14 1.710e+14 2.809e+14 1.629e+14 2.689e+14 1.548e+14 2.569e+14 1.468e+14 2.451e+14 1.388e+14 2.334e+14 1.310e+14 2.219e+14 1.232e+14 2.107e+14 1.157e+14 1.996e+14 1.082e+14 1.888e+14 1.010e+14 1.782e+14 9.394e+13 1.679e+14 8.713e+13 1.579e+14 8.056e+13 1.483e+14 7.424e+13 1.389e+14 6.818e+13 1.299e+14 6.241e+13 1.212e+14 5.689e+13 1.129e+14 5.167e+13 1.048e+14 4.673e+13 9.717e+13 4.209e+13 8.986e+13 3.773e+13 8.290e+13 3.366e+13 7.629e+13 2.987e+13 7.003e+13 2.636e+13 6.412e+13 2.314e+13 5.857e+13 2.016e+13 5.333e+13 1.744e+13 4.843e+13 1.498e+13 4.385e+13 1.274e+13 3.957e+13 1.073e+13 3.560e+13 8.929e+12 3.193e+13 7.331e+12 2.853e+13 5.921e+12 2.541e+13 4.687e+12 2.254e+13 3.148e+12 1.735e+13 2.341e+12 1.525e+13 1.656e+12 1.335e+13 1.081e+12 1.163e+13 6.053e+11 1.009e+13 2.175e+11 8.720e+12 -9.263e+10 7.497e+12 -3.348e+11 6.415e+12 -5.180e+11 5.462e+12 -6.510e+11 4.625e+12 -7.416e+11 3.896e+12 -7.968e+11 3.263e+12 -8.233e+11 2.716e+12 -8.266e+11 2.247e+12 -8.118e+11 1.846e+12 -7.833e+11 1.506e+12 -7.447e+11 1.218e+12 -6.993e+11 9.764e+11 -6.494e+11 7.744e+11 -5.970e+11 6.064e+11 -5.438e+11 4.676e+11 -4.908e+11 3.534e+11 -4.390e+11 2.600e+11 -3.889e+11 1.843e+11 -3.410e+11 1.234e+11 -2.954e+11 7.506e+10 -2.527e+11 3.726e+10 -2.127e+11 8.338e+09 -1.759e+11 -1.311e+10 -1.423e+11 -2.830e+10 -1.121e+11 -3.836e+10 -8.547e+10 -4.434e+10 -6.252e+10 -4.727e+10 -4.309e+10 -4.819e+10 -2.680e+10 -4.819e+10 -1.288e+10 -4.826e+10 -8.333e+07 -4.917e+10 1.313e+10 -5.128e+10 2.825e+10 -5.440e+10 4.650e+10 -5.797e+10 6.864e+10 -6.128e+10 9.499e+10 -6.356e+10 1.256e+11 -6.419e+10 1.605e+11 -6.258e+10 1.990e+11 -5.832e+10 2.410e+11 -5.104e+10 2.859e+11 -4.050e+10 3.330e+11 -2.656e+10 3.817e+11 -9.146e+09 4.313e+11 1.173e+10 4.810e+11 3.593e+10 5.302e+11 6.329e+10 5.782e+11 9.358e+10 6.241e+11 1.264e+11 6.674e+11 1.615e+11 7.075e+11 1.983e+11 7.437e+11 2.365e+11 7.755e+11 2.754e+11 8.026e+11 3.147e+11 8.245e+11 3.538e+11 8.411e+11 3.921e+11 8.521e+11 4.292e+11 8.574e+11 4.645e+11 8.571e+11 4.977e+11 8.513e+11 5.283e+11 8.402e+11 5.559e+11 8.241e+11 5.803e+11 8.031e+11 6.012e+11 7.779e+11 6.184e+11 7.488e+11 6.320e+11 7.163e+11 6.418e+11 6.808e+11 6.476e+11 6.428e+11 6.496e+11 6.029e+11 6.479e+11 5.615e+11 6.425e+11 5.193e+11 6.337e+11 4.766e+11 6.217e+11 4.339e+11 6.067e+11 3.917e+11 5.892e+11 3.503e+11 5.692e+11 3.101e+11 5.473e+11 2.715e+11 5.236e+11 2.346e+11 4.986e+11 1.997e+11 4.725e+11 1.669e+11 4.456e+11 1.364e+11 4.183e+11 1.082e+11 3.908e+11 8.251e+10 3.634e+11 5.918e+10 3.363e+11 3.823e+10 3.097e+11 1.962e+10 2.838e+11 3.247e+09 2.587e+11 -1.099e+10 2.347e+11 -2.320e+10 2.118e+11 -3.353e+10 1.901e+11 -4.214e+10 1.696e+11 -4.916e+10 1.504e+11 -5.478e+10 1.325e+11 -5.914e+10 1.159e+11 -6.240e+10 1.005e+11 -6.472e+10 8.636e+10 -6.623e+10 7.335e+10 -6.708e+10 6.143e+10 -6.737e+10 5.049e+10 -6.721e+10 4.044e+10 -6.670e+10 3.120e+10 -6.589e+10 2.266e+10 -6.484e+10 1.470e+10 -6.360e+10 7.262e+09 -6.218e+10 2.386e+08 -6.059e+10 -6.459e+09 -5.883e+10 -1.289e+10 -5.690e+10 -1.913e+10 -5.476e+10 -2.522e+10 -5.240e+10 -3.121e+10 -4.978e+10 -3.712e+10 -4.688e+10 -4.299e+10 -4.366e+10 -4.881e+10 -4.010e+10 -5.459e+10 -3.617e+10 -6.034e+10 -3.185e+10 -6.602e+10 -2.711e+10 -7.162e+10 -2.194e+10 -7.712e+10 -1.634e+10 -8.247e+10 -1.030e+10 -8.765e+10 -3.827e+09 -9.262e+10 3.060e+09 -9.732e+10 1.034e+10 -1.017e+11 1.798e+10 -1.058e+11 0.005 -52.210 -51.199 -50.188 -49.178 -48.167 -47.156 -46.188 -45.317 -44.536 -43.836 -43.213 -42.661 -42.178 -41.761 -41.405 -41.111 -40.876 -40.699 -40.580 -40.519 -40.515 -40.568 -40.681 -40.855 -41.090 -41.390 -41.757 -42.195 -42.708 -43.302 -43.983 -44.762 -45.648 -46.652 -47.792 -49.088 -50.570 -52.275 -54.257 -56.589 -59.370 -62.682 -66.300 -68.943 -69.159 -68.051 -67.265 -67.042 -66.886 -65.896 -63.649 -60.739 -57.870 -55.302 -53.058 -51.099 -49.381 -47.867 -46.527 -45.337 -44.279 -43.339 -42.505 -41.768 -41.121 -40.558 -40.074 -39.666 -39.331 -39.066 -38.871 -38.743 -38.684 -38.693 -38.773 -38.922 -39.144 -39.441 -39.817 -40.275 -40.821 -41.461 -42.203 -43.055 -44.030 -45.139 -46.397 -47.819 -49.418 -51.194 -53.119 -55.091 -56.879 -58.148 -58.649 -58.403 -57.582 -56.306 -54.649 -52.723 -50.674 -48.630 -46.673 -44.843 -43.151 -41.596 -40.173 -38.873 -37.685 -36.601 -35.614 -34.718 -33.905 -33.173 -32.516 -31.931 -31.417 -30.970 -30.590 -30.275 -30.025 -29.839 -29.719 -29.663 -29.676 -29.760 -29.918 -30.153 -30.472 -30.881 -31.387 -32.001 -32.736 -33.609 -34.642 -35.862 -37.311 -39.042 -41.133 -43.686 -46.799 -50.283 -52.782 -52.971 -52.129 -52.037 -53.721 -58.600 -56.252 -48.807 -42.910 -38.655 -35.269 -32.428 -29.966 -27.788 -25.830 -24.052 -22.423 -20.922 -19.529 -18.230 -17.016 -15.878 -14.807 -13.799 -12.848 -11.949 -11.100 -10.296 -9.534 -8.813 -8.130 -7.483 -6.870 -6.291 -5.742 -5.224 -4.735 -4.273 -3.839 -3.432 -3.049 -2.692 -2.359 -2.049 -1.763 -1.500 -1.258 -1.039 -0.841 -0.665 -0.510 -0.376 -0.262 -0.169 -0.097 -0.044 -0.012 0.000 -0.008 -0.035 -0.082 -0.150 -0.238 -0.346 -0.475 -0.624 -0.795 -0.986 -1.200 -1.435 -1.692 -1.971 -2.274 -2.599 -2.949 -3.323 -3.723 -4.148 -4.599 -5.078 -5.586 -6.123 -6.690 -7.290 -7.922 -8.590 -9.294 -10.036 -10.820 -11.647 -12.521 -13.444 -14.421 -15.456 -16.554 -17.722 -18.967 -20.297 -21.724 -23.260 -24.923 -26.736 -28.728 -30.935 -33.410 -36.222 -39.460 -43.188 -47.160 -50.185 -50.913 -50.457 -50.284 -50.557 -50.675 -49.728 -47.567 -44.978 -42.557 -40.463 -38.688 -37.186 -35.914 -34.837 -33.925 -33.157 -32.516 -31.987 -31.562 -31.230 -30.986 -30.824 -30.739 -30.728 -30.790 -30.921 -31.121 -31.389 -31.724 -32.129 -32.604 -33.151 -33.772 -34.471 -35.253 -36.120 -37.079 -38.135 -39.295 -40.567 -41.958 -43.477 -45.125 -46.903 -48.791 -50.749 -52.693 -54.486 -55.939 -56.837 -56.998 -56.362 -55.064 -53.370 -51.534 -49.722 -48.017 -46.450 -45.027 -43.745 -42.594 -41.564 -40.644 -39.827 -39.105 -38.469 -37.916 -37.439 -37.034 -36.698 -36.428 -36.221 -36.075 -35.989 -35.961 -35.992 -36.080 -36.226 -36.430 -36.691 -37.013 -37.394 -37.839 -38.348 -38.926 -39.576 -40.302 -41.110 -42.008 -43.002 -44.104 -45.326 -46.685 -48.202 -49.904 -51.828 -54.027 -56.574 -59.583 -63.239 -67.878 -74.193 -83.178 -86.547 -82.763 -76.665 -70.866 -66.167 -62.446 -59.432 -56.933 -54.822 -53.014 -51.450 -50.088 -48.896 -47.852 -46.936 -46.134 -45.437 -44.833 -44.315 -43.878 -43.515 -43.223 -42.998 -42.839 -42.743 -42.709 -42.735 -42.820 -42.966 -43.171 -43.436 -43.763 -44.152 -44.606 -45.128 -45.720 -46.386 -47.131 -47.962 -48.884 -49.907 -50.975 -52.042 -53.110 -54.177 -55.245 0.03 -19.4184 -19.034 -18.6535 -18.2768 -17.904 -17.535 -17.1698 -16.8085 -16.4511 -16.0975 -15.7477 -15.4017 -15.0596 -14.7214 -14.387 -14.0564 -13.7297 -13.4068 -13.0877 -12.7725 -12.4612 -12.1537 -11.85 -11.5501 -11.2542 -10.962 -10.6737 -10.3892 -10.1086 -9.8318 -9.5589 -9.2898 -9.0245 -8.7631 -8.5055 -8.2518 -8.0019 -7.7558 -7.5136 -7.2753 -7.0408 -6.8101 -6.5832 -6.3602 -6.1411 -5.9258 -5.7143 -5.5067 -5.3029 -5.1029 -4.9068 -4.7146 -4.5261 -4.3416 -4.1608 -3.9839 -3.8109 -3.6417 -3.4763 -3.3148 -3.1571 -3.0032 -2.8532 -2.7071 -2.5648 -2.4263 -2.2916 -2.1609 -2.0339 -1.9108 -1.7915 -1.6761 -1.5645 -1.4568 -1.3529 -1.2528 -1.1566 -1.0642 -0.9757 -0.89101 -0.81016 -0.73316 -0.65999 -0.59067 -0.52519 -0.46355 -0.40576 -0.3518 -0.30169 -0.25542 -0.21299 -0.1744 -0.13965 -0.10875 -0.08169 -0.05847 -0.039092 -0.023556 -0.011862 -0.0040103 0 0.00016837 -0.0035051 -0.011021 -0.022378 -0.037577 -0.056618 -0.079501 -0.10623 -0.13679 -0.1712 -0.20945 -0.25154 -0.29748 -0.34725 -0.40087 -0.45833 -0.51963 -0.58478 -0.65376 -0.72659 -0.80326 -0.88377 -0.96812 -1.0563 -1.1484 -1.2442 -1.344 -1.4475 -1.5549 -1.6662 -1.7813 -1.9002 -2.023 -2.1496 -2.28 -2.4143 -2.5525 -2.6944 -2.8403 -2.9899 -3.1434 -3.3008 -3.462 -3.627 -3.7959 -3.9686 -4.1452 -4.3256 -4.5098 -4.6979 -4.8898 -5.0856 -5.2852 -5.4886 -5.6959 -5.9071 -6.1221 -6.3409 -6.5635 -6.79 -7.0204 -7.2546 -7.4926 -7.7345 -7.9802 -8.2297 -8.4831 -8.7404 -9.0014 -9.2664 -9.5351 -9.8077 -10.0842 -10.3645 -10.6486 -10.9366 -11.2284 -11.524 -11.8235 -12.1269 -12.4341 -12.7451 -13.06 -13.3787 -13.7012 -14.0276 -14.3578 -14.6919 -15.0298 -15.3716 -15.7172 -16.0666 -16.4199 -16.7771 -17.138 -17.5028 -17.8715 -18.244 -18.6203 -19.0005 1.0 52734.43872 IW2 VH 31.58 36.15 0.050 -1.120e+09 1.163e+09 -1.013e+09 1.005e+09 -9.012e+08 8.517e+08 -7.871e+08 7.062e+08 -6.727e+08 5.702e+08 -5.605e+08 4.457e+08 -4.526e+08 3.344e+08 -3.514e+08 2.375e+08 -2.594e+08 1.562e+08 -1.786e+08 9.132e+07 -1.113e+08 4.317e+07 -5.950e+07 1.170e+07 -2.522e+07 -4.685e+06 -8.421e+06 -1.308e+07 3.967e+06 -3.079e+07 3.143e+07 -6.558e+07 7.968e+07 -1.155e+08 1.501e+08 -1.788e+08 2.431e+08 -2.538e+08 3.589e+08 -3.388e+08 4.970e+08 -4.318e+08 6.565e+08 -5.309e+08 8.368e+08 -6.341e+08 1.036e+09 -7.390e+08 1.252e+09 -8.436e+08 1.484e+09 -9.457e+08 1.728e+09 -1.043e+09 1.983e+09 -1.133e+09 2.245e+09 -1.214e+09 2.510e+09 -1.285e+09 2.776e+09 -1.342e+09 3.039e+09 -1.386e+09 3.295e+09 -1.413e+09 3.541e+09 -1.424e+09 3.773e+09 -1.418e+09 3.988e+09 -1.394e+09 4.182e+09 -1.351e+09 4.353e+09 -1.291e+09 4.497e+09 -1.213e+09 4.612e+09 -1.120e+09 4.696e+09 -1.011e+09 4.749e+09 -8.886e+08 4.768e+09 -7.548e+08 4.754e+09 -6.115e+08 4.708e+09 -4.608e+08 4.629e+09 -3.055e+08 4.519e+09 -1.478e+08 4.381e+09 9.850e+06 4.217e+09 1.647e+08 4.029e+09 3.148e+08 3.822e+09 4.578e+08 3.598e+09 5.919e+08 3.361e+09 7.155e+08 3.116e+09 8.275e+08 2.865e+09 9.268e+08 2.613e+09 1.013e+09 2.363e+09 1.087e+09 2.118e+09 1.147e+09 1.881e+09 1.196e+09 1.653e+09 1.235e+09 1.437e+09 1.264e+09 1.234e+09 1.285e+09 1.044e+09 1.300e+09 8.658e+08 1.311e+09 6.995e+08 1.319e+09 5.434e+08 1.325e+09 3.964e+08 1.330e+09 2.566e+08 1.334e+09 1.225e+08 1.337e+09 -7.182e+06 1.338e+09 -1.333e+08 1.337e+09 -2.566e+08 1.332e+09 -3.767e+08 1.322e+09 -4.931e+08 1.306e+09 -6.052e+08 1.283e+09 -7.116e+08 1.251e+09 -8.107e+08 1.210e+09 -9.012e+08 1.159e+09 -9.812e+08 1.100e+09 -1.049e+09 1.031e+09 -1.104e+09 9.534e+08 -1.144e+09 8.686e+08 -1.169e+09 7.774e+08 -1.177e+09 6.814e+08 -1.169e+09 5.823e+08 -1.145e+09 4.820e+08 -1.105e+09 3.824e+08 -1.050e+09 2.854e+08 -9.827e+08 1.931e+08 -9.040e+08 1.071e+08 -8.166e+08 2.916e+07 -7.231e+08 -3.953e+07 -6.264e+08 -9.820e+07 -5.297e+08 -1.465e+08 -4.360e+08 -1.850e+08 -3.478e+08 -2.150e+08 -2.671e+08 -2.392e+08 -1.941e+08 -2.611e+08 -1.266e+08 -2.851e+08 -6.010e+07 -3.152e+08 1.207e+07 -3.544e+08 9.758e+07 -4.033e+08 2.033e+08 -4.605e+08 3.348e+08 -5.232e+08 4.962e+08 -5.878e+08 6.896e+08 -6.499e+08 9.160e+08 -7.053e+08 1.176e+09 -7.497e+08 1.467e+09 -7.788e+08 1.789e+09 -7.884e+08 2.138e+09 -7.745e+08 2.511e+09 -7.334e+08 2.904e+09 -6.619e+08 3.312e+09 -5.567e+08 3.731e+09 -4.154e+08 4.154e+09 -2.358e+08 4.577e+09 -1.592e+07 4.995e+09 2.453e+08 5.401e+09 5.485e+08 5.790e+09 8.945e+08 6.159e+09 1.283e+09 6.500e+09 1.714e+09 6.812e+09 2.187e+09 7.088e+09 2.701e+09 7.327e+09 3.254e+09 7.525e+09 3.847e+09 7.678e+09 4.478e+09 7.786e+09 5.146e+09 7.844e+09 5.850e+09 7.852e+09 6.590e+09 7.808e+09 7.364e+09 7.708e+09 8.171e+09 7.552e+09 9.011e+09 7.336e+09 9.881e+09 7.059e+09 1.078e+10 6.718e+09 1.171e+10 6.311e+09 1.266e+10 5.833e+09 1.364e+10 5.284e+09 1.463e+10 4.662e+09 1.563e+10 3.963e+09 1.663e+10 3.189e+09 1.764e+10 2.339e+09 1.864e+10 1.411e+09 1.961e+10 4.080e+08 2.055e+10 -6.655e+08 2.145e+10 -1.806e+09 2.230e+10 -3.007e+09 2.308e+10 -4.260e+09 2.377e+10 -5.556e+09 2.437e+10 -6.885e+09 2.487e+10 -8.232e+09 2.526e+10 -9.585e+09 2.551e+10 -1.093e+10 2.563e+10 -1.225e+10 2.562e+10 -1.353e+10 2.545e+10 -1.476e+10 2.514e+10 -1.591e+10 2.468e+10 -1.698e+10 2.406e+10 -1.795e+10 2.331e+10 -1.880e+10 2.241e+10 -1.953e+10 2.139e+10 -2.012e+10 2.025e+10 -2.057e+10 1.900e+10 -2.087e+10 1.765e+10 -2.101e+10 1.623e+10 -2.100e+10 1.475e+10 -2.084e+10 1.323e+10 -2.053e+10 1.168e+10 -2.007e+10 1.013e+10 -1.949e+10 8.591e+09 -1.878e+10 7.080e+09 -1.796e+10 5.616e+09 -1.705e+10 4.211e+09 -1.606e+10 2.879e+09 -1.502e+10 1.631e+09 -1.394e+10 4.735e+08 -1.284e+10 -5.901e+08 -1.174e+10 -1.559e+09 -1.066e+10 -2.437e+09 -9.607e+09 -3.234e+09 -8.600e+09 -3.961e+09 -7.642e+09 -4.637e+09 -6.735e+09 -5.280e+09 -5.873e+09 -5.913e+09 -5.042e+09 -6.556e+09 -4.226e+09 -7.226e+09 -3.402e+09 -7.936e+09 -2.546e+09 -8.693e+09 -1.635e+09 -9.498e+09 -6.498e+08 -1.034e+10 4.268e+08 -1.122e+10 1.605e+09 -1.210e+10 2.889e+09 -1.298e+10 4.279e+09 -1.382e+10 5.769e+09 -1.462e+10 7.347e+09 -1.534e+10 8.999e+09 -1.596e+10 1.071e+10 -1.647e+10 1.244e+10 -1.684e+10 1.419e+10 -1.707e+10 1.592e+10 -1.713e+10 1.761e+10 -1.702e+10 1.922e+10 -1.673e+10 2.074e+10 -1.627e+10 2.214e+10 -1.563e+10 2.339e+10 -1.482e+10 2.448e+10 -1.385e+10 2.538e+10 -1.273e+10 2.609e+10 -1.148e+10 2.659e+10 -1.011e+10 2.687e+10 -8.654e+09 2.694e+10 -7.126e+09 2.679e+10 -5.552e+09 2.644e+10 -3.955e+09 2.589e+10 -2.358e+09 2.515e+10 -7.826e+08 2.424e+10 7.486e+08 2.319e+10 2.219e+09 2.200e+10 3.613e+09 2.071e+10 4.916e+09 1.934e+10 6.123e+09 1.791e+10 7.225e+09 1.643e+10 8.218e+09 1.493e+10 9.104e+09 1.342e+10 9.884e+09 1.191e+10 1.056e+10 1.041e+10 1.115e+10 8.939e+09 1.165e+10 7.488e+09 1.206e+10 6.059e+09 1.240e+10 4.651e+09 1.267e+10 3.262e+09 1.286e+10 1.888e+09 1.299e+10 5.267e+08 1.303e+10 -8.222e+08 1.299e+10 -2.159e+09 1.287e+10 -3.481e+09 1.264e+10 -4.780e+09 1.231e+10 -6.052e+09 1.187e+10 -7.287e+09 1.132e+10 -8.473e+09 1.064e+10 -9.603e+09 9.842e+09 -1.067e+10 8.922e+09 -1.165e+10 7.883e+09 -1.256e+10 6.726e+09 -1.337e+10 5.458e+09 -1.410e+10 4.080e+09 -1.473e+10 2.593e+09 -1.527e+10 9.986e+08 -1.571e+10 -7.061e+08 -1.606e+10 -2.529e+09 -1.631e+10 -4.478e+09 -1.645e+10 -6.564e+09 -1.647e+10 -8.801e+09 -1.635e+10 -1.120e+10 -1.606e+10 -1.376e+10 -1.558e+10 -1.649e+10 -1.487e+10 -1.938e+10 -1.389e+10 -2.241e+10 -1.261e+10 -2.556e+10 -1.099e+10 -2.879e+10 -8.990e+09 -3.203e+10 -6.589e+09 -3.523e+10 -3.770e+09 -3.829e+10 -5.238e+08 -4.114e+10 3.151e+09 -4.368e+10 7.236e+09 -4.581e+10 1.171e+10 -4.743e+10 1.654e+10 -4.845e+10 2.169e+10 -4.879e+10 2.711e+10 -4.838e+10 3.281e+10 -4.716e+10 3.874e+10 -4.509e+10 4.496e+10 -4.211e+10 5.152e+10 -3.819e+10 5.856e+10 -3.324e+10 6.628e+10 -2.712e+10 7.498e+10 -1.956e+10 8.499e+10 -1.016e+10 9.672e+10 1.702e+09 1.106e+11 1.693e+10 1.270e+11 3.666e+10 1.463e+11 6.233e+10 1.688e+11 9.573e+10 1.946e+11 1.388e+11 2.239e+11 1.940e+11 2.565e+11 2.639e+11 2.924e+11 3.513e+11 3.312e+11 4.597e+11 3.726e+11 5.928e+11 4.160e+11 7.542e+11 4.607e+11 9.486e+11 5.059e+11 1.181e+12 5.504e+11 1.456e+12 5.931e+11 1.779e+12 6.326e+11 2.157e+12 6.672e+11 2.595e+12 6.951e+11 3.100e+12 7.144e+11 3.681e+12 7.052e+11 4.359e+12 6.855e+11 5.127e+12 6.578e+11 5.985e+12 6.104e+11 6.948e+12 5.401e+11 8.029e+12 4.142e+11 8.622e+12 2.972e+11 9.885e+12 1.494e+11 1.128e+13 -3.263e+10 1.282e+13 -2.518e+11 1.453e+13 -5.117e+11 1.639e+13 -8.157e+11 1.843e+13 -1.166e+12 2.066e+13 -1.567e+12 2.308e+13 -2.021e+12 2.571e+13 -2.530e+12 2.853e+13 -3.095e+12 3.159e+13 -3.721e+12 3.488e+13 -4.408e+12 3.840e+13 -5.154e+12 4.217e+13 -5.965e+12 4.618e+13 -6.836e+12 5.044e+13 -7.769e+12 5.497e+13 -8.764e+12 5.977e+13 -9.812e+12 6.482e+13 -1.092e+13 7.015e+13 -1.208e+13 7.575e+13 -1.329e+13 8.163e+13 -1.454e+13 8.778e+13 -1.583e+13 9.419e+13 -1.716e+13 1.009e+14 -1.851e+13 1.078e+14 -1.988e+13 1.150e+14 -2.125e+13 1.224e+14 -2.263e+13 1.302e+14 -2.400e+13 1.381e+14 -2.536e+13 1.462e+14 -2.668e+13 1.546e+14 -2.797e+13 1.632e+14 -2.921e+13 1.720e+14 -3.039e+13 1.809e+14 -3.149e+13 1.900e+14 -3.252e+13 1.993e+14 -3.343e+13 2.088e+14 -3.425e+13 2.184e+14 -3.493e+13 2.281e+14 -3.548e+13 2.378e+14 -3.588e+13 2.477e+14 -3.612e+13 2.576e+14 -3.618e+13 2.676e+14 -3.606e+13 2.775e+14 -3.573e+13 2.875e+14 -3.519e+13 2.974e+14 -3.444e+13 3.073e+14 -3.345e+13 3.172e+14 -3.221e+13 3.270e+14 -3.072e+13 3.367e+14 -2.897e+13 3.463e+14 -2.695e+13 3.558e+14 -2.465e+13 3.652e+14 -2.207e+13 3.744e+14 -1.922e+13 3.835e+14 -1.606e+13 3.924e+14 -1.262e+13 4.011e+14 -8.876e+12 4.097e+14 -4.843e+12 4.180e+14 -5.194e+11 4.261e+14 4.096e+12 4.340e+14 9.000e+12 4.417e+14 1.418e+13 4.491e+14 1.965e+13 4.563e+14 2.537e+13 4.632e+14 3.136e+13 4.700e+14 3.760e+13 4.763e+14 4.408e+13 4.824e+14 5.078e+13 4.884e+14 5.771e+13 4.939e+14 6.484e+13 4.992e+14 7.215e+13 5.042e+14 7.964e+13 5.089e+14 8.725e+13 5.133e+14 9.498e+13 5.175e+14 1.029e+14 5.214e+14 1.107e+14 5.250e+14 1.188e+14 5.283e+14 1.269e+14 5.313e+14 1.350e+14 5.340e+14 1.432e+14 5.362e+14 1.513e+14 5.382e+14 1.594e+14 5.399e+14 1.676e+14 5.412e+14 1.757e+14 5.422e+14 1.835e+14 5.428e+14 1.914e+14 5.430e+14 1.991e+14 5.430e+14 2.067e+14 5.426e+14 2.141e+14 5.417e+14 2.213e+14 5.406e+14 2.283e+14 5.390e+14 2.350e+14 5.372e+14 2.415e+14 5.349e+14 2.477e+14 5.323e+14 2.534e+14 5.294e+14 2.590e+14 5.260e+14 2.642e+14 5.223e+14 2.690e+14 5.183e+14 2.734e+14 5.138e+14 2.774e+14 5.090e+14 2.810e+14 5.038e+14 2.842e+14 4.984e+14 2.869e+14 4.926e+14 2.891e+14 4.864e+14 2.908e+14 4.799e+14 2.921e+14 4.730e+14 2.928e+14 4.658e+14 2.931e+14 4.583e+14 2.928e+14 4.505e+14 2.921e+14 4.425e+14 2.908e+14 4.341e+14 2.890e+14 4.254e+14 2.867e+14 4.165e+14 2.839e+14 4.072e+14 2.808e+14 3.978e+14 2.771e+14 3.880e+14 2.729e+14 3.782e+14 2.683e+14 3.682e+14 2.634e+14 3.580e+14 2.579e+14 3.475e+14 2.521e+14 3.371e+14 2.460e+14 3.266e+14 2.395e+14 3.159e+14 2.328e+14 3.053e+14 2.258e+14 2.945e+14 2.185e+14 2.839e+14 2.111e+14 2.732e+14 2.035e+14 2.625e+14 1.957e+14 2.519e+14 1.878e+14 2.413e+14 1.799e+14 2.309e+14 1.719e+14 2.206e+14 1.639e+14 2.105e+14 1.559e+14 2.005e+14 1.479e+14 1.906e+14 1.400e+14 1.809e+14 1.322e+14 1.715e+14 1.246e+14 1.623e+14 1.171e+14 1.533e+14 1.098e+14 1.446e+14 1.026e+14 1.361e+14 9.569e+13 1.279e+14 8.897e+13 1.200e+14 8.248e+13 1.123e+14 7.624e+13 1.049e+14 7.025e+13 9.779e+13 6.454e+13 9.099e+13 5.909e+13 8.448e+13 5.391e+13 7.827e+13 4.902e+13 7.236e+13 4.440e+13 6.673e+13 4.007e+13 6.141e+13 3.601e+13 5.637e+13 3.224e+13 5.163e+13 2.873e+13 4.718e+13 2.549e+13 4.299e+13 2.250e+13 3.908e+13 1.974e+13 3.542e+13 1.723e+13 3.200e+13 1.495e+13 2.883e+13 1.288e+13 2.591e+13 1.101e+13 2.320e+13 9.351e+12 2.071e+13 7.868e+12 1.842e+13 6.081e+12 1.516e+13 5.004e+12 1.338e+13 4.065e+12 1.177e+13 3.252e+12 1.031e+13 2.554e+12 9.003e+12 1.960e+12 7.828e+12 1.459e+12 6.779e+12 1.042e+12 5.846e+12 6.985e+11 5.021e+12 4.193e+11 4.293e+12 1.964e+11 3.655e+12 2.192e+10 3.098e+12 -1.115e+11 2.613e+12 -2.103e+11 2.194e+12 -2.803e+11 1.833e+12 -3.266e+11 1.523e+12 -3.539e+11 1.259e+12 -3.660e+11 1.035e+12 -3.663e+11 8.457e+11 -3.575e+11 6.858e+11 -3.419e+11 5.518e+11 -3.214e+11 4.397e+11 -2.975e+11 3.462e+11 -2.713e+11 2.688e+11 -2.438e+11 2.049e+11 -2.156e+11 1.525e+11 -1.875e+11 1.100e+11 -1.599e+11 7.587e+10 -1.333e+11 4.897e+10 -1.082e+11 2.829e+10 -8.488e+10 1.294e+10 -6.389e+10 2.134e+09 -4.560e+10 -4.857e+09 -3.036e+10 -8.792e+09 -1.841e+10 -1.052e+10 -9.688e+09 -1.112e+10 -3.352e+09 -1.190e+10 2.492e+09 -1.402e+10 1.017e+10 -1.769e+10 2.132e+10 -2.237e+10 3.670e+10 -2.732e+10 5.651e+10 -3.192e+10 8.076e+10 -3.568e+10 1.093e+11 -3.818e+10 1.418e+11 -3.910e+10 1.780e+11 -3.814e+10 2.174e+11 -3.509e+10 2.595e+11 -2.978e+10 3.038e+11 -2.212e+10 3.497e+11 -1.203e+10 3.965e+11 4.647e+08 4.437e+11 1.531e+10 4.906e+11 3.242e+10 5.365e+11 5.160e+10 5.809e+11 7.268e+10 6.231e+11 9.546e+10 6.625e+11 1.196e+11 6.988e+11 1.449e+11 7.314e+11 1.710e+11 7.598e+11 1.975e+11 7.839e+11 2.242e+11 8.032e+11 2.508e+11 8.177e+11 2.768e+11 8.271e+11 3.019e+11 8.316e+11 3.260e+11 8.310e+11 3.485e+11 8.256e+11 3.694e+11 8.155e+11 3.884e+11 8.009e+11 4.053e+11 7.823e+11 4.200e+11 7.597e+11 4.324e+11 7.337e+11 4.422e+11 7.045e+11 4.494e+11 6.726e+11 4.540e+11 6.383e+11 4.560e+11 6.023e+11 4.555e+11 5.648e+11 4.524e+11 5.264e+11 4.470e+11 4.874e+11 4.393e+11 4.482e+11 4.295e+11 4.093e+11 4.177e+11 3.711e+11 4.042e+11 3.336e+11 3.892e+11 2.975e+11 3.728e+11 2.627e+11 3.553e+11 2.297e+11 3.369e+11 1.985e+11 3.178e+11 1.693e+11 2.982e+11 1.422e+11 2.784e+11 1.173e+11 2.585e+11 9.453e+10 2.388e+11 7.399e+10 2.194e+11 5.561e+10 2.004e+11 3.934e+10 1.821e+11 2.509e+10 1.644e+11 1.276e+10 1.477e+11 2.221e+09 1.318e+11 -6.668e+09 1.169e+11 -1.405e+10 1.030e+11 -2.009e+10 9.022e+10 -2.494e+10 7.843e+10 -2.877e+10 6.765e+10 -3.173e+10 5.786e+10 -3.398e+10 4.898e+10 -3.565e+10 4.094e+10 -3.687e+10 3.367e+10 -3.774e+10 2.707e+10 -3.836e+10 2.101e+10 -3.879e+10 1.542e+10 -3.908e+10 1.018e+10 -3.926e+10 5.198e+09 -3.933e+10 3.820e+08 -3.930e+10 -4.347e+09 -3.915e+10 -9.059e+09 -3.885e+10 -1.380e+10 -3.836e+10 -1.861e+10 -3.766e+10 -2.352e+10 -3.672e+10 -2.855e+10 -3.550e+10 -3.371e+10 -3.396e+10 -3.901e+10 -3.208e+10 -4.443e+10 -2.983e+10 -4.997e+10 -2.718e+10 -5.560e+10 -2.411e+10 -6.131e+10 -2.061e+10 -6.707e+10 -1.667e+10 -7.284e+10 -1.227e+10 -7.859e+10 -7.426e+09 -8.428e+10 -2.132e+09 -8.987e+10 0.005 -52.880 -51.869 -50.859 -49.849 -48.838 -47.828 -46.861 -45.993 -45.215 -44.521 -43.906 -43.364 -42.893 -42.489 -42.149 -41.873 -41.658 -41.505 -41.411 -41.378 -41.406 -41.495 -41.647 -41.863 -42.147 -42.500 -42.927 -43.431 -44.019 -44.696 -45.472 -46.357 -47.364 -48.507 -49.806 -51.287 -52.985 -54.945 -57.228 -59.919 -63.128 -66.941 -71.103 -74.208 -74.430 -72.249 -68.969 -65.306 -61.794 -58.654 -55.905 -53.502 -51.390 -49.523 -47.862 -46.378 -45.047 -43.850 -42.773 -41.804 -40.932 -40.150 -39.451 -38.830 -38.283 -37.806 -37.396 -37.051 -36.769 -36.549 -36.390 -36.292 -36.254 -36.279 -36.366 -36.516 -36.731 -37.014 -37.366 -37.792 -38.295 -38.881 -39.553 -40.320 -41.189 -42.167 -43.265 -44.490 -45.851 -47.351 -48.981 -50.710 -52.462 -54.096 -55.400 -56.147 -56.182 -55.479 -54.145 -52.373 -50.382 -48.344 -46.366 -44.500 -42.768 -41.171 -39.706 -38.364 -37.136 -36.014 -34.990 -34.057 -33.210 -32.442 -31.751 -31.132 -30.584 -30.104 -29.688 -29.337 -29.049 -28.824 -28.662 -28.563 -28.529 -28.561 -28.663 -28.837 -29.088 -29.420 -29.839 -30.354 -30.973 -31.710 -32.580 -33.603 -34.806 -36.227 -37.917 -39.952 -42.453 -45.614 -49.772 -55.273 -59.469 -59.285 -59.053 -62.573 -59.360 -51.330 -45.015 -40.445 -36.816 -33.781 -31.162 -28.852 -26.783 -24.910 -23.200 -21.628 -20.172 -18.818 -17.555 -16.372 -15.262 -14.218 -13.234 -12.305 -11.428 -10.599 -9.814 -9.072 -8.369 -7.703 -7.074 -6.478 -5.915 -5.383 -4.880 -4.407 -3.962 -3.543 -3.151 -2.784 -2.443 -2.125 -1.831 -1.560 -1.312 -1.086 -0.882 -0.700 -0.540 -0.400 -0.282 -0.184 -0.108 -0.051 -0.015 0.000 -0.005 -0.029 -0.073 -0.138 -0.224 -0.330 -0.457 -0.605 -0.774 -0.964 -1.176 -1.410 -1.666 -1.945 -2.247 -2.573 -2.922 -3.296 -3.696 -4.121 -4.574 -5.054 -5.562 -6.100 -6.669 -7.270 -7.904 -8.574 -9.280 -10.026 -10.813 -11.643 -12.520 -13.448 -14.429 -15.469 -16.573 -17.747 -18.998 -20.336 -21.771 -23.317 -24.990 -26.815 -28.820 -31.041 -33.531 -36.360 -39.617 -43.362 -47.349 -50.380 -51.088 -50.547 -50.138 -49.895 -49.241 -47.724 -45.552 -43.245 -41.112 -39.242 -37.630 -36.249 -35.068 -34.059 -33.199 -32.472 -31.863 -31.360 -30.954 -30.637 -30.403 -30.248 -30.167 -30.158 -30.217 -30.344 -30.538 -30.796 -31.119 -31.509 -31.967 -32.493 -33.091 -33.764 -34.516 -35.351 -36.274 -37.292 -38.413 -39.647 -41.004 -42.499 -44.148 -45.969 -47.980 -50.197 -52.624 -55.231 -57.904 -60.372 -62.143 -62.655 -61.731 -59.789 -57.440 -55.086 -52.899 -50.931 -49.182 -47.635 -46.272 -45.071 -44.015 -43.090 -42.283 -41.584 -40.984 -40.477 -40.055 -39.716 -39.454 -39.267 -39.152 -39.108 -39.134 -39.229 -39.395 -39.632 -39.940 -40.322 -40.780 -41.318 -41.941 -42.653 -43.464 -44.381 -45.415 -46.582 -47.897 -49.385 -51.071 -52.988 -55.166 -57.610 -60.223 -62.650 -64.294 -64.921 -65.056 -65.432 -66.599 -69.215 -74.152 -73.368 -67.243 -61.962 -58.268 -55.435 -53.139 -51.218 -49.578 -48.159 -46.920 -45.832 -44.875 -44.031 -43.289 -42.639 -42.072 -41.585 -41.169 -40.821 -40.537 -40.315 -40.152 -40.046 -39.996 -40.001 -40.061 -40.175 -40.343 -40.565 -40.842 -41.175 -41.566 -42.015 -42.526 -43.101 -43.743 -44.457 -45.246 -46.117 -47.076 -48.133 -49.232 -50.330 -51.429 -52.528 -53.627 0.03 -18.79 -18.419 -18.0517 -17.6881 -17.3282 -16.9719 -16.6194 -16.2706 -15.9255 -15.5841 -15.2464 -14.9123 -14.582 -14.2554 -13.9325 -13.6133 -13.2977 -12.9859 -12.6778 -12.3734 -12.0726 -11.7756 -11.4823 -11.1926 -10.9067 -10.6245 -10.3459 -10.0711 -9.8 -9.5325 -9.2688 -9.0088 -8.7524 -8.4998 -8.2509 -8.0056 -7.7641 -7.5263 -7.2921 -7.0617 -6.8349 -6.6119 -6.3925 -6.1769 -5.9649 -5.7567 -5.5522 -5.3513 -5.1542 -4.9607 -4.771 -4.5849 -4.4026 -4.2239 -4.049 -3.8777 -3.7101 -3.5463 -3.3861 -3.2297 -3.0769 -2.9279 -2.7825 -2.6408 -2.5029 -2.3686 -2.2381 -2.1112 -1.988 -1.8686 -1.7528 -1.6407 -1.5324 -1.4277 -1.3267 -1.2295 -1.1359 -1.046 -0.95986 -0.87739 -0.79861 -0.72354 -0.65217 -0.58449 -0.52052 -0.46024 -0.40366 -0.35078 -0.3016 -0.25613 -0.21435 -0.17626 -0.14188 -0.1112 -0.084216 -0.060932 -0.041347 -0.025462 -0.013275 -0.0047879 0 0.0010887 -0.0015218 -0.0078316 -0.017841 -0.031549 -0.048956 -0.070063 -0.094869 -0.12337 -0.15558 -0.19148 -0.23109 -0.27439 -0.32139 -0.37209 -0.42649 -0.48459 -0.54639 -0.61188 -0.68108 -0.75398 -0.83057 -0.91087 -0.99486 -1.0826 -1.1739 -1.269 -1.3678 -1.4703 -1.5765 -1.6864 -1.8 -1.9173 -2.0383 -2.1629 -2.2913 -2.4234 -2.5592 -2.6987 -2.8419 -2.9887 -3.1393 -3.2936 -3.4516 -3.6133 -3.7786 -3.9477 -4.1205 -4.297 -4.4771 -4.661 -4.8486 -5.0398 -5.2348 -5.4335 -5.6359 -5.8419 -6.0517 -6.2652 -6.4823 -6.7032 -6.9278 -7.156 -7.388 -7.6236 -7.863 -8.1061 -8.3528 -8.6033 -8.8574 -9.1153 -9.3769 -9.6421 -9.9111 -10.1837 -10.4601 -10.7401 -11.0239 -11.3113 -11.6025 -11.8973 -12.1959 -12.4981 -12.8041 -13.1137 -13.4271 -13.7441 -14.0649 -14.3893 -14.7175 -15.0493 -15.3848 -15.7241 -16.067 -16.4137 -16.764 -17.118 -17.4758 -17.8372 -18.2024 1.0 52734.43872 IW3 HH 36.06 39.6 0.050 -9.888e+09 9.002e+09 -1.189e+10 1.061e+10 -1.413e+10 1.239e+10 -1.660e+10 1.433e+10 -1.931e+10 1.645e+10 -2.224e+10 1.874e+10 -2.539e+10 2.118e+10 -2.875e+10 2.377e+10 -3.230e+10 2.650e+10 -3.601e+10 2.936e+10 -3.987e+10 3.233e+10 -4.384e+10 3.538e+10 -4.790e+10 3.850e+10 -5.201e+10 4.166e+10 -5.612e+10 4.484e+10 -6.021e+10 4.801e+10 -6.424e+10 5.113e+10 -6.815e+10 5.418e+10 -7.192e+10 5.713e+10 -7.550e+10 5.996e+10 -7.884e+10 6.261e+10 -8.191e+10 6.509e+10 -8.469e+10 6.735e+10 -8.712e+10 6.936e+10 -8.919e+10 7.110e+10 -9.087e+10 7.255e+10 -9.214e+10 7.370e+10 -9.297e+10 7.451e+10 -9.336e+10 7.499e+10 -9.331e+10 7.512e+10 -9.280e+10 7.489e+10 -9.185e+10 7.431e+10 -9.046e+10 7.337e+10 -8.864e+10 7.209e+10 -8.642e+10 7.047e+10 -8.382e+10 6.854e+10 -8.087e+10 6.630e+10 -7.759e+10 6.377e+10 -7.403e+10 6.100e+10 -7.022e+10 5.799e+10 -6.621e+10 5.479e+10 -6.204e+10 5.143e+10 -5.775e+10 4.794e+10 -5.338e+10 4.437e+10 -4.899e+10 4.073e+10 -4.461e+10 3.709e+10 -4.029e+10 3.346e+10 -3.606e+10 2.990e+10 -3.197e+10 2.643e+10 -2.805e+10 2.309e+10 -2.433e+10 1.991e+10 -2.084e+10 1.691e+10 -1.760e+10 1.413e+10 -1.462e+10 1.158e+10 -1.193e+10 9.271e+09 -9.529e+09 7.223e+09 -7.419e+09 5.440e+09 -5.604e+09 3.925e+09 -4.075e+09 2.675e+09 -2.822e+09 1.681e+09 -1.833e+09 9.336e+08 -1.090e+09 4.129e+08 -5.756e+08 9.363e+07 -2.686e+08 -6.852e+07 -1.272e+08 -1.721e+08 -3.524e+07 -3.539e+08 1.128e+08 -6.511e+08 3.353e+08 -1.038e+09 6.177e+08 -1.484e+09 9.359e+08 -1.958e+09 1.268e+09 -2.435e+09 1.592e+09 -2.890e+09 1.889e+09 -3.301e+09 2.144e+09 -3.650e+09 2.344e+09 -3.923e+09 2.479e+09 -4.107e+09 2.544e+09 -4.197e+09 2.537e+09 -4.188e+09 2.459e+09 -4.082e+09 2.314e+09 -3.884e+09 2.111e+09 -3.602e+09 1.861e+09 -3.249e+09 1.577e+09 -2.841e+09 1.272e+09 -2.394e+09 9.648e+08 -1.931e+09 6.717e+08 -1.472e+09 4.102e+08 -1.040e+09 1.976e+08 -6.608e+08 4.836e+07 -3.573e+08 -3.364e+07 -1.533e+08 -9.490e+07 -4.736e+07 -2.340e+08 6.010e+07 -4.992e+08 2.785e+08 -8.986e+08 6.578e+08 -1.434e+09 1.216e+09 -2.108e+09 1.965e+09 -2.917e+09 2.906e+09 -3.858e+09 4.042e+09 -4.923e+09 5.370e+09 -6.102e+09 6.879e+09 -7.382e+09 8.559e+09 -8.751e+09 1.040e+10 -1.019e+10 1.237e+10 -1.168e+10 1.445e+10 -1.320e+10 1.663e+10 -1.472e+10 1.886e+10 -1.623e+10 2.111e+10 -1.770e+10 2.337e+10 -1.910e+10 2.558e+10 -2.043e+10 2.772e+10 -2.165e+10 2.975e+10 -2.274e+10 3.165e+10 -2.369e+10 3.337e+10 -2.449e+10 3.490e+10 -2.512e+10 3.621e+10 -2.557e+10 3.727e+10 -2.583e+10 3.806e+10 -2.590e+10 3.858e+10 -2.579e+10 3.881e+10 -2.548e+10 3.876e+10 -2.500e+10 3.841e+10 -2.434e+10 3.777e+10 -2.353e+10 3.686e+10 -2.256e+10 3.569e+10 -2.147e+10 3.428e+10 -2.027e+10 3.266e+10 -1.897e+10 3.084e+10 -1.760e+10 2.887e+10 -1.619e+10 2.676e+10 -1.474e+10 2.457e+10 -1.329e+10 2.231e+10 -1.185e+10 2.003e+10 -1.044e+10 1.776e+10 -9.088e+09 1.553e+10 -7.798e+09 1.338e+10 -6.588e+09 1.133e+10 -5.470e+09 9.406e+09 -4.452e+09 7.633e+09 -3.541e+09 6.028e+09 -2.742e+09 4.607e+09 -2.053e+09 3.377e+09 -1.476e+09 2.346e+09 -1.006e+09 1.513e+09 -6.375e+08 8.744e+08 -3.635e+08 4.229e+08 -1.773e+08 1.456e+08 -7.624e+07 9.646e+06 -4.424e+07 -8.105e+07 -2.910e+07 -2.443e+08 1.048e+07 -5.097e+08 7.384e+07 -8.575e+08 1.514e+08 -1.264e+09 2.332e+08 -1.706e+09 3.098e+08 -2.161e+09 3.729e+08 -2.606e+09 4.159e+08 -3.023e+09 4.336e+08 -3.394e+09 4.228e+08 -3.704e+09 3.818e+08 -3.940e+09 3.109e+08 -4.096e+09 2.122e+08 -4.165e+09 8.890e+07 -4.147e+09 -5.407e+07 -4.044e+09 -2.107e+08 -3.863e+09 -3.748e+08 -3.613e+09 -5.397e+08 -3.307e+09 -6.992e+08 -2.960e+09 -8.492e+08 -2.588e+09 -9.877e+08 -2.210e+09 -1.117e+09 -1.841e+09 -1.247e+09 -1.495e+09 -1.391e+09 -1.177e+09 -1.571e+09 -8.815e+08 -1.813e+09 -5.909e+08 -2.137e+09 -2.754e+08 -2.558e+09 9.866e+07 -3.082e+09 5.640e+08 -3.711e+09 1.147e+09 -4.437e+09 1.864e+09 -5.255e+09 2.728e+09 -6.154e+09 3.742e+09 -7.123e+09 4.903e+09 -8.147e+09 6.206e+09 -9.214e+09 7.639e+09 -1.031e+10 9.183e+09 -1.141e+10 1.082e+10 -1.251e+10 1.253e+10 -1.358e+10 1.428e+10 -1.461e+10 1.605e+10 -1.559e+10 1.781e+10 -1.649e+10 1.953e+10 -1.730e+10 2.118e+10 -1.802e+10 2.273e+10 -1.862e+10 2.416e+10 -1.909e+10 2.544e+10 -1.944e+10 2.654e+10 -1.965e+10 2.745e+10 -1.971e+10 2.816e+10 -1.964e+10 2.864e+10 -1.943e+10 2.889e+10 -1.908e+10 2.891e+10 -1.861e+10 2.869e+10 -1.801e+10 2.825e+10 -1.730e+10 2.758e+10 -1.650e+10 2.670e+10 -1.560e+10 2.563e+10 -1.464e+10 2.439e+10 -1.362e+10 2.300e+10 -1.255e+10 2.148e+10 -1.146e+10 1.986e+10 -1.037e+10 1.816e+10 -9.274e+09 1.643e+10 -8.202e+09 1.468e+10 -7.164e+09 1.295e+10 -6.172e+09 1.125e+10 -5.237e+09 9.624e+09 -4.368e+09 8.083e+09 -3.573e+09 6.651e+09 -2.856e+09 5.343e+09 -2.223e+09 4.172e+09 -1.675e+09 3.149e+09 -1.212e+09 2.276e+09 -8.321e+08 1.555e+09 -5.314e+08 9.835e+08 -3.053e+08 5.548e+08 -1.477e+08 2.592e+08 -5.165e+07 8.397e+07 -9.252e+06 1.140e+07 1.105e+07 -3.156e+07 4.943e+07 -1.188e+08 1.148e+08 -2.565e+08 1.985e+08 -4.258e+08 2.921e+08 -6.083e+08 3.880e+08 -7.872e+08 4.793e+08 -9.475e+08 5.599e+08 -1.077e+09 6.253e+08 -1.166e+09 6.718e+08 -1.208e+09 6.971e+08 -1.200e+09 7.001e+08 -1.144e+09 6.812e+08 -1.043e+09 6.417e+08 -9.053e+08 5.844e+08 -7.415e+08 5.133e+08 -5.647e+08 4.338e+08 -3.898e+08 3.530e+08 -2.312e+08 2.817e+08 -1.001e+08 2.339e+08 5.212e+06 2.207e+08 1.123e+08 2.376e+08 2.687e+08 2.672e+08 5.171e+08 2.926e+08 8.841e+08 3.034e+08 1.384e+09 2.935e+08 2.026e+09 2.595e+08 2.812e+09 2.001e+08 3.743e+09 1.148e+08 4.810e+09 4.556e+06 6.007e+09 -1.288e+08 7.317e+09 -2.825e+08 8.722e+09 -4.534e+08 1.020e+10 -6.372e+08 1.173e+10 -8.297e+08 1.328e+10 -1.027e+09 1.482e+10 -1.223e+09 1.632e+10 -1.414e+09 1.775e+10 -1.595e+09 1.908e+10 -1.762e+09 2.027e+10 -1.912e+09 2.130e+10 -2.040e+09 2.214e+10 -2.145e+09 2.278e+10 -2.224e+09 2.319e+10 -2.277e+09 2.337e+10 -2.302e+09 2.331e+10 -2.300e+09 2.300e+10 -2.272e+09 2.246e+10 -2.219e+09 2.169e+10 -2.144e+09 2.071e+10 -2.048e+09 1.955e+10 -1.935e+09 1.822e+10 -1.808e+09 1.676e+10 -1.670e+09 1.521e+10 -1.524e+09 1.359e+10 -1.374e+09 1.194e+10 -1.222e+09 1.031e+10 -1.073e+09 8.722e+09 -9.274e+08 7.211e+09 -7.884e+08 5.806e+09 -6.578e+08 4.532e+09 -5.371e+08 3.409e+09 -4.272e+08 2.447e+09 -3.292e+08 1.656e+09 -2.432e+08 1.034e+09 -1.695e+08 5.742e+08 -1.083e+08 2.647e+08 -6.038e+07 8.590e+07 -3.108e+07 9.940e+06 -3.276e+07 -2.872e+07 -4.666e+07 -9.831e+07 -5.668e+07 -1.918e+08 -5.571e+07 -2.871e+08 -5.481e+07 -3.555e+08 -4.669e+07 -3.839e+08 -3.516e+07 -3.629e+08 -2.200e+07 -2.940e+08 -9.456e+06 -1.910e+08 -4.107e+05 -8.182e+07 2.229e+06 -7.358e+06 8.729e+06 3.483e+07 3.655e+07 2.344e+08 8.976e+07 7.037e+08 1.777e+08 1.557e+09 3.116e+08 2.920e+09 5.051e+08 4.941e+09 7.745e+08 7.779e+09 1.138e+09 1.160e+10 1.618e+09 1.658e+10 2.238e+09 2.291e+10 3.024e+09 3.075e+10 4.006e+09 4.029e+10 5.218e+09 5.170e+10 6.688e+09 6.511e+10 8.454e+09 8.066e+10 1.055e+10 9.846e+10 1.301e+10 1.186e+11 1.587e+10 1.410e+11 1.916e+10 1.658e+11 2.290e+10 1.928e+11 2.712e+10 2.220e+11 3.184e+10 2.533e+11 3.705e+10 2.863e+11 4.277e+10 3.209e+11 4.900e+10 3.566e+11 5.569e+10 3.932e+11 6.283e+10 4.302e+11 7.037e+10 4.671e+11 7.825e+10 5.034e+11 8.641e+10 5.387e+11 9.477e+10 5.723e+11 1.032e+11 6.037e+11 1.117e+11 6.323e+11 1.201e+11 6.578e+11 1.282e+11 6.795e+11 1.360e+11 6.969e+11 1.433e+11 7.096e+11 1.499e+11 7.171e+11 1.557e+11 7.193e+11 1.607e+11 7.158e+11 1.646e+11 7.067e+11 1.673e+11 6.919e+11 1.689e+11 6.715e+11 1.691e+11 6.458e+11 1.680e+11 6.151e+11 1.654e+11 5.798e+11 1.615e+11 5.406e+11 1.562e+11 4.981e+11 1.496e+11 4.531e+11 1.418e+11 4.063e+11 1.329e+11 3.586e+11 1.230e+11 3.110e+11 1.123e+11 2.643e+11 1.010e+11 2.195e+11 8.939e+10 1.773e+11 7.766e+10 1.387e+11 6.606e+10 1.042e+11 5.489e+10 7.436e+10 4.446e+10 4.964e+10 3.510e+10 3.013e+10 2.723e+10 1.565e+10 2.134e+10 5.492e+09 1.778e+10 -1.865e+09 1.644e+10 -8.553e+09 1.648e+10 -1.643e+10 1.688e+10 -2.625e+10 1.690e+10 -3.771e+10 1.622e+10 -4.991e+10 1.476e+10 -6.176e+10 1.261e+10 -7.206e+10 9.937e+09 -7.969e+10 6.981e+09 -8.364e+10 4.017e+09 -8.316e+10 1.325e+09 -7.787e+10 -8.410e+08 -6.785e+10 -2.273e+09 -5.378e+10 -2.839e+09 -3.718e+10 -2.528e+09 -2.042e+10 -1.504e+09 -7.057e+09 -8.165e+08 1.142e+08 -1.213e+09 1.127e+10 -1.211e+09 4.310e+10 1.246e+09 1.072e+11 7.935e+09 2.156e+11 2.112e+10 3.823e+11 4.366e+10 6.238e+11 7.908e+10 9.597e+11 1.363e+11 1.462e+12 2.135e+11 2.075e+12 3.199e+11 2.863e+12 4.624e+11 3.856e+12 6.492e+11 5.091e+12 8.896e+11 6.606e+12 1.195e+12 8.443e+12 1.574e+12 1.065e+13 2.044e+12 1.327e+13 2.616e+12 1.635e+13 3.307e+12 1.996e+13 4.134e+12 2.414e+13 5.115e+12 2.897e+13 6.269e+12 3.449e+13 7.620e+12 4.078e+13 9.186e+12 4.791e+13 1.099e+13 5.591e+13 1.306e+13 6.489e+13 1.543e+13 7.489e+13 1.810e+13 8.599e+13 2.112e+13 9.824e+13 2.451e+13 1.117e+14 2.830e+13 1.264e+14 3.250e+13 1.426e+14 3.718e+13 1.601e+14 4.233e+13 1.789e+14 4.801e+13 1.994e+14 5.424e+13 2.213e+14 6.104e+13 2.447e+14 6.844e+13 2.698e+14 7.644e+13 2.964e+14 8.507e+13 3.245e+14 9.435e+13 3.543e+14 1.043e+14 3.857e+14 1.149e+14 4.186e+14 1.262e+14 4.531e+14 1.381e+14 4.890e+14 1.508e+14 5.263e+14 1.641e+14 5.650e+14 1.782e+14 6.051e+14 1.928e+14 6.462e+14 2.080e+14 6.886e+14 2.240e+14 7.319e+14 2.405e+14 7.761e+14 2.575e+14 8.210e+14 2.751e+14 8.665e+14 2.931e+14 9.125e+14 3.116e+14 9.587e+14 3.304e+14 1.005e+15 3.495e+14 1.052e+15 3.689e+14 1.098e+15 3.885e+14 1.144e+15 4.082e+14 1.189e+15 4.279e+14 1.233e+15 4.477e+14 1.276e+15 4.673e+14 1.319e+15 4.867e+14 1.360e+15 5.059e+14 1.400e+15 5.247e+14 1.437e+15 5.431e+14 1.473e+15 5.609e+14 1.506e+15 5.782e+14 1.539e+15 5.948e+14 1.567e+15 6.106e+14 1.595e+15 6.255e+14 1.619e+15 6.397e+14 1.640e+15 6.531e+14 1.659e+15 6.654e+14 1.676e+15 6.766e+14 1.689e+15 6.867e+14 1.699e+15 6.957e+14 1.706e+15 7.033e+14 1.711e+15 7.096e+14 1.712e+15 7.147e+14 1.709e+15 7.184e+14 1.703e+15 7.207e+14 1.694e+15 7.217e+14 1.684e+15 7.212e+14 1.669e+15 7.194e+14 1.651e+15 7.162e+14 1.630e+15 7.117e+14 1.607e+15 7.057e+14 1.581e+15 6.985e+14 1.552e+15 6.901e+14 1.522e+15 6.803e+14 1.488e+15 6.694e+14 1.453e+15 6.574e+14 1.416e+15 6.443e+14 1.377e+15 6.303e+14 1.337e+15 6.152e+14 1.295e+15 5.993e+14 1.253e+15 5.827e+14 1.209e+15 5.652e+14 1.164e+15 5.472e+14 1.118e+15 5.288e+14 1.073e+15 5.098e+14 1.027e+15 4.904e+14 9.810e+14 4.708e+14 9.350e+14 4.509e+14 8.892e+14 4.309e+14 8.440e+14 4.110e+14 7.991e+14 3.909e+14 7.550e+14 3.710e+14 7.118e+14 3.514e+14 6.694e+14 3.320e+14 6.281e+14 3.128e+14 5.879e+14 2.941e+14 5.492e+14 2.758e+14 5.116e+14 2.580e+14 4.755e+14 2.407e+14 4.408e+14 2.240e+14 4.075e+14 2.078e+14 3.757e+14 1.923e+14 3.455e+14 1.775e+14 3.167e+14 1.632e+14 2.896e+14 1.497e+14 2.640e+14 1.369e+14 2.398e+14 1.247e+14 2.172e+14 1.133e+14 1.961e+14 1.026e+14 1.765e+14 9.257e+13 1.582e+14 8.322e+13 1.414e+14 7.453e+13 1.258e+14 6.648e+13 1.116e+14 5.906e+13 9.853e+13 5.225e+13 8.661e+13 4.601e+13 7.581e+13 4.034e+13 6.606e+13 3.520e+13 5.729e+13 3.054e+13 4.942e+13 2.637e+13 4.240e+13 2.264e+13 3.618e+13 1.931e+13 3.069e+13 1.638e+13 2.586e+13 1.378e+13 2.165e+13 1.152e+13 1.799e+13 9.559e+12 1.483e+13 7.861e+12 1.212e+13 6.404e+12 9.820e+12 5.170e+12 7.882e+12 4.129e+12 6.259e+12 3.257e+12 4.910e+12 2.536e+12 3.803e+12 1.946e+12 2.903e+12 1.468e+12 2.179e+12 1.087e+12 1.607e+12 7.873e+11 1.159e+12 5.749e+11 8.434e+11 3.937e+11 5.762e+11 2.597e+11 3.796e+11 1.633e+11 2.390e+11 9.662e+10 1.420e+11 5.251e+10 7.793e+10 2.516e+10 3.814e+10 9.808e+09 1.556e+10 2.542e+09 4.525e+09 2.498e+08 6.681e+08 -8.786e+08 -6.931e+08 -2.489e+09 -2.405e+09 -4.101e+09 -4.217e+09 -5.067e+09 -5.297e+09 -5.132e+09 -5.319e+09 -4.344e+09 -4.362e+09 -2.980e+09 -2.798e+09 -1.485e+09 -1.201e+09 -4.237e+08 -2.028e+08 2.553e+08 7.576e+08 1.854e+09 3.334e+09 5.612e+09 8.710e+09 1.209e+10 1.745e+10 2.173e+10 2.999e+10 3.487e+10 4.664e+10 5.175e+10 6.757e+10 7.244e+10 9.274e+10 9.696e+10 1.220e+11 1.252e+11 1.552e+11 1.568e+11 1.917e+11 1.916e+11 2.311e+11 2.291e+11 2.729e+11 2.687e+11 3.161e+11 3.099e+11 3.603e+11 3.522e+11 4.045e+11 3.947e+11 4.480e+11 4.370e+11 4.900e+11 4.783e+11 5.300e+11 5.180e+11 5.670e+11 5.556e+11 6.006e+11 5.906e+11 6.302e+11 6.222e+11 6.553e+11 6.502e+11 6.756e+11 6.741e+11 6.909e+11 6.936e+11 7.009e+11 7.084e+11 7.055e+11 7.184e+11 7.049e+11 7.236e+11 6.992e+11 7.239e+11 6.886e+11 7.196e+11 6.734e+11 7.108e+11 6.540e+11 6.976e+11 6.308e+11 6.804e+11 6.041e+11 6.596e+11 5.747e+11 6.355e+11 5.429e+11 6.084e+11 5.092e+11 5.790e+11 4.742e+11 5.475e+11 4.384e+11 5.145e+11 4.023e+11 0.005 -52.057 -51.014 -49.971 -48.927 -47.884 -46.944 -46.102 -45.352 -44.687 -44.101 -43.589 -43.147 -42.774 -42.465 -42.220 -42.038 -41.918 -41.860 -41.863 -41.929 -42.058 -42.253 -42.516 -42.848 -43.255 -43.739 -44.308 -44.967 -45.724 -46.591 -47.581 -48.709 -49.998 -51.477 -53.187 -55.185 -57.559 -60.459 -64.164 -69.370 -79.555 -83.474 -77.483 -72.855 -69.821 -66.672 -63.344 -60.158 -57.285 -54.750 -52.521 -50.552 -48.804 -47.245 -45.850 -44.596 -43.469 -42.454 -41.541 -40.721 -39.987 -39.333 -38.754 -38.247 -37.808 -37.435 -37.126 -36.879 -36.693 -36.569 -36.505 -36.502 -36.561 -36.684 -36.871 -37.126 -37.449 -37.846 -38.319 -38.875 -39.518 -40.256 -41.097 -42.052 -43.131 -44.350 -45.722 -47.266 -48.997 -50.926 -53.049 -55.341 -57.747 -60.222 -62.766 -65.004 -65.146 -62.048 -57.844 -54.116 -50.972 -48.293 -45.972 -43.936 -42.131 -40.520 -39.073 -37.770 -36.592 -35.527 -34.564 -33.694 -32.910 -32.207 -31.580 -31.026 -30.541 -30.124 -29.772 -29.486 -29.263 -29.105 -29.012 -28.985 -29.025 -29.136 -29.320 -29.581 -29.924 -30.355 -30.882 -31.515 -32.265 -33.148 -34.184 -35.399 -36.828 -38.523 -40.551 -43.016 -46.078 -49.997 -55.103 -61.019 -64.868 -66.643 -63.228 -53.848 -47.435 -42.666 -38.846 -35.647 -32.888 -30.459 -28.288 -26.325 -24.534 -22.888 -21.367 -19.954 -18.637 -17.404 -16.247 -15.160 -14.135 -13.169 -12.255 -11.391 -10.574 -9.799 -9.066 -8.371 -7.713 -7.089 -6.499 -5.940 -5.412 -4.913 -4.442 -3.999 -3.582 -3.191 -2.824 -2.483 -2.165 -1.870 -1.598 -1.349 -1.121 -0.915 -0.731 -0.568 -0.425 -0.304 -0.202 -0.122 -0.061 -0.020 -0.000 0.000 -0.020 -0.059 -0.119 -0.199 -0.299 -0.419 -0.561 -0.723 -0.906 -1.110 -1.337 -1.585 -1.855 -2.149 -2.465 -2.805 -3.170 -3.559 -3.975 -4.416 -4.885 -5.382 -5.909 -6.465 -7.054 -7.676 -8.333 -9.026 -9.758 -10.532 -11.348 -12.212 -13.126 -14.095 -15.123 -16.216 -17.380 -18.624 -19.959 -21.396 -22.952 -24.647 -26.511 -28.584 -30.924 -33.624 -36.847 -40.924 -46.742 -59.318 -57.168 -51.007 -48.063 -47.043 -46.997 -47.465 -47.827 -47.225 -45.456 -43.184 -40.973 -39.021 -37.346 -35.920 -34.707 -33.678 -32.804 -32.066 -31.448 -30.937 -30.524 -30.200 -29.959 -29.795 -29.706 -29.686 -29.736 -29.851 -30.032 -30.277 -30.586 -30.961 -31.402 -31.910 -32.488 -33.139 -33.866 -34.673 -35.567 -36.554 -37.641 -38.841 -40.164 -41.628 -43.251 -45.059 -47.082 -49.361 -51.945 -54.888 -58.227 -61.899 -65.474 -67.821 -67.790 -65.610 -62.469 -59.272 -56.374 -53.844 -51.658 -49.766 -48.126 -46.699 -45.455 -44.371 -43.427 -42.608 -41.902 -41.299 -40.791 -40.370 -40.034 -39.776 -39.593 -39.484 -39.446 -39.478 -39.580 -39.752 -39.995 -40.309 -40.696 -41.160 -41.703 -42.329 -43.046 -43.858 -44.775 -45.808 -46.969 -48.275 -49.746 -51.406 -53.283 -55.401 -57.768 -60.313 -62.793 -64.756 -65.908 -66.567 -67.434 -69.181 -72.206 -73.484 -69.561 -64.218 -60.222 -57.145 -54.658 -52.582 -50.812 -49.280 -47.942 -46.766 -45.728 -44.809 -43.998 -43.281 -42.652 -42.102 -41.627 -41.220 -40.879 -40.599 -40.379 -40.217 -40.109 -40.056 -40.056 -40.109 -40.213 -40.370 -40.579 -40.840 -41.155 -41.525 -41.950 -42.434 -42.978 -43.584 -44.257 -45.000 -45.819 -46.719 -47.707 -48.784 -49.862 -50.940 -52.017 0.03 -17.4928 -17.1479 -16.8065 -16.4685 -16.134 -15.8029 -15.4752 -15.1509 -14.8301 -14.5127 -14.1987 -13.8882 -13.5811 -13.2775 -12.9772 -12.6805 -12.3871 -12.0972 -11.8107 -11.5276 -11.248 -10.9718 -10.699 -10.4297 -10.1638 -9.9013 -9.6423 -9.3867 -9.1345 -8.8858 -8.6405 -8.3986 -8.1602 -7.9252 -7.6936 -7.4655 -7.2408 -7.0195 -6.8017 -6.5873 -6.3763 -6.1688 -5.9647 -5.764 -5.5667 -5.3729 -5.1826 -4.9956 -4.8121 -4.632 -4.4554 -4.2822 -4.1124 -3.946 -3.7831 -3.6237 -3.4676 -3.315 -3.1658 -3.0201 -2.8777 -2.7389 -2.6034 -2.4714 -2.3428 -2.2177 -2.0959 -1.9776 -1.8628 -1.7514 -1.6434 -1.5388 -1.4377 -1.34 -1.2458 -1.1549 -1.0675 -0.98359 -0.90306 -0.82597 -0.75231 -0.68208 -0.61529 -0.55193 -0.492 -0.4355 -0.38244 -0.33281 -0.28661 -0.24385 -0.20451 -0.16862 -0.13615 -0.10712 -0.081515 -0.059347 -0.040612 -0.02531 -0.01344 -0.0050038 0 0.001571 -0.00029082 -0.0055855 -0.014313 -0.026473 -0.042066 -0.061092 -0.083551 -0.10944 -0.13877 -0.17152 -0.20771 -0.24734 -0.29039 -0.33688 -0.3868 -0.44016 -0.49694 -0.55716 -0.62081 -0.6879 -0.75842 -0.83237 -0.90975 -0.99057 -1.0748 -1.1625 -1.2536 -1.3482 -1.4461 -1.5476 -1.6524 -1.7607 -1.8724 -1.9875 -2.1061 -2.2281 -2.3536 -2.4824 -2.6148 -2.7505 -2.8897 -3.0323 -3.1783 -3.3278 -3.4807 -3.637 -3.7968 -3.96 -4.1266 -4.2967 -4.4702 -4.6472 -4.8275 -5.0113 -5.1986 -5.3892 -5.5833 -5.7809 -5.9818 -6.1862 -6.394 -6.6053 -6.82 -7.0381 -7.2597 -7.4847 -7.7131 -7.945 -8.1803 -8.419 -8.6612 -8.9067 -9.1558 -9.4082 -9.6641 -9.9234 -10.1862 -10.4524 -10.722 -10.9951 -11.2715 -11.5515 -11.8348 -12.1216 -12.4118 -12.7055 -13.0026 -13.3031 -13.607 -13.9144 -14.2252 -14.5395 -14.8571 -15.1783 -15.5028 -15.8308 -16.1622 -16.497 -16.8353 1.0 59758.6889 IW3 HV 36.06 39.6 0.050 -4.551e+08 1.107e+10 -7.830e+08 1.332e+10 -1.185e+09 1.582e+10 -1.666e+09 1.859e+10 -2.230e+09 2.162e+10 -2.878e+09 2.491e+10 -3.613e+09 2.844e+10 -4.432e+09 3.220e+10 -5.333e+09 3.616e+10 -6.310e+09 4.031e+10 -7.359e+09 4.462e+10 -8.468e+09 4.905e+10 -9.629e+09 5.356e+10 -1.083e+10 5.813e+10 -1.206e+10 6.271e+10 -1.329e+10 6.725e+10 -1.453e+10 7.171e+10 -1.574e+10 7.605e+10 -1.692e+10 8.023e+10 -1.805e+10 8.420e+10 -1.911e+10 8.793e+10 -2.009e+10 9.136e+10 -2.098e+10 9.448e+10 -2.176e+10 9.723e+10 -2.243e+10 9.959e+10 -2.298e+10 1.015e+11 -2.341e+10 1.030e+11 -2.370e+10 1.041e+11 -2.386e+10 1.046e+11 -2.389e+10 1.047e+11 -2.378e+10 1.043e+11 -2.356e+10 1.034e+11 -2.321e+10 1.020e+11 -2.274e+10 1.001e+11 -2.217e+10 9.782e+10 -2.151e+10 9.506e+10 -2.075e+10 9.189e+10 -1.992e+10 8.834e+10 -1.902e+10 8.445e+10 -1.807e+10 8.025e+10 -1.707e+10 7.579e+10 -1.603e+10 7.112e+10 -1.497e+10 6.628e+10 -1.390e+10 6.133e+10 -1.282e+10 5.632e+10 -1.175e+10 5.129e+10 -1.070e+10 4.631e+10 -9.666e+09 4.142e+10 -8.665e+09 3.666e+10 -7.702e+09 3.209e+10 -6.783e+09 2.774e+10 -5.915e+09 2.366e+10 -5.102e+09 1.986e+10 -4.347e+09 1.638e+10 -3.654e+09 1.323e+10 -3.025e+09 1.043e+10 -2.459e+09 7.985e+09 -1.959e+09 5.897e+09 -1.522e+09 4.158e+09 -1.146e+09 2.755e+09 -8.300e+08 1.675e+09 -5.708e+08 8.936e+08 -3.688e+08 3.819e+08 -2.334e+08 9.692e+07 -1.873e+08 -5.566e+07 -2.213e+08 -2.388e+08 -2.800e+08 -5.382e+08 -3.376e+08 -9.466e+08 -3.897e+08 -1.436e+09 -4.384e+08 -1.972e+09 -4.866e+08 -2.526e+09 -5.376e+08 -3.069e+09 -5.934e+08 -3.577e+09 -6.557e+08 -4.028e+09 -7.251e+08 -4.405e+09 -8.010e+08 -4.693e+09 -8.823e+08 -4.883e+09 -9.668e+08 -4.970e+09 -1.052e+09 -4.951e+09 -1.134e+09 -4.829e+09 -1.209e+09 -4.611e+09 -1.274e+09 -4.308e+09 -1.325e+09 -3.931e+09 -1.360e+09 -3.498e+09 -1.376e+09 -3.026e+09 -1.371e+09 -2.537e+09 -1.349e+09 -2.050e+09 -1.311e+09 -1.586e+09 -1.268e+09 -1.161e+09 -1.233e+09 -7.837e+08 -1.225e+09 -4.527e+08 -1.267e+09 -1.460e+08 -1.377e+09 1.765e+08 -1.563e+09 5.634e+08 -1.819e+09 1.060e+09 -2.137e+09 1.699e+09 -2.504e+09 2.502e+09 -2.909e+09 3.479e+09 -3.343e+09 4.630e+09 -3.797e+09 5.952e+09 -4.264e+09 7.431e+09 -4.738e+09 9.056e+09 -5.210e+09 1.080e+10 -5.674e+09 1.265e+10 -6.123e+09 1.457e+10 -6.551e+09 1.653e+10 -6.951e+09 1.849e+10 -7.318e+09 2.044e+10 -7.645e+09 2.233e+10 -7.928e+09 2.414e+10 -8.161e+09 2.582e+10 -8.340e+09 2.736e+10 -8.461e+09 2.872e+10 -8.523e+09 2.989e+10 -8.523e+09 3.085e+10 -8.460e+09 3.157e+10 -8.335e+09 3.205e+10 -8.149e+09 3.228e+10 -7.906e+09 3.227e+10 -7.609e+09 3.201e+10 -7.262e+09 3.151e+10 -6.872e+09 3.078e+10 -6.446e+09 2.984e+10 -5.991e+09 2.870e+10 -5.515e+09 2.738e+10 -5.026e+09 2.591e+10 -4.532e+09 2.432e+10 -4.042e+09 2.262e+10 -3.564e+09 2.085e+10 -3.104e+09 1.902e+10 -2.669e+09 1.718e+10 -2.263e+09 1.535e+10 -1.892e+09 1.354e+10 -1.559e+09 1.179e+10 -1.264e+09 1.011e+10 -1.009e+09 8.523e+09 -7.932e+08 7.053e+09 -6.141e+08 5.707e+09 -4.694e+08 4.498e+09 -3.555e+08 3.435e+09 -2.678e+08 2.520e+09 -2.017e+08 1.757e+09 -1.522e+08 1.144e+09 -1.143e+08 6.742e+08 -8.344e+07 3.404e+08 -5.659e+07 1.318e+08 -3.905e+07 2.751e+07 -4.780e+07 -3.063e+07 -8.818e+07 -1.213e+08 -1.476e+08 -2.705e+08 -2.222e+08 -4.654e+08 -3.114e+08 -6.886e+08 -4.147e+08 -9.236e+08 -5.313e+08 -1.155e+09 -6.593e+08 -1.368e+09 -7.972e+08 -1.553e+09 -9.425e+08 -1.699e+09 -1.093e+09 -1.801e+09 -1.247e+09 -1.856e+09 -1.402e+09 -1.862e+09 -1.559e+09 -1.822e+09 -1.717e+09 -1.740e+09 -1.879e+09 -1.620e+09 -2.050e+09 -1.468e+09 -2.235e+09 -1.288e+09 -2.443e+09 -1.080e+09 -2.685e+09 -8.447e+08 -2.971e+09 -5.750e+08 -3.312e+09 -2.616e+08 -3.715e+09 1.076e+08 -4.188e+09 5.473e+08 -4.736e+09 1.072e+09 -5.357e+09 1.693e+09 -6.052e+09 2.423e+09 -6.817e+09 3.269e+09 -7.646e+09 4.234e+09 -8.532e+09 5.321e+09 -9.465e+09 6.527e+09 -1.044e+10 7.845e+09 -1.143e+10 9.269e+09 -1.244e+10 1.079e+10 -1.345e+10 1.238e+10 -1.444e+10 1.404e+10 -1.540e+10 1.574e+10 -1.632e+10 1.747e+10 -1.718e+10 1.921e+10 -1.797e+10 2.093e+10 -1.869e+10 2.260e+10 -1.930e+10 2.422e+10 -1.982e+10 2.575e+10 -2.023e+10 2.718e+10 -2.051e+10 2.848e+10 -2.068e+10 2.963e+10 -2.073e+10 3.062e+10 -2.065e+10 3.142e+10 -2.045e+10 3.203e+10 -2.013e+10 3.243e+10 -1.969e+10 3.261e+10 -1.915e+10 3.257e+10 -1.851e+10 3.230e+10 -1.778e+10 3.181e+10 -1.698e+10 3.109e+10 -1.610e+10 3.016e+10 -1.517e+10 2.904e+10 -1.419e+10 2.773e+10 -1.319e+10 2.625e+10 -1.216e+10 2.464e+10 -1.113e+10 2.291e+10 -1.010e+10 2.110e+10 -9.087e+09 1.923e+10 -8.101e+09 1.733e+10 -7.151e+09 1.544e+10 -6.243e+09 1.358e+10 -5.387e+09 1.177e+10 -4.588e+09 1.006e+10 -3.850e+09 8.445e+09 -3.177e+09 6.958e+09 -2.573e+09 5.611e+09 -2.037e+09 4.413e+09 -1.571e+09 3.371e+09 -1.173e+09 2.485e+09 -8.414e+08 1.753e+09 -5.725e+08 1.167e+09 -3.625e+08 7.189e+08 -2.064e+08 3.944e+08 -9.900e+07 1.791e+08 -3.430e+07 5.644e+07 -6.068e+06 7.471e+06 7.284e+06 -1.931e+07 3.214e+07 -7.035e+07 7.386e+07 -1.463e+08 1.264e+08 -2.328e+08 1.841e+08 -3.175e+08 2.419e+08 -3.905e+08 2.956e+08 -4.442e+08 3.417e+08 -4.738e+08 3.776e+08 -4.772e+08 4.018e+08 -4.547e+08 4.138e+08 -4.090e+08 4.144e+08 -3.449e+08 4.059e+08 -2.683e+08 3.923e+08 -1.854e+08 3.796e+08 -1.005e+08 3.756e+08 -1.317e+07 3.886e+08 8.467e+07 4.240e+08 2.097e+08 4.826e+08 3.834e+08 5.617e+08 6.272e+08 6.574e+08 9.602e+08 7.661e+08 1.398e+09 8.851e+08 1.952e+09 1.013e+09 2.635e+09 1.149e+09 3.450e+09 1.292e+09 4.402e+09 1.442e+09 5.493e+09 1.600e+09 6.717e+09 1.764e+09 8.066e+09 1.936e+09 9.531e+09 2.113e+09 1.109e+10 2.295e+09 1.273e+10 2.481e+09 1.442e+10 2.668e+09 1.614e+10 2.853e+09 1.785e+10 3.033e+09 1.952e+10 3.203e+09 2.112e+10 3.359e+09 2.259e+10 3.497e+09 2.392e+10 3.612e+09 2.507e+10 3.699e+09 2.599e+10 3.756e+09 2.668e+10 3.778e+09 2.709e+10 3.764e+09 2.723e+10 3.713e+09 2.707e+10 3.624e+09 2.662e+10 3.499e+09 2.588e+10 3.340e+09 2.487e+10 3.150e+09 2.361e+10 2.934e+09 2.213e+10 2.698e+09 2.047e+10 2.446e+09 1.867e+10 2.185e+09 1.676e+10 1.921e+09 1.480e+10 1.660e+09 1.284e+10 1.408e+09 1.091e+10 1.170e+09 9.061e+09 9.499e+08 7.333e+09 7.509e+08 5.754e+09 5.752e+08 4.351e+09 4.244e+08 3.143e+09 2.988e+08 2.140e+09 1.976e+08 1.343e+09 1.199e+08 7.481e+08 6.358e+07 3.414e+08 2.604e+07 1.029e+08 4.978e+06 7.908e+06 5.199e+06 -2.669e+07 4.069e+06 -1.274e+08 -3.018e+06 -2.759e+08 -1.332e+07 -4.397e+08 -2.405e+07 -5.890e+08 -2.971e+07 -6.998e+08 -3.257e+07 -7.504e+08 -3.244e+07 -7.285e+08 -2.752e+07 -6.357e+08 -1.862e+07 -4.840e+08 -7.875e+06 -2.991e+08 9.683e+05 -1.231e+08 3.289e+06 -1.074e+07 1.250e+07 4.886e+07 5.330e+07 3.224e+08 1.345e+08 9.490e+08 2.736e+08 2.064e+09 4.915e+08 3.816e+09 8.139e+08 6.376e+09 1.271e+09 9.932e+09 1.896e+09 1.467e+10 2.726e+09 2.081e+10 3.807e+09 2.856e+10 5.179e+09 3.812e+10 6.892e+09 4.971e+10 8.997e+09 6.353e+10 1.154e+10 7.972e+10 1.457e+10 9.846e+10 1.813e+10 1.199e+11 2.227e+10 1.440e+11 2.701e+10 1.708e+11 3.238e+10 2.004e+11 3.840e+10 2.326e+11 4.508e+10 2.673e+11 5.240e+10 3.043e+11 6.035e+10 3.431e+11 6.888e+10 3.835e+11 7.796e+10 4.251e+11 8.750e+10 4.673e+11 9.744e+10 5.097e+11 1.077e+11 5.515e+11 1.181e+11 5.922e+11 1.286e+11 6.311e+11 1.391e+11 6.676e+11 1.494e+11 7.010e+11 1.595e+11 7.307e+11 1.691e+11 7.563e+11 1.782e+11 7.770e+11 1.866e+11 7.924e+11 1.941e+11 8.021e+11 2.007e+11 8.057e+11 2.062e+11 8.032e+11 2.106e+11 7.943e+11 2.137e+11 7.792e+11 2.154e+11 7.579e+11 2.158e+11 7.308e+11 2.147e+11 6.982e+11 2.122e+11 6.607e+11 2.081e+11 6.187e+11 2.027e+11 5.732e+11 1.958e+11 5.247e+11 1.875e+11 4.742e+11 1.780e+11 4.226e+11 1.674e+11 3.707e+11 1.558e+11 3.196e+11 1.434e+11 2.700e+11 1.303e+11 2.230e+11 1.169e+11 1.793e+11 1.034e+11 1.396e+11 9.016e+10 1.045e+11 7.744e+10 7.439e+10 6.572e+10 4.949e+10 5.544e+10 2.962e+10 4.710e+10 1.424e+10 4.112e+10 2.224e+09 3.759e+10 -8.006e+09 3.615e+10 -1.812e+10 3.598e+10 -2.928e+10 3.621e+10 -4.187e+10 3.612e+10 -5.553e+10 3.528e+10 -6.937e+10 3.348e+10 -8.231e+10 3.067e+10 -9.311e+10 2.698e+10 -1.006e+11 2.260e+10 -1.037e+11 1.780e+10 -1.017e+11 1.293e+10 -9.424e+10 8.335e+09 -8.142e+10 4.356e+09 -6.414e+10 1.327e+09 -4.414e+10 -4.866e+08 -2.420e+10 -9.217e+08 -8.394e+09 -9.542e+08 3.527e+07 -2.615e+09 1.282e+10 -5.966e+09 4.928e+10 -9.751e+09 1.226e+11 -1.307e+10 2.464e+11 -1.467e+10 4.364e+11 -1.291e+10 7.111e+11 -5.729e+09 1.092e+12 9.418e+09 1.598e+12 3.560e+10 2.265e+12 7.651e+10 3.121e+12 1.365e+11 4.200e+12 2.203e+11 5.537e+12 3.339e+11 7.176e+12 4.834e+11 9.161e+12 6.761e+11 1.154e+13 9.200e+11 1.436e+13 1.224e+12 1.768e+13 1.597e+12 2.155e+13 2.050e+12 2.604e+13 2.596e+12 3.121e+13 3.244e+12 3.711e+13 4.011e+12 4.383e+13 4.907e+12 5.143e+13 5.949e+12 5.997e+13 7.154e+12 6.954e+13 8.536e+12 8.019e+13 1.011e+13 9.200e+13 1.191e+13 1.050e+14 1.392e+13 1.194e+14 1.620e+13 1.350e+14 1.873e+13 1.522e+14 2.155e+13 1.709e+14 2.470e+13 1.910e+14 2.818e+13 2.127e+14 3.203e+13 2.360e+14 3.625e+13 2.611e+14 4.086e+13 2.878e+14 4.586e+13 3.162e+14 5.127e+13 3.463e+14 5.711e+13 3.783e+14 6.338e+13 4.118e+14 7.008e+13 4.471e+14 7.723e+13 4.841e+14 8.482e+13 5.227e+14 9.284e+13 5.628e+14 1.013e+14 6.045e+14 1.102e+14 6.475e+14 1.195e+14 6.920e+14 1.292e+14 7.376e+14 1.393e+14 7.843e+14 1.498e+14 8.320e+14 1.606e+14 8.805e+14 1.716e+14 9.297e+14 1.829e+14 9.794e+14 1.945e+14 1.030e+15 2.063e+14 1.080e+15 2.183e+14 1.130e+15 2.304e+14 1.180e+15 2.426e+14 1.230e+15 2.548e+14 1.279e+15 2.670e+14 1.327e+15 2.792e+14 1.374e+15 2.913e+14 1.420e+15 3.033e+14 1.465e+15 3.150e+14 1.508e+15 3.266e+14 1.549e+15 3.379e+14 1.588e+15 3.489e+14 1.625e+15 3.594e+14 1.660e+15 3.696e+14 1.692e+15 3.793e+14 1.722e+15 3.885e+14 1.749e+15 3.973e+14 1.773e+15 4.056e+14 1.795e+15 4.133e+14 1.814e+15 4.203e+14 1.830e+15 4.267e+14 1.842e+15 4.323e+14 1.851e+15 4.373e+14 1.857e+15 4.414e+14 1.859e+15 4.448e+14 1.858e+15 4.473e+14 1.854e+15 4.490e+14 1.846e+15 4.499e+14 1.835e+15 4.499e+14 1.821e+15 4.490e+14 1.803e+15 4.472e+14 1.784e+15 4.447e+14 1.760e+15 4.412e+14 1.733e+15 4.369e+14 1.704e+15 4.317e+14 1.672e+15 4.258e+14 1.637e+15 4.191e+14 1.601e+15 4.116e+14 1.562e+15 4.035e+14 1.521e+15 3.946e+14 1.478e+15 3.851e+14 1.433e+15 3.751e+14 1.387e+15 3.645e+14 1.340e+15 3.536e+14 1.292e+15 3.422e+14 1.243e+15 3.304e+14 1.194e+15 3.183e+14 1.144e+15 3.060e+14 1.094e+15 2.935e+14 1.044e+15 2.808e+14 9.939e+14 2.681e+14 9.442e+14 2.554e+14 8.950e+14 2.428e+14 8.464e+14 2.302e+14 7.987e+14 2.177e+14 7.520e+14 2.054e+14 7.063e+14 1.934e+14 6.617e+14 1.816e+14 6.186e+14 1.701e+14 5.768e+14 1.589e+14 5.366e+14 1.481e+14 4.978e+14 1.377e+14 4.607e+14 1.276e+14 4.251e+14 1.179e+14 3.913e+14 1.087e+14 3.592e+14 9.991e+13 3.286e+14 9.155e+13 2.999e+14 8.364e+13 2.728e+14 7.616e+13 2.474e+14 6.912e+13 2.236e+14 6.253e+13 2.015e+14 5.636e+13 1.808e+14 5.061e+13 1.618e+14 4.528e+13 1.442e+14 4.034e+13 1.280e+14 3.579e+13 1.132e+14 3.161e+13 9.970e+13 2.779e+13 8.740e+13 2.432e+13 7.629e+13 2.117e+13 6.626e+13 1.832e+13 5.725e+13 1.578e+13 4.922e+13 1.350e+13 4.207e+13 1.148e+13 3.573e+13 9.691e+12 3.017e+13 8.123e+12 2.530e+13 6.755e+12 2.106e+13 5.570e+12 1.739e+13 4.552e+12 1.425e+13 3.684e+12 1.156e+13 2.950e+12 9.292e+12 2.335e+12 7.391e+12 1.825e+12 5.808e+12 1.406e+12 4.506e+12 1.066e+12 3.445e+12 7.937e+11 2.590e+12 5.790e+11 1.911e+12 4.124e+11 1.380e+12 2.843e+11 9.683e+11 1.903e+11 6.618e+11 1.222e+11 4.361e+11 7.445e+10 2.744e+11 4.232e+10 1.628e+11 2.183e+10 8.913e+10 9.708e+09 4.340e+10 3.330e+09 1.752e+10 6.268e+08 4.974e+09 -2.644e+07 6.857e+08 -4.789e+08 -9.525e+08 -1.096e+09 -3.091e+09 -1.518e+09 -5.325e+09 -1.531e+09 -6.680e+09 -1.135e+09 -6.775e+09 -4.767e+08 -5.703e+09 2.101e+08 -3.905e+09 7.062e+08 -2.048e+09 1.178e+09 -6.722e+08 2.468e+09 8.332e+08 5.345e+09 4.078e+09 1.014e+10 1.043e+10 1.708e+10 2.071e+10 2.636e+10 3.548e+10 3.814e+10 5.513e+10 5.250e+10 7.989e+10 6.947e+10 1.097e+11 8.898e+10 1.446e+11 1.109e+11 1.841e+11 1.351e+11 2.278e+11 1.612e+11 2.752e+11 1.891e+11 3.255e+11 2.182e+11 3.779e+11 2.482e+11 4.317e+11 2.788e+11 4.859e+11 3.094e+11 5.395e+11 3.396e+11 5.919e+11 3.690e+11 6.421e+11 3.970e+11 6.892e+11 4.235e+11 7.326e+11 4.479e+11 7.715e+11 4.697e+11 8.055e+11 4.889e+11 8.340e+11 5.049e+11 8.567e+11 5.177e+11 8.733e+11 5.269e+11 8.835e+11 5.327e+11 8.874e+11 5.348e+11 8.851e+11 5.334e+11 8.768e+11 5.285e+11 8.627e+11 5.203e+11 8.432e+11 5.090e+11 8.187e+11 4.948e+11 7.896e+11 4.779e+11 7.565e+11 4.587e+11 7.201e+11 4.375e+11 6.807e+11 4.147e+11 6.392e+11 3.906e+11 5.960e+11 3.655e+11 5.519e+11 0.005 -51.246 -50.206 -49.166 -48.127 -47.087 -46.147 -45.305 -44.552 -43.881 -43.287 -42.765 -42.312 -41.923 -41.598 -41.335 -41.131 -40.986 -40.901 -40.874 -40.906 -40.997 -41.150 -41.366 -41.648 -41.997 -42.418 -42.916 -43.496 -44.165 -44.932 -45.808 -46.809 -47.952 -49.265 -50.782 -52.556 -54.668 -57.260 -60.602 -65.382 -75.083 -78.502 -72.150 -67.695 -65.966 -65.556 -66.105 -67.233 -67.554 -65.538 -62.098 -58.728 -55.860 -53.448 -51.398 -49.631 -48.094 -46.745 -45.558 -44.509 -43.582 -42.764 -42.046 -41.420 -40.879 -40.418 -40.034 -39.724 -39.486 -39.318 -39.220 -39.191 -39.233 -39.346 -39.532 -39.793 -40.132 -40.553 -41.061 -41.663 -42.365 -43.176 -44.107 -45.170 -46.379 -47.750 -49.297 -51.028 -52.933 -54.962 -56.996 -58.868 -60.475 -61.942 -63.569 -65.178 -64.985 -61.757 -57.542 -53.860 -50.787 -48.188 -45.947 -43.987 -42.253 -40.708 -39.323 -38.075 -36.950 -35.934 -35.017 -34.190 -33.448 -32.786 -32.198 -31.682 -31.235 -30.855 -30.542 -30.294 -30.111 -29.994 -29.944 -29.963 -30.052 -30.215 -30.455 -30.779 -31.191 -31.700 -32.314 -33.048 -33.915 -34.937 -36.139 -37.558 -39.242 -41.263 -43.717 -46.732 -50.403 -54.343 -56.815 -57.207 -58.336 -61.303 -59.198 -50.708 -44.901 -40.565 -37.067 -34.115 -31.552 -29.282 -27.242 -25.389 -23.692 -22.127 -20.675 -19.324 -18.061 -16.876 -15.763 -14.714 -13.725 -12.790 -11.906 -11.069 -10.276 -9.524 -8.811 -8.135 -7.495 -6.888 -6.313 -5.768 -5.254 -4.767 -4.308 -3.876 -3.469 -3.088 -2.731 -2.398 -2.088 -1.801 -1.536 -1.294 -1.073 -0.873 -0.694 -0.537 -0.399 -0.283 -0.186 -0.110 -0.053 -0.017 0.000 -0.003 -0.027 -0.069 -0.132 -0.214 -0.317 -0.440 -0.583 -0.748 -0.933 -1.140 -1.368 -1.617 -1.889 -2.184 -2.502 -2.844 -3.209 -3.600 -4.016 -4.459 -4.928 -5.426 -5.953 -6.511 -7.100 -7.722 -8.379 -9.073 -9.805 -10.579 -11.396 -12.260 -13.174 -14.143 -15.171 -16.263 -17.428 -18.672 -20.007 -21.444 -23.001 -24.697 -26.562 -28.636 -30.979 -33.683 -36.912 -40.998 -46.829 -59.425 -57.307 -51.200 -48.350 -47.504 -47.797 -48.943 -50.424 -50.539 -48.235 -45.139 -42.361 -40.068 -38.183 -36.622 -35.318 -34.225 -33.306 -32.535 -31.893 -31.365 -30.940 -30.609 -30.364 -30.201 -30.113 -30.100 -30.156 -30.282 -30.475 -30.736 -31.064 -31.460 -31.925 -32.460 -33.070 -33.755 -34.522 -35.374 -36.317 -37.359 -38.507 -39.773 -41.168 -42.704 -44.397 -46.261 -48.306 -50.534 -52.924 -55.415 -57.895 -60.181 -61.907 -62.352 -61.024 -58.494 -55.686 -53.067 -50.746 -48.712 -46.930 -45.365 -43.987 -42.769 -41.693 -40.743 -39.904 -39.167 -38.523 -37.963 -37.484 -37.078 -36.743 -36.475 -36.271 -36.129 -36.046 -36.023 -36.058 -36.150 -36.301 -36.508 -36.774 -37.099 -37.485 -37.934 -38.447 -39.029 -39.682 -40.412 -41.224 -42.125 -43.124 -44.230 -45.459 -46.825 -48.351 -50.066 -52.010 -54.237 -56.830 -59.919 -63.722 -68.627 -74.992 -79.894 -79.986 -78.573 -76.375 -72.043 -67.318 -63.388 -60.209 -57.592 -55.397 -53.527 -51.915 -50.515 -49.292 -48.222 -47.283 -46.461 -45.744 -45.122 -44.587 -44.133 -43.754 -43.447 -43.207 -43.032 -42.920 -42.868 -42.876 -42.943 -43.069 -43.253 -43.495 -43.797 -44.160 -44.584 -45.073 -45.629 -46.255 -46.955 -47.735 -48.600 -49.558 -50.612 -51.665 -52.718 -53.772 0.03 -18.1939 -17.8356 -17.4807 -17.1295 -16.7818 -16.4377 -16.0971 -15.7601 -15.4267 -15.0968 -14.7705 -14.4478 -14.1286 -13.813 -13.5009 -13.1925 -12.8875 -12.5862 -12.2884 -11.9942 -11.7035 -11.4164 -11.1329 -10.8529 -10.5765 -10.3037 -10.0344 -9.7687 -9.5066 -9.248 -8.993 -8.7416 -8.4937 -8.2493 -8.0086 -7.7714 -7.5378 -7.3077 -7.0812 -6.8583 -6.6389 -6.4231 -6.2109 -6.0022 -5.7971 -5.5956 -5.3976 -5.2032 -5.0123 -4.825 -4.6413 -4.4611 -4.2846 -4.1115 -3.9421 -3.7762 -3.6138 -3.4551 -3.2999 -3.1482 -3.0001 -2.8556 -2.7147 -2.5773 -2.4435 -2.3132 -2.1865 -2.0634 -1.9438 -1.8279 -1.7154 -1.6066 -1.5013 -1.3995 -1.3013 -1.2067 -1.1157 -1.0282 -0.9443 -0.86395 -0.78716 -0.71394 -0.64428 -0.57819 -0.51566 -0.4567 -0.4013 -0.34947 -0.3012 -0.25649 -0.21535 -0.17778 -0.14377 -0.11332 -0.086438 -0.06312 -0.043367 -0.027178 -0.014554 -0.0054949 0 0.0019304 0.00029622 -0.0049025 -0.013666 -0.025993 -0.041886 -0.061343 -0.084364 -0.11095 -0.1411 -0.17482 -0.21209 -0.25294 -0.29735 -0.34532 -0.39686 -0.45196 -0.51063 -0.57286 -0.63865 -0.70801 -0.78094 -0.85743 -0.93748 -1.0211 -1.1083 -1.199 -1.2933 -1.3912 -1.4927 -1.5977 -1.7062 -1.8184 -1.9341 -2.0533 -2.1762 -2.3026 -2.4325 -2.566 -2.7031 -2.8438 -2.988 -3.1358 -3.2871 -3.442 -3.6005 -3.7625 -3.9281 -4.0973 -4.27 -4.4463 -4.6262 -4.8096 -4.9966 -5.1872 -5.3813 -5.579 -5.7802 -5.985 -6.1934 -6.4053 -6.6209 -6.8399 -7.0626 -7.2888 -7.5185 -7.7519 -7.9887 -8.2292 -8.4732 -8.7208 -8.972 -9.2267 -9.485 -9.7468 -10.0122 -10.2812 -10.5537 -10.8298 -11.1095 -11.3927 -11.6795 -11.9699 -12.2638 -12.5613 -12.8624 -13.167 -13.4752 -13.7869 -14.1022 -14.4211 -14.7436 -15.0696 -15.3991 -15.7323 -16.069 -16.4092 -16.7531 -17.1005 -17.4514 1.0 59758.6889 IW3 VV 36.06 39.6 0.050 8.687e+09 1.165e+10 1.005e+10 1.365e+10 1.151e+10 1.583e+10 1.306e+10 1.819e+10 1.469e+10 2.073e+10 1.639e+10 2.343e+10 1.815e+10 2.627e+10 1.995e+10 2.925e+10 2.176e+10 3.232e+10 2.358e+10 3.546e+10 2.539e+10 3.866e+10 2.717e+10 4.186e+10 2.889e+10 4.505e+10 3.055e+10 4.817e+10 3.212e+10 5.121e+10 3.359e+10 5.411e+10 3.495e+10 5.685e+10 3.618e+10 5.938e+10 3.727e+10 6.169e+10 3.822e+10 6.374e+10 3.900e+10 6.550e+10 3.963e+10 6.696e+10 4.008e+10 6.809e+10 4.036e+10 6.889e+10 4.046e+10 6.933e+10 4.038e+10 6.943e+10 4.011e+10 6.916e+10 3.967e+10 6.855e+10 3.904e+10 6.759e+10 3.824e+10 6.630e+10 3.727e+10 6.470e+10 3.613e+10 6.279e+10 3.483e+10 6.062e+10 3.338e+10 5.819e+10 3.180e+10 5.553e+10 3.009e+10 5.269e+10 2.828e+10 4.968e+10 2.637e+10 4.653e+10 2.440e+10 4.329e+10 2.237e+10 3.999e+10 2.031e+10 3.665e+10 1.825e+10 3.331e+10 1.621e+10 3.000e+10 1.420e+10 2.676e+10 1.226e+10 2.362e+10 1.041e+10 2.060e+10 8.656e+09 1.774e+10 7.033e+09 1.504e+10 5.553e+09 1.254e+10 4.229e+09 1.026e+10 3.071e+09 8.204e+09 2.088e+09 6.387e+09 1.282e+09 4.816e+09 6.499e+08 3.493e+09 1.849e+08 2.421e+09 -1.311e+08 1.591e+09 -3.306e+08 9.938e+08 -4.709e+08 6.007e+08 -6.341e+08 3.484e+08 -8.915e+08 1.379e+08 -1.263e+09 -1.165e+08 -1.734e+09 -4.530e+08 -2.280e+09 -8.746e+08 -2.875e+09 -1.366e+09 -3.498e+09 -1.909e+09 -4.130e+09 -2.479e+09 -4.749e+09 -3.052e+09 -5.339e+09 -3.608e+09 -5.885e+09 -4.125e+09 -6.373e+09 -4.584e+09 -6.791e+09 -4.971e+09 -7.133e+09 -5.273e+09 -7.389e+09 -5.481e+09 -7.556e+09 -5.589e+09 -7.630e+09 -5.596e+09 -7.613e+09 -5.502e+09 -7.504e+09 -5.311e+09 -7.308e+09 -5.031e+09 -7.031e+09 -4.672e+09 -6.678e+09 -4.246e+09 -6.260e+09 -3.766e+09 -5.787e+09 -3.250e+09 -5.271e+09 -2.713e+09 -4.725e+09 -2.173e+09 -4.164e+09 -1.647e+09 -3.605e+09 -1.151e+09 -3.064e+09 -6.975e+08 -2.558e+09 -2.980e+08 -2.105e+09 4.521e+07 -1.719e+09 3.398e+08 -1.412e+09 6.072e+08 -1.178e+09 8.850e+08 -9.971e+08 1.220e+09 -8.355e+08 1.655e+09 -6.546e+08 2.217e+09 -4.228e+08 2.921e+09 -1.188e+08 3.768e+09 2.687e+08 4.751e+09 7.442e+08 5.861e+09 1.305e+09 7.082e+09 1.945e+09 8.395e+09 2.654e+09 9.782e+09 3.419e+09 1.122e+10 4.224e+09 1.268e+10 5.053e+09 1.414e+10 5.888e+09 1.558e+10 6.711e+09 1.696e+10 7.506e+09 1.826e+10 8.253e+09 1.946e+10 8.939e+09 2.053e+10 9.549e+09 2.145e+10 1.007e+10 2.221e+10 1.050e+10 2.279e+10 1.082e+10 2.317e+10 1.104e+10 2.337e+10 1.114e+10 2.336e+10 1.114e+10 2.315e+10 1.103e+10 2.275e+10 1.082e+10 2.217e+10 1.052e+10 2.142e+10 1.013e+10 2.051e+10 9.664e+09 1.947e+10 9.131e+09 1.830e+10 8.542e+09 1.705e+10 7.910e+09 1.572e+10 7.245e+09 1.434e+10 6.557e+09 1.294e+10 5.861e+09 1.154e+10 5.164e+09 1.015e+10 4.479e+09 8.804e+09 3.815e+09 7.516e+09 3.182e+09 6.301e+09 2.588e+09 5.175e+09 2.042e+09 4.149e+09 1.550e+09 3.232e+09 1.119e+09 2.430e+09 7.528e+08 1.748e+09 4.563e+08 1.187e+09 2.311e+08 7.445e+08 7.704e+07 4.185e+08 -1.228e+07 2.030e+08 -6.210e+07 8.488e+07 -1.259e+08 2.128e+07 -2.491e+08 -5.332e+07 -4.366e+08 -1.743e+08 -6.784e+08 -3.408e+08 -9.646e+08 -5.414e+08 -1.285e+09 -7.624e+08 -1.628e+09 -9.894e+08 -1.984e+09 -1.209e+09 -2.341e+09 -1.408e+09 -2.687e+09 -1.576e+09 -3.014e+09 -1.702e+09 -3.311e+09 -1.780e+09 -3.571e+09 -1.805e+09 -3.788e+09 -1.773e+09 -3.958e+09 -1.685e+09 -4.080e+09 -1.542e+09 -4.155e+09 -1.349e+09 -4.186e+09 -1.111e+09 -4.178e+09 -8.350e+08 -4.141e+09 -5.262e+08 -4.083e+09 -1.899e+08 -4.016e+09 1.711e+08 -3.951e+09 5.582e+08 -3.900e+09 9.768e+08 -3.870e+09 1.436e+09 -3.867e+09 1.951e+09 -3.893e+09 2.538e+09 -3.944e+09 3.214e+09 -4.016e+09 3.994e+09 -4.101e+09 4.891e+09 -4.190e+09 5.913e+09 -4.274e+09 7.064e+09 -4.346e+09 8.342e+09 -4.398e+09 9.741e+09 -4.426e+09 1.125e+10 -4.425e+09 1.286e+10 -4.391e+09 1.455e+10 -4.322e+09 1.631e+10 -4.217e+09 1.810e+10 -4.072e+09 1.991e+10 -3.890e+09 2.172e+10 -3.671e+09 2.350e+10 -3.417e+09 2.523e+10 -3.130e+09 2.688e+10 -2.812e+09 2.843e+10 -2.467e+09 2.986e+10 -2.099e+09 3.116e+10 -1.712e+09 3.230e+10 -1.312e+09 3.326e+10 -9.046e+08 3.404e+10 -4.966e+08 3.461e+10 -9.496e+07 3.498e+10 2.938e+08 3.513e+10 6.625e+08 3.505e+10 1.004e+09 3.476e+10 1.312e+09 3.424e+10 1.580e+09 3.351e+10 1.804e+09 3.256e+10 1.980e+09 3.142e+10 2.104e+09 3.009e+10 2.176e+09 2.860e+10 2.196e+09 2.696e+10 2.166e+09 2.519e+10 2.089e+09 2.332e+10 1.970e+09 2.138e+10 1.816e+09 1.939e+10 1.633e+09 1.739e+10 1.429e+09 1.540e+10 1.214e+09 1.345e+10 9.948e+08 1.158e+10 7.806e+08 9.790e+09 5.787e+08 8.122e+09 3.957e+08 6.591e+09 2.366e+08 5.211e+09 1.054e+08 3.995e+09 4.178e+06 2.949e+09 -6.667e+07 2.076e+09 -1.083e+08 1.372e+09 -1.234e+08 8.323e+08 -1.167e+08 4.447e+08 -9.533e+07 1.947e+08 -7.359e+07 5.878e+07 -7.432e+07 -1.493e+07 -1.039e+08 -9.735e+07 -1.460e+08 -2.242e+08 -1.862e+08 -3.897e+08 -2.175e+08 -5.766e+08 -2.358e+08 -7.676e+08 -2.390e+08 -9.474e+08 -2.264e+08 -1.103e+09 -1.981e+08 -1.224e+09 -1.555e+08 -1.304e+09 -1.009e+08 -1.338e+09 -3.725e+07 -1.327e+09 3.199e+07 -1.273e+09 1.030e+08 -1.180e+09 1.721e+08 -1.057e+09 2.363e+08 -9.136e+08 2.936e+08 -7.598e+08 3.448e+08 -6.072e+08 3.947e+08 -4.649e+08 4.539e+08 -3.370e+08 5.387e+08 -2.181e+08 6.670e+08 -9.101e+07 8.537e+08 6.875e+07 1.109e+09 2.867e+08 1.437e+09 5.849e+08 1.843e+09 9.798e+08 2.328e+09 1.483e+09 2.895e+09 2.104e+09 3.544e+09 2.846e+09 4.273e+09 3.709e+09 5.081e+09 4.694e+09 5.963e+09 5.792e+09 6.912e+09 6.995e+09 7.919e+09 8.290e+09 8.973e+09 9.660e+09 1.006e+10 1.108e+10 1.116e+10 1.254e+10 1.226e+10 1.401e+10 1.334e+10 1.546e+10 1.437e+10 1.686e+10 1.533e+10 1.818e+10 1.619e+10 1.938e+10 1.694e+10 2.045e+10 1.754e+10 2.134e+10 1.799e+10 2.204e+10 1.827e+10 2.253e+10 1.835e+10 2.278e+10 1.825e+10 2.279e+10 1.795e+10 2.255e+10 1.746e+10 2.207e+10 1.679e+10 2.134e+10 1.595e+10 2.040e+10 1.496e+10 1.926e+10 1.386e+10 1.795e+10 1.265e+10 1.649e+10 1.139e+10 1.493e+10 1.009e+10 1.331e+10 8.782e+09 1.166e+10 7.505e+09 1.003e+10 6.281e+09 8.445e+09 5.135e+09 6.943e+09 4.089e+09 5.556e+09 3.156e+09 4.307e+09 2.347e+09 3.212e+09 1.668e+09 2.285e+09 1.118e+09 1.529e+09 6.925e+08 9.395e+08 3.831e+08 5.101e+08 1.763e+08 2.248e+08 5.641e+07 6.379e+07 6.293e+06 3.772e+06 -5.473e+06 -1.960e+07 -3.789e+07 -8.346e+07 -8.408e+07 -1.693e+08 -1.288e+08 -2.531e+08 -1.595e+08 -3.151e+08 -1.705e+08 -3.388e+08 -1.493e+08 -3.240e+08 -1.093e+08 -2.631e+08 -5.713e+07 -1.730e+08 -1.024e+07 -7.816e+07 1.414e+07 -1.499e+07 6.896e+07 3.123e+07 2.481e+08 2.083e+08 6.091e+08 6.209e+08 1.222e+09 1.369e+09 2.171e+09 2.571e+09 3.555e+09 4.361e+09 5.479e+09 6.884e+09 8.065e+09 1.030e+10 1.145e+10 1.479e+10 1.576e+10 2.053e+10 2.115e+10 2.771e+10 2.777e+10 3.652e+10 3.575e+10 4.714e+10 4.526e+10 5.974e+10 5.643e+10 7.451e+10 6.935e+10 9.154e+10 8.415e+10 1.110e+11 1.009e+11 1.329e+11 1.196e+11 1.573e+11 1.404e+11 1.841e+11 1.631e+11 2.134e+11 1.876e+11 2.449e+11 2.139e+11 2.785e+11 2.418e+11 3.139e+11 2.710e+11 3.507e+11 3.013e+11 3.887e+11 3.323e+11 4.272e+11 3.637e+11 4.659e+11 3.951e+11 5.042e+11 4.261e+11 5.414e+11 4.561e+11 5.771e+11 4.848e+11 6.104e+11 5.117e+11 6.410e+11 5.363e+11 6.682e+11 5.583e+11 6.913e+11 5.774e+11 7.101e+11 5.931e+11 7.239e+11 6.051e+11 7.324e+11 6.131e+11 7.354e+11 6.171e+11 7.326e+11 6.168e+11 7.241e+11 6.123e+11 7.097e+11 6.035e+11 6.897e+11 5.906e+11 6.643e+11 5.736e+11 6.340e+11 5.529e+11 5.991e+11 5.287e+11 5.602e+11 5.014e+11 5.181e+11 4.713e+11 4.733e+11 4.389e+11 4.268e+11 4.047e+11 3.792e+11 3.693e+11 3.315e+11 3.330e+11 2.845e+11 2.966e+11 2.390e+11 2.606e+11 1.959e+11 2.255e+11 1.557e+11 1.920e+11 1.192e+11 1.605e+11 8.687e+10 1.315e+11 5.909e+10 1.056e+11 3.602e+10 8.318e+10 1.762e+10 6.449e+10 3.482e+09 4.972e+10 -7.190e+09 3.872e+10 -1.563e+10 3.083e+10 -2.335e+10 2.495e+10 -3.171e+10 1.981e+10 -4.137e+10 1.444e+10 -5.221e+10 8.386e+09 -6.352e+10 1.632e+09 -7.425e+10 -5.511e+09 -8.327e+10 -1.252e+10 -8.946e+10 -1.878e+10 -9.185e+10 -2.366e+10 -8.975e+10 -2.660e+10 -8.280e+10 -2.718e+10 -7.119e+10 -2.521e+10 -5.572e+10 -2.088e+10 -3.800e+10 -1.480e+10 -2.060e+10 -8.378e+09 -7.003e+09 -4.590e+09 1.721e+09 -3.357e+09 1.614e+10 1.544e+09 5.264e+10 1.703e+10 1.238e+11 4.893e+10 2.421e+11 1.040e+11 4.224e+11 1.902e+11 6.819e+11 3.169e+11 1.040e+12 4.950e+11 1.521e+12 6.950e+11 2.027e+12 9.969e+11 2.787e+12 1.388e+12 3.745e+12 1.885e+12 4.934e+12 2.505e+12 6.389e+12 3.269e+12 8.151e+12 4.199e+12 1.026e+13 5.318e+12 1.277e+13 6.651e+12 1.572e+13 8.226e+12 1.916e+13 1.007e+13 2.316e+13 1.221e+13 2.775e+13 1.469e+13 3.302e+13 1.753e+13 3.900e+13 2.077e+13 4.578e+13 2.444e+13 5.340e+13 2.857e+13 6.194e+13 3.323e+13 7.147e+13 3.842e+13 8.205e+13 4.420e+13 9.373e+13 5.060e+13 1.066e+14 5.766e+13 1.207e+14 6.541e+13 1.361e+14 7.389e+13 1.529e+14 8.314e+13 1.711e+14 9.320e+13 1.908e+14 1.041e+14 2.119e+14 1.159e+14 2.346e+14 1.286e+14 2.589e+14 1.422e+14 2.848e+14 1.567e+14 3.123e+14 1.722e+14 3.416e+14 1.886e+14 3.724e+14 2.059e+14 4.048e+14 2.242e+14 4.388e+14 2.434e+14 4.746e+14 2.636e+14 5.117e+14 2.845e+14 5.505e+14 3.063e+14 5.905e+14 3.290e+14 6.320e+14 3.524e+14 6.747e+14 3.765e+14 7.186e+14 4.012e+14 7.635e+14 4.264e+14 8.093e+14 4.522e+14 8.559e+14 4.782e+14 9.031e+14 5.047e+14 9.508e+14 5.313e+14 9.991e+14 5.581e+14 1.047e+15 5.848e+14 1.095e+15 6.116e+14 1.143e+15 6.381e+14 1.191e+15 6.643e+14 1.238e+15 6.901e+14 1.283e+15 7.155e+14 1.328e+15 7.403e+14 1.373e+15 7.643e+14 1.415e+15 7.876e+14 1.457e+15 8.101e+14 1.496e+15 8.316e+14 1.533e+15 8.519e+14 1.569e+15 8.712e+14 1.603e+15 8.893e+14 1.634e+15 9.061e+14 1.662e+15 9.215e+14 1.688e+15 9.357e+14 1.711e+15 9.484e+14 1.733e+15 9.597e+14 1.751e+15 9.696e+14 1.765e+15 9.777e+14 1.778e+15 9.842e+14 1.786e+15 9.891e+14 1.793e+15 9.922e+14 1.795e+15 9.935e+14 1.795e+15 9.931e+14 1.791e+15 9.910e+14 1.784e+15 9.871e+14 1.774e+15 9.814e+14 1.761e+15 9.741e+14 1.745e+15 9.649e+14 1.726e+15 9.541e+14 1.703e+15 9.417e+14 1.679e+15 9.277e+14 1.652e+15 9.122e+14 1.622e+15 8.951e+14 1.589e+15 8.767e+14 1.554e+15 8.570e+14 1.518e+15 8.360e+14 1.479e+15 8.140e+14 1.438e+15 7.908e+14 1.396e+15 7.668e+14 1.353e+15 7.419e+14 1.307e+15 7.164e+14 1.261e+15 6.903e+14 1.215e+15 6.637e+14 1.167e+15 6.368e+14 1.119e+15 6.095e+14 1.071e+15 5.823e+14 1.023e+15 5.550e+14 9.744e+14 5.278e+14 9.264e+14 5.008e+14 8.789e+14 4.741e+14 8.318e+14 4.478e+14 7.856e+14 4.220e+14 7.402e+14 3.968e+14 6.959e+14 3.721e+14 6.525e+14 3.481e+14 6.106e+14 3.249e+14 5.698e+14 3.025e+14 5.304e+14 2.809e+14 4.926e+14 2.601e+14 4.562e+14 2.402e+14 4.215e+14 2.213e+14 3.883e+14 2.033e+14 3.567e+14 1.864e+14 3.268e+14 1.702e+14 2.985e+14 1.550e+14 2.720e+14 1.407e+14 2.469e+14 1.274e+14 2.235e+14 1.149e+14 2.017e+14 1.033e+14 1.814e+14 9.253e+13 1.625e+14 8.258e+13 1.451e+14 7.340e+13 1.290e+14 6.498e+13 1.143e+14 5.728e+13 1.009e+14 5.026e+13 8.869e+13 4.390e+13 7.760e+13 3.815e+13 6.757e+13 3.298e+13 5.855e+13 2.836e+13 5.048e+13 2.423e+13 4.327e+13 2.058e+13 3.689e+13 1.736e+13 3.126e+13 1.454e+13 2.630e+13 1.209e+13 2.199e+13 9.962e+12 1.824e+13 8.138e+12 1.501e+13 6.583e+12 1.225e+13 5.273e+12 9.898e+12 4.176e+12 7.921e+12 3.265e+12 6.266e+12 2.517e+12 4.896e+12 1.911e+12 3.775e+12 1.424e+12 2.864e+12 1.041e+12 2.136e+12 7.427e+11 1.562e+12 5.155e+11 1.116e+12 3.462e+11 7.765e+11 2.096e+11 4.910e+11 1.282e+11 3.173e+11 7.318e+10 1.951e+11 3.791e+10 1.124e+11 1.685e+10 5.913e+10 5.620e+09 2.728e+10 7.009e+08 1.020e+10 -6.778e+08 2.674e+09 -1.145e+09 1.463e+08 -2.025e+09 -1.507e+09 -2.882e+09 -3.363e+09 -3.168e+09 -4.797e+09 -2.773e+09 -5.286e+09 -1.863e+09 -4.748e+09 -7.681e+08 -3.467e+09 1.491e+08 -1.989e+09 9.160e+08 -8.736e+08 2.451e+09 2.252e+08 5.837e+09 2.634e+09 1.169e+10 7.608e+09 2.038e+10 1.593e+10 3.220e+10 2.817e+10 4.739e+10 4.472e+10 6.606e+10 6.583e+10 8.821e+10 9.154e+10 1.138e+11 1.218e+11 1.426e+11 1.564e+11 1.743e+11 1.949e+11 2.087e+11 2.368e+11 2.452e+11 2.815e+11 2.834e+11 3.284e+11 3.227e+11 3.767e+11 3.627e+11 4.257e+11 4.026e+11 4.744e+11 4.419e+11 5.222e+11 4.800e+11 5.684e+11 5.164e+11 6.119e+11 5.504e+11 6.524e+11 5.817e+11 6.891e+11 6.096e+11 7.214e+11 6.339e+11 7.491e+11 6.541e+11 7.717e+11 6.700e+11 7.889e+11 6.812e+11 8.004e+11 6.879e+11 8.063e+11 6.899e+11 8.067e+11 6.873e+11 8.016e+11 6.802e+11 7.913e+11 6.689e+11 7.759e+11 6.536e+11 7.559e+11 6.345e+11 7.316e+11 6.121e+11 7.035e+11 5.868e+11 6.720e+11 5.590e+11 6.377e+11 5.291e+11 6.011e+11 4.976e+11 5.628e+11 4.650e+11 5.232e+11 0.005 -51.425 -50.342 -49.260 -48.177 -47.094 -46.113 -45.231 -44.438 -43.728 -43.095 -42.534 -42.041 -41.613 -41.246 -40.940 -40.693 -40.502 -40.369 -40.291 -40.270 -40.305 -40.397 -40.547 -40.757 -41.029 -41.364 -41.767 -42.241 -42.790 -43.420 -44.138 -44.952 -45.873 -46.914 -48.093 -49.429 -50.954 -52.707 -54.745 -57.150 -60.049 -63.628 -68.012 -72.093 -73.184 -72.069 -71.380 -71.573 -71.221 -68.704 -64.880 -61.206 -58.089 -55.472 -53.248 -51.332 -49.664 -48.202 -46.912 -45.771 -44.761 -43.868 -43.080 -42.389 -41.787 -41.269 -40.832 -40.470 -40.183 -39.967 -39.823 -39.748 -39.745 -39.813 -39.954 -40.170 -40.462 -40.835 -41.293 -41.840 -42.485 -43.233 -44.094 -45.078 -46.196 -47.460 -48.877 -50.448 -52.149 -53.909 -55.576 -56.926 -57.759 -58.043 -57.878 -57.332 -56.363 -54.931 -53.111 -51.085 -49.023 -47.037 -45.178 -43.462 -41.887 -40.447 -39.132 -37.931 -36.836 -35.838 -34.930 -34.106 -33.362 -32.693 -32.095 -31.566 -31.104 -30.708 -30.375 -30.106 -29.900 -29.758 -29.681 -29.670 -29.727 -29.856 -30.059 -30.342 -30.709 -31.169 -31.729 -32.402 -33.201 -34.145 -35.259 -36.573 -38.134 -40.007 -42.278 -45.061 -48.427 -51.947 -53.802 -53.198 -52.490 -53.088 -55.626 -57.889 -51.807 -45.308 -40.624 -36.957 -33.918 -31.308 -29.014 -26.962 -25.105 -23.409 -21.847 -20.402 -19.057 -17.801 -16.625 -15.520 -14.479 -13.498 -12.572 -11.696 -10.867 -10.082 -9.338 -8.633 -7.965 -7.332 -6.732 -6.164 -5.627 -5.119 -4.640 -4.188 -3.762 -3.362 -2.987 -2.636 -2.310 -2.006 -1.725 -1.467 -1.230 -1.015 -0.821 -0.649 -0.497 -0.365 -0.254 -0.163 -0.093 -0.042 -0.011 0.000 -0.009 -0.037 -0.085 -0.153 -0.241 -0.350 -0.478 -0.627 -0.797 -0.988 -1.200 -1.434 -1.689 -1.967 -2.267 -2.591 -2.938 -3.309 -3.705 -4.127 -4.575 -5.051 -5.554 -6.087 -6.650 -7.244 -7.872 -8.534 -9.233 -9.970 -10.748 -11.570 -12.437 -13.355 -14.325 -15.355 -16.447 -17.609 -18.849 -20.176 -21.600 -23.136 -24.803 -26.623 -28.627 -30.860 -33.383 -36.290 -39.725 -43.898 -48.879 -52.692 -52.516 -51.198 -50.759 -51.356 -52.439 -52.255 -49.721 -46.442 -43.514 -41.095 -39.104 -37.451 -36.067 -34.903 -33.920 -33.092 -32.398 -31.823 -31.353 -30.980 -30.697 -30.496 -30.374 -30.326 -30.350 -30.444 -30.607 -30.837 -31.134 -31.500 -31.934 -32.438 -33.015 -33.668 -34.399 -35.213 -36.116 -37.113 -38.213 -39.422 -40.751 -42.210 -43.809 -45.554 -47.446 -49.470 -51.577 -53.664 -55.561 -57.039 -57.866 -57.865 -57.004 -55.464 -53.557 -51.557 -49.627 -47.838 -46.210 -44.744 -43.428 -42.251 -41.199 -40.261 -39.427 -38.688 -38.037 -37.468 -36.976 -36.554 -36.201 -35.913 -35.687 -35.520 -35.412 -35.361 -35.365 -35.426 -35.541 -35.711 -35.937 -36.218 -36.557 -36.954 -37.411 -37.931 -38.516 -39.171 -39.898 -40.705 -41.595 -42.579 -43.664 -44.863 -46.189 -47.662 -49.306 -51.151 -53.241 -55.637 -58.426 -61.742 -65.801 -70.976 -77.883 -85.944 -87.598 -80.655 -73.604 -68.312 -64.257 -61.031 -58.386 -56.172 -54.288 -52.667 -51.262 -50.039 -48.970 -48.038 -47.224 -46.519 -45.910 -45.392 -44.957 -44.599 -44.316 -44.103 -43.958 -43.878 -43.862 -43.910 -44.020 -44.193 -44.429 -44.729 -45.094 -45.527 -46.029 -46.605 -47.259 -47.995 -48.821 -49.746 -50.778 -51.923 -53.068 -54.213 -55.359 0.03 -18.9834 -18.6097 -18.2396 -17.8733 -17.5107 -17.1518 -16.7966 -16.4452 -16.0974 -15.7534 -15.4131 -15.0765 -14.7436 -14.4145 -14.089 -13.7673 -13.4492 -13.1349 -12.8244 -12.5175 -12.2143 -11.9149 -11.6192 -11.3271 -11.0388 -10.7543 -10.4734 -10.1963 -9.9228 -9.6531 -9.3871 -9.1248 -8.8662 -8.6114 -8.3602 -8.1128 -7.8691 -7.6291 -7.3928 -7.1603 -6.9314 -6.7063 -6.4849 -6.2672 -6.0532 -5.8429 -5.6364 -5.4335 -5.2344 -5.039 -4.8473 -4.6593 -4.4751 -4.2945 -4.1177 -3.9446 -3.7752 -3.6095 -3.4475 -3.2893 -3.1347 -2.9839 -2.8368 -2.6934 -2.5538 -2.4178 -2.2855 -2.157 -2.0322 -1.9111 -1.7937 -1.6801 -1.5701 -1.4639 -1.3614 -1.2626 -1.1675 -1.0761 -0.98844 -0.90449 -0.82427 -0.74776 -0.67496 -0.60588 -0.54052 -0.47887 -0.42094 -0.36672 -0.31622 -0.26943 -0.22636 -0.187 -0.15136 -0.11944 -0.091228 -0.066735 -0.045957 -0.028894 -0.015547 -0.0059159 0 0.0022004 0.00068526 -0.0045454 -0.013492 -0.026153 -0.04253 -0.062623 -0.086431 -0.11396 -0.14519 -0.18015 -0.21882 -0.26121 -0.30731 -0.35712 -0.41066 -0.4679 -0.52887 -0.59355 -0.66194 -0.73405 -0.80988 -0.88942 -0.97267 -1.0596 -1.1503 -1.2447 -1.3429 -1.4447 -1.5502 -1.6595 -1.7725 -1.8892 -2.0096 -2.1337 -2.2616 -2.3931 -2.5284 -2.6674 -2.8101 -2.9565 -3.1066 -3.2605 -3.4181 -3.5793 -3.7443 -3.9131 -4.0855 -4.2616 -4.4415 -4.6251 -4.8124 -5.0034 -5.1981 -5.3965 -5.5987 -5.8046 -6.0141 -6.2274 -6.4444 -6.6652 -6.8896 -7.1178 -7.3497 -7.5853 -7.8246 -8.0676 -8.3143 -8.5648 -8.819 -9.0768 -9.3384 -9.6038 -9.8728 -10.1455 -10.422 -10.7022 -10.9861 -11.2737 -11.565 -11.8601 -12.1588 -12.4613 -12.7675 -13.0774 -13.391 -13.7083 -14.0294 -14.3541 -14.6826 -15.0148 -15.3507 -15.6904 -16.0337 -16.3808 -16.7315 -17.086 -17.4442 -17.8062 -18.1718 1.0 59758.6889 IW3 VH 36.06 39.6 0.050 -2.631e+09 1.734e+10 -3.006e+09 2.002e+10 -3.410e+09 2.292e+10 -3.844e+09 2.603e+10 -4.308e+09 2.934e+10 -4.799e+09 3.282e+10 -5.316e+09 3.645e+10 -5.857e+09 4.021e+10 -6.417e+09 4.407e+10 -6.994e+09 4.799e+10 -7.582e+09 5.195e+10 -8.176e+09 5.589e+10 -8.770e+09 5.979e+10 -9.357e+09 6.360e+10 -9.929e+09 6.728e+10 -1.048e+10 7.078e+10 -1.100e+10 7.407e+10 -1.148e+10 7.710e+10 -1.191e+10 7.985e+10 -1.230e+10 8.228e+10 -1.262e+10 8.436e+10 -1.288e+10 8.606e+10 -1.307e+10 8.737e+10 -1.318e+10 8.826e+10 -1.323e+10 8.871e+10 -1.320e+10 8.873e+10 -1.309e+10 8.831e+10 -1.292e+10 8.745e+10 -1.268e+10 8.617e+10 -1.238e+10 8.446e+10 -1.203e+10 8.235e+10 -1.162e+10 7.987e+10 -1.118e+10 7.703e+10 -1.070e+10 7.386e+10 -1.019e+10 7.041e+10 -9.669e+09 6.671e+10 -9.135e+09 6.279e+10 -8.596e+09 5.869e+10 -8.059e+09 5.447e+10 -7.529e+09 5.017e+10 -7.010e+09 4.582e+10 -6.505e+09 4.147e+10 -6.017e+09 3.718e+10 -5.547e+09 3.298e+10 -5.096e+09 2.891e+10 -4.662e+09 2.501e+10 -4.246e+09 2.133e+10 -3.846e+09 1.788e+10 -3.461e+09 1.470e+10 -3.089e+09 1.182e+10 -2.730e+09 9.248e+09 -2.383e+09 7.002e+09 -2.048e+09 5.089e+09 -1.729e+09 3.509e+09 -1.430e+09 2.258e+09 -1.162e+09 1.319e+09 -9.451e+08 6.609e+08 -8.107e+08 2.217e+08 -7.891e+08 -1.084e+08 -8.782e+08 -4.635e+08 -1.038e+09 -9.324e+08 -1.231e+09 -1.539e+09 -1.431e+09 -2.268e+09 -1.624e+09 -3.091e+09 -1.802e+09 -3.974e+09 -1.962e+09 -4.882e+09 -2.098e+09 -5.780e+09 -2.209e+09 -6.635e+09 -2.294e+09 -7.418e+09 -2.353e+09 -8.100e+09 -2.385e+09 -8.661e+09 -2.391e+09 -9.084e+09 -2.373e+09 -9.354e+09 -2.332e+09 -9.466e+09 -2.268e+09 -9.417e+09 -2.185e+09 -9.210e+09 -2.084e+09 -8.851e+09 -1.966e+09 -8.354e+09 -1.835e+09 -7.734e+09 -1.691e+09 -7.013e+09 -1.538e+09 -6.212e+09 -1.377e+09 -5.360e+09 -1.210e+09 -4.484e+09 -1.041e+09 -3.612e+09 -8.718e+08 -2.775e+09 -7.052e+08 -2.004e+09 -5.445e+08 -1.326e+09 -3.942e+08 -7.695e+08 -2.601e+08 -3.584e+08 -1.565e+08 -1.059e+08 -1.193e+08 3.622e+07 -1.479e+08 2.357e+08 -1.935e+08 6.178e+08 -2.239e+08 1.221e+09 -2.283e+08 2.051e+09 -2.025e+08 3.107e+09 -1.442e+08 4.382e+09 -5.236e+07 5.863e+09 7.320e+07 7.535e+09 2.316e+08 9.376e+09 4.207e+08 1.136e+10 6.377e+08 1.346e+10 8.790e+08 1.565e+10 1.140e+09 1.788e+10 1.417e+09 2.013e+10 1.703e+09 2.235e+10 1.992e+09 2.450e+10 2.278e+09 2.655e+10 2.556e+09 2.847e+10 2.817e+09 3.021e+10 3.057e+09 3.175e+10 3.271e+09 3.306e+10 3.453e+09 3.412e+10 3.600e+09 3.490e+10 3.708e+09 3.539e+10 3.776e+09 3.559e+10 3.802e+09 3.548e+10 3.786e+09 3.509e+10 3.730e+09 3.440e+10 3.635e+09 3.344e+10 3.502e+09 3.223e+10 3.337e+09 3.079e+10 3.142e+09 2.913e+10 2.922e+09 2.731e+10 2.682e+09 2.534e+10 2.426e+09 2.327e+10 2.159e+09 2.113e+10 1.888e+09 1.895e+10 1.615e+09 1.677e+10 1.348e+09 1.462e+10 1.090e+09 1.254e+10 8.460e+08 1.056e+10 6.204e+08 8.698e+09 4.173e+08 6.987e+09 2.402e+08 5.443e+09 9.249e+07 4.083e+09 -2.313e+07 2.917e+09 -1.047e+08 1.954e+09 -1.512e+08 1.195e+09 -1.641e+08 6.395e+08 -1.520e+08 2.780e+08 -1.452e+08 7.756e+07 -1.927e+08 -5.749e+07 -3.151e+08 -2.525e+08 -4.934e+08 -5.640e+08 -7.124e+08 -9.874e+08 -9.645e+08 -1.503e+09 -1.244e+09 -2.088e+09 -1.543e+09 -2.716e+09 -1.857e+09 -3.362e+09 -2.180e+09 -4.001e+09 -2.502e+09 -4.609e+09 -2.817e+09 -5.165e+09 -3.119e+09 -5.649e+09 -3.398e+09 -6.044e+09 -3.649e+09 -6.336e+09 -3.864e+09 -6.515e+09 -4.039e+09 -6.576e+09 -4.169e+09 -6.517e+09 -4.249e+09 -6.339e+09 -4.279e+09 -6.051e+09 -4.257e+09 -5.663e+09 -4.185e+09 -5.188e+09 -4.065e+09 -4.644e+09 -3.902e+09 -4.051e+09 -3.703e+09 -3.429e+09 -3.476e+09 -2.801e+09 -3.232e+09 -2.188e+09 -2.985e+09 -1.606e+09 -2.751e+09 -1.069e+09 -2.548e+09 -5.781e+08 -2.394e+09 -1.244e+08 -2.304e+09 3.168e+08 -2.285e+09 7.837e+08 -2.333e+09 1.320e+09 -2.435e+09 1.966e+09 -2.573e+09 2.752e+09 -2.727e+09 3.696e+09 -2.881e+09 4.804e+09 -3.023e+09 6.074e+09 -3.143e+09 7.496e+09 -3.234e+09 9.052e+09 -3.292e+09 1.073e+10 -3.314e+09 1.249e+10 -3.300e+09 1.432e+10 -3.250e+09 1.619e+10 -3.165e+09 1.806e+10 -3.047e+09 1.990e+10 -2.899e+09 2.169e+10 -2.725e+09 2.340e+10 -2.529e+09 2.498e+10 -2.315e+09 2.643e+10 -2.086e+09 2.771e+10 -1.849e+09 2.879e+10 -1.608e+09 2.967e+10 -1.367e+09 3.032e+10 -1.131e+09 3.073e+10 -9.051e+08 3.090e+10 -6.922e+08 3.082e+10 -4.965e+08 3.049e+10 -3.209e+08 2.992e+10 -1.680e+08 2.912e+10 -3.974e+07 2.810e+10 6.291e+07 2.688e+10 1.395e+08 2.548e+10 1.905e+08 2.392e+10 2.170e+08 2.223e+10 2.210e+08 2.043e+10 2.050e+08 1.857e+10 1.723e+08 1.667e+10 1.265e+08 1.476e+10 7.157e+07 1.288e+10 1.172e+07 1.105e+10 -4.886e+07 9.303e+09 -1.060e+08 7.664e+09 -1.562e+08 6.155e+09 -1.960e+08 4.795e+09 -2.228e+08 3.599e+09 -2.349e+08 2.577e+09 -2.313e+08 1.733e+09 -2.123e+08 1.070e+09 -1.798e+08 5.817e+08 -1.389e+08 2.586e+08 -1.048e+08 7.825e+07 -1.060e+08 -2.389e+07 -1.515e+08 -1.453e+08 -2.206e+08 -3.397e+08 -2.952e+08 -6.040e+08 -3.668e+08 -9.173e+08 -4.301e+08 -1.256e+09 -4.811e+08 -1.599e+09 -5.166e+08 -1.924e+09 -5.345e+08 -2.212e+09 -5.333e+08 -2.447e+09 -5.126e+08 -2.618e+09 -4.731e+08 -2.715e+09 -4.163e+08 -2.734e+09 -3.447e+08 -2.674e+09 -2.620e+08 -2.540e+09 -1.721e+08 -2.340e+09 -8.018e+07 -2.083e+09 8.491e+06 -1.786e+09 8.854e+07 -1.465e+09 1.547e+08 -1.140e+09 2.030e+08 -8.298e+08 2.322e+08 -5.559e+08 2.479e+08 -3.350e+08 2.690e+08 -1.711e+08 3.281e+08 -3.774e+07 4.530e+08 1.230e+08 6.516e+08 3.693e+08 9.208e+08 7.382e+08 1.256e+09 1.248e+09 1.653e+09 1.907e+09 2.109e+09 2.717e+09 2.620e+09 3.673e+09 3.178e+09 4.768e+09 3.779e+09 5.989e+09 4.413e+09 7.317e+09 5.071e+09 8.732e+09 5.743e+09 1.021e+10 6.419e+09 1.173e+10 7.085e+09 1.325e+10 7.728e+09 1.476e+10 8.336e+09 1.620e+10 8.894e+09 1.756e+10 9.391e+09 1.881e+10 9.815e+09 1.990e+10 1.015e+10 2.083e+10 1.040e+10 2.156e+10 1.055e+10 2.208e+10 1.059e+10 2.237e+10 1.052e+10 2.242e+10 1.035e+10 2.224e+10 1.007e+10 2.182e+10 9.693e+09 2.118e+10 9.223e+09 2.033e+10 8.672e+09 1.928e+10 8.051e+09 1.807e+10 7.375e+09 1.672e+10 6.661e+09 1.527e+10 5.922e+09 1.374e+10 5.178e+09 1.218e+10 4.443e+09 1.061e+10 3.734e+09 9.074e+09 3.065e+09 7.604e+09 2.448e+09 6.225e+09 1.893e+09 4.962e+09 1.409e+09 3.834e+09 9.985e+08 2.854e+09 6.641e+08 2.030e+09 4.049e+08 1.362e+09 2.160e+08 8.460e+08 9.023e+07 4.707e+08 1.843e+07 2.214e+08 -1.152e+07 7.799e+07 -1.688e+07 1.637e+07 -2.876e+07 -7.931e+06 -5.429e+07 -4.455e+07 -7.856e+07 -9.045e+07 -9.141e+07 -1.293e+08 -8.805e+07 -1.464e+08 -6.846e+07 -1.347e+08 -3.795e+07 -9.716e+07 -7.944e+06 -4.729e+07 8.855e+06 -9.746e+06 4.628e+07 2.039e+07 1.716e+08 1.431e+08 4.302e+08 4.414e+08 8.773e+08 1.001e+09 1.580e+09 1.924e+09 2.615e+09 3.329e+09 4.066e+09 5.343e+09 6.030e+09 8.113e+09 8.610e+09 1.180e+10 1.191e+10 1.655e+10 1.605e+10 2.253e+10 2.114e+10 2.993e+10 2.729e+10 3.889e+10 3.462e+10 4.957e+10 4.324e+10 6.212e+10 5.323e+10 7.664e+10 6.467e+10 9.324e+10 7.764e+10 1.120e+11 9.217e+10 1.329e+11 1.083e+11 1.560e+11 1.260e+11 1.813e+11 1.452e+11 2.085e+11 1.659e+11 2.376e+11 1.879e+11 2.684e+11 2.112e+11 3.005e+11 2.355e+11 3.338e+11 2.606e+11 3.679e+11 2.862e+11 4.022e+11 3.122e+11 4.365e+11 3.381e+11 4.702e+11 3.637e+11 5.028e+11 3.885e+11 5.339e+11 4.123e+11 5.628e+11 4.346e+11 5.891e+11 4.552e+11 6.122e+11 4.736e+11 6.319e+11 4.896e+11 6.475e+11 5.027e+11 6.587e+11 5.128e+11 6.652e+11 5.194e+11 6.666e+11 5.225e+11 6.630e+11 5.219e+11 6.541e+11 5.175e+11 6.400e+11 5.093e+11 6.208e+11 4.973e+11 5.968e+11 4.817e+11 5.683e+11 4.626e+11 5.357e+11 4.403e+11 4.995e+11 4.151e+11 4.604e+11 3.874e+11 4.190e+11 3.576e+11 3.760e+11 3.263e+11 3.323e+11 2.938e+11 2.886e+11 2.609e+11 2.456e+11 2.280e+11 2.044e+11 1.958e+11 1.655e+11 1.648e+11 1.296e+11 1.356e+11 9.747e+10 1.086e+11 6.944e+10 8.439e+10 4.591e+10 6.334e+10 2.706e+10 4.578e+10 1.280e+10 3.196e+10 2.710e+09 2.196e+10 -4.123e+09 1.541e+10 -9.293e+09 1.121e+10 -1.470e+10 7.799e+09 -2.164e+10 3.905e+09 -3.028e+10 -9.658e+08 -3.994e+10 -6.705e+09 -4.961e+10 -1.288e+10 -5.821e+10 -1.889e+10 -6.469e+10 -2.409e+10 -6.814e+10 -2.783e+10 -6.788e+10 -2.960e+10 -6.355e+10 -2.904e+10 -5.521e+10 -2.604e+10 -4.349e+10 -2.087e+10 -2.969e+10 -1.427e+10 -1.596e+10 -7.699e+09 -5.182e+09 -3.765e+09 1.865e+09 -1.540e+09 1.413e+10 5.619e+09 4.522e+10 2.466e+10 1.057e+11 6.164e+10 2.062e+11 1.237e+11 3.596e+11 2.192e+11 5.807e+11 3.580e+11 8.867e+11 5.519e+11 1.298e+12 8.131e+11 1.834e+12 1.159e+12 2.522e+12 1.604e+12 3.391e+12 2.170e+12 4.471e+12 2.876e+12 5.792e+12 3.746e+12 7.397e+12 4.806e+12 9.319e+12 6.083e+12 1.160e+13 7.608e+12 1.429e+13 9.412e+12 1.744e+13 1.153e+13 2.108e+13 1.400e+13 2.528e+13 1.685e+13 3.010e+13 2.013e+13 3.557e+13 2.388e+13 4.178e+13 2.814e+13 4.875e+13 3.296e+13 5.658e+13 3.837e+13 6.530e+13 4.444e+13 7.497e+13 5.119e+13 8.566e+13 5.869e+13 9.744e+13 6.696e+13 1.103e+14 7.607e+13 1.244e+14 8.604e+13 1.398e+14 9.693e+13 1.564e+14 1.088e+14 1.743e+14 1.216e+14 1.935e+14 1.356e+14 2.141e+14 1.505e+14 2.361e+14 1.666e+14 2.596e+14 1.838e+14 2.845e+14 2.021e+14 3.109e+14 2.214e+14 3.387e+14 2.420e+14 3.679e+14 2.637e+14 3.984e+14 2.865e+14 4.304e+14 3.105e+14 4.637e+14 3.355e+14 4.983e+14 3.616e+14 5.341e+14 3.887e+14 5.710e+14 4.168e+14 6.090e+14 4.458e+14 6.479e+14 4.755e+14 6.876e+14 5.060e+14 7.281e+14 5.372e+14 7.693e+14 5.690e+14 8.109e+14 6.013e+14 8.529e+14 6.340e+14 8.951e+14 6.670e+14 9.374e+14 7.001e+14 9.795e+14 7.332e+14 1.022e+15 7.663e+14 1.063e+15 7.992e+14 1.104e+15 8.317e+14 1.144e+15 8.638e+14 1.183e+15 8.952e+14 1.221e+15 9.259e+14 1.258e+15 9.558e+14 1.293e+15 9.847e+14 1.327e+15 1.013e+15 1.359e+15 1.039e+15 1.389e+15 1.064e+15 1.417e+15 1.088e+15 1.443e+15 1.110e+15 1.467e+15 1.131e+15 1.488e+15 1.150e+15 1.507e+15 1.167e+15 1.524e+15 1.182e+15 1.538e+15 1.196e+15 1.549e+15 1.207e+15 1.558e+15 1.216e+15 1.563e+15 1.223e+15 1.566e+15 1.228e+15 1.567e+15 1.231e+15 1.564e+15 1.231e+15 1.558e+15 1.229e+15 1.550e+15 1.225e+15 1.539e+15 1.219e+15 1.525e+15 1.211e+15 1.509e+15 1.200e+15 1.490e+15 1.187e+15 1.468e+15 1.172e+15 1.445e+15 1.156e+15 1.418e+15 1.137e+15 1.390e+15 1.117e+15 1.360e+15 1.094e+15 1.328e+15 1.070e+15 1.294e+15 1.045e+15 1.259e+15 1.018e+15 1.222e+15 9.904e+14 1.184e+15 9.612e+14 1.145e+15 9.311e+14 1.105e+15 9.000e+14 1.065e+15 8.682e+14 1.023e+15 8.357e+14 9.821e+14 8.028e+14 9.402e+14 7.696e+14 8.982e+14 7.361e+14 8.563e+14 7.026e+14 8.146e+14 6.691e+14 7.733e+14 6.359e+14 7.324e+14 6.029e+14 6.922e+14 5.703e+14 6.527e+14 5.383e+14 6.140e+14 5.068e+14 5.763e+14 4.760e+14 5.397e+14 4.461e+14 5.042e+14 4.170e+14 4.699e+14 3.888e+14 4.368e+14 3.617e+14 4.051e+14 3.355e+14 3.746e+14 3.104e+14 3.456e+14 2.864e+14 3.179e+14 2.636e+14 2.917e+14 2.418e+14 2.668e+14 2.212e+14 2.434e+14 2.017e+14 2.213e+14 1.834e+14 2.006e+14 1.662e+14 1.812e+14 1.502e+14 1.633e+14 1.352e+14 1.465e+14 1.213e+14 1.311e+14 1.084e+14 1.168e+14 9.649e+13 1.037e+14 8.556e+13 9.172e+13 7.556e+13 8.079e+13 6.644e+13 7.084e+13 5.815e+13 6.185e+13 5.065e+13 5.375e+13 4.389e+13 4.647e+13 3.784e+13 3.998e+13 3.244e+13 3.420e+13 2.764e+13 2.909e+13 2.340e+13 2.459e+13 1.969e+13 2.065e+13 1.644e+13 1.723e+13 1.361e+13 1.425e+13 1.119e+13 1.171e+13 9.109e+12 9.531e+12 7.349e+12 7.691e+12 5.865e+12 6.144e+12 4.626e+12 4.852e+12 3.602e+12 3.786e+12 2.764e+12 2.915e+12 2.086e+12 2.210e+12 1.547e+12 1.647e+12 1.122e+12 1.204e+12 7.944e+11 8.607e+11 5.461e+11 5.993e+11 3.617e+11 4.040e+11 2.294e+11 2.623e+11 1.374e+11 1.624e+11 7.621e+10 9.459e+10 3.779e+10 5.064e+10 1.570e+10 2.406e+10 4.670e+09 9.503e+09 4.411e+08 2.841e+09 -1.033e+09 6.433e+08 -2.625e+09 -4.740e+08 -4.394e+09 -1.695e+09 -5.544e+09 -2.670e+09 -5.683e+09 -3.000e+09 -4.828e+09 -2.614e+09 -3.293e+09 -1.719e+09 -1.607e+09 -7.170e+08 -4.292e+08 -8.451e+07 4.019e+08 6.426e+08 2.440e+09 2.698e+09 7.090e+09 6.959e+09 1.501e+10 1.390e+10 2.670e+10 2.392e+10 4.258e+10 3.731e+10 6.288e+10 5.421e+10 8.772e+10 7.465e+10 1.171e+11 9.855e+10 1.508e+11 1.257e+11 1.885e+11 1.557e+11 2.298e+11 1.882e+11 2.743e+11 2.228e+11 3.212e+11 2.587e+11 3.699e+11 2.954e+11 4.198e+11 3.324e+11 4.698e+11 3.688e+11 5.195e+11 4.042e+11 5.680e+11 4.379e+11 6.144e+11 4.693e+11 6.583e+11 4.979e+11 6.989e+11 5.232e+11 7.355e+11 5.449e+11 7.677e+11 5.626e+11 7.951e+11 5.762e+11 8.172e+11 5.855e+11 8.337e+11 5.902e+11 8.447e+11 5.907e+11 8.499e+11 5.868e+11 8.495e+11 5.789e+11 8.436e+11 5.671e+11 8.325e+11 5.517e+11 8.163e+11 5.330e+11 7.955e+11 5.114e+11 7.704e+11 4.874e+11 7.416e+11 4.612e+11 7.095e+11 4.334e+11 6.746e+11 4.044e+11 6.375e+11 3.746e+11 5.987e+11 3.444e+11 0.005 -52.240 -51.153 -50.067 -48.981 -47.895 -46.913 -46.031 -45.242 -44.538 -43.913 -43.361 -42.880 -42.466 -42.116 -41.829 -41.603 -41.437 -41.331 -41.284 -41.296 -41.369 -41.503 -41.700 -41.961 -42.290 -42.689 -43.162 -43.715 -44.353 -45.083 -45.913 -46.855 -47.922 -49.130 -50.501 -52.062 -53.849 -55.910 -58.311 -61.141 -64.525 -68.603 -73.349 -77.257 -77.043 -73.188 -68.623 -64.501 -60.955 -57.920 -55.306 -53.033 -51.037 -49.273 -47.703 -46.300 -45.043 -43.913 -42.898 -41.987 -41.170 -40.440 -39.791 -39.219 -38.720 -38.290 -37.927 -37.628 -37.393 -37.221 -37.111 -37.062 -37.077 -37.155 -37.297 -37.506 -37.783 -38.131 -38.554 -39.056 -39.641 -40.316 -41.087 -41.963 -42.951 -44.062 -45.306 -46.689 -48.216 -49.876 -51.632 -53.402 -55.035 -56.326 -57.078 -57.161 -56.528 -55.224 -53.417 -51.344 -49.211 -47.146 -45.207 -43.414 -41.768 -40.262 -38.886 -37.629 -36.481 -35.434 -34.480 -33.613 -32.827 -32.117 -31.481 -30.914 -30.414 -29.980 -29.609 -29.301 -29.055 -28.872 -28.752 -28.695 -28.704 -28.780 -28.927 -29.147 -29.445 -29.828 -30.300 -30.872 -31.554 -32.360 -33.306 -34.417 -35.724 -37.270 -39.115 -41.348 -44.105 -47.604 -52.094 -57.013 -59.025 -58.432 -59.660 -61.032 -54.343 -47.412 -42.407 -38.493 -35.258 -32.489 -30.063 -27.902 -25.951 -24.174 -22.542 -21.035 -19.636 -18.332 -17.112 -15.968 -14.893 -13.880 -12.924 -12.022 -11.168 -10.361 -9.596 -8.872 -8.186 -7.536 -6.921 -6.339 -5.788 -5.268 -4.777 -4.314 -3.878 -3.468 -3.084 -2.725 -2.390 -2.078 -1.790 -1.525 -1.282 -1.061 -0.861 -0.683 -0.526 -0.390 -0.274 -0.179 -0.104 -0.049 -0.014 0.000 -0.006 -0.031 -0.076 -0.141 -0.227 -0.332 -0.459 -0.606 -0.773 -0.962 -1.173 -1.404 -1.658 -1.935 -2.233 -2.556 -2.902 -3.272 -3.667 -4.088 -4.535 -5.010 -5.513 -6.045 -6.607 -7.202 -7.829 -8.491 -9.189 -9.926 -10.704 -11.525 -12.393 -13.310 -14.281 -15.310 -16.402 -17.565 -18.804 -20.131 -21.554 -23.090 -24.755 -26.573 -28.576 -30.804 -33.322 -36.220 -39.642 -43.795 -48.743 -52.502 -52.232 -50.741 -49.962 -49.881 -49.845 -48.945 -46.946 -44.489 -42.128 -40.051 -38.270 -36.753 -35.460 -34.360 -33.422 -32.627 -31.957 -31.398 -30.940 -30.574 -30.294 -30.094 -29.969 -29.916 -29.933 -30.017 -30.166 -30.381 -30.660 -31.005 -31.415 -31.892 -32.438 -33.055 -33.746 -34.516 -35.370 -36.312 -37.350 -38.493 -39.752 -41.138 -42.666 -44.355 -46.226 -48.301 -50.602 -53.141 -55.896 -58.761 -61.436 -63.337 -63.774 -62.583 -60.343 -57.765 -55.258 -52.973 -50.941 -49.148 -47.571 -46.184 -44.964 -43.893 -42.953 -42.133 -41.420 -40.807 -40.286 -39.850 -39.495 -39.217 -39.013 -38.879 -38.815 -38.819 -38.891 -39.031 -39.238 -39.515 -39.862 -40.282 -40.777 -41.353 -42.013 -42.763 -43.613 -44.570 -45.647 -46.858 -48.221 -49.758 -51.491 -53.443 -55.609 -57.912 -60.092 -61.674 -62.322 -62.288 -62.142 -62.301 -63.019 -64.569 -67.462 -71.593 -71.449 -65.760 -60.946 -57.510 -54.863 -52.722 -50.935 -49.414 -48.104 -46.965 -45.971 -45.102 -44.343 -43.682 -43.110 -42.620 -42.205 -41.861 -41.585 -41.373 -41.222 -41.130 -41.097 -41.122 -41.202 -41.340 -41.533 -41.784 -42.092 -42.460 -42.888 -43.380 -43.937 -44.564 -45.264 -46.043 -46.909 -47.868 -48.929 -50.099 -51.269 -52.438 -53.608 0.03 -18.2823 -17.9221 -17.5654 -17.2123 -16.8629 -16.517 -16.1746 -15.8359 -15.5008 -15.1692 -14.8412 -14.5168 -14.196 -13.8788 -13.5651 -13.2551 -12.9486 -12.6457 -12.3464 -12.0507 -11.7585 -11.47 -11.185 -10.9036 -10.6258 -10.3516 -10.081 -9.8139 -9.5504 -9.2906 -9.0343 -8.7816 -8.5324 -8.2869 -8.0449 -7.8065 -7.5717 -7.3405 -7.1129 -6.8889 -6.6684 -6.4515 -6.2383 -6.0286 -5.8224 -5.6199 -5.4209 -5.2256 -5.0338 -4.8456 -4.661 -4.4799 -4.3025 -4.1286 -3.9584 -3.7917 -3.6286 -3.469 -3.3131 -3.1607 -3.012 -2.8668 -2.7252 -2.5871 -2.4527 -2.3218 -2.1946 -2.0709 -1.9508 -1.8343 -1.7213 -1.612 -1.5062 -1.4041 -1.3055 -1.2104 -1.119 -1.0312 -0.94692 -0.86624 -0.78915 -0.71564 -0.64572 -0.57938 -0.51663 -0.45746 -0.40187 -0.34987 -0.30145 -0.25662 -0.21537 -0.1777 -0.14362 -0.11312 -0.086211 -0.062882 -0.043137 -0.026977 -0.0144 -0.0054081 0 0.001824 6.3811e-005 -0.0052805 -0.014209 -0.026722 -0.042818 -0.062499 -0.085764 -0.11261 -0.14305 -0.17706 -0.21467 -0.25585 -0.30062 -0.34898 -0.40091 -0.45644 -0.51554 -0.57823 -0.64451 -0.71437 -0.78781 -0.86484 -0.94545 -1.0296 -1.1174 -1.2088 -1.3037 -1.4023 -1.5044 -1.6101 -1.7194 -1.8322 -1.9487 -2.0687 -2.1923 -2.3196 -2.4503 -2.5847 -2.7227 -2.8642 -3.0093 -3.158 -3.3103 -3.4662 -3.6257 -3.7887 -3.9554 -4.1256 -4.2994 -4.4768 -4.6577 -4.8423 -5.0304 -5.2221 -5.4174 -5.6163 -5.8188 -6.0249 -6.2345 -6.4477 -6.6645 -6.8849 -7.1089 -7.3365 -7.5676 -7.8023 -8.0406 -8.2825 -8.528 -8.7771 -9.0297 -9.286 -9.5458 -9.8092 -10.0762 -10.3468 -10.6209 -10.8986 -11.18 -11.4649 -11.7534 -12.0454 -12.3411 -12.6403 -12.9432 -13.2496 -13.5596 -13.8732 -14.1903 -14.5111 -14.8354 -15.1633 -15.4948 -15.8299 -16.1686 -16.5108 -16.8567 -17.2061 -17.5591 1.0 59758.6889 EW1 HH 17.1 25.24 0.050 -4.988e+10 5.199e+10 -5.695e+10 5.705e+10 -6.374e+10 6.044e+10 -7.014e+10 6.194e+10 -7.609e+10 6.137e+10 -8.153e+10 5.868e+10 -8.653e+10 5.389e+10 -9.125e+10 4.711e+10 -9.597e+10 3.846e+10 -1.011e+11 2.799e+10 -1.074e+11 1.552e+10 -1.157e+11 5.864e+08 -1.268e+11 -1.785e+10 -1.418e+11 -4.148e+10 -1.519e+11 -6.817e+10 -1.759e+11 -1.074e+11 -2.058e+11 -1.594e+11 -2.420e+11 -2.276e+11 -2.852e+11 -3.157e+11 -3.359e+11 -4.274e+11 -3.947e+11 -5.669e+11 -4.625e+11 -7.380e+11 -5.402e+11 -9.460e+11 -6.286e+11 -1.194e+12 -7.288e+11 -1.488e+12 -8.423e+11 -1.832e+12 -9.706e+11 -2.232e+12 -1.114e+12 -2.691e+12 -1.276e+12 -3.215e+12 -1.457e+12 -3.810e+12 -1.660e+12 -4.477e+12 -1.885e+12 -5.225e+12 -2.137e+12 -6.054e+12 -2.417e+12 -6.970e+12 -2.728e+12 -7.978e+12 -3.071e+12 -9.078e+12 -3.451e+12 -1.028e+13 -3.871e+12 -1.157e+13 -4.330e+12 -1.297e+13 -4.835e+12 -1.446e+13 -5.388e+12 -1.606e+13 -5.992e+12 -1.777e+13 -6.648e+12 -1.957e+13 -7.361e+12 -2.148e+13 -8.133e+12 -2.347e+13 -8.967e+12 -2.557e+13 -9.862e+12 -2.776e+13 -1.083e+13 -3.003e+13 -1.186e+13 -3.239e+13 -1.297e+13 -3.482e+13 -1.415e+13 -3.732e+13 -1.539e+13 -3.988e+13 -1.673e+13 -4.249e+13 -1.812e+13 -4.515e+13 -1.960e+13 -4.784e+13 -2.116e+13 -5.056e+13 -2.279e+13 -5.329e+13 -2.448e+13 -5.602e+13 -2.627e+13 -5.875e+13 -2.811e+13 -6.145e+13 -3.003e+13 -6.413e+13 -3.201e+13 -6.677e+13 -3.405e+13 -6.935e+13 -3.616e+13 -7.185e+13 -3.832e+13 -7.428e+13 -4.054e+13 -7.663e+13 -4.279e+13 -7.886e+13 -4.509e+13 -8.097e+13 -4.744e+13 -8.296e+13 -4.980e+13 -8.480e+13 -5.219e+13 -8.650e+13 -5.458e+13 -8.803e+13 -5.699e+13 -8.940e+13 -5.941e+13 -9.059e+13 -6.181e+13 -9.160e+13 -6.421e+13 -9.242e+13 -6.657e+13 -9.304e+13 -6.891e+13 -9.346e+13 -7.122e+13 -9.368e+13 -7.348e+13 -9.369e+13 -7.568e+13 -9.349e+13 -7.783e+13 -9.308e+13 -7.990e+13 -9.247e+13 -8.190e+13 -9.165e+13 -8.383e+13 -9.063e+13 -8.565e+13 -8.941e+13 -8.738e+13 -8.799e+13 -8.901e+13 -8.638e+13 -9.053e+13 -8.459e+13 -9.194e+13 -8.263e+13 -9.323e+13 -8.049e+13 -9.441e+13 -7.819e+13 -9.545e+13 -7.575e+13 -9.637e+13 -7.317e+13 -9.716e+13 -7.044e+13 -9.781e+13 -6.761e+13 -9.833e+13 -6.465e+13 -9.877e+13 -6.161e+13 -9.902e+13 -5.847e+13 -9.907e+13 -5.525e+13 -9.912e+13 -5.198e+13 -9.897e+13 -4.866e+13 -9.883e+13 -4.530e+13 -9.849e+13 -4.191e+13 -9.798e+13 -3.850e+13 -9.741e+13 -3.506e+13 -9.673e+13 -3.161e+13 -9.595e+13 -2.817e+13 -9.508e+13 -2.473e+13 -9.413e+13 -2.130e+13 -9.309e+13 -1.789e+13 -9.198e+13 -1.451e+13 -9.080e+13 -1.116e+13 -8.957e+13 -7.837e+12 -8.828e+13 -4.552e+12 -8.695e+13 -1.306e+12 -8.558e+13 1.905e+12 -8.417e+13 5.078e+12 -8.274e+13 8.214e+12 -8.130e+13 1.131e+13 -7.983e+13 1.438e+13 -7.835e+13 1.743e+13 -7.687e+13 2.044e+13 -7.538e+13 2.344e+13 -7.390e+13 2.642e+13 -7.242e+13 2.940e+13 -7.093e+13 3.237e+13 -6.944e+13 3.535e+13 -6.796e+13 3.834e+13 -6.648e+13 4.134e+13 -6.500e+13 4.437e+13 -6.352e+13 4.742e+13 -6.202e+13 5.052e+13 -6.052e+13 5.364e+13 -5.899e+13 5.681e+13 -5.745e+13 6.002e+13 -5.588e+13 6.328e+13 -5.428e+13 6.659e+13 -5.263e+13 6.995e+13 -5.095e+13 7.335e+13 -4.923e+13 7.682e+13 -4.747e+13 8.036e+13 -4.564e+13 8.393e+13 -4.377e+13 8.757e+13 -4.183e+13 9.123e+13 -3.982e+13 9.493e+13 -3.776e+13 9.867e+13 -3.562e+13 1.024e+14 -3.342e+13 1.062e+14 -3.116e+13 1.100e+14 -2.882e+13 1.138e+14 -2.644e+13 1.175e+14 -2.399e+13 1.213e+14 -2.148e+13 1.250e+14 -1.893e+13 1.286e+14 -1.632e+13 1.322e+14 -1.369e+13 1.358e+14 -1.101e+13 1.393e+14 -8.315e+12 1.427e+14 -5.597e+12 1.460e+14 -2.870e+12 1.493e+14 -1.410e+11 1.524e+14 2.583e+12 1.553e+14 5.290e+12 1.582e+14 7.973e+12 1.610e+14 1.062e+13 1.636e+14 1.322e+13 1.660e+14 1.579e+13 1.682e+14 1.828e+13 1.704e+14 2.069e+13 1.723e+14 2.304e+13 1.740e+14 2.528e+13 1.755e+14 2.744e+13 1.770e+14 2.949e+13 1.781e+14 3.143e+13 1.790e+14 3.325e+13 1.797e+14 3.495e+13 1.802e+14 3.651e+13 1.805e+14 3.794e+13 1.806e+14 3.922e+13 1.805e+14 4.038e+13 1.802e+14 4.140e+13 1.796e+14 4.227e+13 1.788e+14 4.299e+13 1.778e+14 4.357e+13 1.766e+14 4.400e+13 1.751e+14 4.427e+13 1.736e+14 4.439e+13 1.717e+14 4.437e+13 1.697e+14 4.420e+13 1.676e+14 4.390e+13 1.652e+14 4.347e+13 1.626e+14 4.290e+13 1.599e+14 4.221e+13 1.571e+14 4.140e+13 1.541e+14 4.048e+13 1.510e+14 3.946e+13 1.477e+14 3.834e+13 1.444e+14 3.714e+13 1.410e+14 3.584e+13 1.374e+14 3.448e+13 1.338e+14 3.305e+13 1.301e+14 3.157e+13 1.263e+14 3.005e+13 1.226e+14 2.847e+13 1.187e+14 2.688e+13 1.148e+14 2.525e+13 1.109e+14 2.362e+13 1.070e+14 2.198e+13 1.031e+14 2.035e+13 9.920e+13 1.871e+13 9.534e+13 1.711e+13 9.149e+13 1.552e+13 8.769e+13 1.395e+13 8.393e+13 1.244e+13 8.024e+13 1.095e+13 7.660e+13 9.516e+12 7.302e+13 8.131e+12 6.953e+13 6.799e+12 6.611e+13 5.524e+12 6.279e+13 4.309e+12 5.957e+13 3.154e+12 5.643e+13 2.061e+12 5.340e+13 1.034e+12 5.048e+13 7.129e+10 4.767e+13 -8.258e+11 4.495e+13 -1.658e+12 4.234e+13 -2.425e+12 3.984e+13 -3.130e+12 3.745e+13 -3.773e+12 3.516e+13 -4.357e+12 3.299e+13 -4.883e+12 3.092e+13 -5.355e+12 2.896e+13 -5.774e+12 2.710e+13 -6.144e+12 2.534e+13 -6.467e+12 2.368e+13 -6.746e+12 2.211e+13 -6.984e+12 2.064e+13 -7.184e+12 1.925e+13 -7.349e+12 1.795e+13 -7.481e+12 1.673e+13 -7.583e+12 1.558e+13 -7.656e+12 1.451e+13 -7.705e+12 1.350e+13 -7.729e+12 1.256e+13 -7.732e+12 1.167e+13 -7.716e+12 1.085e+13 -7.681e+12 1.008e+13 -7.627e+12 9.359e+12 -7.558e+12 8.683e+12 -7.473e+12 8.050e+12 -7.375e+12 7.458e+12 -7.262e+12 6.902e+12 -7.137e+12 6.383e+12 -6.999e+12 5.896e+12 -6.412e+12 5.092e+12 -6.258e+12 4.690e+12 -6.095e+12 4.313e+12 -5.923e+12 3.961e+12 -5.743e+12 3.632e+12 -5.556e+12 3.324e+12 -5.363e+12 3.038e+12 -5.164e+12 2.771e+12 -4.959e+12 2.523e+12 -4.750e+12 2.293e+12 -4.538e+12 2.079e+12 -4.323e+12 1.880e+12 -4.107e+12 1.697e+12 -3.890e+12 1.528e+12 -3.672e+12 1.373e+12 -3.457e+12 1.230e+12 -3.243e+12 1.100e+12 -3.032e+12 9.805e+11 -2.825e+12 8.721e+11 -2.623e+12 7.737e+11 -2.426e+12 6.846e+11 -2.235e+12 6.042e+11 -2.051e+12 5.320e+11 -1.874e+12 4.672e+11 -1.705e+12 4.093e+11 -1.544e+12 3.578e+11 -1.392e+12 3.120e+11 -1.248e+12 2.714e+11 -1.114e+12 2.357e+11 -9.877e+11 2.041e+11 -8.709e+11 1.765e+11 -7.630e+11 1.524e+11 -6.638e+11 1.313e+11 -5.733e+11 1.129e+11 -4.912e+11 9.694e+10 -4.171e+11 8.308e+10 -3.508e+11 7.109e+10 -2.919e+11 6.070e+10 -2.399e+11 5.171e+10 -1.946e+11 4.394e+10 -1.554e+11 3.721e+10 -1.218e+11 3.137e+10 -9.346e+10 2.630e+10 -6.992e+10 2.189e+10 -5.067e+10 1.805e+10 -3.581e+10 1.419e+10 -2.368e+10 1.168e+10 -1.471e+10 9.260e+09 -8.341e+09 7.240e+09 -4.102e+09 5.674e+09 -1.432e+09 4.687e+09 4.201e+08 4.402e+09 2.262e+09 4.752e+09 4.579e+09 5.488e+09 7.465e+09 6.384e+09 1.083e+10 7.312e+09 1.454e+10 8.207e+09 1.844e+10 9.033e+09 2.240e+10 9.773e+09 2.630e+10 1.042e+10 3.005e+10 1.096e+10 3.357e+10 1.139e+10 3.681e+10 1.171e+10 3.972e+10 1.193e+10 4.229e+10 1.204e+10 4.449e+10 1.205e+10 4.632e+10 1.195e+10 4.780e+10 1.176e+10 4.894e+10 1.148e+10 4.976e+10 1.112e+10 5.028e+10 1.068e+10 5.055e+10 1.017e+10 5.058e+10 9.609e+09 5.042e+10 8.991e+09 5.010e+10 8.331e+09 4.965e+10 7.635e+09 4.911e+10 6.910e+09 4.851e+10 6.163e+09 4.787e+10 5.402e+09 4.722e+10 4.629e+09 4.659e+10 3.850e+09 4.599e+10 3.068e+09 4.546e+10 2.285e+09 4.500e+10 1.503e+09 4.463e+10 7.220e+08 4.437e+10 -5.805e+07 4.424e+10 -8.397e+08 4.424e+10 -1.623e+09 4.436e+10 -2.411e+09 4.463e+10 -3.205e+09 4.504e+10 -4.009e+09 4.561e+10 -4.825e+09 4.632e+10 -5.656e+09 4.720e+10 -6.505e+09 4.822e+10 -7.375e+09 4.941e+10 -8.269e+09 5.075e+10 -9.189e+09 5.225e+10 -1.014e+10 5.390e+10 -1.111e+10 5.569e+10 -1.212e+10 5.763e+10 -1.316e+10 5.971e+10 -1.423e+10 6.191e+10 -1.533e+10 6.424e+10 -1.647e+10 6.667e+10 -1.763e+10 6.919e+10 -1.882e+10 7.180e+10 -2.004e+10 7.447e+10 -2.127e+10 7.718e+10 -2.253e+10 7.992e+10 -2.379e+10 8.266e+10 -2.506e+10 8.539e+10 -2.633e+10 8.807e+10 -2.760e+10 9.069e+10 -2.885e+10 9.322e+10 -3.008e+10 9.564e+10 -3.127e+10 9.792e+10 -3.243e+10 1.000e+11 -3.354e+10 1.020e+11 -3.459e+10 1.037e+11 -3.557e+10 1.051e+11 -3.648e+10 1.064e+11 -3.730e+10 1.073e+11 -3.803e+10 1.080e+11 -3.865e+10 1.083e+11 -3.917e+10 1.084e+11 -3.957e+10 1.082e+11 -3.985e+10 1.076e+11 -4.000e+10 1.067e+11 -4.003e+10 1.055e+11 -3.992e+10 1.040e+11 -3.968e+10 1.022e+11 -3.932e+10 1.001e+11 -3.882e+10 9.766e+10 -3.820e+10 9.499e+10 -3.746e+10 9.206e+10 -3.660e+10 8.890e+10 -3.563e+10 8.553e+10 -3.456e+10 8.199e+10 -3.339e+10 7.829e+10 -3.213e+10 7.445e+10 -3.080e+10 7.052e+10 -2.940e+10 6.650e+10 -2.795e+10 6.244e+10 -2.645e+10 5.835e+10 -2.491e+10 5.427e+10 -2.335e+10 5.022e+10 -2.178e+10 4.623e+10 -2.021e+10 4.231e+10 -1.865e+10 3.849e+10 -1.710e+10 3.479e+10 -1.558e+10 3.122e+10 -1.410e+10 2.781e+10 -1.267e+10 2.458e+10 -1.129e+10 2.152e+10 -9.978e+09 1.865e+10 -8.731e+09 1.599e+10 -7.558e+09 1.353e+10 -6.464e+09 1.128e+10 -5.453e+09 9.252e+09 -4.528e+09 7.434e+09 -3.690e+09 5.830e+09 -2.943e+09 4.437e+09 -2.285e+09 3.249e+09 -1.715e+09 2.261e+09 -1.234e+09 1.466e+09 -8.378e+08 8.551e+08 -5.237e+08 4.187e+08 -2.882e+08 1.467e+08 -1.273e+08 2.113e+07 -4.023e+07 -5.710e+07 -1.084e+07 -2.151e+08 2.463e+07 -4.920e+08 1.044e+08 -8.778e+08 2.281e+08 -1.361e+09 3.897e+08 -1.932e+09 5.828e+08 -2.580e+09 8.008e+08 -3.295e+09 1.037e+09 -4.069e+09 1.285e+09 -4.894e+09 1.540e+09 -5.763e+09 1.795e+09 -6.670e+09 2.045e+09 -7.610e+09 2.285e+09 -8.577e+09 2.511e+09 -9.570e+09 2.718e+09 -1.058e+10 2.904e+09 -1.162e+10 3.063e+09 -1.267e+10 3.195e+09 -1.375e+10 3.296e+09 -1.484e+10 3.364e+09 -1.595e+10 3.398e+09 -1.708e+10 3.395e+09 -1.824e+10 3.355e+09 -1.942e+10 3.277e+09 -2.063e+10 3.159e+09 -2.186e+10 3.002e+09 -2.313e+10 2.804e+09 -2.443e+10 2.565e+09 -2.577e+10 2.285e+09 -2.714e+10 1.964e+09 -2.856e+10 1.601e+09 -3.002e+10 1.198e+09 -3.152e+10 7.542e+08 -3.307e+10 2.704e+08 -3.467e+10 -2.521e+08 -3.631e+10 -8.131e+08 -3.801e+10 -1.411e+09 -3.977e+10 -2.044e+09 -4.157e+10 -2.711e+09 -4.341e+10 -3.407e+09 -4.529e+10 -4.130e+09 -4.722e+10 -4.877e+09 -4.918e+10 -5.643e+09 -5.117e+10 -6.424e+09 -5.318e+10 -7.214e+09 -5.522e+10 -8.009e+09 -5.727e+10 -8.801e+09 -5.933e+10 -9.585e+09 -6.138e+10 -1.035e+10 -6.342e+10 -1.110e+10 -6.544e+10 -1.182e+10 -6.743e+10 -1.250e+10 -6.938e+10 -1.313e+10 -7.127e+10 -1.371e+10 -7.309e+10 -1.424e+10 -7.484e+10 -1.469e+10 -7.649e+10 -1.507e+10 -7.804e+10 -1.537e+10 -7.947e+10 -1.559e+10 -8.077e+10 -1.571e+10 -8.193e+10 -1.574e+10 -8.293e+10 -1.567e+10 -8.377e+10 -1.550e+10 -8.444e+10 -1.523e+10 -8.492e+10 -1.486e+10 -8.522e+10 -1.439e+10 -8.532e+10 -1.381e+10 -8.522e+10 -1.314e+10 -8.492e+10 -1.238e+10 -8.441e+10 -1.153e+10 -8.371e+10 -1.060e+10 -8.281e+10 -9.593e+09 -8.171e+10 -8.519e+09 -8.044e+10 -7.386e+09 -7.899e+10 -6.201e+09 -7.738e+10 -4.974e+09 -7.563e+10 -3.717e+09 -7.375e+10 -2.434e+09 -7.174e+10 -1.133e+09 -6.963e+10 1.769e+08 -6.743e+10 1.490e+09 -6.516e+10 2.798e+09 -6.284e+10 4.093e+09 -6.048e+10 5.372e+09 -5.811e+10 6.629e+09 -5.573e+10 7.860e+09 -5.337e+10 9.062e+09 -5.105e+10 1.024e+10 -4.877e+10 1.138e+10 -4.655e+10 1.249e+10 -4.441e+10 1.358e+10 -4.234e+10 1.464e+10 -4.037e+10 1.569e+10 -3.850e+10 1.672e+10 -3.673e+10 1.775e+10 -3.507e+10 1.877e+10 -3.352e+10 1.980e+10 -3.207e+10 2.085e+10 -3.074e+10 2.192e+10 -2.950e+10 2.302e+10 -2.837e+10 2.415e+10 -2.733e+10 2.533e+10 -2.638e+10 2.655e+10 -2.552e+10 2.782e+10 -2.474e+10 2.914e+10 -2.403e+10 3.052e+10 -2.340e+10 3.195e+10 -2.284e+10 3.343e+10 -2.234e+10 3.496e+10 -2.191e+10 3.654e+10 -2.155e+10 3.816e+10 -2.124e+10 3.982e+10 -2.101e+10 4.151e+10 -2.084e+10 4.324e+10 -2.074e+10 4.499e+10 -2.071e+10 4.676e+10 -2.076e+10 4.856e+10 -2.089e+10 5.038e+10 -2.110e+10 5.220e+10 -2.139e+10 5.404e+10 -2.176e+10 5.588e+10 -2.223e+10 5.772e+10 -2.279e+10 5.956e+10 -2.344e+10 6.140e+10 -2.418e+10 6.324e+10 -2.501e+10 6.507e+10 -2.595e+10 6.690e+10 -2.697e+10 6.871e+10 -2.809e+10 7.052e+10 -2.930e+10 7.231e+10 -3.060e+10 7.409e+10 -3.198e+10 7.586e+10 -3.344e+10 7.760e+10 -3.499e+10 7.933e+10 -3.660e+10 8.103e+10 -3.828e+10 8.270e+10 -4.003e+10 8.433e+10 -4.182e+10 8.594e+10 -4.366e+10 8.750e+10 -4.554e+10 8.901e+10 -4.745e+10 9.048e+10 -4.938e+10 9.189e+10 -5.131e+10 9.325e+10 -5.325e+10 9.454e+10 -5.518e+10 9.576e+10 -5.709e+10 9.691e+10 -5.897e+10 9.798e+10 -6.081e+10 9.897e+10 -6.260e+10 9.988e+10 -6.432e+10 1.007e+11 -6.598e+10 1.014e+11 -6.755e+10 1.020e+11 -6.904e+10 1.026e+11 -7.042e+10 1.030e+11 -7.170e+10 1.033e+11 -7.286e+10 1.036e+11 -7.388e+10 1.037e+11 -7.478e+10 1.037e+11 -7.553e+10 1.036e+11 -7.614e+10 1.034e+11 -7.660e+10 1.031e+11 -7.691e+10 1.027e+11 -7.705e+10 1.022e+11 -7.704e+10 1.015e+11 -7.686e+10 1.008e+11 -7.652e+10 9.987e+10 -7.602e+10 9.886e+10 -7.536e+10 9.775e+10 -7.455e+10 9.652e+10 -7.358e+10 9.517e+10 -7.246e+10 9.371e+10 -7.121e+10 9.215e+10 -6.982e+10 9.048e+10 -6.830e+10 8.871e+10 -6.667e+10 8.685e+10 -6.493e+10 8.489e+10 0.005 -51.560 -50.669 -49.777 -48.885 -47.994 -47.178 -46.446 -45.792 -45.212 -44.702 -44.259 -43.879 -43.562 -43.305 -43.110 -42.973 -42.895 -42.876 -42.917 -43.019 -43.183 -43.411 -43.706 -44.071 -44.510 -45.027 -45.630 -46.324 -47.120 -48.027 -49.062 -50.241 -51.588 -53.134 -54.921 -57.006 -59.465 -62.391 -65.824 -69.402 -71.887 -72.547 -72.703 -73.972 -76.288 -74.982 -69.431 -64.248 -60.325 -57.212 -54.638 -52.453 -50.561 -48.902 -47.435 -46.129 -44.961 -43.915 -42.976 -42.136 -41.386 -40.717 -40.127 -39.609 -39.160 -38.778 -38.460 -38.205 -38.010 -37.877 -37.804 -37.791 -37.840 -37.950 -38.123 -38.362 -38.668 -39.046 -39.497 -40.026 -40.639 -41.341 -42.138 -43.040 -44.054 -45.192 -46.464 -47.879 -49.448 -51.171 -53.041 -55.037 -57.129 -59.308 -61.622 -64.021 -65.480 -64.081 -60.350 -56.571 -53.340 -50.596 -48.233 -46.170 -44.349 -42.729 -41.279 -39.977 -38.805 -37.749 -36.799 -35.945 -35.181 -34.501 -33.901 -33.376 -32.925 -32.546 -32.237 -31.998 -31.829 -31.731 -31.704 -31.753 -31.878 -32.085 -32.379 -32.766 -33.254 -33.855 -34.582 -35.454 -36.494 -37.735 -39.224 -41.030 -43.260 -46.097 -49.890 -55.295 -61.081 -58.419 -55.414 -54.677 -56.009 -58.236 -54.525 -47.907 -42.909 -39.011 -35.801 -33.058 -30.655 -28.513 -26.577 -24.812 -23.189 -21.687 -20.290 -18.986 -17.765 -16.617 -15.537 -14.517 -13.554 -12.642 -11.779 -10.960 -10.184 -9.447 -8.748 -8.085 -7.455 -6.858 -6.291 -5.755 -5.247 -4.767 -4.313 -3.886 -3.483 -3.105 -2.751 -2.420 -2.112 -1.826 -1.562 -1.320 -1.099 -0.899 -0.719 -0.560 -0.420 -0.301 -0.202 -0.122 -0.063 -0.022 -0.001 0.000 -0.018 -0.055 -0.112 -0.188 -0.284 -0.400 -0.536 -0.692 -0.869 -1.067 -1.285 -1.525 -1.786 -2.070 -2.376 -2.705 -3.058 -3.434 -3.836 -4.263 -4.717 -5.198 -5.707 -6.245 -6.815 -7.416 -8.051 -8.721 -9.429 -10.176 -10.966 -11.800 -12.684 -13.620 -14.613 -15.670 -16.798 -18.003 -19.298 -20.696 -22.214 -23.876 -25.715 -27.780 -30.146 -32.940 -36.412 -41.158 -49.538 -55.570 -48.569 -43.632 -41.417 -40.268 -39.751 -39.684 -39.969 -40.539 -41.315 -42.155 -42.792 -42.882 -42.255 -41.101 -39.754 -38.435 -37.238 -36.191 -35.295 -34.538 -33.910 -33.398 -32.993 -32.686 -32.470 -32.339 -32.290 -32.318 -32.421 -32.597 -32.846 -33.168 -33.561 -34.029 -34.572 -35.193 -35.896 -36.686 -37.567 -38.546 -39.634 -40.839 -42.177 -43.662 -45.317 -47.166 -49.245 -51.595 -54.270 -57.334 -60.858 -64.866 -68.946 -70.767 -68.694 -64.888 -61.228 -58.061 -55.347 -53.016 -51.003 -49.255 -47.731 -46.397 -45.229 -44.206 -43.312 -42.533 -41.859 -41.282 -40.795 -40.391 -40.066 -39.818 -39.641 -39.536 -39.500 -39.533 -39.632 -39.800 -40.035 -40.340 -40.717 -41.167 -41.695 -42.304 -42.999 -43.788 -44.676 -45.675 -46.795 -48.050 -49.457 -51.035 -52.802 -54.773 -56.938 -59.224 -61.434 -63.236 -64.387 -65.004 -65.440 -65.870 -66.001 -65.169 -63.148 -60.504 -57.857 -55.456 -53.339 -51.480 -49.843 -48.394 -47.107 -45.961 -44.937 -44.023 -43.206 -42.478 -41.831 -41.259 -40.756 -40.319 -39.943 -39.626 -39.364 -39.156 -39.000 -38.895 -38.838 -38.830 -38.870 -38.957 -39.090 -39.271 -39.499 -39.775 -40.100 -40.474 -40.899 -41.376 -41.907 -42.493 -43.139 -43.846 -44.618 -45.448 -46.279 -47.109 -47.939 0.03 -17.8205 -17.4681 -17.1192 -16.7737 -16.4319 -16.0935 -15.7587 -15.4273 -15.0995 -14.7753 -14.4545 -14.1373 -13.8235 -13.5133 -13.2066 -12.9035 -12.6038 -12.3077 -12.0151 -11.726 -11.4405 -11.1584 -10.8799 -10.6049 -10.3334 -10.0655 -9.801 -9.5401 -9.2827 -9.0288 -8.7784 -8.5316 -8.2883 -8.0485 -7.8122 -7.5794 -7.3502 -7.1245 -6.9022 -6.6836 -6.4684 -6.2568 -6.0486 -5.844 -5.6429 -5.4454 -5.2513 -5.0608 -4.8738 -4.6903 -4.5104 -4.3339 -4.161 -3.9916 -3.8257 -3.6633 -3.5045 -3.3492 -3.1973 -3.0491 -2.9043 -2.7631 -2.6253 -2.4911 -2.3604 -2.2333 -2.1096 -1.9895 -1.8729 -1.7598 -1.6502 -1.5442 -1.4417 -1.3427 -1.2472 -1.1552 -1.0668 -0.98183 -0.90042 -0.82253 -0.74816 -0.67732 -0.60999 -0.54618 -0.48589 -0.42913 -0.37588 -0.32615 -0.27994 -0.23725 -0.19809 -0.16244 -0.13031 -0.1017 -0.076612 -0.055044 -0.036995 -0.022466 -0.011458 -0.0039689 0 0.00044896 -0.002622 -0.0092129 -0.019324 -0.032954 -0.050105 -0.070776 -0.094966 -0.12268 -0.15391 -0.18866 -0.22693 -0.26872 -0.31403 -0.36286 -0.41521 -0.47108 -0.53047 -0.59338 -0.65981 -0.72976 -0.80323 -0.88021 -0.96072 -1.0448 -1.1323 -1.2234 -1.318 -1.4161 -1.5177 -1.6228 -1.7315 -1.8437 -1.9594 -2.0786 -2.2014 -2.3277 -2.4574 -2.5908 -2.7276 -2.8679 -3.0118 -3.1592 -3.3101 -3.4645 -3.6225 -3.7839 -3.9489 -4.1174 -4.2895 -4.465 -4.6441 -4.8267 -5.0128 -5.2024 -5.3955 -5.5922 -5.7924 -5.9961 -6.2033 -6.4141 -6.6283 -6.8461 -7.0674 -7.2923 -7.5206 -7.7525 -7.9879 -8.2268 -8.4692 -8.7151 -8.9646 -9.2176 -9.4741 -9.7341 -9.9977 -10.2647 -10.5353 -10.8094 -11.087 -11.3682 -11.6529 -11.941 -12.2327 -12.528 -12.8267 -13.129 -13.4348 -13.7441 -14.0569 -14.3732 -14.6931 -15.0165 -15.3434 -15.6738 -16.0078 -16.3452 -16.6862 -17.0307 -17.3787 1.0 56065.87 EW1 HV 17.1 25.24 0.050 -2.284e+09 9.098e+10 -4.294e+09 9.797e+10 -7.280e+09 1.033e+11 -1.129e+10 1.069e+11 -1.634e+10 1.085e+11 -2.242e+10 1.083e+11 -2.952e+10 1.063e+11 -3.767e+10 1.027e+11 -4.698e+10 9.797e+10 -5.773e+10 9.238e+10 -7.053e+10 8.628e+10 -8.626e+10 7.985e+10 -1.063e+11 7.296e+10 -1.324e+11 6.503e+10 -1.758e+11 5.807e+10 -2.230e+11 4.356e+10 -2.839e+11 2.319e+10 -3.610e+11 -5.220e+09 -4.572e+11 -4.404e+10 -5.754e+11 -9.578e+10 -7.187e+11 -1.629e+11 -8.904e+11 -2.481e+11 -1.094e+12 -3.541e+11 -1.334e+12 -4.834e+11 -1.612e+12 -6.388e+11 -1.934e+12 -8.232e+11 -2.303e+12 -1.039e+12 -2.723e+12 -1.289e+12 -3.200e+12 -1.577e+12 -3.735e+12 -1.903e+12 -4.334e+12 -2.271e+12 -5.003e+12 -2.682e+12 -5.742e+12 -3.140e+12 -6.557e+12 -3.644e+12 -7.452e+12 -4.198e+12 -8.429e+12 -4.802e+12 -9.491e+12 -5.456e+12 -1.064e+13 -6.161e+12 -1.189e+13 -6.918e+12 -1.323e+13 -7.726e+12 -1.466e+13 -8.584e+12 -1.619e+13 -9.491e+12 -1.781e+13 -1.044e+13 -1.953e+13 -1.144e+13 -2.136e+13 -1.248e+13 -2.328e+13 -1.356e+13 -2.530e+13 -1.467e+13 -2.742e+13 -1.581e+13 -2.963e+13 -1.699e+13 -3.193e+13 -1.817e+13 -3.432e+13 -1.938e+13 -3.679e+13 -2.058e+13 -3.935e+13 -2.181e+13 -4.198e+13 -2.301e+13 -4.469e+13 -2.421e+13 -4.746e+13 -2.539e+13 -5.030e+13 -2.655e+13 -5.318e+13 -2.768e+13 -5.612e+13 -2.876e+13 -5.910e+13 -2.979e+13 -6.210e+13 -3.077e+13 -6.514e+13 -3.170e+13 -6.820e+13 -3.255e+13 -7.125e+13 -3.333e+13 -7.432e+13 -3.402e+13 -7.737e+13 -3.463e+13 -8.038e+13 -3.514e+13 -8.337e+13 -3.555e+13 -8.631e+13 -3.585e+13 -8.920e+13 -3.604e+13 -9.202e+13 -3.612e+13 -9.476e+13 -3.608e+13 -9.741e+13 -3.592e+13 -9.997e+13 -3.564e+13 -1.024e+14 -3.523e+13 -1.047e+14 -3.470e+13 -1.069e+14 -3.405e+13 -1.090e+14 -3.327e+13 -1.109e+14 -3.237e+13 -1.127e+14 -3.134e+13 -1.143e+14 -3.020e+13 -1.158e+14 -2.895e+13 -1.170e+14 -2.757e+13 -1.181e+14 -2.610e+13 -1.190e+14 -2.451e+13 -1.198e+14 -2.284e+13 -1.203e+14 -2.106e+13 -1.207e+14 -1.920e+13 -1.209e+14 -1.726e+13 -1.210e+14 -1.524e+13 -1.208e+14 -1.315e+13 -1.205e+14 -1.100e+13 -1.199e+14 -8.795e+12 -1.192e+14 -6.543e+12 -1.185e+14 -4.249e+12 -1.175e+14 -1.921e+12 -1.163e+14 4.339e+11 -1.151e+14 2.808e+12 -1.137e+14 5.198e+12 -1.121e+14 7.594e+12 -1.104e+14 9.988e+12 -1.087e+14 1.238e+13 -1.068e+14 1.475e+13 -1.049e+14 1.711e+13 -1.028e+14 1.945e+13 -1.007e+14 2.177e+13 -9.845e+13 2.405e+13 -9.616e+13 2.631e+13 -9.380e+13 2.853e+13 -9.139e+13 3.072e+13 -8.892e+13 3.286e+13 -8.642e+13 3.497e+13 -8.387e+13 3.704e+13 -8.129e+13 3.907e+13 -7.870e+13 4.105e+13 -7.608e+13 4.299e+13 -7.346e+13 4.489e+13 -7.081e+13 4.677e+13 -6.819e+13 4.860e+13 -6.555e+13 5.041e+13 -6.291e+13 5.220e+13 -6.030e+13 5.397e+13 -5.768e+13 5.571e+13 -5.508e+13 5.746e+13 -5.249e+13 5.919e+13 -4.992e+13 6.093e+13 -4.735e+13 6.267e+13 -4.478e+13 6.442e+13 -4.223e+13 6.619e+13 -3.968e+13 6.798e+13 -3.712e+13 6.979e+13 -3.457e+13 7.164e+13 -3.200e+13 7.352e+13 -2.941e+13 7.544e+13 -2.682e+13 7.739e+13 -2.420e+13 7.940e+13 -2.155e+13 8.143e+13 -1.887e+13 8.351e+13 -1.615e+13 8.563e+13 -1.339e+13 8.779e+13 -1.059e+13 9.000e+13 -7.733e+12 9.226e+13 -4.829e+12 9.456e+13 -1.870e+12 9.690e+13 1.144e+12 9.927e+13 4.211e+12 1.016e+14 7.333e+12 1.041e+14 1.051e+13 1.065e+14 1.374e+13 1.089e+14 1.701e+13 1.113e+14 2.032e+13 1.137e+14 2.367e+13 1.161e+14 2.706e+13 1.186e+14 3.048e+13 1.209e+14 3.390e+13 1.232e+14 3.735e+13 1.255e+14 4.080e+13 1.277e+14 4.423e+13 1.299e+14 4.765e+13 1.319e+14 5.104e+13 1.339e+14 5.439e+13 1.359e+14 5.770e+13 1.378e+14 6.094e+13 1.395e+14 6.411e+13 1.411e+14 6.719e+13 1.426e+14 7.018e+13 1.441e+14 7.306e+13 1.453e+14 7.583e+13 1.465e+14 7.847e+13 1.474e+14 8.097e+13 1.483e+14 8.332e+13 1.491e+14 8.553e+13 1.497e+14 8.757e+13 1.501e+14 8.945e+13 1.504e+14 9.115e+13 1.506e+14 9.267e+13 1.506e+14 9.401e+13 1.504e+14 9.517e+13 1.502e+14 9.613e+13 1.498e+14 9.689e+13 1.493e+14 9.748e+13 1.485e+14 9.787e+13 1.477e+14 9.805e+13 1.467e+14 9.811e+13 1.456e+14 9.787e+13 1.444e+14 9.751e+13 1.429e+14 9.695e+13 1.415e+14 9.622e+13 1.399e+14 9.530e+13 1.381e+14 9.421e+13 1.363e+14 9.295e+13 1.344e+14 9.154e+13 1.324e+14 8.997e+13 1.302e+14 8.824e+13 1.280e+14 8.638e+13 1.257e+14 8.439e+13 1.233e+14 8.227e+13 1.208e+14 8.003e+13 1.184e+14 7.770e+13 1.157e+14 7.527e+13 1.130e+14 7.275e+13 1.102e+14 7.015e+13 1.075e+14 6.750e+13 1.046e+14 6.479e+13 1.017e+14 6.204e+13 9.879e+13 5.927e+13 9.585e+13 5.646e+13 9.288e+13 5.365e+13 8.989e+13 5.085e+13 8.689e+13 4.806e+13 8.389e+13 4.529e+13 8.089e+13 4.256e+13 7.792e+13 3.987e+13 7.495e+13 3.723e+13 7.202e+13 3.464e+13 6.912e+13 3.213e+13 6.626e+13 2.969e+13 6.344e+13 2.732e+13 6.069e+13 2.503e+13 5.798e+13 2.284e+13 5.533e+13 2.074e+13 5.276e+13 1.873e+13 5.025e+13 1.681e+13 4.784e+13 1.499e+13 4.549e+13 1.326e+13 4.321e+13 1.164e+13 4.101e+13 1.010e+13 3.889e+13 8.663e+12 3.686e+13 7.317e+12 3.490e+13 6.061e+12 3.302e+13 4.893e+12 3.123e+13 3.810e+12 2.952e+13 2.808e+12 2.788e+13 1.885e+12 2.632e+13 1.037e+12 2.484e+13 2.597e+11 2.343e+13 -4.501e+11 2.209e+13 -1.096e+12 2.082e+13 -1.681e+12 1.961e+13 -2.210e+12 1.847e+13 -2.685e+12 1.740e+13 -3.110e+12 1.637e+13 -3.489e+12 1.541e+13 -3.822e+12 1.449e+13 -4.116e+12 1.362e+13 -4.371e+12 1.280e+13 -4.590e+12 1.202e+13 -4.775e+12 1.128e+13 -4.927e+12 1.059e+13 -5.051e+12 9.932e+12 -5.145e+12 9.304e+12 -5.213e+12 8.709e+12 -5.256e+12 8.145e+12 -5.274e+12 7.609e+12 -5.271e+12 7.102e+12 -5.524e+12 6.968e+12 -5.479e+12 6.489e+12 -5.415e+12 6.034e+12 -5.333e+12 5.602e+12 -5.235e+12 5.193e+12 -5.120e+12 4.806e+12 -4.993e+12 4.441e+12 -4.854e+12 4.096e+12 -4.703e+12 3.771e+12 -4.542e+12 3.464e+12 -4.372e+12 3.176e+12 -4.196e+12 2.905e+12 -4.013e+12 2.651e+12 -3.826e+12 2.414e+12 -3.636e+12 2.193e+12 -3.444e+12 1.987e+12 -3.252e+12 1.795e+12 -3.059e+12 1.618e+12 -2.868e+12 1.454e+12 -2.680e+12 1.303e+12 -2.494e+12 1.164e+12 -2.313e+12 1.036e+12 -2.137e+12 9.193e+11 -1.966e+12 8.127e+11 -1.801e+12 7.159e+11 -1.642e+12 6.281e+11 -1.490e+12 5.487e+11 -1.346e+12 4.772e+11 -1.209e+12 4.131e+11 -1.080e+12 3.557e+11 -9.585e+11 3.047e+11 -8.453e+11 2.595e+11 -7.400e+11 2.197e+11 -6.429e+11 1.847e+11 -5.537e+11 1.543e+11 -4.724e+11 1.279e+11 -3.988e+11 1.051e+11 -3.328e+11 8.567e+10 -2.740e+11 6.915e+10 -2.222e+11 5.526e+10 -1.770e+11 4.366e+10 -1.381e+11 3.405e+10 -1.051e+11 2.620e+10 -7.761e+10 1.983e+10 -5.511e+10 1.471e+10 -3.738e+10 1.053e+10 -2.364e+10 7.374e+09 -1.348e+10 4.979e+09 -6.539e+09 3.156e+09 -2.353e+09 1.815e+09 -3.686e+08 9.883e+08 6.283e+08 9.251e+08 2.412e+09 1.349e+09 5.327e+09 1.815e+09 9.115e+09 2.240e+09 1.351e+10 2.622e+09 1.826e+10 2.972e+09 2.314e+10 3.298e+09 2.800e+10 3.605e+09 3.268e+10 3.894e+09 3.708e+10 4.163e+09 4.110e+10 4.409e+09 4.471e+10 4.630e+09 4.785e+10 4.822e+09 5.052e+10 4.982e+09 5.272e+10 5.108e+09 5.446e+10 5.199e+09 5.577e+10 5.255e+09 5.669e+10 5.277e+09 5.724e+10 5.267e+09 5.747e+10 5.227e+09 5.742e+10 5.159e+09 5.713e+10 5.068e+09 5.663e+10 4.956e+09 5.596e+10 4.826e+09 5.515e+10 4.681e+09 5.424e+10 4.522e+09 5.324e+10 4.350e+09 5.220e+10 4.167e+09 5.111e+10 3.973e+09 5.001e+10 3.766e+09 4.891e+10 3.546e+09 4.782e+10 3.312e+09 4.676e+10 3.059e+09 4.573e+10 2.788e+09 4.475e+10 2.493e+09 4.384e+10 2.172e+09 4.300e+10 1.821e+09 4.223e+10 1.437e+09 4.155e+10 1.016e+09 4.096e+10 5.558e+08 4.047e+10 5.086e+07 4.010e+10 -5.025e+08 3.986e+10 -1.108e+09 3.974e+10 -1.770e+09 3.977e+10 -2.495e+09 3.996e+10 -3.285e+09 4.031e+10 -4.147e+09 4.083e+10 -5.088e+09 4.154e+10 -6.111e+09 4.245e+10 -7.223e+09 4.355e+10 -8.430e+09 4.486e+10 -9.734e+09 4.637e+10 -1.114e+10 4.809e+10 -1.265e+10 5.002e+10 -1.426e+10 5.215e+10 -1.598e+10 5.448e+10 -1.778e+10 5.698e+10 -1.968e+10 5.965e+10 -2.165e+10 6.247e+10 -2.369e+10 6.540e+10 -2.577e+10 6.843e+10 -2.787e+10 7.152e+10 -2.999e+10 7.464e+10 -3.209e+10 7.776e+10 -3.415e+10 8.084e+10 -3.615e+10 8.384e+10 -3.807e+10 8.671e+10 -3.988e+10 8.944e+10 -4.157e+10 9.197e+10 -4.312e+10 9.427e+10 -4.450e+10 9.632e+10 -4.572e+10 9.809e+10 -4.675e+10 9.956e+10 -4.759e+10 1.007e+11 -4.825e+10 1.015e+11 -4.870e+10 1.020e+11 -4.897e+10 1.022e+11 -4.905e+10 1.019e+11 -4.896e+10 1.014e+11 -4.869e+10 1.005e+11 -4.826e+10 9.928e+10 -4.768e+10 9.775e+10 -4.697e+10 9.593e+10 -4.612e+10 9.383e+10 -4.516e+10 9.149e+10 -4.408e+10 8.891e+10 -4.292e+10 8.612e+10 -4.166e+10 8.314e+10 -4.033e+10 8.001e+10 -3.892e+10 7.673e+10 -3.745e+10 7.333e+10 -3.593e+10 6.983e+10 -3.435e+10 6.626e+10 -3.274e+10 6.263e+10 -3.108e+10 5.896e+10 -2.939e+10 5.528e+10 -2.768e+10 5.159e+10 -2.595e+10 4.792e+10 -2.420e+10 4.429e+10 -2.245e+10 4.070e+10 -2.070e+10 3.719e+10 -1.897e+10 3.376e+10 -1.725e+10 3.044e+10 -1.557e+10 2.723e+10 -1.393e+10 2.415e+10 -1.235e+10 2.122e+10 -1.082e+10 1.845e+10 -9.368e+09 1.585e+10 -8.000e+09 1.343e+10 -6.724e+09 1.120e+10 -5.548e+09 9.168e+09 -4.480e+09 7.340e+09 -3.523e+09 5.721e+09 -2.684e+09 4.312e+09 -1.963e+09 3.110e+09 -1.361e+09 2.116e+09 -8.754e+08 1.324e+09 -5.034e+08 7.281e+08 -2.390e+08 3.203e+08 -7.559e+07 9.137e+07 -2.134e+06 -3.410e+06 3.435e+07 -1.189e+08 1.171e+08 -3.575e+08 2.680e+08 -7.263e+08 4.726e+08 -1.213e+09 7.187e+08 -1.804e+09 9.951e+08 -2.489e+09 1.292e+09 -3.255e+09 1.598e+09 -4.092e+09 1.905e+09 -4.990e+09 2.205e+09 -5.941e+09 2.489e+09 -6.936e+09 2.752e+09 -7.970e+09 2.987e+09 -9.038e+09 3.190e+09 -1.014e+10 3.357e+09 -1.126e+10 3.485e+09 -1.241e+10 3.570e+09 -1.359e+10 3.612e+09 -1.480e+10 3.608e+09 -1.603e+10 3.557e+09 -1.730e+10 3.458e+09 -1.860e+10 3.310e+09 -1.994e+10 3.112e+09 -2.132e+10 2.862e+09 -2.275e+10 2.560e+09 -2.423e+10 2.205e+09 -2.576e+10 1.795e+09 -2.736e+10 1.327e+09 -2.903e+10 8.008e+08 -3.076e+10 2.143e+08 -3.257e+10 -4.355e+08 -3.446e+10 -1.150e+09 -3.643e+10 -1.931e+09 -3.848e+10 -2.782e+09 -4.063e+10 -3.705e+09 -4.286e+10 -4.701e+09 -4.518e+10 -5.772e+09 -4.759e+10 -6.918e+09 -5.006e+10 -8.138e+09 -5.262e+10 -9.434e+09 -5.523e+10 -1.080e+10 -5.791e+10 -1.224e+10 -6.063e+10 -1.375e+10 -6.338e+10 -1.531e+10 -6.616e+10 -1.694e+10 -6.894e+10 -1.861e+10 -7.170e+10 -2.032e+10 -7.444e+10 -2.205e+10 -7.713e+10 -2.381e+10 -7.976e+10 -2.557e+10 -8.229e+10 -2.732e+10 -8.472e+10 -2.905e+10 -8.701e+10 -3.075e+10 -8.916e+10 -3.239e+10 -9.114e+10 -3.396e+10 -9.294e+10 -3.545e+10 -9.453e+10 -3.684e+10 -9.591e+10 -3.811e+10 -9.706e+10 -3.926e+10 -9.796e+10 -4.027e+10 -9.862e+10 -4.113e+10 -9.902e+10 -4.183e+10 -9.917e+10 -4.235e+10 -9.905e+10 -4.271e+10 -9.867e+10 -4.288e+10 -9.803e+10 -4.288e+10 -9.714e+10 -4.269e+10 -9.601e+10 -4.232e+10 -9.464e+10 -4.177e+10 -9.305e+10 -4.105e+10 -9.124e+10 -4.016e+10 -8.923e+10 -3.912e+10 -8.704e+10 -3.793e+10 -8.468e+10 -3.661e+10 -8.216e+10 -3.516e+10 -7.950e+10 -3.361e+10 -7.672e+10 -3.195e+10 -7.383e+10 -3.022e+10 -7.085e+10 -2.841e+10 -6.779e+10 -2.654e+10 -6.467e+10 -2.463e+10 -6.150e+10 -2.270e+10 -5.830e+10 -2.075e+10 -5.509e+10 -1.880e+10 -5.189e+10 -1.686e+10 -4.870e+10 -1.495e+10 -4.554e+10 -1.308e+10 -4.244e+10 -1.126e+10 -3.940e+10 -9.494e+09 -3.644e+10 -7.802e+09 -3.358e+10 -6.189e+09 -3.083e+10 -4.661e+09 -2.821e+10 -3.224e+09 -2.573e+10 -1.881e+09 -2.340e+10 -6.323e+08 -2.125e+10 5.228e+08 -1.927e+10 1.591e+09 -1.747e+10 2.584e+09 -1.587e+10 3.513e+09 -1.446e+10 4.400e+09 -1.325e+10 5.268e+09 -1.222e+10 6.145e+09 -1.137e+10 7.062e+09 -1.069e+10 8.051e+09 -1.014e+10 9.139e+09 -9.720e+09 1.035e+10 -9.404e+09 1.171e+10 -9.177e+09 1.322e+10 -9.027e+09 1.490e+10 -8.946e+09 1.675e+10 -8.932e+09 1.875e+10 -8.984e+09 2.091e+10 -9.109e+09 2.323e+10 -9.312e+09 2.568e+10 -9.607e+09 2.825e+10 -1.000e+10 3.095e+10 -1.050e+10 3.374e+10 -1.112e+10 3.661e+10 -1.187e+10 3.956e+10 -1.276e+10 4.257e+10 -1.379e+10 4.562e+10 -1.497e+10 4.871e+10 -1.631e+10 5.181e+10 -1.780e+10 5.493e+10 -1.946e+10 5.805e+10 -2.129e+10 6.116e+10 -2.327e+10 6.426e+10 -2.541e+10 6.733e+10 -2.770e+10 7.037e+10 -3.015e+10 7.337e+10 -3.274e+10 7.633e+10 -3.547e+10 7.924e+10 -3.833e+10 8.209e+10 -4.131e+10 8.489e+10 -4.440e+10 8.763e+10 -4.759e+10 9.030e+10 -5.088e+10 9.290e+10 -5.424e+10 9.543e+10 -5.768e+10 9.788e+10 -6.117e+10 1.002e+11 -6.472e+10 1.025e+11 -6.829e+10 1.047e+11 -7.189e+10 1.068e+11 -7.550e+10 1.087e+11 -7.910e+10 1.106e+11 -8.269e+10 1.123e+11 -8.625e+10 1.139e+11 -8.976e+10 1.154e+11 -9.322e+10 1.167e+11 -9.660e+10 1.179e+11 -9.990e+10 1.189e+11 -1.031e+11 1.198e+11 -1.062e+11 1.204e+11 -1.091e+11 1.209e+11 -1.119e+11 1.212e+11 -1.145e+11 1.213e+11 -1.169e+11 1.212e+11 -1.191e+11 1.209e+11 -1.211e+11 1.205e+11 -1.228e+11 1.197e+11 -1.243e+11 1.188e+11 -1.256e+11 1.177e+11 -1.265e+11 1.164e+11 -1.272e+11 1.148e+11 -1.275e+11 1.131e+11 -1.276e+11 1.112e+11 -1.273e+11 1.092e+11 -1.267e+11 1.069e+11 -1.258e+11 1.045e+11 -1.246e+11 1.020e+11 -1.231e+11 9.938e+10 -1.213e+11 9.664e+10 -1.191e+11 9.380e+10 -1.167e+11 9.089e+10 0.005 -51.627 -50.681 -49.736 -48.790 -47.845 -46.978 -46.198 -45.499 -44.876 -44.323 -43.838 -43.418 -43.060 -42.762 -42.524 -42.345 -42.222 -42.157 -42.149 -42.199 -42.308 -42.478 -42.710 -43.007 -43.371 -43.808 -44.321 -44.916 -45.602 -46.386 -47.281 -48.301 -49.466 -50.802 -52.342 -54.135 -56.242 -58.738 -61.634 -64.524 -66.102 -65.514 -63.858 -62.346 -61.246 -60.490 -59.944 -59.450 -58.835 -57.965 -56.799 -55.406 -53.899 -52.385 -50.930 -49.569 -48.315 -47.171 -46.135 -45.200 -44.362 -43.614 -42.951 -42.369 -41.864 -41.432 -41.072 -40.781 -40.557 -40.400 -40.309 -40.284 -40.326 -40.435 -40.613 -40.862 -41.185 -41.585 -42.066 -42.631 -43.286 -44.037 -44.889 -45.850 -46.925 -48.119 -49.430 -50.851 -52.357 -53.907 -55.445 -56.924 -58.352 -59.834 -61.555 -63.553 -64.808 -63.352 -59.655 -55.958 -52.829 -50.194 -47.937 -45.975 -44.247 -42.714 -41.344 -40.117 -39.014 -38.023 -37.134 -36.338 -35.629 -35.003 -34.455 -33.982 -33.583 -33.255 -32.999 -32.813 -32.699 -32.659 -32.694 -32.807 -33.003 -33.286 -33.664 -34.144 -34.737 -35.456 -36.318 -37.345 -38.564 -40.009 -41.720 -43.729 -46.008 -48.303 -49.882 -50.060 -49.406 -48.849 -48.899 -49.902 -52.298 -55.233 -52.022 -45.775 -41.063 -37.391 -34.365 -31.774 -29.499 -27.466 -25.625 -23.941 -22.390 -20.952 -19.612 -18.360 -17.184 -16.079 -15.036 -14.051 -13.120 -12.238 -11.402 -10.608 -9.856 -9.141 -8.462 -7.818 -7.206 -6.626 -6.076 -5.554 -5.061 -4.594 -4.153 -3.737 -3.346 -2.979 -2.635 -2.314 -2.015 -1.739 -1.483 -1.249 -1.036 -0.843 -0.670 -0.518 -0.385 -0.272 -0.179 -0.105 -0.051 -0.016 0.000 -0.004 -0.026 -0.068 -0.129 -0.209 -0.309 -0.429 -0.568 -0.728 -0.908 -1.109 -1.330 -1.573 -1.837 -2.123 -2.432 -2.763 -3.118 -3.496 -3.900 -4.329 -4.784 -5.266 -5.776 -6.316 -6.886 -7.488 -8.123 -8.794 -9.502 -10.249 -11.038 -11.871 -12.754 -13.688 -14.680 -15.735 -16.860 -18.062 -19.353 -20.747 -22.260 -23.916 -25.748 -27.805 -30.162 -32.945 -36.404 -41.137 -49.500 -55.513 -48.489 -43.527 -41.282 -40.099 -39.545 -39.437 -39.684 -40.232 -41.033 -42.006 -42.973 -43.604 -43.529 -42.686 -41.411 -40.043 -38.761 -37.629 -36.659 -35.843 -35.169 -34.622 -34.191 -33.867 -33.641 -33.507 -33.460 -33.496 -33.612 -33.807 -34.079 -34.427 -34.854 -35.359 -35.944 -36.613 -37.369 -38.215 -39.158 -40.202 -41.355 -42.622 -44.011 -45.524 -47.164 -48.922 -50.783 -52.721 -54.710 -56.761 -58.958 -61.464 -64.133 -64.941 -62.416 -58.636 -55.274 -52.505 -50.196 -48.234 -46.543 -45.071 -43.781 -42.645 -41.642 -40.758 -39.980 -39.296 -38.700 -38.186 -37.746 -37.378 -37.076 -36.840 -36.665 -36.551 -36.496 -36.499 -36.558 -36.675 -36.848 -37.079 -37.369 -37.717 -38.127 -38.601 -39.141 -39.750 -40.433 -41.195 -42.041 -42.980 -44.020 -45.172 -46.451 -47.874 -49.463 -51.245 -53.260 -55.557 -58.201 -61.273 -64.861 -69.007 -73.625 -79.022 -86.121 -83.319 -73.294 -67.444 -63.273 -60.015 -57.352 -55.115 -53.201 -51.545 -50.098 -48.827 -47.706 -46.716 -45.840 -45.068 -44.389 -43.795 -43.279 -42.837 -42.463 -42.154 -41.907 -41.719 -41.589 -41.514 -41.494 -41.527 -41.613 -41.751 -41.942 -42.185 -42.483 -42.834 -43.242 -43.706 -44.229 -44.814 -45.464 -46.181 -46.971 -47.826 -48.680 -49.535 -50.390 0.03 -18.4636 -18.0999 -17.7399 -17.3835 -17.0308 -16.6816 -16.3361 -15.9941 -15.6558 -15.3211 -14.99 -14.6626 -14.3387 -14.0185 -13.7019 -13.3889 -13.0795 -12.7737 -12.4715 -12.173 -11.8781 -11.5868 -11.2991 -11.015 -10.7346 -10.4577 -10.1845 -9.9149 -9.6489 -9.3865 -9.1277 -8.8726 -8.6211 -8.3731 -8.1288 -7.8882 -7.6511 -7.4176 -7.1878 -6.9616 -6.739 -6.52 -6.3046 -6.0929 -5.8847 -5.6802 -5.4793 -5.282 -5.0883 -4.8983 -4.7118 -4.529 -4.3498 -4.1742 -4.0022 -3.8338 -3.6691 -3.508 -3.3505 -3.1966 -3.0463 -2.8996 -2.7565 -2.6171 -2.4813 -2.3491 -2.2205 -2.0955 -1.9742 -1.8564 -1.7423 -1.6318 -1.5249 -1.4216 -1.322 -1.2259 -1.1335 -1.0447 -0.95949 -0.87791 -0.79994 -0.72559 -0.65486 -0.58774 -0.52424 -0.46436 -0.40809 -0.35544 -0.3064 -0.26098 -0.21917 -0.18098 -0.14641 -0.11545 -0.088112 -0.064387 -0.044277 -0.027784 -0.014907 -0.0056454 0 0.0020294 0.00044283 -0.0047597 -0.013578 -0.026013 -0.042063 -0.06173 -0.085012 -0.11191 -0.14242 -0.17655 -0.2143 -0.25566 -0.30064 -0.34924 -0.40145 -0.45727 -0.51671 -0.57977 -0.64645 -0.71674 -0.79064 -0.86816 -0.9493 -1.0341 -1.1224 -1.2144 -1.31 -1.4092 -1.5121 -1.6185 -1.7286 -1.8423 -1.9596 -2.0805 -2.205 -2.3331 -2.4649 -2.6003 -2.7393 -2.8819 -3.0281 -3.178 -3.3314 -3.4885 -3.6492 -3.8135 -3.9814 -4.1529 -4.3281 -4.5069 -4.6892 -4.8752 -5.0649 -5.2581 -5.4549 -5.6554 -5.8595 -6.0672 -6.2785 -6.4934 -6.712 -6.9341 -7.1599 -7.3893 -7.6223 -7.8589 -8.0992 -8.343 -8.5905 -8.8416 -9.0963 -9.3546 -9.6166 -9.8821 -10.1513 -10.4241 -10.7005 -10.9805 -11.2641 -11.5514 -11.8422 -12.1367 -12.4348 -12.7365 -13.0418 -13.3508 -13.6633 -13.9795 -14.2993 -14.6227 -14.9497 -15.2804 -15.6146 -15.9525 -16.294 -16.6391 -16.9878 -17.3401 -17.6961 1.0 56065.87 EW1 VV 17.1 25.24 0.050 6.516e+10 2.468e+10 6.807e+10 2.804e+10 6.924e+10 3.167e+10 6.861e+10 3.554e+10 6.622e+10 3.961e+10 6.221e+10 4.389e+10 5.679e+10 4.845e+10 5.022e+10 5.347e+10 4.273e+10 5.931e+10 3.439e+10 6.659e+10 2.493e+10 7.619e+10 1.363e+10 8.918e+10 -7.836e+08 1.068e+11 -2.012e+10 1.304e+11 -5.472e+10 1.896e+11 -9.712e+10 2.355e+11 -1.537e+11 2.929e+11 -2.278e+11 3.630e+11 -3.223e+11 4.475e+11 -4.412e+11 5.485e+11 -5.875e+11 6.675e+11 -7.654e+11 8.068e+11 -9.786e+11 9.687e+11 -1.231e+12 1.155e+12 -1.526e+12 1.369e+12 -1.869e+12 1.613e+12 -2.264e+12 1.889e+12 -2.715e+12 2.200e+12 -3.225e+12 2.548e+12 -3.800e+12 2.937e+12 -4.442e+12 3.369e+12 -5.156e+12 3.847e+12 -5.946e+12 4.373e+12 -6.813e+12 4.948e+12 -7.763e+12 5.577e+12 -8.797e+12 6.260e+12 -9.915e+12 6.999e+12 -1.112e+13 7.796e+12 -1.242e+13 8.654e+12 -1.380e+13 9.570e+12 -1.528e+13 1.055e+13 -1.684e+13 1.159e+13 -1.849e+13 1.269e+13 -2.023e+13 1.386e+13 -2.203e+13 1.509e+13 -2.393e+13 1.638e+13 -2.589e+13 1.774e+13 -2.793e+13 1.915e+13 -3.003e+13 2.062e+13 -3.218e+13 2.216e+13 -3.438e+13 2.375e+13 -3.662e+13 2.540e+13 -3.890e+13 2.712e+13 -4.119e+13 2.888e+13 -4.351e+13 3.070e+13 -4.584e+13 3.257e+13 -4.817e+13 3.449e+13 -5.048e+13 3.647e+13 -5.278e+13 3.848e+13 -5.504e+13 4.054e+13 -5.727e+13 4.264e+13 -5.946e+13 4.480e+13 -6.161e+13 4.698e+13 -6.367e+13 4.920e+13 -6.568e+13 5.144e+13 -6.760e+13 5.371e+13 -6.945e+13 5.600e+13 -7.119e+13 5.830e+13 -7.281e+13 6.062e+13 -7.433e+13 6.294e+13 -7.573e+13 6.524e+13 -7.702e+13 6.754e+13 -7.816e+13 6.982e+13 -7.917e+13 7.208e+13 -8.004e+13 7.431e+13 -8.076e+13 7.649e+13 -8.132e+13 7.863e+13 -8.173e+13 8.071e+13 -8.198e+13 8.273e+13 -8.206e+13 8.469e+13 -8.199e+13 8.657e+13 -8.175e+13 8.836e+13 -8.134e+13 9.007e+13 -8.076e+13 9.168e+13 -8.002e+13 9.319e+13 -7.912e+13 9.461e+13 -7.804e+13 9.591e+13 -7.681e+13 9.711e+13 -7.544e+13 9.819e+13 -7.391e+13 9.916e+13 -7.222e+13 1.000e+14 -7.040e+13 1.008e+14 -6.845e+13 1.014e+14 -6.638e+13 1.019e+14 -6.419e+13 1.024e+14 -6.188e+13 1.027e+14 -5.948e+13 1.029e+14 -5.698e+13 1.030e+14 -5.439e+13 1.030e+14 -5.174e+13 1.030e+14 -4.902e+13 1.028e+14 -4.623e+13 1.026e+14 -4.341e+13 1.023e+14 -4.054e+13 1.020e+14 -3.763e+13 1.015e+14 -3.470e+13 1.011e+14 -3.174e+13 1.005e+14 -2.876e+13 9.992e+13 -2.578e+13 9.928e+13 -2.279e+13 9.860e+13 -1.980e+13 9.787e+13 -1.680e+13 9.712e+13 -1.382e+13 9.632e+13 -1.085e+13 9.551e+13 -7.885e+12 9.466e+13 -4.933e+12 9.380e+13 -1.994e+12 9.292e+13 9.313e+11 9.201e+13 3.841e+12 9.110e+13 6.739e+12 9.016e+13 9.624e+12 8.924e+13 1.249e+13 8.829e+13 1.536e+13 8.733e+13 1.822e+13 8.638e+13 2.107e+13 8.543e+13 2.392e+13 8.447e+13 2.678e+13 8.352e+13 2.963e+13 8.257e+13 3.250e+13 8.162e+13 3.538e+13 8.069e+13 3.828e+13 7.975e+13 4.120e+13 7.883e+13 4.415e+13 7.791e+13 4.713e+13 7.700e+13 5.014e+13 7.609e+13 5.319e+13 7.521e+13 5.629e+13 7.431e+13 5.943e+13 7.343e+13 6.262e+13 7.257e+13 6.585e+13 7.169e+13 6.914e+13 7.084e+13 7.249e+13 6.998e+13 7.590e+13 6.913e+13 7.937e+13 6.828e+13 8.287e+13 6.742e+13 8.643e+13 6.656e+13 9.003e+13 6.569e+13 9.366e+13 6.481e+13 9.732e+13 6.393e+13 1.010e+14 6.304e+13 1.047e+14 6.212e+13 1.084e+14 6.121e+13 1.122e+14 6.027e+13 1.158e+14 5.933e+13 1.195e+14 5.837e+13 1.231e+14 5.739e+13 1.267e+14 5.640e+13 1.301e+14 5.539e+13 1.336e+14 5.438e+13 1.369e+14 5.336e+13 1.401e+14 5.233e+13 1.433e+14 5.129e+13 1.463e+14 5.024e+13 1.492e+14 4.919e+13 1.519e+14 4.814e+13 1.544e+14 4.709e+13 1.568e+14 4.604e+13 1.590e+14 4.500e+13 1.610e+14 4.397e+13 1.629e+14 4.295e+13 1.646e+14 4.194e+13 1.660e+14 4.095e+13 1.673e+14 3.999e+13 1.684e+14 3.904e+13 1.692e+14 3.813e+13 1.699e+14 3.725e+13 1.703e+14 3.639e+13 1.706e+14 3.557e+13 1.707e+14 3.480e+13 1.706e+14 3.406e+13 1.702e+14 3.336e+13 1.696e+14 3.269e+13 1.689e+14 3.206e+13 1.680e+14 3.149e+13 1.668e+14 3.095e+13 1.655e+14 3.046e+13 1.640e+14 3.003e+13 1.623e+14 2.965e+13 1.604e+14 2.931e+13 1.584e+14 2.902e+13 1.561e+14 2.877e+13 1.538e+14 2.856e+13 1.512e+14 2.840e+13 1.485e+14 2.827e+13 1.457e+14 2.817e+13 1.427e+14 2.810e+13 1.395e+14 2.806e+13 1.362e+14 2.804e+13 1.328e+14 2.802e+13 1.293e+14 2.803e+13 1.256e+14 2.804e+13 1.219e+14 2.806e+13 1.180e+14 2.806e+13 1.141e+14 2.805e+13 1.101e+14 2.805e+13 1.062e+14 2.802e+13 1.022e+14 2.798e+13 9.803e+13 2.791e+13 9.399e+13 2.782e+13 8.995e+13 2.770e+13 8.591e+13 2.755e+13 8.191e+13 2.737e+13 7.794e+13 2.717e+13 7.403e+13 2.693e+13 7.020e+13 2.666e+13 6.645e+13 2.636e+13 6.278e+13 2.604e+13 5.920e+13 2.568e+13 5.573e+13 2.530e+13 5.237e+13 2.490e+13 4.914e+13 2.447e+13 4.601e+13 2.403e+13 4.301e+13 2.357e+13 4.013e+13 2.310e+13 3.738e+13 2.261e+13 3.477e+13 2.212e+13 3.226e+13 2.161e+13 2.989e+13 2.109e+13 2.764e+13 2.058e+13 2.550e+13 2.005e+13 2.349e+13 1.952e+13 2.159e+13 1.900e+13 1.980e+13 1.847e+13 1.811e+13 1.795e+13 1.654e+13 1.744e+13 1.505e+13 1.693e+13 1.367e+13 1.642e+13 1.237e+13 1.592e+13 1.117e+13 1.544e+13 1.003e+13 1.495e+13 8.978e+12 1.448e+13 8.002e+12 1.401e+13 7.091e+12 1.355e+13 6.247e+12 1.310e+13 5.463e+12 1.266e+13 4.737e+12 1.222e+13 4.066e+12 1.179e+13 3.446e+12 1.138e+13 2.874e+12 1.096e+13 2.349e+12 1.055e+13 1.868e+12 1.015e+13 1.426e+12 9.759e+12 1.025e+12 9.365e+12 6.592e+11 8.981e+12 3.290e+11 8.602e+12 3.730e+10 9.474e+12 -2.680e+11 9.058e+12 -5.395e+11 8.647e+12 -7.784e+11 8.241e+12 -9.865e+11 7.842e+12 -1.166e+12 7.449e+12 -1.317e+12 7.065e+12 -1.443e+12 6.688e+12 -1.545e+12 6.319e+12 -1.625e+12 5.959e+12 -1.683e+12 5.607e+12 -1.722e+12 5.264e+12 -1.743e+12 4.931e+12 -1.748e+12 4.609e+12 -1.738e+12 4.298e+12 -1.716e+12 3.997e+12 -1.682e+12 3.709e+12 -1.638e+12 3.432e+12 -1.585e+12 3.167e+12 -1.525e+12 2.914e+12 -1.459e+12 2.674e+12 -1.388e+12 2.445e+12 -1.313e+12 2.229e+12 -1.235e+12 2.025e+12 -1.156e+12 1.833e+12 -1.076e+12 1.652e+12 -9.952e+11 1.483e+12 -9.153e+11 1.325e+12 -8.366e+11 1.179e+12 -7.597e+11 1.043e+12 -6.852e+11 9.177e+11 -6.135e+11 8.025e+11 -5.450e+11 6.971e+11 -4.800e+11 6.012e+11 -4.189e+11 5.144e+11 -3.618e+11 4.362e+11 -3.091e+11 3.664e+11 -2.607e+11 3.044e+11 -2.167e+11 2.497e+11 -1.773e+11 2.021e+11 -1.423e+11 1.610e+11 -1.116e+11 1.258e+11 -8.524e+10 9.618e+10 -6.295e+10 7.160e+10 -4.451e+10 5.155e+10 -2.942e+10 3.581e+10 -1.852e+10 2.325e+10 -1.009e+10 1.404e+10 -4.421e+09 7.562e+09 -1.143e+09 3.407e+09 2.933e+08 1.245e+09 1.258e+09 5.138e+08 3.356e+09 -2.516e+08 6.647e+09 -1.729e+09 1.082e+10 -3.832e+09 1.560e+10 -6.375e+09 2.075e+10 -9.188e+09 2.606e+10 -1.211e+10 3.133e+10 -1.503e+10 3.644e+10 -1.785e+10 4.125e+10 -2.048e+10 4.568e+10 -2.289e+10 4.966e+10 -2.505e+10 5.315e+10 -2.692e+10 5.613e+10 -2.851e+10 5.860e+10 -2.982e+10 6.058e+10 -3.086e+10 6.208e+10 -3.165e+10 6.314e+10 -3.221e+10 6.379e+10 -3.256e+10 6.409e+10 -3.273e+10 6.407e+10 -3.274e+10 6.377e+10 -3.260e+10 6.324e+10 -3.236e+10 6.252e+10 -3.201e+10 6.164e+10 -3.159e+10 6.064e+10 -3.111e+10 5.954e+10 -3.058e+10 5.837e+10 -3.002e+10 5.715e+10 -2.945e+10 5.590e+10 -2.887e+10 5.465e+10 -2.830e+10 5.339e+10 -2.775e+10 5.215e+10 -2.723e+10 5.093e+10 -2.675e+10 4.975e+10 -2.632e+10 4.862e+10 -2.596e+10 4.754e+10 -2.566e+10 4.652e+10 -2.545e+10 4.557e+10 -2.532e+10 4.469e+10 -2.529e+10 4.391e+10 -2.537e+10 4.322e+10 -2.557e+10 4.264e+10 -2.590e+10 4.217e+10 -2.637e+10 4.183e+10 -2.699e+10 4.163e+10 -2.777e+10 4.158e+10 -2.873e+10 4.169e+10 -2.987e+10 4.196e+10 -3.120e+10 4.241e+10 -3.273e+10 4.304e+10 -3.448e+10 4.387e+10 -3.645e+10 4.489e+10 -3.863e+10 4.611e+10 -4.105e+10 4.753e+10 -4.368e+10 4.915e+10 -4.653e+10 5.097e+10 -4.959e+10 5.298e+10 -5.283e+10 5.518e+10 -5.625e+10 5.755e+10 -5.982e+10 6.008e+10 -6.350e+10 6.274e+10 -6.727e+10 6.553e+10 -7.110e+10 6.842e+10 -7.493e+10 7.137e+10 -7.873e+10 7.436e+10 -8.247e+10 7.737e+10 -8.609e+10 8.034e+10 -8.956e+10 8.327e+10 -9.283e+10 8.610e+10 -9.588e+10 8.880e+10 -9.866e+10 9.135e+10 -1.012e+11 9.371e+10 -1.033e+11 9.585e+10 -1.051e+11 9.775e+10 -1.066e+11 9.939e+10 -1.077e+11 1.008e+11 -1.085e+11 1.018e+11 -1.088e+11 1.026e+11 -1.088e+11 1.030e+11 -1.084e+11 1.030e+11 -1.076e+11 1.028e+11 -1.065e+11 1.021e+11 -1.051e+11 1.012e+11 -1.033e+11 9.992e+10 -1.013e+11 9.833e+10 -9.898e+10 9.643e+10 -9.640e+10 9.424e+10 -9.359e+10 9.177e+10 -9.056e+10 8.905e+10 -8.734e+10 8.609e+10 -8.395e+10 8.292e+10 -8.040e+10 7.955e+10 -7.673e+10 7.601e+10 -7.295e+10 7.232e+10 -6.907e+10 6.851e+10 -6.513e+10 6.460e+10 -6.113e+10 6.062e+10 -5.711e+10 5.659e+10 -5.308e+10 5.254e+10 -4.907e+10 4.849e+10 -4.509e+10 4.447e+10 -4.117e+10 4.052e+10 -3.733e+10 3.664e+10 -3.359e+10 3.287e+10 -2.997e+10 2.923e+10 -2.649e+10 2.574e+10 -2.318e+10 2.242e+10 -2.005e+10 1.929e+10 -1.711e+10 1.638e+10 -1.439e+10 1.368e+10 -1.189e+10 1.122e+10 -9.632e+09 9.002e+09 -7.612e+09 7.032e+09 -5.838e+09 5.315e+09 -4.312e+09 3.848e+09 -3.031e+09 2.631e+09 -1.991e+09 1.659e+09 -1.184e+09 9.241e+08 -5.989e+08 4.164e+08 -2.227e+08 1.257e+08 -3.673e+07 8.146e+06 4.865e+07 -1.195e+08 2.056e+08 -3.888e+08 5.022e+08 -8.122e+08 9.211e+08 -1.375e+09 1.441e+09 -2.059e+09 2.041e+09 -2.851e+09 2.701e+09 -3.735e+09 3.404e+09 -4.693e+09 4.129e+09 -5.715e+09 4.861e+09 -6.784e+09 5.583e+09 -7.889e+09 6.283e+09 -9.019e+09 6.948e+09 -1.016e+10 7.568e+09 -1.131e+10 8.134e+09 -1.246e+10 8.640e+09 -1.360e+10 9.080e+09 -1.472e+10 9.452e+09 -1.583e+10 9.753e+09 -1.691e+10 9.984e+09 -1.796e+10 1.015e+10 -1.900e+10 1.024e+10 -2.001e+10 1.027e+10 -2.099e+10 1.023e+10 -2.195e+10 1.014e+10 -2.289e+10 9.991e+09 -2.382e+10 9.794e+09 -2.473e+10 9.552e+09 -2.563e+10 9.269e+09 -2.653e+10 8.948e+09 -2.744e+10 8.595e+09 -2.835e+10 8.211e+09 -2.927e+10 7.801e+09 -3.021e+10 7.367e+09 -3.119e+10 6.913e+09 -3.219e+10 6.439e+09 -3.323e+10 5.945e+09 -3.432e+10 5.433e+09 -3.545e+10 4.902e+09 -3.663e+10 4.353e+09 -3.786e+10 3.785e+09 -3.916e+10 3.198e+09 -4.051e+10 2.590e+09 -4.192e+10 1.960e+09 -4.340e+10 1.307e+09 -4.493e+10 6.304e+08 -4.652e+10 -7.181e+07 -4.817e+10 -8.000e+08 -4.986e+10 -1.555e+09 -5.159e+10 -2.338e+09 -5.336e+10 -3.146e+09 -5.514e+10 -3.981e+09 -5.693e+10 -4.839e+09 -5.872e+10 -5.717e+09 -6.049e+10 -6.612e+09 -6.222e+10 -7.518e+09 -6.390e+10 -8.430e+09 -6.551e+10 -9.340e+09 -6.703e+10 -1.024e+10 -6.844e+10 -1.112e+10 -6.973e+10 -1.197e+10 -7.088e+10 -1.279e+10 -7.188e+10 -1.355e+10 -7.270e+10 -1.425e+10 -7.335e+10 -1.488e+10 -7.381e+10 -1.542e+10 -7.407e+10 -1.588e+10 -7.412e+10 -1.623e+10 -7.397e+10 -1.647e+10 -7.361e+10 -1.660e+10 -7.305e+10 -1.661e+10 -7.228e+10 -1.649e+10 -7.132e+10 -1.625e+10 -7.016e+10 -1.589e+10 -6.882e+10 -1.542e+10 -6.731e+10 -1.483e+10 -6.564e+10 -1.413e+10 -6.381e+10 -1.333e+10 -6.185e+10 -1.244e+10 -5.976e+10 -1.146e+10 -5.756e+10 -1.042e+10 -5.526e+10 -9.321e+09 -5.288e+10 -8.175e+09 -5.042e+10 -6.996e+09 -4.791e+10 -5.797e+09 -4.535e+10 -4.589e+09 -4.276e+10 -3.386e+09 -4.016e+10 -2.199e+09 -3.756e+10 -1.037e+09 -3.498e+10 8.825e+07 -3.244e+10 1.170e+09 -2.994e+10 2.202e+09 -2.751e+10 3.178e+09 -2.517e+10 4.096e+09 -2.293e+10 4.959e+09 -2.080e+10 5.767e+09 -1.881e+10 6.531e+09 -1.695e+10 7.263e+09 -1.526e+10 7.979e+09 -1.371e+10 8.703e+09 -1.232e+10 9.464e+09 -1.108e+10 1.029e+10 -9.966e+09 1.122e+10 -8.958e+09 1.229e+10 -8.032e+09 1.353e+10 -7.156e+09 1.496e+10 -6.302e+09 1.662e+10 -5.446e+09 1.850e+10 -4.567e+09 2.063e+10 -3.652e+09 2.301e+10 -2.696e+09 2.563e+10 -1.698e+09 2.848e+10 -6.642e+08 3.155e+10 3.935e+08 3.484e+10 1.458e+09 3.833e+10 2.518e+09 4.200e+10 3.552e+09 4.582e+10 4.543e+09 4.977e+10 5.472e+09 5.384e+10 6.321e+09 5.798e+10 7.072e+09 6.218e+10 7.713e+09 6.642e+10 8.228e+09 7.065e+10 8.609e+09 7.486e+10 8.848e+09 7.902e+10 8.940e+09 8.311e+10 8.882e+09 8.710e+10 8.675e+09 9.098e+10 8.321e+09 9.472e+10 7.822e+09 9.832e+10 7.185e+09 1.018e+11 6.415e+09 1.050e+11 5.519e+09 1.081e+11 4.505e+09 1.110e+11 3.380e+09 1.137e+11 2.151e+09 1.163e+11 8.239e+08 1.186e+11 -5.941e+08 1.208e+11 -2.097e+09 1.228e+11 -3.683e+09 1.247e+11 -5.346e+09 1.264e+11 -7.083e+09 1.279e+11 -8.895e+09 1.293e+11 -1.078e+10 1.305e+11 -1.273e+10 1.316e+11 -1.476e+10 1.326e+11 -1.685e+10 1.334e+11 -1.902e+10 1.342e+11 -2.125e+10 1.348e+11 -2.356e+10 1.353e+11 -2.593e+10 1.357e+11 -2.836e+10 1.359e+11 -3.086e+10 1.361e+11 -3.340e+10 1.361e+11 -3.598e+10 1.360e+11 -3.860e+10 1.358e+11 -4.124e+10 1.354e+11 -4.390e+10 1.349e+11 -4.657e+10 1.343e+11 -4.922e+10 1.334e+11 -5.184e+10 1.324e+11 -5.441e+10 1.312e+11 -5.691e+10 1.299e+11 -5.932e+10 1.283e+11 -6.162e+10 1.266e+11 -6.379e+10 1.247e+11 -6.580e+10 1.226e+11 -6.764e+10 1.203e+11 -6.928e+10 1.179e+11 -7.071e+10 1.152e+11 -7.192e+10 1.124e+11 -7.289e+10 1.095e+11 -7.360e+10 1.065e+11 -7.406e+10 1.033e+11 0.005 -51.974 -50.954 -49.934 -48.914 -47.894 -46.958 -46.113 -45.354 -44.672 -44.064 -43.525 -43.052 -42.642 -42.292 -42.002 -41.769 -41.592 -41.471 -41.405 -41.395 -41.441 -41.543 -41.703 -41.922 -42.203 -42.547 -42.959 -43.441 -43.998 -44.637 -45.363 -46.186 -47.116 -48.166 -49.352 -50.696 -52.224 -53.972 -55.981 -58.292 -60.903 -63.598 -65.658 -66.234 -65.499 -64.361 -63.305 -62.352 -61.356 -60.171 -58.746 -57.134 -55.441 -53.766 -52.171 -50.685 -49.320 -48.075 -46.946 -45.927 -45.009 -44.187 -43.454 -42.805 -42.235 -41.742 -41.321 -40.969 -40.686 -40.470 -40.320 -40.234 -40.215 -40.260 -40.372 -40.552 -40.803 -41.125 -41.522 -41.996 -42.552 -43.192 -43.921 -44.742 -45.657 -46.664 -47.755 -48.911 -50.093 -51.240 -52.262 -53.067 -53.590 -53.825 -53.814 -53.604 -53.212 -52.621 -51.801 -50.749 -49.502 -48.129 -46.703 -45.283 -43.911 -42.611 -41.394 -40.264 -39.223 -38.268 -37.398 -36.608 -35.897 -35.261 -34.698 -34.207 -33.785 -33.433 -33.150 -32.936 -32.792 -32.720 -32.721 -32.798 -32.956 -33.199 -33.534 -33.969 -34.512 -35.178 -35.982 -36.945 -38.093 -39.459 -41.080 -42.984 -45.140 -47.289 -48.689 -48.640 -47.691 -46.730 -46.194 -46.282 -47.227 -49.585 -54.238 -57.085 -47.870 -41.981 -37.838 -34.579 -31.858 -29.504 -27.422 -25.549 -23.845 -22.280 -20.834 -19.490 -18.235 -17.059 -15.954 -14.914 -13.932 -13.003 -12.124 -11.292 -10.503 -9.754 -9.043 -8.369 -7.729 -7.121 -6.545 -5.999 -5.481 -4.992 -4.529 -4.092 -3.680 -3.293 -2.929 -2.589 -2.271 -1.976 -1.703 -1.451 -1.220 -1.009 -0.820 -0.650 -0.500 -0.370 -0.260 -0.170 -0.098 -0.046 -0.014 0.000 -0.006 -0.030 -0.073 -0.135 -0.217 -0.318 -0.439 -0.580 -0.740 -0.921 -1.122 -1.343 -1.586 -1.850 -2.135 -2.442 -2.772 -3.125 -3.502 -3.902 -4.328 -4.779 -5.256 -5.761 -6.294 -6.857 -7.450 -8.076 -8.735 -9.429 -10.161 -10.932 -11.745 -12.602 -13.508 -14.466 -15.480 -16.555 -17.698 -18.916 -20.218 -21.615 -23.121 -24.753 -26.533 -28.490 -30.660 -33.087 -35.811 -38.807 -41.766 -43.770 -44.093 -43.415 -42.665 -42.222 -42.147 -42.418 -42.984 -43.757 -44.555 -45.040 -44.838 -43.884 -42.509 -41.051 -39.687 -38.480 -37.441 -36.561 -35.826 -35.222 -34.737 -34.361 -34.085 -33.901 -33.806 -33.794 -33.863 -34.010 -34.233 -34.533 -34.908 -35.360 -35.890 -36.500 -37.193 -37.971 -38.838 -39.799 -40.857 -42.015 -43.276 -44.639 -46.094 -47.623 -49.189 -50.736 -52.190 -53.474 -54.533 -55.330 -55.812 -55.876 -55.400 -54.367 -52.920 -51.275 -49.602 -48.003 -46.519 -45.166 -43.941 -42.839 -41.850 -40.966 -40.178 -39.480 -38.865 -38.329 -37.865 -37.471 -37.142 -36.877 -36.672 -36.527 -36.440 -36.409 -36.434 -36.515 -36.651 -36.842 -37.090 -37.395 -37.758 -38.182 -38.669 -39.221 -39.843 -40.538 -41.311 -42.169 -43.119 -44.172 -45.338 -46.632 -48.074 -49.686 -51.504 -53.572 -55.954 -58.746 -62.099 -66.280 -71.819 -80.077 -92.832 -95.264 -84.671 -75.527 -69.356 -64.882 -61.411 -58.600 -56.260 -54.273 -52.562 -51.076 -49.776 -48.634 -47.629 -46.744 -45.966 -45.285 -44.692 -44.180 -43.743 -43.377 -43.078 -42.843 -42.670 -42.555 -42.498 -42.497 -42.551 -42.661 -42.825 -43.045 -43.320 -43.652 -44.042 -44.491 -45.001 -45.576 -46.218 -46.931 -47.719 -48.577 -49.434 -50.291 -51.149 0.03 -19.1745 -18.7977 -18.4246 -18.0552 -17.6896 -17.3277 -16.9696 -16.6152 -16.2645 -15.9176 -15.5744 -15.235 -14.8993 -14.5673 -14.2391 -13.9146 -13.5938 -13.2768 -12.9636 -12.654 -12.3482 -12.0462 -11.7479 -11.4533 -11.1625 -10.8754 -10.592 -10.3124 -10.0365 -9.7644 -9.496 -9.2313 -8.9704 -8.7132 -8.4598 -8.2101 -7.9641 -7.7219 -7.4834 -7.2486 -7.0176 -6.7904 -6.5668 -6.3471 -6.131 -5.9187 -5.7101 -5.5053 -5.3042 -5.1068 -4.9132 -4.7234 -4.5372 -4.3548 -4.1762 -4.0012 -3.8301 -3.6626 -3.4989 -3.339 -3.1827 -3.0303 -2.8815 -2.7365 -2.5952 -2.4577 -2.3239 -2.1939 -2.0676 -1.945 -1.8262 -1.7111 -1.5997 -1.4921 -1.3882 -1.2881 -1.1917 -1.0991 -1.0101 -0.92496 -0.84352 -0.76583 -0.69187 -0.62165 -0.55516 -0.49242 -0.43342 -0.37816 -0.32663 -0.27885 -0.2348 -0.19449 -0.15793 -0.1251 -0.09601 -0.07066 -0.04905 -0.031178 -0.017046 -0.0066536 0 0.0029144 0.0020895 -0.0024746 -0.010778 -0.02282 -0.038602 -0.058123 -0.081383 -0.10838 -0.13912 -0.1736 -0.21182 -0.25377 -0.29947 -0.3489 -0.40208 -0.45899 -0.51964 -0.58403 -0.65217 -0.72404 -0.79964 -0.87899 -0.96208 -1.0489 -1.1395 -1.2338 -1.3318 -1.4336 -1.5391 -1.6484 -1.7614 -1.8781 -1.9986 -2.1228 -2.2508 -2.3825 -2.5179 -2.6571 -2.8 -2.9467 -3.0971 -3.2512 -3.4091 -3.5707 -3.736 -3.9051 -4.078 -4.2545 -4.4348 -4.6189 -4.8067 -4.9982 -5.1935 -5.3925 -5.5952 -5.8017 -6.0119 -6.2259 -6.4436 -6.665 -6.8902 -7.1191 -7.3518 -7.5882 -7.8283 -8.0722 -8.3198 -8.5711 -8.8262 -9.0851 -9.3476 -9.6139 -9.884 -10.1578 -10.4353 -10.7166 -11.0016 -11.2903 -11.5828 -11.879 -12.179 -12.4827 -12.7901 -13.1013 -13.4162 -13.7349 -14.0573 -14.3834 -14.7133 -15.0469 -15.3843 -15.7254 -16.0702 -16.4188 -16.7711 -17.1271 -17.4869 -17.8505 -18.2177 1.0 56065.87 EW1 VH 17.1 25.24 0.050 2.493e+10 4.919e+10 2.573e+10 5.476e+10 2.515e+10 5.946e+10 2.311e+10 6.318e+10 1.959e+10 6.588e+10 1.465e+10 6.759e+10 8.372e+09 6.849e+10 7.778e+08 6.885e+10 -8.208e+09 6.908e+10 -1.896e+10 6.968e+10 -3.226e+10 7.112e+10 -4.940e+10 7.377e+10 -7.222e+10 7.771e+10 -1.030e+11 8.273e+10 -1.460e+11 8.929e+10 -2.017e+11 9.474e+10 -2.743e+11 9.913e+10 -3.668e+11 1.016e+11 -4.829e+11 1.012e+11 -6.263e+11 9.697e+10 -8.008e+11 8.803e+10 -1.011e+12 7.346e+10 -1.260e+12 5.233e+10 -1.554e+12 2.379e+10 -1.897e+12 -1.297e+10 -2.294e+12 -5.881e+10 -2.750e+12 -1.143e+11 -3.268e+12 -1.803e+11 -3.857e+12 -2.571e+11 -4.520e+12 -3.454e+11 -5.261e+12 -4.452e+11 -6.086e+12 -5.569e+11 -6.999e+12 -6.804e+11 -8.004e+12 -8.156e+11 -9.107e+12 -9.623e+11 -1.031e+13 -1.119e+12 -1.162e+13 -1.288e+12 -1.303e+13 -1.464e+12 -1.455e+13 -1.649e+12 -1.618e+13 -1.840e+12 -1.793e+13 -2.036e+12 -1.978e+13 -2.235e+12 -2.175e+13 -2.435e+12 -2.383e+13 -2.632e+12 -2.602e+13 -2.826e+12 -2.830e+13 -3.012e+12 -3.069e+13 -3.187e+12 -3.319e+13 -3.348e+12 -3.578e+13 -3.491e+12 -3.844e+13 -3.613e+12 -4.120e+13 -3.710e+12 -4.403e+13 -3.776e+12 -4.693e+13 -3.809e+12 -4.988e+13 -3.804e+12 -5.289e+13 -3.756e+12 -5.594e+13 -3.661e+12 -5.903e+13 -3.515e+12 -6.213e+13 -3.315e+12 -6.526e+13 -3.055e+12 -6.840e+13 -2.732e+12 -7.152e+13 -2.343e+12 -7.464e+13 -1.886e+12 -7.773e+13 -1.355e+12 -8.079e+13 -7.495e+11 -8.380e+13 -6.643e+10 -8.677e+13 6.971e+11 -8.966e+13 1.541e+12 -9.247e+13 2.466e+12 -9.520e+13 3.476e+12 -9.784e+13 4.569e+12 -1.004e+14 5.742e+12 -1.028e+14 6.998e+12 -1.051e+14 8.332e+12 -1.072e+14 9.743e+12 -1.092e+14 1.123e+13 -1.111e+14 1.279e+13 -1.128e+14 1.442e+13 -1.143e+14 1.611e+13 -1.156e+14 1.785e+13 -1.168e+14 1.966e+13 -1.178e+14 2.151e+13 -1.186e+14 2.342e+13 -1.192e+14 2.535e+13 -1.196e+14 2.732e+13 -1.198e+14 2.932e+13 -1.197e+14 3.133e+13 -1.195e+14 3.336e+13 -1.191e+14 3.539e+13 -1.185e+14 3.743e+13 -1.177e+14 3.946e+13 -1.167e+14 4.149e+13 -1.155e+14 4.349e+13 -1.140e+14 4.547e+13 -1.124e+14 4.742e+13 -1.107e+14 4.934e+13 -1.088e+14 5.123e+13 -1.067e+14 5.306e+13 -1.045e+14 5.485e+13 -1.021e+14 5.659e+13 -9.967e+13 5.827e+13 -9.709e+13 5.991e+13 -9.440e+13 6.149e+13 -9.163e+13 6.301e+13 -8.879e+13 6.448e+13 -8.585e+13 6.588e+13 -8.286e+13 6.723e+13 -7.982e+13 6.852e+13 -7.672e+13 6.974e+13 -7.359e+13 7.092e+13 -7.042e+13 7.205e+13 -6.724e+13 7.312e+13 -6.404e+13 7.414e+13 -6.082e+13 7.511e+13 -5.760e+13 7.604e+13 -5.438e+13 7.692e+13 -5.116e+13 7.778e+13 -4.794e+13 7.859e+13 -4.473e+13 7.937e+13 -4.152e+13 8.012e+13 -3.832e+13 8.084e+13 -3.514e+13 8.154e+13 -3.195e+13 8.222e+13 -2.876e+13 8.288e+13 -2.558e+13 8.354e+13 -2.240e+13 8.418e+13 -1.922e+13 8.481e+13 -1.602e+13 8.544e+13 -1.283e+13 8.607e+13 -9.610e+12 8.669e+13 -6.379e+12 8.732e+13 -3.128e+12 8.795e+13 1.505e+11 8.858e+13 3.459e+12 8.924e+13 6.799e+12 8.989e+13 1.018e+13 9.055e+13 1.360e+13 9.122e+13 1.707e+13 9.189e+13 2.057e+13 9.258e+13 2.414e+13 9.329e+13 2.776e+13 9.399e+13 3.143e+13 9.470e+13 3.518e+13 9.542e+13 3.897e+13 9.616e+13 4.282e+13 9.689e+13 4.673e+13 9.761e+13 5.069e+13 9.832e+13 5.469e+13 9.902e+13 5.874e+13 9.971e+13 6.282e+13 1.004e+14 6.693e+13 1.010e+14 7.105e+13 1.016e+14 7.520e+13 1.021e+14 7.935e+13 1.027e+14 8.348e+13 1.032e+14 8.761e+13 1.037e+14 9.170e+13 1.041e+14 9.576e+13 1.044e+14 9.977e+13 1.047e+14 1.037e+14 1.050e+14 1.076e+14 1.052e+14 1.113e+14 1.052e+14 1.150e+14 1.053e+14 1.186e+14 1.053e+14 1.221e+14 1.053e+14 1.255e+14 1.051e+14 1.286e+14 1.050e+14 1.316e+14 1.047e+14 1.345e+14 1.044e+14 1.373e+14 1.041e+14 1.397e+14 1.036e+14 1.421e+14 1.032e+14 1.443e+14 1.025e+14 1.463e+14 1.019e+14 1.481e+14 1.013e+14 1.495e+14 1.006e+14 1.509e+14 9.982e+13 1.521e+14 9.907e+13 1.530e+14 9.824e+13 1.537e+14 9.736e+13 1.542e+14 9.645e+13 1.544e+14 9.550e+13 1.544e+14 9.450e+13 1.542e+14 9.346e+13 1.538e+14 9.240e+13 1.532e+14 9.131e+13 1.523e+14 9.019e+13 1.513e+14 8.906e+13 1.500e+14 8.790e+13 1.485e+14 8.672e+13 1.467e+14 8.552e+13 1.447e+14 8.430e+13 1.426e+14 8.307e+13 1.402e+14 8.181e+13 1.377e+14 8.054e+13 1.350e+14 7.925e+13 1.323e+14 7.794e+13 1.293e+14 7.661e+13 1.261e+14 7.526e+13 1.228e+14 7.389e+13 1.194e+14 7.250e+13 1.158e+14 7.109e+13 1.122e+14 6.967e+13 1.084e+14 6.822e+13 1.046e+14 6.675e+13 1.008e+14 6.527e+13 9.694e+13 6.376e+13 9.303e+13 6.224e+13 8.910e+13 6.071e+13 8.518e+13 5.916e+13 8.126e+13 5.761e+13 7.736e+13 5.605e+13 7.351e+13 5.447e+13 6.971e+13 5.289e+13 6.596e+13 5.131e+13 6.229e+13 4.973e+13 5.869e+13 4.816e+13 5.519e+13 4.660e+13 5.178e+13 4.504e+13 4.848e+13 4.350e+13 4.528e+13 4.197e+13 4.220e+13 4.047e+13 3.924e+13 3.899e+13 3.640e+13 3.753e+13 3.369e+13 3.611e+13 3.110e+13 3.471e+13 2.863e+13 3.335e+13 2.629e+13 3.201e+13 2.406e+13 3.071e+13 2.196e+13 2.944e+13 1.997e+13 2.821e+13 1.812e+13 2.702e+13 1.636e+13 2.587e+13 1.473e+13 2.475e+13 1.319e+13 2.367e+13 1.176e+13 2.263e+13 1.043e+13 2.164e+13 9.194e+12 2.067e+13 8.046e+12 1.975e+13 6.985e+12 1.887e+13 6.003e+12 1.802e+13 5.097e+12 1.721e+13 4.264e+12 1.644e+13 3.497e+12 1.569e+13 2.794e+12 1.498e+13 2.150e+12 1.430e+13 1.562e+12 1.365e+13 1.025e+12 1.302e+13 5.387e+11 1.243e+13 9.686e+10 1.185e+13 -3.019e+11 1.131e+13 -6.603e+11 1.078e+13 -9.813e+11 1.027e+13 -1.266e+12 9.780e+12 -1.518e+12 9.307e+12 -1.738e+12 8.851e+12 -1.949e+12 8.503e+12 -2.113e+12 8.072e+12 -2.250e+12 7.655e+12 -2.361e+12 7.251e+12 -2.448e+12 6.860e+12 -2.512e+12 6.481e+12 -2.556e+12 6.116e+12 -2.580e+12 5.762e+12 -2.585e+12 5.420e+12 -2.574e+12 5.090e+12 -2.546e+12 4.770e+12 -2.504e+12 4.462e+12 -2.450e+12 4.165e+12 -2.384e+12 3.880e+12 -2.307e+12 3.605e+12 -2.222e+12 3.343e+12 -2.130e+12 3.092e+12 -2.032e+12 2.852e+12 -1.928e+12 2.624e+12 -1.821e+12 2.407e+12 -1.712e+12 2.202e+12 -1.601e+12 2.008e+12 -1.491e+12 1.825e+12 -1.380e+12 1.654e+12 -1.272e+12 1.493e+12 -1.165e+12 1.343e+12 -1.062e+12 1.203e+12 -9.620e+11 1.073e+12 -8.664e+11 9.529e+11 -7.752e+11 8.423e+11 -6.891e+11 7.409e+11 -6.082e+11 6.483e+11 -5.326e+11 5.639e+11 -4.626e+11 4.875e+11 -3.982e+11 4.187e+11 -3.394e+11 3.569e+11 -2.861e+11 3.019e+11 -2.383e+11 2.532e+11 -1.957e+11 2.102e+11 -1.582e+11 1.727e+11 -1.256e+11 1.402e+11 -9.751e+10 1.122e+11 -7.376e+10 8.845e+10 -5.400e+10 6.847e+10 -3.789e+10 5.186e+10 -2.538e+10 3.832e+10 -1.566e+10 2.755e+10 -8.435e+09 1.914e+10 -3.475e+09 1.286e+10 -3.032e+08 8.463e+09 1.709e+09 5.691e+09 3.386e+09 4.173e+09 5.491e+09 3.305e+09 8.352e+09 2.514e+09 1.191e+10 1.511e+09 1.601e+10 2.236e+08 2.045e+10 -1.320e+09 2.505e+10 -3.053e+09 2.968e+10 -4.907e+09 3.420e+10 -6.820e+09 3.850e+10 -8.733e+09 4.251e+10 -1.060e+10 4.617e+10 -1.239e+10 4.942e+10 -1.408e+10 5.224e+10 -1.564e+10 5.462e+10 -1.706e+10 5.655e+10 -1.835e+10 5.804e+10 -1.950e+10 5.912e+10 -2.052e+10 5.981e+10 -2.142e+10 6.013e+10 -2.219e+10 6.014e+10 -2.287e+10 5.987e+10 -2.346e+10 5.935e+10 -2.397e+10 5.864e+10 -2.441e+10 5.776e+10 -2.481e+10 5.677e+10 -2.518e+10 5.569e+10 -2.552e+10 5.457e+10 -2.585e+10 5.343e+10 -2.618e+10 5.230e+10 -2.653e+10 5.121e+10 -2.690e+10 5.019e+10 -2.731e+10 4.925e+10 -2.776e+10 4.841e+10 -2.826e+10 4.769e+10 -2.882e+10 4.710e+10 -2.946e+10 4.666e+10 -3.017e+10 4.636e+10 -3.096e+10 4.622e+10 -3.184e+10 4.623e+10 -3.281e+10 4.641e+10 -3.388e+10 4.676e+10 -3.505e+10 4.727e+10 -3.631e+10 4.796e+10 -3.769e+10 4.881e+10 -3.916e+10 4.984e+10 -4.075e+10 5.104e+10 -4.244e+10 5.240e+10 -4.423e+10 5.393e+10 -4.613e+10 5.562e+10 -4.813e+10 5.747e+10 -5.022e+10 5.946e+10 -5.240e+10 6.160e+10 -5.466e+10 6.387e+10 -5.701e+10 6.625e+10 -5.942e+10 6.874e+10 -6.188e+10 7.133e+10 -6.440e+10 7.400e+10 -6.695e+10 7.673e+10 -6.952e+10 7.950e+10 -7.211e+10 8.229e+10 -7.468e+10 8.508e+10 -7.723e+10 8.786e+10 -7.975e+10 9.059e+10 -8.220e+10 9.326e+10 -8.458e+10 9.583e+10 -8.686e+10 9.829e+10 -8.903e+10 1.006e+11 -9.106e+10 1.028e+11 -9.294e+10 1.048e+11 -9.464e+10 1.065e+11 -9.615e+10 1.081e+11 -9.745e+10 1.094e+11 -9.852e+10 1.104e+11 -9.934e+10 1.112e+11 -9.991e+10 1.117e+11 -1.002e+11 1.119e+11 -1.002e+11 1.117e+11 -9.992e+10 1.113e+11 -9.933e+10 1.105e+11 -9.843e+10 1.094e+11 -9.723e+10 1.079e+11 -9.573e+10 1.061e+11 -9.393e+10 1.040e+11 -9.184e+10 1.016e+11 -8.947e+10 9.885e+10 -8.684e+10 9.583e+10 -8.396e+10 9.255e+10 -8.086e+10 8.902e+10 -7.756e+10 8.528e+10 -7.407e+10 8.133e+10 -7.044e+10 7.722e+10 -6.668e+10 7.297e+10 -6.283e+10 6.862e+10 -5.892e+10 6.419e+10 -5.497e+10 5.972e+10 -5.101e+10 5.524e+10 -4.708e+10 5.079e+10 -4.320e+10 4.640e+10 -3.939e+10 4.209e+10 -3.569e+10 3.790e+10 -3.211e+10 3.386e+10 -2.868e+10 2.998e+10 -2.540e+10 2.630e+10 -2.230e+10 2.282e+10 -1.939e+10 1.958e+10 -1.668e+10 1.657e+10 -1.417e+10 1.382e+10 -1.187e+10 1.132e+10 -9.790e+09 9.079e+09 -7.922e+09 7.104e+09 -6.268e+09 5.389e+09 -4.826e+09 3.928e+09 -3.588e+09 2.717e+09 -2.550e+09 1.746e+09 -1.704e+09 1.003e+09 -1.042e+09 4.788e+08 -5.544e+08 1.578e+08 -2.308e+08 1.467e+07 -6.364e+07 -8.309e+07 6.036e+06 -2.881e+08 1.137e+08 -6.395e+08 3.273e+08 -1.121e+09 6.427e+08 -1.719e+09 1.048e+09 -2.417e+09 1.529e+09 -3.203e+09 2.075e+09 -4.061e+09 2.670e+09 -4.981e+09 3.304e+09 -5.950e+09 3.962e+09 -6.957e+09 4.634e+09 -7.992e+09 5.307e+09 -9.045e+09 5.972e+09 -1.011e+10 6.616e+09 -1.117e+10 7.232e+09 -1.223e+10 7.811e+09 -1.327e+10 8.346e+09 -1.430e+10 8.831e+09 -1.531e+10 9.261e+09 -1.629e+10 9.632e+09 -1.724e+10 9.942e+09 -1.816e+10 1.019e+10 -1.905e+10 1.037e+10 -1.990e+10 1.049e+10 -2.072e+10 1.056e+10 -2.150e+10 1.056e+10 -2.225e+10 1.051e+10 -2.298e+10 1.041e+10 -2.367e+10 1.026e+10 -2.434e+10 1.007e+10 -2.499e+10 9.845e+09 -2.562e+10 9.589e+09 -2.623e+10 9.305e+09 -2.684e+10 9.000e+09 -2.745e+10 8.677e+09 -2.807e+10 8.343e+09 -2.869e+10 8.001e+09 -2.934e+10 7.655e+09 -3.000e+10 7.307e+09 -3.068e+10 6.959e+09 -3.140e+10 6.614e+09 -3.215e+10 6.275e+09 -3.294e+10 5.943e+09 -3.377e+10 5.619e+09 -3.464e+10 5.306e+09 -3.556e+10 5.003e+09 -3.654e+10 4.712e+09 -3.756e+10 4.432e+09 -3.863e+10 4.166e+09 -3.976e+10 3.914e+09 -4.093e+10 3.676e+09 -4.215e+10 3.453e+09 -4.340e+10 3.245e+09 -4.469e+10 3.054e+09 -4.601e+10 2.882e+09 -4.735e+10 2.728e+09 -4.870e+10 2.596e+09 -5.005e+10 2.487e+09 -5.139e+10 2.403e+09 -5.271e+10 2.347e+09 -5.398e+10 2.321e+09 -5.521e+10 2.329e+09 -5.636e+10 2.372e+09 -5.744e+10 2.455e+09 -5.842e+10 2.581e+09 -5.930e+10 2.751e+09 -6.006e+10 2.969e+09 -6.068e+10 3.237e+09 -6.116e+10 3.558e+09 -6.149e+10 3.932e+09 -6.166e+10 4.361e+09 -6.166e+10 4.844e+09 -6.150e+10 5.382e+09 -6.118e+10 5.973e+09 -6.068e+10 6.615e+09 -6.003e+10 7.306e+09 -5.922e+10 8.039e+09 -5.826e+10 8.815e+09 -5.716e+10 9.628e+09 -5.593e+10 1.047e+10 -5.458e+10 1.135e+10 -5.313e+10 1.225e+10 -5.158e+10 1.317e+10 -4.996e+10 1.410e+10 -4.828e+10 1.505e+10 -4.655e+10 1.600e+10 -4.479e+10 1.696e+10 -4.300e+10 1.793e+10 -4.122e+10 1.890e+10 -3.944e+10 1.987e+10 -3.767e+10 2.086e+10 -3.594e+10 2.186e+10 -3.424e+10 2.288e+10 -3.258e+10 2.392e+10 -3.097e+10 2.499e+10 -2.941e+10 2.610e+10 -2.790e+10 2.726e+10 -2.644e+10 2.847e+10 -2.503e+10 2.975e+10 -2.366e+10 3.111e+10 -2.233e+10 3.254e+10 -2.103e+10 3.407e+10 -1.976e+10 3.569e+10 -1.851e+10 3.740e+10 -1.727e+10 3.922e+10 -1.604e+10 4.115e+10 -1.482e+10 4.317e+10 -1.359e+10 4.530e+10 -1.236e+10 4.752e+10 -1.113e+10 4.983e+10 -9.890e+09 5.223e+10 -8.650e+09 5.470e+10 -7.413e+09 5.724e+10 -6.182e+09 5.983e+10 -4.962e+09 6.246e+10 -3.761e+09 6.513e+10 -2.591e+09 6.783e+10 -1.454e+09 7.053e+10 -3.590e+08 7.323e+10 6.873e+08 7.590e+10 1.678e+09 7.855e+10 2.603e+09 8.114e+10 3.457e+09 8.367e+10 4.235e+09 8.614e+10 4.929e+09 8.852e+10 5.535e+09 9.080e+10 6.050e+09 9.298e+10 6.471e+09 9.505e+10 6.796e+09 9.701e+10 7.024e+09 9.884e+10 7.156e+09 1.005e+11 7.191e+09 1.021e+11 7.132e+09 1.035e+11 6.980e+09 1.049e+11 6.738e+09 1.060e+11 6.409e+09 1.071e+11 5.997e+09 1.080e+11 5.504e+09 1.088e+11 4.935e+09 1.094e+11 4.292e+09 1.100e+11 3.582e+09 1.104e+11 2.805e+09 1.108e+11 1.967e+09 1.110e+11 1.071e+09 1.112e+11 1.202e+08 1.112e+11 -8.825e+08 1.112e+11 -1.933e+09 1.112e+11 -3.029e+09 1.110e+11 -4.167e+09 1.109e+11 -5.342e+09 1.106e+11 -6.553e+09 1.103e+11 -7.797e+09 1.100e+11 -9.067e+09 1.096e+11 -1.036e+10 1.092e+11 -1.168e+10 1.087e+11 -1.300e+10 1.082e+11 -1.433e+10 1.077e+11 -1.566e+10 1.071e+11 -1.699e+10 1.065e+11 -1.831e+10 1.058e+11 -1.962e+10 1.051e+11 -2.091e+10 1.043e+11 -2.218e+10 1.035e+11 -2.340e+10 1.026e+11 -2.459e+10 1.016e+11 -2.572e+10 1.006e+11 -2.680e+10 9.947e+10 -2.781e+10 9.828e+10 -2.875e+10 9.701e+10 -2.962e+10 9.565e+10 -3.039e+10 9.421e+10 -3.108e+10 9.269e+10 -3.167e+10 9.108e+10 -3.216e+10 8.938e+10 -3.255e+10 8.761e+10 -3.284e+10 8.575e+10 0.005 -51.910 -50.944 -49.978 -49.012 -48.046 -47.161 -46.365 -45.650 -45.013 -44.447 -43.949 -43.517 -43.147 -42.839 -42.590 -42.400 -42.268 -42.194 -42.177 -42.218 -42.319 -42.480 -42.703 -42.990 -43.345 -43.771 -44.271 -44.852 -45.520 -46.282 -47.148 -48.129 -49.241 -50.501 -51.935 -53.571 -55.451 -57.629 -60.175 -63.173 -66.691 -70.635 -74.507 -77.863 -80.544 -78.856 -72.796 -67.154 -62.849 -59.422 -56.588 -54.184 -52.106 -50.287 -48.679 -47.249 -45.969 -44.822 -43.792 -42.866 -42.037 -41.294 -40.633 -40.049 -39.536 -39.091 -38.712 -38.397 -38.144 -37.951 -37.818 -37.745 -37.732 -37.778 -37.886 -38.055 -38.289 -38.589 -38.956 -39.395 -39.908 -40.500 -41.174 -41.936 -42.790 -43.741 -44.792 -45.943 -47.188 -48.507 -49.862 -51.184 -52.371 -53.303 -53.884 -54.075 -53.888 -53.353 -52.500 -51.366 -50.016 -48.535 -47.002 -45.482 -44.016 -42.629 -41.332 -40.128 -39.018 -37.998 -37.067 -36.219 -35.452 -34.762 -34.147 -33.604 -33.131 -32.728 -32.392 -32.125 -31.925 -31.795 -31.735 -31.747 -31.835 -32.002 -32.253 -32.594 -33.034 -33.581 -34.251 -35.058 -36.027 -37.189 -38.587 -40.288 -42.396 -45.087 -48.700 -53.879 -59.370 -56.304 -52.714 -51.060 -50.941 -52.592 -56.745 -59.221 -49.720 -43.604 -39.278 -35.866 -33.017 -30.554 -28.378 -26.423 -24.647 -23.019 -21.515 -20.120 -18.819 -17.602 -16.459 -15.383 -14.369 -13.411 -12.505 -11.647 -10.834 -10.064 -9.333 -8.639 -7.981 -7.356 -6.764 -6.203 -5.671 -5.168 -4.693 -4.244 -3.821 -3.423 -3.049 -2.699 -2.372 -2.068 -1.786 -1.525 -1.287 -1.069 -0.872 -0.695 -0.539 -0.403 -0.287 -0.191 -0.114 -0.056 -0.018 0.000 -0.001 -0.020 -0.059 -0.118 -0.196 -0.293 -0.410 -0.548 -0.705 -0.882 -1.080 -1.299 -1.539 -1.800 -2.083 -2.388 -2.716 -3.067 -3.441 -3.840 -4.264 -4.714 -5.190 -5.694 -6.227 -6.789 -7.381 -8.007 -8.666 -9.360 -10.092 -10.864 -11.678 -12.537 -13.445 -14.405 -15.421 -16.500 -17.647 -18.869 -20.176 -21.579 -23.092 -24.731 -26.521 -28.488 -30.670 -33.112 -35.853 -38.867 -41.849 -43.879 -44.232 -43.587 -42.875 -42.472 -42.435 -42.728 -43.269 -43.910 -44.379 -44.322 -43.568 -42.302 -40.855 -39.446 -38.168 -37.046 -36.080 -35.260 -34.571 -34.002 -33.543 -33.183 -32.917 -32.737 -32.639 -32.619 -32.675 -32.804 -33.004 -33.276 -33.619 -34.034 -34.521 -35.084 -35.724 -36.444 -37.250 -38.146 -39.139 -40.236 -41.446 -42.780 -44.250 -45.871 -47.655 -49.615 -51.753 -54.051 -56.436 -58.735 -60.629 -61.704 -61.680 -60.622 -58.878 -56.834 -54.758 -52.789 -50.983 -49.354 -47.895 -46.595 -45.440 -44.417 -43.514 -42.720 -42.028 -41.429 -40.917 -40.487 -40.136 -39.858 -39.652 -39.516 -39.448 -39.447 -39.512 -39.643 -39.841 -40.107 -40.442 -40.848 -41.329 -41.889 -42.531 -43.263 -44.090 -45.021 -46.068 -47.243 -48.560 -50.038 -51.692 -53.535 -55.553 -57.669 -59.682 -61.255 -62.144 -62.481 -62.682 -63.147 -64.198 -66.228 -69.863 -72.452 -69.238 -63.543 -59.425 -56.350 -53.905 -51.883 -50.169 -48.692 -47.405 -46.275 -45.279 -44.400 -43.623 -42.938 -42.337 -41.813 -41.359 -40.972 -40.648 -40.383 -40.175 -40.022 -39.922 -39.874 -39.877 -39.930 -40.033 -40.185 -40.386 -40.638 -40.941 -41.296 -41.703 -42.164 -42.682 -43.259 -43.896 -44.599 -45.370 -46.203 -47.036 -47.869 -48.702 0.03 -18.4828 -18.1182 -17.7572 -17.3999 -17.0462 -16.6961 -16.3497 -16.0068 -15.6677 -15.3321 -15.0002 -14.6719 -14.3472 -14.0262 -13.7088 -13.3951 -13.0849 -12.7784 -12.4756 -12.1763 -11.8807 -11.5888 -11.3004 -11.0157 -10.7347 -10.4572 -10.1834 -9.9132 -9.6467 -9.3838 -9.1245 -8.8688 -8.6168 -8.3684 -8.1237 -7.8826 -7.6451 -7.4112 -7.181 -6.9544 -6.7314 -6.5121 -6.2964 -6.0843 -5.8759 -5.6711 -5.4699 -5.2724 -5.0785 -4.8882 -4.7016 -4.5185 -4.3392 -4.1634 -3.9913 -3.8228 -3.658 -3.4967 -3.3391 -3.1852 -3.0349 -2.8882 -2.7451 -2.6057 -2.4699 -2.3377 -2.2092 -2.0843 -1.963 -1.8454 -1.7314 -1.621 -1.5143 -1.4111 -1.3117 -1.2158 -1.1236 -1.035 -0.95006 -0.86875 -0.79106 -0.717 -0.64658 -0.57979 -0.51663 -0.4571 -0.4012 -0.34894 -0.3003 -0.2553 -0.21393 -0.1762 -0.14209 -0.11162 -0.084778 -0.061569 -0.041991 -0.026046 -0.013732 -0.00505 0 0.0014181 -0.00079563 -0.0066413 -0.016119 -0.029228 -0.045969 -0.066343 -0.090348 -0.11798 -0.14925 -0.18415 -0.22269 -0.26485 -0.31065 -0.36008 -0.41314 -0.46983 -0.53015 -0.59411 -0.66169 -0.73291 -0.80777 -0.88625 -0.96836 -1.0541 -1.1435 -1.2365 -1.3331 -1.4334 -1.5373 -1.6449 -1.756 -1.8708 -1.9893 -2.1113 -2.237 -2.3664 -2.4993 -2.6359 -2.7761 -2.92 -3.0675 -3.2186 -3.3734 -3.5317 -3.6938 -3.8594 -4.0287 -4.2016 -4.3781 -4.5583 -4.7421 -4.9296 -5.1206 -5.3153 -5.5137 -5.7156 -5.9212 -6.1305 -6.3433 -6.5598 -6.78 -7.0037 -7.2311 -7.4621 -7.6968 -7.9351 -8.177 -8.4225 -8.6717 -8.9245 -9.181 -9.4411 -9.7048 -9.9721 -10.2431 -10.5177 -10.7959 -11.0778 -11.3633 -11.6524 -11.9452 -12.2416 -12.5416 -12.8453 -13.1526 -13.4635 -13.778 -14.0962 -14.4181 -14.7435 -15.0726 -15.4053 -15.7416 -16.0816 -16.4252 -16.7725 -17.1234 -17.4779 -17.836 1.0 56065.87 EW2 HH 25.19 29.82 0.050 9.701e+07 -1.243e+09 1.264e+08 -9.749e+08 1.408e+08 -7.306e+08 1.414e+08 -5.149e+08 1.302e+08 -3.325e+08 1.100e+08 -1.882e+08 8.599e+07 -8.487e+07 6.721e+07 -1.956e+07 6.557e+07 2.838e+07 8.154e+07 1.001e+08 1.003e+08 2.246e+08 1.094e+08 4.115e+08 1.004e+08 6.647e+08 6.579e+07 9.862e+08 -1.322e+06 1.376e+09 -1.090e+08 1.834e+09 -2.632e+08 2.358e+09 -4.697e+08 2.943e+09 -7.342e+08 3.583e+09 -1.061e+09 4.273e+09 -1.454e+09 5.004e+09 -1.915e+09 5.767e+09 -2.445e+09 6.552e+09 -3.043e+09 7.346e+09 -3.706e+09 8.138e+09 -4.432e+09 8.917e+09 -5.213e+09 9.668e+09 -6.043e+09 1.038e+10 -6.913e+09 1.104e+10 -7.814e+09 1.164e+10 -8.733e+09 1.216e+10 -9.661e+09 1.261e+10 -1.059e+10 1.296e+10 -1.149e+10 1.323e+10 -1.237e+10 1.339e+10 -1.322e+10 1.346e+10 -1.401e+10 1.342e+10 -1.475e+10 1.329e+10 -1.542e+10 1.306e+10 -1.602e+10 1.273e+10 -1.654e+10 1.233e+10 -1.699e+10 1.184e+10 -1.735e+10 1.128e+10 -1.763e+10 1.066e+10 -1.783e+10 9.988e+09 -1.796e+10 9.267e+09 -1.801e+10 8.506e+09 -1.799e+10 7.715e+09 -1.790e+10 6.902e+09 -1.775e+10 6.073e+09 -1.755e+10 5.234e+09 -1.730e+10 4.392e+09 -1.700e+10 3.551e+09 -1.667e+10 2.716e+09 -1.630e+10 1.890e+09 -1.590e+10 1.076e+09 -1.548e+10 2.766e+08 -1.504e+10 -5.063e+08 -1.457e+10 -1.272e+09 -1.409e+10 -2.020e+09 -1.359e+10 -2.748e+09 -1.308e+10 -3.458e+09 -1.256e+10 -4.150e+09 -1.202e+10 -4.821e+09 -1.147e+10 -5.473e+09 -1.090e+10 -6.107e+09 -1.032e+10 -6.720e+09 -9.723e+09 -7.313e+09 -9.108e+09 -7.885e+09 -8.476e+09 -8.436e+09 -7.825e+09 -8.963e+09 -7.154e+09 -9.468e+09 -6.463e+09 -9.946e+09 -5.752e+09 -1.040e+10 -5.021e+09 -1.082e+10 -4.271e+09 -1.121e+10 -3.504e+09 -1.157e+10 -2.718e+09 -1.190e+10 -1.920e+09 -1.219e+10 -1.110e+09 -1.244e+10 -2.903e+08 -1.265e+10 5.330e+08 -1.282e+10 1.356e+09 -1.295e+10 2.176e+09 -1.305e+10 2.986e+09 -1.310e+10 3.780e+09 -1.311e+10 4.553e+09 -1.308e+10 5.299e+09 -1.302e+10 6.013e+09 -1.293e+10 6.689e+09 -1.282e+10 7.320e+09 -1.268e+10 7.904e+09 -1.253e+10 8.436e+09 -1.237e+10 8.913e+09 -1.220e+10 9.332e+09 -1.205e+10 9.694e+09 -1.191e+10 9.999e+09 -1.180e+10 1.025e+10 -1.172e+10 1.044e+10 -1.168e+10 1.059e+10 -1.170e+10 1.069e+10 -1.179e+10 1.076e+10 -1.195e+10 1.080e+10 -1.220e+10 1.081e+10 -1.255e+10 1.081e+10 -1.303e+10 1.080e+10 -1.363e+10 1.079e+10 -1.440e+10 1.078e+10 -1.534e+10 1.078e+10 -1.649e+10 1.080e+10 -1.788e+10 1.083e+10 -1.954e+10 1.088e+10 -2.151e+10 1.094e+10 -2.383e+10 1.101e+10 -2.656e+10 1.110e+10 -2.975e+10 1.119e+10 -3.344e+10 1.128e+10 -3.769e+10 1.137e+10 -4.258e+10 1.146e+10 -4.816e+10 1.155e+10 -5.449e+10 1.165e+10 -6.165e+10 1.177e+10 -6.969e+10 1.191e+10 -7.868e+10 1.210e+10 -8.870e+10 1.236e+10 -9.977e+10 1.274e+10 -1.120e+11 1.327e+10 -1.254e+11 1.402e+10 -1.399e+11 1.504e+10 -1.557e+11 1.641e+10 -1.728e+11 1.822e+10 -1.911e+11 2.058e+10 -2.106e+11 2.360e+10 -2.312e+11 2.741e+10 -2.529e+11 3.215e+10 -2.757e+11 3.797e+10 -2.993e+11 4.503e+10 -3.237e+11 5.350e+10 -3.487e+11 6.358e+10 -3.741e+11 7.543e+10 -3.997e+11 8.926e+10 -4.254e+11 1.053e+11 -4.509e+11 1.236e+11 -4.760e+11 1.446e+11 -5.004e+11 1.684e+11 -5.239e+11 1.953e+11 -5.462e+11 2.254e+11 -5.671e+11 2.591e+11 -5.864e+11 2.967e+11 -6.039e+11 3.385e+11 -6.195e+11 3.851e+11 -6.331e+11 4.368e+11 -6.444e+11 4.944e+11 -6.534e+11 5.587e+11 -6.601e+11 6.305e+11 -6.641e+11 7.111e+11 -6.652e+11 8.018e+11 -6.633e+11 9.042e+11 -6.576e+11 1.020e+12 -6.477e+11 1.152e+12 -6.327e+11 1.302e+12 -6.114e+11 1.473e+12 -5.824e+11 1.667e+12 -5.440e+11 1.888e+12 -4.942e+11 2.140e+12 -4.307e+11 2.425e+12 -3.506e+11 2.749e+12 -2.511e+11 3.114e+12 -1.287e+11 3.525e+12 2.033e+10 3.986e+12 1.997e+11 4.503e+12 4.140e+11 5.080e+12 6.675e+11 5.722e+12 9.649e+11 6.433e+12 1.311e+12 7.220e+12 1.712e+12 8.087e+12 2.172e+12 9.041e+12 2.697e+12 1.009e+13 3.293e+12 1.090e+13 3.848e+12 1.211e+13 4.581e+12 1.343e+13 5.399e+12 1.486e+13 6.307e+12 1.641e+13 7.310e+12 1.808e+13 8.414e+12 1.987e+13 9.624e+12 2.180e+13 1.095e+13 2.387e+13 1.238e+13 2.608e+13 1.393e+13 2.843e+13 1.561e+13 3.094e+13 1.741e+13 3.359e+13 1.934e+13 3.640e+13 2.140e+13 3.937e+13 2.360e+13 4.248e+13 2.591e+13 4.578e+13 2.836e+13 4.922e+13 3.093e+13 5.283e+13 3.363e+13 5.660e+13 3.646e+13 6.053e+13 3.940e+13 6.462e+13 4.246e+13 6.885e+13 4.562e+13 7.324e+13 4.889e+13 7.779e+13 5.224e+13 8.247e+13 5.568e+13 8.730e+13 5.919e+13 9.226e+13 6.275e+13 9.735e+13 6.637e+13 1.026e+14 7.004e+13 1.079e+14 7.372e+13 1.133e+14 7.742e+13 1.189e+14 8.111e+13 1.245e+14 8.479e+13 1.302e+14 8.843e+13 1.360e+14 9.203e+13 1.419e+14 9.556e+13 1.478e+14 9.903e+13 1.538e+14 1.024e+14 1.597e+14 1.056e+14 1.658e+14 1.088e+14 1.718e+14 1.117e+14 1.778e+14 1.146e+14 1.839e+14 1.173e+14 1.900e+14 1.198e+14 1.961e+14 1.221e+14 2.021e+14 1.242e+14 2.080e+14 1.261e+14 2.139e+14 1.278e+14 2.198e+14 1.292e+14 2.256e+14 1.303e+14 2.313e+14 1.313e+14 2.369e+14 1.319e+14 2.423e+14 1.323e+14 2.477e+14 1.324e+14 2.530e+14 1.322e+14 2.580e+14 1.318e+14 2.630e+14 1.310e+14 2.678e+14 1.300e+14 2.725e+14 1.287e+14 2.769e+14 1.271e+14 2.812e+14 1.253e+14 2.854e+14 1.231e+14 2.892e+14 1.207e+14 2.930e+14 1.181e+14 2.966e+14 1.152e+14 3.000e+14 1.121e+14 3.031e+14 1.086e+14 3.061e+14 1.051e+14 3.089e+14 1.013e+14 3.115e+14 9.731e+13 3.138e+14 9.313e+13 3.160e+14 8.877e+13 3.180e+14 8.425e+13 3.197e+14 7.958e+13 3.213e+14 7.477e+13 3.227e+14 6.984e+13 3.239e+14 6.480e+13 3.250e+14 5.966e+13 3.258e+14 5.443e+13 3.265e+14 4.913e+13 3.270e+14 4.377e+13 3.273e+14 3.835e+13 3.275e+14 3.290e+13 3.277e+14 2.743e+13 3.276e+14 2.194e+13 3.274e+14 1.645e+13 3.270e+14 1.097e+13 3.264e+14 5.507e+12 3.257e+14 7.729e+10 3.249e+14 -5.309e+12 3.239e+14 -1.064e+13 3.227e+14 -1.591e+13 3.213e+14 -2.109e+13 3.198e+14 -2.620e+13 3.182e+14 -3.119e+13 3.163e+14 -3.608e+13 3.143e+14 -4.084e+13 3.121e+14 -4.547e+13 3.098e+14 -4.995e+13 3.072e+14 -5.427e+13 3.045e+14 -5.843e+13 3.016e+14 -6.241e+13 2.986e+14 -6.620e+13 2.953e+14 -6.979e+13 2.918e+14 -7.317e+13 2.882e+14 -7.633e+13 2.843e+14 -7.927e+13 2.803e+14 -8.197e+13 2.761e+14 -8.443e+13 2.716e+14 -8.665e+13 2.671e+14 -8.861e+13 2.622e+14 -9.032e+13 2.574e+14 -9.178e+13 2.522e+14 -9.299e+13 2.469e+14 -9.392e+13 2.415e+14 -9.462e+13 2.361e+14 -9.504e+13 2.304e+14 -9.522e+13 2.246e+14 -9.516e+13 2.187e+14 -9.486e+13 2.127e+14 -9.432e+13 2.096e+14 -9.055e+13 2.026e+14 -9.131e+13 1.965e+14 -9.018e+13 1.903e+14 -8.887e+13 1.840e+14 -8.737e+13 1.778e+14 -8.569e+13 1.716e+14 -8.386e+13 1.653e+14 -8.189e+13 1.591e+14 -7.979e+13 1.528e+14 -7.757e+13 1.467e+14 -7.523e+13 1.406e+14 -7.282e+13 1.346e+14 -7.032e+13 1.286e+14 -6.776e+13 1.227e+14 -6.514e+13 1.170e+14 -6.248e+13 1.113e+14 -5.980e+13 1.057e+14 -5.710e+13 1.003e+14 -5.439e+13 9.498e+13 -5.170e+13 8.980e+13 -4.902e+13 8.476e+13 -4.636e+13 7.986e+13 -4.375e+13 7.511e+13 -4.117e+13 7.051e+13 -3.865e+13 6.606e+13 -3.618e+13 6.178e+13 -3.378e+13 5.766e+13 -3.146e+13 5.371e+13 -2.920e+13 4.990e+13 -2.703e+13 4.628e+13 -2.494e+13 4.282e+13 -2.295e+13 3.952e+13 -2.104e+13 3.639e+13 -1.922e+13 3.342e+13 -1.750e+13 3.062e+13 -1.587e+13 2.798e+13 -1.435e+13 2.549e+13 -1.291e+13 2.315e+13 -1.157e+13 2.097e+13 -1.032e+13 1.894e+13 -9.168e+12 1.705e+13 -8.105e+12 1.531e+13 -7.128e+12 1.369e+13 -6.234e+12 1.221e+13 -5.421e+12 1.084e+13 -4.685e+12 9.296e+12 -3.897e+12 8.189e+12 -3.319e+12 7.185e+12 -2.805e+12 6.276e+12 -2.349e+12 5.458e+12 -1.949e+12 4.726e+12 -1.599e+12 4.071e+12 -1.297e+12 3.490e+12 -1.036e+12 2.976e+12 -8.149e+11 2.524e+12 -6.280e+11 2.128e+12 -4.719e+11 1.783e+12 -3.434e+11 1.485e+12 -2.388e+11 1.229e+12 -1.550e+11 1.010e+12 -8.912e+10 8.237e+11 -3.845e+10 6.670e+11 -5.302e+08 5.360e+11 2.685e+10 4.274e+11 4.572e+10 3.381e+11 5.782e+10 2.654e+11 6.467e+10 2.066e+11 6.761e+10 1.597e+11 6.773e+10 1.225e+11 6.594e+10 9.322e+10 6.296e+10 7.037e+10 5.932e+10 5.260e+10 5.540e+10 3.880e+10 5.142e+10 2.806e+10 4.749e+10 1.970e+10 4.365e+10 1.318e+10 3.986e+10 8.123e+09 3.609e+10 4.265e+09 3.231e+10 1.402e+09 2.849e+10 -6.135e+08 2.466e+10 -1.906e+09 2.084e+10 -2.589e+09 1.711e+10 -2.772e+09 1.353e+10 -2.570e+09 1.019e+10 -2.105e+09 7.196e+09 -1.499e+09 4.627e+09 -8.773e+08 2.572e+09 -3.619e+08 1.099e+09 -6.592e+07 2.712e+08 1.214e+08 -9.816e+07 5.814e+08 -6.928e+08 1.556e+09 -1.979e+09 3.102e+09 -3.972e+09 5.268e+09 -6.644e+09 8.079e+09 -9.951e+09 1.154e+10 -1.383e+10 1.565e+10 -1.821e+10 2.037e+10 -2.301e+10 2.566e+10 -2.814e+10 3.146e+10 -3.349e+10 3.770e+10 -3.896e+10 4.428e+10 -4.445e+10 5.113e+10 -4.985e+10 5.814e+10 -5.506e+10 6.521e+10 -5.999e+10 7.225e+10 -6.455e+10 7.914e+10 -6.865e+10 8.578e+10 -7.223e+10 9.210e+10 -7.523e+10 9.800e+10 -7.761e+10 1.034e+11 -7.933e+10 1.082e+11 -8.037e+10 1.125e+11 -8.074e+10 1.160e+11 -8.042e+10 1.188e+11 -7.946e+10 1.209e+11 -7.787e+10 1.223e+11 -7.569e+10 1.229e+11 -7.298e+10 1.228e+11 -6.979e+10 1.219e+11 -6.619e+10 1.204e+11 -6.224e+10 1.182e+11 -5.803e+10 1.153e+11 -5.360e+10 1.119e+11 -4.903e+10 1.080e+11 -4.439e+10 1.036e+11 -3.974e+10 9.890e+10 -3.514e+10 9.383e+10 -3.065e+10 8.851e+10 -2.632e+10 8.300e+10 -2.219e+10 7.736e+10 -1.831e+10 7.167e+10 -1.469e+10 6.598e+10 -1.137e+10 6.034e+10 -8.361e+09 5.483e+10 -5.674e+09 4.947e+10 -3.310e+09 4.431e+10 -1.268e+09 3.941e+10 4.608e+08 3.477e+10 1.891e+09 3.043e+10 3.039e+09 2.642e+10 3.926e+09 2.273e+10 4.576e+09 1.937e+10 5.015e+09 1.636e+10 5.270e+09 1.367e+10 5.368e+09 1.129e+10 5.335e+09 9.226e+09 5.198e+09 7.440e+09 4.981e+09 5.914e+09 4.705e+09 4.625e+09 4.390e+09 3.545e+09 4.051e+09 2.652e+09 3.702e+09 1.920e+09 3.351e+09 1.325e+09 3.004e+09 8.475e+08 2.667e+09 4.702e+08 2.341e+09 1.777e+08 2.027e+09 -4.201e+07 1.726e+09 -1.987e+08 1.438e+09 -3.010e+08 1.166e+09 -3.561e+08 9.112e+08 -3.713e+08 6.785e+08 -3.541e+08 4.716e+08 -3.131e+08 2.956e+08 -2.587e+08 1.548e+08 -2.032e+08 4.925e+07 -1.593e+08 -3.024e+07 -1.320e+08 -1.090e+08 -1.090e+08 -2.211e+08 -6.622e+07 -3.917e+08 2.039e+07 -6.330e+08 1.704e+08 -9.499e+08 4.001e+08 -1.343e+09 7.238e+08 -1.812e+09 1.155e+09 -2.355e+09 1.705e+09 -2.966e+09 2.383e+09 -3.639e+09 3.199e+09 -4.369e+09 4.160e+09 -5.146e+09 5.269e+09 -5.960e+09 6.530e+09 -6.800e+09 7.943e+09 -7.656e+09 9.505e+09 -8.513e+09 1.121e+10 -9.360e+09 1.306e+10 -1.018e+10 1.504e+10 -1.097e+10 1.713e+10 -1.171e+10 1.933e+10 -1.239e+10 2.162e+10 -1.299e+10 2.397e+10 -1.352e+10 2.638e+10 -1.395e+10 2.881e+10 -1.428e+10 3.125e+10 -1.450e+10 3.366e+10 -1.461e+10 3.603e+10 -1.460e+10 3.834e+10 -1.448e+10 4.054e+10 -1.424e+10 4.263e+10 -1.389e+10 4.457e+10 -1.343e+10 4.635e+10 -1.286e+10 4.795e+10 -1.220e+10 4.935e+10 -1.146e+10 5.053e+10 -1.063e+10 5.148e+10 -9.746e+09 5.218e+10 -8.809e+09 5.263e+10 -7.834e+09 5.282e+10 -6.836e+09 5.275e+10 -5.829e+09 5.243e+10 -4.828e+09 5.185e+10 -3.846e+09 5.102e+10 -2.897e+09 4.995e+10 -1.993e+09 4.867e+10 -1.146e+09 4.717e+10 -3.657e+08 4.547e+10 3.389e+08 4.361e+10 9.597e+08 4.158e+10 1.492e+09 3.943e+10 1.932e+09 3.716e+10 2.277e+09 3.481e+10 2.527e+09 3.239e+10 2.684e+09 2.993e+10 2.751e+09 2.746e+10 2.734e+09 2.498e+10 2.638e+09 2.254e+10 2.473e+09 2.015e+10 2.249e+09 1.783e+10 1.974e+09 1.560e+10 1.663e+09 1.348e+10 1.326e+09 1.149e+10 9.769e+08 9.639e+09 6.290e+08 7.946e+09 2.945e+08 6.418e+09 -1.502e+07 5.071e+09 -2.881e+08 3.909e+09 -5.185e+08 2.935e+09 -7.044e+08 2.151e+09 -8.521e+08 1.548e+09 -9.822e+08 1.103e+09 -1.133e+09 7.697e+08 -1.356e+09 4.812e+08 -1.698e+09 1.729e+08 -2.189e+09 -1.999e+08 -2.838e+09 -6.604e+08 -3.645e+09 -1.216e+09 -4.606e+09 -1.862e+09 -5.717e+09 -2.591e+09 -6.970e+09 -3.390e+09 -8.361e+09 -4.244e+09 -9.881e+09 -5.137e+09 -1.152e+10 -6.055e+09 -1.327e+10 -6.982e+09 -1.512e+10 -7.901e+09 -1.705e+10 -8.800e+09 -1.905e+10 -9.664e+09 -2.111e+10 -1.048e+10 -2.321e+10 -1.124e+10 -2.534e+10 -1.193e+10 -2.747e+10 -1.255e+10 -2.959e+10 -1.308e+10 -3.168e+10 -1.352e+10 -3.373e+10 -1.388e+10 -3.571e+10 -1.414e+10 -3.760e+10 -1.431e+10 -3.940e+10 -1.439e+10 -4.108e+10 -1.437e+10 -4.263e+10 -1.427e+10 -4.403e+10 -1.409e+10 -4.527e+10 -1.383e+10 -4.633e+10 -1.350e+10 -4.722e+10 -1.310e+10 -4.791e+10 -1.265e+10 -4.841e+10 -1.214e+10 -4.870e+10 -1.159e+10 -4.879e+10 -1.100e+10 -4.868e+10 -1.039e+10 -4.836e+10 -9.751e+09 -4.785e+10 -9.099e+09 -4.715e+10 -8.438e+09 -4.626e+10 -7.777e+09 -4.520e+10 -7.126e+09 -4.399e+10 -6.484e+09 -4.263e+10 -5.856e+09 -4.115e+10 -5.246e+09 -3.954e+10 -4.658e+09 -3.784e+10 -4.095e+09 -3.606e+10 -3.562e+09 -3.421e+10 -3.059e+09 -3.232e+10 -2.590e+09 -3.040e+10 -2.155e+09 -2.847e+10 -1.755e+09 -2.654e+10 -1.391e+09 -2.463e+10 -1.064e+09 -2.275e+10 -7.718e+08 -2.091e+10 -5.152e+08 -1.913e+10 -2.925e+08 -1.742e+10 -1.023e+08 -1.577e+10 5.695e+07 -1.421e+10 1.874e+08 -1.273e+10 2.913e+08 -1.134e+10 0.005 -54.414 -53.444 -52.473 -51.502 -50.532 -49.561 -48.590 -47.713 -46.927 -46.230 -45.612 -45.070 -44.599 -44.196 -43.860 -43.588 -43.380 -43.234 -43.150 -43.128 -43.168 -43.273 -43.443 -43.680 -43.986 -44.365 -44.822 -45.363 -45.994 -46.724 -47.565 -48.529 -49.634 -50.904 -52.371 -54.081 -56.104 -58.548 -61.615 -65.728 -72.143 -88.288 -77.880 -71.891 -69.584 -68.488 -67.535 -65.855 -63.320 -60.495 -57.795 -55.360 -53.201 -51.290 -49.595 -48.084 -46.735 -45.526 -44.442 -43.470 -42.599 -41.821 -41.127 -40.512 -39.972 -39.504 -39.104 -38.772 -38.504 -38.299 -38.158 -38.079 -38.062 -38.109 -38.220 -38.396 -38.640 -38.953 -39.340 -39.803 -40.348 -40.979 -41.703 -42.527 -43.460 -44.510 -45.694 -47.019 -48.498 -50.141 -51.955 -53.941 -56.091 -58.405 -60.899 -63.478 -65.200 -64.174 -60.694 -56.986 -53.747 -50.967 -48.556 -46.440 -44.565 -42.892 -41.390 -40.038 -38.818 -37.716 -36.721 -35.824 -35.018 -34.296 -33.655 -33.090 -32.599 -32.179 -31.829 -31.549 -31.337 -31.195 -31.123 -31.123 -31.199 -31.353 -31.589 -31.914 -32.333 -32.856 -33.493 -34.261 -35.176 -36.264 -37.556 -39.102 -40.968 -43.252 -46.085 -49.565 -53.155 -54.905 -54.197 -53.221 -53.488 -55.414 -56.127 -51.849 -45.951 -41.293 -37.603 -34.535 -31.898 -29.578 -27.503 -25.625 -23.908 -22.327 -20.864 -19.502 -18.230 -17.038 -15.918 -14.865 -13.872 -12.933 -12.046 -11.204 -10.404 -9.646 -8.926 -8.244 -7.597 -6.984 -6.403 -5.853 -5.333 -4.841 -4.377 -3.939 -3.528 -3.142 -2.781 -2.443 -2.129 -1.838 -1.570 -1.324 -1.099 -0.896 -0.714 -0.554 -0.413 -0.294 -0.195 -0.116 -0.057 -0.019 0.000 -0.001 -0.023 -0.061 -0.119 -0.197 -0.295 -0.414 -0.554 -0.714 -0.895 -1.098 -1.322 -1.568 -1.836 -2.127 -2.441 -2.779 -3.141 -3.528 -3.941 -4.380 -4.846 -5.340 -5.863 -6.417 -7.002 -7.621 -8.274 -8.964 -9.692 -10.462 -11.275 -12.136 -13.047 -14.013 -15.036 -16.125 -17.286 -18.531 -19.869 -21.318 -22.896 -24.630 -26.554 -28.726 -31.230 -34.220 -37.995 -43.294 -50.202 -52.413 -46.312 -43.188 -41.584 -40.818 -40.619 -40.859 -41.464 -42.364 -43.408 -44.265 -44.437 -43.667 -42.235 -40.606 -39.060 -37.698 -36.530 -35.544 -34.717 -34.033 -33.475 -33.033 -32.693 -32.450 -32.295 -32.224 -32.233 -32.319 -32.481 -32.716 -33.025 -33.406 -33.862 -34.395 -35.005 -35.698 -36.477 -37.348 -38.318 -39.396 -40.594 -41.925 -43.407 -45.064 -46.926 -49.036 -51.452 -54.258 -57.587 -61.638 -66.607 -71.129 -71.195 -68.141 -64.815 -61.719 -58.849 -56.248 -53.939 -51.908 -50.130 -48.573 -47.210 -46.016 -44.972 -44.062 -43.274 -42.595 -42.016 -41.529 -41.129 -40.812 -40.573 -40.409 -40.318 -40.299 -40.350 -40.472 -40.664 -40.927 -41.262 -41.672 -42.159 -42.727 -43.379 -44.121 -44.958 -45.899 -46.951 -48.122 -49.423 -50.863 -52.446 -54.165 -55.986 -57.830 -59.562 -61.024 -62.149 -63.046 -63.946 -65.056 -66.335 -66.984 -65.570 -62.635 -59.592 -56.901 -54.590 -52.599 -50.870 -49.357 -48.025 -46.845 -45.798 -44.867 -44.040 -43.307 -42.659 -42.089 -41.591 -41.162 -40.797 -40.493 -40.247 -40.058 -39.922 -39.839 -39.805 -39.821 -39.888 -40.005 -40.171 -40.388 -40.656 -40.975 -41.347 -41.772 -42.253 -42.791 -43.389 -44.050 -44.777 -45.576 -46.450 -47.399 -48.349 -49.298 -50.247 -51.196 -52.145 0.03 -18.2062 -17.847 -17.4915 -17.1395 -16.7911 -16.4462 -16.105 -15.7673 -15.4332 -15.1027 -14.7757 -14.4524 -14.1326 -13.8164 -13.5037 -13.1947 -12.8892 -12.5873 -12.289 -11.9942 -11.703 -11.4155 -11.1314 -10.851 -10.5741 -10.3009 -10.0311 -9.765 -9.5025 -9.2435 -8.9881 -8.7363 -8.488 -8.2434 -8.0023 -7.7648 -7.5308 -7.3005 -7.0737 -6.8505 -6.6309 -6.4148 -6.2024 -5.9935 -5.7882 -5.5864 -5.3883 -5.1937 -5.0027 -4.8152 -4.6314 -4.4511 -4.2744 -4.1013 -3.9318 -3.7658 -3.6034 -3.4446 -3.2894 -3.1377 -2.9896 -2.8451 -2.7042 -2.5669 -2.4331 -2.3029 -2.1763 -2.0533 -1.9338 -1.8179 -1.7056 -1.5969 -1.4918 -1.3902 -1.2922 -1.1978 -1.1069 -1.0197 -0.93598 -0.85588 -0.77935 -0.7064 -0.63702 -0.57122 -0.509 -0.45036 -0.39529 -0.34381 -0.2959 -0.25156 -0.21081 -0.17363 -0.14003 -0.11 -0.083555 -0.060686 -0.041394 -0.02568 -0.013542 -0.0049825 0 0.0014052 -0.00076704 -0.0065166 -0.015843 -0.028748 -0.045229 -0.065288 -0.088925 -0.11614 -0.14693 -0.1813 -0.21924 -0.26077 -0.30587 -0.35455 -0.4068 -0.46263 -0.52204 -0.58503 -0.65159 -0.72174 -0.79546 -0.87275 -0.95363 -1.0381 -1.1261 -1.2177 -1.3129 -1.4117 -1.514 -1.6199 -1.7294 -1.8425 -1.9591 -2.0793 -2.2031 -2.3305 -2.4615 -2.596 -2.7341 -2.8758 -3.0211 -3.1699 -3.3224 -3.4784 -3.6379 -3.8011 -3.9678 -4.1381 -4.312 -4.4895 -4.6705 -4.8551 -5.0433 -5.2351 -5.4304 -5.6294 -5.8319 -6.038 -6.2476 -6.4608 -6.6777 -6.8981 -7.122 -7.3496 -7.5807 -7.8154 -8.0537 -8.2955 -8.541 -8.79 -9.0426 -9.2987 -9.5585 -9.8218 -10.0887 -10.3591 -10.6332 -10.9108 -11.192 -11.4768 -11.7652 -12.0571 -12.3526 -12.6517 -12.9544 -13.2606 -13.5705 -13.8839 -14.2009 -14.5214 -14.8455 -15.1733 -15.5045 -15.8394 -16.1779 -16.5199 -16.8655 -17.2146 -17.5674 1.0 56559.76 EW2 HV 25.19 29.82 0.050 -2.467e+08 -2.101e+08 -1.356e+08 -8.964e+07 -6.214e+07 -1.575e+07 -2.811e+07 3.007e+07 -1.318e+07 1.070e+08 2.150e+07 2.644e+08 8.797e+07 5.132e+08 1.859e+08 8.582e+08 3.118e+08 1.301e+09 4.614e+08 1.840e+09 6.293e+08 2.474e+09 8.090e+08 3.195e+09 9.940e+08 3.994e+09 1.178e+09 4.862e+09 1.353e+09 5.785e+09 1.513e+09 6.750e+09 1.652e+09 7.743e+09 1.763e+09 8.747e+09 1.842e+09 9.749e+09 1.885e+09 1.074e+10 1.887e+09 1.170e+10 1.848e+09 1.262e+10 1.763e+09 1.349e+10 1.633e+09 1.431e+10 1.456e+09 1.507e+10 1.232e+09 1.577e+10 9.623e+08 1.639e+10 6.468e+08 1.696e+10 2.865e+08 1.745e+10 -1.168e+08 1.788e+10 -5.613e+08 1.824e+10 -1.046e+09 1.854e+10 -1.568e+09 1.878e+10 -2.125e+09 1.896e+10 -2.715e+09 1.909e+10 -3.336e+09 1.915e+10 -3.983e+09 1.916e+10 -4.654e+09 1.911e+10 -5.346e+09 1.901e+10 -6.052e+09 1.884e+10 -6.769e+09 1.862e+10 -7.490e+09 1.833e+10 -8.210e+09 1.797e+10 -8.921e+09 1.755e+10 -9.616e+09 1.705e+10 -1.029e+10 1.649e+10 -1.093e+10 1.585e+10 -1.153e+10 1.515e+10 -1.208e+10 1.438e+10 -1.257e+10 1.354e+10 -1.300e+10 1.264e+10 -1.336e+10 1.169e+10 -1.365e+10 1.070e+10 -1.385e+10 9.664e+09 -1.397e+10 8.605e+09 -1.401e+10 7.528e+09 -1.396e+10 6.443e+09 -1.383e+10 5.364e+09 -1.362e+10 4.298e+09 -1.334e+10 3.254e+09 -1.298e+10 2.244e+09 -1.256e+10 1.274e+09 -1.209e+10 3.496e+08 -1.156e+10 -5.225e+08 -1.099e+10 -1.340e+09 -1.039e+10 -2.100e+09 -9.761e+09 -2.802e+09 -9.114e+09 -3.446e+09 -8.455e+09 -4.035e+09 -7.792e+09 -4.572e+09 -7.129e+09 -5.062e+09 -6.469e+09 -5.511e+09 -5.817e+09 -5.924e+09 -5.173e+09 -6.307e+09 -4.538e+09 -6.667e+09 -3.911e+09 -7.008e+09 -3.291e+09 -7.336e+09 -2.674e+09 -7.654e+09 -2.059e+09 -7.964e+09 -1.443e+09 -8.268e+09 -8.247e+08 -8.566e+09 -2.033e+08 -8.856e+09 4.212e+08 -9.135e+09 1.048e+09 -9.400e+09 1.674e+09 -9.647e+09 2.295e+09 -9.871e+09 2.907e+09 -1.007e+10 3.502e+09 -1.023e+10 4.075e+09 -1.035e+10 4.618e+09 -1.044e+10 5.122e+09 -1.047e+10 5.579e+09 -1.046e+10 5.983e+09 -1.039e+10 6.324e+09 -1.027e+10 6.596e+09 -1.009e+10 6.794e+09 -9.857e+09 6.911e+09 -9.573e+09 6.945e+09 -9.242e+09 6.893e+09 -8.869e+09 6.755e+09 -8.459e+09 6.534e+09 -8.023e+09 6.233e+09 -7.568e+09 5.859e+09 -7.104e+09 5.419e+09 -6.642e+09 4.924e+09 -6.193e+09 4.386e+09 -5.769e+09 3.819e+09 -5.382e+09 3.239e+09 -5.046e+09 2.658e+09 -4.775e+09 2.088e+09 -4.591e+09 1.531e+09 -4.518e+09 9.749e+08 -4.588e+09 3.936e+08 -4.841e+09 -2.604e+08 -5.323e+09 -1.049e+09 -6.084e+09 -2.043e+09 -7.179e+09 -3.315e+09 -8.670e+09 -4.936e+09 -1.063e+10 -6.967e+09 -1.313e+10 -9.469e+09 -1.627e+10 -1.249e+10 -2.015e+10 -1.606e+10 -2.488e+10 -2.023e+10 -3.058e+10 -2.500e+10 -3.735e+10 -3.037e+10 -4.533e+10 -3.635e+10 -5.462e+10 -4.288e+10 -6.534e+10 -4.993e+10 -7.756e+10 -5.742e+10 -9.138e+10 -6.525e+10 -1.069e+11 -7.331e+10 -1.241e+11 -8.146e+10 -1.430e+11 -8.953e+10 -1.636e+11 -9.734e+10 -1.859e+11 -1.047e+11 -2.099e+11 -1.113e+11 -2.354e+11 -1.171e+11 -2.623e+11 -1.216e+11 -2.906e+11 -1.247e+11 -3.201e+11 -1.261e+11 -3.506e+11 -1.255e+11 -3.820e+11 -1.227e+11 -4.141e+11 -1.173e+11 -4.468e+11 -1.091e+11 -4.799e+11 -9.770e+10 -5.133e+11 -8.293e+10 -5.467e+11 -6.443e+10 -5.801e+11 -4.188e+10 -6.134e+11 -1.496e+10 -6.467e+11 1.674e+10 -6.798e+11 5.367e+10 -7.130e+11 9.631e+10 -7.462e+11 1.454e+11 -7.797e+11 2.016e+11 -8.137e+11 2.660e+11 -8.484e+11 3.396e+11 -8.840e+11 4.241e+11 -9.208e+11 5.210e+11 -9.589e+11 6.326e+11 -9.984e+11 7.611e+11 -1.039e+12 9.093e+11 -1.082e+12 1.081e+12 -1.125e+12 1.278e+12 -1.168e+12 1.507e+12 -1.211e+12 1.770e+12 -1.252e+12 2.072e+12 -1.291e+12 2.419e+12 -1.324e+12 2.817e+12 -1.351e+12 3.270e+12 -1.368e+12 3.784e+12 -1.374e+12 4.366e+12 -1.366e+12 5.024e+12 -1.340e+12 5.761e+12 -1.293e+12 6.587e+12 -1.222e+12 7.508e+12 -1.123e+12 8.530e+12 -9.922e+11 9.661e+12 -8.255e+11 1.091e+13 -6.190e+11 1.299e+13 -3.904e+11 1.457e+13 -7.501e+10 1.629e+13 2.942e+11 1.815e+13 7.200e+11 2.018e+13 1.207e+12 2.237e+13 1.759e+12 2.471e+13 2.381e+12 2.723e+13 3.073e+12 2.994e+13 3.841e+12 3.282e+13 4.685e+12 3.589e+13 5.611e+12 3.914e+13 6.617e+12 4.259e+13 7.708e+12 4.624e+13 8.884e+12 5.007e+13 1.015e+13 5.411e+13 1.149e+13 5.835e+13 1.292e+13 6.279e+13 1.445e+13 6.742e+13 1.605e+13 7.225e+13 1.774e+13 7.728e+13 1.952e+13 8.250e+13 2.137e+13 8.790e+13 2.330e+13 9.350e+13 2.530e+13 9.926e+13 2.737e+13 1.052e+14 2.950e+13 1.113e+14 3.169e+13 1.176e+14 3.392e+13 1.239e+14 3.620e+13 1.305e+14 3.851e+13 1.372e+14 4.084e+13 1.440e+14 4.318e+13 1.509e+14 4.552e+13 1.580e+14 4.785e+13 1.650e+14 5.017e+13 1.721e+14 5.244e+13 1.793e+14 5.465e+13 1.865e+14 5.679e+13 1.937e+14 5.886e+13 2.009e+14 6.082e+13 2.082e+14 6.269e+13 2.153e+14 6.441e+13 2.224e+14 6.601e+13 2.294e+14 6.747e+13 2.365e+14 6.877e+13 2.433e+14 6.989e+13 2.501e+14 7.082e+13 2.567e+14 7.155e+13 2.631e+14 7.206e+13 2.693e+14 7.235e+13 2.755e+14 7.242e+13 2.813e+14 7.225e+13 2.871e+14 7.183e+13 2.925e+14 7.118e+13 2.977e+14 7.029e+13 3.027e+14 6.915e+13 3.075e+14 6.777e+13 3.120e+14 6.615e+13 3.163e+14 6.430e+13 3.204e+14 6.221e+13 3.241e+14 5.991e+13 3.277e+14 5.737e+13 3.310e+14 5.463e+13 3.340e+14 5.169e+13 3.368e+14 4.854e+13 3.394e+14 4.522e+13 3.417e+14 4.171e+13 3.438e+14 3.803e+13 3.457e+14 3.419e+13 3.474e+14 3.021e+13 3.488e+14 2.607e+13 3.501e+14 2.181e+13 3.512e+14 1.742e+13 3.519e+14 1.292e+13 3.526e+14 8.315e+12 3.531e+14 3.618e+12 3.533e+14 -1.168e+12 3.534e+14 -6.026e+12 3.534e+14 -1.095e+13 3.530e+14 -1.593e+13 3.526e+14 -2.095e+13 3.521e+14 -2.600e+13 3.512e+14 -3.109e+13 3.504e+14 -3.619e+13 3.494e+14 -4.131e+13 3.483e+14 -4.641e+13 3.469e+14 -5.151e+13 3.454e+14 -5.656e+13 3.437e+14 -6.157e+13 3.419e+14 -6.652e+13 3.398e+14 -7.140e+13 3.377e+14 -7.620e+13 3.354e+14 -8.091e+13 3.329e+14 -8.549e+13 3.302e+14 -8.997e+13 3.274e+14 -9.430e+13 3.244e+14 -9.848e+13 3.212e+14 -1.025e+14 3.180e+14 -1.064e+14 3.145e+14 -1.100e+14 3.109e+14 -1.135e+14 3.072e+14 -1.168e+14 3.033e+14 -1.197e+14 2.993e+14 -1.226e+14 2.951e+14 -1.252e+14 2.908e+14 -1.275e+14 2.864e+14 -1.296e+14 2.817e+14 -1.315e+14 2.770e+14 -1.330e+14 2.722e+14 -1.343e+14 2.673e+14 -1.353e+14 2.622e+14 -1.361e+14 2.571e+14 -1.366e+14 2.519e+14 -1.369e+14 2.465e+14 -1.369e+14 2.411e+14 -1.366e+14 2.356e+14 -1.361e+14 2.300e+14 -1.352e+14 2.243e+14 -1.342e+14 2.186e+14 -1.329e+14 2.128e+14 -1.313e+14 2.070e+14 -1.296e+14 2.023e+14 -1.271e+14 1.970e+14 -1.248e+14 1.910e+14 -1.223e+14 1.850e+14 -1.198e+14 1.790e+14 -1.170e+14 1.729e+14 -1.141e+14 1.669e+14 -1.111e+14 1.609e+14 -1.080e+14 1.549e+14 -1.046e+14 1.488e+14 -1.012e+14 1.429e+14 -9.768e+13 1.370e+14 -9.410e+13 1.311e+14 -9.046e+13 1.253e+14 -8.677e+13 1.197e+14 -8.305e+13 1.141e+14 -7.931e+13 1.086e+14 -7.558e+13 1.031e+14 -7.185e+13 9.786e+13 -6.815e+13 9.271e+13 -6.450e+13 8.766e+13 -6.089e+13 8.276e+13 -5.735e+13 7.800e+13 -5.389e+13 7.338e+13 -5.051e+13 6.891e+13 -4.723e+13 6.460e+13 -4.405e+13 6.044e+13 -4.097e+13 5.645e+13 -3.801e+13 5.262e+13 -3.516e+13 4.895e+13 -3.244e+13 4.545e+13 -2.984e+13 4.210e+13 -2.738e+13 3.892e+13 -2.504e+13 3.590e+13 -2.282e+13 3.303e+13 -2.075e+13 3.032e+13 -1.879e+13 2.777e+13 -1.696e+13 2.537e+13 -1.525e+13 2.311e+13 -1.366e+13 2.099e+13 -1.219e+13 1.902e+13 -1.083e+13 1.717e+13 -9.578e+12 1.547e+13 -8.439e+12 1.388e+13 -7.395e+12 1.242e+13 -6.445e+12 1.107e+13 -5.585e+12 1.038e+13 -5.077e+12 9.187e+12 -4.346e+12 8.100e+12 -3.693e+12 7.111e+12 -3.114e+12 6.215e+12 -2.602e+12 5.408e+12 -2.153e+12 4.683e+12 -1.762e+12 4.034e+12 -1.424e+12 3.458e+12 -1.135e+12 2.947e+12 -8.886e+11 2.497e+12 -6.814e+11 2.104e+12 -5.091e+11 1.761e+12 -3.673e+11 1.465e+12 -2.524e+11 1.210e+12 -1.608e+11 9.927e+11 -8.915e+10 8.085e+11 -3.429e+10 6.537e+11 6.473e+09 5.246e+11 3.573e+10 4.178e+11 5.571e+10 3.303e+11 6.840e+10 2.593e+11 7.553e+10 2.021e+11 7.855e+10 1.565e+11 7.870e+10 1.204e+11 7.695e+10 9.191e+10 7.404e+10 6.959e+10 7.053e+10 5.205e+10 6.675e+10 3.822e+10 6.291e+10 2.727e+10 5.906e+10 1.855e+10 5.521e+10 1.160e+10 5.131e+10 6.102e+09 4.732e+10 1.816e+09 4.320e+10 -1.414e+09 3.894e+10 -3.714e+09 3.457e+10 -5.191e+09 3.013e+10 -5.944e+09 2.569e+10 -6.082e+09 2.133e+10 -5.718e+09 1.714e+10 -4.976e+09 1.322e+10 -3.987e+09 9.676e+09 -2.886e+09 6.580e+09 -1.810e+09 4.019e+09 -8.945e+08 2.062e+09 -2.671e+08 7.613e+08 2.439e+07 1.428e+08 3.903e+08 -2.484e+08 1.310e+09 -1.099e+09 2.926e+09 -2.659e+09 5.287e+09 -4.908e+09 8.429e+09 -7.807e+09 1.236e+10 -1.130e+10 1.706e+10 -1.531e+10 2.251e+10 -1.975e+10 2.864e+10 -2.453e+10 3.536e+10 -2.955e+10 4.259e+10 -3.469e+10 5.021e+10 -3.983e+10 5.810e+10 -4.486e+10 6.613e+10 -4.967e+10 7.415e+10 -5.415e+10 8.203e+10 -5.819e+10 8.964e+10 -6.170e+10 9.684e+10 -6.461e+10 1.035e+11 -6.686e+10 1.096e+11 -6.840e+10 1.149e+11 -6.920e+10 1.195e+11 -6.927e+10 1.232e+11 -6.861e+10 1.261e+11 -6.724e+10 1.280e+11 -6.521e+10 1.291e+11 -6.259e+10 1.293e+11 -5.943e+10 1.286e+11 -5.583e+10 1.272e+11 -5.188e+10 1.249e+11 -4.765e+10 1.221e+11 -4.323e+10 1.186e+11 -3.870e+10 1.145e+11 -3.414e+10 1.100e+11 -2.963e+10 1.052e+11 -2.524e+10 9.998e+10 -2.102e+10 9.455e+10 -1.702e+10 8.893e+10 -1.329e+10 8.321e+10 -9.853e+09 7.743e+10 -6.737e+09 7.164e+10 -3.951e+09 6.591e+10 -1.504e+09 6.026e+10 6.053e+08 5.475e+10 2.385e+09 4.941e+10 3.847e+09 4.428e+10 5.006e+09 3.938e+10 5.886e+09 3.475e+10 6.508e+09 3.040e+10 6.899e+09 2.634e+10 7.085e+09 2.261e+10 7.094e+09 1.919e+10 6.953e+09 1.611e+10 6.691e+09 1.335e+10 6.333e+09 1.091e+10 5.905e+09 8.778e+09 5.428e+09 6.947e+09 4.925e+09 5.395e+09 4.414e+09 4.098e+09 3.909e+09 3.035e+09 3.424e+09 2.177e+09 2.969e+09 1.498e+09 2.550e+09 9.704e+08 2.171e+09 5.686e+08 1.832e+09 2.687e+08 1.532e+09 5.077e+07 1.267e+09 -1.018e+08 1.033e+09 -2.019e+08 8.236e+08 -2.593e+08 6.369e+08 -2.815e+08 4.704e+08 -2.750e+08 3.238e+08 -2.469e+08 1.990e+08 -2.055e+08 9.817e+07 -1.610e+08 2.134e+07 -1.237e+08 -3.872e+07 -9.691e+07 -1.023e+08 -6.807e+07 -1.969e+08 -1.392e+07 -3.432e+08 8.899e+07 -5.516e+08 2.606e+08 -8.264e+08 5.178e+08 -1.168e+09 8.754e+08 -1.576e+09 1.347e+09 -2.045e+09 1.944e+09 -2.571e+09 2.675e+09 -3.144e+09 3.548e+09 -3.756e+09 4.568e+09 -4.396e+09 5.736e+09 -5.051e+09 7.053e+09 -5.709e+09 8.518e+09 -6.356e+09 1.012e+10 -6.978e+09 1.187e+10 -7.562e+09 1.374e+10 -8.096e+09 1.572e+10 -8.568e+09 1.781e+10 -8.967e+09 1.998e+10 -9.284e+09 2.222e+10 -9.511e+09 2.452e+10 -9.643e+09 2.684e+10 -9.675e+09 2.916e+10 -9.605e+09 3.147e+10 -9.433e+09 3.374e+10 -9.159e+09 3.593e+10 -8.788e+09 3.804e+10 -8.324e+09 4.002e+10 -7.773e+09 4.186e+10 -7.144e+09 4.353e+10 -6.444e+09 4.501e+10 -5.684e+09 4.629e+10 -4.874e+09 4.734e+10 -4.025e+09 4.815e+10 -3.150e+09 4.871e+10 -2.261e+09 4.902e+10 -1.368e+09 4.907e+10 -4.842e+08 4.886e+10 3.793e+08 4.840e+10 1.213e+09 4.769e+10 2.007e+09 4.676e+10 2.751e+09 4.560e+10 3.438e+09 4.425e+10 4.061e+09 4.271e+10 4.612e+09 4.101e+10 5.087e+09 3.918e+10 5.482e+09 3.723e+10 5.794e+09 3.518e+10 6.019e+09 3.307e+10 6.159e+09 3.091e+10 6.212e+09 2.871e+10 6.181e+09 2.651e+10 6.069e+09 2.433e+10 5.878e+09 2.217e+10 5.615e+09 2.006e+10 5.286e+09 1.800e+10 4.899e+09 1.603e+10 4.463e+09 1.413e+10 3.987e+09 1.234e+10 3.483e+09 1.065e+10 2.963e+09 9.082e+09 2.439e+09 7.636e+09 1.925e+09 6.320e+09 1.434e+09 5.139e+09 9.766e+08 4.101e+09 5.668e+08 3.208e+09 2.121e+08 2.459e+09 -8.372e+07 1.858e+09 -3.231e+08 1.400e+09 -5.222e+08 1.073e+09 -7.137e+08 8.473e+08 -9.448e+08 6.804e+08 -1.264e+09 5.262e+08 -1.703e+09 3.522e+08 -2.278e+09 1.416e+08 -2.990e+09 -1.102e+08 -3.838e+09 -3.993e+08 -4.815e+09 -7.178e+08 -5.912e+09 -1.056e+09 -7.123e+09 -1.402e+09 -8.435e+09 -1.744e+09 -9.838e+09 -2.071e+09 -1.132e+10 -2.371e+09 -1.287e+10 -2.636e+09 -1.448e+10 -2.857e+09 -1.614e+10 -3.027e+09 -1.782e+10 -3.140e+09 -1.953e+10 -3.191e+09 -2.125e+10 -3.178e+09 -2.296e+10 -3.101e+09 -2.466e+10 -2.958e+09 -2.634e+10 -2.752e+09 -2.798e+10 -2.486e+09 -2.957e+10 -2.163e+09 -3.110e+10 -1.788e+09 -3.256e+10 -1.368e+09 -3.394e+10 -9.090e+08 -3.522e+10 -4.177e+08 -3.639e+10 9.768e+07 -3.744e+10 6.297e+08 -3.835e+10 1.170e+09 -3.913e+10 1.711e+09 -3.975e+10 2.245e+09 -4.020e+10 2.764e+09 -4.048e+10 3.262e+09 -4.058e+10 3.731e+09 -4.050e+10 4.168e+09 -4.024e+10 4.566e+09 -3.979e+10 4.922e+09 -3.916e+10 5.232e+09 -3.835e+10 5.494e+09 -3.738e+10 5.703e+09 -3.625e+10 5.862e+09 -3.498e+10 5.971e+09 -3.358e+10 6.032e+09 -3.208e+10 6.046e+09 -3.047e+10 6.015e+09 -2.880e+10 5.940e+09 -2.707e+10 5.825e+09 -2.531e+10 5.675e+09 -2.354e+10 5.492e+09 -2.178e+10 5.279e+09 -2.003e+10 5.041e+09 -1.833e+10 4.783e+09 -1.668e+10 4.507e+09 -1.509e+10 4.218e+09 -1.357e+10 3.921e+09 -1.214e+10 3.619e+09 -1.080e+10 3.315e+09 -9.549e+09 3.015e+09 -8.394e+09 2.720e+09 -7.333e+09 0.005 -53.972 -53.002 -52.033 -51.063 -50.094 -49.124 -48.155 -47.274 -46.484 -45.778 -45.149 -44.594 -44.108 -43.688 -43.333 -43.039 -42.807 -42.635 -42.522 -42.468 -42.474 -42.541 -42.670 -42.861 -43.117 -43.441 -43.837 -44.311 -44.868 -45.517 -46.265 -47.126 -48.116 -49.255 -50.573 -52.113 -53.938 -56.154 -58.952 -62.749 -68.787 -84.481 -73.535 -66.919 -63.939 -62.305 -61.418 -61.032 -60.968 -61.013 -60.861 -60.181 -58.869 -57.132 -55.263 -53.451 -51.775 -50.259 -48.899 -47.686 -46.605 -45.645 -44.795 -44.044 -43.387 -42.817 -42.330 -41.923 -41.591 -41.333 -41.147 -41.033 -40.989 -41.016 -41.115 -41.288 -41.535 -41.860 -42.266 -42.758 -43.339 -44.016 -44.795 -45.683 -46.689 -47.819 -49.083 -50.478 -51.999 -53.621 -55.303 -56.991 -58.648 -60.312 -62.111 -64.086 -65.377 -64.101 -60.512 -56.786 -53.582 -50.866 -48.530 -46.493 -44.696 -43.098 -41.668 -40.384 -39.227 -38.185 -37.247 -36.404 -35.650 -34.979 -34.388 -33.873 -33.431 -33.061 -32.762 -32.533 -32.376 -32.291 -32.280 -32.345 -32.492 -32.724 -33.047 -33.469 -33.999 -34.649 -35.436 -36.381 -37.512 -38.865 -40.489 -42.450 -44.814 -47.547 -50.137 -51.357 -50.745 -49.520 -48.751 -48.812 -49.982 -52.565 -53.758 -49.841 -44.221 -39.785 -36.274 -33.355 -30.842 -28.629 -26.645 -24.845 -23.198 -21.679 -20.270 -18.956 -17.728 -16.576 -15.492 -14.472 -13.508 -12.597 -11.734 -10.916 -10.137 -9.399 -8.698 -8.033 -7.402 -6.804 -6.237 -5.700 -5.191 -4.711 -4.258 -3.831 -3.429 -3.052 -2.698 -2.369 -2.062 -1.778 -1.516 -1.276 -1.058 -0.860 -0.684 -0.528 -0.392 -0.277 -0.181 -0.106 -0.051 -0.016 0.000 -0.004 -0.028 -0.068 -0.128 -0.208 -0.308 -0.428 -0.569 -0.730 -0.913 -1.116 -1.341 -1.587 -1.855 -2.146 -2.460 -2.798 -3.159 -3.546 -3.957 -4.395 -4.859 -5.352 -5.873 -6.425 -7.008 -7.624 -8.274 -8.961 -9.686 -10.451 -11.260 -12.116 -13.022 -13.982 -14.998 -16.080 -17.234 -18.469 -19.798 -21.236 -22.802 -24.522 -26.431 -28.585 -31.071 -34.038 -37.788 -43.058 -49.932 -52.103 -45.955 -42.774 -41.103 -40.255 -39.957 -40.078 -40.549 -41.319 -42.313 -43.357 -44.103 -44.123 -43.298 -41.943 -40.455 -39.057 -37.828 -36.779 -35.896 -35.165 -34.571 -34.099 -33.738 -33.479 -33.314 -33.238 -33.247 -33.337 -33.507 -33.754 -34.078 -34.478 -34.956 -35.512 -36.149 -36.870 -37.677 -38.575 -39.568 -40.662 -41.862 -43.174 -44.602 -46.153 -47.830 -49.640 -51.595 -53.731 -56.135 -58.989 -62.522 -65.488 -64.102 -59.997 -56.216 -53.211 -50.756 -48.688 -46.911 -45.364 -44.004 -42.803 -41.739 -40.796 -39.960 -39.223 -38.576 -38.011 -37.522 -37.106 -36.757 -36.473 -36.251 -36.090 -35.987 -35.942 -35.952 -36.019 -36.142 -36.320 -36.555 -36.847 -37.198 -37.608 -38.082 -38.620 -39.227 -39.906 -40.661 -41.497 -42.423 -43.447 -44.582 -45.840 -47.238 -48.799 -50.550 -52.530 -54.788 -57.390 -60.419 -63.947 -67.880 -71.445 -73.316 -74.180 -75.203 -74.654 -70.651 -66.144 -62.414 -59.388 -56.889 -54.784 -52.985 -51.432 -50.080 -48.897 -47.860 -46.951 -46.154 -45.458 -44.855 -44.336 -43.895 -43.528 -43.230 -42.997 -42.826 -42.715 -42.663 -42.669 -42.733 -42.853 -43.030 -43.263 -43.554 -43.903 -44.312 -44.782 -45.315 -45.915 -46.585 -47.331 -48.157 -49.061 -49.966 -50.870 -51.774 -52.679 -53.583 0.03 -18.9108 -18.5376 -18.1682 -17.8025 -17.4406 -17.0823 -16.7277 -16.3769 -16.0298 -15.6864 -15.3467 -15.0108 -14.6785 -14.35 -14.0252 -13.7041 -13.3868 -13.0731 -12.7632 -12.457 -12.1545 -11.8557 -11.5606 -11.2693 -10.9817 -10.6978 -10.4176 -10.1411 -9.8683 -9.5993 -9.334 -9.0724 -8.8145 -8.5603 -8.3099 -8.0631 -7.8201 -7.5808 -7.3452 -7.1134 -6.8852 -6.6608 -6.4401 -6.2231 -6.0098 -5.8003 -5.5945 -5.3923 -5.1939 -4.9992 -4.8083 -4.621 -4.4375 -4.2577 -4.0816 -3.9092 -3.7406 -3.5756 -3.4144 -3.2569 -3.1031 -2.953 -2.8067 -2.664 -2.5251 -2.3899 -2.2584 -2.1307 -2.0066 -1.8863 -1.7697 -1.6568 -1.5476 -1.4421 -1.3404 -1.2424 -1.1481 -1.0575 -0.9706 -0.88744 -0.80801 -0.73229 -0.66029 -0.592 -0.52744 -0.46659 -0.40946 -0.35605 -0.30636 -0.26038 -0.21812 -0.17958 -0.14475 -0.11365 -0.086259 -0.062589 -0.042635 -0.0264 -0.013882 -0.0050823 0 0.0013646 -0.0009884 -0.0070591 -0.016848 -0.030354 -0.047577 -0.068519 -0.093178 -0.12155 -0.15365 -0.18946 -0.22899 -0.27224 -0.3192 -0.36989 -0.42429 -0.48241 -0.54424 -0.6098 -0.67907 -0.75206 -0.82876 -0.90919 -0.99333 -1.0812 -1.1728 -1.2681 -1.3671 -1.4698 -1.5763 -1.6864 -1.8003 -1.9179 -2.0392 -2.1643 -2.293 -2.4255 -2.5617 -2.7016 -2.8452 -2.9926 -3.1436 -3.2984 -3.4569 -3.6191 -3.785 -3.9547 -4.128 -4.3051 -4.4859 -4.6705 -4.8587 -5.0506 -5.2463 -5.4457 -5.6488 -5.8556 -6.0662 -6.2804 -6.4984 -6.7201 -6.9455 -7.1747 -7.4075 -7.6441 -7.8844 -8.1284 -8.3761 -8.6275 -8.8827 -9.1416 -9.4042 -9.6705 -9.9405 -10.2142 -10.4917 -10.7729 -11.0578 -11.3464 -11.6387 -11.9348 -12.2345 -12.538 -12.8452 -13.1561 -13.4708 -13.7891 -14.1112 -14.437 -14.7665 -15.0997 -15.4367 -15.7773 -16.1217 -16.4698 -16.8216 -17.1772 -17.5364 -17.8994 -18.2661 1.0 56559.76 EW2 VV 25.19 29.82 0.050 -2.622e+08 1.880e+08 -1.195e+08 1.090e+08 -3.054e+07 5.600e+07 2.185e+07 3.466e+07 9.950e+07 4.011e+07 2.594e+08 4.806e+07 5.154e+08 5.082e+07 8.721e+08 5.114e+07 1.330e+09 5.378e+07 1.887e+09 6.410e+07 2.541e+09 8.758e+07 3.280e+09 1.295e+08 4.097e+09 1.947e+08 4.979e+09 2.879e+08 5.912e+09 4.123e+08 6.880e+09 5.721e+08 7.867e+09 7.686e+08 8.856e+09 1.003e+09 9.832e+09 1.275e+09 1.078e+10 1.585e+09 1.169e+10 1.932e+09 1.254e+10 2.315e+09 1.334e+10 2.733e+09 1.406e+10 3.181e+09 1.471e+10 3.660e+09 1.527e+10 4.166e+09 1.576e+10 4.697e+09 1.616e+10 5.250e+09 1.648e+10 5.825e+09 1.671e+10 6.418e+09 1.687e+10 7.027e+09 1.695e+10 7.651e+09 1.696e+10 8.288e+09 1.689e+10 8.934e+09 1.675e+10 9.589e+09 1.655e+10 1.025e+10 1.628e+10 1.091e+10 1.595e+10 1.157e+10 1.555e+10 1.222e+10 1.509e+10 1.286e+10 1.456e+10 1.348e+10 1.397e+10 1.407e+10 1.333e+10 1.464e+10 1.262e+10 1.517e+10 1.185e+10 1.565e+10 1.102e+10 1.607e+10 1.014e+10 1.643e+10 9.217e+09 1.673e+10 8.247e+09 1.694e+10 7.240e+09 1.708e+10 6.205e+09 1.712e+10 5.150e+09 1.707e+10 4.086e+09 1.693e+10 3.021e+09 1.669e+10 1.967e+09 1.636e+10 9.350e+08 1.594e+10 -6.653e+07 1.544e+10 -1.026e+09 1.485e+10 -1.936e+09 1.419e+10 -2.789e+09 1.347e+10 -3.578e+09 1.270e+10 -4.299e+09 1.188e+10 -4.950e+09 1.102e+10 -5.527e+09 1.014e+10 -6.031e+09 9.244e+09 -6.464e+09 8.340e+09 -6.827e+09 7.439e+09 -7.126e+09 6.547e+09 -7.365e+09 5.667e+09 -7.551e+09 4.808e+09 -7.690e+09 3.970e+09 -7.790e+09 3.155e+09 -7.856e+09 2.364e+09 -7.896e+09 1.594e+09 -7.914e+09 8.434e+08 -7.915e+09 1.097e+08 -7.903e+09 -6.113e+08 -7.881e+09 -1.324e+09 -7.848e+09 -2.030e+09 -7.805e+09 -2.733e+09 -7.751e+09 -3.435e+09 -7.684e+09 -4.134e+09 -7.603e+09 -4.830e+09 -7.505e+09 -5.520e+09 -7.388e+09 -6.198e+09 -7.250e+09 -6.860e+09 -7.089e+09 -7.498e+09 -6.906e+09 -8.104e+09 -6.698e+09 -8.670e+09 -6.468e+09 -9.188e+09 -6.215e+09 -9.647e+09 -5.942e+09 -1.004e+10 -5.650e+09 -1.036e+10 -5.344e+09 -1.059e+10 -5.026e+09 -1.074e+10 -4.702e+09 -1.079e+10 -4.377e+09 -1.075e+10 -4.056e+09 -1.062e+10 -3.746e+09 -1.039e+10 -3.452e+09 -1.006e+10 -3.182e+09 -9.655e+09 -2.941e+09 -9.171e+09 -2.735e+09 -8.621e+09 -2.568e+09 -8.017e+09 -2.444e+09 -7.374e+09 -2.367e+09 -6.709e+09 -2.339e+09 -6.041e+09 -2.363e+09 -5.389e+09 -2.444e+09 -4.774e+09 -2.593e+09 -4.216e+09 -2.828e+09 -3.729e+09 -3.181e+09 -3.326e+09 -3.699e+09 -3.005e+09 -4.443e+09 -2.756e+09 -5.489e+09 -2.560e+09 -6.919e+09 -2.393e+09 -8.824e+09 -2.235e+09 -1.130e+10 -2.074e+09 -1.444e+10 -1.911e+09 -1.837e+10 -1.759e+09 -2.317e+10 -1.644e+09 -2.896e+10 -1.607e+09 -3.585e+10 -1.700e+09 -4.394e+10 -1.986e+09 -5.330e+10 -2.544e+09 -6.402e+10 -3.460e+09 -7.616e+10 -4.833e+09 -8.974e+10 -6.768e+09 -1.048e+11 -9.383e+09 -1.213e+11 -1.280e+10 -1.391e+11 -1.713e+10 -1.582e+11 -2.252e+10 -1.785e+11 -2.909e+10 -1.999e+11 -3.696e+10 -2.220e+11 -4.627e+10 -2.448e+11 -5.715e+10 -2.679e+11 -6.969e+10 -2.911e+11 -8.402e+10 -3.142e+11 -1.003e+11 -3.367e+11 -1.185e+11 -3.585e+11 -1.388e+11 -3.793e+11 -1.614e+11 -3.987e+11 -1.863e+11 -4.163e+11 -2.137e+11 -4.320e+11 -2.436e+11 -4.455e+11 -2.762e+11 -4.565e+11 -3.117e+11 -4.647e+11 -3.504e+11 -4.700e+11 -3.924e+11 -4.721e+11 -4.382e+11 -4.708e+11 -4.883e+11 -4.657e+11 -5.431e+11 -4.566e+11 -6.034e+11 -4.430e+11 -6.701e+11 -4.244e+11 -7.441e+11 -4.000e+11 -8.267e+11 -3.687e+11 -9.192e+11 -3.295e+11 -1.023e+12 -2.805e+11 -1.141e+12 -2.200e+11 -1.274e+12 -1.454e+11 -1.424e+12 -5.393e+10 -1.594e+12 5.775e+10 -1.785e+12 1.933e+11 -2.001e+12 3.571e+11 -2.245e+12 5.541e+11 -2.517e+12 7.890e+11 -2.821e+12 1.068e+12 -3.160e+12 1.397e+12 -3.536e+12 1.783e+12 -3.951e+12 2.232e+12 -4.407e+12 2.752e+12 -4.908e+12 3.349e+12 -5.455e+12 4.034e+12 -6.050e+12 4.812e+12 -6.695e+12 5.692e+12 -7.393e+12 6.683e+12 -8.145e+12 7.793e+12 -8.952e+12 9.534e+12 -1.036e+13 1.097e+13 -1.133e+13 1.257e+13 -1.236e+13 1.431e+13 -1.346e+13 1.622e+13 -1.461e+13 1.830e+13 -1.584e+13 2.056e+13 -1.712e+13 2.300e+13 -1.847e+13 2.563e+13 -1.990e+13 2.847e+13 -2.140e+13 3.150e+13 -2.296e+13 3.475e+13 -2.459e+13 3.821e+13 -2.629e+13 4.188e+13 -2.806e+13 4.576e+13 -2.990e+13 4.987e+13 -3.182e+13 5.420e+13 -3.381e+13 5.876e+13 -3.587e+13 6.354e+13 -3.799e+13 6.855e+13 -4.020e+13 7.378e+13 -4.247e+13 7.922e+13 -4.481e+13 8.489e+13 -4.722e+13 9.076e+13 -4.970e+13 9.684e+13 -5.226e+13 1.031e+14 -5.487e+13 1.096e+14 -5.755e+13 1.163e+14 -6.031e+13 1.230e+14 -6.312e+13 1.301e+14 -6.600e+13 1.371e+14 -6.894e+13 1.444e+14 -7.194e+13 1.517e+14 -7.500e+13 1.592e+14 -7.813e+13 1.667e+14 -8.130e+13 1.742e+14 -8.453e+13 1.819e+14 -8.782e+13 1.895e+14 -9.116e+13 1.970e+14 -9.456e+13 2.046e+14 -9.801e+13 2.119e+14 -1.015e+14 2.193e+14 -1.050e+14 2.265e+14 -1.087e+14 2.337e+14 -1.123e+14 2.406e+14 -1.160e+14 2.473e+14 -1.197e+14 2.539e+14 -1.234e+14 2.602e+14 -1.272e+14 2.663e+14 -1.311e+14 2.721e+14 -1.350e+14 2.777e+14 -1.389e+14 2.829e+14 -1.429e+14 2.878e+14 -1.470e+14 2.924e+14 -1.510e+14 2.967e+14 -1.552e+14 3.007e+14 -1.593e+14 3.044e+14 -1.634e+14 3.078e+14 -1.676e+14 3.107e+14 -1.719e+14 3.134e+14 -1.761e+14 3.158e+14 -1.804e+14 3.178e+14 -1.847e+14 3.195e+14 -1.890e+14 3.210e+14 -1.933e+14 3.221e+14 -1.976e+14 3.230e+14 -2.020e+14 3.235e+14 -2.064e+14 3.238e+14 -2.107e+14 3.238e+14 -2.150e+14 3.236e+14 -2.194e+14 3.231e+14 -2.237e+14 3.222e+14 -2.280e+14 3.212e+14 -2.322e+14 3.200e+14 -2.365e+14 3.185e+14 -2.406e+14 3.168e+14 -2.448e+14 3.149e+14 -2.489e+14 3.127e+14 -2.529e+14 3.104e+14 -2.569e+14 3.078e+14 -2.607e+14 3.051e+14 -2.646e+14 3.021e+14 -2.682e+14 2.990e+14 -2.719e+14 2.957e+14 -2.755e+14 2.923e+14 -2.790e+14 2.888e+14 -2.823e+14 2.850e+14 -2.855e+14 2.813e+14 -2.887e+14 2.772e+14 -2.916e+14 2.731e+14 -2.944e+14 2.688e+14 -2.970e+14 2.644e+14 -2.994e+14 2.600e+14 -3.017e+14 2.554e+14 -3.037e+14 2.507e+14 -3.055e+14 2.460e+14 -3.071e+14 2.413e+14 -3.085e+14 2.364e+14 -3.096e+14 2.316e+14 -3.105e+14 2.267e+14 -3.111e+14 2.217e+14 -3.114e+14 2.168e+14 -3.117e+14 2.118e+14 -3.115e+14 2.069e+14 -3.110e+14 2.020e+14 -3.103e+14 1.971e+14 -3.092e+14 1.923e+14 -3.078e+14 1.874e+14 -3.062e+14 1.826e+14 -3.043e+14 1.778e+14 -3.020e+14 1.731e+14 -2.995e+14 1.684e+14 -2.966e+14 1.637e+14 -2.935e+14 1.591e+14 -2.901e+14 1.546e+14 -2.864e+14 1.501e+14 -2.823e+14 1.457e+14 -2.780e+14 1.413e+14 -2.734e+14 1.370e+14 -2.685e+14 1.327e+14 -2.634e+14 1.285e+14 -2.580e+14 1.244e+14 -2.524e+14 1.181e+14 -2.475e+14 1.178e+14 -2.410e+14 1.138e+14 -2.347e+14 1.098e+14 -2.282e+14 1.059e+14 -2.215e+14 1.020e+14 -2.148e+14 9.823e+13 -2.079e+14 9.445e+13 -2.009e+14 9.077e+13 -1.938e+14 8.716e+13 -1.867e+14 8.362e+13 -1.795e+14 8.014e+13 -1.723e+14 7.674e+13 -1.650e+14 7.341e+13 -1.579e+14 7.014e+13 -1.507e+14 6.696e+13 -1.435e+14 6.385e+13 -1.365e+14 6.081e+13 -1.296e+14 5.786e+13 -1.227e+14 5.499e+13 -1.161e+14 5.220e+13 -1.094e+14 4.948e+13 -1.031e+14 4.685e+13 -9.680e+13 4.429e+13 -9.078e+13 4.182e+13 -8.492e+13 3.943e+13 -7.926e+13 3.712e+13 -7.380e+13 3.488e+13 -6.856e+13 3.273e+13 -6.354e+13 3.066e+13 -5.874e+13 2.867e+13 -5.417e+13 2.675e+13 -4.983e+13 2.492e+13 -4.571e+13 2.316e+13 -4.182e+13 2.148e+13 -3.815e+13 1.989e+13 -3.471e+13 1.836e+13 -3.148e+13 1.691e+13 -2.845e+13 1.554e+13 -2.564e+13 1.423e+13 -2.302e+13 1.300e+13 -2.061e+13 1.185e+13 -1.837e+13 1.076e+13 -1.632e+13 9.747e+12 -1.444e+13 8.800e+12 -1.272e+13 7.917e+12 -1.115e+13 7.476e+12 -1.025e+13 6.680e+12 -8.909e+12 5.947e+12 -7.700e+12 5.273e+12 -6.618e+12 4.656e+12 -5.653e+12 4.094e+12 -4.798e+12 3.583e+12 -4.045e+12 3.121e+12 -3.384e+12 2.706e+12 -2.809e+12 2.334e+12 -2.311e+12 2.002e+12 -1.883e+12 1.708e+12 -1.519e+12 1.449e+12 -1.211e+12 1.222e+12 -9.524e+11 1.024e+12 -7.381e+11 8.529e+11 -5.622e+11 7.056e+11 -4.194e+11 5.801e+11 -3.051e+11 4.737e+11 -2.149e+11 3.844e+11 -1.448e+11 3.102e+11 -9.135e+10 2.491e+11 -5.134e+10 1.992e+11 -2.205e+10 1.589e+11 -1.100e+09 1.267e+11 1.356e+10 1.012e+11 2.361e+10 8.102e+10 3.035e+10 6.507e+10 3.481e+10 5.238e+10 3.768e+10 4.214e+10 3.940e+10 3.373e+10 4.023e+10 2.672e+10 4.027e+10 2.081e+10 3.958e+10 1.580e+10 3.819e+10 1.158e+10 3.613e+10 8.077e+09 3.347e+10 5.248e+09 3.027e+10 3.050e+09 2.667e+10 1.436e+09 2.279e+10 3.466e+08 1.878e+10 -2.905e+08 1.481e+10 -5.599e+08 1.103e+10 -5.582e+08 7.611e+09 -3.905e+08 4.689e+09 -1.673e+08 2.403e+09 1.967e+06 8.675e+08 7.617e+07 1.364e+08 3.094e+08 -3.942e+08 9.446e+08 -1.597e+09 2.042e+09 -3.779e+09 3.660e+09 -6.941e+09 5.852e+09 -1.106e+10 8.650e+09 -1.606e+10 1.206e+10 -2.188e+10 1.609e+10 -2.841e+10 2.071e+10 -3.553e+10 2.586e+10 -4.310e+10 3.150e+10 -5.098e+10 3.754e+10 -5.899e+10 4.390e+10 -6.698e+10 5.049e+10 -7.479e+10 5.719e+10 -8.225e+10 6.390e+10 -8.921e+10 7.053e+10 -9.555e+10 7.696e+10 -1.011e+11 8.309e+10 -1.059e+11 8.885e+10 -1.097e+11 9.414e+10 -1.125e+11 9.889e+10 -1.142e+11 1.031e+11 -1.150e+11 1.066e+11 -1.147e+11 1.094e+11 -1.135e+11 1.116e+11 -1.113e+11 1.131e+11 -1.082e+11 1.139e+11 -1.045e+11 1.140e+11 -1.000e+11 1.134e+11 -9.498e+10 1.122e+11 -8.951e+10 1.104e+11 -8.369e+10 1.080e+11 -7.763e+10 1.052e+11 -7.143e+10 1.019e+11 -6.518e+10 9.820e+10 -5.897e+10 9.416e+10 -5.288e+10 8.981e+10 -4.697e+10 8.521e+10 -4.131e+10 8.040e+10 -3.593e+10 7.545e+10 -3.088e+10 7.039e+10 -2.619e+10 6.528e+10 -2.187e+10 6.016e+10 -1.793e+10 5.508e+10 -1.438e+10 5.008e+10 -1.123e+10 4.520e+10 -8.452e+09 4.048e+10 -6.044e+09 3.596e+10 -3.988e+09 3.166e+10 -2.261e+09 2.763e+10 -8.429e+08 2.387e+10 2.932e+08 2.041e+10 1.175e+09 1.727e+10 1.831e+09 1.444e+10 2.288e+09 1.192e+10 2.577e+09 9.717e+09 2.725e+09 7.812e+09 2.759e+09 6.189e+09 2.704e+09 4.828e+09 2.584e+09 3.704e+09 2.420e+09 2.789e+09 2.227e+09 2.056e+09 2.022e+09 1.478e+09 1.814e+09 1.027e+09 1.609e+09 6.804e+08 1.412e+09 4.173e+08 1.224e+09 2.217e+08 1.042e+09 8.131e+07 8.673e+08 -1.323e+07 6.988e+08 -6.938e+07 5.374e+08 -9.355e+07 3.866e+08 -9.236e+07 2.514e+08 -7.337e+07 1.386e+08 -4.567e+07 5.622e+07 -2.151e+07 9.915e+06 -1.013e+07 -2.238e+07 6.098e+06 -8.891e+07 5.578e+07 -2.196e+08 1.575e+08 -4.229e+08 3.260e+08 -7.037e+08 5.753e+08 -1.065e+09 9.190e+08 -1.507e+09 1.370e+09 -2.028e+09 1.938e+09 -2.625e+09 2.635e+09 -3.292e+09 3.468e+09 -4.021e+09 4.443e+09 -4.801e+09 5.567e+09 -5.621e+09 6.840e+09 -6.470e+09 8.263e+09 -7.332e+09 9.836e+09 -8.195e+09 1.155e+10 -9.043e+09 1.341e+10 -9.862e+09 1.539e+10 -1.064e+10 1.749e+10 -1.136e+10 1.969e+10 -1.201e+10 2.198e+10 -1.258e+10 2.433e+10 -1.306e+10 2.672e+10 -1.344e+10 2.913e+10 -1.371e+10 3.152e+10 -1.387e+10 3.388e+10 -1.392e+10 3.617e+10 -1.385e+10 3.837e+10 -1.366e+10 4.043e+10 -1.335e+10 4.234e+10 -1.294e+10 4.406e+10 -1.243e+10 4.557e+10 -1.181e+10 4.685e+10 -1.111e+10 4.788e+10 -1.034e+10 4.864e+10 -9.505e+09 4.913e+10 -8.620e+09 4.933e+10 -7.701e+09 4.925e+10 -6.760e+09 4.890e+10 -5.813e+09 4.828e+10 -4.871e+09 4.740e+10 -3.950e+09 4.628e+10 -3.061e+09 4.494e+10 -2.215e+09 4.340e+10 -1.423e+09 4.169e+10 -6.944e+08 3.982e+10 -3.598e+07 3.784e+10 5.452e+08 3.575e+10 1.045e+09 3.360e+10 1.462e+09 3.139e+10 1.792e+09 2.916e+10 2.037e+09 2.693e+10 2.199e+09 2.472e+10 2.280e+09 2.254e+10 2.286e+09 2.041e+10 2.222e+09 1.835e+10 2.096e+09 1.636e+10 1.915e+09 1.447e+10 1.688e+09 1.268e+10 1.427e+09 1.100e+10 1.141e+09 9.430e+09 8.410e+08 7.989e+09 5.382e+08 6.677e+09 2.429e+08 5.499e+09 -3.550e+07 4.462e+09 -2.881e+08 3.566e+09 -5.108e+08 2.811e+09 -7.036e+08 2.198e+09 -8.737e+08 1.717e+09 -1.039e+09 1.352e+09 -1.228e+09 1.075e+09 -1.476e+09 8.471e+08 -1.817e+09 6.289e+08 -2.277e+09 3.913e+08 -2.866e+09 1.162e+08 -3.589e+09 -2.039e+08 -4.447e+09 -5.679e+08 -5.435e+09 -9.705e+08 -6.550e+09 -1.403e+09 -7.786e+09 -1.854e+09 -9.135e+09 -2.313e+09 -1.059e+10 -2.766e+09 -1.214e+10 -3.201e+09 -1.379e+10 -3.606e+09 -1.551e+10 -3.971e+09 -1.730e+10 -4.285e+09 -1.914e+10 -4.539e+09 -2.103e+10 -4.727e+09 -2.296e+10 -4.841e+09 -2.490e+10 -4.879e+09 -2.685e+10 -4.838e+09 -2.879e+10 -4.716e+09 -3.071e+10 -4.514e+09 -3.258e+10 -4.235e+09 -3.441e+10 -3.882e+09 -3.616e+10 -3.461e+09 -3.782e+10 -2.977e+09 -3.938e+10 -2.439e+09 -4.081e+10 -1.855e+09 -4.210e+10 -1.233e+09 -4.324e+10 -5.832e+08 -4.421e+10 8.343e+07 -4.499e+10 7.578e+08 -4.557e+10 1.430e+09 -4.595e+10 2.090e+09 -4.611e+10 2.728e+09 -4.606e+10 3.337e+09 -4.578e+10 3.908e+09 -4.529e+10 4.436e+09 -4.458e+10 4.914e+09 -4.367e+10 5.338e+09 -4.257e+10 5.700e+09 -4.129e+10 6.002e+09 -3.985e+10 6.243e+09 -3.826e+10 6.424e+09 -3.656e+10 6.546e+09 -3.475e+10 6.609e+09 -3.287e+10 6.615e+09 -3.093e+10 6.569e+09 -2.896e+10 6.474e+09 -2.699e+10 6.335e+09 -2.502e+10 6.155e+09 -2.308e+10 5.939e+09 -2.118e+10 5.692e+09 -1.935e+10 5.420e+09 -1.758e+10 5.126e+09 -1.590e+10 4.817e+09 -1.431e+10 4.495e+09 -1.281e+10 4.167e+09 -1.141e+10 3.836e+09 -1.011e+10 3.507e+09 -8.919e+09 0.005 -53.369 -52.380 -51.391 -50.402 -49.413 -48.424 -47.434 -46.533 -45.721 -44.992 -44.338 -43.757 -43.243 -42.794 -42.407 -42.080 -41.812 -41.601 -41.447 -41.349 -41.307 -41.322 -41.394 -41.524 -41.711 -41.960 -42.272 -42.652 -43.102 -43.628 -44.235 -44.931 -45.723 -46.624 -47.647 -48.810 -50.140 -51.669 -53.446 -55.548 -58.094 -61.300 -65.591 -71.602 -74.440 -70.296 -67.187 -65.471 -64.548 -63.989 -63.389 -62.362 -60.773 -58.810 -56.752 -54.778 -52.963 -51.324 -49.856 -48.545 -47.377 -46.336 -45.412 -44.592 -43.869 -43.238 -42.693 -42.230 -41.844 -41.533 -41.296 -41.130 -41.036 -41.012 -41.059 -41.178 -41.370 -41.638 -41.984 -42.411 -42.922 -43.523 -44.218 -45.012 -45.910 -46.915 -48.031 -49.248 -50.547 -51.889 -53.205 -54.400 -55.372 -56.049 -56.414 -56.467 -56.178 -55.483 -54.347 -52.836 -51.097 -49.282 -47.496 -45.797 -44.211 -42.745 -41.397 -40.162 -39.033 -38.004 -37.068 -36.220 -35.455 -34.770 -34.160 -33.623 -33.157 -32.761 -32.434 -32.176 -31.987 -31.868 -31.821 -31.848 -31.953 -32.142 -32.418 -32.788 -33.263 -33.853 -34.574 -35.446 -36.496 -37.757 -39.276 -41.117 -43.341 -45.908 -48.296 -49.269 -48.342 -46.703 -45.366 -44.598 -44.471 -45.109 -46.848 -50.564 -53.876 -49.299 -42.701 -38.083 -34.578 -31.714 -29.271 -27.128 -25.214 -23.481 -21.896 -20.436 -19.083 -17.823 -16.645 -15.541 -14.504 -13.526 -12.603 -11.730 -10.901 -10.116 -9.372 -8.668 -7.999 -7.366 -6.766 -6.198 -5.660 -5.152 -4.672 -4.219 -3.792 -3.391 -3.015 -2.664 -2.336 -2.031 -1.749 -1.489 -1.251 -1.034 -0.839 -0.664 -0.511 -0.377 -0.265 -0.172 -0.099 -0.046 -0.013 0.000 -0.007 -0.029 -0.071 -0.133 -0.215 -0.318 -0.440 -0.582 -0.745 -0.929 -1.134 -1.360 -1.608 -1.877 -2.169 -2.483 -2.821 -3.183 -3.568 -3.979 -4.416 -4.879 -5.369 -5.888 -6.436 -7.014 -7.624 -8.268 -8.947 -9.662 -10.417 -11.212 -12.052 -12.939 -13.873 -14.861 -15.909 -17.022 -18.207 -19.475 -20.835 -22.299 -23.885 -25.613 -27.511 -29.619 -31.987 -34.683 -37.773 -41.194 -44.298 -45.696 -45.095 -43.958 -43.162 -42.840 -42.953 -43.433 -44.191 -45.040 -45.621 -45.501 -44.555 -43.094 -41.511 -40.028 -38.722 -37.603 -36.655 -35.864 -35.213 -34.688 -34.275 -33.967 -33.755 -33.633 -33.595 -33.640 -33.765 -33.966 -34.242 -34.594 -35.020 -35.523 -36.102 -36.760 -37.499 -38.322 -39.230 -40.226 -41.312 -42.488 -43.751 -45.097 -46.510 -47.972 -49.449 -50.899 -52.269 -53.492 -54.467 -55.046 -55.050 -54.396 -53.190 -51.665 -50.035 -48.433 -46.925 -45.535 -44.268 -43.121 -42.087 -41.159 -40.327 -39.587 -38.932 -38.357 -37.856 -37.424 -37.060 -36.759 -36.520 -36.340 -36.218 -36.153 -36.144 -36.190 -36.291 -36.447 -36.659 -36.927 -37.252 -37.636 -38.081 -38.590 -39.164 -39.808 -40.526 -41.321 -42.201 -43.175 -44.252 -45.445 -46.769 -48.244 -49.895 -51.756 -53.874 -56.317 -59.182 -62.628 -66.910 -72.434 -79.012 -81.515 -80.578 -78.604 -73.744 -68.690 -64.587 -61.293 -58.593 -56.333 -54.411 -52.757 -51.322 -50.071 -48.976 -48.017 -47.178 -46.446 -45.811 -45.266 -44.802 -44.416 -44.102 -43.856 -43.675 -43.557 -43.501 -43.505 -43.570 -43.694 -43.877 -44.120 -44.424 -44.789 -45.218 -45.713 -46.276 -46.912 -47.624 -48.420 -49.305 -50.279 -51.253 -52.227 -53.200 -54.174 -55.148 0.03 -19.5443 -19.157 -18.7736 -18.3941 -18.0184 -17.6467 -17.2787 -16.9147 -16.5546 -16.1983 -15.8459 -15.4973 -15.1527 -14.8119 -14.475 -14.142 -13.8128 -13.4876 -13.1662 -12.8486 -12.535 -12.2252 -11.9193 -11.6173 -11.3192 -11.0249 -10.7345 -10.448 -10.1653 -9.8866 -9.6117 -9.3406 -9.0735 -8.8102 -8.5508 -8.2953 -8.0437 -7.7959 -7.552 -7.312 -7.0759 -6.8436 -6.6152 -6.3907 -6.1701 -5.9533 -5.7405 -5.5315 -5.3263 -5.1251 -4.9277 -4.7342 -4.5445 -4.3588 -4.1769 -3.9989 -3.8248 -3.6545 -3.4882 -3.3257 -3.167 -3.0123 -2.8614 -2.7144 -2.5713 -2.432 -2.2967 -2.1652 -2.0375 -1.9138 -1.7939 -1.6779 -1.5658 -1.4576 -1.3532 -1.2527 -1.1561 -1.0634 -0.9745 -0.88951 -0.8084 -0.73116 -0.6578 -0.58831 -0.5227 -0.46096 -0.4031 -0.34912 -0.29901 -0.25278 -0.21042 -0.17194 -0.13733 -0.1066 -0.079744 -0.056765 -0.037661 -0.022432 -0.011079 -0.0036018 0 -0.00027381 -0.0044232 -0.012448 -0.024349 -0.040125 -0.059777 -0.083304 -0.11071 -0.14199 -0.17714 -0.21617 -0.25907 -0.30586 -0.35651 -0.41104 -0.46945 -0.53173 -0.59789 -0.66793 -0.74184 -0.81962 -0.90128 -0.98682 -1.0762 -1.1695 -1.2667 -1.3677 -1.4726 -1.5814 -1.6941 -1.8106 -1.9311 -2.0553 -2.1835 -2.3156 -2.4515 -2.5913 -2.7349 -2.8825 -3.0339 -3.1892 -3.3484 -3.5114 -3.6784 -3.8492 -4.0238 -4.2024 -4.3848 -4.5711 -4.7613 -4.9553 -5.1533 -5.3551 -5.5607 -5.7703 -5.9837 -6.201 -6.4222 -6.6473 -6.8762 -7.109 -7.3457 -7.5863 -7.8307 -8.079 -8.3312 -8.5873 -8.8472 -9.111 -9.3787 -9.6503 -9.9257 -10.205 -10.4882 -10.7753 -11.0662 -11.361 -11.6597 -11.9623 -12.2688 -12.5791 -12.8933 -13.2113 -13.5333 -13.8591 -14.1888 -14.5224 -14.8598 -15.2012 -15.5464 -15.8954 -16.2484 -16.6052 -16.9659 -17.3305 -17.699 -18.0713 -18.4475 -18.8276 -19.2115 1.0 56559.76 EW2 VH 25.19 29.82 0.050 -1.178e+09 -3.922e+08 -9.096e+08 -3.597e+08 -6.690e+08 -3.165e+08 -4.599e+08 -2.655e+08 -2.864e+08 -2.099e+08 -1.522e+08 -1.543e+08 -5.881e+07 -1.048e+08 -8.168e+05 -6.960e+07 4.492e+07 -5.507e+07 1.181e+08 -5.049e+07 2.426e+08 -3.326e+07 4.240e+08 1.175e+07 6.632e+08 9.452e+07 9.597e+08 2.235e+08 1.311e+09 4.060e+08 1.714e+09 6.508e+08 2.164e+09 9.631e+08 2.654e+09 1.348e+09 3.176e+09 1.809e+09 3.722e+09 2.350e+09 4.281e+09 2.971e+09 4.844e+09 3.672e+09 5.399e+09 4.450e+09 5.935e+09 5.300e+09 6.441e+09 6.216e+09 6.905e+09 7.190e+09 7.317e+09 8.210e+09 7.667e+09 9.266e+09 7.947e+09 1.034e+10 8.150e+09 1.143e+10 8.270e+09 1.251e+10 8.304e+09 1.357e+10 8.250e+09 1.459e+10 8.109e+09 1.556e+10 7.880e+09 1.647e+10 7.568e+09 1.730e+10 7.178e+09 1.805e+10 6.714e+09 1.871e+10 6.185e+09 1.926e+10 5.598e+09 1.972e+10 4.960e+09 2.006e+10 4.280e+09 2.030e+10 3.567e+09 2.043e+10 2.829e+09 2.046e+10 2.073e+09 2.039e+10 1.308e+09 2.022e+10 5.396e+08 1.997e+10 -2.259e+08 1.964e+10 -9.824e+08 1.923e+10 -1.726e+09 1.876e+10 -2.453e+09 1.823e+10 -3.159e+09 1.764e+10 -3.843e+09 1.702e+10 -4.503e+09 1.636e+10 -5.136e+09 1.566e+10 -5.741e+09 1.494e+10 -6.320e+09 1.420e+10 -6.870e+09 1.344e+10 -7.391e+09 1.267e+10 -7.885e+09 1.188e+10 -8.351e+09 1.109e+10 -8.790e+09 1.029e+10 -9.201e+09 9.484e+09 -9.584e+09 8.671e+09 -9.938e+09 7.853e+09 -1.026e+10 7.028e+09 -1.056e+10 6.197e+09 -1.083e+10 5.361e+09 -1.106e+10 4.517e+09 -1.127e+10 3.667e+09 -1.144e+10 2.811e+09 -1.157e+10 1.947e+09 -1.167e+10 1.079e+09 -1.173e+10 2.065e+08 -1.175e+10 -6.704e+08 -1.173e+10 -1.548e+09 -1.167e+10 -2.425e+09 -1.157e+10 -3.299e+09 -1.142e+10 -4.167e+09 -1.123e+10 -5.024e+09 -1.100e+10 -5.868e+09 -1.072e+10 -6.694e+09 -1.041e+10 -7.498e+09 -1.006e+10 -8.275e+09 -9.676e+09 -9.021e+09 -9.263e+09 -9.731e+09 -8.825e+09 -1.040e+10 -8.369e+09 -1.103e+10 -7.901e+09 -1.161e+10 -7.427e+09 -1.214e+10 -6.956e+09 -1.262e+10 -6.494e+09 -1.305e+10 -6.051e+09 -1.343e+10 -5.634e+09 -1.376e+10 -5.251e+09 -1.404e+10 -4.911e+09 -1.428e+10 -4.621e+09 -1.449e+10 -4.388e+09 -1.466e+10 -4.219e+09 -1.481e+10 -4.120e+09 -1.495e+10 -4.097e+09 -1.509e+10 -4.156e+09 -1.524e+10 -4.304e+09 -1.541e+10 -4.548e+09 -1.562e+10 -4.896e+09 -1.588e+10 -5.357e+09 -1.621e+10 -5.945e+09 -1.663e+10 -6.675e+09 -1.715e+10 -7.564e+09 -1.779e+10 -8.633e+09 -1.859e+10 -9.911e+09 -1.955e+10 -1.143e+10 -2.070e+10 -1.321e+10 -2.208e+10 -1.531e+10 -2.369e+10 -1.775e+10 -2.559e+10 -2.059e+10 -2.778e+10 -2.387e+10 -3.032e+10 -2.763e+10 -3.323e+10 -3.192e+10 -3.655e+10 -3.679e+10 -4.034e+10 -4.228e+10 -4.462e+10 -4.843e+10 -4.946e+10 -5.528e+10 -5.490e+10 -6.286e+10 -6.100e+10 -7.118e+10 -6.782e+10 -8.026e+10 -7.543e+10 -9.011e+10 -8.388e+10 -1.007e+11 -9.324e+10 -1.120e+11 -1.036e+11 -1.239e+11 -1.150e+11 -1.364e+11 -1.274e+11 -1.494e+11 -1.411e+11 -1.628e+11 -1.560e+11 -1.764e+11 -1.721e+11 -1.900e+11 -1.896e+11 -2.035e+11 -2.084e+11 -2.166e+11 -2.286e+11 -2.291e+11 -2.503e+11 -2.408e+11 -2.734e+11 -2.513e+11 -2.979e+11 -2.604e+11 -3.240e+11 -2.678e+11 -3.515e+11 -2.733e+11 -3.805e+11 -2.763e+11 -4.110e+11 -2.767e+11 -4.431e+11 -2.742e+11 -4.767e+11 -2.683e+11 -5.119e+11 -2.588e+11 -5.489e+11 -2.453e+11 -5.878e+11 -2.275e+11 -6.288e+11 -2.049e+11 -6.724e+11 -1.771e+11 -7.187e+11 -1.433e+11 -7.685e+11 -1.030e+11 -8.222e+11 -5.528e+10 -8.805e+11 1.140e+09 -9.443e+11 6.761e+10 -1.014e+12 1.458e+11 -1.092e+12 2.378e+11 -1.177e+12 3.461e+11 -1.272e+12 4.733e+11 -1.378e+12 6.230e+11 -1.494e+12 7.987e+11 -1.623e+12 1.004e+12 -1.765e+12 1.245e+12 -1.920e+12 1.524e+12 -2.090e+12 1.849e+12 -2.275e+12 2.224e+12 -2.476e+12 2.655e+12 -2.692e+12 3.149e+12 -2.924e+12 3.712e+12 -3.173e+12 4.352e+12 -3.437e+12 5.074e+12 -3.717e+12 5.889e+12 -4.013e+12 6.802e+12 -4.324e+12 7.820e+12 -4.650e+12 8.954e+12 -4.991e+12 1.021e+13 -5.345e+12 1.136e+13 -5.594e+12 1.286e+13 -5.968e+12 1.450e+13 -6.353e+12 1.630e+13 -6.751e+12 1.825e+13 -7.160e+12 2.037e+13 -7.579e+12 2.267e+13 -8.007e+12 2.515e+13 -8.444e+12 2.783e+13 -8.889e+12 3.069e+13 -9.343e+12 3.376e+13 -9.804e+12 3.704e+13 -1.027e+13 4.052e+13 -1.074e+13 4.424e+13 -1.123e+13 4.816e+13 -1.172e+13 5.230e+13 -1.223e+13 5.667e+13 -1.273e+13 6.126e+13 -1.326e+13 6.607e+13 -1.379e+13 7.110e+13 -1.434e+13 7.636e+13 -1.489e+13 8.182e+13 -1.546e+13 8.749e+13 -1.607e+13 9.337e+13 -1.668e+13 9.940e+13 -1.732e+13 1.057e+14 -1.799e+13 1.122e+14 -1.869e+13 1.187e+14 -1.942e+13 1.255e+14 -2.020e+13 1.324e+14 -2.101e+13 1.394e+14 -2.187e+13 1.465e+14 -2.278e+13 1.538e+14 -2.374e+13 1.610e+14 -2.477e+13 1.685e+14 -2.585e+13 1.758e+14 -2.702e+13 1.833e+14 -2.825e+13 1.907e+14 -2.956e+13 1.981e+14 -3.096e+13 2.056e+14 -3.245e+13 2.128e+14 -3.403e+13 2.201e+14 -3.571e+13 2.273e+14 -3.749e+13 2.344e+14 -3.938e+13 2.414e+14 -4.137e+13 2.483e+14 -4.348e+13 2.550e+14 -4.571e+13 2.615e+14 -4.807e+13 2.678e+14 -5.055e+13 2.739e+14 -5.316e+13 2.798e+14 -5.590e+13 2.855e+14 -5.877e+13 2.910e+14 -6.178e+13 2.961e+14 -6.492e+13 3.010e+14 -6.818e+13 3.058e+14 -7.158e+13 3.101e+14 -7.511e+13 3.143e+14 -7.876e+13 3.180e+14 -8.254e+13 3.216e+14 -8.642e+13 3.249e+14 -9.043e+13 3.278e+14 -9.455e+13 3.305e+14 -9.876e+13 3.329e+14 -1.031e+14 3.349e+14 -1.075e+14 3.367e+14 -1.120e+14 3.382e+14 -1.165e+14 3.394e+14 -1.211e+14 3.404e+14 -1.258e+14 3.409e+14 -1.305e+14 3.413e+14 -1.352e+14 3.413e+14 -1.401e+14 3.411e+14 -1.449e+14 3.407e+14 -1.497e+14 3.399e+14 -1.545e+14 3.389e+14 -1.594e+14 3.377e+14 -1.641e+14 3.361e+14 -1.689e+14 3.344e+14 -1.736e+14 3.324e+14 -1.783e+14 3.303e+14 -1.829e+14 3.279e+14 -1.875e+14 3.254e+14 -1.919e+14 3.227e+14 -1.965e+14 3.198e+14 -2.008e+14 3.167e+14 -2.052e+14 3.136e+14 -2.093e+14 3.103e+14 -2.134e+14 3.068e+14 -2.174e+14 3.031e+14 -2.212e+14 2.994e+14 -2.250e+14 2.955e+14 -2.285e+14 2.915e+14 -2.319e+14 2.874e+14 -2.352e+14 2.833e+14 -2.382e+14 2.789e+14 -2.411e+14 2.746e+14 -2.438e+14 2.701e+14 -2.461e+14 2.657e+14 -2.484e+14 2.610e+14 -2.504e+14 2.564e+14 -2.522e+14 2.517e+14 -2.537e+14 2.470e+14 -2.549e+14 2.421e+14 -2.559e+14 2.372e+14 -2.566e+14 2.324e+14 -2.570e+14 2.274e+14 -2.571e+14 2.224e+14 -2.568e+14 2.175e+14 -2.563e+14 2.124e+14 -2.555e+14 2.073e+14 -2.542e+14 2.021e+14 -2.527e+14 1.970e+14 -2.508e+14 1.918e+14 -2.487e+14 1.866e+14 -2.462e+14 1.815e+14 -2.433e+14 1.764e+14 -2.402e+14 1.712e+14 -2.368e+14 1.660e+14 -2.330e+14 1.609e+14 -2.291e+14 1.557e+14 -2.248e+14 1.506e+14 -2.202e+14 1.469e+14 -2.154e+14 1.427e+14 -2.105e+14 1.377e+14 -2.053e+14 1.327e+14 -1.999e+14 1.278e+14 -1.944e+14 1.230e+14 -1.887e+14 1.181e+14 -1.828e+14 1.135e+14 -1.768e+14 1.088e+14 -1.708e+14 1.043e+14 -1.647e+14 9.981e+13 -1.586e+14 9.543e+13 -1.524e+14 9.115e+13 -1.462e+14 8.697e+13 -1.400e+14 8.288e+13 -1.339e+14 7.888e+13 -1.277e+14 7.500e+13 -1.217e+14 7.121e+13 -1.156e+14 6.754e+13 -1.097e+14 6.397e+13 -1.039e+14 6.051e+13 -9.818e+13 5.715e+13 -9.260e+13 5.392e+13 -8.715e+13 5.077e+13 -8.183e+13 4.775e+13 -7.668e+13 4.483e+13 -7.169e+13 4.202e+13 -6.685e+13 3.931e+13 -6.219e+13 3.672e+13 -5.773e+13 3.424e+13 -5.343e+13 3.185e+13 -4.932e+13 2.958e+13 -4.541e+13 2.740e+13 -4.169e+13 2.534e+13 -3.815e+13 2.337e+13 -3.481e+13 2.151e+13 -3.167e+13 1.974e+13 -2.871e+13 1.808e+13 -2.595e+13 1.651e+13 -2.336e+13 1.504e+13 -2.095e+13 1.366e+13 -1.873e+13 1.237e+13 -1.668e+13 1.117e+13 -1.479e+13 1.005e+13 -1.306e+13 9.018e+12 -1.148e+13 8.064e+12 -1.004e+13 7.030e+12 -8.552e+12 6.239e+12 -7.403e+12 5.516e+12 -6.374e+12 4.857e+12 -5.456e+12 4.260e+12 -4.641e+12 3.720e+12 -3.923e+12 3.234e+12 -3.292e+12 2.799e+12 -2.741e+12 2.410e+12 -2.265e+12 2.065e+12 -1.854e+12 1.760e+12 -1.503e+12 1.492e+12 -1.206e+12 1.257e+12 -9.553e+11 1.053e+12 -7.467e+11 8.765e+11 -5.748e+11 7.249e+11 -4.344e+11 5.955e+11 -3.212e+11 4.859e+11 -2.312e+11 3.937e+11 -1.606e+11 3.170e+11 -1.062e+11 2.536e+11 -6.515e+10 2.018e+11 -3.474e+10 1.598e+11 -1.278e+10 1.262e+11 2.653e+09 9.948e+10 1.319e+10 7.847e+10 2.016e+10 6.201e+10 2.460e+10 4.909e+10 2.727e+10 3.890e+10 2.872e+10 3.077e+10 2.927e+10 2.417e+10 2.911e+10 1.876e+10 2.833e+10 1.429e+10 2.699e+10 1.060e+10 2.511e+10 7.587e+09 2.278e+10 5.179e+09 2.006e+10 3.318e+09 1.706e+10 1.950e+09 1.392e+10 1.013e+09 1.077e+10 4.354e+08 7.780e+09 1.379e+08 5.095e+09 3.281e+07 2.866e+09 2.716e+07 1.228e+09 3.020e+07 2.959e+08 8.782e+07 -1.430e+08 3.422e+08 -9.125e+08 8.738e+08 -2.575e+09 1.739e+09 -5.172e+09 2.998e+09 -8.695e+09 4.698e+09 -1.311e+10 6.868e+09 -1.835e+10 9.527e+09 -2.435e+10 1.268e+10 -3.099e+10 1.630e+10 -3.817e+10 2.038e+10 -4.577e+10 2.487e+10 -5.364e+10 2.972e+10 -6.165e+10 3.488e+10 -6.966e+10 4.028e+10 -7.752e+10 4.584e+10 -8.511e+10 5.150e+10 -9.230e+10 5.717e+10 -9.898e+10 6.278e+10 -1.050e+11 6.826e+10 -1.104e+11 7.353e+10 -1.150e+11 7.853e+10 -1.187e+11 8.320e+10 -1.215e+11 8.747e+10 -1.235e+11 9.130e+10 -1.245e+11 9.465e+10 -1.247e+11 9.748e+10 -1.239e+11 9.977e+10 -1.223e+11 1.015e+11 -1.199e+11 1.026e+11 -1.167e+11 1.032e+11 -1.128e+11 1.031e+11 -1.084e+11 1.025e+11 -1.034e+11 1.013e+11 -9.793e+10 9.963e+10 -9.212e+10 9.742e+10 -8.603e+10 9.475e+10 -7.975e+10 9.164e+10 -7.335e+10 8.815e+10 -6.692e+10 8.432e+10 -6.053e+10 8.020e+10 -5.426e+10 7.583e+10 -4.817e+10 7.129e+10 -4.231e+10 6.661e+10 -3.674e+10 6.185e+10 -3.149e+10 5.707e+10 -2.661e+10 5.231e+10 -2.211e+10 4.762e+10 -1.802e+10 4.306e+10 -1.434e+10 3.865e+10 -1.107e+10 3.444e+10 -8.204e+09 3.046e+10 -5.734e+09 2.673e+10 -3.638e+09 2.327e+10 -1.894e+09 2.009e+10 -4.734e+08 1.720e+10 6.547e+08 1.460e+10 1.522e+09 1.229e+10 2.162e+09 1.025e+10 2.608e+09 8.477e+09 2.892e+09 6.942e+09 3.043e+09 5.628e+09 3.090e+09 4.514e+09 3.055e+09 3.576e+09 2.958e+09 2.790e+09 2.814e+09 2.138e+09 2.637e+09 1.599e+09 2.434e+09 1.158e+09 2.213e+09 8.009e+08 1.978e+09 5.169e+08 1.733e+09 2.967e+08 1.483e+09 1.331e+08 1.232e+09 1.919e+07 9.857e+08 -5.159e+07 7.501e+08 -8.589e+07 5.330e+08 -9.112e+07 3.427e+08 -7.563e+07 1.876e+08 -4.912e+07 7.673e+07 -2.472e+07 1.530e+07 -1.522e+07 -2.463e+07 -6.028e+06 -1.026e+08 3.098e+07 -2.546e+08 1.139e+08 -4.892e+08 2.564e+08 -8.108e+08 4.716e+08 -1.222e+09 7.728e+08 -1.725e+09 1.172e+09 -2.318e+09 1.681e+09 -3.000e+09 2.310e+09 -3.767e+09 3.070e+09 -4.614e+09 3.966e+09 -5.533e+09 5.008e+09 -6.517e+09 6.199e+09 -7.554e+09 7.542e+09 -8.633e+09 9.037e+09 -9.741e+09 1.068e+10 -1.087e+10 1.247e+10 -1.199e+10 1.441e+10 -1.310e+10 1.647e+10 -1.418e+10 1.864e+10 -1.522e+10 2.092e+10 -1.619e+10 2.328e+10 -1.709e+10 2.571e+10 -1.789e+10 2.817e+10 -1.859e+10 3.066e+10 -1.917e+10 3.312e+10 -1.963e+10 3.555e+10 -1.995e+10 3.792e+10 -2.012e+10 4.019e+10 -2.016e+10 4.233e+10 -2.005e+10 4.432e+10 -1.979e+10 4.614e+10 -1.939e+10 4.776e+10 -1.886e+10 4.916e+10 -1.821e+10 5.031e+10 -1.744e+10 5.121e+10 -1.657e+10 5.184e+10 -1.562e+10 5.219e+10 -1.460e+10 5.226e+10 -1.353e+10 5.205e+10 -1.243e+10 5.157e+10 -1.131e+10 5.081e+10 -1.019e+10 4.980e+10 -9.094e+09 4.854e+10 -8.027e+09 4.706e+10 -7.007e+09 4.537e+10 -6.046e+09 4.350e+10 -5.156e+09 4.147e+10 -4.343e+09 3.930e+10 -3.614e+09 3.702e+10 -2.974e+09 3.465e+10 -2.424e+09 3.223e+10 -1.964e+09 2.977e+10 -1.592e+09 2.730e+10 -1.304e+09 2.484e+10 -1.094e+09 2.242e+10 -9.566e+08 2.006e+10 -8.822e+08 1.777e+10 -8.621e+08 1.559e+10 -8.865e+08 1.351e+10 -9.450e+08 1.156e+10 -1.027e+09 9.758e+09 -1.123e+09 8.106e+09 -1.222e+09 6.617e+09 -1.318e+09 5.303e+09 -1.403e+09 4.166e+09 -1.474e+09 3.205e+09 -1.536e+09 2.421e+09 -1.598e+09 1.798e+09 -1.683e+09 1.307e+09 -1.822e+09 9.043e+08 -2.053e+09 5.343e+08 -2.408e+09 1.417e+08 -2.906e+09 -3.138e+08 -3.556e+09 -8.574e+08 -4.359e+09 -1.501e+09 -5.315e+09 -2.244e+09 -6.419e+09 -3.083e+09 -7.670e+09 -4.008e+09 -9.066e+09 -5.006e+09 -1.060e+10 -6.063e+09 -1.227e+10 -7.165e+09 -1.406e+10 -8.292e+09 -1.598e+10 -9.428e+09 -1.800e+10 -1.056e+10 -2.013e+10 -1.166e+10 -2.234e+10 -1.273e+10 -2.461e+10 -1.374e+10 -2.694e+10 -1.467e+10 -2.931e+10 -1.553e+10 -3.169e+10 -1.629e+10 -3.406e+10 -1.695e+10 -3.640e+10 -1.749e+10 -3.870e+10 -1.792e+10 -4.092e+10 -1.822e+10 -4.305e+10 -1.840e+10 -4.505e+10 -1.846e+10 -4.692e+10 -1.840e+10 -4.863e+10 -1.822e+10 -5.016e+10 -1.793e+10 -5.150e+10 -1.753e+10 -5.262e+10 -1.703e+10 -5.352e+10 -1.645e+10 -5.420e+10 -1.579e+10 -5.463e+10 -1.506e+10 -5.482e+10 -1.428e+10 -5.478e+10 -1.345e+10 -5.449e+10 -1.259e+10 -5.398e+10 -1.171e+10 -5.324e+10 -1.081e+10 -5.229e+10 -9.919e+09 -5.114e+10 -9.035e+09 -4.981e+10 -8.167e+09 -4.831e+10 -7.321e+09 -4.667e+10 -6.503e+09 -4.490e+10 -5.719e+09 -4.302e+10 -4.974e+09 -4.106e+10 -4.272e+09 -3.903e+10 -3.614e+09 -3.694e+10 -3.005e+09 -3.484e+10 -2.444e+09 -3.272e+10 -1.932e+09 -3.060e+10 -1.469e+09 -2.851e+10 -1.055e+09 -2.645e+10 -6.881e+08 -2.444e+10 -3.673e+08 -2.249e+10 -9.048e+07 -2.061e+10 1.449e+08 -1.880e+10 3.409e+08 -1.707e+10 5.005e+08 -1.543e+10 6.267e+08 -1.389e+10 0.005 -53.815 -52.824 -51.834 -50.844 -49.853 -48.863 -47.873 -46.974 -46.167 -45.446 -44.804 -44.235 -43.737 -43.305 -42.937 -42.632 -42.387 -42.203 -42.078 -42.012 -42.005 -42.057 -42.171 -42.346 -42.583 -42.887 -43.260 -43.706 -44.230 -44.839 -45.538 -46.336 -47.244 -48.276 -49.447 -50.782 -52.308 -54.066 -56.112 -58.530 -61.452 -65.110 -69.938 -76.577 -80.088 -76.482 -73.306 -70.297 -66.903 -63.473 -60.325 -57.544 -55.108 -52.971 -51.086 -49.414 -47.925 -46.594 -45.402 -44.332 -43.373 -42.514 -41.747 -41.062 -40.457 -39.928 -39.470 -39.081 -38.759 -38.502 -38.309 -38.179 -38.111 -38.107 -38.166 -38.289 -38.478 -38.734 -39.060 -39.459 -39.934 -40.490 -41.129 -41.859 -42.684 -43.610 -44.645 -45.791 -47.049 -48.412 -49.860 -51.353 -52.817 -54.145 -55.205 -55.862 -56.004 -55.559 -54.532 -53.039 -51.264 -49.386 -47.525 -45.747 -44.083 -42.541 -41.122 -39.819 -38.627 -37.538 -36.545 -35.643 -34.826 -34.089 -33.429 -32.843 -32.328 -31.882 -31.504 -31.194 -30.950 -30.774 -30.666 -30.628 -30.663 -30.773 -30.963 -31.236 -31.600 -32.063 -32.634 -33.328 -34.162 -35.158 -36.346 -37.771 -39.497 -41.615 -44.248 -47.480 -50.755 -52.092 -50.815 -49.009 -47.979 -47.960 -49.220 -52.575 -55.608 -50.810 -44.033 -39.265 -35.637 -32.667 -30.132 -27.910 -25.926 -24.132 -22.493 -20.984 -19.587 -18.288 -17.074 -15.938 -14.870 -13.865 -12.917 -12.021 -11.171 -10.366 -9.604 -8.882 -8.197 -7.549 -6.935 -6.354 -5.804 -5.284 -4.793 -4.330 -3.894 -3.485 -3.100 -2.741 -2.405 -2.093 -1.805 -1.539 -1.295 -1.073 -0.872 -0.693 -0.535 -0.398 -0.281 -0.184 -0.108 -0.052 -0.016 0.000 -0.004 -0.024 -0.065 -0.125 -0.205 -0.306 -0.427 -0.568 -0.731 -0.914 -1.118 -1.344 -1.591 -1.861 -2.153 -2.468 -2.806 -3.168 -3.555 -3.967 -4.405 -4.869 -5.362 -5.882 -6.433 -7.014 -7.627 -8.274 -8.956 -9.676 -10.435 -11.235 -12.080 -12.973 -13.913 -14.909 -15.964 -17.086 -18.281 -19.560 -20.932 -22.410 -24.010 -25.755 -27.674 -29.803 -32.197 -34.923 -38.046 -41.507 -44.659 -46.113 -45.579 -44.524 -43.827 -43.624 -43.871 -44.480 -45.289 -45.951 -45.958 -45.049 -43.495 -41.759 -40.119 -38.671 -37.427 -36.370 -35.479 -34.734 -34.120 -33.624 -33.234 -32.941 -32.739 -32.621 -32.584 -32.625 -32.741 -32.930 -33.191 -33.524 -33.929 -34.408 -34.961 -35.591 -36.302 -37.097 -37.982 -38.963 -40.046 -41.241 -42.558 -44.010 -45.609 -47.371 -49.308 -51.429 -53.724 -56.143 -58.555 -60.690 -62.146 -62.543 -61.791 -60.176 -58.131 -55.996 -53.955 -52.082 -50.397 -48.894 -47.561 -46.382 -45.342 -44.429 -43.633 -42.944 -42.352 -41.850 -41.435 -41.101 -40.844 -40.662 -40.552 -40.514 -40.545 -40.646 -40.816 -41.057 -41.369 -41.755 -42.217 -42.757 -43.381 -44.093 -44.898 -45.805 -46.819 -47.949 -49.204 -50.593 -52.119 -53.773 -55.519 -57.278 -58.910 -60.253 -61.238 -61.975 -62.713 -63.739 -65.368 -67.976 -71.269 -69.973 -64.970 -60.855 -57.685 -55.147 -53.046 -51.265 -49.732 -48.397 -47.226 -46.195 -45.286 -44.484 -43.777 -43.158 -42.618 -42.153 -41.757 -41.426 -41.157 -40.948 -40.797 -40.701 -40.657 -40.666 -40.729 -40.844 -41.011 -41.232 -41.506 -41.835 -42.219 -42.661 -43.162 -43.725 -44.353 -45.049 -45.818 -46.667 -47.601 -48.620 -49.638 -50.657 -51.676 -52.694 -53.713 0.03 -18.7883 -18.4161 -18.0475 -17.6827 -17.3216 -16.9642 -16.6105 -16.2606 -15.9144 -15.5719 -15.2332 -14.8982 -14.5669 -14.2393 -13.9154 -13.5953 -13.2789 -12.9662 -12.6573 -12.3521 -12.0506 -11.7528 -11.4587 -11.1684 -10.8818 -10.5989 -10.3198 -10.0444 -9.7727 -9.5047 -9.2404 -8.9799 -8.7231 -8.47 -8.2207 -7.9751 -7.7332 -7.495 -7.2606 -7.0298 -6.8028 -6.5796 -6.36 -6.1442 -5.9321 -5.7237 -5.5191 -5.3182 -5.121 -4.9275 -4.7377 -4.5517 -4.3694 -4.1909 -4.016 -3.8449 -3.6775 -3.5138 -3.3539 -3.1977 -3.0452 -2.8964 -2.7514 -2.61 -2.4724 -2.3386 -2.2084 -2.082 -1.9593 -1.8403 -1.7251 -1.6136 -1.5058 -1.4017 -1.3014 -1.2048 -1.1119 -1.0227 -0.93726 -0.85555 -0.77755 -0.70329 -0.63275 -0.56593 -0.50284 -0.44347 -0.38783 -0.33592 -0.28773 -0.24326 -0.20252 -0.1655 -0.13221 -0.10265 -0.07681 -0.054696 -0.036306 -0.021642 -0.010703 -0.0034889 0 -0.00023626 -0.0041977 -0.011884 -0.023296 -0.038433 -0.057295 -0.079882 -0.10619 -0.13623 -0.16999 -0.20748 -0.24869 -0.29363 -0.3423 -0.39468 -0.4508 -0.51064 -0.5742 -0.64149 -0.7125 -0.78724 -0.86571 -0.94789 -1.0338 -1.1234 -1.2168 -1.3139 -1.4147 -1.5193 -1.6275 -1.7395 -1.8552 -1.9747 -2.0978 -2.2247 -2.3553 -2.4897 -2.6278 -2.7695 -2.9151 -3.0643 -3.2173 -3.374 -3.5344 -3.6985 -3.8664 -4.038 -4.2133 -4.3923 -4.5751 -4.7616 -4.9518 -5.1458 -5.3434 -5.5448 -5.7499 -5.9588 -6.1714 -6.3877 -6.6077 -6.8314 -7.0589 -7.2901 -7.525 -7.7637 -8.006 -8.2521 -8.5019 -8.7555 -9.0128 -9.2738 -9.5385 -9.8069 -10.0791 -10.355 -10.6346 -10.918 -11.205 -11.4958 -11.7903 -12.0886 -12.3906 -12.6963 -13.0057 -13.3188 -13.6357 -13.9563 -14.2806 -14.6087 -14.9405 -15.276 -15.6152 -15.9581 -16.3048 -16.6552 -17.0093 -17.3672 -17.7287 -18.094 -18.4631 1.0 56559.76 EW3 HH 29.77 34.27 0.050 -5.786e+09 -1.438e+10 -6.083e+09 -1.578e+10 -6.352e+09 -1.712e+10 -6.592e+09 -1.838e+10 -6.799e+09 -1.955e+10 -6.970e+09 -2.061e+10 -7.104e+09 -2.153e+10 -7.198e+09 -2.231e+10 -7.252e+09 -2.294e+10 -7.264e+09 -2.339e+10 -7.235e+09 -2.367e+10 -7.163e+09 -2.378e+10 -7.050e+09 -2.370e+10 -6.898e+09 -2.344e+10 -6.706e+09 -2.301e+10 -6.479e+09 -2.241e+10 -6.217e+09 -2.164e+10 -5.926e+09 -2.073e+10 -5.609e+09 -1.969e+10 -5.269e+09 -1.854e+10 -4.912e+09 -1.728e+10 -4.543e+09 -1.595e+10 -4.165e+09 -1.456e+10 -3.784e+09 -1.314e+10 -3.403e+09 -1.170e+10 -3.028e+09 -1.026e+10 -2.662e+09 -8.862e+09 -2.311e+09 -7.510e+09 -1.977e+09 -6.226e+09 -1.664e+09 -5.029e+09 -1.374e+09 -3.937e+09 -1.109e+09 -2.962e+09 -8.718e+08 -2.116e+09 -6.621e+08 -1.411e+09 -4.808e+08 -8.507e+08 -3.297e+08 -4.391e+08 -2.145e+08 -1.716e+08 -1.503e+08 -1.760e+07 -1.476e+08 1.083e+08 -1.864e+08 3.054e+08 -2.363e+08 6.180e+08 -2.851e+08 1.045e+09 -3.316e+08 1.575e+09 -3.778e+08 2.191e+09 -4.264e+08 2.877e+09 -4.803e+08 3.613e+09 -5.425e+08 4.380e+09 -6.154e+08 5.158e+09 -7.009e+08 5.926e+09 -8.006e+08 6.666e+09 -9.155e+08 7.358e+09 -1.046e+09 7.985e+09 -1.191e+09 8.531e+09 -1.350e+09 8.982e+09 -1.521e+09 9.327e+09 -1.703e+09 9.558e+09 -1.892e+09 9.668e+09 -2.085e+09 9.656e+09 -2.278e+09 9.520e+09 -2.469e+09 9.266e+09 -2.652e+09 8.901e+09 -2.825e+09 8.435e+09 -2.984e+09 7.881e+09 -3.126e+09 7.255e+09 -3.250e+09 6.574e+09 -3.355e+09 5.857e+09 -3.442e+09 5.126e+09 -3.518e+09 4.399e+09 -3.591e+09 3.692e+09 -3.674e+09 3.020e+09 -3.786e+09 2.385e+09 -3.949e+09 1.782e+09 -4.187e+09 1.194e+09 -4.523e+09 5.912e+08 -4.974e+09 -6.429e+07 -5.551e+09 -8.116e+08 -6.257e+09 -1.689e+09 -7.091e+09 -2.728e+09 -8.045e+09 -3.951e+09 -9.114e+09 -5.373e+09 -1.029e+10 -7.003e+09 -1.155e+10 -8.840e+09 -1.290e+10 -1.088e+10 -1.433e+10 -1.311e+10 -1.581e+10 -1.552e+10 -1.733e+10 -1.808e+10 -1.889e+10 -2.077e+10 -2.047e+10 -2.357e+10 -2.205e+10 -2.644e+10 -2.362e+10 -2.935e+10 -2.516e+10 -3.228e+10 -2.666e+10 -3.518e+10 -2.811e+10 -3.803e+10 -2.949e+10 -4.079e+10 -3.080e+10 -4.342e+10 -3.201e+10 -4.591e+10 -3.312e+10 -4.821e+10 -3.412e+10 -5.030e+10 -3.501e+10 -5.217e+10 -3.577e+10 -5.379e+10 -3.640e+10 -5.514e+10 -3.690e+10 -5.622e+10 -3.727e+10 -5.703e+10 -3.750e+10 -5.753e+10 -3.761e+10 -5.774e+10 -3.758e+10 -5.764e+10 -3.742e+10 -5.726e+10 -3.714e+10 -5.659e+10 -3.674e+10 -5.565e+10 -3.623e+10 -5.445e+10 -3.562e+10 -5.301e+10 -3.491e+10 -5.135e+10 -3.410e+10 -4.949e+10 -3.322e+10 -4.745e+10 -3.225e+10 -4.526e+10 -3.123e+10 -4.295e+10 -3.014e+10 -4.054e+10 -2.900e+10 -3.805e+10 -2.783e+10 -3.552e+10 -2.662e+10 -3.297e+10 -2.538e+10 -3.042e+10 -2.413e+10 -2.791e+10 -2.288e+10 -2.544e+10 -2.162e+10 -2.304e+10 -2.037e+10 -2.073e+10 -1.913e+10 -1.852e+10 -1.792e+10 -1.643e+10 -1.674e+10 -1.446e+10 -1.560e+10 -1.263e+10 -1.449e+10 -1.094e+10 -1.344e+10 -9.395e+09 -1.243e+10 -7.991e+09 -1.148e+10 -6.726e+09 -1.059e+10 -5.598e+09 -9.759e+09 -4.600e+09 -8.986e+09 -3.725e+09 -8.271e+09 -2.964e+09 -7.614e+09 -2.308e+09 -7.011e+09 -1.748e+09 -6.459e+09 -1.275e+09 -5.955e+09 -8.809e+08 -5.494e+09 -5.567e+08 -5.070e+09 -2.960e+08 -4.679e+09 -9.229e+07 -4.316e+09 5.982e+07 -3.978e+09 1.652e+08 -3.661e+09 2.285e+08 -3.362e+09 2.543e+08 -3.080e+09 2.469e+08 -2.813e+09 2.108e+08 -2.561e+09 1.509e+08 -2.325e+09 7.175e+07 -2.105e+09 -2.227e+07 -1.903e+09 -1.274e+08 -1.721e+09 -2.408e+08 -1.561e+09 -3.618e+08 -1.423e+09 -4.918e+08 -1.310e+09 -6.347e+08 -1.218e+09 -7.974e+08 -1.146e+09 -9.883e+08 -1.088e+09 -1.216e+09 -1.035e+09 -1.489e+09 -9.805e+08 -1.814e+09 -9.154e+08 -2.193e+09 -8.322e+08 -2.628e+09 -7.241e+08 -3.119e+09 -5.857e+08 -3.661e+09 -4.120e+08 -4.250e+09 -1.997e+08 -4.879e+09 5.375e+07 -5.538e+09 3.500e+08 -6.221e+09 6.897e+08 -6.915e+09 1.072e+09 -7.611e+09 1.496e+09 -8.298e+09 1.960e+09 -8.964e+09 2.459e+09 -9.599e+09 2.992e+09 -1.019e+10 3.552e+09 -1.074e+10 4.135e+09 -1.122e+10 4.736e+09 -1.164e+10 5.349e+09 -1.198e+10 5.966e+09 -1.225e+10 6.583e+09 -1.244e+10 7.195e+09 -1.254e+10 7.797e+09 -1.256e+10 8.383e+09 -1.250e+10 8.949e+09 -1.236e+10 9.492e+09 -1.214e+10 1.001e+10 -1.186e+10 1.050e+10 -1.151e+10 1.095e+10 -1.109e+10 1.138e+10 -1.063e+10 1.177e+10 -1.012e+10 1.212e+10 -9.575e+09 1.245e+10 -8.997e+09 1.274e+10 -8.395e+09 1.299e+10 -7.775e+09 1.321e+10 -7.142e+09 1.339e+10 -6.504e+09 1.353e+10 -5.866e+09 1.362e+10 -5.232e+09 1.367e+10 -4.609e+09 1.367e+10 -4.002e+09 1.361e+10 -3.416e+09 1.349e+10 -2.857e+09 1.330e+10 -2.332e+09 1.303e+10 -1.845e+09 1.269e+10 -1.403e+09 1.226e+10 -1.012e+09 1.174e+10 -6.761e+08 1.114e+10 -4.003e+08 1.046e+10 -1.871e+08 9.702e+09 -3.760e+07 8.873e+09 4.911e+07 7.988e+09 7.632e+07 7.061e+09 4.996e+07 6.112e+09 -2.144e+07 5.164e+09 -1.267e+08 4.240e+09 -2.530e+08 3.368e+09 -3.860e+08 2.576e+09 -5.129e+08 1.890e+09 -6.256e+08 1.331e+09 -7.285e+08 9.040e+08 -8.482e+08 5.816e+08 -1.038e+09 2.968e+08 -1.364e+09 -3.343e+07 -1.872e+09 -4.734e+08 -2.588e+09 -1.054e+09 -3.517e+09 -1.777e+09 -4.655e+09 -2.629e+09 -5.996e+09 -3.576e+09 -7.522e+09 -4.576e+09 -9.208e+09 -5.578e+09 -1.102e+10 -6.520e+09 -1.293e+10 -7.339e+09 -1.487e+10 -7.970e+09 -1.679e+10 -8.346e+09 -1.864e+10 -8.409e+09 -2.034e+10 -8.106e+09 -2.185e+10 -7.400e+09 -2.309e+10 -6.267e+09 -2.405e+10 -4.696e+09 -2.468e+10 -2.689e+09 -2.500e+10 -2.475e+08 -2.506e+10 2.655e+09 -2.493e+10 6.101e+09 -2.474e+10 1.029e+10 -2.463e+10 1.561e+10 -2.471e+10 2.264e+10 -2.504e+10 3.221e+10 -2.551e+10 4.538e+10 -2.586e+10 6.337e+10 -2.567e+10 8.758e+10 -2.434e+10 1.196e+11 -2.119e+10 1.613e+11 -1.538e+10 2.145e+11 -5.995e+09 2.817e+11 8.053e+09 3.654e+11 2.793e+10 4.684e+11 5.496e+10 5.940e+11 9.064e+10 7.456e+11 1.366e+11 9.273e+11 1.944e+11 1.143e+12 2.663e+11 1.398e+12 3.540e+11 1.696e+12 4.598e+11 2.045e+12 5.861e+11 2.447e+12 7.352e+11 2.911e+12 9.095e+11 3.287e+12 1.062e+12 3.869e+12 1.285e+12 4.528e+12 1.539e+12 5.275e+12 1.828e+12 6.116e+12 2.156e+12 7.058e+12 2.522e+12 8.111e+12 2.930e+12 9.282e+12 3.382e+12 1.058e+13 3.881e+12 1.201e+13 4.429e+12 1.359e+13 5.027e+12 1.532e+13 5.676e+12 1.721e+13 6.378e+12 1.928e+13 7.133e+12 2.152e+13 7.942e+12 2.395e+13 8.805e+12 2.658e+13 9.719e+12 2.940e+13 1.069e+13 3.244e+13 1.171e+13 3.569e+13 1.276e+13 3.917e+13 1.388e+13 4.287e+13 1.503e+13 4.680e+13 1.622e+13 5.097e+13 1.744e+13 5.538e+13 1.869e+13 6.004e+13 1.996e+13 6.495e+13 2.125e+13 7.010e+13 2.254e+13 7.550e+13 2.384e+13 8.114e+13 2.512e+13 8.705e+13 2.639e+13 9.331e+13 2.943e+13 9.991e+13 2.993e+13 1.066e+14 3.118e+13 1.135e+14 3.237e+13 1.207e+14 3.351e+13 1.281e+14 3.456e+13 1.358e+14 3.553e+13 1.435e+14 3.638e+13 1.516e+14 3.714e+13 1.598e+14 3.776e+13 1.683e+14 3.824e+13 1.769e+14 3.858e+13 1.856e+14 3.876e+13 1.945e+14 3.875e+13 2.035e+14 3.856e+13 2.127e+14 3.817e+13 2.219e+14 3.759e+13 2.313e+14 3.677e+13 2.406e+14 3.573e+13 2.501e+14 3.445e+13 2.594e+14 3.292e+13 2.689e+14 3.114e+13 2.783e+14 2.910e+13 2.876e+14 2.679e+13 2.970e+14 2.421e+13 3.062e+14 2.136e+13 3.152e+14 1.823e+13 3.242e+14 1.482e+13 3.331e+14 1.114e+13 3.417e+14 7.183e+12 3.501e+14 2.954e+12 3.584e+14 -1.545e+12 3.663e+14 -6.309e+12 3.740e+14 -1.132e+13 3.814e+14 -1.659e+13 3.885e+14 -2.209e+13 3.954e+14 -2.782e+13 4.018e+14 -3.376e+13 4.079e+14 -3.990e+13 4.137e+14 -4.622e+13 4.191e+14 -5.272e+13 4.242e+14 -5.941e+13 4.290e+14 -6.623e+13 4.333e+14 -7.317e+13 4.371e+14 -8.023e+13 4.407e+14 -8.736e+13 4.437e+14 -9.455e+13 4.463e+14 -1.018e+14 4.484e+14 -1.090e+14 4.502e+14 -1.163e+14 4.514e+14 -1.235e+14 4.522e+14 -1.307e+14 4.526e+14 -1.378e+14 4.525e+14 -1.448e+14 4.520e+14 -1.517e+14 4.509e+14 -1.584e+14 4.496e+14 -1.650e+14 4.478e+14 -1.714e+14 4.454e+14 -1.776e+14 4.427e+14 -1.835e+14 4.396e+14 -1.894e+14 4.361e+14 -1.948e+14 4.323e+14 -2.000e+14 4.279e+14 -2.049e+14 4.233e+14 -2.095e+14 4.182e+14 -2.137e+14 4.128e+14 -2.177e+14 4.071e+14 -2.212e+14 4.010e+14 -2.244e+14 3.947e+14 -2.273e+14 3.881e+14 -2.296e+14 3.811e+14 -2.317e+14 3.738e+14 -2.333e+14 3.664e+14 -2.345e+14 3.587e+14 -2.353e+14 3.508e+14 -2.357e+14 3.427e+14 -2.357e+14 3.343e+14 -2.352e+14 3.258e+14 -2.344e+14 3.172e+14 -2.331e+14 3.085e+14 -2.314e+14 2.997e+14 -2.294e+14 2.908e+14 -2.269e+14 2.819e+14 -2.240e+14 2.729e+14 -2.209e+14 2.638e+14 -2.174e+14 2.548e+14 -2.135e+14 2.456e+14 -2.093e+14 2.366e+14 -2.048e+14 2.275e+14 -2.000e+14 2.185e+14 -1.950e+14 2.097e+14 -1.897e+14 2.008e+14 -1.842e+14 1.920e+14 -1.784e+14 1.834e+14 -1.726e+14 1.749e+14 -1.665e+14 1.665e+14 -1.604e+14 1.583e+14 -1.542e+14 1.503e+14 -1.478e+14 1.425e+14 -1.415e+14 1.348e+14 -1.351e+14 1.274e+14 -1.287e+14 1.201e+14 -1.224e+14 1.132e+14 -1.161e+14 1.065e+14 -1.099e+14 9.993e+13 -1.036e+14 9.365e+13 -9.765e+13 8.762e+13 -9.173e+13 8.183e+13 -8.598e+13 7.629e+13 -8.037e+13 7.100e+13 -7.494e+13 6.596e+13 -6.969e+13 6.117e+13 -6.464e+13 5.661e+13 -5.978e+13 5.231e+13 -5.515e+13 4.823e+13 -5.072e+13 4.438e+13 -4.651e+13 4.076e+13 -4.252e+13 3.736e+13 -3.875e+13 3.416e+13 -3.521e+13 3.118e+13 -3.187e+13 2.839e+13 -2.876e+13 2.579e+13 -2.587e+13 2.337e+13 -2.318e+13 2.113e+13 -2.068e+13 1.906e+13 -1.839e+13 1.714e+13 -1.628e+13 1.539e+13 -1.434e+13 1.377e+13 -1.258e+13 1.231e+13 -1.099e+13 1.095e+13 -9.538e+12 9.723e+12 -8.237e+12 8.607e+12 -7.075e+12 7.597e+12 -6.036e+12 6.364e+12 -4.871e+12 5.580e+12 -4.098e+12 4.877e+12 -3.420e+12 4.248e+12 -2.830e+12 3.689e+12 -2.320e+12 3.193e+12 -1.882e+12 2.755e+12 -1.508e+12 2.369e+12 -1.193e+12 2.031e+12 -9.284e+11 1.736e+12 -7.087e+11 1.480e+12 -5.281e+11 1.258e+12 -3.810e+11 1.067e+12 -2.628e+11 9.037e+11 -1.689e+11 7.637e+11 -9.537e+10 6.446e+11 -3.872e+10 5.436e+11 4.108e+09 4.580e+11 3.577e+10 3.856e+11 5.844e+10 3.244e+11 7.392e+10 2.724e+11 8.370e+10 2.283e+11 8.892e+10 1.907e+11 9.049e+10 1.584e+11 8.914e+10 1.307e+11 8.543e+10 1.069e+11 7.984e+10 8.639e+10 7.277e+10 6.876e+10 6.462e+10 5.368e+10 5.575e+10 4.088e+10 4.648e+10 3.015e+10 3.720e+10 2.132e+10 2.827e+10 1.424e+10 2.004e+10 8.757e+09 1.285e+10 4.741e+09 7.034e+09 2.051e+09 2.877e+09 5.664e+08 6.261e+08 2.679e+07 -5.259e+08 -5.189e+08 -2.768e+09 -1.742e+09 -7.400e+09 -3.589e+09 -1.451e+10 -5.931e+09 -2.413e+10 -8.635e+09 -3.620e+10 -1.158e+10 -5.061e+10 -1.465e+10 -6.726e+10 -1.773e+10 -8.593e+10 -2.074e+10 -1.064e+11 -2.359e+10 -1.284e+11 -2.621e+10 -1.517e+11 -2.853e+10 -1.760e+11 -3.051e+10 -2.009e+11 -3.211e+10 -2.261e+11 -3.330e+10 -2.513e+11 -3.407e+10 -2.762e+11 -3.441e+10 -3.004e+11 -3.433e+10 -3.236e+11 -3.382e+10 -3.455e+11 -3.292e+10 -3.660e+11 -3.165e+10 -3.847e+11 -3.002e+10 -4.014e+11 -2.808e+10 -4.160e+11 -2.586e+10 -4.283e+11 -2.339e+10 -4.383e+11 -2.072e+10 -4.458e+11 -1.788e+10 -4.508e+11 -1.491e+10 -4.534e+11 -1.184e+10 -4.536e+11 -8.713e+09 -4.514e+11 -5.562e+09 -4.470e+11 -2.430e+09 -4.403e+11 6.469e+08 -4.317e+11 3.639e+09 -4.212e+11 6.520e+09 -4.090e+11 9.257e+09 -3.953e+11 1.183e+10 -3.803e+11 1.422e+10 -3.642e+11 1.641e+10 -3.472e+11 1.839e+10 -3.295e+11 2.014e+10 -3.113e+11 2.165e+10 -2.929e+11 2.293e+10 -2.743e+11 2.396e+10 -2.557e+11 2.476e+10 -2.373e+11 2.532e+10 -2.193e+11 2.566e+10 -2.018e+11 2.578e+10 -1.848e+11 2.569e+10 -1.685e+11 2.542e+10 -1.530e+11 2.497e+10 -1.383e+11 2.436e+10 -1.244e+11 2.361e+10 -1.114e+11 2.274e+10 -9.934e+10 2.177e+10 -8.816e+10 2.072e+10 -7.787e+10 1.960e+10 -6.847e+10 1.844e+10 -5.992e+10 1.724e+10 -5.218e+10 1.603e+10 -4.523e+10 1.483e+10 -3.901e+10 1.363e+10 -3.348e+10 1.247e+10 -2.860e+10 1.134e+10 -2.431e+10 1.025e+10 -2.056e+10 9.207e+09 -1.729e+10 8.223e+09 -1.447e+10 7.295e+09 -1.204e+10 6.429e+09 -9.964e+09 5.626e+09 -8.196e+09 4.883e+09 -6.697e+09 4.201e+09 -5.436e+09 3.579e+09 -4.379e+09 3.013e+09 -3.497e+09 2.503e+09 -2.766e+09 2.046e+09 -2.164e+09 1.640e+09 -1.671e+09 1.283e+09 -1.269e+09 9.738e+08 -9.456e+08 7.096e+08 -6.865e+08 4.896e+08 -4.820e+08 3.124e+08 -3.233e+08 1.764e+08 -2.030e+08 8.073e+07 -1.159e+08 2.271e+07 -5.823e+07 -7.996e+06 -2.846e+07 -4.039e+07 -1.681e+07 -1.008e+08 -3.909e+06 -1.977e+08 2.313e+07 -3.306e+08 6.809e+07 -4.985e+08 1.325e+08 -7.004e+08 2.180e+08 -9.352e+08 3.265e+08 -1.202e+09 4.606e+08 -1.499e+09 6.232e+08 -1.827e+09 8.179e+08 -2.183e+09 1.048e+09 -2.568e+09 1.319e+09 -2.980e+09 1.634e+09 -3.420e+09 1.998e+09 -3.887e+09 2.418e+09 -4.382e+09 2.899e+09 -4.904e+09 3.446e+09 -5.455e+09 4.067e+09 -6.034e+09 4.768e+09 -6.642e+09 5.555e+09 -7.280e+09 6.435e+09 -7.950e+09 7.416e+09 -8.650e+09 8.503e+09 -9.383e+09 9.705e+09 -1.015e+10 1.103e+10 -1.095e+10 1.247e+10 -1.178e+10 1.405e+10 -1.265e+10 1.576e+10 -1.355e+10 1.760e+10 -1.448e+10 1.959e+10 -1.545e+10 2.171e+10 -1.646e+10 2.396e+10 -1.749e+10 2.633e+10 -1.856e+10 2.883e+10 -1.965e+10 3.144e+10 -2.077e+10 3.416e+10 -2.191e+10 3.696e+10 -2.308e+10 3.983e+10 -2.426e+10 4.275e+10 -2.545e+10 4.571e+10 -2.665e+10 4.868e+10 -2.785e+10 5.164e+10 -2.906e+10 5.456e+10 0.005 -53.712 -52.777 -51.841 -50.905 -49.970 -49.034 -48.102 -47.266 -46.516 -45.849 -45.257 -44.736 -44.284 -43.899 -43.578 -43.320 -43.125 -42.990 -42.917 -42.905 -42.955 -43.068 -43.246 -43.491 -43.805 -44.193 -44.658 -45.207 -45.845 -46.581 -47.426 -48.393 -49.498 -50.764 -52.220 -53.909 -55.890 -58.257 -61.167 -64.921 -70.247 -80.131 -84.686 -76.600 -74.315 -73.931 -72.776 -69.131 -64.847 -61.108 -57.982 -55.345 -53.086 -51.124 -49.402 -47.878 -46.522 -45.310 -44.226 -43.254 -42.383 -41.604 -40.910 -40.297 -39.758 -39.292 -38.894 -38.562 -38.294 -38.089 -37.947 -37.867 -37.849 -37.893 -38.001 -38.174 -38.414 -38.724 -39.105 -39.563 -40.102 -40.726 -41.443 -42.260 -43.188 -44.236 -45.415 -46.738 -48.222 -49.878 -51.721 -53.757 -55.994 -58.457 -61.263 -64.803 -69.413 -70.806 -65.158 -59.662 -55.621 -52.413 -49.740 -47.448 -45.447 -43.680 -42.106 -40.697 -39.430 -38.289 -37.260 -36.335 -35.504 -34.763 -34.104 -33.525 -33.021 -32.591 -32.233 -31.946 -31.729 -31.583 -31.510 -31.511 -31.589 -31.747 -31.989 -32.321 -32.751 -33.288 -33.943 -34.734 -35.680 -36.808 -38.156 -39.775 -41.740 -44.156 -47.146 -50.657 -53.571 -54.099 -52.912 -52.138 -52.720 -55.396 -57.713 -53.093 -46.325 -41.403 -37.624 -34.522 -31.872 -29.548 -27.474 -25.595 -23.879 -22.300 -20.838 -19.477 -18.206 -17.015 -15.897 -14.844 -13.850 -12.911 -12.023 -11.181 -10.384 -9.628 -8.912 -8.232 -7.587 -6.976 -6.397 -5.849 -5.330 -4.840 -4.377 -3.941 -3.531 -3.146 -2.785 -2.448 -2.135 -1.844 -1.576 -1.330 -1.106 -0.903 -0.721 -0.559 -0.419 -0.299 -0.199 -0.119 -0.060 -0.020 0.000 -0.000 -0.020 -0.058 -0.115 -0.193 -0.290 -0.408 -0.547 -0.706 -0.885 -1.086 -1.309 -1.553 -1.819 -2.108 -2.419 -2.754 -3.113 -3.497 -3.906 -4.341 -4.802 -5.292 -5.810 -6.358 -6.938 -7.550 -8.196 -8.878 -9.598 -10.358 -11.161 -12.010 -12.908 -13.860 -14.869 -15.943 -17.087 -18.310 -19.623 -21.038 -22.575 -24.257 -26.113 -28.192 -30.565 -33.352 -36.783 -41.404 -49.279 -57.464 -50.057 -45.220 -43.005 -41.921 -41.519 -41.600 -42.052 -42.760 -43.532 -44.032 -43.882 -42.980 -41.598 -40.085 -38.649 -37.370 -36.262 -35.318 -34.523 -33.861 -33.319 -32.885 -32.552 -32.310 -32.154 -32.079 -32.082 -32.159 -32.308 -32.530 -32.823 -33.187 -33.622 -34.129 -34.712 -35.372 -36.114 -36.941 -37.860 -38.879 -40.005 -41.250 -42.628 -44.155 -45.853 -47.753 -49.894 -52.327 -55.131 -58.414 -62.321 -66.734 -69.514 -68.322 -65.126 -62.011 -59.245 -56.776 -54.573 -52.615 -50.881 -49.350 -48.000 -46.812 -45.769 -44.857 -44.064 -43.380 -42.798 -42.310 -41.909 -41.592 -41.353 -41.192 -41.105 -41.091 -41.149 -41.279 -41.481 -41.757 -42.107 -42.534 -43.040 -43.631 -44.309 -45.082 -45.954 -46.935 -48.034 -49.258 -50.619 -52.120 -53.762 -55.524 -57.349 -59.126 -60.696 -61.935 -62.869 -63.676 -64.570 -65.615 -66.417 -65.901 -63.690 -60.811 -58.056 -55.637 -53.541 -51.717 -50.118 -48.709 -47.461 -46.351 -45.364 -44.484 -43.702 -43.007 -42.393 -41.854 -41.385 -40.981 -40.639 -40.357 -40.131 -39.960 -39.843 -39.777 -39.763 -39.799 -39.885 -40.021 -40.207 -40.443 -40.730 -41.069 -41.461 -41.908 -42.411 -42.972 -43.596 -44.282 -45.035 -45.862 -46.768 -47.760 -48.755 -49.750 -50.745 -51.740 -52.736 0.03 -18.4411 -18.079 -17.7205 -17.3656 -17.0143 -16.6666 -16.3225 -15.9819 -15.645 -15.3116 -14.9818 -14.6556 -14.333 -14.014 -13.6986 -13.3867 -13.0785 -12.7738 -12.4728 -12.1753 -11.8814 -11.5911 -11.3044 -11.0213 -10.7418 -10.4658 -10.1935 -9.9247 -9.6595 -9.398 -9.14 -8.8856 -8.6347 -8.3875 -8.1439 -7.9038 -7.6674 -7.4345 -7.2052 -6.9795 -6.7574 -6.5389 -6.324 -6.1127 -5.9049 -5.7008 -5.5002 -5.3033 -5.1099 -4.9201 -4.7339 -4.5513 -4.3722 -4.1968 -4.0249 -3.8567 -3.692 -3.5309 -3.3734 -3.2195 -3.0692 -2.9225 -2.7794 -2.6398 -2.5039 -2.3715 -2.2427 -2.1175 -1.9959 -1.8779 -1.7635 -1.6527 -1.5454 -1.4418 -1.3417 -1.2453 -1.1524 -1.0631 -0.97738 -0.89527 -0.81674 -0.7418 -0.67046 -0.6027 -0.53853 -0.47795 -0.42097 -0.36757 -0.31776 -0.27153 -0.2289 -0.18986 -0.15441 -0.12254 -0.094269 -0.069584 -0.048489 -0.030983 -0.017066 -0.0067382 0 0.0031488 0.0027083 -0.0013216 -0.0089409 -0.02015 -0.034948 -0.053335 -0.075312 -0.10088 -0.13003 -0.16278 -0.19911 -0.23904 -0.28255 -0.32965 -0.38034 -0.43462 -0.49249 -0.55395 -0.619 -0.68764 -0.75987 -0.83568 -0.91509 -0.99809 -1.0847 -1.1748 -1.2686 -1.366 -1.4669 -1.5714 -1.6796 -1.7913 -1.9066 -2.0255 -2.1479 -2.274 -2.4037 -2.5369 -2.6737 -2.8142 -2.9582 -3.1058 -3.257 -3.4118 -3.5701 -3.7321 -3.8977 -4.0668 -4.2395 -4.4158 -4.5957 -4.7792 -4.9663 -5.157 -5.3513 -5.5491 -5.7506 -5.9556 -6.1642 -6.3764 -6.5922 -6.8116 -7.0346 -7.2612 -7.4913 -7.7251 -7.9624 -8.2034 -8.4479 -8.696 -8.9477 -9.203 -9.4618 -9.7243 -9.9904 -10.26 -10.5332 -10.8101 -11.0905 -11.3745 -11.662 -11.9532 -12.248 -12.5464 -12.8483 -13.1538 -13.463 -13.7757 -14.092 -14.4119 -14.7354 -15.0624 -15.3931 -15.7273 -16.0652 -16.4066 -16.7516 -17.1002 -17.4524 1.0 44956.39 EW3 HV 29.77 34.27 0.050 -1.287e+10 -4.056e+09 -1.392e+10 -4.638e+09 -1.489e+10 -5.203e+09 -1.578e+10 -5.737e+09 -1.657e+10 -6.230e+09 -1.724e+10 -6.670e+09 -1.778e+10 -7.050e+09 -1.818e+10 -7.361e+09 -1.844e+10 -7.597e+09 -1.855e+10 -7.753e+09 -1.851e+10 -7.826e+09 -1.832e+10 -7.817e+09 -1.799e+10 -7.725e+09 -1.753e+10 -7.554e+09 -1.694e+10 -7.309e+09 -1.624e+10 -6.995e+09 -1.544e+10 -6.620e+09 -1.455e+10 -6.194e+09 -1.360e+10 -5.726e+09 -1.260e+10 -5.226e+09 -1.157e+10 -4.703e+09 -1.052e+10 -4.169e+09 -9.474e+09 -3.633e+09 -8.439e+09 -3.104e+09 -7.432e+09 -2.592e+09 -6.464e+09 -2.103e+09 -5.548e+09 -1.648e+09 -4.693e+09 -1.230e+09 -3.905e+09 -8.553e+08 -3.194e+09 -5.281e+08 -2.563e+09 -2.504e+08 -2.016e+09 -2.205e+07 -1.556e+09 1.598e+08 -1.183e+09 3.026e+08 -8.941e+08 4.206e+08 -6.786e+08 5.346e+08 -5.182e+08 6.701e+08 -3.869e+08 8.505e+08 -2.584e+08 1.090e+09 -1.128e+08 1.394e+09 6.140e+07 1.761e+09 2.681e+08 2.186e+09 5.058e+08 2.661e+09 7.704e+08 3.179e+09 1.055e+09 3.730e+09 1.352e+09 4.305e+09 1.653e+09 4.893e+09 1.949e+09 5.483e+09 2.229e+09 6.062e+09 2.486e+09 6.619e+09 2.710e+09 7.140e+09 2.893e+09 7.614e+09 3.028e+09 8.030e+09 3.109e+09 8.376e+09 3.131e+09 8.643e+09 3.093e+09 8.824e+09 2.993e+09 8.913e+09 2.833e+09 8.908e+09 2.614e+09 8.806e+09 2.344e+09 8.611e+09 2.028e+09 8.327e+09 1.675e+09 7.964e+09 1.295e+09 7.528e+09 8.986e+08 7.036e+09 4.959e+08 6.499e+09 9.650e+07 5.934e+09 -2.903e+08 5.360e+09 -6.593e+08 4.793e+09 -1.009e+09 4.251e+09 -1.343e+09 3.748e+09 -1.673e+09 3.294e+09 -2.016e+09 2.894e+09 -2.393e+09 2.545e+09 -2.831e+09 2.232e+09 -3.352e+09 1.938e+09 -3.976e+09 1.638e+09 -4.712e+09 1.310e+09 -5.568e+09 9.338e+08 -6.541e+09 4.937e+08 -7.627e+09 -2.103e+07 -8.820e+09 -6.172e+08 -1.011e+10 -1.296e+09 -1.148e+10 -2.058e+09 -1.292e+10 -2.900e+09 -1.442e+10 -3.815e+09 -1.597e+10 -4.798e+09 -1.755e+10 -5.842e+09 -1.914e+10 -6.935e+09 -2.074e+10 -8.068e+09 -2.232e+10 -9.230e+09 -2.388e+10 -1.041e+10 -2.541e+10 -1.159e+10 -2.687e+10 -1.276e+10 -2.828e+10 -1.391e+10 -2.960e+10 -1.503e+10 -3.083e+10 -1.608e+10 -3.195e+10 -1.707e+10 -3.296e+10 -1.798e+10 -3.384e+10 -1.878e+10 -3.458e+10 -1.948e+10 -3.517e+10 -2.004e+10 -3.561e+10 -2.048e+10 -3.589e+10 -2.076e+10 -3.600e+10 -2.089e+10 -3.595e+10 -2.085e+10 -3.572e+10 -2.065e+10 -3.532e+10 -2.028e+10 -3.476e+10 -1.975e+10 -3.405e+10 -1.907e+10 -3.318e+10 -1.824e+10 -3.219e+10 -1.728e+10 -3.107e+10 -1.621e+10 -2.984e+10 -1.504e+10 -2.853e+10 -1.380e+10 -2.715e+10 -1.251e+10 -2.572e+10 -1.119e+10 -2.426e+10 -9.870e+09 -2.278e+10 -8.560e+09 -2.132e+10 -7.284e+09 -1.988e+10 -6.059e+09 -1.849e+10 -4.899e+09 -1.715e+10 -3.815e+09 -1.587e+10 -2.814e+09 -1.467e+10 -1.899e+09 -1.356e+10 -1.073e+09 -1.253e+10 -3.321e+08 -1.158e+10 3.262e+08 -1.072e+10 9.071e+08 -9.946e+09 1.417e+09 -9.244e+09 1.862e+09 -8.613e+09 2.248e+09 -8.044e+09 2.580e+09 -7.531e+09 2.861e+09 -7.065e+09 3.096e+09 -6.642e+09 3.286e+09 -6.253e+09 3.432e+09 -5.896e+09 3.537e+09 -5.564e+09 3.601e+09 -5.254e+09 3.625e+09 -4.964e+09 3.611e+09 -4.692e+09 3.560e+09 -4.434e+09 3.474e+09 -4.191e+09 3.357e+09 -3.959e+09 3.208e+09 -3.738e+09 3.033e+09 -3.527e+09 2.833e+09 -3.325e+09 2.613e+09 -3.131e+09 2.376e+09 -2.946e+09 2.126e+09 -2.768e+09 1.868e+09 -2.599e+09 1.604e+09 -2.439e+09 1.340e+09 -2.289e+09 1.079e+09 -2.153e+09 8.245e+08 -2.031e+09 5.776e+08 -1.930e+09 3.379e+08 -1.852e+09 1.025e+08 -1.801e+09 -1.351e+08 -1.782e+09 -3.857e+08 -1.794e+09 -6.627e+08 -1.836e+09 -9.813e+08 -1.902e+09 -1.357e+09 -1.986e+09 -1.803e+09 -2.079e+09 -2.329e+09 -2.172e+09 -2.942e+09 -2.254e+09 -3.645e+09 -2.316e+09 -4.436e+09 -2.347e+09 -5.310e+09 -2.338e+09 -6.259e+09 -2.281e+09 -7.270e+09 -2.167e+09 -8.330e+09 -1.988e+09 -9.422e+09 -1.738e+09 -1.053e+10 -1.413e+09 -1.162e+10 -1.007e+09 -1.270e+10 -5.213e+08 -1.372e+10 4.653e+07 -1.469e+10 6.947e+08 -1.557e+10 1.420e+09 -1.637e+10 2.218e+09 -1.706e+10 3.084e+09 -1.765e+10 4.009e+09 -1.812e+10 4.989e+09 -1.849e+10 6.018e+09 -1.875e+10 7.089e+09 -1.890e+10 8.196e+09 -1.897e+10 9.334e+09 -1.895e+10 1.050e+10 -1.885e+10 1.168e+10 -1.869e+10 1.288e+10 -1.846e+10 1.408e+10 -1.819e+10 1.529e+10 -1.787e+10 1.648e+10 -1.750e+10 1.766e+10 -1.711e+10 1.881e+10 -1.667e+10 1.990e+10 -1.620e+10 2.094e+10 -1.571e+10 2.189e+10 -1.518e+10 2.275e+10 -1.463e+10 2.349e+10 -1.405e+10 2.409e+10 -1.345e+10 2.455e+10 -1.283e+10 2.484e+10 -1.220e+10 2.495e+10 -1.155e+10 2.488e+10 -1.089e+10 2.461e+10 -1.023e+10 2.415e+10 -9.568e+09 2.350e+10 -8.909e+09 2.266e+10 -8.259e+09 2.164e+10 -7.621e+09 2.047e+10 -7.002e+09 1.914e+10 -6.406e+09 1.770e+10 -5.836e+09 1.615e+10 -5.298e+09 1.453e+10 -4.796e+09 1.287e+10 -4.330e+09 1.120e+10 -3.904e+09 9.546e+09 -3.517e+09 7.950e+09 -3.169e+09 6.443e+09 -2.857e+09 5.059e+09 -2.581e+09 3.826e+09 -2.340e+09 2.768e+09 -2.138e+09 1.898e+09 -1.989e+09 1.206e+09 -1.920e+09 6.480e+08 -1.975e+09 1.424e+08 -2.196e+09 -4.102e+08 -2.615e+09 -1.091e+09 -3.239e+09 -1.943e+09 -4.065e+09 -2.977e+09 -5.087e+09 -4.173e+09 -6.298e+09 -5.491e+09 -7.688e+09 -6.878e+09 -9.242e+09 -8.266e+09 -1.094e+10 -9.575e+09 -1.274e+10 -1.072e+10 -1.462e+10 -1.163e+10 -1.652e+10 -1.220e+10 -1.838e+10 -1.236e+10 -2.016e+10 -1.204e+10 -2.179e+10 -1.121e+10 -2.323e+10 -9.831e+09 -2.444e+10 -7.894e+09 -2.543e+10 -5.401e+09 -2.622e+10 -2.335e+09 -2.689e+10 1.374e+09 -2.760e+10 5.914e+09 -2.853e+10 1.168e+10 -2.989e+10 1.930e+10 -3.186e+10 2.973e+10 -3.450e+10 4.417e+10 -3.776e+10 6.408e+10 -4.140e+10 9.111e+10 -4.508e+10 1.272e+11 -4.835e+10 1.745e+11 -5.064e+10 2.353e+11 -5.133e+10 3.125e+11 -4.969e+10 4.088e+11 -4.489e+10 5.277e+11 -3.603e+10 6.730e+11 -2.208e+10 8.486e+11 -1.951e+09 1.059e+12 2.560e+10 1.309e+12 6.195e+10 1.604e+12 1.085e+11 1.949e+12 1.668e+11 2.350e+12 2.385e+11 2.815e+12 3.254e+11 3.348e+12 4.293e+11 3.789e+12 5.283e+11 4.457e+12 6.661e+11 5.215e+12 8.259e+11 6.072e+12 1.010e+12 7.034e+12 1.221e+12 8.112e+12 1.458e+12 9.317e+12 1.727e+12 1.066e+13 2.026e+12 1.214e+13 2.360e+12 1.378e+13 2.728e+12 1.558e+13 3.134e+12 1.755e+13 3.575e+12 1.971e+13 4.056e+12 2.207e+13 4.574e+12 2.463e+13 5.131e+12 2.740e+13 5.727e+12 3.040e+13 6.358e+12 3.362e+13 7.025e+12 3.707e+13 7.725e+12 4.079e+13 8.455e+12 4.473e+13 9.212e+12 4.896e+13 9.995e+12 5.343e+13 1.079e+13 5.816e+13 1.160e+13 6.317e+13 1.242e+13 6.844e+13 1.324e+13 7.399e+13 1.407e+13 7.981e+13 1.487e+13 8.589e+13 1.565e+13 9.224e+13 1.641e+13 9.887e+13 1.713e+13 1.059e+14 1.834e+13 1.133e+14 1.932e+13 1.207e+14 1.994e+13 1.284e+14 2.050e+13 1.363e+14 2.098e+13 1.444e+14 2.137e+13 1.528e+14 2.165e+13 1.614e+14 2.184e+13 1.702e+14 2.190e+13 1.792e+14 2.184e+13 1.884e+14 2.164e+13 1.976e+14 2.129e+13 2.072e+14 2.078e+13 2.168e+14 2.011e+13 2.266e+14 1.926e+13 2.364e+14 1.822e+13 2.465e+14 1.699e+13 2.565e+14 1.556e+13 2.667e+14 1.391e+13 2.768e+14 1.205e+13 2.870e+14 9.940e+12 2.972e+14 7.612e+12 3.074e+14 5.037e+12 3.175e+14 2.210e+12 3.276e+14 -8.677e+11 3.377e+14 -4.204e+12 3.475e+14 -7.805e+12 3.573e+14 -1.167e+13 3.669e+14 -1.579e+13 3.762e+14 -2.018e+13 3.854e+14 -2.482e+13 3.944e+14 -2.973e+13 4.030e+14 -3.490e+13 4.114e+14 -4.030e+13 4.195e+14 -4.594e+13 4.271e+14 -5.180e+13 4.345e+14 -5.788e+13 4.415e+14 -6.417e+13 4.481e+14 -7.063e+13 4.542e+14 -7.727e+13 4.599e+14 -8.406e+13 4.653e+14 -9.102e+13 4.703e+14 -9.809e+13 4.747e+14 -1.052e+14 4.788e+14 -1.125e+14 4.823e+14 -1.198e+14 4.854e+14 -1.272e+14 4.879e+14 -1.345e+14 4.900e+14 -1.418e+14 4.916e+14 -1.490e+14 4.927e+14 -1.563e+14 4.934e+14 -1.634e+14 4.936e+14 -1.705e+14 4.933e+14 -1.774e+14 4.926e+14 -1.841e+14 4.915e+14 -1.907e+14 4.898e+14 -1.970e+14 4.878e+14 -2.033e+14 4.855e+14 -2.092e+14 4.826e+14 -2.149e+14 4.794e+14 -2.204e+14 4.757e+14 -2.255e+14 4.717e+14 -2.304e+14 4.673e+14 -2.350e+14 4.625e+14 -2.391e+14 4.574e+14 -2.430e+14 4.519e+14 -2.465e+14 4.461e+14 -2.497e+14 4.399e+14 -2.525e+14 4.335e+14 -2.548e+14 4.267e+14 -2.568e+14 4.195e+14 -2.583e+14 4.122e+14 -2.595e+14 4.044e+14 -2.601e+14 3.965e+14 -2.604e+14 3.882e+14 -2.602e+14 3.797e+14 -2.597e+14 3.710e+14 -2.586e+14 3.621e+14 -2.571e+14 3.529e+14 -2.551e+14 3.437e+14 -2.528e+14 3.343e+14 -2.500e+14 3.248e+14 -2.468e+14 3.151e+14 -2.433e+14 3.054e+14 -2.392e+14 2.956e+14 -2.350e+14 2.857e+14 -2.302e+14 2.758e+14 -2.253e+14 2.659e+14 -2.199e+14 2.560e+14 -2.143e+14 2.461e+14 -2.084e+14 2.362e+14 -2.023e+14 2.264e+14 -1.959e+14 2.168e+14 -1.895e+14 2.072e+14 -1.828e+14 1.978e+14 -1.760e+14 1.886e+14 -1.691e+14 1.795e+14 -1.621e+14 1.706e+14 -1.551e+14 1.619e+14 -1.481e+14 1.534e+14 -1.411e+14 1.452e+14 -1.342e+14 1.371e+14 -1.273e+14 1.294e+14 -1.204e+14 1.219e+14 -1.137e+14 1.146e+14 -1.072e+14 1.077e+14 -1.007e+14 1.009e+14 -9.442e+13 9.440e+13 -8.831e+13 8.818e+13 -8.238e+13 8.223e+13 -7.665e+13 7.655e+13 -7.113e+13 7.113e+13 -6.582e+13 6.596e+13 -6.074e+13 6.106e+13 -5.589e+13 5.641e+13 -5.127e+13 5.200e+13 -4.688e+13 4.784e+13 -4.273e+13 4.391e+13 -3.881e+13 4.021e+13 -3.513e+13 3.673e+13 -3.169e+13 3.348e+13 -2.848e+13 3.043e+13 -2.549e+13 2.759e+13 -2.272e+13 2.495e+13 -2.016e+13 2.250e+13 -1.781e+13 2.024e+13 -1.566e+13 1.814e+13 -1.368e+13 1.622e+13 -1.190e+13 1.445e+13 -1.029e+13 1.284e+13 -8.846e+12 1.137e+13 -7.551e+12 1.003e+13 -6.400e+12 8.821e+12 -5.382e+12 7.376e+12 -4.282e+12 6.437e+12 -3.535e+12 5.596e+12 -2.887e+12 4.846e+12 -2.330e+12 4.182e+12 -1.855e+12 3.594e+12 -1.453e+12 3.076e+12 -1.116e+12 2.623e+12 -8.360e+11 2.228e+12 -6.061e+11 1.885e+12 -4.197e+11 1.590e+12 -2.705e+11 1.335e+12 -1.529e+11 1.118e+12 -6.170e+10 9.331e+11 7.475e+09 7.764e+11 5.872e+10 6.442e+11 9.543e+10 5.330e+11 1.206e+11 4.397e+11 1.366e+11 3.616e+11 1.456e+11 2.963e+11 1.490e+11 2.415e+11 1.483e+11 1.955e+11 1.443e+11 1.570e+11 1.378e+11 1.245e+11 1.293e+11 9.721e+10 1.193e+11 7.431e+10 1.081e+11 5.520e+10 9.612e+10 3.942e+10 8.360e+10 2.658e+10 7.088e+10 1.635e+10 5.829e+10 8.494e+09 4.618e+10 2.749e+09 3.492e+10 -1.137e+09 2.486e+10 -3.437e+09 1.635e+10 -4.520e+09 9.674e+09 -4.954e+09 4.903e+09 -5.584e+09 1.565e+09 -7.172e+09 -1.647e+09 -9.885e+09 -6.263e+09 -1.341e+10 -1.324e+10 -1.739e+10 -2.296e+10 -2.151e+10 -3.551e+10 -2.555e+10 -5.082e+10 -2.931e+10 -6.874e+10 -3.260e+10 -8.905e+10 -3.529e+10 -1.115e+11 -3.725e+10 -1.356e+11 -3.838e+10 -1.612e+11 -3.863e+10 -1.877e+11 -3.794e+10 -2.148e+11 -3.629e+10 -2.421e+11 -3.369e+10 -2.690e+11 -3.016e+10 -2.952e+11 -2.576e+10 -3.204e+11 -2.054e+10 -3.440e+11 -1.460e+10 -3.659e+11 -8.026e+09 -3.856e+11 -9.278e+08 -4.031e+11 6.573e+09 -4.181e+11 1.436e+10 -4.304e+11 2.232e+10 -4.401e+11 3.032e+10 -4.470e+11 3.826e+10 -4.512e+11 4.601e+10 -4.527e+11 5.347e+10 -4.517e+11 6.056e+10 -4.482e+11 6.719e+10 -4.424e+11 7.331e+10 -4.345e+11 7.885e+10 -4.247e+11 8.375e+10 -4.132e+11 8.797e+10 -4.001e+11 9.151e+10 -3.857e+11 9.434e+10 -3.702e+11 9.646e+10 -3.538e+11 9.788e+10 -3.366e+11 9.862e+10 -3.189e+11 9.872e+10 -3.008e+11 9.819e+10 -2.825e+11 9.707e+10 -2.641e+11 9.541e+10 -2.458e+11 9.326e+10 -2.278e+11 9.065e+10 -2.100e+11 8.764e+10 -1.927e+11 8.428e+10 -1.758e+11 8.062e+10 -1.596e+11 7.671e+10 -1.440e+11 7.260e+10 -1.292e+11 6.834e+10 -1.151e+11 6.397e+10 -1.019e+11 5.954e+10 -8.955e+10 5.509e+10 -7.806e+10 5.066e+10 -6.747e+10 4.630e+10 -5.779e+10 4.203e+10 -4.899e+10 3.789e+10 -4.108e+10 3.391e+10 -3.402e+10 3.011e+10 -2.779e+10 2.652e+10 -2.235e+10 2.314e+10 -1.765e+10 2.001e+10 -1.363e+10 1.713e+10 -1.027e+10 1.450e+10 -7.490e+09 1.213e+10 -5.225e+09 1.001e+10 -3.421e+09 8.147e+09 -2.018e+09 6.525e+09 -9.555e+08 5.138e+09 -1.801e+08 3.972e+09 3.632e+08 3.007e+09 7.251e+08 2.227e+09 9.522e+08 1.607e+09 1.089e+09 1.117e+09 1.175e+09 7.260e+08 1.243e+09 3.959e+08 1.315e+09 9.171e+07 1.401e+09 -2.141e+08 1.500e+09 -5.399e+08 1.605e+09 -8.952e+08 1.707e+09 -1.281e+09 1.796e+09 -1.695e+09 1.864e+09 -2.133e+09 1.907e+09 -2.586e+09 1.923e+09 -3.047e+09 1.912e+09 -3.509e+09 1.875e+09 -3.967e+09 1.815e+09 -4.413e+09 1.736e+09 -4.844e+09 1.644e+09 -5.255e+09 1.544e+09 -5.645e+09 1.443e+09 -6.013e+09 1.346e+09 -6.359e+09 1.260e+09 -6.684e+09 1.189e+09 -6.991e+09 1.140e+09 -7.283e+09 1.116e+09 -7.564e+09 1.123e+09 -7.838e+09 1.163e+09 -8.110e+09 1.241e+09 -8.386e+09 1.360e+09 -8.670e+09 1.523e+09 -8.968e+09 1.732e+09 -9.285e+09 1.992e+09 -9.624e+09 2.305e+09 -9.991e+09 2.676e+09 -1.039e+10 3.108e+09 -1.081e+10 3.606e+09 -1.128e+10 4.175e+09 -1.177e+10 4.818e+09 -1.230e+10 5.544e+09 -1.286e+10 6.356e+09 -1.346e+10 7.258e+09 -1.408e+10 8.254e+09 -1.472e+10 9.351e+09 -1.538e+10 1.055e+10 -1.605e+10 1.185e+10 -1.674e+10 1.327e+10 -1.743e+10 1.479e+10 -1.812e+10 1.641e+10 -1.881e+10 1.815e+10 -1.949e+10 1.999e+10 -2.017e+10 2.194e+10 -2.083e+10 2.398e+10 -2.148e+10 2.611e+10 -2.212e+10 2.833e+10 -2.276e+10 3.062e+10 -2.338e+10 3.297e+10 -2.401e+10 3.536e+10 -2.463e+10 3.779e+10 0.005 -52.779 -51.840 -50.901 -49.962 -49.023 -48.085 -47.150 -46.308 -45.553 -44.878 -44.276 -43.744 -43.278 -42.877 -42.538 -42.259 -42.040 -41.878 -41.775 -41.729 -41.742 -41.814 -41.945 -42.139 -42.396 -42.721 -43.115 -43.585 -44.135 -44.772 -45.504 -46.344 -47.304 -48.404 -49.669 -51.135 -52.855 -54.911 -57.447 -60.745 -65.505 -74.671 -78.294 -68.982 -65.104 -63.072 -61.937 -61.351 -61.088 -60.910 -60.523 -59.662 -58.279 -56.562 -54.747 -52.990 -51.361 -49.880 -48.547 -47.353 -46.286 -45.335 -44.491 -43.746 -43.094 -42.527 -42.043 -41.636 -41.304 -41.045 -40.857 -40.740 -40.692 -40.715 -40.808 -40.973 -41.211 -41.527 -41.921 -42.398 -42.964 -43.621 -44.378 -45.241 -46.219 -47.315 -48.537 -49.883 -51.348 -52.913 -54.545 -56.204 -57.877 -59.632 -61.708 -64.637 -68.842 -70.037 -64.346 -58.900 -54.958 -51.867 -49.315 -47.141 -45.250 -43.584 -42.104 -40.781 -39.593 -38.524 -37.564 -36.703 -35.934 -35.250 -34.648 -34.124 -33.674 -33.298 -32.993 -32.761 -32.601 -32.514 -32.502 -32.569 -32.718 -32.952 -33.279 -33.706 -34.243 -34.902 -35.700 -36.658 -37.805 -39.175 -40.815 -42.777 -45.083 -47.581 -49.618 -50.243 -49.517 -48.506 -47.957 -48.192 -49.559 -52.804 -55.541 -51.238 -44.719 -39.996 -36.379 -33.412 -30.875 -28.649 -26.658 -24.853 -23.202 -21.679 -20.268 -18.953 -17.723 -16.569 -15.484 -14.462 -13.497 -12.584 -11.720 -10.900 -10.124 -9.387 -8.688 -8.025 -7.396 -6.799 -6.233 -5.698 -5.191 -4.712 -4.259 -3.833 -3.432 -3.056 -2.703 -2.374 -2.068 -1.784 -1.523 -1.283 -1.064 -0.866 -0.689 -0.533 -0.397 -0.281 -0.185 -0.109 -0.053 -0.017 0.000 -0.003 -0.026 -0.065 -0.125 -0.204 -0.304 -0.423 -0.563 -0.723 -0.904 -1.106 -1.329 -1.574 -1.840 -2.129 -2.441 -2.776 -3.134 -3.518 -3.926 -4.360 -4.821 -5.309 -5.826 -6.373 -6.950 -7.560 -8.204 -8.884 -9.601 -10.358 -11.158 -12.004 -12.898 -13.845 -14.851 -15.919 -17.058 -18.275 -19.582 -20.990 -22.520 -24.193 -26.041 -28.111 -30.473 -33.249 -36.667 -41.274 -49.135 -57.305 -49.882 -45.030 -42.802 -41.711 -41.314 -41.431 -41.979 -42.912 -44.148 -45.435 -46.175 -45.743 -44.255 -42.379 -40.585 -39.022 -37.702 -36.600 -35.684 -34.931 -34.318 -33.830 -33.454 -33.180 -33.000 -32.907 -32.898 -32.969 -33.116 -33.341 -33.641 -34.015 -34.464 -34.990 -35.595 -36.280 -37.051 -37.910 -38.864 -39.919 -41.081 -42.358 -43.760 -45.295 -46.973 -48.805 -50.801 -52.976 -55.357 -58.015 -61.080 -64.486 -66.214 -64.100 -60.255 -56.810 -53.980 -51.615 -49.597 -47.850 -46.324 -44.981 -43.796 -42.748 -41.821 -41.003 -40.285 -39.656 -39.113 -38.648 -38.257 -37.935 -37.680 -37.489 -37.360 -37.291 -37.282 -37.331 -37.438 -37.604 -37.829 -38.113 -38.458 -38.865 -39.337 -39.876 -40.487 -41.172 -41.937 -42.788 -43.732 -44.779 -45.938 -47.227 -48.662 -50.268 -52.072 -54.115 -56.446 -59.123 -62.197 -65.622 -68.955 -71.119 -71.719 -71.640 -71.143 -69.534 -66.774 -63.715 -60.882 -58.398 -56.248 -54.383 -52.759 -51.338 -50.090 -48.993 -48.027 -47.177 -46.433 -45.784 -45.222 -44.741 -44.336 -44.002 -43.736 -43.535 -43.396 -43.318 -43.299 -43.338 -43.435 -43.589 -43.801 -44.071 -44.400 -44.789 -45.241 -45.757 -46.340 -46.991 -47.717 -48.523 -49.415 -50.401 -51.392 -52.382 -53.373 -54.363 -55.353 0.03 -19.0059 -18.631 -18.2598 -17.8924 -17.5287 -17.1688 -16.8126 -16.4601 -16.1113 -15.7663 -15.425 -15.0875 -14.7537 -14.4236 -14.0973 -13.7747 -13.4558 -13.1406 -12.8292 -12.5216 -12.2176 -11.9174 -11.6209 -11.3282 -11.0392 -10.7539 -10.4724 -10.1946 -9.9205 -9.6502 -9.3836 -9.1207 -8.8616 -8.6062 -8.3545 -8.1066 -7.8624 -7.6219 -7.3852 -7.1522 -6.9229 -6.6974 -6.4756 -6.2575 -6.0432 -5.8326 -5.6257 -5.4226 -5.2232 -5.0276 -4.8356 -4.6474 -4.463 -4.2823 -4.1053 -3.932 -3.7625 -3.5967 -3.4346 -3.2763 -3.1217 -2.9709 -2.8238 -2.6804 -2.5407 -2.4048 -2.2726 -2.1442 -2.0195 -1.8985 -1.7812 -1.6677 -1.5579 -1.4519 -1.3496 -1.251 -1.1561 -1.065 -0.97765 -0.89401 -0.8141 -0.73792 -0.66548 -0.59677 -0.5318 -0.47056 -0.41305 -0.35927 -0.30923 -0.26293 -0.22036 -0.18152 -0.14642 -0.11504 -0.087408 -0.063506 -0.043337 -0.026902 -0.014201 -0.0052334 0 0.0014996 -0.00073464 -0.0067027 -0.016405 -0.02984 -0.04701 -0.067913 -0.092551 -0.12092 -0.15303 -0.18887 -0.22844 -0.27174 -0.31879 -0.36956 -0.42407 -0.48231 -0.54429 -0.60999 -0.67944 -0.75262 -0.82953 -0.91017 -0.99455 -1.0827 -1.1745 -1.2701 -1.3694 -1.4725 -1.5792 -1.6897 -1.804 -1.922 -2.0437 -2.1692 -2.2983 -2.4313 -2.5679 -2.7083 -2.8524 -3.0003 -3.1519 -3.3072 -3.4662 -3.629 -3.7955 -3.9658 -4.1398 -4.3175 -4.499 -4.6842 -4.8731 -5.0658 -5.2621 -5.4623 -5.6661 -5.8737 -6.0851 -6.3001 -6.5189 -6.7415 -6.9677 -7.1977 -7.4315 -7.6689 -7.9101 -8.1551 -8.4037 -8.6561 -8.9123 -9.1721 -9.4357 -9.7031 -9.9741 -10.2489 -10.5275 -10.8098 -11.0958 -11.3855 -11.679 -11.9762 -12.2771 -12.5818 -12.8902 -13.2024 -13.5182 -13.8378 -14.1612 -14.4883 -14.8191 -15.1536 -15.4919 -15.8339 -16.1797 -16.5291 -16.8824 -17.2393 -17.6 -17.9644 -18.3326 1.0 44956.39 EW3 VV 29.77 34.27 0.050 -1.462e+10 1.237e+10 -1.560e+10 1.294e+10 -1.648e+10 1.343e+10 -1.725e+10 1.382e+10 -1.788e+10 1.411e+10 -1.836e+10 1.429e+10 -1.869e+10 1.436e+10 -1.887e+10 1.432e+10 -1.888e+10 1.418e+10 -1.874e+10 1.394e+10 -1.844e+10 1.361e+10 -1.799e+10 1.318e+10 -1.741e+10 1.268e+10 -1.671e+10 1.212e+10 -1.591e+10 1.150e+10 -1.501e+10 1.083e+10 -1.403e+10 1.013e+10 -1.301e+10 9.410e+09 -1.195e+10 8.681e+09 -1.086e+10 7.951e+09 -9.776e+09 7.230e+09 -8.703e+09 6.527e+09 -7.655e+09 5.847e+09 -6.646e+09 5.197e+09 -5.687e+09 4.582e+09 -4.786e+09 4.006e+09 -3.954e+09 3.470e+09 -3.195e+09 2.978e+09 -2.514e+09 2.531e+09 -1.915e+09 2.129e+09 -1.400e+09 1.773e+09 -9.682e+08 1.464e+09 -6.162e+08 1.203e+09 -3.371e+08 9.924e+08 -1.177e+08 8.335e+08 6.210e+07 7.282e+08 2.294e+08 6.736e+08 4.124e+08 6.613e+08 6.324e+08 6.792e+08 9.009e+08 7.152e+08 1.221e+09 7.609e+08 1.588e+09 8.114e+08 1.996e+09 8.645e+08 2.436e+09 9.197e+08 2.896e+09 9.775e+08 3.365e+09 1.039e+09 3.830e+09 1.104e+09 4.277e+09 1.176e+09 4.694e+09 1.253e+09 5.067e+09 1.336e+09 5.385e+09 1.426e+09 5.637e+09 1.521e+09 5.814e+09 1.621e+09 5.909e+09 1.723e+09 5.918e+09 1.827e+09 5.838e+09 1.929e+09 5.673e+09 2.027e+09 5.425e+09 2.119e+09 5.105e+09 2.201e+09 4.720e+09 2.271e+09 4.286e+09 2.328e+09 3.817e+09 2.372e+09 3.328e+09 2.403e+09 2.836e+09 2.424e+09 2.354e+09 2.441e+09 1.892e+09 2.462e+09 1.456e+09 2.498e+09 1.045e+09 2.565e+09 6.458e+08 2.678e+09 2.402e+08 2.849e+09 -1.970e+08 3.087e+09 -6.920e+08 3.394e+09 -1.266e+09 3.769e+09 -1.938e+09 4.204e+09 -2.721e+09 4.693e+09 -3.617e+09 5.225e+09 -4.631e+09 5.792e+09 -5.760e+09 6.386e+09 -6.998e+09 6.995e+09 -8.338e+09 7.614e+09 -9.772e+09 8.234e+09 -1.129e+10 8.847e+09 -1.287e+10 9.448e+09 -1.452e+10 1.003e+10 -1.622e+10 1.059e+10 -1.796e+10 1.112e+10 -1.972e+10 1.162e+10 -2.149e+10 1.208e+10 -2.326e+10 1.250e+10 -2.501e+10 1.288e+10 -2.674e+10 1.322e+10 -2.842e+10 1.352e+10 -3.005e+10 1.377e+10 -3.161e+10 1.398e+10 -3.307e+10 1.414e+10 -3.443e+10 1.426e+10 -3.566e+10 1.434e+10 -3.675e+10 1.439e+10 -3.769e+10 1.439e+10 -3.845e+10 1.437e+10 -3.903e+10 1.431e+10 -3.940e+10 1.423e+10 -3.956e+10 1.412e+10 -3.951e+10 1.400e+10 -3.922e+10 1.385e+10 -3.870e+10 1.369e+10 -3.797e+10 1.351e+10 -3.701e+10 1.331e+10 -3.584e+10 1.311e+10 -3.448e+10 1.289e+10 -3.296e+10 1.266e+10 -3.128e+10 1.241e+10 -2.948e+10 1.215e+10 -2.759e+10 1.188e+10 -2.564e+10 1.159e+10 -2.366e+10 1.129e+10 -2.167e+10 1.097e+10 -1.971e+10 1.064e+10 -1.781e+10 1.030e+10 -1.598e+10 9.952e+09 -1.424e+10 9.594e+09 -1.261e+10 9.234e+09 -1.110e+10 8.875e+09 -9.710e+09 8.520e+09 -8.453e+09 8.173e+09 -7.321e+09 7.839e+09 -6.312e+09 7.518e+09 -5.418e+09 7.215e+09 -4.630e+09 6.928e+09 -3.941e+09 6.659e+09 -3.340e+09 6.406e+09 -2.819e+09 6.167e+09 -2.368e+09 5.939e+09 -1.982e+09 5.720e+09 -1.652e+09 5.506e+09 -1.373e+09 5.296e+09 -1.141e+09 5.086e+09 -9.502e+08 4.874e+09 -7.977e+08 4.659e+09 -6.800e+08 4.440e+09 -5.933e+08 4.217e+09 -5.347e+08 3.989e+09 -5.009e+08 3.757e+09 -4.890e+08 3.521e+09 -4.958e+08 3.282e+09 -5.186e+08 3.041e+09 -5.545e+08 2.800e+09 -6.009e+08 2.560e+09 -6.557e+08 2.325e+09 -7.172e+08 2.095e+09 -7.843e+08 1.873e+09 -8.571e+08 1.662e+09 -9.371e+08 1.464e+09 -1.027e+09 1.279e+09 -1.133e+09 1.108e+09 -1.262e+09 9.475e+08 -1.422e+09 7.920e+08 -1.621e+09 6.332e+08 -1.870e+09 4.599e+08 -2.173e+09 2.598e+08 -2.535e+09 2.022e+07 -2.959e+09 -2.711e+08 -3.444e+09 -6.250e+08 -3.986e+09 -1.050e+09 -4.581e+09 -1.553e+09 -5.221e+09 -2.138e+09 -5.895e+09 -2.807e+09 -6.591e+09 -3.559e+09 -7.296e+09 -4.393e+09 -7.992e+09 -5.301e+09 -8.663e+09 -6.276e+09 -9.292e+09 -7.308e+09 -9.860e+09 -8.386e+09 -1.035e+10 -9.497e+09 -1.075e+10 -1.063e+10 -1.104e+10 -1.176e+10 -1.122e+10 -1.289e+10 -1.127e+10 -1.400e+10 -1.120e+10 -1.507e+10 -1.099e+10 -1.611e+10 -1.066e+10 -1.710e+10 -1.020e+10 -1.803e+10 -9.625e+09 -1.890e+10 -8.943e+09 -1.973e+10 -8.164e+09 -2.049e+10 -7.299e+09 -2.121e+10 -6.358e+09 -2.188e+10 -5.354e+09 -2.251e+10 -4.296e+09 -2.310e+10 -3.194e+09 -2.366e+10 -2.058e+09 -2.418e+10 -8.974e+08 -2.466e+10 2.786e+08 -2.511e+10 1.458e+09 -2.552e+10 2.633e+09 -2.587e+10 3.789e+09 -2.617e+10 4.915e+09 -2.640e+10 5.996e+09 -2.656e+10 7.019e+09 -2.662e+10 7.968e+09 -2.659e+10 8.831e+09 -2.645e+10 9.592e+09 -2.619e+10 1.024e+10 -2.581e+10 1.076e+10 -2.530e+10 1.115e+10 -2.467e+10 1.140e+10 -2.390e+10 1.151e+10 -2.301e+10 1.146e+10 -2.200e+10 1.128e+10 -2.088e+10 1.095e+10 -1.967e+10 1.048e+10 -1.836e+10 9.899e+09 -1.700e+10 9.203e+09 -1.558e+10 8.411e+09 -1.413e+10 7.545e+09 -1.267e+10 6.622e+09 -1.123e+10 5.668e+09 -9.814e+09 4.707e+09 -8.459e+09 3.764e+09 -7.178e+09 2.866e+09 -5.991e+09 2.039e+09 -4.916e+09 1.304e+09 -3.970e+09 6.744e+08 -3.167e+09 1.513e+08 -2.524e+09 -2.895e+08 -2.050e+09 -7.032e+08 -1.745e+09 -1.171e+09 -1.591e+09 -1.774e+09 -1.546e+09 -2.567e+09 -1.568e+09 -3.568e+09 -1.628e+09 -4.770e+09 -1.717e+09 -6.144e+09 -1.841e+09 -7.646e+09 -2.013e+09 -9.219e+09 -2.254e+09 -1.079e+10 -2.582e+09 -1.229e+10 -3.016e+09 -1.363e+10 -3.571e+09 -1.472e+10 -4.256e+09 -1.549e+10 -5.072e+09 -1.587e+10 -6.015e+09 -1.581e+10 -7.075e+09 -1.529e+10 -8.238e+09 -1.431e+10 -9.504e+09 -1.292e+10 -1.089e+10 -1.118e+10 -1.248e+10 -9.118e+09 -1.442e+10 -6.674e+09 -1.699e+10 -3.599e+09 -2.062e+10 6.342e+08 -2.581e+10 6.840e+09 -3.314e+10 1.611e+10 -4.317e+10 2.977e+10 -5.652e+10 4.937e+10 -7.383e+10 7.666e+10 -9.578e+10 1.137e+11 -1.232e+11 1.628e+11 -1.568e+11 2.265e+11 -1.977e+11 3.078e+11 -2.468e+11 4.099e+11 -3.053e+11 5.363e+11 -3.744e+11 6.914e+11 -4.555e+11 8.794e+11 -5.501e+11 1.105e+12 -6.598e+11 1.374e+12 -7.863e+11 1.692e+12 -9.313e+11 2.065e+12 -1.097e+12 2.499e+12 -1.285e+12 3.002e+12 -1.498e+12 3.581e+12 -1.738e+12 4.058e+12 -1.921e+12 4.783e+12 -2.212e+12 5.605e+12 -2.538e+12 6.536e+12 -2.901e+12 7.581e+12 -3.305e+12 8.752e+12 -3.754e+12 1.006e+13 -4.251e+12 1.151e+13 -4.802e+12 1.312e+13 -5.408e+12 1.489e+13 -6.077e+12 1.684e+13 -6.811e+12 1.898e+13 -7.618e+12 2.132e+13 -8.502e+12 2.385e+13 -9.467e+12 2.661e+13 -1.052e+13 2.958e+13 -1.167e+13 3.280e+13 -1.292e+13 3.624e+13 -1.427e+13 3.995e+13 -1.575e+13 4.390e+13 -1.734e+13 4.810e+13 -1.905e+13 5.258e+13 -2.091e+13 5.732e+13 -2.289e+13 6.233e+13 -2.503e+13 6.760e+13 -2.731e+13 7.314e+13 -2.976e+13 7.895e+13 -3.237e+13 8.504e+13 -3.515e+13 9.137e+13 -3.810e+13 9.800e+13 -4.123e+13 1.049e+14 -4.456e+13 1.114e+14 -4.896e+13 1.199e+14 -5.138e+13 1.276e+14 -5.524e+13 1.355e+14 -5.929e+13 1.435e+14 -6.353e+13 1.517e+14 -6.799e+13 1.602e+14 -7.265e+13 1.688e+14 -7.751e+13 1.776e+14 -8.261e+13 1.865e+14 -8.790e+13 1.956e+14 -9.340e+13 2.048e+14 -9.918e+13 2.141e+14 -1.051e+14 2.236e+14 -1.112e+14 2.331e+14 -1.177e+14 2.426e+14 -1.243e+14 2.522e+14 -1.311e+14 2.618e+14 -1.382e+14 2.714e+14 -1.455e+14 2.810e+14 -1.531e+14 2.905e+14 -1.608e+14 2.999e+14 -1.688e+14 3.092e+14 -1.769e+14 3.184e+14 -1.854e+14 3.276e+14 -1.940e+14 3.364e+14 -2.028e+14 3.451e+14 -2.117e+14 3.536e+14 -2.209e+14 3.618e+14 -2.302e+14 3.697e+14 -2.398e+14 3.772e+14 -2.494e+14 3.845e+14 -2.591e+14 3.913e+14 -2.689e+14 3.979e+14 -2.788e+14 4.040e+14 -2.887e+14 4.096e+14 -2.986e+14 4.149e+14 -3.086e+14 4.197e+14 -3.185e+14 4.240e+14 -3.284e+14 4.278e+14 -3.381e+14 4.313e+14 -3.479e+14 4.341e+14 -3.574e+14 4.365e+14 -3.669e+14 4.384e+14 -3.760e+14 4.398e+14 -3.850e+14 4.407e+14 -3.938e+14 4.411e+14 -4.023e+14 4.410e+14 -4.105e+14 4.405e+14 -4.183e+14 4.394e+14 -4.258e+14 4.380e+14 -4.331e+14 4.360e+14 -4.398e+14 4.336e+14 -4.462e+14 4.309e+14 -4.522e+14 4.277e+14 -4.578e+14 4.241e+14 -4.629e+14 4.203e+14 -4.676e+14 4.160e+14 -4.719e+14 4.113e+14 -4.757e+14 4.064e+14 -4.790e+14 4.012e+14 -4.818e+14 3.957e+14 -4.842e+14 3.899e+14 -4.861e+14 3.839e+14 -4.874e+14 3.775e+14 -4.882e+14 3.710e+14 -4.885e+14 3.643e+14 -4.884e+14 3.573e+14 -4.877e+14 3.501e+14 -4.864e+14 3.427e+14 -4.846e+14 3.353e+14 -4.822e+14 3.276e+14 -4.794e+14 3.198e+14 -4.759e+14 3.117e+14 -4.719e+14 3.037e+14 -4.673e+14 2.955e+14 -4.622e+14 2.872e+14 -4.565e+14 2.789e+14 -4.502e+14 2.705e+14 -4.435e+14 2.620e+14 -4.362e+14 2.535e+14 -4.284e+14 2.451e+14 -4.202e+14 2.368e+14 -4.115e+14 2.284e+14 -4.024e+14 2.202e+14 -3.927e+14 2.118e+14 -3.829e+14 2.037e+14 -3.725e+14 1.955e+14 -3.619e+14 1.876e+14 -3.510e+14 1.797e+14 -3.398e+14 1.719e+14 -3.284e+14 1.644e+14 -3.169e+14 1.569e+14 -3.052e+14 1.496e+14 -2.934e+14 1.425e+14 -2.816e+14 1.356e+14 -2.697e+14 1.288e+14 -2.579e+14 1.223e+14 -2.462e+14 1.160e+14 -2.346e+14 1.098e+14 -2.231e+14 1.039e+14 -2.117e+14 9.826e+13 -2.006e+14 9.276e+13 -1.896e+14 8.748e+13 -1.790e+14 8.240e+13 -1.686e+14 7.753e+13 -1.584e+14 7.286e+13 -1.486e+14 6.838e+13 -1.390e+14 6.410e+13 -1.298e+14 6.001e+13 -1.210e+14 5.612e+13 -1.125e+14 5.240e+13 -1.044e+14 4.885e+13 -9.657e+13 4.549e+13 -8.914e+13 4.229e+13 -8.206e+13 3.925e+13 -7.533e+13 3.637e+13 -6.897e+13 3.365e+13 -6.297e+13 3.107e+13 -5.732e+13 2.864e+13 -5.200e+13 2.635e+13 -4.702e+13 2.418e+13 -4.238e+13 2.214e+13 -3.806e+13 2.022e+13 -3.406e+13 1.843e+13 -3.035e+13 1.676e+13 -2.694e+13 1.522e+13 -2.382e+13 1.376e+13 -2.096e+13 1.242e+13 -1.835e+13 1.119e+13 -1.600e+13 1.004e+13 -1.387e+13 8.989e+12 -1.196e+13 8.022e+12 -1.026e+13 7.137e+12 -8.744e+12 6.036e+12 -7.062e+12 5.333e+12 -5.937e+12 4.696e+12 -4.954e+12 4.122e+12 -4.102e+12 3.605e+12 -3.369e+12 3.142e+12 -2.741e+12 2.730e+12 -2.207e+12 2.363e+12 -1.757e+12 2.039e+12 -1.381e+12 1.753e+12 -1.070e+12 1.503e+12 -8.140e+11 1.285e+12 -6.057e+11 1.095e+12 -4.381e+11 9.311e+11 -3.047e+11 7.899e+11 -1.996e+11 6.688e+11 -1.180e+11 5.653e+11 -5.548e+10 4.770e+11 -8.378e+09 4.017e+11 2.635e+10 3.375e+11 5.123e+10 2.827e+11 6.833e+10 2.358e+11 7.922e+10 1.955e+11 8.519e+10 1.608e+11 8.720e+10 1.308e+11 8.604e+10 1.048e+11 8.233e+10 8.240e+10 7.659e+10 6.315e+10 6.930e+10 4.677e+10 6.089e+10 3.302e+10 5.178e+10 2.175e+10 4.241e+10 1.282e+10 3.320e+10 6.074e+09 2.458e+10 1.342e+09 1.697e+10 -1.659e+09 1.077e+10 -3.467e+09 6.226e+09 -5.054e+09 3.126e+09 -7.550e+09 4.026e+08 -1.156e+10 -3.412e+09 -1.706e+10 -9.375e+09 -2.378e+10 -1.798e+10 -3.147e+10 -2.944e+10 -3.987e+10 -4.376e+10 -4.872e+10 -6.086e+10 -5.779e+10 -8.061e+10 -6.685e+10 -1.028e+11 -7.566e+10 -1.270e+11 -8.403e+10 -1.530e+11 -9.175e+10 -1.803e+11 -9.866e+10 -2.086e+11 -1.046e+11 -2.374e+11 -1.095e+11 -2.661e+11 -1.131e+11 -2.945e+11 -1.155e+11 -3.220e+11 -1.166e+11 -3.482e+11 -1.164e+11 -3.728e+11 -1.150e+11 -3.954e+11 -1.123e+11 -4.158e+11 -1.084e+11 -4.336e+11 -1.034e+11 -4.488e+11 -9.753e+10 -4.612e+11 -9.078e+10 -4.707e+11 -8.332e+10 -4.774e+11 -7.529e+10 -4.812e+11 -6.685e+10 -4.823e+11 -5.811e+10 -4.807e+11 -4.922e+10 -4.766e+11 -4.031e+10 -4.701e+11 -3.148e+10 -4.615e+11 -2.287e+10 -4.509e+11 -1.459e+10 -4.386e+11 -6.692e+09 -4.248e+11 7.352e+08 -4.096e+11 7.631e+09 -3.934e+11 1.396e+10 -3.762e+11 1.969e+10 -3.583e+11 2.480e+10 -3.399e+11 2.927e+10 -3.210e+11 3.312e+10 -3.020e+11 3.635e+10 -2.829e+11 3.896e+10 -2.639e+11 4.100e+10 -2.450e+11 4.247e+10 -2.264e+11 4.342e+10 -2.082e+11 4.387e+10 -1.905e+11 4.386e+10 -1.734e+11 4.343e+10 -1.570e+11 4.262e+10 -1.412e+11 4.147e+10 -1.263e+11 4.001e+10 -1.121e+11 3.830e+10 -9.883e+10 3.637e+10 -8.646e+10 3.426e+10 -7.501e+10 3.201e+10 -6.448e+10 2.967e+10 -5.490e+10 2.726e+10 -4.624e+10 2.483e+10 -3.849e+10 2.242e+10 -3.163e+10 2.004e+10 -2.561e+10 1.774e+10 -2.040e+10 1.554e+10 -1.595e+10 1.346e+10 -1.220e+10 1.151e+10 -9.074e+09 9.723e+09 -6.526e+09 8.102e+09 -4.484e+09 6.651e+09 -2.881e+09 5.378e+09 -1.657e+09 4.282e+09 -7.474e+08 3.354e+09 -9.165e+07 2.589e+09 3.660e+08 1.971e+09 6.810e+08 1.479e+09 9.038e+08 1.088e+09 1.078e+09 7.629e+08 1.238e+09 4.708e+08 1.402e+09 1.826e+08 1.579e+09 -1.223e+08 1.765e+09 -4.561e+08 1.952e+09 -8.224e+08 2.132e+09 -1.220e+09 2.296e+09 -1.645e+09 2.439e+09 -2.090e+09 2.556e+09 -2.547e+09 2.646e+09 -3.011e+09 2.708e+09 -3.472e+09 2.745e+09 -3.925e+09 2.759e+09 -4.363e+09 2.755e+09 -4.783e+09 2.737e+09 -5.181e+09 2.712e+09 -5.556e+09 2.684e+09 -5.906e+09 2.661e+09 -6.232e+09 2.648e+09 -6.537e+09 2.650e+09 -6.822e+09 2.673e+09 -7.091e+09 2.722e+09 -7.349e+09 2.803e+09 -7.599e+09 2.919e+09 -7.847e+09 3.076e+09 -8.098e+09 3.276e+09 -8.357e+09 3.526e+09 -8.627e+09 3.829e+09 -8.913e+09 4.191e+09 -9.219e+09 4.616e+09 -9.547e+09 5.108e+09 -9.899e+09 5.675e+09 -1.028e+10 6.322e+09 -1.068e+10 7.054e+09 -1.111e+10 7.879e+09 -1.155e+10 8.803e+09 -1.202e+10 9.828e+09 -1.250e+10 1.096e+10 -1.300e+10 1.221e+10 -1.350e+10 1.357e+10 -1.400e+10 1.506e+10 -1.450e+10 1.666e+10 -1.499e+10 1.839e+10 -1.546e+10 2.025e+10 -1.591e+10 2.222e+10 -1.635e+10 2.432e+10 -1.675e+10 2.654e+10 -1.714e+10 2.886e+10 -1.750e+10 3.130e+10 -1.784e+10 3.382e+10 -1.815e+10 3.644e+10 -1.846e+10 3.913e+10 -1.875e+10 4.189e+10 -1.905e+10 4.468e+10 0.005 -52.832 -51.850 -50.869 -49.887 -48.906 -47.924 -46.946 -46.065 -45.270 -44.556 -43.917 -43.347 -42.844 -42.405 -42.028 -41.710 -41.449 -41.246 -41.099 -41.008 -40.972 -40.992 -41.068 -41.203 -41.396 -41.650 -41.967 -42.351 -42.804 -43.333 -43.941 -44.636 -45.426 -46.322 -47.337 -48.489 -49.801 -51.304 -53.042 -55.080 -57.521 -60.530 -64.391 -69.360 -72.713 -70.070 -67.247 -65.509 -64.471 -63.743 -62.947 -61.769 -60.133 -58.209 -56.222 -54.317 -52.561 -50.968 -49.536 -48.253 -47.106 -46.081 -45.168 -44.360 -43.648 -43.025 -42.486 -42.028 -41.647 -41.339 -41.103 -40.939 -40.844 -40.818 -40.863 -40.979 -41.166 -41.428 -41.766 -42.183 -42.683 -43.270 -43.948 -44.723 -45.599 -46.578 -47.660 -48.839 -50.096 -51.397 -52.683 -53.874 -54.882 -55.648 -56.153 -56.396 -56.339 -55.891 -54.966 -53.583 -51.887 -50.058 -48.234 -46.491 -44.863 -43.359 -41.980 -40.720 -39.569 -38.521 -37.570 -36.709 -35.934 -35.240 -34.624 -34.083 -33.614 -33.217 -32.891 -32.634 -32.448 -32.334 -32.293 -32.329 -32.445 -32.644 -32.934 -33.320 -33.813 -34.424 -35.170 -36.071 -37.153 -38.450 -40.008 -41.875 -44.071 -46.437 -48.313 -48.740 -47.759 -46.410 -45.385 -44.902 -45.069 -46.069 -48.319 -52.045 -51.304 -45.826 -40.588 -36.656 -33.511 -30.868 -28.575 -26.539 -24.705 -23.035 -21.501 -20.083 -18.764 -17.533 -16.381 -15.298 -14.279 -13.317 -12.408 -11.548 -10.734 -9.962 -9.231 -8.537 -7.880 -7.256 -6.665 -6.105 -5.576 -5.074 -4.601 -4.154 -3.734 -3.338 -2.967 -2.621 -2.297 -1.996 -1.718 -1.462 -1.227 -1.014 -0.821 -0.650 -0.498 -0.368 -0.257 -0.166 -0.095 -0.044 -0.012 0.000 -0.008 -0.032 -0.077 -0.141 -0.224 -0.328 -0.452 -0.596 -0.760 -0.945 -1.150 -1.377 -1.625 -1.895 -2.188 -2.502 -2.840 -3.202 -3.587 -3.998 -4.434 -4.896 -5.386 -5.903 -6.450 -7.028 -7.637 -8.279 -8.956 -9.670 -10.422 -11.215 -12.053 -12.936 -13.871 -14.859 -15.907 -17.020 -18.204 -19.468 -20.824 -22.283 -23.861 -25.578 -27.461 -29.546 -31.880 -34.524 -37.544 -40.908 -44.125 -45.933 -45.726 -44.746 -44.025 -43.791 -44.038 -44.722 -45.753 -46.869 -47.465 -46.909 -45.313 -43.343 -41.465 -39.827 -38.438 -37.272 -36.298 -35.491 -34.827 -34.291 -33.868 -33.549 -33.326 -33.191 -33.139 -33.168 -33.274 -33.456 -33.712 -34.042 -34.444 -34.921 -35.473 -36.102 -36.811 -37.603 -38.481 -39.449 -40.511 -41.672 -42.933 -44.295 -45.756 -47.307 -48.927 -50.580 -52.206 -53.723 -55.021 -55.961 -56.377 -56.140 -55.258 -53.902 -52.306 -50.654 -49.055 -47.559 -46.184 -44.935 -43.806 -42.790 -41.880 -41.067 -40.346 -39.710 -39.155 -38.675 -38.266 -37.925 -37.648 -37.433 -37.279 -37.184 -37.147 -37.166 -37.242 -37.374 -37.564 -37.810 -38.114 -38.478 -38.903 -39.391 -39.946 -40.569 -41.267 -42.043 -42.904 -43.855 -44.907 -46.071 -47.362 -48.798 -50.402 -52.204 -54.248 -56.591 -59.321 -62.576 -66.594 -71.865 -79.731 -90.188 -82.321 -77.033 -72.453 -68.305 -64.749 -61.754 -59.222 -57.063 -55.206 -53.596 -52.192 -50.964 -49.887 -48.943 -48.118 -47.398 -46.775 -46.241 -45.789 -45.415 -45.114 -44.883 -44.718 -44.619 -44.583 -44.609 -44.696 -44.845 -45.056 -45.328 -45.664 -46.065 -46.533 -47.072 -47.683 -48.371 -49.141 -50.002 -50.960 -52.028 -53.100 -54.172 -55.244 -56.316 -57.388 0.03 -19.5079 -19.1207 -18.7374 -18.358 -17.9824 -17.6108 -17.243 -16.8791 -16.5191 -16.1629 -15.8107 -15.4623 -15.1178 -14.7772 -14.4404 -14.1076 -13.7786 -13.4535 -13.1323 -12.815 -12.5015 -12.192 -11.8863 -11.5845 -11.2865 -10.9925 -10.7023 -10.4161 -10.1337 -9.8551 -9.5805 -9.3097 -9.0429 -8.7799 -8.5208 -8.2655 -8.0142 -7.7667 -7.5231 -7.2834 -7.0476 -6.8156 -6.5875 -6.3634 -6.1431 -5.9266 -5.7141 -5.5054 -5.3006 -5.0997 -4.9027 -4.7096 -4.5203 -4.3349 -4.1535 -3.9758 -3.8021 -3.6323 -3.4663 -3.3042 -3.146 -2.9916 -2.8412 -2.6946 -2.5519 -2.4131 -2.2782 -2.1472 -2.02 -1.8967 -1.7773 -1.6618 -1.5502 -1.4424 -1.3385 -1.2386 -1.1424 -1.0502 -0.96185 -0.87738 -0.79679 -0.72008 -0.64725 -0.57831 -0.51324 -0.45206 -0.39475 -0.34133 -0.29179 -0.24613 -0.20435 -0.16645 -0.13243 -0.10229 -0.076036 -0.053661 -0.035167 -0.020554 -0.0098214 -0.0029702 0 -0.00091078 -0.0057026 -0.014375 -0.026929 -0.043364 -0.06368 -0.087876 -0.11595 -0.14791 -0.18375 -0.22347 -0.26707 -0.31456 -0.36592 -0.42117 -0.48029 -0.5433 -0.61019 -0.68095 -0.7556 -0.83413 -0.91655 -1.0028 -1.093 -1.1871 -1.285 -1.3868 -1.4925 -1.6021 -1.7156 -1.8329 -1.9541 -2.0792 -2.2082 -2.3411 -2.4778 -2.6184 -2.7629 -2.9113 -3.0636 -3.2198 -3.3798 -3.5437 -3.7115 -3.8832 -4.0587 -4.2382 -4.4215 -4.6087 -4.7997 -4.9947 -5.1936 -5.3963 -5.6029 -5.8134 -6.0277 -6.246 -6.4681 -6.6941 -6.924 -7.1578 -7.3954 -7.6369 -7.8824 -8.1317 -8.3848 -8.6419 -8.9028 -9.1676 -9.4363 -9.7089 -9.9854 -10.2657 -10.5499 -10.838 -11.13 -11.4259 -11.7256 -12.0293 -12.3368 -12.6482 -12.9634 -13.2826 -13.6056 -13.9325 -14.2633 -14.598 -14.9366 -15.279 -15.6253 -15.9755 -16.3296 -16.6876 -17.0494 -17.4151 -17.7847 -18.1582 -18.5356 -18.9168 -19.302 1.0 44956.39 EW3 VH 29.77 34.27 0.050 -2.163e+10 -3.959e+09 -2.295e+10 -4.384e+09 -2.413e+10 -4.788e+09 -2.517e+10 -5.166e+09 -2.605e+10 -5.512e+09 -2.675e+10 -5.821e+09 -2.727e+10 -6.087e+09 -2.760e+10 -6.308e+09 -2.773e+10 -6.479e+09 -2.767e+10 -6.599e+09 -2.743e+10 -6.666e+09 -2.699e+10 -6.680e+09 -2.638e+10 -6.641e+09 -2.560e+10 -6.550e+09 -2.468e+10 -6.408e+09 -2.361e+10 -6.217e+09 -2.242e+10 -5.982e+09 -2.113e+10 -5.707e+09 -1.976e+10 -5.395e+09 -1.833e+10 -5.052e+09 -1.685e+10 -4.682e+09 -1.535e+10 -4.292e+09 -1.384e+10 -3.887e+09 -1.235e+10 -3.473e+09 -1.088e+10 -3.057e+09 -9.463e+09 -2.645e+09 -8.106e+09 -2.242e+09 -6.826e+09 -1.856e+09 -5.634e+09 -1.492e+09 -4.542e+09 -1.156e+09 -3.558e+09 -8.524e+08 -2.691e+09 -5.867e+08 -1.945e+09 -3.631e+08 -1.325e+09 -1.850e+08 -8.312e+08 -5.427e+07 -4.641e+08 2.898e+07 -2.199e+08 7.091e+07 -8.173e+07 9.634e+07 6.669e+06 1.514e+08 1.231e+08 2.670e+08 3.105e+08 4.414e+08 5.718e+08 6.652e+08 8.965e+08 9.307e+08 1.271e+09 1.231e+09 1.680e+09 1.560e+09 2.108e+09 1.909e+09 2.538e+09 2.271e+09 2.954e+09 2.636e+09 3.341e+09 2.996e+09 3.686e+09 3.343e+09 3.974e+09 3.668e+09 4.197e+09 3.963e+09 4.344e+09 4.222e+09 4.412e+09 4.438e+09 4.396e+09 4.606e+09 4.296e+09 4.722e+09 4.116e+09 4.785e+09 3.860e+09 4.794e+09 3.539e+09 4.750e+09 3.160e+09 4.657e+09 2.739e+09 4.521e+09 2.287e+09 4.348e+09 1.818e+09 4.148e+09 1.345e+09 3.932e+09 8.772e+08 3.713e+09 4.188e+08 3.506e+09 -3.146e+07 3.327e+09 -4.854e+08 3.188e+09 -9.653e+08 3.101e+09 -1.500e+09 3.069e+09 -2.123e+09 3.086e+09 -2.869e+09 3.143e+09 -3.764e+09 3.224e+09 -4.831e+09 3.312e+09 -6.088e+09 3.393e+09 -7.540e+09 3.451e+09 -9.191e+09 3.476e+09 -1.104e+10 3.458e+09 -1.309e+10 3.391e+09 -1.532e+10 3.268e+09 -1.772e+10 3.086e+09 -2.028e+10 2.843e+09 -2.297e+10 2.539e+09 -2.579e+10 2.173e+09 -2.871e+10 1.749e+09 -3.169e+10 1.268e+09 -3.473e+10 7.348e+08 -3.779e+10 1.546e+08 -4.084e+10 -4.665e+08 -4.386e+10 -1.122e+09 -4.682e+10 -1.804e+09 -4.969e+10 -2.504e+09 -5.244e+10 -3.212e+09 -5.505e+10 -3.919e+09 -5.749e+10 -4.614e+09 -5.974e+10 -5.288e+09 -6.177e+10 -5.930e+09 -6.357e+10 -6.528e+09 -6.511e+10 -7.075e+09 -6.638e+10 -7.559e+09 -6.737e+10 -7.974e+09 -6.807e+10 -8.317e+09 -6.848e+10 -8.577e+09 -6.859e+10 -8.748e+09 -6.839e+10 -8.826e+09 -6.790e+10 -8.810e+09 -6.711e+10 -8.699e+09 -6.604e+10 -8.496e+09 -6.469e+10 -8.203e+09 -6.310e+10 -7.827e+09 -6.127e+10 -7.373e+09 -5.923e+10 -6.851e+09 -5.701e+10 -6.270e+09 -5.461e+10 -5.640e+09 -5.208e+10 -4.973e+09 -4.945e+10 -4.280e+09 -4.672e+10 -3.573e+09 -4.395e+10 -2.864e+09 -4.115e+10 -2.164e+09 -3.834e+10 -1.482e+09 -3.556e+10 -8.301e+08 -3.282e+10 -2.152e+08 -3.015e+10 3.558e+08 -2.757e+10 8.772e+08 -2.509e+10 1.344e+09 -2.272e+10 1.755e+09 -2.049e+10 2.109e+09 -1.839e+10 2.404e+09 -1.644e+10 2.644e+09 -1.463e+10 2.830e+09 -1.297e+10 2.966e+09 -1.146e+10 3.057e+09 -1.010e+10 3.106e+09 -8.870e+09 3.119e+09 -7.776e+09 3.101e+09 -6.806e+09 3.057e+09 -5.952e+09 2.992e+09 -5.205e+09 2.908e+09 -4.554e+09 2.810e+09 -3.991e+09 2.701e+09 -3.505e+09 2.583e+09 -3.088e+09 2.456e+09 -2.732e+09 2.323e+09 -2.429e+09 2.182e+09 -2.172e+09 2.036e+09 -1.956e+09 1.884e+09 -1.775e+09 1.726e+09 -1.625e+09 1.565e+09 -1.502e+09 1.401e+09 -1.404e+09 1.237e+09 -1.326e+09 1.073e+09 -1.270e+09 9.125e+08 -1.232e+09 7.563e+08 -1.216e+09 6.049e+08 -1.222e+09 4.575e+08 -1.252e+09 3.107e+08 -1.312e+09 1.588e+08 -1.402e+09 -5.510e+06 -1.525e+09 -1.916e+08 -1.682e+09 -4.090e+08 -1.872e+09 -6.665e+08 -2.091e+09 -9.718e+08 -2.337e+09 -1.331e+09 -2.605e+09 -1.748e+09 -2.890e+09 -2.224e+09 -3.185e+09 -2.762e+09 -3.484e+09 -3.357e+09 -3.781e+09 -4.009e+09 -4.067e+09 -4.711e+09 -4.337e+09 -5.458e+09 -4.582e+09 -6.243e+09 -4.796e+09 -7.056e+09 -4.973e+09 -7.889e+09 -5.106e+09 -8.732e+09 -5.190e+09 -9.574e+09 -5.222e+09 -1.040e+10 -5.198e+09 -1.121e+10 -5.115e+09 -1.199e+10 -4.973e+09 -1.273e+10 -4.771e+09 -1.342e+10 -4.510e+09 -1.405e+10 -4.193e+09 -1.462e+10 -3.821e+09 -1.511e+10 -3.399e+09 -1.554e+10 -2.930e+09 -1.589e+10 -2.418e+09 -1.616e+10 -1.870e+09 -1.636e+10 -1.291e+09 -1.648e+10 -6.855e+08 -1.653e+10 -6.024e+07 -1.652e+10 5.788e+08 -1.644e+10 1.227e+09 -1.630e+10 1.878e+09 -1.610e+10 2.528e+09 -1.586e+10 3.170e+09 -1.558e+10 3.802e+09 -1.525e+10 4.416e+09 -1.489e+10 5.009e+09 -1.450e+10 5.576e+09 -1.409e+10 6.111e+09 -1.365e+10 6.608e+09 -1.318e+10 7.061e+09 -1.270e+10 7.463e+09 -1.219e+10 7.806e+09 -1.166e+10 8.082e+09 -1.112e+10 8.282e+09 -1.055e+10 8.400e+09 -9.969e+09 8.427e+09 -9.368e+09 8.358e+09 -8.755e+09 8.188e+09 -8.130e+09 7.915e+09 -7.497e+09 7.540e+09 -6.862e+09 7.066e+09 -6.229e+09 6.503e+09 -5.603e+09 5.861e+09 -4.991e+09 5.157e+09 -4.398e+09 4.411e+09 -3.831e+09 3.648e+09 -3.295e+09 2.893e+09 -2.795e+09 2.177e+09 -2.338e+09 1.526e+09 -1.932e+09 9.643e+08 -1.585e+09 5.037e+08 -1.311e+09 1.311e+08 -1.132e+09 -2.054e+08 -1.066e+09 -5.895e+08 -1.117e+09 -1.104e+09 -1.266e+09 -1.802e+09 -1.491e+09 -2.699e+09 -1.776e+09 -3.787e+09 -2.115e+09 -5.041e+09 -2.509e+09 -6.420e+09 -2.963e+09 -7.870e+09 -3.481e+09 -9.330e+09 -4.067e+09 -1.073e+10 -4.723e+09 -1.199e+10 -5.447e+09 -1.303e+10 -6.232e+09 -1.379e+10 -7.070e+09 -1.420e+10 -7.944e+09 -1.420e+10 -8.841e+09 -1.377e+10 -9.742e+09 -1.291e+10 -1.064e+10 -1.164e+10 -1.153e+10 -9.996e+09 -1.245e+10 -8.031e+09 -1.347e+10 -5.750e+09 -1.476e+10 -3.052e+09 -1.655e+10 3.558e+08 -1.917e+10 5.025e+09 -2.297e+10 1.176e+10 -2.831e+10 2.162e+10 -3.550e+10 3.584e+10 -4.487e+10 5.588e+10 -5.669e+10 8.337e+10 -7.129e+10 1.203e+11 -8.905e+10 1.687e+11 -1.103e+11 2.310e+11 -1.356e+11 3.102e+11 -1.653e+11 4.091e+11 -1.999e+11 5.314e+11 -2.401e+11 6.809e+11 -2.865e+11 8.620e+11 -3.399e+11 1.079e+12 -4.009e+11 1.338e+12 -4.705e+11 1.644e+12 -5.495e+11 2.002e+12 -6.390e+11 2.419e+12 -7.402e+11 2.903e+12 -8.542e+11 3.459e+12 -9.824e+11 3.876e+12 -1.066e+12 4.566e+12 -1.219e+12 5.349e+12 -1.391e+12 6.235e+12 -1.585e+12 7.229e+12 -1.800e+12 8.343e+12 -2.042e+12 9.583e+12 -2.311e+12 1.097e+13 -2.610e+12 1.249e+13 -2.943e+12 1.417e+13 -3.315e+12 1.602e+13 -3.727e+12 1.804e+13 -4.183e+12 2.024e+13 -4.690e+12 2.263e+13 -5.250e+12 2.524e+13 -5.868e+12 2.803e+13 -6.549e+12 3.105e+13 -7.300e+12 3.430e+13 -8.123e+12 3.777e+13 -9.028e+12 4.148e+13 -1.002e+13 4.542e+13 -1.109e+13 4.962e+13 -1.228e+13 5.406e+13 -1.355e+13 5.876e+13 -1.495e+13 6.371e+13 -1.646e+13 6.891e+13 -1.808e+13 7.436e+13 -1.984e+13 8.007e+13 -2.174e+13 8.605e+13 -2.377e+13 9.226e+13 -2.595e+13 9.873e+13 -2.830e+13 1.058e+14 -3.040e+13 1.132e+14 -3.284e+13 1.204e+14 -3.563e+13 1.279e+14 -3.860e+13 1.356e+14 -4.175e+13 1.434e+14 -4.511e+13 1.516e+14 -4.865e+13 1.598e+14 -5.239e+13 1.682e+14 -5.633e+13 1.767e+14 -6.048e+13 1.855e+14 -6.486e+13 1.943e+14 -6.946e+13 2.033e+14 -7.427e+13 2.123e+14 -7.931e+13 2.213e+14 -8.459e+13 2.304e+14 -9.011e+13 2.396e+14 -9.585e+13 2.487e+14 -1.019e+14 2.579e+14 -1.081e+14 2.669e+14 -1.145e+14 2.759e+14 -1.213e+14 2.848e+14 -1.281e+14 2.936e+14 -1.354e+14 3.022e+14 -1.427e+14 3.107e+14 -1.504e+14 3.189e+14 -1.581e+14 3.270e+14 -1.662e+14 3.348e+14 -1.744e+14 3.424e+14 -1.829e+14 3.496e+14 -1.914e+14 3.567e+14 -2.002e+14 3.633e+14 -2.090e+14 3.696e+14 -2.180e+14 3.756e+14 -2.271e+14 3.812e+14 -2.362e+14 3.863e+14 -2.455e+14 3.911e+14 -2.547e+14 3.954e+14 -2.640e+14 3.994e+14 -2.733e+14 4.028e+14 -2.825e+14 4.059e+14 -2.918e+14 4.086e+14 -3.009e+14 4.108e+14 -3.100e+14 4.126e+14 -3.189e+14 4.139e+14 -3.277e+14 4.147e+14 -3.363e+14 4.151e+14 -3.447e+14 4.149e+14 -3.529e+14 4.143e+14 -3.607e+14 4.133e+14 -3.684e+14 4.118e+14 -3.757e+14 4.099e+14 -3.828e+14 4.076e+14 -3.895e+14 4.049e+14 -3.958e+14 4.017e+14 -4.017e+14 3.981e+14 -4.072e+14 3.942e+14 -4.124e+14 3.899e+14 -4.171e+14 3.852e+14 -4.215e+14 3.802e+14 -4.253e+14 3.748e+14 -4.287e+14 3.693e+14 -4.315e+14 3.633e+14 -4.340e+14 3.571e+14 -4.359e+14 3.507e+14 -4.374e+14 3.440e+14 -4.383e+14 3.370e+14 -4.388e+14 3.299e+14 -4.387e+14 3.225e+14 -4.381e+14 3.150e+14 -4.370e+14 3.074e+14 -4.354e+14 2.996e+14 -4.331e+14 2.917e+14 -4.305e+14 2.836e+14 -4.272e+14 2.756e+14 -4.235e+14 2.674e+14 -4.193e+14 2.592e+14 -4.145e+14 2.509e+14 -4.093e+14 2.427e+14 -4.036e+14 2.345e+14 -3.973e+14 2.263e+14 -3.907e+14 2.182e+14 -3.836e+14 2.100e+14 -3.760e+14 2.021e+14 -3.682e+14 1.942e+14 -3.599e+14 1.864e+14 -3.512e+14 1.787e+14 -3.422e+14 1.711e+14 -3.329e+14 1.636e+14 -3.233e+14 1.562e+14 -3.135e+14 1.491e+14 -3.035e+14 1.421e+14 -2.933e+14 1.353e+14 -2.830e+14 1.286e+14 -2.725e+14 1.221e+14 -2.619e+14 1.157e+14 -2.513e+14 1.097e+14 -2.407e+14 1.038e+14 -2.302e+14 9.809e+13 -2.196e+14 9.258e+13 -2.092e+14 8.729e+13 -1.988e+14 8.220e+13 -1.887e+14 7.732e+13 -1.786e+14 7.263e+13 -1.688e+14 6.815e+13 -1.592e+14 6.387e+13 -1.498e+14 5.979e+13 -1.407e+14 5.589e+13 -1.318e+14 5.219e+13 -1.233e+14 4.867e+13 -1.150e+14 4.532e+13 -1.070e+14 4.216e+13 -9.941e+13 3.916e+13 -9.209e+13 3.633e+13 -8.511e+13 3.366e+13 -7.846e+13 3.114e+13 -7.214e+13 2.876e+13 -6.615e+13 2.653e+13 -6.050e+13 2.444e+13 -5.516e+13 2.247e+13 -5.015e+13 2.063e+13 -4.547e+13 1.890e+13 -4.108e+13 1.728e+13 -3.701e+13 1.578e+13 -3.323e+13 1.438e+13 -2.972e+13 1.308e+13 -2.648e+13 1.188e+13 -2.352e+13 1.076e+13 -2.080e+13 9.732e+12 -1.831e+13 8.782e+12 -1.606e+13 7.907e+12 -1.402e+13 7.104e+12 -1.218e+13 6.367e+12 -1.053e+13 5.692e+12 -9.060e+12 4.783e+12 -7.302e+12 4.252e+12 -6.206e+12 3.770e+12 -5.242e+12 3.333e+12 -4.400e+12 2.939e+12 -3.668e+12 2.585e+12 -3.036e+12 2.266e+12 -2.493e+12 1.982e+12 -2.030e+12 1.729e+12 -1.639e+12 1.504e+12 -1.309e+12 1.305e+12 -1.035e+12 1.130e+12 -8.079e+11 9.768e+11 -6.217e+11 8.428e+11 -4.704e+11 7.262e+11 -3.483e+11 6.251e+11 -2.509e+11 5.377e+11 -1.739e+11 4.622e+11 -1.135e+11 3.972e+11 -6.686e+10 3.410e+11 -3.126e+10 2.925e+11 -4.545e+09 2.503e+11 1.498e+10 2.136e+11 2.870e+10 1.813e+11 3.772e+10 1.530e+11 4.292e+10 1.279e+11 4.501e+10 1.056e+11 4.458e+10 8.594e+10 4.215e+10 6.858e+10 3.818e+10 5.336e+10 3.311e+10 4.018e+10 2.736e+10 2.897e+10 2.133e+10 1.968e+10 1.543e+10 1.225e+10 1.004e+10 6.658e+09 5.531e+09 2.834e+09 2.238e+09 7.354e+08 4.545e+08 -1.225e+08 -5.276e+08 -1.296e+09 -2.597e+09 -3.817e+09 -6.862e+09 -7.661e+09 -1.345e+10 -1.271e+10 -2.244e+10 -1.881e+10 -3.385e+10 -2.582e+10 -4.762e+10 -3.360e+10 -6.367e+10 -4.197e+10 -8.187e+10 -5.077e+10 -1.020e+11 -5.985e+10 -1.238e+11 -6.906e+10 -1.471e+11 -7.822e+10 -1.716e+11 -8.721e+10 -1.969e+11 -9.588e+10 -2.226e+11 -1.041e+11 -2.486e+11 -1.118e+11 -2.743e+11 -1.188e+11 -2.995e+11 -1.250e+11 -3.238e+11 -1.305e+11 -3.470e+11 -1.350e+11 -3.686e+11 -1.387e+11 -3.886e+11 -1.413e+11 -4.066e+11 -1.431e+11 -4.225e+11 -1.438e+11 -4.361e+11 -1.436e+11 -4.473e+11 -1.425e+11 -4.560e+11 -1.405e+11 -4.621e+11 -1.377e+11 -4.658e+11 -1.341e+11 -4.669e+11 -1.299e+11 -4.657e+11 -1.250e+11 -4.621e+11 -1.195e+11 -4.562e+11 -1.136e+11 -4.483e+11 -1.073e+11 -4.385e+11 -1.008e+11 -4.269e+11 -9.400e+10 -4.138e+11 -8.711e+10 -3.993e+11 -8.017e+10 -3.836e+11 -7.326e+10 -3.669e+11 -6.644e+10 -3.495e+11 -5.977e+10 -3.315e+11 -5.331e+10 -3.131e+11 -4.710e+10 -2.945e+11 -4.119e+10 -2.758e+11 -3.561e+10 -2.572e+11 -3.038e+10 -2.389e+11 -2.553e+10 -2.210e+11 -2.106e+10 -2.035e+11 -1.699e+10 -1.866e+11 -1.330e+10 -1.703e+11 -1.001e+10 -1.549e+11 -7.101e+09 -1.402e+11 -4.554e+09 -1.263e+11 -2.361e+09 -1.133e+11 -4.987e+08 -1.011e+11 1.055e+09 -8.986e+10 2.321e+09 -7.949e+10 3.325e+09 -6.998e+10 4.093e+09 -6.130e+10 4.649e+09 -5.345e+10 5.019e+09 -4.637e+10 5.227e+09 -4.002e+10 5.295e+09 -3.438e+10 5.248e+09 -2.939e+10 5.106e+09 -2.498e+10 4.889e+09 -2.113e+10 4.614e+09 -1.777e+10 4.297e+09 -1.487e+10 3.951e+09 -1.236e+10 3.589e+09 -1.022e+10 3.219e+09 -8.395e+09 2.851e+09 -6.848e+09 2.490e+09 -5.542e+09 2.142e+09 -4.446e+09 1.813e+09 -3.531e+09 1.505e+09 -2.772e+09 1.221e+09 -2.144e+09 9.638e+08 -1.630e+09 7.350e+08 -1.213e+09 5.356e+08 -8.766e+08 3.670e+08 -6.102e+08 2.300e+08 -4.032e+08 1.247e+08 -2.470e+08 5.134e+07 -1.354e+08 8.146e+06 -6.337e+07 -1.484e+07 -2.620e+07 -4.385e+07 -6.857e+06 -1.000e+08 2.015e+07 -1.884e+08 6.923e+07 -3.076e+08 1.436e+08 -4.563e+08 2.442e+08 -6.331e+08 3.721e+08 -8.367e+08 5.287e+08 -1.065e+09 7.157e+08 -1.318e+09 9.358e+08 -1.594e+09 1.192e+09 -1.890e+09 1.488e+09 -2.207e+09 1.827e+09 -2.544e+09 2.214e+09 -2.898e+09 2.654e+09 -3.271e+09 3.153e+09 -3.662e+09 3.717e+09 -4.069e+09 4.352e+09 -4.494e+09 5.065e+09 -4.936e+09 5.865e+09 -5.396e+09 6.758e+09 -5.872e+09 7.753e+09 -6.367e+09 8.859e+09 -6.878e+09 1.008e+10 -7.406e+09 1.143e+10 -7.952e+09 1.292e+10 -8.515e+09 1.455e+10 -9.095e+09 1.632e+10 -9.693e+09 1.825e+10 -1.031e+10 2.034e+10 -1.094e+10 2.259e+10 -1.159e+10 2.500e+10 -1.225e+10 2.757e+10 -1.293e+10 3.029e+10 -1.363e+10 3.316e+10 -1.435e+10 3.617e+10 -1.507e+10 3.931e+10 -1.582e+10 4.256e+10 -1.658e+10 4.591e+10 -1.735e+10 4.933e+10 -1.814e+10 5.281e+10 -1.895e+10 5.631e+10 -1.977e+10 5.982e+10 -2.060e+10 6.329e+10 0.005 -53.768 -52.790 -51.812 -50.833 -49.855 -48.876 -47.902 -47.025 -46.236 -45.530 -44.901 -44.342 -43.853 -43.430 -43.071 -42.774 -42.537 -42.361 -42.244 -42.186 -42.187 -42.249 -42.372 -42.557 -42.807 -43.125 -43.513 -43.976 -44.518 -45.145 -45.866 -46.687 -47.622 -48.684 -49.891 -51.266 -52.839 -54.652 -56.764 -59.258 -62.266 -65.994 -70.785 -76.981 -81.927 -80.931 -78.089 -73.292 -68.233 -63.944 -60.409 -57.456 -54.944 -52.775 -50.879 -49.208 -47.725 -46.401 -45.217 -44.157 -43.205 -42.352 -41.590 -40.913 -40.315 -39.792 -39.340 -38.957 -38.639 -38.386 -38.196 -38.068 -38.003 -38.000 -38.060 -38.183 -38.372 -38.628 -38.953 -39.351 -39.824 -40.377 -41.015 -41.744 -42.571 -43.501 -44.541 -45.697 -46.972 -48.365 -49.862 -51.430 -53.003 -54.476 -55.711 -56.565 -56.913 -56.663 -55.781 -54.347 -52.553 -50.607 -48.662 -46.801 -45.063 -43.458 -41.985 -40.639 -39.409 -38.288 -37.268 -36.343 -35.507 -34.755 -34.083 -33.487 -32.964 -32.514 -32.133 -31.822 -31.579 -31.406 -31.303 -31.274 -31.319 -31.442 -31.646 -31.938 -32.324 -32.813 -33.417 -34.149 -35.031 -36.086 -37.352 -38.876 -40.730 -43.014 -45.845 -49.157 -51.816 -52.005 -50.342 -48.851 -48.232 -48.664 -50.495 -53.902 -52.913 -47.237 -41.837 -37.770 -34.511 -31.771 -29.393 -27.284 -25.386 -23.659 -22.074 -20.610 -19.250 -17.982 -16.796 -15.683 -14.635 -13.647 -12.714 -11.832 -10.997 -10.207 -9.458 -8.748 -8.075 -7.437 -6.832 -6.260 -5.718 -5.206 -4.722 -4.265 -3.835 -3.431 -3.052 -2.698 -2.367 -2.059 -1.774 -1.512 -1.272 -1.053 -0.855 -0.679 -0.523 -0.388 -0.273 -0.179 -0.104 -0.049 -0.015 0.000 -0.005 -0.027 -0.070 -0.132 -0.214 -0.316 -0.438 -0.581 -0.744 -0.928 -1.133 -1.359 -1.607 -1.877 -2.169 -2.484 -2.822 -3.184 -3.570 -3.981 -4.418 -4.882 -5.373 -5.892 -6.441 -7.020 -7.631 -8.276 -8.956 -9.672 -10.428 -11.225 -12.066 -12.954 -13.892 -14.886 -15.939 -17.057 -18.248 -19.519 -20.882 -22.349 -23.936 -25.663 -27.556 -29.652 -31.999 -34.656 -37.690 -41.070 -44.302 -46.126 -45.932 -44.959 -44.232 -43.963 -44.113 -44.573 -45.140 -45.469 -45.174 -44.149 -42.660 -41.052 -39.532 -38.177 -37.000 -35.993 -35.140 -34.423 -33.830 -33.348 -32.968 -32.682 -32.483 -32.365 -32.326 -32.361 -32.469 -32.648 -32.898 -33.216 -33.605 -34.063 -34.593 -35.197 -35.877 -36.637 -37.480 -38.412 -39.438 -40.566 -41.803 -43.157 -44.639 -46.258 -48.022 -49.934 -51.982 -54.125 -56.264 -58.212 -59.679 -60.365 -60.132 -59.105 -57.574 -55.818 -54.034 -52.326 -50.745 -49.307 -48.013 -46.857 -45.831 -44.924 -44.129 -43.437 -42.843 -42.339 -41.921 -41.584 -41.324 -41.139 -41.027 -40.987 -41.017 -41.117 -41.288 -41.530 -41.844 -42.233 -42.700 -43.246 -43.878 -44.599 -45.416 -46.336 -47.367 -48.517 -49.793 -51.200 -52.733 -54.371 -56.052 -57.659 -59.028 -60.027 -60.673 -61.147 -61.697 -62.572 -64.058 -66.650 -71.704 -79.362 -69.237 -63.138 -59.222 -56.309 -53.988 -52.067 -50.438 -49.035 -47.814 -46.745 -45.806 -44.981 -44.256 -43.623 -43.072 -42.598 -42.195 -41.859 -41.587 -41.376 -41.223 -41.128 -41.088 -41.103 -41.172 -41.295 -41.471 -41.702 -41.988 -42.329 -42.728 -43.186 -43.706 -44.290 -44.942 -45.664 -46.462 -47.344 -48.316 -49.389 -50.466 -51.543 -52.620 -53.697 -54.774 0.03 -18.8331 -18.4608 -18.0923 -17.7275 -17.3664 -17.009 -16.6554 -16.3054 -15.9592 -15.6167 -15.2779 -14.9428 -14.6115 -14.2838 -13.9599 -13.6396 -13.3231 -13.0104 -12.7013 -12.3959 -12.0943 -11.7963 -11.5021 -11.2116 -10.9248 -10.6418 -10.3624 -10.0868 -9.8149 -9.5467 -9.2822 -9.0214 -8.7643 -8.511 -8.2613 -8.0154 -7.7732 -7.5347 -7.3 -7.0689 -6.8416 -6.6179 -6.398 -6.1818 -5.9694 -5.7606 -5.5555 -5.3542 -5.1566 -4.9627 -4.7725 -4.586 -4.4033 -4.2242 -4.0489 -3.8773 -3.7094 -3.5452 -3.3847 -3.228 -3.075 -2.9256 -2.78 -2.6381 -2.5 -2.3655 -2.2348 -2.1077 -1.9844 -1.8648 -1.7489 -1.6368 -1.5283 -1.4236 -1.3225 -1.2252 -1.1316 -1.0418 -0.95561 -0.87316 -0.79443 -0.71942 -0.64812 -0.58053 -0.51666 -0.4565 -0.40006 -0.34734 -0.29833 -0.25303 -0.21145 -0.17359 -0.13944 -0.10901 -0.08229 -0.059287 -0.039999 -0.024427 -0.012569 -0.004427 0 0.00071175 -0.0022917 -0.0090104 -0.019444 -0.033594 -0.051458 -0.073038 -0.098332 -0.12734 -0.16007 -0.19651 -0.23666 -0.28053 -0.32812 -0.37942 -0.43444 -0.49317 -0.55562 -0.62178 -0.69166 -0.76525 -0.84256 -0.92358 -1.0083 -1.0968 -1.1889 -1.2848 -1.3844 -1.4877 -1.5948 -1.7055 -1.82 -1.9382 -2.06 -2.1856 -2.315 -2.448 -2.5848 -2.7252 -2.8694 -3.0173 -3.1689 -3.3242 -3.4833 -3.646 -3.8125 -3.9827 -4.1566 -4.3342 -4.5156 -4.7006 -4.8894 -5.0819 -5.2781 -5.478 -5.6816 -5.8889 -6.1 -6.3148 -6.5332 -6.7554 -6.9814 -7.211 -7.4443 -7.6814 -7.9222 -8.1667 -8.4149 -8.6668 -8.9224 -9.1818 -9.4449 -9.7117 -9.9822 -10.2564 -10.5343 -10.8159 -11.1013 -11.3904 -11.6832 -11.9797 -12.2799 -12.5838 -12.8915 -13.2029 -13.5179 -13.8367 -14.1592 -14.4855 -14.8154 -15.1491 -15.4865 -15.8275 -16.1723 -16.5209 -16.8731 -17.2291 -17.5887 -17.9521 -18.3192 1.0 44956.39 EW4 HH 34.22 37.82 0.050 5.152e+09 1.094e+10 5.158e+09 1.091e+10 5.112e+09 1.082e+10 5.015e+09 1.067e+10 4.870e+09 1.046e+10 4.679e+09 1.020e+10 4.446e+09 9.883e+09 4.175e+09 9.519e+09 3.871e+09 9.111e+09 3.541e+09 8.664e+09 3.190e+09 8.185e+09 2.826e+09 7.679e+09 2.454e+09 7.153e+09 2.081e+09 6.612e+09 1.714e+09 6.065e+09 1.360e+09 5.518e+09 1.023e+09 4.976e+09 7.082e+08 4.449e+09 4.201e+08 3.940e+09 1.609e+08 3.456e+09 -6.737e+07 3.002e+09 -2.647e+08 2.584e+09 -4.332e+08 2.202e+09 -5.758e+08 1.862e+09 -6.978e+08 1.562e+09 -8.061e+08 1.302e+09 -9.086e+08 1.077e+09 -1.013e+09 8.814e+08 -1.127e+09 7.053e+08 -1.254e+09 5.395e+08 -1.396e+09 3.741e+08 -1.552e+09 2.005e+08 -1.720e+09 1.260e+07 -1.892e+09 -1.936e+08 -2.065e+09 -4.203e+08 -2.232e+09 -6.677e+08 -2.387e+09 -9.344e+08 -2.524e+09 -1.219e+09 -2.638e+09 -1.518e+09 -2.724e+09 -1.829e+09 -2.781e+09 -2.148e+09 -2.803e+09 -2.473e+09 -2.790e+09 -2.801e+09 -2.741e+09 -3.130e+09 -2.654e+09 -3.457e+09 -2.530e+09 -3.782e+09 -2.368e+09 -4.104e+09 -2.170e+09 -4.423e+09 -1.936e+09 -4.741e+09 -1.666e+09 -5.058e+09 -1.359e+09 -5.377e+09 -1.016e+09 -5.700e+09 -6.334e+08 -6.029e+09 -2.103e+08 -6.366e+09 2.559e+08 -6.713e+09 7.689e+08 -7.071e+09 1.332e+09 -7.442e+09 1.948e+09 -7.823e+09 2.621e+09 -8.214e+09 3.354e+09 -8.614e+09 4.146e+09 -9.017e+09 4.999e+09 -9.422e+09 5.913e+09 -9.824e+09 6.884e+09 -1.022e+10 7.907e+09 -1.059e+10 8.980e+09 -1.095e+10 1.009e+10 -1.128e+10 1.123e+10 -1.157e+10 1.240e+10 -1.183e+10 1.357e+10 -1.205e+10 1.474e+10 -1.221e+10 1.590e+10 -1.232e+10 1.702e+10 -1.238e+10 1.811e+10 -1.238e+10 1.913e+10 -1.231e+10 2.008e+10 -1.218e+10 2.094e+10 -1.199e+10 2.171e+10 -1.174e+10 2.237e+10 -1.142e+10 2.291e+10 -1.105e+10 2.332e+10 -1.062e+10 2.359e+10 -1.014e+10 2.373e+10 -9.613e+09 2.372e+10 -9.044e+09 2.357e+10 -8.440e+09 2.328e+10 -7.809e+09 2.284e+10 -7.155e+09 2.228e+10 -6.487e+09 2.158e+10 -5.812e+09 2.077e+10 -5.137e+09 1.985e+10 -4.471e+09 1.883e+10 -3.819e+09 1.774e+10 -3.188e+09 1.658e+10 -2.585e+09 1.537e+10 -2.016e+09 1.413e+10 -1.485e+09 1.287e+10 -9.967e+08 1.161e+10 -5.554e+08 1.037e+10 -1.628e+08 9.160e+09 1.788e+08 7.996e+09 4.690e+08 6.891e+09 7.089e+08 5.857e+09 8.990e+08 4.903e+09 1.042e+09 4.037e+09 1.141e+09 3.264e+09 1.201e+09 2.587e+09 1.229e+09 2.007e+09 1.234e+09 1.520e+09 1.223e+09 1.118e+09 1.210e+09 7.878e+08 1.205e+09 5.136e+08 1.218e+09 2.751e+08 1.256e+09 5.229e+07 1.322e+09 -1.706e+08 1.412e+09 -4.038e+08 1.519e+09 -6.518e+08 1.636e+09 -9.136e+08 1.754e+09 -1.185e+09 1.867e+09 -1.459e+09 1.966e+09 -1.728e+09 2.049e+09 -1.984e+09 2.109e+09 -2.219e+09 2.145e+09 -2.426e+09 2.155e+09 -2.599e+09 2.137e+09 -2.733e+09 2.093e+09 -2.825e+09 2.023e+09 -2.871e+09 1.928e+09 -2.870e+09 1.812e+09 -2.825e+09 1.677e+09 -2.736e+09 1.526e+09 -2.606e+09 1.364e+09 -2.440e+09 1.195e+09 -2.244e+09 1.023e+09 -2.024e+09 8.521e+08 -1.786e+09 6.867e+08 -1.538e+09 5.309e+08 -1.288e+09 3.882e+08 -1.043e+09 2.620e+08 -8.117e+08 1.549e+08 -6.008e+08 6.893e+07 -4.170e+08 5.069e+06 -2.664e+08 -3.713e+07 -1.530e+08 -6.113e+07 -7.672e+07 -7.644e+07 -2.469e+07 -1.001e+08 2.999e+07 -1.477e+08 1.128e+08 -2.227e+08 2.359e+08 -3.208e+08 4.020e+08 -4.375e+08 6.100e+08 -5.685e+08 8.565e+08 -7.096e+08 1.137e+09 -8.570e+08 1.446e+09 -1.007e+09 1.778e+09 -1.155e+09 2.124e+09 -1.297e+09 2.479e+09 -1.431e+09 2.833e+09 -1.553e+09 3.181e+09 -1.659e+09 3.514e+09 -1.748e+09 3.825e+09 -1.817e+09 4.108e+09 -1.865e+09 4.357e+09 -1.890e+09 4.566e+09 -1.892e+09 4.732e+09 -1.872e+09 4.852e+09 -1.829e+09 4.923e+09 -1.765e+09 4.944e+09 -1.681e+09 4.917e+09 -1.580e+09 4.841e+09 -1.464e+09 4.720e+09 -1.337e+09 4.556e+09 -1.199e+09 4.354e+09 -1.056e+09 4.119e+09 -9.103e+08 3.855e+09 -7.646e+08 3.570e+09 -6.225e+08 3.268e+09 -4.865e+08 2.956e+09 -3.593e+08 2.641e+09 -2.431e+08 2.328e+09 -1.396e+08 2.022e+09 -5.012e+07 1.728e+09 2.437e+07 1.452e+09 8.379e+07 1.196e+09 1.284e+08 9.642e+08 1.588e+08 7.577e+08 1.762e+08 5.780e+08 1.821e+08 4.257e+08 1.784e+08 3.002e+08 1.673e+08 2.002e+08 1.513e+08 1.237e+08 1.331e+08 6.713e+07 1.153e+08 2.604e+07 1.005e+08 -5.404e+06 9.020e+07 -3.339e+07 8.404e+07 -6.273e+07 7.989e+07 -9.587e+07 7.470e+07 -1.332e+08 6.567e+07 -1.739e+08 5.066e+07 -2.168e+08 2.814e+07 -2.607e+08 -3.079e+06 -3.044e+08 -4.402e+07 -3.473e+08 -9.570e+07 -3.886e+08 -1.594e+08 -4.276e+08 -2.367e+08 -4.638e+08 -3.293e+08 -4.962e+08 -4.393e+08 -5.237e+08 -5.691e+08 -5.448e+08 -7.207e+08 -5.577e+08 -8.965e+08 -5.603e+08 -1.099e+09 -5.505e+08 -1.328e+09 -5.259e+08 -1.586e+09 -4.842e+08 -1.872e+09 -4.234e+08 -2.187e+09 -3.418e+08 -2.528e+09 -2.380e+08 -2.892e+09 -1.116e+08 -3.277e+09 3.779e+07 -3.678e+09 2.093e+08 -4.089e+09 4.016e+08 -4.506e+09 6.129e+08 -4.920e+09 8.401e+08 -5.325e+09 1.079e+09 -5.712e+09 1.326e+09 -6.074e+09 1.576e+09 -6.401e+09 1.824e+09 -6.685e+09 2.063e+09 -6.920e+09 2.289e+09 -7.097e+09 2.495e+09 -7.211e+09 2.675e+09 -7.257e+09 2.826e+09 -7.230e+09 2.942e+09 -7.130e+09 3.020e+09 -6.956e+09 3.057e+09 -6.708e+09 3.051e+09 -6.392e+09 3.002e+09 -6.011e+09 2.911e+09 -5.574e+09 2.779e+09 -5.090e+09 2.611e+09 -4.569e+09 2.410e+09 -4.023e+09 2.183e+09 -3.466e+09 1.936e+09 -2.910e+09 1.676e+09 -2.371e+09 1.412e+09 -1.862e+09 1.151e+09 -1.395e+09 9.019e+08 -9.837e+08 6.731e+08 -6.370e+08 4.722e+08 -3.623e+08 3.071e+08 -1.637e+08 1.861e+08 -3.726e+07 1.156e+08 4.064e+07 8.352e+07 1.220e+08 5.546e+07 2.522e+08 4.444e+06 4.432e+08 -7.845e+07 6.865e+08 -1.923e+08 9.674e+08 -3.321e+08 1.269e+09 -4.904e+08 1.574e+09 -6.581e+08 1.862e+09 -8.257e+08 2.115e+09 -9.827e+08 2.315e+09 -1.119e+09 2.447e+09 -1.226e+09 2.498e+09 -1.293e+09 2.459e+09 -1.316e+09 2.329e+09 -1.290e+09 2.110e+09 -1.214e+09 1.812e+09 -1.091e+09 1.456e+09 -9.274e+08 1.067e+09 -7.364e+08 6.826e+08 -5.386e+08 3.440e+08 -3.681e+08 8.772e+07 -2.752e+08 -1.079e+08 -2.629e+08 -4.017e+08 -2.454e+08 -9.900e+08 -1.335e+08 -2.010e+09 1.364e+08 -3.571e+09 6.180e+08 -5.784e+09 1.362e+09 -8.756e+09 2.418e+09 -1.260e+10 3.839e+09 -1.742e+10 5.673e+09 -2.333e+10 7.966e+09 -3.041e+10 1.077e+10 -3.878e+10 1.410e+10 -4.847e+10 1.802e+10 -5.956e+10 2.254e+10 -7.209e+10 2.767e+10 -8.606e+10 3.342e+10 -1.015e+11 3.980e+10 -1.182e+11 4.676e+10 -1.363e+11 5.430e+10 -1.556e+11 6.237e+10 -1.760e+11 7.091e+10 -1.973e+11 7.984e+10 -2.192e+11 8.910e+10 -2.416e+11 9.857e+10 -2.642e+11 1.082e+11 -2.867e+11 1.178e+11 -3.089e+11 1.338e+11 -3.301e+11 1.405e+11 -3.515e+11 1.497e+11 -3.705e+11 1.583e+11 -3.878e+11 1.662e+11 -4.030e+11 1.734e+11 -4.159e+11 1.795e+11 -4.261e+11 1.846e+11 -4.333e+11 1.886e+11 -4.375e+11 1.912e+11 -4.383e+11 1.925e+11 -4.357e+11 1.924e+11 -4.296e+11 1.909e+11 -4.201e+11 1.879e+11 -4.072e+11 1.834e+11 -3.910e+11 1.776e+11 -3.719e+11 1.704e+11 -3.500e+11 1.620e+11 -3.257e+11 1.525e+11 -2.994e+11 1.420e+11 -2.716e+11 1.308e+11 -2.427e+11 1.189e+11 -2.133e+11 1.066e+11 -1.840e+11 9.412e+10 -1.553e+11 8.168e+10 -1.278e+11 6.949e+10 -1.020e+11 5.778e+10 -7.842e+10 4.678e+10 -5.749e+10 3.670e+10 -3.958e+10 2.774e+10 -2.493e+10 2.012e+10 -1.370e+10 1.408e+10 -5.753e+09 9.876e+09 -5.321e+08 7.623e+09 3.276e+09 6.807e+09 7.564e+09 6.390e+09 1.365e+10 5.584e+09 2.169e+10 4.090e+09 3.124e+10 1.898e+09 4.160e+10 -8.579e+08 5.196e+10 -3.977e+09 6.148e+10 -7.216e+09 6.934e+10 -1.031e+10 7.474e+10 -1.299e+10 7.701e+10 -1.502e+10 7.566e+10 -1.618e+10 7.049e+10 -1.630e+10 6.161e+10 -1.530e+10 4.960e+10 -1.321e+10 3.556e+10 -1.018e+10 2.124e+10 -6.651e+09 9.075e+09 -3.972e+09 1.127e+09 -4.062e+09 -6.594e+09 -5.932e+09 -2.633e+10 -6.264e+09 -6.824e+10 -3.219e+09 -1.408e+11 4.908e+09 -2.536e+11 2.003e+10 -4.179e+11 4.604e+10 -6.707e+11 8.349e+10 -9.898e+11 1.361e+11 -1.407e+12 2.071e+11 -1.943e+12 3.004e+11 -2.618e+12 4.198e+11 -3.455e+12 5.697e+11 -4.479e+12 7.550e+11 -5.717e+12 9.806e+11 -7.198e+12 1.252e+12 -8.953e+12 1.574e+12 -1.101e+13 1.954e+12 -1.342e+13 2.397e+12 -1.620e+13 2.909e+12 -1.939e+13 3.497e+12 -2.304e+13 4.168e+12 -2.719e+13 4.927e+12 -3.187e+13 5.780e+12 -3.712e+13 6.735e+12 -4.298e+13 7.797e+12 -4.950e+13 8.972e+12 -5.672e+13 1.026e+13 -6.467e+13 1.169e+13 -7.339e+13 1.324e+13 -8.295e+13 1.493e+13 -9.336e+13 1.676e+13 -1.047e+14 1.873e+13 -1.168e+14 2.085e+13 -1.300e+14 2.310e+13 -1.441e+14 2.550e+13 -1.592e+14 2.804e+13 -1.752e+14 3.072e+13 -1.923e+14 3.353e+13 -2.103e+14 3.648e+13 -2.294e+14 3.954e+13 -2.494e+14 4.273e+13 -2.704e+14 4.602e+13 -2.924e+14 4.942e+13 -3.153e+14 5.290e+13 -3.390e+14 5.646e+13 -3.637e+14 6.008e+13 -3.891e+14 6.375e+13 -4.152e+14 6.746e+13 -4.420e+14 7.119e+13 -4.694e+14 7.492e+13 -4.973e+14 7.864e+13 -5.255e+14 8.233e+13 -5.541e+14 8.598e+13 -5.829e+14 8.955e+13 -6.119e+14 9.305e+13 -6.410e+14 9.646e+13 -6.698e+14 9.973e+13 -6.986e+14 1.029e+14 -7.270e+14 1.059e+14 -7.549e+14 1.088e+14 -7.823e+14 1.114e+14 -8.090e+14 1.139e+14 -8.349e+14 1.162e+14 -8.599e+14 1.182e+14 -8.839e+14 1.201e+14 -9.066e+14 1.216e+14 -9.282e+14 1.230e+14 -9.485e+14 1.240e+14 -9.672e+14 1.247e+14 -9.845e+14 1.249e+14 -1.000e+15 1.249e+14 -1.013e+15 1.247e+14 -1.026e+15 1.242e+14 -1.037e+15 1.234e+14 -1.045e+15 1.223e+14 -1.052e+15 1.210e+14 -1.056e+15 1.195e+14 -1.059e+15 1.177e+14 -1.059e+15 1.157e+14 -1.058e+15 1.134e+14 -1.054e+15 1.109e+14 -1.048e+15 1.083e+14 -1.041e+15 1.054e+14 -1.032e+15 1.025e+14 -1.021e+15 9.931e+13 -1.009e+15 9.603e+13 -9.941e+14 9.263e+13 -9.780e+14 8.913e+13 -9.603e+14 8.556e+13 -9.410e+14 8.191e+13 -9.204e+14 7.822e+13 -8.985e+14 7.451e+13 -8.754e+14 7.078e+13 -8.512e+14 6.705e+13 -8.260e+14 6.336e+13 -8.000e+14 5.970e+13 -7.731e+14 5.609e+13 -7.456e+14 5.255e+13 -7.177e+14 4.908e+13 -6.893e+14 4.571e+13 -6.608e+14 4.244e+13 -6.320e+14 3.927e+13 -6.031e+14 3.623e+13 -5.743e+14 3.331e+13 -5.456e+14 3.052e+13 -5.172e+14 2.787e+13 -4.891e+14 2.536e+13 -4.615e+14 2.299e+13 -4.345e+14 2.077e+13 -4.081e+14 1.870e+13 -3.825e+14 1.676e+13 -3.576e+14 1.496e+13 -3.334e+14 1.329e+13 -3.101e+14 1.175e+13 -2.876e+14 1.032e+13 -2.661e+14 9.033e+12 -2.455e+14 7.855e+12 -2.258e+14 6.788e+12 -2.071e+14 5.826e+12 -1.894e+14 4.962e+12 -1.726e+14 4.191e+12 -1.569e+14 3.508e+12 -1.421e+14 2.906e+12 -1.283e+14 2.379e+12 -1.154e+14 1.920e+12 -1.035e+14 1.525e+12 -9.244e+13 1.186e+12 -8.225e+13 8.988e+11 -7.290e+13 6.581e+11 -6.434e+13 4.587e+11 -5.654e+13 2.959e+11 -4.946e+13 1.649e+11 -4.307e+13 6.193e+10 -3.732e+13 -1.704e+10 -3.217e+13 -7.564e+10 -2.758e+13 -1.170e+11 -2.351e+13 -1.442e+11 -1.992e+13 -1.598e+11 -1.678e+13 -1.661e+11 -1.403e+13 -1.653e+11 -1.164e+13 -1.591e+11 -9.592e+12 -1.490e+11 -7.835e+12 -1.363e+11 -6.344e+12 -1.222e+11 -5.087e+12 -1.074e+11 -4.036e+12 -9.272e+10 -3.165e+12 -7.861e+10 -2.451e+12 -6.544e+10 -1.872e+12 -5.345e+10 -1.408e+12 -4.283e+10 -1.041e+12 -3.366e+10 -7.538e+11 -2.589e+10 -5.339e+11 -1.948e+10 -3.683e+11 -1.429e+10 -2.462e+11 -1.057e+10 -1.645e+11 -7.308e+09 -1.013e+11 -4.872e+09 -5.894e+10 -3.110e+09 -3.182e+10 -1.879e+09 -1.551e+10 -1.052e+09 -6.496e+09 -5.241e+08 -2.128e+09 -2.165e+08 -4.300e+08 -9.453e+07 9.129e+06 -1.189e+08 1.529e+08 -1.418e+08 2.465e+08 -1.297e+08 1.907e+08 -1.023e+08 4.828e+07 -1.396e+08 -1.477e+08 -3.224e+08 -7.809e+08 -6.287e+08 -2.346e+09 -1.072e+09 -5.257e+09 -1.678e+09 -9.895e+09 -2.471e+09 -1.657e+10 -3.471e+09 -2.552e+10 -4.696e+09 -3.691e+10 -6.152e+09 -5.077e+10 -7.843e+09 -6.705e+10 -9.763e+09 -8.564e+10 -1.190e+10 -1.062e+11 -1.422e+10 -1.286e+11 -1.672e+10 -1.523e+11 -1.934e+10 -1.768e+11 -2.205e+10 -2.017e+11 -2.480e+10 -2.266e+11 -2.756e+10 -2.508e+11 -3.026e+10 -2.738e+11 -3.286e+10 -2.952e+11 -3.530e+10 -3.146e+11 -3.754e+10 -3.315e+11 -3.954e+10 -3.456e+11 -4.126e+10 -3.565e+11 -4.266e+10 -3.642e+11 -4.371e+10 -3.685e+11 -4.439e+10 -3.692e+11 -4.469e+10 -3.665e+11 -4.460e+10 -3.603e+11 -4.412e+10 -3.510e+11 -4.326e+10 -3.387e+11 -4.203e+10 -3.237e+11 -4.046e+10 -3.064e+11 -3.858e+10 -2.870e+11 -3.643e+10 -2.661e+11 -3.404e+10 -2.440e+11 -3.147e+10 -2.212e+11 -2.876e+10 -1.980e+11 -2.596e+10 -1.750e+11 -2.313e+10 -1.524e+11 -2.031e+10 -1.306e+11 -1.755e+10 -1.100e+11 -1.490e+10 -9.079e+10 -1.240e+10 -7.321e+10 -1.008e+10 -5.744e+10 -7.967e+09 -4.360e+10 -6.091e+09 -3.175e+10 -4.465e+09 -2.191e+10 -3.096e+09 -1.404e+10 -1.986e+09 -8.076e+09 -1.129e+09 -3.891e+09 -5.189e+08 -1.339e+09 -1.738e+08 -1.691e+08 -9.638e+07 3.961e+08 -8.766e+07 1.587e+09 5.730e+07 3.589e+09 3.212e+08 6.178e+09 6.745e+08 9.129e+09 1.088e+09 1.224e+10 1.532e+09 1.530e+10 1.979e+09 1.815e+10 2.409e+09 2.064e+10 2.797e+09 2.263e+10 3.125e+09 2.405e+10 3.378e+09 2.482e+10 3.547e+09 2.491e+10 3.624e+09 2.433e+10 3.605e+09 2.309e+10 3.494e+09 2.128e+10 3.298e+09 1.899e+10 3.024e+09 1.633e+10 2.684e+09 1.343e+10 2.294e+09 1.045e+10 1.870e+09 7.553e+09 1.430e+09 4.911e+09 9.954e+08 2.702e+09 5.939e+08 1.098e+09 2.973e+08 2.249e+08 2.876e+08 -3.553e+08 4.367e+08 -1.603e+09 5.569e+08 -4.019e+09 0.005 -54.679 -53.616 -52.554 -51.492 -50.430 -49.383 -48.446 -47.609 -46.864 -46.202 -45.621 -45.113 -44.677 -44.309 -44.008 -43.770 -43.596 -43.485 -43.436 -43.450 -43.527 -43.669 -43.877 -44.154 -44.503 -44.927 -45.432 -46.023 -46.707 -47.493 -48.393 -49.420 -50.594 -51.938 -53.487 -55.287 -57.408 -59.964 -63.156 -67.420 -74.057 -89.515 -79.250 -73.144 -70.219 -67.892 -65.422 -62.753 -60.088 -57.591 -55.323 -53.286 -51.462 -49.827 -48.359 -47.040 -45.852 -44.782 -43.818 -42.953 -42.177 -41.485 -40.872 -40.333 -39.865 -39.464 -39.130 -38.859 -38.652 -38.507 -38.424 -38.403 -38.444 -38.549 -38.720 -38.957 -39.264 -39.643 -40.098 -40.634 -41.255 -41.969 -42.780 -43.699 -44.732 -45.890 -47.182 -48.615 -50.193 -51.910 -53.747 -55.671 -57.659 -59.748 -62.113 -65.022 -67.432 -64.883 -60.107 -56.027 -52.737 -49.996 -47.653 -45.614 -43.817 -42.220 -40.790 -39.506 -38.349 -37.307 -36.368 -35.523 -34.767 -34.093 -33.498 -32.977 -32.528 -32.150 -31.841 -31.601 -31.430 -31.328 -31.296 -31.338 -31.455 -31.651 -31.932 -32.303 -32.771 -33.347 -34.042 -34.872 -35.857 -37.021 -38.400 -40.037 -41.987 -44.307 -47.004 -49.813 -51.831 -52.311 -52.071 -52.362 -54.194 -59.402 -58.295 -49.668 -43.789 -39.542 -36.159 -33.317 -30.849 -28.660 -26.691 -24.899 -23.254 -21.736 -20.325 -19.010 -17.779 -16.623 -15.536 -14.510 -13.542 -12.626 -11.759 -10.937 -10.158 -9.419 -8.718 -8.053 -7.422 -6.824 -6.257 -5.720 -5.212 -4.732 -4.279 -3.852 -3.450 -3.073 -2.719 -2.389 -2.082 -1.798 -1.536 -1.295 -1.075 -0.877 -0.699 -0.542 -0.405 -0.288 -0.191 -0.113 -0.056 -0.018 0.000 -0.001 -0.022 -0.062 -0.122 -0.201 -0.300 -0.419 -0.558 -0.718 -0.898 -1.098 -1.320 -1.564 -1.829 -2.116 -2.426 -2.758 -3.115 -3.495 -3.901 -4.332 -4.789 -5.274 -5.787 -6.329 -6.902 -7.507 -8.146 -8.820 -9.531 -10.281 -11.073 -11.910 -12.796 -13.733 -14.727 -15.783 -16.908 -18.110 -19.398 -20.785 -22.288 -23.928 -25.733 -27.747 -30.033 -32.695 -35.921 -40.115 -46.467 -64.777 -51.510 -45.770 -43.237 -41.965 -41.426 -41.403 -41.787 -42.493 -43.398 -44.244 -44.600 -44.104 -42.861 -41.300 -39.750 -38.349 -37.131 -36.092 -35.214 -34.481 -33.877 -33.389 -33.005 -32.718 -32.521 -32.406 -32.371 -32.412 -32.527 -32.713 -32.970 -33.297 -33.695 -34.165 -34.709 -35.329 -36.027 -36.810 -37.680 -38.646 -39.714 -40.896 -42.202 -43.649 -45.255 -47.045 -49.050 -51.308 -53.869 -56.791 -60.117 -63.781 -67.171 -68.649 -67.523 -65.121 -62.386 -59.688 -57.190 -54.949 -52.968 -51.227 -49.701 -48.364 -47.194 -46.173 -45.284 -44.515 -43.856 -43.297 -42.833 -42.456 -42.164 -41.951 -41.816 -41.757 -41.771 -41.859 -42.020 -42.255 -42.566 -42.954 -43.422 -43.973 -44.613 -45.346 -46.179 -47.119 -48.177 -49.361 -50.682 -52.146 -53.753 -55.483 -57.274 -59.001 -60.475 -61.549 -62.256 -62.826 -63.561 -64.765 -66.821 -70.217 -73.175 -68.780 -63.589 -59.764 -56.818 -54.437 -52.448 -50.750 -49.280 -47.994 -46.862 -45.862 -44.977 -44.193 -43.501 -42.892 -42.360 -41.898 -41.504 -41.173 -40.902 -40.688 -40.530 -40.426 -40.374 -40.374 -40.425 -40.527 -40.679 -40.882 -41.137 -41.443 -41.802 -42.216 -42.686 -43.213 -43.802 -44.453 -45.172 -45.963 -46.830 -47.779 -48.819 -49.871 -50.923 -51.975 -53.027 0.03 -18.2761 -17.9158 -17.559 -17.2059 -16.8563 -16.5103 -16.1679 -15.8291 -15.4939 -15.1622 -14.8342 -14.5097 -14.1888 -13.8715 -13.5578 -13.2477 -12.9412 -12.6383 -12.3389 -12.0431 -11.751 -11.4624 -11.1774 -10.8959 -10.6181 -10.3439 -10.0732 -9.8062 -9.5427 -9.2828 -9.0265 -8.7738 -8.5246 -8.2791 -8.0372 -7.7988 -7.564 -7.3328 -7.1052 -6.8812 -6.6608 -6.4439 -6.2307 -6.021 -5.8149 -5.6124 -5.4135 -5.2182 -5.0265 -4.8383 -4.6538 -4.4728 -4.2954 -4.1216 -3.9514 -3.7848 -3.6218 -3.4623 -3.3065 -3.1542 -3.0055 -2.8605 -2.7189 -2.581 -2.4467 -2.316 -2.1888 -2.0652 -1.9452 -1.8289 -1.716 -1.6068 -1.5012 -1.3992 -1.3007 -1.2058 -1.1145 -1.0268 -0.94274 -0.86222 -0.78529 -0.71194 -0.64219 -0.57602 -0.51343 -0.45444 -0.39903 -0.34721 -0.29898 -0.25433 -0.21327 -0.1758 -0.14192 -0.11162 -0.084915 -0.061794 -0.04226 -0.026314 -0.013955 -0.005184 0 0.0015965 -0.00039433 -0.0059726 -0.015138 -0.027891 -0.044232 -0.06416 -0.087675 -0.11478 -0.14547 -0.17975 -0.21761 -0.25906 -0.3041 -0.35273 -0.40495 -0.46075 -0.52014 -0.58311 -0.64968 -0.71983 -0.79357 -0.8709 -0.95181 -1.0363 -1.1244 -1.2161 -1.3113 -1.4102 -1.5126 -1.6187 -1.7283 -1.8415 -1.9583 -2.0786 -2.2026 -2.3301 -2.4613 -2.596 -2.7343 -2.8762 -3.0217 -3.1708 -3.3234 -3.4797 -3.6395 -3.803 -3.97 -4.1406 -4.3148 -4.4925 -4.6739 -4.8588 -5.0474 -5.2395 -5.4352 -5.6345 -5.8374 -6.0439 -6.2539 -6.4676 -6.6848 -6.9056 -7.1301 -7.3581 -7.5896 -7.8248 -8.0636 -8.3059 -8.5519 -8.8014 -9.0545 -9.3112 -9.5715 -9.8353 -10.1028 -10.3739 -10.6485 -10.9267 -11.2085 -11.4939 -11.7829 -12.0755 -12.3716 -12.6714 -12.9747 -13.2816 -13.5921 -13.9062 -14.2239 -14.5452 -14.87 -15.1985 -15.5305 -15.8661 -16.2054 -16.5482 -16.8945 -17.2445 -17.5981 1.0 46324.29 EW4 HV 34.22 37.82 0.050 1.606e+10 6.904e+09 1.580e+10 6.881e+09 1.545e+10 6.844e+09 1.501e+10 6.791e+09 1.449e+10 6.721e+09 1.390e+10 6.630e+09 1.323e+10 6.519e+09 1.250e+10 6.386e+09 1.172e+10 6.229e+09 1.088e+10 6.048e+09 1.002e+10 5.844e+09 9.129e+09 5.616e+09 8.230e+09 5.365e+09 7.332e+09 5.095e+09 6.448e+09 4.806e+09 5.593e+09 4.503e+09 4.774e+09 4.188e+09 4.004e+09 3.867e+09 3.291e+09 3.544e+09 2.639e+09 3.224e+09 2.056e+09 2.913e+09 1.542e+09 2.616e+09 1.096e+09 2.339e+09 7.157e+08 2.085e+09 3.937e+08 1.860e+09 1.209e+08 1.665e+09 -1.136e+08 1.502e+09 -3.225e+08 1.368e+09 -5.178e+08 1.260e+09 -7.095e+08 1.170e+09 -9.043e+08 1.092e+09 -1.106e+09 1.016e+09 -1.314e+09 9.372e+08 -1.527e+09 8.486e+08 -1.741e+09 7.465e+08 -1.953e+09 6.282e+08 -2.157e+09 4.922e+08 -2.350e+09 3.376e+08 -2.529e+09 1.643e+08 -2.692e+09 -2.739e+07 -2.836e+09 -2.373e+08 -2.959e+09 -4.650e+08 -3.063e+09 -7.101e+08 -3.145e+09 -9.728e+08 -3.207e+09 -1.253e+09 -3.249e+09 -1.552e+09 -3.271e+09 -1.871e+09 -3.274e+09 -2.211e+09 -3.256e+09 -2.573e+09 -3.218e+09 -2.961e+09 -3.157e+09 -3.375e+09 -3.072e+09 -3.818e+09 -2.961e+09 -4.291e+09 -2.819e+09 -4.797e+09 -2.645e+09 -5.334e+09 -2.433e+09 -5.905e+09 -2.179e+09 -6.508e+09 -1.881e+09 -7.140e+09 -1.533e+09 -7.800e+09 -1.133e+09 -8.484e+09 -6.777e+08 -9.188e+09 -1.658e+08 -9.907e+09 4.043e+08 -1.063e+10 1.031e+09 -1.136e+10 1.714e+09 -1.209e+10 2.450e+09 -1.280e+10 3.233e+09 -1.349e+10 4.058e+09 -1.415e+10 4.920e+09 -1.477e+10 5.805e+09 -1.534e+10 6.707e+09 -1.587e+10 7.613e+09 -1.633e+10 8.510e+09 -1.672e+10 9.386e+09 -1.704e+10 1.023e+10 -1.728e+10 1.103e+10 -1.744e+10 1.176e+10 -1.752e+10 1.243e+10 -1.751e+10 1.302e+10 -1.741e+10 1.351e+10 -1.723e+10 1.391e+10 -1.696e+10 1.420e+10 -1.660e+10 1.438e+10 -1.617e+10 1.446e+10 -1.566e+10 1.443e+10 -1.509e+10 1.429e+10 -1.445e+10 1.404e+10 -1.375e+10 1.371e+10 -1.300e+10 1.328e+10 -1.222e+10 1.278e+10 -1.139e+10 1.220e+10 -1.055e+10 1.157e+10 -9.691e+09 1.089e+10 -8.824e+09 1.017e+10 -7.960e+09 9.432e+09 -7.108e+09 8.676e+09 -6.275e+09 7.915e+09 -5.471e+09 7.161e+09 -4.703e+09 6.421e+09 -3.978e+09 5.705e+09 -3.303e+09 5.021e+09 -2.682e+09 4.374e+09 -2.120e+09 3.769e+09 -1.620e+09 3.213e+09 -1.182e+09 2.706e+09 -8.075e+08 2.254e+09 -4.937e+08 1.857e+09 -2.375e+08 1.515e+09 -3.303e+07 1.227e+09 1.271e+08 9.923e+08 2.523e+08 8.042e+08 3.537e+08 6.561e+08 4.425e+08 5.387e+08 5.285e+08 4.416e+08 6.187e+08 3.557e+08 7.156e+08 2.743e+08 8.184e+08 1.934e+08 9.238e+08 1.120e+08 1.027e+09 3.094e+07 1.123e+09 -4.761e+07 1.207e+09 -1.207e+08 1.276e+09 -1.851e+08 1.326e+09 -2.381e+08 1.356e+09 -2.771e+08 1.364e+09 -3.005e+08 1.351e+09 -3.074e+08 1.317e+09 -2.977e+08 1.265e+09 -2.725e+08 1.196e+09 -2.335e+08 1.113e+09 -1.832e+08 1.020e+09 -1.249e+08 9.206e+08 -6.166e+07 8.190e+08 3.486e+06 7.194e+08 6.842e+07 6.261e+08 1.329e+08 5.429e+08 1.990e+08 4.727e+08 2.718e+08 4.166e+08 3.591e+08 3.728e+08 4.691e+08 3.367e+08 6.089e+08 3.018e+08 7.839e+08 2.613e+08 9.966e+08 2.092e+08 1.247e+09 1.410e+08 1.534e+09 5.341e+07 1.854e+09 -5.532e+07 2.204e+09 -1.858e+08 2.579e+09 -3.380e+08 2.974e+09 -5.106e+08 3.383e+09 -7.017e+08 3.801e+09 -9.086e+08 4.221e+09 -1.128e+09 4.636e+09 -1.356e+09 5.042e+09 -1.588e+09 5.432e+09 -1.818e+09 5.801e+09 -2.043e+09 6.144e+09 -2.255e+09 6.457e+09 -2.450e+09 6.735e+09 -2.623e+09 6.976e+09 -2.768e+09 7.175e+09 -2.882e+09 7.331e+09 -2.959e+09 7.441e+09 -2.999e+09 7.506e+09 -2.998e+09 7.522e+09 -2.957e+09 7.492e+09 -2.876e+09 7.415e+09 -2.757e+09 7.292e+09 -2.602e+09 7.125e+09 -2.416e+09 6.917e+09 -2.203e+09 6.670e+09 -1.969e+09 6.387e+09 -1.720e+09 6.072e+09 -1.462e+09 5.730e+09 -1.202e+09 5.365e+09 -9.454e+08 4.981e+09 -6.981e+08 4.585e+09 -4.655e+08 4.180e+09 -2.519e+08 3.772e+09 -6.093e+07 3.367e+09 1.045e+08 2.968e+09 2.426e+08 2.581e+09 3.526e+08 2.211e+09 4.343e+08 1.861e+09 4.887e+08 1.536e+09 5.178e+08 1.239e+09 5.238e+08 9.713e+08 5.098e+08 7.361e+08 4.793e+08 5.341e+08 4.364e+08 3.656e+08 3.853e+08 2.294e+08 3.306e+08 1.235e+08 2.768e+08 4.336e+07 2.284e+08 -1.792e+07 1.888e+08 -6.983e+07 1.590e+08 -1.229e+08 1.361e+08 -1.857e+08 1.139e+08 -2.626e+08 8.461e+07 -3.548e+08 4.146e+07 -4.614e+08 -2.120e+07 -5.804e+08 -1.079e+08 -7.099e+08 -2.227e+08 -8.481e+08 -3.697e+08 -9.929e+08 -5.525e+08 -1.143e+09 -7.758e+08 -1.296e+09 -1.044e+09 -1.451e+09 -1.362e+09 -1.605e+09 -1.734e+09 -1.757e+09 -2.166e+09 -1.905e+09 -2.661e+09 -2.045e+09 -3.224e+09 -2.176e+09 -3.859e+09 -2.294e+09 -4.565e+09 -2.396e+09 -5.344e+09 -2.478e+09 -6.195e+09 -2.539e+09 -7.111e+09 -2.573e+09 -8.087e+09 -2.579e+09 -9.113e+09 -2.553e+09 -1.018e+10 -2.493e+09 -1.126e+10 -2.397e+09 -1.235e+10 -2.264e+09 -1.342e+10 -2.093e+09 -1.446e+10 -1.883e+09 -1.544e+10 -1.638e+09 -1.633e+10 -1.359e+09 -1.711e+10 -1.050e+09 -1.776e+10 -7.167e+08 -1.825e+10 -3.643e+08 -1.858e+10 -2.972e+05 -1.872e+10 3.671e+08 -1.866e+10 7.295e+08 -1.841e+10 1.078e+09 -1.796e+10 1.402e+09 -1.731e+10 1.695e+09 -1.649e+10 1.947e+09 -1.551e+10 2.151e+09 -1.439e+10 2.303e+09 -1.316e+10 2.398e+09 -1.185e+10 2.434e+09 -1.049e+10 2.411e+09 -9.107e+09 2.332e+09 -7.743e+09 2.201e+09 -6.426e+09 2.026e+09 -5.183e+09 1.815e+09 -4.042e+09 1.578e+09 -3.024e+09 1.327e+09 -2.145e+09 1.074e+09 -1.418e+09 8.335e+08 -8.470e+08 6.204e+08 -4.297e+08 4.531e+08 -1.492e+08 3.489e+08 3.763e+07 3.069e+08 2.050e+08 2.968e+08 4.230e+08 2.812e+08 7.214e+08 2.369e+08 1.096e+09 1.551e+08 1.528e+09 3.546e+07 1.992e+09 -1.178e+08 2.462e+09 -2.969e+08 2.910e+09 -4.921e+08 3.313e+09 -6.928e+08 3.645e+09 -8.870e+08 3.886e+09 -1.063e+09 4.017e+09 -1.209e+09 4.026e+09 -1.316e+09 3.905e+09 -1.374e+09 3.654e+09 -1.380e+09 3.282e+09 -1.329e+09 2.805e+09 -1.223e+09 2.251e+09 -1.068e+09 1.659e+09 -8.760e+08 1.080e+09 -6.673e+08 5.730e+08 -4.819e+08 1.894e+08 -3.913e+08 -9.305e+07 -4.285e+08 -4.890e+08 -5.145e+08 -1.276e+09 -5.564e+08 -2.650e+09 -4.919e+08 -4.763e+09 -2.734e+08 -7.766e+09 1.426e+08 -1.180e+10 7.988e+08 -1.701e+10 1.739e+09 -2.355e+10 3.004e+09 -3.152e+10 4.636e+09 -4.107e+10 6.677e+09 -5.228e+10 9.159e+09 -6.521e+10 1.212e+10 -7.991e+10 1.558e+10 -9.640e+10 1.957e+10 -1.146e+11 2.410e+10 -1.345e+11 2.919e+10 -1.561e+11 3.482e+10 -1.790e+11 4.097e+10 -2.031e+11 4.764e+10 -2.283e+11 5.478e+10 -2.541e+11 6.232e+10 -2.804e+11 7.023e+10 -3.068e+11 7.840e+10 -3.330e+11 8.675e+10 -3.585e+11 9.518e+10 -3.831e+11 1.057e+11 -4.070e+11 1.154e+11 -4.291e+11 1.235e+11 -4.485e+11 1.312e+11 -4.655e+11 1.383e+11 -4.797e+11 1.447e+11 -4.908e+11 1.502e+11 -4.987e+11 1.546e+11 -5.031e+11 1.580e+11 -5.038e+11 1.602e+11 -5.009e+11 1.611e+11 -4.941e+11 1.606e+11 -4.837e+11 1.588e+11 -4.695e+11 1.556e+11 -4.519e+11 1.511e+11 -4.309e+11 1.453e+11 -4.070e+11 1.383e+11 -3.803e+11 1.303e+11 -3.513e+11 1.213e+11 -3.205e+11 1.115e+11 -2.884e+11 1.011e+11 -2.555e+11 9.035e+10 -2.223e+11 7.940e+10 -1.895e+11 6.845e+10 -1.577e+11 5.774e+10 -1.276e+11 4.747e+10 -9.956e+10 3.782e+10 -7.427e+10 2.900e+10 -5.223e+10 2.116e+10 -3.383e+10 1.444e+10 -1.936e+10 9.010e+09 -9.025e+09 5.091e+09 -2.685e+09 3.038e+09 7.073e+08 2.697e+09 4.011e+09 2.636e+09 9.995e+09 1.877e+09 1.899e+10 2.590e+08 3.039e+10 -2.135e+09 4.338e+10 -5.136e+09 5.706e+10 -8.528e+09 7.039e+10 -1.207e+10 8.235e+10 -1.551e+10 9.193e+10 -1.857e+10 9.818e+10 -2.100e+10 1.003e+11 -2.256e+10 9.782e+10 -2.306e+10 9.049e+10 -2.235e+10 7.857e+10 -2.037e+10 6.284e+10 -1.719e+10 4.478e+10 -1.301e+10 2.658e+10 -8.378e+09 1.128e+10 -4.935e+09 1.382e+09 -4.975e+09 -8.127e+09 -7.163e+09 -3.224e+10 -7.372e+09 -8.311e+10 -3.333e+09 -1.705e+11 7.062e+09 -3.056e+11 2.622e+10 -5.009e+11 5.603e+10 -7.583e+11 1.009e+11 -1.115e+12 1.640e+11 -1.578e+12 2.497e+11 -2.170e+12 3.624e+11 -2.913e+12 5.073e+11 -3.829e+12 6.902e+11 -4.947e+12 9.171e+11 -6.293e+12 1.194e+12 -7.898e+12 1.529e+12 -9.795e+12 1.929e+12 -1.202e+13 2.401e+12 -1.460e+13 2.953e+12 -1.758e+13 3.595e+12 -2.101e+13 4.334e+12 -2.491e+13 5.180e+12 -2.934e+13 6.140e+12 -3.432e+13 7.222e+12 -3.991e+13 8.439e+12 -4.615e+13 9.795e+12 -5.309e+13 1.130e+13 -6.074e+13 1.296e+13 -6.920e+13 1.480e+13 -7.846e+13 1.682e+13 -8.858e+13 1.901e+13 -9.957e+13 2.141e+13 -1.116e+14 2.401e+13 -1.244e+14 2.680e+13 -1.383e+14 2.982e+13 -1.533e+14 3.304e+13 -1.692e+14 3.648e+13 -1.861e+14 4.016e+13 -2.041e+14 4.405e+13 -2.231e+14 4.817e+13 -2.431e+14 5.251e+13 -2.642e+14 5.707e+13 -2.863e+14 6.187e+13 -3.092e+14 6.687e+13 -3.331e+14 7.207e+13 -3.580e+14 7.748e+13 -3.835e+14 8.309e+13 -4.100e+14 8.887e+13 -4.371e+14 9.482e+13 -4.648e+14 1.009e+14 -4.932e+14 1.072e+14 -5.219e+14 1.135e+14 -5.512e+14 1.198e+14 -5.806e+14 1.263e+14 -6.103e+14 1.329e+14 -6.400e+14 1.394e+14 -6.698e+14 1.459e+14 -6.994e+14 1.524e+14 -7.288e+14 1.588e+14 -7.578e+14 1.651e+14 -7.863e+14 1.712e+14 -8.144e+14 1.772e+14 -8.417e+14 1.830e+14 -8.681e+14 1.885e+14 -8.937e+14 1.938e+14 -9.183e+14 1.988e+14 -9.416e+14 2.035e+14 -9.637e+14 2.078e+14 -9.845e+14 2.117e+14 -1.004e+15 2.152e+14 -1.021e+15 2.181e+14 -1.038e+15 2.206e+14 -1.052e+15 2.228e+14 -1.065e+15 2.245e+14 -1.075e+15 2.258e+14 -1.085e+15 2.266e+14 -1.092e+15 2.271e+14 -1.096e+15 2.271e+14 -1.099e+15 2.268e+14 -1.100e+15 2.259e+14 -1.099e+15 2.248e+14 -1.096e+15 2.232e+14 -1.090e+15 2.213e+14 -1.083e+15 2.189e+14 -1.074e+15 2.163e+14 -1.063e+15 2.133e+14 -1.050e+15 2.101e+14 -1.035e+15 2.064e+14 -1.019e+15 2.026e+14 -1.000e+15 1.984e+14 -9.804e+14 1.940e+14 -9.591e+14 1.895e+14 -9.364e+14 1.846e+14 -9.125e+14 1.795e+14 -8.874e+14 1.744e+14 -8.612e+14 1.689e+14 -8.342e+14 1.634e+14 -8.064e+14 1.577e+14 -7.780e+14 1.519e+14 -7.490e+14 1.460e+14 -7.195e+14 1.400e+14 -6.897e+14 1.341e+14 -6.599e+14 1.280e+14 -6.299e+14 1.220e+14 -5.999e+14 1.160e+14 -5.702e+14 1.100e+14 -5.407e+14 1.041e+14 -5.115e+14 9.823e+13 -4.829e+14 9.247e+13 -4.548e+14 8.684e+13 -4.274e+14 8.134e+13 -4.007e+14 7.600e+13 -3.747e+14 7.081e+13 -3.496e+14 6.578e+13 -3.253e+14 6.095e+13 -3.019e+14 5.632e+13 -2.794e+14 5.188e+13 -2.579e+14 4.767e+13 -2.374e+14 4.367e+13 -2.179e+14 3.988e+13 -1.994e+14 3.632e+13 -1.820e+14 3.298e+13 -1.654e+14 2.985e+13 -1.499e+14 2.693e+13 -1.355e+14 2.423e+13 -1.220e+14 2.173e+13 -1.095e+14 1.942e+13 -9.786e+13 1.730e+13 -8.715e+13 1.537e+13 -7.730e+13 1.360e+13 -6.829e+13 1.199e+13 -6.007e+13 1.053e+13 -5.261e+13 9.216e+12 -4.585e+13 8.031e+12 -3.978e+13 6.970e+12 -3.433e+13 6.020e+12 -2.947e+13 5.175e+12 -2.515e+13 4.426e+12 -2.134e+13 3.765e+12 -1.799e+13 3.184e+12 -1.506e+13 2.674e+12 -1.253e+13 2.232e+12 -1.033e+13 1.849e+12 -8.458e+12 1.519e+12 -6.861e+12 1.237e+12 -5.512e+12 9.975e+11 -4.382e+12 7.959e+11 -3.445e+12 6.275e+11 -2.674e+12 4.881e+11 -2.047e+12 3.744e+11 -1.543e+12 2.823e+11 -1.144e+12 2.089e+11 -8.313e+11 1.512e+11 -5.909e+11 1.066e+11 -4.092e+11 7.291e+10 -2.748e+11 4.724e+10 -1.751e+11 2.972e+10 -1.085e+11 1.760e+10 -6.363e+10 9.618e+09 -3.475e+10 4.664e+09 -1.722e+10 1.858e+09 -7.418e+09 4.918e+08 -2.562e+09 -2.683e+06 -5.940e+08 -1.189e+08 -5.050e+07 -2.804e+08 9.536e+07 -4.944e+08 2.003e+08 -6.579e+08 1.516e+08 -7.922e+08 -8.126e+07 -1.003e+09 -5.713e+08 -1.379e+09 -1.603e+09 -1.907e+09 -3.614e+09 -2.517e+09 -7.056e+09 -3.133e+09 -1.234e+10 -3.690e+09 -1.977e+10 -4.133e+09 -2.960e+10 -4.424e+09 -4.200e+10 -4.533e+09 -5.697e+10 -4.446e+09 -7.447e+10 -4.156e+09 -9.435e+10 -3.668e+09 -1.163e+11 -2.988e+09 -1.400e+11 -2.131e+09 -1.652e+11 -1.110e+09 -1.911e+11 5.708e+07 -2.175e+11 1.355e+09 -2.438e+11 2.768e+09 -2.694e+11 4.284e+09 -2.939e+11 5.891e+09 -3.167e+11 7.576e+09 -3.374e+11 9.354e+09 -3.558e+11 1.119e+10 -3.713e+11 1.306e+10 -3.838e+11 1.494e+10 -3.930e+11 1.680e+10 -3.988e+11 1.862e+10 -4.010e+11 2.037e+10 -3.998e+11 2.201e+10 -3.952e+11 2.350e+10 -3.873e+11 2.481e+10 -3.764e+11 2.590e+10 -3.626e+11 2.674e+10 -3.462e+11 2.729e+10 -3.276e+11 2.755e+10 -3.072e+11 2.750e+10 -2.853e+11 2.713e+10 -2.623e+11 2.644e+10 -2.386e+11 2.545e+10 -2.146e+11 2.419e+10 -1.907e+11 2.268e+10 -1.672e+11 2.096e+10 -1.445e+11 1.908e+10 -1.230e+11 1.708e+10 -1.027e+11 1.503e+10 -8.404e+10 1.296e+10 -6.715e+10 1.094e+10 -5.213e+10 8.998e+09 -3.909e+10 7.185e+09 -2.807e+10 5.531e+09 -1.903e+10 4.064e+09 -1.193e+10 2.806e+09 -6.669e+09 1.773e+09 -3.093e+09 1.006e+09 -1.004e+09 6.050e+08 1.166e+06 6.254e+08 7.613e+08 8.117e+08 2.103e+09 9.390e+08 4.075e+09 9.761e+08 6.479e+09 9.364e+08 9.101e+09 8.425e+08 1.173e+10 7.187e+08 1.421e+10 5.852e+08 1.636e+10 4.597e+08 1.807e+10 3.554e+08 1.924e+10 2.813e+08 1.982e+10 2.419e+08 1.978e+10 2.381e+08 1.912e+10 2.648e+08 1.790e+10 3.148e+08 1.618e+10 3.783e+08 1.408e+10 4.437e+08 1.171e+10 4.979e+08 9.207e+09 5.278e+08 6.728e+09 5.201e+08 4.429e+09 4.634e+08 2.479e+09 3.518e+08 1.040e+09 2.249e+08 2.401e+08 3.056e+08 -2.665e+08 6.310e+08 -1.336e+09 1.120e+09 -3.442e+09 0.005 -53.416 -52.397 -51.379 -50.360 -49.341 -48.336 -47.433 -46.623 -45.898 -45.253 -44.683 -44.183 -43.750 -43.382 -43.077 -42.833 -42.649 -42.524 -42.459 -42.452 -42.506 -42.620 -42.796 -43.037 -43.345 -43.723 -44.175 -44.706 -45.324 -46.035 -46.850 -47.781 -48.846 -50.068 -51.476 -53.115 -55.052 -57.397 -60.349 -64.339 -70.677 -85.828 -75.304 -69.123 -66.573 -65.424 -65.109 -65.330 -65.654 -65.250 -63.519 -60.990 -58.390 -56.018 -53.928 -52.097 -50.491 -49.077 -47.828 -46.724 -45.747 -44.884 -44.125 -43.461 -42.886 -42.393 -41.980 -41.643 -41.379 -41.186 -41.064 -41.013 -41.031 -41.120 -41.282 -41.517 -41.829 -42.220 -42.695 -43.257 -43.913 -44.667 -45.527 -46.498 -47.586 -48.793 -50.117 -51.544 -53.045 -54.568 -56.052 -57.458 -58.824 -60.312 -62.211 -64.831 -67.110 -64.535 -59.795 -55.784 -52.574 -49.917 -47.655 -45.694 -43.969 -42.438 -41.071 -39.844 -38.742 -37.750 -36.860 -36.062 -35.350 -34.720 -34.167 -33.688 -33.282 -32.947 -32.682 -32.487 -32.363 -32.311 -32.333 -32.431 -32.610 -32.875 -33.230 -33.686 -34.250 -34.935 -35.756 -36.734 -37.891 -39.259 -40.869 -42.747 -44.867 -47.030 -48.691 -49.259 -48.929 -48.454 -48.426 -49.261 -51.605 -57.225 -56.442 -48.071 -42.396 -38.317 -35.073 -32.347 -29.977 -27.874 -25.978 -24.250 -22.663 -21.195 -19.830 -18.555 -17.360 -16.238 -15.180 -14.182 -13.239 -12.346 -11.500 -10.698 -9.938 -9.215 -8.530 -7.880 -7.262 -6.677 -6.122 -5.596 -5.098 -4.627 -4.183 -3.764 -3.370 -3.000 -2.654 -2.331 -2.030 -1.751 -1.494 -1.258 -1.043 -0.849 -0.675 -0.522 -0.388 -0.275 -0.181 -0.106 -0.051 -0.016 0.000 -0.003 -0.026 -0.067 -0.128 -0.209 -0.309 -0.429 -0.569 -0.729 -0.909 -1.110 -1.332 -1.575 -1.840 -2.127 -2.436 -2.768 -3.123 -3.503 -3.907 -4.336 -4.792 -5.275 -5.786 -6.326 -6.896 -7.499 -8.134 -8.805 -9.512 -10.259 -11.047 -11.879 -12.760 -13.692 -14.680 -15.730 -16.848 -18.042 -19.322 -20.701 -22.194 -23.823 -25.617 -27.617 -29.889 -32.534 -35.741 -39.915 -46.243 -64.526 -51.227 -45.452 -42.878 -41.558 -40.965 -40.885 -41.215 -41.893 -42.852 -43.947 -44.840 -45.022 -44.231 -42.785 -41.167 -39.649 -38.316 -37.178 -36.221 -35.424 -34.769 -34.241 -33.826 -33.515 -33.299 -33.173 -33.130 -33.168 -33.283 -33.473 -33.738 -34.077 -34.490 -34.978 -35.543 -36.187 -36.914 -37.725 -38.627 -39.625 -40.725 -41.933 -43.258 -44.706 -46.285 -47.999 -49.852 -51.841 -53.958 -56.200 -58.561 -60.975 -62.929 -63.019 -60.853 -57.956 -55.223 -52.821 -50.731 -48.906 -47.304 -45.892 -44.643 -43.537 -42.557 -41.690 -40.926 -40.254 -39.668 -39.162 -38.732 -38.372 -38.080 -37.853 -37.689 -37.585 -37.541 -37.556 -37.628 -37.758 -37.946 -38.193 -38.500 -38.867 -39.297 -39.793 -40.356 -40.991 -41.703 -42.496 -43.378 -44.357 -45.442 -46.646 -47.986 -49.482 -51.161 -53.060 -55.230 -57.743 -60.713 -64.324 -68.914 -74.963 -80.677 -78.988 -75.967 -73.038 -69.625 -66.140 -62.980 -60.239 -57.880 -55.846 -54.080 -52.539 -51.189 -50.001 -48.955 -48.034 -47.224 -46.515 -45.898 -45.366 -44.912 -44.533 -44.223 -43.979 -43.800 -43.682 -43.624 -43.625 -43.683 -43.800 -43.974 -44.206 -44.496 -44.846 -45.257 -45.731 -46.271 -46.879 -47.559 -48.316 -49.156 -50.085 -51.111 -52.151 -53.190 -54.230 -55.270 0.03 -18.841 -18.4692 -18.101 -17.7366 -17.3759 -17.0189 -16.6655 -16.3159 -15.97 -15.6278 -15.2894 -14.9546 -14.6235 -14.2961 -13.9725 -13.6525 -13.3362 -13.0237 -12.7148 -12.4097 -12.1083 -11.8105 -11.5165 -11.2262 -10.9396 -10.6567 -10.3775 -10.102 -9.8302 -9.5621 -9.2978 -9.0371 -8.7801 -8.5269 -8.2773 -8.0315 -7.7893 -7.5509 -7.3162 -7.0851 -6.8578 -6.6342 -6.4143 -6.1981 -5.9856 -5.7768 -5.5717 -5.3703 -5.1727 -4.9787 -4.7884 -4.6019 -4.419 -4.2399 -4.0644 -3.8927 -3.7247 -3.5604 -3.3997 -3.2428 -3.0896 -2.9401 -2.7943 -2.6522 -2.5138 -2.3792 -2.2482 -2.1209 -1.9974 -1.8775 -1.7614 -1.6489 -1.5402 -1.4351 -1.3338 -1.2362 -1.1423 -1.0521 -0.96557 -0.88277 -0.80368 -0.72829 -0.65661 -0.58863 -0.52436 -0.4638 -0.40694 -0.35378 -0.30434 -0.25859 -0.21656 -0.17823 -0.1436 -0.11268 -0.085466 -0.061958 -0.042155 -0.026058 -0.013666 -0.0049802 0 0.0012746 -0.0011565 -0.0072932 -0.017136 -0.030684 -0.047937 -0.068897 -0.093562 -0.12193 -0.15401 -0.18979 -0.22928 -0.27247 -0.31937 -0.36997 -0.42428 -0.4823 -0.54402 -0.60945 -0.67858 -0.75142 -0.82796 -0.90821 -0.99217 -1.0798 -1.1712 -1.2663 -1.365 -1.4675 -1.5737 -1.6836 -1.7972 -1.9145 -2.0355 -2.1603 -2.2887 -2.4208 -2.5566 -2.6962 -2.8394 -2.9864 -3.137 -3.2914 -3.4495 -3.6112 -3.7767 -3.9459 -4.1188 -4.2954 -4.4757 -4.6597 -4.8474 -5.0388 -5.234 -5.4328 -5.6353 -5.8416 -6.0515 -6.2652 -6.4825 -6.7036 -6.9284 -7.1568 -7.389 -7.6249 -7.8645 -8.1078 -8.3548 -8.6055 -8.8599 -9.118 -9.3799 -9.6454 -9.9146 -10.1876 -10.4642 -10.7446 -11.0287 -11.3164 -11.6079 -11.9031 -12.202 -12.5045 -12.8108 -13.1208 -13.4345 -13.752 -14.0731 -14.3979 -14.7264 -15.0587 -15.3946 -15.7342 -16.0776 -16.4246 -16.7754 -17.1299 -17.4881 -17.8499 -18.2155 1.0 46324.29 EW4 VV 34.22 37.82 0.050 1.329e+10 -5.753e+09 1.300e+10 -5.370e+09 1.268e+10 -4.949e+09 1.231e+10 -4.495e+09 1.191e+10 -4.017e+09 1.147e+10 -3.519e+09 1.100e+10 -3.009e+09 1.049e+10 -2.494e+09 9.964e+09 -1.981e+09 9.411e+09 -1.477e+09 8.840e+09 -9.872e+08 8.257e+09 -5.186e+08 7.667e+09 -7.548e+07 7.077e+09 3.385e+08 6.493e+09 7.198e+08 5.922e+09 1.066e+09 5.367e+09 1.380e+09 4.836e+09 1.660e+09 4.332e+09 1.911e+09 3.856e+09 2.136e+09 3.410e+09 2.339e+09 2.994e+09 2.527e+09 2.604e+09 2.703e+09 2.237e+09 2.872e+09 1.888e+09 3.038e+09 1.553e+09 3.202e+09 1.225e+09 3.365e+09 8.996e+08 3.526e+09 5.733e+08 3.681e+09 2.436e+08 3.827e+09 -9.101e+07 3.961e+09 -4.311e+08 4.078e+09 -7.757e+08 4.173e+09 -1.123e+09 4.243e+09 -1.472e+09 4.285e+09 -1.820e+09 4.295e+09 -2.164e+09 4.273e+09 -2.504e+09 4.218e+09 -2.836e+09 4.129e+09 -3.160e+09 4.007e+09 -3.475e+09 3.853e+09 -3.782e+09 3.667e+09 -4.079e+09 3.453e+09 -4.369e+09 3.211e+09 -4.652e+09 2.942e+09 -4.930e+09 2.648e+09 -5.205e+09 2.328e+09 -5.478e+09 1.983e+09 -5.752e+09 1.612e+09 -6.027e+09 1.214e+09 -6.304e+09 7.859e+08 -6.583e+09 3.263e+08 -6.863e+09 -1.678e+08 -7.143e+09 -6.995e+08 -7.420e+09 -1.270e+09 -7.691e+09 -1.883e+09 -7.951e+09 -2.539e+09 -8.196e+09 -3.238e+09 -8.421e+09 -3.981e+09 -8.621e+09 -4.767e+09 -8.790e+09 -5.592e+09 -8.924e+09 -6.454e+09 -9.017e+09 -7.349e+09 -9.064e+09 -8.269e+09 -9.062e+09 -9.207e+09 -9.007e+09 -1.016e+10 -8.897e+09 -1.111e+10 -8.731e+09 -1.205e+10 -8.507e+09 -1.297e+10 -8.229e+09 -1.387e+10 -7.899e+09 -1.472e+10 -7.519e+09 -1.552e+10 -7.094e+09 -1.626e+10 -6.630e+09 -1.692e+10 -6.131e+09 -1.750e+10 -5.607e+09 -1.798e+10 -5.064e+09 -1.837e+10 -4.508e+09 -1.864e+10 -3.949e+09 -1.881e+10 -3.392e+09 -1.885e+10 -2.846e+09 -1.878e+10 -2.316e+09 -1.859e+10 -1.810e+09 -1.828e+10 -1.330e+09 -1.786e+10 -8.821e+08 -1.733e+10 -4.693e+08 -1.670e+10 -9.314e+07 -1.598e+10 2.442e+08 -1.518e+10 5.423e+08 -1.431e+10 8.016e+08 -1.337e+10 1.022e+09 -1.240e+10 1.206e+09 -1.139e+10 1.354e+09 -1.037e+10 1.468e+09 -9.338e+09 1.550e+09 -8.322e+09 1.602e+09 -7.329e+09 1.627e+09 -6.373e+09 1.627e+09 -5.466e+09 1.604e+09 -4.616e+09 1.561e+09 -3.834e+09 1.502e+09 -3.126e+09 1.431e+09 -2.495e+09 1.352e+09 -1.946e+09 1.271e+09 -1.477e+09 1.192e+09 -1.085e+09 1.125e+09 -7.615e+08 1.074e+09 -4.966e+08 1.045e+09 -2.752e+08 1.041e+09 -8.127e+07 1.060e+09 1.006e+08 1.098e+09 2.823e+08 1.147e+09 4.704e+08 1.201e+09 6.665e+08 1.254e+09 8.683e+08 1.300e+09 1.071e+09 1.335e+09 1.268e+09 1.358e+09 1.453e+09 1.367e+09 1.618e+09 1.361e+09 1.759e+09 1.343e+09 1.870e+09 1.311e+09 1.947e+09 1.270e+09 1.988e+09 1.220e+09 1.992e+09 1.163e+09 1.960e+09 1.103e+09 1.893e+09 1.040e+09 1.794e+09 9.768e+08 1.667e+09 9.146e+08 1.519e+09 8.544e+08 1.354e+09 7.972e+08 1.178e+09 7.435e+08 9.997e+08 6.942e+08 8.239e+08 6.504e+08 6.568e+08 6.138e+08 5.030e+08 5.873e+08 3.650e+08 5.747e+08 2.422e+08 5.808e+08 1.302e+08 6.097e+08 2.062e+07 6.639e+08 -9.750e+07 7.433e+08 -2.349e+08 8.463e+08 -4.008e+08 9.699e+08 -6.009e+08 1.110e+09 -8.380e+08 1.265e+09 -1.113e+09 1.429e+09 -1.424e+09 1.600e+09 -1.769e+09 1.775e+09 -2.143e+09 1.950e+09 -2.541e+09 2.123e+09 -2.958e+09 2.291e+09 -3.386e+09 2.453e+09 -3.820e+09 2.605e+09 -4.252e+09 2.746e+09 -4.673e+09 2.876e+09 -5.078e+09 2.995e+09 -5.457e+09 3.101e+09 -5.803e+09 3.194e+09 -6.111e+09 3.276e+09 -6.372e+09 3.346e+09 -6.582e+09 3.405e+09 -6.736e+09 3.454e+09 -6.830e+09 3.492e+09 -6.862e+09 3.519e+09 -6.831e+09 3.536e+09 -6.737e+09 3.541e+09 -6.582e+09 3.535e+09 -6.369e+09 3.516e+09 -6.102e+09 3.482e+09 -5.788e+09 3.433e+09 -5.433e+09 3.367e+09 -5.044e+09 3.284e+09 -4.629e+09 3.183e+09 -4.197e+09 3.063e+09 -3.757e+09 2.926e+09 -3.315e+09 2.770e+09 -2.880e+09 2.599e+09 -2.460e+09 2.413e+09 -2.060e+09 2.215e+09 -1.686e+09 2.009e+09 -1.343e+09 1.798e+09 -1.033e+09 1.585e+09 -7.596e+08 1.374e+09 -5.237e+08 1.169e+09 -3.253e+08 9.752e+08 -1.634e+08 7.956e+08 -3.585e+07 6.334e+08 6.077e+07 4.911e+08 1.311e+08 3.699e+08 1.810e+08 2.689e+08 2.176e+08 1.845e+08 2.484e+08 1.102e+08 2.802e+08 3.746e+07 3.172e+08 -4.247e+07 3.603e+08 -1.366e+08 4.075e+08 -2.501e+08 4.551e+08 -3.856e+08 4.985e+08 -5.447e+08 5.332e+08 -7.284e+08 5.550e+08 -9.370e+08 5.596e+08 -1.171e+09 5.433e+08 -1.432e+09 5.019e+08 -1.719e+09 4.315e+08 -2.036e+09 3.279e+08 -2.383e+09 1.865e+08 -2.762e+09 2.467e+06 -3.175e+09 -2.290e+08 -3.623e+09 -5.135e+08 -4.109e+09 -8.563e+08 -4.631e+09 -1.262e+09 -5.191e+09 -1.736e+09 -5.786e+09 -2.281e+09 -6.414e+09 -2.899e+09 -7.072e+09 -3.593e+09 -7.753e+09 -4.360e+09 -8.449e+09 -5.196e+09 -9.153e+09 -6.098e+09 -9.852e+09 -7.055e+09 -1.054e+10 -8.057e+09 -1.119e+10 -9.089e+09 -1.180e+10 -1.013e+10 -1.234e+10 -1.117e+10 -1.282e+10 -1.219e+10 -1.320e+10 -1.316e+10 -1.347e+10 -1.406e+10 -1.363e+10 -1.486e+10 -1.365e+10 -1.555e+10 -1.355e+10 -1.610e+10 -1.330e+10 -1.650e+10 -1.292e+10 -1.673e+10 -1.241e+10 -1.678e+10 -1.177e+10 -1.665e+10 -1.103e+10 -1.634e+10 -1.019e+10 -1.585e+10 -9.275e+09 -1.520e+10 -8.309e+09 -1.438e+10 -7.316e+09 -1.344e+10 -6.317e+09 -1.238e+10 -5.337e+09 -1.124e+10 -4.398e+09 -1.004e+10 -3.518e+09 -8.807e+09 -2.714e+09 -7.577e+09 -2.001e+09 -6.378e+09 -1.386e+09 -5.233e+09 -8.747e+08 -4.168e+09 -4.688e+08 -3.206e+09 -1.643e+08 -2.361e+09 4.558e+07 -1.647e+09 1.725e+08 -1.073e+09 2.334e+08 -6.397e+08 2.535e+08 -3.403e+08 2.695e+08 -1.479e+08 3.179e+08 -5.306e+06 4.100e+08 1.530e+08 5.314e+08 3.645e+08 6.617e+08 6.337e+08 7.840e+08 9.469e+08 8.859e+08 1.283e+09 9.587e+08 1.619e+09 9.962e+08 1.931e+09 9.951e+08 2.194e+09 9.545e+08 2.389e+09 8.762e+08 2.499e+09 7.639e+08 2.510e+09 6.238e+08 2.415e+09 4.646e+08 2.216e+09 2.975e+08 1.923e+09 1.357e+08 1.555e+09 -5.366e+06 1.145e+09 -1.100e+08 7.380e+08 -1.690e+08 3.893e+08 -2.090e+08 1.483e+08 -3.381e+08 -5.226e+07 -6.542e+08 -4.404e+08 -1.192e+09 -1.227e+09 -1.979e+09 -2.571e+09 -3.055e+09 -4.623e+09 -4.461e+09 -7.531e+09 -6.244e+09 -1.145e+10 -8.452e+09 -1.656e+10 -1.112e+10 -2.299e+10 -1.430e+10 -3.090e+10 -1.802e+10 -4.044e+10 -2.231e+10 -5.172e+10 -2.717e+10 -6.485e+10 -3.262e+10 -7.992e+10 -3.863e+10 -9.694e+10 -4.518e+10 -1.160e+11 -5.224e+10 -1.369e+11 -5.973e+10 -1.598e+11 -6.757e+10 -1.844e+11 -7.569e+10 -2.107e+11 -8.395e+10 -2.383e+11 -9.224e+10 -2.671e+11 -1.004e+11 -2.968e+11 -1.084e+11 -3.271e+11 -1.160e+11 -3.576e+11 -1.232e+11 -3.880e+11 -1.296e+11 -4.178e+11 -1.354e+11 -4.466e+11 -1.403e+11 -4.742e+11 -1.483e+11 -4.983e+11 -1.453e+11 -5.262e+11 -1.470e+11 -5.471e+11 -1.476e+11 -5.651e+11 -1.472e+11 -5.798e+11 -1.456e+11 -5.909e+11 -1.430e+11 -5.981e+11 -1.394e+11 -6.013e+11 -1.348e+11 -6.003e+11 -1.294e+11 -5.950e+11 -1.231e+11 -5.854e+11 -1.162e+11 -5.716e+11 -1.087e+11 -5.536e+11 -1.006e+11 -5.316e+11 -9.225e+10 -5.059e+11 -8.360e+10 -4.768e+11 -7.480e+10 -4.448e+11 -6.595e+10 -4.103e+11 -5.719e+10 -3.738e+11 -4.863e+10 -3.360e+11 -4.036e+10 -2.973e+11 -3.252e+10 -2.587e+11 -2.522e+10 -2.206e+11 -1.854e+10 -1.838e+11 -1.262e+10 -1.490e+11 -7.524e+09 -1.168e+11 -3.339e+09 -8.783e+10 -1.305e+08 -6.256e+10 2.070e+09 -4.142e+10 3.267e+09 -2.469e+10 3.539e+09 -1.255e+10 3.169e+09 -4.890e+09 2.996e+09 -8.729e+08 4.262e+09 2.143e+09 7.018e+09 7.221e+09 1.054e+10 1.499e+10 1.437e+10 2.485e+10 1.819e+10 3.595e+10 2.169e+10 4.728e+10 2.458e+10 5.779e+10 2.660e+10 6.648e+10 2.753e+10 7.239e+10 2.719e+10 7.474e+10 2.551e+10 7.300e+10 2.254e+10 6.697e+10 1.844e+10 5.692e+10 1.357e+10 4.369e+10 8.481e+09 2.877e+10 3.932e+09 1.450e+10 9.239e+08 4.102e+09 -7.913e+08 -1.789e+09 -4.916e+09 -1.337e+10 -1.527e+10 -4.532e+10 -3.394e+10 -1.060e+11 -6.333e+10 -2.052e+11 -1.062e+11 -3.544e+11 -1.656e+11 -5.670e+11 -2.447e+11 -8.579e+11 -3.198e+11 -1.145e+12 -4.399e+11 -1.609e+12 -5.894e+11 -2.200e+12 -7.726e+11 -2.938e+12 -9.941e+11 -3.851e+12 -1.258e+12 -4.964e+12 -1.571e+12 -6.305e+12 -1.937e+12 -7.908e+12 -2.363e+12 -9.798e+12 -2.853e+12 -1.203e+13 -3.417e+12 -1.462e+13 -4.057e+12 -1.762e+13 -4.783e+12 -2.106e+13 -5.602e+12 -2.500e+13 -6.521e+12 -2.947e+13 -7.548e+12 -3.453e+13 -8.691e+12 -4.022e+13 -9.960e+12 -4.657e+13 -1.135e+13 -5.366e+13 -1.289e+13 -6.151e+13 -1.457e+13 -7.019e+13 -1.641e+13 -7.972e+13 -1.841e+13 -9.018e+13 -2.055e+13 -1.016e+14 -2.287e+13 -1.140e+14 -2.535e+13 -1.274e+14 -2.802e+13 -1.419e+14 -3.084e+13 -1.574e+14 -3.385e+13 -1.741e+14 -3.703e+13 -1.919e+14 -4.037e+13 -2.108e+14 -4.388e+13 -2.309e+14 -4.755e+13 -2.521e+14 -5.135e+13 -2.743e+14 -5.530e+13 -2.977e+14 -5.936e+13 -3.223e+14 -6.352e+13 -3.478e+14 -6.779e+13 -3.744e+14 -7.212e+13 -4.019e+14 -7.651e+13 -4.303e+14 -8.095e+13 -4.595e+14 -8.540e+13 -4.896e+14 -8.986e+13 -5.203e+14 -9.429e+13 -5.517e+14 -9.866e+13 -5.835e+14 -1.030e+14 -6.158e+14 -1.073e+14 -6.485e+14 -1.115e+14 -6.813e+14 -1.156e+14 -7.143e+14 -1.195e+14 -7.473e+14 -1.234e+14 -7.801e+14 -1.270e+14 -8.128e+14 -1.306e+14 -8.450e+14 -1.339e+14 -8.768e+14 -1.372e+14 -9.080e+14 -1.402e+14 -9.384e+14 -1.430e+14 -9.679e+14 -1.457e+14 -9.963e+14 -1.481e+14 -1.024e+15 -1.504e+14 -1.051e+15 -1.524e+14 -1.075e+15 -1.543e+14 -1.098e+15 -1.558e+14 -1.120e+15 -1.574e+14 -1.140e+15 -1.588e+14 -1.160e+15 -1.599e+14 -1.176e+15 -1.608e+14 -1.190e+15 -1.614e+14 -1.202e+15 -1.617e+14 -1.213e+15 -1.618e+14 -1.221e+15 -1.614e+14 -1.227e+15 -1.609e+14 -1.231e+15 -1.600e+14 -1.232e+15 -1.588e+14 -1.232e+15 -1.573e+14 -1.229e+15 -1.555e+14 -1.223e+15 -1.534e+14 -1.216e+15 -1.509e+14 -1.206e+15 -1.482e+14 -1.195e+15 -1.450e+14 -1.180e+15 -1.417e+14 -1.164e+15 -1.381e+14 -1.146e+15 -1.342e+14 -1.126e+15 -1.302e+14 -1.105e+15 -1.259e+14 -1.082e+15 -1.215e+14 -1.057e+15 -1.168e+14 -1.030e+15 -1.121e+14 -1.003e+15 -1.072e+14 -9.739e+14 -1.024e+14 -9.441e+14 -9.744e+13 -9.134e+14 -9.253e+13 -8.818e+14 -8.764e+13 -8.497e+14 -8.278e+13 -8.171e+14 -7.800e+13 -7.840e+14 -7.332e+13 -7.508e+14 -6.876e+13 -7.175e+14 -6.432e+13 -6.842e+14 -6.004e+13 -6.510e+14 -5.591e+13 -6.181e+14 -5.194e+13 -5.855e+14 -4.815e+13 -5.534e+14 -4.455e+13 -5.218e+14 -4.115e+13 -4.910e+14 -3.792e+13 -4.609e+14 -3.488e+13 -4.317e+14 -3.200e+13 -4.032e+14 -2.929e+13 -3.757e+14 -2.675e+13 -3.491e+14 -2.437e+13 -3.236e+14 -2.214e+13 -2.991e+14 -2.005e+13 -2.758e+14 -1.811e+13 -2.535e+14 -1.630e+13 -2.323e+14 -1.462e+13 -2.123e+14 -1.306e+13 -1.933e+14 -1.162e+13 -1.756e+14 -1.029e+13 -1.588e+14 -9.065e+12 -1.433e+14 -7.942e+12 -1.287e+14 -6.914e+12 -1.154e+14 -5.978e+12 -1.029e+14 -5.130e+12 -9.144e+13 -4.366e+12 -8.093e+13 -3.681e+12 -7.133e+13 -3.071e+12 -6.260e+13 -2.531e+12 -5.469e+13 -2.058e+12 -4.754e+13 -1.646e+12 -4.112e+13 -1.293e+12 -3.539e+13 -9.911e+11 -3.028e+13 -7.377e+11 -2.577e+13 -5.277e+11 -2.179e+13 -3.567e+11 -1.831e+13 -2.201e+11 -1.528e+13 -1.135e+11 -1.265e+13 -3.274e+10 -1.039e+13 2.595e+10 -8.468e+12 6.635e+10 -6.835e+12 9.182e+10 -5.461e+12 1.054e+11 -4.317e+12 1.098e+11 -3.372e+12 1.074e+11 -2.599e+12 1.004e+11 -1.974e+12 9.022e+10 -1.475e+12 7.835e+10 -1.082e+12 6.589e+10 -7.772e+11 5.366e+10 -5.449e+11 4.227e+10 -3.712e+11 2.934e+10 -2.233e+11 2.140e+10 -1.411e+11 1.488e+10 -8.474e+10 9.773e+09 -4.775e+10 5.954e+09 -2.469e+10 3.269e+09 -1.130e+10 1.534e+09 -4.289e+09 5.459e+08 -1.157e+09 1.052e+08 -1.297e+08 -1.445e+07 5.714e+07 -1.297e+08 2.115e+08 -3.214e+08 2.819e+08 -5.555e+08 1.828e+08 -9.143e+08 -1.297e+08 -1.558e+09 -8.728e+08 -2.608e+09 -2.454e+09 -4.123e+09 -5.338e+09 -6.130e+09 -9.966e+09 -8.633e+09 -1.670e+10 -1.162e+10 -2.583e+10 -1.508e+10 -3.756e+10 -1.897e+10 -5.195e+10 -2.323e+10 -6.898e+10 -2.780e+10 -8.852e+10 -3.261e+10 -1.103e+11 -3.757e+10 -1.340e+11 -4.259e+10 -1.592e+11 -4.756e+10 -1.855e+11 -5.236e+10 -2.123e+11 -5.690e+10 -2.392e+11 -6.106e+10 -2.655e+11 -6.475e+10 -2.907e+11 -6.786e+10 -3.144e+11 -7.031e+10 -3.361e+11 -7.201e+10 -3.554e+11 -7.294e+10 -3.720e+11 -7.306e+10 -3.856e+11 -7.238e+10 -3.958e+11 -7.089e+10 -4.027e+11 -6.864e+10 -4.060e+11 -6.568e+10 -4.058e+11 -6.209e+10 -4.022e+11 -5.796e+10 -3.952e+11 -5.339e+10 -3.851e+11 -4.848e+10 -3.720e+11 -4.336e+10 -3.563e+11 -3.814e+10 -3.382e+11 -3.293e+10 -3.182e+11 -2.783e+10 -2.965e+11 -2.296e+10 -2.736e+11 -1.838e+10 -2.498e+11 -1.417e+10 -2.256e+11 -1.040e+10 -2.013e+11 -7.078e+09 -1.774e+11 -4.245e+09 -1.540e+11 -1.904e+09 -1.317e+11 -4.177e+07 -1.106e+11 1.362e+09 -9.100e+10 2.341e+09 -7.315e+10 2.939e+09 -5.716e+10 3.204e+09 -4.317e+10 3.192e+09 -3.124e+10 2.957e+09 -2.138e+10 2.555e+09 -1.355e+10 2.044e+09 -7.689e+09 1.483e+09 -3.650e+09 9.619e+08 -1.252e+09 6.711e+08 -8.331e+07 8.027e+08 7.662e+08 1.193e+09 2.259e+09 1.589e+09 4.497e+09 1.920e+09 7.273e+09 2.164e+09 1.036e+10 2.314e+09 1.351e+10 2.371e+09 1.654e+10 2.339e+09 1.927e+10 2.224e+09 2.152e+10 2.035e+09 2.321e+10 1.784e+09 2.423e+10 1.482e+09 2.455e+10 1.143e+09 2.415e+10 7.830e+08 2.307e+10 4.182e+08 2.139e+10 6.504e+07 1.919e+10 -2.595e+08 1.660e+10 -5.372e+08 1.375e+10 -7.512e+08 1.081e+10 -8.854e+08 7.933e+09 -9.258e+08 5.296e+09 -8.649e+08 3.068e+09 -7.127e+08 1.407e+09 -5.600e+08 4.082e+08 -6.678e+08 -2.647e+08 -1.131e+09 -1.404e+09 0.005 -53.205 -52.154 -51.102 -50.051 -49.000 -47.962 -47.027 -46.185 -45.428 -44.750 -44.146 -43.612 -43.144 -42.739 -42.396 -42.112 -41.885 -41.716 -41.603 -41.547 -41.546 -41.602 -41.715 -41.887 -42.120 -42.415 -42.775 -43.203 -43.704 -44.282 -44.943 -45.695 -46.547 -47.510 -48.599 -49.832 -51.234 -52.838 -54.689 -56.856 -59.440 -62.601 -66.582 -71.447 -74.596 -73.163 -71.238 -70.229 -69.699 -68.681 -66.489 -63.601 -60.713 -58.105 -55.816 -53.817 -52.065 -50.523 -49.162 -47.957 -46.890 -45.944 -45.110 -44.376 -43.736 -43.183 -42.713 -42.321 -42.006 -41.763 -41.593 -41.494 -41.466 -41.510 -41.625 -41.814 -42.078 -42.421 -42.845 -43.354 -43.952 -44.643 -45.434 -46.327 -47.326 -48.429 -49.629 -50.903 -52.211 -53.482 -54.626 -55.554 -56.219 -56.631 -56.808 -56.718 -56.251 -55.289 -53.844 -52.078 -50.188 -48.319 -46.544 -44.891 -43.367 -41.971 -40.694 -39.528 -38.466 -37.501 -36.625 -35.834 -35.123 -34.489 -33.928 -33.438 -33.018 -32.666 -32.382 -32.165 -32.017 -31.939 -31.933 -32.000 -32.146 -32.373 -32.689 -33.101 -33.617 -34.249 -35.012 -35.924 -37.007 -38.290 -39.803 -41.568 -43.554 -45.556 -47.018 -47.335 -46.678 -45.756 -45.078 -44.882 -45.335 -46.706 -49.603 -54.479 -50.757 -44.034 -39.267 -35.652 -32.701 -30.188 -27.987 -26.025 -24.249 -22.627 -21.134 -19.750 -18.461 -17.257 -16.127 -15.065 -14.064 -13.119 -12.225 -11.380 -10.578 -9.819 -9.099 -8.416 -7.769 -7.154 -6.572 -6.020 -5.498 -5.004 -4.537 -4.097 -3.682 -3.293 -2.927 -2.585 -2.266 -1.969 -1.695 -1.442 -1.210 -1.000 -0.810 -0.641 -0.491 -0.362 -0.253 -0.163 -0.093 -0.043 -0.012 0.000 -0.008 -0.034 -0.080 -0.145 -0.229 -0.334 -0.458 -0.602 -0.766 -0.950 -1.155 -1.381 -1.628 -1.896 -2.187 -2.500 -2.835 -3.194 -3.577 -3.984 -4.416 -4.875 -5.360 -5.873 -6.415 -6.987 -7.590 -8.226 -8.897 -9.603 -10.348 -11.133 -11.962 -12.836 -13.761 -14.739 -15.776 -16.878 -18.050 -19.303 -20.645 -22.090 -23.654 -25.359 -27.236 -29.324 -31.685 -34.411 -37.650 -41.634 -46.494 -49.905 -48.132 -45.729 -44.273 -43.589 -43.486 -43.840 -44.550 -45.445 -46.174 -46.220 -45.313 -43.767 -42.062 -40.466 -39.064 -37.864 -36.849 -36.000 -35.297 -34.723 -34.266 -33.915 -33.661 -33.497 -33.419 -33.422 -33.503 -33.659 -33.891 -34.195 -34.574 -35.027 -35.555 -36.161 -36.846 -37.613 -38.467 -39.411 -40.449 -41.587 -42.827 -44.174 -45.626 -47.179 -48.818 -50.513 -52.214 -53.843 -55.290 -56.405 -56.983 -56.850 -55.986 -54.584 -52.917 -51.193 -49.528 -47.973 -46.547 -45.251 -44.079 -43.023 -42.076 -41.229 -40.475 -39.806 -39.218 -38.705 -38.264 -37.890 -37.581 -37.335 -37.148 -37.020 -36.950 -36.935 -36.975 -37.071 -37.222 -37.429 -37.691 -38.011 -38.389 -38.827 -39.328 -39.894 -40.528 -41.235 -42.020 -42.888 -43.847 -44.906 -46.074 -47.367 -48.800 -50.395 -52.179 -54.189 -56.474 -59.100 -62.166 -65.809 -70.211 -75.601 -81.793 -84.658 -78.827 -72.970 -68.371 -64.694 -61.682 -59.167 -57.033 -55.201 -53.615 -52.233 -51.024 -49.965 -49.037 -48.226 -47.520 -46.909 -46.387 -45.947 -45.583 -45.293 -45.071 -44.917 -44.828 -44.801 -44.837 -44.935 -45.094 -45.316 -45.599 -45.947 -46.360 -46.842 -47.394 -48.021 -48.728 -49.519 -50.403 -51.387 -52.483 -53.595 -54.706 -55.818 -56.930 0.03 -19.4487 -19.0646 -18.6843 -18.3078 -17.9352 -17.5664 -17.2014 -16.8402 -16.4829 -16.1294 -15.7798 -15.434 -15.092 -14.7538 -14.4195 -14.089 -13.7624 -13.4395 -13.1205 -12.8054 -12.494 -12.1865 -11.8828 -11.583 -11.287 -10.9948 -10.7064 -10.4219 -10.1412 -9.8644 -9.5914 -9.3222 -9.0568 -8.7953 -8.5376 -8.2837 -8.0337 -7.7875 -7.5451 -7.3065 -7.0718 -6.8409 -6.6139 -6.3907 -6.1713 -5.9557 -5.744 -5.5361 -5.332 -5.1318 -4.9354 -4.7428 -4.5541 -4.3692 -4.1881 -4.0108 -3.8374 -3.6678 -3.5021 -3.3402 -3.1821 -3.0278 -2.8774 -2.7308 -2.588 -2.4491 -2.314 -2.1827 -2.0553 -1.9317 -1.8119 -1.6959 -1.5838 -1.4755 -1.3711 -1.2705 -1.1737 -1.0807 -0.99157 -0.90627 -0.82481 -0.74717 -0.67336 -0.60339 -0.53725 -0.47494 -0.41646 -0.36181 -0.31099 -0.264 -0.22085 -0.18152 -0.14603 -0.11436 -0.086533 -0.062533 -0.042364 -0.026026 -0.01352 -0.0048443 0 0.0010131 -0.001805 -0.0084542 -0.018935 -0.033246 -0.051389 -0.073363 -0.099168 -0.1288 -0.16227 -0.19957 -0.2407 -0.28566 -0.33445 -0.38708 -0.44353 -0.50382 -0.56793 -0.63588 -0.70766 -0.78327 -0.86271 -0.94598 -1.0331 -1.124 -1.2188 -1.3174 -1.4198 -1.5261 -1.6362 -1.7501 -1.8678 -1.9894 -2.1148 -2.2441 -2.3772 -2.5141 -2.6548 -2.7994 -2.9478 -3.1 -3.2561 -3.416 -3.5797 -3.7473 -3.9187 -4.0939 -4.2729 -4.4558 -4.6425 -4.8331 -5.0274 -5.2256 -5.4277 -5.6336 -5.8433 -6.0568 -6.2742 -6.4953 -6.7204 -6.9492 -7.1819 -7.4184 -7.6588 -7.903 -8.151 -8.4028 -8.6585 -8.918 -9.1813 -9.4485 -9.7195 -9.9943 -10.273 -10.5555 -10.8418 -11.132 -11.426 -11.7238 -12.0254 -12.3309 -12.6402 -12.9534 -13.2703 -13.5911 -13.9158 -14.2442 -14.5765 -14.9127 -15.2526 -15.5964 -15.944 -16.2955 -16.6508 -17.0099 -17.3728 -17.7396 -18.1102 -18.4847 -18.8629 1.0 46324.29 EW4 VH 34.22 37.82 0.050 9.524e+09 3.117e+09 9.335e+09 3.166e+09 9.089e+09 3.219e+09 8.792e+09 3.275e+09 8.447e+09 3.332e+09 8.061e+09 3.388e+09 7.638e+09 3.441e+09 7.185e+09 3.488e+09 6.709e+09 3.527e+09 6.215e+09 3.558e+09 5.709e+09 3.578e+09 5.198e+09 3.587e+09 4.689e+09 3.585e+09 4.185e+09 3.571e+09 3.692e+09 3.546e+09 3.216e+09 3.513e+09 2.757e+09 3.472e+09 2.320e+09 3.427e+09 1.905e+09 3.380e+09 1.511e+09 3.334e+09 1.137e+09 3.293e+09 7.807e+08 3.259e+09 4.366e+08 3.233e+09 1.005e+08 3.218e+09 -2.329e+08 3.213e+09 -5.694e+08 3.217e+09 -9.131e+08 3.226e+09 -1.268e+09 3.237e+09 -1.635e+09 3.247e+09 -2.017e+09 3.249e+09 -2.412e+09 3.239e+09 -2.817e+09 3.212e+09 -3.230e+09 3.163e+09 -3.646e+09 3.089e+09 -4.059e+09 2.986e+09 -4.465e+09 2.851e+09 -4.857e+09 2.682e+09 -5.230e+09 2.479e+09 -5.579e+09 2.241e+09 -5.899e+09 1.968e+09 -6.187e+09 1.662e+09 -6.438e+09 1.325e+09 -6.652e+09 9.572e+08 -6.828e+09 5.621e+08 -6.965e+09 1.414e+08 -7.064e+09 -3.024e+08 -7.128e+09 -7.679e+08 -7.158e+09 -1.254e+09 -7.158e+09 -1.760e+09 -7.131e+09 -2.285e+09 -7.080e+09 -2.832e+09 -7.007e+09 -3.400e+09 -6.913e+09 -3.992e+09 -6.800e+09 -4.612e+09 -6.669e+09 -5.261e+09 -6.517e+09 -5.941e+09 -6.344e+09 -6.656e+09 -6.147e+09 -7.404e+09 -5.922e+09 -8.187e+09 -5.667e+09 -9.004e+09 -5.378e+09 -9.851e+09 -5.052e+09 -1.073e+10 -4.685e+09 -1.162e+10 -4.277e+09 -1.254e+10 -3.825e+09 -1.345e+10 -3.329e+09 -1.437e+10 -2.790e+09 -1.528e+10 -2.209e+09 -1.616e+10 -1.588e+09 -1.701e+10 -9.329e+08 -1.781e+10 -2.475e+08 -1.857e+10 4.631e+08 -1.925e+10 1.191e+09 -1.987e+10 1.929e+09 -2.039e+10 2.670e+09 -2.083e+10 3.406e+09 -2.117e+10 4.126e+09 -2.140e+10 4.824e+09 -2.151e+10 5.489e+09 -2.152e+10 6.114e+09 -2.140e+10 6.689e+09 -2.116e+10 7.208e+09 -2.081e+10 7.662e+09 -2.034e+10 8.047e+09 -1.976e+10 8.356e+09 -1.907e+10 8.587e+09 -1.828e+10 8.736e+09 -1.740e+10 8.802e+09 -1.643e+10 8.785e+09 -1.540e+10 8.688e+09 -1.431e+10 8.514e+09 -1.318e+10 8.266e+09 -1.202e+10 7.952e+09 -1.084e+10 7.579e+09 -9.662e+09 7.154e+09 -8.502e+09 6.688e+09 -7.373e+09 6.190e+09 -6.289e+09 5.672e+09 -5.265e+09 5.143e+09 -4.309e+09 4.615e+09 -3.434e+09 4.099e+09 -2.647e+09 3.606e+09 -1.951e+09 3.145e+09 -1.349e+09 2.727e+09 -8.385e+08 2.359e+09 -4.110e+08 2.047e+09 -5.453e+07 1.794e+09 2.490e+08 1.598e+09 5.220e+08 1.452e+09 7.877e+08 1.343e+09 1.066e+09 1.256e+09 1.370e+09 1.176e+09 1.706e+09 1.092e+09 2.072e+09 9.973e+08 2.461e+09 8.866e+08 2.863e+09 7.589e+08 3.266e+09 6.149e+08 3.659e+09 4.569e+08 4.030e+09 2.884e+08 4.367e+09 1.128e+08 4.662e+09 -6.540e+07 4.907e+09 -2.419e+08 5.094e+09 -4.127e+08 5.219e+09 -5.738e+08 5.280e+09 -7.215e+08 5.276e+09 -8.528e+08 5.206e+09 -9.649e+08 5.075e+09 -1.056e+09 4.885e+09 -1.124e+09 4.643e+09 -1.169e+09 4.355e+09 -1.189e+09 4.028e+09 -1.186e+09 3.671e+09 -1.161e+09 3.292e+09 -1.115e+09 2.900e+09 -1.050e+09 2.505e+09 -9.686e+08 2.116e+09 -8.742e+08 1.741e+09 -7.700e+08 1.387e+09 -6.598e+08 1.063e+09 -5.476e+08 7.752e+08 -4.377e+08 5.285e+08 -3.344e+08 3.273e+08 -2.427e+08 1.739e+08 -1.684e+08 6.682e+07 -1.178e+08 -3.327e+06 -9.318e+07 -6.060e+07 -8.403e+07 -1.374e+08 -7.248e+07 -2.546e+08 -4.596e+07 -4.168e+08 1.091e+06 -6.213e+08 7.064e+07 -8.632e+08 1.627e+08 -1.136e+09 2.764e+08 -1.433e+09 4.099e+08 -1.747e+09 5.605e+08 -2.070e+09 7.252e+08 -2.394e+09 9.006e+08 -2.712e+09 1.083e+09 -3.014e+09 1.267e+09 -3.294e+09 1.450e+09 -3.546e+09 1.628e+09 -3.762e+09 1.795e+09 -3.939e+09 1.949e+09 -4.072e+09 2.086e+09 -4.158e+09 2.203e+09 -4.196e+09 2.298e+09 -4.184e+09 2.368e+09 -4.125e+09 2.413e+09 -4.019e+09 2.432e+09 -3.871e+09 2.425e+09 -3.684e+09 2.391e+09 -3.464e+09 2.334e+09 -3.216e+09 2.254e+09 -2.946e+09 2.153e+09 -2.662e+09 2.034e+09 -2.369e+09 1.900e+09 -2.075e+09 1.755e+09 -1.786e+09 1.600e+09 -1.507e+09 1.441e+09 -1.243e+09 1.280e+09 -9.993e+08 1.120e+09 -7.787e+08 9.652e+08 -5.838e+08 8.178e+08 -4.159e+08 6.806e+08 -2.752e+08 5.560e+08 -1.611e+08 4.457e+08 -7.169e+07 3.507e+08 -4.117e+06 2.718e+08 4.551e+07 2.081e+08 8.209e+07 1.575e+08 1.110e+08 1.166e+08 1.370e+08 8.073e+07 1.638e+08 4.521e+07 1.927e+08 6.478e+06 2.230e+08 -3.769e+07 2.530e+08 -8.826e+07 2.804e+08 -1.453e+08 3.031e+08 -2.085e+08 3.191e+08 -2.773e+08 3.269e+08 -3.512e+08 3.253e+08 -4.300e+08 3.132e+08 -5.138e+08 2.898e+08 -6.028e+08 2.540e+08 -6.977e+08 2.047e+08 -7.993e+08 1.403e+08 -9.083e+08 5.876e+07 -1.026e+09 -4.237e+07 -1.152e+09 -1.659e+08 -1.287e+09 -3.148e+08 -1.431e+09 -4.923e+08 -1.583e+09 -7.013e+08 -1.741e+09 -9.442e+08 -1.904e+09 -1.223e+09 -2.068e+09 -1.539e+09 -2.232e+09 -1.892e+09 -2.393e+09 -2.280e+09 -2.546e+09 -2.702e+09 -2.690e+09 -3.154e+09 -2.820e+09 -3.630e+09 -2.934e+09 -4.125e+09 -3.028e+09 -4.630e+09 -3.100e+09 -5.139e+09 -3.147e+09 -5.640e+09 -3.168e+09 -6.125e+09 -3.162e+09 -6.582e+09 -3.127e+09 -7.000e+09 -3.064e+09 -7.369e+09 -2.972e+09 -7.680e+09 -2.854e+09 -7.922e+09 -2.711e+09 -8.090e+09 -2.545e+09 -8.175e+09 -2.358e+09 -8.174e+09 -2.156e+09 -8.085e+09 -1.941e+09 -7.907e+09 -1.718e+09 -7.642e+09 -1.491e+09 -7.296e+09 -1.264e+09 -6.874e+09 -1.042e+09 -6.387e+09 -8.301e+08 -5.844e+09 -6.315e+08 -5.259e+09 -4.502e+08 -4.646e+09 -2.893e+08 -4.020e+09 -1.512e+08 -3.396e+09 -3.778e+07 -2.791e+09 5.003e+07 -2.218e+09 1.123e+08 -1.693e+09 1.497e+08 -1.227e+09 1.644e+08 -8.314e+08 1.595e+08 -5.129e+08 1.400e+08 -2.763e+08 1.151e+08 -1.203e+08 1.019e+08 -2.806e+07 1.168e+08 4.504e+07 1.562e+08 1.474e+08 2.056e+08 2.978e+08 2.536e+08 4.912e+08 2.935e+08 7.138e+08 3.212e+08 9.488e+08 3.334e+08 1.178e+09 3.285e+08 1.382e+09 3.058e+08 1.544e+09 2.663e+08 1.649e+09 2.117e+08 1.685e+09 1.454e+08 1.644e+09 7.216e+07 1.525e+09 -1.856e+06 1.333e+09 -6.946e+07 1.082e+09 -1.225e+08 7.954e+08 -1.533e+08 5.070e+08 -1.598e+08 2.586e+08 -1.646e+08 8.453e+07 -2.381e+08 -7.224e+07 -4.288e+08 -3.859e+08 -7.418e+08 -1.015e+09 -1.182e+09 -2.083e+09 -1.763e+09 -3.709e+09 -2.501e+09 -6.012e+09 -3.412e+09 -9.118e+09 -4.515e+09 -1.316e+10 -5.823e+09 -1.827e+10 -7.354e+09 -2.457e+10 -9.120e+09 -3.219e+10 -1.113e+10 -4.122e+10 -1.339e+10 -5.179e+10 -1.591e+10 -6.396e+10 -1.867e+10 -7.780e+10 -2.168e+10 -9.333e+10 -2.493e+10 -1.106e+11 -2.839e+10 -1.295e+11 -3.203e+10 -1.501e+11 -3.584e+10 -1.722e+11 -3.976e+10 -1.957e+11 -4.375e+10 -2.205e+11 -4.776e+10 -2.464e+11 -5.173e+10 -2.730e+11 -5.561e+10 -3.002e+11 -5.932e+10 -3.277e+11 -6.280e+10 -3.551e+11 -6.598e+10 -3.821e+11 -6.880e+10 -4.083e+11 -6.943e+10 -4.349e+11 -7.023e+10 -4.596e+11 -7.139e+10 -4.814e+11 -7.196e+10 -5.007e+11 -7.191e+10 -5.174e+11 -7.122e+10 -5.311e+11 -6.987e+10 -5.415e+11 -6.788e+10 -5.482e+11 -6.524e+10 -5.512e+11 -6.199e+10 -5.502e+11 -5.817e+10 -5.452e+11 -5.382e+10 -5.360e+11 -4.903e+10 -5.229e+11 -4.387e+10 -5.057e+11 -3.841e+10 -4.849e+11 -3.276e+10 -4.605e+11 -2.702e+10 -4.331e+11 -2.130e+10 -4.029e+11 -1.570e+10 -3.704e+11 -1.034e+10 -3.363e+11 -5.305e+09 -3.011e+11 -7.174e+08 -2.653e+11 3.342e+09 -2.298e+11 6.792e+09 -1.950e+11 9.563e+09 -1.617e+11 1.161e+10 -1.305e+11 1.290e+10 -1.019e+11 1.344e+10 -7.644e+10 1.326e+10 -5.450e+10 1.243e+10 -3.638e+10 1.111e+10 -2.225e+10 9.586e+09 -1.204e+10 8.362e+09 -5.301e+09 8.157e+09 -8.722e+08 9.404e+09 3.163e+09 1.179e+10 8.389e+09 1.470e+10 1.522e+10 1.764e+10 2.330e+10 2.027e+10 3.192e+10 2.233e+10 4.025e+10 2.361e+10 4.745e+10 2.398e+10 5.271e+10 2.332e+10 5.533e+10 2.161e+10 5.480e+10 1.889e+10 5.089e+10 1.534e+10 4.372e+10 1.122e+10 3.387e+10 6.988e+09 2.250e+10 3.237e+09 1.142e+10 7.630e+08 3.254e+09 -6.440e+08 -1.436e+09 -4.020e+09 -1.079e+10 -1.254e+10 -3.677e+10 -2.801e+10 -8.650e+10 -5.254e+10 -1.683e+11 -8.864e+10 -2.923e+11 -1.392e+11 -4.700e+11 -2.072e+11 -7.146e+11 -2.906e+11 -1.021e+12 -4.029e+11 -1.439e+12 -5.443e+11 -1.974e+12 -7.195e+11 -2.646e+12 -9.337e+11 -3.480e+12 -1.192e+12 -4.499e+12 -1.502e+12 -5.731e+12 -1.869e+12 -7.207e+12 -2.298e+12 -8.956e+12 -2.800e+12 -1.101e+13 -3.380e+12 -1.342e+13 -4.047e+12 -1.620e+13 -4.808e+12 -1.941e+13 -5.674e+12 -2.308e+13 -6.652e+12 -2.725e+13 -7.752e+12 -3.197e+13 -8.984e+12 -3.729e+13 -1.036e+13 -4.322e+13 -1.188e+13 -4.985e+13 -1.356e+13 -5.720e+13 -1.541e+13 -6.531e+13 -1.745e+13 -7.424e+13 -1.966e+13 -8.402e+13 -2.206e+13 -9.469e+13 -2.467e+13 -1.063e+14 -2.749e+13 -1.189e+14 -3.053e+13 -1.325e+14 -3.378e+13 -1.470e+14 -3.726e+13 -1.626e+14 -4.097e+13 -1.793e+14 -4.493e+13 -1.970e+14 -4.911e+13 -2.158e+14 -5.352e+13 -2.357e+14 -5.817e+13 -2.566e+14 -6.306e+13 -2.786e+14 -6.817e+13 -3.016e+14 -7.349e+13 -3.256e+14 -7.903e+13 -3.505e+14 -8.477e+13 -3.764e+14 -9.070e+13 -4.031e+14 -9.681e+13 -4.307e+14 -1.031e+14 -4.589e+14 -1.094e+14 -4.879e+14 -1.160e+14 -5.174e+14 -1.227e+14 -5.475e+14 -1.294e+14 -5.779e+14 -1.362e+14 -6.087e+14 -1.430e+14 -6.398e+14 -1.499e+14 -6.708e+14 -1.567e+14 -7.020e+14 -1.635e+14 -7.330e+14 -1.703e+14 -7.637e+14 -1.770e+14 -7.941e+14 -1.835e+14 -8.240e+14 -1.900e+14 -8.534e+14 -1.963e+14 -8.820e+14 -2.023e+14 -9.098e+14 -2.082e+14 -9.366e+14 -2.139e+14 -9.623e+14 -2.193e+14 -9.868e+14 -2.243e+14 -1.010e+15 -2.292e+14 -1.031e+15 -2.336e+14 -1.052e+15 -2.380e+14 -1.071e+15 -2.420e+14 -1.087e+15 -2.456e+14 -1.102e+15 -2.489e+14 -1.115e+15 -2.517e+14 -1.126e+15 -2.541e+14 -1.135e+15 -2.561e+14 -1.142e+15 -2.576e+14 -1.147e+15 -2.587e+14 -1.150e+15 -2.593e+14 -1.150e+15 -2.594e+14 -1.149e+15 -2.591e+14 -1.145e+15 -2.583e+14 -1.139e+15 -2.570e+14 -1.132e+15 -2.552e+14 -1.122e+15 -2.531e+14 -1.109e+15 -2.503e+14 -1.096e+15 -2.473e+14 -1.080e+15 -2.438e+14 -1.062e+15 -2.398e+14 -1.043e+15 -2.355e+14 -1.023e+15 -2.307e+14 -9.999e+14 -2.257e+14 -9.762e+14 -2.203e+14 -9.511e+14 -2.146e+14 -9.249e+14 -2.086e+14 -8.977e+14 -2.024e+14 -8.695e+14 -1.960e+14 -8.405e+14 -1.894e+14 -8.109e+14 -1.826e+14 -7.807e+14 -1.757e+14 -7.500e+14 -1.687e+14 -7.192e+14 -1.616e+14 -6.881e+14 -1.545e+14 -6.570e+14 -1.474e+14 -6.259e+14 -1.404e+14 -5.950e+14 -1.333e+14 -5.644e+14 -1.264e+14 -5.341e+14 -1.195e+14 -5.043e+14 -1.127e+14 -4.752e+14 -1.061e+14 -4.467e+14 -9.966e+13 -4.190e+14 -9.338e+13 -3.919e+14 -8.728e+13 -3.658e+14 -8.137e+13 -3.406e+14 -7.566e+13 -3.162e+14 -7.017e+13 -2.928e+14 -6.490e+13 -2.704e+14 -5.986e+13 -2.489e+14 -5.506e+13 -2.286e+14 -5.049e+13 -2.092e+14 -4.616e+13 -1.910e+14 -4.206e+13 -1.738e+14 -3.821e+13 -1.576e+14 -3.460e+13 -1.425e+14 -3.122e+13 -1.284e+14 -2.807e+13 -1.152e+14 -2.514e+13 -1.030e+14 -2.243e+13 -9.179e+13 -1.993e+13 -8.145e+13 -1.764e+13 -7.199e+13 -1.553e+13 -6.335e+13 -1.362e+13 -5.551e+13 -1.189e+13 -4.841e+13 -1.032e+13 -4.201e+13 -8.912e+12 -3.629e+13 -7.653e+12 -3.117e+13 -6.533e+12 -2.662e+13 -5.542e+12 -2.260e+13 -4.669e+12 -1.908e+13 -3.906e+12 -1.600e+13 -3.245e+12 -1.332e+13 -2.672e+12 -1.100e+13 -2.182e+12 -9.019e+12 -1.766e+12 -7.330e+12 -1.414e+12 -5.902e+12 -1.119e+12 -4.704e+12 -8.761e+11 -3.709e+12 -6.765e+11 -2.889e+12 -5.147e+11 -2.221e+12 -3.853e+11 -1.683e+12 -2.830e+11 -1.254e+12 -2.037e+11 -9.171e+11 -1.430e+11 -6.570e+11 -9.767e+10 -4.592e+11 -6.449e+10 -3.119e+11 -4.008e+10 -2.007e+11 -2.419e+10 -1.266e+11 -1.370e+10 -7.585e+10 -7.133e+09 -4.264e+10 -3.294e+09 -2.199e+10 -1.262e+09 -1.005e+10 -3.393e+08 -3.812e+09 -2.471e+07 -1.039e+09 2.232e+07 -1.268e+08 1.414e+07 3.356e+07 1.740e+07 1.281e+08 -1.302e+07 1.429e+08 -5.359e+07 6.192e+07 -1.482e+08 -7.133e+07 -4.829e+08 -5.297e+08 -1.189e+09 -1.769e+09 -2.385e+09 -4.203e+09 -4.186e+09 -8.226e+09 -6.680e+09 -1.417e+10 -9.938e+09 -2.229e+10 -1.400e+10 -3.280e+10 -1.887e+10 -4.575e+10 -2.453e+10 -6.112e+10 -3.092e+10 -7.883e+10 -3.796e+10 -9.860e+10 -4.554e+10 -1.202e+11 -5.354e+10 -1.432e+11 -6.179e+10 -1.671e+11 -7.014e+10 -1.916e+11 -7.842e+10 -2.161e+11 -8.646e+10 -2.400e+11 -9.409e+10 -2.628e+11 -1.012e+11 -2.842e+11 -1.075e+11 -3.035e+11 -1.130e+11 -3.206e+11 -1.176e+11 -3.349e+11 -1.211e+11 -3.462e+11 -1.235e+11 -3.543e+11 -1.248e+11 -3.590e+11 -1.249e+11 -3.604e+11 -1.238e+11 -3.583e+11 -1.217e+11 -3.529e+11 -1.184e+11 -3.444e+11 -1.143e+11 -3.329e+11 -1.092e+11 -3.187e+11 -1.034e+11 -3.022e+11 -9.688e+10 -2.837e+11 -8.990e+10 -2.636e+11 -8.255e+10 -2.423e+11 -7.496e+10 -2.202e+11 -6.728e+10 -1.977e+11 -5.963e+10 -1.752e+11 -5.214e+10 -1.530e+11 -4.491e+10 -1.316e+11 -3.806e+10 -1.112e+11 -3.166e+10 -9.210e+10 -2.578e+10 -7.454e+10 -2.048e+10 -5.870e+10 -1.580e+10 -4.472e+10 -1.175e+10 -3.269e+10 -8.347e+09 -2.263e+10 -5.577e+09 -1.455e+10 -3.415e+09 -8.386e+09 -1.826e+09 -4.038e+09 -7.688e+08 -1.379e+09 -2.157e+08 -1.590e+08 -4.970e+07 4.521e+08 1.258e+08 1.777e+09 5.562e+08 4.005e+09 1.185e+09 6.909e+09 1.943e+09 1.026e+10 2.765e+09 1.383e+10 3.591e+09 1.742e+10 4.365e+09 2.082e+10 5.043e+09 2.388e+10 5.585e+09 2.645e+10 5.961e+09 2.841e+10 6.152e+09 2.969e+10 6.149e+09 3.022e+10 5.953e+09 3.000e+10 5.573e+09 2.902e+10 5.032e+09 2.736e+10 4.361e+09 2.509e+10 3.597e+09 2.233e+10 2.781e+09 1.920e+10 1.962e+09 1.585e+10 1.187e+09 1.244e+10 5.069e+08 9.140e+09 -2.888e+07 6.137e+09 -3.789e+08 3.604e+09 -5.233e+08 1.709e+09 -5.434e+08 5.633e+08 -7.915e+08 -1.619e+08 -1.525e+09 -1.326e+09 0.005 -54.470 -53.375 -52.280 -51.185 -50.091 -49.011 -48.042 -47.173 -46.395 -45.701 -45.086 -44.544 -44.073 -43.668 -43.328 -43.051 -42.835 -42.679 -42.582 -42.546 -42.569 -42.653 -42.798 -43.006 -43.280 -43.622 -44.034 -44.522 -45.089 -45.742 -46.488 -47.336 -48.297 -49.383 -50.612 -52.006 -53.592 -55.406 -57.499 -59.938 -62.821 -66.290 -70.530 -75.470 -78.244 -75.634 -71.552 -67.654 -64.134 -61.023 -58.295 -55.899 -53.787 -51.915 -50.249 -48.761 -47.428 -46.230 -45.154 -44.188 -43.322 -42.548 -41.859 -41.250 -40.717 -40.256 -39.865 -39.540 -39.281 -39.086 -38.954 -38.886 -38.881 -38.940 -39.065 -39.256 -39.515 -39.845 -40.250 -40.732 -41.296 -41.947 -42.689 -43.530 -44.475 -45.529 -46.696 -47.976 -49.361 -50.826 -52.323 -53.769 -55.056 -56.068 -56.712 -56.911 -56.575 -55.639 -54.157 -52.323 -50.353 -48.400 -46.543 -44.813 -43.218 -41.754 -40.415 -39.192 -38.076 -37.059 -36.135 -35.298 -34.543 -33.865 -33.261 -32.729 -32.266 -31.871 -31.543 -31.281 -31.086 -30.958 -30.898 -30.909 -30.992 -31.152 -31.393 -31.720 -32.140 -32.663 -33.300 -34.064 -34.974 -36.055 -37.336 -38.860 -40.676 -42.835 -45.333 -47.891 -49.582 -49.614 -48.725 -47.984 -47.926 -48.885 -51.459 -56.078 -52.151 -45.261 -40.355 -36.624 -33.575 -30.976 -28.702 -26.675 -24.843 -23.170 -21.631 -20.207 -18.882 -17.644 -16.484 -15.395 -14.368 -13.400 -12.485 -11.620 -10.801 -10.025 -9.289 -8.592 -7.931 -7.304 -6.710 -6.147 -5.615 -5.111 -4.635 -4.187 -3.764 -3.367 -2.994 -2.645 -2.320 -2.018 -1.738 -1.480 -1.244 -1.029 -0.836 -0.662 -0.510 -0.377 -0.265 -0.172 -0.100 -0.047 -0.014 0.000 -0.006 -0.031 -0.075 -0.139 -0.222 -0.326 -0.449 -0.592 -0.756 -0.940 -1.145 -1.371 -1.619 -1.888 -2.179 -2.492 -2.829 -3.189 -3.573 -3.981 -4.415 -4.876 -5.363 -5.879 -6.423 -6.998 -7.604 -8.243 -8.917 -9.627 -10.376 -11.166 -11.999 -12.879 -13.810 -14.794 -15.838 -16.947 -18.128 -19.389 -20.741 -22.196 -23.773 -25.491 -27.382 -29.487 -31.866 -34.613 -37.876 -41.887 -46.778 -50.225 -48.493 -46.138 -44.735 -44.109 -44.060 -44.442 -45.097 -45.744 -45.936 -45.303 -43.945 -42.284 -40.647 -39.168 -37.881 -36.779 -35.845 -35.059 -34.407 -33.873 -33.447 -33.120 -32.884 -32.733 -32.662 -32.668 -32.748 -32.901 -33.124 -33.417 -33.781 -34.216 -34.723 -35.304 -35.961 -36.699 -37.521 -38.433 -39.440 -40.551 -41.773 -43.119 -44.599 -46.227 -48.017 -49.983 -52.127 -54.436 -56.848 -59.214 -61.227 -62.482 -62.657 -61.751 -60.082 -58.062 -55.989 -54.018 -52.212 -50.587 -49.138 -47.852 -46.715 -45.714 -44.836 -44.070 -43.408 -42.842 -42.367 -41.976 -41.667 -41.435 -41.278 -41.194 -41.182 -41.240 -41.370 -41.571 -41.844 -42.191 -42.615 -43.119 -43.706 -44.382 -45.152 -46.024 -47.004 -48.102 -49.326 -50.680 -52.161 -53.744 -55.364 -56.887 -58.115 -58.885 -59.207 -59.274 -59.324 -59.543 -60.076 -61.064 -62.711 -65.395 -69.417 -71.386 -66.022 -61.268 -57.840 -55.207 -53.084 -51.318 -49.817 -48.526 -47.405 -46.427 -45.572 -44.825 -44.175 -43.611 -43.128 -42.718 -42.378 -42.104 -41.892 -41.741 -41.648 -41.611 -41.631 -41.705 -41.835 -42.019 -42.259 -42.555 -42.907 -43.319 -43.791 -44.326 -44.927 -45.598 -46.343 -47.168 -48.079 -49.084 -50.193 -51.317 -52.441 -53.565 -54.688 0.03 -18.873 -18.5006 -18.1319 -17.7669 -17.4057 -17.0481 -16.6943 -16.3441 -15.9977 -15.655 -15.316 -14.9807 -14.6491 -14.3213 -13.9971 -13.6766 -13.3599 -13.0469 -12.7376 -12.4319 -12.13 -11.8319 -11.5374 -11.2466 -10.9596 -10.6762 -10.3966 -10.1206 -9.8484 -9.5799 -9.3151 -9.0541 -8.7967 -8.543 -8.2931 -8.0468 -7.8043 -7.5655 -7.3304 -7.099 -6.8713 -6.6473 -6.427 -6.2105 -5.9976 -5.7885 -5.583 -5.3813 -5.1833 -4.989 -4.7984 -4.6116 -4.4284 -4.249 -4.0732 -3.9012 -3.7329 -3.5682 -3.4073 -3.2501 -3.0967 -2.9469 -2.8008 -2.6585 -2.5198 -2.3849 -2.2537 -2.1262 -2.0024 -1.8823 -1.7659 -1.6533 -1.5443 -1.4391 -1.3375 -1.2397 -1.1456 -1.0552 -0.9685 -0.88552 -0.80625 -0.73068 -0.65883 -0.59069 -0.52626 -0.46554 -0.40853 -0.35523 -0.30565 -0.25977 -0.2176 -0.17914 -0.1444 -0.11336 -0.086035 -0.06242 -0.042515 -0.026321 -0.013837 -0.0050631 0 0.0013526 -0.0010052 -0.0070735 -0.016852 -0.030341 -0.047541 -0.068451 -0.093071 -0.1214 -0.15344 -0.1892 -0.22866 -0.27183 -0.31871 -0.36931 -0.42361 -0.48163 -0.54335 -0.60879 -0.67793 -0.75079 -0.82735 -0.90763 -0.99162 -1.0793 -1.1707 -1.2658 -1.3647 -1.4672 -1.5735 -1.6834 -1.7971 -1.9145 -2.0356 -2.1604 -2.2889 -2.4211 -2.557 -2.6967 -2.84 -2.9871 -3.1379 -3.2924 -3.4506 -3.6125 -3.7781 -3.9474 -4.1205 -4.2972 -4.4777 -4.6618 -4.8497 -5.0413 -5.2366 -5.4356 -5.6383 -5.8448 -6.0549 -6.2688 -6.4863 -6.7076 -6.9326 -7.1613 -7.3937 -7.6298 -7.8696 -8.1132 -8.3604 -8.6114 -8.866 -9.1244 -9.3865 -9.6523 -9.9218 -10.195 -10.472 -10.7526 -11.037 -11.325 -11.6168 -11.9123 -12.2115 -12.5144 -12.821 -13.1313 -13.4453 -13.7631 -14.0845 -14.4097 -14.7386 -15.0712 -15.4075 -15.7475 -16.0912 -16.4386 -16.7898 -17.1446 -17.5032 -17.8654 -18.2314 1.0 46324.29 EW5 HH 37.8 40.37 0.050 1.005e+08 -1.192e+08 7.669e+07 -8.643e+07 5.733e+07 -6.026e+07 4.173e+07 -3.984e+07 2.937e+07 -2.442e+07 1.982e+07 -1.333e+07 1.270e+07 -5.865e+06 7.764e+06 -1.301e+06 4.803e+06 1.351e+06 3.356e+06 3.543e+06 2.425e+06 6.680e+06 1.050e+06 1.124e+07 -1.216e+06 1.710e+07 -4.542e+06 2.403e+07 -9.002e+06 3.181e+07 -1.471e+07 4.028e+07 -2.172e+07 4.929e+07 -3.015e+07 5.871e+07 -4.014e+07 6.847e+07 -5.187e+07 7.852e+07 -6.551e+07 8.882e+07 -8.132e+07 9.936e+07 -9.957e+07 1.101e+08 -1.205e+08 1.211e+08 -1.445e+08 1.323e+08 -1.720e+08 1.438e+08 -2.032e+08 1.554e+08 -2.385e+08 1.671e+08 -2.785e+08 1.791e+08 -3.233e+08 1.910e+08 -3.735e+08 2.030e+08 -4.293e+08 2.150e+08 -4.911e+08 2.268e+08 -5.591e+08 2.383e+08 -6.336e+08 2.495e+08 -7.147e+08 2.601e+08 -8.025e+08 2.701e+08 -8.971e+08 2.792e+08 -9.983e+08 2.873e+08 -1.106e+09 2.941e+08 -1.220e+09 2.994e+08 -1.339e+09 3.030e+08 -1.464e+09 3.046e+08 -1.593e+09 3.039e+08 -1.725e+09 3.006e+08 -1.861e+09 2.945e+08 -1.998e+09 2.852e+08 -2.135e+09 2.724e+08 -2.272e+09 2.560e+08 -2.406e+09 2.357e+08 -2.537e+09 2.114e+08 -2.662e+09 1.829e+08 -2.780e+09 1.502e+08 -2.890e+09 1.134e+08 -2.990e+09 7.256e+07 -3.079e+09 2.798e+07 -3.154e+09 -2.006e+07 -3.215e+09 -7.103e+07 -3.261e+09 -1.244e+08 -3.290e+09 -1.797e+08 -3.303e+09 -2.360e+08 -3.297e+09 -2.927e+08 -3.274e+09 -3.488e+08 -3.233e+09 -4.035e+08 -3.173e+09 -4.559e+08 -3.096e+09 -5.052e+08 -3.003e+09 -5.503e+08 -2.894e+09 -5.906e+08 -2.770e+09 -6.252e+08 -2.634e+09 -6.535e+08 -2.486e+09 -6.751e+08 -2.329e+09 -6.895e+08 -2.164e+09 -6.966e+08 -1.994e+09 -6.961e+08 -1.820e+09 -6.882e+08 -1.645e+09 -6.730e+08 -1.471e+09 -6.509e+08 -1.299e+09 -6.223e+08 -1.133e+09 -5.880e+08 -9.724e+08 -5.485e+08 -8.204e+08 -5.048e+08 -6.782e+08 -4.577e+08 -5.473e+08 -4.084e+08 -4.288e+08 -3.579e+08 -3.237e+08 -3.073e+08 -2.327e+08 -2.579e+08 -1.563e+08 -2.109e+08 -9.466e+07 -1.677e+08 -4.712e+07 -1.300e+08 -1.202e+07 -9.920e+07 1.418e+07 -7.669e+07 3.765e+07 -6.230e+07 6.571e+07 -5.310e+07 1.038e+08 -4.430e+07 1.546e+08 -3.130e+07 2.184e+08 -1.089e+07 2.947e+08 1.897e+07 3.825e+08 5.957e+07 4.807e+08 1.118e+08 5.878e+08 1.762e+08 7.024e+08 2.531e+08 8.233e+08 3.429e+08 9.487e+08 4.454e+08 1.077e+09 5.602e+08 1.206e+09 6.872e+08 1.335e+09 8.255e+08 1.462e+09 9.744e+08 1.584e+09 1.133e+09 1.701e+09 1.300e+09 1.810e+09 1.474e+09 1.911e+09 1.653e+09 2.002e+09 1.836e+09 2.081e+09 2.020e+09 2.147e+09 2.204e+09 2.200e+09 2.386e+09 2.238e+09 2.564e+09 2.262e+09 2.734e+09 2.270e+09 2.895e+09 2.263e+09 3.046e+09 2.241e+09 3.183e+09 2.204e+09 3.305e+09 2.153e+09 3.410e+09 2.088e+09 3.497e+09 2.011e+09 3.564e+09 1.923e+09 3.610e+09 1.825e+09 3.636e+09 1.718e+09 3.639e+09 1.605e+09 3.621e+09 1.485e+09 3.582e+09 1.362e+09 3.522e+09 1.237e+09 3.442e+09 1.111e+09 3.343e+09 9.852e+08 3.227e+09 8.621e+08 3.095e+09 7.425e+08 2.950e+09 6.275e+08 2.793e+09 5.185e+08 2.627e+09 4.161e+08 2.454e+09 3.212e+08 2.275e+09 2.344e+08 2.094e+09 1.563e+08 1.912e+09 8.702e+07 1.732e+09 2.675e+07 1.556e+09 -2.469e+07 1.385e+09 -6.743e+07 1.221e+09 -1.018e+08 1.066e+09 -1.281e+08 9.196e+08 -1.471e+08 7.842e+08 -1.593e+08 6.602e+08 -1.655e+08 5.481e+08 -1.666e+08 4.481e+08 -1.632e+08 3.604e+08 -1.564e+08 2.844e+08 -1.471e+08 2.197e+08 -1.360e+08 1.657e+08 -1.240e+08 1.213e+08 -1.117e+08 8.552e+07 -9.966e+07 5.711e+07 -8.821e+07 3.487e+07 -7.751e+07 1.764e+07 -6.754e+07 4.442e+06 -5.813e+07 -5.531e+06 -4.908e+07 -1.282e+07 -4.025e+07 -1.776e+07 -3.157e+07 -2.055e+07 -2.315e+07 -2.134e+07 -1.525e+07 -2.038e+07 -8.189e+06 -1.803e+07 -2.256e+06 -1.492e+07 2.672e+06 -1.182e+07 7.617e+06 -9.264e+06 1.456e+07 -6.764e+06 2.561e+07 -2.556e+06 4.223e+07 5.705e+06 6.529e+07 2.031e+07 9.527e+07 4.338e+07 1.325e+08 7.696e+07 1.771e+08 1.229e+08 2.288e+08 1.830e+08 2.873e+08 2.587e+08 3.519e+08 3.513e+08 4.217e+08 4.615e+08 4.958e+08 5.898e+08 5.726e+08 7.362e+08 6.507e+08 9.002e+08 7.286e+08 1.081e+09 8.044e+08 1.277e+09 8.763e+08 1.485e+09 9.426e+08 1.705e+09 1.001e+09 1.932e+09 1.051e+09 2.164e+09 1.090e+09 2.396e+09 1.117e+09 2.626e+09 1.130e+09 2.849e+09 1.128e+09 3.061e+09 1.112e+09 3.259e+09 1.079e+09 3.437e+09 1.031e+09 3.593e+09 9.669e+08 3.724e+09 8.875e+08 3.826e+09 7.936e+08 3.897e+09 6.862e+08 3.936e+09 5.669e+08 3.940e+09 4.375e+08 3.909e+09 2.998e+08 3.844e+09 1.562e+08 3.745e+09 8.967e+06 3.615e+09 -1.394e+08 3.455e+09 -2.863e+08 3.269e+09 -4.297e+08 3.061e+09 -5.674e+08 2.836e+09 -6.978e+08 2.599e+09 -8.201e+08 2.355e+09 -9.344e+08 2.109e+09 -1.042e+09 1.868e+09 -1.145e+09 1.635e+09 -1.248e+09 1.412e+09 -1.355e+09 1.202e+09 -1.475e+09 1.001e+09 -1.611e+09 8.066e+08 -1.771e+09 6.114e+08 -1.958e+09 4.077e+08 -2.173e+09 1.875e+08 -2.415e+09 -5.606e+07 -2.682e+09 -3.283e+08 -2.966e+09 -6.317e+08 -3.263e+09 -9.658e+08 -3.563e+09 -1.328e+09 -3.857e+09 -1.713e+09 -4.137e+09 -2.112e+09 -4.392e+09 -2.516e+09 -4.614e+09 -2.914e+09 -4.792e+09 -3.291e+09 -4.918e+09 -3.636e+09 -4.985e+09 -3.934e+09 -4.987e+09 -4.172e+09 -4.919e+09 -4.338e+09 -4.778e+09 -4.421e+09 -4.565e+09 -4.414e+09 -4.280e+09 -4.311e+09 -3.930e+09 -4.111e+09 -3.521e+09 -3.817e+09 -3.064e+09 -3.436e+09 -2.574e+09 -2.981e+09 -2.068e+09 -2.471e+09 -1.565e+09 -1.930e+09 -1.089e+09 -1.387e+09 -6.662e+08 -8.808e+08 -3.256e+08 -4.519e+08 -9.887e+07 -1.493e+08 -4.922e+06 -1.622e+07 1.231e+08 1.417e+08 4.462e+08 5.582e+08 1.026e+09 1.342e+09 1.903e+09 2.563e+09 3.112e+09 4.290e+09 4.691e+09 6.597e+09 6.677e+09 9.556e+09 9.103e+09 1.323e+10 1.200e+10 1.770e+10 1.539e+10 2.302e+10 1.931e+10 2.925e+10 2.378e+10 3.645e+10 2.880e+10 4.465e+10 3.439e+10 5.390e+10 4.053e+10 6.421e+10 4.725e+10 7.560e+10 5.450e+10 8.807e+10 6.228e+10 1.016e+11 7.056e+10 1.162e+11 7.929e+10 1.317e+11 8.844e+10 1.482e+11 9.794e+10 1.656e+11 1.077e+11 1.837e+11 1.178e+11 2.025e+11 1.279e+11 2.219e+11 1.382e+11 2.416e+11 1.484e+11 2.616e+11 1.585e+11 2.817e+11 1.684e+11 3.017e+11 1.780e+11 3.215e+11 1.873e+11 3.408e+11 1.960e+11 3.596e+11 2.041e+11 3.775e+11 2.115e+11 3.944e+11 2.182e+11 4.101e+11 2.241e+11 4.245e+11 2.290e+11 4.374e+11 2.329e+11 4.486e+11 2.359e+11 4.579e+11 2.377e+11 4.654e+11 2.385e+11 4.709e+11 2.382e+11 4.743e+11 2.367e+11 4.755e+11 2.342e+11 4.746e+11 2.306e+11 4.715e+11 2.259e+11 4.663e+11 2.203e+11 4.590e+11 2.138e+11 4.496e+11 2.063e+11 4.384e+11 1.920e+11 4.316e+11 1.867e+11 4.150e+11 1.773e+11 3.988e+11 1.675e+11 3.812e+11 1.573e+11 3.625e+11 1.468e+11 3.428e+11 1.361e+11 3.224e+11 1.255e+11 3.014e+11 1.148e+11 2.801e+11 1.043e+11 2.586e+11 9.408e+10 2.373e+11 8.416e+10 2.161e+11 7.466e+10 1.954e+11 6.564e+10 1.753e+11 5.715e+10 1.560e+11 4.925e+10 1.376e+11 4.197e+10 1.202e+11 3.534e+10 1.039e+11 2.937e+10 8.881e+10 2.406e+10 7.497e+10 1.940e+10 6.241e+10 1.538e+10 5.116e+10 1.196e+10 4.120e+10 9.107e+09 3.250e+10 6.775e+09 2.504e+10 4.912e+09 1.875e+10 3.462e+09 1.356e+10 2.369e+09 9.381e+09 1.571e+09 6.126e+09 1.010e+09 3.691e+09 6.296e+08 1.977e+09 3.782e+08 8.741e+08 2.209e+08 2.706e+08 1.665e+08 4.028e+06 2.538e+08 -2.084e+08 4.517e+08 -5.788e+08 7.405e+08 -1.093e+09 1.133e+09 -1.692e+09 1.647e+09 -2.325e+09 2.301e+09 -2.950e+09 3.113e+09 -3.535e+09 4.110e+09 -4.058e+09 5.317e+09 -4.498e+09 6.772e+09 -4.841e+09 8.520e+09 -5.067e+09 1.061e+10 -5.153e+09 1.309e+10 -5.069e+09 1.603e+10 -4.779e+09 1.947e+10 -4.239e+09 2.347e+10 -3.402e+09 2.806e+10 -2.218e+09 3.327e+10 -6.413e+08 3.911e+10 1.373e+09 4.559e+10 3.860e+09 5.266e+10 6.841e+09 6.030e+10 1.033e+10 6.845e+10 1.432e+10 7.701e+10 1.879e+10 8.589e+10 2.370e+10 9.498e+10 2.901e+10 1.041e+11 3.462e+10 1.132e+11 4.046e+10 1.220e+11 4.643e+10 1.303e+11 5.240e+10 1.381e+11 5.825e+10 1.452e+11 6.386e+10 1.512e+11 6.908e+10 1.562e+11 7.379e+10 1.600e+11 7.786e+10 1.623e+11 8.117e+10 1.632e+11 8.361e+10 1.626e+11 8.510e+10 1.603e+11 8.556e+10 1.565e+11 8.495e+10 1.510e+11 8.326e+10 1.441e+11 8.049e+10 1.358e+11 7.670e+10 1.261e+11 7.195e+10 1.155e+11 6.635e+10 1.039e+11 6.003e+10 9.181e+10 5.317e+10 7.936e+10 4.596e+10 6.687e+10 3.859e+10 5.465e+10 3.128e+10 4.301e+10 2.425e+10 3.225e+10 1.774e+10 2.268e+10 1.197e+10 1.456e+10 7.164e+09 8.121e+09 3.488e+09 3.560e+09 1.093e+09 1.014e+09 -3.221e+07 -1.859e+08 -8.673e+08 -1.954e+09 -2.787e+09 -5.523e+09 -6.194e+09 -1.090e+10 -1.093e+10 -1.784e+10 -1.679e+10 -2.602e+10 -2.352e+10 -3.505e+10 -3.082e+10 -4.445e+10 -3.829e+10 -5.368e+10 -4.553e+10 -6.221e+10 -5.209e+10 -6.944e+10 -5.752e+10 -7.484e+10 -6.139e+10 -7.788e+10 -6.329e+10 -7.817e+10 -6.291e+10 -7.542e+10 -6.006e+10 -6.954e+10 -5.470e+10 -6.069e+10 -4.701e+10 -4.934e+10 -3.743e+10 -3.631e+10 -2.671e+10 -2.292e+10 -1.600e+10 -1.099e+10 -6.877e+09 -2.948e+09 -1.371e+09 1.404e+09 2.466e+09 1.160e+10 1.306e+10 3.709e+10 3.740e+10 8.393e+10 8.028e+10 1.588e+11 1.473e+11 2.698e+11 2.452e+11 4.258e+11 3.813e+11 6.370e+11 5.642e+11 9.154e+11 8.034e+11 1.274e+12 1.109e+12 1.727e+12 1.494e+12 2.290e+12 1.970e+12 2.982e+12 2.552e+12 3.819e+12 3.255e+12 4.825e+12 4.094e+12 6.018e+12 5.088e+12 7.423e+12 6.254e+12 8.924e+12 7.494e+12 1.080e+13 9.041e+12 1.296e+13 1.082e+13 1.544e+13 1.285e+13 1.825e+13 1.515e+13 2.144e+13 1.775e+13 2.502e+13 2.067e+13 2.903e+13 2.393e+13 3.349e+13 2.756e+13 3.845e+13 3.157e+13 4.392e+13 3.599e+13 4.993e+13 4.083e+13 5.652e+13 4.613e+13 6.369e+13 5.189e+13 7.149e+13 5.815e+13 7.993e+13 6.490e+13 8.902e+13 7.216e+13 9.879e+13 7.995e+13 1.093e+14 8.827e+13 1.205e+14 9.714e+13 1.323e+14 1.065e+14 1.449e+14 1.165e+14 1.582e+14 1.270e+14 1.722e+14 1.380e+14 1.869e+14 1.495e+14 2.021e+14 1.616e+14 2.182e+14 1.742e+14 2.349e+14 1.872e+14 2.522e+14 2.006e+14 2.700e+14 2.144e+14 2.884e+14 2.288e+14 3.074e+14 2.434e+14 3.269e+14 2.585e+14 3.468e+14 2.738e+14 3.671e+14 2.894e+14 3.877e+14 3.051e+14 4.086e+14 3.210e+14 4.295e+14 3.370e+14 4.506e+14 3.528e+14 4.717e+14 3.688e+14 4.928e+14 3.846e+14 5.137e+14 4.003e+14 5.344e+14 4.158e+14 5.548e+14 4.310e+14 5.749e+14 4.458e+14 5.945e+14 4.603e+14 6.135e+14 4.742e+14 6.319e+14 4.876e+14 6.496e+14 5.005e+14 6.665e+14 5.126e+14 6.826e+14 5.241e+14 6.976e+14 5.349e+14 7.117e+14 5.448e+14 7.247e+14 5.539e+14 7.365e+14 5.622e+14 7.472e+14 5.694e+14 7.566e+14 5.757e+14 7.647e+14 5.811e+14 7.714e+14 5.854e+14 7.768e+14 5.887e+14 7.809e+14 5.910e+14 7.835e+14 5.921e+14 7.846e+14 5.923e+14 7.844e+14 5.913e+14 7.827e+14 5.894e+14 7.796e+14 5.863e+14 7.751e+14 5.823e+14 7.692e+14 5.772e+14 7.620e+14 5.711e+14 7.534e+14 5.642e+14 7.436e+14 5.563e+14 7.327e+14 5.476e+14 7.206e+14 5.382e+14 7.075e+14 5.280e+14 6.933e+14 5.170e+14 6.782e+14 5.053e+14 6.621e+14 4.929e+14 6.452e+14 4.800e+14 6.275e+14 4.665e+14 6.092e+14 4.526e+14 5.902e+14 4.383e+14 5.708e+14 4.236e+14 5.509e+14 4.086e+14 5.306e+14 3.934e+14 5.101e+14 3.780e+14 4.894e+14 3.626e+14 4.686e+14 3.470e+14 4.478e+14 3.315e+14 4.270e+14 3.159e+14 4.063e+14 3.006e+14 3.859e+14 2.854e+14 3.655e+14 2.704e+14 3.457e+14 2.556e+14 3.260e+14 2.411e+14 3.068e+14 2.269e+14 2.882e+14 2.132e+14 2.699e+14 1.997e+14 2.523e+14 1.868e+14 2.352e+14 1.742e+14 2.187e+14 1.620e+14 2.030e+14 1.505e+14 1.878e+14 1.393e+14 1.733e+14 1.286e+14 1.595e+14 1.185e+14 1.463e+14 1.089e+14 1.339e+14 9.979e+13 1.222e+14 9.118e+13 1.112e+14 8.308e+13 1.008e+14 7.547e+13 9.114e+13 6.835e+13 8.213e+13 6.171e+13 7.377e+13 5.555e+13 6.601e+13 4.984e+13 5.887e+13 4.455e+13 5.230e+13 3.969e+13 4.629e+13 3.522e+13 4.079e+13 3.114e+13 3.580e+13 2.743e+13 3.128e+13 2.405e+13 2.720e+13 2.099e+13 2.353e+13 1.824e+13 2.026e+13 1.577e+13 1.735e+13 1.357e+13 1.477e+13 1.160e+13 1.250e+13 9.874e+12 1.051e+13 8.348e+12 8.776e+12 7.013e+12 7.274e+12 5.850e+12 5.885e+12 4.766e+12 4.797e+12 3.914e+12 3.873e+12 3.185e+12 3.096e+12 2.568e+12 2.447e+12 2.049e+12 1.910e+12 1.616e+12 1.470e+12 1.258e+12 1.114e+12 9.659e+11 8.296e+11 7.292e+11 6.050e+11 5.402e+11 4.308e+11 3.916e+11 2.980e+11 2.765e+11 1.990e+11 1.891e+11 1.271e+11 1.244e+11 7.667e+10 7.773e+10 4.268e+10 4.535e+10 2.113e+10 2.398e+10 8.601e+09 1.084e+10 2.356e+09 3.687e+09 8.831e+07 6.479e+08 -6.496e+08 -2.093e+08 -2.159e+09 -1.414e+09 -3.999e+09 -3.263e+09 -5.580e+09 -5.185e+09 -6.571e+09 -6.787e+09 -6.838e+09 -7.839e+09 -6.400e+09 -8.253e+09 -5.386e+09 -8.044e+09 -3.996e+09 -7.312e+09 -2.462e+09 -6.214e+09 -1.010e+09 -4.969e+09 2.275e+08 -3.814e+09 1.330e+09 -2.958e+09 2.683e+09 -2.431e+09 4.794e+09 -1.974e+09 8.012e+09 -1.219e+09 1.249e+10 1.197e+08 1.825e+10 2.213e+09 2.526e+10 5.152e+09 3.343e+10 8.973e+09 4.261e+10 1.366e+10 5.264e+10 1.917e+10 6.333e+10 2.543e+10 0.005 -53.028 -52.003 -50.979 -49.954 -48.996 -48.137 -47.371 -46.689 -46.086 -45.557 -45.100 -44.711 -44.387 -44.128 -43.931 -43.796 -43.723 -43.712 -43.763 -43.877 -44.056 -44.303 -44.619 -45.007 -45.474 -46.022 -46.660 -47.394 -48.235 -49.194 -50.288 -51.537 -52.968 -54.617 -56.539 -58.812 -61.562 -65.014 -69.656 -76.742 -86.239 -78.867 -74.530 -71.607 -68.595 -65.356 -62.203 -59.331 -56.782 -54.530 -52.538 -50.767 -49.187 -47.770 -46.497 -45.352 -44.319 -43.390 -42.554 -41.805 -41.137 -40.544 -40.023 -39.570 -39.183 -38.860 -38.600 -38.400 -38.261 -38.183 -38.165 -38.209 -38.314 -38.484 -38.719 -39.022 -39.396 -39.846 -40.375 -40.989 -41.694 -42.499 -43.411 -44.443 -45.606 -46.913 -48.382 -50.027 -51.860 -53.887 -56.100 -58.476 -61.012 -63.788 -66.828 -68.241 -65.398 -60.913 -56.909 -53.598 -50.811 -48.417 -46.326 -44.480 -42.837 -41.365 -40.042 -38.848 -37.772 -36.801 -35.926 -35.140 -34.438 -33.815 -33.268 -32.792 -32.387 -32.051 -31.784 -31.585 -31.455 -31.393 -31.404 -31.488 -31.649 -31.892 -32.221 -32.645 -33.172 -33.812 -34.582 -35.498 -36.586 -37.878 -39.421 -41.277 -43.535 -46.298 -49.578 -52.754 -54.204 -53.530 -52.773 -53.242 -55.888 -58.824 -55.302 -47.549 -42.361 -38.450 -35.267 -32.559 -30.192 -28.082 -26.177 -24.439 -22.841 -21.363 -19.987 -18.703 -17.499 -16.368 -15.303 -14.298 -13.348 -12.450 -11.598 -10.791 -10.025 -9.299 -8.609 -7.955 -7.334 -6.745 -6.186 -5.657 -5.156 -4.683 -4.236 -3.814 -3.418 -3.045 -2.696 -2.370 -2.067 -1.786 -1.526 -1.288 -1.071 -0.874 -0.698 -0.542 -0.406 -0.289 -0.192 -0.115 -0.058 -0.019 0.000 -0.000 -0.020 -0.058 -0.115 -0.192 -0.289 -0.405 -0.541 -0.697 -0.873 -1.069 -1.287 -1.525 -1.785 -2.066 -2.369 -2.695 -3.045 -3.418 -3.815 -4.237 -4.686 -5.160 -5.663 -6.194 -6.755 -7.347 -7.971 -8.630 -9.325 -10.058 -10.832 -11.648 -12.512 -13.425 -14.392 -15.419 -16.512 -17.677 -18.924 -20.263 -21.711 -23.285 -25.011 -26.926 -29.084 -31.569 -34.532 -38.278 -43.626 -55.646 -55.949 -48.194 -44.257 -42.406 -41.509 -41.214 -41.360 -41.854 -42.605 -43.451 -44.091 -44.131 -43.398 -42.114 -40.640 -39.212 -37.928 -36.813 -35.860 -35.057 -34.389 -33.841 -33.403 -33.065 -32.820 -32.660 -32.583 -32.583 -32.657 -32.805 -33.024 -33.313 -33.674 -34.106 -34.613 -35.194 -35.854 -36.596 -37.425 -38.347 -39.369 -40.502 -41.756 -43.145 -44.689 -46.410 -48.336 -50.506 -52.965 -55.769 -58.965 -62.525 -66.073 -68.474 -68.475 -66.487 -63.714 -60.821 -58.099 -55.653 -53.496 -51.605 -49.952 -48.503 -47.235 -46.125 -45.155 -44.310 -43.579 -42.951 -42.420 -41.977 -41.619 -41.340 -41.138 -41.010 -40.954 -40.969 -41.055 -41.210 -41.437 -41.736 -42.109 -42.559 -43.089 -43.703 -44.408 -45.208 -46.114 -47.135 -48.282 -49.570 -51.015 -52.634 -54.440 -56.430 -58.557 -60.678 -62.519 -63.811 -64.582 -65.195 -66.104 -67.743 -70.522 -72.925 -69.616 -64.691 -60.712 -57.617 -55.112 -53.021 -51.236 -49.689 -48.335 -47.141 -46.085 -45.148 -44.316 -43.578 -42.925 -42.351 -41.848 -41.412 -41.040 -40.728 -40.474 -40.275 -40.129 -40.036 -39.993 -40.000 -40.057 -40.163 -40.317 -40.521 -40.775 -41.079 -41.434 -41.842 -42.303 -42.821 -43.398 -44.035 -44.737 -45.508 -46.353 -47.277 -48.253 -49.230 -50.206 0.03 -17.3688 -17.0262 -16.6871 -16.3514 -16.0191 -15.6902 -15.3647 -15.0427 -14.724 -14.4088 -14.0969 -13.7885 -13.4835 -13.1819 -12.8837 -12.5889 -12.2975 -12.0096 -11.725 -11.4439 -11.1662 -10.8919 -10.621 -10.3535 -10.0894 -9.8287 -9.5715 -9.3176 -9.0672 -8.8202 -8.5766 -8.3364 -8.0996 -7.8662 -7.6362 -7.4097 -7.1865 -6.9668 -6.7504 -6.5375 -6.328 -6.1219 -5.9193 -5.72 -5.5241 -5.3317 -5.1426 -4.957 -4.7748 -4.596 -4.4206 -4.2486 -4.08 -3.9149 -3.7531 -3.5948 -3.4399 -3.2884 -3.1403 -2.9956 -2.8543 -2.7164 -2.5819 -2.4509 -2.3233 -2.199 -2.0782 -1.9608 -1.8468 -1.7362 -1.6291 -1.5253 -1.4249 -1.328 -1.2345 -1.1444 -1.0576 -0.97435 -0.89447 -0.818 -0.74493 -0.67528 -0.60904 -0.54621 -0.48679 -0.43079 -0.37819 -0.32901 -0.28323 -0.24087 -0.20192 -0.16637 -0.13424 -0.10553 -0.080217 -0.05832 -0.039834 -0.024759 -0.013095 -0.004842 0 0.001431 -0.00054909 -0.0059402 -0.014742 -0.026955 -0.04258 -0.061615 -0.084061 -0.10992 -0.13919 -0.17187 -0.20796 -0.24746 -0.29037 -0.33669 -0.38643 -0.43957 -0.49613 -0.5561 -0.61947 -0.68626 -0.75646 -0.83008 -0.9071 -0.98753 -1.0714 -1.1586 -1.2493 -1.3434 -1.4409 -1.5418 -1.6461 -1.7538 -1.8649 -1.9795 -2.0974 -2.2188 -2.3436 -2.4718 -2.6034 -2.7384 -2.8768 -3.0186 -3.1639 -3.3125 -3.4646 -3.6201 -3.7789 -3.9412 -4.107 -4.2761 -4.4486 -4.6245 -4.8039 -4.9867 -5.1728 -5.3624 -5.5554 -5.7518 -5.9517 -6.1549 -6.3615 -6.5716 -6.785 -7.0019 -7.2222 -7.4459 -7.673 -7.9035 -8.1374 -8.3748 -8.6155 -8.8597 -9.1073 -9.3583 -9.6127 -9.8705 -10.1317 -10.3963 -10.6644 -10.9358 -11.2107 -11.4889 -11.7706 -12.0557 -12.3442 -12.6361 -12.9315 -13.2302 -13.5324 -13.8379 -14.1469 -14.4593 -14.7751 -15.0943 -15.4169 -15.7429 -16.0724 -16.4052 -16.7415 1.0 43505.68 EW5 HV 37.8 40.37 0.050 -4.906e+07 -1.667e+08 -2.702e+07 -1.260e+08 -1.139e+07 -9.223e+07 -1.106e+06 -6.469e+07 4.861e+06 -4.286e+07 7.526e+06 -2.623e+07 7.901e+06 -1.423e+07 7.033e+06 -6.242e+06 6.049e+06 -1.290e+06 5.856e+06 2.496e+06 6.276e+06 7.600e+06 6.111e+06 1.561e+07 4.135e+06 2.718e+07 -7.441e+05 4.263e+07 -9.582e+06 6.222e+07 -2.366e+07 8.637e+07 -4.409e+07 1.153e+08 -7.205e+07 1.491e+08 -1.088e+08 1.881e+08 -1.556e+08 2.325e+08 -2.134e+08 2.823e+08 -2.835e+08 3.376e+08 -3.668e+08 3.985e+08 -4.639e+08 4.650e+08 -5.757e+08 5.369e+08 -7.027e+08 6.143e+08 -8.452e+08 6.972e+08 -1.003e+09 7.852e+08 -1.178e+09 8.786e+08 -1.368e+09 9.768e+08 -1.574e+09 1.080e+09 -1.795e+09 1.187e+09 -2.032e+09 1.299e+09 -2.284e+09 1.413e+09 -2.551e+09 1.531e+09 -2.831e+09 1.651e+09 -3.125e+09 1.772e+09 -3.430e+09 1.892e+09 -3.747e+09 2.011e+09 -4.073e+09 2.128e+09 -4.406e+09 2.239e+09 -4.746e+09 2.345e+09 -5.089e+09 2.442e+09 -5.433e+09 2.529e+09 -5.775e+09 2.604e+09 -6.111e+09 2.665e+09 -6.438e+09 2.711e+09 -6.753e+09 2.739e+09 -7.051e+09 2.749e+09 -7.329e+09 2.740e+09 -7.581e+09 2.710e+09 -7.805e+09 2.660e+09 -7.996e+09 2.590e+09 -8.151e+09 2.500e+09 -8.268e+09 2.391e+09 -8.342e+09 2.265e+09 -8.373e+09 2.124e+09 -8.359e+09 1.970e+09 -8.299e+09 1.805e+09 -8.194e+09 1.632e+09 -8.046e+09 1.454e+09 -7.856e+09 1.274e+09 -7.625e+09 1.094e+09 -7.359e+09 9.167e+08 -7.059e+09 7.452e+08 -6.730e+09 5.813e+08 -6.377e+09 4.271e+08 -6.004e+09 2.842e+08 -5.617e+09 1.537e+08 -5.220e+09 3.681e+07 -4.818e+09 -6.622e+07 -4.415e+09 -1.552e+08 -4.016e+09 -2.301e+08 -3.625e+09 -2.911e+08 -3.245e+09 -3.389e+08 -2.879e+09 -3.742e+08 -2.530e+09 -3.976e+08 -2.200e+09 -4.102e+08 -1.891e+09 -4.130e+08 -1.604e+09 -4.069e+08 -1.339e+09 -3.931e+08 -1.099e+09 -3.726e+08 -8.839e+08 -3.465e+08 -6.928e+08 -3.159e+08 -5.265e+08 -2.822e+08 -3.847e+08 -2.465e+08 -2.667e+08 -2.101e+08 -1.721e+08 -1.747e+08 -9.930e+07 -1.421e+08 -4.580e+07 -1.146e+08 -6.967e+06 -9.472e+07 2.511e+07 -8.372e+07 6.005e+07 -8.004e+07 1.054e+08 -7.937e+07 1.650e+08 -7.691e+07 2.394e+08 -6.889e+07 3.280e+08 -5.276e+07 4.289e+08 -2.674e+07 5.405e+08 1.039e+07 6.603e+08 5.943e+07 7.859e+08 1.208e+08 9.151e+08 1.949e+08 1.045e+09 2.813e+08 1.173e+09 3.795e+08 1.297e+09 4.889e+08 1.415e+09 6.081e+08 1.523e+09 7.356e+08 1.620e+09 8.701e+08 1.705e+09 1.009e+09 1.775e+09 1.151e+09 1.830e+09 1.294e+09 1.869e+09 1.435e+09 1.892e+09 1.572e+09 1.898e+09 1.703e+09 1.888e+09 1.826e+09 1.863e+09 1.939e+09 1.823e+09 2.040e+09 1.770e+09 2.128e+09 1.705e+09 2.202e+09 1.630e+09 2.260e+09 1.547e+09 2.303e+09 1.456e+09 2.329e+09 1.360e+09 2.340e+09 1.260e+09 2.334e+09 1.158e+09 2.313e+09 1.055e+09 2.278e+09 9.520e+08 2.228e+09 8.506e+08 2.166e+09 7.516e+08 2.092e+09 6.556e+08 2.008e+09 5.635e+08 1.915e+09 4.757e+08 1.814e+09 3.926e+08 1.706e+09 3.147e+08 1.594e+09 2.422e+08 1.478e+09 1.752e+08 1.360e+09 1.142e+08 1.241e+09 5.906e+07 1.122e+09 9.993e+06 1.005e+09 -3.292e+07 8.916e+08 -6.972e+07 7.822e+08 -1.005e+08 6.783e+08 -1.255e+08 5.809e+08 -1.450e+08 4.908e+08 -1.595e+08 4.087e+08 -1.697e+08 3.351e+08 -1.764e+08 2.702e+08 -1.806e+08 2.136e+08 -1.834e+08 1.649e+08 -1.858e+08 1.230e+08 -1.884e+08 8.654e+07 -1.917e+08 5.406e+07 -1.955e+08 2.416e+07 -1.993e+08 -4.185e+06 -2.022e+08 -3.146e+07 -2.033e+08 -5.769e+07 -2.016e+08 -8.240e+07 -1.963e+08 -1.048e+08 -1.871e+08 -1.239e+08 -1.737e+08 -1.388e+08 -1.564e+08 -1.486e+08 -1.357e+08 -1.526e+08 -1.125e+08 -1.507e+08 -8.793e+07 -1.428e+08 -6.330e+07 -1.295e+08 -3.998e+07 -1.119e+08 -1.933e+07 -9.154e+07 -2.357e+06 -7.027e+07 1.058e+07 -5.035e+07 2.061e+07 -3.372e+07 3.112e+07 -2.048e+07 4.694e+07 -7.257e+06 7.171e+07 1.214e+07 1.067e+08 4.387e+07 1.515e+08 9.259e+07 2.055e+08 1.617e+08 2.674e+08 2.541e+08 3.361e+08 3.718e+08 4.099e+08 5.164e+08 4.871e+08 6.891e+08 5.661e+08 8.906e+08 6.449e+08 1.120e+09 7.218e+08 1.378e+09 7.949e+08 1.664e+09 8.623e+08 1.974e+09 9.224e+08 2.308e+09 9.735e+08 2.663e+09 1.014e+09 3.036e+09 1.042e+09 3.423e+09 1.057e+09 3.821e+09 1.057e+09 4.224e+09 1.040e+09 4.630e+09 1.005e+09 5.032e+09 9.520e+08 5.425e+09 8.785e+08 5.805e+09 7.838e+08 6.166e+09 6.672e+08 6.501e+09 5.276e+08 6.807e+09 3.648e+08 7.077e+09 1.786e+08 7.306e+09 -3.093e+07 7.490e+09 -2.631e+08 7.626e+09 -5.168e+08 7.710e+09 -7.906e+08 7.741e+09 -1.083e+09 7.717e+09 -1.391e+09 7.638e+09 -1.712e+09 7.507e+09 -2.044e+09 7.326e+09 -2.385e+09 7.098e+09 -2.732e+09 6.830e+09 -3.085e+09 6.526e+09 -3.442e+09 6.192e+09 -3.804e+09 5.835e+09 -4.174e+09 5.460e+09 -4.553e+09 5.071e+09 -4.946e+09 4.670e+09 -5.357e+09 4.260e+09 -5.789e+09 3.839e+09 -6.245e+09 3.403e+09 -6.727e+09 2.951e+09 -7.233e+09 2.476e+09 -7.762e+09 1.975e+09 -8.307e+09 1.445e+09 -8.858e+09 8.836e+08 -9.404e+09 2.920e+08 -9.934e+09 -3.261e+08 -1.043e+10 -9.643e+08 -1.088e+10 -1.615e+09 -1.127e+10 -2.266e+09 -1.159e+10 -2.904e+09 -1.182e+10 -3.516e+09 -1.194e+10 -4.086e+09 -1.196e+10 -4.599e+09 -1.186e+10 -5.040e+09 -1.164e+10 -5.395e+09 -1.129e+10 -5.651e+09 -1.082e+10 -5.800e+09 -1.023e+10 -5.832e+09 -9.529e+09 -5.745e+09 -8.728e+09 -5.538e+09 -7.841e+09 -5.215e+09 -6.886e+09 -4.785e+09 -5.885e+09 -4.259e+09 -4.862e+09 -3.658e+09 -3.849e+09 -3.004e+09 -2.875e+09 -2.327e+09 -1.979e+09 -1.662e+09 -1.201e+09 -1.050e+09 -5.850e+08 -5.380e+08 -1.790e+08 -1.788e+08 -1.139e+07 -2.093e+07 2.041e+08 1.583e+08 7.451e+08 6.306e+08 1.715e+09 1.521e+09 3.174e+09 2.909e+09 5.181e+09 4.873e+09 7.791e+09 7.496e+09 1.107e+10 1.086e+10 1.505e+10 1.506e+10 1.979e+10 2.015e+10 2.534e+10 2.623e+10 3.173e+10 3.337e+10 3.897e+10 4.163e+10 4.708e+10 5.106e+10 5.607e+10 6.169e+10 6.590e+10 7.355e+10 7.657e+10 8.667e+10 8.801e+10 1.010e+11 1.002e+11 1.166e+11 1.130e+11 1.333e+11 1.264e+11 1.511e+11 1.403e+11 1.699e+11 1.545e+11 1.896e+11 1.690e+11 2.101e+11 1.836e+11 2.313e+11 1.982e+11 2.529e+11 2.127e+11 2.748e+11 2.268e+11 2.968e+11 2.406e+11 3.187e+11 2.538e+11 3.403e+11 2.663e+11 3.615e+11 2.780e+11 3.819e+11 2.888e+11 4.015e+11 2.986e+11 4.199e+11 3.073e+11 4.371e+11 3.148e+11 4.529e+11 3.210e+11 4.670e+11 3.260e+11 4.794e+11 3.296e+11 4.899e+11 3.318e+11 4.984e+11 3.326e+11 5.048e+11 3.320e+11 5.091e+11 3.301e+11 5.112e+11 3.267e+11 5.111e+11 3.221e+11 5.088e+11 3.161e+11 5.043e+11 3.089e+11 4.976e+11 3.005e+11 4.889e+11 2.910e+11 4.781e+11 2.805e+11 4.655e+11 2.678e+11 4.536e+11 2.550e+11 4.390e+11 2.420e+11 4.213e+11 2.285e+11 4.023e+11 2.145e+11 3.822e+11 2.002e+11 3.610e+11 1.856e+11 3.392e+11 1.710e+11 3.168e+11 1.564e+11 2.940e+11 1.421e+11 2.711e+11 1.280e+11 2.483e+11 1.144e+11 2.257e+11 1.014e+11 2.037e+11 8.898e+10 1.823e+11 7.731e+10 1.618e+11 6.646e+10 1.422e+11 5.647e+10 1.238e+11 4.737e+10 1.066e+11 3.921e+10 9.067e+10 3.197e+10 7.615e+10 2.564e+10 6.302e+10 2.020e+10 5.133e+10 1.559e+10 4.105e+10 1.177e+10 3.214e+10 8.670e+09 2.456e+10 6.210e+09 1.823e+10 4.310e+09 1.305e+10 2.890e+09 8.938e+09 1.866e+09 5.772e+09 1.156e+09 3.437e+09 6.857e+08 1.816e+09 3.874e+08 7.900e+08 2.116e+08 2.383e+08 1.499e+08 -1.265e+06 2.203e+08 -1.908e+08 3.867e+08 -5.159e+08 6.335e+08 -9.586e+08 9.753e+08 -1.466e+09 1.431e+09 -1.995e+09 2.018e+09 -2.509e+09 2.760e+09 -2.986e+09 3.683e+09 -3.410e+09 4.818e+09 -3.765e+09 6.207e+09 -4.037e+09 7.899e+09 -4.208e+09 9.945e+09 -4.255e+09 1.240e+10 -4.148e+09 1.534e+10 -3.849e+09 1.880e+10 -3.318e+09 2.283e+10 -2.510e+09 2.749e+10 -1.381e+09 3.280e+10 1.098e+08 3.879e+10 1.999e+09 4.545e+10 4.317e+09 5.277e+10 7.078e+09 6.072e+10 1.029e+10 6.926e+10 1.396e+10 7.829e+10 1.804e+10 8.775e+10 2.251e+10 9.750e+10 2.732e+10 1.074e+11 3.239e+10 1.173e+11 3.764e+10 1.271e+11 4.297e+10 1.365e+11 4.827e+10 1.453e+11 5.342e+10 1.534e+11 5.829e+10 1.606e+11 6.274e+10 1.665e+11 6.664e+10 1.712e+11 6.986e+10 1.743e+11 7.229e+10 1.758e+11 7.382e+10 1.756e+11 7.437e+10 1.735e+11 7.387e+10 1.696e+11 7.229e+10 1.639e+11 6.964e+10 1.564e+11 6.595e+10 1.473e+11 6.130e+10 1.367e+11 5.579e+10 1.249e+11 4.958e+10 1.122e+11 4.284e+10 9.886e+10 3.579e+10 8.521e+10 2.867e+10 7.161e+10 2.171e+10 5.844e+10 1.516e+10 4.608e+10 9.268e+09 3.486e+10 4.246e+09 2.514e+10 2.469e+08 1.720e+10 -2.700e+09 1.121e+10 -4.813e+09 7.066e+09 -6.702e+09 4.099e+09 -9.310e+09 1.191e+09 -1.344e+10 -2.643e+09 -1.937e+10 -7.893e+09 -2.697e+10 -1.464e+10 -3.595e+10 -2.271e+10 -4.593e+10 -3.177e+10 -5.648e+10 -4.143e+10 -6.712e+10 -5.117e+10 -7.733e+10 -6.049e+10 -8.654e+10 -6.882e+10 -9.422e+10 -7.561e+10 -9.980e+10 -8.036e+10 -1.028e+11 -8.262e+10 -1.028e+11 -8.203e+10 -9.956e+10 -7.839e+10 -9.291e+10 -7.169e+10 -8.297e+10 -6.213e+10 -7.012e+10 -5.024e+10 -5.507e+10 -3.686e+10 -3.891e+10 -2.327e+10 -2.322e+10 -1.124e+10 -1.009e+10 -3.092e+09 -2.140e+09 1.115e+09 3.029e+09 1.056e+10 1.669e+10 3.442e+10 4.814e+10 7.841e+10 1.033e+11 1.487e+11 1.892e+11 2.527e+11 3.137e+11 3.985e+11 4.861e+11 5.957e+11 7.164e+11 8.551e+11 1.017e+12 1.189e+12 1.399e+12 1.609e+12 1.878e+12 2.132e+12 2.469e+12 2.772e+12 3.190e+12 3.546e+12 4.057e+12 4.473e+12 5.092e+12 5.573e+12 6.314e+12 6.864e+12 7.744e+12 8.100e+12 9.105e+12 9.788e+12 1.097e+13 1.173e+13 1.311e+13 1.396e+13 1.555e+13 1.647e+13 1.831e+13 1.932e+13 2.142e+13 2.251e+13 2.492e+13 2.607e+13 2.881e+13 3.002e+13 3.313e+13 3.440e+13 3.791e+13 3.922e+13 4.317e+13 4.449e+13 4.894e+13 5.026e+13 5.523e+13 5.651e+13 6.207e+13 6.328e+13 6.948e+13 7.060e+13 7.747e+13 7.845e+13 8.606e+13 8.685e+13 9.526e+13 9.584e+13 1.051e+14 1.054e+14 1.155e+14 1.156e+14 1.266e+14 1.263e+14 1.383e+14 1.375e+14 1.507e+14 1.494e+14 1.637e+14 1.618e+14 1.773e+14 1.749e+14 1.915e+14 1.884e+14 2.062e+14 2.024e+14 2.216e+14 2.169e+14 2.375e+14 2.320e+14 2.539e+14 2.474e+14 2.708e+14 2.634e+14 2.882e+14 2.798e+14 3.060e+14 2.965e+14 3.242e+14 3.135e+14 3.427e+14 3.307e+14 3.614e+14 3.482e+14 3.804e+14 3.658e+14 3.994e+14 3.835e+14 4.187e+14 4.011e+14 4.379e+14 4.187e+14 4.569e+14 4.361e+14 4.760e+14 4.535e+14 4.947e+14 4.704e+14 5.132e+14 4.871e+14 5.313e+14 5.033e+14 5.491e+14 5.190e+14 5.663e+14 5.342e+14 5.828e+14 5.486e+14 5.988e+14 5.624e+14 6.140e+14 5.754e+14 6.284e+14 5.876e+14 6.420e+14 5.989e+14 6.545e+14 6.091e+14 6.661e+14 6.184e+14 6.767e+14 6.266e+14 6.861e+14 6.337e+14 6.944e+14 6.397e+14 7.015e+14 6.445e+14 7.074e+14 6.483e+14 7.120e+14 6.507e+14 7.153e+14 6.520e+14 7.174e+14 6.521e+14 7.181e+14 6.510e+14 7.176e+14 6.487e+14 7.158e+14 6.453e+14 7.128e+14 6.407e+14 7.084e+14 6.351e+14 7.029e+14 6.283e+14 6.961e+14 6.205e+14 6.882e+14 6.118e+14 6.792e+14 6.021e+14 6.691e+14 5.914e+14 6.581e+14 5.800e+14 6.461e+14 5.678e+14 6.332e+14 5.549e+14 6.194e+14 5.412e+14 6.050e+14 5.268e+14 5.897e+14 5.120e+14 5.738e+14 4.967e+14 5.573e+14 4.809e+14 5.403e+14 4.648e+14 5.229e+14 4.483e+14 5.051e+14 4.316e+14 4.870e+14 4.147e+14 4.687e+14 3.976e+14 4.501e+14 3.805e+14 4.315e+14 3.634e+14 4.129e+14 3.463e+14 3.943e+14 3.293e+14 3.757e+14 3.125e+14 3.574e+14 2.959e+14 3.392e+14 2.795e+14 3.213e+14 2.634e+14 3.036e+14 2.477e+14 2.864e+14 2.324e+14 2.695e+14 2.174e+14 2.530e+14 2.030e+14 2.370e+14 1.889e+14 2.215e+14 1.755e+14 2.066e+14 1.625e+14 1.921e+14 1.502e+14 1.782e+14 1.383e+14 1.648e+14 1.270e+14 1.522e+14 1.164e+14 1.401e+14 1.063e+14 1.285e+14 9.677e+13 1.176e+14 8.786e+13 1.074e+14 7.951e+13 9.772e+13 7.172e+13 8.864e+13 6.448e+13 8.016e+13 5.777e+13 7.228e+13 5.159e+13 6.494e+13 4.590e+13 5.814e+13 4.068e+13 5.188e+13 3.591e+13 4.611e+13 3.157e+13 4.082e+13 2.765e+13 3.599e+13 2.410e+13 3.161e+13 2.091e+13 2.763e+13 1.806e+13 2.405e+13 1.551e+13 2.082e+13 1.326e+13 1.794e+13 1.126e+13 1.537e+13 9.511e+12 1.310e+13 7.980e+12 1.110e+13 6.651e+12 9.339e+12 5.501e+12 7.806e+12 4.360e+12 6.257e+12 3.545e+12 5.148e+12 2.855e+12 4.199e+12 2.275e+12 3.393e+12 1.793e+12 2.714e+12 1.395e+12 2.146e+12 1.069e+12 1.675e+12 8.069e+11 1.289e+12 5.975e+11 9.762e+11 4.331e+11 7.254e+11 3.061e+11 5.274e+11 2.098e+11 3.735e+11 1.385e+11 2.562e+11 8.718e+10 1.689e+11 5.154e+10 1.057e+11 2.789e+10 6.167e+10 1.321e+10 3.250e+10 4.942e+09 1.454e+10 1.065e+09 4.796e+09 -1.651e+08 7.250e+08 -6.173e+08 -5.058e+08 -1.759e+09 -2.513e+09 -2.988e+09 -5.513e+09 -3.889e+09 -8.680e+09 -4.252e+09 -1.144e+10 -4.020e+09 -1.343e+10 -3.238e+09 -1.451e+10 -2.026e+09 -1.467e+10 -5.436e+08 -1.401e+10 1.052e+09 -1.273e+10 2.637e+09 -1.108e+10 4.175e+09 -9.325e+09 5.758e+09 -7.645e+09 7.617e+09 -6.095e+09 1.005e+10 -4.542e+09 1.334e+10 -2.695e+09 1.764e+10 -2.169e+08 2.298e+10 3.173e+09 2.932e+10 7.672e+09 3.657e+10 1.339e+10 4.456e+10 2.035e+10 5.314e+10 2.852e+10 6.212e+10 3.781e+10 0.005 -52.433 -51.379 -50.324 -49.269 -48.283 -47.397 -46.603 -45.894 -45.264 -44.709 -44.223 -43.805 -43.450 -43.158 -42.927 -42.756 -42.643 -42.590 -42.595 -42.660 -42.786 -42.974 -43.227 -43.546 -43.936 -44.400 -44.944 -45.574 -46.299 -47.128 -48.075 -49.157 -50.398 -51.828 -53.497 -55.475 -57.877 -60.921 -65.084 -71.618 -80.515 -72.608 -68.100 -65.877 -64.762 -64.307 -64.203 -64.051 -63.353 -61.845 -59.774 -57.558 -55.447 -53.528 -51.814 -50.289 -48.933 -47.729 -46.658 -45.707 -44.865 -44.122 -43.471 -42.906 -42.422 -42.015 -41.683 -41.422 -41.232 -41.112 -41.060 -41.079 -41.167 -41.327 -41.561 -41.871 -42.260 -42.734 -43.296 -43.954 -44.713 -45.583 -46.574 -47.694 -48.955 -50.364 -51.923 -53.620 -55.418 -57.244 -59.010 -60.680 -62.360 -64.336 -66.797 -67.886 -64.922 -60.439 -56.500 -53.284 -50.600 -48.308 -46.314 -44.558 -42.998 -41.603 -40.350 -39.223 -38.208 -37.295 -36.476 -35.743 -35.093 -34.520 -34.022 -33.597 -33.242 -32.957 -32.743 -32.600 -32.528 -32.529 -32.606 -32.764 -33.005 -33.338 -33.769 -34.308 -34.969 -35.767 -36.725 -37.872 -39.247 -40.902 -42.909 -45.339 -48.156 -50.782 -51.844 -50.912 -49.528 -48.705 -48.745 -49.961 -53.177 -56.542 -53.349 -45.855 -40.874 -37.133 -34.090 -31.501 -29.236 -27.214 -25.386 -23.716 -22.178 -20.753 -19.425 -18.184 -17.020 -15.924 -14.892 -13.916 -12.994 -12.120 -11.292 -10.507 -9.761 -9.053 -8.381 -7.743 -7.137 -6.562 -6.017 -5.501 -5.012 -4.550 -4.113 -3.702 -3.314 -2.951 -2.610 -2.292 -1.996 -1.722 -1.469 -1.237 -1.026 -0.835 -0.664 -0.513 -0.382 -0.270 -0.178 -0.104 -0.051 -0.016 0.000 -0.003 -0.026 -0.067 -0.127 -0.206 -0.305 -0.423 -0.561 -0.719 -0.897 -1.095 -1.313 -1.553 -1.813 -2.096 -2.400 -2.726 -3.076 -3.449 -3.846 -4.269 -4.717 -5.191 -5.693 -6.223 -6.783 -7.373 -7.996 -8.653 -9.346 -10.077 -10.848 -11.662 -12.522 -13.431 -14.395 -15.417 -16.505 -17.664 -18.905 -20.238 -21.678 -23.243 -24.960 -26.864 -29.010 -31.481 -34.429 -38.157 -43.485 -55.481 -55.758 -47.973 -44.000 -42.108 -41.166 -40.820 -40.916 -41.373 -42.132 -43.102 -44.088 -44.710 -44.558 -43.595 -42.181 -40.685 -39.298 -38.083 -37.046 -36.174 -35.450 -34.859 -34.388 -34.024 -33.760 -33.588 -33.503 -33.500 -33.576 -33.729 -33.956 -34.258 -34.635 -35.086 -35.614 -36.220 -36.906 -37.676 -38.534 -39.484 -40.532 -41.683 -42.942 -44.317 -45.811 -47.427 -49.164 -51.017 -52.978 -55.041 -57.204 -59.434 -61.437 -62.291 -61.071 -58.474 -55.714 -53.221 -51.042 -49.139 -47.470 -46.000 -44.698 -43.544 -42.519 -41.610 -40.805 -40.094 -39.470 -38.927 -38.459 -38.062 -37.733 -37.467 -37.264 -37.120 -37.035 -37.007 -37.036 -37.120 -37.261 -37.458 -37.712 -38.023 -38.395 -38.827 -39.323 -39.886 -40.518 -41.226 -42.013 -42.887 -43.856 -44.929 -46.120 -47.443 -48.919 -50.575 -52.447 -54.585 -57.061 -59.984 -63.534 -68.008 -73.814 -79.525 -79.939 -79.090 -77.922 -73.994 -69.179 -65.054 -61.714 -58.972 -56.678 -54.726 -53.045 -51.585 -50.310 -49.191 -48.207 -47.342 -46.583 -45.920 -45.345 -44.850 -44.432 -44.084 -43.804 -43.587 -43.433 -43.338 -43.302 -43.323 -43.400 -43.533 -43.723 -43.969 -44.272 -44.634 -45.055 -45.539 -46.086 -46.701 -47.387 -48.149 -48.992 -49.923 -50.912 -51.901 -52.890 0.03 -18.0465 -17.6912 -17.3394 -16.9912 -16.6465 -16.3053 -15.9677 -15.6336 -15.303 -14.9759 -14.6524 -14.3324 -14.016 -13.7031 -13.3937 -13.0878 -12.7855 -12.4867 -12.1915 -11.8997 -11.6115 -11.3269 -11.0458 -10.7682 -10.4941 -10.2236 -9.9566 -9.6931 -9.4331 -9.1767 -8.9239 -8.6745 -8.4287 -8.1864 -7.9477 -7.7125 -7.4808 -7.2527 -7.028 -6.807 -6.5894 -6.3754 -6.1649 -5.9579 -5.7545 -5.5546 -5.3583 -5.1654 -4.9761 -4.7904 -4.6081 -4.4294 -4.2543 -4.0826 -3.9145 -3.75 -3.5889 -3.4314 -3.2774 -3.127 -2.9801 -2.8367 -2.6969 -2.5606 -2.4278 -2.2985 -2.1728 -2.0506 -1.932 -1.8168 -1.7053 -1.5972 -1.4927 -1.3917 -1.2942 -1.2003 -1.1099 -1.023 -0.9397 -0.8599 -0.78363 -0.71089 -0.64169 -0.57601 -0.51387 -0.45527 -0.40019 -0.34865 -0.30064 -0.25616 -0.21521 -0.17779 -0.14391 -0.11356 -0.08674 -0.063453 -0.043698 -0.027476 -0.014785 -0.0056264 0 0.0020943 0.00065654 -0.0043133 -0.012815 -0.024849 -0.040416 -0.059514 -0.082144 -0.10831 -0.138 -0.17123 -0.20799 -0.24828 -0.2921 -0.33946 -0.39034 -0.44476 -0.50271 -0.5642 -0.62921 -0.69776 -0.76984 -0.84545 -0.9246 -1.0073 -1.0935 -1.1832 -1.2765 -1.3733 -1.4736 -1.5775 -1.6849 -1.7958 -1.9103 -2.0283 -2.1498 -2.2749 -2.4035 -2.5356 -2.6713 -2.8105 -2.9532 -3.0994 -3.2492 -3.4025 -3.5594 -3.7198 -3.8837 -4.0511 -4.2221 -4.3966 -4.5747 -4.7562 -4.9413 -5.13 -5.3221 -5.5179 -5.7171 -5.9199 -6.1262 -6.336 -6.5493 -6.7662 -6.9867 -7.2106 -7.4381 -7.6691 -7.9037 -8.1418 -8.3834 -8.6286 -8.8773 -9.1295 -9.3852 -9.6445 -9.9073 -10.1737 -10.4435 -10.7169 -10.9939 -11.2744 -11.5584 -11.8459 -12.137 -12.4316 -12.7297 -13.0314 -13.3366 -13.6453 -13.9576 -14.2734 -14.5927 -14.9155 -15.2419 -15.5719 -15.9053 -16.2423 -16.5828 -16.9269 -17.2745 1.0 43505.68 EW5 VV 37.8 40.37 0.050 -9.159e+06 4.238e+07 -1.208e+06 3.953e+07 5.527e+06 3.964e+07 1.195e+07 4.239e+07 1.849e+07 4.755e+07 2.519e+07 5.506e+07 3.190e+07 6.507e+07 3.834e+07 7.789e+07 4.422e+07 9.393e+07 4.925e+07 1.138e+08 5.307e+07 1.380e+08 5.533e+07 1.674e+08 5.560e+07 2.027e+08 5.338e+07 2.448e+08 4.814e+07 2.944e+08 3.917e+07 3.525e+08 2.592e+07 4.199e+08 7.813e+06 4.969e+08 -1.571e+07 5.842e+08 -4.518e+07 6.823e+08 -8.096e+07 7.914e+08 -1.234e+08 9.117e+08 -1.727e+08 1.043e+09 -2.290e+08 1.186e+09 -2.922e+08 1.341e+09 -3.622e+08 1.506e+09 -4.389e+08 1.682e+09 -5.221e+08 1.869e+09 -6.115e+08 2.066e+09 -7.067e+08 2.272e+09 -8.075e+08 2.488e+09 -9.137e+08 2.713e+09 -1.025e+09 2.945e+09 -1.141e+09 3.184e+09 -1.262e+09 3.429e+09 -1.387e+09 3.678e+09 -1.516e+09 3.930e+09 -1.649e+09 4.183e+09 -1.786e+09 4.435e+09 -1.926e+09 4.684e+09 -2.069e+09 4.927e+09 -2.214e+09 5.161e+09 -2.361e+09 5.383e+09 -2.509e+09 5.591e+09 -2.656e+09 5.780e+09 -2.802e+09 5.948e+09 -2.945e+09 6.090e+09 -3.084e+09 6.205e+09 -3.216e+09 6.289e+09 -3.339e+09 6.340e+09 -3.453e+09 6.356e+09 -3.553e+09 6.335e+09 -3.639e+09 6.277e+09 -3.708e+09 6.181e+09 -3.758e+09 6.048e+09 -3.789e+09 5.880e+09 -3.798e+09 5.677e+09 -3.784e+09 5.444e+09 -3.748e+09 5.184e+09 -3.688e+09 4.899e+09 -3.606e+09 4.595e+09 -3.503e+09 4.277e+09 -3.380e+09 3.948e+09 -3.238e+09 3.613e+09 -3.080e+09 3.278e+09 -2.907e+09 2.945e+09 -2.723e+09 2.619e+09 -2.530e+09 2.305e+09 -2.330e+09 2.005e+09 -2.128e+09 1.722e+09 -1.926e+09 1.458e+09 -1.725e+09 1.214e+09 -1.529e+09 9.925e+08 -1.340e+09 7.935e+08 -1.160e+09 6.170e+08 -9.895e+08 4.632e+08 -8.313e+08 3.316e+08 -6.861e+08 2.212e+08 -5.552e+08 1.310e+08 -4.394e+08 5.965e+07 -3.392e+08 5.134e+06 -2.552e+08 -3.482e+07 -1.875e+08 -6.353e+07 -1.350e+08 -8.548e+07 -9.483e+07 -1.063e+08 -6.187e+07 -1.316e+08 -2.922e+07 -1.656e+08 9.559e+06 -2.096e+08 5.931e+07 -2.633e+08 1.231e+08 -3.250e+08 2.027e+08 -3.929e+08 2.990e+08 -4.648e+08 4.123e+08 -5.390e+08 5.425e+08 -6.130e+08 6.890e+08 -6.850e+08 8.513e+08 -7.528e+08 1.028e+09 -8.143e+08 1.217e+09 -8.675e+08 1.418e+09 -9.105e+08 1.627e+09 -9.416e+08 1.843e+09 -9.592e+08 2.062e+09 -9.620e+08 2.282e+09 -9.491e+08 2.499e+09 -9.198e+08 2.710e+09 -8.739e+08 2.912e+09 -8.115e+08 3.101e+09 -7.334e+08 3.274e+09 -6.405e+08 3.430e+09 -5.342e+08 3.564e+09 -4.165e+08 3.676e+09 -2.893e+08 3.763e+09 -1.550e+08 3.825e+09 -1.613e+07 3.862e+09 1.248e+08 3.872e+09 2.651e+08 3.856e+09 4.022e+08 3.816e+09 5.340e+08 3.753e+09 6.581e+08 3.669e+09 7.727e+08 3.564e+09 8.763e+08 3.443e+09 9.676e+08 3.306e+09 1.046e+09 3.157e+09 1.110e+09 2.997e+09 1.160e+09 2.830e+09 1.197e+09 2.657e+09 1.220e+09 2.480e+09 1.230e+09 2.301e+09 1.228e+09 2.122e+09 1.214e+09 1.945e+09 1.191e+09 1.771e+09 1.158e+09 1.601e+09 1.118e+09 1.437e+09 1.070e+09 1.278e+09 1.018e+09 1.127e+09 9.602e+08 9.835e+08 8.994e+08 8.485e+08 8.362e+08 7.222e+08 7.715e+08 6.054e+08 7.063e+08 4.984e+08 6.414e+08 4.014e+08 5.777e+08 3.147e+08 5.159e+08 2.382e+08 4.568e+08 1.718e+08 4.010e+08 1.150e+08 3.491e+08 6.751e+07 3.017e+08 2.829e+07 2.591e+08 -3.639e+06 2.216e+08 -2.948e+07 1.891e+08 -5.058e+07 1.613e+08 -6.817e+07 1.375e+08 -8.318e+07 1.170e+08 -9.620e+07 9.871e+07 -1.073e+08 8.183e+07 -1.161e+08 6.574e+07 -1.222e+08 5.008e+07 -1.247e+08 3.488e+07 -1.233e+08 2.043e+07 -1.174e+08 7.203e+06 -1.072e+08 -4.215e+06 -9.318e+07 -1.324e+07 -7.613e+07 -1.944e+07 -5.742e+07 -2.255e+07 -3.876e+07 -2.268e+07 -2.205e+07 -2.040e+07 -8.846e+06 -1.710e+07 1.363e+06 -1.503e+07 1.326e+07 -1.576e+07 3.400e+07 -1.783e+07 6.882e+07 -1.776e+07 1.208e+08 -1.222e+07 1.921e+08 1.722e+06 2.839e+08 2.683e+07 3.975e+08 6.583e+07 5.331e+08 1.213e+08 6.905e+08 1.955e+08 8.693e+08 2.906e+08 1.068e+09 4.083e+08 1.286e+09 5.499e+08 1.520e+09 7.163e+08 1.768e+09 9.080e+08 2.028e+09 1.124e+09 2.296e+09 1.365e+09 2.570e+09 1.630e+09 2.847e+09 1.917e+09 3.123e+09 2.224e+09 3.395e+09 2.549e+09 3.660e+09 2.890e+09 3.914e+09 3.244e+09 4.153e+09 3.609e+09 4.374e+09 3.980e+09 4.573e+09 4.354e+09 4.747e+09 4.729e+09 4.891e+09 5.099e+09 5.003e+09 5.462e+09 5.079e+09 5.814e+09 5.115e+09 6.151e+09 5.108e+09 6.468e+09 5.057e+09 6.763e+09 4.959e+09 7.031e+09 4.812e+09 7.269e+09 4.616e+09 7.473e+09 4.372e+09 7.641e+09 4.081e+09 7.771e+09 3.744e+09 7.861e+09 3.366e+09 7.911e+09 2.950e+09 7.920e+09 2.501e+09 7.890e+09 2.025e+09 7.824e+09 1.526e+09 7.724e+09 1.010e+09 7.596e+09 4.817e+08 7.444e+09 -5.601e+07 7.274e+09 -6.008e+08 7.092e+09 -1.152e+09 6.902e+09 -1.710e+09 6.709e+09 -2.278e+09 6.515e+09 -2.858e+09 6.322e+09 -3.452e+09 6.128e+09 -4.062e+09 5.931e+09 -4.688e+09 5.726e+09 -5.327e+09 5.507e+09 -5.973e+09 5.270e+09 -6.616e+09 5.010e+09 -7.246e+09 4.721e+09 -7.848e+09 4.403e+09 -8.406e+09 4.055e+09 -8.903e+09 3.677e+09 -9.323e+09 3.275e+09 -9.649e+09 2.853e+09 -9.866e+09 2.418e+09 -9.961e+09 1.978e+09 -9.925e+09 1.544e+09 -9.751e+09 1.122e+09 -9.436e+09 7.247e+08 -8.983e+09 3.600e+08 -8.398e+09 3.593e+07 -7.691e+09 -2.397e+08 -6.880e+09 -4.613e+08 -5.984e+09 -6.247e+08 -5.032e+09 -7.278e+08 -4.055e+09 -7.707e+08 -3.089e+09 -7.559e+08 -2.179e+09 -6.888e+08 -1.370e+09 -5.783e+08 -7.156e+08 -4.388e+08 -2.629e+08 -2.988e+08 6.676e+06 -2.254e+08 3.219e+08 -2.669e+08 9.660e+08 -3.612e+08 2.101e+09 -4.260e+08 3.826e+09 -4.116e+08 6.229e+09 -2.792e+08 9.400e+09 9.586e+06 1.344e+10 4.962e+08 1.842e+10 1.224e+09 2.445e+10 2.240e+09 3.162e+10 3.596e+09 4.000e+10 5.340e+09 4.967e+10 7.525e+09 6.070e+10 1.021e+10 7.315e+10 1.344e+10 8.705e+10 1.728e+10 1.024e+11 2.176e+10 1.193e+11 2.693e+10 1.376e+11 3.283e+10 1.573e+11 3.949e+10 1.783e+11 4.691e+10 2.006e+11 5.511e+10 2.240e+11 6.409e+10 2.483e+11 7.380e+10 2.735e+11 8.423e+10 2.992e+11 9.532e+10 3.253e+11 1.070e+11 3.516e+11 1.192e+11 3.778e+11 1.318e+11 4.037e+11 1.447e+11 4.289e+11 1.578e+11 4.534e+11 1.710e+11 4.767e+11 1.841e+11 4.987e+11 1.969e+11 5.192e+11 2.095e+11 5.379e+11 2.215e+11 5.546e+11 2.329e+11 5.693e+11 2.435e+11 5.816e+11 2.532e+11 5.916e+11 2.620e+11 5.991e+11 2.697e+11 6.040e+11 2.762e+11 6.064e+11 2.814e+11 6.062e+11 2.854e+11 6.035e+11 2.881e+11 5.982e+11 2.894e+11 5.904e+11 2.894e+11 5.803e+11 2.881e+11 5.679e+11 2.854e+11 5.534e+11 2.815e+11 5.369e+11 2.764e+11 5.185e+11 2.701e+11 4.985e+11 2.627e+11 4.787e+11 2.502e+11 4.547e+11 2.482e+11 4.307e+11 2.378e+11 4.058e+11 2.268e+11 3.803e+11 2.151e+11 3.543e+11 2.029e+11 3.281e+11 1.903e+11 3.020e+11 1.774e+11 2.761e+11 1.643e+11 2.507e+11 1.512e+11 2.259e+11 1.381e+11 2.020e+11 1.251e+11 1.791e+11 1.125e+11 1.573e+11 1.002e+11 1.369e+11 8.835e+10 1.178e+11 7.710e+10 1.003e+11 6.650e+10 8.433e+10 5.659e+10 6.995e+10 4.747e+10 5.716e+10 3.916e+10 4.593e+10 3.169e+10 3.624e+10 2.509e+10 2.800e+10 1.935e+10 2.112e+10 1.445e+10 1.550e+10 1.037e+10 1.102e+10 7.072e+09 7.541e+09 4.496e+09 4.941e+09 2.580e+09 3.082e+09 1.244e+09 1.837e+09 3.941e+08 1.094e+09 -1.011e+08 7.324e+08 -4.339e+08 6.007e+08 -8.181e+08 5.616e+08 -1.363e+09 5.652e+08 -2.061e+09 6.259e+08 -2.865e+09 7.773e+08 -3.728e+09 1.054e+09 -4.618e+09 1.487e+09 -5.511e+09 2.104e+09 -6.394e+09 2.936e+09 -7.266e+09 4.016e+09 -8.133e+09 5.385e+09 -9.001e+09 7.094e+09 -9.880e+09 9.205e+09 -1.077e+10 1.178e+10 -1.168e+10 1.490e+10 -1.260e+10 1.864e+10 -1.351e+10 2.307e+10 -1.440e+10 2.825e+10 -1.522e+10 3.423e+10 -1.597e+10 4.105e+10 -1.660e+10 4.872e+10 -1.709e+10 5.726e+10 -1.740e+10 6.662e+10 -1.753e+10 7.676e+10 -1.744e+10 8.761e+10 -1.713e+10 9.906e+10 -1.660e+10 1.110e+11 -1.583e+10 1.232e+11 -1.485e+10 1.356e+11 -1.367e+10 1.479e+11 -1.231e+10 1.599e+11 -1.081e+10 1.714e+11 -9.190e+09 1.822e+11 -7.508e+09 1.919e+11 -5.807e+09 2.003e+11 -4.139e+09 2.071e+11 -2.557e+09 2.123e+11 -1.114e+09 2.155e+11 1.369e+08 2.165e+11 1.151e+09 2.154e+11 1.886e+09 2.119e+11 2.310e+09 2.062e+11 2.403e+09 1.982e+11 2.157e+09 1.880e+11 1.580e+09 1.759e+11 6.959e+08 1.621e+11 -4.544e+08 1.469e+11 -1.812e+09 1.306e+11 -3.306e+09 1.137e+11 -4.844e+09 9.666e+10 -6.325e+09 7.986e+10 -7.657e+09 6.380e+10 -8.743e+09 4.894e+10 -9.495e+09 3.571e+10 -9.849e+09 2.447e+10 -9.796e+09 1.550e+10 -9.429e+09 8.825e+09 -9.029e+09 4.079e+09 -9.134e+09 2.281e+08 -1.036e+10 -4.101e+09 -1.300e+10 -9.910e+09 -1.688e+10 -1.756e+10 -2.164e+10 -2.693e+10 -2.694e+10 -3.767e+10 -3.245e+10 -4.923e+10 -3.785e+10 -6.102e+10 -4.285e+10 -7.233e+10 -4.711e+10 -8.246e+10 -5.033e+10 -9.071e+10 -5.224e+10 -9.643e+10 -5.258e+10 -9.905e+10 -5.118e+10 -9.815e+10 -4.795e+10 -9.349e+10 -4.291e+10 -8.508e+10 -3.624e+10 -7.325e+10 -2.830e+10 -5.871e+10 -1.966e+10 -4.262e+10 -1.115e+10 -2.668e+10 -3.820e+09 -1.324e+10 1.202e+09 -4.604e+09 4.433e+09 2.675e+09 1.144e+10 1.884e+10 2.857e+10 5.345e+10 5.974e+10 1.141e+11 1.088e+11 2.088e+11 1.804e+11 3.468e+11 2.799e+11 5.387e+11 4.139e+11 7.965e+11 5.893e+11 1.133e+12 8.141e+11 1.565e+12 1.097e+12 2.108e+12 1.449e+12 2.781e+12 1.880e+12 3.603e+12 2.402e+12 4.597e+12 3.028e+12 5.785e+12 3.772e+12 7.194e+12 4.650e+12 8.848e+12 5.677e+12 1.077e+13 6.870e+12 1.183e+13 7.498e+12 1.418e+13 8.948e+12 1.686e+13 1.060e+13 1.992e+13 1.248e+13 2.337e+13 1.460e+13 2.724e+13 1.699e+13 3.158e+13 1.966e+13 3.641e+13 2.264e+13 4.176e+13 2.594e+13 4.766e+13 2.958e+13 5.412e+13 3.357e+13 6.118e+13 3.795e+13 6.887e+13 4.272e+13 7.721e+13 4.791e+13 8.621e+13 5.351e+13 9.589e+13 5.956e+13 1.063e+14 6.607e+13 1.174e+14 7.302e+13 1.292e+14 8.045e+13 1.418e+14 8.836e+13 1.550e+14 9.669e+13 1.690e+14 1.056e+14 1.837e+14 1.149e+14 1.991e+14 1.248e+14 2.153e+14 1.350e+14 2.321e+14 1.458e+14 2.496e+14 1.569e+14 2.677e+14 1.686e+14 2.864e+14 1.807e+14 3.057e+14 1.931e+14 3.256e+14 2.060e+14 3.460e+14 2.192e+14 3.668e+14 2.328e+14 3.882e+14 2.467e+14 4.098e+14 2.609e+14 4.317e+14 2.753e+14 4.539e+14 2.899e+14 4.762e+14 3.046e+14 4.985e+14 3.194e+14 5.208e+14 3.343e+14 5.431e+14 3.493e+14 5.653e+14 3.642e+14 5.872e+14 3.790e+14 6.087e+14 3.937e+14 6.297e+14 4.082e+14 6.503e+14 4.223e+14 6.702e+14 4.362e+14 6.894e+14 4.497e+14 7.078e+14 4.628e+14 7.253e+14 4.754e+14 7.418e+14 4.874e+14 7.572e+14 4.987e+14 7.715e+14 5.094e+14 7.845e+14 5.193e+14 7.963e+14 5.285e+14 8.068e+14 5.369e+14 8.158e+14 5.444e+14 8.234e+14 5.510e+14 8.294e+14 5.567e+14 8.341e+14 5.613e+14 8.371e+14 5.650e+14 8.386e+14 5.677e+14 8.386e+14 5.694e+14 8.370e+14 5.700e+14 8.340e+14 5.695e+14 8.294e+14 5.681e+14 8.233e+14 5.657e+14 8.159e+14 5.623e+14 8.070e+14 5.578e+14 7.968e+14 5.526e+14 7.853e+14 5.463e+14 7.726e+14 5.392e+14 7.587e+14 5.312e+14 7.437e+14 5.224e+14 7.277e+14 5.129e+14 7.109e+14 5.027e+14 6.931e+14 4.919e+14 6.746e+14 4.804e+14 6.554e+14 4.684e+14 6.357e+14 4.558e+14 6.154e+14 4.429e+14 5.946e+14 4.295e+14 5.735e+14 4.158e+14 5.520e+14 4.018e+14 5.304e+14 3.877e+14 5.086e+14 3.733e+14 4.868e+14 3.588e+14 4.650e+14 3.442e+14 4.432e+14 3.296e+14 4.216e+14 3.150e+14 4.003e+14 3.004e+14 3.791e+14 2.860e+14 3.584e+14 2.717e+14 3.379e+14 2.577e+14 3.179e+14 2.437e+14 2.984e+14 2.301e+14 2.795e+14 2.167e+14 2.611e+14 2.036e+14 2.432e+14 1.910e+14 2.260e+14 1.787e+14 2.095e+14 1.667e+14 1.937e+14 1.551e+14 1.786e+14 1.440e+14 1.642e+14 1.334e+14 1.505e+14 1.232e+14 1.376e+14 1.135e+14 1.254e+14 1.042e+14 1.139e+14 9.543e+13 1.031e+14 8.712e+13 9.309e+13 7.928e+13 8.375e+13 7.194e+13 7.510e+13 6.508e+13 6.709e+13 5.867e+13 5.972e+13 5.272e+13 5.296e+13 4.720e+13 4.678e+13 4.210e+13 4.115e+13 3.741e+13 3.605e+13 3.310e+13 3.143e+13 2.917e+13 2.729e+13 2.560e+13 2.359e+13 2.237e+13 2.027e+13 1.945e+13 1.733e+13 1.683e+13 1.474e+13 1.449e+13 1.245e+13 1.240e+13 1.046e+13 1.055e+13 8.729e+12 8.925e+12 7.229e+12 7.501e+12 5.338e+12 5.625e+12 4.342e+12 4.651e+12 3.499e+12 3.814e+12 2.792e+12 3.100e+12 2.203e+12 2.496e+12 1.716e+12 1.988e+12 1.319e+12 1.565e+12 9.978e+11 1.215e+12 7.412e+11 9.297e+11 5.391e+11 6.989e+11 3.827e+11 5.151e+11 2.636e+11 3.707e+11 1.750e+11 2.592e+11 1.110e+11 1.750e+11 6.614e+10 1.130e+11 3.613e+10 6.873e+10 1.727e+10 3.854e+10 6.484e+09 1.914e+10 1.242e+09 7.813e+09 -6.111e+08 2.287e+09 -1.272e+09 2.259e+08 -2.582e+09 -1.289e+09 -4.283e+09 -3.679e+09 -5.716e+09 -6.485e+09 -6.547e+09 -9.149e+09 -6.649e+09 -1.128e+10 -6.044e+09 -1.267e+10 -4.847e+09 -1.325e+10 -3.236e+09 -1.307e+10 -1.403e+09 -1.226e+10 4.828e+08 -1.106e+10 2.337e+09 -9.701e+09 4.216e+09 -8.388e+09 6.338e+09 -7.221e+09 9.026e+09 -6.121e+09 1.260e+10 -4.848e+09 1.727e+10 -3.092e+09 2.312e+10 -5.692e+08 3.015e+10 2.933e+09 3.826e+10 7.552e+09 4.731e+10 1.335e+10 5.711e+10 2.031e+10 6.748e+10 2.840e+10 0.005 -51.779 -50.712 -49.646 -48.579 -47.579 -46.678 -45.868 -45.141 -44.491 -43.913 -43.404 -42.961 -42.579 -42.258 -41.995 -41.789 -41.640 -41.546 -41.509 -41.527 -41.601 -41.733 -41.923 -42.174 -42.487 -42.866 -43.313 -43.834 -44.432 -45.115 -45.889 -46.764 -47.753 -48.870 -50.137 -51.579 -53.231 -55.143 -57.388 -60.074 -63.365 -67.404 -71.580 -72.905 -71.030 -69.312 -68.258 -67.422 -66.217 -64.321 -61.943 -59.477 -57.160 -55.068 -53.204 -51.550 -50.081 -48.775 -47.614 -46.581 -45.663 -44.851 -44.136 -43.511 -42.970 -42.509 -42.125 -41.815 -41.577 -41.409 -41.311 -41.283 -41.325 -41.438 -41.623 -41.883 -42.221 -42.639 -43.143 -43.737 -44.426 -45.219 -46.120 -47.139 -48.279 -49.544 -50.926 -52.400 -53.907 -55.344 -56.569 -57.452 -57.944 -58.072 -57.860 -57.267 -56.228 -54.757 -52.985 -51.083 -49.187 -47.375 -45.681 -44.117 -42.682 -41.368 -40.169 -39.075 -38.080 -37.178 -36.361 -35.626 -34.969 -34.386 -33.875 -33.435 -33.063 -32.759 -32.524 -32.358 -32.262 -32.237 -32.286 -32.413 -32.622 -32.919 -33.312 -33.810 -34.425 -35.174 -36.077 -37.161 -38.466 -40.042 -41.956 -44.279 -46.967 -49.438 -50.307 -49.128 -47.414 -46.128 -45.470 -45.504 -46.391 -48.544 -52.212 -52.993 -47.064 -41.466 -37.383 -34.152 -31.453 -29.119 -27.054 -25.198 -23.510 -21.960 -20.528 -19.198 -17.956 -16.793 -15.700 -14.672 -13.701 -12.783 -11.915 -11.092 -10.313 -9.573 -8.872 -8.206 -7.574 -6.975 -6.407 -5.868 -5.358 -4.876 -4.420 -3.990 -3.585 -3.204 -2.846 -2.512 -2.201 -1.911 -1.643 -1.397 -1.171 -0.966 -0.781 -0.616 -0.471 -0.346 -0.240 -0.154 -0.087 -0.039 -0.010 0.000 -0.009 -0.037 -0.084 -0.150 -0.235 -0.340 -0.464 -0.608 -0.771 -0.955 -1.159 -1.383 -1.628 -1.894 -2.182 -2.492 -2.824 -3.179 -3.558 -3.961 -4.388 -4.841 -5.320 -5.827 -6.362 -6.926 -7.521 -8.148 -8.809 -9.505 -10.238 -11.011 -11.826 -12.686 -13.594 -14.555 -15.572 -16.652 -17.801 -19.026 -20.338 -21.749 -23.273 -24.933 -26.754 -28.775 -31.052 -33.668 -36.758 -40.524 -45.066 -48.600 -48.300 -46.047 -44.310 -43.372 -43.043 -43.186 -43.704 -44.484 -45.314 -45.808 -45.546 -44.489 -42.993 -41.425 -39.973 -38.700 -37.609 -36.688 -35.918 -35.284 -34.772 -34.369 -34.068 -33.861 -33.740 -33.703 -33.745 -33.864 -34.057 -34.325 -34.665 -35.079 -35.569 -36.134 -36.776 -37.499 -38.304 -39.196 -40.178 -41.253 -42.424 -43.693 -45.057 -46.511 -48.039 -49.615 -51.196 -52.722 -54.117 -55.281 -56.080 -56.345 -55.948 -54.919 -53.460 -51.812 -50.148 -48.558 -47.081 -45.730 -44.503 -43.395 -42.397 -41.502 -40.701 -39.989 -39.358 -38.805 -38.324 -37.912 -37.564 -37.279 -37.055 -36.888 -36.778 -36.724 -36.724 -36.778 -36.886 -37.049 -37.265 -37.537 -37.864 -38.250 -38.694 -39.200 -39.771 -40.409 -41.120 -41.907 -42.778 -43.738 -44.798 -45.969 -47.263 -48.700 -50.301 -52.097 -54.126 -56.445 -59.133 -62.311 -66.168 -71.027 -77.447 -85.894 -89.171 -82.788 -75.781 -70.326 -66.128 -62.790 -60.059 -57.774 -55.832 -54.163 -52.717 -51.455 -50.352 -49.387 -48.542 -47.806 -47.168 -46.621 -46.157 -45.772 -45.460 -45.218 -45.044 -44.934 -44.888 -44.905 -44.982 -45.121 -45.322 -45.584 -45.909 -46.300 -46.757 -47.284 -47.884 -48.562 -49.323 -50.175 -51.125 -52.183 -53.316 -54.448 -55.581 0.03 -18.6512 -18.2843 -17.9211 -17.5615 -17.2055 -16.8532 -16.5046 -16.1595 -15.8182 -15.4804 -15.1463 -14.8159 -14.4891 -14.1659 -13.8464 -13.5306 -13.2183 -12.9098 -12.6048 -12.3035 -12.0059 -11.7119 -11.4215 -11.1348 -10.8517 -10.5723 -10.2965 -10.0243 -9.7559 -9.491 -9.2298 -8.9722 -8.7183 -8.468 -8.2214 -7.9784 -7.739 -7.5033 -7.2713 -7.0429 -6.8181 -6.597 -6.3795 -6.1656 -5.9554 -5.7489 -5.546 -5.3467 -5.1511 -4.9591 -4.7708 -4.5861 -4.405 -4.2276 -4.0539 -3.8838 -3.7173 -3.5545 -3.3953 -3.2397 -3.0878 -2.9396 -2.795 -2.654 -2.5167 -2.383 -2.253 -2.1266 -2.0039 -1.8848 -1.7693 -1.6575 -1.5493 -1.4448 -1.3439 -1.2467 -1.1531 -1.0631 -0.97683 -0.89416 -0.81515 -0.73977 -0.66804 -0.59996 -0.53551 -0.47471 -0.41756 -0.36405 -0.31418 -0.26796 -0.22538 -0.18644 -0.15115 -0.1195 -0.091501 -0.067141 -0.046425 -0.029353 -0.015925 -0.0061405 0 0.0024967 0.0013494 -0.0034416 -0.011877 -0.023955 -0.039678 -0.059045 -0.082055 -0.10871 -0.13901 -0.17295 -0.21054 -0.25177 -0.29664 -0.34516 -0.39732 -0.45312 -0.51257 -0.57567 -0.6424 -0.71278 -0.78681 -0.86448 -0.94579 -1.0307 -1.1193 -1.2116 -1.3075 -1.407 -1.5102 -1.617 -1.7275 -1.8416 -1.9593 -2.0807 -2.2058 -2.3344 -2.4668 -2.6027 -2.7424 -2.8856 -3.0325 -3.1831 -3.3372 -3.4951 -3.6566 -3.8217 -3.9904 -4.1629 -4.3389 -4.5186 -4.7019 -4.8889 -5.0796 -5.2738 -5.4717 -5.6733 -5.8785 -6.0874 -6.2999 -6.516 -6.7358 -6.9592 -7.1863 -7.417 -7.6513 -7.8893 -8.131 -8.3763 -8.6252 -8.8778 -9.134 -9.3938 -9.6573 -9.9245 -10.1953 -10.4697 -10.7478 -11.0295 -11.3149 -11.6039 -11.8966 -12.1929 -12.4928 -12.7964 -13.1036 -13.4145 -13.729 -14.0472 -14.369 -14.6945 -15.0235 -15.3563 -15.6927 -16.0327 -16.3764 -16.7237 -17.0746 -17.4292 -17.7875 1.0 43505.68 EW5 VH 37.8 40.37 0.050 -3.612e+07 1.413e+07 -2.903e+07 2.014e+07 -2.407e+07 2.637e+07 -2.028e+07 3.347e+07 -1.696e+07 4.169e+07 -1.371e+07 5.094e+07 -1.039e+07 6.105e+07 -7.016e+06 7.183e+07 -3.704e+06 8.308e+07 -6.059e+05 9.470e+07 2.116e+06 1.066e+08 4.295e+06 1.187e+08 5.782e+06 1.310e+08 6.436e+06 1.436e+08 6.130e+06 1.565e+08 4.721e+06 1.698e+08 2.119e+06 1.837e+08 -1.777e+06 1.982e+08 -7.078e+06 2.135e+08 -1.391e+07 2.298e+08 -2.238e+07 2.472e+08 -3.264e+07 2.661e+08 -4.485e+07 2.866e+08 -5.919e+07 3.089e+08 -7.583e+07 3.332e+08 -9.501e+07 3.598e+08 -1.169e+08 3.888e+08 -1.417e+08 4.204e+08 -1.698e+08 4.549e+08 -2.011e+08 4.923e+08 -2.360e+08 5.327e+08 -2.747e+08 5.764e+08 -3.171e+08 6.233e+08 -3.635e+08 6.733e+08 -4.140e+08 7.265e+08 -4.684e+08 7.827e+08 -5.267e+08 8.417e+08 -5.889e+08 9.033e+08 -6.547e+08 9.671e+08 -7.240e+08 1.033e+09 -7.964e+08 1.099e+09 -8.715e+08 1.167e+09 -9.489e+08 1.234e+09 -1.028e+09 1.301e+09 -1.108e+09 1.365e+09 -1.189e+09 1.427e+09 -1.269e+09 1.485e+09 -1.349e+09 1.539e+09 -1.426e+09 1.587e+09 -1.501e+09 1.628e+09 -1.572e+09 1.661e+09 -1.638e+09 1.686e+09 -1.698e+09 1.701e+09 -1.752e+09 1.706e+09 -1.798e+09 1.700e+09 -1.836e+09 1.684e+09 -1.864e+09 1.656e+09 -1.883e+09 1.618e+09 -1.891e+09 1.569e+09 -1.889e+09 1.510e+09 -1.875e+09 1.441e+09 -1.851e+09 1.364e+09 -1.815e+09 1.280e+09 -1.769e+09 1.189e+09 -1.712e+09 1.094e+09 -1.644e+09 9.946e+08 -1.568e+09 8.936e+08 -1.484e+09 7.921e+08 -1.392e+09 6.914e+08 -1.294e+09 5.932e+08 -1.191e+09 4.988e+08 -1.085e+09 4.091e+08 -9.775e+08 3.255e+08 -8.695e+08 2.489e+08 -7.624e+08 1.798e+08 -6.582e+08 1.189e+08 -5.580e+08 6.658e+07 -4.634e+08 2.292e+07 -3.759e+08 -1.209e+07 -2.966e+08 -3.888e+07 -2.266e+08 -5.819e+07 -1.670e+08 -7.118e+07 -1.180e+08 -7.978e+07 -7.883e+07 -8.670e+07 -4.732e+07 -9.538e+07 -1.897e+07 -1.091e+08 1.185e+07 -1.297e+08 5.030e+07 -1.573e+08 1.002e+08 -1.909e+08 1.639e+08 -2.292e+08 2.428e+08 -2.704e+08 3.376e+08 -3.132e+08 4.486e+08 -3.561e+08 5.759e+08 -3.979e+08 7.191e+08 -4.370e+08 8.778e+08 -4.725e+08 1.051e+09 -5.028e+08 1.238e+09 -5.270e+08 1.438e+09 -5.438e+08 1.650e+09 -5.522e+08 1.871e+09 -5.512e+08 2.100e+09 -5.399e+08 2.336e+09 -5.177e+08 2.575e+09 -4.840e+08 2.816e+09 -4.384e+08 3.057e+09 -3.807e+08 3.294e+09 -3.109e+08 3.525e+09 -2.294e+08 3.747e+09 -1.365e+08 3.958e+09 -3.317e+07 4.155e+09 7.986e+07 4.336e+09 2.013e+08 4.497e+09 3.298e+08 4.638e+09 4.638e+08 4.756e+09 6.016e+08 4.850e+09 7.412e+08 4.919e+09 8.810e+08 4.961e+09 1.019e+09 4.976e+09 1.153e+09 4.964e+09 1.281e+09 4.925e+09 1.402e+09 4.860e+09 1.513e+09 4.770e+09 1.614e+09 4.657e+09 1.702e+09 4.521e+09 1.778e+09 4.365e+09 1.840e+09 4.191e+09 1.887e+09 4.002e+09 1.919e+09 3.799e+09 1.936e+09 3.585e+09 1.939e+09 3.364e+09 1.927e+09 3.136e+09 1.902e+09 2.906e+09 1.863e+09 2.675e+09 1.812e+09 2.445e+09 1.751e+09 2.219e+09 1.680e+09 1.999e+09 1.600e+09 1.785e+09 1.513e+09 1.581e+09 1.421e+09 1.388e+09 1.324e+09 1.206e+09 1.225e+09 1.036e+09 1.124e+09 8.798e+08 1.023e+09 7.369e+08 9.227e+08 6.078e+08 8.249e+08 4.926e+08 7.304e+08 3.910e+08 6.401e+08 3.029e+08 5.548e+08 2.276e+08 4.754e+08 1.645e+08 4.022e+08 1.126e+08 3.358e+08 7.118e+07 2.764e+08 3.893e+07 2.241e+08 1.476e+07 1.787e+08 -2.526e+06 1.401e+08 -1.416e+07 1.078e+08 -2.126e+07 8.117e+07 -2.489e+07 5.970e+07 -2.593e+07 4.261e+07 -2.509e+07 2.918e+07 -2.289e+07 1.877e+07 -1.973e+07 1.083e+07 -1.590e+07 4.973e+06 -1.174e+07 9.134e+05 -7.668e+06 -1.586e+06 -4.162e+06 -2.909e+06 -1.354e+06 -3.865e+06 1.822e+06 -5.542e+06 7.651e+06 -8.413e+06 1.845e+07 -1.199e+07 3.617e+07 -1.542e+07 6.258e+07 -1.768e+07 9.934e+07 -1.760e+07 1.481e+08 -1.388e+07 2.102e+08 -5.092e+06 2.869e+08 1.024e+07 3.790e+08 3.363e+07 4.871e+08 6.657e+07 6.112e+08 1.104e+08 7.512e+08 1.664e+08 9.061e+08 2.356e+08 1.075e+09 3.185e+08 1.255e+09 4.158e+08 1.446e+09 5.276e+08 1.644e+09 6.536e+08 1.847e+09 7.935e+08 2.051e+09 9.462e+08 2.254e+09 1.110e+09 2.451e+09 1.284e+09 2.640e+09 1.467e+09 2.817e+09 1.654e+09 2.977e+09 1.846e+09 3.120e+09 2.038e+09 3.240e+09 2.228e+09 3.335e+09 2.413e+09 3.403e+09 2.590e+09 3.443e+09 2.756e+09 3.451e+09 2.909e+09 3.429e+09 3.045e+09 3.374e+09 3.162e+09 3.287e+09 3.259e+09 3.170e+09 3.332e+09 3.023e+09 3.380e+09 2.848e+09 3.403e+09 2.647e+09 3.399e+09 2.425e+09 3.368e+09 2.185e+09 3.312e+09 1.931e+09 3.230e+09 1.667e+09 3.125e+09 1.398e+09 2.999e+09 1.128e+09 2.856e+09 8.635e+08 2.699e+09 6.064e+08 2.533e+09 3.602e+08 2.362e+09 1.268e+08 2.193e+09 -9.412e+07 2.029e+09 -3.044e+08 1.876e+09 -5.081e+08 1.737e+09 -7.114e+08 1.613e+09 -9.212e+08 1.504e+09 -1.145e+09 1.406e+09 -1.389e+09 1.315e+09 -1.656e+09 1.225e+09 -1.948e+09 1.130e+09 -2.262e+09 1.023e+09 -2.593e+09 9.008e+08 -2.933e+09 7.611e+08 -3.273e+09 6.029e+08 -3.601e+09 4.276e+08 -3.904e+09 2.382e+08 -4.170e+09 3.878e+07 -4.386e+09 -1.648e+08 -4.541e+09 -3.661e+08 -4.624e+09 -5.583e+08 -4.627e+09 -7.337e+08 -4.543e+09 -8.854e+08 -4.371e+09 -1.007e+09 -4.110e+09 -1.092e+09 -3.765e+09 -1.136e+09 -3.346e+09 -1.138e+09 -2.867e+09 -1.095e+09 -2.346e+09 -1.010e+09 -1.808e+09 -8.876e+08 -1.282e+09 -7.347e+08 -8.032e+08 -5.628e+08 -4.082e+08 -3.879e+08 -1.331e+08 -2.363e+08 3.671e+07 -1.520e+08 2.600e+08 -1.384e+08 7.255e+08 -1.152e+08 1.542e+09 -2.843e+06 2.782e+09 2.484e+08 4.510e+09 6.792e+08 6.795e+09 1.331e+09 9.707e+09 2.246e+09 1.331e+10 3.470e+09 1.768e+10 5.046e+09 2.287e+10 7.024e+09 2.895e+10 9.447e+09 3.596e+10 1.236e+10 4.397e+10 1.582e+10 5.302e+10 1.986e+10 6.314e+10 2.451e+10 7.436e+10 2.983e+10 8.668e+10 3.582e+10 1.001e+11 4.252e+10 1.146e+11 4.995e+10 1.302e+11 5.810e+10 1.467e+11 6.697e+10 1.642e+11 7.655e+10 1.826e+11 8.681e+10 2.017e+11 9.771e+10 2.215e+11 1.092e+11 2.418e+11 1.212e+11 2.624e+11 1.337e+11 2.833e+11 1.466e+11 3.042e+11 1.597e+11 3.249e+11 1.729e+11 3.452e+11 1.862e+11 3.650e+11 1.994e+11 3.841e+11 2.124e+11 4.022e+11 2.251e+11 4.191e+11 2.373e+11 4.347e+11 2.489e+11 4.488e+11 2.597e+11 4.613e+11 2.697e+11 4.718e+11 2.787e+11 4.805e+11 2.866e+11 4.871e+11 2.933e+11 4.915e+11 2.988e+11 4.937e+11 3.030e+11 4.937e+11 3.058e+11 4.915e+11 3.071e+11 4.871e+11 3.071e+11 4.804e+11 3.057e+11 4.717e+11 3.029e+11 4.610e+11 2.986e+11 4.484e+11 2.931e+11 4.341e+11 2.864e+11 4.182e+11 2.784e+11 4.008e+11 2.720e+11 3.824e+11 2.634e+11 3.628e+11 2.523e+11 3.424e+11 2.404e+11 3.213e+11 2.279e+11 2.998e+11 2.149e+11 2.781e+11 2.014e+11 2.564e+11 1.876e+11 2.348e+11 1.737e+11 2.136e+11 1.597e+11 1.930e+11 1.458e+11 1.730e+11 1.322e+11 1.539e+11 1.188e+11 1.357e+11 1.059e+11 1.185e+11 9.348e+10 1.025e+11 8.169e+10 8.775e+10 7.058e+10 7.422e+10 6.020e+10 6.199e+10 5.065e+10 5.105e+10 4.193e+10 4.138e+10 3.408e+10 3.296e+10 2.712e+10 2.574e+10 2.104e+10 1.965e+10 1.582e+10 1.462e+10 1.146e+10 1.055e+10 7.900e+09 7.342e+09 5.094e+09 4.904e+09 2.983e+09 3.126e+09 1.492e+09 1.912e+09 5.258e+08 1.174e+09 -4.718e+07 8.147e+08 -4.332e+08 6.958e+08 -8.716e+08 6.767e+08 -1.495e+09 7.003e+08 -2.302e+09 7.780e+08 -3.245e+09 9.444e+08 -4.270e+09 1.237e+09 -5.335e+09 1.690e+09 -6.407e+09 2.334e+09 -7.464e+09 3.199e+09 -8.496e+09 4.320e+09 -9.502e+09 5.731e+09 -1.048e+10 7.481e+09 -1.145e+10 9.624e+09 -1.240e+10 1.222e+10 -1.334e+10 1.535e+10 -1.426e+10 1.908e+10 -1.515e+10 2.347e+10 -1.597e+10 2.860e+10 -1.671e+10 3.451e+10 -1.733e+10 4.124e+10 -1.777e+10 4.880e+10 -1.802e+10 5.719e+10 -1.803e+10 6.637e+10 -1.776e+10 7.628e+10 -1.720e+10 8.685e+10 -1.632e+10 9.793e+10 -1.512e+10 1.094e+11 -1.359e+10 1.212e+11 -1.176e+10 1.329e+11 -9.637e+09 1.446e+11 -7.255e+09 1.559e+11 -4.655e+09 1.666e+11 -1.889e+09 1.765e+11 9.886e+08 1.854e+11 3.916e+09 1.931e+11 6.823e+09 1.993e+11 9.644e+09 2.039e+11 1.231e+10 2.067e+11 1.475e+10 2.075e+11 1.690e+10 2.064e+11 1.870e+10 2.032e+11 2.011e+10 1.980e+11 2.109e+10 1.908e+11 2.161e+10 1.816e+11 2.165e+10 1.707e+11 2.123e+10 1.581e+11 2.035e+10 1.443e+11 1.907e+10 1.294e+11 1.741e+10 1.138e+11 1.546e+10 9.792e+10 1.330e+10 8.204e+10 1.102e+10 6.659e+10 8.693e+09 5.198e+10 6.438e+09 3.858e+10 4.357e+09 2.677e+10 2.552e+09 1.688e+10 1.117e+09 9.153e+09 1.287e+08 3.815e+09 -3.602e+08 9.450e+08 -4.262e+08 -5.080e+08 -7.355e+08 -2.876e+09 -1.818e+09 -7.419e+09 -3.543e+09 -1.401e+10 -5.727e+09 -2.229e+10 -8.245e+09 -3.177e+10 -1.095e+10 -4.193e+10 -1.368e+10 -5.212e+10 -1.624e+10 -6.169e+10 -1.844e+10 -6.996e+10 -2.008e+10 -7.626e+10 -2.098e+10 -7.999e+10 -2.098e+10 -8.066e+10 -1.998e+10 -7.796e+10 -1.794e+10 -7.180e+10 -1.493e+10 -6.236e+10 -1.114e+10 -5.024e+10 -6.886e+09 -3.648e+10 -2.676e+09 -2.264e+10 8.315e+08 -1.090e+10 2.975e+09 -3.241e+09 4.440e+09 3.965e+09 9.426e+09 2.043e+10 2.200e+10 5.517e+10 4.445e+10 1.157e+11 7.931e+10 2.101e+11 1.299e+11 3.477e+11 2.001e+11 5.395e+11 2.947e+11 7.977e+11 4.187e+11 1.136e+12 5.778e+11 1.570e+12 7.787e+11 2.117e+12 1.028e+12 2.796e+12 1.335e+12 3.629e+12 1.707e+12 4.636e+12 2.155e+12 5.843e+12 2.687e+12 7.277e+12 3.317e+12 8.964e+12 4.054e+12 1.093e+13 4.911e+12 1.275e+13 5.691e+12 1.529e+13 6.792e+12 1.821e+13 8.049e+12 2.152e+13 9.478e+12 2.528e+13 1.109e+13 2.950e+13 1.291e+13 3.424e+13 1.494e+13 3.953e+13 1.719e+13 4.538e+13 1.970e+13 5.185e+13 2.247e+13 5.896e+13 2.550e+13 6.676e+13 2.883e+13 7.525e+13 3.245e+13 8.448e+13 3.639e+13 9.447e+13 4.065e+13 1.052e+14 4.524e+13 1.169e+14 5.017e+13 1.292e+14 5.545e+13 1.424e+14 6.109e+13 1.564e+14 6.708e+13 1.714e+14 7.343e+13 1.871e+14 8.013e+13 2.037e+14 8.720e+13 2.211e+14 9.460e+13 2.392e+14 1.023e+14 2.582e+14 1.105e+14 2.779e+14 1.189e+14 2.983e+14 1.277e+14 3.195e+14 1.367e+14 3.412e+14 1.460e+14 3.637e+14 1.557e+14 3.867e+14 1.655e+14 4.103e+14 1.756e+14 4.343e+14 1.859e+14 4.586e+14 1.964e+14 4.833e+14 2.070e+14 5.082e+14 2.177e+14 5.333e+14 2.286e+14 5.584e+14 2.393e+14 5.835e+14 2.502e+14 6.085e+14 2.610e+14 6.333e+14 2.717e+14 6.577e+14 2.824e+14 6.818e+14 2.928e+14 7.054e+14 3.031e+14 7.284e+14 3.130e+14 7.507e+14 3.228e+14 7.723e+14 3.322e+14 7.928e+14 3.412e+14 8.125e+14 3.498e+14 8.311e+14 3.580e+14 8.485e+14 3.656e+14 8.646e+14 3.728e+14 8.795e+14 3.795e+14 8.930e+14 3.855e+14 9.049e+14 3.909e+14 9.153e+14 3.956e+14 9.242e+14 3.997e+14 9.314e+14 4.030e+14 9.369e+14 4.057e+14 9.408e+14 4.077e+14 9.429e+14 4.089e+14 9.434e+14 4.094e+14 9.420e+14 4.092e+14 9.390e+14 4.082e+14 9.342e+14 4.066e+14 9.279e+14 4.042e+14 9.198e+14 4.010e+14 9.101e+14 3.973e+14 8.989e+14 3.929e+14 8.863e+14 3.878e+14 8.722e+14 3.822e+14 8.568e+14 3.761e+14 8.402e+14 3.693e+14 8.223e+14 3.621e+14 8.034e+14 3.544e+14 7.834e+14 3.462e+14 7.625e+14 3.376e+14 7.409e+14 3.287e+14 7.184e+14 3.194e+14 6.954e+14 3.098e+14 6.719e+14 2.999e+14 6.478e+14 2.898e+14 6.235e+14 2.796e+14 5.990e+14 2.692e+14 5.742e+14 2.587e+14 5.494e+14 2.483e+14 5.246e+14 2.377e+14 4.999e+14 2.270e+14 4.755e+14 2.165e+14 4.513e+14 2.061e+14 4.274e+14 1.957e+14 4.038e+14 1.856e+14 3.809e+14 1.755e+14 3.583e+14 1.657e+14 3.363e+14 1.561e+14 3.150e+14 1.467e+14 2.943e+14 1.375e+14 2.743e+14 1.287e+14 2.550e+14 1.201e+14 2.365e+14 1.118e+14 2.188e+14 1.038e+14 2.018e+14 9.618e+13 1.857e+14 8.887e+13 1.703e+14 8.191e+13 1.558e+14 7.528e+13 1.421e+14 6.900e+13 1.292e+14 6.307e+13 1.171e+14 5.748e+13 1.058e+14 5.223e+13 9.533e+13 4.731e+13 8.557e+13 4.273e+13 7.655e+13 3.847e+13 6.822e+13 3.453e+13 6.057e+13 3.087e+13 5.357e+13 2.750e+13 4.717e+13 2.441e+13 4.138e+13 2.158e+13 3.613e+13 1.900e+13 3.141e+13 1.666e+13 2.717e+13 1.454e+13 2.337e+13 1.263e+13 2.001e+13 1.092e+13 1.703e+13 9.394e+12 1.441e+13 8.036e+12 1.211e+13 6.834e+12 1.012e+13 5.777e+12 8.390e+12 4.851e+12 6.643e+12 3.893e+12 5.417e+12 3.220e+12 4.377e+12 2.642e+12 3.502e+12 2.148e+12 2.771e+12 1.730e+12 2.167e+12 1.378e+12 1.672e+12 1.085e+12 1.270e+12 8.430e+11 9.488e+11 6.453e+11 6.946e+11 4.855e+11 4.970e+11 3.582e+11 3.458e+11 2.583e+11 2.326e+11 1.811e+11 1.501e+11 1.228e+11 9.165e+10 7.977e+10 5.196e+10 4.902e+10 2.645e+10 2.794e+10 1.130e+10 1.427e+10 3.426e+09 6.153e+09 2.039e+08 2.068e+09 -9.481e+08 5.795e+08 -2.421e+09 -1.993e+08 -4.412e+09 -1.460e+09 -6.242e+09 -2.994e+09 -7.486e+09 -4.449e+09 -7.953e+09 -5.577e+09 -7.631e+09 -6.241e+09 -6.638e+09 -6.402e+09 -5.178e+09 -6.097e+09 -3.505e+09 -5.425e+09 -1.876e+09 -4.556e+09 -4.652e+08 -3.702e+09 7.647e+08 -3.088e+09 2.184e+09 -2.818e+09 4.337e+09 -2.732e+09 7.631e+09 -2.521e+09 1.227e+10 -1.920e+09 1.832e+10 -7.531e+08 2.574e+10 1.090e+09 3.447e+10 3.670e+09 4.435e+10 7.008e+09 5.521e+10 1.109e+10 6.685e+10 1.589e+10 0.005 -52.377 -51.340 -50.304 -49.267 -48.295 -47.422 -46.639 -45.938 -45.315 -44.765 -44.285 -43.870 -43.519 -43.230 -43.002 -42.833 -42.723 -42.672 -42.680 -42.747 -42.875 -43.065 -43.319 -43.639 -44.029 -44.492 -45.032 -45.657 -46.371 -47.184 -48.105 -49.147 -50.326 -51.663 -53.183 -54.920 -56.919 -59.239 -61.963 -65.202 -69.092 -73.666 -78.014 -78.638 -74.867 -70.363 -66.261 -62.706 -59.649 -57.009 -54.710 -52.690 -50.903 -49.313 -47.891 -46.616 -45.470 -44.440 -43.514 -42.682 -41.938 -41.276 -40.691 -40.178 -39.735 -39.358 -39.045 -38.796 -38.609 -38.484 -38.419 -38.416 -38.475 -38.598 -38.784 -39.038 -39.360 -39.755 -40.225 -40.775 -41.411 -42.137 -42.961 -43.891 -44.933 -46.097 -47.388 -48.809 -50.352 -51.990 -53.661 -55.252 -56.599 -57.526 -57.894 -57.625 -56.708 -55.235 -53.397 -51.400 -49.401 -47.487 -45.697 -44.043 -42.524 -41.134 -39.863 -38.704 -37.647 -36.686 -35.815 -35.027 -34.318 -33.685 -33.124 -32.634 -32.211 -31.856 -31.568 -31.347 -31.192 -31.104 -31.086 -31.140 -31.269 -31.477 -31.768 -32.150 -32.632 -33.222 -33.936 -34.790 -35.808 -37.021 -38.472 -40.220 -42.350 -44.958 -48.044 -50.972 -52.093 -50.957 -49.501 -48.788 -49.105 -50.829 -54.168 -54.691 -48.555 -42.787 -38.562 -35.213 -32.412 -29.990 -27.848 -25.924 -24.176 -22.574 -21.094 -19.720 -18.439 -17.241 -16.115 -15.057 -14.058 -13.116 -12.224 -11.380 -10.580 -9.822 -9.103 -8.421 -7.774 -7.160 -6.579 -6.027 -5.506 -5.012 -4.546 -4.106 -3.691 -3.301 -2.936 -2.594 -2.275 -1.978 -1.703 -1.450 -1.219 -1.008 -0.818 -0.648 -0.498 -0.368 -0.258 -0.168 -0.097 -0.045 -0.013 0.000 -0.006 -0.031 -0.076 -0.139 -0.222 -0.325 -0.447 -0.589 -0.751 -0.933 -1.135 -1.358 -1.602 -1.868 -2.155 -2.464 -2.796 -3.151 -3.530 -3.932 -4.360 -4.814 -5.294 -5.801 -6.337 -6.903 -7.499 -8.128 -8.791 -9.489 -10.225 -11.000 -11.819 -12.682 -13.595 -14.560 -15.582 -16.668 -17.823 -19.055 -20.375 -21.794 -23.328 -24.998 -26.831 -28.866 -31.158 -33.793 -36.902 -40.692 -45.260 -48.825 -48.560 -46.347 -44.656 -43.768 -43.490 -43.670 -44.180 -44.836 -45.321 -45.232 -44.389 -43.012 -41.456 -39.955 -38.607 -37.432 -36.426 -35.574 -34.859 -34.269 -33.790 -33.414 -33.131 -32.936 -32.823 -32.789 -32.830 -32.943 -33.128 -33.383 -33.708 -34.103 -34.571 -35.111 -35.728 -36.422 -37.199 -38.062 -39.019 -40.076 -41.241 -42.524 -43.939 -45.497 -47.214 -49.107 -51.186 -53.454 -55.881 -58.375 -60.719 -62.532 -63.355 -62.935 -61.463 -59.415 -57.209 -55.075 -53.110 -51.339 -49.760 -48.358 -47.116 -46.020 -45.055 -44.208 -43.471 -42.833 -42.288 -41.830 -41.454 -41.156 -40.932 -40.781 -40.700 -40.689 -40.746 -40.871 -41.066 -41.330 -41.666 -42.075 -42.562 -43.129 -43.782 -44.526 -45.370 -46.321 -47.391 -48.593 -49.940 -51.446 -53.122 -54.959 -56.905 -58.806 -60.376 -61.326 -61.650 -61.658 -61.706 -62.049 -62.879 -64.431 -67.127 -71.498 -71.964 -66.414 -61.718 -58.296 -55.653 -53.510 -51.720 -50.193 -48.876 -47.729 -46.726 -45.846 -45.074 -44.398 -43.810 -43.301 -42.867 -42.502 -42.203 -41.966 -41.789 -41.670 -41.607 -41.600 -41.647 -41.748 -41.903 -42.112 -42.377 -42.697 -43.074 -43.510 -44.008 -44.570 -45.199 -45.899 -46.677 -47.537 -48.489 -49.541 -50.660 -51.780 -52.900 0.03 -17.9648 -17.6109 -17.2605 -16.9136 -16.5703 -16.2305 -15.8942 -15.5614 -15.2321 -14.9064 -14.5842 -14.2655 -13.9503 -13.6386 -13.3305 -13.0258 -12.7247 -12.4272 -12.1331 -11.8426 -11.5555 -11.272 -10.9921 -10.7156 -10.4427 -10.1733 -9.9074 -9.645 -9.3861 -9.1308 -8.879 -8.6307 -8.3859 -8.1446 -7.9069 -7.6727 -7.442 -7.2148 -6.9912 -6.771 -6.5544 -6.3413 -6.1318 -5.9257 -5.7232 -5.5242 -5.3287 -5.1367 -4.9483 -4.7633 -4.5819 -4.404 -4.2297 -4.0588 -3.8915 -3.7277 -3.5674 -3.4106 -3.2574 -3.1077 -2.9615 -2.8188 -2.6796 -2.544 -2.4119 -2.2833 -2.1582 -2.0366 -1.9186 -1.804 -1.693 -1.5856 -1.4816 -1.3812 -1.2842 -1.1908 -1.101 -1.0146 -0.93177 -0.85246 -0.77666 -0.70438 -0.63563 -0.57039 -0.50868 -0.45048 -0.39581 -0.34465 -0.29702 -0.2529 -0.21231 -0.17524 -0.14169 -0.11165 -0.085142 -0.062151 -0.04268 -0.026729 -0.014299 -0.0053894 0 0.0018691 0.00021775 -0.0049539 -0.013646 -0.025858 -0.041591 -0.060844 -0.083618 -0.10991 -0.13973 -0.17306 -0.20992 -0.25029 -0.29419 -0.3416 -0.39254 -0.447 -0.50497 -0.56647 -0.63149 -0.70003 -0.77209 -0.84767 -0.92677 -1.0094 -1.0955 -1.1852 -1.2784 -1.3751 -1.4753 -1.579 -1.6863 -1.7971 -1.9114 -2.0292 -2.1506 -2.2754 -2.4038 -2.5357 -2.6711 -2.8101 -2.9525 -3.0985 -3.248 -3.4011 -3.5576 -3.7177 -3.8813 -4.0484 -4.219 -4.3932 -4.5708 -4.752 -4.9367 -5.125 -5.3167 -5.512 -5.7108 -5.9131 -6.1189 -6.3283 -6.5411 -6.7575 -6.9775 -7.2009 -7.4278 -7.6583 -7.8923 -8.1298 -8.3709 -8.6154 -8.8635 -9.1151 -9.3702 -9.6289 -9.891 -10.1567 -10.4259 -10.6986 -10.9749 -11.2546 -11.5379 -11.8247 -12.115 -12.4089 -12.7062 -13.0071 -13.3115 -13.6194 -13.9309 -14.2459 -14.5643 -14.8863 -15.2119 -15.5409 -15.8735 -16.2096 -16.5492 -16.8923 -17.239 1.0 43505.68 WV1 HH 20.18 21.55 0.05 -4.376e+10 2.900e+12 -4.027e+10 3.118e+12 -3.586e+10 3.332e+12 -3.057e+10 3.541e+12 -2.443e+10 3.743e+12 -1.754e+10 3.933e+12 -9.962e+09 4.111e+12 -1.817e+09 4.274e+12 6.752e+09 4.419e+12 1.561e+10 4.545e+12 2.460e+10 4.649e+12 3.354e+10 4.729e+12 4.226e+10 4.784e+12 5.060e+10 4.813e+12 5.836e+10 4.815e+12 6.538e+10 4.789e+12 7.152e+10 4.734e+12 7.662e+10 4.653e+12 8.060e+10 4.544e+12 8.336e+10 4.410e+12 8.491e+10 4.252e+12 8.546e+10 4.071e+12 8.474e+10 3.870e+12 8.272e+10 3.652e+12 7.947e+10 3.419e+12 7.509e+10 3.175e+12 6.972e+10 2.922e+12 6.351e+10 2.664e+12 5.665e+10 2.405e+12 4.935e+10 2.148e+12 4.182e+10 1.896e+12 3.427e+10 1.653e+12 2.691e+10 1.420e+12 1.997e+10 1.203e+12 1.361e+10 1.001e+12 8.004e+09 8.170e+11 3.272e+09 6.528e+11 -5.090e+08 5.088e+11 -3.300e+09 3.853e+11 -5.115e+09 2.821e+11 -6.022e+09 1.984e+11 -6.134e+09 1.327e+11 -5.611e+09 8.353e+10 -4.647e+09 4.854e+10 -3.454e+09 2.535e+10 -2.248e+09 1.140e+10 -1.216e+09 4.083e+09 -4.936e+08 9.935e+08 -1.203e+08 1.041e+08 3.854e+06 -8.091e+06 1.683e+08 1.002e+08 9.136e+08 1.009e+09 3.099e+09 4.740e+09 7.979e+09 1.507e+10 1.727e+10 3.784e+10 3.324e+10 8.132e+10 5.887e+10 1.566e+11 9.776e+10 2.777e+11 1.545e+11 4.623e+11 2.346e+11 7.320e+11 3.444e+11 1.112e+12 4.919e+11 1.632e+12 6.860e+11 2.327e+12 9.367e+11 3.236e+12 1.256e+12 4.403e+12 1.658e+12 5.880e+12 2.156e+12 7.718e+12 2.767e+12 9.979e+12 3.513e+12 1.274e+13 4.411e+12 1.606e+13 5.483e+12 2.002e+13 6.755e+12 2.469e+13 8.248e+12 3.017e+13 9.993e+12 3.654e+13 1.202e+13 4.389e+13 1.435e+13 5.232e+13 1.703e+13 6.192e+13 2.008e+13 7.280e+13 2.354e+13 8.504e+13 2.744e+13 9.875e+13 3.183e+13 1.140e+14 3.673e+13 1.310e+14 4.218e+13 1.497e+14 4.823e+13 1.702e+14 5.490e+13 1.927e+14 6.222e+13 2.171e+14 7.025e+13 2.437e+14 7.900e+13 2.723e+14 8.851e+13 3.031e+14 9.881e+13 3.362e+14 1.099e+14 3.715e+14 1.219e+14 4.090e+14 1.347e+14 4.488e+14 1.483e+14 4.909e+14 1.629e+14 5.352e+14 1.783e+14 5.817e+14 1.946e+14 6.303e+14 2.118e+14 6.809e+14 2.299e+14 7.335e+14 2.488e+14 7.880e+14 2.686e+14 8.442e+14 2.891e+14 9.023e+14 3.104e+14 9.618e+14 3.324e+14 1.023e+15 3.551e+14 1.085e+15 3.784e+14 1.148e+15 4.022e+14 1.211e+15 4.265e+14 1.275e+15 4.513e+14 1.339e+15 4.763e+14 1.404e+15 5.016e+14 1.468e+15 5.271e+14 1.531e+15 5.526e+14 1.594e+15 5.781e+14 1.655e+15 6.034e+14 1.715e+15 6.284e+14 1.774e+15 6.531e+14 1.831e+15 6.773e+14 1.885e+15 7.008e+14 1.937e+15 7.237e+14 1.986e+15 7.458e+14 2.033e+15 7.670e+14 2.076e+15 7.871e+14 2.116e+15 8.062e+14 2.152e+15 8.239e+14 2.184e+15 8.404e+14 2.212e+15 8.555e+14 2.237e+15 8.691e+14 2.257e+15 8.811e+14 2.272e+15 8.915e+14 2.283e+15 9.002e+14 2.290e+15 9.072e+14 2.292e+15 9.124e+14 2.290e+15 9.159e+14 2.283e+15 9.174e+14 2.271e+15 9.172e+14 2.256e+15 9.151e+14 2.235e+15 9.112e+14 2.211e+15 9.054e+14 2.182e+15 8.979e+14 2.150e+15 8.888e+14 2.114e+15 8.782e+14 2.074e+15 8.661e+14 2.032e+15 8.524e+14 1.986e+15 8.371e+14 1.937e+15 8.204e+14 1.886e+15 8.024e+14 1.832e+15 7.830e+14 1.775e+15 7.624e+14 1.717e+15 7.408e+14 1.657e+15 7.182e+14 1.596e+15 6.947e+14 1.533e+15 6.705e+14 1.470e+15 6.456e+14 1.406e+15 6.202e+14 1.342e+15 5.944e+14 1.278e+15 5.683e+14 1.213e+15 5.420e+14 1.150e+15 5.157e+14 1.087e+15 4.894e+14 1.025e+15 4.632e+14 9.637e+14 4.373e+14 9.039e+14 4.118e+14 8.456e+14 3.866e+14 7.890e+14 3.620e+14 7.341e+14 3.380e+14 6.811e+14 3.147e+14 6.301e+14 2.921e+14 5.812e+14 2.703e+14 5.344e+14 2.494e+14 4.899e+14 2.293e+14 4.476e+14 2.101e+14 4.077e+14 1.919e+14 3.700e+14 1.746e+14 3.346e+14 1.583e+14 3.015e+14 1.430e+14 2.707e+14 1.287e+14 2.420e+14 1.153e+14 2.155e+14 1.029e+14 1.911e+14 9.144e+13 1.688e+14 8.088e+13 1.483e+14 7.120e+13 1.297e+14 6.237e+13 1.128e+14 5.435e+13 9.766e+13 4.710e+13 8.406e+13 4.058e+13 7.192e+13 3.475e+13 6.115e+13 2.956e+13 5.166e+13 2.497e+13 4.333e+13 2.094e+13 3.606e+13 1.742e+13 2.978e+13 1.437e+13 2.438e+13 1.174e+13 1.977e+13 9.500e+12 1.587e+13 7.604e+12 1.260e+13 6.014e+12 9.884e+12 4.695e+12 7.650e+12 3.612e+12 5.833e+12 2.734e+12 4.374e+12 2.033e+12 3.220e+12 1.480e+12 2.320e+12 1.053e+12 1.631e+12 7.287e+11 1.115e+12 4.883e+11 7.372e+11 3.150e+11 4.682e+11 1.940e+11 2.833e+11 1.127e+11 1.612e+11 6.084e+10 8.482e+10 2.980e+10 4.021e+10 1.275e+10 1.646e+10 4.471e+09 5.411e+09 1.142e+09 1.245e+09 1.638e+08 1.456e+08 4.914e+06 2.866e+06 2.118e+07 8.844e+07 2.933e+08 7.690e+08 1.469e+09 3.236e+09 4.610e+09 9.253e+09 1.107e+10 2.095e+10 2.233e+10 4.060e+10 3.995e+10 7.046e+10 6.541e+10 1.127e+11 1.001e+11 1.691e+11 1.450e+11 2.412e+11 2.013e+11 3.301e+11 2.693e+11 4.362e+11 3.493e+11 5.596e+11 4.414e+11 7.001e+11 5.450e+11 8.565e+11 6.593e+11 1.027e+12 7.834e+11 1.211e+12 9.160e+11 1.406e+12 1.055e+12 1.608e+12 1.200e+12 1.816e+12 1.347e+12 2.026e+12 1.496e+12 2.235e+12 1.643e+12 2.441e+12 1.787e+12 2.640e+12 1.926e+12 2.830e+12 2.057e+12 3.007e+12 2.180e+12 3.170e+12 2.291e+12 3.315e+12 2.389e+12 3.441e+12 2.474e+12 3.547e+12 2.544e+12 3.631e+12 2.598e+12 3.691e+12 2.635e+12 3.729e+12 2.656e+12 3.743e+12 2.660e+12 3.733e+12 2.647e+12 3.701e+12 2.618e+12 3.647e+12 2.574e+12 3.572e+12 2.515e+12 3.479e+12 2.443e+12 3.367e+12 2.358e+12 3.240e+12 2.263e+12 3.100e+12 2.158e+12 2.948e+12 2.046e+12 2.786e+12 1.927e+12 2.618e+12 1.804e+12 2.444e+12 1.678e+12 2.268e+12 1.551e+12 2.091e+12 1.423e+12 1.916e+12 1.297e+12 1.743e+12 1.174e+12 1.575e+12 1.055e+12 1.412e+12 9.398e+11 1.257e+12 8.308e+11 1.110e+12 7.281e+11 9.725e+11 6.323e+11 8.444e+11 5.439e+11 7.264e+11 4.631e+11 6.189e+11 3.899e+11 5.217e+11 3.245e+11 4.349e+11 2.667e+11 3.582e+11 2.161e+11 2.911e+11 1.724e+11 2.332e+11 1.353e+11 1.839e+11 1.041e+11 1.425e+11 7.850e+10 1.082e+11 5.776e+10 8.041e+10 4.131e+10 5.822e+10 2.860e+10 4.093e+10 1.905e+10 2.780e+10 1.210e+10 1.810e+10 7.244e+09 1.120e+10 4.023e+09 6.508e+09 2.017e+09 3.477e+09 8.767e+08 1.663e+09 3.050e+08 6.781e+08 7.054e+07 2.158e+08 4.687e+06 4.509e+07 -1.924e+06 4.197e+06 -2.749e+05 -3.597e+05 8.371e+06 -4.104e+05 7.119e+07 2.406e+07 2.751e+08 1.406e+08 7.386e+08 4.535e+08 1.605e+09 1.095e+09 3.036e+09 2.219e+09 5.161e+09 4.101e+09 8.255e+09 6.680e+09 1.239e+10 1.029e+10 1.772e+10 1.503e+10 2.440e+10 2.103e+10 3.252e+10 2.839e+10 4.214e+10 3.717e+10 5.330e+10 4.741e+10 6.602e+10 5.912e+10 8.022e+10 7.224e+10 9.585e+10 8.670e+10 1.128e+11 1.024e+11 1.309e+11 1.192e+11 1.500e+11 1.369e+11 1.698e+11 1.553e+11 1.901e+11 1.741e+11 2.107e+11 1.932e+11 2.313e+11 2.123e+11 2.516e+11 2.310e+11 2.712e+11 2.492e+11 2.900e+11 2.665e+11 3.076e+11 2.828e+11 3.238e+11 2.977e+11 3.383e+11 3.111e+11 3.509e+11 3.228e+11 3.615e+11 3.326e+11 3.699e+11 3.404e+11 3.759e+11 3.460e+11 3.795e+11 3.495e+11 3.807e+11 3.507e+11 3.794e+11 3.497e+11 3.758e+11 3.466e+11 3.698e+11 3.413e+11 3.616e+11 3.341e+11 3.513e+11 3.250e+11 3.392e+11 3.142e+11 3.253e+11 3.018e+11 3.100e+11 2.881e+11 2.935e+11 2.733e+11 2.760e+11 2.576e+11 2.577e+11 2.412e+11 2.390e+11 2.243e+11 2.201e+11 2.072e+11 2.012e+11 1.900e+11 1.824e+11 1.730e+11 1.641e+11 1.563e+11 1.463e+11 1.400e+11 1.293e+11 1.244e+11 1.132e+11 1.096e+11 9.812e+10 9.562e+10 8.413e+10 8.259e+10 7.131e+10 7.059e+10 5.970e+10 5.965e+10 4.930e+10 4.977e+10 4.012e+10 4.099e+10 3.212e+10 3.325e+10 2.525e+10 2.654e+10 1.945e+10 2.081e+10 1.464e+10 1.599e+10 1.073e+10 1.200e+10 7.621e+09 8.773e+09 5.219e+09 6.218e+09 3.418e+09 4.248e+09 2.120e+09 2.778e+09 1.225e+09 1.719e+09 6.443e+08 9.924e+08 2.969e+08 5.226e+08 1.111e+08 2.420e+08 2.802e+07 9.267e+07 1.044e+06 2.617e+07 -3.148e+06 4.059e+06 -2.452e+06 -1.693e+06 3.217e+05 -4.867e+06 1.154e+07 -8.110e+06 4.903e+07 -8.452e+06 1.444e+08 7.175e+06 3.388e+08 6.128e+07 6.806e+08 1.832e+08 1.223e+09 4.073e+08 2.025e+09 7.723e+08 3.145e+09 1.319e+09 4.640e+09 2.089e+09 6.569e+09 3.123e+09 8.979e+09 4.458e+09 1.191e+10 6.128e+09 1.541e+10 8.162e+09 1.949e+10 1.058e+10 2.416e+10 1.340e+10 2.943e+10 1.662e+10 3.528e+10 2.025e+10 4.168e+10 2.426e+10 4.860e+10 2.864e+10 5.598e+10 3.336e+10 6.375e+10 3.838e+10 7.185e+10 4.365e+10 8.018e+10 4.912e+10 8.864e+10 5.472e+10 9.714e+10 6.040e+10 1.056e+11 6.609e+10 1.138e+11 7.170e+10 1.218e+11 7.718e+10 1.294e+11 8.245e+10 1.365e+11 8.744e+10 1.430e+11 9.209e+10 1.488e+11 9.633e+10 1.539e+11 1.001e+11 1.581e+11 1.034e+11 1.615e+11 1.061e+11 1.639e+11 1.082e+11 1.654e+11 1.097e+11 1.659e+11 1.106e+11 1.655e+11 1.108e+11 1.641e+11 1.104e+11 1.617e+11 1.094e+11 1.585e+11 1.077e+11 1.544e+11 1.055e+11 1.495e+11 1.028e+11 1.440e+11 9.949e+10 1.378e+11 9.577e+10 1.310e+11 9.165e+10 1.239e+11 8.717e+10 1.163e+11 8.239e+10 1.086e+11 7.738e+10 1.006e+11 7.222e+10 9.260e+10 6.696e+10 8.461e+10 6.167e+10 7.673e+10 5.640e+10 6.903e+10 5.121e+10 6.160e+10 4.615e+10 5.449e+10 4.126e+10 4.775e+10 3.659e+10 4.144e+10 3.216e+10 3.559e+10 2.801e+10 3.023e+10 2.416e+10 2.536e+10 2.062e+10 2.100e+10 1.740e+10 1.713e+10 1.450e+10 1.376e+10 1.193e+10 1.086e+10 9.673e+09 8.398e+09 7.717e+09 6.351e+09 6.047e+09 4.681e+09 4.645e+09 3.347e+09 3.486e+09 2.309e+09 2.549e+09 1.527e+09 1.808e+09 9.561e+08 1.236e+09 5.589e+08 8.090e+08 2.976e+08 5.016e+08 1.379e+08 2.903e+08 5.030e+07 1.537e+08 9.479e+06 7.218e+07 -4.669e+06 2.868e+07 -6.797e+06 8.732e+06 -5.611e+06 4.653e+05 -3.688e+06 -4.256e+06 6.898e+05 -9.842e+06 1.319e+07 -1.880e+07 4.445e+07 -3.178e+07 1.095e+08 -4.683e+07 2.263e+08 -5.967e+07 4.157e+08 -6.420e+07 6.998e+08 -5.293e+07 1.101e+09 -1.739e+07 1.643e+09 5.157e+07 2.347e+09 1.632e+08 3.233e+09 3.265e+08 4.320e+09 5.501e+08 5.620e+09 8.414e+08 7.145e+09 1.207e+09 8.902e+09 1.651e+09 1.089e+10 2.177e+09 1.311e+10 2.787e+09 1.555e+10 3.479e+09 1.819e+10 4.250e+09 2.102e+10 5.095e+09 2.402e+10 6.009e+09 2.715e+10 6.981e+09 3.038e+10 8.000e+09 3.369e+10 9.057e+09 3.701e+10 1.014e+10 4.033e+10 1.122e+10 4.358e+10 1.230e+10 4.674e+10 1.336e+10 4.976e+10 1.439e+10 5.259e+10 1.536e+10 5.520e+10 1.626e+10 5.755e+10 1.709e+10 5.961e+10 1.782e+10 6.134e+10 1.846e+10 6.272e+10 1.898e+10 6.374e+10 1.938e+10 6.438e+10 1.966e+10 6.463e+10 1.981e+10 6.449e+10 1.984e+10 6.396e+10 1.974e+10 6.305e+10 1.951e+10 6.179e+10 1.917e+10 6.018e+10 1.872e+10 5.826e+10 1.816e+10 5.606e+10 1.751e+10 5.360e+10 1.677e+10 5.093e+10 1.597e+10 4.808e+10 1.511e+10 4.510e+10 1.419e+10 4.201e+10 1.325e+10 3.885e+10 1.228e+10 3.568e+10 1.130e+10 3.251e+10 1.032e+10 2.940e+10 9.356e+09 2.636e+10 8.411e+09 2.344e+10 7.499e+09 2.065e+10 6.627e+09 1.801e+10 5.800e+09 1.555e+10 5.027e+09 1.328e+10 4.310e+09 1.121e+10 3.653e+09 9.334e+09 3.058e+09 7.664e+09 2.525e+09 6.194e+09 2.053e+09 4.921e+09 1.643e+09 3.833e+09 1.290e+09 2.920e+09 9.921e+08 2.169e+09 7.451e+08 1.565e+09 5.444e+08 1.090e+09 3.850e+08 7.276e+08 2.621e+08 4.614e+08 1.702e+08 2.737e+08 1.042e+08 1.489e+08 5.914e+07 7.162e+07 3.028e+07 2.857e+07 1.335e+07 8.227e+06 4.639e+06 1.092e+06 1.018e+06 -1.109e+05 1.518e+05 -5.745e+05 4.954e+04 -3.843e+05 -1.163e+04 1.750e+04 1.756e+04 2.497e+06 6.417e+05 1.293e+07 3.275e+06 3.862e+07 9.988e+06 8.859e+07 2.343e+07 1.734e+08 4.677e+07 3.047e+08 8.360e+07 4.947e+08 1.377e+08 7.560e+08 2.130e+08 1.101e+09 3.137e+08 1.542e+09 4.434e+08 2.088e+09 6.057e+08 2.751e+09 8.040e+08 3.535e+09 1.041e+09 4.448e+09 1.317e+09 5.492e+09 1.636e+09 6.667e+09 1.997e+09 7.970e+09 2.399e+09 9.397e+09 2.842e+09 1.094e+10 3.323e+09 1.258e+10 3.838e+09 1.431e+10 4.384e+09 1.612e+10 4.956e+09 1.798e+10 5.548e+09 1.988e+10 6.154e+09 2.178e+10 6.767e+09 2.368e+10 7.380e+09 2.554e+10 7.985e+09 2.735e+10 8.576e+09 2.908e+10 9.143e+09 3.070e+10 9.681e+09 3.220e+10 1.018e+10 3.356e+10 1.064e+10 3.475e+10 1.105e+10 3.577e+10 1.140e+10 3.659e+10 1.169e+10 3.722e+10 1.192e+10 3.763e+10 1.208e+10 3.784e+10 1.218e+10 3.783e+10 1.221e+10 3.760e+10 1.217e+10 3.717e+10 1.206e+10 3.654e+10 1.189e+10 3.571e+10 1.165e+10 3.471e+10 1.136e+10 3.354e+10 1.101e+10 3.223e+10 1.061e+10 3.079e+10 1.016e+10 2.924e+10 9.683e+09 2.759e+10 9.171e+09 2.587e+10 8.635e+09 2.411e+10 8.081e+09 2.231e+10 7.516e+09 2.050e+10 6.946e+09 1.871e+10 6.378e+09 1.695e+10 5.816e+09 1.523e+10 5.267e+09 1.358e+10 4.734e+09 1.199e+10 4.223e+09 1.050e+10 3.736e+09 9.102e+09 3.278e+09 7.807e+09 2.849e+09 6.622e+09 2.453e+09 5.548e+09 2.090e+09 4.586e+09 1.761e+09 0.005 -53.924 -52.851 -51.777 -50.704 -49.632 -48.671 -47.811 -47.043 -46.360 -45.758 -45.230 -44.774 -44.387 -44.066 -43.809 -43.616 -43.485 -43.416 -43.410 -43.466 -43.587 -43.773 -44.027 -44.352 -44.752 -45.230 -45.792 -46.445 -47.198 -48.060 -49.047 -50.173 -51.463 -52.945 -54.661 -56.671 -59.064 -61.992 -65.733 -70.946 -80.309 -85.505 -81.971 -78.618 -76.486 -72.500 -67.715 -63.503 -60.027 -57.129 -54.667 -52.540 -50.679 -49.036 -47.576 -46.270 -45.100 -44.048 -43.104 -42.256 -41.497 -40.820 -40.219 -39.691 -39.233 -38.840 -38.511 -38.244 -38.038 -37.892 -37.807 -37.782 -37.817 -37.913 -38.071 -38.293 -38.580 -38.937 -39.365 -39.868 -40.451 -41.120 -41.879 -42.736 -43.699 -44.776 -45.976 -47.307 -48.776 -50.388 -52.139 -54.021 -56.026 -58.164 -60.487 -62.960 -64.699 -63.847 -60.524 -56.852 -53.651 -50.922 -48.567 -46.507 -44.688 -43.068 -41.618 -40.314 -39.141 -38.084 -37.132 -36.277 -35.512 -34.832 -34.231 -33.707 -33.258 -32.880 -32.574 -32.338 -32.172 -32.079 -32.058 -32.113 -32.246 -32.462 -32.766 -33.165 -33.667 -34.284 -35.029 -35.921 -36.982 -38.246 -39.754 -41.567 -43.765 -46.433 -49.545 -52.483 -53.632 -52.914 -52.214 -52.558 -54.541 -57.443 -54.678 -47.739 -42.645 -38.736 -35.540 -32.817 -30.436 -28.314 -26.396 -24.647 -23.039 -21.550 -20.166 -18.872 -17.661 -16.522 -15.449 -14.437 -13.480 -12.574 -11.716 -10.903 -10.131 -9.399 -8.703 -8.044 -7.417 -6.823 -6.260 -5.726 -5.221 -4.743 -4.292 -3.866 -3.466 -3.089 -2.737 -2.408 -2.101 -1.816 -1.554 -1.313 -1.092 -0.893 -0.714 -0.556 -0.417 -0.299 -0.200 -0.121 -0.062 -0.022 -0.001 0.000 -0.018 -0.055 -0.112 -0.188 -0.284 -0.400 -0.536 -0.692 -0.868 -1.065 -1.283 -1.522 -1.782 -2.065 -2.370 -2.698 -3.049 -3.425 -3.825 -4.250 -4.702 -5.181 -5.687 -6.223 -6.790 -7.388 -8.019 -8.685 -9.388 -10.130 -10.913 -11.741 -12.617 -13.544 -14.527 -15.571 -16.683 -17.870 -19.142 -20.511 -21.993 -23.607 -25.382 -27.356 -29.588 -32.171 -35.273 -39.237 -45.003 -56.826 -53.498 -47.243 -44.133 -42.673 -42.083 -42.089 -42.572 -43.449 -44.580 -45.584 -45.747 -44.672 -42.853 -40.927 -39.177 -37.667 -36.387 -35.307 -34.399 -33.639 -33.009 -32.495 -32.085 -31.769 -31.541 -31.394 -31.323 -31.326 -31.399 -31.541 -31.750 -32.025 -32.366 -32.775 -33.251 -33.797 -34.414 -35.106 -35.877 -36.731 -37.674 -38.713 -39.857 -41.117 -42.505 -44.039 -45.737 -47.626 -49.734 -52.097 -54.742 -57.660 -60.681 -63.238 -64.464 -64.120 -62.776 -60.977 -58.985 -56.952 -54.990 -53.166 -51.507 -50.020 -48.697 -47.528 -46.499 -45.598 -44.815 -44.140 -43.566 -43.085 -42.693 -42.384 -42.155 -42.003 -41.926 -41.922 -41.991 -42.132 -42.345 -42.631 -42.993 -43.432 -43.950 -44.550 -45.236 -46.013 -46.884 -47.855 -48.928 -50.106 -51.384 -52.750 -54.173 -55.604 -56.967 -58.186 -59.223 -60.116 -60.990 -62.034 -63.499 -65.767 -69.420 -72.484 -70.023 -64.310 -60.178 -57.096 -54.647 -52.620 -50.899 -49.413 -48.115 -46.974 -45.965 -45.072 -44.281 -43.582 -42.965 -42.425 -41.956 -41.554 -41.214 -40.934 -40.710 -40.542 -40.427 -40.364 -40.352 -40.391 -40.479 -40.617 -40.805 -41.044 -41.333 -41.673 -42.067 -42.516 -43.020 -43.583 -44.208 -44.897 -45.654 -46.485 -47.394 -48.388 -49.384 -50.379 -51.374 0 1 1.0 7272785388.14 WV1 VV 20.18 21.55 0.05 2.828e+12 -1.568e+12 3.015e+12 -1.648e+12 3.196e+12 -1.723e+12 3.369e+12 -1.791e+12 3.533e+12 -1.852e+12 3.685e+12 -1.905e+12 3.824e+12 -1.949e+12 3.946e+12 -1.984e+12 4.050e+12 -2.009e+12 4.135e+12 -2.023e+12 4.199e+12 -2.026e+12 4.241e+12 -2.019e+12 4.260e+12 -2.001e+12 4.254e+12 -1.972e+12 4.224e+12 -1.933e+12 4.170e+12 -1.883e+12 4.091e+12 -1.824e+12 3.990e+12 -1.757e+12 3.866e+12 -1.681e+12 3.721e+12 -1.598e+12 3.558e+12 -1.510e+12 3.378e+12 -1.416e+12 3.183e+12 -1.317e+12 2.976e+12 -1.217e+12 2.760e+12 -1.114e+12 2.537e+12 -1.011e+12 2.311e+12 -9.090e+11 2.084e+12 -8.088e+11 1.859e+12 -7.115e+11 1.640e+12 -6.183e+11 1.428e+12 -5.301e+11 1.227e+12 -4.477e+11 1.038e+12 -3.719e+11 8.630e+11 -3.032e+11 7.041e+11 -2.419e+11 5.622e+11 -1.884e+11 4.380e+11 -1.426e+11 3.315e+11 -1.043e+11 2.426e+11 -7.329e+10 1.705e+11 -4.901e+10 1.140e+11 -3.077e+10 7.167e+10 -1.778e+10 4.160e+10 -9.176e+09 2.169e+10 -3.988e+09 9.713e+09 -1.284e+09 3.453e+09 -1.830e+08 8.267e+08 7.264e+07 8.381e+07 3.936e+07 -4.790e+06 -7.460e+06 7.699e+07 -1.558e+08 8.238e+08 -9.253e+08 3.950e+09 -3.379e+09 1.268e+10 -9.199e+09 3.204e+10 -2.078e+10 6.907e+10 -4.125e+10 1.332e+11 -7.466e+10 2.368e+11 -1.260e+11 3.945e+11 -2.011e+11 6.248e+11 -3.069e+11 9.499e+11 -4.518e+11 1.395e+12 -6.445e+11 1.989e+12 -8.957e+11 2.768e+12 -1.217e+12 3.769e+12 -1.621e+12 5.034e+12 -2.121e+12 6.613e+12 -2.734e+12 8.555e+12 -3.473e+12 1.092e+13 -4.358e+12 1.378e+13 -5.410e+12 1.718e+13 -6.644e+12 2.121e+13 -8.082e+12 2.594e+13 -9.748e+12 3.145e+13 -1.166e+13 3.781e+13 -1.384e+13 4.513e+13 -1.632e+13 5.348e+13 -1.911e+13 6.296e+13 -2.224e+13 7.367e+13 -2.574e+13 8.568e+13 -2.963e+13 9.910e+13 -3.393e+13 1.140e+14 -3.867e+13 1.306e+14 -4.386e+13 1.488e+14 -4.953e+13 1.688e+14 -5.570e+13 1.906e+14 -6.237e+13 2.144e+14 -6.957e+13 2.402e+14 -7.732e+13 2.680e+14 -8.560e+13 2.980e+14 -9.444e+13 3.301e+14 -1.038e+14 3.645e+14 -1.138e+14 4.010e+14 -1.243e+14 4.398e+14 -1.353e+14 4.808e+14 -1.468e+14 5.241e+14 -1.588e+14 5.695e+14 -1.713e+14 6.170e+14 -1.843e+14 6.666e+14 -1.976e+14 7.181e+14 -2.113e+14 7.716e+14 -2.254e+14 8.268e+14 -2.397e+14 8.838e+14 -2.542e+14 9.422e+14 -2.689e+14 1.002e+15 -2.838e+14 1.063e+15 -2.986e+14 1.125e+15 -3.135e+14 1.188e+15 -3.284e+14 1.251e+15 -3.431e+14 1.315e+15 -3.576e+14 1.378e+15 -3.719e+14 1.442e+15 -3.858e+14 1.505e+15 -3.994e+14 1.567e+15 -4.126e+14 1.629e+15 -4.253e+14 1.689e+15 -4.375e+14 1.748e+15 -4.491e+14 1.805e+15 -4.600e+14 1.861e+15 -4.703e+14 1.914e+15 -4.799e+14 1.964e+15 -4.887e+14 2.012e+15 -4.967e+14 2.057e+15 -5.039e+14 2.099e+15 -5.102e+14 2.138e+15 -5.156e+14 2.173e+15 -5.202e+14 2.204e+15 -5.237e+14 2.232e+15 -5.264e+14 2.255e+15 -5.280e+14 2.275e+15 -5.287e+14 2.290e+15 -5.284e+14 2.301e+15 -5.271e+14 2.307e+15 -5.249e+14 2.309e+15 -5.216e+14 2.307e+15 -5.174e+14 2.300e+15 -5.122e+14 2.289e+15 -5.061e+14 2.273e+15 -4.991e+14 2.253e+15 -4.912e+14 2.229e+15 -4.825e+14 2.201e+15 -4.729e+14 2.169e+15 -4.626e+14 2.133e+15 -4.517e+14 2.094e+15 -4.402e+14 2.051e+15 -4.280e+14 2.006e+15 -4.153e+14 1.957e+15 -4.021e+14 1.905e+15 -3.885e+14 1.851e+15 -3.745e+14 1.794e+15 -3.602e+14 1.736e+15 -3.457e+14 1.676e+15 -3.311e+14 1.614e+15 -3.163e+14 1.552e+15 -3.015e+14 1.488e+15 -2.867e+14 1.424e+15 -2.721e+14 1.359e+15 -2.576e+14 1.295e+15 -2.433e+14 1.231e+15 -2.292e+14 1.167e+15 -2.155e+14 1.103e+15 -2.021e+14 1.041e+15 -1.890e+14 9.797e+14 -1.764e+14 9.197e+14 -1.643e+14 8.612e+14 -1.526e+14 8.043e+14 -1.413e+14 7.491e+14 -1.306e+14 6.959e+14 -1.204e+14 6.446e+14 -1.106e+14 5.953e+14 -1.014e+14 5.482e+14 -9.274e+13 5.033e+14 -8.454e+13 4.606e+14 -7.685e+13 4.202e+14 -6.965e+13 3.821e+14 -6.292e+13 3.462e+14 -5.666e+13 3.126e+14 -5.085e+13 2.811e+14 -4.548e+13 2.519e+14 -4.053e+13 2.248e+14 -3.598e+13 1.998e+14 -3.182e+13 1.767e+14 -2.802e+13 1.556e+14 -2.458e+13 1.364e+14 -2.146e+13 1.189e+14 -1.865e+13 1.031e+14 -1.613e+13 8.888e+13 -1.387e+13 7.618e+13 -1.186e+13 6.488e+13 -1.008e+13 5.488e+13 -8.515e+12 4.609e+13 -7.143e+12 3.841e+13 -5.950e+12 3.175e+13 -4.918e+12 2.601e+13 -4.032e+12 2.110e+13 -3.276e+12 1.694e+13 -2.637e+12 1.345e+13 -2.100e+12 1.054e+13 -1.655e+12 8.153e+12 -1.288e+12 6.208e+12 -9.883e+11 4.648e+12 -7.475e+11 3.413e+12 -5.560e+11 2.452e+12 -4.058e+11 1.718e+12 -2.900e+11 1.169e+12 -2.021e+11 7.680e+11 -1.369e+11 4.842e+11 -8.962e+10 2.901e+11 -5.628e+10 1.630e+11 -3.357e+10 8.438e+10 -1.875e+10 3.906e+10 -9.592e+09 1.544e+10 -4.338e+09 4.803e+09 -1.631e+09 9.985e+08 -4.511e+08 9.269e+07 -7.027e+07 2.061e+06 1.549e+06 1.557e+08 5.977e+07 1.176e+09 2.470e+08 4.583e+09 5.892e+08 1.253e+10 1.025e+09 2.756e+10 1.434e+09 5.236e+10 1.657e+09 8.967e+10 1.523e+09 1.420e+11 8.539e+08 2.116e+11 -5.191e+08 3.004e+11 -2.748e+09 4.097e+11 -5.955e+09 5.403e+11 -1.023e+10 6.926e+11 -1.564e+10 8.662e+11 -2.219e+10 1.060e+12 -2.987e+10 1.273e+12 -3.862e+10 1.504e+12 -4.835e+10 1.749e+12 -5.891e+10 2.006e+12 -7.015e+10 2.271e+12 -8.189e+10 2.542e+12 -9.389e+10 2.814e+12 -1.059e+11 3.084e+12 -1.178e+11 3.348e+12 -1.292e+11 3.602e+12 -1.399e+11 3.843e+12 -1.497e+11 4.066e+12 -1.584e+11 4.269e+12 -1.657e+11 4.449e+12 -1.716e+11 4.603e+12 -1.758e+11 4.729e+12 -1.784e+11 4.826e+12 -1.792e+11 4.892e+12 -1.783e+11 4.927e+12 -1.757e+11 4.931e+12 -1.714e+11 4.904e+12 -1.657e+11 4.847e+12 -1.587e+11 4.761e+12 -1.505e+11 4.649e+12 -1.413e+11 4.512e+12 -1.314e+11 4.353e+12 -1.210e+11 4.174e+12 -1.102e+11 3.978e+12 -9.933e+10 3.768e+12 -8.856e+10 3.548e+12 -7.806e+10 3.320e+12 -6.801e+10 3.088e+12 -5.855e+10 2.854e+12 -4.975e+10 2.621e+12 -4.168e+10 2.391e+12 -3.440e+10 2.166e+12 -2.793e+10 1.948e+12 -2.225e+10 1.739e+12 -1.737e+10 1.541e+12 -1.324e+10 1.354e+12 -9.806e+09 1.181e+12 -7.014e+09 1.020e+12 -4.794e+09 8.728e+11 -3.071e+09 7.396e+11 -1.778e+09 6.199e+11 -8.435e+08 5.135e+11 -1.996e+08 4.201e+11 2.120e+08 3.390e+11 4.468e+08 2.694e+11 5.518e+08 2.105e+11 5.657e+08 1.614e+11 5.214e+08 1.211e+11 4.442e+08 8.866e+10 3.534e+08 6.311e+10 2.625e+08 4.342e+10 1.805e+08 2.872e+10 1.127e+08 1.810e+10 6.108e+07 1.072e+10 2.530e+07 5.881e+09 3.631e+06 2.905e+09 -6.852e+06 1.237e+09 -9.474e+06 4.215e+08 -7.581e+06 9.853e+07 -4.123e+06 1.088e+07 -1.276e+06 3.444e+05 -1.647e+05 1.610e+06 -2.266e+05 3.563e+07 4.353e+05 2.003e+08 6.024e+06 6.592e+08 2.298e+07 1.630e+09 6.030e+07 3.367e+09 1.015e+08 6.188e+09 2.764e+08 1.035e+10 4.781e+08 1.615e+10 7.720e+08 2.385e+10 1.182e+09 3.371e+10 1.734e+09 4.590e+10 2.453e+09 6.058e+10 3.365e+09 7.785e+10 4.496e+09 9.768e+10 5.866e+09 1.201e+11 7.495e+09 1.449e+11 9.398e+09 1.719e+11 1.158e+10 2.009e+11 1.404e+10 2.317e+11 1.679e+10 2.637e+11 1.979e+10 2.967e+11 2.304e+10 3.302e+11 2.649e+10 3.637e+11 3.012e+10 3.969e+11 3.387e+10 4.293e+11 3.770e+10 4.604e+11 4.155e+10 4.897e+11 4.536e+10 5.170e+11 4.907e+10 5.419e+11 5.262e+10 5.639e+11 5.596e+10 5.829e+11 5.902e+10 5.986e+11 6.175e+10 6.109e+11 6.412e+10 6.195e+11 6.608e+10 6.246e+11 6.761e+10 6.259e+11 6.868e+10 6.236e+11 6.928e+10 6.178e+11 6.941e+10 6.085e+11 6.907e+10 5.959e+11 6.828e+10 5.802e+11 6.707e+10 5.617e+11 6.545e+10 5.406e+11 6.346e+10 5.173e+11 6.114e+10 4.920e+11 5.854e+10 4.650e+11 5.568e+10 4.368e+11 5.262e+10 4.077e+11 4.941e+10 3.778e+11 4.609e+10 3.477e+11 4.272e+10 3.177e+11 3.931e+10 2.880e+11 3.593e+10 2.590e+11 3.259e+10 2.309e+11 2.934e+10 2.040e+11 2.620e+10 1.785e+11 2.319e+10 1.546e+11 2.035e+10 1.325e+11 1.767e+10 1.121e+11 1.519e+10 9.373e+10 1.290e+10 7.724e+10 1.082e+10 6.269e+10 8.945e+09 5.003e+10 7.279e+09 3.917e+10 5.819e+09 3.004e+10 4.559e+09 2.249e+10 3.490e+09 1.638e+10 2.600e+09 1.155e+10 1.877e+09 7.849e+09 1.304e+09 5.094e+09 8.655e+08 3.126e+09 5.420e+08 1.787e+09 3.148e+08 9.291e+08 1.651e+08 4.242e+08 7.476e+07 1.594e+08 2.668e+07 4.330e+07 5.976e+06 6.263e+06 1.728e+05 -4.361e+05 -7.424e+05 -7.882e+05 -1.095e+06 1.773e+06 -1.075e+06 1.923e+07 -1.318e+05 8.373e+07 8.092e+06 2.422e+08 3.499e+07 5.532e+08 9.523e+07 1.084e+09 2.068e+08 1.908e+09 3.906e+08 3.102e+09 6.697e+08 4.743e+09 1.068e+09 6.903e+09 1.611e+09 9.652e+09 2.322e+09 1.305e+10 3.225e+09 1.715e+10 4.339e+09 2.199e+10 5.685e+09 2.760e+10 7.274e+09 3.399e+10 9.117e+09 4.116e+10 1.122e+10 4.909e+10 1.358e+10 5.775e+10 1.620e+10 6.709e+10 1.906e+10 7.705e+10 2.215e+10 8.754e+10 2.545e+10 9.848e+10 2.893e+10 1.097e+11 3.256e+10 1.212e+11 3.632e+10 1.328e+11 4.016e+10 1.443e+11 4.404e+10 1.556e+11 4.793e+10 1.666e+11 5.179e+10 1.771e+11 5.557e+10 1.869e+11 5.923e+10 1.960e+11 6.272e+10 2.041e+11 6.602e+10 2.112e+11 6.908e+10 2.172e+11 7.186e+10 2.219e+11 7.433e+10 2.253e+11 7.647e+10 2.273e+11 7.824e+10 2.279e+11 7.963e+10 2.271e+11 8.061e+10 2.249e+11 8.117e+10 2.213e+11 8.130e+10 2.165e+11 8.100e+10 2.104e+11 8.027e+10 2.031e+11 7.912e+10 1.949e+11 7.754e+10 1.858e+11 7.554e+10 1.759e+11 7.316e+10 1.654e+11 7.045e+10 1.545e+11 6.743e+10 1.433e+11 6.414e+10 1.319e+11 6.063e+10 1.205e+11 5.693e+10 1.093e+11 5.309e+10 9.831e+10 4.917e+10 8.769e+10 4.519e+10 7.754e+10 4.121e+10 6.794e+10 3.729e+10 5.894e+10 3.344e+10 5.061e+10 2.973e+10 4.298e+10 2.617e+10 3.606e+10 2.281e+10 2.987e+10 1.966e+10 2.440e+10 1.675e+10 1.961e+10 1.409e+10 1.549e+10 1.169e+10 1.201e+10 9.550e+09 9.094e+09 7.673e+09 6.714e+09 6.052e+09 4.809e+09 4.676e+09 3.321e+09 3.527e+09 2.193e+09 2.589e+09 1.368e+09 1.843e+09 7.896e+08 1.264e+09 4.072e+08 8.312e+08 1.725e+08 5.208e+08 4.216e+07 3.091e+08 -2.056e+07 1.738e+08 -4.542e+07 9.279e+07 -5.250e+07 4.537e+07 -5.102e+07 1.580e+07 -4.309e+07 -4.381e+06 -2.990e+07 -1.826e+07 -1.363e+07 -2.948e+07 1.053e+07 -4.634e+07 6.216e+07 -7.638e+07 1.710e+08 -1.203e+08 3.698e+08 -1.735e+08 6.935e+08 -2.286e+08 1.178e+09 -2.765e+08 1.861e+09 -3.062e+08 2.780e+09 -3.053e+08 3.967e+09 -2.604e+08 5.455e+09 -1.569e+08 7.272e+09 1.987e+07 9.438e+09 2.849e+08 1.196e+10 6.524e+08 1.486e+10 1.137e+09 1.813e+10 1.750e+09 2.175e+10 2.503e+09 2.571e+10 3.406e+09 2.997e+10 4.465e+09 3.451e+10 5.683e+09 3.928e+10 7.063e+09 4.422e+10 8.601e+09 4.928e+10 1.029e+10 5.440e+10 1.213e+10 5.951e+10 1.409e+10 6.455e+10 1.617e+10 6.945e+10 1.834e+10 7.414e+10 2.058e+10 7.857e+10 2.286e+10 8.268e+10 2.517e+10 8.640e+10 2.745e+10 8.970e+10 2.970e+10 9.253e+10 3.186e+10 9.486e+10 3.392e+10 9.665e+10 3.584e+10 9.790e+10 3.760e+10 9.859e+10 3.916e+10 9.872e+10 4.050e+10 9.829e+10 4.160e+10 9.731e+10 4.245e+10 9.581e+10 4.304e+10 9.380e+10 4.335e+10 9.132e+10 4.338e+10 8.841e+10 4.314e+10 8.509e+10 4.264e+10 8.142e+10 4.187e+10 7.746e+10 4.086e+10 7.324e+10 3.962e+10 6.881e+10 3.817e+10 6.424e+10 3.655e+10 5.958e+10 3.476e+10 5.486e+10 3.284e+10 5.015e+10 3.083e+10 4.550e+10 2.873e+10 4.094e+10 2.659e+10 3.652e+10 2.444e+10 3.229e+10 2.229e+10 2.826e+10 2.017e+10 2.448e+10 1.810e+10 2.097e+10 1.611e+10 1.773e+10 1.421e+10 1.480e+10 1.241e+10 1.217e+10 1.073e+10 9.838e+09 9.182e+09 7.809e+09 7.764e+09 6.069e+09 6.483e+09 4.603e+09 5.340e+09 3.393e+09 4.335e+09 2.417e+09 3.463e+09 1.649e+09 2.720e+09 1.065e+09 2.098e+09 6.342e+08 1.588e+09 3.306e+08 1.178e+09 1.275e+08 8.582e+08 2.274e+04 6.142e+08 -7.363e+07 4.325e+08 -1.104e+08 3.004e+08 -1.235e+08 2.042e+08 -1.203e+08 1.333e+08 -1.049e+08 8.091e+07 -8.036e+07 4.281e+07 -5.052e+07 1.717e+07 -2.181e+07 3.148e+06 -3.559e+06 -7.778e+05 7.964e+06 -4.525e+06 5.182e+07 -1.236e+07 1.517e+08 -1.765e+07 3.278e+08 -1.133e+07 6.008e+08 1.778e+07 9.917e+08 8.300e+07 1.522e+09 1.996e+08 2.211e+09 3.843e+08 3.076e+09 6.548e+08 4.136e+09 1.030e+09 5.400e+09 1.527e+09 6.880e+09 2.165e+09 8.582e+09 2.959e+09 1.051e+10 3.925e+09 1.265e+10 5.074e+09 1.502e+10 6.417e+09 1.758e+10 7.959e+09 2.033e+10 9.703e+09 2.325e+10 1.165e+10 2.632e+10 1.379e+10 2.950e+10 1.612e+10 3.277e+10 1.862e+10 3.610e+10 2.128e+10 3.944e+10 2.408e+10 4.277e+10 2.699e+10 4.604e+10 3.000e+10 4.921e+10 3.307e+10 5.225e+10 3.617e+10 5.511e+10 3.929e+10 5.777e+10 4.238e+10 6.018e+10 4.541e+10 6.232e+10 4.837e+10 6.415e+10 5.122e+10 6.565e+10 5.393e+10 6.680e+10 5.649e+10 6.758e+10 5.886e+10 6.799e+10 6.102e+10 6.801e+10 6.296e+10 6.764e+10 6.466e+10 6.691e+10 6.610e+10 6.579e+10 6.728e+10 6.432e+10 6.818e+10 6.251e+10 6.880e+10 6.038e+10 6.913e+10 5.795e+10 6.917e+10 5.526e+10 6.892e+10 5.234e+10 6.838e+10 4.923e+10 6.756e+10 4.596e+10 6.647e+10 4.257e+10 6.511e+10 3.911e+10 6.351e+10 3.560e+10 6.167e+10 3.209e+10 5.960e+10 2.862e+10 5.734e+10 2.522e+10 5.490e+10 2.191e+10 5.230e+10 1.873e+10 4.958e+10 1.571e+10 4.674e+10 1.287e+10 4.383e+10 0.005 -52.557 -51.461 -50.365 -49.270 -48.176 -47.189 -46.300 -45.500 -44.781 -44.139 -43.568 -43.065 -42.626 -42.248 -41.930 -41.670 -41.467 -41.319 -41.227 -41.189 -41.207 -41.281 -41.412 -41.600 -41.848 -42.158 -42.533 -42.975 -43.489 -44.080 -44.754 -45.518 -46.382 -47.355 -48.454 -49.696 -51.104 -52.709 -54.554 -56.695 -59.204 -62.153 -65.484 -68.505 -69.808 -69.373 -68.555 -68.140 -68.064 -67.723 -66.367 -63.998 -61.265 -58.656 -56.328 -54.288 -52.503 -50.937 -49.559 -48.342 -47.267 -46.319 -45.484 -44.753 -44.118 -43.572 -43.110 -42.729 -42.425 -42.197 -42.044 -41.965 -41.958 -42.025 -42.168 -42.387 -42.685 -43.065 -43.532 -44.089 -44.742 -45.497 -46.358 -47.331 -48.417 -49.611 -50.893 -52.220 -53.514 -54.661 -55.543 -56.100 -56.359 -56.402 -56.281 -55.967 -55.357 -54.351 -52.951 -51.276 -49.484 -47.697 -45.988 -44.388 -42.907 -41.547 -40.300 -39.161 -38.122 -37.176 -36.319 -35.543 -34.846 -34.225 -33.675 -33.194 -32.782 -32.438 -32.160 -31.949 -31.805 -31.730 -31.725 -31.793 -31.939 -32.165 -32.478 -32.885 -33.395 -34.020 -34.773 -35.673 -36.745 -38.017 -39.526 -41.313 -43.388 -45.627 -47.518 -48.181 -47.514 -46.427 -45.592 -45.270 -45.615 -46.875 -49.517 -52.769 -50.861 -44.431 -39.627 -35.960 -32.974 -30.434 -28.213 -26.234 -24.445 -22.812 -21.308 -19.916 -18.620 -17.409 -16.273 -15.205 -14.198 -13.249 -12.350 -11.501 -10.695 -9.932 -9.208 -8.522 -7.870 -7.253 -6.667 -6.112 -5.586 -5.089 -4.619 -4.175 -3.757 -3.364 -2.994 -2.649 -2.326 -2.026 -1.748 -1.492 -1.256 -1.042 -0.849 -0.675 -0.522 -0.389 -0.275 -0.182 -0.107 -0.052 -0.016 0.000 -0.003 -0.024 -0.065 -0.125 -0.204 -0.303 -0.421 -0.560 -0.718 -0.896 -1.095 -1.314 -1.555 -1.816 -2.099 -2.405 -2.732 -3.083 -3.458 -3.856 -4.280 -4.729 -5.204 -5.707 -6.238 -6.799 -7.391 -8.014 -8.671 -9.364 -10.094 -10.864 -11.675 -12.532 -13.437 -14.394 -15.408 -16.484 -17.628 -18.848 -20.154 -21.557 -23.073 -24.720 -26.524 -28.521 -30.761 -33.317 -36.299 -39.857 -44.034 -47.580 -47.748 -45.987 -44.451 -43.602 -43.340 -43.548 -44.130 -44.951 -45.733 -45.993 -45.340 -43.941 -42.269 -40.648 -39.202 -37.954 -36.891 -35.996 -35.248 -34.632 -34.133 -33.742 -33.449 -33.247 -33.130 -33.093 -33.134 -33.250 -33.439 -33.699 -34.031 -34.434 -34.908 -35.456 -36.079 -36.778 -37.555 -38.414 -39.357 -40.387 -41.504 -42.710 -44.002 -45.372 -46.808 -48.285 -49.768 -51.208 -52.537 -53.669 -54.482 -54.829 -54.591 -53.774 -52.525 -51.047 -49.506 -48.003 -46.585 -45.276 -44.077 -42.988 -42.004 -41.117 -40.322 -39.612 -38.983 -38.428 -37.945 -37.529 -37.177 -36.886 -36.655 -36.481 -36.362 -36.299 -36.289 -36.332 -36.428 -36.576 -36.779 -37.035 -37.345 -37.711 -38.134 -38.617 -39.161 -39.770 -40.446 -41.196 -42.022 -42.932 -43.934 -45.036 -46.249 -47.588 -49.071 -50.718 -52.561 -54.636 -56.997 -59.717 -62.901 -66.695 -71.263 -76.313 -79.443 -78.240 -74.567 -70.665 -67.078 -63.947 -61.261 -58.960 -56.978 -55.263 -53.770 -52.467 -51.327 -50.330 -49.459 -48.701 -48.045 -47.484 -47.009 -46.617 -46.300 -46.057 -45.884 -45.778 -45.739 -45.764 -45.854 -46.007 -46.225 -46.508 -46.857 -47.275 -47.763 -48.325 -48.966 -49.689 -50.502 -51.412 -52.429 -53.565 -54.703 -55.841 -56.979 0 1 1.0 7272785388.14 WV2 HH 31.71 32.78 0.05 -3.893e+10 -3.153e+10 -3.835e+10 -3.282e+10 -3.766e+10 -3.395e+10 -3.688e+10 -3.490e+10 -3.601e+10 -3.567e+10 -3.506e+10 -3.625e+10 -3.404e+10 -3.665e+10 -3.294e+10 -3.687e+10 -3.179e+10 -3.690e+10 -3.058e+10 -3.676e+10 -2.933e+10 -3.645e+10 -2.805e+10 -3.598e+10 -2.674e+10 -3.536e+10 -2.541e+10 -3.460e+10 -2.408e+10 -3.372e+10 -2.274e+10 -3.271e+10 -2.140e+10 -3.161e+10 -2.008e+10 -3.042e+10 -1.877e+10 -2.916e+10 -1.748e+10 -2.784e+10 -1.622e+10 -2.647e+10 -1.499e+10 -2.506e+10 -1.380e+10 -2.363e+10 -1.264e+10 -2.218e+10 -1.153e+10 -2.074e+10 -1.046e+10 -1.930e+10 -9.440e+09 -1.788e+10 -8.467e+09 -1.648e+10 -7.546e+09 -1.512e+10 -6.677e+09 -1.379e+10 -5.863e+09 -1.251e+10 -5.104e+09 -1.128e+10 -4.402e+09 -1.010e+10 -3.756e+09 -8.989e+09 -3.166e+09 -7.936e+09 -2.632e+09 -6.949e+09 -2.153e+09 -6.031e+09 -1.728e+09 -5.182e+09 -1.355e+09 -4.405e+09 -1.032e+09 -3.699e+09 -7.574e+08 -3.064e+09 -5.273e+08 -2.499e+09 -3.392e+08 -2.003e+09 -1.895e+08 -1.573e+09 -7.451e+07 -1.206e+09 9.621e+06 -9.006e+08 6.732e+07 -6.512e+08 1.033e+08 -4.538e+08 1.231e+08 -3.037e+08 1.331e+08 -1.945e+08 1.410e+08 -1.178e+08 1.544e+08 -6.274e+07 1.781e+08 -1.639e+07 2.127e+08 3.206e+07 2.555e+08 8.864e+07 3.032e+08 1.552e+08 3.529e+08 2.314e+08 4.021e+08 3.155e+08 4.490e+08 4.058e+08 4.924e+08 5.009e+08 5.312e+08 5.995e+08 5.649e+08 7.009e+08 5.928e+08 8.047e+08 6.147e+08 9.110e+08 6.304e+08 1.020e+09 6.399e+08 1.134e+09 6.430e+08 1.253e+09 6.397e+08 1.379e+09 6.296e+08 1.515e+09 6.127e+08 1.664e+09 5.885e+08 1.828e+09 5.563e+08 2.010e+09 5.153e+08 2.215e+09 4.644e+08 2.447e+09 4.021e+08 2.709e+09 3.269e+08 3.007e+09 2.369e+08 3.345e+09 1.301e+08 3.729e+09 4.603e+06 4.164e+09 -1.418e+08 4.654e+09 -3.114e+08 5.205e+09 -5.056e+08 5.822e+09 -7.264e+08 6.509e+09 -9.754e+08 7.273e+09 -1.253e+09 8.116e+09 -1.561e+09 9.043e+09 -1.898e+09 1.006e+10 -2.265e+09 1.116e+10 -2.660e+09 1.236e+10 -3.083e+09 1.366e+10 -3.532e+09 1.506e+10 -4.004e+09 1.655e+10 -4.499e+09 1.815e+10 -5.011e+09 1.985e+10 -5.539e+09 2.166e+10 -6.080e+09 2.356e+10 -6.629e+09 2.557e+10 -7.185e+09 2.768e+10 -7.744e+09 2.989e+10 -8.303e+09 3.219e+10 -8.861e+09 3.458e+10 -9.418e+09 3.707e+10 -9.969e+09 3.965e+10 -1.051e+10 4.229e+10 -1.104e+10 4.501e+10 -1.155e+10 4.778e+10 -1.205e+10 5.060e+10 -1.253e+10 5.344e+10 -1.300e+10 5.630e+10 -1.344e+10 5.915e+10 -1.385e+10 6.199e+10 -1.425e+10 6.477e+10 -1.461e+10 6.749e+10 -1.495e+10 7.011e+10 -1.526e+10 7.261e+10 -1.553e+10 7.496e+10 -1.576e+10 7.714e+10 -1.596e+10 7.912e+10 -1.612e+10 8.087e+10 -1.624e+10 8.236e+10 -1.631e+10 8.358e+10 -1.633e+10 8.450e+10 -1.630e+10 8.511e+10 -1.623e+10 8.539e+10 -1.611e+10 8.534e+10 -1.593e+10 8.493e+10 -1.571e+10 8.419e+10 -1.544e+10 8.310e+10 -1.513e+10 8.167e+10 -1.477e+10 7.993e+10 -1.438e+10 7.789e+10 -1.396e+10 7.556e+10 -1.351e+10 7.298e+10 -1.304e+10 7.017e+10 -1.256e+10 6.716e+10 -1.206e+10 6.399e+10 -1.156e+10 6.069e+10 -1.106e+10 5.729e+10 -1.057e+10 5.382e+10 -1.009e+10 5.033e+10 -9.621e+09 4.685e+10 -9.170e+09 4.340e+10 -8.739e+09 4.003e+10 -8.328e+09 3.673e+10 -7.937e+09 3.354e+10 -7.567e+09 3.047e+10 -7.216e+09 2.755e+10 -6.882e+09 2.478e+10 -6.564e+09 2.217e+10 -6.261e+09 1.974e+10 -5.969e+09 1.749e+10 -5.687e+09 1.541e+10 -5.413e+09 1.351e+10 -5.146e+09 1.179e+10 -4.884e+09 1.024e+10 -4.627e+09 8.846e+09 -4.374e+09 7.608e+09 -4.125e+09 6.514e+09 -3.880e+09 5.553e+09 -3.637e+09 4.713e+09 -3.397e+09 3.984e+09 -3.159e+09 3.354e+09 -2.922e+09 2.812e+09 -2.685e+09 2.349e+09 -2.447e+09 1.954e+09 -2.208e+09 1.620e+09 -1.967e+09 1.339e+09 -1.725e+09 1.104e+09 -1.483e+09 9.110e+08 -1.244e+09 7.533e+08 -1.012e+09 6.263e+08 -7.917e+08 5.253e+08 -5.900e+08 4.464e+08 -4.127e+08 3.869e+08 -2.646e+08 3.471e+08 -1.446e+08 3.323e+08 -4.010e+07 3.526e+08 7.440e+07 4.196e+08 2.298e+08 5.402e+08 4.522e+08 7.173e+08 7.593e+08 9.530e+08 1.162e+09 1.249e+09 1.668e+09 1.609e+09 2.281e+09 2.033e+09 3.002e+09 2.521e+09 3.828e+09 3.070e+09 4.756e+09 3.677e+09 5.777e+09 4.332e+09 6.883e+09 5.027e+09 8.059e+09 5.749e+09 9.290e+09 6.484e+09 1.056e+10 7.215e+09 1.185e+10 7.924e+09 1.313e+10 8.593e+09 1.439e+10 9.203e+09 1.560e+10 9.736e+09 1.674e+10 1.017e+10 1.778e+10 1.050e+10 1.870e+10 1.070e+10 1.948e+10 1.076e+10 2.009e+10 1.068e+10 2.052e+10 1.045e+10 2.075e+10 1.007e+10 2.076e+10 9.548e+09 2.056e+10 8.886e+09 2.012e+10 8.100e+09 1.947e+10 7.206e+09 1.859e+10 6.224e+09 1.751e+10 5.181e+09 1.625e+10 4.101e+09 1.483e+10 3.015e+09 1.328e+10 1.954e+09 1.165e+10 9.476e+08 9.996e+09 2.428e+07 8.363e+09 -7.940e+08 6.811e+09 -1.499e+09 5.399e+09 -2.100e+09 4.171e+09 -2.641e+09 3.133e+09 -3.211e+09 2.234e+09 -3.936e+09 1.347e+09 -4.955e+09 2.988e+08 -6.381e+09 -1.084e+09 -8.282e+09 -2.944e+09 -1.069e+10 -5.387e+09 -1.361e+10 -8.483e+09 -1.705e+10 -1.227e+10 -2.100e+10 -1.677e+10 -2.545e+10 -2.197e+10 -3.038e+10 -2.783e+10 -3.577e+10 -3.430e+10 -4.158e+10 -4.130e+10 -4.778e+10 -4.871e+10 -5.433e+10 -5.642e+10 -6.118e+10 -6.426e+10 -6.828e+10 -7.206e+10 -7.557e+10 -7.966e+10 -8.299e+10 -8.684e+10 -9.048e+10 -9.340e+10 -9.798e+10 -9.916e+10 -1.054e+11 -1.039e+11 -1.128e+11 -1.074e+11 -1.200e+11 -1.096e+11 -1.270e+11 -1.103e+11 -1.339e+11 -1.094e+11 -1.405e+11 -1.069e+11 -1.470e+11 -1.026e+11 -1.534e+11 -9.656e+10 -1.598e+11 -8.884e+10 -1.664e+11 -7.944e+10 -1.735e+11 -6.835e+10 -1.814e+11 -5.546e+10 -1.907e+11 -4.057e+10 -2.018e+11 -2.328e+10 -2.155e+11 -2.893e+09 -2.327e+11 2.155e+10 -2.543e+11 5.137e+10 -2.814e+11 8.827e+10 -3.152e+11 1.342e+11 -3.566e+11 1.915e+11 -4.071e+11 2.628e+11 -4.680e+11 3.509e+11 -5.407e+11 4.587e+11 -6.268e+11 5.896e+11 -7.282e+11 7.468e+11 -8.468e+11 9.339e+11 -9.849e+11 1.155e+12 -1.145e+12 1.413e+12 -1.330e+12 1.713e+12 -1.543e+12 2.059e+12 -1.787e+12 2.455e+12 -2.066e+12 2.905e+12 -2.384e+12 3.413e+12 -2.746e+12 3.983e+12 -3.155e+12 4.620e+12 -3.618e+12 5.328e+12 -4.139e+12 6.110e+12 -4.724e+12 6.969e+12 -5.379e+12 7.910e+12 -6.111e+12 8.935e+12 -6.925e+12 1.004e+13 -7.828e+12 1.124e+13 -8.828e+12 1.253e+13 -9.931e+12 1.391e+13 -1.114e+13 1.538e+13 -1.248e+13 1.695e+13 -1.394e+13 1.860e+13 -1.553e+13 2.034e+13 -1.726e+13 2.216e+13 -1.914e+13 2.407e+13 -2.117e+13 2.606e+13 -2.337e+13 2.812e+13 -2.573e+13 3.024e+13 -2.827e+13 3.243e+13 -3.099e+13 3.467e+13 -3.390e+13 3.696e+13 -3.700e+13 3.928e+13 -4.030e+13 4.163e+13 -4.380e+13 4.400e+13 -4.751e+13 4.637e+13 -5.143e+13 5.003e+13 -5.506e+13 5.196e+13 -5.980e+13 5.436e+13 -6.439e+13 5.672e+13 -6.919e+13 5.902e+13 -7.420e+13 6.125e+13 -7.944e+13 6.340e+13 -8.490e+13 6.545e+13 -9.056e+13 6.738e+13 -9.644e+13 6.919e+13 -1.025e+14 7.084e+13 -1.088e+14 7.234e+13 -1.153e+14 7.366e+13 -1.219e+14 7.478e+13 -1.287e+14 7.570e+13 -1.357e+14 7.639e+13 -1.428e+14 7.685e+13 -1.501e+14 7.705e+13 -1.575e+14 7.699e+13 -1.650e+14 7.664e+13 -1.726e+14 7.601e+13 -1.803e+14 7.508e+13 -1.880e+14 7.383e+13 -1.958e+14 7.227e+13 -2.036e+14 7.037e+13 -2.114e+14 6.814e+13 -2.192e+14 6.557e+13 -2.270e+14 6.265e+13 -2.347e+14 5.938e+13 -2.423e+14 5.576e+13 -2.498e+14 5.180e+13 -2.572e+14 4.748e+13 -2.644e+14 4.282e+13 -2.715e+14 3.781e+13 -2.784e+14 3.248e+13 -2.851e+14 2.681e+13 -2.915e+14 2.083e+13 -2.977e+14 1.455e+13 -3.037e+14 7.962e+12 -3.093e+14 1.105e+12 -3.146e+14 -6.021e+12 -3.197e+14 -1.341e+13 -3.244e+14 -2.103e+13 -3.289e+14 -2.886e+13 -3.329e+14 -3.690e+13 -3.366e+14 -4.511e+13 -3.399e+14 -5.347e+13 -3.428e+14 -6.197e+13 -3.453e+14 -7.056e+13 -3.474e+14 -7.925e+13 -3.491e+14 -8.799e+13 -3.503e+14 -9.677e+13 -3.511e+14 -1.055e+14 -3.515e+14 -1.143e+14 -3.514e+14 -1.230e+14 -3.510e+14 -1.317e+14 -3.500e+14 -1.403e+14 -3.487e+14 -1.487e+14 -3.470e+14 -1.570e+14 -3.448e+14 -1.652e+14 -3.422e+14 -1.731e+14 -3.393e+14 -1.808e+14 -3.359e+14 -1.883e+14 -3.322e+14 -1.956e+14 -3.281e+14 -2.025e+14 -3.237e+14 -2.092e+14 -3.189e+14 -2.155e+14 -3.138e+14 -2.215e+14 -3.084e+14 -2.271e+14 -3.026e+14 -2.324e+14 -2.966e+14 -2.372e+14 -2.904e+14 -2.417e+14 -2.839e+14 -2.457e+14 -2.771e+14 -2.494e+14 -2.701e+14 -2.525e+14 -2.630e+14 -2.553e+14 -2.557e+14 -2.575e+14 -2.482e+14 -2.593e+14 -2.405e+14 -2.606e+14 -2.328e+14 -2.615e+14 -2.250e+14 -2.619e+14 -2.171e+14 -2.618e+14 -2.092e+14 -2.613e+14 -2.013e+14 -2.603e+14 -1.934e+14 -2.588e+14 -1.854e+14 -2.569e+14 -1.775e+14 -2.546e+14 -1.697e+14 -2.518e+14 -1.619e+14 -2.486e+14 -1.542e+14 -2.450e+14 -1.465e+14 -2.410e+14 -1.390e+14 -2.366e+14 -1.317e+14 -2.319e+14 -1.244e+14 -2.268e+14 -1.174e+14 -2.214e+14 -1.105e+14 -2.158e+14 -1.038e+14 -2.099e+14 -9.732e+13 -2.037e+14 -9.104e+13 -1.974e+14 -8.499e+13 -1.908e+14 -7.916e+13 -1.841e+14 -7.358e+13 -1.773e+14 -6.823e+13 -1.705e+14 -6.314e+13 -1.635e+14 -5.828e+13 -1.565e+14 -5.368e+13 -1.495e+14 -4.933e+13 -1.425e+14 -4.522e+13 -1.355e+14 -4.136e+13 -1.286e+14 -3.774e+13 -1.218e+14 -3.436e+13 -1.151e+14 -3.120e+13 -1.086e+14 -2.827e+13 -1.021e+14 -2.556e+13 -9.588e+13 -2.305e+13 -8.979e+13 -2.074e+13 -8.389e+13 -1.862e+13 -7.819e+13 -1.668e+13 -7.270e+13 -1.491e+13 -6.743e+13 -1.330e+13 -6.238e+13 -1.184e+13 -5.756e+13 -1.052e+13 -5.296e+13 -9.326e+12 -4.861e+13 -8.250e+12 -4.448e+13 -7.288e+12 -4.059e+13 -6.431e+12 -3.693e+13 -5.671e+12 -3.349e+13 -4.998e+12 -3.028e+13 -4.404e+12 -2.729e+13 -3.881e+12 -2.451e+13 -3.423e+12 -2.194e+13 -3.021e+12 -1.956e+13 -2.671e+12 -1.738e+13 -2.366e+12 -1.538e+13 -2.099e+12 -1.355e+13 -1.868e+12 -1.189e+13 -1.666e+12 -1.039e+13 -1.490e+12 -9.033e+12 -1.336e+12 -7.816e+12 -1.201e+12 -6.729e+12 -1.083e+12 -5.762e+12 -9.777e+11 -4.907e+12 -8.843e+11 -4.155e+12 -8.006e+11 -3.496e+12 -7.252e+11 -2.924e+12 -6.569e+11 -2.429e+12 -5.945e+11 -2.004e+12 -5.374e+11 -1.642e+12 -4.850e+11 -1.335e+12 -4.366e+11 -1.077e+12 -3.921e+11 -8.632e+11 -3.511e+11 -6.862e+11 -3.134e+11 -5.414e+11 -2.790e+11 -4.240e+11 -2.478e+11 -3.297e+11 -2.196e+11 -2.547e+11 -1.943e+11 -1.955e+11 -1.718e+11 -1.491e+11 -1.519e+11 -1.131e+11 -1.343e+11 -8.534e+10 -1.188e+11 -6.398e+10 -1.051e+11 -4.767e+10 -9.291e+10 -3.532e+10 -8.188e+10 -2.606e+10 -7.174e+10 -1.924e+10 -6.231e+10 -1.438e+10 -5.346e+10 -1.104e+10 -4.513e+10 -8.902e+09 -3.731e+10 -7.654e+09 -3.007e+10 -7.036e+09 -2.350e+10 -6.837e+09 -1.772e+10 -6.920e+09 -1.287e+10 -7.283e+09 -8.986e+09 -8.120e+09 -6.007e+09 -9.796e+09 -3.589e+09 -1.271e+10 -1.153e+09 -1.712e+10 1.918e+09 -2.317e+10 6.090e+09 -3.091e+10 1.165e+10 -4.035e+10 1.873e+10 -5.146e+10 2.738e+10 -6.423e+10 3.759e+10 -7.856e+10 4.930e+10 -9.434e+10 6.241e+10 -1.114e+11 7.679e+10 -1.297e+11 9.229e+10 -1.488e+11 1.087e+11 -1.687e+11 1.259e+11 -1.891e+11 1.435e+11 -2.096e+11 1.615e+11 -2.302e+11 1.795e+11 -2.504e+11 1.973e+11 -2.701e+11 2.147e+11 -2.889e+11 2.314e+11 -3.067e+11 2.473e+11 -3.231e+11 2.620e+11 -3.381e+11 2.755e+11 -3.513e+11 2.875e+11 -3.627e+11 2.979e+11 -3.720e+11 3.065e+11 -3.793e+11 3.133e+11 -3.845e+11 3.182e+11 -3.875e+11 3.211e+11 -3.882e+11 3.221e+11 -3.868e+11 3.211e+11 -3.832e+11 3.183e+11 -3.775e+11 3.136e+11 -3.699e+11 3.071e+11 -3.605e+11 2.991e+11 -3.494e+11 2.896e+11 -3.368e+11 2.788e+11 -3.229e+11 2.669e+11 -3.079e+11 2.540e+11 -2.919e+11 2.403e+11 -2.753e+11 2.261e+11 -2.581e+11 2.115e+11 -2.407e+11 1.967e+11 -2.232e+11 1.818e+11 -2.057e+11 1.671e+11 -1.884e+11 1.526e+11 -1.716e+11 1.386e+11 -1.552e+11 1.251e+11 -1.396e+11 1.122e+11 -1.247e+11 1.000e+11 -1.105e+11 8.860e+10 -9.734e+10 7.799e+10 -8.507e+10 6.822e+10 -7.376e+10 5.928e+10 -6.344e+10 5.120e+10 -5.410e+10 4.394e+10 -4.571e+10 3.747e+10 -3.825e+10 3.178e+10 -3.169e+10 2.680e+10 -2.596e+10 2.249e+10 -2.105e+10 1.881e+10 -1.686e+10 1.569e+10 -1.334e+10 1.307e+10 -1.042e+10 1.090e+10 -8.028e+09 9.133e+09 -6.104e+09 7.710e+09 -4.582e+09 6.596e+09 -3.394e+09 5.752e+09 -2.476e+09 5.144e+09 -1.771e+09 4.749e+09 -1.224e+09 4.544e+09 -7.924e+08 4.513e+09 -4.416e+08 4.642e+09 -1.497e+08 4.923e+09 9.491e+07 5.352e+09 2.947e+08 5.931e+09 4.462e+08 6.665e+09 5.411e+08 7.564e+09 5.675e+08 8.642e+09 5.111e+08 9.913e+09 3.552e+08 1.140e+10 8.117e+07 1.311e+10 -3.313e+08 1.506e+10 -9.045e+08 1.727e+10 -1.661e+09 1.975e+10 -2.622e+09 2.250e+10 -3.814e+09 2.554e+10 -5.255e+09 2.885e+10 -6.966e+09 3.242e+10 -8.965e+09 3.624e+10 -1.127e+10 4.029e+10 -1.388e+10 4.454e+10 -1.681e+10 4.896e+10 -2.007e+10 5.349e+10 -2.364e+10 5.810e+10 -2.752e+10 6.273e+10 -3.171e+10 6.734e+10 -3.616e+10 7.185e+10 -4.088e+10 7.623e+10 -4.582e+10 8.040e+10 -5.097e+10 8.431e+10 -5.627e+10 8.791e+10 -6.171e+10 9.114e+10 -6.722e+10 9.397e+10 -7.278e+10 9.634e+10 -7.835e+10 9.824e+10 -8.386e+10 9.961e+10 -8.929e+10 1.005e+11 -9.459e+10 1.008e+11 -9.972e+10 1.005e+11 -1.047e+11 9.975e+10 -1.093e+11 9.840e+10 -1.137e+11 9.651e+10 -1.178e+11 9.408e+10 -1.216e+11 9.115e+10 -1.250e+11 8.776e+10 -1.281e+11 8.392e+10 -1.307e+11 7.968e+10 -1.330e+11 7.508e+10 -1.348e+11 7.015e+10 -1.363e+11 6.493e+10 -1.373e+11 5.947e+10 -1.380e+11 5.380e+10 -1.382e+11 4.797e+10 -1.381e+11 4.201e+10 -1.377e+11 3.597e+10 -1.369e+11 2.988e+10 0.005 -55.839 -55.960 -56.080 -56.201 -56.322 -56.442 -56.540 -56.361 -56.016 -55.593 -55.141 -54.675 -54.190 -53.672 -53.103 -52.472 -51.778 -51.028 -50.236 -49.420 -48.599 -47.788 -47.000 -46.245 -45.530 -44.858 -44.233 -43.656 -43.127 -42.647 -42.215 -41.831 -41.494 -41.204 -40.961 -40.764 -40.612 -40.507 -40.448 -40.436 -40.470 -40.553 -40.686 -40.869 -41.106 -41.398 -41.747 -42.157 -42.631 -43.172 -43.786 -44.480 -45.258 -46.127 -47.091 -48.147 -49.283 -50.459 -51.593 -52.536 -53.102 -53.159 -52.729 -51.970 -51.054 -50.100 -49.165 -48.270 -47.413 -46.584 -45.772 -44.965 -44.155 -43.338 -42.512 -41.679 -40.844 -40.012 -39.189 -38.380 -37.590 -36.824 -36.084 -35.375 -34.696 -34.051 -33.439 -32.861 -32.316 -31.806 -31.331 -30.889 -30.481 -30.106 -29.765 -29.458 -29.183 -28.942 -28.733 -28.558 -28.415 -28.304 -28.226 -28.182 -28.173 -28.199 -28.261 -28.360 -28.496 -28.671 -28.884 -29.139 -29.435 -29.775 -30.158 -30.586 -31.060 -31.580 -32.144 -32.750 -33.393 -34.063 -34.745 -35.413 -36.032 -36.556 -36.931 -37.106 -37.048 -36.751 -36.236 -35.543 -34.713 -33.783 -32.783 -31.736 -30.658 -29.562 -28.460 -27.360 -26.269 -25.194 -24.138 -23.106 -22.100 -21.122 -20.172 -19.252 -18.361 -17.500 -16.668 -15.863 -15.085 -14.334 -13.609 -12.911 -12.238 -11.588 -10.963 -10.360 -9.779 -9.220 -8.683 -8.165 -7.667 -7.189 -6.729 -6.287 -5.863 -5.456 -5.067 -4.693 -4.336 -3.995 -3.669 -3.359 -3.064 -2.783 -2.517 -2.265 -2.028 -1.804 -1.594 -1.397 -1.214 -1.044 -0.887 -0.744 -0.613 -0.495 -0.390 -0.297 -0.217 -0.150 -0.095 -0.053 -0.023 -0.005 0.000 -0.007 -0.027 -0.057 -0.099 -0.154 -0.222 -0.302 -0.395 -0.500 -0.619 -0.751 -0.895 -1.053 -1.224 -1.409 -1.608 -1.820 -2.046 -2.287 -2.542 -2.812 -3.097 -3.397 -3.712 -4.044 -4.391 -4.756 -5.137 -5.536 -5.952 -6.387 -6.841 -7.314 -7.807 -8.321 -8.856 -9.414 -9.994 -10.598 -11.226 -11.880 -12.560 -13.269 -14.006 -14.772 -15.570 -16.400 -17.263 -18.159 -19.091 -20.057 -21.058 -22.090 -23.153 -24.242 -25.351 -26.467 -27.574 -28.650 -29.668 -30.594 -31.397 -32.049 -32.536 -32.856 -33.024 -33.057 -32.980 -32.811 -32.569 -32.267 -31.918 -31.532 -31.119 -30.688 -30.249 -29.809 -29.376 -28.956 -28.554 -28.174 -27.819 -27.493 -27.195 -26.928 -26.693 -26.489 -26.318 -26.179 -26.072 -25.998 -25.956 -25.946 -25.968 -26.023 -26.110 -26.229 -26.380 -26.564 -26.781 -27.030 -27.313 -27.628 -27.976 -28.360 -28.778 -29.233 -29.725 -30.254 -30.821 -31.427 -32.071 -32.756 -33.479 -34.241 -35.040 -35.873 -36.737 -37.625 -38.528 -39.431 -40.318 -41.163 -41.936 -42.602 -43.124 -43.467 -43.607 -43.536 -43.263 -42.812 -42.218 -41.515 -40.740 -39.920 -39.079 -38.235 -37.403 -36.590 -35.804 -35.050 -34.329 -33.643 -32.993 -32.380 -31.802 -31.260 -30.752 -30.277 -29.836 -29.426 -29.046 -28.697 -28.377 -28.083 -27.817 -27.577 -27.363 -27.174 -27.011 -26.872 -26.757 -26.665 -26.596 -26.549 -26.525 -26.523 -26.542 -26.583 -26.645 -26.727 -26.831 -26.956 -27.101 -27.267 -27.453 -27.660 -27.888 -28.136 -28.405 -28.695 -29.006 -29.338 -29.692 -30.067 -30.463 -30.882 -31.323 -31.786 -32.272 -32.780 -33.312 -33.868 -34.447 -35.049 -35.675 -36.325 -36.976 -37.627 -38.278 -38.929 -39.580 0 1 1.0 5760317058.76 WV2 VV 31.71 32.78 0.05 -1.862e+08 4.806e+10 -1.643e+09 4.904e+10 -3.089e+09 4.988e+10 -4.520e+09 5.056e+10 -5.930e+09 5.109e+10 -7.311e+09 5.145e+10 -8.658e+09 5.165e+10 -9.965e+09 5.168e+10 -1.122e+10 5.155e+10 -1.243e+10 5.124e+10 -1.357e+10 5.078e+10 -1.464e+10 5.015e+10 -1.564e+10 4.937e+10 -1.656e+10 4.844e+10 -1.738e+10 4.737e+10 -1.811e+10 4.616e+10 -1.873e+10 4.483e+10 -1.925e+10 4.338e+10 -1.965e+10 4.184e+10 -1.994e+10 4.021e+10 -2.011e+10 3.850e+10 -2.017e+10 3.673e+10 -2.011e+10 3.492e+10 -1.994e+10 3.307e+10 -1.966e+10 3.120e+10 -1.927e+10 2.932e+10 -1.878e+10 2.744e+10 -1.820e+10 2.558e+10 -1.754e+10 2.375e+10 -1.681e+10 2.195e+10 -1.602e+10 2.020e+10 -1.518e+10 1.851e+10 -1.430e+10 1.687e+10 -1.340e+10 1.530e+10 -1.248e+10 1.381e+10 -1.155e+10 1.239e+10 -1.064e+10 1.104e+10 -9.737e+09 9.779e+09 -8.858e+09 8.598e+09 -8.011e+09 7.499e+09 -7.200e+09 6.482e+09 -6.430e+09 5.547e+09 -5.705e+09 4.694e+09 -5.027e+09 3.919e+09 -4.398e+09 3.223e+09 -3.819e+09 2.603e+09 -3.290e+09 2.056e+09 -2.811e+09 1.580e+09 -2.381e+09 1.172e+09 -1.998e+09 8.271e+08 -1.662e+09 5.414e+08 -1.371e+09 3.096e+08 -1.122e+09 1.252e+08 -9.137e+08 -1.912e+07 -7.433e+08 -1.317e+08 -6.065e+08 -2.222e+08 -4.976e+08 -3.001e+08 -4.095e+08 -3.742e+08 -3.337e+08 -4.508e+08 -2.621e+08 -5.335e+08 -1.878e+08 -6.225e+08 -1.057e+08 -7.163e+08 -1.238e+07 -8.121e+08 9.400e+07 -9.067e+08 2.145e+08 -9.971e+08 3.497e+08 -1.081e+09 4.994e+08 -1.156e+09 6.638e+08 -1.220e+09 8.437e+08 -1.273e+09 1.039e+09 -1.314e+09 1.250e+09 -1.341e+09 1.478e+09 -1.356e+09 1.724e+09 -1.356e+09 1.990e+09 -1.342e+09 2.277e+09 -1.314e+09 2.587e+09 -1.270e+09 2.922e+09 -1.210e+09 3.284e+09 -1.133e+09 3.675e+09 -1.038e+09 4.098e+09 -9.252e+08 4.557e+09 -7.927e+08 5.052e+09 -6.400e+08 5.589e+09 -4.658e+08 6.171e+09 -2.689e+08 6.803e+09 -4.837e+07 7.488e+09 1.973e+08 8.233e+09 4.701e+08 9.041e+09 7.712e+08 9.919e+09 1.103e+09 1.087e+10 1.467e+09 1.191e+10 1.865e+09 1.303e+10 2.299e+09 1.424e+10 2.773e+09 1.555e+10 3.285e+09 1.696e+10 3.839e+09 1.846e+10 4.435e+09 2.007e+10 5.072e+09 2.177e+10 5.749e+09 2.357e+10 6.464e+09 2.545e+10 7.213e+09 2.742e+10 7.992e+09 2.946e+10 8.796e+09 3.155e+10 9.615e+09 3.369e+10 1.044e+10 3.584e+10 1.126e+10 3.801e+10 1.207e+10 4.015e+10 1.285e+10 4.225e+10 1.359e+10 4.430e+10 1.427e+10 4.625e+10 1.489e+10 4.810e+10 1.543e+10 4.983e+10 1.589e+10 5.140e+10 1.625e+10 5.281e+10 1.651e+10 5.405e+10 1.667e+10 5.510e+10 1.672e+10 5.594e+10 1.666e+10 5.659e+10 1.650e+10 5.702e+10 1.625e+10 5.725e+10 1.591e+10 5.727e+10 1.550e+10 5.709e+10 1.502e+10 5.672e+10 1.448e+10 5.616e+10 1.391e+10 5.543e+10 1.331e+10 5.452e+10 1.269e+10 5.346e+10 1.208e+10 5.226e+10 1.147e+10 5.092e+10 1.088e+10 4.945e+10 1.032e+10 4.787e+10 9.788e+09 4.619e+10 9.298e+09 4.442e+10 8.850e+09 4.258e+10 8.444e+09 4.066e+10 8.080e+09 3.869e+10 7.757e+09 3.667e+10 7.470e+09 3.463e+10 7.216e+09 3.256e+10 6.989e+09 3.049e+10 6.784e+09 2.843e+10 6.595e+09 2.639e+10 6.416e+09 2.439e+10 6.243e+09 2.243e+10 6.070e+09 2.053e+10 5.894e+09 1.870e+10 5.712e+09 1.695e+10 5.521e+09 1.530e+10 5.322e+09 1.374e+10 5.114e+09 1.228e+10 4.898e+09 1.093e+10 4.676e+09 9.700e+09 4.450e+09 8.578e+09 4.224e+09 7.566e+09 4.000e+09 6.665e+09 3.783e+09 5.868e+09 3.573e+09 5.172e+09 3.375e+09 4.570e+09 3.192e+09 4.056e+09 3.024e+09 3.621e+09 2.873e+09 3.261e+09 2.740e+09 2.967e+09 2.625e+09 2.733e+09 2.528e+09 2.555e+09 2.449e+09 2.425e+09 2.386e+09 2.341e+09 2.338e+09 2.300e+09 2.303e+09 2.297e+09 2.280e+09 2.333e+09 2.266e+09 2.405e+09 2.260e+09 2.513e+09 2.258e+09 2.656e+09 2.257e+09 2.835e+09 2.255e+09 3.050e+09 2.247e+09 3.302e+09 2.230e+09 3.591e+09 2.199e+09 3.918e+09 2.151e+09 4.285e+09 2.079e+09 4.693e+09 1.980e+09 5.144e+09 1.847e+09 5.640e+09 1.676e+09 6.183e+09 1.459e+09 6.776e+09 1.193e+09 7.422e+09 8.699e+08 8.121e+09 4.850e+08 8.876e+09 3.174e+07 9.687e+09 -4.949e+08 1.055e+10 -1.098e+09 1.146e+10 -1.782e+09 1.242e+10 -2.547e+09 1.341e+10 -3.390e+09 1.442e+10 -4.307e+09 1.544e+10 -5.288e+09 1.644e+10 -6.323e+09 1.742e+10 -7.395e+09 1.833e+10 -8.486e+09 1.917e+10 -9.573e+09 1.990e+10 -1.063e+10 2.050e+10 -1.164e+10 2.094e+10 -1.258e+10 2.119e+10 -1.340e+10 2.124e+10 -1.411e+10 2.106e+10 -1.466e+10 2.065e+10 -1.505e+10 1.999e+10 -1.526e+10 1.908e+10 -1.529e+10 1.795e+10 -1.512e+10 1.659e+10 -1.477e+10 1.504e+10 -1.424e+10 1.333e+10 -1.354e+10 1.151e+10 -1.270e+10 9.623e+09 -1.174e+10 7.729e+09 -1.070e+10 5.887e+09 -9.608e+09 4.154e+09 -8.517e+09 2.572e+09 -7.480e+09 1.159e+09 -6.562e+09 -1.128e+08 -5.829e+09 -1.342e+09 -5.336e+09 -2.694e+09 -5.099e+09 -4.373e+09 -5.081e+09 -6.574e+09 -5.199e+09 -9.440e+09 -5.356e+09 -1.306e+10 -5.468e+09 -1.750e+10 -5.470e+09 -2.277e+10 -5.319e+09 -2.887e+10 -4.989e+09 -3.578e+10 -4.468e+09 -4.344e+10 -3.755e+09 -5.180e+10 -2.865e+09 -6.077e+10 -1.821e+09 -7.025e+10 -6.589e+08 -8.013e+10 5.713e+08 -9.026e+10 1.811e+09 -1.005e+11 2.985e+09 -1.107e+11 4.010e+09 -1.208e+11 4.792e+09 -1.304e+11 5.227e+09 -1.396e+11 5.203e+09 -1.481e+11 4.607e+09 -1.557e+11 3.321e+09 -1.624e+11 1.233e+09 -1.681e+11 -1.770e+09 -1.726e+11 -5.788e+09 -1.759e+11 -1.091e+10 -1.780e+11 -1.724e+10 -1.789e+11 -2.486e+10 -1.788e+11 -3.386e+10 -1.779e+11 -4.439e+10 -1.763e+11 -5.664e+10 -1.744e+11 -7.092e+10 -1.724e+11 -8.772e+10 -1.706e+11 -1.077e+11 -1.694e+11 -1.319e+11 -1.686e+11 -1.617e+11 -1.685e+11 -1.986e+11 -1.685e+11 -2.448e+11 -1.681e+11 -3.027e+11 -1.667e+11 -3.748e+11 -1.633e+11 -4.642e+11 -1.567e+11 -5.743e+11 -1.459e+11 -7.085e+11 -1.297e+11 -8.709e+11 -1.066e+11 -1.066e+12 -7.540e+10 -1.297e+12 -3.491e+10 -1.570e+12 1.619e+10 -1.890e+12 7.897e+10 -2.263e+12 1.545e+11 -2.693e+12 2.438e+11 -3.189e+12 3.475e+11 -3.756e+12 4.661e+11 -4.402e+12 6.003e+11 -5.133e+12 7.499e+11 -5.958e+12 9.146e+11 -6.884e+12 1.094e+12 -7.921e+12 1.288e+12 -9.074e+12 1.493e+12 -1.035e+13 1.710e+12 -1.177e+13 1.935e+12 -1.333e+13 2.167e+12 -1.504e+13 2.401e+12 -1.692e+13 2.635e+12 -1.897e+13 2.864e+12 -2.119e+13 3.083e+12 -2.360e+13 3.288e+12 -2.621e+13 3.473e+12 -2.902e+13 3.632e+12 -3.204e+13 3.759e+12 -3.527e+13 3.845e+12 -3.872e+13 3.884e+12 -4.241e+13 3.868e+12 -4.631e+13 3.789e+12 -5.046e+13 3.638e+12 -5.484e+13 3.405e+12 -5.945e+13 3.083e+12 -6.430e+13 2.660e+12 -6.939e+13 2.128e+12 -7.470e+13 1.477e+12 -8.025e+13 6.946e+11 -8.603e+13 -9.919e+11 -9.195e+13 -8.301e+11 -9.863e+13 -2.030e+12 -1.051e+14 -3.399e+12 -1.117e+14 -4.949e+12 -1.185e+14 -6.692e+12 -1.255e+14 -8.635e+12 -1.327e+14 -1.079e+13 -1.400e+14 -1.317e+13 -1.475e+14 -1.578e+13 -1.551e+14 -1.864e+13 -1.628e+14 -2.175e+13 -1.706e+14 -2.512e+13 -1.785e+14 -2.876e+13 -1.865e+14 -3.268e+13 -1.945e+14 -3.689e+13 -2.026e+14 -4.139e+13 -2.106e+14 -4.619e+13 -2.187e+14 -5.129e+13 -2.267e+14 -5.671e+13 -2.347e+14 -6.244e+13 -2.426e+14 -6.847e+13 -2.504e+14 -7.482e+13 -2.581e+14 -8.149e+13 -2.657e+14 -8.847e+13 -2.730e+14 -9.575e+13 -2.803e+14 -1.033e+14 -2.873e+14 -1.112e+14 -2.940e+14 -1.194e+14 -3.005e+14 -1.278e+14 -3.068e+14 -1.365e+14 -3.127e+14 -1.454e+14 -3.183e+14 -1.545e+14 -3.235e+14 -1.639e+14 -3.284e+14 -1.735e+14 -3.329e+14 -1.832e+14 -3.370e+14 -1.930e+14 -3.406e+14 -2.030e+14 -3.439e+14 -2.131e+14 -3.467e+14 -2.233e+14 -3.490e+14 -2.335e+14 -3.508e+14 -2.438e+14 -3.522e+14 -2.541e+14 -3.532e+14 -2.643e+14 -3.536e+14 -2.745e+14 -3.536e+14 -2.847e+14 -3.531e+14 -2.947e+14 -3.521e+14 -3.045e+14 -3.506e+14 -3.143e+14 -3.486e+14 -3.238e+14 -3.462e+14 -3.331e+14 -3.434e+14 -3.422e+14 -3.400e+14 -3.510e+14 -3.363e+14 -3.596e+14 -3.321e+14 -3.678e+14 -3.275e+14 -3.758e+14 -3.226e+14 -3.834e+14 -3.172e+14 -3.906e+14 -3.116e+14 -3.974e+14 -3.055e+14 -4.039e+14 -2.992e+14 -4.099e+14 -2.925e+14 -4.155e+14 -2.856e+14 -4.206e+14 -2.784e+14 -4.253e+14 -2.709e+14 -4.295e+14 -2.632e+14 -4.332e+14 -2.553e+14 -4.363e+14 -2.473e+14 -4.390e+14 -2.391e+14 -4.411e+14 -2.307e+14 -4.427e+14 -2.222e+14 -4.437e+14 -2.136e+14 -4.442e+14 -2.049e+14 -4.440e+14 -1.962e+14 -4.434e+14 -1.875e+14 -4.421e+14 -1.787e+14 -4.402e+14 -1.700e+14 -4.378e+14 -1.613e+14 -4.348e+14 -1.527e+14 -4.312e+14 -1.441e+14 -4.271e+14 -1.357e+14 -4.224e+14 -1.274e+14 -4.172e+14 -1.193e+14 -4.115e+14 -1.114e+14 -4.053e+14 -1.036e+14 -3.986e+14 -9.609e+13 -3.914e+14 -8.878e+13 -3.838e+14 -8.169e+13 -3.757e+14 -7.485e+13 -3.673e+14 -6.827e+13 -3.585e+14 -6.195e+13 -3.494e+14 -5.592e+13 -3.400e+14 -5.017e+13 -3.303e+14 -4.471e+13 -3.203e+14 -3.956e+13 -3.102e+14 -3.470e+13 -2.999e+14 -3.014e+13 -2.895e+14 -2.588e+13 -2.790e+14 -2.192e+13 -2.684e+14 -1.826e+13 -2.578e+14 -1.488e+13 -2.472e+14 -1.179e+13 -2.367e+14 -8.975e+12 -2.262e+14 -6.427e+12 -2.157e+14 -4.137e+12 -2.054e+14 -2.094e+12 -1.953e+14 -2.899e+11 -1.853e+14 1.290e+12 -1.755e+14 2.656e+12 -1.659e+14 3.821e+12 -1.565e+14 4.798e+12 -1.474e+14 5.599e+12 -1.385e+14 6.238e+12 -1.299e+14 6.727e+12 -1.216e+14 7.080e+12 -1.136e+14 7.308e+12 -1.058e+14 7.425e+12 -9.842e+13 7.443e+12 -9.131e+13 7.373e+12 -8.452e+13 7.227e+12 -7.804e+13 7.016e+12 -7.189e+13 6.754e+12 -6.604e+13 6.454e+12 -6.051e+13 6.120e+12 -5.529e+13 5.757e+12 -5.038e+13 5.372e+12 -4.577e+13 4.973e+12 -4.147e+13 4.568e+12 -3.745e+13 4.162e+12 -3.372e+13 3.760e+12 -3.026e+13 3.368e+12 -2.706e+13 2.989e+12 -2.411e+13 2.626e+12 -2.141e+13 2.284e+12 -1.894e+13 1.963e+12 -1.669e+13 1.665e+12 -1.465e+13 1.391e+12 -1.281e+13 1.142e+12 -1.115e+13 9.181e+11 -9.659e+12 7.185e+11 -8.331e+12 5.427e+11 -7.150e+12 3.899e+11 -6.107e+12 2.589e+11 -5.189e+12 1.481e+11 -4.386e+12 5.614e+10 -3.686e+12 -1.858e+10 -3.080e+12 -7.784e+10 -2.559e+12 -1.233e+11 -2.113e+12 -1.567e+11 -1.734e+12 -1.796e+11 -1.414e+12 -1.938e+11 -1.146e+12 -2.007e+11 -9.229e+11 -2.017e+11 -7.387e+11 -1.982e+11 -5.880e+11 -1.913e+11 -4.655e+11 -1.820e+11 -3.668e+11 -1.713e+11 -2.879e+11 -1.598e+11 -2.253e+11 -1.482e+11 -1.759e+11 -1.368e+11 -1.371e+11 -1.260e+11 -1.067e+11 -1.158e+11 -8.297e+10 -1.061e+11 -6.443e+10 -9.705e+10 -4.994e+10 -8.835e+10 -3.867e+10 -7.991e+10 -2.998e+10 -7.160e+10 -2.336e+10 -6.336e+10 -1.842e+10 -5.519e+10 -1.484e+10 -4.712e+10 -1.235e+10 -3.926e+10 -1.068e+10 -3.177e+10 -9.620e+09 -2.482e+10 -8.982e+09 -1.860e+10 -8.661e+09 -1.330e+10 -8.681e+09 -9.022e+09 -9.257e+09 -5.668e+09 -1.076e+10 -2.852e+09 -1.356e+10 9.000e+07 -1.790e+10 3.862e+09 -2.384e+10 8.980e+09 -3.139e+10 1.573e+10 -4.056e+10 2.424e+10 -5.131e+10 3.452e+10 -6.355e+10 4.648e+10 -7.723e+10 6.003e+10 -9.219e+10 7.496e+10 -1.083e+11 9.106e+10 -1.254e+11 1.081e+11 -1.432e+11 1.258e+11 -1.615e+11 1.438e+11 -1.801e+11 1.620e+11 -1.988e+11 1.799e+11 -2.172e+11 1.974e+11 -2.351e+11 2.141e+11 -2.523e+11 2.298e+11 -2.686e+11 2.442e+11 -2.837e+11 2.573e+11 -2.974e+11 2.688e+11 -3.096e+11 2.786e+11 -3.202e+11 2.867e+11 -3.290e+11 2.929e+11 -3.359e+11 2.972e+11 -3.409e+11 2.996e+11 -3.440e+11 3.002e+11 -3.452e+11 2.991e+11 -3.445e+11 2.963e+11 -3.420e+11 2.920e+11 -3.377e+11 2.862e+11 -3.317e+11 2.790e+11 -3.242e+11 2.707e+11 -3.153e+11 2.613e+11 -3.051e+11 2.511e+11 -2.937e+11 2.400e+11 -2.814e+11 2.283e+11 -2.683e+11 2.162e+11 -2.545e+11 2.037e+11 -2.403e+11 1.910e+11 -2.256e+11 1.781e+11 -2.108e+11 1.653e+11 -1.959e+11 1.526e+11 -1.811e+11 1.401e+11 -1.665e+11 1.279e+11 -1.522e+11 1.161e+11 -1.383e+11 1.048e+11 -1.249e+11 9.395e+10 -1.121e+11 8.370e+10 -9.990e+10 7.407e+10 -8.842e+10 6.508e+10 -7.770e+10 5.678e+10 -6.774e+10 4.916e+10 -5.857e+10 4.223e+10 -5.021e+10 3.599e+10 -4.265e+10 3.044e+10 -3.586e+10 2.552e+10 -2.984e+10 2.125e+10 -2.456e+10 1.756e+10 -1.997e+10 1.441e+10 -1.603e+10 1.176e+10 -1.269e+10 9.562e+09 -9.902e+09 7.758e+09 -7.612e+09 6.305e+09 -5.765e+09 5.155e+09 -4.302e+09 4.265e+09 -3.169e+09 3.599e+09 -2.310e+09 3.126e+09 -1.670e+09 2.824e+09 -1.197e+09 2.678e+09 -8.450e+08 2.678e+09 -5.734e+08 2.816e+09 -3.565e+08 3.089e+09 -1.803e+08 3.495e+09 -4.205e+07 4.036e+09 5.239e+07 4.718e+09 9.183e+07 5.547e+09 6.124e+07 6.533e+09 -5.697e+07 7.685e+09 -2.821e+08 9.011e+09 -6.348e+08 1.052e+10 -1.136e+09 1.222e+10 -1.808e+09 1.410e+10 -2.670e+09 1.618e+10 -3.744e+09 1.844e+10 -5.046e+09 2.088e+10 -6.594e+09 2.348e+10 -8.399e+09 2.623e+10 -1.047e+10 2.911e+10 -1.281e+10 3.210e+10 -1.543e+10 3.516e+10 -1.832e+10 3.828e+10 -2.146e+10 4.141e+10 -2.486e+10 4.453e+10 -2.849e+10 4.759e+10 -3.233e+10 5.058e+10 -3.636e+10 5.345e+10 -4.055e+10 5.616e+10 -4.486e+10 5.869e+10 -4.928e+10 6.100e+10 -5.376e+10 6.306e+10 -5.827e+10 6.484e+10 -6.278e+10 6.633e+10 -6.725e+10 6.749e+10 -7.164e+10 6.832e+10 -7.593e+10 6.879e+10 -8.009e+10 6.889e+10 -8.409e+10 6.861e+10 -8.790e+10 6.794e+10 -9.151e+10 6.688e+10 -9.488e+10 6.543e+10 -9.802e+10 6.359e+10 -1.009e+11 6.139e+10 -1.035e+11 5.883e+10 -1.058e+11 5.592e+10 -1.079e+11 5.270e+10 -1.097e+11 4.918e+10 -1.112e+11 4.537e+10 -1.124e+11 4.132e+10 -1.133e+11 3.705e+10 -1.139e+11 3.258e+10 -1.143e+11 2.794e+10 -1.145e+11 2.316e+10 -1.143e+11 1.827e+10 0.005 -39.705 -39.262 -38.819 -38.376 -37.933 -37.490 -37.045 -36.576 -36.087 -35.583 -35.069 -34.548 -34.025 -33.504 -32.988 -32.479 -31.979 -31.492 -31.019 -30.561 -30.119 -29.694 -29.288 -28.900 -28.531 -28.182 -27.853 -27.545 -27.256 -26.988 -26.741 -26.514 -26.308 -26.123 -25.959 -25.815 -25.692 -25.591 -25.510 -25.450 -25.412 -25.394 -25.398 -25.423 -25.470 -25.538 -25.627 -25.738 -25.871 -26.023 -26.196 -26.391 -26.608 -26.847 -27.107 -27.388 -27.690 -28.012 -28.354 -28.715 -29.094 -29.490 -29.900 -30.322 -30.754 -31.193 -31.635 -32.075 -32.509 -32.929 -33.329 -33.703 -34.042 -34.338 -34.585 -34.776 -34.905 -34.968 -34.965 -34.894 -34.759 -34.565 -34.316 -34.020 -33.686 -33.321 -32.933 -32.529 -32.117 -31.703 -31.291 -30.886 -30.493 -30.115 -29.754 -29.414 -29.096 -28.801 -28.533 -28.291 -28.077 -27.891 -27.734 -27.609 -27.516 -27.456 -27.431 -27.441 -27.488 -27.574 -27.699 -27.865 -28.075 -28.331 -28.634 -28.989 -29.397 -29.863 -30.390 -30.984 -31.649 -32.391 -33.219 -34.136 -35.151 -36.268 -37.489 -38.813 -40.226 -41.701 -43.194 -44.649 -46.026 -47.324 -48.563 -49.622 -49.948 -48.771 -46.198 -43.147 -40.214 -37.554 -35.164 -33.007 -31.048 -29.254 -27.601 -26.070 -24.644 -23.310 -22.059 -20.879 -19.765 -18.710 -17.711 -16.761 -15.858 -14.998 -14.179 -13.396 -12.649 -11.934 -11.252 -10.599 -9.974 -9.375 -8.802 -8.254 -7.728 -7.225 -6.744 -6.284 -5.843 -5.422 -5.020 -4.637 -4.271 -3.922 -3.591 -3.276 -2.977 -2.694 -2.426 -2.174 -1.936 -1.713 -1.505 -1.311 -1.131 -0.964 -0.812 -0.673 -0.547 -0.435 -0.335 -0.249 -0.176 -0.116 -0.068 -0.034 -0.012 0.000 -0.001 -0.015 -0.041 -0.080 -0.132 -0.196 -0.273 -0.364 -0.467 -0.583 -0.712 -0.854 -1.010 -1.179 -1.361 -1.557 -1.767 -1.992 -2.230 -2.483 -2.750 -3.033 -3.330 -3.644 -3.973 -4.318 -4.680 -5.058 -5.454 -5.868 -6.301 -6.752 -7.223 -7.714 -8.225 -8.759 -9.314 -9.894 -10.497 -11.127 -11.783 -12.468 -13.182 -13.927 -14.704 -15.517 -16.367 -17.257 -18.189 -19.165 -20.191 -21.270 -22.409 -23.612 -24.887 -26.240 -27.683 -29.225 -30.880 -32.665 -34.598 -36.703 -39.007 -41.537 -44.309 -47.292 -50.296 -52.769 -53.915 -53.546 -52.202 -50.409 -48.453 -46.496 -44.631 -42.908 -41.340 -39.929 -38.667 -37.537 -36.528 -35.628 -34.826 -34.114 -33.484 -32.928 -32.442 -32.019 -31.656 -31.349 -31.094 -30.889 -30.732 -30.619 -30.551 -30.524 -30.538 -30.591 -30.683 -30.811 -30.975 -31.174 -31.410 -31.680 -31.985 -32.323 -32.694 -33.096 -33.530 -33.993 -34.483 -34.999 -35.536 -36.091 -36.660 -37.236 -37.812 -38.379 -38.927 -39.446 -39.924 -40.351 -40.715 -41.010 -41.227 -41.362 -41.412 -41.378 -41.261 -41.063 -40.790 -40.450 -40.050 -39.601 -39.111 -38.592 -38.053 -37.502 -36.949 -36.398 -35.857 -35.328 -34.817 -34.324 -33.853 -33.405 -32.981 -32.581 -32.206 -31.856 -31.530 -31.228 -30.950 -30.696 -30.466 -30.260 -30.078 -29.920 -29.784 -29.671 -29.580 -29.511 -29.464 -29.438 -29.433 -29.450 -29.488 -29.546 -29.626 -29.726 -29.846 -29.987 -30.149 -30.331 -30.534 -30.758 -31.003 -31.268 -31.555 -31.863 -32.193 -32.545 -32.919 -33.315 -33.735 -34.178 -34.645 -35.137 -35.654 -36.196 -36.766 -37.362 -37.987 -38.642 -39.298 -39.954 -40.611 -41.267 -41.923 0 1 1.0 5760317058.76 EN HH 17.14 22.7 0.05 4.391e+10 8.635e+09 5.289e+10 1.064e+10 6.316e+10 1.296e+10 7.480e+10 1.563e+10 8.790e+10 1.868e+10 1.025e+11 2.211e+10 1.186e+11 2.596e+10 1.364e+11 3.024e+10 1.557e+11 3.495e+10 1.766e+11 4.008e+10 1.990e+11 4.565e+10 2.228e+11 5.162e+10 2.479e+11 5.799e+10 2.742e+11 6.472e+10 3.015e+11 7.175e+10 3.297e+11 7.906e+10 3.584e+11 8.658e+10 3.874e+11 9.423e+10 4.164e+11 1.019e+11 4.452e+11 1.096e+11 4.734e+11 1.172e+11 5.006e+11 1.245e+11 5.266e+11 1.316e+11 5.510e+11 1.382e+11 5.734e+11 1.443e+11 5.936e+11 1.499e+11 6.112e+11 1.548e+11 6.259e+11 1.590e+11 6.376e+11 1.623e+11 6.459e+11 1.648e+11 6.506e+11 1.664e+11 6.517e+11 1.670e+11 6.490e+11 1.667e+11 6.425e+11 1.654e+11 6.321e+11 1.631e+11 6.178e+11 1.599e+11 5.999e+11 1.558e+11 5.783e+11 1.508e+11 5.534e+11 1.451e+11 5.254e+11 1.386e+11 4.945e+11 1.314e+11 4.611e+11 1.237e+11 4.256e+11 1.155e+11 3.885e+11 1.069e+11 3.502e+11 9.803e+10 3.112e+11 8.899e+10 2.721e+11 7.986e+10 2.335e+11 7.075e+10 1.959e+11 6.177e+10 1.599e+11 5.301e+10 1.262e+11 4.455e+10 9.541e+10 3.650e+10 6.805e+10 2.896e+10 4.471e+10 2.202e+10 2.597e+10 1.580e+10 1.224e+10 1.048e+10 3.618e+09 6.481e+09 -1.261e+09 4.669e+09 -7.064e+09 5.370e+09 -1.835e+10 6.832e+09 -3.632e+10 7.835e+09 -6.123e+10 8.027e+09 -9.315e+10 7.291e+09 -1.319e+11 5.586e+09 -1.774e+11 2.901e+09 -2.294e+11 -7.599e+08 -2.873e+11 -5.359e+09 -3.508e+11 -1.085e+10 -4.194e+11 -1.720e+10 -4.922e+11 -2.430e+10 -5.684e+11 -3.207e+10 -6.474e+11 -4.040e+10 -7.280e+11 -4.915e+10 -8.095e+11 -5.821e+10 -8.909e+11 -6.744e+10 -9.712e+11 -7.668e+10 -1.049e+12 -8.578e+10 -1.125e+12 -9.461e+10 -1.196e+12 -1.030e+11 -1.262e+12 -1.108e+11 -1.323e+12 -1.180e+11 -1.377e+12 -1.243e+11 -1.424e+12 -1.296e+11 -1.464e+12 -1.340e+11 -1.496e+12 -1.374e+11 -1.519e+12 -1.396e+11 -1.534e+12 -1.407e+11 -1.540e+12 -1.407e+11 -1.538e+12 -1.396e+11 -1.527e+12 -1.375e+11 -1.508e+12 -1.344e+11 -1.482e+12 -1.304e+11 -1.448e+12 -1.257e+11 -1.407e+12 -1.202e+11 -1.360e+12 -1.143e+11 -1.307e+12 -1.078e+11 -1.250e+12 -1.010e+11 -1.188e+12 -9.405e+10 -1.123e+12 -8.696e+10 -1.056e+12 -7.987e+10 -9.866e+11 -7.293e+10 -9.166e+11 -6.623e+10 -8.465e+11 -5.980e+10 -7.768e+11 -5.366e+10 -7.082e+11 -4.785e+10 -6.413e+11 -4.240e+10 -5.767e+11 -3.735e+10 -5.147e+11 -3.270e+10 -4.560e+11 -2.844e+10 -4.007e+11 -2.459e+10 -3.492e+11 -2.113e+10 -3.017e+11 -1.804e+10 -2.582e+11 -1.529e+10 -2.188e+11 -1.288e+10 -1.835e+11 -1.076e+10 -1.522e+11 -8.923e+09 -1.247e+11 -7.333e+09 -1.008e+11 -5.969e+09 -8.046e+10 -4.808e+09 -6.323e+10 -3.827e+09 -4.888e+10 -3.005e+09 -3.713e+10 -2.325e+09 -2.765e+10 -1.767e+09 -2.015e+10 -1.317e+09 -1.434e+10 -9.589e+08 -9.935e+09 -6.796e+08 -6.678e+09 -4.665e+08 -4.339e+09 -3.084e+08 -2.712e+09 -1.947e+08 -1.621e+09 -1.160e+08 -9.209e+08 -6.427e+07 -4.930e+08 -3.222e+07 -2.466e+08 -1.395e+07 -1.143e+08 -4.655e+06 -4.874e+07 -6.864e+05 -1.917e+07 5.131e+05 -7.101e+06 5.464e+05 -2.567e+06 2.506e+05 -9.039e+05 -3.523e+04 -2.510e+05 -3.200e+05 5.610e+05 -1.242e+06 4.126e+06 -4.329e+06 1.687e+07 -1.225e+07 5.332e+07 -2.975e+07 1.426e+08 -6.452e+07 3.371e+08 -1.281e+08 7.240e+08 -2.375e+08 1.438e+09 -4.158e+08 2.678e+09 -6.944e+08 4.725e+09 -1.115e+09 7.962e+09 -1.732e+09 1.289e+10 -2.612e+09 2.017e+10 -3.844e+09 3.061e+10 -5.533e+09 4.521e+10 -7.810e+09 6.522e+10 -1.084e+10 9.208e+10 -1.480e+10 1.275e+11 -1.993e+10 1.734e+11 -2.648e+10 2.320e+11 -3.477e+10 3.059e+11 -4.513e+10 3.978e+11 -5.797e+10 5.108e+11 -7.373e+10 6.480e+11 -9.288e+10 8.130e+11 -1.160e+11 1.010e+12 -1.436e+11 1.241e+12 -1.762e+11 1.512e+12 -2.147e+11 1.825e+12 -2.595e+11 2.185e+12 -3.113e+11 2.595e+12 -3.708e+11 3.058e+12 -4.386e+11 3.577e+12 -5.153e+11 4.155e+12 -6.015e+11 4.793e+12 -6.976e+11 5.492e+12 -8.038e+11 6.253e+12 -9.207e+11 7.075e+12 -1.048e+12 7.955e+12 -1.186e+12 8.892e+12 -1.335e+12 9.881e+12 -1.494e+12 1.092e+13 -1.664e+12 1.199e+13 -1.843e+12 1.310e+13 -2.030e+12 1.423e+13 -2.224e+12 1.538e+13 -2.424e+12 1.653e+13 -2.628e+12 1.766e+13 -2.834e+12 1.877e+13 -3.041e+12 1.984e+13 -3.245e+12 2.086e+13 -3.445e+12 2.181e+13 -3.637e+12 2.267e+13 -3.820e+12 2.343e+13 -3.989e+12 2.408e+13 -4.143e+12 2.459e+13 -4.277e+12 2.495e+13 -4.390e+12 2.516e+13 -4.477e+12 2.520e+13 -4.537e+12 2.505e+13 -4.566e+12 2.473e+13 -4.561e+12 2.421e+13 -4.521e+12 2.349e+13 -4.444e+12 2.259e+13 -4.328e+12 2.150e+13 -4.174e+12 2.023e+13 -3.980e+12 1.880e+13 -3.749e+12 1.723e+13 -3.481e+12 1.553e+13 -3.181e+12 1.373e+13 -2.852e+12 1.188e+13 -2.501e+12 9.993e+12 -2.133e+12 8.124e+12 -1.759e+12 6.318e+12 -1.387e+12 4.630e+12 -1.031e+12 3.114e+12 -7.033e+11 1.832e+12 -4.200e+11 8.505e+11 -1.982e+11 2.383e+11 -5.666e+10 -3.372e+10 7.301e+09 -4.150e+11 9.807e+10 -1.356e+12 3.263e+11 -2.969e+12 7.251e+11 -5.332e+12 1.319e+12 -8.525e+12 2.136e+12 -1.262e+13 3.200e+12 -1.769e+13 4.538e+12 -2.382e+13 6.177e+12 -3.105e+13 8.141e+12 -3.944e+13 1.045e+13 -4.906e+13 1.314e+13 -5.994e+13 1.621e+13 -7.210e+13 1.970e+13 -8.559e+13 2.361e+13 -1.004e+14 2.796e+13 -1.165e+14 3.274e+13 -1.340e+14 3.799e+13 -1.527e+14 4.368e+13 -1.726e+14 4.981e+13 -1.937e+14 5.638e+13 -2.160e+14 6.338e+13 -2.392e+14 7.077e+13 -2.634e+14 7.855e+13 -2.884e+14 8.668e+13 -3.140e+14 9.513e+13 -3.402e+14 1.039e+14 -3.668e+14 1.128e+14 -3.936e+14 1.220e+14 -4.206e+14 1.313e+14 -4.474e+14 1.407e+14 -4.739e+14 1.502e+14 -4.999e+14 1.596e+14 -5.253e+14 1.689e+14 -5.498e+14 1.780e+14 -5.733e+14 1.870e+14 -5.956e+14 1.956e+14 -6.164e+14 2.039e+14 -6.357e+14 2.118e+14 -6.532e+14 2.192e+14 -6.688e+14 2.260e+14 -6.824e+14 2.322e+14 -6.939e+14 2.378e+14 -7.031e+14 2.427e+14 -7.099e+14 2.468e+14 -7.142e+14 2.501e+14 -7.160e+14 2.525e+14 -7.151e+14 2.540e+14 -7.116e+14 2.546e+14 -7.054e+14 2.541e+14 -6.966e+14 2.528e+14 -6.851e+14 2.504e+14 -6.711e+14 2.470e+14 -6.547e+14 2.426e+14 -6.359e+14 2.373e+14 -6.148e+14 2.311e+14 -5.917e+14 2.239e+14 -5.667e+14 2.160e+14 -5.399e+14 2.072e+14 -5.116e+14 1.976e+14 -4.820e+14 1.875e+14 -4.513e+14 1.767e+14 -4.198e+14 1.655e+14 -3.877e+14 1.539e+14 -3.554e+14 1.419e+14 -3.230e+14 1.298e+14 -2.909e+14 1.177e+14 -2.593e+14 1.055e+14 -2.284e+14 9.352e+13 -1.987e+14 8.180e+13 -1.702e+14 7.047e+13 -1.432e+14 5.962e+13 -1.181e+14 4.939e+13 -9.494e+13 3.988e+13 -7.394e+13 3.117e+13 -5.533e+13 2.338e+13 -3.923e+13 1.660e+13 -2.576e+13 1.088e+13 -1.505e+13 6.307e+12 -7.167e+12 2.943e+12 -2.160e+12 8.291e+11 -7.105e+10 5.580e+09 9.170e+11 -5.043e+11 4.685e+12 -2.313e+12 1.131e+13 -5.430e+12 2.073e+13 -9.846e+12 3.286e+13 -1.555e+13 4.755e+13 -2.248e+13 6.466e+13 -3.061e+13 8.405e+13 -3.989e+13 1.055e+14 -5.023e+13 1.288e+14 -6.156e+13 1.538e+14 -7.381e+13 1.802e+14 -8.686e+13 2.079e+14 -1.006e+14 2.364e+14 -1.150e+14 2.657e+14 -1.298e+14 2.954e+14 -1.450e+14 3.253e+14 -1.605e+14 3.551e+14 -1.761e+14 3.845e+14 -1.916e+14 4.135e+14 -2.071e+14 4.415e+14 -2.223e+14 4.685e+14 -2.371e+14 4.943e+14 -2.514e+14 5.186e+14 -2.651e+14 5.413e+14 -2.781e+14 5.621e+14 -2.903e+14 5.809e+14 -3.016e+14 5.976e+14 -3.119e+14 6.120e+14 -3.211e+14 6.242e+14 -3.292e+14 6.339e+14 -3.361e+14 6.411e+14 -3.417e+14 6.459e+14 -3.461e+14 6.482e+14 -3.492e+14 6.481e+14 -3.509e+14 6.455e+14 -3.514e+14 6.405e+14 -3.505e+14 6.332e+14 -3.483e+14 6.237e+14 -3.449e+14 6.122e+14 -3.403e+14 5.988e+14 -3.346e+14 5.836e+14 -3.279e+14 5.668e+14 -3.201e+14 5.484e+14 -3.113e+14 5.286e+14 -3.016e+14 5.077e+14 -2.912e+14 4.857e+14 -2.800e+14 4.630e+14 -2.682e+14 4.395e+14 -2.559e+14 4.156e+14 -2.431e+14 3.914e+14 -2.301e+14 3.671e+14 -2.168e+14 3.428e+14 -2.033e+14 3.187e+14 -1.899e+14 2.949e+14 -1.765e+14 2.716e+14 -1.632e+14 2.489e+14 -1.502e+14 2.270e+14 -1.375e+14 2.058e+14 -1.252e+14 1.855e+14 -1.132e+14 1.662e+14 -1.018e+14 1.479e+14 -9.091e+13 1.307e+14 -8.060e+13 1.146e+14 -7.090e+13 9.968e+13 -6.183e+13 8.591e+13 -5.342e+13 7.328e+13 -4.567e+13 6.181e+13 -3.860e+13 5.147e+13 -3.219e+13 4.223e+13 -2.645e+13 3.407e+13 -2.135e+13 2.694e+13 -1.688e+13 2.079e+13 -1.302e+13 1.558e+13 -9.730e+12 1.124e+13 -6.991e+12 7.712e+12 -4.765e+12 4.940e+12 -3.016e+12 2.858e+12 -1.710e+12 1.398e+12 -8.040e+11 4.979e+11 -2.613e+11 8.871e+10 -3.175e+10 -1.133e+11 1.091e+11 -5.066e+11 4.190e+11 -1.208e+12 9.379e+11 -2.161e+12 1.629e+12 -3.313e+12 2.458e+12 -4.612e+12 3.391e+12 -6.012e+12 4.399e+12 -7.470e+12 5.452e+12 -8.945e+12 6.524e+12 -1.040e+13 7.593e+12 -1.182e+13 8.635e+12 -1.315e+13 9.632e+12 -1.439e+13 1.057e+13 -1.552e+13 1.143e+13 -1.651e+13 1.221e+13 -1.737e+13 1.289e+13 -1.808e+13 1.347e+13 -1.863e+13 1.394e+13 -1.903e+13 1.431e+13 -1.928e+13 1.457e+13 -1.938e+13 1.472e+13 -1.934e+13 1.476e+13 -1.917e+13 1.470e+13 -1.888e+13 1.455e+13 -1.847e+13 1.431e+13 -1.795e+13 1.399e+13 -1.735e+13 1.359e+13 -1.668e+13 1.313e+13 -1.593e+13 1.261e+13 -1.514e+13 1.204e+13 -1.431e+13 1.144e+13 -1.345e+13 1.080e+13 -1.257e+13 1.015e+13 -1.169e+13 9.483e+12 -1.082e+13 8.813e+12 -9.951e+12 8.145e+12 -9.106e+12 7.486e+12 -8.287e+12 6.843e+12 -7.501e+12 6.220e+12 -6.750e+12 5.622e+12 -6.039e+12 5.053e+12 -5.373e+12 4.516e+12 -4.752e+12 4.011e+12 -4.177e+12 3.541e+12 -3.650e+12 3.107e+12 -3.168e+12 2.709e+12 -2.732e+12 2.346e+12 -2.340e+12 2.018e+12 -1.990e+12 1.724e+12 -1.680e+12 1.463e+12 -1.408e+12 1.232e+12 -1.170e+12 1.029e+12 -9.644e+11 8.528e+11 -7.878e+11 7.009e+11 -6.375e+11 5.710e+11 -5.108e+11 4.609e+11 -4.050e+11 3.685e+11 -3.175e+11 2.916e+11 -2.460e+11 2.283e+11 -1.882e+11 1.767e+11 -1.420e+11 1.351e+11 -1.055e+11 1.020e+11 -7.718e+10 7.597e+10 -5.546e+10 5.573e+10 -3.910e+10 4.025e+10 -2.700e+10 2.858e+10 -1.821e+10 1.993e+10 -1.198e+10 1.362e+10 -7.656e+09 9.117e+09 -4.741e+09 5.962e+09 -2.834e+09 3.802e+09 -1.628e+09 2.360e+09 -8.933e+08 1.420e+09 -4.657e+08 8.255e+08 -2.289e+08 4.598e+08 -1.049e+08 2.417e+08 -4.441e+07 1.163e+08 -1.707e+07 4.764e+07 -5.647e+06 1.382e+07 -1.775e+06 1.286e+06 -1.998e+06 -8.118e+06 -2.924e+06 -2.999e+07 -1.169e+06 -7.182e+07 7.599e+06 -1.421e+08 3.130e+07 -2.554e+08 8.309e+07 -4.340e+08 1.835e+08 -7.101e+08 3.629e+08 -1.129e+09 6.637e+08 -1.749e+09 1.143e+09 -2.647e+09 1.874e+09 -3.919e+09 2.946e+09 -5.679e+09 4.468e+09 -8.061e+09 6.568e+09 -1.123e+10 9.387e+09 -1.535e+10 1.308e+10 -2.062e+10 1.782e+10 -2.725e+10 2.380e+10 -3.547e+10 3.118e+10 -4.549e+10 4.017e+10 -5.755e+10 5.094e+10 -7.188e+10 6.367e+10 -8.869e+10 7.852e+10 -1.082e+11 9.564e+10 -1.305e+11 1.151e+11 -1.558e+11 1.371e+11 -1.843e+11 1.616e+11 -2.159e+11 1.886e+11 -2.506e+11 2.181e+11 -2.885e+11 2.500e+11 -3.294e+11 2.842e+11 -3.731e+11 3.206e+11 -4.194e+11 3.588e+11 -4.682e+11 3.987e+11 -5.189e+11 4.398e+11 -5.712e+11 4.820e+11 -6.246e+11 5.246e+11 -6.787e+11 5.674e+11 -7.329e+11 6.098e+11 -7.867e+11 6.515e+11 -8.395e+11 6.919e+11 -8.907e+11 7.305e+11 -9.397e+11 7.667e+11 -9.857e+11 8.001e+11 -1.028e+12 8.302e+11 -1.067e+12 8.566e+11 -1.101e+12 8.788e+11 -1.130e+12 8.966e+11 -1.153e+12 9.096e+11 -1.171e+12 9.176e+11 -1.182e+12 9.204e+11 -1.188e+12 9.180e+11 -1.186e+12 9.103e+11 -1.178e+12 8.974e+11 -1.163e+12 8.794e+11 -1.142e+12 8.566e+11 -1.115e+12 8.291e+11 -1.082e+12 7.974e+11 -1.043e+12 7.619e+11 -9.987e+11 7.229e+11 -9.499e+11 6.811e+11 -8.970e+11 6.369e+11 -8.406e+11 5.907e+11 -7.813e+11 5.434e+11 -7.200e+11 4.953e+11 -6.573e+11 4.471e+11 -5.939e+11 3.993e+11 -5.306e+11 3.525e+11 -4.682e+11 3.070e+11 -4.073e+11 2.636e+11 -3.488e+11 2.225e+11 -2.932e+11 1.841e+11 -2.411e+11 1.488e+11 -1.932e+11 1.170e+11 -1.499e+11 8.873e+10 -1.115e+11 6.428e+10 -7.861e+10 4.375e+10 -5.131e+10 2.718e+10 -2.978e+10 1.464e+10 -1.418e+10 6.106e+09 -4.448e+09 1.639e+09 -2.425e+08 1.994e+08 2.726e+09 -2.808e+09 1.009e+10 -8.937e+09 2.266e+10 -1.819e+10 4.010e+10 -3.034e+10 6.200e+10 -4.510e+10 8.792e+10 -6.214e+10 1.173e+11 -8.112e+10 1.497e+11 -1.017e+11 1.846e+11 -1.236e+11 2.212e+11 -1.463e+11 2.592e+11 -1.695e+11 2.979e+11 -1.929e+11 3.367e+11 -2.161e+11 3.750e+11 -2.388e+11 4.125e+11 -2.606e+11 4.485e+11 -2.812e+11 4.827e+11 -3.003e+11 5.145e+11 -3.178e+11 5.436e+11 -3.333e+11 5.698e+11 -3.468e+11 5.926e+11 -3.580e+11 6.120e+11 -3.668e+11 6.277e+11 -3.733e+11 6.396e+11 -3.772e+11 6.477e+11 -3.788e+11 6.520e+11 -3.779e+11 6.525e+11 -3.747e+11 6.494e+11 -3.693e+11 6.427e+11 -3.618e+11 6.326e+11 -3.524e+11 6.195e+11 -3.413e+11 6.034e+11 -3.286e+11 5.847e+11 -3.147e+11 5.637e+11 -2.997e+11 5.408e+11 -2.838e+11 5.161e+11 -2.673e+11 4.901e+11 -2.504e+11 4.631e+11 -2.332e+11 4.354e+11 -2.160e+11 4.073e+11 -1.990e+11 3.790e+11 -1.823e+11 3.510e+11 -1.661e+11 3.232e+11 -1.505e+11 2.962e+11 -1.356e+11 2.700e+11 -1.215e+11 2.447e+11 -1.082e+11 2.206e+11 -9.585e+10 1.978e+11 -8.438e+10 1.764e+11 -7.383e+10 1.563e+11 -6.420e+10 1.378e+11 -5.547e+10 1.206e+11 -4.761e+10 1.050e+11 -4.058e+10 9.080e+10 -3.434e+10 7.799e+10 -2.885e+10 6.653e+10 -2.404e+10 5.636e+10 -1.987e+10 4.738e+10 0.005 -51.814 -50.910 -50.006 -49.101 -48.197 -47.293 -46.388 -45.558 -44.812 -44.145 -43.554 -43.033 -42.580 -42.192 -41.868 -41.606 -41.405 -41.263 -41.182 -41.161 -41.200 -41.301 -41.464 -41.693 -41.988 -42.354 -42.793 -43.311 -43.913 -44.606 -45.398 -46.299 -47.323 -48.486 -49.810 -51.323 -53.066 -55.096 -57.505 -60.449 -64.254 -69.823 -82.027 -77.748 -70.606 -66.267 -63.089 -60.317 -57.768 -55.413 -53.253 -51.287 -49.500 -47.879 -46.407 -45.070 -43.857 -42.755 -41.755 -40.848 -40.028 -39.288 -38.621 -38.024 -37.494 -37.027 -36.623 -36.277 -35.989 -35.757 -35.579 -35.455 -35.383 -35.364 -35.396 -35.480 -35.615 -35.800 -36.037 -36.324 -36.661 -37.049 -37.487 -37.975 -38.512 -39.101 -39.742 -40.438 -41.196 -42.026 -42.946 -43.982 -45.179 -46.600 -48.360 -50.618 -53.461 -55.904 -55.234 -51.648 -48.159 -45.321 -42.985 -41.008 -39.296 -37.789 -36.447 -35.243 -34.158 -33.176 -32.286 -31.481 -30.754 -30.097 -29.505 -28.977 -28.513 -28.110 -27.767 -27.484 -27.259 -27.094 -26.988 -26.944 -26.961 -27.042 -27.192 -27.412 -27.705 -28.068 -28.516 -29.057 -29.700 -30.456 -31.342 -32.376 -33.583 -34.996 -36.662 -38.647 -41.046 -44.017 -47.845 -53.117 -61.464 -75.662 -76.724 -63.982 -53.970 -47.308 -42.377 -38.445 -35.167 -32.352 -29.885 -27.688 -25.710 -23.912 -22.259 -20.727 -19.308 -17.988 -16.759 -15.610 -14.536 -13.523 -12.557 -11.649 -10.794 -9.989 -9.232 -8.516 -7.826 -7.176 -6.564 -5.991 -5.453 -4.941 -4.449 -3.991 -3.565 -3.172 -2.799 -2.445 -2.119 -1.823 -1.556 -1.304 -1.069 -0.862 -0.684 -0.531 -0.386 -0.263 -0.169 -0.102 -0.050 -0.012 0.000 -0.016 -0.060 -0.096 -0.159 -0.250 -0.369 -0.505 -0.659 -0.841 -1.052 -1.286 -1.528 -1.798 -2.097 -2.426 -2.775 -3.140 -3.537 -3.967 -4.429 -4.910 -5.414 -5.954 -6.532 -7.150 -7.796 -8.476 -9.200 -9.970 -10.789 -11.657 -12.564 -13.525 -14.549 -15.643 -16.813 -18.065 -19.394 -20.819 -22.363 -24.044 -25.883 -27.908 -30.159 -32.681 -35.561 -38.933 -43.033 -48.403 -56.935 -64.005 -57.343 -51.803 -47.924 -44.623 -41.743 -39.250 -37.100 -35.246 -33.643 -32.253 -31.042 -29.982 -29.055 -28.250 -27.554 -26.956 -26.447 -26.020 -25.670 -25.391 -25.180 -25.032 -24.945 -24.909 -24.929 -25.005 -25.138 -25.325 -25.566 -25.862 -26.213 -26.620 -27.083 -27.605 -28.188 -28.834 -29.547 -30.330 -31.185 -32.118 -33.141 -34.261 -35.490 -36.841 -38.333 -39.986 -41.831 -43.903 -46.248 -48.907 -51.879 -54.952 -57.407 -58.451 -58.442 -58.360 -58.817 -60.143 -62.702 -66.340 -65.200 -60.083 -55.897 -52.795 -50.391 -48.452 -46.853 -45.516 -44.389 -43.436 -42.633 -41.960 -41.402 -40.948 -40.590 -40.321 -40.135 -40.029 -39.999 -40.043 -40.159 -40.346 -40.605 -40.935 -41.337 -41.813 -42.365 -42.995 -43.707 -44.503 -45.388 -46.371 -47.457 -48.656 -49.977 -51.435 -53.045 -54.831 -56.828 -59.095 -61.747 -65.026 -69.313 -73.564 -71.271 -66.466 -62.801 -59.941 -57.581 -55.563 -53.802 -52.244 -50.858 -49.618 -48.507 -47.510 -46.618 -45.820 -45.110 -44.480 -43.925 -43.441 -43.024 -42.670 -42.378 -42.143 -41.965 -41.842 -41.772 -41.755 -41.789 -41.875 -42.011 -42.198 -42.436 -42.726 -43.068 -43.464 -43.915 -44.422 -44.988 -45.616 -46.310 -47.073 -47.911 -48.815 -49.720 -50.624 -51.529 -52.433 -53.337 0 1 1.0 1 EN HV 17.14 22.7 0.05 4.440e+10 -5.146e+10 5.330e+10 -5.922e+10 6.344e+10 -6.774e+10 7.491e+10 -7.706e+10 8.777e+10 -8.718e+10 1.021e+11 -9.806e+10 1.179e+11 -1.097e+11 1.352e+11 -1.221e+11 1.540e+11 -1.351e+11 1.743e+11 -1.488e+11 1.960e+11 -1.629e+11 2.191e+11 -1.775e+11 2.434e+11 -1.924e+11 2.688e+11 -2.075e+11 2.951e+11 -2.227e+11 3.221e+11 -2.378e+11 3.496e+11 -2.526e+11 3.773e+11 -2.670e+11 4.050e+11 -2.809e+11 4.323e+11 -2.941e+11 4.590e+11 -3.064e+11 4.846e+11 -3.177e+11 5.090e+11 -3.278e+11 5.317e+11 -3.367e+11 5.525e+11 -3.441e+11 5.710e+11 -3.500e+11 5.870e+11 -3.543e+11 6.003e+11 -3.569e+11 6.105e+11 -3.577e+11 6.175e+11 -3.567e+11 6.212e+11 -3.539e+11 6.213e+11 -3.492e+11 6.179e+11 -3.427e+11 6.109e+11 -3.344e+11 6.004e+11 -3.243e+11 5.863e+11 -3.126e+11 5.687e+11 -2.993e+11 5.479e+11 -2.845e+11 5.241e+11 -2.684e+11 4.974e+11 -2.511e+11 4.682e+11 -2.327e+11 4.368e+11 -2.136e+11 4.036e+11 -1.939e+11 3.689e+11 -1.738e+11 3.332e+11 -1.536e+11 2.970e+11 -1.335e+11 2.607e+11 -1.138e+11 2.248e+11 -9.476e+10 1.899e+11 -7.671e+10 1.564e+11 -5.989e+10 1.250e+11 -4.458e+10 9.608e+10 -3.107e+10 7.021e+10 -1.959e+10 4.787e+10 -1.037e+10 2.957e+10 -3.588e+09 1.572e+10 7.006e+08 6.653e+09 2.826e+09 1.794e+09 4.336e+09 -2.280e+09 8.276e+09 -1.013e+10 1.594e+10 -2.340e+10 2.702e+10 -4.245e+10 4.129e+10 -6.740e+10 5.860e+10 -9.813e+10 7.875e+10 -1.345e+11 1.016e+11 -1.763e+11 1.268e+11 -2.231e+11 1.542e+11 -2.745e+11 1.834e+11 -3.301e+11 2.141e+11 -3.892e+11 2.459e+11 -4.511e+11 2.784e+11 -5.151e+11 3.114e+11 -5.805e+11 3.442e+11 -6.463e+11 3.766e+11 -7.120e+11 4.081e+11 -7.766e+11 4.385e+11 -8.392e+11 4.672e+11 -8.992e+11 4.941e+11 -9.557e+11 5.188e+11 -1.008e+12 5.410e+11 -1.055e+12 5.605e+11 -1.097e+12 5.771e+11 -1.134e+12 5.906e+11 -1.163e+12 6.010e+11 -1.186e+12 6.080e+11 -1.202e+12 6.117e+11 -1.211e+12 6.121e+11 -1.213e+12 6.092e+11 -1.208e+12 6.031e+11 -1.196e+12 5.938e+11 -1.177e+12 5.816e+11 -1.152e+12 5.665e+11 -1.121e+12 5.489e+11 -1.085e+12 5.289e+11 -1.044e+12 5.067e+11 -9.986e+11 4.828e+11 -9.495e+11 4.572e+11 -8.975e+11 4.305e+11 -8.431e+11 4.027e+11 -7.870e+11 3.744e+11 -7.300e+11 3.458e+11 -6.727e+11 3.171e+11 -6.158e+11 2.888e+11 -5.597e+11 2.610e+11 -5.049e+11 2.340e+11 -4.520e+11 2.081e+11 -4.014e+11 1.835e+11 -3.534e+11 1.603e+11 -3.084e+11 1.387e+11 -2.666e+11 1.187e+11 -2.281e+11 1.005e+11 -1.932e+11 8.412e+10 -1.617e+11 6.951e+10 -1.336e+11 5.663e+10 -1.090e+11 4.546e+10 -8.761e+10 3.589e+10 -6.930e+10 2.783e+10 -5.385e+10 2.114e+10 -4.103e+10 1.570e+10 -3.058e+10 1.136e+10 -2.222e+10 7.971e+09 -1.568e+10 5.400e+09 -1.069e+10 3.503e+09 -6.999e+09 2.154e+09 -4.358e+09 1.235e+09 -2.545e+09 6.431e+08 -1.365e+09 2.889e+08 -6.503e+08 9.891e+07 -2.578e+08 1.412e+07 -7.484e+07 -1.093e+07 -1.037e+07 -1.358e+07 1.316e+07 -1.911e+07 3.640e+07 -2.828e+07 5.507e+07 -3.156e+07 6.075e+07 -2.771e+07 5.328e+07 -1.928e+07 3.769e+07 -9.902e+06 2.073e+07 -2.679e+06 8.014e+06 9.222e+05 1.571e+06 2.009e+06 -1.477e+06 2.956e+06 -3.954e+06 3.540e+06 -4.097e+06 2.045e+06 -1.684e+06 -9.008e+05 7.195e+06 -1.192e+07 5.039e+07 -5.615e+07 1.889e+08 -1.764e+08 5.232e+08 -4.399e+08 1.210e+09 -9.470e+08 2.480e+09 -1.842e+09 4.656e+09 -3.321e+09 8.168e+09 -5.643e+09 1.358e+10 -9.145e+09 2.162e+10 -1.425e+10 3.317e+10 -2.148e+10 4.932e+10 -3.146e+10 7.139e+10 -4.496e+10 1.009e+11 -6.285e+10 1.396e+11 -8.617e+10 1.895e+11 -1.161e+11 2.530e+11 -1.539e+11 3.325e+11 -2.011e+11 4.309e+11 -2.593e+11 5.512e+11 -3.302e+11 6.965e+11 -4.156e+11 8.704e+11 -5.176e+11 1.076e+12 -6.379e+11 1.318e+12 -7.788e+11 1.598e+12 -9.422e+11 1.921e+12 -1.130e+12 2.290e+12 -1.344e+12 2.708e+12 -1.586e+12 3.178e+12 -1.857e+12 3.702e+12 -2.159e+12 4.282e+12 -2.492e+12 4.918e+12 -2.857e+12 5.611e+12 -3.254e+12 6.361e+12 -3.682e+12 7.166e+12 -4.141e+12 8.023e+12 -4.627e+12 8.928e+12 -5.141e+12 9.875e+12 -5.678e+12 1.086e+13 -6.235e+12 1.188e+13 -6.809e+12 1.291e+13 -7.393e+12 1.396e+13 -7.983e+12 1.501e+13 -8.573e+12 1.605e+13 -9.156e+12 1.707e+13 -9.726e+12 1.805e+13 -1.028e+13 1.898e+13 -1.080e+13 1.985e+13 -1.128e+13 2.063e+13 -1.172e+13 2.133e+13 -1.211e+13 2.192e+13 -1.244e+13 2.239e+13 -1.271e+13 2.272e+13 -1.290e+13 2.291e+13 -1.301e+13 2.295e+13 -1.303e+13 2.282e+13 -1.297e+13 2.252e+13 -1.280e+13 2.205e+13 -1.255e+13 2.140e+13 -1.219e+13 2.058e+13 -1.173e+13 1.959e+13 -1.118e+13 1.844e+13 -1.054e+13 1.714e+13 -9.813e+12 1.571e+13 -9.008e+12 1.416e+13 -8.136e+12 1.253e+13 -7.211e+12 1.083e+13 -6.249e+12 9.116e+12 -5.270e+12 7.413e+12 -4.295e+12 5.767e+12 -3.349e+12 4.226e+12 -2.461e+12 2.843e+12 -1.660e+12 1.672e+12 -9.795e+11 7.765e+11 -4.567e+11 2.175e+11 -1.287e+11 -3.108e+10 1.737e+10 -3.801e+11 2.216e+11 -1.242e+12 7.278e+11 -2.719e+12 1.599e+12 -4.883e+12 2.880e+12 -7.807e+12 4.615e+12 -1.156e+13 6.847e+12 -1.621e+13 9.618e+12 -2.182e+13 1.297e+13 -2.845e+13 1.694e+13 -3.614e+13 2.155e+13 -4.497e+13 2.685e+13 -5.494e+13 3.285e+13 -6.610e+13 3.958e+13 -7.848e+13 4.704e+13 -9.207e+13 5.525e+13 -1.069e+14 6.420e+13 -1.229e+14 7.390e+13 -1.401e+14 8.432e+13 -1.584e+14 9.544e+13 -1.778e+14 1.072e+14 -1.983e+14 1.197e+14 -2.197e+14 1.327e+14 -2.420e+14 1.463e+14 -2.650e+14 1.603e+14 -2.887e+14 1.748e+14 -3.130e+14 1.896e+14 -3.376e+14 2.047e+14 -3.625e+14 2.200e+14 -3.875e+14 2.353e+14 -4.124e+14 2.507e+14 -4.371e+14 2.659e+14 -4.615e+14 2.810e+14 -4.853e+14 2.957e+14 -5.084e+14 3.101e+14 -5.305e+14 3.239e+14 -5.516e+14 3.371e+14 -5.714e+14 3.495e+14 -5.898e+14 3.612e+14 -6.067e+14 3.719e+14 -6.218e+14 3.816e+14 -6.351e+14 3.902e+14 -6.465e+14 3.977e+14 -6.558e+14 4.039e+14 -6.629e+14 4.088e+14 -6.677e+14 4.124e+14 -6.701e+14 4.144e+14 -6.700e+14 4.150e+14 -6.674e+14 4.140e+14 -6.624e+14 4.115e+14 -6.548e+14 4.075e+14 -6.447e+14 4.019e+14 -6.322e+14 3.947e+14 -6.173e+14 3.861e+14 -6.001e+14 3.761e+14 -5.808e+14 3.647e+14 -5.594e+14 3.519e+14 -5.361e+14 3.380e+14 -5.111e+14 3.230e+14 -4.847e+14 3.069e+14 -4.569e+14 2.900e+14 -4.280e+14 2.724e+14 -3.983e+14 2.541e+14 -3.680e+14 2.355e+14 -3.374e+14 2.165e+14 -3.066e+14 1.974e+14 -2.761e+14 1.784e+14 -2.460e+14 1.596e+14 -2.167e+14 1.411e+14 -1.883e+14 1.232e+14 -1.611e+14 1.060e+14 -1.354e+14 8.957e+13 -1.114e+14 7.421e+13 -8.932e+13 5.998e+13 -6.930e+13 4.701e+13 -5.157e+13 3.544e+13 -3.627e+13 2.536e+13 -2.352e+13 1.686e+13 -1.345e+13 1.003e+13 -6.147e+12 4.934e+12 -1.656e+12 1.610e+12 4.528e+09 1.291e+11 1.316e+12 -3.981e+11 5.474e+12 -2.543e+12 1.247e+13 -6.480e+12 2.225e+13 -1.218e+13 3.473e+13 -1.961e+13 4.979e+13 -2.869e+13 6.729e+13 -3.935e+13 8.711e+13 -5.151e+13 1.090e+14 -6.504e+13 1.329e+14 -7.984e+13 1.585e+14 -9.580e+13 1.856e+14 -1.127e+14 2.140e+14 -1.305e+14 2.434e+14 -1.491e+14 2.735e+14 -1.681e+14 3.042e+14 -1.876e+14 3.352e+14 -2.073e+14 3.662e+14 -2.270e+14 3.969e+14 -2.467e+14 4.272e+14 -2.660e+14 4.566e+14 -2.850e+14 4.851e+14 -3.033e+14 5.124e+14 -3.209e+14 5.381e+14 -3.376e+14 5.623e+14 -3.534e+14 5.846e+14 -3.680e+14 6.049e+14 -3.813e+14 6.230e+14 -3.933e+14 6.389e+14 -4.039e+14 6.523e+14 -4.130e+14 6.633e+14 -4.205e+14 6.717e+14 -4.264e+14 6.776e+14 -4.307e+14 6.809e+14 -4.333e+14 6.815e+14 -4.343e+14 6.796e+14 -4.336e+14 6.753e+14 -4.313e+14 6.684e+14 -4.275e+14 6.593e+14 -4.221e+14 6.479e+14 -4.154e+14 6.345e+14 -4.073e+14 6.192e+14 -3.979e+14 6.020e+14 -3.874e+14 5.832e+14 -3.757e+14 5.629e+14 -3.631e+14 5.413e+14 -3.496e+14 5.186e+14 -3.353e+14 4.950e+14 -3.203e+14 4.706e+14 -3.048e+14 4.456e+14 -2.889e+14 4.203e+14 -2.728e+14 3.948e+14 -2.564e+14 3.692e+14 -2.400e+14 3.438e+14 -2.236e+14 3.187e+14 -2.074e+14 2.940e+14 -1.914e+14 2.699e+14 -1.758e+14 2.465e+14 -1.606e+14 2.239e+14 -1.458e+14 2.022e+14 -1.317e+14 1.815e+14 -1.182e+14 1.618e+14 -1.053e+14 1.433e+14 -9.320e+13 1.259e+14 -8.183e+13 1.097e+14 -7.123e+13 9.473e+13 -6.143e+13 8.097e+13 -5.242e+13 6.843e+13 -4.422e+13 5.710e+13 -3.682e+13 4.695e+13 -3.019e+13 3.795e+13 -2.432e+13 3.007e+13 -1.920e+13 2.325e+13 -1.477e+13 1.745e+13 -1.102e+13 1.262e+13 -7.904e+12 8.676e+12 -5.376e+12 5.568e+12 -3.396e+12 3.227e+12 -1.921e+12 1.582e+12 -9.011e+11 5.639e+11 -2.919e+11 1.005e+11 -3.516e+10 -1.296e+11 1.220e+11 -5.794e+11 4.673e+11 -1.383e+12 1.043e+12 -2.479e+12 1.808e+12 -3.808e+12 2.721e+12 -5.310e+12 3.746e+12 -6.936e+12 4.848e+12 -8.636e+12 5.996e+12 -1.036e+13 7.160e+12 -1.208e+13 8.316e+12 -1.375e+13 9.438e+12 -1.534e+13 1.051e+13 -1.682e+13 1.151e+13 -1.818e+13 1.242e+13 -1.939e+13 1.324e+13 -2.044e+13 1.396e+13 -2.133e+13 1.456e+13 -2.204e+13 1.505e+13 -2.257e+13 1.542e+13 -2.292e+13 1.567e+13 -2.311e+13 1.580e+13 -2.312e+13 1.582e+13 -2.298e+13 1.573e+13 -2.269e+13 1.555e+13 -2.226e+13 1.526e+13 -2.171e+13 1.489e+13 -2.105e+13 1.445e+13 -2.028e+13 1.393e+13 -1.944e+13 1.336e+13 -1.853e+13 1.274e+13 -1.757e+13 1.207e+13 -1.656e+13 1.138e+13 -1.554e+13 1.067e+13 -1.449e+13 9.947e+12 -1.345e+13 9.220e+12 -1.241e+13 8.499e+12 -1.139e+13 7.789e+12 -1.040e+13 7.097e+12 -9.442e+12 6.429e+12 -8.523e+12 5.790e+12 -7.649e+12 5.183e+12 -6.825e+12 4.611e+12 -6.053e+12 4.076e+12 -5.336e+12 3.580e+12 -4.675e+12 3.123e+12 -4.069e+12 2.705e+12 -3.518e+12 2.327e+12 -3.020e+12 1.987e+12 -2.574e+12 1.683e+12 -2.178e+12 1.414e+12 -1.828e+12 1.178e+12 -1.522e+12 9.732e+11 -1.256e+12 7.963e+11 -1.027e+12 6.452e+11 -8.312e+11 5.172e+11 -6.660e+11 4.100e+11 -5.278e+11 3.212e+11 -4.133e+11 2.484e+11 -3.195e+11 1.894e+11 -2.437e+11 1.422e+11 -1.830e+11 1.050e+11 -1.352e+11 7.610e+10 -9.808e+10 5.402e+10 -6.973e+10 3.745e+10 -4.847e+10 2.527e+10 -3.286e+10 1.653e+10 -2.164e+10 1.043e+10 -1.379e+10 6.290e+09 -8.455e+09 3.595e+09 -4.954e+09 1.914e+09 -2.750e+09 9.270e+08 -1.430e+09 3.895e+08 -6.856e+08 1.263e+08 -2.975e+08 1.736e+07 -1.145e+08 -1.544e+07 -3.843e+07 -1.811e+07 -1.086e+07 -1.314e+07 -1.849e+06 -7.720e+06 4.362e+05 -3.052e+06 4.793e+05 -2.998e+05 1.931e+05 3.223e+06 -1.094e+06 1.153e+07 -3.593e+06 2.439e+07 -5.374e+06 3.822e+07 -3.725e+06 4.835e+07 3.304e+06 5.110e+07 1.643e+07 4.639e+07 4.041e+07 3.801e+07 9.657e+07 2.342e+07 2.282e+08 -2.098e+07 4.974e+08 -1.416e+08 9.851e+08 -4.033e+08 1.795e+09 -8.899e+08 3.056e+09 -1.707e+09 4.921e+09 -2.983e+09 7.567e+09 -4.865e+09 1.120e+10 -7.525e+09 1.603e+10 -1.115e+10 2.228e+10 -1.594e+10 3.022e+10 -2.211e+10 4.009e+10 -2.988e+10 5.211e+10 -3.944e+10 6.655e+10 -5.102e+10 8.360e+10 -6.480e+10 1.035e+11 -8.092e+10 1.263e+11 -9.955e+10 1.522e+11 -1.208e+11 1.813e+11 -1.446e+11 2.136e+11 -1.711e+11 2.491e+11 -2.002e+11 2.876e+11 -2.318e+11 3.290e+11 -2.658e+11 3.731e+11 -3.019e+11 4.196e+11 -3.399e+11 4.681e+11 -3.795e+11 5.184e+11 -4.203e+11 5.697e+11 -4.618e+11 6.218e+11 -5.038e+11 6.740e+11 -5.458e+11 7.258e+11 -5.871e+11 7.765e+11 -6.275e+11 8.256e+11 -6.663e+11 8.723e+11 -7.031e+11 9.162e+11 -7.375e+11 9.565e+11 -7.689e+11 9.926e+11 -7.969e+11 1.024e+12 -8.213e+11 1.051e+12 -8.415e+11 1.071e+12 -8.574e+11 1.086e+12 -8.686e+11 1.095e+12 -8.750e+11 1.098e+12 -8.765e+11 1.094e+12 -8.730e+11 1.084e+12 -8.644e+11 1.067e+12 -8.509e+11 1.044e+12 -8.326e+11 1.015e+12 -8.096e+11 9.812e+11 -7.822e+11 9.417e+11 -7.507e+11 8.976e+11 -7.155e+11 8.494e+11 -6.770e+11 7.977e+11 -6.356e+11 7.431e+11 -5.917e+11 6.863e+11 -5.461e+11 6.281e+11 -4.992e+11 5.691e+11 -4.515e+11 5.102e+11 -4.038e+11 4.519e+11 -3.565e+11 3.949e+11 -3.102e+11 3.399e+11 -2.655e+11 2.875e+11 -2.230e+11 2.383e+11 -1.830e+11 1.929e+11 -1.463e+11 1.516e+11 -1.131e+11 1.147e+11 -8.365e+10 8.278e+10 -5.845e+10 5.591e+10 -3.763e+10 3.426e+10 -2.133e+10 1.799e+10 -9.667e+09 7.117e+09 -2.609e+09 1.649e+09 2.211e+08 -5.738e+08 2.690e+09 -5.575e+09 8.959e+09 -1.512e+10 1.936e+10 -2.916e+10 3.353e+10 -4.737e+10 5.112e+10 -6.939e+10 7.177e+10 -9.478e+10 9.503e+10 -1.231e+11 1.205e+11 -1.538e+11 1.477e+11 -1.864e+11 1.761e+11 -2.204e+11 2.053e+11 -2.553e+11 2.350e+11 -2.905e+11 2.645e+11 -3.255e+11 2.934e+11 -3.599e+11 3.215e+11 -3.930e+11 3.483e+11 -4.245e+11 3.735e+11 -4.539e+11 3.967e+11 -4.809e+11 4.178e+11 -5.051e+11 4.365e+11 -5.263e+11 4.526e+11 -5.441e+11 4.659e+11 -5.585e+11 4.765e+11 -5.693e+11 4.842e+11 -5.764e+11 4.890e+11 -5.798e+11 4.909e+11 -5.796e+11 4.901e+11 -5.758e+11 4.865e+11 -5.687e+11 4.803e+11 -5.583e+11 4.717e+11 -5.450e+11 4.607e+11 -5.289e+11 4.477e+11 -5.105e+11 4.328e+11 -4.899e+11 4.162e+11 -4.675e+11 3.982e+11 -4.437e+11 3.789e+11 -4.187e+11 3.587e+11 -3.929e+11 3.379e+11 -3.666e+11 3.166e+11 -3.401e+11 2.950e+11 -3.138e+11 2.734e+11 -2.878e+11 2.520e+11 -2.623e+11 2.309e+11 -2.377e+11 2.103e+11 -2.141e+11 1.905e+11 -1.916e+11 1.714e+11 -1.704e+11 1.534e+11 -1.505e+11 1.363e+11 -1.320e+11 1.203e+11 -1.150e+11 1.055e+11 -9.938e+10 9.189e+10 -8.519e+10 7.942e+10 -7.243e+10 6.812e+10 -6.103e+10 5.797e+10 -5.092e+10 4.892e+10 -4.205e+10 4.092e+10 -3.435e+10 3.392e+10 -2.771e+10 2.785e+10 0.005 -48.907 -47.914 -46.921 -45.928 -44.936 -43.943 -42.950 -42.040 -41.223 -40.493 -39.842 -39.267 -38.761 -38.323 -37.949 -37.638 -37.387 -37.195 -37.061 -36.986 -36.968 -37.009 -37.108 -37.269 -37.491 -37.777 -38.130 -38.554 -39.054 -39.634 -40.302 -41.066 -41.938 -42.933 -44.069 -45.374 -46.885 -48.659 -50.788 -53.434 -56.937 -62.224 -74.223 -69.897 -62.982 -59.238 -57.049 -55.566 -54.448 -53.488 -52.546 -51.528 -50.402 -49.182 -47.912 -46.638 -45.398 -44.219 -43.114 -42.091 -41.153 -40.298 -39.523 -38.825 -38.203 -37.653 -37.174 -36.762 -36.415 -36.133 -35.912 -35.752 -35.652 -35.611 -35.628 -35.704 -35.837 -36.027 -36.275 -36.579 -36.939 -37.356 -37.826 -38.350 -38.925 -39.549 -40.222 -40.942 -41.713 -42.541 -43.439 -44.436 -45.573 -46.919 -48.590 -50.749 -53.489 -55.829 -55.057 -51.375 -47.795 -44.874 -42.462 -40.416 -38.642 -37.079 -35.687 -34.438 -33.311 -32.292 -31.369 -30.533 -29.778 -29.094 -28.478 -27.927 -27.441 -27.017 -26.654 -26.350 -26.106 -25.920 -25.794 -25.727 -25.722 -25.779 -25.903 -26.094 -26.355 -26.682 -27.088 -27.580 -28.166 -28.855 -29.658 -30.590 -31.668 -32.915 -34.359 -36.038 -37.998 -40.302 -43.049 -46.380 -50.565 -56.260 -60.366 -56.633 -49.861 -44.749 -40.624 -37.137 -34.121 -31.467 -29.104 -26.977 -25.047 -23.284 -21.658 -20.146 -18.742 -17.435 -16.217 -15.079 -14.014 -13.010 -12.053 -11.153 -10.307 -9.512 -8.765 -8.058 -7.380 -6.740 -6.141 -5.580 -5.055 -4.555 -4.077 -3.633 -3.222 -2.843 -2.486 -2.148 -1.838 -1.560 -1.311 -1.078 -0.862 -0.675 -0.517 -0.386 -0.261 -0.159 -0.086 -0.042 -0.013 0.000 -0.014 -0.057 -0.130 -0.199 -0.298 -0.427 -0.583 -0.756 -0.947 -1.168 -1.420 -1.698 -1.988 -2.307 -2.660 -3.044 -3.451 -3.876 -4.337 -4.835 -5.369 -5.928 -6.515 -7.145 -7.819 -8.540 -9.298 -10.099 -10.954 -11.868 -12.845 -13.889 -14.991 -16.171 -17.442 -18.817 -20.307 -21.931 -23.695 -25.637 -27.806 -30.256 -33.055 -36.292 -40.021 -44.000 -47.160 -48.401 -48.927 -50.635 -55.833 -60.063 -51.288 -44.567 -40.373 -37.305 -34.897 -32.932 -31.293 -29.905 -28.718 -27.700 -26.822 -26.060 -25.404 -24.846 -24.376 -23.988 -23.675 -23.433 -23.257 -23.144 -23.091 -23.097 -23.159 -23.267 -23.429 -23.645 -23.916 -24.240 -24.617 -25.048 -25.533 -26.072 -26.667 -27.318 -28.026 -28.791 -29.614 -30.494 -31.427 -32.414 -33.454 -34.545 -35.684 -36.867 -38.093 -39.367 -40.701 -42.117 -43.651 -45.342 -47.184 -48.962 -49.949 -49.334 -47.439 -45.178 -43.052 -41.177 -39.542 -38.109 -36.849 -35.738 -34.755 -33.886 -33.117 -32.438 -31.842 -31.320 -30.869 -30.483 -30.160 -29.895 -29.688 -29.535 -29.435 -29.387 -29.390 -29.444 -29.547 -29.700 -29.904 -30.158 -30.464 -30.822 -31.235 -31.704 -32.232 -32.822 -33.477 -34.201 -34.999 -35.881 -36.854 -37.930 -39.124 -40.455 -41.951 -43.647 -45.599 -47.894 -50.676 -54.227 -58.955 -63.836 -62.364 -58.552 -56.025 -54.409 -53.358 -52.671 -52.212 -51.869 -51.541 -51.138 -50.596 -49.894 -49.052 -48.119 -47.150 -46.190 -45.269 -44.406 -43.612 -42.890 -42.242 -41.666 -41.159 -40.720 -40.345 -40.032 -39.779 -39.584 -39.444 -39.360 -39.329 -39.351 -39.426 -39.555 -39.737 -39.974 -40.268 -40.620 -41.035 -41.516 -42.068 -42.684 -43.300 -43.915 -44.531 -45.146 -45.762 0 1 1.0 1 EN VV 17.14 22.7 0.05 -3.541e+10 -7.852e+10 -3.854e+10 -9.154e+10 -4.166e+10 -1.060e+11 -4.473e+10 -1.219e+11 -4.770e+10 -1.392e+11 -5.050e+10 -1.581e+11 -5.308e+10 -1.784e+11 -5.538e+10 -2.001e+11 -5.734e+10 -2.231e+11 -5.888e+10 -2.474e+11 -5.997e+10 -2.728e+11 -6.054e+10 -2.991e+11 -6.054e+10 -3.262e+11 -5.994e+10 -3.540e+11 -5.870e+10 -3.820e+11 -5.677e+10 -4.102e+11 -5.417e+10 -4.383e+11 -5.088e+10 -4.659e+11 -4.692e+10 -4.927e+11 -4.229e+10 -5.186e+11 -3.704e+10 -5.432e+11 -3.119e+10 -5.662e+11 -2.480e+10 -5.873e+11 -1.794e+10 -6.062e+11 -1.067e+10 -6.227e+11 -3.076e+09 -6.364e+11 4.752e+09 -6.471e+11 1.273e+10 -6.547e+11 2.076e+10 -6.589e+11 2.874e+10 -6.596e+11 3.657e+10 -6.566e+11 4.415e+10 -6.499e+11 5.138e+10 -6.395e+11 5.816e+10 -6.254e+11 6.441e+10 -6.075e+11 7.002e+10 -5.862e+11 7.491e+10 -5.614e+11 7.901e+10 -5.334e+11 8.225e+10 -5.026e+11 8.457e+10 -4.692e+11 8.594e+10 -4.336e+11 8.632e+10 -3.963e+11 8.568e+10 -3.577e+11 8.404e+10 -3.184e+11 8.141e+10 -2.790e+11 7.783e+10 -2.400e+11 7.335e+10 -2.020e+11 6.806e+10 -1.657e+11 6.208e+10 -1.318e+11 5.556e+10 -1.008e+11 4.868e+10 -7.330e+10 4.175e+10 -4.985e+10 3.515e+10 -3.076e+10 2.949e+10 -1.603e+10 2.561e+10 -4.978e+09 2.433e+10 4.311e+09 2.583e+10 1.481e+10 2.933e+10 2.929e+10 3.374e+10 4.945e+10 3.824e+10 7.601e+10 4.228e+10 1.091e+11 4.551e+10 1.488e+11 4.769e+10 1.948e+11 4.864e+10 2.468e+11 4.825e+10 3.042e+11 4.643e+10 3.667e+11 4.315e+10 4.335e+11 3.840e+10 5.039e+11 3.219e+10 5.773e+11 2.459e+10 6.527e+11 1.570e+10 7.292e+11 5.614e+09 8.061e+11 -5.507e+09 8.824e+11 -1.752e+10 9.571e+11 -3.027e+10 1.030e+12 -4.355e+10 1.099e+12 -5.717e+10 1.164e+12 -7.097e+10 1.225e+12 -8.472e+10 1.280e+12 -9.824e+10 1.329e+12 -1.114e+11 1.371e+12 -1.239e+11 1.407e+12 -1.357e+11 1.434e+12 -1.466e+11 1.455e+12 -1.566e+11 1.467e+12 -1.654e+11 1.471e+12 -1.730e+11 1.468e+12 -1.793e+11 1.456e+12 -1.843e+11 1.437e+12 -1.880e+11 1.410e+12 -1.904e+11 1.377e+12 -1.914e+11 1.337e+12 -1.910e+11 1.291e+12 -1.895e+11 1.240e+12 -1.866e+11 1.184e+12 -1.827e+11 1.124e+12 -1.777e+11 1.061e+12 -1.717e+11 9.954e+11 -1.648e+11 9.280e+11 -1.572e+11 8.597e+11 -1.490e+11 7.912e+11 -1.402e+11 7.232e+11 -1.311e+11 6.564e+11 -1.217e+11 5.915e+11 -1.121e+11 5.288e+11 -1.024e+11 4.689e+11 -9.288e+10 4.124e+11 -8.349e+10 3.594e+11 -7.437e+10 3.103e+11 -6.562e+10 2.652e+11 -5.732e+10 2.243e+11 -4.953e+10 1.875e+11 -4.231e+10 1.549e+11 -3.570e+10 1.262e+11 -2.972e+10 1.014e+11 -2.439e+10 8.024e+10 -1.969e+10 6.239e+10 -1.563e+10 4.760e+10 -1.217e+10 3.555e+10 -9.268e+09 2.592e+10 -6.889e+09 1.839e+10 -4.980e+09 1.263e+10 -3.484e+09 8.360e+09 -2.345e+09 5.287e+09 -1.507e+09 3.162e+09 -9.131e+08 1.759e+09 -5.130e+08 8.880e+08 -2.600e+08 3.899e+08 -1.133e+08 1.367e+08 -3.906e+07 3.104e+07 -1.051e+07 -1.072e+06 -2.307e+06 -1.273e+07 3.748e+06 -2.327e+07 9.639e+06 -2.719e+07 1.233e+07 -2.261e+07 1.129e+07 -1.329e+07 8.253e+06 -4.473e+06 6.052e+06 1.889e+06 5.476e+06 8.798e+06 4.314e+06 1.803e+07 1.267e+06 2.537e+07 -2.459e+06 2.491e+07 -4.419e+06 1.505e+07 -4.640e+06 2.180e+06 -9.460e+06 -2.755e+07 -2.040e+07 -1.440e+08 -2.452e+07 -4.642e+08 -2.380e+05 -1.160e+09 8.899e+07 -2.485e+09 3.004e+08 -4.792e+09 7.176e+08 -8.560e+09 1.456e+09 -1.440e+10 2.671e+09 -2.312e+10 4.565e+09 -3.568e+10 7.389e+09 -5.326e+10 1.146e+10 -7.730e+10 1.715e+10 -1.095e+11 2.492e+10 -1.516e+11 3.529e+10 -2.060e+11 4.887e+10 -2.751e+11 6.633e+10 -3.616e+11 8.848e+10 -4.684e+11 1.162e+11 -5.987e+11 1.503e+11 -7.559e+11 1.919e+11 -9.437e+11 2.420e+11 -1.166e+12 3.017e+11 -1.425e+12 3.723e+11 -1.726e+12 4.549e+11 -2.073e+12 5.505e+11 -2.468e+12 6.606e+11 -2.914e+12 7.860e+11 -3.416e+12 9.279e+11 -3.974e+12 1.087e+12 -4.591e+12 1.264e+12 -5.268e+12 1.460e+12 -6.005e+12 1.675e+12 -6.803e+12 1.910e+12 -7.659e+12 2.163e+12 -8.572e+12 2.435e+12 -9.538e+12 2.724e+12 -1.055e+13 3.028e+12 -1.161e+13 3.347e+12 -1.270e+13 3.678e+12 -1.382e+13 4.019e+12 -1.495e+13 4.368e+12 -1.610e+13 4.720e+12 -1.724e+13 5.072e+12 -1.836e+13 5.420e+12 -1.945e+13 5.759e+12 -2.049e+13 6.084e+12 -2.148e+13 6.391e+12 -2.238e+13 6.674e+12 -2.319e+13 6.928e+12 -2.390e+13 7.146e+12 -2.447e+13 7.325e+12 -2.491e+13 7.457e+12 -2.519e+13 7.539e+12 -2.530e+13 7.566e+12 -2.523e+13 7.534e+12 -2.497e+13 7.440e+12 -2.452e+13 7.282e+12 -2.386e+13 7.059e+12 -2.301e+13 6.770e+12 -2.195e+13 6.418e+12 -2.071e+13 6.005e+12 -1.929e+13 5.536e+12 -1.771e+13 5.017e+12 -1.599e+13 4.458e+12 -1.416e+13 3.869e+12 -1.225e+13 3.262e+12 -1.031e+13 2.654e+12 -8.375e+12 2.060e+12 -6.502e+12 1.500e+12 -4.747e+12 9.954e+11 -3.173e+12 5.701e+11 -1.845e+12 2.493e+11 -8.359e+11 6.038e+10 -2.218e+11 -2.939e+10 5.739e+10 -1.938e+11 4.948e+11 -5.771e+11 1.546e+12 -1.214e+12 3.320e+12 -2.138e+12 5.900e+12 -3.380e+12 9.366e+12 -4.974e+12 1.380e+13 -6.951e+12 1.928e+13 -9.340e+12 2.588e+13 -1.217e+13 3.366e+13 -1.547e+13 4.269e+13 -1.927e+13 5.301e+13 -2.358e+13 6.469e+13 -2.843e+13 7.774e+13 -3.382e+13 9.218e+13 -3.978e+13 1.081e+14 -4.630e+13 1.253e+14 -5.340e+13 1.440e+14 -6.106e+13 1.641e+14 -6.929e+13 1.856e+14 -7.806e+13 2.083e+14 -8.736e+13 2.323e+14 -9.717e+13 2.575e+14 -1.075e+14 2.837e+14 -1.182e+14 3.109e+14 -1.293e+14 3.390e+14 -1.408e+14 3.678e+14 -1.526e+14 3.972e+14 -1.646e+14 4.271e+14 -1.768e+14 4.572e+14 -1.892e+14 4.874e+14 -2.016e+14 5.175e+14 -2.139e+14 5.473e+14 -2.261e+14 5.766e+14 -2.382e+14 6.053e+14 -2.499e+14 6.331e+14 -2.613e+14 6.597e+14 -2.723e+14 6.851e+14 -2.826e+14 7.089e+14 -2.924e+14 7.310e+14 -3.014e+14 7.512e+14 -3.096e+14 7.692e+14 -3.170e+14 7.851e+14 -3.234e+14 7.986e+14 -3.289e+14 8.097e+14 -3.332e+14 8.180e+14 -3.364e+14 8.235e+14 -3.384e+14 8.260e+14 -3.392e+14 8.255e+14 -3.386e+14 8.220e+14 -3.368e+14 8.154e+14 -3.336e+14 8.057e+14 -3.292e+14 7.930e+14 -3.234e+14 7.773e+14 -3.164e+14 7.587e+14 -3.082e+14 7.373e+14 -2.988e+14 7.134e+14 -2.882e+14 6.869e+14 -2.767e+14 6.582e+14 -2.642e+14 6.275e+14 -2.509e+14 5.949e+14 -2.368e+14 5.609e+14 -2.222e+14 5.255e+14 -2.070e+14 4.891e+14 -1.915e+14 4.521e+14 -1.757e+14 4.147e+14 -1.598e+14 3.772e+14 -1.440e+14 3.399e+14 -1.284e+14 3.032e+14 -1.131e+14 2.674e+14 -9.830e+13 2.328e+14 -8.409e+13 1.996e+14 -7.061e+13 1.682e+14 -5.800e+13 1.388e+14 -4.637e+13 1.117e+14 -3.583e+13 8.708e+13 -2.649e+13 6.522e+13 -1.844e+13 4.628e+13 -1.175e+13 3.040e+13 -6.517e+12 1.776e+13 -2.778e+12 8.447e+12 -5.796e+11 2.543e+12 8.467e+10 1.182e+11 1.004e+12 -1.185e+12 3.643e+12 -5.768e+12 7.908e+12 -1.379e+13 1.378e+13 -2.519e+13 2.122e+13 -3.989e+13 3.019e+13 -5.772e+13 4.061e+13 -7.855e+13 5.243e+13 -1.022e+14 6.554e+13 -1.285e+14 7.986e+13 -1.571e+14 9.529e+13 -1.879e+14 1.117e+14 -2.205e+14 1.289e+14 -2.547e+14 1.469e+14 -2.902e+14 1.654e+14 -3.266e+14 1.844e+14 -3.637e+14 2.036e+14 -4.012e+14 2.229e+14 -4.386e+14 2.422e+14 -4.758e+14 2.614e+14 -5.124e+14 2.801e+14 -5.481e+14 2.984e+14 -5.825e+14 3.160e+14 -6.156e+14 3.328e+14 -6.468e+14 3.487e+14 -6.762e+14 3.636e+14 -7.033e+14 3.773e+14 -7.281e+14 3.898e+14 -7.503e+14 4.009e+14 -7.698e+14 4.106e+14 -7.864e+14 4.188e+14 -8.002e+14 4.254e+14 -8.109e+14 4.305e+14 -8.186e+14 4.340e+14 -8.233e+14 4.358e+14 -8.249e+14 4.361e+14 -8.236e+14 4.347e+14 -8.192e+14 4.318e+14 -8.120e+14 4.274e+14 -8.021e+14 4.215e+14 -7.895e+14 4.143e+14 -7.745e+14 4.058e+14 -7.571e+14 3.960e+14 -7.376e+14 3.851e+14 -7.160e+14 3.732e+14 -6.927e+14 3.603e+14 -6.677e+14 3.466e+14 -6.412e+14 3.322e+14 -6.136e+14 3.173e+14 -5.849e+14 3.018e+14 -5.555e+14 2.859e+14 -5.255e+14 2.699e+14 -4.951e+14 2.536e+14 -4.645e+14 2.374e+14 -4.340e+14 2.212e+14 -4.037e+14 2.051e+14 -3.737e+14 1.894e+14 -3.444e+14 1.740e+14 -3.157e+14 1.589e+14 -2.879e+14 1.444e+14 -2.612e+14 1.305e+14 -2.355e+14 1.172e+14 -2.110e+14 1.045e+14 -1.878e+14 9.254e+13 -1.659e+14 8.131e+13 -1.454e+14 7.084e+13 -1.264e+14 6.115e+13 -1.089e+14 5.224e+13 -9.278e+13 4.411e+13 -7.817e+13 3.676e+13 -6.500e+13 3.018e+13 -5.324e+13 2.435e+13 -4.287e+13 1.923e+13 -3.381e+13 1.482e+13 -2.601e+13 1.107e+13 -1.941e+13 7.945e+12 -1.393e+13 5.409e+12 -9.496e+12 3.421e+12 -6.026e+12 1.936e+12 -3.434e+12 9.085e+11 -1.638e+12 2.947e+11 -5.526e+11 3.671e+10 -8.311e+10 -1.239e+11 1.776e+11 -4.775e+11 7.266e+11 -1.067e+12 1.664e+12 -1.850e+12 2.917e+12 -2.786e+12 4.415e+12 -3.839e+12 6.098e+12 -4.973e+12 7.905e+12 -6.155e+12 9.781e+12 -7.357e+12 1.168e+13 -8.550e+12 1.356e+13 -9.710e+12 1.537e+13 -1.082e+13 1.710e+13 -1.185e+13 1.870e+13 -1.280e+13 2.016e+13 -1.365e+13 2.146e+13 -1.439e+13 2.258e+13 -1.501e+13 2.352e+13 -1.552e+13 2.426e+13 -1.590e+13 2.481e+13 -1.616e+13 2.517e+13 -1.630e+13 2.534e+13 -1.632e+13 2.533e+13 -1.623e+13 2.515e+13 -1.603e+13 2.480e+13 -1.574e+13 2.430e+13 -1.536e+13 2.366e+13 -1.490e+13 2.291e+13 -1.437e+13 2.205e+13 -1.378e+13 2.110e+13 -1.314e+13 2.007e+13 -1.247e+13 1.899e+13 -1.176e+13 1.786e+13 -1.103e+13 1.671e+13 -1.029e+13 1.555e+13 -9.554e+12 1.438e+13 -8.819e+12 1.323e+13 -8.096e+12 1.210e+13 -7.391e+12 1.100e+13 -6.708e+12 9.946e+12 -6.054e+12 8.939e+12 -5.432e+12 7.986e+12 -4.845e+12 7.090e+12 -4.296e+12 6.255e+12 -3.786e+12 5.483e+12 -3.316e+12 4.775e+12 -2.885e+12 4.129e+12 -2.493e+12 3.546e+12 -2.140e+12 3.023e+12 -1.824e+12 2.558e+12 -1.542e+12 2.147e+12 -1.294e+12 1.787e+12 -1.077e+12 1.475e+12 -8.889e+11 1.206e+12 -7.267e+11 9.768e+11 -5.884e+11 7.830e+11 -4.716e+11 6.208e+11 -3.738e+11 4.864e+11 -2.929e+11 3.763e+11 -2.266e+11 2.872e+11 -1.728e+11 2.159e+11 -1.299e+11 1.596e+11 -9.607e+10 1.159e+11 -6.976e+10 8.244e+10 -4.966e+10 5.731e+10 -3.458e+10 3.882e+10 -2.348e+10 2.551e+10 -1.549e+10 1.618e+10 -9.898e+09 9.844e+09 -6.088e+09 5.687e+09 -3.583e+09 3.082e+09 -2.003e+09 1.536e+09 -1.052e+09 6.818e+08 -5.152e+08 2.529e+08 -2.345e+08 6.500e+07 -1.015e+08 -2.856e+06 -4.470e+07 -2.180e+07 -2.077e+07 -2.459e+07 -9.297e+06 -2.059e+07 -3.498e+06 -1.262e+07 -9.775e+05 -4.654e+06 -2.058e+05 -4.798e+05 -8.773e+04 3.476e+06 5.111e+05 1.114e+07 2.824e+06 1.997e+07 7.854e+06 2.529e+07 1.644e+07 2.453e+07 3.277e+07 1.778e+07 7.268e+07 -1.475e+06 1.673e+08 -6.099e+07 3.622e+08 -2.150e+08 7.187e+08 -5.436e+08 1.318e+09 -1.155e+09 2.263e+09 -2.189e+09 3.679e+09 -3.820e+09 5.714e+09 -6.253e+09 8.539e+09 -9.727e+09 1.234e+10 -1.451e+10 1.733e+10 -2.088e+10 2.372e+10 -2.916e+10 3.173e+10 -3.967e+10 4.159e+10 -5.270e+10 5.354e+10 -6.858e+10 6.777e+10 -8.760e+10 8.447e+10 -1.100e+11 1.038e+11 -1.360e+11 1.260e+11 -1.659e+11 1.510e+11 -1.996e+11 1.790e+11 -2.373e+11 2.100e+11 -2.789e+11 2.438e+11 -3.244e+11 2.805e+11 -3.736e+11 3.200e+11 -4.262e+11 3.619e+11 -4.820e+11 4.060e+11 -5.405e+11 4.522e+11 -6.014e+11 4.998e+11 -6.640e+11 5.487e+11 -7.279e+11 5.983e+11 -7.924e+11 6.482e+11 -8.567e+11 6.979e+11 -9.204e+11 7.469e+11 -9.827e+11 7.945e+11 -1.043e+12 8.404e+11 -1.100e+12 8.838e+11 -1.154e+12 9.244e+11 -1.204e+12 9.616e+11 -1.249e+12 9.949e+11 -1.289e+12 1.024e+12 -1.322e+12 1.048e+12 -1.350e+12 1.067e+12 -1.371e+12 1.081e+12 -1.385e+12 1.090e+12 -1.391e+12 1.092e+12 -1.390e+12 1.089e+12 -1.382e+12 1.080e+12 -1.366e+12 1.065e+12 -1.342e+12 1.044e+12 -1.312e+12 1.018e+12 -1.274e+12 9.866e+11 -1.230e+12 9.503e+11 -1.180e+12 9.095e+11 -1.124e+12 8.646e+11 -1.064e+12 8.162e+11 -9.989e+11 7.648e+11 -9.308e+11 7.110e+11 -8.601e+11 6.554e+11 -7.876e+11 5.987e+11 -7.141e+11 5.414e+11 -6.406e+11 4.843e+11 -5.679e+11 4.281e+11 -4.969e+11 3.732e+11 -4.283e+11 3.204e+11 -3.630e+11 2.703e+11 -3.017e+11 2.233e+11 -2.449e+11 1.800e+11 -1.933e+11 1.407e+11 -1.473e+11 1.059e+11 -1.072e+11 7.576e+10 -7.344e+10 5.061e+10 -4.609e+10 3.051e+10 -2.519e+10 1.562e+10 -1.074e+10 5.953e+09 -2.527e+09 1.584e+09 6.844e+08 -7.920e+08 5.046e+09 -6.143e+09 1.433e+10 -1.577e+10 2.871e+10 -2.953e+10 4.766e+10 -4.706e+10 7.063e+10 -6.799e+10 9.709e+10 -9.181e+10 1.264e+11 -1.181e+11 1.579e+11 -1.462e+11 1.912e+11 -1.758e+11 2.255e+11 -2.062e+11 2.602e+11 -2.370e+11 2.949e+11 -2.677e+11 3.290e+11 -2.977e+11 3.619e+11 -3.266e+11 3.933e+11 -3.540e+11 4.228e+11 -3.795e+11 4.498e+11 -4.027e+11 4.742e+11 -4.234e+11 4.957e+11 -4.413e+11 5.141e+11 -4.563e+11 5.292e+11 -4.682e+11 5.409e+11 -4.770e+11 5.491e+11 -4.825e+11 5.539e+11 -4.849e+11 5.553e+11 -4.842e+11 5.533e+11 -4.805e+11 5.481e+11 -4.740e+11 5.399e+11 -4.648e+11 5.287e+11 -4.532e+11 5.149e+11 -4.394e+11 4.987e+11 -4.236e+11 4.804e+11 -4.061e+11 4.602e+11 -3.873e+11 4.384e+11 -3.673e+11 4.154e+11 -3.463e+11 3.914e+11 -3.248e+11 3.668e+11 -3.029e+11 3.417e+11 -2.810e+11 3.166e+11 -2.591e+11 2.915e+11 -2.375e+11 2.669e+11 -2.165e+11 2.428e+11 -1.961e+11 2.196e+11 -1.766e+11 1.973e+11 -1.580e+11 1.761e+11 -1.404e+11 1.561e+11 -1.238e+11 1.375e+11 -1.085e+11 1.202e+11 -9.427e+10 1.043e+11 -8.126e+10 8.984e+10 -6.944e+10 7.675e+10 -5.879e+10 6.502e+10 -4.927e+10 5.461e+10 -4.086e+10 4.545e+10 -3.348e+10 3.746e+10 0.005 -48.664 -47.647 -46.631 -45.615 -44.599 -43.582 -42.566 -41.632 -40.791 -40.035 -39.359 -38.756 -38.222 -37.754 -37.350 -37.005 -36.720 -36.491 -36.319 -36.202 -36.139 -36.132 -36.180 -36.284 -36.445 -36.664 -36.943 -37.284 -37.690 -38.165 -38.713 -39.339 -40.049 -40.852 -41.756 -42.774 -43.921 -45.217 -46.690 -48.376 -50.325 -52.611 -55.335 -58.587 -62.102 -64.024 -62.849 -60.627 -58.659 -57.033 -55.586 -54.179 -52.744 -51.274 -49.797 -48.349 -46.960 -45.652 -44.434 -43.312 -42.284 -41.349 -40.501 -39.735 -39.051 -38.444 -37.911 -37.449 -37.055 -36.726 -36.462 -36.260 -36.118 -36.037 -36.015 -36.050 -36.143 -36.293 -36.499 -36.760 -37.075 -37.442 -37.860 -38.326 -38.835 -39.385 -39.970 -40.586 -41.227 -41.890 -42.573 -43.275 -43.997 -44.727 -45.447 -46.092 -46.538 -46.602 -46.133 -45.130 -43.752 -42.197 -40.615 -39.084 -37.640 -36.296 -35.052 -33.904 -32.849 -31.878 -30.989 -30.175 -29.433 -28.755 -28.139 -27.585 -27.091 -26.657 -26.280 -25.960 -25.697 -25.490 -25.339 -25.246 -25.212 -25.237 -25.325 -25.476 -25.694 -25.973 -26.325 -26.757 -27.276 -27.887 -28.602 -29.431 -30.388 -31.491 -32.759 -34.218 -35.896 -37.824 -40.040 -42.569 -45.401 -48.503 -51.978 -56.068 -56.464 -51.281 -45.360 -40.755 -37.035 -33.904 -31.194 -28.804 -26.668 -24.739 -22.974 -21.345 -19.841 -18.448 -17.153 -15.947 -14.822 -13.764 -12.758 -11.813 -10.926 -10.092 -9.309 -8.570 -7.861 -7.193 -6.567 -5.981 -5.432 -4.910 -4.409 -3.944 -3.512 -3.114 -2.738 -2.382 -2.055 -1.759 -1.494 -1.244 -1.013 -0.810 -0.636 -0.489 -0.348 -0.229 -0.138 -0.077 -0.032 -0.002 0.000 -0.027 -0.083 -0.141 -0.228 -0.344 -0.489 -0.647 -0.820 -1.024 -1.259 -1.519 -1.793 -2.097 -2.433 -2.801 -3.190 -3.596 -4.036 -4.514 -5.026 -5.563 -6.128 -6.734 -7.384 -8.079 -8.809 -9.580 -10.402 -11.282 -12.222 -13.227 -14.287 -15.422 -16.644 -17.963 -19.391 -20.946 -22.631 -24.484 -26.547 -28.872 -31.521 -34.572 -38.067 -41.739 -44.481 -45.114 -44.674 -44.593 -45.349 -46.996 -48.621 -47.792 -44.209 -40.522 -37.531 -35.125 -33.154 -31.510 -30.120 -28.936 -27.921 -27.044 -26.289 -25.644 -25.099 -24.643 -24.269 -23.970 -23.743 -23.582 -23.486 -23.450 -23.472 -23.543 -23.669 -23.849 -24.086 -24.376 -24.719 -25.117 -25.567 -26.072 -26.632 -27.246 -27.915 -28.639 -29.417 -30.249 -31.129 -32.055 -33.026 -34.037 -35.079 -36.145 -37.226 -38.312 -39.397 -40.475 -41.534 -42.551 -43.467 -44.165 -44.478 -44.264 -43.523 -42.405 -41.103 -39.765 -38.473 -37.260 -36.143 -35.126 -34.204 -33.372 -32.627 -31.960 -31.366 -30.842 -30.382 -29.984 -29.645 -29.362 -29.132 -28.955 -28.829 -28.752 -28.723 -28.742 -28.808 -28.921 -29.080 -29.287 -29.541 -29.844 -30.195 -30.597 -31.051 -31.558 -32.122 -32.742 -33.424 -34.171 -34.990 -35.886 -36.867 -37.941 -39.121 -40.420 -41.859 -43.463 -45.267 -47.329 -49.729 -52.591 -56.112 -60.395 -64.105 -63.606 -60.818 -58.651 -57.163 -56.088 -55.219 -54.400 -53.530 -52.562 -51.502 -50.386 -49.262 -48.168 -47.131 -46.168 -45.285 -44.486 -43.769 -43.131 -42.570 -42.083 -41.665 -41.314 -41.028 -40.804 -40.641 -40.536 -40.489 -40.500 -40.568 -40.693 -40.878 -41.123 -41.431 -41.804 -42.248 -42.769 -43.373 -44.052 -44.732 -45.411 -46.091 -46.770 -47.449 0 1 1.0 1 EN VH 17.14 22.7 0.05 3.339e+10 -4.583e+10 4.005e+10 -5.402e+10 4.762e+10 -6.315e+10 5.614e+10 -7.326e+10 6.566e+10 -8.437e+10 7.621e+10 -9.646e+10 8.780e+10 -1.095e+11 1.005e+11 -1.235e+11 1.141e+11 -1.384e+11 1.288e+11 -1.542e+11 1.445e+11 -1.707e+11 1.611e+11 -1.878e+11 1.786e+11 -2.055e+11 1.967e+11 -2.236e+11 2.155e+11 -2.420e+11 2.348e+11 -2.604e+11 2.545e+11 -2.788e+11 2.742e+11 -2.969e+11 2.940e+11 -3.146e+11 3.135e+11 -3.316e+11 3.326e+11 -3.477e+11 3.511e+11 -3.627e+11 3.687e+11 -3.766e+11 3.852e+11 -3.889e+11 4.005e+11 -3.996e+11 4.142e+11 -4.084e+11 4.262e+11 -4.152e+11 4.363e+11 -4.199e+11 4.443e+11 -4.223e+11 4.500e+11 -4.222e+11 4.533e+11 -4.197e+11 4.541e+11 -4.146e+11 4.522e+11 -4.070e+11 4.477e+11 -3.969e+11 4.404e+11 -3.842e+11 4.305e+11 -3.691e+11 4.179e+11 -3.517e+11 4.027e+11 -3.322e+11 3.851e+11 -3.108e+11 3.652e+11 -2.877e+11 3.433e+11 -2.632e+11 3.195e+11 -2.376e+11 2.943e+11 -2.114e+11 2.679e+11 -1.848e+11 2.406e+11 -1.583e+11 2.130e+11 -1.324e+11 1.854e+11 -1.075e+11 1.583e+11 -8.399e+10 1.321e+11 -6.239e+10 1.075e+11 -4.309e+10 8.474e+10 -2.645e+10 6.453e+10 -1.277e+10 4.734e+10 -2.100e+09 3.365e+10 5.876e+09 2.368e+10 1.218e+10 1.692e+10 1.882e+10 1.165e+10 2.827e+10 5.545e+09 4.234e+10 -3.296e+09 6.176e+10 -1.599e+10 8.672e+10 -3.306e+10 1.171e+11 -5.477e+10 1.527e+11 -8.121e+10 1.934e+11 -1.123e+11 2.389e+11 -1.478e+11 2.887e+11 -1.875e+11 3.425e+11 -2.310e+11 3.997e+11 -2.780e+11 4.598e+11 -3.280e+11 5.224e+11 -3.803e+11 5.866e+11 -4.344e+11 6.518e+11 -4.898e+11 7.174e+11 -5.457e+11 7.826e+11 -6.015e+11 8.467e+11 -6.565e+11 9.091e+11 -7.101e+11 9.690e+11 -7.616e+11 1.026e+12 -8.104e+11 1.079e+12 -8.559e+11 1.127e+12 -8.976e+11 1.171e+12 -9.351e+11 1.209e+12 -9.677e+11 1.242e+12 -9.953e+11 1.268e+12 -1.018e+12 1.288e+12 -1.034e+12 1.301e+12 -1.045e+12 1.308e+12 -1.050e+12 1.308e+12 -1.050e+12 1.301e+12 -1.043e+12 1.287e+12 -1.032e+12 1.267e+12 -1.014e+12 1.242e+12 -9.923e+11 1.210e+12 -9.654e+11 1.173e+12 -9.343e+11 1.131e+12 -8.994e+11 1.085e+12 -8.611e+11 1.035e+12 -8.199e+11 9.826e+11 -7.763e+11 9.273e+11 -7.310e+11 8.701e+11 -6.843e+11 8.116e+11 -6.369e+11 7.527e+11 -5.893e+11 6.938e+11 -5.420e+11 6.355e+11 -4.953e+11 5.783e+11 -4.496e+11 5.226e+11 -4.054e+11 4.690e+11 -3.629e+11 4.179e+11 -3.224e+11 3.694e+11 -2.843e+11 3.240e+11 -2.486e+11 2.818e+11 -2.156e+11 2.430e+11 -1.853e+11 2.075e+11 -1.577e+11 1.755e+11 -1.329e+11 1.469e+11 -1.108e+11 1.216e+11 -9.128e+10 9.947e+10 -7.429e+10 8.032e+10 -5.966e+10 6.397e+10 -4.723e+10 5.020e+10 -3.680e+10 3.876e+10 -2.819e+10 2.940e+10 -2.120e+10 2.187e+10 -1.561e+10 1.592e+10 -1.123e+10 1.132e+10 -7.874e+09 7.832e+09 -5.362e+09 5.258e+09 -3.532e+09 3.411e+09 -2.241e+09 2.128e+09 -1.361e+09 1.268e+09 -7.848e+08 7.162e+08 -4.264e+08 3.801e+08 -2.156e+08 1.870e+08 -1.001e+08 8.396e+07 -4.200e+07 3.368e+07 -1.568e+07 1.168e+07 -5.209e+06 3.297e+06 -1.658e+06 6.101e+05 -7.433e+05 -2.100e+05 -7.796e+05 -1.001e+06 -1.200e+06 -3.131e+06 -1.553e+06 -9.080e+06 -3.249e+05 -2.476e+07 7.000e+06 -6.297e+07 3.116e+07 -1.486e+08 9.380e+07 -3.256e+08 2.336e+08 -6.657e+08 5.144e+08 -1.280e+09 1.034e+09 -2.331e+09 1.935e+09 -4.046e+09 3.419e+09 -6.737e+09 5.753e+09 -1.081e+10 9.289e+09 -1.679e+10 1.448e+10 -2.534e+10 2.188e+10 -3.726e+10 3.217e+10 -5.351e+10 4.618e+10 -7.528e+10 6.486e+10 -1.039e+11 8.931e+10 -1.409e+11 1.208e+11 -1.880e+11 1.608e+11 -2.473e+11 2.108e+11 -3.207e+11 2.727e+11 -4.108e+11 3.482e+11 -5.200e+11 4.392e+11 -6.509e+11 5.480e+11 -8.064e+11 6.767e+11 -9.894e+11 8.273e+11 -1.203e+12 1.002e+12 -1.449e+12 1.204e+12 -1.731e+12 1.433e+12 -2.052e+12 1.694e+12 -2.415e+12 1.986e+12 -2.821e+12 2.312e+12 -3.272e+12 2.673e+12 -3.770e+12 3.070e+12 -4.316e+12 3.502e+12 -4.910e+12 3.971e+12 -5.552e+12 4.475e+12 -6.242e+12 5.014e+12 -6.977e+12 5.585e+12 -7.755e+12 6.185e+12 -8.573e+12 6.811e+12 -9.426e+12 7.460e+12 -1.031e+13 8.126e+12 -1.121e+13 8.804e+12 -1.214e+13 9.488e+12 -1.307e+13 1.017e+13 -1.399e+13 1.084e+13 -1.491e+13 1.150e+13 -1.580e+13 1.213e+13 -1.666e+13 1.273e+13 -1.747e+13 1.328e+13 -1.822e+13 1.377e+13 -1.889e+13 1.420e+13 -1.948e+13 1.456e+13 -1.997e+13 1.483e+13 -2.034e+13 1.501e+13 -2.059e+13 1.508e+13 -2.069e+13 1.505e+13 -2.066e+13 1.490e+13 -2.046e+13 1.463e+13 -2.011e+13 1.424e+13 -1.958e+13 1.373e+13 -1.890e+13 1.310e+13 -1.805e+13 1.236e+13 -1.704e+13 1.151e+13 -1.588e+13 1.056e+13 -1.459e+13 9.523e+12 -1.319e+13 8.424e+12 -1.169e+13 7.280e+12 -1.012e+13 6.116e+12 -8.526e+12 4.958e+12 -6.935e+12 3.838e+12 -5.391e+12 2.791e+12 -3.942e+12 1.854e+12 -2.640e+12 1.067e+12 -1.539e+12 4.737e+11 -7.006e+11 1.200e+11 -1.877e+11 -4.360e+10 4.476e+10 -3.202e+11 4.033e+11 -9.720e+11 1.270e+12 -2.059e+12 2.738e+12 -3.631e+12 4.878e+12 -5.737e+12 7.758e+12 -8.425e+12 1.145e+13 -1.174e+13 1.602e+13 -1.573e+13 2.153e+13 -2.043e+13 2.805e+13 -2.588e+13 3.562e+13 -3.210e+13 4.428e+13 -3.914e+13 5.410e+13 -4.700e+13 6.509e+13 -5.569e+13 7.728e+13 -6.525e+13 9.070e+13 -7.565e+13 1.053e+14 -8.690e+13 1.212e+14 -9.898e+13 1.383e+14 -1.119e+14 1.565e+14 -1.255e+14 1.759e+14 -1.399e+14 1.964e+14 -1.550e+14 2.179e+14 -1.708e+14 2.403e+14 -1.871e+14 2.637e+14 -2.039e+14 2.878e+14 -2.212e+14 3.125e+14 -2.387e+14 3.378e+14 -2.565e+14 3.635e+14 -2.745e+14 3.894e+14 -2.925e+14 4.154e+14 -3.104e+14 4.414e+14 -3.281e+14 4.672e+14 -3.454e+14 4.925e+14 -3.624e+14 5.173e+14 -3.787e+14 5.412e+14 -3.944e+14 5.643e+14 -4.092e+14 5.862e+14 -4.231e+14 6.068e+14 -4.359e+14 6.259e+14 -4.475e+14 6.434e+14 -4.578e+14 6.590e+14 -4.668e+14 6.727e+14 -4.743e+14 6.844e+14 -4.803e+14 6.940e+14 -4.847e+14 7.012e+14 -4.874e+14 7.059e+14 -4.883e+14 7.081e+14 -4.874e+14 7.078e+14 -4.847e+14 7.048e+14 -4.802e+14 6.992e+14 -4.739e+14 6.910e+14 -4.658e+14 6.802e+14 -4.560e+14 6.668e+14 -4.445e+14 6.510e+14 -4.315e+14 6.328e+14 -4.169e+14 6.123e+14 -4.010e+14 5.898e+14 -3.837e+14 5.653e+14 -3.653e+14 5.390e+14 -3.460e+14 5.112e+14 -3.257e+14 4.821e+14 -3.048e+14 4.518e+14 -2.834e+14 4.207e+14 -2.616e+14 3.890e+14 -2.397e+14 3.569e+14 -2.178e+14 3.248e+14 -1.961e+14 2.928e+14 -1.747e+14 2.613e+14 -1.539e+14 2.305e+14 -1.339e+14 2.007e+14 -1.147e+14 1.722e+14 -9.660e+13 1.451e+14 -7.970e+13 1.197e+14 -6.413e+13 9.636e+13 -5.001e+13 7.511e+13 -3.749e+13 5.623e+13 -2.665e+13 3.987e+13 -1.756e+13 2.614e+13 -1.032e+13 1.523e+13 -4.966e+12 7.192e+12 -1.537e+12 2.112e+12 -6.315e+10 4.950e+10 5.604e+11 -1.041e+12 3.035e+12 -5.067e+12 7.448e+12 -1.208e+13 1.376e+13 -2.204e+13 2.191e+13 -3.486e+13 3.182e+13 -5.041e+13 4.339e+13 -6.857e+13 5.653e+13 -8.920e+13 7.109e+13 -1.121e+14 8.696e+13 -1.370e+14 1.040e+14 -1.638e+14 1.221e+14 -1.922e+14 1.409e+14 -2.220e+14 1.605e+14 -2.529e+14 1.806e+14 -2.847e+14 2.011e+14 -3.170e+14 2.217e+14 -3.496e+14 2.422e+14 -3.823e+14 2.626e+14 -4.147e+14 2.827e+14 -4.466e+14 3.022e+14 -4.777e+14 3.210e+14 -5.078e+14 3.390e+14 -5.367e+14 3.560e+14 -5.640e+14 3.718e+14 -5.897e+14 3.865e+14 -6.135e+14 3.998e+14 -6.353e+14 4.117e+14 -6.549e+14 4.221e+14 -6.721e+14 4.308e+14 -6.869e+14 4.380e+14 -6.992e+14 4.435e+14 -7.089e+14 4.473e+14 -7.160e+14 4.494e+14 -7.204e+14 4.498e+14 -7.222e+14 4.486e+14 -7.214e+14 4.457e+14 -7.180e+14 4.413e+14 -7.121e+14 4.353e+14 -7.037e+14 4.280e+14 -6.931e+14 4.193e+14 -6.803e+14 4.093e+14 -6.655e+14 3.982e+14 -6.488e+14 3.859e+14 -6.302e+14 3.728e+14 -6.100e+14 3.587e+14 -5.883e+14 3.440e+14 -5.653e+14 3.286e+14 -5.413e+14 3.127e+14 -5.162e+14 2.964e+14 -4.905e+14 2.799e+14 -4.642e+14 2.633e+14 -4.375e+14 2.466e+14 -4.107e+14 2.299e+14 -3.838e+14 2.135e+14 -3.571e+14 1.973e+14 -3.307e+14 1.815e+14 -3.048e+14 1.661e+14 -2.795e+14 1.512e+14 -2.550e+14 1.369e+14 -2.313e+14 1.232e+14 -2.086e+14 1.102e+14 -1.869e+14 9.791e+13 -1.663e+14 8.637e+13 -1.470e+14 7.560e+13 -1.289e+14 6.561e+13 -1.120e+14 5.641e+13 -9.650e+13 4.800e+13 -8.225e+13 4.037e+13 -6.930e+13 3.352e+13 -5.763e+13 2.740e+13 -4.721e+13 2.202e+13 -3.802e+13 1.733e+13 -2.999e+13 1.330e+13 -2.307e+13 9.893e+12 -1.722e+13 7.073e+12 -1.236e+13 4.796e+12 -8.429e+12 3.022e+12 -5.351e+12 1.703e+12 -3.050e+12 7.959e+11 -1.455e+12 2.571e+11 -4.909e+11 3.181e+10 -7.377e+10 -1.074e+11 1.582e+11 -4.123e+11 6.472e+11 -9.172e+11 1.483e+12 -1.584e+12 2.600e+12 -2.377e+12 3.937e+12 -3.262e+12 5.440e+12 -4.209e+12 7.055e+12 -5.189e+12 8.732e+12 -6.177e+12 1.043e+13 -7.150e+12 1.211e+13 -8.088e+12 1.374e+13 -8.973e+12 1.529e+13 -9.791e+12 1.673e+13 -1.053e+13 1.804e+13 -1.118e+13 1.921e+13 -1.174e+13 2.022e+13 -1.219e+13 2.106e+13 -1.255e+13 2.173e+13 -1.280e+13 2.223e+13 -1.294e+13 2.256e+13 -1.300e+13 2.271e+13 -1.295e+13 2.270e+13 -1.282e+13 2.254e+13 -1.260e+13 2.223e+13 -1.231e+13 2.179e+13 -1.196e+13 2.122e+13 -1.154e+13 2.055e+13 -1.107e+13 1.978e+13 -1.056e+13 1.893e+13 -1.002e+13 1.802e+13 -9.454e+12 1.705e+13 -8.870e+12 1.605e+13 -8.276e+12 1.502e+13 -7.680e+12 1.398e+13 -7.089e+12 1.295e+13 -6.507e+12 1.192e+13 -5.940e+12 1.091e+13 -5.391e+12 9.938e+12 -4.865e+12 8.998e+12 -4.364e+12 8.101e+12 -3.892e+12 7.251e+12 -3.451e+12 6.452e+12 -3.041e+12 5.707e+12 -2.663e+12 5.018e+12 -2.318e+12 4.384e+12 -2.004e+12 3.806e+12 -1.721e+12 3.282e+12 -1.467e+12 2.812e+12 -1.242e+12 2.392e+12 -1.044e+12 2.020e+12 -8.698e+11 1.693e+12 -7.189e+11 1.409e+12 -5.890e+11 1.162e+12 -4.780e+11 9.509e+11 -3.842e+11 7.712e+11 -3.056e+11 6.197e+11 -2.403e+11 4.931e+11 -1.867e+11 3.883e+11 -1.432e+11 3.025e+11 -1.083e+11 2.329e+11 -8.069e+10 1.772e+11 -5.910e+10 1.331e+11 -4.249e+10 9.852e+10 -2.993e+10 7.188e+10 -2.061e+10 5.162e+10 -1.382e+10 3.645e+10 -8.991e+09 2.527e+10 -5.650e+09 1.720e+10 -3.403e+09 1.147e+10 -1.945e+09 7.486e+09 -1.038e+09 4.783e+09 -5.007e+08 2.988e+09 -2.031e+08 1.825e+09 -5.271e+07 1.090e+09 1.276e+07 6.352e+08 3.290e+07 3.595e+08 3.157e+07 1.951e+08 2.221e+07 9.814e+07 1.193e+07 4.231e+07 4.266e+06 1.266e+07 7.336e+05 1.104e+06 -1.369e+06 -1.040e+07 -5.258e+06 -4.218e+07 -9.572e+06 -1.097e+08 -8.872e+06 -2.338e+08 6.453e+06 -4.473e+08 5.214e+07 -7.985e+08 1.521e+08 -1.354e+09 3.405e+08 -2.203e+09 6.641e+08 -3.461e+09 1.183e+09 -5.271e+09 1.971e+09 -7.802e+09 3.120e+09 -1.126e+10 4.735e+09 -1.588e+10 6.933e+09 -2.190e+10 9.848e+09 -2.963e+10 1.362e+10 -3.936e+10 1.840e+10 -5.140e+10 2.435e+10 -6.609e+10 3.161e+10 -8.373e+10 4.033e+10 -1.046e+11 5.066e+10 -1.291e+11 6.274e+10 -1.574e+11 7.665e+10 -1.897e+11 9.252e+10 -2.262e+11 1.104e+11 -2.671e+11 1.303e+11 -3.123e+11 1.523e+11 -3.619e+11 1.763e+11 -4.159e+11 2.022e+11 -4.739e+11 2.300e+11 -5.358e+11 2.596e+11 -6.013e+11 2.906e+11 -6.700e+11 3.230e+11 -7.414e+11 3.565e+11 -8.150e+11 3.908e+11 -8.901e+11 4.255e+11 -9.661e+11 4.605e+11 -1.042e+12 4.954e+11 -1.118e+12 5.298e+11 -1.193e+12 5.633e+11 -1.265e+12 5.955e+11 -1.334e+12 6.261e+11 -1.400e+12 6.547e+11 -1.461e+12 6.809e+11 -1.518e+12 7.045e+11 -1.568e+12 7.251e+11 -1.611e+12 7.424e+11 -1.648e+12 7.562e+11 -1.676e+12 7.664e+11 -1.697e+12 7.727e+11 -1.709e+12 7.751e+11 -1.712e+12 7.734e+11 -1.707e+12 7.677e+11 -1.692e+12 7.580e+11 -1.669e+12 7.444e+11 -1.637e+12 7.271e+11 -1.596e+12 7.061e+11 -1.547e+12 6.817e+11 -1.491e+12 6.543e+11 -1.428e+12 6.241e+11 -1.359e+12 5.913e+11 -1.284e+12 5.565e+11 -1.204e+12 5.200e+11 -1.121e+12 4.821e+11 -1.035e+12 4.434e+11 -9.471e+11 4.042e+11 -8.585e+11 3.649e+11 -7.699e+11 3.261e+11 -6.827e+11 2.880e+11 -5.976e+11 2.510e+11 -5.155e+11 2.156e+11 -4.375e+11 1.821e+11 -3.643e+11 1.508e+11 -2.965e+11 1.220e+11 -2.348e+11 9.598e+10 -1.798e+11 7.280e+10 -1.318e+11 5.273e+10 -9.111e+10 3.587e+10 -5.801e+10 2.224e+10 -3.249e+10 1.193e+10 -1.458e+10 4.971e+09 -4.069e+09 1.701e+09 2.062e+08 6.784e+08 5.017e+09 -1.736e+09 1.534e+10 -6.682e+09 3.173e+10 -1.413e+10 5.363e+10 -2.385e+10 8.046e+10 -3.561e+10 1.116e+11 -4.910e+10 1.463e+11 -6.402e+10 1.840e+11 -8.007e+10 2.239e+11 -9.690e+10 2.652e+11 -1.142e+11 3.074e+11 -1.317e+11 3.497e+11 -1.490e+11 3.915e+11 -1.659e+11 4.322e+11 -1.821e+11 4.712e+11 -1.974e+11 5.080e+11 -2.115e+11 5.421e+11 -2.242e+11 5.731e+11 -2.354e+11 6.008e+11 -2.450e+11 6.246e+11 -2.529e+11 6.446e+11 -2.590e+11 6.605e+11 -2.633e+11 6.722e+11 -2.657e+11 6.798e+11 -2.664e+11 6.831e+11 -2.654e+11 6.824e+11 -2.628e+11 6.777e+11 -2.586e+11 6.692e+11 -2.530e+11 6.572e+11 -2.461e+11 6.419e+11 -2.382e+11 6.237e+11 -2.292e+11 6.027e+11 -2.194e+11 5.795e+11 -2.089e+11 5.542e+11 -1.980e+11 5.273e+11 -1.866e+11 4.992e+11 -1.749e+11 4.702e+11 -1.632e+11 4.405e+11 -1.515e+11 4.106e+11 -1.399e+11 3.807e+11 -1.286e+11 3.512e+11 -1.176e+11 3.222e+11 -1.070e+11 2.940e+11 -9.682e+10 2.668e+11 -8.718e+10 2.408e+11 -7.808e+10 2.161e+11 -6.955e+10 1.928e+11 -6.161e+10 1.711e+11 -5.426e+10 1.508e+11 -4.750e+10 1.322e+11 -4.133e+10 1.151e+11 -3.572e+10 9.958e+10 -3.067e+10 8.557e+10 -2.616e+10 7.303e+10 -2.214e+10 6.187e+10 0.005 -51.585 -50.657 -49.730 -48.802 -47.874 -46.946 -46.019 -45.164 -44.394 -43.702 -43.084 -42.537 -42.055 -41.638 -41.283 -40.988 -40.752 -40.574 -40.454 -40.391 -40.386 -40.439 -40.551 -40.723 -40.957 -41.255 -41.620 -42.055 -42.564 -43.152 -43.824 -44.586 -45.448 -46.419 -47.511 -48.737 -50.116 -51.669 -53.421 -55.404 -57.657 -60.224 -63.154 -66.452 -69.741 -71.067 -68.904 -65.391 -61.994 -58.973 -56.307 -53.952 -51.857 -49.985 -48.306 -46.796 -45.433 -44.202 -43.089 -42.083 -41.173 -40.353 -39.613 -38.949 -38.357 -37.833 -37.375 -36.979 -36.643 -36.365 -36.143 -35.977 -35.864 -35.804 -35.797 -35.841 -35.936 -36.081 -36.276 -36.519 -36.811 -37.150 -37.535 -37.965 -38.437 -38.951 -39.504 -40.095 -40.724 -41.390 -42.093 -42.836 -43.617 -44.423 -45.232 -45.975 -46.524 -46.692 -46.324 -45.418 -44.129 -42.659 -41.152 -39.690 -38.308 -37.020 -35.826 -34.724 -33.709 -32.776 -31.920 -31.137 -30.423 -29.772 -29.181 -28.650 -28.178 -27.764 -27.408 -27.108 -26.865 -26.678 -26.549 -26.477 -26.465 -26.514 -26.628 -26.809 -27.059 -27.374 -27.768 -28.248 -28.824 -29.503 -30.301 -31.232 -32.318 -33.587 -35.076 -36.841 -38.959 -41.552 -44.851 -49.320 -56.315 -67.921 -68.350 -63.431 -60.587 -53.854 -47.128 -42.077 -38.096 -34.803 -31.989 -29.530 -27.345 -25.380 -23.590 -21.941 -20.421 -19.015 -17.709 -16.494 -15.359 -14.291 -13.276 -12.323 -11.426 -10.584 -9.791 -9.042 -8.322 -7.643 -7.005 -6.407 -5.845 -5.309 -4.796 -4.316 -3.870 -3.458 -3.066 -2.693 -2.350 -2.037 -1.753 -1.485 -1.234 -1.011 -0.817 -0.649 -0.487 -0.347 -0.235 -0.152 -0.083 -0.028 -0.000 0.000 -0.028 -0.051 -0.103 -0.183 -0.289 -0.410 -0.546 -0.711 -0.905 -1.122 -1.349 -1.602 -1.886 -2.198 -2.529 -2.874 -3.251 -3.660 -4.100 -4.560 -5.041 -5.558 -6.112 -6.703 -7.321 -7.971 -8.663 -9.398 -10.180 -11.010 -11.874 -12.790 -13.765 -14.804 -15.912 -17.095 -18.345 -19.680 -21.119 -22.675 -24.363 -26.203 -28.219 -30.435 -32.896 -35.660 -38.794 -42.375 -46.465 -50.953 -54.691 -55.042 -51.775 -47.854 -44.392 -41.458 -38.976 -36.866 -35.059 -33.504 -32.156 -30.980 -29.954 -29.063 -28.291 -27.625 -27.055 -26.572 -26.171 -25.845 -25.589 -25.399 -25.273 -25.199 -25.183 -25.224 -25.322 -25.475 -25.683 -25.945 -26.262 -26.634 -27.062 -27.547 -28.092 -28.697 -29.365 -30.100 -30.901 -31.774 -32.727 -33.767 -34.899 -36.134 -37.479 -38.945 -40.542 -42.275 -44.145 -46.131 -48.177 -50.170 -51.950 -53.396 -54.541 -55.600 -56.883 -58.746 -61.647 -65.506 -64.509 -59.485 -55.360 -52.296 -49.915 -47.988 -46.392 -45.052 -43.917 -42.952 -42.133 -41.441 -40.861 -40.383 -39.998 -39.700 -39.482 -39.341 -39.274 -39.277 -39.350 -39.490 -39.697 -39.971 -40.312 -40.721 -41.198 -41.746 -42.366 -43.058 -43.827 -44.675 -45.607 -46.626 -47.734 -48.935 -50.230 -51.619 -53.102 -54.678 -56.352 -58.144 -60.101 -62.333 -65.034 -68.323 -70.895 -69.152 -65.055 -61.558 -58.767 -56.478 -54.550 -52.894 -51.455 -50.194 -49.083 -48.102 -47.235 -46.472 -45.802 -45.217 -44.712 -44.280 -43.918 -43.623 -43.390 -43.219 -43.106 -43.051 -43.053 -43.110 -43.222 -43.389 -43.611 -43.889 -44.224 -44.617 -45.070 -45.585 -46.165 -46.814 -47.537 -48.340 -49.230 -50.198 -51.166 -52.134 -53.103 -54.071 -55.039 0 1 1.0 1 N1 HH 17.14 22.7 0.05 1.934e+10 1.092e+10 2.119e+10 2.312e+10 2.324e+10 4.261e+10 2.411e+10 7.261e+10 2.213e+10 1.165e+11 1.547e+10 1.776e+11 2.088e+09 2.599e+11 -2.033e+10 3.675e+11 -5.426e+10 5.046e+11 -1.025e+11 6.761e+11 -1.682e+11 8.872e+11 -2.545e+11 1.143e+12 -3.650e+11 1.449e+12 -5.036e+11 1.811e+12 -6.739e+11 2.235e+12 -8.811e+11 2.728e+12 -1.129e+12 3.297e+12 -1.421e+12 3.946e+12 -1.762e+12 4.681e+12 -2.157e+12 5.509e+12 -2.610e+12 6.435e+12 -3.123e+12 7.466e+12 -3.703e+12 8.607e+12 -4.352e+12 9.861e+12 -5.074e+12 1.123e+13 -5.873e+12 1.273e+13 -6.751e+12 1.436e+13 -7.712e+12 1.611e+13 -8.757e+12 1.800e+13 -9.889e+12 2.003e+13 -1.111e+13 2.219e+13 -1.242e+13 2.448e+13 -1.381e+13 2.692e+13 -1.530e+13 2.948e+13 -1.687e+13 3.219e+13 -1.853e+13 3.502e+13 -2.027e+13 3.799e+13 -2.209e+13 4.108e+13 -2.399e+13 4.428e+13 -2.597e+13 4.760e+13 -2.801e+13 5.103e+13 -3.012e+13 5.456e+13 -3.229e+13 5.818e+13 -3.450e+13 6.188e+13 -3.677e+13 6.566e+13 -3.907e+13 6.950e+13 -4.141e+13 7.340e+13 -4.376e+13 7.734e+13 -4.613e+13 8.131e+13 -4.851e+13 8.531e+13 -5.089e+13 8.932e+13 -5.325e+13 9.333e+13 -5.560e+13 9.733e+13 -5.792e+13 1.013e+14 -6.020e+13 1.052e+14 -6.243e+13 1.091e+14 -6.461e+13 1.130e+14 -6.673e+13 1.168e+14 -6.877e+13 1.205e+14 -7.074e+13 1.241e+14 -7.262e+13 1.276e+14 -7.442e+13 1.311e+14 -7.613e+13 1.344e+14 -7.772e+13 1.376e+14 -7.922e+13 1.407e+14 -8.060e+13 1.437e+14 -8.186e+13 1.466e+14 -8.301e+13 1.494e+14 -8.403e+13 1.520e+14 -8.493e+13 1.545e+14 -8.571e+13 1.568e+14 -8.637e+13 1.591e+14 -8.690e+13 1.612e+14 -8.732e+13 1.631e+14 -8.761e+13 1.650e+14 -8.779e+13 1.668e+14 -8.785e+13 1.684e+14 -8.781e+13 1.699e+14 -8.766e+13 1.714e+14 -8.741e+13 1.727e+14 -8.706e+13 1.740e+14 -8.663e+13 1.752e+14 -8.611e+13 1.763e+14 -8.551e+13 1.773e+14 -8.483e+13 1.783e+14 -8.410e+13 1.793e+14 -8.330e+13 1.802e+14 -8.244e+13 1.811e+14 -8.154e+13 1.820e+14 -8.060e+13 1.829e+14 -7.962e+13 1.838e+14 -7.862e+13 1.846e+14 -7.759e+13 1.855e+14 -7.654e+13 1.865e+14 -7.549e+13 1.874e+14 -7.443e+13 1.884e+14 -7.337e+13 1.895e+14 -7.231e+13 1.906e+14 -7.126e+13 1.918e+14 -7.023e+13 1.930e+14 -6.923e+13 1.944e+14 -6.827e+13 1.958e+14 -6.736e+13 1.973e+14 -6.647e+13 1.990e+14 -6.562e+13 2.007e+14 -6.481e+13 2.025e+14 -6.403e+13 2.044e+14 -6.330e+13 2.064e+14 -6.262e+13 2.085e+14 -6.198e+13 2.107e+14 -6.139e+13 2.130e+14 -6.086e+13 2.154e+14 -6.038e+13 2.179e+14 -5.996e+13 2.204e+14 -5.959e+13 2.231e+14 -5.928e+13 2.258e+14 -5.903e+13 2.286e+14 -5.885e+13 2.315e+14 -5.872e+13 2.344e+14 -5.865e+13 2.373e+14 -5.865e+13 2.403e+14 -5.871e+13 2.433e+14 -5.882e+13 2.464e+14 -5.900e+13 2.494e+14 -5.924e+13 2.524e+14 -5.954e+13 2.554e+14 -5.989e+13 2.584e+14 -6.030e+13 2.613e+14 -6.076e+13 2.641e+14 -6.127e+13 2.669e+14 -6.183e+13 2.695e+14 -6.244e+13 2.721e+14 -6.309e+13 2.745e+14 -6.378e+13 2.767e+14 -6.450e+13 2.788e+14 -6.525e+13 2.808e+14 -6.603e+13 2.825e+14 -6.683e+13 2.840e+14 -6.765e+13 2.853e+14 -6.848e+13 2.863e+14 -6.932e+13 2.871e+14 -7.017e+13 2.877e+14 -7.101e+13 2.881e+14 -7.184e+13 2.882e+14 -7.265e+13 2.879e+14 -7.345e+13 2.874e+14 -7.422e+13 2.865e+14 -7.495e+13 2.853e+14 -7.565e+13 2.838e+14 -7.630e+13 2.819e+14 -7.690e+13 2.797e+14 -7.744e+13 2.771e+14 -7.792e+13 2.742e+14 -7.834e+13 2.710e+14 -7.868e+13 2.674e+14 -7.894e+13 2.635e+14 -7.912e+13 2.592e+14 -7.921e+13 2.547e+14 -7.921e+13 2.498e+14 -7.911e+13 2.447e+14 -7.892e+13 2.393e+14 -7.863e+13 2.336e+14 -7.824e+13 2.277e+14 -7.775e+13 2.215e+14 -7.715e+13 2.152e+14 -7.645e+13 2.086e+14 -7.565e+13 2.019e+14 -7.475e+13 1.951e+14 -7.374e+13 1.881e+14 -7.264e+13 1.811e+14 -7.145e+13 1.739e+14 -7.016e+13 1.667e+14 -6.879e+13 1.595e+14 -6.734e+13 1.523e+14 -6.580e+13 1.452e+14 -6.420e+13 1.380e+14 -6.253e+13 1.309e+14 -6.080e+13 1.240e+14 -5.902e+13 1.171e+14 -5.719e+13 1.103e+14 -5.532e+13 1.037e+14 -5.341e+13 9.730e+13 -5.146e+13 9.103e+13 -4.950e+13 8.496e+13 -4.754e+13 7.909e+13 -4.556e+13 7.343e+13 -4.359e+13 6.798e+13 -4.163e+13 6.277e+13 -3.969e+13 5.779e+13 -3.777e+13 5.305e+13 -3.587e+13 4.856e+13 -3.401e+13 4.430e+13 -3.218e+13 4.029e+13 -3.040e+13 3.652e+13 -2.866e+13 3.298e+13 -2.698e+13 2.968e+13 -2.534e+13 2.662e+13 -2.377e+13 2.377e+13 -2.225e+13 2.115e+13 -2.079e+13 1.873e+13 -1.940e+13 1.651e+13 -1.807e+13 1.448e+13 -1.680e+13 1.264e+13 -1.560e+13 1.097e+13 -1.447e+13 9.461e+12 -1.340e+13 8.104e+12 -1.239e+13 6.888e+12 -1.144e+13 5.804e+12 -1.056e+13 4.841e+12 -9.732e+12 3.989e+12 -8.962e+12 3.238e+12 -8.247e+12 2.579e+12 -7.583e+12 2.004e+12 -6.968e+12 1.504e+12 -6.400e+12 1.072e+12 -5.874e+12 6.997e+11 -5.389e+12 3.812e+11 -4.941e+12 1.105e+11 -4.527e+12 -1.180e+11 -4.145e+12 -3.089e+11 -3.792e+12 -4.665e+11 -3.466e+12 -5.951e+11 -3.164e+12 -6.975e+11 -2.884e+12 -7.768e+11 -2.624e+12 -8.354e+11 -2.382e+12 -8.757e+11 -2.157e+12 -8.997e+11 -1.948e+12 -9.093e+11 -1.754e+12 -9.062e+11 -1.573e+12 -8.920e+11 -1.405e+12 -8.680e+11 -1.249e+12 -8.358e+11 -1.105e+12 -7.966e+11 -9.720e+11 -7.517e+11 -8.497e+11 -7.023e+11 -7.377e+11 -6.497e+11 -6.354e+11 -5.947e+11 -5.427e+11 -5.386e+11 -4.590e+11 -4.823e+11 -3.840e+11 -4.266e+11 -3.173e+11 -3.724e+11 -2.585e+11 -3.204e+11 -2.072e+11 -2.712e+11 -1.628e+11 -2.254e+11 -1.250e+11 -1.834e+11 -9.332e+10 -1.456e+11 -6.720e+10 -1.121e+11 -4.619e+10 -8.310e+10 -2.977e+10 -5.870e+10 -1.748e+10 -3.883e+10 -8.818e+09 -2.339e+10 -3.290e+09 -1.217e+10 -3.972e+08 -4.940e+09 6.653e+08 -1.334e+09 1.869e+09 4.961e+08 4.456e+09 3.479e+09 8.263e+09 8.714e+09 1.287e+10 1.601e+10 1.796e+10 2.497e+10 2.324e+10 3.516e+10 2.851e+10 4.618e+10 3.355e+10 5.766e+10 3.821e+10 6.920e+10 4.237e+10 8.051e+10 4.591e+10 9.125e+10 4.878e+10 1.012e+11 5.093e+10 1.101e+11 5.234e+10 1.178e+11 5.303e+10 1.241e+11 5.302e+10 1.291e+11 5.234e+10 1.325e+11 5.107e+10 1.345e+11 4.925e+10 1.350e+11 4.696e+10 1.341e+11 4.429e+10 1.319e+11 4.130e+10 1.285e+11 3.808e+10 1.240e+11 3.471e+10 1.186e+11 3.126e+10 1.123e+11 2.780e+10 1.054e+11 2.439e+10 9.806e+10 2.109e+10 9.036e+10 1.795e+10 8.249e+10 1.501e+10 7.458e+10 1.228e+10 6.676e+10 9.813e+09 5.915e+10 7.607e+09 5.185e+10 5.671e+09 4.493e+10 4.008e+09 3.848e+10 2.611e+09 3.253e+10 1.465e+09 2.713e+10 5.581e+08 2.231e+10 -1.325e+08 1.805e+10 -6.305e+08 1.435e+10 -9.601e+08 1.119e+10 -1.148e+09 8.551e+09 -1.222e+09 6.377e+09 -1.208e+09 4.633e+09 -1.129e+09 3.267e+09 -1.010e+09 2.224e+09 -9.016e+08 1.451e+09 -7.393e+08 9.097e+08 -5.990e+08 5.340e+08 -4.754e+08 2.865e+08 -3.703e+08 1.289e+08 -2.814e+08 3.228e+07 -2.045e+08 -2.295e+07 -1.363e+08 -4.864e+07 -7.656e+07 -5.219e+07 -2.959e+07 -4.094e+07 8.231e+05 -2.592e+07 2.912e+07 -1.855e+07 9.677e+07 -3.891e+06 2.324e+08 5.033e+07 4.553e+08 1.732e+08 7.829e+08 3.936e+08 1.233e+09 7.421e+08 1.821e+09 1.250e+09 2.561e+09 1.948e+09 3.464e+09 2.864e+09 4.541e+09 4.027e+09 5.795e+09 5.458e+09 7.229e+09 7.176e+09 8.844e+09 9.197e+09 1.063e+10 1.152e+10 1.259e+10 1.416e+10 1.470e+10 1.711e+10 1.694e+10 2.035e+10 1.931e+10 2.387e+10 2.179e+10 2.765e+10 2.433e+10 3.164e+10 2.694e+10 3.583e+10 2.957e+10 4.017e+10 3.219e+10 4.461e+10 3.479e+10 4.911e+10 3.733e+10 5.362e+10 3.979e+10 5.808e+10 4.213e+10 6.245e+10 4.434e+10 6.667e+10 4.639e+10 7.069e+10 4.826e+10 7.447e+10 4.993e+10 7.797e+10 5.139e+10 8.114e+10 5.262e+10 8.394e+10 5.360e+10 8.634e+10 5.432e+10 8.830e+10 5.478e+10 8.981e+10 5.498e+10 9.085e+10 5.491e+10 9.140e+10 5.459e+10 9.148e+10 5.401e+10 9.107e+10 5.319e+10 9.020e+10 5.214e+10 8.887e+10 5.087e+10 8.711e+10 4.941e+10 8.495e+10 4.776e+10 8.241e+10 4.596e+10 7.953e+10 4.402e+10 7.636e+10 4.196e+10 7.292e+10 3.981e+10 6.927e+10 3.759e+10 6.545e+10 3.533e+10 6.150e+10 3.305e+10 5.747e+10 3.076e+10 5.340e+10 2.849e+10 4.933e+10 2.626e+10 4.531e+10 2.409e+10 4.136e+10 2.199e+10 3.752e+10 1.997e+10 3.382e+10 1.804e+10 3.029e+10 1.622e+10 2.695e+10 1.452e+10 2.380e+10 1.292e+10 2.088e+10 1.145e+10 1.817e+10 1.010e+10 1.569e+10 8.866e+09 1.345e+10 7.750e+09 1.142e+10 6.746e+09 9.622e+09 5.852e+09 8.032e+09 5.060e+09 6.643e+09 4.364e+09 5.443e+09 3.759e+09 4.418e+09 3.236e+09 3.552e+09 2.789e+09 2.828e+09 2.410e+09 2.230e+09 2.093e+09 1.743e+09 1.831e+09 1.351e+09 1.618e+09 1.039e+09 1.449e+09 7.933e+08 1.318e+09 6.012e+08 1.221e+09 4.520e+08 1.152e+09 3.364e+08 1.108e+09 2.473e+08 1.084e+09 1.793e+08 1.078e+09 1.286e+08 1.087e+09 9.278e+07 1.110e+09 7.040e+07 1.144e+09 6.064e+07 1.189e+09 6.318e+07 1.245e+09 7.796e+07 1.311e+09 1.052e+08 1.388e+09 1.451e+08 1.476e+09 1.982e+08 1.575e+09 2.650e+08 1.684e+09 3.459e+08 1.805e+09 4.415e+08 1.936e+09 5.521e+08 2.076e+09 6.780e+08 2.225e+09 8.188e+08 2.382e+09 9.744e+08 2.543e+09 1.144e+09 2.708e+09 1.325e+09 2.874e+09 1.518e+09 3.039e+09 1.718e+09 3.198e+09 1.925e+09 3.351e+09 2.135e+09 3.493e+09 2.344e+09 3.622e+09 2.549e+09 3.735e+09 2.747e+09 3.830e+09 2.934e+09 3.904e+09 3.106e+09 3.956e+09 3.260e+09 3.983e+09 3.393e+09 3.986e+09 3.502e+09 3.962e+09 3.586e+09 3.912e+09 3.643e+09 3.837e+09 3.671e+09 3.737e+09 3.671e+09 3.613e+09 3.642e+09 3.467e+09 3.584e+09 3.302e+09 3.500e+09 3.120e+09 3.390e+09 2.923e+09 3.257e+09 2.715e+09 3.103e+09 2.500e+09 2.932e+09 2.279e+09 2.746e+09 2.058e+09 2.548e+09 1.838e+09 2.343e+09 1.622e+09 2.133e+09 1.414e+09 1.921e+09 1.217e+09 1.712e+09 1.031e+09 1.507e+09 8.590e+08 1.310e+09 7.025e+08 1.123e+09 5.623e+08 9.480e+08 4.389e+08 7.864e+08 3.324e+08 6.398e+08 2.426e+08 5.089e+08 1.689e+08 3.940e+08 1.103e+08 2.955e+08 6.560e+07 2.130e+08 3.330e+07 1.459e+08 1.175e+07 9.345e+07 -9.396e+05 5.462e+07 -6.934e+06 2.808e+07 -8.988e+06 1.206e+07 -1.075e+07 2.972e+06 -1.477e+07 -4.963e+06 -2.065e+07 -1.627e+07 -2.659e+07 -3.228e+07 -3.102e+07 -5.275e+07 -3.270e+07 -7.707e+07 -3.062e+07 -1.048e+08 -2.382e+07 -1.358e+08 -1.128e+07 -1.702e+08 8.171e+06 -2.083e+08 3.605e+07 -2.511e+08 7.427e+07 -2.994e+08 1.252e+08 -3.543e+08 1.919e+08 -4.171e+08 2.779e+08 -4.892e+08 3.871e+08 -5.717e+08 5.241e+08 -6.661e+08 6.936e+08 -7.736e+08 9.007e+08 -8.955e+08 1.151e+09 -1.033e+09 1.449e+09 -1.188e+09 1.801e+09 -1.362e+09 2.211e+09 -1.556e+09 2.685e+09 -1.773e+09 3.227e+09 -2.014e+09 3.842e+09 -2.281e+09 4.534e+09 -2.578e+09 5.305e+09 -2.906e+09 6.159e+09 -3.267e+09 7.097e+09 -3.666e+09 8.121e+09 -4.103e+09 9.233e+09 -4.583e+09 1.043e+10 -5.107e+09 1.171e+10 -5.678e+09 1.308e+10 -6.299e+09 1.453e+10 -6.971e+09 1.605e+10 -7.695e+09 1.765e+10 -8.474e+09 1.931e+10 -9.309e+09 2.103e+10 -1.020e+10 2.281e+10 -1.114e+10 2.464e+10 -1.214e+10 2.650e+10 -1.319e+10 2.838e+10 -1.429e+10 3.029e+10 -1.544e+10 3.221e+10 -1.662e+10 3.412e+10 -1.785e+10 3.603e+10 -1.910e+10 3.790e+10 -2.038e+10 3.973e+10 -2.167e+10 4.151e+10 -2.297e+10 4.322e+10 -2.426e+10 4.485e+10 -2.554e+10 4.640e+10 -2.679e+10 4.783e+10 -2.800e+10 4.915e+10 -2.916e+10 5.034e+10 -3.026e+10 5.139e+10 -3.127e+10 5.229e+10 -3.220e+10 5.303e+10 -3.302e+10 5.360e+10 -3.373e+10 5.399e+10 -3.430e+10 5.419e+10 -3.473e+10 5.421e+10 -3.501e+10 5.404e+10 -3.513e+10 5.366e+10 -3.507e+10 5.309e+10 -3.484e+10 5.233e+10 -3.443e+10 5.137e+10 -3.383e+10 5.022e+10 -3.304e+10 4.888e+10 -3.207e+10 4.737e+10 -3.092e+10 4.569e+10 -2.960e+10 4.385e+10 -2.811e+10 4.186e+10 -2.648e+10 3.975e+10 -2.471e+10 3.752e+10 -2.282e+10 3.519e+10 -2.083e+10 3.278e+10 -1.878e+10 3.031e+10 -1.667e+10 2.781e+10 -1.455e+10 2.529e+10 -1.244e+10 2.279e+10 -1.037e+10 2.033e+10 -8.374e+09 1.793e+10 -6.480e+09 1.564e+10 -4.718e+09 1.346e+10 -3.109e+09 1.145e+10 -1.674e+09 9.622e+09 -4.210e+08 8.015e+09 6.615e+08 6.655e+09 1.605e+09 5.551e+09 2.476e+09 4.684e+09 3.378e+09 3.999e+09 4.431e+09 3.401e+09 5.756e+09 2.783e+09 7.446e+09 2.040e+09 9.558e+09 1.089e+09 1.212e+10 -1.336e+08 1.515e+10 -1.672e+09 1.863e+10 -3.558e+09 2.256e+10 -5.814e+09 2.691e+10 -8.451e+09 3.166e+10 -1.148e+10 3.678e+10 -1.489e+10 4.223e+10 -1.869e+10 4.797e+10 -2.287e+10 5.396e+10 -2.741e+10 6.014e+10 -3.230e+10 6.647e+10 -3.751e+10 7.289e+10 -4.302e+10 7.934e+10 -4.881e+10 8.577e+10 -5.484e+10 9.211e+10 -6.108e+10 9.831e+10 -6.750e+10 1.043e+11 -7.405e+10 1.101e+11 -8.070e+10 1.155e+11 -8.741e+10 1.206e+11 -9.414e+10 1.252e+11 -1.008e+11 1.295e+11 -1.075e+11 1.332e+11 -1.140e+11 1.364e+11 -1.204e+11 1.390e+11 -1.266e+11 1.411e+11 -1.326e+11 1.426e+11 -1.383e+11 1.435e+11 -1.438e+11 1.437e+11 -1.489e+11 1.434e+11 -1.537e+11 1.424e+11 -1.581e+11 1.409e+11 -1.621e+11 1.387e+11 -1.657e+11 1.360e+11 -1.688e+11 1.328e+11 -1.716e+11 1.290e+11 -1.738e+11 1.247e+11 -1.756e+11 1.200e+11 -1.770e+11 1.149e+11 -1.779e+11 1.095e+11 -1.783e+11 1.037e+11 -1.782e+11 9.765e+10 -1.777e+11 9.138e+10 -1.768e+11 8.491e+10 -1.754e+11 7.832e+10 -1.736e+11 7.164e+10 -1.713e+11 6.491e+10 0.005 -54.245 -52.564 -50.882 -49.200 -47.564 -46.010 -44.531 -43.121 -41.774 -40.487 -39.255 -38.077 -36.950 -35.871 -34.838 -33.851 -32.906 -32.003 -31.140 -30.317 -29.531 -28.782 -28.068 -27.390 -26.745 -26.134 -25.555 -25.008 -24.493 -24.007 -23.552 -23.127 -22.730 -22.362 -22.022 -21.710 -21.426 -21.170 -20.941 -20.739 -20.564 -20.417 -20.296 -20.203 -20.137 -20.097 -20.085 -20.100 -20.143 -20.213 -20.311 -20.437 -20.592 -20.775 -20.988 -21.231 -21.504 -21.808 -22.143 -22.511 -22.912 -23.347 -23.817 -24.323 -24.867 -25.450 -26.072 -26.738 -27.447 -28.203 -29.008 -29.865 -30.777 -31.750 -32.788 -33.897 -35.084 -36.359 -37.733 -39.221 -40.841 -42.614 -44.566 -46.715 -49.041 -51.395 -53.327 -54.199 -53.882 -52.925 -51.882 -50.990 -50.302 -49.810 -49.496 -49.340 -49.323 -49.422 -49.594 -49.749 -49.727 -49.302 -48.300 -46.743 -44.823 -42.754 -40.676 -38.659 -36.730 -34.896 -33.153 -31.496 -29.920 -28.417 -26.982 -25.611 -24.298 -23.041 -21.835 -20.679 -19.569 -18.503 -17.480 -16.497 -15.553 -14.646 -13.774 -12.937 -12.133 -11.362 -10.621 -9.912 -9.232 -8.581 -7.958 -7.362 -6.794 -6.252 -5.736 -5.245 -4.780 -4.339 -3.923 -3.531 -3.163 -2.818 -2.497 -2.199 -1.925 -1.673 -1.445 -1.239 -1.057 -0.898 -0.762 -0.649 -0.560 -0.494 -0.453 -0.435 -0.442 -0.474 -0.532 -0.615 -0.725 -0.862 -1.027 -1.220 -1.443 -1.696 -1.982 -2.300 -2.653 -3.043 -3.470 -3.938 -4.448 -5.004 -5.608 -6.265 -6.979 -7.754 -8.597 -9.515 -10.516 -11.611 -12.813 -14.137 -15.605 -17.244 -19.090 -21.194 -23.629 -26.510 -30.024 -34.526 -40.802 -50.524 -51.321 -48.006 -44.680 -39.114 -33.949 -29.777 -26.381 -23.546 -21.127 -19.026 -17.176 -15.530 -14.053 -12.718 -11.506 -10.399 -9.387 -8.457 -7.602 -6.815 -6.090 -5.421 -4.804 -4.236 -3.714 -3.234 -2.794 -2.392 -2.027 -1.695 -1.397 -1.131 -0.895 -0.688 -0.510 -0.360 -0.236 -0.139 -0.068 -0.022 0.000 -0.003 -0.029 -0.080 -0.154 -0.250 -0.370 -0.513 -0.679 -0.867 -1.078 -1.311 -1.568 -1.847 -2.149 -2.474 -2.822 -3.193 -3.588 -4.007 -4.450 -4.918 -5.410 -5.928 -6.471 -7.041 -7.637 -8.261 -8.913 -9.594 -10.304 -11.045 -11.817 -12.622 -13.460 -14.333 -15.242 -16.190 -17.177 -18.205 -19.278 -20.398 -21.567 -22.790 -24.070 -25.413 -26.824 -28.312 -29.886 -31.559 -33.346 -35.271 -37.367 -39.681 -42.290 -45.328 -49.058 -54.144 -62.043 -68.431 -59.827 -55.932 -53.953 -52.892 -52.401 -52.329 -52.604 -53.192 -54.048 -55.035 -55.752 -55.535 -54.068 -51.821 -49.419 -47.151 -45.081 -43.202 -41.488 -39.913 -38.458 -37.106 -35.844 -34.662 -33.552 -32.508 -31.524 -30.595 -29.719 -28.893 -28.113 -27.377 -26.683 -26.031 -25.417 -24.841 -24.302 -23.798 -23.329 -22.893 -22.490 -22.118 -21.778 -21.469 -21.190 -20.940 -20.719 -20.527 -20.363 -20.228 -20.120 -20.039 -19.986 -19.960 -19.961 -19.988 -20.043 -20.124 -20.231 -20.366 -20.527 -20.716 -20.931 -21.174 -21.444 -21.742 -22.067 -22.421 -22.803 -23.215 -23.655 -24.125 -24.625 -25.156 -25.719 -26.313 -26.941 -27.602 -28.297 -29.028 -29.795 -30.598 -31.440 -32.320 -33.240 -34.201 -35.204 -36.249 -37.337 -38.469 -39.645 -40.865 -42.128 -43.433 -44.776 -46.156 -47.565 -48.996 -50.440 -51.883 -53.321 -54.759 -56.197 0 1 1.0 1 N1 HV 17.14 22.7 0.05 2.187e+10 -8.616e+09 3.292e+10 -1.786e+09 4.976e+10 9.787e+09 7.391e+10 2.940e+10 1.067e+11 6.060e+10 1.492e+11 1.071e+11 2.028e+11 1.731e+11 2.689e+11 2.631e+11 3.484e+11 3.816e+11 4.427e+11 5.341e+11 5.531e+11 7.263e+11 6.804e+11 9.636e+11 8.259e+11 1.252e+12 9.908e+11 1.599e+12 1.175e+12 2.010e+12 1.381e+12 2.494e+12 1.609e+12 3.057e+12 1.858e+12 3.704e+12 2.130e+12 4.443e+12 2.425e+12 5.282e+12 2.742e+12 6.225e+12 3.082e+12 7.280e+12 3.445e+12 8.454e+12 3.830e+12 9.751e+12 4.237e+12 1.118e+13 4.665e+12 1.274e+13 5.114e+12 1.444e+13 5.582e+12 1.628e+13 6.068e+12 1.827e+13 6.571e+12 2.040e+13 7.090e+12 2.269e+13 7.623e+12 2.513e+13 8.169e+12 2.772e+13 8.725e+12 3.045e+13 9.291e+12 3.335e+13 9.864e+12 3.638e+13 1.044e+13 3.956e+13 1.102e+13 4.288e+13 1.160e+13 4.633e+13 1.218e+13 4.991e+13 1.276e+13 5.360e+13 1.333e+13 5.741e+13 1.389e+13 6.131e+13 1.445e+13 6.531e+13 1.499e+13 6.939e+13 1.552e+13 7.353e+13 1.604e+13 7.773e+13 1.654e+13 8.198e+13 1.703e+13 8.624e+13 1.749e+13 9.053e+13 1.794e+13 9.482e+13 1.837e+13 9.909e+13 1.879e+13 1.033e+14 1.918e+13 1.075e+14 1.956e+13 1.117e+14 1.992e+13 1.158e+14 2.026e+13 1.198e+14 2.059e+13 1.237e+14 2.091e+13 1.275e+14 2.121e+13 1.312e+14 2.150e+13 1.348e+14 2.178e+13 1.383e+14 2.206e+13 1.416e+14 2.233e+13 1.448e+14 2.260e+13 1.479e+14 2.286e+13 1.508e+14 2.313e+13 1.535e+14 2.340e+13 1.561e+14 2.368e+13 1.586e+14 2.396e+13 1.609e+14 2.426e+13 1.630e+14 2.456e+13 1.650e+14 2.488e+13 1.669e+14 2.521e+13 1.686e+14 2.556e+13 1.701e+14 2.593e+13 1.716e+14 2.631e+13 1.729e+14 2.672e+13 1.740e+14 2.715e+13 1.751e+14 2.760e+13 1.761e+14 2.808e+13 1.769e+14 2.858e+13 1.777e+14 2.910e+13 1.784e+14 2.965e+13 1.790e+14 3.023e+13 1.796e+14 3.083e+13 1.801e+14 3.146e+13 1.805e+14 3.211e+13 1.810e+14 3.280e+13 1.813e+14 3.350e+13 1.817e+14 3.424e+13 1.821e+14 3.500e+13 1.824e+14 3.579e+13 1.828e+14 3.660e+13 1.832e+14 3.743e+13 1.836e+14 3.830e+13 1.840e+14 3.918e+13 1.845e+14 4.009e+13 1.851e+14 4.103e+13 1.857e+14 4.198e+13 1.863e+14 4.295e+13 1.871e+14 4.395e+13 1.879e+14 4.496e+13 1.889e+14 4.598e+13 1.899e+14 4.703e+13 1.911e+14 4.809e+13 1.923e+14 4.916e+13 1.937e+14 5.025e+13 1.952e+14 5.135e+13 1.967e+14 5.245e+13 1.984e+14 5.356e+13 2.002e+14 5.467e+13 2.021e+14 5.578e+13 2.042e+14 5.689e+13 2.063e+14 5.799e+13 2.086e+14 5.907e+13 2.109e+14 6.015e+13 2.134e+14 6.120e+13 2.160e+14 6.222e+13 2.186e+14 6.322e+13 2.214e+14 6.418e+13 2.242e+14 6.510e+13 2.271e+14 6.598e+13 2.300e+14 6.680e+13 2.330e+14 6.756e+13 2.361e+14 6.826e+13 2.391e+14 6.889e+13 2.422e+14 6.944e+13 2.453e+14 6.991e+13 2.483e+14 7.029e+13 2.513e+14 7.057e+13 2.543e+14 7.075e+13 2.572e+14 7.083e+13 2.600e+14 7.079e+13 2.627e+14 7.065e+13 2.653e+14 7.038e+13 2.678e+14 6.998e+13 2.701e+14 6.947e+13 2.723e+14 6.882e+13 2.742e+14 6.804e+13 2.760e+14 6.715e+13 2.775e+14 6.614e+13 2.789e+14 6.501e+13 2.800e+14 6.376e+13 2.809e+14 6.238e+13 2.815e+14 6.087e+13 2.818e+14 5.925e+13 2.818e+14 5.751e+13 2.815e+14 5.567e+13 2.808e+14 5.372e+13 2.799e+14 5.168e+13 2.786e+14 4.955e+13 2.770e+14 4.734e+13 2.750e+14 4.505e+13 2.727e+14 4.271e+13 2.700e+14 4.031e+13 2.671e+14 3.786e+13 2.638e+14 3.538e+13 2.601e+14 3.288e+13 2.562e+14 3.035e+13 2.519e+14 2.783e+13 2.473e+14 2.530e+13 2.425e+14 2.279e+13 2.373e+14 2.029e+13 2.319e+14 1.783e+13 2.263e+14 1.541e+13 2.204e+14 1.304e+13 2.144e+14 1.072e+13 2.081e+14 8.460e+12 2.017e+14 6.276e+12 1.951e+14 4.169e+12 1.884e+14 2.145e+12 1.816e+14 2.112e+11 1.747e+14 -1.628e+12 1.677e+14 -3.369e+12 1.607e+14 -5.005e+12 1.537e+14 -6.535e+12 1.467e+14 -7.956e+12 1.398e+14 -9.264e+12 1.328e+14 -1.046e+13 1.260e+14 -1.154e+13 1.192e+14 -1.249e+13 1.126e+14 -1.333e+13 1.060e+14 -1.406e+13 9.967e+13 -1.467e+13 9.345e+13 -1.518e+13 8.741e+13 -1.559e+13 8.156e+13 -1.589e+13 7.591e+13 -1.610e+13 7.048e+13 -1.622e+13 6.526e+13 -1.625e+13 6.027e+13 -1.620e+13 5.551e+13 -1.608e+13 5.098e+13 -1.589e+13 4.670e+13 -1.563e+13 4.265e+13 -1.532e+13 3.884e+13 -1.495e+13 3.527e+13 -1.455e+13 3.193e+13 -1.410e+13 2.881e+13 -1.363e+13 2.592e+13 -1.313e+13 2.325e+13 -1.262e+13 2.078e+13 -1.209e+13 1.851e+13 -1.155e+13 1.643e+13 -1.101e+13 1.453e+13 -1.047e+13 1.280e+13 -9.935e+12 1.124e+13 -9.409e+12 9.821e+12 -8.896e+12 8.547e+12 -8.396e+12 7.402e+12 -7.913e+12 6.377e+12 -7.447e+12 5.463e+12 -7.001e+12 4.649e+12 -6.573e+12 3.927e+12 -6.166e+12 3.288e+12 -5.778e+12 2.723e+12 -5.410e+12 2.226e+12 -5.061e+12 1.790e+12 -4.730e+12 1.408e+12 -4.415e+12 1.075e+12 -4.118e+12 7.852e+11 -3.835e+12 5.339e+11 -3.567e+12 3.174e+11 -3.312e+12 1.323e+11 -3.068e+12 -2.487e+10 -2.836e+12 -1.567e+11 -2.615e+12 -2.656e+11 -2.404e+12 -3.539e+11 -2.202e+12 -4.235e+11 -2.010e+12 -4.762e+11 -1.827e+12 -5.139e+11 -1.652e+12 -5.380e+11 -1.487e+12 -5.499e+11 -1.331e+12 -5.513e+11 -1.184e+12 -5.434e+11 -1.047e+12 -5.275e+11 -9.182e+11 -5.050e+11 -7.989e+11 -4.770e+11 -6.890e+11 -4.448e+11 -5.882e+11 -4.094e+11 -4.966e+11 -3.719e+11 -4.141e+11 -3.333e+11 -3.404e+11 -2.945e+11 -2.753e+11 -2.563e+11 -2.184e+11 -2.193e+11 -1.694e+11 -1.843e+11 -1.278e+11 -1.517e+11 -9.319e+10 -1.220e+11 -6.497e+10 -9.534e+10 -4.263e+10 -7.212e+10 -2.559e+10 -5.240e+10 -1.321e+10 -3.621e+10 -4.856e+09 -2.356e+10 2.573e+08 -1.432e+10 3.181e+09 -8.247e+09 5.422e+09 -4.651e+09 8.481e+09 -2.086e+09 1.299e+10 9.288e+08 1.877e+10 5.138e+09 2.542e+10 1.066e+10 3.256e+10 1.732e+10 3.985e+10 2.487e+10 4.700e+10 3.301e+10 5.379e+10 4.146e+10 6.001e+10 4.992e+10 6.552e+10 5.817e+10 7.022e+10 6.597e+10 7.402e+10 7.314e+10 7.688e+10 7.952e+10 7.878e+10 8.499e+10 7.972e+10 8.945e+10 7.974e+10 9.286e+10 7.889e+10 9.517e+10 7.722e+10 9.641e+10 7.482e+10 9.657e+10 7.177e+10 9.573e+10 6.816e+10 9.393e+10 6.409e+10 9.128e+10 5.965e+10 8.784e+10 5.497e+10 8.375e+10 5.012e+10 7.909e+10 4.519e+10 7.400e+10 4.029e+10 6.857e+10 3.550e+10 6.293e+10 3.086e+10 5.718e+10 2.647e+10 5.143e+10 2.236e+10 4.577e+10 1.857e+10 4.027e+10 1.515e+10 3.503e+10 1.209e+10 3.009e+10 9.418e+09 2.551e+10 7.124e+09 2.132e+10 5.197e+09 1.755e+10 3.615e+09 1.421e+10 2.355e+09 1.130e+10 1.384e+09 8.810e+09 6.644e+08 6.720e+09 1.603e+08 5.008e+09 -1.680e+08 3.635e+09 -3.587e+08 2.563e+09 -4.561e+08 1.756e+09 -4.751e+08 1.163e+09 -4.469e+08 7.412e+08 -3.974e+08 4.533e+08 -3.398e+08 2.620e+08 -2.806e+08 1.376e+08 -2.210e+08 5.908e+07 -1.609e+08 1.313e+07 -1.017e+08 -8.362e+06 -4.868e+07 -1.187e+07 -1.129e+07 -5.503e+06 3.465e+06 1.736e+05 4.102e+07 1.257e+07 1.425e+08 6.171e+07 3.274e+08 1.714e+08 6.147e+08 3.677e+08 1.023e+09 6.788e+08 1.571e+09 1.134e+09 2.273e+09 1.760e+09 3.142e+09 2.585e+09 4.189e+09 3.634e+09 5.420e+09 4.925e+09 6.840e+09 6.476e+09 8.451e+09 8.300e+09 1.025e+10 1.040e+10 1.223e+10 1.278e+10 1.438e+10 1.543e+10 1.669e+10 1.835e+10 1.914e+10 2.151e+10 2.173e+10 2.490e+10 2.441e+10 2.849e+10 2.718e+10 3.226e+10 3.001e+10 3.616e+10 3.287e+10 4.016e+10 3.572e+10 4.423e+10 3.855e+10 4.832e+10 4.132e+10 5.238e+10 4.399e+10 5.638e+10 4.653e+10 6.028e+10 4.892e+10 6.402e+10 5.113e+10 6.758e+10 5.313e+10 7.091e+10 5.489e+10 7.398e+10 5.638e+10 7.674e+10 5.759e+10 7.916e+10 5.850e+10 8.122e+10 5.909e+10 8.288e+10 5.935e+10 8.414e+10 5.929e+10 8.496e+10 5.891e+10 8.534e+10 5.821e+10 8.528e+10 5.720e+10 8.478e+10 5.590e+10 8.384e+10 5.433e+10 8.248e+10 5.252e+10 8.071e+10 5.049e+10 7.855e+10 4.828e+10 7.604e+10 4.591e+10 7.320e+10 4.342e+10 7.008e+10 4.084e+10 6.670e+10 3.821e+10 6.313e+10 3.556e+10 5.939e+10 3.291e+10 5.553e+10 3.030e+10 5.161e+10 2.775e+10 4.766e+10 2.529e+10 4.372e+10 2.292e+10 3.985e+10 2.068e+10 3.607e+10 1.856e+10 3.242e+10 1.658e+10 2.892e+10 1.474e+10 2.561e+10 1.305e+10 2.251e+10 1.151e+10 1.962e+10 1.010e+10 1.696e+10 8.838e+09 1.454e+10 7.706e+09 1.236e+10 6.698e+09 1.041e+10 5.808e+09 8.680e+09 5.027e+09 7.173e+09 4.345e+09 5.870e+09 3.754e+09 4.757e+09 3.246e+09 3.818e+09 2.812e+09 3.035e+09 2.446e+09 2.390e+09 2.140e+09 1.866e+09 1.887e+09 1.444e+09 1.682e+09 1.109e+09 1.520e+09 8.456e+08 1.395e+09 6.391e+08 1.302e+09 4.780e+08 1.237e+09 3.526e+08 1.196e+09 2.548e+08 1.175e+09 1.792e+08 1.170e+09 1.220e+08 1.179e+09 8.045e+07 1.200e+09 5.320e+07 1.233e+09 3.942e+07 1.275e+09 3.874e+07 1.328e+09 5.113e+07 1.390e+09 7.672e+07 1.463e+09 1.159e+08 1.547e+09 1.693e+08 1.642e+09 2.374e+08 1.748e+09 3.214e+08 1.866e+09 4.220e+08 1.996e+09 5.403e+08 2.138e+09 6.772e+08 2.290e+09 8.335e+08 2.451e+09 1.010e+09 2.620e+09 1.206e+09 2.795e+09 1.421e+09 2.972e+09 1.656e+09 3.150e+09 1.907e+09 3.325e+09 2.174e+09 3.494e+09 2.453e+09 3.654e+09 2.742e+09 3.800e+09 3.036e+09 3.929e+09 3.330e+09 4.039e+09 3.621e+09 4.125e+09 3.904e+09 4.187e+09 4.172e+09 4.221e+09 4.421e+09 4.227e+09 4.646e+09 4.202e+09 4.842e+09 4.148e+09 5.006e+09 4.063e+09 5.135e+09 3.949e+09 5.224e+09 3.808e+09 5.273e+09 3.642e+09 5.280e+09 3.454e+09 5.245e+09 3.246e+09 5.168e+09 3.022e+09 5.051e+09 2.787e+09 4.897e+09 2.542e+09 4.708e+09 2.294e+09 4.489e+09 2.046e+09 4.244e+09 1.800e+09 3.977e+09 1.561e+09 3.693e+09 1.333e+09 3.399e+09 1.116e+09 3.098e+09 9.152e+08 2.797e+09 7.307e+08 2.499e+09 5.642e+08 2.208e+09 4.166e+08 1.930e+09 2.884e+08 1.667e+09 1.794e+08 1.421e+09 8.896e+07 1.194e+09 1.631e+07 9.894e+08 -3.996e+07 8.063e+08 -8.139e+07 6.455e+08 -1.098e+08 5.068e+08 -1.274e+08 3.892e+08 -1.363e+08 2.916e+08 -1.388e+08 2.122e+08 -1.372e+08 1.488e+08 -1.337e+08 9.865e+07 -1.300e+08 5.873e+07 -1.273e+08 2.568e+07 -1.257e+08 -3.611e+06 -1.249e+08 -3.180e+07 -1.239e+08 -6.084e+07 -1.213e+08 -9.198e+07 -1.158e+08 -1.260e+08 -1.062e+08 -1.635e+08 -9.121e+07 -2.051e+08 -6.926e+07 -2.515e+08 -3.855e+07 -3.037e+08 3.234e+06 -3.629e+08 5.900e+07 -4.302e+08 1.325e+08 -5.070e+08 2.279e+08 -5.946e+08 3.504e+08 -6.941e+08 5.058e+08 -8.064e+08 7.003e+08 -9.323e+08 9.405e+08 -1.072e+09 1.234e+09 -1.227e+09 1.588e+09 -1.396e+09 2.009e+09 -1.581e+09 2.507e+09 -1.780e+09 3.088e+09 -1.995e+09 3.759e+09 -2.224e+09 4.529e+09 -2.469e+09 5.404e+09 -2.729e+09 6.389e+09 -3.005e+09 7.490e+09 -3.296e+09 8.713e+09 -3.605e+09 1.006e+10 -3.930e+09 1.154e+10 -4.273e+09 1.314e+10 -4.634e+09 1.488e+10 -5.016e+09 1.674e+10 -5.418e+09 1.873e+10 -5.842e+09 2.085e+10 -6.289e+09 2.309e+10 -6.759e+09 2.544e+10 -7.254e+09 2.790e+10 -7.772e+09 3.046e+10 -8.316e+09 3.311e+10 -8.884e+09 3.584e+10 -9.474e+09 3.864e+10 -1.009e+10 4.150e+10 -1.072e+10 4.441e+10 -1.136e+10 4.735e+10 -1.202e+10 5.032e+10 -1.268e+10 5.329e+10 -1.334e+10 5.626e+10 -1.400e+10 5.921e+10 -1.465e+10 6.213e+10 -1.528e+10 6.500e+10 -1.587e+10 6.781e+10 -1.643e+10 7.055e+10 -1.694e+10 7.319e+10 -1.740e+10 7.574e+10 -1.778e+10 7.818e+10 -1.808e+10 8.049e+10 -1.829e+10 8.266e+10 -1.840e+10 8.467e+10 -1.839e+10 8.652e+10 -1.826e+10 8.820e+10 -1.800e+10 8.968e+10 -1.759e+10 9.096e+10 -1.702e+10 9.203e+10 -1.630e+10 9.287e+10 -1.541e+10 9.347e+10 -1.435e+10 9.383e+10 -1.311e+10 9.393e+10 -1.170e+10 9.376e+10 -1.011e+10 9.333e+10 -8.354e+09 9.263e+10 -6.430e+09 9.165e+10 -4.345e+09 9.040e+10 -2.107e+09 8.888e+10 2.686e+08 8.711e+10 2.772e+09 8.508e+10 5.393e+09 8.282e+10 8.113e+09 8.036e+10 1.092e+10 7.770e+10 1.380e+10 7.489e+10 1.675e+10 7.194e+10 1.975e+10 6.890e+10 2.281e+10 6.579e+10 2.593e+10 6.265e+10 2.913e+10 5.951e+10 3.242e+10 5.637e+10 3.584e+10 5.326e+10 3.941e+10 5.018e+10 4.319e+10 4.711e+10 4.723e+10 4.405e+10 5.157e+10 4.094e+10 5.629e+10 3.776e+10 6.144e+10 3.443e+10 6.705e+10 3.090e+10 7.318e+10 2.710e+10 7.984e+10 2.295e+10 8.705e+10 1.839e+10 9.481e+10 1.335e+10 1.031e+11 7.785e+09 1.119e+11 1.636e+09 1.212e+11 -5.129e+09 1.309e+11 -1.254e+10 1.410e+11 -2.062e+10 1.514e+11 -2.937e+10 1.619e+11 -3.880e+10 1.727e+11 -4.889e+10 1.835e+11 -5.964e+10 1.942e+11 -7.101e+10 2.049e+11 -8.299e+10 2.153e+11 -9.553e+10 2.255e+11 -1.086e+11 2.353e+11 -1.221e+11 2.446e+11 -1.361e+11 2.534e+11 -1.504e+11 2.616e+11 -1.651e+11 2.690e+11 -1.801e+11 2.757e+11 -1.952e+11 2.816e+11 -2.105e+11 2.866e+11 -2.259e+11 2.906e+11 -2.413e+11 2.937e+11 -2.566e+11 2.957e+11 -2.718e+11 2.966e+11 -2.868e+11 2.964e+11 -3.015e+11 2.951e+11 -3.159e+11 2.926e+11 -3.299e+11 2.890e+11 -3.434e+11 2.843e+11 -3.563e+11 2.783e+11 -3.686e+11 2.712e+11 -3.801e+11 2.629e+11 -3.909e+11 2.535e+11 -4.008e+11 2.431e+11 -4.097e+11 2.316e+11 -4.178e+11 2.192e+11 -4.247e+11 2.058e+11 -4.306e+11 1.917e+11 -4.354e+11 1.767e+11 -4.390e+11 1.611e+11 -4.414e+11 1.450e+11 -4.427e+11 1.283e+11 -4.427e+11 1.113e+11 -4.415e+11 9.394e+10 -4.391e+11 7.642e+10 0.005 -55.605 -54.088 -52.570 -51.052 -49.565 -48.130 -46.740 -45.390 -44.079 -42.806 -41.570 -40.372 -39.213 -38.094 -37.014 -35.975 -34.975 -34.016 -33.096 -32.215 -31.372 -30.568 -29.800 -29.069 -28.374 -27.714 -27.088 -26.496 -25.937 -25.410 -24.915 -24.451 -24.018 -23.615 -23.241 -22.896 -22.581 -22.294 -22.035 -21.805 -21.603 -21.429 -21.282 -21.163 -21.072 -21.008 -20.972 -20.963 -20.982 -21.029 -21.104 -21.206 -21.338 -21.497 -21.686 -21.905 -22.153 -22.432 -22.741 -23.082 -23.455 -23.862 -24.302 -24.777 -25.288 -25.837 -26.423 -27.051 -27.720 -28.433 -29.193 -30.002 -30.864 -31.783 -32.763 -33.810 -34.932 -36.138 -37.438 -38.848 -40.384 -42.070 -43.929 -45.981 -48.207 -50.457 -52.282 -53.045 -52.619 -51.552 -50.402 -49.406 -48.620 -48.038 -47.642 -47.416 -47.341 -47.395 -47.535 -47.674 -47.648 -47.232 -46.252 -44.727 -42.849 -40.829 -38.805 -36.847 -34.981 -33.212 -31.535 -29.944 -28.433 -26.995 -25.624 -24.314 -23.060 -21.860 -20.710 -19.606 -18.546 -17.528 -16.551 -15.611 -14.708 -13.840 -13.006 -12.204 -11.434 -10.695 -9.985 -9.304 -8.651 -8.026 -7.428 -6.856 -6.309 -5.789 -5.293 -4.822 -4.374 -3.951 -3.552 -3.175 -2.822 -2.492 -2.185 -1.900 -1.638 -1.399 -1.182 -0.988 -0.816 -0.667 -0.541 -0.437 -0.357 -0.300 -0.267 -0.257 -0.272 -0.311 -0.376 -0.466 -0.582 -0.725 -0.896 -1.095 -1.324 -1.583 -1.874 -2.198 -2.556 -2.950 -3.382 -3.855 -4.370 -4.931 -5.540 -6.201 -6.920 -7.700 -8.548 -9.471 -10.478 -11.580 -12.788 -14.121 -15.598 -17.248 -19.107 -21.228 -23.687 -26.601 -30.165 -34.748 -41.172 -51.203 -52.797 -51.889 -49.501 -40.910 -34.701 -30.158 -26.599 -23.680 -21.214 -19.083 -17.215 -15.555 -14.069 -12.728 -11.511 -10.401 -9.386 -8.454 -7.598 -6.810 -6.083 -5.414 -4.797 -4.229 -3.706 -3.226 -2.786 -2.385 -2.020 -1.689 -1.391 -1.125 -0.889 -0.683 -0.506 -0.356 -0.233 -0.137 -0.066 -0.021 0.000 -0.004 -0.031 -0.083 -0.158 -0.256 -0.377 -0.521 -0.688 -0.878 -1.091 -1.326 -1.585 -1.866 -2.170 -2.497 -2.848 -3.222 -3.621 -4.043 -4.489 -4.961 -5.457 -5.979 -6.527 -7.102 -7.704 -8.334 -8.992 -9.680 -10.397 -11.146 -11.926 -12.740 -13.588 -14.472 -15.392 -16.352 -17.351 -18.394 -19.482 -20.617 -21.803 -23.043 -24.343 -25.706 -27.138 -28.648 -30.245 -31.942 -33.754 -35.705 -37.827 -40.167 -42.801 -45.864 -49.618 -54.726 -62.644 -69.049 -60.458 -56.571 -54.596 -53.534 -53.037 -52.952 -53.210 -53.774 -54.603 -55.558 -56.238 -55.982 -54.473 -52.182 -49.736 -47.422 -45.306 -43.381 -41.622 -40.003 -38.504 -37.110 -35.807 -34.584 -33.435 -32.353 -31.332 -30.367 -29.456 -28.595 -27.782 -27.013 -26.288 -25.604 -24.959 -24.352 -23.783 -23.249 -22.749 -22.283 -21.850 -21.448 -21.078 -20.738 -20.428 -20.147 -19.895 -19.671 -19.475 -19.306 -19.164 -19.049 -18.960 -18.897 -18.860 -18.849 -18.863 -18.903 -18.968 -19.059 -19.174 -19.315 -19.482 -19.673 -19.890 -20.132 -20.400 -20.693 -21.012 -21.357 -21.728 -22.124 -22.548 -22.998 -23.476 -23.981 -24.514 -25.076 -25.666 -26.285 -26.933 -27.612 -28.321 -29.060 -29.830 -30.632 -31.465 -32.329 -33.225 -34.152 -35.110 -36.097 -37.112 -38.153 -39.217 -40.300 -41.397 -42.501 -43.602 -44.691 -45.770 -46.849 -47.928 0 1 1.0 1 N1 VV 17.14 22.7 0.05 2.080e+09 -4.638e+09 8.978e+09 -8.948e+09 2.291e+10 -1.565e+10 4.673e+10 -2.467e+10 8.342e+10 -3.600e+10 1.362e+11 -4.952e+10 2.088e+11 -6.507e+10 3.053e+11 -8.238e+10 4.296e+11 -1.010e+11 5.866e+11 -1.205e+11 7.812e+11 -1.402e+11 1.018e+12 -1.593e+11 1.303e+12 -1.769e+11 1.642e+12 -1.919e+11 2.039e+12 -2.031e+11 2.504e+12 -2.090e+11 3.040e+12 -2.080e+11 3.653e+12 -1.986e+11 4.349e+12 -1.786e+11 5.135e+12 -1.462e+11 6.016e+12 -9.903e+10 6.998e+12 -3.450e+10 8.087e+12 4.992e+10 9.288e+12 1.568e+11 1.060e+13 2.890e+11 1.204e+13 4.496e+11 1.361e+13 6.416e+11 1.530e+13 8.680e+11 1.713e+13 1.132e+12 1.909e+13 1.437e+12 2.119e+13 1.786e+12 2.343e+13 2.181e+12 2.581e+13 2.626e+12 2.832e+13 3.123e+12 3.098e+13 3.675e+12 3.376e+13 4.283e+12 3.668e+13 4.949e+12 3.973e+13 5.675e+12 4.290e+13 6.461e+12 4.618e+13 7.307e+12 4.957e+13 8.213e+12 5.307e+13 9.180e+12 5.666e+13 1.020e+13 6.034e+13 1.128e+13 6.410e+13 1.242e+13 6.792e+13 1.360e+13 7.180e+13 1.484e+13 7.572e+13 1.611e+13 7.968e+13 1.743e+13 8.366e+13 1.879e+13 8.765e+13 2.017e+13 9.165e+13 2.158e+13 9.564e+13 2.302e+13 9.961e+13 2.447e+13 1.035e+14 2.594e+13 1.074e+14 2.741e+13 1.113e+14 2.889e+13 1.151e+14 3.036e+13 1.188e+14 3.183e+13 1.225e+14 3.330e+13 1.260e+14 3.475e+13 1.295e+14 3.620e+13 1.330e+14 3.763e+13 1.363e+14 3.904e+13 1.395e+14 4.043e+13 1.426e+14 4.180e+13 1.456e+14 4.314e+13 1.484e+14 4.445e+13 1.512e+14 4.573e+13 1.538e+14 4.698e+13 1.563e+14 4.820e+13 1.587e+14 4.938e+13 1.610e+14 5.053e+13 1.631e+14 5.163e+13 1.652e+14 5.270e+13 1.671e+14 5.374e+13 1.689e+14 5.473e+13 1.706e+14 5.568e+13 1.722e+14 5.659e+13 1.737e+14 5.745e+13 1.751e+14 5.828e+13 1.764e+14 5.906e+13 1.776e+14 5.980e+13 1.788e+14 6.050e+13 1.799e+14 6.115e+13 1.810e+14 6.177e+13 1.820e+14 6.236e+13 1.829e+14 6.291e+13 1.839e+14 6.343e+13 1.848e+14 6.392e+13 1.858e+14 6.438e+13 1.867e+14 6.483e+13 1.876e+14 6.525e+13 1.886e+14 6.567e+13 1.896e+14 6.608e+13 1.906e+14 6.648e+13 1.916e+14 6.689e+13 1.927e+14 6.730e+13 1.939e+14 6.773e+13 1.951e+14 6.817e+13 1.963e+14 6.864e+13 1.977e+14 6.915e+13 1.991e+14 6.969e+13 2.005e+14 7.027e+13 2.020e+14 7.089e+13 2.036e+14 7.155e+13 2.052e+14 7.225e+13 2.069e+14 7.301e+13 2.087e+14 7.381e+13 2.105e+14 7.467e+13 2.123e+14 7.559e+13 2.142e+14 7.656e+13 2.161e+14 7.758e+13 2.180e+14 7.867e+13 2.200e+14 7.981e+13 2.220e+14 8.101e+13 2.240e+14 8.227e+13 2.260e+14 8.358e+13 2.280e+14 8.495e+13 2.300e+14 8.638e+13 2.320e+14 8.785e+13 2.340e+14 8.939e+13 2.360e+14 9.097e+13 2.379e+14 9.260e+13 2.398e+14 9.428e+13 2.417e+14 9.601e+13 2.435e+14 9.779e+13 2.452e+14 9.960e+13 2.469e+14 1.015e+14 2.485e+14 1.034e+14 2.500e+14 1.053e+14 2.514e+14 1.072e+14 2.527e+14 1.092e+14 2.539e+14 1.112e+14 2.549e+14 1.132e+14 2.558e+14 1.153e+14 2.565e+14 1.173e+14 2.571e+14 1.193e+14 2.574e+14 1.213e+14 2.576e+14 1.233e+14 2.575e+14 1.252e+14 2.573e+14 1.271e+14 2.568e+14 1.290e+14 2.560e+14 1.308e+14 2.550e+14 1.325e+14 2.537e+14 1.341e+14 2.522e+14 1.356e+14 2.503e+14 1.370e+14 2.482e+14 1.383e+14 2.457e+14 1.394e+14 2.430e+14 1.404e+14 2.399e+14 1.412e+14 2.366e+14 1.418e+14 2.329e+14 1.422e+14 2.290e+14 1.425e+14 2.248e+14 1.425e+14 2.203e+14 1.424e+14 2.156e+14 1.420e+14 2.106e+14 1.414e+14 2.054e+14 1.406e+14 2.000e+14 1.396e+14 1.944e+14 1.384e+14 1.886e+14 1.370e+14 1.827e+14 1.354e+14 1.766e+14 1.335e+14 1.704e+14 1.315e+14 1.642e+14 1.293e+14 1.578e+14 1.270e+14 1.514e+14 1.245e+14 1.450e+14 1.218e+14 1.386e+14 1.190e+14 1.321e+14 1.161e+14 1.257e+14 1.131e+14 1.194e+14 1.099e+14 1.131e+14 1.067e+14 1.069e+14 1.034e+14 1.008e+14 1.000e+14 9.483e+13 9.661e+13 8.897e+13 9.314e+13 8.326e+13 8.965e+13 7.769e+13 8.612e+13 7.229e+13 8.258e+13 6.706e+13 7.903e+13 6.202e+13 7.549e+13 5.717e+13 7.198e+13 5.252e+13 6.849e+13 4.807e+13 6.504e+13 4.384e+13 6.164e+13 3.981e+13 5.830e+13 3.600e+13 5.502e+13 3.241e+13 5.181e+13 2.903e+13 4.868e+13 2.587e+13 4.564e+13 2.292e+13 4.269e+13 2.018e+13 3.983e+13 1.764e+13 3.708e+13 1.531e+13 3.444e+13 1.317e+13 3.191e+13 1.122e+13 2.949e+13 9.450e+12 2.719e+13 7.850e+12 2.501e+13 6.413e+12 2.295e+13 5.132e+12 2.101e+13 3.994e+12 1.919e+13 2.990e+12 1.749e+13 2.112e+12 1.590e+13 1.348e+12 1.443e+13 6.886e+11 1.307e+13 1.249e+11 1.182e+13 -3.532e+11 1.067e+13 -7.545e+11 9.614e+12 -1.087e+12 8.651e+12 -1.360e+12 7.775e+12 -1.580e+12 6.978e+12 -1.753e+12 6.256e+12 -1.887e+12 5.603e+12 -1.986e+12 5.012e+12 -2.056e+12 4.479e+12 -2.100e+12 3.998e+12 -2.123e+12 3.564e+12 -2.126e+12 3.172e+12 -2.114e+12 2.818e+12 -2.088e+12 2.498e+12 -2.050e+12 2.209e+12 -2.000e+12 1.947e+12 -1.941e+12 1.710e+12 -1.874e+12 1.495e+12 -1.800e+12 1.300e+12 -1.719e+12 1.124e+12 -1.632e+12 9.658e+11 -1.541e+12 8.229e+11 -1.447e+12 6.948e+11 -1.349e+12 5.803e+11 -1.250e+12 4.785e+11 -1.151e+12 3.888e+11 -1.051e+12 3.102e+11 -9.527e+11 2.419e+11 -8.563e+11 1.833e+11 -7.626e+11 1.337e+11 -6.726e+11 9.227e+10 -5.868e+11 5.835e+10 -5.060e+11 3.121e+10 -4.306e+11 1.010e+10 -3.610e+11 -5.662e+09 -2.977e+11 -1.678e+10 -2.408e+11 -2.396e+10 -1.904e+11 -2.785e+10 -1.466e+11 -2.907e+10 -1.092e+11 -2.823e+10 -7.802e+10 -2.587e+10 -5.284e+10 -2.250e+10 -3.327e+10 -1.860e+10 -1.887e+10 -1.462e+10 -9.059e+09 -1.103e+10 -2.906e+09 -8.357e+09 1.157e+09 -7.090e+09 5.213e+09 -7.120e+09 1.072e+10 -7.726e+09 1.807e+10 -8.211e+09 2.701e+10 -8.212e+09 3.718e+10 -7.593e+09 4.814e+10 -6.339e+09 5.948e+10 -4.490e+09 7.084e+10 -2.119e+09 8.186e+10 6.756e+08 9.225e+10 3.790e+09 1.018e+11 7.118e+09 1.102e+11 1.055e+10 1.175e+11 1.398e+10 1.234e+11 1.733e+10 1.278e+11 2.050e+10 1.309e+11 2.343e+10 1.324e+11 2.606e+10 1.326e+11 2.835e+10 1.314e+11 3.025e+10 1.289e+11 3.177e+10 1.253e+11 3.287e+10 1.207e+11 3.357e+10 1.151e+11 3.387e+10 1.088e+11 3.378e+10 1.018e+11 3.334e+10 9.446e+10 3.257e+10 8.677e+10 3.150e+10 7.893e+10 3.016e+10 7.105e+10 2.860e+10 6.329e+10 2.685e+10 5.576e+10 2.495e+10 4.854e+10 2.295e+10 4.173e+10 2.088e+10 3.541e+10 1.879e+10 2.961e+10 1.670e+10 2.438e+10 1.466e+10 1.973e+10 1.270e+10 1.567e+10 1.084e+10 1.219e+10 9.116e+09 9.254e+09 7.534e+09 6.836e+09 6.111e+09 4.894e+09 4.858e+09 3.374e+09 3.776e+09 2.220e+09 2.863e+09 1.394e+09 2.100e+09 7.858e+08 1.525e+09 3.970e+08 1.058e+09 1.575e+08 7.100e+08 2.296e+07 4.606e+08 -4.263e+07 2.882e+08 -6.609e+07 1.728e+08 -6.512e+07 9.674e+07 -5.007e+07 4.721e+07 -2.823e+07 1.696e+07 -7.970e+06 2.262e+06 1.949e+06 -1.359e+06 2.817e+07 -1.030e+07 1.093e+08 -2.409e+07 2.726e+08 -3.422e+07 5.479e+08 -2.932e+07 9.672e+08 4.609e+06 1.564e+09 8.370e+07 2.368e+09 2.251e+08 3.410e+09 4.468e+08 4.719e+09 7.666e+08 6.317e+09 1.200e+09 8.222e+09 1.763e+09 1.045e+10 2.469e+09 1.301e+10 3.325e+09 1.590e+10 4.338e+09 1.913e+10 5.514e+09 2.268e+10 6.850e+09 2.653e+10 8.345e+09 3.067e+10 9.993e+09 3.506e+10 1.178e+10 3.968e+10 1.371e+10 4.448e+10 1.575e+10 4.943e+10 1.790e+10 5.447e+10 2.013e+10 5.956e+10 2.244e+10 6.464e+10 2.480e+10 6.965e+10 2.720e+10 7.455e+10 2.962e+10 7.926e+10 3.203e+10 8.375e+10 3.442e+10 8.795e+10 3.677e+10 9.182e+10 3.906e+10 9.529e+10 4.126e+10 9.833e+10 4.336e+10 1.009e+11 4.533e+10 1.029e+11 4.716e+10 1.045e+11 4.881e+10 1.054e+11 5.027e+10 1.058e+11 5.151e+10 1.056e+11 5.252e+10 1.049e+11 5.328e+10 1.036e+11 5.377e+10 1.017e+11 5.397e+10 9.938e+10 5.388e+10 9.658e+10 5.350e+10 9.335e+10 5.281e+10 8.974e+10 5.182e+10 8.580e+10 5.055e+10 8.159e+10 4.900e+10 7.716e+10 4.720e+10 7.258e+10 4.516e+10 6.789e+10 4.291e+10 6.315e+10 4.050e+10 5.842e+10 3.794e+10 5.374e+10 3.527e+10 4.916e+10 3.254e+10 4.471e+10 2.978e+10 4.044e+10 2.702e+10 3.637e+10 2.431e+10 3.252e+10 2.168e+10 2.891e+10 1.914e+10 2.556e+10 1.674e+10 2.247e+10 1.448e+10 1.965e+10 1.239e+10 1.708e+10 1.048e+10 1.478e+10 8.747e+09 1.272e+10 7.200e+09 1.090e+10 5.838e+09 9.300e+09 4.651e+09 7.912e+09 3.633e+09 6.717e+09 2.773e+09 5.699e+09 2.054e+09 4.840e+09 1.462e+09 4.125e+09 9.804e+08 3.537e+09 5.924e+08 3.060e+09 2.818e+08 2.682e+09 3.322e+07 2.386e+09 -1.678e+08 2.160e+09 -3.331e+08 1.994e+09 -4.726e+08 1.876e+09 -5.935e+08 1.798e+09 -7.005e+08 1.754e+09 -7.963e+08 1.738e+09 -8.821e+08 1.746e+09 -9.580e+08 1.775e+09 -1.023e+09 1.823e+09 -1.078e+09 1.890e+09 -1.120e+09 1.973e+09 -1.149e+09 2.073e+09 -1.164e+09 2.189e+09 -1.165e+09 2.320e+09 -1.150e+09 2.466e+09 -1.119e+09 2.627e+09 -1.072e+09 2.803e+09 -1.007e+09 2.992e+09 -9.225e+08 3.194e+09 -8.185e+08 3.408e+09 -6.938e+08 3.632e+09 -5.469e+08 3.865e+09 -3.772e+08 4.104e+09 -1.839e+08 4.346e+09 3.361e+07 4.589e+09 2.751e+08 4.830e+09 5.399e+08 5.064e+09 8.272e+08 5.287e+09 1.135e+09 5.496e+09 1.460e+09 5.686e+09 1.801e+09 5.853e+09 2.152e+09 5.992e+09 2.508e+09 6.101e+09 2.863e+09 6.176e+09 3.213e+09 6.214e+09 3.551e+09 6.213e+09 3.872e+09 6.172e+09 4.169e+09 6.091e+09 4.436e+09 5.968e+09 4.669e+09 5.806e+09 4.862e+09 5.607e+09 5.012e+09 5.372e+09 5.116e+09 5.105e+09 5.172e+09 4.811e+09 5.180e+09 4.493e+09 5.140e+09 4.156e+09 5.054e+09 3.806e+09 4.924e+09 3.447e+09 4.755e+09 3.086e+09 4.549e+09 2.726e+09 4.313e+09 2.374e+09 4.052e+09 2.033e+09 3.770e+09 1.708e+09 3.475e+09 1.403e+09 3.170e+09 1.121e+09 2.863e+09 8.636e+08 2.557e+09 6.334e+08 2.258e+09 4.313e+08 1.969e+09 2.578e+08 1.695e+09 1.123e+08 1.439e+09 -6.259e+06 1.203e+09 -9.952e+07 9.883e+08 -1.702e+08 7.971e+08 -2.212e+08 6.299e+08 -2.567e+08 4.861e+08 -2.809e+08 3.644e+08 -2.988e+08 2.620e+08 -3.148e+08 1.748e+08 -3.331e+08 9.664e+07 -3.556e+08 2.086e+07 -3.827e+08 -5.944e+07 -4.128e+08 -1.504e+08 -4.429e+08 -2.567e+08 -4.695e+08 -3.819e+08 -4.886e+08 -5.285e+08 -4.961e+08 -6.982e+08 -4.877e+08 -8.923e+08 -4.592e+08 -1.112e+09 -4.059e+08 -1.358e+09 -3.232e+08 -1.630e+09 -2.061e+08 -1.930e+09 -4.929e+07 -2.258e+09 1.526e+08 -2.613e+09 4.055e+08 -2.996e+09 7.153e+08 -3.406e+09 1.088e+09 -3.842e+09 1.530e+09 -4.304e+09 2.048e+09 -4.791e+09 2.647e+09 -5.301e+09 3.334e+09 -5.834e+09 4.115e+09 -6.387e+09 4.996e+09 -6.959e+09 5.981e+09 -7.550e+09 7.076e+09 -8.157e+09 8.284e+09 -8.780e+09 9.609e+09 -9.417e+09 1.105e+10 -1.007e+10 1.262e+10 -1.073e+10 1.430e+10 -1.141e+10 1.611e+10 -1.209e+10 1.804e+10 -1.279e+10 2.008e+10 -1.350e+10 2.223e+10 -1.422e+10 2.449e+10 -1.495e+10 2.684e+10 -1.569e+10 2.929e+10 -1.643e+10 3.181e+10 -1.718e+10 3.440e+10 -1.794e+10 3.704e+10 -1.869e+10 3.972e+10 -1.943e+10 4.243e+10 -2.017e+10 4.515e+10 -2.089e+10 4.786e+10 -2.158e+10 5.055e+10 -2.224e+10 5.320e+10 -2.286e+10 5.579e+10 -2.343e+10 5.830e+10 -2.395e+10 6.072e+10 -2.441e+10 6.304e+10 -2.479e+10 6.524e+10 -2.509e+10 6.730e+10 -2.530e+10 6.922e+10 -2.541e+10 7.098e+10 -2.542e+10 7.258e+10 -2.533e+10 7.401e+10 -2.513e+10 7.525e+10 -2.481e+10 7.632e+10 -2.437e+10 7.720e+10 -2.382e+10 7.789e+10 -2.316e+10 7.839e+10 -2.238e+10 7.870e+10 -2.148e+10 7.883e+10 -2.048e+10 7.878e+10 -1.937e+10 7.854e+10 -1.816e+10 7.813e+10 -1.684e+10 7.754e+10 -1.544e+10 7.679e+10 -1.394e+10 7.587e+10 -1.236e+10 7.479e+10 -1.069e+10 7.357e+10 -8.958e+09 7.221e+10 -7.150e+09 7.070e+10 -5.275e+09 6.907e+10 -3.342e+09 6.733e+10 -1.352e+09 6.547e+10 6.907e+08 6.352e+10 2.779e+09 6.149e+10 4.911e+09 5.939e+10 7.087e+09 5.724e+10 9.301e+09 5.506e+10 1.156e+10 5.286e+10 1.386e+10 5.067e+10 1.622e+10 4.851e+10 1.866e+10 4.639e+10 2.118e+10 4.431e+10 2.382e+10 4.229e+10 2.660e+10 4.032e+10 2.957e+10 3.840e+10 3.275e+10 3.652e+10 3.621e+10 3.464e+10 3.998e+10 3.273e+10 4.412e+10 3.076e+10 4.866e+10 2.867e+10 5.364e+10 2.641e+10 5.910e+10 2.393e+10 6.504e+10 2.117e+10 7.149e+10 1.807e+10 7.843e+10 1.460e+10 8.586e+10 1.070e+10 9.376e+10 6.335e+09 1.021e+11 1.481e+09 1.108e+11 -3.897e+09 1.199e+11 -9.814e+09 1.293e+11 -1.628e+10 1.389e+11 -2.331e+10 1.487e+11 -3.090e+10 1.587e+11 -3.905e+10 1.688e+11 -4.775e+10 1.789e+11 -5.700e+10 1.889e+11 -6.677e+10 1.989e+11 -7.706e+10 2.087e+11 -8.784e+10 2.183e+11 -9.910e+10 2.277e+11 -1.108e+11 2.368e+11 -1.229e+11 2.455e+11 -1.355e+11 2.538e+11 -1.484e+11 2.617e+11 -1.616e+11 2.691e+11 -1.752e+11 2.759e+11 -1.890e+11 2.821e+11 -2.031e+11 2.877e+11 -2.173e+11 2.925e+11 -2.317e+11 2.966e+11 -2.461e+11 3.000e+11 -2.606e+11 3.024e+11 -2.750e+11 3.039e+11 -2.894e+11 3.045e+11 -3.035e+11 3.040e+11 -3.174e+11 3.025e+11 -3.310e+11 2.998e+11 -3.442e+11 2.960e+11 -3.569e+11 2.911e+11 -3.691e+11 2.850e+11 -3.805e+11 2.777e+11 -3.912e+11 2.693e+11 -4.012e+11 2.597e+11 -4.101e+11 2.491e+11 -4.182e+11 2.373e+11 -4.251e+11 2.246e+11 -4.310e+11 2.109e+11 -4.357e+11 1.964e+11 -4.392e+11 1.811e+11 0.005 -55.173 -53.861 -52.550 -51.239 -49.914 -48.572 -47.228 -45.896 -44.582 -43.292 -42.032 -40.806 -39.615 -38.462 -37.348 -36.274 -35.240 -34.247 -33.294 -32.381 -31.507 -30.672 -29.875 -29.115 -28.392 -27.704 -27.051 -26.432 -25.846 -25.294 -24.773 -24.284 -23.826 -23.398 -22.999 -22.630 -22.290 -21.978 -21.695 -21.440 -21.213 -21.013 -20.840 -20.695 -20.577 -20.486 -20.422 -20.385 -20.374 -20.391 -20.434 -20.504 -20.602 -20.727 -20.879 -21.060 -21.268 -21.504 -21.770 -22.064 -22.387 -22.741 -23.125 -23.540 -23.986 -24.464 -24.976 -25.521 -26.100 -26.715 -27.366 -28.055 -28.783 -29.551 -30.361 -31.215 -32.116 -33.066 -34.067 -35.125 -36.244 -37.429 -38.689 -40.031 -41.469 -43.018 -44.698 -46.538 -48.577 -50.871 -53.510 -56.639 -60.552 -66.008 -76.928 -76.637 -69.450 -64.159 -60.183 -56.624 -53.347 -50.337 -47.576 -45.039 -42.697 -40.521 -38.489 -36.582 -34.783 -33.081 -31.464 -29.925 -28.456 -27.051 -25.706 -24.416 -23.178 -21.989 -20.846 -19.747 -18.689 -17.671 -16.692 -15.749 -14.842 -13.969 -13.128 -12.319 -11.542 -10.794 -10.076 -9.386 -8.724 -8.089 -7.481 -6.899 -6.342 -5.811 -5.304 -4.822 -4.364 -3.930 -3.519 -3.131 -2.766 -2.425 -2.105 -1.809 -1.534 -1.282 -1.053 -0.846 -0.661 -0.498 -0.358 -0.241 -0.146 -0.075 -0.026 -0.001 0.000 -0.023 -0.070 -0.143 -0.241 -0.366 -0.517 -0.696 -0.903 -1.140 -1.407 -1.706 -2.037 -2.404 -2.806 -3.247 -3.728 -4.251 -4.821 -5.438 -6.109 -6.837 -7.626 -8.484 -9.417 -10.434 -11.545 -12.764 -14.106 -15.593 -17.252 -19.118 -21.242 -23.695 -26.584 -30.081 -34.489 -40.407 -49.268 -63.063 -57.914 -46.270 -38.594 -33.200 -29.084 -25.773 -23.014 -20.657 -18.606 -16.798 -15.188 -13.741 -12.432 -11.243 -10.157 -9.163 -8.251 -7.411 -6.638 -5.926 -5.270 -4.665 -4.108 -3.596 -3.126 -2.696 -2.304 -1.947 -1.625 -1.335 -1.077 -0.849 -0.650 -0.480 -0.337 -0.221 -0.131 -0.066 -0.027 -0.012 -0.022 -0.055 -0.112 -0.192 -0.296 -0.422 -0.571 -0.743 -0.937 -1.154 -1.394 -1.656 -1.941 -2.249 -2.579 -2.933 -3.310 -3.710 -4.135 -4.583 -5.055 -5.552 -6.074 -6.622 -7.195 -7.795 -8.421 -9.076 -9.758 -10.469 -11.209 -11.980 -12.782 -13.616 -14.483 -15.385 -16.321 -17.294 -18.304 -19.354 -20.445 -21.579 -22.757 -23.982 -25.255 -26.579 -27.957 -29.392 -30.885 -32.441 -34.062 -35.747 -37.495 -39.298 -41.137 -42.975 -44.742 -46.336 -47.639 -48.557 -49.084 -49.293 -49.294 -49.176 -48.991 -48.755 -48.460 -48.085 -47.601 -46.987 -46.230 -45.337 -44.326 -43.226 -42.069 -40.882 -39.687 -38.503 -37.340 -36.207 -35.110 -34.051 -33.032 -32.055 -31.119 -30.224 -29.371 -28.557 -27.782 -27.046 -26.348 -25.686 -25.060 -24.470 -23.913 -23.390 -22.900 -22.442 -22.015 -21.619 -21.253 -20.917 -20.610 -20.331 -20.081 -19.859 -19.664 -19.496 -19.355 -19.241 -19.153 -19.091 -19.055 -19.044 -19.060 -19.100 -19.167 -19.258 -19.375 -19.518 -19.686 -19.880 -20.099 -20.345 -20.616 -20.913 -21.237 -21.587 -21.963 -22.367 -22.797 -23.256 -23.743 -24.259 -24.805 -25.380 -25.985 -26.622 -27.290 -27.992 -28.726 -29.494 -30.298 -31.137 -32.014 -32.929 -33.884 -34.879 -35.916 -36.997 -38.122 -39.294 -40.513 -41.782 -43.102 -44.473 -45.896 -47.371 -48.872 -50.373 -51.874 0 1 1.0 1 N1 VH 17.14 22.7 0.05 4.649e+09 -1.239e+09 1.201e+10 1.189e+09 2.554e+10 7.279e+09 4.710e+10 1.911e+10 7.872e+10 3.888e+10 1.226e+11 6.899e+10 1.813e+11 1.122e+11 2.574e+11 1.716e+11 3.538e+11 2.504e+11 4.735e+11 3.524e+11 6.199e+11 4.817e+11 7.962e+11 6.423e+11 1.006e+12 8.387e+11 1.253e+12 1.076e+12 1.541e+12 1.359e+12 1.875e+12 1.694e+12 2.258e+12 2.087e+12 2.693e+12 2.541e+12 3.184e+12 3.063e+12 3.736e+12 3.660e+12 4.351e+12 4.336e+12 5.033e+12 5.097e+12 5.786e+12 5.951e+12 6.612e+12 6.901e+12 7.514e+12 7.953e+12 8.495e+12 9.114e+12 9.556e+12 1.039e+13 1.070e+13 1.178e+13 1.193e+13 1.329e+13 1.324e+13 1.493e+13 1.463e+13 1.670e+13 1.611e+13 1.859e+13 1.768e+13 2.062e+13 1.932e+13 2.279e+13 2.105e+13 2.508e+13 2.286e+13 2.752e+13 2.475e+13 3.008e+13 2.671e+13 3.277e+13 2.874e+13 3.559e+13 3.084e+13 3.853e+13 3.301e+13 4.158e+13 3.523e+13 4.475e+13 3.751e+13 4.802e+13 3.984e+13 5.138e+13 4.222e+13 5.484e+13 4.464e+13 5.837e+13 4.710e+13 6.197e+13 4.959e+13 6.564e+13 5.211e+13 6.935e+13 5.465e+13 7.310e+13 5.720e+13 7.688e+13 5.976e+13 8.067e+13 6.233e+13 8.447e+13 6.491e+13 8.828e+13 6.747e+13 9.206e+13 7.002e+13 9.582e+13 7.256e+13 9.956e+13 7.507e+13 1.032e+14 7.756e+13 1.069e+14 8.001e+13 1.104e+14 8.243e+13 1.140e+14 8.481e+13 1.174e+14 8.715e+13 1.208e+14 8.943e+13 1.240e+14 9.166e+13 1.272e+14 9.383e+13 1.303e+14 9.593e+13 1.333e+14 9.796e+13 1.361e+14 9.993e+13 1.389e+14 1.018e+14 1.415e+14 1.036e+14 1.440e+14 1.054e+14 1.464e+14 1.070e+14 1.486e+14 1.086e+14 1.507e+14 1.101e+14 1.527e+14 1.116e+14 1.546e+14 1.129e+14 1.563e+14 1.142e+14 1.580e+14 1.154e+14 1.595e+14 1.166e+14 1.609e+14 1.177e+14 1.621e+14 1.188e+14 1.633e+14 1.198e+14 1.644e+14 1.208e+14 1.653e+14 1.218e+14 1.662e+14 1.227e+14 1.670e+14 1.236e+14 1.678e+14 1.246e+14 1.684e+14 1.255e+14 1.690e+14 1.264e+14 1.696e+14 1.273e+14 1.702e+14 1.283e+14 1.707e+14 1.292e+14 1.712e+14 1.302e+14 1.717e+14 1.313e+14 1.722e+14 1.323e+14 1.727e+14 1.334e+14 1.732e+14 1.346e+14 1.738e+14 1.357e+14 1.744e+14 1.370e+14 1.750e+14 1.382e+14 1.757e+14 1.395e+14 1.765e+14 1.409e+14 1.773e+14 1.423e+14 1.782e+14 1.437e+14 1.792e+14 1.452e+14 1.802e+14 1.467e+14 1.813e+14 1.482e+14 1.825e+14 1.497e+14 1.837e+14 1.512e+14 1.850e+14 1.528e+14 1.864e+14 1.543e+14 1.878e+14 1.559e+14 1.893e+14 1.574e+14 1.908e+14 1.590e+14 1.924e+14 1.605e+14 1.940e+14 1.620e+14 1.957e+14 1.635e+14 1.975e+14 1.649e+14 1.992e+14 1.663e+14 2.010e+14 1.676e+14 2.029e+14 1.690e+14 2.047e+14 1.702e+14 2.066e+14 1.714e+14 2.085e+14 1.726e+14 2.104e+14 1.736e+14 2.123e+14 1.746e+14 2.142e+14 1.756e+14 2.161e+14 1.764e+14 2.180e+14 1.772e+14 2.199e+14 1.779e+14 2.217e+14 1.784e+14 2.236e+14 1.789e+14 2.253e+14 1.793e+14 2.271e+14 1.795e+14 2.287e+14 1.796e+14 2.303e+14 1.795e+14 2.319e+14 1.794e+14 2.333e+14 1.790e+14 2.346e+14 1.785e+14 2.358e+14 1.778e+14 2.369e+14 1.770e+14 2.379e+14 1.761e+14 2.387e+14 1.749e+14 2.394e+14 1.735e+14 2.398e+14 1.720e+14 2.401e+14 1.702e+14 2.401e+14 1.682e+14 2.399e+14 1.660e+14 2.395e+14 1.636e+14 2.388e+14 1.610e+14 2.379e+14 1.582e+14 2.367e+14 1.552e+14 2.352e+14 1.520e+14 2.334e+14 1.486e+14 2.313e+14 1.451e+14 2.290e+14 1.413e+14 2.263e+14 1.374e+14 2.234e+14 1.334e+14 2.202e+14 1.292e+14 2.167e+14 1.250e+14 2.129e+14 1.206e+14 2.090e+14 1.161e+14 2.047e+14 1.116e+14 2.003e+14 1.070e+14 1.956e+14 1.023e+14 1.907e+14 9.768e+13 1.857e+14 9.302e+13 1.805e+14 8.836e+13 1.752e+14 8.374e+13 1.697e+14 7.914e+13 1.642e+14 7.460e+13 1.585e+14 7.013e+13 1.529e+14 6.574e+13 1.471e+14 6.143e+13 1.414e+14 5.722e+13 1.356e+14 5.313e+13 1.299e+14 4.915e+13 1.242e+14 4.530e+13 1.185e+14 4.159e+13 1.129e+14 3.802e+13 1.073e+14 3.460e+13 1.018e+14 3.134e+13 9.645e+13 2.823e+13 9.118e+13 2.528e+13 8.603e+13 2.249e+13 8.100e+13 1.985e+13 7.611e+13 1.739e+13 7.137e+13 1.508e+13 6.678e+13 1.293e+13 6.235e+13 1.094e+13 5.808e+13 9.101e+12 5.398e+13 7.417e+12 5.005e+13 5.882e+12 4.630e+13 4.489e+12 4.272e+13 3.234e+12 3.932e+13 2.113e+12 3.610e+13 1.116e+12 3.305e+13 2.397e+11 3.019e+13 -5.239e+11 2.750e+13 -1.182e+12 2.498e+13 -1.743e+12 2.263e+13 -2.213e+12 2.045e+13 -2.600e+12 1.844e+13 -2.912e+12 1.657e+13 -3.156e+12 1.486e+13 -3.340e+12 1.329e+13 -3.470e+12 1.185e+13 -3.553e+12 1.055e+13 -3.596e+12 9.363e+12 -3.604e+12 8.293e+12 -3.583e+12 7.328e+12 -3.538e+12 6.461e+12 -3.473e+12 5.684e+12 -3.392e+12 4.989e+12 -3.299e+12 4.369e+12 -3.196e+12 3.817e+12 -3.086e+12 3.326e+12 -2.971e+12 2.890e+12 -2.851e+12 2.503e+12 -2.729e+12 2.160e+12 -2.606e+12 1.856e+12 -2.482e+12 1.586e+12 -2.357e+12 1.348e+12 -2.231e+12 1.138e+12 -2.106e+12 9.525e+11 -1.980e+12 7.893e+11 -1.855e+12 6.462e+11 -1.731e+12 5.211e+11 -1.608e+12 4.126e+11 -1.487e+12 3.188e+11 -1.367e+12 2.386e+11 -1.250e+12 1.707e+11 -1.136e+12 1.138e+11 -1.025e+12 6.693e+10 -9.186e+11 2.910e+10 -8.164e+11 -6.981e+08 -7.192e+11 -2.336e+10 -6.274e+11 -3.976e+10 -5.413e+11 -5.075e+10 -4.615e+11 -5.713e+10 -3.880e+11 -5.966e+10 -3.212e+11 -5.905e+10 -2.610e+11 -5.599e+10 -2.077e+11 -5.110e+10 -1.610e+11 -4.495e+10 -1.209e+11 -3.808e+10 -8.726e+10 -3.095e+10 -5.970e+10 -2.395e+10 -3.796e+10 -1.745e+10 -2.164e+10 -1.172e+10 -1.031e+10 -6.986e+09 -3.489e+09 -3.465e+09 -3.564e+08 -1.440e+09 1.751e+09 -8.297e+08 5.687e+09 -2.110e+08 1.206e+10 1.382e+09 2.045e+10 4.102e+09 3.036e+10 7.863e+09 4.131e+10 1.253e+10 5.288e+10 1.796e+10 6.466e+10 2.396e+10 7.629e+10 3.035e+10 8.746e+10 3.695e+10 9.785e+10 4.358e+10 1.073e+11 5.005e+10 1.155e+11 5.622e+10 1.224e+11 6.194e+10 1.278e+11 6.708e+10 1.318e+11 7.155e+10 1.343e+11 7.527e+10 1.353e+11 7.817e+10 1.349e+11 8.023e+10 1.331e+11 8.144e+10 1.300e+11 8.180e+10 1.258e+11 8.134e+10 1.206e+11 8.012e+10 1.146e+11 7.818e+10 1.079e+11 7.559e+10 1.006e+11 7.244e+10 9.294e+10 6.882e+10 8.505e+10 6.480e+10 7.709e+10 6.047e+10 6.918e+10 5.594e+10 6.142e+10 5.127e+10 5.395e+10 4.656e+10 4.685e+10 4.188e+10 4.018e+10 3.729e+10 3.402e+10 3.287e+10 2.840e+10 2.865e+10 2.334e+10 2.468e+10 1.887e+10 2.101e+10 1.497e+10 1.764e+10 1.163e+10 1.460e+10 8.816e+09 1.190e+10 6.501e+09 9.540e+09 4.634e+09 7.500e+09 3.172e+09 5.776e+09 2.060e+09 4.347e+09 1.244e+09 3.186e+09 6.654e+08 2.278e+09 2.886e+08 1.574e+09 6.176e+07 1.046e+09 -6.040e+07 6.669e+08 -1.131e+08 4.060e+08 -1.239e+08 2.333e+08 -1.120e+08 1.232e+08 -8.883e+07 5.498e+07 -6.069e+07 1.484e+07 -3.272e+07 -5.460e+06 -1.093e+07 -1.312e+07 7.413e+06 -2.210e+07 5.208e+07 -4.295e+07 1.568e+08 -6.866e+07 3.513e+08 -8.739e+07 6.657e+08 -8.483e+07 1.132e+09 -4.419e+07 1.784e+09 5.362e+07 2.652e+09 2.287e+08 3.766e+09 5.022e+08 5.156e+09 8.955e+08 6.841e+09 1.427e+09 8.843e+09 2.117e+09 1.118e+10 2.980e+09 1.385e+10 4.029e+09 1.686e+10 5.273e+09 2.021e+10 6.719e+09 2.387e+10 8.367e+09 2.784e+10 1.022e+10 3.209e+10 1.226e+10 3.659e+10 1.449e+10 4.129e+10 1.688e+10 4.616e+10 1.944e+10 5.115e+10 2.211e+10 5.620e+10 2.490e+10 6.128e+10 2.777e+10 6.630e+10 3.069e+10 7.123e+10 3.364e+10 7.600e+10 3.658e+10 8.055e+10 3.948e+10 8.485e+10 4.232e+10 8.884e+10 4.506e+10 9.248e+10 4.766e+10 9.571e+10 5.011e+10 9.850e+10 5.237e+10 1.008e+11 5.442e+10 1.026e+11 5.622e+10 1.039e+11 5.776e+10 1.047e+11 5.902e+10 1.049e+11 5.998e+10 1.047e+11 6.063e+10 1.039e+11 6.096e+10 1.026e+11 6.097e+10 1.008e+11 6.065e+10 9.855e+10 6.000e+10 9.590e+10 5.904e+10 9.287e+10 5.778e+10 8.950e+10 5.623e+10 8.583e+10 5.441e+10 8.192e+10 5.235e+10 7.780e+10 5.007e+10 7.352e+10 4.760e+10 6.913e+10 4.498e+10 6.468e+10 4.224e+10 6.021e+10 3.940e+10 5.575e+10 3.651e+10 5.136e+10 3.360e+10 4.707e+10 3.071e+10 4.290e+10 2.785e+10 3.889e+10 2.507e+10 3.506e+10 2.239e+10 3.143e+10 1.982e+10 2.802e+10 1.740e+10 2.484e+10 1.513e+10 2.189e+10 1.303e+10 1.918e+10 1.110e+10 1.671e+10 9.356e+09 1.448e+10 7.787e+09 1.248e+10 6.395e+09 1.071e+10 5.172e+09 9.142e+09 4.113e+09 7.778e+09 3.207e+09 6.598e+09 2.441e+09 5.588e+09 1.802e+09 4.735e+09 1.275e+09 4.022e+09 8.461e+08 3.433e+09 5.006e+08 2.956e+09 2.242e+08 2.574e+09 3.105e+06 2.276e+09 -1.751e+08 2.048e+09 -3.211e+08 1.879e+09 -4.441e+08 1.759e+09 -5.503e+08 1.681e+09 -6.444e+08 1.636e+09 -7.289e+08 1.620e+09 -8.048e+08 1.628e+09 -8.721e+08 1.659e+09 -9.303e+08 1.708e+09 -9.786e+08 1.775e+09 -1.016e+09 1.859e+09 -1.041e+09 1.958e+09 -1.054e+09 2.072e+09 -1.054e+09 2.200e+09 -1.039e+09 2.341e+09 -1.010e+09 2.495e+09 -9.652e+08 2.660e+09 -9.052e+08 2.837e+09 -8.290e+08 3.022e+09 -7.362e+08 3.217e+09 -6.265e+08 3.417e+09 -4.997e+08 3.623e+09 -3.559e+08 3.831e+09 -1.951e+08 4.040e+09 -1.814e+07 4.246e+09 1.741e+08 4.447e+09 3.803e+08 4.639e+09 5.986e+08 4.820e+09 8.265e+08 4.987e+09 1.062e+09 5.135e+09 1.301e+09 5.262e+09 1.540e+09 5.366e+09 1.775e+09 5.443e+09 2.003e+09 5.492e+09 2.219e+09 5.510e+09 2.420e+09 5.496e+09 2.603e+09 5.449e+09 2.763e+09 5.370e+09 2.899e+09 5.257e+09 3.007e+09 5.113e+09 3.086e+09 4.938e+09 3.134e+09 4.735e+09 3.151e+09 4.506e+09 3.138e+09 4.255e+09 3.094e+09 3.984e+09 3.022e+09 3.698e+09 2.924e+09 3.401e+09 2.802e+09 3.096e+09 2.659e+09 2.790e+09 2.498e+09 2.484e+09 2.323e+09 2.185e+09 2.138e+09 1.895e+09 1.945e+09 1.619e+09 1.748e+09 1.359e+09 1.551e+09 1.119e+09 1.356e+09 9.007e+08 1.167e+09 7.055e+08 9.869e+08 5.349e+08 8.171e+08 3.890e+08 6.599e+08 2.679e+08 5.172e+08 1.709e+08 3.906e+08 9.662e+07 2.811e+08 4.345e+07 1.899e+08 8.977e+06 1.176e+08 -1.009e+07 6.459e+07 -1.901e+07 3.031e+07 -2.654e+07 9.578e+06 -4.071e+07 -1.010e+07 -6.274e+07 -4.105e+07 -8.932e+07 -8.928e+07 -1.168e+08 -1.567e+08 -1.418e+08 -2.440e+08 -1.612e+08 -3.513e+08 -1.721e+08 -4.792e+08 -1.712e+08 -6.279e+08 -1.557e+08 -7.976e+08 -1.223e+08 -9.889e+08 -6.774e+07 -1.202e+09 1.121e+07 -1.438e+09 1.182e+08 -1.697e+09 2.566e+08 -1.978e+09 4.303e+08 -2.284e+09 6.430e+08 -2.614e+09 8.986e+08 -2.968e+09 1.201e+09 -3.347e+09 1.554e+09 -3.751e+09 1.961e+09 -4.180e+09 2.427e+09 -4.635e+09 2.954e+09 -5.117e+09 3.547e+09 -5.625e+09 4.207e+09 -6.161e+09 4.939e+09 -6.726e+09 5.743e+09 -7.319e+09 6.623e+09 -7.943e+09 7.579e+09 -8.600e+09 8.612e+09 -9.289e+09 9.722e+09 -1.001e+10 1.091e+10 -1.077e+10 1.217e+10 -1.157e+10 1.350e+10 -1.240e+10 1.491e+10 -1.328e+10 1.637e+10 -1.419e+10 1.790e+10 -1.515e+10 1.949e+10 -1.614e+10 2.112e+10 -1.717e+10 2.278e+10 -1.824e+10 2.448e+10 -1.933e+10 2.620e+10 -2.046e+10 2.793e+10 -2.161e+10 2.966e+10 -2.277e+10 3.137e+10 -2.394e+10 3.306e+10 -2.511e+10 3.471e+10 -2.627e+10 3.631e+10 -2.741e+10 3.785e+10 -2.852e+10 3.931e+10 -2.959e+10 4.067e+10 -3.060e+10 4.193e+10 -3.155e+10 4.308e+10 -3.242e+10 4.410e+10 -3.321e+10 4.499e+10 -3.390e+10 4.574e+10 -3.448e+10 4.633e+10 -3.496e+10 4.677e+10 -3.531e+10 4.704e+10 -3.553e+10 4.716e+10 -3.563e+10 4.711e+10 -3.560e+10 4.690e+10 -3.543e+10 4.652e+10 -3.513e+10 4.599e+10 -3.469e+10 4.531e+10 -3.413e+10 4.448e+10 -3.344e+10 4.351e+10 -3.263e+10 4.240e+10 -3.170e+10 4.117e+10 -3.065e+10 3.983e+10 -2.950e+10 3.838e+10 -2.826e+10 3.683e+10 -2.691e+10 3.520e+10 -2.549e+10 3.349e+10 -2.398e+10 3.172e+10 -2.241e+10 2.990e+10 -2.078e+10 2.804e+10 -1.911e+10 2.614e+10 -1.740e+10 2.423e+10 -1.567e+10 2.232e+10 -1.394e+10 2.041e+10 -1.221e+10 1.853e+10 -1.051e+10 1.668e+10 -8.855e+09 1.488e+10 -7.260e+09 1.314e+10 -5.750e+09 1.149e+10 -4.340e+09 9.940e+09 -3.047e+09 8.506e+09 -1.886e+09 7.210e+09 -8.632e+08 6.073e+09 2.699e+07 5.116e+09 8.063e+08 4.350e+09 1.523e+09 3.765e+09 2.256e+09 3.329e+09 3.098e+09 2.980e+09 4.147e+09 2.642e+09 5.484e+09 2.242e+09 7.162e+09 1.718e+09 9.212e+09 1.022e+09 1.165e+10 1.190e+08 1.448e+10 -1.018e+09 1.770e+10 -2.409e+09 2.130e+10 -4.068e+09 2.526e+10 -6.004e+09 2.956e+10 -8.226e+09 3.419e+10 -1.074e+10 3.911e+10 -1.353e+10 4.429e+10 -1.662e+10 4.971e+10 -1.998e+10 5.532e+10 -2.362e+10 6.108e+10 -2.752e+10 6.697e+10 -3.167e+10 7.294e+10 -3.606e+10 7.894e+10 -4.067e+10 8.495e+10 -4.549e+10 9.092e+10 -5.048e+10 9.680e+10 -5.564e+10 1.026e+11 -6.095e+10 1.082e+11 -6.636e+10 1.136e+11 -7.186e+10 1.188e+11 -7.744e+10 1.237e+11 -8.305e+10 1.283e+11 -8.867e+10 1.326e+11 -9.428e+10 1.366e+11 -9.985e+10 1.401e+11 -1.053e+11 1.432e+11 -1.107e+11 1.459e+11 -1.160e+11 1.481e+11 -1.211e+11 1.499e+11 -1.260e+11 1.511e+11 -1.307e+11 1.518e+11 -1.352e+11 1.519e+11 -1.395e+11 1.515e+11 -1.434e+11 1.505e+11 -1.471e+11 1.490e+11 -1.504e+11 1.470e+11 -1.534e+11 1.444e+11 -1.560e+11 1.413e+11 -1.583e+11 1.376e+11 -1.601e+11 1.336e+11 -1.616e+11 1.290e+11 -1.626e+11 1.241e+11 -1.633e+11 1.188e+11 -1.635e+11 1.131e+11 -1.632e+11 1.072e+11 0.005 -53.801 -52.326 -50.851 -49.375 -47.902 -46.441 -45.009 -43.615 -42.265 -40.962 -39.707 -38.499 -37.340 -36.227 -35.160 -34.138 -33.160 -32.223 -31.327 -30.472 -29.654 -28.875 -28.132 -27.424 -26.751 -26.112 -25.506 -24.933 -24.391 -23.880 -23.399 -22.948 -22.527 -22.134 -21.770 -21.433 -21.124 -20.843 -20.589 -20.363 -20.163 -19.990 -19.843 -19.724 -19.631 -19.564 -19.524 -19.511 -19.524 -19.563 -19.630 -19.724 -19.845 -19.994 -20.170 -20.375 -20.608 -20.869 -21.161 -21.481 -21.833 -22.215 -22.629 -23.075 -23.554 -24.066 -24.613 -25.196 -25.816 -26.473 -27.169 -27.906 -28.685 -29.507 -30.375 -31.291 -32.257 -33.276 -34.352 -35.488 -36.690 -37.963 -39.314 -40.753 -42.292 -43.945 -45.732 -47.681 -49.829 -52.233 -54.978 -58.212 -62.222 -67.769 -78.771 -78.550 -71.421 -66.175 -62.230 -58.688 -55.415 -52.395 -49.613 -47.044 -44.660 -42.436 -40.349 -38.382 -36.521 -34.754 -33.071 -31.465 -29.931 -28.461 -27.053 -25.702 -24.405 -23.159 -21.961 -20.809 -19.701 -18.635 -17.610 -16.624 -15.675 -14.763 -13.885 -13.041 -12.229 -11.450 -10.701 -9.982 -9.293 -8.632 -7.999 -7.394 -6.815 -6.263 -5.736 -5.235 -4.758 -4.306 -3.879 -3.475 -3.095 -2.739 -2.406 -2.096 -1.809 -1.545 -1.304 -1.086 -0.891 -0.718 -0.568 -0.442 -0.338 -0.258 -0.201 -0.168 -0.159 -0.175 -0.216 -0.281 -0.373 -0.491 -0.636 -0.809 -1.011 -1.242 -1.503 -1.797 -2.124 -2.485 -2.883 -3.318 -3.794 -4.313 -4.878 -5.491 -6.157 -6.879 -7.664 -8.516 -9.443 -10.454 -11.558 -12.769 -14.102 -15.579 -17.224 -19.072 -21.173 -23.592 -26.431 -29.848 -34.108 -39.717 -47.782 -59.168 -53.082 -44.462 -37.831 -32.808 -28.855 -25.627 -22.915 -20.588 -18.556 -16.762 -15.160 -13.720 -12.416 -11.230 -10.147 -9.155 -8.244 -7.406 -6.633 -5.922 -5.266 -4.661 -4.104 -3.592 -3.123 -2.692 -2.300 -1.943 -1.620 -1.330 -1.071 -0.842 -0.643 -0.472 -0.329 -0.212 -0.121 -0.056 -0.016 0.000 -0.008 -0.041 -0.097 -0.176 -0.278 -0.403 -0.550 -0.720 -0.913 -1.128 -1.366 -1.626 -1.909 -2.214 -2.542 -2.893 -3.266 -3.664 -4.084 -4.528 -4.997 -5.489 -6.007 -6.549 -7.117 -7.711 -8.331 -8.979 -9.653 -10.357 -11.089 -11.851 -12.643 -13.466 -14.322 -15.211 -16.135 -17.094 -18.090 -19.124 -20.198 -21.314 -22.473 -23.678 -24.930 -26.232 -27.587 -28.997 -30.466 -31.996 -33.591 -35.250 -36.972 -38.751 -40.566 -42.381 -44.129 -45.707 -46.996 -47.906 -48.429 -48.639 -48.647 -48.542 -48.374 -48.161 -47.894 -47.551 -47.104 -46.529 -45.814 -44.964 -43.998 -42.945 -41.833 -40.691 -39.542 -38.402 -37.282 -36.192 -35.136 -34.117 -33.138 -32.199 -31.300 -30.441 -29.622 -28.843 -28.102 -27.398 -26.732 -26.102 -25.507 -24.947 -24.421 -23.928 -23.468 -23.040 -22.643 -22.277 -21.942 -21.636 -21.360 -21.113 -20.894 -20.704 -20.541 -20.407 -20.300 -20.220 -20.168 -20.143 -20.144 -20.172 -20.228 -20.310 -20.418 -20.554 -20.717 -20.907 -21.124 -21.369 -21.642 -21.943 -22.272 -22.630 -23.017 -23.433 -23.879 -24.356 -24.863 -25.403 -25.975 -26.580 -27.220 -27.895 -28.606 -29.354 -30.140 -30.966 -31.834 -32.743 -33.696 -34.695 -35.742 -36.837 -37.984 -39.185 -40.440 -41.754 -43.127 -44.562 -46.061 -47.626 -49.258 -50.957 -52.723 -54.551 -56.412 -58.272 -60.132 0 1 1.0 1 N2 HH 20.21 25.51 0.05 -1.327e+10 -2.841e+10 -1.437e+10 -2.518e+10 -1.516e+10 -2.208e+10 -1.566e+10 -1.913e+10 -1.588e+10 -1.634e+10 -1.585e+10 -1.371e+10 -1.557e+10 -1.125e+10 -1.506e+10 -8.966e+09 -1.433e+10 -6.876e+09 -1.341e+10 -4.984e+09 -1.231e+10 -3.302e+09 -1.106e+10 -1.841e+09 -9.700e+09 -6.091e+08 -8.257e+09 3.883e+08 -6.785e+09 1.148e+09 -5.337e+09 1.674e+09 -3.968e+09 1.989e+09 -2.737e+09 2.131e+09 -1.682e+09 2.162e+09 -7.959e+08 2.173e+09 1.468e+07 2.269e+09 9.468e+08 2.514e+09 2.238e+09 2.885e+09 4.091e+09 3.290e+09 6.654e+09 3.611e+09 1.004e+10 3.722e+09 1.433e+10 3.494e+09 1.957e+10 2.797e+09 2.581e+10 1.496e+09 3.306e+10 -5.426e+08 4.130e+10 -3.451e+09 5.052e+10 -7.365e+09 6.063e+10 -1.241e+10 7.154e+10 -1.869e+10 8.316e+10 -2.632e+10 9.531e+10 -3.539e+10 1.078e+11 -4.596e+10 1.205e+11 -5.808e+10 1.331e+11 -7.177e+10 1.453e+11 -8.701e+10 1.570e+11 -1.038e+11 1.678e+11 -1.220e+11 1.773e+11 -1.416e+11 1.854e+11 -1.624e+11 1.917e+11 -1.842e+11 1.959e+11 -2.069e+11 1.978e+11 -2.303e+11 1.970e+11 -2.540e+11 1.933e+11 -2.780e+11 1.866e+11 -3.019e+11 1.766e+11 -3.255e+11 1.632e+11 -3.486e+11 1.463e+11 -3.710e+11 1.258e+11 -3.926e+11 1.015e+11 -4.133e+11 7.335e+10 -4.331e+11 4.109e+10 -4.520e+11 4.512e+09 -4.701e+11 -3.685e+10 -4.877e+11 -8.366e+10 -5.050e+11 -1.367e+11 -5.222e+11 -1.971e+11 -5.396e+11 -2.665e+11 -5.573e+11 -3.466e+11 -5.750e+11 -4.397e+11 -5.926e+11 -5.483e+11 -6.095e+11 -6.751e+11 -6.248e+11 -8.234e+11 -6.371e+11 -9.970e+11 -6.446e+11 -1.199e+12 -6.453e+11 -1.433e+12 -6.368e+11 -1.702e+12 -6.161e+11 -2.012e+12 -5.800e+11 -2.364e+12 -5.250e+11 -2.764e+12 -4.472e+11 -3.214e+12 -3.424e+11 -3.718e+12 -2.062e+11 -4.281e+12 -3.356e+10 -4.905e+12 1.802e+11 -5.593e+12 4.404e+11 -6.350e+12 7.527e+11 -7.177e+12 1.122e+12 -8.076e+12 1.555e+12 -9.051e+12 2.057e+12 -1.010e+13 2.634e+12 -1.123e+13 3.292e+12 -1.244e+13 4.037e+12 -1.374e+13 4.874e+12 -1.511e+13 5.809e+12 -1.656e+13 6.849e+12 -1.810e+13 7.998e+12 -1.971e+13 9.261e+12 -2.141e+13 1.064e+13 -2.318e+13 1.215e+13 -2.502e+13 1.378e+13 -2.694e+13 1.555e+13 -2.893e+13 1.745e+13 -3.098e+13 1.949e+13 -3.309e+13 2.166e+13 -3.527e+13 2.398e+13 -3.749e+13 2.644e+13 -3.978e+13 2.904e+13 -4.211e+13 3.179e+13 -4.448e+13 3.467e+13 -4.689e+13 3.769e+13 -4.932e+13 4.085e+13 -5.177e+13 4.414e+13 -5.424e+13 4.755e+13 -5.672e+13 5.109e+13 -5.920e+13 5.474e+13 -6.168e+13 5.851e+13 -6.414e+13 6.237e+13 -6.659e+13 6.632e+13 -6.902e+13 7.036e+13 -7.142e+13 7.448e+13 -7.378e+13 7.866e+13 -7.611e+13 8.289e+13 -7.839e+13 8.717e+13 -8.062e+13 9.148e+13 -8.281e+13 9.581e+13 -8.493e+13 1.001e+14 -8.700e+13 1.045e+14 -8.900e+13 1.088e+14 -9.094e+13 1.131e+14 -9.281e+13 1.174e+14 -9.462e+13 1.216e+14 -9.636e+13 1.258e+14 -9.803e+13 1.299e+14 -9.964e+13 1.339e+14 -1.012e+14 1.378e+14 -1.026e+14 1.416e+14 -1.041e+14 1.454e+14 -1.054e+14 1.490e+14 -1.067e+14 1.525e+14 -1.079e+14 1.559e+14 -1.091e+14 1.591e+14 -1.103e+14 1.623e+14 -1.114e+14 1.652e+14 -1.124e+14 1.681e+14 -1.135e+14 1.708e+14 -1.145e+14 1.734e+14 -1.155e+14 1.758e+14 -1.165e+14 1.782e+14 -1.175e+14 1.804e+14 -1.184e+14 1.825e+14 -1.194e+14 1.844e+14 -1.204e+14 1.862e+14 -1.213e+14 1.878e+14 -1.223e+14 1.894e+14 -1.233e+14 1.907e+14 -1.243e+14 1.920e+14 -1.254e+14 1.932e+14 -1.265e+14 1.942e+14 -1.276e+14 1.951e+14 -1.287e+14 1.959e+14 -1.299e+14 1.966e+14 -1.311e+14 1.973e+14 -1.324e+14 1.978e+14 -1.337e+14 1.982e+14 -1.350e+14 1.986e+14 -1.364e+14 1.989e+14 -1.378e+14 1.992e+14 -1.393e+14 1.994e+14 -1.408e+14 1.996e+14 -1.424e+14 1.997e+14 -1.440e+14 1.998e+14 -1.457e+14 1.998e+14 -1.474e+14 1.998e+14 -1.491e+14 1.998e+14 -1.509e+14 1.998e+14 -1.527e+14 1.998e+14 -1.545e+14 1.998e+14 -1.563e+14 1.997e+14 -1.582e+14 1.997e+14 -1.600e+14 1.997e+14 -1.619e+14 1.996e+14 -1.637e+14 1.996e+14 -1.655e+14 1.995e+14 -1.673e+14 1.995e+14 -1.691e+14 1.994e+14 -1.708e+14 1.994e+14 -1.725e+14 1.993e+14 -1.740e+14 1.993e+14 -1.755e+14 1.992e+14 -1.770e+14 1.991e+14 -1.783e+14 1.990e+14 -1.795e+14 1.989e+14 -1.806e+14 1.987e+14 -1.816e+14 1.985e+14 -1.824e+14 1.983e+14 -1.831e+14 1.980e+14 -1.837e+14 1.977e+14 -1.841e+14 1.972e+14 -1.843e+14 1.967e+14 -1.843e+14 1.962e+14 -1.841e+14 1.955e+14 -1.838e+14 1.948e+14 -1.832e+14 1.940e+14 -1.824e+14 1.930e+14 -1.814e+14 1.920e+14 -1.802e+14 1.908e+14 -1.788e+14 1.895e+14 -1.772e+14 1.881e+14 -1.753e+14 1.866e+14 -1.733e+14 1.849e+14 -1.710e+14 1.831e+14 -1.684e+14 1.811e+14 -1.657e+14 1.790e+14 -1.628e+14 1.768e+14 -1.597e+14 1.744e+14 -1.564e+14 1.719e+14 -1.529e+14 1.693e+14 -1.492e+14 1.664e+14 -1.453e+14 1.635e+14 -1.414e+14 1.604e+14 -1.372e+14 1.572e+14 -1.330e+14 1.539e+14 -1.286e+14 1.504e+14 -1.241e+14 1.468e+14 -1.196e+14 1.431e+14 -1.150e+14 1.393e+14 -1.104e+14 1.354e+14 -1.057e+14 1.315e+14 -1.010e+14 1.274e+14 -9.632e+13 1.233e+14 -9.163e+13 1.191e+14 -8.696e+13 1.149e+14 -8.233e+13 1.107e+14 -7.776e+13 1.064e+14 -7.325e+13 1.021e+14 -6.882e+13 9.776e+13 -6.448e+13 9.345e+13 -6.025e+13 8.916e+13 -5.612e+13 8.490e+13 -5.213e+13 8.067e+13 -4.827e+13 7.650e+13 -4.455e+13 7.239e+13 -4.098e+13 6.835e+13 -3.756e+13 6.439e+13 -3.430e+13 6.052e+13 -3.121e+13 5.675e+13 -2.828e+13 5.309e+13 -2.551e+13 4.954e+13 -2.291e+13 4.611e+13 -2.048e+13 4.280e+13 -1.821e+13 3.962e+13 -1.611e+13 3.658e+13 -1.416e+13 3.368e+13 -1.237e+13 3.092e+13 -1.073e+13 2.829e+13 -9.230e+12 2.581e+13 -7.871e+12 2.347e+13 -6.646e+12 2.128e+13 -5.547e+12 1.922e+13 -4.567e+12 1.730e+13 -3.699e+12 1.552e+13 -2.936e+12 1.386e+13 -2.270e+12 1.234e+13 -1.694e+12 1.094e+13 -1.201e+12 9.657e+12 -7.832e+11 8.489e+12 -4.333e+11 7.431e+12 -1.446e+11 6.475e+12 8.980e+10 5.615e+12 2.759e+11 4.846e+12 4.200e+11 4.161e+12 5.277e+11 3.554e+12 6.043e+11 3.020e+12 6.548e+11 2.552e+12 6.838e+11 2.144e+12 6.953e+11 1.791e+12 6.930e+11 1.487e+12 6.801e+11 1.227e+12 6.595e+11 1.006e+12 6.335e+11 8.186e+11 6.041e+11 6.604e+11 5.728e+11 5.275e+11 5.408e+11 4.162e+11 5.087e+11 3.229e+11 4.772e+11 2.449e+11 4.464e+11 1.797e+11 4.164e+11 1.250e+11 3.872e+11 7.941e+10 3.587e+11 4.138e+10 3.306e+11 9.857e+09 3.030e+11 -1.592e+10 2.757e+11 -3.664e+10 2.488e+11 -5.284e+10 2.224e+11 -6.492e+10 1.966e+11 -7.332e+10 1.715e+11 -7.839e+10 1.474e+11 -8.051e+10 1.245e+11 -8.006e+10 1.031e+11 -7.741e+10 8.329e+10 -7.298e+10 6.533e+10 -6.716e+10 4.935e+10 -6.035e+10 3.546e+10 -5.297e+10 2.371e+10 -4.540e+10 1.405e+10 -3.800e+10 6.980e+09 -3.122e+10 7.226e+08 -2.524e+10 -3.921e+09 -2.026e+10 -7.780e+09 -1.637e+10 -1.155e+10 -1.341e+10 -1.586e+10 -1.094e+10 -2.111e+10 -8.429e+09 -2.742e+10 -5.411e+09 -3.470e+10 -1.558e+09 -4.277e+10 3.285e+09 -5.139e+10 9.169e+09 -6.033e+10 1.607e+10 -6.933e+10 2.386e+10 -7.817e+10 3.243e+10 -8.665e+10 4.161e+10 -9.456e+10 5.121e+10 -1.018e+11 6.104e+10 -1.081e+11 7.090e+10 -1.134e+11 8.060e+10 -1.177e+11 8.996e+10 -1.209e+11 9.880e+10 -1.229e+11 1.069e+11 -1.238e+11 1.143e+11 -1.236e+11 1.207e+11 -1.222e+11 1.261e+11 -1.199e+11 1.303e+11 -1.166e+11 1.334e+11 -1.124e+11 1.354e+11 -1.075e+11 1.362e+11 -1.020e+11 1.358e+11 -9.597e+10 1.343e+11 -8.954e+10 1.318e+11 -8.282e+10 1.283e+11 -7.595e+10 1.239e+11 -6.902e+10 1.188e+11 -6.214e+10 1.130e+11 -5.542e+10 1.067e+11 -4.893e+10 9.995e+10 -4.273e+10 9.288e+10 -3.691e+10 8.564e+10 -3.149e+10 7.832e+10 -2.653e+10 7.104e+10 -2.203e+10 6.389e+10 -1.802e+10 5.694e+10 -1.448e+10 5.027e+10 -1.142e+10 4.394e+10 -8.814e+09 3.801e+10 -6.634e+09 3.251e+10 -4.853e+09 2.748e+10 -3.434e+09 2.292e+10 -2.336e+09 1.885e+10 -1.519e+09 1.526e+10 -9.403e+08 1.214e+10 -5.569e+08 9.463e+09 -3.287e+08 7.213e+09 -2.168e+08 5.353e+09 -1.855e+08 3.851e+09 -2.035e+08 2.673e+09 -2.446e+08 1.780e+09 -2.913e+08 1.136e+09 -3.407e+08 7.060e+08 -4.144e+08 4.438e+08 -5.566e+08 2.907e+08 -8.122e+08 1.816e+08 -1.209e+09 7.382e+07 -1.761e+09 -4.299e+07 -2.480e+09 -1.584e+08 -3.380e+09 -2.529e+08 -4.474e+09 -3.034e+08 -5.775e+09 -2.849e+08 -7.296e+09 -1.718e+08 -9.046e+09 6.203e+07 -1.103e+10 4.421e+08 -1.326e+10 9.941e+08 -1.573e+10 1.742e+09 -1.844e+10 2.708e+09 -2.138e+10 3.911e+09 -2.454e+10 5.369e+09 -2.789e+10 7.092e+09 -3.142e+10 9.090e+09 -3.509e+10 1.136e+10 -3.888e+10 1.391e+10 -4.276e+10 1.672e+10 -4.666e+10 1.977e+10 -5.056e+10 2.306e+10 -5.440e+10 2.653e+10 -5.814e+10 3.018e+10 -6.172e+10 3.394e+10 -6.510e+10 3.778e+10 -6.824e+10 4.166e+10 -7.108e+10 4.551e+10 -7.359e+10 4.928e+10 -7.574e+10 5.293e+10 -7.749e+10 5.639e+10 -7.881e+10 5.962e+10 -7.969e+10 6.256e+10 -8.011e+10 6.516e+10 -8.007e+10 6.738e+10 -7.956e+10 6.918e+10 -7.860e+10 7.054e+10 -7.719e+10 7.142e+10 -7.535e+10 7.181e+10 -7.311e+10 7.170e+10 -7.050e+10 7.109e+10 -6.755e+10 6.997e+10 -6.431e+10 6.838e+10 -6.081e+10 6.632e+10 -5.711e+10 6.383e+10 -5.324e+10 6.094e+10 -4.926e+10 5.770e+10 -4.522e+10 5.415e+10 -4.116e+10 5.034e+10 -3.713e+10 4.634e+10 -3.317e+10 4.219e+10 -2.933e+10 3.797e+10 -2.564e+10 3.372e+10 -2.214e+10 2.952e+10 -1.885e+10 2.542e+10 -1.581e+10 2.148e+10 -1.302e+10 1.776e+10 -1.051e+10 1.430e+10 -8.280e+09 1.115e+10 -6.338e+09 8.342e+09 -4.684e+09 5.919e+09 -3.309e+09 3.900e+09 -2.206e+09 2.305e+09 -1.361e+09 1.142e+09 -7.673e+08 3.948e+08 -4.351e+08 -2.002e+07 -3.306e+08 -3.720e+08 -3.115e+08 -9.640e+08 -2.595e+08 -1.915e+09 -1.484e+08 -3.219e+09 5.998e+06 -4.843e+09 1.778e+08 -6.743e+09 3.391e+08 -8.875e+09 4.631e+08 -1.119e+10 5.245e+08 -1.365e+10 5.010e+08 -1.619e+10 3.732e+08 -1.876e+10 1.252e+08 -2.132e+10 -2.550e+08 -2.382e+10 -7.762e+08 -2.622e+10 -1.443e+09 -2.847e+10 -2.255e+09 -3.054e+10 -3.211e+09 -3.240e+10 -4.305e+09 -3.403e+10 -5.527e+09 -3.539e+10 -6.870e+09 -3.650e+10 -8.318e+09 -3.732e+10 -9.859e+09 -3.787e+10 -1.148e+10 -3.814e+10 -1.317e+10 -3.815e+10 -1.491e+10 -3.790e+10 -1.669e+10 -3.742e+10 -1.850e+10 -3.672e+10 -2.035e+10 -3.582e+10 -2.221e+10 -3.475e+10 -2.410e+10 -3.352e+10 -2.602e+10 -3.216e+10 -2.797e+10 -3.069e+10 -2.996e+10 -2.912e+10 -3.201e+10 -2.746e+10 -3.413e+10 -2.572e+10 -3.632e+10 -2.389e+10 -3.860e+10 -2.198e+10 -4.097e+10 -1.998e+10 -4.345e+10 -1.789e+10 -4.603e+10 -1.569e+10 -4.872e+10 -1.336e+10 -5.150e+10 -1.092e+10 -5.438e+10 -8.334e+09 -5.733e+10 -5.608e+09 -6.035e+10 -2.737e+09 -6.340e+10 2.781e+08 -6.647e+10 3.435e+09 -6.953e+10 6.724e+09 -7.254e+10 1.013e+10 -7.549e+10 1.364e+10 -7.834e+10 1.723e+10 -8.106e+10 2.087e+10 -8.363e+10 2.455e+10 -8.601e+10 2.823e+10 -8.817e+10 3.187e+10 -9.010e+10 3.545e+10 -9.177e+10 3.894e+10 -9.316e+10 4.229e+10 -9.426e+10 4.548e+10 -9.506e+10 4.848e+10 -9.553e+10 5.126e+10 -9.569e+10 5.380e+10 -9.552e+10 5.606e+10 -9.503e+10 5.804e+10 -9.423e+10 5.970e+10 -9.311e+10 6.105e+10 -9.170e+10 6.208e+10 -9.000e+10 6.277e+10 -8.804e+10 6.314e+10 -8.583e+10 6.317e+10 -8.339e+10 6.289e+10 -8.075e+10 6.231e+10 -7.795e+10 6.144e+10 -7.499e+10 6.029e+10 -7.191e+10 5.889e+10 -6.872e+10 5.726e+10 -6.544e+10 5.543e+10 -6.211e+10 5.340e+10 -5.875e+10 5.123e+10 -5.538e+10 4.892e+10 -5.203e+10 4.651e+10 -4.871e+10 4.402e+10 -4.544e+10 4.148e+10 -4.224e+10 3.891e+10 -3.913e+10 3.633e+10 -3.612e+10 3.378e+10 -3.322e+10 3.126e+10 -3.044e+10 2.879e+10 -2.778e+10 2.640e+10 -2.527e+10 2.408e+10 -2.289e+10 2.187e+10 -2.065e+10 1.976e+10 -1.856e+10 1.776e+10 -1.661e+10 1.588e+10 -1.481e+10 1.412e+10 -1.314e+10 1.249e+10 -1.161e+10 1.098e+10 -1.021e+10 9.598e+09 -8.941e+09 8.335e+09 -7.790e+09 7.193e+09 -6.755e+09 6.164e+09 -5.827e+09 5.244e+09 -5.000e+09 4.429e+09 -4.269e+09 3.710e+09 -3.623e+09 3.082e+09 -3.060e+09 2.538e+09 -2.570e+09 2.071e+09 -2.145e+09 1.672e+09 -1.781e+09 1.336e+09 -1.470e+09 1.054e+09 -1.206e+09 8.216e+08 -9.839e+08 6.315e+08 -7.989e+08 4.779e+08 -6.456e+08 3.554e+08 -5.198e+08 2.591e+08 -4.173e+08 1.845e+08 -3.346e+08 1.276e+08 -2.685e+08 8.490e+07 -2.161e+08 5.346e+07 -1.750e+08 3.065e+07 -1.430e+08 1.441e+07 -1.182e+08 3.042e+06 -9.928e+07 -4.795e+06 -8.483e+07 -1.008e+07 -7.389e+07 -1.354e+07 -6.565e+07 -1.568e+07 -5.955e+07 -1.686e+07 -5.513e+07 -1.734e+07 -5.209e+07 -1.730e+07 -5.020e+07 -1.688e+07 -4.931e+07 -1.619e+07 -4.932e+07 -1.532e+07 -5.017e+07 -1.434e+07 -5.178e+07 -1.331e+07 -5.411e+07 -1.226e+07 -5.712e+07 -1.126e+07 -6.072e+07 -1.034e+07 -6.484e+07 -9.557e+06 -6.938e+07 -8.967e+06 -7.423e+07 -8.636e+06 -7.926e+07 -8.633e+06 -8.433e+07 -9.028e+06 -8.929e+07 -9.882e+06 -9.400e+07 -1.125e+07 -9.831e+07 -1.318e+07 -1.021e+08 -1.569e+07 -1.052e+08 -1.878e+07 -1.075e+08 -2.245e+07 -1.090e+08 -2.666e+07 -1.095e+08 -3.135e+07 -1.091e+08 -3.647e+07 -1.077e+08 -4.194e+07 -1.053e+08 -4.766e+07 -1.019e+08 -5.357e+07 -9.761e+07 -5.958e+07 -9.242e+07 -6.564e+07 -8.640e+07 -7.167e+07 -7.961e+07 -7.764e+07 -7.208e+07 -8.353e+07 -6.384e+07 -8.933e+07 -5.494e+07 -9.505e+07 -4.532e+07 -1.007e+08 -3.491e+07 -1.064e+08 -2.362e+07 -1.122e+08 -1.125e+07 -1.180e+08 2.429e+06 -1.241e+08 1.772e+07 -1.302e+08 3.499e+07 -1.365e+08 5.470e+07 -1.429e+08 7.734e+07 -1.492e+08 1.035e+08 -1.552e+08 1.338e+08 -1.607e+08 0.005 -63.526 -61.163 -58.799 -56.436 -54.073 -51.736 -49.640 -47.731 -45.971 -44.335 -42.805 -41.367 -40.010 -38.727 -37.512 -36.359 -35.264 -34.223 -33.233 -32.291 -31.396 -30.545 -29.736 -28.967 -28.237 -27.546 -26.890 -26.270 -25.685 -25.133 -24.614 -24.127 -23.672 -23.247 -22.853 -22.488 -22.152 -21.846 -21.568 -21.318 -21.097 -20.903 -20.737 -20.598 -20.487 -20.403 -20.346 -20.317 -20.315 -20.341 -20.394 -20.475 -20.584 -20.721 -20.887 -21.081 -21.305 -21.557 -21.840 -22.153 -22.496 -22.871 -23.278 -23.717 -24.190 -24.697 -25.240 -25.818 -26.433 -27.086 -27.779 -28.512 -29.288 -30.108 -30.974 -31.887 -32.850 -33.865 -34.934 -36.060 -37.242 -38.483 -39.779 -41.123 -42.498 -43.875 -45.201 -46.400 -47.380 -48.063 -48.421 -48.494 -48.364 -48.118 -47.817 -47.500 -47.178 -46.846 -46.482 -46.051 -45.508 -44.805 -43.912 -42.822 -41.555 -40.151 -38.658 -37.117 -35.562 -34.017 -32.498 -31.014 -29.571 -28.173 -26.821 -25.514 -24.253 -23.036 -21.863 -20.733 -19.643 -18.594 -17.583 -16.609 -15.672 -14.770 -13.903 -13.068 -12.266 -11.495 -10.755 -10.045 -9.363 -8.711 -8.086 -7.488 -6.918 -6.373 -5.855 -5.362 -4.894 -4.450 -4.031 -3.637 -3.266 -2.919 -2.595 -2.295 -2.018 -1.764 -1.533 -1.326 -1.143 -0.982 -0.845 -0.731 -0.641 -0.574 -0.532 -0.514 -0.521 -0.553 -0.611 -0.694 -0.805 -0.942 -1.108 -1.303 -1.528 -1.784 -2.071 -2.393 -2.749 -3.142 -3.574 -4.046 -4.562 -5.124 -5.736 -6.401 -7.124 -7.910 -8.766 -9.698 -10.716 -11.831 -13.057 -14.410 -15.914 -17.598 -19.503 -21.685 -24.232 -27.279 -31.071 -36.117 -43.917 -73.570 -51.862 -49.536 -47.291 -39.975 -34.117 -29.718 -26.240 -23.376 -20.948 -18.849 -17.004 -15.365 -13.896 -12.569 -11.364 -10.266 -9.260 -8.338 -7.490 -6.709 -5.990 -5.327 -4.717 -4.155 -3.638 -3.163 -2.729 -2.332 -1.971 -1.645 -1.352 -1.090 -0.859 -0.657 -0.484 -0.338 -0.219 -0.126 -0.059 -0.017 0.000 -0.007 -0.038 -0.092 -0.170 -0.271 -0.395 -0.542 -0.711 -0.903 -1.118 -1.355 -1.615 -1.897 -2.203 -2.531 -2.883 -3.257 -3.655 -4.077 -4.522 -4.992 -5.486 -6.005 -6.550 -7.120 -7.717 -8.341 -8.992 -9.671 -10.380 -11.118 -11.886 -12.687 -13.519 -14.386 -15.288 -16.226 -17.202 -18.219 -19.277 -20.380 -21.530 -22.730 -23.984 -25.296 -26.672 -28.117 -29.640 -31.250 -32.959 -34.783 -36.740 -38.854 -41.156 -43.674 -46.419 -49.309 -51.981 -53.664 -53.955 -53.488 -52.986 -52.769 -52.928 -53.519 -54.637 -56.468 -59.270 -62.314 -61.285 -56.445 -52.345 -49.144 -46.530 -44.311 -42.371 -40.641 -39.075 -37.641 -36.318 -35.089 -33.942 -32.868 -31.859 -30.910 -30.016 -29.173 -28.378 -27.629 -26.922 -26.256 -25.630 -25.041 -24.489 -23.972 -23.489 -23.039 -22.622 -22.237 -21.882 -21.558 -21.263 -20.998 -20.761 -20.552 -20.372 -20.219 -20.093 -19.995 -19.923 -19.878 -19.859 -19.867 -19.901 -19.961 -20.047 -20.160 -20.298 -20.462 -20.653 -20.870 -21.113 -21.383 -21.679 -22.003 -22.354 -22.732 -23.137 -23.571 -24.034 -24.525 -25.045 -25.595 -26.175 -26.786 -27.428 -28.101 -28.807 -29.546 -30.318 -31.123 -31.963 -32.839 -33.749 -34.695 -35.678 -36.696 -37.751 -38.841 -39.967 -41.126 -42.318 -43.541 -44.791 -46.064 -47.355 -48.658 -49.964 -51.269 -52.575 -53.881 -55.187 0 1 1.0 1 N2 HV 20.21 25.51 0.05 -3.904e+10 4.509e+09 -3.853e+10 7.391e+09 -3.788e+10 1.012e+10 -3.705e+10 1.266e+10 -3.602e+10 1.498e+10 -3.476e+10 1.705e+10 -3.327e+10 1.881e+10 -3.153e+10 2.024e+10 -2.954e+10 2.128e+10 -2.733e+10 2.191e+10 -2.490e+10 2.209e+10 -2.229e+10 2.182e+10 -1.956e+10 2.110e+10 -1.674e+10 1.995e+10 -1.391e+10 1.839e+10 -1.113e+10 1.649e+10 -8.489e+09 1.431e+10 -6.056e+09 1.195e+10 -3.910e+09 9.526e+09 -2.117e+09 7.149e+09 -7.399e+08 4.965e+09 2.027e+08 3.122e+09 7.814e+08 1.756e+09 1.286e+09 8.703e+08 2.179e+09 7.844e+07 3.728e+09 -1.209e+09 5.962e+09 -3.419e+09 8.829e+09 -6.800e+09 1.226e+10 -1.152e+10 1.616e+10 -1.771e+10 2.043e+10 -2.544e+10 2.493e+10 -3.482e+10 2.953e+10 -4.586e+10 3.405e+10 -5.859e+10 3.832e+10 -7.298e+10 4.214e+10 -8.899e+10 4.531e+10 -1.065e+11 4.762e+10 -1.255e+11 4.887e+10 -1.456e+11 4.884e+10 -1.669e+11 4.735e+10 -1.889e+11 4.419e+10 -2.116e+11 3.919e+10 -2.345e+11 3.221e+10 -2.574e+11 2.310e+10 -2.799e+11 1.177e+10 -3.017e+11 -1.879e+09 -3.224e+11 -1.789e+10 -3.417e+11 -3.628e+10 -3.592e+11 -5.707e+10 -3.746e+11 -8.026e+10 -3.876e+11 -1.058e+11 -3.979e+11 -1.337e+11 -4.054e+11 -1.639e+11 -4.098e+11 -1.966e+11 -4.111e+11 -2.317e+11 -4.091e+11 -2.696e+11 -4.039e+11 -3.105e+11 -3.954e+11 -3.550e+11 -3.836e+11 -4.037e+11 -3.682e+11 -4.575e+11 -3.490e+11 -5.175e+11 -3.256e+11 -5.850e+11 -2.971e+11 -6.616e+11 -2.626e+11 -7.488e+11 -2.204e+11 -8.485e+11 -1.687e+11 -9.623e+11 -1.052e+11 -1.092e+12 -2.719e+10 -1.240e+12 6.898e+10 -1.408e+12 1.864e+11 -1.597e+12 3.291e+11 -1.809e+12 5.014e+11 -2.044e+12 7.074e+11 -2.305e+12 9.519e+11 -2.593e+12 1.240e+12 -2.907e+12 1.577e+12 -3.249e+12 1.968e+12 -3.620e+12 2.419e+12 -4.019e+12 2.934e+12 -4.448e+12 3.521e+12 -4.905e+12 4.184e+12 -5.391e+12 4.930e+12 -5.904e+12 5.764e+12 -6.445e+12 6.693e+12 -7.012e+12 7.722e+12 -7.604e+12 8.856e+12 -8.220e+12 1.010e+13 -8.857e+12 1.147e+13 -9.514e+12 1.295e+13 -1.019e+13 1.456e+13 -1.088e+13 1.630e+13 -1.158e+13 1.818e+13 -1.230e+13 2.019e+13 -1.302e+13 2.235e+13 -1.374e+13 2.464e+13 -1.447e+13 2.709e+13 -1.519e+13 2.967e+13 -1.591e+13 3.240e+13 -1.662e+13 3.528e+13 -1.731e+13 3.830e+13 -1.799e+13 4.146e+13 -1.866e+13 4.477e+13 -1.931e+13 4.821e+13 -1.993e+13 5.178e+13 -2.052e+13 5.548e+13 -2.108e+13 5.929e+13 -2.161e+13 6.322e+13 -2.210e+13 6.725e+13 -2.256e+13 7.138e+13 -2.297e+13 7.560e+13 -2.334e+13 7.990e+13 -2.367e+13 8.427e+13 -2.395e+13 8.871e+13 -2.419e+13 9.319e+13 -2.439e+13 9.773e+13 -2.454e+13 1.023e+14 -2.465e+13 1.069e+14 -2.471e+13 1.115e+14 -2.474e+13 1.161e+14 -2.472e+13 1.207e+14 -2.467e+13 1.253e+14 -2.459e+13 1.299e+14 -2.448e+13 1.345e+14 -2.434e+13 1.390e+14 -2.418e+13 1.435e+14 -2.400e+13 1.479e+14 -2.381e+13 1.523e+14 -2.361e+13 1.566e+14 -2.340e+13 1.608e+14 -2.320e+13 1.650e+14 -2.300e+13 1.690e+14 -2.282e+13 1.730e+14 -2.265e+13 1.769e+14 -2.251e+13 1.806e+14 -2.239e+13 1.843e+14 -2.231e+13 1.878e+14 -2.227e+13 1.913e+14 -2.227e+13 1.946e+14 -2.232e+13 1.978e+14 -2.242e+13 2.008e+14 -2.258e+13 2.037e+14 -2.279e+13 2.066e+14 -2.307e+13 2.093e+14 -2.341e+13 2.119e+14 -2.382e+13 2.143e+14 -2.431e+13 2.166e+14 -2.487e+13 2.188e+14 -2.550e+13 2.209e+14 -2.622e+13 2.228e+14 -2.701e+13 2.246e+14 -2.788e+13 2.263e+14 -2.884e+13 2.279e+14 -2.988e+13 2.294e+14 -3.099e+13 2.308e+14 -3.220e+13 2.321e+14 -3.348e+13 2.334e+14 -3.484e+13 2.345e+14 -3.629e+13 2.356e+14 -3.781e+13 2.367e+14 -3.941e+13 2.377e+14 -4.109e+13 2.386e+14 -4.285e+13 2.396e+14 -4.468e+13 2.405e+14 -4.658e+13 2.413e+14 -4.855e+13 2.422e+14 -5.059e+13 2.430e+14 -5.269e+13 2.439e+14 -5.485e+13 2.447e+14 -5.707e+13 2.455e+14 -5.933e+13 2.464e+14 -6.165e+13 2.472e+14 -6.401e+13 2.480e+14 -6.640e+13 2.489e+14 -6.882e+13 2.497e+14 -7.126e+13 2.505e+14 -7.371e+13 2.514e+14 -7.617e+13 2.522e+14 -7.863e+13 2.529e+14 -8.108e+13 2.537e+14 -8.350e+13 2.544e+14 -8.589e+13 2.551e+14 -8.821e+13 2.557e+14 -9.047e+13 2.563e+14 -9.266e+13 2.568e+14 -9.478e+13 2.573e+14 -9.682e+13 2.576e+14 -9.876e+13 2.579e+14 -1.006e+14 2.581e+14 -1.023e+14 2.582e+14 -1.039e+14 2.582e+14 -1.054e+14 2.580e+14 -1.067e+14 2.577e+14 -1.079e+14 2.573e+14 -1.089e+14 2.567e+14 -1.098e+14 2.560e+14 -1.105e+14 2.552e+14 -1.110e+14 2.541e+14 -1.113e+14 2.529e+14 -1.115e+14 2.515e+14 -1.115e+14 2.500e+14 -1.113e+14 2.482e+14 -1.109e+14 2.463e+14 -1.103e+14 2.441e+14 -1.095e+14 2.418e+14 -1.086e+14 2.393e+14 -1.075e+14 2.366e+14 -1.062e+14 2.336e+14 -1.048e+14 2.305e+14 -1.031e+14 2.272e+14 -1.014e+14 2.237e+14 -9.942e+13 2.199e+14 -9.734e+13 2.160e+14 -9.512e+13 2.119e+14 -9.276e+13 2.076e+14 -9.029e+13 2.032e+14 -8.770e+13 1.986e+14 -8.500e+13 1.938e+14 -8.221e+13 1.889e+14 -7.933e+13 1.838e+14 -7.638e+13 1.786e+14 -7.338e+13 1.733e+14 -7.033e+13 1.679e+14 -6.726e+13 1.624e+14 -6.415e+13 1.568e+14 -6.102e+13 1.512e+14 -5.789e+13 1.456e+14 -5.476e+13 1.399e+14 -5.165e+13 1.342e+14 -4.856e+13 1.284e+14 -4.552e+13 1.227e+14 -4.252e+13 1.171e+14 -3.958e+13 1.114e+14 -3.672e+13 1.059e+14 -3.393e+13 1.004e+14 -3.123e+13 9.500e+13 -2.863e+13 8.970e+13 -2.613e+13 8.451e+13 -2.374e+13 7.945e+13 -2.146e+13 7.452e+13 -1.929e+13 6.974e+13 -1.724e+13 6.511e+13 -1.532e+13 6.064e+13 -1.352e+13 5.633e+13 -1.184e+13 5.220e+13 -1.029e+13 4.824e+13 -8.849e+12 4.446e+13 -7.531e+12 4.087e+13 -6.328e+12 3.746e+13 -5.237e+12 3.423e+13 -4.253e+12 3.118e+13 -3.372e+12 2.832e+13 -2.589e+12 2.563e+13 -1.899e+12 2.313e+13 -1.296e+12 2.079e+13 -7.734e+11 1.862e+13 -3.268e+11 1.662e+13 5.021e+10 1.477e+13 3.638e+11 1.308e+13 6.195e+11 1.153e+13 8.230e+11 1.012e+13 9.802e+11 8.845e+12 1.096e+12 7.695e+12 1.177e+12 6.662e+12 1.226e+12 5.738e+12 1.248e+12 4.916e+12 1.248e+12 4.189e+12 1.230e+12 3.549e+12 1.197e+12 2.989e+12 1.153e+12 2.501e+12 1.100e+12 2.079e+12 1.042e+12 1.717e+12 9.800e+11 1.407e+12 9.168e+11 1.143e+12 8.538e+11 9.212e+11 7.924e+11 7.344e+11 7.333e+11 5.781e+11 6.773e+11 4.480e+11 6.247e+11 3.400e+11 5.756e+11 2.503e+11 5.300e+11 1.762e+11 4.875e+11 1.149e+11 4.477e+11 6.415e+10 4.104e+11 2.245e+10 3.751e+11 -1.165e+10 3.414e+11 -3.924e+10 3.092e+11 -6.111e+10 2.781e+11 -7.793e+10 2.482e+11 -9.024e+10 2.194e+11 -9.847e+10 1.917e+11 -1.030e+11 1.653e+11 -1.044e+11 1.404e+11 -1.029e+11 1.171e+11 -9.890e+10 9.546e+10 -9.291e+10 7.581e+10 -8.532e+10 5.823e+10 -7.658e+10 4.279e+10 -6.710e+10 2.959e+10 -5.732e+10 1.862e+10 -4.766e+10 9.808e+09 -3.848e+10 3.177e+09 -3.024e+10 -1.819e+09 -2.314e+10 -5.545e+09 -1.732e+10 -8.546e+09 -1.286e+10 -1.160e+10 -9.462e+09 -1.542e+10 -6.484e+09 -2.035e+10 -3.202e+09 -2.646e+10 9.668e+08 -3.360e+10 6.361e+09 -4.150e+10 1.310e+10 -4.994e+10 2.118e+10 -5.867e+10 3.052e+10 -6.743e+10 4.094e+10 -7.600e+10 5.224e+10 -8.420e+10 6.422e+10 -9.183e+10 7.660e+10 -9.873e+10 8.915e+10 -1.048e+11 1.016e+11 -1.099e+11 1.138e+11 -1.139e+11 1.254e+11 -1.168e+11 1.362e+11 -1.186e+11 1.460e+11 -1.192e+11 1.548e+11 -1.187e+11 1.623e+11 -1.171e+11 1.684e+11 -1.144e+11 1.732e+11 -1.108e+11 1.764e+11 -1.063e+11 1.782e+11 -1.011e+11 1.785e+11 -9.513e+10 1.774e+11 -8.866e+10 1.750e+11 -8.177e+10 1.713e+11 -7.459e+10 1.664e+11 -6.724e+10 1.605e+11 -5.986e+10 1.537e+11 -5.253e+10 1.462e+11 -4.539e+10 1.380e+11 -3.852e+10 1.294e+11 -3.201e+10 1.204e+11 -2.592e+10 1.112e+11 -2.032e+10 1.019e+11 -1.525e+10 9.272e+10 -1.072e+10 8.369e+10 -6.769e+09 7.491e+10 -3.381e+09 6.647e+10 -5.534e+08 5.844e+10 1.739e+09 5.089e+10 3.526e+09 4.385e+10 4.844e+09 3.738e+10 5.740e+09 3.147e+10 6.260e+09 2.614e+10 6.457e+09 2.139e+10 6.382e+09 1.721e+10 6.087e+09 1.358e+10 5.622e+09 1.048e+10 5.034e+09 7.862e+09 4.367e+09 5.699e+09 3.663e+09 3.954e+09 2.957e+09 2.582e+09 2.282e+09 1.543e+09 1.667e+09 7.939e+08 1.138e+09 2.907e+08 7.176e+08 -1.629e+07 4.172e+08 -1.921e+08 2.146e+08 -3.270e+08 3.105e+07 -5.095e+08 -2.370e+08 -7.773e+08 -6.649e+08 -1.118e+09 -1.295e+09 -1.503e+09 -2.156e+09 -1.901e+09 -3.269e+09 -2.286e+09 -4.654e+09 -2.628e+09 -6.326e+09 -2.899e+09 -8.302e+09 -3.073e+09 -1.059e+10 -3.121e+09 -1.320e+10 -3.019e+09 -1.613e+10 -2.741e+09 -1.938e+10 -2.265e+09 -2.293e+10 -1.572e+09 -2.679e+10 -6.461e+08 -3.091e+10 5.240e+08 -3.528e+10 1.943e+09 -3.986e+10 3.617e+09 -4.462e+10 5.542e+09 -4.949e+10 7.711e+09 -5.443e+10 1.011e+10 -5.939e+10 1.273e+10 -6.430e+10 1.553e+10 -6.911e+10 1.850e+10 -7.374e+10 2.160e+10 -7.814e+10 2.479e+10 -8.226e+10 2.805e+10 -8.601e+10 3.132e+10 -8.937e+10 3.456e+10 -9.226e+10 3.774e+10 -9.467e+10 4.080e+10 -9.654e+10 4.371e+10 -9.785e+10 4.643e+10 -9.858e+10 4.891e+10 -9.873e+10 5.111e+10 -9.830e+10 5.301e+10 -9.729e+10 5.457e+10 -9.572e+10 5.577e+10 -9.362e+10 5.658e+10 -9.102e+10 5.700e+10 -8.797e+10 5.701e+10 -8.450e+10 5.662e+10 -8.067e+10 5.581e+10 -7.654e+10 5.461e+10 -7.216e+10 5.303e+10 -6.759e+10 5.109e+10 -6.288e+10 4.883e+10 -5.810e+10 4.626e+10 -5.329e+10 4.343e+10 -4.852e+10 4.038e+10 -4.382e+10 3.716e+10 -3.925e+10 3.382e+10 -3.484e+10 3.041e+10 -3.063e+10 2.697e+10 -2.665e+10 2.357e+10 -2.293e+10 2.025e+10 -1.948e+10 1.706e+10 -1.631e+10 1.406e+10 -1.345e+10 1.127e+10 -1.090e+10 8.736e+09 -8.652e+09 6.494e+09 -6.714e+09 4.566e+09 -5.076e+09 2.968e+09 -3.735e+09 1.703e+09 -2.687e+09 7.595e+08 -1.928e+09 8.834e+07 -1.448e+09 -4.115e+08 -1.198e+09 -9.001e+08 -1.086e+09 -1.537e+09 -1.014e+09 -2.413e+09 -9.234e+08 -3.546e+09 -7.945e+08 -4.919e+09 -6.319e+08 -6.500e+09 -4.506e+08 -8.248e+09 -2.702e+08 -1.013e+10 -1.120e+08 -1.209e+10 3.325e+06 -1.411e+10 5.612e+07 -1.613e+10 2.857e+07 -1.813e+10 -9.463e+07 -2.006e+10 -3.263e+08 -2.190e+10 -6.762e+08 -2.362e+10 -1.151e+09 -2.519e+10 -1.755e+09 -2.659e+10 -2.490e+09 -2.782e+10 -3.353e+09 -2.886e+10 -4.342e+09 -2.971e+10 -5.451e+09 -3.036e+10 -6.673e+09 -3.081e+10 -8.003e+09 -3.108e+10 -9.431e+09 -3.117e+10 -1.095e+10 -3.110e+10 -1.256e+10 -3.087e+10 -1.426e+10 -3.051e+10 -1.604e+10 -3.002e+10 -1.790e+10 -2.943e+10 -1.986e+10 -2.874e+10 -2.192e+10 -2.797e+10 -2.408e+10 -2.712e+10 -2.635e+10 -2.619e+10 -2.875e+10 -2.519e+10 -3.127e+10 -2.411e+10 -3.394e+10 -2.294e+10 -3.676e+10 -2.168e+10 -3.972e+10 -2.032e+10 -4.283e+10 -1.885e+10 -4.608e+10 -1.726e+10 -4.947e+10 -1.554e+10 -5.299e+10 -1.368e+10 -5.661e+10 -1.168e+10 -6.031e+10 -9.546e+09 -6.408e+10 -7.270e+09 -6.789e+10 -4.865e+09 -7.170e+10 -2.336e+09 -7.550e+10 3.018e+08 -7.923e+10 3.031e+09 -8.289e+10 5.836e+09 -8.642e+10 8.693e+09 -8.979e+10 1.158e+10 -9.298e+10 1.447e+10 -9.595e+10 1.733e+10 -9.867e+10 2.015e+10 -1.011e+11 2.290e+10 -1.032e+11 2.554e+10 -1.050e+11 2.806e+10 -1.065e+11 3.044e+10 -1.076e+11 3.264e+10 -1.083e+11 3.466e+10 -1.086e+11 3.648e+10 -1.085e+11 3.809e+10 -1.080e+11 3.947e+10 -1.072e+11 4.061e+10 -1.059e+11 4.152e+10 -1.043e+11 4.219e+10 -1.023e+11 4.262e+10 -9.997e+10 4.281e+10 -9.735e+10 4.278e+10 -9.444e+10 4.252e+10 -9.128e+10 4.206e+10 -8.790e+10 4.140e+10 -8.432e+10 4.055e+10 -8.059e+10 3.954e+10 -7.675e+10 3.838e+10 -7.281e+10 3.709e+10 -6.882e+10 3.567e+10 -6.482e+10 3.416e+10 -6.082e+10 3.257e+10 -5.686e+10 3.091e+10 -5.297e+10 2.921e+10 -4.917e+10 2.747e+10 -4.548e+10 2.572e+10 -4.191e+10 2.397e+10 -3.848e+10 2.223e+10 -3.521e+10 2.052e+10 -3.210e+10 1.885e+10 -2.915e+10 1.722e+10 -2.638e+10 1.566e+10 -2.378e+10 1.416e+10 -2.136e+10 1.273e+10 -1.910e+10 1.137e+10 -1.702e+10 1.010e+10 -1.510e+10 8.919e+09 -1.334e+10 7.820e+09 -1.173e+10 6.808e+09 -1.027e+10 5.883e+09 -8.946e+09 5.043e+09 -7.754e+09 4.287e+09 -6.686e+09 3.612e+09 -5.732e+09 3.014e+09 -4.889e+09 2.489e+09 -4.145e+09 2.034e+09 -3.492e+09 1.640e+09 -2.924e+09 1.306e+09 -2.433e+09 1.024e+09 -2.012e+09 7.892e+08 -1.653e+09 5.965e+08 -1.350e+09 4.404e+08 -1.097e+09 3.158e+08 -8.870e+08 2.181e+08 -7.149e+08 1.429e+08 -5.750e+08 8.607e+07 -4.629e+08 4.403e+07 -3.740e+08 1.361e+07 -3.042e+08 -7.961e+06 -2.503e+08 -2.291e+07 -2.091e+08 -3.309e+07 -1.781e+08 -3.994e+07 -1.553e+08 -4.451e+07 -1.389e+08 -4.757e+07 -1.278e+08 -4.966e+07 -1.209e+08 -5.111e+07 -1.176e+08 -5.218e+07 -1.173e+08 -5.304e+07 -1.199e+08 -5.380e+07 -1.250e+08 -5.457e+07 -1.325e+08 -5.540e+07 -1.423e+08 -5.637e+07 -1.541e+08 -5.751e+07 -1.679e+08 -5.888e+07 -1.834e+08 -6.053e+07 -2.002e+08 -6.250e+07 -2.181e+08 -6.487e+07 -2.366e+08 -6.769e+07 -2.553e+08 -7.103e+07 -2.737e+08 -7.495e+07 -2.914e+08 -7.950e+07 -3.080e+08 -8.471e+07 -3.230e+08 -9.061e+07 -3.361e+08 -9.719e+07 -3.471e+08 -1.044e+08 -3.556e+08 -1.123e+08 -3.616e+08 -1.208e+08 -3.650e+08 -1.298e+08 -3.658e+08 -1.393e+08 -3.641e+08 -1.492e+08 -3.599e+08 -1.594e+08 -3.534e+08 -1.699e+08 -3.449e+08 -1.806e+08 -3.344e+08 -1.915e+08 -3.223e+08 -2.026e+08 -3.088e+08 -2.140e+08 -2.939e+08 -2.256e+08 -2.781e+08 -2.377e+08 -2.612e+08 -2.501e+08 -2.437e+08 -2.632e+08 -2.254e+08 -2.770e+08 -2.064e+08 -2.918e+08 -1.866e+08 -3.078e+08 -1.660e+08 -3.251e+08 -1.442e+08 -3.440e+08 -1.211e+08 -3.646e+08 -9.623e+07 -3.872e+08 -6.922e+07 -4.117e+08 -3.968e+07 -4.382e+08 -7.154e+06 -4.665e+08 2.881e+07 -4.966e+08 0.005 -64.630 -62.268 -59.907 -57.545 -55.183 -52.847 -50.746 -48.825 -47.049 -45.392 -43.838 -42.373 -40.989 -39.677 -38.432 -37.250 -36.126 -35.057 -34.040 -33.073 -32.152 -31.277 -30.445 -29.654 -28.904 -28.193 -27.519 -26.882 -26.280 -25.712 -25.178 -24.677 -24.207 -23.769 -23.362 -22.985 -22.638 -22.321 -22.032 -21.771 -21.539 -21.335 -21.159 -21.010 -20.889 -20.794 -20.728 -20.688 -20.676 -20.691 -20.733 -20.803 -20.901 -21.026 -21.179 -21.360 -21.570 -21.809 -22.076 -22.373 -22.700 -23.057 -23.446 -23.865 -24.317 -24.802 -25.320 -25.873 -26.460 -27.085 -27.746 -28.447 -29.187 -29.969 -30.794 -31.664 -32.581 -33.546 -34.563 -35.633 -36.756 -37.934 -39.163 -40.437 -41.739 -43.040 -44.286 -45.403 -46.299 -46.897 -47.170 -47.159 -46.947 -46.622 -46.249 -45.865 -45.485 -45.104 -44.701 -44.242 -43.683 -42.975 -42.088 -41.013 -39.771 -38.400 -36.946 -35.451 -33.946 -32.454 -30.990 -29.564 -28.179 -26.838 -25.543 -24.293 -23.087 -21.924 -20.803 -19.723 -18.682 -17.679 -16.713 -15.783 -14.887 -14.024 -13.194 -12.396 -11.628 -10.890 -10.181 -9.501 -8.848 -8.223 -7.624 -7.052 -6.505 -5.983 -5.487 -5.015 -4.567 -4.143 -3.743 -3.366 -3.012 -2.682 -2.374 -2.090 -1.828 -1.588 -1.372 -1.178 -1.008 -0.860 -0.735 -0.633 -0.555 -0.500 -0.469 -0.463 -0.480 -0.523 -0.591 -0.685 -0.806 -0.954 -1.130 -1.335 -1.570 -1.837 -2.135 -2.467 -2.834 -3.238 -3.681 -4.165 -4.693 -5.268 -5.893 -6.572 -7.310 -8.112 -8.985 -9.936 -10.974 -12.113 -13.364 -14.747 -16.286 -18.011 -19.964 -22.208 -24.832 -27.982 -31.916 -37.175 -45.325 -75.652 -55.693 -63.377 -48.473 -38.930 -33.145 -28.919 -25.579 -22.819 -20.471 -18.434 -16.639 -15.042 -13.607 -12.309 -11.130 -10.053 -9.067 -8.162 -7.329 -6.563 -5.856 -5.205 -4.605 -4.052 -3.544 -3.078 -2.651 -2.262 -1.909 -1.589 -1.302 -1.046 -0.820 -0.624 -0.456 -0.315 -0.201 -0.113 -0.050 -0.013 0.000 -0.011 -0.046 -0.105 -0.187 -0.292 -0.420 -0.571 -0.745 -0.941 -1.160 -1.401 -1.666 -1.953 -2.263 -2.597 -2.953 -3.333 -3.736 -4.164 -4.615 -5.091 -5.592 -6.119 -6.670 -7.249 -7.854 -8.486 -9.147 -9.837 -10.556 -11.305 -12.086 -12.899 -13.746 -14.628 -15.546 -16.501 -17.496 -18.532 -19.612 -20.738 -21.912 -23.139 -24.421 -25.763 -27.171 -28.651 -30.210 -31.859 -33.608 -35.474 -37.476 -39.636 -41.986 -44.553 -47.347 -50.288 -53.008 -54.740 -55.077 -54.653 -54.192 -54.010 -54.199 -54.815 -55.952 -57.795 -60.602 -63.645 -62.608 -57.754 -53.636 -50.410 -47.767 -45.515 -43.540 -41.771 -40.164 -38.688 -37.322 -36.050 -34.859 -33.742 -32.690 -31.698 -30.762 -29.877 -29.042 -28.252 -27.506 -26.802 -26.137 -25.512 -24.923 -24.370 -23.853 -23.369 -22.917 -22.498 -22.110 -21.753 -21.426 -21.128 -20.858 -20.618 -20.405 -20.219 -20.061 -19.929 -19.824 -19.745 -19.692 -19.665 -19.663 -19.687 -19.736 -19.811 -19.910 -20.034 -20.184 -20.358 -20.557 -20.781 -21.031 -21.305 -21.605 -21.929 -22.280 -22.656 -23.057 -23.485 -23.939 -24.419 -24.925 -25.459 -26.019 -26.607 -27.222 -27.864 -28.534 -29.232 -29.959 -30.713 -31.495 -32.305 -33.143 -34.008 -34.900 -35.818 -36.760 -37.726 -38.714 -39.720 -40.742 -41.776 -42.818 -43.861 -44.899 -45.937 -46.975 -48.012 -49.050 0 1 1.0 1 N2 VV 20.21 25.51 0.05 -8.242e+09 4.169e+10 -5.245e+09 4.184e+10 -2.398e+09 4.180e+10 2.896e+08 4.154e+10 2.798e+09 4.104e+10 5.099e+09 4.025e+10 7.165e+09 3.915e+10 8.966e+09 3.773e+10 1.047e+10 3.597e+10 1.165e+10 3.388e+10 1.249e+10 3.147e+10 1.297e+10 2.877e+10 1.309e+10 2.583e+10 1.285e+10 2.269e+10 1.227e+10 1.943e+10 1.137e+10 1.613e+10 1.020e+10 1.289e+10 8.827e+09 9.792e+09 7.315e+09 6.953e+09 5.749e+09 4.470e+09 4.233e+09 2.441e+09 2.889e+09 9.334e+08 1.858e+09 -7.301e+07 1.241e+09 -8.386e+08 8.545e+08 -1.916e+09 2.689e+08 -3.752e+09 -8.779e+08 -6.521e+09 -2.818e+09 -1.026e+10 -5.717e+09 -1.498e+10 -9.705e+09 -2.062e+10 -1.489e+10 -2.713e+10 -2.138e+10 -3.442e+10 -2.925e+10 -4.236e+10 -3.854e+10 -5.082e+10 -4.930e+10 -5.962e+10 -6.154e+10 -6.856e+10 -7.522e+10 -7.743e+10 -9.031e+10 -8.600e+10 -1.067e+11 -9.402e+10 -1.243e+11 -1.012e+11 -1.431e+11 -1.074e+11 -1.627e+11 -1.122e+11 -1.830e+11 -1.155e+11 -2.038e+11 -1.169e+11 -2.249e+11 -1.163e+11 -2.460e+11 -1.135e+11 -2.669e+11 -1.083e+11 -2.873e+11 -1.004e+11 -3.071e+11 -8.992e+10 -3.260e+11 -7.658e+10 -3.440e+11 -6.031e+10 -3.608e+11 -4.105e+10 -3.765e+11 -1.867e+10 -3.911e+11 6.984e+09 -4.047e+11 3.608e+10 -4.174e+11 6.895e+10 -4.293e+11 1.060e+11 -4.407e+11 1.479e+11 -4.518e+11 1.953e+11 -4.627e+11 2.494e+11 -4.734e+11 3.114e+11 -4.839e+11 3.829e+11 -4.938e+11 4.659e+11 -5.026e+11 5.623e+11 -5.094e+11 6.745e+11 -5.132e+11 8.052e+11 -5.127e+11 9.567e+11 -5.061e+11 1.132e+12 -4.916e+11 1.335e+12 -4.669e+11 1.568e+12 -4.296e+11 1.834e+12 -3.771e+11 2.137e+12 -3.064e+11 2.479e+12 -2.143e+11 2.864e+12 -9.731e+10 3.296e+12 4.814e+10 3.778e+12 2.260e+11 4.313e+12 4.407e+11 4.905e+12 6.962e+11 5.557e+12 9.972e+11 6.272e+12 1.349e+12 7.055e+12 1.755e+12 7.907e+12 2.222e+12 8.831e+12 2.755e+12 9.832e+12 3.357e+12 1.091e+13 4.036e+12 1.207e+13 4.795e+12 1.331e+13 5.639e+12 1.464e+13 6.574e+12 1.605e+13 7.603e+12 1.754e+13 8.731e+12 1.913e+13 9.961e+12 2.080e+13 1.130e+13 2.256e+13 1.274e+13 2.440e+13 1.429e+13 2.632e+13 1.596e+13 2.833e+13 1.774e+13 3.042e+13 1.962e+13 3.259e+13 2.163e+13 3.483e+13 2.374e+13 3.714e+13 2.596e+13 3.951e+13 2.828e+13 4.196e+13 3.071e+13 4.446e+13 3.324e+13 4.702e+13 3.587e+13 4.963e+13 3.858e+13 5.228e+13 4.138e+13 5.496e+13 4.426e+13 5.768e+13 4.721e+13 6.043e+13 5.023e+13 6.320e+13 5.331e+13 6.599e+13 5.646e+13 6.879e+13 5.965e+13 7.160e+13 6.289e+13 7.442e+13 6.617e+13 7.724e+13 6.948e+13 8.006e+13 7.282e+13 8.287e+13 7.618e+13 8.567e+13 7.956e+13 8.847e+13 8.295e+13 9.125e+13 8.635e+13 9.401e+13 8.975e+13 9.676e+13 9.314e+13 9.949e+13 9.651e+13 1.022e+14 9.986e+13 1.049e+14 1.032e+14 1.076e+14 1.065e+14 1.102e+14 1.097e+14 1.128e+14 1.129e+14 1.154e+14 1.160e+14 1.180e+14 1.191e+14 1.205e+14 1.221e+14 1.230e+14 1.250e+14 1.255e+14 1.278e+14 1.280e+14 1.304e+14 1.304e+14 1.330e+14 1.328e+14 1.354e+14 1.351e+14 1.377e+14 1.374e+14 1.399e+14 1.397e+14 1.419e+14 1.420e+14 1.437e+14 1.442e+14 1.454e+14 1.465e+14 1.470e+14 1.487e+14 1.484e+14 1.508e+14 1.496e+14 1.530e+14 1.507e+14 1.551e+14 1.515e+14 1.573e+14 1.523e+14 1.594e+14 1.528e+14 1.615e+14 1.532e+14 1.636e+14 1.535e+14 1.657e+14 1.536e+14 1.679e+14 1.536e+14 1.700e+14 1.535e+14 1.722e+14 1.533e+14 1.744e+14 1.529e+14 1.766e+14 1.525e+14 1.788e+14 1.520e+14 1.811e+14 1.514e+14 1.834e+14 1.507e+14 1.858e+14 1.500e+14 1.882e+14 1.493e+14 1.907e+14 1.485e+14 1.932e+14 1.476e+14 1.958e+14 1.467e+14 1.985e+14 1.458e+14 2.011e+14 1.449e+14 2.039e+14 1.440e+14 2.067e+14 1.430e+14 2.095e+14 1.420e+14 2.124e+14 1.410e+14 2.153e+14 1.400e+14 2.182e+14 1.390e+14 2.211e+14 1.379e+14 2.241e+14 1.369e+14 2.271e+14 1.358e+14 2.300e+14 1.347e+14 2.330e+14 1.335e+14 2.359e+14 1.323e+14 2.388e+14 1.311e+14 2.416e+14 1.299e+14 2.444e+14 1.286e+14 2.471e+14 1.274e+14 2.496e+14 1.260e+14 2.521e+14 1.247e+14 2.545e+14 1.233e+14 2.567e+14 1.219e+14 2.588e+14 1.205e+14 2.608e+14 1.191e+14 2.626e+14 1.176e+14 2.643e+14 1.162e+14 2.657e+14 1.147e+14 2.670e+14 1.132e+14 2.680e+14 1.117e+14 2.689e+14 1.102e+14 2.695e+14 1.087e+14 2.699e+14 1.072e+14 2.700e+14 1.057e+14 2.699e+14 1.042e+14 2.695e+14 1.027e+14 2.688e+14 1.012e+14 2.679e+14 9.979e+13 2.666e+14 9.833e+13 2.651e+14 9.689e+13 2.633e+14 9.545e+13 2.611e+14 9.401e+13 2.587e+14 9.258e+13 2.560e+14 9.115e+13 2.529e+14 8.971e+13 2.496e+14 8.826e+13 2.460e+14 8.681e+13 2.421e+14 8.534e+13 2.379e+14 8.385e+13 2.334e+14 8.234e+13 2.287e+14 8.081e+13 2.237e+14 7.925e+13 2.185e+14 7.767e+13 2.130e+14 7.605e+13 2.074e+14 7.440e+13 2.016e+14 7.272e+13 1.956e+14 7.101e+13 1.895e+14 6.925e+13 1.833e+14 6.746e+13 1.769e+14 6.565e+13 1.705e+14 6.380e+13 1.640e+14 6.193e+13 1.575e+14 6.004e+13 1.509e+14 5.813e+13 1.444e+14 5.621e+13 1.378e+14 5.428e+13 1.313e+14 5.233e+13 1.248e+14 5.039e+13 1.184e+14 4.845e+13 1.121e+14 4.651e+13 1.059e+14 4.458e+13 9.987e+13 4.266e+13 9.393e+13 4.077e+13 8.813e+13 3.889e+13 8.250e+13 3.704e+13 7.704e+13 3.521e+13 7.175e+13 3.342e+13 6.665e+13 3.167e+13 6.176e+13 2.995e+13 5.706e+13 2.827e+13 5.256e+13 2.663e+13 4.828e+13 2.504e+13 4.421e+13 2.349e+13 4.036e+13 2.199e+13 3.672e+13 2.054e+13 3.329e+13 1.915e+13 3.008e+13 1.781e+13 2.707e+13 1.652e+13 2.427e+13 1.528e+13 2.167e+13 1.410e+13 1.927e+13 1.298e+13 1.706e+13 1.191e+13 1.503e+13 1.090e+13 1.317e+13 9.949e+12 1.149e+13 9.052e+12 9.963e+12 8.210e+12 8.589e+12 7.423e+12 7.358e+12 6.692e+12 6.262e+12 6.014e+12 5.291e+12 5.387e+12 4.434e+12 4.809e+12 3.684e+12 4.279e+12 3.030e+12 3.794e+12 2.464e+12 3.353e+12 1.978e+12 2.954e+12 1.565e+12 2.595e+12 1.214e+12 2.272e+12 9.205e+11 1.984e+12 6.765e+11 1.728e+12 4.753e+11 1.502e+12 3.114e+11 1.303e+12 1.791e+11 1.128e+12 7.344e+10 9.759e+11 -9.814e+09 8.430e+11 -7.459e+10 7.274e+11 -1.243e+11 6.271e+11 -1.616e+11 5.399e+11 -1.889e+11 4.639e+11 -2.081e+11 3.976e+11 -2.207e+11 3.396e+11 -2.278e+11 2.885e+11 -2.304e+11 2.434e+11 -2.291e+11 2.035e+11 -2.245e+11 1.681e+11 -2.171e+11 1.368e+11 -2.071e+11 1.092e+11 -1.950e+11 8.490e+10 -1.811e+11 6.378e+10 -1.658e+11 4.562e+10 -1.495e+11 3.023e+10 -1.325e+11 1.748e+10 -1.153e+11 7.195e+09 -9.819e+10 -8.190e+08 -8.165e+10 -6.742e+09 -6.606e+10 -1.081e+10 -5.173e+10 -1.331e+10 -3.897e+10 -1.475e+10 -2.788e+10 -1.483e+10 -1.916e+10 -1.480e+10 -1.200e+10 -1.493e+10 -6.399e+09 -1.572e+10 -1.661e+09 -1.743e+10 3.172e+09 -1.999e+10 8.958e+09 -2.309e+10 1.625e+10 -2.643e+10 2.527e+10 -2.971e+10 3.600e+10 -3.272e+10 4.830e+10 -3.527e+10 6.195e+10 -3.725e+10 7.664e+10 -3.856e+10 9.208e+10 -3.916e+10 1.080e+11 -3.900e+10 1.239e+11 -3.809e+10 1.396e+11 -3.646e+10 1.548e+11 -3.414e+10 1.692e+11 -3.118e+10 1.824e+11 -2.766e+10 1.944e+11 -2.365e+10 2.048e+11 -1.925e+10 2.136e+11 -1.454e+10 2.206e+11 -9.613e+09 2.257e+11 -4.563e+09 2.290e+11 5.237e+08 2.304e+11 5.554e+09 2.299e+11 1.045e+10 2.277e+11 1.515e+10 2.239e+11 1.956e+10 2.185e+11 2.365e+10 2.116e+11 2.736e+10 2.036e+11 3.064e+10 1.945e+11 3.347e+10 1.844e+11 3.582e+10 1.737e+11 3.769e+10 1.624e+11 3.905e+10 1.508e+11 3.993e+10 1.389e+11 4.032e+10 1.270e+11 4.026e+10 1.152e+11 3.976e+10 1.037e+11 3.886e+10 9.252e+10 3.758e+10 8.181e+10 3.598e+10 7.165e+10 3.410e+10 6.212e+10 3.197e+10 5.327e+10 2.966e+10 4.513e+10 2.722e+10 3.775e+10 2.468e+10 3.111e+10 2.210e+10 2.523e+10 1.953e+10 2.008e+10 1.701e+10 1.564e+10 1.458e+10 1.187e+10 1.227e+10 8.726e+09 1.011e+10 6.163e+09 8.125e+09 4.122e+09 6.344e+09 2.551e+09 4.777e+09 1.387e+09 3.434e+09 5.722e+08 2.325e+09 4.801e+07 1.452e+09 -2.470e+08 8.115e+08 -3.782e+08 3.799e+08 -4.239e+08 8.459e+07 -4.734e+08 -2.072e+08 -5.866e+08 -6.278e+08 -7.550e+08 -1.251e+09 -9.287e+08 -2.105e+09 -1.057e+09 -3.200e+09 -1.097e+09 -4.542e+09 -1.010e+09 -6.135e+09 -7.597e+08 -7.975e+09 -3.134e+08 -1.006e+10 3.605e+08 -1.240e+10 1.291e+09 -1.496e+10 2.501e+09 -1.775e+10 4.015e+09 -2.075e+10 5.848e+09 -2.393e+10 8.011e+09 -2.728e+10 1.051e+10 -3.077e+10 1.335e+10 -3.437e+10 1.651e+10 -3.806e+10 1.998e+10 -4.178e+10 2.375e+10 -4.551e+10 2.779e+10 -4.920e+10 3.207e+10 -5.282e+10 3.654e+10 -5.632e+10 4.117e+10 -5.967e+10 4.592e+10 -6.281e+10 5.072e+10 -6.572e+10 5.554e+10 -6.835e+10 6.031e+10 -7.067e+10 6.498e+10 -7.265e+10 6.949e+10 -7.427e+10 7.378e+10 -7.550e+10 7.781e+10 -7.631e+10 8.152e+10 -7.671e+10 8.486e+10 -7.668e+10 8.778e+10 -7.622e+10 9.023e+10 -7.534e+10 9.219e+10 -7.405e+10 9.362e+10 -7.238e+10 9.450e+10 -7.033e+10 9.479e+10 -6.794e+10 9.450e+10 -6.525e+10 9.362e+10 -6.229e+10 9.216e+10 -5.911e+10 9.012e+10 -5.575e+10 8.754e+10 -5.224e+10 8.443e+10 -4.865e+10 8.084e+10 -4.502e+10 7.681e+10 -4.138e+10 7.240e+10 -3.777e+10 6.767e+10 -3.425e+10 6.268e+10 -3.083e+10 5.749e+10 -2.755e+10 5.219e+10 -2.444e+10 4.684e+10 -2.151e+10 4.152e+10 -1.878e+10 3.629e+10 -1.625e+10 3.124e+10 -1.393e+10 2.642e+10 -1.183e+10 2.189e+10 -9.934e+09 1.772e+10 -8.247e+09 1.394e+10 -6.759e+09 1.059e+10 -5.461e+09 7.703e+09 -4.343e+09 5.294e+09 -3.403e+09 3.369e+09 -2.644e+09 1.911e+09 -2.086e+09 8.662e+08 -1.761e+09 1.202e+08 -1.682e+09 -5.238e+08 -1.810e+09 -1.282e+09 -2.073e+09 -2.297e+09 -2.410e+09 -3.616e+09 -2.791e+09 -5.233e+09 -3.205e+09 -7.114e+09 -3.650e+09 -9.217e+09 -4.133e+09 -1.150e+10 -4.659e+09 -1.390e+10 -5.235e+09 -1.638e+10 -5.867e+09 -1.889e+10 -6.563e+09 -2.137e+10 -7.326e+09 -2.379e+10 -8.162e+09 -2.611e+10 -9.073e+09 -2.827e+10 -1.006e+10 -3.026e+10 -1.112e+10 -3.203e+10 -1.226e+10 -3.356e+10 -1.347e+10 -3.483e+10 -1.475e+10 -3.581e+10 -1.608e+10 -3.651e+10 -1.748e+10 -3.691e+10 -1.891e+10 -3.702e+10 -2.039e+10 -3.683e+10 -2.190e+10 -3.637e+10 -2.344e+10 -3.564e+10 -2.500e+10 -3.466e+10 -2.658e+10 -3.346e+10 -2.818e+10 -3.206e+10 -2.981e+10 -3.049e+10 -3.148e+10 -2.876e+10 -3.320e+10 -2.689e+10 -3.498e+10 -2.491e+10 -3.684e+10 -2.282e+10 -3.879e+10 -2.062e+10 -4.086e+10 -1.833e+10 -4.306e+10 -1.593e+10 -4.541e+10 -1.341e+10 -4.791e+10 -1.076e+10 -5.058e+10 -7.978e+09 -5.340e+10 -5.037e+09 -5.638e+10 -1.931e+09 -5.950e+10 1.345e+09 -6.274e+10 4.796e+09 -6.607e+10 8.415e+09 -6.948e+10 1.219e+10 -7.294e+10 1.611e+10 -7.641e+10 2.014e+10 -7.985e+10 2.427e+10 -8.325e+10 2.845e+10 -8.656e+10 3.266e+10 -8.976e+10 3.685e+10 -9.281e+10 4.100e+10 -9.569e+10 4.506e+10 -9.836e+10 4.900e+10 -1.008e+11 5.279e+10 -1.030e+11 5.639e+10 -1.049e+11 5.978e+10 -1.066e+11 6.293e+10 -1.079e+11 6.583e+10 -1.089e+11 6.846e+10 -1.096e+11 7.080e+10 -1.099e+11 7.284e+10 -1.099e+11 7.459e+10 -1.096e+11 7.603e+10 -1.089e+11 7.716e+10 -1.078e+11 7.799e+10 -1.065e+11 7.852e+10 -1.048e+11 7.875e+10 -1.028e+11 7.869e+10 -1.005e+11 7.833e+10 -9.791e+10 7.770e+10 -9.508e+10 7.681e+10 -9.201e+10 7.566e+10 -8.874e+10 7.427e+10 -8.529e+10 7.265e+10 -8.169e+10 7.081e+10 -7.797e+10 6.876e+10 -7.416e+10 6.654e+10 -7.028e+10 6.414e+10 -6.637e+10 6.159e+10 -6.246e+10 5.891e+10 -5.856e+10 5.612e+10 -5.471e+10 5.323e+10 -5.094e+10 5.028e+10 -4.726e+10 4.729e+10 -4.368e+10 4.427e+10 -4.023e+10 4.126e+10 -3.692e+10 3.827e+10 -3.376e+10 3.531e+10 -3.076e+10 3.243e+10 -2.793e+10 2.962e+10 -2.526e+10 2.692e+10 -2.276e+10 2.432e+10 -2.042e+10 2.186e+10 -1.826e+10 1.953e+10 -1.625e+10 1.734e+10 -1.441e+10 1.531e+10 -1.271e+10 1.343e+10 -1.116e+10 1.170e+10 -9.757e+09 1.013e+10 -8.481e+09 8.711e+09 -7.334e+09 7.440e+09 -6.304e+09 6.308e+09 -5.384e+09 5.308e+09 -4.568e+09 4.433e+09 -3.848e+09 3.672e+09 -3.216e+09 3.016e+09 -2.666e+09 2.457e+09 -2.192e+09 1.983e+09 -1.785e+09 1.586e+09 -1.439e+09 1.255e+09 -1.149e+09 9.831e+08 -9.064e+08 7.611e+08 -7.073e+08 5.822e+08 -5.456e+08 4.395e+08 -4.159e+08 3.269e+08 -3.137e+08 2.393e+08 -2.343e+08 1.720e+08 -1.736e+08 1.210e+08 -1.283e+08 8.314e+07 -9.519e+07 5.543e+07 -7.159e+07 3.553e+07 -5.548e+07 2.150e+07 -4.521e+07 1.164e+07 -3.959e+07 4.453e+06 -3.782e+07 -1.312e+06 -3.938e+07 -6.694e+06 -4.404e+07 -1.245e+07 -5.174e+07 -1.906e+07 -6.263e+07 -2.681e+07 -7.695e+07 -3.587e+07 -9.495e+07 -4.634e+07 -1.169e+08 -5.827e+07 -1.428e+08 -7.170e+07 -1.729e+08 -8.664e+07 -2.070e+08 -1.031e+08 -2.448e+08 -1.210e+08 -2.861e+08 -1.404e+08 -3.302e+08 -1.612e+08 -3.767e+08 -1.835e+08 -4.248e+08 -2.073e+08 -4.739e+08 -2.326e+08 -5.232e+08 -2.594e+08 -5.720e+08 -2.878e+08 -6.197e+08 -3.178e+08 -6.657e+08 -3.497e+08 -7.095e+08 -3.835e+08 -7.506e+08 -4.192e+08 -7.887e+08 -4.571e+08 -8.237e+08 -4.973e+08 -8.553e+08 -5.400e+08 -8.833e+08 -5.854e+08 -9.078e+08 -6.337e+08 -9.287e+08 -6.850e+08 -9.460e+08 -7.397e+08 -9.596e+08 -7.978e+08 -9.695e+08 -8.594e+08 -9.758e+08 -9.246e+08 -9.782e+08 -9.936e+08 -9.765e+08 -1.066e+09 -9.705e+08 -1.142e+09 -9.600e+08 -1.222e+09 -9.445e+08 -1.304e+09 -9.236e+08 -1.389e+09 -8.969e+08 -1.475e+09 -8.641e+08 -1.562e+09 -8.247e+08 -1.650e+09 -7.782e+08 -1.736e+09 0.005 -61.072 -59.551 -58.031 -56.510 -54.990 -53.447 -51.706 -49.904 -48.122 -46.400 -44.755 -43.191 -41.707 -40.301 -38.967 -37.701 -36.500 -35.360 -34.277 -33.249 -32.272 -31.344 -30.463 -29.627 -28.834 -28.082 -27.370 -26.697 -26.060 -25.460 -24.895 -24.363 -23.865 -23.399 -22.965 -22.562 -22.189 -21.846 -21.532 -21.248 -20.992 -20.764 -20.565 -20.393 -20.249 -20.132 -20.042 -19.980 -19.944 -19.936 -19.955 -20.001 -20.075 -20.176 -20.304 -20.460 -20.644 -20.856 -21.097 -21.366 -21.664 -21.991 -22.349 -22.736 -23.155 -23.605 -24.087 -24.602 -25.150 -25.733 -26.351 -27.006 -27.698 -28.430 -29.202 -30.017 -30.877 -31.785 -32.743 -33.757 -34.831 -35.971 -37.185 -38.484 -39.881 -41.394 -43.047 -44.872 -46.916 -49.240 -51.914 -54.968 -58.085 -59.945 -59.557 -58.208 -57.090 -56.545 -56.637 -57.420 -58.827 -59.645 -57.264 -53.077 -49.159 -45.796 -42.884 -40.311 -37.994 -35.881 -33.931 -32.118 -30.419 -28.819 -27.308 -25.874 -24.510 -23.210 -21.969 -20.782 -19.646 -18.557 -17.514 -16.512 -15.551 -14.629 -13.743 -12.893 -12.077 -11.294 -10.542 -9.822 -9.131 -8.469 -7.836 -7.230 -6.652 -6.100 -5.574 -5.073 -4.597 -4.146 -3.720 -3.317 -2.939 -2.584 -2.252 -1.943 -1.658 -1.395 -1.155 -0.939 -0.745 -0.575 -0.427 -0.302 -0.201 -0.123 -0.068 -0.038 -0.031 -0.049 -0.092 -0.161 -0.255 -0.376 -0.524 -0.700 -0.905 -1.140 -1.405 -1.703 -2.034 -2.400 -2.802 -3.243 -3.725 -4.250 -4.821 -5.441 -6.115 -6.847 -7.641 -8.505 -9.445 -10.470 -11.591 -12.822 -14.179 -15.685 -17.366 -19.261 -21.422 -23.926 -26.889 -30.499 -35.099 -41.411 -51.442 -76.580 -60.493 -46.028 -38.181 -32.805 -28.724 -25.446 -22.714 -20.380 -18.349 -16.558 -14.961 -13.527 -12.230 -11.051 -9.975 -8.989 -8.085 -7.253 -6.488 -5.783 -5.133 -4.535 -3.985 -3.479 -3.016 -2.592 -2.206 -1.856 -1.539 -1.256 -1.004 -0.782 -0.590 -0.426 -0.290 -0.180 -0.097 -0.040 -0.008 0.000 -0.017 -0.058 -0.122 -0.210 -0.322 -0.456 -0.614 -0.794 -0.998 -1.224 -1.473 -1.746 -2.041 -2.360 -2.702 -3.067 -3.457 -3.870 -4.307 -4.770 -5.257 -5.769 -6.307 -6.872 -7.464 -8.083 -8.730 -9.407 -10.113 -10.850 -11.619 -12.420 -13.255 -14.126 -15.034 -15.980 -16.967 -17.997 -19.072 -20.195 -21.370 -22.602 -23.894 -25.253 -26.686 -28.203 -29.815 -31.538 -33.393 -35.406 -37.613 -40.062 -42.801 -45.831 -48.859 -50.809 -50.687 -49.396 -48.041 -46.961 -46.165 -45.608 -45.233 -45.001 -44.883 -44.851 -44.884 -44.954 -45.029 -45.069 -45.022 -44.831 -44.448 -43.846 -43.034 -42.051 -40.950 -39.784 -38.595 -37.414 -36.258 -35.140 -34.066 -33.039 -32.060 -31.129 -30.246 -29.408 -28.615 -27.865 -27.157 -26.490 -25.861 -25.271 -24.717 -24.199 -23.716 -23.266 -22.850 -22.466 -22.112 -21.790 -21.498 -21.236 -21.002 -20.797 -20.621 -20.472 -20.350 -20.256 -20.188 -20.148 -20.134 -20.146 -20.184 -20.248 -20.338 -20.454 -20.595 -20.762 -20.955 -21.174 -21.418 -21.688 -21.985 -22.308 -22.656 -23.032 -23.434 -23.864 -24.320 -24.804 -25.316 -25.856 -26.425 -27.022 -27.649 -28.305 -28.991 -29.707 -30.454 -31.232 -32.041 -32.882 -33.755 -34.660 -35.596 -36.565 -37.565 -38.595 -39.655 -40.744 -41.859 -42.997 -44.155 -45.328 -46.508 -47.690 -48.872 -50.053 -51.235 0 1 1.0 1 N2 VH 20.21 25.51 0.05 -3.364e+10 4.299e+09 -3.051e+10 6.326e+09 -2.747e+10 7.998e+09 -2.452e+10 9.333e+09 -2.169e+10 1.035e+10 -1.897e+10 1.106e+10 -1.638e+10 1.149e+10 -1.392e+10 1.164e+10 -1.160e+10 1.154e+10 -9.433e+09 1.119e+10 -7.426e+09 1.063e+10 -5.598e+09 9.870e+09 -3.961e+09 8.943e+09 -2.527e+09 7.882e+09 -1.312e+09 6.731e+09 -3.278e+08 5.539e+09 4.333e+08 4.363e+09 9.865e+08 3.267e+09 1.377e+09 2.304e+09 1.693e+09 1.497e+09 2.060e+09 7.964e+08 2.606e+09 4.526e+07 3.394e+09 -9.769e+08 4.414e+09 -2.480e+09 5.616e+09 -4.638e+09 6.930e+09 -7.589e+09 8.272e+09 -1.144e+10 9.549e+09 -1.629e+10 1.066e+10 -2.221e+10 1.150e+10 -2.926e+10 1.195e+10 -3.745e+10 1.189e+10 -4.682e+10 1.119e+10 -5.732e+10 9.712e+09 -6.892e+10 7.342e+09 -8.153e+10 3.951e+09 -9.504e+10 -5.723e+08 -1.093e+11 -6.339e+09 -1.241e+11 -1.344e+10 -1.393e+11 -2.194e+10 -1.547e+11 -3.191e+10 -1.698e+11 -4.337e+10 -1.846e+11 -5.634e+10 -1.987e+11 -7.080e+10 -2.117e+11 -8.674e+10 -2.234e+11 -1.041e+11 -2.335e+11 -1.228e+11 -2.417e+11 -1.427e+11 -2.478e+11 -1.639e+11 -2.514e+11 -1.862e+11 -2.525e+11 -2.095e+11 -2.508e+11 -2.338e+11 -2.461e+11 -2.592e+11 -2.385e+11 -2.858e+11 -2.277e+11 -3.136e+11 -2.136e+11 -3.431e+11 -1.961e+11 -3.744e+11 -1.749e+11 -4.081e+11 -1.497e+11 -4.448e+11 -1.199e+11 -4.852e+11 -8.471e+10 -5.299e+11 -4.317e+10 -5.799e+11 6.104e+09 -6.358e+11 6.487e+10 -6.985e+11 1.350e+11 -7.685e+11 2.191e+11 -8.465e+11 3.199e+11 -9.326e+11 4.403e+11 -1.027e+12 5.838e+11 -1.131e+12 7.548e+11 -1.243e+12 9.564e+11 -1.363e+12 1.193e+12 -1.490e+12 1.470e+12 -1.624e+12 1.790e+12 -1.764e+12 2.160e+12 -1.908e+12 2.584e+12 -2.056e+12 3.067e+12 -2.205e+12 3.615e+12 -2.353e+12 4.233e+12 -2.498e+12 4.927e+12 -2.638e+12 5.701e+12 -2.770e+12 6.563e+12 -2.891e+12 7.517e+12 -2.998e+12 8.567e+12 -3.088e+12 9.721e+12 -3.157e+12 1.098e+13 -3.201e+12 1.235e+13 -3.217e+12 1.384e+13 -3.201e+12 1.545e+13 -3.148e+12 1.718e+13 -3.056e+12 1.904e+13 -2.919e+12 2.103e+13 -2.734e+12 2.314e+13 -2.497e+12 2.539e+13 -2.205e+12 2.777e+13 -1.854e+12 3.027e+13 -1.442e+12 3.291e+13 -9.647e+11 3.568e+13 -4.209e+11 3.857e+13 1.925e+11 4.158e+13 8.766e+11 4.471e+13 1.632e+12 4.796e+13 2.458e+12 5.133e+13 3.357e+12 5.480e+13 4.328e+12 5.837e+13 5.374e+12 6.204e+13 6.492e+12 6.580e+13 7.681e+12 6.963e+13 8.941e+12 7.354e+13 1.027e+13 7.752e+13 1.166e+13 8.155e+13 1.312e+13 8.564e+13 1.464e+13 8.977e+13 1.621e+13 9.393e+13 1.784e+13 9.813e+13 1.952e+13 1.023e+14 2.125e+13 1.066e+14 2.302e+13 1.108e+14 2.482e+13 1.150e+14 2.666e+13 1.193e+14 2.853e+13 1.235e+14 3.042e+13 1.277e+14 3.233e+13 1.318e+14 3.426e+13 1.359e+14 3.619e+13 1.400e+14 3.811e+13 1.440e+14 4.003e+13 1.480e+14 4.194e+13 1.518e+14 4.383e+13 1.557e+14 4.569e+13 1.594e+14 4.751e+13 1.631e+14 4.929e+13 1.666e+14 5.102e+13 1.701e+14 5.269e+13 1.735e+14 5.429e+13 1.767e+14 5.582e+13 1.799e+14 5.727e+13 1.829e+14 5.863e+13 1.859e+14 5.989e+13 1.887e+14 6.105e+13 1.914e+14 6.210e+13 1.940e+14 6.304e+13 1.965e+14 6.388e+13 1.989e+14 6.461e+13 2.013e+14 6.521e+13 2.035e+14 6.569e+13 2.056e+14 6.604e+13 2.077e+14 6.626e+13 2.097e+14 6.635e+13 2.115e+14 6.632e+13 2.134e+14 6.616e+13 2.151e+14 6.588e+13 2.168e+14 6.549e+13 2.185e+14 6.498e+13 2.201e+14 6.436e+13 2.217e+14 6.365e+13 2.233e+14 6.283e+13 2.249e+14 6.193e+13 2.264e+14 6.095e+13 2.280e+14 5.989e+13 2.296e+14 5.876e+13 2.312e+14 5.756e+13 2.328e+14 5.631e+13 2.344e+14 5.501e+13 2.360e+14 5.367e+13 2.377e+14 5.229e+13 2.394e+14 5.087e+13 2.412e+14 4.943e+13 2.429e+14 4.796e+13 2.447e+14 4.648e+13 2.466e+14 4.498e+13 2.484e+14 4.346e+13 2.503e+14 4.194e+13 2.521e+14 4.041e+13 2.540e+14 3.888e+13 2.559e+14 3.735e+13 2.578e+14 3.582e+13 2.596e+14 3.429e+13 2.615e+14 3.277e+13 2.633e+14 3.125e+13 2.651e+14 2.975e+13 2.668e+14 2.826e+13 2.685e+14 2.681e+13 2.701e+14 2.538e+13 2.716e+14 2.397e+13 2.731e+14 2.259e+13 2.744e+14 2.123e+13 2.757e+14 1.991e+13 2.769e+14 1.862e+13 2.779e+14 1.737e+13 2.788e+14 1.616e+13 2.796e+14 1.500e+13 2.802e+14 1.390e+13 2.807e+14 1.285e+13 2.810e+14 1.187e+13 2.812e+14 1.095e+13 2.811e+14 1.011e+13 2.809e+14 9.342e+12 2.804e+14 8.656e+12 2.797e+14 8.054e+12 2.788e+14 7.539e+12 2.777e+14 7.113e+12 2.763e+14 6.778e+12 2.746e+14 6.534e+12 2.727e+14 6.380e+12 2.705e+14 6.317e+12 2.680e+14 6.341e+12 2.653e+14 6.450e+12 2.623e+14 6.640e+12 2.590e+14 6.905e+12 2.554e+14 7.240e+12 2.516e+14 7.639e+12 2.475e+14 8.094e+12 2.431e+14 8.599e+12 2.385e+14 9.144e+12 2.336e+14 9.721e+12 2.285e+14 1.032e+13 2.232e+14 1.094e+13 2.176e+14 1.156e+13 2.119e+14 1.219e+13 2.060e+14 1.280e+13 2.000e+14 1.339e+13 1.938e+14 1.395e+13 1.875e+14 1.447e+13 1.811e+14 1.496e+13 1.747e+14 1.542e+13 1.682e+14 1.582e+13 1.616e+14 1.618e+13 1.550e+14 1.649e+13 1.484e+14 1.675e+13 1.418e+14 1.695e+13 1.353e+14 1.709e+13 1.288e+14 1.718e+13 1.224e+14 1.722e+13 1.160e+14 1.720e+13 1.098e+14 1.713e+13 1.036e+14 1.701e+13 9.764e+13 1.684e+13 9.178e+13 1.662e+13 8.607e+13 1.636e+13 8.053e+13 1.606e+13 7.515e+13 1.572e+13 6.996e+13 1.534e+13 6.496e+13 1.493e+13 6.015e+13 1.450e+13 5.555e+13 1.403e+13 5.115e+13 1.355e+13 4.696e+13 1.304e+13 4.298e+13 1.252e+13 3.922e+13 1.198e+13 3.566e+13 1.144e+13 3.232e+13 1.088e+13 2.918e+13 1.032e+13 2.625e+13 9.763e+12 2.353e+13 9.205e+12 2.100e+13 8.650e+12 1.867e+13 8.103e+12 1.652e+13 7.565e+12 1.456e+13 7.038e+12 1.276e+13 6.525e+12 1.113e+13 6.028e+12 9.659e+12 5.549e+12 8.334e+12 5.091e+12 7.149e+12 4.654e+12 6.095e+12 4.238e+12 5.160e+12 3.845e+12 4.337e+12 3.476e+12 3.616e+12 3.130e+12 2.988e+12 2.809e+12 2.446e+12 2.511e+12 1.980e+12 2.238e+12 1.583e+12 1.987e+12 1.246e+12 1.760e+12 9.637e+11 1.554e+12 7.281e+11 1.369e+12 5.334e+11 1.203e+12 3.739e+11 1.056e+12 2.441e+11 9.254e+11 1.396e+11 8.100e+11 5.622e+10 7.083e+11 -9.803e+09 6.188e+11 -6.140e+10 5.402e+11 -1.012e+11 4.707e+11 -1.314e+11 4.095e+11 -1.537e+11 3.551e+11 -1.693e+11 3.066e+11 -1.795e+11 2.633e+11 -1.850e+11 2.244e+11 -1.865e+11 1.895e+11 -1.845e+11 1.580e+11 -1.795e+11 1.298e+11 -1.719e+11 1.045e+11 -1.621e+11 8.215e+10 -1.505e+11 6.246e+10 -1.375e+11 4.534e+10 -1.234e+11 3.075e+10 -1.088e+11 1.855e+10 -9.408e+10 8.593e+09 -7.953e+10 7.664e+08 -6.561e+10 -5.134e+09 -5.265e+10 -9.343e+09 -4.095e+10 -1.204e+10 -3.091e+10 -1.382e+10 -2.245e+10 -1.507e+10 -1.550e+10 -1.628e+10 -9.929e+09 -1.795e+10 -5.178e+09 -2.040e+10 -5.186e+08 -2.369e+10 4.742e+09 -2.765e+10 1.110e+10 -3.204e+10 1.881e+10 -3.658e+10 2.790e+10 -4.104e+10 3.829e+10 -4.523e+10 4.983e+10 -4.898e+10 6.225e+10 -5.215e+10 7.532e+10 -5.465e+10 8.877e+10 -5.640e+10 1.023e+11 -5.737e+10 1.157e+11 -5.754e+10 1.286e+11 -5.691e+10 1.408e+11 -5.553e+10 1.521e+11 -5.343e+10 1.623e+11 -5.068e+10 1.712e+11 -4.737e+10 1.788e+11 -4.357e+10 1.848e+11 -3.938e+10 1.893e+11 -3.490e+10 1.922e+11 -3.023e+10 1.936e+11 -2.546e+10 1.934e+11 -2.069e+10 1.917e+11 -1.600e+10 1.886e+11 -1.147e+10 1.842e+11 -7.165e+09 1.786e+11 -3.150e+09 1.720e+11 5.241e+08 1.644e+11 3.823e+09 1.561e+11 6.721e+09 1.471e+11 9.195e+09 1.377e+11 1.124e+10 1.279e+11 1.286e+10 1.179e+11 1.407e+10 1.079e+11 1.488e+10 9.802e+10 1.532e+10 8.830e+10 1.541e+10 7.889e+10 1.520e+10 6.985e+10 1.472e+10 6.128e+10 1.400e+10 5.324e+10 1.309e+10 4.577e+10 1.203e+10 3.891e+10 1.087e+10 3.269e+10 9.637e+09 2.711e+10 8.373e+09 2.217e+10 7.117e+09 1.786e+10 5.897e+09 1.414e+10 4.743e+09 1.099e+10 3.680e+09 8.366e+09 2.728e+09 6.221e+09 1.902e+09 4.507e+09 1.215e+09 3.175e+09 6.699e+08 2.175e+09 2.635e+08 1.459e+09 -2.524e+07 9.865e+08 -2.482e+08 7.190e+08 -4.892e+08 6.099e+08 -8.326e+08 6.056e+08 -1.329e+09 6.680e+08 -1.995e+09 7.899e+08 -2.836e+09 9.863e+08 -3.853e+09 1.283e+09 -5.044e+09 1.708e+09 -6.409e+09 2.292e+09 -7.944e+09 3.064e+09 -9.647e+09 4.054e+09 -1.151e+10 5.286e+09 -1.352e+10 6.787e+09 -1.568e+10 8.577e+09 -1.795e+10 1.067e+10 -2.033e+10 1.308e+10 -2.280e+10 1.582e+10 -2.533e+10 1.888e+10 -2.789e+10 2.226e+10 -3.047e+10 2.595e+10 -3.303e+10 2.993e+10 -3.554e+10 3.417e+10 -3.797e+10 3.865e+10 -4.030e+10 4.332e+10 -4.249e+10 4.814e+10 -4.451e+10 5.307e+10 -4.635e+10 5.805e+10 -4.797e+10 6.303e+10 -4.937e+10 6.796e+10 -5.052e+10 7.276e+10 -5.140e+10 7.738e+10 -5.202e+10 8.177e+10 -5.235e+10 8.585e+10 -5.241e+10 8.958e+10 -5.218e+10 9.290e+10 -5.167e+10 9.576e+10 -5.089e+10 9.812e+10 -4.985e+10 9.992e+10 -4.857e+10 1.011e+11 -4.705e+10 1.018e+11 -4.532e+10 1.018e+11 -4.340e+10 1.011e+11 -4.131e+10 9.982e+10 -3.908e+10 9.789e+10 -3.673e+10 9.536e+10 -3.430e+10 9.223e+10 -3.181e+10 8.856e+10 -2.929e+10 8.438e+10 -2.677e+10 7.974e+10 -2.427e+10 7.471e+10 -2.183e+10 6.937e+10 -1.947e+10 6.377e+10 -1.721e+10 5.800e+10 -1.506e+10 5.215e+10 -1.306e+10 4.629e+10 -1.120e+10 4.051e+10 -9.497e+09 3.489e+10 -7.958e+09 2.950e+10 -6.584e+09 2.442e+10 -5.373e+09 1.971e+10 -4.316e+09 1.542e+10 -3.408e+09 1.162e+10 -2.639e+09 8.329e+09 -1.994e+09 5.585e+09 -1.458e+09 3.406e+09 -1.019e+09 1.797e+09 -6.780e+08 7.414e+08 -4.842e+08 1.532e+08 -5.117e+08 -2.760e+08 -7.271e+08 -9.372e+08 -1.046e+09 -2.012e+09 -1.435e+09 -3.507e+09 -1.894e+09 -5.385e+09 -2.433e+09 -7.594e+09 -3.064e+09 -1.008e+10 -3.795e+09 -1.278e+10 -4.635e+09 -1.565e+10 -5.588e+09 -1.861e+10 -6.658e+09 -2.162e+10 -7.844e+09 -2.462e+10 -9.143e+09 -2.755e+10 -1.055e+10 -3.037e+10 -1.206e+10 -3.302e+10 -1.366e+10 -3.546e+10 -1.534e+10 -3.766e+10 -1.709e+10 -3.957e+10 -1.890e+10 -4.118e+10 -2.074e+10 -4.245e+10 -2.260e+10 -4.337e+10 -2.447e+10 -4.393e+10 -2.633e+10 -4.413e+10 -2.816e+10 -4.396e+10 -2.995e+10 -4.344e+10 -3.169e+10 -4.257e+10 -3.337e+10 -4.138e+10 -3.498e+10 -3.988e+10 -3.652e+10 -3.811e+10 -3.798e+10 -3.609e+10 -3.939e+10 -3.386e+10 -4.073e+10 -3.143e+10 -4.205e+10 -2.886e+10 -4.333e+10 -2.615e+10 -4.462e+10 -2.333e+10 -4.592e+10 -2.041e+10 -4.726e+10 -1.740e+10 -4.866e+10 -1.429e+10 -5.015e+10 -1.110e+10 -5.173e+10 -7.804e+09 -5.343e+10 -4.390e+09 -5.524e+10 -8.435e+08 -5.717e+10 2.848e+09 -5.921e+10 6.702e+09 -6.134e+10 1.072e+10 -6.355e+10 1.491e+10 -6.582e+10 1.927e+10 -6.811e+10 2.379e+10 -7.039e+10 2.844e+10 -7.265e+10 3.320e+10 -7.484e+10 3.804e+10 -7.694e+10 4.292e+10 -7.893e+10 4.781e+10 -8.078e+10 5.265e+10 -8.246e+10 5.741e+10 -8.395e+10 6.205e+10 -8.525e+10 6.653e+10 -8.632e+10 7.079e+10 -8.717e+10 7.482e+10 -8.779e+10 7.857e+10 -8.816e+10 8.202e+10 -8.828e+10 8.514e+10 -8.816e+10 8.792e+10 -8.780e+10 9.033e+10 -8.718e+10 9.238e+10 -8.634e+10 9.404e+10 -8.525e+10 9.532e+10 -8.395e+10 9.622e+10 -8.243e+10 9.674e+10 -8.070e+10 9.688e+10 -7.879e+10 9.666e+10 -7.670e+10 9.608e+10 -7.445e+10 9.516e+10 -7.206e+10 9.391e+10 -6.954e+10 9.234e+10 -6.690e+10 9.048e+10 -6.416e+10 8.834e+10 -6.135e+10 8.594e+10 -5.847e+10 8.331e+10 -5.555e+10 8.045e+10 -5.260e+10 7.741e+10 -4.965e+10 7.419e+10 -4.670e+10 7.084e+10 -4.378e+10 6.736e+10 -4.090e+10 6.380e+10 -3.808e+10 6.017e+10 -3.533e+10 5.650e+10 -3.266e+10 5.283e+10 -3.009e+10 4.917e+10 -2.761e+10 4.556e+10 -2.525e+10 4.201e+10 -2.300e+10 3.855e+10 -2.087e+10 3.519e+10 -1.887e+10 3.197e+10 -1.699e+10 2.888e+10 -1.523e+10 2.596e+10 -1.360e+10 2.320e+10 -1.210e+10 2.062e+10 -1.071e+10 1.822e+10 -9.445e+09 1.600e+10 -8.289e+09 1.397e+10 -7.239e+09 1.212e+10 -6.291e+09 1.045e+10 -5.440e+09 8.945e+09 -4.677e+09 7.607e+09 -4.001e+09 6.427e+09 -3.402e+09 5.391e+09 -2.874e+09 4.488e+09 -2.413e+09 3.707e+09 -2.011e+09 3.038e+09 -1.664e+09 2.468e+09 -1.366e+09 1.988e+09 -1.112e+09 1.586e+09 -8.977e+08 1.253e+09 -7.178e+08 9.794e+08 -5.682e+08 7.567e+08 -4.451e+08 5.773e+08 -3.449e+08 4.346e+08 -2.643e+08 3.224e+08 -2.002e+08 2.352e+08 -1.501e+08 1.686e+08 -1.113e+08 1.184e+08 -8.193e+07 8.127e+07 -6.001e+07 5.439e+07 -4.401e+07 3.536e+07 -3.260e+07 2.221e+07 -2.475e+07 1.337e+07 -1.962e+07 7.539e+06 -1.660e+07 3.676e+06 -1.522e+07 9.879e+05 -1.515e+07 -1.095e+06 -1.617e+07 -2.927e+06 -1.817e+07 -4.696e+06 -2.113e+07 -6.487e+06 -2.509e+07 -8.343e+06 -3.011e+07 -1.029e+07 -3.627e+07 -1.235e+07 -4.364e+07 -1.457e+07 -5.227e+07 -1.698e+07 -6.216e+07 -1.966e+07 -7.329e+07 -2.268e+07 -8.556e+07 -2.614e+07 -9.886e+07 -3.016e+07 -1.130e+08 -3.485e+07 -1.278e+08 -4.036e+07 -1.429e+08 -4.683e+07 -1.582e+08 -5.440e+07 -1.733e+08 -6.321e+07 -1.879e+08 -7.337e+07 -2.017e+08 -8.499e+07 -2.144e+08 -9.817e+07 -2.257e+08 -1.130e+08 -2.355e+08 -1.294e+08 -2.434e+08 -1.475e+08 -2.492e+08 -1.673e+08 -2.528e+08 -1.888e+08 -2.539e+08 -2.121e+08 -2.525e+08 -2.370e+08 -2.483e+08 -2.637e+08 -2.413e+08 -2.921e+08 -2.313e+08 -3.222e+08 -2.181e+08 -3.541e+08 -2.014e+08 -3.879e+08 -1.810e+08 -4.236e+08 -1.566e+08 -4.612e+08 -1.277e+08 -5.010e+08 -9.387e+07 -5.428e+08 -5.460e+07 -5.867e+08 -9.232e+06 -6.327e+08 4.284e+07 -6.806e+08 1.023e+08 -7.303e+08 1.699e+08 -7.815e+08 0.005 -59.972 -58.450 -56.928 -55.406 -53.884 -52.340 -50.605 -48.814 -47.049 -45.348 -43.727 -42.189 -40.733 -39.355 -38.050 -36.814 -35.642 -34.530 -33.474 -32.472 -31.520 -30.617 -29.758 -28.944 -28.172 -27.439 -26.746 -26.090 -25.470 -24.886 -24.335 -23.818 -23.334 -22.881 -22.459 -22.068 -21.707 -21.375 -21.073 -20.799 -20.554 -20.337 -20.147 -19.985 -19.851 -19.744 -19.665 -19.613 -19.588 -19.590 -19.620 -19.678 -19.763 -19.876 -20.017 -20.186 -20.383 -20.609 -20.865 -21.149 -21.464 -21.809 -22.185 -22.593 -23.032 -23.505 -24.011 -24.551 -25.127 -25.738 -26.388 -27.076 -27.803 -28.573 -29.386 -30.244 -31.150 -32.107 -33.119 -34.188 -35.321 -36.524 -37.805 -39.174 -40.644 -42.234 -43.966 -45.874 -48.002 -50.410 -53.170 -56.307 -59.506 -61.445 -61.129 -59.847 -58.788 -58.291 -58.422 -59.233 -60.656 -61.479 -59.093 -54.890 -50.947 -47.552 -44.600 -41.981 -39.615 -37.448 -35.443 -33.572 -31.816 -30.159 -28.590 -27.099 -25.680 -24.326 -23.033 -21.796 -20.611 -19.476 -18.387 -17.343 -16.341 -15.379 -14.456 -13.570 -12.719 -11.903 -11.121 -10.370 -9.651 -8.962 -8.302 -7.671 -7.069 -6.494 -5.946 -5.424 -4.928 -4.458 -4.013 -3.592 -3.196 -2.825 -2.477 -2.153 -1.852 -1.575 -1.322 -1.092 -0.885 -0.701 -0.541 -0.404 -0.291 -0.201 -0.136 -0.094 -0.076 -0.084 -0.116 -0.174 -0.258 -0.369 -0.506 -0.672 -0.867 -1.091 -1.346 -1.633 -1.953 -2.308 -2.699 -3.128 -3.598 -4.110 -4.668 -5.275 -5.934 -6.649 -7.427 -8.271 -9.191 -10.193 -11.288 -12.489 -13.812 -15.276 -16.908 -18.743 -20.827 -23.228 -26.048 -29.445 -33.696 -39.333 -47.616 -62.743 -59.316 -47.078 -39.157 -33.607 -29.389 -26.007 -23.195 -20.799 -18.718 -16.886 -15.255 -13.791 -12.469 -11.268 -10.172 -9.169 -8.250 -7.404 -6.626 -5.910 -5.250 -4.642 -4.082 -3.569 -3.097 -2.666 -2.273 -1.916 -1.594 -1.304 -1.047 -0.820 -0.622 -0.453 -0.312 -0.198 -0.110 -0.048 -0.012 0.000 -0.013 -0.049 -0.110 -0.194 -0.301 -0.431 -0.584 -0.761 -0.960 -1.182 -1.426 -1.694 -1.985 -2.299 -2.636 -2.996 -3.380 -3.787 -4.219 -4.674 -5.155 -5.660 -6.191 -6.748 -7.331 -7.942 -8.580 -9.246 -9.942 -10.667 -11.423 -12.212 -13.033 -13.889 -14.780 -15.709 -16.678 -17.687 -18.741 -19.842 -20.992 -22.197 -23.461 -24.790 -26.191 -27.674 -29.250 -30.935 -32.748 -34.719 -36.881 -39.284 -41.975 -44.956 -47.935 -49.835 -49.664 -48.325 -46.924 -45.799 -44.964 -44.371 -43.965 -43.709 -43.572 -43.529 -43.555 -43.627 -43.710 -43.763 -43.736 -43.570 -43.215 -42.646 -41.870 -40.925 -39.865 -38.741 -37.595 -36.457 -35.345 -34.270 -33.239 -32.255 -31.319 -30.430 -29.587 -28.789 -28.036 -27.324 -26.654 -26.024 -25.431 -24.877 -24.358 -23.875 -23.425 -23.009 -22.626 -22.274 -21.954 -21.665 -21.405 -21.175 -20.974 -20.802 -20.658 -20.542 -20.454 -20.393 -20.360 -20.354 -20.376 -20.424 -20.499 -20.601 -20.730 -20.886 -21.069 -21.278 -21.515 -21.779 -22.071 -22.391 -22.738 -23.114 -23.519 -23.952 -24.415 -24.908 -25.431 -25.985 -26.570 -27.188 -27.838 -28.521 -29.239 -29.991 -30.778 -31.602 -32.463 -33.362 -34.300 -35.277 -36.294 -37.352 -38.451 -39.592 -40.775 -41.999 -43.265 -44.570 -45.912 -47.289 -48.697 -50.129 -51.577 -53.027 -54.477 -55.926 -57.376 0 1 1.0 1 N3 HH 25.38 30.17 0.05 1.312e+09 7.787e+08 1.368e+09 8.200e+08 1.426e+09 8.603e+08 1.488e+09 8.999e+08 1.552e+09 9.391e+08 1.622e+09 9.779e+08 1.695e+09 1.017e+09 1.775e+09 1.057e+09 1.860e+09 1.098e+09 1.951e+09 1.140e+09 2.049e+09 1.186e+09 2.152e+09 1.234e+09 2.262e+09 1.286e+09 2.378e+09 1.342e+09 2.498e+09 1.403e+09 2.622e+09 1.469e+09 2.749e+09 1.541e+09 2.876e+09 1.619e+09 3.003e+09 1.701e+09 3.126e+09 1.789e+09 3.243e+09 1.881e+09 3.352e+09 1.976e+09 3.452e+09 2.074e+09 3.538e+09 2.172e+09 3.608e+09 2.269e+09 3.661e+09 2.363e+09 3.695e+09 2.452e+09 3.707e+09 2.533e+09 3.698e+09 2.603e+09 3.666e+09 2.661e+09 3.610e+09 2.704e+09 3.532e+09 2.729e+09 3.433e+09 2.735e+09 3.313e+09 2.720e+09 3.175e+09 2.684e+09 3.020e+09 2.625e+09 2.852e+09 2.544e+09 2.673e+09 2.442e+09 2.486e+09 2.320e+09 2.294e+09 2.180e+09 2.101e+09 2.024e+09 1.909e+09 1.855e+09 1.720e+09 1.678e+09 1.538e+09 1.494e+09 1.365e+09 1.309e+09 1.201e+09 1.125e+09 1.049e+09 9.472e+08 9.085e+08 7.782e+08 7.817e+08 6.214e+08 6.685e+08 4.791e+08 5.692e+08 3.532e+08 4.844e+08 2.447e+08 4.143e+08 1.533e+08 3.597e+08 7.727e+07 3.211e+08 1.304e+07 2.985e+08 -4.504e+07 2.912e+08 -1.039e+08 2.971e+08 -1.703e+08 3.137e+08 -2.495e+08 3.387e+08 -3.453e+08 3.703e+08 -4.591e+08 4.079e+08 -5.919e+08 4.512e+08 -7.440e+08 5.006e+08 -9.151e+08 5.568e+08 -1.105e+09 6.212e+08 -1.315e+09 6.950e+08 -1.543e+09 7.800e+08 -1.790e+09 8.784e+08 -2.057e+09 9.922e+08 -2.343e+09 1.124e+09 -2.649e+09 1.276e+09 -2.975e+09 1.452e+09 -3.319e+09 1.654e+09 -3.682e+09 1.885e+09 -4.062e+09 2.149e+09 -4.459e+09 2.447e+09 -4.869e+09 2.783e+09 -5.291e+09 3.159e+09 -5.721e+09 3.575e+09 -6.154e+09 4.034e+09 -6.587e+09 4.534e+09 -7.013e+09 5.073e+09 -7.426e+09 5.651e+09 -7.820e+09 6.261e+09 -8.186e+09 6.898e+09 -8.517e+09 7.555e+09 -8.806e+09 8.223e+09 -9.044e+09 8.890e+09 -9.224e+09 9.544e+09 -9.339e+09 1.017e+10 -9.384e+09 1.076e+10 -9.353e+09 1.129e+10 -9.244e+09 1.174e+10 -9.054e+09 1.210e+10 -8.785e+09 1.236e+10 -8.437e+09 1.249e+10 -8.015e+09 1.249e+10 -7.527e+09 1.235e+10 -6.979e+09 1.205e+10 -6.381e+09 1.159e+10 -5.747e+09 1.099e+10 -5.087e+09 1.023e+10 -4.417e+09 9.330e+09 -3.750e+09 8.309e+09 -3.102e+09 7.190e+09 -2.486e+09 6.004e+09 -1.917e+09 4.788e+09 -1.407e+09 3.590e+09 -9.659e+08 2.464e+09 -6.033e+08 1.473e+09 -3.250e+08 6.885e+08 -1.343e+08 1.902e+08 -3.132e+07 -3.902e+07 1.053e+07 -4.140e+08 7.111e+07 -1.338e+09 1.953e+08 -2.954e+09 3.698e+08 -5.383e+09 5.741e+08 -8.753e+09 7.829e+08 -1.320e+10 9.658e+08 -1.888e+10 1.086e+09 -2.592e+10 1.101e+09 -3.449e+10 9.602e+08 -4.474e+10 6.071e+08 -5.683e+10 -2.379e+07 -7.092e+10 -1.008e+09 -8.716e+10 -2.430e+09 -1.057e+11 -4.384e+09 -1.267e+11 -6.979e+09 -1.503e+11 -1.033e+10 -1.765e+11 -1.458e+10 -2.056e+11 -1.986e+10 -2.375e+11 -2.634e+10 -2.723e+11 -3.418e+10 -3.101e+11 -4.359e+10 -3.507e+11 -5.475e+10 -3.943e+11 -6.788e+10 -4.406e+11 -8.320e+10 -4.895e+11 -1.009e+11 -5.408e+11 -1.213e+11 -5.945e+11 -1.447e+11 -6.503e+11 -1.712e+11 -7.077e+11 -2.010e+11 -7.665e+11 -2.346e+11 -8.262e+11 -2.721e+11 -8.864e+11 -3.138e+11 -9.465e+11 -3.599e+11 -1.006e+12 -4.106e+11 -1.065e+12 -4.662e+11 -1.122e+12 -5.268e+11 -1.177e+12 -5.928e+11 -1.229e+12 -6.643e+11 -1.278e+12 -7.415e+11 -1.324e+12 -8.248e+11 -1.365e+12 -9.142e+11 -1.402e+12 -1.010e+12 -1.433e+12 -1.113e+12 -1.459e+12 -1.224e+12 -1.480e+12 -1.342e+12 -1.493e+12 -1.468e+12 -1.501e+12 -1.604e+12 -1.500e+12 -1.750e+12 -1.493e+12 -1.907e+12 -1.477e+12 -2.076e+12 -1.452e+12 -2.258e+12 -1.418e+12 -2.456e+12 -1.373e+12 -2.670e+12 -1.316e+12 -2.903e+12 -1.246e+12 -3.158e+12 -1.162e+12 -3.435e+12 -1.061e+12 -3.739e+12 -9.414e+11 -4.072e+12 -8.002e+11 -4.437e+12 -6.345e+11 -4.836e+12 -4.412e+11 -5.274e+12 -2.166e+11 -5.754e+12 4.328e+10 -6.279e+12 3.429e+11 -6.853e+12 6.865e+11 -7.478e+12 1.079e+12 -8.160e+12 1.526e+12 -8.902e+12 2.032e+12 -9.706e+12 2.602e+12 -1.058e+13 3.243e+12 -1.152e+13 3.960e+12 -1.254e+13 4.760e+12 -1.363e+13 5.648e+12 -1.480e+13 6.629e+12 -1.606e+13 7.710e+12 -1.740e+13 8.897e+12 -1.884e+13 1.019e+13 -2.036e+13 1.160e+13 -2.198e+13 1.314e+13 -2.369e+13 1.479e+13 -2.551e+13 1.658e+13 -2.742e+13 1.849e+13 -2.943e+13 2.054e+13 -3.155e+13 2.273e+13 -3.376e+13 2.505e+13 -3.608e+13 2.751e+13 -3.851e+13 3.011e+13 -4.103e+13 3.285e+13 -4.366e+13 3.573e+13 -4.639e+13 3.873e+13 -4.923e+13 4.187e+13 -5.216e+13 4.514e+13 -5.519e+13 4.852e+13 -5.833e+13 5.203e+13 -6.156e+13 5.564e+13 -6.488e+13 5.935e+13 -6.830e+13 6.316e+13 -7.180e+13 6.705e+13 -7.540e+13 7.102e+13 -7.908e+13 7.506e+13 -8.285e+13 7.914e+13 -8.670e+13 8.327e+13 -9.063e+13 8.743e+13 -9.463e+13 9.161e+13 -9.871e+13 9.579e+13 -1.029e+14 9.997e+13 -1.071e+14 1.041e+14 -1.113e+14 1.083e+14 -1.157e+14 1.124e+14 -1.201e+14 1.164e+14 -1.246e+14 1.204e+14 -1.291e+14 1.243e+14 -1.336e+14 1.281e+14 -1.382e+14 1.317e+14 -1.428e+14 1.352e+14 -1.475e+14 1.386e+14 -1.521e+14 1.419e+14 -1.568e+14 1.449e+14 -1.615e+14 1.478e+14 -1.661e+14 1.504e+14 -1.708e+14 1.529e+14 -1.755e+14 1.552e+14 -1.801e+14 1.572e+14 -1.847e+14 1.590e+14 -1.893e+14 1.605e+14 -1.938e+14 1.618e+14 -1.983e+14 1.629e+14 -2.027e+14 1.637e+14 -2.071e+14 1.642e+14 -2.114e+14 1.645e+14 -2.156e+14 1.645e+14 -2.197e+14 1.642e+14 -2.238e+14 1.637e+14 -2.278e+14 1.629e+14 -2.317e+14 1.619e+14 -2.355e+14 1.606e+14 -2.392e+14 1.590e+14 -2.428e+14 1.572e+14 -2.463e+14 1.552e+14 -2.497e+14 1.529e+14 -2.530e+14 1.504e+14 -2.562e+14 1.477e+14 -2.592e+14 1.447e+14 -2.622e+14 1.416e+14 -2.651e+14 1.382e+14 -2.679e+14 1.347e+14 -2.705e+14 1.310e+14 -2.731e+14 1.272e+14 -2.756e+14 1.232e+14 -2.780e+14 1.190e+14 -2.804e+14 1.148e+14 -2.826e+14 1.104e+14 -2.847e+14 1.058e+14 -2.867e+14 1.012e+14 -2.886e+14 9.647e+13 -2.904e+14 9.164e+13 -2.921e+14 8.674e+13 -2.937e+14 8.177e+13 -2.951e+14 7.673e+13 -2.965e+14 7.165e+13 -2.977e+14 6.652e+13 -2.988e+14 6.136e+13 -2.998e+14 5.619e+13 -3.006e+14 5.100e+13 -3.013e+14 4.581e+13 -3.018e+14 4.062e+13 -3.022e+14 3.546e+13 -3.024e+14 3.033e+13 -3.024e+14 2.523e+13 -3.023e+14 2.019e+13 -3.019e+14 1.520e+13 -3.014e+14 1.029e+13 -3.007e+14 5.460e+12 -2.997e+14 7.189e+11 -2.986e+14 -3.915e+12 -2.972e+14 -8.434e+12 -2.956e+14 -1.283e+13 -2.938e+14 -1.710e+13 -2.918e+14 -2.122e+13 -2.895e+14 -2.519e+13 -2.870e+14 -2.899e+13 -2.843e+14 -3.263e+13 -2.813e+14 -3.609e+13 -2.781e+14 -3.937e+13 -2.747e+14 -4.245e+13 -2.710e+14 -4.535e+13 -2.672e+14 -4.374e+13 -2.656e+14 -4.844e+13 -2.609e+14 -5.076e+13 -2.565e+14 -5.287e+13 -2.519e+14 -5.478e+13 -2.472e+14 -5.648e+13 -2.422e+14 -5.796e+13 -2.371e+14 -5.924e+13 -2.318e+14 -6.032e+13 -2.264e+14 -6.119e+13 -2.209e+14 -6.186e+13 -2.152e+14 -6.234e+13 -2.094e+14 -6.262e+13 -2.036e+14 -6.272e+13 -1.976e+14 -6.264e+13 -1.916e+14 -6.238e+13 -1.855e+14 -6.196e+13 -1.794e+14 -6.138e+13 -1.732e+14 -6.065e+13 -1.670e+14 -5.977e+13 -1.608e+14 -5.876e+13 -1.546e+14 -5.763e+13 -1.485e+14 -5.638e+13 -1.423e+14 -5.502e+13 -1.362e+14 -5.357e+13 -1.302e+14 -5.202e+13 -1.242e+14 -5.040e+13 -1.183e+14 -4.871e+13 -1.125e+14 -4.696e+13 -1.068e+14 -4.516e+13 -1.012e+14 -4.332e+13 -9.569e+13 -4.145e+13 -9.032e+13 -3.955e+13 -8.508e+13 -3.765e+13 -7.999e+13 -3.574e+13 -7.504e+13 -3.384e+13 -7.025e+13 -3.195e+13 -6.562e+13 -3.008e+13 -6.115e+13 -2.824e+13 -5.686e+13 -2.643e+13 -5.275e+13 -2.467e+13 -4.881e+13 -2.296e+13 -4.506e+13 -2.130e+13 -4.150e+13 -1.970e+13 -3.812e+13 -1.815e+13 -3.491e+13 -1.667e+13 -3.189e+13 -1.526e+13 -2.904e+13 -1.391e+13 -2.636e+13 -1.264e+13 -2.386e+13 -1.143e+13 -2.153e+13 -1.030e+13 -1.936e+13 -9.244e+12 -1.735e+13 -8.257e+12 -1.549e+13 -7.341e+12 -1.378e+13 -6.496e+12 -1.222e+13 -5.718e+12 -1.079e+13 -5.006e+12 -9.481e+12 -4.358e+12 -8.299e+12 -3.771e+12 -7.232e+12 -3.242e+12 -6.271e+12 -2.769e+12 -5.411e+12 -2.346e+12 -4.644e+12 -1.972e+12 -3.964e+12 -1.644e+12 -3.363e+12 -1.356e+12 -2.835e+12 -1.107e+12 -2.374e+12 -8.929e+11 -1.973e+12 -7.102e+11 -1.627e+12 -5.560e+11 -1.331e+12 -4.272e+11 -1.078e+12 -3.209e+11 -8.648e+11 -2.344e+11 -6.861e+11 -1.651e+11 -5.379e+11 -1.107e+11 -4.162e+11 -6.884e+10 -3.175e+11 -3.761e+10 -2.386e+11 -1.505e+10 -1.764e+11 5.594e+08 -1.283e+11 1.083e+10 -9.207e+10 1.728e+10 -6.538e+10 2.130e+10 -4.629e+10 2.410e+10 -3.297e+10 2.664e+10 -2.367e+10 2.947e+10 -1.693e+10 3.273e+10 -1.165e+10 3.623e+10 -7.140e+09 3.969e+10 -3.108e+09 4.279e+10 5.134e+08 4.529e+10 3.680e+09 4.701e+10 6.309e+09 4.786e+10 8.328e+09 4.780e+10 9.700e+09 4.686e+10 1.042e+10 4.510e+10 1.052e+10 4.260e+10 1.006e+10 3.950e+10 9.134e+09 3.593e+10 7.841e+09 3.202e+10 6.295e+09 2.795e+10 4.614e+09 2.385e+10 2.908e+09 1.986e+10 1.278e+09 1.613e+10 -1.965e+08 1.276e+10 -1.462e+09 9.852e+09 -2.510e+09 7.464e+09 -3.390e+09 5.596e+09 -4.222e+09 4.153e+09 -5.193e+09 2.952e+09 -6.495e+09 1.764e+09 -8.266e+09 3.909e+08 -1.056e+10 -1.291e+09 -1.336e+10 -3.333e+09 -1.661e+10 -5.733e+09 -2.024e+10 -8.452e+09 -2.416e+10 -1.143e+10 -2.830e+10 -1.459e+10 -3.257e+10 -1.787e+10 -3.688e+10 -2.116e+10 -4.116e+10 -2.440e+10 -4.531e+10 -2.750e+10 -4.928e+10 -3.040e+10 -5.298e+10 -3.303e+10 -5.636e+10 -3.535e+10 -5.936e+10 -3.731e+10 -6.193e+10 -3.887e+10 -6.406e+10 -4.002e+10 -6.570e+10 -4.074e+10 -6.685e+10 -4.103e+10 -6.750e+10 -4.092e+10 -6.764e+10 -4.040e+10 -6.729e+10 -3.952e+10 -6.646e+10 -3.830e+10 -6.518e+10 -3.679e+10 -6.348e+10 -3.501e+10 -6.140e+10 -3.303e+10 -5.897e+10 -3.087e+10 -5.625e+10 -2.860e+10 -5.327e+10 -2.624e+10 -5.009e+10 -2.385e+10 -4.676e+10 -2.145e+10 -4.333e+10 -1.910e+10 -3.985e+10 -1.681e+10 -3.635e+10 -1.462e+10 -3.290e+10 -1.255e+10 -2.952e+10 -1.062e+10 -2.626e+10 -8.850e+09 -2.314e+10 -7.240e+09 -2.020e+10 -5.800e+09 -1.745e+10 -4.531e+09 -1.492e+10 -3.431e+09 -1.260e+10 -2.497e+09 -1.052e+10 -1.717e+09 -8.669e+09 -1.084e+09 -7.044e+09 -5.826e+08 -5.639e+09 -1.998e+08 -4.441e+09 8.005e+07 -3.439e+09 2.730e+08 -2.616e+09 3.958e+08 -1.952e+09 4.642e+08 -1.428e+09 4.939e+08 -1.025e+09 4.985e+08 -7.196e+08 4.896e+08 -4.921e+08 4.750e+08 -3.225e+08 4.585e+08 -1.934e+08 4.405e+08 -9.150e+07 4.190e+08 -8.136e+06 3.912e+08 6.161e+07 3.552e+08 1.196e+08 3.106e+08 1.665e+08 2.584e+08 2.029e+08 2.007e+08 2.302e+08 1.399e+08 2.515e+08 7.617e+07 2.715e+08 6.480e+06 2.962e+08 -7.721e+07 3.308e+08 -1.872e+08 3.785e+08 -3.376e+08 4.389e+08 -5.419e+08 5.095e+08 -8.121e+08 5.864e+08 -1.158e+09 6.651e+08 -1.587e+09 7.415e+08 -2.105e+09 8.116e+08 -2.715e+09 8.718e+08 -3.417e+09 9.190e+08 -4.212e+09 9.504e+08 -5.095e+09 9.641e+08 -6.060e+09 9.582e+08 -7.100e+09 9.318e+08 -8.205e+09 8.846e+08 -9.362e+09 8.167e+08 -1.056e+10 7.290e+08 -1.178e+10 6.231e+08 -1.301e+10 5.012e+08 -1.424e+10 3.659e+08 -1.544e+10 2.206e+08 -1.660e+10 6.932e+07 -1.770e+10 -8.408e+07 -1.873e+10 -2.351e+08 -1.966e+10 -3.789e+08 -2.050e+10 -5.112e+08 -2.122e+10 -6.279e+08 -2.181e+10 -7.253e+08 -2.227e+10 -7.993e+08 -2.259e+10 -8.466e+08 -2.276e+10 -8.646e+08 -2.278e+10 -8.519e+08 -2.265e+10 -8.077e+08 -2.238e+10 -7.326e+08 -2.196e+10 -6.275e+08 -2.140e+10 -4.947e+08 -2.071e+10 -3.375e+08 -1.991e+10 -1.596e+08 -1.901e+10 3.446e+07 -1.801e+10 2.395e+08 -1.695e+10 4.502e+08 -1.582e+10 6.612e+08 -1.464e+10 8.666e+08 -1.345e+10 1.061e+09 -1.224e+10 1.241e+09 -1.104e+10 1.401e+09 -9.859e+09 1.537e+09 -8.714e+09 1.648e+09 -7.619e+09 1.732e+09 -6.583e+09 1.787e+09 -5.616e+09 1.815e+09 -4.727e+09 1.817e+09 -3.920e+09 1.795e+09 -3.198e+09 1.753e+09 -2.563e+09 1.697e+09 -2.014e+09 1.631e+09 -1.546e+09 1.563e+09 -1.152e+09 1.498e+09 -8.224e+08 1.445e+09 -5.442e+08 1.408e+09 -3.042e+08 1.392e+09 -8.711e+07 1.398e+09 1.197e+08 1.422e+09 3.248e+08 1.462e+09 5.336e+08 1.510e+09 7.478e+08 1.562e+09 9.658e+08 1.610e+09 1.184e+09 1.651e+09 1.399e+09 1.681e+09 1.604e+09 1.696e+09 1.795e+09 1.694e+09 1.965e+09 1.675e+09 2.111e+09 1.636e+09 2.228e+09 1.579e+09 2.314e+09 1.503e+09 2.365e+09 1.411e+09 2.380e+09 1.302e+09 2.359e+09 1.180e+09 2.302e+09 1.047e+09 2.212e+09 9.052e+08 2.091e+09 7.584e+08 1.942e+09 6.102e+08 1.770e+09 4.639e+08 1.581e+09 3.234e+08 1.381e+09 1.923e+08 1.176e+09 7.401e+07 9.746e+08 -2.898e+07 7.839e+08 -1.151e+08 6.112e+08 -1.851e+08 4.621e+08 -2.430e+08 3.387e+08 -2.976e+08 2.364e+08 -3.625e+08 1.418e+08 -4.530e+08 3.552e+07 -5.810e+08 -1.018e+08 -7.525e+08 -2.857e+08 -9.686e+08 -5.268e+08 -1.227e+09 -8.312e+08 -1.525e+09 -1.203e+09 -1.859e+09 -1.642e+09 -2.223e+09 -2.149e+09 -2.613e+09 -2.720e+09 -3.022e+09 -3.352e+09 -3.447e+09 -4.038e+09 -3.880e+09 -4.773e+09 -4.315e+09 -5.550e+09 -4.746e+09 -6.359e+09 -5.167e+09 -7.194e+09 -5.573e+09 -8.043e+09 -5.958e+09 -8.897e+09 -6.317e+09 -9.746e+09 -6.647e+09 -1.058e+10 -6.943e+09 -1.139e+10 -7.203e+09 -1.217e+10 -7.422e+09 -1.290e+10 -7.601e+09 -1.359e+10 -7.738e+09 -1.422e+10 -7.832e+09 -1.478e+10 -7.884e+09 -1.528e+10 -7.894e+09 -1.571e+10 -7.862e+09 -1.606e+10 -7.790e+09 -1.633e+10 -7.678e+09 -1.652e+10 -7.530e+09 -1.664e+10 -7.347e+09 -1.667e+10 -7.130e+09 -1.662e+10 -6.883e+09 -1.650e+10 -6.608e+09 0.005 -59.106 -57.361 -55.616 -53.871 -52.126 -50.380 -48.635 -46.979 -45.410 -43.921 -42.505 -41.156 -39.869 -38.638 -37.462 -36.338 -35.265 -34.241 -33.263 -32.329 -31.439 -30.590 -29.782 -29.012 -28.281 -27.586 -26.928 -26.304 -25.715 -25.159 -24.637 -24.146 -23.687 -23.259 -22.861 -22.494 -22.157 -21.849 -21.570 -21.320 -21.099 -20.907 -20.743 -20.607 -20.500 -20.421 -20.370 -20.349 -20.356 -20.389 -20.450 -20.540 -20.661 -20.811 -20.991 -21.202 -21.445 -21.719 -22.026 -22.366 -22.741 -23.150 -23.596 -24.079 -24.601 -25.162 -25.766 -26.412 -27.105 -27.845 -28.637 -29.482 -30.386 -31.353 -32.389 -33.500 -34.696 -35.988 -37.392 -38.928 -40.625 -42.526 -44.693 -47.231 -50.327 -54.325 -59.642 -62.567 -58.635 -55.214 -52.965 -51.439 -50.377 -49.642 -49.156 -48.874 -48.774 -48.846 -49.094 -49.524 -50.128 -50.839 -51.411 -51.332 -50.140 -47.976 -45.401 -42.822 -40.389 -38.132 -36.038 -34.087 -32.262 -30.544 -28.921 -27.383 -25.923 -24.533 -23.208 -21.943 -20.734 -19.578 -18.471 -17.411 -16.395 -15.422 -14.490 -13.596 -12.739 -11.918 -11.131 -10.378 -9.657 -8.968 -8.309 -7.679 -7.079 -6.507 -5.963 -5.446 -4.956 -4.492 -4.053 -3.639 -3.247 -2.879 -2.537 -2.219 -1.925 -1.655 -1.409 -1.187 -0.989 -0.815 -0.666 -0.540 -0.438 -0.361 -0.309 -0.281 -0.279 -0.302 -0.352 -0.429 -0.532 -0.664 -0.824 -1.013 -1.233 -1.484 -1.767 -2.084 -2.435 -2.819 -3.243 -3.707 -4.215 -4.769 -5.372 -6.029 -6.743 -7.521 -8.367 -9.289 -10.296 -11.399 -12.610 -13.948 -15.432 -17.092 -18.966 -21.107 -23.595 -26.555 -30.200 -34.951 -41.862 -53.684 -50.794 -48.100 -45.330 -39.272 -33.819 -29.535 -26.093 -23.238 -20.812 -18.710 -16.863 -15.221 -13.749 -12.421 -11.216 -10.117 -9.112 -8.192 -7.346 -6.568 -5.852 -5.193 -4.587 -4.030 -3.519 -3.050 -2.623 -2.233 -1.881 -1.563 -1.278 -1.023 -0.798 -0.602 -0.435 -0.296 -0.184 -0.099 -0.041 -0.008 0.000 -0.018 -0.060 -0.126 -0.216 -0.329 -0.467 -0.627 -0.811 -1.018 -1.249 -1.502 -1.779 -2.079 -2.402 -2.749 -3.120 -3.514 -3.933 -4.376 -4.842 -5.330 -5.844 -6.384 -6.949 -7.542 -8.162 -8.809 -9.485 -10.190 -10.925 -11.690 -12.486 -13.315 -14.177 -15.074 -16.005 -16.974 -17.981 -19.028 -20.117 -21.249 -22.426 -23.650 -24.925 -26.253 -27.637 -29.080 -30.588 -32.163 -33.809 -35.531 -37.334 -39.221 -41.187 -43.217 -45.270 -47.270 -49.086 -50.560 -51.578 -52.140 -52.348 -52.322 -52.128 -51.771 -51.221 -50.448 -49.450 -48.265 -46.948 -45.561 -44.151 -42.752 -41.385 -40.062 -38.788 -37.567 -36.398 -35.280 -34.213 -33.192 -32.216 -31.285 -30.399 -29.556 -28.754 -27.992 -27.270 -26.586 -25.939 -25.328 -24.753 -24.213 -23.706 -23.232 -22.791 -22.381 -22.003 -21.656 -21.339 -21.052 -20.794 -20.565 -20.365 -20.193 -20.049 -19.932 -19.844 -19.783 -19.749 -19.742 -19.762 -19.809 -19.882 -19.980 -20.104 -20.256 -20.435 -20.641 -20.874 -21.136 -21.425 -21.742 -22.087 -22.462 -22.865 -23.298 -23.761 -24.255 -24.779 -25.336 -25.924 -26.546 -27.201 -27.890 -28.615 -29.377 -30.175 -31.011 -31.886 -32.801 -33.757 -34.755 -35.796 -36.881 -38.010 -39.184 -40.404 -41.669 -42.977 -44.326 -45.715 -47.140 -48.594 -50.070 -51.554 -53.035 -54.516 -55.997 -57.477 -58.958 -60.439 0 1 1.0 1 N3 HV 25.38 30.17 0.05 7.267e+08 -3.433e+09 9.321e+08 -3.753e+09 1.165e+09 -4.086e+09 1.428e+09 -4.429e+09 1.722e+09 -4.780e+09 2.048e+09 -5.136e+09 2.407e+09 -5.494e+09 2.800e+09 -5.850e+09 3.225e+09 -6.201e+09 3.682e+09 -6.542e+09 4.170e+09 -6.870e+09 4.686e+09 -7.180e+09 5.228e+09 -7.469e+09 5.794e+09 -7.733e+09 6.378e+09 -7.969e+09 6.977e+09 -8.172e+09 7.586e+09 -8.342e+09 8.199e+09 -8.477e+09 8.810e+09 -8.574e+09 9.415e+09 -8.633e+09 1.001e+10 -8.655e+09 1.058e+10 -8.639e+09 1.113e+10 -8.587e+09 1.165e+10 -8.499e+09 1.213e+10 -8.377e+09 1.257e+10 -8.224e+09 1.297e+10 -8.041e+09 1.331e+10 -7.832e+09 1.360e+10 -7.599e+09 1.383e+10 -7.345e+09 1.401e+10 -7.073e+09 1.412e+10 -6.785e+09 1.417e+10 -6.484e+09 1.415e+10 -6.173e+09 1.407e+10 -5.854e+09 1.393e+10 -5.529e+09 1.372e+10 -5.200e+09 1.345e+10 -4.870e+09 1.312e+10 -4.539e+09 1.274e+10 -4.210e+09 1.231e+10 -3.883e+09 1.182e+10 -3.561e+09 1.129e+10 -3.246e+09 1.072e+10 -2.939e+09 1.012e+10 -2.640e+09 9.486e+09 -2.354e+09 8.830e+09 -2.080e+09 8.157e+09 -1.821e+09 7.473e+09 -1.578e+09 6.787e+09 -1.353e+09 6.103e+09 -1.147e+09 5.430e+09 -9.623e+08 4.775e+09 -7.984e+08 4.143e+09 -6.560e+08 3.542e+09 -5.351e+08 2.977e+09 -4.350e+08 2.454e+09 -3.545e+08 1.979e+09 -2.918e+08 1.553e+09 -2.448e+08 1.180e+09 -2.105e+08 8.632e+08 -1.860e+08 6.020e+08 -1.682e+08 3.962e+08 -1.548e+08 2.439e+08 -1.449e+08 1.397e+08 -1.413e+08 7.205e+07 -1.529e+08 2.001e+07 -1.913e+08 -3.849e+07 -2.632e+08 -1.155e+08 -3.701e+08 -2.123e+08 -5.115e+08 -3.257e+08 -6.882e+08 -4.506e+08 -9.013e+08 -5.805e+08 -1.151e+09 -7.093e+08 -1.438e+09 -8.306e+08 -1.763e+09 -9.381e+08 -2.124e+09 -1.026e+09 -2.520e+09 -1.089e+09 -2.950e+09 -1.123e+09 -3.410e+09 -1.122e+09 -3.899e+09 -1.083e+09 -4.412e+09 -1.005e+09 -4.945e+09 -8.832e+08 -5.494e+09 -7.176e+08 -6.055e+09 -5.078e+08 -6.621e+09 -2.542e+08 -7.186e+09 4.194e+07 -7.746e+09 3.777e+08 -8.293e+09 7.496e+08 -8.820e+09 1.153e+09 -9.320e+09 1.582e+09 -9.786e+09 2.030e+09 -1.021e+10 2.488e+09 -1.058e+10 2.947e+09 -1.089e+10 3.397e+09 -1.114e+10 3.828e+09 -1.131e+10 4.227e+09 -1.140e+10 4.581e+09 -1.141e+10 4.881e+09 -1.131e+10 5.112e+09 -1.112e+10 5.264e+09 -1.082e+10 5.329e+09 -1.041e+10 5.296e+09 -9.899e+09 5.160e+09 -9.282e+09 4.917e+09 -8.566e+09 4.569e+09 -7.760e+09 4.122e+09 -6.877e+09 3.588e+09 -5.935e+09 2.985e+09 -4.957e+09 2.339e+09 -3.970e+09 1.685e+09 -3.008e+09 1.067e+09 -2.112e+09 5.358e+08 -1.326e+09 1.462e+08 -7.065e+08 -9.222e+07 -3.134e+08 -3.651e+08 -1.023e+08 -9.825e+08 1.767e+08 -2.154e+09 7.763e+08 -4.007e+09 1.817e+09 -6.680e+09 3.374e+09 -1.032e+10 5.508e+09 -1.509e+10 8.272e+09 -2.116e+10 1.172e+10 -2.871e+10 1.587e+10 -3.791e+10 2.076e+10 -4.895e+10 2.639e+10 -6.203e+10 3.276e+10 -7.729e+10 3.983e+10 -9.495e+10 4.755e+10 -1.152e+11 5.586e+10 -1.381e+11 6.464e+10 -1.638e+11 7.379e+10 -1.926e+11 8.315e+10 -2.244e+11 9.254e+10 -2.594e+11 1.018e+11 -2.976e+11 1.106e+11 -3.391e+11 1.188e+11 -3.838e+11 1.262e+11 -4.317e+11 1.323e+11 -4.828e+11 1.369e+11 -5.371e+11 1.397e+11 -5.944e+11 1.403e+11 -6.546e+11 1.384e+11 -7.174e+11 1.336e+11 -7.827e+11 1.256e+11 -8.502e+11 1.138e+11 -9.196e+11 9.795e+10 -9.907e+11 7.761e+10 -1.063e+12 5.239e+10 -1.137e+12 2.184e+10 -1.211e+12 -1.444e+10 -1.285e+12 -5.686e+10 -1.360e+12 -1.059e+11 -1.434e+12 -1.620e+11 -1.507e+12 -2.256e+11 -1.580e+12 -2.973e+11 -1.651e+12 -3.776e+11 -1.721e+12 -4.670e+11 -1.789e+12 -5.664e+11 -1.855e+12 -6.765e+11 -1.919e+12 -7.980e+11 -1.980e+12 -9.321e+11 -2.039e+12 -1.080e+12 -2.096e+12 -1.243e+12 -2.149e+12 -1.422e+12 -2.199e+12 -1.620e+12 -2.246e+12 -1.838e+12 -2.288e+12 -2.079e+12 -2.326e+12 -2.346e+12 -2.358e+12 -2.640e+12 -2.384e+12 -2.965e+12 -2.402e+12 -3.326e+12 -2.410e+12 -3.724e+12 -2.407e+12 -4.165e+12 -2.391e+12 -4.653e+12 -2.359e+12 -5.191e+12 -2.308e+12 -5.784e+12 -2.236e+12 -6.438e+12 -2.138e+12 -7.156e+12 -2.011e+12 -7.944e+12 -1.852e+12 -8.808e+12 -1.657e+12 -9.749e+12 -1.421e+12 -1.078e+13 -1.140e+12 -1.189e+13 -8.082e+11 -1.310e+13 -4.216e+11 -1.441e+13 2.484e+10 -1.583e+13 5.356e+11 -1.735e+13 1.116e+12 -1.899e+13 1.771e+12 -2.074e+13 2.505e+12 -2.262e+13 3.323e+12 -2.462e+13 4.229e+12 -2.675e+13 5.227e+12 -2.902e+13 6.323e+12 -3.142e+13 7.518e+12 -3.396e+13 8.817e+12 -3.664e+13 1.022e+13 -3.947e+13 1.174e+13 -4.244e+13 1.336e+13 -4.556e+13 1.510e+13 -4.882e+13 1.696e+13 -5.224e+13 1.892e+13 -5.579e+13 2.100e+13 -5.950e+13 2.319e+13 -6.335e+13 2.549e+13 -6.734e+13 2.790e+13 -7.147e+13 3.042e+13 -7.573e+13 3.303e+13 -8.013e+13 3.574e+13 -8.465e+13 3.854e+13 -8.930e+13 4.141e+13 -9.405e+13 4.437e+13 -9.892e+13 4.739e+13 -1.039e+14 5.046e+13 -1.090e+14 5.359e+13 -1.141e+14 5.674e+13 -1.193e+14 5.993e+13 -1.247e+14 6.313e+13 -1.300e+14 6.633e+13 -1.354e+14 6.952e+13 -1.409e+14 7.271e+13 -1.464e+14 7.587e+13 -1.520e+14 7.899e+13 -1.575e+14 8.204e+13 -1.631e+14 8.502e+13 -1.687e+14 8.791e+13 -1.742e+14 9.070e+13 -1.798e+14 9.338e+13 -1.853e+14 9.593e+13 -1.908e+14 9.835e+13 -1.962e+14 1.006e+14 -2.016e+14 1.027e+14 -2.069e+14 1.047e+14 -2.122e+14 1.064e+14 -2.174e+14 1.080e+14 -2.225e+14 1.094e+14 -2.275e+14 1.105e+14 -2.325e+14 1.115e+14 -2.373e+14 1.122e+14 -2.420e+14 1.128e+14 -2.467e+14 1.131e+14 -2.512e+14 1.131e+14 -2.556e+14 1.130e+14 -2.600e+14 1.126e+14 -2.641e+14 1.119e+14 -2.682e+14 1.111e+14 -2.721e+14 1.100e+14 -2.759e+14 1.086e+14 -2.796e+14 1.071e+14 -2.832e+14 1.053e+14 -2.866e+14 1.033e+14 -2.899e+14 1.011e+14 -2.930e+14 9.865e+13 -2.960e+14 9.601e+13 -2.989e+14 9.318e+13 -3.016e+14 9.015e+13 -3.042e+14 8.694e+13 -3.066e+14 8.355e+13 -3.089e+14 7.999e+13 -3.111e+14 7.628e+13 -3.132e+14 7.242e+13 -3.152e+14 6.843e+13 -3.171e+14 6.430e+13 -3.189e+14 6.004e+13 -3.205e+14 5.567e+13 -3.220e+14 5.118e+13 -3.234e+14 4.660e+13 -3.247e+14 4.193e+13 -3.258e+14 3.718e+13 -3.268e+14 3.236e+13 -3.277e+14 2.748e+13 -3.285e+14 2.255e+13 -3.292e+14 1.759e+13 -3.297e+14 1.259e+13 -3.301e+14 7.577e+12 -3.303e+14 2.553e+12 -3.304e+14 -2.467e+12 -3.304e+14 -7.481e+12 -3.302e+14 -1.247e+13 -3.299e+14 -1.742e+13 -3.294e+14 -2.233e+13 -3.288e+14 -2.718e+13 -3.280e+14 -3.196e+13 -3.270e+14 -3.667e+13 -3.259e+14 -4.129e+13 -3.245e+14 -4.580e+13 -3.230e+14 -5.020e+13 -3.213e+14 -5.447e+13 -3.194e+14 -5.860e+13 -3.173e+14 -6.259e+13 -3.150e+14 -6.641e+13 -3.124e+14 -7.007e+13 -3.097e+14 -7.355e+13 -3.068e+14 -7.683e+13 -3.036e+14 -7.991e+13 -3.002e+14 -8.279e+13 -2.967e+14 -8.545e+13 -2.929e+14 -8.789e+13 -2.889e+14 -9.009e+13 -2.847e+14 -9.107e+13 -2.815e+14 -9.234e+13 -2.777e+14 -9.385e+13 -2.730e+14 -9.512e+13 -2.680e+14 -9.615e+13 -2.629e+14 -9.694e+13 -2.576e+14 -9.748e+13 -2.522e+14 -9.779e+13 -2.466e+14 -9.786e+13 -2.408e+14 -9.770e+13 -2.349e+14 -9.732e+13 -2.290e+14 -9.672e+13 -2.229e+14 -9.591e+13 -2.167e+14 -9.490e+13 -2.104e+14 -9.370e+13 -2.041e+14 -9.231e+13 -1.977e+14 -9.075e+13 -1.912e+14 -8.903e+13 -1.847e+14 -8.717e+13 -1.782e+14 -8.516e+13 -1.717e+14 -8.303e+13 -1.652e+14 -8.078e+13 -1.587e+14 -7.843e+13 -1.523e+14 -7.599e+13 -1.459e+14 -7.347e+13 -1.395e+14 -7.088e+13 -1.332e+14 -6.824e+13 -1.270e+14 -6.556e+13 -1.209e+14 -6.285e+13 -1.148e+14 -6.011e+13 -1.089e+14 -5.737e+13 -1.031e+14 -5.462e+13 -9.744e+13 -5.189e+13 -9.190e+13 -4.917e+13 -8.651e+13 -4.649e+13 -8.126e+13 -4.384e+13 -7.618e+13 -4.124e+13 -7.126e+13 -3.869e+13 -6.651e+13 -3.620e+13 -6.194e+13 -3.378e+13 -5.755e+13 -3.143e+13 -5.335e+13 -2.917e+13 -4.934e+13 -2.699e+13 -4.552e+13 -2.489e+13 -4.188e+13 -2.289e+13 -3.844e+13 -2.097e+13 -3.518e+13 -1.915e+13 -3.210e+13 -1.743e+13 -2.921e+13 -1.580e+13 -2.650e+13 -1.427e+13 -2.396e+13 -1.283e+13 -2.160e+13 -1.149e+13 -1.941e+13 -1.025e+13 -1.737e+13 -9.096e+12 -1.550e+13 -8.036e+12 -1.377e+13 -7.063e+12 -1.219e+13 -6.174e+12 -1.075e+13 -5.367e+12 -9.437e+12 -4.637e+12 -8.247e+12 -3.981e+12 -7.173e+12 -3.394e+12 -6.209e+12 -2.872e+12 -5.346e+12 -2.411e+12 -4.577e+12 -2.006e+12 -3.896e+12 -1.652e+12 -3.296e+12 -1.347e+12 -2.769e+12 -1.084e+12 -2.309e+12 -8.607e+11 -1.911e+12 -6.723e+11 -1.568e+12 -5.153e+11 -1.275e+12 -3.859e+11 -1.026e+12 -2.808e+11 -8.171e+11 -1.968e+11 -6.428e+11 -1.309e+11 -4.990e+11 -8.044e+10 -3.819e+11 -4.283e+10 -2.878e+11 -1.575e+10 -2.134e+11 2.920e+09 -1.556e+11 1.514e+10 -1.118e+11 2.275e+10 -7.939e+10 2.747e+10 -5.612e+10 3.077e+10 -3.976e+10 3.384e+10 -2.823e+10 3.734e+10 -1.974e+10 4.141e+10 -1.292e+10 4.585e+10 -6.958e+09 5.026e+10 -1.479e+09 5.426e+10 3.581e+09 5.755e+10 8.147e+09 5.991e+10 1.209e+10 6.120e+10 1.530e+10 6.139e+10 1.768e+10 6.047e+10 1.921e+10 5.853e+10 1.990e+10 5.565e+10 1.979e+10 5.199e+10 1.897e+10 4.769e+10 1.755e+10 4.293e+10 1.566e+10 3.787e+10 1.343e+10 3.270e+10 1.102e+10 2.756e+10 8.548e+09 2.263e+10 6.156e+09 1.803e+10 3.958e+09 1.389e+10 2.045e+09 1.030e+10 4.795e+08 7.354e+09 -7.188e+08 5.084e+09 -1.605e+09 3.468e+09 -2.339e+09 2.357e+09 -3.186e+09 1.466e+09 -4.416e+09 4.971e+08 -6.180e+09 -7.483e+08 -8.496e+09 -2.347e+09 -1.131e+10 -4.294e+09 -1.455e+10 -6.540e+09 -1.813e+10 -9.020e+09 -2.195e+10 -1.165e+10 -2.592e+10 -1.435e+10 -2.996e+10 -1.705e+10 -3.397e+10 -1.965e+10 -3.787e+10 -2.211e+10 -4.157e+10 -2.435e+10 -4.501e+10 -2.633e+10 -4.811e+10 -2.801e+10 -5.083e+10 -2.936e+10 -5.313e+10 -3.036e+10 -5.496e+10 -3.101e+10 -5.632e+10 -3.129e+10 -5.719e+10 -3.123e+10 -5.756e+10 -3.085e+10 -5.745e+10 -3.016e+10 -5.688e+10 -2.919e+10 -5.586e+10 -2.799e+10 -5.445e+10 -2.658e+10 -5.266e+10 -2.500e+10 -5.055e+10 -2.330e+10 -4.817e+10 -2.149e+10 -4.556e+10 -1.964e+10 -4.276e+10 -1.775e+10 -3.984e+10 -1.588e+10 -3.684e+10 -1.404e+10 -3.380e+10 -1.226e+10 -3.077e+10 -1.056e+10 -2.778e+10 -8.962e+09 -2.487e+10 -7.479e+09 -2.207e+10 -6.120e+09 -1.942e+10 -4.893e+09 -1.692e+10 -3.803e+09 -1.459e+10 -2.849e+09 -1.246e+10 -2.031e+09 -1.051e+10 -1.343e+09 -8.772e+09 -7.774e+08 -7.224e+09 -3.266e+08 -5.870e+09 2.046e+07 -4.702e+09 2.764e+08 -3.708e+09 4.541e+08 -2.878e+09 5.674e+08 -2.196e+09 6.306e+08 -1.646e+09 6.572e+08 -1.212e+09 6.599e+08 -8.739e+08 6.490e+08 -6.136e+08 6.321e+08 -4.128e+08 6.129e+08 -2.551e+08 5.915e+08 -1.274e+08 5.657e+08 -2.085e+07 5.326e+08 6.962e+07 4.895e+08 1.461e+08 4.355e+08 2.088e+08 3.711e+08 2.575e+08 2.985e+08 2.929e+08 2.207e+08 3.167e+08 1.403e+08 3.329e+08 5.707e+07 3.473e+08 -3.375e+07 3.664e+08 -1.429e+08 3.953e+08 -2.861e+08 4.353e+08 -4.805e+08 4.834e+08 -7.422e+08 5.334e+08 -1.085e+09 5.777e+08 -1.521e+09 6.082e+08 -2.056e+09 6.175e+08 -2.698e+09 5.989e+08 -3.449e+09 5.466e+08 -4.308e+09 4.564e+08 -5.275e+09 3.250e+08 -6.342e+09 1.508e+08 -7.503e+09 -6.631e+07 -8.747e+09 -3.251e+08 -1.006e+10 -6.227e+08 -1.143e+10 -9.546e+08 -1.284e+10 -1.316e+09 -1.428e+10 -1.699e+09 -1.571e+10 -2.096e+09 -1.714e+10 -2.501e+09 -1.853e+10 -2.903e+09 -1.987e+10 -3.295e+09 -2.114e+10 -3.668e+09 -2.232e+10 -4.014e+09 -2.340e+10 -4.325e+09 -2.437e+10 -4.595e+09 -2.522e+10 -4.819e+09 -2.592e+10 -4.994e+09 -2.649e+10 -5.116e+09 -2.690e+10 -5.181e+09 -2.716e+10 -5.191e+09 -2.726e+10 -5.145e+09 -2.721e+10 -5.045e+09 -2.700e+10 -4.894e+09 -2.665e+10 -4.696e+09 -2.616e+10 -4.455e+09 -2.553e+10 -4.177e+09 -2.478e+10 -3.867e+09 -2.392e+10 -3.531e+09 -2.295e+10 -3.176e+09 -2.189e+10 -2.806e+09 -2.076e+10 -2.429e+09 -1.956e+10 -2.050e+09 -1.832e+10 -1.675e+09 -1.704e+10 -1.309e+09 -1.574e+10 -9.573e+08 -1.444e+10 -6.232e+08 -1.314e+10 -3.105e+08 -1.186e+10 -2.315e+07 -1.062e+10 2.368e+08 -9.421e+09 4.674e+08 -8.276e+09 6.670e+08 -7.196e+09 8.351e+08 -6.186e+09 9.717e+08 -5.256e+09 1.078e+09 -4.409e+09 1.154e+09 -3.648e+09 1.204e+09 -2.976e+09 1.231e+09 -2.392e+09 1.239e+09 -1.891e+09 1.234e+09 -1.471e+09 1.222e+09 -1.123e+09 1.212e+09 -8.341e+08 1.210e+09 -5.927e+08 1.221e+09 -3.842e+08 1.251e+09 -1.948e+08 1.299e+09 -1.451e+07 1.362e+09 1.639e+08 1.436e+09 3.438e+08 1.514e+09 5.246e+08 1.590e+09 7.039e+08 1.656e+09 8.779e+08 1.709e+09 1.042e+09 1.742e+09 1.190e+09 1.754e+09 1.319e+09 1.741e+09 1.424e+09 1.702e+09 1.502e+09 1.638e+09 1.550e+09 1.550e+09 1.569e+09 1.438e+09 1.556e+09 1.308e+09 1.515e+09 1.161e+09 1.446e+09 1.003e+09 1.352e+09 8.380e+08 1.239e+09 6.719e+08 1.110e+09 5.099e+08 9.713e+08 3.572e+08 8.294e+08 2.182e+08 6.907e+08 9.648e+07 5.622e+08 -6.556e+06 4.500e+08 -9.301e+07 3.584e+08 -1.699e+08 2.868e+08 -2.498e+08 2.277e+08 -3.490e+08 1.676e+08 -4.824e+08 9.127e+07 -6.595e+08 -1.421e+07 -8.848e+08 -1.583e+08 -1.159e+09 -3.470e+08 -1.482e+09 -5.846e+08 -1.850e+09 -8.733e+08 -2.262e+09 -1.214e+09 -2.713e+09 -1.606e+09 -3.199e+09 -2.048e+09 -3.715e+09 -2.537e+09 -4.256e+09 -3.070e+09 -4.816e+09 -3.644e+09 -5.391e+09 -4.252e+09 -5.973e+09 -4.890e+09 -6.556e+09 -5.552e+09 -7.135e+09 -6.229e+09 -7.702e+09 -6.915e+09 -8.252e+09 -7.603e+09 -8.779e+09 -8.283e+09 -9.276e+09 -8.948e+09 -9.737e+09 -9.590e+09 -1.016e+10 -1.020e+10 -1.054e+10 -1.078e+10 -1.086e+10 -1.130e+10 -1.114e+10 -1.178e+10 -1.135e+10 -1.220e+10 -1.151e+10 -1.256e+10 -1.161e+10 -1.285e+10 -1.165e+10 -1.308e+10 -1.163e+10 -1.323e+10 -1.155e+10 -1.331e+10 -1.140e+10 -1.332e+10 -1.120e+10 -1.325e+10 -1.094e+10 0.005 -59.214 -57.584 -55.954 -54.324 -52.693 -51.063 -49.433 -47.871 -46.376 -44.940 -43.559 -42.229 -40.950 -39.716 -38.529 -37.389 -36.295 -35.246 -34.242 -33.281 -32.362 -31.485 -30.649 -29.852 -29.093 -28.373 -27.689 -27.041 -26.429 -25.851 -25.307 -24.795 -24.317 -23.870 -23.454 -23.070 -22.716 -22.392 -22.098 -21.833 -21.597 -21.391 -21.213 -21.064 -20.943 -20.851 -20.787 -20.752 -20.746 -20.767 -20.815 -20.893 -20.999 -21.136 -21.302 -21.499 -21.727 -21.986 -22.277 -22.601 -22.958 -23.349 -23.776 -24.238 -24.738 -25.277 -25.856 -26.477 -27.142 -27.853 -28.613 -29.426 -30.293 -31.222 -32.216 -33.283 -34.431 -35.673 -37.022 -38.500 -40.134 -41.968 -44.063 -46.525 -49.541 -53.453 -58.680 -61.512 -57.482 -53.960 -51.609 -49.980 -48.817 -47.983 -47.402 -47.033 -46.855 -46.861 -47.056 -47.446 -48.026 -48.727 -49.304 -49.244 -48.083 -45.961 -43.437 -40.915 -38.547 -36.356 -34.331 -32.452 -30.698 -29.051 -27.497 -26.026 -24.632 -23.305 -22.041 -20.835 -19.682 -18.579 -17.522 -16.510 -15.540 -14.611 -13.720 -12.865 -12.045 -11.260 -10.507 -9.786 -9.095 -8.435 -7.803 -7.200 -6.625 -6.077 -5.556 -5.060 -4.591 -4.147 -3.728 -3.331 -2.957 -2.606 -2.280 -1.977 -1.698 -1.443 -1.211 -1.003 -0.818 -0.657 -0.519 -0.406 -0.316 -0.250 -0.209 -0.193 -0.201 -0.235 -0.295 -0.382 -0.496 -0.637 -0.807 -1.007 -1.237 -1.498 -1.791 -2.118 -2.479 -2.875 -3.309 -3.785 -4.304 -4.871 -5.487 -6.158 -6.887 -7.680 -8.542 -9.483 -10.511 -11.636 -12.873 -14.240 -15.759 -17.459 -19.381 -21.584 -24.150 -27.213 -31.002 -35.970 -43.238 -55.743 -54.502 -56.785 -48.148 -39.019 -33.204 -28.933 -25.555 -22.765 -20.394 -18.339 -16.531 -14.922 -13.479 -12.176 -10.992 -9.913 -8.925 -8.020 -7.188 -6.422 -5.718 -5.070 -4.474 -3.926 -3.423 -2.963 -2.543 -2.161 -1.815 -1.504 -1.226 -0.977 -0.757 -0.567 -0.405 -0.271 -0.165 -0.085 -0.031 -0.003 0.000 -0.022 -0.069 -0.140 -0.235 -0.353 -0.495 -0.660 -0.849 -1.061 -1.296 -1.555 -1.837 -2.143 -2.472 -2.824 -3.201 -3.602 -4.027 -4.476 -4.949 -5.445 -5.966 -6.514 -7.089 -7.690 -8.319 -8.977 -9.663 -10.379 -11.126 -11.904 -12.713 -13.556 -14.433 -15.345 -16.294 -17.281 -18.306 -19.374 -20.484 -21.638 -22.840 -24.090 -25.392 -26.748 -28.162 -29.637 -31.177 -32.786 -34.468 -36.225 -38.066 -39.989 -41.992 -44.057 -46.144 -48.175 -50.020 -51.520 -52.558 -53.136 -53.354 -53.331 -53.134 -52.767 -52.200 -51.405 -50.379 -49.160 -47.806 -46.377 -44.923 -43.478 -42.064 -40.692 -39.370 -38.100 -36.884 -35.720 -34.607 -33.542 -32.524 -31.552 -30.625 -29.743 -28.904 -28.107 -27.350 -26.632 -25.952 -25.310 -24.703 -24.133 -23.596 -23.094 -22.624 -22.187 -21.781 -21.406 -21.062 -20.747 -20.462 -20.206 -19.979 -19.779 -19.608 -19.463 -19.346 -19.256 -19.193 -19.156 -19.146 -19.162 -19.203 -19.267 -19.358 -19.475 -19.617 -19.786 -19.981 -20.202 -20.449 -20.722 -21.022 -21.349 -21.703 -22.084 -22.493 -22.930 -23.394 -23.888 -24.410 -24.962 -25.544 -26.156 -26.798 -27.473 -28.179 -28.917 -29.689 -30.495 -31.334 -32.208 -33.118 -34.062 -35.043 -36.059 -37.111 -38.197 -39.317 -40.465 -41.643 -42.845 -44.066 -45.299 -46.532 -47.755 -48.979 -50.202 -51.426 -52.649 -53.873 0 1 1.0 1 N3 VV 25.38 30.17 0.05 -3.295e+09 -1.737e+09 -3.548e+09 -2.045e+09 -3.804e+09 -2.385e+09 -4.058e+09 -2.759e+09 -4.308e+09 -3.166e+09 -4.551e+09 -3.607e+09 -4.781e+09 -4.082e+09 -4.997e+09 -4.589e+09 -5.192e+09 -5.127e+09 -5.364e+09 -5.693e+09 -5.508e+09 -6.285e+09 -5.621e+09 -6.899e+09 -5.700e+09 -7.530e+09 -5.742e+09 -8.174e+09 -5.745e+09 -8.826e+09 -5.706e+09 -9.480e+09 -5.625e+09 -1.013e+10 -5.503e+09 -1.077e+10 -5.341e+09 -1.140e+10 -5.139e+09 -1.200e+10 -4.901e+09 -1.257e+10 -4.628e+09 -1.311e+10 -4.324e+09 -1.362e+10 -3.994e+09 -1.408e+10 -3.641e+09 -1.448e+10 -3.271e+09 -1.484e+10 -2.887e+09 -1.514e+10 -2.496e+09 -1.538e+10 -2.101e+09 -1.556e+10 -1.708e+09 -1.568e+10 -1.321e+09 -1.573e+10 -9.447e+08 -1.571e+10 -5.823e+08 -1.564e+10 -2.377e+08 -1.549e+10 8.667e+07 -1.529e+10 3.879e+08 -1.502e+10 6.637e+08 -1.469e+10 9.130e+08 -1.431e+10 1.134e+09 -1.387e+10 1.327e+09 -1.338e+10 1.490e+09 -1.284e+10 1.624e+09 -1.226e+10 1.729e+09 -1.164e+10 1.805e+09 -1.099e+10 1.853e+09 -1.031e+10 1.874e+09 -9.614e+09 1.868e+09 -8.898e+09 1.837e+09 -8.173e+09 1.783e+09 -7.446e+09 1.708e+09 -6.724e+09 1.612e+09 -6.013e+09 1.499e+09 -5.321e+09 1.372e+09 -4.654e+09 1.232e+09 -4.019e+09 1.084e+09 -3.422e+09 9.310e+08 -2.867e+09 7.765e+08 -2.359e+09 6.247e+08 -1.903e+09 4.797e+08 -1.499e+09 3.455e+08 -1.149e+09 2.262e+08 -8.540e+08 1.250e+08 -6.127e+08 4.412e+07 -4.231e+08 -1.611e+07 -2.832e+08 -6.042e+07 -1.893e+08 -1.017e+08 -1.351e+08 -1.597e+08 -1.074e+08 -2.504e+08 -9.022e+07 -3.810e+08 -7.394e+07 -5.517e+08 -5.754e+07 -7.617e+08 -4.455e+07 -1.010e+09 -4.042e+07 -1.293e+09 -5.126e+07 -1.609e+09 -8.314e+07 -1.955e+09 -1.419e+08 -2.326e+09 -2.329e+08 -2.718e+09 -3.606e+08 -3.128e+09 -5.293e+08 -3.549e+09 -7.417e+08 -3.976e+09 -1.000e+09 -4.406e+09 -1.307e+09 -4.830e+09 -1.661e+09 -5.245e+09 -2.062e+09 -5.645e+09 -2.509e+09 -6.024e+09 -2.999e+09 -6.378e+09 -3.528e+09 -6.701e+09 -4.092e+09 -6.988e+09 -4.683e+09 -7.236e+09 -5.295e+09 -7.440e+09 -5.920e+09 -7.597e+09 -6.548e+09 -7.704e+09 -7.169e+09 -7.759e+09 -7.771e+09 -7.760e+09 -8.341e+09 -7.707e+09 -8.868e+09 -7.597e+09 -9.336e+09 -7.433e+09 -9.732e+09 -7.216e+09 -1.004e+10 -6.946e+09 -1.025e+10 -6.628e+09 -1.035e+10 -6.265e+09 -1.032e+10 -5.862e+09 -1.016e+10 -5.423e+09 -9.862e+09 -4.956e+09 -9.416e+09 -4.467e+09 -8.826e+09 -3.964e+09 -8.098e+09 -3.456e+09 -7.244e+09 -2.951e+09 -6.282e+09 -2.458e+09 -5.242e+09 -1.988e+09 -4.160e+09 -1.548e+09 -3.083e+09 -1.147e+09 -2.070e+09 -7.935e+08 -1.191e+09 -5.002e+08 -5.207e+08 -3.107e+08 -1.022e+08 -2.926e+08 2.417e+08 -4.178e+08 9.075e+08 -6.015e+08 2.211e+09 -8.229e+08 4.324e+09 -1.107e+09 7.404e+09 -1.496e+09 1.160e+10 -2.047e+09 1.708e+10 -2.830e+09 2.400e+10 -3.930e+09 3.253e+10 -5.444e+09 4.280e+10 -7.486e+09 5.496e+10 -1.019e+10 6.916e+10 -1.368e+10 8.548e+10 -1.813e+10 1.040e+11 -2.371e+10 1.249e+11 -3.059e+10 1.481e+11 -3.897e+10 1.737e+11 -4.905e+10 2.017e+11 -6.103e+10 2.319e+11 -7.514e+10 2.643e+11 -9.159e+10 2.989e+11 -1.106e+11 3.353e+11 -1.324e+11 3.736e+11 -1.571e+11 4.133e+11 -1.850e+11 4.543e+11 -2.164e+11 4.963e+11 -2.513e+11 5.390e+11 -2.900e+11 5.820e+11 -3.326e+11 6.249e+11 -3.793e+11 6.673e+11 -4.302e+11 7.087e+11 -4.856e+11 7.487e+11 -5.454e+11 7.868e+11 -6.098e+11 8.225e+11 -6.790e+11 8.553e+11 -7.530e+11 8.846e+11 -8.319e+11 9.100e+11 -9.160e+11 9.308e+11 -1.005e+12 9.466e+11 -1.100e+12 9.566e+11 -1.200e+12 9.605e+11 -1.307e+12 9.575e+11 -1.419e+12 9.471e+11 -1.538e+12 9.284e+11 -1.665e+12 9.009e+11 -1.799e+12 8.637e+11 -1.941e+12 8.158e+11 -2.093e+12 7.562e+11 -2.255e+12 6.838e+11 -2.428e+12 5.970e+11 -2.614e+12 4.942e+11 -2.813e+12 3.735e+11 -3.028e+12 2.326e+11 -3.259e+12 6.889e+10 -3.508e+12 -1.204e+11 -3.778e+12 -3.390e+11 -4.069e+12 -5.905e+11 -4.382e+12 -8.789e+11 -4.721e+12 -1.209e+12 -5.085e+12 -1.586e+12 -5.476e+12 -2.015e+12 -5.895e+12 -2.502e+12 -6.344e+12 -3.053e+12 -6.822e+12 -3.674e+12 -7.331e+12 -4.372e+12 -7.870e+12 -5.153e+12 -8.440e+12 -6.024e+12 -9.041e+12 -6.992e+12 -9.673e+12 -8.064e+12 -1.034e+13 -9.248e+12 -1.103e+13 -1.055e+13 -1.175e+13 -1.198e+13 -1.250e+13 -1.354e+13 -1.328e+13 -1.525e+13 -1.409e+13 -1.710e+13 -1.492e+13 -1.910e+13 -1.578e+13 -2.127e+13 -1.666e+13 -2.360e+13 -1.756e+13 -2.610e+13 -1.849e+13 -2.879e+13 -1.943e+13 -3.165e+13 -2.040e+13 -3.471e+13 -2.138e+13 -3.796e+13 -2.238e+13 -4.140e+13 -2.339e+13 -4.505e+13 -2.442e+13 -4.890e+13 -2.546e+13 -5.296e+13 -2.651e+13 -5.721e+13 -2.757e+13 -6.168e+13 -2.865e+13 -6.635e+13 -2.973e+13 -7.123e+13 -3.081e+13 -7.631e+13 -3.191e+13 -8.158e+13 -3.301e+13 -8.705e+13 -3.412e+13 -9.270e+13 -3.524e+13 -9.854e+13 -3.636e+13 -1.045e+14 -3.748e+13 -1.107e+14 -3.862e+13 -1.170e+14 -3.976e+13 -1.235e+14 -4.091e+13 -1.301e+14 -4.207e+13 -1.368e+14 -4.325e+13 -1.436e+14 -4.444e+13 -1.504e+14 -4.564e+13 -1.574e+14 -4.686e+13 -1.644e+14 -4.810e+13 -1.715e+14 -4.935e+13 -1.785e+14 -5.064e+13 -1.856e+14 -5.196e+13 -1.927e+14 -5.331e+13 -1.997e+14 -5.471e+13 -2.067e+14 -5.615e+13 -2.136e+14 -5.764e+13 -2.204e+14 -5.918e+13 -2.271e+14 -6.079e+13 -2.337e+14 -6.247e+13 -2.402e+14 -6.421e+13 -2.465e+14 -6.603e+13 -2.527e+14 -6.792e+13 -2.587e+14 -6.990e+13 -2.646e+14 -7.197e+13 -2.702e+14 -7.413e+13 -2.757e+14 -7.638e+13 -2.809e+14 -7.873e+13 -2.859e+14 -8.118e+13 -2.908e+14 -8.373e+13 -2.954e+14 -8.638e+13 -2.998e+14 -8.913e+13 -3.039e+14 -9.199e+13 -3.078e+14 -9.495e+13 -3.115e+14 -9.801e+13 -3.149e+14 -1.012e+14 -3.181e+14 -1.044e+14 -3.211e+14 -1.078e+14 -3.238e+14 -1.112e+14 -3.263e+14 -1.148e+14 -3.286e+14 -1.184e+14 -3.306e+14 -1.221e+14 -3.323e+14 -1.259e+14 -3.338e+14 -1.298e+14 -3.351e+14 -1.337e+14 -3.362e+14 -1.377e+14 -3.370e+14 -1.418e+14 -3.376e+14 -1.459e+14 -3.379e+14 -1.501e+14 -3.381e+14 -1.543e+14 -3.381e+14 -1.587e+14 -3.379e+14 -1.630e+14 -3.375e+14 -1.674e+14 -3.369e+14 -1.718e+14 -3.361e+14 -1.762e+14 -3.351e+14 -1.806e+14 -3.340e+14 -1.850e+14 -3.326e+14 -1.894e+14 -3.310e+14 -1.938e+14 -3.293e+14 -1.982e+14 -3.274e+14 -2.025e+14 -3.253e+14 -2.068e+14 -3.231e+14 -2.110e+14 -3.207e+14 -2.152e+14 -3.182e+14 -2.193e+14 -3.155e+14 -2.233e+14 -3.127e+14 -2.272e+14 -3.098e+14 -2.310e+14 -3.067e+14 -2.347e+14 -3.036e+14 -2.382e+14 -3.003e+14 -2.416e+14 -2.968e+14 -2.449e+14 -2.933e+14 -2.479e+14 -2.896e+14 -2.508e+14 -2.859e+14 -2.534e+14 -2.820e+14 -2.559e+14 -2.780e+14 -2.581e+14 -2.740e+14 -2.600e+14 -2.698e+14 -2.617e+14 -2.655e+14 -2.632e+14 -2.612e+14 -2.643e+14 -2.567e+14 -2.652e+14 -2.522e+14 -2.657e+14 -2.476e+14 -2.660e+14 -2.429e+14 -2.659e+14 -2.381e+14 -2.655e+14 -2.333e+14 -2.648e+14 -2.284e+14 -2.638e+14 -2.234e+14 -2.641e+14 -2.160e+14 -2.607e+14 -2.154e+14 -2.587e+14 -2.102e+14 -2.563e+14 -2.050e+14 -2.536e+14 -1.998e+14 -2.506e+14 -1.945e+14 -2.472e+14 -1.892e+14 -2.436e+14 -1.839e+14 -2.397e+14 -1.786e+14 -2.356e+14 -1.732e+14 -2.311e+14 -1.679e+14 -2.264e+14 -1.626e+14 -2.215e+14 -1.572e+14 -2.164e+14 -1.520e+14 -2.111e+14 -1.467e+14 -2.056e+14 -1.415e+14 -1.999e+14 -1.363e+14 -1.941e+14 -1.311e+14 -1.882e+14 -1.260e+14 -1.821e+14 -1.209e+14 -1.760e+14 -1.159e+14 -1.697e+14 -1.110e+14 -1.635e+14 -1.062e+14 -1.571e+14 -1.014e+14 -1.508e+14 -9.671e+13 -1.445e+14 -9.210e+13 -1.381e+14 -8.758e+13 -1.318e+14 -8.317e+13 -1.256e+14 -7.885e+13 -1.194e+14 -7.463e+13 -1.133e+14 -7.053e+13 -1.073e+14 -6.654e+13 -1.013e+14 -6.267e+13 -9.555e+13 -5.892e+13 -8.989e+13 -5.529e+13 -8.437e+13 -5.178e+13 -7.902e+13 -4.840e+13 -7.382e+13 -4.516e+13 -6.880e+13 -4.204e+13 -6.396e+13 -3.906e+13 -5.931e+13 -3.621e+13 -5.485e+13 -3.349e+13 -5.060e+13 -3.091e+13 -4.654e+13 -2.846e+13 -4.268e+13 -2.614e+13 -3.903e+13 -2.396e+13 -3.558e+13 -2.189e+13 -3.232e+13 -1.995e+13 -2.927e+13 -1.814e+13 -2.642e+13 -1.644e+13 -2.376e+13 -1.486e+13 -2.128e+13 -1.339e+13 -1.899e+13 -1.202e+13 -1.688e+13 -1.076e+13 -1.494e+13 -9.603e+12 -1.317e+13 -8.537e+12 -1.155e+13 -7.562e+12 -1.008e+13 -6.673e+12 -8.748e+12 -5.864e+12 -7.552e+12 -5.131e+12 -6.482e+12 -4.470e+12 -5.528e+12 -3.876e+12 -4.682e+12 -3.344e+12 -3.938e+12 -2.869e+12 -3.285e+12 -2.448e+12 -2.716e+12 -2.076e+12 -2.225e+12 -1.750e+12 -1.803e+12 -1.464e+12 -1.444e+12 -1.216e+12 -1.142e+12 -1.002e+12 -8.886e+11 -8.181e+11 -6.796e+11 -6.617e+11 -5.093e+11 -5.297e+11 -3.723e+11 -4.192e+11 -2.641e+11 -3.277e+11 -1.804e+11 -2.530e+11 -1.171e+11 -1.927e+11 -7.056e+10 -1.450e+11 -3.755e+10 -1.081e+11 -1.488e+10 -8.035e+10 3.573e+08 -6.034e+10 1.086e+10 -4.656e+10 1.897e+10 -3.743e+10 2.631e+10 -3.139e+10 3.368e+10 -2.707e+10 4.119e+10 -2.355e+10 4.852e+10 -2.031e+10 5.526e+10 -1.718e+10 6.101e+10 -1.414e+10 6.549e+10 -1.128e+10 6.848e+10 -8.668e+09 6.992e+10 -6.394e+09 6.981e+10 -4.512e+09 6.822e+10 -3.052e+09 6.530e+10 -2.011e+09 6.123e+10 -1.367e+09 5.624e+10 -1.076e+09 5.056e+10 -1.080e+09 4.443e+10 -1.310e+09 3.810e+10 -1.694e+09 3.180e+10 -2.156e+09 2.574e+10 -2.626e+09 2.012e+10 -3.042e+09 1.509e+10 -3.355e+09 1.078e+10 -3.539e+09 7.279e+09 -3.605e+09 4.601e+09 -3.623e+09 2.659e+09 -3.744e+09 1.195e+09 -4.179e+09 -1.866e+08 -5.097e+09 -1.849e+09 -6.535e+09 -4.000e+09 -8.439e+09 -6.700e+09 -1.073e+10 -9.911e+09 -1.333e+10 -1.355e+10 -1.617e+10 -1.752e+10 -1.918e+10 -2.171e+10 -2.231e+10 -2.599e+10 -2.549e+10 -3.025e+10 -2.866e+10 -3.439e+10 -3.176e+10 -3.831e+10 -3.474e+10 -4.191e+10 -3.753e+10 -4.513e+10 -4.009e+10 -4.790e+10 -4.237e+10 -5.018e+10 -4.436e+10 -5.193e+10 -4.601e+10 -5.313e+10 -4.730e+10 -5.379e+10 -4.821e+10 -5.390e+10 -4.875e+10 -5.349e+10 -4.890e+10 -5.258e+10 -4.868e+10 -5.123e+10 -4.810e+10 -4.946e+10 -4.718e+10 -4.734e+10 -4.594e+10 -4.491e+10 -4.441e+10 -4.224e+10 -4.263e+10 -3.937e+10 -4.062e+10 -3.637e+10 -3.843e+10 -3.330e+10 -3.610e+10 -3.020e+10 -3.367e+10 -2.712e+10 -3.116e+10 -2.410e+10 -2.863e+10 -2.119e+10 -2.610e+10 -1.842e+10 -2.360e+10 -1.581e+10 -2.117e+10 -1.338e+10 -1.883e+10 -1.116e+10 -1.660e+10 -9.153e+09 -1.450e+10 -7.361e+09 -1.255e+10 -5.789e+09 -1.074e+10 -4.431e+09 -9.104e+09 -3.278e+09 -7.627e+09 -2.320e+09 -6.314e+09 -1.540e+09 -5.164e+09 -9.216e+08 -4.169e+09 -4.457e+08 -3.323e+09 -9.151e+07 -2.615e+09 1.626e+08 -2.033e+09 3.376e+08 -1.564e+09 4.540e+08 -1.192e+09 5.298e+08 -9.010e+08 5.794e+08 -6.727e+08 6.126e+08 -4.911e+08 6.340e+08 -3.416e+08 6.441e+08 -2.137e+08 6.410e+08 -1.011e+08 6.224e+08 -4.361e+05 5.867e+08 8.860e+07 5.340e+08 1.654e+08 4.663e+08 2.293e+08 3.875e+08 2.805e+08 3.019e+08 3.213e+08 2.128e+08 3.563e+08 1.204e+08 3.930e+08 1.868e+07 4.399e+08 -1.055e+08 5.046e+08 -2.700e+08 5.908e+08 -4.945e+08 6.980e+08 -7.974e+08 8.223e+08 -1.194e+09 9.583e+08 -1.697e+09 1.100e+09 -2.314e+09 1.241e+09 -3.054e+09 1.376e+09 -3.916e+09 1.499e+09 -4.903e+09 1.606e+09 -6.009e+09 1.693e+09 -7.227e+09 1.758e+09 -8.549e+09 1.798e+09 -9.960e+09 1.812e+09 -1.144e+10 1.801e+09 -1.298e+10 1.766e+09 -1.456e+10 1.708e+09 -1.615e+10 1.631e+09 -1.774e+10 1.537e+09 -1.929e+10 1.430e+09 -2.080e+10 1.316e+09 -2.223e+10 1.198e+09 -2.356e+10 1.080e+09 -2.479e+10 9.671e+08 -2.588e+10 8.629e+08 -2.684e+10 7.702e+08 -2.763e+10 6.916e+08 -2.826e+10 6.297e+08 -2.872e+10 5.868e+08 -2.900e+10 5.637e+08 -2.911e+10 5.608e+08 -2.904e+10 5.778e+08 -2.880e+10 6.138e+08 -2.840e+10 6.674e+08 -2.783e+10 7.368e+08 -2.712e+10 8.195e+08 -2.628e+10 9.134e+08 -2.531e+10 1.016e+09 -2.424e+10 1.124e+09 -2.307e+10 1.234e+09 -2.182e+10 1.345e+09 -2.051e+10 1.454e+09 -1.916e+10 1.557e+09 -1.777e+10 1.654e+09 -1.637e+10 1.740e+09 -1.497e+10 1.816e+09 -1.358e+10 1.879e+09 -1.221e+10 1.928e+09 -1.089e+10 1.961e+09 -9.623e+09 1.979e+09 -8.416e+09 1.981e+09 -7.281e+09 1.967e+09 -6.225e+09 1.937e+09 -5.255e+09 1.892e+09 -4.375e+09 1.835e+09 -3.587e+09 1.766e+09 -2.894e+09 1.691e+09 -2.294e+09 1.611e+09 -1.782e+09 1.531e+09 -1.354e+09 1.459e+09 -9.986e+08 1.398e+09 -7.041e+08 1.356e+09 -4.568e+08 1.335e+09 -2.412e+08 1.338e+09 -4.381e+07 1.362e+09 1.454e+08 1.404e+09 3.326e+08 1.458e+09 5.204e+08 1.517e+09 7.071e+08 1.573e+09 8.891e+08 1.621e+09 1.062e+09 1.656e+09 1.219e+09 1.673e+09 1.356e+09 1.669e+09 1.467e+09 1.643e+09 1.548e+09 1.593e+09 1.597e+09 1.521e+09 1.612e+09 1.426e+09 1.592e+09 1.312e+09 1.539e+09 1.181e+09 1.454e+09 1.037e+09 1.343e+09 8.845e+08 1.208e+09 7.282e+08 1.056e+09 5.732e+08 8.943e+08 4.253e+08 7.291e+08 2.896e+08 5.681e+08 1.711e+08 4.194e+08 7.401e+07 2.912e+08 5.526e+05 1.906e+08 -5.179e+07 1.201e+08 -9.474e+07 6.991e+07 -1.507e+08 1.633e+07 -2.423e+08 -6.564e+07 -3.818e+08 -1.921e+08 -5.718e+08 -3.716e+08 -8.125e+08 -6.090e+08 -1.103e+09 -9.063e+08 -1.442e+09 -1.265e+09 -1.826e+09 -1.684e+09 -2.255e+09 -2.162e+09 -2.722e+09 -2.697e+09 -3.227e+09 -3.286e+09 -3.763e+09 -3.923e+09 -4.326e+09 -4.604e+09 -4.910e+09 -5.325e+09 -5.511e+09 -6.077e+09 -6.121e+09 -6.854e+09 -6.735e+09 -7.650e+09 -7.348e+09 -8.454e+09 -7.951e+09 -9.259e+09 -8.539e+09 -1.006e+10 -9.107e+09 -1.084e+10 -9.648e+09 -1.160e+10 -1.016e+10 -1.232e+10 -1.063e+10 -1.300e+10 -1.105e+10 -1.363e+10 -1.143e+10 -1.420e+10 -1.176e+10 -1.471e+10 -1.203e+10 -1.515e+10 -1.224e+10 -1.551e+10 -1.239e+10 -1.580e+10 -1.248e+10 -1.600e+10 -1.251e+10 -1.612e+10 -1.247e+10 -1.615e+10 -1.238e+10 -1.609e+10 -1.222e+10 -1.595e+10 -1.200e+10 0.005 -63.051 -61.177 -59.304 -57.430 -55.556 -53.683 -51.809 -50.006 -48.287 -46.649 -45.089 -43.602 -42.182 -40.823 -39.525 -38.285 -37.101 -35.971 -34.893 -33.864 -32.883 -31.949 -31.059 -30.213 -29.408 -28.645 -27.920 -27.234 -26.585 -25.972 -25.394 -24.851 -24.341 -23.864 -23.420 -23.007 -22.626 -22.275 -21.954 -21.663 -21.402 -21.170 -20.967 -20.792 -20.646 -20.528 -20.439 -20.378 -20.346 -20.339 -20.360 -20.410 -20.488 -20.595 -20.731 -20.896 -21.091 -21.315 -21.570 -21.856 -22.172 -22.521 -22.902 -23.316 -23.764 -24.246 -24.764 -25.318 -25.909 -26.539 -27.208 -27.919 -28.672 -29.469 -30.312 -31.203 -32.143 -33.135 -34.181 -35.281 -36.437 -37.649 -38.908 -40.207 -41.527 -42.835 -44.074 -45.163 -46.017 -46.578 -46.844 -46.872 -46.751 -46.566 -46.384 -46.253 -46.212 -46.294 -46.536 -46.983 -47.704 -48.794 -50.375 -52.393 -53.637 -52.094 -48.425 -44.715 -41.527 -38.785 -36.374 -34.211 -32.241 -30.424 -28.732 -27.148 -25.657 -24.247 -22.911 -21.640 -20.430 -19.275 -18.172 -17.117 -16.107 -15.141 -14.216 -13.329 -12.479 -11.665 -10.885 -10.138 -9.423 -8.739 -8.084 -7.459 -6.863 -6.294 -5.753 -5.238 -4.749 -4.286 -3.849 -3.434 -3.041 -2.673 -2.329 -2.009 -1.713 -1.440 -1.191 -0.965 -0.763 -0.584 -0.429 -0.298 -0.190 -0.106 -0.046 -0.011 0.000 -0.014 -0.054 -0.120 -0.213 -0.332 -0.479 -0.655 -0.860 -1.095 -1.362 -1.660 -1.991 -2.355 -2.755 -3.195 -3.676 -4.201 -4.772 -5.393 -6.068 -6.802 -7.598 -8.465 -9.409 -10.439 -11.566 -12.803 -14.168 -15.683 -17.375 -19.283 -21.459 -23.982 -26.966 -30.602 -35.228 -41.540 -51.285 -67.583 -57.217 -44.939 -37.562 -32.373 -28.392 -25.175 -22.485 -20.182 -18.176 -16.405 -14.826 -13.407 -12.123 -10.957 -9.893 -8.919 -8.026 -7.206 -6.451 -5.757 -5.119 -4.531 -3.992 -3.498 -3.046 -2.634 -2.260 -1.922 -1.618 -1.344 -1.101 -0.888 -0.705 -0.550 -0.423 -0.324 -0.251 -0.204 -0.183 -0.187 -0.216 -0.270 -0.348 -0.449 -0.575 -0.724 -0.896 -1.092 -1.311 -1.553 -1.819 -2.108 -2.421 -2.757 -3.117 -3.501 -3.910 -4.342 -4.797 -5.275 -5.779 -6.308 -6.864 -7.446 -8.055 -8.692 -9.357 -10.051 -10.774 -11.528 -12.313 -13.130 -13.979 -14.862 -15.780 -16.734 -17.726 -18.756 -19.827 -20.939 -22.094 -23.295 -24.542 -25.838 -27.186 -28.587 -30.043 -31.557 -33.127 -34.756 -36.442 -38.180 -39.954 -41.737 -43.479 -45.105 -46.518 -47.623 -48.373 -48.789 -48.946 -48.928 -48.797 -48.585 -48.298 -47.925 -47.447 -46.848 -46.119 -45.262 -44.295 -43.241 -42.128 -40.980 -39.819 -38.663 -37.525 -36.413 -35.333 -34.287 -33.276 -32.305 -31.375 -30.485 -29.634 -28.824 -28.053 -27.320 -26.625 -25.967 -25.345 -24.758 -24.207 -23.689 -23.204 -22.752 -22.332 -21.943 -21.585 -21.257 -20.959 -20.690 -20.450 -20.239 -20.056 -19.900 -19.772 -19.671 -19.597 -19.550 -19.530 -19.536 -19.568 -19.623 -19.705 -19.813 -19.948 -20.109 -20.296 -20.509 -20.749 -21.015 -21.308 -21.629 -21.976 -22.351 -22.754 -23.185 -23.645 -24.133 -24.651 -25.199 -25.777 -26.386 -27.027 -27.699 -28.405 -29.144 -29.917 -30.725 -31.568 -32.449 -33.367 -34.323 -35.319 -36.354 -37.431 -38.549 -39.708 -40.908 -42.149 -43.433 -44.758 -46.121 -47.518 -48.942 -50.365 -51.789 -53.213 -54.636 -56.060 0 1 1.0 1 N3 VH 25.38 30.17 0.05 1.176e+09 -1.114e+09 1.234e+09 -1.153e+09 1.293e+09 -1.194e+09 1.352e+09 -1.238e+09 1.411e+09 -1.286e+09 1.472e+09 -1.337e+09 1.535e+09 -1.393e+09 1.600e+09 -1.452e+09 1.668e+09 -1.517e+09 1.740e+09 -1.587e+09 1.817e+09 -1.661e+09 1.899e+09 -1.739e+09 1.987e+09 -1.821e+09 2.082e+09 -1.907e+09 2.183e+09 -1.994e+09 2.291e+09 -2.082e+09 2.405e+09 -2.169e+09 2.526e+09 -2.254e+09 2.652e+09 -2.334e+09 2.782e+09 -2.409e+09 2.915e+09 -2.474e+09 3.049e+09 -2.530e+09 3.182e+09 -2.574e+09 3.312e+09 -2.603e+09 3.435e+09 -2.618e+09 3.549e+09 -2.616e+09 3.651e+09 -2.596e+09 3.738e+09 -2.560e+09 3.807e+09 -2.506e+09 3.856e+09 -2.435e+09 3.881e+09 -2.349e+09 3.881e+09 -2.249e+09 3.855e+09 -2.137e+09 3.801e+09 -2.015e+09 3.719e+09 -1.885e+09 3.610e+09 -1.750e+09 3.474e+09 -1.614e+09 3.314e+09 -1.477e+09 3.131e+09 -1.343e+09 2.929e+09 -1.214e+09 2.711e+09 -1.092e+09 2.481e+09 -9.774e+08 2.244e+09 -8.722e+08 2.003e+09 -7.767e+08 1.764e+09 -6.911e+08 1.530e+09 -6.153e+08 1.306e+09 -5.488e+08 1.094e+09 -4.909e+08 8.987e+08 -4.408e+08 7.222e+08 -3.978e+08 5.662e+08 -3.611e+08 4.321e+08 -3.305e+08 3.197e+08 -3.064e+08 2.279e+08 -2.899e+08 1.537e+08 -2.830e+08 9.209e+07 -2.881e+08 3.667e+07 -3.075e+08 -1.939e+07 -3.423e+08 -8.198e+07 -3.928e+08 -1.552e+08 -4.585e+08 -2.411e+08 -5.386e+08 -3.407e+08 -6.332e+08 -4.542e+08 -7.423e+08 -5.812e+08 -8.662e+08 -7.210e+08 -1.006e+09 -8.734e+08 -1.163e+09 -1.037e+09 -1.338e+09 -1.211e+09 -1.533e+09 -1.396e+09 -1.751e+09 -1.589e+09 -1.993e+09 -1.789e+09 -2.262e+09 -1.995e+09 -2.561e+09 -2.206e+09 -2.891e+09 -2.418e+09 -3.255e+09 -2.630e+09 -3.656e+09 -2.838e+09 -4.095e+09 -3.040e+09 -4.574e+09 -3.230e+09 -5.093e+09 -3.406e+09 -5.653e+09 -3.561e+09 -6.251e+09 -3.692e+09 -6.886e+09 -3.793e+09 -7.555e+09 -3.859e+09 -8.251e+09 -3.886e+09 -8.970e+09 -3.868e+09 -9.702e+09 -3.803e+09 -1.044e+10 -3.687e+09 -1.117e+10 -3.518e+09 -1.188e+10 -3.297e+09 -1.255e+10 -3.023e+09 -1.318e+10 -2.700e+09 -1.374e+10 -2.333e+09 -1.422e+10 -1.927e+09 -1.461e+10 -1.490e+09 -1.489e+10 -1.033e+09 -1.505e+10 -5.668e+08 -1.507e+10 -1.034e+08 -1.494e+10 3.436e+08 -1.467e+10 7.610e+08 -1.424e+10 1.135e+09 -1.365e+10 1.453e+09 -1.291e+10 1.704e+09 -1.202e+10 1.879e+09 -1.101e+10 1.969e+09 -9.882e+09 1.972e+09 -8.662e+09 1.888e+09 -7.379e+09 1.722e+09 -6.069e+09 1.486e+09 -4.768e+09 1.196e+09 -3.522e+09 8.759e+08 -2.383e+09 5.564e+08 -1.403e+09 2.760e+08 -6.453e+08 8.132e+07 -1.749e+08 -1.349e+07 3.812e+07 -1.771e+08 3.812e+08 -6.034e+08 1.211e+09 -1.388e+09 2.636e+09 -2.622e+09 4.740e+09 -4.403e+09 7.610e+09 -6.842e+09 1.134e+10 -1.006e+10 1.601e+10 -1.417e+10 2.172e+10 -1.933e+10 2.855e+10 -2.566e+10 3.659e+10 -3.332e+10 4.590e+10 -4.247e+10 5.657e+10 -5.328e+10 6.864e+10 -6.589e+10 8.217e+10 -8.050e+10 9.718e+10 -9.728e+10 1.137e+11 -1.164e+11 1.317e+11 -1.380e+11 1.511e+11 -1.623e+11 1.719e+11 -1.894e+11 1.940e+11 -2.195e+11 2.172e+11 -2.527e+11 2.414e+11 -2.891e+11 2.664e+11 -3.289e+11 2.920e+11 -3.722e+11 3.179e+11 -4.189e+11 3.436e+11 -4.692e+11 3.691e+11 -5.231e+11 3.938e+11 -5.806e+11 4.174e+11 -6.416e+11 4.394e+11 -7.061e+11 4.592e+11 -7.739e+11 4.765e+11 -8.450e+11 4.906e+11 -9.193e+11 5.010e+11 -9.964e+11 5.073e+11 -1.076e+12 5.088e+11 -1.159e+12 5.050e+11 -1.244e+12 4.953e+11 -1.332e+12 4.793e+11 -1.421e+12 4.562e+11 -1.513e+12 4.257e+11 -1.607e+12 3.870e+11 -1.703e+12 3.395e+11 -1.800e+12 2.827e+11 -1.901e+12 2.158e+11 -2.003e+12 1.381e+11 -2.109e+12 4.862e+10 -2.217e+12 -5.363e+10 -2.329e+12 -1.699e+11 -2.445e+12 -3.013e+11 -2.565e+12 -4.498e+11 -2.691e+12 -6.171e+11 -2.823e+12 -8.053e+11 -2.961e+12 -1.017e+12 -3.106e+12 -1.255e+12 -3.258e+12 -1.523e+12 -3.419e+12 -1.824e+12 -3.588e+12 -2.162e+12 -3.765e+12 -2.542e+12 -3.950e+12 -2.968e+12 -4.144e+12 -3.446e+12 -4.345e+12 -3.980e+12 -4.554e+12 -4.577e+12 -4.769e+12 -5.243e+12 -4.989e+12 -5.984e+12 -5.212e+12 -6.806e+12 -5.439e+12 -7.716e+12 -5.665e+12 -8.719e+12 -5.891e+12 -9.824e+12 -6.114e+12 -1.104e+13 -6.331e+12 -1.236e+13 -6.541e+12 -1.381e+13 -6.740e+12 -1.539e+13 -6.926e+12 -1.710e+13 -7.097e+12 -1.895e+13 -7.250e+12 -2.095e+13 -7.383e+12 -2.310e+13 -7.492e+12 -2.541e+13 -7.576e+12 -2.788e+13 -7.631e+12 -3.052e+13 -7.656e+12 -3.333e+13 -7.648e+12 -3.632e+13 -7.605e+12 -3.948e+13 -7.527e+12 -4.283e+13 -7.410e+12 -4.636e+13 -7.254e+12 -5.007e+13 -7.059e+12 -5.397e+13 -6.823e+12 -5.806e+13 -6.547e+12 -6.233e+13 -6.231e+12 -6.678e+13 -5.876e+12 -7.142e+13 -5.483e+12 -7.624e+13 -5.053e+12 -8.123e+13 -4.589e+12 -8.639e+13 -4.094e+12 -9.172e+13 -3.570e+12 -9.721e+13 -3.022e+12 -1.029e+14 -2.454e+12 -1.086e+14 -1.870e+12 -1.146e+14 -1.277e+12 -1.206e+14 -6.787e+11 -1.268e+14 -8.236e+10 -1.331e+14 5.056e+11 -1.395e+14 1.078e+12 -1.460e+14 1.628e+12 -1.525e+14 2.147e+12 -1.592e+14 2.632e+12 -1.658e+14 3.080e+12 -1.726e+14 3.480e+12 -1.793e+14 3.818e+12 -1.861e+14 4.087e+12 -1.929e+14 4.277e+12 -1.997e+14 4.382e+12 -2.064e+14 4.392e+12 -2.130e+14 4.301e+12 -2.197e+14 4.100e+12 -2.262e+14 3.783e+12 -2.326e+14 3.343e+12 -2.390e+14 2.775e+12 -2.452e+14 2.072e+12 -2.513e+14 1.229e+12 -2.572e+14 2.430e+11 -2.630e+14 -8.918e+11 -2.687e+14 -2.177e+12 -2.741e+14 -3.616e+12 -2.794e+14 -5.211e+12 -2.845e+14 -6.962e+12 -2.893e+14 -8.870e+12 -2.940e+14 -1.094e+13 -2.985e+14 -1.316e+13 -3.027e+14 -1.554e+13 -3.067e+14 -1.807e+13 -3.105e+14 -2.076e+13 -3.141e+14 -2.359e+13 -3.174e+14 -2.658e+13 -3.205e+14 -2.970e+13 -3.234e+14 -3.296e+13 -3.261e+14 -3.637e+13 -3.285e+14 -3.990e+13 -3.306e+14 -4.355e+13 -3.326e+14 -4.733e+13 -3.343e+14 -5.122e+13 -3.358e+14 -5.523e+13 -3.371e+14 -5.933e+13 -3.381e+14 -6.354e+13 -3.389e+14 -6.784e+13 -3.395e+14 -7.223e+13 -3.400e+14 -7.672e+13 -3.403e+14 -8.128e+13 -3.404e+14 -8.592e+13 -3.403e+14 -9.062e+13 -3.400e+14 -9.536e+13 -3.396e+14 -1.002e+14 -3.389e+14 -1.050e+14 -3.381e+14 -1.098e+14 -3.371e+14 -1.147e+14 -3.359e+14 -1.196e+14 -3.346e+14 -1.244e+14 -3.331e+14 -1.293e+14 -3.314e+14 -1.341e+14 -3.296e+14 -1.389e+14 -3.276e+14 -1.437e+14 -3.255e+14 -1.484e+14 -3.232e+14 -1.530e+14 -3.208e+14 -1.575e+14 -3.183e+14 -1.619e+14 -3.156e+14 -1.662e+14 -3.127e+14 -1.704e+14 -3.097e+14 -1.744e+14 -3.066e+14 -1.783e+14 -3.034e+14 -1.820e+14 -3.000e+14 -1.856e+14 -2.964e+14 -1.889e+14 -2.928e+14 -1.920e+14 -2.890e+14 -1.949e+14 -2.850e+14 -1.976e+14 -2.810e+14 -2.000e+14 -2.768e+14 -2.021e+14 -2.725e+14 -2.040e+14 -2.681e+14 -2.056e+14 -2.635e+14 -2.070e+14 -2.588e+14 -2.080e+14 -2.540e+14 -2.087e+14 -2.491e+14 -2.092e+14 -2.441e+14 -2.093e+14 -2.390e+14 -2.092e+14 -2.339e+14 -2.083e+14 -2.302e+14 -2.074e+14 -2.258e+14 -2.064e+14 -2.204e+14 -2.051e+14 -2.149e+14 -2.034e+14 -2.094e+14 -2.015e+14 -2.038e+14 -1.994e+14 -1.981e+14 -1.969e+14 -1.925e+14 -1.942e+14 -1.868e+14 -1.913e+14 -1.810e+14 -1.881e+14 -1.753e+14 -1.847e+14 -1.696e+14 -1.811e+14 -1.638e+14 -1.772e+14 -1.581e+14 -1.732e+14 -1.524e+14 -1.690e+14 -1.468e+14 -1.647e+14 -1.412e+14 -1.602e+14 -1.356e+14 -1.556e+14 -1.301e+14 -1.508e+14 -1.247e+14 -1.460e+14 -1.193e+14 -1.411e+14 -1.140e+14 -1.361e+14 -1.088e+14 -1.310e+14 -1.037e+14 -1.259e+14 -9.866e+13 -1.208e+14 -9.374e+13 -1.157e+14 -8.893e+13 -1.105e+14 -8.424e+13 -1.054e+14 -7.966e+13 -1.003e+14 -7.521e+13 -9.530e+13 -7.089e+13 -9.033e+13 -6.669e+13 -8.543e+13 -6.263e+13 -8.062e+13 -5.871e+13 -7.590e+13 -5.493e+13 -7.129e+13 -5.129e+13 -6.680e+13 -4.780e+13 -6.244e+13 -4.445e+13 -5.821e+13 -4.125e+13 -5.414e+13 -3.820e+13 -5.021e+13 -3.529e+13 -4.645e+13 -3.253e+13 -4.286e+13 -2.992e+13 -3.942e+13 -2.745e+13 -3.616e+13 -2.512e+13 -3.306e+13 -2.293e+13 -3.014e+13 -2.087e+13 -2.738e+13 -1.894e+13 -2.479e+13 -1.715e+13 -2.237e+13 -1.548e+13 -2.011e+13 -1.393e+13 -1.801e+13 -1.249e+13 -1.606e+13 -1.117e+13 -1.427e+13 -9.952e+12 -1.263e+13 -8.838e+12 -1.112e+13 -7.819e+12 -9.748e+12 -6.892e+12 -8.503e+12 -6.050e+12 -7.378e+12 -5.290e+12 -6.366e+12 -4.605e+12 -5.461e+12 -3.991e+12 -4.654e+12 -3.442e+12 -3.940e+12 -2.953e+12 -3.312e+12 -2.520e+12 -2.761e+12 -2.139e+12 -2.282e+12 -1.804e+12 -1.868e+12 -1.512e+12 -1.513e+12 -1.258e+12 -1.211e+12 -1.039e+12 -9.569e+11 -8.515e+11 -7.445e+11 -6.916e+11 -5.693e+11 -5.564e+11 -4.266e+11 -4.431e+11 -3.120e+11 -3.489e+11 -2.215e+11 -2.715e+11 -1.515e+11 -2.087e+11 -9.868e+10 -1.583e+11 -5.990e+10 -1.187e+11 -3.240e+10 -8.827e+10 -1.354e+10 -6.553e+10 -8.893e+08 -4.920e+10 7.778e+09 -3.804e+10 1.438e+10 -3.073e+10 2.027e+10 -2.599e+10 2.609e+10 -2.273e+10 3.195e+10 -2.018e+10 3.759e+10 -1.793e+10 4.269e+10 -1.584e+10 4.695e+10 -1.388e+10 5.014e+10 -1.207e+10 5.211e+10 -1.048e+10 5.283e+10 -9.148e+09 5.231e+10 -8.088e+09 5.063e+10 -7.306e+09 4.794e+10 -6.782e+09 4.440e+10 -6.481e+09 4.020e+10 -6.359e+09 3.555e+10 -6.360e+09 3.067e+10 -6.432e+09 2.574e+10 -6.521e+09 2.097e+10 -6.585e+09 1.653e+10 -6.593e+09 1.256e+10 -6.541e+09 9.150e+09 -6.455e+09 6.350e+09 -6.408e+09 4.107e+09 -6.521e+09 2.253e+09 -6.947e+09 5.233e+08 -7.812e+09 -1.368e+09 -9.168e+09 -3.646e+09 -1.099e+10 -6.427e+09 -1.323e+10 -9.741e+09 -1.579e+10 -1.356e+10 -1.861e+10 -1.782e+10 -2.163e+10 -2.241e+10 -2.478e+10 -2.725e+10 -2.801e+10 -3.222e+10 -3.126e+10 -3.719e+10 -3.448e+10 -4.207e+10 -3.761e+10 -4.675e+10 -4.062e+10 -5.112e+10 -4.345e+10 -5.512e+10 -4.605e+10 -5.865e+10 -4.839e+10 -6.166e+10 -5.045e+10 -6.411e+10 -5.220e+10 -6.595e+10 -5.362e+10 -6.717e+10 -5.469e+10 -6.777e+10 -5.539e+10 -6.774e+10 -5.573e+10 -6.713e+10 -5.571e+10 -6.594e+10 -5.531e+10 -6.423e+10 -5.457e+10 -6.205e+10 -5.349e+10 -5.944e+10 -5.209e+10 -5.648e+10 -5.040e+10 -5.321e+10 -4.844e+10 -4.972e+10 -4.625e+10 -4.606e+10 -4.385e+10 -4.229e+10 -4.129e+10 -3.848e+10 -3.860e+10 -3.469e+10 -3.583e+10 -3.097e+10 -3.300e+10 -2.737e+10 -3.016e+10 -2.392e+10 -2.734e+10 -2.067e+10 -2.458e+10 -1.763e+10 -2.190e+10 -1.484e+10 -1.934e+10 -1.230e+10 -1.691e+10 -1.003e+10 -1.464e+10 -8.024e+09 -1.254e+10 -6.281e+09 -1.062e+10 -4.791e+09 -8.889e+09 -3.540e+09 -7.346e+09 -2.513e+09 -5.991e+09 -1.688e+09 -4.818e+09 -1.043e+09 -3.819e+09 -5.547e+08 -2.983e+09 -1.978e+08 -2.296e+09 5.205e+07 -1.743e+09 2.191e+08 -1.307e+09 3.260e+08 -9.711e+08 3.924e+08 -7.158e+08 4.337e+08 -5.223e+08 4.601e+08 -3.728e+08 4.763e+08 -2.530e+08 4.829e+08 -1.524e+08 4.782e+08 -6.471e+07 4.603e+08 1.273e+07 4.286e+08 8.056e+07 3.839e+08 1.388e+08 3.288e+08 1.875e+08 2.668e+08 2.283e+08 2.010e+08 2.649e+08 1.322e+08 3.033e+08 5.668e+07 3.513e+08 -3.511e+07 4.164e+08 -1.570e+08 5.039e+08 -3.246e+08 6.159e+08 -5.528e+08 7.520e+08 -8.544e+08 9.105e+08 -1.240e+09 1.088e+09 -1.717e+09 1.283e+09 -2.292e+09 1.491e+09 -2.968e+09 1.710e+09 -3.745e+09 1.935e+09 -4.621e+09 2.164e+09 -5.592e+09 2.392e+09 -6.651e+09 2.617e+09 -7.787e+09 2.835e+09 -8.990e+09 3.043e+09 -1.024e+10 3.239e+09 -1.154e+10 3.418e+09 -1.285e+10 3.580e+09 -1.416e+10 3.722e+09 -1.546e+10 3.844e+09 -1.672e+10 3.945e+09 -1.792e+10 4.024e+09 -1.905e+10 4.083e+09 -2.008e+10 4.122e+09 -2.101e+10 4.143e+09 -2.181e+10 4.148e+09 -2.247e+10 4.138e+09 -2.299e+10 4.117e+09 -2.335e+10 4.087e+09 -2.355e+10 4.051e+09 -2.359e+10 4.011e+09 -2.346e+10 3.969e+09 -2.317e+10 3.926e+09 -2.272e+10 3.885e+09 -2.213e+10 3.845e+09 -2.139e+10 3.806e+09 -2.054e+10 3.769e+09 -1.957e+10 3.733e+09 -1.850e+10 3.695e+09 -1.736e+10 3.655e+09 -1.616e+10 3.611e+09 -1.492e+10 3.560e+09 -1.365e+10 3.502e+09 -1.238e+10 3.433e+09 -1.112e+10 3.353e+09 -9.884e+09 3.260e+09 -8.692e+09 3.154e+09 -7.556e+09 3.036e+09 -6.487e+09 2.904e+09 -5.492e+09 2.761e+09 -4.582e+09 2.609e+09 -3.760e+09 2.451e+09 -3.028e+09 2.290e+09 -2.388e+09 2.130e+09 -1.837e+09 1.976e+09 -1.368e+09 1.833e+09 -9.756e+08 1.708e+09 -6.470e+08 1.604e+09 -3.687e+08 1.527e+09 -1.268e+08 1.477e+09 9.437e+07 1.453e+09 3.073e+08 1.452e+09 5.200e+08 1.467e+09 7.370e+08 1.491e+09 9.592e+08 1.519e+09 1.184e+09 1.544e+09 1.407e+09 1.563e+09 1.622e+09 1.571e+09 1.825e+09 1.567e+09 2.008e+09 1.549e+09 2.167e+09 1.515e+09 2.295e+09 1.466e+09 2.390e+09 1.402e+09 2.447e+09 1.323e+09 2.466e+09 1.232e+09 2.444e+09 1.128e+09 2.382e+09 1.015e+09 2.282e+09 8.951e+08 2.147e+09 7.697e+08 1.980e+09 6.419e+08 1.787e+09 5.150e+08 1.574e+09 3.919e+08 1.348e+09 2.760e+08 1.117e+09 1.706e+08 8.898e+08 7.895e+07 6.745e+08 3.691e+06 4.810e+08 -5.314e+07 3.179e+08 -9.161e+07 1.918e+08 -1.165e+08 1.017e+08 -1.411e+08 2.974e+07 -1.867e+08 -5.697e+07 -2.707e+08 -1.895e+08 -3.988e+08 -3.862e+08 -5.694e+08 -6.567e+08 -7.801e+08 -1.006e+09 -1.028e+09 -1.434e+09 -1.311e+09 -1.943e+09 -1.626e+09 -2.531e+09 -1.970e+09 -3.192e+09 -2.338e+09 -3.924e+09 -2.726e+09 -4.719e+09 -3.129e+09 -5.570e+09 -3.541e+09 -6.468e+09 -3.958e+09 -7.405e+09 -4.374e+09 -8.369e+09 -4.783e+09 -9.353e+09 -5.180e+09 -1.034e+10 -5.561e+09 -1.133e+10 -5.919e+09 -1.230e+10 -6.253e+09 -1.325e+10 -6.558e+09 -1.417e+10 -6.830e+09 -1.504e+10 -7.067e+09 -1.585e+10 -7.268e+09 -1.661e+10 -7.431e+09 -1.729e+10 -7.556e+09 -1.790e+10 -7.642e+09 -1.844e+10 -7.689e+09 -1.888e+10 -7.698e+09 -1.924e+10 -7.670e+09 -1.952e+10 -7.607e+09 -1.969e+10 -7.508e+09 -1.978e+10 -7.377e+09 -1.977e+10 -7.215e+09 -1.968e+10 -7.023e+09 -1.949e+10 -6.805e+09 0.005 -62.865 -60.876 -58.888 -56.899 -54.910 -52.921 -50.933 -49.035 -47.243 -45.552 -43.957 -42.450 -41.023 -39.667 -38.379 -37.156 -35.994 -34.888 -33.835 -32.834 -31.882 -30.976 -30.114 -29.295 -28.518 -27.780 -27.081 -26.418 -25.793 -25.202 -24.646 -24.123 -23.633 -23.175 -22.749 -22.353 -21.989 -21.654 -21.348 -21.073 -20.826 -20.608 -20.418 -20.257 -20.125 -20.020 -19.944 -19.896 -19.877 -19.883 -19.917 -19.980 -20.071 -20.191 -20.341 -20.521 -20.730 -20.970 -21.241 -21.543 -21.877 -22.244 -22.644 -23.079 -23.548 -24.053 -24.595 -25.175 -25.793 -26.453 -27.153 -27.897 -28.687 -29.522 -30.407 -31.341 -32.329 -33.372 -34.472 -35.632 -36.850 -38.129 -39.460 -40.835 -42.236 -43.629 -44.958 -46.140 -47.092 -47.754 -48.122 -48.253 -48.234 -48.148 -48.059 -48.016 -48.053 -48.201 -48.496 -48.983 -49.728 -50.828 -52.404 -54.403 -55.616 -54.030 -50.311 -46.543 -43.292 -40.483 -38.002 -35.769 -33.727 -31.840 -30.079 -28.427 -26.870 -25.397 -23.999 -22.670 -21.404 -20.196 -19.042 -17.939 -16.884 -15.874 -14.908 -13.982 -13.095 -12.245 -11.431 -10.652 -9.907 -9.194 -8.512 -7.860 -7.239 -6.646 -6.082 -5.545 -5.036 -4.553 -4.096 -3.663 -3.253 -2.868 -2.508 -2.172 -1.861 -1.574 -1.310 -1.071 -0.856 -0.665 -0.497 -0.354 -0.234 -0.139 -0.068 -0.021 0.000 -0.004 -0.033 -0.089 -0.171 -0.281 -0.418 -0.584 -0.779 -1.004 -1.260 -1.548 -1.869 -2.221 -2.611 -3.039 -3.508 -4.020 -4.579 -5.186 -5.847 -6.565 -7.345 -8.193 -9.116 -10.123 -11.225 -12.433 -13.764 -15.238 -16.881 -18.728 -20.827 -23.246 -26.085 -29.505 -33.774 -39.404 -47.499 -58.820 -54.321 -45.114 -38.099 -32.897 -28.851 -25.570 -22.825 -20.475 -18.429 -16.625 -15.018 -13.574 -12.269 -11.083 -10.002 -9.013 -8.106 -7.273 -6.507 -5.802 -5.154 -4.557 -4.009 -3.507 -3.047 -2.628 -2.247 -1.902 -1.592 -1.313 -1.063 -0.845 -0.656 -0.496 -0.364 -0.260 -0.182 -0.130 -0.104 -0.104 -0.129 -0.178 -0.251 -0.348 -0.468 -0.612 -0.780 -0.971 -1.185 -1.422 -1.683 -1.967 -2.274 -2.604 -2.958 -3.336 -3.738 -4.164 -4.612 -5.082 -5.578 -6.099 -6.646 -7.219 -7.819 -8.446 -9.101 -9.783 -10.495 -11.236 -12.008 -12.810 -13.645 -14.512 -15.414 -16.350 -17.322 -18.332 -19.382 -20.471 -21.602 -22.777 -23.997 -25.265 -26.582 -27.952 -29.375 -30.855 -32.390 -33.983 -35.633 -37.334 -39.071 -40.819 -42.527 -44.122 -45.505 -46.585 -47.314 -47.715 -47.862 -47.841 -47.713 -47.511 -47.240 -46.889 -46.440 -45.875 -45.183 -44.368 -43.445 -42.437 -41.371 -40.271 -39.159 -38.051 -36.961 -35.895 -34.860 -33.858 -32.890 -31.961 -31.070 -30.219 -29.406 -28.632 -27.895 -27.196 -26.534 -25.907 -25.316 -24.760 -24.238 -23.749 -23.293 -22.869 -22.476 -22.115 -21.784 -21.483 -21.212 -20.971 -20.758 -20.574 -20.418 -20.291 -20.191 -20.119 -20.075 -20.058 -20.068 -20.105 -20.169 -20.258 -20.374 -20.517 -20.687 -20.885 -21.111 -21.365 -21.646 -21.956 -22.295 -22.663 -23.060 -23.487 -23.944 -24.432 -24.952 -25.503 -26.087 -26.705 -27.356 -28.043 -28.766 -29.525 -30.322 -31.159 -32.035 -32.953 -33.913 -34.918 -35.967 -37.063 -38.208 -39.401 -40.646 -41.942 -43.291 -44.690 -46.143 -47.649 -49.207 -50.814 -52.462 -54.143 -55.824 -57.505 -59.186 -60.867 -62.548 0 1 1.0 1 N4 HH 30.06 34.35 0.05 -3.893e+10 -3.153e+10 -3.835e+10 -3.282e+10 -3.766e+10 -3.395e+10 -3.688e+10 -3.490e+10 -3.601e+10 -3.567e+10 -3.506e+10 -3.625e+10 -3.404e+10 -3.665e+10 -3.294e+10 -3.687e+10 -3.179e+10 -3.690e+10 -3.058e+10 -3.676e+10 -2.933e+10 -3.645e+10 -2.805e+10 -3.598e+10 -2.674e+10 -3.536e+10 -2.541e+10 -3.460e+10 -2.408e+10 -3.372e+10 -2.274e+10 -3.271e+10 -2.140e+10 -3.161e+10 -2.008e+10 -3.042e+10 -1.877e+10 -2.916e+10 -1.748e+10 -2.784e+10 -1.622e+10 -2.647e+10 -1.499e+10 -2.506e+10 -1.380e+10 -2.363e+10 -1.264e+10 -2.218e+10 -1.153e+10 -2.074e+10 -1.046e+10 -1.930e+10 -9.440e+09 -1.788e+10 -8.467e+09 -1.648e+10 -7.546e+09 -1.512e+10 -6.677e+09 -1.379e+10 -5.863e+09 -1.251e+10 -5.104e+09 -1.128e+10 -4.402e+09 -1.010e+10 -3.756e+09 -8.989e+09 -3.166e+09 -7.936e+09 -2.632e+09 -6.949e+09 -2.153e+09 -6.031e+09 -1.728e+09 -5.182e+09 -1.355e+09 -4.405e+09 -1.032e+09 -3.699e+09 -7.574e+08 -3.064e+09 -5.273e+08 -2.499e+09 -3.392e+08 -2.003e+09 -1.895e+08 -1.573e+09 -7.451e+07 -1.206e+09 9.621e+06 -9.006e+08 6.732e+07 -6.512e+08 1.033e+08 -4.538e+08 1.231e+08 -3.037e+08 1.331e+08 -1.945e+08 1.410e+08 -1.178e+08 1.544e+08 -6.274e+07 1.781e+08 -1.639e+07 2.127e+08 3.206e+07 2.555e+08 8.864e+07 3.032e+08 1.552e+08 3.529e+08 2.314e+08 4.021e+08 3.155e+08 4.490e+08 4.058e+08 4.924e+08 5.009e+08 5.312e+08 5.995e+08 5.649e+08 7.009e+08 5.928e+08 8.047e+08 6.147e+08 9.110e+08 6.304e+08 1.020e+09 6.399e+08 1.134e+09 6.430e+08 1.253e+09 6.397e+08 1.379e+09 6.296e+08 1.515e+09 6.127e+08 1.664e+09 5.885e+08 1.828e+09 5.563e+08 2.010e+09 5.153e+08 2.215e+09 4.644e+08 2.447e+09 4.021e+08 2.709e+09 3.269e+08 3.007e+09 2.369e+08 3.345e+09 1.301e+08 3.729e+09 4.603e+06 4.164e+09 -1.418e+08 4.654e+09 -3.114e+08 5.205e+09 -5.056e+08 5.822e+09 -7.264e+08 6.509e+09 -9.754e+08 7.273e+09 -1.253e+09 8.116e+09 -1.561e+09 9.043e+09 -1.898e+09 1.006e+10 -2.265e+09 1.116e+10 -2.660e+09 1.236e+10 -3.083e+09 1.366e+10 -3.532e+09 1.506e+10 -4.004e+09 1.655e+10 -4.499e+09 1.815e+10 -5.011e+09 1.985e+10 -5.539e+09 2.166e+10 -6.080e+09 2.356e+10 -6.629e+09 2.557e+10 -7.185e+09 2.768e+10 -7.744e+09 2.989e+10 -8.303e+09 3.219e+10 -8.861e+09 3.458e+10 -9.418e+09 3.707e+10 -9.969e+09 3.965e+10 -1.051e+10 4.229e+10 -1.104e+10 4.501e+10 -1.155e+10 4.778e+10 -1.205e+10 5.060e+10 -1.253e+10 5.344e+10 -1.300e+10 5.630e+10 -1.344e+10 5.915e+10 -1.385e+10 6.199e+10 -1.425e+10 6.477e+10 -1.461e+10 6.749e+10 -1.495e+10 7.011e+10 -1.526e+10 7.261e+10 -1.553e+10 7.496e+10 -1.576e+10 7.714e+10 -1.596e+10 7.912e+10 -1.612e+10 8.087e+10 -1.624e+10 8.236e+10 -1.631e+10 8.358e+10 -1.633e+10 8.450e+10 -1.630e+10 8.511e+10 -1.623e+10 8.539e+10 -1.611e+10 8.534e+10 -1.593e+10 8.493e+10 -1.571e+10 8.419e+10 -1.544e+10 8.310e+10 -1.513e+10 8.167e+10 -1.477e+10 7.993e+10 -1.438e+10 7.789e+10 -1.396e+10 7.556e+10 -1.351e+10 7.298e+10 -1.304e+10 7.017e+10 -1.256e+10 6.716e+10 -1.206e+10 6.399e+10 -1.156e+10 6.069e+10 -1.106e+10 5.729e+10 -1.057e+10 5.382e+10 -1.009e+10 5.033e+10 -9.621e+09 4.685e+10 -9.170e+09 4.340e+10 -8.739e+09 4.003e+10 -8.328e+09 3.673e+10 -7.937e+09 3.354e+10 -7.567e+09 3.047e+10 -7.216e+09 2.755e+10 -6.882e+09 2.478e+10 -6.564e+09 2.217e+10 -6.261e+09 1.974e+10 -5.969e+09 1.749e+10 -5.687e+09 1.541e+10 -5.413e+09 1.351e+10 -5.146e+09 1.179e+10 -4.884e+09 1.024e+10 -4.627e+09 8.846e+09 -4.374e+09 7.608e+09 -4.125e+09 6.514e+09 -3.880e+09 5.553e+09 -3.637e+09 4.713e+09 -3.397e+09 3.984e+09 -3.159e+09 3.354e+09 -2.922e+09 2.812e+09 -2.685e+09 2.349e+09 -2.447e+09 1.954e+09 -2.208e+09 1.620e+09 -1.967e+09 1.339e+09 -1.725e+09 1.104e+09 -1.483e+09 9.110e+08 -1.244e+09 7.533e+08 -1.012e+09 6.263e+08 -7.917e+08 5.253e+08 -5.900e+08 4.464e+08 -4.127e+08 3.869e+08 -2.646e+08 3.471e+08 -1.446e+08 3.323e+08 -4.010e+07 3.526e+08 7.440e+07 4.196e+08 2.298e+08 5.402e+08 4.522e+08 7.173e+08 7.593e+08 9.530e+08 1.162e+09 1.249e+09 1.668e+09 1.609e+09 2.281e+09 2.033e+09 3.002e+09 2.521e+09 3.828e+09 3.070e+09 4.756e+09 3.677e+09 5.777e+09 4.332e+09 6.883e+09 5.027e+09 8.059e+09 5.749e+09 9.290e+09 6.484e+09 1.056e+10 7.215e+09 1.185e+10 7.924e+09 1.313e+10 8.593e+09 1.439e+10 9.203e+09 1.560e+10 9.736e+09 1.674e+10 1.017e+10 1.778e+10 1.050e+10 1.870e+10 1.070e+10 1.948e+10 1.076e+10 2.009e+10 1.068e+10 2.052e+10 1.045e+10 2.075e+10 1.007e+10 2.076e+10 9.548e+09 2.056e+10 8.886e+09 2.012e+10 8.100e+09 1.947e+10 7.206e+09 1.859e+10 6.224e+09 1.751e+10 5.181e+09 1.625e+10 4.101e+09 1.483e+10 3.015e+09 1.328e+10 1.954e+09 1.165e+10 9.476e+08 9.996e+09 2.428e+07 8.363e+09 -7.940e+08 6.811e+09 -1.499e+09 5.399e+09 -2.100e+09 4.171e+09 -2.641e+09 3.133e+09 -3.211e+09 2.234e+09 -3.936e+09 1.347e+09 -4.955e+09 2.988e+08 -6.381e+09 -1.084e+09 -8.282e+09 -2.944e+09 -1.069e+10 -5.387e+09 -1.361e+10 -8.483e+09 -1.705e+10 -1.227e+10 -2.100e+10 -1.677e+10 -2.545e+10 -2.197e+10 -3.038e+10 -2.783e+10 -3.577e+10 -3.430e+10 -4.158e+10 -4.130e+10 -4.778e+10 -4.871e+10 -5.433e+10 -5.642e+10 -6.118e+10 -6.426e+10 -6.828e+10 -7.206e+10 -7.557e+10 -7.966e+10 -8.299e+10 -8.684e+10 -9.048e+10 -9.340e+10 -9.798e+10 -9.916e+10 -1.054e+11 -1.039e+11 -1.128e+11 -1.074e+11 -1.200e+11 -1.096e+11 -1.270e+11 -1.103e+11 -1.339e+11 -1.094e+11 -1.405e+11 -1.069e+11 -1.470e+11 -1.026e+11 -1.534e+11 -9.656e+10 -1.598e+11 -8.884e+10 -1.664e+11 -7.944e+10 -1.735e+11 -6.835e+10 -1.814e+11 -5.546e+10 -1.907e+11 -4.057e+10 -2.018e+11 -2.328e+10 -2.155e+11 -2.893e+09 -2.327e+11 2.155e+10 -2.543e+11 5.137e+10 -2.814e+11 8.827e+10 -3.152e+11 1.342e+11 -3.566e+11 1.915e+11 -4.071e+11 2.628e+11 -4.680e+11 3.509e+11 -5.407e+11 4.587e+11 -6.268e+11 5.896e+11 -7.282e+11 7.468e+11 -8.468e+11 9.339e+11 -9.849e+11 1.155e+12 -1.145e+12 1.413e+12 -1.330e+12 1.713e+12 -1.543e+12 2.059e+12 -1.787e+12 2.455e+12 -2.066e+12 2.905e+12 -2.384e+12 3.413e+12 -2.746e+12 3.983e+12 -3.155e+12 4.620e+12 -3.618e+12 5.328e+12 -4.139e+12 6.110e+12 -4.724e+12 6.969e+12 -5.379e+12 7.910e+12 -6.111e+12 8.935e+12 -6.925e+12 1.004e+13 -7.828e+12 1.124e+13 -8.828e+12 1.253e+13 -9.931e+12 1.391e+13 -1.114e+13 1.538e+13 -1.248e+13 1.695e+13 -1.394e+13 1.860e+13 -1.553e+13 2.034e+13 -1.726e+13 2.216e+13 -1.914e+13 2.407e+13 -2.117e+13 2.606e+13 -2.337e+13 2.812e+13 -2.573e+13 3.024e+13 -2.827e+13 3.243e+13 -3.099e+13 3.467e+13 -3.390e+13 3.696e+13 -3.700e+13 3.928e+13 -4.030e+13 4.163e+13 -4.380e+13 4.400e+13 -4.751e+13 4.637e+13 -5.143e+13 5.003e+13 -5.506e+13 5.196e+13 -5.980e+13 5.436e+13 -6.439e+13 5.672e+13 -6.919e+13 5.902e+13 -7.420e+13 6.125e+13 -7.944e+13 6.340e+13 -8.490e+13 6.545e+13 -9.056e+13 6.738e+13 -9.644e+13 6.919e+13 -1.025e+14 7.084e+13 -1.088e+14 7.234e+13 -1.153e+14 7.366e+13 -1.219e+14 7.478e+13 -1.287e+14 7.570e+13 -1.357e+14 7.639e+13 -1.428e+14 7.685e+13 -1.501e+14 7.705e+13 -1.575e+14 7.699e+13 -1.650e+14 7.664e+13 -1.726e+14 7.601e+13 -1.803e+14 7.508e+13 -1.880e+14 7.383e+13 -1.958e+14 7.227e+13 -2.036e+14 7.037e+13 -2.114e+14 6.814e+13 -2.192e+14 6.557e+13 -2.270e+14 6.265e+13 -2.347e+14 5.938e+13 -2.423e+14 5.576e+13 -2.498e+14 5.180e+13 -2.572e+14 4.748e+13 -2.644e+14 4.282e+13 -2.715e+14 3.781e+13 -2.784e+14 3.248e+13 -2.851e+14 2.681e+13 -2.915e+14 2.083e+13 -2.977e+14 1.455e+13 -3.037e+14 7.962e+12 -3.093e+14 1.105e+12 -3.146e+14 -6.021e+12 -3.197e+14 -1.341e+13 -3.244e+14 -2.103e+13 -3.289e+14 -2.886e+13 -3.329e+14 -3.690e+13 -3.366e+14 -4.511e+13 -3.399e+14 -5.347e+13 -3.428e+14 -6.197e+13 -3.453e+14 -7.056e+13 -3.474e+14 -7.925e+13 -3.491e+14 -8.799e+13 -3.503e+14 -9.677e+13 -3.511e+14 -1.055e+14 -3.515e+14 -1.143e+14 -3.514e+14 -1.230e+14 -3.510e+14 -1.317e+14 -3.500e+14 -1.403e+14 -3.487e+14 -1.487e+14 -3.470e+14 -1.570e+14 -3.448e+14 -1.652e+14 -3.422e+14 -1.731e+14 -3.393e+14 -1.808e+14 -3.359e+14 -1.883e+14 -3.322e+14 -1.956e+14 -3.281e+14 -2.025e+14 -3.237e+14 -2.092e+14 -3.189e+14 -2.155e+14 -3.138e+14 -2.215e+14 -3.084e+14 -2.271e+14 -3.026e+14 -2.324e+14 -2.966e+14 -2.372e+14 -2.904e+14 -2.417e+14 -2.839e+14 -2.457e+14 -2.771e+14 -2.494e+14 -2.701e+14 -2.525e+14 -2.630e+14 -2.553e+14 -2.557e+14 -2.575e+14 -2.482e+14 -2.593e+14 -2.405e+14 -2.606e+14 -2.328e+14 -2.615e+14 -2.250e+14 -2.619e+14 -2.171e+14 -2.618e+14 -2.092e+14 -2.613e+14 -2.013e+14 -2.603e+14 -1.934e+14 -2.588e+14 -1.854e+14 -2.569e+14 -1.775e+14 -2.546e+14 -1.697e+14 -2.518e+14 -1.619e+14 -2.486e+14 -1.542e+14 -2.450e+14 -1.465e+14 -2.410e+14 -1.390e+14 -2.366e+14 -1.317e+14 -2.319e+14 -1.244e+14 -2.268e+14 -1.174e+14 -2.214e+14 -1.105e+14 -2.158e+14 -1.038e+14 -2.099e+14 -9.732e+13 -2.037e+14 -9.104e+13 -1.974e+14 -8.499e+13 -1.908e+14 -7.916e+13 -1.841e+14 -7.358e+13 -1.773e+14 -6.823e+13 -1.705e+14 -6.314e+13 -1.635e+14 -5.828e+13 -1.565e+14 -5.368e+13 -1.495e+14 -4.933e+13 -1.425e+14 -4.522e+13 -1.355e+14 -4.136e+13 -1.286e+14 -3.774e+13 -1.218e+14 -3.436e+13 -1.151e+14 -3.120e+13 -1.086e+14 -2.827e+13 -1.021e+14 -2.556e+13 -9.588e+13 -2.305e+13 -8.979e+13 -2.074e+13 -8.389e+13 -1.862e+13 -7.819e+13 -1.668e+13 -7.270e+13 -1.491e+13 -6.743e+13 -1.330e+13 -6.238e+13 -1.184e+13 -5.756e+13 -1.052e+13 -5.296e+13 -9.326e+12 -4.861e+13 -8.250e+12 -4.448e+13 -7.288e+12 -4.059e+13 -6.431e+12 -3.693e+13 -5.671e+12 -3.349e+13 -4.998e+12 -3.028e+13 -4.404e+12 -2.729e+13 -3.881e+12 -2.451e+13 -3.423e+12 -2.194e+13 -3.021e+12 -1.956e+13 -2.671e+12 -1.738e+13 -2.366e+12 -1.538e+13 -2.099e+12 -1.355e+13 -1.868e+12 -1.189e+13 -1.666e+12 -1.039e+13 -1.490e+12 -9.033e+12 -1.336e+12 -7.816e+12 -1.201e+12 -6.729e+12 -1.083e+12 -5.762e+12 -9.777e+11 -4.907e+12 -8.843e+11 -4.155e+12 -8.006e+11 -3.496e+12 -7.252e+11 -2.924e+12 -6.569e+11 -2.429e+12 -5.945e+11 -2.004e+12 -5.374e+11 -1.642e+12 -4.850e+11 -1.335e+12 -4.366e+11 -1.077e+12 -3.921e+11 -8.632e+11 -3.511e+11 -6.862e+11 -3.134e+11 -5.414e+11 -2.790e+11 -4.240e+11 -2.478e+11 -3.297e+11 -2.196e+11 -2.547e+11 -1.943e+11 -1.955e+11 -1.718e+11 -1.491e+11 -1.519e+11 -1.131e+11 -1.343e+11 -8.534e+10 -1.188e+11 -6.398e+10 -1.051e+11 -4.767e+10 -9.291e+10 -3.532e+10 -8.188e+10 -2.606e+10 -7.174e+10 -1.924e+10 -6.231e+10 -1.438e+10 -5.346e+10 -1.104e+10 -4.513e+10 -8.902e+09 -3.731e+10 -7.654e+09 -3.007e+10 -7.036e+09 -2.350e+10 -6.837e+09 -1.772e+10 -6.920e+09 -1.287e+10 -7.283e+09 -8.986e+09 -8.120e+09 -6.007e+09 -9.796e+09 -3.589e+09 -1.271e+10 -1.153e+09 -1.712e+10 1.918e+09 -2.317e+10 6.090e+09 -3.091e+10 1.165e+10 -4.035e+10 1.873e+10 -5.146e+10 2.738e+10 -6.423e+10 3.759e+10 -7.856e+10 4.930e+10 -9.434e+10 6.241e+10 -1.114e+11 7.679e+10 -1.297e+11 9.229e+10 -1.488e+11 1.087e+11 -1.687e+11 1.259e+11 -1.891e+11 1.435e+11 -2.096e+11 1.615e+11 -2.302e+11 1.795e+11 -2.504e+11 1.973e+11 -2.701e+11 2.147e+11 -2.889e+11 2.314e+11 -3.067e+11 2.473e+11 -3.231e+11 2.620e+11 -3.381e+11 2.755e+11 -3.513e+11 2.875e+11 -3.627e+11 2.979e+11 -3.720e+11 3.065e+11 -3.793e+11 3.133e+11 -3.845e+11 3.182e+11 -3.875e+11 3.211e+11 -3.882e+11 3.221e+11 -3.868e+11 3.211e+11 -3.832e+11 3.183e+11 -3.775e+11 3.136e+11 -3.699e+11 3.071e+11 -3.605e+11 2.991e+11 -3.494e+11 2.896e+11 -3.368e+11 2.788e+11 -3.229e+11 2.669e+11 -3.079e+11 2.540e+11 -2.919e+11 2.403e+11 -2.753e+11 2.261e+11 -2.581e+11 2.115e+11 -2.407e+11 1.967e+11 -2.232e+11 1.818e+11 -2.057e+11 1.671e+11 -1.884e+11 1.526e+11 -1.716e+11 1.386e+11 -1.552e+11 1.251e+11 -1.396e+11 1.122e+11 -1.247e+11 1.000e+11 -1.105e+11 8.860e+10 -9.734e+10 7.799e+10 -8.507e+10 6.822e+10 -7.376e+10 5.928e+10 -6.344e+10 5.120e+10 -5.410e+10 4.394e+10 -4.571e+10 3.747e+10 -3.825e+10 3.178e+10 -3.169e+10 2.680e+10 -2.596e+10 2.249e+10 -2.105e+10 1.881e+10 -1.686e+10 1.569e+10 -1.334e+10 1.307e+10 -1.042e+10 1.090e+10 -8.028e+09 9.133e+09 -6.104e+09 7.710e+09 -4.582e+09 6.596e+09 -3.394e+09 5.752e+09 -2.476e+09 5.144e+09 -1.771e+09 4.749e+09 -1.224e+09 4.544e+09 -7.924e+08 4.513e+09 -4.416e+08 4.642e+09 -1.497e+08 4.923e+09 9.491e+07 5.352e+09 2.947e+08 5.931e+09 4.462e+08 6.665e+09 5.411e+08 7.564e+09 5.675e+08 8.642e+09 5.111e+08 9.913e+09 3.552e+08 1.140e+10 8.117e+07 1.311e+10 -3.313e+08 1.506e+10 -9.045e+08 1.727e+10 -1.661e+09 1.975e+10 -2.622e+09 2.250e+10 -3.814e+09 2.554e+10 -5.255e+09 2.885e+10 -6.966e+09 3.242e+10 -8.965e+09 3.624e+10 -1.127e+10 4.029e+10 -1.388e+10 4.454e+10 -1.681e+10 4.896e+10 -2.007e+10 5.349e+10 -2.364e+10 5.810e+10 -2.752e+10 6.273e+10 -3.171e+10 6.734e+10 -3.616e+10 7.185e+10 -4.088e+10 7.623e+10 -4.582e+10 8.040e+10 -5.097e+10 8.431e+10 -5.627e+10 8.791e+10 -6.171e+10 9.114e+10 -6.722e+10 9.397e+10 -7.278e+10 9.634e+10 -7.835e+10 9.824e+10 -8.386e+10 9.961e+10 -8.929e+10 1.005e+11 -9.459e+10 1.008e+11 -9.972e+10 1.005e+11 -1.047e+11 9.975e+10 -1.093e+11 9.840e+10 -1.137e+11 9.651e+10 -1.178e+11 9.408e+10 -1.216e+11 9.115e+10 -1.250e+11 8.776e+10 -1.281e+11 8.392e+10 -1.307e+11 7.968e+10 -1.330e+11 7.508e+10 -1.348e+11 7.015e+10 -1.363e+11 6.493e+10 -1.373e+11 5.947e+10 -1.380e+11 5.380e+10 -1.382e+11 4.797e+10 -1.381e+11 4.201e+10 -1.377e+11 3.597e+10 -1.369e+11 2.988e+10 0.005 -58.614 -56.842 -55.069 -53.297 -51.525 -49.752 -47.989 -46.346 -44.805 -43.351 -41.976 -40.670 -39.428 -38.244 -37.115 -36.038 -35.010 -34.028 -33.091 -32.196 -31.341 -30.527 -29.750 -29.011 -28.308 -27.639 -27.005 -26.404 -25.836 -25.299 -24.794 -24.319 -23.875 -23.460 -23.075 -22.718 -22.390 -22.091 -21.819 -21.575 -21.359 -21.170 -21.009 -20.875 -20.768 -20.689 -20.637 -20.613 -20.616 -20.646 -20.704 -20.788 -20.900 -21.041 -21.210 -21.409 -21.637 -21.895 -22.185 -22.505 -22.858 -23.243 -23.662 -24.115 -24.605 -25.131 -25.696 -26.301 -26.947 -27.637 -28.374 -29.159 -29.998 -30.892 -31.848 -32.872 -33.971 -35.154 -36.434 -37.828 -39.358 -41.053 -42.959 -45.147 -47.705 -50.738 -54.151 -56.748 -56.346 -54.092 -51.996 -50.406 -49.240 -48.401 -47.823 -47.465 -47.304 -47.331 -47.542 -47.931 -48.463 -49.014 -49.280 -48.806 -47.367 -45.226 -42.830 -40.458 -38.216 -36.125 -34.177 -32.356 -30.648 -29.038 -27.517 -26.073 -24.701 -23.393 -22.144 -20.951 -19.809 -18.715 -17.668 -16.664 -15.701 -14.776 -13.890 -13.039 -12.223 -11.440 -10.689 -9.970 -9.281 -8.621 -7.991 -7.388 -6.813 -6.265 -5.743 -5.247 -4.777 -4.332 -3.911 -3.515 -3.144 -2.796 -2.472 -2.171 -1.894 -1.641 -1.410 -1.203 -1.017 -0.855 -0.715 -0.599 -0.507 -0.439 -0.395 -0.375 -0.381 -0.411 -0.468 -0.551 -0.661 -0.798 -0.963 -1.157 -1.382 -1.637 -1.924 -2.245 -2.601 -2.994 -3.425 -3.897 -4.412 -4.974 -5.585 -6.249 -6.971 -7.756 -8.609 -9.539 -10.554 -11.665 -12.885 -14.232 -15.726 -17.396 -19.281 -21.434 -23.934 -26.903 -30.550 -35.275 -42.045 -54.091 -53.792 -50.673 -45.733 -38.857 -33.450 -29.271 -25.910 -23.114 -20.731 -18.662 -16.839 -15.217 -13.760 -12.444 -11.248 -10.157 -9.159 -8.242 -7.400 -6.624 -5.910 -5.251 -4.645 -4.087 -3.574 -3.104 -2.673 -2.281 -1.924 -1.602 -1.312 -1.055 -0.827 -0.629 -0.460 -0.318 -0.203 -0.114 -0.051 -0.013 0.000 -0.011 -0.046 -0.105 -0.188 -0.293 -0.421 -0.572 -0.746 -0.942 -1.161 -1.402 -1.663 -1.946 -2.252 -2.581 -2.932 -3.307 -3.704 -4.125 -4.570 -5.038 -5.530 -6.047 -6.589 -7.156 -7.749 -8.368 -9.014 -9.687 -10.388 -11.117 -11.876 -12.665 -13.484 -14.336 -15.221 -16.139 -17.093 -18.084 -19.112 -20.182 -21.293 -22.449 -23.652 -24.905 -26.210 -27.573 -28.997 -30.489 -32.054 -33.701 -35.438 -37.276 -39.227 -41.302 -43.512 -45.852 -48.292 -50.727 -52.930 -54.560 -55.364 -55.378 -54.817 -53.855 -52.587 -51.087 -49.443 -47.742 -46.050 -44.408 -42.836 -41.344 -39.931 -38.595 -37.331 -36.134 -35.000 -33.924 -32.903 -31.934 -31.013 -30.138 -29.306 -28.516 -27.766 -27.054 -26.379 -25.741 -25.137 -24.567 -24.030 -23.525 -23.052 -22.610 -22.198 -21.816 -21.464 -21.140 -20.845 -20.577 -20.338 -20.125 -19.940 -19.781 -19.649 -19.544 -19.464 -19.411 -19.384 -19.382 -19.406 -19.454 -19.527 -19.626 -19.750 -19.901 -20.077 -20.280 -20.509 -20.764 -21.046 -21.355 -21.691 -22.054 -22.445 -22.863 -23.310 -23.786 -24.291 -24.826 -25.391 -25.987 -26.614 -27.272 -27.964 -28.688 -29.447 -30.239 -31.067 -31.931 -32.831 -33.769 -34.744 -35.757 -36.808 -37.898 -39.026 -40.192 -41.394 -42.631 -43.901 -45.199 -46.521 -47.861 -49.209 -50.556 -51.903 -53.249 -54.596 -55.943 -57.290 0 1 1.0 1 N4 HV 30.06 34.35 0.05 -4.800e+10 1.674e+10 -4.945e+10 1.573e+10 -5.075e+10 1.469e+10 -5.192e+10 1.362e+10 -5.293e+10 1.252e+10 -5.379e+10 1.140e+10 -5.448e+10 1.027e+10 -5.500e+10 9.114e+09 -5.534e+10 7.953e+09 -5.550e+10 6.789e+09 -5.549e+10 5.626e+09 -5.529e+10 4.474e+09 -5.491e+10 3.338e+09 -5.435e+10 2.226e+09 -5.363e+10 1.148e+09 -5.272e+10 1.113e+08 -5.166e+10 -8.768e+08 -5.045e+10 -1.807e+09 -4.909e+10 -2.672e+09 -4.760e+10 -3.467e+09 -4.599e+10 -4.185e+09 -4.427e+10 -4.820e+09 -4.246e+10 -5.370e+09 -4.058e+10 -5.834e+09 -3.862e+10 -6.209e+09 -3.662e+10 -6.498e+09 -3.459e+10 -6.701e+09 -3.254e+10 -6.823e+09 -3.048e+10 -6.867e+09 -2.843e+10 -6.841e+09 -2.641e+10 -6.749e+09 -2.441e+10 -6.600e+09 -2.247e+10 -6.401e+09 -2.058e+10 -6.161e+09 -1.875e+10 -5.886e+09 -1.700e+10 -5.586e+09 -1.532e+10 -5.267e+09 -1.373e+10 -4.937e+09 -1.222e+10 -4.600e+09 -1.081e+10 -4.264e+09 -9.491e+09 -3.932e+09 -8.265e+09 -3.609e+09 -7.135e+09 -3.296e+09 -6.099e+09 -2.996e+09 -5.156e+09 -2.712e+09 -4.306e+09 -2.443e+09 -3.545e+09 -2.190e+09 -2.872e+09 -1.953e+09 -2.284e+09 -1.734e+09 -1.776e+09 -1.531e+09 -1.343e+09 -1.346e+09 -9.817e+08 -1.178e+09 -6.846e+08 -1.030e+09 -4.442e+08 -9.009e+08 -2.516e+08 -7.936e+08 -9.623e+07 -7.082e+08 3.392e+07 -6.441e+08 1.504e+08 -5.987e+08 2.637e+08 -5.674e+08 3.811e+08 -5.441e+08 5.064e+08 -5.224e+08 6.406e+08 -4.965e+08 7.829e+08 -4.618e+08 9.306e+08 -4.149e+08 1.082e+09 -3.534e+08 1.233e+09 -2.754e+08 1.383e+09 -1.802e+08 1.531e+09 -6.677e+07 1.674e+09 6.574e+07 1.812e+09 2.174e+08 1.947e+09 3.890e+08 2.077e+09 5.817e+08 2.204e+09 7.963e+08 2.328e+09 1.034e+09 2.451e+09 1.298e+09 2.573e+09 1.589e+09 2.696e+09 1.910e+09 2.820e+09 2.263e+09 2.947e+09 2.651e+09 3.077e+09 3.077e+09 3.211e+09 3.545e+09 3.352e+09 4.058e+09 3.499e+09 4.619e+09 3.656e+09 5.234e+09 3.822e+09 5.906e+09 4.001e+09 6.640e+09 4.195e+09 7.443e+09 4.404e+09 8.318e+09 4.631e+09 9.272e+09 4.879e+09 1.031e+10 5.148e+09 1.144e+10 5.442e+09 1.267e+10 5.761e+09 1.400e+10 6.107e+09 1.543e+10 6.481e+09 1.698e+10 6.885e+09 1.863e+10 7.318e+09 2.039e+10 7.783e+09 2.227e+10 8.278e+09 2.424e+10 8.804e+09 2.632e+10 9.359e+09 2.848e+10 9.944e+09 3.072e+10 1.056e+10 3.302e+10 1.120e+10 3.536e+10 1.186e+10 3.773e+10 1.255e+10 4.009e+10 1.326e+10 4.242e+10 1.399e+10 4.470e+10 1.473e+10 4.690e+10 1.549e+10 4.899e+10 1.625e+10 5.095e+10 1.702e+10 5.275e+10 1.779e+10 5.437e+10 1.855e+10 5.580e+10 1.931e+10 5.701e+10 2.004e+10 5.800e+10 2.075e+10 5.876e+10 2.142e+10 5.928e+10 2.206e+10 5.956e+10 2.265e+10 5.961e+10 2.318e+10 5.943e+10 2.364e+10 5.904e+10 2.403e+10 5.844e+10 2.434e+10 5.764e+10 2.457e+10 5.667e+10 2.469e+10 5.554e+10 2.472e+10 5.426e+10 2.464e+10 5.286e+10 2.445e+10 5.134e+10 2.415e+10 4.972e+10 2.374e+10 4.802e+10 2.322e+10 4.624e+10 2.259e+10 4.441e+10 2.187e+10 4.254e+10 2.104e+10 4.063e+10 2.013e+10 3.869e+10 1.914e+10 3.674e+10 1.809e+10 3.478e+10 1.698e+10 3.282e+10 1.584e+10 3.087e+10 1.467e+10 2.895e+10 1.349e+10 2.705e+10 1.232e+10 2.519e+10 1.116e+10 2.337e+10 1.003e+10 2.161e+10 8.943e+09 1.990e+10 7.904e+09 1.826e+10 6.925e+09 1.669e+10 6.012e+09 1.521e+10 5.169e+09 1.381e+10 4.400e+09 1.250e+10 3.708e+09 1.128e+10 3.089e+09 1.016e+10 2.544e+09 9.133e+09 2.069e+09 8.206e+09 1.660e+09 7.374e+09 1.312e+09 6.634e+09 1.019e+09 5.983e+09 7.767e+08 5.417e+09 5.783e+08 4.930e+09 4.190e+08 4.517e+09 2.936e+08 4.172e+09 1.980e+08 3.890e+09 1.284e+08 3.664e+09 8.201e+07 3.491e+09 5.660e+07 3.364e+09 5.082e+07 3.281e+09 6.401e+07 3.236e+09 9.618e+07 3.227e+09 1.479e+08 3.251e+09 2.206e+08 3.305e+09 3.158e+08 3.387e+09 4.359e+08 3.493e+09 5.835e+08 3.622e+09 7.618e+08 3.770e+09 9.741e+08 3.937e+09 1.225e+09 4.118e+09 1.517e+09 4.312e+09 1.857e+09 4.517e+09 2.248e+09 4.729e+09 2.697e+09 4.947e+09 3.208e+09 5.167e+09 3.789e+09 5.388e+09 4.446e+09 5.606e+09 5.182e+09 5.819e+09 6.004e+09 6.024e+09 6.915e+09 6.215e+09 7.916e+09 6.388e+09 9.009e+09 6.539e+09 1.019e+10 6.662e+09 1.144e+10 6.752e+09 1.277e+10 6.802e+09 1.415e+10 6.808e+09 1.555e+10 6.766e+09 1.696e+10 6.672e+09 1.835e+10 6.521e+09 1.968e+10 6.313e+09 2.092e+10 6.046e+09 2.204e+10 5.719e+09 2.299e+10 5.334e+09 2.374e+10 4.892e+09 2.426e+10 4.396e+09 2.453e+10 3.850e+09 2.452e+10 3.259e+09 2.421e+10 2.629e+09 2.361e+10 1.968e+09 2.271e+10 1.286e+09 2.152e+10 5.934e+08 2.008e+10 -9.642e+07 1.842e+10 -7.697e+08 1.657e+10 -1.411e+09 1.460e+10 -2.003e+09 1.256e+10 -2.532e+09 1.053e+10 -2.987e+09 8.571e+09 -3.365e+09 6.754e+09 -3.676e+09 5.134e+09 -3.955e+09 3.735e+09 -4.271e+09 2.522e+09 -4.727e+09 1.384e+09 -5.447e+09 1.473e+08 -6.537e+09 -1.384e+09 -8.064e+09 -3.382e+09 -1.005e+10 -5.974e+09 -1.250e+10 -9.247e+09 -1.540e+10 -1.325e+10 -1.873e+10 -1.801e+10 -2.247e+10 -2.351e+10 -2.659e+10 -2.974e+10 -3.107e+10 -3.665e+10 -3.587e+10 -4.416e+10 -4.096e+10 -5.220e+10 -4.630e+10 -6.064e+10 -5.185e+10 -6.937e+10 -5.758e+10 -7.824e+10 -6.344e+10 -8.709e+10 -6.940e+10 -9.574e+10 -7.545e+10 -1.040e+11 -8.154e+10 -1.117e+11 -8.766e+10 -1.186e+11 -9.381e+10 -1.246e+11 -9.999e+10 -1.295e+11 -1.062e+11 -1.330e+11 -1.124e+11 -1.351e+11 -1.188e+11 -1.356e+11 -1.252e+11 -1.345e+11 -1.319e+11 -1.318e+11 -1.389e+11 -1.273e+11 -1.463e+11 -1.211e+11 -1.543e+11 -1.134e+11 -1.633e+11 -1.040e+11 -1.735e+11 -9.303e+10 -1.856e+11 -8.030e+10 -2.001e+11 -6.552e+10 -2.180e+11 -4.814e+10 -2.401e+11 -2.731e+10 -2.678e+11 -1.832e+09 -3.024e+11 2.988e+10 -3.453e+11 6.970e+10 -3.983e+11 1.198e+11 -4.630e+11 1.829e+11 -5.414e+11 2.615e+11 -6.356e+11 3.587e+11 -7.477e+11 4.776e+11 -8.804e+11 6.215e+11 -1.036e+12 7.939e+11 -1.218e+12 9.984e+11 -1.429e+12 1.239e+12 -1.673e+12 1.518e+12 -1.954e+12 1.841e+12 -2.276e+12 2.212e+12 -2.643e+12 2.633e+12 -3.061e+12 3.110e+12 -3.534e+12 3.645e+12 -4.069e+12 4.243e+12 -4.671e+12 4.907e+12 -5.347e+12 5.640e+12 -6.103e+12 6.445e+12 -6.947e+12 7.327e+12 -7.886e+12 8.285e+12 -8.928e+12 9.323e+12 -1.008e+13 1.044e+13 -1.135e+13 1.164e+13 -1.275e+13 1.293e+13 -1.428e+13 1.430e+13 -1.596e+13 1.575e+13 -1.779e+13 1.728e+13 -1.978e+13 1.889e+13 -2.194e+13 2.058e+13 -2.428e+13 2.234e+13 -2.680e+13 2.417e+13 -2.952e+13 2.606e+13 -3.243e+13 2.801e+13 -3.555e+13 3.002e+13 -3.889e+13 3.206e+13 -4.243e+13 3.414e+13 -4.620e+13 3.625e+13 -5.019e+13 3.837e+13 -5.441e+13 4.049e+13 -5.886e+13 4.261e+13 -6.354e+13 4.515e+13 -6.845e+13 4.753e+13 -7.364e+13 4.962e+13 -7.903e+13 5.165e+13 -8.464e+13 5.361e+13 -9.047e+13 5.548e+13 -9.653e+13 5.726e+13 -1.028e+14 5.892e+13 -1.093e+14 6.045e+13 -1.160e+14 6.183e+13 -1.229e+14 6.306e+13 -1.299e+14 6.411e+13 -1.372e+14 6.497e+13 -1.446e+14 6.562e+13 -1.522e+14 6.605e+13 -1.599e+14 6.624e+13 -1.677e+14 6.619e+13 -1.757e+14 6.587e+13 -1.838e+14 6.528e+13 -1.920e+14 6.440e+13 -2.002e+14 6.322e+13 -2.086e+14 6.173e+13 -2.169e+14 5.993e+13 -2.253e+14 5.779e+13 -2.337e+14 5.532e+13 -2.421e+14 5.252e+13 -2.504e+14 4.936e+13 -2.587e+14 4.586e+13 -2.669e+14 4.201e+13 -2.750e+14 3.780e+13 -2.830e+14 3.325e+13 -2.909e+14 2.835e+13 -2.985e+14 2.311e+13 -3.060e+14 1.753e+13 -3.133e+14 1.162e+13 -3.203e+14 5.398e+12 -3.271e+14 -1.130e+12 -3.336e+14 -7.953e+12 -3.398e+14 -1.506e+13 -3.456e+14 -2.242e+13 -3.511e+14 -3.004e+13 -3.563e+14 -3.790e+13 -3.611e+14 -4.596e+13 -3.656e+14 -5.423e+13 -3.696e+14 -6.266e+13 -3.733e+14 -7.123e+13 -3.765e+14 -7.993e+13 -3.792e+14 -8.873e+13 -3.816e+14 -9.759e+13 -3.834e+14 -1.065e+14 -3.848e+14 -1.155e+14 -3.858e+14 -1.244e+14 -3.863e+14 -1.333e+14 -3.864e+14 -1.422e+14 -3.860e+14 -1.510e+14 -3.851e+14 -1.597e+14 -3.838e+14 -1.683e+14 -3.821e+14 -1.767e+14 -3.800e+14 -1.850e+14 -3.774e+14 -1.930e+14 -3.744e+14 -2.009e+14 -3.711e+14 -2.085e+14 -3.673e+14 -2.159e+14 -3.632e+14 -2.230e+14 -3.587e+14 -2.298e+14 -3.539e+14 -2.363e+14 -3.487e+14 -2.424e+14 -3.432e+14 -2.482e+14 -3.374e+14 -2.537e+14 -3.314e+14 -2.587e+14 -3.250e+14 -2.634e+14 -3.184e+14 -2.676e+14 -3.115e+14 -2.714e+14 -3.044e+14 -2.747e+14 -2.971e+14 -2.776e+14 -2.896e+14 -2.800e+14 -2.819e+14 -2.820e+14 -2.741e+14 -2.834e+14 -2.661e+14 -2.844e+14 -2.580e+14 -2.848e+14 -2.497e+14 -2.848e+14 -2.414e+14 -2.843e+14 -2.332e+14 -2.832e+14 -2.248e+14 -2.817e+14 -2.165e+14 -2.797e+14 -2.081e+14 -2.773e+14 -1.998e+14 -2.743e+14 -1.914e+14 -2.709e+14 -1.832e+14 -2.671e+14 -1.749e+14 -2.628e+14 -1.668e+14 -2.582e+14 -1.588e+14 -2.531e+14 -1.509e+14 -2.477e+14 -1.432e+14 -2.420e+14 -1.356e+14 -2.360e+14 -1.282e+14 -2.297e+14 -1.210e+14 -2.231e+14 -1.140e+14 -2.163e+14 -1.072e+14 -2.094e+14 -1.006e+14 -2.022e+14 -9.425e+13 -1.950e+14 -8.814e+13 -1.876e+14 -8.227e+13 -1.802e+14 -7.665e+13 -1.727e+14 -7.128e+13 -1.652e+14 -6.616e+13 -1.578e+14 -6.130e+13 -1.503e+14 -5.669e+13 -1.430e+14 -5.233e+13 -1.357e+14 -4.822e+13 -1.285e+14 -4.435e+13 -1.214e+14 -4.072e+13 -1.145e+14 -3.732e+13 -1.078e+14 -3.414e+13 -1.012e+14 -3.118e+13 -9.482e+13 -2.843e+13 -8.863e+13 -2.588e+13 -8.264e+13 -2.352e+13 -7.689e+13 -2.135e+13 -7.135e+13 -1.934e+13 -6.604e+13 -1.750e+13 -6.098e+13 -1.581e+13 -5.614e+13 -1.425e+13 -5.155e+13 -1.283e+13 -4.720e+13 -1.154e+13 -4.309e+13 -1.037e+13 -3.922e+13 -9.303e+12 -3.558e+13 -8.342e+12 -3.218e+13 -7.473e+12 -2.900e+13 -6.691e+12 -2.605e+13 -5.987e+12 -2.331e+13 -5.353e+12 -2.078e+13 -4.785e+12 -1.846e+13 -4.275e+12 -1.633e+13 -3.818e+12 -1.438e+13 -3.409e+12 -1.261e+13 -3.043e+12 -1.101e+13 -2.715e+12 -9.569e+12 -2.421e+12 -8.274e+12 -2.158e+12 -7.117e+12 -1.923e+12 -6.089e+12 -1.712e+12 -5.181e+12 -1.523e+12 -4.382e+12 -1.354e+12 -3.684e+12 -1.202e+12 -3.078e+12 -1.066e+12 -2.554e+12 -9.442e+11 -2.105e+12 -8.349e+11 -1.723e+12 -7.370e+11 -1.399e+12 -6.495e+11 -1.128e+12 -5.714e+11 -9.023e+11 -5.019e+11 -7.159e+11 -4.402e+11 -5.635e+11 -3.857e+11 -4.399e+11 -3.377e+11 -3.406e+11 -2.958e+11 -2.615e+11 -2.592e+11 -1.990e+11 -2.276e+11 -1.501e+11 -2.004e+11 -1.119e+11 -1.770e+11 -8.240e+10 -1.569e+11 -5.963e+10 -1.395e+11 -4.218e+10 -1.244e+11 -2.892e+10 -1.110e+11 -1.896e+10 -9.889e+10 -1.167e+10 -8.779e+10 -6.561e+09 -7.743e+10 -3.217e+09 -6.763e+10 -1.314e+09 -5.831e+10 -5.521e+08 -4.946e+10 -6.487e+08 -4.112e+10 -1.336e+09 -3.336e+10 -2.366e+09 -2.633e+10 -3.527e+09 -2.014e+10 -4.686e+09 -1.494e+10 -5.857e+09 -1.082e+10 -7.277e+09 -7.746e+09 -9.408e+09 -5.433e+09 -1.277e+10 -3.337e+09 -1.774e+10 -8.448e+08 -2.451e+10 2.511e+09 -3.316e+10 6.999e+09 -4.368e+10 1.274e+10 -5.604e+10 1.976e+10 -7.015e+10 2.800e+10 -8.590e+10 3.737e+10 -1.031e+11 4.774e+10 -1.216e+11 5.895e+10 -1.411e+11 7.083e+10 -1.615e+11 8.317e+10 -1.823e+11 9.578e+10 -2.034e+11 1.084e+11 -2.244e+11 1.210e+11 -2.451e+11 1.331e+11 -2.651e+11 1.447e+11 -2.841e+11 1.557e+11 -3.020e+11 1.657e+11 -3.184e+11 1.747e+11 -3.332e+11 1.827e+11 -3.461e+11 1.894e+11 -3.571e+11 1.949e+11 -3.661e+11 1.991e+11 -3.728e+11 2.020e+11 -3.774e+11 2.036e+11 -3.798e+11 2.040e+11 -3.800e+11 2.030e+11 -3.781e+11 2.010e+11 -3.742e+11 1.978e+11 -3.683e+11 1.937e+11 -3.606e+11 1.886e+11 -3.513e+11 1.827e+11 -3.404e+11 1.761e+11 -3.283e+11 1.689e+11 -3.150e+11 1.611e+11 -3.007e+11 1.530e+11 -2.857e+11 1.445e+11 -2.701e+11 1.358e+11 -2.540e+11 1.270e+11 -2.377e+11 1.182e+11 -2.213e+11 1.094e+11 -2.050e+11 1.007e+11 -1.889e+11 9.213e+10 -1.731e+11 8.383e+10 -1.577e+11 7.582e+10 -1.428e+11 6.816e+10 -1.286e+11 6.088e+10 -1.151e+11 5.401e+10 -1.023e+11 4.759e+10 -9.032e+10 4.163e+10 -7.918e+10 3.616e+10 -6.889e+10 3.117e+10 -5.945e+10 2.666e+10 -5.088e+10 2.263e+10 -4.316e+10 1.906e+10 -3.626e+10 1.594e+10 -3.017e+10 1.325e+10 -2.485e+10 1.095e+10 -2.023e+10 8.999e+09 -1.628e+10 7.381e+09 -1.295e+10 6.052e+09 -1.017e+10 4.975e+09 -7.891e+09 4.119e+09 -6.059e+09 3.450e+09 -4.611e+09 2.941e+09 -3.494e+09 2.570e+09 -2.653e+09 2.319e+09 -2.036e+09 2.179e+09 -1.597e+09 2.147e+09 -1.292e+09 2.224e+09 -1.085e+09 2.412e+09 -9.537e+08 2.713e+09 -8.860e+08 3.133e+09 -8.806e+08 3.675e+09 -9.443e+08 4.346e+09 -1.090e+09 5.152e+09 -1.334e+09 6.102e+09 -1.694e+09 7.203e+09 -2.193e+09 8.461e+09 -2.852e+09 9.882e+09 -3.691e+09 1.147e+10 -4.733e+09 1.322e+10 -5.999e+09 1.514e+10 -7.504e+09 1.721e+10 -9.265e+09 1.942e+10 -1.129e+10 2.177e+10 -1.360e+10 2.423e+10 -1.618e+10 2.677e+10 -1.904e+10 2.939e+10 -2.217e+10 3.204e+10 -2.556e+10 3.470e+10 -2.919e+10 3.735e+10 -3.305e+10 3.994e+10 -3.710e+10 4.244e+10 -4.133e+10 4.484e+10 -4.570e+10 4.709e+10 -5.016e+10 4.916e+10 -5.470e+10 5.103e+10 -5.928e+10 5.267e+10 -6.385e+10 5.406e+10 -6.839e+10 5.517e+10 -7.285e+10 5.599e+10 -7.720e+10 5.650e+10 -8.141e+10 5.669e+10 -8.545e+10 5.656e+10 -8.929e+10 5.608e+10 -9.291e+10 5.526e+10 -9.629e+10 5.409e+10 -9.942e+10 5.258e+10 -1.023e+11 5.073e+10 -1.048e+11 4.854e+10 -1.071e+11 4.604e+10 -1.090e+11 4.323e+10 -1.107e+11 4.014e+10 -1.120e+11 3.678e+10 -1.131e+11 3.318e+10 -1.138e+11 2.936e+10 -1.143e+11 2.534e+10 -1.145e+11 2.115e+10 -1.143e+11 1.681e+10 -1.140e+11 1.236e+10 -1.133e+11 7.812e+09 -1.124e+11 3.197e+09 0.005 -59.740 -57.948 -56.156 -54.365 -52.573 -50.782 -48.998 -47.333 -45.765 -44.283 -42.876 -41.537 -40.261 -39.043 -37.880 -36.768 -35.707 -34.692 -33.723 -32.798 -31.914 -31.072 -30.269 -29.504 -28.776 -28.085 -27.428 -26.807 -26.218 -25.663 -25.139 -24.647 -24.186 -23.756 -23.355 -22.984 -22.641 -22.328 -22.043 -21.785 -21.556 -21.354 -21.180 -21.034 -20.915 -20.823 -20.758 -20.721 -20.710 -20.727 -20.772 -20.842 -20.939 -21.065 -21.218 -21.401 -21.612 -21.853 -22.124 -22.426 -22.758 -23.123 -23.520 -23.951 -24.416 -24.917 -25.454 -26.031 -26.647 -27.306 -28.009 -28.759 -29.560 -30.415 -31.329 -32.309 -33.362 -34.496 -35.725 -37.065 -38.538 -40.175 -42.019 -44.143 -46.635 -49.601 -52.944 -55.471 -54.998 -52.672 -50.508 -48.850 -47.620 -46.721 -46.089 -45.683 -45.482 -45.477 -45.665 -46.041 -46.570 -47.127 -47.408 -46.958 -45.550 -43.447 -41.094 -38.770 -36.580 -34.544 -32.652 -30.889 -29.239 -27.687 -26.223 -24.836 -23.519 -22.264 -21.068 -19.925 -18.832 -17.785 -16.782 -15.821 -14.899 -14.014 -13.165 -12.349 -11.567 -10.817 -10.098 -9.408 -8.747 -8.115 -7.510 -6.932 -6.381 -5.855 -5.355 -4.880 -4.429 -4.003 -3.601 -3.222 -2.867 -2.535 -2.227 -1.941 -1.679 -1.439 -1.222 -1.027 -0.854 -0.703 -0.575 -0.471 -0.389 -0.332 -0.298 -0.288 -0.303 -0.344 -0.410 -0.502 -0.620 -0.766 -0.941 -1.144 -1.376 -1.640 -1.936 -2.266 -2.631 -3.032 -3.473 -3.954 -4.479 -5.050 -5.672 -6.347 -7.080 -7.877 -8.743 -9.688 -10.718 -11.847 -13.086 -14.455 -15.976 -17.677 -19.600 -21.800 -24.362 -27.415 -31.180 -36.089 -43.177 -55.878 -57.402 -59.858 -47.308 -38.694 -33.078 -28.901 -25.575 -22.817 -20.468 -18.427 -16.629 -15.028 -13.589 -12.289 -11.107 -10.029 -9.041 -8.135 -7.301 -6.534 -5.827 -5.175 -4.575 -4.023 -3.515 -3.050 -2.624 -2.236 -1.884 -1.566 -1.280 -1.026 -0.802 -0.608 -0.441 -0.303 -0.191 -0.105 -0.045 -0.010 0.000 -0.014 -0.052 -0.114 -0.200 -0.308 -0.440 -0.594 -0.771 -0.970 -1.193 -1.437 -1.702 -1.990 -2.300 -2.634 -2.990 -3.369 -3.772 -4.199 -4.650 -5.125 -5.624 -6.149 -6.698 -7.274 -7.876 -8.505 -9.161 -9.845 -10.558 -11.301 -12.074 -12.878 -13.714 -14.583 -15.486 -16.425 -17.400 -18.414 -19.468 -20.564 -21.705 -22.892 -24.128 -25.416 -26.759 -28.161 -29.628 -31.164 -32.776 -34.471 -36.259 -38.149 -40.153 -42.282 -44.545 -46.940 -49.433 -51.919 -54.170 -55.846 -56.691 -56.742 -56.212 -55.275 -54.026 -52.537 -50.899 -49.196 -47.495 -45.838 -44.247 -42.729 -41.286 -39.916 -38.614 -37.377 -36.200 -35.080 -34.013 -32.997 -32.029 -31.106 -30.227 -29.389 -28.592 -27.833 -27.112 -26.428 -25.779 -25.164 -24.584 -24.036 -23.520 -23.036 -22.582 -22.159 -21.766 -21.402 -21.066 -20.758 -20.479 -20.227 -20.002 -19.803 -19.631 -19.485 -19.365 -19.271 -19.202 -19.158 -19.139 -19.143 -19.172 -19.226 -19.304 -19.407 -19.535 -19.687 -19.865 -20.067 -20.294 -20.547 -20.824 -21.126 -21.454 -21.807 -22.185 -22.590 -23.021 -23.478 -23.961 -24.472 -25.010 -25.575 -26.168 -26.789 -27.439 -28.117 -28.825 -29.561 -30.328 -31.124 -31.950 -32.806 -33.692 -34.608 -35.552 -36.525 -37.524 -38.549 -39.596 -40.663 -41.746 -42.838 -43.933 -45.021 -46.109 -47.198 -48.286 -49.374 -50.462 0 1 1.0 1 N4 VV 30.06 34.35 0.05 -1.862e+08 4.806e+10 -1.643e+09 4.904e+10 -3.089e+09 4.988e+10 -4.520e+09 5.056e+10 -5.930e+09 5.109e+10 -7.311e+09 5.145e+10 -8.658e+09 5.165e+10 -9.965e+09 5.168e+10 -1.122e+10 5.155e+10 -1.243e+10 5.124e+10 -1.357e+10 5.078e+10 -1.464e+10 5.015e+10 -1.564e+10 4.937e+10 -1.656e+10 4.844e+10 -1.738e+10 4.737e+10 -1.811e+10 4.616e+10 -1.873e+10 4.483e+10 -1.925e+10 4.338e+10 -1.965e+10 4.184e+10 -1.994e+10 4.021e+10 -2.011e+10 3.850e+10 -2.017e+10 3.673e+10 -2.011e+10 3.492e+10 -1.994e+10 3.307e+10 -1.966e+10 3.120e+10 -1.927e+10 2.932e+10 -1.878e+10 2.744e+10 -1.820e+10 2.558e+10 -1.754e+10 2.375e+10 -1.681e+10 2.195e+10 -1.602e+10 2.020e+10 -1.518e+10 1.851e+10 -1.430e+10 1.687e+10 -1.340e+10 1.530e+10 -1.248e+10 1.381e+10 -1.155e+10 1.239e+10 -1.064e+10 1.104e+10 -9.737e+09 9.779e+09 -8.858e+09 8.598e+09 -8.011e+09 7.499e+09 -7.200e+09 6.482e+09 -6.430e+09 5.547e+09 -5.705e+09 4.694e+09 -5.027e+09 3.919e+09 -4.398e+09 3.223e+09 -3.819e+09 2.603e+09 -3.290e+09 2.056e+09 -2.811e+09 1.580e+09 -2.381e+09 1.172e+09 -1.998e+09 8.271e+08 -1.662e+09 5.414e+08 -1.371e+09 3.096e+08 -1.122e+09 1.252e+08 -9.137e+08 -1.912e+07 -7.433e+08 -1.317e+08 -6.065e+08 -2.222e+08 -4.976e+08 -3.001e+08 -4.095e+08 -3.742e+08 -3.337e+08 -4.508e+08 -2.621e+08 -5.335e+08 -1.878e+08 -6.225e+08 -1.057e+08 -7.163e+08 -1.238e+07 -8.121e+08 9.400e+07 -9.067e+08 2.145e+08 -9.971e+08 3.497e+08 -1.081e+09 4.994e+08 -1.156e+09 6.638e+08 -1.220e+09 8.437e+08 -1.273e+09 1.039e+09 -1.314e+09 1.250e+09 -1.341e+09 1.478e+09 -1.356e+09 1.724e+09 -1.356e+09 1.990e+09 -1.342e+09 2.277e+09 -1.314e+09 2.587e+09 -1.270e+09 2.922e+09 -1.210e+09 3.284e+09 -1.133e+09 3.675e+09 -1.038e+09 4.098e+09 -9.252e+08 4.557e+09 -7.927e+08 5.052e+09 -6.400e+08 5.589e+09 -4.658e+08 6.171e+09 -2.689e+08 6.803e+09 -4.837e+07 7.488e+09 1.973e+08 8.233e+09 4.701e+08 9.041e+09 7.712e+08 9.919e+09 1.103e+09 1.087e+10 1.467e+09 1.191e+10 1.865e+09 1.303e+10 2.299e+09 1.424e+10 2.773e+09 1.555e+10 3.285e+09 1.696e+10 3.839e+09 1.846e+10 4.435e+09 2.007e+10 5.072e+09 2.177e+10 5.749e+09 2.357e+10 6.464e+09 2.545e+10 7.213e+09 2.742e+10 7.992e+09 2.946e+10 8.796e+09 3.155e+10 9.615e+09 3.369e+10 1.044e+10 3.584e+10 1.126e+10 3.801e+10 1.207e+10 4.015e+10 1.285e+10 4.225e+10 1.359e+10 4.430e+10 1.427e+10 4.625e+10 1.489e+10 4.810e+10 1.543e+10 4.983e+10 1.589e+10 5.140e+10 1.625e+10 5.281e+10 1.651e+10 5.405e+10 1.667e+10 5.510e+10 1.672e+10 5.594e+10 1.666e+10 5.659e+10 1.650e+10 5.702e+10 1.625e+10 5.725e+10 1.591e+10 5.727e+10 1.550e+10 5.709e+10 1.502e+10 5.672e+10 1.448e+10 5.616e+10 1.391e+10 5.543e+10 1.331e+10 5.452e+10 1.269e+10 5.346e+10 1.208e+10 5.226e+10 1.147e+10 5.092e+10 1.088e+10 4.945e+10 1.032e+10 4.787e+10 9.788e+09 4.619e+10 9.298e+09 4.442e+10 8.850e+09 4.258e+10 8.444e+09 4.066e+10 8.080e+09 3.869e+10 7.757e+09 3.667e+10 7.470e+09 3.463e+10 7.216e+09 3.256e+10 6.989e+09 3.049e+10 6.784e+09 2.843e+10 6.595e+09 2.639e+10 6.416e+09 2.439e+10 6.243e+09 2.243e+10 6.070e+09 2.053e+10 5.894e+09 1.870e+10 5.712e+09 1.695e+10 5.521e+09 1.530e+10 5.322e+09 1.374e+10 5.114e+09 1.228e+10 4.898e+09 1.093e+10 4.676e+09 9.700e+09 4.450e+09 8.578e+09 4.224e+09 7.566e+09 4.000e+09 6.665e+09 3.783e+09 5.868e+09 3.573e+09 5.172e+09 3.375e+09 4.570e+09 3.192e+09 4.056e+09 3.024e+09 3.621e+09 2.873e+09 3.261e+09 2.740e+09 2.967e+09 2.625e+09 2.733e+09 2.528e+09 2.555e+09 2.449e+09 2.425e+09 2.386e+09 2.341e+09 2.338e+09 2.300e+09 2.303e+09 2.297e+09 2.280e+09 2.333e+09 2.266e+09 2.405e+09 2.260e+09 2.513e+09 2.258e+09 2.656e+09 2.257e+09 2.835e+09 2.255e+09 3.050e+09 2.247e+09 3.302e+09 2.230e+09 3.591e+09 2.199e+09 3.918e+09 2.151e+09 4.285e+09 2.079e+09 4.693e+09 1.980e+09 5.144e+09 1.847e+09 5.640e+09 1.676e+09 6.183e+09 1.459e+09 6.776e+09 1.193e+09 7.422e+09 8.699e+08 8.121e+09 4.850e+08 8.876e+09 3.174e+07 9.687e+09 -4.949e+08 1.055e+10 -1.098e+09 1.146e+10 -1.782e+09 1.242e+10 -2.547e+09 1.341e+10 -3.390e+09 1.442e+10 -4.307e+09 1.544e+10 -5.288e+09 1.644e+10 -6.323e+09 1.742e+10 -7.395e+09 1.833e+10 -8.486e+09 1.917e+10 -9.573e+09 1.990e+10 -1.063e+10 2.050e+10 -1.164e+10 2.094e+10 -1.258e+10 2.119e+10 -1.340e+10 2.124e+10 -1.411e+10 2.106e+10 -1.466e+10 2.065e+10 -1.505e+10 1.999e+10 -1.526e+10 1.908e+10 -1.529e+10 1.795e+10 -1.512e+10 1.659e+10 -1.477e+10 1.504e+10 -1.424e+10 1.333e+10 -1.354e+10 1.151e+10 -1.270e+10 9.623e+09 -1.174e+10 7.729e+09 -1.070e+10 5.887e+09 -9.608e+09 4.154e+09 -8.517e+09 2.572e+09 -7.480e+09 1.159e+09 -6.562e+09 -1.128e+08 -5.829e+09 -1.342e+09 -5.336e+09 -2.694e+09 -5.099e+09 -4.373e+09 -5.081e+09 -6.574e+09 -5.199e+09 -9.440e+09 -5.356e+09 -1.306e+10 -5.468e+09 -1.750e+10 -5.470e+09 -2.277e+10 -5.319e+09 -2.887e+10 -4.989e+09 -3.578e+10 -4.468e+09 -4.344e+10 -3.755e+09 -5.180e+10 -2.865e+09 -6.077e+10 -1.821e+09 -7.025e+10 -6.589e+08 -8.013e+10 5.713e+08 -9.026e+10 1.811e+09 -1.005e+11 2.985e+09 -1.107e+11 4.010e+09 -1.208e+11 4.792e+09 -1.304e+11 5.227e+09 -1.396e+11 5.203e+09 -1.481e+11 4.607e+09 -1.557e+11 3.321e+09 -1.624e+11 1.233e+09 -1.681e+11 -1.770e+09 -1.726e+11 -5.788e+09 -1.759e+11 -1.091e+10 -1.780e+11 -1.724e+10 -1.789e+11 -2.486e+10 -1.788e+11 -3.386e+10 -1.779e+11 -4.439e+10 -1.763e+11 -5.664e+10 -1.744e+11 -7.092e+10 -1.724e+11 -8.772e+10 -1.706e+11 -1.077e+11 -1.694e+11 -1.319e+11 -1.686e+11 -1.617e+11 -1.685e+11 -1.986e+11 -1.685e+11 -2.448e+11 -1.681e+11 -3.027e+11 -1.667e+11 -3.748e+11 -1.633e+11 -4.642e+11 -1.567e+11 -5.743e+11 -1.459e+11 -7.085e+11 -1.297e+11 -8.709e+11 -1.066e+11 -1.066e+12 -7.540e+10 -1.297e+12 -3.491e+10 -1.570e+12 1.619e+10 -1.890e+12 7.897e+10 -2.263e+12 1.545e+11 -2.693e+12 2.438e+11 -3.189e+12 3.475e+11 -3.756e+12 4.661e+11 -4.402e+12 6.003e+11 -5.133e+12 7.499e+11 -5.958e+12 9.146e+11 -6.884e+12 1.094e+12 -7.921e+12 1.288e+12 -9.074e+12 1.493e+12 -1.035e+13 1.710e+12 -1.177e+13 1.935e+12 -1.333e+13 2.167e+12 -1.504e+13 2.401e+12 -1.692e+13 2.635e+12 -1.897e+13 2.864e+12 -2.119e+13 3.083e+12 -2.360e+13 3.288e+12 -2.621e+13 3.473e+12 -2.902e+13 3.632e+12 -3.204e+13 3.759e+12 -3.527e+13 3.845e+12 -3.872e+13 3.884e+12 -4.241e+13 3.868e+12 -4.631e+13 3.789e+12 -5.046e+13 3.638e+12 -5.484e+13 3.405e+12 -5.945e+13 3.083e+12 -6.430e+13 2.660e+12 -6.939e+13 2.128e+12 -7.470e+13 1.477e+12 -8.025e+13 6.946e+11 -8.603e+13 -9.919e+11 -9.195e+13 -8.301e+11 -9.863e+13 -2.030e+12 -1.051e+14 -3.399e+12 -1.117e+14 -4.949e+12 -1.185e+14 -6.692e+12 -1.255e+14 -8.635e+12 -1.327e+14 -1.079e+13 -1.400e+14 -1.317e+13 -1.475e+14 -1.578e+13 -1.551e+14 -1.864e+13 -1.628e+14 -2.175e+13 -1.706e+14 -2.512e+13 -1.785e+14 -2.876e+13 -1.865e+14 -3.268e+13 -1.945e+14 -3.689e+13 -2.026e+14 -4.139e+13 -2.106e+14 -4.619e+13 -2.187e+14 -5.129e+13 -2.267e+14 -5.671e+13 -2.347e+14 -6.244e+13 -2.426e+14 -6.847e+13 -2.504e+14 -7.482e+13 -2.581e+14 -8.149e+13 -2.657e+14 -8.847e+13 -2.730e+14 -9.575e+13 -2.803e+14 -1.033e+14 -2.873e+14 -1.112e+14 -2.940e+14 -1.194e+14 -3.005e+14 -1.278e+14 -3.068e+14 -1.365e+14 -3.127e+14 -1.454e+14 -3.183e+14 -1.545e+14 -3.235e+14 -1.639e+14 -3.284e+14 -1.735e+14 -3.329e+14 -1.832e+14 -3.370e+14 -1.930e+14 -3.406e+14 -2.030e+14 -3.439e+14 -2.131e+14 -3.467e+14 -2.233e+14 -3.490e+14 -2.335e+14 -3.508e+14 -2.438e+14 -3.522e+14 -2.541e+14 -3.532e+14 -2.643e+14 -3.536e+14 -2.745e+14 -3.536e+14 -2.847e+14 -3.531e+14 -2.947e+14 -3.521e+14 -3.045e+14 -3.506e+14 -3.143e+14 -3.486e+14 -3.238e+14 -3.462e+14 -3.331e+14 -3.434e+14 -3.422e+14 -3.400e+14 -3.510e+14 -3.363e+14 -3.596e+14 -3.321e+14 -3.678e+14 -3.275e+14 -3.758e+14 -3.226e+14 -3.834e+14 -3.172e+14 -3.906e+14 -3.116e+14 -3.974e+14 -3.055e+14 -4.039e+14 -2.992e+14 -4.099e+14 -2.925e+14 -4.155e+14 -2.856e+14 -4.206e+14 -2.784e+14 -4.253e+14 -2.709e+14 -4.295e+14 -2.632e+14 -4.332e+14 -2.553e+14 -4.363e+14 -2.473e+14 -4.390e+14 -2.391e+14 -4.411e+14 -2.307e+14 -4.427e+14 -2.222e+14 -4.437e+14 -2.136e+14 -4.442e+14 -2.049e+14 -4.440e+14 -1.962e+14 -4.434e+14 -1.875e+14 -4.421e+14 -1.787e+14 -4.402e+14 -1.700e+14 -4.378e+14 -1.613e+14 -4.348e+14 -1.527e+14 -4.312e+14 -1.441e+14 -4.271e+14 -1.357e+14 -4.224e+14 -1.274e+14 -4.172e+14 -1.193e+14 -4.115e+14 -1.114e+14 -4.053e+14 -1.036e+14 -3.986e+14 -9.609e+13 -3.914e+14 -8.878e+13 -3.838e+14 -8.169e+13 -3.757e+14 -7.485e+13 -3.673e+14 -6.827e+13 -3.585e+14 -6.195e+13 -3.494e+14 -5.592e+13 -3.400e+14 -5.017e+13 -3.303e+14 -4.471e+13 -3.203e+14 -3.956e+13 -3.102e+14 -3.470e+13 -2.999e+14 -3.014e+13 -2.895e+14 -2.588e+13 -2.790e+14 -2.192e+13 -2.684e+14 -1.826e+13 -2.578e+14 -1.488e+13 -2.472e+14 -1.179e+13 -2.367e+14 -8.975e+12 -2.262e+14 -6.427e+12 -2.157e+14 -4.137e+12 -2.054e+14 -2.094e+12 -1.953e+14 -2.899e+11 -1.853e+14 1.290e+12 -1.755e+14 2.656e+12 -1.659e+14 3.821e+12 -1.565e+14 4.798e+12 -1.474e+14 5.599e+12 -1.385e+14 6.238e+12 -1.299e+14 6.727e+12 -1.216e+14 7.080e+12 -1.136e+14 7.308e+12 -1.058e+14 7.425e+12 -9.842e+13 7.443e+12 -9.131e+13 7.373e+12 -8.452e+13 7.227e+12 -7.804e+13 7.016e+12 -7.189e+13 6.754e+12 -6.604e+13 6.454e+12 -6.051e+13 6.120e+12 -5.529e+13 5.757e+12 -5.038e+13 5.372e+12 -4.577e+13 4.973e+12 -4.147e+13 4.568e+12 -3.745e+13 4.162e+12 -3.372e+13 3.760e+12 -3.026e+13 3.368e+12 -2.706e+13 2.989e+12 -2.411e+13 2.626e+12 -2.141e+13 2.284e+12 -1.894e+13 1.963e+12 -1.669e+13 1.665e+12 -1.465e+13 1.391e+12 -1.281e+13 1.142e+12 -1.115e+13 9.181e+11 -9.659e+12 7.185e+11 -8.331e+12 5.427e+11 -7.150e+12 3.899e+11 -6.107e+12 2.589e+11 -5.189e+12 1.481e+11 -4.386e+12 5.614e+10 -3.686e+12 -1.858e+10 -3.080e+12 -7.784e+10 -2.559e+12 -1.233e+11 -2.113e+12 -1.567e+11 -1.734e+12 -1.796e+11 -1.414e+12 -1.938e+11 -1.146e+12 -2.007e+11 -9.229e+11 -2.017e+11 -7.387e+11 -1.982e+11 -5.880e+11 -1.913e+11 -4.655e+11 -1.820e+11 -3.668e+11 -1.713e+11 -2.879e+11 -1.598e+11 -2.253e+11 -1.482e+11 -1.759e+11 -1.368e+11 -1.371e+11 -1.260e+11 -1.067e+11 -1.158e+11 -8.297e+10 -1.061e+11 -6.443e+10 -9.705e+10 -4.994e+10 -8.835e+10 -3.867e+10 -7.991e+10 -2.998e+10 -7.160e+10 -2.336e+10 -6.336e+10 -1.842e+10 -5.519e+10 -1.484e+10 -4.712e+10 -1.235e+10 -3.926e+10 -1.068e+10 -3.177e+10 -9.620e+09 -2.482e+10 -8.982e+09 -1.860e+10 -8.661e+09 -1.330e+10 -8.681e+09 -9.022e+09 -9.257e+09 -5.668e+09 -1.076e+10 -2.852e+09 -1.356e+10 9.000e+07 -1.790e+10 3.862e+09 -2.384e+10 8.980e+09 -3.139e+10 1.573e+10 -4.056e+10 2.424e+10 -5.131e+10 3.452e+10 -6.355e+10 4.648e+10 -7.723e+10 6.003e+10 -9.219e+10 7.496e+10 -1.083e+11 9.106e+10 -1.254e+11 1.081e+11 -1.432e+11 1.258e+11 -1.615e+11 1.438e+11 -1.801e+11 1.620e+11 -1.988e+11 1.799e+11 -2.172e+11 1.974e+11 -2.351e+11 2.141e+11 -2.523e+11 2.298e+11 -2.686e+11 2.442e+11 -2.837e+11 2.573e+11 -2.974e+11 2.688e+11 -3.096e+11 2.786e+11 -3.202e+11 2.867e+11 -3.290e+11 2.929e+11 -3.359e+11 2.972e+11 -3.409e+11 2.996e+11 -3.440e+11 3.002e+11 -3.452e+11 2.991e+11 -3.445e+11 2.963e+11 -3.420e+11 2.920e+11 -3.377e+11 2.862e+11 -3.317e+11 2.790e+11 -3.242e+11 2.707e+11 -3.153e+11 2.613e+11 -3.051e+11 2.511e+11 -2.937e+11 2.400e+11 -2.814e+11 2.283e+11 -2.683e+11 2.162e+11 -2.545e+11 2.037e+11 -2.403e+11 1.910e+11 -2.256e+11 1.781e+11 -2.108e+11 1.653e+11 -1.959e+11 1.526e+11 -1.811e+11 1.401e+11 -1.665e+11 1.279e+11 -1.522e+11 1.161e+11 -1.383e+11 1.048e+11 -1.249e+11 9.395e+10 -1.121e+11 8.370e+10 -9.990e+10 7.407e+10 -8.842e+10 6.508e+10 -7.770e+10 5.678e+10 -6.774e+10 4.916e+10 -5.857e+10 4.223e+10 -5.021e+10 3.599e+10 -4.265e+10 3.044e+10 -3.586e+10 2.552e+10 -2.984e+10 2.125e+10 -2.456e+10 1.756e+10 -1.997e+10 1.441e+10 -1.603e+10 1.176e+10 -1.269e+10 9.562e+09 -9.902e+09 7.758e+09 -7.612e+09 6.305e+09 -5.765e+09 5.155e+09 -4.302e+09 4.265e+09 -3.169e+09 3.599e+09 -2.310e+09 3.126e+09 -1.670e+09 2.824e+09 -1.197e+09 2.678e+09 -8.450e+08 2.678e+09 -5.734e+08 2.816e+09 -3.565e+08 3.089e+09 -1.803e+08 3.495e+09 -4.205e+07 4.036e+09 5.239e+07 4.718e+09 9.183e+07 5.547e+09 6.124e+07 6.533e+09 -5.697e+07 7.685e+09 -2.821e+08 9.011e+09 -6.348e+08 1.052e+10 -1.136e+09 1.222e+10 -1.808e+09 1.410e+10 -2.670e+09 1.618e+10 -3.744e+09 1.844e+10 -5.046e+09 2.088e+10 -6.594e+09 2.348e+10 -8.399e+09 2.623e+10 -1.047e+10 2.911e+10 -1.281e+10 3.210e+10 -1.543e+10 3.516e+10 -1.832e+10 3.828e+10 -2.146e+10 4.141e+10 -2.486e+10 4.453e+10 -2.849e+10 4.759e+10 -3.233e+10 5.058e+10 -3.636e+10 5.345e+10 -4.055e+10 5.616e+10 -4.486e+10 5.869e+10 -4.928e+10 6.100e+10 -5.376e+10 6.306e+10 -5.827e+10 6.484e+10 -6.278e+10 6.633e+10 -6.725e+10 6.749e+10 -7.164e+10 6.832e+10 -7.593e+10 6.879e+10 -8.009e+10 6.889e+10 -8.409e+10 6.861e+10 -8.790e+10 6.794e+10 -9.151e+10 6.688e+10 -9.488e+10 6.543e+10 -9.802e+10 6.359e+10 -1.009e+11 6.139e+10 -1.035e+11 5.883e+10 -1.058e+11 5.592e+10 -1.079e+11 5.270e+10 -1.097e+11 4.918e+10 -1.112e+11 4.537e+10 -1.124e+11 4.132e+10 -1.133e+11 3.705e+10 -1.139e+11 3.258e+10 -1.143e+11 2.794e+10 -1.145e+11 2.316e+10 -1.143e+11 1.827e+10 0.005 -58.503 -56.963 -55.423 -53.883 -52.343 -50.803 -49.264 -47.731 -46.229 -44.771 -43.362 -42.007 -40.705 -39.456 -38.260 -37.114 -36.017 -34.968 -33.965 -33.006 -32.091 -31.217 -30.384 -29.590 -28.834 -28.115 -27.433 -26.785 -26.171 -25.591 -25.044 -24.528 -24.043 -23.590 -23.166 -22.772 -22.407 -22.071 -21.763 -21.483 -21.231 -21.006 -20.809 -20.639 -20.496 -20.380 -20.291 -20.228 -20.191 -20.182 -20.198 -20.240 -20.307 -20.402 -20.523 -20.672 -20.848 -21.052 -21.284 -21.544 -21.832 -22.150 -22.497 -22.874 -23.281 -23.719 -24.189 -24.691 -25.226 -25.795 -26.399 -27.038 -27.714 -28.429 -29.183 -29.978 -30.816 -31.699 -32.629 -33.608 -34.638 -35.723 -36.864 -38.064 -39.318 -40.623 -41.962 -43.311 -44.621 -45.826 -46.847 -47.619 -48.129 -48.427 -48.610 -48.785 -49.056 -49.517 -50.266 -51.407 -52.985 -54.516 -54.318 -51.621 -47.974 -44.603 -41.676 -39.111 -36.822 -34.747 -32.843 -31.077 -29.426 -27.875 -26.411 -25.022 -23.702 -22.444 -21.242 -20.093 -18.993 -17.938 -16.927 -15.957 -15.026 -14.131 -13.272 -12.447 -11.655 -10.894 -10.165 -9.465 -8.793 -8.150 -7.535 -6.946 -6.384 -5.848 -5.337 -4.851 -4.389 -3.952 -3.539 -3.149 -2.783 -2.439 -2.119 -1.822 -1.548 -1.296 -1.067 -0.861 -0.675 -0.511 -0.371 -0.253 -0.158 -0.087 -0.039 -0.015 -0.015 -0.040 -0.090 -0.166 -0.268 -0.396 -0.552 -0.736 -0.949 -1.192 -1.467 -1.773 -2.113 -2.489 -2.902 -3.353 -3.846 -4.383 -4.967 -5.602 -6.291 -7.038 -7.850 -8.733 -9.695 -10.744 -11.892 -13.154 -14.547 -16.094 -17.826 -19.782 -22.020 -24.624 -27.721 -31.524 -36.422 -43.251 -54.259 -70.377 -54.383 -43.323 -36.480 -31.572 -27.762 -24.659 -22.051 -19.809 -17.849 -16.115 -14.566 -13.171 -11.907 -10.757 -9.706 -8.743 -7.858 -7.045 -6.296 -5.606 -4.971 -4.385 -3.847 -3.353 -2.901 -2.487 -2.110 -1.769 -1.462 -1.187 -0.943 -0.729 -0.544 -0.387 -0.258 -0.155 -0.079 -0.028 -0.002 0.000 -0.023 -0.070 -0.140 -0.234 -0.351 -0.491 -0.654 -0.839 -1.047 -1.277 -1.528 -1.802 -2.098 -2.416 -2.758 -3.123 -3.511 -3.923 -4.358 -4.817 -5.301 -5.809 -6.343 -6.901 -7.486 -8.097 -8.735 -9.401 -10.094 -10.817 -11.569 -12.351 -13.164 -14.010 -14.889 -15.802 -16.750 -17.736 -18.760 -19.824 -20.930 -22.081 -23.277 -24.522 -25.818 -27.168 -28.576 -30.044 -31.576 -33.173 -34.836 -36.561 -38.337 -40.134 -41.902 -43.554 -44.975 -46.053 -46.741 -47.081 -47.175 -47.130 -47.016 -46.867 -46.686 -46.457 -46.149 -45.731 -45.178 -44.479 -43.641 -42.687 -41.648 -40.555 -39.437 -38.316 -37.207 -36.121 -35.066 -34.047 -33.065 -32.122 -31.218 -30.354 -29.529 -28.741 -27.992 -27.279 -26.603 -25.961 -25.355 -24.782 -24.243 -23.736 -23.260 -22.816 -22.403 -22.019 -21.665 -21.341 -21.044 -20.776 -20.535 -20.322 -20.136 -19.977 -19.844 -19.738 -19.657 -19.602 -19.573 -19.567 -19.586 -19.631 -19.701 -19.795 -19.915 -20.061 -20.231 -20.428 -20.649 -20.896 -21.169 -21.467 -21.791 -22.141 -22.518 -22.921 -23.351 -23.808 -24.292 -24.805 -25.346 -25.915 -26.514 -27.142 -27.800 -28.489 -29.209 -29.961 -30.745 -31.562 -32.413 -33.298 -34.218 -35.173 -36.165 -37.193 -38.258 -39.360 -40.498 -41.674 -42.885 -44.129 -45.404 -46.706 -48.010 -49.313 -50.617 -51.920 -53.224 0 1 1.0 1 N4 VH 30.06 34.35 0.05 -4.036e+10 2.478e+10 -4.139e+10 2.377e+10 -4.223e+10 2.272e+10 -4.287e+10 2.164e+10 -4.331e+10 2.052e+10 -4.355e+10 1.938e+10 -4.359e+10 1.823e+10 -4.344e+10 1.707e+10 -4.311e+10 1.593e+10 -4.260e+10 1.479e+10 -4.192e+10 1.368e+10 -4.109e+10 1.259e+10 -4.011e+10 1.153e+10 -3.901e+10 1.051e+10 -3.779e+10 9.530e+09 -3.647e+10 8.595e+09 -3.506e+10 7.704e+09 -3.358e+10 6.861e+09 -3.204e+10 6.068e+09 -3.045e+10 5.322e+09 -2.883e+10 4.627e+09 -2.719e+10 3.982e+09 -2.554e+10 3.385e+09 -2.389e+10 2.837e+09 -2.224e+10 2.335e+09 -2.062e+10 1.879e+09 -1.903e+10 1.468e+09 -1.747e+10 1.099e+09 -1.595e+10 7.723e+08 -1.448e+10 4.855e+08 -1.307e+10 2.369e+08 -1.172e+10 2.467e+07 -1.043e+10 -1.530e+08 -9.219e+09 -2.981e+08 -8.080e+09 -4.130e+08 -7.017e+09 -4.998e+08 -6.034e+09 -5.609e+08 -5.132e+09 -5.987e+08 -4.312e+09 -6.160e+08 -3.573e+09 -6.151e+08 -2.915e+09 -5.989e+08 -2.336e+09 -5.699e+08 -1.834e+09 -5.308e+08 -1.405e+09 -4.843e+08 -1.045e+09 -4.327e+08 -7.508e+08 -3.787e+08 -5.159e+08 -3.248e+08 -3.346e+08 -2.735e+08 -2.004e+08 -2.277e+08 -1.050e+08 -1.904e+08 -3.794e+07 -1.646e+08 1.319e+07 -1.521e+08 6.115e+07 -1.513e+08 1.151e+08 -1.582e+08 1.787e+08 -1.678e+08 2.521e+08 -1.766e+08 3.336e+08 -1.823e+08 4.209e+08 -1.835e+08 5.120e+08 -1.795e+08 6.052e+08 -1.698e+08 6.991e+08 -1.543e+08 7.931e+08 -1.326e+08 8.870e+08 -1.045e+08 9.807e+08 -6.965e+07 1.075e+09 -2.770e+07 1.170e+09 2.203e+07 1.268e+09 8.022e+07 1.371e+09 1.479e+08 1.479e+09 2.268e+08 1.595e+09 3.180e+08 1.722e+09 4.236e+08 1.861e+09 5.462e+08 2.015e+09 6.880e+08 2.186e+09 8.522e+08 2.377e+09 1.042e+09 2.591e+09 1.262e+09 2.830e+09 1.515e+09 3.098e+09 1.805e+09 3.395e+09 2.137e+09 3.726e+09 2.515e+09 4.093e+09 2.944e+09 4.498e+09 3.426e+09 4.944e+09 3.967e+09 5.433e+09 4.571e+09 5.967e+09 5.239e+09 6.550e+09 5.975e+09 7.183e+09 6.783e+09 7.868e+09 7.662e+09 8.608e+09 8.615e+09 9.406e+09 9.644e+09 1.026e+10 1.075e+10 1.118e+10 1.192e+10 1.216e+10 1.318e+10 1.320e+10 1.450e+10 1.431e+10 1.589e+10 1.549e+10 1.736e+10 1.673e+10 1.889e+10 1.805e+10 2.048e+10 1.943e+10 2.213e+10 2.088e+10 2.384e+10 2.240e+10 2.560e+10 2.398e+10 2.741e+10 2.562e+10 2.926e+10 2.732e+10 3.115e+10 2.907e+10 3.306e+10 3.086e+10 3.500e+10 3.269e+10 3.695e+10 3.454e+10 3.890e+10 3.640e+10 4.084e+10 3.825e+10 4.276e+10 4.009e+10 4.465e+10 4.189e+10 4.649e+10 4.364e+10 4.826e+10 4.532e+10 4.996e+10 4.691e+10 5.157e+10 4.839e+10 5.307e+10 4.975e+10 5.445e+10 5.095e+10 5.568e+10 5.199e+10 5.675e+10 5.286e+10 5.766e+10 5.352e+10 5.838e+10 5.398e+10 5.890e+10 5.422e+10 5.922e+10 5.423e+10 5.932e+10 5.401e+10 5.920e+10 5.357e+10 5.887e+10 5.289e+10 5.831e+10 5.199e+10 5.753e+10 5.087e+10 5.654e+10 4.955e+10 5.535e+10 4.804e+10 5.397e+10 4.635e+10 5.241e+10 4.451e+10 5.070e+10 4.253e+10 4.884e+10 4.044e+10 4.687e+10 3.826e+10 4.479e+10 3.601e+10 4.264e+10 3.371e+10 4.043e+10 3.139e+10 3.819e+10 2.906e+10 3.593e+10 2.675e+10 3.368e+10 2.448e+10 3.145e+10 2.227e+10 2.927e+10 2.012e+10 2.714e+10 1.806e+10 2.507e+10 1.609e+10 2.309e+10 1.422e+10 2.118e+10 1.247e+10 1.938e+10 1.084e+10 1.767e+10 9.326e+09 1.606e+10 7.941e+09 1.456e+10 6.683e+09 1.317e+10 5.549e+09 1.188e+10 4.536e+09 1.069e+10 3.642e+09 9.604e+09 2.859e+09 8.613e+09 2.180e+09 7.712e+09 1.600e+09 6.898e+09 1.108e+09 6.162e+09 6.978e+08 5.499e+09 3.614e+08 4.902e+09 9.099e+07 4.362e+09 -1.199e+08 3.874e+09 -2.772e+08 3.431e+09 -3.862e+08 3.026e+09 -4.519e+08 2.654e+09 -4.785e+08 2.311e+09 -4.708e+08 1.993e+09 -4.335e+08 1.698e+09 -3.723e+08 1.426e+09 -2.936e+08 1.177e+09 -2.045e+08 9.518e+08 -1.125e+08 7.529e+08 -2.427e+07 5.837e+08 5.689e+07 4.484e+08 1.354e+08 3.509e+08 2.283e+08 2.901e+08 3.628e+08 2.560e+08 5.670e+08 2.310e+08 8.626e+08 1.982e+08 1.264e+09 1.460e+08 1.781e+09 6.795e+07 2.421e+09 -3.957e+07 3.186e+09 -1.781e+08 4.078e+09 -3.481e+08 5.092e+09 -5.497e+08 6.223e+09 -7.826e+08 7.456e+09 -1.046e+09 8.780e+09 -1.339e+09 1.017e+10 -1.660e+09 1.162e+10 -2.009e+09 1.309e+10 -2.385e+09 1.455e+10 -2.785e+09 1.598e+10 -3.207e+09 1.735e+10 -3.649e+09 1.863e+10 -4.108e+09 1.978e+10 -4.579e+09 2.079e+10 -5.058e+09 2.161e+10 -5.538e+09 2.223e+10 -6.011e+09 2.263e+10 -6.471e+09 2.278e+10 -6.908e+09 2.268e+10 -7.312e+09 2.232e+10 -7.673e+09 2.170e+10 -7.979e+09 2.083e+10 -8.220e+09 1.971e+10 -8.386e+09 1.837e+10 -8.467e+09 1.683e+10 -8.456e+09 1.513e+10 -8.347e+09 1.330e+10 -8.138e+09 1.140e+10 -7.831e+09 9.475e+09 -7.433e+09 7.585e+09 -6.956e+09 5.786e+09 -6.424e+09 4.127e+09 -5.868e+09 2.645e+09 -5.336e+09 1.345e+09 -4.891e+09 1.696e+08 -4.604e+09 -1.007e+09 -4.534e+09 -2.374e+09 -4.699e+09 -4.139e+09 -5.068e+09 -6.478e+09 -5.574e+09 -9.516e+09 -6.145e+09 -1.334e+10 -6.723e+09 -1.800e+10 -7.262e+09 -2.351e+10 -7.735e+09 -2.987e+10 -8.125e+09 -3.706e+10 -8.431e+09 -4.502e+10 -8.661e+09 -5.369e+10 -8.836e+09 -6.296e+10 -8.988e+09 -7.271e+10 -9.161e+09 -8.281e+10 -9.407e+09 -9.309e+10 -9.789e+09 -1.034e+11 -1.038e+10 -1.135e+11 -1.125e+10 -1.232e+11 -1.249e+10 -1.324e+11 -1.418e+10 -1.408e+11 -1.639e+10 -1.483e+11 -1.922e+10 -1.546e+11 -2.273e+10 -1.597e+11 -2.700e+10 -1.634e+11 -3.207e+10 -1.657e+11 -3.802e+10 -1.665e+11 -4.489e+10 -1.659e+11 -5.276e+10 -1.641e+11 -6.170e+10 -1.610e+11 -7.185e+10 -1.570e+11 -8.343e+10 -1.523e+11 -9.674e+10 -1.470e+11 -1.123e+11 -1.414e+11 -1.307e+11 -1.355e+11 -1.531e+11 -1.292e+11 -1.805e+11 -1.221e+11 -2.146e+11 -1.136e+11 -2.572e+11 -1.029e+11 -3.103e+11 -8.879e+10 -3.763e+11 -6.996e+10 -4.576e+11 -4.491e+10 -5.573e+11 -1.208e+10 -6.783e+11 3.024e+10 -8.240e+11 8.387e+10 -9.982e+11 1.505e+11 -1.205e+12 2.321e+11 -1.448e+12 3.304e+11 -1.732e+12 4.471e+11 -2.063e+12 5.841e+11 -2.445e+12 7.431e+11 -2.885e+12 9.255e+11 -3.388e+12 1.133e+12 -3.961e+12 1.366e+12 -4.611e+12 1.627e+12 -5.344e+12 1.916e+12 -6.167e+12 2.233e+12 -7.090e+12 2.579e+12 -8.118e+12 2.953e+12 -9.260e+12 3.356e+12 -1.052e+13 3.785e+12 -1.192e+13 4.240e+12 -1.345e+13 4.718e+12 -1.512e+13 5.217e+12 -1.695e+13 5.734e+12 -1.894e+13 6.266e+12 -2.109e+13 6.807e+12 -2.342e+13 7.353e+12 -2.593e+13 7.900e+12 -2.863e+13 8.441e+12 -3.152e+13 8.968e+12 -3.461e+13 9.477e+12 -3.790e+13 9.957e+12 -4.139e+13 1.040e+13 -4.509e+13 1.080e+13 -4.901e+13 1.115e+13 -5.314e+13 1.143e+13 -5.748e+13 1.164e+13 -6.204e+13 1.177e+13 -6.681e+13 1.180e+13 -7.179e+13 1.172e+13 -7.698e+13 1.194e+13 -8.257e+13 1.188e+13 -8.836e+13 1.147e+13 -9.420e+13 1.090e+13 -1.002e+14 1.017e+13 -1.065e+14 9.264e+12 -1.129e+14 8.171e+12 -1.195e+14 6.877e+12 -1.262e+14 5.370e+12 -1.331e+14 3.641e+12 -1.401e+14 1.677e+12 -1.473e+14 -5.346e+11 -1.546e+14 -3.000e+12 -1.620e+14 -5.732e+12 -1.694e+14 -8.742e+12 -1.769e+14 -1.203e+13 -1.845e+14 -1.561e+13 -1.921e+14 -1.950e+13 -1.997e+14 -2.368e+13 -2.074e+14 -2.818e+13 -2.149e+14 -3.299e+13 -2.225e+14 -3.811e+13 -2.299e+14 -4.355e+13 -2.372e+14 -4.930e+13 -2.445e+14 -5.537e+13 -2.515e+14 -6.175e+13 -2.584e+14 -6.844e+13 -2.651e+14 -7.542e+13 -2.716e+14 -8.269e+13 -2.779e+14 -9.025e+13 -2.839e+14 -9.808e+13 -2.896e+14 -1.062e+14 -2.949e+14 -1.145e+14 -3.000e+14 -1.231e+14 -3.047e+14 -1.318e+14 -3.091e+14 -1.408e+14 -3.130e+14 -1.500e+14 -3.166e+14 -1.593e+14 -3.198e+14 -1.687e+14 -3.225e+14 -1.783e+14 -3.248e+14 -1.879e+14 -3.267e+14 -1.977e+14 -3.281e+14 -2.075e+14 -3.292e+14 -2.173e+14 -3.298e+14 -2.272e+14 -3.299e+14 -2.370e+14 -3.295e+14 -2.467e+14 -3.287e+14 -2.564e+14 -3.275e+14 -2.660e+14 -3.258e+14 -2.754e+14 -3.236e+14 -2.847e+14 -3.210e+14 -2.938e+14 -3.179e+14 -3.027e+14 -3.145e+14 -3.114e+14 -3.106e+14 -3.198e+14 -3.063e+14 -3.279e+14 -3.017e+14 -3.357e+14 -2.966e+14 -3.432e+14 -2.912e+14 -3.503e+14 -2.855e+14 -3.571e+14 -2.794e+14 -3.634e+14 -2.730e+14 -3.694e+14 -2.663e+14 -3.749e+14 -2.594e+14 -3.800e+14 -2.522e+14 -3.846e+14 -2.447e+14 -3.887e+14 -2.371e+14 -3.923e+14 -2.292e+14 -3.954e+14 -2.212e+14 -3.979e+14 -2.130e+14 -4.000e+14 -2.047e+14 -4.015e+14 -1.963e+14 -4.024e+14 -1.878e+14 -4.028e+14 -1.793e+14 -4.027e+14 -1.707e+14 -4.019e+14 -1.621e+14 -4.007e+14 -1.535e+14 -3.988e+14 -1.450e+14 -3.964e+14 -1.365e+14 -3.935e+14 -1.282e+14 -3.901e+14 -1.199e+14 -3.861e+14 -1.118e+14 -3.817e+14 -1.039e+14 -3.768e+14 -9.612e+13 -3.714e+14 -8.856e+13 -3.655e+14 -8.122e+13 -3.592e+14 -7.409e+13 -3.525e+14 -6.720e+13 -3.454e+14 -6.056e+13 -3.379e+14 -5.418e+13 -3.301e+14 -4.808e+13 -3.220e+14 -4.227e+13 -3.136e+14 -3.675e+13 -3.049e+14 -3.152e+13 -2.959e+14 -2.661e+13 -2.868e+14 -2.199e+13 -2.775e+14 -1.769e+13 -2.680e+14 -1.370e+13 -2.585e+14 -1.001e+13 -2.488e+14 -6.625e+12 -2.391e+14 -3.541e+12 -2.294e+14 -7.472e+11 -2.196e+14 1.762e+12 -2.100e+14 3.993e+12 -2.003e+14 5.960e+12 -1.908e+14 7.671e+12 -1.814e+14 9.138e+12 -1.721e+14 1.037e+13 -1.629e+14 1.139e+13 -1.540e+14 1.221e+13 -1.452e+14 1.283e+13 -1.367e+14 1.328e+13 -1.284e+14 1.356e+13 -1.204e+14 1.370e+13 -1.126e+14 1.370e+13 -1.051e+14 1.359e+13 -9.784e+13 1.337e+13 -9.090e+13 1.305e+13 -8.426e+13 1.266e+13 -7.792e+13 1.220e+13 -7.188e+13 1.168e+13 -6.614e+13 1.112e+13 -6.070e+13 1.053e+13 -5.556e+13 9.919e+12 -5.072e+13 9.290e+12 -4.618e+13 8.651e+12 -4.192e+13 8.009e+12 -3.795e+13 7.372e+12 -3.425e+13 6.745e+12 -3.081e+13 6.135e+12 -2.764e+13 5.544e+12 -2.470e+13 4.978e+12 -2.201e+13 4.440e+12 -1.954e+13 3.931e+12 -1.728e+13 3.454e+12 -1.523e+13 3.011e+12 -1.337e+13 2.601e+12 -1.169e+13 2.226e+12 -1.017e+13 1.884e+12 -8.818e+12 1.577e+12 -7.607e+12 1.301e+12 -6.532e+12 1.058e+12 -5.581e+12 8.437e+11 -4.743e+12 6.580e+11 -4.010e+12 4.986e+11 -3.372e+12 3.636e+11 -2.818e+12 2.507e+11 -2.342e+12 1.579e+11 -1.934e+12 8.316e+10 -1.587e+12 2.414e+10 -1.294e+12 -2.111e+10 -1.049e+12 -5.458e+10 -8.443e+11 -7.820e+10 -6.758e+11 -9.369e+10 -5.378e+11 -1.026e+11 -4.258e+11 -1.065e+11 -3.356e+11 -1.066e+11 -2.637e+11 -1.039e+11 -2.066e+11 -9.937e+10 -1.617e+11 -9.367e+10 -1.265e+11 -8.731e+10 -9.905e+10 -8.063e+10 -7.764e+10 -7.383e+10 -6.098e+10 -6.699e+10 -4.798e+10 -6.014e+10 -3.788e+10 -5.327e+10 -3.007e+10 -4.642e+10 -2.405e+10 -3.961e+10 -1.947e+10 -3.294e+10 -1.602e+10 -2.653e+10 -1.345e+10 -2.054e+10 -1.158e+10 -1.515e+10 -1.028e+10 -1.052e+10 -9.559e+09 -6.727e+09 -9.574e+09 -3.646e+09 -1.059e+10 -8.630e+08 -1.283e+10 2.288e+09 -1.643e+10 6.484e+09 -2.138e+10 1.222e+10 -2.770e+10 1.980e+10 -3.538e+10 2.936e+10 -4.439e+10 4.096e+10 -5.471e+10 5.459e+10 -6.629e+10 7.015e+10 -7.903e+10 8.751e+10 -9.286e+10 1.065e+11 -1.076e+11 1.269e+11 -1.232e+11 1.485e+11 -1.393e+11 1.711e+11 -1.559e+11 1.942e+11 -1.727e+11 2.177e+11 -1.895e+11 2.412e+11 -2.061e+11 2.644e+11 -2.223e+11 2.870e+11 -2.379e+11 3.087e+11 -2.527e+11 3.292e+11 -2.665e+11 3.482e+11 -2.791e+11 3.654e+11 -2.904e+11 3.808e+11 -3.003e+11 3.940e+11 -3.086e+11 4.050e+11 -3.152e+11 4.135e+11 -3.202e+11 4.196e+11 -3.234e+11 4.232e+11 -3.248e+11 4.242e+11 -3.245e+11 4.228e+11 -3.224e+11 4.190e+11 -3.186e+11 4.128e+11 -3.131e+11 4.044e+11 -3.062e+11 3.940e+11 -2.978e+11 3.817e+11 -2.881e+11 3.677e+11 -2.772e+11 3.523e+11 -2.653e+11 3.357e+11 -2.525e+11 3.181e+11 -2.391e+11 2.997e+11 -2.250e+11 2.808e+11 -2.107e+11 2.616e+11 -1.960e+11 2.423e+11 -1.813e+11 2.231e+11 -1.667e+11 2.043e+11 -1.524e+11 1.859e+11 -1.383e+11 1.681e+11 -1.247e+11 1.511e+11 -1.117e+11 1.350e+11 -9.931e+10 1.198e+11 -8.763e+10 1.056e+11 -7.672e+10 9.252e+10 -6.660e+10 8.049e+10 -5.731e+10 6.956e+10 -4.886e+10 5.971e+10 -4.124e+10 5.089e+10 -3.444e+10 4.310e+10 -2.843e+10 3.627e+10 -2.318e+10 3.033e+10 -1.865e+10 2.524e+10 -1.479e+10 2.091e+10 -1.154e+10 1.727e+10 -8.838e+09 1.425e+10 -6.632e+09 1.178e+10 -4.853e+09 9.792e+09 -3.443e+09 8.226e+09 -2.338e+09 7.029e+09 -1.474e+09 6.149e+09 -7.945e+08 5.547e+09 -2.445e+08 5.185e+09 2.206e+08 5.034e+09 6.335e+08 5.072e+09 1.016e+09 5.280e+09 1.381e+09 5.651e+09 1.730e+09 6.182e+09 2.059e+09 6.878e+09 2.364e+09 7.747e+09 2.633e+09 8.803e+09 2.855e+09 1.006e+10 3.017e+09 1.154e+10 3.102e+09 1.325e+10 3.092e+09 1.523e+10 2.969e+09 1.747e+10 2.711e+09 2.000e+10 2.296e+09 2.282e+10 1.701e+09 2.594e+10 9.015e+08 2.937e+10 -1.242e+08 3.309e+10 -1.400e+09 3.710e+10 -2.945e+09 4.138e+10 -4.778e+09 4.589e+10 -6.915e+09 5.062e+10 -9.369e+09 5.552e+10 -1.214e+10 6.055e+10 -1.525e+10 6.566e+10 -1.868e+10 7.080e+10 -2.242e+10 7.590e+10 -2.648e+10 8.092e+10 -3.083e+10 8.579e+10 -3.545e+10 9.045e+10 -4.032e+10 9.485e+10 -4.540e+10 9.892e+10 -5.067e+10 1.026e+11 -5.607e+10 1.059e+11 -6.159e+10 1.087e+11 -6.716e+10 1.109e+11 -7.274e+10 1.127e+11 -7.830e+10 1.139e+11 -8.379e+10 1.145e+11 -8.917e+10 1.145e+11 -9.439e+10 1.139e+11 -9.942e+10 1.128e+11 -1.042e+11 1.110e+11 -1.087e+11 1.087e+11 -1.130e+11 1.058e+11 -1.169e+11 1.024e+11 -1.205e+11 9.855e+10 -1.237e+11 9.424e+10 -1.265e+11 8.953e+10 -1.290e+11 8.446e+10 -1.310e+11 7.906e+10 -1.327e+11 7.339e+10 -1.340e+11 6.748e+10 -1.349e+11 6.138e+10 -1.355e+11 5.513e+10 -1.357e+11 4.877e+10 0.005 -57.381 -55.860 -54.339 -52.818 -51.298 -49.777 -48.257 -46.747 -45.272 -43.843 -42.465 -41.143 -39.875 -38.661 -37.498 -36.386 -35.323 -34.307 -33.335 -32.407 -31.521 -30.675 -29.869 -29.100 -28.369 -27.673 -27.012 -26.385 -25.792 -25.230 -24.701 -24.203 -23.735 -23.297 -22.889 -22.509 -22.159 -21.836 -21.542 -21.276 -21.037 -20.825 -20.640 -20.483 -20.353 -20.250 -20.173 -20.123 -20.100 -20.104 -20.134 -20.189 -20.271 -20.381 -20.518 -20.683 -20.876 -21.097 -21.347 -21.626 -21.934 -22.273 -22.642 -23.042 -23.473 -23.937 -24.433 -24.964 -25.529 -26.130 -26.767 -27.441 -28.155 -28.909 -29.705 -30.544 -31.428 -32.360 -33.341 -34.374 -35.461 -36.605 -37.807 -39.070 -40.391 -41.763 -43.172 -44.591 -45.973 -47.248 -48.339 -49.178 -49.752 -50.110 -50.347 -50.570 -50.881 -51.374 -52.145 -53.299 -54.881 -56.406 -56.193 -53.472 -49.794 -46.385 -43.415 -40.801 -38.461 -36.332 -34.370 -32.547 -30.839 -29.229 -27.707 -26.262 -24.887 -23.575 -22.321 -21.122 -19.973 -18.871 -17.816 -16.803 -15.830 -14.897 -14.000 -13.140 -12.313 -11.520 -10.759 -10.029 -9.330 -8.660 -8.018 -7.405 -6.819 -6.260 -5.728 -5.221 -4.740 -4.284 -3.852 -3.445 -3.062 -2.703 -2.367 -2.055 -1.767 -1.501 -1.259 -1.039 -0.841 -0.666 -0.513 -0.385 -0.279 -0.197 -0.139 -0.105 -0.095 -0.111 -0.152 -0.218 -0.311 -0.431 -0.578 -0.753 -0.957 -1.192 -1.457 -1.755 -2.086 -2.453 -2.857 -3.299 -3.783 -4.310 -4.884 -5.507 -6.185 -6.920 -7.719 -8.588 -9.533 -10.565 -11.694 -12.933 -14.300 -15.816 -17.509 -19.418 -21.595 -24.116 -27.094 -30.712 -35.293 -41.467 -50.652 -61.195 -52.811 -43.490 -36.854 -31.945 -28.100 -24.960 -22.318 -20.047 -18.063 -16.307 -14.740 -13.329 -12.051 -10.888 -9.826 -8.853 -7.960 -7.139 -6.382 -5.686 -5.044 -4.453 -3.909 -3.410 -2.952 -2.534 -2.154 -1.808 -1.497 -1.218 -0.971 -0.754 -0.566 -0.406 -0.273 -0.167 -0.088 -0.034 -0.005 0.000 -0.020 -0.064 -0.131 -0.222 -0.336 -0.472 -0.632 -0.814 -1.018 -1.244 -1.492 -1.761 -2.052 -2.367 -2.703 -3.063 -3.446 -3.852 -4.281 -4.734 -5.210 -5.711 -6.237 -6.787 -7.362 -7.964 -8.591 -9.245 -9.927 -10.636 -11.374 -12.141 -12.938 -13.766 -14.626 -15.519 -16.446 -17.408 -18.407 -19.444 -20.522 -21.641 -22.804 -24.014 -25.273 -26.583 -27.948 -29.372 -30.857 -32.406 -34.019 -35.692 -37.414 -39.158 -40.871 -42.469 -43.837 -44.864 -45.503 -45.798 -45.851 -45.769 -45.624 -45.450 -45.251 -45.009 -44.697 -44.281 -43.736 -43.052 -42.234 -41.305 -40.296 -39.238 -38.157 -37.076 -36.010 -34.969 -33.959 -32.987 -32.052 -31.157 -30.301 -29.484 -28.706 -27.965 -27.262 -26.595 -25.963 -25.367 -24.804 -24.275 -23.778 -23.313 -22.879 -22.476 -22.104 -21.761 -21.447 -21.162 -20.906 -20.677 -20.477 -20.304 -20.158 -20.039 -19.947 -19.881 -19.842 -19.829 -19.843 -19.880 -19.944 -20.034 -20.150 -20.292 -20.461 -20.656 -20.878 -21.127 -21.404 -21.707 -22.039 -22.398 -22.785 -23.201 -23.646 -24.120 -24.625 -25.159 -25.725 -26.323 -26.953 -27.616 -28.313 -29.044 -29.811 -30.614 -31.455 -32.334 -33.252 -34.210 -35.210 -36.252 -37.337 -38.467 -39.642 -40.863 -42.131 -43.445 -44.806 -46.212 -47.663 -49.155 -50.684 -52.244 -53.806 -55.368 -56.930 -58.492 -60.054 0 1 1.0 1 N5 HH 34.25 38.05 0.05 1.247e+10 -1.461e+09 1.242e+10 -1.122e+09 1.232e+10 -7.786e+08 1.216e+10 -4.345e+08 1.196e+10 -9.384e+07 1.170e+10 2.385e+08 1.140e+10 5.588e+08 1.105e+10 8.630e+08 1.066e+10 1.147e+09 1.023e+10 1.407e+09 9.767e+09 1.640e+09 9.265e+09 1.843e+09 8.732e+09 2.013e+09 8.173e+09 2.147e+09 7.591e+09 2.245e+09 6.992e+09 2.303e+09 6.378e+09 2.323e+09 5.758e+09 2.303e+09 5.136e+09 2.245e+09 4.517e+09 2.151e+09 3.909e+09 2.023e+09 3.319e+09 1.863e+09 2.752e+09 1.677e+09 2.217e+09 1.470e+09 1.721e+09 1.249e+09 1.273e+09 1.019e+09 8.797e+08 7.908e+08 5.502e+08 5.732e+08 2.921e+08 3.770e+08 1.124e+08 2.152e+08 9.813e+06 1.034e+08 -5.922e+07 4.746e+07 -1.813e+08 -8.643e+05 -4.108e+08 -1.065e+08 -7.628e+08 -3.075e+08 -1.243e+09 -6.239e+08 -1.858e+09 -1.072e+09 -2.612e+09 -1.669e+09 -3.509e+09 -2.430e+09 -4.553e+09 -3.369e+09 -5.746e+09 -4.501e+09 -7.089e+09 -5.838e+09 -8.580e+09 -7.390e+09 -1.022e+10 -9.168e+09 -1.200e+10 -1.118e+10 -1.392e+10 -1.343e+10 -1.598e+10 -1.592e+10 -1.815e+10 -1.865e+10 -2.044e+10 -2.162e+10 -2.283e+10 -2.481e+10 -2.532e+10 -2.823e+10 -2.787e+10 -3.185e+10 -3.049e+10 -3.565e+10 -3.314e+10 -3.963e+10 -3.582e+10 -4.375e+10 -3.850e+10 -4.798e+10 -4.116e+10 -5.229e+10 -4.379e+10 -5.665e+10 -4.635e+10 -6.103e+10 -4.884e+10 -6.539e+10 -5.122e+10 -6.968e+10 -5.349e+10 -7.387e+10 -5.561e+10 -7.792e+10 -5.757e+10 -8.178e+10 -5.935e+10 -8.542e+10 -6.093e+10 -8.880e+10 -6.230e+10 -9.187e+10 -6.344e+10 -9.461e+10 -6.434e+10 -9.698e+10 -6.498e+10 -9.895e+10 -6.537e+10 -1.005e+11 -6.550e+10 -1.016e+11 -6.537e+10 -1.023e+11 -6.497e+10 -1.025e+11 -6.431e+10 -1.023e+11 -6.339e+10 -1.016e+11 -6.222e+10 -1.004e+11 -6.082e+10 -9.878e+10 -5.918e+10 -9.674e+10 -5.734e+10 -9.430e+10 -5.530e+10 -9.147e+10 -5.308e+10 -8.830e+10 -5.071e+10 -8.480e+10 -4.820e+10 -8.103e+10 -4.558e+10 -7.700e+10 -4.287e+10 -7.278e+10 -4.010e+10 -6.839e+10 -3.728e+10 -6.389e+10 -3.445e+10 -5.931e+10 -3.162e+10 -5.470e+10 -2.883e+10 -5.010e+10 -2.609e+10 -4.556e+10 -2.342e+10 -4.110e+10 -2.084e+10 -3.677e+10 -1.838e+10 -3.260e+10 -1.604e+10 -2.862e+10 -1.384e+10 -2.485e+10 -1.180e+10 -2.133e+10 -9.914e+09 -1.807e+10 -8.198e+09 -1.508e+10 -6.655e+09 -1.238e+10 -5.285e+09 -9.962e+09 -4.089e+09 -7.837e+09 -3.064e+09 -5.998e+09 -2.204e+09 -4.436e+09 -1.503e+09 -3.142e+09 -9.508e+08 -2.102e+09 -5.376e+08 -1.299e+09 -2.511e+08 -7.127e+08 -7.758e+07 -3.221e+08 1.939e+06 -1.038e+08 4.155e+07 -1.113e+07 1.182e+08 6.917e+07 2.559e+08 2.192e+08 4.372e+08 4.393e+08 6.465e+08 7.080e+08 8.707e+08 1.004e+09 1.097e+09 1.307e+09 1.315e+09 1.599e+09 1.514e+09 1.866e+09 1.687e+09 2.094e+09 1.827e+09 2.274e+09 1.930e+09 2.399e+09 1.991e+09 2.465e+09 2.010e+09 2.472e+09 1.986e+09 2.420e+09 1.923e+09 2.313e+09 1.821e+09 2.157e+09 1.687e+09 1.961e+09 1.525e+09 1.733e+09 1.342e+09 1.483e+09 1.146e+09 1.224e+09 9.434e+08 9.646e+08 7.432e+08 7.180e+08 5.531e+08 4.943e+08 3.813e+08 3.034e+08 2.357e+08 1.542e+08 1.238e+08 5.283e+07 5.351e+07 -2.893e+06 1.954e+07 -4.482e+07 -1.386e+07 -1.255e+08 -8.529e+07 -2.703e+08 -2.066e+08 -4.792e+08 -3.801e+08 -7.493e+08 -6.054e+08 -1.076e+09 -8.799e+08 -1.452e+09 -1.200e+09 -1.871e+09 -1.562e+09 -2.324e+09 -1.959e+09 -2.801e+09 -2.385e+09 -3.292e+09 -2.831e+09 -3.785e+09 -3.289e+09 -4.270e+09 -3.751e+09 -4.735e+09 -4.208e+09 -5.171e+09 -4.650e+09 -5.566e+09 -5.070e+09 -5.913e+09 -5.459e+09 -6.204e+09 -5.808e+09 -6.432e+09 -6.113e+09 -6.592e+09 -6.366e+09 -6.681e+09 -6.564e+09 -6.698e+09 -6.702e+09 -6.644e+09 -6.779e+09 -6.519e+09 -6.794e+09 -6.329e+09 -6.747e+09 -6.077e+09 -6.640e+09 -5.771e+09 -6.477e+09 -5.418e+09 -6.261e+09 -5.027e+09 -5.998e+09 -4.607e+09 -5.695e+09 -4.168e+09 -5.357e+09 -3.718e+09 -4.992e+09 -3.268e+09 -4.607e+09 -2.827e+09 -4.212e+09 -2.402e+09 -3.811e+09 -2.000e+09 -3.414e+09 -1.628e+09 -3.026e+09 -1.289e+09 -2.653e+09 -9.879e+08 -2.301e+09 -7.255e+08 -1.974e+09 -5.021e+08 -1.673e+09 -3.170e+08 -1.402e+09 -1.681e+08 -1.161e+09 -5.251e+07 -9.502e+08 3.324e+07 -7.677e+08 9.297e+07 -6.118e+08 1.307e+08 -4.800e+08 1.501e+08 -3.698e+08 1.545e+08 -2.781e+08 1.467e+08 -2.027e+08 1.293e+08 -1.415e+08 1.049e+08 -9.297e+07 7.627e+07 -5.590e+07 4.692e+07 -2.945e+07 2.139e+07 -1.356e+07 4.018e+06 -8.486e+06 -1.026e+07 -1.016e+07 -4.178e+07 -1.333e+07 -1.110e+08 -1.964e+07 -2.319e+08 -3.410e+07 -4.185e+08 -6.329e+07 -6.866e+08 -1.150e+08 -1.052e+09 -1.982e+08 -1.532e+09 -3.229e+08 -2.143e+09 -4.998e+08 -2.902e+09 -7.402e+08 -3.823e+09 -1.056e+09 -4.921e+09 -1.458e+09 -6.207e+09 -1.958e+09 -7.690e+09 -2.567e+09 -9.379e+09 -3.293e+09 -1.127e+10 -4.145e+09 -1.337e+10 -5.128e+09 -1.568e+10 -6.247e+09 -1.817e+10 -7.501e+09 -2.084e+10 -8.890e+09 -2.367e+10 -1.041e+10 -2.663e+10 -1.205e+10 -2.970e+10 -1.380e+10 -3.284e+10 -1.565e+10 -3.602e+10 -1.758e+10 -3.920e+10 -1.957e+10 -4.234e+10 -2.159e+10 -4.540e+10 -2.362e+10 -4.832e+10 -2.564e+10 -5.105e+10 -2.761e+10 -5.357e+10 -2.949e+10 -5.580e+10 -3.127e+10 -5.773e+10 -3.291e+10 -5.930e+10 -3.438e+10 -6.048e+10 -3.565e+10 -6.125e+10 -3.670e+10 -6.159e+10 -3.750e+10 -6.148e+10 -3.804e+10 -6.091e+10 -3.830e+10 -5.988e+10 -3.826e+10 -5.841e+10 -3.794e+10 -5.652e+10 -3.731e+10 -5.423e+10 -3.640e+10 -5.157e+10 -3.522e+10 -4.859e+10 -3.377e+10 -4.534e+10 -3.209e+10 -4.186e+10 -3.020e+10 -3.823e+10 -2.814e+10 -3.449e+10 -2.593e+10 -3.072e+10 -2.363e+10 -2.696e+10 -2.126e+10 -2.329e+10 -1.887e+10 -1.977e+10 -1.650e+10 -1.644e+10 -1.419e+10 -1.335e+10 -1.199e+10 -1.054e+10 -9.917e+09 -8.048e+09 -8.014e+09 -5.890e+09 -6.305e+09 -4.079e+09 -4.809e+09 -2.614e+09 -3.545e+09 -1.485e+09 -2.519e+09 -6.641e+08 -1.734e+09 -1.069e+08 -1.181e+09 2.562e+08 -8.265e+08 5.236e+08 -5.994e+08 7.969e+08 -4.161e+08 1.133e+09 -2.179e+08 1.529e+09 1.389e+07 1.948e+09 2.697e+08 2.341e+09 5.267e+08 2.662e+09 7.579e+08 2.870e+09 9.366e+08 2.937e+09 1.041e+09 2.846e+09 1.057e+09 2.596e+09 9.804e+08 2.203e+09 8.189e+08 1.702e+09 5.945e+08 1.147e+09 3.457e+08 6.142e+08 1.281e+08 2.009e+08 1.688e+07 1.941e+07 -9.996e+07 -2.277e+08 -4.946e+08 -9.651e+08 -1.329e+09 -2.415e+09 -2.751e+09 -4.764e+09 -4.923e+09 -8.214e+09 -8.024e+09 -1.298e+10 -1.224e+10 -1.926e+10 -1.776e+10 -2.726e+10 -2.479e+10 -3.720e+10 -3.351e+10 -4.924e+10 -4.412e+10 -6.356e+10 -5.680e+10 -8.031e+10 -7.169e+10 -9.957e+10 -8.894e+10 -1.214e+11 -1.087e+11 -1.459e+11 -1.309e+11 -1.730e+11 -1.557e+11 -2.027e+11 -1.831e+11 -2.348e+11 -2.129e+11 -2.692e+11 -2.451e+11 -3.055e+11 -2.796e+11 -3.437e+11 -3.160e+11 -3.832e+11 -3.541e+11 -4.238e+11 -3.937e+11 -4.650e+11 -4.281e+11 -5.171e+11 -4.732e+11 -5.550e+11 -5.144e+11 -5.959e+11 -5.552e+11 -6.353e+11 -5.951e+11 -6.727e+11 -6.336e+11 -7.075e+11 -6.699e+11 -7.392e+11 -7.037e+11 -7.671e+11 -7.343e+11 -7.909e+11 -7.611e+11 -8.100e+11 -7.838e+11 -8.241e+11 -8.017e+11 -8.328e+11 -8.145e+11 -8.358e+11 -8.219e+11 -8.330e+11 -8.236e+11 -8.243e+11 -8.195e+11 -8.097e+11 -8.093e+11 -7.893e+11 -7.932e+11 -7.633e+11 -7.713e+11 -7.321e+11 -7.439e+11 -6.960e+11 -7.112e+11 -6.555e+11 -6.737e+11 -6.114e+11 -6.320e+11 -5.641e+11 -5.866e+11 -5.146e+11 -5.384e+11 -4.635e+11 -4.881e+11 -4.117e+11 -4.365e+11 -3.601e+11 -3.846e+11 -3.095e+11 -3.333e+11 -2.608e+11 -2.832e+11 -2.146e+11 -2.355e+11 -1.719e+11 -1.909e+11 -1.331e+11 -1.500e+11 -9.882e+10 -1.136e+11 -6.949e+10 -8.201e+10 -4.532e+10 -5.569e+10 -2.641e+10 -3.484e+10 -1.269e+10 -1.947e+10 -3.796e+09 -9.446e+09 1.049e+09 -4.056e+09 3.667e+09 -1.052e+09 6.995e+09 2.705e+09 1.278e+10 8.412e+09 2.046e+10 1.566e+10 2.897e+10 2.355e+10 3.724e+10 3.107e+10 4.429e+10 3.723e+10 4.924e+10 4.113e+10 5.137e+10 4.211e+10 5.023e+10 3.978e+10 4.568e+10 3.417e+10 3.800e+10 2.588e+10 2.798e+10 1.614e+10 1.702e+10 6.995e+09 7.208e+09 1.191e+09 1.188e+09 -3.630e+09 -3.618e+09 -1.887e+10 -1.849e+10 -5.391e+10 -5.199e+10 -1.171e+11 -1.113e+11 -2.185e+11 -2.048e+11 -3.699e+11 -3.421e+11 -5.853e+11 -5.347e+11 -8.808e+11 -7.951e+11 -1.274e+12 -1.137e+12 -1.786e+12 -1.577e+12 -2.441e+12 -2.133e+12 -3.261e+12 -2.821e+12 -4.277e+12 -3.664e+12 -5.519e+12 -4.683e+12 -7.019e+12 -5.901e+12 -8.812e+12 -7.343e+12 -1.094e+13 -9.035e+12 -1.343e+13 -1.100e+13 -1.634e+13 -1.328e+13 -1.971e+13 -1.588e+13 -2.358e+13 -1.885e+13 -2.800e+13 -2.221e+13 -3.302e+13 -2.599e+13 -3.869e+13 -3.022e+13 -4.505e+13 -3.493e+13 -5.217e+13 -4.016e+13 -6.009e+13 -4.593e+13 -6.887e+13 -5.228e+13 -7.855e+13 -5.923e+13 -8.917e+13 -6.679e+13 -1.008e+14 -7.499e+13 -1.134e+14 -8.384e+13 -1.272e+14 -9.337e+13 -1.420e+14 -1.036e+14 -1.580e+14 -1.145e+14 -1.751e+14 -1.261e+14 -1.934e+14 -1.384e+14 -2.130e+14 -1.514e+14 -2.337e+14 -1.651e+14 -2.557e+14 -1.794e+14 -2.789e+14 -1.944e+14 -3.032e+14 -2.101e+14 -3.288e+14 -2.263e+14 -3.554e+14 -2.431e+14 -3.832e+14 -2.604e+14 -4.121e+14 -2.783e+14 -4.419e+14 -2.965e+14 -4.727e+14 -3.151e+14 -5.044e+14 -3.341e+14 -5.368e+14 -3.533e+14 -5.699e+14 -3.727e+14 -6.037e+14 -3.923e+14 -6.379e+14 -4.118e+14 -6.725e+14 -4.314e+14 -7.073e+14 -4.509e+14 -7.423e+14 -4.701e+14 -7.773e+14 -4.891e+14 -8.121e+14 -5.078e+14 -8.466e+14 -5.261e+14 -8.807e+14 -5.438e+14 -9.143e+14 -5.610e+14 -9.472e+14 -5.775e+14 -9.791e+14 -5.932e+14 -1.010e+15 -6.082e+14 -1.040e+15 -6.222e+14 -1.068e+15 -6.353e+14 -1.096e+15 -6.471e+14 -1.121e+15 -6.578e+14 -1.145e+15 -6.673e+14 -1.167e+15 -6.756e+14 -1.188e+15 -6.828e+14 -1.206e+15 -6.886e+14 -1.222e+15 -6.932e+14 -1.236e+15 -6.965e+14 -1.248e+15 -6.984e+14 -1.257e+15 -6.990e+14 -1.264e+15 -6.983e+14 -1.269e+15 -6.963e+14 -1.271e+15 -6.930e+14 -1.271e+15 -6.883e+14 -1.269e+15 -6.824e+14 -1.264e+15 -6.752e+14 -1.256e+15 -6.669e+14 -1.247e+15 -6.574e+14 -1.235e+15 -6.468e+14 -1.221e+15 -6.351e+14 -1.204e+15 -6.224e+14 -1.186e+15 -6.088e+14 -1.165e+15 -5.943e+14 -1.143e+15 -5.791e+14 -1.119e+15 -5.631e+14 -1.093e+15 -5.465e+14 -1.066e+15 -5.293e+14 -1.037e+15 -5.116e+14 -1.007e+15 -4.935e+14 -9.757e+14 -4.750e+14 -9.436e+14 -4.563e+14 -9.106e+14 -4.375e+14 -8.770e+14 -4.185e+14 -8.427e+14 -3.995e+14 -8.081e+14 -3.805e+14 -7.732e+14 -3.617e+14 -7.381e+14 -3.431e+14 -7.030e+14 -3.246e+14 -6.682e+14 -3.065e+14 -6.336e+14 -2.888e+14 -5.995e+14 -2.715e+14 -5.660e+14 -2.548e+14 -5.331e+14 -2.384e+14 -5.008e+14 -2.226e+14 -4.693e+14 -2.073e+14 -4.386e+14 -1.926e+14 -4.089e+14 -1.785e+14 -3.802e+14 -1.650e+14 -3.525e+14 -1.521e+14 -3.259e+14 -1.398e+14 -3.004e+14 -1.282e+14 -2.761e+14 -1.172e+14 -2.531e+14 -1.068e+14 -2.312e+14 -9.703e+13 -2.105e+14 -8.789e+13 -1.911e+14 -7.937e+13 -1.728e+14 -7.143e+13 -1.558e+14 -6.407e+13 -1.399e+14 -5.727e+13 -1.251e+14 -5.101e+13 -1.115e+14 -4.526e+13 -9.897e+13 -4.000e+13 -8.747e+13 -3.521e+13 -7.696e+13 -3.086e+13 -6.741e+13 -2.693e+13 -5.876e+13 -2.339e+13 -5.095e+13 -2.022e+13 -4.395e+13 -1.740e+13 -3.771e+13 -1.489e+13 -3.215e+13 -1.267e+13 -2.725e+13 -1.071e+13 -2.294e+13 -9.006e+12 -1.918e+13 -7.521e+12 -1.591e+13 -6.237e+12 -1.310e+13 -5.134e+12 -1.068e+13 -4.192e+12 -8.636e+12 -3.393e+12 -6.911e+12 -2.722e+12 -5.469e+12 -2.161e+12 -4.275e+12 -1.697e+12 -3.299e+12 -1.317e+12 -2.509e+12 -1.009e+12 -1.876e+12 -7.616e+11 -1.377e+12 -5.655e+11 -9.901e+11 -4.122e+11 -6.946e+11 -2.941e+11 -4.740e+11 -2.048e+11 -3.128e+11 -1.386e+11 -1.985e+11 -9.072e+10 -1.200e+11 -5.701e+10 -6.833e+10 -3.406e+10 -3.599e+10 -1.909e+10 -1.710e+10 -9.837e+09 -7.023e+09 -4.510e+09 -2.310e+09 -1.738e+09 -5.201e+08 -5.023e+08 -5.053e+07 -8.032e+07 -7.202e+05 3.638e+06 -3.319e+07 3.849e+07 -2.685e+08 1.337e+08 -1.127e+09 2.822e+08 -3.254e+09 3.988e+08 -7.424e+09 3.378e+08 -1.447e+10 -8.176e+07 -2.519e+10 -1.052e+09 -4.030e+10 -2.764e+09 -6.046e+10 -5.392e+09 -8.608e+10 -9.077e+09 -1.175e+11 -1.393e+10 -1.548e+11 -2.004e+10 -1.978e+11 -2.740e+10 -2.463e+11 -3.602e+10 -3.000e+11 -4.586e+10 -3.580e+11 -5.680e+10 -4.196e+11 -6.870e+10 -4.840e+11 -8.143e+10 -5.500e+11 -9.477e+10 -6.167e+11 -1.085e+11 -6.830e+11 -1.225e+11 -7.477e+11 -1.364e+11 -8.098e+11 -1.500e+11 -8.683e+11 -1.633e+11 -9.221e+11 -1.758e+11 -9.703e+11 -1.874e+11 -1.012e+12 -1.979e+11 -1.047e+12 -2.072e+11 -1.074e+12 -2.152e+11 -1.094e+12 -2.216e+11 -1.105e+12 -2.265e+11 -1.108e+12 -2.298e+11 -1.103e+12 -2.315e+11 -1.090e+12 -2.316e+11 -1.070e+12 -2.301e+11 -1.042e+12 -2.271e+11 -1.008e+12 -2.227e+11 -9.678e+11 -2.170e+11 -9.227e+11 -2.100e+11 -8.732e+11 -2.021e+11 -8.203e+11 -1.932e+11 -7.647e+11 -1.835e+11 -7.073e+11 -1.733e+11 -6.491e+11 -1.625e+11 -5.906e+11 -1.515e+11 -5.328e+11 -1.402e+11 -4.763e+11 -1.290e+11 -4.217e+11 -1.178e+11 -3.696e+11 -1.068e+11 -3.204e+11 -9.611e+10 -2.746e+11 -8.580e+10 -2.323e+11 -7.597e+10 -1.939e+11 -6.667e+10 -1.594e+11 -5.794e+10 -1.288e+11 -4.984e+10 -1.021e+11 -4.240e+10 -7.918e+10 -3.562e+10 -5.986e+10 -2.951e+10 -4.392e+10 -2.409e+10 -3.108e+10 -1.933e+10 -2.103e+10 -1.523e+10 -1.344e+10 -1.176e+10 -7.945e+09 -8.923e+09 -4.171e+09 -6.688e+09 -1.720e+09 -5.048e+09 -1.566e+08 -3.969e+09 9.492e+08 -3.363e+09 1.924e+09 -3.065e+09 2.903e+09 -2.891e+09 3.854e+09 -2.710e+09 4.680e+09 -2.469e+09 5.284e+09 -2.157e+09 5.594e+09 -1.786e+09 5.572e+09 -1.379e+09 5.217e+09 -9.653e+08 4.565e+09 -5.732e+08 3.687e+09 -2.316e+08 2.684e+09 3.412e+07 1.682e+09 2.029e+08 8.304e+08 2.639e+08 2.662e+08 2.542e+08 -1.237e+08 3.572e+08 0.005 -61.677 -59.579 -57.481 -55.383 -53.285 -51.216 -49.298 -47.506 -45.824 -44.239 -42.740 -41.321 -39.976 -38.698 -37.483 -36.329 -35.231 -34.186 -33.193 -32.248 -31.349 -30.496 -29.685 -28.916 -28.187 -27.496 -26.843 -26.227 -25.646 -25.100 -24.587 -24.108 -23.661 -23.245 -22.862 -22.509 -22.186 -21.893 -21.630 -21.397 -21.192 -21.017 -20.871 -20.753 -20.664 -20.604 -20.573 -20.571 -20.598 -20.654 -20.740 -20.855 -21.000 -21.176 -21.382 -21.620 -21.889 -22.191 -22.525 -22.893 -23.296 -23.734 -24.209 -24.721 -25.271 -25.861 -26.493 -27.167 -27.886 -28.652 -29.467 -30.333 -31.254 -32.232 -33.272 -34.379 -35.559 -36.818 -38.166 -39.614 -41.179 -42.881 -44.749 -46.828 -49.184 -51.925 -55.228 -59.355 -64.008 -65.159 -62.550 -59.935 -58.164 -57.033 -56.359 -56.043 -56.034 -56.307 -56.833 -57.485 -57.843 -57.141 -55.057 -52.227 -49.300 -46.529 -43.961 -41.585 -39.375 -37.308 -35.366 -33.534 -31.800 -30.153 -28.587 -27.094 -25.670 -24.309 -23.007 -21.762 -20.569 -19.426 -18.330 -17.280 -16.273 -15.307 -14.380 -13.492 -12.641 -11.824 -11.042 -10.294 -9.577 -8.891 -8.236 -7.610 -7.013 -6.444 -5.903 -5.389 -4.901 -4.440 -4.004 -3.594 -3.208 -2.847 -2.511 -2.199 -1.911 -1.647 -1.408 -1.192 -1.000 -0.832 -0.687 -0.567 -0.471 -0.399 -0.352 -0.329 -0.332 -0.360 -0.414 -0.494 -0.602 -0.737 -0.901 -1.094 -1.317 -1.571 -1.858 -2.178 -2.534 -2.926 -3.358 -3.830 -4.346 -4.909 -5.521 -6.187 -6.910 -7.697 -8.554 -9.487 -10.506 -11.621 -12.847 -14.201 -15.703 -17.384 -19.283 -21.456 -23.983 -26.994 -30.712 -35.582 -42.787 -59.158 -53.046 -49.534 -44.969 -38.426 -33.134 -29.009 -25.679 -22.906 -20.539 -18.483 -16.671 -15.058 -13.610 -12.301 -11.112 -10.027 -9.034 -8.123 -7.286 -6.516 -5.806 -5.153 -4.551 -3.998 -3.490 -3.024 -2.598 -2.210 -1.858 -1.541 -1.256 -1.003 -0.781 -0.588 -0.424 -0.288 -0.179 -0.096 -0.039 -0.007 0.000 -0.018 -0.060 -0.125 -0.215 -0.327 -0.464 -0.623 -0.805 -1.010 -1.239 -1.490 -1.764 -2.061 -2.382 -2.727 -3.094 -3.486 -3.902 -4.341 -4.806 -5.295 -5.809 -6.349 -6.915 -7.508 -8.128 -8.775 -9.451 -10.156 -10.890 -11.655 -12.452 -13.280 -14.142 -15.038 -15.969 -16.937 -17.943 -18.989 -20.076 -21.206 -22.382 -23.604 -24.877 -26.202 -27.583 -29.025 -30.530 -32.106 -33.757 -35.493 -37.322 -39.257 -41.313 -43.511 -45.877 -48.447 -51.267 -54.404 -57.946 -62.018 -66.789 -72.426 -77.040 -73.510 -68.122 -63.632 -59.885 -56.689 -53.909 -51.449 -49.240 -47.232 -45.390 -43.685 -42.098 -40.613 -39.219 -37.906 -36.666 -35.493 -34.383 -33.331 -32.334 -31.389 -30.495 -29.647 -28.845 -28.087 -27.371 -26.695 -26.059 -25.461 -24.901 -24.376 -23.886 -23.431 -23.009 -22.619 -22.262 -21.937 -21.642 -21.377 -21.143 -20.938 -20.762 -20.615 -20.496 -20.406 -20.344 -20.309 -20.302 -20.323 -20.371 -20.447 -20.550 -20.681 -20.839 -21.025 -21.239 -21.481 -21.751 -22.049 -22.376 -22.732 -23.117 -23.532 -23.977 -24.453 -24.960 -25.498 -26.070 -26.674 -27.312 -27.985 -28.694 -29.439 -30.221 -31.042 -31.902 -32.803 -33.746 -34.732 -35.762 -36.837 -37.959 -39.129 -40.348 -41.616 -42.934 -44.303 -45.721 -47.188 -48.701 -50.258 -51.852 -53.476 -55.121 -56.770 -58.418 -60.067 -61.716 0 1 1.0 1 N5 HV 34.25 38.05 0.05 9.355e+09 -1.303e+10 9.589e+09 -1.265e+10 9.779e+09 -1.221e+10 9.922e+09 -1.173e+10 1.002e+10 -1.121e+10 1.006e+10 -1.066e+10 1.004e+10 -1.007e+10 9.970e+09 -9.450e+09 9.840e+09 -8.813e+09 9.652e+09 -8.160e+09 9.406e+09 -7.498e+09 9.104e+09 -6.833e+09 8.747e+09 -6.171e+09 8.340e+09 -5.517e+09 7.885e+09 -4.880e+09 7.388e+09 -4.264e+09 6.853e+09 -3.674e+09 6.289e+09 -3.117e+09 5.702e+09 -2.597e+09 5.099e+09 -2.116e+09 4.489e+09 -1.681e+09 3.880e+09 -1.293e+09 3.282e+09 -9.537e+08 2.703e+09 -6.647e+08 2.155e+09 -4.261e+08 1.646e+09 -2.373e+08 1.188e+09 -9.686e+07 7.911e+08 -2.168e+06 4.669e+08 5.075e+07 2.266e+08 6.797e+07 7.771e+07 6.322e+07 -7.926e+06 7.186e+07 -1.227e+08 1.195e+08 -3.463e+08 1.967e+08 -7.122e+08 2.851e+08 -1.236e+09 3.722e+08 -1.929e+09 4.476e+08 -2.805e+09 5.011e+08 -3.876e+09 5.223e+08 -5.149e+09 5.007e+08 -6.637e+09 4.259e+08 -8.347e+09 2.877e+08 -1.028e+10 7.628e+07 -1.245e+10 -2.178e+08 -1.485e+10 -6.032e+08 -1.747e+10 -1.087e+09 -2.033e+10 -1.676e+09 -2.340e+10 -2.376e+09 -2.668e+10 -3.188e+09 -3.015e+10 -4.117e+09 -3.380e+10 -5.162e+09 -3.760e+10 -6.320e+09 -4.153e+10 -7.588e+09 -4.557e+10 -8.963e+09 -4.967e+10 -1.043e+10 -5.381e+10 -1.200e+10 -5.796e+10 -1.364e+10 -6.208e+10 -1.534e+10 -6.613e+10 -1.710e+10 -7.008e+10 -1.889e+10 -7.389e+10 -2.071e+10 -7.752e+10 -2.253e+10 -8.096e+10 -2.435e+10 -8.414e+10 -2.613e+10 -8.706e+10 -2.786e+10 -8.967e+10 -2.954e+10 -9.196e+10 -3.112e+10 -9.390e+10 -3.261e+10 -9.547e+10 -3.398e+10 -9.666e+10 -3.521e+10 -9.745e+10 -3.630e+10 -9.786e+10 -3.722e+10 -9.786e+10 -3.798e+10 -9.747e+10 -3.855e+10 -9.668e+10 -3.894e+10 -9.550e+10 -3.913e+10 -9.396e+10 -3.912e+10 -9.205e+10 -3.892e+10 -8.980e+10 -3.851e+10 -8.722e+10 -3.791e+10 -8.435e+10 -3.712e+10 -8.121e+10 -3.616e+10 -7.782e+10 -3.502e+10 -7.420e+10 -3.372e+10 -7.041e+10 -3.228e+10 -6.646e+10 -3.071e+10 -6.239e+10 -2.904e+10 -5.824e+10 -2.727e+10 -5.403e+10 -2.544e+10 -4.981e+10 -2.357e+10 -4.560e+10 -2.166e+10 -4.145e+10 -1.976e+10 -3.738e+10 -1.787e+10 -3.343e+10 -1.602e+10 -2.963e+10 -1.422e+10 -2.599e+10 -1.249e+10 -2.255e+10 -1.086e+10 -1.934e+10 -9.323e+09 -1.635e+10 -7.898e+09 -1.362e+10 -6.593e+09 -1.114e+10 -5.414e+09 -8.932e+09 -4.364e+09 -6.989e+09 -3.442e+09 -5.311e+09 -2.646e+09 -3.890e+09 -1.973e+09 -2.719e+09 -1.415e+09 -1.784e+09 -9.672e+08 -1.070e+09 -6.186e+08 -5.578e+08 -3.599e+08 -2.280e+08 -1.808e+08 -5.521e+07 -7.257e+07 2.232e+07 -3.054e+07 1.188e+08 -1.868e+07 2.960e+08 4.927e+06 5.430e+08 4.859e+07 8.384e+08 1.049e+08 1.162e+09 1.660e+08 1.497e+09 2.246e+08 1.825e+09 2.745e+08 2.134e+09 3.111e+08 2.410e+09 3.308e+08 2.647e+09 3.311e+08 2.835e+09 3.110e+08 2.972e+09 2.704e+08 3.055e+09 2.103e+08 3.084e+09 1.324e+08 3.061e+09 3.925e+07 2.990e+09 -6.595e+07 2.876e+09 -1.799e+08 2.725e+09 -2.992e+08 2.544e+09 -4.203e+08 2.342e+09 -5.404e+08 2.127e+09 -6.575e+08 1.906e+09 -7.706e+08 1.687e+09 -8.806e+08 1.476e+09 -9.899e+08 1.276e+09 -1.103e+09 1.089e+09 -1.227e+09 9.109e+08 -1.368e+09 7.368e+08 -1.535e+09 5.581e+08 -1.733e+09 3.655e+08 -1.965e+09 1.502e+08 -2.234e+09 -9.553e+07 -2.536e+09 -3.767e+08 -2.868e+09 -6.955e+08 -3.222e+09 -1.052e+09 -3.593e+09 -1.445e+09 -3.970e+09 -1.868e+09 -4.344e+09 -2.316e+09 -4.707e+09 -2.780e+09 -5.047e+09 -3.252e+09 -5.357e+09 -3.721e+09 -5.626e+09 -4.178e+09 -5.848e+09 -4.611e+09 -6.015e+09 -5.011e+09 -6.122e+09 -5.367e+09 -6.165e+09 -5.671e+09 -6.143e+09 -5.916e+09 -6.055e+09 -6.097e+09 -5.902e+09 -6.207e+09 -5.689e+09 -6.247e+09 -5.419e+09 -6.214e+09 -5.101e+09 -6.112e+09 -4.740e+09 -5.944e+09 -4.347e+09 -5.715e+09 -3.930e+09 -5.433e+09 -3.499e+09 -5.105e+09 -3.064e+09 -4.741e+09 -2.634e+09 -4.351e+09 -2.218e+09 -3.945e+09 -1.824e+09 -3.532e+09 -1.457e+09 -3.122e+09 -1.124e+09 -2.725e+09 -8.274e+08 -2.347e+09 -5.700e+08 -1.996e+09 -3.524e+08 -1.675e+09 -1.733e+08 -1.388e+09 -3.041e+07 -1.138e+09 7.965e+07 -9.234e+08 1.615e+08 -7.433e+08 2.202e+08 -5.948e+08 2.606e+08 -4.737e+08 2.873e+08 -3.754e+08 3.036e+08 -2.954e+08 3.118e+08 -2.297e+08 3.123e+08 -1.753e+08 3.048e+08 -1.303e+08 2.885e+08 -9.376e+07 2.626e+08 -6.516e+07 2.274e+08 -4.415e+07 1.840e+08 -2.992e+07 1.355e+08 -2.108e+07 8.658e+07 -1.555e+07 4.367e+07 -1.220e+07 1.398e+07 -1.687e+07 -6.383e+06 -3.954e+07 -4.419e+07 -8.602e+07 -1.296e+08 -1.635e+08 -2.812e+08 -2.823e+08 -5.156e+08 -4.543e+08 -8.507e+08 -6.926e+08 -1.305e+09 -1.011e+09 -1.895e+09 -1.424e+09 -2.641e+09 -1.946e+09 -3.557e+09 -2.591e+09 -4.660e+09 -3.373e+09 -5.963e+09 -4.306e+09 -7.476e+09 -5.398e+09 -9.203e+09 -6.661e+09 -1.115e+10 -8.099e+09 -1.332e+10 -9.715e+09 -1.569e+10 -1.151e+10 -1.826e+10 -1.348e+10 -2.102e+10 -1.561e+10 -2.393e+10 -1.789e+10 -2.697e+10 -2.030e+10 -3.011e+10 -2.281e+10 -3.330e+10 -2.541e+10 -3.650e+10 -2.805e+10 -3.968e+10 -3.070e+10 -4.278e+10 -3.332e+10 -4.576e+10 -3.588e+10 -4.856e+10 -3.831e+10 -5.114e+10 -4.060e+10 -5.345e+10 -4.268e+10 -5.544e+10 -4.452e+10 -5.707e+10 -4.608e+10 -5.832e+10 -4.733e+10 -5.915e+10 -4.823e+10 -5.955e+10 -4.878e+10 -5.950e+10 -4.894e+10 -5.900e+10 -4.871e+10 -5.805e+10 -4.810e+10 -5.667e+10 -4.710e+10 -5.487e+10 -4.574e+10 -5.269e+10 -4.402e+10 -5.015e+10 -4.199e+10 -4.731e+10 -3.968e+10 -4.420e+10 -3.712e+10 -4.088e+10 -3.437e+10 -3.741e+10 -3.147e+10 -3.383e+10 -2.847e+10 -3.022e+10 -2.542e+10 -2.661e+10 -2.238e+10 -2.308e+10 -1.939e+10 -1.967e+10 -1.650e+10 -1.643e+10 -1.376e+10 -1.342e+10 -1.121e+10 -1.066e+10 -8.878e+09 -8.184e+09 -6.796e+09 -6.029e+09 -4.983e+09 -4.203e+09 -3.457e+09 -2.718e+09 -2.223e+09 -1.573e+09 -1.281e+09 -7.571e+08 -6.240e+08 -2.490e+08 -2.414e+08 -1.522e+06 -7.832e+07 1.400e+08 5.756e+07 3.902e+08 3.039e+08 8.037e+08 6.722e+08 1.337e+09 1.126e+09 1.934e+09 1.621e+09 2.539e+09 2.110e+09 3.100e+09 2.550e+09 3.568e+09 2.898e+09 3.900e+09 3.120e+09 4.063e+09 3.190e+09 4.036e+09 3.093e+09 3.812e+09 2.828e+09 3.400e+09 2.412e+09 2.828e+09 1.880e+09 2.145e+09 1.285e+09 1.420e+09 7.072e+08 7.466e+08 2.471e+08 2.381e+08 2.991e+07 2.154e+07 -2.039e+08 -2.803e+08 -9.427e+08 -1.161e+09 -2.439e+09 -2.863e+09 -4.904e+09 -5.587e+09 -8.563e+09 -9.541e+09 -1.366e+10 -1.494e+10 -2.043e+10 -2.199e+10 -2.912e+10 -3.090e+10 -3.997e+10 -4.186e+10 -5.321e+10 -5.503e+10 -6.903e+10 -7.056e+10 -8.764e+10 -8.859e+10 -1.092e+11 -1.092e+11 -1.337e+11 -1.324e+11 -1.614e+11 -1.582e+11 -1.921e+11 -1.865e+11 -2.259e+11 -2.174e+11 -2.627e+11 -2.506e+11 -3.023e+11 -2.859e+11 -3.445e+11 -3.231e+11 -3.890e+11 -3.620e+11 -4.355e+11 -4.020e+11 -4.835e+11 -4.430e+11 -5.326e+11 -4.844e+11 -5.817e+11 -5.300e+11 -6.313e+11 -5.740e+11 -6.806e+11 -6.146e+11 -7.285e+11 -6.535e+11 -7.747e+11 -6.903e+11 -8.185e+11 -7.244e+11 -8.591e+11 -7.553e+11 -8.960e+11 -7.824e+11 -9.286e+11 -8.053e+11 -9.562e+11 -8.235e+11 -9.783e+11 -8.365e+11 -9.945e+11 -8.440e+11 -1.004e+12 -8.458e+11 -1.007e+12 -8.417e+11 -1.004e+12 -8.315e+11 -9.928e+11 -8.153e+11 -9.749e+11 -7.931e+11 -9.500e+11 -7.652e+11 -9.185e+11 -7.320e+11 -8.805e+11 -6.937e+11 -8.366e+11 -6.510e+11 -7.875e+11 -6.046e+11 -7.337e+11 -5.551e+11 -6.761e+11 -5.033e+11 -6.158e+11 -4.501e+11 -5.535e+11 -3.964e+11 -4.903e+11 -3.432e+11 -4.274e+11 -2.913e+11 -3.659e+11 -2.417e+11 -3.067e+11 -1.952e+11 -2.509e+11 -1.526e+11 -1.994e+11 -1.145e+11 -1.530e+11 -8.145e+10 -1.124e+11 -5.390e+10 -7.809e+10 -3.198e+10 -5.039e+10 -1.572e+10 -2.946e+10 -4.841e+09 -1.517e+10 1.372e+09 -6.895e+09 4.645e+09 -2.454e+09 8.087e+09 1.971e+09 1.428e+10 8.688e+09 2.313e+10 1.764e+10 3.345e+10 2.790e+10 4.402e+10 3.829e+10 5.369e+10 4.756e+10 6.138e+10 5.457e+10 6.619e+10 5.833e+10 6.741e+10 5.816e+10 6.463e+10 5.375e+10 5.783e+10 4.533e+10 4.745e+10 3.379e+10 3.454e+10 2.079e+10 2.080e+10 8.905e+09 8.736e+09 1.501e+09 1.431e+09 -4.484e+09 -4.300e+09 -2.315e+10 -2.188e+10 -6.561e+10 -6.123e+10 -1.414e+11 -1.305e+11 -2.620e+11 -2.392e+11 -4.405e+11 -3.984e+11 -6.924e+11 -6.207e+11 -1.036e+12 -9.206e+11 -1.490e+12 -1.314e+12 -2.077e+12 -1.819e+12 -2.823e+12 -2.455e+12 -3.755e+12 -3.243e+12 -4.903e+12 -4.208e+12 -6.300e+12 -5.374e+12 -7.980e+12 -6.766e+12 -9.983e+12 -8.416e+12 -1.235e+13 -1.035e+13 -1.511e+13 -1.260e+13 -1.833e+13 -1.521e+13 -2.205e+13 -1.820e+13 -2.630e+13 -2.160e+13 -3.115e+13 -2.546e+13 -3.664e+13 -2.980e+13 -4.282e+13 -3.467e+13 -4.975e+13 -4.009e+13 -5.748e+13 -4.611e+13 -6.606e+13 -5.276e+13 -7.554e+13 -6.009e+13 -8.596e+13 -6.810e+13 -9.737e+13 -7.683e+13 -1.098e+14 -8.631e+13 -1.233e+14 -9.656e+13 -1.380e+14 -1.076e+14 -1.537e+14 -1.194e+14 -1.706e+14 -1.321e+14 -1.887e+14 -1.456e+14 -2.080e+14 -1.599e+14 -2.286e+14 -1.750e+14 -2.503e+14 -1.910e+14 -2.732e+14 -2.078e+14 -2.973e+14 -2.253e+14 -3.225e+14 -2.437e+14 -3.489e+14 -2.627e+14 -3.764e+14 -2.825e+14 -4.049e+14 -3.030e+14 -4.344e+14 -3.241e+14 -4.649e+14 -3.458e+14 -4.961e+14 -3.680e+14 -5.282e+14 -3.907e+14 -5.610e+14 -4.137e+14 -5.944e+14 -4.371e+14 -6.283e+14 -4.608e+14 -6.625e+14 -4.846e+14 -6.971e+14 -5.085e+14 -7.318e+14 -5.325e+14 -7.665e+14 -5.563e+14 -8.012e+14 -5.800e+14 -8.356e+14 -6.034e+14 -8.696e+14 -6.264e+14 -9.031e+14 -6.489e+14 -9.360e+14 -6.709e+14 -9.681e+14 -6.922e+14 -9.993e+14 -7.128e+14 -1.029e+15 -7.325e+14 -1.058e+15 -7.512e+14 -1.086e+15 -7.688e+14 -1.112e+15 -7.852e+14 -1.136e+15 -8.002e+14 -1.159e+15 -8.139e+14 -1.180e+15 -8.263e+14 -1.199e+15 -8.372e+14 -1.216e+15 -8.467e+14 -1.231e+15 -8.546e+14 -1.243e+15 -8.610e+14 -1.254e+15 -8.658e+14 -1.262e+15 -8.689e+14 -1.267e+15 -8.705e+14 -1.270e+15 -8.704e+14 -1.271e+15 -8.687e+14 -1.269e+15 -8.653e+14 -1.265e+15 -8.604e+14 -1.259e+15 -8.539e+14 -1.250e+15 -8.459e+14 -1.239e+15 -8.363e+14 -1.225e+15 -8.254e+14 -1.209e+15 -8.130e+14 -1.192e+15 -7.994e+14 -1.172e+15 -7.845e+14 -1.150e+15 -7.684e+14 -1.127e+15 -7.513e+14 -1.102e+15 -7.331e+14 -1.075e+15 -7.140e+14 -1.047e+15 -6.940e+14 -1.017e+15 -6.734e+14 -9.868e+14 -6.520e+14 -9.552e+14 -6.301e+14 -9.228e+14 -6.077e+14 -8.896e+14 -5.850e+14 -8.559e+14 -5.619e+14 -8.217e+14 -5.387e+14 -7.872e+14 -5.153e+14 -7.525e+14 -4.920e+14 -7.178e+14 -4.686e+14 -6.832e+14 -4.455e+14 -6.488e+14 -4.225e+14 -6.148e+14 -3.999e+14 -5.814e+14 -3.776e+14 -5.485e+14 -3.559e+14 -5.162e+14 -3.345e+14 -4.847e+14 -3.137e+14 -4.539e+14 -2.935e+14 -4.240e+14 -2.739e+14 -3.950e+14 -2.549e+14 -3.671e+14 -2.367e+14 -3.401e+14 -2.192e+14 -3.143e+14 -2.024e+14 -2.896e+14 -1.863e+14 -2.660e+14 -1.711e+14 -2.436e+14 -1.566e+14 -2.225e+14 -1.430e+14 -2.024e+14 -1.301e+14 -1.836e+14 -1.180e+14 -1.660e+14 -1.067e+14 -1.495e+14 -9.614e+13 -1.342e+14 -8.633e+13 -1.199e+14 -7.724e+13 -1.068e+14 -6.886e+13 -9.472e+13 -6.115e+13 -8.365e+13 -5.409e+13 -7.354e+13 -4.765e+13 -6.436e+13 -4.179e+13 -5.606e+13 -3.650e+13 -4.858e+13 -3.172e+13 -4.187e+13 -2.743e+13 -3.590e+13 -2.361e+13 -3.059e+13 -2.020e+13 -2.591e+13 -1.719e+13 -2.180e+13 -1.454e+13 -1.821e+13 -1.222e+13 -1.511e+13 -1.020e+13 -1.243e+13 -8.456e+12 -1.014e+13 -6.953e+12 -8.195e+12 -5.669e+12 -6.558e+12 -4.580e+12 -5.191e+12 -3.665e+12 -4.060e+12 -2.900e+12 -3.134e+12 -2.269e+12 -2.384e+12 -1.752e+12 -1.784e+12 -1.334e+12 -1.312e+12 -9.989e+11 -9.440e+11 -7.345e+11 -6.633e+11 -5.290e+11 -4.535e+11 -3.720e+11 -3.000e+11 -2.545e+11 -1.909e+11 -1.684e+11 -1.158e+11 -1.071e+11 -6.624e+10 -6.492e+10 -3.508e+10 -3.699e+10 -1.677e+10 -1.946e+10 -6.935e+09 -9.171e+09 -2.291e+09 -3.674e+09 -5.070e+08 -1.125e+09 -3.905e+07 -1.967e+08 -7.023e+05 1.132e+07 -5.168e+07 9.887e+07 -3.412e+08 2.702e+08 -1.232e+09 4.646e+08 -3.306e+09 5.318e+08 -7.289e+09 1.978e+08 -1.397e+10 -8.923e+08 -2.408e+10 -3.123e+09 -3.833e+10 -6.880e+09 -5.730e+10 -1.253e+10 -8.139e+10 -2.035e+10 -1.109e+11 -3.060e+10 -1.458e+11 -4.344e+10 -1.861e+11 -5.891e+10 -2.315e+11 -7.701e+10 -2.815e+11 -9.766e+10 -3.355e+11 -1.207e+11 -3.926e+11 -1.457e+11 -4.521e+11 -1.726e+11 -5.129e+11 -2.008e+11 -5.741e+11 -2.300e+11 -6.346e+11 -2.597e+11 -6.934e+11 -2.895e+11 -7.495e+11 -3.190e+11 -8.021e+11 -3.477e+11 -8.501e+11 -3.751e+11 -8.928e+11 -4.008e+11 -9.296e+11 -4.244e+11 -9.599e+11 -4.456e+11 -9.832e+11 -4.641e+11 -9.993e+11 -4.797e+11 -1.008e+12 -4.921e+11 -1.010e+12 -5.012e+11 -1.004e+12 -5.070e+11 -9.911e+11 -5.093e+11 -9.718e+11 -5.083e+11 -9.462e+11 -5.039e+11 -9.150e+11 -4.965e+11 -8.787e+11 -4.860e+11 -8.380e+11 -4.727e+11 -7.936e+11 -4.569e+11 -7.462e+11 -4.388e+11 -6.965e+11 -4.187e+11 -6.453e+11 -3.969e+11 -5.933e+11 -3.739e+11 -5.411e+11 -3.497e+11 -4.894e+11 -3.249e+11 -4.389e+11 -2.998e+11 -3.899e+11 -2.746e+11 -3.430e+11 -2.496e+11 -2.986e+11 -2.251e+11 -2.571e+11 -2.014e+11 -2.186e+11 -1.786e+11 -1.835e+11 -1.570e+11 -1.518e+11 -1.368e+11 -1.235e+11 -1.179e+11 -9.868e+10 -1.006e+11 -7.720e+10 -8.495e+10 -5.892e+10 -7.087e+10 -4.368e+10 -5.843e+10 -3.124e+10 -4.757e+10 -2.131e+10 -3.824e+10 -1.361e+10 -3.039e+10 -7.817e+09 -2.391e+10 -3.593e+09 -1.868e+10 -6.032e+08 -1.457e+10 1.483e+09 -1.144e+10 2.960e+09 -9.097e+09 4.059e+09 -7.349e+09 4.921e+09 -6.012e+09 5.607e+09 -4.916e+09 6.105e+09 -3.961e+09 6.374e+09 -3.091e+09 6.376e+09 -2.289e+09 6.090e+09 -1.564e+09 5.522e+09 -9.324e+08 4.709e+09 -4.129e+08 3.721e+09 -2.276e+07 2.654e+09 2.292e+08 1.627e+09 3.437e+08 7.778e+08 3.368e+08 2.277e+08 2.725e+08 -1.614e+08 3.241e+08 0.005 -63.579 -61.536 -59.493 -57.450 -55.407 -53.387 -51.482 -49.675 -47.954 -46.313 -44.748 -43.256 -41.832 -40.474 -39.181 -37.949 -36.776 -35.660 -34.598 -33.588 -32.628 -31.717 -30.852 -30.031 -29.254 -28.518 -27.822 -27.165 -26.547 -25.964 -25.418 -24.906 -24.428 -23.984 -23.572 -23.193 -22.844 -22.527 -22.240 -21.984 -21.757 -21.560 -21.393 -21.254 -21.145 -21.065 -21.014 -20.992 -20.999 -21.035 -21.101 -21.196 -21.321 -21.476 -21.662 -21.878 -22.125 -22.403 -22.714 -23.058 -23.436 -23.847 -24.294 -24.777 -25.297 -25.855 -26.453 -27.093 -27.774 -28.500 -29.273 -30.095 -30.969 -31.897 -32.885 -33.936 -35.056 -36.252 -37.533 -38.912 -40.402 -42.025 -43.811 -45.803 -48.068 -50.713 -53.916 -57.938 -62.483 -63.521 -60.798 -58.067 -56.180 -54.935 -54.152 -53.736 -53.639 -53.839 -54.311 -54.929 -55.274 -54.580 -52.525 -49.742 -46.878 -44.181 -41.698 -39.412 -37.297 -35.328 -33.484 -31.748 -30.107 -28.552 -27.073 -25.664 -24.319 -23.033 -21.803 -20.624 -19.494 -18.411 -17.371 -16.373 -15.415 -14.496 -13.613 -12.765 -11.952 -11.172 -10.424 -9.707 -9.021 -8.363 -7.735 -7.135 -6.561 -6.015 -5.496 -5.002 -4.533 -4.090 -3.671 -3.277 -2.907 -2.561 -2.239 -1.940 -1.665 -1.414 -1.186 -0.981 -0.799 -0.641 -0.507 -0.396 -0.308 -0.245 -0.206 -0.191 -0.201 -0.237 -0.298 -0.385 -0.499 -0.641 -0.811 -1.010 -1.239 -1.499 -1.791 -2.117 -2.478 -2.876 -3.313 -3.791 -4.312 -4.880 -5.498 -6.169 -6.899 -7.692 -8.555 -9.495 -10.521 -11.645 -12.881 -14.245 -15.760 -17.456 -19.374 -21.571 -24.130 -27.187 -30.973 -35.954 -43.365 -60.192 -55.463 -58.889 -49.571 -39.526 -33.511 -29.157 -25.735 -22.919 -20.529 -18.461 -16.643 -15.026 -13.576 -12.267 -11.078 -9.993 -9.001 -8.092 -7.255 -6.486 -5.778 -5.126 -4.525 -3.973 -3.466 -3.002 -2.577 -2.191 -1.840 -1.524 -1.241 -0.989 -0.768 -0.577 -0.414 -0.279 -0.172 -0.090 -0.035 -0.005 0.000 -0.020 -0.064 -0.131 -0.223 -0.338 -0.477 -0.639 -0.824 -1.032 -1.264 -1.519 -1.797 -2.098 -2.423 -2.772 -3.145 -3.542 -3.964 -4.410 -4.881 -5.377 -5.900 -6.448 -7.024 -7.626 -8.257 -8.916 -9.604 -10.322 -11.071 -11.852 -12.666 -13.513 -14.395 -15.313 -16.268 -17.262 -18.297 -19.373 -20.493 -21.660 -22.874 -24.139 -25.457 -26.832 -28.267 -29.766 -31.333 -32.975 -34.697 -36.507 -38.415 -40.433 -42.575 -44.861 -47.315 -49.973 -52.880 -56.100 -59.719 -63.859 -68.688 -74.371 -79.016 -75.503 -70.116 -65.612 -61.837 -58.599 -55.765 -53.241 -50.961 -48.876 -46.951 -45.162 -43.489 -41.917 -40.438 -39.040 -37.718 -36.466 -35.278 -34.151 -33.083 -32.069 -31.108 -30.197 -29.333 -28.516 -27.744 -27.014 -26.325 -25.676 -25.066 -24.493 -23.957 -23.456 -22.990 -22.557 -22.157 -21.789 -21.453 -21.147 -20.872 -20.626 -20.409 -20.221 -20.062 -19.930 -19.827 -19.750 -19.701 -19.678 -19.683 -19.713 -19.771 -19.855 -19.965 -20.102 -20.265 -20.454 -20.670 -20.912 -21.180 -21.475 -21.797 -22.146 -22.523 -22.926 -23.358 -23.818 -24.306 -24.822 -25.368 -25.944 -26.549 -27.184 -27.851 -28.548 -29.277 -30.038 -30.832 -31.658 -32.517 -33.409 -34.334 -35.292 -36.283 -37.306 -38.360 -39.443 -40.553 -41.688 -42.844 -44.014 -45.195 -46.376 -47.550 -48.722 -49.894 -51.066 -52.238 0 1 1.0 1 N5 VV 34.25 38.05 0.05 -3.287e+09 -9.816e+09 -2.870e+09 -9.520e+09 -2.458e+09 -9.182e+09 -2.056e+09 -8.805e+09 -1.668e+09 -8.391e+09 -1.299e+09 -7.943e+09 -9.535e+08 -7.466e+09 -6.346e+08 -6.961e+09 -3.463e+08 -6.436e+09 -9.080e+07 -5.894e+09 1.297e+08 -5.340e+09 3.133e+08 -4.781e+09 4.594e+08 -4.223e+09 5.679e+08 -3.672e+09 6.393e+08 -3.135e+09 6.743e+08 -2.619e+09 6.763e+08 -2.131e+09 6.484e+08 -1.678e+09 5.950e+08 -1.267e+09 5.211e+08 -9.040e+08 4.332e+08 -5.963e+08 3.390e+08 -3.489e+08 2.480e+08 -1.653e+08 1.739e+08 -4.295e+07 1.309e+08 4.173e+07 1.156e+08 1.420e+08 9.940e+07 3.075e+08 5.207e+07 5.629e+08 -4.829e+07 9.181e+08 -2.182e+08 1.378e+09 -4.725e+08 1.946e+09 -8.258e+08 2.627e+09 -1.292e+09 3.422e+09 -1.885e+09 4.334e+09 -2.620e+09 5.366e+09 -3.510e+09 6.517e+09 -4.566e+09 7.787e+09 -5.802e+09 9.177e+09 -7.227e+09 1.068e+10 -8.850e+09 1.230e+10 -1.068e+10 1.403e+10 -1.272e+10 1.587e+10 -1.496e+10 1.779e+10 -1.742e+10 1.981e+10 -2.009e+10 2.190e+10 -2.295e+10 2.405e+10 -2.599e+10 2.625e+10 -2.921e+10 2.848e+10 -3.259e+10 3.072e+10 -3.609e+10 3.295e+10 -3.971e+10 3.516e+10 -4.340e+10 3.732e+10 -4.715e+10 3.942e+10 -5.093e+10 4.142e+10 -5.469e+10 4.330e+10 -5.840e+10 4.506e+10 -6.205e+10 4.666e+10 -6.559e+10 4.808e+10 -6.898e+10 4.932e+10 -7.221e+10 5.036e+10 -7.523e+10 5.119e+10 -7.804e+10 5.179e+10 -8.060e+10 5.218e+10 -8.289e+10 5.233e+10 -8.488e+10 5.225e+10 -8.657e+10 5.195e+10 -8.793e+10 5.143e+10 -8.895e+10 5.070e+10 -8.963e+10 4.977e+10 -8.995e+10 4.865e+10 -8.993e+10 4.737e+10 -8.955e+10 4.593e+10 -8.882e+10 4.435e+10 -8.775e+10 4.266e+10 -8.634e+10 4.087e+10 -8.461e+10 3.900e+10 -8.256e+10 3.707e+10 -8.021e+10 3.509e+10 -7.759e+10 3.308e+10 -7.470e+10 3.106e+10 -7.156e+10 2.904e+10 -6.822e+10 2.704e+10 -6.468e+10 2.506e+10 -6.097e+10 2.311e+10 -5.714e+10 2.121e+10 -5.321e+10 1.936e+10 -4.921e+10 1.758e+10 -4.518e+10 1.586e+10 -4.115e+10 1.421e+10 -3.716e+10 1.264e+10 -3.324e+10 1.114e+10 -2.943e+10 9.737e+09 -2.577e+10 8.417e+09 -2.228e+10 7.187e+09 -1.899e+10 6.050e+09 -1.593e+10 5.007e+09 -1.312e+10 4.063e+09 -1.058e+10 3.218e+09 -8.312e+09 2.472e+09 -6.333e+09 1.827e+09 -4.644e+09 1.283e+09 -3.239e+09 8.384e+08 -2.112e+09 4.907e+08 -1.251e+09 2.370e+08 -6.369e+08 7.208e+07 -2.510e+08 -1.196e+07 -6.248e+07 -4.138e+07 3.816e+07 -9.270e+07 1.960e+08 -2.130e+08 4.633e+08 -3.936e+08 8.216e+08 -6.188e+08 1.244e+09 -8.769e+08 1.704e+09 -1.157e+09 2.177e+09 -1.450e+09 2.641e+09 -1.746e+09 3.077e+09 -2.035e+09 3.469e+09 -2.309e+09 3.803e+09 -2.563e+09 4.070e+09 -2.789e+09 4.264e+09 -2.984e+09 4.380e+09 -3.144e+09 4.419e+09 -3.267e+09 4.383e+09 -3.352e+09 4.276e+09 -3.400e+09 4.105e+09 -3.411e+09 3.876e+09 -3.388e+09 3.600e+09 -3.334e+09 3.286e+09 -3.253e+09 2.944e+09 -3.147e+09 2.585e+09 -3.023e+09 2.218e+09 -2.884e+09 1.854e+09 -2.737e+09 1.499e+09 -2.586e+09 1.160e+09 -2.438e+09 8.405e+08 -2.300e+09 5.420e+08 -2.177e+09 2.619e+08 -2.075e+09 -6.331e+06 -2.001e+09 -2.720e+08 -1.955e+09 -5.463e+08 -1.940e+09 -8.415e+08 -1.952e+09 -1.168e+09 -1.988e+09 -1.534e+09 -2.040e+09 -1.942e+09 -2.102e+09 -2.395e+09 -2.166e+09 -2.887e+09 -2.224e+09 -3.414e+09 -2.273e+09 -3.968e+09 -2.305e+09 -4.537e+09 -2.317e+09 -5.111e+09 -2.307e+09 -5.676e+09 -2.270e+09 -6.218e+09 -2.207e+09 -6.726e+09 -2.117e+09 -7.185e+09 -2.000e+09 -7.583e+09 -1.858e+09 -7.910e+09 -1.693e+09 -8.157e+09 -1.509e+09 -8.316e+09 -1.309e+09 -8.384e+09 -1.098e+09 -8.358e+09 -8.805e+08 -8.240e+09 -6.617e+08 -8.031e+09 -4.464e+08 -7.739e+09 -2.395e+08 -7.372e+09 -4.573e+07 -6.940e+09 1.313e+08 -6.454e+09 2.884e+08 -5.929e+09 4.229e+08 -5.377e+09 5.335e+08 -4.812e+09 6.194e+08 -4.248e+09 6.808e+08 -3.697e+09 7.188e+08 -3.169e+09 7.351e+08 -2.674e+09 7.320e+08 -2.220e+09 7.123e+08 -1.811e+09 6.792e+08 -1.452e+09 6.360e+08 -1.142e+09 5.858e+08 -8.815e+08 5.319e+08 -6.674e+08 4.772e+08 -4.955e+08 4.240e+08 -3.609e+08 3.742e+08 -2.580e+08 3.291e+08 -1.810e+08 2.889e+08 -1.248e+08 2.534e+08 -8.504e+07 2.218e+08 -5.826e+07 1.928e+08 -4.195e+07 1.654e+08 -3.417e+07 1.393e+08 -3.329e+07 1.145e+08 -3.815e+07 9.219e+07 -4.891e+07 7.380e+07 -6.890e+07 6.019e+07 -1.059e+08 4.956e+07 -1.712e+08 3.667e+07 -2.781e+08 1.437e+07 -4.412e+08 -2.458e+07 -6.764e+08 -8.703e+07 -1.002e+09 -1.798e+08 -1.437e+09 -3.096e+08 -2.003e+09 -4.831e+08 -2.720e+09 -7.074e+08 -3.613e+09 -9.892e+08 -4.702e+09 -1.334e+09 -6.011e+09 -1.749e+09 -7.558e+09 -2.239e+09 -9.363e+09 -2.806e+09 -1.144e+10 -3.454e+09 -1.381e+10 -4.183e+09 -1.646e+10 -4.992e+09 -1.941e+10 -5.878e+09 -2.266e+10 -6.835e+09 -2.618e+10 -7.856e+09 -2.996e+10 -8.931e+09 -3.399e+10 -1.005e+10 -3.821e+10 -1.119e+10 -4.260e+10 -1.234e+10 -4.710e+10 -1.349e+10 -5.165e+10 -1.461e+10 -5.621e+10 -1.570e+10 -6.068e+10 -1.671e+10 -6.502e+10 -1.766e+10 -6.914e+10 -1.851e+10 -7.298e+10 -1.925e+10 -7.645e+10 -1.987e+10 -7.950e+10 -2.036e+10 -8.207e+10 -2.070e+10 -8.409e+10 -2.089e+10 -8.552e+10 -2.093e+10 -8.633e+10 -2.082e+10 -8.650e+10 -2.055e+10 -8.601e+10 -2.015e+10 -8.486e+10 -1.960e+10 -8.308e+10 -1.893e+10 -8.070e+10 -1.814e+10 -7.774e+10 -1.724e+10 -7.426e+10 -1.626e+10 -7.032e+10 -1.520e+10 -6.599e+10 -1.409e+10 -6.134e+10 -1.293e+10 -5.645e+10 -1.174e+10 -5.140e+10 -1.054e+10 -4.627e+10 -9.345e+09 -4.115e+10 -8.171e+09 -3.610e+10 -7.033e+09 -3.121e+10 -5.945e+09 -2.654e+10 -4.920e+09 -2.215e+10 -3.970e+09 -1.810e+10 -3.107e+09 -1.441e+10 -2.338e+09 -1.114e+10 -1.671e+09 -8.296e+09 -1.111e+09 -5.893e+09 -6.600e+08 -3.935e+09 -3.177e+08 -2.410e+09 -8.062e+07 -1.297e+09 5.868e+07 -5.667e+08 1.124e+08 -1.726e+08 1.093e+08 7.327e+06 1.323e+08 2.077e+08 2.411e+08 5.409e+08 4.086e+08 9.839e+08 5.969e+08 1.477e+09 7.817e+08 1.959e+09 9.433e+08 2.372e+09 1.065e+09 2.665e+09 1.134e+09 2.800e+09 1.141e+09 2.753e+09 1.083e+09 2.519e+09 9.615e+08 2.115e+09 7.871e+08 1.582e+09 5.770e+08 9.936e+08 3.575e+08 4.517e+08 1.626e+08 9.143e+07 3.444e+07 -7.205e+07 -1.848e+07 -6.310e+08 -1.856e+08 -1.972e+09 -5.839e+08 -4.372e+09 -1.284e+09 -8.125e+09 -2.356e+09 -1.355e+10 -3.869e+09 -2.098e+10 -5.890e+09 -3.075e+10 -8.485e+09 -4.322e+10 -1.172e+10 -5.870e+10 -1.564e+10 -7.751e+10 -2.029e+10 -9.998e+10 -2.571e+10 -1.263e+11 -3.192e+10 -1.568e+11 -3.894e+10 -1.915e+11 -4.678e+10 -2.305e+11 -5.540e+10 -2.739e+11 -6.480e+10 -3.217e+11 -7.495e+10 -3.737e+11 -8.578e+10 -4.297e+11 -9.725e+10 -4.894e+11 -1.093e+11 -5.524e+11 -1.218e+11 -6.183e+11 -1.347e+11 -6.867e+11 -1.478e+11 -7.568e+11 -1.612e+11 -8.280e+11 -1.745e+11 -8.997e+11 -1.878e+11 -9.719e+11 -1.926e+11 -1.044e+12 -2.193e+11 -1.112e+12 -2.317e+11 -1.177e+12 -2.434e+11 -1.239e+12 -2.542e+11 -1.295e+12 -2.639e+11 -1.346e+12 -2.723e+11 -1.391e+12 -2.793e+11 -1.429e+12 -2.846e+11 -1.459e+12 -2.881e+11 -1.480e+12 -2.898e+11 -1.492e+12 -2.894e+11 -1.495e+12 -2.868e+11 -1.488e+12 -2.822e+11 -1.471e+12 -2.753e+11 -1.444e+12 -2.664e+11 -1.408e+12 -2.553e+11 -1.362e+12 -2.423e+11 -1.306e+12 -2.275e+11 -1.243e+12 -2.112e+11 -1.171e+12 -1.935e+11 -1.093e+12 -1.748e+11 -1.010e+12 -1.555e+11 -9.224e+11 -1.357e+11 -8.320e+11 -1.161e+11 -7.401e+11 -9.679e+10 -6.484e+11 -7.827e+10 -5.584e+11 -6.091e+10 -4.716e+11 -4.499e+10 -3.893e+11 -3.080e+10 -3.130e+11 -1.859e+10 -2.438e+11 -8.514e+09 -1.827e+11 -6.596e+08 -1.303e+11 4.942e+09 -8.719e+10 8.374e+09 -5.343e+10 9.814e+09 -2.889e+10 9.591e+09 -1.291e+10 8.332e+09 -3.945e+09 7.286e+09 1.541e+09 8.153e+09 8.089e+09 1.135e+10 1.753e+10 1.565e+10 2.908e+10 1.999e+10 4.125e+10 2.371e+10 5.240e+10 2.635e+10 6.099e+10 2.757e+10 6.574e+10 2.716e+10 6.575e+10 2.505e+10 6.063e+10 2.137e+10 5.069e+10 1.644e+10 3.707e+10 1.083e+10 2.195e+10 5.427e+09 8.650e+09 1.410e+09 6.393e+08 -7.355e+08 -7.883e+09 -4.576e+09 -3.474e+10 -1.611e+10 -9.232e+10 -3.826e+10 -1.926e+11 -7.458e+10 -3.499e+11 -1.294e+11 -5.812e+11 -2.076e+11 -9.055e+11 -3.148e+11 -1.345e+12 -4.575e+11 -1.926e+12 -6.431e+11 -2.675e+12 -8.794e+11 -3.626e+12 -1.176e+12 -4.811e+12 -1.541e+12 -6.269e+12 -1.987e+12 -8.042e+12 -2.526e+12 -1.018e+13 -3.168e+12 -1.272e+13 -3.928e+12 -1.572e+13 -4.819e+12 -1.923e+13 -5.856e+12 -2.331e+13 -7.054e+12 -2.803e+13 -8.429e+12 -3.344e+13 -9.997e+12 -3.960e+13 -1.177e+13 -4.658e+13 -1.378e+13 -5.446e+13 -1.602e+13 -6.328e+13 -1.852e+13 -7.313e+13 -2.129e+13 -8.407e+13 -2.436e+13 -9.615e+13 -2.774e+13 -1.095e+14 -3.145e+13 -1.240e+14 -3.550e+13 -1.399e+14 -3.989e+13 -1.572e+14 -4.464e+13 -1.759e+14 -4.977e+13 -1.960e+14 -5.527e+13 -2.176e+14 -6.116e+13 -2.408e+14 -6.744e+13 -2.654e+14 -7.412e+13 -2.916e+14 -8.120e+13 -3.193e+14 -8.868e+13 -3.485e+14 -9.655e+13 -3.793e+14 -1.048e+14 -4.115e+14 -1.135e+14 -4.451e+14 -1.225e+14 -4.801e+14 -1.320e+14 -5.165e+14 -1.417e+14 -5.541e+14 -1.519e+14 -5.928e+14 -1.623e+14 -6.327e+14 -1.731e+14 -6.735e+14 -1.842e+14 -7.152e+14 -1.955e+14 -7.577e+14 -2.071e+14 -8.008e+14 -2.189e+14 -8.445e+14 -2.309e+14 -8.885e+14 -2.430e+14 -9.327e+14 -2.552e+14 -9.771e+14 -2.675e+14 -1.021e+15 -2.798e+14 -1.065e+15 -2.921e+14 -1.109e+15 -3.043e+14 -1.152e+15 -3.164e+14 -1.194e+15 -3.284e+14 -1.236e+15 -3.401e+14 -1.276e+15 -3.515e+14 -1.315e+15 -3.627e+14 -1.353e+15 -3.734e+14 -1.389e+15 -3.837e+14 -1.423e+15 -3.935e+14 -1.455e+15 -4.025e+14 -1.485e+15 -4.109e+14 -1.513e+15 -4.186e+14 -1.538e+15 -4.257e+14 -1.561e+15 -4.320e+14 -1.581e+15 -4.376e+14 -1.598e+15 -4.425e+14 -1.613e+15 -4.466e+14 -1.624e+15 -4.498e+14 -1.633e+15 -4.523e+14 -1.638e+15 -4.539e+14 -1.641e+15 -4.548e+14 -1.640e+15 -4.547e+14 -1.636e+15 -4.539e+14 -1.629e+15 -4.523e+14 -1.619e+15 -4.498e+14 -1.606e+15 -4.466e+14 -1.590e+15 -4.426e+14 -1.571e+15 -4.379e+14 -1.549e+15 -4.325e+14 -1.525e+15 -4.263e+14 -1.498e+15 -4.196e+14 -1.469e+15 -4.122e+14 -1.438e+15 -4.042e+14 -1.404e+15 -3.957e+14 -1.369e+15 -3.867e+14 -1.332e+15 -3.772e+14 -1.294e+15 -3.673e+14 -1.254e+15 -3.570e+14 -1.213e+15 -3.463e+14 -1.171e+15 -3.353e+14 -1.128e+15 -3.241e+14 -1.085e+15 -3.126e+14 -1.041e+15 -3.010e+14 -9.966e+14 -2.892e+14 -9.524e+14 -2.773e+14 -9.082e+14 -2.654e+14 -8.642e+14 -2.534e+14 -8.206e+14 -2.414e+14 -7.774e+14 -2.295e+14 -7.350e+14 -2.178e+14 -6.934e+14 -2.061e+14 -6.526e+14 -1.946e+14 -6.127e+14 -1.834e+14 -5.739e+14 -1.723e+14 -5.361e+14 -1.616e+14 -4.996e+14 -1.511e+14 -4.644e+14 -1.409e+14 -4.305e+14 -1.311e+14 -3.979e+14 -1.216e+14 -3.668e+14 -1.125e+14 -3.371e+14 -1.038e+14 -3.089e+14 -9.549e+13 -2.822e+14 -8.759e+13 -2.570e+14 -8.011e+13 -2.332e+14 -7.304e+13 -2.110e+14 -6.640e+13 -1.902e+14 -6.016e+13 -1.708e+14 -5.433e+13 -1.528e+14 -4.891e+13 -1.362e+14 -4.387e+13 -1.209e+14 -3.921e+13 -1.069e+14 -3.492e+13 -9.413e+13 -3.098e+13 -8.249e+13 -2.738e+13 -7.195e+13 -2.410e+13 -6.245e+13 -2.112e+13 -5.393e+13 -1.843e+13 -4.632e+13 -1.601e+13 -3.956e+13 -1.383e+13 -3.359e+13 -1.189e+13 -2.834e+13 -1.017e+13 -2.375e+13 -8.649e+12 -1.976e+13 -7.308e+12 -1.632e+13 -6.136e+12 -1.337e+13 -5.115e+12 -1.086e+13 -4.232e+12 -8.732e+12 -3.473e+12 -6.952e+12 -2.825e+12 -5.473e+12 -2.276e+12 -4.256e+12 -1.814e+12 -3.265e+12 -1.430e+12 -2.467e+12 -1.112e+12 -1.833e+12 -8.529e+11 -1.336e+12 -6.437e+11 -9.523e+11 -4.770e+11 -6.623e+11 -3.463e+11 -4.473e+11 -2.455e+11 -2.917e+11 -1.692e+11 -1.825e+11 -1.129e+11 -1.084e+11 -7.240e+10 -6.037e+10 -4.420e+10 -3.089e+10 -2.538e+10 -1.408e+10 -1.344e+10 -5.417e+09 -6.370e+09 -1.579e+09 -2.573e+09 -2.491e+08 -8.024e+08 2.569e+07 -1.488e+08 1.501e+07 1.702e+07 -6.825e+07 1.482e+08 -5.247e+08 4.705e+08 -1.899e+09 9.994e+08 -4.934e+09 1.667e+09 -1.049e+10 2.321e+09 -1.944e+10 2.751e+09 -3.262e+10 2.718e+09 -5.077e+10 1.967e+09 -7.443e+10 2.611e+08 -1.040e+11 -2.619e+09 -1.398e+11 -6.862e+09 -1.816e+11 -1.260e+10 -2.292e+11 -1.992e+10 -2.824e+11 -2.889e+10 -3.403e+11 -3.949e+10 -4.023e+11 -5.166e+10 -4.673e+11 -6.531e+10 -5.342e+11 -8.028e+10 -6.020e+11 -9.641e+10 -6.697e+11 -1.135e+11 -7.358e+11 -1.313e+11 -7.995e+11 -1.498e+11 -8.598e+11 -1.685e+11 -9.153e+11 -1.873e+11 -9.654e+11 -2.057e+11 -1.009e+12 -2.237e+11 -1.046e+12 -2.409e+11 -1.076e+12 -2.571e+11 -1.097e+12 -2.720e+11 -1.111e+12 -2.855e+11 -1.117e+12 -2.974e+11 -1.115e+12 -3.074e+11 -1.105e+12 -3.156e+11 -1.087e+12 -3.217e+11 -1.063e+12 -3.257e+11 -1.032e+12 -3.275e+11 -9.955e+11 -3.272e+11 -9.537e+11 -3.248e+11 -9.075e+11 -3.203e+11 -8.575e+11 -3.137e+11 -8.047e+11 -3.054e+11 -7.496e+11 -2.952e+11 -6.932e+11 -2.836e+11 -6.361e+11 -2.705e+11 -5.791e+11 -2.562e+11 -5.228e+11 -2.410e+11 -4.678e+11 -2.251e+11 -4.147e+11 -2.087e+11 -3.641e+11 -1.919e+11 -3.162e+11 -1.751e+11 -2.714e+11 -1.585e+11 -2.302e+11 -1.422e+11 -1.925e+11 -1.264e+11 -1.585e+11 -1.113e+11 -1.284e+11 -9.705e+10 -1.020e+11 -8.374e+10 -7.931e+10 -7.146e+10 -6.010e+10 -6.031e+10 -4.416e+10 -5.031e+10 -3.122e+10 -4.149e+10 -2.101e+10 -3.386e+10 -1.315e+10 -2.739e+10 -7.268e+09 -2.204e+10 -2.984e+09 -1.775e+10 1.041e+08 -1.441e+10 2.369e+09 -1.188e+10 4.115e+09 -9.979e+09 5.548e+09 -8.517e+09 6.771e+09 -7.298e+09 7.785e+09 -6.196e+09 8.543e+09 -5.134e+09 8.989e+09 -4.081e+09 9.075e+09 -3.045e+09 8.784e+09 -2.050e+09 8.129e+09 -1.128e+09 7.159e+09 -3.197e+08 5.952e+09 3.420e+08 4.614e+09 8.321e+08 3.276e+09 1.141e+09 2.070e+09 1.291e+09 1.095e+09 1.368e+09 0.005 -63.841 -62.116 -60.391 -58.666 -56.941 -55.197 -53.369 -51.533 -49.732 -47.987 -46.311 -44.708 -43.178 -41.721 -40.335 -39.016 -37.763 -36.573 -35.442 -34.368 -33.348 -32.381 -31.464 -30.594 -29.770 -28.990 -28.252 -27.556 -26.899 -26.280 -25.699 -25.153 -24.643 -24.167 -23.724 -23.315 -22.937 -22.591 -22.276 -21.991 -21.737 -21.513 -21.318 -21.152 -21.016 -20.908 -20.829 -20.779 -20.759 -20.766 -20.803 -20.869 -20.963 -21.087 -21.240 -21.423 -21.636 -21.879 -22.152 -22.457 -22.793 -23.162 -23.563 -23.997 -24.466 -24.968 -25.507 -26.081 -26.693 -27.342 -28.031 -28.760 -29.530 -30.343 -31.200 -32.103 -33.052 -34.050 -35.098 -36.199 -37.354 -38.565 -39.834 -41.160 -42.544 -43.982 -45.465 -46.975 -48.478 -49.923 -51.240 -52.354 -53.221 -53.854 -54.332 -54.768 -55.288 -56.006 -57.010 -58.218 -58.904 -57.619 -54.522 -51.078 -47.898 -45.050 -42.484 -40.146 -37.994 -35.994 -34.122 -32.361 -30.696 -29.117 -27.616 -26.185 -24.818 -23.512 -22.261 -21.062 -19.913 -18.810 -17.752 -16.736 -15.760 -14.823 -13.923 -13.059 -12.230 -11.433 -10.670 -9.937 -9.235 -8.563 -7.919 -7.304 -6.716 -6.155 -5.621 -5.113 -4.630 -4.173 -3.740 -3.332 -2.948 -2.588 -2.251 -1.938 -1.649 -1.383 -1.140 -0.921 -0.725 -0.552 -0.402 -0.276 -0.173 -0.094 -0.038 -0.007 0.000 -0.018 -0.061 -0.130 -0.225 -0.346 -0.496 -0.673 -0.880 -1.116 -1.384 -1.684 -2.018 -2.387 -2.793 -3.238 -3.724 -4.253 -4.830 -5.456 -6.136 -6.875 -7.677 -8.550 -9.500 -10.536 -11.670 -12.916 -14.291 -15.816 -17.522 -19.447 -21.646 -24.200 -27.230 -30.939 -35.697 -42.305 -53.073 -75.126 -57.880 -44.798 -37.374 -32.201 -28.241 -25.043 -22.369 -20.079 -18.083 -16.321 -14.749 -13.336 -12.057 -10.894 -9.833 -8.861 -7.970 -7.151 -6.397 -5.702 -5.064 -4.476 -3.935 -3.440 -2.986 -2.572 -2.195 -1.854 -1.548 -1.274 -1.031 -0.819 -0.637 -0.483 -0.357 -0.257 -0.185 -0.138 -0.116 -0.120 -0.148 -0.200 -0.277 -0.377 -0.501 -0.648 -0.819 -1.013 -1.230 -1.471 -1.735 -2.022 -2.334 -2.669 -3.028 -3.411 -3.818 -4.250 -4.707 -5.190 -5.698 -6.232 -6.792 -7.380 -7.996 -8.640 -9.312 -10.015 -10.749 -11.513 -12.310 -13.141 -14.006 -14.907 -15.845 -16.821 -17.837 -18.896 -19.998 -21.146 -22.342 -23.589 -24.890 -26.248 -27.668 -29.153 -30.710 -32.346 -34.068 -35.886 -37.814 -39.868 -42.069 -44.444 -47.024 -49.833 -52.840 -55.798 -57.971 -58.582 -58.013 -57.141 -56.384 -55.821 -55.413 -55.084 -54.743 -54.281 -53.597 -52.628 -51.384 -49.929 -48.350 -46.725 -45.106 -43.525 -42.001 -40.541 -39.149 -37.824 -36.565 -35.369 -34.234 -33.158 -32.138 -31.171 -30.256 -29.391 -28.572 -27.799 -27.070 -26.383 -25.737 -25.130 -24.561 -24.029 -23.533 -23.072 -22.645 -22.251 -21.890 -21.560 -21.262 -20.993 -20.755 -20.546 -20.366 -20.214 -20.091 -19.995 -19.927 -19.887 -19.873 -19.886 -19.926 -19.992 -20.086 -20.205 -20.351 -20.523 -20.722 -20.947 -21.199 -21.478 -21.783 -22.115 -22.474 -22.861 -23.276 -23.718 -24.188 -24.688 -25.216 -25.773 -26.360 -26.977 -27.625 -28.304 -29.014 -29.756 -30.531 -31.338 -32.178 -33.052 -33.960 -34.902 -35.878 -36.887 -37.930 -39.006 -40.114 -41.251 -42.417 -43.607 -44.817 -46.043 -47.277 -48.512 -49.747 -50.982 -52.217 0 1 1.0 1 N5 VH 34.25 38.05 0.05 3.945e+09 -7.079e+09 4.012e+09 -6.705e+09 4.053e+09 -6.309e+09 4.066e+09 -5.895e+09 4.051e+09 -5.467e+09 4.006e+09 -5.030e+09 3.932e+09 -4.588e+09 3.828e+09 -4.145e+09 3.695e+09 -3.707e+09 3.533e+09 -3.276e+09 3.343e+09 -2.857e+09 3.129e+09 -2.454e+09 2.891e+09 -2.071e+09 2.633e+09 -1.710e+09 2.359e+09 -1.376e+09 2.073e+09 -1.072e+09 1.780e+09 -7.995e+08 1.486e+09 -5.619e+08 1.199e+09 -3.607e+08 9.246e+08 -1.970e+08 6.727e+08 -7.187e+07 4.522e+08 1.528e+07 2.727e+08 6.761e+07 1.426e+08 9.459e+07 5.648e+07 1.205e+08 -2.427e+07 1.783e+08 -1.543e+08 2.822e+08 -3.733e+08 4.296e+08 -7.060e+08 6.146e+08 -1.170e+09 8.312e+08 -1.781e+09 1.074e+09 -2.557e+09 1.339e+09 -3.509e+09 1.620e+09 -4.654e+09 1.911e+09 -6.005e+09 2.206e+09 -7.574e+09 2.499e+09 -9.371e+09 2.782e+09 -1.141e+10 3.050e+09 -1.369e+10 3.294e+09 -1.622e+10 3.509e+09 -1.900e+10 3.686e+09 -2.203e+10 3.820e+09 -2.531e+10 3.904e+09 -2.882e+10 3.931e+09 -3.257e+10 3.897e+09 -3.653e+10 3.795e+09 -4.068e+10 3.622e+09 -4.501e+10 3.373e+09 -4.949e+10 3.047e+09 -5.408e+10 2.639e+09 -5.877e+10 2.150e+09 -6.351e+10 1.579e+09 -6.827e+10 9.271e+08 -7.302e+10 1.948e+08 -7.770e+10 -6.136e+08 -8.228e+10 -1.495e+09 -8.673e+10 -2.445e+09 -9.099e+10 -3.455e+09 -9.504e+10 -4.520e+09 -9.883e+10 -5.633e+09 -1.023e+11 -6.782e+09 -1.055e+11 -7.960e+09 -1.083e+11 -9.157e+09 -1.108e+11 -1.036e+10 -1.128e+11 -1.155e+10 -1.145e+11 -1.272e+10 -1.156e+11 -1.386e+10 -1.164e+11 -1.496e+10 -1.166e+11 -1.599e+10 -1.165e+11 -1.696e+10 -1.158e+11 -1.784e+10 -1.147e+11 -1.862e+10 -1.132e+11 -1.930e+10 -1.112e+11 -1.986e+10 -1.088e+11 -2.031e+10 -1.061e+11 -2.062e+10 -1.029e+11 -2.080e+10 -9.947e+10 -2.084e+10 -9.568e+10 -2.075e+10 -9.161e+10 -2.052e+10 -8.728e+10 -2.015e+10 -8.274e+10 -1.966e+10 -7.803e+10 -1.905e+10 -7.317e+10 -1.832e+10 -6.821e+10 -1.749e+10 -6.319e+10 -1.658e+10 -5.814e+10 -1.559e+10 -5.312e+10 -1.453e+10 -4.816e+10 -1.343e+10 -4.329e+10 -1.230e+10 -3.856e+10 -1.116e+10 -3.400e+10 -1.001e+10 -2.964e+10 -8.887e+09 -2.553e+10 -7.791e+09 -2.167e+10 -6.741e+09 -1.811e+10 -5.745e+09 -1.485e+10 -4.816e+09 -1.192e+10 -3.962e+09 -9.312e+09 -3.189e+09 -7.048e+09 -2.501e+09 -5.124e+09 -1.902e+09 -3.531e+09 -1.391e+09 -2.262e+09 -9.668e+08 -1.302e+09 -6.267e+08 -6.290e+08 -3.661e+08 -2.198e+08 -1.820e+08 -2.815e+07 -8.031e+07 9.869e+07 -5.705e+07 3.250e+08 -5.442e+07 6.919e+08 -2.637e+07 1.171e+09 3.072e+07 1.731e+09 1.102e+08 2.337e+09 2.045e+08 2.962e+09 3.065e+08 3.577e+09 4.095e+08 4.156e+09 5.077e+08 4.679e+09 5.963e+08 5.127e+09 6.715e+08 5.487e+09 7.304e+08 5.749e+09 7.711e+08 5.907e+09 7.927e+08 5.959e+09 7.951e+08 5.906e+09 7.788e+08 5.754e+09 7.454e+08 5.509e+09 6.966e+08 5.183e+09 6.350e+08 4.788e+09 5.631e+08 4.339e+09 4.841e+08 3.849e+09 4.010e+08 3.336e+09 3.170e+08 2.815e+09 2.355e+08 2.301e+09 1.593e+08 1.811e+09 9.127e+07 1.358e+09 3.410e+07 9.557e+08 -1.013e+07 6.149e+08 -3.968e+07 3.460e+08 -5.361e+07 1.560e+08 -5.277e+07 4.598e+07 -4.534e+07 -1.751e+07 -5.504e+07 -1.083e+08 -9.956e+07 -2.781e+08 -1.708e+08 -5.345e+08 -2.598e+08 -8.745e+08 -3.627e+08 -1.292e+09 -4.765e+08 -1.779e+09 -5.979e+08 -2.325e+09 -7.239e+08 -2.920e+09 -8.507e+08 -3.551e+09 -9.748e+08 -4.205e+09 -1.093e+09 -4.868e+09 -1.201e+09 -5.525e+09 -1.295e+09 -6.163e+09 -1.374e+09 -6.767e+09 -1.434e+09 -7.325e+09 -1.472e+09 -7.824e+09 -1.489e+09 -8.254e+09 -1.482e+09 -8.604e+09 -1.451e+09 -8.870e+09 -1.398e+09 -9.044e+09 -1.323e+09 -9.124e+09 -1.228e+09 -9.110e+09 -1.116e+09 -9.003e+09 -9.900e+08 -8.807e+09 -8.529e+08 -8.529e+09 -7.085e+08 -8.175e+09 -5.607e+08 -7.755e+09 -4.134e+08 -7.281e+09 -2.700e+08 -6.764e+09 -1.342e+08 -6.216e+09 -8.987e+06 -5.649e+09 1.032e+08 -5.075e+09 2.004e+08 -4.506e+09 2.811e+08 -3.953e+09 3.448e+08 -3.424e+09 3.911e+08 -2.927e+09 4.208e+08 -2.469e+09 4.347e+08 -2.053e+09 4.345e+08 -1.683e+09 4.220e+08 -1.359e+09 3.993e+08 -1.081e+09 3.687e+08 -8.464e+08 3.326e+08 -6.529e+08 2.930e+08 -4.964e+08 2.517e+08 -3.726e+08 2.107e+08 -2.769e+08 1.710e+08 -2.047e+08 1.338e+08 -1.519e+08 1.001e+08 -1.149e+08 7.030e+07 -9.094e+07 4.500e+07 -7.870e+07 2.388e+07 -7.868e+07 4.709e+06 -9.327e+07 -1.758e+07 -1.263e+08 -5.035e+07 -1.833e+08 -1.016e+08 -2.718e+08 -1.789e+08 -4.014e+08 -2.895e+08 -5.840e+08 -4.413e+08 -8.335e+08 -6.420e+08 -1.165e+09 -8.995e+08 -1.595e+09 -1.222e+09 -2.142e+09 -1.618e+09 -2.823e+09 -2.095e+09 -3.658e+09 -2.659e+09 -4.665e+09 -3.317e+09 -5.860e+09 -4.074e+09 -7.261e+09 -4.933e+09 -8.881e+09 -5.897e+09 -1.073e+10 -6.964e+09 -1.282e+10 -8.134e+09 -1.515e+10 -9.402e+09 -1.773e+10 -1.076e+10 -2.054e+10 -1.220e+10 -2.358e+10 -1.371e+10 -2.683e+10 -1.527e+10 -3.027e+10 -1.687e+10 -3.387e+10 -1.848e+10 -3.759e+10 -2.010e+10 -4.140e+10 -2.169e+10 -4.526e+10 -2.323e+10 -4.910e+10 -2.470e+10 -5.290e+10 -2.609e+10 -5.657e+10 -2.735e+10 -6.008e+10 -2.847e+10 -6.335e+10 -2.943e+10 -6.635e+10 -3.021e+10 -6.899e+10 -3.079e+10 -7.125e+10 -3.116e+10 -7.308e+10 -3.130e+10 -7.443e+10 -3.122e+10 -7.527e+10 -3.091e+10 -7.559e+10 -3.037e+10 -7.536e+10 -2.961e+10 -7.459e+10 -2.864e+10 -7.328e+10 -2.748e+10 -7.145e+10 -2.613e+10 -6.913e+10 -2.463e+10 -6.634e+10 -2.299e+10 -6.314e+10 -2.124e+10 -5.956e+10 -1.942e+10 -5.569e+10 -1.754e+10 -5.157e+10 -1.564e+10 -4.727e+10 -1.375e+10 -4.287e+10 -1.189e+10 -3.843e+10 -1.010e+10 -3.401e+10 -8.395e+09 -2.970e+10 -6.803e+09 -2.555e+10 -5.343e+09 -2.161e+10 -4.030e+09 -1.794e+10 -2.876e+09 -1.458e+10 -1.891e+09 -1.156e+10 -1.075e+09 -8.913e+09 -4.297e+08 -6.644e+09 5.343e+07 -4.756e+09 3.865e+08 -3.245e+09 5.869e+08 -2.090e+09 6.796e+08 -1.258e+09 6.986e+08 -6.977e+08 6.884e+08 -3.331e+08 6.993e+08 -6.636e+07 7.655e+08 1.825e+08 8.834e+08 4.459e+08 1.022e+09 7.142e+08 1.146e+09 9.563e+08 1.228e+09 1.137e+09 1.247e+09 1.228e+09 1.195e+09 1.208e+09 1.071e+09 1.075e+09 8.838e+08 8.439e+08 6.520e+08 5.511e+08 4.054e+08 2.583e+08 1.840e+08 5.306e+07 3.820e+07 -4.522e+07 -2.426e+07 -3.993e+08 -2.277e+08 -1.270e+09 -7.127e+08 -2.863e+09 -1.570e+09 -5.407e+09 -2.891e+09 -9.155e+09 -4.773e+09 -1.437e+10 -7.309e+09 -2.134e+10 -1.060e+10 -3.036e+10 -1.473e+10 -4.171e+10 -1.978e+10 -5.569e+10 -2.584e+10 -7.259e+10 -3.297e+10 -9.263e+10 -4.121e+10 -1.160e+11 -5.060e+10 -1.431e+11 -6.116e+10 -1.738e+11 -7.289e+10 -2.082e+11 -8.575e+10 -2.466e+11 -9.972e+10 -2.887e+11 -1.147e+11 -3.345e+11 -1.306e+11 -3.839e+11 -1.474e+11 -4.365e+11 -1.648e+11 -4.920e+11 -1.828e+11 -5.500e+11 -2.011e+11 -6.101e+11 -2.197e+11 -6.717e+11 -2.381e+11 -7.342e+11 -2.564e+11 -7.981e+11 -2.786e+11 -8.615e+11 -2.988e+11 -9.229e+11 -3.156e+11 -9.821e+11 -3.312e+11 -1.038e+12 -3.454e+11 -1.091e+12 -3.580e+11 -1.140e+12 -3.687e+11 -1.183e+12 -3.774e+11 -1.220e+12 -3.837e+11 -1.251e+12 -3.877e+11 -1.274e+12 -3.892e+11 -1.290e+12 -3.880e+11 -1.297e+12 -3.842e+11 -1.296e+12 -3.777e+11 -1.287e+12 -3.685e+11 -1.268e+12 -3.567e+11 -1.241e+12 -3.424e+11 -1.205e+12 -3.259e+11 -1.161e+12 -3.073e+11 -1.109e+12 -2.869e+11 -1.050e+12 -2.650e+11 -9.854e+11 -2.419e+11 -9.154e+11 -2.180e+11 -8.411e+11 -1.937e+11 -7.639e+11 -1.694e+11 -6.849e+11 -1.454e+11 -6.053e+11 -1.222e+11 -5.267e+11 -1.002e+11 -4.501e+11 -7.974e+10 -3.768e+11 -6.106e+10 -3.082e+11 -4.448e+10 -2.451e+11 -3.019e+10 -1.884e+11 -1.830e+10 -1.390e+11 -8.913e+09 -9.723e+10 -1.978e+09 -6.337e+10 2.610e+09 -3.746e+10 5.060e+09 -1.918e+10 5.734e+09 -7.862e+09 5.297e+09 -1.867e+09 5.042e+09 2.229e+09 6.465e+09 7.911e+09 9.567e+09 1.581e+10 1.325e+10 2.495e+10 1.675e+10 3.397e+10 1.952e+10 4.152e+10 2.120e+10 4.643e+10 2.151e+10 4.778e+10 2.032e+10 4.510e+10 1.770e+10 3.844e+10 1.386e+10 2.858e+10 9.298e+09 1.717e+10 4.763e+09 6.858e+09 1.303e+09 5.232e+08 -5.825e+08 -6.367e+09 -3.877e+09 -2.832e+10 -1.382e+10 -7.592e+10 -3.309e+10 -1.596e+11 -6.484e+10 -2.920e+11 -1.129e+11 -4.882e+11 -1.815e+11 -7.652e+11 -2.756e+11 -1.143e+12 -4.008e+11 -1.645e+12 -5.633e+11 -2.296e+12 -7.697e+11 -3.125e+12 -1.028e+12 -4.164e+12 -1.346e+12 -5.447e+12 -1.731e+12 -7.012e+12 -2.195e+12 -8.902e+12 -2.747e+12 -1.116e+13 -3.396e+12 -1.383e+13 -4.154e+12 -1.697e+13 -5.032e+12 -2.062e+13 -6.042e+12 -2.485e+13 -7.195e+12 -2.971e+13 -8.503e+12 -3.526e+13 -9.978e+12 -4.156e+13 -1.163e+13 -4.868e+13 -1.348e+13 -5.667e+13 -1.552e+13 -6.560e+13 -1.778e+13 -7.553e+13 -2.026e+13 -8.653e+13 -2.298e+13 -9.867e+13 -2.595e+13 -1.120e+14 -2.917e+13 -1.265e+14 -3.265e+13 -1.424e+14 -3.639e+13 -1.596e+14 -4.041e+13 -1.781e+14 -4.469e+13 -1.981e+14 -4.924e+13 -2.195e+14 -5.406e+13 -2.424e+14 -5.915e+13 -2.667e+14 -6.451e+13 -2.925e+14 -7.013e+13 -3.198e+14 -7.600e+13 -3.486e+14 -8.211e+13 -3.788e+14 -8.846e+13 -4.105e+14 -9.502e+13 -4.435e+14 -1.018e+14 -4.778e+14 -1.088e+14 -5.134e+14 -1.159e+14 -5.503e+14 -1.232e+14 -5.882e+14 -1.306e+14 -6.271e+14 -1.381e+14 -6.670e+14 -1.457e+14 -7.077e+14 -1.534e+14 -7.491e+14 -1.611e+14 -7.911e+14 -1.688e+14 -8.335e+14 -1.765e+14 -8.762e+14 -1.842e+14 -9.191e+14 -1.917e+14 -9.620e+14 -1.992e+14 -1.005e+15 -2.065e+14 -1.047e+15 -2.136e+14 -1.089e+15 -2.206e+14 -1.130e+15 -2.272e+14 -1.171e+15 -2.337e+14 -1.210e+15 -2.398e+14 -1.248e+15 -2.456e+14 -1.285e+15 -2.510e+14 -1.321e+15 -2.560e+14 -1.354e+15 -2.606e+14 -1.386e+15 -2.645e+14 -1.416e+15 -2.679e+14 -1.444e+15 -2.707e+14 -1.469e+15 -2.731e+14 -1.492e+15 -2.749e+14 -1.512e+15 -2.763e+14 -1.530e+15 -2.771e+14 -1.545e+15 -2.773e+14 -1.558e+15 -2.771e+14 -1.567e+15 -2.763e+14 -1.573e+15 -2.750e+14 -1.577e+15 -2.731e+14 -1.577e+15 -2.708e+14 -1.575e+15 -2.680e+14 -1.569e+15 -2.648e+14 -1.561e+15 -2.611e+14 -1.550e+15 -2.569e+14 -1.535e+15 -2.524e+14 -1.519e+15 -2.475e+14 -1.499e+15 -2.422e+14 -1.477e+15 -2.366e+14 -1.452e+15 -2.307e+14 -1.425e+15 -2.246e+14 -1.396e+15 -2.182e+14 -1.365e+15 -2.116e+14 -1.331e+15 -2.048e+14 -1.296e+15 -1.979e+14 -1.260e+15 -1.908e+14 -1.222e+15 -1.837e+14 -1.183e+15 -1.765e+14 -1.143e+15 -1.692e+14 -1.102e+15 -1.620e+14 -1.060e+15 -1.547e+14 -1.018e+15 -1.475e+14 -9.751e+14 -1.403e+14 -9.323e+14 -1.332e+14 -8.894e+14 -1.262e+14 -8.467e+14 -1.193e+14 -8.043e+14 -1.126e+14 -7.623e+14 -1.060e+14 -7.209e+14 -9.957e+13 -6.804e+14 -9.335e+13 -6.405e+14 -8.731e+13 -6.016e+14 -8.147e+13 -5.637e+14 -7.584e+13 -5.268e+14 -7.043e+13 -4.910e+14 -6.524e+13 -4.565e+14 -6.029e+13 -4.233e+14 -5.556e+13 -3.914e+14 -5.108e+13 -3.609e+14 -4.683e+13 -3.317e+14 -4.282e+13 -3.041e+14 -3.905e+13 -2.779e+14 -3.551e+13 -2.531e+14 -3.220e+13 -2.298e+14 -2.912e+13 -2.080e+14 -2.625e+13 -1.875e+14 -2.360e+13 -1.685e+14 -2.114e+13 -1.508e+14 -1.889e+13 -1.345e+14 -1.682e+13 -1.194e+14 -1.493e+13 -1.057e+14 -1.320e+13 -9.305e+13 -1.164e+13 -8.157e+13 -1.022e+13 -7.118e+13 -8.946e+12 -6.181e+13 -7.798e+12 -5.339e+13 -6.770e+12 -4.587e+13 -5.854e+12 -3.919e+13 -5.039e+12 -3.327e+13 -4.317e+12 -2.808e+13 -3.682e+12 -2.353e+13 -3.123e+12 -1.958e+13 -2.634e+12 -1.616e+13 -2.210e+12 -1.324e+13 -1.841e+12 -1.074e+13 -1.524e+12 -8.635e+12 -1.252e+12 -6.869e+12 -1.021e+12 -5.402e+12 -8.249e+11 -4.196e+12 -6.605e+11 -3.214e+12 -5.233e+11 -2.425e+12 -4.097e+11 -1.798e+12 -3.166e+11 -1.307e+12 -2.410e+11 -9.296e+11 -1.803e+11 -6.444e+11 -1.324e+11 -4.335e+11 -9.501e+10 -2.814e+11 -6.637e+10 -1.750e+11 -4.491e+10 -1.033e+11 -2.922e+10 -5.698e+10 -1.810e+10 -2.883e+10 -1.052e+10 -1.295e+10 -5.616e+09 -4.896e+09 -2.657e+09 -1.411e+09 -1.050e+09 -2.433e+08 -3.085e+08 -3.775e+06 -5.148e+07 2.456e+06 1.007e+07 -7.136e+07 9.374e+07 -5.116e+08 3.631e+08 -1.897e+09 9.118e+08 -4.998e+09 1.794e+09 -1.069e+10 3.030e+09 -1.985e+10 4.605e+09 -3.333e+10 6.490e+09 -5.186e+10 8.638e+09 -7.600e+10 1.098e+10 -1.062e+11 1.346e+10 -1.426e+11 1.600e+10 -1.852e+11 1.851e+10 -2.339e+11 2.093e+10 -2.882e+11 2.319e+10 -3.474e+11 2.521e+10 -4.109e+11 2.692e+10 -4.777e+11 2.827e+10 -5.466e+11 2.920e+10 -6.166e+11 2.967e+10 -6.867e+11 2.964e+10 -7.555e+11 2.908e+10 -8.220e+11 2.792e+10 -8.851e+11 2.619e+10 -9.436e+11 2.391e+10 -9.965e+11 2.110e+10 -1.043e+12 1.778e+10 -1.083e+12 1.400e+10 -1.114e+12 9.817e+09 -1.138e+12 5.278e+09 -1.153e+12 4.666e+08 -1.160e+12 -4.542e+09 -1.159e+12 -9.672e+09 -1.149e+12 -1.483e+10 -1.131e+12 -1.992e+10 -1.106e+12 -2.488e+10 -1.073e+12 -2.962e+10 -1.034e+12 -3.404e+10 -9.901e+11 -3.810e+10 -9.410e+11 -4.172e+10 -8.878e+11 -4.485e+10 -8.315e+11 -4.745e+10 -7.728e+11 -4.949e+10 -7.128e+11 -5.095e+10 -6.521e+11 -5.183e+10 -5.916e+11 -5.212e+10 -5.320e+11 -5.185e+10 -4.740e+11 -5.104e+10 -4.181e+11 -4.972e+10 -3.650e+11 -4.795e+10 -3.151e+11 -4.576e+10 -2.687e+11 -4.321e+10 -2.261e+11 -4.037e+10 -1.875e+11 -3.729e+10 -1.529e+11 -3.403e+10 -1.225e+11 -3.068e+10 -9.604e+10 -2.727e+10 -7.352e+10 -2.389e+10 -5.471e+10 -2.060e+10 -3.937e+10 -1.744e+10 -2.717e+10 -1.449e+10 -1.782e+10 -1.180e+10 -1.093e+10 -9.427e+09 -6.093e+09 -7.442e+09 -2.883e+09 -5.915e+09 -7.955e+08 -4.897e+09 6.935e+08 -4.370e+09 2.012e+09 -4.196e+09 3.366e+09 -4.171e+09 4.747e+09 -4.129e+09 6.044e+09 -3.979e+09 7.134e+09 -3.690e+09 7.915e+09 -3.259e+09 8.312e+09 -2.709e+09 8.294e+09 -2.074e+09 7.869e+09 -1.396e+09 7.080e+09 -7.222e+08 6.009e+09 -1.002e+08 4.761e+09 4.259e+08 3.472e+09 8.220e+08 2.284e+09 1.083e+09 1.312e+09 1.270e+09 0.005 -61.823 -60.043 -58.263 -56.483 -54.703 -52.910 -51.069 -49.249 -47.486 -45.796 -44.187 -42.658 -41.206 -39.828 -38.521 -37.280 -36.102 -34.983 -33.920 -32.911 -31.953 -31.044 -30.181 -29.362 -28.586 -27.852 -27.157 -26.501 -25.882 -25.299 -24.752 -24.238 -23.759 -23.312 -22.897 -22.514 -22.162 -21.841 -21.549 -21.288 -21.056 -20.853 -20.679 -20.534 -20.418 -20.331 -20.272 -20.242 -20.241 -20.269 -20.325 -20.411 -20.526 -20.670 -20.844 -21.049 -21.284 -21.550 -21.847 -22.176 -22.538 -22.933 -23.361 -23.825 -24.323 -24.858 -25.430 -26.040 -26.689 -27.378 -28.109 -28.882 -29.699 -30.562 -31.472 -32.430 -33.439 -34.499 -35.614 -36.786 -38.015 -39.305 -40.656 -42.069 -43.544 -45.078 -46.661 -48.275 -49.887 -51.445 -52.876 -54.107 -55.089 -55.836 -56.422 -56.959 -57.567 -58.358 -59.416 -60.659 -61.357 -60.063 -56.938 -53.447 -50.205 -47.282 -44.631 -42.203 -39.955 -37.857 -35.888 -34.031 -32.272 -30.602 -29.013 -27.499 -26.053 -24.671 -23.349 -22.084 -20.871 -19.709 -18.595 -17.527 -16.502 -15.518 -14.575 -13.670 -12.802 -11.969 -11.172 -10.407 -9.675 -8.974 -8.304 -7.663 -7.051 -6.468 -5.912 -5.384 -4.882 -4.406 -3.956 -3.532 -3.132 -2.757 -2.407 -2.081 -1.779 -1.500 -1.246 -1.016 -0.809 -0.626 -0.467 -0.331 -0.219 -0.131 -0.068 -0.029 -0.014 -0.025 -0.061 -0.123 -0.211 -0.326 -0.469 -0.641 -0.841 -1.072 -1.334 -1.629 -1.957 -2.321 -2.721 -3.161 -3.642 -4.166 -4.737 -5.358 -6.032 -6.764 -7.560 -8.426 -9.368 -10.396 -11.521 -12.756 -14.118 -15.628 -17.315 -19.216 -21.383 -23.891 -26.853 -30.451 -35.004 -41.155 -50.540 -65.655 -53.162 -43.582 -36.881 -31.936 -28.069 -24.915 -22.263 -19.985 -17.996 -16.237 -14.666 -13.254 -11.975 -10.812 -9.750 -8.777 -7.885 -7.064 -6.309 -5.613 -4.973 -4.384 -3.843 -3.346 -2.891 -2.475 -2.097 -1.755 -1.447 -1.172 -0.928 -0.715 -0.531 -0.375 -0.247 -0.146 -0.072 -0.023 0.000 -0.002 -0.028 -0.078 -0.152 -0.250 -0.371 -0.516 -0.684 -0.875 -1.089 -1.326 -1.586 -1.869 -2.176 -2.507 -2.861 -3.238 -3.640 -4.066 -4.516 -4.991 -5.491 -6.017 -6.568 -7.146 -7.751 -8.383 -9.044 -9.733 -10.451 -11.200 -11.980 -12.792 -13.637 -14.515 -15.429 -16.380 -17.368 -18.396 -19.465 -20.576 -21.733 -22.938 -24.193 -25.502 -26.868 -28.296 -29.791 -31.361 -33.012 -34.755 -36.604 -38.575 -40.691 -42.978 -45.469 -48.190 -51.110 -53.985 -56.083 -56.625 -55.998 -55.080 -54.292 -53.712 -53.302 -52.988 -52.675 -52.255 -51.624 -50.720 -49.547 -48.169 -46.673 -45.132 -43.599 -42.105 -40.666 -39.291 -37.981 -36.736 -35.553 -34.432 -33.369 -32.362 -31.408 -30.506 -29.652 -28.845 -28.083 -27.365 -26.688 -26.052 -25.455 -24.896 -24.374 -23.887 -23.436 -23.018 -22.634 -22.283 -21.963 -21.674 -21.417 -21.189 -20.992 -20.823 -20.684 -20.574 -20.492 -20.438 -20.413 -20.415 -20.445 -20.503 -20.588 -20.702 -20.843 -21.012 -21.209 -21.434 -21.687 -21.968 -22.279 -22.618 -22.986 -23.384 -23.812 -24.271 -24.761 -25.283 -25.836 -26.423 -27.044 -27.699 -28.389 -29.116 -29.879 -30.682 -31.523 -32.405 -33.329 -34.296 -35.308 -36.365 -37.470 -38.623 -39.826 -41.081 -42.389 -43.750 -45.165 -46.635 -48.158 -49.733 -51.358 -53.026 -54.731 -56.443 -58.155 -59.867 -61.578 0 1 1.0 1 N6 HH 36.71 40.21 0.05 -1.759e+07 -2.902e+08 -2.948e+07 -2.631e+08 -3.934e+07 -2.366e+08 -4.727e+07 -2.109e+08 -5.334e+07 -1.862e+08 -5.769e+07 -1.629e+08 -6.045e+07 -1.409e+08 -6.181e+07 -1.206e+08 -6.192e+07 -1.019e+08 -6.096e+07 -8.486e+07 -5.912e+07 -6.953e+07 -5.657e+07 -5.589e+07 -5.347e+07 -4.387e+07 -4.997e+07 -3.338e+07 -4.623e+07 -2.433e+07 -4.234e+07 -1.662e+07 -3.842e+07 -1.009e+07 -3.455e+07 -4.610e+06 -3.078e+07 -4.541e+04 -2.715e+07 3.743e+06 -2.370e+07 6.874e+06 -2.042e+07 9.470e+06 -1.729e+07 1.164e+07 -1.431e+07 1.349e+07 -1.143e+07 1.511e+07 -8.587e+06 1.658e+07 -5.717e+06 1.795e+07 -2.733e+06 1.928e+07 4.619e+05 2.059e+07 3.961e+06 2.187e+07 7.861e+06 2.311e+07 1.225e+07 2.426e+07 1.721e+07 2.526e+07 2.279e+07 2.605e+07 2.903e+07 2.654e+07 3.594e+07 2.665e+07 4.351e+07 2.630e+07 5.173e+07 2.542e+07 6.053e+07 2.394e+07 6.983e+07 2.182e+07 7.955e+07 1.901e+07 8.958e+07 1.552e+07 9.978e+07 1.133e+07 1.100e+08 6.467e+06 1.202e+08 9.810e+05 1.301e+08 -5.062e+06 1.396e+08 -1.159e+07 1.485e+08 -1.849e+07 1.568e+08 -2.566e+07 1.642e+08 -3.298e+07 1.707e+08 -4.030e+07 1.761e+08 -4.750e+07 1.804e+08 -5.445e+07 1.835e+08 -6.100e+07 1.854e+08 -6.703e+07 1.859e+08 -7.244e+07 1.852e+08 -7.712e+07 1.832e+08 -8.100e+07 1.801e+08 -8.400e+07 1.757e+08 -8.610e+07 1.703e+08 -8.727e+07 1.640e+08 -8.753e+07 1.568e+08 -8.688e+07 1.489e+08 -8.539e+07 1.403e+08 -8.310e+07 1.314e+08 -8.009e+07 1.220e+08 -7.647e+07 1.125e+08 -7.233e+07 1.030e+08 -6.776e+07 9.353e+07 -6.289e+07 8.426e+07 -5.784e+07 7.528e+07 -5.269e+07 6.671e+07 -4.755e+07 5.860e+07 -4.252e+07 5.102e+07 -3.766e+07 4.402e+07 -3.305e+07 3.764e+07 -2.874e+07 3.187e+07 -2.477e+07 2.673e+07 -2.116e+07 2.221e+07 -1.793e+07 1.827e+07 -1.509e+07 1.489e+07 -1.262e+07 1.204e+07 -1.050e+07 9.657e+06 -8.726e+06 7.702e+06 -7.257e+06 6.122e+06 -6.066e+06 4.866e+06 -5.122e+06 3.888e+06 -4.396e+06 3.141e+06 -3.862e+06 2.586e+06 -3.497e+06 2.189e+06 -3.284e+06 1.921e+06 -3.213e+06 1.762e+06 -3.278e+06 1.696e+06 -3.483e+06 1.719e+06 -3.835e+06 1.830e+06 -4.350e+06 2.034e+06 -5.048e+06 2.343e+06 -5.952e+06 2.772e+06 -7.090e+06 3.338e+06 -8.490e+06 4.061e+06 -1.018e+07 4.964e+06 -1.219e+07 6.066e+06 -1.454e+07 7.384e+06 -1.723e+07 8.938e+06 -2.029e+07 1.074e+07 -2.370e+07 1.279e+07 -2.745e+07 1.511e+07 -3.152e+07 1.769e+07 -3.586e+07 2.053e+07 -4.041e+07 2.360e+07 -4.512e+07 2.691e+07 -4.990e+07 3.041e+07 -5.466e+07 3.409e+07 -5.931e+07 3.791e+07 -6.374e+07 4.183e+07 -6.785e+07 4.581e+07 -7.153e+07 4.980e+07 -7.469e+07 5.376e+07 -7.722e+07 5.764e+07 -7.907e+07 6.140e+07 -8.015e+07 6.498e+07 -8.043e+07 6.836e+07 -7.988e+07 7.149e+07 -7.849e+07 7.435e+07 -7.629e+07 7.692e+07 -7.331e+07 7.919e+07 -6.962e+07 8.117e+07 -6.528e+07 8.287e+07 -6.038e+07 8.432e+07 -5.502e+07 8.555e+07 -4.928e+07 8.661e+07 -4.326e+07 8.755e+07 -3.703e+07 8.842e+07 -3.065e+07 8.929e+07 -2.418e+07 9.018e+07 -1.763e+07 9.113e+07 -1.104e+07 9.214e+07 -4.405e+06 9.321e+07 2.270e+06 9.430e+07 8.962e+06 9.535e+07 1.565e+07 9.630e+07 2.228e+07 9.704e+07 2.878e+07 9.745e+07 3.504e+07 9.743e+07 4.094e+07 9.686e+07 4.632e+07 9.564e+07 5.101e+07 9.367e+07 5.485e+07 9.090e+07 5.765e+07 8.726e+07 5.927e+07 8.274e+07 5.959e+07 7.734e+07 5.851e+07 7.111e+07 5.600e+07 6.412e+07 5.210e+07 5.650e+07 4.689e+07 4.841e+07 4.057e+07 4.005e+07 3.342e+07 3.169e+07 2.580e+07 2.362e+07 1.818e+07 1.620e+07 1.114e+07 9.834e+06 5.307e+06 5.032e+06 1.271e+06 2.285e+06 -1.275e+06 8.535e+05 -4.845e+06 -1.686e+06 -1.275e+07 -7.159e+06 -2.664e+07 -1.632e+07 -4.755e+07 -2.970e+07 -7.656e+07 -4.774e+07 -1.147e+08 -7.080e+07 -1.629e+08 -9.917e+07 -2.220e+08 -1.331e+08 -2.929e+08 -1.726e+08 -3.759e+08 -2.176e+08 -4.715e+08 -2.681e+08 -5.797e+08 -3.236e+08 -7.004e+08 -3.837e+08 -8.330e+08 -4.477e+08 -9.768e+08 -5.148e+08 -1.130e+09 -5.840e+08 -1.293e+09 -6.542e+08 -1.461e+09 -7.242e+08 -1.634e+09 -7.927e+08 -1.809e+09 -8.580e+08 -1.983e+09 -9.185e+08 -2.152e+09 -9.728e+08 -2.314e+09 -1.019e+09 -2.466e+09 -1.056e+09 -2.604e+09 -1.083e+09 -2.724e+09 -1.097e+09 -2.825e+09 -1.098e+09 -2.901e+09 -1.085e+09 -2.952e+09 -1.058e+09 -2.975e+09 -1.016e+09 -2.967e+09 -9.597e+08 -2.929e+09 -8.894e+08 -2.860e+09 -8.062e+08 -2.760e+09 -7.117e+08 -2.629e+09 -6.076e+08 -2.472e+09 -4.966e+08 -2.289e+09 -3.812e+08 -2.086e+09 -2.648e+08 -1.866e+09 -1.508e+08 -1.637e+09 -4.268e+07 -1.403e+09 5.635e+07 -1.172e+09 1.438e+08 -9.527e+08 2.194e+08 -7.525e+08 2.863e+08 -5.785e+08 3.535e+08 -4.344e+08 4.375e+08 -3.162e+08 5.591e+08 -2.093e+08 7.379e+08 -9.029e+07 9.883e+08 6.664e+07 1.319e+09 2.836e+08 1.737e+09 5.773e+08 2.246e+09 9.611e+08 2.851e+09 1.444e+09 3.556e+09 2.034e+09 4.365e+09 2.737e+09 5.278e+09 3.556e+09 6.298e+09 4.493e+09 7.425e+09 5.550e+09 8.658e+09 6.724e+09 9.991e+09 8.011e+09 1.142e+10 9.407e+09 1.295e+10 1.090e+10 1.455e+10 1.249e+10 1.623e+10 1.415e+10 1.797e+10 1.589e+10 1.975e+10 1.767e+10 2.158e+10 1.949e+10 2.341e+10 2.132e+10 2.525e+10 2.316e+10 2.707e+10 2.497e+10 2.885e+10 2.674e+10 3.057e+10 2.844e+10 3.222e+10 3.007e+10 3.377e+10 3.159e+10 3.520e+10 3.299e+10 3.651e+10 3.425e+10 3.766e+10 3.535e+10 3.864e+10 3.628e+10 3.944e+10 3.703e+10 4.006e+10 3.758e+10 4.047e+10 3.793e+10 4.067e+10 3.807e+10 4.066e+10 3.800e+10 4.044e+10 3.772e+10 4.000e+10 3.723e+10 3.935e+10 3.654e+10 3.851e+10 3.567e+10 3.746e+10 3.460e+10 3.624e+10 3.338e+10 3.485e+10 3.200e+10 3.331e+10 3.048e+10 3.164e+10 2.885e+10 2.985e+10 2.712e+10 2.797e+10 2.532e+10 2.602e+10 2.347e+10 2.402e+10 2.158e+10 2.199e+10 1.969e+10 1.997e+10 1.781e+10 1.796e+10 1.595e+10 1.598e+10 1.415e+10 1.407e+10 1.241e+10 1.223e+10 1.075e+10 1.048e+10 9.182e+09 8.845e+09 7.724e+09 7.328e+09 6.383e+09 5.941e+09 5.166e+09 4.696e+09 4.079e+09 3.598e+09 3.125e+09 2.649e+09 2.305e+09 1.852e+09 1.619e+09 1.206e+09 1.063e+09 7.057e+08 6.323e+08 3.467e+08 3.210e+08 1.203e+08 1.205e+08 1.652e+07 2.120e+07 -2.377e+07 -9.504e+06 -1.313e+08 -8.235e+07 -3.223e+08 -2.198e+08 -5.829e+08 -4.115e+08 -8.979e+08 -6.451e+08 -1.252e+09 -9.083e+08 -1.630e+09 -1.189e+09 -2.018e+09 -1.475e+09 -2.401e+09 -1.756e+09 -2.767e+09 -2.023e+09 -3.104e+09 -2.267e+09 -3.404e+09 -2.482e+09 -3.656e+09 -2.661e+09 -3.857e+09 -2.800e+09 -4.001e+09 -2.897e+09 -4.086e+09 -2.951e+09 -4.111e+09 -2.961e+09 -4.079e+09 -2.929e+09 -3.992e+09 -2.857e+09 -3.854e+09 -2.750e+09 -3.671e+09 -2.612e+09 -3.430e+09 -2.524e+09 -3.198e+09 -2.306e+09 -2.924e+09 -2.103e+09 -2.635e+09 -1.891e+09 -2.340e+09 -1.676e+09 -2.044e+09 -1.462e+09 -1.756e+09 -1.254e+09 -1.482e+09 -1.057e+09 -1.225e+09 -8.745e+08 -9.916e+08 -7.085e+08 -7.835e+08 -5.610e+08 -6.022e+08 -4.330e+08 -4.489e+08 -3.247e+08 -3.229e+08 -2.357e+08 -2.225e+08 -1.646e+08 -1.458e+08 -1.100e+08 -8.972e+07 -6.966e+07 -5.100e+07 -4.130e+07 -2.617e+07 -2.260e+07 -1.169e+07 -1.118e+07 -4.300e+06 -4.890e+06 -1.203e+06 -1.886e+06 -2.402e+05 -7.023e+05 -8.475e+04 -3.532e+05 -3.185e+05 -4.158e+05 -1.499e+06 -1.059e+06 -5.326e+06 -2.955e+06 -1.453e+07 -7.283e+06 -3.285e+07 -1.570e+07 -6.491e+07 -3.024e+07 -1.159e+08 -5.315e+07 -1.917e+08 -8.687e+07 -2.983e+08 -1.338e+08 -4.414e+08 -1.961e+08 -6.266e+08 -2.757e+08 -8.586e+08 -3.740e+08 -1.141e+09 -4.918e+08 -1.475e+09 -6.290e+08 -1.862e+09 -7.850e+08 -2.299e+09 -9.578e+08 -2.782e+09 -1.145e+09 -3.306e+09 -1.343e+09 -3.861e+09 -1.547e+09 -4.435e+09 -1.751e+09 -5.014e+09 -1.950e+09 -5.581e+09 -2.136e+09 -6.120e+09 -2.303e+09 -6.611e+09 -2.444e+09 -7.035e+09 -2.552e+09 -7.373e+09 -2.620e+09 -7.608e+09 -2.643e+09 -7.723e+09 -2.618e+09 -7.705e+09 -2.542e+09 -7.547e+09 -2.414e+09 -7.244e+09 -2.237e+09 -6.799e+09 -2.013e+09 -6.221e+09 -1.751e+09 -5.527e+09 -1.460e+09 -4.739e+09 -1.152e+09 -3.890e+09 -8.413e+08 -3.019e+09 -5.459e+08 -2.172e+09 -2.839e+08 -1.401e+09 -7.512e+07 -7.640e+08 6.285e+07 -3.171e+08 1.276e+08 -5.910e+07 1.831e+08 1.938e+08 3.626e+08 7.136e+08 7.386e+08 1.636e+09 1.306e+09 3.012e+09 2.064e+09 4.870e+09 3.014e+09 7.220e+09 4.155e+09 1.005e+10 5.475e+09 1.332e+10 6.959e+09 1.698e+10 8.580e+09 2.094e+10 1.030e+10 2.509e+10 1.209e+10 2.928e+10 1.388e+10 3.336e+10 1.562e+10 3.713e+10 1.725e+10 4.039e+10 1.869e+10 4.295e+10 1.988e+10 4.460e+10 2.075e+10 4.513e+10 2.123e+10 4.439e+10 2.124e+10 4.227e+10 2.075e+10 3.875e+10 1.972e+10 3.388e+10 1.815e+10 2.786e+10 1.607e+10 2.108e+10 1.353e+10 1.408e+10 1.066e+10 7.659e+09 7.689e+09 2.686e+09 5.058e+09 -9.075e+08 3.671e+09 -6.203e+09 3.890e+09 -1.789e+10 4.558e+09 -3.986e+10 4.219e+09 -7.580e+10 1.938e+09 -1.299e+11 -3.078e+09 -2.070e+11 -1.166e+10 -3.130e+11 -2.475e+10 -4.544e+11 -4.336e+10 -6.388e+11 -6.862e+10 -8.750e+11 -1.018e+11 -1.173e+12 -1.442e+11 -1.542e+12 -1.973e+11 -1.997e+12 -2.626e+11 -2.549e+12 -3.418e+11 -3.213e+12 -4.365e+11 -4.006e+12 -5.485e+11 -4.946e+12 -6.795e+11 -6.049e+12 -8.314e+11 -7.338e+12 -1.006e+12 -8.834e+12 -1.205e+12 -1.056e+13 -1.430e+12 -1.254e+13 -1.683e+12 -1.480e+13 -1.965e+12 -1.736e+13 -2.277e+12 -2.026e+13 -2.621e+12 -2.352e+13 -2.998e+12 -2.717e+13 -3.405e+12 -3.124e+13 -3.842e+12 -3.577e+13 -4.308e+12 -4.077e+13 -4.804e+12 -4.629e+13 -5.329e+12 -5.235e+13 -5.883e+12 -5.898e+13 -6.462e+12 -6.622e+13 -7.064e+12 -7.409e+13 -7.686e+12 -8.261e+13 -8.325e+12 -9.183e+13 -8.976e+12 -1.017e+14 -9.635e+12 -1.124e+14 -1.030e+13 -1.238e+14 -1.096e+13 -1.359e+14 -1.160e+13 -1.489e+14 -1.224e+13 -1.626e+14 -1.285e+13 -1.771e+14 -1.343e+13 -1.924e+14 -1.397e+13 -2.085e+14 -1.447e+13 -2.254e+14 -1.491e+13 -2.430e+14 -1.529e+13 -2.615e+14 -1.559e+13 -2.806e+14 -1.581e+13 -3.005e+14 -1.595e+13 -3.210e+14 -1.598e+13 -3.422e+14 -1.591e+13 -3.639e+14 -1.572e+13 -3.863e+14 -1.541e+13 -4.091e+14 -1.497e+13 -4.323e+14 -1.439e+13 -4.559e+14 -1.366e+13 -4.799e+14 -1.278e+13 -5.040e+14 -1.174e+13 -5.284e+14 -1.054e+13 -5.528e+14 -9.181e+12 -5.772e+14 -7.651e+12 -6.015e+14 -5.953e+12 -6.256e+14 -4.085e+12 -6.494e+14 -2.049e+12 -6.730e+14 1.507e+11 -6.963e+14 2.506e+12 -7.191e+14 5.017e+12 -7.413e+14 7.684e+12 -7.627e+14 1.050e+13 -7.834e+14 1.345e+13 -8.031e+14 1.654e+13 -8.219e+14 1.975e+13 -8.396e+14 2.306e+13 -8.561e+14 2.648e+13 -8.714e+14 2.997e+13 -8.854e+14 3.354e+13 -8.980e+14 3.715e+13 -9.092e+14 4.080e+13 -9.189e+14 4.447e+13 -9.270e+14 4.814e+13 -9.336e+14 5.180e+13 -9.386e+14 5.541e+13 -9.419e+14 5.897e+13 -9.437e+14 6.246e+13 -9.437e+14 6.586e+13 -9.421e+14 6.915e+13 -9.388e+14 7.231e+13 -9.339e+14 7.532e+13 -9.274e+14 7.818e+13 -9.193e+14 8.086e+13 -9.097e+14 8.335e+13 -8.985e+14 8.564e+13 -8.859e+14 8.771e+13 -8.719e+14 8.956e+13 -8.566e+14 9.117e+13 -8.400e+14 9.254e+13 -8.222e+14 9.366e+13 -8.033e+14 9.453e+13 -7.834e+14 9.514e+13 -7.626e+14 9.550e+13 -7.409e+14 9.560e+13 -7.184e+14 9.545e+13 -6.953e+14 9.505e+13 -6.717e+14 9.440e+13 -6.476e+14 9.351e+13 -6.232e+14 9.239e+13 -5.986e+14 9.104e+13 -5.737e+14 8.948e+13 -5.488e+14 8.773e+13 -5.238e+14 8.580e+13 -4.990e+14 8.369e+13 -4.743e+14 8.143e+13 -4.498e+14 7.903e+13 -4.256e+14 7.650e+13 -4.018e+14 7.387e+13 -3.785e+14 7.113e+13 -3.557e+14 6.832e+13 -3.334e+14 6.544e+13 -3.118e+14 6.252e+13 -2.909e+14 5.956e+13 -2.706e+14 5.659e+13 -2.511e+14 5.361e+13 -2.324e+14 5.064e+13 -2.145e+14 4.770e+13 -1.974e+14 4.479e+13 -1.811e+14 4.193e+13 -1.657e+14 3.913e+13 -1.511e+14 3.640e+13 -1.373e+14 3.375e+13 -1.244e+14 3.118e+13 -1.123e+14 2.871e+13 -1.010e+14 2.633e+13 -9.055e+13 2.406e+13 -8.083e+13 2.190e+13 -7.185e+13 1.986e+13 -6.360e+13 1.792e+13 -5.604e+13 1.611e+13 -4.914e+13 1.440e+13 -4.289e+13 1.282e+13 -3.723e+13 1.135e+13 -3.214e+13 9.996e+12 -2.757e+13 8.752e+12 -2.351e+13 7.615e+12 -1.989e+13 6.580e+12 -1.671e+13 5.646e+12 -1.393e+13 4.808e+12 -1.150e+13 4.058e+12 -9.403e+12 3.394e+12 -7.603e+12 2.810e+12 -6.069e+12 2.299e+12 -4.776e+12 1.857e+12 -3.698e+12 1.478e+12 -2.807e+12 1.157e+12 -2.084e+12 8.872e+11 -1.504e+12 6.645e+11 -1.048e+12 4.833e+11 -6.987e+11 3.389e+11 -4.386e+11 2.265e+11 -2.525e+11 1.418e+11 -1.274e+11 8.073e+10 -5.114e+10 3.956e+10 -1.273e+10 1.510e+10 2.478e+09 5.193e+09 1.791e+10 1.346e+09 4.510e+10 -5.459e+09 8.135e+10 -1.726e+10 1.221e+11 -3.254e+10 1.636e+11 -4.977e+10 2.032e+11 -6.760e+10 2.386e+11 -8.492e+10 2.683e+11 -1.009e+11 2.916e+11 -1.148e+11 3.078e+11 -1.263e+11 3.169e+11 -1.349e+11 3.192e+11 -1.407e+11 3.151e+11 -1.435e+11 3.053e+11 -1.436e+11 2.907e+11 -1.409e+11 2.719e+11 -1.360e+11 2.501e+11 -1.289e+11 2.260e+11 -1.202e+11 2.007e+11 -1.101e+11 1.748e+11 -9.900e+10 1.491e+11 -8.734e+10 1.244e+11 -7.548e+10 1.011e+11 -6.373e+10 7.971e+10 -5.239e+10 6.064e+10 -4.174e+10 4.408e+10 -3.200e+10 3.018e+10 -2.336e+10 1.902e+10 -1.598e+10 1.063e+10 -9.989e+09 4.801e+09 -5.419e+09 1.376e+09 -2.309e+09 -2.866e+07 -6.932e+08 -1.074e+09 -1.514e+08 -3.447e+09 9.032e+08 -7.163e+09 2.991e+09 -1.193e+10 6.086e+09 -1.741e+10 1.005e+10 -2.333e+10 1.473e+10 -2.941e+10 1.996e+10 -3.540e+10 2.557e+10 -4.105e+10 3.140e+10 -4.621e+10 3.729e+10 0.005 -58.953 -56.758 -54.563 -52.367 -50.231 -48.289 -46.502 -44.843 -43.291 -41.833 -40.458 -39.159 -37.928 -36.760 -35.650 -34.596 -33.593 -32.639 -31.732 -30.869 -30.049 -29.270 -28.530 -27.829 -27.164 -26.535 -25.941 -25.380 -24.853 -24.358 -23.894 -23.462 -23.060 -22.688 -22.345 -22.032 -21.747 -21.491 -21.263 -21.063 -20.891 -20.746 -20.628 -20.538 -20.476 -20.441 -20.434 -20.454 -20.503 -20.579 -20.684 -20.817 -20.979 -21.171 -21.392 -21.643 -21.924 -22.237 -22.582 -22.959 -23.369 -23.814 -24.293 -24.808 -25.360 -25.951 -26.581 -27.252 -27.967 -28.727 -29.534 -30.392 -31.303 -32.271 -33.301 -34.399 -35.572 -36.828 -38.179 -39.641 -41.236 -42.994 -44.959 -47.205 -49.852 -53.136 -57.599 -64.505 -67.917 -63.442 -59.005 -56.540 -55.034 -54.112 -53.614 -53.467 -53.645 -54.139 -54.902 -55.676 -55.734 -54.316 -51.684 -48.682 -45.800 -43.159 -40.749 -38.537 -36.488 -34.579 -32.787 -31.097 -29.498 -27.980 -26.535 -25.156 -23.839 -22.580 -21.374 -20.218 -19.109 -18.046 -17.026 -16.047 -15.106 -14.204 -13.337 -12.505 -11.707 -10.942 -10.208 -9.505 -8.832 -8.188 -7.572 -6.984 -6.423 -5.888 -5.379 -4.896 -4.438 -4.005 -3.596 -3.212 -2.851 -2.514 -2.201 -1.910 -1.643 -1.400 -1.179 -0.981 -0.806 -0.655 -0.527 -0.422 -0.340 -0.282 -0.249 -0.239 -0.254 -0.294 -0.360 -0.451 -0.569 -0.714 -0.888 -1.090 -1.322 -1.584 -1.879 -2.207 -2.570 -2.969 -3.407 -3.886 -4.407 -4.975 -5.592 -6.263 -6.991 -7.781 -8.641 -9.577 -10.598 -11.716 -12.944 -14.298 -15.801 -17.482 -19.380 -21.551 -24.077 -27.087 -30.804 -35.676 -42.891 -58.751 -53.000 -50.423 -46.421 -39.288 -33.703 -29.442 -26.041 -23.223 -20.828 -18.750 -16.922 -15.297 -13.838 -12.520 -11.323 -10.230 -9.231 -8.313 -7.470 -6.693 -5.977 -5.317 -4.709 -4.150 -3.635 -3.162 -2.729 -2.334 -1.975 -1.649 -1.357 -1.096 -0.865 -0.663 -0.489 -0.343 -0.224 -0.130 -0.062 -0.019 0.000 -0.005 -0.034 -0.086 -0.162 -0.260 -0.380 -0.524 -0.689 -0.877 -1.087 -1.319 -1.574 -1.850 -2.149 -2.470 -2.814 -3.181 -3.570 -3.982 -4.417 -4.876 -5.359 -5.865 -6.396 -6.952 -7.533 -8.140 -8.773 -9.433 -10.120 -10.835 -11.578 -12.351 -13.154 -13.988 -14.854 -15.753 -16.686 -17.653 -18.658 -19.700 -20.782 -21.906 -23.072 -24.285 -25.546 -26.858 -28.225 -29.651 -31.141 -32.702 -34.339 -36.061 -37.879 -39.805 -41.854 -44.042 -46.384 -48.889 -51.534 -54.209 -56.620 -58.266 -58.766 -58.235 -57.070 -55.560 -53.852 -52.044 -50.210 -48.407 -46.667 -45.008 -43.434 -41.945 -40.536 -39.204 -37.942 -36.746 -35.612 -34.534 -33.511 -32.538 -31.613 -30.735 -29.900 -29.107 -28.355 -27.641 -26.966 -26.326 -25.723 -25.154 -24.619 -24.117 -23.647 -23.209 -22.801 -22.424 -22.076 -21.758 -21.469 -21.208 -20.975 -20.770 -20.592 -20.441 -20.317 -20.220 -20.150 -20.105 -20.087 -20.095 -20.128 -20.188 -20.273 -20.384 -20.522 -20.685 -20.874 -21.089 -21.331 -21.598 -21.892 -22.213 -22.561 -22.937 -23.340 -23.772 -24.232 -24.721 -25.239 -25.788 -26.366 -26.976 -27.616 -28.289 -28.994 -29.733 -30.505 -31.312 -32.153 -33.030 -33.943 -34.893 -35.880 -36.903 -37.964 -39.061 -40.195 -41.364 -42.566 -43.799 -45.060 -46.345 -47.649 -48.963 -50.279 -51.586 -52.890 -54.193 -55.497 0 1 1.0 1 N6 HV 36.71 40.21 0.05 -5.298e+08 -5.114e+08 -4.896e+08 -4.328e+08 -4.490e+08 -3.607e+08 -4.087e+08 -2.953e+08 -3.691e+08 -2.368e+08 -3.309e+08 -1.851e+08 -2.943e+08 -1.402e+08 -2.597e+08 -1.016e+08 -2.275e+08 -6.898e+07 -1.978e+08 -4.193e+07 -1.707e+08 -1.984e+07 -1.462e+08 -2.146e+06 -1.243e+08 1.177e+07 -1.048e+08 2.251e+07 -8.761e+07 3.060e+07 -7.250e+07 3.653e+07 -5.914e+07 4.077e+07 -4.731e+07 4.367e+07 -3.674e+07 4.550e+07 -2.720e+07 4.646e+07 -1.850e+07 4.672e+07 -1.048e+07 4.640e+07 -2.969e+06 4.560e+07 4.165e+06 4.439e+07 1.107e+07 4.283e+07 1.791e+07 4.094e+07 2.482e+07 3.873e+07 3.197e+07 3.613e+07 3.951e+07 3.307e+07 4.755e+07 2.940e+07 5.617e+07 2.499e+07 6.543e+07 1.965e+07 7.531e+07 1.323e+07 8.578e+07 5.571e+06 9.678e+07 -3.463e+06 1.082e+08 -1.396e+07 1.199e+08 -2.598e+07 1.317e+08 -3.956e+07 1.436e+08 -5.466e+07 1.553e+08 -7.123e+07 1.667e+08 -8.917e+07 1.777e+08 -1.084e+08 1.881e+08 -1.286e+08 1.979e+08 -1.497e+08 2.069e+08 -1.714e+08 2.150e+08 -1.934e+08 2.222e+08 -2.155e+08 2.284e+08 -2.374e+08 2.335e+08 -2.587e+08 2.376e+08 -2.790e+08 2.404e+08 -2.981e+08 2.421e+08 -3.156e+08 2.426e+08 -3.313e+08 2.419e+08 -3.447e+08 2.401e+08 -3.557e+08 2.370e+08 -3.641e+08 2.328e+08 -3.696e+08 2.275e+08 -3.722e+08 2.211e+08 -3.718e+08 2.137e+08 -3.684e+08 2.053e+08 -3.620e+08 1.961e+08 -3.530e+08 1.861e+08 -3.413e+08 1.754e+08 -3.273e+08 1.642e+08 -3.112e+08 1.526e+08 -2.934e+08 1.408e+08 -2.742e+08 1.288e+08 -2.540e+08 1.169e+08 -2.332e+08 1.052e+08 -2.122e+08 9.380e+07 -1.913e+08 8.286e+07 -1.709e+08 7.251e+07 -1.512e+08 6.282e+07 -1.325e+08 5.386e+07 -1.149e+08 4.570e+07 -9.877e+07 3.836e+07 -8.406e+07 3.184e+07 -7.083e+07 2.613e+07 -5.914e+07 2.120e+07 -4.894e+07 1.700e+07 -4.015e+07 1.348e+07 -3.272e+07 1.056e+07 -2.651e+07 8.185e+06 -2.141e+07 6.277e+06 -1.729e+07 4.766e+06 -1.403e+07 3.583e+06 -1.149e+07 2.671e+06 -9.576e+06 1.971e+06 -8.183e+06 1.433e+06 -7.230e+06 1.017e+06 -6.658e+06 6.849e+05 -6.423e+06 4.063e+05 -6.505e+06 1.566e+05 -6.903e+06 -8.416e+04 -7.632e+06 -3.317e+05 -8.728e+06 -5.971e+05 -1.024e+07 -8.879e+05 -1.221e+07 -1.208e+06 -1.473e+07 -1.556e+06 -1.785e+07 -1.927e+06 -2.165e+07 -2.308e+06 -2.620e+07 -2.681e+06 -3.154e+07 -3.022e+06 -3.772e+07 -3.297e+06 -4.478e+07 -3.464e+06 -5.271e+07 -3.476e+06 -6.150e+07 -3.275e+06 -7.110e+07 -2.799e+06 -8.145e+07 -1.985e+06 -9.243e+07 -7.645e+05 -1.039e+08 9.262e+05 -1.158e+08 3.145e+06 -1.278e+08 5.944e+06 -1.397e+08 9.360e+06 -1.515e+08 1.341e+07 -1.627e+08 1.811e+07 -1.732e+08 2.343e+07 -1.827e+08 2.933e+07 -1.910e+08 3.576e+07 -1.980e+08 4.263e+07 -2.034e+08 4.984e+07 -2.071e+08 5.728e+07 -2.090e+08 6.483e+07 -2.090e+08 7.234e+07 -2.071e+08 7.970e+07 -2.034e+08 8.679e+07 -1.980e+08 9.347e+07 -1.909e+08 9.968e+07 -1.824e+08 1.053e+08 -1.726e+08 1.104e+08 -1.618e+08 1.148e+08 -1.503e+08 1.186e+08 -1.381e+08 1.219e+08 -1.257e+08 1.246e+08 -1.131e+08 1.269e+08 -1.006e+08 1.289e+08 -8.834e+07 1.306e+08 -7.638e+07 1.321e+08 -6.483e+07 1.335e+08 -5.371e+07 1.348e+08 -4.304e+07 1.360e+08 -3.284e+07 1.370e+08 -2.310e+07 1.378e+08 -1.383e+07 1.381e+08 -5.088e+06 1.379e+08 3.058e+06 1.369e+08 1.052e+07 1.351e+08 1.716e+07 1.322e+08 2.284e+07 1.280e+08 2.743e+07 1.225e+08 3.078e+07 1.155e+08 3.279e+07 1.071e+08 3.338e+07 9.737e+07 3.253e+07 8.635e+07 3.030e+07 7.431e+07 2.681e+07 6.157e+07 2.230e+07 4.858e+07 1.710e+07 3.587e+07 1.165e+07 2.410e+07 6.485e+06 1.406e+07 2.235e+06 6.608e+06 -5.815e+05 2.235e+06 -2.504e+06 -9.788e+05 -6.251e+06 -7.339e+06 -1.486e+07 -1.972e+07 -2.960e+07 -3.943e+07 -5.150e+07 -6.749e+07 -8.169e+07 -1.047e+08 -1.213e+08 -1.518e+08 -1.713e+08 -2.093e+08 -2.327e+08 -2.774e+08 -3.062e+08 -3.562e+08 -3.924e+08 -4.454e+08 -4.917e+08 -5.446e+08 -6.042e+08 -6.528e+08 -7.294e+08 -7.690e+08 -8.671e+08 -8.919e+08 -1.016e+09 -1.020e+09 -1.175e+09 -1.150e+09 -1.343e+09 -1.282e+09 -1.517e+09 -1.412e+09 -1.694e+09 -1.538e+09 -1.874e+09 -1.658e+09 -2.051e+09 -1.769e+09 -2.224e+09 -1.868e+09 -2.390e+09 -1.954e+09 -2.544e+09 -2.023e+09 -2.684e+09 -2.073e+09 -2.806e+09 -2.103e+09 -2.908e+09 -2.112e+09 -2.987e+09 -2.098e+09 -3.039e+09 -2.059e+09 -3.064e+09 -1.997e+09 -3.059e+09 -1.912e+09 -3.024e+09 -1.803e+09 -2.958e+09 -1.673e+09 -2.862e+09 -1.524e+09 -2.737e+09 -1.358e+09 -2.584e+09 -1.179e+09 -2.406e+09 -9.913e+08 -2.208e+09 -7.993e+08 -1.993e+09 -6.084e+08 -1.766e+09 -4.240e+08 -1.535e+09 -2.516e+08 -1.305e+09 -9.571e+07 -1.085e+09 4.120e+07 -8.835e+08 1.609e+08 -7.090e+08 2.725e+08 -5.676e+08 3.950e+08 -4.591e+08 5.547e+08 -3.727e+08 7.788e+08 -2.878e+08 1.089e+09 -1.797e+08 1.499e+09 -2.668e+07 2.019e+09 1.881e+08 2.656e+09 4.775e+08 3.414e+09 8.506e+08 4.298e+09 1.314e+09 5.309e+09 1.873e+09 6.448e+09 2.529e+09 7.712e+09 3.285e+09 9.101e+09 4.141e+09 1.061e+10 5.094e+09 1.222e+10 6.138e+09 1.394e+10 7.270e+09 1.575e+10 8.482e+09 1.764e+10 9.763e+09 1.959e+10 1.111e+10 2.159e+10 1.249e+10 2.362e+10 1.392e+10 2.567e+10 1.537e+10 2.771e+10 1.682e+10 2.973e+10 1.826e+10 3.171e+10 1.968e+10 3.363e+10 2.106e+10 3.547e+10 2.238e+10 3.721e+10 2.363e+10 3.883e+10 2.480e+10 4.032e+10 2.586e+10 4.165e+10 2.682e+10 4.282e+10 2.765e+10 4.381e+10 2.835e+10 4.460e+10 2.891e+10 4.518e+10 2.932e+10 4.554e+10 2.958e+10 4.567e+10 2.968e+10 4.558e+10 2.962e+10 4.524e+10 2.940e+10 4.467e+10 2.903e+10 4.386e+10 2.851e+10 4.281e+10 2.784e+10 4.154e+10 2.703e+10 4.005e+10 2.609e+10 3.836e+10 2.503e+10 3.649e+10 2.386e+10 3.445e+10 2.259e+10 3.227e+10 2.124e+10 2.997e+10 1.983e+10 2.758e+10 1.837e+10 2.513e+10 1.687e+10 2.266e+10 1.536e+10 2.020e+10 1.384e+10 1.777e+10 1.235e+10 1.541e+10 1.089e+10 1.315e+10 9.474e+09 1.101e+10 8.124e+09 9.026e+09 6.849e+09 7.212e+09 5.665e+09 5.588e+09 4.580e+09 4.167e+09 3.604e+09 2.958e+09 2.744e+09 1.966e+09 2.004e+09 1.186e+09 1.387e+09 6.153e+08 8.941e+08 2.371e+08 5.264e+08 2.226e+07 2.846e+08 -1.027e+08 1.642e+08 -2.625e+08 1.090e+08 -5.268e+08 3.740e+07 -8.940e+08 -8.739e+07 -1.342e+09 -2.685e+08 -1.847e+09 -4.979e+08 -2.384e+09 -7.635e+08 -2.931e+09 -1.053e+09 -3.469e+09 -1.354e+09 -3.978e+09 -1.654e+09 -4.444e+09 -1.942e+09 -4.854e+09 -2.208e+09 -5.198e+09 -2.444e+09 -5.469e+09 -2.643e+09 -5.664e+09 -2.801e+09 -5.779e+09 -2.912e+09 -5.817e+09 -2.977e+09 -5.779e+09 -2.995e+09 -5.671e+09 -2.967e+09 -5.499e+09 -2.897e+09 -5.270e+09 -2.788e+09 -4.992e+09 -2.646e+09 -4.673e+09 -2.475e+09 -4.323e+09 -2.283e+09 -3.954e+09 -2.099e+09 -3.572e+09 -1.893e+09 -3.182e+09 -1.669e+09 -2.796e+09 -1.448e+09 -2.420e+09 -1.235e+09 -2.061e+09 -1.032e+09 -1.724e+09 -8.457e+08 -1.415e+09 -6.771e+08 -1.135e+09 -5.282e+08 -8.883e+08 -4.001e+08 -6.752e+08 -2.929e+08 -4.959e+08 -2.059e+08 -3.496e+08 -1.378e+08 -2.344e+08 -8.663e+07 -1.473e+08 -5.022e+07 -8.513e+07 -2.604e+07 -4.368e+07 -1.140e+07 -1.868e+07 -3.694e+06 -5.789e+06 -5.365e+05 -8.260e+05 1.698e+05 2.075e+05 1.766e+05 1.073e+06 2.857e+05 1.611e+06 -4.728e+04 1.304e+06 -7.614e+05 3.763e+05 -2.211e+06 -2.579e+06 -6.554e+06 -1.205e+07 -1.689e+07 -3.402e+07 -3.651e+07 -7.573e+07 -6.923e+07 -1.456e+08 -1.192e+08 -2.524e+08 -1.908e+08 -4.058e+08 -2.882e+08 -6.149e+08 -4.154e+08 -8.878e+08 -5.758e+08 -1.231e+09 -7.719e+08 -1.651e+09 -1.006e+09 -2.148e+09 -1.277e+09 -2.722e+09 -1.584e+09 -3.370e+09 -1.925e+09 -4.081e+09 -2.295e+09 -4.846e+09 -2.688e+09 -5.651e+09 -3.095e+09 -6.474e+09 -3.508e+09 -7.295e+09 -3.914e+09 -8.091e+09 -4.303e+09 -8.834e+09 -4.661e+09 -9.499e+09 -4.975e+09 -1.006e+10 -5.232e+09 -1.049e+10 -5.420e+09 -1.078e+10 -5.529e+09 -1.089e+10 -5.550e+09 -1.083e+10 -5.477e+09 -1.058e+10 -5.307e+09 -1.013e+10 -5.040e+09 -9.510e+09 -4.681e+09 -8.717e+09 -4.240e+09 -7.777e+09 -3.729e+09 -6.723e+09 -3.166e+09 -5.591e+09 -2.573e+09 -4.426e+09 -1.975e+09 -3.285e+09 -1.403e+09 -2.223e+09 -8.868e+08 -1.304e+09 -4.611e+08 -5.961e+08 -1.599e+08 -1.652e+08 -6.883e+06 4.944e+07 9.377e+07 3.911e+08 3.555e+08 1.176e+09 8.753e+08 2.471e+09 1.664e+09 4.312e+09 2.733e+09 6.719e+09 4.087e+09 9.694e+09 5.720e+09 1.321e+10 7.615e+09 1.723e+10 9.746e+09 2.167e+10 1.207e+10 2.642e+10 1.454e+10 3.136e+10 1.709e+10 3.632e+10 1.964e+10 4.111e+10 2.211e+10 4.550e+10 2.441e+10 4.927e+10 2.643e+10 5.217e+10 2.808e+10 5.396e+10 2.924e+10 5.441e+10 2.984e+10 5.335e+10 2.976e+10 5.064e+10 2.896e+10 4.626e+10 2.739e+10 4.029e+10 2.505e+10 3.299e+10 2.198e+10 2.480e+10 1.831e+10 1.641e+10 1.422e+10 8.751e+09 1.004e+10 2.869e+09 6.405e+09 -1.412e+09 4.404e+09 -7.884e+09 4.215e+09 -2.214e+10 4.011e+09 -4.875e+10 1.665e+09 -9.200e+10 -4.313e+09 -1.568e+11 -1.530e+10 -2.487e+11 -3.279e+10 -3.745e+11 -5.852e+10 -5.417e+11 -9.442e+10 -7.587e+11 -1.426e+11 -1.036e+12 -2.057e+11 -1.383e+12 -2.862e+11 -1.812e+12 -3.872e+11 -2.338e+12 -5.120e+11 -2.974e+12 -6.639e+11 -3.737e+12 -8.468e+11 -4.643e+12 -1.065e+12 -5.712e+12 -1.322e+12 -6.962e+12 -1.623e+12 -8.417e+12 -1.972e+12 -1.010e+13 -2.375e+12 -1.203e+13 -2.836e+12 -1.424e+13 -3.360e+12 -1.675e+13 -3.953e+12 -1.959e+13 -4.619e+12 -2.279e+13 -5.364e+12 -2.638e+13 -6.193e+12 -3.038e+13 -7.108e+12 -3.484e+13 -8.112e+12 -3.978e+13 -9.210e+12 -4.522e+13 -1.041e+13 -5.122e+13 -1.171e+13 -5.778e+13 -1.311e+13 -6.495e+13 -1.463e+13 -7.275e+13 -1.626e+13 -8.122e+13 -1.800e+13 -9.036e+13 -1.985e+13 -1.002e+14 -2.183e+13 -1.108e+14 -2.392e+13 -1.222e+14 -2.612e+13 -1.343e+14 -2.844e+13 -1.472e+14 -3.087e+13 -1.609e+14 -3.341e+13 -1.754e+14 -3.606e+13 -1.907e+14 -3.881e+13 -2.068e+14 -4.165e+13 -2.237e+14 -4.459e+13 -2.414e+14 -4.762e+13 -2.598e+14 -5.072e+13 -2.790e+14 -5.389e+13 -2.989e+14 -5.712e+13 -3.194e+14 -6.040e+13 -3.407e+14 -6.372e+13 -3.624e+14 -6.706e+13 -3.848e+14 -7.042e+13 -4.076e+14 -7.378e+13 -4.309e+14 -7.713e+13 -4.545e+14 -8.045e+13 -4.784e+14 -8.373e+13 -5.026e+14 -8.694e+13 -5.269e+14 -9.009e+13 -5.514e+14 -9.314e+13 -5.758e+14 -9.608e+13 -6.001e+14 -9.890e+13 -6.243e+14 -1.016e+14 -6.482e+14 -1.041e+14 -6.718e+14 -1.065e+14 -6.950e+14 -1.086e+14 -7.178e+14 -1.106e+14 -7.401e+14 -1.124e+14 -7.617e+14 -1.140e+14 -7.826e+14 -1.153e+14 -8.026e+14 -1.164e+14 -8.217e+14 -1.172e+14 -8.397e+14 -1.178e+14 -8.567e+14 -1.181e+14 -8.725e+14 -1.182e+14 -8.870e+14 -1.180e+14 -9.002e+14 -1.175e+14 -9.121e+14 -1.168e+14 -9.225e+14 -1.158e+14 -9.314e+14 -1.145e+14 -9.388e+14 -1.131e+14 -9.447e+14 -1.113e+14 -9.489e+14 -1.094e+14 -9.515e+14 -1.072e+14 -9.524e+14 -1.049e+14 -9.517e+14 -1.024e+14 -9.494e+14 -9.964e+13 -9.453e+14 -9.678e+13 -9.397e+14 -9.377e+13 -9.324e+14 -9.064e+13 -9.235e+14 -8.740e+13 -9.131e+14 -8.407e+13 -9.012e+14 -8.067e+13 -8.878e+14 -7.720e+13 -8.731e+14 -7.369e+13 -8.570e+14 -7.014e+13 -8.397e+14 -6.658e+13 -8.212e+14 -6.303e+13 -8.016e+14 -5.948e+13 -7.810e+14 -5.596e+13 -7.595e+14 -5.248e+13 -7.373e+14 -4.904e+13 -7.142e+14 -4.567e+13 -6.906e+14 -4.237e+13 -6.665e+14 -3.915e+13 -6.420e+14 -3.603e+13 -6.171e+14 -3.303e+13 -5.921e+14 -3.014e+13 -5.669e+14 -2.736e+13 -5.418e+14 -2.469e+13 -5.166e+14 -2.215e+13 -4.916e+14 -1.972e+13 -4.668e+14 -1.743e+13 -4.423e+14 -1.527e+13 -4.182e+14 -1.324e+13 -3.946e+14 -1.134e+13 -3.714e+14 -9.582e+12 -3.488e+14 -7.956e+12 -3.268e+14 -6.465e+12 -3.054e+14 -5.106e+12 -2.848e+14 -3.875e+12 -2.648e+14 -2.771e+12 -2.457e+14 -1.789e+12 -2.273e+14 -9.235e+11 -2.097e+14 -1.705e+11 -1.930e+14 4.765e+11 -1.771e+14 1.024e+12 -1.620e+14 1.478e+12 -1.477e+14 1.845e+12 -1.343e+14 2.134e+12 -1.217e+14 2.349e+12 -1.099e+14 2.500e+12 -9.883e+13 2.593e+12 -8.859e+13 2.635e+12 -7.910e+13 2.633e+12 -7.033e+13 2.593e+12 -6.228e+13 2.521e+12 -5.490e+13 2.424e+12 -4.815e+13 2.306e+12 -4.204e+13 2.172e+12 -3.651e+13 2.027e+12 -3.152e+13 1.875e+12 -2.706e+13 1.720e+12 -2.308e+13 1.564e+12 -1.954e+13 1.410e+12 -1.642e+13 1.260e+12 -1.370e+13 1.115e+12 -1.132e+13 9.782e+11 -9.258e+12 8.498e+11 -7.491e+12 7.308e+11 -5.986e+12 6.214e+11 -4.716e+12 5.222e+11 -3.656e+12 4.330e+11 -2.781e+12 3.536e+11 -2.068e+12 2.839e+11 -1.497e+12 2.233e+11 -1.047e+12 1.714e+11 -7.012e+11 1.277e+11 -4.431e+11 9.150e+10 -2.578e+11 6.221e+10 -1.323e+11 3.923e+10 -5.484e+10 2.194e+10 -1.497e+10 1.005e+10 8.551e+08 5.179e+09 1.533e+10 5.740e+09 4.081e+10 6.761e+09 7.549e+10 5.827e+09 1.150e+11 3.109e+09 1.558e+11 -9.613e+08 1.950e+11 -5.946e+09 2.306e+11 -1.144e+10 2.611e+11 -1.709e+10 2.856e+11 -2.258e+10 3.034e+11 -2.766e+10 3.146e+11 -3.212e+10 3.191e+11 -3.580e+10 3.174e+11 -3.859e+10 3.100e+11 -4.044e+10 2.977e+11 -4.131e+10 2.812e+11 -4.124e+10 2.614e+11 -4.027e+10 2.391e+11 -3.850e+10 2.151e+11 -3.602e+10 1.901e+11 -3.298e+10 1.650e+11 -2.950e+10 1.403e+11 -2.574e+10 1.167e+11 -2.185e+10 9.458e+10 -1.796e+10 7.440e+10 -1.421e+10 5.643e+10 -1.071e+10 4.087e+10 -7.576e+09 2.787e+10 -4.897e+09 1.751e+10 -2.753e+09 9.697e+09 -1.179e+09 4.332e+09 -2.002e+08 1.251e+09 1.982e+08 1.116e+08 2.860e+08 -1.018e+09 9.565e+08 -3.433e+09 2.230e+09 -7.114e+09 3.986e+09 -1.178e+10 6.138e+09 -1.714e+10 8.611e+09 -2.293e+10 1.133e+10 -2.886e+10 1.420e+10 -3.470e+10 1.717e+10 -4.024e+10 2.014e+10 0.005 -60.809 -58.623 -56.436 -54.250 -52.119 -50.168 -48.360 -46.669 -45.078 -43.575 -42.151 -40.799 -39.514 -38.291 -37.127 -36.019 -34.964 -33.959 -33.002 -32.092 -31.226 -30.403 -29.621 -28.879 -28.175 -27.509 -26.879 -26.284 -25.724 -25.197 -24.703 -24.241 -23.811 -23.411 -23.042 -22.702 -22.392 -22.110 -21.858 -21.634 -21.438 -21.269 -21.128 -21.014 -20.928 -20.870 -20.839 -20.835 -20.859 -20.911 -20.991 -21.099 -21.235 -21.399 -21.593 -21.815 -22.067 -22.350 -22.663 -23.007 -23.384 -23.792 -24.234 -24.710 -25.221 -25.769 -26.355 -26.979 -27.644 -28.352 -29.105 -29.905 -30.755 -31.660 -32.624 -33.652 -34.752 -35.932 -37.203 -38.583 -40.092 -41.761 -43.635 -45.787 -48.338 -51.526 -55.890 -62.699 -66.015 -61.446 -56.919 -54.369 -52.786 -51.796 -51.239 -51.046 -51.191 -51.666 -52.424 -53.209 -53.290 -51.909 -49.325 -46.381 -43.567 -41.000 -38.668 -36.538 -34.574 -32.750 -31.043 -29.438 -27.921 -26.483 -25.116 -23.812 -22.568 -21.377 -20.237 -19.143 -18.095 -17.088 -16.121 -15.192 -14.300 -13.443 -12.619 -11.828 -11.069 -10.340 -9.641 -8.971 -8.329 -7.714 -7.126 -6.564 -6.028 -5.517 -5.031 -4.569 -4.131 -3.717 -3.327 -2.960 -2.616 -2.295 -1.997 -1.721 -1.468 -1.237 -1.029 -0.844 -0.681 -0.540 -0.423 -0.328 -0.256 -0.208 -0.184 -0.183 -0.207 -0.255 -0.328 -0.428 -0.553 -0.706 -0.887 -1.096 -1.335 -1.604 -1.906 -2.240 -2.610 -3.016 -3.461 -3.946 -4.475 -5.050 -5.675 -6.353 -7.089 -7.888 -8.757 -9.703 -10.735 -11.865 -13.106 -14.476 -15.997 -17.700 -19.625 -21.829 -24.398 -27.466 -31.266 -36.267 -43.703 -60.016 -55.517 -58.486 -49.071 -39.464 -33.554 -29.247 -25.851 -23.050 -20.672 -18.611 -16.798 -15.185 -13.737 -12.429 -11.240 -10.156 -9.163 -8.251 -7.413 -6.641 -5.930 -5.274 -4.670 -4.113 -3.602 -3.132 -2.702 -2.309 -1.952 -1.629 -1.338 -1.079 -0.850 -0.650 -0.479 -0.334 -0.216 -0.125 -0.058 -0.017 0.000 -0.007 -0.038 -0.092 -0.169 -0.270 -0.393 -0.538 -0.706 -0.897 -1.110 -1.345 -1.603 -1.883 -2.185 -2.511 -2.859 -3.230 -3.624 -4.041 -4.483 -4.948 -5.437 -5.951 -6.491 -7.055 -7.646 -8.263 -8.907 -9.578 -10.278 -11.007 -11.765 -12.555 -13.375 -14.228 -15.115 -16.036 -16.993 -17.987 -19.020 -20.093 -21.208 -22.366 -23.571 -24.824 -26.128 -27.487 -28.904 -30.382 -31.928 -33.546 -35.244 -37.029 -38.912 -40.905 -43.021 -45.276 -47.685 -50.255 -52.961 -55.695 -58.159 -59.851 -60.390 -59.890 -58.748 -57.250 -55.547 -53.733 -51.885 -50.059 -48.289 -46.592 -44.975 -43.437 -41.976 -40.588 -39.267 -38.011 -36.815 -35.675 -34.589 -33.554 -32.567 -31.628 -30.733 -29.881 -29.070 -28.300 -27.569 -26.875 -26.219 -25.598 -25.012 -24.460 -23.941 -23.454 -22.999 -22.575 -22.182 -21.818 -21.484 -21.178 -20.901 -20.651 -20.429 -20.235 -20.067 -19.925 -19.810 -19.721 -19.657 -19.619 -19.606 -19.619 -19.656 -19.718 -19.806 -19.918 -20.055 -20.216 -20.403 -20.613 -20.849 -21.109 -21.395 -21.706 -22.042 -22.404 -22.791 -23.204 -23.644 -24.110 -24.602 -25.121 -25.668 -26.241 -26.842 -27.471 -28.128 -28.813 -29.527 -30.269 -31.040 -31.839 -32.666 -33.522 -34.405 -35.315 -36.251 -37.211 -38.193 -39.196 -40.216 -41.248 -42.289 -43.333 -44.371 -45.396 -46.417 -47.437 -48.458 0 1 1.0 1 N6 VV 36.71 40.21 0.05 -3.800e+08 6.441e+08 -3.168e+08 6.198e+08 -2.574e+08 5.933e+08 -2.018e+08 5.651e+08 -1.502e+08 5.356e+08 -1.026e+08 5.052e+08 -5.877e+07 4.743e+08 -1.867e+07 4.432e+08 1.788e+07 4.123e+08 5.121e+07 3.818e+08 8.169e+07 3.520e+08 1.097e+08 3.231e+08 1.356e+08 2.953e+08 1.602e+08 2.685e+08 1.837e+08 2.427e+08 2.069e+08 2.178e+08 2.302e+08 1.933e+08 2.541e+08 1.690e+08 2.787e+08 1.443e+08 3.043e+08 1.186e+08 3.309e+08 9.163e+07 3.582e+08 6.288e+07 3.861e+08 3.199e+07 4.140e+08 -1.181e+06 4.414e+08 -3.674e+07 4.680e+08 -7.468e+07 4.931e+08 -1.148e+08 5.162e+08 -1.568e+08 5.368e+08 -2.004e+08 5.546e+08 -2.451e+08 5.691e+08 -2.904e+08 5.801e+08 -3.359e+08 5.876e+08 -3.811e+08 5.913e+08 -4.253e+08 5.913e+08 -4.683e+08 5.878e+08 -5.094e+08 5.809e+08 -5.482e+08 5.708e+08 -5.843e+08 5.578e+08 -6.175e+08 5.424e+08 -6.473e+08 5.247e+08 -6.735e+08 5.053e+08 -6.959e+08 4.845e+08 -7.143e+08 4.626e+08 -7.284e+08 4.401e+08 -7.383e+08 4.172e+08 -7.438e+08 3.943e+08 -7.449e+08 3.716e+08 -7.415e+08 3.494e+08 -7.337e+08 3.279e+08 -7.215e+08 3.071e+08 -7.051e+08 2.873e+08 -6.847e+08 2.685e+08 -6.604e+08 2.506e+08 -6.325e+08 2.336e+08 -6.015e+08 2.176e+08 -5.676e+08 2.023e+08 -5.313e+08 1.878e+08 -4.931e+08 1.739e+08 -4.535e+08 1.605e+08 -4.130e+08 1.476e+08 -3.723e+08 1.350e+08 -3.319e+08 1.227e+08 -2.923e+08 1.107e+08 -2.541e+08 9.898e+07 -2.177e+08 8.752e+07 -1.836e+08 7.643e+07 -1.521e+08 6.578e+07 -1.236e+08 5.565e+07 -9.812e+07 4.617e+07 -7.591e+07 3.742e+07 -5.693e+07 2.948e+07 -4.109e+07 2.246e+07 -2.828e+07 1.641e+07 -1.828e+07 1.134e+07 -1.082e+07 7.297e+06 -5.598e+06 4.255e+06 -2.273e+06 2.189e+06 -4.533e+05 1.051e+06 3.907e+05 5.169e+05 1.087e+06 -5.821e+04 2.186e+06 -1.026e+06 3.653e+06 -2.436e+06 5.280e+06 -4.240e+06 6.879e+06 -6.368e+06 8.299e+06 -8.763e+06 9.434e+06 -1.139e+07 1.021e+07 -1.422e+07 1.059e+07 -1.727e+07 1.054e+07 -2.057e+07 1.003e+07 -2.418e+07 9.048e+06 -2.818e+07 7.550e+06 -3.266e+07 5.473e+06 -3.772e+07 2.732e+06 -4.345e+07 -7.848e+05 -4.994e+07 -5.216e+06 -5.724e+07 -1.070e+07 -6.537e+07 -1.740e+07 -7.436e+07 -2.545e+07 -8.415e+07 -3.499e+07 -9.467e+07 -4.613e+07 -1.058e+08 -5.897e+07 -1.174e+08 -7.353e+07 -1.292e+08 -8.981e+07 -1.410e+08 -1.078e+08 -1.524e+08 -1.273e+08 -1.633e+08 -1.482e+08 -1.731e+08 -1.703e+08 -1.817e+08 -1.934e+08 -1.886e+08 -2.170e+08 -1.935e+08 -2.408e+08 -1.961e+08 -2.644e+08 -1.962e+08 -2.873e+08 -1.936e+08 -3.090e+08 -1.882e+08 -3.291e+08 -1.800e+08 -3.471e+08 -1.690e+08 -3.626e+08 -1.554e+08 -3.751e+08 -1.394e+08 -3.843e+08 -1.214e+08 -3.901e+08 -1.017e+08 -3.921e+08 -8.085e+07 -3.904e+08 -5.921e+07 -3.850e+08 -3.730e+07 -3.759e+08 -1.562e+07 -3.635e+08 5.402e+06 -3.480e+08 2.534e+07 -3.297e+08 4.383e+07 -3.093e+08 6.061e+07 -2.871e+08 7.546e+07 -2.636e+08 8.824e+07 -2.393e+08 9.893e+07 -2.148e+08 1.075e+08 -1.903e+08 1.141e+08 -1.664e+08 1.189e+08 -1.433e+08 1.219e+08 -1.212e+08 1.235e+08 -1.002e+08 1.238e+08 -8.060e+07 1.229e+08 -6.221e+07 1.210e+08 -4.508e+07 1.181e+08 -2.910e+07 1.144e+08 -1.421e+07 1.098e+08 -3.117e+05 1.044e+08 1.268e+07 9.807e+07 2.483e+07 9.084e+07 3.620e+07 8.269e+07 4.689e+07 7.362e+07 5.702e+07 6.363e+07 6.681e+07 5.261e+07 7.660e+07 4.034e+07 8.688e+07 2.633e+07 9.826e+07 9.694e+06 1.115e+08 -1.092e+07 1.273e+08 -3.733e+07 1.463e+08 -7.190e+07 1.690e+08 -1.174e+08 1.956e+08 -1.768e+08 2.260e+08 -2.535e+08 2.599e+08 -3.511e+08 2.968e+08 -4.730e+08 3.356e+08 -6.228e+08 3.753e+08 -8.042e+08 4.144e+08 -1.020e+09 4.511e+08 -1.274e+09 4.836e+08 -1.568e+09 5.096e+08 -1.903e+09 5.265e+08 -2.282e+09 5.318e+08 -2.703e+09 5.226e+08 -3.166e+09 4.962e+08 -3.669e+09 4.496e+08 -4.208e+09 3.803e+08 -4.780e+09 2.859e+08 -5.378e+09 1.643e+08 -5.996e+09 1.365e+07 -6.626e+09 -1.669e+08 -7.261e+09 -3.779e+08 -7.891e+09 -6.194e+08 -8.507e+09 -8.902e+08 -9.099e+09 -1.189e+09 -9.659e+09 -1.513e+09 -1.018e+10 -1.858e+09 -1.064e+10 -2.223e+09 -1.105e+10 -2.601e+09 -1.139e+10 -2.990e+09 -1.166e+10 -3.384e+09 -1.186e+10 -3.778e+09 -1.198e+10 -4.168e+09 -1.201e+10 -4.547e+09 -1.197e+10 -4.912e+09 -1.184e+10 -5.258e+09 -1.163e+10 -5.580e+09 -1.135e+10 -5.875e+09 -1.099e+10 -6.140e+09 -1.056e+10 -6.372e+09 -1.006e+10 -6.569e+09 -9.507e+09 -6.730e+09 -8.903e+09 -6.855e+09 -8.254e+09 -6.944e+09 -7.570e+09 -6.998e+09 -6.858e+09 -7.020e+09 -6.126e+09 -7.013e+09 -5.384e+09 -6.983e+09 -4.639e+09 -6.934e+09 -3.896e+09 -6.877e+09 -3.161e+09 -6.819e+09 -2.434e+09 -6.772e+09 -1.712e+09 -6.749e+09 -9.878e+08 -6.762e+09 -2.476e+08 -6.824e+09 5.283e+08 -6.946e+09 1.364e+09 -7.137e+09 2.289e+09 -7.401e+09 3.333e+09 -7.738e+09 4.526e+09 -8.145e+09 5.897e+09 -8.614e+09 7.469e+09 -9.135e+09 9.259e+09 -9.696e+09 1.128e+10 -1.028e+10 1.355e+10 -1.089e+10 1.606e+10 -1.149e+10 1.880e+10 -1.209e+10 2.178e+10 -1.266e+10 2.497e+10 -1.320e+10 2.835e+10 -1.369e+10 3.190e+10 -1.413e+10 3.557e+10 -1.451e+10 3.935e+10 -1.483e+10 4.319e+10 -1.508e+10 4.705e+10 -1.526e+10 5.089e+10 -1.536e+10 5.466e+10 -1.539e+10 5.832e+10 -1.535e+10 6.183e+10 -1.523e+10 6.515e+10 -1.506e+10 6.824e+10 -1.482e+10 7.107e+10 -1.453e+10 7.359e+10 -1.419e+10 7.579e+10 -1.380e+10 7.763e+10 -1.337e+10 7.911e+10 -1.291e+10 8.019e+10 -1.242e+10 8.088e+10 -1.190e+10 8.116e+10 -1.137e+10 8.103e+10 -1.081e+10 8.050e+10 -1.024e+10 7.956e+10 -9.659e+09 7.823e+10 -9.065e+09 7.653e+10 -8.463e+09 7.446e+10 -7.854e+09 7.206e+10 -7.240e+09 6.933e+10 -6.622e+09 6.632e+10 -6.004e+09 6.306e+10 -5.389e+09 5.956e+10 -4.778e+09 5.588e+10 -4.177e+09 5.205e+10 -3.590e+09 4.810e+10 -3.021e+09 4.408e+10 -2.476e+09 4.004e+10 -1.959e+09 3.601e+10 -1.475e+09 3.205e+10 -1.032e+09 2.819e+10 -6.312e+08 2.446e+10 -2.780e+08 2.092e+10 2.411e+07 1.758e+10 2.730e+08 1.449e+10 4.677e+08 1.167e+10 6.079e+08 9.145e+09 6.953e+08 6.926e+09 7.327e+08 5.029e+09 7.245e+08 3.456e+09 6.763e+08 2.202e+09 5.954e+08 1.259e+09 4.911e+08 6.085e+08 3.767e+08 2.184e+08 2.764e+08 6.858e+06 2.377e+08 -1.940e+08 2.880e+08 -5.102e+08 3.896e+08 -9.629e+08 5.026e+08 -1.529e+09 6.077e+08 -2.177e+09 6.966e+08 -2.872e+09 7.650e+08 -3.582e+09 8.113e+08 -4.279e+09 8.355e+08 -4.935e+09 8.388e+08 -5.529e+09 8.231e+08 -6.042e+09 7.915e+08 -6.462e+09 7.472e+08 -6.780e+09 6.937e+08 -6.990e+09 6.344e+08 -7.091e+09 5.726e+08 -7.087e+09 5.111e+08 -6.983e+09 4.523e+08 -6.788e+09 3.980e+08 -6.512e+09 3.495e+08 -6.167e+09 3.073e+08 -5.766e+09 2.716e+08 -5.322e+09 2.422e+08 -4.848e+09 2.182e+08 -4.352e+09 2.349e+08 -3.878e+09 1.651e+08 -3.386e+09 1.537e+08 -2.911e+09 1.439e+08 -2.461e+09 1.346e+08 -2.042e+09 1.251e+08 -1.661e+09 1.150e+08 -1.321e+09 1.040e+08 -1.024e+09 9.207e+07 -7.703e+08 7.948e+07 -5.601e+08 6.654e+07 -3.908e+08 5.370e+07 -2.596e+08 4.150e+07 -1.620e+08 3.040e+07 -9.331e+07 2.082e+07 -4.828e+07 1.306e+07 -2.144e+07 7.247e+06 -7.500e+06 3.341e+06 -1.710e+06 1.121e+06 -1.233e+05 1.852e+05 3.398e+04 -2.548e+04 -3.751e+04 -2.804e+05 -1.018e+06 -1.126e+06 -5.357e+06 -3.300e+06 -1.772e+07 -7.487e+06 -4.496e+07 -1.424e+07 -9.597e+07 -2.399e+07 -1.813e+08 -3.694e+07 -3.132e+08 -5.315e+07 -5.047e+08 -7.251e+07 -7.687e+08 -9.470e+07 -1.118e+09 -1.193e+08 -1.565e+09 -1.460e+08 -2.118e+09 -1.741e+08 -2.783e+09 -2.031e+08 -3.563e+09 -2.328e+08 -4.456e+09 -2.626e+08 -5.454e+09 -2.923e+08 -6.546e+09 -3.218e+08 -7.713e+09 -3.508e+08 -8.932e+09 -3.791e+08 -1.018e+10 -4.063e+08 -1.141e+10 -4.321e+08 -1.261e+10 -4.560e+08 -1.373e+10 -4.772e+08 -1.473e+10 -4.947e+08 -1.557e+10 -5.074e+08 -1.623e+10 -5.138e+08 -1.667e+10 -5.127e+08 -1.686e+10 -5.027e+08 -1.680e+10 -4.827e+08 -1.646e+10 -4.518e+08 -1.586e+10 -4.097e+08 -1.498e+10 -3.569e+08 -1.387e+10 -2.946e+08 -1.254e+10 -2.246e+08 -1.103e+10 -1.499e+08 -9.401e+09 -7.427e+07 -7.703e+09 -2.222e+06 -6.003e+09 6.116e+07 -4.377e+09 1.103e+08 -2.901e+09 1.398e+08 -1.656e+09 1.443e+08 -7.252e+08 1.199e+08 -1.811e+08 7.299e+07 9.688e+07 7.569e+07 5.782e+08 1.881e+08 1.633e+09 3.599e+08 3.318e+09 5.697e+08 5.654e+09 8.122e+08 8.646e+09 1.082e+09 1.226e+10 1.371e+09 1.645e+10 1.672e+09 2.113e+10 1.977e+09 2.618e+10 2.277e+09 3.143e+10 2.562e+09 3.672e+10 2.828e+09 4.180e+10 3.069e+09 4.645e+10 3.280e+09 5.038e+10 3.462e+09 5.334e+10 3.617e+09 5.505e+10 3.750e+09 5.528e+10 3.861e+09 5.381e+10 3.946e+09 5.055e+10 4.000e+09 4.547e+10 4.014e+09 3.873e+10 3.966e+09 3.067e+10 3.822e+09 2.187e+10 3.531e+09 1.320e+10 3.028e+09 5.911e+09 2.259e+09 1.341e+09 1.514e+09 -2.435e+09 2.124e+09 -1.163e+10 4.646e+09 -3.192e+10 8.659e+09 -6.756e+10 1.424e+10 -1.234e+11 2.173e+10 -2.052e+11 3.158e+10 -3.195e+11 4.432e+10 -4.739e+11 6.054e+10 -6.772e+11 8.091e+10 -9.392e+11 1.062e+11 -1.270e+12 1.372e+11 -1.684e+12 1.748e+11 -2.192e+12 2.201e+11 -2.810e+12 2.741e+11 -3.554e+12 3.382e+11 -4.441e+12 4.136e+11 -5.489e+12 5.016e+11 -6.720e+12 6.041e+11 -8.155e+12 7.226e+11 -9.815e+12 8.591e+11 -1.173e+13 1.016e+12 -1.391e+13 1.194e+12 -1.640e+13 1.398e+12 -1.922e+13 1.629e+12 -2.240e+13 1.890e+12 -2.597e+13 2.185e+12 -2.996e+13 2.516e+12 -3.440e+13 2.888e+12 -3.932e+13 3.306e+12 -4.476e+13 3.779e+12 -5.075e+13 4.308e+12 -5.731e+13 4.898e+12 -6.449e+13 5.553e+12 -7.232e+13 6.277e+12 -8.081e+13 7.077e+12 -9.002e+13 7.957e+12 -9.995e+13 8.923e+12 -1.106e+14 9.978e+12 -1.221e+14 1.113e+13 -1.344e+14 1.238e+13 -1.475e+14 1.373e+13 -1.614e+14 1.519e+13 -1.761e+14 1.676e+13 -1.917e+14 1.845e+13 -2.082e+14 2.025e+13 -2.254e+14 2.216e+13 -2.435e+14 2.419e+13 -2.625e+14 2.634e+13 -2.821e+14 2.860e+13 -3.026e+14 3.098e+13 -3.238e+14 3.346e+13 -3.457e+14 3.606e+13 -3.682e+14 3.875e+13 -3.913e+14 4.155e+13 -4.149e+14 4.444e+13 -4.391e+14 4.742e+13 -4.636e+14 5.048e+13 -4.885e+14 5.362e+13 -5.136e+14 5.683e+13 -5.390e+14 6.010e+13 -5.644e+14 6.342e+13 -5.899e+14 6.679e+13 -6.153e+14 7.021e+13 -6.406e+14 7.366e+13 -6.656e+14 7.713e+13 -6.904e+14 8.062e+13 -7.147e+14 8.413e+13 -7.385e+14 8.764e+13 -7.619e+14 9.115e+13 -7.846e+14 9.469e+13 -8.066e+14 9.822e+13 -8.279e+14 1.017e+14 -8.482e+14 1.052e+14 -8.675e+14 1.086e+14 -8.857e+14 1.120e+14 -9.028e+14 1.153e+14 -9.187e+14 1.185e+14 -9.333e+14 1.216e+14 -9.466e+14 1.246e+14 -9.584e+14 1.275e+14 -9.688e+14 1.303e+14 -9.777e+14 1.329e+14 -9.850e+14 1.354e+14 -9.907e+14 1.377e+14 -9.947e+14 1.398e+14 -9.971e+14 1.417e+14 -9.978e+14 1.433e+14 -9.968e+14 1.448e+14 -9.942e+14 1.460e+14 -9.898e+14 1.469e+14 -9.837e+14 1.476e+14 -9.760e+14 1.480e+14 -9.667e+14 1.482e+14 -9.557e+14 1.480e+14 -9.432e+14 1.476e+14 -9.292e+14 1.469e+14 -9.137e+14 1.459e+14 -8.969e+14 1.446e+14 -8.787e+14 1.431e+14 -8.594e+14 1.413e+14 -8.389e+14 1.393e+14 -8.174e+14 1.370e+14 -7.949e+14 1.345e+14 -7.716e+14 1.317e+14 -7.475e+14 1.288e+14 -7.229e+14 1.257e+14 -6.976e+14 1.224e+14 -6.720e+14 1.190e+14 -6.460e+14 1.154e+14 -6.199e+14 1.117e+14 -5.935e+14 1.079e+14 -5.672e+14 1.040e+14 -5.410e+14 1.001e+14 -5.149e+14 9.615e+13 -4.890e+14 9.216e+13 -4.635e+14 8.816e+13 -4.385e+14 8.417e+13 -4.138e+14 8.020e+13 -3.898e+14 7.626e+13 -3.663e+14 7.237e+13 -3.434e+14 6.852e+13 -3.213e+14 6.475e+13 -2.999e+14 6.105e+13 -2.793e+14 5.742e+13 -2.594e+14 5.389e+13 -2.404e+14 5.045e+13 -2.222e+14 4.711e+13 -2.048e+14 4.388e+13 -1.883e+14 4.077e+13 -1.726e+14 3.776e+13 -1.578e+14 3.488e+13 -1.438e+14 3.212e+13 -1.306e+14 2.948e+13 -1.183e+14 2.697e+13 -1.068e+14 2.459e+13 -9.606e+13 2.234e+13 -8.609e+13 2.022e+13 -7.687e+13 1.823e+13 -6.835e+13 1.636e+13 -6.052e+13 1.463e+13 -5.336e+13 1.301e+13 -4.681e+13 1.152e+13 -4.088e+13 1.015e+13 -3.552e+13 8.898e+12 -3.069e+13 7.753e+12 -2.636e+13 6.716e+12 -2.250e+13 5.780e+12 -1.907e+13 4.940e+12 -1.605e+13 4.192e+12 -1.340e+13 3.528e+12 -1.109e+13 2.943e+12 -9.094e+12 2.432e+12 -7.378e+12 1.989e+12 -5.913e+12 1.608e+12 -4.677e+12 1.283e+12 -3.643e+12 1.008e+12 -2.787e+12 7.789e+11 -2.088e+12 5.898e+11 -1.526e+12 4.359e+11 -1.081e+12 3.127e+11 -7.363e+11 2.161e+11 -4.765e+11 1.422e+11 -2.870e+11 8.747e+10 -1.555e+11 4.875e+10 -7.090e+10 2.316e+10 -2.315e+10 8.143e+09 -3.759e+09 1.533e+09 5.664e+09 -1.190e+09 2.240e+10 -5.642e+09 4.889e+10 -1.334e+10 8.088e+10 -2.309e+10 1.150e+11 -3.388e+10 1.485e+11 -4.490e+10 1.795e+11 -5.547e+10 2.065e+11 -6.511e+10 2.286e+11 -7.344e+10 2.451e+11 -8.020e+10 2.560e+11 -8.524e+10 2.613e+11 -8.848e+10 2.612e+11 -8.992e+10 2.562e+11 -8.965e+10 2.470e+11 -8.777e+10 2.341e+11 -8.445e+10 2.182e+11 -7.986e+10 2.001e+11 -7.423e+10 1.805e+11 -6.779e+10 1.599e+11 -6.077e+10 1.391e+11 -5.339e+10 1.186e+11 -4.589e+10 9.888e+10 -3.850e+10 8.035e+10 -3.138e+10 6.338e+10 -2.472e+10 4.822e+10 -1.867e+10 3.505e+10 -1.335e+10 2.401e+10 -8.851e+09 1.518e+10 -5.267e+09 8.484e+09 -2.604e+09 3.851e+09 -8.685e+08 1.155e+09 -1.996e+07 1.453e+08 2.400e+08 -7.695e+08 1.023e+09 -2.760e+09 2.554e+09 -5.837e+09 4.720e+09 -9.766e+09 7.398e+09 -1.430e+10 1.048e+10 -1.922e+10 1.384e+10 -2.427e+10 1.737e+10 -2.926e+10 2.097e+10 -3.400e+10 2.453e+10 0.005 -60.734 -58.968 -57.202 -55.436 -53.650 -51.819 -50.013 -48.267 -46.596 -45.002 -43.486 -42.044 -40.674 -39.371 -38.131 -36.953 -35.832 -34.767 -33.753 -32.789 -31.872 -31.002 -30.175 -29.390 -28.646 -27.941 -27.274 -26.644 -26.049 -25.489 -24.963 -24.470 -24.009 -23.580 -23.182 -22.813 -22.475 -22.166 -21.886 -21.635 -21.411 -21.215 -21.047 -20.906 -20.793 -20.707 -20.648 -20.616 -20.611 -20.634 -20.684 -20.760 -20.865 -20.996 -21.156 -21.343 -21.559 -21.804 -22.077 -22.379 -22.711 -23.073 -23.465 -23.888 -24.343 -24.829 -25.349 -25.902 -26.489 -27.111 -27.769 -28.464 -29.198 -29.971 -30.784 -31.641 -32.541 -33.488 -34.483 -35.530 -36.630 -37.787 -39.004 -40.282 -41.624 -43.026 -44.480 -45.969 -47.457 -48.889 -50.190 -51.289 -52.158 -52.837 -53.440 -54.117 -55.042 -56.389 -58.190 -59.418 -57.908 -54.194 -50.293 -46.903 -43.978 -41.401 -39.086 -36.973 -35.023 -33.207 -31.504 -29.897 -28.377 -26.932 -25.556 -24.242 -22.986 -21.783 -20.630 -19.523 -18.460 -17.440 -16.459 -15.516 -14.609 -13.738 -12.900 -12.095 -11.321 -10.578 -9.865 -9.181 -8.525 -7.896 -7.295 -6.719 -6.169 -5.645 -5.145 -4.670 -4.219 -3.792 -3.388 -3.008 -2.650 -2.316 -2.004 -1.714 -1.448 -1.203 -0.981 -0.782 -0.604 -0.449 -0.317 -0.208 -0.121 -0.057 -0.017 0.000 -0.007 -0.038 -0.095 -0.176 -0.283 -0.416 -0.577 -0.765 -0.982 -1.229 -1.507 -1.816 -2.159 -2.538 -2.952 -3.406 -3.900 -4.439 -5.023 -5.658 -6.346 -7.093 -7.904 -8.784 -9.743 -10.788 -11.932 -13.188 -14.573 -16.111 -17.832 -19.773 -21.994 -24.574 -27.640 -31.401 -36.244 -43.011 -54.192 -73.727 -56.653 -44.348 -37.152 -32.088 -28.192 -25.035 -22.390 -20.121 -18.140 -16.390 -14.827 -13.420 -12.146 -10.987 -9.929 -8.959 -8.068 -7.248 -6.493 -5.798 -5.157 -4.566 -4.023 -3.523 -3.065 -2.647 -2.265 -1.918 -1.605 -1.325 -1.076 -0.856 -0.666 -0.503 -0.368 -0.259 -0.176 -0.119 -0.087 -0.079 -0.095 -0.134 -0.197 -0.284 -0.393 -0.525 -0.680 -0.857 -1.057 -1.280 -1.525 -1.792 -2.083 -2.396 -2.731 -3.090 -3.472 -3.877 -4.306 -4.759 -5.237 -5.739 -6.266 -6.818 -7.397 -8.001 -8.633 -9.292 -9.980 -10.697 -11.443 -12.220 -13.028 -13.870 -14.745 -15.654 -16.600 -17.584 -18.606 -19.670 -20.776 -21.927 -23.126 -24.376 -25.680 -27.042 -28.467 -29.961 -31.530 -33.183 -34.933 -36.792 -38.780 -40.920 -43.243 -45.786 -48.576 -51.577 -54.496 -56.567 -57.098 -56.466 -55.557 -54.794 -54.236 -53.821 -53.444 -52.983 -52.320 -51.382 -50.171 -48.755 -47.222 -45.651 -44.094 -42.581 -41.128 -39.740 -38.418 -37.161 -35.968 -34.834 -33.757 -32.735 -31.764 -30.843 -29.969 -29.140 -28.354 -27.610 -26.906 -26.242 -25.615 -25.024 -24.469 -23.948 -23.461 -23.006 -22.584 -22.192 -21.831 -21.500 -21.199 -20.926 -20.681 -20.465 -20.276 -20.114 -19.980 -19.871 -19.789 -19.733 -19.702 -19.697 -19.718 -19.764 -19.835 -19.931 -20.052 -20.199 -20.370 -20.566 -20.786 -21.032 -21.304 -21.600 -21.922 -22.270 -22.644 -23.044 -23.470 -23.923 -24.402 -24.909 -25.443 -26.004 -26.594 -27.212 -27.858 -28.533 -29.238 -29.972 -30.736 -31.529 -32.353 -33.207 -34.091 -35.005 -35.948 -36.920 -37.921 -38.948 -40.000 -41.075 -42.170 -43.280 -44.400 -45.524 -46.649 -47.773 -48.898 0 1 1.0 1 N6 VH 36.71 40.21 0.05 -2.825e+08 8.601e+07 -2.637e+08 1.002e+08 -2.446e+08 1.129e+08 -2.254e+08 1.241e+08 -2.062e+08 1.339e+08 -1.871e+08 1.423e+08 -1.682e+08 1.494e+08 -1.496e+08 1.553e+08 -1.313e+08 1.600e+08 -1.134e+08 1.637e+08 -9.581e+07 1.664e+08 -7.866e+07 1.681e+08 -6.190e+07 1.691e+08 -4.549e+07 1.693e+08 -2.942e+07 1.688e+08 -1.363e+07 1.678e+08 1.968e+06 1.662e+08 1.742e+07 1.642e+08 3.283e+07 1.618e+08 4.833e+07 1.590e+08 6.397e+07 1.559e+08 7.987e+07 1.523e+08 9.613e+07 1.482e+08 1.128e+08 1.436e+08 1.298e+08 1.383e+08 1.473e+08 1.323e+08 1.652e+08 1.254e+08 1.833e+08 1.175e+08 2.017e+08 1.087e+08 2.200e+08 9.870e+07 2.381e+08 8.762e+07 2.559e+08 7.543e+07 2.730e+08 6.215e+07 2.893e+08 4.789e+07 3.046e+08 3.272e+07 3.185e+08 1.680e+07 3.310e+08 3.220e+05 3.419e+08 -1.655e+07 3.509e+08 -3.357e+07 3.581e+08 -5.052e+07 3.632e+08 -6.715e+07 3.663e+08 -8.323e+07 3.673e+08 -9.850e+07 3.663e+08 -1.127e+08 3.633e+08 -1.257e+08 3.584e+08 -1.373e+08 3.517e+08 -1.472e+08 3.432e+08 -1.555e+08 3.332e+08 -1.618e+08 3.218e+08 -1.662e+08 3.092e+08 -1.687e+08 2.955e+08 -1.693e+08 2.808e+08 -1.679e+08 2.654e+08 -1.648e+08 2.495e+08 -1.600e+08 2.332e+08 -1.536e+08 2.166e+08 -1.459e+08 1.999e+08 -1.370e+08 1.833e+08 -1.272e+08 1.668e+08 -1.167e+08 1.508e+08 -1.058e+08 1.351e+08 -9.462e+07 1.200e+08 -8.345e+07 1.056e+08 -7.252e+07 9.190e+07 -6.200e+07 7.901e+07 -5.205e+07 6.703e+07 -4.283e+07 5.600e+07 -3.444e+07 4.598e+07 -2.697e+07 3.699e+07 -2.048e+07 2.904e+07 -1.497e+07 2.214e+07 -1.042e+07 1.629e+07 -6.793e+06 1.144e+07 -4.033e+06 7.555e+06 -2.048e+06 4.590e+06 -7.432e+05 2.470e+06 1.126e+03 1.114e+06 3.260e+05 3.934e+05 4.413e+05 -2.562e+04 6.445e+05 -5.779e+05 1.041e+06 -1.431e+06 1.532e+06 -2.567e+06 2.010e+06 -3.923e+06 2.393e+06 -5.426e+06 2.618e+06 -7.017e+06 2.641e+06 -8.649e+06 2.429e+06 -1.028e+07 1.959e+06 -1.190e+07 1.213e+06 -1.350e+07 1.731e+05 -1.508e+07 -1.178e+06 -1.666e+07 -2.869e+06 -1.825e+07 -4.937e+06 -1.987e+07 -7.430e+06 -2.154e+07 -1.041e+07 -2.327e+07 -1.394e+07 -2.505e+07 -1.810e+07 -2.685e+07 -2.296e+07 -2.866e+07 -2.859e+07 -3.043e+07 -3.502e+07 -3.210e+07 -4.230e+07 -3.362e+07 -5.045e+07 -3.491e+07 -5.943e+07 -3.590e+07 -6.919e+07 -3.650e+07 -7.965e+07 -3.666e+07 -9.070e+07 -3.628e+07 -1.022e+08 -3.530e+07 -1.139e+08 -3.366e+07 -1.258e+08 -3.131e+07 -1.374e+08 -2.822e+07 -1.487e+08 -2.435e+07 -1.593e+08 -1.972e+07 -1.691e+08 -1.434e+07 -1.778e+08 -8.257e+06 -1.851e+08 -1.543e+06 -1.909e+08 5.722e+06 -1.951e+08 1.342e+07 -1.974e+08 2.143e+07 -1.979e+08 2.961e+07 -1.965e+08 3.780e+07 -1.932e+08 4.586e+07 -1.881e+08 5.362e+07 -1.812e+08 6.096e+07 -1.729e+08 6.773e+07 -1.631e+08 7.384e+07 -1.523e+08 7.920e+07 -1.405e+08 8.376e+07 -1.281e+08 8.748e+07 -1.153e+08 9.038e+07 -1.023e+08 9.247e+07 -8.929e+07 9.382e+07 -7.648e+07 9.447e+07 -6.399e+07 9.452e+07 -5.193e+07 9.401e+07 -4.034e+07 9.301e+07 -2.925e+07 9.154e+07 -1.867e+07 8.962e+07 -8.573e+06 8.722e+07 1.064e+06 8.432e+07 1.024e+07 8.084e+07 1.898e+07 7.674e+07 2.725e+07 7.193e+07 3.501e+07 6.637e+07 4.222e+07 6.001e+07 4.883e+07 5.284e+07 5.479e+07 4.488e+07 6.012e+07 3.613e+07 6.486e+07 2.657e+07 6.913e+07 1.608e+07 7.317e+07 4.403e+06 7.724e+07 -8.941e+06 8.168e+07 -2.478e+07 8.680e+07 -4.426e+07 9.279e+07 -6.886e+07 9.964e+07 -1.004e+08 1.071e+08 -1.409e+08 1.146e+08 -1.925e+08 1.214e+08 -2.575e+08 1.264e+08 -3.383e+08 1.284e+08 -4.371e+08 1.260e+08 -5.564e+08 1.174e+08 -6.983e+08 1.010e+08 -8.647e+08 7.496e+07 -1.058e+09 3.722e+07 -1.279e+09 -1.422e+07 -1.529e+09 -8.131e+07 -1.808e+09 -1.661e+08 -2.117e+09 -2.705e+08 -2.455e+09 -3.960e+08 -2.820e+09 -5.443e+08 -3.211e+09 -7.166e+08 -3.623e+09 -9.136e+08 -4.055e+09 -1.136e+09 -4.500e+09 -1.383e+09 -4.955e+09 -1.655e+09 -5.412e+09 -1.951e+09 -5.867e+09 -2.269e+09 -6.311e+09 -2.607e+09 -6.739e+09 -2.962e+09 -7.144e+09 -3.330e+09 -7.517e+09 -3.708e+09 -7.853e+09 -4.092e+09 -8.146e+09 -4.478e+09 -8.389e+09 -4.861e+09 -8.579e+09 -5.236e+09 -8.710e+09 -5.600e+09 -8.779e+09 -5.946e+09 -8.785e+09 -6.270e+09 -8.725e+09 -6.568e+09 -8.600e+09 -6.837e+09 -8.411e+09 -7.072e+09 -8.158e+09 -7.270e+09 -7.845e+09 -7.430e+09 -7.475e+09 -7.549e+09 -7.053e+09 -7.626e+09 -6.585e+09 -7.661e+09 -6.075e+09 -7.654e+09 -5.531e+09 -7.608e+09 -4.958e+09 -7.525e+09 -4.365e+09 -7.408e+09 -3.757e+09 -7.262e+09 -3.142e+09 -7.093e+09 -2.525e+09 -6.907e+09 -1.909e+09 -6.713e+09 -1.297e+09 -6.521e+09 -6.871e+08 -6.340e+09 -7.511e+07 -6.181e+09 5.482e+08 -6.054e+09 1.198e+09 -5.967e+09 1.894e+09 -5.927e+09 2.659e+09 -5.937e+09 3.520e+09 -5.995e+09 4.505e+09 -6.098e+09 5.641e+09 -6.236e+09 6.953e+09 -6.400e+09 8.463e+09 -6.576e+09 1.019e+10 -6.753e+09 1.214e+10 -6.918e+09 1.433e+10 -7.059e+09 1.675e+10 -7.167e+09 1.942e+10 -7.231e+09 2.232e+10 -7.243e+09 2.544e+10 -7.197e+09 2.877e+10 -7.089e+09 3.227e+10 -6.914e+09 3.593e+10 -6.672e+09 3.971e+10 -6.362e+09 4.358e+10 -5.986e+09 4.749e+10 -5.547e+09 5.141e+10 -5.048e+09 5.529e+10 -4.496e+09 5.909e+10 -3.897e+09 6.275e+10 -3.260e+09 6.624e+10 -2.592e+09 6.951e+10 -1.903e+09 7.252e+10 -1.203e+09 7.522e+10 -5.011e+08 7.759e+10 1.926e+08 7.959e+10 8.693e+08 8.120e+10 1.520e+09 8.240e+10 2.135e+09 8.317e+10 2.709e+09 8.351e+10 3.233e+09 8.342e+10 3.704e+09 8.289e+10 4.117e+09 8.193e+10 4.468e+09 8.057e+10 4.756e+09 7.882e+10 4.980e+09 7.670e+10 5.140e+09 7.425e+10 5.238e+09 7.148e+10 5.276e+09 6.844e+10 5.257e+09 6.516e+10 5.186e+09 6.168e+10 5.066e+09 5.804e+10 4.903e+09 5.427e+10 4.702e+09 5.041e+10 4.469e+09 4.650e+10 4.210e+09 4.258e+10 3.930e+09 3.869e+10 3.634e+09 3.487e+10 3.329e+09 3.115e+10 3.020e+09 2.754e+10 2.710e+09 2.409e+10 2.406e+09 2.081e+10 2.109e+09 1.774e+10 1.825e+09 1.488e+10 1.556e+09 1.226e+10 1.305e+09 9.895e+09 1.074e+09 7.786e+09 8.639e+08 5.940e+09 6.770e+08 4.358e+09 5.134e+08 3.039e+09 3.735e+08 1.976e+09 2.572e+08 1.158e+09 1.637e+08 5.732e+08 9.224e+07 2.041e+08 4.161e+07 3.105e+07 1.048e+07 -3.032e+07 6.080e+06 -1.862e+08 2.836e+06 -4.659e+08 -1.195e+07 -8.463e+08 -3.774e+07 -1.302e+09 -7.226e+07 -1.808e+09 -1.132e+08 -2.339e+09 -1.583e+08 -2.873e+09 -2.054e+08 -3.390e+09 -2.524e+08 -3.870e+09 -2.975e+08 -4.299e+09 -3.390e+08 -4.664e+09 -3.755e+08 -4.954e+09 -4.059e+08 -5.165e+09 -4.295e+08 -5.292e+09 -4.456e+08 -5.335e+09 -4.540e+08 -5.297e+09 -4.548e+08 -5.182e+09 -4.483e+08 -4.997e+09 -4.350e+08 -4.751e+09 -4.157e+08 -4.454e+09 -3.912e+08 -4.128e+09 -3.823e+08 -3.768e+09 -3.590e+08 -3.382e+09 -3.228e+08 -2.989e+09 -2.856e+08 -2.599e+09 -2.483e+08 -2.220e+09 -2.121e+08 -1.862e+09 -1.776e+08 -1.531e+09 -1.457e+08 -1.230e+09 -1.167e+08 -9.644e+08 -9.118e+07 -7.352e+08 -6.916e+07 -5.426e+08 -5.070e+07 -3.859e+08 -3.571e+07 -2.625e+08 -2.393e+07 -1.692e+08 -1.505e+07 -1.021e+08 -8.695e+06 -5.664e+07 -4.423e+06 -2.811e+07 -1.800e+06 -1.202e+07 -4.039e+05 -4.196e+06 1.691e+05 -1.157e+06 2.886e+05 -3.532e+05 2.984e+05 -3.710e+05 4.453e+05 -1.148e+06 8.502e+05 -3.966e+06 1.732e+06 -1.157e+07 3.317e+06 -2.817e+07 5.796e+06 -5.925e+07 9.374e+06 -1.115e+08 1.431e+07 -1.926e+08 2.091e+07 -3.105e+08 2.957e+07 -4.735e+08 4.075e+07 -6.900e+08 5.503e+07 -9.669e+08 7.299e+07 -1.310e+09 9.533e+07 -1.725e+09 1.227e+08 -2.213e+09 1.559e+08 -2.773e+09 1.954e+08 -3.403e+09 2.418e+08 -4.095e+09 2.954e+08 -4.840e+09 3.564e+08 -5.625e+09 4.250e+08 -6.432e+09 5.006e+08 -7.242e+09 5.825e+08 -8.034e+09 6.695e+08 -8.782e+09 7.602e+08 -9.462e+09 8.527e+08 -1.005e+10 9.450e+08 -1.051e+10 1.034e+09 -1.084e+10 1.118e+09 -1.101e+10 1.194e+09 -1.099e+10 1.258e+09 -1.080e+10 1.307e+09 -1.041e+10 1.340e+09 -9.829e+09 1.352e+09 -9.074e+09 1.343e+09 -8.163e+09 1.309e+09 -7.123e+09 1.251e+09 -5.991e+09 1.168e+09 -4.813e+09 1.060e+09 -3.644e+09 9.298e+08 -2.541e+09 7.795e+08 -1.570e+09 6.144e+08 -7.973e+08 4.436e+08 -2.789e+08 2.910e+08 2.458e+07 2.228e+08 3.747e+08 2.892e+08 1.088e+09 4.344e+08 2.291e+09 5.878e+08 4.021e+09 7.255e+08 6.290e+09 8.372e+08 9.088e+09 9.164e+08 1.237e+10 9.590e+08 1.609e+10 9.637e+08 2.014e+10 9.311e+08 2.439e+10 8.651e+08 2.870e+10 7.724e+08 3.288e+10 6.628e+08 3.673e+10 5.491e+08 4.004e+10 4.463e+08 4.256e+10 3.727e+08 4.408e+10 3.472e+08 4.441e+10 3.832e+08 4.336e+10 4.898e+08 4.084e+10 6.701e+08 3.684e+10 9.167e+08 3.146e+10 1.206e+09 2.499e+10 1.494e+09 1.789e+10 1.710e+09 1.086e+10 1.755e+09 4.920e+09 1.518e+09 1.171e+09 1.159e+09 -1.867e+09 1.865e+09 -9.230e+09 4.441e+09 -2.558e+10 8.885e+09 -5.446e+10 1.554e+10 -9.986e+10 2.503e+10 -1.666e+11 3.815e+10 -2.601e+11 5.583e+10 -3.869e+11 7.916e+10 -5.542e+11 1.095e+11 -7.706e+11 1.482e+11 -1.045e+12 1.971e+11 -1.389e+12 2.580e+11 -1.813e+12 3.333e+11 -2.330e+12 4.252e+11 -2.955e+12 5.366e+11 -3.703e+12 6.706e+11 -4.590e+12 8.304e+11 -5.636e+12 1.020e+12 -6.859e+12 1.243e+12 -8.279e+12 1.504e+12 -9.921e+12 1.809e+12 -1.181e+13 2.161e+12 -1.396e+13 2.568e+12 -1.640e+13 3.034e+12 -1.917e+13 3.567e+12 -2.229e+13 4.172e+12 -2.578e+13 4.859e+12 -2.968e+13 5.634e+12 -3.401e+13 6.506e+12 -3.881e+13 7.490e+12 -4.411e+13 8.591e+12 -4.993e+13 9.817e+12 -5.631e+13 1.118e+13 -6.328e+13 1.269e+13 -7.086e+13 1.435e+13 -7.909e+13 1.618e+13 -8.800e+13 1.818e+13 -9.759e+13 2.037e+13 -1.079e+14 2.276e+13 -1.190e+14 2.535e+13 -1.308e+14 2.816e+13 -1.434e+14 3.119e+13 -1.567e+14 3.446e+13 -1.709e+14 3.796e+13 -1.858e+14 4.172e+13 -2.016e+14 4.572e+13 -2.181e+14 4.998e+13 -2.354e+14 5.450e+13 -2.535e+14 5.928e+13 -2.723e+14 6.432e+13 -2.918e+14 6.963e+13 -3.121e+14 7.519e+13 -3.329e+14 8.101e+13 -3.544e+14 8.708e+13 -3.764e+14 9.338e+13 -3.989e+14 9.992e+13 -4.219e+14 1.067e+14 -4.453e+14 1.136e+14 -4.690e+14 1.208e+14 -4.929e+14 1.281e+14 -5.170e+14 1.356e+14 -5.412e+14 1.433e+14 -5.655e+14 1.510e+14 -5.897e+14 1.589e+14 -6.137e+14 1.668e+14 -6.375e+14 1.748e+14 -6.610e+14 1.828e+14 -6.840e+14 1.909e+14 -7.066e+14 1.989e+14 -7.288e+14 2.069e+14 -7.504e+14 2.149e+14 -7.713e+14 2.227e+14 -7.913e+14 2.305e+14 -8.103e+14 2.381e+14 -8.285e+14 2.455e+14 -8.455e+14 2.527e+14 -8.614e+14 2.596e+14 -8.760e+14 2.663e+14 -8.894e+14 2.727e+14 -9.014e+14 2.788e+14 -9.121e+14 2.845e+14 -9.212e+14 2.899e+14 -9.289e+14 2.948e+14 -9.351e+14 2.993e+14 -9.396e+14 3.034e+14 -9.426e+14 3.070e+14 -9.440e+14 3.101e+14 -9.437e+14 3.127e+14 -9.418e+14 3.148e+14 -9.383e+14 3.164e+14 -9.332e+14 3.174e+14 -9.265e+14 3.178e+14 -9.182e+14 3.177e+14 -9.084e+14 3.170e+14 -8.971e+14 3.157e+14 -8.843e+14 3.139e+14 -8.702e+14 3.115e+14 -8.548e+14 3.086e+14 -8.381e+14 3.051e+14 -8.202e+14 3.011e+14 -8.013e+14 2.966e+14 -7.813e+14 2.916e+14 -7.604e+14 2.862e+14 -7.387e+14 2.803e+14 -7.163e+14 2.740e+14 -6.932e+14 2.673e+14 -6.696e+14 2.603e+14 -6.455e+14 2.530e+14 -6.211e+14 2.454e+14 -5.965e+14 2.375e+14 -5.717e+14 2.295e+14 -5.469e+14 2.212e+14 -5.221e+14 2.128e+14 -4.973e+14 2.043e+14 -4.728e+14 1.958e+14 -4.485e+14 1.872e+14 -4.246e+14 1.786e+14 -4.011e+14 1.700e+14 -3.780e+14 1.615e+14 -3.555e+14 1.531e+14 -3.335e+14 1.448e+14 -3.122e+14 1.366e+14 -2.916e+14 1.286e+14 -2.716e+14 1.208e+14 -2.524e+14 1.131e+14 -2.339e+14 1.057e+14 -2.163e+14 9.854e+13 -1.994e+14 9.162e+13 -1.833e+14 8.494e+13 -1.681e+14 7.853e+13 -1.536e+14 7.240e+13 -1.400e+14 6.654e+13 -1.272e+14 6.097e+13 -1.152e+14 5.569e+13 -1.039e+14 5.069e+13 -9.346e+13 4.598e+13 -8.374e+13 4.156e+13 -7.474e+13 3.742e+13 -6.643e+13 3.356e+13 -5.881e+13 2.997e+13 -5.183e+13 2.665e+13 -4.546e+13 2.358e+13 -3.969e+13 2.077e+13 -3.447e+13 1.821e+13 -2.977e+13 1.586e+13 -2.556e+13 1.374e+13 -2.181e+13 1.183e+13 -1.848e+13 1.012e+13 -1.555e+13 8.589e+12 -1.298e+13 7.235e+12 -1.074e+13 6.040e+12 -8.804e+12 4.996e+12 -7.140e+12 4.089e+12 -5.721e+12 3.307e+12 -4.524e+12 2.640e+12 -3.523e+12 2.076e+12 -2.694e+12 1.603e+12 -2.017e+12 1.213e+12 -1.473e+12 8.956e+11 -1.043e+12 6.413e+11 -7.097e+11 4.419e+11 -4.587e+11 2.896e+11 -2.758e+11 1.770e+11 -1.491e+11 9.770e+10 -6.768e+10 4.567e+10 -2.192e+10 1.557e+10 -3.496e+09 2.755e+09 5.605e+09 -2.993e+09 2.187e+10 -1.286e+10 4.738e+10 -2.922e+10 7.799e+10 -4.951e+10 1.104e+11 -7.166e+10 1.421e+11 -9.394e+10 1.710e+11 -1.150e+11 1.958e+11 -1.339e+11 2.157e+11 -1.498e+11 2.301e+11 -1.624e+11 2.389e+11 -1.713e+11 2.422e+11 -1.766e+11 2.404e+11 -1.782e+11 2.339e+11 -1.765e+11 2.234e+11 -1.716e+11 2.096e+11 -1.641e+11 1.932e+11 -1.543e+11 1.749e+11 -1.426e+11 1.554e+11 -1.296e+11 1.354e+11 -1.157e+11 1.156e+11 -1.012e+11 9.636e+10 -8.680e+10 7.824e+10 -7.270e+10 6.159e+10 -5.926e+10 4.672e+10 -4.678e+10 3.382e+10 -3.551e+10 2.301e+10 -2.562e+10 1.436e+10 -1.729e+10 7.877e+09 -1.062e+10 3.427e+09 -5.614e+09 8.658e+08 -2.289e+09 -1.358e+08 -6.183e+08 -9.917e+08 3.281e+07 -2.971e+09 1.356e+09 -6.018e+09 3.824e+09 -9.876e+09 7.371e+09 -1.429e+10 1.182e+10 -1.901e+10 1.700e+10 -2.383e+10 2.271e+10 -2.854e+10 2.877e+10 -3.295e+10 3.498e+10 -3.693e+10 4.119e+10 0.005 -58.824 -57.048 -55.273 -53.498 -51.707 -49.885 -48.101 -46.386 -44.754 -43.206 -41.739 -40.349 -39.033 -37.784 -36.600 -35.475 -34.407 -33.392 -32.428 -31.511 -30.641 -29.814 -29.029 -28.285 -27.580 -26.912 -26.281 -25.685 -25.123 -24.595 -24.100 -23.636 -23.204 -22.802 -22.430 -22.088 -21.776 -21.492 -21.236 -21.009 -20.810 -20.638 -20.493 -20.376 -20.286 -20.223 -20.188 -20.180 -20.200 -20.247 -20.322 -20.424 -20.555 -20.713 -20.900 -21.116 -21.361 -21.636 -21.941 -22.276 -22.642 -23.040 -23.469 -23.931 -24.426 -24.956 -25.520 -26.120 -26.757 -27.431 -28.144 -28.897 -29.690 -30.527 -31.407 -32.333 -33.306 -34.329 -35.404 -36.533 -37.719 -38.965 -40.273 -41.646 -43.083 -44.582 -46.134 -47.720 -49.305 -50.830 -52.221 -53.405 -54.351 -55.099 -55.760 -56.483 -57.441 -58.807 -60.613 -61.831 -60.298 -56.546 -52.597 -49.149 -46.157 -43.506 -41.112 -38.917 -36.883 -34.981 -33.192 -31.502 -29.899 -28.374 -26.920 -25.531 -24.203 -22.931 -21.712 -20.543 -19.421 -18.343 -17.309 -16.315 -15.361 -14.444 -13.563 -12.717 -11.904 -11.125 -10.378 -9.661 -8.974 -8.316 -7.686 -7.085 -6.510 -5.962 -5.439 -4.943 -4.472 -4.025 -3.603 -3.205 -2.831 -2.480 -2.153 -1.849 -1.569 -1.311 -1.076 -0.864 -0.675 -0.509 -0.367 -0.247 -0.150 -0.077 -0.027 -0.001 0.000 -0.023 -0.071 -0.145 -0.244 -0.370 -0.523 -0.705 -0.915 -1.155 -1.425 -1.728 -2.065 -2.436 -2.844 -3.291 -3.778 -4.309 -4.886 -5.513 -6.193 -6.932 -7.733 -8.604 -9.551 -10.585 -11.715 -12.955 -14.322 -15.839 -17.532 -19.441 -21.618 -24.141 -27.124 -30.756 -35.377 -41.691 -51.620 -65.608 -53.949 -44.117 -37.246 -32.229 -28.328 -25.154 -22.491 -20.205 -18.210 -16.447 -14.873 -13.457 -12.174 -11.008 -9.942 -8.966 -8.070 -7.246 -6.486 -5.787 -5.142 -4.548 -4.002 -3.499 -3.038 -2.617 -2.233 -1.884 -1.569 -1.287 -1.035 -0.814 -0.622 -0.457 -0.320 -0.210 -0.125 -0.066 -0.032 -0.022 -0.036 -0.074 -0.135 -0.219 -0.326 -0.456 -0.608 -0.783 -0.980 -1.200 -1.441 -1.705 -1.992 -2.301 -2.632 -2.986 -3.363 -3.763 -4.186 -4.633 -5.103 -5.598 -6.117 -6.661 -7.230 -7.824 -8.445 -9.093 -9.767 -10.470 -11.201 -11.962 -12.752 -13.575 -14.429 -15.316 -16.238 -17.195 -18.189 -19.222 -20.296 -21.412 -22.573 -23.782 -25.043 -26.358 -27.734 -29.175 -30.689 -32.284 -33.973 -35.769 -37.692 -39.765 -42.021 -44.497 -47.220 -50.157 -53.013 -55.026 -55.505 -54.826 -53.878 -53.084 -52.503 -52.075 -51.695 -51.240 -50.591 -49.675 -48.495 -47.116 -45.627 -44.104 -42.600 -41.143 -39.748 -38.420 -37.160 -35.966 -34.835 -33.764 -32.749 -31.788 -30.877 -30.015 -29.198 -28.426 -27.696 -27.006 -26.356 -25.743 -25.167 -24.627 -24.120 -23.648 -23.208 -22.800 -22.423 -22.077 -21.762 -21.475 -21.218 -20.989 -20.789 -20.617 -20.472 -20.355 -20.264 -20.201 -20.164 -20.154 -20.170 -20.212 -20.280 -20.375 -20.496 -20.643 -20.817 -21.017 -21.243 -21.496 -21.775 -22.082 -22.415 -22.777 -23.166 -23.584 -24.030 -24.506 -25.011 -25.546 -26.112 -26.708 -27.337 -27.998 -28.691 -29.419 -30.180 -30.977 -31.809 -32.678 -33.585 -34.529 -35.512 -36.533 -37.595 -38.696 -39.838 -41.019 -42.239 -43.497 -44.791 -46.118 -47.474 -48.855 -50.254 -51.660 -53.067 -54.475 -55.882 0 1 1.0 1 GMTSAR_V5.7/preproc/S1A_preproc/lib/xml.c000644 015705 000000 00000057536 13505462014 021063 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 04/06/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * Date : DTS made the set of xml functions into a library * * Date : EX made changed the way of getting tree (more robust) * ***************************************************************************/ #include #include #include #include #include "lib_defs.h" /* global variables needed for the xml library */ int N = 0; int MAX_TREE_SIZE = 600000; // size of the tree in maximum int MAX_CHAR_SIZE = 60000; // size of char arrays in maximum char STR[4000][60000]; int search_tree(tree *list, char *str, char *s_out, int type, int loc, int num) { /*************************************************************************** list - pointer to the tree structure str_out - pointer to the output string(everything will be output as string). str - is the string used for searching in the shape of /lev1_name/lev2_name/.../levN_name/ Note all the names should be seperated by '/', including the start and end with '/'. type - choice of return where 1 string to str_out 2 converted date to str_out with the format yyyyddd.frac_of_day 3 values in the names, for example will return 31 For names occurred in multiple locations, use loc and num to return the one at correct location. loc - the term to be repeatedly found, num - index of array. For example, to search /product/OrbitInformation/OrbitList/orbit/position/x/ and there are multiple state vectors under Orbitlist, set loc = 4, the 4th value of x After reading parameters in string format, use str2double to convert to double, use str2ints to convert to integer array, or use str2dbs to convert to double array. ***************************************************************************/ // search the num-th target at loc in str in the tree long int ct = 0; int n = 1, i, j, j1, j2; char s_name[200], *tmp_name, tmp_num[200]; while (strlocate(str, '/', n) != -1) { n++; } n = n - 2; tmp_name = (char *)malloc(MAX_CHAR_SIZE * sizeof(char)); for (i = 0; i < n; i++) { j1 = strlocate(str, '/', i + 1); j2 = strlocate(str, '/', i + 2); strasign(s_name, str, j1 + 1, j2 - 1); if (strncmp(list[ct].name, "OutOfSpace", 10) == 0) { cat_nums(tmp_num, list[ct].name); strcpy(tmp_name, STR[(int)str2double(tmp_num)]); } else { strcpy(tmp_name, list[ct].name); } while (ct < MAX_TREE_SIZE && ct >= 0 && strncmp(tmp_name, s_name, strlen(s_name)) != 0) { ct = list[ct].sibr; if (strncmp(list[ct].name, "OutOfSpace", 10) == 0) { cat_nums(tmp_num, list[ct].name); strcpy(tmp_name, STR[(int)str2double(tmp_num)]); } else { strcpy(tmp_name, list[ct].name); } } if (ct >= MAX_TREE_SIZE || ct < 0 || list[ct].firstchild == -1) { fprintf(stderr, "Unable to find designated string...after %ld searches..\n", ct); return (-1); } if (loc == i + 1) { if (num > 1) { for (j = 1; j < num; j++) { if (list[ct].sibr != -1) { ct = list[ct].sibr; } else if (list[ct].sibr == -1) { fprintf(stderr, "Unable to find designated string...\n"); return (-1); } } } } ct = list[ct].firstchild; } if (type == 1) { if (strncmp(list[ct].name, "OutOfSpace", 10) == 0) { cat_nums(s_name, list[ct].name); strcpy(s_out, STR[(int)str2double(s_name)]); } else { strcpy(s_out, list[ct].name); } } else if (type == 2) { cat_nums(s_name, list[ct].name); str_date2JD(s_out, s_name); } else if (type == 3) { cat_nums(s_out, list[list[ct].parent].name); } free(tmp_name); return (list[ct].parent); } int get_tree(FILE *fp, tree *list, int num_parse) { /* fp - file pointer to the xml file list - structure to hold the entire xml file num_parse - number of header lines to skip The xml file is required to have the names in pairs, either as value_of_par or as ... The current code can also deal with some not well shaped conditions like or lines not indented correctly like ... For questions, please send to xix016@ucsd.edu */ char *buffer; char tmp_char[200], tmp_s[200], *tmp_c; int i1, i2, j1, j2, have_slash; long int count = 0; // int *num_space; long int level[100] = {-1}, lev_ct = 0; char lev_rec[100][200]; buffer = (char *)malloc(MAX_CHAR_SIZE * sizeof(char)); tmp_c = (char *)malloc(MAX_CHAR_SIZE * sizeof(char)); for (i1 = 0; i1 < 100; i1++) { strcpy(lev_rec[i1], "CLOSED"); } // num_space = (int *)malloc(aprox_size*5*sizeof(int)); // fprintf(stderr," %d \n",sizeof(buffer)); for (i1 = 0; i1 < num_parse; i1++) { fgets(buffer, MAX_CHAR_SIZE * sizeof(char), fp); } while (fgets(buffer, MAX_CHAR_SIZE * sizeof(char), fp) != NULL) { // num_space[count] = space_count(buffer); i1 = strlocate(buffer, '<', 1); j1 = strlocate(buffer, '>', 1); i2 = strlocate(buffer, '<', 2); j2 = strlocate(buffer, '>', 2); if (i1 < 0 || j1 < 0) { fprintf(stderr, "Not an well formatted XML file...%d, %d\n", i1, j1); return (-1); } else if (buffer[i1 + 1] == '/') { have_slash = 1; strasign(tmp_char, buffer, i1 + 2, j1 - 1); } else { have_slash = 0; strasign(tmp_char, buffer, i1 + 1, j1 - 1); } // initinate the numbers list[count].sibr = -1; list[count].sibl = -1; list[count].parent = -1; list[count].firstchild = -1; // create tree // first node if (count == 0) { strcpy(list[count].name, tmp_char); level[lev_ct] = count; strcpy(lev_rec[lev_ct], tmp_char); if (i2 != -1 || (buffer[j1 - 1] == '/')) { list[count].firstchild = count + 1; create_child(list, buffer, j1 + 1, i2 - 1, count++); strcpy(lev_rec[lev_ct], "CLOSED"); } } // child else if (count != 0 && have_slash == 0 && strncmp(lev_rec[lev_ct], "CLOSED", 6) != 0) { lev_ct++; strcpy(list[count].name, tmp_char); strcpy(lev_rec[lev_ct], tmp_char); list[count].parent = level[lev_ct - 1]; list[count].sibl = -1; list[count].sibr = -1; list[count].firstchild = -1; list[level[lev_ct - 1]].firstchild = count; level[lev_ct] = count; if (i2 != -1 || (buffer[j1 - 1] == '/')) { list[count].firstchild = count + 1; create_child(list, buffer, j1 + 1, i2 - 1, count++); // fprintf(stderr,"CHILD: %s,LVL: %ld\n",tmp_char,lev_ct); strcpy(lev_rec[lev_ct], "CLOSED"); } } // sibling else if (count != 0 && have_slash == 0 && strncmp(lev_rec[lev_ct], "CLOSED", 6) == 0) { strcpy(list[count].name, tmp_char); strcpy(lev_rec[lev_ct], tmp_char); list[count].sibl = level[lev_ct]; list[count].sibr = -1; list[count].firstchild = -1; list[count].parent = list[level[lev_ct]].parent; list[level[lev_ct]].sibr = count; level[lev_ct] = count; if (i2 != -1 || (buffer[j1 - 1] == '/')) { list[count].firstchild = count + 1; create_child(list, buffer, j1 + 1, i2 - 1, count++); strcpy(lev_rec[lev_ct], "CLOSED"); } } // go to parent level else if (count != 0 && have_slash == 1) { // fprintf(stderr,"%s\n",tmp_char); if (strncmp(lev_rec[lev_ct - 1], "OutOfSpace", 10) == 0) { cat_nums(tmp_s, lev_rec[lev_ct - 1]); strcpy(tmp_c, STR[(int)str2double(tmp_s)]); } else { strcpy(tmp_c, lev_rec[lev_ct - 1]); } if (strncmp(tmp_char, tmp_c, strlen(tmp_char)) == 0) { strcpy(lev_rec[lev_ct - 1], "CLOSED"); lev_ct--; } } // printf("%s",buffer); // printf("%d %d %d\n",num_space[count],count,lev_ct); count++; } free(buffer); free(tmp_c); // fclose(fp); // free(num_space); return (1); } int space_count(char *str) { // count the number of spaces in front of each line int i, j; j = 0; for (i = 0; i < strlen(str); i++) { if (str[i] == ' ') { j = j + 1; continue; } else if (str[i] == '\t') { j = j + 2; continue; } else { break; } } return (j); } int itoa_xml(int d, char *buf, int base) { char *p = buf; char *p1, *p2; unsigned long ud = d; int divisor = 10; /* If %d is specified and D is minus, put `-' in the head. */ if (base == 'd' && d < 0) { *p++ = '-'; buf++; ud = -d; } else if (base == 'x') { divisor = 16; } /* Divide UD by DIVISOR until UD == 0. */ do { int remainder = ud % divisor; *p++ = (remainder < 10) ? remainder + '0' : remainder + 'a' - 10; } while (ud /= divisor); /* Terminate BUF. */ *p = 0; /* Reverse BUF. */ p1 = buf; p2 = p - 1; while (p1 < p2) { char tmp = *p1; *p1 = *p2; *p2 = tmp; p1++; p2--; } return (1); } int strasign(char *str_out, char *str, int n1, int n2) { // asign n1-n2 of str to str_out int i; if (n1 > n2) { return (-1); } if (n2 - n1 > 199) { // fprintf(stderr,"OutOfSpace %d, n1: %d, n2 %d\n",N,n1,n2); strcpy(str_out, "OutOfSpace"); char c[100]; itoa_xml(N, c, 'd'); strcat(str_out, c); // strcpy(STR[N],str); // fprintf(stderr,"%s\n",str_out); // STR[N] = (char *)malloc(MAX_CHAR_SIZE*sizeof(char)); for (i = n1; i <= n2; i++) { STR[N][i - n1] = str[i]; } STR[N][i - n1] = '\0'; // fprintf(stderr,"%s\n",STR[N]); N++; return (1); } for (i = n1; i <= n2; i++) { str_out[i - n1] = str[i]; } str_out[n2 - n1 + 1] = '\0'; return (1); } int strlocate(char *str, int c, int n) { // locate the n-th c in str int i, j = 0; for (i = 0; i < strlen(str); i++) { if (str[i] == (char)c) { j++; if (j == n) { return (i); } } } return (-1); } int create_child(tree *T, char *str, int i, int j, int ct) { // create the firstchild of a tree-element if (j >= i) { strasign(T[ct + 1].name, str, i, j); } else { T[ct + 1].name[0] = '\0'; } T[ct + 1].sibr = -1; T[ct + 1].sibl = -1; T[ct + 1].parent = ct; T[ct + 1].firstchild = -1; // num_space[ct+1] = num_space[ct]; return (1); } int show_tree(tree *T, int ct, int lvl) { // print out the tree if (ct == 0) { printf("In the brackets the numbers are (count, child, sibling)\n"); } int i; for (i = 0; i < 2 * lvl; i++) { putchar(' '); } if (T[ct].sibr == -1 && T[ct].firstchild == -1) { putchar('='); } if (strncmp(T[ct].name, "OutOfSpace", 10) == 0) { char c[100]; cat_nums(c, T[ct].name); printf("%s (%d,%d,%d)\n", STR[(int)str2double(c)], ct, T[ct].firstchild, T[ct].sibr); } else { printf("%s (%d,%d,%d)\n", T[ct].name, ct, T[ct].firstchild, T[ct].sibr); } if (T[ct].firstchild != -1) { show_tree(T, T[ct].firstchild, lvl + 1); } if (T[ct].sibr != -1) { show_tree(T, T[ct].sibr, lvl); } return (1); } int cat_nums(char *str_out, char *str) { // cat out the numbers in str to str_out int i = 0, j = 0; while (str[i] != '\0') { if (str[i] >= '0' && str[i] <= '9') { str_out[j++] = str[i]; } i++; } str_out[j] = '\0'; return (j); } double date2MJD(int yr, int mo, int day, int hr, int min, double sec) { /* convert to date to MJD */ double part1, part2; double MJD; part1 = 367 * ((double)yr) - floor(7 * ((double)yr + floor(((double)mo + 9) / 12.0)) / 4.0) + floor(275 * (double)mo / 9.0) + (double)day; part2 = -678987 + ((sec / 60.0 + (double)min) / 60.0 + (double)hr) / 24.0; MJD = part1 + part2; return MJD; } int str_date2JD(char *str_JD, char *str_date) { double str2double(char *); int yr, mo, day, hr, min, doy; double sec = 0, MJDday, MJDyr, MJDfrac; char tmp[30]; strasign(tmp, str_date, 0, 3); yr = (int)str2double(tmp); strasign(tmp, str_date, 4, 5); mo = (int)str2double(tmp); strasign(tmp, str_date, 6, 7); day = (int)str2double(tmp); strasign(tmp, str_date, 8, 9); hr = (int)str2double(tmp); strasign(tmp, str_date, 10, 11); min = (int)str2double(tmp); strasign(tmp, str_date, 12, 13); sec = sec + str2double(tmp); strasign(tmp, str_date, 14, 19); sec = sec + str2double(tmp) / 1000000.0; // printf("%d %d %d %d %d %.10f\n",yr,mo,day,hr,min,sec); MJDyr = date2MJD(yr, 1, 1, 0, 0, 0); MJDday = date2MJD(yr, mo, day, 0, 0, 0); MJDfrac = (((hr * 60.) + min) * 60 + sec) / 86400; doy = (int)(MJDday - MJDyr + .1); sprintf(str_JD, "%.12f", doy + MJDfrac); return (1); } double str2double(char *str) { int i, n, m; double value = 0.0, value1 = 0.0, value2 = 0.0, sgn = 1.0; char tmp1[100], tmp2[100], tmp[100], str_tmp[100]; strasign(str_tmp, str, 0, strlen(str)); // decide the sign if (str_tmp[0] == '-' || str_tmp[0] == '+') { if (str_tmp[0] == '-') { sgn = -1.0; } strasign(tmp, str_tmp, 1, strlen(str_tmp)); strasign(str_tmp, tmp, 0, strlen(tmp)); } // decide where it is sci form if (strlocate(str_tmp, 'e', 1) != -1 || strlocate(str_tmp, 'E', 1) != -1) { n = strlocate(str_tmp, 'e', 1); if (n == -1) { n = strlocate(str_tmp, 'E', 1); } strasign(tmp2, str_tmp, n + 1, strlen(str)); // exponential part strasign(tmp1, str_tmp, 0, n - 1); // digits part } else { strasign(tmp1, str_tmp, 0, strlen(str_tmp)); // digits part } // decide whether it has fraction n = strlocate(tmp1, '.', 1); if (n != -1) { strasign(tmp, tmp1, 0, n - 1); m = strlen(tmp); for (i = 0; i < m; i++) { value1 = value1 + (double)((int)tmp[i] - 48) * pow(10.0, (double)(m - i - 1)); } m = strlen(tmp1); strasign(tmp, tmp1, n + 1, m); m = strlen(tmp); for (i = 0; i < m; i++) { value2 = value2 + (double)((int)tmp[i] - 48) * pow(10.0, (double)(-i - 1)); } // puts(tmp2); // fprintf(stderr,"%.12f %.12f %.12f\n",value1,value2,str2double(tmp2)); value = value1 + value2; } else { m = strlen(tmp1); for (i = 0; i < m; i++) { value = value + (double)((int)tmp1[i] - 48) * pow(10.0, (double)(m - i - 1)); } } if (strlocate(str_tmp, 'e', 1) != -1 || strlocate(str_tmp, 'E', 1) != -1) { value = value * pow(10.0, str2double(tmp2)); } return (value * sgn); } int str2ints(int *a, char *c) { int i = 0, n1 = 0, n2 = 0, len; char tmp_c[100]; len = strlen(c); for (n2 = 0; n2 < len; n2++) { if (strncmp(&c[n2], " ", 1) == 0) { strasign(tmp_c, c, n1, n2 - 1); a[i] = (int)str2double(tmp_c); i++; n1 = ++n2; } } n2 = len; if (n2 > n1 + 1) { strasign(tmp_c, c, n1, n2); a[i] = (int)str2double(tmp_c); i++; } /* while((n2 = strlocate(c,' ',i+1)) != -1){ strasign(tmp_c,c,n1,n2-1); a[i] = (int)str2double(tmp_c); i++; n1 = n2+1; } */ return (i); } int str2dbs(double *a, char *c) { int i = 0, n1 = 0, n2 = 0, len; char tmp_c[100]; len = strlen(c); for (n2 = 0; n2 < len; n2++) { if (c[n2] == ' ' || c[n2] == '\0' || c[n2] == '\n') { strasign(tmp_c, c, n1, n2 - 1); a[i] = str2double(tmp_c); i++; n1 = ++n2; } } n2 = len; if (n2 > n1 + 1) { strasign(tmp_c, c, n1, n2); a[i] = str2double(tmp_c); i++; } /* while((n2 = strlocate(c,' ',i+1)) != -1){ strasign(tmp_c,c,n1,n2-1); a[i] = (int)str2double(tmp_c); i++; n1 = n2+1; } */ return (i); } int null_MEM_STR() { int i; for (i = 0; i < 100; i++) { STR[i][0] = '\0'; } N = 0; return (1); } int prefix_str(char *a, char *b) { // put b infront of a char *str; str = (char *)malloc((strlen(a) + strlen(b)) * 2 * sizeof(char)); strcpy(str, b); strcat(str, a); strcpy(a, str); free(str); return (1); } int print_space(int j, FILE *fp) { int i; for (i = 0; i < j; i++) fprintf(fp, "%s", " "); return (1); } /* int find_assembly(struct tree **T, int ct, int ii) { char str[2000],str_out[60000]; int jj; str[0] = '\0'; jj = ct; while(T[ii][jj].parent != -1) { prefix_str(str,"/"); sscanf(T[ii][jj].name,"%s ",str_out); prefix_str(str,str_out); jj = T[ii][jj].parent; } prefix_str(str,"/"); sscanf(T[ii][jj].name,"%s ",str_out); prefix_str(str,str_out); prefix_str(str,"/"); //fprintf(stderr,"%s\n",str); jj = search_tree(T[ii],str,str_out,1,0,1); //search_tree(tree *list, char *str, char *s_out, int type, int loc, int num) //fprintf(stderr,"%d found...\n",jj); return(jj); } */ int print_tree(struct tree *T, int ct, int mode, FILE *fp) { char str[200]; if (strncmp(T[ct].name, "OutOfSpace", 10) == 0) { char c[100]; cat_nums(c, T[ct].name); if (mode == 1) { fprintf(fp, "<%s>\n", STR[(int)str2double(c)]); } else if (mode == 2) { sscanf(STR[(int)str2double(c)], "%s ", str); fprintf(fp, "\n", str); } else { sscanf(STR[(int)str2double(c)], "%s ", str); if (strncmp(T[T[ct].firstchild].name, "OutOfSpace", 10) == 0) { char c2[100]; cat_nums(c2, T[T[ct].firstchild].name); fprintf(fp, "<%s>%s\n", STR[(int)str2double(c)], STR[(int)str2double(c2)], str); } else { fprintf(fp, "<%s>%s\n", STR[(int)str2double(c)], T[T[ct].firstchild].name, str); } } } else { if (mode == 1) { fprintf(fp, "<%s>\n", T[ct].name); } else if (mode == 2) { sscanf(T[ct].name, "%s ", str); fprintf(fp, "\n", str); } else { sscanf(T[ct].name, "%s ", str); if (strncmp(T[T[ct].firstchild].name, "OutOfSpace", 10) == 0) { char c2[100]; cat_nums(c2, T[T[ct].firstchild].name); fprintf(fp, "<%s>%s\n", T[ct].name, STR[(int)str2double(c2)], str); } else { fprintf(fp, "<%s>%s\n", T[ct].name, T[T[ct].firstchild].name, str); } } } return (1); } int assemble_trees(int nfiles, struct tree **T, int ct, int lvl, FILE *fp) { int j, k; if (ct == 0) fprintf(fp, "\n"); print_space(2 * lvl, fp); /* if(T[0][ct].sibr == -1 && T[0][ct].firstchild == -1) { putchar('='); } */ if (T[0][ct].firstchild != -1 && T[0][T[0][ct].firstchild].firstchild == -1) { print_tree(T[0], ct, 3, fp); /* for (i=1;i=0) { if (strncmp(T[0][ct].name,T[i][j].name,strlen(T[0][ct].name)-1) == 0 && strncmp(T[0][T[0][ct].firstchild].name,T[i][T[i][j].firstchild].name,strlen(T[0][T[0][ct].firstchild].name)-1) == 0) mark = 0; else mark = 1; if (mark == 1) { print_space(2*lvl,fp); print_tree(T[i],j,3,fp); } } } */ if (T[0][ct].sibr != -1) { assemble_trees(nfiles, T, T[0][ct].sibr, lvl, fp); } else { j = ct; k = 1; while (T[0][j].sibr == -1 & j != 0) { print_space(2 * (lvl - k), fp); print_tree(T[0], T[0][j].parent, 2, fp); j = T[0][j].parent; k++; } } } else { print_tree(T[0], ct, 1, fp); /* for (i=1;i=0) { if (strncmp(T[0][ct].name,T[i][j].name,strlen(T[0][ct].name)-1) == 0) mark = 0; else mark = 1; if (mark == 1) { print_space(2*lvl,fp); print_tree(T[i],j,1,fp); } } } */ if (T[0][ct].firstchild != -1) { assemble_trees(nfiles, T, T[0][ct].firstchild, lvl + 1, fp); } if (T[0][ct].sibr != -1) { assemble_trees(nfiles, T, T[0][ct].sibr, lvl, fp); } if (T[0][ct].firstchild == -1 && T[0][ct].sibr == -1) { j = ct; k = 1; while (T[0][j].sibr == -1 & j != 0) { print_space(2 * (lvl - k), fp); print_tree(T[0], T[0][j].parent, 2, fp); j = T[0][j].parent; k++; } } } return (1); } /* add_branch(int n, struct tree **T, str, ct) { int i; char str_out[60000]; i = search_tree(T[0],str,str_out,1,0,1); return(1); } */ /* int add_index(struct tree *T, int ct, int ii) { int i; //printf("hahaha %d\n",ii); for (i=0;i #include #include #include typedef struct burst_bounds { int SL; int SC; int SH; int EL; int EC; int EH; int SLi; int SCi; int SHi; int ELi; int ECi; int EHi; int S; int E; } burst_bounds; char *USAGE = "\n Usage: spectral_diversity master_stem slave_stem bshfit filter\n" "\n Example: spectral_diversity S1A20150322_F1 S1A20150415_F1 0 gauss5x5\n" "\n Output: resitual_shift = 0.001234 [with a file ddphase]\n" "\n Note: make sure stem.SLCH stem.SLCL stem.BB exist \n"; int main(int argc, char **argv) { FILE *MF, *MB, *SF, *SB, *BBM, *BBS, *FILTER, *OUTP; char tmp_str[200]; struct burst_bounds bbm[200], bbs[200]; double tmp_d[200]; int kkm, kks, splm, spls, spl, nbm, nbs, ii, jj, nlm, nls, ntls, ntlm, ntl; int bshift = 0, llm, lls, nboff = 0; short *mf, *mb, *sf, *sb; float fmi, fmr, bmi, bmr, fsi, fsr, bsi, bsr; float i1, r1, i2, r2, *real, *imag, *filter, filtin, *freal, *fimag, filtdat, fsum = 0.0, famp1, famp2; float *amp1, *amp2, *corr; double phase, isum = 0.0, rsum = 0.0; int yarr, xarr, zz, *zz_r; double spec_sep, dta; if (argc < 5) die("", USAGE); // open corresponding files strcpy(tmp_str, argv[1]); strcat(tmp_str, ".SLCH"); if ((MF = fopen(tmp_str, "rb")) == NULL) die("Couldn't open slch file: \n", tmp_str); strcpy(tmp_str, argv[1]); strcat(tmp_str, ".SLCL"); if ((MB = fopen(tmp_str, "rb")) == NULL) die("Couldn't open slcl file: \n", tmp_str); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".SLCH"); if ((SF = fopen(tmp_str, "rb")) == NULL) die("Couldn't open slch file: \n", tmp_str); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".SLCL"); if ((SB = fopen(tmp_str, "rb")) == NULL) die("Couldn't open slcl file: \n", tmp_str); strcpy(tmp_str, argv[1]); strcat(tmp_str, ".BB"); if ((BBM = fopen(tmp_str, "rb")) == NULL) die("Couldn't open bb file: \n", tmp_str); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".BB"); if ((BBS = fopen(tmp_str, "rb")) == NULL) die("Couldn't open bb file: \n", tmp_str); strcpy(tmp_str, argv[4]); if ((FILTER = fopen(tmp_str, "rb")) == NULL) die("Couldn't open filter file: \n", tmp_str); bshift = (int)str2double(argv[3]); nboff = floor((double)bshift / 1400.0 + 0.5); if (nboff != 0) { printf("Image has %d burst offset\n", nboff); } strcpy(tmp_str, "ddphase"); if ((OUTP = fopen(tmp_str, "w")) == NULL) die("Couldn't open output file: \n", tmp_str); // bshift = (int)str2double(argv[3]); bbm[0].SLi = bbm[0].SCi = bbm[0].SHi = bbm[0].ELi = bbm[0].ECi = bbm[0].EHi = -1; bbs[0].SLi = bbs[0].SCi = bbs[0].SHi = bbs[0].ELi = bbs[0].ECi = bbs[0].EHi = -1 - bshift; bbm[0].S = bbm[0].E = -1; bbs[0].S = bbs[0].E = -1; // get parameters fgets(tmp_str, 200 * sizeof(char), BBM); tmp_str[strlen(tmp_str) - 1] = ' '; str2dbs(tmp_d, tmp_str); nbm = (int)tmp_d[0]; splm = (int)tmp_d[1]; nlm = 0; ntlm = 0; for (ii = 1; ii <= nbm; ii++) { fgets(tmp_str, 200 * sizeof(char), BBM); // tmp_str[strlen(tmp_str)-1]=' '; str2dbs(tmp_d, tmp_str); bbm[ii].SL = (int)tmp_d[0]; bbm[ii].SC = (int)tmp_d[1]; bbm[ii].SH = (int)tmp_d[2]; bbm[ii].EL = (int)tmp_d[3]; bbm[ii].EC = (int)tmp_d[4]; bbm[ii].EH = (int)tmp_d[5]; // fprintf(stderr,"%d %d %d %d %d // %d\n",bbm[ii].SL,bbm[ii].SC,bbm[ii].SH,bbm[ii].EL,bbm[ii].EC,bbm[ii].EH); bbm[ii].SLi = bbm[ii - 1].ELi + 1; bbm[ii].SCi = bbm[ii - 1].ECi + 1; bbm[ii].SHi = bbm[ii - 1].EHi + 1; bbm[ii].ELi = bbm[ii].SLi + bbm[ii].EL - bbm[ii].SL; bbm[ii].ECi = bbm[ii].SCi + bbm[ii].EC - bbm[ii].SC; bbm[ii].EHi = bbm[ii].SHi + bbm[ii].EH - bbm[ii].SH; bbm[ii].S = bbm[ii - 1].E + 1; bbm[ii].E = bbm[ii].S + bbm[ii].EH - (bbm[ii].EL + 1); // fprintf(stderr,"%d %d %d %d %d %d %d // %d\n",bbm[ii].SLi,bbm[ii].SCi,bbm[ii].SHi,bbm[ii].ELi,bbm[ii].ECi,bbm[ii].EHi,bbm[ii].S,bbm[ii].E); nlm = nlm + bbm[ii].EH - (bbm[ii].EL + 1) + 1; ntlm = ntlm + bbm[ii].EC - bbm[ii].SC + 1; } // fprintf(stderr,"Slave Image Size %d x %d \n",nlm,splm); fgets(tmp_str, 200 * sizeof(char), BBS); tmp_str[strlen(tmp_str) - 1] = ' '; str2dbs(tmp_d, tmp_str); nbs = (int)tmp_d[0]; spls = (int)tmp_d[1]; spec_sep = tmp_d[2]; dta = tmp_d[3]; nls = 0; ntls = 0; for (ii = 1; ii <= nbs; ii++) { fgets(tmp_str, 200 * sizeof(char), BBS); // tmp_str[strlen(tmp_str)-1]=' '; str2dbs(tmp_d, tmp_str); bbs[ii].SL = (int)tmp_d[0]; bbs[ii].SC = (int)tmp_d[1]; bbs[ii].SH = (int)tmp_d[2]; bbs[ii].EL = (int)tmp_d[3]; bbs[ii].EC = (int)tmp_d[4]; bbs[ii].EH = (int)tmp_d[5]; // fprintf(stderr,"%d %d %d %d %d // %d\n",bbs[ii].SL,bbs[ii].SC,bbs[ii].SH,bbs[ii].EL,bbs[ii].EC,bbs[ii].EH); bbs[ii].SLi = bbs[ii - 1].ELi + 1; bbs[ii].SCi = bbs[ii - 1].ECi + 1; bbs[ii].SHi = bbs[ii - 1].EHi + 1; bbs[ii].ELi = bbs[ii].SLi + bbs[ii].EL - bbs[ii].SL; bbs[ii].ECi = bbs[ii].SCi + bbs[ii].EC - bbs[ii].SC; bbs[ii].EHi = bbs[ii].SHi + bbs[ii].EH - bbs[ii].SH; bbs[ii].S = bbs[ii - 1].E + 1; bbs[ii].E = bbs[ii].S + bbs[ii].EH - (bbs[ii].EL + 1); // fprintf(stderr,"%d %d %d %d %d %d %d // %d\n",bbs[ii].SLi,bbs[ii].SCi,bbs[ii].SHi,bbs[ii].ELi,bbs[ii].ECi,bbs[ii].EHi,bbs[ii].S,bbs[ii].E); nls = nls + (bbs[ii].SH - 1) - bbs[ii].SL + 1; ntls = ntls + bbs[ii].EC - bbs[ii].SC + 1; } // fprintf(stderr,"Slave Image Size %d x %d \n",nls,spls); // malloc memory for images mf = (short *)malloc(nlm * splm * 2 * sizeof(short)); mb = (short *)malloc(nlm * splm * 2 * sizeof(short)); sf = (short *)malloc(nls * spls * 2 * sizeof(short)); sb = (short *)malloc(nls * spls * 2 * sizeof(short)); fread(mf, nlm * splm * 2, sizeof(short), MF); fread(mb, nlm * splm * 2, sizeof(short), MB); fread(sf, nls * spls * 2, sizeof(short), SF); fread(sb, nls * spls * 2, sizeof(short), SB); kkm = 1; kks = kkm + nboff; ntl = ntlm; if (ntl >= ntls) ntl = ntls; if (bshift > ntl) { fprintf(stderr, "Images does not overlap, returning 0 to res_shift\n"); printf("residual_phase = %.6f\n isum = %.2g rsum = %.2g\n", 0.0, 0.0, 0.0); printf("spectral_spectrationXdta = %.6f\n", spec_sep * dta); printf("residual_shift = %.12f\n", 0.0); } spl = splm; if (spl >= spls) spl = spls; real = (float *)malloc(ntl * spl * sizeof(float)); imag = (float *)malloc(ntl * spl * sizeof(float)); freal = (float *)malloc(ntl * spl * sizeof(float)); fimag = (float *)malloc(ntl * spl * sizeof(float)); zz_r = (int *)malloc(ntl * sizeof(int)); amp1 = (float *)malloc(ntl * spl * sizeof(float)); amp2 = (float *)malloc(ntl * spl * sizeof(float)); corr = (float *)malloc(ntl * spl * sizeof(float)); // compute sum real and sum imagenary // fprintf(stderr,"Some pars: ntl: %d %d %d, spl: %d %d // %d\n",ntlm,ntls,ntl,splm,spls,spl); zz = 0; while (kkm < 1 || kks < 1) { kks++; kkm++; } if (kkm != kks) printf("starting bursts are %d for master and %d for slave\n", kkm, kks); // printf("Working on burst %d (master, zz = %d)...\n",kkm,zz); for (ii = 0; ii < ntl; ii++) { if (ii >= bbm[kkm].ELi + 1 && ii <= bbm[kkm].EHi && ii >= bbs[kks].ELi + 1 && ii <= bbs[kks].EHi) { // fprintf(stderr,"working on Line %d...\n",ii); llm = ii - (bbm[kkm].ELi + 1) + bbm[kkm].S; lls = ii - (bbs[kks].ELi + 1) + bbs[kks].S; // if (llm%100 == 0) fprintf(stderr,"master_line %d, slave_line // %d\n",llm,lls); for (jj = 0; jj < spl; jj++) { fmr = (float)mf[(llm * splm + jj) * 2]; fmi = (float)mf[(llm * splm + jj) * 2 + 1]; bmr = (float)mb[(llm * splm + jj) * 2]; bmi = (float)mb[(llm * splm + jj) * 2 + 1]; fsr = (float)sf[(lls * spls + jj) * 2]; fsi = (float)sf[(lls * spls + jj) * 2 + 1]; bsr = (float)sb[(lls * spls + jj) * 2]; bsi = (float)sb[(lls * spls + jj) * 2 + 1]; r1 = fmr * fsr + fmi * fsi; i1 = fmi * fsr - fmr * fsi; r2 = bmr * bsr + bmi * bsi; i2 = bmi * bsr - bmr * bsi; amp1[zz * spl + jj] = r1 * r1 + i1 * i1; amp2[zz * spl + jj] = r2 * r2 + i2 * i2; real[zz * spl + jj] = r1 * r2 + i1 * i2; imag[zz * spl + jj] = i1 * r2 - r1 * i2; // phase = sqrt(real*real+imag*imag)/sqrt((r1*r1+i1*i1)*(r2*r2+i2*i2)); // phase = atan2(imag[zz*spl+jj],real[zz*spl+jj]); } zz_r[zz] = ii; zz++; } if (ii > bbm[kkm].EHi && ii > bbs[kks].EHi) { kkm++; kks++; // printf("Working on burst %d (master, zz = %d)...\n",kkm,zz); // fprintf(stderr,"Computing next burst %d...\n",kk); } } // filter the phase if (fscanf(FILTER, "%d%d", &xarr, &yarr) != 2 || xarr < 1 || yarr < 1 || (xarr & 1) == 0 || (yarr & 1) == 0) die("filter incomplete", ""); if ((filter = (float *)malloc(sizeof(float) * xarr * yarr)) == NULL) die("memory allocation", ""); for (ii = 0; ii < xarr * yarr; ii++) { if (fscanf(FILTER, "%f", &filtin) == EOF) die("filter incomplete", ""); filter[ii] = filtin; fsum += filtin; } for (ii = 0; ii < zz; ii++) { for (jj = 0; jj < spl; jj++) { conv2d(real, &zz, &spl, filter, &xarr, &yarr, &filtdat, &ii, &jj, &fsum); freal[ii * spl + jj] = filtdat; conv2d(imag, &zz, &spl, filter, &xarr, &yarr, &filtdat, &ii, &jj, &fsum); fimag[ii * spl + jj] = filtdat; conv2d(amp1, &zz, &spl, filter, &xarr, &yarr, &filtdat, &ii, &jj, &fsum); famp1 = filtdat; conv2d(amp2, &zz, &spl, filter, &xarr, &yarr, &filtdat, &ii, &jj, &fsum); famp2 = filtdat; corr[ii * spl + jj] = sqrt( (freal[ii * spl + jj] * freal[ii * spl + jj] + fimag[ii * spl + jj] * fimag[ii * spl + jj]) / (famp1 * famp2)); if (corr[ii * spl + jj] > 0.6) { rsum += freal[ii * spl + jj]; } if (corr[ii * spl + jj] > 0.6) { isum += fimag[ii * spl + jj]; } } } printf("Image analyzed %dx%d...\n", spl, zz); for (ii = 0; ii < zz; ii += 10) { for (jj = 0; jj < spl; jj++) { if (corr[ii * spl + jj] > 0.3) { // fprintf(OUTP,"%d\t%d\t%.9f\n",jj,zz_r[ii],(float)(sqrt((jj-10000)*(jj-10000)+(zz_r[ii]-5000)*(zz_r[ii]-5000)))/5.0e5); phase = atan2(fimag[ii * spl + jj], freal[ii * spl + jj]); fprintf(OUTP, "%d\t%d\t%.9f\t%.9f\n", jj, zz_r[ii] + bshift, phase, corr[ii * spl + jj]); // fwrite(&phase,1,sizeof(double),OUTP); } } } phase = atan2(isum, rsum); printf("residual_phase = %.6f\n isum = %.2g rsum = %.2g\n", phase, isum, rsum); printf("spectral_spectrationXdta = %.6f\n", spec_sep * dta); printf("residual_shift = %.12f\n", phase / (2 * M_PI * spec_sep * dta)); // free memory and close corresponding files free(mf); free(mb); free(sf); free(sb); free(zz_r); free(amp1); free(amp2); free(corr); free(freal); free(fimag); free(real); free(imag); fclose(MF); fclose(MB); fclose(SF); fclose(SB); fclose(BBM); fclose(BBS); fclose(FILTER); fclose(OUTP); return (1); } GMTSAR_V5.7/preproc/S1A_preproc/src_orbit/ext_orb_s1a000755 015705 000000 00000121024 13507242214 023453 0ustar00sandwellwheel000000 000000 8 H__PAGEZERO(__TEXT__text__TEXT H` __stubs__TEXT8l8l__stub_helper__TEXTmZm__const__TEXT`n`n__cstring__TEXTp8p__unwind_info__TEXT88__DATA N__nl_symbol_ptr__DATA!__got__DATA#__la_symbol_ptr__DATA((&__data__DATA00__common__DATA@@NH__LINKEDITN "0HPHPa  P==$G /usr/lib/dyld7un5%;2   *( 8 /opt/local/lib/libtiff.5.dylib 8/usr/lib/libSystem.B.dylib&H)UHAWAVAUATSHIH tHHEЃH=uH5r3I|$H5d``IHuIt$H=d3L3`1ۃt!f.1Ƀ L`uHHi$`IƉHcH `IL_I|$H5 d_HHuIt$H=c;3HLkIH_I|$H5c_HHuIt$H=c2HH pxf(\Y a\XLLAIt$HH^H5acH^H5RcH^HHuH==cH]2LHDH^L^L^H(rHH;Eu1H[A\A]A^A_]>^f.@UHAWAVAUATSHHHqHHEH5YcLE1AE1AHLc4L+@,H H H E1Lf.@AHHL5bLLE3L?(AHLLE3H0HL.;Hv?,(f( _f(^f: Yf(\,Wf: \^f(YW*YX^W*Xf(^Xf.ef.WMcL(L(IHB;BL;Bd;ALLH5aLE2L~>BD;ALH5aLE2LO>BD;ALH5aLEX2L >BD; ALH5aLE)2L=BD;(ALH5bLE1L=BD;0ALH5 bLE1L=BD;8L(AH BD AL$ÃuHnHH;EuDH[A\A]A^A_]Zf.UHAWAVATSH0AIHH=_1[AKf)MCHffY\f)EZf)E(EZ(Mf^ l\f(\ȋ DCH5D_LD(EgZEL=@_fKCKS[ c(k0s8LLZH@Iu¸%HmHH=h^*ZH0[A\A^A_]fUH*EY[fWX*UXE^q[X]ÐUHAVSH@)EIHc[\YE[\YE A[YYOMXEUYY[\Qf(U^]YCX]XYf)UE}XfEfYfAEYEAFH@[A^]f.@UHSHHf'o5[f(\Yf( ZfWfEWf(Af(fUfTfVf)`f(fYf(XWQmf(Yf(Yf)}f(Y\ef(EYff^f(f()MYXYY)EfYf()pf(\Xf(YYf(YXfA.f)ef)]sFf(YfWQf(YXEf(^W^KYWf(YUBWQE\ Y0WEEXE XWU\f(Yf( Yf(]fTf.v%f(Yf(EXXY X^f(f(pXQf(]XYXf(YYf(e\f(X\^XWQ\f(UYX\YEf(MXY^Uf)EMYMU\UUYMU\UYXS(`(U WXfWf(fTfUfVf(EffYWfHĘ[]ÐUHAWAVSPIIH5YL_UHHuH= \L(L"HL1H[A^A_]f.UHHXXXXXXXXHHHHHH HHHHH0H(H (WHXHayayHhLJpaytLJayLJayLJay(VHt$iH(8HXhxHH(]f.UHAWAVAUATSHIHHHfHHEL%hA<$t9HfH H=ZLSH H=Z,3SHPHHRHIHIHIHIHIHIHIHI H IH(I H0I(H8I0H@HPLPLf.Dƅ1HH5,YLHPMKRLH5YBRHI\uALL2RA<$u/HXeH81HLH XMQf.@LH5XQu=HLQA<$u'HeH81HLH XMjQfDLH5XQu=HLQA<$u'HdH81HLH JXMQfDLH5?XGQu=HL:QA<$u'H`dH81HLH XMPfDLH5WPu=HLPA<$u'HdH81HLH WMzPfDLH5WPu=HLPA<$u'HcH81HLH WM*PfDLH5qWWPu=HLJPA<$u'HpcH81HLH 9WMOfDLH5)WPu=HLOA<$u'H cH81HLH VMOfDLH5VOu=H LOA<$u'HbH81HLH VM:OfDLH5VgOu=H(LZOA<$u'HbH81HLH gVMNfDLH5XVOu=H0L OA<$u'H0bH81HLH VMNfDLH5VNu=H8LNA<$u'HaH81HLH UMJNfDLH5UwNu=H@LjNA<$u'HaH81HLH UMMfDLH5}U'NuMLMAA<$u7H>aH81H5XLH ?UMAMf.LH5#UMuMLOMAA<$u7H`H81H5WLH TMAAMf.LH5TgMuMLLALA<$u7H~`H81H5WWLH TMALf.LH5|TMuMLLAPA<$u7H`H81H5VLH >TMALf.LH50TLuML/LATA<$u7H_H81H5VLH SMA!Lf.LH5SGLuMLKAXA<$u7H^_H81H57VLH SMAKf.LH5SKuMLoKA\A<$u7H^H81H5ULH ISMAaKf.LH54SKuMLKA`A<$u7H^H81H5wULH RMAKf.LH5R'KuMLJAA<$u7H>^H81H5ULH RMAJf.LH5RJuMLOJAlA<$u7H]H81H5TLH ORMAAJf.LH57RgJuMLIAdA<$u7H~]H81H5WTLH QMAIf.LH5QJuMLIAhA<$u7H]H81H5SLH QMAIf.LH5QIuML/IAA<$u7H\H81H5SLH QQMA!If.LH5[H81H5RLH OMAGf.LH5OGuMLOGAxA<$u7HZH81H5QLH OMAAGf.LH5OgGuMLFAA<$u7H~ZH81H5WQLH AOMAFf.LH5*OGu=LFAA<$u%HZH8H5 QLH NMFLH5NFHPuFL2FAA<$u.HYH8H5PLH NM-FfLH5NWFu=LEAA<$u%HnYH8H5[PLH YNMELH5QNFu=LEAA<$u%HYH8H5 PLH NMELH5 NEu=L9EAA<$u%HXH8H5OLH MM4ELH5MgEu=LDAA<$u%H~XH8H5kOLH MMDLH5MEu=LDAA<$u%H.XH8H5OLH BMMDLH5=MDu=LIDAA<$u%HWH8H5NLH LMDDLH5LwDu=LCAA<$u%HWH8H5{NLH LMCLH5L'Du=LCAA<$u%H>WH8H5+NLH ~LMCLH5sLCu=LYCAA<$u%HVH8H5MLH 5LMTCLH5-LCu=L CAA<$u%HVH8H5MLH KMCLH5K7Cu=LBAA<$u%HNVH8H5;MLH KMBLH5KBu=LiBAA<$u%HUH8H5LLH mKMdBLH5fKBu=LBAA<$u%HUH8H5LLH (KMBLH5KGBu=LAA A<$u%H^UH8H5KLLH JMALH5JAu=LyAA(A<$u%HUH8H5KLH JMtALH5JAu=L)AA0A<$u%HTH8H5KLH JJM$ALH5?JWAu=L@A8A<$u%HnTH8H5[KLH JM@LH5IAu=L@A@A<$u%HTH8H5 KLH IM@LH5I@u=L9@AHA<$u%HSH8H5JLH {IM4@LH5sIg@u=L?APA<$u%H~SH8H5kJLH 5IM?LH54I@u=L?AXA<$u%H.SH8H5JLH HM?LH5H?u=LI?A`A<$u%HRH8H5ILH HMD?LH5Hw?u=L>AhA<$u%HRH8H5{ILH oHM>LH5hH'?u=L>ApA<$u%H>RH8H5+ILH *HM>LH5H>u=LY>AxA<$u%HQH8H5HLH GMT>LH5G>u=L >AA<$u%HQH8H5HLH GM>LH5G7>u=L=AA<$u%HNQH8H5;HLH IGM=LH5AG=u=Li=AA<$u%HPH8H5GLH GMd=LH5F=u=L=AA<$u%HPH8H5GLH FM=LH5FG=u=L<AA<$u%H^PH8H5KGLH wFM<LH5oF<u=Ly<AA<$u%HPH8H5FLH 1FMt<LH5+F<u=L)<AA<$u%HOH8H5FLH EM$<LH5EW<u=L;AA<$u%HnOH8H5[FLH EM;LH5E<u=L;AA<$u%HOH8H5 FLH hEM;LH5fE;u=L9;AA<$u%HNH8H5ELH (EM4;LH5#Eg;u=L:AA<$u%H~NH8H5kELH DM:LH5D;u=L:AA<$u%H.NH8H5ELH DM:LH5D:u=LI:AA<$u%HMH8H5DLH ^DMD:LH5VDw:u=L9AA<$u%HMH8H5{DLH DM9LH5D':u=L9AA<$u%H>MH8H5+DLH CM9LH5C9u=LY9A A<$u%HLH8H5CLH CMT9LH5C9u=L 9A(A<$u%HLH8H5CLH QCM9HHH8HHTLHH;EuH[A\A]A^A_]l8f.fUHAWAVSPHIIHH8H3M8u+HKH8H5B1LLIH[A^A_]_8H[A^A_]UHAWAVATSHIIIH 8AHL8u)HKH8H5tB1LLM[A\A^A_]7[A\A^A_]f.@UHAWAVATSHIIIH7H^L8u)H*KH8H5BLLM[A\A^A_]7[A\A^A_]f.DUHAWAVSPILupaytH5A1LD7AaytH5A1L$7ATaytH5A1L7IH5=H=7tH5A1LH6Af.<9u{H5AL6AdaytH5A1L6IH5A=H6tH5iA1LHX6IH5=H6tH5IA1LH%6A0f.8u{H57AL5ApaytH5*A1L5AlaytH5A1L5IH5u<H5tH5A1LH5AXf.7u{H5@Lf5A`f.7u{H5@L@5Ahf.7u{H5@L5AtaytH5@1L4AxaytH5@1L4Af.E7u{@AH5@L4Af.7u{H5@L4Af.6u{H5|@L_4Af.6u{H5l@L94A\aytH5b@1L4AaytH5Y@1L3A8f.d6u{H5J@L3H5:L4tH5;@1LL3AhaytH5+@1L3ALaytH5 @1Lg3APaytH5@1LG3Af.5u{H5 @L!3AHf.5u{H5?L2Af.f5u{H5?L2AaytH5?1L2AXaytH5?1L2Af.5u{H5?Lo2Af.4u{H5?LI2Af.4u{H5?L#2Af.4u{H5?L1IH58H62tH5?1LH1I H58H2tH5]?1LH1I(H5M8H1tH58?1LHd1APf.3u{H5?L>1A@f.3u{H5?L1A8f.3u{H5>L0A f.]3u{H5>L0A(f.73u{H5>L0Af.3u{H5>L0Af.2u{H5>LZ0Af.2u{H5>L40Af.2u{H5>L0Af.y2u{H5>L/Af.S2u{H5s>L/Af.-2u{H5e>L/Apf.2u{H5U>Lv/Axf.1u{H5=>LP/Af.1u{H5&>L*/Af.1u{H5>L/Af.o1u{H5 >L.Af.I1u{H5>L.Af.#1u{H5=L.Af.0u{H5=Ll.Af.0u{H5=LF.Af.0u{H5=L .Af.0u{H5=L-Af.e0u{H5=L-Af.?0u{H5=L-Af.0u{H5=L-A f./u{H5=Lb-A(f./u{H5=L<-IH53Hu-tH5=1LH -I0H53HB-tH5=1LH,Af.A/u{H5=L,H[A^A_]ÐUH]DUH]DUHHHH?H8H5\=1b,:,@UHGOYFYN\OYFY\JOYFY\B]UHYfOfYXXWQ]UHW\VfOfFf\YfYXXWQ]UH\fff\YfYXXQ]UHOf(YYXWYXWQ^G^FG^F]fUHpY,*)X(^XW*f(X^XhW*^X]UHSPÍ9|H>8tH=H8H5:;1ʉ3*H[]fDUHSPHf(\^ZH>8t&Hg=H8KSH5:)1H[]ÐUHAWAVAUATSHDDHIH<HHED6EH(tAIArf.@AE1Dum1HAH$fH*HAf.L9vB<6t A>tHHH9v<>HIuHH HE1Af.@HHIPL9wLLL!fDADDܬLLLЬD Icր|/u%AHHHDXHHHH71IiM4 I IDŽ IDŽ MtUHȬLhIiL LH5d$WL6HLDIպLLLHȬHDŽHiHHLܬLuHcA|/AEH9mHLLZf.@HI HLȬIiHHH5#H}I_LLLHHiLLLLЬJHAAHHiENܬLHuHcA|/I]LH HHH HLiK<<9LLxH(-A$CfCEDCLOS%AHiȬH)H1ڀЀ w Hc0HuDLLLHЬHLJHFHHiANENܬLHuHcA|/I]LH HHH LiK<49L)HL\L1HKDŽ<G<CDŽ<AFfAFEDACLOSHȬL1HƄ0H01,HHi`H5m"HH:LL1LHH)t HЬ(AFfAFEDACLOSHЬHHȬLHË5(#LLMvIHBWHЬKDŽ4G4CDŽ4@f@EDCLOSLHLLL!H'Hw!H8H51DH H H!H H;MuHHS[A\A]A^A_]` UHAWAVSPEIAFHHiH<9}QIDŽEADŽH[A^A_]ÐUHAWAVSPt;I1A C>Iǹ< t < uL^ L9w1ۉH[A^A_]fDUHydu-HA xA LDLcHA01LI WABшL>HM9IvD>Ht8D>H|*HHf.NFHH9Hvr]ÐUHAWAVAUATSHAAIHHHEЅu H=j9 E~!Gt-1f  D9|LHIcLiC4uC4u = O4K4H5 H t(DO4C4EEH=e1HLPD\t0KL41ڀЀ w Hc`Hu1HƄ`H`&,HHi`H5bO4C4LPEEH=1\ A7HHt SLiAut LVHHH;EuHĘ[A\A]A^A_] f.UH* Y*% f(X^- f: XY- Y- Wf: \Y ^Wf: W*X WA*^XW*^X^ XX X]UHAWAVAUATSHIHXHHHEH IE~X1L`E11fDIcA< u0ANLLLO,HcHXADAE9|11ۍBD9}0L`LLDL,HcHXHAHH;EuHĈ[A\A]A^A_]WUHAWAVAUATSHIHXHHHEHIE~j1L`E11fDIcAH w>HHs.ANLLL;HcHXADAE9|11ۍBD9}.L`LLDLHcHXH1HH;EuHĈ[A\A]A^A_]GUH帀H `ƄVƄ@Ƅ@+ƄHH=7_u]f.UHAWAVATSIIlILaLH<HHLAHHLLH$H[A\A^A_]fUHAVS~I Lu[A^]DUHAWAVAUATSHHAIHHHEHcLiN4/H5 LtAu^H5B1HL)HAKL/1ڀЀ w HcHuH5H1LAuH5H1HKc/LiO$/H5 L.H5L1HLL21HƄHAu"U,HHi`HH5*B3,HHi`H=oH5H1*Au!H5H1HKc/LiK'H5  HK/H,HHi`HHcHiLH5yL1H"HA$tfKL/1f.ڀЀ w HcHu2trKL'1ڀЀ w Hc HuJ1HƄH,HHi`H H5L1HLe1HƄ H,HHi`L=:LH k,HHi`LH5UL1HH HHH;EuH[A\A]A^A_]UHAWAVAUATSHMH}HMЍ EHuAԅt }"B'H=L}~"]f.@ L}uH]H;McMiJc7HHiDLH;B7SEHEDtAf.D9e~"D LuHEH8IiLHEH8LcMtAIiAteDLH;B7tHEЍH}HMZH;B7t}HHMM8H;B7tH[A\A]A^A_]B7uEtHEDtAD9e~"D LuHEH8IiL HEH8LcMkAIiAtN%%%%%%%%%%%%%%%%% % %%%%%%%%%% %"%$%&%(%*LAS%hhhh4hIhahuhhhhhxhnhdhZhPhFh @?$$ Usage: ext_orb_s1a.c name_of_prm name_of_orb_xml name_output Example: ext_orb_s1a.c S1A20140807.PRM S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944.EOF output Output: output.LED rCouldn't open xml file: .LEDwCouldn't open led file: NO orbit coverage in the selected file... Writing %d lines of precise orbit for the LED file... %d %d %d %.6lf %.3lf %d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf /Earth_Explorer_File/Data_Block/List_of_OSVs//Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/UTC//Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/X//Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/Y//Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/Z//Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/VX//Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/VY//Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/VZ/can't open fileXXXXXXXXget_sio_struct: PRMname (PRM value) interpreted value %s %s %sinput_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdtypenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangePRFI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startbaseline_centerbaseline_endalpha_startalpha_centeralpha_endSLC_scaleB_offset_startB_offset_centerB_offset_end %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %g stretch_a = %g a_stretch_r = %g a_stretch_a = %g first_sample = %d SC_identity = %d rng_samp_rate = %.6f input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d PRF = %lf pulse_dur = %e near_range = %lf num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s orbdir = %s lookdir = %s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %.6f I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %lf fddd1 = %lf sub_int_r = %lf sub_int_a = %lf B_parallel = %lf B_perpendicular = %lf baseline_start = %lf baseline_center = %lf baseline_end = %lf alpha_start = %lf alpha_center = %lf alpha_end = %lf B_offset_start = %lf B_offset_center = %lf B_offset_end = %lf SLC_file = %s dtype = %.1s SLC_scale = %lf %s %s find_fft_length: ...data length n %d nfft %d geo2latlon: %8.3f %8.3f %8.0f OutOfSpaceUnable to find designated string...after %ld searches.. Unable to find designated string... CLOSEDNot an well formatted XML file...%d, %d %s (%d,%d,%d) %.12f<%s> %s <%s>%s In the brackets the numbers are (count, child, sibling)44Xa ! LL9lL t 0  (`(@)4@67BB@HSSpTPVW YYY Zmm$m.m8mBmLmVm`mjmtm~mmmmmmmmmmmmmn nnn(n2n?@ADEFGHIJKLMNOPQRSTUVWXYZ[\]^_`@BC=>?@ADEFGHIJKLMNOPQRSTUVWXYZ[\]^_ _MAX_CHAR_SIZE_MAX_TREE_SIZE_N_SAR_mode_STR_USAGE__mh_execute_header_assemble_trees_cat_nums_create_child_cross3_date2MJD_debug_die_dopp_find_distance_find_distance3_find_fft_length_find_length_find_unit_vector_force_slope_forced_slope_geo2latlon_get_double_get_int_get_prm_get_seconds_get_sio_struct_get_string_get_tree_is_big_endian__is_big_endian___itoa_xml_main_nodata_null_MEM_STR_null_sio_struct_plh2xyz_pop_led_pre_prefix_str_print_space_print_tree_put_sio_struct_quad_pol_quiet_flag_roi_flag_search_tree_show_tree_sio_flag_space_count_str2dbs_str2double_str2ints_str_date2JD_strasign_strlocate_swap_verbose_write_orb_xyz2plh_yds2ydf___bzero___exp10___sincos_stret___sprintf_chk___stack_chk_fail___stack_chk_guard___stderrp___strcat_chk___strcpy_chk_acos_atan_atan2_atof_atoi_cos_exit_fclose_fgetc_fgets_fopen_fprintf_fputc_free_fwrite_malloc_pow_printf_putchar_puts_round_sscanf_strcmp_strcpy_strlen_strncmpdyld_stub_binderGMTSAR_V5.7/preproc/S1A_preproc/src_orbit/Makefile000644 015705 000000 00000000563 13505462014 022763 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ext_orb_s1a CSRCS = ext_orb_s1a.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar -I$(TIFF_INC) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC -L$(TIFF_LIB) -ltiff -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/S1A_preproc/src_orbit/ext_orb_s1a.c000644 015705 000000 00000013475 13505462014 023703 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: David Sandwell * * (Scripps Institution of Oceanography) * * Date : 09/23/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE : EX made the code capable of reading long vectors of orbits * * * ***************************************************************************/ #include "PRM.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include #include #include #include // int pop_prm(struct PRM *, tree *, char *); int pop_led_pre(tree *, state_vector *, double, double); int write_orb(state_vector *sv, FILE *fp, int); double yds2ydf(state_vector); char *USAGE = "\n\nUsage: ext_orb_s1a.c name_of_prm name_of_orb_xml name_output\n" "\nExample: ext_orb_s1a.c S1A20140807.PRM " "S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944." "EOF output\n" "\nOutput: output.LED\n"; int main(int argc, char **argv) { FILE *XML_FILE, *INPUT_PRM, *OUTPUT_LED; char tmp_str[200]; struct PRM prm; tree *xml_tree; state_vector *sv; int ch, n = 0, nc = 0, nlmx = 0; double t1, t2; if (argc < 3) die(USAGE, ""); // find the number of lines and the maximum line length of the xml file if ((XML_FILE = fopen(argv[2], "r")) == NULL) die("Couldn't open xml file: \n", argv[2]); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } xml_tree = (struct tree *)malloc(5 * n * sizeof(struct tree)); sv = (struct state_vector *)malloc(n / 2 * sizeof(struct state_vector)); fclose(XML_FILE); if ((XML_FILE = fopen(argv[2], "r")) == NULL) die("Couldn't open xml file: \n", argv[2]); get_tree(XML_FILE, xml_tree, 1); // show_tree(xml_tree,0,0); fclose(XML_FILE); // get the prm if ((INPUT_PRM = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_sio_struct(INPUT_PRM, &prm); // fprintf(stderr,"%.12f %.12f\n",prm.SC_clock_start,prm.SC_clock_stop); t1 = prm.SC_clock_start - 10 * (prm.SC_clock_stop - prm.SC_clock_start); t2 = prm.SC_clock_stop + 10 * (prm.SC_clock_stop - prm.SC_clock_start); // generate the LED file n = pop_led_pre(xml_tree, sv, t1, t2); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); // tmp_str = search_tree() write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); free(xml_tree); free(sv); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; if (n <= 0) { fprintf(stderr, "NO orbit coverage in the selected file...\n"); return (-1); } else { printf("Writing %d lines of precise orbit for the LED file...\n", n); } dt = round((sv[1].sec) * 1000.0) / 1000.0 - round((sv[0].sec) * 1000.0) / 1000.0; // printf("%f,%f\n",sv[1].sec,sv[0].sec); if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.6lf %.3lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led_pre(tree *xml_tree, state_vector *sv, double t1, double t2) { int i, count, num = 0; char tmp_c[200], tmp_y[200]; double tmp_d, tmp_t; state_vector tmp_sv; search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); // printf("Reading %d lines from precise orbit...\n",count); for (i = 0; i < count; i++) { search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/UTC/", tmp_c, 2, 4, i + 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/UTC/", tmp_c, 1, 4, i + 1); strasign(tmp_y, tmp_c, 4, 7); tmp_sv.yr = (int)(str2double(tmp_y)); tmp_sv.jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); tmp_sv.sec = (tmp_d - trunc(tmp_d)) * 86400; tmp_t = yds2ydf(tmp_sv); if (tmp_t < t1 || tmp_t > t2) { continue; } else { sv[num].yr = tmp_sv.yr; sv[num].jd = tmp_sv.jd; sv[num].sec = tmp_sv.sec; search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/X/", tmp_c, 1, 4, i + 1); sv[num].x = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/Y/", tmp_c, 1, 4, i + 1); sv[num].y = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/Z/", tmp_c, 1, 4, i + 1); sv[num].z = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/VX/", tmp_c, 1, 4, i + 1); sv[num].vx = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/VY/", tmp_c, 1, 4, i + 1); sv[num].vy = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/VZ/", tmp_c, 1, 4, i + 1); sv[num].vz = str2double(tmp_c); num++; } } return (num); } double yds2ydf(state_vector s) { // convert year, day, sec to year, day, fraction of day double t = 0; t = t + (double)s.yr * 1000; t = t + (double)s.jd; t = t + (double)s.sec / 86400.; return (t); } GMTSAR_V5.7/preproc/S1A_preproc/src_swath/Makefile000644 015705 000000 00000000565 13505462014 022774 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_slc_s1a CSRCS = make_slc_s1a.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar -I$(TIFF_INC) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC -L$(TIFF_LIB) -ltiff -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/S1A_preproc/src_swath/make_slc_s1a.c000644 015705 000000 00000025342 13505462014 024022 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 04/06/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include "tiffio.h" #include #include #include #include int pop_prm(struct PRM *, tree *, char *); int pop_led(tree *, state_vector *); int write_orb(state_vector *sv, FILE *fp, int); int write_slc(TIFF *, FILE *); char *USAGE = "\n\nUsage: make_slc_s1a name_of_xml_file name_of_tiff_file name_output\n" "\nExample: make_slc_s1a s1a-s1-slc-vv-20140807.xml " "s1a-s1-slc-vv-20140807.tiff S1Avv_20140807\n" "\nOutput: S1Avv_20140807.SLC S1Avv_20140807.PRM S1Avv_20140807.LED\n"; int main(int argc, char **argv) { FILE *XML_FILE, *OUTPUT_PRM, *OUTPUT_SLC, *OUTPUT_LED; TIFF *TIFF_FILE; char tmp_str[200]; struct PRM prm; tree *xml_tree; state_vector sv[200]; int ch, n = 0, nc = 0, nlmx = 0; if (argc < 4) die(USAGE, ""); // find the number of lines and the maximum line length of the xml file if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } // fprintf(stderr,"%d %d \n",n,nlmx); xml_tree = (struct tree *)malloc(5 * n * sizeof(struct tree)); fclose(XML_FILE); // generate the xml tree if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_tree(XML_FILE, xml_tree, 1); fclose(XML_FILE); // show_tree(xml_tree,0,0); // initiate the prm null_sio_struct(&prm); // generate the PRM file pop_prm(&prm, xml_tree, argv[3]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); // generate the LED file n = pop_led(xml_tree, sv); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // generate the SLC file TIFFSetWarningHandler(NULL); if ((TIFF_FILE = TIFFOpen(argv[2], "r")) == NULL) die("Couldn't open tiff file: \n", argv[2]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc file: \n", tmp_str); write_slc(TIFF_FILE, OUTPUT_SLC); TIFFClose(TIFF_FILE); fclose(OUTPUT_SLC); } int write_slc(TIFF *tif, FILE *slc) { uint32 width, height, widthi; uint32 i, j; uint16 s, nsamples; uint16 *buf; short *tmp; // get the width and the height of the file, make width dividable by 4 TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &widthi); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); width = widthi - widthi % 4; // printf("%d %d \n",width,height); buf = (uint16 *)_TIFFmalloc(TIFFScanlineSize(tif)); tmp = (short *)malloc(width * 2 * sizeof(short)); printf("Writing SLC..Image Size: %d X %d...\n", width, height); TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &nsamples); for (s = 0; s < nsamples; s++) { for (i = 0; i < height; i++) { TIFFReadScanline(tif, buf, i, s); for (j = 0; j < width * 2; j++) { tmp[j] = (short)buf[j]; } fwrite(tmp, sizeof(short), width * 2, slc); } } _TIFFfree(buf); free(tmp); return (1); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 100.0) / 100.0 - trunc((sv[0].sec) * 100.0) / 100.0; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.6lf %lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led(tree *xml_tree, state_vector *sv) { int i, count; char tmp_c[200]; double tmp_d; search_tree(xml_tree, "/product/generalAnnotation/orbitList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); for (i = 0; i < count; i++) { search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 2, 4, i + 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 1, 4, i + 1); tmp_c[4] = '\0'; sv[i].yr = (int)(str2double(tmp_c)); sv[i].jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); sv[i].sec = (tmp_d - trunc(tmp_d)) * 86400; search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/x/", tmp_c, 1, 4, i + 1); sv[i].x = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/y/", tmp_c, 1, 4, i + 1); sv[i].y = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/z/", tmp_c, 1, 4, i + 1); sv[i].z = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, i + 1); sv[i].vx = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, i + 1); sv[i].vy = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, i + 1); sv[i].vz = str2double(tmp_c); } printf("%d Lines Written for Orbit...\n", count); return (count); } int pop_prm(struct PRM *prm, tree *xml_tree, char *file_name) { char tmp_c[200]; double tmp_d; int tmp_i; double c_speed = 299792458.0; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/numberOfLooks/", tmp_c, 1, 0, 1); prm->nlooks = (int)str2double(tmp_c); prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; strasign(prm->dtype, "a", 0, 0); search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_c, 1, 0, 1); prm->fs = str2double(tmp_c); // rng_samp_rate prm->SC_identity = 10; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ search_tree(xml_tree, "/product/generalAnnotation/productInformation/radarFrequency/", tmp_c, 1, 0, 1); prm->lambda = c_speed / str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/downlinkInformationList/" "downlinkInformation/downlinkValues/txPulseLength/", tmp_c, 1, 0, 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/lookBandwidth/", tmp_c, 1, 0, 1); prm->chirp_slope = str2double(tmp_c) / tmp_d; prm->pulsedur = tmp_d; search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/re/", tmp_c, 1, 0, 1); prm->xmi = str2double(tmp_c); // I_mean search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/im/", tmp_c, 1, 0, 1); prm->xmq = str2double(tmp_c); // Q_mean search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); prm->prf = 1 / str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_c, 1, 0, 1); prm->near_range = str2double(tmp_c) * c_speed / 2; prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius search_tree(xml_tree, "/product/generalAnnotation/productInformation/pass/", tmp_c, 1, 0, 1); strasign(prm->orbdir, tmp_c, 0, 0); strasign(prm->lookdir, "R", 0, 0); strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; search_tree(xml_tree, "/product/adsHeader/startTime/", tmp_c, 2, 0, 1); prm->clock_start = str2double(tmp_c); search_tree(xml_tree, "/product/adsHeader/startTime/", tmp_c, 1, 0, 1); tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(tmp_c); strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfSamples/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c) - (int)str2double(tmp_c) % 4; prm->bytes_per_line = tmp_i * 4; prm->good_bytes = prm->bytes_per_line; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig prm->az_res = 0.0; // prm.antenna_side = -1; prm->fdd1 = 0.0; prm->fddd1 = 0.0; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfLines/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c); prm->num_lines = tmp_i - tmp_i % 4; search_tree(xml_tree, "/product/adsHeader/stopTime/", tmp_c, 2, 0, 1); prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->num_rng_bins = prm->bytes_per_line / 4; prm->chirp_ext = 0; printf("PRM set for Image File...\n"); return (1); } GMTSAR_V5.7/preproc/S1A_preproc/src_swath/make_slc_s1a000755 015705 000000 00000131764 13507242213 023611 0ustar00sandwellwheel000000 000000 8 H__PAGEZERO(__TEXT__text__TEXTh__stubs__TEXTHwHw__stub_helper__TEXT8x8x__const__TEXTyy__cstring__TEXT{{__unwind_info__TEXT88__DATA N__nl_symbol_ptr__DATA(__got__DATA*__la_symbol_ptr__DATA(@(-__data__DATAhh__common__DATA@NH__LINKEDITN "0HP`it P>>+ U /usr/lib/dyld`5G :$\)2   *( 8 /opt/local/lib/libtiff.5.dylib 8/usr/lib/libSystem.B.dylib&HH)UHAWAVATSH0AIH\HHE؃H=H5"U<I~H5mhIHuIvH=zm-<Lh1ۃt1f.@1Ƀ LhuHHiHhILvhI~H5mxhHHuIvH=l;HLQH6hHHIVHLIvHHgH5lHgH5lHgHHuH=lH&;HHHH0HgHLAIvHHFgH5VlH,gH5&lHegHHuH=0lH:HHD Hg1fI~H5kfIHuIvH=kS:IvHHfH5kHfH5kHfHHuH=kH9LH" LfH~fH~HH;Eu1H0A[A\A^A_]ff.UHAWAVATSHIIHHv~HHELJTLJdH5wmLE1ALL<LG,pHǃtHǃHǃHǃHǃHǃHǃǃ\H0H5Rm11CH5DmE1ALL|;LDG8ǃ H5KmE1ALLB;L G g^PH5MmE1ALL;LFH5mE1ALL:LF^@HH5mE1ALL:LZF H5mE1ALLb:L*F(H5 nE1ALL2:LE f^H5#nE1ALL9LEYeYeH@TXAHH= ?XAHH5mE1ALL9H 11LAH(H5m11@LLbH5mLbHLbLLbH5gLbHLbLLbH5gLpbHLbbH?HL%7mE1ALLL8LZDE1ALLLf8ƅLDY7dXHL%l11L?H11L?H11Lo?H5lE1ALL7LCD,LC,?)DLPHǃHǃh(cXHH5Dl11>Hǃ0HǃHǃxH5lE1ALL7LB,H5lE1ALL6W*^^bLXX`ǃXhǃlH=ke`HbxHH;EuH[A\A^A_]_UHAWAVAUATSHIIHxHHEH5leHE1AH5HA,H1L-EeLf.HùALLLAq5L9AALLLAE5ƅLA,A$f( a^f: Yf(\,AD$Wf: \Y`AT$ALH5dLA4L@AD$ALH5dLA4LX@AD$ALH5dLAa4L)@AD$ ALH5dLA24L?AD$(ALH5dLA4L?AD$0ALH5dLA3L?AD$8I@H9$H=d1]HuHH;EuH[A\A]A^A_]]DUHAWAVATSAIHGOHff(X_fYf: f^f(\ʋDGH5FbL\EL=Gbf.@KCKS[ c(k0s8LL\H@Iu¸[A\A^A_]@UHAWAVAUATSHXHuIHUľ1[HUо1L[DuAL[H[IG$6K<$9\HËUH=?a1D.\HUԾ1L}L][EfMNcOLeDHUHzH}HDL9AM9D ʈUALH)HHUHHHULHHUL}I1HU@ɹ^E1MH}LDZEA Et1H}0s1H}uxHM1DADEALECLCADE ALE0DC LC0ADE@ALEPDC@LCPADE`ALEpDC`LCpH@HuH}t3HMH AHUHB1fDD D H I9uHMHL9t=fALEf CALEfLCALEfLCALEfLCHI9u̾HLHM.ZAƋMA9EHUHUf9LvYHYHX[A\A]A^A_]ÐUHAVSH@)EIH[\YE[\YE [YYOMYEUYYP[\Qf(U^]YCX]XYf)UEXfEfYfAEYEAFH@[A^]f.@UHSHHf'o5Zf(\Yf( ,[fWfEWf(Af(fUfTfVf)`f(fYf(XWQmf(Yf(Yf)}f(Y\ef(EYff^f(f()MYXYLZ)EfYf()pf(\Xf(YYf(YXfA.f)ef)]sFf()ZfWQf(YXEf(^5W^YFWf(YUBWQE\ Y`WEEXE YDWU\f(Yf( Yf(]fTf.v%f(Yf(EXXY UY^f(f(pXQf(]XYXf(YYf(e\f(X\^XWQ\f(UYsX\YEf(MXY^Vf)EMYMU\UUYMU\UYXS(`(U tXXfWf(fTfUfVf(EffYvXfHĘ[]ÐUHAWAVSPIIH5/ZLUHHuH=`L(L"HL1H[A^A_]f.UHHXXXXXXXXHHHHHH HHHHH0H(H (WHXHayayHhLJpaytLJayLJayLJay(XWHt$iH(8HXhxHH(]f.UHAWAVAUATSHIHHHkHHEL%5mA<$t9HkH H=_|SH H=_,cSHPHH-SHIHIHIHIHIHIHIHI H IH(I H0I(H8I0H@HPLPLf.Dƅ1HH5^LHPMuRLH5 ^lRH;auALL\RA<$u/HHjH81HLH ]MQf.@LH5]Ru=HLRA<$u'HiH81HLH ]MQfDLH5t]Qu=HLQA<$u'HiH81HLH <]MJQfDLH51]qQu=HLdQA<$u'HPiH81HLH \MPfDLH5\!Qu=HLQA<$u'HiH81HLH \MPfDLH5\Pu=HLPA<$u'HhH81HLH t\MZPfDLH5c\Pu=HLtPA<$u'H`hH81HLH +\M PfDLH5\1Pu=HL$PA<$u'HhH81HLH [MOfDLH5[Ou=H LOA<$u'HgH81HLH [MjOfDLH5[Ou=H(LOA<$u'HpgH81HLH Y[MOfDLH5J[AOu=H0L4OA<$u'H gH81HLH [MNfDLH5[Nu=H8LNA<$u'HfH81HLH ZMzNfDLH5ZNu=H@LNA<$u'HfH81HLH ZM*NfDLH5oZQNuMLMAA<$u7H.fH81H5 ]LH 1ZMAMf.LH5ZMuMLMAA<$u7HeH81H5\LH YMAqMf.LH5YMuMLMALA<$u7HneH81H5I\LH YMAMf.LH5nY1MuMLLAPA<$u7HeH81H5[LH 0YMALf.LH5"YLuML_LATA<$u7HdH81H5[LH XMAQLf.LH5XqLuMLKAXA<$u7HNdH81H5)[LH XMAKf.LH5yXLuMLKA\A<$u7HcH81H5ZLH ;XMAKf.LH5&XKuML?KA`A<$u7HcH81H5iZLH WMA1Kf.LH5WQKuMLJAA<$u7H.cH81H5 ZLH WMAJf.LH5WJuMLJAlA<$u7HbH81H5YLH AWMAqJf.LH5)WJuMLJAdA<$u7HnbH81H5IYLH VMAJf.LH5V1JuMLIAhA<$u7HbH81H5XLH VMAIf.LH5VIuML_IAA<$u7HaH81H5XLH CVMAQIf.LH5.VqIuMLHApA<$u7HNaH81H5)XLH UMAHf.LH5UIuMLHAtA<$u7H`H81H5WLH UMAHf.LH5|UHuML?HAxA<$u7H`H81H5iWLH >UMA1Hf.LH5#UQHuMLGAtA<$u7H.`H81H5 WLH TMAGf.LH5TGuMLGAxA<$u7H_H81H5VLH ~TMAqGf.LH5qTGuMLGAA<$u7Hn_H81H5IVLH 3TMAGf.LH5T1Gu=LFAA<$u%H_H8H5ULH SMFLH5SFHPuFLbFAA<$u.H^H8H5ULH SM]FfLH5SFu=L FAA<$u%H^^H8H5MULH KSMFLH5CS1Fu=LEAA<$u%H^H8H5TLH SMELH5REu=LiEAA<$u%H]H8H5TLH RMdELH5REu=LEAA<$u%Hn]H8H5]TLH |RMELH5rRAEu=LDAA<$u%H]H8H5 TLH 4RMDLH5/RDu=LyDAA<$u%H\H8H5SLH QMtDLH5QDu=L)DAA<$u%H~\H8H5mSLH QM$DLH5QQDu=LCAA<$u%H.\H8H5SLH pQMCLH5eQDu=LCAA<$u%H[H8H5RLH 'QMCLH5QCu=L9CAA<$u%H[H8H5}RLH PM4CLH5PaCu=LBAA<$u%H>[H8H5-RLH PMBLH5PCu=LBAA<$u%HZH8H5QLH _PMBLH5XPBu=LIBAA<$u%HZH8H5QLH PMDBLH5 PqBu=LAA A<$u%HNZH8H5=QLH OMALH5O!Bu=LAA(A<$u%HYH8H5PLH OMALH5zOAu=LYAA0A<$u%HYH8H5PLH ApA<$u%H.WH8H5NLH MM>LH5M?u=L>AxA<$u%HVH8H5MLH LM>LH5L>u=L9>AA<$u%HVH8H5}MLH LM4>LH5yLa>u=L=AA<$u%H>VH8H5-MLH ;LM=LH53L>u=L=AA<$u%HUH8H5LLH KM=LH5K=u=LI=AA<$u%HUH8H5LLH KMD=LH5Kq=u=L<AA<$u%HNUH8H5=LLH iKM<LH5aK!=u=L<AA<$u%HTH8H5KLH #KM<LH5K<u=LY<AA<$u%HTH8H5KLH JMT<LH5J<u=L <AA<$u%H^TH8H5MKLH JM<LH5J1<u=L;AA<$u%HTH8H5JLH ZJM;LH5XJ;u=Li;AA<$u%HSH8H5JLH JMd;LH5J;u=L;AA<$u%HnSH8H5]JLH IM;LH5IA;u=L:AA<$u%HSH8H5 JLH IM:LH5I:u=Ly:AA<$u%HRH8H5ILH PIMt:LH5HI:u=L):AA<$u%H~RH8H5mILH IM$:LH5IQ:u=L9AA<$u%H.RH8H5ILH HM9LH5H:u=L9A A<$u%HQH8H5HLH HM9LH5H9u=L99A(A<$u%HQH8H5}HLH CHM49HHH9HHDQHH;EuH[A\A]A^A_]8f.fUHAWAVSPHIIHH9HcR8u+HPH8H5G1LLIH[A^A_]8H[A^A_]UHAWAVATSHIIIH;8AHQ8u)HPH8H5fG1LLM[A\A^A_]+8[A\A^A_]f.@UHAWAVATSHIIIH7HQ8u)HPH8H5 GLLM[A\A^A_]7[A\A^A_]f.DUHAWAVSPILupaytH5F1Lt7AaytH5F1LT7ATaytH5F1L47IH5BHg7tH5F1LH7Af.9u{H5FL6AdaytH5uF1L6IH53BH6tH5[F1LH6IH5BH6tH5;F1LHU6A0f. 9u{H5)FL/6ApaytH5F1L6AlaytH5F1L5IH5gAH"6tH5E1LH5AXf.8u{H5EL5A`f.a8u{H5ELp5Ahf.;8u{H5ELJ5AtaytH5E1L*5AxaytH5E1L 5Af.7u{@AH5EL4Af.7u{H5EL4Af.7u{H5nEL4Af.Z7u{H5^ELi4A\aytH5TE1LI4AaytH5KE1L)4A8f.6u{H50Af. 3u{H5xCL0Af.2u{H5eCL/Af.2u{H5WCL/Apf.2u{H5GCL/Axf.q2u{H5/CL/Af.K2u{H5CLZ/Af.%2u{H5CL4/Af.1u{H5BL/Af.1u{H5BL.Af.1u{H5BL.Af.1u{H5BL.Af.g1u{H5BLv.Af.A1u{H5BLP.Af.1u{H5BL*.Af.0u{H5BL.Af.0u{H5BL-Af.0u{H5BL-A f.0u{H5BL-A(f.]0u{H5BLl-IH58H-tH5B1LH9-I0H58Hl-tH5B1LH-Af./u{H5BL,H[A^A_]ÐUH]DUH]DUHHHHDH8H5NB1,j,@UHGOYFYN\OYFY\JOYFY\B]UHYfOfYXXWQ]UHW\VfOfFf\YfYXXWQ]UH\fff\YfYXXQ]UHOf(YYXWYXWQ^G^FG^F]fUHpY -*)X(^XW*f(X^XhW*^X]UHSPÍ9|H(D8tHBH8H5,@1ʉc*H[]fDUHSPHf(\^ZHC8t&HWBH8KSH5?)1H[]ÐUHAWAVAUATSHDDHIHAHHED6EH(tAIArf.@AE1DL)&m?HcExA9f.fM6I9-IiA|KH;L uCIiMcIt:9|IiA@HL Lc; S4HZ=HH=t;$%E1L LtLMiN48H5: L$LL$L(L nH<H8H5:1Lj$`IiIcHiAIL1ڀЀ w HcA\HuIiAIL1ڀЀ w HcHu^AtrH(JL8I1L f.DڀЀ w HcHu91HAD_1HƄHL B1L(L HƄH,HHi`H5K;LY#L#IiAH -;H H;MuH[A\A]A^A_]"DUHAWAVAUATSPtGAIDE1 A HA9uAE9tL"H9w۸ˉH[A\A]A^A_]ÐUHAWAVAUATSHxH:HHEиAA)AAIA~*HOutOfSpaHG fGce;xuL`|McMcMKM)LIKDH9vJK LH9LHHNHHHÃH`01HLaƅ`-HcIXAIA0f.HIH)ƃ WABCHIH HwCItum1HAH$fHTHAf.L9vB<6t A>tHHH9v<>HIuHH HE1Af.@HHIzL9wLLL!fDADDܬLLLЬD Icր|/u%AHHHDXHHHH71IiM4 I IDŽ IDŽ MtUHȬLhIiL LH5T)L6HLDIպLLLHȬHDŽHiHHLܬLuHcA|/AEH9mHLLZf.@HI HLȬIiHHH5(r}I_LLLHHiLLLLЬJHAAHHiENܬLHuHcA|/I]LH HHH HLiK<<9LLxH(A$CfCEDCLOS%AHiȬH)H1ڀЀ w Hc0HuDLLL@HЬHLJHFHHiANENܬLHuHcA|/I]LH HHH LiK<49L)HL\L1HKDŽ<G<CDŽ<AFfAFEDACLOSHȬL1HƄ0H01,HHi`H5]'HHdLL[LHHSt HЬ(AFfAFEDACLOSHЬHHȬLHË5P(LLMIHBWHЬKDŽ4G4CDŽ4@f@EDCLOSLHLLLQHE'Hg&H8H5$1DHH 8&H H;MuHHS[A\A]A^A_] UHAWAVSPEIAFHHiH<9}QIDŽEADŽH[A^A_]ÐUHAWAVSPt;I1A C>Iǹ< t < uL L9w1ۉH[A^A_]fDUHydu-HA xA LDLcHA01LI WABшL>HM9IvD>Ht8D>H|*HHf.NFHH9Hvr]ÐUHAWAVAUATSHAAIH$HHEЅu H=Z#i E~!Gt-1f D D9|LHIcLiC4uC4u = O4K4H5! H t(DO4C4EEH=U"1HLPD\t0KL41ڀЀ w Hc`Hu1HƄ`H`&,HHi`H5R#O4C4LPEEH=!1\ A7HHt SLiAut LVH"HH;EuHĘ[A\A]A^A_]J f.UH*p Y*%h f(X^-` f: XY-n Y-n Wf: \Y9 ^Wf: W*X! WA*^XW*^X^ XX X]UHAWAVAUATSHIHXH!HHEH IE~X1L`E11fDIcA< u0ANLLLO,HcHXADAE9|11ۍBD9}0L`LLDL,HcHXH1!HH;EuHĈ[A\A]A^A_]UHAWAVAUATSHIHXH HHEHIE~j1L`E11fDIcAH w>HHs.ANLLL;HcHXADAE9|11ۍBD9}.L`LLDLHcHXH! HH;EuHĈ[A\A]A^A_]wUH帀H !ƄVƄ@Ƅ@+ƄHH=7_u!]f.UHAWAVATSIIILLH<OHHLkHHLLHNH[A\A^A_]fUHAVS~I Lu[A^]DUHAWAVAUATSHHAIHHHEHcLiN4/H5 LtAu^H521HLYHAKL/1ڀЀ w HcHuH5H1L-AuH5H1HKc/LiO$/H5 L.H5{L1HLL21HƄHAu"U,HHi`HH5B3,HHi`H=_H5H1TAu!H5H1HKc/LiK'H5 HK/H,HHi`HHcHiLH5iL1H"HA$tfKL/1f.ڀЀ w HcHu2trKL'1ڀЀ w Hc HuJ1HƄH,HHi`H H5L1HLe1HƄ H,HHi`L=jLH k,HHi`LH5EL1HHPH}HH;EuH[A\A]A^A_]UHAWAVAUATSHMH}HMЍ EHuAԅt }"B'H=L}~"]f.@ LuH]H;McMiJc7HHiDLH;B7SEHEDtAf.D9e~"D L uHEH8IiLHEH8LcMtAIiAteDLH;B7tHEЍH}HMZH;B7t}HHMM8H;B7tH[A\A]A^A_]B7uEtHEDtAD9e~"D LuHEH8IiL HEH8LcMkAIiAtN%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%% %"%$%&%(LAS%hhh%h5hMhehhhhhhxhnh dhZh3Ph@FhM@?$$ Usage: make_slc_s1a name_of_xml_file name_of_tiff_file name_output Example: make_slc_s1a s1a-s1-slc-vv-20140807.xml s1a-s1-slc-vv-20140807.tiff S1Avv_20140807 Output: S1Avv_20140807.SLC S1Avv_20140807.PRM S1Avv_20140807.LED rCouldn't open xml file: .PRMwCouldn't open prm file: .LEDCouldn't open led file: Couldn't open tiff file: .SLCwbCouldn't open slc file: Writing SLC..Image Size: %d X %d... %d %d %d %.6lf %lf %d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf /product/generalAnnotation/orbitList//product/generalAnnotation/orbitList/orbit/time//product/generalAnnotation/orbitList/orbit/position/x//product/generalAnnotation/orbitList/orbit/position/y//product/generalAnnotation/orbitList/orbit/position/z//product/generalAnnotation/orbitList/orbit/velocity/x//product/generalAnnotation/orbitList/orbit/velocity/y//product/generalAnnotation/orbitList/orbit/velocity/z/%d Lines Written for Orbit... /product/imageAnnotation/processingInformation/swathProcParamsList/swathProcParams/rangeProcessing/numberOfLooks/a/product/generalAnnotation/productInformation/rangeSamplingRate//product/generalAnnotation/productInformation/radarFrequency//product/generalAnnotation/downlinkInformationList/downlinkInformation/downlinkValues/txPulseLength//product/imageAnnotation/processingInformation/swathProcParamsList/swathProcParams/rangeProcessing/lookBandwidth//product/qualityInformation/qualityDataList/qualityData/imageQuality/imageStatistics/outputDataMean/re//product/qualityInformation/qualityDataList/qualityData/imageQuality/imageStatistics/outputDataMean/im//product/imageAnnotation/imageInformation/azimuthTimeInterval//product/imageAnnotation/imageInformation/slantRangeTime//product/generalAnnotation/productInformation/pass/R.raw/product/adsHeader/startTime/n/product/imageAnnotation/imageInformation/numberOfSamples/0/product/imageAnnotation/imageInformation/numberOfLines//product/adsHeader/stopTime/PRM set for Image File...can't open fileXXXXXXXXget_sio_struct: PRMname (PRM value) interpreted value %s %s %sinput_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdtypenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangePRFI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startbaseline_centerbaseline_endalpha_startalpha_centeralpha_endSLC_scaleB_offset_startB_offset_centerB_offset_end %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %g stretch_a = %g a_stretch_r = %g a_stretch_a = %g first_sample = %d SC_identity = %d rng_samp_rate = %.6f input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d PRF = %lf pulse_dur = %e near_range = %lf num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s orbdir = %s lookdir = %s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %.6f I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %lf fddd1 = %lf sub_int_r = %lf sub_int_a = %lf B_parallel = %lf B_perpendicular = %lf baseline_start = %lf baseline_center = %lf baseline_end = %lf alpha_start = %lf alpha_center = %lf alpha_end = %lf B_offset_start = %lf B_offset_center = %lf B_offset_end = %lf SLC_file = %s dtype = %.1s SLC_scale = %lf %s %s find_fft_length: ...data length n %d nfft %d geo2latlon: %8.3f %8.3f %8.0f OutOfSpaceUnable to find designated string...after %ld searches.. Unable to find designated string... CLOSEDNot an well formatted XML file...%d, %d %s (%d,%d,%d) %.12f<%s> %s <%s>%s In the brackets the numbers are (count, child, sibling)44X a!LLIwL x@  p`001p<>`?J0KP`[ \\^p_aaPbbHxRx\xfxpxzxxxxxxxxxxxxxxyyy$y.y8yByLyVy`yjyty~yyyyyyyyy{' `"p`)@___stack_chk_guardQr@___stderrp@dyld_stub_binderr(@_TIFFCloser0@_TIFFGetFieldr8@_TIFFOpenr@@_TIFFReadScanlinerH@_TIFFScanlineSizerP@_TIFFSetWarningHandlerrX@__TIFFfreer`@__TIFFmallocrh@___bzerorp@___exp10rx@___sincos_stretr@___sprintf_chkr@___stack_chk_failr@___strcat_chkr@___strcpy_chkr@_acosr@_atanr@_atan2r@_atofr@_atoir@_cosr@_exitr@_fcloser@_fgetcr@_fgetsr@_fopenr@_fprintfr@_fputcr@_freer@_fwriter@_mallocr@_powr@_printfr@_putcharr@_putsr@_sscanfr@_strcmpr@_strcpyr@_strlenr@_strncmp__mh_execute_headermainpwrite_xyz2plhgenidcfsassemble_treesUSAGEMAX_NSquroi_flagverboseop_lh2xyzut_sio_structrprmled#/orbslc56<>t_o2latlonprmsintdoubletreeDull_odatasio_structMEM_STREio_structtringecondsH~~s_big_endian_toa_xml_ieate2MJDebugopprat_numsoss3eate_childind_orcelengthdistanceunit_vectorfft_length3earch_treetrpace_counthow_treeio_flagwaplocateasign2_date2JDdintsoublebsгefix_strint_spacetreeTREE_SIZECHAR_SIZEAR_modeTR_sloped_slopead_poliet_flag `5`pp0`0@0`Ppp@ ```p0 t p  # - 2 h9Mt]Ygju`K}Pm 0K K0L@MK`L  M?`?$0"-L: $J?Vpa`Kp Kj  p" pp q@@   (N5pk@ J`jWo`Ylnv@_UU  ` $/<EN^m &+3<BJRZbk>?@ABCDEFGHIJMNOPQRSTUVWXYZ[\]^_`abcdefgh@KL>?@ABCDEFGHIJMNOPQRSTUVWXYZ[\]^_`abcdefg _MAX_CHAR_SIZE_MAX_TREE_SIZE_N_SAR_mode_STR_USAGE__mh_execute_header_assemble_trees_cat_nums_create_child_cross3_date2MJD_debug_die_dopp_find_distance_find_distance3_find_fft_length_find_length_find_unit_vector_force_slope_forced_slope_geo2latlon_get_double_get_int_get_prm_get_seconds_get_sio_struct_get_string_get_tree_is_big_endian__is_big_endian___itoa_xml_main_nodata_null_MEM_STR_null_sio_struct_plh2xyz_pop_led_pop_prm_prefix_str_print_space_print_tree_put_sio_struct_quad_pol_quiet_flag_roi_flag_search_tree_show_tree_sio_flag_space_count_str2dbs_str2double_str2ints_str_date2JD_strasign_strlocate_swap_verbose_write_orb_write_slc_xyz2plh_TIFFClose_TIFFGetField_TIFFOpen_TIFFReadScanline_TIFFScanlineSize_TIFFSetWarningHandler__TIFFfree__TIFFmalloc___bzero___exp10___sincos_stret___sprintf_chk___stack_chk_fail___stack_chk_guard___stderrp___strcat_chk___strcpy_chk_acos_atan_atan2_atof_atoi_cos_exit_fclose_fgetc_fgets_fopen_fprintf_fputc_free_fwrite_malloc_pow_printf_putchar_puts_sscanf_strcmp_strcpy_strlen_strncmpdyld_stub_binderGMTSAR_V5.7/preproc/S1A_preproc/include/lib_defs.h.orig000644 015705 000000 00000001026 13505462014 023632 0ustar00sandwellwheel000000 000000 /* definitions for xml code */ int space_count(char *); int strasign(char *, char *, int, int); int strlocate(char *, int, int); int create_child(tree *, char *, int *, int, int, int); int show_tree(tree *, int ,int); int get_tree(FILE *, tree *); int search_tree(tree *, char *, char *, int, int, int); int cat_nums(char *, char *); int str2ints(int *, char *); int itoa(int, char *, int); double date2MJD(int, int, int, int, int, double); int str_date2JD(char *, char *); double str2double(char *); int str2dbs(double *, char *); GMTSAR_V5.7/preproc/S1A_preproc/include/include000755 015705 000000 00000000000 13507242215 026213 2../S1A_preproc/includeustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/S1A_preproc/include/stateV.h000644 015705 000000 00000000270 13505462014 022372 0ustar00sandwellwheel000000 000000 /* include file for state vector */ typedef struct state_vector { int yr; int jd; double sec; double x; double y; double z; double vx; double vy; double vz; } state_vector; GMTSAR_V5.7/preproc/S1A_preproc/include/xmlC.h000644 015705 000000 00000000245 13505462014 022031 0ustar00sandwellwheel000000 000000 /* Include file for xml code written by Eric Xu, April 6, 2015 */ typedef struct tree{ char name[200]; int sibr; int sibl; int parent; int firstchild; }tree; GMTSAR_V5.7/preproc/S1A_preproc/include/lib_defs.h000644 015705 000000 00000001260 13505462014 022673 0ustar00sandwellwheel000000 000000 /* definitions for xml code */ #include"xmlC.h" #include int space_count(char *); int strasign(char *, char *, int, int); int strlocate(char *, int, int); int create_child(tree *, char *, int, int, int); int show_tree(tree *, int, int); int get_tree(FILE *, tree *, int); int search_tree(tree *, char *, char *, int, int, int); int cat_nums(char *, char *); int str2ints(int *, char *); double date2MJD(int, int, int, int, int, double); int str_date2JD(char *, char *); double str2double(char *); int str2dbs(double *, char *); int null_MEM_STR(); int assemble_trees(int, struct tree **, int, int, FILE *); #ifndef WIN32 int itoa(int, char *, int); #endif GMTSAR_V5.7/preproc/S1A_preproc/src_stitch/stitch_tops.c000644 015705 000000 00000014611 13505462014 024210 0ustar00sandwellwheel000000 000000 /* $Id$ */ /***************************************************************************************** * Program to stitch SLCs and PRMs of TOPS images together. * ***************************************************************************************** * Creator: Xiaohua(Eric) XU and David Sandwell * (Scripps Institution of *Oceanography) * Date: 03/01/2016 * ****************************************************************************************/ /***************************************************************************************** * Modification history: * ****************************************************************************************/ #include "PRM.h" #include "gmtsar.h" #include #include #include char *USAGE = "\n\nUSAGE: stitch_tops stem.in output_stem\n" "\noutput: stem.SLC stem.PRM\n" "\nnote: please put the files to stem.in in the order of time.\n" "\n make sure all images have same rng_samp_rate and PRF. \n"; int main(int argc, char **argv) { /* define variables */ FILE *stemin, *SLCin, *SLCout, *PRM; struct PRM prm1, prm2; char stem[100][200], tmp_str[200]; int ii, jj, nfile = 0, ntl = 0, nl, width, nl0, width2; int n_start, n_end, dr = 0; double prf, t1, t2; short *buf; if (argc != 3) die(USAGE, ""); /* read in the filelist */ if ((stemin = fopen(argv[1], "r")) == NULL) die("Couldn't open stem file: \n", argv[1]); while (fscanf(stemin, "%s", tmp_str) != EOF) { strcpy(stem[nfile], tmp_str); nfile++; } fclose(stemin); fprintf(stderr, "Number of Files to be stitched is %d \n", nfile); if (nfile < 2) die("At least two files are needed for stitching\n", ""); /* read in the first prarmeter file */ strcpy(tmp_str, stem[0]); strcat(tmp_str, ".PRM"); if ((PRM = fopen(tmp_str, "r")) == NULL) die("Couldn't open prm file: \n", tmp_str); null_sio_struct(&prm1); get_sio_struct(PRM, &prm1); fclose(PRM); t1 = prm1.clock_start + (prm1.ashift + prm1.sub_int_a) / prm1.prf / 86400.0; width = prm1.num_rng_bins; width2 = prm1.num_rng_bins; prf = prm1.prf; nl0 = prm1.num_lines; /* malloc buf for copying, make some extra space in case the width of two * images are different */ buf = (short *)malloc(width * 2 * sizeof(short) * 2); /* open the output SLC file */ strcpy(tmp_str, argv[2]); strcat(tmp_str, ".SLC"); if ((SLCout = fopen(tmp_str, "wb")) == NULL) die("Couldn't open output SLC file: \n", tmp_str); /* loop over all the images */ for (ii = 1; ii < nfile; ii++) { /* read in parameters for next image*/ strcpy(tmp_str, stem[ii]); strcat(tmp_str, ".PRM"); if ((PRM = fopen(tmp_str, "r")) == NULL) die("Couldn't open prm file: \n", tmp_str); null_sio_struct(&prm2); get_sio_struct(PRM, &prm2); fclose(PRM); t2 = prm2.clock_start + (prm2.ashift + prm2.sub_int_a) / prm2.prf / 86400.0; /* check whether the parameters match the first image */ if (prm2.fs != prm1.fs) die("Images have different range sampling rate... \n", ""); if (fabs(prm2.prf - prf) > 0.00001) die("Images have different PRF... \n", ""); /* open the previous SLC file */ strcpy(tmp_str, stem[ii - 1]); strcat(tmp_str, ".SLC"); if ((SLCin = fopen(tmp_str, "rb")) == NULL) die("Couldn't open input SLC file: \n", tmp_str); /* figure out how many lines to be written and check whether image has that * many lines */ nl = (floor)((t2 - t1) * 86400.0 * prf + 0.5); if (nl > nl0) die("Images do not have overlapped region \n", ""); n_start = ntl - (floor)((t1 - prm1.clock_start - (prm1.ashift + prm1.sub_int_a) / prf / 86400.0) * 86400.0 * prf + 0.5); n_end = floor((float)(nl0 + nl) / 2.0 + 0.5); /* write the SLC files */ fprintf(stderr, "Parsing %d lines...\n", n_start); for (jj = 1; jj <= n_start; jj++) fread(buf, sizeof(short), width2 * 2, SLCin); fprintf(stderr, "Writing Image %d, from line %d to line %d (%d)...\n", ii, 1 + n_start, n_end, width2); for (jj = 1 + n_start; jj <= n_end; jj++) { fread(buf, sizeof(short), width2 * 2, SLCin); if (dr < 0) { fwrite(&buf[-dr], sizeof(short), width * 2, SLCout); } else if (dr > 0) { fwrite(&buf[width * 2], sizeof(short), dr * 2, SLCout); fwrite(buf, sizeof(short), (width - dr) * 2, SLCout); } else { fwrite(buf, sizeof(short), width * 2, SLCout); } ntl++; } fprintf(stderr, "%d lines written...\n", n_end - n_start); dr = (int)((prm2.near_range - prm1.near_range) / (299792458.0 / prm2.fs / 2) + 0.5); fprintf(stderr, "%d diff in range...\n", dr); t1 = t2; nl0 = prm2.num_lines; width2 = prm2.num_rng_bins; fclose(SLCin); } /* open the last SLC file and write to the output SLC */ strcpy(tmp_str, stem[nfile - 1]); strcat(tmp_str, ".SLC"); if ((SLCin = fopen(tmp_str, "rb")) == NULL) die("Couldn't open input SLC file: \n", tmp_str); nl = prm2.num_lines; n_start = ntl - (floor)((t1 - prm1.clock_start - (prm1.ashift + prm1.sub_int_a) / prf / 86400.0) * 86400.0 * prf + 0.5); /* writing the last SLC */ fprintf(stderr, "Parsing %d lines...\n", n_start); for (jj = 1; jj <= n_start; jj++) fread(buf, sizeof(short), width2 * 2, SLCin); fprintf(stderr, "Writing Image %d, from line %d to line %d (%d)...\n", ii, 1 + n_start, nl, width2); for (jj = 1 + n_start; jj <= nl; jj++) { fread(buf, sizeof(short), width2 * 2, SLCin); if (dr < 0) { fwrite(&buf[-dr], sizeof(short), width * 2, SLCout); } else if (dr > 0) { fwrite(&buf[width * 2], sizeof(short), dr * 2, SLCout); fwrite(buf, sizeof(short), (width - dr) * 2, SLCout); } else { fwrite(buf, sizeof(short), width * 2, SLCout); } ntl++; } fprintf(stderr, "%d lines written...\n", nl - n_start); fclose(SLCout); /* prepare the output PRM */ strcpy(tmp_str, argv[2]); strcat(tmp_str, ".PRM"); if ((PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open output PRM file: \n", tmp_str); prm1.num_lines = ntl - ntl % 4; prm1.nrows = prm1.num_lines; prm1.num_valid_az = prm1.num_lines; prm1.SC_clock_stop = prm1.SC_clock_start + prm1.num_lines / prf / 86400; prm1.clock_stop = prm1.clock_start + prm1.num_lines / prf / 86400; strcpy(prm1.input_file, argv[2]); strcat(prm1.input_file, ".raw"); strcpy(prm1.led_file, argv[2]); strcat(prm1.led_file, ".LED"); strcpy(prm1.SLC_file, argv[2]); strcat(prm1.SLC_file, ".SLC"); put_sio_struct(prm1, PRM); fprintf(stderr, "PRM set for stitched SLC...\n"); fclose(PRM); free(buf); return 1; } GMTSAR_V5.7/preproc/S1A_preproc/src_stitch/Makefile000644 015705 000000 00000000700 13505462014 023133 0ustar00sandwellwheel000000 000000 include ../../../config.mk INCLUDES = -I$(GMTSARHOME)/gmtsar $(GMT_INC) CLIBS = $(GMTSAR) $(GMT_LIB) $(LALIBS) -lm stitch_tops: stitch_tops.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ stitch_tops.o $(CLIBS) merge_swath: merge_swath.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ merge_swath.o $(CLIBS) all: stitch_tops merge_swath install: $(INSTALL) stitch_tops $(bindir) $(INSTALL) merge_swath $(bindir) clean: rm -f *.o stitch_tops merge_swath tags core GMTSAR_V5.7/preproc/S1A_preproc/src_stitch/merge_swath.c000644 015705 000000 00000024657 13505462014 024165 0ustar00sandwellwheel000000 000000 /* $Id$ */ /***************************************************************************************** * Program to merge 3 subswaths of TOPS data. * ***************************************************************************************** * Creator: Xiaohua(Eric) XU * (Scripps Institution of Oceanography) * Date: *07/01/2016 * ****************************************************************************************/ /***************************************************************************************** * Modification history: * ****************************************************************************************/ #include "PRM.h" #include "gmtsar.h" #include #include #include char *USAGE = "\n\nUSAGE: merge_swath inputlist output [stem]\n" "\ninputlist example: " "F1/intf/2015036_2015060/S1A_20150609.PRM:F1/intf/2015036_2015060/" "phasefilt.grd\n" " " "F2/intf/2015036_2015060/S1A_20150609.PRM:F2/intf/2015036_2015060/" "phasefilt.grd\n" " " "F3/intf/2015036_2015060/S1A_20150609.PRM:F3/intf/2015036_2015060/" "phasefilt.grd\n" "\nnote: use the slave PRM which contains the shift information\n" "\noutput: output.grd [stem.PRM]\n" "\nnote: please put the files to stem.in in the order of swath numbers.\n" "\n make sure all images have same num_rng_bin\n"; void fix_prm(struct PRM *p) { double delr; delr = SOL / p->fs / 2.0; /* these are from prm2gips */ p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift - 1) * delr; p->SC_clock_start = p->SC_clock_start + p->ashift / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->clock_start = p->clock_start + p->ashift / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); p->clock_stop = p->clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } int main(int argc, char **argv) { /* define variables */ FILE *stemin = NULL, *PRM = NULL; struct PRM prm1, prm2, prm3; char stem[3][500], grid[3][500], tmp_str[200]; char *str2; int nfile = 0, head1, head2, head3 = 0, minh, maxy, ovl12, ovl23 = 0, ii, jj, kk, k, n1, n2; double incx, incy, wesn[4], inc[2]; double c_speed = 299792458; double dt; struct GMT_GRID *G1 = NULL, *G2 = NULL, *G3 = NULL; struct GMT_GRID *GOUT = NULL; if (argc != 4 && argc != 3) die(USAGE, ""); /* read in the filelist */ if ((stemin = fopen(argv[1], "r")) == NULL) die("Couldn't open inputfile list: \n", argv[1]); while (fscanf(stemin, "%s", tmp_str) != EOF) { strcpy(stem[nfile], tmp_str); nfile++; } fclose(stemin); if (nfile > 3 || nfile < 2) die("Incorrect input filelist, should contain 2 or 3 files\n", ""); fprintf(stderr, "Number of Files to be merged is %d \n", nfile); /* sperate the string for PRM and grid names*/ str2 = strchr(stem[0], ':'); strcpy(grid[0], &str2[1]); str2[0] = '\0'; str2 = strchr(stem[1], ':'); strcpy(grid[1], &str2[1]); str2[0] = '\0'; if (nfile == 3) { str2 = strchr(stem[2], ':'); strcpy(grid[2], &str2[1]); str2[0] = '\0'; } // printf("%s\n%s\n%s\n\n",stem[0],stem[1],stem[2]); // printf("%s\n%s\n%s\n",grid[0],grid[1],grid[2]); /* read in the PRM files */ if ((PRM = fopen(stem[0], "r")) == NULL) die("Couldn't open PRM file: \n", stem[0]); null_sio_struct(&prm1); get_sio_struct(PRM, &prm1); // fix_prm(&prm1); fclose(PRM); if ((PRM = fopen(stem[1], "r")) == NULL) die("Couldn't open PRM file: \n", stem[1]); null_sio_struct(&prm2); get_sio_struct(PRM, &prm2); // fix_prm(&prm2); fclose(PRM); if (prm1.prf != prm2.prf) die("Image PRFs are not consistent", ""); if (prm1.fs != prm2.fs) die("Image range sampling rates are not consistent", ""); if (nfile == 3) { if ((PRM = fopen(stem[2], "r")) == NULL) die("Couldn't open PRM file: \n", stem[2]); null_sio_struct(&prm3); get_sio_struct(PRM, &prm3); // fix_prm(&prm3); fclose(PRM); if (prm1.prf != prm3.prf) die("Image PRFs are not consistent", ""); if (prm1.fs != prm3.fs) die("Image range sampling rates are not consistent", ""); } /* read in the grid files */ void *API = NULL; // GMT API control structure if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; printf("Reading in the grids...\n"); if ((G1 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, grid[0], NULL)) == NULL) die("cannot open grids", grid[0]); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, grid[0], G1) == NULL) return EXIT_FAILURE; if ((G2 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, grid[1], NULL)) == NULL) die("cannot open grids", grid[0]); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, grid[1], G2) == NULL) return EXIT_FAILURE; if (nfile == 3) { if ((G3 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, grid[2], NULL)) == NULL) die("cannot open grids", grid[0]); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, grid[2], G3) == NULL) return EXIT_FAILURE; } /* compute coefficients neede for merging*/ incx = (G1->header->inc[GMT_X] + G2->header->inc[GMT_X]) / 2; incy = (G1->header->inc[GMT_Y] + G2->header->inc[GMT_Y]) / 2; if (nfile == 3) { incx = (G1->header->inc[GMT_X] + G2->header->inc[GMT_X] + G3->header->inc[GMT_X]) / 3; incy = (G1->header->inc[GMT_Y] + G2->header->inc[GMT_Y] + G3->header->inc[GMT_Y]) / 3; } head1 = 0; head2 = (int)round(((prm2.clock_start - prm1.clock_start) * 86400.0 * prm1.prf) / incy); if (nfile == 3) head3 = (int)round((prm3.clock_start - prm1.clock_start) * 86400.0 * prm1.prf / incy); minh = MIN(head1, head2); if (nfile == 3) minh = MIN(minh, head3); head1 = head1 - minh; head2 = head2 - minh; if (nfile == 3) head3 = head3 - minh; maxy = MAX(G1->header->ny + head1, G2->header->ny + head2); if (nfile == 3) maxy = MAX(maxy, G3->header->ny + head3); maxy = maxy + 1; inc[GMT_X] = incx; inc[GMT_Y] = incy; ovl12 = G1->header->nx - (int)round((prm2.near_range - prm1.near_range) / (c_speed / prm1.fs / 2) / incx); if (nfile == 3) ovl23 = G2->header->nx - (int)round((prm3.near_range - prm2.near_range) / (c_speed / prm1.fs / 2) / incx); wesn[GMT_XLO] = 0.0; wesn[GMT_YLO] = 0.0; // minh*incy; wesn[GMT_YHI] = (int)round(maxy * incy); //(maxy+minh-1)*incy; wesn[GMT_XHI] = (G1->header->nx + G2->header->nx - ovl12 - 1) * incx; if (nfile == 3) wesn[GMT_XHI] = wesn[GMT_XHI] + (G3->header->nx - ovl23 - 1) * incx; wesn[GMT_XHI] = (int)round(wesn[GMT_XHI]); // printf("%f,%f,%f,%f,%f,%f\n",inc[0],inc[1],wesn[0],wesn[1],wesn[2],wesn[3]); // printf("%d,%d,%d,%d,%d\n",head1,head2,head3,ovl12,ovl23); /* write a new grid file */ printf("Writing the grid files..Size(%dx%d)...\n", (int)round((wesn[GMT_XHI] - wesn[GMT_XLO]) / inc[GMT_X]), (int)round((wesn[GMT_YHI] - wesn[GMT_YLO]) / inc[GMT_Y])); if ((GOUT = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate output grid", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "merged grid", GOUT)) die("could not set title", ""); // printf("%d,%d,%f,%f\n",GOUT->header->nx,GOUT->header->ny,GOUT->header->inc[GMT_X],GOUT->header->inc[GMT_Y]); for (ii = 0; ii < GOUT->header->ny; ii++) for (jj = 0; jj < GOUT->header->nx; jj++) GOUT->data[ii * GOUT->header->nx + jj] = (float)NAN; head1 = GOUT->header->ny - G1->header->ny - head1; head2 = GOUT->header->ny - G2->header->ny - head2; if (nfile == 3) head3 = GOUT->header->ny - G3->header->ny - head3; n1 = (int)ceil((-(float)prm2.rshift + (float)prm2.first_sample + 150.0) / incx); if (nfile == 3) n2 = (int)ceil((-(float)prm3.rshift + (float)prm3.first_sample + 150.0) / incx); if (n1 < 10) n1 = 10; if (nfile == 3) if (n2 < 10) n2 = 10; // printf("%d,%d\n",n1,n2); for (ii = head1; ii < G1->header->ny + head1; ii++) { for (jj = 0; jj < G1->header->nx - (ovl12 - n1); jj++) { kk = ii * GOUT->header->nx + jj; k = (ii - head1) * G1->header->nx + jj; GOUT->data[kk] = G1->data[k]; } } if (nfile != 3) { for (ii = head2; ii < G2->header->ny + head2; ii++) { for (jj = G1->header->nx - (ovl12 - n1); jj < GOUT->header->nx; jj++) { kk = ii * GOUT->header->nx + jj; k = (ii - head2) * G2->header->nx + jj - G1->header->nx + ovl12; GOUT->data[kk] = G2->data[k]; } } } if (nfile == 3) { for (ii = head2; ii < G2->header->ny + head2; ii++) { for (jj = G1->header->nx - (ovl12 - n1); jj < G1->header->nx + G2->header->nx - ovl12 - 1 - (ovl23 - n2); jj++) { kk = ii * GOUT->header->nx + jj; k = (ii - head2) * G2->header->nx + jj - G1->header->nx + ovl12 - 1; GOUT->data[kk] = G2->data[k]; } } for (ii = head3; ii < G3->header->ny + head3; ii++) { for (jj = G1->header->nx + G2->header->nx - ovl12 - 1 - (ovl23 - n2); jj < GOUT->header->nx; jj++) { kk = ii * GOUT->header->nx + jj; k = (ii - head3) * G3->header->nx + jj - (G1->header->nx + G2->header->nx - ovl12 - 1) + ovl23 - 1; GOUT->data[kk] = G3->data[k]; } } } strcpy(tmp_str, argv[2]); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, tmp_str, GOUT)) die("Failed to write output grid", ""); if (argc == 4) { strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open PRM file: \n", tmp_str); prm1.num_lines = (int)round(maxy * incy); prm1.nrows = prm1.num_lines; prm1.num_valid_az = prm1.num_lines; prm1.num_rng_bins = (int)round(GOUT->header->nx * incx); prm1.bytes_per_line = prm1.num_rng_bins * 4; prm1.good_bytes = prm1.bytes_per_line; dt = (-minh * incy) / prm1.prf / 86400.0; prm1.SC_clock_start = prm1.SC_clock_start - dt; prm1.clock_start = prm1.clock_start - dt; prm1.SC_clock_stop = prm1.SC_clock_start + prm1.num_lines / prm1.prf / 86400.0; prm1.clock_stop = prm1.clock_start + prm1.num_lines / prm1.prf / 86400.0; put_sio_struct(prm1, PRM); fclose(PRM); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; return (EXIT_SUCCESS); } GMTSAR_V5.7/preproc/S1A_preproc/src_assembly/Makefile000644 015705 000000 00000000575 13505462014 023466 0ustar00sandwellwheel000000 000000 include ../../../config.mk INCLUDES = -I../include -I$(GMTSARHOME)/gmtsar -I$(TIFF_INC) $(GMT_INC) CLIBS = -L../lib -lxmlC $(GMTSAR) $(GMT_LIB) $(LALIBS) -L$(TIFF_LIB) -ltiff -lm assemble_tops: assemble_tops.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ assemble_tops.o $(CLIBS) all: assemble_tops install: $(INSTALL) assemble_tops $(bindir) clean: rm -f *.o assemble_tops tags core GMTSAR_V5.7/preproc/S1A_preproc/src_assembly/assemble_tops.c000644 015705 000000 00000035627 13505462014 025040 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 10/25/2016 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * ***************************************************************************/ #include "lib_defs.h" #include "lib_functions.h" #include "tiffio.h" #include #include #include #include char *USAGE = "\nUsage: assemble_tops azi_1 azi_2 name_stem1 name_stem2 ... output_stem\n" "\nExample: assemble_tops 1685 9732 " "s1a-iw1-slc-vv-20150706t135900-20150706t135925-006691-008f28-001 " "s1a-iw1-slc-vv-20150706t135925-20150706t135950-006691-008f28-001 " "s1a-iw1-slc-vv-20150706t135900-20150706t135950-006691-008f28-001\n" "\nOutput:s1a-iw1-slc-vv-20150706t135900-20150706t135950-006691-008f28-001." "xml " "s1a-iw1-slc-vv-20150706t135900-20150706t135950-006691-008f28-001.tiff\n\n" "\nNote: output files are bursts that covers area between azi_1 and azi_2, " "set them to 0s to output all bursts\n"; int edit_tree(int, int, struct tree **, int, int, int *, int *); int assemble_tifs(TIFF **, TIFF *, int, int, int, int); int main(int argc, char **argv) { FILE *XML_FILE = NULL, *XML_OUTPUT = NULL; TIFF **tif, *tif_out; int na, nc, ncmx, nlmx, ii, nfiles, ch; char tmp_str[2000]; struct tree **xml_tree; float azi_1, azi_2; int nb_start, nb_end, lpb; if (argc < 5) { fprintf(stderr, "%s", USAGE); die("Error: Incorrect input...", "\n"); } azi_1 = atof(argv[1]); azi_2 = atof(argv[2]); if (azi_1 >= azi_2 && !(azi_1 == 0 && azi_2 == 0)) { die("azi_2 has to be larger than azi_1", ""); } nfiles = argc - 4; null_MEM_STR(); xml_tree = (struct tree **)malloc(nfiles * sizeof(struct tree *)); TIFFSetWarningHandler(NULL); // figure out the sizes nlmx = 0; for (ii = 0; ii < nfiles; ii++) { na = 0; nc = 0; ncmx = 0; strcpy(tmp_str, argv[ii + 3]); strcat(tmp_str, ".xml"); if ((XML_FILE = fopen(tmp_str, "r")) == NULL) die("Couldn't open xml file: \n", tmp_str); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++na; if (nc > ncmx) ncmx = nc; nc = 0; } if (na > nlmx) nlmx = na; } fclose(XML_FILE); } // read in xmls and duplicate them in xml_tree[0] printf("Files to be assembled is %d (x %d lines max)\n", nfiles, nlmx); xml_tree[0] = (struct tree *)malloc(nlmx * nfiles * 5 * sizeof(struct tree)); for (ii = 1; ii < nfiles; ii++) xml_tree[ii] = &xml_tree[0][nlmx * 5 * ii]; for (ii = 0; ii < nfiles; ii++) { strcpy(tmp_str, argv[ii + 3]); strcat(tmp_str, ".xml"); if ((XML_FILE = fopen(tmp_str, "r")) == NULL) die("Couldn't open xml file: \n", tmp_str); get_tree(XML_FILE, xml_tree[ii], 1); fclose(XML_FILE); } for (ii = 1; ii < nfiles; ii++) { xml_tree[ii] = (struct tree *)malloc(nlmx * 5 * sizeof(struct tree)); strcpy(tmp_str, argv[ii + 3]); strcat(tmp_str, ".xml"); if ((XML_FILE = fopen(tmp_str, "r")) == NULL) die("Couldn't open xml file: \n", tmp_str); get_tree(XML_FILE, xml_tree[ii], 1); fclose(XML_FILE); } // modify xml_tree[0] to get parameters from other xml_trees edit_tree(nfiles, nlmx, xml_tree, azi_1, azi_2, &nb_start, &nb_end); printf("Output burst from #%d to #%d ...\n", nb_start, nb_end); strcpy(tmp_str, argv[argc - 1]); strcat(tmp_str, ".xml"); if ((XML_OUTPUT = fopen(tmp_str, "w")) == NULL) die("Couldn't open xml file: \n", tmp_str); // output the tree in the fromat of xml assemble_trees(nfiles, xml_tree, 0, 0, XML_OUTPUT); fclose(XML_OUTPUT); printf("XML file written...\n"); tif = (TIFF **)malloc(nfiles * sizeof(TIFF *)); for (ii = 0; ii < nfiles; ii++) { strcpy(tmp_str, argv[ii + 3]); strcat(tmp_str, ".tiff"); if ((tif[ii] = TIFFOpen(tmp_str, "rb")) == NULL) die("Couldn't open tiff file: \n", tmp_str); } strcpy(tmp_str, argv[argc - 1]); strcat(tmp_str, ".tiff"); if ((tif_out = TIFFOpen(tmp_str, "wb")) == NULL) die("Couldn't open tiff file: \n", tmp_str); search_tree(xml_tree[0], "/product/swathTiming/linesPerBurst/", tmp_str, 1, 0, 1); lpb = (int)str2double(tmp_str); assemble_tifs(tif, tif_out, nfiles, nb_start, nb_end, lpb); for (ii = 0; ii < nfiles; ii++) TIFFClose(tif[ii]); TIFFClose(tif_out); free(tif); for (ii = 1; ii < nfiles; ii++) free(xml_tree[ii]); free(xml_tree); return (1); } int assemble_tifs(TIFF **tif, TIFF *tif_out, int nfiles, int nb_start, int nb_end, int lpb) { int ii, jj; uint32 width, *height, height_all, ni = 0, nii, ni2 = 0; short *buf; uint16 s = 0; TIFFSetWarningHandler(NULL); TIFFGetField(tif[0], TIFFTAG_IMAGEWIDTH, &width); height_all = 0; height = (uint32 *)malloc(sizeof(uint32) * nfiles); for (ii = 0; ii < nfiles; ii++) { TIFFGetField(tif[ii], TIFFTAG_IMAGELENGTH, &height[ii]); height_all = height_all + height[ii]; } TIFFSetField(tif_out, TIFFTAG_IMAGEWIDTH, width); TIFFSetField(tif_out, TIFFTAG_IMAGELENGTH, (nb_end - nb_start + 1) * lpb); TIFFSetField(tif_out, TIFFTAG_BITSPERSAMPLE, sizeof(short) * 8 * 2); TIFFSetField(tif_out, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_COMPLEXINT); TIFFSetField(tif_out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); buf = (short *)_TIFFmalloc(TIFFScanlineSize(tif_out) * 2); // make some extra space in case the width differ for other images printf("Writing TIFF image Width(%d) X Height(%d)...\n", width, (nb_end - nb_start + 1) * lpb); for (ii = 0; ii < nfiles; ii++) { for (jj = 0; jj < height[ii]; jj++) { if (ni >= lpb * (nb_start - 1) && ni < lpb * nb_end) { nii = jj; TIFFReadScanline(tif[ii], buf, nii, s); if (TIFFFlushData(tif_out)) TIFFWriteScanline(tif_out, buf, ni2, s); ni2++; } ni++; } } _TIFFfree(buf); free(height); return (1); } int add_index(struct tree *T, int ct, int ii) { int i; // printf("hahaha %d\n",ii); for (i = 0; i < ct; i++) { if (T[i].parent != -1) T[i].parent = T[i].parent + ii; if (T[i].sibl != -1) T[i].sibl = T[i].sibl + ii; if (T[i].sibr != -1) T[i].sibr = T[i].sibr + ii; if (T[i].firstchild != -1) T[i].firstchild = T[i].firstchild + ii; } // printf("hahaha\n"); return (1); } double time2double(char *str) { double k; char s_name[200], s_out[200]; cat_nums(s_name, str); str_date2JD(s_out, s_name); k = str2double(s_out); return (k); } int add_branch(struct tree **T, int nlmx, int qq, char *str, char *term, int mode) { double t1, t2; int ii1, jj1, kk1, ct, nn1, ii2, jj2, kk2, nn2; char tmp_c[60000]; if (mode == 1) { // consecutive ii1 = search_tree(T[0], str, tmp_c, 3, 0, 1); nn1 = (int)str2double(tmp_c); kk1 = T[0][ii1].firstchild; for (jj1 = 1; jj1 < nn1; jj1++) kk1 = T[0][kk1].sibr; ii2 = search_tree(T[qq], str, tmp_c, 3, 0, 1); T[0][kk1].sibr = T[0][ii2 + nlmx * qq * 5].firstchild; nn2 = (int)str2double(tmp_c); kk2 = T[0][ii2 + nlmx * qq * 5].firstchild; for (jj2 = 1; jj2 < nn2; jj2++) { T[0][kk2].parent = ii1; kk2 = T[0][kk2].sibr; } T[0][kk2].parent = ii1; sprintf(tmp_c, "%s count=\"%d\"", term, nn1 + nn2); strcpy(T[0][ii1].name, tmp_c); } else if (mode == 2) { // in order of time, may have overlap ii1 = search_tree(T[0], str, tmp_c, 3, 0, 1); nn1 = (int)str2double(tmp_c); kk1 = T[0][ii1].firstchild; for (jj1 = 1; jj1 < nn1; jj1++) kk1 = T[0][kk1].sibr; t1 = time2double(T[0][T[0][T[0][kk1].firstchild].firstchild].name); ii2 = search_tree(T[qq], str, tmp_c, 3, 0, 1); nn2 = (int)str2double(tmp_c); // printf("%d %lf\n",nn1,t1); t2 = t1 - 1; ct = 0; kk2 = T[0][ii2 + nlmx * qq * 5].firstchild; t2 = time2double(T[0][T[0][T[0][kk2].firstchild].firstchild].name); while (t2 - 1e-6 / 86400.0 < t1) { kk2 = T[0][kk2].sibr; t2 = time2double(T[0][T[0][T[0][kk2].firstchild].firstchild].name); ct++; } T[0][kk1].sibr = kk2; kk2 = T[0][ii2 + nlmx * qq * 5].firstchild; for (jj2 = 1; jj2 < nn2 - ct; jj2++) { T[0][kk2].parent = ii1; kk2 = T[0][kk2].sibr; } T[0][kk2].parent = ii1; sprintf(tmp_c, "%s count=\"%d\"", term, nn1 + nn2 - ct); strcpy(T[0][ii1].name, tmp_c); } else if (mode == 3) { // same as mode 2, but time comes in second child ii1 = search_tree(T[0], str, tmp_c, 3, 0, 1); nn1 = (int)str2double(tmp_c); kk1 = T[0][ii1].firstchild; for (jj1 = 1; jj1 < nn1; jj1++) kk1 = T[0][kk1].sibr; t1 = time2double(T[0][T[0][T[0][T[0][kk1].firstchild].sibr].firstchild].name); ii2 = search_tree(T[qq], str, tmp_c, 3, 0, 1); nn2 = (int)str2double(tmp_c); // printf("%d %lf\n",nn1,t1); t2 = t1 - 1; ct = 0; kk2 = T[0][ii2 + nlmx * qq * 5].firstchild; t2 = time2double(T[0][T[0][T[0][T[0][kk2].firstchild].sibr].firstchild].name); while (t2 - 1e-6 / 86400.0 < t1) { kk2 = T[0][kk2].sibr; t2 = time2double(T[0][T[0][T[0][T[0][kk2].firstchild].sibr].firstchild].name); ct++; } // printf("%d %lf\n",nn2,t2); T[0][kk1].sibr = kk2; kk2 = T[0][ii2 + nlmx * qq * 5].firstchild; for (jj2 = 1; jj2 < nn2 - ct; jj2++) { T[0][kk2].parent = ii1; kk2 = T[0][kk2].sibr; } T[0][kk2].parent = ii1; sprintf(tmp_c, "%s count=\"%d\"", term, nn1 + nn2 - ct); strcpy(T[0][ii1].name, tmp_c); } return (1); } int edit_leaf(struct tree **T, int qq, char *str, int mode) { int ii, jj; double x1, x2; char tmp_c[200]; if (mode == 1) { // add int numbers ii = search_tree(T[0], str, tmp_c, 1, 0, 1); x1 = str2double(tmp_c); jj = search_tree(T[qq], str, tmp_c, 1, 0, 1); x2 = str2double(tmp_c); sprintf(tmp_c, "%d", (int)(x1 + x2 + 1e-6)); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); } else if (mode == 2) { // replace with the second ii = search_tree(T[0], str, tmp_c, 1, 0, 1); jj = search_tree(T[qq], str, tmp_c, 1, 0, 1); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); } return (1); } int edit_tree(int nfiles, int nlmx, struct tree **T, int azi_1, int azi_2, int *nb_start, int *nb_end) { /* note this is only editing firstchild and sibr, thus its not really getting * a good tree structure */ int ct, qq, i, ii, jj, lpb; char tmp_c[60000]; double dta, t0, t1, t2; // char s_name[200],s_out[200]; // double t1,t2; ct = 0; while (T[0][ct].sibr != -1 || T[0][ct].firstchild != -1) { if (T[0][ct].sibr != -1) ct = T[0][ct].sibr; else ct = T[0][ct].firstchild; } // printf("Original(first) xml has %d tree elements.\n",ct); if (nfiles > 1) { for (qq = 1; qq < nfiles; qq++) { ct = 0; while (T[qq][ct].sibr != -1 || T[qq][ct].firstchild != -1) { if (T[qq][ct].sibr != -1) ct = T[qq][ct].sibr; else ct = T[qq][ct].firstchild; } add_index(&T[0][nlmx * qq * 5], ct + 1, nlmx * qq * 5); } /* start editing the useful information to create one xml_tree */ for (qq = 1; qq < nfiles; qq++) { /* start editing trunks of parameters */ // burst List add_branch(T, nlmx, qq, "/product/swathTiming/burstList/", "burstList", 1); // orbit List add_branch(T, nlmx, qq, "/product/generalAnnotation/orbitList/", "orbitList", 2); // dc estimate add_branch(T, nlmx, qq, "/product/dopplerCentroid/dcEstimateList/", "dcEstimateList", 2); // azimuth fm rate add_branch(T, nlmx, qq, "/product/generalAnnotation/azimuthFmRateList/", "azimuthFmRateList", 2); // antenna pattern list add_branch(T, nlmx, qq, "/product/antennaPattern/antennaPatternList/", "antennaPatternList", 3); // geolocation grid, not used in our program, but anyway add_branch(T, nlmx, qq, "/product/geolocationGrid/geolocationGridPointList/", "geolocationGridPointList", 2); /* start editing other individual parameters */ edit_leaf(T, qq, "/product/imageAnnotation/imageInformation/numberOfLines/", 1); edit_leaf(T, qq, "/product/adsHeader/stopTime/", 2); } } /* edit on how many burst to output */ search_tree(T[0], "/product/swathTiming/linesPerBurst/", tmp_c, 1, 0, 1); lpb = (int)str2double(tmp_c); ii = search_tree(T[0], "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); ct = (int)str2double(tmp_c); if (!(azi_1 == 0 && azi_2 == 0)) { printf("Editing burst output based on input azimuth references...\n"); search_tree(T[0], "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dta = str2double(tmp_c); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 2, 4, 1); t0 = str2double(tmp_c); t2 = t0; t1 = t0; *nb_start = -1; *nb_end = -1; for (i = 2; i <= ct; i++) { search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 2, 4, i); t2 = str2double(tmp_c); if ((t2 - t0) * 86400.0 / dta >= azi_1 && (t1 - t0) * 86400.0 / dta <= azi_1) *nb_start = i - 1; if ((t2 - t0) * 86400.0 / dta >= azi_2 && (t1 - t0) * 86400.0 / dta <= azi_2) *nb_end = i - 1; t1 = t2; } if (*nb_start == -1) *nb_start = 1; if (*nb_end == -1) *nb_end = ct; ii = search_tree(T[0], "/product/imageAnnotation/imageInformation/numberOfLines/", tmp_c, 1, 0, 1); sprintf(tmp_c, "%d", (int)(-(*nb_start) + (*nb_end) + 1) * lpb); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); ii = search_tree(T[0], "/product/imageAnnotation/imageInformation/productFirstLineUtcTime/", tmp_c, 1, 0, 1); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 1, 4, *nb_start); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); ii = search_tree(T[0], "/product/adsHeader/startTime/", tmp_c, 1, 0, 1); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 1, 4, *nb_start); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); if (*nb_end != ct) { ii = search_tree(T[0], "/product/imageAnnotation/imageInformation/productLastLineUtcTime/", tmp_c, 1, 0, 1); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 1, 4, *nb_start); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 1, 4, *nb_end + 1); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); ii = search_tree(T[0], "/product/adsHeader/stopTime/", tmp_c, 1, 0, 1); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 1, 4, *nb_end + 1); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); } ii = search_tree(T[0], "/product/swathTiming/burstList/burst/", tmp_c, 1, 4, *nb_end); T[0][ii].sibr = -1; ii = search_tree(T[0], "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); jj = search_tree(T[0], "/product/swathTiming/burstList/burst/", tmp_c, 1, 4, *nb_start); T[0][ii].firstchild = jj; ii = search_tree(T[0], "/product/swathTiming/burstList/", tmp_c, 1, 0, 1); sprintf(tmp_c, "%s count=\"%d\"", "burstList", *nb_end - *nb_start + 1); strcpy(T[0][ii].name, tmp_c); } else { *nb_start = 1; *nb_end = ct; } return (1); } GMTSAR_V5.7/preproc/TSX_preproc/Makefile000644 015705 000000 00000000627 13505462014 021070 0ustar00sandwellwheel000000 000000 include ../../config.mk # # make all the files # DIRS = lib src all: $(LN_S) -f ../S1A_preproc/include include $(LN_S) -f ../S1A_preproc/lib lib for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done uninstall: (cd src; $(MAKE) uninstall) clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done spotless: clean GMTSAR_V5.7/preproc/TSX_preproc/include000755 015705 000000 00000000000 13505462014 024661 2../S1A_preproc/includeustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/TSX_preproc/lib000755 015705 000000 00000000000 13505462014 023127 2../S1A_preproc/libustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/TSX_preproc/src/000755 015705 000000 00000000000 13507242234 020214 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/TSX_preproc/src/make_slc_tsx.c000644 015705 000000 00000033117 13505462014 023037 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 07/09/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include #include #include #include int pop_prm(struct PRM *, tree *, char *); int pop_led(tree *, state_vector *); int write_orb(state_vector *sv, FILE *fp, int); int write_slc(FILE *, FILE *, int, int); static int is_big_endian() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } #ifndef __CYGWIN__ static inline unsigned short bswap_16(unsigned short x) { return (x >> 8) | (x << 8); } static inline unsigned int bswap_32(unsigned int x) { return (bswap_16(x & 0xffff) << 16) | (bswap_16(x >> 16)); } /*static inline unsigned long long bswap_64(unsigned long long x) { return (((unsigned long long)bswap_32(x&0xffffffffull))<<32) | (bswap_32(x>>32)); }*/ #endif char *USAGE = "\n\nUsage: make_slc_tsx name_of_xml_file name_of_image_file name_output\n" "\nExample: make_slc_s1a " "TSX1_SAR__SSC______SM_S_SRA_20120615T162057_20120615T162105.xml " "IMAGE_HH_SRA_strip_007.cos TSX_HH_20120615\n" "\nOutput: TSX_HH_20120615.SLC TSX_HH_20120615.PRM TSX_HH_20120615.LED\n"; int main(int argc, char **argv) { FILE *XML_FILE, *OUTPUT_PRM, *OUTPUT_SLC, *OUTPUT_LED, *INPUT_SLC; char tmp_str[200]; struct PRM prm; tree *xml_tree; state_vector sv[200]; int rows, cols; int ch, n = 0, nc = 0, nlmx = 0; if (argc < 4) die(USAGE, ""); // find the number of lines and the maximum line length of the xml file if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } xml_tree = (struct tree *)malloc(n * 5 * sizeof(struct tree)); fclose(XML_FILE); // generate the xml tree if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_tree(XML_FILE, xml_tree, 0); fclose(XML_FILE); // show_tree(xml_tree,0,0); // initiate the prm null_sio_struct(&prm); // generate the PRM file pop_prm(&prm, xml_tree, argv[3]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); // generate the LED file n = pop_led(xml_tree, sv); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // generate the SLC file if ((INPUT_SLC = fopen(argv[2], "rb")) == NULL) die("Couldn't open data file: \n", argv[2]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open tiff file: \n", tmp_str); search_tree(xml_tree, "/level1Product/productInfo/imageDataInfo/imageRaster/numberOfColumns/", tmp_str, 1, 0, 1); cols = (int)str2double(tmp_str); search_tree(xml_tree, "/level1Product/productInfo/imageDataInfo/imageRaster/numberOfRows/", tmp_str, 1, 0, 1); rows = (int)str2double(tmp_str); write_slc(INPUT_SLC, OUTPUT_SLC, rows, cols); fclose(INPUT_SLC); fclose(OUTPUT_SLC); // TIFFClose(TIFF_FILE); // fclose(OUTPUT_SLC); } int write_slc(FILE *input, FILE *slc, int rows, int cols) { int i, j, tj, k, tk, x; short *buf = malloc(sizeof(unsigned short) * (cols + 2) * 2); int bib, rsri, rs, as, bi, rtnb, tnl, asri, asfv, aslv, rsfv, rslv; i = is_big_endian(); if (i == 1) { printf("System is Big Endian...\n"); } else { printf("System is Little Endian...\n"); } printf("Writing SLC..Image Size: %d X %d...\n", cols, rows); // fread(buf,sizeof(short),(cols+2)*2,input); j = 0; tj = rows; while (j < tj) { // first line fread(&bib, sizeof(int), 1, input); fread(&rsri, sizeof(int), 1, input); fread(&rs, sizeof(int), 1, input); fread(&as, sizeof(int), 1, input); fread(&bi, sizeof(int), 1, input); fread(&rtnb, sizeof(int), 1, input); fread(&tnl, sizeof(int), 1, input); fread(buf, sizeof(short), (cols - 5) * 2, input); // second line fread(buf, sizeof(short), 4, input); fread(&asri, sizeof(int), 1, input); fread(buf, sizeof(short), (cols - 1) * 2, input); // third line fread(buf, sizeof(short), 4, input); fread(&asfv, sizeof(int), 1, input); fread(buf, sizeof(short), (cols - 1) * 2, input); // fourth line fread(buf, sizeof(short), 4, input); fread(&aslv, sizeof(int), 1, input); fread(buf, sizeof(short), (cols - 1) * 2, input); if (i != 1) { bib = bswap_32(bib); rsri = bswap_32(rsri); rs = bswap_32(rs); as = bswap_32(as); bi = bswap_32(bi); rtnb = bswap_32(rtnb); tnl = bswap_32(tnl); asri = bswap_32(asri); asfv = bswap_32(asfv); aslv = bswap_32(aslv); } // printf("Burst Info: \n\tBytes in Burst: %u\n\tRange Samples: // %u\n\tAzimuth Samples: %u\n\tRange Total Number of Bytes: %u\n\tTotal // Number of Lines: %u\n",bib,rs,as,rtnb,tnl); printf("ASRI: %u ASFV: %u // ASLV: %u\n",asri,asfv,aslv); // printf("Writing %u Bytes to SLC...\n",(tnl-4)*(rtnb-8)); if (i != 1) { printf("Swaping Bytes...\n"); } tk = tnl - 4; for (k = 0; k < tk; k++) { fread(&rsfv, sizeof(int), 1, input); fread(&rslv, sizeof(int), 1, input); fread(buf, sizeof(short), cols * 2, input); if (i != 1) { // printf("RSFV: %u RSLV: %u\n",bswap_32(rsfv),bswap_32(rslv)); for (x = 0; x < cols * 2; x++) { buf[x] = (short)bswap_16(buf[x]); } } fwrite(buf, sizeof(short), cols * 2, slc); } j = j + tk; } free(buf); return (1); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 1e4) / 1e4 - trunc((sv[0].sec) * 1e4) / 1e4; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.3lf %.3lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led(tree *xml_tree, state_vector *sv) { int i, count; char tmp_c[200]; double tmp_d; search_tree(xml_tree, "/level1Product/platform/orbit/orbitHeader/numStateVectors/", tmp_c, 1, 0, 1); count = (int)str2double(tmp_c); for (i = 0; i < count; i++) { search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/timeUTC/", tmp_c, 2, 4, i + 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/timeUTC/", tmp_c, 1, 4, i + 1); tmp_c[4] = '\0'; sv[i].yr = (int)(str2double(tmp_c)); sv[i].jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); sv[i].sec = (tmp_d - trunc(tmp_d)) * 86400; search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/posX/", tmp_c, 1, 4, i + 1); sv[i].x = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/posY/", tmp_c, 1, 4, i + 1); sv[i].y = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/posZ/", tmp_c, 1, 4, i + 1); sv[i].z = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/velX/", tmp_c, 1, 4, i + 1); sv[i].vx = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/velY/", tmp_c, 1, 4, i + 1); sv[i].vy = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/velZ/", tmp_c, 1, 4, i + 1); sv[i].vz = str2double(tmp_c); } printf("%d Lines Written for Orbit...\n", count); return (count); } int pop_prm(struct PRM *prm, tree *xml_tree, char *file_name) { char tmp_c[200]; double tmp_d; int tmp_i; double c_speed = 299792458.0; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; search_tree(xml_tree, "/level1Product/processing/processingParameter/rangeLooks/", tmp_c, 1, 0, 1); prm->nlooks = (int)str2double(tmp_c); prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; strasign(prm->dtype, "a", 0, 0); search_tree(xml_tree, "/level1Product/productInfo/imageDataInfo/imageRaster/rowSpacing/", tmp_c, 1, 0, 1); prm->fs = 1 / str2double(tmp_c); // rng_samp_rate prm->SC_identity = 7; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ search_tree(xml_tree, "/level1Product/instrument/radarParameters/centerFrequency/", tmp_c, 1, 0, 1); prm->lambda = c_speed / str2double(tmp_c); search_tree(xml_tree, "/level1Product/processing/processingParameter/rangeCompression/" "chirps/referenceChirp/pulseLength/", tmp_c, 1, 0, 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/level1Product/processing/processingParameter/rangeCompression/" "chirps/referenceChirp/pulseBandwidth/", tmp_c, 1, 0, 1); prm->chirp_slope = str2double(tmp_c) / tmp_d * pow(10.0, 9.0); search_tree(xml_tree, "/level1Product/processing/processingParameter/rangeCompression/" "chirps/referenceChirp/chirpSlope/", tmp_c, 1, 0, 1); if (strcmp(tmp_c, "DOWN") == 0) { prm->chirp_slope = -1.0 * prm->chirp_slope; } prm->pulsedur = tmp_d / pow(10.0, 9.0); // search_tree(xml_tree,"/product/qualityInformation/qualityDataList/qualityData/imageQuality/imageStatistics/outputDataMean/re/",tmp_c,1,0,1); prm->xmi = 0.0; // str2double(tmp_c); //I_mean // search_tree(xml_tree,"/product/qualityInformation/qualityDataList/qualityData/imageQuality/imageStatistics/outputDataMean/im/",tmp_c,1,0,1); prm->xmq = 0.0; // str2double(tmp_c); //Q_mean search_tree(xml_tree, "/level1Product/productSpecific/complexImageInfo/commonPRF/", tmp_c, 1, 0, 1); prm->prf = str2double(tmp_c); search_tree(xml_tree, "/level1Product/productInfo/sceneInfo/rangeTime/firstPixel/", tmp_c, 1, 0, 1); prm->near_range = str2double(tmp_c) * c_speed / 2; prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius search_tree(xml_tree, "/level1Product/productInfo/missionInfo/orbitDirection/", tmp_c, 1, 0, 1); strasign(prm->orbdir, tmp_c, 0, 0); search_tree(xml_tree, "/level1Product/productInfo/acquisitionInfo/lookDirection/", tmp_c, 1, 0, 1); strasign(prm->lookdir, tmp_c, 0, 0); strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; search_tree(xml_tree, "/level1Product/productInfo/sceneInfo/start/timeUTC/", tmp_c, 2, 0, 1); prm->clock_start = str2double(tmp_c); search_tree(xml_tree, "/level1Product/productInfo/sceneInfo/start/timeUTC/", tmp_c, 1, 0, 1); tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(tmp_c); strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); search_tree(xml_tree, "/level1Product/productInfo/imageDataInfo/imageRaster/numberOfColumns/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c); prm->bytes_per_line = tmp_i * 4; prm->good_bytes = prm->bytes_per_line; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig search_tree(xml_tree, "/level1Product/calibration/nominalGeometricPerformance/azimuthRes/", tmp_c, 1, 0, 1); prm->az_res = str2double(tmp_c); /*search_tree(xml_tree,"/level1Product/productInfo/acquisitionInfo/lookDirection/",tmp_c,1,0,1); prm->antenna_side = 1; if (strcmp(tmp_c,"R")==0){ prm->antenna_side = -1; } */ prm->fdd1 = 0.0; prm->fddd1 = 0.0; search_tree(xml_tree, "/level1Product/productInfo/imageDataInfo/imageRaster/numberOfRows/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c); prm->num_lines = tmp_i - tmp_i % 4; // search_tree(xml_tree,"/product/adsHeader/stopTime/",tmp_c,2,0,1); prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->num_rng_bins = prm->bytes_per_line / 4; prm->chirp_ext = 0; printf("PRM set for Image File...\n"); return (1); } GMTSAR_V5.7/preproc/TSX_preproc/src/Makefile000644 015705 000000 00000000632 13505462014 021653 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_slc_tsx CSRCS = make_slc_tsx.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar -I$(TIFF_INC) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC -L$(TIFF_LIB) -ltiff -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/TSX_preproc/src/make_slc_tsx000755 015705 000000 00000131074 13507242215 022623 0ustar00sandwellwheel000000 000000 8 H__PAGEZERO(__TEXT__text__TEXT0 Xk0 __stubs__TEXTww__stub_helper__TEXTPxZPx__const__TEXTyy__cstring__TEXT{{__unwind_info__TEXT88__DATA N__nl_symbol_ptr__DATA!__got__DATA#__la_symbol_ptr__DATA((&__data__DATA00__common__DATA@@NH__LINKEDITN <"0HPH`b, P>>$G /usr/lib/dyldh6l]>2   *(0 8 /opt/local/lib/libtiff.5.dylib 8/usr/lib/libSystem.B.dylib&H)UHAWAVAUATSH8AIHʃHHEЃH=τH5v?IH5pqkIHuIwH=p>LEk1ۃt/f.f1Ƀ L kuHHiH7kILjIH5ojHHuIwH=ob>1HLTHjHHIWHLIwHHSjH5KoH9jH5LDJ,pHǃtHǃHǃHǃHǃHǃHǃǃ\H0H5o11|EH5oE1ALL=LI pLfu@fWghf@^/hHHǃ(Hǃ H5oLE1ALLj<L2HH5oE1ALL:<LHYgYg(gH5oE1ALL;H 11LYCH5oE1ALL;H(11L&CLLeH5oLdHLdLLdH5iLdHLdLLdH5iL|dHLndH?HL=6oE1ALLL:LFE1ALLL:ƅLSFY fXHL=n11LAH11LAH11LAH5iE1ALL :LE,LPHǃHǃh(eXHH5@n115AH52nE1ALL9L]E0HǃHǃxH5hE1ALLO9LE,W*^^dXX`ǃXLhǃlH=mbHzHH;EuH[A\A^A_]afDUHAWAVAUATSHIIH7zHHEH54hHE1AH48HC,H1L-"hLf.HùALLLA7LCALLLA7ƅLfC,A$f( c^f: Yf(\,AD$Wf: \YbAT$ALH5xgLA7LBAD$ALH5vgLA6LBAD$ALH5tgLA6LBAD$ ALH5rgLA6LZBAD$(ALH5pgLAc6L+BAD$0ALH5ngLA46LAAD$8I@H9$H=ig1_HwHH;EuH[A\A]A^A_]5_DUHAWAVATSAIHGOHff(hafYf: f^f(\ʋDGH5 eL_EL=ef.@KCKS[ c(k0s8LL^H@Iu¸[A\A^A_]@UHAWAVAUATSHAAHXH}LcJ<^HH=i^H=*d1HE1DD^D}EG,6CD6HHECD6HHEIcHEDH`H@HhHHHpH)HHxf.@H}L}L]H}L]H}L]H}L]H}L~]H}Lh]H}LR]HHUL>]HL)]H}L]HLuLL\HL\H}L\HLL\HL\H}L\HLL\Eff ȋMfEf ЉEEff ȋMfEf ЉEEff ȋMfEf ЉEEAfAAfDC>MȉfEf ЉEȋẺff ȋMЉfEf ЉEH=f[CD>EԅLeqE1'1fo%]]Hpf.HPL}L[HTLZHLLZEAs1HhkHx1fo%\oCoLCoTC o\C0f8f8CLCf8f8TC \C0H HuHpt oCoLCf8f8CLCH`HL9tf.fCHI9uHLeLHXYAD;uHEEHE;EHYHĈ[A\A]A^A_]ÐUHAVSH@)EIH[\YE[\YE [YYOMXEUYYZ\Qf(U^]YCX]XYf)UE}XfEfYfAEYEAFH@[A^]f.@UHSHHf'o5@Zf(\Yf( \ZfWfEWf(Af(fUfTfVf)`f(fYf(XWQmf(Yf(Yf)}f(Y\ef(EYff^f(f()MYXY Z)EfYf()pf(\Xf(YYf(YXfA.f)ef)]sFf(YYfWQf(YXEf(^W^YWf(YUBWQE\ kY6WEEXE OYWU\f(Yf( YYf(]fTf.v%f(Yf(EXXY Y^f(f(pXQf(]XY\Xf(YYf(e\f(X\^XWQ\f(UYW\YEf(MXY^Uf)EMYMU\UUYMU\UYXS(`(U 4XXfWf(fTfUfVf(EffY&XfHĘ[]ÐUHAWAVSPIIH5ZL_UHHuH=`L(L"HL1H[A^A_]f.UHHXXXXXXXXHHHHHH HHHHH0H(H (TWHXHayayHhLJpaytLJayLJayLJay(WHt$iH(8HXhxHH(]f.UHAWAVAUATSHIHHHkHHEL%lA<$t9HkH H=^RSH H=^,9SHPHHRHIHIHIHIHIHIHIHI H IH(I H0I(H8I0H@HPLPLf.Dƅ1HH5]LHPMKRLH5]BRHauALL2RA<$u/HjH81HLH ]MQf.@LH5]Qu=HLQA<$u'HiH81HLH J]MjQfDLH5;]Qu=HLQA<$u'H`iH81HLH ]MQfDLH5\GQu=HL:QA<$u'HiH81HLH \MPfDLH5\Pu=HLPA<$u'HhH81HLH ~\MzPfDLH5s\Pu=HLPA<$u'HphH81HLH ;\M*PfDLH5*\WPu=HLJPA<$u'H hH81HLH [MOfDLH5[Pu=HLOA<$u'HgH81HLH [MOfDLH5[Ou=H LOA<$u'HgH81HLH g[M:OfDLH5X[gOu=H(LZOA<$u'H0gH81HLH [MNfDLH5[Ou=H0L OA<$u'HfH81HLH ZMNfDLH5ZNu=H8LNA<$u'HfH81HLH ZMJNfDLH5ZwNu=H@LjNA<$u'H@fH81HLH HZMMfDLH56Z'NuMLMAA<$u7HeH81H5\LH YMAMf.LH5YMuMLOMAA<$u7HeH81H5p\LH YMAAMf.LH5YgMuMLLALA<$u7H.eH81H5\LH HYMALf.LH55YMuMLLAPA<$u7HdH81H5[LH XMALf.LH5XLuML/LATA<$u7HndH81H5P[LH XMA!Lf.LH5XGLuMLKAXA<$u7HdH81H5ZLH VXMAKf.LH5@XKuMLoKA\A<$u7HcH81H5ZLH XMAaKf.LH5WKuMLKA`A<$u7HNcH81H50ZLH WMAKf.LH5W'KuMLJAA<$u7HbH81H5YLH \WMAJf.LH5FWJuMLOJAlA<$u7HbH81H5pYLH WMAAJf.LH5VgJuMLIAdA<$u7H.bH81H5YLH VMAIf.LH5VJuMLIAhA<$u7HaH81H5XLH ]VMAIf.LH5HVIuML/IAA<$u7HnaH81H5PXLH VMA!If.LH5UGIuMLHApA<$u7HaH81H5WLH UMAHf.LH5UHuMLoHAtA<$u7H`H81H5WLH ^UMAaHf.LH5CUHuMLHAxA<$u7HN`H81H50WLH UMAHf.LH5T'HuMLGAtA<$u7H_H81H5VLH TMAGf.LH5TGuMLOGAxA<$u7H_H81H5pVLH ETMAAGf.LH58TgGuMLFAA<$u7H._H81H5VLH SMAFf.LH5SGu=LFAA<$u%H^H8H5ULH SMFLH5SFHPuFL2FAA<$u.Hw^H8H5mULH ]SM-FfLH5PSWFu=LEAA<$u%H^H8H5ULH SMELH5 SFu=LEAA<$u%H]H8H5TLH RMELH5REu=L9EAA<$u%H~]H8H5tTLH RM4ELH5RgEu=LDAA<$u%H.]H8H5$TLH CRMDLH59REu=LDAA<$u%H\H8H5SLH QMDLH5QDu=LIDAA<$u%H\H8H5SLH QMDDLH5QwDu=LCAA<$u%H>\H8H54SLH zQMCLH5uQ'Du=LCAA<$u%H[H8H5RLH 7QMCLH5,QCu=LYCAA<$u%H[H8H5RLH PMTCLH5PCu=L CAA<$u%HN[H8H5DRLH PMCLH5P7Cu=LBAA<$u%HZH8H5QLH hPMBLH5dPBu=LiBAA<$u%HZH8H5QLH &PMdBLH5PBu=LBAA<$u%H^ZH8H5TQLH OMBLH5OGBu=LAA A<$u%HZH8H5QLH OMALH5OAu=LyAA(A<$u%HYH8H5PLH LOMtALH5AOAu=L)AA0A<$u%HnYH8H5dPLH OM$ALH5NWAu=L@A8A<$u%HYH8H5PLH NM@LH5NAu=L@A@A<$u%HXH8H5OLH xNM@LH5rN@u=L9@AHA<$u%H~XH8H5tOLH 4NM4@LH5,Ng@u=L?APA<$u%H.XH8H5$OLH MM?LH5M@u=L?AXA<$u%HWH8H5NLH MM?LH5M?u=LI?A`A<$u%HWH8H5NLH lMMD?LH5fMw?u=L>AhA<$u%H>WH8H54NLH (MM>LH5!M'?u=L>ApA<$u%HVH8H5MLH LM>LH5L>u=LY>AxA<$u%HVH8H5MLH LMT>LH5L>u=L >AA<$u%HNVH8H5DMLH LLM>LH5@L7>u=L=AA<$u%HUH8H5LLH LM=LH5K=u=Li=AA<$u%HUH8H5LLH KMd=LH5K=u=L=AA<$u%H^UH8H5TLLH vKM=LH5nKG=u=L<AA<$u%HUH8H5LLH 0KM<LH5(K<u=Ly<AA<$u%HTH8H5KLH JMt<LH5J<u=L)<AA<$u%HnTH8H5dKLH JM$<LH5JW<u=L;AA<$u%HTH8H5KLH bJM;LH5_J<u=L;AA<$u%HSH8H5JLH !JM;LH5J;u=L9;AA<$u%H~SH8H5tJLH IM4;LH5Ig;u=L:AA<$u%H.SH8H5$JLH IM:LH5I;u=L:AA<$u%HRH8H5ILH ZIM:LH5UI:u=LI:AA<$u%HRH8H5ILH IMD:LH5Iw:u=L9AA<$u%H>RH8H54ILH HM9LH5H':u=L9AA<$u%HQH8H5HLH HM9LH5H9u=LY9A A<$u%HQH8H5HLH JHMT9LH5HH9u=L 9A(A<$u%HNQH8H5DHLH HM9HHH8HHQHH;EuH[A\A]A^A_]l8f.fUHAWAVSPHIIHH8HQ8u+HPH8H5G1LLIH[A^A_]_8H[A^A_]UHAWAVATSHIIIH 8AH}Q8u)HIPH8H5-G1LLM[A\A^A_]7[A\A^A_]f.@UHAWAVATSHIIIH7HQ8u)HOH8H5FLLM[A\A^A_]7[A\A^A_]f.DUHAWAVSPILupaytH5F1LD7AaytH5F1L$7ATaytH5yF1L7IH5sBH=7tH5_F1LH6Af.|9u{H5HFL6AdaytH51A@f.3u{H5CL1A8f.3u{H5CL0A f.3u{H5CL0A(f.w3u{H5CL0Af.Q3u{H5CL0Af.+3u{H5kCLZ0Af.3u{H5[CL40Af.2u{H5OCL0Af.2u{H5?CL/Af.2u{H5,CL/Af.m2u{H5CL/Apf.G2u{H5CLv/Axf.!2u{H5BLP/Af.1u{H5BL*/Af.1u{H5BL/Af.1u{H5BL.Af.1u{H5BL.Af.c1u{H5BL.Af.=1u{H5BLl.Af.1u{H5BLF.Af.0u{H5BL .Af.0u{H5BL-Af.0u{H5BL-Af.0u{H5BL-Af.Y0u{H5BL-A f.30u{H5BLb-A(f. 0u{H5BL<-IH58Hu-tH5sB1LH -I0H5x8HB-tH5^B1LH,Af./u{H5FBL,H[A^A_]ÐUH]DUH]DUHHHHDH8H5B1b,:,@UHGOYFYN\OYFY\JOYFY\B]UHYfOfYXXWQ]UHW\VfOfFf\YfYXXWQ]UH\fff\YfYXXQ]UHOf(YYXWYXWQ^G^FG^F]fUHpY,*)X(^XW*f(X^XhW*^X]UHSPÍ9|HC8tHtBH8H5?1ʉ3*H[]fDUHSPHf(\^ZH{C8t&HBH8KSH5?)1H[]ÐUHAWAVAUATSHDDHIHAHHED6EH(tAIArf.@AE1DHcExA9f.fM6I9-IiA|KH;L uCIiMcIt:9|IiA@HL Lc; S4H=HH=4;$$E1L LtLMiN48H5: L$LL$L(L nHz<H8H5[:1L:$`IiIcHiAIL1ڀЀ w HcA\HuIiAIL1ڀЀ w HcHu^AtrH(JL8I1L f.DڀЀ w HcHu91HAD_1HƄHL B1L(L HƄH,HHi`H5 ;L/#L"IiAH :H H;MuH[A\A]A^A_]U"DUHAWAVAUATSPtGAIDE1 A HA9uAE9tL"H9w۸ˉH[A\A]A^A_]ÐUHAWAVAUATSHxH@:HHEиAA)AAIA~*HOutOfSpaHG fGce!;xuL`|McMcMKM)LIKDH9vJK LH9LHHNHHHÃH`01HLaƅ`-HcIXAIA0f.HIH)ƃ WABCHIH HwCItum1HAH$fH*HAf.L9vB<6t A>tHHH9v<>HIuHH HE1Af.@HHIPL9wLLL!fDADDܬLLLЬD Icր|/u%AHHHDXHHHH71IiM4 I IDŽ IDŽ MtUHȬLhIiL LH5)WL6HLDIպLLLHȬHDŽHiHHLܬLuHcA|/AEH9mHLLZf.@HI HLȬIiHHH5n(H}I_LLLHHiLLLLЬJHAAHHiENܬLHuHcA|/I]LH HHH HLiK<<9LLxH(]A$CfCEDCLOS%AHiȬH)H1ڀЀ w Hc0HuDLLLHЬHLJHFHHiANENܬLHuHcA|/I]LH HHH LiK<49L)HL\L1HKDŽ<G<CDŽ<AFfAFEDACLOSHȬL1HƄ0H01,HHi`H5'HH:LL1LHH)t HЬ(AFfAFEDACLOSHЬHHȬLHË5'LLMvIHBWHЬKDŽ4G4CDŽ4@f@EDCLOSLHLLL'H'H'&H8H5m$1DH H %H H;MuHHS[A\A]A^A_]` UHAWAVSPEIAFHHiH<9}QIDŽEADŽH[A^A_]ÐUHAWAVSPt;I1A C>Iǹ< t < uL^ L9w1ۉH[A^A_]fDUHydu-HA xA LDLcHA01LI WABшL>HM9IvD>Ht8D>H|*HHf.NFHH9Hvr]ÐUHAWAVAUATSHAAIHD$HHEЅu H=#? E~!Gt-1f  D9|LHIcLiC4uC4u = O4K4H5! H t(DO4C4EEH="1HLPD\t0KL41ڀЀ w Hc`Hu1HƄ`H`&,HHi`H5#O4C4LPEEH=y!1\ A7HHt SLiAut LVH"HH;EuHĘ[A\A]A^A_] f.UH* Y*% f(X^- f: XY- Y- Wf: \Y ^Wf: W*X WA*^XW*^X^ XX X]UHAWAVAUATSHIHXH!HHEH IE~X1L`E11fDIcA< u0ANLLLO,HcHXADAE9|11ۍBD9}0L`LLDL,HcHXH HH;EuHĈ[A\A]A^A_]WUHAWAVAUATSHIHXH HHEHIE~j1L`E11fDIcAH w>HHs.ANLLL;HcHXADAE9|11ۍBD9}.L`LLDLHcHXHHH;EuHĈ[A\A]A^A_]GUH帀H !ƄVƄ@Ƅ@+ƄHH=7_u ]f.UHAWAVATSIIlILaLH<%HHLAHHLLH$H[A\A^A_]fUHAVS~I Lu[A^]DUHAWAVAUATSHHAIHHHEHcLiN4/H5` LtAu^H51HL)HAKL/1ڀЀ w HcHuH5H1LAuH5H1HKc/LiO$/H5 L.H5;L1HLL21HƄHAu"U,HHi`HAH5B3,HHi`H=H5H1*Au!H5H1HKc/LiK'H5 HK/H,HHi`HHcHiLH5)L1H"HA$tfKL/1f.ڀЀ w HcHu2trKL'1ڀЀ w Hc HuJ1HƄH,HHi`H H5lL1HLe1HƄ H,HHi`L=LH k,HHi`LH5L1HH H=HH;EuH[A\A]A^A_]UHAWAVAUATSHMH}HMЍ EHuAԅt }"B'H=}L}~"]f.@ L}uH]H;McMiJc7HHiDLH;B7SEHEDtAf.D9e~"D LuHEH8IiLHEH8LcMtAIiAteDLH;B7tHEЍH}HMZH;B7t}HHMM8H;B7tH[A\A]A^A_]B7uEtHEDtAD9e~"D LuHEH8IiL HEH8LcMkAIiAtN%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LAS%hhhh4hIhahuhhhhhxhnhdhZhPhFh @?$$ Usage: make_slc_tsx name_of_xml_file name_of_image_file name_output Example: make_slc_s1a TSX1_SAR__SSC______SM_S_SRA_20120615T162057_20120615T162105.xml IMAGE_HH_SRA_strip_007.cos TSX_HH_20120615 Output: TSX_HH_20120615.SLC TSX_HH_20120615.PRM TSX_HH_20120615.LED rCouldn't open xml file: .PRMwCouldn't open prm file: .LEDCouldn't open led file: rbCouldn't open data file: .SLCwbCouldn't open tiff file: /level1Product/productInfo/imageDataInfo/imageRaster/numberOfColumns//level1Product/productInfo/imageDataInfo/imageRaster/numberOfRows/Writing SLC..Image Size: %d X %d... %d %d %d %.3lf %.3lf %d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf /level1Product/platform/orbit/orbitHeader/numStateVectors//level1Product/platform/orbit/stateVec/timeUTC//level1Product/platform/orbit/stateVec/posX//level1Product/platform/orbit/stateVec/posY//level1Product/platform/orbit/stateVec/posZ//level1Product/platform/orbit/stateVec/velX//level1Product/platform/orbit/stateVec/velY//level1Product/platform/orbit/stateVec/velZ/%d Lines Written for Orbit... /level1Product/processing/processingParameter/rangeLooks/a/level1Product/productInfo/imageDataInfo/imageRaster/rowSpacing//level1Product/instrument/radarParameters/centerFrequency//level1Product/processing/processingParameter/rangeCompression/chirps/referenceChirp/pulseLength//level1Product/processing/processingParameter/rangeCompression/chirps/referenceChirp/pulseBandwidth//level1Product/processing/processingParameter/rangeCompression/chirps/referenceChirp/chirpSlope/DOWN/level1Product/productSpecific/complexImageInfo/commonPRF//level1Product/productInfo/sceneInfo/rangeTime/firstPixel//level1Product/productInfo/missionInfo/orbitDirection//level1Product/productInfo/acquisitionInfo/lookDirection/.raw/level1Product/productInfo/sceneInfo/start/timeUTC/n0/level1Product/calibration/nominalGeometricPerformance/azimuthRes/PRM set for Image File...System is Little Endian...Swaping Bytes...can't open fileXXXXXXXXget_sio_struct: PRMname (PRM value) interpreted value %s %s %sinput_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdtypenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangePRFI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startbaseline_centerbaseline_endalpha_startalpha_centeralpha_endSLC_scaleB_offset_startB_offset_centerB_offset_end %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %g stretch_a = %g a_stretch_r = %g a_stretch_a = %g first_sample = %d SC_identity = %d rng_samp_rate = %.6f input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d PRF = %lf pulse_dur = %e near_range = %lf num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s orbdir = %s lookdir = %s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %.6f I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %lf fddd1 = %lf sub_int_r = %lf sub_int_a = %lf B_parallel = %lf B_perpendicular = %lf baseline_start = %lf baseline_center = %lf baseline_end = %lf alpha_start = %lf alpha_center = %lf alpha_end = %lf B_offset_start = %lf B_offset_center = %lf B_offset_end = %lf SLC_file = %s dtype = %.1s SLC_scale = %lf %s %s find_fft_length: ...data length n %d nfft %d geo2latlon: %8.3f %8.3f %8.0f OutOfSpaceUnable to find designated string...after %ld searches.. Unable to find designated string... CLOSEDNot an well formatted XML file...%d, %d %s (%d,%d,%d) %.12f<%s> %s <%s>%s In the brackets the numbers are (count, child, sibling)44X a!0 LLwL |0 @  0 @03p3P4 ?PABMMPS^^_`a b0dde0e`xjxtx~xxxxxxxxxxxxxy yyy(y2yt_o2latlonprmsintdoubletreeDull_odatasio_structMEM_STREio_structtringecondsH~s_big_endian_toa_xmlЖ_ieate2MJDebugopprat_numsoss3eate_childind_orcelengthdistanceunit_vectorfft_length3Лearch_treetrpace_counthow_treeio_flagwaplocateasign2_date2JDЪгdintsoublebsefix_strint_spacetreeTREE_SIZECHAR_SIZEAR_modeTRĢȢ̢_sloped_slopeТآad_poliet_flag  `5`pp0`0@0`Ppp@ ```p0 < 8  @# D- 2 09Mu]Yg@juK}m HpK L0LpLMLL P XM@?$p"-M:`$J@?Va`PKp`Kk0  ``p"``p0q`q@ d h l(@N5k@ pJjWPo`ZlPnv_UPU t xp@P '5CIOV\bgmu|>?@ABEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a@CD>?@ABEFGHIJKLMNOPQRSTUVWXYZ[\]^_` _MAX_CHAR_SIZE_MAX_TREE_SIZE_N_SAR_mode_STR_USAGE__mh_execute_header_assemble_trees_cat_nums_create_child_cross3_date2MJD_debug_die_dopp_find_distance_find_distance3_find_fft_length_find_length_find_unit_vector_force_slope_forced_slope_geo2latlon_get_double_get_int_get_prm_get_seconds_get_sio_struct_get_string_get_tree_is_big_endian__is_big_endian___itoa_xml_main_nodata_null_MEM_STR_null_sio_struct_plh2xyz_pop_led_pop_prm_prefix_str_print_space_print_tree_put_sio_struct_quad_pol_quiet_flag_roi_flag_search_tree_show_tree_sio_flag_space_count_str2dbs_str2double_str2ints_str_date2JD_strasign_strlocate_swap_verbose_write_orb_write_slc_xyz2plh___bzero___exp10___sincos_stret___sprintf_chk___stack_chk_fail___stack_chk_guard___stderrp___strcat_chk___strcpy_chk_acos_atan_atan2_atof_atoi_cos_exit_fclose_fgetc_fgets_fopen_fprintf_fputc_fread_free_fwrite_malloc_pow_printf_putchar_puts_sscanf_strcmp_strcpy_strlen_strncmpdyld_stub_binderGMTSAR_V5.7/preproc/CSK_preproc/src_raw/000755 015705 000000 00000000000 13507242234 021027 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/CSK_preproc/Makefile000644 015705 000000 00000000711 13505462014 021024 0ustar00sandwellwheel000000 000000 include ../../config.mk # # make all the files # DIRS = src_slc src_raw all: $(LN_S) -f ../S1A_preproc/include include $(LN_S) -f ../S1A_preproc/lib lib for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done uninstall: for d in src_slc src_raw; do \ (cd $$d; $(MAKE) uninstall); \ done clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done spotless: clean GMTSAR_V5.7/preproc/CSK_preproc/include000755 015705 000000 00000000000 13505462014 024623 2../S1A_preproc/includeustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/CSK_preproc/src_slc/000755 015705 000000 00000000000 13507242234 021017 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/CSK_preproc/lib000755 015705 000000 00000000000 13505462014 023071 2../S1A_preproc/libustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/CSK_preproc/src_slc/Makefile000644 015705 000000 00000000645 13505462014 022462 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_slc_csk CSRCS = make_slc_csk.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar $(HDF5_CPPFLAGS) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC $(HDF5_LDFLAGS) $(HDF5_LIBS) -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/CSK_preproc/src_slc/make_slc_csk000755 015705 000000 00000133224 13507242215 023367 0ustar00sandwellwheel000000 000000 H H__PAGEZERO(__TEXT__text__TEXTk__stubs__TEXTzz__stub_helper__TEXT{{__const__TEXT}}__cstring__TEXT``__unwind_info__TEXT88__DATA N__nl_symbol_ptr__DATA/__got__DATA81__la_symbol_ptr__DATAHxH8__data__DATA__common__DATAБ@NH__LINKEDITN "0ul( P??6Яg /usr/lib/dylda]E@?s <{2   *( 8/usr/lib/libSystem.B.dylib 0 /usr/lib/libz.1.dylib @/usr/local/opt/szip/lib/libsz.2.dylib Hii/usr/local/opt/hdf5/lib/libhdf5.103.dylib Hff/usr/local/opt/hdf5/lib/libhdf5_hl.100.dylib Hii/usr/local/opt/hdf5/lib/libhdf5_cpp.103.dylib&0H)xUHAWAVATSH0AIH HHE؃H=H5sE?I\$ kk11HckIHyIt$H=p?HHSIT$HLIt$HHfkH5pHLkH5rpHkHHuH=]pH>HHHH3H6kHL AIt$HHjH5pHjH5oHjHHuH=oH>HHD HjIt$HHjjH5oHPjH5oHjHHuH=oH=LHE HIjLiHHH;Eu1H0A[A\A^A_]if.@UHAWAVAUATSHXIIIH~HHEHLJpLJxHLJHLJHLJHLJHLJHLJLJ\LJdH0H5o11FADž(kAHHLhH5oHhLHhHLhH5nHhIHhHLhH5mHxhIHjhH?If(jfA H5m1LgH5n1HgHgL5}I6LHLgHI8H5 n1LgH5n1HTgHgI6HLDgHIP1LH5'mOgH5dn1HgHZgI6HLfHI@1LH5l gH5/n1HfHgI6HLfHIHH 'oLnLAcLLHm 1LH5nlfH5m1HUfHfI6HHAfHIH5mLgumH5l1L9fH5 l1HfH5m1HeH3fHB{H0HHeh^AHAlH )nL:mHAcHL H5(mHmftEH5JmHVf/HzHH=im)fH5$k1LGeH5l1HeH5l1HdHAeHPzH0HHdYgYgAHGkH /mLjlHAcHL L LHFHL[LHFAƅ$LFYgXAwH5j1LBdH5j1HdH5k1HcH_EE,DH1Pb Pb5^XՉf(^f: Yf(\,|Wf: \YTՐTHՠH| T(HH|8HHH9nH=le1D?_HsHH;EuDH/[A\A]A^A_]^UHAWAVATSAIHGOHff(afYf: f^f(\ʋDGH5"dL^EL=%df.@KCKS[ c(k0s8LL9^H@Iu¸[A\A^A_]@UHAWAVAUATSHH@HHhHrHHEH'cH %cLeH}AnYH]HpLuHMH=bE11HL]AHcH]HxC6dLcK|-]H1HhH5b\1HH5b\IH\11E1LHLx}\H=b1LhDLpD!]E;EIIOHHHHxHHPHHHHpH)HXE1(1HHu~f.DhHptIcHPH AHX1ftAf4CtAftCtAftC4AftCHHuHHt5dAHcHHxNHfCHH Hf HLH@[IEM9;Hx[H[HhpHH;EuHĘ[A\A]A^A_]+[f.UHAWAVAUATSPEMHIH}Ѐ:tH1LHZII;tT1LHwZHIA>t1LLFZIIAD$ w`H HcHuZHorHA>uXZH_oH81ZILYH$ZHpLZM9u3LLHUYHZH&o ZHoL0M9t͸Anu I9uHY1HHuYH[A\A]A^A_]fY<QA<$u'HeH81HLH YYMPfDLH5NYPu=HLPA<$u'HpeH81HLH YMPfDLH5YPu=HLPA<$u'H eH81HLH XM4PfDLH5X[Pu=HLNPA<$u'HdH81HLH XMOfDLH5zX Pu=H LOA<$u'HdH81HLH BXMOfDLH53XOu=H(LOA<$u'H0dH81HLH WMDOfDLH5WkOu=H0L^OA<$u'HcH81HLH WMNfDLH5WOu=H8LOA<$u'HcH81HLH kWMNfDLH5[WNu=H@LNA<$u'H@cH81HLH #WMTNfDLH5W{NuMLNAA<$u7HbH81H5YLH VMAMf.LH5VNuMLMAA<$u7HbH81H5GYLH yVMAMf.LH5aVMuMLOMALA<$u7H.bH81H5XLH #VMA;Mf.LH5V[MuMLLAPA<$u7HaH81H5XLH UMALf.LH5ULuMLLATA<$u7HnaH81H5'XLH UMA{Lf.LH5oULuML/LAXA<$u7HaH81H5WLH 1UMALf.LH5U;LuMLKA\A<$u7H`H81H5gWLH TMAKf.LH5TKuMLoKA`A<$u7HN`H81H5WLH TMA[Kf.LH5uT{KuMLKAA<$u7H_H81H5VLH 7TMAJf.LH5!TKuMLJAlA<$u7H_H81H5GVLH SMAJf.LH5SJuMLOJAdA<$u7H._H81H5ULH SMA;Jf.LH5vS[JuMLIAhA<$u7H^H81H5ULH 8SMAIf.LH5#SIuMLIAA<$u7Hn^H81H5'ULH RMA{If.LH5RIuML/IApA<$u7H^H81H5TLH RMAIf.LH5wR;IuMLHAtA<$u7H]H81H5gTLH 9RMAHf.LH5RHuMLoHAxA<$u7HN]H81H5TLH QMA[Hf.LH5Q{HuMLHAtA<$u7H\H81H5SLH yQMAGf.LH5lQHuMLGAxA<$u7H\H81H5GSLH QMAGf.LH5QGuMLOGAA<$u7H.\H81H5RLH PMA;Gf.LH5P[Gu=LFAA<$u%H[H8H5RLH PMFLH5}P GHPuFLFAA<$u.Hw[H8H5DRLH 8PMFfLH5+PFu=L9FAA<$u%H[H8H5QLH OM.FLH5O[Fu=LEAA<$u%HZH8H5QLH OMELH5O Fu=LEAA<$u%H~ZH8H5KQLH cOMELH5\OEu=LIEAA<$u%H.ZH8H5PLH OM>ELH5OkEu=LDAA<$u%HYH8H5PLH NMDLH5NEu=LDAA<$u%HYH8H5[PLH NMDLH5NDu=LYDAA<$u%H>YH8H5 PLH UNMNDLH5PN{Du=L DAA<$u%HXH8H5OLH NMCLH5N+Du=LCAA<$u%HXH8H5kOLH MMCLH5MCu=LiCAA<$u%HNXH8H5OLH MM^CLH5MCu=LCAA<$u%HWH8H5NLH CMMCLH5?M;Cu=LBAA<$u%HWH8H5{NLH MMBLH5uIBu=LyBAA<$u%H^WH8H5+NLH 7IMnBLH5LBu=L)BA A<$u%HWH8H5MLH lLMBLH5aLKBu=LAA(A<$u%HVH8H5MLH #LMALH5LAu=LAA0A<$u%HnVH8H5;MLH KM~ALH5KAu=L9AA8A<$u%HVH8H5LLH KM.ALH5K[Au=L@A@A<$u%HUH8H5LLH OKM@LH5IK Au=L@AHA<$u%H~UH8H5KLLH KM@LH5K@u=LI@APA<$u%H.UH8H5KLH JM>@LH5Jk@u=L?AXA<$u%HTH8H5KLH JM?LH5J@u=L?A`A<$u%HTH8H5[KLH CJM?LH5=J?u=LY?AhA<$u%H>TH8H5 KLH IMN?LH5I{?u=L ?ApA<$u%HSH8H5JLH IM>LH5I+?u=L>AxA<$u%HSH8H5kJLH nIM>LH5aI>u=Li>AA<$u%HNSH8H5JLH #IM^>LH5I>u=L>AA<$u%HRH8H5ILH HM>LH5H;>u=L=AA<$u%HRH8H5{ILH HM=LH5H=u=Ly=AA<$u%H^RH8H5+ILH MHMn=LH5EH=u=L)=AA<$u%HRH8H5HLH HM=LH5GK=u=L<AA<$u%HQH8H5HLH GM<LH5G<u=L<AA<$u%HnQH8H5;HLH }GM~<LH5wG<u=L9<AA<$u%HQH8H5GLH 9GM.<LH56G[<u=L;AA<$u%HPH8H5GLH FM;LH5F <u=L;AA<$u%H~PH8H5KGLH FM;LH5F;u=LI;AA<$u%H.PH8H5FLH uFM>;LH5oFk;u=L:AA<$u%HOH8H5FLH 1FM:LH5,F;u=L:AA<$u%HOH8H5[FLH EM:LH5E:u=LY:AA<$u%H>OH8H5 FLH EMN:LH5E{:u=L :AA<$u%HNH8H5ELH bEM9LH5_E+:u=L9A A<$u%HNH8H5kELH !EM9LH5E9u=Li9A(A<$u%HNNH8H5ELH DM^9HHH>9HHNHH;EuH[A\A]A^A_]8f.fUHAWAVSPHIIHH29HSO8u+HMH8H5[D1LLIH[A^A_]8H[A^A_]UHAWAVATSHIIIHk8AHN8u)HIMH8H5D1LLM[A\A^A_]U8[A\A^A_]f.@UHAWAVATSHIIIH7H~N8u)HLH8H5CLLM[A\A^A_]7[A\A^A_]f.DUHAWAVSPILupaytH5hC1L7AaytH5_C1L~7ATaytH5PC1L^7IH5N?H7tH56C1LH+7Af.<:u{H5CL7AdaytH5C1L6IH5>H7tH5B1LH6IH5>H6tH5B1LH6A0f.9u{H5BLY6ApaytH5B1L96AlaytH5B1L6IH5 >HL6tH5B1LH5AXf.8u{H5BL5A`f.8u{H5qBL5Ahf.8u{H5cBLt5AtaytH5ZB1LT5AxaytH5KB1L45Af.E8u{@AH5.BL5Af.8u{H5BL4Af.7u{H5 BL4Af.7u{H5AL4A\aytH5A1Ls4AaytH5A1LS4A8f.d7u{H5AL-4H5$<Lg4tH5A1LL4AhaytH5A1L3ALaytH5A1L3APaytH5A1L3Af.6u{H5AL{3AHf.6u{H5ALU3Af.f6u{H5pAL/3AaytH5dA1L3AXaytH5VA1L2Af.6u{H5DAL2Af.5u{H5;AL2Af.5u{H51AL}2Af.5u{H5%ALW2IH5G:H2tH5A1LH$2I H5:HW2tH5@1LH1I(H59H$2tH5@1LH1APf.4u{H5@L1A@f.4u{H5@Lr1A8f.4u{H5@LL1A f.]4u{H5@L&1A(f.74u{H5l@L1Af.4u{H5W@L0Af.3u{H5B@L0Af.3u{H52@L0Af.3u{H5&@Lh0Af.y3u{H5@LB0Af.S3u{H5@L0Af.-3u{H5?L/Apf.3u{H5?L/Axf.2u{H5?L/Af.2u{H5?L/Af.2u{H5?L^/Af.o2u{H5?L8/Af.I2u{H5?L/Af.#2u{H5?L.Af.1u{H5?L.Af.1u{H5?L.Af.1u{H5}?Lz.Af.1u{H5w?LT.Af.e1u{H5q?L..Af.?1u{H5l?L.Af.1u{H5f?L-A f.0u{H5`?L-A(f.0u{H5Z?L-IH55H-tH5J?1LHc-I0H5S5H-tH55?1LH0-Af.A0u{H5?L -H[A^A_]ÐUH]DUH]DUHHHHAH8H5>1,,@UHGOYFYN\OYFY\JOYFY\B]UHYfOfYXXWQ]UHW\VfOfFf\YfYXXWQ]UH\fff\YfYXXQ]UHOf(YYXWYXWQ^G^FG^F]fUHpY-*)X(^XW*f(X^XhW*^X]UHSPÍ9|HA8tHt?H8H5<1ʉ*H[]fDUHSPHf(\^ZH@8t&H?H8KSH5<&*1H[]ÐUHAWAVAUATSHDDHIH>HHED6EH(tAIArf.@AE1Dum1HAH$fH~HAf.L9vB<6t A>tH9HH9v<>HIuHH HE1Af.@HHIL9wLLL!fDADDܬLLLЬD Icր|/u%AHHHDXHHHH71IiM4 I IDŽ IDŽ MtUHȬLhIiL LH5%L6HLDIպLLLHȬHDŽHiHHL9ܬLuHcA|/AEH9mHLLZf.@HI HLȬIiHHH5N%}I_LLLHHiLLLLЬEJHAAHHiENܬLHuHcA|/I]LH HHH HLiK<<9LLxH(A$CfCEDCLOS%AHiȬH)H1ڀЀ w Hc0HuDLLLpHЬHLJHFHHiANENܬLHuHcA|/I]LH HHH LiK<49L)HL\L1HKDŽ<G<CDŽ<AFfAFEDACLOSHȬL1HƄ0H01,HHi`H5$HHLLLHH}t HЬ(AFfAFEDACLOSHЬHHȬLHË5H%LLMIHBWHЬKDŽ4G4CDŽ4@f@EDCLOSLHLLL{Ho'H'#H8H5M!1DH:H "H H;MuHHS[A\A]A^A_] UHAWAVSPEIAFHHiH<9}QIDŽEADŽH[A^A_]ÐUHAWAVSPt;I1A C>Iǹ< t < uL L9w1ۉH[A^A_]fDUHydu-HA xA LDLcHA01LI WABшL>HM9IvD>Ht8D>H|*HHf.NFHH9Hvr]ÐUHAWAVAUATSHAAIHD!HHEЅu H= E~!Gt-1f n D9|LHIcLiC4uC4u =6 O4K4H5 H: t(DO4C4EEH=1HLPD\t0KL41ڀЀ w Hc`Hu1HƄ`H`&,HHi`H5 O4C4LPEEH=Y1\E A7HHt SLiAut LVHHH;EuHĘ[A\A]A^A_]z f.UH* Y*% f(X^- f: XY- Y- Wf: \Y ^Wf: W*X WA*^XW*^X^ XX X]UHAWAVAUATSHIHXHHHEH IE~X1L`E11fDIcA< u0ANLLLO,HcHXADAE9|11ۍBD9}0L`LLDL,HcHXHHH;EuHĈ[A\A]A^A_]UHAWAVAUATSHIHXHHHEH IE~j1L`E11fDIcAH w>HHs.ANLLL;HcHXADAE9|11ۍBD9}.L`LLDLHcHXHHH;EuHĈ[A\A]A^A_]UH帀H ƄVƄ@Ƅ@+ƄHH=7_u]f.UHAWAVATSIIILLH<yHHLHHLLHxH:[A\A^A_]fUHAVS~I Lu[A^]DUHAWAVAUATSHHAIHHHEHcLiN4/H5@ LtAu^H51HLHAKL/1ڀЀ w HcHuH5zH1LWAuH5`H1HKc/LiO$/H5v L%.H5L1HLL21HƄHAu"U,HHi`HAH5B3,HHi`H=H5H1~Au!H5H1H&Kc/LiK'H5 HHK/H,HHi`HHcHiLH5 L1H"HA$tfKL/1f.ڀЀ w HcHu2trKL'1ڀЀ w Hc HuJ1HƄH,HHi`H H5LL1HLe1HƄ H,HHi`L=ZLH k,HHi`LH5L1HHzH=HH;EuH[A\A]A^A_]UHAWAVAUATSHMH}HMЍ EHuAԅt }"B'H=]L}~"]f.@ LuH]H;McMiJc7HHiDLH;B7SEHEDtAf.D9e~"D L7uHEH8IiLHEH8LcMtAIiAteDLH;B7tHEЍH}HMZH;B7t}HHMM8H;B7tH[A\A]A^A_]B7uEtHEDtAD9e~"D L'uHEH8IiL HEH8LcMkAIiAtN%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%L=AS%-h*h:hJhahwhhhhhhhxhnhdhZh$Ph2Fh@@?$$ Usage: make_slc_csk name_of_input_file name_output Example: make_slc_csk CSKS2_SCS_B_HI_09_HH_RA_SF_20090412050638_20090412050645.h5 CSK_20090412 Output: CSK_20090412.SLC CSK_20090412.PRM CSK_20090412.LED Couldn't open HDF5 file: .PRMwCouldn't open prm file: .LEDCouldn't open led file: .SLCwbCouldn't open tiff file: /S01SBIData size %lld x %lld x %lld... Writing SLC..Image Size: %d X %d... %d %d %d %.3lf %.3lf %d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf /Number of State VectorsReference UTCState Vectors TimesECEF Satellite PositionECEF Satellite Velocity%d Lines Written for Orbit... a.rawSampling RateRadar WavelengthRange Chirp RateRange Chirp LengthAcquisition ModePRFSPOTLIGHTLine Time IntervalProduct TypeRAW_BB001Range First TimesScene Sensing Start UTCSCS_BZero Doppler Range First TimeZero Doppler Azimuth First TimeProduct type being nither RAW nor SLC... Orbit DirectionASCENDINGADLook SideRIGHTRLPRM set for Image File...rcan't open fileXXXXXXXXget_sio_struct: PRMname (PRM value) interpreted value %s %s %sinput_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdtypenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangeI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startbaseline_centerbaseline_endalpha_startalpha_centeralpha_endSLC_scaleB_offset_startB_offset_centerB_offset_end %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %g stretch_a = %g a_stretch_r = %g a_stretch_a = %g first_sample = %d SC_identity = %d rng_samp_rate = %.6f input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d PRF = %lf pulse_dur = %e near_range = %lf num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s orbdir = %s lookdir = %s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %.6f I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %lf fddd1 = %lf sub_int_r = %lf sub_int_a = %lf B_parallel = %lf B_perpendicular = %lf baseline_start = %lf baseline_center = %lf baseline_end = %lf alpha_start = %lf alpha_center = %lf alpha_end = %lf B_offset_start = %lf B_offset_center = %lf B_offset_end = %lf SLC_file = %s dtype = %.1s SLC_scale = %lf %s %s find_fft_length: ...data length n %d nfft %d geo2latlon: %8.3f %8.3f %8.0f OutOfSpaceUnable to find designated string...after %ld searches.. Unable to find designated string... CLOSEDNot an well formatted XML file...%d, %d %s (%d,%d,%d) %.12f<%s> %s <%s>%s In the brackets the numbers are (count, child, sibling)44X a!LLzL x@p @p`pP334`?APBM NSP^__a`bpdd@epe }}}(}2}<}F}P}Z}d}n}x}}}}}{{{{{|||$|.|8|B|L|V|`|j|t|~|||||||||||||}`' `"0p`0@___stack_chk_guardQr8@___stderrp@dyld_stub_binder@_H5T_C_S1_g@_H5T_NATIVE_DOUBLE_g@_H5T_NATIVE_FLOAT_g@_H5T_NATIVE_INT_grH@_H5Aget_typerP@_H5AopenrX@_H5Areadr`@_H5Dget_spacerh@_H5Dget_typerp@_H5Dopen2rx@_H5Dreadr@_H5Fcloser@_H5Fopenr@_H5Gopen2r@_H5Sget_simple_extent_dimsr@_H5Tcopyr@_H5Tget_sizer@_H5Tset_sizer@_H5check_versionr@_H5openr@___bzeror@___exp10r@___sincos_stretr@___sprintf_chkr@___stack_chk_failr@___strcat_chkr@___strcpy_chkr@_acosr@_atanr@_atan2r@_atofr@_atoir@_cosr@_exitr@_fcloser@_fgetsr@_fopenr@_fprintfr@_fputcr@_freer@_fwriter@_mallocr@_powr@_printfr@_putcharr@_putsr@_sscanfr@_strcmpr@_strcpyr@_strlenr@_strncmp__mh_execute_headermainpwrite_hdf5_readxyz2plhgenidcfsassemble_treesUSAGEMAX_NSquroi_flagverboseop_lh2xyzut_sio_structrprm_hdf5led_hdf5"3orbslc_hdf59:@CDt_o2latlonprmsintdoubletreeKull_odatasio_structMEM_STRKio_structtringecondsOs_big_endian_toa_xml_ieate2MJDebugopprat_numsoss3eate_childind_orcelengthdistanceunit_vectorfft_lengthО3earch_treetrpace_counthow_treeio_flagwaplocateasign2_date2JDdintsoublebsefix_strint_spacetreeTREE_SIZECHAR_SIZEȣ̣УAR_modeTRԣأܣ_sloped_slopead_poliet_flag`5`pp0`0@0`Ppp@ ```p0L!0 ̑ ȑ  Б# ԑ- 2 9M x]\g`muN}p ؑN ܑPOOP OO  P0CB$%- P:'J`BVd` kpN{N n s%!PsPtt C ' 3 =`QJnU _mlpru0]pqbXpX  Pp" $-7@Jeq +>IWekqx~?@ABCDEFGHINOPQRSTUVWZ[\]^_`abcdefghijklmnopqrst@JKLMXY?@ABCDEFGHINOPQRSTUVWZ[\]^_`abcdefghijklmnopqrs _MAX_CHAR_SIZE_MAX_TREE_SIZE_N_SAR_mode_STR_USAGE__mh_execute_header_assemble_trees_cat_nums_create_child_cross3_date2MJD_debug_die_dopp_find_distance_find_distance3_find_fft_length_find_length_find_unit_vector_force_slope_forced_slope_geo2latlon_get_double_get_int_get_prm_get_seconds_get_sio_struct_get_string_get_tree_hdf5_read_is_big_endian__is_big_endian___itoa_xml_main_nodata_null_MEM_STR_null_sio_struct_plh2xyz_pop_led_hdf5_pop_prm_hdf5_prefix_str_print_space_print_tree_put_sio_struct_quad_pol_quiet_flag_roi_flag_search_tree_show_tree_sio_flag_space_count_str2dbs_str2double_str2ints_str_date2JD_strasign_strlocate_swap_verbose_write_orb_write_slc_hdf5_xyz2plh_H5Aget_type_H5Aopen_H5Aread_H5Dget_space_H5Dget_type_H5Dopen2_H5Dread_H5Fclose_H5Fopen_H5Gopen2_H5Sget_simple_extent_dims_H5T_C_S1_g_H5T_NATIVE_DOUBLE_g_H5T_NATIVE_FLOAT_g_H5T_NATIVE_INT_g_H5Tcopy_H5Tget_size_H5Tset_size_H5check_version_H5open___bzero___exp10___sincos_stret___sprintf_chk___stack_chk_fail___stack_chk_guard___stderrp___strcat_chk___strcpy_chk_acos_atan_atan2_atof_atoi_cos_exit_fclose_fgets_fopen_fprintf_fputc_free_fwrite_malloc_pow_printf_putchar_puts_sscanf_strcmp_strcpy_strlen_strncmpdyld_stub_binderGMTSAR_V5.7/preproc/CSK_preproc/src_slc/make_slc_csk.c000644 015705 000000 00000026157 13505462014 023612 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 07/09/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "hdf5.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include #include #include #include int pop_prm_hdf5(struct PRM *, hid_t, char *); int pop_led_hdf5(hid_t, state_vector *); int write_orb(state_vector *sv, FILE *fp, int); int write_slc_hdf5(hid_t, FILE *); int hdf5_read(void *, hid_t, char *, char *, char *, int); /*static inline unsigned long long bswap_64(unsigned long long x) { return (((unsigned long long)bswap_32(x&0xffffffffull))<<32) | (bswap_32(x>>32)); }*/ char *USAGE = "\n\nUsage: make_slc_csk name_of_input_file name_output\n" "\nExample: make_slc_csk " "CSKS2_SCS_B_HI_09_HH_RA_SF_20090412050638_20090412050645.h5 CSK_20090412\n" "\nOutput: CSK_20090412.SLC CSK_20090412.PRM CSK_20090412.LED\n"; int main(int argc, char **argv) { FILE *OUTPUT_PRM, *OUTPUT_SLC, *OUTPUT_LED; char tmp_str[200]; char *buff_c, *buff_o; double *buff_d; int *buff_i; struct PRM prm; // tree *xml_tree; state_vector sv[200]; int n; hid_t file; // fprintf(stderr,"Hahahaha...\n"); buff_c = (char *)malloc(60000 * sizeof(char)); buff_o = (char *)malloc(60000 * sizeof(char)); buff_d = (double *)malloc(1000 * sizeof(double)); buff_i = (int *)malloc(1000 * sizeof(double)); if (argc < 3) die(USAGE, ""); // generate the xml tree // if ((INPUT_FILE = fopen(argv[1],"r")) == NULL) die("Couldn't open xml file: // \n",argv[1]); if ((file = H5Fopen(argv[1], H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) die("Couldn't open HDF5 file: \n", argv[1]); // initiate the prm null_sio_struct(&prm); // generate the PRM file pop_prm_hdf5(&prm, file, argv[2]); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); // generate the LED file n = pop_led_hdf5(file, sv); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // generate the SLC file strcpy(tmp_str, argv[2]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open tiff file: \n", tmp_str); write_slc_hdf5(file, OUTPUT_SLC); fclose(OUTPUT_SLC); // TIFFClose(TIFF_FILE); // fclose(OUTPUT_SLC); H5Fclose(file); } int write_slc_hdf5(hid_t input, FILE *slc) { int i, j, width, height; short *buf, *tmp; hsize_t dims[10]; hid_t memtype, dset, group; herr_t status; hdf5_read(dims, input, "/S01", "SBI", "", 'n'); height = (int)dims[0]; width = (int)dims[1]; printf("Data size %lld x %lld x %lld...\n", dims[0], dims[1], dims[2]); buf = (short *)malloc(height * width * 2 * sizeof(short)); tmp = (short *)malloc(width * 2 * sizeof(short)); group = H5Gopen(input, "/S01", H5P_DEFAULT); dset = H5Dopen(group, "SBI", H5P_DEFAULT); memtype = H5Dget_type(dset); status = H5Dread(dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf); printf("Writing SLC..Image Size: %d X %d...\n", width, height); for (i = 0; i < height; i++) { for (j = 0; j < width * 2; j += 2) { tmp[j] = (short)buf[i * width * 2 + j]; tmp[j + 1] = (short)buf[i * width * 2 + j + 1]; } fwrite(tmp, sizeof(short), width * 2, slc); } free(buf); free(tmp); return (1); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 1e4) / 1e4 - trunc((sv[0].sec) * 1e4) / 1e4; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.3lf %.3lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led_hdf5(hid_t input, state_vector *sv) { int i, count, iy; char tmp_c[200], date[200]; double t[200], t0, t_tmp; unsigned short tmp_i[200]; double x[600], v[600]; hdf5_read(tmp_i, input, "/", "", "Number of State Vectors", 'i'); count = tmp_i[0]; hdf5_read(tmp_c, input, "/", "", "Reference UTC", 'c'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); t0 = str2double(tmp_c); date[4] = '\0'; iy = (int)str2double(date); hdf5_read(t, input, "/", "", "State Vectors Times", 'd'); hdf5_read(x, input, "/", "", "ECEF Satellite Position", 'd'); hdf5_read(v, input, "/", "", "ECEF Satellite Velocity", 'd'); // fprintf(stderr,"%.15f\n",x[3]); for (i = 0; i < count; i++) { t_tmp = t[i] / 86400.0 + t0; sv[i].yr = iy; sv[i].jd = (int)(t_tmp - trunc(t_tmp / 1000.0) * 1000.0); sv[i].sec = (t_tmp - trunc(t_tmp)) * 86400.0; sv[i].x = (double)x[i * 3]; sv[i].y = (double)x[i * 3 + 1]; sv[i].z = (double)x[i * 3 + 2]; sv[i].vx = (double)v[i * 3]; sv[i].vy = (double)v[i * 3 + 1]; sv[i].vz = (double)v[i * 3 + 2]; // fprintf(stderr,"%d %d %.3f %.6f %.6f %.6f %.8f %.8f %.8f // \n",sv[i].yr,sv[i].jd,sv[i].sec,x[i*3],x[i*3+1],x[i*3+2],v[i*3],v[i*3+1],v[i*3+2]); } printf("%d Lines Written for Orbit...\n", count); return (count); } int pop_prm_hdf5(struct PRM *prm, hid_t input, char *file_name) { char tmp_c[200], rec[100], date[100]; double tmp_d[200]; double c_speed = 299792458.0; hsize_t dims[10]; prm->nlooks = 1; prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; prm->st_rng_bin = 1; strasign(prm->dtype, "a", 0, 0); prm->SC_identity = 8; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; prm->xmi = 127.5; prm->xmq = 127.5; hdf5_read(tmp_d, input, "/S01", "", "Sampling Rate", 'd'); prm->fs = tmp_d[0]; hdf5_read(tmp_d, input, "/", "", "Radar Wavelength", 'd'); prm->lambda = tmp_d[0]; hdf5_read(tmp_d, input, "/S01", "", "Range Chirp Rate", 'd'); prm->chirp_slope = tmp_d[0]; hdf5_read(tmp_d, input, "/S01", "", "Range Chirp Length", 'd'); prm->pulsedur = tmp_d[0]; hdf5_read(rec, input, "/", "", "Acquisition Mode", 'c'); hdf5_read(tmp_d, input, "/S01", "", "PRF", 'd'); prm->prf = tmp_d[0]; if (strcmp(rec, "SPOTLIGHT") == 0) { hdf5_read(tmp_d, input, "/S01", "SBI", "Line Time Interval", 'd'); prm->prf = 1.0 / tmp_d[0]; } hdf5_read(rec, input, "/", "", "Product Type", 'c'); if (strcmp(rec, "RAW_B") == 0) { // RAW hdf5_read(tmp_d, input, "/S01", "B001", "Range First Times", 'd'); prm->near_range = tmp_d[0] * c_speed / 2; hdf5_read(tmp_c, input, "/", "", "Scene Sensing Start UTC", 'c'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); prm->clock_start = str2double(tmp_c); date[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(date); } else if (strcmp(rec, "SCS_B") == 0) { // SLC hdf5_read(tmp_d, input, "/S01", "SBI", "Zero Doppler Range First Time", 'd'); prm->near_range = tmp_d[0] * c_speed / 2; hdf5_read(tmp_c, input, "/", "", "Reference UTC", 'c'); hdf5_read(tmp_d, input, "/S01", "SBI", "Zero Doppler Azimuth First Time", 'd'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); prm->clock_start = str2double(tmp_c) + tmp_d[0] / 86400.0; date[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(date); prm->fdd1 = 0.0; prm->fddd1 = 0.0; } else { // Unknown type fprintf(stderr, "Product type being nither RAW nor SLC...\n"); return (-1); } hdf5_read(tmp_c, input, "/", "", "Orbit Direction", 'c'); if (strcmp(tmp_c, "ASCENDING") == 0) { strasign(prm->orbdir, "A", 0, 0); } else { strasign(prm->orbdir, "D", 0, 0); } hdf5_read(tmp_c, input, "/", "", "Look Side", 'c'); if (strcmp(tmp_c, "RIGHT") == 0) { strasign(prm->lookdir, "R", 0, 0); } else { strasign(prm->lookdir, "L", 0, 0); } hdf5_read(dims, input, "/S01", "SBI", "", 'n'); // fprintf(stderr,"%d %d\n",(int)dims[0],(int)dims[1]); prm->bytes_per_line = (int)dims[1] * 4; prm->good_bytes = prm->bytes_per_line; prm->num_lines = (int)dims[0] - (int)dims[0] % 4; prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->num_rng_bins = prm->bytes_per_line / 4; prm->chirp_ext = 0; // fprintf(stderr,"%d\n",(int)dims[0]); // fprintf(stderr,"%u\n",tmp_i[0]); // fprintf(stderr,"%.15f\n",tmp_d[0]); // fprintf(stderr,"%s\n",tmp_c); printf("PRM set for Image File...\n"); return (1); } int hdf5_read(void *output, hid_t file, char *n_group, char *n_dset, char *n_attr, int c) { hid_t memtype, type, group = -1, dset = -1, attr = -1, tmp_id, space; herr_t status; size_t sdim; int ndims; tmp_id = file; if (strlen(n_group) > 0) { group = H5Gopen(tmp_id, n_group, H5P_DEFAULT); tmp_id = group; } if (strlen(n_dset) > 0) { dset = H5Dopen(tmp_id, n_dset, H5P_DEFAULT); tmp_id = dset; } if (strlen(n_attr) > 0) { attr = H5Aopen(tmp_id, n_attr, H5P_DEFAULT); tmp_id = attr; } if (c == 'c') { memtype = H5Tcopy(H5T_C_S1); type = H5Aget_type(tmp_id); sdim = H5Tget_size(type); sdim++; status = H5Tset_size(memtype, sdim); } else if (c == 'd') { memtype = H5T_NATIVE_DOUBLE; } else if (c == 'i' || c == 'n') { memtype = H5T_NATIVE_INT; } else if (c == 'f') { memtype = H5T_NATIVE_FLOAT; } if (tmp_id == attr) { status = H5Aread(tmp_id, memtype, output); } else if (tmp_id == dset && c == 'n') { space = H5Dget_space(dset); ndims = H5Sget_simple_extent_dims(space, output, NULL); } else { return (-1); } return (1); } GMTSAR_V5.7/preproc/CSK_preproc/src_raw/make_raw_csk000755 015705 000000 00000133420 13507242215 023405 0ustar00sandwellwheel000000 000000 H H__PAGEZERO(__TEXT__text__TEXT@o@__stubs__TEXTww__stub_helper__TEXTxx__const__TEXTzz__cstring__TEXT|h|__unwind_info__TEXT((__DATA N__nl_symbol_ptr__DATA.__got__DATA@0__la_symbol_ptr__DATAPpP8__data__DATA__common__DATAБ@NH__LINKEDITN "0wP PAA6(f /usr/lib/dyld6Zp5?s2   *(@ 8/usr/lib/libSystem.B.dylib 0 /usr/lib/libz.1.dylib @/usr/local/opt/szip/lib/libsz.2.dylib Hii/usr/local/opt/hdf5/lib/libhdf5.103.dylib Hff/usr/local/opt/hdf5/lib/libhdf5_hl.100.dylib Hii/usr/local/opt/hdf5/lib/libhdf5_cpp.103.dylib&`P)UHAWAVATSH0AIHHHE؃H=QH5"xUCI\$ oo11HmoIHyIt$H=tCHHcIT$HLIt$HHpoH5tHVoH5tHoHHuH=tHBHHHH7H@oHL AIt$HHnH5GtHnH5tHnHHuH=!tHBHHD HnIt$HHtnH5sHZnH5sHnHHuH=sHALHu HSnLmHHH;Eu1H0A[A\A^A_]mf.@UHAWAVAUATSHXIIIHHHEADž\ADždH?IH@I0(oA I0H50t11KADžf(ofAHHL%mH5rH mLHmHLlH5SrHlIHlHLlH5sHlIHlH5Xr1L2lH5Os1HkH=lHH0ILHLkHI8H5q1LkH5s1HkHkI6HLkHIP1LL5qLkH5r1HWkHkHrH0HL@kHI@1LLIkH5r1HkHTkH)H0HLMjHIHH sLcrLAcLLHp 1LH5pjH5=r1HjHjHH0HLzjHIH5rLMkumH5p1LljH5q1HCjH5q1H jHfjH;H0HHj)m^AHpH rLqHAcHL H5qHjtEH5qHj;HށHH=q)7joH=Lr?jH5o1LniH5o1HEiH5q1H"iHhiH=H0HHiY+lY+lAHnH |qLpHAcHL L LHJHLPHKAƅ$LJYkXAH=p.iH5n1L]hH5o1H4hH5%p1HhHWhL5,I6HHgYkYkAHmH kpLnLAcLL1LH5mg1HH55ogH5o1HogHgI6HH[gH HLILH*OLI^ jjXAƅ$H~IYFjXAIDžIDžxHlH ioL*oHAcHLH5oHgI t H5 oH5o11DHlH oLnHAcHLBH5nH'gI(t H5nH5n11?DHLlH JlLnHAnL ALAPW*^iADžl` ,i` AhAW*A^^hAXAAXW*A^ hADž WZX[hADž`,AXH=meH =}H H;MuHX[A\A]A^A_]7ef.UHAWAVAUATSH/HIH|HHEH5j1IdH5t1LL^IIAD$ w`H HcH^HvrHA>u^HovH8{^IL4^Hn^HpLh^M9u3LLHU^HY^H6v K^H vL0M9t͸Anu I9uH]1HHu]H[A\A]A^A_]fY<HH5`1VXI>H5`1HBXI>`H5`1+XI>H5`1XI>TH5`1WI>HH5`1WI>H5`WI>dH5`1WI>HH5`1WI>HH5`1WI>0H5`lWI>pH5`1UWI>lH5`1>WI>HH5`1&WI>XH5` WI>`H5`VI>hH5`VI>tH5`1VI>xH5`1VI>H5`VI>H5`{VI>H5`bVI>H5`IVI>\H5`12VI>H5`1VI>8H5`VI>H5`[A^]UUHAWAVSPIIH5i`LUHHuH=T`L(L"HL1H[A^A_]f.UHHXXXXXXXXHHHHHH HHHHH0H(H (4XHXHayayHhLJpaytLJayLJayLJay(WHt$iH(8HXhxHH(]f.UHAWAVAUATSHIHHH[kHHEL%lA<$t9HGkH H=`^SH H=X^,SHPHHQSHIHIHIHIHIHIHIHI H IH(I H0I(H8I0H@HPLPLf.Dƅ1HH5v]LHPMRLH5c]RH`uALLRA<$u/HiH81HLH (]MRf.@LH5]5Ru=HL(RA<$u'HxiH81HLH \MQfDLH5\Qu=HLQA<$u'H(iH81HLH \MnQfDLH5\Qu=HLQA<$u'HhH81HLH Q\MQfDLH5G\EQu=HL8QA<$u'HhH81HLH \MPfDLH5\Pu=HLPA<$u'H8hH81HLH [M~PfDLH5[Pu=HLPA<$u'HgH81HLH [M.PfDLH5s[UPu=HLHPA<$u'HgH81HLH ;[MOfDLH50[Pu=H LOA<$u'HHgH81HLH ZMOfDLH5ZOu=H(LOA<$u'HfH81HLH ZM>OfDLH5ZeOu=H0LXOA<$u'HfH81HLH jZMNfDLH5YZOu=H8LOA<$u'HXfH81HLH !ZMNfDLH5ZNu=H@LNA<$u'HfH81HLH YMNNfDLH5YuNuML NAA<$u7HeH81H5]\LH YMAMf.LH5mYNuMLMAA<$u7HVeH81H5[LH /YMAMf.LH5YMuMLIMALA<$u7HdH81H5[LH XMA5Mf.LH5XUMuMLLAPA<$u7HdH81H5=[LH XMALf.LH5zXLuMLLATA<$u7H6dH81H5ZLH LH5bL%?u=L>AxA<$u%HfVH8H5!MLH $LM>LH5L>u=Lc>AA<$u%HVH8H5LLH KMX>LH5K>u=L>AA<$u%HUH8H5LLH KM>LH5K5>u=L=AA<$u%HvUH8H51LLH IKM=LH5AK=u=Ls=AA<$u%H&UH8H5KLH KMh=LH5J=u=L#=AA<$u%HTH8H5KLH JM=LH5JE=u=L<AA<$u%HTH8H5AKLH wJM<LH5qJ<u=L<AA<$u%H6TH8H5JLH 3JMx<LH5-J<u=L3<AA<$u%HSH8H5JLH IM(<LH5IU<u=L;AA<$u%HSH8H5QJLH IM;LH5I<u=L;AA<$u%HFSH8H5JLH nIM;LH5iI;u=LC;AA<$u%HRH8H5ILH +IM8;LH5%Ie;u=L:AA<$u%HRH8H5aILH HM:LH5H;u=L:AA<$u%HVRH8H5ILH HM:LH5H:u=LS:AA<$u%HRH8H5HLH ^HMH:LH5VHu:u=L:AA<$u%HQH8H5qHLH HM9LH5H%:u=L9A A<$u%HfQH8H5!HLH GM9LH5G9u=Lc9A(A<$u%HQH8H5GLH GMX9HHH89HHPHH;EuH[A\A]A^A_]8f.fUHAWAVSPHIIHH,9HR8u+HwPH8H5G1LLIH[A^A_]8H[A^A_]UHAWAVATSHIIIHe8AHQ8u)HPH8H5F1LLM[A\A^A_]O8[A\A^A_]f.@UHAWAVATSHIIIH7H>Q8u)HOH8H5_FLLM[A\A^A_]7[A\A^A_]f.DUHAWAVSPILupaytH5F1L7AaytH5F1Lx7ATaytH5F1LX7IH5BH7tH5E1LH%7Af.\:u{H5EL6AdaytH5E1L6IH5AH7tH5E1LH6IH5XAH6tH5E1LHy6A0f.9u{H5}ELS6ApaytH5pE1L36AlaytH5bE1L6IH5@HF6tH5GE1LH5AXf.9u{H55EL5A`f.8u{H5'EL5Ahf.8u{H5ELn5AtaytH5E1LN5AxaytH5E1L.5Af.e8u{@AH5DL4Af.68u{H5DL4Af.8u{H5DL4Af.7u{H5DL4A\aytH5D1Lm4AaytH5D1LM4A8f.7u{H5DL'4H5>La4tH5D1LL3AhaytH5qD1L3ALaytH5fD1L3APaytH5]D1L3Af.6u{H5RDLu3AHf.6u{H5:DLO3Af.6u{H5&DL)3AaytH5D1L 3AXaytH5 D1L2Af. 6u{H5CL2Af.5u{H5CL2Af.5u{H5CLw2Af.5u{H5CLQ2IH5<H2tH5C1LH2I H5<HQ2tH5C1LH1I(H5<H2tH5~C1LH1APf.4u{H5dCL1A@f.4u{H5WCLl1A8f.4u{H5ECLF1A f.}4u{H57CL 1A(f.W4u{H5"CL0Af.14u{H5 CL0Af. 4u{H5BL0Af.3u{H5BL0Af.3u{H5BLb0Af.3u{H5BL<0Af.s3u{H5BL0Af.M3u{H5BL/Apf.'3u{H5BL/Axf.3u{H5BL/Af.2u{H5lBL~/Af.2u{H5VBLX/Af.2u{H5PBL2/Af.i2u{H5JBL /Af.C2u{H5DBL.Af.2u{H5>BL.Af.1u{H58BL.Af.1u{H53BLt.Af.1u{H5-BLN.Af.1u{H5'BL(.Af._1u{H5"BL.Af.91u{H5BL-A f.1u{H5BL-A(f.0u{H5BL-IH5<8H-tH5B1LH]-I0H5 8H-tH5A1LH*-Af.a0u{H5AL-H[A^A_]ÐUH]DUH]DUHHHHgDH8H5A1,,@UHGOYFYN\OYFY\JOYFY\B]UHYfOfYXXWQ]UHW\VfOfFf\YfYXXWQ]UH\fff\YfYXXQ]UHOf(YYXWYXWQ^G^FG^F]fUHpY-*)X(^XW*f(X^XhW*^X]UHSPÍ9|HC8tHL'Hcd@MSI9JHHk'LH(f.DLLA'H LH5'IiMcIiM< LH5;&t%H L&L(f.AL t4H1L(fʀЀ w Hc0 HÄu 1L(HƄ0H0,HHi`H5=LM&%?HcExA9f.fM6I9-IiA|KH;L uCIiMcIt:9|IiA@HL Lc; S4H<HH=:$;%E1L LtLMiN48H5$: L%LL$L(L nHB<H8H591L$`IiIcHiAIL1ڀЀ w HcA\HuIiAIL1ڀЀ w HcHu^AtrH(JL8I1L f.DڀЀ w HcHu91HAD_1HƄHL B1L(L HƄH,HHi`H5:L}#L?#IiAH :H H;MuH[A\A]A^A_]"DUHAWAVAUATSPtGAIDE1 A HA9uAE9tL"H9w۸ˉH[A\A]A^A_]ÐUHAWAVAUATSHxH:HHEиAA)AAIA~*HOutOfSpaHG fGceQ;xuL`|McMcMKM)LIKDH9vJK LH9LHHNHHHÃH`01HLaƅ`-HcIXAIA0f.HIH)ƃ WABCHIH HwCItum1HAH$fHxHAf.L9vB<6t A>tH3HH9v<>HIuHH HE1Af.@HHIL9wLLL!fDADDܬLLLЬD Icր|/u%AHHHDXHHHH71IiM4 I IDŽ IDŽ MtUHȬLhIiL LH5(L6HLDIպLLLHȬHDŽHiHHL3ܬLuHcA|/AEH9mHLLZf.@HI HLȬIiHHH5'}I_LLLHHiLLLLЬ?JHAAHHiENܬLHuHcA|/I]LH HHH HLiK<<9LLxH(=A$CfCEDCLOS%AHiȬH)H1ڀЀ w Hc0HuDLLLjHЬHLJHFHHiANENܬLHuHcA|/I]LH HHH LiK<49L)HL\L1HKDŽ<G<CDŽ<AFfAFEDACLOSHȬL1HƄ0H01,HHi`H5&HHLLLHHwt HЬ(AFfAFEDACLOSHЬHHȬLHË5(LLMIHBWHЬKDŽ4G4CDŽ4@f@EDCLOSLHLLLuHi'H%H8H5#1DH4H %H H;MuHHS[A\A]A^A_] UHAWAVSPEIAFHHiH<9}QIDŽEADŽH[A^A_]ÐUHAWAVSPt;I1A C>Iǹ< t < uL L9w1ۉH[A^A_]fDUHydu-HA xA LDLcHA01LI WABшL>HM9IvD>Ht8D>H|*HHf.NFHH9Hvr]ÐUHAWAVAUATSHAAIH $HHEЅu H=" E~!Gt-1f h D9|LHIcLiC4uC4u =0 O4K4H5;! H4 t(DO4C4EEH=!1HLPD\t0KL41ڀЀ w Hc`Hu1HƄ`H`&,HHi`H5"O4C4LPEEH= !1\? A7HHt SLiAut LVH"HH;EuHĘ[A\A]A^A_]t f.UH*Y*% f(X^- f: XY- Y- Wf: \Y ^Wf: W*X WA*^XW*^X^ XX X]UHAWAVAUATSHIHXHk!HHEH IE~X1L`E11fDIcA< u0ANLLLO,HcHXADAE9|11ۍBD9}0L`LLDL,HcHXH HH;EuHĈ[A\A]A^A_]UHAWAVAUATSHIHXHk HHEH IE~j1L`E11fDIcAH w>HHs.ANLLL;HcHXADAE9|11ۍBD9}.L`LLDLHcHXHHH;EuHĈ[A\A]A^A_]UH帀H @!ƄVƄ@Ƅ@+ƄHH=7_u ]f.UHAWAVATSIIILLH<sHHLHHLLHrH4[A\A^A_]fUHAVS~I Lu[A^]DUHAWAVAUATSHHAIH\HHEHcLiN4/H5 LtAu^H51HL}HAKL/1ڀЀ w HcHuH5*H1LQAuH5H1HKc/LiO$/H5& L.H5L1HLL21HƄHAu"U,HHi`H H5jB3,HHi`H=H5NH1xAu!H57H1H Kc/LiK'H5I HBK/H,HHi`HTHcHiLH5L1H"HA$tfKL/1f.ڀЀ w HcHu2trKL'1ڀЀ w Hc HuJ1HƄH,HHi`H H5L1HLe1HƄ H,HHi`L=LH k,HHi`LH5L1HHtHHH;EuH[A\A]A^A_]UHAWAVAUATSHMH}HMЍ EHuAԅt }"B'H= L}~"]f.@ LuH]H;McMiJc7HHiDLH;B7SEHEDtAf.D9e~"D L1uHEH8IiLHEH8LcMtAIiAteDLH;B7tHEЍH}HMZH;B7t}HHMM8H;B7tH[A\A]A^A_]B7uEtHEDtAD9e~"D L!uHEH8IiL HEH8LcMkAIiAtN%b%d%f%h%j%l%n%p%r%t%v%x%z%|%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LAS%hh'h7hNhdh}hhhhhhxhnhdhZhPhFh-@?$$ Usage: make_raw_csk name_of_input_file name_output Example: make_raw_csk CSKS2_SCS_B_HI_09_HH_RA_SF_20090412050638_20090412050645.h5 CSK_20090412 Output: CSK_20090412.raw CSK_20090412.PRM CSK_20090412.LED Couldn't open HDF5 file: .PRMwCouldn't open prm file: .LEDCouldn't open led file: .rawwbCouldn't open tiff file: /Analog Cal Reconstruction Levels/S01B001Writing raw..Image Size: %d X %d... %d %d %d %.3lf %.3lf %d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf Number of State VectorsReference UTCState Vectors TimesECEF Satellite PositionECEF Satellite Velocity%d Lines Written for Orbit... a.SLCSampling RateRadar WavelengthRange Chirp RateRange Chirp LengthAcquisition ModePRFSPOTLIGHTSBILine Time IntervalProduct TypeRAW_BRange First TimesScene Sensing Start UTCSCS_BZero Doppler Range First TimeZero Doppler Azimuth First TimeProduct type being nither RAW nor SLC... Orbit DirectionASCENDINGADLook SideRIGHTRLProduct Type being SLC...PRM set for Image File...Product Type being RAW... default settings ************* led_file = %s input_file = %s num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq(iqflip) = %s offset_video(off_vid) = %s az_res = %lf nlooks = %d chirp_ext(nextend) = %d scnd_rng_mig(srm) = %s rng_spec_wgt(rhww) = %lf rm_rng_band(pctbw) = %lf rm_az_band(pctbwaz) = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate(fs) = %lf near_range = %lf rcan't open fileXXXXXXXXget_sio_struct: PRMname (PRM value) interpreted value %s %s %sinput_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdtypenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangeI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startbaseline_centerbaseline_endalpha_startalpha_centeralpha_endSLC_scaleB_offset_startB_offset_centerB_offset_end %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %g stretch_a = %g a_stretch_r = %g a_stretch_a = %g first_sample = %d SC_identity = %d rng_samp_rate = %.6f input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d PRF = %lf pulse_dur = %e near_range = %lf num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s orbdir = %s lookdir = %s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %.6f I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %lf fddd1 = %lf sub_int_r = %lf sub_int_a = %lf B_parallel = %lf B_perpendicular = %lf baseline_start = %lf baseline_center = %lf baseline_end = %lf alpha_start = %lf alpha_center = %lf alpha_end = %lf B_offset_start = %lf B_offset_center = %lf B_offset_end = %lf SLC_file = %s dtype = %.1s SLC_scale = %lf %s %s find_fft_length: ...data length n %d nfft %d geo2latlon: %8.3f %8.3f %8.0f OutOfSpaceUnable to find designated string...after %ld searches.. Unable to find designated string... CLOSEDNot an well formatted XML file...%d, %d %s (%d,%d,%d) %.12f<%s> %s <%s>%s In the brackets the numbers are (count, child, sibling)44X a!@LLwL @ p0 @`778pCE`FQ0RW`b ccepfhhPiiBzLzVz`zjztz~zzzzzzzzz yy y*y4y>yHyRy\yfypyzyyyyyyyyyyyyyyzzz$z.z8z|' `"8p`/@___stack_chk_guardQr@@___stderrp@dyld_stub_binder@_H5T_C_S1_g@_H5T_NATIVE_DOUBLE_g@_H5T_NATIVE_FLOAT_g@_H5T_NATIVE_INT_g@_H5T_STD_U8LE_grP@_H5Aget_typerX@_H5Aopenr`@_H5Areadrh@_H5Dget_spacerp@_H5Dopen2rx@_H5Dreadr@_H5Fcloser@_H5Fopenr@_H5Gopen2r@_H5Sget_simple_extent_dimsr@_H5Tcopyr@_H5Tget_sizer@_H5Tset_sizer@_H5check_versionr@_H5openr@___bzeror@___exp10r@___sincos_stretr@___sprintf_chkr@___stack_chk_failr@___strcat_chkr@___strcpy_chkr@_acosr@_atanr@_atan2r@_atofr@_atoir@_cosr@_exitr@_fcloser@_fgetsr@_fopenr@_fprintfr@_fputcr@_freer@_fwriter@_mallocr@_powr@_printfr@_putcharr@_putsr@_sscanfr@_strcmpr@_strcpyr@_strlenr@_strncmp__mh_execute_headermainpwrite_hdf5_readxyz2plhsgenidcfassemble_treesUSAGEMAX_NSquroi_flag verbose op_lh2xyzrut_sio_structprm_hdf5led_hdf5&orbraw_hdf5+-146etrpace_counthow_treeio_flag wap t_prm_defaultsarch_tree=int_efix_strprm_defaultsspacetree@t_o2latlonprmsintdoubletreeEull_odatasio_structMEM_STRFio_structtringecondsIs_big_endian_toa_xml_ieate2MJDebugoppЗrat_numsoss3eate_childind_orcelengthdistanceunit_vectorfft_length3Йlocateasign2_date2JDdintsoublebsTREE_SIZECHAR_SIZEȣ̣УAR_modeTR ԣأܣ_sloped_slopead_pol iet_flag `5`pp0`0@0`Ppp@ ```p0<0 ̑ ȑ  Б# ԑ- 2 9M`u]0ZgjuL}m ؑK ܑLLM`LM  0Np@@$"-`M:$J?Vb`kK{K`k@ p0#p0  q qq!@1 ; G QN^pl{ kopZn_ VU  `%3=FPYc~ #3BTgr  (09ABCDEFGHIJPQRSTUVWXY\]^_`abcdefghijklmnopqrstuv@KLMNOZ[ABCDEFGHIJPQRSTUVWXY\]^_`abcdefghijklmnopqrstu _MAX_CHAR_SIZE_MAX_TREE_SIZE_N_SAR_mode_STR_USAGE__mh_execute_header_assemble_trees_cat_nums_create_child_cross3_date2MJD_debug_die_dopp_find_distance_find_distance3_find_fft_length_find_length_find_unit_vector_force_slope_forced_slope_geo2latlon_get_double_get_int_get_prm_get_seconds_get_sio_struct_get_string_get_tree_hdf5_read_is_big_endian__is_big_endian___itoa_xml_main_nodata_null_MEM_STR_null_sio_struct_plh2xyz_pop_led_hdf5_pop_prm_hdf5_prefix_str_print_prm_defaults_print_space_print_tree_put_sio_struct_quad_pol_quiet_flag_roi_flag_search_tree_set_prm_defaults_show_tree_sio_flag_space_count_str2dbs_str2double_str2ints_str_date2JD_strasign_strlocate_swap_verbose_write_orb_write_raw_hdf5_xyz2plh_H5Aget_type_H5Aopen_H5Aread_H5Dget_space_H5Dopen2_H5Dread_H5Fclose_H5Fopen_H5Gopen2_H5Sget_simple_extent_dims_H5T_C_S1_g_H5T_NATIVE_DOUBLE_g_H5T_NATIVE_FLOAT_g_H5T_NATIVE_INT_g_H5T_STD_U8LE_g_H5Tcopy_H5Tget_size_H5Tset_size_H5check_version_H5open___bzero___exp10___sincos_stret___sprintf_chk___stack_chk_fail___stack_chk_guard___stderrp___strcat_chk___strcpy_chk_acos_atan_atan2_atof_atoi_cos_exit_fclose_fgets_fopen_fprintf_fputc_free_fwrite_malloc_pow_printf_putchar_puts_sscanf_strcmp_strcpy_strlen_strncmpdyld_stub_binderGMTSAR_V5.7/preproc/CSK_preproc/src_raw/Makefile000644 015705 000000 00000000645 13505462014 022472 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_raw_csk CSRCS = make_raw_csk.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar $(HDF5_CPPFLAGS) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC $(HDF5_LDFLAGS) $(HDF5_LIBS) -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/CSK_preproc/src_raw/make_raw_csk.c000644 015705 000000 00000026553 13505462014 023632 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 09/09/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "hdf5.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include #include #include #include int pop_prm_hdf5(struct PRM *, hid_t, char *); int pop_led_hdf5(hid_t, state_vector *); int write_orb(state_vector *sv, FILE *fp, int); int write_raw_hdf5(hid_t, FILE *); int hdf5_read(void *, hid_t, char *, char *, char *, int); void set_prm_defaults(struct PRM *); /*static inline unsigned long long bswap_64(unsigned long long x) { return (((unsigned long long)bswap_32(x&0xffffffffull))<<32) | (bswap_32(x>>32)); }*/ char *USAGE = "\n\nUsage: make_raw_csk name_of_input_file name_output\n" "\nExample: make_raw_csk " "CSKS2_SCS_B_HI_09_HH_RA_SF_20090412050638_20090412050645.h5 CSK_20090412\n" "\nOutput: CSK_20090412.raw CSK_20090412.PRM CSK_20090412.LED\n"; int main(int argc, char **argv) { int MAX_CHAR_SIZE = 60000, MAX_NUM_SIZE = 1000; FILE *OUTPUT_PRM, *OUTPUT_raw, *OUTPUT_LED; char tmp_str[200]; char *buff_c, *buff_o; double *buff_d; int *buff_i; struct PRM prm; // tree *xml_tree; state_vector sv[200]; int n; hid_t file; buff_c = (char *)malloc(MAX_CHAR_SIZE * sizeof(char)); buff_o = (char *)malloc(MAX_CHAR_SIZE * sizeof(char)); buff_d = (double *)malloc(MAX_NUM_SIZE * sizeof(double)); buff_i = (int *)malloc(MAX_NUM_SIZE * sizeof(double)); if (argc < 3) die(USAGE, ""); // generate the xml tree // if ((INPUT_FILE = fopen(argv[1],"r")) == NULL) die("Couldn't open xml file: // \n",argv[1]); if ((file = H5Fopen(argv[1], H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) die("Couldn't open HDF5 file: \n", argv[1]); // initiate the prm null_sio_struct(&prm); // generate the PRM file pop_prm_hdf5(&prm, file, argv[2]); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); // generate the LED file n = pop_led_hdf5(file, sv); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // generate the raw file strcpy(tmp_str, argv[2]); strcat(tmp_str, ".raw"); if ((OUTPUT_raw = fopen(tmp_str, "wb")) == NULL) die("Couldn't open tiff file: \n", tmp_str); write_raw_hdf5(file, OUTPUT_raw); fclose(OUTPUT_raw); H5Fclose(file); } int write_raw_hdf5(hid_t input, FILE *raw) { int width, height; unsigned char *buf; hsize_t dims[10]; hid_t memtype, dset, group; herr_t status; int kk, ntot; double lut[1000], lut_max; for (kk = 0; kk < 1000; kk++) lut[kk] = 0; hdf5_read(lut, input, "/", "", "Analog Cal Reconstruction Levels", 'd'); lut_max = 0; for (kk = 0; kk < 1000; kk++) if (fabs(lut[kk]) > lut_max) lut_max = fabs(lut[kk]); // lut_max = lut_max*1.41421; hdf5_read(dims, input, "/S01", "B001", "", 'n'); height = (int)dims[0]; width = (int)dims[1]; ntot = height * width; buf = (unsigned char *)malloc(height * width * sizeof(unsigned char) * 2); group = H5Gopen(input, "/S01", H5P_DEFAULT); dset = H5Dopen(group, "B001", H5P_DEFAULT); // data come as signed character with zero mean memtype = H5T_STD_U8LE; status = H5Dread(dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf); for (kk = 0; kk < ntot * 2; kk++) buf[kk] = (unsigned char)(127.0 * lut[(int)buf[kk]] / lut_max + 127.0); printf("Writing raw..Image Size: %d X %d...\n", width, height); /* write the data file */ fwrite(buf, sizeof(unsigned char), height * width * 2, raw); free(buf); return (1); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 1e4) / 1e4 - trunc((sv[0].sec) * 1e4) / 1e4; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.3lf %.3lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led_hdf5(hid_t input, state_vector *sv) { int i, count, iy; char tmp_c[200], date[200]; double t[200], t0, t_tmp; unsigned short tmp_i[200]; double x[600], v[600]; hdf5_read(tmp_i, input, "/", "", "Number of State Vectors", 'i'); count = tmp_i[0]; hdf5_read(tmp_c, input, "/", "", "Reference UTC", 'c'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); t0 = str2double(tmp_c); date[4] = '\0'; iy = (int)str2double(date); hdf5_read(t, input, "/", "", "State Vectors Times", 'd'); hdf5_read(x, input, "/", "", "ECEF Satellite Position", 'd'); hdf5_read(v, input, "/", "", "ECEF Satellite Velocity", 'd'); // fprintf(stderr,"%.15f\n",x[3]); for (i = 0; i < count; i++) { t_tmp = t[i] / 86400.0 + t0; sv[i].yr = iy; sv[i].jd = (int)(t_tmp - trunc(t_tmp / 1000.0) * 1000.0); sv[i].sec = (t_tmp - trunc(t_tmp)) * 86400.0; sv[i].x = (double)x[i * 3]; sv[i].y = (double)x[i * 3 + 1]; sv[i].z = (double)x[i * 3 + 2]; sv[i].vx = (double)v[i * 3]; sv[i].vy = (double)v[i * 3 + 1]; sv[i].vz = (double)v[i * 3 + 2]; // fprintf(stderr,"%d %d %.3f %.6f %.6f %.6f %.8f %.8f %.8f // \n",sv[i].yr,sv[i].jd,sv[i].sec,x[i*3],x[i*3+1],x[i*3+2],v[i*3],v[i*3+1],v[i*3+2]); } printf("%d Lines Written for Orbit...\n", count); return (count); } int pop_prm_hdf5(struct PRM *prm, hid_t input, char *file_name) { char tmp_c[200], rec[100], date[100]; double tmp_d[200]; double c_speed = 299792458.0; hsize_t dims[10]; int nrng = 0; set_prm_defaults(prm); /* use many default values */ prm->first_sample = 0; prm->st_rng_bin = 1; prm->SLC_scale = 1.0; prm->az_res = 3.0; prm->xmi = 127.0; /* this is the mean value of one pair. need to do more */ prm->xmq = 127.0; strasign(prm->dtype, "a", 0, 0); prm->SC_identity = 8; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); hdf5_read(tmp_d, input, "/S01", "", "Sampling Rate", 'd'); prm->fs = tmp_d[0]; hdf5_read(tmp_d, input, "/", "", "Radar Wavelength", 'd'); prm->lambda = tmp_d[0]; hdf5_read(tmp_d, input, "/S01", "", "Range Chirp Rate", 'd'); prm->chirp_slope = tmp_d[0]; hdf5_read(tmp_d, input, "/S01", "", "Range Chirp Length", 'd'); prm->pulsedur = tmp_d[0]; hdf5_read(rec, input, "/", "", "Acquisition Mode", 'c'); hdf5_read(tmp_d, input, "/S01", "", "PRF", 'd'); prm->prf = tmp_d[0]; if (strcmp(rec, "SPOTLIGHT") == 0) { hdf5_read(tmp_d, input, "/S01", "SBI", "Line Time Interval", 'd'); prm->prf = 1.0 / tmp_d[0]; } hdf5_read(rec, input, "/", "", "Product Type", 'c'); if (strcmp(rec, "RAW_B") == 0) { // RAW printf("Product Type being RAW...\n"); hdf5_read(tmp_d, input, "/S01", "B001", "Range First Times", 'd'); prm->near_range = tmp_d[0] * c_speed / 2; hdf5_read(tmp_c, input, "/", "", "Scene Sensing Start UTC", 'c'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); prm->clock_start = str2double(tmp_c); date[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(date); } else if (strcmp(rec, "SCS_B") == 0) { // SLC printf("Product Type being SLC...\n"); hdf5_read(tmp_d, input, "/S01", "SBI", "Zero Doppler Range First Time", 'd'); prm->near_range = tmp_d[0] * c_speed / 2; hdf5_read(tmp_c, input, "/", "", "Reference UTC", 'c'); hdf5_read(tmp_d, input, "/S01", "SBI", "Zero Doppler Azimuth First Time", 'd'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); prm->clock_start = str2double(tmp_c) + tmp_d[0] / 86400.0; date[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(date); prm->fdd1 = 0.0; prm->fddd1 = 0.0; } else { // Unknown type fprintf(stderr, "Product type being nither RAW nor SLC...\n"); return (-1); } hdf5_read(tmp_c, input, "/", "", "Orbit Direction", 'c'); if (strcmp(tmp_c, "ASCENDING") == 0) { strasign(prm->orbdir, "A", 0, 0); } else { strasign(prm->orbdir, "D", 0, 0); } hdf5_read(tmp_c, input, "/", "", "Look Side", 'c'); if (strcmp(tmp_c, "RIGHT") == 0) { strasign(prm->lookdir, "R", 0, 0); } else { strasign(prm->lookdir, "L", 0, 0); } hdf5_read(dims, input, "/S01", "B001", "", 'n'); prm->bytes_per_line = (int)dims[1] * 2; prm->good_bytes = prm->bytes_per_line; prm->num_rng_bins = prm->bytes_per_line / 2; /* pad the near and far range with 1200 samples */ prm->chirp_ext = 2400; nrng = 2 + (int)(prm->num_rng_bins / 1200.); prm->num_rng_bins = 1200 * nrng; prm->num_lines = (int)dims[0] - (int)dims[0] % 4; prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = 8192; prm->num_valid_az = 6400; prm->num_patches = (int)((float)prm->num_lines / prm->num_valid_az + 0.5); printf("PRM set for Image File...\n"); return (1); } int hdf5_read(void *output, hid_t file, char *n_group, char *n_dset, char *n_attr, int c) { hid_t memtype, type, group = -1, dset = -1, attr = -1, tmp_id, space; herr_t status; size_t sdim; int ndims; tmp_id = file; if (strlen(n_group) > 0) { group = H5Gopen(tmp_id, n_group, H5P_DEFAULT); tmp_id = group; } if (strlen(n_dset) > 0) { dset = H5Dopen(tmp_id, n_dset, H5P_DEFAULT); tmp_id = dset; } if (strlen(n_attr) > 0) { attr = H5Aopen(tmp_id, n_attr, H5P_DEFAULT); tmp_id = attr; } if (c == 'c') { memtype = H5Tcopy(H5T_C_S1); type = H5Aget_type(tmp_id); sdim = H5Tget_size(type); sdim++; status = H5Tset_size(memtype, sdim); } else if (c == 'd') { memtype = H5T_NATIVE_DOUBLE; } else if (c == 'i' || c == 'n') { memtype = H5T_NATIVE_INT; } else if (c == 'f') { memtype = H5T_NATIVE_FLOAT; } if (tmp_id == attr) { status = H5Aread(tmp_id, memtype, output); } else if (tmp_id == dset && c == 'n') { space = H5Dget_space(dset); ndims = H5Sget_simple_extent_dims(space, output, NULL); } else { return (-1); } return (1); } GMTSAR_V5.7/preproc/ERS_preproc/read_data_file_dpaf/000755 015705 000000 00000000000 13507242234 023275 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ERS_preproc/ers_line_fixer/000755 015705 000000 00000000000 13507242234 022375 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ERS_preproc/Makefile000644 015705 000000 00000001113 13505462014 021032 0ustar00sandwellwheel000000 000000 include ../../config.mk DIRS = ers_line_fixer read_data_file_dpaf read_data_file_ccrs read_sarleader_dpaf SCRIPT = scripts all: for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done $(INSTALL) $(SCRIPT)/dump_orbit_ers.pl $(bindir) $(INSTALL) $(SCRIPT)/ERS_pre_process $(bindir) uninstall: for d in $(DIRS); do \ (cd $$d; $(MAKE) uninstall); \ done rm -f $(bindir)/dump_orbit_ers.pl rm -f $(bindir)/ERS_pre_process clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done spotless: clean GMTSAR_V5.7/preproc/ERS_preproc/include/000755 015705 000000 00000000000 13505462014 021021 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_ccrs/000755 015705 000000 00000000000 13505462014 023345 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ERS_preproc/scripts/000755 015705 000000 00000000000 13507242167 021074 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_dpaf/000755 015705 000000 00000000000 13507242234 023327 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ERS_preproc/read_data_file_ccrs/000755 015705 000000 00000000000 13507242234 023315 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ERS_preproc/utility/000755 015705 000000 00000000000 13505462014 021101 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ERS_preproc/utility/makefile_sun000644 015705 000000 00000000303 13505462014 023462 0ustar00sandwellwheel000000 000000 # # Makefile for ccrs2dpaf and dopiq. # cc = gcc flag = -O2 SLIB = ../../../../lib/sun4/libsiosar.a ccrs2dpaf: ccrs2dpaf.c cc ccrs2dpaf.c -o ../../../../bin/sun4/ccrs2dpaf clean: rm -f *.o GMTSAR_V5.7/preproc/ERS_preproc/utility/ccrs2dpaf.c000644 015705 000000 00000002552 13505462014 023120 0ustar00sandwellwheel000000 000000 /* program to transform CCRS format to DPAF format of ERS data method: CCRS has 12060 bytes per line. DPAF has 11644. Read 12060 bytes from CCRS file and print 11644 bytes to new file */ #include "../include/soi.h" #include main(argc, argv) int argc; char *argv[]; { char *ifile, *ofile; /* input file and output file*/ FILE *fopen(), *fpi, *fpo; unsigned char *indata; int ccrs_length = 12060, dpaf_length = 11644; int n; if (argc < 3) { fprintf(stderr, "Usage: %s ccrs_raw out_file \n", argv[0]); exit(-1); } if ((fpi = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "Can't open file %s \n", argv[1]); exit(-1); } if ((n = fseek(fpi, ccrs_length, 0)) != 0) { perror(argv[0]); exit(-1); } if ((fpo = fopen(argv[2], "w")) == NULL) { fprintf(stderr, "Can't open output file %s \n", argv[2]); exit(-1); } /* allocate memory */ if ((indata = (unsigned char *)malloc(ccrs_length * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } /* read data */ while (n = (fread((void *)indata, sizeof(unsigned char), ccrs_length, fpi)) == ccrs_length) { memcpy(indata + 210, indata + 200, 8); if (n = (fwrite((void *)indata, sizeof(unsigned char), dpaf_length, fpo)) != dpaf_length) { fprintf(stderr, "Problem writing data \n"); } } fclose(fpi); fclose(fpo); } GMTSAR_V5.7/preproc/ERS_preproc/read_data_file_ccrs/Makefile000644 015705 000000 00000000520 13505462014 024750 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = read_data_file_ccrs CSRCS = read_data_file_ccrs.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include LIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(LIBS) all: $(PROG) clean: rm -f $(OBJS) tags core *.c.* install: $(INSTALL) $(PROG) $(bindir)/$(PROG) uninstall: rm -f $(bindir)/$(PROG) GMTSAR_V5.7/preproc/ERS_preproc/read_data_file_ccrs/read_data_file_ccrs000755 015705 000000 00000032024 13507242212 027155 0ustar00sandwellwheel000000 000000 ` H__PAGEZERO(__TEXT __text__TEXT  __stubs__TEXTB__stub_helper__TEXT~__const__TEXT`H`__cstring__TEXT__unwind_info__TEXTP8__DATA  __nl_symbol_ptr__DATA   __got__DATA   __la_symbol_ptr__DATA( X( H__LINKEDIT00"000X`01hp1,3 P2 /usr/lib/dyld#qj?0 GG2   *( 8/usr/lib/libSystem.B.dylib&h1)p1UHAWAVAUATSH(IHBHHEЃ I~H5 IE1|TI~H5 u@Hder.logHHdataheadHH5 Hj HADHM H L; I IHHL@LHH@H0IEHIE HIE$H IE4HHLLIE8HPIE@HXIEDH`IEHHhM}PI]TMeXMU`M]dMuhHH5 LHLLLAVLASLARLATHSLAWh`XPH 0 HĀ( HHHHH5S L@LH'H@,HpHC1HxHC6HHC;HHC@HHCIHHCNHHCWHHC\HHSaHHSfHHSkHHSnHHSqH8HSvHHSH(HHHHHHHHLLLLL$HH@HLLL@ARL8AWL0AVL(ASL AT(8xpH/1LL HLHHL^HH5lLLLHLLh`XPH 0HxH5 LHLH@L@80( (8xpHHH'LcMis]LH?I*AH@AH8AA_ H(8AL @D뉅(A)ŋ`dɉ`ȉ0dhȉ hL= I?AH5 1DoI?H5 1D[I?H5 1HI?H5 1@1I?H5 1D/tHr H8H5 18LtHC H8H5 1(tH H8H5 1Dž@/1L/Hþ/HLsHYi0ȋ **^*XX0W* fWAE1E1ffffDWA*fXeYeW*Y [W*XE(8uVf(\f. 0uDzBWA*H H8f(YYX°H5 ,8AED9@f(Y ^ f(XX0@H1 IH8H5- I?H58 I?H5: 0I?H5: @fI?'^8H5) EAD@/HH%AH(H` HH;Eu1H([A\A]A^A_]H? H8IH51H HH=f.DUH]DUHE*XY]fUHE*Y EYXX]ÐUH]Ð% % % % % % % % % % % L! AS% hhh$h0h=hLhYhghthhpA@XO>@?p@"@Ô/۾Usage: %s datafile r-logdataheader.logwerror opening data file %2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c%6c%6c%24c%4c%4c%4c%4c%4c%8c%4c%8c%4c%4c%4c%4c%2c%2c%4c%8c%4c%48c%28c%32c%28c%4c%4c%4c%8c%10196c*********** SAR FDR FIXED SEGMENT *********** A_E_flag ==> %.2s blank_2 ==> %.2s for_con_doc ==> %.12s for_con_doc_rev_level ==> %.2s file_des_rev_level ==> %.2s softw_rel ==> %.12s file_number ==> %.4s file_name ==> %.16s rec_seq_loc_type_flag ==> %.4s seq_number_loc ==> %.8s seq_number_field_length ==> %.4s rec_code_loc_type_flag ==> %.4s rec_code_loc ==> %.8s rec_code_field_length ==> %.4s rec_len_loc_type_flag ==> %.4s rec_len_loc ==> %.8s rec_len_field_length ==> %.4s reserved_4 ==> %.4s reserved_segment ==> %.64s *********** SARDATA ********** n_record ==> %.6s record_length ==> %.6s blank1 ==> %.24s n_bits_per_sample ==> %.4s n_samples_data_group ==> %.4s n_bytes_per_data_group ==> %.4s justification ==> %.4s n_channels ==> %.4s n_lines ==> %.8s n_left_border_pixels ==> %.4s n_data_groups ==> %.8s n_right_border_pixels ==> %.4s n_top_border_lines ==> %.4s bottom_border_lines ==> %.4s interleaving ==> %.4s n_phys_records ==> %.2s n_phy_records_multi ==> %.2s n_bytes_prefix_data ==> %.4s n_bytes_SARdata_record ==> %.8s n_bytes_suffix_data ==> %.4s blank2 ==> %.48s blank3 ==> %.28s blank4 ==> %.32s data_format_type_id ==> %.28s data_format_type_code ==> %.4s n_left_fill_bits_pixel ==> %.4s n_right_fill_bits_pixel ==> %.4s max_data_range_pixel ==> %.8s blank_filler ==> %.10s num_lines = %d good_bytes_per_line = %d bytes_per_line = %d first_sample = %d num_patches = %d **** header_linelength (%d) != default linelength (LINELENGTH) **** header_prefix (%d) != default prefix (PREFIX) **** header_suffix (%d) != default suffix (SUFFIX) icu_start = %.3lf SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf PRF = %lf  444  X",6@JT"([@___stack_chk_guardQr@___stderrp@___stdoutp@dyld_stub_binderr(@___stack_chk_failr0@_atoir8@_exitr@@_fopenrH@_fprintfrP@_freadrX@_fscanfr`@_fseekrh@_fwriterp@_mallocrx@_strcmp__mh_execute_header8main #include #include #include #include #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) #define MIN_PRF 1640.0 #define MAX_PRF 1720.0 #define SEC_PER_PRI_COUNT 210.94e-09 #define LINELENGTH 12060 #define PREFIX 412 #define SUFFIX 416 #define IFC_OFF 200 #define SOL 299792456.0 int is_big_endian_(void); int is_big_endian__(void); int main(argc, argv) int argc; char *argv[]; { char *data, logfilename[255]; // int file_size,year; int prior_pri_dn; FILE *indata, *logfile; struct sarleader_binary slb; struct sardata_rec sdr; struct SAR_info sar; struct lineparam info; int endian; int logflag; int nlines, linelength, prefix, suffix; int num_patches, good_bytes_per_line, first_sample; int iwrite = 0; // char *iptr; int ncnt, print_start; unsigned short *icu_time1, *icu_time2; double icu_time, icu_time_old; double SC_clock_start, SC_clock_stop; double clock_start, clock_stop; struct lineparam { int ifc; unsigned short swst_dn; unsigned short pri_dn; double pri; double swst; }; double calc_pri(); double calc_swst(); logflag = 0; /*------------------------*/ /* check endian */ /*------------------------*/ endian = is_big_endian_(); if (argc < 2) { fprintf(stderr, "Usage: %s datafile\n", argv[0]); exit(1); } indata = fopen(argv[1], "r"); if ((argc > 3) && ((strcmp(argv[1], "-log") == 0))) { strcpy(logfilename, "dataheader.log"); logfile = fopen(logfilename, "w"); logflag = 1; } if (indata == NULL) { fprintf(stderr, "error opening data file\n"); exit(1); } /* read top of file */ (void)fread(&slb, sizeof(struct sarleader_binary), 1, indata); sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); /* read nominal parameters */ fscanf(indata, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); sar.dataheader = (struct sardata_header *)malloc(sizeof(struct sardata_header)); fscanf(indata, SARDATA_HEADER_RCS, SARDATA_HEADER_RVL(sar.dataheader)); /* reset file pointer and read first line of data */ fseek(indata, LINELENGTH, 0); (void)fread(&slb, sizeof(struct sarleader_binary), 1, indata); (void)fread(&sdr, sizeof(struct sardata_rec), 1, indata); if (logflag) { fprintf(logfile, SARLEADER_FDR_FIXSEG_WCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fprintf(logfile, SARDATA_HEADER_WCS, SARDATA_HEADER_RVL(sar.dataheader)); /*fprintf(logfile,SARDATA_REC_WCS, SARDATA_REC_RVL(&sdr));*/ } /* used in SAR processor - each patch is 2800 long */ nlines = atoi(sar.dataheader->n_records); num_patches = nlines / 2800; /* double-check length of line */ linelength = atoi(sar.dataheader->record_length); /* check data preifx and suffic; add 12 to prefix for top of file */ prefix = atoi(sar.dataheader->n_bytes_prefix_data) + 12; suffix = atoi(sar.dataheader->n_bytes_suffix_data); /* SAR processor needs to know where the first sample is so skip the dataheader (specified in equivalent samples - 2 bytes per sample) and subtract the data suffix (in bytes) */ first_sample = prefix / 2; good_bytes_per_line = linelength - suffix; /* set the spacecraft time */ if (endian == -1) { FIX_INT(sdr.year); FIX_INT(sdr.day_of_year); FIX_INT(sdr.msecs_of_day); } SC_clock_start = sdr.year * 1000 + (sdr.day_of_year) + (sdr.msecs_of_day) / (1000.0 * 3600.0 * 24.0); clock_start = sdr.day_of_year + (sdr.msecs_of_day) / (1000.0 * 3600.0 * 24.0); /* use PRI times the number of lines */ fprintf(stdout, "num_lines = %d\n", nlines - 1); fprintf(stdout, "good_bytes_per_line = %d\n", good_bytes_per_line); fprintf(stdout, "bytes_per_line = %d\n", linelength); fprintf(stdout, "first_sample = %d\n", first_sample); fprintf(stdout, "num_patches = %d\n", num_patches); if (linelength != LINELENGTH) { fprintf(stderr, "**** header_linelength (%d) != default linelength (LINELENGTH)\n", linelength); } if (prefix != PREFIX) { fprintf(stderr, "**** header_prefix (%d) != default prefix (PREFIX)\n", prefix); } if (suffix != SUFFIX) { fprintf(stderr, "**** header_suffix (%d) != default suffix (SUFFIX)\n", suffix); } fseek(indata, LINELENGTH, 0); prior_pri_dn = 0; data = (char *)malloc(LINELENGTH); ncnt = 0; print_start = 0; icu_time_old = 0.; while (fread(data, LINELENGTH, 1, indata) != 0) { ncnt = ncnt + 1; memcpy((char *)&info, (data + IFC_OFF), sizeof(struct lineparam)); icu_time1 = (unsigned short *)(data + IFC_OFF - 6); icu_time2 = (unsigned short *)(data + IFC_OFF - 4); /* swap bytes if necessary */ if (endian == -1) { FIX_INT(info.ifc); FIX_SHORT(info.swst_dn); FIX_SHORT(info.pri_dn); FIX_SHORT(*icu_time1); FIX_SHORT(*icu_time2); } info.pri = calc_pri(info); info.swst = calc_swst(info); icu_time = (double)(*icu_time1) * 65536.0 + (double)(*icu_time2); if (((icu_time - icu_time_old) == 1) & (print_start == 0)) { fprintf(stdout, "icu_start = %.3lf\n", (icu_time - (ncnt - 2) * (info.pri * 256))); print_start = 1; } icu_time_old = icu_time; if (info.pri_dn != prior_pri_dn && iwrite == 0) { /* don't need to print near_range here because it is obtained from * ers_line_fixer */ /*fprintf(stdout, "near_range = %lf * \n",(info.swst*SOL/2.0)); */ SC_clock_stop = SC_clock_start + (nlines * info.pri) / (24.0 * 3600.0); clock_stop = clock_start + (nlines * info.pri) / (24.0 * 3600.0); fprintf(stdout, "SC_clock_start = %16.10lf\n", SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf\n", SC_clock_stop); fprintf(stdout, "clock_start = %16.12lf\n", clock_start); fprintf(stdout, "clock_stop = %16.12lf\n", clock_stop); fprintf(stdout, "PRF = %lf\n", (1.0 / info.pri)); prior_pri_dn = info.pri_dn; iwrite = 1; } } } /* these are taken verbatim from fix_line */ double calc_pri(info) struct lineparam info; { return (((double)info.pri_dn + 2.0) * SEC_PER_PRI_COUNT); } double calc_swst(info) struct lineparam info; { return ((double)info.swst_dn * SEC_PER_PRI_COUNT + 9.0 * info.pri - 6.6E-6); /* based on Johan Jacob Mohr and Søren Nørvang Madsen, Member, IEEE,Geometric Calibration of ERS Satellite SAR Images, 2001, calibriation should be 6.6*/ } /*_______________________________*/ /* check endian of machine */ /* 1 if big; -1 if little */ /*_______________________________*/ int is_big_endian_() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } int is_big_endian__() { return is_big_endian_(); } GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf_kang.c000644 015705 000000 00000010777 13505462014 027272 0ustar00sandwellwheel000000 000000 /* write a PRM file */ /* modified by Paul F. Jamason, 3/19/98 */ /* added SC_identity read from file, R. Mellors. 10/1/98 */ /* changed SC_identity to sc_identity in fprintf line, K. Watson. 3/8/99 */ /* force I_mean Q_mean = 15.5 M.Wei. 5/24/06 (Some header is bad)*/ #include "../include/SARtape.h" #include "../include/soi.h" #include #include #include #define FACTOR 1000000 void calc_time(char time_string[], double *clock_time); void make_prm_dpaf(sar) struct SAR_info sar; { double radar_wavelength, pulse_dur, rng_samp_rate; double I_mean, Q_mean, sc_clock_start, chirp_slope; int SC_identity; /* ERS-1 = 1, ERS2 = 2 */ double SC_clock_start, SC_clock_stop; /* translate from structure holding SAR info */ /* see SARtape.h and associated include files for more details */ sscanf((sar.dpaf_dss->mission_identifier + 3), "%d", &SC_identity); prf1 = atof(sar.dpaf_dss->nominal_prf); radar_wavelength = atof(sar.dpaf_dss->radar_wavelength); /* convert into seconds from MHz */ pulse_dur = (atof(sar.dpaf_dss->range_pulse_length) / FACTOR); rng_samp_rate = FACTOR * (atof(sar.dpaf_dss->sampling)); /* correct by factor of two */ chirp_slope = 2.0 * atof(sar.dpaf_dss->range_pulse_phase_quad); /* pj: add 15.5 to these values (see ERS SAR.RAW documentation) */ /* I_mean = 15.5+atof(sar.dpaf_dss->dc_bias_i); Q_mean = 15.5+atof(sar.dpaf_dss->dc_bias_q); */ I_mean = 15.5; Q_mean = 15.5; /* we don't want the first two character; (of year)) */ sc_clock_start = atof((sar.dpaf_dss->satelite_clock_time + 2)); /* pj */ calc_time(sar.dpaf_dss->zero_dop_az_time_f_pixel, &SC_clock_start); calc_time(sar.dpaf_dss->zero_dop_az_time_l_pixel, &SC_clock_stop); /*fprintf(stdout,"I_mean = %lf\n",I_mean); fprintf(stdout,"Q_mean = %lf\n",Q_mean); fprintf(stdout,"rng_samp_rate = %lg\n",rng_samp_rate); fprintf(stdout,"chirp_slope = %lg\n",chirp_slope); fprintf(stdout,"pulse_dur = %lg\n",pulse_dur); fprintf(stdout,"radar_wavelength = %lg\n",radar_wavelength); fprintf(stdout, "SC_identity = %d\n",SC_identity);*/ /* pj: write these to PRM file now instead of in read_data_file.c */ fprintf(stdout, "SC_clock_start = %16.10lf\n", SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf\n", SC_clock_stop); } /* pj */ void calc_time(char time_string[], double *clock_time) { int day_of_month, hour, minute, second, msec, jday, i, month, year, leap; int mon_nday[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char c_month[4], tmp_time_string[24]; char *string_tmp = (char *)malloc(3); /* need a temporary time string else msec reads beginning of next zero_dop string */ strncpy(tmp_time_string, &time_string[0], 24); /* pj: calculate SC_clock_start/stop from sarleader for DPAF */ day_of_month = atoi(&time_string[0]); strncpy(c_month, &time_string[3], 3); if (!strncmp(c_month, "JAN", 3)) { month = 1; } if (!strncmp(c_month, "FEB", 3)) { month = 2; } if (!strncmp(c_month, "MAR", 3)) { month = 3; } if (!strncmp(c_month, "APR", 3)) { month = 4; } if (!strncmp(c_month, "MAY", 3)) { month = 5; } if (!strncmp(c_month, "JUN", 3)) { month = 6; } if (!strncmp(c_month, "JUL", 3)) { month = 7; } if (!strncmp(c_month, "AUG", 3)) { month = 8; } if (!strncmp(c_month, "SEP", 3)) { month = 9; } if (!strncmp(c_month, "OCT", 3)) { month = 10; } if (!strncmp(c_month, "NOV", 3)) { month = 11; } if (!strncmp(c_month, "DEC", 3)) { month = 12; } year = atoi(&time_string[9]); if (year % 4 == 0 && year % 100 != 0) { leap = 1; } else if (year == 00) { leap = 1; } else { leap = 0; } if (leap) { mon_nday[1] = 29; } jday = 0; if (month > 1) { for (i = 0; i < month - 1; i++) jday = jday + mon_nday[i]; } jday = jday + day_of_month; hour = atoi(&time_string[12]); minute = atoi(&time_string[15]); second = atoi(&time_string[18]); // msec = atoi(&tmp_time_string[21]); // memcpy(string_tmp,&tmp_time_string[21],3); msec = atoi(strncpy(string_tmp, tmp_time_string + 21, 3)); // printf("%3d\n",hour); // printf("%3d\n",minute); // printf("%3d\n",second); // printf("%3d\n",msec); // printf("%s\n",tmp_time_string); /* add either 1900 or 2000 to the year */ if (year < 85.) { year = year + 2000.; } else { year = year + 1900.; } /* calculate clock time; determine fraction of msecs in day */ *clock_time = (double)(year * 1000 + jday) + ((double)(hour * 3600 * 1000 + minute * 60 * 1000 + second * 1000 + msec) / (double)(24 * 3600 * 1000)); } GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_dpaf/Makefile000644 015705 000000 00000000470 13505462014 024766 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = read_sarleader_dpaf CSRCS = read_sarleader_dpaf.c make_prm_dpaf.c OBJS = $(CSRCS:.c=.o) LIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(LIBS) all: $(PROG) clean: rm -f $(OBJS) tags core install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf_orig.c000644 015705 000000 00000010307 13505462014 027277 0ustar00sandwellwheel000000 000000 /* write a PRM file */ /* modified by Paul F. Jamason, 3/19/98 */ /* added SC_identity read from file, R. Mellors. 10/1/98 */ /* changed SC_identity to sc_identity in fprintf line, K. Watson. 3/8/99 */ /* force I_mean Q_mean = 15.5 M.Wei. 5/24/06 (Some header is bad)*/ #include "../include/SARtape.h" #include "../include/soi.h" #include #include #include #define FACTOR 1000000 void calc_time(char time_string[], double *clock_time); make_prm_dpaf(sar) struct SAR_info sar; { double radar_wavelength, pulse_dur, rng_samp_rate; double I_mean, Q_mean, sc_clock_start, chirp_slope; int SC_identity; /* ERS-1 = 1, ERS2 = 2 */ double SC_clock_start, SC_clock_stop; /* translate from structure holding SAR info */ /* see SARtape.h and associated include files for more details */ sscanf((sar.dpaf_dss->mission_identifier + 3), "%d", &SC_identity); prf1 = atof(sar.dpaf_dss->nominal_prf); radar_wavelength = atof(sar.dpaf_dss->radar_wavelength); /* convert into seconds from MHz */ pulse_dur = (atof(sar.dpaf_dss->range_pulse_length) / FACTOR); rng_samp_rate = FACTOR * (atof(sar.dpaf_dss->sampling)); /* correct by factor of two */ chirp_slope = 2.0 * atof(sar.dpaf_dss->range_pulse_phase_quad); /* pj: add 15.5 to these values (see ERS SAR.RAW documentation) */ /* I_mean = 15.5+atof(sar.dpaf_dss->dc_bias_i); Q_mean = 15.5+atof(sar.dpaf_dss->dc_bias_q); */ I_mean = 15.5; Q_mean = 15.5; /* we don't want the first two character; (of year)) */ sc_clock_start = atof((sar.dpaf_dss->satelite_clock_time + 2)); /* pj */ calc_time(sar.dpaf_dss->zero_dop_az_time_f_pixel, &SC_clock_start); calc_time(sar.dpaf_dss->zero_dop_az_time_l_pixel, &SC_clock_stop); /*fprintf(stdout,"I_mean = %lf\n",I_mean); fprintf(stdout,"Q_mean = %lf\n",Q_mean); fprintf(stdout,"rng_samp_rate = %lg\n",rng_samp_rate); fprintf(stdout,"chirp_slope = %lg\n",chirp_slope); fprintf(stdout,"pulse_dur = %lg\n",pulse_dur); fprintf(stdout,"radar_wavelength = %lg\n",radar_wavelength); fprintf(stdout, "SC_identity = %d\n",SC_identity);*/ /* pj: write these to PRM file now instead of in read_data_file.c */ fprintf(stdout, "SC_clock_start = %16.10lf\n", SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf\n", SC_clock_stop); } /* pj */ void calc_time(char time_string[], double *clock_time) { int day_of_month, hour, minute, second, msec, jday, i, month, year, leap; int mon_nday[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char c_month[4], tmp_time_string[24]; /* need a temporary time string else msec reads beginning of next zero_dop string */ strncpy(tmp_time_string, &time_string[0], 24); /* pj: calculate SC_clock_start/stop from sarleader for DPAF */ day_of_month = atoi(&time_string[0]); strncpy(c_month, &time_string[3], 3); if (!strncmp(c_month, "JAN", 3)) { month = 1; } if (!strncmp(c_month, "FEB", 3)) { month = 2; } if (!strncmp(c_month, "MAR", 3)) { month = 3; } if (!strncmp(c_month, "APR", 3)) { month = 4; } if (!strncmp(c_month, "MAY", 3)) { month = 5; } if (!strncmp(c_month, "JUN", 3)) { month = 6; } if (!strncmp(c_month, "JUL", 3)) { month = 7; } if (!strncmp(c_month, "AUG", 3)) { month = 8; } if (!strncmp(c_month, "SEP", 3)) { month = 9; } if (!strncmp(c_month, "OCT", 3)) { month = 10; } if (!strncmp(c_month, "NOV", 3)) { month = 11; } if (!strncmp(c_month, "DEC", 3)) { month = 12; } year = atoi(&time_string[9]); if (year % 4 == 0 && year % 100 != 0) { leap = 1; } else if (year == 00) { leap = 1; } else { leap = 0; } if (leap) { mon_nday[1] = 29; } jday = 0; if (month > 1) { for (i = 0; i < month - 1; i++) jday = jday + mon_nday[i]; } jday = jday + day_of_month; hour = atoi(&time_string[12]); minute = atoi(&time_string[15]); second = atoi(&time_string[18]); msec = atoi(&tmp_time_string[21]); /* add either 1900 or 2000 to the year */ if (year < 85.) { year = year + 2000.; } else { year = year + 1900.; } /* calculate clock time; determine fraction of msecs in day */ *clock_time = (double)(year * 1000 + jday) + ((double)(hour * 3600 * 1000 + minute * 60 * 1000 + second * 1000 + msec) / (double)(24 * 3600 * 1000)); } GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_dpaf/read_sarleader_dpaf000755 015705 000000 00000057434 13507242213 027216 0ustar00sandwellwheel000000 000000  H__PAGEZERO(__TEXT@@__text__TEXTpKp__stubs__TEXT%N%__stub_helper__TEXT & &__cstring__TEXT&&__const__TEXTP?PP?__unwind_info__TEXT?T?__DATA@@__nl_symbol_ptr__DATA@@ __got__DATA@@__la_symbol_ptr__DATA(@h(@__common__DATA@H__LINKEDITPP"0PPX`P QUU[p PDD0[ /usr/lib/dyldƼr=92   *(p 8/usr/lib/libSystem.B.dylib&U)UUHAWAVAUATSHH^H5'H4IHH=H5HHH51HH HHu HRHvH H LHHKHMLCLELKLMHCHxHCHEHC HEHC$HEHC4HEHC8HEHC@HEHCDHEHCHHEL{PLcTL[XL`Lk`LSdLhLshLpHH5HHAVARAUASATAWuuuuuuuuLxAVHxH5HHHMLELMphAU`ATAWuuuuuuuuAVQHĀHHJLB LJHBHEHBHEHB$HEH5HB*HEHB0HEHB6HEHB %.2s blank_2 ==> %.2s for_con_doc ==> %.12s for_con_doc_rev_level ==> %.2s file_des_rev_level ==> %.2s softw_rel ==> %.12s file_number ==> %.4s file_name ==> %.16s rec_seq_loc_type_flag ==> %.4s seq_number_loc ==> %.8s seq_number_field_length ==> %.4s rec_code_loc_type_flag ==> %.4s rec_code_loc ==> %.8s rec_code_field_length ==> %.4s rec_len_loc_type_flag ==> %.4s rec_len_loc ==> %.8s rec_len_field_length ==> %.4s reserved_4 ==> %.4s reserved_segment ==> %.64s %6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%60c%6c%6c%288c*********** SAR FDR BINARY ********** record_seq_no ==> %1d record_subtype_code1 ==> %1x record_type_code1 ==> %1x record_subtype_code2 ==> %1x record_subtype_code3 ==> %1x record_length ==> %1d %4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c%4c%4c%16c%16c%16c%32c%16c%16c%16c%24c%24c%24c*********** DSS RECORD *********** dss_rec_seq_num ==> %.4s chan_ind ==> %.4s reserved1 ==> %.16s scene_number ==> %.32s input_scene_center_time ==> %.32s spare1 ==> %.16s center_lat ==> %.16s center_long ==> %.16s center_heading ==> %.16s ellipsoid_designator ==> %.16s ellipsoid_semimajor_axis ==> %.16s ellipsoid_semiminor_axis ==> %.16s earth_constant ==> %.16s spare2 ==> %.16s ellipsoid_j2 ==> %.16s ellipsoid_j3 ==> %.16s ellipsoid_j4 ==> %.16s spare ==> %.16s reserved_new ==> %.16s scene_centre_line_number ==> %.8s scene_centre_pixel_number ==> %.8s scene_length ==> %.16s scene_width ==> %.16s spare3 ==> %.16s nchan ==> %.4s spare4 ==> %.4s mission_identifier ==> %.16s sensor_id_and_mode ==> %.32s orbit_number ==> %.8s lat_nadir_center ==> %.8s long_nadir_center ==> %.8s heading_nadir_center ==> %.8s clock_angel ==> %.8s incidence_angle_center ==> %.8s radar_freq ==> %.8s radar_wavelength ==> %.16s motion_compensation ==> %.2s range_pulse_code_specifier ==> %.16s range_pulse_amplitude_const ==> %.16s range_pulse_amplitude_lin ==> %.16s range_pulse_amplitude_quad ==> %.16s range_pulse_amplitude_cube ==> %.16s range_pulse_amplitude_quart ==> %.16s range_pulse_phase_const ==> %.16s range_pulse_phase_lin ==> %.16s range_pulse_phase_quad ==> %.16s range_pulse_phase_cube ==> %.16s range_pulse_phase_quart ==> %.16s chirp_extraction_index ==> %.8s spare5 ==> %.8s sampling ==> %.16s range_gate_early_edge_start_image ==> %.16s range_pulse_length ==> %.16s reserved2 ==> %.4s range_compressed_flag ==> %.4s reserved3 ==> %.32s quantisation_in_bits ==> %.8s quantizer_descriptor ==> %.12s dc_bias_i ==> %.16s dc_bias_q ==> %.16s gain_imbalance ==> %.16s spare6 ==> %.32s reserved4 ==> %.16s antenna_mech_bor ==> %.16s reserved5 ==> %.4s nominal_prf ==> %.16s reserved6 ==> %.32s satelite_encoded_binary_time ==> %.16s satelite_clock_time ==> %.32s satelite_clock_increment ==> %.8s spare7 ==> %.8s processing_facility_identifier ==> %.16s processing_system_id ==> %.8s processing_version_id ==> %.8s reserved7 ==> %.32s product_type_id ==> %.32s alg_id ==> %.32s nlooks_az ==> %.16s neff_looks_range ==> %.16s bandwidth_look_az ==> %.16s bandwidth_look_range ==> %.16s total_look_bandwidth_az ==> %.16s total_look_bandwidth_range ==> %.16s w_func_designator_az ==> %.32s w_func_designator_range ==> %.32s data_input_source ==> %.16s nom_res_3db_range ==> %.16s nom_res_az ==> %.16s reserved8 ==> %.32s a_track_dop_freq_const_early_image ==> %.16s a_track_dop_freq_lin_early_image ==> %.16s a_track_dop_freq_quad_early_image ==> %.16s spare8 ==> %.16s c_track_dop_freq_const_early_image ==> %.16s c_track_dop_freq_lin_early_image ==> %.16s c_track_dop_freq_quad_early_image ==> %.16s time_direction_along_pixel ==> %.8s time_direction_along_line ==> %.8s a_track_dop_freq_rate_const_early_image ==> %.16s a_track_dop_freq_rate_lin_early_image ==> %.16s a_track_dop_freq_rate_quad_early_image ==> %.16s spare9 ==> %.16s c_track_dop_freq_rate_const_early_image ==> %.16s c_track_dop_freq_rate_lin_early_image ==> %.16s c_track_dop_freq_rate_quad_early_image ==> %.16s spare10 ==> %.16s line_content_indicator ==> %.8s clut_lock_flag ==> %.4s autofocussing_flag ==> %.4s line_spacing ==> %.16s pixel_spacing_range ==> %.16s range_compression_designator ==> %.16s spare11 ==> %.32s zero_dop_range_time_f_pixel ==> %.16s zero_dop_range_time_c_pixel ==> %.16s zero_dop_range_time_l_pixel ==> %.16s zero_dop_az_time_f_pixel ==> %.24s zero_dop_az_time_c_pixel ==> %.24s zero_dop_az_time_l_pixel ==> %.24s %128c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%48c*********** PLATFORM POSITION VECTOR ********** reserved1 ==> %.128s num_data_points ==> %.4s year_of_data_points ==> %.4s month_of_data_points ==> %.4s day_of_data_points ==> %.4s day_of_data_points_in_year ==> %.4s sec_of_day_of_data ==> %.22s data_points_time_gap ==> %.22s ref_coord_sys ==> %.64s greenwhich_mean_hour_angle ==> %.22s a_track_pos_err ==> %.16s c_track_pos_err ==> %.16s radial_pos_err ==> %.16s reserved2 ==> %.48s %1c%22c%22c%22c%22c%22c%22c*********** PLATFORM VECTOR ********** pos_x ==> %.22s pos_y ==> %.22s pos_z ==> %.22s vel_x ==> %.22s vel_y ==> %.22s vel_z ==> %.22s %dSC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf FEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC@@@pA Xp88%8 `0&&&0&:&D&N&X&b&l&v&&&&"(]@___stack_chk_guardQr@___stderrp@___stdoutp@dyld_stub_binderr(@___stack_chk_failr0@_atofr8@_atoir@@_exitrH@_fopenrP@_fprintfrX@_freadr`@_fscanfrh@_fwriterp@_mallocrx@_sscanfr@_strncmpr@_strncpy__mh_execute_headermacRESC_abdefgood_bytesht1ilambdanoprsvel1x yshift inke_prm_dpafAallock_stc_timetoneCclock_stidentityartop_stretch_lpha_z_resarendstartȁЁaseline_ytes_per_lineendstart؁artopbug_flagskewar_rangedirst_s1c_dstrtystrt1d1linesampleĂȂЂ؂cu_startnput_fileqflipelooksrowsum_ar_rangextendlinespatchesrng_binsvalid_azff_vidut_amp_filedata_filectbwrf1ulsedurazȃЃ؃ehwwc_stf_artopfileidentitylopermtub_int__rng_binretch_ararm shift i1 q1 ȄЄԄ0 @ @ @% @2F @S @` @k @x @ @ @ @! @ @ A A A A A (A  ,A 0A 8A! @A- DA; HA? PAK XAP `A[ hAg pAo xAwp}  A A A A A A A A A A A  A A A  A* A5 A? AI AW A] Bd Bi Bu B B (B 0B 8B @B HB PB TB  '/7?GPYDHIJKLMNOPQRST@EFGDHIJKLMNOPQRS _RE_SC_clock_start_SC_clock_stop_SC_identity__mh_execute_header_a_stretch_a_a_stretch_r_alpha_end_alpha_start_az_res_baseline_end_baseline_start_bytes_per_line_calc_time_caltone_clock_start_clock_stop_debug_flag_deskew_far_range_fd1_fdc_strt_fdc_ystrt_fdd1_fddd1_first_line_first_sample_fs_good_bytes_ht1_icu_start_input_file_iqflip_lambda_main_make_prm_dpaf_near_range_nextend_nlooks_nrows_num_lines_num_patches_num_rng_bins_num_valid_az_off_vid_out_amp_file_out_data_file_pctbw_pctbwaz_prf1_pulsedur_rec_start_rec_stop_ref_file_ref_identity_rhww_slope_srm_st_rng_bin_stretch_a_stretch_r_sub_int_a_sub_int_r_vel1_xmi1_xmq1_xshift_yshift___stack_chk_fail___stack_chk_guard___stderrp___stdoutp_atof_atoi_exit_fopen_fprintf_fread_fscanf_fwrite_malloc_sscanf_strncmp_strncpydyld_stub_binderGMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_dpaf/read_sarleader_dpaf.c000644 015705 000000 00000006664 13505462014 027434 0ustar00sandwellwheel000000 000000 /* This program is supposed to read raw SAR data tapes */ /* */ /* R. Mellors July 1997 */ /* IGPP_SIO */ /* */ /* modified by Paul F. Jamason, 25-FEB-1998*/ /* */ /* */ #include "../include/SARtape.h" #include #include #include void make_prm_dpaf(struct SAR_info); int main(argc, argv) int argc; char **argv; { char *filename, string[5]; int i; // int num_data_points; FILE *file1, *outfile; struct SAR_info sar; struct sarleader_binary slfsb, slvsb, slplb; if (argc < 2) { fprintf(stderr, "Usage: read_SAR_tape SARLEADER \n"); exit(1); } filename = argv[1]; file1 = fopen(filename, "r"); outfile = fopen("ldrfile.log", "w"); fprintf(outfile, "listing header values to %s\n", filename); /* allocate memory */ sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); sar.varseg = (struct sarleader_fdr_varseg *)malloc(sizeof(struct sarleader_fdr_varseg)); sar.dss = (struct sarleader_dss *)malloc(sizeof(struct sarleader_dss)); /* pj */ sar.dpaf_dss = (struct sarleader_dpaf_dss *)malloc(sizeof(struct sarleader_dpaf_dss)); sar.platform = (struct platform *)malloc(sizeof(struct platform)); /* read the file */ (void)fread(&slfsb, sizeof(struct sarleader_binary), 1, file1); /*fprintf(outfile," read %d bytes %d items from file %s : position * %ld\n",(sizeof(struct sarleader_binary)),nitems,filename,ftell(file1));*/ /*fprintf(outfile,SARLEADER_FDR_BINARY_WCS,SARLEADER_FDR_BINARY_RVL(&slfsb));*/ fscanf(file1, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fprintf(outfile, SARLEADER_FDR_FIXSEG_WCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fscanf(file1, SARLEADER_FDR_VARSEG_RCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); /*fprintf(outfile,SARLEADER_FDR_VARSEG_WCS,SARLEADER_FDR_VARSEG_RVL(sar.varseg));*/ (void)fread(&slvsb, sizeof(struct sarleader_binary), 1, file1); /*fprintf(outfile," read %d bytes %d items from file %s : position * %ld\n",(sizeof(struct sarleader_binary)),nitems,filename,ftell(file1));*/ fprintf(outfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(&slfsb)); /* pj: use modified format - no gec_local_user field */ fscanf(file1, SARLEADER_DPAF_DSS_RCS, SARLEADER_DPAF_DSS_RVL(sar.dpaf_dss)); fprintf(outfile, SARLEADER_DPAF_DSS_WCS, SARLEADER_DPAF_DSS_RVL(sar.dpaf_dss)); /* fscanf(file1,SARLEADER_DSS_RCS,SARLEADER_DSS_RVL(sar.dss)); fprintf(outfile,SARLEADER_DSS_WCS,SARLEADER_DSS_RVL(sar.dss)); */ /* why do I need to skip 1664 bytes ahead; what am I missing ? */ /* pj: comment out */ /* fseek(file1,1664,SEEK_CUR);*/ (void)fread(&slplb, sizeof(struct sarleader_binary), 1, file1); /*fprintf(outfile," read %d bytes %d items from file %s : position * %ld\n",(sizeof(struct sarleader_binary)),nitems,filename,ftell(file1));*/ fprintf(outfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(&slplb)); fscanf(file1, PLATFORM_RCS, PLATFORM_RVL(sar.platform)); fprintf(outfile, PLATFORM_WCS, PLATFORM_RVL(sar.platform)); sar.position = (struct position_vector *)malloc(sizeof(struct position_vector)); sscanf(sar.platform->num_data_points, " %1c", string); for (i = 0; i < (atoi(string)); i++) { fscanf(file1, POSITION_VECTOR_RCS, POSITION_VECTOR_RVL(sar.position)); fprintf(outfile, POSITION_VECTOR_WCS, POSITION_VECTOR_RVL(sar.position)); } make_prm_dpaf(sar); } GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf.c000644 015705 000000 00000010663 13505462014 026264 0ustar00sandwellwheel000000 000000 /* write a PRM file */ /* modified by Paul F. Jamason, 3/19/98 */ /* added SC_identity read from file, R. Mellors. 10/1/98 */ /* changed SC_identity to sc_identity in fprintf line, K. Watson. 3/8/99 */ /* force I_mean Q_mean = 15.5 M.Wei. 5/24/06 (Some header is bad)*/ #include "../include/SARtape.h" #include "../include/soi.h" #include #include #include #define FACTOR 1000000 void calc_time(char time_string[], double *clock_time, double *SC_clock_time); void make_prm_dpaf(sar) struct SAR_info sar; { int SC_identity; /* ERS-1 = 1, ERS2 = 2 */ double SC_clock_start, SC_clock_stop; double clock_start, clock_stop; /* translate from structure holding SAR info */ /* see SARtape.h and associated include files for more details */ sscanf((sar.dpaf_dss->mission_identifier + 3), "%d", &SC_identity); prf1 = atof(sar.dpaf_dss->nominal_prf); // radar_wavelength = atof(sar.dpaf_dss->radar_wavelength); /* convert into seconds from MHz */ // pulse_dur = (atof(sar.dpaf_dss->range_pulse_length)/FACTOR); // rng_samp_rate = FACTOR*(atof(sar.dpaf_dss->sampling)); /* correct by factor of two */ // chirp_slope = 2.0*atof(sar.dpaf_dss->range_pulse_phase_quad); /* pj: add 15.5 to these values (see ERS SAR.RAW documentation) */ /* I_mean = 15.5+atof(sar.dpaf_dss->dc_bias_i); Q_mean = 15.5+atof(sar.dpaf_dss->dc_bias_q); */ // I_mean = 15.5; // Q_mean = 15.5; /* we don't want the first two character; (of year)) */ // sc_clock_start = atof((sar.dpaf_dss->satelite_clock_time+2)); /* pj */ calc_time(sar.dpaf_dss->zero_dop_az_time_f_pixel, &clock_start, &SC_clock_start); calc_time(sar.dpaf_dss->zero_dop_az_time_l_pixel, &clock_stop, &SC_clock_stop); /*fprintf(stdout,"I_mean = %lf\n",I_mean); fprintf(stdout,"Q_mean = %lf\n",Q_mean); fprintf(stdout,"rng_samp_rate = %lg\n",rng_samp_rate); fprintf(stdout,"chirp_slope = %lg\n",chirp_slope); fprintf(stdout,"pulse_dur = %lg\n",pulse_dur); fprintf(stdout,"radar_wavelength = %lg\n",radar_wavelength); fprintf(stdout, "SC_identity = %d\n",SC_identity);*/ /* pj: write these to PRM file now instead of in read_data_file.c */ fprintf(stdout, "SC_clock_start = %16.10lf\n", SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf\n", SC_clock_stop); fprintf(stdout, "clock_start = %16.12lf\n", clock_start); fprintf(stdout, "clock_stop = %16.12lf\n", clock_stop); } /* pj */ void calc_time(char time_string[], double *clock_time, double *SC_clock_time) { int day_of_month, hour, minute, second, msec, jday, i, month, year, leap; int mon_nday[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char c_month[4], tmp_time_string[24]; char *string_tmp = (char *)malloc(3); /* need a temporary time string else msec reads beginning of next zero_dop string */ strncpy(tmp_time_string, &time_string[0], 24); /* pj: calculate SC_clock_start/stop from sarleader for DPAF */ day_of_month = atoi(&time_string[0]); strncpy(c_month, &time_string[3], 3); if (!strncmp(c_month, "JAN", 3)) { month = 1; } if (!strncmp(c_month, "FEB", 3)) { month = 2; } if (!strncmp(c_month, "MAR", 3)) { month = 3; } if (!strncmp(c_month, "APR", 3)) { month = 4; } if (!strncmp(c_month, "MAY", 3)) { month = 5; } if (!strncmp(c_month, "JUN", 3)) { month = 6; } if (!strncmp(c_month, "JUL", 3)) { month = 7; } if (!strncmp(c_month, "AUG", 3)) { month = 8; } if (!strncmp(c_month, "SEP", 3)) { month = 9; } if (!strncmp(c_month, "OCT", 3)) { month = 10; } if (!strncmp(c_month, "NOV", 3)) { month = 11; } if (!strncmp(c_month, "DEC", 3)) { month = 12; } year = atoi(&time_string[9]); if (year % 4 == 0 && year % 100 != 0) { leap = 1; } else if (year == 00) { leap = 1; } else { leap = 0; } if (leap) { mon_nday[1] = 29; } jday = 0; if (month > 1) { for (i = 0; i < month - 1; i++) jday = jday + mon_nday[i]; } jday = jday + day_of_month; hour = atoi(&time_string[12]); minute = atoi(&time_string[15]); second = atoi(&time_string[18]); msec = atoi(strncpy(string_tmp, tmp_time_string + 21, 3)); /* add either 1900 or 2000 to the year */ if (year < 85.) { year = year + 2000.; } else { year = year + 1900.; } /* calculate clock time; determine fraction of msecs in day */ *clock_time = (double)(jday) + ((double)(hour * 3600 * 1000 + minute * 60 * 1000 + second * 1000 + msec) / (double)(24 * 3600 * 1000)); *SC_clock_time = (double)(year * 1000) + *clock_time; } GMTSAR_V5.7/preproc/ERS_preproc/scripts/ERS_pre_process_031014000755 015705 000000 00000011231 13505462014 024656 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # D. Sandwell and R. Mellors 09/09/97 # # script to read dpaf tapes, create a PRM header and run fixline # the end results are two files that can be processed using easrp # # 3760_2907.PRM - parameter file used in SAR processor # 3760_2907.fix - fixed raw SAR data for sar processing # # 4/26/06 Meng - grep num_lines from dataheader.log # - Added doppler estimation part at the end # 12/27/10 Matt - combine DPAF and CCRS # # Modified by Xiaopeng Tong, 01/23/2011 # # if ($#argv < 4) then echo "" echo " Usage: ERS_pre_process [Doppler]" echo "" echo " name_stem - filename of the .dat and .ldr file" echo " near_range - near range (in meters) of the SAR image (put 0 if use default value)" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo " num_patch - number of patches (put 0 if use default value)" echo " Doppler - Doppler value (blank if use default value)" echo "" echo " Example: " echo " command line: ERS_pre_process ERS2_356_2925_61332 978992.922 6378000 5" echo " will preprocess ERS2 SAR data 'ERS2_356_2925_61332' " echo " then output parameter file 'ERS2_356_2925_61332.PRM' and fixed raw data file 'ERS2_356_2925_61332.raw' and LED file ERS2_356_2925_61332.LED" echo " with near range close to 978992.922 meters and earth radius 6378000 meters and 5 patches" echo "" exit 1 endif # # 0) start with a virgin header # cp $ERSPRE/scripts/virgin.PRM $1.PRM echo " " echo "=========================" echo "Start pre-process $1" # # make sure the dat and ldr files exists # if(! -f $1.dat ) then echo "" echo "error - raw file does not have correct .dat suffix" echo "" exit 1 endif if(! -f $1.ldr ) then echo "" echo "error - leader file does not have correct .ldr suffix" echo "" exit 1 endif # # 1) determine if ERS1 or ERS2 and DPAF or CCRS # set FMT1 = `grep ERS1 $1.ldr | awk '{print $4}'` set FMT2 = `grep ERS2 $1.ldr | awk '{print $4}'` set FMT3 = `grep ERS-1 $1.ldr | awk '{print $4}'` set FMT4 = `grep ERS-2 $1.ldr | awk '{print $4}'` if ( ($FMT1 == "matches") || ($FMT3 == "matches")) then echo "SC_identity = 1 " >> $1.PRM else if (($FMT2 == "matches") || ($FMT4 == "matches")) then echo "SC_identity = 2 " >> $1.PRM else echo "Wrong format of the ldr file !" exit 0 endif if ( ($FMT1 == "matches") || ($FMT2 == "matches")) then echo "Format = DPAF" set ERSFMT = "DPAF" read_sarleader_dpaf $1.ldr >> $1.PRM else if (($FMT3 == "matches") || ($FMT4 == "matches")) then echo "Format = CCRS" set ERSFMT = "CCRS" else echo "Wrong format of the ldr file !" exit 0 endif # # 2) add info provided by user # echo "input_file = $1.raw" >> $1.PRM # # 3) run ers_line_fixer # rm -f $1.raw if($2 != 0) then echo "now using user defined near range = $2" if ($ERSFMT == "DPAF") then ers_line_fixer -a $2 -s DPAF/ESRIN $1.dat $1.raw > $1fix.log else if ($ERSFMT == "CCRS") then ers_line_fixer -a $2 -s CCRS $1.dat $1.raw > $1fix.log endif else echo "now using default value from the first line" if ($ERSFMT == "DPAF") then ers_line_fixer -s DPAF/ESRIN $1.dat $1.raw > $1fix.log else if ($ERSFMT == "CCRS") then ers_line_fixer -s CCRS $1.dat $1.raw > $1fix.log endif endif # # get near_range from ers_line_fixer # grep near_range $1fix.log >> $1.PRM # # 4) read and interpret the fixed data file to get more # parameters. if ($ERSFMT == "DPAF") then read_data_file_dpaf $1.raw >> $1.PRM else if ($ERSFMT == "CCRS") then read_data_file_ccrs $1.raw >> $1.PRM endif # # 5) make the LED file from PRC orbit data # set SCID = `grep SC_identity $1.PRM | awk '{print $3}'` if ($SCID == 1) then echo "ERS1" dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 else if ($SCID == 2) then echo "ERS2" dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 else echo "Wrong Satellite ID!" exit 0 endif echo "led_file = $1.LED" >> $1.PRM # # 6) doppler centroid estimation and orbital information # if ($#argv == 5) then calc_dop_orb_envi $1.PRM $1.log2 $3 $5 else if ($#argv == 4) then calc_dop_orb_envi $1.PRM $1.log2 $3 endif cat $1.PRM $1.log2 > $1_tmp.PRM echo "fdd1 = 0" >> $1_tmp.PRM echo "fddd1 = 0" >> $1_tmp.PRM mv $1_tmp.PRM $1.PRM # # 7) other stuff echo "SLC_file = $1.SLC" >> $1.PRM # # 8) change the number of patches # if ($4 != 0) then update_PRM.csh $1.PRM num_patches $4 echo "Number of patches is set to $4" endif # # clean unwanted files # rm -f *.log* echo "End pre-process $1" GMTSAR_V5.7/preproc/ERS_preproc/scripts/ERS_pre_process.in000755 015705 000000 00000011136 13505462014 024457 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # D. Sandwell and R. Mellors 09/09/97 # # script to read dpaf tapes, create a PRM header and run fixline # the end results are two files that can be processed using easrp # # 3760_2907.PRM - parameter file used in SAR processor # 3760_2907.fix - fixed raw SAR data for sar processing # # 4/26/06 Meng - grep num_lines from dataheader.log # - Added doppler estimation part at the end # 12/27/10 Matt - combine DPAF and CCRS # # Modified by Xiaopeng Tong, 01/23/2011 # # if ($#argv < 4) then echo "" echo " Usage: ERS_pre_process [Doppler]" echo "" echo " name_stem - filename of the .dat and .ldr file" echo " near_range - near range (in meters) of the SAR image (put 0 if use default value)" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo " num_patch - number of patches (put 0 if use default value)" echo " Doppler - Doppler value (blank if use default value)" echo "" echo " Example: " echo " command line: ERS_pre_process ERS2_356_2925_61332 978992.922 6378000 5" echo " will preprocess ERS2 SAR data 'ERS2_356_2925_61332' " echo " then output parameter file 'ERS2_356_2925_61332.PRM' and fixed raw data file 'ERS2_356_2925_61332.raw' and LED file ERS2_356_2925_61332.LED" echo " with near range close to 978992.922 meters and earth radius 6378000 meters and 5 patches" echo "" exit 1 endif # # 0) start with a virgin header # set ORBITS = "@ORBITS_DIR@" set ERSPRE = `gmtsar_sharedir.csh` cp $ERSPRE/virgin.PRM $1.PRM echo " " echo "=========================" echo "Start pre-process $1" # # make sure the dat and ldr files exists # if(! -f $1.dat ) then echo "" echo "error - raw file does not have correct .dat suffix" echo "" exit 1 endif if(! -f $1.ldr ) then echo "" echo "error - leader file does not have correct .ldr suffix" echo "" exit 1 endif # # 1) determine if ERS1 or ERS2 and DPAF or CCRS # grep ERS1 $1.ldr; set FMT1 = $status grep ERS2 $1.ldr; set FMT2 = $status grep ERS-1 $1.ldr; set FMT3 = $status grep ERS-2 $1.ldr; set FMT4 = $status if ( ($FMT1 == 0) || ($FMT3 == 0)) then echo "SC_identity = 1 " >> $1.PRM else if (($FMT2 == 0) || ($FMT4 == 0)) then echo "SC_identity = 2 " >> $1.PRM else echo "Wrong format of the ldr file !" exit 0 endif if ( ($FMT1 == 0) || ($FMT2 == 0)) then echo "Format = DPAF" set ERSFMT = "DPAF" read_sarleader_dpaf $1.ldr >> $1.PRM else if (($FMT3 == 0) || ($FMT4 == 0)) then echo "Format = CCRS" set ERSFMT = "CCRS" else echo "Wrong format of the ldr file !" exit 0 endif # # 2) add info provided by user # echo "input_file = $1.raw" >> $1.PRM # # 3) run ers_line_fixer # rm -f $1.raw if($2 != 0) then echo "now using user defined near range = $2" if ($ERSFMT == "DPAF") then ers_line_fixer -a $2 -s DPAF/ESRIN $1.dat $1.raw > $1fix.log else if ($ERSFMT == "CCRS") then ers_line_fixer -a $2 -s CCRS $1.dat $1.raw > $1fix.log endif else echo "now using default value from the first line" if ($ERSFMT == "DPAF") then ers_line_fixer -s DPAF/ESRIN $1.dat $1.raw > $1fix.log else if ($ERSFMT == "CCRS") then ers_line_fixer -s CCRS $1.dat $1.raw > $1fix.log endif endif # # get near_range from ers_line_fixer # grep near_range $1fix.log >> $1.PRM # # 4) read and interpret the fixed data file to get more # parameters. if ($ERSFMT == "DPAF") then read_data_file_dpaf $1.raw >> $1.PRM else if ($ERSFMT == "CCRS") then read_data_file_ccrs $1.raw >> $1.PRM endif # # 5) make the LED file from PRC orbit data # set SCID = `grep SC_identity $1.PRM | awk '{print $3}'` if ($SCID == 1) then echo "ERS1" dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 else if ($SCID == 2) then echo "ERS2" dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 else echo "Wrong Satellite ID!" exit 0 endif echo "led_file = $1.LED" >> $1.PRM # # 6) doppler centroid estimation and orbital information # if ($#argv == 5) then calc_dop_orb_envi $1.PRM $1.log2 $3 $5 else if ($#argv == 4) then calc_dop_orb_envi $1.PRM $1.log2 $3 endif cat $1.PRM $1.log2 > $1_tmp.PRM echo "fdd1 = 0" >> $1_tmp.PRM echo "fddd1 = 0" >> $1_tmp.PRM mv $1_tmp.PRM $1.PRM # # 7) other stuff echo "SLC_file = $1.SLC" >> $1.PRM # # 8) change the number of patches # if ($4 != 0) then update_PRM.csh $1.PRM num_patches $4 echo "Number of patches is set to $4" endif # # clean unwanted files # rm -f *.log* echo "End pre-process $1" GMTSAR_V5.7/preproc/ERS_preproc/scripts/dump_orbit_ers.pl000755 015705 000000 00000024624 13505462014 024452 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl use strict; if ($#ARGV < 1 ) { # print $#ARGV; # very strange, this number should be 0 if no input, but here -1 print "\nusage: dump_orbit_ers.pl orbit_frame orbdir\n\n"; print "input: orbit_frame.PRM\n"; print " orbdir directory with PRC orbit data \n"; print "output: orbit_frame.LED store the orbit information, used by ERS_baseline \n\n"; print " year day_of_year sec_of_day x y z vx vy vz \n\n"; exit; } #=========================================== # possible bug: when sensing is in the last # day of the orbit file. It will find incorrect file. # For example: e2_22526_2925.LED #=========================================== my $prm_file = $ARGV[0].".PRM"; my $led_file = $ARGV[0].".LED"; my $orb_dir = $ARGV[1]; print "---------- orbit search for $ARGV[0] started ----------\n"; ####################### grep start and stop time from PRM ############### my $midtime; my $temp1 = `grep SC_clock_start $prm_file`; my $temp2 = `grep SC_clock_stop $prm_file`; my @temp3 = split(/=/,$temp1); my @temp4 = split(/=/,$temp2); my $temp5 = ($temp3[1]+$temp4[1])/2; my $midtime = jul2ymd_PRM($temp5); #print "$temp3[1], $temp4[1], $temp5, $midtime \n"; ####################### Convert time to days since 1.1.2000 12h ############ my $midtime_julday; my $midtime_ymd; my $midtime_y11; my $first_year; my $first_d2y; # day of the year for the image if($midtime =~ /(\d*)-(\d*)-(\d*)/){ $midtime_ymd = $3.$2.$1; $midtime_y11 = $3."0101"; $first_year = $3; } print "Midtime: $midtime; YMD $midtime_ymd; Y11 $midtime_y11; \n"; $midtime_julday = ymd2jul($midtime_ymd); $first_d2y = $midtime_julday - ymd2jul($midtime_y11) + 1; print "Day of the year: $first_d2y \n"; my $ref_day = 20000101; my $ref_julday = ymd2jul($ref_day); my $julday = ($midtime_julday - $ref_julday)*10 - 5; # unit in PRC is 0.1 day from noon 1.1.2000 in TDT print "days from 1.1.2000 12 h in UTC: $julday/10 \n"; ###################### find the right orbit file ########################### my @orb_list = `cat $orb_dir/arclist`; my $list_size = @orb_list; my $orb_file; my $orb_file2; my $i; my $orb_case = 0; for ($i = 0; $i < $list_size; $i++) { if ($orb_list[$i] =~ /(\S*)\s*(-?\d*)\s*(-?\d*)/){ #print "$julday, $2, $3 \n"; if (($julday > $2) && ($julday <= $3) && ( $3-$julday > 5)){ $orb_case = 1; # one orb file, not at edge $orb_file = $orb_dir."/".$1; print "$ARGV[0] \n Case 1: $julday, $2, $3; Orbit file: $orb_file\n"; last; #exit; } elsif (($julday > $2) && ($julday <= $3)) { $orb_case = 2; print "$ARGV[0] \n Case 2: $julday, $2, $3; \n"; if ($i == $list_size-1) { $orb_case = 1; $orb_file = $orb_dir."/".$1; last; print "End of arclist, $orb_file\n"; #exit; } my $otmp1 = $1; my $otmp2 = $3; if ($orb_list[$i+1] =~ /(\S*)\s*(-?\d*)\s*(-?\d*)/) { if ($otmp2 == $2) { $orb_file = $orb_dir."/".$otmp1; $orb_file2 = $orb_dir."/".$1; print "Two orbit files, $orb_file $orb_file2\n"; } else { $orb_case = 1; $orb_file = $orb_dir."/".$otmp1; print "Case 2 but no continuous next file.\n"; } } last; #exit; } else { } } } if ($orb_case == 0) { print "$ARGV[0] \n Case 0: No orbit file exist!"; exit; } ###################### Convert time to seconds ############################ my $time_msec; if($midtime =~ /(\d*):(\d*):(\d*)/){ $time_msec = ($1*3600+$2*60+$3)*1e6; # middle time in microseconds } #print "msec of the day in UTC sensing middle: $time_msec\n"; ###################### define time window start 28 minutes in TDT ############ open(DAT,$orb_file) || die("Could not open file $orb_file!"); my @orb_data = ; close(DAT); # grep TDT-UTC my $tdtutc; if($orb_data[0] =~ /^.{177}(.{5})/){ $tdtutc = $1*1e3; # microseconds #print "TDTUTC: $tdtutc ms \n"; } my @orb_data2; if ($orb_case == 2) { open(DAT2,$orb_file2) || die("Could not open file $orb_file!"); @orb_data2 = ; close(DAT2); # grep TDT-UTC my $tdtutc2; if($orb_data2[0] =~ /^.{177}(.{5})/){ $tdtutc2 = $1*1e3; # microseconds } if ($tdtutc != $tdtutc2) { print "TDTUTC: $tdtutc $tdtutc2 \n"; print "TDTUTC differs for the two orbit files. Special case1 \n"; exit; } } my $time_msec_tdt = $time_msec + $tdtutc; if($time_msec_tdt > 86400000000) { $time_msec_tdt = $time_msec_tdt - 86400*1e6; $julday = $julday + 10; } if($time_msec < 14*60*1e6){ $first_d2y = $first_d2y - 1; } my $julday_start; my $time_start; $time_start = $time_msec_tdt - 14*60*1e6; # 14 minutes before middle time if($time_start < 0){ $julday_start = $julday - 10; $time_start = $time_start + 86400*1e6; } else{ $julday_start = $julday; } print "Time window start in TDT (days to 1.1.2000 12h;ms of the day):$julday_start/10;$time_start\n"; #print "check:$time_start ms = $time_msec ms + $tdtutc ms - 14 minutes - 86400s(0or1)\n"; ################### search orb_file for 28 minutes #################### my @tmp7; my $tmp7size; my @tmp8; my $count = 0; my @out_orb_data; LINE:foreach(@orb_data){ if($_ =~ /STTERR/){ @tmp7 = split /STTERR/,$_; $tmp7size = @tmp7 -2; @tmp8 = @tmp7[1 .. $tmp7size]; } } if ($orb_case == 2) { my @tmp82; LINE:foreach(@orb_data2){ if($_ =~ /STTERR/){ @tmp7 = split /STTERR/,$_; $tmp7size = @tmp7 -2; @tmp82 = @tmp7[1 .. $tmp7size]; } } my @tmp81 = @tmp8; @tmp8 = (@tmp81,@tmp82); } my @out_orb_data; my @tmp9; my $count = 0; my $first_s; my $n_sec; LINE:foreach(@tmp8){ if($_ =~ /^.{8}(.{6})(.{11})(.{12})(.{12})(.{12})(.{11})(.{11})(.{11})/){ # ask guoguo @tmp9 = ($1,$2,$3,$4,$5,$6,$7,$8); $tmp9[0] =~ s/^\s*//; $tmp9[0] =~ s/\s*$//; #print "$tmp9[0] $tmp9[1] $tmp9[2] $tmp9[3] $tmp9[4]\n"; if( ($tmp9[0] eq $julday_start) && ($tmp9[1] > $time_start) && ($count < 56)){ # 28 minutes, 30s each $count = $count+1; if($count eq '1'){ #print "First time in TDT: $julday_start $tmp9[1] ms (check with start time)\n"; $first_s = ($tmp9[1] - $tdtutc)/1e6; # convert to UTC if($first_s < 0){ $first_s = $first_s +86400; } } $n_sec = $first_s + 30*($count-1); #$n_sec = ($tmp9[1] - $tdtutc)/1e6; $tmp9[2] = sprintf("% .3f",$tmp9[2]/1e3); # change unit to meters $tmp9[3] = sprintf("% .3f",$tmp9[3]/1e3); $tmp9[4] = sprintf("% .3f",$tmp9[4]/1e3); $tmp9[5] = sprintf("% .6f",$tmp9[5]/1e6); $tmp9[6] = sprintf("% .6f",$tmp9[6]/1e6); $tmp9[7] = sprintf("% .6f",$tmp9[7]/1e6); push(@out_orb_data,"$first_year $first_d2y $n_sec $tmp9[2] $tmp9[3] $tmp9[4] $tmp9[5] $tmp9[6] $tmp9[7]\n"); } } } print "TDTUTC: $tdtutc ms \n"; ###################### write to the output file ########################### unshift(@out_orb_data,"$count $first_year $first_d2y $first_s 30 \n"); open(DAT2,">$led_file") || die("Could not open file!"); print DAT2 @out_orb_data; close(DAT2); #print "56 orbit data was printed to $led_file\n"; print "------- Orbit data finished --------\n"; ################## subroutine to convert time format ################# sub ymd2jul { # convert year month day to integer Julian day #print "$_[0]\n"; # input my $iyear = substr($_[0],0,4); my $imonth = substr($_[0],4,2); my $iday = substr($_[0],6,2); #print "$iyear $imonth $iday \n"; # algrithm from wiki my $a = int((14-$imonth)/12); my $y = $iyear + 4800 - $a; my $m = $imonth + 12*$a - 3; my $jday2day = $iday + int((153*$m+2)/5) + 365*$y + int($y/4) - int($y/100) + int($y/400) - 32045; return $jday2day; } sub jul2ymd_PRM { # convert Julian day to year month day hour min sec #$ymd.hms = jul2ymd_PRM($julday); my $iyear = substr($_[0],0,4); my $jday = substr($_[0],4,3); my $decimal = sprintf("%.8f", ($_[0] - int($_[0]))); my $imon; my $iday; my $ihou; my $imin; my $isec; my $ymd; my @jsum = (0,31,59,90,120,151,181,212,243,273,304,334); my @jsum2= (0,31,60,91,121,152,182,213,244,274,305,335); if ($iyear%400 == 0) { #leap year $imon = findmonth($jday,@jsum2); $iday = $jday-$jsum2[$imon-1]; } elsif ($iyear%100 == 0) { #not a leap year $imon = findmonth($jday,@jsum); $iday = $jday-$jsum[$imon-1]; } elsif ($iyear%4 == 0) { #leap year $imon = findmonth($jday,@jsum2); $iday = $jday-$jsum2[$imon-1]; } else { #not a leap year $imon = findmonth($jday,@jsum); $iday = $jday-$jsum[$imon-1]; } $ihou = int(24*$decimal); $imin = int(60*24*$decimal-60*$ihou); $isec = int(60*60*24*$decimal-60*60*$ihou-60*$imin); #print "$_ \n$iyear $imon $iday $ihou $imin $isec \n"; if ( ($imon < 10) && ($iday < 10) ) { $ymd = sprintf("%s", "0".$iday."-0".$imon."-".$iyear." ".$ihou.":".$imin.":".$isec); } elsif ($imon < 10) { $ymd = sprintf("%s", $iday."-0".$imon."-".$iyear." ".$ihou.":".$imin.":".$isec); } elsif ($iday < 10) { $ymd = sprintf("%s", "0".$iday."-".$imon."-".$iyear." ".$ihou.":".$imin.":".$isec); } else { $ymd = sprintf("%s", $iday."-".$imon."-".$iyear." ".$ihou.":".$imin.":".$isec); } return $ymd; } sub findmonth { #$imon = findmonth($jday,@jsum); my $jday = $_[0]; my @jsum = ($_[1],$_[2],$_[3],$_[4],$_[5],$_[6],$_[7],$_[8],$_[9],$_[10],$_[11],$_[12]); #print "$jday @jsum \n"; my $n = 0; my $count = 0; my $imonth; my $diff; LINE:foreach(@jsum){ $count++; $diff = $_ - $jday; #print "$count $diff \n"; if ($diff >= 0){ $n++; } last LINE if($n >=1); } if ( ($count == 12) & ($diff <= 0) ){ $imonth = 12; } else { $imonth = $count-1; } #print "$n $count $imonth \n"; return $imonth; } GMTSAR_V5.7/preproc/ERS_preproc/scripts/ERS_pre_process000644 015705 000000 00000011147 13507242167 024060 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # D. Sandwell and R. Mellors 09/09/97 # # script to read dpaf tapes, create a PRM header and run fixline # the end results are two files that can be processed using easrp # # 3760_2907.PRM - parameter file used in SAR processor # 3760_2907.fix - fixed raw SAR data for sar processing # # 4/26/06 Meng - grep num_lines from dataheader.log # - Added doppler estimation part at the end # 12/27/10 Matt - combine DPAF and CCRS # # Modified by Xiaopeng Tong, 01/23/2011 # # if ($#argv < 4) then echo "" echo " Usage: ERS_pre_process [Doppler]" echo "" echo " name_stem - filename of the .dat and .ldr file" echo " near_range - near range (in meters) of the SAR image (put 0 if use default value)" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo " num_patch - number of patches (put 0 if use default value)" echo " Doppler - Doppler value (blank if use default value)" echo "" echo " Example: " echo " command line: ERS_pre_process ERS2_356_2925_61332 978992.922 6378000 5" echo " will preprocess ERS2 SAR data 'ERS2_356_2925_61332' " echo " then output parameter file 'ERS2_356_2925_61332.PRM' and fixed raw data file 'ERS2_356_2925_61332.raw' and LED file ERS2_356_2925_61332.LED" echo " with near range close to 978992.922 meters and earth radius 6378000 meters and 5 patches" echo "" exit 1 endif # # 0) start with a virgin header # set ORBITS = "/usr/local/GMTSAR_5.7" set ERSPRE = `gmtsar_sharedir.csh` cp $ERSPRE/virgin.PRM $1.PRM echo " " echo "=========================" echo "Start pre-process $1" # # make sure the dat and ldr files exists # if(! -f $1.dat ) then echo "" echo "error - raw file does not have correct .dat suffix" echo "" exit 1 endif if(! -f $1.ldr ) then echo "" echo "error - leader file does not have correct .ldr suffix" echo "" exit 1 endif # # 1) determine if ERS1 or ERS2 and DPAF or CCRS # grep ERS1 $1.ldr; set FMT1 = $status grep ERS2 $1.ldr; set FMT2 = $status grep ERS-1 $1.ldr; set FMT3 = $status grep ERS-2 $1.ldr; set FMT4 = $status if ( ($FMT1 == 0) || ($FMT3 == 0)) then echo "SC_identity = 1 " >> $1.PRM else if (($FMT2 == 0) || ($FMT4 == 0)) then echo "SC_identity = 2 " >> $1.PRM else echo "Wrong format of the ldr file !" exit 0 endif if ( ($FMT1 == 0) || ($FMT2 == 0)) then echo "Format = DPAF" set ERSFMT = "DPAF" read_sarleader_dpaf $1.ldr >> $1.PRM else if (($FMT3 == 0) || ($FMT4 == 0)) then echo "Format = CCRS" set ERSFMT = "CCRS" else echo "Wrong format of the ldr file !" exit 0 endif # # 2) add info provided by user # echo "input_file = $1.raw" >> $1.PRM # # 3) run ers_line_fixer # rm -f $1.raw if($2 != 0) then echo "now using user defined near range = $2" if ($ERSFMT == "DPAF") then ers_line_fixer -a $2 -s DPAF/ESRIN $1.dat $1.raw > $1fix.log else if ($ERSFMT == "CCRS") then ers_line_fixer -a $2 -s CCRS $1.dat $1.raw > $1fix.log endif else echo "now using default value from the first line" if ($ERSFMT == "DPAF") then ers_line_fixer -s DPAF/ESRIN $1.dat $1.raw > $1fix.log else if ($ERSFMT == "CCRS") then ers_line_fixer -s CCRS $1.dat $1.raw > $1fix.log endif endif # # get near_range from ers_line_fixer # grep near_range $1fix.log >> $1.PRM # # 4) read and interpret the fixed data file to get more # parameters. if ($ERSFMT == "DPAF") then read_data_file_dpaf $1.raw >> $1.PRM else if ($ERSFMT == "CCRS") then read_data_file_ccrs $1.raw >> $1.PRM endif # # 5) make the LED file from PRC orbit data # set SCID = `grep SC_identity $1.PRM | awk '{print $3}'` if ($SCID == 1) then echo "ERS1" dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 else if ($SCID == 2) then echo "ERS2" dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 else echo "Wrong Satellite ID!" exit 0 endif echo "led_file = $1.LED" >> $1.PRM # # 6) doppler centroid estimation and orbital information # if ($#argv == 5) then calc_dop_orb_envi $1.PRM $1.log2 $3 $5 else if ($#argv == 4) then calc_dop_orb_envi $1.PRM $1.log2 $3 endif cat $1.PRM $1.log2 > $1_tmp.PRM echo "fdd1 = 0" >> $1_tmp.PRM echo "fddd1 = 0" >> $1_tmp.PRM mv $1_tmp.PRM $1.PRM # # 7) other stuff echo "SLC_file = $1.SLC" >> $1.PRM # # 8) change the number of patches # if ($4 != 0) then update_PRM.csh $1.PRM num_patches $4 echo "Number of patches is set to $4" endif # # clean unwanted files # rm -f *.log* echo "End pre-process $1" GMTSAR_V5.7/preproc/ERS_preproc/scripts/check_PRC.pl000755 015705 000000 00000001576 13505462014 023217 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl use strict; if ($#ARGV < 0 ) { print "\nusage: check_PRC.pl PRC_file\n\n"; print "output: First and last few records\n"; exit; } my $prc_file = $ARGV[0]; my @prc_data; open(DAT,$prc_file) || die("Could not open file $prc_file!"); my @prc_data = ; close(DAT); my @tmp7; my $tmp7size; my @tmp8; LINE:foreach(@prc_data){ if($_ =~ /STTERR/){ @tmp7 = split /STTERR/,$_; $tmp7size = @tmp7 -2; @tmp8 = @tmp7[1 .. $tmp7size]; } } my @tmp9; my $count = 0; my $rsize = @tmp8; LINE:foreach(@tmp8){ if($_ =~ /^.{8}(.{6})(.{11})(.{12})(.{12})(.{12})(.{11})(.{11})(.{11})/){ # ask guoguo $count = $count + 1; @tmp9 = ($1,$2,$3,$4,$5,$6,$7,$8); $tmp9[0] =~ s/^\s*//; $tmp9[0] =~ s/\s*$//; if (($count < 5) || ($count > $rsize -5)) { print "$count: $tmp9[0] $tmp9[1] $tmp9[2] $tmp9[3] $tmp9[4]\n"; } } } GMTSAR_V5.7/preproc/ERS_preproc/scripts/virgin.PRM000644 015705 000000 00000001446 13505462014 022750 0ustar00sandwellwheel000000 000000 num_valid_az = 2800 nrows = 4096 first_line = 1 deskew = n caltone = 0.000000 st_rng_bin = 1 num_rng_bins = 6144 Flip_iq = n offset_video = n az_res = 5 nlooks = 1 chirp_ext = 614 scnd_rng_mig = n rng_spec_wgt = 1.000000 rm_rng_band = 0.000000 rm_az_band = 0.000000 rshift = 0 sub_int_r = 0.0 ashift = 0 sub_int_a = 0.0 stretch_r = 0.0 stretch_a = 0.0 a_stretch_r = 0.0 a_stretch_a = 0.0 equatorial_radius = 6378137.000000 polar_radius = 6356752.314100 I_mean = 15.5 Q_mean = 15.5 rng_samp_rate = 1.89625e+07 chirp_slope = 4.17788e+11 pulse_dur = 3.712e-05 radar_wavelength = 0.056666 SLC_scale = 4000000.0 lookdir = R GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_ccrs/testdata/000755 015705 000000 00000000000 13505462014 025156 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_ccrs/Makefile000644 015705 000000 00000000471 13505462014 025007 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = read_sarleader_ccrs CSRCS = read_sarleader_ccrs.c make_prm_ccrs.c OBJS = $(CSRCS:.c=.o) LIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(LIBS) all: $(PROG) clean: rm -f $(OBJS) tags core install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_ccrs/make_prm_ccrs.c000644 015705 000000 00000003151 13505462014 026316 0ustar00sandwellwheel000000 000000 /* write a PRM file */ #include "../include/SARtape.h" #include "../include/soi.h" #include #include #include #define FACTOR 1000000 make_prm(sar) struct SAR_info sar; { double radar_wavelength, pulse_dur, rng_samp_rate; double I_mean, Q_mean, sc_clock_start, chirp_slope; int SC_identity; /* ERS-1 = 1, ERS2 = 2 */ /* translate from structure holding SAR info */ /* see SARtape.h and associated include files for more details */ /* KW - removed dpaf from sar.dpaf_dss 12/17/98 */ sscanf((sar.dss->mission_identifier + 4), "%d", &SC_identity); prf1 = atof(sar.dss->nominal_prf); radar_wavelength = atof(sar.dss->radar_wavelength); /* convert into seconds from MHz */ pulse_dur = (atof(sar.dss->range_pulse_length) / FACTOR); rng_samp_rate = FACTOR * (atof(sar.dss->sampling)); /* correct by factor of two */ chirp_slope = 2.0 * atof(sar.dss->range_pulse_phase_quad); I_mean = atof(sar.dss->dc_bias_i); Q_mean = atof(sar.dss->dc_bias_q); /* pj: rsat leader has no values for dc_*; set to 15.5 (Sandwell) */ if (I_mean == 0.) I_mean = 15.5; if (Q_mean == 0.) Q_mean = 15.5; /* we don't want the first two character; (of year)) */ sc_clock_start = atof((sar.dss->satelite_clock_time + 2)); fprintf(stdout, "I_mean = %lf\n", I_mean); fprintf(stdout, "Q_mean = %lf\n", Q_mean); fprintf(stdout, "rng_samp_rate = %lg\n", rng_samp_rate); fprintf(stdout, "chirp_slope = %lg\n", chirp_slope); fprintf(stdout, "pulse_dur = %lg\n", pulse_dur); fprintf(stdout, "radar_wavelength = %lg\n", radar_wavelength); fprintf(stdout, "SC_identity = %d\n", SC_identity); } GMTSAR_V5.7/preproc/ERS_preproc/read_sarleader_ccrs/read_sarleader_ccrs.c000644 015705 000000 00000005657 13505462014 027475 0ustar00sandwellwheel000000 000000 /* This program is supposed to read raw SAR data tapes */ /* */ /* R. Mellors July 1997 */ /* IGPP_SIO */ /* */ #include "../include/SARtape.h" #include #include #include int main(argc, argv) int argc; char **argv; { char *filename, string[5]; int nitems, i, num_data_points; FILE *file1, *outfile; struct SAR_info sar; struct sarleader_binary slfsb, slvsb, slplb; if (argc < 2) { fprintf(stderr, "Usage: read_SAR_tape SARLEADER \n"); exit(1); } filename = argv[1]; file1 = fopen(filename, "r"); outfile = fopen("ldrfile.log", "w"); fprintf(outfile, "listing header values to %s\n", filename); /* allocate memory */ sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); sar.varseg = (struct sarleader_fdr_varseg *)malloc(sizeof(struct sarleader_fdr_varseg)); sar.dss = (struct sarleader_dss *)malloc(sizeof(struct sarleader_dss)); sar.platform = (struct platform *)malloc(sizeof(struct platform)); /* read the file */ nitems = fread(&slfsb, sizeof(struct sarleader_binary), 1, file1); fprintf(outfile, " read %d bytes %d items from file %s : position %ld\n", (sizeof(struct sarleader_binary)), nitems, filename, ftell(file1)); fprintf(outfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(&slfsb)); fscanf(file1, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fprintf(outfile, SARLEADER_FDR_FIXSEG_WCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fscanf(file1, SARLEADER_FDR_VARSEG_RCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); fprintf(outfile, SARLEADER_FDR_VARSEG_WCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); nitems = fread(&slvsb, sizeof(struct sarleader_binary), 1, file1); fprintf(outfile, " read %d bytes %d items from file %s : position %ld\n", (sizeof(struct sarleader_binary)), nitems, filename, ftell(file1)); fprintf(outfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(&slfsb)); fscanf(file1, SARLEADER_DSS_RCS, SARLEADER_DSS_RVL(sar.dss)); fprintf(outfile, SARLEADER_DSS_WCS, SARLEADER_DSS_RVL(sar.dss)); /* why do I need to skip 1664 bytes ahead; what am I missing ? */ fseek(file1, 1664, SEEK_CUR); nitems = fread(&slplb, sizeof(struct sarleader_binary), 1, file1); fprintf(outfile, " read %d bytes %d items from file %s : position %ld\n", (sizeof(struct sarleader_binary)), nitems, filename, ftell(file1)); fprintf(outfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(&slplb)); fscanf(file1, PLATFORM_RCS, PLATFORM_RVL(sar.platform)); fprintf(outfile, PLATFORM_WCS, PLATFORM_RVL(sar.platform)); sar.position = (struct position_vector *)malloc(sizeof(struct position_vector)); sscanf(sar.platform->num_data_points, " %1c", string); for (i = 0; i < (atoi(string)); i++) { fscanf(file1, POSITION_VECTOR_RCS, POSITION_VECTOR_RVL(sar.position)); fprintf(outfile, POSITION_VECTOR_WCS, POSITION_VECTOR_RVL(sar.position)); } /* now make the PRM file */ make_prm(sar); } GMTSAR_V5.7/preproc/ERS_preproc/include/write_platform.h000644 015705 000000 00000005504 13505462014 024234 0ustar00sandwellwheel000000 000000 #define PLATFORM_WCS \ "*********** PLATFORM POSITION VECTOR **********\n" \ "reserved1 ==> %.128s\n" \ "num_data_points ==> %.4s\n" \ "year_of_data_points ==> %.4s\n" \ "month_of_data_points ==> %.4s\n" \ "day_of_data_points ==> %.4s\n" \ "day_of_data_points_in_year ==> %.4s\n" \ "sec_of_day_of_data ==> %.22s\n" \ "data_points_time_gap ==> %.22s\n" \ "ref_coord_sys ==> %.64s\n" \ "greenwhich_mean_hour_angle ==> %.22s\n" \ "a_track_pos_err ==> %.16s\n" \ "c_track_pos_err ==> %.16s\n" \ "radial_pos_err ==> %.16s\n" \ "reserved2 ==> %.48s\n\n" #define POSITION_VECTOR_WCS \ "*********** PLATFORM VECTOR **********\n" \ "pos_x ==> %.22s\n" \ "pos_y ==> %.22s\n" \ "pos_z ==> %.22s\n" \ "vel_x ==> %.22s\n" \ "vel_y ==> %.22s\n" \ "vel_z ==> %.22s\n\n" GMTSAR_V5.7/preproc/ERS_preproc/include/SARtape.h000644 015705 000000 00000001232 13505462014 022467 0ustar00sandwellwheel000000 000000 /* main include file for read_SAR_tape */ /* R. Mellors August 1997 */ /* defines structures used in reading SAR tapes */ /*----------------------------*/ #include "sardata.h" #include "sarleader_dss.h" #include "sarleader_fdr.h" #include "sarleader_platform.h" #include "write_dss.h" #include "write_fdr_fixseg.h" #include "write_fdr_varseg.h" #include "write_platform.h" struct SAR_info { struct sarleader_dss *dss; struct sarleader_dpaf_dss *dpaf_dss; struct sarleader_fdr_fixseg *fixseg; struct sarleader_fdr_varseg *varseg; struct platform *platform; struct position_vector *position; struct sardata_header *dataheader; struct sardata_rec *datarec; }; GMTSAR_V5.7/preproc/ERS_preproc/include/sarleader_dss.h000644 015705 000000 00000043473 13505462014 024020 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* include files modified from the rceos.c programs written by C. Tomassini & F. Lorenna other format information from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada Table 6.1.2.2 "SARLEADER" FILE POINTER RECORD CONTENTS page 6. R. J. Mellors July 1997, IGPP-SIO from esa annex A (Document ER-IS-EPO-GS-5902.I) Issue 2.1.1 Paul F. Jamason 25-FEB-1997, IGPP-SIO */ struct sarleader_dss_binary { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; /* ccrs raw data set summary record format */ #define SARLEADER_DSS_RCS \ "%4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c" \ "%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c" \ "%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c" \ "%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c" \ "%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c" \ "%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c" \ "%4c%4c%16c%16c%16c%32c%16c%16c%16c%24c%24c%24c%546c" /* ccrs raw data set summary corresponding log file output */ #define SARLEADER_DSS_RVL(SP) \ (SP)->dss_rec_seq_num, (SP)->chan_ind, (SP)->reserved1, (SP)->scene_number, (SP)->input_scene_center_time, (SP)->spare1, \ (SP)->center_lat, (SP)->center_long, (SP)->center_heading, (SP)->ellipsoid_designator, (SP)->ellipsoid_semimajor_axis, \ (SP)->ellipsoid_semiminor_axis, (SP)->earth_constant, (SP)->spare2, (SP)->ellipsoid_j2, (SP)->ellipsoid_j3, \ (SP)->ellipsoid_j4, (SP)->spare, (SP)->reserved_new, (SP)->scene_centre_line_number, (SP)->scene_centre_pixel_number, \ (SP)->scene_length, (SP)->scene_width, (SP)->spare3, (SP)->nchan, (SP)->spare4, (SP)->mission_identifier, \ (SP)->sensor_id_and_mode, (SP)->orbit_number, (SP)->lat_nadir_center, (SP)->long_nadir_center, \ (SP)->heading_nadir_center, (SP)->clock_angel, (SP)->incidence_angle_center, (SP)->radar_freq, (SP)->radar_wavelength, \ (SP)->motion_compensation, (SP)->range_pulse_code_specifier, (SP)->range_pulse_amplitude_const, \ (SP)->range_pulse_amplitude_lin, (SP)->range_pulse_amplitude_quad, (SP)->range_pulse_amplitude_cube, \ (SP)->range_pulse_amplitude_quart, (SP)->range_pulse_phase_const, (SP)->range_pulse_phase_lin, \ (SP)->range_pulse_phase_quad, (SP)->range_pulse_phase_cube, (SP)->range_pulse_phase_quart, (SP)->chirp_extraction_index, \ (SP)->spare5, (SP)->sampling, (SP)->range_gate_early_edge_start_image, (SP)->range_pulse_length, (SP)->reserved2, \ (SP)->range_compressed_flag, (SP)->reserved3, (SP)->quantisation_in_bits, (SP)->quantizer_descriptor, (SP)->dc_bias_i, \ (SP)->dc_bias_q, (SP)->gain_imbalance, (SP)->spare6, (SP)->reserved4, (SP)->antenna_mech_bor, (SP)->reserved5, \ (SP)->nominal_prf, (SP)->reserved6, (SP)->satelite_encoded_binary_time, (SP)->satelite_clock_time, \ (SP)->satelite_clock_increment, (SP)->spare7, (SP)->processing_facility_identifier, (SP)->processing_system_id, \ (SP)->processing_version_id, (SP)->reserved7, (SP)->product_type_id, (SP)->alg_id, (SP)->nlooks_az, \ (SP)->neff_looks_range, (SP)->bandwidth_look_az, (SP)->bandwidth_look_range, (SP)->total_look_bandwidth_az, \ (SP)->total_look_bandwidth_range, (SP)->w_func_designator_az, (SP)->w_func_designator_range, (SP)->data_input_source, \ (SP)->nom_res_3db_range, (SP)->nom_res_az, (SP)->reserved8, (SP)->a_track_dop_freq_const_early_image, \ (SP)->a_track_dop_freq_lin_early_image, (SP)->a_track_dop_freq_quad_early_image, (SP)->spare8, \ (SP)->c_track_dop_freq_const_early_image, (SP)->c_track_dop_freq_lin_early_image, \ (SP)->c_track_dop_freq_quad_early_image, (SP)->time_direction_along_pixel, (SP)->time_direction_along_line, \ (SP)->a_track_dop_freq_rate_const_early_image, (SP)->a_track_dop_freq_rate_lin_early_image, \ (SP)->a_track_dop_freq_rate_quad_early_image, (SP)->spare9, (SP)->c_track_dop_freq_rate_const_early_image, \ (SP)->c_track_dop_freq_rate_lin_early_image, (SP)->c_track_dop_freq_rate_quad_early_image, (SP)->spare10, \ (SP)->line_content_indicator, (SP)->clut_lock_flag, (SP)->autofocussing_flag, (SP)->line_spacing, \ (SP)->pixel_spacing_range, (SP)->range_compression_designator, (SP)->spare11, (SP)->zero_dop_range_time_f_pixel, \ (SP)->zero_dop_range_time_c_pixel, (SP)->zero_dop_range_time_l_pixel, (SP)->zero_dop_az_time_f_pixel, \ (SP)->zero_dop_az_time_c_pixel, (SP)->zero_dop_az_time_l_pixel, (SP)->gec_local_use_segment struct sarleader_dss { char dss_rec_seq_num[4]; /*dss record sequence number (1)*/ char chan_ind[4]; /*sar channel indicator (1)*/ char reserved1[16]; /* scene identifier*/ char scene_number[32]; char input_scene_center_time[32]; char spare1[16]; char center_lat[16]; char center_long[16]; char center_heading[16]; char ellipsoid_designator[16]; char ellipsoid_semimajor_axis[16]; char ellipsoid_semiminor_axis[16]; char earth_constant[16]; char spare2[16]; char ellipsoid_j2[16]; char ellipsoid_j3[16]; char ellipsoid_j4[16]; char spare[16]; char reserved_new[16]; char scene_centre_line_number[8]; char scene_centre_pixel_number[8]; char scene_length[16]; char scene_width[16]; char spare3[16]; char nchan[4]; char spare4[4]; char mission_identifier[16]; char sensor_id_and_mode[32]; char orbit_number[8]; char lat_nadir_center[8]; char long_nadir_center[8]; char heading_nadir_center[8]; char clock_angel[8]; char incidence_angle_center[8]; char radar_freq[8]; char radar_wavelength[16]; char motion_compensation[2]; char range_pulse_code_specifier[16]; char range_pulse_amplitude_const[16]; char range_pulse_amplitude_lin[16]; char range_pulse_amplitude_quad[16]; char range_pulse_amplitude_cube[16]; char range_pulse_amplitude_quart[16]; char range_pulse_phase_const[16]; char range_pulse_phase_lin[16]; char range_pulse_phase_quad[16]; char range_pulse_phase_cube[16]; char range_pulse_phase_quart[16]; char chirp_extraction_index[8]; char spare5[8]; char sampling[16]; char range_gate_early_edge_start_image[16]; char range_pulse_length[16]; char reserved2[4]; char range_compressed_flag[4]; char reserved3[32]; char quantisation_in_bits[8]; char quantizer_descriptor[12]; char dc_bias_i[16]; char dc_bias_q[16]; char gain_imbalance[16]; char spare6[32]; char reserved4[16]; char antenna_mech_bor[16]; char reserved5[4]; char nominal_prf[16]; char reserved6[32]; char satelite_encoded_binary_time[16]; char satelite_clock_time[32]; char satelite_clock_increment[8]; char spare7[8]; char processing_facility_identifier[16]; char processing_system_id[8]; char processing_version_id[8]; char reserved7[32]; char product_type_id[32]; char alg_id[32]; char nlooks_az[16]; char neff_looks_range[16]; char bandwidth_look_az[16]; char bandwidth_look_range[16]; char total_look_bandwidth_az[16]; char total_look_bandwidth_range[16]; char w_func_designator_az[32]; char w_func_designator_range[32]; char data_input_source[16]; char nom_res_3db_range[16]; char nom_res_az[16]; char reserved8[32]; char a_track_dop_freq_const_early_image[16]; char a_track_dop_freq_lin_early_image[16]; char a_track_dop_freq_quad_early_image[16]; char spare8[16]; char c_track_dop_freq_const_early_image[16]; char c_track_dop_freq_lin_early_image[16]; char c_track_dop_freq_quad_early_image[16]; char time_direction_along_pixel[8]; char time_direction_along_line[8]; char a_track_dop_freq_rate_const_early_image[16]; char a_track_dop_freq_rate_lin_early_image[16]; char a_track_dop_freq_rate_quad_early_image[16]; char spare9[16]; char c_track_dop_freq_rate_const_early_image[16]; char c_track_dop_freq_rate_lin_early_image[16]; char c_track_dop_freq_rate_quad_early_image[16]; char spare10[16]; char line_content_indicator[8]; char clut_lock_flag[4]; char autofocussing_flag[4]; char line_spacing[16]; char pixel_spacing_range[16]; char range_compression_designator[16]; char spare11[32]; char zero_dop_range_time_f_pixel[16]; char zero_dop_range_time_c_pixel[16]; char zero_dop_range_time_l_pixel[16]; char zero_dop_az_time_f_pixel[25]; char zero_dop_az_time_c_pixel[24]; char zero_dop_az_time_l_pixel[24]; char gec_local_use_segment[546]; }; /* dpaf raw data set summary record format */ #define SARLEADER_DPAF_DSS_RCS \ "%4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c" \ "%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c" \ "%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c" \ "%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c" \ "%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c" \ "%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c" \ "%4c%4c%16c%16c%16c%32c%16c%16c%16c%24c%24c%24c" /* dpaf raw data set summary corresponding log file output */ #define SARLEADER_DPAF_DSS_RVL(SP) \ (SP)->dss_rec_seq_num, (SP)->chan_ind, (SP)->reserved1, (SP)->scene_number, (SP)->input_scene_center_time, (SP)->spare1, \ (SP)->center_lat, (SP)->center_long, (SP)->center_heading, (SP)->ellipsoid_designator, (SP)->ellipsoid_semimajor_axis, \ (SP)->ellipsoid_semiminor_axis, (SP)->earth_constant, (SP)->spare2, (SP)->ellipsoid_j2, (SP)->ellipsoid_j3, \ (SP)->ellipsoid_j4, (SP)->spare, (SP)->reserved_new, (SP)->scene_centre_line_number, (SP)->scene_centre_pixel_number, \ (SP)->scene_length, (SP)->scene_width, (SP)->spare3, (SP)->nchan, (SP)->spare4, (SP)->mission_identifier, \ (SP)->sensor_id_and_mode, (SP)->orbit_number, (SP)->lat_nadir_center, (SP)->long_nadir_center, \ (SP)->heading_nadir_center, (SP)->clock_angel, (SP)->incidence_angle_center, (SP)->radar_freq, (SP)->radar_wavelength, \ (SP)->motion_compensation, (SP)->range_pulse_code_specifier, (SP)->range_pulse_amplitude_const, \ (SP)->range_pulse_amplitude_lin, (SP)->range_pulse_amplitude_quad, (SP)->range_pulse_amplitude_cube, \ (SP)->range_pulse_amplitude_quart, (SP)->range_pulse_phase_const, (SP)->range_pulse_phase_lin, \ (SP)->range_pulse_phase_quad, (SP)->range_pulse_phase_cube, (SP)->range_pulse_phase_quart, (SP)->chirp_extraction_index, \ (SP)->spare5, (SP)->sampling, (SP)->range_gate_early_edge_start_image, (SP)->range_pulse_length, (SP)->reserved2, \ (SP)->range_compressed_flag, (SP)->reserved3, (SP)->quantisation_in_bits, (SP)->quantizer_descriptor, (SP)->dc_bias_i, \ (SP)->dc_bias_q, (SP)->gain_imbalance, (SP)->spare6, (SP)->reserved4, (SP)->antenna_mech_bor, (SP)->reserved5, \ (SP)->nominal_prf, (SP)->reserved6, (SP)->satelite_encoded_binary_time, (SP)->satelite_clock_time, \ (SP)->satelite_clock_increment, (SP)->spare7, (SP)->processing_facility_identifier, (SP)->processing_system_id, \ (SP)->processing_version_id, (SP)->reserved7, (SP)->product_type_id, (SP)->alg_id, (SP)->nlooks_az, \ (SP)->neff_looks_range, (SP)->bandwidth_look_az, (SP)->bandwidth_look_range, (SP)->total_look_bandwidth_az, \ (SP)->total_look_bandwidth_range, (SP)->w_func_designator_az, (SP)->w_func_designator_range, (SP)->data_input_source, \ (SP)->nom_res_3db_range, (SP)->nom_res_az, (SP)->reserved8, (SP)->a_track_dop_freq_const_early_image, \ (SP)->a_track_dop_freq_lin_early_image, (SP)->a_track_dop_freq_quad_early_image, (SP)->spare8, \ (SP)->c_track_dop_freq_const_early_image, (SP)->c_track_dop_freq_lin_early_image, \ (SP)->c_track_dop_freq_quad_early_image, (SP)->time_direction_along_pixel, (SP)->time_direction_along_line, \ (SP)->a_track_dop_freq_rate_const_early_image, (SP)->a_track_dop_freq_rate_lin_early_image, \ (SP)->a_track_dop_freq_rate_quad_early_image, (SP)->spare9, (SP)->c_track_dop_freq_rate_const_early_image, \ (SP)->c_track_dop_freq_rate_lin_early_image, (SP)->c_track_dop_freq_rate_quad_early_image, (SP)->spare10, \ (SP)->line_content_indicator, (SP)->clut_lock_flag, (SP)->autofocussing_flag, (SP)->line_spacing, \ (SP)->pixel_spacing_range, (SP)->range_compression_designator, (SP)->spare11, (SP)->zero_dop_range_time_f_pixel, \ (SP)->zero_dop_range_time_c_pixel, (SP)->zero_dop_range_time_l_pixel, (SP)->zero_dop_az_time_f_pixel, \ (SP)->zero_dop_az_time_c_pixel, (SP)->zero_dop_az_time_l_pixel struct sarleader_dpaf_dss { char dss_rec_seq_num[4]; /*dss record sequence number (1)*/ char chan_ind[4]; /*sar channel indicator (1)*/ char reserved1[16]; /* scene identifier*/ char scene_number[32]; char input_scene_center_time[32]; char spare1[16]; char center_lat[16]; char center_long[16]; char center_heading[16]; char ellipsoid_designator[16]; char ellipsoid_semimajor_axis[16]; char ellipsoid_semiminor_axis[16]; char earth_constant[16]; char spare2[16]; char ellipsoid_j2[16]; char ellipsoid_j3[16]; char ellipsoid_j4[16]; char spare[16]; char reserved_new[16]; char scene_centre_line_number[8]; char scene_centre_pixel_number[8]; char scene_length[16]; char scene_width[16]; char spare3[16]; char nchan[4]; char spare4[4]; char mission_identifier[16]; char sensor_id_and_mode[32]; char orbit_number[8]; char lat_nadir_center[8]; char long_nadir_center[8]; char heading_nadir_center[8]; char clock_angel[8]; char incidence_angle_center[8]; char radar_freq[8]; char radar_wavelength[16]; char motion_compensation[2]; char range_pulse_code_specifier[16]; char range_pulse_amplitude_const[16]; char range_pulse_amplitude_lin[16]; char range_pulse_amplitude_quad[16]; char range_pulse_amplitude_cube[16]; char range_pulse_amplitude_quart[16]; char range_pulse_phase_const[16]; char range_pulse_phase_lin[16]; char range_pulse_phase_quad[16]; char range_pulse_phase_cube[16]; char range_pulse_phase_quart[16]; char chirp_extraction_index[8]; char spare5[8]; char sampling[16]; char range_gate_early_edge_start_image[16]; char range_pulse_length[16]; char reserved2[4]; char range_compressed_flag[4]; char reserved3[32]; char quantisation_in_bits[8]; char quantizer_descriptor[12]; char dc_bias_i[16]; char dc_bias_q[16]; char gain_imbalance[16]; char spare6[32]; char reserved4[16]; char antenna_mech_bor[16]; char reserved5[4]; char nominal_prf[16]; char reserved6[32]; char satelite_encoded_binary_time[16]; char satelite_clock_time[32]; char satelite_clock_increment[8]; char spare7[8]; char processing_facility_identifier[16]; char processing_system_id[8]; char processing_version_id[8]; char reserved7[32]; char product_type_id[32]; char alg_id[32]; char nlooks_az[16]; char neff_looks_range[16]; char bandwidth_look_az[16]; char bandwidth_look_range[16]; char total_look_bandwidth_az[16]; char total_look_bandwidth_range[16]; char w_func_designator_az[32]; char w_func_designator_range[32]; char data_input_source[16]; char nom_res_3db_range[16]; char nom_res_az[16]; char reserved8[32]; char a_track_dop_freq_const_early_image[16]; char a_track_dop_freq_lin_early_image[16]; char a_track_dop_freq_quad_early_image[16]; char spare8[16]; char c_track_dop_freq_const_early_image[16]; char c_track_dop_freq_lin_early_image[16]; char c_track_dop_freq_quad_early_image[16]; char time_direction_along_pixel[8]; char time_direction_along_line[8]; char a_track_dop_freq_rate_const_early_image[16]; char a_track_dop_freq_rate_lin_early_image[16]; char a_track_dop_freq_rate_quad_early_image[16]; char spare9[16]; char c_track_dop_freq_rate_const_early_image[16]; char c_track_dop_freq_rate_lin_early_image[16]; char c_track_dop_freq_rate_quad_early_image[16]; char spare10[16]; char line_content_indicator[8]; char clut_lock_flag[4]; char autofocussing_flag[4]; char line_spacing[16]; char pixel_spacing_range[16]; char range_compression_designator[16]; char spare11[32]; char zero_dop_range_time_f_pixel[16]; char zero_dop_range_time_c_pixel[16]; char zero_dop_range_time_l_pixel[16]; char zero_dop_az_time_f_pixel[24]; char zero_dop_az_time_c_pixel[24]; char zero_dop_az_time_l_pixel[24]; }; GMTSAR_V5.7/preproc/ERS_preproc/include/write_fdr_fixseg.h000644 015705 000000 00000005047 13505462014 024532 0ustar00sandwellwheel000000 000000 #define SARLEADER_FDR_FIXSEG_WCS \ "*********** SAR FDR FIXED SEGMENT ***********\n" \ "A_E_flag ==> %.2s\n" \ "blank_2 ==> %.2s\n" \ "for_con_doc ==> %.12s\n" \ "for_con_doc_rev_level ==> %.2s\n" \ "file_des_rev_level ==> %.2s\n" \ "softw_rel ==> %.12s\n" \ "file_number ==> %.4s\n" \ "file_name ==> %.16s\n" \ "rec_seq_loc_type_flag ==> %.4s\n" \ "seq_number_loc ==> %.8s\n" \ "seq_number_field_length ==> %.4s\n" \ "rec_code_loc_type_flag ==> %.4s\n" \ "rec_code_loc ==> %.8s\n" \ "rec_code_field_length ==> %.4s\n" \ "rec_len_loc_type_flag ==> %.4s\n" \ "rec_len_loc ==> %.8s\n" \ "rec_len_field_length ==> %.4s\n" \ "reserved_4 ==> %.4s\n" \ "reserved_segment ==> %.64s\n\n" GMTSAR_V5.7/preproc/ERS_preproc/include/soi.h000644 015705 000000 00000006705 13505462014 021774 0ustar00sandwellwheel000000 000000 /************************************************************************ * soi.h is the include file for the esarp SAR processor. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * * * * 4/23/97- added parameters for orbit calculations: x_target, * * y_target,z_target,baseline,alpha,sc_identity, * * ref_identity,SC_clock_start,SC_clock_stop, * * clock_start,clock_stop * * -DTS * * * * 4/23/97- added parameters: rec_start, rec_stop * * -EJP * * * * 8/28/97- added parameters baseline_start baseline_end * * alpha_start alpha_end * * * * 9/12/97 added clipi2 function to clip to short int * * * * 4/26/06 added nrows, num_lines * ************************************************************************/ #include #include #include #define SOL 299792456.0 #define PI 3.1415926535897932 #define PI2 6.2831853071795864 #define I2MAX 32767. #define I2SCALE 4.e6 #define TRUE 1 #define FALSE 0 #define RW 0666 #define MULT_FACT 1000.0 #define sgn(A) ((A) >= 0.0 ? 1.0 : -1.0) #define clipi2(A) (((A) > I2MAX) ? I2MAX : (((A) < -I2MAX) ? -I2MAX : A)) typedef struct SCOMPLEX { short r, i; } scomplex; typedef struct FCOMPLEX { float r, i; } fcomplex; typedef struct DCOMPLEX { double r, i; } dcomplex; char *input_file; char *out_amp_file; char *out_data_file; char *deskew; char *iqflip; char *off_vid; char *srm; char *ref_file; int debug_flag; int bytes_per_line; int good_bytes; int first_line; int num_patches; int first_sample; int num_valid_az; int st_rng_bin; int num_rng_bins; int nextend; int nlooks; int xshift; int yshift; int fdc_ystrt; int fdc_strt; /*New parameters 4/23/97 -EJP */ int rec_start; int rec_stop; /* End new parameters 4/23/97 -EJP */ /* New parameters 4/23/97 -DTS */ int SC_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS */ int ref_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS */ double SC_clock_start; /* YYDDD.DDDD */ double SC_clock_stop; /* YYDDD.DDDD */ double icu_start; /* onboard clock counter */ double clock_start; /* DDD.DDDDDDDDDD same as SC_clock_start but no date and more precise */ double clock_stop; /* DDD.DDDDDDDDDD same as SC_clock_start but no date and more precise */ /* End new parameters 4/23/97 -DTS */ double caltone; double RE; /* Local Earth radius */ double vel1; /* Equivalent SC velocity */ double ht1; /* (SC_radius - RE) */ double near_range; double far_range; double prf1; double xmi1; double xmq1; double az_res; double fs; double slope; double pulsedur; double lambda; double rhww; double pctbw; double pctbwaz; double fd1; double fdd1; double fddd1; double sub_int_r; double sub_int_a; double stretch_r; double stretch_a; double a_stretch_r; double a_stretch_a; /* New parameters 8/28/97 -DTS */ double baseline_start; double baseline_end; double alpha_start; double alpha_end; /* End new parameters 8/28/97 -DTS */ /* New parameters 4/26/06 */ int nrows; int num_lines; GMTSAR_V5.7/preproc/ERS_preproc/include/sarleader_platform.h000644 015705 000000 00000003212 13505462014 025036 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define PLATFORM_RCS "%128c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%48c" #define PLATFORM_RVL(SP) \ (SP)->reserved1, (SP)->num_data_points, (SP)->year_of_data_points, (SP)->month_of_data_points, (SP)->day_of_data_points, \ (SP)->day_of_data_points_in_year, (SP)->sec_of_day_of_data, (SP)->data_points_time_gap, (SP)->ref_coord_sys, \ (SP)->greenwhich_mean_hour_angle, (SP)->a_track_pos_err, (SP)->c_track_pos_err, (SP)->radial_pos_err, (SP)->reserved2 struct platform { char reserved1[128]; char num_data_points[4]; char year_of_data_points[4]; char month_of_data_points[4]; char day_of_data_points[4]; char day_of_data_points_in_year[4]; char sec_of_day_of_data[22]; char data_points_time_gap[22]; char ref_coord_sys[64]; char greenwhich_mean_hour_angle[22]; char a_track_pos_err[16]; char c_track_pos_err[16]; char radial_pos_err[16]; char reserved2[48]; }; #define POSITION_VECTOR_RCS "%22c%22c%22c%22c%22c%22c" #define POSITION_VECTOR_RVL(SP) (SP)->pos_x, (SP)->pos_y, (SP)->pos_z, (SP)->vel_x, (SP)->vel_y, (SP)->vel_z struct position_vector { char pos_x[22]; char pos_y[22]; char pos_z[22]; char vel_x[22]; char vel_y[22]; char vel_z[22]; }; GMTSAR_V5.7/preproc/ERS_preproc/include/write_dss.h000644 015705 000000 00000074336 13505462014 023212 0ustar00sandwellwheel000000 000000 #define SARLEADER_DSS_WCS \ "*********** DSS RECORD ***********\n" \ "dss_rec_seq_num ==> %.4s\n" \ "chan_ind ==> %.4s\n" \ "reserved1 ==> %.16s\n" \ "scene_number ==> %.32s\n" \ "input_scene_center_time ==> %.32s\n" \ "spare1 ==> %.16s\n" \ "center_lat ==> %.16s\n" \ "center_long ==> %.16s\n" \ "center_heading ==> %.16s\n" \ "ellipsoid_designator ==> %.16s\n" \ "ellipsoid_semimajor_axis ==> %.16s\n" \ "ellipsoid_semiminor_axis ==> %.16s\n" \ "earth_constant ==> %.16s\n" \ "spare2 ==> %.16s\n" \ "ellipsoid_j2 ==> %.16s\n" \ "ellipsoid_j3 ==> %.16s\n" \ "ellipsoid_j4 ==> %.16s\n" \ "spare ==> %.16s\n" \ "reserved_new ==> %.16s\n" \ "scene_centre_line_number ==> %.8s\n" \ "scene_centre_pixel_number ==> %.8s\n" \ "scene_length ==> %.16s\n" \ "scene_width ==> %.16s\n" \ "spare3 ==> %.16s\n" \ "nchan ==> %.4s\n" \ "spare4 ==> %.4s\n" \ "mission_identifier ==> %.16s\n" \ "sensor_id_and_mode ==> %.32s\n" \ "orbit_number ==> %.8s\n" \ "lat_nadir_center ==> %.8s\n" \ "long_nadir_center ==> %.8s\n" \ "heading_nadir_center ==> %.8s\n" \ "clock_angel ==> %.8s\n" \ "incidence_angle_center ==> %.8s\n" \ "radar_freq ==> %.8s\n" \ "radar_wavelength ==> %.16s\n" \ "motion_compensation ==> %.2s\n" \ "range_pulse_code_specifier ==> %.16s\n" \ "range_pulse_amplitude_const ==> %.16s\n" \ "range_pulse_amplitude_lin ==> %.16s\n" \ "range_pulse_amplitude_quad ==> %.16s\n" \ "range_pulse_amplitude_cube ==> %.16s\n" \ "range_pulse_amplitude_quart ==> %.16s\n" \ "range_pulse_phase_const ==> %.16s\n" \ "range_pulse_phase_lin ==> %.16s\n" \ "range_pulse_phase_quad ==> %.16s\n" \ "range_pulse_phase_cube ==> %.16s\n" \ "range_pulse_phase_quart ==> %.16s\n" \ "chirp_extraction_index ==> %.8s\n" \ "spare5 ==> %.8s\n" \ "sampling ==> %.16s\n" \ "range_gate_early_edge_start_image ==> %.16s\n" \ "range_pulse_length ==> %.16s\n" \ "reserved2 ==> %.4s\n" \ "range_compressed_flag ==> %.4s\n" \ "reserved3 ==> %.32s\n" \ "quantisation_in_bits ==> %.8s\n" \ "quantizer_descriptor ==> %.12s\n" \ "dc_bias_i ==> %.16s\n" \ "dc_bias_q ==> %.16s\n" \ "gain_imbalance ==> %.16s\n" \ "spare6 ==> %.32s\n" \ "reserved4 ==> %.16s\n" \ "antenna_mech_bor ==> %.16s\n" \ "reserved5 ==> %.4s\n" \ "nominal_prf ==> %.16s\n" \ "reserved6 ==> %.32s\n" \ "satelite_encoded_binary_time ==> %.16s\n" \ "satelite_clock_time ==> %.32s\n" \ "satelite_clock_increment ==> %.8s\n" \ "spare7 ==> %.8s\n" \ "processing_facility_identifier ==> %.16s\n" \ "processing_system_id ==> %.8s\n" \ "processing_version_id ==> %.8s\n" \ "reserved7 ==> %.32s\n" \ "product_type_id ==> %.32s\n" \ "alg_id ==> %.32s\n" \ "nlooks_az ==> %.16s\n" \ "neff_looks_range ==> %.16s\n" \ "bandwidth_look_az ==> %.16s\n" \ "bandwidth_look_range ==> %.16s\n" \ "total_look_bandwidth_az ==> %.16s\n" \ "total_look_bandwidth_range ==> %.16s\n" \ "w_func_designator_az ==> %.32s\n" \ "w_func_designator_range ==> %.32s\n" \ "data_input_source ==> %.16s\n" \ "nom_res_3db_range ==> %.16s\n" \ "nom_res_az ==> %.16s\n" \ "reserved8 ==> %.32s\n" \ "a_track_dop_freq_const_early_image ==> %.16s\n" \ "a_track_dop_freq_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_quad_early_image ==> %.16s\n" \ "spare8 ==> %.16s\n" \ "c_track_dop_freq_const_early_image ==> %.16s\n" \ "c_track_dop_freq_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_quad_early_image ==> %.16s\n" \ "time_direction_along_pixel ==> %.8s\n" \ "time_direction_along_line ==> %.8s\n" \ "a_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare9 ==> %.16s\n" \ "c_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare10 ==> %.16s\n" \ "line_content_indicator ==> %.8s\n" \ "clut_lock_flag ==> %.4s\n" \ "autofocussing_flag ==> %.4s\n" \ "line_spacing ==> %.16s\n" \ "pixel_spacing_range ==> %.16s\n" \ "range_compression_designator ==> %.16s\n" \ "spare11 ==> %.32s\n" \ "zero_dop_range_time_f_pixel ==> %.16s\n" \ "zero_dop_range_time_c_pixel ==> %.16s\n" \ "zero_dop_range_time_l_pixel ==> %.16s\n" \ "zero_dop_az_time_f_pixel ==> %.24s\n" \ "zero_dop_az_time_c_pixel ==> %.24s\n" \ "zero_dop_az_time_l_pixel ==> %.24s\n" \ "gec_local_use_segment ==> %.546s\n\n" #define SARLEADER_DPAF_DSS_WCS \ "*********** DSS RECORD ***********\n" \ "dss_rec_seq_num ==> %.4s\n" \ "chan_ind ==> %.4s\n" \ "reserved1 ==> %.16s\n" \ "scene_number ==> %.32s\n" \ "input_scene_center_time ==> %.32s\n" \ "spare1 ==> %.16s\n" \ "center_lat ==> %.16s\n" \ "center_long ==> %.16s\n" \ "center_heading ==> %.16s\n" \ "ellipsoid_designator ==> %.16s\n" \ "ellipsoid_semimajor_axis ==> %.16s\n" \ "ellipsoid_semiminor_axis ==> %.16s\n" \ "earth_constant ==> %.16s\n" \ "spare2 ==> %.16s\n" \ "ellipsoid_j2 ==> %.16s\n" \ "ellipsoid_j3 ==> %.16s\n" \ "ellipsoid_j4 ==> %.16s\n" \ "spare ==> %.16s\n" \ "reserved_new ==> %.16s\n" \ "scene_centre_line_number ==> %.8s\n" \ "scene_centre_pixel_number ==> %.8s\n" \ "scene_length ==> %.16s\n" \ "scene_width ==> %.16s\n" \ "spare3 ==> %.16s\n" \ "nchan ==> %.4s\n" \ "spare4 ==> %.4s\n" \ "mission_identifier ==> %.16s\n" \ "sensor_id_and_mode ==> %.32s\n" \ "orbit_number ==> %.8s\n" \ "lat_nadir_center ==> %.8s\n" \ "long_nadir_center ==> %.8s\n" \ "heading_nadir_center ==> %.8s\n" \ "clock_angel ==> %.8s\n" \ "incidence_angle_center ==> %.8s\n" \ "radar_freq ==> %.8s\n" \ "radar_wavelength ==> %.16s\n" \ "motion_compensation ==> %.2s\n" \ "range_pulse_code_specifier ==> %.16s\n" \ "range_pulse_amplitude_const ==> %.16s\n" \ "range_pulse_amplitude_lin ==> %.16s\n" \ "range_pulse_amplitude_quad ==> %.16s\n" \ "range_pulse_amplitude_cube ==> %.16s\n" \ "range_pulse_amplitude_quart ==> %.16s\n" \ "range_pulse_phase_const ==> %.16s\n" \ "range_pulse_phase_lin ==> %.16s\n" \ "range_pulse_phase_quad ==> %.16s\n" \ "range_pulse_phase_cube ==> %.16s\n" \ "range_pulse_phase_quart ==> %.16s\n" \ "chirp_extraction_index ==> %.8s\n" \ "spare5 ==> %.8s\n" \ "sampling ==> %.16s\n" \ "range_gate_early_edge_start_image ==> %.16s\n" \ "range_pulse_length ==> %.16s\n" \ "reserved2 ==> %.4s\n" \ "range_compressed_flag ==> %.4s\n" \ "reserved3 ==> %.32s\n" \ "quantisation_in_bits ==> %.8s\n" \ "quantizer_descriptor ==> %.12s\n" \ "dc_bias_i ==> %.16s\n" \ "dc_bias_q ==> %.16s\n" \ "gain_imbalance ==> %.16s\n" \ "spare6 ==> %.32s\n" \ "reserved4 ==> %.16s\n" \ "antenna_mech_bor ==> %.16s\n" \ "reserved5 ==> %.4s\n" \ "nominal_prf ==> %.16s\n" \ "reserved6 ==> %.32s\n" \ "satelite_encoded_binary_time ==> %.16s\n" \ "satelite_clock_time ==> %.32s\n" \ "satelite_clock_increment ==> %.8s\n" \ "spare7 ==> %.8s\n" \ "processing_facility_identifier ==> %.16s\n" \ "processing_system_id ==> %.8s\n" \ "processing_version_id ==> %.8s\n" \ "reserved7 ==> %.32s\n" \ "product_type_id ==> %.32s\n" \ "alg_id ==> %.32s\n" \ "nlooks_az ==> %.16s\n" \ "neff_looks_range ==> %.16s\n" \ "bandwidth_look_az ==> %.16s\n" \ "bandwidth_look_range ==> %.16s\n" \ "total_look_bandwidth_az ==> %.16s\n" \ "total_look_bandwidth_range ==> %.16s\n" \ "w_func_designator_az ==> %.32s\n" \ "w_func_designator_range ==> %.32s\n" \ "data_input_source ==> %.16s\n" \ "nom_res_3db_range ==> %.16s\n" \ "nom_res_az ==> %.16s\n" \ "reserved8 ==> %.32s\n" \ "a_track_dop_freq_const_early_image ==> %.16s\n" \ "a_track_dop_freq_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_quad_early_image ==> %.16s\n" \ "spare8 ==> %.16s\n" \ "c_track_dop_freq_const_early_image ==> %.16s\n" \ "c_track_dop_freq_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_quad_early_image ==> %.16s\n" \ "time_direction_along_pixel ==> %.8s\n" \ "time_direction_along_line ==> %.8s\n" \ "a_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare9 ==> %.16s\n" \ "c_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare10 ==> %.16s\n" \ "line_content_indicator ==> %.8s\n" \ "clut_lock_flag ==> %.4s\n" \ "autofocussing_flag ==> %.4s\n" \ "line_spacing ==> %.16s\n" \ "pixel_spacing_range ==> %.16s\n" \ "range_compression_designator ==> %.16s\n" \ "spare11 ==> %.32s\n" \ "zero_dop_range_time_f_pixel ==> %.16s\n" \ "zero_dop_range_time_c_pixel ==> %.16s\n" \ "zero_dop_range_time_l_pixel ==> %.16s\n" \ "zero_dop_az_time_f_pixel ==> %.24s\n" \ "zero_dop_az_time_c_pixel ==> %.24s\n" \ "zero_dop_az_time_l_pixel ==> %.24s\n\n" GMTSAR_V5.7/preproc/ERS_preproc/include/sardata.h000644 015705 000000 00000041272 13505462014 022617 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define SARDATA_HEADER_WCS \ "*********** SARDATA **********\n" \ "n_record ==> %.6s\n" \ "record_length ==> %.6s\n" \ "blank1 ==> %.24s\n" \ "n_bits_per_sample ==> %.4s\n" \ "n_samples_data_group ==> %.4s\n" \ "n_bytes_per_data_group ==> %.4s\n" \ "justification ==> %.4s\n" \ "n_channels ==> %.4s\n" \ "n_lines ==> %.8s\n" \ "n_left_border_pixels ==> %.4s\n" \ "n_data_groups ==> %.8s\n" \ "n_right_border_pixels ==> %.4s\n" \ "n_top_border_lines ==> %.4s\n" \ "bottom_border_lines ==> %.4s\n" \ "interleaving ==> %.4s\n" \ "n_phys_records ==> %.2s\n" \ "n_phy_records_multi ==> %.2s\n" \ "n_bytes_prefix_data ==> %.4s\n" \ "n_bytes_SARdata_record ==> %.8s\n" \ "n_bytes_suffix_data ==> %.4s\n" \ "blank2 ==> %.48s\n" \ "blank3 ==> %.28s\n" \ "blank4 ==> %.32s\n" \ "data_format_type_id ==> %.28s\n" \ "data_format_type_code ==> %.4s\n" \ "n_left_fill_bits_pixel ==> %.4s\n" \ "n_right_fill_bits_pixel ==> %.4s\n" \ "max_data_range_pixel ==> %.8s\n" \ "blank_filler ==> %.10s\n" #define SARDATA_HEADER_RCS \ "%6c%6c%24c%4c%4c%4c%4c%4c%8c%4c%8c%4c%4c%4c%4c%2c%2c%4c%8c%4c%48c%28c%32c%" \ "28c%4c%4c%4c%8c%10196c" #define SARDATA_HEADER_RVL(SP) \ (SP)->n_records, (SP)->record_length, (SP)->blank1, (SP)->n_bits_per_sample, (SP)->n_samples_data_group, \ (SP)->n_bytes_per_data_group, (SP)->justification, (SP)->n_channels, (SP)->n_lines, (SP)->n_left_border_pixels, \ (SP)->n_data_groups, (SP)->n_right_border_pixels, (SP)->n_top_border_lines, (SP)->bottom_border_lines, \ (SP)->interleaving, (SP)->n_phys_records, (SP)->n_phy_records_multi, (SP)->n_bytes_prefix_data, \ (SP)->n_bytes_SARdata_record, (SP)->n_bytes_suffix_data, (SP)->blank2, (SP)->blank3, (SP)->blank4, \ (SP)->data_format_type_id, (SP)->data_format_type_code, (SP)->n_left_fill_bits_pixel, (SP)->n_right_fill_bits_pixel, \ (SP)->max_data_range_pixel, (SP)->blank_filler struct sardata_header { char n_records[7]; char record_length[7]; char blank1[25]; char n_bits_per_sample[5]; char n_samples_data_group[5]; char n_bytes_per_data_group[5]; char justification[5]; char n_channels[5]; char n_lines[9]; char n_left_border_pixels[5]; char n_data_groups[9]; char n_right_border_pixels[5]; char n_top_border_lines[5]; char bottom_border_lines[5]; char interleaving[5]; char n_phys_records[3]; char n_phy_records_multi[3]; char n_bytes_prefix_data[5]; char n_bytes_SARdata_record[9]; char n_bytes_suffix_data[5]; char blank2[49]; char blank3[29]; char blank4[33]; char data_format_type_id[29]; char data_format_type_code[5]; char n_left_fill_bits_pixel[5]; char n_right_fill_bits_pixel[5]; char max_data_range_pixel[5]; char blank_filler[10197]; }; #define SARDATA_REC_WCS \ "*********** SARDATA **********\n" \ "line_no ==> %1d\n" \ "rec_index ==> %1d\n" \ "left_fill_pixels ==> %1d\n" \ "data_pixels ==> %1d\n" \ "right_fill_pixels ==> %1d\n" \ "sensor_update_flag ==> %1d\n" \ "year ==> %1d\n" \ "day_of_year ==> %1d\n" \ "msecs_of_day ==> %1d\n" \ "chan_ind ==> %1d\n" \ "chan_code ==> %1d\n" \ "trans_polar ==> %1d\n" \ "rec_polar ==> %1d\n" \ "prf ==> %1d\n" \ "spare ==> %1d\n" \ "range_flag ==> %1d\n" \ "chirp_type ==> %1d\n" \ "chirp_length ==> %1d\n" \ "chirp_const_coeff ==> %1d\n" \ "chirp_lin_coef ==> %1d\n" \ "chirp_quad ==> %1d\n" \ "spare1 ==> %1x\n" \ "spare2 ==> %1x\n" \ "nought_gain ==> %1d\n" \ "rec_gain ==> %1d\n" \ "ant_elec_angle ==> %1d\n" \ "ant_mech_angle ==> %1d\n" \ "ant_elec_squint_angle ==> %1d\n" \ "ant_mech_squint_angle ==> %1d\n" \ "slant_first_sample ==> %1d\n" \ "sample_delay ==> %1d\n" \ "spare3 ==> %1x\n" \ "pltformref ==> %1x\n" \ "ICU_onboard_time ==> %1d\n" \ "task ==> %1d\n" \ "image_format_counter ==> %1d\n" \ "sample_window_start_time ==> %1d\n" \ "pulse_repetition_interval ==> %1d\n" \ "cal_gain ==> %1d\n" \ "longspare ==> %1x\n" \ "calpulse36 ==> %1x\n" #define SARDATA_REC_RVL(SP) \ (SP)->line_no, (SP)->rec_index, (SP)->left_fill_pixels, (SP)->data_pixels, (SP)->right_fill_pixels, \ (SP)->sensor_update_flag, (SP)->year, (SP)->day_of_year, (SP)->msecs_of_day, (SP)->chan_ind, (SP)->chan_code, \ (SP)->trans_polar, (SP)->rec_polar, (SP)->prf, (SP)->spare, (SP)->range_flag, (SP)->chirp_type, (SP)->chirp_length, \ (SP)->chirp_const_coeff, (SP)->chirp_lin_coef, (SP)->chirp_quad, (SP)->spare1, (SP)->spare2, (SP)->nought_gain, \ (SP)->rec_gain, (SP)->ant_elec_angle, (SP)->ant_mech_angle, (SP)->ant_elec_squint_angle, (SP)->ant_mech_squint_angle, \ (SP)->slant_first_sample, (SP)->sample_delay, (SP)->spare3, (SP)->pltformref, (SP)->ICU_onboard_time, (SP)->task, \ (SP)->image_format_counter, (SP)->sample_window_start_time, (SP)->pulse_repetition_interval, (SP)->cal_gain, \ (SP)->longspare, (SP)->calpulse36 struct sardata_rec { int line_no; int rec_index; int left_fill_pixels; int data_pixels; int right_fill_pixels; int sensor_update_flag; int year; int day_of_year; int msecs_of_day; short chan_ind; short chan_code; short trans_polar; short rec_polar; int prf; int spare; short range_flag; short chirp_type; int chirp_length; int chirp_const_coeff; int chirp_lin_coef; int chirp_quad; char spare1[4]; char spare2[4]; int nought_gain; int rec_gain; int ant_elec_angle; int ant_mech_angle; int ant_elec_squint_angle; int ant_mech_squint_angle; int slant_first_sample; int sample_delay; char spare3[4]; char pltformref[64]; int ICU_onboard_time; short task; int image_format_counter; short sample_window_start_time; short pulse_repetition_interval; short cal_gain; char longspare[120]; char calpulse36[72]; }; /*#define SARDATA_DPAF_REC_WCS "*********** SARDATA **********\n"\ "line_no ==> %1d\n"\ "rec_index ==> %1d\n"\ "left_fill_pixels ==> %1d\n"\ "data_pixels ==> %1d\n"\ "right_fill_pixels ==> %1d\n"\ "reserved_a ==> %1x\n"\ "spare_a ==> %1x\n"\ "spare_b ==> %1x\n"\ "reserved_b ==> %1x\n"\ "spare_c ==> %1x\n"\ "platform_reference_info ==> %1x\n"\ "sensor_facil_aux_info ==> %1x\n"\ "IDHT_general_ctr ==> %1x\n"\ "packet_ctr ==> %1d\n"\ "subcommutation_ctr ==> %1d\n"\ "IDHT_gen_hdr_src_pack ==> %1x\n"\ "fixed_code ==> %1d\n"\ "OGRC_OBRC_flag ==> %1d\n"\ "ICU_onboard_time ==> %1d\n"\ "task ==> %1d\n"\ "image_format_counter ==> %1d\n"\ "sample_window_start_time ==> %1d\n"\ "pulse_repetition_interval ==> %1d\n"\ "cal_gain ==> %1d\n"\ "longspare ==> %1x\n"\ "Calpulse36 ==> %1x\n" #define SARDATA_DPAF_REC_RVL(SP)\ (SP)->line_no,\ (SP)->rec_index,\ (SP)->left_fill_pixels,\ (SP)->data_pixels,\ (SP)->right_fill_pixels,\ (SP)->reserved_a,\ (SP)->spare_a,\ (SP)->spare_b,\ (SP)->reserved_b,\ (SP)->spare_c,\ (SP)->platform_reference_info,\ (SP)->sensor_facil_aux_info,\ (SP)->IDHT_general_ctr,\ (SP)->packet_ctr,\ (SP)->subcommutation_ctr,\ (SP)->IDHT_gen_hdr_src_pack,\ (SP)->fixed_code,\ (SP)->OGRC_OBRC_flag,\ (SP)->ICU_onboard_time,\ (SP)->task,\ (SP)->image_format_counter,\ (SP)->sample_window_start_time,\ (SP)->pulse_repetition_interval,\ (SP)->cal_gain,\ (SP)->longspare,\ (SP)->calpulse36 struct sardata_dpaf_rec { int line_no; int rec_index; int left_fill_pixels; int data_pixels; int right_fill_pixels; char reserved_a[52]; char spare_a[4]; char spare_b[4]; char reserved_b[32]; char spare_c[4]; char platform_reference_info[64]; char sensor_facil_aux_info[220]; char IDHT_general_ctr[10]; int packet_ctr; int subcommutation_ctr; char IDHT_gen_hdr_src_pack[8]; int fixed_code; int OGRC_OBRC_flag; int ICU_onboard_time; short task; int image_format_counter; short sample_window_start_time; short pulse_repetition_interval; short cal_gain; char longspare[120]; char calpulse36[72]; }; */ #define SARDATA_DPAF_REC_WCS \ "*********** SARDATA **********\n" \ "line_no ==> %1d\n" \ "rec_index ==> %1d\n" \ "left_fill_pixels ==> %1d\n" \ "data_pixels ==> %1d\n" \ "right_fill_pixels ==> %1d\n" #define SARDATA_DPAF_REC_RVL(SP) \ (SP)->line_no, (SP)->rec_index, (SP)->left_fill_pixels, (SP)->data_pixels, (SP)->right_fill_pixels struct sardata_dpaf_rec { int line_no; int rec_index; int left_fill_pixels; int data_pixels; int right_fill_pixels; }; GMTSAR_V5.7/preproc/ERS_preproc/include/data_param.h000644 015705 000000 00000000410 13505462014 023256 0ustar00sandwellwheel000000 000000 /* include file for CEOS data files parameters */ #define MIN_PRF 1640.0 #define MAX_PRF 1720.0 #define SEC_PER_PRI_COUNT 210.94e-09 #define LINESIZE 12060 struct lineparam { int ifc; unsigned short swst_dn; unsigned short pri_dn; double pri; double swst; }; GMTSAR_V5.7/preproc/ERS_preproc/include/sarleader_fdr.h000644 015705 000000 00000015167 13505462014 024001 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define SARLEADER_FDR_BINARY_WCS \ "*********** SAR FDR BINARY **********\n" \ "record_seq_no ==> %1d\n" \ "record_subtype_code1 ==> %1x\n" \ "record_type_code1 ==> %1x\n" \ "record_subtype_code2 ==> %1x\n" \ "record_subtype_code3 ==> %1x\n" \ "record_length ==> %1d\n\n" #define SARLEADER_FDR_BINARY_RVL(SP) \ (SP)->record_seq_no, (SP)->record_subtype_code1, (SP)->record_type_code1, (SP)->record_subtype_code2, \ (SP)->record_subtype_code3, (SP)->record_length struct sarleader_binary { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; #define SARLEADER_FDR_FIXSEG_RCS "%2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c" #define SARLEADER_FDR_FIXSEG_RVL(SP) \ (SP)->A_E_flag, (SP)->blank_2, (SP)->for_con_doc, (SP)->for_con_doc_rev_level, (SP)->file_des_rev_level, (SP)->softw_rel, \ (SP)->file_number, (SP)->file_name, (SP)->rec_seq_loc_type_flag, (SP)->seq_number_loc, (SP)->seq_number_field_length, \ (SP)->rec_code_loc_type_flag, (SP)->rec_code_loc, (SP)->rec_code_field_length, (SP)->rec_len_loc_type_flag, \ (SP)->rec_len_loc, (SP)->rec_len_field_length, (SP)->reserved_4, (SP)->reserved_segment struct sarleader_fdr_fixseg { char A_E_flag[2]; /* 13 */ char blank_2[2]; /* 15 */ char for_con_doc[12]; /* 17 */ char for_con_doc_rev_level[2]; /* 29 */ char file_des_rev_level[2]; /* 31 */ char softw_rel[12]; /* 33 */ char file_number[4]; /* 45 */ char file_name[16]; /* 49 */ char rec_seq_loc_type_flag[4]; /* 65 */ char seq_number_loc[8]; /* 69 */ char seq_number_field_length[4]; /* 77 */ char rec_code_loc_type_flag[4]; /* 81 */ char rec_code_loc[8]; /* 85 */ char rec_code_field_length[4]; /* 93 */ char rec_len_loc_type_flag[4]; /* 97 */ char rec_len_loc[8]; /* 101 */ char rec_len_field_length[4]; /* 109 */ char reserved_4[4]; /* 113 */ char reserved_segment[64]; /* 117 */ }; #define SARLEADER_FDR_VARSEG_RCS \ "%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%" \ "6c%6c%6c%6c%6c%6c%60c%6c%6c%288c" #define SARLEADER_FDR_VARSEG_RVL(SP) \ (SP)->n_data_set_summ_rec, (SP)->data_set_summ_rec_len, (SP)->n_map_projec_rec, (SP)->map_projec_rec_len, \ (SP)->n_plat_pos_data_rec, (SP)->plat_pos_data_rec_len, (SP)->n_att_data_rec, (SP)->att_data_rec_len, \ (SP)->n_rad_data_rec, (SP)->rad_data_rec_len, (SP)->n_rad_comp_rec, (SP)->rad_comp_rec_len, (SP)->n_data_qua_summ_rec, \ (SP)->data_qua_summ_rec_len, (SP)->n_data_hist_rec, (SP)->data_hist_rec_len, (SP)->n_range_spectra_rec, \ (SP)->range_spectra_rec_len, (SP)->n_DEM_des_rec, (SP)->DEM_des_rec_len, (SP)->n_radar_par_update_rec, \ (SP)->radar_par_update_rec_len, (SP)->n_annotation_data_rec, (SP)->annotation_data_rec_len, (SP)->n_detailed_proc_rec, \ (SP)->detailed_proc_rec_len, (SP)->n_cal_rec, (SP)->cal_rec_len, (SP)->n_GCP_rec, (SP)->GCP_rec_len, (SP)->spare_60, \ (SP)->n_facility_data_rec, (SP)->facility_data_rec_len, (SP)->blanks_288 struct sarleader_fdr_varseg { char n_data_set_summ_rec[6]; /* 181-186 I6*/ char data_set_summ_rec_len[6]; /* 187-192 I6*/ char n_map_projec_rec[6]; /* 193-198 I6*/ char map_projec_rec_len[6]; /* 199-204 I6*/ char n_plat_pos_data_rec[6]; /* 205-210 I6*/ char plat_pos_data_rec_len[6]; /* 211-216 I6*/ char n_att_data_rec[6]; /* 217-222 I6*/ char att_data_rec_len[6]; /* 223-228 I6*/ char n_rad_data_rec[6]; /* 229-234 I6*/ char rad_data_rec_len[6]; /* 235-240 I6*/ char n_rad_comp_rec[6]; /* 241-246 I6*/ char rad_comp_rec_len[6]; /* 247-252 I6*/ char n_data_qua_summ_rec[6]; /* 253-258 I6*/ char data_qua_summ_rec_len[6]; /* 259-264 I6*/ char n_data_hist_rec[6]; /* 265-270 I6*/ char data_hist_rec_len[6]; /* 271-276 I6*/ char n_range_spectra_rec[6]; /* 277-282 I6*/ char range_spectra_rec_len[6]; /* 283-288 I6*/ char n_DEM_des_rec[6]; /* 289-294 I6*/ char DEM_des_rec_len[6]; /* 295-300 I6*/ char n_radar_par_update_rec[6]; /* 301-306 I6*/ char radar_par_update_rec_len[6]; /* 307-312 I6*/ char n_annotation_data_rec[6]; /* 313-318 I6*/ char annotation_data_rec_len[6]; /* 319-324 I6*/ char n_detailed_proc_rec[6]; /* 325-330 I6*/ char detailed_proc_rec_len[6]; /* 331-336 I6*/ char n_cal_rec[6]; /* 337-342 I6*/ char cal_rec_len[6]; /* 343-348 I6*/ char n_GCP_rec[6]; /* 349-354 I6*/ char GCP_rec_len[6]; /* 355-360 I6*/ char spare_60[60]; /* 361-420 I6*/ char n_facility_data_rec[6]; /* 421-426 I6*/ char facility_data_rec_len[6]; /* 427-432 I6*/ char blanks_288[288]; /* 433-720 A80*/ }; GMTSAR_V5.7/preproc/ERS_preproc/include/write_fdr_varseg.h000644 015705 000000 00000010641 13505462014 024530 0ustar00sandwellwheel000000 000000 #define SARLEADER_FDR_VARSEG_WCS \ "*********** SAR FDR VARIABLE SEG ***********\n" \ "n_data_set_summ_rec ==> %.6s\n" \ "data_set_summ_rec_len ==> %.6s\n" \ "n_map_projec_rec ==> %.6s\n" \ "map_projec_rec_len ==> %.6s\n" \ "n_plat_pos_data_rec ==> %.6s\n" \ "plat_pos_data_rec_len ==> %.6s\n" \ "n_att_data_rec ==> %.6s\n" \ "att_data_rec_len ==> %.6s\n" \ "n_rad_data_rec ==> %.6s\n" \ "rad_data_rec_len ==> %.6s\n" \ "n_rad_comp_rec ==> %.6s\n" \ "rad_comp_rec_len ==> %.6s\n" \ "n_data_qua_summ_rec ==> %.6s\n" \ "data_qua_summ_rec_len ==> %.6s\n" \ "n_data_hist_rec ==> %.6s\n" \ "data_hist_rec_len ==> %.6s\n" \ "n_range_spectra_rec ==> %.6s\n" \ "range_spectra_rec_len ==> %.6s\n" \ "n_DEM_des_rec ==> %.6s\n" \ "DEM_des_rec_len ==> %.6s\n" \ "n_radar_par_update_rec ==> %.6s\n" \ "radar_par_update_rec_len ==> %.6s\n" \ "n_annotation_data_rec ==> %.6s\n" \ "annotation_data_rec_len ==> %.6s\n" \ "n_detailed_proc_rec ==> %.6s\n" \ "detailed_proc_rec_len ==> %.6s\n" \ "n_cal_rec ==> %.6s\n" \ "cal_rec_len ==> %.6s\n" \ "n_GCP_rec ==> %.6s\n" \ "GCP_rec_len ==> %.6s\n" \ "spare_60 ==> %60c\n" \ "n_facility_data_rec ==> %.6s\n" \ "facility_data_rec_len ==> %.6s\n" \ "blanks_288 ==> %288c\n\n" GMTSAR_V5.7/preproc/ERS_preproc/ers_line_fixer/ers_line_fixer.l000644 015705 000000 00000001265 13505462014 025551 0ustar00sandwellwheel000000 000000 .TH ERS_LINE_FIXER l "08/28/97 \(co JPL" "ers_line_fixer.l 1.0" .SH NAME ers_line_fixer \- fixes missing lines in raw ERS SAR data .SH SYNOPSIS .B ers_line_fixer .I -a -h header -l line -s .I station ifile ofile .SH DESCRIPTION The .B ers_line_fixer fixes missing lines in raw SAR data. .TP 10 .I -a align window sampling times .TP 10 .I -h header length (bytes) .TP 10 .I -l line length in bytes .TP 10 .I -s station - either DPAF/ESRIN, CO, EIC, UK, CCRS, or unknown .TP 10 .I input_file .TP 10 .I output_file .sp .TP 0 .B example: ers_line_fixer -s CCRS input.raw out.fix .SH SEE ALSO read_ccrs(l) CCT.format* files in /opt/siosar/src/pre_proc/read_ccrs/SAR_tape_data_description GMTSAR_V5.7/preproc/ERS_preproc/ers_line_fixer/ers_line_fixer000755 015705 000000 00000044000 13507242212 025312 0ustar00sandwellwheel000000 000000  H__PAGEZERO(__TEXT00__text__TEXT;__stubs__TEXT'x'__stub_helper__TEXT''__const__TEXTp(p(__cstring__TEXT))__unwind_info__TEXT/p/__DATA00__nl_symbol_ptr__DATA00__got__DATA0 0__la_symbol_ptr__DATA0000__data__DATA00__common__DATA1H__LINKEDIT@@"0@@Xh@ A8B+HF PE. /usr/lib/dyldłm1rFI>2   *( 8/usr/lib/libSystem.B.dylib&B)BUHAWAVAUATSHHHuAH=$E11_fWEH?L-"EE1H"H H8ADHuHHw9HNHHcHHO"H H8EfD?uH"H5 !HU L(H E1H!f.DLt0H3AH Hu AEH H8 E$L-!H&DHLc8AGD9 IcHMH| 1H}E DxH>!8tIcHH ) \A}MctLHH UȉT HELXJH@IL=K\=H='Hu{K/HEȿ aH@H0H=1CHL ~-Lu LHEH8H@H0DHEHGd=Gt= LG|=ALMEl H=1HH=1DH=1L`DH=1D}DzH=1uiH=1DXLeIcH}0H- IH}HHLX ADx H=E1HuHL8~ f.D-Lu LEU H`HcHcEHc}IMHMX^ {X {LHxHMA*LHXW)I|-HID5H8Љ(B,Љ$X ^ IcHWf: , HUHHHHHHHAHHBHIDHIEHPIDHIDHhIL50IUH1DžpE1H1HuEDžtE1HHf.fH@H0H11H A1LuAE 1H=HH1H=u11DHEHDLLL90 H0tH=v6H=`HEL0}LH]HYH9De}A 1HEH`D)9E~IHJ9HHH9HHLHHuHwcHLPA 7AL5HH9H`BAD),9L(H¾#H81M7HHH9HHLHuHH;xHJ>HuH9`HHH9HLHPH)HJH)IT91DD; ; >D>fD;fL;fL>fD>HHuHMt'HH}J?fADfALfAL=fAD=L9HuL)^1Muf.DHLH]HHEL0}LHH9HȉHxɉMu1H=DMH0uAu HEuaSD)~9T}1H=DPHEf1HEAljHEDM= t!H=qD HXffE֋pf9ȋ]t1H=UDMADH8E pAuDW*YXXYdYH=NEffEMfHXffM։]DDDD)LcID;tDe}/#HMM MMDeiWA*f.L}AAFLHHUv .1H=VDDMMf MMDeDDt}/OuHED)9`HEBB )HIHhI)IJ 8LH98s ItH8J<9HhH9LHHyHHHAAH3HJ:H)It81D;L;D:L:fD;f ;fD:f :H@HuMt'HhJ4?fAD5fAL5fAD=fAL=I9Hh)HHHHtK|=HDA\ HHuHrEH)Hf.DBT9QBT9QBT9QB9HHuBHuB B)HcLHB )9M$B)H¾#M L}f HEAtAW1H=1D& HxA~GM1f.DHEL(}LLeL L9D9|]MDeEȉEHxHEL0}LH]H H9E1HEf.DL}D}AD;e[H0HH;4L" } } 1HH[A\A]A^A_]]uH=1LHU  H=r1LUHM  H=1LDH  }uH=L1LH=1LHEH0H= 1L[HEH0H= 1o / HEH0H= 1H%H=1HHH=1LHU& HEH0H=^ 1HUt u HEH0H= HEH0H=# HEH0H=P 1fTxUH]DUHAWAVSPAH=CH=7 'H=!H=H=R H=H=H= H5(H= 1H53Ht$HGL= 1LH3H Hu DBUHAWAVSPI~DfDLu LH[A^A_]f.UHAWAVAUATSHAHI11HgA1HMcIH/AtEt IDHEtLE11D1fD9HE0DtA'HMȉșAu E~1ېDDsusD9|AA2HMrEEA'șA Eu#1fDD#u#D9|AA2HMrD13HED HHA\CAD A\ DbH[A\A]A^A_]H=E 1LHv6f.fUHAWAVATSEMIHcHSH9u [A\A^A_]EuH=t 1LLH=- 1LDLf.DUHAWAVATSEMIHcHH9u [A\A^A_]EuH=C 1LLZH= 1LDLy9f.DUH*XY`]fDUHX^0X0Y pX^ ,Wf: ,]DUH*Y Y@XX]f.UHAWAVAUATSH(AAHP HHEC7Gl7HcE11uHuIc1҉YHuƺyC~Gl~Hc1҉4HuTIc1҉HuȺ8CB 0ElHc1҉HuIc1҉HuʺCGlHc1҉HuIc1҉Hu̺CDEtHc1҉hHuIc1҉LHuκlE*X Y ZfWf.ȸu{jf(^E1 ~f.w@f.xw:DeD+et+EW*X,YfWf.u:z81E11AHY HH;U9 H([A\A]A^A_]f(^1f.wf.wE+EtMW*XYsAfWf.uxf(^1f.mf._E+EJMW*XOYAfWf.uf(^1f.f.@E+EMW*XYAfWf.u^f.f. f.@UH]Ð% % % % % % % % % % %" %$ %& %( %* %, %. %0 %2 %4 LmAS%]hhh'h3h?hLhXhehqhhhxhnhdhZhPhFhvãuXO>XC?O ?@vãu?Ô/۾?@""@?@@DPAF/ESRINCOEICUKCCRSASFUnknown check endian on this computer: (1 big or -1 little) %d a:h:l:s:%s ERROR: station %s is unknown %s ERROR: can't write to output file (%s) parent directory %s ERROR: output file (%s) already exists (I don't clobber) %s ERROR: error opening output file (%s) Using %s to determine station information Station: %s Line Length: %d Header Length: %d IFC Index: %d SWST Index: %d PRI Index: %d %s ERROR: error allocating line memory (%d bytes) Writing to fixed data file %s %s ERROR: error opening input file %s INPUT FILE: %s LINE COUNT: %d Line: %d, Previously inserted line %s ERROR: too many missing lines (%d) Line: %d, ignoring line (%d missing) Line: %d, PRI = %.8g s, PRF = %.8g Hz Line: %d, swst_dn = %d, old_swst_dn = %d near_range = %lf Line: %d, Byte shift = %d bytes Line: %d, %d missing line(s) %s ERROR: error reading line %d from %s %s ERROR: error reading header from %s %s ERROR: error writing line %d to %s %s ERROR: error writing header to %s %s ERROR: error opening file (%s) for station determination Stations: %s, %s Discarding header. Transferring header.usage : ers_line_fixer [ -a near_range] [ -h header ] [ -l line ] [ -s station ] -a near_range : align near_range -h header : set the header length (bytes) -l line : set the line length (bytes) -s station : set processing station raw file : input filename fixed file : output filename$$X<<'< ,0@p000 a''''''''''(((&(0(:(D(N(X(b()|- )|-)|-)|-)/),)"0`CQ@___stack_chk_guardQr@___stdoutp@_optarg@_optind@dyld_stub_binderr0@___errorr8@___stack_chk_failr@@_atofrH@_atoirP@_closerX@_exitr`@_fputcrh@_freerp@_getoptrx@_lseekr@_mallocr@_memcpyr@_memsetr@_openr@_printfr@_putcharr@_putsr@_readr@_strcasecmpr@_write_ _mh_execute_header{mainis_big_endian_udetermine_inforwritelinecalc_try_infostationopt_>_sagenderline>@@eadlineange2swstDEpriswstFFFGNaadjustheaderlinestationcccc P @0L# p#+P ;K'\b 1n 1z 1 10#" 0#  "#)06>EMU]cks{ !$%&'()*@"# !$%&'() __mh_execute_header_calc_pri_calc_swst_determine_info_is_big_endian__is_big_endian___main_opt_adjust_opt_header_opt_line_opt_station_range2swst_readline_station_try_info_underline_usage_writeline___error___stack_chk_fail___stack_chk_guard___stdoutp_atof_atoi_close_exit_fputc_free_getopt_lseek_malloc_memcpy_memset_open_optarg_optind_printf_putchar_puts_read_strcasecmp_writedyld_stub_binderGMTSAR_V5.7/preproc/ERS_preproc/ers_line_fixer/ers_line_fixer.c000644 015705 000000 00000055554 13505462014 025552 0ustar00sandwellwheel000000 000000 /*----------------------------------------------------------------------*/ /* NAME */ /* ers_line_fixer - fixes lines in an ERS SAR raw data file */ /* */ /* SYNOPSIS */ /* ers_line_fixer [ -a ] [ -h header ] [ -l line ] [ -s station ] */ /* */ /* */ /* DESCRIPTION */ /* The ers_line_fixer program reads in ERS SAR raw data files */ /* and produces a single "preprocessed" ERS SAR data file. */ /* Missing lines are "replaced" by the next available line. */ /* */ /* OPTIONS */ /* -a Align the lines by shifting them so they all have the */ /* same sampling window start time. */ /* */ /* -h header */ /* Sets the number of bytes per header to be

. */ /* If this option is not specified, the program will use */ /* the header length for the specified station, or the */ /* default header length. */ /* */ /* -l line */ /* Sets the number of bytes per line to be . If */ /* this option is not specified, the program will use the */ /* line length for the specified station, or attempt to */ /* determine the line length. */ /* */ /* -s station */ /* Indicates the input file station. If this option is */ /* not specified, the program will use the default */ /* station. */ /*----------------------------------------------------------------------*/ /* DEC 29, 2010 - Modified for little endian computer. */ /* Does not change byte order on output. */ /* Jan 23, 2011 - Modified to read near range instead of swst */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) #define OPTSTRING "a:h:l:s:" /* for assessing unknown stations */ #define UNKNOWN "Unknown" #define MIN_LINE_SIZE 10000 #define MAX_LINE_SIZE 13000 #define MIN_PRF 1640.0 #define MAX_PRF 1720.0 #define DEFAULT_HEADER_SIZE 412 #define CHECK_LINES 5 /* number of lines to check */ #define MISSING_LINES 1 /* OK # of missing lines */ #define MAX_GAP 900 /* max consec. missing lines */ #define SWST_OFFSET 4 /* bytes from ifc to swst */ #define PRI_OFFSET 6 /* bytes from ifc to pri */ #define IFC_SIZE 4 /* four bytes per ifc */ #define SWST_SIZE 2 /* two bytes per swst */ #define PRI_SIZE 2 /* two bytes per pri */ #define SEC_PER_PRI_COUNT 210.94e-09 #define SOL 299792456.0 /*-----------*/ /* FUNCTIONS */ /*-----------*/ void readline(int ifd, char *data, int line_length, char *command, char *filename, int line_number); void writeline(int ofd, char *data, int line_length, char *command, char *filename, int line_number); int determine_info(char *command, char *filename, int station_index); int try_info(int ifd, int line_length, int ifc_index); double calc_pri(unsigned short pri_dn); double calc_swst(unsigned short swst_dn, double pri); int range2swst(double range, double pri); void underline(FILE *ofp, int count, char character); void usage(char *command, int exit_code); int is_big_endian_(void); int is_big_endian__(void); /*-----------------------------*/ /* PROCESSING SITE INFORMATION */ /*-----------------------------*/ typedef struct station_info { char *station_name; int line_length; int header_length; int ifc_index; /* image format counter */ int swst_index; /* sampling window start time */ int pri_index; /* pulse repetition interval */ } Station_Info; Station_Info station[] = {{"DPAF/ESRIN", 11644, 412, 210, 214, 216}, {"CO", 11644, 416, 214, 218, 220}, {"EIC", 11644, 410, 198, 202, 204}, {"UK", 11644, 412, 210, 214, 216}, {"CCRS", 12060, 412, 200, 204, 206}, {"ASF", 11474, 242, 200, 204, 206}, {UNKNOWN, 0, DEFAULT_HEADER_SIZE, 0, 0, 0}, {NULL, 0, 0, 0, 0, 0}}; /*------------------*/ /* OPTION VARIABLES */ /*------------------*/ char opt_adjust, opt_line, opt_header, opt_station; /*==========================*/ /* MAIN PROGRAM: line_fixer */ /*==========================*/ int main(int argc, char *argv[]) { char *output_filename, *station_name, *filename, *data, *data_buf; char **input_filenames; unsigned short swst_dn, old_swst_dn, swst_dn1 = 0, pri_dn, old_pri_dn; int station_index, c, header_length = 0, line_length = 0, match_count; int i, input_filecount, ifc_index, swst_index, pri_index, file_index; int file_size, line_count, input_line_number, ifc, lines_to_write; int old_ifc, shift_bytes, old_shift_bytes, output_line_number = 0; int char_count, ignore_flag; int ofd, ifd = 0; int endian; int pcount; /* actual count of data pixels */ double pri, swst; double near_range, near_range_in = 0.0; extern char *optarg; extern int optind; /*------------------------*/ /* check endian */ /*------------------------*/ endian = is_big_endian_(); printf("\ncheck endian on this computer: (1 big or -1 little) %d \n", endian); /*------------------------*/ /* parse the command line */ /*------------------------*/ station_index = 0; /* the first station is the default */ while ((c = getopt(argc, argv, OPTSTRING)) != -1) { switch (c) { case 'a': opt_adjust = 1; near_range_in = atof(optarg); break; case 'h': opt_header = 1; header_length = atoi(optarg); break; case 'l': opt_line = 1; line_length = atoi(optarg); break; case 's': opt_station = 1; match_count = 0; for (i = 0; station[i].station_name; i++) { if (strcasecmp(optarg, station[i].station_name) == 0) { station_index = i; match_count = 1; break; } } if (match_count != 1) { printf("%s ERROR: station %s is unknown\n", argv[0], optarg); exit(1); } break; case '?': usage(argv[0], 1); break; } } if (argc < optind + 2) usage(argv[0], 1); input_filenames = argv + optind; input_filecount = argc - optind - 1; output_filename = argv[argc - 1]; /*------------------*/ /* open output file */ /*------------------*/ ofd = open(output_filename, O_WRONLY | O_CREAT | O_EXCL, 0644); if (ofd == -1) { switch (errno) { case EACCES: printf("%s ERROR: can't write to output file (%s) parent directory\n", argv[0], output_filename); break; case EEXIST: printf("%s ERROR: output file (%s) already exists (I don't clobber)\n", argv[0], output_filename); break; default: printf("%s ERROR: error opening output file (%s)\n", argv[0], output_filename); break; } exit(1); } /*-----------------------------*/ /* override station parameters */ /*-----------------------------*/ if (opt_line) station[station_index].line_length = line_length; if (opt_header) station[station_index].header_length = header_length; /*------------------------------------*/ /* if unknown station, determine type */ /*------------------------------------*/ if (strcasecmp(UNKNOWN, station[station_index].station_name) == 0) { printf("\n"); char_count = printf("Using %s to determine station information\n", *input_filenames); underline(stdout, char_count - 1, '-'); determine_info(argv[0], *input_filenames, station_index); } /*--------------------------------*/ /* set variables based on station */ /*--------------------------------*/ line_length = station[station_index].line_length; header_length = station[station_index].header_length; station_name = station[station_index].station_name; ifc_index = station[station_index].ifc_index; swst_index = station[station_index].swst_index; pri_index = station[station_index].pri_index; /*----------------*/ /* print out info */ /*----------------*/ printf("\n"); printf(" Station: %s\n", station_name); printf(" Line Length: %d\n", line_length); printf("Header Length: %d\n", header_length); printf(" IFC Index: %d\n", ifc_index); printf(" SWST Index: %d\n", swst_index); printf(" PRI Index: %d\n", pri_index); /*----------------------------*/ /* allocate memory for a line */ /*----------------------------*/ data = (char *)malloc(line_length); if (data == 0) { printf("%s ERROR: error allocating line memory (%d bytes)\n", argv[0], line_length); exit(1); } data_buf = (char *)malloc(line_length); if (data_buf == 0) { printf("%s ERROR: error allocating line memory (%d bytes)\n", argv[0], line_length); exit(1); } /*------------*/ /* initialize */ /*------------*/ old_shift_bytes = 0; old_ifc = 0; old_pri_dn = 0; old_swst_dn = 0; ignore_flag = 0; /*------------------------------------*/ /* process file by file, line by line */ /*------------------------------------*/ printf("\n"); char_count = printf("Writing to fixed data file %s\n", output_filename); underline(stdout, char_count - 1, '-'); for (file_index = 0; file_index < input_filecount; file_index++) { filename = *(input_filenames + file_index); ifd = open(filename, O_RDONLY); if (ifd == -1) { printf("%s ERROR: error opening input file %s\n", argv[0], filename); exit(1); } file_size = lseek(ifd, 0, SEEK_END); line_count = file_size / line_length; printf("\n"); printf("INPUT FILE: %s\n", filename); printf("LINE COUNT: %d\n", line_count); /*---------------------------*/ /* do something with headers */ /*---------------------------*/ lseek(ifd, 0, SEEK_SET); readline(ifd, data, line_length, argv[0], filename, 0); if (file_index == 0) { printf(" Transferring header.\n"); writeline(ofd, data, line_length, argv[0], output_filename, 0); } else printf(" Discarding header.\n"); /*-------------------*/ /* read line by line */ /*-------------------*/ for (input_line_number = 1; input_line_number < line_count; input_line_number++) { memcpy(data_buf, data, line_length); readline(ifd, data, line_length, argv[0], filename, input_line_number); /*----------------------------------------------------*/ /* swap bytes on the pixel count for esarp */ /* note this is the ONLY field that gets a byte swap. */ /*----------------------------------------------------*/ memcpy((char *)&pcount, data + 24, 4); if (endian == -1) FIX_INT(pcount); memcpy((char *)data + 24, &pcount, 4); /*------------------------------------*/ /* determine the image format counter */ /*------------------------------------*/ memcpy((char *)&ifc, data + ifc_index, IFC_SIZE); if (endian == -1) FIX_INT(ifc); if (ifc == 0) { printf(" Line: %d, Previously inserted line\n", input_line_number); } /*----------------------*/ /* detect missing lines */ /*----------------------*/ if (file_index == 0 && input_line_number == 1) { /* can't detect missing lines yet */ lines_to_write = 1; } else if (ifc > old_ifc) { /* the standard case */ lines_to_write = ifc - old_ifc; } else if (ifc == 0) { /* a previously inserted line */ lines_to_write = 1; } else if (ifc < old_ifc) { /* backtracking due to overlapped files or bad line */ lines_to_write = 0; } else { /* what else can I do? */ lines_to_write = 0; } if (lines_to_write > MAX_GAP + 1) { if (ignore_flag) { printf("%s ERROR: too many missing lines (%d)\n", argv[0], lines_to_write - 1); exit(1); } printf(" Line: %d, ignoring line (%d missing)\n", input_line_number, lines_to_write - 1); lines_to_write = 0; ignore_flag = 1; } else ignore_flag = 0; if (lines_to_write) { if (ifc) old_ifc = ifc; else old_ifc++; } else continue; /*-----------------------------------------------*/ /* determine the pri (pulse repetition interval) */ /*-----------------------------------------------*/ /* pri_dn was sometimes zero which caused problems so force it to 2820 */ memcpy((char *)&pri_dn, data + pri_index, PRI_SIZE); if (endian == -1) FIX_SHORT(pri_dn); pri_dn = (unsigned short)2820; if (pri_dn != old_pri_dn) { pri = calc_pri(pri_dn); printf(" Line: %d, PRI = %.8g s, PRF = %.8g Hz\n", input_line_number, pri, 1.0 / pri); old_pri_dn = pri_dn; } /*------------------------------------------*/ /* determine the sampling window start time */ /*------------------------------------------*/ memcpy((char *)&swst_dn, data + swst_index, SWST_SIZE); if (endian == -1) FIX_SHORT(swst_dn); if (swst_dn != old_swst_dn) { printf("Line: %d, swst_dn = %d, old_swst_dn = %d \n", input_line_number, swst_dn, old_swst_dn); old_swst_dn = swst_dn; } /*-----------------------------------------------------*/ /* calculate the swst_dn1 */ /*-----------------------------------------------------*/ if (input_line_number == 1) swst_dn1 = swst_dn; if (opt_adjust) swst_dn1 = range2swst(near_range_in, pri); /* debug printf("near_range_in %f, pri %.8g, swst_dn1 %d\n", near_range_in, pri, swst_dn1); */ /*------------------------------------------*/ /* write the near range */ /*------------------------------------------*/ if (input_line_number == 2) { swst = calc_swst(swst_dn1, pri); near_range = SOL * swst / 2.; printf("near_range = %lf \n", near_range); } /*----------------------------*/ /* align lines */ /*----------------------------*/ // if (opt_adjust) // { /* set the sampling window start time */ if (endian == -1) FIX_SHORT(swst_dn); memcpy(data + swst_index, (char *)&swst_dn, SWST_SIZE); if (endian == -1) FIX_SHORT(swst_dn); shift_bytes = (swst_dn1 - swst_dn) * 8; if (shift_bytes != old_shift_bytes) { printf(" Line: %d, Byte shift = %d bytes\n", input_line_number, shift_bytes); old_shift_bytes = shift_bytes; } /* fix for CCRS data of length 12060 */ if (line_length == 12060) { for (i = 11644; i < 12060; i++) data[i] = 35; } if (shift_bytes > 0) { for (i = header_length; i < line_length - shift_bytes; i++) { data[i] = data[i + shift_bytes]; } for (i = line_length - shift_bytes; i < line_length; i++) { data[i] = 35; } } else if (shift_bytes < 0) { if (shift_bytes >= -1.0 * (line_length - 1)) { for (i = line_length - 1; i >= header_length - shift_bytes; i--) { data[i] = data[i + shift_bytes]; } for (i = header_length; i < header_length - shift_bytes; i++) { data[i] = 35; } } else { lines_to_write++; if (input_line_number != 1) { memcpy(data, data_buf, line_length); } } } // } /*-----------------*/ /* write out lines */ /*-----------------*/ switch (lines_to_write) { case 1: writeline(ofd, data, line_length, argv[0], output_filename, output_line_number); output_line_number++; break; case 0: break; default: printf(" Line: %d, %d missing line(s)\n", input_line_number, lines_to_write - 1); /* zero the ifc */ memset(data + ifc_index, 0, IFC_SIZE); for (i = 0; i < lines_to_write - 1; i++) { writeline(ofd, data, line_length, argv[0], output_filename, output_line_number); output_line_number++; } /* restore the ifc */ if (endian == -1) FIX_INT(ifc); memcpy(data + ifc_index, (char *)&ifc, IFC_SIZE); writeline(ofd, data, line_length, argv[0], output_filename, output_line_number); output_line_number++; } } } /*---------------*/ /* free the line */ /*---------------*/ free(data); /*-----------------*/ /* close the files */ /*-----------------*/ close(ifd); close(ofd); } /*----------*/ /* calc_pri */ /*----------*/ /* Calculates the pri */ double calc_pri(unsigned short pri_dn) { return (((double)pri_dn + 2.0) * SEC_PER_PRI_COUNT); } /*-----------*/ /* calc_swst */ /*-----------*/ /* Calculates the swst */ double calc_swst(unsigned short swst_dn, double pri) { /* return ((double) swst_dn * SEC_PER_PRI_COUNT + 9.0 * pri - 6.0E-6);*/ /* based on Johan Jacob Mohr and Søren Nørvang Madsen, Member, IEEE,Geometric * Calibration of ERS Satellite SAR Images, 2001, calibriation should be 6.6*/ return ((double)swst_dn * SEC_PER_PRI_COUNT + 9.0 * pri - 6.6E-6); } /*------------*/ /* range2swst */ /*------------*/ /* Calculates the swst_dn from near_range_in defined by user */ int range2swst(double range, double pri) { /* refer to calc_swst */ return ((int)floor((2.0 * range / SOL + 6.6E-6 - 9.0 * pri) / SEC_PER_PRI_COUNT)); } /*----------*/ /* readline */ /*----------*/ /* Reads in the specified number of bytes and exits with message on error */ void readline(int ifd, char *data, int line_length, char *command, char *filename, int line_number) { if (read(ifd, data, line_length) != line_length) { if (line_number) printf("%s ERROR: error reading line %d from %s\n", command, line_number, filename); else printf("%s ERROR: error reading header from %s\n", command, filename); exit(1); } return; } /*-----------*/ /* writeline */ /*-----------*/ /* Writes the specified number of bytes and exits with message on error */ void writeline(int ofd, char *data, int line_length, char *command, char *filename, int line_number) { if (write(ofd, data, line_length) != line_length) { if (line_number) printf("%s ERROR: error writing line %d to %s\n", command, line_number, filename); else printf("%s ERROR: error writing header to %s\n", command, filename); exit(1); } return; } /*----------------*/ /* determine_info */ /*----------------*/ /* Sets-up the station_info structure based on file size and contents */ int determine_info(char *command, char *filename, int station_index) { int file_size, header_length, ifc_index, pass, line_length, x; int ifd; /*-----------*/ /* open file */ /*-----------*/ ifd = open(filename, O_RDONLY); if (ifd == -1) { printf("%s ERROR: error opening file (%s) for station determination\n", command, filename); exit(1); } file_size = lseek(ifd, 0, SEEK_END); header_length = station[station_index].header_length; /*----------------------------------------------*/ /* if line length is known, just search for IFC */ /*----------------------------------------------*/ if (station[station_index].line_length) { for (ifc_index = 0; ifc_index < header_length; ifc_index++) { if (try_info(ifd, station[station_index].line_length, ifc_index)) { station[station_index].ifc_index = ifc_index; station[station_index].swst_index = ifc_index + SWST_OFFSET; station[station_index].pri_index = ifc_index + PRI_OFFSET; close(ifd); return (1); } } } else { /*--------------------------------------------------*/ /* use two passes (one based on file size, one not) */ /*--------------------------------------------------*/ for (pass = 0; pass < 2; pass++) { /*------------------------------------*/ /* step through possible line lengths */ /*------------------------------------*/ for (line_length = MIN_LINE_SIZE; line_length < MAX_LINE_SIZE; line_length++) { if (pass == 0) { /* check line sizes with integer lines per file */ x = file_size / line_length; if (x * line_length != file_size) continue; } else { /* check line sizes with non-integer lines per file */ x = file_size / line_length; if (x * line_length == file_size) continue; } /*-------------------------------------*/ /* step through possible ifc locations */ /*-------------------------------------*/ for (ifc_index = 0; ifc_index < header_length; ifc_index++) { if (try_info(ifd, line_length, ifc_index)) { station[station_index].line_length = line_length; station[station_index].ifc_index = ifc_index; station[station_index].swst_index = ifc_index + SWST_OFFSET; station[station_index].pri_index = ifc_index + PRI_OFFSET; close(ifd); return (1); } } } } } close(ifd); return (0); } /*----------*/ /* try_info */ /*----------*/ /* returns 1 if info appears to be acceptable, 0 otherwise */ int try_info(int ifd, int line_length, int ifc_index) { char bad; unsigned short pri_dn[CHECK_LINES]; int line_number, ifc_offset, pri_offset; int ifc_dn[CHECK_LINES]; unsigned int sum_dif, dif; double pri, prf; /*--------------------------------------*/ /* load in values for CHECK_LINES lines */ /*--------------------------------------*/ for (line_number = 0; line_number < CHECK_LINES; line_number++) { ifc_offset = line_length * (line_number + 1) + ifc_index; pri_offset = ifc_offset + PRI_OFFSET; lseek(ifd, ifc_offset, SEEK_SET); read(ifd, (char *)&ifc_dn[line_number], IFC_SIZE); lseek(ifd, pri_offset, SEEK_SET); read(ifd, (char *)&pri_dn[line_number], PRI_SIZE); } /*---------------------------------*/ /* check values for reasonableness */ /*---------------------------------*/ sum_dif = 0; bad = 0; for (line_number = 0; line_number < CHECK_LINES; line_number++) { if (line_number > 0) { dif = ifc_dn[line_number] - ifc_dn[line_number - 1]; if (dif < 1) { bad = 1; break; } else sum_dif += dif; } pri = calc_pri(pri_dn[line_number]); if (pri == 0.0) { bad = 1; break; } prf = 1.0 / calc_pri(pri_dn[line_number]); if (prf < MIN_PRF || prf > MAX_PRF) { bad = 1; break; } } if (!bad && sum_dif < CHECK_LINES - 1 + MISSING_LINES) return (1); else return (0); } /*-------*/ /* usage */ /*-------*/ /* Prints a usage message to stderr, and exits */ void usage(char *command, int exit_code) { int i; printf("usage : ers_line_fixer [ -a near_range] [ -h header ] [ -l line ] [ " "-s station ]\n"); printf(" \n"); printf("\n"); printf(" -a near_range : align near_range \n"); printf(" -h header : set the header length (bytes)\n"); printf(" -l line : set the line length (bytes)\n"); printf(" -s station : set processing station\n"); printf(" raw file : input filename\n"); printf(" fixed file : output filename\n"); printf("\n"); printf("Stations: %s", station[0].station_name); for (i = 1; station[i].station_name; i++) printf(", %s", station[i].station_name); printf("\n"); exit(exit_code); return; } /*-----------*/ /* underline */ /*-----------*/ void underline(FILE *ofp, int count, char character) { int i; for (i = 0; i < count; i++) fprintf(ofp, "%c", character); fprintf(ofp, "\n"); } /*_______________________________*/ /* check endian of machine */ /* 1 if big; -1 if little */ /*_______________________________*/ int is_big_endian_() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } int is_big_endian__() { return is_big_endian_(); } GMTSAR_V5.7/preproc/ERS_preproc/ers_line_fixer/Makefile000644 015705 000000 00000000476 13505462014 024042 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ers_line_fixer CSRCS = ers_line_fixer.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I./include LIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(LIBS) all: $(PROG) clean: rm -f $(OBJS) tags core *.c.* install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) GMTSAR_V5.7/preproc/ERS_preproc/read_data_file_dpaf/read_data_file_dpaf000755 015705 000000 00000031744 13507242212 027125 0ustar00sandwellwheel000000 000000 ` H__PAGEZERO(__TEXT __text__TEXT  __stubs__TEXT<__stub_helper__TEXTt__const__TEXT`8`__cstring__TEXT__unwind_info__TEXTP8__DATA  __nl_symbol_ptr__DATA   __got__DATA   __la_symbol_ptr__DATA( P( H__LINKEDIT00"000X`00h`13 P2 /usr/lib/dyld}/ >>S)2   *( 8/usr/lib/libSystem.B.dylib&X1)`1UHAWAVAUATSHHHHEЃH~H5V c HHder.logHHdataheadHH56 H+ H@HmH0 H  IHHHHL@LPLHLXH@HIGHHHIG HIG$HIG4HIG8HIG@HIGDHIGHHMoPLMgTLMWXL`M_`LhMwdLpI_hHxHH54 LSAVASARATAUHĀ(IHHHL@LLH'LH@,HIF1HIF6H IF;HpIF@H(IFIH0IFNH8IFWH@IF\HHIFaHPIFfHXIFkH`IFnHhIFqHIFvHxIFHIHIHIHIHIHMMLMLM$LHH5HHLAUARASATxh`XPH@80(p H|-1H H0HHHHH5.L@LLHHLPLXxph`HxH5LLLHLATxLAWh`XPH@80(p 0HDDHH5 1LSHLHHLis]LH?I*AHALAA^ HE| AD㉅)L5 I>H5 1HbI>H5 1OI>H5 1D;I>H5 1D'I>H5 1DA|-tHW H8H5 1DtH. H8H5% 1LtH H8H50 1Dž|-1L|-Hþ|-HLkHZfWAE1E1ffffDWA*fXYW*Y W*XEu^f(\f. puLzJWA*H H8f(YVYX°H5F |AEu:D9t1H H8^ðH5 <AD|-HHAHHG HH;Eu1HĨ[A\A]A^A_]H& H8HH51H HH=~fDUH]DUHE*XY]fUHE*Y EYXX]ÐUH]Ð%v %x %z %| %~ % % % % % L AS% hhh$h0h=hLhYhghth@XO>@?p"@Ô/۾Usage: %s datafile rdataheader.logwerror opening data file %2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c%6c%6c%24c%4c%4c%4c%4c%4c%8c%4c%8c%4c%4c%4c%4c%2c%2c%4c%8c%4c%48c%28c%32c%28c%4c%4c%4c%8c%10196c*********** SAR FDR FIXED SEGMENT *********** A_E_flag ==> %.2s blank_2 ==> %.2s for_con_doc ==> %.12s for_con_doc_rev_level ==> %.2s file_des_rev_level ==> %.2s softw_rel ==> %.12s file_number ==> %.4s file_name ==> %.16s rec_seq_loc_type_flag ==> %.4s seq_number_loc ==> %.8s seq_number_field_length ==> %.4s rec_code_loc_type_flag ==> %.4s rec_code_loc ==> %.8s rec_code_field_length ==> %.4s rec_len_loc_type_flag ==> %.4s rec_len_loc ==> %.8s rec_len_field_length ==> %.4s reserved_4 ==> %.4s reserved_segment ==> %.64s *********** SARDATA ********** n_record ==> %.6s record_length ==> %.6s blank1 ==> %.24s n_bits_per_sample ==> %.4s n_samples_data_group ==> %.4s n_bytes_per_data_group ==> %.4s justification ==> %.4s n_channels ==> %.4s n_lines ==> %.8s n_left_border_pixels ==> %.4s n_data_groups ==> %.8s n_right_border_pixels ==> %.4s n_top_border_lines ==> %.4s bottom_border_lines ==> %.4s interleaving ==> %.4s n_phys_records ==> %.2s n_phy_records_multi ==> %.2s n_bytes_prefix_data ==> %.4s n_bytes_SARdata_record ==> %.8s n_bytes_suffix_data ==> %.4s blank2 ==> %.48s blank3 ==> %.28s blank4 ==> %.32s data_format_type_id ==> %.28s data_format_type_code ==> %.4s n_left_fill_bits_pixel ==> %.4s n_right_fill_bits_pixel ==> %.4s max_data_range_pixel ==> %.8s blank_filler ==> %.10s *********** SARDATA ********** line_no ==> %1d rec_index ==> %1d left_fill_pixels ==> %1d data_pixels ==> %1d right_fill_pixels ==> %1d num_lines = %d good_bytes_per_line = %d bytes_per_line = %d first_sample = %d num_patches = %d **** header_linelength (%d) != default linelength (LINELENGTH) **** header_prefix (%d) != default prefix (PREFIX) **** header_suffix (%d) != default suffix (SUFFIX) icu_start = %.3lf PRF = %lf  444  X  *4>HR"(Z@___stack_chk_guardQr@___stderrp@___stdoutp@dyld_stub_binderr(@___stack_chk_failr0@_atoir8@_exitr@@_fopenrH@_fprintfrP@_freadrX@_fscanfr`@_fseekrh@_fwriterp@_malloc__mh_execute_header8main #include #include #include #include #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) #define MIN_PRF 1640.0 #define MAX_PRF 1720.0 #define SEC_PER_PRI_COUNT 210.94e-09 #define LINELENGTH 11644 #define PREFIX 412 #define SUFFIX 0 #define IFC_OFF 210 #define SOL 299792456.0 int is_big_endian_(void); int is_big_endian__(void); int main(argc, argv) int argc; char *argv[]; { char *data, logfilename[255]; // int file_size,year; int prior_pri_dn; int endian; FILE *indata, *logfile; struct sarleader_binary slb; /* pj use dpaf version */ /* struct sardata_rec sdr; */ struct sardata_dpaf_rec dpaf_sdr; struct SAR_info sar; struct lineparam info; int logflag; int nlines, linelength, prefix, suffix; int num_patches, good_bytes_per_line, first_sample; int iwrite = 0; // char *iptr; int ncnt, print_start; unsigned short *icu_time1, *icu_time2; double icu_time, icu_time_old; struct lineparam { int ifc; unsigned short swst_dn; unsigned short pri_dn; double pri; double swst; }; double calc_pri(); double calc_swst(); logflag = 0; /*------------------------*/ /* check endian */ /*------------------------*/ endian = is_big_endian_(); if (argc < 2) { fprintf(stderr, "Usage: %s datafile\n", argv[0]); exit(1); } indata = fopen(argv[1], "r"); strcpy(logfilename, "dataheader.log"); logfile = fopen(logfilename, "w"); logflag = 1; if (indata == NULL) { fprintf(stderr, "error opening data file\n"); exit(1); } /* read top of file */ (void)fread(&slb, sizeof(struct sarleader_binary), 1, indata); sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); /* read nominal parameters */ fscanf(indata, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); sar.dataheader = (struct sardata_header *)malloc(sizeof(struct sardata_header)); fscanf(indata, SARDATA_HEADER_RCS, SARDATA_HEADER_RVL(sar.dataheader)); /* reset file pointer and read first line of data */ fseek(indata, LINELENGTH, 0); (void)fread(&slb, sizeof(struct sarleader_binary), 1, indata); /* pj use dpaf version */ /* nitems = fread(&sdr,sizeof(struct sardata_rec),1,indata); */ (void)fread(&dpaf_sdr, sizeof(struct sardata_dpaf_rec), 1, indata); if (logflag) { fprintf(logfile, SARLEADER_FDR_FIXSEG_WCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fprintf(logfile, SARDATA_HEADER_WCS, SARDATA_HEADER_RVL(sar.dataheader)); /* fprintf(logfile,SARDATA_REC_WCS, SARDATA_REC_RVL(&sdr)); */ fprintf(logfile, SARDATA_DPAF_REC_WCS, SARDATA_DPAF_REC_RVL(&dpaf_sdr)); } /* used in SAR processor - each patch is 2800 long */ nlines = atoi(sar.dataheader->n_records); num_patches = nlines / 2800; /* double-check length of line */ linelength = atoi(sar.dataheader->record_length); /* check data preifx and suffic; add 12 to prefix for top of file */ prefix = atoi(sar.dataheader->n_bytes_prefix_data) + 12; suffix = atoi(sar.dataheader->n_bytes_suffix_data); /* SAR processor needs to know where the first sample is so skip the dataheader (specified in equivalent samples - 2 bytes per sample) and subtract the data suffix (in bytes) */ first_sample = prefix / 2; good_bytes_per_line = linelength - suffix; /* use PRI times the number of lines */ fprintf(stdout, "num_lines = %d\n", nlines); fprintf(stdout, "good_bytes_per_line = %d\n", good_bytes_per_line); fprintf(stdout, "bytes_per_line = %d\n", linelength); fprintf(stdout, "first_sample = %d\n", first_sample); fprintf(stdout, "num_patches = %d\n", num_patches); if (linelength != LINELENGTH) { fprintf(stderr, "**** header_linelength (%d) != default linelength (LINELENGTH)\n", linelength); } if (prefix != PREFIX) { fprintf(stderr, "**** header_prefix (%d) != default prefix (PREFIX)\n", prefix); } if (suffix != SUFFIX) { fprintf(stderr, "**** header_suffix (%d) != default suffix (SUFFIX)\n", suffix); } fseek(indata, LINELENGTH, 0); prior_pri_dn = 0; data = (char *)malloc(LINELENGTH); ncnt = 0; print_start = 0; icu_time_old = 0.; while (fread(data, LINELENGTH, 1, indata) != 0) { ncnt = ncnt + 1; memcpy((char *)&info, (data + IFC_OFF), sizeof(struct lineparam)); icu_time1 = (unsigned short *)(data + IFC_OFF - 6); icu_time2 = (unsigned short *)(data + IFC_OFF - 4); /* swap bytes if necessary */ if (endian == -1) { FIX_INT(info.ifc); FIX_SHORT(info.swst_dn); FIX_SHORT(info.pri_dn); FIX_SHORT(*icu_time1); FIX_SHORT(*icu_time2); } info.pri = calc_pri(info); info.swst = calc_swst(info); icu_time = (double)(*icu_time1) * 65536.0 + (double)(*icu_time2); if (((icu_time - icu_time_old) == 1) & (print_start == 0)) { fprintf(stdout, "icu_start = %.3lf\n", (icu_time - (ncnt - 2) * (info.pri * 256))); print_start = 1; } icu_time_old = icu_time; if (info.pri_dn != prior_pri_dn && iwrite == 0) { /* don't need to print near_range here because it is obtained from * ers_line_fixer */ /*fprintf(stdout, "near_range = %lf * \n",(info.swst*SOL/2.0));*/ fprintf(stdout, "PRF = %lf\n", (1.0 / info.pri)); prior_pri_dn = info.pri_dn; iwrite = 1; } } } /* these are taken verbatim from fix_line */ double calc_pri(info) struct lineparam info; { return (((double)info.pri_dn + 2.0) * SEC_PER_PRI_COUNT); } double calc_swst(info) struct lineparam info; { return ((double)info.swst_dn * SEC_PER_PRI_COUNT + 9.0 * info.pri - 6.6E-6); /* based on Johan Jacob Mohr and Søren Nørvang Madsen, Member, IEEE,Geometric Calibration of ERS Satellite SAR Images, 2001, calibriation should be 6.6*/ } /*_______________________________*/ /* check endian of machine */ /* 1 if big; -1 if little */ /*_______________________________*/ int is_big_endian_() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } int is_big_endian__() { return is_big_endian_(); } GMTSAR_V5.7/preproc/RS2_preproc/Makefile000644 015705 000000 00000000627 13505462014 021020 0ustar00sandwellwheel000000 000000 include ../../config.mk # # make all the files # DIRS = lib src all: $(LN_S) -f ../S1A_preproc/include include $(LN_S) -f ../S1A_preproc/lib lib for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done uninstall: (cd src; $(MAKE) uninstall) clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done spotless: clean GMTSAR_V5.7/preproc/RS2_preproc/include000755 015705 000000 00000000000 13505462014 024611 2../S1A_preproc/includeustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/RS2_preproc/lib000755 015705 000000 00000000000 13505462014 023057 2../S1A_preproc/libustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/RS2_preproc/src/000755 015705 000000 00000000000 13507242234 020144 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/RS2_preproc/src/make_slc_rs2000755 015705 000000 00000131764 13507242215 022451 0ustar00sandwellwheel000000 000000 8 H__PAGEZERO(__TEXT__text__TEXT Hi __stubs__TEXTHvHv__stub_helper__TEXT8w8w__const__TEXTxx__cstring__TEXTzz__unwind_info__TEXT88__DATA N__nl_symbol_ptr__DATA(__got__DATA*__la_symbol_ptr__DATA(@(-__data__DATAhh__common__DATA@NH__LINKEDITN "0HP`it P>>+ U /usr/lib/dyld AK6YTb2   *( 8 /opt/local/lib/libtiff.5.dylib 8/usr/lib/libSystem.B.dylib&HH)UHAWAVAUATSH8AIHHHEЃH=7H5u<I~H5&niIHuIvH=n<Leit3E11E1fDY u AD9DM1L6iكuE1E1HnH8H5m1DDiCHHi!iILhI~H5mhHHuIvH=hm"<HLRRHhHH[IVHLIvHH@hH52mH&hH5#mH_hHHuH=mH;HHHH0HhHLuAIvHHgH5lHgH5lHgHHuH=lH ;HHD Hg1!gI~H5ClfIHuIvH=ml:IvHHgH5dlHfH5UlH6gHHuH=AlHm:HLH LkfHfH,HH;Eu1H8A[A\A]A^A_]ffUHAWAVAUATSHIIHHHHELJTLJdH5nLE1ALL<HH8H5o1LSfL7H,pHǃtHǃHǃHǃHǃHǃHǃǃ\H0H5n11oCH5xnE1ALL;LG g^8ǃ H5qnE1ALL;LQG ag^PH5unE1ALLM;LGH5|nE1ALL;LF^@HHǃ(Hǃ H5\nE1ALL:LFYfH5hnE1ALL:LSFYcfYcf(tfH5wnE1ALL=:L 11LLAH5nE1ALL:H(11LtALLcH5nLfcHL\cLLLcH5_hL2cHL$cLLcH5ahLbHLbH?HH5mLPct H5)nH5mHE1AL8LLDH5mE1ALL8ƅLyDYdXHL%m11L?H11L?H11L?H5mE1ALL18LCD,LC,)DቋhLPHǃHǃh(cXHH5\m116?Hǃ0HǃHǃxH5-mE1ALLu7L=C,W*^^?cXX`ǃXǃlH=laHzHH;EuH[A\A]A^A_]S`UHAWAVAUATSHIHHyHHEALfAI@AHH5eLEY6AHL%fLLE06LAAHLLE6ƅLA,Af( a^f: Yf(\,AGWf: \YaAWAHH5eLE5LIAAGAHH5eLES5LAAGAHH5eLE%5L@AG AHH5fLE4L@AG(AHH5\H8H5.SLH QMBLH5QCu=LBAA<$u%H[H8H5RLH `QMBLH5YQBu=LIBAA<$u%H[H8H5RLH QMDBLH5 QqBu=LAA A<$u%HN[H8H5>RLH PMALH5P!Bu=LAA(A<$u%HZH8H5QLH PMALH5{PAu=LYAA0A<$u%HZH8H5QLH =PMTALH52PAu=L AA8A<$u%H^ZH8H5NQLH OMALH5O1Au=L@A@A<$u%HZH8H5PLH OM@LH5O@u=Li@AHA<$u%HYH8H5PLH nOMd@LH5fO@u=L@APA<$u%HnYH8H5^PLH (OM@LH5'OA@u=L?AXA<$u%HYH8H5PLH NM?LH5N?u=Ly?A`A<$u%HXH8H5OLH NMt?LH5N?u=L)?AhA<$u%H~XH8H5nOLH bNM$?LH5[NQ?u=L>ApA<$u%H.XH8H5OLH NM>LH5N?u=L>AxA<$u%HWH8H5NLH MM>LH5M>u=L9>AA<$u%HWH8H5~NLH MM4>LH5zMa>u=L=AA<$u%H>WH8H5.NLH u=L=AA<$u%HVH8H5MLH LM=LH5L=u=LI=AA<$u%HVH8H5MLH LMD=LH5Lq=u=L<AA<$u%HNVH8H5>MLH jLM<LH5bL!=u=L<AA<$u%HUH8H5LLH $LM<LH5L<u=LY<AA<$u%HUH8H5LLH KMT<LH5K<u=L <AA<$u%H^UH8H5NLLH KM<LH5K1<u=L;AA<$u%HUH8H5KLH [KM;LH5YK;u=Li;AA<$u%HTH8H5KLH KMd;LH5K;u=L;AA<$u%HnTH8H5^KLH JM;LH5JA;u=L:AA<$u%HTH8H5KLH JM:LH5J:u=Ly:AA<$u%HSH8H5JLH QJMt:LH5IJ:u=L):AA<$u%H~SH8H5nJLH JM$:LH5JQ:u=L9AA<$u%H.SH8H5JLH IM9LH5I:u=L9A A<$u%HRH8H5ILH IM9LH5I9u=L99A(A<$u%HRH8H5~ILH DIM49HHH9HHDRHH;EuH[A\A]A^A_]8f.fUHAWAVSPHIIHH9HcS8u+HQH8H5H1LLIH[A^A_]8H[A^A_]UHAWAVATSHIIIH;8AHR8u)HQH8H5gH1LLM[A\A^A_]+8[A\A^A_]f.@UHAWAVATSHIIIH7HR8u)HQH8H5 HLLM[A\A^A_]7[A\A^A_]f.DUHAWAVSPILupaytH5G1Lt7AaytH5G1LT7ATaytH5G1L47IH5CHg7tH5G1LH7Af.9u{H5GL6AdaytH5vG1L6IH54CH6tH5\G1LH6IH5CH6tH5H`2tH5rE1LH1I H5s>H-2tH5PE1LH1I(H5@>H1tH5+E1LH1APf.o4u{H5ELn1A@f.I4u{H5ELH1A8f.#4u{H5DL"1A f.3u{H5DL0A(f.3u{H5DL0Af.3u{H5DL0Af.3u{H5DL0Af.e3u{H5DLd0Af.?3u{H5DL>0Af.3u{H5yDL0Af.2u{H5fDL/Af.2u{H5XDL/Apf.2u{H5HDL/Axf.2u{H50DL/Af.[2u{H5DLZ/Af.52u{H5DL4/Af.2u{H5CL/Af.1u{H5CL.Af.1u{H5CL.Af.1u{H5CL.Af.w1u{H5CLv.Af.Q1u{H5CLP.Af.+1u{H5CL*.Af.1u{H5CL.Af.0u{H5CL-Af.0u{H5CL-A f.0u{H5CL-A(f.m0u{H5CLl-IH59H-tH5C1LH9-I0H59Hl-tH5C1LH-Af./u{H5CL,H[A^A_]ÐUH]DUH]DUHHHHEH8H5OC1,j,@UHGOYFYN\OYFY\JOYFY\B]UHYfOfYXXWQ]UHW\VfOfFf\YfYXXWQ]UH\fff\YfYXXQ]UHOf(YYXWYXWQ^G^FG^F]fUHpY -*)X(^XW*f(X^XhW*^X]UHSPÍ9|H(E8tHCH8H5-A1ʉc*H[]fDUHSPHf(\^ZHD8t&HWCH8KSH5@)1H[]ÐUHAWAVAUATSHDDHIHBHHED6EH(tAIArf.@AE1D(L tLL'L(fAt;H1L(fʀЀ w Hc0 HÄu 1L(HƄ0H0/ ,HHi`H5[@Li'HcAMSI9JHHG'LH(f.DLL'H LH'IiMcIiM< LH5=&t%H L&L(f.AL t4H1L(fʀЀ w Hc0 HÄu 1L(HƄ0H0,HHi`H5?L)&m@HcExA9f.fM6I9-IiA|KH;L uCIiMcIt:9|IiA@HL Lc; S4HZ>HH=t<$%E1L LtLMiN48H5; L$LL$L(L nH=H8H5;1Lj$`IiIcHiAIL1ڀЀ w HcA\HuIiAIL1ڀЀ w HcHu^AtrH(JL8I1L f.DڀЀ w HcHu91HAD_1HƄHL B1L(L HƄH,HHi`H5K<LY#L#IiAH -<H H;MuH[A\A]A^A_]"DUHAWAVAUATSPtGAIDE1 A HA9uAE9tL"H9w۸ˉH[A\A]A^A_]ÐUHAWAVAUATSHxH;HHEиAA)AAIA~*HOutOfSpaHG fGce<xuL`|McMcMKM)LIKDH9vJK LH9LHHNHHHÃH`01HLaƅ`-HcIXAIA0f.HIH)ƃ WABCHIH HwCItum1HAH$fHTHAf.L9vB<6t A>tHHH9v<>HIuHH HE1Af.@HHIzL9wLLL!fDADDܬLLLЬD Icր|/u%AHHHDXHHHH71IiM4 I IDŽ IDŽ MtUHȬLhIiL LH5T*L6HLDIպLLLHȬHDŽHiHHLܬLuHcA|/AEH9mHLLZf.@HI HLȬIiHHH5)r}I_LLLHHiLLLLЬJHAAHHiENܬLHuHcA|/I]LH HHH HLiK<<9LLxH(A$CfCEDCLOS%AHiȬH)H1ڀЀ w Hc0HuDLLL@HЬHLJHFHHiANENܬLHuHcA|/I]LH HHH LiK<49L)HL\L1HKDŽ<G<CDŽ<AFfAFEDACLOSHȬL1HƄ0H01,HHi`H5](HHdLL[LHHSt HЬ(AFfAFEDACLOSHЬHHȬLHË5P)LLMIHBWHЬKDŽ4G4CDŽ4@f@EDCLOSLHLLLQHE'Hg'H8H5%1DHH 8'H H;MuHHS[A\A]A^A_] UHAWAVSPEIAFHHiH<9}QIDŽEADŽH[A^A_]ÐUHAWAVSPt;I1A C>Iǹ< t < uL L9w1ۉH[A^A_]fDUHydu-HA xA LDLcHA01LI WABшL>HM9IvD>Ht8D>H|*HHf.NFHH9Hvr]ÐUHAWAVAUATSHAAIH%HHEЅu H=Z$i E~!Gt-1f D D9|LHIcLiC4uC4u = O4K4H5" H t(DO4C4EEH=U#1HLPD\t0KL41ڀЀ w Hc`Hu1HƄ`H`&,HHi`H5R$O4C4LPEEH="1\ A7HHt SLiAut LVH#HH;EuHĘ[A\A]A^A_]J f.UH* Y*% f(X^-x f: XY- Y- Wf: \YQ ^Wf: W*X9 WA*^XW*^X^2 XX. X]UHAWAVAUATSHIHXH"HHEH IE~X1L`E11fDIcA< u0ANLLLO,HcHXADAE9|11ۍBD9}0L`LLDL,HcHXH1"HH;EuHĈ[A\A]A^A_]UHAWAVAUATSHIHXH!HHEHIE~j1L`E11fDIcAH w>HHs.ANLLL;HcHXADAE9|11ۍBD9}.L`LLDLHcHXH!!HH;EuHĈ[A\A]A^A_]wUH帀H "ƄVƄ@Ƅ@+ƄHH=7_u"]f.UHAWAVATSIIILLH<OHHLkHHLLHNH[A\A^A_]fUHAVS~I Lu[A^]DUHAWAVAUATSHHAIHHHEHcLiN4/H5 LtAu^H521HLYHAKL/1ڀЀ w HcHuH5H1L-AuH5H1HKc/LiO$/H5 L.H5{L1HLL21HƄHAu"U,HHi`HH5B3,HHi`H=_H5H1TAu!H5H1HKc/LiK'H5 HK/H,HHi`HHcHiLH5iL1H"HA$tfKL/1f.ڀЀ w HcHu2trKL'1ڀЀ w Hc HuJ1HƄH,HHi`H H5L1HLe1HƄ H,HHi`L=jLH k,HHi`LH5EL1HHPH}HH;EuH[A\A]A^A_]UHAWAVAUATSHMH}HMЍ EHuAԅt }"B'H=L}~"]f.@ LuH]H;McMiJc7HHiDLH;B7SEHEDtAf.D9e~"D L uHEH8IiLHEH8LcMtAIiAteDLH;B7tHEЍH}HMZH;B7t}HHMM8H;B7tH[A\A]A^A_]B7uEtHEDtAD9e~"D LuHEH8IiL HEH8LcMkAIiAtN%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%% %"%$%&%(LAS%hhh%h5hMhehhhhhhxhnh dhZh3Ph@FhM@?$$ Usage: make_slc_rs2 name_of_xml_file name_of_tiff_file name_output Example: make_slc_rs2 product.xml imagery_HH.tif RS220110515 Output: RS220110515.SLC RS220110515.PRM RS220110515.LED rbCouldn't open xml file: %d %d r.PRMwCouldn't open prm file: .LEDCouldn't open led file: Couldn't open tiff file: .SLCwbCouldn't open slc file: Writing SLC..Image Size: %d X %d... A%d %d %d %.3lf %lf %d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf /product/sourceAttributes/orbitAndAttitude/orbitInformation/stateVector//product/sourceAttributes/orbitAndAttitude/orbitInformation/stateVector/timeStamp//product/sourceAttributes/orbitAndAttitude/orbitInformation/stateVector/xPosition//product/sourceAttributes/orbitAndAttitude/orbitInformation/stateVector/yPosition//product/sourceAttributes/orbitAndAttitude/orbitInformation/stateVector/zPosition//product/sourceAttributes/orbitAndAttitude/orbitInformation/stateVector/xVelocity//product/sourceAttributes/orbitAndAttitude/orbitInformation/stateVector/yVelocity//product/sourceAttributes/orbitAndAttitude/orbitInformation/stateVector/zVelocity/stateVector%d Lines Written for Orbit... /product/imageGenerationParameters/sarProcessingInformation/numberOfRangeLooks/%s a/product/imageAttributes/rasterAttributes/sampledPixelSpacing//product/sourceAttributes/radarParameters/radarCenterFrequency//product/sourceAttributes/radarParameters/pulseLength//product/sourceAttributes/radarParameters/pulseBandwidth//product/sourceAttributes/radarParameters/pulseRepetitionFrequency//product/imageGenerationParameters/slantRangeToGroundRange/slantRangeTimeToFirstRangeSample//product/sourceAttributes/orbitAndAttitude/orbitInformation/passDirection//product/sourceAttributes/radarParameters/antennaPointing/.rawD/product/imageGenerationParameters/sarProcessingInformation/zeroDopplerTimeFirstLine//product/imageGenerationParameters/sarProcessingInformation/zeroDopplerTimeLastLine/n/product/imageAttributes/rasterAttributes/numberOfSamplesPerLine/0/product/imageAttributes/rasterAttributes/numberOfLines/PRM set for Image File...Fliping leftside right for Descending Image...Fliping upside down for Ascending Image...can't open fileXXXXXXXXget_sio_struct: PRMname (PRM value) interpreted value %s %s %sinput_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdtypenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangePRFI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startbaseline_centerbaseline_endalpha_startalpha_centeralpha_endSLC_scaleB_offset_startB_offset_centerB_offset_end %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %g stretch_a = %g a_stretch_r = %g a_stretch_a = %g first_sample = %d SC_identity = %d rng_samp_rate = %.6f input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d PRF = %lf pulse_dur = %e near_range = %lf num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s orbdir = %s lookdir = %s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %.6f I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %lf fddd1 = %lf sub_int_r = %lf sub_int_a = %lf B_parallel = %lf B_perpendicular = %lf baseline_start = %lf baseline_center = %lf baseline_end = %lf alpha_start = %lf alpha_center = %lf alpha_end = %lf B_offset_start = %lf B_offset_center = %lf B_offset_end = %lf SLC_file = %s dtype = %.1s SLC_scale = %lf %s %s find_fft_length: ...data length n %d nfft %d geo2latlon: %8.3f %8.3f %8.0f OutOfSpaceUnable to find designated string...after %ld searches.. Unable to find designated string... CLOSEDNot an well formatted XML file...%d, %d %s (%d,%d,%d) %.12f<%s> %s <%s>%s In the brackets the numbers are (count, child, sibling)44Xa ! LLIvL t  0 1`1@2=@?@KK@Q\\p]P_` bbb cHwRw\wfwpwzwwwwwwwwwwwwwwxxx$x.x8xBxLxVx`xjxtx~xxxxxxxxxz' `"p`)@___stack_chk_guardQr@___stderrp@dyld_stub_binderr(@_TIFFCloser0@_TIFFGetFieldr8@_TIFFOpenr@@_TIFFReadScanlinerH@_TIFFScanlineSizerP@_TIFFSetWarningHandlerrX@__TIFFfreer`@__TIFFmallocrh@___bzerorp@___exp10rx@___sincos_stretr@___sprintf_chkr@___stack_chk_failr@___strcat_chkr@___strcpy_chkr@_acosr@_atanr@_atan2r@_atofr@_atoir@_cosr@_exitr@_fcloser@_fgetcr@_fgetsr@_fopenr@_fprintfr@_fputcr@_freer@_fwriter@_mallocr@_powr@_printfr@_putcharr@_putsr@_sscanfr@_strcmpr@_strcpyr@_strlenr@_strncmp__mh_execute_headermainpwrite_xyz2plhgenidcfsassemble_treesUSAGEMAX_NSquroi_flagverboseop_lh2xyzut_sio_structrprmled ,orbslc13:<t_o2latlonprmsintdoubletreeBull_odatasio_structMEM_STRCio_structtringecondsF||}~s_big_endian_toa_xml_ieate2MJDebugopprat_numsoss3eate_childind_orcelengthdistanceunit_vectorfft_length3earch_treetrpace_counthow_treeio_flagwaplocateasign2_date2JDdintsoublebsбefix_strint_spacetreeTREE_SIZECHAR_SIZEAR_modeTR_sloped_slopead_poliet_flag `5`pp0`0@0`Ppp@ ```p0 t p  # - 2 h9Ms]Xgiu`J}Pl 0J J0K@LJ`K  L>`>$0!-K: #J>Vp``Jp Ji   o! @oo p@?   (M5pj@ J`iWn`Xlmv@^TT   $/<EN^m &+3<BJRZbk>?@ABCDEFGHIJMNOPQRSTUVWXYZ[\]^_`abcdefgh@KL>?@ABCDEFGHIJMNOPQRSTUVWXYZ[\]^_`abcdefg _MAX_CHAR_SIZE_MAX_TREE_SIZE_N_SAR_mode_STR_USAGE__mh_execute_header_assemble_trees_cat_nums_create_child_cross3_date2MJD_debug_die_dopp_find_distance_find_distance3_find_fft_length_find_length_find_unit_vector_force_slope_forced_slope_geo2latlon_get_double_get_int_get_prm_get_seconds_get_sio_struct_get_string_get_tree_is_big_endian__is_big_endian___itoa_xml_main_nodata_null_MEM_STR_null_sio_struct_plh2xyz_pop_led_pop_prm_prefix_str_print_space_print_tree_put_sio_struct_quad_pol_quiet_flag_roi_flag_search_tree_show_tree_sio_flag_space_count_str2dbs_str2double_str2ints_str_date2JD_strasign_strlocate_swap_verbose_write_orb_write_slc_xyz2plh_TIFFClose_TIFFGetField_TIFFOpen_TIFFReadScanline_TIFFScanlineSize_TIFFSetWarningHandler__TIFFfree__TIFFmalloc___bzero___exp10___sincos_stret___sprintf_chk___stack_chk_fail___stack_chk_guard___stderrp___strcat_chk___strcpy_chk_acos_atan_atan2_atof_atoi_cos_exit_fclose_fgetc_fgets_fopen_fprintf_fputc_free_fwrite_malloc_pow_printf_putchar_puts_sscanf_strcmp_strcpy_strlen_strncmpdyld_stub_binderGMTSAR_V5.7/preproc/RS2_preproc/src/Makefile000644 015705 000000 00000000632 13505462014 021603 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_slc_rs2 CSRCS = make_slc_rs2.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar -I$(TIFF_INC) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC -L$(TIFF_LIB) -ltiff -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/RS2_preproc/src/make_slc_rs2.c000644 015705 000000 00000031322 13505462014 022653 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 04/06/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include "tiffio.h" #include #include #include #include int pop_prm(struct PRM *, tree *, char *); int pop_led(tree *, state_vector *); int write_orb(state_vector *sv, FILE *fp, int); int write_slc(TIFF *, FILE *, char *); char *USAGE = "\n\nUsage: make_slc_rs2 name_of_xml_file name_of_tiff_file name_output\n" "\nExample: make_slc_rs2 product.xml imagery_HH.tif RS220110515\n" "\nOutput: RS220110515.SLC RS220110515.PRM RS220110515.LED\n"; int main(int argc, char **argv) { FILE *XML_FILE, *OUTPUT_PRM, *OUTPUT_SLC, *OUTPUT_LED; TIFF *TIFF_FILE; char tmp_str[200]; struct PRM prm; tree *xml_tree; state_vector sv[200]; int ch, n = 0, nc = 0, nlmx = 0; if (argc < 4) die(USAGE, ""); if ((XML_FILE = fopen(argv[1], "rb")) == NULL) die("Couldn't open xml file: \n", argv[1]); // find the number of lines and the maximum line length of the xml file while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } fprintf(stderr, "%d %d \n", n, nlmx); xml_tree = (struct tree *)malloc(n * 5 * sizeof(struct tree)); fclose(XML_FILE); // generate the xml tree if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_tree(XML_FILE, xml_tree, 1); fclose(XML_FILE); // show_tree(xml_tree,0,0); // initiate the prm null_sio_struct(&prm); // generate the PRM file pop_prm(&prm, xml_tree, argv[3]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); // generate the LED file n = pop_led(xml_tree, sv); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // generate the SLC file TIFFSetWarningHandler(NULL); if ((TIFF_FILE = TIFFOpen(argv[2], "r")) == NULL) die("Couldn't open tiff file: \n", argv[2]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc file: \n", tmp_str); write_slc(TIFF_FILE, OUTPUT_SLC, prm.orbdir); TIFFClose(TIFF_FILE); fclose(OUTPUT_SLC); } int write_slc(TIFF *tif, FILE *slc, char *orbdir) { uint32 width, height, widthi; int i, j; uint16 s = 0, nsamples; uint16 *buf; short *tmp; // get the width and the height of the file, make width dividable by 4 TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &widthi); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); width = widthi - widthi % 4; // printf("%d %d \n",width,height); buf = (uint16 *)_TIFFmalloc(TIFFScanlineSize(tif)); tmp = (short *)malloc(width * 2 * sizeof(short)); printf("Writing SLC..Image Size: %d X %d...\n", width, height); TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &nsamples); // printf("Total Number of Samples: %d\n",nsamples); // For Ascending Condition... if (strcmp(orbdir, "A") == 0) { printf("Fliping upside down for Ascending Image...\n"); for (i = height - 1; i >= 0; i--) { TIFFReadScanline(tif, buf, i, s); for (j = 0; j < width * 2; j++) { tmp[j] = (short)buf[j]; } fwrite(tmp, sizeof(short), width * 2, slc); } } // For Descending Condition... else { printf("Fliping leftside right for Descending Image...\n"); for (i = 0; i < height; i++) { TIFFReadScanline(tif, buf, i, s); for (j = 0; j < width; j++) { tmp[(width - 1 - j) * 2] = (short)buf[j * 2]; tmp[(width - 1 - j) * 2 + 1] = (short)buf[j * 2 + 1]; } fwrite(tmp, sizeof(short), width * 2, slc); } } _TIFFfree(buf); free(tmp); return (1); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 1000.0) / 1000.0 - trunc((sv[0].sec) * 1000.0) / 1000.0; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.3lf %lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led(tree *xml_tree, state_vector *sv) { int i, ct; char tmp_c[200]; double tmp_d; // search_tree(xml_tree,"/product/generalAnnotation/orbitList/",tmp_c,3,0,1); // count = 1;//(int)str2double(tmp_c); i = 1; while (1) { ct = search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/" "orbitInformation/stateVector/", tmp_c, 1, 5, i); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/timeStamp/", tmp_c, 2, 5, i); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/timeStamp/", tmp_c, 1, 5, i); tmp_c[4] = '\0'; sv[i - 1].yr = (int)(str2double(tmp_c)); sv[i - 1].jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); sv[i - 1].sec = (tmp_d - trunc(tmp_d)) * 86400; search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/xPosition/", tmp_c, 1, 5, i); sv[i - 1].x = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/yPosition/", tmp_c, 1, 5, i); sv[i - 1].y = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/zPosition/", tmp_c, 1, 5, i); sv[i - 1].z = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/xVelocity/", tmp_c, 1, 5, i); sv[i - 1].vx = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/yVelocity/", tmp_c, 1, 5, i); sv[i - 1].vy = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/zVelocity/", tmp_c, 1, 5, i); sv[i - 1].vz = str2double(tmp_c); // fprintf(stderr,"Hahahahahaahah...\n"); if (xml_tree[ct].sibr == -1 || strcmp(xml_tree[xml_tree[ct].sibr].name, "stateVector") != 0) { break; } else { i = i + 1; } } printf("%d Lines Written for Orbit...\n", i); return (i); } int pop_prm(struct PRM *prm, tree *xml_tree, char *file_name) { char tmp_c[2000]; double tmp_d; int tmp_i; double c_speed = 299792458.0; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; search_tree(xml_tree, "/product/imageGenerationParameters/sarProcessingInformation/" "numberOfRangeLooks/", tmp_c, 1, 0, 1); fprintf(stderr, "%s \n", tmp_c); prm->nlooks = (int)str2double(tmp_c); prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; strasign(prm->dtype, "a", 0, 0); search_tree(xml_tree, "/product/imageAttributes/rasterAttributes/sampledPixelSpacing/", tmp_c, 1, 0, 1); prm->fs = c_speed / 2.0 / str2double(tmp_c); // rng_samp_rate prm->SC_identity = 9; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ search_tree(xml_tree, "/product/sourceAttributes/radarParameters/radarCenterFrequency/", tmp_c, 1, 0, 1); prm->lambda = c_speed / str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/radarParameters/pulseLength/", tmp_c, 1, 0, 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/radarParameters/pulseBandwidth/", tmp_c, 1, 0, 1); prm->chirp_slope = str2double(tmp_c) / tmp_d; prm->pulsedur = tmp_d; // search_tree(xml_tree,"/product/qualityInformation/qualityDataList/qualityData/imageQuality/imageStatistics/outputDataMean/re/",tmp_c,1,0,1); prm->xmi = 0; // str2double(tmp_c); //I_mean // search_tree(xml_tree,"/product/qualityInformation/qualityDataList/qualityData/imageQuality/imageStatistics/outputDataMean/im/",tmp_c,1,0,1); prm->xmq = 0; // str2double(tmp_c); //Q_mean search_tree(xml_tree, "/product/sourceAttributes/radarParameters/pulseRepetitionFrequency/", tmp_c, 1, 0, 1); prm->prf = str2double(tmp_c) / 2.0; search_tree(xml_tree, "/product/imageGenerationParameters/slantRangeToGroundRange/" "slantRangeTimeToFirstRangeSample/", tmp_c, 1, 0, 1); prm->near_range = str2double(tmp_c) * c_speed / 2.0; prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "passDirection/", tmp_c, 1, 0, 1); strasign(prm->orbdir, tmp_c, 0, 0); search_tree(xml_tree, "/product/sourceAttributes/radarParameters/antennaPointing/", tmp_c, 1, 0, 1); strasign(prm->lookdir, tmp_c, 0, 0); strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; if (strcmp(prm->orbdir, "D") == 0) { search_tree(xml_tree, "/product/imageGenerationParameters/sarProcessingInformation/" "zeroDopplerTimeFirstLine/", tmp_c, 2, 0, 1); } else { search_tree(xml_tree, "/product/imageGenerationParameters/sarProcessingInformation/" "zeroDopplerTimeLastLine/", tmp_c, 2, 0, 1); } prm->clock_start = str2double(tmp_c); search_tree(xml_tree, "/product/imageGenerationParameters/sarProcessingInformation/" "zeroDopplerTimeLastLine/", tmp_c, 1, 0, 1); tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(tmp_c); strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); search_tree(xml_tree, "/product/imageAttributes/rasterAttributes/numberOfSamplesPerLine/", tmp_c, 1, 0, 1); // tmp_i = (int)str2double(tmp_c) - (int)str2double(tmp_c)%4; prm->num_rng_bins = (int)str2double(tmp_c) - (int)str2double(tmp_c) % 4; prm->bytes_per_line = prm->num_rng_bins * 4; // tmp_i*4; prm->good_bytes = prm->bytes_per_line; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig prm->az_res = 0.0; // prm.antenna_side = -1; prm->fdd1 = 0.0; prm->fddd1 = 0.0; search_tree(xml_tree, "/product/imageAttributes/rasterAttributes/numberOfLines/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c); prm->num_lines = tmp_i - tmp_i % 4; // search_tree(xml_tree,"/product/adsHeader/stopTime/",tmp_c,2,0,1); prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->chirp_ext = 0; printf("PRM set for Image File...\n"); return (1); } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_mosaic_ss/000755 015705 000000 00000000000 13507242234 022303 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/000755 015705 000000 00000000000 13507242234 023350 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/create_tar.csh000755 015705 000000 00000000306 13505462014 022315 0ustar00sandwellwheel000000 000000 #!/bin/csh # # don't include the .-files # setenv COPYFILE_DISABLE true # # create the tar file # setenv COPYFILE_DISABLE true # tar -cvf ../../ALOS_preproc_ERSDAC_AUIG.1.2.tar ../ALOS_preproc # GMTSAR_V5.7/preproc/ALOS_preproc/CMakeLists.txt000644 015705 000000 00000007440 13505462014 022250 0ustar00sandwellwheel000000 000000 # # $Id: CMakeLists.txt 496 2017-08-19 16:16:06Z pwessel $ # if (HAVE_M_LIBRARY) # link the math library set (LINK_LIBS m) endif (HAVE_M_LIBRARY) include_directories (include) add_library (ALOS lib_src/utils.c lib_src/null_sio_struct.c lib_src/get_sio_struct.c lib_src/put_sio_struct.c lib_src/calc_dop.c lib_src/hermite_c.c lib_src/ALOS_ldr_orbit.c lib_src/ALOSE_orbits_utils.c lib_src/interpolate_ALOS_orbit.c lib_src/read_ALOS_sarleader.c lib_src/write_ALOS_LED.c lib_src/write_orb.c lib_src/set_ALOS_defaults.c lib_src/write_ALOS_prm.c lib_src/rng_expand.c lib_src/rng_compress.c lib_src/rng_filter.c lib_src/find_fft_length.c lib_src/siocomplex.c lib_src/polyfit.c lib_src/plh2xyz.c lib_src/xyz2plh.c lib_src/cfft1d.c lib_src/swap32.c lib_src/swap16.c lib_src/fftpack.c include/image_sio.h include/lib_functions.h include/llt2xyz.h include/siocomplex.h) target_link_libraries (ALOS ${LINK_LIBS}) set (LINK_LIBS ${LINK_LIBS} ALOS) add_executable (ALOS_baseline ALOS_baseline/ALOS_baseline.c ALOS_baseline/ALOS_llt2rat_sub.c include/image_sio.h include/lib_functions.h include/llt2xyz.h) target_link_libraries (ALOS_baseline ${LINK_LIBS}) add_executable (ALOS_fbd2fbs ALOS_fbd2fbs/ALOS_fbd2fbs.c include/image_sio.h include/lib_functions.h include/siocomplex.h) target_link_libraries (ALOS_fbd2fbs ${LINK_LIBS}) add_executable (ALOS_fbd2fbs_SLC ALOS_fbd2fbs_SLC/ALOS_fbd2fbs_SLC.c include/image_sio.h include/lib_functions.h include/siocomplex.h) target_link_libraries (ALOS_fbd2fbs_SLC ${LINK_LIBS}) add_executable (ALOS_fbd2ss ALOS_fbd2ss/ALOS_fbd2ss.c include/image_sio.h include/lib_functions.h include/siocomplex.h) target_link_libraries (ALOS_fbd2ss ${LINK_LIBS}) add_executable (ALOS_fbs2fbd ALOS_fbs2fbd/ALOS_fbs2fbd.c include/image_sio.h include/siocomplex.h) target_link_libraries (ALOS_fbs2fbd ${LINK_LIBS}) add_executable (ALOS_filter_SLC ALOS_filter_SLC/ALOS_filter_SLC.c include/image_sio.h include/siocomplex.h) target_link_libraries (ALOS_filter_SLC ${LINK_LIBS}) add_executable (ALOS_llt2rat ALOS_llt2rat/ALOS_llt2rat.c include/image_sio.h include/lib_functions.h include/llt2xyz.h) target_link_libraries (ALOS_llt2rat ${LINK_LIBS}) add_executable (ALOS_look ALOS_look/ALOS_look.c include/image_sio.h include/lib_functions.h include/llt2xyz.h) target_link_libraries (ALOS_look ${LINK_LIBS}) add_executable (ALOS_merge ALOS_merge/ALOS_merge.c include/image_sio.h include/lib_functions.h) target_link_libraries (ALOS_merge ${LINK_LIBS}) add_executable (ALOS_pre_process ALOS_pre_process/ALOS_pre_process.c ALOS_pre_process/parse_ALOS_commands.c ALOS_pre_process/read_ALOS_data.c ALOS_pre_process/read_ALOSE_data.c ALOS_pre_process/swap_ALOS_data_info.c ALOS_pre_process/roi_utils.c include/image_sio.h include/lib_functions.h) target_link_libraries (ALOS_pre_process ${LINK_LIBS}) add_executable (ALOS_pre_process_SLC ALOS_pre_process_SLC/ALOS_pre_process_SLC.c ALOS_pre_process_SLC/parse_ALOS_commands.c ALOS_pre_process_SLC/read_ALOS_data_SLC.c ALOS_pre_process_SLC/swap_ALOS_data_info.c include/image_sio.h include/lib_functions.h) target_link_libraries (ALOS_pre_process_SLC ${LINK_LIBS}) add_executable (ALOS_pre_process_SS ALOS_pre_process_SS/ALOS_pre_process_SS.c ALOS_pre_process_SS/parse_ALOS_commands.c ALOS_pre_process_SS/read_ALOS_data_SS.c ALOS_pre_process_SS/swap_ALOS_data_info.c include/image_sio.h include/lib_functions.h) target_link_libraries (ALOS_pre_process_SS ${LINK_LIBS}) # add the install targets install (TARGETS ALOS ALOS_baseline ALOS_fbd2fbs ALOS_fbd2fbs_SLC ALOS_fbd2ss ALOS_fbs2fbd ALOS_filter_SLC ALOS_llt2rat ALOS_look ALOS_merge ALOS_pre_process ALOS_pre_process_SLC ALOS_pre_process_SS ARCHIVE DESTINATION lib COMPONENT Runtime LIBRARY DESTINATION lib COMPONENT Runtime RUNTIME DESTINATION bin COMPONENT Runtime) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/preproc/ALOS_preproc/roi_pac_scripts/000755 015705 000000 00000000000 13505462014 022666 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_mosaic_ss_2frames/000755 015705 000000 00000000000 13507242234 023722 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_merge/000755 015705 000000 00000000000 13507242234 021422 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process/000755 015705 000000 00000000000 13507242234 022647 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/Makefile000644 015705 000000 00000001214 13505462014 021141 0ustar00sandwellwheel000000 000000 include ../../config.mk DIRS = ALOS_pre_process ALOS_merge ALOS_fbd2fbs \ ALOS_fbd2fbs_SLC ALOS_fbd2ss ALOS_baseline \ ALOS_pre_process_SLC ALOS_mosaic_ss ALOS_look \ ALOS_mosaic_ss ALOS_mosaic_ss_2frames ALOS_pre_process_SS LIB = lib/libALOS.a all: $(LIB) for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done uninstall: for d in $(DIRS); do \ (cd $$d; $(MAKE) uninstall); \ done clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done (cd lib_src; $(MAKE) clean) $(LIB): mkdir -p lib (cd lib_src; $(MAKE) all) spotless: clean rm -rf lib GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbs2fbd/000755 015705 000000 00000000000 13505462014 021631 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/include/000755 015705 000000 00000000000 13505462014 021126 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_llt2rat/000755 015705 000000 00000000000 13505462014 021705 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/000755 015705 000000 00000000000 13507242234 023254 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_look/000755 015705 000000 00000000000 13507242234 021267 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/README.txt000644 015705 000000 00000003027 13505462014 021203 0ustar00sandwellwheel000000 000000 ALOS_preprocessor - August 11, 2008 Rob Mellors - San Diego State University rmellors@geology.sdsu.edu David Sandwell - Scripps Institution of Oceanography dsandwell@ucsd.edu This code is used to preprocess ALOS PALSAR data in L1.0 format. It had been tested with both FBS and FBD mode data at a variety of look angles. The main functions of the code are: 1) ALOS_pre_process - Takes the raw ALOS PALSAR data and aligns the data in the near range. In addition it produces a parameter files in the SIOSAR format containing the essential information needed to focus the data as Single Look Complex (SLC) images. 2) calc_ALOS_baseline - Takes two parameter files of an interferometric pair and calculates the approximate shift parameters needed to align the two images as well as the accurate interferometric baseline at the beginning and end of the frame. 3) ALOS_merge - Appends two raw image files and eliminates duplicate lines. In addition it makes a new PRM file representing the new longer frame. 4) ALOS_fbd2fbs - Converts a raw image file in FBD mode (14 MHz) to an FBS mode (28 MHz) by fourier transformation of each row of the image file (one echo) and padding the spectrum with zeros in the wavenumber domain. A new parameter file is created to reflect the new data spacing and chirp paraneters. A complementary ALOS_fbs2fbd program is also available but not automatically compiled with the makefile. The interferograms made from the FBD2FBS conversion have lower noise than the interferograms made from the FBS2FBD conversion. GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2fbs/000755 015705 000000 00000000000 13507242234 021633 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_baseline/000755 015705 000000 00000000000 13507242234 022105 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/000755 015705 000000 00000000000 13507242234 021122 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2fbs_SLC/000755 015705 000000 00000000000 13507242234 022334 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2ss/000755 015705 000000 00000000000 13507242234 021506 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2ss/Makefile000644 015705 000000 00000000502 13505462014 023141 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_fbd2ss CSRCS = ALOS_fbd2ss.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2ss/ALOS_fbd2ss.c000644 015705 000000 00000012243 13505462014 023653 0ustar00sandwellwheel000000 000000 /*************************************************************************** * ALOS_fbd_ss reads a raw FBD-HH file and zeroes all the lines * * corresponding to a SW4 scansar file * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Rob Mellors * * (Scripps Institution of Oceanography) * * Date : 11/03/2009 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" #include #include /* fast random number generator */ #define znew (int)(z = 36969 * (z & 65535) + (z >> 16)) typedef unsigned long UL; static UL z = 362436069, t[256]; void settable(UL i1) { int i; z = i1; for (i = 0; i < 256; i = i + 1) t[i] = znew; } char *USAGE = "\nALOS_fbd2ss FBD.PRM SW4.PRM ashift ntot a_stretch_a \n\n" " FBD.PRM PRM file for input image in fine beam dual " "polarization (FBD 14 MHz) (input) \n" " SW4.PRM PRM file with appropriate lines zeroed to match a " "WB1_SW4 file \n" " ashift azimuth shift needed to align the first row of " "the FBD to the SW4 \n" " ntot total number of rows between bursts in the SW4 = " "num_valid_az/6 \n" " a_stretch_a either the parameter from matching or (SW4_PRF - " "FBD_PRF)/FBD_PRF \n\n" " EXAMPLE: ALOS_fbd2ss FBD.PRM SW4.PRM -1046 1684 0.010972 \n\n"; int main(int argc, char **argv) { FILE *prmfile, *datafile, *prmout, *dataout; unsigned char *indata; int j, k, headsize; /* set these three numbers and then recompile */ /* ashift is the ashift from fitoffset this fbd file should be the slave */ /* nburst is 355 for SW4 */ /* ntot is the total number of lines between bursts scaled by the ratio of * the fbd_PRF/SW4_PRF */ int ibufsize, ashift = 652, nburst0 = 355, nburst, ntot0 = 1684, ntot; int necho, IQ_mean; struct PRM r; if (argc < 6) die(USAGE, ""); /* flags defined in global_flags.h */ verbose = 0; debug = 0; /* fill the struct with default parameters */ null_sio_struct(&r); /* open input PRM file and read the parameters */ if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); get_sio_struct(prmfile, &r); IQ_mean = (int)(r.xmi - 15.5); /* get the remaining parameters from the command line */ ashift = atoi(argv[3]); ntot0 = atoi(argv[4]); ntot = (int)ntot0 * (1. + atof(argv[5])); /* increase the burst length to ensure complete overlap and shift the * ashift back by 1/4 burst */ nburst = (int)(1.5 * nburst0); ashift = (int)(ashift - nburst0 / 4); fprintf(stderr, " ashift, nburst, ntot %d %d %d \n", ashift, nburst, ntot); /* open input raw data file */ if ((datafile = fopen(r.input_file, "r")) == NULL) die("Can't open ", r.input_file); /* open output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); /* assemble the output filename and open for writing */ sscanf(argv[2], "%s", r.input_file); r.input_file[strlen(argv[2]) - 4] = 0; strcat(r.input_file, ".raw"); /* open output file for scansar image */ if ((dataout = fopen(r.input_file, "w")) == NULL) die("Can't open ", r.input_file); /* compute the sizes for the input and output buffers and allocate the memory */ ibufsize = r.bytes_per_line; headsize = 2 * r.first_sample; if ((indata = (unsigned char *)malloc(ibufsize * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } /* read and write the input and output raw files */ for (k = 0; k < r.num_lines; k++) { fread((void *)indata, sizeof(unsigned char), ibufsize, datafile); fwrite((void *)indata, sizeof(unsigned char), headsize, dataout); /* fill the output array with random 15 or 16 */ necho = (k + 100 * ntot - ashift) % (ntot); if (necho > nburst) { for (j = 0; j < ibufsize - headsize; j++) indata[j + headsize] = IQ_mean + NULL_DATA + znew % 2; } fwrite(indata + headsize, sizeof(unsigned char), ibufsize - headsize, dataout); } if (debug) fprintf(stderr, " %d %d %d %d %f %f \n", r.chirp_ext, r.good_bytes, r.bytes_per_line, r.num_rng_bins, r.fs, r.chirp_slope); /* write the output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("can't open prfile", argv[2]); put_sio_struct(r, prmout); fclose(prmfile); fclose(prmout); fclose(datafile); fclose(dataout); } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2ss/ALOS_fbd2ss000755 015705 000000 00000064500 13507242210 023434 0ustar00sandwellwheel000000 000000  H__PAGEZERO(__TEXTPP__text__TEXT@-@__stubs__TEXTDBfDB__stub_helper__TEXTBB__const__TEXTpCHpC__cstring__TEXTC C__unwind_info__TEXTOlO__DATAPP__nl_symbol_ptr__DATAPP__got__DATAPP__la_symbol_ptr__DATA P P__data__DATAPP__common__DATAP\H__LINKEDIT``@ "0``HP`Paxc20g Pf& /usr/lib/dyldv?jVsx2   *( 8/usr/lib/libSystem.B.dylib&`c)xcUHH=];HiiHHHiiHHHiiHHHiiHHσuH=;]f.@UHAWAVAUATSHIHB:HHEЃH=:H5/CH;H:H=I|$H5/D,HHuIt$H=/LHxHLzI|$+AI|$ +W*I|$(+X,YD,AVHb9H8H5/1D+H5.L+HHuH=.H/I|$H5.V+HuIt$H=.I|$H5.L1LG+LpI|$H+ƄH5.L*H5.L*HHuH=;.HHcH*HHPL X+D,HckdXD)HHH)HcHPAփHLdHHHXHH`H)HhE1f.HHHH)HHL)HHLB0H7u1H`@1HhHiiHHЉ)DAt HiiHHЉ)DA4 HH9uH`t7HiiHHЉ)DHH@4 H6HXHPLL(IAD;PH68tBH6H8$DD H5 ,7(HpH{H5+(IHLuHsH=+HHHLyHx'L'H'L'HZ5HH;Eu1HĨ[A\A]A^A_]l'H95HH=+2'Z'UH]DUH]DUHHHH4H8H5+1''@UHGOYFYN\OYFY\JOYFY\B]UHp)X '(^Y'W*X^XW*f(X^XhW*^X]UHHXXXXXXXXHHHHHH HHHHH8H0H(H (&HXLJhayLJlayLJpaytLJayLJayLJay(~&Ht$iH(8HXhxHHH]ÐUHAWAVAUATSHxIH"2HHEH2H5`(HH1HhU$fIHpIHxIHIHIHIHIHI HIHI HI(HI8HLLL-|*DLH5y'#u=LL#;u-H0H81LLH G'M:#f.fLH54'C#u=HpL6#;u)H0H81LLH &M"LH5&"u=HxL";u)HZ0H81LLH &M"LH5&"u=HL";u)H 0H81LLH t&MF"LH5h&S"u=HLF";u)H/H81LLH 2&M!LH5%&"u=HL!;u)Hj/H81LLH %M!LH5%!u=HL!;u)H/H81LLH %MV!LH5%c!u=HLV!;u)H.H81LLH ^%M!LH5Q%!u=HL!;u)Hz.H81LLH %M LH5 % u=HL ;u)H*.H81LLH $Mf LH5$s u=HLf ;u)H-H81LLH $M LH5z$# u=HL ;u)H-H81LLH D$MLH52$u=HL;u)H:-H81LLH #MvILH5#uJL8AA}u4H,H81H55&LH #MAf.LH5##uMLAA}u7H,H81H5%LH O#MAf.LH57#uML{ALA}u7H&,H81H5x%LH "MA[f.LH5"cuMLAPA}u7H+H81H5%LH "MAf.LH5"uMLATA}u7Hf+H81H5$LH \"MAf.LH5E"uML[AXA}u7H+H81H5X$LH "MA;f.LH5!CuMLA\A}u7H*H81H5#LH !MAf.LH5!uMLA`A}u7HF*H81H5#LH `!MA{f.LH5K!uML;AA}u7H)H81H58#LH !MAf.LH5 #uMLAlA}u7H)H81H5"LH MAf.LH5 uML{AdA}u7H&)H81H5x"LH c MA[f.LH5L cuMLAhA}u7H(H81H5"LH  MAf.LH5uMLAA}u7Hf(H81H5!LH MAf.LH5uML[ApA}u7H(H81H5X!LH hMA;f.LH5MCuMLAtA}u7H'H81H5 LH MAf.LH5uMLAxA}u7HF'H81H5 LH MA{f.LH5uML;AtA}u7H&H81H58 LH OMAf.LH5B#uMLAxA}u7H&H81H5LH MAf.LH5uML{AA}u7H&&H81H5xLH MA[f.LH5cLuJLA;u4H%H8H5+LH UMf.DLH5CL-uFLA;u0Ha%H8H5LH Mf.LH5u=LUA;u'H%H8H5nLH M@fLH5Su=LA;u'H$H8H5LH oMfLH5gu=LA;u'Hh$H8H5LH +MfLH5"u=LeA;u'H$H8H5~LH MPfLH5cu=LA;u'H#H8H5.LH MfLH5u=LA;u'Hx#H8H5LH [MfLH5Yu=LuA;u'H(#H8H5LH M`fLH5su=L%A;u'H"H8H5>LH MfLH5#u=LA;u'H"H8H5LH MfLH5u=LA;u'H8"H8H5LH KMpfLH5Gu=L5A;u'H!H8H5NLH M fLH53u=LA;u'H!H8H5LH MfLH5u=LA;u'HH!H8H5LH MfLH5tu=LEA ;u'H H8H5^LH 8M0fLH5+Cu=LA(;u'H H8H5LH MfLH5u=LA0;u'HX H8H5LH MfLH5u=LUA8;u'H H8H5nLH ]M@fLH5WSu=LA@;u'HH8H5LH MfLH5u=LAH;u'HhH8H5LH MfLH5u=LeAP;u'HH8H5~LH MPfLH5cu=LAX;u'HH8H5.LH RMfLH5Ku=LA`;u'HxH8H5LH MfLH5u=LuAh;u'H(H8H5LH M`fLH5su=L%Ap;u'HH8H5>LH MfLH5v#u=LAx;u'HH8H5LH :MfLH5+u=LA;u'H8H8H5LH MpfLH5u=L5A;u'HH8H5NLH M fLH53u=LA;u'HH8H5LH _MfLH5Uu=LA;u'HHH8H5LH MfLH5u=LEA;u'HH8H5^LH M0fLH5Cu=L A;u'HH8H5LH M fLH5 u=L A;u'HXH8H5LH IM fLH5A u=LU A;u'HH8H5nLH M@ fLH5S u=L A;u'HH8H5LH M fLH5 u=L A;u'HhH8H5LH M fLH5y u=Le A;u'HH8H5~LH =MP fLH53c u=L A;u'HH8H5.LH M f1HhH5LL \HuHH;EuHx[A\A]A^A_] DUHAWAVSPHIIHH H8u+H'H8H5l1LLIH[A^A_]Y H[A^A_]UHAWAVATSHIIIH AHu8u)HH8H51LLM[A\A^A_] [A\A^A_]f.@UHAWAVATSHIIIH H8u)HRH8H5LLM[A\A^A_] [A\A^A_]ÐUHAWAVSPILupaytH5y1L> AaytH5p1L ATaytH5a1L IH5_H tH5P1LH Af. u{H59L AdaytH5-1L IH5H tH51LHR IH5Hm tH51LH A0f.P u{H5LApaytH51LAlaytH51LIH5HtH51LHAXf. u{H5L`A`f. u{H5L:Ahf.k u{H5}LAtaytH5t1LAxaytH5e1LAf. u{@AH5HLAf.u{H58LAf.u{H5(LYAf.u{H5L3A\aytH51LAaytH5 1LA8f.$u{H5LH55LtH51LLAhaytH51LALaytH51LaAPaytH51LAAf.ru{H5LAHf.Lu{H5LAf.&u{H5LAaytH51LAXaytH5u1LAf.u{H5cLiAf.u{H5ZLCAf.tu{H5PLAf.Nu{H5DLIH5X HtH5.1LHI8H5% HtH5 1LHI H5 HtH51LH^I(H5 HytH51LH+APf.\u{H5LA@f.6u{H5LA8f.u{H5LA f.u{H5LA(f.u{H5pLmAf.u{H5[LGAf.xu{H5FL!Af.Ru{H56LAf.,u{H5*LAf.u{H5LAf.u{H5LAf.u{H5 LcApf.u{H5 L=Axf.nu{H5 LAf.Hu{H5 LAf."u{H5 LAf.u{H5 LAf.u{H5 LAf.u{H5 LYAf.u{H5 L3Af.du{H5 L Af.>u{H5 LAf.u{H5x LIH5"HtH5g 1LHI0H5HtH5R 1LH[Af.u{H5D L5H[A^A_]% % % % % % % % % % % % % % % % % LU AS%E hhh,h8hDhPh^hkhzhhhxhnhdhZhPhF/?@ayayayayt$it$it$i ALOS_fbd2ss FBD.PRM SW4.PRM ashift ntot a_stretch_a FBD.PRM PRM file for input image in fine beam dual polarization (FBD 14 MHz) (input) SW4.PRM PRM file with appropriate lines zeroed to match a WB1_SW4 file ashift azimuth shift needed to align the first row of the FBD to the SW4 ntot total number of rows between bursts in the SW4 = num_valid_az/6 a_stretch_a either the parameter from matching or (SW4_PRF - FBD_PRF)/FBD_PRF EXAMPLE: ALOS_fbd2ss FBD.PRM SW4.PRM -1046 1684 0.010972 rCan't open ashift, nburst, ntot %d %d %d w%s.rawSorry, couldn't allocate memory for input indata. %d %d %d %d %f %f can't open prfile %s %s %s = %s input_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdatenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangePRFI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startalpha_startbaseline_endalpha_endSLC_scale %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) num_valid_az = %d nrows = %d first_line = %d XXXXXXXXdeskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate = %lf input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d PRF = %lf pulse_dur = %e near_range = %lf num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s date = %.6s orbdir = %.1s lookdir = %.1s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lf I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %12.8lf fddd1 = %lf sub_int_r = %f sub_int_a = %f B_parallel = %f B_perpendicular = %f baseline_start = %f alpha_start = %f baseline_end = %f alpha_end = %f SLC_file = %s dtype = %s SLC_scale = %f ((aX@@@EB@ (p!!" BBBBBBBC CC C*C4C>CHCRC\CUC" `AQ@___stack_chk_guardQr@___stderrp@dyld_stub_binderr @___stack_chk_failr(@___strcat_chkr0@_atofr8@_atoir@@_exitrH@_fcloserP@_fopenrX@_fprintfr`@_freadrh@_fscanfrp@_fwriterx@_mallocr@_sscanfr@_strcmpr@_strcpyr@_strlenr@_strncmp__mh_execute_headersmainis_big_endian_dcross3_get_null_sio_structpUSAGEALOS_formatSAR_modeforcequrtbiasverboseettablelc_factwap*+6_6ieebugopp66sintdoubleecondsio_structtring78;mnout_sio_structrefix_offpġ_sloped_slopeȡСءad_poliet_flagܡbiasoi*p 0`1`pp P P P 4`= PD0I PO P\ Pj7v 76 P P8 P P P P@( P2 Q8 Q? QHZmx!"#$%&'()*+,-./01@ !"#$%&'()*+,-./0 _ALOS_format_SAR_mode_USAGE__mh_execute_header_cross3__debug_die_dopp_force_slope_forced_slope_get_double_get_int_get_seconds_get_sio_struct_get_string_is_big_endian__is_big_endian___main_null_sio_struct_prefix_off_put_sio_struct_quad_pol_quiet_flag_rbias_roi_settable_slc_fact_swap_tbias_verbose___stack_chk_fail___stack_chk_guard___stderrp___strcat_chk_atof_atoi_exit_fclose_fopen_fprintf_fread_fscanf_fwrite_malloc_sscanf_strcmp_strcpy_strlen_strncmpdyld_stub_binderGMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2fbs_SLC/Makefile000644 015705 000000 00000000514 13505462014 023772 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_fbd2fbs_SLC CSRCS = ALOS_fbd2fbs_SLC.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2fbs_SLC/ALOS_fbd2fbs_SLC.c000644 015705 000000 00000014455 13505462014 025336 0ustar00sandwellwheel000000 000000 /*************************************************************************** * ALOS_fbd2fbs_SLC reads a FBD-HH SLC file processed with ** ALOS_pre_proc_SLC and upsamples it to FBS-HH bandwidth. The algorithm * * takes the fft each complex range line and zero-pads in the frequency * * domain. This is possible because the FBS bandwidth is exactly two times * * the FBD. Note that the interpolated data may exceed the original data * * span of 0-31 so the numbers are rescaled to lie between 0 and 127 which * * still only one byte of storage. * * The code uses cfft1d which seems to be the standard interface in the * * InSAR community. * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Rob Mellors * * (Scripps Institution of Oceanography) * * Date : 08/04/2007 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE 10/08/2013 * * Name: Xiaohua Xu ** Modification: Modified form ALOS_fbd2fbs, changing the input file to * * SLC. clip127 is switched to clip signed short int. * * * ***************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" #define clip(A) (((A) > 32767) ? 32767 : (((A) < -32768) ? -32768 : A)) char *USAGE = "ALOS_FBD2FBS_SLC FBD.PRM FBS.PRM \n" " FBD.PRM PRM file for input image in fine beam dual " "polarization (FBD 14 MHz) (input) \n" " FBS.PRM PRM file for outout image in fine beam single " "polarization (FBS 28 MHz) (output) \n"; int main(int argc, char **argv) { FILE *prmfile, *datafile, *prmout, *dataout; short int *indata, *outdata, *extr; fcomplex *cin, *cout; float rtest, itest; int j, k, nffti, nffto, N = 128; int ibufsize, obufsize, fbdsamp, fbssamp; struct PRM r; if (argc < 3) die(USAGE, ""); /* flags defined in global_flags.h */ verbose = 0; debug = 0; /* fill the struct with default parameters */ null_sio_struct(&r); /* open input PRM file and read the parameters */ if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); get_sio_struct(prmfile, &r); /* open input raw data file */ if ((datafile = fopen(r.input_file, "rb")) == NULL) die("Can't open ", r.input_file); /* open output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); /* assemble the output filename and open for writing */ sscanf(argv[2], "%s", r.input_file); r.input_file[strlen(argv[2]) - 4] = 0; strcat(r.input_file, ".SLC"); /* open output file for single look complex image */ if ((dataout = fopen(r.input_file, "wb")) == NULL) die("Can't open ", r.input_file); /* compute the sizes for the input and output buffers and allocate the memory */ ibufsize = r.num_rng_bins * 2; if ((indata = (short int *)malloc(ibufsize * sizeof(short int))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } fbdsamp = r.num_rng_bins; fbssamp = 2 * fbdsamp; obufsize = 2 * fbssamp; if ((outdata = (short int *)malloc(obufsize * sizeof(short int))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for output outdata.\n"); exit(-1); } if ((extr = (short int *)malloc(N * sizeof(short int))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for supplimental outdata.\n"); exit(-1); } for (k = 0; k < N; k++) { extr[k] = (short int)(0); } /* find best length of fft (use power of two) for both input and output */ nffti = find_fft_length(fbdsamp); nffto = find_fft_length(fbssamp); if (debug) fprintf(stderr, " nffti %d nffto %d \n", nffti, nffto); /* allocate the memory for the complex arrays */ if ((cin = (fcomplex *)malloc(nffti * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbd \n"); exit(-1); } if ((cout = (fcomplex *)malloc(nffto * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbs \n"); exit(-1); } /* read the input and output SLC files */ for (k = 0; k < r.num_lines; k++) { fread((void *)indata, sizeof(short int), ibufsize, datafile); /* fill the complex array with complex indata */ for (j = 0; j < nffti; j++) { if ((j < fbdsamp) && (((short int)indata[2 * j]) != NULL_DATA) && (((short int)indata[2 * j + 1]) != NULL_DATA)) { cin[j].r = (float)(indata[2 * j]); cin[j].i = (float)(indata[2 * j + 1]); } else { cin[j].r = 0.0; cin[j].i = 0.0; } } /* interpolate from fbd to fbs */ rng_expand(cin, nffti, cout, nffto); /* convert the complex back to bytes */ for (j = 0; j < obufsize / 2; j++) { rtest = rintf(cout[j].r); itest = rintf(cout[j].i); /* sometimes the range can exceed -32768~32767 so clip the numbers to be in the correct range */ outdata[2 * j] = (short int)clip(rtest); outdata[2 * j + 1] = (short int)clip(itest); } fwrite((void *)outdata, sizeof(short int), obufsize, dataout); fwrite((void *)extr, sizeof(short int), N, dataout); } /* compute the changes to the output PRM-file */ r.xmi = 0; r.xmq = 0; r.chirp_ext = r.chirp_ext * 2; r.good_bytes = 4 * fbssamp; r.bytes_per_line = 4 * fbssamp + N; r.num_rng_bins = fbssamp + N / 2; r.fs = r.fs * 2.; if (debug) fprintf(stderr, " %d %d %d %d %f %f \n", r.chirp_ext, r.good_bytes, r.bytes_per_line, r.num_rng_bins, r.fs, r.chirp_slope); /* write the output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("can't open prfile", argv[2]); put_sio_struct(r, prmout); free(indata); free(outdata); free(cin); free(cout); fclose(prmfile); fclose(prmout); fclose(datafile); fclose(dataout); } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2fbs_SLC/ALOS_fbd2fbs_SLC000755 015705 000000 00000205550 13507242210 025112 0ustar00sandwellwheel000000 000000 P H__PAGEZERO(__TEXT__text__TEXT@B@__stubs__TEXTx__stub_helper__TEXT__const__TEXT__cstring__TEXT __unwind_info__TEXTll(__DATA__nl_symbol_ptr__DATA__got__DATA__la_symbol_ptr__DATA  __data__DATA__bss__DATA __common__DATA\H__LINKEDITh "0HP8`>x P''@, /usr/lib/dyld*I0ޚ9LH &MʳfLH5u=L菳A8;u'HH8H5LH ݹMzfLH5׹蓳u=L?A@;u'HH8H5LH M*fLH5Cu=LAH;u'HXH8H5NLH WMڲfLH5Mu=L蟲AP;u'HH8H5LH M芲fLH5裲u=LOAX;u'HH8H5LH ҸM:fLH5˸Su=LA`;u'HhH8H5^LH MfLH5u=L诱Ah;u'HH8H5LH KM蚱fLH5B賱u=L_Ap;u'HȿH8H5LH MJfLH5cu=LAx;u'HxH8H5nLH MfLH5u=L述A;u'H(H8H5LH oM誰fLH5aðu=LoA;u'HؾH8H5ηLH %MZfLH5su=LA;u'HH8H5~LH ߶M fLH5ն#u=LϯA;u'H8H8H5.LH M躯fLH5ӯu=LA;u'HH8H5޶LH SMjfLH5I胯u=L/A;u'HH8H5LH MfLH53u=L߮A;u'HHH8H5>LH ɵMʮfLH5u=L菮A;u'HH8H5LH MzfLH5蓮u=L?A;u'HH8H5LH DM*fLH5<Cu=LA;u'HXH8H5NLH MڭfLH5u=L蟭A;u'HH8H5LH M芭fLH5裭u=LOA;u'HH8H5LH wM:f1HhH5iLL/\HeHH;EuHx[A\A]A^A_]ìDUHAWAVSPHIIHHH8u+HH8H51LLIH[A^A_]铬H[A^A_]UHAWAVATSHIIIHQAH8u)HH8H51LLM[A\A^A_]/[A\A^A_]f.@UHAWAVATSHIIIH۫H8u)HBH8H5:LLM[A\A^A_][A\A^A_]ÐUHAWAVSPILupaytH51LxAaytH51LXATaytH51L8IH5߲HYtH5в1LHAf.|u{H5LߪAdaytH51L迪IH5fHtH51LH茪IH53H譪tH5s1LHYA0f.Ыu{H5aL3ApaytH5T1LAlaytH5F1LIH5HtH5+1LHAXf.7u{H5L蚩A`f.u{H5 LtAhf.u{H5LNAtaytH51L.AxaytH51LAf.u{@AH5ȱLߨAf.Vu{H5L蹨Af.0u{H5L蓨Af. u{H5LmA\aytH51LMAaytH51L-A8f.u{H5zLH5L/tH5j1LLۧAhaytH5Z1L軧ALaytH5O1L蛧APaytH5F1L{Af.u{H5;LUAHf.̨u{H5#L/Af.u{H5L AaytH51LAXaytH51LɦAf.@u{H5L裦Af.u{H5ڰL}Af.u{H5аLWAf.Χu{H5İL1IH5حHRtH51LHI8H5HtH51LH˥I H5rHtH5i1LH蘥I(H5?H蹥tH5H1LHeAPf.ܦu{H52L?A@f.u{H5%LA8f.u{H5LA f.ju{H5LͤA(f.Du{H5L觤Af.u{H5ۯL聤Af.u{H5ƯL[Af.ҥu{H5L5Af.u{H5LAf.u{H5LAf.`u{H5LãAf.:u{H5yL蝣Apf.u{H5jLwAxf.u{H5RLQAf.Ȥu{H5?L+Af.u{H5)LAf.|u{H5"LߢAf.Vu{H5L蹢Af.0u{H5L蓢Af. u{H5 LmAf.u{H5LGAf.u{H5L!Af.u{H5LIH5HtH51LHȡI0H5oHtH5Ү1LH蕡Af. u{H5ĮLoH[A^A_]ÐUHAWAVATSHAIAHuԉMEH}HUHEIcHHAHs 1Mu\tL)1AADADADAD AD(AD0AD8HH9uMtI1DHI9uA|pDDIHHcɉHIvf.@CXFXDXDXHHHuEH}HULdH[A\A^A_]ÐUHSPÍ9|H8tHH8H51ʉ觟H[]ÐUHAWAVSPII 9uAttr@t H=g^HHBDCYBLAYAYL=XC III9|ILUIIL;MH`[H]HËuuuHuHPHuHHHuHpH;0$!0HcUMcDHELMI IO$)HH HMNl HUH HUJT IE1L8H@LPLEx5HpIcHUILmMLeLeALHDELmLuLx~}LcHU1Lef.fALHAYC AYAY 3\ADAAY3C AYAY XA 7IHHuIHHHuIIL;MLUAHHUAL8H@H`LPLLeLmHUHpHMMLEH;0GL8H@;f.H(HHc<ˋAC HEAD}HIEHEMLEGHhH]Hp%HcHALcEIc̉AIJ4IH]f.X3AE\3ADHcHEXD3AE\D3ADDILHu@LcGDHEH0\9LmL`LL"HEHcHMHcHcH}AȉHhHAHHHHEHHHY]HUHHHEHxHufDE~~HcUHULeLmL]E1}~IMcILLMLufC!CXC.C!C\CIIHuIIIII9uHHxH)UHUMHEH;]L`SE*HELcD}AEAH0HAH`DEADAJ4M)LUE1f.}~v}u1MuFgf.LD1H]@H<9A<Hc(XAl=\ >AY(XL9\Ad8AYA(X 9D\E8HHZf.AsL}+Iލ 4@HHcHcHcAMDMLMTM\HHHLf.HHA$?HHE ?HHA,?Aq Y$(\XDYYE(D\DX(\XE(D\DX!XAXAdaXAXAd(AYDQXA(AY\(AYAXA(AY\AY\EYDXAYD\EYEX(ِD(YA(ɐD(YX(AYA(AYXAYEYA\YAYEYA\(\ADXYYYAT(XAD(AXADA(\ADAXALD\E\\AdHH(H HHHI9MHcHMDIALcIcIcAHuJ|H}HII\IIHH >H HuI9tf.@AHH9|H[A\A]A^A_]f.fUHu]Í?DHH IcLA]UHAWAVAUATSHXH}Ѓ HUЍ HHEHcHuL4A1E1ۉLuHw,f.EHEHwHqD$ fDAHHEMcAK\K| E1Ef.@MωșAA9uMOGdAMIEAG4INAHs6X)HcEHUHcHcTHuHXHHHHHMHH]HMHHL$H}HH}M,}LLML]E1fD}|aA@CDB\CDCDBXBDCBXDCCB\DBII9|IIIHHI9uHHuHuIHuIIH;MCML`HEaAɃvJ I9eK H9X1HHLLHtH@ EMcA H$MH}ȉDMLL0"M=353D 3D2D=$3D53D-2D%2D2D(3H}IAL} L8LhL`LX1Hxf.HHXH`LhL8HHpHxHIHEHHHIHEIML,IMLTIMHDIIHEAfDHEILBDA$BT(I A YYYHEILYA4B\BL(XYI A,\YYYX\(X(KL!XA4XO\)C4HHHK >ILL9MuHxHuMMMIH`HUt LMLH@B B IHuHHMHMHMHMHMHMH;pHE4;MihLMIcDEIcDH`hHpHHHUHHuH4HuHH}DAEEHxHuf.H}}H`HcuLLEL}LUE1@}Lm|\ACtHcCTCYCYXA\CTCCYY\CII9|IIIMI9uH}HNjuuuHuHuHuHuHxHuH;p!hLMIcMLcHMhH`LLH HHPHH}HH J|H}HuH<HuJtHuILxDžpfHUALcpLeL}L]Af}Lu~nHuE1Mf.fLHBTYB\CYXABTCYB\Y\C IIHuIIHIIIL;maHUHLMDpHuHPHuHxHuHuH;`u94]HhTHcEHcHcLH}HcAHLEI|H}H<HtHuHHH ItHuHMHHMLlAf.}uLLeL}LUAf.@~bLE1fDCTCXTCTCC\BTCCXCCTC\TBIHuIIIIHI9|IHMHMHMHMHMIL;u-3Hh HcELcHcLHUHcHLIHuH HMJ HMHHMH L NN,Af.}LMML]E1fD}|_DATAXTTAA\ATAAXATA\TAHH9|IIIIHI9uIHuHuIHuIIL;uELhADZDZLcuMHcHcLHUIcAIHMHILMcFA A $IIAIuILEMHMHMDmL)L;]M|}LUuHx[A\A]A^A_]94}tLhIcLMMcHcHcLHxHUIIHUJLXLHKO?qxs?y??@?׳??55?ALOS_FBD2FBS_SLC FBD.PRM FBS.PRM FBD.PRM PRM file for input image in fine beam dual polarization (FBD 14 MHz) (input) FBS.PRM PRM file for outout image in fine beam single polarization (FBS 28 MHz) (output) rCan't open rbw%s.SLCwbSorry, couldn't allocate memory for input indata. Sorry, couldn't allocate memory for output outdata. Sorry, couldn't allocate memory for supplimental outdata. nffti %d nffto %d Sorry, couldn't allocate memory for fbd Sorry, couldn't allocate memory for fbs %d %d %d %d %f %f can't open prfile %s %s %s = %s input_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdatenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangePRFI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startalpha_startbaseline_endalpha_endSLC_scale %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) num_valid_az = %d nrows = %d first_line = %d XXXXXXXXdeskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate = %lf input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d PRF = %lf pulse_dur = %e near_range = %lf num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s date = %.6s orbdir = %.1s lookdir = %.1s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lf I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %12.8lf fddd1 = %lf sub_int_r = %f sub_int_a = %f B_parallel = %f B_perpendicular = %f baseline_start = %f alpha_start = %f baseline_end = %f alpha_end = %f SLC_file = %s dtype = %s SLC_scale = %f find_fft_length: ...data length n %d nfft %d Sorry, can't allocate mem,,Xa @DDD H ""# .//p11^ _Э  *4>HR\fpz" `@___stack_chk_guardQr@___stderrp@dyld_stub_binderr @___bzeror(@___sincos_stretr0@___stack_chk_failr8@___strcat_chkr@@_atofrH@_atoirP@_exitrX@_fcloser`@_fopenrh@_fprintfrp@_freadrx@_freer@_fscanfr@_fwriter@_mallocr@_sscanfr@_strcmpr@_strcpyr@_strlenr@_strncmp__mh_execute_headermainis_big_endian_dcget_null_sio_structprfUSAGEALOS_formatSAR_modequstbiasverbose$2_2ieebugopp2ross3_fft2sintdoubleecondsio_structtring347ijkut_sio_structrefix_offlng_expandfftbiasoiind_fft_lengthorceЃ1d_fbibfi1_sloped_slopead_poliet_flaglc_factwap$ 0`1`ppP0Z0h.0qܨ    4 B=0qDCK`qRp[ b@g mA~  5054 0@` 6+ 5 A HOtW^@e`@q v   ( 0$,4<DLT\e'(),-./0123456789:;<=@*+'(),-./0123456789:;< _ALOS_format_SAR_mode_USAGE__mh_execute_header_cfft1d__cfftb_cfftf_cffti_cross3__debug_die_dopp_find_fft_length_force_slope_forced_slope_get_double_get_int_get_seconds_get_sio_struct_get_string_is_big_endian__is_big_endian___main_null_sio_struct_prefix_off_put_sio_struct_quad_pol_quiet_flag_rbias_rfftb_rfftb1_rfftf_rffti_rng_expand_roi_slc_fact_swap_tbias_verbose___bzero___sincos_stret___stack_chk_fail___stack_chk_guard___stderrp___strcat_chk_atof_atoi_exit_fclose_fopen_fprintf_fread_free_fscanf_fwrite_malloc_sscanf_strcmp_strcpy_strlen_strncmpdyld_stub_binderGMTSAR_V5.7/preproc/ALOS_preproc/lib_src/write_ALOS_prm.c000644 015705 000000 00000007640 13505462014 024121 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /***************************************************************************/ void write_ALOS_prm(FILE *prmfile, char *filename, struct PRM *prm) { fprintf(stderr, ".... writing PRM file %s\n", filename); /* set by set_ALOS_defaults */ fprintf(prmfile, "num_valid_az = %d \n", prm->num_valid_az); fprintf(prmfile, "nrows = %d \n", prm->nrows); fprintf(prmfile, "first_line = %d \n", prm->first_line); fprintf(prmfile, "deskew = %s \n", prm->deskew); fprintf(prmfile, "caltone = %lf \n", prm->caltone); fprintf(prmfile, "st_rng_bin = %d \n", prm->st_rng_bin); fprintf(prmfile, "Flip_iq = %s \n", prm->iqflip); fprintf(prmfile, "offset_video = %s \n", prm->offset_video); fprintf(prmfile, "az_res = %lf \n", prm->az_res); fprintf(prmfile, "nlooks = %d \n", prm->nlooks); fprintf(prmfile, "chirp_ext = %d \n", prm->chirp_ext); fprintf(prmfile, "scnd_rng_mig = %s \n", prm->srm); fprintf(prmfile, "rng_spec_wgt = %lf \n", prm->rhww); fprintf(prmfile, "rm_rng_band = %lf \n", prm->pctbw); fprintf(prmfile, "rm_az_band = %lf \n", prm->pctbwaz); fprintf(prmfile, "rshift = %d \n", prm->rshift); fprintf(prmfile, "ashift = %d \n", prm->ashift); fprintf(prmfile, "stretch_r = %lf \n", prm->stretch_r); fprintf(prmfile, "stretch_a = %lf \n", prm->stretch_a); fprintf(prmfile, "a_stretch_r = %lf \n", prm->a_stretch_r); fprintf(prmfile, "a_stretch_a = %lf \n", prm->a_stretch_a); fprintf(prmfile, "first_sample = %d \n", prm->first_sample); fprintf(prmfile, "SC_identity = %d \n", prm->SC_identity); fprintf(prmfile, "rng_samp_rate = %lf \n", prm->fs); /* from read_ALOS_data */ fprintf(prmfile, "input_file = %s \n", prm->input_file); fprintf(prmfile, "num_rng_bins = %d \n", prm->num_rng_bins); fprintf(prmfile, "bytes_per_line = %d \n", prm->bytes_per_line); fprintf(prmfile, "good_bytes_per_line = %d \n", prm->good_bytes); fprintf(prmfile, "PRF = %lf \n", prm->prf); fprintf(prmfile, "pulse_dur = %e \n", prm->pulsedur); fprintf(prmfile, "near_range = %lf \n", prm->near_range); fprintf(prmfile, "num_lines = %d \n", prm->num_lines); fprintf(prmfile, "num_patches = %d \n", prm->num_patches); fprintf(prmfile, "SC_clock_start = %16.10lf \n", prm->SC_clock_start); fprintf(prmfile, "SC_clock_stop = %16.10lf \n", prm->SC_clock_stop); fprintf(prmfile, "clock_start = %16.12lf \n", prm->clock_start); fprintf(prmfile, "clock_stop = %16.12lf \n", prm->clock_stop); fprintf(prmfile, "led_file = %s \n", prm->led_file); /* from read_ALOS_ldrfile */ fprintf(prmfile, "date = %.6s \n", prm->date); fprintf(prmfile, "orbdir = %.1s \n", prm->orbdir); fprintf(prmfile, "lookdir = %.1s \n", prm->lookdir); fprintf(prmfile, "radar_wavelength = %lg \n", prm->lambda); fprintf(prmfile, "chirp_slope = %lg \n", prm->chirp_slope); fprintf(prmfile, "rng_samp_rate = %lf \n", prm->fs); fprintf(prmfile, "I_mean = %lg \n", prm->xmi); fprintf(prmfile, "Q_mean = %lg \n", prm->xmq); fprintf(prmfile, "SC_vel = %lf \n", prm->vel); fprintf(prmfile, "earth_radius = %lf \n", prm->RE); fprintf(prmfile, "equatorial_radius = %lf \n", prm->ra); fprintf(prmfile, "polar_radius = %lf \n", prm->rc); fprintf(prmfile, "SC_height = %lf \n", prm->ht); fprintf(prmfile, "SC_height_start = %lf \n", prm->ht_start); fprintf(prmfile, "SC_height_end = %lf \n", prm->ht_end); fprintf(prmfile, "fd1 = %lf \n", prm->fd1); fprintf(prmfile, "fdd1 = %lf \n", prm->fdd1); fprintf(prmfile, "fddd1 = %lf \n", prm->fddd1); fclose(prmfile); } /***************************************************************************/ /* difference between variable names (in prm file) and variables in code. changed: offset_video off_vid chirp_ext nextend prm sio.h ---------------------------------- Flip_iq iqflip scnd_rng_mig srm rng_spec_wgt rhww rm_rng_band pctbw rm_az_band pctbwaz rng_samp_rate fs */ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/000755 015705 000000 00000000000 13505462014 023444 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/swap32.c000644 015705 000000 00000001364 13505462014 022407 0ustar00sandwellwheel000000 000000 /************************************************************************ * Creator: David T. Sandwell Scripps Institution of Oceanography * * Date : 09/12/93 Copyright, David T. Sandwell * ************************************************************************/ void swap32(in, out, n) /* Swaps 4 bytes within each 32-bit word of array in. */ char *in; /* Input array */ char *out; /* Output array */ int n; /* # of short integers to swap */ { register char *ip, *op; /* Local register variables */ if (n > 0) { ip = in + 4; op = out; while (n--) { *op++ = *--ip; *op++ = *--ip; *op++ = *--ip; *op++ = *--ip; ip += 8; } } } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/rng_compress.c000644 015705 000000 00000002422 13505462014 023765 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_compress reduces the bandwidth of an array by 2 times by * * low-pass filtering and decimating the wavenumber space * ************************************************************************/ /************************************************************************ * Creator: David T. SandwellScripps Institution of Oceanography) * * Date : 06/21/07 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" void cfft1d_(int *, fcomplex *, int *); void rng_compress(fcomplex *cin, int nffti, fcomplex *cout, int nffto) { int i, dir, n4; n4 = nffti / 4; /* do the forward fft */ dir = -1; cfft1d_(&nffti, cin, &dir); /* then move the input to the output 1 to 1 and 4 to 2 */ for (i = 0; i < n4; i++) { cout[i].r = cin[i].r; cout[i].i = cin[i].i; cout[i + n4].r = cin[i + 3 * n4].r; cout[i + n4].i = cin[i + 3 * n4].i; } /* now inverse fft */ dir = 1; cfft1d_(&nffto, cout, &dir); } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/Makefile000644 015705 000000 00000001276 13505462014 022566 0ustar00sandwellwheel000000 000000 sinclude ../../../config.mk # Makefile for lib_src LIB = libALOS.a INCLUDES = -I../include SRCS = utils.c \ null_sio_struct.c \ get_sio_struct.c \ put_sio_struct.c \ calc_dop.c \ hermite_c.c \ ALOS_ldr_orbit.c \ ALOSE_orbits_utils.c \ interpolate_ALOS_orbit.c \ read_ALOS_sarleader.c \ set_ALOS_defaults.c \ write_ALOS_prm.c \ write_ALOS_LED.c \ write_orb.c \ rng_expand.c \ rng_compress.c \ rng_filter.c \ find_fft_length.c \ siocomplex.c \ polyfit.c \ plh2xyz.c \ xyz2plh.c \ cfft1d.c \ swap32.c \ swap16.c \ fftpack.c OBJS= $(SRCS:.c=.o) $(LIB) : $(OBJS) $(AR) r $(LIB) $? $(RANLIB) $(LIB) all: install install: $(LIB) $(INSTALL) *.a ../lib clean: rm -f *.a *.o GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/null_sio_struct.c000644 015705 000000 00000005651 13505462014 024523 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" void null_sio_struct(struct PRM *p) { /* characters */ strncpy(p->input_file, NULL_CHAR, 8); strncpy(p->SLC_file, NULL_CHAR, 8); strncpy(p->out_amp_file, NULL_CHAR, 8); strncpy(p->out_data_file, NULL_CHAR, 8); strncpy(p->deskew, NULL_CHAR, 8); strncpy(p->iqflip, NULL_CHAR, 8); strncpy(p->offset_video, NULL_CHAR, 8); strncpy(p->srm, NULL_CHAR, 8); strncpy(p->ref_file, NULL_CHAR, 8); strncpy(p->led_file, NULL_CHAR, 8); strncpy(p->orbdir, NULL_CHAR, 8); strncpy(p->lookdir, NULL_CHAR, 8); strncpy(p->date, NULL_CHAR, 8); strncpy(p->SLC_file, NULL_CHAR, 8); strncpy(p->dtype, NULL_CHAR, 8); /* ints */ p->debug_flag = NULL_INT; p->bytes_per_line = NULL_INT; p->good_bytes = NULL_INT; p->first_line = NULL_INT; p->num_patches = NULL_INT; p->first_sample = NULL_INT; p->num_valid_az = NULL_INT; p->st_rng_bin = NULL_INT; p->num_rng_bins = NULL_INT; p->chirp_ext = NULL_INT; p->nlooks = NULL_INT; p->rshift = NULL_INT; p->ashift = NULL_INT; p->fdc_ystrt = NULL_INT; p->fdc_strt = NULL_INT; p->rec_start = NULL_INT; p->rec_stop = NULL_INT; p->SC_identity = NULL_INT; p->ref_identity = NULL_INT; p->nrows = NULL_INT; p->num_lines = NULL_INT; p->SLC_format = NULL_INT; /* doubles */ p->SC_clock_start = NULL_DOUBLE; p->SC_clock_stop = NULL_DOUBLE; p->clock_start = NULL_DOUBLE; p->clock_stop = NULL_DOUBLE; p->icu_start = NULL_DOUBLE; p->clock_start = NULL_DOUBLE; p->clock_stop = NULL_DOUBLE; p->caltone = NULL_DOUBLE; p->RE = NULL_DOUBLE; p->rc = NULL_DOUBLE; p->ra = NULL_DOUBLE; p->vel = NULL_DOUBLE; p->ht = NULL_DOUBLE; p->near_range = NULL_DOUBLE; p->far_range = NULL_DOUBLE; p->prf = NULL_DOUBLE; p->xmi = NULL_DOUBLE; p->xmq = NULL_DOUBLE; p->az_res = NULL_DOUBLE; p->fs = NULL_DOUBLE; p->chirp_slope = NULL_DOUBLE; p->pulsedur = NULL_DOUBLE; p->lambda = NULL_DOUBLE; p->rhww = NULL_DOUBLE; p->pctbw = NULL_DOUBLE; p->pctbwaz = NULL_DOUBLE; p->fd1 = NULL_DOUBLE; p->fdd1 = NULL_DOUBLE; p->fddd1 = NULL_DOUBLE; p->delr = NULL_DOUBLE; p->SLC_scale = NULL_DOUBLE; p->sub_int_r = NULL_DOUBLE; p->sub_int_a = NULL_DOUBLE; p->sub_double = NULL_DOUBLE; p->stretch_r = NULL_DOUBLE; p->stretch_a = NULL_DOUBLE; p->a_stretch_r = NULL_DOUBLE; p->a_stretch_a = NULL_DOUBLE; p->baseline_start = NULL_DOUBLE; p->baseline_end = NULL_DOUBLE; p->alpha_start = NULL_DOUBLE; p->alpha_end = NULL_DOUBLE; p->bpara = NULL_DOUBLE; p->bperp = NULL_DOUBLE; }; GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/write_orb.c000755 015705 000000 00000001404 13505462014 023262 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" #include #include void write_orb(FILE *ldrfile, struct ALOS_ORB *orb) { int n; int nd, iy, id; double isec, idsec, pt, px, py, pz, vx, vy, vz; /* write the header information */ nd = orb->nd; iy = orb->iy; id = orb->id; isec = orb->sec; idsec = orb->dsec; fprintf(ldrfile, "%d %d %d %lf %lf \n", nd, iy, id, isec, idsec); /* write the state vectors */ for (n = 0; n < nd; n++) { pt = orb->points[n].pt; px = orb->points[n].px; py = orb->points[n].py; pz = orb->points[n].pz; vx = orb->points[n].vx; vy = orb->points[n].vy; vz = orb->points[n].vz; fprintf(ldrfile, "%d %d %lf %lf %lf %lf %lf %lf %lf \n", iy, id, pt, px, py, pz, vx, vy, vz); } } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/hermite_c.c000644 015705 000000 00000005560 13505462014 023231 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Hermite orbit interpolator based on fortran code of Werner Gunter * * 13th International Workshop on Laser Ranging, 2002, Washington, DC * *******************************************************************************/ /******************************************************************************** * Creator: David T. Sandwell and Rob Mellors * (San Diego State University, *Scripps Institution of Oceanography) * Date : 06/07/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 10/03/2007 - converted from FORTRAN to C * * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" void hermite_c(double *x, double *y, double *z, int nmax, int nval, double xp, double *yp, int *ir) { /* interpolation by a polynomial using nval out of nmax given data points input: x(i) - arguments of given values (i=1,...,nmax) y(i) - functional values y=f(x) z(i) - derivatives z=f'(x) nmax - number of given points in list nval - number of points to use for interpolation xp - interpolation argument output: yp - interpolated value at xp ir - return code 0 = ok 1 = interpolation not in center interval 2 = argument out of range ***** calls no other routines */ int n, i, j, i0; double sj, hj, f0, f1; /* check to see if interpolation point is inside data range */ *yp = 0.0; n = nval - 1; *ir = 0; /* reduced index by 1 */ if (xp < x[0] || xp > x[nmax - 1]) { fprintf(stderr, "interpolation point outside of data constraints\n"); *ir = 2; exit(1); } /* look for given value immediately preceeding interpolation argument */ for (i = 0; i < nmax; i++) { if (x[i] >= xp) break; } /* check to see if interpolation point is centered in data range */ i0 = i - (n + 1) / 2; if (i0 <= 0) { // fprintf(stderr,"hermite: interpolation not in center interval\n"); i0 = 0; *ir = 0; } /* reduced index by 1 */ if (i0 + n > nmax) { fprintf(stderr, "hermite: interpolation not in center interval\n"); i0 = nmax - n - 1; *ir = 0; } /* do Hermite interpolation */ for (i = 0; i <= n; i++) { sj = 0.0; hj = 1.0; for (j = 0; j <= n; j++) { if (j != i) { hj = hj * (xp - x[j + i0]) / (x[i + i0] - x[j + i0]); sj = sj + 1.0 / (x[i + i0] - x[j + i0]); } } f0 = 1.0 - 2.0 * (xp - x[i + i0]) * sj; f1 = xp - x[i + i0]; *yp = *yp + (y[i + i0] * f0 + z[i + i0] * f1) * hj * hj; if (isnan(*yp) != 0) { fprintf(stderr, "nan!\n"); exit(1); } } /* done */ } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/calc_dop.c000644 015705 000000 00000006337 13505462014 023041 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Calculate Doppler centroid using the method of Masden 1989 * * Doppler variations with range are small for ALOS and not calculated * *******************************************************************************/ /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" void calc_dop(struct PRM *prm) { unsigned char *indata; int i, j; long n; float *xr, *ac, *sg; double sumd; fcomplex *ai, *bi, *ab; fcomplex ctmp; FILE *fin; fprintf(stderr, ".... calculating doppler for %s\n", prm->input_file); fin = fopen(prm->input_file, "r"); if (fin == NULL) die("can't open", prm->input_file); /* allocate memory */ indata = (unsigned char *)malloc(prm->bytes_per_line * sizeof(unsigned char)); n = prm->good_bytes / 2 - prm->first_sample; xr = (float *)malloc(n * sizeof(float)); ac = (float *)malloc(n * sizeof(float)); sg = (float *)malloc(n * sizeof(float)); ai = (fcomplex *)malloc(n * sizeof(fcomplex)); bi = (fcomplex *)malloc(n * sizeof(fcomplex)); ab = (fcomplex *)malloc(2 * n * sizeof(fcomplex)); /* read a line of data from fin (input file, chars) to ai (complex floats) */ fread(indata, sizeof(unsigned char), prm->bytes_per_line, fin); for (i = 0; i < n; i++) read_data(ai, indata, i, prm); /* read remaining lines and set ai = bi */ /* inefficient; could put loops inside each other */ for (i = prm->first_line; i < prm->num_lines - 1; i++) { if (i / 2000 == i / 2000.0) fprintf(stderr, " Working on line %d \n", i); fread(indata, sizeof(unsigned char), prm->bytes_per_line, fin); for (j = 0; j < n; j++) { read_data(bi, indata, j, prm); ctmp = Cmul(Conjg(ai[j]), bi[j]); ab[j].r = ab[j].r + ctmp.r; ab[j].i = ab[j].i + ctmp.i; ai[j].r = bi[j].r; ai[j].i = bi[j].i; } } /* compute the Doppler as a function of range */ sumd = 0.0; for (j = 0; j < n; j++) { ac[j] = atan2f(ab[j].i, ab[j].r) / (2.0 * M_PI); sumd = sumd + ac[j]; } /* now either output the average Doppler or a linear trend fit */ prm->fd1 = (sumd / (1.0 * n)) * prm->prf; prm->fdd1 = 0.0 * prm->prf; prm->fddd1 = 0.0 * prm->prf; fclose(fin); free(xr); free(ac); free(sg); free(ai); free(bi); free(ab); } /*---------------------------------------------------*/ void read_data(fcomplex *data, unsigned char *indata, int i, struct PRM *prm) { int ii; ii = i + prm->first_sample; if ((((int)indata[2 * ii]) != NULL_DATA) && (((int)indata[2 * ii + 1]) != NULL_DATA)) { data[i].r = ((float)indata[2 * ii]) - prm->xmi; data[i].i = ((float)indata[2 * ii + 1]) - prm->xmq; } else { data[i].r = 0.0; data[i].i = 0.0; } } /*---------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/rng_expand.c000644 015705 000000 00000002722 13505462014 023414 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_expand interpolates a complex array to twice the length by * * zero padding in the wavenumber space * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography) * * Date : 06/21/07 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" void cfft1d_(int *, fcomplex *, int *); void rng_expand(cin, nffti, cout, nffto) int nffti, nffto; fcomplex *cin, *cout; { int i, dir, n2; n2 = nffti / 2; /* do the forward fft */ dir = -1; cfft1d_(&nffti, cin, &dir); /* first zero the output array */ for (i = 0; i < nffto; i++) { cout[i].r = 0.; cout[i].r = 0.; } /* then move the input to the output 1 to 1 and 2 to 4 multiply by 2 because all the zeros were added */ for (i = 0; i < n2; i++) { cout[i].r = 2. * cin[i].r; cout[i].i = 2. * cin[i].i; cout[i + 3 * n2].r = 2. * cin[i + n2].r; cout[i + 3 * n2].i = 2. * cin[i + n2].i; } /* now inverse fft */ dir = 1; cfft1d_(&nffto, cout, &dir); } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/Makefile_orig000644 015705 000000 00000001327 13505462014 023603 0ustar00sandwellwheel000000 000000 # Makefile for lib src CC = gcc LIB = libALOS.a INC = ../include #CC = gcc #CFLAGS = -O3 -xN -no-proc-div -ipo -static -Wall -I$(INC) #CFLAGS = -O3 -Wall -I$(INC) CFLAGS = -Wall -I$(INC) SRCS = utils.c \ null_sio_struct.c \ get_sio_struct.c \ put_sio_struct.c \ calc_dop.c \ hermite_c.c \ ALOS_ldr_orbit.c \ ALOSE_orbits_utils.c \ interpolate_ALOS_orbit.c \ read_ALOS_sarleader.c \ set_ALOS_defaults.c \ write_ALOS_prm.c \ rng_expand.c \ rng_compress.c \ find_fft_length.c \ siocomplex.c \ polyfit.c \ plh2xyz.c \ xyz2plh.c \ cfft1d.c \ fftpack.c OBJS= $(SRCS:.c=.o) $(LIB) : $(OBJS) ar r $(LIB) $? ranlib $(LIB) install: mv *.a ../lib/$(OS) ranlib ../lib/$(OS)/$(LIB) clean: \rm -f *.a *.o GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/find_fft_length.c000644 015705 000000 00000000753 13505462014 024411 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" #include #include #include int find_fft_length(int n); /*-----------------------------------------------------------------------*/ int find_fft_length(int n) { int nfft; nfft = 2; while (nfft < n) nfft = 2 * nfft; if (debug) fprintf(stderr, "find_fft_length:\n...data length n %d nfft %d \n\n", n, nfft); return (nfft); } /*-----------------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/utils.c000644 015705 000000 00000005322 13505462014 022426 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 07/13/08 adjusted the stop time in case of * a prf change. * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" /* int is_big_endian_(void); int is_big_endian__(void); void die (char *, char *); void cross3_(double *, double *, double *); void get_seconds(struct PRM, double *, double *); */ /*---------------------------------------------------------------*/ /* check endian of machine */ /* 1 if big; -1 if little */ int is_big_endian_() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } int is_big_endian__() { return is_big_endian_(); } /*---------------------------------------------------------------*/ /*---------------------------------------------------------------*/ /* write out error message and exit */ /* use two strings to allow more complicated error messages */ void die(char *s1, char *s2) { fprintf(stderr, " %s %s \n", s1, s2); exit(1); } /*---------------------------------------------------------------*/ /************************************************************************ * cross3 is a routine to take the cross product of 3-D vectors * *************************************************************************/ void cross3_(double *a, double *b, double *c) /* input and output vectors having 3 elements */ { c[0] = (a[1] * b[2]) - (a[2] * b[1]); c[1] = (-a[0] * b[2]) + (a[2] * b[0]); c[2] = (a[0] * b[1]) - (a[1] * b[0]); } /*---------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /* find seconds */ void get_seconds(struct PRM p, double *start, double *end) { int m; double doy; double n_secs_day; double prf_master; n_secs_day = 24.0 * 60.0 * 60.0; doy = p.clock_start; m = p.nrows - p.num_valid_az; /* adjust the prf to use the a_rsatretch_a scale factor which was needed to match the slave image to the master image */ prf_master = p.prf / (1. + p.a_stretch_a); *start = n_secs_day * doy + (p.ashift + p.sub_int_a) / (prf_master) + (1.0 * m) / (2.0 * prf_master); *end = *start + p.num_patches * p.num_valid_az / prf_master; } /*---------------------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/ALOSE_orbits_utils.c000644 015705 000000 00000016724 13505462014 024743 0ustar00sandwellwheel000000 000000 /***************************************************** cal2ut1.c Convert calendar date/time to UT1 seconds after 01-01-2000 12:00:00 Reference: "A Simple and Precise Approach to Position and Velocity Estimation of Low Earth Orbit Satellites" 14-April-2010 Jeff Bytof *****************************************************/ #include double cal2ut1(int mode, int cal[3], double daysec) { double days = 0.; // double deltaU = 0.0 ; /* needed for UT1 - refine */ // double deltaU = +0.1 ; /* for 2006-09-28 0000 UTC */ double deltaU = -0.0811; /* for minimum residuals */ double sec; double ut1sec; int monthDays[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; int monthDayLeap[] = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335}; int day; int doy; int month; int year; int years[] = {-7305, -6939, -6574, -6209, -5844, /* 1980 to 2060 */ -5478, -5113, -4748, -4383, -4017, -3652, -3287, -2922, -2556, -2191, -1826, -1461, -1095, -730, -365, 0, 366, 731, 1096, 1461, 1827, 2192, 2557, 2922, 3288, 3653, 4018, 4383, 4749, 5114, 5479, 5844, 6210, 6575, 6940, 7305, 7671, 8036, 8401, 8766, 9132, 9497, 9862, 10227, 10593, 10958, 11323, 11688, 12054, 12419, 12784, 13149, 13515, 13880, 14245, 14610, 14976, 15341, 15706, 16071, 16437, 16802, 17167, 17532, 17898, 18263, 18628, 18993, 19359, 19724, 20089, 20454, 20820, 21185, 21550, 21915}; int leaps[] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, /* 1980 to 2060 */ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1}; if (mode == 1) { /* year, month, day of month */ year = cal[0]; month = cal[1]; day = cal[2]; days = years[year - 1980] - 0.5; if (leaps[year - 1980] == 1) { days = days + monthDayLeap[month - 1]; } else { days = days + monthDays[month - 1]; } days = days + day - 1; } else if (mode == 2) { /* year, day of year */ year = cal[0]; doy = cal[1]; days = years[year - 1980] - 0.5; days = days + doy - 1; } sec = days * 86400.0 + daysec; ut1sec = sec + deltaU; return ut1sec; } /********************************************** eci2ecr.c Convert position and velocity vectors in Inertial Earth Coordinates (ECI) -to- Rotating Earth Coordinates (ECR). Inputs ------ double pos[3] = ECI position vector (meters) double vel[3] = ECI velocity vector (meters/sec) double utsec = UT seconds past 1-JAN-2000 12:00:00 Outputs ------- double pos_ecr[3] = ECR position vector (meters) double vel_ecr[3] = ECR velocity vector (meters/sec) ------------------------------------------- Reference: "A Simple and Precise Approach to Position and Velocity Estimation of Low Earth Orbit Satellites" Authors: P. Beaulne and I. Sikaneta Defence R&D Canada Ottowa TM 2005-250 ------------------------------------------- 5 March 2010 Jeff Bytof **********************************************/ void gmst(double, double *, double *); void matvec(double[3][3], double[3], double[3]); #include void eci2ecr(double pos[], double vel[], double utsec, double pos_ecr[], double vel_ecr[]) { double a[3][3]; double ap[3][3]; double cth; double cthp; double sth; double sthp; double th; double thp; double vel_ecr_1[3]; double vel_ecr_2[3]; int i; gmst(utsec, &th, &thp); cth = cos(th); sth = sin(th); a[0][0] = cth; a[0][1] = sth; a[0][2] = 0.0; a[1][0] = -sth; a[1][1] = cth; a[1][2] = 0.0; a[2][0] = 0.0; a[2][1] = 0.0; a[2][2] = 1.0; matvec(a, pos, pos_ecr); cthp = thp * cos(th); sthp = thp * sin(th); ap[0][0] = -sthp; ap[0][1] = cthp; ap[0][2] = 0.0; ap[1][0] = -cthp; ap[1][1] = -sthp; ap[1][2] = 0.0; ap[2][0] = 0.0; ap[2][1] = 0.0; ap[2][2] = 0.0; matvec(ap, pos, vel_ecr_1); matvec(a, vel, vel_ecr_2); for (i = 0; i < 3; i++) { vel_ecr[i] = vel_ecr_1[i] + vel_ecr_2[i]; } return; } /********************************************** ecr2eci.c Transform position and velocity vectors in Rotating Earth Coordinates (ECR) -to- Inertial Earth Coordinates (ECI). Inputs ------ double pos[3] = ECR position vector (meters) double vel[3] = ECR velocity vector (meters/sec) double utsec = UT seconds past 1-JAN-2000 12:00:00 Outputs ------- double pos_eci[3] = ECI position vector (meters) double vel_eci[3] = ECI velocity vector (meters/sec) ------------------------------------------- Reference: "A Simple and Precise Approach to Position and Velocity Estimation of Low Earth Orbit Satellites" Authors: P. Beaulne and I. Sikaneta Defence R&D Canada Ottowa TM 2005-250 ------------------------------------------- 26-April-2010 Jeff Bytof **********************************************/ void gmst(double, double *, double *); void matvec(double[3][3], double[3], double[3]); #include void ecr2eci(double pos[], double vel[], double utsec, double pos_eci[], double vel_eci[]) { double a[3][3]; double ap[3][3]; double cth; double cthp; double sth; double sthp; double th; double thp; double vel_eci_1[3]; double vel_eci_2[3]; int i; gmst(utsec, &th, &thp); cth = cos(th); sth = sin(th); a[0][0] = cth; a[0][1] = -sth; a[0][2] = 0.0; a[1][0] = sth; a[1][1] = cth; a[1][2] = 0.0; a[2][0] = 0.0; a[2][1] = 0.0; a[2][2] = 1.0; matvec(a, pos, pos_eci); cthp = thp * cos(th); sthp = thp * sin(th); ap[0][0] = -sthp; ap[0][1] = -cthp; ap[0][2] = 0.0; ap[1][0] = cthp; ap[1][1] = -sthp; ap[1][2] = 0.0; ap[2][0] = 0.0; ap[2][1] = 0.0; ap[2][2] = 0.0; matvec(ap, pos, vel_eci_1); matvec(a, vel, vel_eci_2); for (i = 0; i < 3; i++) { vel_eci[i] = vel_eci_1[i] + vel_eci_2[i]; } return; } /********************************************** gmst.c Calculate the Greenwich mean sidereal angle and its first time derivative. ------------------------------------------- Reference: "A Simple and Precise Approach to Position and Velocity Estimation of Low Earth Orbit Satellites" Authors: P. Beaulne and I. Sikaneta Defence R&D Canada Ottowa TM 2005-250 ------------------------------------------- March 2010 Jeff Bytof ***********************************************/ #include void gmst(double julsec, double *th, double *thp) { double a0 = 67310.54841; double a1 = 3164400184.812866; /* 876600*3600+8640184.812866 */ double a2 = 0.093104; double a3 = -6.2e-6; double rpd = 0.01745329251994329444; double sigma; double t; double twopi = 6.283185307179586; t = (julsec / 86400.0) / 36525.0; /* convert to centuries */ sigma = a0 + a1 * t + a2 * t * t + a3 * t * t * t; sigma = sigma / 240.0; /* 240 = 360/86400 */ sigma = sigma * rpd; *th = fmod(sigma, twopi); sigma = a1 + 2. * a2 * t + 3. * a3 * t * t; sigma = sigma / 240.0; sigma = sigma / (36525. * 86400.); *thp = sigma * rpd; return; } /**************************************** matvec.c Multiply a matrix and a vector and return the product vector. March 2010 Jeff Bytof *****************************************/ void matvec(double mat[3][3], double vin[3], double vout[3]) { int i; int j; for (j = 0; j < 3; j++) { vout[j] = 0.0; for (i = 0; i < 3; i++) { vout[j] = vout[j] + mat[j][i] * vin[i]; } } return; } /*---------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/plh2xyz.c000644 015705 000000 00000004675 13505462014 022720 0ustar00sandwellwheel000000 000000 /************************************************************************ * plh2xyz converts elliptic lat, lon, hgt to geocentric X, Y, Z * * the library found at http://www.ngs.noaa.gov/PC_PROD/XYZWIN/ * ************************************************************************/ /************************************************************************ * Creator: Clyde Goad (National Geodetic Survey) * ************************************************************************/ /************************************************************************ * Modification history: * *:8301.00, CG, Creation * *:9406.16, MSS, Conversion to C. * *:9602.20, MSS, Stripped plh to xyz convertion from tlate. * *:0708.07, DTS, changed comments slightly * ************************************************************************/ #include "llt2xyz.h" #include void plh2xyz(double *plh, double *xyz, double A, double FL) /********1*********2*********3*********4*********5*********6*********7********* * input parameters * ---------------- * A semi-major axis of ellipsoid [units are of distance] * FL flattening of ellipsoid [unitless] * plh[] ellipsoidal coordinates of point, in geodetic latitude, * longitude east of Greenwich, and height [units for * latitude=plh[0] and longitude=plh[1] are in degrees; * height=plh[2] are distance and will be the same as * those of the input parameters] * * output parameters * ----------------- * xyz[] geocentric Cartesian coordinates [units are of distance] * * * ------------------------------ * Escobal, "Methods of Orbit Determination", 1965, Wiley & Sons, Inc., * pp. 27-29. * * see also: * ------------------------------ * xyz2plh */ { double flatfn = (TWO - FL) * FL; double funsq = (ONE - FL) * (ONE - FL); double g1; double g2; double lat_rad = deg_to_rad * plh[0]; double lon_rad = deg_to_rad * plh[1]; double sin_lat; sin_lat = sin(lat_rad); g1 = A / sqrt(ONE - flatfn * sin_lat * sin_lat); g2 = g1 * funsq + plh[2]; g1 = g1 + plh[2]; xyz[0] = g1 * cos(lat_rad); xyz[1] = xyz[0] * sin(lon_rad); xyz[0] = xyz[0] * cos(lon_rad); xyz[2] = g2 * sin_lat; } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/pt0000644 015705 000000 00000006655 13505462014 021562 0ustar00sandwellwheel000000 000000 interpolate_ALOS_orbit.c: p = (double *) malloc(orb->nd*sizeof(double)); interpolate_ALOS_orbit.c: pv = (double *) malloc(orb->nd*sizeof(double)); interpolate_ALOS_orbit.c: pt = (double *) malloc(orb->nd*sizeof(double)); interpolate_ALOS_orbit.c: pt0 = (24.0*60.0*60.0)*orb->id + orb->sec; interpolate_ALOS_orbit.c: for (k=0; knd; k++) pt[k] = pt0 + k*orb->dsec; interpolate_ALOS_orbit.c: nd = orb->nd; interpolate_ALOS_orbit.c: p[k] = orb->points[k].px; interpolate_ALOS_orbit.c: pv[k] = orb->points[k].vx; interpolate_ALOS_orbit.c: p[k] = orb->points[k].py; interpolate_ALOS_orbit.c: pv[k] = orb->points[k].vy; interpolate_ALOS_orbit.c: p[k] = orb->points[k].pz; interpolate_ALOS_orbit.c: pv[k] = orb->points[k].vz; read_ALOS_sarleader.c: orb->nd = num_orbit_points; read_ALOS_sarleader.c: orb->iy = atoi(tmp); read_ALOS_sarleader.c: orb->id = atoi(tmp); read_ALOS_sarleader.c: orb->sec = (double) atof(tmp); read_ALOS_sarleader.c: orb->dsec = (double) atof(tmp); read_ALOS_sarleader.c: orb->pt0 = (24.0*60.0*60.0)*orb->id + orb->sec; read_ALOS_sarleader.c: fprintf(stderr," nd %d \n",orb->nd); read_ALOS_sarleader.c: fprintf(stderr," iy %d \n",orb->iy); read_ALOS_sarleader.c: fprintf(stderr," id %d \n",orb->id); read_ALOS_sarleader.c: fprintf(stderr," sec %lf \n",orb->sec); read_ALOS_sarleader.c: fprintf(stderr," dsec %lf \n",orb->dsec); read_ALOS_sarleader.c: fprintf(stderr," pt0 %lf \n",orb->pt0); read_ALOS_sarleader.c: orb->points = (struct ORB_XYZ *) malloc(orb->nd*sizeof(struct ORB_XYZ)); read_ALOS_sarleader.c: for (i=0; ind; i++){ read_ALOS_sarleader.c: orb->points[i].px = atof(tmp); read_ALOS_sarleader.c: orb->points[i].py = atof(tmp); read_ALOS_sarleader.c: orb->points[i].pz = atof(tmp); read_ALOS_sarleader.c: if (verbose) fprintf(stderr,"%g %g %g\n", orb->points[i].px, orb->points[i].py, orb->points[i].pz); read_ALOS_sarleader.c: orb->points[i].vx = atof(tmp); read_ALOS_sarleader.c: orb->points[i].vy = atof(tmp); read_ALOS_sarleader.c: orb->points[i].vz = atof(tmp); read_ALOS_sarleader.c: if (verbose) fprintf(stderr,"%g %g %g\n", orb->points[i].vx, orb->points[i].vy, orb->points[i].vz); read_ALOS_sarleader.c: for (j=0; jnd; j++ ) { read_ALOS_sarleader.c: orb->points[j].px = orb->points[j].px; read_ALOS_sarleader.c: orb->points[j].py = orb->points[j].py; read_ALOS_sarleader.c: orb->points[j].pz = orb->points[j].pz; read_ALOS_sarleader.c: orb->points[j].vx = orb->points[j].vx/1000.; read_ALOS_sarleader.c: orb->points[j].vy = orb->points[j].vy/1000.; read_ALOS_sarleader.c: orb->points[j].vz = orb->points[j].vz/1000.; read_ALOS_sarleader.c: eci_pos[0] = orb->points[j].px; read_ALOS_sarleader.c: eci_pos[1] = orb->points[j].py; read_ALOS_sarleader.c: eci_pos[2] = orb->points[j].pz; read_ALOS_sarleader.c: eci_vel[0] = orb->points[j].vx; read_ALOS_sarleader.c: eci_vel[1] = orb->points[j].vy; read_ALOS_sarleader.c: eci_vel[2] = orb->points[j].vz; read_ALOS_sarleader.c: cal[0] = orb->iy; read_ALOS_sarleader.c: cal[1] = orb->id; read_ALOS_sarleader.c: daysec = orb->sec + j*orb->dsec; read_ALOS_sarleader.c: orb->points[j].px = ecr_pos[0]; read_ALOS_sarleader.c: orb->points[j].py = ecr_pos[1]; read_ALOS_sarleader.c: orb->points[j].pz = ecr_pos[2]; read_ALOS_sarleader.c: orb->points[j].vx = ecr_vel[0]; read_ALOS_sarleader.c: orb->points[j].vy = ecr_vel[1]; read_ALOS_sarleader.c: orb->points[j].vz = ecr_vel[2]; GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/interpolate_ALOS_orbit.c000644 015705 000000 00000005300 13505462014 025625 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #define FACTOR 1000000 /* void interpolate_ALOS_orbit_slow(struct ALOS_ORB *, double, double *, double *, double *, int *); void interpolate_ALOS_orbit(struct ALOS_ORB *, double *, double *, double *, double, double *, double *, double *, int *); */ /*---------------------------------------------------------------*/ /* from David Sandwell's code */ void interpolate_ALOS_orbit_slow(struct ALOS_ORB *orb, double time, double *x, double *y, double *z, int *ir) { int k; double pt0; double *p, *pt, *pv; p = (double *)malloc(orb->nd * sizeof(double)); pv = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); /* seconds from Jan 1 */ pt0 = (24.0 * 60.0 * 60.0) * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) pt[k] = pt0 + k * orb->dsec; interpolate_ALOS_orbit(orb, pt, p, pv, time, x, y, z, ir); free((double *)p); free((double *)pt); free((double *)pv); } /*---------------------------------------------------------------*/ void interpolate_ALOS_orbit(struct ALOS_ORB *orb, double *pt, double *p, double *pv, double time, double *x, double *y, double *z, int *ir) { /* ir; return code */ /* time; seconds since Jan 1 */ /* x, y, z; position */ int k, nval, nd; nval = 6; /* number of points to use in interpolation */ nd = orb->nd; if (debug) fprintf(stderr, " time %lf nd %d\n", time, nd); /* interpolate for each coordinate direction */ /* hermite_c c version */ for (k = 0; k < nd; k++) { p[k] = orb->points[k].px; pv[k] = orb->points[k].vx; } hermite_c(pt, p, pv, nd, nval, time, x, ir); for (k = 0; k < nd; k++) { p[k] = orb->points[k].py; pv[k] = orb->points[k].vy; } hermite_c(pt, p, pv, nd, nval, time, y, ir); if (debug) fprintf(stderr, "C pt %lf py %lf pvy %lf time %lf y %lf ir %d \n", *pt, p[0], pv[0], time, *y, *ir); for (k = 0; k < nd; k++) { p[k] = orb->points[k].pz; pv[k] = orb->points[k].vz; } hermite_c(pt, p, pv, nd, nval, time, z, ir); if (debug) fprintf(stderr, "C pt %lf pz %lf pvz %lf time %lf z %lf ir %d \n", *pt, p[0], pv[0], time, *z, *ir); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/cfft1d.c000644 015705 000000 00000003502 13505462014 022433 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine used to call and initialize FFT routines from * * fftpack.c The calls are almost identical to the old Sun perflib * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography * * Date : 12/27/96 * * Date : 09/15/07 re-worked by Rob Mellors * * Date : 10/16/07 re-worked by David Sandwells to use pointers * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" #include #include void die(char *, char *); void cffti(int, float *); void cfftf(int, fcomplex *, float *); void cfftb(int, fcomplex *, float *); /*----------------------------------------------------------------------------*/ void cfft1d_(int *np, fcomplex *c, int *dir) { static float *work; static int nold = 0; int i, n; /* Initialize work array with sines and cosines to save CPU time later This is done when the length of the FFT has changed or when *dir == 0. */ n = *np; if ((n != nold) || (*dir == 0)) { if (nold != 0) free((char *)work); if ((work = (float *)malloc((4 * n + 30) * sizeof(float))) == NULL) die("Sorry, can't allocate mem", ""); cffti(n, work); nold = n; } /* Do forward transform with NO normalization. Forward is exp(+i*k*x) */ if (*dir == -1) cfftf(n, c, work); /* Do inverse transform with normalization. Inverse is exp(-i*k*x) */ if (*dir == 1) { cfftb(n, c, work); for (i = 0; i < n; i++) { c[i].i = c[i].i / (1.0 * n); c[i].r = c[i].r / (1.0 * n); } } } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/fftpack.c000644 015705 000000 00000136001 13505462014 022703 0ustar00sandwellwheel000000 000000 /* fftpack.c : A set of FFT routines in C. Algorithmically based on Fortran-77 FFTPACK by Paul N. Swarztrauber (Version 4, 1985). */ /* isign is +1 for backward and -1 for forward transforms */ #include #include /* #define DOUBLE */ #ifdef DOUBLE #define Treal double #else #define Treal float #endif #define ref(u, a) u[a] #define MAXFAC 13 /* maximum number of factors in factorization of n */ #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------------- passf2, passf3, passf4, passf5, passf. Complex FFT passes fwd and bwd. ---------------------------------------------------------------------- */ static void passf2(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], int isign) /* isign==+1 for backward transform */ { int i, k, ah, ac; Treal ti2, tr2; if (ido <= 2) { for (k = 0; k < l1; k++) { ah = k * ido; ac = 2 * k * ido; ch[ah] = ref(cc, ac) + ref(cc, ac + ido); ch[ah + ido * l1] = ref(cc, ac) - ref(cc, ac + ido); ch[ah + 1] = ref(cc, ac + 1) + ref(cc, ac + ido + 1); ch[ah + ido * l1 + 1] = ref(cc, ac + 1) - ref(cc, ac + ido + 1); } } else { for (k = 0; k < l1; k++) { for (i = 0; i < ido - 1; i += 2) { ah = i + k * ido; ac = i + 2 * k * ido; ch[ah] = ref(cc, ac) + ref(cc, ac + ido); tr2 = ref(cc, ac) - ref(cc, ac + ido); ch[ah + 1] = ref(cc, ac + 1) + ref(cc, ac + 1 + ido); ti2 = ref(cc, ac + 1) - ref(cc, ac + 1 + ido); ch[ah + l1 * ido + 1] = wa1[i] * ti2 + isign * wa1[i + 1] * tr2; ch[ah + l1 * ido] = wa1[i] * tr2 - isign * wa1[i + 1] * ti2; } } } } /* passf2 */ static void passf3(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], int isign) /* isign==+1 for backward transform */ { static const Treal taur = -0.5; static const Treal taui = 0.866025403784439; int i, k, ac, ah; Treal ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2; if (ido == 2) { for (k = 1; k <= l1; k++) { ac = (3 * k - 2) * ido; tr2 = ref(cc, ac) + ref(cc, ac + ido); cr2 = ref(cc, ac - ido) + taur * tr2; ah = (k - 1) * ido; ch[ah] = ref(cc, ac - ido) + tr2; ti2 = ref(cc, ac + 1) + ref(cc, ac + ido + 1); ci2 = ref(cc, ac - ido + 1) + taur * ti2; ch[ah + 1] = ref(cc, ac - ido + 1) + ti2; cr3 = isign * taui * (ref(cc, ac) - ref(cc, ac + ido)); ci3 = isign * taui * (ref(cc, ac + 1) - ref(cc, ac + ido + 1)); ch[ah + l1 * ido] = cr2 - ci3; ch[ah + 2 * l1 * ido] = cr2 + ci3; ch[ah + l1 * ido + 1] = ci2 + cr3; ch[ah + 2 * l1 * ido + 1] = ci2 - cr3; } } else { for (k = 1; k <= l1; k++) { for (i = 0; i < ido - 1; i += 2) { ac = i + (3 * k - 2) * ido; tr2 = ref(cc, ac) + ref(cc, ac + ido); cr2 = ref(cc, ac - ido) + taur * tr2; ah = i + (k - 1) * ido; ch[ah] = ref(cc, ac - ido) + tr2; ti2 = ref(cc, ac + 1) + ref(cc, ac + ido + 1); ci2 = ref(cc, ac - ido + 1) + taur * ti2; ch[ah + 1] = ref(cc, ac - ido + 1) + ti2; cr3 = isign * taui * (ref(cc, ac) - ref(cc, ac + ido)); ci3 = isign * taui * (ref(cc, ac + 1) - ref(cc, ac + ido + 1)); dr2 = cr2 - ci3; dr3 = cr2 + ci3; di2 = ci2 + cr3; di3 = ci2 - cr3; ch[ah + l1 * ido + 1] = wa1[i] * di2 + isign * wa1[i + 1] * dr2; ch[ah + l1 * ido] = wa1[i] * dr2 - isign * wa1[i + 1] * di2; ch[ah + 2 * l1 * ido + 1] = wa2[i] * di3 + isign * wa2[i + 1] * dr3; ch[ah + 2 * l1 * ido] = wa2[i] * dr3 - isign * wa2[i + 1] * di3; } } } } /* passf3 */ static void passf4(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[], int isign) /* isign == -1 for forward transform and +1 for backward transform */ { int i, k, ac, ah; Treal ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4; if (ido == 2) { for (k = 0; k < l1; k++) { ac = 4 * k * ido + 1; ti1 = ref(cc, ac) - ref(cc, ac + 2 * ido); ti2 = ref(cc, ac) + ref(cc, ac + 2 * ido); tr4 = ref(cc, ac + 3 * ido) - ref(cc, ac + ido); ti3 = ref(cc, ac + ido) + ref(cc, ac + 3 * ido); tr1 = ref(cc, ac - 1) - ref(cc, ac + 2 * ido - 1); tr2 = ref(cc, ac - 1) + ref(cc, ac + 2 * ido - 1); ti4 = ref(cc, ac + ido - 1) - ref(cc, ac + 3 * ido - 1); tr3 = ref(cc, ac + ido - 1) + ref(cc, ac + 3 * ido - 1); ah = k * ido; ch[ah] = tr2 + tr3; ch[ah + 2 * l1 * ido] = tr2 - tr3; ch[ah + 1] = ti2 + ti3; ch[ah + 2 * l1 * ido + 1] = ti2 - ti3; ch[ah + l1 * ido] = tr1 + isign * tr4; ch[ah + 3 * l1 * ido] = tr1 - isign * tr4; ch[ah + l1 * ido + 1] = ti1 + isign * ti4; ch[ah + 3 * l1 * ido + 1] = ti1 - isign * ti4; } } else { for (k = 0; k < l1; k++) { for (i = 0; i < ido - 1; i += 2) { ac = i + 1 + 4 * k * ido; ti1 = ref(cc, ac) - ref(cc, ac + 2 * ido); ti2 = ref(cc, ac) + ref(cc, ac + 2 * ido); ti3 = ref(cc, ac + ido) + ref(cc, ac + 3 * ido); tr4 = ref(cc, ac + 3 * ido) - ref(cc, ac + ido); tr1 = ref(cc, ac - 1) - ref(cc, ac + 2 * ido - 1); tr2 = ref(cc, ac - 1) + ref(cc, ac + 2 * ido - 1); ti4 = ref(cc, ac + ido - 1) - ref(cc, ac + 3 * ido - 1); tr3 = ref(cc, ac + ido - 1) + ref(cc, ac + 3 * ido - 1); ah = i + k * ido; ch[ah] = tr2 + tr3; cr3 = tr2 - tr3; ch[ah + 1] = ti2 + ti3; ci3 = ti2 - ti3; cr2 = tr1 + isign * tr4; cr4 = tr1 - isign * tr4; ci2 = ti1 + isign * ti4; ci4 = ti1 - isign * ti4; ch[ah + l1 * ido] = wa1[i] * cr2 - isign * wa1[i + 1] * ci2; ch[ah + l1 * ido + 1] = wa1[i] * ci2 + isign * wa1[i + 1] * cr2; ch[ah + 2 * l1 * ido] = wa2[i] * cr3 - isign * wa2[i + 1] * ci3; ch[ah + 2 * l1 * ido + 1] = wa2[i] * ci3 + isign * wa2[i + 1] * cr3; ch[ah + 3 * l1 * ido] = wa3[i] * cr4 - isign * wa3[i + 1] * ci4; ch[ah + 3 * l1 * ido + 1] = wa3[i] * ci4 + isign * wa3[i + 1] * cr4; } } } } /* passf4 */ static void passf5(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[], const Treal wa4[], int isign) /* isign == -1 for forward transform and +1 for backward transform */ { static const Treal tr11 = 0.309016994374947; static const Treal ti11 = 0.951056516295154; static const Treal tr12 = -0.809016994374947; static const Treal ti12 = 0.587785252292473; int i, k, ac, ah; Treal ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5; if (ido == 2) { for (k = 1; k <= l1; ++k) { ac = (5 * k - 4) * ido + 1; ti5 = ref(cc, ac) - ref(cc, ac + 3 * ido); ti2 = ref(cc, ac) + ref(cc, ac + 3 * ido); ti4 = ref(cc, ac + ido) - ref(cc, ac + 2 * ido); ti3 = ref(cc, ac + ido) + ref(cc, ac + 2 * ido); tr5 = ref(cc, ac - 1) - ref(cc, ac + 3 * ido - 1); tr2 = ref(cc, ac - 1) + ref(cc, ac + 3 * ido - 1); tr4 = ref(cc, ac + ido - 1) - ref(cc, ac + 2 * ido - 1); tr3 = ref(cc, ac + ido - 1) + ref(cc, ac + 2 * ido - 1); ah = (k - 1) * ido; ch[ah] = ref(cc, ac - ido - 1) + tr2 + tr3; ch[ah + 1] = ref(cc, ac - ido) + ti2 + ti3; cr2 = ref(cc, ac - ido - 1) + tr11 * tr2 + tr12 * tr3; ci2 = ref(cc, ac - ido) + tr11 * ti2 + tr12 * ti3; cr3 = ref(cc, ac - ido - 1) + tr12 * tr2 + tr11 * tr3; ci3 = ref(cc, ac - ido) + tr12 * ti2 + tr11 * ti3; cr5 = isign * (ti11 * tr5 + ti12 * tr4); ci5 = isign * (ti11 * ti5 + ti12 * ti4); cr4 = isign * (ti12 * tr5 - ti11 * tr4); ci4 = isign * (ti12 * ti5 - ti11 * ti4); ch[ah + l1 * ido] = cr2 - ci5; ch[ah + 4 * l1 * ido] = cr2 + ci5; ch[ah + l1 * ido + 1] = ci2 + cr5; ch[ah + 2 * l1 * ido + 1] = ci3 + cr4; ch[ah + 2 * l1 * ido] = cr3 - ci4; ch[ah + 3 * l1 * ido] = cr3 + ci4; ch[ah + 3 * l1 * ido + 1] = ci3 - cr4; ch[ah + 4 * l1 * ido + 1] = ci2 - cr5; } } else { for (k = 1; k <= l1; k++) { for (i = 0; i < ido - 1; i += 2) { ac = i + 1 + (k * 5 - 4) * ido; ti5 = ref(cc, ac) - ref(cc, ac + 3 * ido); ti2 = ref(cc, ac) + ref(cc, ac + 3 * ido); ti4 = ref(cc, ac + ido) - ref(cc, ac + 2 * ido); ti3 = ref(cc, ac + ido) + ref(cc, ac + 2 * ido); tr5 = ref(cc, ac - 1) - ref(cc, ac + 3 * ido - 1); tr2 = ref(cc, ac - 1) + ref(cc, ac + 3 * ido - 1); tr4 = ref(cc, ac + ido - 1) - ref(cc, ac + 2 * ido - 1); tr3 = ref(cc, ac + ido - 1) + ref(cc, ac + 2 * ido - 1); ah = i + (k - 1) * ido; ch[ah] = ref(cc, ac - ido - 1) + tr2 + tr3; ch[ah + 1] = ref(cc, ac - ido) + ti2 + ti3; cr2 = ref(cc, ac - ido - 1) + tr11 * tr2 + tr12 * tr3; ci2 = ref(cc, ac - ido) + tr11 * ti2 + tr12 * ti3; cr3 = ref(cc, ac - ido - 1) + tr12 * tr2 + tr11 * tr3; ci3 = ref(cc, ac - ido) + tr12 * ti2 + tr11 * ti3; cr5 = isign * (ti11 * tr5 + ti12 * tr4); ci5 = isign * (ti11 * ti5 + ti12 * ti4); cr4 = isign * (ti12 * tr5 - ti11 * tr4); ci4 = isign * (ti12 * ti5 - ti11 * ti4); dr3 = cr3 - ci4; dr4 = cr3 + ci4; di3 = ci3 + cr4; di4 = ci3 - cr4; dr5 = cr2 + ci5; dr2 = cr2 - ci5; di5 = ci2 - cr5; di2 = ci2 + cr5; ch[ah + l1 * ido] = wa1[i] * dr2 - isign * wa1[i + 1] * di2; ch[ah + l1 * ido + 1] = wa1[i] * di2 + isign * wa1[i + 1] * dr2; ch[ah + 2 * l1 * ido] = wa2[i] * dr3 - isign * wa2[i + 1] * di3; ch[ah + 2 * l1 * ido + 1] = wa2[i] * di3 + isign * wa2[i + 1] * dr3; ch[ah + 3 * l1 * ido] = wa3[i] * dr4 - isign * wa3[i + 1] * di4; ch[ah + 3 * l1 * ido + 1] = wa3[i] * di4 + isign * wa3[i + 1] * dr4; ch[ah + 4 * l1 * ido] = wa4[i] * dr5 - isign * wa4[i + 1] * di5; ch[ah + 4 * l1 * ido + 1] = wa4[i] * di5 + isign * wa4[i + 1] * dr5; } } } } /* passf5 */ static void passf(int *nac, int ido, int ip, int l1, int idl1, Treal cc[], Treal ch[], const Treal wa[], int isign) /* isign is -1 for forward transform and +1 for backward transform */ { int idij, idlj, idot, ipph, i, j, k, l, jc, lc, ik, idj, idl, inc, idp; Treal wai, war; idot = ido / 2; // nt = ip*idl1; ipph = (ip + 1) / 2; idp = ip * ido; if (ido >= l1) { for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { for (i = 0; i < ido; i++) { ch[i + (k + j * l1) * ido] = ref(cc, i + (j + k * ip) * ido) + ref(cc, i + (jc + k * ip) * ido); ch[i + (k + jc * l1) * ido] = ref(cc, i + (j + k * ip) * ido) - ref(cc, i + (jc + k * ip) * ido); } } } for (k = 0; k < l1; k++) for (i = 0; i < ido; i++) ch[i + k * ido] = ref(cc, i + k * ip * ido); } else { for (j = 1; j < ipph; j++) { jc = ip - j; for (i = 0; i < ido; i++) { for (k = 0; k < l1; k++) { ch[i + (k + j * l1) * ido] = ref(cc, i + (j + k * ip) * ido) + ref(cc, i + (jc + k * ip) * ido); ch[i + (k + jc * l1) * ido] = ref(cc, i + (j + k * ip) * ido) - ref(cc, i + (jc + k * ip) * ido); } } } for (i = 0; i < ido; i++) for (k = 0; k < l1; k++) ch[i + k * ido] = ref(cc, i + k * ip * ido); } idl = 2 - ido; inc = 0; for (l = 1; l < ipph; l++) { lc = ip - l; idl += ido; for (ik = 0; ik < idl1; ik++) { cc[ik + l * idl1] = ch[ik] + wa[idl - 2] * ch[ik + idl1]; cc[ik + lc * idl1] = isign * wa[idl - 1] * ch[ik + (ip - 1) * idl1]; } idlj = idl; inc += ido; for (j = 2; j < ipph; j++) { jc = ip - j; idlj += inc; if (idlj > idp) idlj -= idp; war = wa[idlj - 2]; wai = wa[idlj - 1]; for (ik = 0; ik < idl1; ik++) { cc[ik + l * idl1] += war * ch[ik + j * idl1]; cc[ik + lc * idl1] += isign * wai * ch[ik + jc * idl1]; } } } for (j = 1; j < ipph; j++) for (ik = 0; ik < idl1; ik++) ch[ik] += ch[ik + j * idl1]; for (j = 1; j < ipph; j++) { jc = ip - j; for (ik = 1; ik < idl1; ik += 2) { ch[ik - 1 + j * idl1] = cc[ik - 1 + j * idl1] - cc[ik + jc * idl1]; ch[ik - 1 + jc * idl1] = cc[ik - 1 + j * idl1] + cc[ik + jc * idl1]; ch[ik + j * idl1] = cc[ik + j * idl1] + cc[ik - 1 + jc * idl1]; ch[ik + jc * idl1] = cc[ik + j * idl1] - cc[ik - 1 + jc * idl1]; } } *nac = 1; if (ido == 2) return; *nac = 0; for (ik = 0; ik < idl1; ik++) cc[ik] = ch[ik]; for (j = 1; j < ip; j++) { for (k = 0; k < l1; k++) { cc[(k + j * l1) * ido + 0] = ch[(k + j * l1) * ido + 0]; cc[(k + j * l1) * ido + 1] = ch[(k + j * l1) * ido + 1]; } } if (idot <= l1) { idij = 0; for (j = 1; j < ip; j++) { idij += 2; for (i = 3; i < ido; i += 2) { idij += 2; for (k = 0; k < l1; k++) { cc[i - 1 + (k + j * l1) * ido] = wa[idij - 2] * ch[i - 1 + (k + j * l1) * ido] - isign * wa[idij - 1] * ch[i + (k + j * l1) * ido]; cc[i + (k + j * l1) * ido] = wa[idij - 2] * ch[i + (k + j * l1) * ido] + isign * wa[idij - 1] * ch[i - 1 + (k + j * l1) * ido]; } } } } else { idj = 2 - ido; for (j = 1; j < ip; j++) { idj += ido; for (k = 0; k < l1; k++) { idij = idj; for (i = 3; i < ido; i += 2) { idij += 2; cc[i - 1 + (k + j * l1) * ido] = wa[idij - 2] * ch[i - 1 + (k + j * l1) * ido] - isign * wa[idij - 1] * ch[i + (k + j * l1) * ido]; cc[i + (k + j * l1) * ido] = wa[idij - 2] * ch[i + (k + j * l1) * ido] + isign * wa[idij - 1] * ch[i - 1 + (k + j * l1) * ido]; } } } } } /* passf */ /* ---------------------------------------------------------------------- radf2,radb2, radf3,radb3, radf4,radb4, radf5,radb5, radfg,radbg. Treal FFT passes fwd and bwd. ---------------------------------------------------------------------- */ static void radf2(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[]) { int i, k, ic; Treal ti2, tr2; for (k = 0; k < l1; k++) { ch[2 * k * ido] = ref(cc, k * ido) + ref(cc, (k + l1) * ido); ch[(2 * k + 1) * ido + ido - 1] = ref(cc, k * ido) - ref(cc, (k + l1) * ido); } if (ido < 2) return; if (ido != 2) { for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; tr2 = wa1[i - 2] * ref(cc, i - 1 + (k + l1) * ido) + wa1[i - 1] * ref(cc, i + (k + l1) * ido); ti2 = wa1[i - 2] * ref(cc, i + (k + l1) * ido) - wa1[i - 1] * ref(cc, i - 1 + (k + l1) * ido); ch[i + 2 * k * ido] = ref(cc, i + k * ido) + ti2; ch[ic + (2 * k + 1) * ido] = ti2 - ref(cc, i + k * ido); ch[i - 1 + 2 * k * ido] = ref(cc, i - 1 + k * ido) + tr2; ch[ic - 1 + (2 * k + 1) * ido] = ref(cc, i - 1 + k * ido) - tr2; } } if (ido % 2 == 1) return; } for (k = 0; k < l1; k++) { ch[(2 * k + 1) * ido] = -ref(cc, ido - 1 + (k + l1) * ido); ch[ido - 1 + 2 * k * ido] = ref(cc, ido - 1 + k * ido); } } /* radf2 */ static void radb2(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[]) { int i, k, ic; Treal ti2, tr2; for (k = 0; k < l1; k++) { ch[k * ido] = ref(cc, 2 * k * ido) + ref(cc, ido - 1 + (2 * k + 1) * ido); ch[(k + l1) * ido] = ref(cc, 2 * k * ido) - ref(cc, ido - 1 + (2 * k + 1) * ido); } if (ido < 2) return; if (ido != 2) { for (k = 0; k < l1; ++k) { for (i = 2; i < ido; i += 2) { ic = ido - i; ch[i - 1 + k * ido] = ref(cc, i - 1 + 2 * k * ido) + ref(cc, ic - 1 + (2 * k + 1) * ido); tr2 = ref(cc, i - 1 + 2 * k * ido) - ref(cc, ic - 1 + (2 * k + 1) * ido); ch[i + k * ido] = ref(cc, i + 2 * k * ido) - ref(cc, ic + (2 * k + 1) * ido); ti2 = ref(cc, i + (2 * k) * ido) + ref(cc, ic + (2 * k + 1) * ido); ch[i - 1 + (k + l1) * ido] = wa1[i - 2] * tr2 - wa1[i - 1] * ti2; ch[i + (k + l1) * ido] = wa1[i - 2] * ti2 + wa1[i - 1] * tr2; } } if (ido % 2 == 1) return; } for (k = 0; k < l1; k++) { ch[ido - 1 + k * ido] = 2 * ref(cc, ido - 1 + 2 * k * ido); ch[ido - 1 + (k + l1) * ido] = -2 * ref(cc, (2 * k + 1) * ido); } } /* radb2 */ static void radf3(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[]) { static const Treal taur = -0.5; static const Treal taui = 0.866025403784439; int i, k, ic; Treal ci2, di2, di3, cr2, dr2, dr3, ti2, ti3, tr2, tr3; for (k = 0; k < l1; k++) { cr2 = ref(cc, (k + l1) * ido) + ref(cc, (k + 2 * l1) * ido); ch[3 * k * ido] = ref(cc, k * ido) + cr2; ch[(3 * k + 2) * ido] = taui * (ref(cc, (k + l1 * 2) * ido) - ref(cc, (k + l1) * ido)); ch[ido - 1 + (3 * k + 1) * ido] = ref(cc, k * ido) + taur * cr2; } if (ido == 1) return; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; dr2 = wa1[i - 2] * ref(cc, i - 1 + (k + l1) * ido) + wa1[i - 1] * ref(cc, i + (k + l1) * ido); di2 = wa1[i - 2] * ref(cc, i + (k + l1) * ido) - wa1[i - 1] * ref(cc, i - 1 + (k + l1) * ido); dr3 = wa2[i - 2] * ref(cc, i - 1 + (k + l1 * 2) * ido) + wa2[i - 1] * ref(cc, i + (k + l1 * 2) * ido); di3 = wa2[i - 2] * ref(cc, i + (k + l1 * 2) * ido) - wa2[i - 1] * ref(cc, i - 1 + (k + l1 * 2) * ido); cr2 = dr2 + dr3; ci2 = di2 + di3; ch[i - 1 + 3 * k * ido] = ref(cc, i - 1 + k * ido) + cr2; ch[i + 3 * k * ido] = ref(cc, i + k * ido) + ci2; tr2 = ref(cc, i - 1 + k * ido) + taur * cr2; ti2 = ref(cc, i + k * ido) + taur * ci2; tr3 = taui * (di2 - di3); ti3 = taui * (dr3 - dr2); ch[i - 1 + (3 * k + 2) * ido] = tr2 + tr3; ch[ic - 1 + (3 * k + 1) * ido] = tr2 - tr3; ch[i + (3 * k + 2) * ido] = ti2 + ti3; ch[ic + (3 * k + 1) * ido] = ti3 - ti2; } } } /* radf3 */ static void radb3(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[]) { static const Treal taur = -0.5; static const Treal taui = 0.866025403784439; int i, k, ic; Treal ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2; for (k = 0; k < l1; k++) { tr2 = 2 * ref(cc, ido - 1 + (3 * k + 1) * ido); cr2 = ref(cc, 3 * k * ido) + taur * tr2; ch[k * ido] = ref(cc, 3 * k * ido) + tr2; ci3 = 2 * taui * ref(cc, (3 * k + 2) * ido); ch[(k + l1) * ido] = cr2 - ci3; ch[(k + 2 * l1) * ido] = cr2 + ci3; } if (ido == 1) return; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; tr2 = ref(cc, i - 1 + (3 * k + 2) * ido) + ref(cc, ic - 1 + (3 * k + 1) * ido); cr2 = ref(cc, i - 1 + 3 * k * ido) + taur * tr2; ch[i - 1 + k * ido] = ref(cc, i - 1 + 3 * k * ido) + tr2; ti2 = ref(cc, i + (3 * k + 2) * ido) - ref(cc, ic + (3 * k + 1) * ido); ci2 = ref(cc, i + 3 * k * ido) + taur * ti2; ch[i + k * ido] = ref(cc, i + 3 * k * ido) + ti2; cr3 = taui * (ref(cc, i - 1 + (3 * k + 2) * ido) - ref(cc, ic - 1 + (3 * k + 1) * ido)); ci3 = taui * (ref(cc, i + (3 * k + 2) * ido) + ref(cc, ic + (3 * k + 1) * ido)); dr2 = cr2 - ci3; dr3 = cr2 + ci3; di2 = ci2 + cr3; di3 = ci2 - cr3; ch[i - 1 + (k + l1) * ido] = wa1[i - 2] * dr2 - wa1[i - 1] * di2; ch[i + (k + l1) * ido] = wa1[i - 2] * di2 + wa1[i - 1] * dr2; ch[i - 1 + (k + 2 * l1) * ido] = wa2[i - 2] * dr3 - wa2[i - 1] * di3; ch[i + (k + 2 * l1) * ido] = wa2[i - 2] * di3 + wa2[i - 1] * dr3; } } } /* radb3 */ static void radf4(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[]) { static const Treal hsqt2 = 0.7071067811865475; int i, k, ic; Treal ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4; for (k = 0; k < l1; k++) { tr1 = ref(cc, (k + l1) * ido) + ref(cc, (k + 3 * l1) * ido); tr2 = ref(cc, k * ido) + ref(cc, (k + 2 * l1) * ido); ch[4 * k * ido] = tr1 + tr2; ch[ido - 1 + (4 * k + 3) * ido] = tr2 - tr1; ch[ido - 1 + (4 * k + 1) * ido] = ref(cc, k * ido) - ref(cc, (k + 2 * l1) * ido); ch[(4 * k + 2) * ido] = ref(cc, (k + 3 * l1) * ido) - ref(cc, (k + l1) * ido); } if (ido < 2) return; if (ido != 2) { for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; cr2 = wa1[i - 2] * ref(cc, i - 1 + (k + l1) * ido) + wa1[i - 1] * ref(cc, i + (k + l1) * ido); ci2 = wa1[i - 2] * ref(cc, i + (k + l1) * ido) - wa1[i - 1] * ref(cc, i - 1 + (k + l1) * ido); cr3 = wa2[i - 2] * ref(cc, i - 1 + (k + 2 * l1) * ido) + wa2[i - 1] * ref(cc, i + (k + 2 * l1) * ido); ci3 = wa2[i - 2] * ref(cc, i + (k + 2 * l1) * ido) - wa2[i - 1] * ref(cc, i - 1 + (k + 2 * l1) * ido); cr4 = wa3[i - 2] * ref(cc, i - 1 + (k + 3 * l1) * ido) + wa3[i - 1] * ref(cc, i + (k + 3 * l1) * ido); ci4 = wa3[i - 2] * ref(cc, i + (k + 3 * l1) * ido) - wa3[i - 1] * ref(cc, i - 1 + (k + 3 * l1) * ido); tr1 = cr2 + cr4; tr4 = cr4 - cr2; ti1 = ci2 + ci4; ti4 = ci2 - ci4; ti2 = ref(cc, i + k * ido) + ci3; ti3 = ref(cc, i + k * ido) - ci3; tr2 = ref(cc, i - 1 + k * ido) + cr3; tr3 = ref(cc, i - 1 + k * ido) - cr3; ch[i - 1 + 4 * k * ido] = tr1 + tr2; ch[ic - 1 + (4 * k + 3) * ido] = tr2 - tr1; ch[i + 4 * k * ido] = ti1 + ti2; ch[ic + (4 * k + 3) * ido] = ti1 - ti2; ch[i - 1 + (4 * k + 2) * ido] = ti4 + tr3; ch[ic - 1 + (4 * k + 1) * ido] = tr3 - ti4; ch[i + (4 * k + 2) * ido] = tr4 + ti3; ch[ic + (4 * k + 1) * ido] = tr4 - ti3; } } if (ido % 2 == 1) return; } for (k = 0; k < l1; k++) { ti1 = -hsqt2 * (ref(cc, ido - 1 + (k + l1) * ido) + ref(cc, ido - 1 + (k + 3 * l1) * ido)); tr1 = hsqt2 * (ref(cc, ido - 1 + (k + l1) * ido) - ref(cc, ido - 1 + (k + 3 * l1) * ido)); ch[ido - 1 + 4 * k * ido] = tr1 + ref(cc, ido - 1 + k * ido); ch[ido - 1 + (4 * k + 2) * ido] = ref(cc, ido - 1 + k * ido) - tr1; ch[(4 * k + 1) * ido] = ti1 - ref(cc, ido - 1 + (k + 2 * l1) * ido); ch[(4 * k + 3) * ido] = ti1 + ref(cc, ido - 1 + (k + 2 * l1) * ido); } } /* radf4 */ static void radb4(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[]) { static const Treal sqrt2 = 1.414213562373095; int i, k, ic; Treal ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4; for (k = 0; k < l1; k++) { tr1 = ref(cc, 4 * k * ido) - ref(cc, ido - 1 + (4 * k + 3) * ido); tr2 = ref(cc, 4 * k * ido) + ref(cc, ido - 1 + (4 * k + 3) * ido); tr3 = ref(cc, ido - 1 + (4 * k + 1) * ido) + ref(cc, ido - 1 + (4 * k + 1) * ido); tr4 = ref(cc, (4 * k + 2) * ido) + ref(cc, (4 * k + 2) * ido); ch[k * ido] = tr2 + tr3; ch[(k + l1) * ido] = tr1 - tr4; ch[(k + 2 * l1) * ido] = tr2 - tr3; ch[(k + 3 * l1) * ido] = tr1 + tr4; } if (ido < 2) return; if (ido != 2) { for (k = 0; k < l1; ++k) { for (i = 2; i < ido; i += 2) { ic = ido - i; ti1 = ref(cc, i + 4 * k * ido) + ref(cc, ic + (4 * k + 3) * ido); ti2 = ref(cc, i + 4 * k * ido) - ref(cc, ic + (4 * k + 3) * ido); ti3 = ref(cc, i + (4 * k + 2) * ido) - ref(cc, ic + (4 * k + 1) * ido); tr4 = ref(cc, i + (4 * k + 2) * ido) + ref(cc, ic + (4 * k + 1) * ido); tr1 = ref(cc, i - 1 + 4 * k * ido) - ref(cc, ic - 1 + (4 * k + 3) * ido); tr2 = ref(cc, i - 1 + 4 * k * ido) + ref(cc, ic - 1 + (4 * k + 3) * ido); ti4 = ref(cc, i - 1 + (4 * k + 2) * ido) - ref(cc, ic - 1 + (4 * k + 1) * ido); tr3 = ref(cc, i - 1 + (4 * k + 2) * ido) + ref(cc, ic - 1 + (4 * k + 1) * ido); ch[i - 1 + k * ido] = tr2 + tr3; cr3 = tr2 - tr3; ch[i + k * ido] = ti2 + ti3; ci3 = ti2 - ti3; cr2 = tr1 - tr4; cr4 = tr1 + tr4; ci2 = ti1 + ti4; ci4 = ti1 - ti4; ch[i - 1 + (k + l1) * ido] = wa1[i - 2] * cr2 - wa1[i - 1] * ci2; ch[i + (k + l1) * ido] = wa1[i - 2] * ci2 + wa1[i - 1] * cr2; ch[i - 1 + (k + 2 * l1) * ido] = wa2[i - 2] * cr3 - wa2[i - 1] * ci3; ch[i + (k + 2 * l1) * ido] = wa2[i - 2] * ci3 + wa2[i - 1] * cr3; ch[i - 1 + (k + 3 * l1) * ido] = wa3[i - 2] * cr4 - wa3[i - 1] * ci4; ch[i + (k + 3 * l1) * ido] = wa3[i - 2] * ci4 + wa3[i - 1] * cr4; } } if (ido % 2 == 1) return; } for (k = 0; k < l1; k++) { ti1 = ref(cc, (4 * k + 1) * ido) + ref(cc, (4 * k + 3) * ido); ti2 = ref(cc, (4 * k + 3) * ido) - ref(cc, (4 * k + 1) * ido); tr1 = ref(cc, ido - 1 + 4 * k * ido) - ref(cc, ido - 1 + (4 * k + 2) * ido); tr2 = ref(cc, ido - 1 + 4 * k * ido) + ref(cc, ido - 1 + (4 * k + 2) * ido); ch[ido - 1 + k * ido] = tr2 + tr2; ch[ido - 1 + (k + l1) * ido] = sqrt2 * (tr1 - ti1); ch[ido - 1 + (k + 2 * l1) * ido] = ti2 + ti2; ch[ido - 1 + (k + 3 * l1) * ido] = -sqrt2 * (tr1 + ti1); } } /* radb4 */ static void radf5(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[], const Treal wa4[]) { static const Treal tr11 = 0.309016994374947; static const Treal ti11 = 0.951056516295154; static const Treal tr12 = -0.809016994374947; static const Treal ti12 = 0.587785252292473; int i, k, ic; Treal ci2, di2, ci4, ci5, di3, di4, di5, ci3, cr2, cr3, dr2, dr3, dr4, dr5, cr5, cr4, ti2, ti3, ti5, ti4, tr2, tr3, tr4, tr5; for (k = 0; k < l1; k++) { cr2 = ref(cc, (k + 4 * l1) * ido) + ref(cc, (k + l1) * ido); ci5 = ref(cc, (k + 4 * l1) * ido) - ref(cc, (k + l1) * ido); cr3 = ref(cc, (k + 3 * l1) * ido) + ref(cc, (k + 2 * l1) * ido); ci4 = ref(cc, (k + 3 * l1) * ido) - ref(cc, (k + 2 * l1) * ido); ch[5 * k * ido] = ref(cc, k * ido) + cr2 + cr3; ch[ido - 1 + (5 * k + 1) * ido] = ref(cc, k * ido) + tr11 * cr2 + tr12 * cr3; ch[(5 * k + 2) * ido] = ti11 * ci5 + ti12 * ci4; ch[ido - 1 + (5 * k + 3) * ido] = ref(cc, k * ido) + tr12 * cr2 + tr11 * cr3; ch[(5 * k + 4) * ido] = ti12 * ci5 - ti11 * ci4; } if (ido == 1) return; for (k = 0; k < l1; ++k) { for (i = 2; i < ido; i += 2) { ic = ido - i; dr2 = wa1[i - 2] * ref(cc, i - 1 + (k + l1) * ido) + wa1[i - 1] * ref(cc, i + (k + l1) * ido); di2 = wa1[i - 2] * ref(cc, i + (k + l1) * ido) - wa1[i - 1] * ref(cc, i - 1 + (k + l1) * ido); dr3 = wa2[i - 2] * ref(cc, i - 1 + (k + 2 * l1) * ido) + wa2[i - 1] * ref(cc, i + (k + 2 * l1) * ido); di3 = wa2[i - 2] * ref(cc, i + (k + 2 * l1) * ido) - wa2[i - 1] * ref(cc, i - 1 + (k + 2 * l1) * ido); dr4 = wa3[i - 2] * ref(cc, i - 1 + (k + 3 * l1) * ido) + wa3[i - 1] * ref(cc, i + (k + 3 * l1) * ido); di4 = wa3[i - 2] * ref(cc, i + (k + 3 * l1) * ido) - wa3[i - 1] * ref(cc, i - 1 + (k + 3 * l1) * ido); dr5 = wa4[i - 2] * ref(cc, i - 1 + (k + 4 * l1) * ido) + wa4[i - 1] * ref(cc, i + (k + 4 * l1) * ido); di5 = wa4[i - 2] * ref(cc, i + (k + 4 * l1) * ido) - wa4[i - 1] * ref(cc, i - 1 + (k + 4 * l1) * ido); cr2 = dr2 + dr5; ci5 = dr5 - dr2; cr5 = di2 - di5; ci2 = di2 + di5; cr3 = dr3 + dr4; ci4 = dr4 - dr3; cr4 = di3 - di4; ci3 = di3 + di4; ch[i - 1 + 5 * k * ido] = ref(cc, i - 1 + k * ido) + cr2 + cr3; ch[i + 5 * k * ido] = ref(cc, i + k * ido) + ci2 + ci3; tr2 = ref(cc, i - 1 + k * ido) + tr11 * cr2 + tr12 * cr3; ti2 = ref(cc, i + k * ido) + tr11 * ci2 + tr12 * ci3; tr3 = ref(cc, i - 1 + k * ido) + tr12 * cr2 + tr11 * cr3; ti3 = ref(cc, i + k * ido) + tr12 * ci2 + tr11 * ci3; tr5 = ti11 * cr5 + ti12 * cr4; ti5 = ti11 * ci5 + ti12 * ci4; tr4 = ti12 * cr5 - ti11 * cr4; ti4 = ti12 * ci5 - ti11 * ci4; ch[i - 1 + (5 * k + 2) * ido] = tr2 + tr5; ch[ic - 1 + (5 * k + 1) * ido] = tr2 - tr5; ch[i + (5 * k + 2) * ido] = ti2 + ti5; ch[ic + (5 * k + 1) * ido] = ti5 - ti2; ch[i - 1 + (5 * k + 4) * ido] = tr3 + tr4; ch[ic - 1 + (5 * k + 3) * ido] = tr3 - tr4; ch[i + (5 * k + 4) * ido] = ti3 + ti4; ch[ic + (5 * k + 3) * ido] = ti4 - ti3; } } } /* radf5 */ static void radb5(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[], const Treal wa4[]) { static const Treal tr11 = 0.309016994374947; static const Treal ti11 = 0.951056516295154; static const Treal tr12 = -0.809016994374947; static const Treal ti12 = 0.587785252292473; int i, k, ic; Treal ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5; for (k = 0; k < l1; k++) { ti5 = 2 * ref(cc, (5 * k + 2) * ido); ti4 = 2 * ref(cc, (5 * k + 4) * ido); tr2 = 2 * ref(cc, ido - 1 + (5 * k + 1) * ido); tr3 = 2 * ref(cc, ido - 1 + (5 * k + 3) * ido); ch[k * ido] = ref(cc, 5 * k * ido) + tr2 + tr3; cr2 = ref(cc, 5 * k * ido) + tr11 * tr2 + tr12 * tr3; cr3 = ref(cc, 5 * k * ido) + tr12 * tr2 + tr11 * tr3; ci5 = ti11 * ti5 + ti12 * ti4; ci4 = ti12 * ti5 - ti11 * ti4; ch[(k + l1) * ido] = cr2 - ci5; ch[(k + 2 * l1) * ido] = cr3 - ci4; ch[(k + 3 * l1) * ido] = cr3 + ci4; ch[(k + 4 * l1) * ido] = cr2 + ci5; } if (ido == 1) return; for (k = 0; k < l1; ++k) { for (i = 2; i < ido; i += 2) { ic = ido - i; ti5 = ref(cc, i + (5 * k + 2) * ido) + ref(cc, ic + (5 * k + 1) * ido); ti2 = ref(cc, i + (5 * k + 2) * ido) - ref(cc, ic + (5 * k + 1) * ido); ti4 = ref(cc, i + (5 * k + 4) * ido) + ref(cc, ic + (5 * k + 3) * ido); ti3 = ref(cc, i + (5 * k + 4) * ido) - ref(cc, ic + (5 * k + 3) * ido); tr5 = ref(cc, i - 1 + (5 * k + 2) * ido) - ref(cc, ic - 1 + (5 * k + 1) * ido); tr2 = ref(cc, i - 1 + (5 * k + 2) * ido) + ref(cc, ic - 1 + (5 * k + 1) * ido); tr4 = ref(cc, i - 1 + (5 * k + 4) * ido) - ref(cc, ic - 1 + (5 * k + 3) * ido); tr3 = ref(cc, i - 1 + (5 * k + 4) * ido) + ref(cc, ic - 1 + (5 * k + 3) * ido); ch[i - 1 + k * ido] = ref(cc, i - 1 + 5 * k * ido) + tr2 + tr3; ch[i + k * ido] = ref(cc, i + 5 * k * ido) + ti2 + ti3; cr2 = ref(cc, i - 1 + 5 * k * ido) + tr11 * tr2 + tr12 * tr3; ci2 = ref(cc, i + 5 * k * ido) + tr11 * ti2 + tr12 * ti3; cr3 = ref(cc, i - 1 + 5 * k * ido) + tr12 * tr2 + tr11 * tr3; ci3 = ref(cc, i + 5 * k * ido) + tr12 * ti2 + tr11 * ti3; cr5 = ti11 * tr5 + ti12 * tr4; ci5 = ti11 * ti5 + ti12 * ti4; cr4 = ti12 * tr5 - ti11 * tr4; ci4 = ti12 * ti5 - ti11 * ti4; dr3 = cr3 - ci4; dr4 = cr3 + ci4; di3 = ci3 + cr4; di4 = ci3 - cr4; dr5 = cr2 + ci5; dr2 = cr2 - ci5; di5 = ci2 - cr5; di2 = ci2 + cr5; ch[i - 1 + (k + l1) * ido] = wa1[i - 2] * dr2 - wa1[i - 1] * di2; ch[i + (k + l1) * ido] = wa1[i - 2] * di2 + wa1[i - 1] * dr2; ch[i - 1 + (k + 2 * l1) * ido] = wa2[i - 2] * dr3 - wa2[i - 1] * di3; ch[i + (k + 2 * l1) * ido] = wa2[i - 2] * di3 + wa2[i - 1] * dr3; ch[i - 1 + (k + 3 * l1) * ido] = wa3[i - 2] * dr4 - wa3[i - 1] * di4; ch[i + (k + 3 * l1) * ido] = wa3[i - 2] * di4 + wa3[i - 1] * dr4; ch[i - 1 + (k + 4 * l1) * ido] = wa4[i - 2] * dr5 - wa4[i - 1] * di5; ch[i + (k + 4 * l1) * ido] = wa4[i - 2] * di5 + wa4[i - 1] * dr5; } } } /* radb5 */ static void radfg(int ido, int ip, int l1, int idl1, Treal cc[], Treal ch[], const Treal wa[]) { static const Treal twopi = 6.28318530717959; int idij, ipph, i, j, k, l, j2, ic, jc, lc, ik, is, nbd; Treal dc2, ai1, ai2, ar1, ar2, ds2, dcp, arg, dsp, ar1h, ar2h; arg = twopi / ip; dcp = cos(arg); dsp = sin(arg); ipph = (ip + 1) / 2; nbd = (ido - 1) / 2; if (ido != 1) { for (ik = 0; ik < idl1; ik++) ch[ik] = cc[ik]; for (j = 1; j < ip; j++) for (k = 0; k < l1; k++) ch[(k + j * l1) * ido] = cc[(k + j * l1) * ido]; if (nbd <= l1) { is = -ido; for (j = 1; j < ip; j++) { is += ido; idij = is - 1; for (i = 2; i < ido; i += 2) { idij += 2; for (k = 0; k < l1; k++) { ch[i - 1 + (k + j * l1) * ido] = wa[idij - 1] * cc[i - 1 + (k + j * l1) * ido] + wa[idij] * cc[i + (k + j * l1) * ido]; ch[i + (k + j * l1) * ido] = wa[idij - 1] * cc[i + (k + j * l1) * ido] - wa[idij] * cc[i - 1 + (k + j * l1) * ido]; } } } } else { is = -ido; for (j = 1; j < ip; j++) { is += ido; for (k = 0; k < l1; k++) { idij = is - 1; for (i = 2; i < ido; i += 2) { idij += 2; ch[i - 1 + (k + j * l1) * ido] = wa[idij - 1] * cc[i - 1 + (k + j * l1) * ido] + wa[idij] * cc[i + (k + j * l1) * ido]; ch[i + (k + j * l1) * ido] = wa[idij - 1] * cc[i + (k + j * l1) * ido] - wa[idij] * cc[i - 1 + (k + j * l1) * ido]; } } } } if (nbd >= l1) { for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { cc[i - 1 + (k + j * l1) * ido] = ch[i - 1 + (k + j * l1) * ido] + ch[i - 1 + (k + jc * l1) * ido]; cc[i - 1 + (k + jc * l1) * ido] = ch[i + (k + j * l1) * ido] - ch[i + (k + jc * l1) * ido]; cc[i + (k + j * l1) * ido] = ch[i + (k + j * l1) * ido] + ch[i + (k + jc * l1) * ido]; cc[i + (k + jc * l1) * ido] = ch[i - 1 + (k + jc * l1) * ido] - ch[i - 1 + (k + j * l1) * ido]; } } } } else { for (j = 1; j < ipph; j++) { jc = ip - j; for (i = 2; i < ido; i += 2) { for (k = 0; k < l1; k++) { cc[i - 1 + (k + j * l1) * ido] = ch[i - 1 + (k + j * l1) * ido] + ch[i - 1 + (k + jc * l1) * ido]; cc[i - 1 + (k + jc * l1) * ido] = ch[i + (k + j * l1) * ido] - ch[i + (k + jc * l1) * ido]; cc[i + (k + j * l1) * ido] = ch[i + (k + j * l1) * ido] + ch[i + (k + jc * l1) * ido]; cc[i + (k + jc * l1) * ido] = ch[i - 1 + (k + jc * l1) * ido] - ch[i - 1 + (k + j * l1) * ido]; } } } } } else { /* now ido == 1 */ for (ik = 0; ik < idl1; ik++) cc[ik] = ch[ik]; } for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { cc[(k + j * l1) * ido] = ch[(k + j * l1) * ido] + ch[(k + jc * l1) * ido]; cc[(k + jc * l1) * ido] = ch[(k + jc * l1) * ido] - ch[(k + j * l1) * ido]; } } ar1 = 1; ai1 = 0; for (l = 1; l < ipph; l++) { lc = ip - l; ar1h = dcp * ar1 - dsp * ai1; ai1 = dcp * ai1 + dsp * ar1; ar1 = ar1h; for (ik = 0; ik < idl1; ik++) { ch[ik + l * idl1] = cc[ik] + ar1 * cc[ik + idl1]; ch[ik + lc * idl1] = ai1 * cc[ik + (ip - 1) * idl1]; } dc2 = ar1; ds2 = ai1; ar2 = ar1; ai2 = ai1; for (j = 2; j < ipph; j++) { jc = ip - j; ar2h = dc2 * ar2 - ds2 * ai2; ai2 = dc2 * ai2 + ds2 * ar2; ar2 = ar2h; for (ik = 0; ik < idl1; ik++) { ch[ik + l * idl1] += ar2 * cc[ik + j * idl1]; ch[ik + lc * idl1] += ai2 * cc[ik + jc * idl1]; } } } for (j = 1; j < ipph; j++) for (ik = 0; ik < idl1; ik++) ch[ik] += cc[ik + j * idl1]; if (ido >= l1) { for (k = 0; k < l1; k++) { for (i = 0; i < ido; i++) { ref(cc, i + k * ip * ido) = ch[i + k * ido]; } } } else { for (i = 0; i < ido; i++) { for (k = 0; k < l1; k++) { ref(cc, i + k * ip * ido) = ch[i + k * ido]; } } } for (j = 1; j < ipph; j++) { jc = ip - j; j2 = 2 * j; for (k = 0; k < l1; k++) { ref(cc, ido - 1 + (j2 - 1 + k * ip) * ido) = ch[(k + j * l1) * ido]; ref(cc, (j2 + k * ip) * ido) = ch[(k + jc * l1) * ido]; } } if (ido == 1) return; if (nbd >= l1) { for (j = 1; j < ipph; j++) { jc = ip - j; j2 = 2 * j; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; ref(cc, i - 1 + (j2 + k * ip) * ido) = ch[i - 1 + (k + j * l1) * ido] + ch[i - 1 + (k + jc * l1) * ido]; ref(cc, ic - 1 + (j2 - 1 + k * ip) * ido) = ch[i - 1 + (k + j * l1) * ido] - ch[i - 1 + (k + jc * l1) * ido]; ref(cc, i + (j2 + k * ip) * ido) = ch[i + (k + j * l1) * ido] + ch[i + (k + jc * l1) * ido]; ref(cc, ic + (j2 - 1 + k * ip) * ido) = ch[i + (k + jc * l1) * ido] - ch[i + (k + j * l1) * ido]; } } } } else { for (j = 1; j < ipph; j++) { jc = ip - j; j2 = 2 * j; for (i = 2; i < ido; i += 2) { ic = ido - i; for (k = 0; k < l1; k++) { ref(cc, i - 1 + (j2 + k * ip) * ido) = ch[i - 1 + (k + j * l1) * ido] + ch[i - 1 + (k + jc * l1) * ido]; ref(cc, ic - 1 + (j2 - 1 + k * ip) * ido) = ch[i - 1 + (k + j * l1) * ido] - ch[i - 1 + (k + jc * l1) * ido]; ref(cc, i + (j2 + k * ip) * ido) = ch[i + (k + j * l1) * ido] + ch[i + (k + jc * l1) * ido]; ref(cc, ic + (j2 - 1 + k * ip) * ido) = ch[i + (k + jc * l1) * ido] - ch[i + (k + j * l1) * ido]; } } } } } /* radfg */ static void radbg(int ido, int ip, int l1, int idl1, Treal cc[], Treal ch[], const Treal wa[]) { static const Treal twopi = 6.28318530717959; int idij, ipph, i, j, k, l, j2, ic, jc, lc, ik, is; Treal dc2, ai1, ai2, ar1, ar2, ds2; int nbd; Treal dcp, arg, dsp, ar1h, ar2h; arg = twopi / ip; dcp = cos(arg); dsp = sin(arg); nbd = (ido - 1) / 2; ipph = (ip + 1) / 2; if (ido >= l1) { for (k = 0; k < l1; k++) { for (i = 0; i < ido; i++) { ch[i + k * ido] = ref(cc, i + k * ip * ido); } } } else { for (i = 0; i < ido; i++) { for (k = 0; k < l1; k++) { ch[i + k * ido] = ref(cc, i + k * ip * ido); } } } for (j = 1; j < ipph; j++) { jc = ip - j; j2 = 2 * j; for (k = 0; k < l1; k++) { ch[(k + j * l1) * ido] = ref(cc, ido - 1 + (j2 - 1 + k * ip) * ido) + ref(cc, ido - 1 + (j2 - 1 + k * ip) * ido); ch[(k + jc * l1) * ido] = ref(cc, (j2 + k * ip) * ido) + ref(cc, (j2 + k * ip) * ido); } } if (ido != 1) { if (nbd >= l1) { for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; ch[i - 1 + (k + j * l1) * ido] = ref(cc, i - 1 + (2 * j + k * ip) * ido) + ref(cc, ic - 1 + (2 * j - 1 + k * ip) * ido); ch[i - 1 + (k + jc * l1) * ido] = ref(cc, i - 1 + (2 * j + k * ip) * ido) - ref(cc, ic - 1 + (2 * j - 1 + k * ip) * ido); ch[i + (k + j * l1) * ido] = ref(cc, i + (2 * j + k * ip) * ido) - ref(cc, ic + (2 * j - 1 + k * ip) * ido); ch[i + (k + jc * l1) * ido] = ref(cc, i + (2 * j + k * ip) * ido) + ref(cc, ic + (2 * j - 1 + k * ip) * ido); } } } } else { for (j = 1; j < ipph; j++) { jc = ip - j; for (i = 2; i < ido; i += 2) { ic = ido - i; for (k = 0; k < l1; k++) { ch[i - 1 + (k + j * l1) * ido] = ref(cc, i - 1 + (2 * j + k * ip) * ido) + ref(cc, ic - 1 + (2 * j - 1 + k * ip) * ido); ch[i - 1 + (k + jc * l1) * ido] = ref(cc, i - 1 + (2 * j + k * ip) * ido) - ref(cc, ic - 1 + (2 * j - 1 + k * ip) * ido); ch[i + (k + j * l1) * ido] = ref(cc, i + (2 * j + k * ip) * ido) - ref(cc, ic + (2 * j - 1 + k * ip) * ido); ch[i + (k + jc * l1) * ido] = ref(cc, i + (2 * j + k * ip) * ido) + ref(cc, ic + (2 * j - 1 + k * ip) * ido); } } } } } ar1 = 1; ai1 = 0; for (l = 1; l < ipph; l++) { lc = ip - l; ar1h = dcp * ar1 - dsp * ai1; ai1 = dcp * ai1 + dsp * ar1; ar1 = ar1h; for (ik = 0; ik < idl1; ik++) { cc[ik + l * idl1] = ch[ik] + ar1 * ch[ik + idl1]; cc[ik + lc * idl1] = ai1 * ch[ik + (ip - 1) * idl1]; } dc2 = ar1; ds2 = ai1; ar2 = ar1; ai2 = ai1; for (j = 2; j < ipph; j++) { jc = ip - j; ar2h = dc2 * ar2 - ds2 * ai2; ai2 = dc2 * ai2 + ds2 * ar2; ar2 = ar2h; for (ik = 0; ik < idl1; ik++) { cc[ik + l * idl1] += ar2 * ch[ik + j * idl1]; cc[ik + lc * idl1] += ai2 * ch[ik + jc * idl1]; } } } for (j = 1; j < ipph; j++) { for (ik = 0; ik < idl1; ik++) { ch[ik] += ch[ik + j * idl1]; } } for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { ch[(k + j * l1) * ido] = cc[(k + j * l1) * ido] - cc[(k + jc * l1) * ido]; ch[(k + jc * l1) * ido] = cc[(k + j * l1) * ido] + cc[(k + jc * l1) * ido]; } } if (ido == 1) return; if (nbd >= l1) { for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ch[i - 1 + (k + j * l1) * ido] = cc[i - 1 + (k + j * l1) * ido] - cc[i + (k + jc * l1) * ido]; ch[i - 1 + (k + jc * l1) * ido] = cc[i - 1 + (k + j * l1) * ido] + cc[i + (k + jc * l1) * ido]; ch[i + (k + j * l1) * ido] = cc[i + (k + j * l1) * ido] + cc[i - 1 + (k + jc * l1) * ido]; ch[i + (k + jc * l1) * ido] = cc[i + (k + j * l1) * ido] - cc[i - 1 + (k + jc * l1) * ido]; } } } } else { for (j = 1; j < ipph; j++) { jc = ip - j; for (i = 2; i < ido; i += 2) { for (k = 0; k < l1; k++) { ch[i - 1 + (k + j * l1) * ido] = cc[i - 1 + (k + j * l1) * ido] - cc[i + (k + jc * l1) * ido]; ch[i - 1 + (k + jc * l1) * ido] = cc[i - 1 + (k + j * l1) * ido] + cc[i + (k + jc * l1) * ido]; ch[i + (k + j * l1) * ido] = cc[i + (k + j * l1) * ido] + cc[i - 1 + (k + jc * l1) * ido]; ch[i + (k + jc * l1) * ido] = cc[i + (k + j * l1) * ido] - cc[i - 1 + (k + jc * l1) * ido]; } } } } for (ik = 0; ik < idl1; ik++) cc[ik] = ch[ik]; for (j = 1; j < ip; j++) for (k = 0; k < l1; k++) cc[(k + j * l1) * ido] = ch[(k + j * l1) * ido]; if (nbd <= l1) { is = -ido; for (j = 1; j < ip; j++) { is += ido; idij = is - 1; for (i = 2; i < ido; i += 2) { idij += 2; for (k = 0; k < l1; k++) { cc[i - 1 + (k + j * l1) * ido] = wa[idij - 1] * ch[i - 1 + (k + j * l1) * ido] - wa[idij] * ch[i + (k + j * l1) * ido]; cc[i + (k + j * l1) * ido] = wa[idij - 1] * ch[i + (k + j * l1) * ido] + wa[idij] * ch[i - 1 + (k + j * l1) * ido]; } } } } else { is = -ido; for (j = 1; j < ip; j++) { is += ido; for (k = 0; k < l1; k++) { idij = is; for (i = 2; i < ido; i += 2) { idij += 2; cc[i - 1 + (k + j * l1) * ido] = wa[idij - 1] * ch[i - 1 + (k + j * l1) * ido] - wa[idij] * ch[i + (k + j * l1) * ido]; cc[i + (k + j * l1) * ido] = wa[idij - 1] * ch[i + (k + j * l1) * ido] + wa[idij] * ch[i - 1 + (k + j * l1) * ido]; } } } } } /* radbg */ /* ---------------------------------------------------------------------- cfftf1, cfftf, cfftb, cffti1, cffti. Complex FFTs. ---------------------------------------------------------------------- */ static void cfftf1(int n, Treal c[], Treal ch[], const Treal wa[], const int ifac[MAXFAC + 2], int isign) { int idot, i; int k1, l1, l2; int na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1; Treal *cinput, *coutput; nf = ifac[1]; na = 0; l1 = 1; iw = 0; for (k1 = 2; k1 <= nf + 1; k1++) { ip = ifac[k1]; l2 = ip * l1; ido = n / l2; idot = ido + ido; idl1 = idot * l1; if (na) { cinput = ch; coutput = c; } else { cinput = c; coutput = ch; } switch (ip) { case 4: ix2 = iw + idot; ix3 = ix2 + idot; passf4(idot, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3], isign); na = !na; break; case 2: passf2(idot, l1, cinput, coutput, &wa[iw], isign); na = !na; break; case 3: ix2 = iw + idot; passf3(idot, l1, cinput, coutput, &wa[iw], &wa[ix2], isign); na = !na; break; case 5: ix2 = iw + idot; ix3 = ix2 + idot; ix4 = ix3 + idot; passf5(idot, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign); na = !na; break; default: passf(&nac, idot, ip, l1, idl1, cinput, coutput, &wa[iw], isign); if (nac != 0) na = !na; } l1 = l2; iw += (ip - 1) * idot; } if (na == 0) return; for (i = 0; i < 2 * n; i++) c[i] = ch[i]; } /* cfftf1 */ void cfftf(int n, Treal c[], Treal wsave[]) { int iw1, iw2; if (n == 1) return; iw1 = 2 * n; iw2 = iw1 + 2 * n; cfftf1(n, c, wsave, wsave + iw1, (int *)(wsave + iw2), -1); } /* cfftf */ void cfftb(int n, Treal c[], Treal wsave[]) { int iw1, iw2; if (n == 1) return; iw1 = 2 * n; iw2 = iw1 + 2 * n; cfftf1(n, c, wsave, wsave + iw1, (int *)(wsave + iw2), +1); } /* cfftb */ static void factorize(int n, int ifac[MAXFAC + 2]) /* Factorize n in factors of 2,3,4,5 and rest. On exit, ifac[0] contains n and ifac[1] contains number of factors, the factors start from ifac[2]. */ { static const int ntryh[4] = {3, 4, 2, 5}; int ntry = 3, i, j = 0, ib, nf = 0, nl = n, nq, nr; startloop: if (j < 4) ntry = ntryh[j]; else ntry += 2; j++; do { nq = nl / ntry; nr = nl - ntry * nq; if (nr != 0) goto startloop; nf++; ifac[nf + 1] = ntry; nl = nq; if (ntry == 2 && nf != 1) { for (i = 2; i <= nf; i++) { ib = nf - i + 2; ifac[ib + 1] = ifac[ib]; } ifac[2] = 2; } } while (nl != 1); ifac[0] = n; ifac[1] = nf; } static void cffti1(int n, Treal wa[], int ifac[MAXFAC + 2]) { static const Treal twopi = 6.28318530717959; Treal arg, argh, argld, fi; int idot, i, j; int i1, k1, l1, l2; int ld, ii, nf, ip; int ido, ipm; factorize(n, ifac); nf = ifac[1]; argh = twopi / (Treal)n; i = 1; l1 = 1; for (k1 = 1; k1 <= nf; k1++) { ip = ifac[k1 + 1]; ld = 0; l2 = l1 * ip; ido = n / l2; idot = ido + ido + 2; ipm = ip - 1; for (j = 1; j <= ipm; j++) { i1 = i; wa[i - 1] = 1; wa[i] = 0; ld += l1; fi = 0; argld = ld * argh; for (ii = 4; ii <= idot; ii += 2) { i += 2; fi += 1; arg = fi * argld; wa[i - 1] = cos(arg); wa[i] = sin(arg); } if (ip > 5) { wa[i1 - 1] = wa[i - 1]; wa[i1] = wa[i]; } } l1 = l2; } } /* cffti1 */ void cffti(int n, Treal wsave[]) { int iw1, iw2; if (n == 1) return; iw1 = 2 * n; iw2 = iw1 + 2 * n; cffti1(n, wsave + iw1, (int *)(wsave + iw2)); } /* cffti */ /* ---------------------------------------------------------------------- rfftf1, rfftb1, rfftf, rfftb, rffti1, rffti. Treal FFTs. ---------------------------------------------------------------------- */ static void rfftf1(int n, Treal c[], Treal ch[], const Treal wa[], const int ifac[MAXFAC + 2]) { int i; int k1, l1, l2, na, kh, nf, ip, iw, ix2, ix3, ix4, ido, idl1; Treal *cinput, *coutput; nf = ifac[1]; na = 1; l2 = n; iw = n - 1; for (k1 = 1; k1 <= nf; ++k1) { kh = nf - k1; ip = ifac[kh + 2]; l1 = l2 / ip; ido = n / l2; idl1 = ido * l1; iw -= (ip - 1) * ido; na = !na; if (na) { cinput = ch; coutput = c; } else { cinput = c; coutput = ch; } switch (ip) { case 4: ix2 = iw + ido; ix3 = ix2 + ido; radf4(ido, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3]); break; case 2: radf2(ido, l1, cinput, coutput, &wa[iw]); break; case 3: ix2 = iw + ido; radf3(ido, l1, cinput, coutput, &wa[iw], &wa[ix2]); break; case 5: ix2 = iw + ido; ix3 = ix2 + ido; ix4 = ix3 + ido; radf5(ido, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4]); break; default: if (ido == 1) na = !na; if (na == 0) { radfg(ido, ip, l1, idl1, c, ch, &wa[iw]); na = 1; } else { radfg(ido, ip, l1, idl1, ch, c, &wa[iw]); na = 0; } } l2 = l1; } if (na == 1) return; for (i = 0; i < n; i++) c[i] = ch[i]; } /* rfftf1 */ void rfftb1(int n, Treal c[], Treal ch[], const Treal wa[], const int ifac[MAXFAC + 2]) { int i; int k1, l1, l2, na, nf, ip, iw, ix2, ix3, ix4, ido, idl1; Treal *cinput, *coutput; nf = ifac[1]; na = 0; l1 = 1; iw = 0; for (k1 = 1; k1 <= nf; k1++) { ip = ifac[k1 + 1]; l2 = ip * l1; ido = n / l2; idl1 = ido * l1; if (na) { cinput = ch; coutput = c; } else { cinput = c; coutput = ch; } switch (ip) { case 4: ix2 = iw + ido; ix3 = ix2 + ido; radb4(ido, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3]); na = !na; break; case 2: radb2(ido, l1, cinput, coutput, &wa[iw]); na = !na; break; case 3: ix2 = iw + ido; radb3(ido, l1, cinput, coutput, &wa[iw], &wa[ix2]); na = !na; break; case 5: ix2 = iw + ido; ix3 = ix2 + ido; ix4 = ix3 + ido; radb5(ido, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4]); na = !na; break; default: radbg(ido, ip, l1, idl1, cinput, coutput, &wa[iw]); if (ido == 1) na = !na; } l1 = l2; iw += (ip - 1) * ido; } if (na == 0) return; for (i = 0; i < n; i++) c[i] = ch[i]; } /* rfftb1 */ void rfftf(int n, Treal r[], Treal wsave[]) { if (n == 1) return; rfftf1(n, r, wsave, wsave + n, (int *)(wsave + 2 * n)); } /* rfftf */ void rfftb(int n, Treal r[], Treal wsave[]) { if (n == 1) return; rfftb1(n, r, wsave, wsave + n, (int *)(wsave + 2 * n)); } /* rfftb */ static void rffti1(int n, Treal wa[], int ifac[MAXFAC + 2]) { static const Treal twopi = 6.28318530717959; Treal arg, argh, argld, fi; int i, j; int k1, l1, l2; int ld, ii, nf, ip, is; int ido, ipm, nfm1; factorize(n, ifac); nf = ifac[1]; argh = twopi / n; is = 0; nfm1 = nf - 1; l1 = 1; if (nfm1 == 0) return; for (k1 = 1; k1 <= nfm1; k1++) { ip = ifac[k1 + 1]; ld = 0; l2 = l1 * ip; ido = n / l2; ipm = ip - 1; for (j = 1; j <= ipm; ++j) { ld += l1; i = is; argld = (Treal)ld * argh; fi = 0; for (ii = 3; ii <= ido; ii += 2) { i += 2; fi += 1; arg = fi * argld; wa[i - 2] = cos(arg); wa[i - 1] = sin(arg); } is += ido; } l1 = l2; } } /* rffti1 */ void rffti(int n, Treal wsave[]) { if (n == 1) return; rffti1(n, wsave + n, (int *)(wsave + 2 * n)); } /* rffti */ #ifdef __cplusplus } #endif GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/read_ALOS_sarleader.c000644 015705 000000 00000041747 13505462014 025054 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: 15 August 07 RJM * bug fixes get_orbit_info * conversions from string to values altered; * seemed to break on 64 * bit linux systems unless verbose flag set; not clear * why; perhaps there * is another underlying problem somewhere... * make sure that * tmp string is null-terminated before passing to atoi * could be done * more elegantly I think * 8/11/08 - * added check for SAR mode and added global SAR_mode * define * Q_mean and I_mean for ERSDAC format based on ALOS_format flag * checks for * ERSDAC or AUIG format * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" /* void get_orbit_info(struct ALOS_ORB *, struct SAR_info); void get_attitude_info(struct ALOS_ATT *, int, struct SAR_info); void print_binary_position(struct sarleader_binary *, int, FILE *, FILE *); void read_ALOS_sarleader(FILE *, struct PRM *, struct ALOS_ORB *); void ALOS_ldr_prm(struct SAR_info, struct PRM *); */ void eci2ecr(double[3], double[3], double, double[3], double[3]); double cal2ut1(int, int[3], double); int transform_orbits_ecr2eci(struct ALOS_ORB *); void read_ALOS_sarleader(FILE *ldrfile, struct PRM *prm, struct ALOS_ORB *orb) { char tmp[1000]; char leap_second_flag; int i, nitems, num_orbit_points, num_att_points; struct SAR_info sar; struct sarleader_binary sb; struct ALOS_ATT alos_attitude_info; /* not used at present */ FILE *logfile = NULL; char dummy1[100]; char dummy2[100]; if (verbose) { logfile = fopen("LED.log", "w"); if (logfile == NULL) die("can't open", "LED.log"); fprintf(stderr, " opened LED log file %s \n", "LED.log"); if (verbose) fprintf(stderr, ".... reading sarleader \n"); } /* allocate memory */ sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); sar.varseg = (struct sarleader_fdr_varseg *)malloc(sizeof(struct sarleader_fdr_varseg)); sar.dss_ALOS = (struct sarleader_dss_ALOS *)malloc(sizeof(struct sarleader_dss_ALOS)); sar.platform_ALOS = (struct platform_ALOS *)malloc(sizeof(struct platform_ALOS)); sar.attitude_info_ALOS = (struct attitude_info_ALOS *)malloc(sizeof(struct attitude_info_ALOS)); /* read the file - write output at each stage to assist in debugging */ /* probably don't need it but useful for keeping track */ nitems = fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); if (verbose) print_binary_position(&sb, nitems, ldrfile, logfile); /* The SARLEADER_FDR_FIXSEG_RCS defines the format statement; SARLEADER_FDR_FIXSEG_RVL is a pointer to the structure. Similarly, SARLEADER_FDR_FIXSEG_WCS defines the format for the output. All are defined in sarleader_ALOS.h. This way all you have to do is change the .h file and not the program each time. In theory. RCS are read format (Read Control String) RVL are pointers to structure (I forget why I used RVL) WCS are write format (Write Control String) */ fscanf(ldrfile, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); if (verbose) fprintf(logfile, SARLEADER_FDR_FIXSEG_WCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fscanf(ldrfile, SARLEADER_FDR_VARSEG_RCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); if (verbose) fprintf(logfile, SARLEADER_FDR_VARSEG_WCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); nitems = fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); if (verbose) print_binary_position(&sb, nitems, ldrfile, logfile); fscanf(ldrfile, SARLEADER_DSS_RCS_ALOS, SARLEADER_DSS_RVL_ALOS(sar.dss_ALOS)); if (verbose) fprintf(logfile, SARLEADER_DSS_WCS_ALOS, SARLEADER_DSS_RVL_ALOS(sar.dss_ALOS)); /* check format ERSDAC or AUIG */ if (strncmp(sar.dss_ALOS->processing_system_id, "SKY", 3) == 0) ALOS_format = 1; if (strncmp(sar.dss_ALOS->processing_system_id, "ALOS", 4) == 0) ALOS_format = 0; if (verbose) fprintf(stderr, " using ALOS_format %d: %3s\n", ALOS_format, sar.dss_ALOS->processing_system_id); SAR_mode = -1; SAR_mode = atoi(&sar.dss_ALOS->sensor_id_and_mode[13]); if (verbose) { if (SAR_mode == 0) fprintf(stderr, "SAR mode |%.32s| (HIGH RESOLUTION)\n", sar.dss_ALOS->sensor_id_and_mode); if (SAR_mode == 1) fprintf(stderr, "SAR mode |%.32s| (WIDE OBSERVATION)\n", sar.dss_ALOS->sensor_id_and_mode); if (SAR_mode == 2) fprintf(stderr, "SAR mode |%.32s| (POLARIMETRY)\n", sar.dss_ALOS->sensor_id_and_mode); } if (SAR_mode == -1) { if (verbose) fprintf(stderr, "uncertain SAR mode; assuming high resolution\n"); SAR_mode = 0; } nitems = fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); if (verbose) print_binary_position(&sb, nitems, ldrfile, logfile); fscanf(ldrfile, PLATFORM_RCS_ALOS, PLATFORM_RVL_ALOS(sar.platform_ALOS)); if (verbose) fprintf(logfile, PLATFORM_WCS_ALOS, PLATFORM_RVL_ALOS(sar.platform_ALOS)); /* read in orbit positions and velocities into the structure sar.position_ALOS */ /* the number of points should be 28 */ num_orbit_points = atoi(strncpy(dummy1, sar.platform_ALOS->num_data_points, sizeof(sar.platform_ALOS->num_data_points))); sar.position_ALOS = (struct position_vector_ALOS *)malloc(num_orbit_points * sizeof(struct position_vector_ALOS)); if ((verbose) && (num_orbit_points != 28)) fprintf(stderr, "Warning: number of orbit points %d != 28\n", num_orbit_points); if (verbose) fprintf(stderr, ".... reading sarleader %d\n", num_orbit_points); for (i = 0; i < num_orbit_points; i++) { fscanf(ldrfile, POSITION_VECTOR_RCS_ALOS, POSITION_VECTOR_RVL_ALOS(&sar.position_ALOS[i])); if (verbose) fprintf(logfile, POSITION_VECTOR_WCS_ALOS, POSITION_VECTOR_RVL_ALOS(&sar.position_ALOS[i])); } /* mostly blanks with a leap second in between; ought to put in structure */ fscanf(ldrfile, "%18c%1c%579c", &tmp[0], &leap_second_flag, &tmp[0]); nitems = fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); if (verbose) print_binary_position(&sb, nitems, ldrfile, logfile); /* read in attitude data - should be 22 points of pitch, yaw, and roll */ fscanf(ldrfile, ATTITUDE_INFO_RCS_ALOS, ATTITUDE_INFO_RVL_ALOS(sar.attitude_info_ALOS)); if (verbose) fprintf(logfile, ATTITUDE_INFO_WCS_ALOS, ATTITUDE_INFO_RVL_ALOS(sar.attitude_info_ALOS)); num_att_points = atoi(strncpy(dummy2, sar.attitude_info_ALOS->num_att_data_points, sizeof(sar.attitude_info_ALOS->num_att_data_points))); if (verbose) if (num_att_points != 22) fprintf(stderr, "Warning: number of attitude points %d != 22\n", num_att_points); if (verbose) fprintf(stderr, ".... reading sarleader %d\n", num_att_points); sar.attitude_ALOS = (struct attitude_data_ALOS *)malloc(num_att_points * sizeof(struct attitude_data_ALOS)); for (i = 0; i < num_att_points; i++) { fscanf(ldrfile, ATTITUDE_DATA_RCS_ALOS, ATTITUDE_DATA_RVL_ALOS(&sar.attitude_ALOS[i])); if (verbose) fprintf(logfile, ATTITUDE_DATA_WCS_ALOS, ATTITUDE_DATA_RVL_ALOS(&sar.attitude_ALOS[i])); } /* now create the prm file */ ALOS_ldr_prm(sar, prm); /* get orbit and attitude information */ /* read from sar info and put into alos_orbit_info and alos_attitude_info */ /* debug by Xiaopeng Tong fprintf(stderr,"debugging the readleader file\n"); fprintf(stderr,"tmp = %s",dummy1); fprintf(stderr,"%d\n",num_orbit_points); fprintf(stderr,"num_att_data_points = %s\n",sar.attitude_info_ALOS->num_att_data_points); fprintf(stderr,"tmp = %s\n",dummy2); fprintf(stderr,"%d,%d\n",num_att_points,sizeof(sar.attitude_info_ALOS->num_att_data_points)); fprintf(stderr,"num_data_points = %s\n",sar.platform_ALOS->num_data_points); fprintf(stderr,"sizeof = %d\n",sizeof(sar.platform_ALOS->num_data_points)); fprintf(stderr,"%d\n",num_orbit_points); */ orb->nd = num_orbit_points; get_orbit_info(orb, sar); /* correct ERSDAC from earth-centered-rotating to fixed */ if (ALOS_format == 1) transform_orbits_ecr2eci(orb); get_attitude_info(&alos_attitude_info, num_att_points, sar); if (verbose) fclose(logfile); } /*---------------------------------------------------------------*/ void print_binary_position(struct sarleader_binary *sb, int nitems, FILE *ldrfile, FILE *logfile) { fprintf(logfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(sb)); fprintf(logfile, " read %d items (%ld bytes) at position %ld\n", nitems, sizeof(struct sarleader_binary), ftell(ldrfile)); } /*---------------------------------------------------------------*/ /* write a PRM file */ /* adapted for ALOS data */ /* needs SC_start_time and SC_end_time (from read_data) */ /* needs sample_rate (from read_sarleader) */ #define FACTOR 1000000 void ALOS_ldr_prm(struct SAR_info sar, struct PRM *prm) { double c_angle; /* nominal PRF and prf in PRM differ at 4 decimal places */ prm->lambda = atof(sar.dss_ALOS->radar_wavelength); /* convert into seconds from MHz */ prm->pulsedur = (atof(sar.dss_ALOS->range_pulse_length) / FACTOR); if (ALOS_format == 0) prm->fs = FACTOR * (atof(sar.dss_ALOS->sampling_rate)); /* chirp linear term */ /* need -1 term */ prm->chirp_slope = -1 * atof(sar.dss_ALOS->range_pulse_amplitude_lin); /* mean value of inphase and quadrature */ prm->xmi = atof(sar.dss_ALOS->dc_bias_i); prm->xmq = atof(sar.dss_ALOS->dc_bias_q); /* need to define for ERSDAC format prm->fs (rng_sample_rate differs by 1000 */ /* xmi, xmq set to 15.5 */ if (ALOS_format == 1) { prm->fs = atof(sar.dss_ALOS->sampling_rate); prm->xmi = 15.5; prm->xmq = 15.5; } /* ellipsoid info */ prm->ra = 1000. * atof(sar.dss_ALOS->ellipsoid_semimajor_axis); prm->rc = 1000. * atof(sar.dss_ALOS->ellipsoid_semiminor_axis); /* orbit direction */ /* A Ascend or D Descend */ strncpy(prm->orbdir, sar.dss_ALOS->time_direction_along_line, 1); /* look direction R or L */ c_angle = atof(sar.dss_ALOS->clock_angle); strcpy(prm->lookdir, "R"); if (c_angle < 0.) strcpy(prm->lookdir, "L"); /* date yymmdd */ strncpy(prm->date, &sar.dss_ALOS->input_scene_center_time[2], 6); prm->date[7] = '\0'; /* set doppler centroid for focussed L1.1 image unles it has already been set */ if (strncmp(sar.dss_ALOS->product_type_id, "BASIC", 5) == 0 && prm->fd1 == 0.0) { prm->fd1 = atof(sar.dss_ALOS->spare11); prm->fdd1 = 0.001 * atof(sar.dss_ALOS->spare12); } /* write it all out */ if (verbose) { fprintf(stdout, "radar_wavelength = %lg\n", prm->lambda); fprintf(stdout, "chirp_slope = %lg\n", prm->chirp_slope); fprintf(stdout, "rng_samp_rate = %lg\n", prm->fs); fprintf(stdout, "I_mean = %lf\n", prm->xmi); fprintf(stdout, "Q_mean = %lf\n", prm->xmq); fprintf(stdout, "orbdir = %s\n", prm->orbdir); fprintf(stdout, "lookdir = %s\n", prm->lookdir); fprintf(stdout, "date = %s\n", prm->date); fprintf(stdout, "fd1 = %lf\n", prm->fd1); fprintf(stdout, "fdd1 = %lf\n", prm->fdd1); } } /*---------------------------------------------------------------*/ void get_attitude_info(struct ALOS_ATT *alos_attitude_info, int num_att_points, struct SAR_info sar) { int i; char tmp[256]; /* sprintf(tmp,"%.4s", sar.attitude_info_ALOS->num_att_data_points); n = strtol(tmp, NULL, 10); */ if (verbose) fprintf(stderr, " number of attitude points %ld \n", strtol(sar.attitude_info_ALOS->num_att_data_points, NULL, 10)); alos_attitude_info->na = num_att_points; for (i = 0; i < num_att_points; i++) { alos_attitude_info->id[i] = strtol(strncpy(tmp, sar.attitude_ALOS[i].day_of_year, 4), NULL, 10); alos_attitude_info->msec[i] = strtol(sar.attitude_ALOS[i].millisecond_day, NULL, 10); if (verbose) fprintf(stderr, " doy %d ms %d \n", alos_attitude_info->id[i], alos_attitude_info->msec[i]); alos_attitude_info->ap[i] = strtod(sar.attitude_ALOS[i].pitch, NULL); alos_attitude_info->ar[i] = strtod(sar.attitude_ALOS[i].roll, NULL); alos_attitude_info->ay[i] = strtod(sar.attitude_ALOS[i].yaw, NULL); if (verbose) fprintf(stderr, "pitch %12.6f roll %12.6f yaw %12.6f\n", alos_attitude_info->ap[i], alos_attitude_info->ar[i], alos_attitude_info->ay[i]); alos_attitude_info->dp[i] = strtod(sar.attitude_ALOS[i].pitch_rate, NULL); alos_attitude_info->dr[i] = strtod(sar.attitude_ALOS[i].roll_rate, NULL); alos_attitude_info->dy[i] = strtod(sar.attitude_ALOS[i].yaw_rate, NULL); if (verbose) fprintf(stderr, "pitch %12.6f roll %12.6f yaw %12.6f\n", alos_attitude_info->dp[i], alos_attitude_info->dr[i], alos_attitude_info->dy[i]); } } /*---------------------------------------------------------------*/ void get_orbit_info(struct ALOS_ORB *orb, struct SAR_info sar) { int i; char tmp[256]; /* transfer to SIO orbit structure */ /* use strncpy to make sure we only read the required number of characters */ /* strncpy returns destination string as well as copies to tmp */ /* 16 August 2007 RJM */ /* this broke; make sure that tmp is null-terminated before handing off to * atoi/atof */ /* changed atol to atoi */ /* probably there is a better way to do this ... */ strncpy(tmp, sar.platform_ALOS->year_of_data_points, sizeof(sar.platform_ALOS->year_of_data_points)); tmp[sizeof(sar.platform_ALOS->year_of_data_points)] = '\0'; orb->iy = atoi(tmp); strncpy(tmp, sar.platform_ALOS->day_of_data_points_in_year, sizeof(sar.platform_ALOS->day_of_data_points_in_year)); tmp[sizeof(sar.platform_ALOS->day_of_data_points_in_year)] = '\0'; orb->id = atoi(tmp); strncpy(tmp, sar.platform_ALOS->sec_of_day_of_data, sizeof(sar.platform_ALOS->sec_of_day_of_data)); tmp[sizeof(sar.platform_ALOS->sec_of_day_of_data)] = '\0'; orb->sec = (double)atof(tmp); strncpy(tmp, sar.platform_ALOS->data_points_time_gap, sizeof(sar.platform_ALOS->data_points_time_gap)); tmp[sizeof(sar.platform_ALOS->data_points_time_gap)] = '\0'; orb->dsec = (double)atof(tmp); /* added 7/27/10 RJM */ orb->pt0 = (24.0 * 60.0 * 60.0) * orb->id + orb->sec; if (verbose) { fprintf(stderr, " nd %d \n", orb->nd); fprintf(stderr, " iy %d \n", orb->iy); fprintf(stderr, " id %d \n", orb->id); fprintf(stderr, " sec %lf \n", orb->sec); fprintf(stderr, " dsec %lf \n", orb->dsec); fprintf(stderr, " pt0 %lf \n", orb->pt0); } orb->points = (struct ORB_XYZ *)malloc(orb->nd * sizeof(struct ORB_XYZ)); /* orbit stuff */ for (i = 0; i < orb->nd; i++) { if (verbose) fprintf(stderr, "orbit point: %d\n", i); strncpy(tmp, sar.position_ALOS[i].pos_x, sizeof(sar.position_ALOS[i].pos_x)); tmp[sizeof(sar.position_ALOS->pos_x)] = '\0'; orb->points[i].px = atof(tmp); strncpy(tmp, sar.position_ALOS[i].pos_y, sizeof(sar.position_ALOS[i].pos_y)); tmp[sizeof(sar.position_ALOS->pos_y)] = '\0'; orb->points[i].py = atof(tmp); strncpy(tmp, sar.position_ALOS[i].pos_z, sizeof(sar.position_ALOS[i].pos_z)); tmp[sizeof(sar.position_ALOS->pos_z)] = '\0'; orb->points[i].pz = atof(tmp); if (verbose) fprintf(stderr, "%g %g %g\n", orb->points[i].px, orb->points[i].py, orb->points[i].pz); strncpy(tmp, sar.position_ALOS[i].vel_x, sizeof(sar.position_ALOS[i].vel_x)); tmp[sizeof(sar.position_ALOS->vel_x)] = '\0'; orb->points[i].vx = atof(tmp); strncpy(tmp, sar.position_ALOS[i].vel_y, sizeof(sar.position_ALOS[i].vel_y)); tmp[sizeof(sar.position_ALOS->vel_y)] = '\0'; orb->points[i].vy = atof(tmp); strncpy(tmp, sar.position_ALOS[i].vel_z, sizeof(sar.position_ALOS[i].vel_z)); tmp[sizeof(sar.position_ALOS->vel_z)] = '\0'; orb->points[i].vz = atof(tmp); if (verbose) fprintf(stderr, "%g %g %g\n", orb->points[i].vx, orb->points[i].vy, orb->points[i].vz); } } /*---------------------------------------------------------------*/ // convert from earth-centered rotating to earth-centered // code by J B but moved by RJM int transform_orbits_ecr2eci(struct ALOS_ORB *orb) { int j; int cal[3], mode; double ecr_pos[3]; double ecr_vel[3]; double eci_pos[3]; double eci_vel[3]; double ut1sec, daysec; for (j = 0; j < orb->nd; j++) { orb->points[j].px = orb->points[j].px; orb->points[j].py = orb->points[j].py; orb->points[j].pz = orb->points[j].pz; orb->points[j].vx = orb->points[j].vx / 1000.; orb->points[j].vy = orb->points[j].vy / 1000.; orb->points[j].vz = orb->points[j].vz / 1000.; eci_pos[0] = orb->points[j].px; eci_pos[1] = orb->points[j].py; eci_pos[2] = orb->points[j].pz; eci_vel[0] = orb->points[j].vx; eci_vel[1] = orb->points[j].vy; eci_vel[2] = orb->points[j].vz; mode = 2; cal[0] = orb->iy; cal[1] = orb->id; cal[2] = -99999; daysec = orb->sec + j * orb->dsec; ut1sec = cal2ut1(mode, cal, daysec); eci2ecr(eci_pos, eci_vel, ut1sec, ecr_pos, ecr_vel); orb->points[j].px = ecr_pos[0]; orb->points[j].py = ecr_pos[1]; orb->points[j].pz = ecr_pos[2]; orb->points[j].vx = ecr_vel[0]; orb->points[j].vy = ecr_vel[1]; orb->points[j].vz = ecr_vel[2]; } return (EXIT_SUCCESS); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/put_sio_struct.c000644 015705 000000 00000016471 13505462014 024363 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" /* #define OUTFILE stdout */ /***************************************************************************/ void put_sio_struct(struct PRM prm, FILE *OUTFILE) { /* set by set_ALOS_defaults */ if (prm.num_valid_az != NULL_INT) fprintf(OUTFILE, "num_valid_az = %d \n", prm.num_valid_az); if (prm.nrows != NULL_INT) fprintf(OUTFILE, "nrows = %d \n", prm.nrows); if (prm.first_line != NULL_INT) fprintf(OUTFILE, "first_line = %d \n", prm.first_line); if (strncmp(prm.deskew, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "deskew = %s \n", prm.deskew); if (prm.caltone != NULL_DOUBLE) fprintf(OUTFILE, "caltone = %lf \n", prm.caltone); if (prm.st_rng_bin != NULL_INT) fprintf(OUTFILE, "st_rng_bin = %d \n", prm.st_rng_bin); if (strncmp(prm.iqflip, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "Flip_iq = %s \n", prm.iqflip); if (strncmp(prm.offset_video, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "offset_video = %s \n", prm.offset_video); if (prm.az_res != NULL_DOUBLE) fprintf(OUTFILE, "az_res = %lf \n", prm.az_res); if (prm.nlooks != NULL_INT) fprintf(OUTFILE, "nlooks = %d \n", prm.nlooks); if (prm.chirp_ext != NULL_INT) fprintf(OUTFILE, "chirp_ext = %d \n", prm.chirp_ext); if (strncmp(prm.srm, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "scnd_rng_mig = %s \n", prm.srm); if (prm.rhww != NULL_DOUBLE) fprintf(OUTFILE, "rng_spec_wgt = %lf \n", prm.rhww); if (prm.pctbw != NULL_DOUBLE) fprintf(OUTFILE, "rm_rng_band = %lf \n", prm.pctbw); if (prm.pctbwaz != NULL_DOUBLE) fprintf(OUTFILE, "rm_az_band = %lf \n", prm.pctbwaz); if (prm.rshift != NULL_INT) fprintf(OUTFILE, "rshift = %d \n", prm.rshift); if (prm.ashift != NULL_INT) fprintf(OUTFILE, "ashift = %d \n", prm.ashift); if (prm.stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "stretch_r = %lf \n", prm.stretch_r); if (prm.stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "stretch_a = %lf \n", prm.stretch_a); if (prm.a_stretch_r != NULL_DOUBLE) fprintf(OUTFILE, "a_stretch_r = %lf \n", prm.a_stretch_r); if (prm.a_stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "a_stretch_a = %lf \n", prm.a_stretch_a); if (prm.first_sample != NULL_INT) fprintf(OUTFILE, "first_sample = %d \n", prm.first_sample); if (prm.SC_identity != NULL_INT) fprintf(OUTFILE, "SC_identity = %d \n", prm.SC_identity); if (prm.fs != NULL_DOUBLE) fprintf(OUTFILE, "rng_samp_rate = %lf \n", prm.fs); /* from read_ALOS_data */ if (strncmp(prm.input_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "input_file = %s \n", prm.input_file); if (prm.num_rng_bins != NULL_INT) fprintf(OUTFILE, "num_rng_bins = %d \n", prm.num_rng_bins); if (prm.bytes_per_line != NULL_INT) fprintf(OUTFILE, "bytes_per_line = %d \n", prm.bytes_per_line); if (prm.good_bytes != NULL_INT) fprintf(OUTFILE, "good_bytes_per_line = %d \n", prm.good_bytes); if (prm.prf != NULL_DOUBLE) fprintf(OUTFILE, "PRF = %lf \n", prm.prf); if (prm.pulsedur != NULL_DOUBLE) fprintf(OUTFILE, "pulse_dur = %e \n", prm.pulsedur); if (prm.near_range != NULL_DOUBLE) fprintf(OUTFILE, "near_range = %lf \n", prm.near_range); if (prm.num_lines != NULL_INT) fprintf(OUTFILE, "num_lines = %d \n", prm.num_lines); if (prm.num_patches != NULL_INT) fprintf(OUTFILE, "num_patches = %d \n", prm.num_patches); if (prm.SC_clock_start != NULL_DOUBLE) fprintf(OUTFILE, "SC_clock_start = %16.10lf \n", prm.SC_clock_start); if (prm.SC_clock_stop != NULL_DOUBLE) fprintf(OUTFILE, "SC_clock_stop = %16.10lf \n", prm.SC_clock_stop); if (prm.clock_start != NULL_DOUBLE) fprintf(OUTFILE, "clock_start = %16.12lf \n", prm.clock_start); if (prm.clock_stop != NULL_DOUBLE) fprintf(OUTFILE, "clock_stop = %16.12lf \n", prm.clock_stop); if (strncmp(prm.led_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "led_file = %s \n", prm.led_file); /* from read_ALOS_ldrfile */ if (strncmp(prm.date, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "date = %.6s \n", prm.date); if (strncmp(prm.orbdir, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "orbdir = %.1s \n", prm.orbdir); if (strncmp(prm.lookdir, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "lookdir = %.1s \n", prm.lookdir); if (prm.lambda != NULL_DOUBLE) fprintf(OUTFILE, "radar_wavelength = %lg \n", prm.lambda); if (prm.chirp_slope != NULL_DOUBLE) fprintf(OUTFILE, "chirp_slope = %lg \n", prm.chirp_slope); if (prm.fs != NULL_DOUBLE) fprintf(OUTFILE, "rng_samp_rate = %lf \n", prm.fs); if (prm.xmi != NULL_DOUBLE) fprintf(OUTFILE, "I_mean = %lg \n", prm.xmi); if (prm.xmq != NULL_DOUBLE) fprintf(OUTFILE, "Q_mean = %lg \n", prm.xmq); if (prm.vel != NULL_DOUBLE) fprintf(OUTFILE, "SC_vel = %lf \n", prm.vel); if (prm.RE != NULL_DOUBLE) fprintf(OUTFILE, "earth_radius = %lf \n", prm.RE); if (prm.ra != NULL_DOUBLE) fprintf(OUTFILE, "equatorial_radius = %lf \n", prm.ra); if (prm.rc != NULL_DOUBLE) fprintf(OUTFILE, "polar_radius = %lf \n", prm.rc); if (prm.ht != NULL_DOUBLE) fprintf(OUTFILE, "SC_height = %lf \n", prm.ht); if (prm.ht_start != NULL_DOUBLE) fprintf(OUTFILE, "SC_height_start = %lf \n", prm.ht_start); if (prm.ht_end != NULL_DOUBLE) fprintf(OUTFILE, "SC_height_end = %lf \n", prm.ht_end); if (prm.fd1 != NULL_DOUBLE) fprintf(OUTFILE, "fd1 = %lf \n", prm.fd1); if (prm.fdd1 != NULL_DOUBLE) fprintf(OUTFILE, "fdd1 = %12.8lf \n", prm.fdd1); if (prm.fddd1 != NULL_DOUBLE) fprintf(OUTFILE, "fddd1 = %lf \n", prm.fddd1); /* from calc_baseline */ /* if (prm.rshift != NULL_INT) fprintf(OUTFILE, "rshift = %d \n",prm.rshift); if (prm.ashift != NULL_INT) fprintf(OUTFILE, "ashift = %d\n",prm.ashift); */ if (prm.sub_int_r != NULL_DOUBLE) fprintf(OUTFILE, "sub_int_r = %f \n", prm.sub_int_r); if (prm.sub_int_a != NULL_DOUBLE) fprintf(OUTFILE, "sub_int_a = %f \n", prm.sub_int_a); if (prm.bpara != NULL_DOUBLE) fprintf(OUTFILE, "B_parallel = %f \n", prm.bpara); if (prm.bperp != NULL_DOUBLE) fprintf(OUTFILE, "B_perpendicular = %f \n", prm.bperp); if (prm.baseline_start != NULL_DOUBLE) fprintf(OUTFILE, "baseline_start = %f \n", prm.baseline_start); if (prm.alpha_start != NULL_DOUBLE) fprintf(OUTFILE, "alpha_start = %f \n", prm.alpha_start); if (prm.baseline_end != NULL_DOUBLE) fprintf(OUTFILE, "baseline_end = %f \n", prm.baseline_end); if (prm.alpha_end != NULL_DOUBLE) fprintf(OUTFILE, "alpha_end = %f \n", prm.alpha_end); /* from sarp */ if (strncmp(prm.SLC_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "SLC_file = %s \n", prm.SLC_file); if (strncmp(prm.dtype, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "dtype = %s \n", prm.dtype); if (prm.SLC_scale != NULL_DOUBLE) fprintf(OUTFILE, "SLC_scale = %f \n", prm.SLC_scale); } /***************************************************************************/ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/ALOS_ldr_orbit.c000644 015705 000000 00000014112 13505462014 024061 0ustar00sandwellwheel000000 000000 /*******************************************************************************/ /* write a PRM file */ /* adapted for ALOS data */ /* needs SC_start_time and SC_end_time (from read_data) */ /* needs sample_rate (from read_sarleader) */ /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 07/13/08 added SC_height_start and * SC_height_end parameters * 07/27/10 merged modifications by * Jeff B to handle ALOSE ERSDAC format use ALOS_format to distinguish * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #define FACTOR 1000000 void ALOS_ldr_orbit(struct ALOS_ORB *orb, struct PRM *prm) { double t1, t2; double re, height, vg; double re_c, re_start, re_end, vg_start, vg_end, vtot, rdot; double height_start, height_end; if (verbose) fprintf(stderr, "ALOS_ldr_orbit\n"); /* ERSDAC PRM differs by a factor of 1000 */ if (ALOS_format == 1) prm->prf = 1000.0 * prm->prf; t1 = (86400.0) * prm->clock_start + (prm->nrows - prm->num_valid_az) / (2.0 * prm->prf); t2 = t1 + prm->num_patches * prm->num_valid_az / prm->prf; calc_height_velocity(orb, prm, t1, t1, &height_start, &re_start, &vg_start, &vtot, &rdot); calc_height_velocity(orb, prm, t2, t2, &height_end, &re_end, &vg_end, &vtot, &rdot); calc_height_velocity(orb, prm, t1, t2, &height, &re_c, &vg, &vtot, &rdot); // fd_orbit = -2.0*rdot/prm->lambda; if (verbose) { fprintf(stderr, " t1 %lf t1 %lf height_start %lf re_start %lf vg_start%lf\n", t1, t1, height_start, re_start, vg_start); fprintf(stderr, " t1 %lf t2 %lf height %lf re_c %lf vg %lf\n", t1, t2, height, re_c, vg); fprintf(stderr, " t2 %lf t2 %lf height_end %lf re__end %lf vg_end %lf\n", t2, t2, height_end, re_end, vg_end); } prm->vel = vg; /* use the center earth radius unless there is a value from the command line */ re = re_c; if (prm->RE > 0.) re = prm->RE; prm->RE = re; prm->ht = height + re_c - re; prm->ht_start = height_start + re_start - re; prm->ht_end = height_end + re_end - re; /* write it all out */ if (verbose) { fprintf(stdout, "SC_vel = %lf \n", prm->vel); fprintf(stdout, "earth_radius = %lf \n", prm->RE); fprintf(stdout, "SC_height = %lf \n", prm->ht); fprintf(stdout, "SC_height_start = %lf \n", prm->ht_start); fprintf(stdout, "SC_height_end = %lf \n", prm->ht_end); } } /*---------------------------------------------------------------*/ /* from David Sandwell's code */ void calc_height_velocity(struct ALOS_ORB *orb, struct PRM *prm, double t1, double t2, double *height, double *re2, double *vg, double *vtot, double *rdot) { int k, ir, nt, nc = 3; double xe, ye, ze; double xs, ys, zs; double x1, y1, z1; double x2, y2, z2; double vx, vy, vz, vs, rs; double rlat, rlatg; double st = 0.0, ct = 0.0, arg, re; double a[3], b[3], c[3]; double time[1000], rng[1000], d[3]; double t0, ro, ra, rc, dt; if (verbose) fprintf(stderr, " ... calc_height_velocity\n"); ro = prm->near_range; ra = prm->ra; /* ellipsoid parameters */ rc = prm->rc; /* ellipsoid parameters */ dt = 200. / prm->prf; /* ERSDAC nt set to 31 instead of (nrows - az) / 100 */ if (ALOS_format == 0) nt = (prm->nrows - prm->num_valid_az) / 100.0; if (ALOS_format == 1) nt = 31; /* make sure this number is at least 31 */ if (nt < 31) nt = 31; /* more time stuff */ t0 = (t1 + t2) / 2.0; t1 = t0 - 2.0; t2 = t0 + 2.0; /* interpolate orbit */ /* _slow does memory allocation each time */ interpolate_ALOS_orbit_slow(orb, t0, &xs, &ys, &zs, &ir); interpolate_ALOS_orbit_slow(orb, t1, &x1, &y1, &z1, &ir); interpolate_ALOS_orbit_slow(orb, t2, &x2, &y2, &z2, &ir); rs = sqrt(xs * xs + ys * ys + zs * zs); /* calculate stuff */ vx = (x2 - x1) / 4.0; vy = (y2 - y1) / 4.0; vz = (z2 - z1) / 4.0; vs = sqrt(vx * vx + vy * vy + vz * vz); *vtot = vs; /* set orbit direction */ if (vz > 0) { strcpy(prm->orbdir, "A"); } else { strcpy(prm->orbdir, "D"); } /* geodetic latitude of the satellite */ rlat = asin(zs / rs); rlatg = atan(tan(rlat) * ra * ra / (rc * rc)); /* ERSDAC use rlatg instead of latg */ if (ALOS_format == 0) { st = sin(rlat); ct = cos(rlat); } if (ALOS_format == 1) { st = sin(rlatg); ct = cos(rlatg); } arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1. / (sqrt(arg)); *re2 = re; *height = rs - *re2; /* compute the vector orthogonal to both the radial vector and velocity vector */ a[0] = xs / rs; a[1] = ys / rs; a[2] = zs / rs; b[0] = vx / vs; b[1] = vy / vs; b[2] = vz / vs; cross3_(a, b, c); /* compute the look angle */ ct = (rs * rs + ro * ro - re * re) / (2. * rs * ro); st = sin(acos(ct)); /* add the satellite and LOS vectors to get the new point */ xe = xs + ro * (-st * c[0] - ct * a[0]); ye = ys + ro * (-st * c[1] - ct * a[1]); ze = zs + ro * (-st * c[2] - ct * a[2]); rlat = asin(ze / re); rlatg = atan(tan(rlat) * ra * ra / (rc * rc)); /* ERSDAC use rlatg instead of latg */ /* compute elipse height in the scene */ if (ALOS_format == 0) { st = sin(rlat); ct = cos(rlat); } if (ALOS_format == 1) { st = sin(rlatg); ct = cos(rlatg); } arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1.0 / (sqrt(arg)); /* now check range over time */ for (k = 0; k < nt; k++) { time[k] = dt * (k - nt / 2); t1 = t0 + time[k]; interpolate_ALOS_orbit_slow(orb, t1, &xs, &ys, &zs, &ir); rng[k] = sqrt((xe - xs) * (xe - xs) + (ye - ys) * (ye - ys) + (ze - zs) * (ze - zs)) - ro; } /* fit a second order polynomial to the range versus time function */ polyfit(time, rng, d, &nt, &nc); *rdot = d[1]; *vg = sqrt(ro * 2. * d[2]); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/xyz2plh.c000644 015705 000000 00000010002 13505462014 022675 0ustar00sandwellwheel000000 000000 /************************************************************************ * xyz2plh Converts XYZ geocentric coordinates to Phi (latitude), * * Lambda (longitude), H (height) referred to an * * ellipsoid of semi-major axis A and flattening FL. * ************************************************************************/ /************************************************************************ * Creator: B. Archinal (USNO) * ************************************************************************/ /************************************************************************ * Modification history: * * 9007.20, BA, Creation * 9507,21, JR, Modified for use with the page programs * 9602.17, MSS, Converted to C. ************************************************************************/ #include "llt2xyz.h" #include void xyz2plh(double *xyz, double *plh, double A, double FL) /********1*********2*********3*********4*********5*********6*********7** * input: * ----------- * A semi-major axis of ellipsoid [units are of distance] * FL flattening of ellipsoid [unitless] * xyz[] geocentric Cartesian coordinates [units are of distance] * * output: * ----------- * plh[] ellipsoidal coordinates of point, in geodetic latitude, * longitude east of Greenwich, and height [units for * latitude=plh[0] and longitude=plh[1] are in degrees; * height=plh[2] are distance and will be the same as * those of the input parameters] * * Local: * ----------- * B semi-minor axis of ellipsoid [same units as A] * * Notes: * ----------- * This routine will fail for points on the Z axis, i.e. if X= Y= 0 * (Phi = +/- 90 degrees). * * Units of input parameters `A' and `xyz' must be the same. * * References: * ----------- * Borkowski, K. M. (1989). "Accurate algorithms to transform geocentric * to geodetic coordinates", *Bulletin Geodesique*, v. 63, pp. 50-56. * * Borkowski, K. M. (1987). "Transformation of geocentric to geodetic * coordinates without approximations", *Astrophysics and Space Science*, * v. 139, n. 1, pp. 1-4. Correction in (1988), v. 146, n. 1, p. 201. * * An equivalent formulation is recommended in the IERS Standards * (1995), draft. * ********1*********2*********3*********4*********5*********6*********7*/ { double B; double d; double e; double f; double g; double p; double q; double r; double t; double v; double x = xyz[0]; double y = xyz[1]; double z = xyz[2]; double zlong; /* * 1.0 compute semi-minor axis and set sign to that of z in order * to get sign of Phi correct */ B = A * (ONE - FL); if (z < ZERO) B = -B; /* * 2.0 compute intermediate values for latitude */ r = sqrt(x * x + y * y); e = (B * z - (A * A - B * B)) / (A * r); f = (B * z + (A * A - B * B)) / (A * r); /* * 3.0 find solution to: * t^4 + 2*E*t^3 + 2*F*t - 1 = 0 */ p = (FOUR / THREE) * (e * f + ONE); q = TWO * (e * e - f * f); d = p * p * p + q * q; if (d >= ZERO) { v = pow((sqrt(d) - q), (ONE / THREE)) - pow((sqrt(d) + q), (ONE / THREE)); } else { v = TWO * sqrt(-p) * cos(acos(q / (p * sqrt(-p))) / THREE); } /* * 4.0 improve v * NOTE: not really necessary unless point is near pole */ if (v * v < fabs(p)) { v = -(v * v * v + TWO * q) / (THREE * p); } g = (sqrt(e * e + v) + e) / TWO; t = sqrt(g * g + (f - v * g) / (TWO * g - e)) - g; plh[0] = atan((A * (ONE - t * t)) / (TWO * B * t)); /* * 5.0 compute height above ellipsoid */ plh[2] = (r - A * t) * cos(plh[0]) + (z - B) * sin(plh[0]); /* * 6.0 compute longitude east of Greenwich */ zlong = atan2(y, x); if (zlong < ZERO) zlong = zlong + twopi; plh[1] = zlong; /* * 7.0 convert latitude and longitude to degrees */ plh[0] = plh[0] * rad_to_deg; plh[1] = plh[1] * rad_to_deg; return; } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/polyfit.c000644 015705 000000 00000005117 13505462014 022756 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" void polyfit(double *T, double *Y, double *C, int *Mp, int *Np) /* T - array of independent variable of length M - input */ /* Y - array of dependent variable of length M - input */ /* C - array of polynomial coefficients length N - output */ /* FORTRAN callable */ { double **A, *B; int i, j, k; int M, N; M = *Mp; N = *Np; if (N > M) { printf(" underdetermined system \n"); exit(-1); } /* malloc the memory for A, and B */ if ((A = (double **)malloc(N * sizeof(double *))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for A-matrix.\n"); exit(-1); } for (i = 0; i < N; i++) { if ((A[i] = (double *)malloc(N * sizeof(double))) == NULL) { fprintf(stderr, "sorry, couldn't allocate memory for A-matrix.\n"); exit(-1); } } if ((B = (double *)malloc(N * sizeof(double))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for B-vector.\n"); exit(-1); } /* zero all the arrays */ for (i = 0; i < N; i++) { B[i] = 0.0; C[i] = 0.0; for (j = 0; j < N; j++) A[i][j] = 0.0; } /* set up A and B for polynomial fit of order N */ for (j = 0; j < N; j++) { for (k = 0; k < M; k++) { B[j] = B[j] + Y[k] * pow(T[k], j); } } for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { for (k = 0; k < M; k++) A[i][j] = A[i][j] + pow(T[k], j + i); } } gauss_jordan(A, B, C, &N); /* solve the equations */ free(A); free(B); } void gauss_jordan(double **A, double *B, double *X, int *Np) { /* routine for solving an N by N system of linear equations B = A*X using Gaussian elimination with back substitution. FORTRAN callable */ double temp, factor, sum; int m, u, p; int j, k, l, N, N0; N = *Np; N0 = N - 1; for (k = 0; k < N; k++) { m = k; for (l = m + 1; l < N; l++) { if (*(*(A + k) + m) != 0.0) { factor = *(*(A + k) + l) / *(*(A + k) + m); /* perform row operation on A */ for (j = 0; j < N; j++) *(*(A + j) + l) = *(*(A + j) + l) - factor * (*(*(A + j) + m)); /* perform row operation on B */ *(B + l) = *(B + l) - factor * (*(B + m)); } } for (j = 0; j < N; j++) { temp = *(*(A + j) + k); *(*(A + j) + k) = *(*(A + j) + m); *(*(A + j) + m) = temp; } temp = *(B + k); *(B + k) = *(B + m); *(B + m) = temp; } /* back substitute to construct solution vector X */ *(X + N0) = *(B + N0) / (*(*(A + N0) + N0)); for (p = 0; p < N; p++) { sum = 0.0; for (u = N0 - p + 1; u < N; u++) sum = sum + (*(*(A + u) + N0 - p)) * (*(X + u)); *(X + N0 - p) = (*(B + N0 - p) - sum) / (*(*(A + N0 - p) + N0 - p)); } } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/write_ALOS_LED.c000755 015705 000000 00000001331 13505462014 023721 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" #include #include /*------------------------------------------------------*/ int write_ALOS_LED(struct ALOS_ORB *orb, struct PRM *prm, char *name) { int i; FILE *fLED; sprintf(prm->led_file, "%s.LED", name); fprintf(stderr, "writing generic LED file: %s\n", prm->led_file); fLED = fopen(prm->led_file, "w"); if (fLED == NULL) die("error opening", prm->led_file); /* read_sarleader does not seem to fill in orb->points[].pt */ for (i = 0; i < orb->nd; i++) orb->points[i].pt = orb->sec + (i * orb->dsec); /* write out orbit parameters into LED file */ write_orb(fLED, orb); fclose(fLED); return (EXIT_SUCCESS); } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/rng_filter.c000644 015705 000000 00000002563 13505462014 023425 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_filter applies a low-pass filter in the fourier domain by * * zeroing in wavenumber space * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography) * * Date : 10/09/14 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" void cfft1d_(int *, fcomplex *, int *); void rng_filter(fcomplex *cin, int nffti, fcomplex *cout) { int i, dir, nf, nt; nf = .70 * nffti / 2; nt = nffti - 1; /* do the forward fft */ dir = -1; cfft1d_(&nffti, cin, &dir); /* first zero the output array */ for (i = 0; i < nffti; i++) { cout[i].r = 0.; cout[i].r = 0.; } /* only keep the lower frequencies */ for (i = 0; i < nf; i++) { cout[i].r = cin[i].r; cout[i].i = cin[i].i; cout[nt - i].r = cin[nt - i].r; cout[nt - i].i = cin[nt - i].i; } /* now inverse fft */ dir = 1; cfft1d_(&nffti, cout, &dir); } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/siocomplex.c000644 015705 000000 00000001153 13505462014 023446 0ustar00sandwellwheel000000 000000 #include "siocomplex.h" #include "image_sio.h" #include fcomplex Cmul(fcomplex x, fcomplex y) { fcomplex z; z.r = x.r * y.r - x.i * y.i; z.i = x.i * y.r + x.r * y.i; return z; } fcomplex Cexp(float theta) { fcomplex z; z.r = cos(theta); z.i = sin(theta); return z; } fcomplex Conjg(fcomplex z) { fcomplex x; x.r = z.r; x.i = -z.i; return x; } fcomplex RCmul(float a, fcomplex z) { fcomplex x; x.r = a * z.r; x.i = a * z.i; return x; } fcomplex Cadd(fcomplex x, fcomplex y) { fcomplex z; z.r = x.r + y.r; z.i = x.i + y.i; return z; } float Cabs(fcomplex z) { return hypot(z.r, z.i); } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/set_ALOS_defaults.c000644 015705 000000 00000007051 13505462014 024567 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /*------------------------------------------------------*/ /* set some defaults */ /* replaces virgin.prm */ /*------------------------------------------------------*/ void set_ALOS_defaults(struct PRM *prm) { strncpy(prm->input_file, "data.raw", 8); /* input to SAR processor */ prm->input_file[8] = '\0'; strncpy(prm->deskew, "n", 1); /* to deskew or not to deskew? */ prm->deskew[1] = '\0'; strncpy(prm->iqflip, "n", 1); /* Flip_iq */ prm->iqflip[1] = '\0'; strncpy(prm->offset_video, "n", 1); /* off_video */ prm->offset_video[1] = '\0'; strncpy(prm->srm, "n", 1); /* scnd_rng_mig */ prm->srm[1] = '\0'; prm->num_valid_az = 9216; prm->nrows = 16384; prm->first_line = 1; prm->caltone = 0.000000; prm->st_rng_bin = 1; prm->az_res = 5; prm->nlooks = 1; prm->chirp_ext = 1000; /* nextend */ prm->rhww = 1.000000; /* rng_spec_wgt */ prm->pctbw = 0.000000; /* rm_rng_band */ prm->pctbwaz = 0.000000; /* rm_az_band */ prm->rshift = 0; prm->ashift = 0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 206; prm->SC_identity = 5; prm->fs = 3.200000e+07; /* rng_samp_rate */ prm->lambda = 0.236057; prm->near_range = -1; /* use -1 as default */ prm->RE = -1; /* use -1 as default */ prm->num_patches = 1000; /* use 1000 as default */ prm->fd1 = 0.0; prm->fdd1 = 0.0; prm->fddd1 = 0.0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->SLC_scale = 1; /* use 1 as default */ } /*------------------------------------------------------*/ void print_ALOS_defaults(struct PRM *prm) { fprintf(stderr, " \n ALOS default settings *************\n\n"); fprintf(stderr, " led_file = %s \n", prm->led_file); fprintf(stderr, " input_file = %s \n", prm->input_file); fprintf(stderr, " num_valid_az = %d \n", prm->num_valid_az); fprintf(stderr, " nrows = %d \n", prm->nrows); fprintf(stderr, " first_line = %d \n", prm->first_line); fprintf(stderr, " deskew = %s \n", prm->deskew); fprintf(stderr, " caltone = %lf \n", prm->caltone); fprintf(stderr, " st_rng_bin = %d \n", prm->st_rng_bin); fprintf(stderr, " Flip_iq(iqflip) = %s \n", prm->iqflip); fprintf(stderr, " offset_video(off_vid) = %s \n", prm->offset_video); fprintf(stderr, " az_res = %lf \n", prm->az_res); fprintf(stderr, " nlooks = %d \n", prm->nlooks); fprintf(stderr, " chirp_ext(nextend) = %d \n", prm->chirp_ext); fprintf(stderr, " scnd_rng_mig(srm) = %s \n", prm->srm); fprintf(stderr, " rng_spec_wgt(rhww) = %lf \n", prm->rhww); fprintf(stderr, " rm_rng_band(pctbw) = %lf \n", prm->pctbw); fprintf(stderr, " rm_az_band(pctbwaz) = %lf \n", prm->pctbwaz); fprintf(stderr, " rshift = %d \n", prm->rshift); fprintf(stderr, " ashift = %d \n", prm->ashift); fprintf(stderr, " stretch_r = %lf \n", prm->stretch_r); fprintf(stderr, " stretch_a = %lf \n", prm->stretch_a); fprintf(stderr, " a_stretch_r = %lf \n", prm->a_stretch_r); fprintf(stderr, " a_stretch_a = %lf \n", prm->a_stretch_a); fprintf(stderr, " first_sample = %d \n", prm->first_sample); fprintf(stderr, " SC_identity = %d \n", prm->SC_identity); fprintf(stderr, " rng_samp_rate(fs) = %lf \n", prm->fs); fprintf(stderr, " near_range = %lf \n", prm->near_range); } /*------------------------------------------------------*/ /* not all variables are called the same in sio.h and the prm file changed offset_video off_video chirp_ext nextend PRM SOI.H ------------------------------- Flip_iq iqflip scnd_rng_mig srm rng_spec_wgt rhww rm_rng_band pctbw rm_az_band pctbwaz rng_samp_rate fs */ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/get_sio_struct.c000644 015705 000000 00000020305 13505462014 024321 0ustar00sandwellwheel000000 000000 /*--------------------------------------------------------------------*/ /* Read parameters into PRM structure from PRM file Based on get_params by Evelyn J. Price Modified by RJM */ /*--------------------------------------------------------------------*/ #include "image_sio.h" #include "lib_functions.h" /* void get_sio_struct(FILE *, struct PRM *); void get_string(char *, char *, char *, char *); void get_int(char *, char *, char *, int *); void get_double(char *, char *, char *, double *); */ void get_sio_struct(FILE *fh, struct PRM *s) { char name[256], value[256]; debug = 0; if (debug) { fprintf(stderr, "get_sio_struct:\n"); fprintf(stderr, "PRMname (PRM value) interpreted value\n"); } while (fscanf(fh, "%s = %s \n", name, value) != EOF) { /* strings */ if (strcmp(name, "input_file") == 0) get_string(name, "input_file", value, s->input_file); if (strcmp(name, "led_file") == 0) get_string(name, "led_file", value, s->led_file); if (strcmp(name, "out_amp_file") == 0) get_string(name, "out_amp_file", value, s->out_amp_file); if (strcmp(name, "out_data_file") == 0) get_string(name, "out_data_file", value, s->out_data_file); if (strcmp(name, "scnd_rng_mig") == 0) get_string(name, "scnd_rng_mig", value, s->srm); if (strcmp(name, "deskew") == 0) get_string(name, "deskew", value, s->deskew); if (strcmp(name, "Flip_iq") == 0) get_string(name, "Flip_iq", value, s->iqflip); if (strcmp(name, "offset_video") == 0) get_string(name, "offset_video", value, s->offset_video); if (strcmp(name, "ref_file") == 0) get_string(name, "ref_file", value, s->ref_file); if (strcmp(name, "SLC_file") == 0) get_string(name, "SLC_file", value, s->SLC_file); if (strcmp(name, "orbdir") == 0) get_string(name, "orbdir", value, s->orbdir); if (strcmp(name, "lookdir") == 0) get_string(name, "lookdir", value, s->lookdir); if (strcmp(name, "date") == 0) get_string(name, "date", value, s->date); /* integers */ if (strcmp(name, "nrows") == 0) get_int(name, "nrows", value, &s->nrows); if (strcmp(name, "num_lines") == 0) get_int(name, "num_lines", value, &s->num_lines); if (strcmp(name, "bytes_per_line") == 0) get_int(name, "bytes_per_line", value, &s->bytes_per_line); if (strcmp(name, "good_bytes_per_line") == 0) get_int(name, "good_bytes_per_line", value, &s->good_bytes); if (strcmp(name, "first_line") == 0) get_int(name, "first_line", value, &s->first_line); if (strcmp(name, "num_patches") == 0) get_int(name, "num_patches", value, &s->num_patches); if (strcmp(name, "first_sample") == 0) get_int(name, "first_sample", value, &s->first_sample); if (strcmp(name, "num_valid_az") == 0) get_int(name, "num_valid_az", value, &s->num_valid_az); if (strcmp(name, "SC_identity") == 0) get_int(name, "SC_identity", value, &s->SC_identity); if (strcmp(name, "chirp_ext") == 0) get_int(name, "chirp_ext", value, &s->chirp_ext); if (strcmp(name, "st_rng_bin") == 0) get_int(name, "st_rng_bin", value, &s->st_rng_bin); if (strcmp(name, "num_rng_bins") == 0) get_int(name, "num_rng_bins", value, &s->num_rng_bins); if (strcmp(name, "ref_identity") == 0) get_int(name, "ref_identity", value, &s->ref_identity); if (strcmp(name, "nlooks") == 0) get_int(name, "nlooks", value, &s->nlooks); if (strcmp(name, "rshift") == 0) get_int(name, "rshift", value, &s->rshift); if (strcmp(name, "ashift") == 0) get_int(name, "ashift", value, &s->ashift); /* backwards compatibility for xshift/rshift yshift/ashift */ if (strcmp(name, "xshift") == 0) get_int(name, "rshift", value, &s->rshift); if (strcmp(name, "yshift") == 0) get_int(name, "ashift", value, &s->ashift); if (strcmp(name, "SLC_format") == 0) get_int(name, "SLC_format", value, &s->SLC_format); /* doubles */ if (strcmp(name, "SC_clock_start") == 0) get_double(name, "SC_clock_start", value, &s->SC_clock_start); if (strcmp(name, "SC_clock_stop") == 0) get_double(name, "SC_clock_stop", value, &s->SC_clock_stop); if (strcmp(name, "icu_start") == 0) get_double(name, "icu_start", value, &s->icu_start); if (strcmp(name, "clock_start") == 0) get_double(name, "clock_start", value, &s->clock_start); if (strcmp(name, "clock_stop") == 0) get_double(name, "clock_stop", value, &s->clock_stop); if (strcmp(name, "caltone") == 0) get_double(name, "caltone", value, &s->caltone); if (strcmp(name, "earth_radius") == 0) get_double(name, "earth_radius", value, &s->RE); if (strcmp(name, "equatorial_radius") == 0) get_double(name, "equatorial_radius", value, &s->ra); if (strcmp(name, "polar_radius") == 0) get_double(name, "polar_radius", value, &s->rc); if (strcmp(name, "SC_vel") == 0) get_double(name, "SC_vel", value, &s->vel); if (strcmp(name, "SC_height") == 0) get_double(name, "SC_height", value, &s->ht); if (strcmp(name, "SC_height_start") == 0) get_double(name, "SC_height_start", value, &s->ht_start); if (strcmp(name, "SC_height_end") == 0) get_double(name, "SC_height_end", value, &s->ht_end); if (strcmp(name, "near_range") == 0) get_double(name, "near_range", value, &s->near_range); if (strcmp(name, "PRF") == 0) get_double(name, "PRF", value, &s->prf); if (strcmp(name, "I_mean") == 0) get_double(name, "I_mean", value, &s->xmi); if (strcmp(name, "Q_mean") == 0) get_double(name, "Q_mean", value, &s->xmq); if (strcmp(name, "az_res") == 0) get_double(name, "az_res", value, &s->az_res); if (strcmp(name, "rng_samp_rate") == 0) get_double(name, "rng_samp_rate", value, &s->fs); if (strcmp(name, "chirp_slope") == 0) get_double(name, "chirp_slope", value, &s->chirp_slope); if (strcmp(name, "pulse_dur") == 0) get_double(name, "pulse_dur", value, &s->pulsedur); if (strcmp(name, "radar_wavelength") == 0) get_double(name, "radar_wavelength", value, &s->lambda); if (strcmp(name, "rng_spec_wgt") == 0) get_double(name, "rng_spec_wgt", value, &s->rhww); if (strcmp(name, "rm_rng_band") == 0) get_double(name, "rm_rng_band", value, &s->pctbw); if (strcmp(name, "rm_az_band") == 0) get_double(name, "rm_az_band", value, &s->pctbwaz); if (strcmp(name, "fd1") == 0) get_double(name, "fd1", value, &s->fd1); if (strcmp(name, "fdd1") == 0) get_double(name, "fdd1", value, &s->fdd1); if (strcmp(name, "fddd1") == 0) get_double(name, "fddd1", value, &s->fddd1); if (strcmp(name, "sub_int_r") == 0) get_double(name, "sub_int_r", value, &s->sub_int_r); if (strcmp(name, "sub_int_a") == 0) get_double(name, "sub_int_a", value, &s->sub_int_a); if (strcmp(name, "stretch_r") == 0) get_double(name, "stretch_r", value, &s->stretch_r); if (strcmp(name, "stretch_a") == 0) get_double(name, "stretch_a", value, &s->stretch_a); if (strcmp(name, "a_stretch_r") == 0) get_double(name, "a_stretch_r", value, &s->a_stretch_r); if (strcmp(name, "a_stretch_a") == 0) get_double(name, "a_stretch_a", value, &s->a_stretch_a); if (strcmp(name, "baseline_start") == 0) get_double(name, "baseline_start", value, &s->baseline_start); if (strcmp(name, "alpha_start") == 0) get_double(name, "alpha_start", value, &s->alpha_start); if (strcmp(name, "baseline_end") == 0) get_double(name, "baseline_end", value, &s->baseline_end); if (strcmp(name, "alpha_end") == 0) get_double(name, "alpha_end", value, &s->alpha_end); if (strcmp(name, "SLC_scale") == 0) get_double(name, "SLC_scale", value, &s->SLC_scale); } } /*--------------------------------------------------------------------------------*/ void get_string(char *s1, char *name, char *value, char *s2) { strcpy(s2, value); if (debug == 1) fprintf(stderr, " %s (%s) = %s\n", s1, name, value); } /*--------------------------------------------------------------------------------*/ void get_int(char *s1, char *name, char *value, int *iparam) { *iparam = atoi(value); if (debug == 1) fprintf(stderr, " %s (%s) = %s (%d)\n", s1, name, value, *iparam); } /*--------------------------------------------------------------------------------*/ void get_double(char *s1, char *name, char *value, double *param) { *param = atof(value); if (debug == 1) fprintf(stderr, " %s (%s) = %s (%lf)\n", s1, name, value, *param); } /*--------------------------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/swap16.c000644 015705 000000 00000001462 13505462014 022410 0ustar00sandwellwheel000000 000000 /************************************************************************ * Creator: David T. Sandwell Scripps Institution of Oceanography * * Date : 09/12/93 Copyright, David T. Sandwell * ************************************************************************/ void swap16(in, out, n) /* Swaps 2 bytes within each 16-bit word of array in. */ char *in; /* Input array */ char *out; /* Output array */ int n; /* # of short integers to swap */ { register char *ip, *op; /* Local register variables */ if (n > 0) /* Make sure n is positive */ { ip = in + 2; /* Load the pointers into temporary registers */ op = out; while (n--) { *op++ = *--ip; /* Do the swap */ *op++ = *--ip; ip += 4; } } } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_veclib.c000644 015705 000000 00000003622 13505462014 026306 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine used to call and initialize veclib FFT * * in a Mac OS X computer. * ************************************************************************/ /************************************************************************ * Creator: Robert Kern (Scripps Institution of Oceanography * * Date : 12/2005 * ************************************************************************/ /************************************************************************ * Modification history: * * * * DATE * ************************************************************************/ #include #include #include int cfft1d_(int *np, DSPComplex *c, int *dir); void cfft1d_cleanup_(); static int n = 0; static int log2n; static FFTSetup setup; static DSPSplitComplex d; static float scale; static int inited = 0; int cfft1d_(int *np, DSPComplex *c, int *dir) { if (*dir == 0) return; if (n != *np) { cfft1d_cleanup_(); n = *np; for (log2n = 1; (1 << log2n) < *np; log2n++) { } d.realp = (float *)malloc(n * sizeof(float)); d.imagp = (float *)malloc(n * sizeof(float)); setup = vDSP_create_fftsetup(log2n, 0); scale = 1.0 / n; inited = 1; } vDSP_ctoz(c, 2, &d, 1, n); vDSP_fft_zip(setup, &d, 1, log2n, (*dir == -1 ? FFT_FORWARD : FFT_INVERSE)); vDSP_ztoc(&d, 1, c, 2, n); if (*dir == 1) { vDSP_vsmul((float *)c, 1, &scale, (float *)c, 1, 2 * n); } } void cfft1d_cleanup_() { if (inited) { free(d.realp); free(d.imagp); vDSP_destroy_fftsetup(setup); inited = 0; } } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_fftpack.c000644 015705 000000 00000003502 13505462014 026455 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine used to call and initialize FFT routines from * * fftpack.c The calls are almost identical to the old Sun perflib * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography * * Date : 12/27/96 * * Date : 09/15/07 re-worked by Rob Mellors * * Date : 10/16/07 re-worked by David Sandwells to use pointers * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" #include #include void die(char *, char *); void cffti(int, float *); void cfftf(int, fcomplex *, float *); void cfftb(int, fcomplex *, float *); /*----------------------------------------------------------------------------*/ void cfft1d_(int *np, fcomplex *c, int *dir) { static float *work; static int nold = 0; int i, n; /* Initialize work array with sines and cosines to save CPU time later This is done when the length of the FFT has changed or when *dir == 0. */ n = *np; if ((n != nold) || (*dir == 0)) { if (nold != 0) free((char *)work); if ((work = (float *)malloc((4 * n + 30) * sizeof(float))) == NULL) die("Sorry, can't allocate mem", ""); cffti(n, work); nold = n; } /* Do forward transform with NO normalization. Forward is exp(+i*k*x) */ if (*dir == -1) cfftf(n, c, work); /* Do inverse transform with normalization. Inverse is exp(-i*k*x) */ if (*dir == 1) { cfftb(n, c, work); for (i = 0; i < n; i++) { c[i].i = c[i].i / (1.0 * n); c[i].r = c[i].r / (1.0 * n); } } } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_veclib031110.c000644 015705 000000 00000003564 13505462014 026761 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine used to call and initialize veclib FFT * * in a Mac OS X computer. * ************************************************************************/ /************************************************************************ * Creator: Robert Kern (Scripps Institution of Oceanography * * Date : 12/2005 * ************************************************************************/ /************************************************************************ * Modification history: * * * * DATE * ************************************************************************/ #include #include #include int cfft1d_(int *np, DSPComplex *c, int *dir); void cfft1d_cleanup_(); static int n = 0; static int log2n; static FFTSetup setup; static DSPSplitComplex d; static float scale; static int inited = 0; int cfft1d_(int *np, DSPComplex *c, int *dir) { if (*dir == 0) return; if (n != *np) { cfft1d_cleanup_(); n = *np; for (log2n = 1; (1 << log2n) < *np; log2n++) { } d.realp = (float *)malloc(n * sizeof(float)); d.imagp = (float *)malloc(n * sizeof(float)); setup = create_fftsetup(log2n, 0); scale = 1.0 / n; inited = 1; } ctoz(c, 2, &d, 1, n); fft_zip(setup, &d, 1, log2n, (*dir == -1 ? FFT_FORWARD : FFT_INVERSE)); ztoc(&d, 1, c, 2, n); if (*dir == 1) { vsmul((float *)c, 1, &scale, (float *)c, 1, 2 * n); } } void cfft1d_cleanup_() { if (inited) { free(d.realp); free(d.imagp); destroy_fftsetup(setup); inited = 0; } } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_sun4.c000644 015705 000000 00000003644 13505462014 025737 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine used to call and initialize perflib Fortran FFT * * routines in a Sun computer. * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography * * Date : 12/27/96 * ************************************************************************/ /************************************************************************ * Modification history: * * 04/01/98 - changed to have arguments be pointers (Fotran callable) * * * * DATE * ************************************************************************/ #include "../include/soi.h" #include cfft1d_(np, c, dir) int *np, *dir; fcomplex *c; { static float *work; static int nold = 0; int i, n; /* Initialize work array with sines and cosines to save CPU time later This is done when the length of the FFT has changed or when *dir == 0. */ n = *np; if ((n != nold) || (*dir == 0)) { if (nold != 0) free((char *)work); if ((work = (float *)malloc((4 * n + 30) * sizeof(float))) == NULL) { fprintf(stderr, "Sorry, can't allocate mem.\n"); return (-1); } cffti_(np, work); nold = n; } /* Do forward transform with NO normalization. Forward is exp(+i*k*x) */ if (*dir == -1) { cfftf_(np, c, work); } /* Do inverse transform with normalization. Inverse is exp(-i*k*x) */ if (*dir == 1) { cfftb_(np, c, work); for (i = 0; i < n; i++) { c[i].r = c[i].r / ((float)n); c[i].i = c[i].i / ((float)n); } } } GMTSAR_V5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_fftw.c000644 015705 000000 00000003425 13505462014 026011 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine to do a 1-D fft using FFTW routines * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography * * Date : 12/27/96 * ************************************************************************/ /************************************************************************ * Modification history: * * 04/01/98 - changed to have arguments be pointers (Fotran callable) * * 10/16/03 - changed to call fftw instead of the sun perflib * ************************************************************************/ #include "/sw/include/fftw3.h" #include #include #include cfft1d_(np, c, dir) int *np, *dir; fftwf_complex *c; { static int nold = 0; static fftwf_plan pf, pi; int i, n; /* Make the plans for FFTW and destroy the old ones if they exist. This is done when the length of the FFT has changed or when *dir == 0. */ n = *np; if ((n != nold) || (*dir == 0)) { if (nold != 0) { fftwf_destroy_plan(pf); fftwf_destroy_plan(pi); } pf = fftwf_plan_dft_1d(n, c, c, -1, FFTW_MEASURE); pi = fftwf_plan_dft_1d(n, c, c, 1, FFTW_MEASURE); printf(" reset plan \n"); nold = n; } /* Do forward transform with NO normalization. */ if (*dir == -1) { fftwf_execute(pf); } /* Do inverse transform with normalization. */ if (*dir == 1) { fftwf_execute(pi); for (i = 0; i < n; i++) { c[i][0] = c[i][0] / ((float)n); c[i][1] = c[i][1] / ((float)n); } } } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_baseline/ALOS_baseline.c000644 015705 000000 00000044404 13505462014 024655 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Compute the interferometric baseline between reference and repeat * * images. Also estimates the crude offset for image matching. * *******************************************************************************/ /******************************************************************************** * Creator: David T. Sandwell and Rob Mellors * (San Diego State University, *Scripps Institution of Oceanography) * Date : 06/07/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * add fs0, read fs from PRM and check * consistence, M.Wei, 5/2/08 * * * estimate accurately the offset for image matching. * 1. find the geographic coordinate of a point in the middle range of the first * line of the radar image. * 2. use ALOS_llt2rat to project it into radar coordinate for both reference * and repeat pass. The difference between them would be the offset. * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "Usage: (two modes)\n" "mode 1:\n\n" "ALOS_baseline PRM_master PRM_slave\n\n" "PRM_master PRM file for reference image\n" "PRM_slave PRM file of secondary image\n" "(writes out parameters for appending to PRM file)\n" "\nor mode 2:\n\n" "ALOS_baseline -input file\n\n" "file: list of PRM files\n" "first file is assumed to be master\n" "following are slaves\n" "(writes out decimal year, Bperp, and PRM name)\n"; /* function prototypes */ double find_distance(double, double, double, double, double, double); double find_alpha_degrees(double, double); void find_unit_vectors(double, double, double, double *, double *, double *, double *); void endpoint_distance(int, double, double, double, double, double *, double *, double *, double *, int *); void find_parallel_perp_baseline(struct PRM, struct PRM, double, double *, double *); void write_prm_baseline(struct PRM); void get_sign(struct PRM, double, double, double, double, int *); void write_bperp(struct PRM, char *); void parse_command_line(char **, int *, int *); void read_input_file(char *, int, char **); void ALOS_baseline(struct PRM *, struct ALOS_ORB *, int, int, char **, double); void read_all_ALOS_ldr(struct PRM *, struct ALOS_ORB *, int); void ALOS_llt2rat_sub(char *, double *, double *); int main(int argc, char **argv) { int i; int input_flag, nfiles; double fs0 = 0.0; struct PRM *r; /* reference orbit is 0; repeats are > 0*/ struct ALOS_ORB *orb; /* reference orbit is 0; repeats are > 0*/ char **filename; FILE *prmfile; if (argc < 3) die(USAGE, ""); verbose = 0; input_flag = 0; /* read command line */ parse_command_line(argv, &nfiles, &input_flag); filename = malloc(nfiles * sizeof(char *)); for (i = 0; i < nfiles; i++) filename[i] = malloc(128 * sizeof(char)); r = malloc(nfiles * sizeof(struct PRM)); if (input_flag == 1) read_input_file(argv[2], nfiles, filename); for (i = 0; i < nfiles; i++) { if (input_flag == 0) strcpy(filename[i], argv[i + 1]); if ((prmfile = fopen(filename[i], "r")) == NULL) die("Can't open prmfile ", filename[i]); get_sio_struct(prmfile, &r[i]); /* check whether range sampling rate is same. If not, warning */ if (i == 0) fs0 = r[0].fs; if (r[i].fs != fs0) { fprintf(stderr, "\nWARNING:\nRange_sampling_rate is not consistant.\nYou " "need to do FBD/FBS conversion.\n\n"); } fclose(prmfile); } switch (r[0].SC_identity) { case ALOS: fprintf(stderr, "...satellite: ALOS\n"); orb = malloc(nfiles * sizeof(struct ALOS_ORB)); read_all_ALOS_ldr(r, orb, nfiles); ALOS_baseline(r, orb, nfiles, input_flag, filename, fs0); break; default: fprintf(stderr, "Arghhh...unrecognized satellite\n"); } return (EXIT_SUCCESS); } /*---------------------------------------------------------------------------*/ void read_all_ALOS_ldr(struct PRM *r, struct ALOS_ORB *orb, int nfiles) { int i; FILE *ldrfile; for (i = 0; i < nfiles; i++) { if (i == 0) fprintf(stderr, "......master LED file %s \n", r[0].led_file); if (i != 0) fprintf(stderr, ".........slave LED file %s \n", r[i].led_file); /* open each ldrfile and read into structure r */ if ((ldrfile = fopen(r[i].led_file, "r")) == NULL) die("Can't open ldrfile %s", r[i].led_file); read_ALOS_sarleader(ldrfile, &r[i], &orb[i]); /* print out orb info, mwei fprintf(stderr,"%d %d %d %d %lf %lf\n", orb[i].itype,orb[i].nd,orb[i].iy,orb[i].id,orb[i].sec,orb[i].dsec); fprintf(stderr,"%lf %lf %lf\n", orb[i].points[0].pt,orb[i].points[0].px,orb[i].points[0].vx); fprintf(stderr,"%lf %lf %lf\n", orb[i].points[1].pt,orb[i].points[1].px,orb[i].points[1].vx); */ fclose(ldrfile); } } /*---------------------------------------------------------------------------*/ void ALOS_baseline(struct PRM *r, struct ALOS_ORB *orb, int nfiles, int input_flag, char **filename, double fs0) { int ii, nd, ir; int k, ns, ns2, m1, m2, m3, sign1, sign2, sign3; double dr, dt; double ds1, ds2, ds3; double bv1, bv2, bv3, bh1, bh2, bh3; double t11, t12, t21, t22, t23; double x11, y11, z11, x12, y12, z12, x13, y13, z13; double x21, y21, z21, x22, y22, z22, x23, y23, z23; double ru1, ru2, ru3, xu1, yu1, zu1, xu2, yu2, zu2, xu3, yu3, zu3; double ts, xs, ys, zs; /* double rr1, rr2; */ /* near range from reference and repeat orbits */ double b1, b2, b3, bpara, bperp; double *pt, *p, *pv, pt0; double height, re_c, vg, vtot, rdot; double radar_look[3] = {0, 0, 0}; double re, rho, b, theta; double t_vel, t_sta, x_vel, x_sta, y_vel, y_sta, z_vel, z_sta, ru33, xu33, yu33, zu33, o1x[3], o1y[3], o1z[3], ru4, xu4, yu4, zu4; /* int i; */ double glob_look[3], target[3], target_llt[3], fll; double target_rat_ref[3] = {0, 0, 0}; double target_rat_rep[3] = {0, 0, 0}; double far_range; /* reference orbit */ get_seconds(r[0], &t11, &t12); // t13 = (t11 + t12)/2.; dr = 0.5 * SOL / fs0; dt = 0.2 / r[0].prf; // rr1 = r[0].near_range; ns = (int)((t12 - t11) / dt); /* seconds of frame */ dt = (t12 - t11) / (ns - 1); ns2 = ns * 2; nd = orb[0].nd; pt = malloc(nd * sizeof(double)); p = malloc(nd * sizeof(double)); pv = malloc(nd * sizeof(double)); for (ii = 1; ii < nfiles; ii++) { get_seconds(r[ii], &t21, &t22); t23 = (t21 + t22) / 2.; // rr2 = r[ii].near_range; pt0 = (24.0 * 60.0 * 60.0) * orb[ii].id + orb[ii].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[ii].dsec; verbose = 0; /* interpolate_ALOS_orbit assumes p, pt, and pv ate allocated and pt * assigned */ interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t21, &x21, &y21, &z21, &ir); /* look at other orbit information and recalculate the height using the * ashift */ calc_height_velocity(&orb[ii], &r[ii], t22, t22, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_end = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t23, t23, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t21, t21, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_start = height + re_c - r[ii].RE; // fd_orbit = -2.0*rdot/r[ii].lambda; interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t22, &x22, &y22, &z22, &ir); interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t23, &x23, &y23, &z23, &ir); /* loop over reference orbit */ /* add 2 scene lengths (ns2) for buffer at each end */ b1 = b2 = b3 = -1.0; pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; /* set some defeault values */ m1 = -99999; x11 = y11 = z11 = -99999.0; x12 = y12 = z12 = -99999.0; x13 = y13 = z13 = -99999.0; for (k = -ns2; k < ns + ns2; k++) { ts = t11 + k * dt; interpolate_ALOS_orbit(&orb[0], pt, p, pv, ts, &xs, &ys, &zs, &ir); ds1 = find_distance(xs, ys, zs, x21, y21, z21); if (b1 < 0.0 || ds1 < b1) endpoint_distance(k, ds1, xs, ys, zs, &b1, &x11, &y11, &z11, &m1); ds2 = find_distance(xs, ys, zs, x22, y22, z22); if (b2 < 0.0 || ds2 < b2) endpoint_distance(k, ds2, xs, ys, zs, &b2, &x12, &y12, &z12, &m2); ds3 = find_distance(xs, ys, zs, x23, y23, z23); if (b3 < 0.0 || ds3 < b3) endpoint_distance(k, ds3, xs, ys, zs, &b3, &x13, &y13, &z13, &m3); // fprintf(stderr,"%f %f %f %f\n",ts,ds1,ds2,ds3); } /* compute more orbital information at the min baseline based on m1 */ ts = t11 + m1 * dt; calc_height_velocity(&orb[0], &r[0], ts, ts, &height, &re_c, &vg, &vtot, &rdot); // fd_orbit = -2.0*rdot/r[0].lambda; /* shouldn't happen .. */ if (x11 == -99999.0) die("x11 not initialized", ""); if (x12 == -99999.0) die("x12 not initialized", ""); if (x13 == -99999.0) die("x13 not initialized", ""); if (m1 == -99999) die("m1 not initialized", ""); /* put in structure */ r[ii].baseline_start = b1; r[ii].baseline_end = b2; r[ii].baseline_center = b3; if (b1 == 0. && b2 == 0.) r[ii].baseline_center = 0.; /* compute unit vectors */ find_unit_vectors(x11, y11, z11, &ru1, &xu1, &yu1, &zu1); find_unit_vectors(x12, y12, z12, &ru2, &xu2, &yu2, &zu2); find_unit_vectors(x13, y13, z13, &ru3, &xu3, &yu3, &zu3); /* compute sign of horizontal baseline */ get_sign(r[ii], x11, y11, x21, y21, &sign1); get_sign(r[ii], x12, y12, x22, y22, &sign2); get_sign(r[ii], x13, y13, x23, y23, &sign3); /* compute baseline components (horizontal and vertical) */ bv1 = (x21 - x11) * xu1 + (y21 - y11) * yu1 + (z21 - z11) * zu1; bh1 = sign1 * sqrt(b1 * b1 - bv1 * bv1); bv2 = (x22 - x12) * xu2 + (y22 - y12) * yu2 + (z22 - z12) * zu2; bh2 = sign2 * sqrt(b2 * b2 - bv2 * bv2); bv3 = (x23 - x13) * xu3 + (y23 - y13) * yu3 + (z23 - z13) * zu3; bh3 = sign3 * sqrt(b3 * b3 - bv3 * bv3); /* angle from horizontal */ r[ii].alpha_start = find_alpha_degrees(bv1, bh1); r[ii].alpha_end = find_alpha_degrees(bv2, bh2); r[ii].alpha_center = find_alpha_degrees(bv3, bh3); /* calculate parallel baseline */ find_parallel_perp_baseline(r[0], r[ii], dr, &bpara, &bperp); r[ii].bpara = bpara; r[ii].bperp = bperp; /* find expected offset in pixels (rshift and yshift) */ /* r[ii].ashift = -1*m1; r[ii].rshift = -1*(int) (r[ii].bpara/dr + (rr2 - rr1)/dr); */ /* a more accurate way to estimate offset in pixels */ /* since t11 point is out of scene, I need add a fraction of orbit time to * it */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_sta = t11 + 2.0; interpolate_ALOS_orbit(&orb[0], pt, p, pv, t_sta, &x_sta, &y_sta, &z_sta, &ir); re = r[0].RE; far_range = r[0].near_range + dr * r[0].num_rng_bins; rho = (r[0].near_range + far_range) / 2.0; b = r[0].ht + r[0].RE; theta = acos((b * b + rho * rho - re * re) / 2 / b / rho); /* find a unit look vector point to middle range of first line of the scene */ /* in radar coordinate */ radar_look[0] = 0; radar_look[1] = cos(theta); radar_look[2] = -sin(theta); if (strncmp(r[0].lookdir, "L", 1) == 0) radar_look[2] = sin(theta); /* form a rotation matrix to convert the look vector from radar coordinate to global cartesian coordinate */ find_unit_vectors(x_sta, y_sta, z_sta, &ru33, &xu33, &yu33, &zu33); o1y[0] = -xu33; o1y[1] = -yu33; o1y[2] = -zu33; /* get the velocity of the satellite */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_vel = t11 + 2.1; interpolate_ALOS_orbit(&orb[0], pt, p, pv, t_vel, &x_vel, &y_vel, &z_vel, &ir); find_unit_vectors(x_vel - x_sta, y_vel - y_sta, z_vel - z_sta, &ru4, &xu4, &yu4, &zu4); o1x[0] = xu4; o1x[1] = yu4; o1x[2] = zu4; cross3_(o1x, o1y, o1z); /* look vector in global cartesian cooridate is */ glob_look[0] = radar_look[0] * o1x[0] + radar_look[1] * o1y[0] + radar_look[2] * o1z[0]; glob_look[1] = radar_look[0] * o1x[1] + radar_look[1] * o1y[1] + radar_look[2] * o1z[1]; glob_look[2] = radar_look[0] * o1x[2] + radar_look[1] * o1y[2] + radar_look[2] * o1z[2]; /* shoot the vector on the ground and get the tie point */ target[0] = x_sta + glob_look[0] * rho; target[1] = y_sta + glob_look[1] * rho; target[2] = z_sta + glob_look[2] * rho; fll = (r[0].ra - r[0].rc) / r[0].ra; xyz2plh(target, target_llt, r[0].ra, fll); fprintf(stderr, "lon_tie_point = %f\n", target_llt[1]); fprintf(stderr, "lat_tie_point = %f\n", target_llt[0]); ALOS_llt2rat_sub(filename[0], target_llt, target_rat_ref); ALOS_llt2rat_sub(filename[ii], target_llt, target_rat_rep); /* find expected offset in pixels (rshift and yshift) */ r[ii].ashift = target_rat_rep[1] - target_rat_ref[1]; r[ii].rshift = target_rat_rep[0] - target_rat_ref[0]; /* write out prm format */ if (input_flag == 0) write_prm_baseline(r[ii]); /* write out in x,y format bperp baseline only */ if (input_flag == 1) write_bperp(r[ii], filename[ii]); } } /*---------------------------------------------------------------------------*/ void read_input_file(char *inputfilename, int nfiles, char **filename) { int i; FILE *inputfile; if ((inputfile = fopen(inputfilename, "r")) == NULL) die("Can't open ", inputfilename); for (i = 0; i < nfiles; i++) fscanf(inputfile, " %s ", filename[i]); fclose(inputfile); } /*---------------------------------------------------------------------------*/ void parse_command_line(char **argv, int *nfiles, int *input_flag) { char tmp[132]; FILE *inputfile; *nfiles = 0; if (strncmp(argv[1], "-input", 6) != 0) { fprintf(stderr, "using command line\n"); *nfiles = 2; } else { fprintf(stderr, "using input file \n"); *input_flag = 1; if ((inputfile = fopen(argv[2], "r")) == NULL) die("Can't open ", argv[2]); /* count the number of files in inputfile */ while (fscanf(inputfile, " %s ", tmp) != EOF) (*nfiles)++; fclose(inputfile); } } /*---------------------------------------------------------------------------*/ void write_bperp(struct PRM r1, char *string) { FILE *GMTscript; float year, dyear; GMTscript = fopen("GMTscript", "w"); year = floor(r1.SC_clock_start / 1000.0); dyear = (r1.SC_clock_start - 1000.0 * year) / 365.0; year = year + dyear; /* write date, baseline */ fprintf(stdout, " %f %f %s\n", year, r1.bperp, string); /* fprintf(GMTscript,"psxy Bperp.dat -R%f/%f/%f/%f -JX8 -P > Bperp.ps\n"); */ fclose(GMTscript); } /*---------------------------------------------------------------------------*/ void get_sign(struct PRM r, double x11, double y11, double x21, double y21, int *sign) { double rlnref, rlnrep; rlnref = atan2(y11, x11); rlnrep = atan2(y21, x21); *sign = 1.0; if (strncmp(r.orbdir, "D", 1) == 0) *sign = -1 * (*sign); if (strncmp(r.lookdir, "L", 1) == 0) *sign = -1 * (*sign); if (rlnrep < rlnref) *sign = -1 * (*sign); } /*---------------------------------------------------------------------------*/ void write_prm_baseline(struct PRM rep) { printf("SC_vel = %f \n", rep.vel); printf("SC_height = %f \n", rep.ht); printf("SC_height_start = %f \n", rep.ht_start); printf("SC_height_end = %f \n", rep.ht_end); printf("earth_radius = %f \n", rep.RE); printf("rshift = %d \n", rep.rshift); printf("sub_int_r = 0.0 \n"); printf("ashift = %d\n", rep.ashift); printf("sub_int_a = 0.0 \n"); printf("B_parallel = %f \n", rep.bpara); printf("B_perpendicular = %f \n", rep.bperp); printf("baseline_start = %f \n", rep.baseline_start); printf("baseline_center = %f \n", rep.baseline_center); printf("baseline_end = %f \n", rep.baseline_end); printf("alpha_start = %f \n", rep.alpha_start); printf("alpha_center = %f \n", rep.alpha_center); printf("alpha_end = %f \n", rep.alpha_end); } /*---------------------------------------------------------------------------*/ void find_parallel_perp_baseline(struct PRM ref, struct PRM rep, double dr, double *bpara, double *bperp) { double rc, ra, rad, rlook, far_range, arg1, arg2; rad = M_PI / 180.0; /* this is not ellipsoid axis */ /* use reference ?? */ rc = ref.RE + ref.ht; ra = ref.RE; far_range = rep.near_range + dr * rep.num_rng_bins; /* calculate the look angle 1/2 way between the near and far range */ arg1 = (rep.near_range * rep.near_range + rc * rc - ra * ra) / (2. * rep.near_range * rc); arg2 = (far_range * far_range + rc * rc - ra * ra) / (2. * far_range * rc); rlook = acos((arg1 + arg2) / 2.0); /* add the incidence angle correction to get the incidence angle */ arg1 = (-rep.near_range * rep.near_range + rc * rc + ra * ra) / (2. * ra * rc); arg2 = (-far_range * far_range + rc * rc + ra * ra) / (2. * ra * rc); rlook = rlook + acos((arg1 + arg2) / 2.0); *bpara = rep.baseline_start * sin(rlook - rep.alpha_start * rad); *bperp = rep.baseline_start * cos(rlook - rep.alpha_start * rad); } /*---------------------------------------------------------------------------*/ double find_alpha_degrees(double bv, double bh) { double a, rad; rad = M_PI / 180.0; a = atan2(bv, bh); a = a / rad; return (a); } /*---------------------------------------------------------------------------*/ double find_distance(double xs, double ys, double zs, double x, double y, double z) { double ds; double dx, dy, dz; dx = xs - x; dy = ys - y; dz = zs - z; ds = sqrt(dx * dx + dy * dy + dz * dz); return (ds); } /*---------------------------------------------------------------------------*/ void endpoint_distance(int k, double ds, double xs, double ys, double zs, double *b, double *x, double *y, double *z, int *m) { *b = ds; *x = xs; *y = ys; *z = zs; *m = k; } /*---------------------------------------------------------------------------*/ void find_unit_vectors(double x, double y, double z, double *ru, double *xu, double *yu, double *zu) { *ru = sqrt(x * x + y * y + z * z); *xu = x / (*ru); *yu = y / (*ru); *zu = z / (*ru); } /*---------------------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_baseline/Makefile000644 015705 000000 00000000524 13505462014 023544 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_baseline CSRCS = ALOS_baseline.c \ ALOS_llt2rat_sub.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: mv $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_baseline/ALOS_llt2rat_sub.c000644 015705 000000 00000025436 13505462014 025334 0ustar00sandwellwheel000000 000000 /**************************************************************************** * Subroutine to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/15/09 - modifed to correct the contradiction of range sampling rate * * between FBS and FBD mode. ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 void set_ALOS_defaults(struct PRM *); void ALOS_llt2rat_sub(char *filename, double *target_llt, double *target_rat) { double rln, rlt, rht, dr, t1, t2, tm; double ts, rng, thet, relp, telp, dopc; double xp[3]; double xt[3]; double rp[3]; /* double r0,rf,a0,af; */ double rad = PI / 180.; double fll, rdd, daa, drr; int j, nrec, npad = 8000; int goldop(); int stai, endi, midi; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; FILE *ldrfile; FILE *fprm1; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); double rsr; char value[128], name[128]; /* open and read the parameter file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ALOS_sarleader(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; #if 0 r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* read the llt points and convert to xyz. */ rlt = target_llt[0]; rln = target_llt[1]; rht = target_llt[2]; rp[0] = rlt; rp[1] = rln; rp[2] = rht; plh2xyz(rp, xp, prm.ra, fll); xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); xt[0] = rng; xt[1] = tm; /* compute the range and azimuth in pixel space and correct for an azimuth * bias*/ xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a); /* compute the azimuth and range correction if the Doppler is not zero */ if (prm.fd1 != 0.) { dopc = prm.fd1 + prm.fdd1 * (prm.near_range + dr * prm.num_rng_bins / 2.); rdd = (prm.vel * prm.vel) / rng; daa = -0.5 * (prm.lambda * dopc) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } target_rat[0] = xt[0]; target_rat[1] = xt[1]; target_rat[2] = rp[2]; free(orb_pos); free(orb); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_baseline/ALOS_baseline000755 015705 000000 00000201644 13507242210 024434 0ustar00sandwellwheel000000 000000  H__PAGEZERO(__TEXT__text__TEXT@ x@ __stubs__TEXT__stub_helper__TEXTxPx__const__TEXTШШ__cstring__TEXTI1__unwind_info__TEXT,,__DATA__nl_symbol_ptr__DATA __got__DATA"__la_symbol_ptr__DATA((%__data__DATA((__common__DATA0\H__LINKEDIT "0X`0e PAA$E /usr/lib/dyldґ4! 5Th2   *(@ 8/usr/lib/libSystem.B.dylib&@X)UHAWAVAUATSH8HuH=H5t#-HEHuHUH}>Lc}J<荜IDHEM~%E1ffIDHI9uL}IiIHEEЉEԃLuuhHEL`H5BLIHtE:H=La,E~&L%1IT1LL̛HI9uL蘛LWEEE1LmN$}uHEJtL蹛LH5\IHuH=L+LL,MuHE8EA8f.Eu{ HHUH=RLޚIIL9uPELeA$HHuWH=`ĚHEHH<@蹚ILHLuDLLDMIEH= m1H8[A\A]A^A_]fUHAWAVATSHHIIHHHEHH5FH H t"H=AH=ЙIH5薙HHuIwH=0*H50HP1H~t3L=LPf.A1HLLKuHH)HH;EuHĐ[A\A^A_]还f.UHAWAVAUATSPIAIH5ӘIHtEGH=jL?)E~3EL=_1f.@I1LL蝘HI9uLH[A\A]A^A_][UHAWAVAUATSHIHHHEE1HHEf.H1H8Mt!L1H5f.D1H5ӠL}LLH5җIHuH=LE(LHL\L虗I0HIL9mgH[A\A]A^A_]UHAWAVAUATSHx LAHIHGHHEW)HDž )HDžHLHHHH(A^\HHLccN<L̖HLHPLM诖HXAMDf(^,HW*^^E ى @HIMH DMI)H HH(ALLLfIiHI4HHHH(H&LKvHHH(XY #EHW*L Y XLTH s$1H f.D1f.@W*YXÍHW*YXٍHW*\YXdHW*YX\HI9uH t-H(f.W*YXHHuHHHD$H@H$IHHHPHXL0L8ULL<$LLL(H`HHhHHIHID`XhLLC\4C4HH$LL(H`HhLLwD`XhC\4C4(HH$LLf(H`HhLLD`XhC\4C4LLt$HXH$LHLPLLXLLHLPTLt$HpH$LHLLLL`LhSHHW*@ YٓX@HH s1f.1f.@W*YXÍHW*YXЍHW*TYX\HW*YXTHI9ut2H(f.DW*YXHHuAayHDD9AayD͒(((0I(ÒD(f.DD)xpWA*YXHHD$HH$HHHPHXLLQ08@f`f\fhf\fpf\fYfYfXfYfXfQf(f(fݑf(ffVf:fD(fD(fD(ݨfD(uDDxDpEEf(\PHf(ffXf\YfYXXWQfInfWf.f.fH~LEfD(fD(fD(uDDD0f:ufD8AHfA(fA(fA(D0DDALf(f(f(IfD(fD(fD(fD(fD(fD(f( fD(DDDDDDf)f)0f)fD)WA*YXHH$HLLf(H`HhLL{>f. L-uzH=CLf.َuzH=,Lf(f.uzH=L<AayuH= LHIHM(AfInf.iuzf.]uz IDŽ0x8E HD(f֕轋x蠋1ADDdAA)ALEEEAHP<`xhp(0(pxNJf.DAGDGALDf.DAGDGALDf.DfA(AYDfA(AYXDfA(AYXQfA(^fA(^fA(^f(Yf(YXDfA(AYXQf(^f(^fE(D^fD(fA(AYf(0f(YXfD(fA(AYXQfA(^fD(D^fE(D^xA\YA\YX@A\EFYXfD(fA(AYf(Y\EGALLEDQWA*Y\Yf(\YXXA\AYXW*YY\WQYx\Yf(p\0AYXpA\AYXfApYY\W*QY0f)ć ؉^HA0蒇f(ff^ f)HfAHAAAHWA*hXYXf(Yf(f(Yf(Xxf(Y\pXY^f(Y0X\XY^X YHf)dxf(\pXXY^\0X^XYf(Xf(Y \҅ffYHfALELHW*@ YX@HH s1A@1f.@W*YXÍHW*YXЍHW*TYX\HW*YXTHI9uAt1H(f.@W*YXHHuHXHHD$HH$HHHPHXLLRFAAA*hYXXOf(YAXf(Yf(YXY\Y^f)^ރA(Lf)tf(%VfWf)f)f(%0f(YfYXf(YXWQf^^fWf)EfWfUEHW*@ YKX@HH s1Af.@1f.@W*YXÍHW*YXЍHW*TYX\HW*YXTHI9uAt1H(f.@W*YXHHuHX|HHD$HH$HHHPHXLLCfff\\f(Yf(YXf(YXQf^^f)EMH}HuHpmf(EfYf(fYMfXf(fYpfXMYUY XYeXf(fYffXf)PYX`Af(A\^HPL0L}HIH88H5ÒI>0H5K贀LI>LH_HIH5LsyHHLHH5HpH1HYytbL-|LpLL%]f.LLSyuLLLH(\$1HLLLxu(PXh\P` )**^kz^XX^0Y/zX@X\^D, PxIMcJH:xIEH.xIEH"xIEHxIEy^PP`^h`H8HLX@DHH HAAhMHEHEXH}Hu`rPfWf. yfWXf.%yfWv~Hf.jyfWvhhYxh`XvfW^XY^hYXWQy^\`A>WA*Y xHXX,]U]eL LLD/ f(\W*XP^\W*X\@YW*X \f.-wH0u{k*YDbwAYXYX`Y^YY-w^AYYY^YXX AHEHAL+uH#uHHH;EuH[A\A]A^A_]tHHH=ttf.UHAWAVAUATSHUMEIH}HcGHEHHtHEHtHEHtHEH|tIHqtIHftIH[tHMLEH]HUHuH~AW*B YuXBJHJ(H01W*YXHyHMULmLeLuH uYXȉHEE1MWA*YXIBELmAMLdL4$AHHULhAML4$AHHuHUELpAML4$AHHuHUELxHuUMHhIOJHpIOJHxIOJIL9eHjrH}arH}XrHPrH}GrH}>rH}5rHE@HĈ[A\A]A^A_]@UHAWAVATSAA)DALAA)DAL9~!A*YFtfT^t,ˉȉA*Y%tfT=t,؉)LWL_HcAA LwA,HcfAf\fA f\fA,f\fYfYfXfYfXfQ) Ds-sf(f.vsW*AYW*YXD,Icf(A\4f(A\]fLH5ko]u=L\A ;u'HH8H5alLH IkM\fLH5XfLH5goXu=LWA;u'HH8H5agLH fMWfLH5fXu=LWA;u'HȐH8H5gLH fMWfLH5fWu=LWWA;u'HxH8H5fLH LfMNWfLH5DfWu=LWA;u'H(H8H5qfLH fMVfLH5f/Wu=LVA;u'H؏H8H5!fLH eMVfLH5eVu=LgVA;u'HH8H5eLH eM^VfLH5|eVu=LVA;u'H8H8H5eLH @eMVfLH56e?Vu=LUA;u'HH8H51eLH dMUf1HhH5aLLU\HHH;EuHx[A\A]A^A_])UDUHAWAVSPHIIHHUHs8u+HGH8H5od1LLIH[A^A_]UH[A^A_]UHAWAVATSHIIIHTAH 8u)HH8H5d1LLM[A\A^A_]T[A\A^A_]f.@UHAWAVATSHIIIHSTH8u)HrH8H5cLLM[A\A^A_]DT[A\A^A_]ÐUHAWAVAUATSHIHuIf.AHHcf.DMI1E~)f.s#1HBH9}Lf.Hr‰AHDD)1D9~BHHH="c.ELESLEEE)HEDELcMcDJ415U UfDJ fW1f(fH9t*$f(\Y,\^f(^XHH9uf(\$f(YYXAYAY$XYYAX$$A$$f.zHL9jH[A\A]A^A_]H|HH=Up]hXH5x`E(}PI>Ux])@eeH5v`EM?PI>UU]]`H5j`E( PUuf(@pxhEA<$%EmeM]UuXXfWfTfUfVX\\\u|L5XI>H5_3OI>H5_OI>H5_OI>H5_NI>H5_NHĸ[A\A]A^A_]ÐUHAWAVAUATSH8@MLHHIIHHHEDž|H8t@HoHH=_XNAAPA^AL%A$HXtu>Dž2AA+`W*^FP,ƒOȉXYMO %PX@ QOX`HHHHxLI6 HؿHHL@I HHHL`I f)@Yf)YXf(ؿffYf\fY%.OX\Y- Of(Yf)f(YXf(YXQf)AfW1(f.WQˍD@AfA f)`^ K*LYYY^aK0A$0KtWfW8M0Kt8YY^Y^XQ zM^Hf(`f(\Hf(@ff^f)M Ef(f(f^f)M(^EH}HuHp$f(`f(Yf(YXY\f(XY^IVJXof(fW4LpYEY\YXxYEY\YX`YUYu\YXf)E1LLHxD)W*YB0XLHLLI! X\`\YYf(\XYXWQ\BIHcI9AH0HHHL|;HHMHXYQHH1HH;EuH8@[A\A]A^A_]GUHt\fWɃHcHcNHKW*HX LJHLHNKHKHD*THcHH ]K*JXW*XX EJY EIXX 9Jf(]f.UHAWAVATSHf(^ IIHII^JUf(YIXI IYYX IYYYX^IYH IF I]YX IIYYX^I^IYbHf)UFD IHA$$YfEWAX#Al$YX+Ad$AYX#HCA$$YfW\kAd$YXcAl$AYXkHCA$$AYAXcAl$AYXkAXl$fDWkf(Uf(f: HYf(ff(fYf\fD(fD: A<$Ad$Yf(AT$AYY~fEWfWffofXf\f: fAYfXDfDXAYAXAYXXAAA_AYAXAYXXAYffAfYfAXfYfXfXfAXXfAA~H[A\A^A_]f.@UHAVSHf(^!FIH^GUf(YGXG GYYX GYYYX^FYE FCFUYXF FYYX^ F^ FY xEAH[A^]fUHHYfWX WYVXOYNX HBOYXJW YVXRO(YNXJHBO0YXJG8YFXBO@YNXJ]f.UHAWAVATSHf(^mDIHII^aEUf(YXEXXE XEYYX LEYYYX^L>HH8[A\A]A^A_]i>UHAWAVAUATSH8MIIIIHEHELEOHRx8EHMLELMt.HwH8H5FOEЉL=IHMEЅLU~ȃu81HHEH$ALLLMuHM8HH)11fI|$(H|7IH5 LHK14:A}t$IH=L2: 1H#:IH:IH9HHv9H9HH L9LA}DDDDH5lH1LILASAR29HL>9IH5l 1LH9LIOMGMOIGHIGHIG HIG$HIG4HIG8HIG@HIGDHIGHHIGPHIGTHMgXMW`M_dMohHH5_JHPLHxLhLpL`AULXASLARLAT7HĀHBr8HH5IHLHxLhLp`X/7HĀINMF MNIFHIFHIF$HIF*HIF0HIF6HIFH^H8H_H5P1L[%E<$Hr_A<$uE1L5__AHÝH$AEt7LuH^H8H5P1H$Au.A<$t H]HH=P-$AH HP$A<$twIDDDDH5W1HHASAR@$HHPH$IH5W 1HD$HHK LC0LK@HCPHHC`HHCpHIIHHHHHHHHHHHHHHHHHHxL&L6LFLVLfH5,OHPHHhLpLLHASL@ARL`AVLXATLAUxAW"HĐH\8H5NHHHhLpLH@`XxAW!HĐHpL"H!ALcLHJP1LHA?tH5(P1HHHHH\AAAt"tHuXH8H5 P1DUAtHSXH8H5N1D3IcHkxKHDEtHËHBHHSHKLCLKHCHHCHHCHLkLsL{LS L[Lc(HPH5OHHLLLpATLhASLxARLAWLAVSLAUAHPHX8toHH5+OHHLLphxSHPHxHHHLHHHHLHHAQQRVSPAPH@HxCHLHHHLLHHAQQRVARPAPH@HW8uHSHLHHHLLHHpARQRSAPPAQ H@HV8t H`HoUHH;EueHh[A\A]A^A_]HUUH8H5G1H5A$H.UH8H5G1HAf.fUHAWAVATSIIAODGDODW_H5~N1LSARHLHH5"O 1LDI[A\A^A_]yf.UHAWAVAUATSPIH] H!APH ^!AHHBUD8EuHY^!A8HfW)fA@H&A H6A(Au&HvA8f(!fA HPYvAH3YYAM HLHWf.ȸLRGfA(M8Hs:LEAƆ?HJH5MuJApf.u7z5HApHHjYAxHS8M(HyRH;APH5MKH;A@H5M1H;A8H5MH;A H5MH;A(H5LH;H5L1LH;H5L1LH;H5L1LH;ApH5LH;AxH5LH[A\A]A^A_]eH[A\A]A^A_]f.UHAWAVAUATSHIH2QHHEH](HLL\ƅLAFHL5ƅLAF HLƅLAFHêLHƅLUAFA*F YGAXFAF HQ8HTPH;IFHAVH5K1(H;AVH5K1H;AV H5K1H;AFH5KH;AFH5KH;AF H5K IFHIc^Hk8IF(HHEHX LE1E1HP8tHuOH81H5WKDULHƅL IF(BD HsLnƅLIF(BD Hs,LCƅLIF(BD HJP8t1HNH8IF(BD BL BT H5JHsBLƅLNIF(BD HsXLƅL#IF(BD (HsnLƅLIF(BD 0HO8t1HNH8IF(BD BL (BT 0H5IIHHcHÄI8I9=HMHH;EuH[A\A]A^A_]JfDUHAWAVAUATSHHuMHHEЃXHE1LmLuE1HC(BD8  =^BD8 HC(BD8(^BD8(HC(BD80^BD80HC(JL8H`JL8HhJL8HpJL8 H@JL8(HHJD80HPCEċC EEayWA*YCXCHuwH`H@LLHEHK(JD9HEHK(JD9HEHK(JD9HEHK(JD9 HEHK(JD9(HEHK(JD90IHcCI8I9HLHH;Eu1HĘ[A\A]A^A_]UHAWAVAUATSHAILeHKHHEL-%MA}t2HKHI|$(1 HH5F1HHpE>EyI\$0EE1f.HH1 HCDH{1 tHCA}tHKH8CT1H5rFH{14CH{&1CH{41 CA}t/(HJH8CCH5 FpH{N1CH{\1C H{j1C A}t/(H,JH8CC H5EIHxM9HIHH;EuH[A\A]A^A_]|UHHdata.rawHGfLJnfLJnfLJnfLJnH$H`LJ@LJTHLJH@H0H?HX(lHLJhHLJ`HLJHLJHLJHLJLJ\LJH~AH8H~7?HPHHHLJXHLJHLJxHLJpHLJHLJH]f.UHAVSHL57HIH=7D(0I>HH5@D1I>H5@D1HI>`H59D1I>H57D1I>TH5.D1I>HH5)D1I>H5DpI>dH5D1YI>HH5D1AI>HH5D1)I>0H5DI>pH5D1 I>lH5 D1 I>HH5 D1 I>XH5D I>`H5D I>hH5D I>tH5D1h I>xH5D1Q I>H5D8 I>H5D I>H5C I>H5C I>\H5C1 I>H5C1 I>8H5C I>H5C[A^] UHAWAVAUATSHxH}E8D|HEA9HIMcN$LY HEHH]L@ HE~,1fDHEH H`HL HL9|HMHEJ4DAL}HEu1H}upI)L}1HEHLeILuIM BY;MXMEIM9uHEHUHMHH9HEH)HE1HEHMf.E1f.}0HUAHML<W*ECHps E1fE1H]LmDEBM XEECBDMXEECBDMXEECBDMXECIM9pHMHtQHEN4E1f.fECMQHMMXMECIL9uIHEI9HUHHHHuH9H|H]HLuLHUHLHx[A\A]A^A_]H@HH=-?.YH=n?CH`@HH=>HM@HH= ?fUHAWAVAUATSHULc9EMEAMM)AE1WMVLM9J Bf.u ^1AtKfHBY\H\BY\HI9uMtH BY\BY \HL9MIMM9.BDJDB^DH]BDEMIN NJ HCHEHGHEE1DHMLMLUDD)D9}SE\$HcMIAtNDfWJ4H4B Y XHuAs%MIfWfWAEA)HEHHuH 1f.NLLMC YLH\LBYTXH\LBY\LXCYXXHA9uH]LMLUHMC \JKB^ B IM9[A\A]A^A_]ÐUHAVSH@)EIH3\YE\YE YYOMEUYYP\Qf(U^]YCX]XYf)UEWfEfYfAEYEAFH@[A^]ÐUHSHHf'o5f(\Yf( |fWfEWf(Af(fUfTfVf)`f(fYf(XWQmf(Yf(Yf)}f(Y\ef(EYff^f(f()MYXY$ )EfYf()pf(\Xf(YYf(YXfA.f)ef)]sFf(yfWQf(YXEf(^^f(YUBWQE\ EEXE gU\f(Yf( 9f(]fTf.v%f(Yf(EXXY -^f(f(pXQf(]XY$f(YYf(e\f(X\^XWQ\f(UYs\YEf(MXY^f)EMYMU\UxYMU\UYXS(`(h LXfWf(fTfUfVf(EffY&fHĘ[]%j9%l9%n9%p9%r9%t9%v9%x9%z9%|9%~9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9%9L8AS%y8hhh%h=hIhUhahnhzhhhxhnhdhZhPhFh"#%&'a)*;,-/01]348679:;Z=>5@AC|DEWGH1JK MyNOTQR.TU.AMbP?/@/@4RFߑ?UUUUUU?UUUUUU?@-DT!@cܥL@cܥL@Usage: (two modes) mode 1: ALOS_baseline PRM_master PRM_slave PRM_master PRM file for reference image PRM_slave PRM file of secondary image (writes out parameters for appending to PRM file) or mode 2: ALOS_baseline -input file file: list of PRM files first file is assumed to be master following are slaves (writes out decimal year, Bperp, and PRM name) rCan't open prmfile WARNING: Range_sampling_rate is not consistant. You need to do FBD/FBS conversion. ...satellite: ALOS Arghhh...unrecognized satellite ......master LED file %s .........slave LED file %s Can't open ldrfile %sx11 not initializedx12 not initializedx13 not initializedm1 not initializedlon_tie_point = %f lat_tie_point = %f Can't open %s -inputusing command line using input file GMTscriptw %f %f %s SC_vel = %f SC_height = %f SC_height_start = %f SC_height_end = %f earth_radius = %f rshift = %d ashift = %d B_parallel = %f B_perpendicular = %f baseline_start = %f baseline_center = %f baseline_end = %f alpha_start = %f alpha_center = %f alpha_end = %f sub_int_r = 0.0 sub_int_a = 0.0 couldn't open PRM file can't open %s = %s rng_samp_rate %s %s input_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdatenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangePRFI_meanQ_meanaz_reschirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startalpha_startbaseline_endalpha_endSLC_scale %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) interpolation point outside of data constraints hermite: interpolation not in center interval nan! ALOS_ldr_orbit t1 %lf t1 %lf height_start %lf re_start %lf vg_start%lf t1 %lf t2 %lf height %lf re_c %lf vg %lf t2 %lf t2 %lf height_end %lf re__end %lf vg_end %lf SC_vel = %lf earth_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf ... calc_height_velocity time %lf nd %d C pt %lf py %lf pvy %lf time %lf y %lf ir %d C pt %lf pz %lf pvz %lf time %lf z %lf ir %d LED.logcan't open opened LED log file %s .... reading sarleader %2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c*********** SAR FDR FIXED SEGMENT *********** A_E_flag ==> %.2s blank_2 ==> %.2s for_con_doc ==> %.12s for_con_doc_rev_level ==> %.2s file_des_rev_level ==> %.2s softw_rel ==> %.12s file_number ==> %.4s file_name ==> %.16s rec_seq_loc_type_flag ==> %.4s seq_number_loc ==> %.8s seq_number_field_length ==> %.4s rec_code_loc_type_flag ==> %.4s rec_code_loc ==> %.8s rec_code_field_length ==> %.4s rec_len_loc_type_flag ==> %.4s rec_len_loc ==> %.8s rec_len_field_length ==> %.4s reserved_4 ==> %.4s reserved_segment ==> %.64s %6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%60c%6c%6c%288c*********** SAR FDR VARIABLE SEG *********** n_data_set_summ_rec ==> %.6s data_set_summ_rec_len ==> %.6s n_map_projec_rec ==> %.6s map_projec_rec_len ==> %.6s n_plat_pos_data_rec ==> %.6s plat_pos_data_rec_len ==> %.6s n_att_data_rec ==> %.6s att_data_rec_len ==> %.6s n_rad_data_rec ==> %.6s rad_data_rec_len ==> %.6s n_rad_comp_rec ==> %.6s rad_comp_rec_len ==> %.6s n_data_qua_summ_rec ==> %.6s data_qua_summ_rec_len ==> %.6s n_data_hist_rec ==> %.6s data_hist_rec_len ==> %.6s n_range_spectra_rec ==> %.6s range_spectra_rec_len ==> %.6s n_DEM_des_rec ==> %.6s DEM_des_rec_len ==> %.6s n_radar_par_update_rec ==> %.6s radar_par_update_rec_len ==> %.6s n_annotation_data_rec ==> %.6s annotation_data_rec_len ==> %.6s n_detailed_proc_rec ==> %.6s detailed_proc_rec_len ==> %.6s n_cal_rec ==> %.6s cal_rec_len ==> %.6s n_GCP_rec ==> %.6s GCP_rec_len ==> %.6s spare_60 ==> %.60s n_facility_data_rec ==> %.6s facility_data_rec_len ==> %.6s blanks_288 ==> %.288s %4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c%4c%4c%16c%16c%16c%16c%16c%4c%8c%8c%8c%8c%4c%8c%16c%4c%4c%16c%4c%28c%120c%8c%8c%2048c%26c*********** DSS RECORD *********** dss_rec_seq_num ==> %.4s chan_ind ==> %.4s reserved1 ==> %.16s scene_number ==> %.32s input_scene_center_time ==> %.32s spare1 ==> %.16s center_lat ==> %.16s center_long ==> %.16s center_heading ==> %.16s ellipsoid_designator ==> %.16s ellipsoid_semimajor_axis ==> %.16s ellipsoid_semiminor_axis ==> %.16s earth_constant ==> %.16s spare2 ==> %.16s ellipsoid_j2 ==> %.16s ellipsoid_j3 ==> %.16s ellipsoid_j4 ==> %.16s spare ==> %.16s reserved_new ==> %.16s scene_centre_line_number ==> %.8s scene_centre_pixel_number ==> %.8s scene_length ==> %.16s scene_width ==> %.16s spare3 ==> %.16s nchan ==> %.4s spare4 ==> %.4s mission_identifier ==> %.16s sensor_id_and_mode ==> %.32s orbit_number ==> %.8s lat_nadir_center ==> %.8s long_nadir_center ==> %.8s heading_nadir_center ==> %.8s clock_angle ==> %.8s incidence_angle_center ==> %.8s radar_freq ==> %.8s radar_wavelength ==> %.16s motion_compensation ==> %.2s range_pulse_code_specifier ==> %.16s range_pulse_amplitude_const ==> %.16s range_pulse_amplitude_lin ==> %.16s range_pulse_amplitude_quad ==> %.16s range_pulse_amplitude_cube ==> %.16s range_pulse_amplitude_quart ==> %.16s range_pulse_phase_const ==> %.16s range_pulse_phase_lin ==> %.16s range_pulse_phase_quad ==> %.16s range_pulse_phase_cube ==> %.16s range_pulse_phase_quart ==> %.16s chirp_extraction_index ==> %.8s spare5 ==> %.8s sampling_rate ==> %.16s range_gate_early_edge_start_image ==> %.16s range_pulse_length ==> %.16s reserved2 ==> %.4s range_compressed_flag ==> %.4s reserved3 ==> %.32s quantisation_in_bits ==> %.8s quantizer_descriptor ==> %.12s dc_bias_i ==> %.16s dc_bias_q ==> %.16s gain_imbalance ==> %.16s spare6 ==> %.32s reserved4 ==> %.16s antenna_mech_bor ==> %.16s reserved5 ==> %.4s nominal_prf ==> %.16s reserved6 ==> %.32s satelite_encoded_binary_time ==> %.16s satelite_clock_time ==> %.32s satelite_clock_increment ==> %.8s spare7 ==> %.8s processing_facility_identifier ==> %.16s processing_system_id ==> %.8s processing_version_id ==> %.8s reserved7 ==> %.32s product_type_id ==> %.32s alg_id ==> %.32s nlooks_az ==> %.16s neff_looks_range ==> %.16s bandwidth_look_az ==> %.16s bandwidth_look_range ==> %.16s total_look_bandwidth_az ==> %.16s total_look_bandwidth_range ==> %.16s w_func_designator_az ==> %.32s w_func_designator_range ==> %.32s data_input_source ==> %.16s nom_res_3db_range ==> %.16s nom_res_az ==> %.16s reserved8 ==> %.32s a_track_dop_freq_const_early_image ==> %.16s a_track_dop_freq_lin_early_image ==> %.16s a_track_dop_freq_quad_early_image ==> %.16s spare8 ==> %.16s c_track_dop_freq_const_early_image ==> %.16s c_track_dop_freq_lin_early_image ==> %.16s c_track_dop_freq_quad_early_image ==> %.16s time_direction_along_pixel ==> %.8s time_direction_along_line ==> %.8s a_track_dop_freq_rate_const_early_image ==> %.16s a_track_dop_freq_rate_lin_early_image ==> %.16s a_track_dop_freq_rate_quad_early_image ==> %.16s spare9 ==> %.16s c_track_dop_freq_rate_const_early_image ==> %.16s c_track_dop_freq_rate_lin_early_image ==> %.16s c_track_dop_freq_rate_quad_early_image ==> %.16s spare10 ==> %.16s line_content_indicator ==> %.8s clut_lock_flag ==> %.4s autofocussing_flag ==> %.4s line_spacing ==> %.16s pixel_spacing_range ==> %.16s range_compression_designator ==> %.16s spare11 ==> %.16s spare12 ==> %.16s calibration_data_indicator ==> %.4s start_line_upper_image ==> %.8s stop_line_upper_image ==> %.8s start_line_bottom_image ==> %.8s stop_line_bottom_image ==> %.8s PRF_switch ==> %.4s PRF_switch_line ==> %.8s spare13 ==> %.16s yaw_steering_mode ==> %.4s parameter_table ==> %.4s nom_offnadir_angle ==> %.16s antenna_beam_number ==> %.4s spare14 ==> %.28s spare15 ==> %.120s num_anno_points ==> %.8s spare16 ==> %.8s image_annotation ==> %.2048s spare17 ==> %.26s SKYALOS using ALOS_format %d: %3s SAR mode |%.32s| (HIGH RESOLUTION) SAR mode |%.32s| (WIDE OBSERVATION) SAR mode |%.32s| (POLARIMETRY) uncertain SAR mode; assuming high resolution %32c%16c%16c%16c%16c%16c%16c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%16c%16c%16c*********** PLATFORM POSITION VECTOR ********** orbital_elements ==> |%.32s| orbital_element_1 ==> |%.16s| orbital_element_2 ==> |%.16s| orbital_element_3 ==> |%.16s| orbital_element_4 ==> |%.16s| orbital_element_5 ==> |%.16s| orbital_element_6 ==> |%.16s| num_data_points ==> |%.4s| year_of_data_points ==> |%.4s| month_of_data_points ==> |%.4s| day_of_data_points ==> |%.4s| day_of_data_points_in_year ==> |%.4s| sec_of_day_of_data ==> |%.22s| data_points_time_gap ==> |%.22s| ref_coord_sys ==> |%.64s| greenwhich_mean_hour_angle ==> |%.22s| a_track_pos_err ==> |%.16s| c_track_pos_err ==> |%.16s| radial_pos_err ==> |%.16s| a_track_vel_err ==> |%.16s| c_track_vel_err ==> |%.16s| radial_vel_err ==> |%.16s| Warning: number of orbit points %d != 28 .... reading sarleader %d %22c%22c%22c%22c%22c%22c*********** PLATFORM VECTOR ********** pos_x ==> %.22s pos_y ==> %.22s pos_z ==> %.22s vel_x ==> %.22s vel_y ==> %.22s vel_z ==> %.22s %18c%1c%579c%4c*********** ATTITUDE INFO ********** num_att_data_points ==> |%.4s| Warning: number of attitude points %d != 22 %4c%8c%4c%4c%4c%14c%14c%14c%4c%4c%4c%14c%14c%14c*********** ATTITUDE DATA ********** day_of_year ==> |%.4s| millisecond_day ==> |%.8s| pitch_data_quality ==> |%.4s| roll_data_quality ==> |%.4s| yaw_data_quality ==> |%.4s| pitch ==> |%.14s| roll ==> |%.14s| yaw ==> |%.14s| pitch_rate_data_quality ==> |%.4s| roll_rate_data_quality ==> |%.4s| yaw_rate_data_quality ==> |%.4s| pitch_rate ==> |%.14s| roll_rate ==> |%.14s| yaw_rate ==> |%.14s| *********** SAR FDR BINARY ********** record_seq_no ==> %1d record_subtype_code1 ==> %1x record_type_code1 ==> %1x record_subtype_code2 ==> %1x record_subtype_code3 ==> %1x record_length ==> %1d read %d items (%ld bytes) at position %ld BASICradar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lg I_mean = %lf Q_mean = %lf orbdir = %s lookdir = %s date = %s fd1 = %lf fdd1 = %lf number of attitude points %ld doy %d ms %d pitch %12.6f roll %12.6f yaw %12.6f nd %d iy %d id %d sec %lf dsec %lf pt0 %lf orbit point: %d %g %g %g ALOS default settings ************* led_file = %s input_file = %s num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq(iqflip) = %s offset_video(off_vid) = %s az_res = %lf nlooks = %d chirp_ext(nextend) = %d scnd_rng_mig(srm) = %s rng_spec_wgt(rhww) = %lf rm_rng_band(pctbw) = %lf rm_az_band(pctbwaz) = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate(fs) = %lf near_range = %lf Sorry, couldn't allocate memory for A-matrix. sorry, couldn't allocate memory for A-matrix. Sorry, couldn't allocate memory for B-vector. underdetermined system 00X !@ HHH p !"*,p.`GGHTUpXPY Z\`Pp`aħΧا (2<FPZdnx"(`!@___stack_chk_guardQr@___stderrp@___stdoutp@dyld_stub_binderr(@___bzeror0@___sincos_stretr8@___stack_chk_failr@@_acosrH@_asinrP@_atanrX@_atan2r`@_atofrh@_atoirp@_cosrx@_exitr@_fcloser@_fmodr@_fopenr@_fprintfr@_freadr@_freer@_fscanfr@_ftellr@_fwriter@_mallocr@_powr@_printfr@_putsr@_sinr@_strcmpr@_strcpyr@_strncmpr@_strncpyr@_strtodr@_strtolr@_tan__mh_execute_headermaprALOS_fegwrite_cdihermite_ctsxyz2plhUSAGE SAR_mode qu verbose intvecarse_command_linerolyfitlh2xyzead_bias oi input_fileall_ALOS_ldrALOS_sarleaderbaselinelformat ind_orce distanceunit_vectorsalpha_degreesparallel_perp_baselinePndpoint_distancecPPet_oldopmstauss_jordansintdoubleorbit_infoattitude_infoiecondstringgno_structQRRprm_baselinebperpUXlt2rat_subdr_Yalross3_orb_alosc_height_velocity2ut1djiebug opp stens_big_endian_nterpolate_ALOS_orbitn_ooopqorbitprmаi2ecrr2eci_slowint_efix_off binary_positionALOS_defaultsransform_orbits_ecr2ecibias et_ALOS_defaultslc_fact wap ЬЯ_slope d_slope ad_pol iet_flag 10 P  P0`1`pp =  0U.<,N 4X (_s_|PXP27 87 7 <_`d@(0)(P)%`(8 @E HSa0tpRR 8(8Qb5Rh gp7*7;@ AcI ]fo P{З  T X `@l hP p x% ,F O0,\*py "(07?GLTZ_goxABCGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd@DEFABCGHIJKLMNOPQRSTUVWXYZ[\]^_`abc _ALOS_baseline_ALOS_format_ALOS_ldr_orbit_ALOS_ldr_prm_ALOS_llt2rat_sub_SAR_mode_USAGE__mh_execute_header_cal2ut1_calc_height_velocity_calorb_alos_cross3__debug_die_dist_dopp_eci2ecr_ecr2eci_endpoint_distance_find_alpha_degrees_find_distance_find_parallel_perp_baseline_find_unit_vectors_force_slope_forced_slope_gauss_jordan_get_attitude_info_get_double_get_int_get_orbit_info_get_seconds_get_sign_get_sio_struct_get_string_gmst_goldop_hermite_c_interpolate_ALOS_orbit_interpolate_ALOS_orbit_slow_is_big_endian__is_big_endian___main_matvec_parse_command_line_plh2xyz_polyfit_prefix_off_print_ALOS_defaults_print_binary_position_quad_pol_quiet_flag_rbias_read_ALOS_sarleader_read_all_ALOS_ldr_read_input_file_roi_set_ALOS_defaults_slc_fact_swap_tbias_transform_orbits_ecr2eci_verbose_write_bperp_write_prm_baseline_xyz2plh___bzero___sincos_stret___stack_chk_fail___stack_chk_guard___stderrp___stdoutp_acos_asin_atan_atan2_atof_atoi_cos_exit_fclose_fmod_fopen_fprintf_fread_free_fscanf_ftell_fwrite_malloc_pow_printf_puts_sin_strcmp_strcpy_strncmp_strncpy_strtod_strtol_tandyld_stub_binderGMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2fbs/Makefile000644 015705 000000 00000000504 13505462014 023270 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_fbd2fbs CSRCS = ALOS_fbd2fbs.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2fbs/ALOS_fbd2fbs.c000644 015705 000000 00000014335 13505462014 024131 0ustar00sandwellwheel000000 000000 /*************************************************************************** * ALOS_fbd_fbs reads a raw FBD-HH file processed with ALOS_pre_proc and * * upsamples it to FBS-HH bandwidth. The algorithm takes the fft each * * complex range line and zero-pads in the frequency domain. This is * * possible because the FBS bandwidth is exactly two times the FBD. * * Note that the interpolated data may exceed the original data span of * * 0-31 so the numbers are rescaled to lie between 0 and 127 which still * * only one byte of storage. * * The code uses cfft1d which seems to be the standard interface in the * * InSAR community. * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Rob Mellors * * (Scripps Institution of Oceanography) * * Date : 08/04/2007 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" #define clip127(A) (((A) > 127) ? 127 : (((A) < 0) ? 0 : A)) char *USAGE = "ALOS_FBD2FBS FBD.PRM FBS.PRM \n" " FBD.PRM PRM file for input image in fine beam dual " "polarization (FBD 14 MHz) (input) \n" " FBS.PRM PRM file for outout image in fine beam single " "polarization (FBS 28 MHz) (output) \n"; int main(int argc, char **argv) { FILE *prmfile, *datafile, *prmout, *dataout; unsigned char *indata, *outdata; fcomplex *cin, *cout; float rtest, itest; int i, j, k, nffti, nffto; int ibufsize, obufsize, fbdsamp, fbssamp, headsize; struct PRM r; if (argc < 3) die(USAGE, ""); /* flags defined in global_flags.h */ verbose = 0; debug = 0; /* fill the struct with default parameters */ null_sio_struct(&r); /* open input PRM file and read the parameters */ if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); get_sio_struct(prmfile, &r); /* open input raw data file */ if ((datafile = fopen(r.input_file, "r")) == NULL) die("Can't open ", r.input_file); /* open output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); /* assemble the output filename and open for writing */ sscanf(argv[2], "%s", r.input_file); r.input_file[strlen(argv[2]) - 4] = 0; strcat(r.input_file, ".raw"); /* open output file for single look complex image */ if ((dataout = fopen(r.input_file, "w")) == NULL) die("Can't open ", r.input_file); /* compute the sizes for the input and output buffers and allocate the memory */ ibufsize = r.bytes_per_line; if ((indata = (unsigned char *)malloc(2 * ibufsize * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } fbdsamp = r.good_bytes / 2 - r.first_sample; fbssamp = 2 * fbdsamp; headsize = 2 * r.first_sample; obufsize = 2 * (fbssamp + r.first_sample); if ((outdata = (unsigned char *)malloc(2 * obufsize * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for output outdata.\n"); exit(-1); } /* find best length of fft (use power of two) for both input and output */ nffti = find_fft_length(fbdsamp); nffto = find_fft_length(fbssamp); if (debug) fprintf(stderr, " nffti %d nffto %d \n", nffti, nffto); /* allocate the memory for the complex arrays */ if ((cin = (fcomplex *)malloc(nffti * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbd \n"); exit(-1); } if ((cout = (fcomplex *)malloc(nffto * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbs \n"); exit(-1); } /* read and write the input and output raw files */ for (k = 0; k < r.num_lines; k++) { fread((void *)indata, sizeof(unsigned char), ibufsize, datafile); fwrite((void *)indata, sizeof(unsigned char), headsize, dataout); /* fill the complex array with complex indata */ for (j = 0; j < nffti; j++) { i = j + r.first_sample; if ((j < fbdsamp) && (((int)indata[2 * i]) != NULL_DATA) && (((int)indata[2 * i + 1]) != NULL_DATA)) { cin[j].r = (float)(indata[2 * i] - r.xmi); cin[j].i = (float)(indata[2 * i + 1] - r.xmq); } else { cin[j].r = 0.0; cin[j].i = 0.0; } } /* interpolate from fbd to fbs */ rng_expand(cin, nffti, cout, nffto); /* convert the complex back to bytes */ for (j = 0; j < obufsize / 2; j++) { i = j + r.first_sample; /* increase dynamic range by 2 and set the mean value to 63.5 */ rtest = rintf(2. * cout[j].r + 63.5); itest = rintf(2. * cout[j].i + 63.5); /* sometimes the range can exceed 0-127 so clip the numbers to be in the correct range */ outdata[2 * i] = (unsigned char)clip127(rtest); outdata[2 * i + 1] = (unsigned char)clip127(itest); } fwrite(outdata + headsize, sizeof(unsigned char), obufsize - headsize, dataout); } /* compute the changes to the output PRM-file */ r.xmi = 63.5; r.xmq = 63.5; r.chirp_ext = r.chirp_ext * 2; r.good_bytes = 2 * (fbssamp + r.first_sample); r.bytes_per_line = obufsize; r.num_rng_bins = fbssamp + r.chirp_ext; r.fs = r.fs * 2.; if (debug) fprintf(stderr, " %d %d %d %d %f %f \n", r.chirp_ext, r.good_bytes, r.bytes_per_line, r.num_rng_bins, r.fs, r.chirp_slope); /* write the output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("can't open prfile", argv[2]); put_sio_struct(r, prmout); free(indata); free(outdata); free(cin); free(cout); fclose(prmfile); fclose(prmout); fclose(datafile); fclose(dataout); } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbd2fbs/ALOS_fbd2fbs000755 015705 000000 00000205470 13507242210 023711 0ustar00sandwellwheel000000 000000 P H__PAGEZERO(__TEXT__text__TEXT00__stubs__TEXTr__stub_helper__TEXT44__const__TEXT__cstring__TEXTg __unwind_info__TEXThh(__DATA__nl_symbol_ptr__DATA__got__DATA__la_symbol_ptr__DATA  __data__DATA__bss__DATA __common__DATA\H__LINKEDIT8 "0HP(xP=p P'' * /usr/lib/dyldE@<~:^mǩh2   *(0 8/usr/lib/libSystem.B.dylib&()8UHAWAVAUATSHIHHHEЃH=WH5rHHWH IH5=IIHuIwH='HLHS H5HHpHuH=HIH5HuIwH=`IH5H1HIƄH5HmH5H|IHuH=^HLXHcHH<gHxH4LcHD)A^HHcHIL`HߍH.AHh.H8tHH8H51DDIcHHILLHcH{HIHPHLLHHH0LcHD)DHHPLHH@HH(H H8HHH1L f.HLxLHHpLH(HzD14W*\ZW*A\WZ@DL9}+PHcAtHcA<uf.@AWATHI9uLL L⋍K+%-s11fDL1HHPf(5d(=mfDot@A(ZAT(ZfXfXfXfXfZfZZfZfXfXfXfXfZfZf:ff:(fW_f8[f8+(W_f8[f8+f`fA8HcfLHH95H߉H;H@H HH)HcHH1f.@DZXXZ f: ZXXZf: W_((UTV,W_((UTV,@|ppHH9wH8H0HHH;PHO@HH$$HhɉDDD FD XH8t H H8H5H`H{H5IHuHsH=*HHHLHxHvLnLfHXBL:Hp.H"HEHH;Eu1H[A\A]A^A_]H$HH=2AH HH=4)HHH=BHHH=Y)UH]DUH]DUHHHHH8H5P1P4@UHGOYFYN\OYFY\JOYFY\B]UHp)X (^Y W*X^XW*f(X^XhW*^X]UHHXXXXXXXXHHHHHH HHHHH8H0H(H (MHXLJhayLJlayLJpaytLJayLJayLJay(Ht$iH(8HXhxHHH]ÐUHAWAVAUATSHxIHHHEHH5HH1HhfIHpIHxIHIHIHIHIHI HIHI HI(HI8HLLL-DLH5u=LL;u-HH81LLH Mnf.fLH5o}u=HpLp;u)HZH81LLH 9MLH5(-u=HxL ;u)H H81LLH MLH5u=HL;u)HH81LLH MzLH5u=HL;u)HjH81LLH mM*LH5`=u=HL0;u)HH81LLH *MLH5u=HL;u)HH81LLH MLH5u=HL;u)HzH81LLH M:LH5Mu=HL@;u)H*H81LLH VMLH5Eu=HL;u)HH81LLH MLH5u=HL;u)HH81LLH MJLH5]u=HLP;u)H:H81LLH MLH5m u=HL;u)HH81LLH 7MILH5uJLlAA}u4HH81H5pLH MALf.LH5]uMLAA}u7H6H81H5LH MAf.LH5ruML诿ALA}u7HH81H5LH 4MA菿f.LH5!蝿uMLOAPA}u7HvH81H5SLH MA/f.LH5=uMLATA}u7HH81H5LH MAϾf.LH5ݾuML菾AXA}u7HH81H5LH BMAof.LH5,}uML/A\A}u7HVH81H53LH MAf.LH5uMLϽA`A}u7HH81H5LH MA诽f.LH5载uMLoAA}u7HH81H5sLH HMAOf.LH52]uMLAlA}u7H6H81H5LH MAf.LH5uML诼AdA}u7HH81H5LH MA菼f.LH5蝼uMLOAhA}u7HvH81H5SLH IMA/f.LH54=uMLAA}u7HH81H5LH MAϻf.LH5ݻuML菻ApA}u7HH81H5LH MAof.LH5}uML/AtA}u7HVH81H53LH JMAf.LH5/uMLϺAxA}u7HH81H5LH MA诺f.LH5ֿ轺uMLoAtA}u7HH81H5sLH MAOf.LH5}]uMLAxA}u7H6H81H5LH 1MAf.LH5$uML诹AA}u7HH81H5LH MA菹f.LH5Ͼ蝹LuJLFA;u4HuH8H5fLH M1f.DLH5~=L- uFLA;u0HH8H5LH ;M͸f.LH5,ݸu=L艸A;u'HH8H5LH MtfLH5荸u=L9A;u'HhH8H5YLH M$fLH5=u=LA;u'HH8H5 LH fMԷfLH5]u=L虷A;u'HH8H5LH !M脷fLH5蝷u=LIA;u'HxH8H5iLH ټM4fLH5ҼMu=LA;u'H(H8H5LH MfLH5u=L詶A;u'HH8H5ɽLH XM蔶fLH5Q譶u=LYA;u'HH8H5yLH MDfLH5]u=L A;u'H8H8H5)LH ̻MfLH5» u=L蹵A;u'HH8H5ټLH M褵fLH5轵u=LiA;u'HH8H5LH FMTfLH5@mu=LA;u'HHH8H59LH MfLH5u=LɴA;u'HH8H5LH M贴fLH5ʹu=LyA ;u'HH8H5LH sMdfLH5f}u=L)A(;u'HXH8H5ILH *MfLH5-u=LٳA0;u'HH8H5LH MijfLH5Թݳu=L艳A8;u'HH8H5LH MtfLH5荳u=L9A@;u'HhH8H5YLH VM$fLH5N=u=LAH;u'HH8H5 LH MԲfLH5u=L虲AP;u'HH8H5LH ̸M脲fLH5ɸ蝲u=LIAX;u'HxH8H5iLH M4fLH5Mu=LA`;u'H(H8H5LH JMfLH5Bu=L話Ah;u'HؿH8H5ɸLH M蔱fLH5譱u=LYAp;u'HH8H5yLH MDfLH5]u=L Ax;u'H8H8H5)LH uMfLH5f u=L蹰A;u'HH8H5ٷLH *M褰fLH5轰u=LiA;u'HH8H5LH MTfLH5ֶmu=LA;u'HHH8H59LH MfLH5u=LɯA;u'HH8H5LH TM贯fLH5Jͯu=LyA;u'HH8H5LH MdfLH5}u=L)A;u'HXH8H5ILH ȵMfLH5-u=LٮA;u'HH8H5LH MĮfLH5|ݮu=L艮A;u'HH8H5LH @MtfLH5;荮u=L9A;u'HhH8H5YLH M$fLH5=u=LA;u'HH8H5 LH MԭfLH5u=L虭A;u'HȻH8H5LH xM脭fLH5n蝭u=LIA;u'HxH8H5iLH 2M4f1HhH5$LL)\H%HH;EuHx[A\A]A^A_]转DUHAWAVSPHIIHHH8u+H׺H8H51LLIH[A^A_]鍬H[A^A_]UHAWAVATSHIIIHKAH=8u)HqH8H5P1LLM[A\A^A_])[A\A^A_]f.@UHAWAVATSHIIIHիHκ8u)HH8H5LLM[A\A^A_]麫[A\A^A_]ÐUHAWAVSPILupaytH51LrAaytH51LRATaytH51L2IH5HStH51LHAf.|u{H5tL٪AdaytH5h1L蹪IH5!HڪtH5N1LH膪IH5H觪tH5.1LHSA0f.Ыu{H5L-ApaytH51L AlaytH51LIH5UHtH51LH躩AXf.7u{H5ԱL蔩A`f.u{H5ƱLnAhf.u{H5LHAtaytH51L(AxaytH51LAf.u{@AH5L٨Af.Vu{H5sL賨Af.0u{H5cL荨Af. u{H5ULgA\aytH5M1LGAaytH5D1L'A8f.u{H55LH5pL)tH5%1LLէAhaytH51L赧ALaytH5 1L蕧APaytH51LuAf.u{H5LOAHf.̨u{H5ްL)Af.u{H5ʰLAaytH51LAXaytH51LæAf.@u{H5L蝦Af.u{H5LwAf.u{H5LQAf.Χu{H5L+IH5HLtH5i1LHI8H5`HtH5G1LHťI H5-HtH5$1LH蒥I(H5H賥tH51LH_APf.ܦu{H5L9A@f.u{H5LA8f.u{H5ϯLA f.ju{H5LǤA(f.Du{H5L衤Af.u{H5L{Af.u{H5LUAf.ҥu{H5qL/Af.u{H5eL Af.u{H5ULAf.`u{H5BL轣Af.:u{H54L藣Apf.u{H5%LqAxf.u{H5 LKAf.Ȥu{H5L%Af.u{H5LAf.|u{H5ݮL٢Af.Vu{H5֮L賢Af.0u{H5ϮL荢Af. u{H5ȮLgAf.u{H5LAAf.u{H5LAf.u{H5LIH5]HtH51LH¡I0H5*HtH51LH菡Af. u{H5LiH[A^A_]ÐUHAWAVATSHAIAHuԉMEH}HUHEIcHHAHs 1Mu\tL)1AADADADAD AD(AD0AD8HH9uMtI1DHI9uA|pDDIHHcɉHIvf.@CXFXDXDXHHHuEH}HULdH[A\A^A_]ÐUHSPÍ9|H8tHܭH8H5׬1ʉ衟H[]ÐUHAWAVSPII P9uAttr@t H=XHHBDCYBLAYAYL=XC III9|ILUIIL;MH`[H]HËuuuHuHPHuHHHuHpH;0$!0HcUMcDHELMI IO$)HH HMNl HUH HUJT IE1L8H@LPLEx5HpIcHUILmMLeLeALHDELmLuLx~}LcHU1Lef.fALHAYC AYAY 3\ADAAY3C AYAY XA 7IHHuIHHHuIIL;MLUAHHUAL8H@H`LPLLeLmHUHpHMMLEH;0GL8H@;f.H(HHc<ˋAC HEAD}HIEHEMLEGHhH]Hp%HcHALcEIc̉AIJ4IH]f.X3AE\3ADHcHEXD3AE\D3ADDILHu@LcGDHEH0\9LmL`LL"HEHcHMHcHcH}AȉHhHAHHHHEHHHY]HUHHHEHxHufDE~~HcUHULeLmL]E1}~IMcILLMLufC!CXC.C!C\CIIHuIIIII9uHHxH)UHUMHEH;]L`SE*HELcD}AEAH0HAH`DEADAJ4M)LUE1f.}~v}u1MuFgf.LD1H]@H<9A<Hc(XAl=\ >AY(XL9\Ad8AYA(X 9D\E8HHZf.AsL}+Iލ 4@HHcHcHcAMDMLMTM\HHHLf.HHA$?HHE ?HHA,?Aq Y$(\XDYYE(D\DX(\XE(D\DX!XAXAdaXAXAd(AYDQXA(AY\(AYAXA(AY\AY\EYDXAYD\EYEX(ِD(YA(ɐD(YX(AYA(AYXAYEYA\YAYEYA\(\ADXYYYAT(XAD(AXADA(\ADAXALD\E\\AdHH(H HHHI9MHcHMDIALcIcIcAHuJ|H}HII\IIHH >H HuI9tf.@AHH9|H[A\A]A^A_]f.fUHu]Í?DHH IcLA]UHAWAVAUATSHXH}Ѓ HUЍ HHEHcHuL4A1E1ۉLuHw,f.EHEHwHqD$ fDAHHEMcAK\K| E1Ef.@MωșAA9uMOGdAMIEAG4INAHs6X)HcEHUHcHcTHuHXHHHHHMHH]HMHHL$H}HH}M,}LLML]E1fD}|aA@CDB\CDCDBXBDCBXDCCB\DBII9|IIIHHI9uHHuHuIHuIIH;MCML`HEaAɃvJ I9eK H9X1HHLLHtH@ EMcA H$MH}ȉDMLL0"M=353D 3D2D=$3D53D-2D%2D2D(3H}IAL} L8LhL`LX1Hxf.HHXH`LhL8HHpHxHIHEHHHIHEIML,IMLTIMHDIIHEAfDHEILBDA$BT(I A YYYHEILYA4B\BL(XYI A,\YYYX\(X(KL!XA4XO\)C4HHHK >ILL9MuHxHuMMMIH`HUt LMLH@B B IHuHHMHMHMHMHMHMH;pHE4;MihLMIcDEIcDH`hHpHHHUHHuH4HuHH}DAEEHxHuf.H}}H`HcuLLEL}LUE1@}Lm|\ACtHcCTCYCYXA\CTCCYY\CII9|IIIMI9uH}HNjuuuHuHuHuHuHxHuH;p!hLMIcMLcHMhH`LLH HHPHH}HH J|H}HuH<HuJtHuILxDžpfHUALcpLeL}L]Af}Lu~nHuE1Mf.fLHBTYB\CYXABTCYB\Y\C IIHuIIHIIIL;maHUHLMDpHuHPHuHxHuHuH;`u94]HhTHcEHcHcLH}HcAHLEI|H}H<HtHuHHH ItHuHMHHMLlAf.}uLLeL}LUAf.@~bLE1fDCTCXTCTCC\BTCCXCCTC\TBIHuIIIIHI9|IHMHMHMHMHMIL;u-3Hh HcELcHcLHUHcHLIHuH HMJ HMHHMH L NN,Af.}LMML]E1fD}|_DATAXTTAA\ATAAXATA\TAHH9|IIIIHI9uIHuHuIHuIIL;uELhADZDZLcuMHcHcLHUIcAIHMHILMcFA A $IIAIuILEMHMHMDmL)L;]M|}LUuHx[A\A]A^A_]94}tLhIcLMMcHcHcLHxHUIIHUJLXLHKO?qxs?y??@?׳??55?ALOS_FBD2FBS FBD.PRM FBS.PRM FBD.PRM PRM file for input image in fine beam dual polarization (FBD 14 MHz) (input) FBS.PRM PRM file for outout image in fine beam single polarization (FBS 28 MHz) (output) rCan't open w%s.rawSorry, couldn't allocate memory for input indata. Sorry, couldn't allocate memory for output outdata. nffti %d nffto %d Sorry, couldn't allocate memory for fbd Sorry, couldn't allocate memory for fbs %d %d %d %d %f %f can't open prfile %s %s %s = %s input_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdatenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangePRFI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startalpha_startbaseline_endalpha_endSLC_scale %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) num_valid_az = %d nrows = %d first_line = %d XXXXXXXXdeskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate = %lf input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d PRF = %lf pulse_dur = %e near_range = %lf num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s date = %.6s orbdir = %.1s lookdir = %.1s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lf I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %12.8lf fddd1 = %lf sub_int_r = %f sub_int_a = %f B_parallel = %f B_perpendicular = %f baseline_start = %f alpha_start = %f baseline_end = %f alpha_end = %f SLC_file = %s dtype = %s SLC_scale = %f find_fft_length: ...data length n %d nfft %d Sorry, can't allocate mem,,Xa 0DDD H0 #@$ %p/00122@`p` PDNXblv" `@___stack_chk_guardQr@___stderrp@dyld_stub_binderr @___sincos_stretr(@___stack_chk_failr0@___strcat_chkr8@_atofr@@_atoirH@_exitrP@_fcloserX@_fopenr`@_fprintfrh@_freadrp@_freerx@_fscanfr@_fwriter@_mallocr@_sscanfr@_strcmpr@_strcpyr@_strlenr@_strncmp__mh_execute_headermainis_big_endian_dcget_null_sio_structprfUSAGEALOS_formatSAR_modequstbiasverbose"2_2ieebugopp3ross3_fft3sintdoubleecondsio_structtring458jjkut_sio_structrefix_offlng_expandfftbiasoiind_fft_lengthorce1d_fbibfi1Ѐ_sloped_slopead_poliet_flaglc_factwap"0`1`ppP0Z0h.0Tq8    4`B=pqDCKqR[ bg mB~  5p5 5`p0 P6+ 5 A HPOtW0^e@q v    (#+3;CKS\'(+,-./0123456789:;<@)*'(+,-./0123456789:; _ALOS_format_SAR_mode_USAGE__mh_execute_header_cfft1d__cfftb_cfftf_cffti_cross3__debug_die_dopp_find_fft_length_force_slope_forced_slope_get_double_get_int_get_seconds_get_sio_struct_get_string_is_big_endian__is_big_endian___main_null_sio_struct_prefix_off_put_sio_struct_quad_pol_quiet_flag_rbias_rfftb_rfftb1_rfftf_rffti_rng_expand_roi_slc_fact_swap_tbias_verbose___sincos_stret___stack_chk_fail___stack_chk_guard___stderrp___strcat_chk_atof_atoi_exit_fclose_fopen_fprintf_fread_free_fscanf_fwrite_malloc_sscanf_strcmp_strcpy_strlen_strncmpdyld_stub_binderGMTSAR_V5.7/preproc/ALOS_preproc/ALOS_look/Makefile000644 015705 000000 00000000477 13505462014 022735 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_look CSRCS = ALOS_look.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_look/ALOS_look.c000644 015705 000000 00000040463 13505462014 023222 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Program to project a longitude, latitude, and topography * into a file of longitude latitude, and topography and unit look vector. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography and * unit look vector then transform the unit look vector from global to * local coordinate ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 11/28/08 - modified from ALOS_llt2rat.c to compute accurate look vector.* * need to specify the latitude and longitude of the pole to * * transform from global elipsoid cartesian to local East-North- * * up coordinate * * The start and end clock of the orbit is changed to allow for * * long swath, the start time should be in the first frame so * * PRM file. ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 char *USAGE = " \n Usage: " "ALOS_look master.PRM [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - lon, lat, elevation look_E look_N look_U " "[ASCII default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: ALOS_look master.PRM < topo.llt > topo.lltn \n"; /* int parse_ALOS_look(char **, char *); */ int main(int argc, char **argv) { FILE *fprm1; int otype; double rln, rlt, rht, t1, t2, tm; double ts, rng, thet, relp, telp; double xp[3]; // double xt[3],dr; double rp[3]; double dd[6]; /* dummy for output double precision */ float ds[6]; /* dummy for output single precision */ /* double r0,rf,a0,af; */ double rad = PI / 180.; double fll; int i, j, k, nrec, npad = 8000; int goldop(); int stai, endi, midi, xmin; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; FILE *ldrfile; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); double len, unit_x, unit_y, unit_z; double dist(); double Rx[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double Rz[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double A[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double local_look[3] = {0, 0, 0}; double pole_lon, pole_lat, b, g; /* Make sure usage is correct and files can be opened */ if (argc < 2 || argc > 3) { fprintf(stderr, "%s\n", USAGE); exit(-1); } /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 3) { if (!strcmp(argv[2], "-bos")) otype = 2; else if (!strcmp(argv[2], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* dubugging fprintf(stderr,"debug\n"); fprintf(stderr,"%s\n",prm.led_file); fprintf(stderr,"%lf\n",prm.fs); fprintf(stderr,"%d\n",prm.num_rng_bins); fprintf(stderr,"%d\n",prm.num_valid_az); fprintf(stderr,"%lf\n",prm.rc); fprintf(stderr,"%lf\n",prm.ra); fprintf(stderr,"%lf\n",prm.prf); fprintf(stderr,"%lf\n",prm.RE); fprintf(stderr,"%lf\n",prm.sub_int_a); fprintf(stderr,"%lf\n",prm.SC_clock_start); fprintf(stderr,"%d\n",prm.nrows); fprintf(stderr,"%d\n",prm.num_patches); fprintf(stderr,"%lf\n",prm.near_range); fprintf(stderr,"rshift = %d\n",prm.rshift); fprintf(stderr,"sub_int_r = %lf\n",prm.sub_int_r); fprintf(stderr,"chirp_ext = %d\n",prm.chirp_ext); */ fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ALOS_sarleader(ldrfile, &prm, orb); #if 0 dr = 0.5*SOL/prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 4th point or about 16 m along track. sometimes this code goes into an infinite loop if ts is too small */ ts = 4. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ /* fprintf(stderr,"ts=%lf,t1=%lf,nrec=%d\n",ts,t1,nrec); */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* look at the orb_pos for(i=0;i<4;i++) { for (j=0;j 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); xmin = goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); // xt[0]=rng; // xt[1]=tm; /* fprintf(stderr,"rng = %f, tm = %f",rng,tm); */ /* calculate the unit look vector originated from ground point to satellite in the global cartesian coordinate */ /* fprintf(stderr,"x y z of the satellite minimum: %f, %f, %f\n",orb_pos[1][xmin],orb_pos[2][xmin],orb_pos[3][xmin]); */ len = dist(xp[0], xp[1], xp[2], xmin, orb_pos); unit_x = (orb_pos[1][xmin] - xp[0]) / len; unit_y = (orb_pos[2][xmin] - xp[1]) / len; unit_z = (orb_pos[3][xmin] - xp[2]) / len; /* fprintf(stderr,"unit look vector: %f, %f, * %f\n",unit_x,unit_y,unit_z); */ /* there is a way to test the sign is right */ /* compute the look vector in local coordinate */ /* rotate the global coordinate to a local coordinate system */ /* location of the rotation pole */ /* refer to a matlab version rot3d.m to check the formula */ pole_lon = fmod((rln + 360.0), 360.0); /* fprintf(stderr,"pole_lon %f\n",pole_lon); */ pole_lat = rlt; /* construct a rotation matrix */ b = (pole_lat - 90) / 180. * 3.14159; Rx[0][0] = 1; Rx[0][1] = 0; Rx[0][2] = 0; Rx[1][0] = 0; Rx[1][1] = cos(b); Rx[1][2] = -sin(b); Rx[2][0] = 0; Rx[2][1] = sin(b); Rx[2][2] = cos(b); g = (pole_lon + 90) / 180. * 3.14159; Rz[0][0] = cos(g); Rz[0][1] = sin(g); Rz[0][2] = 0; Rz[1][0] = -sin(g); Rz[1][1] = cos(g); Rz[1][2] = 0; Rz[2][0] = 0; Rz[2][1] = 0; Rz[2][2] = 1; /* zero A */ for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) A[i][j] = 0; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) for (k = 0; k < 3; k++) A[i][j] += Rx[i][k] * Rz[k][j]; /* print out the matrix */ /* for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rx[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rz[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",A[i][j]); putchar('\n'); } */ for (i = 0; i < 3; i++) local_look[i] = A[i][0] * unit_x + A[i][1] * unit_y + A[i][2] * unit_z; /* compute the range and azimuth in pixel space xt[0] = (xt[0] - prm.near_range)/dr-(prm.rshift+prm.sub_int_r)+prm.chirp_ext; xt[1] = prm.prf*(xt[1]-t1)-(prm.ashift+prm.sub_int_a); fprintf(stderr,"xt[0] = %f\n",xt[0]); if(xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) continue; fprintf(stderr,"%f %f %f %f %f \n",xt[0],xt[1],rp[2],rp[1],rp[0]); */ if (otype == 1) { /* fprintf(stdout,"%f %f %f %f %f * %f\n",rp[1],rp[0],rp[2],unit_x,unit_y,unit_z); */ fprintf(stdout, "%f %f %f %f %f %f\n", rp[1], rp[0], rp[2], local_look[0], local_look[1], local_look[2]); } else if (otype == 2) { ds[0] = (float)rp[1]; ds[1] = (float)rp[0]; ds[2] = (float)rp[2]; ds[3] = (float)local_look[0]; ds[4] = (float)local_look[1]; ds[5] = (float)local_look[2]; fwrite(ds, sizeof(float), 6, stdout); } else if (otype == 3) { dd[0] = rp[1]; dd[1] = rp[0]; dd[2] = rp[2]; dd[3] = local_look[0]; dd[4] = local_look[1]; dd[5] = local_look[2]; fwrite(dd, sizeof(double), 6, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_look/ALOS_look000755 015705 000000 00000136624 13507242211 023006 0ustar00sandwellwheel000000 000000  H__PAGEZERO(__TEXT__text__TEXT Bc __stubs__TEXTmm__stub_helper__TEXTLnLn__const__TEXTPoPo__cstring__TEXTs+s__unwind_info__TEXTdd__DATA__nl_symbol_ptr__DATA__got__DATA__la_symbol_ptr__DATA((__data__DATA__common__DATA\H__LINKEDIT "0X`XH8H P--3 /usr/lib/dyld 1T7枛2   *( 8/usr/lib/libSystem.B.dylib&8)8UHAWAVAUATSHHuHHEW))))HDž ))))HDžgHAudLsH5sjL ctJH5ejLbAt7HؔH;H5Jj1LbH3H=bmbAH{H5=jlbHHL(L]HLzH2bLH5iL(bHHuH=jL% 07bH0H(HH2\x)*@*^ c^PX^YbX@X\^D, aIMcJHlaHIHZaH8IGHGaH IGH4aH(IGH0LP@DH=hHhHHp1`x^A>DdWA*YafWXD,Hf(L8xf.HHEHhHEHpHEH}Hu _f. afWf.pafWvzf.ZafWvdYH4LH8HLH5D?1LE<$HLA<$uE1L5LAHÝHAEt7LuHKH8H53?1H{Au.A<$t HKHH=)?-pAH HP4A<$twIDDDDH5E1HHASARHHPIH5IF 1HDHHK LC0LK@HCPHHC`HHCpHIIHHHHHHHHHHHHHHHHHHxL&L6LFLVLfH5=HPHHhLpLLHASL@ARL`AVLXATLAUxAW?HĐHgJ8H5Y=HHHhLpLH@`XxAWxHĐHpLH7ALcLHJ1LHhA?tH5>1HH2HHfHAAAt"tH%FH8H5>1DAtHFH8H5W=1DIcHkxHDEtHËHBHHSHKLCLKHCHHCHHCHLkLsL{LS L[Lc(HPH5>HHLLLpATLhASLxARLAWLAVSLAUHPHF8toHH5=HHLLphxSJHPHxHHHLHHHHLHHAQQRVSPAPH@HxCHLHHHLLHHAQQRVARPAPH@HxD8uHSHLHHHLLHHpARQRSAPPAQ H@HgD8t HHCHH;EueHh[A\A]A^A_]HCH8H5:61HA$HBH8H5761HAdf.fUHAWAVATSIIAODGDODW_H5=1LSARBHLTHH5= 1LDI[A\A^A_]f.UHAWAVAUATSPIH] HAPH^JAHHBD8EuH|YA8H_fWIfA@H&BA H6-A(Au&HA8f(fA HYAHYyAM HLHWf.ȸLRGfA(M8Hs:LAƆ?HJH5*<uJApf.u7z5HApHHYAxH`A8M(H)@H;APH5; H;A@H5; H;A8H5; H;A H5; H;A(H5;y H;H5;1Le H;H5;1LQ H;H5;1L= H;ApH5w;# H;AxH5j;H[A\A]A^A_] H[A\A]A^A_]f.UHAWAVAUATSHIH>HHEH](HLL ƅLq AFHL ƅLJ AF HL ƅL AFHêLHl ƅL AFA*F Y_ AXFAF HH;IFHAVH5:1 H;AVH5w:1 H;AV H5k:1 H;AFH5]:} H;AFH5Q:f H;AF H5F:O IFHIc^Hk8_ IF(HHEHX LE1E1HY>8tH%=H81H59D LH# ƅL IF(BD HsL ƅL} IF(BD Hs,L ƅLR IF(BD H=8t1H~<H8IF(BD BL BT H5@9. HsBLe ƅL IF(BD HsXL: ƅL IF(BD (HsnL ƅL IF(BD 0H<8t1H;H8IF(BD BL (BT 0H58p IHHcHÄI8I9=Hf;HH;EuH[A\A]A^A_]fDUHAWAVAUATSHH%;HHEЃXHE1LmLuE1HC(BD8  ]^BD8 HC(BD8(^BD8(HC(BD80^BD80HC(JL8H`JL8HhJL8HpJL8 H@JL8(HHJD80HPCEċC EEayWA*YCXCHuH`H@LL>HEHK(JD9HEHK(JD9HEHK(JD9HEHK(JD9 HEHK(JD9(HEHK(JD90IHcCI8I9H9HH;Eu1HĘ[A\A]A^A_]KUHAWAVAUATSHAILeHk9HHEL-:A}t2HW9HI|$(1 qHH5{51HHE>EyI\$0EE1f.HH1 HCDH{1 HCA}tH8H8CT1H5 5{H{1CH{&1CH{41CA}t/(HQ8H8CCH54H{N1ICH{\14C H{j1C A}t/(H7H8CC H5/4IHxM9H7HH;EuH[A\A]A^A_]0UHHdata.rawHGfLJnfLJnfLJnfLJnH$H`LJ@LJTHLJH@H0H?HX(~ lHLJhHLJ`HLJHLJHLJHLJLJ\LJH~AH8H~7?HPHHHLJXHLJHLJxHLJpHLJHLJH]f.UHAVSHL55IH=2(I>HH521I>H521H|I>`H521eI>H521NI>TH5217I>HH521I>H52I>dH521I>HH521I>HH521I>0H52I>pH521I>lH521xI>HH521`I>XH52GI>`H52.I>hH52I>tH521I>xH521I>H52I>H52I>H52I>H52I>\H521lI>H521UI>8H52<I>H52[A^]UHAVSH@)EIH\YEf\YE YYOMEUYY \Qf(U^]YCX]XYf)UE+fEfYfAEYEAFH@[A^]%`2%b2%d2%f2%h2%j2%l2%n2%p2%r2%t2%v2%x2%z2%|2%~2%2%2%2%2%2%2%2L1AS%1hhh.h:hFhRh`hlhyhhhxhnhdhZhPhFh"#%&'a)*;,-/01]348679:;Z=>5@AC|DEWGH1JK MyNOTQR.TU.A@@MbP?/@/@@4RFߑ? Usage: ALOS_look master.PRM [-bo[s|d]] < inputfile > outputfile master.PRM - parameter file for master image and points to LED orbit file inputfile - lon, lat, elevation [ASCII] outputfile - lon, lat, elevation look_E look_N look_U [ASCII default] -bos or -bod - binary single or double precision output example: ALOS_look master.PRM < topo.llt > topo.lltn %s -bos-bod %s *** option not recognized *** rcouldn't open master.PRM can't open %lf %lf %lf %f %f %f %f %f %f %s %s %s = %s input_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdatenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangePRFI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startalpha_startbaseline_endalpha_endSLC_scale %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) interpolation point outside of data constraints hermite: interpolation not in center interval nan! LED.logwcan't open opened LED log file %s .... reading sarleader %2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c*********** SAR FDR FIXED SEGMENT *********** A_E_flag ==> %.2s blank_2 ==> %.2s for_con_doc ==> %.12s for_con_doc_rev_level ==> %.2s file_des_rev_level ==> %.2s softw_rel ==> %.12s file_number ==> %.4s file_name ==> %.16s rec_seq_loc_type_flag ==> %.4s seq_number_loc ==> %.8s seq_number_field_length ==> %.4s rec_code_loc_type_flag ==> %.4s rec_code_loc ==> %.8s rec_code_field_length ==> %.4s rec_len_loc_type_flag ==> %.4s rec_len_loc ==> %.8s rec_len_field_length ==> %.4s reserved_4 ==> %.4s reserved_segment ==> %.64s %6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%60c%6c%6c%288c*********** SAR FDR VARIABLE SEG *********** n_data_set_summ_rec ==> %.6s data_set_summ_rec_len ==> %.6s n_map_projec_rec ==> %.6s map_projec_rec_len ==> %.6s n_plat_pos_data_rec ==> %.6s plat_pos_data_rec_len ==> %.6s n_att_data_rec ==> %.6s att_data_rec_len ==> %.6s n_rad_data_rec ==> %.6s rad_data_rec_len ==> %.6s n_rad_comp_rec ==> %.6s rad_comp_rec_len ==> %.6s n_data_qua_summ_rec ==> %.6s data_qua_summ_rec_len ==> %.6s n_data_hist_rec ==> %.6s data_hist_rec_len ==> %.6s n_range_spectra_rec ==> %.6s range_spectra_rec_len ==> %.6s n_DEM_des_rec ==> %.6s DEM_des_rec_len ==> %.6s n_radar_par_update_rec ==> %.6s radar_par_update_rec_len ==> %.6s n_annotation_data_rec ==> %.6s annotation_data_rec_len ==> %.6s n_detailed_proc_rec ==> %.6s detailed_proc_rec_len ==> %.6s n_cal_rec ==> %.6s cal_rec_len ==> %.6s n_GCP_rec ==> %.6s GCP_rec_len ==> %.6s spare_60 ==> %.60s n_facility_data_rec ==> %.6s facility_data_rec_len ==> %.6s blanks_288 ==> %.288s %4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c%4c%4c%16c%16c%16c%16c%16c%4c%8c%8c%8c%8c%4c%8c%16c%4c%4c%16c%4c%28c%120c%8c%8c%2048c%26c*********** DSS RECORD *********** dss_rec_seq_num ==> %.4s chan_ind ==> %.4s reserved1 ==> %.16s scene_number ==> %.32s input_scene_center_time ==> %.32s spare1 ==> %.16s center_lat ==> %.16s center_long ==> %.16s center_heading ==> %.16s ellipsoid_designator ==> %.16s ellipsoid_semimajor_axis ==> %.16s ellipsoid_semiminor_axis ==> %.16s earth_constant ==> %.16s spare2 ==> %.16s ellipsoid_j2 ==> %.16s ellipsoid_j3 ==> %.16s ellipsoid_j4 ==> %.16s spare ==> %.16s reserved_new ==> %.16s scene_centre_line_number ==> %.8s scene_centre_pixel_number ==> %.8s scene_length ==> %.16s scene_width ==> %.16s spare3 ==> %.16s nchan ==> %.4s spare4 ==> %.4s mission_identifier ==> %.16s sensor_id_and_mode ==> %.32s orbit_number ==> %.8s lat_nadir_center ==> %.8s long_nadir_center ==> %.8s heading_nadir_center ==> %.8s clock_angle ==> %.8s incidence_angle_center ==> %.8s radar_freq ==> %.8s radar_wavelength ==> %.16s motion_compensation ==> %.2s range_pulse_code_specifier ==> %.16s range_pulse_amplitude_const ==> %.16s range_pulse_amplitude_lin ==> %.16s range_pulse_amplitude_quad ==> %.16s range_pulse_amplitude_cube ==> %.16s range_pulse_amplitude_quart ==> %.16s range_pulse_phase_const ==> %.16s range_pulse_phase_lin ==> %.16s range_pulse_phase_quad ==> %.16s range_pulse_phase_cube ==> %.16s range_pulse_phase_quart ==> %.16s chirp_extraction_index ==> %.8s spare5 ==> %.8s sampling_rate ==> %.16s range_gate_early_edge_start_image ==> %.16s range_pulse_length ==> %.16s reserved2 ==> %.4s range_compressed_flag ==> %.4s reserved3 ==> %.32s quantisation_in_bits ==> %.8s quantizer_descriptor ==> %.12s dc_bias_i ==> %.16s dc_bias_q ==> %.16s gain_imbalance ==> %.16s spare6 ==> %.32s reserved4 ==> %.16s antenna_mech_bor ==> %.16s reserved5 ==> %.4s nominal_prf ==> %.16s reserved6 ==> %.32s satelite_encoded_binary_time ==> %.16s satelite_clock_time ==> %.32s satelite_clock_increment ==> %.8s spare7 ==> %.8s processing_facility_identifier ==> %.16s processing_system_id ==> %.8s processing_version_id ==> %.8s reserved7 ==> %.32s product_type_id ==> %.32s alg_id ==> %.32s nlooks_az ==> %.16s neff_looks_range ==> %.16s bandwidth_look_az ==> %.16s bandwidth_look_range ==> %.16s total_look_bandwidth_az ==> %.16s total_look_bandwidth_range ==> %.16s w_func_designator_az ==> %.32s w_func_designator_range ==> %.32s data_input_source ==> %.16s nom_res_3db_range ==> %.16s nom_res_az ==> %.16s reserved8 ==> %.32s a_track_dop_freq_const_early_image ==> %.16s a_track_dop_freq_lin_early_image ==> %.16s a_track_dop_freq_quad_early_image ==> %.16s spare8 ==> %.16s c_track_dop_freq_const_early_image ==> %.16s c_track_dop_freq_lin_early_image ==> %.16s c_track_dop_freq_quad_early_image ==> %.16s time_direction_along_pixel ==> %.8s time_direction_along_line ==> %.8s a_track_dop_freq_rate_const_early_image ==> %.16s a_track_dop_freq_rate_lin_early_image ==> %.16s a_track_dop_freq_rate_quad_early_image ==> %.16s spare9 ==> %.16s c_track_dop_freq_rate_const_early_image ==> %.16s c_track_dop_freq_rate_lin_early_image ==> %.16s c_track_dop_freq_rate_quad_early_image ==> %.16s spare10 ==> %.16s line_content_indicator ==> %.8s clut_lock_flag ==> %.4s autofocussing_flag ==> %.4s line_spacing ==> %.16s pixel_spacing_range ==> %.16s range_compression_designator ==> %.16s spare11 ==> %.16s spare12 ==> %.16s calibration_data_indicator ==> %.4s start_line_upper_image ==> %.8s stop_line_upper_image ==> %.8s start_line_bottom_image ==> %.8s stop_line_bottom_image ==> %.8s PRF_switch ==> %.4s PRF_switch_line ==> %.8s spare13 ==> %.16s yaw_steering_mode ==> %.4s parameter_table ==> %.4s nom_offnadir_angle ==> %.16s antenna_beam_number ==> %.4s spare14 ==> %.28s spare15 ==> %.120s num_anno_points ==> %.8s spare16 ==> %.8s image_annotation ==> %.2048s spare17 ==> %.26s SKYALOS using ALOS_format %d: %3s SAR mode |%.32s| (HIGH RESOLUTION) SAR mode |%.32s| (WIDE OBSERVATION) SAR mode |%.32s| (POLARIMETRY) uncertain SAR mode; assuming high resolution %32c%16c%16c%16c%16c%16c%16c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%16c%16c%16c*********** PLATFORM POSITION VECTOR ********** orbital_elements ==> |%.32s| orbital_element_1 ==> |%.16s| orbital_element_2 ==> |%.16s| orbital_element_3 ==> |%.16s| orbital_element_4 ==> |%.16s| orbital_element_5 ==> |%.16s| orbital_element_6 ==> |%.16s| num_data_points ==> |%.4s| year_of_data_points ==> |%.4s| month_of_data_points ==> |%.4s| day_of_data_points ==> |%.4s| day_of_data_points_in_year ==> |%.4s| sec_of_day_of_data ==> |%.22s| data_points_time_gap ==> |%.22s| ref_coord_sys ==> |%.64s| greenwhich_mean_hour_angle ==> |%.22s| a_track_pos_err ==> |%.16s| c_track_pos_err ==> |%.16s| radial_pos_err ==> |%.16s| a_track_vel_err ==> |%.16s| c_track_vel_err ==> |%.16s| radial_vel_err ==> |%.16s| Warning: number of orbit points %d != 28 .... reading sarleader %d %22c%22c%22c%22c%22c%22c*********** PLATFORM VECTOR ********** pos_x ==> %.22s pos_y ==> %.22s pos_z ==> %.22s vel_x ==> %.22s vel_y ==> %.22s vel_z ==> %.22s %18c%1c%579c%4c*********** ATTITUDE INFO ********** num_att_data_points ==> |%.4s| Warning: number of attitude points %d != 22 %4c%8c%4c%4c%4c%14c%14c%14c%4c%4c%4c%14c%14c%14c*********** ATTITUDE DATA ********** day_of_year ==> |%.4s| millisecond_day ==> |%.8s| pitch_data_quality ==> |%.4s| roll_data_quality ==> |%.4s| yaw_data_quality ==> |%.4s| pitch ==> |%.14s| roll ==> |%.14s| yaw ==> |%.14s| pitch_rate_data_quality ==> |%.4s| roll_rate_data_quality ==> |%.4s| yaw_rate_data_quality ==> |%.4s| pitch_rate ==> |%.14s| roll_rate ==> |%.14s| yaw_rate ==> |%.14s| *********** SAR FDR BINARY ********** record_seq_no ==> %1d record_subtype_code1 ==> %1x record_type_code1 ==> %1x record_subtype_code2 ==> %1x record_subtype_code3 ==> %1x record_length ==> %1d read %d items (%ld bytes) at position %ld BASICradar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lg I_mean = %lf Q_mean = %lf orbdir = %s lookdir = %s date = %s fd1 = %lf fdd1 = %lf number of attitude points %ld doy %d ms %d pitch %12.6f roll %12.6f yaw %12.6f nd %d iy %d id %d sec %lf dsec %lf pt0 %lf orbit point: %d %g %g %g ALOS default settings ************* led_file = %s input_file = %s num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq(iqflip) = %s offset_video(off_vid) = %s az_res = %lf nlooks = %d chirp_ext(nextend) = %d scnd_rng_mig(srm) = %s rng_spec_wgt(rhww) = %lf rm_rng_band(pctbw) = %lf rm_az_band(pctbwaz) = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate(fs) = %lf near_range = %lf ,, X! DDmD P (()+,/0P14RpS ^_a\nfnpnznnnnnnnnnnnnnnooo$o.o8os"(`@___stack_chk_guardQr@___stderrp@___stdoutp@dyld_stub_binderr(@___sincos_stretr0@___stack_chk_failr8@_atofr@@_atoirH@_exitrP@_fcloserX@_fmodr`@_fopenrh@_fprintfrp@_fputsrx@_freadr@_freer@_fscanfr@_ftellr@_fwriter@_mallocr@_scanfr@_strcmpr@_strcpyr@_strncmpr@_strncpyr@_strtodr@_strtol__mh_execute_headermacgdis_big_endian_hermite_cecrpALOS_tsUSAGESAR_modeforcequverboseintvecalross3_orb_alos2ut1'oldopet_mst,iebugoppste11_122sintdoubleorbit_infoattitude_infoecondsio_structtring34ffghli2ecrr2ecintvwead_ALOS_sarleaderbiasoi}rlh2xyzint_efix_offbinary_positionALOS_defaultsldr_prmformatransform_orbits_ecr2ecibiaset_ALOS_defaultslc_factwap_sloped_slopead_poliet_flagP0`1`pp= ] ' .Bp6KX0a hms y07;  f3p3a 3 : pP4 0A G;OlX d jyp]   > h ( 0 8d  @$6IT_ekqy-.23456789:;<=>?@ABCDEFG@/01-.23456789:;<=>?@ABCDEF _ALOS_format_ALOS_ldr_prm_SAR_mode_USAGE__mh_execute_header_cal2ut1_calorb_alos_cross3__debug_die_dist_dopp_eci2ecr_ecr2eci_force_slope_forced_slope_get_attitude_info_get_double_get_int_get_orbit_info_get_seconds_get_sio_struct_get_string_gmst_goldop_hermite_c_is_big_endian__is_big_endian___main_matvec_plh2xyz_prefix_off_print_ALOS_defaults_print_binary_position_quad_pol_quiet_flag_rbias_read_ALOS_sarleader_roi_set_ALOS_defaults_slc_fact_swap_tbias_transform_orbits_ecr2eci_verbose___sincos_stret___stack_chk_fail___stack_chk_guard___stderrp___stdoutp_atof_atoi_exit_fclose_fmod_fopen_fprintf_fputs_fread_free_fscanf_ftell_fwrite_malloc_scanf_strcmp_strcpy_strncmp_strncpy_strtod_strtoldyld_stub_binderGMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/Makefile000644 015705 000000 00000000632 13505462014 024713 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_pre_process_SS CSRCS = ALOS_pre_process_SS.c \ parse_ALOS_commands.c \ read_ALOS_data_SS.c \ swap_ALOS_data_info.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/swap_ALOS_data_info.c000644 015705 000000 00000004401 13505462014 027211 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /* this swaps bytes */ #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) /*------------------------------------------------------------------*/ /* need to swap bytes for all */ /* must be a better way to do this */ void swap_ALOS_data_info(struct sardata_info *sdr) { FIX_SHORT(sdr->channel_indicator); FIX_SHORT(sdr->channel_code); FIX_SHORT(sdr->transmit_polarization); FIX_SHORT(sdr->receive_polarization); FIX_SHORT(sdr->onboard_range_compress); FIX_SHORT(sdr->chirp_type); FIX_SHORT(sdr->nought_line_flag); FIX_SHORT(sdr->platform_update_flag); FIX_INT(sdr->sequence_number); FIX_INT(sdr->record_length); FIX_INT(sdr->data_line_number); FIX_INT(sdr->data_record_index); FIX_INT(sdr->n_left_fill_pixels); FIX_INT(sdr->n_data_pixels); FIX_INT(sdr->n_right_fill_pixels); FIX_INT(sdr->sensor_update_flag); FIX_INT(sdr->sensor_acquisition_year); FIX_INT(sdr->sensor_acquisition_DOY); FIX_INT(sdr->sensor_acquisition_msecs_day); FIX_INT(sdr->PRF); FIX_INT(sdr->scan_ID); FIX_INT(sdr->chirp_length); FIX_INT(sdr->chirp_constant_coeff); FIX_INT(sdr->chirp_linear_coeff); FIX_INT(sdr->chirp_quad_coeff); FIX_INT(sdr->receiver_gain); FIX_INT(sdr->elec_antenna_squint_angle); FIX_INT(sdr->mech_antenna_squint_angle); FIX_INT(sdr->slant_range); FIX_INT(sdr->data_record_window_position); FIX_INT(sdr->platform_latitude); FIX_INT(sdr->platform_longitude); FIX_INT(sdr->platform_altitude); FIX_INT(sdr->platform_ground_speed); FIX_INT(sdr->platform_velocity_x); FIX_INT(sdr->platform_velocity_y); FIX_INT(sdr->platform_velocity_z); FIX_INT(sdr->platform_acc_x); FIX_INT(sdr->platform_acc_y); FIX_INT(sdr->platform_acc_z); FIX_INT(sdr->platform_track_angle_1); FIX_INT(sdr->platform_track_angle_2); FIX_INT(sdr->platform_pitch_angle); FIX_INT(sdr->platform_roll_angle); FIX_INT(sdr->platform_yaw_angle); FIX_INT(sdr->frame_counter); } /*------------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/ALOS_pre_process_SS000755 015705 000000 00000212344 13507242212 026753 0ustar00sandwellwheel000000 000000 P H__PAGEZERO(__TEXT__text__TEXT  __stubs__TEXT((__stub_helper__TEXTx__const__TEXT __cstring__TEXTH__unwind_info__TEXT<<(__DATA__nl_symbol_ptr__DATA$__got__DATA&__la_symbol_ptr__DATA( ()__data__DATAHH__bss__DATA`__common__DATA H__LINKEDIT "0X`x@m PEE(M /usr/lib/dyld\A[0&/^H~2   *( 8/usr/lib/libSystem.B.dylib&X)UHAWAVAUATSHIAHoHHEDžpDžtDžlH=vH5Er/HHL%A$L-AEHWHxH>0HHHlH$LpLtDLH(A}t Hx5.t A$(A$HzHH=OIH5J赐IHuIwH=4q.IH5"荐HHuIwH=/I.HIw$MGp$LxHpHHE1LH0HLXHDž` f.v Džit=| HuHH=3HpHlH$HxH`LpLtLH{H`H0H@Hf8u Hx:HHxHHH/HHH;Eu1H[A\A]A^A_]͎UHAWAVAUATSHLIHUHuIDuEt5EAD$$H 11LIEqD$$H כ%H 11LIEFH H1ILE#H5L\HMHHuH=L,H5rL2HMHHtH[A\A]A^A_]H=VLH[A\A]A^A_]+UHAWAVAUATSH(LMLEHUȃIHAHpHEAKAE9uH=H53`+IcH躉AE9uH=IH58e'IcH~"*Y ^fWXfWH]LxHH Lmo~W*Y ^XыJ~W*Yo ^Xы%~W*YF ^^Xы~W*Y =^XHEHc W*H5W* Y ^f(\YX D,DɍIHM`:f((t)HH8H5HM(VH1HL_HLOL5xLHuH"H=8t H=Q|WA*F(WA*N,f(^^ XfWXHEWA*V$YXWA*N8f.vWA*FtHEL0HuH޺LeLr~ALk~IH`LHq8tKL5I>H5A1ڋM~HH8t"M6L~HH581LH}]H'HL}1HMHLH0@TDmDHEI)fWX1HEEDžpH8tHCK8=o~/=pH}==pu?; u&5@=PH}w=Pu; tfHcHuHcHp;u9t1H=u|H}LcKL+MD9MLMtH=H5'TLMH}C8HcHO 9+W*CtHE\ ~^8^X~f: X,؉LÉLD9~'1H=H|H=.H5LMЉl9pHHt:Hpt1H=LDlD{HLMDpI܃8HtlEW*^}HHiMbHH?H'W*f.u7z5W*C8HH8Y^}DCtH5D){LMкH}LL{H`HMHEHcHuL{HE@;P!tDuAH`}A LLlLELMAT nHHEHcH|DuD;4M(XXXH8L0t0HH8°H5CMEXzE1ېH=DHuLz}HuH}u1H}f.1f.@HiiHHЉ)@A<HiiHHЉ)@A|HI9uH}t*HiiHHЉ)@A<HLL&yD9HETHEEpHcsH+uH}LxHtT; ; }; pEtHELeHHLVxHL=I?W* @zf(YW*YH5xLxH`HH+xHH8HcHiQ THH?H)I?H51wHEMHHEHcH wW*YyHMW*C(W*K,sy^^ oyXfWXW*K$YXHEȉW*W*`^,XuHEǀH(8H`t H}H}vH vLvHH[A\A]A^A_]ÐUHAWAVAUATSHxIHI:t/H=̉H5,A>tH=H5L=-A?t'HH8AHMDH51vLTvH=8t)HHL vHH51HHuH HLuA?t[L5>I>KDCDKDS[H5Y1SAR|uHILuHH5 1HTuHHLDuA?HH8HHHHHHHHHHHHH|HHtHHlHHdHHHHMHDHH<HH4HH,HH$HHHHHHH H H(HH0HH8HH@HHHHHPHHXHH`HHhHHpH5@LLLHHMLLHHMHHMHHMHKdHMHK`HMHKXHMHKTHMHKPHMHKHHMHKDH`HK@HhHK8HpHK4HxHK$HHK HHKHHKHxHKLCLKHu (08@HPX`hpASAVATuARAWL=uuuuuuuuu`hpxxqHĠHHLqHH51H^qHHLNqIA?t+HL LKqHH51LqH58t H=It A?H{H8DCDK CHCHCHCHC HC$HC(HC,HC0HC2HC4HC6HC8HCH5x1HeI>hH5w1eI>LH5w1eI>PH5w1eI>\H5x1qeI>H5wXeI>HH5w?eI>H5w&eI>H5w1eI>XH5w1dI>H5wdI>H5wdI>H5wdI>H5w[A^]df.@UH*U8*M<^ zfff^ff(XXf(]fUHAWAVATSAIHIHdH/dH-dHIfA$YH4*K8YH=+DH dA$eYW*K8YH=/Dc1[A\A^A_]ÐUHfG0fG2fG4fG6fG@fGBfG`fȉoOfoef8OGȉGGȉGG ȉG G$ȉG$G(ȉG(G,ȉG,G8ȉG8G<ȉG<oODf8ODG\ȉG\oOlf8Olȉȉof8of8of8ȉȉ]ÐUH]DUH]DUHHHHH8H5׃1ba@UHGOYFYN\OYFY\JOYFY\B]UHp)X d(^YzcW*X^XW*f(X^XhW*^X]UHHXXXXXXXXHHHHHH HHHHH8H0H(H (mcHXLJhayLJlayLJpaytLJayLJayLJay(cHt$iH(8HXhxHHH]ÐUHAWAVSPILupaytH551Lb_AaytH5,1LB_ATaytH51L"_IH5Hg_tH5 1LH^Af.au{H5L^AdaytH51L^IH5H^tH5π1LHv^IH5oH^tH51LHC^A0f. au{H5L^ApaytH51L]AlaytH51L]IH5H"^tH5g1LH]AXf.`u{H5UL]A`f.a`u{H5GL^]Ahf.;`u{H59L8]AtaytH501L]AxaytH5!1L\Af._u{@AH5L\Af._u{H5L\Af._u{H5L}\Af.Z_u{H5LW\A\aytH51L7\AaytH51L\A8f.^u{H5L[H5}L=\tH5n1LL[AhaytH5m1L[ALaytH5m1L[APaytH5m1Le[Af.B^u{H5L?[AHf.^u{H5mL[Af.]u{H5~LZAaytH5m1LZAXaytH5m1LZAf.]u{H5mLZAf.j]u{H5mLgZAf.D]u{H5zmLAZAf.]u{H5~LZIH5|H`ZtH5~1LHYI8H5{H-ZtH5}1LHYI H5{HYtH5}1LHYI(H5{{HYtH5}1LHOYAPf.,\u{H5}L)YA@f.\u{H5|}LYA8f.[u{H5k}LXA f.[u{H5\}LXA(f.[u{H5G}LXAf.n[u{H52}LkXAf.H[u{H5}LEXAf."[u{H5 }LXAf.Zu{H5}LWAf.Zu{H5|LWAf.Zu{H5|LWAf.Zu{H5|LWApf.dZu{H5|LaWAxf.>Zu{H5|L;WAf.Zu{H5|LWAf.Yu{H5|LVAf.Yu{H5y|LVAf.Yu{H5r|LVAf.Yu{H5k|L}VAf.ZYu{H5d|LWVAf.4Yu{H5]|L1VAf.Yu{H5V|L VAf.Xu{H5O|LUIH5wH*VtH5>|1LHUI0H5wHUtH5)|1LHUAf.\Xu{H5|LYUH[A^A_]ÐUHAWAVAUATSHXIHH8H5{1LUH5aLTIHuH={LIcLH}UHEAPIc\HcH)L$LTILTHEHHTIľH}HUL}LTA\HcHuйfDDN<t TNuADfWKf.@W*ZA\ ZADW*ZA\(ZADHH9|ETAA9LuHMH]f.IcHiMbHH?H'W*W*^ Uf.u!zHH81H5]zDRSHMD}IcLH}ASE1A\DHcHUJ<tHHcH uH]JE1UW*ZA\ ZW*HEBWZA\(HZfB~DfA~CDIB )McIC XC CXDCDf(ECDGtIH]I9Lu D}AAA9HMoIfWɅ~PfWE1f.MC CDQMZ^TZZXII9|W*^HEYpfWYxLaQL}QH}tQLHX[A\A]A^A_]^Qf.UHHc\LcLDFAtHLcIB<uLcBW:A*Z\ ZBBW*Z\(ZBD]ÐUHAWAVAUATSHIHuIf.AHHcf.DMI1E~)f.s#1HBH9}Lf.Hr‰AHDD)1D9~BHHH=[w.ELE#PLEEE)HEDELcMcDJ415R RfDJ fW1f(fH9t*$f(\Y,\^f(^XHH9uf(\$f(YYXAYAY$XYYAX$$A$$f.zHL9jH[A\A]A^A_]HHH=uvONHrHH=uH0NNUHAWAVAUATSHHIL%A<$t H HH=uNH=8uYLPY Up]hXH5tE(MI>Ux])@eeH5tEMLI>UU]]`H5tE(LUuf(@pxhEA<$%EmeM]UuXXfWfTfUfVX\\\u|L5xI>H5sKI>H5tKI>H5 tKI>H5t~KI>H5teKHĸ[A\A]A^A_]ÐUHAWAVAUATSH8@MLHHIIHHHEDž|HC8t@HHH=sJAAMA^AL%oA$HXtu>Dž2AA+`W*^6M,ƒOȉXY]L MX@ MX`HHHHxLI6 HؿHHL@I HHHL`I f)@Yf)YXf(ؿffYf\fY%.LX\Y-Lf(Yf)f(YXf(YXQf)AfW1(f.WQˍD@AfA f)`^ 1HHYYY^G0A$GtWfW8M0Gt8YY^Y^XQ J^Hf(`f(\Hf(@ff^f)M Ef(f(f^f)M(^EH}HuHpf(`f(Yf(YXY\f(XY^yFGXof(fWIpYEY\YXxYEY\YX`YUYu\YXf)E1LLHxD)W*YB0XLHLLI! X\`\YYf(\XYXWQ\BIHcI9AH0HHHL|<HHMHXYQHHQHH;EuH8@[A\A]A^A_][DUHt\fWɃHcHcNHHW*HX GHIH^HH'HHD*THcHH mH*lGXW*XX ]GY FXX QGf(]f.UHAWAVATSHf(^EIHII^GUf(YGXG GYYX GYYYX^FYF LFEC F]YX FFYYX^F^FYFf)UBD FHA$$YfEWAX#Al$YX+Ad$AYX#HCA$$YfW\kAd$YXcAl$AYXkHCA$$AYAXcAl$AYXkAXl$fDWkf(Uf(f: EYf(ff(fYf\fD(fD: A<$Ad$Yf(AT$AYY~fEWfWffofXf\f: fAYfXDfDXAYAXAYXXAAA_AYAXAYXXAYffAfYfAXfYfXfXfAXXfAA~H[A\A^A_]f.@UHAVSHf(^BIH^3DUf(Y*DX*D *DYYX DYYYX^DYD fC_@CUYXC CYYX^ C^ CY CAH[A^]fUHHYfWX WYVXOYNX HBOYXJW YVXRO(YNXJHBO0YXJG8YFXBO@YNXJ]f.UHAWAVATSHf(^=AIHII^yBUf(YpBXpB pBYYX dBYYYX^TBYTB A> GB]YX B6BYYX^ B^"BYBf)U>DBfDWHA$$YfEWAX#Al$Y\#Al$AYX+HCA$$YAXcAl$YXkAd$AYXcHCA$$AYAXcAl$AYXkAXl$kf(%QAf(UfYff(f\fYf(f: A<$Ad$E\$EYfYfEWfAXffYfAfXAYAXAYXAXAAAYAXAYXAWXAYfDffYfAXfAYfXfXfXXfAA~H[A\A^A_]ÐUHAWAVAUATSH8LEHMHUHuEILcoJH{<IHp<HEHd<IMDWA*G Y$>AXGAOHJЃHs 1HuxH)1W*YXA̍qW*YXЍqW*ATYXA\qW*YXATHH9uHt/Hf.DW*YXAHHuLLLH]HELELMuu+HL#;L;HH8[A\A]A^A_];UHAWAVAUATSH8MIIIIHEHELEOH8EHMLELMt.H5H8H5cEЉL:IHMEЅLU~ȃu81HHEH$ALLLMuHM8HH)11fI|$(H|7IH59`H*`16A}t$IH=4`6 1H6IH6IH6HHv6H~6HH L46LA}DDDDH5DH1LILASAR5HL5IH5ր 1LH5LIOMGMOIGHIGHIG HIG$HIG4HIG8HIG@HIGDHIGHHIGPHIGTHMgXMW`M_dMohHH5^HPLHxLhLpL`AULXASLARLAT4HĀH8HH5^HLHxLhLp`X3HĀINMF MNIFHIFHIF$HIF*HIF0HIF6HIFHrH8HzH5d1L!E<$HzA<$uE1L5zAHÝH!AEt7LuH%rH8H5d1H{!Au.A<$t HqHH=d-v!AH HP4!A<$twIDDDDH5Hk1HHASAR HHP IH5k 1HD HHK LC0LK@HCPHHC`HHCpHIIHHHHHHHHHHHHHHHHHHxL&L6LFLVLfH5ZcHPHHhLpLLHASL@ARL`AVLXATLAUxAW?HĐHWx8H5bHHHhLpLH@`XxAWxHĐHpLH7ALcLHJaH;A@H5EyI\$0EE1f.HH41 H1CDH{1 HCA}tH'_H8CT1H5Z{H{1CH{&1CH{41CA}t/(H^H8CCH5;ZH{N1gCH{\1RC H{j1=C A}t/(HL^H8CC H5Y IHxM9H^HH;EuH[A\A]A^A_] UHHdata.rawHGfLJnfLJnfLJnfLJnH$H`LJ@LJTHLJH@H0H?HX(lHLJhHLJ`HLJHLJHLJHLJLJ\LJH~AH8H~7?HPHHHLJXHLJHLJxHLJpHLJHLJH]f.UHAVSHL5W\IH=eX( I>HH5nX1 I>H5nX1H| I>`H5gX1e I>H5eX1N I>TH5\X17 I>HH5WX1 I>H5MX I>dH5GX1 I>HH5BX1 I>HH5BX1 I>0H5GX I>pH5@X1 I>lH58X1x I>HH5;X1` I>XH5`H5?X. I>hH5BX I>tH5HX1 I>xH5@X1 I>H56X I>H50X I>H5*X I>H5&X I>\H5$X1l I>H5"X1U I>8H5X< I>H5X[A^] UHYY(]ÐUHZZZf:!(]UHW f:!]fUHY]UHX]UHZZ(Z]ÐUHAWAVAUATSHxH}E8D|HEA9HIMcN$LaHEHH]LHHE~,1fDHEH H`HLHL9|HMHEJ4DAL}HEu1H}upI)L}1HEHLeILuIMBY;MXMEIM9uHEHUHMHH9HEH)HE1HEHMf.E1f.}0HUAHML<W*ECHps E1fE1H]LmDEBM XEECBDMXEECBDMXEECBDMXECIM9pHMHtQHEN4E1f.fECMYHMMXMECIL9uIHEI9HUHHHHuH9H|H]HLuLHUHLHx[A\A]A^A_]H THH=R.OH=R9HSHH=NRHSHH=RfUHAWAVAUATSHULc9EMEAMM)AE1WMVLM9J Bf.u ^1AtKfHBY\H\BY\HI9uMtH BY\BY \HL9MIMM9.BDJDB^DH]BDEMIN NJ HCHEHGHEE1DHMLMLUDD)D9}SE\$HcMIAtNDfWJ4H4B Y XHuAs%MIfWfWAEA)HEHHuH 1f.NLLMC YLH\LBYTXH\LBY\LXCYXXHA9uH]LMLUHMC \JKB^ B IM9[A\A]A^A_]Ð%P%P%P%Q%Q%Q%Q%Q% Q% Q%Q%Q%Q%Q%Q%Q%Q%Q%Q% Q%"Q%$Q%&Q%(Q%*Q%,Q%.Q%0Q%2Q%4Q%6Q%8Q%:Q%Q%@QLPAS%Ohhh%h:hRhfhrh~hhhhxhnhdhZhPhFh@@@MbP?n@@v@ q@0v@pt@?HxޡA@@@@dcGppPP  ayayayayt$it$it$i-DT!@i@Y@@????47´@GAmIn@t շ?3ھn@9RFߑ?t ?ZmDp"A;Zx0N<[y1OwR,tO)qK&nH# j EgBd >"#%&'a)*;,-/01]348679:;Z=>5@AC|DEWGH1JK MyNOTQR.TU.A/@/@ Usage: ALOS_pre_process_SS imagefile LEDfile [-near near_range] [-radius RE] [-swath swath#] [-burst_skip] [-num_burst] [-swap] [-V] [-debug] [-quiet] creates data.raw and writes out parameters (PRM format) to stdout imagefile ALOS Level 1.0 complex file (CEOS format): LEDfile ALOS Level 1.0 LED file (CEOS leaderfile format): options: -near near_range specify the near_range (m) -radius RE specify the local earth radius (m) -swath specify swath number 1-5 [default 4] -burst_skip number of burst to skip before starting output (1559 lines/burst) -num_burst number of burst to process [default all] there are 72 bursts in a WB1 frame -swap do byte-swap (should be automatic) -fd1 [DOPP] sets doppler centroid [fd1] to DOPP -V verbose write information) -debug write even more information -quiet don't write any information Example: ALOS_pre_process_SS IMG-HH-ALPSRS049842950-W1.0__D LED-ALPSRS049842950-W1.0__D -near 847916 -radius 6371668.872945 -burst_skip 5 -num_burst 36 burst # look_angle #lines_burst 1 20.1 247 2 26.1 356 3 30.6 274 4 34.1 355 5 36.5 327 .... swapping bytes rcouldn't open Level 1.0 IMG file couldn't open LED file warning skip could exceed the length of the file %s_SW%d.raw%s_SW%d.PRM%s_SW%d.raw.%d%s_SW%d.PRM.%dwcan't open couldn't open output PRM file -near no option after -near! setting near_range to %9.2lf -swath no option after -swath setting swath to %d -burst_skip no option after -burst_skip setting burst_skip to %d -num_burst no option after -num_burst setting num_nburst to %d -radius no option after -radius! setting radius to %f -force_slope no option after -force_slope! setting chirp slope to %f -fd1 no option after -fd1! setting fd1 to %f -chirp_ext no option after -chirp_ext! setting chirp extent to %d -nrows no option after -nrows! setting nrows to %d -nodopp no doppler calculation (sets to zero!) -quad quad pol data: divide PRF by 2; defining chirp_slope) -debug debug and verbose output verbose output %s *** option not recognized *** .... reading header totburst start_busrt# burstcycle_time %d %d %f dt, tgap, n_burst, ngap ,ntot %f %f %d %d %d %d couldn't allocate memory for input indata. skip_swath skiprecl %d %d n skiprecl byte_offset %d %d %ld .... reading data (byte %ld) missing line: n, seq# %d %d record_length changed ERROR PRF changed, oldPRF, newPRF %f %f rec# burst# %d %d Working on line %d prf %f record length %d slant_range %d %d %d %f %f %d %f input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d first_sample = %d PRF = %f pulse_dur = %e near_range = %f num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf header size is not 720 bytes header_size %d line_prefix_size %d swap data %d .... reading header (byte %ld) *********** SAR FDR BINARY ********** record_seq_no ==> %4x record_subtype_code1 ==> %1x record_type_code1 ==> %1x record_subtype_code2 ==> %1x record_subtype_code3 ==> %1x record_length ==> %4x read %ld bytes at position %ld *********** SAR DATA DESCRIPTOR********** ascii_ebcdic_flag ==> %.2s blank_1 ==> %.2s format_doc_ID ==> %.12s format_control_level ==> %.2s file_design_descriptor ==> %.2s facility_soft_release ==> %.12s file_number ==> %.4s file_name ==> %.16s record_seq_loc_type_flag_1 ==> %.4s record_seq_loc_type_flag_2 ==> %.8s sequence_number_loc ==> %.4s record_code_loc_flag ==> %.4s record_code_loc ==> %.8s record_code_field_length ==> %.4s record_length_loc_flag ==> %.4s record_length_loc ==> %.8s record_length_field_length ==> %.4s blank_2 ==> %.68s number_sar_data_records ==> %.6s sar_data_record_length ==> %.6s blank_3 ==> %.24s num_bits_sample ==> %.4s num_sample_data_group ==> %.4s num_bytes_data_group ==> %.4s just_order_samples ==> %.4s num_sar_channels ==> %.4s num_lines_data_set ==> %.8s num_left_border_pixels ==> %.4s total_num_data_groups ==> %.8s num_right_border_pixels ==> %.4s num_top_border_lines ==> %.4s num_bottom_border_lines ==> %.4s interleave_indicator ==> %.4s num_physical_records_line ==> %.2s num_physical_records_multi_chan ==> %.2s num_bytes_prefix ==> %.4s num_bytes_SAR_data ==> %.8s num_bytes_suffix ==> %.4s pref_fix_repeat_flag ==> %.4s sample_data_lin_no ==> %.8s SAR_chan_num_loc ==> %.8s time_SAR_data_line ==> %.8s left_fill_count ==> %.8s right_fill_count ==> %.8s pad_pixels ==> %.4s blank_4 ==> %.28s sar_data_line_qual_loc ==> %.8s calib_info_field_loc ==> %.8s gain_values_field_loc ==> %.8s bias_values_field_loc ==> %.8s sar_data_format_code_1 ==> %.28s sar_data_format_code_2 ==> %.4s num_left_fill_bits_pixel ==> %.4s num_right_fill_bits_pixel ==> %.4s max_range_pixel ==> %.8s blank_5 ==> %.272s *********** SAR DATA DESCRIPTOR********** sequence_number ==> %d subtype ==> %.4s record_length ==> %d data_line_number ==> %d data_record_index ==> %d n_left_fill_pixels ==> %d n_data_pixels ==> %d n_right_fill_pixels ==> %d sensor_update_flag ==> %d sensor_acquisition_year ==> %d sensor_acquisition_DOY ==> %d sensor_acquisition_msecs_day ==> %d channel_indicator ==> %d channel_code ==> %d transmit_polarization ==> %d receive_polarization ==> %d PRF ==> %d scan_ID ==> %d onboard_range_compress ==> %d chirp_type ==> %d chirp_length ==> %d chirp_constant_coeff ==> %d chirp_linear_coeff ==> %d chirp_quad_coeff ==> %d receiver_gain ==> %d nought_line_flag ==> %d elec_antenna_elevation_angle ==> %d mech_antenna_elevation_angle ==> %d elec_antenna_squint_angle ==> %d mech_antenna_squint_angle ==> %d slant_range ==> %d data_record_window_position ==> %d platform_update_flag ==> %d platform_latitude ==> %d platform_longitude ==> %d platform_altitude ==> %d platform_ground_speed ==> %d platform_velocity_x ==> %d platform_velocity_y ==> %d platform_velocity_z ==> %d platform_acc_x ==> %d platform_acc_y ==> %d platform_acc_z ==> %d platform_track_angle_1 ==> %d platform_track_angle_2 ==> %d platform_pitch_angle ==> %d platform_roll_angle ==> %d platform_yaw_angle ==> %d frame_counter ==> %d **** record_length is %d ! expect something like 21100 .... try -swap option? exiting end: shift exceeds data window %d exitting near_range, shift = %d %d *** PRF changed from %lf to %lf at line %d (byte %ld) end: PRF changed from %lf to %lf at line %d %s %s num_valid_az = %d nrows = %d first_line = %d XXXXXXXXdeskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate = %lf PRF = %lf near_range = %lf clock_stop = %16.12lf led_file = %s date = %.6s orbdir = %.1s lookdir = %.1s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lf I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %12.8lf fddd1 = %lf sub_int_r = %f sub_int_a = %f B_parallel = %f B_perpendicular = %f baseline_start = %f alpha_start = %f baseline_end = %f alpha_end = %f SLC_file = %s dtype = %s SLC_scale = %f .... calculating doppler for %s can't open Working on line %d interpolation point outside of data constraints hermite: interpolation not in center interval nan! ALOS_ldr_orbit t1 %lf t1 %lf height_start %lf re_start %lf vg_start%lf t1 %lf t2 %lf height %lf re_c %lf vg %lf t2 %lf t2 %lf height_end %lf re__end %lf vg_end %lf SC_vel = %lf earth_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf ... calc_height_velocity time %lf nd %d C pt %lf py %lf pvy %lf time %lf y %lf ir %d C pt %lf pz %lf pvz %lf time %lf z %lf ir %d LED.log opened LED log file %s .... reading sarleader %2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c*********** SAR FDR FIXED SEGMENT *********** A_E_flag ==> %.2s blank_2 ==> %.2s for_con_doc ==> %.12s for_con_doc_rev_level ==> %.2s file_des_rev_level ==> %.2s softw_rel ==> %.12s file_number ==> %.4s file_name ==> %.16s rec_seq_loc_type_flag ==> %.4s seq_number_loc ==> %.8s seq_number_field_length ==> %.4s rec_code_loc_type_flag ==> %.4s rec_code_loc ==> %.8s rec_code_field_length ==> %.4s rec_len_loc_type_flag ==> %.4s rec_len_loc ==> %.8s rec_len_field_length ==> %.4s reserved_4 ==> %.4s reserved_segment ==> %.64s %6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%60c%6c%6c%288c*********** SAR FDR VARIABLE SEG *********** n_data_set_summ_rec ==> %.6s data_set_summ_rec_len ==> %.6s n_map_projec_rec ==> %.6s map_projec_rec_len ==> %.6s n_plat_pos_data_rec ==> %.6s plat_pos_data_rec_len ==> %.6s n_att_data_rec ==> %.6s att_data_rec_len ==> %.6s n_rad_data_rec ==> %.6s rad_data_rec_len ==> %.6s n_rad_comp_rec ==> %.6s rad_comp_rec_len ==> %.6s n_data_qua_summ_rec ==> %.6s data_qua_summ_rec_len ==> %.6s n_data_hist_rec ==> %.6s data_hist_rec_len ==> %.6s n_range_spectra_rec ==> %.6s range_spectra_rec_len ==> %.6s n_DEM_des_rec ==> %.6s DEM_des_rec_len ==> %.6s n_radar_par_update_rec ==> %.6s radar_par_update_rec_len ==> %.6s n_annotation_data_rec ==> %.6s annotation_data_rec_len ==> %.6s n_detailed_proc_rec ==> %.6s detailed_proc_rec_len ==> %.6s n_cal_rec ==> %.6s cal_rec_len ==> %.6s n_GCP_rec ==> %.6s GCP_rec_len ==> %.6s spare_60 ==> %.60s n_facility_data_rec ==> %.6s facility_data_rec_len ==> %.6s blanks_288 ==> %.288s %4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c%4c%4c%16c%16c%16c%16c%16c%4c%8c%8c%8c%8c%4c%8c%16c%4c%4c%16c%4c%28c%120c%8c%8c%2048c%26c*********** DSS RECORD *********** dss_rec_seq_num ==> %.4s chan_ind ==> %.4s reserved1 ==> %.16s scene_number ==> %.32s input_scene_center_time ==> %.32s spare1 ==> %.16s center_lat ==> %.16s center_long ==> %.16s center_heading ==> %.16s ellipsoid_designator ==> %.16s ellipsoid_semimajor_axis ==> %.16s ellipsoid_semiminor_axis ==> %.16s earth_constant ==> %.16s spare2 ==> %.16s ellipsoid_j2 ==> %.16s ellipsoid_j3 ==> %.16s ellipsoid_j4 ==> %.16s spare ==> %.16s reserved_new ==> %.16s scene_centre_line_number ==> %.8s scene_centre_pixel_number ==> %.8s scene_length ==> %.16s scene_width ==> %.16s spare3 ==> %.16s nchan ==> %.4s spare4 ==> %.4s mission_identifier ==> %.16s sensor_id_and_mode ==> %.32s orbit_number ==> %.8s lat_nadir_center ==> %.8s long_nadir_center ==> %.8s heading_nadir_center ==> %.8s clock_angle ==> %.8s incidence_angle_center ==> %.8s radar_freq ==> %.8s radar_wavelength ==> %.16s motion_compensation ==> %.2s range_pulse_code_specifier ==> %.16s range_pulse_amplitude_const ==> %.16s range_pulse_amplitude_lin ==> %.16s range_pulse_amplitude_quad ==> %.16s range_pulse_amplitude_cube ==> %.16s range_pulse_amplitude_quart ==> %.16s range_pulse_phase_const ==> %.16s range_pulse_phase_lin ==> %.16s range_pulse_phase_quad ==> %.16s range_pulse_phase_cube ==> %.16s range_pulse_phase_quart ==> %.16s chirp_extraction_index ==> %.8s spare5 ==> %.8s sampling_rate ==> %.16s range_gate_early_edge_start_image ==> %.16s range_pulse_length ==> %.16s reserved2 ==> %.4s range_compressed_flag ==> %.4s reserved3 ==> %.32s quantisation_in_bits ==> %.8s quantizer_descriptor ==> %.12s dc_bias_i ==> %.16s dc_bias_q ==> %.16s gain_imbalance ==> %.16s spare6 ==> %.32s reserved4 ==> %.16s antenna_mech_bor ==> %.16s reserved5 ==> %.4s nominal_prf ==> %.16s reserved6 ==> %.32s satelite_encoded_binary_time ==> %.16s satelite_clock_time ==> %.32s satelite_clock_increment ==> %.8s spare7 ==> %.8s processing_facility_identifier ==> %.16s processing_system_id ==> %.8s processing_version_id ==> %.8s reserved7 ==> %.32s product_type_id ==> %.32s alg_id ==> %.32s nlooks_az ==> %.16s neff_looks_range ==> %.16s bandwidth_look_az ==> %.16s bandwidth_look_range ==> %.16s total_look_bandwidth_az ==> %.16s total_look_bandwidth_range ==> %.16s w_func_designator_az ==> %.32s w_func_designator_range ==> %.32s data_input_source ==> %.16s nom_res_3db_range ==> %.16s nom_res_az ==> %.16s reserved8 ==> %.32s a_track_dop_freq_const_early_image ==> %.16s a_track_dop_freq_lin_early_image ==> %.16s a_track_dop_freq_quad_early_image ==> %.16s spare8 ==> %.16s c_track_dop_freq_const_early_image ==> %.16s c_track_dop_freq_lin_early_image ==> %.16s c_track_dop_freq_quad_early_image ==> %.16s time_direction_along_pixel ==> %.8s time_direction_along_line ==> %.8s a_track_dop_freq_rate_const_early_image ==> %.16s a_track_dop_freq_rate_lin_early_image ==> %.16s a_track_dop_freq_rate_quad_early_image ==> %.16s spare9 ==> %.16s c_track_dop_freq_rate_const_early_image ==> %.16s c_track_dop_freq_rate_lin_early_image ==> %.16s c_track_dop_freq_rate_quad_early_image ==> %.16s spare10 ==> %.16s line_content_indicator ==> %.8s clut_lock_flag ==> %.4s autofocussing_flag ==> %.4s line_spacing ==> %.16s pixel_spacing_range ==> %.16s range_compression_designator ==> %.16s spare11 ==> %.16s spare12 ==> %.16s calibration_data_indicator ==> %.4s start_line_upper_image ==> %.8s stop_line_upper_image ==> %.8s start_line_bottom_image ==> %.8s stop_line_bottom_image ==> %.8s PRF_switch ==> %.4s PRF_switch_line ==> %.8s spare13 ==> %.16s yaw_steering_mode ==> %.4s parameter_table ==> %.4s nom_offnadir_angle ==> %.16s antenna_beam_number ==> %.4s spare14 ==> %.28s spare15 ==> %.120s num_anno_points ==> %.8s spare16 ==> %.8s image_annotation ==> %.2048s spare17 ==> %.26s SKYALOS using ALOS_format %d: %3s SAR mode |%.32s| (HIGH RESOLUTION) SAR mode |%.32s| (WIDE OBSERVATION) SAR mode |%.32s| (POLARIMETRY) uncertain SAR mode; assuming high resolution %32c%16c%16c%16c%16c%16c%16c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%16c%16c%16c*********** PLATFORM POSITION VECTOR ********** orbital_elements ==> |%.32s| orbital_element_1 ==> |%.16s| orbital_element_2 ==> |%.16s| orbital_element_3 ==> |%.16s| orbital_element_4 ==> |%.16s| orbital_element_5 ==> |%.16s| orbital_element_6 ==> |%.16s| num_data_points ==> |%.4s| year_of_data_points ==> |%.4s| month_of_data_points ==> |%.4s| day_of_data_points ==> |%.4s| day_of_data_points_in_year ==> |%.4s| sec_of_day_of_data ==> |%.22s| data_points_time_gap ==> |%.22s| ref_coord_sys ==> |%.64s| greenwhich_mean_hour_angle ==> |%.22s| a_track_pos_err ==> |%.16s| c_track_pos_err ==> |%.16s| radial_pos_err ==> |%.16s| a_track_vel_err ==> |%.16s| c_track_vel_err ==> |%.16s| radial_vel_err ==> |%.16s| Warning: number of orbit points %d != 28 .... reading sarleader %d %22c%22c%22c%22c%22c%22c*********** PLATFORM VECTOR ********** pos_x ==> %.22s pos_y ==> %.22s pos_z ==> %.22s vel_x ==> %.22s vel_y ==> %.22s vel_z ==> %.22s %18c%1c%579c%4c*********** ATTITUDE INFO ********** num_att_data_points ==> |%.4s| Warning: number of attitude points %d != 22 %4c%8c%4c%4c%4c%14c%14c%14c%4c%4c%4c%14c%14c%14c*********** ATTITUDE DATA ********** day_of_year ==> |%.4s| millisecond_day ==> |%.8s| pitch_data_quality ==> |%.4s| roll_data_quality ==> |%.4s| yaw_data_quality ==> |%.4s| pitch ==> |%.14s| roll ==> |%.14s| yaw ==> |%.14s| pitch_rate_data_quality ==> |%.4s| roll_rate_data_quality ==> |%.4s| yaw_rate_data_quality ==> |%.4s| pitch_rate ==> |%.14s| roll_rate ==> |%.14s| yaw_rate ==> |%.14s| *********** SAR FDR BINARY ********** record_seq_no ==> %1d record_subtype_code1 ==> %1x record_type_code1 ==> %1x record_subtype_code2 ==> %1x record_subtype_code3 ==> %1x record_length ==> %1d read %d items (%ld bytes) at position %ld BASICradar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lg I_mean = %lf Q_mean = %lf orbdir = %s lookdir = %s date = %s fd1 = %lf fdd1 = %lf number of attitude points %ld doy %d ms %d pitch %12.6f roll %12.6f yaw %12.6f nd %d iy %d id %d sec %lf dsec %lf pt0 %lf orbit point: %d %g %g %g ALOS default settings ************* led_file = %s input_file = %s num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq(iqflip) = %s offset_video(off_vid) = %s az_res = %lf nlooks = %d chirp_ext(nextend) = %d scnd_rng_mig(srm) = %s rng_spec_wgt(rhww) = %lf rm_rng_band(pctbw) = %lf rm_az_band(pctbwaz) = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate(fs) = %lf near_range = %lf Sorry, couldn't allocate memory for A-matrix. sorry, couldn't allocate memory for A-matrix. Sorry, couldn't allocate memory for B-vector. underdetermined system 00X! a HH(H x $$0%%,--.p2<@@A`M NQQRUyz0$.8BLV`jt~ĠΠؠ (2<FPZdnU"(`%@___stack_chk_guardQr@___stderrp@___stdoutp@dyld_stub_binderr(@___bzeror0@___sincos_stretr8@___sprintf_chkr@@___stack_chk_failrH@___strcpy_chkrP@_acosrX@_asinr`@_atanrh@_atan2frp@_atofrx@_atoir@_exitr@_fcloser@_fmodr@_fopenr@_fprintfr@_fputsr@_freadr@_freer@_fscanfr@_fseekr@_ftellr@_fwriter@_hypotr@_mallocr@_powr@_printfr@_putsr@_rewindr@_sinr@_strcmpr@_strncmpr@_strncpyr@_strtodr@_strtolr@_tan__mh_execute_headermagpsrassign_sardata_paramscfhidnull_sio_structALOS_ectCRCmulUSAGE SAR_mode qu verbose intvecet_mstauss_jordan filesclocksecondsorbit_infoattitude_info arse_ALOS_commandsrut_sio_structolyfit #etwapdr lc_fact table_.ead_1 bias oi ALOS_sardata_infodatadata_SSsarleader.Qcfile_positionALOS_defaultsdheck_shiftross3_aleill_shift_dataorce fint_efix_off paramsbinary_positionALOS_defaultssvandle_prf_changeermite_cv_ALOS_data_info xs_big_endian_nterpolate_ALOS_orbitz_ziefd ebug opp z{{|c_2ut1dopheight_velocityldr_format orbitprmi2ecrr2eci_slowransform_orbits_ecr2ecibias mulexponjgaЭdd bs _slope d_slope ad_pol iet_flag  p"@ @0` =   lP-39?pELЖS p] Hdx1Z@J0T2= t P= x[@``3 | #`1D;OpZj=w^}@;Ndc0=@= p_p>%. :Of9t?    p h@N(  0p2% / 5<J Q`k t} &/6=CKRYahpu}EFGHLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl@IJKEFGHLMNOPQRSTUVWXYZ[\]^_`abcdefghijk _ALOS_format_ALOS_ldr_orbit_ALOS_ldr_prm_Cabs_Cadd_Cexp_Cmul_Conjg_RCmul_SAR_mode_USAGE__mh_execute_header_assign_sardata_params_cal2ut1_calc_dop_calc_height_velocity_check_shift_cross3__debug_dfd_die_dopp_eci2ecr_ecr2eci_fill_shift_data_force_slope_forced_slope_gauss_jordan_get_attitude_info_get_clock_get_files_get_orbit_info_get_seconds_gmst_handle_prf_change_hermite_c_interpolate_ALOS_orbit_interpolate_ALOS_orbit_slow_is_big_endian__is_big_endian___main_matvec_null_sio_struct_parse_ALOS_commands_polyfit_prefix_off_print_ALOS_defaults_print_binary_position_print_params_put_sio_struct_quad_pol_quiet_flag_r1_rbias_read_ALOS_data_SS_read_ALOS_sarleader_read_data_read_sardata_info_roi_sdr_set_ALOS_defaults_set_file_position_settable_slc_fact_swap_swap_ALOS_data_info_tbias_transform_orbits_ecr2eci_verbose___bzero___sincos_stret___sprintf_chk___stack_chk_fail___stack_chk_guard___stderrp___stdoutp___strcpy_chk_acos_asin_atan_atan2f_atof_atoi_exit_fclose_fmod_fopen_fprintf_fputs_fread_free_fscanf_fseek_ftell_fwrite_hypot_malloc_pow_printf_puts_rewind_sin_strcmp_strncmp_strncpy_strtod_strtol_tandyld_stub_binderGMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/000755 015705 000000 00000000000 13505462014 025426 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/read_ALOS_data_SS.c000644 015705 000000 00000047466 13505462014 026566 0ustar00sandwellwheel000000 000000 /***************************************************************************/ /* read_ALOS_data_SS reads an ALOS IMG file containing raw signal data */ /* and creates a raw-file and PRM-file suitable for our esarp processor. */ /* The program skips the first 720 bytes of the IMG file but copies the */ /* remaining data to the IMG.raw file after checking and fixing problems. */ /* The first record is read to determine the linelength, starting PRF, */ /* and near_range. If the line length or PRF change then the program */ /* halts. If the near_range changes then the lines are shifted and */ /* unconstrained values at the ends are set to NULL_DATA (15 or 16). */ /* (random sequence of 15 and 16's) */ /* During this processing the available parameters are added to the */ /* PRM-file. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Rob Mellors * * (Scripps Institution of Oceanography) * * Date : 10/03/2008 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 06/29/2006 added the near_range as an optional command-line argument * * 02/19/2007 added the ability to remove duplicate lines * * 03/07/2007 more robust to bad data in file * * 03/26/2007 ability to swap bytes (read on PC) RJM * * 03/28/2007 part of subroutin RJM * * removed set n_azimuth to 9000 rather than default * * 07/17/08 creates new file when prf changes RJM * * 07/17/08 reformatted; added functions RJM * * 09/29/08 added the ability to dump a subswath of WB1 scansar * ***************************************************************************/ /* the data header information is read into the structure dfd the line prefix information is read into sdr Values read here (and or generated) are: num_rng_bins bytes_per_line good_bytes_per_line PRF pulse_dur near_range num_lines num_patches SC_clock_start SC_clock_stop - this includes year YYYDDD.DDDDDDD clock_start clock_stop - this has not year for better precision DDD.DDDDDDDDD */ #include "image_sio.h" #include "lib_functions.h" /* fast random number generator */ #define znew (int)(z = 36969 * (z & 65535) + (z >> 16)) typedef unsigned long UL; static UL z = 362436069, t[256]; void settable(UL i1) { int i; z = i1; for (i = 0; i < 256; i = i + 1) t[i] = znew; } /* burst information from JAXA manual for WB1 */ static int n_data_burst[5] = {4976, 4720, 5376, 4432, 4688}; static int n_burst[5] = {247, 356, 274, 355, 327}; static int PRF[5] = {0, 0, 0, 0, 0}; void swap_ALOS_data_info(struct sardata_info *sdr); long read_sardata_info(FILE *, struct PRM *, int *, int *); void print_params(struct PRM *prm); int assign_sardata_params(struct PRM *, int, int *, int *); int check_shift(struct PRM *, int *, int *, int *, int); int set_file_position(FILE *, long *, int); int fill_shift_data(int, int, int, int, int, char *, char *, FILE *); int handle_prf_change(struct PRM *, FILE *, long *, int); struct sardata_record r1; struct sardata_descriptor dfd; struct sardata_info sdr; long read_ALOS_data_SS(FILE *imagefile, FILE *outfile, struct PRM *prm, long *byte_offset, int *nsub, int *burst_skip, int *num_burst) { char *data, *shift_data, *gap_data; int header_size; /* file header size 720 bytes */ int line_prefix_size; /* line header size 412 bytes*/ int record_length0; /* data record size start 10788 bytes */ int totrecl; /* total record length 11200 bytes = line_prefix_size + record_length */ int record_length1; /* data record size curr. 10788 bytes */ int line_suffix_size; /* number of bytes after data 36 bytes */ int kswath0 = 0; /* subswath at start of file */ int skip_swath; /* number of subswaths to skip to get to desired subswath */ int skiprecl; /* number of lines to skip to get to desired subswath */ int data_length; /* bytes of data */ int n = 1, ishift, shift, shift0; int k, kburst = 0, totburst = 0; int j, ngap, nlines = 0, ntot; int nprfchange, nburstchange; double tbias = 0.0, get_clock(); double ttot = 0., dt = 0., tgap = 0.; /* total time, burst interval, burst gap, fractional gap */ settable(12345); if (debug) fprintf(stderr, ".... reading header \n"); /* read header information */ read_sardata_info(imagefile, prm, &header_size, &line_prefix_size); assign_sardata_params(prm, line_prefix_size, &line_suffix_size, &record_length0); totrecl = line_prefix_size + record_length0; set_file_position(imagefile, byte_offset, header_size); /* get the sarting burst number and the PRF information for all the bursts and * rewind the file */ for (k = 0; k < 5; k++) totburst = totburst + n_burst[k]; for (j = 0; j < totburst; j++) { if (fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile) != 1) break; fseek(imagefile, record_length0, SEEK_CUR); if (swap) swap_ALOS_data_info(&sdr); for (k = 0; k < 5; k++) { if (sdr.n_data_pixels == n_data_burst[k]) { PRF[k] = sdr.PRF; if (j == 0) kswath0 = k; } } } /* get the time interval of a burst and rewind the file */ dt = 0.; for (k = 0; k < 5; k++) if (PRF[k] > 0.) dt = dt + (double)n_burst[k] / (0.001 * PRF[k]); tgap = dt - (double)n_burst[*nsub] / (0.001 * PRF[*nsub]); ngap = (int)(tgap * (0.001 * PRF[*nsub]) + 0.5); prm->num_valid_az = 6 * (n_burst[*nsub] + ngap); /* use 6 bursts per aperture */ rewind(imagefile); fseek(imagefile, header_size, SEEK_SET); if (verbose) fprintf(stderr, " totburst start_busrt# burstcycle_time %d %d %f \n", totburst, kswath0, dt); /* set the total number of lines output based on the number of patches * requested or default 1000 */ ntot = *num_burst * (n_burst[*nsub] + ngap); if (verbose) fprintf(stderr, " dt, tgap, n_burst, ngap ,ntot %f %f %d %d %d %d \n", dt, tgap, n_burst[*nsub], ngap, prm->num_valid_az, ntot); /* allocate the memory for data */ if ((data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if ((shift_data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if ((gap_data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); /* seek to beginning of next burst of sub swath nsub, read the line header, * reset the parameters, and set the counters */ skip_swath = ((*nsub + 5) - kswath0) % 5; skiprecl = 0; for (k = kswath0; k < kswath0 + skip_swath; k++) skiprecl = skiprecl + n_burst[k % 5]; skiprecl = skiprecl + *burst_skip * totburst; if (verbose) fprintf(stderr, " skip_swath skiprecl %d %d \n", skip_swath, skiprecl); fseek(imagefile, skiprecl * totrecl, SEEK_CUR); /* recalculate the PRF at the new skip location */ for (j = 0; j < totburst; j++) { if (fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile) != 1) break; fseek(imagefile, record_length0, SEEK_CUR); if (swap) swap_ALOS_data_info(&sdr); for (k = 0; k < 5; k++) { if (sdr.n_data_pixels == n_data_burst[k]) { PRF[k] = sdr.PRF; } } } /* get the time interval of a burst at the new skip location and rewind the * file */ dt = 0.; for (k = 0; k < 5; k++) if (PRF[k] > 0.) dt = dt + (double)n_burst[k] / (0.001 * PRF[k]); tgap = dt - (double)n_burst[*nsub] / (0.001 * PRF[*nsub]); ngap = (int)(tgap * (0.001 * PRF[*nsub]) + 0.5); prm->num_valid_az = 6 * (n_burst[*nsub] + ngap); /* use 6 bursts per aperture */ if (verbose) fprintf(stderr, " totburst start_busrt# burstcycle_time %d %d %f \n", totburst, kswath0, dt); /* rewind and seek again to start in the correct location */ rewind(imagefile); fseek(imagefile, header_size, SEEK_SET); fseek(imagefile, skiprecl * totrecl, SEEK_CUR); /* read the line header and set the parameters for this subswath */ fread((void *)&sdr, line_prefix_size, 1, imagefile); if (swap) swap_ALOS_data_info(&sdr); prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; prm->prf = sdr.PRF; if (prm->near_range < 0) prm->near_range = sdr.slant_range; fseek(imagefile, -1 * line_prefix_size, SEEK_CUR); n = sdr.sequence_number - 1; // m = sdr.sequence_number; *byte_offset = ftell(imagefile); if (verbose) fprintf(stderr, " n skiprecl byte_offset %d %d %ld \n", n, skiprecl, *byte_offset); /* now start at the beginning but with the intervals known */ if (verbose) fprintf(stderr, ".... reading data (byte %ld) \n", ftell(imagefile)); shift0 = 0; // m = 0; /* read the rest of the file */ while ((fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile)) == 1) { n++; if (swap) swap_ALOS_data_info(&sdr); /* check to make sure there is no prf-change in any of the subswaths */ for (k = 0; k < 5; k++) { if (sdr.n_data_pixels == n_data_burst[k]) { if ((sdr.PRF) != PRF[k]) { PRF[*nsub] = 0.; } } } /* detect a different subswath and skip intil the next subswath */ if (sdr.n_data_pixels == n_data_burst[*nsub]) { kburst++; if (sdr.sequence_number != n) printf(" missing line: n, seq# %d %d \n", n, sdr.sequence_number); /* check for changes in record_length and PRF */ record_length1 = sdr.record_length - line_prefix_size; if (record_length0 != record_length1) die("record_length changed", ""); /* if prf changes exit */ if ((sdr.PRF) != PRF[*nsub]) { fprintf(stderr, " ERROR PRF changed, oldPRF, newPRF %f %f \n", PRF[*nsub] * .001, sdr.PRF * .001); *byte_offset = ftell(imagefile); nprfchange = (*byte_offset - header_size) / totrecl; nburstchange = nprfchange / totburst; fprintf(stderr, " rec# burst# %d %d \n", nprfchange, nburstchange); break; } /* check shift to see if it varies from beginning or from command line * value */ check_shift(prm, &shift, &ishift, &shift0, record_length1); if ((verbose) && (n / 2000.0 == n / 2000)) { fprintf(stderr, " Working on line %d prf %f record length %d slant_range %d \n", sdr.sequence_number, 0.001 * sdr.PRF, record_length1, sdr.slant_range); } /* read data (and trailing bytes) */ if (fread((char *)data, record_length1, (size_t)1, imagefile) != 1) break; data_length = 2 * n_data_burst[*nsub]; /* write line header to output data */ fwrite((void *)&sdr, line_prefix_size, 1, outfile); nlines++; /* check to see if this is enough data */ if (nlines >= ntot) break; /* Shimada says the first 13 lines are bad. I only saw 11 bad. shift * these lines outside the window */ if (kburst < 12) ishift = data_length; /* ishift and write the data */ fill_shift_data(shift, ishift, data_length, line_suffix_size, record_length1, data, shift_data, outfile); /* if kburst it equal to the length of this burst then write the * appropriate number of zero lines */ if (kburst == n_burst[*nsub]) { ttot = ttot + dt; if (verbose) fprintf(stderr, " %d %d %f %f %d %f \n", *nsub + 1, kburst, dt, tgap, ngap, ttot); kburst = 0; /* write the appropriate number of zero lines */ for (j = 0; j < ngap; j++) { fwrite((void *)&sdr, line_prefix_size, 1, outfile); nlines++; /* set the gap data to 15.5 */ for (k = 0; k < record_length0; k++) gap_data[k] = NULL_DATA + znew % 2; fwrite((char *)gap_data, record_length1, 1, outfile); } } } else { record_length1 = sdr.record_length - line_prefix_size; if (fread((char *)data, record_length1, (size_t)1, imagefile) != 1) break; } } /* calculate end time and fix prf */ prm->prf = 0.001 * PRF[*nsub]; prm->clock_stop = get_clock(sdr, tbias); prm->SC_clock_stop = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_stop; /* m is non-zero only in the event of a prf change */ prm->num_lines = nlines - 1; prm->num_patches = (int)((1.0 * prm->num_lines) / (1.0 * prm->num_valid_az)); if (prm->num_lines == 0) prm->num_lines = 1; if (verbose) print_params(prm); free(data); free(shift_data); fclose(outfile); return (*byte_offset); } /***************************************************************************/ double get_clock(struct sardata_info sdr, double tbias) { double time; // nsd = 24.0*60.0*60.0; /* seconds in a day */ time = (double)sdr.sensor_acquisition_DOY + (double)sdr.sensor_acquisition_msecs_day / 1000.0 / 86400.0 + tbias / 86400.0; return (time); } /***************************************************************************/ void print_params(struct PRM *prm) { fprintf(stdout, "input_file = %s \n", prm->input_file); fprintf(stdout, "num_rng_bins = %d \n", prm->num_rng_bins); fprintf(stdout, "bytes_per_line = %d \n", prm->bytes_per_line); fprintf(stdout, "good_bytes_per_line = %d \n", prm->good_bytes); fprintf(stdout, "first_sample = %d \n", prm->first_sample); fprintf(stdout, "PRF = %f \n", prm->prf); fprintf(stdout, "pulse_dur = %e \n", prm->pulsedur); fprintf(stdout, "near_range = %f \n", prm->near_range); fprintf(stdout, "num_lines = %d \n", prm->num_lines); fprintf(stdout, "num_patches = %d \n", prm->num_patches); fprintf(stdout, "SC_clock_start = %16.10lf \n", prm->SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf \n", prm->SC_clock_stop); fprintf(stdout, "clock_start = %16.12lf \n", prm->clock_start); fprintf(stdout, "clock_stop = %16.12lf \n", prm->clock_stop); } /***************************************************************************/ long read_sardata_info(FILE *imagefile, struct PRM *prm, int *header_size, int *line_prefix_size) { long nitems; *header_size = sizeof(struct sardata_record) + sizeof(struct sardata_descriptor); *line_prefix_size = sizeof(struct sardata_info); if (*header_size != 720) die("header size is not 720 bytes\n", ""); if (*line_prefix_size != 412) die("header size is not 720 bytes\n", ""); if (debug) fprintf(stderr, " header_size %d line_prefix_size %d swap data %d\n", *header_size, *line_prefix_size, swap); /* make sure that we are at the beginning */ /* re-read header even if resetting after a PRF change */ rewind(imagefile); if (verbose) fprintf(stderr, ".... reading header (byte %ld) \n", ftell(imagefile)); /* data processed before Sept 15, 2006 have a timing bias of 0.9 s */ /* data processed after this data have a smaller bias 0.0 s */ nitems = fread((void *)&r1, sizeof(struct sardata_record), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_RECORD_WCS, SARDATA_RECORD_RVL(&r1)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_record)), ftell(imagefile)); } nitems = fread((void *)&dfd, sizeof(struct sardata_descriptor), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_DESCRIPTOR_WCS, SARDATA_DESCRIPTOR_RVL(&dfd)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_descriptor)), ftell(imagefile)); } nitems = fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile); if (debug) fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_info)), ftell(imagefile)); /* swap data little end/ big end if needed */ if (swap) swap_ALOS_data_info(&sdr); if (debug) fprintf(stderr, SARDATA__WCS, SARDATA_RVL(sdr)); return (nitems); } /***************************************************************************/ int assign_sardata_params(struct PRM *prm, int line_prefix_size, int *line_suffix_size, int *record_length0) { double tbias = 0.0, get_clock(); prm->prf = sdr.PRF; prm->pulsedur = (1e-9) * sdr.chirp_length; *record_length0 = sdr.record_length - line_prefix_size; prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; /* record_length is 21100 */ /* beginning of line has a 412 byte prefix */ /* end of line has a 80 byte (40 pixels) suffix (right-fill pixels)*/ /* record_length0 (data length) is (20688 - 412) = 20276 */ /* n_data_pixels 10304 */ /* 2 bytes per pixel */ /* 412 bytes + (2*10304) bytes + (40*2) bytes = 21100 bytes*/ prm->bytes_per_line = sdr.record_length; prm->good_bytes = sdr.record_length; /* make these match the standard FBD data */ prm->num_rng_bins = 5652; /* make these match the standard FBD data */ *line_suffix_size = sdr.record_length - prm->good_bytes; // if (prm->near_range < 0) prm->near_range = sdr.slant_range; if (*record_length0 > 50000) { fprintf(stderr, "**** record_length is %d !\n", *record_length0); die("expect something like 21100 .... try -swap option?\n", "exiting"); } return (EXIT_SUCCESS); } /***************************************************************************/ int check_shift(struct PRM *prm, int *shift, int *ishift, int *shift0, int record_length1) { *shift = 2 * floor(0.5 + (sdr.slant_range - prm->near_range) / (0.5 * SOL / prm->fs)); *ishift = abs(*shift); if (*ishift > record_length1) { printf(" end: shift exceeds data window %d \n", *shift); die("exitting", ""); } if (*shift != *shift0) { printf(" near_range, shift = %d %d \n", sdr.slant_range, *shift); *shift0 = *shift; } return (EXIT_SUCCESS); } /***************************************************************************/ int set_file_position(FILE *imagefile, long *byte_offset, int header_size) { if (*byte_offset < 0) { *byte_offset = 0; rewind(imagefile); fseek(imagefile, header_size, SEEK_SET); } else { fseek(imagefile, *byte_offset, SEEK_SET); } return (EXIT_SUCCESS); } /***************************************************************************/ int fill_shift_data(int shift, int ishift, int data_length, int line_suffix_size, int record_length1, char *data, char *shift_data, FILE *outfile) { int k; /* NULL_DATA = 15; znew randonly is 0 or 1 */ if (shift > 0) { for (k = 0; k < ishift; k++) shift_data[k] = NULL_DATA + znew % 2; for (k = 0; k < data_length - ishift; k++) shift_data[k + ishift] = data[k]; for (k = data_length - ishift; k < record_length1 - ishift; k++) shift_data[k + ishift] = NULL_DATA + znew % 2; } /* if data is shifted, fill in with data vlues of NULL_DATA at end */ if (shift <= 0) { for (k = 0; k < data_length - ishift - line_suffix_size; k++) shift_data[k] = data[k + ishift]; for (k = data_length - ishift - line_suffix_size; k < record_length1; k++) shift_data[k] = NULL_DATA + znew % 2; } /* write the shifted data out */ fwrite((char *)shift_data, record_length1, 1, outfile); return (EXIT_SUCCESS); } /***************************************************************************/ int handle_prf_change(struct PRM *prm, FILE *imagefile, long *byte_offset, int n) { prm->num_lines = n; /* skip back to beginning of the line */ fseek(imagefile, -1 * sizeof(struct sardata_info), SEEK_CUR); /* define byte_offset */ *byte_offset = ftell(imagefile); /* tell the world */ printf(" *** PRF changed from %lf to %lf at line %d (byte %ld)\n", (0.001 * prm->prf), (0.001 * sdr.PRF), n, *byte_offset); printf(" end: PRF changed from %lf to %lf at line %d \n", (0.001 * prm->prf), (0.001 * sdr.PRF), n); return (EXIT_SUCCESS); } /***************************************************************************/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/ALOS_pre_process_SS.c000644 015705 000000 00000014474 13505462014 027177 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Program to prepare ALOS L1.0 data for InSAR processing. Read in data and * * leader file and write out prm and raw file for siosar * ******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 4/23/07 added code to check endianess RJM * * 07/15/08 added a command-line option to force earth radius DTS * 10/02/08 * added capability to pre_process ScanSAR WB1 data DTS * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "\n\nUsage: ALOS_pre_process_SS imagefile LEDfile [-near near_range] " "[-radius RE] [-swath swath#] [-burst_skip] [-num_burst] [-swap] [-V] " "[-debug] [-quiet] \n" "\ncreates data.raw and writes out parameters (PRM format) to stdout\n" "\nimagefile ALOS Level 1.0 complex file (CEOS format):\n" "LEDfile ALOS Level 1.0 LED file (CEOS leaderfile format):\n" "\n options: \n" "-near near_range specify the near_range (m) \n" "-radius RE specify the local earth radius (m) \n" "-swath specify swath number 1-5 [default 4] \n" "-burst_skip number of burst to skip before starting output " "(1559 lines/burst) \n" "-num_burst number of burst to process [default all] \n" " there are 72 bursts in a WB1 frame \n" "-swap do byte-swap (should be automatic) \n" "-fd1 [DOPP] sets doppler centroid [fd1] to DOPP\n" "-V verbose write information) \n" "-debug write even more information \n" "-quiet don't write any information \n" "Example:\n" "ALOS_pre_process_SS IMG-HH-ALPSRS049842950-W1.0__D " "LED-ALPSRS049842950-W1.0__D -near 847916 -radius 6371668.872945 " "-burst_skip 5 -num_burst 36 \n\n" " burst # look_angle #lines_burst \n" " 1 20.1 247 \n" " 2 26.1 356 \n" " 3 30.6 274 \n" " 4 34.1 355 \n" " 5 36.5 327 \n\n"; long read_ALOS_data_SS(FILE *, FILE *, struct PRM *, long *, int *, int *, int *); void parse_ALOS_commands(int, char **, char *, struct PRM *, int *, int *, int *); void set_ALOS_defaults(struct PRM *); void print_ALOS_defaults(struct PRM *); void swap_ALOS_data_info(struct sardata_info *); void get_files(struct PRM *, FILE **, FILE **, char *, char *, int, int); int main(int argc, char **argv) { FILE *imagefile, *ldrfile; FILE *rawfile[11], *prmfile[11]; char prmfilename[128]; int nPRF; long byte_offset; int nsub = 3, burst_skip = 0, num_burst = 1000; struct PRM prm; struct ALOS_ORB orb; if (argc < 3) die(USAGE, ""); /* set flags */ dopp = 0; debug = verbose = swap = quiet_flag = 0; nPRF = 0; null_sio_struct(&prm); set_ALOS_defaults(&prm); /* read command line */ parse_ALOS_commands(argc, argv, USAGE, &prm, &nsub, &burst_skip, &num_burst); if (verbose) print_ALOS_defaults(&prm); if (is_big_endian_() == -1) { swap = 1; fprintf(stderr, ".... swapping bytes\n"); } else { swap = 0; } /* IMG and LED files should exist already */ if ((imagefile = fopen(argv[1], "r")) == NULL) die("couldn't open Level 1.0 IMG file \n", argv[1]); if ((ldrfile = fopen(argv[2], "r")) == NULL) die("couldn't open LED file \n", argv[2]); /* if it exists, copy to prm structure */ strcpy(prm.led_file, argv[2]); /* name and open output files and header files for raw data (but input for * later processing) */ get_files(&prm, &rawfile[nPRF], &prmfile[nPRF], prmfilename, argv[1], nPRF, nsub + 1); /* read sarleader; put info into prm; write log file if specified */ read_ALOS_sarleader(ldrfile, &prm, &orb); /* read Level 1.0 file; put info into prm; convert to *.raw format */ /* if PRF changes halfway through, create new set of header and data files */ /* byte_offset is non-zero only if the prf changes */ /* byte_offset gets set to point in file at prf change */ byte_offset = -1; /* set the chirp extension to 500 if FBD or WB1 fs = 16000000 */ if (prm.fs < 17000000.) prm.chirp_ext = 500; /* check to be sure the burst_skip*1559 lines does not exceed the file size */ if (burst_skip * 1559 > 100000) fprintf(stderr, " warning skip could exceed the length of the file \n"); /* read_ALOS_data returns 0 if all data file is read; returns byte offset if the PRF changes */ byte_offset = read_ALOS_data_SS(imagefile, rawfile[nPRF], &prm, &byte_offset, &nsub, &burst_skip, &num_burst); /* calculate parameters from orbit */ ALOS_ldr_orbit(&orb, &prm); /* calculate doppler from raw file */ if (dopp == 1) calc_dop(&prm); /* write ascii output, SIO format */ put_sio_struct(prm, prmfile[nPRF]); return (EXIT_SUCCESS); } /*------------------------------------------------------*/ void get_files(struct PRM *prm, FILE **rawfile, FILE **prmfile, char *prmfilename, char *name, int n, int nsub) { /* name and open output file for raw data (but input for later processing) */ /* if more than 1 set of output files, append an integer (beginning with 2) */ if (n == 0) { sprintf(prm->input_file, "%s_SW%d.raw", name, nsub); sprintf(prmfilename, "%s_SW%d.PRM", name, nsub); } else { sprintf(prm->input_file, "%s_SW%d.raw.%d", name, nsub, n + 1); sprintf(prmfilename, "%s_SW%d.PRM.%d", name, nsub, n + 1); } /* now open the files */ if ((*rawfile = fopen(prm->input_file, "w")) == NULL) die("can't open ", prm->input_file); if ((*prmfile = fopen(prmfilename, "w")) == NULL) die("couldn't open output PRM file \n", prmfilename); } /*------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/parse_ALOS_commands.c000644 015705 000000 00000005511 13505462014 027231 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /* reads options */ /* start with third arguement */ void parse_ALOS_commands(int na, char **a, char *USAGE, struct PRM *prm, int *nsub, int *burst_skip, int *num_burst) { int n; for (n = 3; n < na; n++) { if (!strcmp(a[n], "-near")) { n++; if (n == na) die(" no option after -near!\n", ""); prm->near_range = atof(a[n]); fprintf(stderr, " setting near_range to %9.2lf \n", prm->near_range); } else if (!strcmp(a[n], "-swath")) { n++; if (n == na) die(" no option after -swath\n", ""); *nsub = atoi(a[n]) - 1; fprintf(stderr, " setting swath to %d \n", *nsub + 1); } else if (!strcmp(a[n], "-burst_skip")) { n++; if (n == na) die(" no option after -burst_skip\n", ""); *burst_skip = atoi(a[n]); fprintf(stderr, " setting burst_skip to %d \n", *burst_skip); } else if (!strcmp(a[n], "-num_burst")) { n++; if (n == na) die(" no option after -num_burst\n", ""); *num_burst = atoi(a[n]); fprintf(stderr, " setting num_nburst to %d \n", *num_burst); } else if (!strcmp(a[n], "-radius")) { n++; if (n == na) die(" no option after -radius!\n", ""); prm->RE = atof(a[n]); fprintf(stderr, " setting radius to %f \n", prm->RE); } else if (!strcmp(a[n], "-force_slope")) { n++; if (n == na) die(" no option after -force_slope!\n", ""); force_slope = 1; forced_slope = atof(a[n]); fprintf(stderr, " setting chirp slope to %f \n", forced_slope); } else if (!strcmp(a[n], "-fd1")) { n++; if (n == na) die(" no option after -fd1!\n", ""); prm->fd1 = atof(a[n]); dopp = 0; fprintf(stderr, " setting fd1 to %f \n", prm->fd1); } else if (!strcmp(a[n], "-chirp_ext")) { n++; if (n == na) die(" no option after -chirp_ext!\n", ""); prm->chirp_ext = atoi(a[n]); fprintf(stderr, " setting chirp extent to %d \n", prm->chirp_ext); } else if (!strcmp(a[n], "-nrows")) { n++; if (n == na) die(" no option after -nrows!\n", ""); prm->nrows = atoi(a[n]); fprintf(stderr, " setting nrows to %d \n", prm->nrows); } else if (!strcmp(a[n], "-nodopp")) { dopp = 0; prm->fd1 = prm->fdd1 = prm->fddd1 = 0.0; fprintf(stderr, " no doppler calculation (sets to zero!) \n"); } else if (!strcmp(a[n], "-quad")) { quad_pol = 1; fprintf(stderr, " quad pol data: divide PRF by 2; defining chirp_slope) \n"); } else if (!strncmp(a[n], "-debug", 2)) { verbose = debug = 1; fprintf(stderr, " debug and verbose output \n"); } else if (!strncmp(a[n], "-V", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else if (!strncmp(a[n], "-v", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/shift.c000644 015705 000000 00000002202 13505462014 026703 0ustar00sandwellwheel000000 000000 /************************************************************************ * shift performs a range shift using the shift property of the FFT * ************************************************************************/ /************************************************************************ * Creator: David T. SandwellScripps Institution of Oceanography) * * Date : 08/09/06 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" void shift(ranfft, data, shift) int ranfft; fcomplex *data; double shift; { float arg; int i, dir, n2; fcomplex cshift; dir = -1; n2 = ranfft / 2; cfft1d_(&ranfft, data, &dir); for (i = 0; i < ranfft; i++) { arg = -2. * PI * shift * i / ranfft; if (i > n2) arg = -2. * PI * shift * (i - ranfft) / ranfft; cshift = Cexp(arg); data[i] = Cmul(cshift, data[i]); } dir = 1; cfft1d_(&ranfft, data, &dir); } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/test_shift.c000644 015705 000000 00000001320 13505462014 027742 0ustar00sandwellwheel000000 000000 /* program to test the fft shift routine */ #include "image_sio.h" #include "siocomplex.h" void main() { int k, nd = 1024; fcomplex *datai, *datao; double arg; datai = (fcomplex *)malloc(nd * sizeof(fcomplex)); datao = (fcomplex *)malloc(nd * sizeof(fcomplex)); /* fill the data array with a gaussian function */ for (k = 0; k < nd; k++) { datai[k].r = 0.0; datai[k].i = 0.0; arg = (k - nd / 2) * (k - nd / 2) / 4.; datai[k].r = (k - nd / 2) * exp(-arg); datai[k].i = -(k - nd / 2) * exp(-arg); datao[k].r = datai[k].r; datao[k].i = datai[k].i; } shift(nd, datao, 16.0); for (k = 0; k < nd; k++) { printf(" %d %lf %lf %lf %lf \n", k, datai[k].r, datai[k].i, datao[k].r, datao[k].i); } } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/Makefile000644 015705 000000 00000000527 13505462014 027072 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = test_shift CSRCS = test_shift.c \ shift.c OS = `arch` OBJS = $(CSRCS:.c=.o) INCLUDES = -I../../include CLIBS = -L../../lib/$(OS) -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) install: $(INSTALL) $(PROG) ../bin/$(OS) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/plot_shift.m000644 015705 000000 00000000475 13505462014 027765 0ustar00sandwellwheel000000 000000 % % plot the real and imaginar parts of the shifted gaussian function % load gauss.dat x=gauss(:,1); ri=gauss(:,2); ii=gauss(:,3); ro=gauss(:,4); io=gauss(:,5); clf subplot(2,1,1);plot(x,ri,'k',x,ro,'r');ylabel('real') axis([504,562,-1,1]) subplot(2,1,2);plot(x,ii,'k',x,io,'r');ylabel('imag') axis([504,562,-1,1]) GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/gauss.dat000644 015705 000000 00000127645 13505462014 027261 0ustar00sandwellwheel000000 000000 0 -0.000000 0.000000 -0.000000 0.000000 1 -0.000000 0.000000 0.000000 0.000000 2 -0.000000 0.000000 0.000000 -0.000000 3 -0.000000 0.000000 0.000000 -0.000000 4 -0.000000 0.000000 0.000000 -0.000000 5 -0.000000 0.000000 -0.000000 0.000000 6 -0.000000 0.000000 0.000000 0.000000 7 -0.000000 0.000000 -0.000000 -0.000000 8 -0.000000 0.000000 -0.000000 0.000000 9 -0.000000 0.000000 -0.000000 -0.000000 10 -0.000000 0.000000 -0.000000 0.000000 11 -0.000000 0.000000 -0.000000 0.000000 12 -0.000000 0.000000 -0.000000 0.000000 13 -0.000000 0.000000 0.000000 -0.000000 14 -0.000000 0.000000 0.000000 0.000000 15 -0.000000 0.000000 0.000000 -0.000000 16 -0.000000 0.000000 0.000000 -0.000000 17 -0.000000 0.000000 -0.000000 0.000000 18 -0.000000 0.000000 0.000000 -0.000000 19 -0.000000 0.000000 -0.000000 0.000000 20 -0.000000 0.000000 -0.000000 0.000000 21 -0.000000 0.000000 -0.000000 0.000000 22 -0.000000 0.000000 -0.000000 -0.000000 23 -0.000000 0.000000 -0.000000 0.000000 24 -0.000000 0.000000 0.000000 0.000000 25 -0.000000 0.000000 0.000000 0.000000 26 -0.000000 0.000000 0.000000 0.000000 27 -0.000000 0.000000 -0.000000 0.000000 28 -0.000000 0.000000 0.000000 -0.000000 29 -0.000000 0.000000 -0.000000 -0.000000 30 -0.000000 0.000000 -0.000000 -0.000000 31 -0.000000 0.000000 -0.000000 -0.000000 32 -0.000000 0.000000 -0.000000 0.000000 33 -0.000000 0.000000 -0.000000 -0.000000 34 -0.000000 0.000000 0.000000 -0.000000 35 -0.000000 0.000000 -0.000000 -0.000000 36 -0.000000 0.000000 -0.000000 -0.000000 37 -0.000000 0.000000 0.000000 -0.000000 38 -0.000000 0.000000 0.000000 -0.000000 39 -0.000000 0.000000 0.000000 -0.000000 40 -0.000000 0.000000 -0.000000 0.000000 41 -0.000000 0.000000 0.000000 0.000000 42 -0.000000 0.000000 0.000000 -0.000000 43 -0.000000 0.000000 0.000000 -0.000000 44 -0.000000 0.000000 0.000000 0.000000 45 -0.000000 0.000000 -0.000000 0.000000 46 -0.000000 0.000000 -0.000000 0.000000 47 -0.000000 0.000000 -0.000000 -0.000000 48 -0.000000 0.000000 -0.000000 -0.000000 49 -0.000000 0.000000 0.000000 0.000000 50 -0.000000 0.000000 -0.000000 0.000000 51 -0.000000 0.000000 -0.000000 0.000000 52 -0.000000 0.000000 -0.000000 0.000000 53 -0.000000 0.000000 0.000000 -0.000000 54 -0.000000 0.000000 0.000000 -0.000000 55 -0.000000 0.000000 0.000000 -0.000000 56 -0.000000 0.000000 -0.000000 -0.000000 57 -0.000000 0.000000 -0.000000 0.000000 58 -0.000000 0.000000 -0.000000 0.000000 59 -0.000000 0.000000 -0.000000 0.000000 60 -0.000000 0.000000 -0.000000 0.000000 61 -0.000000 0.000000 -0.000000 0.000000 62 -0.000000 0.000000 -0.000000 0.000000 63 -0.000000 0.000000 0.000000 -0.000000 64 -0.000000 0.000000 0.000000 -0.000000 65 -0.000000 0.000000 0.000000 -0.000000 66 -0.000000 0.000000 0.000000 -0.000000 67 -0.000000 0.000000 0.000000 0.000000 68 -0.000000 0.000000 -0.000000 -0.000000 69 -0.000000 0.000000 0.000000 0.000000 70 -0.000000 0.000000 -0.000000 0.000000 71 -0.000000 0.000000 -0.000000 -0.000000 72 -0.000000 0.000000 -0.000000 0.000000 73 -0.000000 0.000000 0.000000 -0.000000 74 -0.000000 0.000000 0.000000 -0.000000 75 -0.000000 0.000000 0.000000 0.000000 76 -0.000000 0.000000 -0.000000 0.000000 77 -0.000000 0.000000 -0.000000 0.000000 78 -0.000000 0.000000 0.000000 -0.000000 79 -0.000000 0.000000 -0.000000 -0.000000 80 -0.000000 0.000000 -0.000000 0.000000 81 -0.000000 0.000000 -0.000000 0.000000 82 -0.000000 0.000000 -0.000000 0.000000 83 -0.000000 0.000000 0.000000 -0.000000 84 -0.000000 0.000000 0.000000 -0.000000 85 -0.000000 0.000000 -0.000000 0.000000 86 -0.000000 0.000000 -0.000000 0.000000 87 -0.000000 0.000000 0.000000 -0.000000 88 -0.000000 0.000000 0.000000 -0.000000 89 -0.000000 0.000000 0.000000 -0.000000 90 -0.000000 0.000000 0.000000 -0.000000 91 -0.000000 0.000000 0.000000 -0.000000 92 -0.000000 0.000000 0.000000 -0.000000 93 -0.000000 0.000000 -0.000000 0.000000 94 -0.000000 0.000000 -0.000000 0.000000 95 -0.000000 0.000000 0.000000 0.000000 96 -0.000000 0.000000 -0.000000 0.000000 97 -0.000000 0.000000 -0.000000 0.000000 98 -0.000000 0.000000 -0.000000 0.000000 99 -0.000000 0.000000 -0.000000 0.000000 100 -0.000000 0.000000 0.000000 -0.000000 101 -0.000000 0.000000 0.000000 -0.000000 102 -0.000000 0.000000 -0.000000 0.000000 103 -0.000000 0.000000 -0.000000 0.000000 104 -0.000000 0.000000 -0.000000 0.000000 105 -0.000000 0.000000 0.000000 0.000000 106 -0.000000 0.000000 0.000000 -0.000000 107 -0.000000 0.000000 0.000000 -0.000000 108 -0.000000 0.000000 0.000000 -0.000000 109 -0.000000 0.000000 0.000000 -0.000000 110 -0.000000 0.000000 -0.000000 0.000000 111 -0.000000 0.000000 -0.000000 0.000000 112 -0.000000 0.000000 -0.000000 0.000000 113 -0.000000 0.000000 -0.000000 0.000000 114 -0.000000 0.000000 0.000000 0.000000 115 -0.000000 0.000000 -0.000000 0.000000 116 -0.000000 0.000000 -0.000000 0.000000 117 -0.000000 0.000000 -0.000000 0.000000 118 -0.000000 0.000000 -0.000000 0.000000 119 -0.000000 0.000000 0.000000 -0.000000 120 -0.000000 0.000000 0.000000 -0.000000 121 -0.000000 0.000000 0.000000 -0.000000 122 -0.000000 0.000000 0.000000 0.000000 123 -0.000000 0.000000 -0.000000 0.000000 124 -0.000000 0.000000 -0.000000 0.000000 125 -0.000000 0.000000 0.000000 -0.000000 126 -0.000000 0.000000 0.000000 -0.000000 127 -0.000000 0.000000 0.000000 0.000000 128 -0.000000 0.000000 -0.000000 0.000000 129 -0.000000 0.000000 0.000000 -0.000000 130 -0.000000 0.000000 0.000000 -0.000000 131 -0.000000 0.000000 0.000000 -0.000000 132 -0.000000 0.000000 0.000000 -0.000000 133 -0.000000 0.000000 -0.000000 0.000000 134 -0.000000 0.000000 -0.000000 -0.000000 135 -0.000000 0.000000 -0.000000 0.000000 136 -0.000000 0.000000 -0.000000 0.000000 137 -0.000000 0.000000 -0.000000 0.000000 138 -0.000000 0.000000 0.000000 0.000000 139 -0.000000 0.000000 -0.000000 -0.000000 140 -0.000000 0.000000 0.000000 0.000000 141 -0.000000 0.000000 0.000000 -0.000000 142 -0.000000 0.000000 -0.000000 -0.000000 143 -0.000000 0.000000 0.000000 0.000000 144 -0.000000 0.000000 -0.000000 0.000000 145 -0.000000 0.000000 -0.000000 -0.000000 146 -0.000000 0.000000 0.000000 0.000000 147 -0.000000 0.000000 0.000000 -0.000000 148 -0.000000 0.000000 -0.000000 -0.000000 149 -0.000000 0.000000 -0.000000 0.000000 150 -0.000000 0.000000 0.000000 0.000000 151 -0.000000 0.000000 0.000000 0.000000 152 -0.000000 0.000000 -0.000000 0.000000 153 -0.000000 0.000000 -0.000000 0.000000 154 -0.000000 0.000000 -0.000000 -0.000000 155 -0.000000 0.000000 -0.000000 0.000000 156 -0.000000 0.000000 0.000000 -0.000000 157 -0.000000 0.000000 0.000000 -0.000000 158 -0.000000 0.000000 -0.000000 -0.000000 159 -0.000000 0.000000 -0.000000 -0.000000 160 -0.000000 0.000000 -0.000000 -0.000000 161 -0.000000 0.000000 -0.000000 -0.000000 162 -0.000000 0.000000 0.000000 -0.000000 163 -0.000000 0.000000 0.000000 -0.000000 164 -0.000000 0.000000 -0.000000 0.000000 165 -0.000000 0.000000 -0.000000 -0.000000 166 -0.000000 0.000000 0.000000 -0.000000 167 -0.000000 0.000000 -0.000000 0.000000 168 -0.000000 0.000000 0.000000 0.000000 169 -0.000000 0.000000 0.000000 -0.000000 170 -0.000000 0.000000 0.000000 -0.000000 171 -0.000000 0.000000 0.000000 0.000000 172 -0.000000 0.000000 -0.000000 0.000000 173 -0.000000 0.000000 -0.000000 0.000000 174 -0.000000 0.000000 -0.000000 0.000000 175 -0.000000 0.000000 0.000000 -0.000000 176 -0.000000 0.000000 0.000000 -0.000000 177 -0.000000 0.000000 0.000000 0.000000 178 -0.000000 0.000000 -0.000000 0.000000 179 -0.000000 0.000000 -0.000000 0.000000 180 -0.000000 0.000000 0.000000 -0.000000 181 -0.000000 0.000000 0.000000 -0.000000 182 -0.000000 0.000000 -0.000000 -0.000000 183 -0.000000 0.000000 -0.000000 0.000000 184 -0.000000 0.000000 -0.000000 0.000000 185 -0.000000 0.000000 -0.000000 -0.000000 186 -0.000000 0.000000 0.000000 -0.000000 187 -0.000000 0.000000 0.000000 -0.000000 188 -0.000000 0.000000 0.000000 -0.000000 189 -0.000000 0.000000 0.000000 0.000000 190 -0.000000 0.000000 0.000000 0.000000 191 -0.000000 0.000000 -0.000000 0.000000 192 -0.000000 0.000000 -0.000000 0.000000 193 -0.000000 0.000000 -0.000000 0.000000 194 -0.000000 0.000000 0.000000 -0.000000 195 -0.000000 0.000000 0.000000 -0.000000 196 -0.000000 0.000000 0.000000 -0.000000 197 -0.000000 0.000000 -0.000000 0.000000 198 -0.000000 0.000000 -0.000000 0.000000 199 -0.000000 0.000000 -0.000000 0.000000 200 -0.000000 0.000000 0.000000 -0.000000 201 -0.000000 0.000000 0.000000 -0.000000 202 -0.000000 0.000000 0.000000 -0.000000 203 -0.000000 0.000000 -0.000000 0.000000 204 -0.000000 0.000000 -0.000000 0.000000 205 -0.000000 0.000000 0.000000 -0.000000 206 -0.000000 0.000000 0.000000 -0.000000 207 -0.000000 0.000000 0.000000 -0.000000 208 -0.000000 0.000000 -0.000000 0.000000 209 -0.000000 0.000000 0.000000 -0.000000 210 -0.000000 0.000000 -0.000000 -0.000000 211 -0.000000 0.000000 -0.000000 -0.000000 212 -0.000000 0.000000 -0.000000 0.000000 213 -0.000000 0.000000 0.000000 -0.000000 214 -0.000000 0.000000 0.000000 -0.000000 215 -0.000000 0.000000 0.000000 -0.000000 216 -0.000000 0.000000 -0.000000 0.000000 217 -0.000000 0.000000 -0.000000 0.000000 218 -0.000000 0.000000 0.000000 -0.000000 219 -0.000000 0.000000 0.000000 -0.000000 220 -0.000000 0.000000 0.000000 -0.000000 221 -0.000000 0.000000 0.000000 0.000000 222 -0.000000 0.000000 -0.000000 0.000000 223 -0.000000 0.000000 -0.000000 0.000000 224 -0.000000 0.000000 -0.000000 0.000000 225 -0.000000 0.000000 0.000000 -0.000000 226 -0.000000 0.000000 0.000000 -0.000000 227 -0.000000 0.000000 0.000000 -0.000000 228 -0.000000 0.000000 -0.000000 0.000000 229 -0.000000 0.000000 0.000000 -0.000000 230 -0.000000 0.000000 0.000000 -0.000000 231 -0.000000 0.000000 -0.000000 0.000000 232 -0.000000 0.000000 -0.000000 0.000000 233 -0.000000 0.000000 -0.000000 0.000000 234 -0.000000 0.000000 0.000000 -0.000000 235 -0.000000 0.000000 0.000000 -0.000000 236 -0.000000 0.000000 0.000000 -0.000000 237 -0.000000 0.000000 0.000000 0.000000 238 -0.000000 0.000000 -0.000000 0.000000 239 -0.000000 0.000000 -0.000000 0.000000 240 -0.000000 0.000000 -0.000000 0.000000 241 -0.000000 0.000000 -0.000000 -0.000000 242 -0.000000 0.000000 0.000000 -0.000000 243 -0.000000 0.000000 -0.000000 0.000000 244 -0.000000 0.000000 -0.000000 0.000000 245 -0.000000 0.000000 -0.000000 0.000000 246 -0.000000 0.000000 -0.000000 0.000000 247 -0.000000 0.000000 0.000000 -0.000000 248 -0.000000 0.000000 0.000000 -0.000000 249 -0.000000 0.000000 0.000000 -0.000000 250 -0.000000 0.000000 -0.000000 0.000000 251 -0.000000 0.000000 -0.000000 0.000000 252 -0.000000 0.000000 0.000000 -0.000000 253 -0.000000 0.000000 0.000000 -0.000000 254 -0.000000 0.000000 -0.000000 -0.000000 255 -0.000000 0.000000 -0.000000 0.000000 256 -0.000000 0.000000 -0.000000 0.000000 257 -0.000000 0.000000 -0.000000 0.000000 258 -0.000000 0.000000 0.000000 0.000000 259 -0.000000 0.000000 0.000000 -0.000000 260 -0.000000 0.000000 0.000000 -0.000000 261 -0.000000 0.000000 0.000000 -0.000000 262 -0.000000 0.000000 0.000000 -0.000000 263 -0.000000 0.000000 0.000000 -0.000000 264 -0.000000 0.000000 0.000000 -0.000000 265 -0.000000 0.000000 -0.000000 0.000000 266 -0.000000 0.000000 -0.000000 0.000000 267 -0.000000 0.000000 -0.000000 0.000000 268 -0.000000 0.000000 -0.000000 0.000000 269 -0.000000 0.000000 -0.000000 0.000000 270 -0.000000 0.000000 0.000000 -0.000000 271 -0.000000 0.000000 0.000000 -0.000000 272 -0.000000 0.000000 0.000000 -0.000000 273 -0.000000 0.000000 -0.000000 -0.000000 274 -0.000000 0.000000 -0.000000 -0.000000 275 -0.000000 0.000000 -0.000000 0.000000 276 -0.000000 0.000000 -0.000000 0.000000 277 -0.000000 0.000000 0.000000 -0.000000 278 -0.000000 0.000000 0.000000 -0.000000 279 -0.000000 0.000000 0.000000 -0.000000 280 -0.000000 0.000000 0.000000 0.000000 281 -0.000000 0.000000 -0.000000 0.000000 282 -0.000000 0.000000 -0.000000 0.000000 283 -0.000000 0.000000 0.000000 0.000000 284 -0.000000 0.000000 0.000000 -0.000000 285 -0.000000 0.000000 0.000000 -0.000000 286 -0.000000 0.000000 0.000000 0.000000 287 -0.000000 0.000000 0.000000 0.000000 288 -0.000000 0.000000 -0.000000 0.000000 289 -0.000000 0.000000 -0.000000 0.000000 290 -0.000000 0.000000 -0.000000 0.000000 291 -0.000000 0.000000 0.000000 -0.000000 292 -0.000000 0.000000 -0.000000 -0.000000 293 -0.000000 0.000000 -0.000000 -0.000000 294 -0.000000 0.000000 -0.000000 0.000000 295 -0.000000 0.000000 -0.000000 0.000000 296 -0.000000 0.000000 0.000000 -0.000000 297 -0.000000 0.000000 0.000000 -0.000000 298 -0.000000 0.000000 0.000000 -0.000000 299 -0.000000 0.000000 0.000000 -0.000000 300 -0.000000 0.000000 -0.000000 -0.000000 301 -0.000000 0.000000 -0.000000 0.000000 302 -0.000000 0.000000 -0.000000 -0.000000 303 -0.000000 0.000000 -0.000000 0.000000 304 -0.000000 0.000000 -0.000000 0.000000 305 -0.000000 0.000000 -0.000000 0.000000 306 -0.000000 0.000000 -0.000000 0.000000 307 -0.000000 0.000000 0.000000 0.000000 308 -0.000000 0.000000 -0.000000 0.000000 309 -0.000000 0.000000 0.000000 -0.000000 310 -0.000000 0.000000 0.000000 0.000000 311 -0.000000 0.000000 -0.000000 -0.000000 312 -0.000000 0.000000 0.000000 -0.000000 313 -0.000000 0.000000 0.000000 0.000000 314 -0.000000 0.000000 -0.000000 0.000000 315 -0.000000 0.000000 -0.000000 0.000000 316 -0.000000 0.000000 -0.000000 0.000000 317 -0.000000 0.000000 0.000000 -0.000000 318 -0.000000 0.000000 0.000000 -0.000000 319 -0.000000 0.000000 -0.000000 -0.000000 320 -0.000000 0.000000 0.000000 -0.000000 321 -0.000000 0.000000 0.000000 -0.000000 322 -0.000000 0.000000 0.000000 -0.000000 323 -0.000000 0.000000 -0.000000 0.000000 324 -0.000000 0.000000 -0.000000 0.000000 325 -0.000000 0.000000 -0.000000 0.000000 326 -0.000000 0.000000 -0.000000 -0.000000 327 -0.000000 0.000000 0.000000 -0.000000 328 -0.000000 0.000000 0.000000 -0.000000 329 -0.000000 0.000000 -0.000000 -0.000000 330 -0.000000 0.000000 -0.000000 0.000000 331 -0.000000 0.000000 -0.000000 0.000000 332 -0.000000 0.000000 0.000000 0.000000 333 -0.000000 0.000000 0.000000 0.000000 334 -0.000000 0.000000 -0.000000 0.000000 335 -0.000000 0.000000 -0.000000 0.000000 336 -0.000000 0.000000 -0.000000 0.000000 337 -0.000000 0.000000 -0.000000 0.000000 338 -0.000000 0.000000 0.000000 -0.000000 339 -0.000000 0.000000 -0.000000 0.000000 340 -0.000000 0.000000 0.000000 -0.000000 341 -0.000000 0.000000 0.000000 -0.000000 342 -0.000000 0.000000 0.000000 -0.000000 343 -0.000000 0.000000 0.000000 -0.000000 344 -0.000000 0.000000 -0.000000 0.000000 345 -0.000000 0.000000 0.000000 -0.000000 346 -0.000000 0.000000 0.000000 -0.000000 347 -0.000000 0.000000 0.000000 -0.000000 348 -0.000000 0.000000 0.000000 -0.000000 349 -0.000000 0.000000 0.000000 0.000000 350 -0.000000 0.000000 -0.000000 0.000000 351 -0.000000 0.000000 -0.000000 0.000000 352 -0.000000 0.000000 0.000000 -0.000000 353 -0.000000 0.000000 -0.000000 -0.000000 354 -0.000000 0.000000 -0.000000 0.000000 355 -0.000000 0.000000 -0.000000 0.000000 356 -0.000000 0.000000 -0.000000 0.000000 357 -0.000000 0.000000 0.000000 -0.000000 358 -0.000000 0.000000 0.000000 -0.000000 359 -0.000000 0.000000 0.000000 -0.000000 360 -0.000000 0.000000 0.000000 -0.000000 361 -0.000000 0.000000 -0.000000 -0.000000 362 -0.000000 0.000000 -0.000000 0.000000 363 -0.000000 0.000000 -0.000000 0.000000 364 -0.000000 0.000000 -0.000000 0.000000 365 -0.000000 0.000000 0.000000 0.000000 366 -0.000000 0.000000 0.000000 -0.000000 367 -0.000000 0.000000 0.000000 -0.000000 368 -0.000000 0.000000 -0.000000 0.000000 369 -0.000000 0.000000 -0.000000 0.000000 370 -0.000000 0.000000 -0.000000 0.000000 371 -0.000000 0.000000 0.000000 -0.000000 372 -0.000000 0.000000 0.000000 -0.000000 373 -0.000000 0.000000 0.000000 -0.000000 374 -0.000000 0.000000 -0.000000 0.000000 375 -0.000000 0.000000 -0.000000 0.000000 376 -0.000000 0.000000 -0.000000 0.000000 377 -0.000000 0.000000 0.000000 -0.000000 378 -0.000000 0.000000 0.000000 -0.000000 379 -0.000000 0.000000 -0.000000 0.000000 380 -0.000000 0.000000 -0.000000 0.000000 381 -0.000000 0.000000 0.000000 -0.000000 382 -0.000000 0.000000 0.000000 -0.000000 383 -0.000000 0.000000 0.000000 -0.000000 384 -0.000000 0.000000 -0.000000 0.000000 385 -0.000000 0.000000 -0.000000 0.000000 386 -0.000000 0.000000 -0.000000 0.000000 387 -0.000000 0.000000 0.000000 -0.000000 388 -0.000000 0.000000 0.000000 -0.000000 389 -0.000000 0.000000 -0.000000 0.000000 390 -0.000000 0.000000 -0.000000 0.000000 391 -0.000000 0.000000 -0.000000 0.000000 392 -0.000000 0.000000 -0.000000 0.000000 393 -0.000000 0.000000 0.000000 -0.000000 394 -0.000000 0.000000 0.000000 -0.000000 395 -0.000000 0.000000 0.000000 -0.000000 396 -0.000000 0.000000 0.000000 0.000000 397 -0.000000 0.000000 -0.000000 0.000000 398 -0.000000 0.000000 -0.000000 0.000000 399 -0.000000 0.000000 0.000000 -0.000000 400 -0.000000 0.000000 0.000000 -0.000000 401 -0.000000 0.000000 -0.000000 -0.000000 402 -0.000000 0.000000 0.000000 -0.000000 403 -0.000000 0.000000 0.000000 -0.000000 404 -0.000000 0.000000 0.000000 -0.000000 405 -0.000000 0.000000 -0.000000 -0.000000 406 -0.000000 0.000000 -0.000000 0.000000 407 -0.000000 0.000000 -0.000000 0.000000 408 -0.000000 0.000000 -0.000000 0.000000 409 -0.000000 0.000000 0.000000 -0.000000 410 -0.000000 0.000000 0.000000 -0.000000 411 -0.000000 0.000000 -0.000000 -0.000000 412 -0.000000 0.000000 -0.000000 0.000000 413 -0.000000 0.000000 -0.000000 0.000000 414 -0.000000 0.000000 -0.000000 0.000000 415 -0.000000 0.000000 -0.000000 0.000000 416 -0.000000 0.000000 0.000000 0.000000 417 -0.000000 0.000000 -0.000000 0.000000 418 -0.000000 0.000000 -0.000000 -0.000000 419 -0.000000 0.000000 0.000000 -0.000000 420 -0.000000 0.000000 0.000000 -0.000000 421 -0.000000 0.000000 -0.000000 0.000000 422 -0.000000 0.000000 -0.000000 0.000000 423 -0.000000 0.000000 0.000000 0.000000 424 -0.000000 0.000000 0.000000 -0.000000 425 -0.000000 0.000000 0.000000 -0.000000 426 -0.000000 0.000000 -0.000000 0.000000 427 -0.000000 0.000000 -0.000000 0.000000 428 -0.000000 0.000000 0.000000 0.000000 429 -0.000000 0.000000 0.000000 0.000000 430 -0.000000 0.000000 -0.000000 0.000000 431 -0.000000 0.000000 -0.000000 0.000000 432 -0.000000 0.000000 -0.000000 -0.000000 433 -0.000000 0.000000 -0.000000 0.000000 434 -0.000000 0.000000 -0.000000 -0.000000 435 -0.000000 0.000000 0.000000 -0.000000 436 -0.000000 0.000000 0.000000 0.000000 437 -0.000000 0.000000 0.000000 0.000000 438 -0.000000 0.000000 0.000000 -0.000000 439 -0.000000 0.000000 -0.000000 0.000000 440 -0.000000 0.000000 -0.000000 0.000000 441 -0.000000 0.000000 0.000000 0.000000 442 -0.000000 0.000000 -0.000000 0.000000 443 -0.000000 0.000000 -0.000000 0.000000 444 -0.000000 0.000000 0.000000 -0.000000 445 -0.000000 0.000000 -0.000000 0.000000 446 -0.000000 0.000000 -0.000000 0.000000 447 -0.000000 0.000000 0.000000 0.000000 448 -0.000000 0.000000 -0.000000 0.000000 449 -0.000000 0.000000 0.000000 0.000000 450 -0.000000 0.000000 0.000000 -0.000000 451 -0.000000 0.000000 -0.000000 0.000000 452 -0.000000 0.000000 0.000000 -0.000000 453 -0.000000 0.000000 -0.000000 -0.000000 454 -0.000000 0.000000 -0.000000 0.000000 455 -0.000000 0.000000 0.000000 -0.000000 456 -0.000000 0.000000 0.000000 -0.000000 457 -0.000000 0.000000 -0.000000 0.000000 458 -0.000000 0.000000 -0.000000 0.000000 459 -0.000000 0.000000 0.000000 0.000000 460 -0.000000 0.000000 -0.000000 0.000000 461 -0.000000 0.000000 0.000000 -0.000000 462 -0.000000 0.000000 0.000000 0.000000 463 -0.000000 0.000000 -0.000000 -0.000000 464 -0.000000 0.000000 0.000000 -0.000000 465 -0.000000 0.000000 -0.000000 -0.000000 466 -0.000000 0.000000 -0.000000 0.000000 467 -0.000000 0.000000 -0.000000 0.000000 468 -0.000000 0.000000 0.000000 -0.000000 469 -0.000000 0.000000 -0.000000 -0.000000 470 -0.000000 0.000000 -0.000000 -0.000000 471 -0.000000 0.000000 -0.000000 0.000000 472 -0.000000 0.000000 -0.000000 0.000000 473 -0.000000 0.000000 -0.000000 -0.000000 474 -0.000000 0.000000 0.000000 -0.000000 475 -0.000000 0.000000 0.000000 0.000000 476 -0.000000 0.000000 0.000000 -0.000000 477 -0.000000 0.000000 0.000000 0.000000 478 -0.000000 0.000000 -0.000000 -0.000000 479 -0.000000 0.000000 -0.000000 -0.000000 480 -0.000000 0.000000 0.000000 -0.000000 481 -0.000000 0.000000 0.000000 -0.000000 482 -0.000000 0.000000 -0.000000 0.000000 483 -0.000000 0.000000 0.000000 -0.000000 484 -0.000000 0.000000 0.000000 -0.000000 485 -0.000000 0.000000 -0.000000 0.000000 486 -0.000000 0.000000 -0.000000 0.000000 487 -0.000000 0.000000 -0.000000 0.000000 488 -0.000000 0.000000 -0.000000 0.000000 489 -0.000000 0.000000 0.000000 -0.000000 490 -0.000000 0.000000 -0.000000 -0.000000 491 -0.000000 0.000000 0.000000 0.000000 492 -0.000000 0.000000 0.000000 -0.000000 493 -0.000000 0.000000 0.000000 -0.000000 494 -0.000000 0.000000 -0.000000 0.000000 495 -0.000000 0.000000 -0.000000 0.000000 496 -0.000000 0.000000 -0.000000 0.000000 497 -0.000000 0.000000 -0.000000 0.000000 498 -0.000000 0.000000 0.000000 -0.000000 499 -0.000000 0.000000 0.000000 -0.000000 500 -0.000000 0.000000 0.000000 -0.000000 501 -0.000000 0.000000 0.000000 -0.000000 502 -0.000000 0.000000 -0.000000 0.000000 503 -0.000000 0.000000 0.000000 0.000000 504 -0.000001 0.000001 0.000000 -0.000000 505 -0.000033 0.000033 0.000000 -0.000000 506 -0.000740 0.000740 0.000000 0.000000 507 -0.009652 0.009652 -0.000000 0.000000 508 -0.073263 0.073263 -0.000000 0.000000 509 -0.316198 0.316198 -0.000000 -0.000000 510 -0.735759 0.735759 -0.000000 0.000000 511 -0.778801 0.778801 -0.000000 0.000000 512 0.000000 0.000000 -0.000000 0.000000 513 0.778801 -0.778801 0.000000 0.000000 514 0.735759 -0.735759 0.000000 0.000000 515 0.316198 -0.316198 0.000000 -0.000000 516 0.073263 -0.073263 0.000000 -0.000000 517 0.009652 -0.009652 0.000000 -0.000000 518 0.000740 -0.000740 0.000000 -0.000000 519 0.000033 -0.000033 -0.000000 0.000000 520 0.000001 -0.000001 -0.000001 0.000001 521 0.000000 -0.000000 -0.000034 0.000033 522 0.000000 -0.000000 -0.000740 0.000740 523 0.000000 -0.000000 -0.009652 0.009652 524 0.000000 -0.000000 -0.073263 0.073263 525 0.000000 -0.000000 -0.316198 0.316198 526 0.000000 -0.000000 -0.735759 0.735759 527 0.000000 -0.000000 -0.778801 0.778801 528 0.000000 -0.000000 0.000000 -0.000000 529 0.000000 -0.000000 0.778801 -0.778801 530 0.000000 -0.000000 0.735759 -0.735759 531 0.000000 -0.000000 0.316198 -0.316198 532 0.000000 -0.000000 0.073263 -0.073263 533 0.000000 -0.000000 0.009652 -0.009652 534 0.000000 -0.000000 0.000740 -0.000740 535 0.000000 -0.000000 0.000033 -0.000034 536 0.000000 -0.000000 0.000001 -0.000001 537 0.000000 -0.000000 0.000000 -0.000000 538 0.000000 -0.000000 0.000000 -0.000000 539 0.000000 -0.000000 0.000000 0.000000 540 0.000000 -0.000000 0.000000 -0.000000 541 0.000000 -0.000000 -0.000000 0.000000 542 0.000000 -0.000000 0.000000 -0.000000 543 0.000000 -0.000000 0.000000 0.000000 544 0.000000 -0.000000 -0.000000 0.000000 545 0.000000 -0.000000 0.000000 -0.000000 546 0.000000 -0.000000 0.000000 -0.000000 547 0.000000 -0.000000 0.000000 -0.000000 548 0.000000 -0.000000 0.000000 0.000000 549 0.000000 -0.000000 -0.000000 0.000000 550 0.000000 -0.000000 -0.000000 0.000000 551 0.000000 -0.000000 0.000000 -0.000000 552 0.000000 -0.000000 0.000000 -0.000000 553 0.000000 -0.000000 -0.000000 0.000000 554 0.000000 -0.000000 -0.000000 0.000000 555 0.000000 -0.000000 0.000000 0.000000 556 0.000000 -0.000000 0.000000 -0.000000 557 0.000000 -0.000000 0.000000 0.000000 558 0.000000 -0.000000 0.000000 -0.000000 559 0.000000 -0.000000 -0.000000 0.000000 560 0.000000 -0.000000 -0.000000 0.000000 561 0.000000 -0.000000 -0.000000 -0.000000 562 0.000000 -0.000000 -0.000000 -0.000000 563 0.000000 -0.000000 -0.000000 0.000000 564 0.000000 -0.000000 0.000000 0.000000 565 0.000000 -0.000000 0.000000 0.000000 566 0.000000 -0.000000 0.000000 -0.000000 567 0.000000 -0.000000 0.000000 -0.000000 568 0.000000 -0.000000 -0.000000 -0.000000 569 0.000000 -0.000000 -0.000000 0.000000 570 0.000000 -0.000000 -0.000000 0.000000 571 0.000000 -0.000000 0.000000 0.000000 572 0.000000 -0.000000 0.000000 -0.000000 573 0.000000 -0.000000 0.000000 -0.000000 574 0.000000 -0.000000 0.000000 -0.000000 575 0.000000 -0.000000 0.000000 -0.000000 576 0.000000 -0.000000 0.000000 -0.000000 577 0.000000 -0.000000 -0.000000 -0.000000 578 0.000000 -0.000000 -0.000000 0.000000 579 0.000000 -0.000000 -0.000000 0.000000 580 0.000000 -0.000000 -0.000000 0.000000 581 0.000000 -0.000000 0.000000 -0.000000 582 0.000000 -0.000000 0.000000 0.000000 583 0.000000 -0.000000 0.000000 -0.000000 584 0.000000 -0.000000 -0.000000 0.000000 585 0.000000 -0.000000 -0.000000 0.000000 586 0.000000 -0.000000 -0.000000 -0.000000 587 0.000000 -0.000000 0.000000 -0.000000 588 0.000000 -0.000000 0.000000 -0.000000 589 0.000000 -0.000000 -0.000000 0.000000 590 0.000000 -0.000000 0.000000 0.000000 591 0.000000 -0.000000 -0.000000 -0.000000 592 0.000000 -0.000000 0.000000 -0.000000 593 0.000000 -0.000000 0.000000 0.000000 594 0.000000 -0.000000 0.000000 0.000000 595 0.000000 -0.000000 0.000000 -0.000000 596 0.000000 -0.000000 -0.000000 0.000000 597 0.000000 -0.000000 -0.000000 0.000000 598 0.000000 -0.000000 -0.000000 -0.000000 599 0.000000 -0.000000 -0.000000 0.000000 600 0.000000 -0.000000 0.000000 -0.000000 601 0.000000 -0.000000 0.000000 -0.000000 602 0.000000 -0.000000 -0.000000 0.000000 603 0.000000 -0.000000 0.000000 -0.000000 604 0.000000 -0.000000 0.000000 0.000000 605 0.000000 -0.000000 0.000000 0.000000 606 0.000000 -0.000000 0.000000 -0.000000 607 0.000000 -0.000000 0.000000 -0.000000 608 0.000000 -0.000000 -0.000000 0.000000 609 0.000000 -0.000000 -0.000000 0.000000 610 0.000000 -0.000000 -0.000000 0.000000 611 0.000000 -0.000000 -0.000000 0.000000 612 0.000000 -0.000000 0.000000 -0.000000 613 0.000000 -0.000000 0.000000 -0.000000 614 0.000000 -0.000000 -0.000000 0.000000 615 0.000000 -0.000000 -0.000000 0.000000 616 0.000000 -0.000000 0.000000 -0.000000 617 0.000000 -0.000000 -0.000000 0.000000 618 0.000000 -0.000000 -0.000000 0.000000 619 0.000000 -0.000000 0.000000 0.000000 620 0.000000 -0.000000 0.000000 -0.000000 621 0.000000 -0.000000 0.000000 -0.000000 622 0.000000 -0.000000 0.000000 -0.000000 623 0.000000 -0.000000 0.000000 -0.000000 624 0.000000 -0.000000 0.000000 -0.000000 625 0.000000 -0.000000 0.000000 -0.000000 626 0.000000 -0.000000 0.000000 0.000000 627 0.000000 -0.000000 0.000000 0.000000 628 0.000000 -0.000000 0.000000 0.000000 629 0.000000 -0.000000 -0.000000 0.000000 630 0.000000 -0.000000 0.000000 0.000000 631 0.000000 -0.000000 0.000000 -0.000000 632 0.000000 -0.000000 0.000000 -0.000000 633 0.000000 -0.000000 -0.000000 -0.000000 634 0.000000 -0.000000 -0.000000 0.000000 635 0.000000 -0.000000 -0.000000 0.000000 636 0.000000 -0.000000 0.000000 -0.000000 637 0.000000 -0.000000 0.000000 -0.000000 638 0.000000 -0.000000 -0.000000 -0.000000 639 0.000000 -0.000000 -0.000000 -0.000000 640 0.000000 -0.000000 0.000000 -0.000000 641 0.000000 -0.000000 0.000000 0.000000 642 0.000000 -0.000000 -0.000000 0.000000 643 0.000000 -0.000000 0.000000 -0.000000 644 0.000000 -0.000000 0.000000 -0.000000 645 0.000000 -0.000000 0.000000 -0.000000 646 0.000000 -0.000000 0.000000 -0.000000 647 0.000000 -0.000000 -0.000000 0.000000 648 0.000000 -0.000000 -0.000000 0.000000 649 0.000000 -0.000000 -0.000000 0.000000 650 0.000000 -0.000000 -0.000000 -0.000000 651 0.000000 -0.000000 -0.000000 -0.000000 652 0.000000 -0.000000 0.000000 -0.000000 653 0.000000 -0.000000 -0.000000 0.000000 654 0.000000 -0.000000 0.000000 0.000000 655 0.000000 -0.000000 -0.000000 0.000000 656 0.000000 -0.000000 0.000000 -0.000000 657 0.000000 -0.000000 0.000000 0.000000 658 0.000000 -0.000000 -0.000000 0.000000 659 0.000000 -0.000000 -0.000000 0.000000 660 0.000000 -0.000000 -0.000000 0.000000 661 0.000000 -0.000000 0.000000 -0.000000 662 0.000000 -0.000000 0.000000 -0.000000 663 0.000000 -0.000000 0.000000 -0.000000 664 0.000000 -0.000000 -0.000000 0.000000 665 0.000000 -0.000000 -0.000000 0.000000 666 0.000000 -0.000000 -0.000000 0.000000 667 0.000000 -0.000000 0.000000 -0.000000 668 0.000000 -0.000000 0.000000 -0.000000 669 0.000000 -0.000000 0.000000 -0.000000 670 0.000000 -0.000000 0.000000 0.000000 671 0.000000 -0.000000 -0.000000 0.000000 672 0.000000 -0.000000 -0.000000 0.000000 673 0.000000 -0.000000 0.000000 -0.000000 674 0.000000 -0.000000 0.000000 -0.000000 675 0.000000 -0.000000 0.000000 -0.000000 676 0.000000 -0.000000 -0.000000 0.000000 677 0.000000 -0.000000 -0.000000 0.000000 678 0.000000 -0.000000 0.000000 -0.000000 679 0.000000 -0.000000 0.000000 -0.000000 680 0.000000 -0.000000 -0.000000 0.000000 681 0.000000 -0.000000 -0.000000 0.000000 682 0.000000 -0.000000 -0.000000 0.000000 683 0.000000 -0.000000 0.000000 -0.000000 684 0.000000 -0.000000 0.000000 -0.000000 685 0.000000 -0.000000 0.000000 -0.000000 686 0.000000 -0.000000 -0.000000 0.000000 687 0.000000 -0.000000 -0.000000 0.000000 688 0.000000 -0.000000 -0.000000 0.000000 689 0.000000 -0.000000 0.000000 -0.000000 690 0.000000 -0.000000 0.000000 -0.000000 691 0.000000 -0.000000 0.000000 -0.000000 692 0.000000 -0.000000 -0.000000 0.000000 693 0.000000 -0.000000 -0.000000 0.000000 694 0.000000 -0.000000 -0.000000 0.000000 695 0.000000 -0.000000 0.000000 -0.000000 696 0.000000 -0.000000 0.000000 -0.000000 697 0.000000 -0.000000 0.000000 -0.000000 698 0.000000 -0.000000 0.000000 -0.000000 699 0.000000 -0.000000 0.000000 -0.000000 700 0.000000 -0.000000 -0.000000 0.000000 701 0.000000 -0.000000 -0.000000 0.000000 702 0.000000 -0.000000 -0.000000 0.000000 703 0.000000 -0.000000 0.000000 0.000000 704 0.000000 -0.000000 0.000000 -0.000000 705 0.000000 -0.000000 -0.000000 0.000000 706 0.000000 -0.000000 -0.000000 0.000000 707 0.000000 -0.000000 -0.000000 -0.000000 708 0.000000 -0.000000 0.000000 -0.000000 709 0.000000 -0.000000 0.000000 -0.000000 710 0.000000 -0.000000 0.000000 -0.000000 711 0.000000 -0.000000 0.000000 -0.000000 712 0.000000 -0.000000 -0.000000 0.000000 713 0.000000 -0.000000 0.000000 0.000000 714 0.000000 -0.000000 0.000000 -0.000000 715 0.000000 -0.000000 0.000000 -0.000000 716 0.000000 -0.000000 0.000000 0.000000 717 0.000000 -0.000000 -0.000000 -0.000000 718 0.000000 -0.000000 0.000000 -0.000000 719 0.000000 -0.000000 0.000000 -0.000000 720 0.000000 -0.000000 0.000000 -0.000000 721 0.000000 -0.000000 -0.000000 -0.000000 722 0.000000 -0.000000 0.000000 0.000000 723 0.000000 -0.000000 0.000000 -0.000000 724 0.000000 -0.000000 -0.000000 0.000000 725 0.000000 -0.000000 -0.000000 0.000000 726 0.000000 -0.000000 -0.000000 -0.000000 727 0.000000 -0.000000 0.000000 -0.000000 728 0.000000 -0.000000 -0.000000 -0.000000 729 0.000000 -0.000000 -0.000000 0.000000 730 0.000000 -0.000000 -0.000000 0.000000 731 0.000000 -0.000000 -0.000000 0.000000 732 0.000000 -0.000000 -0.000000 0.000000 733 0.000000 -0.000000 -0.000000 -0.000000 734 0.000000 -0.000000 0.000000 -0.000000 735 0.000000 -0.000000 0.000000 -0.000000 736 0.000000 -0.000000 0.000000 -0.000000 737 0.000000 -0.000000 -0.000000 0.000000 738 0.000000 -0.000000 0.000000 -0.000000 739 0.000000 -0.000000 -0.000000 -0.000000 740 0.000000 -0.000000 -0.000000 -0.000000 741 0.000000 -0.000000 -0.000000 0.000000 742 0.000000 -0.000000 -0.000000 0.000000 743 0.000000 -0.000000 -0.000000 0.000000 744 0.000000 -0.000000 0.000000 -0.000000 745 0.000000 -0.000000 -0.000000 -0.000000 746 0.000000 -0.000000 0.000000 -0.000000 747 0.000000 -0.000000 0.000000 -0.000000 748 0.000000 -0.000000 -0.000000 -0.000000 749 0.000000 -0.000000 -0.000000 0.000000 750 0.000000 -0.000000 0.000000 -0.000000 751 0.000000 -0.000000 0.000000 -0.000000 752 0.000000 -0.000000 0.000000 -0.000000 753 0.000000 -0.000000 0.000000 -0.000000 754 0.000000 -0.000000 -0.000000 -0.000000 755 0.000000 -0.000000 -0.000000 0.000000 756 0.000000 -0.000000 -0.000000 0.000000 757 0.000000 -0.000000 -0.000000 0.000000 758 0.000000 -0.000000 0.000000 -0.000000 759 0.000000 -0.000000 0.000000 -0.000000 760 0.000000 -0.000000 0.000000 -0.000000 761 0.000000 -0.000000 -0.000000 0.000000 762 0.000000 -0.000000 -0.000000 0.000000 763 0.000000 -0.000000 0.000000 0.000000 764 0.000000 -0.000000 0.000000 -0.000000 765 0.000000 -0.000000 0.000000 0.000000 766 0.000000 -0.000000 -0.000000 -0.000000 767 0.000000 -0.000000 0.000000 0.000000 768 0.000000 -0.000000 -0.000000 0.000000 769 0.000000 -0.000000 -0.000000 -0.000000 770 0.000000 -0.000000 0.000000 -0.000000 771 0.000000 -0.000000 -0.000000 -0.000000 772 0.000000 -0.000000 0.000000 -0.000000 773 0.000000 -0.000000 -0.000000 0.000000 774 0.000000 -0.000000 -0.000000 0.000000 775 0.000000 -0.000000 0.000000 0.000000 776 0.000000 -0.000000 0.000000 -0.000000 777 0.000000 -0.000000 0.000000 -0.000000 778 0.000000 -0.000000 0.000000 -0.000000 779 0.000000 -0.000000 -0.000000 -0.000000 780 0.000000 -0.000000 -0.000000 0.000000 781 0.000000 -0.000000 -0.000000 0.000000 782 0.000000 -0.000000 -0.000000 0.000000 783 0.000000 -0.000000 0.000000 -0.000000 784 0.000000 -0.000000 0.000000 -0.000000 785 0.000000 -0.000000 -0.000000 -0.000000 786 0.000000 -0.000000 0.000000 0.000000 787 0.000000 -0.000000 0.000000 0.000000 788 0.000000 -0.000000 -0.000000 0.000000 789 0.000000 -0.000000 -0.000000 0.000000 790 0.000000 -0.000000 -0.000000 0.000000 791 0.000000 -0.000000 -0.000000 0.000000 792 0.000000 -0.000000 0.000000 -0.000000 793 0.000000 -0.000000 0.000000 -0.000000 794 0.000000 -0.000000 0.000000 -0.000000 795 0.000000 -0.000000 0.000000 -0.000000 796 0.000000 -0.000000 0.000000 -0.000000 797 0.000000 -0.000000 0.000000 -0.000000 798 0.000000 -0.000000 -0.000000 -0.000000 799 0.000000 -0.000000 -0.000000 0.000000 800 0.000000 -0.000000 -0.000000 0.000000 801 0.000000 -0.000000 -0.000000 0.000000 802 0.000000 -0.000000 -0.000000 0.000000 803 0.000000 -0.000000 0.000000 -0.000000 804 0.000000 -0.000000 0.000000 -0.000000 805 0.000000 -0.000000 -0.000000 0.000000 806 0.000000 -0.000000 -0.000000 0.000000 807 0.000000 -0.000000 0.000000 -0.000000 808 0.000000 -0.000000 0.000000 -0.000000 809 0.000000 -0.000000 0.000000 -0.000000 810 0.000000 -0.000000 -0.000000 0.000000 811 0.000000 -0.000000 -0.000000 0.000000 812 0.000000 -0.000000 -0.000000 0.000000 813 0.000000 -0.000000 0.000000 -0.000000 814 0.000000 -0.000000 0.000000 -0.000000 815 0.000000 -0.000000 0.000000 -0.000000 816 0.000000 -0.000000 -0.000000 0.000000 817 0.000000 -0.000000 -0.000000 0.000000 818 0.000000 -0.000000 -0.000000 0.000000 819 0.000000 -0.000000 0.000000 -0.000000 820 0.000000 -0.000000 0.000000 -0.000000 821 0.000000 -0.000000 0.000000 -0.000000 822 0.000000 -0.000000 0.000000 -0.000000 823 0.000000 -0.000000 -0.000000 0.000000 824 0.000000 -0.000000 -0.000000 0.000000 825 0.000000 -0.000000 -0.000000 0.000000 826 0.000000 -0.000000 0.000000 -0.000000 827 0.000000 -0.000000 0.000000 -0.000000 828 0.000000 -0.000000 -0.000000 0.000000 829 0.000000 -0.000000 0.000000 -0.000000 830 0.000000 -0.000000 0.000000 -0.000000 831 0.000000 -0.000000 0.000000 -0.000000 832 0.000000 -0.000000 -0.000000 0.000000 833 0.000000 -0.000000 -0.000000 0.000000 834 0.000000 -0.000000 -0.000000 0.000000 835 0.000000 -0.000000 0.000000 0.000000 836 0.000000 -0.000000 0.000000 -0.000000 837 0.000000 -0.000000 0.000000 -0.000000 838 0.000000 -0.000000 0.000000 -0.000000 839 0.000000 -0.000000 -0.000000 0.000000 840 0.000000 -0.000000 -0.000000 0.000000 841 0.000000 -0.000000 0.000000 -0.000000 842 0.000000 -0.000000 0.000000 -0.000000 843 0.000000 -0.000000 0.000000 -0.000000 844 0.000000 -0.000000 -0.000000 0.000000 845 0.000000 -0.000000 -0.000000 -0.000000 846 0.000000 -0.000000 -0.000000 0.000000 847 0.000000 -0.000000 -0.000000 0.000000 848 0.000000 -0.000000 -0.000000 0.000000 849 0.000000 -0.000000 0.000000 -0.000000 850 0.000000 -0.000000 0.000000 0.000000 851 0.000000 -0.000000 0.000000 -0.000000 852 0.000000 -0.000000 -0.000000 0.000000 853 0.000000 -0.000000 -0.000000 0.000000 854 0.000000 -0.000000 0.000000 -0.000000 855 0.000000 -0.000000 0.000000 -0.000000 856 0.000000 -0.000000 0.000000 -0.000000 857 0.000000 -0.000000 -0.000000 0.000000 858 0.000000 -0.000000 -0.000000 0.000000 859 0.000000 -0.000000 -0.000000 0.000000 860 0.000000 -0.000000 -0.000000 0.000000 861 0.000000 -0.000000 0.000000 -0.000000 862 0.000000 -0.000000 0.000000 -0.000000 863 0.000000 -0.000000 0.000000 -0.000000 864 0.000000 -0.000000 -0.000000 0.000000 865 0.000000 -0.000000 -0.000000 0.000000 866 0.000000 -0.000000 0.000000 -0.000000 867 0.000000 -0.000000 0.000000 -0.000000 868 0.000000 -0.000000 0.000000 -0.000000 869 0.000000 -0.000000 0.000000 -0.000000 870 0.000000 -0.000000 0.000000 -0.000000 871 0.000000 -0.000000 -0.000000 -0.000000 872 0.000000 -0.000000 -0.000000 0.000000 873 0.000000 -0.000000 -0.000000 0.000000 874 0.000000 -0.000000 0.000000 0.000000 875 0.000000 -0.000000 0.000000 -0.000000 876 0.000000 -0.000000 0.000000 -0.000000 877 0.000000 -0.000000 -0.000000 0.000000 878 0.000000 -0.000000 -0.000000 0.000000 879 0.000000 -0.000000 -0.000000 0.000000 880 0.000000 -0.000000 0.000000 0.000000 881 0.000000 -0.000000 -0.000000 0.000000 882 0.000000 -0.000000 0.000000 0.000000 883 0.000000 -0.000000 0.000000 -0.000000 884 0.000000 -0.000000 -0.000000 0.000000 885 0.000000 -0.000000 0.000000 -0.000000 886 0.000000 -0.000000 0.000000 -0.000000 887 0.000000 -0.000000 0.000000 -0.000000 888 0.000000 -0.000000 0.000000 0.000000 889 0.000000 -0.000000 -0.000000 0.000000 890 0.000000 -0.000000 0.000000 0.000000 891 0.000000 -0.000000 -0.000000 -0.000000 892 0.000000 -0.000000 -0.000000 -0.000000 893 0.000000 -0.000000 -0.000000 -0.000000 894 0.000000 -0.000000 -0.000000 -0.000000 895 0.000000 -0.000000 -0.000000 -0.000000 896 0.000000 -0.000000 -0.000000 0.000000 897 0.000000 -0.000000 -0.000000 0.000000 898 0.000000 -0.000000 0.000000 -0.000000 899 0.000000 -0.000000 0.000000 -0.000000 900 0.000000 -0.000000 0.000000 -0.000000 901 0.000000 -0.000000 0.000000 -0.000000 902 0.000000 -0.000000 -0.000000 0.000000 903 0.000000 -0.000000 -0.000000 0.000000 904 0.000000 -0.000000 0.000000 0.000000 905 0.000000 -0.000000 0.000000 -0.000000 906 0.000000 -0.000000 0.000000 -0.000000 907 0.000000 -0.000000 0.000000 0.000000 908 0.000000 -0.000000 -0.000000 0.000000 909 0.000000 -0.000000 -0.000000 0.000000 910 0.000000 -0.000000 0.000000 -0.000000 911 0.000000 -0.000000 0.000000 0.000000 912 0.000000 -0.000000 -0.000000 0.000000 913 0.000000 -0.000000 -0.000000 0.000000 914 0.000000 -0.000000 0.000000 0.000000 915 0.000000 -0.000000 0.000000 0.000000 916 0.000000 -0.000000 0.000000 -0.000000 917 0.000000 -0.000000 0.000000 -0.000000 918 0.000000 -0.000000 0.000000 -0.000000 919 0.000000 -0.000000 -0.000000 0.000000 920 0.000000 -0.000000 -0.000000 0.000000 921 0.000000 -0.000000 -0.000000 0.000000 922 0.000000 -0.000000 -0.000000 -0.000000 923 0.000000 -0.000000 -0.000000 -0.000000 924 0.000000 -0.000000 0.000000 -0.000000 925 0.000000 -0.000000 -0.000000 -0.000000 926 0.000000 -0.000000 0.000000 -0.000000 927 0.000000 -0.000000 0.000000 0.000000 928 0.000000 -0.000000 -0.000000 0.000000 929 0.000000 -0.000000 -0.000000 -0.000000 930 0.000000 -0.000000 0.000000 -0.000000 931 0.000000 -0.000000 0.000000 -0.000000 932 0.000000 -0.000000 -0.000000 0.000000 933 0.000000 -0.000000 -0.000000 0.000000 934 0.000000 -0.000000 -0.000000 0.000000 935 0.000000 -0.000000 0.000000 -0.000000 936 0.000000 -0.000000 0.000000 -0.000000 937 0.000000 -0.000000 -0.000000 -0.000000 938 0.000000 -0.000000 -0.000000 0.000000 939 0.000000 -0.000000 -0.000000 0.000000 940 0.000000 -0.000000 -0.000000 0.000000 941 0.000000 -0.000000 -0.000000 0.000000 942 0.000000 -0.000000 -0.000000 0.000000 943 0.000000 -0.000000 -0.000000 0.000000 944 0.000000 -0.000000 -0.000000 0.000000 945 0.000000 -0.000000 -0.000000 0.000000 946 0.000000 -0.000000 -0.000000 -0.000000 947 0.000000 -0.000000 0.000000 -0.000000 948 0.000000 -0.000000 0.000000 -0.000000 949 0.000000 -0.000000 0.000000 -0.000000 950 0.000000 -0.000000 0.000000 -0.000000 951 0.000000 -0.000000 0.000000 0.000000 952 0.000000 -0.000000 -0.000000 0.000000 953 0.000000 -0.000000 -0.000000 0.000000 954 0.000000 -0.000000 0.000000 0.000000 955 0.000000 -0.000000 0.000000 -0.000000 956 0.000000 -0.000000 0.000000 -0.000000 957 0.000000 -0.000000 0.000000 0.000000 958 0.000000 -0.000000 -0.000000 0.000000 959 0.000000 -0.000000 -0.000000 0.000000 960 0.000000 -0.000000 -0.000000 0.000000 961 0.000000 -0.000000 -0.000000 0.000000 962 0.000000 -0.000000 -0.000000 0.000000 963 0.000000 -0.000000 -0.000000 -0.000000 964 0.000000 -0.000000 0.000000 -0.000000 965 0.000000 -0.000000 0.000000 -0.000000 966 0.000000 -0.000000 0.000000 -0.000000 967 0.000000 -0.000000 0.000000 -0.000000 968 0.000000 -0.000000 0.000000 -0.000000 969 0.000000 -0.000000 -0.000000 0.000000 970 0.000000 -0.000000 -0.000000 0.000000 971 0.000000 -0.000000 -0.000000 0.000000 972 0.000000 -0.000000 -0.000000 -0.000000 973 0.000000 -0.000000 0.000000 -0.000000 974 0.000000 -0.000000 0.000000 -0.000000 975 0.000000 -0.000000 -0.000000 0.000000 976 0.000000 -0.000000 -0.000000 0.000000 977 0.000000 -0.000000 0.000000 -0.000000 978 0.000000 -0.000000 0.000000 -0.000000 979 0.000000 -0.000000 0.000000 0.000000 980 0.000000 -0.000000 -0.000000 0.000000 981 0.000000 -0.000000 -0.000000 0.000000 982 0.000000 -0.000000 0.000000 -0.000000 983 0.000000 -0.000000 -0.000000 -0.000000 984 0.000000 -0.000000 0.000000 -0.000000 985 0.000000 -0.000000 -0.000000 0.000000 986 0.000000 -0.000000 -0.000000 0.000000 987 0.000000 -0.000000 -0.000000 -0.000000 988 0.000000 -0.000000 -0.000000 0.000000 989 0.000000 -0.000000 0.000000 -0.000000 990 0.000000 -0.000000 0.000000 -0.000000 991 0.000000 -0.000000 0.000000 -0.000000 992 0.000000 -0.000000 0.000000 -0.000000 993 0.000000 -0.000000 0.000000 -0.000000 994 0.000000 -0.000000 -0.000000 0.000000 995 0.000000 -0.000000 -0.000000 0.000000 996 0.000000 -0.000000 -0.000000 0.000000 997 0.000000 -0.000000 -0.000000 0.000000 998 0.000000 -0.000000 0.000000 0.000000 999 0.000000 -0.000000 0.000000 0.000000 1000 0.000000 -0.000000 0.000000 -0.000000 1001 0.000000 -0.000000 0.000000 -0.000000 1002 0.000000 -0.000000 0.000000 -0.000000 1003 0.000000 -0.000000 0.000000 -0.000000 1004 0.000000 -0.000000 -0.000000 0.000000 1005 0.000000 -0.000000 -0.000000 0.000000 1006 0.000000 -0.000000 0.000000 0.000000 1007 0.000000 -0.000000 0.000000 -0.000000 1008 0.000000 -0.000000 0.000000 -0.000000 1009 0.000000 -0.000000 0.000000 -0.000000 1010 0.000000 -0.000000 0.000000 0.000000 1011 0.000000 -0.000000 -0.000000 0.000000 1012 0.000000 -0.000000 0.000000 0.000000 1013 0.000000 -0.000000 0.000000 -0.000000 1014 0.000000 -0.000000 0.000000 -0.000000 1015 0.000000 -0.000000 -0.000000 -0.000000 1016 0.000000 -0.000000 -0.000000 -0.000000 1017 0.000000 -0.000000 -0.000000 -0.000000 1018 0.000000 -0.000000 0.000000 -0.000000 1019 0.000000 -0.000000 -0.000000 0.000000 1020 0.000000 -0.000000 -0.000000 0.000000 1021 0.000000 -0.000000 -0.000000 -0.000000 1022 0.000000 -0.000000 -0.000000 -0.000000 1023 0.000000 -0.000000 -0.000000 -0.000000 GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_llt2rat/Makefile000644 015705 000000 00000000505 13505462014 023345 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_llt2rat CSRCS = ALOS_llt2rat.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_llt2rat/ALOS_llt2rat.c000644 015705 000000 00000037567 13505462014 024275 0ustar00sandwellwheel000000 000000 /**************************************************************************** * Program to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/04/09 - update the range sampling rate from new PRM file to solve * * confict of rng_samp_rate between LED file and PRM file in FBD mode. * ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 2 char *USAGE = " \n Usage: " "ALOS_llt2rat master.PRM prec [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " precise - (0) standard processing, (1) - polynomial " "refinenent for backprojection (slower) \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - range, azimuth, lon, lat, elevation [ASCII " "default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: ALOS_llt2rat master.PRM 0 < topo.llt > topo.ratll \n"; /* int parse_ALOS_llt2rat(char **, char *); */ int main(int argc, char **argv) { FILE *fprm1 = NULL; int otype; double rln, rlt, rht, dr, t1, t11, t2, tm; double ts, rng0, thet, relp, telp, dopc; double xp[3]; double xt[3]; double rp[3]; double dd[5]; /* dummy for output double precision */ float ds[5]; /* dummy for output single precision */ double r0, rf, a0, af; double rad = PI / 180.; double fll, rdd, daa, drr; double dt, xs, ys, zs; double time[10], rng[10], d[3]; /* arrays used for polynomial refinement of min range */ int ir, k, ntt = 10, nc = 3; /* size of arrays used for polynomial refinement */ int j, nrec, npad = 8000, precise = 0; int goldop(); int stai, endi, midi; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; char name[128], value[128]; double rsr; FILE *ldrfile; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); /* Make sure usage is correct and files can be opened */ if (argc < 3 || argc > 4) { fprintf(stderr, "%s\n", USAGE); exit(-1); } precise = atoi(argv[2]); /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 4) { if (!strcmp(argv[3], "-bos")) otype = 2; else if (!strcmp(argv[3], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* dubugging fprintf(stderr,"debug\n"); fprintf(stderr,"%s\n",prm.led_file); fprintf(stderr,"%lf\n",prm.fs); fprintf(stderr,"%lf\n",prm.fd1); fprintf(stderr,"%d\n",prm.num_rng_bins); fprintf(stderr,"%d\n",prm.num_valid_az); fprintf(stderr,"%lf\n",prm.rc); fprintf(stderr,"%lf\n",prm.ra); fprintf(stderr,"%lf\n",prm.prf); fprintf(stderr,"%lf\n",prm.RE); fprintf(stderr,"%lf\n",prm.sub_int_a); fprintf(stderr,"%lf\n",prm.SC_clock_start); fprintf(stderr,"%lf\n",prm.clock_start); fprintf(stderr,"%d\n",prm.nrows); fprintf(stderr,"%d\n",prm.num_patches); fprintf(stderr,"%lf\n",prm.near_range); fprintf(stderr,"rshift = %d\n",prm.rshift); fprintf(stderr,"sub_int_r = %lf\n",prm.sub_int_r); fprintf(stderr,"chirp_ext = %d\n",prm.chirp_ext); */ fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ALOS_sarleader(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ /* fprintf(stderr,"ts=%lf,t1=%lf,nrec=%d\n",ts,t1,nrec); */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* look at the orb_pos for(i=0;i<4;i++) { for (j=0;j 180.) rp[1] = rp[1] - 360.; xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng0, &tm); if (precise == 1) { /* refine this minimum range and azimuth with a polynomial fit */ dt = 1. / ntt; /* make the polynomial 1 second long */ for (k = 0; k < ntt; k++) { time[k] = dt * (k - ntt / 2 + .5); t11 = tm + time[k]; interpolate_ALOS_orbit_slow(orb, t11, &xs, &ys, &zs, &ir); rng[k] = sqrt((xp[0] - xs) * (xp[0] - xs) + (xp[1] - ys) * (xp[1] - ys) + (xp[2] - zs) * (xp[2] - zs)) - rng0; } /* fit a second order polynomial to the range versus time function and * update the tm and rng0 */ polyfit(time, rng, d, &ntt, &nc); tm = tm - d[1] / (2. * d[2]); interpolate_ALOS_orbit_slow(orb, tm, &xs, &ys, &zs, &ir); rng0 = sqrt((xp[0] - xs) * (xp[0] - xs) + (xp[1] - ys) * (xp[1] - ys) + (xp[2] - zs) * (xp[2] - zs)); } /* compute the range and azimuth in pixel space */ xt[0] = rng0; xt[1] = tm; /* compute the range and azimuth in pixel space and correct for ALOS-1 and ALOS-2 Note that ALOS-1 uses the range and azimuth corrections from the non-zero Doppler. Note that ALOS-2 is corrected to zero Doppler so these corrections are not needed.*/ if (prm.SC_clock_start / 1000. > 2014.) { xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a) - 1; } else { xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a) + 4; /* compute the azimuth and range correction for ALOS-1 if the Doppler is * not zero */ // printf(" year fd1 fdd1 %f %f %f // \n",prm.SC_clock_start/1000.,prm.fd1,prm.fdd1); if (prm.fd1 != 0.) { dopc = prm.fd1 + prm.fdd1 * (prm.near_range + dr * prm.num_rng_bins / 2.); rdd = (prm.vel * prm.vel) / rng0; daa = -0.5 * (prm.lambda * dopc) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; /*printf(" vel lambda dopc prf %f %f %f %f \n",prm.vel,prm.lambda,dopc,prm.prf); printf(" rng, rdd, daa, drr xt[1] %f %f %f %f %f \n",rng, rdd, daa, drr, xt[1]); */ xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } } /* fprintf(stderr," dda, %f \n",daa); */ if (precise == 1) xt[1] = xt[1] - .5; /* this correction is needed for the precise to match the standard on average */ if (xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) continue; if (otype == 1) { fprintf(stdout, "%f %f %f %f %f \n", xt[0], xt[1], rp[2], rp[1], rp[0]); } else if (otype == 2) { ds[0] = (float)xt[0]; ds[1] = (float)xt[1]; ds[2] = (float)rp[2]; ds[3] = (float)rp[1]; ds[4] = (float)rp[0]; fwrite(ds, sizeof(float), 5, stdout); } else if (otype == 3) { dd[0] = xt[0]; dd[1] = xt[1]; dd[2] = rp[2]; dd[3] = rp[1]; dd[4] = rp[0]; fwrite(dd, sizeof(double), 5, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL && (x2 != x1)) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/preproc/ALOS_preproc/include/siocomplex.h000644 015705 000000 00000000646 13505462014 023467 0ustar00sandwellwheel000000 000000 #ifndef _COMPLEX_H #define _COMPLEX_H typedef struct SCOMPLEX { short r, i; } scomplex; typedef struct FCOMPLEX { float r, i; } fcomplex; typedef struct DCOMPLEX { double r, i; } dcomplex; fcomplex Cmul(fcomplex x, fcomplex y); fcomplex Cexp(float theta); fcomplex Conjg(fcomplex z); fcomplex RCmul(float a, fcomplex z); fcomplex Cadd(fcomplex x, fcomplex y); float Cabs(fcomplex z); #endif /* _COMPLEX_H */ GMTSAR_V5.7/preproc/ALOS_preproc/include/llt2xyz.h000644 015705 000000 00000005713 13505462014 022735 0ustar00sandwellwheel000000 000000 /* @(#)physcon.h 1.1 98/12/08 */ /********1*********2*********3*********4*********5*********6*********7** * Name: physcon * Version: 9602.17 * Author: M. Schenewerk * Purpose: physical constants * * Global: * ----------- * C_to_K convert Celcius to Kelvin [degree K] * FIVE (double)5.0 * FOUR (double)4.0 * L1_frequency GPS L1 frequency [Hz] * L1_wavelength GPS L1 wavelength [m] * L2_frequency GPS L2 frequency [Hz] * L2_wavelength GPS L2 wavelength [m] * ONE (double)1.0 * THREE (double)3.0 * TWO (double)2.0 * ZERO (double)0.0 * cee speed of light [m/s] * deg_to_rad conversion for degrees to radians [rad/deg] * eflat Earth flattening factor * emajor Earth's semi-major axis [m] * eom Earth / Moon mass ratio * erate Earth's rotation rate [rad/sec] * pi pi * pio2 pi over two * rad_to_deg conversion for radians to degrees [deg/rad] * rad_to_hours conversion for radians to hours [hours/rad] * st_to_ut conversion for siderial to UT time [sid s/UT s] * soe Sun / Earth mass ratio * soem Sun / (Earth + Moon) mass ratio * tropical_year tropical year [day] * twopi two pi * ut_to_st conversion factor for UT to siderial time [UT s/sid s] * * Notes: * ----------- * * References: * ----------- * "IERS Standards (1992)", IERS Technical Note 13, ed. D.D. McCarthy, * July 1992 * ********1*********2*********3*********4*********5*********6*********7** * Modification History: * 9602.17, MSS, Converted to C. ********1*********2*********3*********4*********5*********6*********7*/ #ifndef physcon_h #define physcon_h #define ZERO ((double)0.0) #define ONE ((double)1.0) #define TWO ((double)2.0) #define THREE ((double)3.0) #define FOUR ((double)4.0) #define FIVE ((double)5.0) #define pi ((double)3.14159265358979) #define pio2 ((double)0.5 * pi) #define twopi ((double)2.0 * pi) #define deg_to_rad (twopi / (double)360.0) #define rad_to_deg ((double)360.0 / twopi) #define rad_to_hours ((double)24.0 / twopi) #define m_to_km ((double)1.0e-3) #define km_to_m ((double)1.0e+3) #define cee ((double)299792458.0) #define C_to_K ((double)273.15) #define J2000 ((long)51545) #define tropical_year ((double)365.2421910) #define ut_to_st ((double)1.00273790934) #define st_to_ut ((double)0.9972695663399999) #define emajor ((double)6378137.0) #define eflat ((double)0.00335281068118) #define erate ((double)7.292115855228083e-5) #define soem ((double)328900.550) #define eom ((double)81.3005870) #define soe (soem * ((double)1.0 + (double)1.0 / eom)) #define L1_frequency ((double)1575.420e+6) #define L2_frequency ((double)1227.600e+6) #define L1_wavelength ((double)cee / L1_frequency) #define L2_wavelength ((double)cee / L2_frequency) #endif /* physcon_h */ GMTSAR_V5.7/preproc/ALOS_preproc/include/data_ALOSE.h000644 015705 000000 00000052524 13505462014 023143 0ustar00sandwellwheel000000 000000 /* Structure to read ALOSE signal data */ /* Each structure has write control string (WCS) and pointers (RVL) to aid in input and output. RJM June 2007 Dec. 2009 Modified for RESTEC format. Jeff Bytof 15-Apr-2010 Replace ALOS identifier with ALOSE Jeff Bytof */ /* struct ALOS_image { struct sardata_record *rec1; struct sardata_descriptor *dfd; struct sardata_record *rec2; struct sardata_info *sdr; }; */ /* beginning of short binary segment */ /* struct sardata_record { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; */ /* #define SARDATA_RECORD_WCS "*********** SAR FDR BINARY **********\n"\ "record_seq_no ==> %4x\n"\ "record_subtype_code1 ==> %1x\n"\ "record_type_code1 ==> %1x\n"\ "record_subtype_code2 ==> %1x\n"\ "record_subtype_code3 ==> %1x\n"\ "record_length ==> %4x\n\n" #define SARDATA_RECORD_RVL(SP)\ (SP)->record_seq_no,\ (SP)->record_subtype_code1,\ (SP)->record_type_code1,\ (SP)->record_subtype_code2,\ (SP)->record_subtype_code3,\ (SP)->record_length */ /* end of short binary segment */ /******* CONTINUATION OF RESTEC IMAGE OPTIONS FILE DESCRIPTOR RECORD ********/ struct sardata_descriptor_ALOSE { char ascii_ebcdic_flag[2]; char blank_1[2]; char format_doc_ID[12]; char format_control_level[2]; char file_design_descriptor[2]; char facility_soft_release[12]; char file_number[4]; char file_name[16]; char record_seq_loc_type_flag_1[4]; char record_seq_loc_type_flag_2[8]; char sequence_number_loc[4]; char record_code_loc_flag[4]; char record_code_loc[8]; char record_code_field_length[4]; char record_length_loc_flag[4]; char record_length_loc[8]; char record_length_field_length[4]; char blank_2[68]; char number_sar_data_records[6]; char sar_data_record_length[6]; char blank_3[24]; char num_bits_sample[4]; char num_sample_data_group[4]; char num_bytes_data_group[4]; char just_order_samples[4]; char num_sar_channels[4]; char num_lines_data_set[8]; char num_left_border_pixels[4]; char total_num_data_groups[8]; char num_right_border_pixels[4]; char num_top_border_lines[4]; char num_bottom_border_lines[4]; char interleave_indicator[4]; char num_physical_records_line[2]; char num_physical_records_multi_chan[2]; char num_bytes_prefix[4]; char num_bytes_SAR_data[8]; char num_bytes_suffix[4]; char pref_fix_repeat_flag[4]; char sample_data_lin_no[8]; char SAR_chan_num_loc[8]; char time_SAR_data_line[8]; char left_fill_count[8]; char right_fill_count[8]; char pad_pixels[4]; char blank_4[28]; char sar_data_line_qual_loc[8]; char calib_info_field_loc[8]; char gain_values_field_loc[8]; char bias_values_field_loc[8]; char sar_data_format_code_1[28]; char sar_data_format_code_2[4]; char num_left_fill_bits_pixel[4]; char num_right_fill_bits_pixel[4]; char max_range_pixel[8]; /* char blank_5[272]; */ /* restec format change - bytof */ char blank_5[15804]; /* restec format change - bytof */ }; #define SARDATA_DESCRIPTOR_WCS_ALOSE \ "*********** SAR DATA DESCRIPTOR**********\n" \ "ascii_ebcdic_flag ==> %.2s\n" \ "blank_1 ==> %.2s\n" \ "format_doc_ID ==> %.12s\n" \ "format_control_level ==> %.2s\n" \ "file_design_descriptor ==> %.2s\n" \ "facility_soft_release ==> %.12s\n" \ "file_number ==> %.4s\n" \ "file_name ==> %.16s\n" \ "record_seq_loc_type_flag_1 ==> %.4s\n" \ "record_seq_loc_type_flag_2 ==> %.8s\n" \ "sequence_number_loc ==> %.4s\n" \ "record_code_loc_flag ==> %.4s\n" \ "record_code_loc ==> %.8s\n" \ "record_code_field_length ==> %.4s\n" \ "record_length_loc_flag ==> %.4s\n" \ "record_length_loc ==> %.8s\n" \ "record_length_field_length ==> %.4s\n" \ "blank_2 ==> %.68s\n" \ "number_sar_data_records ==> %.6s\n" \ "sar_data_record_length ==> %.6s\n" \ "blank_3 ==> %.24s\n" \ "num_bits_sample ==> %.4s\n" \ "num_sample_data_group ==> %.4s\n" \ "num_bytes_data_group ==> %.4s\n" \ "just_order_samples ==> %.4s\n" \ "num_sar_channels ==> %.4s\n" \ "num_lines_data_set ==> %.8s\n" \ "num_left_border_pixels ==> %.4s\n" \ "total_num_data_groups ==> %.8s\n" \ "num_right_border_pixels ==> %.4s\n" \ "num_top_border_lines ==> %.4s\n" \ "num_bottom_border_lines ==> %.4s\n" \ "interleave_indicator ==> %.4s\n" \ "num_physical_records_line ==> %.2s\n" \ "num_physical_records_multi_chan ==> %.2s\n" \ "num_bytes_prefix ==> %.4s\n" \ "num_bytes_SAR_data ==> %.8s\n" \ "num_bytes_suffix ==> %.4s\n" \ "pref_fix_repeat_flag ==> %.4s\n" \ "sample_data_lin_no ==> %.8s\n" \ "SAR_chan_num_loc ==> %.8s\n" \ "time_SAR_data_line ==> %.8s\n" \ "left_fill_count ==> %.8s\n" \ "right_fill_count ==> %.8s\n" \ "pad_pixels ==> %.4s\n" \ "blank_4 ==> %.28s\n" \ "sar_data_line_qual_loc ==> %.8s\n" \ "calib_info_field_loc ==> %.8s\n" \ "gain_values_field_loc ==> %.8s\n" \ "bias_values_field_loc ==> %.8s\n" \ "sar_data_format_code_1 ==> %.28s\n" \ "sar_data_format_code_2 ==> %.4s\n" \ "num_left_fill_bits_pixel ==> %.4s\n" \ "num_right_fill_bits_pixel ==> %.4s\n" \ "max_range_pixel ==> %.8s\n" \ "blank_5 ==> %.15804s\n" #define SARDATA_DESCRIPTOR_RVL_ALOSE(SP) \ (SP)->ascii_ebcdic_flag, (SP)->blank_1, (SP)->format_doc_ID, (SP)->format_control_level, (SP)->file_design_descriptor, \ (SP)->facility_soft_release, (SP)->file_number, (SP)->file_name, (SP)->record_seq_loc_type_flag_1, \ (SP)->record_seq_loc_type_flag_2, (SP)->sequence_number_loc, (SP)->record_code_loc_flag, (SP)->record_code_loc, \ (SP)->record_code_field_length, (SP)->record_length_loc_flag, (SP)->record_length_loc, (SP)->record_length_field_length, \ (SP)->blank_2, (SP)->number_sar_data_records, (SP)->sar_data_record_length, (SP)->blank_3, (SP)->num_bits_sample, \ (SP)->num_sample_data_group, (SP)->num_bytes_data_group, (SP)->just_order_samples, (SP)->num_sar_channels, \ (SP)->num_lines_data_set, (SP)->num_left_border_pixels, (SP)->total_num_data_groups, (SP)->num_right_border_pixels, \ (SP)->num_top_border_lines, (SP)->num_bottom_border_lines, (SP)->interleave_indicator, (SP)->num_physical_records_line, \ (SP)->num_physical_records_multi_chan, (SP)->num_bytes_prefix, (SP)->num_bytes_SAR_data, (SP)->num_bytes_suffix, \ (SP)->pref_fix_repeat_flag, (SP)->sample_data_lin_no, (SP)->SAR_chan_num_loc, (SP)->time_SAR_data_line, \ (SP)->left_fill_count, (SP)->right_fill_count, (SP)->pad_pixels, (SP)->blank_4, (SP)->sar_data_line_qual_loc, \ (SP)->calib_info_field_loc, (SP)->gain_values_field_loc, (SP)->bias_values_field_loc, (SP)->sar_data_format_code_1, \ (SP)->sar_data_format_code_2, (SP)->num_left_fill_bits_pixel, (SP)->num_right_fill_bits_pixel, (SP)->max_range_pixel, \ (SP)->blank_5 struct sardata_info_ALOSE { int sequence_number; char subtype[4]; int record_length; int data_line_number; int data_record_index; int n_left_fill_pixels; int n_data_pixels; int n_right_fill_pixels; int sensor_update_flag; int sensor_acquisition_year; int sensor_acquisition_DOY; int sensor_acquisition_msecs_day; short channel_indicator; short channel_code; short transmit_polarization; short receive_polarization; int PRF; int scan_ID; short onboard_range_compress; short chirp_type; int chirp_length; int chirp_constant_coeff; int chirp_linear_coeff; int chirp_quad_coeff; char spare1[4]; char spare2[4]; int receiver_gain; int nought_line_flag; int elec_antenna_elevation_angle; int mech_antenna_elevation_angle; int elec_antenna_squint_angle; int mech_antenna_squint_angle; int slant_range; int data_record_window_position; char spare3[4]; short platform_update_flag; int platform_latitude; int platform_longitude; int platform_altitude; int platform_ground_speed; int platform_velocity_x; int platform_velocity_y; int platform_velocity_z; int platform_acc_x; int platform_acc_y; int platform_acc_z; int platform_track_angle_1; int platform_track_angle_2; int platform_pitch_angle; int platform_roll_angle; int platform_yaw_angle; /* char blank1[92]; */ /* restec format change - bytof */ /* int frame_counter; */ /* restec format change - bytof */ char PALSAR_aux_data[100]; /* char blank2[24]; */ /* restec format change - bytof */ }; #define SARDATA__WCS_ALOSE \ "*********** SAR DATA DESCRIPTOR**********\n" \ "sequence_number ==> %d\n" \ "subtype ==> %.4s\n" \ "record_length ==> %d\n" \ "data_line_number ==> %d\n" \ "data_record_index ==> %d\n" \ "n_left_fill_pixels ==> %d\n" \ "n_data_pixels ==> %d\n" \ "n_right_fill_pixels ==> %d\n" \ "sensor_update_flag ==> %d\n" \ "sensor_acquisition_year ==> %d\n" \ "sensor_acquisition_DOY ==> %d\n" \ "sensor_acquisition_msecs_day ==> %d\n" \ "channel_indicator ==> %d\n" \ "channel_code ==> %d\n" \ "transmit_polarization ==> %d\n" \ "receive_polarization ==> %d\n" \ "PRF ==> %d\n" \ "scan_ID ==> %d\n" \ "onboard_range_compress ==> %d\n" \ "chirp_type ==> %d\n" \ "chirp_length ==> %d\n" \ "chirp_constant_coeff ==> %d\n" \ "chirp_linear_coeff ==> %d\n" \ "chirp_quad_coeff ==> %d\n" \ "receiver_gain ==> %d\n" \ "nought_line_flag ==> %d\n" \ "elec_antenna_elevation_angle ==> %d\n" \ "mech_antenna_elevation_angle ==> %d\n" \ "elec_antenna_squint_angle ==> %d\n" \ "mech_antenna_squint_angle ==> %d\n" \ "slant_range ==> %d\n" \ "data_record_window_position ==> %d\n" \ "platform_update_flag ==> %d\n" \ "platform_latitude ==> %d\n" \ "platform_longitude ==> %d\n" \ "platform_altitude ==> %d\n" \ "platform_ground_speed ==> %d\n" \ "platform_velocity_x ==> %d\n" \ "platform_velocity_y ==> %d\n" \ "platform_velocity_z ==> %d\n" \ "platform_acc_x ==> %d\n" \ "platform_acc_y ==> %d\n" \ "platform_acc_z ==> %d\n" \ "platform_track_angle_1 ==> %d\n" \ "platform_track_angle_2 ==> %d\n" \ "platform_pitch_angle ==> %d\n" \ "platform_roll_angle ==> %d\n" \ "platform_yaw_angle ==> %d\n" /* restec format change - bytof */ /* "frame_counter ==> %d\n" */ /* restec format change - bytof */ #define SARDATA_RVL_ALOSE(SP) \ (SP).sequence_number, (SP).subtype, (SP).record_length, (SP).data_line_number, (SP).data_record_index, \ (SP).n_left_fill_pixels, (SP).n_data_pixels, (SP).n_right_fill_pixels, (SP).sensor_update_flag, \ (SP).sensor_acquisition_year, (SP).sensor_acquisition_DOY, (SP).sensor_acquisition_msecs_day, (SP).channel_indicator, \ (SP).channel_code, (SP).transmit_polarization, (SP).receive_polarization, (SP).PRF, (SP).scan_ID, \ (SP).onboard_range_compress, (SP).chirp_type, (SP).chirp_length, (SP).chirp_constant_coeff, (SP).chirp_linear_coeff, \ (SP).chirp_quad_coeff, (SP).receiver_gain, (SP).nought_line_flag, (SP).elec_antenna_elevation_angle, \ (SP).mech_antenna_elevation_angle, (SP).elec_antenna_squint_angle, (SP).mech_antenna_squint_angle, (SP).slant_range, \ (SP).data_record_window_position, (SP).platform_update_flag, (SP).platform_latitude, (SP).platform_longitude, \ (SP).platform_altitude, (SP).platform_ground_speed, (SP).platform_velocity_x, (SP).platform_velocity_y, \ (SP).platform_velocity_z, (SP).platform_acc_x, (SP).platform_acc_y, (SP).platform_acc_z, (SP).platform_track_angle_1, \ (SP).platform_track_angle_2, (SP).platform_pitch_angle, (SP).platform_roll_angle, \ (SP).platform_yaw_angle /* restec format change - bytof */ /* (SP).frame_counter */ /* restec format change - bytof */ GMTSAR_V5.7/preproc/ALOS_preproc/include/image_sio.h000644 015705 000000 00000013162 13505462014 023236 0ustar00sandwellwheel000000 000000 /* taken from soi.h */ #include #include #include #include #include #include #include #define SOL 299792456.0 #define PI 3.1415926535897932 #define PI2 6.2831853071795864 #define I2MAX 32767.0 #define I2SCALE 4.e6 #define TRUE 1 #define FALSE 0 #define RW 0666 #define MULT_FACT 1000.0 #define sgn(A) ((A) >= 0.0 ? 1.0 : -1.0) #define clipi2(A) (((A) > I2MAX) ? I2MAX : (((A) < -I2MAX) ? -I2MAX : A)) #define nint(x) (int)rint(x) #define ERS1 1 #define ERS2 2 #define RSAT 3 #define ENVS 4 #define ALOS 5 #define EXIT_FLAG 1 #define paka(p) \ { \ perror((p)); \ exit(EXIT_FLAG); \ } #define MALLOC(p, s) \ if (((p) = malloc(s)) == NULL) { \ paka("error: malloc() "); \ } #define NULL_DATA 15 #define NULL_INT -99999 #define NULL_DOUBLE -99999.9999 #define NULL_CHAR "XXXXXXXX" struct PRM { char input_file[256]; char SLC_file[256]; char out_amp_file[256]; char out_data_file[256]; char deskew[8]; char iqflip[8]; char offset_video[8]; char srm[8]; char ref_file[128]; char led_file[128]; char orbdir[8]; /* orbit direction A or D (ASCEND or DESCEND) - added by RJM*/ char lookdir[8]; /* look direction R or L (RIGHT or LEFT) */ char dtype[8]; /* SLC data type a-SCOMPLEX integer complex, c-FCOMPLEX float complex */ char date[16]; /* yymmdd format - skip first two digits of year - added by RJM*/ int debug_flag; int bytes_per_line; int good_bytes; int first_line; int num_patches; int first_sample; int num_valid_az; int st_rng_bin; int num_rng_bins; int chirp_ext; int nlooks; int rshift; int ashift; int fdc_ystrt; int fdc_strt; int rec_start; int rec_stop; int SC_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS */ int ref_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS */ int nrows; int num_lines; int SLC_format; /* 1 => complex ints (2 bytes) 2 => complex floats (4 bytes) */ double SC_clock_start; /* YYDDD.DDDD */ double SC_clock_stop; /* YYDDD.DDDD */ double icu_start; /* onboard clock counter */ double clock_start; /* DDD.DDDDDDDD - same as SC_clock_start but no YY so more precision */ double clock_stop; /* DDD.DDDDDDDD - same as SC_clock_stop but no YY so more precision */ double caltone; double RE; /*local earth eadius */ double rc; /* polar radius */ double ra; /* equatorial radius */ double vel; /* Equivalent SC velocity */ double ht; /* (SC_radius - RE) center */ double ht_start; /* (SC_radius - RE) start */ double ht_end; /* (SC_radius - RE) end */ double near_range; double far_range; double prf; double xmi; double xmq; double az_res; double fs; double chirp_slope; double pulsedur; double lambda; double rhww; double pctbw; double pctbwaz; double fd1; double fdd1; double fddd1; double delr; /* added RJM */ double yaw; /* added RJM 12/07*/ double SLC_scale; /* added XT 01/14 */ double sub_int_r; double sub_int_a; double sub_double; double stretch_r; double stretch_a; double a_stretch_r; double a_stretch_a; double baseline_start; double baseline_center; double baseline_end; double alpha_start; double alpha_center; double alpha_end; double bpara; /* parallel baseline - added by RJM */ double bperp; /* perpendicular baseline - added by RJM */ }; /* offset_video off_vid chirp_ext nextend ------------------------------- scnd_rng_mig srm Flip_iq iqflip reference_file ref_file rng_spec_wgt rhww rm_rng_band pctbw rm_az_band pctbwaz rng_samp_rate fs good_bytes_per_line good_bytes earth_radius RE SC_vel vel SC_height ht SC_height_start ht_start SC_height_end ht_end PRF prf I_mean xmi Q_mean xmq pulse_dur pulsedur radar_wavelength lambda rng_spec_wgt rhww */ int verbose; /* controls minimal level of output */ int debug; /* more output */ int roi; /* more output */ int swap; /* whether to swap bytes */ int quad_pol; /* quad polarization data */ int ALOS_format; /* AUIG: ALOS_format = 0 */ /* ERSDAC: ALOS_format = 1 */ /* ALOS2: ALOS_format =2 */ int force_slope; /* whether to set the slope */ int dopp; /* whether to calculate doppler */ int quiet_flag; /* reduce output */ int SAR_mode; /* 0 => high-res */ /* 1 => wide obs */ /* 2 => polarimetry */ /* from ALOS Product Format 3-2 */ int prefix_off; /* offset needed for ALOS-2 prefix size */ double forced_slope; /* value to set chirp_slope to */ double tbias; /* time bias for clock bias */ double rbias; /* range bias for near range corr */ double slc_fact; /* factor to convert float to int slc */ GMTSAR_V5.7/preproc/ALOS_preproc/include/sarleader_fdr.h000644 015705 000000 00000033102 13505462014 024073 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define SARLEADER_FDR_BINARY_WCS \ "*********** SAR FDR BINARY **********\n" \ "record_seq_no ==> %1d\n" \ "record_subtype_code1 ==> %1x\n" \ "record_type_code1 ==> %1x\n" \ "record_subtype_code2 ==> %1x\n" \ "record_subtype_code3 ==> %1x\n" \ "record_length ==> %1d\n\n" #define SARLEADER_FDR_BINARY_RVL(SP) \ (SP)->record_seq_no, (SP)->record_subtype_code1, (SP)->record_type_code1, (SP)->record_subtype_code2, \ (SP)->record_subtype_code3, (SP)->record_length struct sarleader_binary { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; #define SARLEADER_FDR_FIXSEG_RCS "%2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c" #define SARLEADER_FDR_FIXSEG_RVL(SP) \ (SP)->A_E_flag, (SP)->blank_2, (SP)->for_con_doc, (SP)->for_con_doc_rev_level, (SP)->file_des_rev_level, (SP)->softw_rel, \ (SP)->file_number, (SP)->file_name, (SP)->rec_seq_loc_type_flag, (SP)->seq_number_loc, (SP)->seq_number_field_length, \ (SP)->rec_code_loc_type_flag, (SP)->rec_code_loc, (SP)->rec_code_field_length, (SP)->rec_len_loc_type_flag, \ (SP)->rec_len_loc, (SP)->rec_len_field_length, (SP)->reserved_4, (SP)->reserved_segment struct sarleader_fdr_fixseg { char A_E_flag[2]; /* 13 */ char blank_2[2]; /* 15 */ char for_con_doc[12]; /* 17 */ char for_con_doc_rev_level[2]; /* 29 */ char file_des_rev_level[2]; /* 31 */ char softw_rel[12]; /* 33 */ char file_number[4]; /* 45 */ char file_name[16]; /* 49 */ char rec_seq_loc_type_flag[4]; /* 65 */ char seq_number_loc[8]; /* 69 */ char seq_number_field_length[4]; /* 77 */ char rec_code_loc_type_flag[4]; /* 81 */ char rec_code_loc[8]; /* 85 */ char rec_code_field_length[4]; /* 93 */ char rec_len_loc_type_flag[4]; /* 97 */ char rec_len_loc[8]; /* 101 */ char rec_len_field_length[4]; /* 109 */ char reserved_4[4]; /* 113 */ char reserved_segment[64]; /* 117 */ }; #define SARLEADER_FDR_VARSEG_RCS \ "%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%" \ "6c%6c%6c%6c%6c%6c%60c%6c%6c%288c" #define SARLEADER_FDR_VARSEG_RVL(SP) \ (SP)->n_data_set_summ_rec, (SP)->data_set_summ_rec_len, (SP)->n_map_projec_rec, (SP)->map_projec_rec_len, \ (SP)->n_plat_pos_data_rec, (SP)->plat_pos_data_rec_len, (SP)->n_att_data_rec, (SP)->att_data_rec_len, \ (SP)->n_rad_data_rec, (SP)->rad_data_rec_len, (SP)->n_rad_comp_rec, (SP)->rad_comp_rec_len, (SP)->n_data_qua_summ_rec, \ (SP)->data_qua_summ_rec_len, (SP)->n_data_hist_rec, (SP)->data_hist_rec_len, (SP)->n_range_spectra_rec, \ (SP)->range_spectra_rec_len, (SP)->n_DEM_des_rec, (SP)->DEM_des_rec_len, (SP)->n_radar_par_update_rec, \ (SP)->radar_par_update_rec_len, (SP)->n_annotation_data_rec, (SP)->annotation_data_rec_len, (SP)->n_detailed_proc_rec, \ (SP)->detailed_proc_rec_len, (SP)->n_cal_rec, (SP)->cal_rec_len, (SP)->n_GCP_rec, (SP)->GCP_rec_len, (SP)->spare_60, \ (SP)->n_facility_data_rec, (SP)->facility_data_rec_len, (SP)->blanks_288 struct sarleader_fdr_varseg { char n_data_set_summ_rec[6]; /* 181-186 I6*/ char data_set_summ_rec_len[6]; /* 187-192 I6*/ char n_map_projec_rec[6]; /* 193-198 I6*/ char map_projec_rec_len[6]; /* 199-204 I6*/ char n_plat_pos_data_rec[6]; /* 205-210 I6*/ char plat_pos_data_rec_len[6]; /* 211-216 I6*/ char n_att_data_rec[6]; /* 217-222 I6*/ char att_data_rec_len[6]; /* 223-228 I6*/ char n_rad_data_rec[6]; /* 229-234 I6*/ char rad_data_rec_len[6]; /* 235-240 I6*/ char n_rad_comp_rec[6]; /* 241-246 I6*/ char rad_comp_rec_len[6]; /* 247-252 I6*/ char n_data_qua_summ_rec[6]; /* 253-258 I6*/ char data_qua_summ_rec_len[6]; /* 259-264 I6*/ char n_data_hist_rec[6]; /* 265-270 I6*/ char data_hist_rec_len[6]; /* 271-276 I6*/ char n_range_spectra_rec[6]; /* 277-282 I6*/ char range_spectra_rec_len[6]; /* 283-288 I6*/ char n_DEM_des_rec[6]; /* 289-294 I6*/ char DEM_des_rec_len[6]; /* 295-300 I6*/ char n_radar_par_update_rec[6]; /* 301-306 I6*/ char radar_par_update_rec_len[6]; /* 307-312 I6*/ char n_annotation_data_rec[6]; /* 313-318 I6*/ char annotation_data_rec_len[6]; /* 319-324 I6*/ char n_detailed_proc_rec[6]; /* 325-330 I6*/ char detailed_proc_rec_len[6]; /* 331-336 I6*/ char n_cal_rec[6]; /* 337-342 I6*/ char cal_rec_len[6]; /* 343-348 I6*/ char n_GCP_rec[6]; /* 349-354 I6*/ char GCP_rec_len[6]; /* 355-360 I6*/ char spare_60[60]; /* 361-420 I6*/ char n_facility_data_rec[6]; /* 421-426 I6*/ char facility_data_rec_len[6]; /* 427-432 I6*/ char blanks_288[288]; /* 433-720 A80*/ }; #define SARLEADER_FDR_FIXSEG_WCS \ "*********** SAR FDR FIXED SEGMENT ***********\n" \ "A_E_flag ==> %.2s\n" \ "blank_2 ==> %.2s\n" \ "for_con_doc ==> %.12s\n" \ "for_con_doc_rev_level ==> %.2s\n" \ "file_des_rev_level ==> %.2s\n" \ "softw_rel ==> %.12s\n" \ "file_number ==> %.4s\n" \ "file_name ==> %.16s\n" \ "rec_seq_loc_type_flag ==> %.4s\n" \ "seq_number_loc ==> %.8s\n" \ "seq_number_field_length ==> %.4s\n" \ "rec_code_loc_type_flag ==> %.4s\n" \ "rec_code_loc ==> %.8s\n" \ "rec_code_field_length ==> %.4s\n" \ "rec_len_loc_type_flag ==> %.4s\n" \ "rec_len_loc ==> %.8s\n" \ "rec_len_field_length ==> %.4s\n" \ "reserved_4 ==> %.4s\n" \ "reserved_segment ==> %.64s\n\n" #define SARLEADER_FDR_VARSEG_WCS \ "*********** SAR FDR VARIABLE SEG ***********\n" \ "n_data_set_summ_rec ==> %.6s\n" \ "data_set_summ_rec_len ==> %.6s\n" \ "n_map_projec_rec ==> %.6s\n" \ "map_projec_rec_len ==> %.6s\n" \ "n_plat_pos_data_rec ==> %.6s\n" \ "plat_pos_data_rec_len ==> %.6s\n" \ "n_att_data_rec ==> %.6s\n" \ "att_data_rec_len ==> %.6s\n" \ "n_rad_data_rec ==> %.6s\n" \ "rad_data_rec_len ==> %.6s\n" \ "n_rad_comp_rec ==> %.6s\n" \ "rad_comp_rec_len ==> %.6s\n" \ "n_data_qua_summ_rec ==> %.6s\n" \ "data_qua_summ_rec_len ==> %.6s\n" \ "n_data_hist_rec ==> %.6s\n" \ "data_hist_rec_len ==> %.6s\n" \ "n_range_spectra_rec ==> %.6s\n" \ "range_spectra_rec_len ==> %.6s\n" \ "n_DEM_des_rec ==> %.6s\n" \ "DEM_des_rec_len ==> %.6s\n" \ "n_radar_par_update_rec ==> %.6s\n" \ "radar_par_update_rec_len ==> %.6s\n" \ "n_annotation_data_rec ==> %.6s\n" \ "annotation_data_rec_len ==> %.6s\n" \ "n_detailed_proc_rec ==> %.6s\n" \ "detailed_proc_rec_len ==> %.6s\n" \ "n_cal_rec ==> %.6s\n" \ "cal_rec_len ==> %.6s\n" \ "n_GCP_rec ==> %.6s\n" \ "GCP_rec_len ==> %.6s\n" \ "spare_60 ==> %.60s\n" \ "n_facility_data_rec ==> %.6s\n" \ "facility_data_rec_len ==> %.6s\n" \ "blanks_288 ==> %.288s\n\n" GMTSAR_V5.7/preproc/ALOS_preproc/include/data_ALOS.h000644 015705 000000 00000053144 13505462014 023035 0ustar00sandwellwheel000000 000000 /* Structure to read ALOS signal data */ /* Each structure has write control string (WCS) and pointers (RVL) to aid in input and output. RJM June 2007 */ struct ALOS_image { struct sardata_record *rec1; struct sardata_descriptor *dfd; struct sardata_record *rec2; struct sardata_info *sdr; }; /* beginning of short binary segment */ struct sardata_record { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; #define SARDATA_RECORD_WCS \ "*********** SAR FDR BINARY **********\n" \ "record_seq_no ==> %4x\n" \ "record_subtype_code1 ==> %1x\n" \ "record_type_code1 ==> %1x\n" \ "record_subtype_code2 ==> %1x\n" \ "record_subtype_code3 ==> %1x\n" \ "record_length ==> %4x\n\n" #define SARDATA_RECORD_RVL(SP) \ (SP)->record_seq_no, (SP)->record_subtype_code1, (SP)->record_type_code1, (SP)->record_subtype_code2, \ (SP)->record_subtype_code3, (SP)->record_length /* end of short binary segment */ /* beginning of data descriptor segment */ struct sardata_descriptor { char ascii_ebcdic_flag[2]; char blank_1[2]; char format_doc_ID[12]; char format_control_level[2]; char file_design_descriptor[2]; char facility_soft_release[12]; char file_number[4]; char file_name[16]; char record_seq_loc_type_flag_1[4]; char record_seq_loc_type_flag_2[8]; char sequence_number_loc[4]; char record_code_loc_flag[4]; char record_code_loc[8]; char record_code_field_length[4]; char record_length_loc_flag[4]; char record_length_loc[8]; char record_length_field_length[4]; char blank_2[68]; char number_sar_data_records[6]; char sar_data_record_length[6]; char blank_3[24]; char num_bits_sample[4]; char num_sample_data_group[4]; char num_bytes_data_group[4]; char just_order_samples[4]; char num_sar_channels[4]; char num_lines_data_set[8]; char num_left_border_pixels[4]; char total_num_data_groups[8]; char num_right_border_pixels[4]; char num_top_border_lines[4]; char num_bottom_border_lines[4]; char interleave_indicator[4]; char num_physical_records_line[2]; char num_physical_records_multi_chan[2]; char num_bytes_prefix[4]; char num_bytes_SAR_data[8]; char num_bytes_suffix[4]; char pref_fix_repeat_flag[4]; char sample_data_lin_no[8]; char SAR_chan_num_loc[8]; char time_SAR_data_line[8]; char left_fill_count[8]; char right_fill_count[8]; char pad_pixels[4]; char blank_4[28]; char sar_data_line_qual_loc[8]; char calib_info_field_loc[8]; char gain_values_field_loc[8]; char bias_values_field_loc[8]; char sar_data_format_code_1[28]; char sar_data_format_code_2[4]; char num_left_fill_bits_pixel[4]; char num_right_fill_bits_pixel[4]; char max_range_pixel[8]; char blank_5[272]; }; #define SARDATA_DESCRIPTOR_WCS \ "*********** SAR DATA DESCRIPTOR**********\n" \ "ascii_ebcdic_flag ==> %.2s\n" \ "blank_1 ==> %.2s\n" \ "format_doc_ID ==> %.12s\n" \ "format_control_level ==> %.2s\n" \ "file_design_descriptor ==> %.2s\n" \ "facility_soft_release ==> %.12s\n" \ "file_number ==> %.4s\n" \ "file_name ==> %.16s\n" \ "record_seq_loc_type_flag_1 ==> %.4s\n" \ "record_seq_loc_type_flag_2 ==> %.8s\n" \ "sequence_number_loc ==> %.4s\n" \ "record_code_loc_flag ==> %.4s\n" \ "record_code_loc ==> %.8s\n" \ "record_code_field_length ==> %.4s\n" \ "record_length_loc_flag ==> %.4s\n" \ "record_length_loc ==> %.8s\n" \ "record_length_field_length ==> %.4s\n" \ "blank_2 ==> %.68s\n" \ "number_sar_data_records ==> %.6s\n" \ "sar_data_record_length ==> %.6s\n" \ "blank_3 ==> %.24s\n" \ "num_bits_sample ==> %.4s\n" \ "num_sample_data_group ==> %.4s\n" \ "num_bytes_data_group ==> %.4s\n" \ "just_order_samples ==> %.4s\n" \ "num_sar_channels ==> %.4s\n" \ "num_lines_data_set ==> %.8s\n" \ "num_left_border_pixels ==> %.4s\n" \ "total_num_data_groups ==> %.8s\n" \ "num_right_border_pixels ==> %.4s\n" \ "num_top_border_lines ==> %.4s\n" \ "num_bottom_border_lines ==> %.4s\n" \ "interleave_indicator ==> %.4s\n" \ "num_physical_records_line ==> %.2s\n" \ "num_physical_records_multi_chan ==> %.2s\n" \ "num_bytes_prefix ==> %.4s\n" \ "num_bytes_SAR_data ==> %.8s\n" \ "num_bytes_suffix ==> %.4s\n" \ "pref_fix_repeat_flag ==> %.4s\n" \ "sample_data_lin_no ==> %.8s\n" \ "SAR_chan_num_loc ==> %.8s\n" \ "time_SAR_data_line ==> %.8s\n" \ "left_fill_count ==> %.8s\n" \ "right_fill_count ==> %.8s\n" \ "pad_pixels ==> %.4s\n" \ "blank_4 ==> %.28s\n" \ "sar_data_line_qual_loc ==> %.8s\n" \ "calib_info_field_loc ==> %.8s\n" \ "gain_values_field_loc ==> %.8s\n" \ "bias_values_field_loc ==> %.8s\n" \ "sar_data_format_code_1 ==> %.28s\n" \ "sar_data_format_code_2 ==> %.4s\n" \ "num_left_fill_bits_pixel ==> %.4s\n" \ "num_right_fill_bits_pixel ==> %.4s\n" \ "max_range_pixel ==> %.8s\n" \ "blank_5 ==> %.272s\n" #define SARDATA_DESCRIPTOR_RVL(SP) \ (SP)->ascii_ebcdic_flag, (SP)->blank_1, (SP)->format_doc_ID, (SP)->format_control_level, (SP)->file_design_descriptor, \ (SP)->facility_soft_release, (SP)->file_number, (SP)->file_name, (SP)->record_seq_loc_type_flag_1, \ (SP)->record_seq_loc_type_flag_2, (SP)->sequence_number_loc, (SP)->record_code_loc_flag, (SP)->record_code_loc, \ (SP)->record_code_field_length, (SP)->record_length_loc_flag, (SP)->record_length_loc, (SP)->record_length_field_length, \ (SP)->blank_2, (SP)->number_sar_data_records, (SP)->sar_data_record_length, (SP)->blank_3, (SP)->num_bits_sample, \ (SP)->num_sample_data_group, (SP)->num_bytes_data_group, (SP)->just_order_samples, (SP)->num_sar_channels, \ (SP)->num_lines_data_set, (SP)->num_left_border_pixels, (SP)->total_num_data_groups, (SP)->num_right_border_pixels, \ (SP)->num_top_border_lines, (SP)->num_bottom_border_lines, (SP)->interleave_indicator, (SP)->num_physical_records_line, \ (SP)->num_physical_records_multi_chan, (SP)->num_bytes_prefix, (SP)->num_bytes_SAR_data, (SP)->num_bytes_suffix, \ (SP)->pref_fix_repeat_flag, (SP)->sample_data_lin_no, (SP)->SAR_chan_num_loc, (SP)->time_SAR_data_line, \ (SP)->left_fill_count, (SP)->right_fill_count, (SP)->pad_pixels, (SP)->blank_4, (SP)->sar_data_line_qual_loc, \ (SP)->calib_info_field_loc, (SP)->gain_values_field_loc, (SP)->bias_values_field_loc, (SP)->sar_data_format_code_1, \ (SP)->sar_data_format_code_2, (SP)->num_left_fill_bits_pixel, (SP)->num_right_fill_bits_pixel, (SP)->max_range_pixel, \ (SP)->blank_5 struct sardata_info { int sequence_number; char subtype[4]; int record_length; int data_line_number; int data_record_index; int n_left_fill_pixels; int n_data_pixels; int n_right_fill_pixels; int sensor_update_flag; int sensor_acquisition_year; int sensor_acquisition_DOY; int sensor_acquisition_msecs_day; short channel_indicator; short channel_code; short transmit_polarization; short receive_polarization; int PRF; int scan_ID; short onboard_range_compress; short chirp_type; int chirp_length; int chirp_constant_coeff; int chirp_linear_coeff; int chirp_quad_coeff; char spare1[4]; char spare2[4]; int receiver_gain; int nought_line_flag; int elec_antenna_elevation_angle; int mech_antenna_elevation_angle; int elec_antenna_squint_angle; int mech_antenna_squint_angle; int slant_range; int data_record_window_position; char spare3[4]; short platform_update_flag; int platform_latitude; int platform_longitude; int platform_altitude; int platform_ground_speed; int platform_velocity_x; int platform_velocity_y; int platform_velocity_z; int platform_acc_x; int platform_acc_y; int platform_acc_z; int platform_track_angle_1; int platform_track_angle_2; int platform_pitch_angle; int platform_roll_angle; int platform_yaw_angle; char blank1[92]; int frame_counter; char PALSAR_aux_data[100]; char blank2[24]; /* char blank3[132]; more blanks needed for ALOS2 data but not ALOS1 * data */ }; #define SARDATA__WCS \ "*********** SAR DATA DESCRIPTOR**********\n" \ "sequence_number ==> %d\n" \ "subtype ==> %.4s\n" \ "record_length ==> %d\n" \ "data_line_number ==> %d\n" \ "data_record_index ==> %d\n" \ "n_left_fill_pixels ==> %d\n" \ "n_data_pixels ==> %d\n" \ "n_right_fill_pixels ==> %d\n" \ "sensor_update_flag ==> %d\n" \ "sensor_acquisition_year ==> %d\n" \ "sensor_acquisition_DOY ==> %d\n" \ "sensor_acquisition_msecs_day ==> %d\n" \ "channel_indicator ==> %d\n" \ "channel_code ==> %d\n" \ "transmit_polarization ==> %d\n" \ "receive_polarization ==> %d\n" \ "PRF ==> %d\n" \ "scan_ID ==> %d\n" \ "onboard_range_compress ==> %d\n" \ "chirp_type ==> %d\n" \ "chirp_length ==> %d\n" \ "chirp_constant_coeff ==> %d\n" \ "chirp_linear_coeff ==> %d\n" \ "chirp_quad_coeff ==> %d\n" \ "receiver_gain ==> %d\n" \ "nought_line_flag ==> %d\n" \ "elec_antenna_elevation_angle ==> %d\n" \ "mech_antenna_elevation_angle ==> %d\n" \ "elec_antenna_squint_angle ==> %d\n" \ "mech_antenna_squint_angle ==> %d\n" \ "slant_range ==> %d\n" \ "data_record_window_position ==> %d\n" \ "platform_update_flag ==> %d\n" \ "platform_latitude ==> %d\n" \ "platform_longitude ==> %d\n" \ "platform_altitude ==> %d\n" \ "platform_ground_speed ==> %d\n" \ "platform_velocity_x ==> %d\n" \ "platform_velocity_y ==> %d\n" \ "platform_velocity_z ==> %d\n" \ "platform_acc_x ==> %d\n" \ "platform_acc_y ==> %d\n" \ "platform_acc_z ==> %d\n" \ "platform_track_angle_1 ==> %d\n" \ "platform_track_angle_2 ==> %d\n" \ "platform_pitch_angle ==> %d\n" \ "platform_roll_angle ==> %d\n" \ "platform_yaw_angle ==> %d\n" \ "frame_counter ==> %d\n" #define SARDATA_RVL(SP) \ (SP).sequence_number, (SP).subtype, (SP).record_length, (SP).data_line_number, (SP).data_record_index, \ (SP).n_left_fill_pixels, (SP).n_data_pixels, (SP).n_right_fill_pixels, (SP).sensor_update_flag, \ (SP).sensor_acquisition_year, (SP).sensor_acquisition_DOY, (SP).sensor_acquisition_msecs_day, (SP).channel_indicator, \ (SP).channel_code, (SP).transmit_polarization, (SP).receive_polarization, (SP).PRF, (SP).scan_ID, \ (SP).onboard_range_compress, (SP).chirp_type, (SP).chirp_length, (SP).chirp_constant_coeff, (SP).chirp_linear_coeff, \ (SP).chirp_quad_coeff, (SP).receiver_gain, (SP).nought_line_flag, (SP).elec_antenna_elevation_angle, \ (SP).mech_antenna_elevation_angle, (SP).elec_antenna_squint_angle, (SP).mech_antenna_squint_angle, (SP).slant_range, \ (SP).data_record_window_position, (SP).platform_update_flag, (SP).platform_latitude, (SP).platform_longitude, \ (SP).platform_altitude, (SP).platform_ground_speed, (SP).platform_velocity_x, (SP).platform_velocity_y, \ (SP).platform_velocity_z, (SP).platform_acc_x, (SP).platform_acc_y, (SP).platform_acc_z, (SP).platform_track_angle_1, \ (SP).platform_track_angle_2, (SP).platform_pitch_angle, (SP).platform_roll_angle, (SP).platform_yaw_angle, \ (SP).frame_counter GMTSAR_V5.7/preproc/ALOS_preproc/include/sarleader_ALOS.h000644 015705 000000 00000110703 13505462014 024061 0ustar00sandwellwheel000000 000000 /* provides structures to read ALOS SAR tapes */ /* reall just a CEOS reader */ /* include files were modified from the rceos.c programs written by C. Tomassini & F. Lorenna other format information from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada Table 6.1.2.2 "SARLEADER" FILE POINTER RECORD CONTENTS page 6. R. J. Mellors July 1997, IGPP-SIO from esa annex A (Document ER-IS-EPO-GS-5902.I) Issue 2.1.1 Paul F. Jamason 25-FEB-1997, IGPP-SIO Modified to read ALOS format Product Format Description (PALSAR Level 1.0) R. J. Mellors June 2007, SDSU 6/1/07 SARLEADER_DSS_RCS_ALOS 7th line changed to "%4c%4c%16c%16c%16c%16c%16c"\ (2 16c at end rather than 1 32c) */ /* ALOS raw data set summary record format */ #define SARLEADER_DSS_RCS_ALOS \ "%4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c" \ "%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c" \ "%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c" \ "%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c" \ "%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c" \ "%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c" \ "%4c%4c%16c%16c%16c%16c%16c" \ "%4c%8c%8c%8c%8c%4c%8c%16c%4c%4c%16c%4c%28c%120c%8c%8c%2048c%26c" /* ALOS raw data set summary corresponding log file output */ #define SARLEADER_DSS_RVL_ALOS(SP) \ (SP)->dss_rec_seq_num, (SP)->chan_ind, (SP)->reserved1, (SP)->scene_number, (SP)->input_scene_center_time, (SP)->spare1, \ (SP)->center_lat, (SP)->center_long, (SP)->center_heading, (SP)->ellipsoid_designator, (SP)->ellipsoid_semimajor_axis, \ (SP)->ellipsoid_semiminor_axis, (SP)->earth_constant, (SP)->spare2, (SP)->ellipsoid_j2, (SP)->ellipsoid_j3, \ (SP)->ellipsoid_j4, (SP)->spare, (SP)->reserved_new, (SP)->scene_centre_line_number, (SP)->scene_centre_pixel_number, \ (SP)->scene_length, (SP)->scene_width, (SP)->spare3, (SP)->nchan, (SP)->spare4, (SP)->mission_identifier, \ (SP)->sensor_id_and_mode, (SP)->orbit_number, (SP)->lat_nadir_center, (SP)->long_nadir_center, \ (SP)->heading_nadir_center, (SP)->clock_angle, (SP)->incidence_angle_center, (SP)->radar_freq, (SP)->radar_wavelength, \ (SP)->motion_compensation, (SP)->range_pulse_code_specifier, (SP)->range_pulse_amplitude_const, \ (SP)->range_pulse_amplitude_lin, (SP)->range_pulse_amplitude_quad, (SP)->range_pulse_amplitude_cube, \ (SP)->range_pulse_amplitude_quart, (SP)->range_pulse_phase_const, (SP)->range_pulse_phase_lin, \ (SP)->range_pulse_phase_quad, (SP)->range_pulse_phase_cube, (SP)->range_pulse_phase_quart, (SP)->chirp_extraction_index, \ (SP)->spare5, (SP)->sampling_rate, (SP)->range_gate_early_edge_start_image, (SP)->range_pulse_length, (SP)->reserved2, \ (SP)->range_compressed_flag, (SP)->reserved3, (SP)->quantisation_in_bits, (SP)->quantizer_descriptor, (SP)->dc_bias_i, \ (SP)->dc_bias_q, (SP)->gain_imbalance, (SP)->spare6, (SP)->reserved4, (SP)->antenna_mech_bor, (SP)->reserved5, \ (SP)->nominal_prf, (SP)->reserved6, (SP)->satelite_encoded_binary_time, (SP)->satelite_clock_time, \ (SP)->satelite_clock_increment, (SP)->spare7, (SP)->processing_facility_identifier, (SP)->processing_system_id, \ (SP)->processing_version_id, (SP)->reserved7, (SP)->product_type_id, (SP)->alg_id, (SP)->nlooks_az, \ (SP)->neff_looks_range, (SP)->bandwidth_look_az, (SP)->bandwidth_look_range, (SP)->total_look_bandwidth_az, \ (SP)->total_look_bandwidth_range, (SP)->w_func_designator_az, (SP)->w_func_designator_range, (SP)->data_input_source, \ (SP)->nom_res_3db_range, (SP)->nom_res_az, (SP)->reserved8, (SP)->a_track_dop_freq_const_early_image, \ (SP)->a_track_dop_freq_lin_early_image, (SP)->a_track_dop_freq_quad_early_image, (SP)->spare8, \ (SP)->c_track_dop_freq_const_early_image, (SP)->c_track_dop_freq_lin_early_image, \ (SP)->c_track_dop_freq_quad_early_image, (SP)->time_direction_along_pixel, (SP)->time_direction_along_line, \ (SP)->a_track_dop_freq_rate_const_early_image, (SP)->a_track_dop_freq_rate_lin_early_image, \ (SP)->a_track_dop_freq_rate_quad_early_image, (SP)->spare9, (SP)->c_track_dop_freq_rate_const_early_image, \ (SP)->c_track_dop_freq_rate_lin_early_image, (SP)->c_track_dop_freq_rate_quad_early_image, (SP)->spare10, \ (SP)->line_content_indicator, (SP)->clut_lock_flag, (SP)->autofocussing_flag, (SP)->line_spacing, \ (SP)->pixel_spacing_range, (SP)->range_compression_designator, (SP)->spare11, (SP)->spare12, \ (SP)->calibration_data_indicator, (SP)->start_line_upper_image, (SP)->stop_line_upper_image, \ (SP)->start_line_bottom_image, (SP)->stop_line_bottom_image, (SP)->PRF_switch, (SP)->PRF_switch_line, (SP)->spare13, \ (SP)->yaw_steering_mode, (SP)->parameter_table, (SP)->nom_offnadir_angle, (SP)->antenna_beam_number, (SP)->spare14, \ (SP)->spare15, (SP)->num_anno_points, (SP)->spare16, (SP)->image_annotation, (SP)->spare17 struct sarleader_dss_ALOS { char dss_rec_seq_num[4]; /*dss record sequence number (1)*/ char chan_ind[4]; /*sar channel indicator (1)*/ char reserved1[16]; /* scene identifier*/ char scene_number[32]; char input_scene_center_time[32]; char spare1[16]; char center_lat[16]; char center_long[16]; char center_heading[16]; char ellipsoid_designator[16]; char ellipsoid_semimajor_axis[16]; char ellipsoid_semiminor_axis[16]; char earth_constant[16]; char spare2[16]; char ellipsoid_j2[16]; char ellipsoid_j3[16]; char ellipsoid_j4[16]; char spare[16]; char reserved_new[16]; char scene_centre_line_number[8]; char scene_centre_pixel_number[8]; char scene_length[16]; char scene_width[16]; char spare3[16]; char nchan[4]; char spare4[4]; char mission_identifier[16]; char sensor_id_and_mode[32]; char orbit_number[8]; char lat_nadir_center[8]; char long_nadir_center[8]; char heading_nadir_center[8]; char clock_angle[8]; char incidence_angle_center[8]; char radar_freq[8]; char radar_wavelength[16]; char motion_compensation[2]; char range_pulse_code_specifier[16]; char range_pulse_amplitude_const[16]; char range_pulse_amplitude_lin[16]; char range_pulse_amplitude_quad[16]; char range_pulse_amplitude_cube[16]; char range_pulse_amplitude_quart[16]; char range_pulse_phase_const[16]; char range_pulse_phase_lin[16]; char range_pulse_phase_quad[16]; char range_pulse_phase_cube[16]; char range_pulse_phase_quart[16]; char chirp_extraction_index[8]; char spare5[8]; char sampling_rate[16]; char range_gate_early_edge_start_image[16]; char range_pulse_length[16]; char reserved2[4]; char range_compressed_flag[4]; char reserved3[32]; char quantisation_in_bits[8]; char quantizer_descriptor[12]; char dc_bias_i[16]; char dc_bias_q[16]; char gain_imbalance[16]; char spare6[32]; char reserved4[16]; char antenna_mech_bor[16]; char reserved5[4]; char nominal_prf[16]; char reserved6[32]; char satelite_encoded_binary_time[16]; char satelite_clock_time[32]; char satelite_clock_increment[8]; char spare7[8]; char processing_facility_identifier[16]; char processing_system_id[8]; char processing_version_id[8]; char reserved7[32]; char product_type_id[32]; char alg_id[32]; char nlooks_az[16]; char neff_looks_range[16]; char bandwidth_look_az[16]; char bandwidth_look_range[16]; char total_look_bandwidth_az[16]; char total_look_bandwidth_range[16]; char w_func_designator_az[32]; char w_func_designator_range[32]; char data_input_source[16]; char nom_res_3db_range[16]; char nom_res_az[16]; char reserved8[32]; char a_track_dop_freq_const_early_image[16]; char a_track_dop_freq_lin_early_image[16]; char a_track_dop_freq_quad_early_image[16]; char spare8[16]; char c_track_dop_freq_const_early_image[16]; char c_track_dop_freq_lin_early_image[16]; char c_track_dop_freq_quad_early_image[16]; char time_direction_along_pixel[8]; char time_direction_along_line[8]; char a_track_dop_freq_rate_const_early_image[16]; char a_track_dop_freq_rate_lin_early_image[16]; char a_track_dop_freq_rate_quad_early_image[16]; char spare9[16]; char c_track_dop_freq_rate_const_early_image[16]; char c_track_dop_freq_rate_lin_early_image[16]; char c_track_dop_freq_rate_quad_early_image[16]; char spare10[16]; char line_content_indicator[8]; char clut_lock_flag[4]; char autofocussing_flag[4]; char line_spacing[16]; char pixel_spacing_range[16]; char range_compression_designator[16]; char spare11[16]; char spare12[16]; char calibration_data_indicator[4]; char start_line_upper_image[8]; char stop_line_upper_image[8]; char start_line_bottom_image[8]; char stop_line_bottom_image[8]; char PRF_switch[4]; char PRF_switch_line[8]; char spare13[16]; char yaw_steering_mode[4]; char parameter_table[4]; char nom_offnadir_angle[16]; char antenna_beam_number[4]; char spare14[28]; char spare15[120]; char num_anno_points[8]; char spare16[8]; char image_annotation[2048]; char spare17[26]; }; #define SARLEADER_DSS_WCS_ALOS \ "*********** DSS RECORD ***********\n" \ "dss_rec_seq_num ==> %.4s\n" \ "chan_ind ==> %.4s\n" \ "reserved1 ==> %.16s\n" \ "scene_number ==> %.32s\n" \ "input_scene_center_time ==> %.32s\n" \ "spare1 ==> %.16s\n" \ "center_lat ==> %.16s\n" \ "center_long ==> %.16s\n" \ "center_heading ==> %.16s\n" \ "ellipsoid_designator ==> %.16s\n" \ "ellipsoid_semimajor_axis ==> %.16s\n" \ "ellipsoid_semiminor_axis ==> %.16s\n" \ "earth_constant ==> %.16s\n" \ "spare2 ==> %.16s\n" \ "ellipsoid_j2 ==> %.16s\n" \ "ellipsoid_j3 ==> %.16s\n" \ "ellipsoid_j4 ==> %.16s\n" \ "spare ==> %.16s\n" \ "reserved_new ==> %.16s\n" \ "scene_centre_line_number ==> %.8s\n" \ "scene_centre_pixel_number ==> %.8s\n" \ "scene_length ==> %.16s\n" \ "scene_width ==> %.16s\n" \ "spare3 ==> %.16s\n" \ "nchan ==> %.4s\n" \ "spare4 ==> %.4s\n" \ "mission_identifier ==> %.16s\n" \ "sensor_id_and_mode ==> %.32s\n" \ "orbit_number ==> %.8s\n" \ "lat_nadir_center ==> %.8s\n" \ "long_nadir_center ==> %.8s\n" \ "heading_nadir_center ==> %.8s\n" \ "clock_angle ==> %.8s\n" \ "incidence_angle_center ==> %.8s\n" \ "radar_freq ==> %.8s\n" \ "radar_wavelength ==> %.16s\n" \ "motion_compensation ==> %.2s\n" \ "range_pulse_code_specifier ==> %.16s\n" \ "range_pulse_amplitude_const ==> %.16s\n" \ "range_pulse_amplitude_lin ==> %.16s\n" \ "range_pulse_amplitude_quad ==> %.16s\n" \ "range_pulse_amplitude_cube ==> %.16s\n" \ "range_pulse_amplitude_quart ==> %.16s\n" \ "range_pulse_phase_const ==> %.16s\n" \ "range_pulse_phase_lin ==> %.16s\n" \ "range_pulse_phase_quad ==> %.16s\n" \ "range_pulse_phase_cube ==> %.16s\n" \ "range_pulse_phase_quart ==> %.16s\n" \ "chirp_extraction_index ==> %.8s\n" \ "spare5 ==> %.8s\n" \ "sampling_rate ==> %.16s\n" \ "range_gate_early_edge_start_image ==> %.16s\n" \ "range_pulse_length ==> %.16s\n" \ "reserved2 ==> %.4s\n" \ "range_compressed_flag ==> %.4s\n" \ "reserved3 ==> %.32s\n" \ "quantisation_in_bits ==> %.8s\n" \ "quantizer_descriptor ==> %.12s\n" \ "dc_bias_i ==> %.16s\n" \ "dc_bias_q ==> %.16s\n" \ "gain_imbalance ==> %.16s\n" \ "spare6 ==> %.32s\n" \ "reserved4 ==> %.16s\n" \ "antenna_mech_bor ==> %.16s\n" \ "reserved5 ==> %.4s\n" \ "nominal_prf ==> %.16s\n" \ "reserved6 ==> %.32s\n" \ "satelite_encoded_binary_time ==> %.16s\n" \ "satelite_clock_time ==> %.32s\n" \ "satelite_clock_increment ==> %.8s\n" \ "spare7 ==> %.8s\n" \ "processing_facility_identifier ==> %.16s\n" \ "processing_system_id ==> %.8s\n" \ "processing_version_id ==> %.8s\n" \ "reserved7 ==> %.32s\n" \ "product_type_id ==> %.32s\n" \ "alg_id ==> %.32s\n" \ "nlooks_az ==> %.16s\n" \ "neff_looks_range ==> %.16s\n" \ "bandwidth_look_az ==> %.16s\n" \ "bandwidth_look_range ==> %.16s\n" \ "total_look_bandwidth_az ==> %.16s\n" \ "total_look_bandwidth_range ==> %.16s\n" \ "w_func_designator_az ==> %.32s\n" \ "w_func_designator_range ==> %.32s\n" \ "data_input_source ==> %.16s\n" \ "nom_res_3db_range ==> %.16s\n" \ "nom_res_az ==> %.16s\n" \ "reserved8 ==> %.32s\n" \ "a_track_dop_freq_const_early_image ==> %.16s\n" \ "a_track_dop_freq_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_quad_early_image ==> %.16s\n" \ "spare8 ==> %.16s\n" \ "c_track_dop_freq_const_early_image ==> %.16s\n" \ "c_track_dop_freq_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_quad_early_image ==> %.16s\n" \ "time_direction_along_pixel ==> %.8s\n" \ "time_direction_along_line ==> %.8s\n" \ "a_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare9 ==> %.16s\n" \ "c_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare10 ==> %.16s\n" \ "line_content_indicator ==> %.8s\n" \ "clut_lock_flag ==> %.4s\n" \ "autofocussing_flag ==> %.4s\n" \ "line_spacing ==> %.16s\n" \ "pixel_spacing_range ==> %.16s\n" \ "range_compression_designator ==> %.16s\n" \ "spare11 ==> %.16s\n" \ "spare12 ==> %.16s\n" \ "calibration_data_indicator ==> %.4s\n" \ "start_line_upper_image ==> %.8s\n" \ "stop_line_upper_image ==> %.8s\n" \ "start_line_bottom_image ==> %.8s\n" \ "stop_line_bottom_image ==> %.8s\n" \ "PRF_switch ==> %.4s\n" \ "PRF_switch_line ==> %.8s\n" \ "spare13 ==> %.16s\n" \ "yaw_steering_mode ==> %.4s\n" \ "parameter_table ==> %.4s\n" \ "nom_offnadir_angle ==> %.16s\n" \ "antenna_beam_number ==> %.4s\n" \ "spare14 ==> %.28s\n" \ "spare15 ==> %.120s\n" \ "num_anno_points ==> %.8s\n" \ "spare16 ==> %.8s\n" \ "image_annotation ==> %.2048s\n" \ "spare17 ==> %.26s\n" /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define PLATFORM_RCS_ALOS \ "%32c%16c%16c%16c%16c%16c%16c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%" \ "16c%16c%16c" #define PLATFORM_RVL_ALOS(SP) \ (SP)->orbital_elements, (SP)->orbital_element_1, (SP)->orbital_element_2, (SP)->orbital_element_3, (SP)->orbital_element_4, \ (SP)->orbital_element_5, (SP)->orbital_element_6, (SP)->num_data_points, (SP)->year_of_data_points, \ (SP)->month_of_data_points, (SP)->day_of_data_points, (SP)->day_of_data_points_in_year, (SP)->sec_of_day_of_data, \ (SP)->data_points_time_gap, (SP)->ref_coord_sys, (SP)->greenwhich_mean_hour_angle, (SP)->a_track_pos_err, \ (SP)->c_track_pos_err, (SP)->radial_pos_err, (SP)->a_track_vel_err, (SP)->c_track_vel_err, (SP)->radial_vel_err /* ALOS stuff added by RJM June 2007 */ struct platform_ALOS { char orbital_elements[32]; char orbital_element_1[16]; char orbital_element_2[16]; char orbital_element_3[16]; char orbital_element_4[16]; char orbital_element_5[16]; char orbital_element_6[16]; char num_data_points[4]; char year_of_data_points[4]; char month_of_data_points[4]; char day_of_data_points[4]; char day_of_data_points_in_year[4]; char sec_of_day_of_data[22]; char data_points_time_gap[22]; char ref_coord_sys[64]; char greenwhich_mean_hour_angle[22]; char a_track_pos_err[16]; char c_track_pos_err[16]; char radial_pos_err[16]; char a_track_vel_err[16]; char c_track_vel_err[16]; char radial_vel_err[16]; }; #define POSITION_VECTOR_RCS_ALOS "%22c%22c%22c%22c%22c%22c" #define POSITION_VECTOR_RVL_ALOS(SP) (SP)->pos_x, (SP)->pos_y, (SP)->pos_z, (SP)->vel_x, (SP)->vel_y, (SP)->vel_z struct position_vector_ALOS { char pos_x[22]; char pos_y[22]; char pos_z[22]; char vel_x[22]; char vel_y[22]; char vel_z[22]; }; #define PLATFORM_WCS_ALOS \ "*********** PLATFORM POSITION VECTOR **********\n" \ "orbital_elements ==> |%.32s|\n" \ "orbital_element_1 ==> |%.16s|\n" \ "orbital_element_2 ==> |%.16s|\n" \ "orbital_element_3 ==> |%.16s|\n" \ "orbital_element_4 ==> |%.16s|\n" \ "orbital_element_5 ==> |%.16s|\n" \ "orbital_element_6 ==> |%.16s|\n" \ "num_data_points ==> |%.4s|\n" \ "year_of_data_points ==> |%.4s|\n" \ "month_of_data_points ==> |%.4s|\n" \ "day_of_data_points ==> |%.4s|\n" \ "day_of_data_points_in_year ==> |%.4s|\n" \ "sec_of_day_of_data ==> |%.22s|\n" \ "data_points_time_gap ==> |%.22s|\n" \ "ref_coord_sys ==> |%.64s|\n" \ "greenwhich_mean_hour_angle ==> |%.22s|\n" \ "a_track_pos_err ==> |%.16s|\n" \ "c_track_pos_err ==> |%.16s|\n" \ "radial_pos_err ==> |%.16s|\n" \ "a_track_vel_err ==> |%.16s|\n" \ "c_track_vel_err ==> |%.16s|\n" \ "radial_vel_err ==> |%.16s|\n" #define POSITION_VECTOR_WCS_ALOS \ "*********** PLATFORM VECTOR **********\n" \ "pos_x ==> %.22s\n" \ "pos_y ==> %.22s\n" \ "pos_z ==> %.22s\n" \ "vel_x ==> %.22s\n" \ "vel_y ==> %.22s\n" \ "vel_z ==> %.22s\n\n" struct attitude_info_ALOS { char num_att_data_points[4]; }; #define ATTITUDE_INFO_RCS_ALOS "%4c" #define ATTITUDE_INFO_WCS_ALOS \ "*********** ATTITUDE INFO **********\n" \ "num_att_data_points ==> |%.4s|\n" #define ATTITUDE_INFO_RVL_ALOS(SP) (SP)->num_att_data_points #define ATTITUDE_DATA_WCS_ALOS \ "*********** ATTITUDE DATA **********\n" \ "day_of_year ==> |%.4s|\n" \ "millisecond_day ==> |%.8s|\n" \ "pitch_data_quality ==> |%.4s|\n" \ "roll_data_quality ==> |%.4s|\n" \ "yaw_data_quality ==> |%.4s|\n" \ "pitch ==> |%.14s|\n" \ "roll ==> |%.14s|\n" \ "yaw ==> |%.14s|\n" \ "pitch_rate_data_quality ==> |%.4s|\n" \ "roll_rate_data_quality ==> |%.4s|\n" \ "yaw_rate_data_quality ==> |%.4s|\n" \ "pitch_rate ==> |%.14s|\n" \ "roll_rate ==> |%.14s|\n" \ "yaw_rate ==> |%.14s|\n" #define ATTITUDE_DATA_RCS_ALOS "%4c%8c%4c%4c%4c%14c%14c%14c%4c%4c%4c%14c%14c%14c" #define ATTITUDE_DATA_RVL_ALOS(SP) \ (SP)->day_of_year, (SP)->millisecond_day, (SP)->pitch_data_quality, (SP)->roll_data_quality, (SP)->yaw_data_quality, \ (SP)->pitch, (SP)->roll, (SP)->yaw, (SP)->pitch_rate_data_quality, (SP)->roll_rate_data_quality, \ (SP)->yaw_rate_data_quality, (SP)->pitch_rate, (SP)->roll_rate, (SP)->yaw_rate struct attitude_data_ALOS { char day_of_year[4]; char millisecond_day[8]; char pitch_data_quality[4]; char roll_data_quality[4]; char yaw_data_quality[4]; char pitch[14]; char roll[14]; char yaw[14]; char pitch_rate_data_quality[4]; char roll_rate_data_quality[4]; char yaw_rate_data_quality[4]; char pitch_rate[14]; char roll_rate[14]; char yaw_rate[14]; }; struct SAR_info { struct sarleader_fdr_fixseg *fixseg; struct sarleader_fdr_varseg *varseg; struct sarleader_dss_ALOS *dss_ALOS; struct platform_ALOS *platform_ALOS; struct position_vector_ALOS *position_ALOS; struct attitude_info_ALOS *attitude_info_ALOS; struct attitude_data_ALOS *attitude_ALOS; }; GMTSAR_V5.7/preproc/ALOS_preproc/include/lib_functions.h000644 015705 000000 00000004021 13505462014 024132 0ustar00sandwellwheel000000 000000 /* include files to define sarleader structure */ #include "data_ALOS.h" #include "data_ALOSE.h" #include "orbit_ALOS.h" #include "sarleader_ALOS.h" #include "sarleader_fdr.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* function prototypes */ void ALOS_ldr_orbit(struct ALOS_ORB *, struct PRM *); int write_ALOS_LED(struct ALOS_ORB *, struct PRM *, char *); void write_orb(FILE *, struct ALOS_ORB *); void calc_height_velocity(struct ALOS_ORB *, struct PRM *, double, double, double *, double *, double *, double *, double *); void calc_dop(struct PRM *); void cfft1d_(int *, fcomplex *, int *); void read_data(fcomplex *, unsigned char *, int, struct PRM *); void null_sio_struct(struct PRM *); void get_sio_struct(FILE *, struct PRM *); void put_sio_struct(struct PRM, FILE *); void get_string(char *, char *, char *, char *); void get_int(char *, char *, char *, int *); void get_double(char *, char *, char *, double *); void hermite_c(double *, double *, double *, int, int, double, double *, int *); void interpolate_ALOS_orbit_slow(struct ALOS_ORB *, double, double *, double *, double *, int *); void interpolate_ALOS_orbit(struct ALOS_ORB *, double *, double *, double *, double, double *, double *, double *, int *); void get_orbit_info(struct ALOS_ORB *, struct SAR_info); void get_attitude_info(struct ALOS_ATT *, int, struct SAR_info); void print_binary_position(struct sarleader_binary *, int, FILE *, FILE *); void read_ALOS_sarleader(FILE *, struct PRM *, struct ALOS_ORB *); void set_ALOS_defaults(struct PRM *); void ALOS_ldr_prm(struct SAR_info, struct PRM *); int is_big_endian_(void); int is_big_endian__(void); void die(char *, char *); void cross3_(double *, double *, double *); void get_seconds(struct PRM, double *, double *); void plh2xyz(double *, double *, double, double); void xyz2plh(double *, double *, double, double); void polyfit(double *, double *, double *, int *, int *); void gauss_jordan(double **, double *, double *, int *); int find_fft_length(int); void rng_expand(fcomplex *, int, fcomplex *, int); GMTSAR_V5.7/preproc/ALOS_preproc/include/orbit_ALOS.h000644 015705 000000 00000001267 13505462014 023242 0ustar00sandwellwheel000000 000000 /* alos_orbit.h */ /* structure to hold orbit and attitude information derived from ALOS L1.0 * LED-file */ #define NA 64 /* number of altitude data points */ #define HDR 1 /* orbit information from header */ #define ODR 2 /* orbit information from Delft */ #define DOR 3 /* orbit information from Doris */ struct ORB_XYZ { double pt; double px; double py; double pz; double vx; double vy; double vz; }; struct ALOS_ORB { int itype; int nd; int iy; int id; double sec; double dsec; double pt0; struct ORB_XYZ *points; }; struct ALOS_ATT { int na; int id[NA]; int msec[NA]; double ap[NA]; double ar[NA]; double ay[NA]; double dp[NA]; double dr[NA]; double dy[NA]; }; GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbs2fbd/Makefile000644 015705 000000 00000000504 13505462014 023270 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_fbs2fbd CSRCS = ALOS_fbs2fbd.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_fbs2fbd/ALOS_fbs2fbd.c000644 015705 000000 00000015114 13505462014 024125 0ustar00sandwellwheel000000 000000 /*************************************************************************** * ALOS_fbs_fbd reads a raw FBS-HH file processed with ALOS_pre_proc and * * downsamples it to FBD-HH bandwidth. The algorithm takes the fft each * * complex range line and zeros in the frequency domain. This is * * possible because the FBS bandwidth is exactly two times the FBD. * * Note that the filtered data may exceed the original data span of * * 0-31 so the numbers are rescaled to lie between 0 and 127 which still * * only one byte of storage. * * The code uses cfft1d which seems to be the standard interface in the * * InSAR community. * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Rob Mellors * * (Scripps Institution of Oceanography) * * Date : 08/04/2007 * ***************************************************************************/ /*************************************************************************** * Modification history: * * 10/02/07 changed the sample lengths from hard wired to computed from PRM* * * * DATE * * * ***************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" void rng_compress(fcomplex *cin, int nffti, fcomplex *cout, int nffto); #define clip127(A) (((A) > 127) ? 127 : (((A) < 0) ? 0 : A)) char *USAGE = "ALOS_FBS2FBD FBS.PRM FBD.PRM \n" " FBS.PRM PRM file for input image in fine beam single " "polarization (FBS 28 MHz) (input) \n" " FBD.PRM PRM file for output image in fine beam " "HH-polarization (FBD 14 MHz) (output) \n"; int main(int argc, char **argv) { FILE *prmfile, *datafile, *prmout, *dataout; unsigned char *indata, *outdata; fcomplex *cin, *cout; float rtest, itest; int i, j, k, np, nffti, nffto, i0, headsize; int ibufsize, obufsize, fbdsamp, fbssamp; size_t n; struct PRM r; if (argc < 3) die(USAGE, ""); /* flags defined in global_flags.h */ verbose = 0; debug = 0; /* fill the struct with default parameters */ null_sio_struct(&r); /* open input PRM file and read the parameters */ if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); get_sio_struct(prmfile, &r); /* open input raw data file */ if ((datafile = fopen(r.input_file, "r")) == NULL) die("Can't open ", r.input_file); /* open output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); /* assemble the output filename and open for writing */ sscanf(argv[2], "%s", r.input_file); r.input_file[strlen(argv[2]) - 4] = 0; strcat(r.input_file, ".raw"); /* open output file for single look complex image */ if ((dataout = fopen(r.input_file, "w")) == NULL) die("Can't open ", r.input_file); /* compute the sizes for the input and output buffers and allocate the memory */ ibufsize = r.bytes_per_line; if ((indata = (unsigned char *)malloc(ibufsize * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } fbssamp = r.good_bytes / 2 - r.first_sample; fbdsamp = fbssamp / 2; headsize = 2 * r.first_sample; obufsize = 2 * (fbdsamp + r.first_sample); if ((outdata = (unsigned char *)malloc(obufsize * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for output outdata.\n"); exit(-1); } /* find best length of fft (use power of two) for both input and output */ nffti = find_fft_length(fbssamp); nffto = find_fft_length(fbdsamp); if (debug) fprintf(stderr, " nffti %d nffto %d \n", nffti, nffto); /* allocate the memory for the complex arrays */ if ((cin = (fcomplex *)malloc(nffti * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbd \n"); exit(-1); } if ((cout = (fcomplex *)malloc(nffto * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbs \n"); exit(-1); } /* read and write the input and output raw files */ for (k = 0; k < r.num_lines; k++) { fread((void *)indata, sizeof(unsigned char), ibufsize, datafile); fwrite((void *)indata, sizeof(unsigned char), headsize, dataout); /* fill the complex array with complex indata */ for (j = 0; j < nffti; j++) { i = j + r.first_sample; if ((j < fbssamp) && (((int)indata[2 * i]) != NULL_DATA) && (((int)indata[2 * i + 1]) != NULL_DATA)) { cin[j].r = (float)(indata[2 * i] - r.xmi); cin[j].i = (float)(indata[2 * i + 1] - r.xmq); } else { cin[j].r = 0.0; cin[j].i = 0.0; } } /* interpolate from fbs to fbd */ rng_compress(cin, nffti, cout, nffto); /* convert the complex back to bytes */ for (j = 0; j < obufsize / 2; j++) { i = j + r.first_sample; /* increase dynamic range by 2 and set the mean value to 63.5 */ rtest = rintf(2. * cout[j].r + 63.5); itest = rintf(2. * cout[j].i + 63.5); /* sometimes the range can exceed 0-127 so clip the numbers to be in the correct range */ outdata[2 * i] = (unsigned char)clip127(rtest); outdata[2 * i + 1] = (unsigned char)clip127(itest); } fwrite(outdata + headsize, sizeof(unsigned char), obufsize - headsize, dataout); } /* compute the changes to the output PRM-file */ r.xmi = 63.5; r.xmq = 63.5; r.SC_identity = 5; r.chirp_ext = r.chirp_ext / 2; r.good_bytes = 2 * (fbdsamp + r.first_sample); r.bytes_per_line = obufsize; r.num_rng_bins = fbdsamp + r.chirp_ext; r.fs = r.fs / 2.; /* decreasing the pulse duration also changes the near range by 108 pixels */ r.pulsedur = r.pulsedur / 2.; r.near_range = r.near_range - (108. * SOL) / (2. * r.fs); if (debug) fprintf(stderr, " %d %d %d %d %f %f %f \n", r.chirp_ext, r.good_bytes, r.bytes_per_line, r.num_rng_bins, r.fs, r.chirp_slope, r.near_range); /* write the output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("can't open prfile", argv[2]); put_sio_struct(r, prmout); free(indata); free(outdata); free(cin); free(cout); fclose(prmfile); fclose(prmout); fclose(datafile); fclose(dataout); } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process/roi_utils.c000644 015705 000000 00000024437 13505462014 025034 0ustar00sandwellwheel000000 000000 // write_roi // attempts to create a rsc file for roi_pac // adapted from make_raw_alos.pl // rjm - sdsu 7/2010 #include "image_sio.h" #include "lib_functions.h" #include #include #include #define FACTOR 1000000 int prm2roi(struct PRM, double *, double *, int *, double *, double *, int *, int *, int *); long get_file_size(FILE *); int get_utc(double, struct SAR_info, double *, double *, double *, double, int); int write_roi_orbit(struct ALOS_ORB, char *); /* writes out rsc file for roi_pac */ int write_roi(char *imagery, FILE *ldrfile, struct PRM prm, struct ALOS_ORB orb, char *date) { int clength; int xmin, xmax, ymax; int file_length, width, first_sample; int yr, yr2, mo, da, mn, hr, sc, ms; long size; double C = 299792458.0; double ANTENNA_SIDE = -1; double ANTENNA_LENGTH = 8.9; double PLANET_GM = 3.98600448073E+14; double PLANET_SPINRATE = 7.29211573052E-05; double first_line_utc, last_line_utc, center_utc; double pri, start_time; double range_pixel_size, range_bias, starting_range, chirp; double ibias, qbias, wavelength, pulsedur, range_sample_freq, prf; int orbit_num, first_frame; char syr2[2], smo[2], sda[2]; char proc_sys[64], proc_ver[64], ctime[64], foutname[128]; char polar[32], swath[16]; FILE *rsc, *datafile; struct SAR_info sar; struct sarleader_binary sb; first_frame = 000; /* assign variables from prm to roi */ /* these are from data file */ prm2roi(prm, &start_time, &starting_range, &first_sample, &prf, &chirp, &width, &xmin, &xmax); /* just define it rather than read from dc_bias_i,q */ ibias = qbias = 15.5; clength = 0; range_bias = 0.0; pri = 1.0 / prf; /* find size of raw input file - this is a pain */ if ((datafile = fopen(imagery, "r")) == NULL) die("error opening ", imagery); /* find data file size */ size = get_file_size(datafile); ymax = file_length = size / width; // allocate memory for structures sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); sar.varseg = (struct sarleader_fdr_varseg *)malloc(sizeof(struct sarleader_fdr_varseg)); sar.dss_ALOS = (struct sarleader_dss_ALOS *)malloc(sizeof(struct sarleader_dss_ALOS)); sar.platform_ALOS = (struct platform_ALOS *)malloc(sizeof(struct platform_ALOS)); // read in sar leader (again) // the first ones are not used (sarleader_binary, sarleader_binary) // but read for completeness and move ahead into file rewind(ldrfile); (void)fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); fscanf(ldrfile, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fscanf(ldrfile, SARLEADER_FDR_VARSEG_RCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); (void)fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); // this has the useful information fscanf(ldrfile, SARLEADER_DSS_RCS_ALOS, SARLEADER_DSS_RVL_ALOS(sar.dss_ALOS)); // get some parameters from leaderfile // not all these were read in for the PRM struct // so need to read leaderfile again wavelength = atof(sar.dss_ALOS->radar_wavelength); pulsedur = (atof(sar.dss_ALOS->range_pulse_length) / FACTOR); range_sample_freq = (atof(sar.dss_ALOS->sampling_rate)); range_pixel_size = C / range_sample_freq / 2.0; /* handling strings in C - happy, happy, joy, joy */ sscanf(sar.dss_ALOS->processing_system_id, " %s", &proc_sys[0]); proc_sys[10] = '\0'; sscanf(sar.dss_ALOS->processing_version_id, " %s", &proc_ver[0]); proc_ver[4] = '\0'; sscanf(sar.dss_ALOS->antenna_mech_bor, " %s", &swath[0]); swath[4] = '\0'; sscanf(sar.dss_ALOS->orbit_number, " %d", &orbit_num); strncpy(&polar[0], &sar.dss_ALOS->sensor_id_and_mode[16], 2); polar[2] = '\0'; /* use time from leaderfile */ strncpy(&ctime[0], (sar.dss_ALOS->input_scene_center_time), 30); ctime[30] = '\0'; sscanf(&ctime[0], " %2d%2d%2d%2d%2d%2d%2d%4d", &yr, &yr2, &mo, &da, &hr, &mn, &sc, &ms); sscanf(&ctime[0], " %4d", &yr); sscanf(&ctime[2], " %2s%2s%2s", &syr2[0], &smo[0], &sda[0]); sprintf(&date[0], "%2s%2s%2s", syr2, smo, sda); // utc time get_utc(start_time, sar, &first_line_utc, &last_line_utc, ¢er_utc, pri, file_length); // open output file sprintf(foutname, "tmp.%s.raw.rsc", date); if ((rsc = fopen(foutname, "w")) == NULL) die("error opening tmp_raw.rsc", ""); fprintf(rsc, "FIRST_FRAME %d\n", first_frame); fprintf(rsc, "FIRST_FRAME_SCENE_CENTER_TIME %s\n", ctime); fprintf(rsc, "FIRST_FRAME_SCENE_CENTER_LINE %d\n", clength); fprintf(rsc, "DATE %s\n", date); fprintf(rsc, "FIRST_LINE_YEAR %d\n", yr); fprintf(rsc, "FIRST_LINE_MONTH_OF_YEAR %02d\n", mo); fprintf(rsc, "FIRST_LINE_DAY_OF_MONTH %02d\n", da); fprintf(rsc, "FIRST_CENTER_HOUR_OF_DAY %02d\n", hr); fprintf(rsc, "FIRST_CENTER_MN_OF_HOUR %02d\n", mn); fprintf(rsc, "FIRST_CENTER_S_OF_MN %02d\n", sc); fprintf(rsc, "FIRST_CENTER_MS_OF_S %d\n", ms); fprintf(rsc, "PROCESSING_SYSTEM %s\n", proc_sys); fprintf(rsc, "PROCESSING_VERSION %s\n", proc_ver); fprintf(rsc, "WAVELENGTH %f\n", wavelength); fprintf(rsc, "PULSE_LENGTH %g\n", pulsedur); fprintf(rsc, "CHIRP_SLOPE %g\n", chirp); fprintf(rsc, "I_BIAS %4.1lf\n", ibias); fprintf(rsc, "Q_BIAS %4.1lf\n", qbias); fprintf(rsc, "PLATFORM ALOS\n"); fprintf(rsc, "BEAM %s\n", swath); fprintf(rsc, "POLARIZATION %s\n", polar); fprintf(rsc, "ORBIT_NUMBER %d\n", orbit_num); fprintf(rsc, "RANGE_BIAS %lf\n", range_bias); fprintf(rsc, "STARTING_RANGE %-20.0lf\n", starting_range); fprintf(rsc, "RANGE_PIXEL_SIZE %-15.10lf\n", range_pixel_size); fprintf(rsc, "PRF %lf\n", prf); fprintf(rsc, "ANTENNA_SIDE %lf \n", ANTENNA_SIDE); fprintf(rsc, "ANTENNA_LENGTH %3.1lf \n", ANTENNA_LENGTH); fprintf(rsc, "FILE_LENGTH %d\n", file_length); fprintf(rsc, "XMIN %d\n", xmin); fprintf(rsc, "XMAX %d\n", xmax); fprintf(rsc, "WIDTH %d\n", width); fprintf(rsc, "YMIN 0\n"); fprintf(rsc, "YMAX %d\n", ymax); fprintf(rsc, "RANGE_SAMPLING_FREQUENCY %-20.0lf\n", range_sample_freq); fprintf(rsc, "PLANET_GM %-20.0lf\n", PLANET_GM); fprintf(rsc, "PLANET_SPINRATE %-15.11e\n", PLANET_SPINRATE); fprintf(rsc, "FIRST_LINE_UTC %lf\n", first_line_utc); fprintf(rsc, "CENTER_LINE_UTC %lf\n", center_utc); fprintf(rsc, "LAST_LINE_UTC %lf\n", last_line_utc); fprintf(rsc, "EQUATORIAL_RADIUS %f\n", prm.RE); // equatorial radius // HEIGHT_TOP // HEIGHT // HEIGHT_DT // VELOCITY // LATITUDE // LONGITUDE // HEADING // EQUATORIAL_RADIUS // ECCENTRICITY_SQUARED // EARTH_EAST_RADIUS // EARTH_NORTH_RADIUS // EARTH_RADIUS // ORBIT_DIRECTION /* fprintf(rsc," %d\n", prm.num_lines); // length fprintf(rsc," %f\n", prm.SC_clock_start); // start_time fprintf(rsc," %s\n", prm.orbdir); // orbdir fprintf(rsc," %f\n", prm.ht); // height fprintf(rsc," %f\n", prm.vel); // vel fprintf(rsc," %f\n", prm.fd1); // fd1 */ fclose(rsc); return (EXIT_SUCCESS); } /*--------------------------------------------------------------------------------------------------------------*/ int prm2roi(struct PRM prm, double *start_time, double *starting_range, int *first_sample, double *prf, double *chirp, int *width, int *xmin, int *xmax) { *prf = prm.prf; *start_time = prm.SC_clock_start; *starting_range = prm.near_range; *first_sample = prm.first_sample; *width = prm.bytes_per_line; *xmin = (2 * (*first_sample)) + 1; *xmax = prm.good_bytes; *chirp = prm.chirp_slope; return (EXIT_SUCCESS); } /*--------------------------------------------------------------------------------------------------------------*/ long get_file_size(FILE *datafile) { long size; fseek(datafile, 0, SEEK_END); size = ftell(datafile); fclose(datafile); return (size); } /*--------------------------------------------------------------------------------------------------------------*/ int get_utc(double start_time, struct SAR_info sar, double *first_line_utc, double *last_line_utc, double *center_utc, double pri, int file_length) { double tday, hr, mn, sc, ms; tday = start_time - floor(start_time); tday = start_time - floor(start_time); hr = floor(tday * 24.0); tday = tday - hr / 24.0; mn = floor(tday * 60.0 * 24.0); tday = tday - mn / 60.0 / 24.0; sc = floor(tday * 60.0 * 60.0 * 24.0); tday = tday - sc / 60.0 / 60.0 / 24.0; ms = floor(tday * 1000.0 * 60.0 * 60.0 * 24.0); *first_line_utc = (double)(3600 * hr + 60 * mn + sc + ms / 1000.0); *last_line_utc = *first_line_utc + pri * file_length; *center_utc = (*first_line_utc + *last_line_utc) / 2.0; return (EXIT_SUCCESS); } /*--------------------------------------------------------------------------------------------------------------*/ int write_roi_orbit(struct ALOS_ORB orb, char *date) { int i; FILE *orbit_rsc; char fname[128]; sprintf(fname, "hdr_data_points_%s.rsc", date); if ((orbit_rsc = fopen(fname, "w")) == NULL) die("error opening ", fname); for (i = 0; i < orb.nd; i++) { fprintf(orbit_rsc, "%-6.0lf", orb.sec + (i * orb.dsec)); /* position */ fprintf(orbit_rsc, " %-18.15E", orb.points[i].px); fprintf(orbit_rsc, " %-18.15E", orb.points[i].py); fprintf(orbit_rsc, " %-18.15E", orb.points[i].pz); /* velocity */ fprintf(orbit_rsc, " %-18.15E", orb.points[i].vx); fprintf(orbit_rsc, " %-18.15E", orb.points[i].vy); fprintf(orbit_rsc, " %-18.15E\n", orb.points[i].vz); } fclose(orbit_rsc); return (EXIT_SUCCESS); } /*--------------------------------------------------------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process/ALOS_pre_process000755 015705 000000 00000253724 13507242207 025754 0ustar00sandwellwheel000000 000000  H__PAGEZERO(__TEXT00__text__TEXT G __stubs__TEXT__stub_helper__TEXT__const__TEXTp__cstring__TEXT___unwind_info__TEXT / /__DATA00__nl_symbol_ptr__DATA00%__got__DATA00'__la_symbol_ptr__DATA(0((0*__data__DATAP1P1__common__DATA@H__LINKEDIT @"0@@X`@(B( I|R PSS)PO /usr/lib/dyld#&2X1fB=C2   *( 8/usr/lib/libSystem.B.dylib&Hp) IUHAWAVAUATSHHhAH"HHEЃH=H#H5_VHmHxL-AEL%A$H1H<HCL=1AHHxH#WH۪H"DHhH2HS!H8AH51虹HXA<$t HxxUt AE(AEH HH=W]HhHxH5KHXHuHhHpH=*'UHhHxH5ܸIHuHhHpH=THHhHseLCLxHpHHE1LH(LLhA?tHhHPH(Hx蔭L HF8H8u7HOu*HH8H5v1H%HDž`LxE1E1f.MtUH$8tH`H8AW1H56襷J-pJ-HhL@LHEf.vvDžrtudDžNp0NpHXLLH`_ H`;u HXLLH`$H`H(LfHխ8uL_Hխ8t{YĸH]iHDžL5I>H5[I>H5 BI>1H5++H>8uH6HHJH HLHHTH H8HhH@HPHLHHPH$@HHH$8H@H$0H8H$(H(H0H$ H$HH MLpLZ8HPHPHHH@H8L(H0LMPQRVSHAP`OH0IIH`HpHH;Eu1Hĸ[A\A]A^A_]hf.@UHAWAVAUATSPLIHUIIEtIEAH 11LIE H H1ILE;H J11LIͳH 6H1LI譳H51LI$HuH=LPH5 L迳HMHHtH[A\A]A^A_]H=LH[A\A]A^A_]OUHAWAVAUATSHHUHHIIHpHEAAA9uH=OH5KOIcI<H`HH8H53HHEH@H@HH`H)H==HĩH3H8H=HwHH#H=HJHH"H=H)HHH=Ht)HH"H=_HHUHH=5HHHHH=艱IcM4LH5蜱LH5Կ腱LH5nLH5+WVLH5F@LH5v)LH5LH5[LH5LH5ͰLH5#趰LH57蟰LH5J舰LH5OqLH5bZ/LH5hD=A>-H#H^HH=L;f.AA9uH=H5xKIcIHc]HHEHuH=H5GHxH迫HEHuH=WH5nGI6Hx1LLc}IL虫1LL\LeH8t)HL8L@HH5t1LHL%"LLHHcEHhEEE1EEELuLmfDEH8t Lg,ك}IHWA*D$(HA*T$,^%^X^XHUWA*D$$YXWA*D$8WA*D$tE<$IH38D}t?HkH8YH5LAD蓩DID}Lp}El$ADA9͉Mt21H=nDA蛩El$HE,AD$8EAD$tHxA$;Ut1H=Xu\H DhD+mD9LetH=H5EHz W*@8A$f.W*@tA\$ A^$8^XĪf: XD,EAELE9~$1H=~D詨H=H5UDD9utHpt1H=xDuDuLH8toEW*^dHHiMbHH?H'W*f.u:z8HtW*@8H yH9YD@tH5_D豧McH}LHM襧HVH=GtEȺHhH蘧Et'DDDMELMSu{HDH}LHXLuLmL%LLHM[EED}E$HdH]HߦHHIMIЦHIA ۨf(YW*K8YH=DH详AYW*K8YH=D} LuL%HMY`HaWA*L$(WA*T$,!^%^X^XWA*L$$HYXMыEW*W*`^,9X~Xu LJH8tH}\H}SHp#IHx[A\A]A^A_]ÐUHAWAVAUATSHxIHI:t/H=rH5 AA>tH=VH5@L=͛A?t'HT H8AHDH5;1莤LԤHݛ8t)H HL茤HH561HHQHH HLAA?t[L5 I>KDCDKDS[H51SARHILHH5e 1HԣH[[HLģA?HM H8HHHHHHHHHHHHH|HHtHHlHHdHHHHMHDHH<HH4HH,HH$HHHHHHH H H(HH0HH8HH@HHHHHPHHXHH`HHhHHpH5ŶLLLHHMLLHHMHHMHHMHKdHMHK`HMHKXHMHKTHMHKPHMHKHHMHKDH`HK@HhHK8HpHK4HxHK$HHK HHKHHKHxHKLCLKHu (08@HPX`hpASAVATuARAWL=ruuuuuuuuu`hpxxHĠHHLHH5o1HޟHiHLΟIA?t+HXL L˟HH51L莟HՖ8t H= T!A?H H8DCDK CHCHCHCHC HC$HC(HC,HC0HC2HC4HC6HC8HCH5ܥ1H}I>hH5ե1fI>LH5ӥ1OI>PH5ӥ18I>\H5ץ1!I>H5ӥI>HH5ǥI>H5֒I>H51迒I>XH51訒I>H5菒I>H5vI>H5]I>H5[A^]@f.@UH*U8*M<^ Rff^~f(XXf(]ÐUHAWAVAUATSHhHMHUHuI90H8t H[HH=ƑHUHMLHuH߈8t$HH8UDmH51DZDmHUHMH}DH8Lc}tH=h1DaLMHHuH=H5*-H@6u#LIHuH=H5,E1LpLHEHuH=H5,ULHu*H8t)HL8L蒐HH5Ʋ1LHWEEEL=$LLeL.H5IcHxEEIf.fuƉuH18t LuHEH8~uH}HuHUHMuA9t1H=ҡُMcoL+xD9ptH= H5q+WA*G8H}~f.HuHUHMEH8tiHcEW*^nHiMbHH?H'W*f.u5z3WA*G8HH8Y AEGtH5pDŽHLHM躎HLHxHM趎AG6u`Efo=fDofo=fDofo= fDofo=MIIOHHHHs61@}tuDMEI(HL?ȃHHDH)H1oSoLSoTS o\S0HL!fofA8fofA8fbfofA8fofA8fbf:fA8fA8fbf8f8fbf:fof`fhAD6A 6H HbHHf.fATHHA6HHL9|ۋ}t(uDDMEMuuHDDHcLHMٌ$LHM襌HDuDHILmL肌L而HHEHA$ f(YWA*O8YH=DHYA$KYWA*O8YH=íD%H2WA*_(WA*O,^ ^X^XH8tH=vEɋEH}WA*O$Y XMԋEȉW*W*`^,ʉXuLJ\YW*X ^X,W* ^H%8tHNJH}辊H}葊HEHHh[A\A]A^A_]f.UHAWAVAUATSHxIHIL=pA?tH|?A?tH=7|?1sA$A?tH=*$1S;|?JA>$]A?t'HH8AH*DH5x1ˉLH8t)HVHLɉHH5s1HH莉H HL~A?tuHH=ά1H蚉A?t[L5I>KDCDKDS[H5"1SARHIL4HH5 1HH~@p?HLA?HpH8HHHHHHHHHHHHH|HHtHHlHHdHHHHMHDHH<HH4HH,HH$HHH HH(HH0H H8HH@HHHHHPHHXHH`HHhHHpHHxHHMH5ΪLLLLLLLHHMHHMHHMHKdHMHK`HMHKXHMHKTHMHKPHMHKHH`HKDHhHK@HpHK8HxHK4HHK$HHK HHKHHKHMHKLCLKHu (08@HPX`hpxuARASAVAWL=|AULATuuuuuuuu`hpxu0HĠHHL;HH5p?1HH$HLIA?t+HxL LHH5?$1L讄H{8t H=-tA?H+H8DCDK CHCHCHCHC HC$HC(HC,HC0HC2HC4HC6HC8HC$H=ڤH5A?UHAWAVAUATSHHL-A*E8WA*EDYIHUAHAE)L=uxA?tsAuH=1AA?t[H=1D*A?tDAuH=^1A?t,Au4H=v1A?tAu6H=~1HwA*](A*M,^ ^X^XL=rwA?tH=6E艀EWA*M$Y _XAMALPlhAMLAU6uD)D≓LHU) fWf.vWA*EtA?tH=A?tHAQ|+H%H8H5,1nH=:H5g1H[A\A]A^A_]UHAWAVATSAIHIHH/H-HIAA$YHx*K8YH=rDH A$YW*K8YH=vD~1[A\A^A_]fUHH*]8*M<^ ^X^XH[u8tH= Es~EH]ÐUHfG0fG2fG4fG6fG@fGBfG`fȉoOfof8OGȉGGȉGG ȉG G$ȉG$G(ȉG(G,ȉG,G8ȉG8G<ȉG<oODf8ODG\ȉG\oOlf8Olȉȉof8of8of8ȉH t8t]Ëȉ]ÐUHAWAVAUATSHH8H IHTHHELc\`Dl@ (P03^H5d/|HHuH=<LLCD?1H"|H |IH{LHIHH|Iſ|Hÿ{IL L{H L{HH5IMMEMMIEHPIEHXIE H(IE$H0IE4H8IE8H@IE@HHIUDHIUHHIUPHIUTHL(MeXMU`M]dM}hLH AWASARATH@80(XPzHĀHKLC LKHCHPHCHXHC$H(H5HC*H0HC0H8HC6H@HCjH5MHU1H)jH5eHP1HjH5zHHiH5H@iH5H0iH5lHiH5ΟHliH=.HiH5H`1HciH5Hp1HKi|H5 1H4iH5<WH iH5VH iH5pH8hH5HhH5kHhH5kHhH5Ϡ1HDhH51HߋxhH51HߋahH51HH(IhH=)+HZhH5<1HDhH5UH hH5okHgH5 kHgH5HXgH5HPgH5͡HgHEH5֡HigHOgHHH;Eu1H[A\A]A^A_]ffDUHL0L(H(HHHHHl\ADA`AHPI1]f.DUHAVSH1fHfIHfL[A^]f.DUHf: \bif(Yf: f(^\Hif(YYf: f(^^\f(YYYY%if: YXX^^^\%hYYYYf: ^XW*YXXYg1]f.UHAWAVAUATSHHL}HHHEH LP1LIdH5zsL/eHHuH=<HPHMcoMAG@AGHMw(I0E1L=f.WA*YHX@HH5UdAFذHLdAFHLdAFHLpdAFHL]dAFHLJdAHH54dII8M9RH dHHH;Eu1HĘ[A\A]A^A_]cUH]DUH]DUHHHHgH8H5{1cc@UHGOYFYN\OYFY\JOYFY\B]UHp)X e(^YBeW*X^XW*f(X^XhW*^X]UHHXXXXXXXXHHHHHH HHHHH8H0H(H (}eHXLJhayLJlayLJpaytLJayLJayLJay(.eHt$iH(8HXhxHHH]ÐUHAWAVSPILupaytH5ٛ1LaAaytH5Л1L`ATaytH51L`IH5H atH51LH`Af.cu{H5Li`AdaytH51LI`IH5FH`tH5s1LH`IH5Ha`tH5S1LH_A0f.0cu{H5AL_ApaytH541L_AlaytH5&1L}_IH5zH_tH5 1LHJ_AXf.bu{H5L$_A`f.qbu{H5L^Ahf.Kbu{H5ݚL^AtaytH5Ԛ1L^AxaytH5Ś1L^Af.au{@AH5Li^Af.au{H5LC^Af.au{H5L^Af.jau{H5zL]A\aytH5r1L]AaytH5i1L]A8f.au{H5ZL]H5L]tH5o1LLe]AhaytH5o1LE]ALaytH5o1L%]APaytH5o1L]Af.R`u{H5L\AHf.,`u{H5oL\Af.`u{H5L\AaytH5so1Ls\AXaytH5eo1LS\Af._u{H5SoL-\Af.z_u{H5JoL\Af.T_u{H5@oL[Af.._u{H5L[IH5H\tH51LH[I8H5H[tH51LHU[I H5RH[tH5d1LH"[I(H5Hm[tH5C1LHZAPf.<^u{H5-LZA@f.^u{H5 LZA8f.]u{H5L}ZA f.]u{H5LWZA(f.]u{H5L1ZAf.~]u{H5֗L ZAf.X]u{H5LYAf.2]u{H5LYAf. ]u{H5LYAf.\u{H5LsYAf.\u{H5LMYAf.\u{H5tL'YApf.t\u{H5eLYAxf.N\u{H5MLXAf.(\u{H5:LXAf.\u{H5$LXAf.[u{H5LiXAf.[u{H5LCXAf.[u{H5LXAf.j[u{H5LWAf.D[u{H5LWAf.[u{H5LWAf.Zu{H5LWIH5HWtH51LHRWI0H5OHWtH5͖1LHWAf.lZu{H5LVH[A^A_]ÐUHAWAVAUATSHXIHmH8H51LVH5cLVIHuH=LIcLH}VHEAPIc\HcH)L$LVILwVHEHHgVIľH}HUL}L!VA\HcHuйfDDN<t TNuADfWKf.@W*ZA\ ZADW*ZA\(ZADHH9|ETAA9LuHMH]f.IcHiMbHH?H'W*W*^ kWf.u!zHH81H5DTHMD}IcLH}TE1A\DHcHUJ<tHHcH uH]JE1UW*ZA\ ZW*HEBWZA\(HZfB~DfA~CDRKB )MKC XC CXDCDf(ECDGtIH]I9Lu D}AAA9HMoIfWɅ~PfWE1f.MC CDQSMZ^VZZXII9|W*^HEYpfWYxLSLSH}SLHX[A\A]A^A_]Rf.UHHc\LcLDFAtHLcIB<uLcBW:A*Z\ ZBBW*Z\(ZBD]ÐUHAWAVAUATSHIHuIf.AHHcf.DMI1E~)f.s#1HBH9}Lf.Hr‰AHDD)1D9~BHaHH=.ELEQLEEE)HEDELcMcDJ415>T TfDJ fW1f(fH9t*$f(\Y,\^f(^XHH9uf(\$f(YYXAYAY$XYYAX$$A$$f.zHL9jH[A\A]A^A_]HLHH=PkPH"HH=H0P8PUHAWAVAUATSHHIL%GA<$t HHH=$PHF8uYRY R`)*f(X^XEXW*^XML8L,$HUHMLXL0LHf(M_L,$HUHML`LHE(M6L,$HUHMLELHEMMA<$L5I>Up]hXH5UE(NI>Ux])@eeH5SEMuNI>UU]]`H5GE(@NUuf(@pxhEA<$%EmeM]UuXXfWfTfUfVX\\\u|L5(I>H5iMI>H5PMI>H57MI>H5MI>H5MHĸ[A\A]A^A_]ÐUHAWAVAUATSH8@MLHHIIH[HHEDž|HD8t@H?HH=bLAAOA^AL%/CA$HXtu>Dž2AA+`W*^FO,ƒOȉXYM %OX@ OX`HHHHxLI6 HؿHHL@I HHHL`I f)@Yf)YXf(ؿffYf\fY%>NX\Y-Nf(Yf)f(YXf(YXQf)AfW1(f.WQˍD@AfA f)`^ IxJYYY^I0A$`ItWfW8M05It8YY^Y^XQ "L^Hf(`f(\Hf(@ff^f)M Ef(f(f^f)M(^EH}HuHpf(`f(Yf(YXY\f(XY^HHXof(fWKpYEY\YXxYEY\YX`YUYu\YXf)E1LLHxD)W*YB0XLHLLI! X\`\YYf(\XYXWQ\BIHcI9AH0HHHL|)>HHMHXYQHHHH;EuH8@[A\A]A^A_]EUHt\fWɃHcHcNHJW*HX IHKHnJH7JHD*THcHH }J*|IXW*XX HY GXX YIf(]f.UHAWAVATSHf(^GIHII^!IUf(YIXI IYYX IYYYX^HYH \HD H]YX HHYYX^H^HYHf)UNDD HHA$$YfEWAX#Al$YX+Ad$AYX#HCA$$YfW\kAd$YXcAl$AYXkHCA$$AYAXcAl$AYXkAXl$fDWkf(Uf(f: GYf(ff(fYf\fD(fD: A<$Ad$Yf(AT$AYY~fEWfWffofXf\f: fAYfXDfDXAYAXAYXXAAA_AYAXAYXXAYffAfYfAXfYfXfXfAXXfAA~H[A\A^A_]f.@UHAVSHf(^DIH^;FUf(Y2FX2F 2FYYX &FYYYX^FYF vEAFUYXE EYYX^ E^ EY EAH[A^]fUHHYfWX WYVXOYNX HBOYXJW YVXRO(YNXJHBO0YXJG8YFXBO@YNXJ]f.UHAWAVATSHf(^CIHII^DUf(YxDXxD xDYYX lDYYYX^\DY\D CE@ OD]YX D>DYYX^D^*DY Df)U?DDfDWHA$$YfEWAX#Al$Y\#Al$AYX+HCA$$YAXcAl$YXkAd$AYXcHCA$$AYAXcAl$AYXkAXl$kf(%aCf(UfYff(f\fYf(f: A<$Ad$E\$EYfYfEWfAXffYfAfXAYAXAYXAXAAAYAXAYXAWXAYfDffYfAXfAYfXfXfXXfAA~H[A\A^A_]ÐUHAWAVAUATSH8LEHMHUHuEILcoJH>IH>HEH>IMDWA*G Y?AXGAOHJЃHs 1HuxH)1W*YXA̍qW*YXЍqW*ATYXA\qW*YXATHH9uHt/Hf.DW*YXAHHuLLLH]HELELMuu+HL<L<HH8[A\A]A^A_]<UHAWAVAUATSH8MIIIIHEHELEOHn38EHMLELMt.HH8H5#~EЉL$<IHMEЅLU~ȃu81HHEH$ALLLMuHM8HH)11fI|$(H|7IH5zHz1j8A}t$IH=zt8 1Hk8IHW8IHC8HHv/8H8HH L7LA}DDDDH5UH1LILASARh7HL7IH5 1LH<7LIOMGMOIGHIGHIG HIG$HIG4HIG8HIG@HIGDHIGHHIGPHIGTHMgXMW`M_dMohHH5fHPLHxLhLpL`AULXASLARLAT"6HĀHZ-8HH5xHLHxLhLp`Xe5HĀINMF MNIFHIFHIF$HIF*HIF0HIF6HIFHTH8HH5|1L#E<$HA<$uE1L5{AHÝH9#AEt7LuHՊH8H5|1H#Au.A<$t HHH=|-#AH HP"A<$twIDDDDH5Y1HHASARv"HHP"IH5 1HDJ"HHK LC0LK@HCPHHC`HHCpHIIHHHHHHHHHHHHHHHHHHxL&L6LFLVLfH5k{HPHHhLpLLHASL@ARL`AVLXATLAUxAW HĐH8H5{HHHhLpLH@`XxAW HĐHpLi HALcLHJ< HHL=,AAt"tH`H8H5}1DAtH>H8H5}1DDEDf.HKLk,L{BLSXLcn1HPH5|HHMMATLAR6HHq8t11HH5|HHMMATHHÄIkH59}H?H1LPLIH LL=A?tsIDDDDH51HHASAR3HLKIH5 1HD HH5}|1LHA?tH5g|1HHHH*HAAAt"tHEH8H5_|1DAtH#H8H5z1DiIcHkxHDEtHËHBHHSHKLCLKHCHHCHHCHLkLsL{LS L[Lc(HPH5{HHLLLpATLhASLxARLAWLAVSLAU}HPH8toHH5j{HHLLphxSHPHxHHHLHHHHLHHAQQRVSPAPH@HxCHLHHHLLHHAQQRVARPAPH@H,8uHSHLHHHLLHHpARQRSAPPAQ H@H8t HH?HH;EueHh[A\A]A^A_]H%H8H5s1HkA$HH8H5s1HDAf.fUHAWAVATSIIAODGDODW_H5z1LSARHLHH5a{ 1LDI[A\A^A_]f.UHAWAVAUATSPIH] H]APHH^JAHH^D8EuHYA8HfWfA@H&A H6A(Au&HA8f( fA HYAHoYAM HLH7Wf.ȸLRGfA(M8Hs:LAƆ?HJH5ymuJApf.8u7z5HApHHYAxH8M(HIH;APH5OyH;A@H5MygH;A8H5GyMH;A H5Cy3H;A(H59yH;H58y1LH;H53y1LH;H5/y1LH;ApH5yH;AxH5yH[A\A]A^A_]H[A\A]A^A_]f.UHAWAVAUATSHIH~HHEH](HLLƅLAFHLƅLAF HL\ƅLAFHêLH0ƅLAFA*F YAXFAF H 8H$}H;IFHAVH5+x1^H;AVH5x1IH;AV H5x14H;AFH5xH;AFH5wH;AF H5w IFHIc^Hk8 IF(HHEHX LE1E1H 8tHE|H81H5wDLHƅLHIF(BD HsLƅLIF(BD Hs,LƅLIF(BD Hb 8t1H{H8IF(BD BL BT H5vHsBL)ƅLIF(BD HsXLƅL_IF(BD (HsnLƅL4IF(BD 0H 8t1HzH8IF(BD BL (BT 0H5*vIHHcHÄI8I9=HzHH;EuH[A\A]A^A_]fDUHAWAVAUATSHHEzHHEЃXHE1LmLuE1HC(BD8  ^BD8 HC(BD8(^BD8(HC(BD80^BD80HC(JL8H`JL8HhJL8HpJL8 H@JL8(HHJD80HPCEċC EEayWA*YCXCHuwH`H@LLHEHK(JD9HEHK(JD9HEHK(JD9HEHK(JD9 HEHK(JD9(HEHK(JD90IHcCI8I9HxHH;Eu1HĘ[A\A]A^A_]UHAWAVAUATSHAILeHxHHEL-=A}t2HwxHI|$(1 5HH5#s1HHE>EyI\$0EE1f.HH1 HCDH{1 HCA}tHwH8CT1H5rH{1CH{&1mCH{41XCA}t/(HqwH8CCH5LrH{N1 CH{\1C H{j1C A}t/(HvH8CC H5q1IHxM9HvHH;EuH[A\A]A^A_]UHHdata.rawHGfLJnfLJnfLJnfLJnH$H`LJ@LJTHLJH@H0H?HX(lHLJhHLJ`HLJHLJHLJHLJLJ\LJH~AH8H~7?HPHHHLJXHLJHLJxHLJpHLJHLJH]f.UHAVSHL5uIH=vp(r I>HH5p10 I>H5p1H I>`H5xp1 I>H5vp1 I>TH5mp1 I>HH5hp1 I>H5^p I>dH5Xp1 I>HH5Sp1w I>HH5Sp1_ I>0H5XpF I>pH5Qp1/ I>lH5Ip1 I>HH5Lp1 I>XH5Mp I>`H5Pp I>hH5Sp I>tH5Yp1 I>xH5Qp1 I>H5Gpn I>H5ApU I>H5;p< I>H57p# I>\H55p1 I>H53p1 I>8H5.p I>H50p[A^] UHAWAVSPIIHIǠH p11L2 HrH8H5o1Le H5LP IHt{NH=oLe{~911f.W*YCXCHS(HHcSH8H9|LHL 1H[A^A_]ÐUHAWAVAUATSP^NDF FHuNH5RoIAE ~eA0HEH@(BD0BL0BT0B\0Bd0Bl0B40LH5nDD3 I8HuH[A\A]A^A_]ÐUHYY(]ÐUHZZZf:!(]UHW 1f:!]fUHY]UHX]UHZZ(Z]ÐUHAWAVAUATSHxH}E8D|HEA9HIMcN$LaHEHH]LHHE~,1fDHEH H`HLHL9|HMHEJ4DAL}HEu1H}upI)L}1HEHLeILuIMBY;MXMEIM9uHEHUHMHH9HEH)HE1HEHMf.E1f.}0HUAHML<W*ECHps E1fE1H]LmDEBM XEECBDMXEECBDMXEECBDMXECIM9pHMHtQHEN4E1f.fECMYHMMXMECIL9uIHEI9HUHHHHuH9H|H]HLuLHUHLHx[A\A]A^A_]H0kHH=i.OH=i9HjHH=.iHjHH=yifUHAWAVAUATSHULc9EMEAMM)AE1WMVLM9J Bf.u ^1AtKfHBY\H\BY\HI9uMtH BY\BY \HL9MIMM9.BDJDB^DH]BDEMIN NJ HCHEHGHEE1DHMLMLUDD)D9}SE\$HcMIAtNDfWJ4H4B Y XHuAs%MIfWfWAEA)HEHHuH 1f.NLLMC YLH\LBYTXH\LBY\LXCYXXHA9uH]LMLUHMC \JKB^ B IM9[A\A]A^A_]Ð% h% h%h%h%h%h%h%h%h%h%h% h%"h%$h%&h%(h%*h%,h%.h%0h%2h%4h%6h%8h%:h%h%@h%Bh%Dh%Fh%Hh%Jh%Lh%Nh%Ph%RhL gAS%fhhh%h:hRhfhrh~hhhhxhnhdhZhPhFh@@`4B      ?.AJxޱA8@N@ @/@!@afBx?ayayayayt$it$it$i-DT!@i@Y@@???47´@GAmIn@t շ?3ھn@9RFߑ?t ?ZmDp"A;Zx0N<[y1OwR,tO)qK&nH# j EgBd >"#%&'a)*;,-/01]348679:;Z=>5@AC|DEWGH1JK MyNOTQR.TU/@/@ Usage: ALOS_pre_process imagefile LEDfile [-near near_range] [-radius RE] [-swap] [-V] [-debug] [-quiet] creates data.raw and writes out parameters (PRM format) to stdout imagefile ALOS Level 1.0 complex file (CEOS format): LEDfile ALOS Level 1.0 LED file (CEOS leaderfile format): options: -near near_range specify the near_range (m) -radius RE specify the local earth radius (m) -swap do byte-swap (should be automatic) -nodopp does not calculate doppler (sets fd1 to zero!) -npatch set the number of patches -fd1 [DOPP] sets doppler centroid [fd1] to DOPP -quad adjust parameters for quad pol mod (PRF/2) -ALOSE use ERSDAC format -ALOS use AUIG format (default) -LED write GMTSAR generic LED format output and update PRM (default) -noLED do not write GMTSAR generic LED format output -roi write roi_pac format output -V verbose write information) -debug write even more information -quiet don't write any information -force_slope chirp_slope force a value for the chirp slope -chirp_ext chirp_ext force a value for the chirp extension (integer) -tbias tbias correct the clock bias (positive value means plus) Example: ALOS_pre_process IMG-HH-ALPSRP050420840-H1.0__A LED-ALPSRP050420840-H1.0__A ledflag %d .... swapping bytes rcouldn't open Level 1.0 IMG file couldn't open LED file SAR_mode = %d ; assuming quad_pol creating multiple files due to PRF change (*.%d) quad pol: fixing prf %f quad pol: fixing chirp_slope %g quad pol: fixing chirp_ext %d %s.raw%s.PRM%s.raw.%d%s.PRM.%dwcan't open couldn't open output PRM file -near no option after -near! setting near_range to %9.2lf -radius no option after -radius! setting radius to %f -force_slope no option after -force_slope! setting chirp slope to %f -fd1 no option after -fd1! setting fd1 to %f -chirp_ext no option after -chirp_ext! setting chirp extent to %d -nrows no option after -nrows! setting nrows to %d -npatch no option after -npatches! setting npatches to %d -tbias no option after -tbias! setting tbias to %f -nodopp no doppler calculation (sets to zero!) -quad quad pol data: divide PRF by 2; defining chirp_slope) -ALOSE data is in ALOSE (ERSDAC) format -ALOSA data is in ALOSA (AUIG) format) -LED creating *.LED file -noLED no *.LED file written (default) -roi writing roi_pac rsc files -debug debug and verbose output verbose output %s *** option not recognized *** couldn't allocate memory for input indata. ***** warning sdr.record_length error %d missing line: n, seq# %d %d input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d first_sample = %d PRF = %f pulse_dur = %e near_range = %f num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf header size is not 720 bytes header_size %d line_prefix_size %d swap data %d .... reading header (byte %ld) *********** SAR FDR BINARY ********** record_seq_no ==> %4x record_subtype_code1 ==> %1x record_type_code1 ==> %1x record_subtype_code2 ==> %1x record_subtype_code3 ==> %1x record_length ==> %4x *********** SAR DATA DESCRIPTOR********** ascii_ebcdic_flag ==> %.2s blank_1 ==> %.2s format_doc_ID ==> %.12s format_control_level ==> %.2s file_design_descriptor ==> %.2s facility_soft_release ==> %.12s file_number ==> %.4s file_name ==> %.16s record_seq_loc_type_flag_1 ==> %.4s record_seq_loc_type_flag_2 ==> %.8s sequence_number_loc ==> %.4s record_code_loc_flag ==> %.4s record_code_loc ==> %.8s record_code_field_length ==> %.4s record_length_loc_flag ==> %.4s record_length_loc ==> %.8s record_length_field_length ==> %.4s blank_2 ==> %.68s number_sar_data_records ==> %.6s sar_data_record_length ==> %.6s blank_3 ==> %.24s num_bits_sample ==> %.4s num_sample_data_group ==> %.4s num_bytes_data_group ==> %.4s just_order_samples ==> %.4s num_sar_channels ==> %.4s num_lines_data_set ==> %.8s num_left_border_pixels ==> %.4s total_num_data_groups ==> %.8s num_right_border_pixels ==> %.4s num_top_border_lines ==> %.4s num_bottom_border_lines ==> %.4s interleave_indicator ==> %.4s num_physical_records_line ==> %.2s num_physical_records_multi_chan ==> %.2s num_bytes_prefix ==> %.4s num_bytes_SAR_data ==> %.8s num_bytes_suffix ==> %.4s pref_fix_repeat_flag ==> %.4s sample_data_lin_no ==> %.8s SAR_chan_num_loc ==> %.8s time_SAR_data_line ==> %.8s left_fill_count ==> %.8s right_fill_count ==> %.8s pad_pixels ==> %.4s blank_4 ==> %.28s sar_data_line_qual_loc ==> %.8s calib_info_field_loc ==> %.8s gain_values_field_loc ==> %.8s bias_values_field_loc ==> %.8s sar_data_format_code_1 ==> %.28s sar_data_format_code_2 ==> %.4s num_left_fill_bits_pixel ==> %.4s num_right_fill_bits_pixel ==> %.4s max_range_pixel ==> %.8s blank_5 ==> %.272s *********** SAR DATA DESCRIPTOR********** sequence_number ==> %d subtype ==> %.4s record_length ==> %d data_line_number ==> %d data_record_index ==> %d n_left_fill_pixels ==> %d n_data_pixels ==> %d n_right_fill_pixels ==> %d sensor_update_flag ==> %d sensor_acquisition_year ==> %d sensor_acquisition_DOY ==> %d sensor_acquisition_msecs_day ==> %d channel_indicator ==> %d channel_code ==> %d transmit_polarization ==> %d receive_polarization ==> %d PRF ==> %d scan_ID ==> %d onboard_range_compress ==> %d chirp_type ==> %d chirp_length ==> %d chirp_constant_coeff ==> %d chirp_linear_coeff ==> %d chirp_quad_coeff ==> %d receiver_gain ==> %d nought_line_flag ==> %d elec_antenna_elevation_angle ==> %d mech_antenna_elevation_angle ==> %d elec_antenna_squint_angle ==> %d mech_antenna_squint_angle ==> %d slant_range ==> %d data_record_window_position ==> %d platform_update_flag ==> %d platform_latitude ==> %d platform_longitude ==> %d platform_altitude ==> %d platform_ground_speed ==> %d platform_velocity_x ==> %d platform_velocity_y ==> %d platform_velocity_z ==> %d platform_acc_x ==> %d platform_acc_y ==> %d platform_acc_z ==> %d platform_track_angle_1 ==> %d platform_track_angle_2 ==> %d platform_pitch_angle ==> %d platform_roll_angle ==> %d platform_yaw_angle ==> %d frame_counter ==> %d **** record_length is %d ! expect something like 21100 .... try -swap option? exiting end: shift exceeds data window %d exitting near_range, shift = %d %d new parameters: sequence number %d PRF %f near_range %lf *** PRF changed from %lf to %lf at line %d (byte %ld) end: PRF changed from %lf to %lf at line %d .... reading header .... reading header %d %d record_length0 = %d .... reading data (byte %ld) record_length changed Working on line %d prf %f record length %d slant_range %d get_clock: time = %f header_size = %d *line_prefix_size = %d header size is not 16252 bytes line_prefix_size is not 292 bytes nitems = %ld read %ld bytes at position %ld *********** SAR DATA DESCRIPTOR********** ascii_ebcdic_flag ==> %.2s blank_1 ==> %.2s format_doc_ID ==> %.12s format_control_level ==> %.2s file_design_descriptor ==> %.2s facility_soft_release ==> %.12s file_number ==> %.4s file_name ==> %.16s record_seq_loc_type_flag_1 ==> %.4s record_seq_loc_type_flag_2 ==> %.8s sequence_number_loc ==> %.4s record_code_loc_flag ==> %.4s record_code_loc ==> %.8s record_code_field_length ==> %.4s record_length_loc_flag ==> %.4s record_length_loc ==> %.8s record_length_field_length ==> %.4s blank_2 ==> %.68s number_sar_data_records ==> %.6s sar_data_record_length ==> %.6s blank_3 ==> %.24s num_bits_sample ==> %.4s num_sample_data_group ==> %.4s num_bytes_data_group ==> %.4s just_order_samples ==> %.4s num_sar_channels ==> %.4s num_lines_data_set ==> %.8s num_left_border_pixels ==> %.4s total_num_data_groups ==> %.8s num_right_border_pixels ==> %.4s num_top_border_lines ==> %.4s num_bottom_border_lines ==> %.4s interleave_indicator ==> %.4s num_physical_records_line ==> %.2s num_physical_records_multi_chan ==> %.2s num_bytes_prefix ==> %.4s num_bytes_SAR_data ==> %.8s num_bytes_suffix ==> %.4s pref_fix_repeat_flag ==> %.4s sample_data_lin_no ==> %.8s SAR_chan_num_loc ==> %.8s time_SAR_data_line ==> %.8s left_fill_count ==> %.8s right_fill_count ==> %.8s pad_pixels ==> %.4s blank_4 ==> %.28s sar_data_line_qual_loc ==> %.8s calib_info_field_loc ==> %.8s gain_values_field_loc ==> %.8s bias_values_field_loc ==> %.8s sar_data_format_code_1 ==> %.28s sar_data_format_code_2 ==> %.4s num_left_fill_bits_pixel ==> %.4s num_right_fill_bits_pixel ==> %.4s max_range_pixel ==> %.8s blank_5 ==> %.15804s *********** SAR DATA DESCRIPTOR********** sequence_number ==> %d subtype ==> %.4s record_length ==> %d data_line_number ==> %d data_record_index ==> %d n_left_fill_pixels ==> %d n_data_pixels ==> %d n_right_fill_pixels ==> %d sensor_update_flag ==> %d sensor_acquisition_year ==> %d sensor_acquisition_DOY ==> %d sensor_acquisition_msecs_day ==> %d channel_indicator ==> %d channel_code ==> %d transmit_polarization ==> %d receive_polarization ==> %d PRF ==> %d scan_ID ==> %d onboard_range_compress ==> %d chirp_type ==> %d chirp_length ==> %d chirp_constant_coeff ==> %d chirp_linear_coeff ==> %d chirp_quad_coeff ==> %d receiver_gain ==> %d nought_line_flag ==> %d elec_antenna_elevation_angle ==> %d mech_antenna_elevation_angle ==> %d elec_antenna_squint_angle ==> %d mech_antenna_squint_angle ==> %d slant_range ==> %d data_record_window_position ==> %d platform_update_flag ==> %d platform_latitude ==> %d platform_longitude ==> %d platform_altitude ==> %d platform_ground_speed ==> %d platform_velocity_x ==> %d platform_velocity_y ==> %d platform_velocity_z ==> %d platform_acc_x ==> %d platform_acc_y ==> %d platform_acc_z ==> %d platform_track_angle_1 ==> %d platform_track_angle_2 ==> %d platform_pitch_angle ==> %d platform_roll_angle ==> %d platform_yaw_angle ==> %d sdr.record_length = %d line_prefix_size = %d sdr.transmit_polarization = %d sdr.receive_polarization = %d assign_sardata_params: error opening %2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%60c%6c%6c%288c%4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c%4c%4c%16c%16c%16c%16c%16c%4c%8c%8c%8c%8c%4c%8c%16c%4c%4c%16c%4c%28c%120c%8c%8c%2048c%26c %s %d %2d%2d%2d%2d%2d%2d%2d%4d %4d %2s%2s%2s%2s%2s%2stmp.%s.raw.rscerror opening tmp_raw.rscFIRST_FRAME %d FIRST_FRAME_SCENE_CENTER_TIME %s FIRST_FRAME_SCENE_CENTER_LINE %d DATE %s FIRST_LINE_YEAR %d FIRST_LINE_MONTH_OF_YEAR %02d FIRST_LINE_DAY_OF_MONTH %02d FIRST_CENTER_HOUR_OF_DAY %02d FIRST_CENTER_MN_OF_HOUR %02d FIRST_CENTER_S_OF_MN %02d FIRST_CENTER_MS_OF_S %d PROCESSING_SYSTEM %s PROCESSING_VERSION %s WAVELENGTH %f PULSE_LENGTH %g CHIRP_SLOPE %g I_BIAS %4.1lf Q_BIAS %4.1lf PLATFORM ALOS BEAM %s POLARIZATION %s ORBIT_NUMBER %d RANGE_BIAS %lf STARTING_RANGE %-20.0lf RANGE_PIXEL_SIZE %-15.10lf PRF %lf ANTENNA_SIDE %lf ANTENNA_LENGTH %3.1lf FILE_LENGTH %d XMIN %d XMAX %d WIDTH %d YMIN 0 YMAX %d RANGE_SAMPLING_FREQUENCY %-20.0lf PLANET_GM %-20.0lf PLANET_SPINRATE %-15.11e FIRST_LINE_UTC %lf CENTER_LINE_UTC %lf LAST_LINE_UTC %lf EQUATORIAL_RADIUS %f hdr_data_points_%s.rsc%-6.0lf %-18.15E %-18.15E %s %s num_valid_az = %d nrows = %d first_line = %d XXXXXXXXdeskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate = %lf PRF = %lf near_range = %lf clock_stop = %16.12lf led_file = %s date = %.6s orbdir = %.1s lookdir = %.1s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lf I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %12.8lf fddd1 = %lf sub_int_r = %f sub_int_a = %f B_parallel = %f B_perpendicular = %f baseline_start = %f alpha_start = %f baseline_end = %f alpha_end = %f SLC_file = %s dtype = %s SLC_scale = %f .... calculating doppler for %s can't open Working on line %d interpolation point outside of data constraints hermite: interpolation not in center interval nan! ALOS_ldr_orbit t1 %lf t1 %lf height_start %lf re_start %lf vg_start%lf t1 %lf t2 %lf height %lf re_c %lf vg %lf t2 %lf t2 %lf height_end %lf re__end %lf vg_end %lf SC_vel = %lf earth_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf ... calc_height_velocity time %lf nd %d C pt %lf py %lf pvy %lf time %lf y %lf ir %d C pt %lf pz %lf pvz %lf time %lf z %lf ir %d LED.log opened LED log file %s .... reading sarleader *********** SAR FDR FIXED SEGMENT *********** A_E_flag ==> %.2s blank_2 ==> %.2s for_con_doc ==> %.12s for_con_doc_rev_level ==> %.2s file_des_rev_level ==> %.2s softw_rel ==> %.12s file_number ==> %.4s file_name ==> %.16s rec_seq_loc_type_flag ==> %.4s seq_number_loc ==> %.8s seq_number_field_length ==> %.4s rec_code_loc_type_flag ==> %.4s rec_code_loc ==> %.8s rec_code_field_length ==> %.4s rec_len_loc_type_flag ==> %.4s rec_len_loc ==> %.8s rec_len_field_length ==> %.4s reserved_4 ==> %.4s reserved_segment ==> %.64s *********** SAR FDR VARIABLE SEG *********** n_data_set_summ_rec ==> %.6s data_set_summ_rec_len ==> %.6s n_map_projec_rec ==> %.6s map_projec_rec_len ==> %.6s n_plat_pos_data_rec ==> %.6s plat_pos_data_rec_len ==> %.6s n_att_data_rec ==> %.6s att_data_rec_len ==> %.6s n_rad_data_rec ==> %.6s rad_data_rec_len ==> %.6s n_rad_comp_rec ==> %.6s rad_comp_rec_len ==> %.6s n_data_qua_summ_rec ==> %.6s data_qua_summ_rec_len ==> %.6s n_data_hist_rec ==> %.6s data_hist_rec_len ==> %.6s n_range_spectra_rec ==> %.6s range_spectra_rec_len ==> %.6s n_DEM_des_rec ==> %.6s DEM_des_rec_len ==> %.6s n_radar_par_update_rec ==> %.6s radar_par_update_rec_len ==> %.6s n_annotation_data_rec ==> %.6s annotation_data_rec_len ==> %.6s n_detailed_proc_rec ==> %.6s detailed_proc_rec_len ==> %.6s n_cal_rec ==> %.6s cal_rec_len ==> %.6s n_GCP_rec ==> %.6s GCP_rec_len ==> %.6s spare_60 ==> %.60s n_facility_data_rec ==> %.6s facility_data_rec_len ==> %.6s blanks_288 ==> %.288s *********** DSS RECORD *********** dss_rec_seq_num ==> %.4s chan_ind ==> %.4s reserved1 ==> %.16s scene_number ==> %.32s input_scene_center_time ==> %.32s spare1 ==> %.16s center_lat ==> %.16s center_long ==> %.16s center_heading ==> %.16s ellipsoid_designator ==> %.16s ellipsoid_semimajor_axis ==> %.16s ellipsoid_semiminor_axis ==> %.16s earth_constant ==> %.16s spare2 ==> %.16s ellipsoid_j2 ==> %.16s ellipsoid_j3 ==> %.16s ellipsoid_j4 ==> %.16s spare ==> %.16s reserved_new ==> %.16s scene_centre_line_number ==> %.8s scene_centre_pixel_number ==> %.8s scene_length ==> %.16s scene_width ==> %.16s spare3 ==> %.16s nchan ==> %.4s spare4 ==> %.4s mission_identifier ==> %.16s sensor_id_and_mode ==> %.32s orbit_number ==> %.8s lat_nadir_center ==> %.8s long_nadir_center ==> %.8s heading_nadir_center ==> %.8s clock_angle ==> %.8s incidence_angle_center ==> %.8s radar_freq ==> %.8s radar_wavelength ==> %.16s motion_compensation ==> %.2s range_pulse_code_specifier ==> %.16s range_pulse_amplitude_const ==> %.16s range_pulse_amplitude_lin ==> %.16s range_pulse_amplitude_quad ==> %.16s range_pulse_amplitude_cube ==> %.16s range_pulse_amplitude_quart ==> %.16s range_pulse_phase_const ==> %.16s range_pulse_phase_lin ==> %.16s range_pulse_phase_quad ==> %.16s range_pulse_phase_cube ==> %.16s range_pulse_phase_quart ==> %.16s chirp_extraction_index ==> %.8s spare5 ==> %.8s sampling_rate ==> %.16s range_gate_early_edge_start_image ==> %.16s range_pulse_length ==> %.16s reserved2 ==> %.4s range_compressed_flag ==> %.4s reserved3 ==> %.32s quantisation_in_bits ==> %.8s quantizer_descriptor ==> %.12s dc_bias_i ==> %.16s dc_bias_q ==> %.16s gain_imbalance ==> %.16s spare6 ==> %.32s reserved4 ==> %.16s antenna_mech_bor ==> %.16s reserved5 ==> %.4s nominal_prf ==> %.16s reserved6 ==> %.32s satelite_encoded_binary_time ==> %.16s satelite_clock_time ==> %.32s satelite_clock_increment ==> %.8s spare7 ==> %.8s processing_facility_identifier ==> %.16s processing_system_id ==> %.8s processing_version_id ==> %.8s reserved7 ==> %.32s product_type_id ==> %.32s alg_id ==> %.32s nlooks_az ==> %.16s neff_looks_range ==> %.16s bandwidth_look_az ==> %.16s bandwidth_look_range ==> %.16s total_look_bandwidth_az ==> %.16s total_look_bandwidth_range ==> %.16s w_func_designator_az ==> %.32s w_func_designator_range ==> %.32s data_input_source ==> %.16s nom_res_3db_range ==> %.16s nom_res_az ==> %.16s reserved8 ==> %.32s a_track_dop_freq_const_early_image ==> %.16s a_track_dop_freq_lin_early_image ==> %.16s a_track_dop_freq_quad_early_image ==> %.16s spare8 ==> %.16s c_track_dop_freq_const_early_image ==> %.16s c_track_dop_freq_lin_early_image ==> %.16s c_track_dop_freq_quad_early_image ==> %.16s time_direction_along_pixel ==> %.8s time_direction_along_line ==> %.8s a_track_dop_freq_rate_const_early_image ==> %.16s a_track_dop_freq_rate_lin_early_image ==> %.16s a_track_dop_freq_rate_quad_early_image ==> %.16s spare9 ==> %.16s c_track_dop_freq_rate_const_early_image ==> %.16s c_track_dop_freq_rate_lin_early_image ==> %.16s c_track_dop_freq_rate_quad_early_image ==> %.16s spare10 ==> %.16s line_content_indicator ==> %.8s clut_lock_flag ==> %.4s autofocussing_flag ==> %.4s line_spacing ==> %.16s pixel_spacing_range ==> %.16s range_compression_designator ==> %.16s spare11 ==> %.16s spare12 ==> %.16s calibration_data_indicator ==> %.4s start_line_upper_image ==> %.8s stop_line_upper_image ==> %.8s start_line_bottom_image ==> %.8s stop_line_bottom_image ==> %.8s PRF_switch ==> %.4s PRF_switch_line ==> %.8s spare13 ==> %.16s yaw_steering_mode ==> %.4s parameter_table ==> %.4s nom_offnadir_angle ==> %.16s antenna_beam_number ==> %.4s spare14 ==> %.28s spare15 ==> %.120s num_anno_points ==> %.8s spare16 ==> %.8s image_annotation ==> %.2048s spare17 ==> %.26s SKYALOS using ALOS_format %d: %3s SAR mode |%.32s| (HIGH RESOLUTION) SAR mode |%.32s| (WIDE OBSERVATION) SAR mode |%.32s| (POLARIMETRY) uncertain SAR mode; assuming high resolution %32c%16c%16c%16c%16c%16c%16c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%16c%16c%16c*********** PLATFORM POSITION VECTOR ********** orbital_elements ==> |%.32s| orbital_element_1 ==> |%.16s| orbital_element_2 ==> |%.16s| orbital_element_3 ==> |%.16s| orbital_element_4 ==> |%.16s| orbital_element_5 ==> |%.16s| orbital_element_6 ==> |%.16s| num_data_points ==> |%.4s| year_of_data_points ==> |%.4s| month_of_data_points ==> |%.4s| day_of_data_points ==> |%.4s| day_of_data_points_in_year ==> |%.4s| sec_of_day_of_data ==> |%.22s| data_points_time_gap ==> |%.22s| ref_coord_sys ==> |%.64s| greenwhich_mean_hour_angle ==> |%.22s| a_track_pos_err ==> |%.16s| c_track_pos_err ==> |%.16s| radial_pos_err ==> |%.16s| a_track_vel_err ==> |%.16s| c_track_vel_err ==> |%.16s| radial_vel_err ==> |%.16s| Warning: number of orbit points %d != 28 .... reading sarleader %d %22c%22c%22c%22c%22c%22c*********** PLATFORM VECTOR ********** pos_x ==> %.22s pos_y ==> %.22s pos_z ==> %.22s vel_x ==> %.22s vel_y ==> %.22s vel_z ==> %.22s %18c%1c%579c%4c*********** ATTITUDE INFO ********** num_att_data_points ==> |%.4s| Warning: number of attitude points %d != 22 %4c%8c%4c%4c%4c%14c%14c%14c%4c%4c%4c%14c%14c%14c*********** ATTITUDE DATA ********** day_of_year ==> |%.4s| millisecond_day ==> |%.8s| pitch_data_quality ==> |%.4s| roll_data_quality ==> |%.4s| yaw_data_quality ==> |%.4s| pitch ==> |%.14s| roll ==> |%.14s| yaw ==> |%.14s| pitch_rate_data_quality ==> |%.4s| roll_rate_data_quality ==> |%.4s| yaw_rate_data_quality ==> |%.4s| pitch_rate ==> |%.14s| roll_rate ==> |%.14s| yaw_rate ==> |%.14s| *********** SAR FDR BINARY ********** record_seq_no ==> %1d record_subtype_code1 ==> %1x record_type_code1 ==> %1x record_subtype_code2 ==> %1x record_subtype_code3 ==> %1x record_length ==> %1d read %d items (%ld bytes) at position %ld BASICradar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lg I_mean = %lf Q_mean = %lf orbdir = %s lookdir = %s date = %s fd1 = %lf fdd1 = %lf number of attitude points %ld doy %d ms %d pitch %12.6f roll %12.6f yaw %12.6f nd %d iy %d id %d sec %lf dsec %lf pt0 %lf orbit point: %d %g %g %g ALOS default settings ************* led_file = %s input_file = %s num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq(iqflip) = %s offset_video(off_vid) = %s az_res = %lf nlooks = %d chirp_ext(nextend) = %d scnd_rng_mig(srm) = %s rng_spec_wgt(rhww) = %lf rm_rng_band(pctbw) = %lf rm_az_band(pctbwaz) = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate(fs) = %lf near_range = %lf %s.LEDwriting generic LED file: %s error opening%d %d %d %lf %lf %d %d %lf %lf %lf %lf %lf %lf %lf Sorry, couldn't allocate memory for A-matrix. sorry, couldn't allocate memory for A-matrix. Sorry, couldn't allocate memory for B-vector. underdetermined system 00X! a HHH &  @`  !!'p((`; <=pSS TUVpYcg@h`t uxxy|0а0&0:DNXblv  *4>HR\fpU"(`&@___stack_chk_guardQr@___stderrp@___stdoutp@dyld_stub_binderr(@___bzeror0@___sincos_stretr8@___sprintf_chkr@@___stack_chk_failrH@___strcpy_chkrP@_acosrX@_asinr`@_atanrh@_atan2frp@_atofrx@_atoir@_exitr@_fcloser@_fmodr@_fopenr@_fprintfr@_fputsr@_freadr@_freer@_fscanfr@_fseekr@_ftellr@_fwriter@_hypotr@_mallocr@_powr@_printfr@_putsr@_rewindr@_sinr@_sscanfr@_strcmpr@_strncmpr@_strncpyr@_strtodr@_strtolr@_tan__mh_execute_headermagpsrassign_sardata_paramshcfwrite_idnull_sio_structALOS_ec t C RCmul USAGE ledflag SAR_mode qu verbose intvec et_mst auss_jordan fileclockutcsecondsorbit_info attitude_info s_size'arse_ALOS_commandsrut_sio_structolyfit )etwapdr lc_fact table_6e1 bias oi ad_set_paramsALOSsardata_infodata_E_datadatasarleader 7F_ALOSEW_ALOSEfile_positionALOS_defaults ZZandle_prf_changeermite_c\_ALOSEheck_shiftross3_al]ill_shift_dataorce _int_m2roiefix_off paramsbinary_position ALOS_defaults il_ALOSEm{_ALOS_data_info ДroiALOS_LED orb _orbits_big_endian_nterpolate_ALOS_orbit _iefd ebug opp c_2ut1 dopheight_velocityldr_format orbitprm i2ecr r2eci _slow Дransform_orbits_ecr2eci bias mul exp onjg a dd bs Њ_slope d_slope ad_pol iet_flag   p@ @`+p@0` =   |0xЮ-3п9?`ELS ] P1dx+G0q{.d  d  /% 2 @PN`a@6lI}a0ea0.0IvP/d?dP @Y _gex P4@a@g    p 6'7pLuWP#j=P-  @-`  PJ ȿ п*5K@bQZjy  (/6>EMRZ`hmu}STUVZ[\]^_`abcdefghijklmnopqrstuvwxyz{@WXYSTUVZ[\]^_`abcdefghijklmnopqrstuvwxyz _ALOS_format_ALOS_ldr_orbit_ALOS_ldr_prm_Cabs_Cadd_Cexp_Cmul_Conjg_RCmul_SAR_mode_USAGE__mh_execute_header_assign_sardata_params_assign_sardata_params_ALOSE_cal2ut1_calc_dop_calc_height_velocity_check_shift_cross3__debug_dfd_die_dopp_eci2ecr_ecr2eci_fill_shift_data_force_slope_forced_slope_gauss_jordan_get_attitude_info_get_clock_get_clock_ALOSE_get_file_size_get_files_get_orbit_info_get_seconds_get_utc_gmst_handle_prf_change_handle_prf_change_ALOSE_hermite_c_interpolate_ALOS_orbit_interpolate_ALOS_orbit_slow_is_big_endian__is_big_endian___ledflag_main_matvec_null_sio_struct_parse_ALOS_commands_polyfit_prefix_off_print_ALOS_defaults_print_binary_position_print_params_prm2roi_put_sio_struct_quad_pol_quiet_flag_r1_rbias_read_ALOSE_data_read_ALOS_data_read_ALOS_sarleader_read_data_read_sardata_info_read_sardata_info_ALOSE_reset_params_roi_sdr_set_ALOS_defaults_set_file_position_settable_slc_fact_swap_swap_ALOS_data_info_tbias_transform_orbits_ecr2eci_verbose_write_ALOS_LED_write_orb_write_roi_write_roi_orbit___bzero___sincos_stret___sprintf_chk___stack_chk_fail___stack_chk_guard___stderrp___stdoutp___strcpy_chk_acos_asin_atan_atan2f_atof_atoi_exit_fclose_fmod_fopen_fprintf_fputs_fread_free_fscanf_fseek_ftell_fwrite_hypot_malloc_pow_printf_puts_rewind_sin_sscanf_strcmp_strncmp_strncpy_strtod_strtol_tandyld_stub_binderGMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process/read_ALOSE_data.c000644 015705 000000 00000030675 13505462014 025653 0ustar00sandwellwheel000000 000000 /***************************************************************************/ /* read_ALOSE_data reads an ERSDAC ALOS file containing raw signal data */ /* and creates a raw-file and PRM-file suitable for our esarp processor. */ /* The program skips the first 16252 bytes of the .raw file but copies the */ /* remaining data to the IMG.raw file after checking and fixing problems. */ /* The first record is read to determine the linelength, starting PRF, */ /* and near_range. If the line length or PRF change then the program */ /* halts. If the near_range changes then the lines are shifted and */ /* unconstrained values at the ends are set to NULL_DATA (15 or 16). */ /* (random sequence of 15 and 16's) */ /* During this processing the available parameters are added to the */ /* PRM-file. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell, Meng Wei, Jeff Bytof * * (Scripps Institution of Oceanography) * * Rob Mellors, SDSU * Date : 06/29/2006 * * based on read_ALOS_data * 12/12/09 format changes for RESTEC files Jeff Bytof * * 15-Apr-2010 Replaced ALOS identifier with ALOSE Jeff Bytof * **************************************************************************/ /* the data header information is read into the structure dfd the line prefix information is read into sdr Values read here (and or generated) are: num_rng_bins bytes_per_line good_bytes_per_line PRF pulse_dur near_range num_lines num_patches SC_clock_start SC_clock_stop clock_start clock_stop */ /* fast random number generator */ #include "image_sio.h" #include "lib_functions.h" /* #define znew (int) (z=36969*(z&65535)+(z>>16)) typedef unsigned long UL; static UL z=362436069, t[256]; void settable(UL i1) { int i; z=i1; for(i=0;i<256;i=i+1) t[i]=znew; } */ long read_sardata_info_ALOSE(FILE *, struct PRM *, int *, int *); int assign_sardata_params_ALOSE(struct PRM *, int, int *, int *); void swap_ALOS_data_info(struct sardata_info_ALOSE *sdr); void settable(unsigned long); void print_params(struct PRM *prm); int check_shift(struct PRM *, int *, int *, int *, int); int set_file_position(FILE *, long *, int); int reset_params(struct PRM *prm, long *, int *, int *); int fill_shift_data(int, int, int, int, int, char *, char *, FILE *); int handle_prf_change_ALOSE(struct PRM *, FILE *, long *, int); struct sardata_record r1; struct sardata_descriptor_ALOSE dfd; struct sardata_info_ALOSE sdr; /* differences in include file from ALOS AUIG struct sardata_descriptor_ALOSE SARDATA_DESCRIPTOR_WCS_ALOSE SARDATA_DESCRIPTOR_RVL_ALOSE(SP) struct sardata_info_ALOSE SARDATA__WCS_ALOSE SARDATA_RVL_ALOSE(SP) */ long read_ALOSE_data(FILE *imagefile, FILE *outfile, struct PRM *prm, long *byte_offset) { char *data_fbd = NULL, *data, *shift_data; int record_length0; /* length of record read at start of file */ int record_length1; /* length of record read in file */ int line_suffix_size; /* number of bytes after data */ int data_length; /* bytes of data */ int k, n, m, ishift, shift, shift0; int header_size, line_prefix_size; double pri; double get_clock_ALOSE(); settable(12345); if (verbose) fprintf(stderr, ".... reading header \n"); /* read header information */ read_sardata_info_ALOSE(imagefile, prm, &header_size, &line_prefix_size); if (verbose) fprintf(stderr, ".... reading header %d %d\n", header_size, line_prefix_size); /* calculate parameters (data length, range bins, etc) */ assign_sardata_params_ALOSE(prm, line_prefix_size, &line_suffix_size, &record_length0); /* allocate data */ if (verbose) printf("record_length0 = %d \n", record_length0); /* bytof */ if ((data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if (sdr.receive_polarization == 2) if ((data_fbd = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if ((shift_data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); /* if byte_offset < 0 this is the first time through */ /* if prf change has occurred, set file to byte_offset */ set_file_position(imagefile, byte_offset, header_size); if (verbose) fprintf(stderr, ".... reading data (byte %ld) \n", ftell(imagefile)); shift0 = 0; n = 1; m = 0; /* read the rest of the file */ while ((fread((void *)&sdr, sizeof(struct sardata_info_ALOSE), 1, imagefile)) == 1) { n++; /* checks for little endian/ big endian */ if (swap) swap_ALOS_data_info(&sdr); /* if this is partway through the file due to prf change, reset sequence, * PRF, and near_range */ if ((*byte_offset > 0) && (n == 2)) reset_params(prm, byte_offset, &n, &m); if (sdr.sequence_number != n) printf(" missing line: n, seq# %d %d \n", n, sdr.sequence_number); /* check for changes in record_length and PRF */ record_length1 = sdr.record_length - line_prefix_size; if (record_length0 != record_length1) die("record_length changed", ""); /* if prf changes, close file and set byte_offset */ if ((sdr.PRF) != prm->prf) { handle_prf_change_ALOSE(prm, imagefile, byte_offset, n); break; } /* check shift to see if it varies from beginning or from command line value */ check_shift(prm, &shift, &ishift, &shift0, record_length1); if ((verbose) && (n / 2000.0 == n / 2000)) { fprintf(stderr, " Working on line %d prf %f record length %d slant_range %d \n", sdr.sequence_number, 0.001 * sdr.PRF, record_length1, sdr.slant_range); } /* read data (and trailing bytes) */ if (fread((char *)data, record_length1, (size_t)1, imagefile) != 1) break; data_length = record_length1; /* write line header to output data */ fwrite((void *)&sdr, line_prefix_size, 1, outfile); /* write either fbd or fbs */ if (sdr.receive_polarization == 2) { for (k = 0; k < data_length; k = k + 4) { data_fbd[k / 2] = data[k]; data_fbd[k / 2 + 1] = data[k + 1]; } /* write fbd data */ if (shift == 0) { fwrite((char *)data_fbd, data_length / 2, 1, outfile); } else if (shift != 0) { fill_shift_data(shift, ishift, data_length / 2, line_suffix_size, record_length1, data_fbd, shift_data, outfile); } } else { /* write fbs data */ if (shift == 0) { fwrite((char *)data, data_length, 1, outfile); } else if (shift != 0) { fill_shift_data(shift, ishift, data_length, line_suffix_size, record_length1, data, shift_data, outfile); } } } /* calculate end time */ prm->clock_stop = get_clock_ALOSE(sdr, tbias); prm->SC_clock_stop = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_stop; /* m is non-zero only in the event of a prf change */ prm->num_lines = n - m - 1; prm->num_patches = (int)((1.0 * n) / (1.0 * prm->num_valid_az)); if (prm->num_lines == 0) prm->num_lines = 1; /* compute the PRI and round to the nearest integer microsecond then the * prf=1./pri */ pri = (int)(1.e6 * 86400. * (prm->clock_stop - prm->clock_start) / (prm->num_lines - 2.5) + .5); prm->prf = 1.e3 / pri; if (verbose) print_params(prm); free(data); free(shift_data); fclose(outfile); return (*byte_offset); } /***************************************************************************/ double get_clock_ALOSE(struct sardata_info_ALOSE sdr, double tbias) { double time; // nsd = 24.0*60.0*60.0; time = (double)sdr.sensor_acquisition_DOY + (double)sdr.sensor_acquisition_msecs_day / 1000.0 / 86400.0 + tbias / 86400.0; if (debug) printf("get_clock: time = %f \n", time); return (time); } /***************************************************************************/ long read_sardata_info_ALOSE(FILE *imagefile, struct PRM *prm, int *header_size, int *line_prefix_size) { long nitems; if (debug) print_params(prm); /* bytof */ *header_size = sizeof(struct sardata_record) + sizeof(struct sardata_descriptor_ALOSE); if (debug) printf("header_size = %d \n", *header_size); /* bytof */ *line_prefix_size = sizeof(struct sardata_info_ALOSE); if (debug) printf("*line_prefix_size = %d \n", *line_prefix_size); /* bytof */ if (*header_size != 16252) die("header size is not 16252 bytes\n", ""); /* restec format change - bytof */ if (*line_prefix_size != 292) die("line_prefix_size is not 292 bytes\n", ""); /* bytof */ if (debug) fprintf(stderr, " header_size %d line_prefix_size %d swap data %d\n", *header_size, *line_prefix_size, swap); /* make sure that we are at the beginning */ /* re-read header even if resetting after a PRF change */ rewind(imagefile); if (verbose) fprintf(stderr, ".... reading header (byte %ld) \n", ftell(imagefile)); nitems = fread((void *)&r1, sizeof(struct sardata_record), 1, imagefile); if (debug) printf("nitems = %ld \n", nitems); /* bytof */ if (debug) { fprintf(stderr, SARDATA_RECORD_WCS, SARDATA_RECORD_RVL(&r1)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_record)), ftell(imagefile)); } nitems = fread((void *)&dfd, sizeof(struct sardata_descriptor_ALOSE), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_DESCRIPTOR_WCS_ALOSE, SARDATA_DESCRIPTOR_RVL_ALOSE(&dfd)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_descriptor_ALOSE)), ftell(imagefile)); } nitems = fread((void *)&sdr, sizeof(struct sardata_info_ALOSE), 1, imagefile); if (debug) fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_info_ALOSE)), ftell(imagefile)); /* swap data little end/ big end if needed */ if (swap) swap_ALOS_data_info(&sdr); if (debug) fprintf(stderr, SARDATA__WCS_ALOSE, SARDATA_RVL_ALOSE(sdr)); return (nitems); } /***************************************************************************/ int assign_sardata_params_ALOSE(struct PRM *prm, int line_prefix_size, int *line_suffix_size, int *record_length0) { double get_clock(); prm->prf = sdr.PRF; prm->pulsedur = (1e-9) * sdr.chirp_length; *record_length0 = sdr.record_length - line_prefix_size; if (verbose) printf("sdr.record_length = %d \n", sdr.record_length); /* bytof */ if (verbose) printf("line_prefix_size = %d \n", line_prefix_size); /* bytof */ if (verbose) printf("sdr.record_length = %d \n", sdr.record_length); /* bytof */ if (verbose) printf("sdr.transmit_polarization = %d \n", sdr.transmit_polarization); if (verbose) printf("sdr.receive_polarization = %d \n", sdr.receive_polarization); prm->clock_start = get_clock_ALOSE(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; /* restec format changes - bytof */ /* record_length is 21100 */ /* beginning of line has a 292 byte prefix */ /* end of line has a 80 byte (40 pixels) suffix (right-fill pixels)*/ /* record_length0 (data length) is (20688 - 412) = 20276 */ /* n_data_pixels 10304 */ /* 2 bytes per pixel */ /* 412 bytes + (2*10304) bytes + (40*2) bytes = 21100 bytes*/ prm->good_bytes = 2 * sdr.n_data_pixels + line_prefix_size; prm->num_rng_bins = sdr.n_data_pixels + prm->chirp_ext; /* chirp_ext formerly nextend */ prm->bytes_per_line = sdr.record_length; if (sdr.receive_polarization == 2) prm->bytes_per_line = line_prefix_size + (sdr.record_length - line_prefix_size) / 2; *line_suffix_size = prm->bytes_per_line - prm->good_bytes; if (prm->near_range < 0) prm->near_range = sdr.slant_range; if (debug) printf("assign_sardata_params: \n"); /* bytof */ if (debug) print_params(prm); /* bytof */ if (*record_length0 > 50000) { fprintf(stderr, "**** record_length is %d !\n", *record_length0); die("expect something like 21100 .... try -swap option?\n", "exiting"); } return (EXIT_SUCCESS); } /***************************************************************************/ int handle_prf_change_ALOSE(struct PRM *prm, FILE *imagefile, long *byte_offset, int n) { prm->num_lines = n; fseek(imagefile, -1 * sizeof(struct sardata_info_ALOSE), SEEK_CUR); *byte_offset = ftell(imagefile); printf(" *** PRF changed from %lf to %lf at line %d (byte %ld)\n", (0.001 * prm->prf), (0.001 * sdr.PRF), n, *byte_offset); printf(" end: PRF changed from %lf to %lf at line %d \n", (0.001 * prm->prf), (0.001 * sdr.PRF), n); return (EXIT_SUCCESS); } /***************************************************************************/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process/Makefile000644 015705 000000 00000000677 13505462014 024317 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_pre_process CSRCS = ALOS_pre_process.c \ parse_ALOS_commands.c \ read_ALOS_data.c \ read_ALOSE_data.c \ swap_ALOS_data_info.c \ roi_utils.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) $(FLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process/ALOS_pre_process.c000644 015705 000000 00000020427 13505462014 026160 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Program tp prepare ALOS L1.0 data for InSAR processing. REad in data and * * leader file and write out prm and raw file for siosar * ******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 4/23/07 added code to check endianess RJM * * 07/15/08 added a command-line option to force earth radius DTS * 04/26/10 * added a command-line option to force the number of patches * merged in * ALOSE code by Jeff B and David S * * - added options -ALOSE -ALOS * added write_roi * writes out generic LED file for both AUIG and ALOSE (ERSDAC) * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "\n\nUsage: ALOS_pre_process imagefile LEDfile [-near near_range] [-radius " "RE] [-swap] [-V] [-debug] [-quiet] \n" "\ncreates data.raw and writes out parameters (PRM format) to stdout\n" "\nimagefile ALOS Level 1.0 complex file (CEOS format):\n" "LEDfile ALOS Level 1.0 LED file (CEOS leaderfile format):\n" "\n options: \n" "-near near_range specify the near_range (m) \n" "-radius RE specify the local earth radius (m) \n" "-swap do byte-swap (should be automatic) \n" "-nodopp does not calculate doppler (sets fd1 to zero!) \n" "-npatch set the number of patches \n" "-fd1 [DOPP] sets doppler centroid [fd1] to DOPP\n" "-quad adjust parameters for quad pol mod (PRF/2)\n" "-ALOSE use ERSDAC format \n" "-ALOS use AUIG format (default) \n" "-LED write GMTSAR generic LED format output and update " "PRM (default) \n" "-noLED do not write GMTSAR generic LED format output \n" "-roi write roi_pac format output\n" "-V verbose write information) \n" "-debug write even more information \n" "-quiet don't write any information \n" "-force_slope chirp_slope force a value for the chirp slope\n" "-chirp_ext chirp_ext force a value for the chirp extension " "(integer)\n" "-tbias tbias correct the clock bias (positive value " "means plus)\n" "Example:\n" "ALOS_pre_process IMG-HH-ALPSRP050420840-H1.0__A " "LED-ALPSRP050420840-H1.0__A \n"; long read_ALOS_data(FILE *, FILE *, struct PRM *, long *); long read_ALOSE_data(FILE *, FILE *, struct PRM *, long *); void parse_ALOS_commands(int, char **, char *, struct PRM *); void set_ALOS_defaults(struct PRM *); void print_ALOS_defaults(struct PRM *); void swap_ALOS_data_info(struct sardata_info *); void get_files(struct PRM *, FILE **, FILE **, char *, char *, int); int write_ALOS_LED(struct ALOS_ORB *, struct PRM *, char *); void write_orb(FILE *, struct ALOS_ORB *); // roi_pac stuff int write_roi_orbit(struct ALOS_ORB, char *); int write_roi(char *, FILE *, struct PRM, struct ALOS_ORB, char *); int ledflag; int main(int argc, char **argv) { FILE *imagefile, *ldrfile; FILE *rawfile[11], *prmfile[11]; char prmfilename[128]; int nPRF; long byte_offset; struct PRM prm; struct ALOS_ORB orb; char date[8]; if (argc < 3) die(USAGE, ""); /* set flags */ dopp = 1; roi = quad_pol = debug = verbose = swap = quiet_flag = 0; /* default is to use the old LED orbit (must use ALOS_baseline, ALOS_look) */ ledflag = 1; nPRF = 0; ALOS_format = 0; null_sio_struct(&prm); set_ALOS_defaults(&prm); /* read command line */ parse_ALOS_commands(argc, argv, USAGE, &prm); fprintf(stderr, "ledflag %d\n", ledflag); /* apply an additional timing bias based on corner reflector analysis */ tbias = tbias - 0.0020835; if (verbose) print_ALOS_defaults(&prm); if (is_big_endian_() == -1) { swap = 1; fprintf(stderr, ".... swapping bytes\n"); } else { swap = 0; } /* IMG and LED files should exist already */ if ((imagefile = fopen(argv[1], "r")) == NULL) die("couldn't open Level 1.0 IMG file \n", argv[1]); if ((ldrfile = fopen(argv[2], "r")) == NULL) die("couldn't open LED file \n", argv[2]); /* if it exists, copy to prm structure */ strcpy(prm.led_file, argv[2]); /* name and open output files and header files for raw data (but input for * later processing) */ get_files(&prm, &rawfile[nPRF], &prmfile[nPRF], prmfilename, argv[1], nPRF); /* read sarleader; put info into prm; write log file if specified */ read_ALOS_sarleader(ldrfile, &prm, &orb); /* write out orbit params in generic LED format */ if (ledflag) write_ALOS_LED(&orb, &prm, argv[1]); /* infer type of data from ldrfile */ if ((SAR_mode == 2) && (quad_pol == 0)) { fprintf(stderr, " SAR_mode = %d ; assuming quad_pol\n", SAR_mode); quad_pol = 1; } /* read Level 1.0 file; put info into prm; convert to *.raw format */ /* if PRF changes halfway through, create new set of header and data files */ /* byte_offset is non-zero only if the prf changes */ /* byte_offset gets set to point in file at prf change */ byte_offset = -1; while (byte_offset != 0) { /* if prf changes, create new prm and data files */ if (nPRF > 0) { if (verbose) fprintf(stderr, "creating multiple files due to PRF change (*.%d) \n", nPRF + 1); get_files(&prm, &rawfile[nPRF], &prmfile[nPRF], prmfilename, argv[1], nPRF); } /* set the chirp extension to 500 if FBD fs = 16000000 */ if (prm.fs < 17000000.) { prm.chirp_ext = 500; prm.chirp_slope = -5.18519e+11; } else { prm.chirp_slope = -1.03704e+12; } if (ALOS_format == 1) prm.first_sample = 146; /* read_ALOS_data returns 0 if all data file is read; returns byte offset if the PRF changes */ /* calculate parameters from orbit */ if (ALOS_format == 0) { byte_offset = read_ALOS_data(imagefile, rawfile[nPRF], &prm, &byte_offset); } /* ERSDAC - use read_ALOSE_data */ if (ALOS_format == 1) { byte_offset = read_ALOSE_data(imagefile, rawfile[nPRF], &prm, &byte_offset); } // should work for AUIG and ERSDAC ALOS_ldr_orbit(&orb, &prm); /* calculate doppler from raw file */ if (dopp == 1) calc_dop(&prm); /* divide prf in half for quad_pol */ /* fix chirp slope */ if (quad_pol) { prm.prf = 0.5 * prm.prf; prm.chirp_slope = -871580000000.0; prm.chirp_ext = 500.0; fprintf(stderr, " quad pol: fixing prf %f\n", prm.prf); fprintf(stderr, " quad pol: fixing chirp_slope %g\n", prm.chirp_slope); fprintf(stderr, " quad pol: fixing chirp_ext %d\n", prm.chirp_ext); } /* force chirp slope if asked to */ if (force_slope == 1) prm.chirp_slope = forced_slope; /* write ascii output, SIO format */ put_sio_struct(prm, prmfile[nPRF]); /* write roi_pac output */ if (roi) { // first part of rsc file write_roi(argv[1], ldrfile, prm, orb, date); // orbit file write_roi_orbit(orb, date); } nPRF++; } return (EXIT_SUCCESS); } /*------------------------------------------------------*/ void get_files(struct PRM *prm, FILE **rawfile, FILE **prmfile, char *prmfilename, char *name, int n) { /* name and open output file for raw data (but input for later processing) */ /* if more than 1 set of output files, append an integer (beginning with 2) */ if (n == 0) { sprintf(prm->input_file, "%s.raw", name); sprintf(prmfilename, "%s.PRM", name); } else { sprintf(prm->input_file, "%s.raw.%d", name, n + 1); sprintf(prmfilename, "%s.PRM.%d", name, n + 1); } /* now open the files */ if ((*rawfile = fopen(prm->input_file, "w")) == NULL) die("can't open ", prm->input_file); if ((*prmfile = fopen(prmfilename, "w")) == NULL) die("couldn't open output PRM file \n", prmfilename); } /*------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process/swap_ALOS_data_info.c000644 015705 000000 00000004431 13505462014 026607 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /* this swaps bytes */ #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) /*------------------------------------------------------------------*/ /* need to swap bytes for all */ /* must be a better way to do this */ void swap_ALOS_data_info(struct sardata_info *sdr) { FIX_SHORT(sdr->channel_indicator); FIX_SHORT(sdr->channel_code); FIX_SHORT(sdr->transmit_polarization); FIX_SHORT(sdr->receive_polarization); FIX_SHORT(sdr->onboard_range_compress); FIX_SHORT(sdr->chirp_type); FIX_SHORT(sdr->nought_line_flag); FIX_SHORT(sdr->platform_update_flag); FIX_INT(sdr->sequence_number); FIX_INT(sdr->record_length); FIX_INT(sdr->data_line_number); FIX_INT(sdr->data_record_index); FIX_INT(sdr->n_left_fill_pixels); FIX_INT(sdr->n_data_pixels); FIX_INT(sdr->n_right_fill_pixels); FIX_INT(sdr->sensor_update_flag); FIX_INT(sdr->sensor_acquisition_year); FIX_INT(sdr->sensor_acquisition_DOY); FIX_INT(sdr->sensor_acquisition_msecs_day); FIX_INT(sdr->PRF); FIX_INT(sdr->scan_ID); FIX_INT(sdr->chirp_length); FIX_INT(sdr->chirp_constant_coeff); FIX_INT(sdr->chirp_linear_coeff); FIX_INT(sdr->chirp_quad_coeff); FIX_INT(sdr->receiver_gain); FIX_INT(sdr->elec_antenna_squint_angle); FIX_INT(sdr->mech_antenna_squint_angle); FIX_INT(sdr->slant_range); FIX_INT(sdr->data_record_window_position); FIX_INT(sdr->platform_latitude); FIX_INT(sdr->platform_longitude); FIX_INT(sdr->platform_altitude); FIX_INT(sdr->platform_ground_speed); FIX_INT(sdr->platform_velocity_x); FIX_INT(sdr->platform_velocity_y); FIX_INT(sdr->platform_velocity_z); FIX_INT(sdr->platform_acc_x); FIX_INT(sdr->platform_acc_y); FIX_INT(sdr->platform_acc_z); FIX_INT(sdr->platform_track_angle_1); FIX_INT(sdr->platform_track_angle_2); FIX_INT(sdr->platform_pitch_angle); FIX_INT(sdr->platform_roll_angle); FIX_INT(sdr->platform_yaw_angle); if (ALOS_format == 0) FIX_INT(sdr->frame_counter); } /*------------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process/read_ALOS_data.c000644 015705 000000 00000036255 13505462014 025546 0ustar00sandwellwheel000000 000000 /***************************************************************************/ /* read_ALOS_data reads an ALOS IMG file containing raw signal data */ /* and creates a raw-file and PRM-file suitable for our esarp processor. */ /* The program skips the first 720 bytes of the IMG file but copies the */ /* remaining data to the IMG.raw file after checking and fixing problems. */ /* The first record is read to determine the linelength, starting PRF, */ /* and near_range. If the line length or PRF change then the program */ /* halts. If the near_range changes then the lines are shifted and */ /* unconstrained values at the ends are set to NULL_DATA (15 or 16). */ /* (random sequence of 15 and 16's) */ /* During this processing the available parameters are added to the */ /* PRM-file. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Meng Wei * * (Scripps Institution of Oceanography) * * Date : 06/29/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 06/29/2006 added the near_range as an optional command-line argument * * 02/19/2007 added the ability to remove duplicate lines * * 03/07/2007 more robust to bad data in file * * 03/26/2007 ability to swap bytes (read on PC) RJM * * 03/28/2007 part of subroutine RJM * * removed set n_azimuth to 9000 rather than default * * 07/17/08 creates new file when prf changes RJM * * 07/17/08 reformatted; added functions RJM * ***************************************************************************/ /* the data header information is read into the structure dfd the line prefix information is read into sdr Values read here (and or generated) are: num_rng_bins bytes_per_line good_bytes_per_line PRF pulse_dur near_range num_lines num_patches SC_clock_start SC_clock_stop clock_start clock_stop */ /* fast random number generator */ #include "image_sio.h" #include "lib_functions.h" #define znew (int)(z = 36969 * (z & 65535) + (z >> 16)) typedef unsigned long UL; static UL z = 362436069, t[256]; void settable(UL i1) { int i; z = i1; for (i = 0; i < 256; i = i + 1) t[i] = znew; } void swap_ALOS_data_info(struct sardata_info *sdr); long read_sardata_info(FILE *, struct PRM *, int *, int *); void print_params(struct PRM *prm); int assign_sardata_params(struct PRM *, int, int *, int *); int check_shift(struct PRM *, int *, int *, int *, int); int set_file_position(FILE *, long *, int); int reset_params(struct PRM *prm, long *, int *, int *); int fill_shift_data(int, int, int, int, int, char *, char *, FILE *); int handle_prf_change(struct PRM *, FILE *, long *, int); struct sardata_record r1; struct sardata_descriptor dfd; struct sardata_info sdr; long read_ALOS_data(FILE *imagefile, FILE *outfile, struct PRM *prm, long *byte_offset) { char *data, *shift_data; int record_length0; /* length of record read at start of file */ int record_length1; /* length of record read in file */ int start_sdr_rec_len = 0; /* sdr record length for fisrt record */ int slant_range_old = 0; /* slant range of previous record */ int line_suffix_size; /* number of bytes after data */ int data_length; /* bytes of data */ int n, m, ishift, shift, shift0, npatch_max; int header_size, line_prefix_size; double get_clock(); settable(12345); if (debug) fprintf(stderr, ".... reading header \n"); /* read header information */ read_sardata_info(imagefile, prm, &header_size, &line_prefix_size); /* calculate parameters (data length, range bins, etc) */ assign_sardata_params(prm, line_prefix_size, &line_suffix_size, &record_length0); // fprintf(stderr,"before allocate data\n"); /* allocate data */ if ((data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); // fprintf(stderr,"after allocate length0 data\n"); if ((shift_data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); // fprintf(stderr,"after allocate data\n"); /* if byte_offset < 0 this is the first time through */ /* if prf change has occurred, set file to byte_offset */ set_file_position(imagefile, byte_offset, header_size); if (verbose) fprintf(stderr, ".... reading data (byte %ld) \n", ftell(imagefile)); shift0 = 0; n = 1; m = 0; /* read the rest of the file */ while ((fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile)) == 1) { n++; /* checks for little endian/ big endian */ if (swap) swap_ALOS_data_info(&sdr); /* if this is partway through the file due to prf change, reset sequence, * PRF, and near_range */ if ((*byte_offset > 0) && (n == 2)) reset_params(prm, byte_offset, &n, &m); if (n == 2) start_sdr_rec_len = sdr.record_length; if (sdr.record_length != start_sdr_rec_len) { printf(" ***** warning sdr.record_length error %d \n", sdr.record_length); sdr.record_length = start_sdr_rec_len; sdr.PRF = prm->prf; sdr.slant_range = slant_range_old; } if (sdr.sequence_number != n) printf(" missing line: n, seq# %d %d \n", n, sdr.sequence_number); /* check for changes in record_length and PRF */ record_length1 = sdr.record_length - line_prefix_size; if (record_length0 != record_length1) die("record_length changed", ""); /* if prf changes, close file and set byte_offset */ if ((sdr.PRF) != prm->prf) { handle_prf_change(prm, imagefile, byte_offset, n); break; } /* check shift to see if it varies from beginning or from command line value */ check_shift(prm, &shift, &ishift, &shift0, record_length1); if ((verbose) && (n / 2000.0 == n / 2000)) { fprintf(stderr, " Working on line %d prf %f record length %d slant_range %d \n", sdr.sequence_number, 0.001 * sdr.PRF, record_length1, sdr.slant_range); } /* read data (and trailing bytes) */ if (fread((char *)data, record_length1, (size_t)1, imagefile) != 1) break; data_length = record_length1; slant_range_old = sdr.slant_range; /* write line header to output data */ fwrite((void *)&sdr, line_prefix_size, 1, outfile); /* write data */ if (shift == 0) { fwrite((char *)data, data_length, 1, outfile); /* if data is shifted, fill in with data values of NULL_DATA at start or * end*/ } else if (shift != 0) { fill_shift_data(shift, ishift, data_length, line_suffix_size, record_length1, data, shift_data, outfile); } } /* calculate end time and fix prf */ prm->prf = 0.001 * prm->prf; prm->clock_stop = get_clock(sdr, tbias); prm->SC_clock_stop = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_stop; /* m is non-zero only in the event of a prf change */ prm->num_lines = n - m - 1; /* calculate the maximum number of patches and use that if the default is set * to 1000 */ npatch_max = (int)((1.0 * n) / (1.0 * prm->num_valid_az)); if (npatch_max < prm->num_patches) prm->num_patches = npatch_max; if (prm->num_lines == 0) prm->num_lines = 1; if (verbose) print_params(prm); free(data); free(shift_data); fclose(outfile); return (*byte_offset); } /***************************************************************************/ double get_clock(struct sardata_info sdr, double tbias) { double time; // nsd = 24.0*60.0*60.0; /* seconds in a day */ time = (double)sdr.sensor_acquisition_DOY + (double)sdr.sensor_acquisition_msecs_day / 1000.0 / 86400.0 + tbias / 86400.0; return (time); } /***************************************************************************/ void print_params(struct PRM *prm) { fprintf(stdout, "input_file = %s \n", prm->input_file); fprintf(stdout, "num_rng_bins = %d \n", prm->num_rng_bins); fprintf(stdout, "bytes_per_line = %d \n", prm->bytes_per_line); fprintf(stdout, "good_bytes_per_line = %d \n", prm->good_bytes); fprintf(stdout, "first_sample = %d \n", prm->first_sample); fprintf(stdout, "PRF = %f \n", prm->prf); fprintf(stdout, "pulse_dur = %e \n", prm->pulsedur); fprintf(stdout, "near_range = %f \n", prm->near_range); fprintf(stdout, "num_lines = %d \n", prm->num_lines); fprintf(stdout, "num_patches = %d \n", prm->num_patches); fprintf(stdout, "SC_clock_start = %16.10lf \n", prm->SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf \n", prm->SC_clock_stop); fprintf(stdout, "clock_start = %16.12lf \n", prm->clock_start); fprintf(stdout, "clock_stop = %16.12lf \n", prm->clock_stop); } /***************************************************************************/ long read_sardata_info(FILE *imagefile, struct PRM *prm, int *header_size, int *line_prefix_size) { long nitems; *header_size = sizeof(struct sardata_record) + sizeof(struct sardata_descriptor); *line_prefix_size = sizeof(struct sardata_info); if (*header_size != 720) die("header size is not 720 bytes\n", ""); if (*line_prefix_size != 412) die("header size is not 720 bytes\n", ""); if (debug) fprintf(stderr, " header_size %d line_prefix_size %d swap data %d\n", *header_size, *line_prefix_size, swap); /* make sure that we are at the beginning */ /* re-read header even if resetting after a PRF change */ rewind(imagefile); if (verbose) fprintf(stderr, ".... reading header (byte %ld) \n", ftell(imagefile)); /* data processed before Sept 15, 2006 have a timing bias of 0.9 s */ /* data processed after this data have a smaller bias 0.0 s */ nitems = fread((void *)&r1, sizeof(struct sardata_record), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_RECORD_WCS, SARDATA_RECORD_RVL(&r1)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_record)), ftell(imagefile)); } nitems = fread((void *)&dfd, sizeof(struct sardata_descriptor), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_DESCRIPTOR_WCS, SARDATA_DESCRIPTOR_RVL(&dfd)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_descriptor)), ftell(imagefile)); } nitems = fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile); if (debug) fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_info)), ftell(imagefile)); /* swap data little end/ big end if needed */ if (swap) swap_ALOS_data_info(&sdr); if (debug) fprintf(stderr, SARDATA__WCS, SARDATA_RVL(sdr)); return (nitems); } /***************************************************************************/ int assign_sardata_params(struct PRM *prm, int line_prefix_size, int *line_suffix_size, int *record_length0) { double get_clock(); prm->prf = sdr.PRF; prm->pulsedur = (1e-9) * sdr.chirp_length; *record_length0 = sdr.record_length - line_prefix_size; prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; /* record_length is 21100 */ /* beginning of line has a 412 byte prefix */ /* end of line has a 80 byte (40 pixels) suffix (right-fill pixels)*/ /* record_length0 (data length) is (20688 - 412) = 20276 */ /* n_data_pixels 10304 */ /* 2 bytes per pixel */ /* 412 bytes + (2*10304) bytes + (40*2) bytes = 21100 bytes*/ prm->good_bytes = 2 * sdr.n_data_pixels + line_prefix_size; prm->num_rng_bins = sdr.n_data_pixels + prm->chirp_ext; /* chirp_ext formerly nextend */ prm->bytes_per_line = sdr.record_length; *line_suffix_size = sdr.record_length - prm->good_bytes; if (prm->near_range < 0) prm->near_range = sdr.slant_range; if (*record_length0 > 50000) { fprintf(stderr, "**** record_length is %d !\n", *record_length0); die("expect something like 21100 .... try -swap option?\n", "exiting"); } return (EXIT_SUCCESS); } /***************************************************************************/ int check_shift(struct PRM *prm, int *shift, int *ishift, int *shift0, int record_length1) { *shift = 2 * floor(0.5 + (sdr.slant_range - prm->near_range) / (0.5 * SOL / prm->fs)); *ishift = abs(*shift); if (*ishift > record_length1) { printf(" end: shift exceeds data window %d \n", *shift); die("exitting", ""); } if (*shift != *shift0) { printf(" near_range, shift = %d %d \n", sdr.slant_range, *shift); *shift0 = *shift; } return (EXIT_SUCCESS); } /***************************************************************************/ int set_file_position(FILE *imagefile, long *byte_offset, int header_size) { if (*byte_offset < 0) { *byte_offset = 0; rewind(imagefile); fseek(imagefile, header_size, SEEK_SET); } else { fseek(imagefile, *byte_offset, SEEK_SET); } return (EXIT_SUCCESS); } /***************************************************************************/ int reset_params(struct PRM *prm, long *byte_offset, int *n, int *m) { double get_clock(); prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; prm->prf = sdr.PRF; prm->near_range = sdr.slant_range; *n = sdr.sequence_number; *m = *n; *byte_offset = 0; if (verbose) { fprintf(stderr, " new parameters: \n sequence number %d \n PRF %f\n near_range %lf\n", *n, 0.001 * prm->prf, prm->near_range); } return (EXIT_SUCCESS); } /***************************************************************************/ int fill_shift_data(int shift, int ishift, int data_length, int line_suffix_size, int record_length1, char *data, char *shift_data, FILE *outfile) { int k; /* NULL_DATA = 15; znew randonly is 0 or 1 */ if (shift > 0) { for (k = 0; k < ishift; k++) shift_data[k] = NULL_DATA + znew % 2; for (k = 0; k < data_length - ishift; k++) shift_data[k + ishift] = data[k]; } /* if data is shifted, fill in with data vlues of NULL_DATA at end */ if (shift < 0) { for (k = 0; k < data_length - ishift - line_suffix_size; k++) shift_data[k] = data[k + ishift]; for (k = data_length - ishift - line_suffix_size; k < record_length1; k++) shift_data[k] = NULL_DATA + znew % 2; } /* write the shifted data out */ fwrite((char *)shift_data, data_length, 1, outfile); return (EXIT_SUCCESS); } /***************************************************************************/ int handle_prf_change(struct PRM *prm, FILE *imagefile, long *byte_offset, int n) { prm->num_lines = n; /* skip back to beginning of the line */ fseek(imagefile, -1 * sizeof(struct sardata_info), SEEK_CUR); /* define byte_offset */ *byte_offset = ftell(imagefile); /* tell the world */ printf(" *** PRF changed from %lf to %lf at line %d (byte %ld)\n", (0.001 * prm->prf), (0.001 * sdr.PRF), n, *byte_offset); printf(" end: PRF changed from %lf to %lf at line %d \n", (0.001 * prm->prf), (0.001 * sdr.PRF), n); return (EXIT_SUCCESS); } /***************************************************************************/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process/parse_ALOS_commands.c000644 015705 000000 00000006233 13505462014 026626 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /* reads options */ /* start with third arguement */ int ledflag; void parse_ALOS_commands(int na, char **a, char *USAGE, struct PRM *prm) { int n; tbias = 0.; for (n = 3; n < na; n++) { if (!strcmp(a[n], "-near")) { n++; if (n == na) die(" no option after -near!\n", ""); prm->near_range = atof(a[n]); fprintf(stderr, " setting near_range to %9.2lf \n", prm->near_range); } else if (!strcmp(a[n], "-radius")) { n++; if (n == na) die(" no option after -radius!\n", ""); prm->RE = atof(a[n]); fprintf(stderr, " setting radius to %f \n", prm->RE); } else if (!strcmp(a[n], "-force_slope")) { n++; if (n == na) die(" no option after -force_slope!\n", ""); force_slope = 1; forced_slope = atof(a[n]); fprintf(stderr, " setting chirp slope to %f \n", forced_slope); } else if (!strcmp(a[n], "-fd1")) { n++; if (n == na) die(" no option after -fd1!\n", ""); prm->fd1 = atof(a[n]); dopp = 0; fprintf(stderr, " setting fd1 to %f \n", prm->fd1); } else if (!strcmp(a[n], "-chirp_ext")) { n++; if (n == na) die(" no option after -chirp_ext!\n", ""); prm->chirp_ext = atoi(a[n]); fprintf(stderr, " setting chirp extent to %d \n", prm->chirp_ext); } else if (!strcmp(a[n], "-nrows")) { n++; if (n == na) die(" no option after -nrows!\n", ""); prm->nrows = atoi(a[n]); fprintf(stderr, " setting nrows to %d \n", prm->nrows); } else if (!strcmp(a[n], "-npatch")) { n++; if (n == na) die(" no option after -npatches!\n", ""); prm->num_patches = atoi(a[n]); fprintf(stderr, " setting npatches to %d \n", prm->num_patches); } else if (!strcmp(a[n], "-tbias")) { n++; if (n == na) die(" no option after -tbias!\n", ""); tbias = atof(a[n]); fprintf(stderr, " setting tbias to %f \n", tbias); } else if (!strcmp(a[n], "-nodopp")) { dopp = 0; prm->fd1 = prm->fdd1 = prm->fddd1 = 0.0; fprintf(stderr, " no doppler calculation (sets to zero!) \n"); } else if (!strcmp(a[n], "-quad")) { quad_pol = 1; fprintf(stderr, " quad pol data: divide PRF by 2; defining chirp_slope) \n"); } else if (!strcmp(a[n], "-ALOSE")) { ALOS_format = 1; fprintf(stderr, " data is in ALOSE (ERSDAC) format \n"); } else if (!strcmp(a[n], "-ALOSA")) { ALOS_format = 0; fprintf(stderr, " data is in ALOSA (AUIG) format) \n"); } else if (!strcmp(a[n], "-LED")) { ledflag = 1; fprintf(stderr, " creating *.LED file \n"); } else if (!strcmp(a[n], "-noLED")) { ledflag = 0; fprintf(stderr, " no *.LED file written (default) \n"); } else if (!strcmp(a[n], "-roi")) { roi = 1; fprintf(stderr, " writing roi_pac rsc files \n"); } else if (!strncmp(a[n], "-debug", 2)) { verbose = debug = 1; fprintf(stderr, " debug and verbose output \n"); } else if (!strncmp(a[n], "-V", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else if (!strncmp(a[n], "-v", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_merge/ALOS_merge000755 015705 000000 00000076200 13507242210 023264 0ustar00sandwellwheel000000 000000  H__PAGEZERO(__TEXT``__text__TEXTp9p__stubs__TEXTKK__stub_helper__TEXTKK__const__TEXTLL__cstring__TEXTMdM__unwind_info__TEXTt_t___DATA``__nl_symbol_ptr__DATA``__got__DATA``__la_symbol_ptr__DATA ` `__data__DATA``__common__DATA`\H__LINKEDITpp "0ppHPp`qtDy P**x2 /usr/lib/dyld%? 2   *(p 8/usr/lib/libSystem.B.dylib&t()tUHAWAVAUATSHIHNHHEЃ5H=7OH5.=# HOfDžeDžmerg@HbOfDžeDžmergtLNHLHPLHL8H5=H8HPHL8H5Z=H8I~H5f<8IHuIvH=P<< I~H5><8IHuIvH=(< H5.<HPu8HHuH=;HP L8L LLhH H LHNLV8HH LH,HPH7H5~;L7IHuH=};H8N H5T;H 7IHuH=O;H H5:;HP7HHuH=.;HP \Wf.v#H=;H5: L-MA}tcL5KI>H5:6DžA}t$I>H5:H816 DžH8HLHIA}tHYKH8H5:H 1s6H HLH`IHC6K'A}t!H KH8H5w:1LLI#6HH HHWH*W*h^,`H{K8u Hn0HHHH&HiJHH;Eu1H[A\A]A^A_]K5UHAWAVAUATSHLEHMHHKHJHJ9VIԉA.HJHIH#H=9LcO4LH5]9 5LH5h9 5toLH5j94t\LH5Z94wLH5o94HJHBIHH=A9,@HAJHIHH=8Q4=f.fKtLuLK4HHH81H5r8L3\D9H[A\A]A^A_]HHHH8H581L3H3H}33f.DUHAWAVSPIIHH3H57HH)3LL3H57HLH[A^A_]2@UHAVSIHLH[A^]/ f.DUHAWAVAUATSHHHHHGHHELcLIdH2HH=H8tHaGH8H571D2H0Hr2HL01H(E1HHG8{HFH80D8D<@H DHHHLHPHTHXH\H`HbHdHfHhHlH pH(rH0tH8xH@|HHHPHXH`HhHpHxHHHHHHHHHHHHHHHDDDDDLHH55H4ATASARAUAWL0Hxph`XPH@80(  .HpDLMu1HDt$H]CH8H1H58Dr.HD; H(u+H?DtHCH81H58LD-.LLLLH.L ML0LHH.LLMML HH-H(DHH-IƾLH-H: E11H(HD HCC8t"HBH8H571DH(.-H4-HAHH;EuH(H[A\A]A^A_],f.UH*M4.Y*]8*e<^ff^.Xf(XXf(]ÐUH]DUH]DUHHHH7AH8H571X,<,@UHGOYFYN\OYFY\JOYFY\B]UHp)X &-(^Y-W*X^XW*f(X^XhW*^X]UHHXXXXXXXXHHHHHH HHHHH8H0H(H (],HXLJhayLJlayLJpaytLJayLJayLJay(,Ht$iH(8HXhxHHH]ÐUHAWAVAUATSHxIH>HHEHL?H5`4HH1Hh)fIHpIHxIHIHIHIHIHI HIHI HI(HI8HLLL-|6DLH5y3(u=LL(;u-H^=H81LLH G3Mv(f.fLH543(u=HpL(;u)H =H81LLH 2M"(LH52G(u=HxL:(;u)H<H81LLH 2M'LH52'u=HL';u)Hj<H81LLH t2M'LH5h2'u=HL';u)H<H81LLH 22M2'LH5%2W'u=HLJ';u)H;H81LLH 1M&LH51'u=HL&;u)Hz;H81LLH 1M&LH51&u=HL&;u)H*;H81LLH ^1MB&LH5Q1g&u=HLZ&;u)H:H81LLH 1M%LH5 1&u=HL &;u)H:H81LLH 0M%LH50%u=HL%;u)H::H81LLH 0MR%LH5z0w%u=HLj%;u)H9H81LLH D0M%LH520'%u=HL%;u)H9H81LLH /M$ILH5/$uJLt$AA}u4HC9H81H552LH /MAT$f.LH5/w$uML$AA}u7H8H81H51LH O/MA#f.LH57/$uML#ALA}u7H8H81H5x1LH .MA#f.LH5.#uMLW#APA}u7H&8H81H51LH .MA7#f.LH5.W#uML"ATA}u7H7H81H50LH \.MA"f.LH5E."uML"AXA}u7Hf7H81H5X0LH .MAw"f.LH5-"uML7"A\A}u7H7H81H5/LH -MA"f.LH5-7"uML!A`A}u7H6H81H5/LH `-MA!f.LH5K-!uMLw!AA}u7HF6H81H58/LH -MAW!f.LH5,w!uML!AlA}u7H5H81H5.LH ,MA f.LH5,!uML AdA}u7H5H81H5x.LH c,MA f.LH5L, uMLW AhA}u7H&5H81H5.LH ,MA7 f.LH5+W uMLAA}u7H4H81H5-LH +MAf.LH5+uMLApA}u7Hf4H81H5X-LH h+MAwf.LH5M+uML7AtA}u7H4H81H5,LH +MAf.LH5*7uMLAxA}u7H3H81H5,LH *MAf.LH5*uMLwAtA}u7HF3H81H58,LH O*MAWf.LH5B*wuMLAxA}u7H2H81H5+LH )MAf.LH5)uMLAA}u7H2H81H5x+LH )MAf.LH5)LuJLNA;u4H%2H8H5++LH U)M9f.DLH5C)WL-*uFLA;u0H1H8H5*LH )Mf.LH5(u=LA;u'Hh1H8H5n*LH (M|fLH5(u=LAA;u'H1H8H5*LH o(M,fLH5g(Wu=LA;u'H0H8H5)LH +(MfLH5"(u=LA;u'Hx0H8H5~)LH 'MfLH5'u=LQA;u'H(0H8H5.)LH 'M<fLH5'gu=LA;u'H/H8H5(LH ['MfLH5Y'u=LA;u'H/H8H5(LH 'MfLH5'u=LaA;u'H8/H8H5>(LH &MLfLH5&wu=LA;u'H.H8H5'LH &MfLH5&'u=LA;u'H.H8H5'LH K&MfLH5G&u=LqA;u'HH.H8H5N'LH &M\fLH5&u=L!A;u'H-H8H5&LH %M fLH5%7u=LA;u'H-H8H5&LH %MfLH5t%u=LA ;u'HX-H8H5^&LH 8%MlfLH5+%u=L1A(;u'H-H8H5&LH $MfLH5$Gu=LA0;u'H,H8H5%LH $MfLH5$u=LA8;u'Hh,H8H5n%LH ]$M|fLH5W$u=LAA@;u'H,H8H5%LH $M,fLH5$Wu=LAH;u'H+H8H5$LH #MfLH5#u=LAP;u'Hx+H8H5~$LH #MfLH5#u=LQAX;u'H(+H8H5.$LH R#M<fLH5K#gu=LA`;u'H*H8H5#LH #MfLH5#u=LAh;u'H*H8H5#LH "MfLH5"u=LaAp;u'H8*H8H5>#LH "MLfLH5v"wu=LAx;u'H)H8H5"LH :"MfLH5+"'u=LA;u'H)H8H5"LH !MfLH5!u=LqA;u'HH)H8H5N"LH !M\fLH5!u=L!A;u'H(H8H5!LH _!M fLH5U!7u=LA;u'H(H8H5!LH !MfLH5!u=LA;u'HX(H8H5^!LH MlfLH5 u=L1A;u'H(H8H5!LH MfLH5 Gu=LA;u'H'H8H5 LH I MfLH5A u=LA;u'Hh'H8H5n LH  M|fLH5 u=LAA;u'H'H8H5 LH M,fLH5Wu=LA;u'H&H8H5LH MfLH5yu=LA;u'Hx&H8H5~LH =MfLH53u=LQA;u'H(&H8H5.LH M<f1HhH5LL7\H%HH;EuHx[A\A]A^A_]DUHAWAVSPHIIHHHc&8u+H%H8H5l1LLIH[A^A_]H[A^A_]UHAWAVATSHIIIHSAH%8u)H!%H8H51LLM[A\A^A_]1[A\A^A_]f.@UHAWAVATSHIIIHH%8u)H$H8H5LLM[A\A^A_][A\A^A_]ÐUHAWAVSPILupaytH5y1LzAaytH5p1LZATaytH5a1L:IH5_HgtH5P1LHAf.u{H59LAdaytH5-1LIH5HtH51LHIH5HtH51LH[A0f.u{H5L5ApaytH51LAlaytH51L IH5H"tH51LH AXf.Gu{H5L A`f.!u{H5Lv Ahf.u{H5}LP AtaytH5t1L0 AxaytH5e1L Af.u{@AH5HL Af.fu{H58L Af.@u{H5(L Af.u{H5Lo A\aytH51LO AaytH5 1L/ A8f. u{H5L H55L= tH51LL AhaytH51L ALaytH51L APaytH51L} Af. u{H5LW AHf. u{H5L1 Af. u{H5L AaytH51L AXaytH5u1L Af.P u{H5cL Af.* u{H5ZL Af. u{H5PLY Af. u{H5DL3 IH5XH` tH5.1LH I8H5%H- tH5 1LH I H5H tH51LH I(H5H tH51LHg APf. u{H5LA A@f. u{H5L A8f. u{H5LA f.z u{H5LA(f.T u{H5pLAf.. u{H5[LAf. u{H5FL]Af. u{H56L7Af. u{H5*LAf. u{H5LAf.p u{H5LAf.J u{H5LApf.$ u{H5LyAxf.u{H5LSAf.u{H5L-Af.u{H5LAf.u{H5LAf.fu{H5LAf.@u{H5LAf.u{H5LoAf.u{H5LIAf.u{H5L#Af.u{H5xLIH5"H*tH5g1LHI0H5HtH5R1LHAf.u{H5DLqH[A^A_]ÐUHAWAVAUATSHXIH H8H51L+H5LIHuH=LIcLH}%HEAPIc\HcH)L$LILHEHHIľH}HUL}LA\HcHuйfDDN<t TNuADfWKf.@W*ZA\ ZADW*ZA\(ZADHH9|ETAA9LuHMH]f.IcHiMbHH?H'W*W*^ +f.u!zHLH81H5DjHMD}IcLH}YE1A\DHcHUJ<tHHcH uH]JE1UW*ZA\ ZW*HEBWZA\(HZfB~DfA~CDB )MC XC CXDCDf(ECDGtIH]I9Lu D}AAA9HMoIfWɅ~PfWE1f.MC CDMZ^ZZXII9|W*^HEYpfWYxLLH}LHX[A\A]A^A_]vf.UHHc\LcLDFAtHLcIB<uLcBW:A*Z\ ZBBW*Z\(ZBD]ÐUHYY(]ÐUHZqZZf:!(]UHW Af:!]fUHY]UHX]UHZZ(lZ]% %%%%%%%%%% %"%$%&%(%*%,%.%0%2%4%6%8LiAS%Yhhh.hBhVhdhph|hhhhxhnhdhZhPhFh %d subtype ==> %.4s record_length ==> %d data_line_number ==> %d data_record_index ==> %d n_left_fill_pixels ==> %d n_data_pixels ==> %d n_right_fill_pixels ==> %d sensor_update_flag ==> %d sensor_acquisition_year ==> %d sensor_acquisition_DOY ==> %d sensor_acquisition_msecs_day ==> %d channel_indicator ==> %d channel_code ==> %d transmit_polarization ==> %d receive_polarization ==> %d PRF ==> %d scan_ID ==> %d onboard_range_compress ==> %d chirp_type ==> %d chirp_length ==> %d chirp_constant_coeff ==> %d chirp_linear_coeff ==> %d chirp_quad_coeff ==> %d receiver_gain ==> %d nought_line_flag ==> %d elec_antenna_elevation_angle ==> %d mech_antenna_elevation_angle ==> %d elec_antenna_squint_angle ==> %d mech_antenna_squint_angle ==> %d slant_range ==> %d data_record_window_position ==> %d platform_update_flag ==> %d platform_latitude ==> %d platform_longitude ==> %d platform_altitude ==> %d platform_ground_speed ==> %d platform_velocity_x ==> %d platform_velocity_y ==> %d platform_velocity_z ==> %d platform_acc_x ==> %d platform_acc_y ==> %d platform_acc_z ==> %d platform_track_angle_1 ==> %d platform_track_angle_2 ==> %d platform_pitch_angle ==> %d platform_roll_angle ==> %d platform_yaw_angle ==> %d frame_counter ==> %d first frame %d (start_frame %d) first line written %ld frame %d last frame %d (nlines written %ld) %s %s %s = %s input_fileled_fileout_amp_fileout_data_filescnd_rng_migdeskewFlip_iqoffset_videoref_fileSLC_fileorbdirlookdirdatenrowsnum_linesbytes_per_linegood_bytes_per_linefirst_linenum_patchesfirst_samplenum_valid_azSC_identitychirp_extst_rng_binnum_rng_binsref_identitynlooksrshiftashiftxshiftyshiftSLC_formatSC_clock_startSC_clock_stopicu_startclock_startclock_stopcaltoneearth_radiusequatorial_radiuspolar_radiusSC_velSC_heightSC_height_startSC_height_endnear_rangePRFI_meanQ_meanaz_resrng_samp_ratechirp_slopepulse_durradar_wavelengthrng_spec_wgtrm_rng_bandrm_az_bandfd1fdd1fddd1sub_int_rsub_int_astretch_rstretch_aa_stretch_ra_stretch_abaseline_startalpha_startbaseline_endalpha_endSLC_scale %s (%s) = %s %s (%s) = %s (%d) %s (%s) = %s (%lf) num_valid_az = %d nrows = %d first_line = %d XXXXXXXXdeskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate = %lf input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d PRF = %lf pulse_dur = %e near_range = %lf num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s date = %.6s orbdir = %.1s lookdir = %.1s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lf I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %12.8lf fddd1 = %lf sub_int_r = %f sub_int_a = %f B_parallel = %f B_perpendicular = %f baseline_start = %f alpha_start = %f baseline_end = %f alpha_end = %f SLC_file = %s dtype = %s SLC_scale = %f .... calculating doppler for %s can't open Working on line %d ((Xap@@K@ 8P (P)0*48 !KKKKKKKKKL LL L*L4L>LHLRL\LfLpLzLLM" `@___stack_chk_guardQr@___stderrp@dyld_stub_binderr @___sincos_stretr(@___stack_chk_failr0@___strcat_chkr8@___strcpy_chkr@@_atan2frH@_atofrP@_atoirX@_exitr`@_fcloserh@_fopenrp@_fprintfrx@_fputsr@_freadr@_freer@_fscanfr@_fseekr@_fwriter@_hypotr@_mallocr@_rewindr@_strcmpr@_strcpyr@_strncmp__mh_execute_headermainpassign_outputfrget_is_big_endian_dcnull_sio_structCRCmulUSAGEALOS_formatSAR_modequstbiasverbose"arse_ALOS_mergeut_sio_structrefix_off+/ill_PRMorce0ead_biasoiALOS_raw_datadata0clocksintdouble<=_=ieebugopp=ross3_alc_dop>econdsio_structtring>?BtuvwmulexponjgaЕddbs_sloped_slopead_poliet_flaglc_factwap"`0 P0`1`pp  `JJJ!pJ'J.J5 `? `FZiEs| ` `  ` ``0;:`p!`: p#4F aR;b al ax aPI a a (a 0a 8a'-39AHQX_emt|*+./0123456789:;<=>?@ABC@,-*+./0123456789:;<=>?@AB _ALOS_format_Cabs_Cadd_Cexp_Cmul_Conjg_RCmul_SAR_mode_USAGE__mh_execute_header_assign_output_calc_dop_cross3__debug_die_dopp_fill_PRM_force_slope_forced_slope_get_clock_get_double_get_int_get_seconds_get_sio_struct_get_string_is_big_endian__is_big_endian___main_null_sio_struct_parse_ALOS_merge_prefix_off_put_sio_struct_quad_pol_quiet_flag_rbias_read_ALOS_raw_data_read_data_roi_slc_fact_swap_tbias_verbose___sincos_stret___stack_chk_fail___stack_chk_guard___stderrp___strcat_chk___strcpy_chk_atan2f_atof_atoi_exit_fclose_fopen_fprintf_fputs_fread_free_fscanf_fseek_fwrite_hypot_malloc_rewind_strcmp_strcpy_strncmpdyld_stub_binderGMTSAR_V5.7/preproc/ALOS_preproc/ALOS_merge/Makefile000644 015705 000000 00000000500 13505462014 023053 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_merge CSRCS = ALOS_merge.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_merge/ALOS_merge.c000644 015705 000000 00000017102 13505462014 023502 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Program to merge adjacent frames of ALOS palsar data * *******************************************************************************/ /******************************************************************************** * Creator: Rob Mellors * (San Diego State University) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * *******************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "Usage: \n" "ALOS_merge PRMfile1 PRMfile2 [-output outfile] [-V] [-nodopp]\n\n" " appends file2 onto file1 (omitting duplicate lines)\n" " updates num_lines and doppler (average) in PRM file\n" " output named merge.raw by default\n" " if outfile specified, creates outfile.raw and outfile.PRM\n" " -V verbose\n" " -nodopp do not calculate doppler (default is calculate doppler)\n" "example: ALOS_merge IMG-HH-ALPSRP057130830-H1.0__A.PRM " "IMG-HH-ALPSRP057130840-H1.0__A.PRM -outout foo -V\n"; void parse_ALOS_merge(int, int, char **, char *, char *); void assign_output(char *, char *, char *); void fill_PRM(struct PRM *, FILE *); long read_ALOS_raw_data(FILE *, FILE *, struct PRM *, int *); int main(int argc, char **argv) { char RawOutName[128], tmp[128]; char PRMOutName[128]; int start_frame, narg; long nlines1, nlines2, nlines; double overlap; FILE *PRMfile1, *RAWfile1; FILE *PRMfile2, *RAWfile2; FILE *PRMfile3, *RAWfile3; struct PRM p1; struct PRM p2; struct PRM p3; narg = 3; if (argc < narg) die(USAGE, ""); verbose = 0; /* default name */ strcpy(tmp, "merge"); if (argc > narg) parse_ALOS_merge(argc, narg, argv, tmp, USAGE); assign_output(RawOutName, PRMOutName, tmp); /* open files */ if ((PRMfile1 = fopen(argv[1], "r")) == NULL) die("can't open prfile", argv[1]); if ((PRMfile2 = fopen(argv[2], "r")) == NULL) die("can't open prfile", argv[2]); if ((PRMfile3 = fopen(PRMOutName, "w")) == NULL) die("can't open prfile", PRMOutName); /* read prm values; put file1 prm into file 3 */ fill_PRM(&p1, PRMfile1); fill_PRM(&p2, PRMfile2); rewind(PRMfile1); fill_PRM(&p3, PRMfile1); strcpy(p3.input_file, RawOutName); /* open raw files */ if ((RAWfile1 = fopen(p1.input_file, "r")) == NULL) die("cannot open ", p1.input_file); if ((RAWfile2 = fopen(p2.input_file, "r")) == NULL) die("cannot open ", p2.input_file); /* output */ if ((RAWfile3 = fopen(RawOutName, "w")) == NULL) die("cannot open output file ", RawOutName); /* check whether scenes overlap in time */ overlap = p1.SC_clock_stop - p2.SC_clock_start; if (overlap < 0) die("frames do not overlap in time", ""); if (verbose) fprintf(stderr, " frame 1 %lf %lf\n frame 2 %lf %lf overlap %lf\n", p1.SC_clock_start, p1.SC_clock_stop, p2.SC_clock_start, p2.SC_clock_stop, overlap); /* read files and write */ /* write out all lines with frame numner > last_frame */ start_frame = -1; if (verbose) fprintf(stderr, " reading file 1 %s\n", p1.input_file); nlines1 = read_ALOS_raw_data(RAWfile1, RAWfile3, &p1, &start_frame); if (verbose) fprintf(stderr, " reading file 2 %s\n", p2.input_file); nlines2 = read_ALOS_raw_data(RAWfile2, RAWfile3, &p2, &start_frame); fclose(RAWfile3); /* end of data writing */ nlines = nlines1 + nlines2; if (verbose) fprintf(stderr, " nlines1 %ld nlines2 %ld nlines %ld \n", nlines1, nlines2, nlines); /* write out all non-null parameters */ p3.SC_clock_stop = p2.SC_clock_stop; p3.ht_end = p2.ht_end; p3.num_lines = nlines1 + nlines2; p3.num_patches = (int)((1.0 * nlines) / (1.0 * p3.num_valid_az)); /* now recalculate doppler for the whole file */ if (dopp == 1) calc_dop(&p3); /* write out PRM file */ put_sio_struct(p3, PRMfile3); return (EXIT_SUCCESS); } /*-----------------------------------------------*/ void fill_PRM(struct PRM *p, FILE *Pfile) { /* set all prm parameters in structure to NULL values */ null_sio_struct(p); /* now rad new ones */ get_sio_struct(Pfile, p); } /*-----------------------------------------------*/ void assign_output(char *rawname, char *prmname, char *base) { strcpy(rawname, base); strcat(rawname, ".raw"); strcpy(prmname, base); strcat(prmname, ".PRM"); } /*-----------------------------------------------*/ /* reads options */ /* start with third argument */ void parse_ALOS_merge(int na, int nstart, char **a, char *filename, char *USAGE) { int n; verbose = 0; debug = 0; dopp = 1; /* default is to calculate doppler */ for (n = nstart; n < na; n++) { if (!strcmp(a[n], "-output")) { n++; if (n > na) die(" no option after -output!\n", ""); strcpy(filename, a[n]); fprintf(stderr, " setting output file %s \n", filename); n++; } else if (!strcmp(a[n], "-V")) { verbose = 1; fprintf(stderr, " verbose output \n"); n++; } else if (!strcmp(a[n], "-v")) { verbose = 1; fprintf(stderr, " verbose output \n"); n++; } else if (!strcmp(a[n], "-nodopp")) { dopp = 0; fprintf(stderr, " not calculating doppler centroid \n"); n++; } else if (!strcmp(a[n], "-debug")) { debug = 1; fprintf(stderr, " debugging output \n"); n++; } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } } /*-----------------------------------------------*/ /* read raw files */ long read_ALOS_raw_data(FILE *imagefile, FILE *outfile, struct PRM *prm, int *start_frame) { struct sardata_info sdr; char *data; int line_prefix_size, line_data_size; int first_frame, frame = 0; /* frame counter */ long n, nlines; line_prefix_size = sizeof(struct sardata_info); line_data_size = prm->bytes_per_line - line_prefix_size; data = malloc(line_data_size * sizeof(char)); if (debug) fprintf(stderr, ".... reading data (%d bytes)\n", line_prefix_size + line_data_size); n = 0; nlines = 0; while ((fread((void *)&sdr, line_prefix_size, 1, imagefile)) == 1) { if (debug) fprintf(stderr, SARDATA__WCS, SARDATA_RVL(sdr)); frame = sdr.frame_counter; if (n == 0) { first_frame = frame; if (verbose) fprintf(stderr, "first frame %d (start_frame %d)\n", first_frame, *start_frame); } /* write line if not a duplicate */ if (frame > *start_frame) { if (verbose) if (nlines == 0) fprintf(stderr, " first line written %ld frame %d \n", n, frame); /* read the data */ fread(data, sizeof(char), line_data_size, imagefile); /* write header */ fwrite(&sdr, sizeof(char), line_prefix_size, outfile); /* write data */ fwrite(data, sizeof(char), line_data_size, outfile); nlines++; } else { fseek(imagefile, line_data_size, SEEK_CUR); } n++; } /* this is the first frame of the next file */ *start_frame = frame; if (verbose) fprintf(stderr, "last frame %d (nlines written %ld)\n", *start_frame, nlines); free(data); return (nlines); } /***************************************************************************/ double get_clock(struct sardata_info sdr, double tbias) { double time; // nsd = 24.0*60.0*60.0; /* seconds in a day */ time = ((double)sdr.sensor_acquisition_year) * 1000 + (double)sdr.sensor_acquisition_DOY + (double)sdr.sensor_acquisition_msecs_day / 1000.0 / 86400.0 + tbias / 86400.0; return (time); } /***************************************************************************/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_mosaic_ss_2frames/Makefile000644 015705 000000 00000000637 13505462014 025366 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_mosaic_ss_2frames CSRCS = ALOS_mosaic_ss_2frames.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar $(GMT_INC) CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) $(GMTSAR) $(GMT_LIB) $(INCLUDES) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(PROG) $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_mosaic_ss_2frames/ALOS_mosaic_ss_2frames.c000644 015705 000000 00000132440 13505462014 030305 0ustar00sandwellwheel000000 000000 /**************************************************************************/ /* */ /* Mosaic 5 subswaths of 2 frames of ALOS ScanSAR in radar coordinates */ /* */ /* This program is written for better unwrapping because */ /* there will be phase difference for each subswath if unwrapping */ /* individually and the phase difference might not be a constant. */ /* */ /* This program will read the clock_start and near_range info from */ /* 5 PRM files of each subswath and read the pixel values from each */ /* GMT grids, calculate the coordinates of each subswath in meters, */ /* put each subswath in the corresponding coordinates. The boundary in */ /* range direction of each subswath is chosen to be at the middle of */ /* the overlapping region. */ /* */ /* After this step, should be phase unwrapping. */ /* */ /* May 18 2018 */ /* */ /* Xiaopeng Tong */ /* */ /* Update history: */ /* */ /* May 25 2018 modified to mosaic 2 frames */ /* May 30 2018 can divide the mosaic into 5 subswaths */ /* */ /**************************************************************************/ char *USAGE = " ALOS_mosaic_ss_2frames prmfile1 grd1 prmfile2 grd2 prmfile3 grd3 " "prmfile4 grd4 prmfile5 grd5 prmfile6 grd6 prmfile7 grd7 prmfile8 grd8 " "prmfile9 grd9 prmfile10 grd10 mosaic dec dir \n\n" " USAGE: \n" " mosaic 5 subswath of 2 frames of ALOS ScanSAR in radar coordinates\n\n" " prmfile[1-10] the PRM files \n" " grd[1-10] the GMT grid files (corr, phase, phasefilt) \n" " dec decimation factor in radar coordinates (100) \n" " dir dir is 1 means mosaic 5 subswaths \n" " dir is 0 means divide the mosaic into 5 subswaths \n" " the first frame is 1-5 and the second frame is 6-10 \n"; #include "gmt.h" #include "gmtsar.h" void set_ALOS_defaults(struct PRM *); void get_sio_struct(FILE *, struct PRM *); int main(int argc, char **argv) { /* define variables */ FILE *prmfile; struct PRM prm; void *API = NULL; /* GMT control structure */ struct GMT_GRID *grid1 = NULL, *grid2 = NULL, *grid3 = NULL, *grid4 = NULL, *grid5 = NULL, *grid6 = NULL, *grid7 = NULL, *grid8 = NULL, *grid9 = NULL, *grid10 = NULL, *grid11 = NULL; double inc[2], wesn[4]; double clock_start[10], clock_start_rel[10], near_range[10], near_range_rel[10]; double prf[10], rng_samp_rate[10], vel[10]; int num_rng[10], num_azi[10]; double clock_start_min; int ra[10][4]; int range_ub, azimuth_ub; double sol = 3.0e8; double rsr, dr; double dec; int row, col; int i; int range, azimuth; int range_boundary1, range_boundary2, range_boundary3, range_boundary4, range_boundary5; int azimuth_boundary1, azimuth_boundary2, azimuth_boundary3, azimuth_boundary4, azimuth_boundary5; int node1, node2, node3, node4, node5, node6, node7, node8, node9, node10, node11; int dir; double num_x, num_y; /* parse arguments */ if (argc != 24) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 2, 0, NULL)) == NULL) return EXIT_FAILURE; /* read in dec */ dec = atof(argv[22]); /* read in dir */ dir = atoi(argv[23]); num_x = 1000; num_y = 5000; /* open and read PRM files */ fprintf(stderr, "input:\n"); /* subswath 1 */ if ((prmfile = fopen(argv[1], "r")) == NULL) { die("\n can't open PRM file:\n", argv[1]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[0] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[0] = prm.near_range; rng_samp_rate[0] = prm.fs; num_rng[0] = prm.num_rng_bins; num_azi[0] = prm.num_patches * prm.num_valid_az; prf[0] = prm.prf; vel[0] = prm.vel; fclose(prmfile); /* subswath 2 */ if ((prmfile = fopen(argv[3], "r")) == NULL) { die("\n can't open PRM file:\n", argv[3]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[1] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[1] = prm.near_range; rng_samp_rate[1] = prm.fs; num_rng[1] = prm.num_rng_bins; num_azi[1] = prm.num_patches * prm.num_valid_az; prf[1] = prm.prf; vel[1] = prm.vel; fclose(prmfile); /* subswath 3 */ if ((prmfile = fopen(argv[5], "r")) == NULL) { die("\n can't open PRM file:\n", argv[5]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[2] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[2] = prm.near_range; rng_samp_rate[2] = prm.fs; num_rng[2] = prm.num_rng_bins; num_azi[2] = prm.num_patches * prm.num_valid_az; prf[2] = prm.prf; vel[2] = prm.vel; fclose(prmfile); /* subswath 4 */ if ((prmfile = fopen(argv[7], "r")) == NULL) { die("\n can't open PRM file:\n", argv[7]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[3] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[3] = prm.near_range; rng_samp_rate[3] = prm.fs; num_rng[3] = prm.num_rng_bins; num_azi[3] = prm.num_patches * prm.num_valid_az; prf[3] = prm.prf; vel[3] = prm.vel; fclose(prmfile); /* subswath 5 */ if ((prmfile = fopen(argv[9], "r")) == NULL) { die("\n can't open PRM file:\n", argv[9]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[4] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[4] = prm.near_range; rng_samp_rate[4] = prm.fs; num_rng[4] = prm.num_rng_bins; num_azi[4] = prm.num_patches * prm.num_valid_az; prf[4] = prm.prf; vel[4] = prm.vel; fclose(prmfile); /* subswath 6 */ if ((prmfile = fopen(argv[11], "r")) == NULL) { die("\n can't open PRM file:\n", argv[11]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[5] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[5] = prm.near_range; rng_samp_rate[5] = prm.fs; num_rng[5] = prm.num_rng_bins; num_azi[5] = prm.num_patches * prm.num_valid_az; prf[5] = prm.prf; vel[5] = prm.vel; fclose(prmfile); /* subswath 7 */ if ((prmfile = fopen(argv[13], "r")) == NULL) { die("\n can't open PRM file:\n", argv[13]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[6] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[6] = prm.near_range; rng_samp_rate[6] = prm.fs; num_rng[6] = prm.num_rng_bins; num_azi[6] = prm.num_patches * prm.num_valid_az; prf[6] = prm.prf; vel[6] = prm.vel; fclose(prmfile); /* subswath 8 */ if ((prmfile = fopen(argv[15], "r")) == NULL) { die("\n can't open PRM file:\n", argv[15]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[7] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[7] = prm.near_range; rng_samp_rate[7] = prm.fs; num_rng[7] = prm.num_rng_bins; num_azi[7] = prm.num_patches * prm.num_valid_az; prf[7] = prm.prf; vel[7] = prm.vel; fclose(prmfile); /* subswath 9 */ if ((prmfile = fopen(argv[17], "r")) == NULL) { die("\n can't open PRM file:\n", argv[17]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[8] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[8] = prm.near_range; rng_samp_rate[8] = prm.fs; num_rng[8] = prm.num_rng_bins; num_azi[8] = prm.num_patches * prm.num_valid_az; prf[8] = prm.prf; vel[8] = prm.vel; fclose(prmfile); /* subswath 10 */ if ((prmfile = fopen(argv[19], "r")) == NULL) { die("\n can't open PRM file:\n", argv[19]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[9] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[9] = prm.near_range; rng_samp_rate[9] = prm.fs; num_rng[9] = prm.num_rng_bins; num_azi[9] = prm.num_patches * prm.num_valid_az; prf[9] = prm.prf; vel[9] = prm.vel; fclose(prmfile); /* open and read GMT grids */ if (dir == 1) { /* subswath 1 */ if ((grid1 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 1: num_rng=%d, num_azi=%d\n", num_rng[0], num_azi[0]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid1->header->nx, grid1->header->inc[GMT_X], grid1->header->ny, grid1->header->inc[GMT_Y]); if ((num_rng[0] != round(grid1->header->nx * grid1->header->inc[GMT_X])) || (num_azi[0] != round(grid1->header->ny * grid1->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[2]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[2], grid1) == NULL) return EXIT_FAILURE; /* subswath 2 */ if ((grid2 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[4], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 2: num_rng=%d, num_azi=%d\n", num_rng[1], num_azi[1]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid2->header->nx, grid2->header->inc[GMT_X], grid2->header->ny, grid2->header->inc[GMT_Y]); if ((num_rng[1] != round(grid2->header->nx * grid2->header->inc[GMT_X])) || (num_azi[1] != round(grid2->header->ny * grid2->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[4]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[4], grid2) == NULL) return EXIT_FAILURE; /* subswath 3 */ if ((grid3 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[6], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 3: num_rng=%d, num_azi=%d\n", num_rng[2], num_azi[2]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid3->header->nx, grid3->header->inc[GMT_X], grid3->header->ny, grid3->header->inc[GMT_Y]); if ((num_rng[2] != round(grid3->header->nx * grid3->header->inc[GMT_X])) || (num_azi[2] != round(grid3->header->ny * grid3->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[6]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[6], grid3) == NULL) return EXIT_FAILURE; /* subswath 4 */ if ((grid4 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[8], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 4: num_rng=%d, num_azi=%d\n", num_rng[3], num_azi[3]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid4->header->nx, grid4->header->inc[GMT_X], grid4->header->ny, grid4->header->inc[GMT_Y]); if ((num_rng[3] != round(grid4->header->nx * grid4->header->inc[GMT_X])) || (num_azi[3] != round(grid4->header->ny * grid4->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[8]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[8], grid4) == NULL) return EXIT_FAILURE; /* subswath 5 */ if ((grid5 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[10], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 5: num_rng=%d, num_azi=%d\n", num_rng[4], num_azi[4]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid5->header->nx, grid5->header->inc[GMT_X], grid5->header->ny, grid5->header->inc[GMT_Y]); if ((num_rng[4] != round(grid5->header->nx * grid5->header->inc[GMT_X])) || (num_azi[4] != round(grid5->header->ny * grid5->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[10]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[10], grid5) == NULL) return EXIT_FAILURE; /* subswath 6 */ if ((grid6 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[12], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 6: num_rng=%d, num_azi=%d\n", num_rng[5], num_azi[5]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid6->header->nx, grid6->header->inc[GMT_X], grid6->header->ny, grid6->header->inc[GMT_Y]); if ((num_rng[5] != round(grid6->header->nx * grid6->header->inc[GMT_X])) || (num_azi[5] != round(grid6->header->ny * grid6->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[12]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[12], grid6) == NULL) return EXIT_FAILURE; /* subswath 7 */ if ((grid7 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[14], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 7: num_rng=%d, num_azi=%d\n", num_rng[6], num_azi[6]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid7->header->nx, grid7->header->inc[GMT_X], grid7->header->ny, grid7->header->inc[GMT_Y]); if ((num_rng[6] != round(grid7->header->nx * grid7->header->inc[GMT_X])) || (num_azi[6] != round(grid7->header->ny * grid7->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[14]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[14], grid7) == NULL) return EXIT_FAILURE; /* subswath 8 */ if ((grid8 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[16], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 8: num_rng=%d, num_azi=%d\n", num_rng[7], num_azi[7]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid8->header->nx, grid8->header->inc[GMT_X], grid8->header->ny, grid8->header->inc[GMT_Y]); if ((num_rng[7] != round(grid8->header->nx * grid8->header->inc[GMT_X])) || (num_azi[7] != round(grid8->header->ny * grid8->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[16]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[16], grid8) == NULL) return EXIT_FAILURE; /* subswath 9 */ if ((grid9 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[18], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 9: num_rng=%d, num_azi=%d\n", num_rng[8], num_azi[8]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid9->header->nx, grid9->header->inc[GMT_X], grid9->header->ny, grid9->header->inc[GMT_Y]); if ((num_rng[8] != round(grid9->header->nx * grid9->header->inc[GMT_X])) || (num_azi[8] != round(grid9->header->ny * grid9->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[18]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[18], grid9) == NULL) return EXIT_FAILURE; /* subswath 10 */ if ((grid10 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[20], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 10: num_rng=%d, num_azi=%d\n", num_rng[9], num_azi[9]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid10->header->nx, grid10->header->inc[GMT_X], grid10->header->ny, grid10->header->inc[GMT_Y]); if ((num_rng[9] != round(grid10->header->nx * grid10->header->inc[GMT_X])) || (num_azi[9] != round(grid10->header->ny * grid10->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[20]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[20], grid10) == NULL) return EXIT_FAILURE; } else if (dir == 0) { /* subswath 1 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[0]; wesn[GMT_YHI] = num_azi[0]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid1 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node1 = 0; node1 < grid1->header->size; node1++) grid1->data[node1] = NAN; /* subswath 2 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[1]; wesn[GMT_YHI] = num_azi[1]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid2 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node2 = 0; node2 < grid2->header->size; node2++) grid2->data[node2] = NAN; /* subswath 3 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[2]; wesn[GMT_YHI] = num_azi[2]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid3 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node3 = 0; node3 < grid3->header->size; node3++) grid3->data[node3] = NAN; /* subswath 4 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[3]; wesn[GMT_YHI] = num_azi[3]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid4 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node4 = 0; node4 < grid4->header->size; node4++) grid4->data[node4] = NAN; /* subswath 5 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[4]; wesn[GMT_YHI] = num_azi[4]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid5 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node5 = 0; node5 < grid5->header->size; node5++) grid5->data[node5] = NAN; /* subswath 6 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[5]; wesn[GMT_YHI] = num_azi[5]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid6 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node6 = 0; node6 < grid6->header->size; node6++) grid6->data[node6] = NAN; /* subswath 7 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[6]; wesn[GMT_YHI] = num_azi[6]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid7 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node7 = 0; node7 < grid7->header->size; node7++) grid7->data[node7] = NAN; /* subswath 8 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[7]; wesn[GMT_YHI] = num_azi[7]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid8 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node8 = 0; node8 < grid8->header->size; node8++) grid8->data[node8] = NAN; /* subswath 9 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[8]; wesn[GMT_YHI] = num_azi[8]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid9 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node9 = 0; node9 < grid9->header->size; node9++) grid9->data[node9] = NAN; /* subswath 10 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[9]; wesn[GMT_YHI] = num_azi[9]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid10 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node10 = 0; node10 < grid10->header->size; node10++) grid10->data[node10] = NAN; } else { die("dir must be either 1 or 0", ""); } /* find the minimum of the clock start */ clock_start_min = 1e10; for (i = 0; i < 5; i++) { if (clock_start[i] < clock_start_min) { clock_start_min = clock_start[i]; } } /* check the range sampling rate should be the same */ rsr = rng_samp_rate[0]; for (i = 1; i < 10; i++) { if (rsr != rng_samp_rate[i]) { die("\nrange sampling rate from PRM files are not the same.\n", " "); } } dr = sol / rsr / 2.0; fprintf(stderr, "dr = %f\n", dr); for (i = 0; i < 10; i++) { fprintf(stderr, "subswath %d, da = %f\n", i + 1, vel[i] / prf[i]); } /* calculate the relative clock in seconds */ for (i = 0; i < 10; i++) { clock_start_rel[i] = clock_start[i] - clock_start_min; near_range_rel[i] = near_range[i] - near_range[0]; fprintf(stderr, "subswath = %d, clock_start_rel = %f\n", i + 1, clock_start_rel[i]); fprintf(stderr, "subswath = %d, near_range_rel = %f\n", i + 1, near_range_rel[i]); } /* calculate the positions of the grids in dec meters */ ra[0][0] = round(near_range_rel[0] / dec); ra[0][1] = ra[0][0] + round(grid1->header->nx * grid1->header->inc[GMT_X] * dr / dec); ra[0][2] = round(clock_start_rel[0] * vel[0] / dec); ra[0][3] = ra[0][2] + round(grid1->header->ny * grid1->header->inc[GMT_Y] * vel[0] / prf[0] / dec); ra[1][0] = round(near_range_rel[1] / dec); ra[1][1] = ra[1][0] + round(grid2->header->nx * grid2->header->inc[GMT_X] * dr / dec); ra[1][2] = round(clock_start_rel[1] * vel[1] / dec); ra[1][3] = ra[1][2] + round(grid2->header->ny * grid2->header->inc[GMT_Y] * vel[1] / prf[1] / dec); ra[2][0] = round(near_range_rel[2] / dec); ra[2][1] = ra[2][0] + round(grid3->header->nx * grid3->header->inc[GMT_X] * dr / dec); ra[2][2] = round(clock_start_rel[2] * vel[2] / dec); ra[2][3] = ra[2][2] + round(grid3->header->ny * grid3->header->inc[GMT_Y] * vel[2] / prf[2] / dec); ra[3][0] = round(near_range_rel[3] / dec); ra[3][1] = ra[3][0] + round(grid4->header->nx * grid4->header->inc[GMT_X] * dr / dec); ra[3][2] = round(clock_start_rel[3] * vel[3] / dec); ra[3][3] = ra[3][2] + round(grid4->header->ny * grid4->header->inc[GMT_Y] * vel[3] / prf[3] / dec); ra[4][0] = round(near_range_rel[4] / dec); ra[4][1] = ra[4][0] + round(grid5->header->nx * grid5->header->inc[GMT_X] * dr / dec); ra[4][2] = round(clock_start_rel[4] * vel[4] / dec); ra[4][3] = ra[4][2] + round(grid5->header->ny * grid5->header->inc[GMT_Y] * vel[4] / prf[4] / dec); ra[5][0] = round(near_range_rel[5] / dec); ra[5][1] = ra[5][0] + round(grid6->header->nx * grid6->header->inc[GMT_X] * dr / dec); ra[5][2] = round(clock_start_rel[5] * vel[5] / dec); ra[5][3] = ra[5][2] + round(grid6->header->ny * grid6->header->inc[GMT_Y] * vel[5] / prf[5] / dec); ra[6][0] = round(near_range_rel[6] / dec); ra[6][1] = ra[6][0] + round(grid7->header->nx * grid7->header->inc[GMT_X] * dr / dec); ra[6][2] = round(clock_start_rel[6] * vel[6] / dec); ra[6][3] = ra[6][2] + round(grid7->header->ny * grid7->header->inc[GMT_Y] * vel[6] / prf[6] / dec); ra[7][0] = round(near_range_rel[7] / dec); ra[7][1] = ra[7][0] + round(grid8->header->nx * grid8->header->inc[GMT_X] * dr / dec); ra[7][2] = round(clock_start_rel[7] * vel[7] / dec); ra[7][3] = ra[7][2] + round(grid8->header->ny * grid8->header->inc[GMT_Y] * vel[7] / prf[7] / dec); ra[8][0] = round(near_range_rel[8] / dec); ra[8][1] = ra[8][0] + round(grid9->header->nx * grid9->header->inc[GMT_X] * dr / dec); ra[8][2] = round(clock_start_rel[8] * vel[8] / dec); ra[8][3] = ra[8][2] + round(grid9->header->ny * grid9->header->inc[GMT_Y] * vel[8] / prf[8] / dec); ra[9][0] = round(near_range_rel[9] / dec); ra[9][1] = ra[9][0] + round(grid10->header->nx * grid10->header->inc[GMT_X] * dr / dec); ra[9][2] = round(clock_start_rel[9] * vel[9] / dec); ra[9][3] = ra[9][2] + round(grid10->header->ny * grid10->header->inc[GMT_Y] * vel[9] / prf[9] / dec); /* debug */ /*for (i=0;i<5;i++) { for (j=0;j<4;j++) { fprintf(stderr, "i=%d j=%d ra=%d\n", i,j,ra[i][j]); } }*/ if (dir == 1) { fprintf(stderr, "mosaic the 5 subswath...\n"); /* the lower boundary in the azimuth and range direction is 0 */ /* find the upper boundary in the azimuth and range direction */ azimuth_ub = -999999; for (i = 5; i < 10; i++) { if (ra[i][3] > azimuth_ub) { azimuth_ub = ra[i][3]; } } range_ub = ra[4][1]; /* make an output grid */ inc[GMT_X] = inc[GMT_Y] = dec; /* in meters */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = range_ub * inc[GMT_X]; wesn[GMT_YHI] = azimuth_ub * inc[GMT_Y]; /* debug */ /* fprintf(stderr, "inc[GMT_X] = %f , inc[GMT_Y] = %f\n", inc[GMT_X], inc[GMT_Y]); fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); */ if ((grid11 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node11 = 0; node11 < grid11->header->size; node11++) grid11->data[node11] = NAN; /* put in the subswath grids */ range_boundary1 = round((ra[0][1] + ra[1][0]) / 2); azimuth_boundary1 = round((ra[0][3] + ra[5][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary1=%d\n",range_boundary1); /* put in subswath 1 */ for (range = ra[0][0]; range < range_boundary1; range++) { for (azimuth = ra[0][2]; azimuth < azimuth_boundary1; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[0]) / dr / grid1->header->inc[GMT_X]); row = grid1->header->ny - round((azimuth * dec - clock_start_rel[0] * vel[0]) / (vel[0] / prf[0]) / grid1->header->inc[GMT_Y]); if (col >= 0 && col <= grid1->header->nx && row >= 0 && row <= grid1->header->ny) { node1 = GMT_Get_Index(API, grid1->header, row, col); grid11->data[node11] = grid1->data[node1]; } } } /* put in subswath 2 */ range_boundary2 = round((ra[1][1] + ra[2][0]) / 2); azimuth_boundary2 = round((ra[1][3] + ra[6][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary2=%d\n",range_boundary2); for (range = range_boundary1; range < range_boundary2; range++) { for (azimuth = ra[1][2]; azimuth < azimuth_boundary2; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[1]) / dr / grid2->header->inc[GMT_X]); row = grid2->header->ny - round((azimuth * dec - clock_start_rel[1] * vel[1]) / (vel[1] / prf[1]) / grid2->header->inc[GMT_Y]); if (col >= 0 && col <= grid2->header->nx && row >= 0 && row <= grid2->header->ny) { node2 = GMT_Get_Index(API, grid2->header, row, col); grid11->data[node11] = grid2->data[node2]; } } } /* put in subswath 3 */ range_boundary3 = round((ra[2][1] + ra[3][0]) / 2); azimuth_boundary3 = round((ra[2][3] + ra[7][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary3=%d\n",range_boundary3); for (range = range_boundary2; range < range_boundary3; range++) { for (azimuth = ra[2][2]; azimuth < azimuth_boundary3; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[2]) / dr / grid3->header->inc[GMT_X]); row = grid3->header->ny - round((azimuth * dec - clock_start_rel[2] * vel[2]) / (vel[2] / prf[2]) / grid3->header->inc[GMT_Y]); if (col >= 0 && col <= grid3->header->nx && row >= 0 && row <= grid3->header->ny) { node3 = GMT_Get_Index(API, grid3->header, row, col); grid11->data[node11] = grid3->data[node3]; } } } /* put in subswath 4 */ range_boundary4 = round((ra[3][1] + ra[4][0]) / 2); azimuth_boundary4 = round((ra[3][3] + ra[8][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary4=%d\n",range_boundary4); for (range = range_boundary3; range < range_boundary4; range++) { for (azimuth = ra[3][2]; azimuth < azimuth_boundary4; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[3]) / dr / grid4->header->inc[GMT_X]); row = grid4->header->ny - round((azimuth * dec - clock_start_rel[3] * vel[3]) / (vel[3] / prf[3]) / grid4->header->inc[GMT_Y]); if (col >= 0 && col <= grid4->header->nx && row >= 0 && row <= grid4->header->ny) { node4 = GMT_Get_Index(API, grid4->header, row, col); grid11->data[node11] = grid4->data[node4]; } } } /* put in subswath 5 */ range_boundary5 = range_ub; azimuth_boundary5 = round((ra[4][3] + ra[9][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary5=%d\n",range_boundary5); for (range = range_boundary4; range < range_boundary5; range++) { for (azimuth = ra[4][2]; azimuth < azimuth_boundary5; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[4]) / dr / grid5->header->inc[GMT_X]); row = grid5->header->ny - round((azimuth * dec - clock_start_rel[4] * vel[4]) / (vel[4] / prf[4]) / grid5->header->inc[GMT_Y]); if (col >= 0 && col <= grid5->header->nx && row >= 0 && row <= grid5->header->ny) { node5 = GMT_Get_Index(API, grid5->header, row, col); grid11->data[node11] = grid5->data[node5]; } } } /* put in subswath 6 */ range_boundary1 = round((ra[5][1] + ra[6][0]) / 2); for (range = ra[5][0]; range < range_boundary1; range++) { for (azimuth = azimuth_boundary1; azimuth < ra[5][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[5]) / dr / grid6->header->inc[GMT_X]); row = grid6->header->ny - round((azimuth * dec - clock_start_rel[5] * vel[5]) / (vel[5] / prf[5]) / grid6->header->inc[GMT_Y]); if (col >= 0 && col <= grid6->header->nx && row >= 0 && row <= grid6->header->ny) { node6 = GMT_Get_Index(API, grid6->header, row, col); grid11->data[node11] = grid6->data[node6]; } } } /* put in subswath 7 */ range_boundary2 = round((ra[6][1] + ra[7][0]) / 2); for (range = range_boundary1; range < range_boundary2; range++) { for (azimuth = azimuth_boundary2; azimuth < ra[6][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[6]) / dr / grid7->header->inc[GMT_X]); row = grid7->header->ny - round((azimuth * dec - clock_start_rel[6] * vel[6]) / (vel[6] / prf[6]) / grid7->header->inc[GMT_Y]); if (col >= 0 && col <= grid7->header->nx && row >= 0 && row <= grid7->header->ny) { node7 = GMT_Get_Index(API, grid7->header, row, col); grid11->data[node11] = grid7->data[node7]; } } } /* put in subswath 8 */ range_boundary3 = round((ra[7][1] + ra[8][0]) / 2); for (range = range_boundary2; range < range_boundary3; range++) { for (azimuth = azimuth_boundary3; azimuth < ra[7][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[7]) / dr / grid8->header->inc[GMT_X]); row = grid8->header->ny - round((azimuth * dec - clock_start_rel[7] * vel[7]) / (vel[7] / prf[7]) / grid8->header->inc[GMT_Y]); if (col >= 0 && col <= grid8->header->nx && row >= 0 && row <= grid8->header->ny) { node8 = GMT_Get_Index(API, grid8->header, row, col); grid11->data[node11] = grid8->data[node8]; } } } /* put in subswath 9 */ range_boundary4 = round((ra[8][1] + ra[9][0]) / 2); for (range = range_boundary3; range < range_boundary4; range++) { for (azimuth = azimuth_boundary4; azimuth < ra[8][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[8]) / dr / grid9->header->inc[GMT_X]); row = grid9->header->ny - round((azimuth * dec - clock_start_rel[8] * vel[8]) / (vel[8] / prf[8]) / grid9->header->inc[GMT_Y]); if (col >= 0 && col <= grid9->header->nx && row >= 0 && row <= grid9->header->ny) { node9 = GMT_Get_Index(API, grid9->header, row, col); grid11->data[node11] = grid9->data[node9]; } } } /* put in subswath 10 */ range_boundary5 = ra[9][1]; for (range = range_boundary4; range < range_boundary5; range++) { for (azimuth = azimuth_boundary5; azimuth < ra[9][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[9]) / dr / grid10->header->inc[GMT_X]); row = grid10->header->ny - round((azimuth * dec - clock_start_rel[9] * vel[9]) / (vel[9] / prf[9]) / grid10->header->inc[GMT_Y]); if (col >= 0 && col <= grid10->header->nx && row >= 0 && row <= grid10->header->ny) { node10 = GMT_Get_Index(API, grid10->header, row, col); grid11->data[node11] = grid10->data[node10]; } } } /* output and clean up */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[21], grid11)) return EXIT_FAILURE; } else if (dir == 0) { fprintf(stderr, "divide the mosaic into 5 subswath...\n"); /* open the mosaic grid */ if ((grid11 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[21], NULL)) == NULL) return EXIT_FAILURE; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[21], grid11) == NULL) return EXIT_FAILURE; /* subswath 1 */ for (col = 0; col < grid1->header->nx; col++) { for (row = 0; row < grid1->header->ny; row++) { node1 = GMT_Get_Index(API, grid1->header, row, col); range = round((near_range_rel[0] + col * grid1->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[0] * vel[0] + (grid1->header->ny - row) * grid1->header->inc[GMT_Y] * vel[0] / prf[0]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid1->data[node1] = grid11->data[node11]; } } } /* subswath 2 */ for (col = 0; col < grid2->header->nx; col++) { for (row = 0; row < grid2->header->ny; row++) { node2 = GMT_Get_Index(API, grid2->header, row, col); range = round((near_range_rel[1] + col * grid2->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[1] * vel[1] + (grid2->header->ny - row) * grid2->header->inc[GMT_Y] * vel[1] / prf[1]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid2->data[node2] = grid11->data[node11]; } } } /* subswath 3 */ for (col = 0; col < grid3->header->nx; col++) { for (row = 0; row < grid3->header->ny; row++) { node3 = GMT_Get_Index(API, grid3->header, row, col); range = round((near_range_rel[2] + col * grid3->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[2] * vel[2] + (grid3->header->ny - row) * grid3->header->inc[GMT_Y] * vel[2] / prf[2]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid3->data[node3] = grid11->data[node11]; } } } /* subswath 4 */ for (col = 0; col < grid4->header->nx; col++) { for (row = 0; row < grid4->header->ny; row++) { node4 = GMT_Get_Index(API, grid4->header, row, col); range = round((near_range_rel[3] + col * grid4->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[3] * vel[3] + (grid4->header->ny - row) * grid4->header->inc[GMT_Y] * vel[3] / prf[3]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid4->data[node4] = grid11->data[node11]; } } } /* subswath 5 */ for (col = 0; col < grid5->header->nx; col++) { for (row = 0; row < grid5->header->ny; row++) { node5 = GMT_Get_Index(API, grid5->header, row, col); range = round((near_range_rel[4] + col * grid5->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[4] * vel[4] + (grid5->header->ny - row) * grid5->header->inc[GMT_Y] * vel[4] / prf[4]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid5->data[node5] = grid11->data[node11]; } } } /* subswath 6 */ for (col = 0; col < grid6->header->nx; col++) { for (row = 0; row < grid6->header->ny; row++) { node6 = GMT_Get_Index(API, grid6->header, row, col); range = round((near_range_rel[5] + col * grid6->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[5] * vel[5] + (grid6->header->ny - row) * grid6->header->inc[GMT_Y] * vel[5] / prf[5]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid6->data[node6] = grid11->data[node11]; } } } /* subswath 7 */ for (col = 0; col < grid7->header->nx; col++) { for (row = 0; row < grid7->header->ny; row++) { node7 = GMT_Get_Index(API, grid7->header, row, col); range = round((near_range_rel[6] + col * grid7->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[6] * vel[6] + (grid7->header->ny - row) * grid7->header->inc[GMT_Y] * vel[6] / prf[6]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid7->data[node7] = grid11->data[node11]; } } } /* subswath 8 */ for (col = 0; col < grid8->header->nx; col++) { for (row = 0; row < grid8->header->ny; row++) { node8 = GMT_Get_Index(API, grid8->header, row, col); range = round((near_range_rel[7] + col * grid8->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[7] * vel[7] + (grid8->header->ny - row) * grid8->header->inc[GMT_Y] * vel[7] / prf[7]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid8->data[node8] = grid11->data[node11]; } } } /* subswath 9 */ for (col = 0; col < grid9->header->nx; col++) { for (row = 0; row < grid9->header->ny; row++) { node9 = GMT_Get_Index(API, grid9->header, row, col); range = round((near_range_rel[8] + col * grid9->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[8] * vel[8] + (grid9->header->ny - row) * grid9->header->inc[GMT_Y] * vel[8] / prf[8]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid9->data[node9] = grid11->data[node11]; } } } /* subswath 10 */ for (col = 0; col < grid10->header->nx; col++) { for (row = 0; row < grid10->header->ny; row++) { node10 = GMT_Get_Index(API, grid10->header, row, col); range = round((near_range_rel[9] + col * grid10->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[9] * vel[9] + (grid10->header->ny - row) * grid10->header->inc[GMT_Y] * vel[9] / prf[9]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid10->data[node10] = grid11->data[node11]; } } } if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[2], grid1)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[4], grid2)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[6], grid3)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[8], grid4)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[10], grid5)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[12], grid6)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[14], grid7)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[16], grid8)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[18], grid9)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[20], grid10)) return EXIT_FAILURE; } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/preproc/ALOS_preproc/roi_pac_scripts/make_raw_alos_ERSDAC.pl000755 015705 000000 00000017037 13505462014 027063 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl ### make_raw_alos.pl use Env qw(INT_SCR INT_BIN MY_BIN); use lib "$INT_SCR"; #### Location of Generic.pm use Generic; use POSIX qw(ceil floor); sub Usage { print STDERR <.raw and I.raw.rsc from imagery files make_raw_alos_ERSDAC.pl put together by Rob Mellors (7/2010, SDSU) but based on make_raw_alos.pl by Yuri Fialko with modifications by Eric Fielding and Zhenlong Li software inputs from Dave Sandwell, Rob Mellors, and Matt Wei * does not handle ALOS_merge or FBS2FBD/FBD2FBS * requires version of ALOS_pre_process that create roi_pac output (-roi) * note that ERSDAC data already has a .raw suffix Example: make_raw_alos_ERSDAC.pl PASL10C0609250613491002120000 (requires PASL10C0609250613491002120000.raw and PASL10C0609250613491002120000.ldr) END exit 1; } @ARGV >= 1 or Usage(); @args = @ARGV; $alos_file_prefix = shift; $outname = shift ; # get name of image file # ERSDAC uses *.raw to identify image files # need to avoid confusion with outname.raw # RJM $imagery = `ls $alos_file_prefix.raw` or die "No Imagery files\n"; $leaderfile = `ls $alos_file_prefix.ldr` or die "No Leaderfile \n"; chop($imagery); chop($leaderfile); ################# Message "Checking I/O"; ################# Log ("make_raw_alos.pl", @args); Message "ALOS_pre_process $imagery $leaderfile"; `ALOS_pre_process $imagery $leaderfile -nodopp -roi`; # # ALOS_pre_process (with -roi flag as of 7/2010) creates: # ALOS_FILE_PREFIX.PRM - PRM header file # ALOS_FILE_PREFIX.raw.raw - reformatted raw data # tmp.DATE.raw.rsc - partial rsc filr for raw data # hdr_data_points_DATE.rsc - orbit hdr file # DATE is yymmdd format # # roi_pac does not use the ALOS_pre_process doppler # information so run with -nodopp flag (faster) # # read data from tmp rsc file name $tmp_raw_rsc = `ls tmp.*.raw.rsc`; chop($tmp_raw_rsc); ($tmp,$date,$tmp,$tmp) = split(/\./,$tmp_raw_rsc); # # copy rsc from ALOS_pre_process to tmp_IMAGERY.raw.rsc `cp $tmp_raw_rsc tmp_IMAGERY.raw.rsc`; # # rename reformatted raw file (with .raw.raw suffix for ERSDAC !) # to tmp_IMAGERY.raw `\mv $imagery.raw tmp_IMAGERY.raw`; # # orbit information written by ALOS_pre_process $HDR = "hdr_data_points_".$date.".rsc"; # # read parameters from rsc file created by ALOS_pre_process # $day = Use_rsc "tmp_IMAGERY.raw read FIRST_LINE_DAY_OF_MONTH"; $month = Use_rsc "tmp_IMAGERY.raw read FIRST_LINE_MONTH_OF_YEAR"; $year = Use_rsc "tmp_IMAGERY.raw read FIRST_LINE_YEAR"; $first_line_utc = Use_rsc "tmp_IMAGERY.raw read FIRST_LINE_UTC"; $center_utc = Use_rsc "tmp_IMAGERY.raw read CENTER_LINE_UTC"; $last_line_utc = Use_rsc "tmp_IMAGERY.raw read LAST_LINE_UTC"; $equatorial_radius = Use_rsc "tmp_IMAGERY.raw read EQUATORIAL_RADIUS"; $file_length = Use_rsc "tmp_IMAGERY.raw read FILE_LENGTH"; $orbit_type = "HDR"; $sat = "ALOS"; $outname = $date; Message "Using Orbit Information"; ($q1,$q2,$Lat,$Lon,$height_mid, $x0, $y0, $z0, $vx0, $vy0,$vz0) = split /\s+/, `$INT_SCR/state_vector.pl $year$month$day $center_utc $sat $orbit_type $outname`; Status "state_vector.pl"; $pi = atan2(1,1)*4; if ($orbit_type eq "HDR"){ &calc_height_GRS80; $height_mid=$H; } # # used original commetns to name # &calc_radius_WGS84; ($q1,$q2,$q3,$q4,$height_top, $x0, $y0, $z0, $vx, $vy,$vz) = split /\s+/, `$INT_SCR/state_vector.pl $year$month$day $first_line_utc $sat $orbit_type $outname`; Status "state_vector.pl"; if ($orbit_type eq "HDR"){ &calc_height_GRS80; $height_top=$H; } $height_dt=($height_mid-$height_top)/($center_utc-$first_line_utc); if ($vz0 > 0) {$orbit_direction = "ascending";} else {$orbit_direction = "descending";} $velocity_mid = sqrt($vx0**2 + $vy0**2 + $vz0**2); $Latd = $Lat*180.0 / $pi; $Lond = $Lon*180.0 / $pi; $hdgd = $hdg*180.0 / $pi; print STDERR "vel $vel $velocity_mid \n"; # write it out to the rsc file Use_rsc "tmp_IMAGERY.raw write HEIGHT_TOP $height_top"; Use_rsc "tmp_IMAGERY.raw write HEIGHT $height_mid"; Use_rsc "tmp_IMAGERY.raw write HEIGHT_DT $height_dt"; Use_rsc "tmp_IMAGERY.raw write VELOCITY $velocity_mid"; Use_rsc "tmp_IMAGERY.raw write LATITUDE $Latd"; Use_rsc "tmp_IMAGERY.raw write LONGITUDE $Lond"; Use_rsc "tmp_IMAGERY.raw write HEADING $hdgd"; Use_rsc "tmp_IMAGERY.raw write EQUATORIAL_RADIUS $equatorial_radius"; Use_rsc "tmp_IMAGERY.raw write ECCENTRICITY_SQUARED $e2"; Use_rsc "tmp_IMAGERY.raw write EARTH_EAST_RADIUS $N"; Use_rsc "tmp_IMAGERY.raw write EARTH_NORTH_RADIUS $M"; Use_rsc "tmp_IMAGERY.raw write EARTH_RADIUS $earth_radius_mid"; Use_rsc "tmp_IMAGERY.raw write ORBIT_DIRECTION $orbit_direction"; # ################################ #Message "Doppler Computation"; ################################ # ## use external routine EJF system "$INT_SCR/scan_doppler.pl tmp_IMAGERY $file_length"; # ## move to final file name `mv tmp_IMAGERY.raw.rsc ${outname}.raw.rsc`; `mv tmp_IMAGERY.raw ${outname}.raw`; # ########################## #Message "Raw data ready for processing"; ########################## # exit 0; #-------------------------------------------------------------------- sub calc_height_GRS80{ $ae = 6378137; #GRS80 reference ellipsoid $flat = 1/298.257223563; # looks like WGS84 ? $r = sqrt($x0**2+$y0**2+$z0**2); $r1 = sqrt($x0**2+$y0**2); $Lat = atan2($z0,$r1); $Lon = atan2($y0,$x0); $H = $r-$ae; for ($i=1; $i<7; $i++){ $N = $ae/(sqrt(1-$flat*(2-$flat)*sin($Lat)**2)); $TanLat = $z0/$r1/(1-(2-$flat)*$flat*$N/($N+$H)); $Lat = atan2($TanLat,1); $H = $r1/cos($Lat)-$N; } # Message "calc_height_GRS80 $H"; } #-------------------------------------------------------------------- sub calc_radius_WGS84 { $ae = 6378137; #WGS84 reference ellipsoid $flat = 1./298.257223563; $N = $ae/sqrt(1-$flat*(2-$flat)*sin($Lat)**2); $re_mid=$N; $ve = -sin($Lon) * $vx0 + cos($Lon) * $vy0; $vn = -sin($Lat) * cos($Lon) * $vx0 - sin($Lat) * sin($Lon) * $vy0 + cos($Lat) * $vz0; $hdg = atan2($ve,$vn); $e2 = $flat * (2-$flat); $M = $ae * (1-$e2) / (sqrt(1-$e2 * sin($Lat)**2))**3; $earth_radius_mid = $N*$M/($N*(cos($hdg))**2+$M*(sin($hdg))**2); # Message "calc_radius_WGS84 $earth_radius_mid"; } #-------------------------------------------------------------------- # Perl trim function to remove whitespace from the start and end of the string sub trim($) { my $string = shift; $string =~ s/^\s+//; $string =~ s/\s+$//; return $string; } #-------------------------------------------------------------------- =pod =head1 USAGE B I< alos_file_prefix_root > =head1 FUNCTION Creates I.raw and I.raw.rsc from ALOS ERSDAC imagery files =head1 ROUTINES CALLED ALOS_pre_process state_vector.pl =head1 CALLED BY none =head1 FILES USED PAS*.raw PAS*.ldr =head1 FILES CREATED I.raw I.raw.rsc I_parse_line.out shift.out shift.out.rsc =head1 HISTORY Perl Script : Yuri Fialko 07/11/2007 Use ALOS_pre_processor and ALOS_merge to pre-process and merge a set of ALOS frames; Eric Fielding, on 9 Oct 2007 Use ALOS_fbd2fbs and ALOS_fbs2fbd to convert between FBD and FBS images; Zhenhong Li, on 19 Oct 2007 Butchered by RJM to handle ERSDAC format - removed ALOS_fbd2fbs ALOS_fbs2fbd and ALOS_merge.... 27 July 2010 =head1 LAST UPDATE 2010/07/27 R Mellors SDSU =cut GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/ALOS_pre_process_SLC000755 015705 000000 00000202074 13507242211 027141 0ustar00sandwellwheel000000 000000  H__PAGEZERO(__TEXT__text__TEXTp `p __stubs__TEXTЏЏ__stub_helper__TEXTn__const__TEXT  __cstring__TEXT0 H0__unwind_info__TEXT<<__DATA__nl_symbol_ptr__DATA#__got__DATA%__la_symbol_ptr__DATA(((__data__DATA@@__common__DATA H__LINKEDIT <"0X`hh| PAA'PK /usr/lib/dyld\*58K< &72   *(p 8/usr/lib/libSystem.B.dylib&xX)UHAWAVAUATSHHhAH{HHEЃH=H5o'HHL-AEHHHH{Gz?HHHHxHL%ZA$HLxL'LvHDHhHL:A<$uH4XA}t Hx x&tH-HHDHH=aH{H5 !IHuHsH=%H{H5IHuHsH=%HHs薄LCLxHpHHE1LH8LLKHj8tHSH8HxyHDžpLHxE1E1f.DMtUH8tH H8AV1H58J-pJ-HhL@HHE6f.օvDž҅JpLHHpHpH8HB3H8uHHHHX^bf.ZvID$ID$I$JHHHHH&IIHpHHH;Eu1Hĸ[A\A]A^A_]|f.UHAWAVAUATSPMIHUIHEtIEAH 11HME%H ͎H1LME;H 11HMH |H1LMŁHH N11M要fǃ0aH5OHЁI$HuH=9Hj"H5(L詁HMHHtH[A\A]A^A_]H= LH[A\A]A^A_]#"UHAWAVAUATSPHUЃqIIAIcM4LH5ҍ舁BLH5q{LH5ZLH5?CLH5`,!LH5YLH5LH5LH5ÎЀLH5Ύ蹀LH5ӎ袀LH5茀A>-AHHHH=ŎfAA9uH=zH5u IcI<AHH8H5_AA9uH=kH5x% IcI~AA9uH=AH5IcI<~H^HH8H5%~AA9uH=*H5:IcI<^~HHdH8H5_~fAA9uH=H5>IcI<~HHH8H5~HhHHH=H;HHH=H&HHH=֋HYHdHH=ˋ_H/H:H"H=5HyHHHH= }fAA9H[A\A]A^A_]HHH8H51L|H3H}||UHAWAVAUATSHIHHhIH8t HaHH=l~|HxH|L|HtHpH߉uLcpL@|HEHuH=H5H`L|HEHuH=H5uL{HHuH=H5RI6HH]x1L"HcxIL{1LHH]{H8t-HMHLr{HH51HH]H3{H=L&{HLPHctHXAfWEEEE1EEELuLmf.HHc0LzAH8t H=3AL`H5HEHHW*F(HW*V,S|^%W|^X^XAW*F$YXAW*F8AW*FtAHEHH_8]t;HH8AAY{H5yH5,AD}AD~DuEDE9t11H=DyH5DvA,F8EFtE;Ut1H=u]yH5D~D+}D+XD9PtH=׈H5H5W*F8Af.W*FtA\ zA^8^Xzf: X,؉LD9~*1H=JxH=aH5UH59]t$Hpt1H=?rxH5]]DuH8toEW*^MzHHiMbHH?H'W*f.u:z8W*F8HH8YyDFtH5DwH5PEAAEAFtEMcH}LH]H}wL9:HHXrwH8tH}HuDDvAmH8HHEHDED1H]D}f(5yfD(==y5=yf. ZYf(_f(fATXf(fUfTfV,f4S,1@AHH9uDuH]D}m}Lu<HLHhlvH=LmL1vHgfWEAEE1EEAHDHcHHdH)ƺL}LuLuHLuIA wf(YW*K8YH=]ЉHuAMwYHW*H8AYH=ޕvuH]5LuIH]D}$H HH=A'uLmH`YwHgHtW*H(W*P,v^%v^X^XW*H$YXMDȃ`LJXH8t L=I?H5h1DtEW*E^Hv^ Tvf.w f.Nvv7I?H59UsI?HDEYH5DsH}sH}sHsLusHhisIHĈ[A\A]A^A_]fUHAWAVAUATSHxIIIL-AE؉:tH=4H5AA]9tH=4H5H=8t)HH8A$AH\DH51rLsHL8t)HHLrHH51HHrH HLrrL5A>tbL5FI>KDCDKDS[H5҄1SAR&rHIL5hL4rHH5o 1HqHHLqA>HH8HHHHHHHHHHHHH|HHtHHlHHdHHHHMHDHH<HH4HH,HH$HHHHHHH H H(HH0HH8HH@HHHHHPHHXHH`HHhHHpH5LLLLLHHMHHMHHMHHMHKdHMHK`HMHKXHMHKTHMHKPHMHKHHMHKDH`HK@HhHK8HpHK4HxHK$HHK HHKHHKHxHKLCLKHu (08@HPX`hpASAVL5ATAUL-ARuuuuuuuuuu`hpxx,nHĠHHL7nHH5r1HmHHLmHIcuLmA>t4HL McmIŜLmHH51LLmH8t H=% A>HWH8DCDK CHCHCHCHC HC$HC(HC,HC0HC2HC4HC6HC8HCH5%w1HOfI>hH5w18fI>LH5w1!fI>PH5w1 fI>\H5 w1eI>H5weI>HH5weI>H5 weI>H5w1eI>XH5w1zeI>H5vaeI>H5vHeI>H5w/eI>H5w[A^]ef.@UH*U8*M<^ gff^~gf(XXf(]fUHAWAVAUATSPMDEAAAHML}E~1DAH}DEEdDL}EEAHMDD)yMcAƒ r!KKH9KLL91҉IIMLHtK<HDAHHuI-I)IKDIT1f\2\0\2\0\2\020HI9uAD҃HZHHHljH`s1HKDpH)H\1f.A>AL>D8L8AD> AL>0D8L8AD>@AL>PD8L8AD>`AL>pD8 8HHuHt(KDHA>AL>D8 8H HuL9DEE)E)EMcEAv!KLL9KKH91HHLLHtK<HD7A7HHuH,I)ID7IKT1@\2\0\2\0\2\020HI9uDփHFHHH‰׃H`s1HKDpH)H\1f.DLAALDLAD AL0DLAD@ALPD AD`ALpHHuHt(KDHD AALH HuL9D;M}/IcLEDDDH¾IDaALIcL`1H[A\A]A^A_]ÐUHfG0fG2fG4fG6fG@fGBfG`fȉoOfocf8OGȉGGȉGG ȉG G$ȉG$G(ȉG(G,ȉG,G8ȉG8G<ȉG<oODf8ODG\ȉG\oOlf8Olȉȉof8of8of8ȉHڻ8t]Ëȉ]ÐUH]DUH]DUHHHH7H8H5 12__@UHGOYFYN\OYFY\JOYFY\B]UHp)X a(^Y`W*X^XW*f(X^XhW*^X]UHHXXXXXXXXHHHHHH HHHHH8H0H(H (}`HXLJhayLJlayLJpaytLJayLJayLJay(.`Ht$iH(8HXhxHHH]ÐUHAWAVSPILupaytH5i}1L\AaytH5`}1Ld\ATaytH5Q}1LD\IH5O}H\tH5@}1LH\Af.^u{H5)}L[AdaytH5}1L[IH5|H\tH5}1LH[IH5|H[tH5|1LHe[A0f.0^u{H5|L?[ApaytH5|1L[AlaytH5|1LZIH5 |HD[tH5|1LHZAXf.]u{H5|LZA`f.q]u{H5{|LZAhf.K]u{H5m|LZZAtaytH5d|1L:ZAxaytH5U|1LZAf.\u{@AH58|LYAf.\u{H5(|LYAf.\u{H5|LYAf.j\u{H5 |LyYA\aytH5|1LYYAaytH5{1L9YA8f.\u{H5{LYH5%zL_YtH5i1LLXAhaytH5i1LXALaytH5i1LXAPaytH5i1LXAf.R[u{H5Q{LaXAHf.,[u{H5iL;XAf.[u{H5{LXAaytH5li1LWAXaytH5^i1LWAf.Zu{H5LiLWAf.zZu{H5CiLWAf.TZu{H5uzLcWAf..Zu{H5izL=WIH5HxHWtH5Sz1LH WI8H5xHOWtH51z1LHVI H5wHWtH5z1LHVI(H5wHVtH5y1LHqVAPf.Up]hXH5=uE(NI>Ux])@eeH5;uEMwNI>UU]]`H5/uE(BNUuf(@pxhEA<$%EmeM]UuXXfWfTfUfVX\\\u|L5xI>H5tkMI>H5tRMI>H5t9MI>H5t MI>H5tMHĸ[A\A]A^A_]ÐUHAWAVAUATSH8@MLHHIIHHHEDž|HC8t@HHH=JtLAA,OA^AL%oA$HXtu>Dž2AA+`W*^N,ƒOȉXYM NX@ NX`HHHHxLI6 HؿHHL@I HHHL`I f)@Yf)YXf(ؿffYf\fY%MX\Y-Mf(Yf)f(YXf(YXQf)AfW1(f.WQˍD@AfA f)`^ ItJYYY^I0A$hItWfW8M0=It8YY^Y^XQ RL^Hf(`f(\Hf(@ff^f)M Ef(f(f^f)M(^EH}HuHpf(`f(Yf(YXY\f(XY^!HHXof(fWTKpYEY\YXxYEY\YX`YUYu\YXf)E1LLHxD)W*YB0XLHLLI! X\`\YYf(\XYXWQ\BIHcI9AH0HHHL|=HHMHXYQHHQHH;EuH8@[A\A]A^A_]FUHt\fWɃHcHcNH\JW*HX DIHKHIHIHD*THcHH J*HXW*XX HY GXX Hf(]f.UHAWAVATSHf(^GIHII^HUf(YHXH HYYX HYYYX^HYH HD H]YX 6HnHYYX^:H^ZHY2Hf)UVDD GHHA$$YfEWAX#Al$YX+Ad$AYX#HCA$$YfW\kAd$YXcAl$AYXkHCA$$AYAXcAl$AYXkAXl$fDWkf(Uf(f: sGYf(ff(fYf\fD(fD: A<$Ad$Yf(AT$AYY~fEWfWffofXf\f: fAYfXDfDXAYAXAYXXAAA_AYAXAYXXAYffAfYfAXfYfXfXfAXXfAA~H[A\A^A_]f.@UHAVSHf(^DIH^EUf(YEXE EYYX EYYYX^EYE EBEUYXLE EYYX^ PE^ pEY HEAH[A^]fUHHYfWX WYVXOYNX HBOYXJW YVXRO(YNXJHBO0YXJG8YFXBO@YNXJ]f.UHAWAVATSHf(^BIHII^ DUf(YDXD DYYX CYYYX^CYC CG@ C]YX CCYYX^C^CYCf)U?DCfDWHA$$YfEWAX#Al$Y\#Al$AYX+HCA$$YAXcAl$YXkAd$AYXcHCA$$AYAXcAl$AYXkAXl$kf(%Bf(UfYff(f\fYf(f: A<$Ad$E\$EYfYfEWfAXffYfAfXAYAXAYXAXAAAYAXAYXAWXAYfDffYfAXfAYfXfXfXXfAA~H[A\A^A_]ÐUHAWAVAUATSH8LEHMHUHuEILcoJH>IH >HEH>IMDWA*G Y?AXGAOHJЃHs 1HuxH)1W*YXA̍qW*YXЍqW*ATYXA\qW*YXATHH9uHt/Hf.DW*YXAHHuLLLH]HELELMuu+HL<L<HH8[A\A]A^A_]<UHAWAVAUATSH8MIIIIHEHELEOH8EHMLELMt.H5H8H5 dEЉL&<IHMEЅLU~ȃu81HHEH$ALLLMuHM8HH)11fI|$(H|7IH5`H`1l8A}t$IH=`v8 1Hg8IHS8IH?8HHv+8H8HH L7LA}DDDDH5ۀH1LILASARj7HL7IH5m 1LH>7LIOMGMOIGHIGHIG HIG$HIG4HIG8HIG@HIGDHIGHHIGPHIGTHMgXMW`M_dMohHH5$_HPLHxLhLpL`AULXASLARLAT$6HĀH8HH5^HLHxLhLp`Xg5HĀINMF MNIFHIFHIF$HIF*HIF0HIF6HIFHsH8HH5re1L#E<$HA<$uE1L5AHÝH;#AEt7LuH%sH8H5ae1H#Au.A<$t HrHH=We-#AH HP"A<$twIDDDDH5k1HHASARx"HHP"IH5wl 1HDL"HHK LC0LK@HCPHHC`HHCpHIIHHHHHHHHHHHHHHHHHHxL&L6LFLVLfH5cHPHHhLpLLHASL@ARL`AVLXATLAUxAW HĐHW}8H5cHHHhLpLH@`XxAW HĐHpLe HALcLHJ< HHL=l|AAt"tHoH8H5e1DAtHoH8H5e1DDEDf.HKLk,L{BLSXLcn1HPH5keHHMMATLAR8HH{8t11HH5DeHHMMATHHÄIkH5eH?H1LPLIH LL="{A?tsIDDDDH5g1HHASAR5HLMIH58h 1HD HH5e1LH A?tH5d1HHHH&HAAAt"tHmH8H5d1DAtHsmH8H5c1DkIcHkxHDEtHËHBHHSHKLCLKHCHHCHHCHLkLsL{LS L[Lc(HPH5LdHHLLLpATLhASLxARLAWLAVSLAUHPHx8toHH5cHHLLphxSHPHxHHHLHHHHLHHAQQRVSPAPH@HxCHLHHHLLHHAQQRVARPAPH@Hlw8uHSHLHHHLLHHpARQRSAPPAQ H@HWw8t HHjHH;EueHh[A\A]A^A_]HujH8H5h\1HmA$HNjH8H5e\1HFAf.fUHAWAVATSIIAODGDODW_H5Cc1LSARHLHH5c 1LDI[A\A^A_]f.UHAWAVAUATSPIH] H_APHJ^: AHHuD8EuHY A8HfWIfA@H&A H6A(Au&HA8f(fA HYAHqYAM HLH9Wf.ȸLRGfA(M8Hs:LAƆ?HJH5XbiuJApf.u7z5HApHHYAxHPt8M(HgH;APH5aH;A@H5aiH;A8H5aOH;A H5a5H;A(H5aH;H5a1LH;H5a1LH;H5a1LH;ApH5aH;AxH5aH[A\A]A^A_]H[A\A]A^A_]f.UHAWAVAUATSHIHRfHHEH](HLLƅLAFHLƅLAF HLXƅLAFHêLH,ƅLAFA*F YAXFAF H,r8HteH;IFHAVH5`1`H;AVH5`1KH;AV H5`16H;AFH5`H;AFH5`H;AF H5t` IFHIc^Hk8IF(HHEHX LE1E1HIq8tHdH81H5`DLHƅLJIF(BD HsLƅLIF(BD Hs,LƅLIF(BD Hp8t1HcH8IF(BD BL BT H5n_HsBL%ƅLIF(BD HsXLƅLaIF(BD (HsnLƅL6IF(BD 0Ho8t1H0cH8IF(BD BL (BT 0H5^IHHcHÄI8I9=HbHH;EuH[A\A]A^A_]fDUHAWAVAUATSHHbHHEЃXHE1LmLuE1HC(BD8  ^BD8 HC(BD8(^BD8(HC(BD80^BD80HC(JL8H`JL8HhJL8HpJL8 H@JL8(HHJD80HPCEċC EEayWA*YCXCHuwH`H@LLHEHK(JD9HEHK(JD9HEHK(JD9HEHK(JD9 HEHK(JD9(HEHK(JD90IHcCI8I9H%aHH;Eu1HĘ[A\A]A^A_]UHAWAVAUATSHAILeH`HHEL-}mA}t2H`HI|$(1 1HH5[1HHE>EyI\$0EE1f.HH1 HCDH{1 HCA}tH'`H8CT1H57[H{1~CH{&1iCH{41TCA}t/(H_H8CCH5ZH{N1 CH{\1C H{j1C A}t/(HL_H8CC H5]Z3IHxM9H_HH;EuH[A\A]A^A_]UHHdata.rawHGfLJnfLJnfLJnfLJnH$H`LJ@LJTHLJH@H0H?HX(^lHLJhHLJ`HLJHLJHLJHLJLJ\LJH~AH8H~7?HPHHHLJXHLJHLJxHLJpHLJHLJH]f.UHAVSHL5W]IH=X(t I>HH5Y12 I>H5Y1H I>`H5X1 I>H5X1 I>TH5X1 I>HH5X1 I>H5X I>dH5X1 I>HH5X1y I>HH5X1a I>0H5XH I>pH5X11 I>lH5X1 I>HH5X1 I>XH5X I>`H5X I>hH5X I>tH5X1 I>xH5X1 I>H5Xp I>H5XW I>H5X> I>H5X% I>\H5X1 I>H5X1 I>8H5X I>H5X[A^] UHAWAVSPIIHIǠH X11L: HoZH8H5vX1Lg H5LR IHt{NH=dXL{~911f.W*YCXCHS(HHcSH8H9|LHL 1H[A^A_]ÐUHAWAVAUATSP^NDF FHuNH5WIAE ~eA0HEH@(BD0BL0BT0B\0Bd0Bl0B40LH5WDD5 I8HuH[A\A]A^A_]ÐUHAWAVAUATSHxH}E8D|HEA9HIMcN$LHEHH]LHE~,1fDHEH H`HLHL9|HMHEJ4DAL}HEu1H}upI)L}1HEHLeILuIMBY;MXMEIM9uHEHUHMHH9HEH)HE1HEHMf.E1f.}0HUAHML<W*ECHps E1fE1H]LmDEBMXEECBDMXEECBDMiXEECBDMHXECIM9pHMHtQHEN4E1f.fECMHMMXMECIL9uIHEI9HUHHHHuH9H|H]HLuLHUH\LTHx[A\A]A^A_]H THH=R.=H=REHSHH=NRHSHH=RfUHAWAVAUATSHULc9EMEAMM)AE1WMVLM9J Bf.u ^1AtKfHBY\H\BY\HI9uMtH BY\BY \HL9MIMM9.BDJDB^DH]BDEMIN NJ HCHEHGHEE1DHMLMLUDD)D9}SE\$HcMIAtNDfWJ4H4B Y XHuAs%MIfWfWAEA)HEHHuH 1f.NLLMC YLH\LBYTXH\LBY\LXCYXXHA9uH]LMLUHMC \JKB^ B IM9[A\A]A^A_]ÐUHu Ѓu+BOONONHNHt[1fTTTTTTTTTTTTTTH9u]%RP%TP%VP%XP%ZP%\P%^P%`P%bP%dP%fP%hP%jP%lP%nP%pP%rP%tP%vP%xP%zP%|P%~P%P%P%P%P%P%P%P%P%P%P%P%PL]OAS%MOhhh%h:hRhfhrh~hhhhxhnhdhZhPhFhư>@@  ayayayayt$it$it$ii@Y@@????47´@GAmIn@t շ?3ھn@9RFߑ?-DT!@t ?ZmDp"A;Zx0N<[y1OwR,tO)qK&nH# j EgBd >"#%&'a)*;,-/01]348679:;Z=>5@AC|DEWGH1JK MyNOTQR.TU.A/@/@ Usage: ALOS_pre_process_SLC imagefile LEDfile [-radius RE] [-swap] [-V] [-debug] [-quiet] creates data.SLC and writes out parameters (PRM format) to stdout imagefile ALOS Level 1.1 complex file (CEOS format): LEDfile ALOS Level 1.1 LED file (CEOS leaderfile format): options: -near near_range specify the near_range (m) -radius RE specify the local earth radius (m) -SLC_factor fact scale factor to convert float to int SLC [1.0] -swap do byte-swap (should be automatic) -ALOS1 ALOS2 L1.1 data format -ALOS2 ALOS2 L1.1 data format (default) -LED write generic LED file -noLED oldstyle use ldr file for orbits directlyn-V verbose write information -debug write even more information -quiet don't write any information -tbias tbias correct the clock bias (positive value means plus) -rbias tbias correct the range bias (positive value means increase near range) Example: ALOS_pre_process_SLC IMG-HH-ALOS2011986990-140813-HBQR1.1__A LED-ALOS2011986990-140813-HBQR1.1__A -SLC_factor 1. -rbias -70.0000 -tbias 0.068759 .... swapping bytes rcouldn't open Level 1.1 IMG file couldn't open LED file creating multiple files due to PRF change (*.%d) %s.SLC%s.PRM%s.SLC.%d%s.PRM.%dwcan't open couldn't open output PRM file -near no option after -near! setting near_range to %9.2lf -radius no option after -radius! setting radius to %f -nrows no option after -nrows! setting nrows to %d -tbias no option after -tbias! setting tbias to %f -rbias no option after -rbias! setting rbias to %f -SLC_factor no option after -SLC_factor! setting SLC_factor to %f -ALOS1 processing ALOS1 L1.1 -ALOS2 processing ALOS2 L1.1 -roi writing roi_pac rsc files -LED creating *.LED file -noLED no *.LED file written (default) -debug debug and verbose output verbose output %s *** option not recognized *** .... reading header couldn't allocate memory for input indata. couldn't allocate memory for output indata. .... reading data (byte %ld) ***** warning sdr.record_length error %d missing line: n, seq# %d %d record_length changed Working on line %d prf %f record length %d slant_range %d near range change %d integers were clipped %f median absolute deviation after scaling is ERROR *** reset SCL_factor to something closer to %f input_file = %s num_rng_bins = %d bytes_per_line = %d good_bytes_per_line = %d first_sample = %d PRF = %f pulse_dur = %e near_range = %f num_lines = %d num_patches = %d SC_clock_start = %16.10lf SC_clock_stop = %16.10lf clock_start = %16.12lf clock_stop = %16.12lf header size is not 720 bytes prefix size is incorrect header_size %d line_prefix_size %d swap data %d .... reading header (byte %ld) *********** SAR FDR BINARY ********** record_seq_no ==> %4x record_subtype_code1 ==> %1x record_type_code1 ==> %1x record_subtype_code2 ==> %1x record_subtype_code3 ==> %1x record_length ==> %4x read %ld bytes at position %ld *********** SAR DATA DESCRIPTOR********** ascii_ebcdic_flag ==> %.2s blank_1 ==> %.2s format_doc_ID ==> %.12s format_control_level ==> %.2s file_design_descriptor ==> %.2s facility_soft_release ==> %.12s file_number ==> %.4s file_name ==> %.16s record_seq_loc_type_flag_1 ==> %.4s record_seq_loc_type_flag_2 ==> %.8s sequence_number_loc ==> %.4s record_code_loc_flag ==> %.4s record_code_loc ==> %.8s record_code_field_length ==> %.4s record_length_loc_flag ==> %.4s record_length_loc ==> %.8s record_length_field_length ==> %.4s blank_2 ==> %.68s number_sar_data_records ==> %.6s sar_data_record_length ==> %.6s blank_3 ==> %.24s num_bits_sample ==> %.4s num_sample_data_group ==> %.4s num_bytes_data_group ==> %.4s just_order_samples ==> %.4s num_sar_channels ==> %.4s num_lines_data_set ==> %.8s num_left_border_pixels ==> %.4s total_num_data_groups ==> %.8s num_right_border_pixels ==> %.4s num_top_border_lines ==> %.4s num_bottom_border_lines ==> %.4s interleave_indicator ==> %.4s num_physical_records_line ==> %.2s num_physical_records_multi_chan ==> %.2s num_bytes_prefix ==> %.4s num_bytes_SAR_data ==> %.8s num_bytes_suffix ==> %.4s pref_fix_repeat_flag ==> %.4s sample_data_lin_no ==> %.8s SAR_chan_num_loc ==> %.8s time_SAR_data_line ==> %.8s left_fill_count ==> %.8s right_fill_count ==> %.8s pad_pixels ==> %.4s blank_4 ==> %.28s sar_data_line_qual_loc ==> %.8s calib_info_field_loc ==> %.8s gain_values_field_loc ==> %.8s bias_values_field_loc ==> %.8s sar_data_format_code_1 ==> %.28s sar_data_format_code_2 ==> %.4s num_left_fill_bits_pixel ==> %.4s num_right_fill_bits_pixel ==> %.4s max_range_pixel ==> %.8s blank_5 ==> %.272s *********** SAR DATA DESCRIPTOR********** sequence_number ==> %d subtype ==> %.4s record_length ==> %d data_line_number ==> %d data_record_index ==> %d n_left_fill_pixels ==> %d n_data_pixels ==> %d n_right_fill_pixels ==> %d sensor_update_flag ==> %d sensor_acquisition_year ==> %d sensor_acquisition_DOY ==> %d sensor_acquisition_msecs_day ==> %d channel_indicator ==> %d channel_code ==> %d transmit_polarization ==> %d receive_polarization ==> %d PRF ==> %d scan_ID ==> %d onboard_range_compress ==> %d chirp_type ==> %d chirp_length ==> %d chirp_constant_coeff ==> %d chirp_linear_coeff ==> %d chirp_quad_coeff ==> %d receiver_gain ==> %d nought_line_flag ==> %d elec_antenna_elevation_angle ==> %d mech_antenna_elevation_angle ==> %d elec_antenna_squint_angle ==> %d mech_antenna_squint_angle ==> %d slant_range ==> %d data_record_window_position ==> %d platform_update_flag ==> %d platform_latitude ==> %d platform_longitude ==> %d platform_altitude ==> %d platform_ground_speed ==> %d platform_velocity_x ==> %d platform_velocity_y ==> %d platform_velocity_z ==> %d platform_acc_x ==> %d platform_acc_y ==> %d platform_acc_z ==> %d platform_track_angle_1 ==> %d platform_track_angle_2 ==> %d platform_pitch_angle ==> %d platform_roll_angle ==> %d platform_yaw_angle ==> %d frame_counter ==> %d **** record_length is %d ! expect something like 340000 .... try -swap option? exiting end: shift exceeds data window %d exitting near_range, shift = %d %d new parameters: sequence number %d PRF %f near_range %lf *** PRF changed from %lf to %lf at line %d (byte %ld) end: PRF changed from %lf to %lf at line %d %s %s num_valid_az = %d nrows = %d first_line = %d XXXXXXXXdeskew = %s caltone = %lf st_rng_bin = %d Flip_iq = %s offset_video = %s az_res = %lf nlooks = %d chirp_ext = %d scnd_rng_mig = %s rng_spec_wgt = %lf rm_rng_band = %lf rm_az_band = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate = %lf PRF = %lf near_range = %lf clock_start = %16.12lf clock_stop = %16.12lf led_file = %s date = %.6s orbdir = %.1s lookdir = %.1s radar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lf I_mean = %lg Q_mean = %lg SC_vel = %lf earth_radius = %lf equatorial_radius = %lf polar_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf fd1 = %lf fdd1 = %12.8lf fddd1 = %lf sub_int_r = %f sub_int_a = %f B_parallel = %f B_perpendicular = %f baseline_start = %f alpha_start = %f baseline_end = %f alpha_end = %f SLC_file = %s dtype = %s SLC_scale = %f interpolation point outside of data constraints hermite: interpolation not in center interval nan! ALOS_ldr_orbit t1 %lf t1 %lf height_start %lf re_start %lf vg_start%lf t1 %lf t2 %lf height %lf re_c %lf vg %lf t2 %lf t2 %lf height_end %lf re__end %lf vg_end %lf SC_vel = %lf earth_radius = %lf SC_height = %lf SC_height_start = %lf SC_height_end = %lf ... calc_height_velocity time %lf nd %d C pt %lf py %lf pvy %lf time %lf y %lf ir %d C pt %lf pz %lf pvz %lf time %lf z %lf ir %d LED.logcan't open opened LED log file %s .... reading sarleader %2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c*********** SAR FDR FIXED SEGMENT *********** A_E_flag ==> %.2s blank_2 ==> %.2s for_con_doc ==> %.12s for_con_doc_rev_level ==> %.2s file_des_rev_level ==> %.2s softw_rel ==> %.12s file_number ==> %.4s file_name ==> %.16s rec_seq_loc_type_flag ==> %.4s seq_number_loc ==> %.8s seq_number_field_length ==> %.4s rec_code_loc_type_flag ==> %.4s rec_code_loc ==> %.8s rec_code_field_length ==> %.4s rec_len_loc_type_flag ==> %.4s rec_len_loc ==> %.8s rec_len_field_length ==> %.4s reserved_4 ==> %.4s reserved_segment ==> %.64s %6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%60c%6c%6c%288c*********** SAR FDR VARIABLE SEG *********** n_data_set_summ_rec ==> %.6s data_set_summ_rec_len ==> %.6s n_map_projec_rec ==> %.6s map_projec_rec_len ==> %.6s n_plat_pos_data_rec ==> %.6s plat_pos_data_rec_len ==> %.6s n_att_data_rec ==> %.6s att_data_rec_len ==> %.6s n_rad_data_rec ==> %.6s rad_data_rec_len ==> %.6s n_rad_comp_rec ==> %.6s rad_comp_rec_len ==> %.6s n_data_qua_summ_rec ==> %.6s data_qua_summ_rec_len ==> %.6s n_data_hist_rec ==> %.6s data_hist_rec_len ==> %.6s n_range_spectra_rec ==> %.6s range_spectra_rec_len ==> %.6s n_DEM_des_rec ==> %.6s DEM_des_rec_len ==> %.6s n_radar_par_update_rec ==> %.6s radar_par_update_rec_len ==> %.6s n_annotation_data_rec ==> %.6s annotation_data_rec_len ==> %.6s n_detailed_proc_rec ==> %.6s detailed_proc_rec_len ==> %.6s n_cal_rec ==> %.6s cal_rec_len ==> %.6s n_GCP_rec ==> %.6s GCP_rec_len ==> %.6s spare_60 ==> %.60s n_facility_data_rec ==> %.6s facility_data_rec_len ==> %.6s blanks_288 ==> %.288s %4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c%4c%4c%16c%16c%16c%16c%16c%4c%8c%8c%8c%8c%4c%8c%16c%4c%4c%16c%4c%28c%120c%8c%8c%2048c%26c*********** DSS RECORD *********** dss_rec_seq_num ==> %.4s chan_ind ==> %.4s reserved1 ==> %.16s scene_number ==> %.32s input_scene_center_time ==> %.32s spare1 ==> %.16s center_lat ==> %.16s center_long ==> %.16s center_heading ==> %.16s ellipsoid_designator ==> %.16s ellipsoid_semimajor_axis ==> %.16s ellipsoid_semiminor_axis ==> %.16s earth_constant ==> %.16s spare2 ==> %.16s ellipsoid_j2 ==> %.16s ellipsoid_j3 ==> %.16s ellipsoid_j4 ==> %.16s spare ==> %.16s reserved_new ==> %.16s scene_centre_line_number ==> %.8s scene_centre_pixel_number ==> %.8s scene_length ==> %.16s scene_width ==> %.16s spare3 ==> %.16s nchan ==> %.4s spare4 ==> %.4s mission_identifier ==> %.16s sensor_id_and_mode ==> %.32s orbit_number ==> %.8s lat_nadir_center ==> %.8s long_nadir_center ==> %.8s heading_nadir_center ==> %.8s clock_angle ==> %.8s incidence_angle_center ==> %.8s radar_freq ==> %.8s radar_wavelength ==> %.16s motion_compensation ==> %.2s range_pulse_code_specifier ==> %.16s range_pulse_amplitude_const ==> %.16s range_pulse_amplitude_lin ==> %.16s range_pulse_amplitude_quad ==> %.16s range_pulse_amplitude_cube ==> %.16s range_pulse_amplitude_quart ==> %.16s range_pulse_phase_const ==> %.16s range_pulse_phase_lin ==> %.16s range_pulse_phase_quad ==> %.16s range_pulse_phase_cube ==> %.16s range_pulse_phase_quart ==> %.16s chirp_extraction_index ==> %.8s spare5 ==> %.8s sampling_rate ==> %.16s range_gate_early_edge_start_image ==> %.16s range_pulse_length ==> %.16s reserved2 ==> %.4s range_compressed_flag ==> %.4s reserved3 ==> %.32s quantisation_in_bits ==> %.8s quantizer_descriptor ==> %.12s dc_bias_i ==> %.16s dc_bias_q ==> %.16s gain_imbalance ==> %.16s spare6 ==> %.32s reserved4 ==> %.16s antenna_mech_bor ==> %.16s reserved5 ==> %.4s nominal_prf ==> %.16s reserved6 ==> %.32s satelite_encoded_binary_time ==> %.16s satelite_clock_time ==> %.32s satelite_clock_increment ==> %.8s spare7 ==> %.8s processing_facility_identifier ==> %.16s processing_system_id ==> %.8s processing_version_id ==> %.8s reserved7 ==> %.32s product_type_id ==> %.32s alg_id ==> %.32s nlooks_az ==> %.16s neff_looks_range ==> %.16s bandwidth_look_az ==> %.16s bandwidth_look_range ==> %.16s total_look_bandwidth_az ==> %.16s total_look_bandwidth_range ==> %.16s w_func_designator_az ==> %.32s w_func_designator_range ==> %.32s data_input_source ==> %.16s nom_res_3db_range ==> %.16s nom_res_az ==> %.16s reserved8 ==> %.32s a_track_dop_freq_const_early_image ==> %.16s a_track_dop_freq_lin_early_image ==> %.16s a_track_dop_freq_quad_early_image ==> %.16s spare8 ==> %.16s c_track_dop_freq_const_early_image ==> %.16s c_track_dop_freq_lin_early_image ==> %.16s c_track_dop_freq_quad_early_image ==> %.16s time_direction_along_pixel ==> %.8s time_direction_along_line ==> %.8s a_track_dop_freq_rate_const_early_image ==> %.16s a_track_dop_freq_rate_lin_early_image ==> %.16s a_track_dop_freq_rate_quad_early_image ==> %.16s spare9 ==> %.16s c_track_dop_freq_rate_const_early_image ==> %.16s c_track_dop_freq_rate_lin_early_image ==> %.16s c_track_dop_freq_rate_quad_early_image ==> %.16s spare10 ==> %.16s line_content_indicator ==> %.8s clut_lock_flag ==> %.4s autofocussing_flag ==> %.4s line_spacing ==> %.16s pixel_spacing_range ==> %.16s range_compression_designator ==> %.16s spare11 ==> %.16s spare12 ==> %.16s calibration_data_indicator ==> %.4s start_line_upper_image ==> %.8s stop_line_upper_image ==> %.8s start_line_bottom_image ==> %.8s stop_line_bottom_image ==> %.8s PRF_switch ==> %.4s PRF_switch_line ==> %.8s spare13 ==> %.16s yaw_steering_mode ==> %.4s parameter_table ==> %.4s nom_offnadir_angle ==> %.16s antenna_beam_number ==> %.4s spare14 ==> %.28s spare15 ==> %.120s num_anno_points ==> %.8s spare16 ==> %.8s image_annotation ==> %.2048s spare17 ==> %.26s SKYALOS using ALOS_format %d: %3s SAR mode |%.32s| (HIGH RESOLUTION) SAR mode |%.32s| (WIDE OBSERVATION) SAR mode |%.32s| (POLARIMETRY) uncertain SAR mode; assuming high resolution %32c%16c%16c%16c%16c%16c%16c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%16c%16c%16c*********** PLATFORM POSITION VECTOR ********** orbital_elements ==> |%.32s| orbital_element_1 ==> |%.16s| orbital_element_2 ==> |%.16s| orbital_element_3 ==> |%.16s| orbital_element_4 ==> |%.16s| orbital_element_5 ==> |%.16s| orbital_element_6 ==> |%.16s| num_data_points ==> |%.4s| year_of_data_points ==> |%.4s| month_of_data_points ==> |%.4s| day_of_data_points ==> |%.4s| day_of_data_points_in_year ==> |%.4s| sec_of_day_of_data ==> |%.22s| data_points_time_gap ==> |%.22s| ref_coord_sys ==> |%.64s| greenwhich_mean_hour_angle ==> |%.22s| a_track_pos_err ==> |%.16s| c_track_pos_err ==> |%.16s| radial_pos_err ==> |%.16s| a_track_vel_err ==> |%.16s| c_track_vel_err ==> |%.16s| radial_vel_err ==> |%.16s| Warning: number of orbit points %d != 28 .... reading sarleader %d %22c%22c%22c%22c%22c%22c*********** PLATFORM VECTOR ********** pos_x ==> %.22s pos_y ==> %.22s pos_z ==> %.22s vel_x ==> %.22s vel_y ==> %.22s vel_z ==> %.22s %18c%1c%579c%4c*********** ATTITUDE INFO ********** num_att_data_points ==> |%.4s| Warning: number of attitude points %d != 22 %4c%8c%4c%4c%4c%14c%14c%14c%4c%4c%4c%14c%14c%14c*********** ATTITUDE DATA ********** day_of_year ==> |%.4s| millisecond_day ==> |%.8s| pitch_data_quality ==> |%.4s| roll_data_quality ==> |%.4s| yaw_data_quality ==> |%.4s| pitch ==> |%.14s| roll ==> |%.14s| yaw ==> |%.14s| pitch_rate_data_quality ==> |%.4s| roll_rate_data_quality ==> |%.4s| yaw_rate_data_quality ==> |%.4s| pitch_rate ==> |%.14s| roll_rate ==> |%.14s| yaw_rate ==> |%.14s| *********** SAR FDR BINARY ********** record_seq_no ==> %1d record_subtype_code1 ==> %1x record_type_code1 ==> %1x record_subtype_code2 ==> %1x record_subtype_code3 ==> %1x record_length ==> %1d read %d items (%ld bytes) at position %ld BASICradar_wavelength = %lg chirp_slope = %lg rng_samp_rate = %lg I_mean = %lf Q_mean = %lf orbdir = %s lookdir = %s date = %s fd1 = %lf fdd1 = %lf number of attitude points %ld doy %d ms %d pitch %12.6f roll %12.6f yaw %12.6f nd %d iy %d id %d sec %lf dsec %lf pt0 %lf orbit point: %d %g %g %g ALOS default settings ************* led_file = %s input_file = %s num_valid_az = %d nrows = %d first_line = %d deskew = %s caltone = %lf st_rng_bin = %d Flip_iq(iqflip) = %s offset_video(off_vid) = %s az_res = %lf nlooks = %d chirp_ext(nextend) = %d scnd_rng_mig(srm) = %s rng_spec_wgt(rhww) = %lf rm_rng_band(pctbw) = %lf rm_az_band(pctbwaz) = %lf rshift = %d ashift = %d stretch_r = %lf stretch_a = %lf a_stretch_r = %lf a_stretch_a = %lf first_sample = %d SC_identity = %d rng_samp_rate(fs) = %lf near_range = %lf %s.LEDwriting generic LED file: %s error opening%d %d %d %lf %lf %d %d %lf %lf %lf %lf %lf %lf %lf Sorry, couldn't allocate memory for A-matrix. sorry, couldn't allocate memory for A-matrix. Sorry, couldn't allocate memory for B-vector. underdetermined system 00X! ap HHяH p0@ !!&*P4p@0A DEEHlmw@y||ȐҐܐ",6@JT^hr|‘֑̑0"(`$@___stack_chk_guardQr@___stderrp@___stdoutp@dyld_stub_binderr(@___bzeror0@___sincos_stretr8@___sprintf_chkr@@___stack_chk_failrH@___strcpy_chkrP@_acosrX@_asinr`@_atanrh@_atofrp@_atoirx@_exitr@_fcloser@_fmodr@_fopenr@_fprintfr@_fputsr@_freadr@_freer@_fscanfr@_fseekr@_ftellr@_fwriter@_mallocr@_memsetr@_powr@_printfr@_putsr@_rewindr@_sinr@_strcmpr@_strncmpr@_strncpyr@_strtodr@_strtolr@_tan__mh_execute_headermagprassign_sardata_paramsshcfidnull_sio_structALOS_ectwrite_USAGEledflagSAR_mode qu verbose intvecet_mstauss_jordanfilesclocksecondsorbit_infoattitude_infoarse_ALOS_commandsrut_sio_structolyfite1bias oi ad_set_paramsALOS_sardata_infodata_SLCsarleader'9Ket_wapdr lc_fact file_positionALOS_defaultsNNandle_prf_changeermite_cPheck_shiftross3_alRint_efix_off paramsbinary_positionALOS_defaultsSVill_shift_dataorce V_ALOS_data_info32 ^s_big_endian_nterpolate_ALOS_orbita_aiefdebug opp abbcf{ldr_format orbitprmc_height_velocity2ut1i2ecrr2eci_slowransform_orbits_ecr2ecibias ALOS_LEDorbЌ_slope d_slope ad_pol iet_flag  @@0` =  l?v- p7 @>R%iIr0C)1 t 0 xJ@O`+ | ` +p *y:`1GMM0(`=kSR00 p pN1 (v?)Mp3] g s w ~ WP'  0'  0p/% ,`}F Op_Pjs $+19@GOW_dlrzABCDHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg@EFGABCDHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef _ALOS_format_ALOS_ldr_orbit_ALOS_ldr_prm_SAR_mode_USAGE__mh_execute_header_assign_sardata_params_cal2ut1_calc_height_velocity_check_shift_cross3__debug_dfd_die_dopp_eci2ecr_ecr2eci_fill_shift_data_force_slope_forced_slope_gauss_jordan_get_attitude_info_get_clock_get_files_get_orbit_info_get_seconds_gmst_handle_prf_change_hermite_c_interpolate_ALOS_orbit_interpolate_ALOS_orbit_slow_is_big_endian__is_big_endian___ledflag_main_matvec_null_sio_struct_parse_ALOS_commands_polyfit_prefix_off_print_ALOS_defaults_print_binary_position_print_params_put_sio_struct_quad_pol_quiet_flag_r1_rbias_read_ALOS_data_SLC_read_ALOS_sarleader_read_sardata_info_reset_params_roi_sdr_set_ALOS_defaults_set_file_position_slc_fact_swap_swap32_swap_ALOS_data_info_tbias_transform_orbits_ecr2eci_verbose_write_ALOS_LED_write_orb___bzero___sincos_stret___sprintf_chk___stack_chk_fail___stack_chk_guard___stderrp___stdoutp___strcpy_chk_acos_asin_atan_atof_atoi_exit_fclose_fmod_fopen_fprintf_fputs_fread_free_fscanf_fseek_ftell_fwrite_malloc_memset_pow_printf_puts_rewind_sin_strcmp_strncmp_strncpy_strtod_strtol_tandyld_stub_binderGMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/Makefile000644 015705 000000 00000000637 13505462014 025014 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_pre_process_SLC CSRCS = ALOS_pre_process_SLC.c \ parse_ALOS_commands.c \ read_ALOS_data_SLC.c \ swap_ALOS_data_info.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/swap_ALOS_data_info.c000644 015705 000000 00000004431 13505462014 027310 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /* this swaps bytes */ #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) /*------------------------------------------------------------------*/ /* need to swap bytes for all */ /* must be a better way to do this */ void swap_ALOS_data_info(struct sardata_info *sdr) { FIX_SHORT(sdr->channel_indicator); FIX_SHORT(sdr->channel_code); FIX_SHORT(sdr->transmit_polarization); FIX_SHORT(sdr->receive_polarization); FIX_SHORT(sdr->onboard_range_compress); FIX_SHORT(sdr->chirp_type); FIX_SHORT(sdr->nought_line_flag); FIX_SHORT(sdr->platform_update_flag); FIX_INT(sdr->sequence_number); FIX_INT(sdr->record_length); FIX_INT(sdr->data_line_number); FIX_INT(sdr->data_record_index); FIX_INT(sdr->n_left_fill_pixels); FIX_INT(sdr->n_data_pixels); FIX_INT(sdr->n_right_fill_pixels); FIX_INT(sdr->sensor_update_flag); FIX_INT(sdr->sensor_acquisition_year); FIX_INT(sdr->sensor_acquisition_DOY); FIX_INT(sdr->sensor_acquisition_msecs_day); FIX_INT(sdr->PRF); FIX_INT(sdr->scan_ID); FIX_INT(sdr->chirp_length); FIX_INT(sdr->chirp_constant_coeff); FIX_INT(sdr->chirp_linear_coeff); FIX_INT(sdr->chirp_quad_coeff); FIX_INT(sdr->receiver_gain); FIX_INT(sdr->elec_antenna_squint_angle); FIX_INT(sdr->mech_antenna_squint_angle); FIX_INT(sdr->slant_range); FIX_INT(sdr->data_record_window_position); FIX_INT(sdr->platform_latitude); FIX_INT(sdr->platform_longitude); FIX_INT(sdr->platform_altitude); FIX_INT(sdr->platform_ground_speed); FIX_INT(sdr->platform_velocity_x); FIX_INT(sdr->platform_velocity_y); FIX_INT(sdr->platform_velocity_z); FIX_INT(sdr->platform_acc_x); FIX_INT(sdr->platform_acc_y); FIX_INT(sdr->platform_acc_z); FIX_INT(sdr->platform_track_angle_1); FIX_INT(sdr->platform_track_angle_2); FIX_INT(sdr->platform_pitch_angle); FIX_INT(sdr->platform_roll_angle); FIX_INT(sdr->platform_yaw_angle); if (ALOS_format == 0) FIX_INT(sdr->frame_counter); } /*------------------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/read_ALOS_data_SLC.c000644 015705 000000 00000041051 13505462014 026736 0ustar00sandwellwheel000000 000000 /***************************************************************************/ /* read_ALOS_data reads an ALOS IMG file containing SLC data. */ /* The program skips the first 720 bytes of the IMG file but copies the */ /* remaining data to the IMG.SLC file after checking and fixing problems. */ /* The first record is read to determine the linelength, starting PRF, */ /* and near_range. If the line length or PRF change then the program */ /* halts. If the near_range changes then the lines are shifted and */ /* unconstrained values at the ends are set to zero. */ /* During this processing the available parameters are added to the */ /* PRM-file. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 03/18/2013 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 06/29/2006 added the near_range as an optional command-line argument * * 02/19/2007 added the ability to remove duplicate lines * * 03/07/2007 more robust to bad data in file * * 03/26/2007 ability to swap bytes (read on PC) RJM * * 03/28/2007 part of subroutine RJM * * removed set n_azimuth to 9000 rather than default * * 07/17/08 creates new file when prf changes RJM * * 07/17/08 reformatted; added functions RJM * ***************************************************************************/ /* the data header information is read into the structure dfd the line prefix information is read into sdr Values read here (and or generated) are: num_rng_bins bytes_per_line good_bytes_per_line PRF pulse_dur near_range num_lines num_patches SC_clock_start SC_clock_stop clock_start clock_stop */ #include "image_sio.h" #include "lib_functions.h" void swap32(float *, float *, int); void swap_ALOS_data_info(struct sardata_info *sdr); long read_sardata_info(FILE *, struct PRM *, int *, int *); void print_params(struct PRM *prm); int assign_sardata_params(struct PRM *, int, int *, int *); int check_shift(struct PRM *, int *, int *, int *, int); int set_file_position(FILE *, long *, int); int reset_params(struct PRM *prm, long *, int *, int *); int fill_shift_data(int, int, int, int, int, char *, char *, FILE *); int handle_prf_change(struct PRM *, FILE *, long *, int); struct sardata_record r1; struct sardata_descriptor dfd; struct sardata_info sdr; long read_ALOS_data_SLC(FILE *imagefile, FILE *outfile, struct PRM *prm, long *byte_offset) { float *rdata, *rdata_swap; short *i2data; int record_length0; /* length of record read at start of file */ int record_length1; /* length of record read in file */ int start_sdr_rec_len = 0; /* sdr record length for fisrt record */ int slant_range_old = 0; /* slant range of previous record */ int line_suffix_size; /* number of bytes after data */ int data_length; /* bytes of data */ int n, m, ishift, shift, shift0, jj; int header_size, line_prefix_size; int nclip = 0, nsum = 0; double rtest, sgn, rsum = 0., rmad = 0., tfac = 1.; double get_clock(); if (debug) fprintf(stderr, ".... reading header \n"); /* read header information */ read_sardata_info(imagefile, prm, &header_size, &line_prefix_size); /* calculate parameters (data length, range bins, etc) */ assign_sardata_params(prm, line_prefix_size, &line_suffix_size, &record_length0); /* allocate memory */ if ((rdata = (float *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if ((rdata_swap = (float *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if ((i2data = (short *)malloc(record_length0)) == NULL) die("couldn't allocate memory for output indata.\n", ""); // fprintf(stderr,"after allocate data\n"); /* if byte_offset < 0 this is the first time through */ /* if prf change has occurred, set file to byte_offset */ set_file_position(imagefile, byte_offset, header_size); if (verbose) fprintf(stderr, ".... reading data (byte %ld) \n", ftell(imagefile)); shift0 = 0; n = 1; m = 0; /* read the rest of the file */ while ((fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile)) == 1) { fseek(imagefile, prefix_off, SEEK_CUR); /* skip extra bytes in ALOS-2 prefix */ n++; /* checks for little endian/ big endian */ if (swap) swap_ALOS_data_info(&sdr); /* if this is partway through the file due to prf change, reset sequence, * PRF, and near_range */ if ((*byte_offset > 0) && (n == 2)) reset_params(prm, byte_offset, &n, &m); if (n == 2) start_sdr_rec_len = sdr.record_length; if (sdr.record_length != start_sdr_rec_len) { printf(" ***** warning sdr.record_length error %d \n", sdr.record_length); sdr.record_length = start_sdr_rec_len; sdr.PRF = prm->prf; sdr.slant_range = slant_range_old; } if (sdr.sequence_number != n) printf(" missing line: n, seq# %d %d \n", n, sdr.sequence_number); /* check for changes in record_length and PRF */ record_length1 = sdr.record_length - line_prefix_size - line_suffix_size; if (record_length0 != record_length1) die("record_length changed", ""); /* if prf changes, close file and set byte_offset */ if ((sdr.PRF) != prm->prf) { handle_prf_change(prm, imagefile, byte_offset, n); break; } /* check shift to see if it varies from beginning or from command line value */ check_shift(prm, &shift, &ishift, &shift0, record_length1); if ((verbose) && (n / 2000.0 == n / 2000)) { fprintf(stderr, " Working on line %d prf %f record length %d slant_range %d \n", sdr.sequence_number, 0.001 * sdr.PRF, record_length1, sdr.slant_range); } /* read data */ data_length = record_length1 / 4; slant_range_old = sdr.slant_range; if (fread((float *)rdata, 4, data_length, imagefile) != data_length) break; /* skip over suffix */ fseek(imagefile, line_suffix_size, SEEK_CUR); /* write line header to output data */ /*fwrite((void *) &sdr, line_prefix_size, 1, outfile);*/ /* swap the floats if needed and compute some statistics */ if (swap) swap32(rdata, rdata_swap, data_length); for (jj = 0; jj < data_length; jj++) { sgn = 1.; // if(jj%2 != 0) sgn = -1.; experiment to switch sign of imaginary // component if (swap) { rtest = sgn * slc_fact * rdata_swap[jj]; } else { rtest = sgn * slc_fact * rdata[jj]; } /* compute the average value of output */ rsum = rsum + fabs(rtest); nsum = nsum + 1; i2data[jj] = (short)clipi2(rtest); if ((int)fabs(rtest) > I2MAX) nclip = nclip + 1; } /* write data */ if (shift == 0) { fwrite((float *)i2data, 2, data_length, outfile); /* if data is shifted, fill in with data values of NULL_DATA at start or * end*/ } else if (shift != 0) { fprintf(stderr, "near range change"); break; } } //printf("chirp_length = %.12d\n",sdr.chirp_length); //printf("chirp_linear_coeff = %.12d\n",sdr.chirp_linear_coeff); /* calculate end time and fix prf */ prm->prf = 0.001 * prm->prf; prm->clock_stop = get_clock(sdr, tbias); prm->SC_clock_stop = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_stop; /* m is non-zero only in the event of a prf change */ prm->num_lines = n - m - 1; /* make sure num lines is divisible by 32 */ prm->num_lines = prm->num_lines - prm->num_lines % 32; /* for SLC data the prm->nrows = prm->num_valid_az = prm->num_lines and * prm->num_patches = 1 */ prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; if (verbose) print_params(prm); fprintf(stderr, " %d integers were clipped \n", nclip); rmad = rsum / nsum; tfac = 2000. / rmad; if (tfac < 0.333 || tfac > 3.0) { fprintf(stderr, " %f median absolute deviation after scaling is \n", rmad); fprintf(stderr, " ERROR *** reset SCL_factor to something closer to %f \n", tfac * slc_fact); } free(rdata); free(rdata_swap); free(i2data); fclose(imagefile); fclose(outfile); return (*byte_offset); } /***************************************************************************/ double get_clock(struct sardata_info sdr, double tbias) { double time; // nsd = 24.0*60.0*60.0; /* seconds in a day */ time = (double)sdr.sensor_acquisition_DOY + (double)sdr.sensor_acquisition_msecs_day / 1000.0 / 86400.0 + tbias / 86400.0; return (time); } /***************************************************************************/ void print_params(struct PRM *prm) { fprintf(stdout, "input_file = %s \n", prm->input_file); fprintf(stdout, "num_rng_bins = %d \n", prm->num_rng_bins); fprintf(stdout, "bytes_per_line = %d \n", prm->bytes_per_line); fprintf(stdout, "good_bytes_per_line = %d \n", prm->good_bytes); fprintf(stdout, "first_sample = %d \n", prm->first_sample); fprintf(stdout, "PRF = %f \n", prm->prf); fprintf(stdout, "pulse_dur = %e \n", prm->pulsedur); fprintf(stdout, "near_range = %f \n", prm->near_range); fprintf(stdout, "num_lines = %d \n", prm->num_lines); fprintf(stdout, "num_patches = %d \n", prm->num_patches); fprintf(stdout, "SC_clock_start = %16.10lf \n", prm->SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf \n", prm->SC_clock_stop); fprintf(stdout, "clock_start = %16.12lf \n", prm->clock_start); fprintf(stdout, "clock_stop = %16.12lf \n", prm->clock_stop); } /***************************************************************************/ long read_sardata_info(FILE *imagefile, struct PRM *prm, int *header_size, int *line_prefix_size) { long nitems; *header_size = sizeof(struct sardata_record) + sizeof(struct sardata_descriptor); *line_prefix_size = sizeof(struct sardata_info) + prefix_off; if (*header_size != 720) die("header size is not 720 bytes\n", ""); if (*line_prefix_size != (412 + prefix_off)) die("prefix size is incorrect \n", ""); if (debug) fprintf(stderr, " header_size %d line_prefix_size %d swap data %d\n", *header_size, *line_prefix_size, swap); /* make sure that we are at the beginning */ /* re-read header even if resetting after a PRF change */ rewind(imagefile); if (verbose) fprintf(stderr, ".... reading header (byte %ld) \n", ftell(imagefile)); /* data processed before Sept 15, 2006 have a timing bias of 0.9 s */ /* data processed after this data have a smaller bias 0.0 s */ nitems = fread((void *)&r1, sizeof(struct sardata_record), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_RECORD_WCS, SARDATA_RECORD_RVL(&r1)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_record)), ftell(imagefile)); } nitems = fread((void *)&dfd, sizeof(struct sardata_descriptor), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_DESCRIPTOR_WCS, SARDATA_DESCRIPTOR_RVL(&dfd)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_descriptor)), ftell(imagefile)); } nitems = fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile); fseek(imagefile, prefix_off, SEEK_CUR); /* skip extra bytes in ALOS-2 prefix */ if (debug) fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_info) + prefix_off), ftell(imagefile)); /* swap data little end/ big end if needed */ if (swap) swap_ALOS_data_info(&sdr); if (debug) fprintf(stderr, SARDATA__WCS, SARDATA_RVL(sdr)); return (nitems); } /***************************************************************************/ int assign_sardata_params(struct PRM *prm, int line_prefix_size, int *line_suffix_size, int *record_length0) { double get_clock(); prm->prf = sdr.PRF; prm->pulsedur = (1e-9) * sdr.chirp_length; prm->chirp_slope = sdr.chirp_linear_coeff/(1e-6); prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; /* record_length is 21100 */ /* beginning of line has a 412 byte prefix */ /* end of line has a 80 byte (40 pixels) suffix (right-fill pixels)*/ /* record_length0 (data length) is (20688 - 412) = 20276 */ /* n_data_pixels 10304 */ /* 2 bytes per pixel */ /* 412 bytes + (2*10304) bytes + (40*2) bytes = 21100 bytes*/ prm->good_bytes = 8 * sdr.n_data_pixels + line_prefix_size; prm->chirp_ext = 0; prm->num_rng_bins = sdr.n_data_pixels + prm->chirp_ext; /* chirp_ext formerly nextend */ prm->bytes_per_line = sdr.record_length; *line_suffix_size = sdr.record_length - prm->good_bytes; *record_length0 = sdr.record_length - line_prefix_size - *line_suffix_size; /* set to 4 times the number of range bins for PRM file */ prm->good_bytes = 4 * prm->num_rng_bins; prm->bytes_per_line = 4 * prm->num_rng_bins; /* set the mean values to zero */ prm->xmi = 0.; prm->xmq = 0.; prm->first_sample = 0; if (prm->near_range < 0) prm->near_range = sdr.slant_range; if (*record_length0 > 340000) { fprintf(stderr, "**** record_length is %d !\n", *record_length0); die("expect something like 340000 .... try -swap option?\n", "exiting"); } return (EXIT_SUCCESS); } /***************************************************************************/ int check_shift(struct PRM *prm, int *shift, int *ishift, int *shift0, int record_length1) { *shift = 2 * floor(0.5 + (sdr.slant_range - prm->near_range) / (0.5 * SOL / prm->fs)); *ishift = abs(*shift); if (*ishift > record_length1) { printf(" end: shift exceeds data window %d \n", *shift); die("exitting", ""); } if (*shift != *shift0) { printf(" near_range, shift = %d %d \n", sdr.slant_range, *shift); *shift0 = *shift; } return (EXIT_SUCCESS); } /***************************************************************************/ int set_file_position(FILE *imagefile, long *byte_offset, int header_size) { if (*byte_offset < 0) { *byte_offset = 0; rewind(imagefile); fseek(imagefile, header_size, SEEK_SET); } else { fseek(imagefile, *byte_offset, SEEK_SET); } return (EXIT_SUCCESS); } /***************************************************************************/ int reset_params(struct PRM *prm, long *byte_offset, int *n, int *m) { double get_clock(); prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; prm->prf = sdr.PRF; prm->near_range = sdr.slant_range; *n = sdr.sequence_number; *m = *n; *byte_offset = 0; if (verbose) { fprintf(stderr, " new parameters: \n sequence number %d \n PRF %f\n near_range %lf\n", *n, 0.001 * prm->prf, prm->near_range); } return (EXIT_SUCCESS); } /***************************************************************************/ int fill_shift_data(int shift, int ishift, int data_length, int line_suffix_size, int record_length1, char *data, char *shift_data, FILE *outfile) { int k; /* NULL_DATA = 15; znew randonly is 0 or 1 */ if (shift > 0) { for (k = 0; k < ishift; k++) shift_data[k] = NULL_DATA; for (k = 0; k < data_length - ishift; k++) shift_data[k + ishift] = data[k]; } /* if data is shifted, fill in with data vlues of NULL_DATA at end */ if (shift < 0) { for (k = 0; k < data_length - ishift - line_suffix_size; k++) shift_data[k] = data[k + ishift]; for (k = data_length - ishift - line_suffix_size; k < record_length1; k++) shift_data[k] = NULL_DATA; } /* write the shifted data out */ fwrite((char *)shift_data, data_length, 1, outfile); return (EXIT_SUCCESS); } /***************************************************************************/ int handle_prf_change(struct PRM *prm, FILE *imagefile, long *byte_offset, int n) { prm->num_lines = n; /* skip back to beginning of the line */ fseek(imagefile, -1 * (sizeof(struct sardata_info) + prefix_off), SEEK_CUR); /* define byte_offset */ *byte_offset = ftell(imagefile); /* tell the world */ printf(" *** PRF changed from %lf to %lf at line %d (byte %ld)\n", (0.001 * prm->prf), (0.001 * sdr.PRF), n, *byte_offset); printf(" end: PRF changed from %lf to %lf at line %d \n", (0.001 * prm->prf), (0.001 * sdr.PRF), n); return (EXIT_SUCCESS); } /***************************************************************************/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/ALOS_pre_process_SLC.c000644 015705 000000 00000016110 13505462014 027354 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Program to prepare ALOS L1.1 data for InSAR processing. Read in data and * * leader file and write out prm and integer SLC file for siosar * ******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 4/23/07 added code to check endianess RJM * * 07/15/08 added a command-line option to force earth radius DTS * 10/10/10 * added command line options for SLC_factor and rbias * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "\n\nUsage: ALOS_pre_process_SLC imagefile LEDfile [-radius RE] [-swap] " "[-V] [-debug] [-quiet] \n" "\ncreates data.SLC and writes out parameters (PRM format) to stdout\n" "\nimagefile ALOS Level 1.1 complex file (CEOS format):\n" "LEDfile ALOS Level 1.1 LED file (CEOS leaderfile format):\n" "\n options: \n" "-near near_range specify the near_range (m) \n" "-radius RE specify the local earth radius (m) \n" "-SLC_factor fact scale factor to convert float to int SLC [1.0] \n" "-swap do byte-swap (should be automatic) \n" "-ALOS1 ALOS2 L1.1 data format \n" "-ALOS2 ALOS2 L1.1 data format (default)\n" "-LED write generic LED file\n" "-noLED oldstyle use ldr file for orbits directlyn" "-V verbose write information \n" "-debug write even more information \n" "-quiet don't write any information \n" "-tbias tbias correct the clock bias (positive value means " "plus)\n" "-rbias tbias correct the range bias (positive value means " "increase near range)\n" "Example:\n" "ALOS_pre_process_SLC IMG-HH-ALOS2011986990-140813-HBQR1.1__A " "LED-ALOS2011986990-140813-HBQR1.1__A -SLC_factor 1. -rbias -70.0000 " "-tbias 0.068759 \n"; long read_ALOS_data_SLC(FILE *, FILE *, struct PRM *, long *); void parse_ALOS_commands(int, char **, char *, struct PRM *); void set_ALOS_defaults(struct PRM *); void print_ALOS_defaults(struct PRM *); void swap_ALOS_data_info(struct sardata_info *); void get_files(struct PRM *, FILE **, FILE **, char *, char *, int); int ledflag; int main(int argc, char **argv) { FILE *imagefile, *ldrfile; FILE *rawfile[11], *prmfile[11]; char prmfilename[128]; int nPRF; long byte_offset; struct PRM prm; struct ALOS_ORB orb; /*char date[8];*/ if (argc < 3) die(USAGE, ""); /* set flags */ roi = debug = verbose = swap = quiet_flag = 0; slc_fact = 0.01; tbias = 0.0; rbias = 0.0; prefix_off = 132; /* default is to use the new LED orbit */ ledflag = 1; nPRF = 0; null_sio_struct(&prm); set_ALOS_defaults(&prm); /* read command line */ parse_ALOS_commands(argc, argv, USAGE, &prm); /* shift the start time if this is ALOS1 */ if (prefix_off == 0) tbias = tbias - 0.0020835; if (verbose) print_ALOS_defaults(&prm); if (is_big_endian_() == -1) { swap = 1; fprintf(stderr, ".... swapping bytes\n"); } else { swap = 0; } /* IMG and LED files should exist already */ if ((imagefile = fopen(argv[1], "r")) == NULL) die("couldn't open Level 1.1 IMG file \n", argv[1]); if ((ldrfile = fopen(argv[2], "r")) == NULL) die("couldn't open LED file \n", argv[2]); /* if it exists, copy to prm structure */ strcpy(prm.led_file, argv[2]); /* name and open output files and header files for raw data (but input for * later processing) */ get_files(&prm, &rawfile[nPRF], &prmfile[nPRF], prmfilename, argv[1], nPRF); /* read sarleader; put info into prm; write log file if specified */ read_ALOS_sarleader(ldrfile, &prm, &orb); // AUGUST 2016 /* write out orbit params in generic LED format */ if (ledflag) write_ALOS_LED(&orb, &prm, argv[1]); // AUGUST 2016 /* read Level 1.1 file; put info into prm; convert to *.SLC format */ /* if PRF changes halfway through, create new set of header and data files */ /* byte_offset is non-zero only if the prf changes */ /* byte_offset gets set to point in file at prf change */ byte_offset = -1; while (byte_offset != 0) { /* if prf changes, create new prm and data files */ if (nPRF > 0) { if (verbose) fprintf(stderr, "creating multiple files due to PRF change (*.%d) \n", nPRF + 1); get_files(&prm, &rawfile[nPRF], &prmfile[nPRF], prmfilename, argv[1], nPRF); } /* set the chirp extension to 500 if FBD fs = 16000000 */ if (prm.fs < 17000000.) { prm.chirp_ext = 500; //prm.chirp_slope = -5.18519e+11; prm.SLC_scale = I2SCALE; /* set dfact */ } else { //prm.chirp_slope = -1.03704e+12; prm.SLC_scale = I2SCALE * 2; } /* read_ALOS_data returns 0 if all data file is read; returns byte offset if the PRF changes */ /* calculate parameters from orbit */ byte_offset = read_ALOS_data_SLC(imagefile, rawfile[nPRF], &prm, &byte_offset); ALOS_ldr_orbit(&orb, &prm); /* force chirp slope if asked to */ if (force_slope == 1) prm.chirp_slope = forced_slope; /* set parameters for integer SLC */ /* write ascii output, SIO format */ prm.near_range = prm.near_range + rbias; /* if this is ALOS-2 data after 2014 set the Dopplers to zero */ if (prm.SC_clock_start / 1000. > 2014.) { prm.fd1 = 0.; prm.fdd1 = 0.; prm.fddd1 = 0.; } put_sio_struct(prm, prmfile[nPRF]); /* write roi_pac output if (roi) { // first part of rsc file write_roi(argv[1], ldrfile, prm, orb, date); // orbit file write_roi_orbit(orb, date); }*/ nPRF++; } return (EXIT_SUCCESS); } /*------------------------------------------------------*/ void get_files(struct PRM *prm, FILE **rawfile, FILE **prmfile, char *prmfilename, char *name, int n) { /* name and open output file for raw data (but input for later processing) */ /* if more than 1 set of output files, append an integer (beginning with 2) */ if (n == 0) { sprintf(prm->input_file, "%s.SLC", name); sprintf(prmfilename, "%s.PRM", name); } else { sprintf(prm->input_file, "%s.SLC.%d", name, n + 1); sprintf(prmfilename, "%s.PRM.%d", name, n + 1); } sprintf(prm->SLC_file, "%s.SLC", name); strcpy(prm->dtype, "a"); /* now open the files */ if ((*rawfile = fopen(prm->input_file, "w")) == NULL) die("can't open ", prm->input_file); if ((*prmfile = fopen(prmfilename, "w")) == NULL) die("couldn't open output PRM file \n", prmfilename); } /*------------------------------------------------------*/ GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/parse_ALOS_commands.c000644 015705 000000 00000004552 13505462014 027331 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" int ledflag; /* reads options */ /* start with third arguement */ void parse_ALOS_commands(int na, char **a, char *USAGE, struct PRM *prm) { int n; for (n = 3; n < na; n++) { if (!strcmp(a[n], "-near")) { n++; if (n == na) die(" no option after -near!\n", ""); prm->near_range = atof(a[n]); fprintf(stderr, " setting near_range to %9.2lf \n", prm->near_range); } else if (!strcmp(a[n], "-radius")) { n++; if (n == na) die(" no option after -radius!\n", ""); prm->RE = atof(a[n]); fprintf(stderr, " setting radius to %f \n", prm->RE); } else if (!strcmp(a[n], "-nrows")) { n++; if (n == na) die(" no option after -nrows!\n", ""); prm->nrows = atoi(a[n]); fprintf(stderr, " setting nrows to %d \n", prm->nrows); } else if (!strcmp(a[n], "-tbias")) { n++; if (n == na) die(" no option after -tbias!\n", ""); tbias = atof(a[n]); fprintf(stderr, " setting tbias to %f \n", tbias); } else if (!strcmp(a[n], "-rbias")) { n++; if (n == na) die(" no option after -rbias!\n", ""); rbias = atof(a[n]); fprintf(stderr, " setting rbias to %f \n", rbias); } else if (!strcmp(a[n], "-SLC_factor")) { n++; if (n == na) die(" no option after -SLC_factor!\n", ""); slc_fact = atof(a[n]); fprintf(stderr, " setting SLC_factor to %f \n", slc_fact); } else if (!strcmp(a[n], "-ALOS1")) { prefix_off = 0; fprintf(stderr, " processing ALOS1 L1.1 \n"); } else if (!strcmp(a[n], "-ALOS2")) { prefix_off = 132; fprintf(stderr, " processing ALOS2 L1.1 \n"); } else if (!strcmp(a[n], "-roi")) { roi = 1; fprintf(stderr, " writing roi_pac rsc files \n"); } else if (!strcmp(a[n], "-LED")) { ledflag = 1; fprintf(stderr, " creating *.LED file \n"); } else if (!strcmp(a[n], "-noLED")) { ledflag = 0; fprintf(stderr, " no *.LED file written (default) \n"); } else if (!strncmp(a[n], "-debug", 2)) { verbose = debug = 1; fprintf(stderr, " debug and verbose output \n"); } else if (!strncmp(a[n], "-V", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else if (!strncmp(a[n], "-v", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_mosaic_ss/ALOS_mosaic_ss.c000644 015705 000000 00000063377 13505462014 025263 0ustar00sandwellwheel000000 000000 /**************************************************************************/ /* */ /* Mosaic 5 subswaths of ALOS ScanSAR in radar coordinates */ /* */ /* This program is written for better unwrapping because */ /* there will be phase difference for each subswath if unwrapping */ /* individually and the phase difference might not be a constant. */ /* */ /* This program will read the clock_start and near_range info from */ /* 5 PRM files of each subswath and read the pixel values from each */ /* GMT grids, calculate the coordinates of each subswath in meters, */ /* put each subswath in the corresponding coordinates. The boundary in */ /* range direction of each subswath is chosen to be at the middle of */ /* the overlapping region. */ /* */ /* After this step, should be phase unwrapping. */ /* */ /* May 18 2018 */ /* */ /* Xiaopeng Tong */ /* */ /* Update history: */ /* */ /* May 30 2018: divide mosaic into 5 subswath */ /* */ /**************************************************************************/ char *USAGE = " ALOS_mosaic_ss prmfile1 grd1 prmfile2 grd2 prmfile3 grd3 prmfile4 grd4 " "prmfile5 grd5 mosaic dec dir \n\n" " USAGE: \n" " mosaic 5 subswath of ALOS ScanSAR in radar coordinates\n\n" " prmfile[1-5] the PRM files \n" " grd[1-5] the GMT grid files (corr, phase, phasefilt) \n" " dec decimation factor in radar coordinates (100) \n" " dir dir is 1 means mosaic 5 subswaths \n" " dir is 0 means divide the mosaic into 5 subswaths \n"; #include "gmt.h" #include "gmtsar.h" void set_ALOS_defaults(struct PRM *); void get_sio_struct(FILE *, struct PRM *); int main(int argc, char **argv) { /* define variables */ FILE *prmfile; struct PRM prm; void *API = NULL; /* GMT control structure */ struct GMT_GRID *grid1 = NULL, *grid2 = NULL, *grid3 = NULL, *grid4 = NULL, *grid5 = NULL, *grid6 = NULL; double inc[2], wesn[4]; double clock_start[5], clock_start_rel[5], near_range[5], near_range_rel[5]; double prf[5], rng_samp_rate[5], vel[5]; int num_rng[5], num_azi[5]; double clock_start_min; int ra[5][4]; int range_ub, azimuth_ub; double sol = 3.0e8; double rsr, dr; double dec; int row, col; int i; int range, azimuth; int range_boundary1, range_boundary2, range_boundary3, range_boundary4, range_boundary5; int node1, node2, node3, node4, node5, node6; int dir; double num_x, num_y; /* parse arguments */ if (argc != 14) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 2, 0, NULL)) == NULL) return EXIT_FAILURE; /* read in dec */ dec = atof(argv[12]); /* read in dir */ dir = atoi(argv[13]); num_x = 1000; num_y = 5000; /* open and read PRM files */ /* subswath 1 */ if ((prmfile = fopen(argv[1], "r")) == NULL) { die("\n can't open PRM file:\n", argv[1]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[0] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[0] = prm.near_range; rng_samp_rate[0] = prm.fs; num_rng[0] = prm.num_rng_bins; num_azi[0] = prm.num_patches * prm.num_valid_az; prf[0] = prm.prf; vel[0] = prm.vel; fclose(prmfile); /* subswath 2 */ if ((prmfile = fopen(argv[3], "r")) == NULL) { die("\n can't open PRM file:\n", argv[3]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[1] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[1] = prm.near_range; rng_samp_rate[1] = prm.fs; num_rng[1] = prm.num_rng_bins; num_azi[1] = prm.num_patches * prm.num_valid_az; prf[1] = prm.prf; vel[1] = prm.vel; fclose(prmfile); /* subswath 3 */ if ((prmfile = fopen(argv[5], "r")) == NULL) { die("\n can't open PRM file:\n", argv[5]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[2] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[2] = prm.near_range; rng_samp_rate[2] = prm.fs; num_rng[2] = prm.num_rng_bins; num_azi[2] = prm.num_patches * prm.num_valid_az; prf[2] = prm.prf; vel[2] = prm.vel; fclose(prmfile); /* subswath 4 */ if ((prmfile = fopen(argv[7], "r")) == NULL) { die("\n can't open PRM file:\n", argv[7]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[3] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[3] = prm.near_range; rng_samp_rate[3] = prm.fs; num_rng[3] = prm.num_rng_bins; num_azi[3] = prm.num_patches * prm.num_valid_az; prf[3] = prm.prf; vel[3] = prm.vel; fclose(prmfile); /* subswath 5 */ if ((prmfile = fopen(argv[9], "r")) == NULL) { die("\n can't open PRM file:\n", argv[9]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[4] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[4] = prm.near_range; rng_samp_rate[4] = prm.fs; num_rng[4] = prm.num_rng_bins; num_azi[4] = prm.num_patches * prm.num_valid_az; prf[4] = prm.prf; vel[4] = prm.vel; fclose(prmfile); /* open and read GMT grids */ if (dir == 1) { /* subswath 1 */ if ((grid1 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 1: num_rng=%d, num_azi=%d\n", num_rng[0], num_azi[0]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid1->header->nx, grid1->header->inc[GMT_X], grid1->header->ny, grid1->header->inc[GMT_Y]); if ((num_rng[0] != round(grid1->header->nx * grid1->header->inc[GMT_X])) || (num_azi[0] != round(grid1->header->ny * grid1->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[2]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[2], grid1) == NULL) return EXIT_FAILURE; /* subswath 2 */ if ((grid2 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[4], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 2: num_rng=%d, num_azi=%d\n", num_rng[1], num_azi[1]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid2->header->nx, grid2->header->inc[GMT_X], grid2->header->ny, grid2->header->inc[GMT_Y]); if ((num_rng[1] != round(grid2->header->nx * grid2->header->inc[GMT_X])) || (num_azi[1] != round(grid2->header->ny * grid2->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[4]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[4], grid2) == NULL) return EXIT_FAILURE; /* subswath 3 */ if ((grid3 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[6], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 3: num_rng=%d, num_azi=%d\n", num_rng[2], num_azi[2]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid3->header->nx, grid3->header->inc[GMT_X], grid3->header->ny, grid3->header->inc[GMT_Y]); if ((num_rng[2] != round(grid3->header->nx * grid3->header->inc[GMT_X])) || (num_azi[2] != round(grid3->header->ny * grid3->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[6]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[6], grid3) == NULL) return EXIT_FAILURE; /* subswath 4 */ if ((grid4 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[8], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 4: num_rng=%d, num_azi=%d\n", num_rng[3], num_azi[3]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid4->header->nx, grid4->header->inc[GMT_X], grid4->header->ny, grid4->header->inc[GMT_Y]); if ((num_rng[3] != round(grid4->header->nx * grid4->header->inc[GMT_X])) || (num_azi[3] != round(grid4->header->ny * grid4->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[8]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[8], grid4) == NULL) return EXIT_FAILURE; /* subswath 5 */ if ((grid5 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[10], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 5: num_rng=%d, num_azi=%d\n", num_rng[4], num_azi[4]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid5->header->nx, grid5->header->inc[GMT_X], grid5->header->ny, grid5->header->inc[GMT_Y]); if ((num_rng[4] != round(grid5->header->nx * grid5->header->inc[GMT_X])) || (num_azi[4] != round(grid5->header->ny * grid5->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[10]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[10], grid5) == NULL) return EXIT_FAILURE; } else if (dir == 0) { /* subswath 1 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[0]; wesn[GMT_YHI] = num_azi[0]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid1 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "subswath 1", grid1)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node1 = 0; node1 < grid1->header->size; node1++) grid1->data[node1] = NAN; /* subswath 2 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[1]; wesn[GMT_YHI] = num_azi[1]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid2 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "subswath 2", grid2)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node2 = 0; node2 < grid2->header->size; node2++) grid2->data[node2] = NAN; /* subswath 3 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[2]; wesn[GMT_YHI] = num_azi[2]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid3 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "subswath 3", grid3)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node3 = 0; node3 < grid3->header->size; node3++) grid3->data[node3] = NAN; /* subswath 4 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[3]; wesn[GMT_YHI] = num_azi[3]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid4 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "subswath 4", grid4)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node4 = 0; node4 < grid4->header->size; node4++) grid4->data[node4] = NAN; /* subswath 5 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[4]; wesn[GMT_YHI] = num_azi[4]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid5 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "subswath 5", grid5)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node5 = 0; node5 < grid5->header->size; node5++) grid5->data[node5] = NAN; } else { die("dir must be either 1 or 0", ""); } /* find the maximum of the clock start */ clock_start_min = 1e10; for (i = 0; i < 5; i++) { if (clock_start[i] < clock_start_min) { clock_start_min = clock_start[i]; } } /* check the range sampling rate should be the same */ rsr = rng_samp_rate[0]; for (i = 1; i < 5; i++) { if (rsr != rng_samp_rate[i]) { die("\nrange sampling rate from PRM files are not the same.\n", " "); } } dr = sol / rsr / 2.0; fprintf(stderr, "dr = %f\n", dr); for (i = 0; i < 5; i++) { fprintf(stderr, "subswath %d, da = %f\n", i + 1, vel[i] / prf[i]); } /* calculate the relative clock in seconds */ for (i = 0; i < 5; i++) { clock_start_rel[i] = clock_start[i] - clock_start_min; near_range_rel[i] = near_range[i] - near_range[0]; fprintf(stderr, "subswath = %d, clock_start_rel = %f\n", i + 1, clock_start_rel[i]); fprintf(stderr, "subswath = %d, near_range_rel = %f\n", i + 1, near_range_rel[i]); } /* calculate the positions of the grids in dec meters */ ra[0][0] = round(near_range_rel[0] / dec); ra[0][1] = ra[0][0] + round(grid1->header->nx * grid1->header->inc[GMT_X] * dr / dec); ra[0][2] = round(clock_start_rel[0] * vel[0] / dec); ra[0][3] = ra[0][2] + round(grid1->header->ny * grid1->header->inc[GMT_Y] * vel[0] / prf[0] / dec); ra[1][0] = round(near_range_rel[1] / dec); ra[1][1] = ra[1][0] + round(grid2->header->nx * grid2->header->inc[GMT_X] * dr / dec); ra[1][2] = round(clock_start_rel[1] * vel[1] / dec); ra[1][3] = ra[1][2] + round(grid2->header->ny * grid2->header->inc[GMT_Y] * vel[1] / prf[1] / dec); ra[2][0] = round(near_range_rel[2] / dec); ra[2][1] = ra[2][0] + round(grid3->header->nx * grid3->header->inc[GMT_X] * dr / dec); ra[2][2] = round(clock_start_rel[2] * vel[2] / dec); ra[2][3] = ra[2][2] + round(grid3->header->ny * grid3->header->inc[GMT_Y] * vel[2] / prf[2] / dec); ra[3][0] = round(near_range_rel[3] / dec); ra[3][1] = ra[3][0] + round(grid4->header->nx * grid4->header->inc[GMT_X] * dr / dec); ra[3][2] = round(clock_start_rel[3] * vel[3] / dec); ra[3][3] = ra[3][2] + round(grid4->header->ny * grid4->header->inc[GMT_Y] * vel[3] / prf[3] / dec); ra[4][0] = round(near_range_rel[4] / dec); ra[4][1] = ra[4][0] + round(grid5->header->nx * grid5->header->inc[GMT_X] * dr / dec); ra[4][2] = round(clock_start_rel[4] * vel[4] / dec); ra[4][3] = ra[4][2] + round(grid5->header->ny * grid5->header->inc[GMT_Y] * vel[4] / prf[4] / dec); /* debug */ /*for (i=0;i<5;i++) { for (j=0;j<4;j++) { fprintf(stderr, "i=%d j=%d ra=%d\n", i,j,ra[i][j]); } }*/ range_boundary1 = round((ra[0][1] + ra[1][0]) / 2); range_boundary2 = round((ra[1][1] + ra[2][0]) / 2); range_boundary3 = round((ra[2][1] + ra[3][0]) / 2); range_boundary4 = round((ra[3][1] + ra[4][0]) / 2); range_boundary5 = ra[4][1]; if (dir == 1) { fprintf(stderr, "mosaic the 5 subswath...\n"); /* the lower boundary in the azimuth and range direction is 0 */ /* find the upper boundary in the azimuth and range direction */ azimuth_ub = -999999; for (i = 0; i < 5; i++) { if (ra[i][3] > azimuth_ub) { azimuth_ub = ra[i][3]; } } range_ub = ra[4][1]; /* make an output grid */ inc[GMT_X] = inc[GMT_Y] = dec; /* in meters */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = range_ub * inc[GMT_X]; wesn[GMT_YHI] = azimuth_ub * inc[GMT_Y]; /* debug */ /* fprintf(stderr, "inc[GMT_X] = %f , inc[GMT_Y] = %f\n", inc[GMT_X], inc[GMT_Y]); fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); */ if ((grid6 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "mosaic", grid6)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node6 = 0; node6 < grid6->header->size; node6++) grid6->data[node6] = NAN; /* put in the subswath grids */ /* debug */ // fprintf(stderr,"range_boundary1=%d\n",range_boundary1); /* put in subswath 1 */ for (range = ra[0][0]; range < range_boundary1; range++) { for (azimuth = ra[0][2]; azimuth < ra[0][3]; azimuth++) { node6 = GMT_Get_Index(API, grid6->header, azimuth, range); col = round((range * dec - near_range_rel[0]) / dr / grid1->header->inc[GMT_X]); row = grid1->header->ny - round((azimuth * dec - clock_start_rel[0] * vel[0]) / (vel[0] / prf[0]) / grid1->header->inc[GMT_Y]); if (col >= 0 && col <= grid1->header->nx && row >= 0 && row <= grid1->header->ny) { node1 = GMT_Get_Index(API, grid1->header, row, col); grid6->data[node6] = grid1->data[node1]; } } } /* put in subswath 2 */ /* debug */ // fprintf(stderr,"range_boundary2=%d\n",range_boundary2); for (range = range_boundary1; range < range_boundary2; range++) { for (azimuth = ra[1][2]; azimuth < ra[1][3]; azimuth++) { node6 = GMT_Get_Index(API, grid6->header, azimuth, range); col = round((range * dec - near_range_rel[1]) / dr / grid2->header->inc[GMT_X]); row = grid2->header->ny - round((azimuth * dec - clock_start_rel[1] * vel[1]) / (vel[1] / prf[1]) / grid2->header->inc[GMT_Y]); if (col >= 0 && col <= grid2->header->nx && row >= 0 && row <= grid2->header->ny) { node2 = GMT_Get_Index(API, grid2->header, row, col); grid6->data[node6] = grid2->data[node2]; } } } /* put in subswath 3 */ /* debug */ // fprintf(stderr,"range_boundary3=%d\n",range_boundary3); for (range = range_boundary2; range < range_boundary3; range++) { for (azimuth = ra[2][2]; azimuth < ra[2][3]; azimuth++) { node6 = GMT_Get_Index(API, grid6->header, azimuth, range); col = round((range * dec - near_range_rel[2]) / dr / grid3->header->inc[GMT_X]); row = grid3->header->ny - round((azimuth * dec - clock_start_rel[2] * vel[2]) / (vel[2] / prf[2]) / grid3->header->inc[GMT_Y]); if (col >= 0 && col <= grid3->header->nx && row >= 0 && row <= grid3->header->ny) { node3 = GMT_Get_Index(API, grid3->header, row, col); grid6->data[node6] = grid3->data[node3]; } } } /* put in subswath 4 */ /* debug */ // fprintf(stderr,"range_boundary4=%d\n",range_boundary4); for (range = range_boundary3; range < range_boundary4; range++) { for (azimuth = ra[3][2]; azimuth < ra[3][3]; azimuth++) { node6 = GMT_Get_Index(API, grid6->header, azimuth, range); col = round((range * dec - near_range_rel[3]) / dr / grid4->header->inc[GMT_X]); row = grid4->header->ny - round((azimuth * dec - clock_start_rel[3] * vel[3]) / (vel[3] / prf[3]) / grid4->header->inc[GMT_Y]); if (col >= 0 && col <= grid4->header->nx && row >= 0 && row <= grid4->header->ny) { node4 = GMT_Get_Index(API, grid4->header, row, col); grid6->data[node6] = grid4->data[node4]; } } } /* put in subswath 5 */ /* debug */ // fprintf(stderr,"range_boundary5=%d\n",range_boundary5); for (range = range_boundary4; range < range_boundary5; range++) { for (azimuth = ra[4][2]; azimuth < ra[4][3]; azimuth++) { node6 = GMT_Get_Index(API, grid6->header, azimuth, range); col = round((range * dec - near_range_rel[4]) / dr / grid5->header->inc[GMT_X]); row = grid5->header->ny - round((azimuth * dec - clock_start_rel[4] * vel[4]) / (vel[4] / prf[4]) / grid5->header->inc[GMT_Y]); if (col >= 0 && col <= grid5->header->nx && row >= 0 && row <= grid5->header->ny) { node5 = GMT_Get_Index(API, grid5->header, row, col); grid6->data[node6] = grid5->data[node5]; } } } /* output and clean up */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[11], grid6)) return EXIT_FAILURE; } else if (dir == 0) { fprintf(stderr, "divide the mosaic into 5 subswath...\n"); /* open the mosaic grid */ if ((grid6 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[11], NULL)) == NULL) return EXIT_FAILURE; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[11], grid6) == NULL) return EXIT_FAILURE; /* subswath 1 */ for (col = 0; col < grid1->header->nx; col++) { for (row = 0; row < grid1->header->ny; row++) { node1 = GMT_Get_Index(API, grid1->header, row, col); range = round((near_range_rel[0] + col * grid1->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[0] * vel[0] + (grid1->header->ny - row) * grid1->header->inc[GMT_Y] * vel[0] / prf[0]) / dec); node6 = GMT_Get_Index(API, grid6->header, azimuth, range); grid1->data[node1] = grid6->data[node6]; } } /* subswath 2 */ for (col = 0; col < grid2->header->nx; col++) { for (row = 0; row < grid2->header->ny; row++) { node2 = GMT_Get_Index(API, grid2->header, row, col); range = round((near_range_rel[1] + col * grid2->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[1] * vel[1] + (grid2->header->ny - row) * grid2->header->inc[GMT_Y] * vel[1] / prf[1]) / dec); node6 = GMT_Get_Index(API, grid6->header, azimuth, range); grid2->data[node2] = grid6->data[node6]; } } /* subswath 3 */ for (col = 0; col < grid3->header->nx; col++) { for (row = 0; row < grid3->header->ny; row++) { node3 = GMT_Get_Index(API, grid3->header, row, col); range = round((near_range_rel[2] + col * grid3->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[2] * vel[2] + (grid3->header->ny - row) * grid3->header->inc[GMT_Y] * vel[2] / prf[2]) / dec); node6 = GMT_Get_Index(API, grid6->header, azimuth, range); grid3->data[node3] = grid6->data[node6]; } } /* subswath 4 */ for (col = 0; col < grid4->header->nx; col++) { for (row = 0; row < grid4->header->ny; row++) { node4 = GMT_Get_Index(API, grid4->header, row, col); range = round((near_range_rel[3] + col * grid4->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[3] * vel[3] + (grid4->header->ny - row) * grid4->header->inc[GMT_Y] * vel[3] / prf[3]) / dec); node6 = GMT_Get_Index(API, grid6->header, azimuth, range); grid4->data[node4] = grid6->data[node6]; } } /* subswath 5 */ for (col = 0; col < grid5->header->nx; col++) { for (row = 0; row < grid5->header->ny; row++) { node5 = GMT_Get_Index(API, grid5->header, row, col); range = round((near_range_rel[4] + col * grid5->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[4] * vel[4] + (grid5->header->ny - row) * grid5->header->inc[GMT_Y] * vel[4] / prf[4]) / dec); node6 = GMT_Get_Index(API, grid6->header, azimuth, range); grid5->data[node5] = grid6->data[node6]; } } if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[2], grid1)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[4], grid2)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[6], grid3)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[8], grid4)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[10], grid5)) return EXIT_FAILURE; } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_mosaic_ss/Makefile000644 015705 000000 00000000617 13505462014 023745 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_mosaic_ss CSRCS = ALOS_mosaic_ss.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar $(GMT_INC) CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) $(GMTSAR) $(GMT_LIB) $(INCLUDES) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(PROG) $(OBJS) tags core GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_mosaic_ss/ALOS_mosaic_ss_2frames.c000644 015705 000000 00000073102 13505462014 026665 0ustar00sandwellwheel000000 000000 /**************************************************************************/ /* */ /* Mosaic 5 subswaths of 2 frames of ALOS ScanSAR in radar coordinates */ /* */ /* This program is written for better unwrapping because */ /* there will be phase difference for each subswath if unwrapping */ /* individually and the phase difference might not be a constant. */ /* */ /* This program will read the clock_start and near_range info from */ /* 5 PRM files of each subswath and read the pixel values from each */ /* GMT grids, calculate the coordinates of each subswath in meters, */ /* put each subswath in the corresponding coordinates. The boundary in */ /* range direction of each subswath is chosen to be at the middle of */ /* the overlapping region. */ /* */ /* After this step, should be phase unwrapping. */ /* */ /* May 18 2018 */ /* */ /* Xiaopeng Tong */ /* */ /* Update history: */ /* */ /* May 25 2018 modified to mosaic 2 frames */ /* */ /**************************************************************************/ char *USAGE = " ALOS_mosaic_ss_2frames prmfile1 grd1 prmfile2 grd2 prmfile3 grd3 " "prmfile4 grd4 prmfile5 grd5 prmfile6 grd6 prmfile7 grd7 prmfile8 grd8 " "prmfile9 grd9 prmfile10 grd10 mosaic dec \n\n" " USAGE: \n" " mosaic 5 subswath of 2 frames of ALOS ScanSAR in radar coordinates\n\n" " prmfile[1-10] the PRM files \n" " grd[1-10] the GMT grid files (corr, phase, phasefilt) \n" " dec decimation factor in radar coordinates (100) \n" " the first frame is 1-5 and the second frame is 6-10 \n"; #include "gmt.h" #include "gmtsar.h" void set_ALOS_defaults(struct PRM *); void get_sio_struct(FILE *, struct PRM *); int main(int argc, char **argv) { /* define variables */ FILE *prmfile; struct PRM prm; void *API = NULL; /* GMT control structure */ struct GMT_GRID *grid1 = NULL, *grid2 = NULL, *grid3 = NULL, *grid4 = NULL, *grid5 = NULL, *grid6 = NULL, *grid7 = NULL, *grid8 = NULL, *grid9 = NULL, *grid10 = NULL, *grid11 = NULL; double inc[2], wesn[4]; double clock_start[10], clock_start_rel[10], near_range[10], near_range_rel[10]; double prf[10], rng_samp_rate[10], vel[10]; int num_rng[10], num_azi[10]; double clock_start_min; int ra[10][4]; int range_ub, azimuth_ub; double sol = 3.0e8; double rsr, dr; double dec; int row, col; int i; int range, azimuth; int range_boundary1, range_boundary2, range_boundary3, range_boundary4, range_boundary5; int azimuth_boundary1, azimuth_boundary2, azimuth_boundary3, azimuth_boundary4, azimuth_boundary5; int node1, node2, node3, node4, node5, node6, node7, node8, node9, node10, node11; /* parse arguments */ if (argc != 23) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 2, 0, NULL)) == NULL) return EXIT_FAILURE; /* read in dec */ dec = atof(argv[22]); /* open and read PRM files */ /* open and read GMT grids */ fprintf(stderr, "input:\n"); /* subswath 1 */ if ((prmfile = fopen(argv[1], "r")) == NULL) { die("\n can't open PRM file:\n", argv[1]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[0] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[0] = prm.near_range; rng_samp_rate[0] = prm.fs; num_rng[0] = prm.num_rng_bins; num_azi[0] = prm.num_patches * prm.num_valid_az; prf[0] = prm.prf; vel[0] = prm.vel; fclose(prmfile); if ((grid1 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 1: num_rng=%d, num_azi=%d\n", num_rng[0], num_azi[0]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid1->header->nx, grid1->header->inc[GMT_X], grid1->header->ny, grid1->header->inc[GMT_Y]); if ((num_rng[0] != round(grid1->header->nx * grid1->header->inc[GMT_X])) || (num_azi[0] != round(grid1->header->ny * grid1->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[2]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[2], grid1) == NULL) return EXIT_FAILURE; /* subswath 2 */ if ((prmfile = fopen(argv[3], "r")) == NULL) { die("\n can't open PRM file:\n", argv[3]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[1] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[1] = prm.near_range; rng_samp_rate[1] = prm.fs; num_rng[1] = prm.num_rng_bins; num_azi[1] = prm.num_patches * prm.num_valid_az; prf[1] = prm.prf; vel[1] = prm.vel; fclose(prmfile); if ((grid2 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[4], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 2: num_rng=%d, num_azi=%d\n", num_rng[1], num_azi[1]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid2->header->nx, grid2->header->inc[GMT_X], grid2->header->ny, grid2->header->inc[GMT_Y]); if ((num_rng[1] != round(grid2->header->nx * grid2->header->inc[GMT_X])) || (num_azi[1] != round(grid2->header->ny * grid2->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[4]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[4], grid2) == NULL) return EXIT_FAILURE; /* subswath 3 */ if ((prmfile = fopen(argv[5], "r")) == NULL) { die("\n can't open PRM file:\n", argv[5]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[2] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[2] = prm.near_range; rng_samp_rate[2] = prm.fs; num_rng[2] = prm.num_rng_bins; num_azi[2] = prm.num_patches * prm.num_valid_az; prf[2] = prm.prf; vel[2] = prm.vel; fclose(prmfile); if ((grid3 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[6], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 3: num_rng=%d, num_azi=%d\n", num_rng[2], num_azi[2]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid3->header->nx, grid3->header->inc[GMT_X], grid3->header->ny, grid3->header->inc[GMT_Y]); if ((num_rng[2] != round(grid3->header->nx * grid3->header->inc[GMT_X])) || (num_azi[2] != round(grid3->header->ny * grid3->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[6]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[6], grid3) == NULL) return EXIT_FAILURE; /* subswath 4 */ if ((prmfile = fopen(argv[7], "r")) == NULL) { die("\n can't open PRM file:\n", argv[7]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[3] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[3] = prm.near_range; rng_samp_rate[3] = prm.fs; num_rng[3] = prm.num_rng_bins; num_azi[3] = prm.num_patches * prm.num_valid_az; prf[3] = prm.prf; vel[3] = prm.vel; fclose(prmfile); if ((grid4 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[8], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 4: num_rng=%d, num_azi=%d\n", num_rng[3], num_azi[3]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid4->header->nx, grid4->header->inc[GMT_X], grid4->header->ny, grid4->header->inc[GMT_Y]); if ((num_rng[3] != round(grid4->header->nx * grid4->header->inc[GMT_X])) || (num_azi[3] != round(grid4->header->ny * grid4->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[8]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[8], grid4) == NULL) return EXIT_FAILURE; /* subswath 5 */ if ((prmfile = fopen(argv[9], "r")) == NULL) { die("\n can't open PRM file:\n", argv[9]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[4] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[4] = prm.near_range; rng_samp_rate[4] = prm.fs; num_rng[4] = prm.num_rng_bins; num_azi[4] = prm.num_patches * prm.num_valid_az; prf[4] = prm.prf; vel[4] = prm.vel; fclose(prmfile); if ((grid5 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[10], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 5: num_rng=%d, num_azi=%d\n", num_rng[4], num_azi[4]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid5->header->nx, grid5->header->inc[GMT_X], grid5->header->ny, grid5->header->inc[GMT_Y]); if ((num_rng[4] != round(grid5->header->nx * grid5->header->inc[GMT_X])) || (num_azi[4] != round(grid5->header->ny * grid5->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[10]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[10], grid5) == NULL) return EXIT_FAILURE; /* subswath 6 */ if ((prmfile = fopen(argv[11], "r")) == NULL) { die("\n can't open PRM file:\n", argv[11]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[5] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[5] = prm.near_range; rng_samp_rate[5] = prm.fs; num_rng[5] = prm.num_rng_bins; num_azi[5] = prm.num_patches * prm.num_valid_az; prf[5] = prm.prf; vel[5] = prm.vel; fclose(prmfile); if ((grid6 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[12], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 6: num_rng=%d, num_azi=%d\n", num_rng[5], num_azi[5]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid6->header->nx, grid6->header->inc[GMT_X], grid6->header->ny, grid6->header->inc[GMT_Y]); if ((num_rng[5] != round(grid6->header->nx * grid6->header->inc[GMT_X])) || (num_azi[5] != round(grid6->header->ny * grid6->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[12]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[12], grid6) == NULL) return EXIT_FAILURE; /* subswath 7 */ if ((prmfile = fopen(argv[13], "r")) == NULL) { die("\n can't open PRM file:\n", argv[13]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[6] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[6] = prm.near_range; rng_samp_rate[6] = prm.fs; num_rng[6] = prm.num_rng_bins; num_azi[6] = prm.num_patches * prm.num_valid_az; prf[6] = prm.prf; vel[6] = prm.vel; fclose(prmfile); if ((grid7 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[14], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 7: num_rng=%d, num_azi=%d\n", num_rng[6], num_azi[6]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid7->header->nx, grid7->header->inc[GMT_X], grid7->header->ny, grid7->header->inc[GMT_Y]); if ((num_rng[6] != round(grid7->header->nx * grid7->header->inc[GMT_X])) || (num_azi[6] != round(grid7->header->ny * grid7->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[14]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[14], grid7) == NULL) return EXIT_FAILURE; /* subswath 8 */ if ((prmfile = fopen(argv[15], "r")) == NULL) { die("\n can't open PRM file:\n", argv[15]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[7] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[7] = prm.near_range; rng_samp_rate[7] = prm.fs; num_rng[7] = prm.num_rng_bins; num_azi[7] = prm.num_patches * prm.num_valid_az; prf[7] = prm.prf; vel[7] = prm.vel; fclose(prmfile); if ((grid8 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[16], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 8: num_rng=%d, num_azi=%d\n", num_rng[7], num_azi[7]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid8->header->nx, grid8->header->inc[GMT_X], grid8->header->ny, grid8->header->inc[GMT_Y]); if ((num_rng[7] != round(grid8->header->nx * grid8->header->inc[GMT_X])) || (num_azi[7] != round(grid8->header->ny * grid8->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[16]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[16], grid8) == NULL) return EXIT_FAILURE; /* subswath 9 */ if ((prmfile = fopen(argv[17], "r")) == NULL) { die("\n can't open PRM file:\n", argv[17]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[8] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[8] = prm.near_range; rng_samp_rate[8] = prm.fs; num_rng[8] = prm.num_rng_bins; num_azi[8] = prm.num_patches * prm.num_valid_az; prf[8] = prm.prf; vel[8] = prm.vel; fclose(prmfile); if ((grid9 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[18], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 9: num_rng=%d, num_azi=%d\n", num_rng[8], num_azi[8]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid9->header->nx, grid9->header->inc[GMT_X], grid9->header->ny, grid9->header->inc[GMT_Y]); if ((num_rng[8] != round(grid9->header->nx * grid9->header->inc[GMT_X])) || (num_azi[8] != round(grid9->header->ny * grid9->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[18]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[18], grid9) == NULL) return EXIT_FAILURE; /* subswath 10 */ if ((prmfile = fopen(argv[19], "r")) == NULL) { die("\n can't open PRM file:\n", argv[19]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[9] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[9] = prm.near_range; rng_samp_rate[9] = prm.fs; num_rng[9] = prm.num_rng_bins; num_azi[9] = prm.num_patches * prm.num_valid_az; prf[9] = prm.prf; vel[9] = prm.vel; fclose(prmfile); if ((grid10 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[20], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 10: num_rng=%d, num_azi=%d\n", num_rng[9], num_azi[9]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid10->header->nx, grid10->header->inc[GMT_X], grid10->header->ny, grid10->header->inc[GMT_Y]); if ((num_rng[9] != round(grid10->header->nx * grid10->header->inc[GMT_X])) || (num_azi[9] != round(grid10->header->ny * grid10->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[20]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[20], grid10) == NULL) return EXIT_FAILURE; /* find the minimum of the clock start */ clock_start_min = 1e10; for (i = 0; i < 5; i++) { if (clock_start[i] < clock_start_min) { clock_start_min = clock_start[i]; } } /* check the range sampling rate should be the same */ rsr = rng_samp_rate[0]; for (i = 1; i < 10; i++) { if (rsr != rng_samp_rate[i]) { die("\nrange sampling rate from PRM files are not the same.\n", " "); } } dr = sol / rsr / 2.0; fprintf(stderr, "dr = %f\n", dr); for (i = 0; i < 10; i++) { fprintf(stderr, "subswath %d, da = %f\n", i + 1, vel[i] / prf[i]); } /* calculate the relative clock in seconds */ for (i = 0; i < 10; i++) { clock_start_rel[i] = clock_start[i] - clock_start_min; near_range_rel[i] = near_range[i] - near_range[0]; fprintf(stderr, "subswath = %d, clock_start_rel = %f\n", i + 1, clock_start_rel[i]); fprintf(stderr, "subswath = %d, near_range_rel = %f\n", i + 1, near_range_rel[i]); } /* calculate the positions of the grids in dec meters */ ra[0][0] = round(near_range_rel[0] / dec); ra[0][1] = ra[0][0] + round(grid1->header->nx * grid1->header->inc[GMT_X] * dr / dec); ra[0][2] = round(clock_start_rel[0] * vel[0] / dec); ra[0][3] = ra[0][2] + round(grid1->header->ny * grid1->header->inc[GMT_Y] * vel[0] / prf[0] / dec); ra[1][0] = round(near_range_rel[1] / dec); ra[1][1] = ra[1][0] + round(grid2->header->nx * grid2->header->inc[GMT_X] * dr / dec); ra[1][2] = round(clock_start_rel[1] * vel[1] / dec); ra[1][3] = ra[1][2] + round(grid2->header->ny * grid2->header->inc[GMT_Y] * vel[1] / prf[1] / dec); ra[2][0] = round(near_range_rel[2] / dec); ra[2][1] = ra[2][0] + round(grid3->header->nx * grid3->header->inc[GMT_X] * dr / dec); ra[2][2] = round(clock_start_rel[2] * vel[2] / dec); ra[2][3] = ra[2][2] + round(grid3->header->ny * grid3->header->inc[GMT_Y] * vel[2] / prf[2] / dec); ra[3][0] = round(near_range_rel[3] / dec); ra[3][1] = ra[3][0] + round(grid4->header->nx * grid4->header->inc[GMT_X] * dr / dec); ra[3][2] = round(clock_start_rel[3] * vel[3] / dec); ra[3][3] = ra[3][2] + round(grid4->header->ny * grid4->header->inc[GMT_Y] * vel[3] / prf[3] / dec); ra[4][0] = round(near_range_rel[4] / dec); ra[4][1] = ra[4][0] + round(grid5->header->nx * grid5->header->inc[GMT_X] * dr / dec); ra[4][2] = round(clock_start_rel[4] * vel[4] / dec); ra[4][3] = ra[4][2] + round(grid5->header->ny * grid5->header->inc[GMT_Y] * vel[4] / prf[4] / dec); ra[5][0] = round(near_range_rel[5] / dec); ra[5][1] = ra[5][0] + round(grid6->header->nx * grid6->header->inc[GMT_X] * dr / dec); ra[5][2] = round(clock_start_rel[5] * vel[5] / dec); ra[5][3] = ra[5][2] + round(grid6->header->ny * grid6->header->inc[GMT_Y] * vel[5] / prf[5] / dec); ra[6][0] = round(near_range_rel[6] / dec); ra[6][1] = ra[6][0] + round(grid7->header->nx * grid7->header->inc[GMT_X] * dr / dec); ra[6][2] = round(clock_start_rel[6] * vel[6] / dec); ra[6][3] = ra[6][2] + round(grid7->header->ny * grid7->header->inc[GMT_Y] * vel[6] / prf[6] / dec); ra[7][0] = round(near_range_rel[7] / dec); ra[7][1] = ra[7][0] + round(grid8->header->nx * grid8->header->inc[GMT_X] * dr / dec); ra[7][2] = round(clock_start_rel[7] * vel[7] / dec); ra[7][3] = ra[7][2] + round(grid8->header->ny * grid8->header->inc[GMT_Y] * vel[7] / prf[7] / dec); ra[8][0] = round(near_range_rel[8] / dec); ra[8][1] = ra[8][0] + round(grid9->header->nx * grid9->header->inc[GMT_X] * dr / dec); ra[8][2] = round(clock_start_rel[8] * vel[8] / dec); ra[8][3] = ra[8][2] + round(grid9->header->ny * grid9->header->inc[GMT_Y] * vel[8] / prf[8] / dec); ra[9][0] = round(near_range_rel[9] / dec); ra[9][1] = ra[9][0] + round(grid10->header->nx * grid10->header->inc[GMT_X] * dr / dec); ra[9][2] = round(clock_start_rel[9] * vel[9] / dec); ra[9][3] = ra[9][2] + round(grid10->header->ny * grid10->header->inc[GMT_Y] * vel[9] / prf[9] / dec); /* debug */ /*for (i=0;i<5;i++) { for (j=0;j<4;j++) { fprintf(stderr, "i=%d j=%d ra=%d\n", i,j,ra[i][j]); } }*/ /* the lower boundary in the azimuth and range direction is 0 */ /* find the upper boundary in the azimuth and range direction */ azimuth_ub = -999999; for (i = 5; i < 10; i++) { if (ra[i][3] > azimuth_ub) { azimuth_ub = ra[i][3]; } } range_ub = ra[4][1]; /* make an output grid */ inc[GMT_X] = inc[GMT_Y] = dec; /* in meters */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = range_ub * inc[GMT_X]; wesn[GMT_YHI] = azimuth_ub * inc[GMT_Y]; /* debug */ /* fprintf(stderr, "inc[GMT_X] = %f , inc[GMT_Y] = %f\n", inc[GMT_X], inc[GMT_Y]); fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); */ if ((grid11 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "mosaic", grid11)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node11 = 0; node11 < grid11->header->size; node11++) grid11->data[node11] = NAN; /* put in the subswath grids */ range_boundary1 = round((ra[0][1] + ra[1][0]) / 2); azimuth_boundary1 = round((ra[0][3] + ra[5][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary1=%d\n",range_boundary1); /* put in subswath 1 */ for (range = ra[0][0]; range < range_boundary1; range++) { for (azimuth = ra[0][2]; azimuth < azimuth_boundary1; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[0]) / dr / grid1->header->inc[GMT_X]); row = grid1->header->ny - round((azimuth * dec - clock_start_rel[0] * vel[0]) / (vel[0] / prf[0]) / grid1->header->inc[GMT_Y]); if (col >= 0 && col <= grid1->header->nx && row >= 0 && row <= grid1->header->ny) { node1 = GMT_Get_Index(API, grid1->header, row, col); grid11->data[node11] = grid1->data[node1]; } } } /* put in subswath 2 */ range_boundary2 = round((ra[1][1] + ra[2][0]) / 2); azimuth_boundary2 = round((ra[1][3] + ra[6][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary2=%d\n",range_boundary2); for (range = range_boundary1; range < range_boundary2; range++) { for (azimuth = ra[1][2]; azimuth < azimuth_boundary2; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[1]) / dr / grid2->header->inc[GMT_X]); row = grid2->header->ny - round((azimuth * dec - clock_start_rel[1] * vel[1]) / (vel[1] / prf[1]) / grid2->header->inc[GMT_Y]); if (col >= 0 && col <= grid2->header->nx && row >= 0 && row <= grid2->header->ny) { node2 = GMT_Get_Index(API, grid2->header, row, col); grid11->data[node11] = grid2->data[node2]; } } } /* put in subswath 3 */ range_boundary3 = round((ra[2][1] + ra[3][0]) / 2); azimuth_boundary3 = round((ra[2][3] + ra[7][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary3=%d\n",range_boundary3); for (range = range_boundary2; range < range_boundary3; range++) { for (azimuth = ra[2][2]; azimuth < azimuth_boundary3; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[2]) / dr / grid3->header->inc[GMT_X]); row = grid3->header->ny - round((azimuth * dec - clock_start_rel[2] * vel[2]) / (vel[2] / prf[2]) / grid3->header->inc[GMT_Y]); if (col >= 0 && col <= grid3->header->nx && row >= 0 && row <= grid3->header->ny) { node3 = GMT_Get_Index(API, grid3->header, row, col); grid11->data[node11] = grid3->data[node3]; } } } /* put in subswath 4 */ range_boundary4 = round((ra[3][1] + ra[4][0]) / 2); azimuth_boundary4 = round((ra[3][3] + ra[8][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary4=%d\n",range_boundary4); for (range = range_boundary3; range < range_boundary4; range++) { for (azimuth = ra[3][2]; azimuth < azimuth_boundary4; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[3]) / dr / grid4->header->inc[GMT_X]); row = grid4->header->ny - round((azimuth * dec - clock_start_rel[3] * vel[3]) / (vel[3] / prf[3]) / grid4->header->inc[GMT_Y]); if (col >= 0 && col <= grid4->header->nx && row >= 0 && row <= grid4->header->ny) { node4 = GMT_Get_Index(API, grid4->header, row, col); grid11->data[node11] = grid4->data[node4]; } } } /* put in subswath 5 */ range_boundary5 = range_ub; azimuth_boundary5 = round((ra[4][3] + ra[9][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary5=%d\n",range_boundary5); for (range = range_boundary4; range < range_boundary5; range++) { for (azimuth = ra[4][2]; azimuth < azimuth_boundary5; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[4]) / dr / grid5->header->inc[GMT_X]); row = grid5->header->ny - round((azimuth * dec - clock_start_rel[4] * vel[4]) / (vel[4] / prf[4]) / grid5->header->inc[GMT_Y]); if (col >= 0 && col <= grid5->header->nx && row >= 0 && row <= grid5->header->ny) { node5 = GMT_Get_Index(API, grid5->header, row, col); grid11->data[node11] = grid5->data[node5]; } } } /* put in subswath 6 */ range_boundary1 = round((ra[5][1] + ra[6][0]) / 2); for (range = ra[5][0]; range < range_boundary1; range++) { for (azimuth = azimuth_boundary1; azimuth < ra[5][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[5]) / dr / grid6->header->inc[GMT_X]); row = grid6->header->ny - round((azimuth * dec - clock_start_rel[5] * vel[5]) / (vel[5] / prf[5]) / grid6->header->inc[GMT_Y]); if (col >= 0 && col <= grid6->header->nx && row >= 0 && row <= grid6->header->ny) { node6 = GMT_Get_Index(API, grid6->header, row, col); grid11->data[node11] = grid6->data[node6]; } } } /* put in subswath 7 */ range_boundary2 = round((ra[6][1] + ra[7][0]) / 2); for (range = range_boundary1; range < range_boundary2; range++) { for (azimuth = azimuth_boundary2; azimuth < ra[6][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[6]) / dr / grid7->header->inc[GMT_X]); row = grid7->header->ny - round((azimuth * dec - clock_start_rel[6] * vel[6]) / (vel[6] / prf[6]) / grid7->header->inc[GMT_Y]); if (col >= 0 && col <= grid7->header->nx && row >= 0 && row <= grid7->header->ny) { node7 = GMT_Get_Index(API, grid7->header, row, col); grid11->data[node11] = grid7->data[node7]; } } } /* put in subswath 8 */ range_boundary3 = round((ra[7][1] + ra[8][0]) / 2); for (range = range_boundary2; range < range_boundary3; range++) { for (azimuth = azimuth_boundary3; azimuth < ra[7][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[7]) / dr / grid8->header->inc[GMT_X]); row = grid8->header->ny - round((azimuth * dec - clock_start_rel[7] * vel[7]) / (vel[7] / prf[7]) / grid8->header->inc[GMT_Y]); if (col >= 0 && col <= grid8->header->nx && row >= 0 && row <= grid8->header->ny) { node8 = GMT_Get_Index(API, grid8->header, row, col); grid11->data[node11] = grid8->data[node8]; } } } /* put in subswath 9 */ range_boundary4 = round((ra[8][1] + ra[9][0]) / 2); for (range = range_boundary3; range < range_boundary4; range++) { for (azimuth = azimuth_boundary4; azimuth < ra[8][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[8]) / dr / grid9->header->inc[GMT_X]); row = grid9->header->ny - round((azimuth * dec - clock_start_rel[8] * vel[8]) / (vel[8] / prf[8]) / grid9->header->inc[GMT_Y]); if (col >= 0 && col <= grid9->header->nx && row >= 0 && row <= grid9->header->ny) { node9 = GMT_Get_Index(API, grid9->header, row, col); grid11->data[node11] = grid9->data[node9]; } } } /* put in subswath 10 */ range_boundary5 = ra[9][1]; for (range = range_boundary4; range < range_boundary5; range++) { for (azimuth = azimuth_boundary5; azimuth < ra[9][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[9]) / dr / grid10->header->inc[GMT_X]); row = grid10->header->ny - round((azimuth * dec - clock_start_rel[9] * vel[9]) / (vel[9] / prf[9]) / grid10->header->inc[GMT_Y]); if (col >= 0 && col <= grid10->header->nx && row >= 0 && row <= grid10->header->ny) { node10 = GMT_Get_Index(API, grid10->header, row, col); grid11->data[node11] = grid10->data[node10]; } } } /* output and clean up */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[21], grid11)) return EXIT_FAILURE; if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/preproc/ALOS_preproc/ALOS_mosaic_ss/Makefile2000644 015705 000000 00000000627 13505462014 024030 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_mosaic_ss_2frames CSRCS = ALOS_mosaic_ss_2frames.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar $(GMT_INC) CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) $(GMTSAR) $(GMT_LIB) $(INCLUDES) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/cmake/ConfigDefault.cmake000644 015705 000000 00000013000 13505462013 020326 0ustar00sandwellwheel000000 000000 # # $Id: ConfigDefault.cmake 380 2016-08-14 06:42:31Z fwobbe $ # # Default GMTSAR settings. DO NOT EDIT THIS FILE! # # There are two configuration files: # 1) "ConfigDefault.cmake" - is version controlled and used to add new default # variables and set defaults for everyone. # 2) "ConfigUser.cmake" - is not version controlled (currently listed in # svn:ignore property) and used to override defaults on a per-user basis. # # NOTE: If you want to change CMake behaviour just for yourself then copy # "ConfigUserTemplate.cmake" to "ConfigUser.cmake" and then edit # "ConfigUser.cmake" (not "ConfigDefault.cmake" or "ConfigUserTemplate.cmake"). # # The GMTSAR package name. set (GMTSAR_PACKAGE_NAME "GMTSAR") # a short description of the gmt project (only a few words). set (GMTSAR_PACKAGE_DESCRIPTION_SUMMARY "Includes preprocessors for ERS1/2, Envisat, ALOS-1, ALOS-2, TerraSAR-X, COSMOS-SkyMed, and RADARSAT-2 (beta), Sentinel-1A TOPS") # GMTSAR_VERSION_YEAR is set to current date in # cmake/modules/ConfigCMake.cmake if not specified here: #set (GMTSAR_VERSION_YEAR "2015") # The GMTSAR package version. set (GMTSAR_PACKAGE_VERSION_MAJOR 5) set (GMTSAR_PACKAGE_VERSION_MINOR 3) set (GMTSAR_PACKAGE_VERSION_PATCH 0) # The subversion revision of the GMTSAR source code. # This is manually set when making GMTSAR *public* releases. # However, when making internal releases or just an ordinary developer build, leave it # empty; if it is empty, the revision number is automatically populated for you on build. #set (GMTSAR_SOURCE_CODE_CONTROL_VERSION_STRING "15220") # The GMTSAR package version. set (GMTSAR_PACKAGE_VERSION "${GMTSAR_PACKAGE_VERSION_MAJOR}.${GMTSAR_PACKAGE_VERSION_MINOR}.${GMTSAR_PACKAGE_VERSION_PATCH}") # The API version (SOVERSION) of the GMTSAR libraries. # Increment this when more or fewer functions are included in the # library, the function prototype changes, or data type changes. set (GMTSAR_LIB_SOVERSION 5) # The build version (VERSION) of the GMTSAR libraries. set (GMTSAR_LIB_VERSION "${GMTSAR_LIB_SOVERSION}.${GMTSAR_PACKAGE_VERSION_MINOR}.${GMTSAR_PACKAGE_VERSION_PATCH}") # The GMTSAR wiki location set (GMTSAR_TRAC_WIKI "http://gmt.soest.hawaii.edu/projects/gmt5sar/wiki") # Directory in which to install the release sources per default if (NOT DEFINED GMTSAR_RELEASE_PREFIX) set (GMTSAR_RELEASE_PREFIX ${GMTSAR_BINARY_DIR}/gmtsar-${GMTSAR_PACKAGE_VERSION}) endif (NOT DEFINED GMTSAR_RELEASE_PREFIX) # You can set the build configuration type as a command-line argument to 'cmake' using -DCMAKE_BUILD_TYPE:STRING=Debug for example. # If no build configuration type was given as a command-line option to 'cmake' then a default cache entry is set here. # A cache entry is what appears in the 'CMakeCache.txt' file that CMake generates - you can edit that file directly or use the CMake GUI to edit it. # The user can then set this parameter via the CMake GUI before generating the native build system. # NOTE: this is not needed for visual studio because it has multiple configurations in the ide (and CMake includes them all). # however makefile generators can only have one build type (to have multiple build types you'll need multiple out-of-place builds - one for each build type). # # The following are some valid build configuration types: # 1) Debug - no optimisation with debug info. # 2) Release - release build optimised for speed. # 3) RelWithDebInfo - release build optimised for speed with debug info. # 4) MinSizeRel - release build optimised for size. # The following is from http://mail.kde.org/pipermail/kde-buildsystem/2008-November/005112.html... # # "The way to identify whether a generator is multi-configuration is to # check whether CMAKE_CONFIGURATION_TYPES is set. The VS/XCode generators # set it (and ignore CMAKE_BUILD_TYPE). The Makefile generators do not # set it (and use CMAKE_BUILD_TYPE). If CMAKE_CONFIGURATION_TYPES is not # already set, don't set it." # if (NOT DEFINED CMAKE_CONFIGURATION_TYPES) if (NOT DEFINED CMAKE_BUILD_TYPE) # Should we set build type to RelWithDebInfo for developers and # to release for general public (ie when GPLATES_SOURCE_RELEASE is true) ? # Currently it's Release for both. set (CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ${extra_build_configurations}." FORCE) endif (NOT DEFINED CMAKE_BUILD_TYPE) endif (NOT DEFINED CMAKE_CONFIGURATION_TYPES) # Turn this on if you want to... # Unix: see compiler commands echoed to console and messages about make # entering and leaving directories. # VisualStudio: see compiler commands. # Setting CMAKE_VERBOSE_MAKEFILE to 'true'... # Unix: puts 'VERBOSE=1' in the top Makefile. # VisualStudio: sets SuppressStartupBanner to FALSE. # If CMAKE_VERBOSE_MAKEFILE is set to 'false' and you want to turn on # verbosity temporarily you can... # Unix: type 'make VERBOSE=1' on the command-line when building. # VisualStudio: change SuppressStartupBanner to 'no' in "project # settings->configuration properties->*->general". if (NOT DEFINED CMAKE_VERBOSE_MAKEFILE) set (CMAKE_VERBOSE_MAKEFILE false) endif (NOT DEFINED CMAKE_VERBOSE_MAKEFILE) # prefer shared libs over static set (BUILD_SHARED_LIBS true) set (CMAKE_FIND_STATIC LAST) # look also for lib64 when building 64-bit binaries if (NOT DEFINED FIND_LIBRARY_USE_LIB64_PATHS) set (FIND_LIBRARY_USE_LIB64_PATHS true) endif (NOT DEFINED FIND_LIBRARY_USE_LIB64_PATHS) # search order for find_* set (CMAKE_FIND_FRAMEWORK LAST) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/cmake/modules/000755 015705 000000 00000000000 13505462013 016270 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/cmake/modules/ConfigCMake.cmake000644 015705 000000 00000013213 13505462013 021400 0ustar00sandwellwheel000000 000000 # # $Id: ConfigCMake.cmake 380 2016-08-14 06:42:31Z fwobbe $ # # Useful CMake variables. # # There are three configuration files: # 1) "ConfigDefault.cmake" - is version controlled and used to add new default # variables and set defaults for everyone. # 2) "ConfigUser.cmake" in the source tree - is not version controlled # (currently listed in svn:ignore property) and used to override defaults on # a per-user basis. # 3) "ConfigUser.cmake" in the build tree - is used to override # "ConfigUser.cmake" in the source tree. # # NOTE: If you want to change CMake behaviour just for yourself then copy # "ConfigUserTemplate.cmake" to "ConfigUser.cmake" and then edit # "ConfigUser.cmake" (not "ConfigDefault.cmake" or "ConfigUserTemplate.cmake"). # include ("${CMAKE_SOURCE_DIR}/cmake/ConfigDefault.cmake") # If "ConfigUser.cmake" doesn't exist then create one for convenience. if (EXISTS "${CMAKE_SOURCE_DIR}/cmake/ConfigUser.cmake") include ("${CMAKE_SOURCE_DIR}/cmake/ConfigUser.cmake") endif (EXISTS "${CMAKE_SOURCE_DIR}/cmake/ConfigUser.cmake") # If you've got a 'ConfigUser.cmake' in the build tree then that overrides the # one in the source tree. if (EXISTS "${CMAKE_BINARY_DIR}/cmake/ConfigUser.cmake") include ("${CMAKE_BINARY_DIR}/cmake/ConfigUser.cmake") endif (EXISTS "${CMAKE_BINARY_DIR}/cmake/ConfigUser.cmake") ########################################################### # Do any needed processing of the configuration variables # ########################################################### # Build type if (NOT CMAKE_BUILD_TYPE) set (CMAKE_BUILD_TYPE Release) endif (NOT CMAKE_BUILD_TYPE) # Here we change it to add the SVN revision number for non-public releases - see Package.cmake for # why this has to be done here. set (GMTSAR_PACKAGE_VERSION_WITH_SVN_REVISION ${GMTSAR_PACKAGE_VERSION}) # Add the Subversion version number to the package filename if this is a non-public release. # A non-public release has an empty 'GMTSAR_SOURCE_CODE_CONTROL_VERSION_STRING' variable in 'ConfigDefault.cmake'. set (HAVE_SVN_VERSION) if (NOT GMTSAR_SOURCE_CODE_CONTROL_VERSION_STRING) # Get the location, inside the staging area location, to copy the application bundle to. execute_process ( COMMAND svnversion ${GMTSAR_SOURCE_DIR} RESULT_VARIABLE SVN_VERSION_RESULT OUTPUT_VARIABLE SVN_VERSION_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE) if (SVN_VERSION_RESULT) message (STATUS "Unable to determine svn version number for non-public release - ignoring.") else (SVN_VERSION_RESULT) if (SVN_VERSION_OUTPUT MATCHES "Unversioned") message (STATUS "Unversioned source tree, non-public release.") else (SVN_VERSION_OUTPUT MATCHES "Unversioned") # The 'svnversion' command can output a range of revisions with a colon # separator - but this causes problems with filenames so we'll remove the # colon and the end revision after it. string (REGEX REPLACE ":.*$" "" SVN_VERSION ${SVN_VERSION_OUTPUT}) if (NOT SVN_VERSION STREQUAL exported) # Set the updated package version. set (GMTSAR_PACKAGE_VERSION_WITH_SVN_REVISION "${GMTSAR_PACKAGE_VERSION}_r${SVN_VERSION}") set (HAVE_SVN_VERSION TRUE) endif (NOT SVN_VERSION STREQUAL exported) endif (SVN_VERSION_OUTPUT MATCHES "Unversioned") endif (SVN_VERSION_RESULT) endif (NOT GMTSAR_SOURCE_CODE_CONTROL_VERSION_STRING) # The current GMTSAR version. set (GMTSAR_VERSION_STRING "${GMTSAR_PACKAGE_NAME} ${GMTSAR_PACKAGE_VERSION_WITH_SVN_REVISION}") set (GMTSAR_LONG_VERSION_STRING "${GMTSAR_PACKAGE_NAME} - ${GMTSAR_PACKAGE_DESCRIPTION_SUMMARY}, Version ${GMTSAR_PACKAGE_VERSION_WITH_SVN_REVISION}") # use, i.e. don't skip the full RPATH for the build tree set (CMAKE_SKIP_BUILD_RPATH FALSE) # when building, don't use the install RPATH already # (but later on when installing) set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) # set the RPATH to be used when installing if (NOT DEFINED GMTSAR_INSTALL_RELOCATABLE) set (GMTSAR_INSTALL_RELOCATABLE FALSE) endif (NOT DEFINED GMTSAR_INSTALL_RELOCATABLE) if (GMTSAR_INSTALL_RELOCATABLE) # make executables relocatable on supported platforms (relative RPATH) if (UNIX AND NOT CYGWIN) # find relative libdir from executable dir file (RELATIVE_PATH _rpath /${GMTSAR_BINDIR} /lib) # remove trailing / string (REGEX REPLACE "/$" "" _rpath "${_rpath}") if (APPLE) # relative RPATH on osx # CMP0042: CMake 3.0: MACOSX_RPATH is enabled by default set (CMAKE_MACOSX_RPATH ON) set (CMAKE_INSTALL_NAME_DIR @rpath) set (CMAKE_INSTALL_RPATH "@rpath;@executable_path/${_rpath}") else (APPLE) # relative RPATH on Linux, Solaris, etc. set (CMAKE_INSTALL_RPATH "\$ORIGIN/${_rpath}") endif (APPLE) endif (UNIX AND NOT CYGWIN) else (GMTSAR_INSTALL_RELOCATABLE) # set absolute RPATH if (APPLE) # CMP0042: CMake 3.0: MACOSX_RPATH is enabled by default set (CMAKE_MACOSX_RPATH OFF) set (CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib") else (APPLE) # the RPATH to be used when installing, but only if it's not a # system directory list (FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) if ("${isSystemDir}" STREQUAL "-1") set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") endif ("${isSystemDir}" STREQUAL "-1") endif (APPLE) endif (GMTSAR_INSTALL_RELOCATABLE) # add the automatically determined parts of the RPATH # which point to directories outside the build tree to the install RPATH set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # Make GNU and Intel C compiler default to C99 if (CMAKE_C_COMPILER_ID MATCHES "(GNU|Intel)" AND NOT CMAKE_C_FLAGS MATCHES "-std=") set (CMAKE_C_FLAGS "-std=gnu99 ${CMAKE_C_FLAGS}") endif () # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/cmake/modules/CheckPrototypeExists.cmake000644 015705 000000 00000002461 13505462013 023440 0ustar00sandwellwheel000000 000000 # # $Id: CheckPrototypeExists.cmake 375 2016-08-13 20:20:24Z fwobbe $ # # - Check if the prototype for a function exists. # CHECK_PROTOTYPE_EXISTS (FUNCTION HEADER VARIABLE) # # FUNCTION - the name of the function you are looking for # HEADER - the header(s) where the prototype should be declared # VARIABLE - variable to store the result # # The following variables may be set before calling this macro to # modify the way the check is run: # # CMAKE_REQUIRED_FLAGS = string of compile command line flags # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) # CMAKE_REQUIRED_INCLUDES = list of include directories # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. INCLUDE(CheckCSourceCompiles) MACRO (CHECK_PROTOTYPE_EXISTS _SYMBOL _HEADER _RESULT) SET(_INCLUDE_FILES) FOREACH (it ${_HEADER}) SET(_INCLUDE_FILES "${_INCLUDE_FILES}#include <${it}>\n") ENDFOREACH (it) SET(_CHECK_PROTO_EXISTS_SOURCE_CODE " ${_INCLUDE_FILES} int main() { #ifndef ${_SYMBOL} int i = sizeof(&${_SYMBOL}); #endif return 0; } ") CHECK_C_SOURCE_COMPILES("${_CHECK_PROTO_EXISTS_SOURCE_CODE}" ${_RESULT}) ENDMACRO (CHECK_PROTOTYPE_EXISTS _SYMBOL _HEADER _RESULT) GMTSAR_V5.7/cmake/modules/CheckTypeExists.cmake000644 015705 000000 00000002130 13505462013 022345 0ustar00sandwellwheel000000 000000 # # $Id: CheckTypeExists.cmake 375 2016-08-13 20:20:24Z fwobbe $ # # - Check if the given struct or class has the specified member variable # CHECK_STRUCT_MEMBER (STRUCT MEMBER HEADER VARIABLE) # # STRUCT - the name of the struct or class you are interested in # MEMBER - the member which existence you want to check # HEADER - the header(s) where the prototype should be declared # VARIABLE - variable to store the result # # The following variables may be set before calling this macro to # modify the way the check is run: # # CMAKE_REQUIRED_FLAGS = string of compile command line flags # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) # CMAKE_REQUIRED_INCLUDES = list of include directories # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. INCLUDE(CheckTypeSize) MACRO (CHECK_TYPE_EXISTS _TYPE _HEADER _RESULT) SET(CMAKE_EXTRA_INCLUDE_FILES ${_HEADER}) CHECK_TYPE_SIZE(${_TYPE} ${_RESULT}) ENDMACRO (CHECK_TYPE_EXISTS) GMTSAR_V5.7/cmake/modules/FindGMT.cmake000644 015705 000000 00000006614 13505462013 020531 0ustar00sandwellwheel000000 000000 # # $Id: FindGMT.cmake 375 2016-08-13 20:20:24Z fwobbe $ # # Locate GMT # # This module accepts the following environment variables: # # GMT_DIR or GMT_ROOT - Specify the location of GMT # # This module defines the following CMake variables: # # GMT_FOUND - True if libgmt is found # GMT_LIBRARY - A variable pointing to the GMT library # GMT_INCLUDE_DIR - Where to find the headers # GMT_INCLUDE_DIRS - Where to find the headers # GMT_DEFINITIONS - Extra compiler flags #============================================================================= # Inspired by FindGDAL # # Distributed under the OSI-approved bsd license (the "License") # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See COPYING-CMAKE-SCRIPTS for more information. #============================================================================= # This makes the presumption that you include gmt.h like # #include "gmt.h" if (UNIX AND NOT GMT_FOUND) # Use gmt-config to obtain the libraries find_program (GMT_CONFIG gmt-config HINTS ${GMT_DIR} ${GMT_ROOT} $ENV{GMT_DIR} $ENV{GMT_ROOT} PATH_SUFFIXES bin PATHS /sw # Fink /opt/local # DarwinPorts /opt/csw # Blastwave /opt /usr/local ) if (GMT_CONFIG) execute_process (COMMAND ${GMT_CONFIG} --cflags ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GMT_CONFIG_CFLAGS) if (GMT_CONFIG_CFLAGS) string (REGEX MATCHALL "(^| )-I[^ ]+" _gmt_dashI ${GMT_CONFIG_CFLAGS}) string (REGEX REPLACE "(^| )-I" "" _gmt_includepath "${_gmt_dashI}") string (REGEX REPLACE "(^| )-I[^ ]+" "" _gmt_cflags_other ${GMT_CONFIG_CFLAGS}) endif (GMT_CONFIG_CFLAGS) execute_process (COMMAND ${GMT_CONFIG} --libs ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GMT_CONFIG_LIBS) if (GMT_CONFIG_LIBS) # Ensure -l is precedeced by whitespace to not match # '-l' in '-L/usr/lib/x86_64-linux-gnu/hdf5/serial' string (REGEX MATCHALL "(^| )-l[^ ]+" _gmt_dashl ${GMT_CONFIG_LIBS}) string (REGEX REPLACE "(^| )-l" "" _gmt_lib "${_gmt_dashl}") string (REGEX MATCHALL "(^| )-L[^ ]+" _gmt_dashL ${GMT_CONFIG_LIBS}) string (REGEX REPLACE "(^| )-L" "" _gmt_libpath "${_gmt_dashL}") endif (GMT_CONFIG_LIBS) endif (GMT_CONFIG) if (_gmt_lib) list (REMOVE_DUPLICATES _gmt_lib) list (REMOVE_ITEM _gmt_lib gmt) endif (_gmt_lib) endif (UNIX AND NOT GMT_FOUND) find_path (GMT_INCLUDE_DIR gmt.h HINTS ${_gmt_includepath} ${GMT_DIR} ${GMT_ROOT} $ENV{GMT_DIR} $ENV{GMT_ROOT} PATH_SUFFIXES include/gmt include PATHS /sw # Fink /opt/local # DarwinPorts /opt/csw # Blastwave /opt /usr/local ) find_library (GMT_LIBRARY NAMES gmt HINTS ${_gmt_libpath} ${GMT_DIR} ${GMT_ROOT} $ENV{GMT_DIR} $ENV{GMT_ROOT} PATH_SUFFIXES lib PATHS /sw /opt/local /opt/csw /opt /usr/local ) # find all libs that gmt-config reports foreach (_extralib ${_gmt_lib}) find_library (_found_lib_${_extralib} NAMES ${_extralib} PATHS ${_gmt_libpath}) list (APPEND GMT_LIBRARY ${_found_lib_${_extralib}}) endforeach (_extralib) include (FindPackageHandleStandardArgs) find_package_handle_standard_args (GMT DEFAULT_MSG GMT_LIBRARY GMT_INCLUDE_DIR) set (GMT_LIBRARIES ${GMT_LIBRARY}) set (GMT_INCLUDE_DIRS ${GMT_INCLUDE_DIR}) string (REPLACE "-DNDEBUG" "" GMT_DEFINITIONS "${_gmt_cflags_other}") # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/cmake/modules/ConfigureChecks.cmake000644 015705 000000 00000055457 13505462013 022354 0ustar00sandwellwheel000000 000000 # # $Id: ConfigureChecks.cmake 375 2016-08-13 20:20:24Z fwobbe $ # if(NOT DEFINED _INCLUDED_CHECK_MACROS_) set(_INCLUDED_CHECK_MACROS_ "DEFINED") include (CheckCCompilerFlag) include (CheckCSourceCompiles) include (CheckCSourceRuns) include (CheckFunctionExists) include (CheckIncludeFile) include (CheckIncludeFiles) include (CheckLibraryExists) include (CheckPrototypeExists) include (CheckSymbolExists) include (CheckTypeExists) include (CheckTypeSize) include (CMakePushCheckState) include (TestBigEndian) endif(NOT DEFINED _INCLUDED_CHECK_MACROS_) # # Check if compiler supports -traditional-cpp # if (NOT HAVE_TRADITIONAL_CPP) if (MSVC) # Visual C++ set (_cpp_cmdline /EP) elseif (CMAKE_C_COMPILER_ID MATCHES "(GNU|Clang|Intel)") # GCC, Clang, or ICC set (_cpp_cmdline -E -w -P -nostdinc -traditional-cpp) endif (MSVC) message (STATUS "Performing Test HAVE_TRADITIONAL_CPP") execute_process (COMMAND ${CMAKE_C_COMPILER} ${_cpp_cmdline} ${GMT_SOURCE_DIR}/config.h.in # can be any header file RESULT_VARIABLE _cpp_traditional_result OUTPUT_QUIET ERROR_QUIET) if (_cpp_traditional_result EQUAL 0) set (HAVE_TRADITIONAL_CPP TRUE CACHE INTERNAL "Test HAVE_TRADITIONAL_CPP") message (STATUS "Performing Test HAVE_TRADITIONAL_CPP - Success") else (_cpp_traditional_result EQUAL 0) set (HAVE_TRADITIONAL_CPP "" CACHE INTERNAL "Test HAVE_TRADITIONAL_CPP") message (STATUS "Performing Test HAVE_TRADITIONAL_CPP - Failed") endif (_cpp_traditional_result EQUAL 0) endif (NOT HAVE_TRADITIONAL_CPP) # # Check if compiler supports __func__ or __FUNCTION__ identifier # check_c_source_compiles ( " int main (){char *function_name = __func__; return 0;} " HAVE___FUNC__) check_c_source_compiles ( " int main (){char *function_name = __FUNCTION__; return 0;} " HAVE___FUNCTION__) # # Check if compiler supports inline functions # This test is adapted from Jack Kelly on the CMake mailing list # cmake_push_check_state() # save state of CMAKE_REQUIRED_* foreach (KEYWORD "inline" "__inline" "__inline__") if (NOT DEFINED HAVE_C_INLINE) set (CMAKE_REQUIRED_DEFINITIONS -Dinline=${KEYWORD}) check_c_source_compiles( " typedef int foo_t; static inline foo_t static_foo () {return 0;} foo_t foo () {return 0;} int main (int argc, char *argv[]) {return 0;} " HAVE_C_${KEYWORD}) if (HAVE_C_${KEYWORD}) set (HAVE_C_INLINE TRUE) endif (HAVE_C_${KEYWORD}) endif (NOT DEFINED HAVE_C_INLINE) endforeach (KEYWORD) cmake_pop_check_state() # restore state of CMAKE_REQUIRED_* # # Check for windows header # check_include_file (io.h HAVE_IO_H_) check_include_file (direct.h HAVE_DIRECT_H_) check_include_file (process.h HAVE_PROCESS_H_) # # Check for C99 and libc extensions # # strdup, sincos, ... are GNU/BSD/Sun extensions: cmake_push_check_state() set (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE -D__EXTENSIONS__ -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE) check_include_file (assert.h HAVE_ASSERT_H_) check_include_file (dirent.h HAVE_DIRENT_H_) check_include_file (errno.h HAVE_ERRNO_H_) check_include_file (execinfo.h HAVE_EXECINFO_H_) check_include_file (fcntl.h HAVE_FCNTL_H_) check_include_file (signal.h HAVE_SIGNAL_H_) check_include_file (stdbool.h HAVE_STDBOOL_H_) check_include_file (sys/dir.h HAVE_SYS_DIR_H_) check_include_file (sys/resource.h HAVE_SYS_RESOURCE_H_) check_include_file (sys/stat.h HAVE_SYS_STAT_H_) check_include_file (sys/time.h HAVE_SYS_TIME_H_) check_include_file (sys/ucontext.h HAVE_SYS_UCONTEXT_H_) check_include_file (unistd.h HAVE_UNISTD_H_) check_function_exists (fcntl HAVE_FCNTL) check_function_exists (fopen64 HAVE_FOPEN64) check_function_exists (fseeko HAVE_FSEEKO) check_function_exists (ftello HAVE_FTELLO) check_function_exists (getopt HAVE_GETOPT) check_function_exists (getpwuid HAVE_GETPWUID) check_function_exists (abs HAVE_ABS) check_function_exists (llabs HAVE_LLABS) check_function_exists (pclose HAVE_PCLOSE) check_function_exists (popen HAVE_POPEN) check_function_exists (qsort_r HAVE_QSORT_R) if (HAVE_QSORT_R) # check qsort_r compatibility check_c_source_runs ( " #include #include int cmp(const void *a, const void*b, void *c) { assert(c == NULL); return *(int*)a - *(int*)b; } int main() { int array[5] = {7,3,5,2,8}; int i; qsort_r(array,5,sizeof(int),cmp,NULL); for (i=0;i<4;++i) { assert(array[i] < array[i+1]); } return 0; } " HAVE_QSORT_R_GLIBC) endif (HAVE_QSORT_R) check_function_exists (strcasecmp HAVE_STRCASECMP) check_function_exists (strncasecmp HAVE_STRNCASECMP) check_function_exists (stricmp HAVE_STRICMP) check_function_exists (strnicmp HAVE_STRNICMP) check_function_exists (strdup HAVE_STRDUP) check_function_exists (strsep HAVE_STRSEP) check_function_exists (strtod HAVE_STRTOD) # Note: trailing underscore = GDAL workaround check_function_exists (strtof HAVE_STRTOF_) check_function_exists (strtok_r HAVE_STRTOK_R) if (WIN32) check_function_exists (_fseeki64 HAVE__FSEEKI64) check_function_exists (_ftelli64 HAVE__FTELLI64) check_function_exists (_pclose HAVE__PCLOSE) check_function_exists (_popen HAVE__POPEN) check_function_exists (_stat HAVE__STAT) check_function_exists (_stati64 HAVE__STATI64) check_function_exists (_fstat HAVE__FSTAT) check_function_exists (_fstati64 HAVE__FSTATI64) check_function_exists (strtok_s HAVE_STRTOK_S) endif (WIN32) # Check if these functions are declared (might not be the case although they # are build-in) check_symbol_exists (strdup string.h DECLARED_STRDUP) check_symbol_exists (strsep string.h DECLARED_STRSEP) check_symbol_exists (basename libgen.h HAVE_BASENAME) check_symbol_exists (fileno stdio.h HAVE_FILENO) check_symbol_exists (setlocale locale.h HAVE_SETLOCALE) # Note: trailing underscore = GDAL workaround check_symbol_exists (snprintf stdio.h HAVE_SNPRINTF_) check_symbol_exists (vsnprintf stdio.h HAVE_VSNPRINTF_) if (HAVE_UNISTD_H_) check_symbol_exists (access unistd.h HAVE_ACCESS) check_symbol_exists (getpid unistd.h HAVE_GETPID) else (HAVE_UNISTD_H_) # in MinGW: check_symbol_exists (access io.h HAVE_ACCESS) check_symbol_exists (_getpid process.h HAVE__GETPID) endif (HAVE_UNISTD_H_) if (WIN32) check_symbol_exists (_access io.h HAVE__ACCESS) check_symbol_exists (_fileno stdio.h HAVE__FILENO) check_symbol_exists (_getcwd direct.h HAVE__GETCWD) check_symbol_exists (_mkdir direct.h HAVE__MKDIR) check_symbol_exists (_setmode io.h HAVE__SETMODE) check_symbol_exists (_snprintf stdio.h HAVE__SNPRINTF_) check_symbol_exists (_vsnprintf stdio.h HAVE__VSNPRINTF_) endif (WIN32) if (UNIX) # Check if -ldl is needed for dladdr check_function_exists (dlopen HAVE_BUILTIN_DYNAMIC_LINKING_LOADER) if (NOT HAVE_BUILTIN_DYNAMIC_LINKING_LOADER) check_library_exists (dl dlopen "" HAVE_LIBDL) endif (NOT HAVE_BUILTIN_DYNAMIC_LINKING_LOADER) cmake_push_check_state() # save state of CMAKE_REQUIRED_* if (HAVE_LIBDL) set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} "-ldl") endif (HAVE_LIBDL) check_symbol_exists (dladdr dlfcn.h HAVE_DLADDR) cmake_pop_check_state() # restore state of CMAKE_REQUIRED_* check_function_exists (memalign HAVE_MEMALIGN) check_function_exists (posix_memalign HAVE_POSIX_MEMALIGN) if (HAVE_UNISTD_H_) # Check if sysconf(_SC_NPROCESSORS_ONLN) can be used for CPU count check_c_source_compiles ( " #include int main() { sysconf(_SC_NPROCESSORS_ONLN); } " HAVE_SC_NPROCESSORS_ONLN) # Check if sysconf(_SC_NPROC_ONLN) can be used for CPU count check_c_source_compiles ( " #include int main() { sysconf(_SC_NPROC_ONLN); } " HAVE_SC_NPROC_ONLN) endif (HAVE_UNISTD_H_) # Check if sysctl can be used for CPU count check_c_source_compiles ( " #include #include int main () { int count; size_t size = sizeof(count); int mib[] = { CTL_HW, HW_NCPU }; sysctl(mib, 2, &count, &size, NULL, 0); } " HAVE_SYSCTL_HW_NCPU) endif (UNIX) # # Check c types # check_include_file (ctype.h HAVE_CTYPE_H_) check_include_file (inttypes.h HAVE_INTTYPES_H_) #check_include_file (stddef.h HAVE_STDDEF_H_) #check_include_file (stdint.h HAVE_STDINT_H_) #check_include_file (sys/types.h HAVE_SYS_TYPES_H_) # set HAVE_SYS_TYPES_H, HAVE_STDINT_H, and HAVE_STDDEF_H # and check in , , and : check_type_size (_Bool SIZEOF__BOOL) check_type_size (bool SIZEOF_BOOL) check_type_size (int SIZEOF_INT) set (CMAKE_EXTRA_INCLUDE_FILES sys/ucontext.h) check_type_size (greg_t SIZEOF_GREG_T) set (CMAKE_EXTRA_INCLUDE_FILES) check_type_size (long SIZEOF_LONG) check_type_size ("long long" SIZEOF_LONG_LONG) check_type_size ("long double" SIZEOF_LONG_DOUBLE) check_type_size (mode_t SIZEOF_MODE_T) check_type_size (off_t SIZEOF_OFF_T) check_type_size (size_t SIZEOF_SIZE_T) check_type_size (wchar_t SIZEOF_WCHAR_T) check_type_size ("void*" SIZEOF_VOID_P) # add suffix to prevent name clash with GDAL set (HAVE_STDDEF_H_ "${HAVE_STDDEF_H}" CACHE INTERNAL "Have include stddef.h") set (HAVE_STDINT_H_ "${HAVE_STDINT_H}" CACHE INTERNAL "Have include stdinf.h") set (HAVE_SYS_TYPES_H_ "${HAVE_SYS_TYPES_H}" CACHE INTERNAL "Have include sys/types.h") test_big_endian (WORDS_BIGENDIAN) # Byte swapping functions check_c_source_runs ( " int main(void) { return !__builtin_bswap16(0xabcd) == 0xcdab; } " HAVE___BUILTIN_BSWAP16) check_c_source_runs ( " int main(void) { return !__builtin_bswap32(0xdeadbeef) == 0xefbeadde; } " HAVE___BUILTIN_BSWAP32) check_c_source_runs ( " int main(void) { return !__builtin_bswap64(0x1234567890abcdef) == 0xefcdab9078563412; } " HAVE___BUILTIN_BSWAP64) if (WIN32) check_function_exists (_byteswap_ushort HAVE__BYTESWAP_USHORT) # for uint16_t check_function_exists (_byteswap_ulong HAVE__BYTESWAP_ULONG) # for uint32_t check_function_exists (_byteswap_uint64 HAVE__BYTESWAP_UINT64) # for uint64_t endif (WIN32) # # Check math related stuff # # extra math headers check_include_file (floatingpoint.h HAVE_FLOATINGPOINT_H_) check_include_file (ieeefp.h HAVE_IEEEFP_H_) set (_math_h math.h float.h) if (HAVE_FLOATINGPOINT_H_) list (APPEND _math_h floatingpoint.h) endif (HAVE_FLOATINGPOINT_H_) if (HAVE_IEEEFP_H_) list (APPEND _math_h ieeefp.h) endif (HAVE_IEEEFP_H_) # Check if -lm is needed check_function_exists (cos HAVE_M_FUNCTIONS) if (NOT HAVE_M_FUNCTIONS) check_library_exists (m cos "" HAVE_M_LIBRARY) endif (NOT HAVE_M_FUNCTIONS) # If necessary compile with -lm if (HAVE_M_LIBRARY) set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} "-lm") endif (HAVE_M_LIBRARY) # check symbols (double) check_symbol_exists (acosh "${_math_h}" HAVE_ACOSH) check_symbol_exists (asinh "${_math_h}" HAVE_ASINH) check_symbol_exists (atanh "${_math_h}" HAVE_ATANH) check_symbol_exists (copysign "${_math_h}" HAVE_COPYSIGN) check_symbol_exists (erf "${_math_h}" HAVE_ERF) check_symbol_exists (erfc "${_math_h}" HAVE_ERFC) check_symbol_exists (hypot "${_math_h}" HAVE_HYPOT) check_symbol_exists (isfinite "${_math_h}" HAVE_ISFINITE) check_symbol_exists (isinf "${_math_h}" HAVE_ISINF) check_symbol_exists (isnan "${_math_h}" HAVE_ISNAN) check_symbol_exists (isnand "${_math_h}" HAVE_ISNAND) check_symbol_exists (isnanf "${_math_h}" HAVE_ISNANF) check_symbol_exists (isnormal "${_math_h}" HAVE_ISNORMAL) check_symbol_exists (j0 "${_math_h}" HAVE_J0) check_symbol_exists (j1 "${_math_h}" HAVE_J1) check_symbol_exists (jn "${_math_h}" HAVE_JN) check_symbol_exists (lrint "${_math_h}" HAVE_LRINT) check_symbol_exists (llrint "${_math_h}" HAVE_LLRINT) check_symbol_exists (log1p "${_math_h}" HAVE_LOG1P) check_symbol_exists (log2 "${_math_h}" HAVE_LOG2) check_symbol_exists (rint "${_math_h}" HAVE_RINT) check_symbol_exists (sincos "${_math_h}" HAVE_SINCOS) check_symbol_exists (y0 "${_math_h}" HAVE_Y0) check_symbol_exists (y1 "${_math_h}" HAVE_Y1) check_symbol_exists (yn "${_math_h}" HAVE_YN) # check symbols (float) check_symbol_exists (acosf "${_math_h}" HAVE_ACOSF) check_symbol_exists (acoshf "${_math_h}" HAVE_ACOSHF) check_symbol_exists (asinf "${_math_h}" HAVE_ASINF) check_symbol_exists (asinhf "${_math_h}" HAVE_ASINHF) check_symbol_exists (atanf "${_math_h}" HAVE_ATANF) check_symbol_exists (atanhf "${_math_h}" HAVE_ATANHF) check_symbol_exists (atan2f "${_math_h}" HAVE_ATAN2F) check_symbol_exists (erff "${_math_h}" HAVE_ERFF) check_symbol_exists (ceilf "${_math_h}" HAVE_CEILF) check_symbol_exists (cosf "${_math_h}" HAVE_COSF) check_symbol_exists (coshf "${_math_h}" HAVE_COSHF) check_symbol_exists (erfcf "${_math_h}" HAVE_ERFCF) check_symbol_exists (expf "${_math_h}" HAVE_EXPF) check_symbol_exists (fabsf "${_math_h}" HAVE_FABSF) check_symbol_exists (floorf "${_math_h}" HAVE_FLOORF) check_symbol_exists (fmodf "${_math_h}" HAVE_FMODF) check_symbol_exists (hypotf "${_math_h}" HAVE_HYPOTF) check_symbol_exists (logf "${_math_h}" HAVE_LOGF) check_symbol_exists (log2f "${_math_h}" HAVE_LOG2F) check_symbol_exists (log10f "${_math_h}" HAVE_LOG10F) check_symbol_exists (log1pf "${_math_h}" HAVE_LOG1PF) check_symbol_exists (lrintf "${_math_h}" HAVE_LRINTF) check_symbol_exists (llrintf "${_math_h}" HAVE_LLRINTF) check_symbol_exists (powf "${_math_h}" HAVE_POWF) check_symbol_exists (rintf "${_math_h}" HAVE_RINTF) check_symbol_exists (sinf "${_math_h}" HAVE_SINF) check_symbol_exists (sinhf "${_math_h}" HAVE_SINHF) check_symbol_exists (sqrtf "${_math_h}" HAVE_SQRTF) check_symbol_exists (tanf "${_math_h}" HAVE_TANF) check_symbol_exists (tanhf "${_math_h}" HAVE_TANHF) if (WIN32) check_symbol_exists (_copysign "${_math_h}" HAVE__COPYSIGN) check_symbol_exists (_finite "${_math_h}" HAVE__FINITE) check_symbol_exists (_fpclass "${_math_h}" HAVE__FPCLASS) check_symbol_exists (_isnan "${_math_h}" HAVE__ISNAN) endif (WIN32) # test if sincos is buggy if (HAVE_SINCOS) check_c_source_runs ( " #define _GNU_SOURCE #define __EXTENSIONS__ include int main () { double s = 0.1, c = 0.2; double s1, c1; s1 = s; c1 = c; sincos (0.5, &s, &c); return !(s == s1 || c == c1);} /* return TRUE if sincos works ok */ " HAVE_BUGGY_SINCOS) if (HAVE_BUGGY_SINCOS) set (HAVE_SINCOS "" CACHE INTERNAL "disable sincos because it is buggy" FORCE) endif (HAVE_BUGGY_SINCOS) endif (HAVE_SINCOS) # restore state of CMAKE_REQUIRED_* cmake_pop_check_state() #check_symbol_exists (intptr_t "stdint.h" HAVE_STDINT_H_WITH_INTPTR) #check_symbol_exists (intptr_t "unistdint.h" HAVE_UNISTD_H_WITH_INTPTR) #check_function_exists (__argz_count HAVE___ARGZ_COUNT) #check_function_exists (__argz_next HAVE___ARGZ_NEXT) #check_function_exists (__argz_stringify HAVE___ARGZ_STRINGIFY) #check_function_exists (__fsetlocking HAVE___FSETLOCKING) #check_function_exists (_close HAVE__CLOSE) #check_function_exists (_dyld_func_lookup HAVE_DYLD) #check_function_exists (_open HAVE__OPEN) #check_function_exists (_pclose HAVE__PCLOSE) #check_function_exists (_popen HAVE__POPEN) #check_function_exists (argz_append HAVE_ARGZ_APPEND) #check_function_exists (argz_create_sep HAVE_ARGZ_CREATE_SEP ) #check_function_exists (argz_insert HAVE_ARGZ_INSERT ) #check_function_exists (argz_next HAVE_ARGZ_NEXT) #check_function_exists (argz_stringify HAVE_ARGZ_STRINGIFY ) #check_function_exists (chmod HAVE_CHMOD) #check_function_exists (clock_gettime HAVE_CLOCK_GETTIME) #check_function_exists (close HAVE_CLOSE) #check_function_exists (dcgettext HAVE_DCGETTEXT) #check_function_exists (dladdr HAVE_DLADDR) #check_function_exists (dlerror HAVE_DLERROR) #check_function_exists (getcwd HAVE_GETCWD) #check_function_exists (getegid HAVE_GETEGID) #check_function_exists (getgid HAVE_GETGID) #check_function_exists (gethrtime HAVE_GETHRTIME) #check_function_exists (getpagesize HAVE_GETPAGESIZE) #check_function_exists (gettext HAVE_GETTEXT) #check_function_exists (getuid HAVE_GETUID) #check_function_exists (getwd HAVE_GETWD) #check_function_exists (index HAVE_INDEX) #check_function_exists (mach_absolute_time HAVE_MACH_ABSOLUTE_TIME) #check_function_exists (mempcpy HAVE_MEMPCPY) #check_function_exists (mkfifo HAVE_MKFIFO) #check_function_exists (mkstemp HAVE_MKSTEMP) #check_function_exists (mktemp HAVE_MKTEMP) #check_function_exists (mktime HAVE_MKTIME) #check_function_exists (mmap HAVE_MMAP) #check_function_exists (open HAVE_OPEN) #check_function_exists (opendir HAVE_OPENDIR) #check_function_exists (pclose HAVE_PCLOSE) #check_function_exists (popen HAVE_POPEN) #check_function_exists (putenv HAVE_PUTENV) #check_function_exists (read_real_time HAVE_READ_REAL_TIME) #check_function_exists (readdir HAVE_READDIR) #check_function_exists (setlocale HAVE_SETLOCALE) #check_function_exists (shl_load HAVE_SHL_LOAD) #check_function_exists (stpcpy HAVE_STPCPY) #check_function_exists (strcasecmp HAVE_STRCASECMP) #check_function_exists (strcoll HAVE_STRCOLL) #check_function_exists (strcspn HAVE_STRCSPN) #check_function_exists (strcspn HAVE_STRERROR) #check_function_exists (strdup HAVE_STRDUP) #check_function_exists (strerror HAVE_STRERROR) #check_function_exists (strftime HAVE_STRFTIME) #check_function_exists (strlcat HAVE_STRLCAT) #check_function_exists (strlcpy HAVE_STRLCPY) #check_function_exists (strspn HAVE_STRSPN) #check_function_exists (strstr HAVE_STRSTR) #check_function_exists (strtod HAVE_STRTOD) #check_function_exists (strtol HAVE_STRTOL) #check_function_exists (strtoul HAVE_STRTOUL) #check_function_exists (time_base_to_time HAVE_TIME_BASE_TO_TIME) #check_function_exists (tsearch HAVE_TSEARCH) #check_function_exists (vprintf HAVE_VPRINTF ) #check_function_exists (wcslen HAVE_WCSLEN) #check_include_file (argz.h HAVE_ARGZ_H) #check_include_file (c_asm.h HAVE_C_ASM_H) #check_include_file (dl.h HAVE_DL_H) #check_include_file (dlfcn.h HAVE_DLADDR ) #check_include_file (dlfcn.h HAVE_DLFCN_H) #check_include_file (ffi.h HAVE_FFI_H) #check_include_file (intrinsics.h HAVE_INTRINSICS_H) #check_include_file (sys/time.h have_hrtime_t) #check_include_file (mach-o/dyld.h HAVE_MACH_O_DYLD_H ) #check_include_file (mach/mach_time.h HAVE_MACH_MACH_TIME_H) #check_include_file (machine/endian.h HAVE_MACHINE_ENDIAN_H_) #check_include_file (argz.h HAVE_ARGZ_H) #check_include_file (io.h HAVE_IO_H) #check_include_file (limits.h HAVE_LIMITS_H) #check_include_file (locale.h HAVE_LOCALE_H) #check_include_file (memory.h HAVE_MEMORY_H) #check_include_file (ndir.h HAVE_NDIR_H) #check_include_file (pthread.h HAVE_PTHREAD_H) #check_include_file (stdlib.h HAVE_STDLIB_H) #check_include_file (string.h HAVE_STRING_H) #check_include_file (strings.h HAVE_STRINGS_H) #check_include_file (sys/dl.h HAVE_SYS_DL_H ) #check_include_file (sys/socket.h HAVE_SYS_SOCKET_H) #check_include_file (sys/stat.h HAVE_SYS_STAT_H ) #check_include_file (sys/stat.h HAVE_SYS_STAT_H) #check_include_file (sys/time.h HAVE_SYS_TIME_H ) #check_include_file (sys/time.h HAVE_SYS_TIME_H) #check_include_file (sys/types.h HAVE_SYS_TYPES_H ) #check_include_file (sys/types.h HAVE_SYS_TYPES_H) #check_include_file (sys/utime.h HAVE_SYS_UTIME_H) #check_include_file (utime.h HAVE_UTIME_H) #check_library_exists (dl dl "/lib;/usr/lib;/usr/local/lib;/usr/pkg/lib" HAVE_LIBDL) #check_symbol_exists (LC_MESSAGES "locale.h" HAVE_LC_MESSAGES) #check_symbol_exists (asprintf "stdio.h" HAVE_ASPRINTF) #check_symbol_exists (intmax_t "inttypes.h" HAVE_INTTYPES_H_WITH_UINTMAX) #check_symbol_exists (pid_t "sys/types.h" HAVE_PID_T) #check_symbol_exists (printf "stdio.h" HAVE_POSIX_PRINTF) #check_symbol_exists (uintmax_t "stdint.h" HAVE_STDINT_H_WITH_UINTMAX) #check_symbol_exists (wprintf "stdio.h" HAVE_WPRINTF) #check_type_size ("long double" SIZEOF_LONG_DOUBLE) #check_type_size ("long long" SIZEOF_LONG_LONG) #check_type_size (char SIZEOF_CHAR) #check_type_size (double SIZEOF_DOUBLE) #check_type_size (float SIZEOF_FLOAT) #check_type_size (int SIZEOF_INT) #check_type_size (long SIZEOF_LONG) #check_type_size (short SIZEOF_SHORT) if (NOT DEFINED STDC_HEADERS) message (STATUS "Checking whether system has ANSI C header files") check_include_files ("stdlib.h;stdarg.h;string.h;float.h" StandardHeadersExist) if (StandardHeadersExist) check_prototype_exists (memchr string.h memchrExists) if (memchrExists) check_prototype_exists (free stdlib.h freeExists) if (freeExists) #include (TestForHighBitCharacters) #if (CMAKE_HIGH_BIT_CHARACTERS) message (STATUS "ANSI C header files - found") set (STDC_HEADERS 1 CACHE INTERNAL "System has ANSI C header files") #endif (CMAKE_HIGH_BIT_CHARACTERS) endif (freeExists) endif (memchrExists) endif (StandardHeadersExist) if (NOT STDC_HEADERS) message (STATUS "ANSI C header files - not found") set (STDC_HEADERS 0 CACHE INTERNAL "System has ANSI C header files") endif (NOT STDC_HEADERS) endif (NOT DEFINED STDC_HEADERS) # Define to 1 if you can safely include both and #if (HAVE_SYS_TIME_H) # check_include_files ("sys/time.h;time.h" TIME_WITH_SYS_TIME) #else (HAVE_SYS_TIME_H) # set (TIME_WITH_SYS_TIME 0) #endif (HAVE_SYS_TIME_H) # Define to 1 if your declares `struct tm'. */ #check_type_exists ("struct tm" sys/time.h TM_IN_SYS_TIME) #check_cxx_source_compiles ( # " # #include # using std::count; # int countChar(char * b, char * e, char const c) # { # return count (b, e, c); # } # int main (){return 0;} # " #HAVE_STD_COUNT) #check_cxx_source_compiles ( # " # #include # using std::tolower; # int main (){return 0;} # " #CXX_GLOBAL_CSTD) # check_c_source_compiles ( # " # #include # // this declaration will fail when there already exists a non const char** version which returns size_t # double iconv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); # int main () { return 0; } # " # HAVE_ICONV_CONST) # # check_c_source_compiles ( # " # #include # int i[ ( sizeof(wchar_t)==2 ? 1 : -1 ) ]; # int main (){return 0;} # " # SIZEOF_WCHAR_T_IS_2) # # check_c_source_compiles ( # " # #include # int i[ ( sizeof(wchar_t)==4 ? 1 : -1 ) ]; # int main (){return 0;} # " # SIZEOF_WCHAR_T_IS_4) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/snaphu/man/000755 015705 000000 00000000000 13505462014 015612 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/snaphu/config/000755 015705 000000 00000000000 13505462013 016303 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/snaphu/README000644 015705 000000 00000010761 13505462014 015724 0ustar00sandwellwheel000000 000000 SNAPHU Statistical-Cost, Netowrk-Flow Algorithm for Phase Unwrapping Author: Curtis W. Chen Version 1.4.2, January 2003 Contents -------- 1. Bugs and Bug Reporting 2. Notes on Compiling 3. Run-Time Configuration Files 4. Copyright Bugs And Bug Reporting ---------------------- Not all parts of snaphu have been well tested, so your bug reports and feedback are appreciated. Please email them to curtis@nova.stanford.edu The man page included with the distribution lists known issues as well. Thanks, and good luck with the unwrapping. Notes on Compiling ------------------ To compile, edit the Makefile in the src directory to specify your compiler, the optimization flags, and the desired directory for the executable. After that, run make and see what happens. Most of the code should be pretty standard, but a few of the library functions that are used may be unavailable on some systems. In some cases, the problem code may only perform error checking, so you might be able to comment out the unavailable functions without ill effects. For example, the IsFinite() function in snaphu_util.c is a wrapper for calling the library function finite(), which is unavailable on some systems. You can modify IsFinite() to use an alternate implementation that you do have, or you can have it always return TRUE. The code was developed mainly with gcc, but has been tested with a number of vendor C compilers. The latter tend to produce faster executables. I have not experimented with parallelizing compilers. The code is written to use multiple processors in tile mode by forking copies of itself to unwrap each tile. The structure of the solver does not lend itself to easy parallelization for a single tile, however. The CS2 MCF solver module is governed by the terms of the original authors (see the README.copyright file). In order to compile snaphu without this module, specify -D NO_CS2 as a compiler option in the Makefile. Run-Time Configuration Files ---------------------------- Two template run-time configuration files are provided in the config directory. The file snaphu.conf.brief contains the configuration parameters that a beginning user might need to specify. The file snaphu.conf.full contains all the options that the program will accept. Copyright --------- Copyright 2002 Board of Trustees, Leland Stanford Jr. University Except as noted below, permission to use, copy, modify, and distribute, this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of the copyright holders be used in advertising or publicity pertaining to distribution of the software with specific, written prior permission, and that no fee is charged for further distribution of this software, or any modifications thereof. The copyright holder makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, PROFITS, QPA OR GPA, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. The parts of this software derived from the CS2 minimum cost flow solver written by A. V. Goldberg and B. Cherkassky are governed by the terms of the copyright holder of that software. Permission has been granted to use and distrubute that software for strictly noncommercial purposes as part of this package, provided that the following copyright notice from the original distribution and URL accompany the software: COPYRIGHT C 1995 IG Systems, Inc. Permission to use for evaluation purposes is granted provided that proper acknowledgments are given. For a commercial licence, contact igsys@eclipse.net. This software comes with NO WARRANTY, expressed or implied. By way of example, but not limitation, we make no representations of warranties of merchantability or fitness for any particular purpose or that the use of the software components or documentation will not infringe any patents, copyrights, trademarks, or other rights. http://www.igsystems.com/cs2 GMTSAR_V5.7/snaphu/src/000755 015705 000000 00000000000 13507242234 015630 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/snaphu/src/snaphu_cs2types.h000644 015705 000000 00000004566 13505462014 021144 0ustar00sandwellwheel000000 000000 /************************************************************************* This code is derived from cs2 v3.7 Written by Andrew V. Goldberg and Boris Cherkassky Modifications for use in snaphu by Curtis W. Chen Header for cs2 minimum cost flow solver. This file is included with a #include from snaphu_cs2.c. The cs2 code is used here with permission for strictly noncommerical use. The original cs2 source code can be downloaded from http://www.igsystems.com/cs2 The original cs2 copyright is stated as follows: COPYRIGHT C 1995 IG Systems, Inc. Permission to use for evaluation purposes is granted provided that proper acknowledgments are given. For a commercial licence, contact igsys@eclipse.net. This software comes with NO WARRANTY, expressed or implied. By way of example, but not limitation, we make no representations of warranties of merchantability or fitness for any particular purpose or that the use of the software components or documentation will not infringe any patents, copyrights, trademarks, or other rights. Copyright 2002 Board of Trustees, Leland Stanford Jr. University *************************************************************************/ /* defs.h */ typedef long excess_t; typedef /* arc */ struct arc_st { short r_cap; /* residual capasity */ short cost; /* cost of the arc*/ struct node_st *head; /* head node */ struct arc_st *sister; /* opposite arc */ } arc; typedef /* node */ struct node_st { arc *first; /* first outgoing arc */ arc *current; /* current outgoing arc */ arc *suspended; double price; /* distance from a sink */ struct node_st *q_next; /* next node in push queue */ struct node_st *b_next; /* next node in bucket-list */ struct node_st *b_prev; /* previous node in bucket-list */ long rank; /* bucket number */ excess_t excess; /* excess of the node */ signed char inp; /* temporary number of input arcs */ } node; typedef /* bucket */ struct bucket_st { node *p_first; /* 1st node with positive excess or simply 1st node in the buket */ } bucket; GMTSAR_V5.7/snaphu/src/snaphu_solver.c000644 015705 000000 00000203417 13505462014 020671 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu network-flow solver source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* function: TreeSolve() * --------------------- * Solves the nonlinear network optimization problem. */ long TreeSolve(nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, nodeT *source, candidateT **candidatelistptr, candidateT **candidatebagptr, long *candidatelistsizeptr, long *candidatebagsizeptr, bucketT *bkts, short **flows, void **costs, incrcostT **incrcosts, nodeT ***apexes, signed char **iscandidate, long ngroundarcs, long nflow, float **mag, float **wrappedphase, char *outfile, long nnoderow, short *nnodesperrow, long narcrow, short *narcsperrow, long nrow, long ncol, outfileT *outfiles, paramT *params){ long i, row, col, arcrow, arccol, arcdir, arcnum, upperarcnum; long arcrow1, arccol1, arcdir1, arcrow2, arccol2, arcdir2; long treesize, candidatelistsize, candidatebagsize; long violation, groupcounter, fromgroup, group1, apexlistbase, apexlistlen; long cyclecost, outcostto, startlevel, dlevel, doutcost, dincost; long candidatelistlen, candidatebagnext; long inondegen, ipivots, nnodes, nnewnodes, maxnewnodes, templong; signed char fromside; candidateT *candidatelist, *candidatebag, *tempcandidateptr; nodeT *from, *to, *cycleapex, *node1, *node2, *leavingparent, *leavingchild; nodeT *root, *mntpt, *oldmntpt, *skipthread, *tempnode1, *tempnode2; nodeT *firstfromnode, *firsttonode; nodeT **apexlist; float **unwrappedphase; /* dereference some pointers and store as local variables */ candidatelist=(*candidatelistptr); candidatebag=(*candidatebagptr); candidatelistsize=(*candidatelistsizeptr); candidatebagsize=(*candidatebagsizeptr); candidatelistlen=0; candidatebagnext=0; /* set up */ bkts->curr=bkts->maxind; nnodes=InitTree(source,nodes,nodesupp,ground,ngroundarcs,bkts,nflow, incrcosts,apexes,iscandidate,nnoderow,nnodesperrow, narcrow,narcsperrow,nrow,ncol,params); apexlistlen=INITARRSIZE; apexlist=MAlloc(apexlistlen*sizeof(nodeT *)); groupcounter=2; ipivots=0; inondegen=0; maxnewnodes=ceil(nnodes*params->maxnewnodeconst); nnewnodes=0; treesize=1; fprintf(sp3,"Treesize: %-10ld Pivots: %-11ld Improvements: %-11ld", treesize,ipivots,inondegen); /* loop over each entering node (note, source already on tree) */ while(treesizepred; /* add new node to the tree */ GetArc(from,to,&arcrow,&arccol,&arcdir,nrow,ncol,nodesupp); to->group=1; to->level=from->level+1; to->incost=from->incost+GetCost(incrcosts,arcrow,arccol,-arcdir); to->next=from->next; to->prev=from; to->next->prev=to; from->next=to; /* scan new node's neighbors */ from=to; if(from->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumgroup>0){ if(to!=from->pred){ cycleapex=FindApex(from,to); apexes[arcrow][arccol]=cycleapex; CheckArcReducedCost(from,to,cycleapex,arcrow,arccol,arcdir,nflow, nodes,ground,&candidatebag,&candidatebagnext, &candidatebagsize,incrcosts,iscandidate, params); }else{ apexes[arcrow][arccol]=NULL; } }else{ /* if to is not on tree, update outcost and add to bucket */ AddNewNode(from,to,arcdir,bkts,nflow,incrcosts,arcrow,arccol,params); } } nnewnodes++; treesize++; } /* keep looping until no more arcs have negative reduced costs */ while(candidatebagnext){ /* if we received SIGINT or SIGHUP signal, dump results */ /* keep this stuff out of the signal handler so we don't risk */ /* writing a non-feasible solution (ie, if signal during augment) */ /* signal handler disabled for all but primary (grid) networks */ if(dumpresults_global){ fprintf(sp0,"\n\nDumping current solution to file %s\n", outfile); if(requestedstop_global){ Free2DArray((void **)costs,2*nrow-1); } unwrappedphase=(float **)Get2DMem(nrow,ncol,sizeof(float *), sizeof(float)); IntegratePhase(wrappedphase,unwrappedphase,flows,nrow,ncol); FlipPhaseArraySign(unwrappedphase,params,nrow,ncol); WriteOutputFile(mag,unwrappedphase,outfiles->outfile,outfiles, nrow,ncol); if(requestedstop_global){ fprintf(sp0,"Program exiting\n"); exit(ABNORMAL_EXIT); } Free2DArray((void **)unwrappedphase,nrow); dumpresults_global=FALSE; fprintf(sp0,"\n\nProgram continuing\n"); } /* swap candidate bag and candidate list pointers and sizes */ tempcandidateptr=candidatebag; candidatebag=candidatelist; candidatelist=tempcandidateptr; templong=candidatebagsize; candidatebagsize=candidatelistsize; candidatelistsize=templong; candidatelistlen=candidatebagnext; candidatebagnext=0; /* sort candidate list by violation, with augmenting arcs always first */ qsort((void *)candidatelist,candidatelistlen,sizeof(candidateT), CandidateCompare); /* set all arc directions to be plus/minus 1 */ for(i=0;i1){ candidatelist[i].arcdir=1; }else if(candidatelist[i].arcdir<-1){ candidatelist[i].arcdir=-1; } } /* this doesn't seem to make it any faster, so just do all of them */ /* set the number of candidates to process */ /* (must change candidatelistlen to ncandidates in for loop below) */ /* maxcandidates=MAXCANDIDATES; if(maxcandidates>candidatelistlen){ ncandidates=candidatelistlen; }else{ ncandidates=maxcandidates; } */ /* now pivot for each arc in the candidate list */ for(i=0;ioutcost+ GetCost(incrcosts,arcrow,arccol,arcdir); cyclecost=outcostto + to->incost -apexes[arcrow][arccol]->outcost -apexes[arcrow][arccol]->incost; /* if violation no longer negative, check reverse arc */ if(!((outcostto < to->outcost) || (cyclecost < 0))){ from=to; to=candidatelist[i].from; arcdir=-arcdir; outcostto=from->outcost+ GetCost(incrcosts,arcrow,arccol,arcdir); cyclecost=outcostto + to->incost -apexes[arcrow][arccol]->outcost -apexes[arcrow][arccol]->incost; } /* see if the cycle is negative (see if there is a violation) */ if((outcostto < to->outcost) || (cyclecost < 0)){ /* make sure the group counter hasn't gotten too big */ if(++groupcounter>MAXGROUPBASE){ for(row=0;row0){ nodes[row][col].group=1; } } } if(ground!=NULL && ground->group>0){ ground->group=1; } groupcounter=2; } /* if augmenting cycle (nondegenerate pivot) */ if(cyclecost<0){ /* augment flow along cycle and select leaving arc */ /* if we are augmenting non-zero flow, any arc with zero flow */ /* after the augmentation is a blocking arc */ while(TRUE){ fromside=TRUE; node1=from; node2=to; leavingchild=NULL; flows[arcrow][arccol]+=arcdir*nflow; ReCalcCost(costs,incrcosts,flows[arcrow][arccol],arcrow,arccol, nflow,nrow,params); violation=GetCost(incrcosts,arcrow,arccol,arcdir); if(node1->level > node2->level){ while(node1->level != node2->level){ GetArc(node1->pred,node1,&arcrow1,&arccol1,&arcdir1, nrow,ncol,nodesupp); flows[arcrow1][arccol1]+=(arcdir1*nflow); ReCalcCost(costs,incrcosts,flows[arcrow1][arccol1], arcrow1,arccol1,nflow,nrow,params); if(leavingchild==NULL && !flows[arcrow1][arccol1]){ leavingchild=node1; } violation+=GetCost(incrcosts,arcrow1,arccol1,arcdir1); node1->group=groupcounter+1; node1=node1->pred; } }else{ while(node1->level != node2->level){ GetArc(node2->pred,node2,&arcrow2,&arccol2,&arcdir2, nrow,ncol,nodesupp); flows[arcrow2][arccol2]-=(arcdir2*nflow); ReCalcCost(costs,incrcosts,flows[arcrow2][arccol2], arcrow2,arccol2,nflow,nrow,params); if(!flows[arcrow2][arccol2]){ leavingchild=node2; fromside=FALSE; } violation+=GetCost(incrcosts,arcrow2,arccol2,-arcdir2); node2->group=groupcounter; node2=node2->pred; } } while(node1!=node2){ GetArc(node1->pred,node1,&arcrow1,&arccol1,&arcdir1,nrow,ncol, nodesupp); GetArc(node2->pred,node2,&arcrow2,&arccol2,&arcdir2,nrow,ncol, nodesupp); flows[arcrow1][arccol1]+=(arcdir1*nflow); flows[arcrow2][arccol2]-=(arcdir2*nflow); ReCalcCost(costs,incrcosts,flows[arcrow1][arccol1], arcrow1,arccol1,nflow,nrow,params); ReCalcCost(costs,incrcosts,flows[arcrow2][arccol2], arcrow2,arccol2,nflow,nrow,params); violation+=(GetCost(incrcosts,arcrow1,arccol1,arcdir1) +GetCost(incrcosts,arcrow2,arccol2,-arcdir2)); if(!flows[arcrow2][arccol2]){ leavingchild=node2; fromside=FALSE; }else if(leavingchild==NULL && !flows[arcrow1][arccol1]){ leavingchild=node1; } node1->group=groupcounter+1; node2->group=groupcounter; node1=node1->pred; node2=node2->pred; } if(violation>=0){ break; } } inondegen++; }else{ /* We are not augmenting flow, but just updating potentials. */ /* Arcs with zero flow are implicitly directed upwards to */ /* maintain a strongly feasible spanning tree, so arcs with zero */ /* flow on the path between to node and apex are blocking arcs. */ /* Leaving arc is last one whose child's new outcost is less */ /* than its old outcost. Such an arc must exist, or else */ /* we'd be augmenting flow on a negative cycle. */ /* trace the cycle and select leaving arc */ fromside=FALSE; node1=from; node2=to; leavingchild=NULL; if(node1->level > node2->level){ while(node1->level != node2->level){ node1->group=groupcounter+1; node1=node1->pred; } }else{ while(node1->level != node2->level){ if(outcostto < node2->outcost){ leavingchild=node2; GetArc(node2->pred,node2,&arcrow2,&arccol2,&arcdir2, nrow,ncol,nodesupp); outcostto+=GetCost(incrcosts,arcrow2,arccol2,-arcdir2); }else{ outcostto=VERYFAR; } node2->group=groupcounter; node2=node2->pred; } } while(node1!=node2){ if(outcostto < node2->outcost){ leavingchild=node2; GetArc(node2->pred,node2,&arcrow2,&arccol2,&arcdir2,nrow,ncol, nodesupp); outcostto+=GetCost(incrcosts,arcrow2,arccol2,-arcdir2); }else{ outcostto=VERYFAR; } node1->group=groupcounter+1; node2->group=groupcounter; node1=node1->pred; node2=node2->pred; } } cycleapex=node1; /* set leaving parent */ if(leavingchild==NULL){ fromside=TRUE; leavingparent=from; }else{ leavingparent=leavingchild->pred; } /* swap from and to if leaving arc is on the from side */ if(fromside){ groupcounter++; fromgroup=groupcounter-1; tempnode1=from; from=to; to=tempnode1; }else{ fromgroup=groupcounter+1; } /* if augmenting pivot */ if(cyclecost<0){ /* find first child of apex on either cycle path */ firstfromnode=NULL; firsttonode=NULL; if(cycleapex->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumgroup==groupcounter && apexes[arcrow][arccol]==NULL){ firsttonode=tempnode1; if(firstfromnode!=NULL){ break; } }else if(tempnode1->group==fromgroup && apexes[arcrow][arccol]==NULL){ firstfromnode=tempnode1; if(firsttonode!=NULL){ break; } } } /* update potentials, mark stationary parts of tree */ cycleapex->group=groupcounter+2; if(firsttonode!=NULL){ NonDegenUpdateChildren(cycleapex,leavingparent,firsttonode,0, ngroundarcs,nflow,nodes,nodesupp,ground, apexes,incrcosts,nrow,ncol,params); } if(firstfromnode!=NULL){ NonDegenUpdateChildren(cycleapex,from,firstfromnode,1, ngroundarcs,nflow,nodes,nodesupp,ground, apexes,incrcosts,nrow,ncol,params); } groupcounter=from->group; apexlistbase=cycleapex->group; /* children of cycleapex are not marked, so we set fromgroup */ /* equal to cycleapex group for use with apex updates below */ /* all other children of cycle will be in apexlist if we had an */ /* augmenting pivot, so fromgroup only important for cycleapex */ fromgroup=cycleapex->group; }else{ /* set this stuff for use with apex updates below */ cycleapex->group=fromgroup; groupcounter+=2; apexlistbase=groupcounter+1; } /* remount subtree at new mount point */ if(leavingchild==NULL){ skipthread=to; }else{ root=from; oldmntpt=to; /* for each node on the path from to node to leaving child */ while(oldmntpt!=leavingparent){ /* remount the subtree at the new mount point */ mntpt=root; root=oldmntpt; oldmntpt=root->pred; root->pred=mntpt; GetArc(mntpt,root,&arcrow,&arccol,&arcdir,nrow,ncol,nodesupp); /* calculate differences for updating potentials and levels */ dlevel=mntpt->level-root->level+1; doutcost=mntpt->outcost - root->outcost + GetCost(incrcosts,arcrow,arccol,arcdir); dincost=mntpt->incost - root->incost + GetCost(incrcosts,arcrow,arccol,-arcdir); /* update all children */ /* group of each remounted tree used to reset apexes below */ node1=root; startlevel=root->level; groupcounter++; while(TRUE){ /* update the level, potentials, and group of the node */ node1->level+=dlevel; node1->outcost+=doutcost; node1->incost+=dincost; node1->group=groupcounter; /* break when node1 is no longer descendent of the root */ if(node1->next->level <= startlevel){ break; } node1=node1->next; } /* update threads */ root->prev->next=node1->next; node1->next->prev=root->prev; node1->next=mntpt->next; mntpt->next->prev=node1; mntpt->next=root; root->prev=mntpt; } skipthread=node1->next; /* reset apex pointers for entering and leaving arcs */ GetArc(from,to,&arcrow,&arccol,&arcdir,nrow,ncol,nodesupp); apexes[arcrow][arccol]=NULL; GetArc(leavingparent,leavingchild,&arcrow,&arccol, &arcdir,nrow,ncol,nodesupp); apexes[arcrow][arccol]=cycleapex; /* make sure we have enough memory for the apex list */ if(groupcounter-apexlistbase+1>apexlistlen){ apexlistlen=1.5*(groupcounter-apexlistbase+1); apexlist=ReAlloc(apexlist,apexlistlen*sizeof(nodeT *)); } /* set the apex list */ node2=leavingchild; for(group1=groupcounter;group1>=apexlistbase;group1--){ apexlist[group1-apexlistbase]=node2; node2=node2->pred; } /* reset apex pointers on remounted tree */ /* only nodes which are in different groups need new apexes */ node1=to; startlevel=to->level; while(TRUE){ /* loop over outgoing arcs */ if(node1->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumgroup>0){ /* if node2 is either not part of remounted tree or */ /* it is higher on remounted tree than node1, */ /* and arc isn't already on tree */ if(node2->group < node1->group && apexes[arcrow][arccol]!=NULL){ /* if new apex in apexlist */ /* node2 on remounted tree, if nonaugmenting pivot */ if(node2->group >= apexlistbase){ apexes[arcrow][arccol]=apexlist[node2->group -apexlistbase]; }else{ /* if old apex below level of cycleapex, */ /* node2 is on "to" node's side of tree */ /* implicitly, if old apex above cycleapex, */ /* we do nothing since apex won't change */ if(apexes[arcrow][arccol]->level > cycleapex->level){ /* since new apex not in apexlist (tested above), */ /* node2 above leaving arc so new apex is cycleapex */ apexes[arcrow][arccol]=cycleapex; }else{ /* node2 not on "to" side of tree */ /* if old apex is cycleapex, node2 is on "from" side */ if(apexes[arcrow][arccol]==cycleapex){ /* new apex will be on cycle, so trace node2->pred */ /* until we hit a node with group==fromgroup */ tempnode2=node2; while(tempnode2->group != fromgroup){ tempnode2=tempnode2->pred; } apexes[arcrow][arccol]=tempnode2; } } } /* check outgoing arcs for negative reduced costs */ CheckArcReducedCost(node1,node2,apexes[arcrow][arccol], arcrow,arccol,arcdir,nflow,nodes, ground,&candidatebag, &candidatebagnext,&candidatebagsize, incrcosts,iscandidate,params); } /* end if node2 below node1 and arc not on tree */ }else{ /* node2 is not on tree, so put it in correct bucket */ AddNewNode(node1,node2,arcdir,bkts,nflow,incrcosts, arcrow,arccol,params); } /* end if node2 on tree */ } /* end loop over node1 outgoing arcs */ /* move to next node in thread, break if we left the subtree */ node1=node1->next; if(node1->level <= startlevel){ break; } } } /* end if leavingchild!=NULL */ /* if we had an augmenting cycle */ /* we need to check outarcs from descendents of any cycle node */ /* (except apex, since apex potentials don't change) */ if(cyclecost<0){ /* check descendents of cycle children of apex */ while(TRUE){ /* firstfromnode, firsttonode may have changed */ if(firstfromnode!=NULL && firstfromnode->pred==cycleapex){ node1=firstfromnode; firstfromnode=NULL; }else if(firsttonode!=NULL && firsttonode->pred==cycleapex){ node1=firsttonode; firsttonode=NULL; }else{ break; } startlevel=node1->level; /* loop over all descendents */ while(TRUE){ /* loop over outgoing arcs */ if(node1->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumgroup>0){ if(apexes[arcrow][arccol]!=NULL && (node2->group!=node1->group || node1->group==apexlistbase)){ CheckArcReducedCost(node1,node2,apexes[arcrow][arccol], arcrow,arccol,arcdir,nflow,nodes, ground,&candidatebag, &candidatebagnext,&candidatebagsize, incrcosts,iscandidate,params); } }else{ AddNewNode(node1,node2,arcdir,bkts,nflow,incrcosts, arcrow,arccol,params); } } /* move to next node in thread, break if left the subtree */ /* but skip the remounted tree, since we checked it above */ node1=node1->next; if(node1==to){ node1=skipthread; } if(node1->level <= startlevel){ break; } } } } ipivots++; } /* end if cyclecost<0 || outcosttooutcost */ } /* end of for loop over candidates in list */ /* this is needed only if we don't process all candidates above */ /* copy remaining candidates into candidatebag */ /* while(candidatebagnext+(candidatelistlen-ncandidates)>candidatebagsize){ candidatebagsize+=CANDIDATEBAGSTEP; candidatebag=ReAlloc(candidatebag,candidatebagsize*sizeof(candidateT)); } for(i=ncandidates;ioutcost +GetCost(incrcosts,arcrow,arccol,arcdir); if(newoutcostoutcost || to->pred==from){ if(to->group==-1){ /* if to is already in a bucket */ if(to->outcostmaxind){ if(to->outcost>bkts->minind){ BucketRemove(to,to->outcost,bkts); }else{ BucketRemove(to,bkts->minind,bkts); } }else{ BucketRemove(to,bkts->maxind,bkts); } } to->outcost=newoutcost; to->pred=from; if(newoutcostmaxind){ if(newoutcost>bkts->minind){ BucketInsert(to,newoutcost,bkts); if(newoutcostcurr){ bkts->curr=newoutcost; } }else{ BucketInsert(to,bkts->minind,bkts); bkts->curr=bkts->minind; } }else{ BucketInsert(to,bkts->maxind,bkts); } to->group=-1; } } /* function: CheckArcReducedCost() * ------------------------------- * Given a from and to node, checks for negative reduced cost, and adds * the arc to the entering arc candidate bag if one is found. */ void CheckArcReducedCost(nodeT *from, nodeT *to, nodeT *apex, long arcrow, long arccol, long arcdir, long nflow, nodeT **nodes, nodeT *ground, candidateT **candidatebagptr, long *candidatebagnextptr, long *candidatebagsizeptr, incrcostT **incrcosts, signed char **iscandidate, paramT *params){ long apexcost, fwdarcdist, revarcdist, violation; nodeT *temp; /* do nothing if already candidate */ /* illegal corner arcs have iscandidate=TRUE set ahead of time */ if(iscandidate[arcrow][arccol]){ return; } /* set the apex cost */ apexcost=apex->outcost+apex->incost; /* check forward arc */ fwdarcdist=GetCost(incrcosts,arcrow,arccol,arcdir); violation=fwdarcdist+from->outcost+to->incost-apexcost; if(violation<0){ arcdir*=2; /* magnitude 2 for sorting */ }else{ revarcdist=GetCost(incrcosts,arcrow,arccol,-arcdir); violation=revarcdist+to->outcost+from->incost-apexcost; if(violation<0){ arcdir*=-2; /* magnitude 2 for sorting */ temp=from; from=to; to=temp; }else{ violation=fwdarcdist+from->outcost-to->outcost; if(violation>=0){ violation=revarcdist+to->outcost-from->outcost; if(violation<0){ arcdir=-arcdir; temp=from; from=to; to=temp; } } } } /* see if we have a violation, and if so, add arc to candidate bag */ if(violation<0){ if((*candidatebagnextptr)>=(*candidatebagsizeptr)){ (*candidatebagsizeptr)+=CANDIDATEBAGSTEP; (*candidatebagptr)=ReAlloc(*candidatebagptr, (*candidatebagsizeptr)*sizeof(candidateT)); } (*candidatebagptr)[*candidatebagnextptr].violation=violation; (*candidatebagptr)[*candidatebagnextptr].from=from; (*candidatebagptr)[*candidatebagnextptr].to=to; (*candidatebagptr)[*candidatebagnextptr].arcrow=arcrow; (*candidatebagptr)[*candidatebagnextptr].arccol=arccol; (*candidatebagptr)[*candidatebagnextptr].arcdir=arcdir; (*candidatebagnextptr)++; iscandidate[arcrow][arccol]=TRUE; } } /* function: InitTree() * -------------------- */ long InitTree(nodeT *source, nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, long ngroundarcs, bucketT *bkts, long nflow, incrcostT **incrcosts, nodeT ***apexes, signed char **iscandidate, long nnoderow, short *nnodesperrow, long narcrow, short *narcsperrow, long nrow, long ncol, paramT *params){ long row, col, arcnum, upperarcnum, arcrow, arccol, arcdir, nnodes; nodeT *to; /* loop over each node and initialize values */ nnodes=0; for(row=0;rowgroup=0; ground->outcost=VERYFAR; ground->pred=NULL; nnodes++; } /* initialize arcs */ for(row=0;rowgroup=1; source->outcost=0; source->incost=0; source->pred=NULL; source->prev=source; source->next=source; source->level=0; /* loop over outgoing arcs and add to buckets */ if(source->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumlevel > to->level){ while(from->level != to->level){ from=from->pred; } }else{ while(from->level != to->level){ to=to->pred; } } while(from != to){ from=from->pred; to=to->pred; } return(from); } /* function: CandidateCompare() * ---------------------------- * Compares the violations of candidate arcs for sorting. First checks * if either candidate has an arcdir magnitude greater than 1, denoting * an augmenting cycle. Augmenting candidates are always placed before * non-augmenting candidates. Otherwise, returns positive if the first * candidate has a greater (less negative) violation than the second, 0 * if they are the same, and negative otherwise. */ int CandidateCompare(const void *c1, const void *c2){ if(labs(((candidateT *)c1)->arcdir) > 1){ if(labs(((candidateT *)c2)->arcdir) < 2){ return(-1); } }else if(labs(((candidateT *)c2)->arcdir) > 1){ return(1); } return(((candidateT *)c1)->violation - ((candidateT *)c2)->violation); /* if(((candidateT *)c1)->violation > ((candidateT *)c2)->violation){ return(1); }else if(((candidateT *)c1)->violation < ((candidateT *)c2)->violation){ return(-1); }else{ return(0); } */ } /* function: NeighborNodeGrid() * ---------------------------- * Return the neighboring node of the given node corresponding to the * given arc number for a grid network with a ground node. */ nodeT *NeighborNodeGrid(nodeT *node1, long arcnum, long *upperarcnumptr, nodeT **nodes, nodeT *ground, long *arcrowptr, long *arccolptr, long *arcdirptr, long nrow, long ncol, nodesuppT **nodesupp){ long row, col; row=node1->row; col=node1->col; switch(arcnum){ case -4: *arcrowptr=row; *arccolptr=col+1; *arcdirptr=1; if(col==ncol-2){ return(ground); }else{ return(&nodes[row][col+1]); } break; case -3: *arcrowptr=nrow+row; *arccolptr=col; *arcdirptr=1; if(row==nrow-2){ return(ground); }else{ return(&nodes[row+1][col]); } break; case -2: *arcrowptr=row; *arccolptr=col; *arcdirptr=-1; if(col==0){ return(ground); }else{ return(&nodes[row][col-1]); } break; case -1: *arcrowptr=nrow-1+row; *arccolptr=col; *arcdirptr=-1; if(row==0){ return(ground); }else{ return(&nodes[row-1][col]); } break; default: if(arcnumrow; nodenum=node1->col; *upperarcnumptr=nodesupp[tilenum][nodenum].noutarcs-5; /* set the arc row (tilenumber) and column (arcnumber) */ outarc=nodesupp[tilenum][nodenum].outarcs[arcnum+4]; *arcrowptr=outarc->arcrow; *arccolptr=outarc->arccol; if(node1==outarc->from){ *arcdirptr=1; }else{ *arcdirptr=-1; } /* return the neighbor node */ return(nodesupp[tilenum][nodenum].neighbornodes[arcnum+4]); } /* function: GetArcGrid() * ---------------------- * Given a from node and a to node, sets pointers for indices into * arc arrays, assuming primary (grid) network. */ void GetArcGrid(nodeT *from, nodeT *to, long *arcrow, long *arccol, long *arcdir, long nrow, long ncol, nodesuppT **nodesupp){ long fromrow, fromcol, torow, tocol; fromrow=from->row; fromcol=from->col; torow=to->row; tocol=to->col; if(fromcol==tocol-1){ /* normal arcs (neither endpoint ground) */ *arcrow=fromrow; *arccol=fromcol+1; *arcdir=1; }else if(fromcol==tocol+1){ *arcrow=fromrow; *arccol=fromcol; *arcdir=-1; }else if(fromrow==torow-1){ *arcrow=fromrow+1+nrow-1; *arccol=fromcol; *arcdir=1; }else if(fromrow==torow+1){ *arcrow=fromrow+nrow-1; *arccol=fromcol; *arcdir=-1; }else if(fromcol==0){ /* arcs to ground */ *arcrow=fromrow; *arccol=0; *arcdir=-1; }else if(fromcol==ncol-2){ *arcrow=fromrow; *arccol=ncol-1; *arcdir=1; }else if(fromrow==0){ *arcrow=nrow-1; *arccol=fromcol; *arcdir=-1; }else if(fromrow==nrow-2){ *arcrow=2*(nrow-1); *arccol=fromcol; *arcdir=1; }else if(tocol==0){ /* arcs from ground */ *arcrow=torow; *arccol=0; *arcdir=1; }else if(tocol==ncol-2){ *arcrow=torow; *arccol=ncol-1; *arcdir=-1; }else if(torow==0){ *arcrow=nrow-1; *arccol=tocol; *arcdir=1; }else{ *arcrow=2*(nrow-1); *arccol=tocol; *arcdir=-1; } } /* function: GetArcNonGrid() * ------------------------- * Given a from node and a to node, sets pointers for indices into * arc arrays, assuming secondary (arbitrary topology) network. */ void GetArcNonGrid(nodeT *from, nodeT *to, long *arcrow, long *arccol, long *arcdir, long nrow, long ncol, nodesuppT **nodesupp){ long tilenum, nodenum, arcnum; scndryarcT *outarc; /* get tile and node numbers for from node */ tilenum=from->row; nodenum=from->col; /* loop over all outgoing arcs of from node */ arcnum=0; while(TRUE){ outarc=nodesupp[tilenum][nodenum].outarcs[arcnum++]; if(outarc->from==to){ *arcrow=outarc->arcrow; *arccol=outarc->arccol; *arcdir=-1; return; }else if(outarc->to==to){ *arcrow=outarc->arcrow; *arccol=outarc->arccol; *arcdir=1; return; } } } /* Function: NonDegenUpdateChildren() * ---------------------------------- * Updates potentials and groups of all childredn along an augmenting path, * until a stop node is hit. */ void NonDegenUpdateChildren(nodeT *startnode, nodeT *lastnode, nodeT *nextonpath, long dgroup, long ngroundarcs, long nflow, nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, nodeT ***apexes, incrcostT **incrcosts, long nrow, long ncol, paramT *params){ nodeT *node1, *node2; long dincost, doutcost, arcnum, upperarcnum, startlevel; long group1, pathgroup, arcrow, arccol, arcdir; /* loop along flow path */ node1=startnode; pathgroup=lastnode->group; while(node1!=lastnode){ /* update potentials along the flow path by calculating arc distances */ node2=nextonpath; GetArc(node2->pred,node2,&arcrow,&arccol,&arcdir,nrow,ncol,nodesupp); doutcost=node1->outcost - node2->outcost + GetCost(incrcosts,arcrow,arccol,arcdir); node2->outcost+=doutcost; dincost=node1->incost - node2->incost + GetCost(incrcosts,arcrow,arccol,-arcdir); node2->incost+=dincost; node2->group=node1->group+dgroup; /* update potentials of children of this node in the flow path */ node1=node2; if(node1->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumpred==node1 && node2->group>0){ if(node2->group==pathgroup){ nextonpath=node2; }else{ startlevel=node2->level; group1=node1->group; while(TRUE){ node2->group=group1; node2->incost+=dincost; node2->outcost+=doutcost; node2=node2->next; if(node2->level <= startlevel){ break; } } } } } } } /* function: InitNetowrk() * ----------------------- */ void InitNetwork(short **flows, long *ngroundarcsptr, long *ncycleptr, long *nflowdoneptr, long *mostflowptr, long *nflowptr, long *candidatebagsizeptr, candidateT **candidatebagptr, long *candidatelistsizeptr, candidateT **candidatelistptr, signed char ***iscandidateptr, nodeT ****apexesptr, bucketT **bktsptr, long *iincrcostfileptr, incrcostT ***incrcostsptr, nodeT ***nodesptr, nodeT *ground, long *nnoderowptr, short **nnodesperrowptr, long *narcrowptr, short **narcsperrowptr, long nrow, long ncol, signed char *notfirstloopptr, totalcostT *totalcostptr, paramT *params){ long i; /* get and initialize memory for nodes */ if(ground!=NULL && *nodesptr==NULL){ *nodesptr=(nodeT **)Get2DMem(nrow-1,ncol-1,sizeof(nodeT *),sizeof(nodeT)); InitNodeNums(nrow-1,ncol-1,*nodesptr,ground); } /* take care of ambiguous flows to ground at corners */ if(ground!=NULL){ flows[0][0]+=flows[nrow-1][0]; flows[nrow-1][0]=0; flows[0][ncol-1]-=flows[nrow-1][ncol-2]; flows[nrow-1][ncol-2]=0; flows[nrow-2][0]-=flows[2*nrow-2][0]; flows[2*nrow-2][0]=0; flows[nrow-2][ncol-1]+=flows[2*nrow-2][ncol-2]; flows[2*nrow-2][ncol-2]=0; } /* initialize network solver variables */ *ncycleptr=0; *nflowptr=1; *candidatebagsizeptr=INITARRSIZE; *candidatebagptr=MAlloc(*candidatebagsizeptr*sizeof(candidateT)); *candidatelistsizeptr=INITARRSIZE; *candidatelistptr=MAlloc(*candidatelistsizeptr*sizeof(candidateT)); if(ground!=NULL){ *nflowdoneptr=0; *mostflowptr=Short2DRowColAbsMax(flows,nrow,ncol); if(*mostflowptr*params->nshortcycle>LARGESHORT){ fprintf(sp1,"Maximum flow on network: %ld\n",*mostflowptr); fprintf(sp0,"((Maximum flow) * NSHORTCYCLE) too large\nAbort\n"); exit(ABNORMAL_EXIT); } if(ncol>2){ *ngroundarcsptr=2*(nrow+ncol-2)-4; /* don't include corner column arcs */ }else{ *ngroundarcsptr=2*(nrow+ncol-2)-2; } *iscandidateptr=(signed char **)Get2DRowColMem(nrow,ncol, sizeof(signed char *), sizeof(signed char)); *apexesptr=(nodeT ***)Get2DRowColMem(nrow,ncol,sizeof(nodeT **), sizeof(nodeT *)); } /* set up buckets for TreeSolve (MSTInitFlows() has local set of buckets) */ *bktsptr=MAlloc(sizeof(bucketT)); if(ground!=NULL){ (*bktsptr)->minind=-LRound((params->maxcost+1)*(nrow+ncol) *NEGBUCKETFRACTION); (*bktsptr)->maxind=LRound((params->maxcost+1)*(nrow+ncol) *POSBUCKETFRACTION); }else{ (*bktsptr)->minind=-LRound((params->maxcost+1)*(nrow) *NEGBUCKETFRACTION); (*bktsptr)->maxind=LRound((params->maxcost+1)*(nrow) *POSBUCKETFRACTION); } (*bktsptr)->size=(*bktsptr)->maxind-(*bktsptr)->minind+1; (*bktsptr)->bucketbase=(nodeT **)MAlloc((*bktsptr)->size*sizeof(nodeT *)); (*bktsptr)->bucket=&((*bktsptr)->bucketbase[-(*bktsptr)->minind]); for(i=0;i<(*bktsptr)->size;i++){ (*bktsptr)->bucketbase[i]=NULL; } /* get memory for incremental cost arrays */ *iincrcostfileptr=0; if(ground!=NULL){ (*incrcostsptr)=(incrcostT **)Get2DRowColMem(nrow,ncol,sizeof(incrcostT *), sizeof(incrcostT)); } /* set number of nodes and arcs per row */ if(ground!=NULL){ (*nnoderowptr)=nrow-1; (*nnodesperrowptr)=(short *)MAlloc((nrow-1)*sizeof(short)); for(i=0;irow=GROUNDROW; ground->col=GROUNDCOL; } } /* function: InitBuckets() * ----------------------- */ void InitBuckets(bucketT *bkts, nodeT *source, long nbuckets){ long i; /* set up bucket array parameters */ bkts->curr=0; bkts->wrapped=FALSE; /* initialize the buckets */ for(i=0;ibucketbase[i]=NULL; } /* put the source in the zeroth distance index bucket */ bkts->bucket[0]=source; source->next=NULL; source->prev=NULL; source->group=INBUCKET; source->outcost=0; } /* function: InitNodes() * --------------------- */ void InitNodes(long nnrow, long nncol, nodeT **nodes, nodeT *ground){ long row, col; /* loop over each element and initialize values */ for(row=0;rowgroup=NOTINBUCKET; ground->outcost=VERYFAR; ground->pred=NULL; } } /* function: BucketInsert() * ------------------------ */ void BucketInsert(nodeT *node, long ind, bucketT *bkts){ /* put node at beginning of bucket list */ node->next=bkts->bucket[ind]; if((bkts->bucket[ind])!=NULL){ bkts->bucket[ind]->prev=node; } bkts->bucket[ind]=node; node->prev=NULL; /* mark node in bucket array */ node->group=INBUCKET; } /* function: BucketRemove() * ------------------------ */ void BucketRemove(nodeT *node, long ind, bucketT *bkts){ /* remove node from doubly linked list */ if((node->next)!=NULL){ node->next->prev=node->prev; } if(node->prev!=NULL){ node->prev->next=node->next; }else if(node->next==NULL){ bkts->bucket[ind]=NULL; }else{ bkts->bucket[ind]=node->next; } } /* function: ClosestNode() * ----------------------- */ nodeT *ClosestNode(bucketT *bkts){ nodeT *node; /* find the first bucket with nodes in it */ while(TRUE){ /* see if we got to the last bucket */ if((bkts->curr)>(bkts->maxind)){ return(NULL); } /* see if we found a nonempty bucket; if so, return it */ if((bkts->bucket[bkts->curr])!=NULL){ node=bkts->bucket[bkts->curr]; node->group=ONTREE; bkts->bucket[bkts->curr]=node->next; if((node->next)!=NULL){ node->next->prev=NULL; } return(node); } /* move to next bucket */ bkts->curr++; } } /* function: ClosestNodeCircular() * ------------------------------- * Similar to ClosestNode(), but assumes circular buckets. This * function should NOT be used if negative arc weights exist on the * network; initial value of bkts->minind should always be zero. */ nodeT *ClosestNodeCircular(bucketT *bkts){ nodeT *node; /* find the first bucket with nodes in it */ while(TRUE){ /* see if we got to the last bucket */ if((bkts->curr+bkts->minind)>(bkts->maxind)){ if(bkts->wrapped){ bkts->wrapped=FALSE; bkts->curr=0; bkts->minind+=bkts->size; bkts->maxind+=bkts->size; }else{ return(NULL); } } /* see if we found a nonempty bucket; if so, return it */ if((bkts->bucket[bkts->curr])!=NULL){ node=bkts->bucket[bkts->curr]; node->group=ONTREE; bkts->bucket[bkts->curr]=node->next; if((node->next)!=NULL){ node->next->prev=NULL; } return(node); } /* move to next bucket */ bkts->curr++; } } /* function: MinOutCostNode() * -------------------------- * Similar to ClosestNode(), but always returns closest node even if its * outcost is less than the minimum bucket index. Does not handle circular * buckets. Does not handle no nodes left condition (this should be handled * by calling function). */ nodeT *MinOutCostNode(bucketT *bkts){ long minoutcost; nodeT *node1, *node2; /* move to next non-empty bucket */ while(bkts->currmaxind && bkts->bucket[bkts->curr]==NULL){ bkts->curr++; } /* scan the whole bucket if it is the overflow or underflow bag */ if(bkts->curr==bkts->minind || bkts->curr==bkts->maxind){ node2=bkts->bucket[bkts->curr]; node1=node2; minoutcost=node1->outcost; while(node2!=NULL){ if(node2->outcostoutcost; node1=node2; } node2=node2->next; } BucketRemove(node1,bkts->curr,bkts); }else{ node1=bkts->bucket[bkts->curr]; bkts->bucket[bkts->curr]=node1->next; if(node1->next!=NULL){ node1->next->prev=NULL; } } return(node1); } /* function: SelectSource() * ------------------------ * If params->sourcemode is zero, the ground is returned as the source. * Otherwise, the returned source is the endpoint of the longest chain of * arcs carrying at least nflow units of flow. This function does * check for the case where two arcs both carry nflow into or out of a node, * but if there are flow cycles (not unexpected for nonlinear costs), the * longest chain is not guaranteed. Which end of the longest chain is * determined by the sign of params->sourcemode (should be 1 or -1 if not 0). */ nodeT *SelectSource(nodeT **nodes, nodeT *ground, long nflow, short **flows, long ngroundarcs, long nrow, long ncol, paramT *params){ long row, col, maxflowlength, arcnum, upperarcnum; long arcrow, arccol, arcdir, endptsign; signed char checknode; nodeT *source, *node1, *node2, *nextnode; nodesuppT **nodesupp; /* if sourcemode==0, return ground node; otherwise, it should be 1 or -1 */ if(!params->sourcemode){ return(ground); }else{ endptsign=params->sourcemode; } /* initialize variables */ /* group: 0=unvisited, 1=descended, 2=done */ /* outcost: longest distance to a chain end */ /* pred: parent node */ nodesupp=NULL; source=ground; maxflowlength=0; ground->group=0; ground->outcost=0; ground->pred=NULL; for(row=0;rowgroup){ if(node1!=ground){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnum= nflow){ checknode=FALSE; break; } /* node may be beginning of a chain */ if(endptsign*arcdir*flows[arcrow][arccol] >= nflow){ checknode=TRUE; } } } /* if it is an endpoint, trace the flow and determine longest chain */ if(checknode){ /* loop until we've walked the whole tree */ nextnode=node1; while(TRUE){ node1=nextnode; nextnode=NULL; /* loop over all outgoing arcs */ if(node1!=ground){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnum= nflow){ if(node2->group==2){ if(node2->outcost+1 > node1->outcost){ node1->outcost=node2->outcost+1; } }else if(node2->group==0){ nextnode=node2; break; } }else if(node2==node1->pred){ nextnode=node2; } } /* we are back to the root if we didn't find any eligible nodes */ if(nextnode==NULL){ /* see if the tree root should be the new source */ if(node1->outcost > maxflowlength){ source=node1; maxflowlength=node1->outcost; } node1->group=2; break; } /* if nextnode is pred, mark current node and go back up the tree */ if(nextnode->group==1){ node1->group=2; }else{ node1->group=1; nextnode->pred=node1; } } } } } /* return source */ return(source); } /* function: GetCost() * ------------------- * Returns incremental flow cost for current flow increment dflow from * lookup array. */ short GetCost(incrcostT **incrcosts, long arcrow, long arccol, long arcdir){ /* look up cost and return it for the appropriate arc direction */ /* we may want add a check here for clipped incremental costs */ if(arcdir>0){ return(incrcosts[arcrow][arccol].poscost); }else{ return(incrcosts[arcrow][arccol].negcost); } } /* function: ReCalcCost() * ---------------------- * Updates the incremental cost for an arc. */ long ReCalcCost(void **costs, incrcostT **incrcosts, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params){ long poscost, negcost, iclipped; /* calculate new positive and negative nflow costs, as long ints */ CalcCost(costs,flow,arcrow,arccol,nflow,nrow,params, &poscost,&negcost); /* clip costs to short int */ iclipped=0; if(poscost>LARGESHORT){ incrcosts[arcrow][arccol].poscost=LARGESHORT; iclipped++; }else{ if(poscost<-LARGESHORT){ incrcosts[arcrow][arccol].poscost=-LARGESHORT; iclipped++; }else{ incrcosts[arcrow][arccol].poscost=poscost; } } if(negcost>LARGESHORT){ incrcosts[arcrow][arccol].negcost=LARGESHORT; iclipped++; }else{ if(negcost<-LARGESHORT){ incrcosts[arcrow][arccol].negcost=-LARGESHORT; iclipped++; }else{ incrcosts[arcrow][arccol].negcost=negcost; } } /* return the number of clipped incremental costs (0, 1, or 2) */ return(iclipped); } /* function: SetupIncrFlowCosts() * ------------------------------ * Calculates the costs for positive and negative dflow flow increment * if there is zero flow on the arc. */ void SetupIncrFlowCosts(void **costs, incrcostT **incrcosts, short **flows, long nflow, long nrow, long narcrow, short *narcsperrow, paramT *params){ long arcrow, arccol, iclipped, narcs; char pl[2]; /* loop over all rows and columns */ narcs=0; iclipped=0; for(arcrow=0;arcrow1){ strcpy(pl,"s"); }else{ strcpy(pl,""); } fprintf(sp0,"%ld incremental cost%s clipped to avoid overflow (%.3f%%)\n", iclipped,pl,((double )iclipped)/(2*narcs)); } } /* function: EvaluateTotalCost() * ----------------------------- * Computes the total cost of the flow array and prints it out. Pass nrow * and ncol if in grid mode (primary network), or pass nrow=ntiles and * ncol=0 for nongrid mode (secondary network). */ totalcostT EvaluateTotalCost(void **costs, short **flows, long nrow, long ncol, short *narcsperrow,paramT *params){ totalcostT rowcost, totalcost; long row, col, maxrow, maxcol; /* sum cost for each row and column arc */ totalcost=0; if(ncol){ maxrow=2*nrow-1; }else{ maxrow=nrow; } for(row=0;rowmaxcost && !((row==nrow-1 || 2*nrow-2) && (col==0 || col==ncol-2))){ maxcost=mstcosts[row][col]; } } } /* get memory for buckets and arc status */ bkts->size=LRound((maxcost+1)*(nrow+ncol+1)); bkts->bucketbase=(nodeT **)MAlloc(bkts->size*sizeof(nodeT *)); bkts->minind=0; bkts->maxind=bkts->size-1; bkts->bucket=bkts->bucketbase; arcstatus=(signed char **)Get2DRowColMem(nrow,ncol,sizeof(signed char *), sizeof(signed char)); /* calculate phase residues (integer numbers of cycles) */ fprintf(sp1,"Initializing flows with MST algorithm\n"); residue=(signed char **)Get2DMem(nrow-1,ncol-1,sizeof(signed char *), sizeof(signed char)); CycleResidue(wrappedphase,residue,nrow,ncol); /* get memory for flow arrays */ (*flowsptr)=(short **)Get2DRowColZeroMem(nrow,ncol, sizeof(short *),sizeof(short)); flows=*flowsptr; /* loop until no flows exceed the maximum flow */ fprintf(sp2,"Running approximate minimum spanning tree solver\n"); while(TRUE){ /* set up the source to be the first non-zero residue that we find */ source=NULL; for(row=0;rowsize); /* solve the mst problem */ SolveMST(*nodesptr,source,ground,bkts,mstcosts,residue,arcstatus, nrow,ncol); /* find flows on minimum tree (only one feasible flow exists) */ DischargeTree(source,mstcosts,flows,residue,arcstatus, *nodesptr,ground,nrow,ncol); /* do pushes to clip the flows and make saturated arcs ineligible */ /* break out of loop if there is no flow greater than the limit */ if(ClipFlow(residue,flows,mstcosts,nrow,ncol,maxflow)){ break; } } /* free memory and return */ Free2DArray((void **)residue,nrow-1); Free2DArray((void **)arcstatus,2*nrow-1); Free2DArray((void **)mstcosts,2*nrow-1); free(bkts->bucketbase); return; } /* function: SolveMST() * -------------------- * Finds tree which spans all residue nodes of approximately minimal length. * Note that this function may produce a Steiner tree (tree may split at * non-residue node), though finding the exactly minimum Steiner tree is * NP-hard. This function uses Prim's algorithm, nesting Dijkstra's * shortest path algorithm in each iteration to find next closest residue * node to tree. See Ahuja, Orlin, and Magnanti 1993 for details. * * Dijkstra implementation and some associated functions adapted from SPLIB * shortest path codes written by Cherkassky, Goldberg, and Radzik. */ void SolveMST(nodeT **nodes, nodeT *source, nodeT *ground, bucketT *bkts, short **mstcosts, signed char **residue, signed char **arcstatus, long nrow, long ncol){ nodeT *from, *to, *pathfrom, *pathto; nodesuppT **nodesupp; long fromdist, newdist, arcdist, ngroundarcs, groundcharge; long fromrow, fromcol, row, col, arcnum, upperarcnum, maxcol; long pathfromrow, pathfromcol; long arcrow, arccol, arcdir; /* initialize some variables */ nodesupp=NULL; /* calculate the number of ground arcs */ ngroundarcs=2*(nrow+ncol-2)-4; /* calculate charge on ground */ groundcharge=0; for(row=0;rowrow; fromcol=from->col; /* if we found a residue */ if(((fromrow!=GROUNDROW && residue[fromrow][fromcol]) || (fromrow==GROUNDROW && groundcharge)) && from!=source){ /* set node and its predecessor */ pathto=from; pathfrom=from->pred; /* go back and make arcstatus -1 along path */ while(TRUE){ /* give to node zero distance label */ pathto->outcost=0; /* get arc indices for arc between pathfrom and pathto */ GetArc(pathfrom,pathto,&arcrow,&arccol,&arcdir,nrow,ncol,nodesupp); /* set arc status to -1 to mark arc on tree */ arcstatus[arcrow][arccol]=-1; /* stop when we get to a residue */ pathfromrow=pathfrom->row; pathfromcol=pathfrom->col; if((pathfromrow!=GROUNDROW && residue[pathfromrow][pathfromcol]) || (pathfromrow==GROUNDROW && groundcharge)){ break; } /* move up to previous node pair in path */ pathto=pathfrom; pathfrom=pathfrom->pred; } /* end while loop marking costs on path */ } /* end if we found a residue */ /* set a variable for from node's distance */ fromdist=from->outcost; /* scan from's neighbors */ if(fromrow!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumrow; col=to->col; /* get cost of arc to new node (if arc on tree, cost is 0) */ if(arcstatus[arcrow][arccol]<0){ arcdist=0; }else if((arcdist=mstcosts[arcrow][arccol])==LARGESHORT){ arcdist=VERYFAR; } /* compare distance of new nodes to temp labels */ if((newdist=fromdist+arcdist)<(to->outcost)){ /* if to node is already in a bucket, remove it */ if(to->group==INBUCKET){ if(to->outcostmaxind){ BucketRemove(to,to->outcost,bkts); }else{ BucketRemove(to,bkts->maxind,bkts); } } /* update to node */ to->outcost=newdist; to->pred=from; /* insert to node into appropriate bucket */ if(newdistmaxind){ BucketInsert(to,newdist,bkts); if(newdistcurr){ bkts->curr=newdist; } }else{ BucketInsert(to,bkts->maxind,bkts); } } /* end if newdist < old dist */ } /* end loop over outgoing arcs */ } /* end while ClosestNode()!=NULL */ } /* function: DischargeTree() * ------------------------- * Does depth-first search on result tree from SolveMST. Integrates * charges from tree leaves back up to set arc flows. This implementation * is non-recursive; a recursive implementation might be faster, but * would also use much more stack memory. This method is equivalent to * walking the tree, so it should be nore more than a factor of 2 slower. */ long DischargeTree(nodeT *source, short **mstcosts, short **flows, signed char **residue, signed char **arcstatus, nodeT **nodes, nodeT *ground, long nrow, long ncol){ long row, col, todir=0, arcrow, arccol, arcdir; long arcnum, upperarcnum, ngroundarcs; nodeT *from, *to, *nextnode; nodesuppT **nodesupp; /* set up */ /* use group member of node structure to temporarily store charge */ nextnode=source; ground->group=0; for(row=0;rowgroup-=residue[row][col]; } } ngroundarcs=2*(nrow+ncol-2)-4; nodesupp=NULL; /* keep looping unitl we've walked the entire tree */ while(TRUE){ from=nextnode; nextnode=NULL; /* loop over outgoing arcs from this node */ if(from->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumgroup; nextnode->group+=from->group; from->group=0; } } /* finish up */ return(from->group); } /* end of DischargeTree() */ /* function: ClipFlow() * --------------------- * Given a flow, clips flow magnitudes to a computed limit, resets * residues so sum of solution of network problem with new residues * and solution of clipped problem give total solution. Upper flow limit * is 2/3 the maximum flow on the network or the passed value maxflow, * whichever is greater. Clipped flow arcs get costs of passed variable * maxcost. Residues should have been set to zero by DischargeTree(). */ signed char ClipFlow(signed char **residue, short **flows, short **mstcosts, long nrow, long ncol, long maxflow){ long row, col, cliplimit, maxcol, excess, tempcharge, sign; long mostflow, maxcost; /* find maximum flow */ mostflow=Short2DRowColAbsMax(flows,nrow,ncol); /* if there is no flow greater than the maximum, return TRUE */ if(mostflow<=maxflow){ return(TRUE); } fprintf(sp2,"Maximum flow on network: %ld\n",mostflow); /* set upper flow limit */ cliplimit=(long )ceil(mostflow*CLIPFACTOR)+1; if(maxflow>cliplimit){ cliplimit=maxflow; } /* find maximum cost (excluding ineligible corner arcs) */ maxcost=0; for(row=0;row<2*nrow-1;row++){ if(rowmaxcost && mstcosts[row][col]=LARGESHORT){ fprintf(sp0,"WARNING: escaping ClipFlow loop to prevent cost overflow\n"); return(TRUE); } /* clip flows and do pushes */ for(row=0;row<2*nrow-1;row++){ if(rowcliplimit){ if(flows[row][col]>0){ sign=1; excess=flows[row][col]-cliplimit; }else{ sign=-1; excess=flows[row][col]+cliplimit; } if(rowMAXRES || tempchargeMAXRES){ fprintf(sp0,"Overflow of residue data type\nAbort\n"); exit(ABNORMAL_EXIT); } residue[row][col]=tempcharge; } }else{ if(row!=nrow-1){ tempcharge=residue[row-nrow][col]+excess; if(tempcharge>MAXRES || tempchargeMAXRES){ fprintf(sp0,"Overflow of residue data type\nAbort\n"); exit(ABNORMAL_EXIT); } residue[row-nrow+1][col]=tempcharge; } } flows[row][col]=sign*cliplimit; mstcosts[row][col]=maxcost; } } } /* return value indicates that flows have been clipped */ fprintf(sp2,"Flows clipped to %ld. Rerunning MST solver.\n",cliplimit); return(FALSE); } /* function: MCFInitFlows() * ------------------------ * Initializes the flow on a the network using minimum cost flow * algorithm. */ void MCFInitFlows(float **wrappedphase, short ***flowsptr, short **mstcosts, long nrow, long ncol, long cs2scalefactor){ signed char **residue; #ifndef NO_CS2 /* calculate phase residues (integer numbers of cycles) */ fprintf(sp1,"Initializing flows with MCF algorithm\n"); residue=(signed char **)Get2DMem(nrow-1,ncol-1,sizeof(signed char *), sizeof(signed char)); CycleResidue(wrappedphase,residue,nrow,ncol); /* run the solver (memory freed within solver) */ SolveCS2(residue,mstcosts,nrow,ncol,cs2scalefactor,flowsptr); #endif } GMTSAR_V5.7/snaphu/src/CMakeLists.txt000644 015705 000000 00000001072 13505462014 020366 0ustar00sandwellwheel000000 000000 # # $Id: CMakeLists.txt 377 2016-08-13 23:07:14Z fwobbe $ # add_executable (snaphu snaphu.c snaphu_cost.c snaphu_cs2.c snaphu_io.c snaphu_solver.c snaphu_tile.c snaphu_util.c snaphu_cs2types.h snaphu.h) if (HAVE_M_LIBRARY) # link the math library target_link_libraries (snaphu m) endif (HAVE_M_LIBRARY) # add the install targets install (TARGETS snaphu ARCHIVE DESTINATION lib COMPONENT Runtime LIBRARY DESTINATION lib COMPONENT Runtime RUNTIME DESTINATION bin COMPONENT Runtime) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/snaphu/src/snaphu_tile.c000644 015705 000000 00000312472 13505462014 020316 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu tile-mode source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* function: SetupTile() * --------------------- * Sets up tile parameters and output file names for the current tile. */ void SetupTile(long nlines, long linelen, paramT *params, tileparamT *tileparams, outfileT *outfiles, outfileT *tileoutfiles, long tilerow, long tilecol){ long ni, nj; char tempstring[MAXTMPSTRLEN], path[MAXSTRLEN], basename[MAXSTRLEN]; char *tiledir; /* set parameters for current tile */ ni=ceil((nlines+(params->ntilerow-1)*params->rowovrlp) /(double )params->ntilerow); nj=ceil((linelen+(params->ntilecol-1)*params->colovrlp) /(double )params->ntilecol); tileparams->firstrow=tilerow*(ni-params->rowovrlp); tileparams->firstcol=tilecol*(nj-params->colovrlp); if(tilerow==params->ntilerow-1){ tileparams->nrow=nlines-(params->ntilerow-1)*(ni-params->rowovrlp); }else{ tileparams->nrow=ni; } if(tilecol==params->ntilecol-1){ tileparams->ncol=linelen-(params->ntilecol-1)*(nj-params->colovrlp); }else{ tileparams->ncol=nj; } /* set output files */ tiledir=params->tiledir; ParseFilename(outfiles->outfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->outfile,tempstring,MAXSTRLEN); if(strlen(outfiles->initfile)){ ParseFilename(outfiles->initfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->initfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->initfile,"",MAXSTRLEN); } if(strlen(outfiles->flowfile)){ ParseFilename(outfiles->flowfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->flowfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->flowfile,"",MAXSTRLEN); } if(strlen(outfiles->eifile)){ ParseFilename(outfiles->eifile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->eifile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->eifile,"",MAXSTRLEN); } if(strlen(outfiles->rowcostfile)){ ParseFilename(outfiles->rowcostfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->rowcostfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->rowcostfile,"",MAXSTRLEN); } if(strlen(outfiles->colcostfile)){ ParseFilename(outfiles->colcostfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->colcostfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->colcostfile,"",MAXSTRLEN); } if(strlen(outfiles->mstrowcostfile)){ ParseFilename(outfiles->mstrowcostfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->mstrowcostfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->mstrowcostfile,"",MAXSTRLEN); } if(strlen(outfiles->mstcolcostfile)){ ParseFilename(outfiles->mstcolcostfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->mstcolcostfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->mstcolcostfile,"",MAXSTRLEN); } if(strlen(outfiles->mstcostsfile)){ ParseFilename(outfiles->mstcostsfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->mstcostsfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->mstcostsfile,"",MAXSTRLEN); } if(strlen(outfiles->corrdumpfile)){ ParseFilename(outfiles->corrdumpfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->corrdumpfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->corrdumpfile,"",MAXSTRLEN); } if(strlen(outfiles->rawcorrdumpfile)){ ParseFilename(outfiles->rawcorrdumpfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->rawcorrdumpfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->rawcorrdumpfile,"",MAXSTRLEN); } if(strlen(outfiles->costoutfile)){ ParseFilename(outfiles->costoutfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->costoutfile,tempstring,MAXSTRLEN); }else{ sprintf(tempstring,"%s/%s%s%ld_%ld.%ld", tiledir,TMPTILEROOT,TMPTILECOSTSUFFIX,tilerow,tilecol, tileparams->ncol); StrNCopy(tileoutfiles->costoutfile,tempstring,MAXSTRLEN); } tileoutfiles->outfileformat=TMPTILEOUTFORMAT; } /* function: GrowRegions() * ----------------------- * Grows contiguous regions demarcated by arcs whose residual costs are * less than some threshold. Numbers the regions sequentially from 0. */ void GrowRegions(void **costs, short **flows, long nrow, long ncol, incrcostT **incrcosts, outfileT *outfiles, paramT *params){ long i, row, col, maxcol; long arcrow, arccol, arcnum, fromdist, arcdist; long regioncounter, *regionsizes, regionsizeslen, *thisregionsize; long closestregiondist, closestregion=0, lastfromdist; long costthresh, minsize, maxcost; short **regions = NULL; nodeT **nodes = NULL; nodeT *source, *from, *to, *ground; char regionfile[MAXSTRLEN]; bucketT bkts[1]; /* error checking */ fprintf(sp1,"Growing reliable regions\n"); minsize=params->minregionsize; costthresh=params->tilecostthresh; if(minsize>nrow*ncol){ fprintf(sp0,"Minimum region size cannot exceed tile size\nAbort\n"); exit(ABNORMAL_EXIT); } /* loop over all arcs */ for(arcrow=0;arcrow<2*nrow-1;arcrow++){ if(arcrowsize=maxcost+2; bkts->minind=0; bkts->maxind=bkts->size-1; bkts->curr=0; bkts->wrapped=FALSE; bkts->bucketbase=(nodeT **)MAlloc(bkts->size*sizeof(nodeT *)); bkts->bucket=bkts->bucketbase; for(i=0;isize;i++){ bkts->bucket[i]=NULL; } /* initialize region variables */ regioncounter=-1; regionsizeslen=INITARRSIZE; regionsizes=(long *)MAlloc(regionsizeslen*sizeof(long)); for(row=0;rownext=NULL; source->prev=NULL; source->group=INBUCKET; source->outcost=0; bkts->bucket[0]=source; bkts->curr=0; lastfromdist=0; /* increment the region counter */ if(++regioncounter>=regionsizeslen){ regionsizeslen+=INITARRSIZE; regionsizes=(long *)ReAlloc(regionsizes, regionsizeslen*sizeof(long)); } thisregionsize=®ionsizes[regioncounter]; /* set up */ (*thisregionsize)=0; closestregiondist=VERYFAR; /* loop to grow region */ while(TRUE){ /* set from node to closest node in circular bucket structure */ from=ClosestNode(bkts); /* break if we can't grow any more and the region is big enough */ if(from==NULL){ if(*thisregionsize>=minsize){ /* no more nonregion nodes, and current region is big enough */ break; }else{ /* no more nonregion nodes, but current region still too small */ /* merge with another region */ MergeRegions(nodes,source,regionsizes,closestregion,nrow,ncol); regioncounter--; break; } }else{ fromdist=from->outcost; if(fromdist>lastfromdist){ if(regionsizes[regioncounter]>=minsize){ /* region grown to all nodes within mincost, is big enough */ break; } if(fromdist>closestregiondist){ /* another region closer than new node, so merge regions */ MergeRegions(nodes,source,regionsizes,closestregion,nrow,ncol); regioncounter--; break; } } } /* make from node a part of the current region */ from->incost=regioncounter; (*thisregionsize)++; lastfromdist=fromdist; /* scan from's neighbors */ arcnum=0; while((to=RegionsNeighborNode(from,&arcnum,nodes, &arcrow,&arccol,nrow,ncol))!=NULL){ /* get cost of arc to the to node */ arcdist=incrcosts[arcrow][arccol].negcost; /* see if to node is already in another region */ if(to->incost>=0){ /* keep track of which neighboring region is closest */ if(to->incost!=regioncounter && arcdistincost; } }else{ /* to node is not in another region */ /* compare distance of new nodes to temp labels */ if(arcdist<(to->outcost)){ /* if to node is already in a (circular) bucket, remove it */ if(to->group==INBUCKET){ BucketRemove(to,to->outcost,bkts); } /* update to node */ to->outcost=arcdist; to->pred=from; /* insert to node into appropriate (circular) bucket */ BucketInsert(to,arcdist,bkts); if(arcdistcurr){ bkts->curr=arcdist; } } } } } } } } fprintf(sp2,"Tile partitioned into %ld regions\n",regioncounter+1); /* write regions array */ /* write as shorts if multiple tiles */ if(params->ntilerow > 1 || params->ntilecol>1){ regions=(short **)Get2DMem(nrow,ncol,sizeof(short *),sizeof(short)); for(row=0;rowLARGESHORT){ fprintf(sp0, "Number of regions in tile exceeds max allowed\nAbort\n"); exit(ABNORMAL_EXIT); } regions[row][col]=nodes[row][col].incost; } } sprintf(regionfile,"%s%s",outfiles->outfile,REGIONSUFFIX); fprintf(sp2,"Writing region data to file %s\n",regionfile); Write2DArray((void **)regions,regionfile,nrow,ncol,sizeof(short)); } /* free memory */ if (nodes) Free2DArray((void **)nodes,nrow); if (regions) Free2DArray((void **)regions,nrow); free(bkts->bucketbase); } /* function: GrowConnCompMask() * ---------------------------- * Grows contiguous regions demarcated by arcs whose residual costs are * less than some threshold. Numbers the regions sequentially from 1. * Writes out byte file of connected component mask, with 0 for any pixels * not assigned to a component. */ void GrowConnCompsMask(void **costs, short **flows, long nrow, long ncol, incrcostT **incrcosts, outfileT *outfiles, paramT *params){ long i, row, col, maxcol; long arcrow, arccol, arcnum; long regioncounter, *regionsizes, regionsizeslen, *thisregionsize; long *sortedregionsizes; long costthresh, minsize, maxncomps, ntied, newnum; nodeT **nodes; nodeT *source, *from, *to, *ground; unsigned char **components; bucketT bkts[1]; /* error checking */ fprintf(sp1,"Growing connected component mask\n"); minsize=params->minconncompfrac*nrow*ncol; maxncomps=params->maxncomps; costthresh=params->conncompthresh; if(minsize>nrow*ncol){ fprintf(sp0,"Minimum region size cannot exceed tile size\nAbort\n"); exit(ABNORMAL_EXIT); } /* loop over all arcs */ for(arcrow=0;arcrow<2*nrow-1;arcrow++){ if(arcrowsize=1; bkts->minind=0; bkts->maxind=0; bkts->wrapped=FALSE; bkts->bucketbase=(nodeT **)MAlloc(sizeof(nodeT *)); bkts->bucket=bkts->bucketbase; bkts->bucket[0]=NULL; /* initialize region variables */ regioncounter=0; regionsizeslen=INITARRSIZE; regionsizes=(long *)MAlloc(regionsizeslen*sizeof(long)); for(row=0;rownext=NULL; source->prev=NULL; source->group=INBUCKET; source->outcost=0; bkts->bucket[0]=source; bkts->curr=0; /* increment the region counter */ if(++regioncounter>=regionsizeslen){ regionsizeslen+=INITARRSIZE; regionsizes=(long *)ReAlloc(regionsizes, regionsizeslen*sizeof(long)); } thisregionsize=®ionsizes[regioncounter]; /* set up */ (*thisregionsize)=0; /* loop to grow region */ while(TRUE){ /* set from node to closest node in circular bucket structure */ from=ClosestNode(bkts); /* break if we can't grow any more and the region is big enough */ if(from==NULL){ if(regionsizes[regioncounter]>=minsize){ /* no more nonregion nodes, and current region is big enough */ break; }else{ /* no more nonregion nodes, but current region still too small */ /* zero out the region */ RenumberRegion(nodes,source,0,nrow,ncol); regioncounter--; break; } } /* make from node a part of the current region */ from->incost=regioncounter; (*thisregionsize)++; /* scan from's neighbors */ arcnum=0; while((to=RegionsNeighborNode(from,&arcnum,nodes, &arcrow,&arccol,nrow,ncol))!=NULL){ /* see if to can be reached */ if(to->incost<0 && incrcosts[arcrow][arccol].negcost==0 && to->group!=INBUCKET){ /* update to node */ to->pred=from; BucketInsert(to,0,bkts); } } } } } } fprintf(sp2,"%ld connected components formed\n",regioncounter); /* make sure we don't have too many components */ if(regioncounter>maxncomps){ /* copy regionsizes array and sort to find new minimum region size */ fprintf(sp2,"Keeping only %ld connected components\n",maxncomps); sortedregionsizes=(long *)MAlloc(regioncounter*sizeof(long)); for(i=0;i=0 && sortedregionsizes[i]==minsize){ ntied++; i--; } /* zero out regions that are too small */ newnum=-1; for(row=0;row0){ if(regionsizes[i]0)){ /* region too small, so zero it out */ RenumberRegion(nodes,&(nodes[row][col]),0,nrow,ncol); }else{ /* keep region, assign it new region number */ /* temporarily assign negative of new number to avoid collisions */ RenumberRegion(nodes,&(nodes[row][col]),newnum--,nrow,ncol); } } } } /* flip temporary negative region numbers so they are positive */ for(row=0;row255){ fprintf(sp0,"Number of connected components too large for byte data\n" "Abort\n"); exit(ABNORMAL_EXIT); } components[row][col]=(unsigned char )(nodes[row][col].incost); } } fprintf(sp1,"Writing connected components to file %s\n", outfiles->conncompfile); Write2DArray((void **)components,outfiles->conncompfile,nrow,ncol, sizeof(unsigned char)); /* free memory */ Free2DArray((void **)nodes,nrow); Free2DArray((void **)components,nrow); free(bkts->bucketbase); } /* function: ThickenCosts() * ------------------------ */ long ThickenCosts(incrcostT **incrcosts, long nrow, long ncol){ long row, col, templong, maxcost; double n; /* initialize variable storing maximum cost */ maxcost=-LARGELONG; /* loop over row arcs and convolve */ for(row=0;rowLARGESHORT){ fprintf(sp0,"WARNING: COSTS CLIPPED IN ThickenCosts()\n"); incrcosts[row][col].negcost=LARGESHORT; }else{ incrcosts[row][col].negcost=templong; } if(incrcosts[row][col].negcost>maxcost){ maxcost=incrcosts[row][col].negcost; } } } /* loop over column arcs and convolve */ for(row=nrow-1;row<2*nrow-1;row++){ for(col=0;colLARGESHORT){ fprintf(sp0,"WARNING: COSTS CLIPPED IN ThickenCosts()\n"); incrcosts[row][col].negcost=LARGESHORT; }else{ incrcosts[row][col].negcost=templong; } if(incrcosts[row][col].negcost>maxcost){ maxcost=incrcosts[row][col].negcost; } } } /* return maximum cost */ return(maxcost); } /* function: RegionsNeighborNode() * ------------------------------- * Return the neighboring node of the given node corresponding to the * given arc number. */ nodeT *RegionsNeighborNode(nodeT *node1, long *arcnumptr, nodeT **nodes, long *arcrowptr, long *arccolptr, long nrow, long ncol){ long row, col; row=node1->row; col=node1->col; while(TRUE){ switch((*arcnumptr)++){ case 0: if(col!=ncol-1){ *arcrowptr=nrow-1+row; *arccolptr=col; return(&nodes[row][col+1]); } break; case 1: if(row!=nrow-1){ *arcrowptr=row; *arccolptr=col; return(&nodes[row+1][col]); } break; case 2: if(col!=0){ *arcrowptr=nrow-1+row; *arccolptr=col-1; return(&nodes[row][col-1]); } break; case 3: if(row!=0){ *arcrowptr=row-1; *arccolptr=col; return(&nodes[row-1][col]); } break; default: return(NULL); } } } /* function: ClearBuckets() * ------------------------ * Removes any nodes in the bucket data structure passed, and resets * their distances to VERYFAR. Assumes bukets indexed from 0. */ void ClearBuckets(bucketT *bkts){ nodeT *currentnode, *nextnode; long i; /* loop over all buckets */ for(i=0;isize;i++){ /* clear the bucket */ nextnode=bkts->bucketbase[i]; while(nextnode!=NULL){ currentnode=nextnode; nextnode=currentnode->next; currentnode->group=NOTINBUCKET; currentnode->outcost=VERYFAR; currentnode->pred=NULL; } bkts->bucketbase[i]=NULL; } /* reset bucket parameters */ bkts->minind=0; bkts->maxind=bkts->size-1; bkts->wrapped=FALSE; } /* function: MergeRegions() * ------------------------ * */ void MergeRegions(nodeT **nodes, nodeT *source, long *regionsizes, long closestregion, long nrow, long ncol){ long nextnodelistlen, nextnodelistnext, arcnum, arcrow, arccol, regionnum; nodeT *from, *to, **nextnodelist; /* initialize */ nextnodelistlen=INITARRSIZE; nextnodelist=(nodeT **)MAlloc(nextnodelistlen*sizeof(nodeT **)); nextnodelist[0]=source; nextnodelistnext=1; regionnum=source->incost; /* find all nodes in current region and switch their regions */ while(nextnodelistnext){ from=nextnodelist[--nextnodelistnext]; from->incost=closestregion; arcnum=0; while((to=RegionsNeighborNode(from,&arcnum,nodes, &arcrow,&arccol,nrow,ncol))!=NULL){ if(to->incost==regionnum){ if(nextnodelistnext>=nextnodelistlen){ nextnodelistlen+=INITARRSIZE; nextnodelist=(nodeT **)ReAlloc(nextnodelist, nextnodelistlen*sizeof(nodeT *)); } nextnodelist[nextnodelistnext++]=to; } } } /* update size of region to which we are merging */ regionsizes[closestregion]+=regionsizes[regionnum]; /* free memory */ free(nextnodelist); } /* function: RenumberRegion() * -------------------------- * */ void RenumberRegion(nodeT **nodes, nodeT *source, long newnum, long nrow, long ncol){ long nextnodelistlen, nextnodelistnext, arcnum, arcrow, arccol, regionnum; nodeT *from, *to, **nextnodelist; /* initialize */ nextnodelistlen=INITARRSIZE; nextnodelist=(nodeT **)MAlloc(nextnodelistlen*sizeof(nodeT **)); nextnodelist[0]=source; nextnodelistnext=1; regionnum=source->incost; /* find all nodes in current region and switch their regions */ while(nextnodelistnext){ from=nextnodelist[--nextnodelistnext]; from->incost=newnum; arcnum=0; while((to=RegionsNeighborNode(from,&arcnum,nodes, &arcrow,&arccol,nrow,ncol))!=NULL){ if(to->incost==regionnum){ if(nextnodelistnext>=nextnodelistlen){ nextnodelistlen+=INITARRSIZE; nextnodelist=(nodeT **)ReAlloc(nextnodelist, nextnodelistlen*sizeof(nodeT *)); } nextnodelist[nextnodelistnext++]=to; } } } /* free memory */ free(nextnodelist); } /* function: AssembleTiles() * ------------------------- */ void AssembleTiles(outfileT *outfiles, paramT *params, long nlines, long linelen){ long tilerow, tilecol, ntilerow, ntilecol, ntiles, rowovrlp, colovrlp; long i, j, k, ni, nj, dummylong, costtypesize = 0; long nrow, ncol, prevnrow, prevncol, nextnrow, nextncol; long n, ncycle, nflowdone, nflow, candidatelistsize, candidatebagsize; long nnodes, maxnflowcycles, arclen, narcs, sourcetilenum, flowmax; long *totarclens; long ***scndrycosts; double avgarclen; float **unwphase, **nextunwphase, **lastunwphase, **tempunwphase; float *unwphaseabove, *unwphasebelow; void **costs, **nextcosts, **lastcosts, **tempcosts; void *costsabove, *costsbelow; short **scndryflows, **bulkoffsets, **regions, **nextregions, **lastregions; short **tempregions, *regionsbelow, *regionsabove; short *nscndrynodes, *nscndryarcs; incrcostT **incrcosts; totalcostT totalcost, oldtotalcost; nodeT *source; nodeT **scndrynodes, ***scndryapexes; signed char **iscandidate; signed char notfirstloop; candidateT *candidatebag, *candidatelist; nodesuppT **nodesupp; scndryarcT **scndryarcs; bucketT *bkts; char filename[MAXSTRLEN]; /* set up */ fprintf(sp1,"Assembling tiles\n"); ntilerow=params->ntilerow; ntilecol=params->ntilecol; ntiles=ntilerow*ntilecol; rowovrlp=params->rowovrlp; colovrlp=params->colovrlp; ni=ceil((nlines+(ntilerow-1)*rowovrlp)/(double )ntilerow); nj=ceil((linelen+(ntilecol-1)*colovrlp)/(double )ntilecol); nrow=0; ncol=0; flowmax=params->scndryarcflowmax; if(params->costmode==TOPO){ costtypesize=sizeof(costT); }else if(params->costmode==DEFO){ costtypesize=sizeof(costT); }else if(params->costmode==SMOOTH){ costtypesize=sizeof(smoothcostT); } /* get memory */ regions=(short **)Get2DMem(ni,nj,sizeof(short *),sizeof(short)); nextregions=(short **)Get2DMem(ni,nj,sizeof(short *),sizeof(short)); lastregions=(short **)Get2DMem(ni,nj,sizeof(short *),sizeof(short)); regionsbelow=(short *)MAlloc(nj*sizeof(short)); regionsabove=(short *)MAlloc(nj*sizeof(short)); unwphase=(float **)Get2DMem(ni,nj,sizeof(float *),sizeof(float)); nextunwphase=(float **)Get2DMem(ni,nj,sizeof(float *),sizeof(float)); lastunwphase=(float **)Get2DMem(ni,nj,sizeof(float *),sizeof(float)); unwphaseabove=(float *)MAlloc(nj*sizeof(float)); unwphasebelow=(float *)MAlloc(nj*sizeof(float)); scndrynodes=(nodeT **)MAlloc(ntiles*sizeof(nodeT *)); nodesupp=(nodesuppT **)MAlloc(ntiles*sizeof(nodesuppT *)); scndryarcs=(scndryarcT **)MAlloc(ntiles*sizeof(scndryarcT *)); scndrycosts=(long ***)MAlloc(ntiles*sizeof(long **)); nscndrynodes=(short *)MAlloc(ntiles*sizeof(short)); nscndryarcs=(short *)MAlloc(ntiles*sizeof(short)); totarclens=(long *)MAlloc(ntiles*sizeof(long)); bulkoffsets=(short **)Get2DMem(ntilerow,ntilecol,sizeof(short *), sizeof(short)); costs=(void **)Get2DRowColMem(ni+2,nj+2,sizeof(void *),costtypesize); nextcosts=(void **)Get2DRowColMem(ni+2,nj+2,sizeof(void *),costtypesize); lastcosts=(void **)Get2DRowColMem(ni+2,nj+2,sizeof(void *),costtypesize); costsabove=(void *)MAlloc(nj*costtypesize); costsbelow=(void *)MAlloc(nj*costtypesize); /* trace regions and parse secondary nodes and arcs for each tile */ bulkoffsets[0][0]=0; for(tilerow=0;tilerowmaxcyclefraction); while(TRUE){ fprintf(sp1,"Flow increment: %ld (Total improvements: %ld)\n", nflow,ncycle); /* set up the incremental (residual) cost arrays */ SetupIncrFlowCosts((void **)scndrycosts,incrcosts,scndryflows,nflow,ntiles, ntiles,nscndryarcs,params); /* set the tree root (equivalent to source of shortest path problem) */ sourcetilenum=(long )ntilecol*floor(ntilerow/2.0)+floor(ntilecol/2.0); source=&scndrynodes[sourcetilenum][0]; /* run the solver, and increment nflowdone if no cycles are found */ n=TreeSolve(scndrynodes,nodesupp,NULL,source,&candidatelist,&candidatebag, &candidatelistsize,&candidatebagsize,bkts,scndryflows, (void **)scndrycosts,incrcosts,scndryapexes,iscandidate,0, nflow,NULL,NULL,NULL,ntiles,nscndrynodes,ntiles,nscndryarcs, ntiles,0,NULL,params); /* evaluate and save the total cost (skip if first loop through nflow) */ if(notfirstloop){ oldtotalcost=totalcost; totalcost=EvaluateTotalCost((void **)scndrycosts,scndryflows,ntiles,0, nscndryarcs,params); if(totalcost>oldtotalcost || (n>0 && totalcost==oldtotalcost)){ fprintf(sp0,"Unexpected increase in total cost. Breaking loop\n"); break; } } /* consider this flow increment done if not too many neg cycles found */ ncycle+=n; if(n<=maxnflowcycles){ nflowdone++; }else{ nflowdone=1; } /* break if we're done with all flow increments or problem is convex */ if(nflowdone>=params->maxflow){ break; } /* update flow increment */ nflow++; if(nflow>params->maxflow){ nflow=1; notfirstloop=TRUE; } } /* end loop until no more neg cycles */ /* free some memory */ for(i=0;ibucketbase); /* integrate phase from secondary network problem */ IntegrateSecondaryFlows(linelen,nlines,scndrynodes,nodesupp,scndryarcs, nscndryarcs,scndryflows,bulkoffsets,outfiles,params); /* free remaining memory */ for(i=0;irmtmptile){ for(tilerow=0;tilerowtiledir,LOGFILEROOT,tilerow,tilecol); unlink(filename); } } rmdir(params->tiledir); } } /* function: ReadNextRegion() * -------------------------- */ void ReadNextRegion(long tilerow, long tilecol, long nlines, long linelen, outfileT *outfiles, paramT *params, short ***nextregionsptr, float ***nextunwphaseptr, void ***nextcostsptr, long *nextnrowptr, long *nextncolptr){ long nexttilelinelen, nexttilenlines, costtypesize=0; tileparamT nexttileparams[1]; outfileT nexttileoutfiles[1]; char nextfile[MAXSTRLEN], tempstring[MAXTMPSTRLEN]; char path[MAXSTRLEN], basename[MAXSTRLEN]; /* size of the data type for holding cost data depends on cost mode */ if(params->costmode==TOPO){ costtypesize=sizeof(costT); }else if(params->costmode==DEFO){ costtypesize=sizeof(costT); }else if(params->costmode==SMOOTH){ costtypesize=sizeof(smoothcostT); } /* use SetupTile() to set filenames only; tile params overwritten below */ SetupTile(nlines,linelen,params,nexttileparams,outfiles,nexttileoutfiles, tilerow,tilecol); nexttilenlines=nexttileparams->nrow; nexttilelinelen=nexttileparams->ncol; /* set tile parameters, overwriting values set by SetupTile() above */ SetTileReadParams(nexttileparams,nexttilenlines,nexttilelinelen, tilerow,tilecol,nlines,linelen,params); /* read region data */ ParseFilename(outfiles->outfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld%s", params->tiledir,TMPTILEROOT,basename,tilerow,tilecol, nexttilelinelen,REGIONSUFFIX); StrNCopy(nextfile,tempstring,MAXSTRLEN); Read2DArray((void ***)nextregionsptr,nextfile, nexttilelinelen,nexttilenlines, nexttileparams,sizeof(short *),sizeof(short)); /* read unwrapped phase data */ if(TMPTILEOUTFORMAT==ALT_LINE_DATA){ ReadAltLineFilePhase(nextunwphaseptr,nexttileoutfiles->outfile, nexttilelinelen,nexttilenlines,nexttileparams); }else if(TMPTILEOUTFORMAT==FLOAT_DATA){ Read2DArray((void ***)nextunwphaseptr,nexttileoutfiles->outfile, nexttilelinelen,nexttilenlines,nexttileparams, sizeof(float *),sizeof(float)); }else{ fprintf(sp0,"Cannot read format of unwrapped phase tile data\nAbort\n"); exit(ABNORMAL_EXIT); } /* read cost data */ if(params->p<0){ Read2DRowColFile((void ***)nextcostsptr,nexttileoutfiles->costoutfile, nexttilelinelen,nexttilenlines,nexttileparams, costtypesize); }else{ fprintf(sp0,"Tile reassembly not enabled in Lp mode\nAbort\n"); exit(ABNORMAL_EXIT); } /* flip sign of wrapped phase if flip flag is set */ FlipPhaseArraySign(*nextunwphaseptr,params, nexttileparams->nrow,nexttileparams->ncol); /* set outputs */ (*nextnrowptr)=nexttileparams->nrow; (*nextncolptr)=nexttileparams->ncol; } /* function: SetTileReadParams() * ----------------------------- * Set parameters for reading the nonoverlapping piece of each tile. * ni and nj are the numbers of rows and columns in this particular tile. * The meanings of these variables are different for the last row * and column. */ void SetTileReadParams(tileparamT *tileparams, long nexttilenlines, long nexttilelinelen, long tilerow, long tilecol, long nlines, long linelen, paramT *params){ long rowovrlp, colovrlp; /* set temporary variables */ rowovrlp=params->rowovrlp; colovrlp=params->colovrlp; /* row parameters */ if(tilerow==0){ tileparams->firstrow=0; }else{ tileparams->firstrow=ceil(rowovrlp/2.0); } if(tilerow!=params->ntilerow-1){ tileparams->nrow=nexttilenlines-floor(rowovrlp/2.0)-tileparams->firstrow; }else{ tileparams->nrow=nexttilenlines-tileparams->firstrow; } /* column parameters */ if(tilecol==0){ tileparams->firstcol=0; }else{ tileparams->firstcol=ceil(colovrlp/2.0); } if(tilecol!=params->ntilecol-1){ tileparams->ncol=nexttilelinelen-floor(colovrlp/2.0)-tileparams->firstcol; }else{ tileparams->ncol=nexttilelinelen-tileparams->firstcol; } } /* function: ReadEdgesAboveAndBelow() * ---------------------------------- */ void ReadEdgesAboveAndBelow(long tilerow, long tilecol, long nlines, long linelen, paramT *params, outfileT *outfiles, short *regionsabove, short *regionsbelow, float *unwphaseabove, float *unwphasebelow, void *costsabove, void *costsbelow){ long ni, nj, readtilelinelen, readtilenlines, costtypesize=0; long ntilerow, ntilecol, rowovrlp, colovrlp; tileparamT tileparams[1]; outfileT outfilesabove[1], outfilesbelow[1]; float **unwphaseaboveptr, **unwphasebelowptr; void **costsaboveptr, **costsbelowptr; short **regionsaboveptr, **regionsbelowptr; char tempstring[MAXTMPSTRLEN], readregionfile[MAXSTRLEN]; char path[MAXSTRLEN], basename[MAXSTRLEN]; /* set temporary variables */ ntilerow=params->ntilerow; ntilecol=params->ntilecol; rowovrlp=params->rowovrlp; colovrlp=params->colovrlp; ni=ceil((nlines+(ntilerow-1)*rowovrlp)/(double )ntilerow); nj=ceil((linelen+(ntilecol-1)*colovrlp)/(double )ntilecol); /* size of the data type for holding cost data depends on cost mode */ if(params->costmode==TOPO){ costtypesize=sizeof(costT); }else if(params->costmode==DEFO){ costtypesize=sizeof(costT); }else if(params->costmode==SMOOTH){ costtypesize=sizeof(smoothcostT); } /* set names of files with SetupTile() */ /* tile parameters set by SetupTile() will be overwritten below */ if(tilerow!=0){ SetupTile(nlines,linelen,params,tileparams,outfiles,outfilesabove, tilerow-1,tilecol); } if(tilerow!=ntilerow-1){ SetupTile(nlines,linelen,params,tileparams,outfiles,outfilesbelow, tilerow+1,tilecol); } /* temporary pointers, so we can use Read2DArray() with 1D output array */ unwphaseaboveptr=&unwphaseabove; unwphasebelowptr=&unwphasebelow; costsaboveptr=&costsabove; costsbelowptr=&costsbelow; regionsaboveptr=®ionsabove; regionsbelowptr=®ionsbelow; /* set some reading parameters */ if(tilecol==0){ tileparams->firstcol=0; }else{ tileparams->firstcol=ceil(colovrlp/2.0); } if(tilecol!=params->ntilecol-1){ readtilelinelen=nj; tileparams->ncol=readtilelinelen-floor(colovrlp/2.0)-tileparams->firstcol; }else{ readtilelinelen=linelen-(ntilecol-1)*(nj-colovrlp); tileparams->ncol=readtilelinelen-tileparams->firstcol; } tileparams->nrow=1; /* read last line of tile above */ readtilenlines=ni; if(tilerow!=0){ tileparams->firstrow=readtilenlines-floor(rowovrlp/2.0)-1; /* read region data */ ParseFilename(outfiles->outfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld%s", params->tiledir,TMPTILEROOT,basename,tilerow-1,tilecol, readtilelinelen,REGIONSUFFIX); StrNCopy(readregionfile,tempstring,MAXSTRLEN); Read2DArray((void ***)®ionsaboveptr,readregionfile, readtilelinelen,readtilenlines, tileparams,sizeof(short *),sizeof(short)); /* read unwrapped phase data */ if(TMPTILEOUTFORMAT==ALT_LINE_DATA){ ReadAltLineFilePhase(&unwphaseaboveptr,outfilesabove->outfile, readtilelinelen,readtilenlines,tileparams); }else if(TMPTILEOUTFORMAT==FLOAT_DATA){ Read2DArray((void ***)&unwphaseaboveptr,outfilesabove->outfile, readtilelinelen,readtilenlines,tileparams, sizeof(float *),sizeof(float)); } /* flip sign of wrapped phase if flip flag is set */ FlipPhaseArraySign(unwphaseaboveptr,params, tileparams->nrow,tileparams->ncol); /* read costs data */ tileparams->firstrow--; Read2DRowColFileRows((void ***)&costsaboveptr,outfilesabove->costoutfile, readtilelinelen,readtilenlines,tileparams, costtypesize); /* remove temporary tile cost file unless told to save it */ if(params->rmtmptile && !strlen(outfiles->costoutfile)){ unlink(outfilesabove->costoutfile); } } /* read first line of tile below */ if(tilerow!=ntilerow-1){ if(tilerow==params->ntilerow-2){ readtilenlines=nlines-(ntilerow-1)*(ni-rowovrlp); } tileparams->firstrow=ceil(rowovrlp/2.0); /* read region data */ ParseFilename(outfiles->outfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld%s", params->tiledir,TMPTILEROOT,basename,tilerow+1,tilecol, readtilelinelen,REGIONSUFFIX); StrNCopy(readregionfile,tempstring,MAXSTRLEN); Read2DArray((void ***)®ionsbelowptr,readregionfile, readtilelinelen,readtilenlines, tileparams,sizeof(short *),sizeof(short)); /* read unwrapped phase data */ if(TMPTILEOUTFORMAT==ALT_LINE_DATA){ ReadAltLineFilePhase(&unwphasebelowptr,outfilesbelow->outfile, readtilelinelen,readtilenlines,tileparams); }else if(TMPTILEOUTFORMAT==FLOAT_DATA){ Read2DArray((void ***)&unwphasebelowptr,outfilesbelow->outfile, readtilelinelen,readtilenlines,tileparams, sizeof(float *),sizeof(float)); } /* flip the sign of the wrapped phase if flip flag is set */ FlipPhaseArraySign(unwphasebelowptr,params, tileparams->nrow,tileparams->ncol); /* read costs data */ Read2DRowColFileRows((void ***)&costsbelowptr,outfilesbelow->costoutfile, readtilelinelen,readtilenlines,tileparams, costtypesize); }else{ /* remove temporoary tile cost file for last row unless told to save it */ if(params->rmtmptile && !strlen(outfiles->costoutfile)){ SetupTile(nlines,linelen,params,tileparams,outfiles,outfilesbelow, tilerow,tilecol); unlink(outfilesbelow->costoutfile); } } } /* function: TraceRegions() * ------------------------ * Trace edges of region data to form nodes and arcs of secondary * (ie, region-level) network problem. Primary nodes and arcs are * those of the original, pixel-level network problem. Flows along * edges are computed knowing the unwrapped phase values of edges * of adjacent tiles. Costs along edges are approximated in that they * are calculated from combining adjacent cost parameters, not from * using the exact method in BuildCostArrays(). */ void TraceRegions(short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, float **unwphase, float **nextunwphase, float **lastunwphase, float *unwphaseabove, float *unwphasebelow, void **costs, void **nextcosts, void **lastcosts, void *costsabove, void *costsbelow, long prevnrow, long prevncol, long tilerow, long tilecol, long nrow, long ncol, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, long ***scndrycosts, short *nscndrynodes, short *nscndryarcs, long *totarclens, short **bulkoffsets, paramT *params){ long i, j, row, col, nnrow, nncol, tilenum, costtypesize = 0; long nnewnodes, nnewarcs, npathsout, flowmax, totarclen; long nupdatednontilenodes, updatednontilenodesize, ntilecol; short **flows; short **rightedgeflows, **loweredgeflows, **leftedgeflows, **upperedgeflows; short *inontilenodeoutarc; void **rightedgecosts, **loweredgecosts, **leftedgecosts, **upperedgecosts; nodeT **primarynodes, **updatednontilenodes; nodeT *from, *to, *nextnode, *tempnode; nodesuppT *fromsupp, *tosupp; /* initialize */ ntilecol=params->ntilecol; nnrow=nrow+1; nncol=ncol+1; primarynodes=(nodeT **)Get2DMem(nnrow,nncol,sizeof(nodeT *),sizeof(nodeT)); for(row=0;rowscndryarcflowmax; updatednontilenodesize=INITARRSIZE; nupdatednontilenodes=0; /* size of the data type for holding cost data depends on cost mode */ if(params->costmode==TOPO){ costtypesize=sizeof(costT); }else if(params->costmode==DEFO){ costtypesize=sizeof(costT); }else if(params->costmode==SMOOTH){ costtypesize=sizeof(smoothcostT); } /* get memory */ updatednontilenodes=(nodeT **)MAlloc(updatednontilenodesize*sizeof(nodeT *)); inontilenodeoutarc=(short *)MAlloc(updatednontilenodesize*sizeof(short)); flows=(short **)Get2DRowColMem(nrow+1,ncol+1,sizeof(short *),sizeof(short)); rightedgeflows=(short **)Get2DMem(nrow,1,sizeof(short *),sizeof(short)); leftedgeflows=(short **)Get2DMem(nrow,1,sizeof(short *),sizeof(short)); upperedgeflows=(short **)Get2DMem(1,ncol,sizeof(short *),sizeof(short)); loweredgeflows=(short **)Get2DMem(1,ncol,sizeof(short *),sizeof(short)); rightedgecosts=(void **)Get2DMem(nrow,1,sizeof(void *),costtypesize); leftedgecosts=(void **)Get2DMem(nrow,1,sizeof(void *),costtypesize); upperedgecosts=(void **)Get2DMem(1,ncol,sizeof(void *),costtypesize); loweredgecosts=(void **)Get2DMem(1,ncol,sizeof(void *),costtypesize); /* parse flows for this tile */ CalcFlow(unwphase,&flows,nrow,ncol); /* set up cost and flow arrays for boundaries */ SetUpperEdge(ncol,tilerow,tilecol,costs,costsabove,unwphase,unwphaseabove, upperedgecosts,upperedgeflows,params, bulkoffsets); SetLowerEdge(nrow,ncol,tilerow,tilecol,costs,costsbelow,unwphase, unwphasebelow,loweredgecosts,loweredgeflows, params,bulkoffsets); SetLeftEdge(nrow,prevncol,tilerow,tilecol,costs,lastcosts,unwphase, lastunwphase,leftedgecosts,leftedgeflows,params, bulkoffsets); SetRightEdge(nrow,ncol,tilerow,tilecol,costs,nextcosts,unwphase, nextunwphase,rightedgecosts,rightedgeflows, params,bulkoffsets); /* trace edges between regions */ while(nextnode!=NULL){ /* get next primary node from stack */ from=nextnode; nextnode=nextnode->next; from->group=NOTINBUCKET; /* find number of paths out of from node */ npathsout=FindNumPathsOut(from,params,tilerow,tilecol,nnrow,nncol,regions, nextregions,lastregions,regionsabove, regionsbelow,prevncol); /* secondary node exists if region edges fork */ if(npathsout>2){ /* mark primary node to indicate that secondary node exists for it */ from->group=ONTREE; /* create secondary node if not already created in another tile */ if((from->row!=0 || tilerow==0) && (from->col!=0 || tilecol==0)){ /* create the secondary node */ nnewnodes++; scndrynodes[tilenum]=(nodeT *)ReAlloc(scndrynodes[tilenum], nnewnodes*sizeof(nodeT)); nodesupp[tilenum]=(nodesuppT *)ReAlloc(nodesupp[tilenum], nnewnodes*sizeof(nodesuppT)); scndrynodes[tilenum][nnewnodes-1].row=tilenum; scndrynodes[tilenum][nnewnodes-1].col=nnewnodes-1; nodesupp[tilenum][nnewnodes-1].row=from->row; nodesupp[tilenum][nnewnodes-1].col=from->col; nodesupp[tilenum][nnewnodes-1].noutarcs=0; nodesupp[tilenum][nnewnodes-1].neighbornodes=NULL; nodesupp[tilenum][nnewnodes-1].outarcs=NULL; } /* create the secondary arc to this node if it doesn't already exist */ if(from->pred!=NULL && ((from->row==from->pred->row && (from->row!=0 || tilerow==0)) || (from->col==from->pred->col && (from->col!=0 || tilecol==0)))){ TraceSecondaryArc(from,scndrynodes,nodesupp,scndryarcs,scndrycosts, &nnewnodes,&nnewarcs,tilerow,tilecol,flowmax, nrow,ncol,prevnrow,prevncol,params,costs, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,flows,rightedgeflows,loweredgeflows, leftedgeflows,upperedgeflows,&updatednontilenodes, &nupdatednontilenodes,&updatednontilenodesize, &inontilenodeoutarc,&totarclen); } } /* scan neighboring primary nodes and place path candidates into stack */ RegionTraceCheckNeighbors(from,&nextnode,primarynodes,regions, nextregions,lastregions,regionsabove, regionsbelow,tilerow,tilecol,nnrow,nncol, scndrynodes,nodesupp,scndryarcs,&nnewnodes, &nnewarcs,flowmax,nrow,ncol,prevnrow,prevncol, params,costs,rightedgecosts,loweredgecosts, leftedgecosts,upperedgecosts,flows, rightedgeflows,loweredgeflows,leftedgeflows, upperedgeflows,scndrycosts,&updatednontilenodes, &nupdatednontilenodes,&updatednontilenodesize, &inontilenodeoutarc,&totarclen); } /* reset temporary secondary node and arc pointers in data structures */ /* secondary node row, col stored level, incost of primary node pointed to */ /* update nodes in this tile */ for(i=0;ilevel][tempnode->incost]; } } /* update nodes not in this tile that were affected (that have new arcs) */ for(i=0;irow; col=updatednontilenodes[i]->col; j=inontilenodeoutarc[i]; tempnode=nodesupp[row][col].neighbornodes[j]; nodesupp[row][col].neighbornodes[j] =&scndrynodes[tempnode->level][tempnode->incost]; } /* update secondary arcs */ for(i=0;ilevel][tempnode->incost]; from=scndryarcs[tilenum][i].from; tempnode=scndryarcs[tilenum][i].to; scndryarcs[tilenum][i].to =&scndrynodes[tempnode->level][tempnode->incost]; to=scndryarcs[tilenum][i].to; /* update secondary arc pointers in nodesupp strcutres */ fromsupp=&nodesupp[from->row][from->col]; j=0; while(fromsupp->neighbornodes[j]!=to){ j++; } fromsupp->outarcs[j]=&scndryarcs[tilenum][i]; tosupp=&nodesupp[to->row][to->col]; j=0; while(tosupp->neighbornodes[j]!=from){ j++; } tosupp->outarcs[j]=&scndryarcs[tilenum][i]; } /* set outputs */ nscndrynodes[tilenum]=nnewnodes; nscndryarcs[tilenum]=nnewarcs; totarclens[tilenum]=totarclen; /* free memory */ Free2DArray((void **)primarynodes,nnrow); Free2DArray((void **)flows,2*nrow-1); Free2DArray((void **)rightedgeflows,nrow); Free2DArray((void **)leftedgeflows,nrow); Free2DArray((void **)upperedgeflows,1); Free2DArray((void **)loweredgeflows,1); Free2DArray((void **)rightedgecosts,nrow); Free2DArray((void **)leftedgecosts,nrow); Free2DArray((void **)upperedgecosts,1); Free2DArray((void **)loweredgecosts,1); } /* function: FindNumPathsOut() * --------------------------- * Check all outgoing arcs to see how many paths out there are. */ long FindNumPathsOut(nodeT *from, paramT *params, long tilerow, long tilecol, long nnrow, long nncol, short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, long prevncol){ long npathsout, ntilerow, ntilecol, fromrow, fromcol; /* initialize */ ntilerow=params->ntilerow; ntilecol=params->ntilecol; fromrow=from->row; fromcol=from->col; npathsout=0; /* rightward arc */ if(fromcol!=nncol-1){ if(fromrow==0 || fromrow==nnrow-1 || regions[fromrow-1][fromcol]!=regions[fromrow][fromcol]){ npathsout++; } }else{ if(fromrow==0 || fromrow==nnrow-1 || (tilecol!=ntilecol-1 && nextregions[fromrow-1][0]!=nextregions[fromrow][0])){ npathsout++; } } /* downward arc */ if(fromrow!=nnrow-1){ if(fromcol==0 || fromcol==nncol-1 || regions[fromrow][fromcol]!=regions[fromrow][fromcol-1]){ npathsout++; } }else{ if(fromcol==0 || fromcol==nncol-1 || (tilerow!=ntilerow-1 && regionsbelow[fromcol]!=regionsbelow[fromcol-1])){ npathsout++; } } /* leftward arc */ if(fromcol!=0){ if(fromrow==0 || fromrow==nnrow-1 || regions[fromrow][fromcol-1]!=regions[fromrow-1][fromcol-1]){ npathsout++; } }else{ if(fromrow==0 || fromrow==nnrow-1 || (tilecol!=0 && (lastregions[fromrow][prevncol-1] !=lastregions[fromrow-1][prevncol-1]))){ npathsout++; } } /* upward arc */ if(fromrow!=0){ if(fromcol==0 || fromcol==nncol-1 || regions[fromrow-1][fromcol-1]!=regions[fromrow-1][fromcol]){ npathsout++; } }else{ if(fromcol==0 || fromcol==nncol-1 || (tilerow!=0 && regionsabove[fromcol-1]!=regionsabove[fromcol])){ npathsout++; } } /* return number of paths out of node */ return(npathsout); } /* function: RegionTraceCheckNeighbors() * ------------------------------------- */ void RegionTraceCheckNeighbors(nodeT *from, nodeT **nextnodeptr, nodeT **primarynodes, short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, long tilerow, long tilecol, long nnrow, long nncol, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, long *nnewnodesptr, long *nnewarcsptr, long flowmax, long nrow, long ncol, long prevnrow, long prevncol, paramT *params, void **costs, void **rightedgecosts, void **loweredgecosts, void **leftedgecosts, void **upperedgecosts, short **flows, short **rightedgeflows, short **loweredgeflows, short **leftedgeflows, short **upperedgeflows, long ***scndrycosts, nodeT ***updatednontilenodesptr, long *nupdatednontilenodesptr, long *updatednontilenodesizeptr, short **inontilenodeoutarcptr, long *totarclenptr){ long fromrow, fromcol; nodeT *to, *nextnode; /* initialize */ fromrow=from->row; fromcol=from->col; nextnode=(*nextnodeptr); /* check rightward arc */ if(fromcol!=nncol-1){ to=&primarynodes[fromrow][fromcol+1]; if(fromrow==0 || fromrow==nnrow-1 || regions[fromrow-1][fromcol]!=regions[fromrow][fromcol]){ if(to!=from->pred){ to->pred=from; if(to->group==NOTINBUCKET){ to->group=INBUCKET; to->next=nextnode; nextnode=to; }else if(to->group==ONTREE && (fromrow!=0 || tilerow==0)){ TraceSecondaryArc(to,scndrynodes,nodesupp,scndryarcs,scndrycosts, nnewnodesptr,nnewarcsptr,tilerow,tilecol,flowmax, nrow,ncol,prevnrow,prevncol,params,costs, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,flows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); } } } } /* check downward arc */ if(fromrow!=nnrow-1){ to=&primarynodes[fromrow+1][fromcol]; if(fromcol==0 || fromcol==nncol-1 || regions[fromrow][fromcol]!=regions[fromrow][fromcol-1]){ if(to!=from->pred){ to->pred=from; if(to->group==NOTINBUCKET){ to->group=INBUCKET; to->next=nextnode; nextnode=to; }else if(to->group==ONTREE && (fromcol!=0 || tilecol==0)){ TraceSecondaryArc(to,scndrynodes,nodesupp,scndryarcs,scndrycosts, nnewnodesptr,nnewarcsptr,tilerow,tilecol,flowmax, nrow,ncol,prevnrow,prevncol,params,costs, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,flows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); } } } } /* check leftward arc */ if(fromcol!=0){ to=&primarynodes[fromrow][fromcol-1]; if(fromrow==0 || fromrow==nnrow-1 || regions[fromrow][fromcol-1]!=regions[fromrow-1][fromcol-1]){ if(to!=from->pred){ to->pred=from; if(to->group==NOTINBUCKET){ to->group=INBUCKET; to->next=nextnode; nextnode=to; }else if(to->group==ONTREE && (fromrow!=0 || tilerow==0)){ TraceSecondaryArc(to,scndrynodes,nodesupp,scndryarcs,scndrycosts, nnewnodesptr,nnewarcsptr,tilerow,tilecol,flowmax, nrow,ncol,prevnrow,prevncol,params,costs, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,flows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); } } } } /* check upward arc */ if(fromrow!=0){ to=&primarynodes[fromrow-1][fromcol]; if(fromcol==0 || fromcol==nncol-1 || regions[fromrow-1][fromcol-1]!=regions[fromrow-1][fromcol]){ if(to!=from->pred){ to->pred=from; if(to->group==NOTINBUCKET){ to->group=INBUCKET; to->next=nextnode; nextnode=to; }else if(to->group==ONTREE && (fromcol!=0 || tilecol==0)){ TraceSecondaryArc(to,scndrynodes,nodesupp,scndryarcs,scndrycosts, nnewnodesptr,nnewarcsptr,tilerow,tilecol,flowmax, nrow,ncol,prevnrow,prevncol,params,costs, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,flows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); } } } } /* set return values */ *nextnodeptr=nextnode; } /* function: SetUpperEdge() * ------------------------ */ void SetUpperEdge(long ncol, long tilerow, long tilecol, void **voidcosts, void *voidcostsabove, float **unwphase, float *unwphaseabove, void **voidupperedgecosts, short **upperedgeflows, paramT *params, short **bulkoffsets){ long col, reloffset; double dphi, dpsi; costT **upperedgecosts, **costs, *costsabove; smoothcostT **upperedgesmoothcosts, **smoothcosts, *smoothcostsabove; long nshortcycle; /* typecast generic pointers to costT pointers */ upperedgecosts=(costT **)voidupperedgecosts; costs=(costT **)voidcosts; costsabove=(costT *)voidcostsabove; upperedgesmoothcosts=(smoothcostT **)voidupperedgecosts; smoothcosts=(smoothcostT **)voidcosts; smoothcostsabove=(smoothcostT *)voidcostsabove; /* see if tile is in top row */ if(tilerow!=0){ /* set up */ nshortcycle=params->nshortcycle; reloffset=bulkoffsets[tilerow-1][tilecol]-bulkoffsets[tilerow][tilecol]; /* loop over all arcs on the boundary */ for(col=0;col0.5){ dpsi-=1.0; } if(params->costmode==TOPO || params->costmode==DEFO){ upperedgecosts[0][col].offset=nshortcycle*dpsi; upperedgecosts[0][col].sigsq=ceil((costs[0][col].sigsq +costsabove[col].sigsq)/2.0); if(costs[0][col].dzmax>costsabove[col].dzmax){ upperedgecosts[0][col].dzmax=costs[0][col].dzmax; }else{ upperedgecosts[0][col].dzmax=costsabove[col].dzmax; } if(costs[0][col].laycostcostmode==SMOOTH){ upperedgesmoothcosts[0][col].offset=nshortcycle*dpsi; upperedgesmoothcosts[0][col].sigsq= ceil((smoothcosts[0][col].sigsq+smoothcostsabove[col].sigsq)/2.0); }else{ fprintf(sp0,"Illegal cost mode in SetUpperEdge(). This is a bug.\n"); exit(ABNORMAL_EXIT); } } }else{ if(params->costmode==TOPO || params->costmode==DEFO){ for(col=0;colcostmode==SMOOTH){ for(col=0;colntilerow-1){ /* set up */ nshortcycle=params->nshortcycle; flowlimhi=LARGESHORT; flowlimlo=-LARGESHORT; flowhistogram=(long *)CAlloc(flowlimhi-flowlimlo+1,sizeof(long)); minflow=flowlimhi; maxflow=flowlimlo; /* loop over all arcs on the boundary */ for(col=0;colmaxflow){ if(tempflow>flowlimhi){ fprintf(sp0,"Overflow in tile offset\nAbort\n"); exit(ABNORMAL_EXIT); } maxflow=tempflow; } flowhistogram[tempflow-flowlimlo]++; dpsi=dphi-floor(dphi); if(dpsi>0.5){ dpsi-=1.0; } if(params->costmode==TOPO || params->costmode==DEFO){ loweredgecosts[0][col].offset=nshortcycle*dpsi; loweredgecosts[0][col].sigsq=ceil((costs[nrow-2][col].sigsq +costsbelow[col].sigsq)/2.0); if(costs[nrow-2][col].dzmax>costsbelow[col].dzmax){ loweredgecosts[0][col].dzmax=costs[nrow-2][col].dzmax; }else{ loweredgecosts[0][col].dzmax=costsbelow[col].dzmax; } if(costs[nrow-2][col].laycostcostmode==SMOOTH){ loweredgesmoothcosts[0][col].offset=nshortcycle*dpsi; loweredgesmoothcosts[0][col].sigsq= ceil((smoothcosts[nrow-2][col].sigsq +smoothcostsbelow[col].sigsq)/2.0); }else{ fprintf(sp0,"Illegal cost mode in SetLowerEdge(). This is a bug.\n"); exit(ABNORMAL_EXIT); } } /* set bulk tile offset equal to mode of flow histogram */ nmax=0; reloffset=0; for(iflow=minflow;iflow<=maxflow;iflow++){ if(flowhistogram[iflow-flowlimlo]>nmax){ nmax=flowhistogram[iflow-flowlimlo]; reloffset=iflow; } } bulkoffsets[tilerow+1][tilecol]=bulkoffsets[tilerow][tilecol]-reloffset; /* subtract relative tile offset from edge flows */ for(col=0;colcostmode==TOPO || params->costmode==DEFO){ for(col=0;colcostmode==SMOOTH){ for(col=0;colnshortcycle; reloffset=bulkoffsets[tilerow][tilecol]-bulkoffsets[tilerow][tilecol-1]; /* loop over all arcs on the boundary */ for(row=0;row0.5){ dpsi-=1.0; } if(params->costmode==TOPO || params->costmode==DEFO){ leftedgecosts[row][0].offset=(TILEDPSICOLFACTOR*nshortcycle*dpsi); leftedgecosts[row][0].sigsq= ceil((costs[row+nrow-1][0].sigsq +lastcosts[row+nrow-1][prevncol-2].sigsq)/2.0); if(costs[row+nrow-1][0].dzmax>lastcosts[row+nrow-1][prevncol-2].dzmax){ leftedgecosts[row][0].dzmax=costs[row+nrow-1][0].dzmax; }else{ leftedgecosts[row][0].dzmax=lastcosts[row+nrow-1][prevncol-2].dzmax; } if(costs[row+nrow-1][0].laycost >lastcosts[row+nrow-1][prevncol-2].laycost){ leftedgecosts[row][0].laycost=costs[row+nrow-1][0].laycost; }else{ leftedgecosts[row][0].laycost =lastcosts[row+nrow-1][prevncol-2].laycost; } }else if(params->costmode==SMOOTH){ leftedgesmoothcosts[row][0].offset =(TILEDPSICOLFACTOR*nshortcycle*dpsi); leftedgesmoothcosts[row][0].sigsq= ceil((smoothcosts[row+nrow-1][0].sigsq +lastsmoothcosts[row+nrow-1][prevncol-2].sigsq)/2.0); }else{ fprintf(sp0,"Illegal cost mode in SetLeftEdge(). This is a bug.\n"); exit(ABNORMAL_EXIT); } } }else{ if(params->costmode==TOPO || params->costmode==DEFO){ for(row=0;rowcostmode==SMOOTH){ for(row=0;rowntilecol-1){ /* set up */ nshortcycle=params->nshortcycle; flowlimhi=LARGESHORT; flowlimlo=-LARGESHORT; flowhistogram=(long *)CAlloc(flowlimhi-flowlimlo+1,sizeof(long)); minflow=flowlimhi; maxflow=flowlimlo; /* loop over all arcs on the boundary */ for(row=0;rowmaxflow){ if(tempflow>flowlimhi){ fprintf(sp0,"Overflow in tile offset\nAbort\n"); exit(ABNORMAL_EXIT); } maxflow=tempflow; } flowhistogram[tempflow-flowlimlo]++; dpsi=dphi-floor(dphi); if(dpsi>0.5){ dpsi-=1.0; } if(params->costmode==TOPO || params->costmode==DEFO){ rightedgecosts[row][0].offset=(TILEDPSICOLFACTOR*nshortcycle*dpsi); rightedgecosts[row][0].sigsq =ceil((costs[row+nrow-1][ncol-2].sigsq +nextcosts[row+nrow-1][0].sigsq)/2.0); if(costs[row+nrow-1][ncol-2].dzmax>nextcosts[row+nrow-1][0].dzmax){ rightedgecosts[row][0].dzmax=costs[row+nrow-1][ncol-2].dzmax; }else{ rightedgecosts[row][0].dzmax=nextcosts[row+nrow-1][0].dzmax; } if(costs[row+nrow-1][ncol-2].laycost>nextcosts[row+nrow-1][0].laycost){ rightedgecosts[row][0].laycost=costs[row+nrow-1][ncol-2].laycost; }else{ rightedgecosts[row][0].laycost=nextcosts[row+nrow-1][0].laycost; } }else if(params->costmode==SMOOTH){ rightedgesmoothcosts[row][0].offset =(TILEDPSICOLFACTOR*nshortcycle*dpsi); rightedgesmoothcosts[row][0].sigsq =ceil((smoothcosts[row+nrow-1][ncol-2].sigsq +nextsmoothcosts[row+nrow-1][0].sigsq)/2.0); }else{ fprintf(sp0,"Illegal cost mode in SetRightEdge(). This is a bug.\n"); exit(ABNORMAL_EXIT); } } /* set bulk tile offset equal to mode of flow histogram */ if(tilerow==0){ nmax=0; reloffset=0; for(iflow=minflow;iflow<=maxflow;iflow++){ if(flowhistogram[iflow-flowlimlo]>nmax){ nmax=flowhistogram[iflow-flowlimlo]; reloffset=iflow; } } bulkoffsets[tilerow][tilecol+1]=bulkoffsets[tilerow][tilecol]+reloffset; }else{ reloffset=bulkoffsets[tilerow][tilecol+1]-bulkoffsets[tilerow][tilecol]; } /* subtract relative tile offset from edge flows */ for(row=0;rowcostmode==TOPO || params->costmode==DEFO){ for(row=0;rowcostmode==SMOOTH){ for(row=0;rowpred==NULL || (tilerow!=0 && primaryhead->row==0 && primaryhead->pred->row==0) || (tilecol!=0 && primaryhead->col==0 && primaryhead->pred->col==0)){ return; } /* set up */ ntilerow=params->ntilerow; ntilecol=params->ntilecol; nnrow=nrow+1; nncol=ncol+1; tilenum=tilerow*ntilecol+tilecol; scndrycostarr=(long *)MAlloc((2*flowmax+2)*sizeof(long)); tileedgearcweight=params->tileedgeweight; nshortcycle=params->nshortcycle; zerocost=FALSE; arroffset=0; /* loop to determine appropriate value for arroffset */ while(TRUE){ /* initialize variables */ arclen=0; sumsigsqinv=0; for(nflow=1;nflow<=2*flowmax;nflow++){ scndrycostarr[nflow]=0; } /* loop over primary arcs on secondary arc again to get costs */ primarytail=primaryhead->pred; tempnode=primaryhead; while(TRUE){ /* get primary arc just traversed */ arclen++; if(tempnode->col==primarytail->col+1){ /* rightward arc */ primaryarcdir=1; primaryarccol=primarytail->col; if(primarytail->row==0){ /* top edge */ if(tilerow==0){ zerocost=TRUE; }else{ primaryarcrow=0; costs=upperedgecosts; flows=upperedgeflows; calccostnrow=2; } }else if(primarytail->row==nnrow-1){ /* bottom edge */ if(tilerow==ntilerow-1){ zerocost=TRUE; }else{ primaryarcrow=0; costs=loweredgecosts; flows=loweredgeflows; calccostnrow=2; } }else{ /* normal arc */ primaryarcrow=primarytail->row-1; costs=tilecosts; flows=tileflows; calccostnrow=nrow; } }else if(tempnode->row==primarytail->row+1){ /* downward arc */ primaryarcdir=1; if(primarytail->col==0){ /* left edge */ if(tilecol==0){ zerocost=TRUE; }else{ primaryarcrow=primarytail->row; primaryarccol=0; costs=leftedgecosts; flows=leftedgeflows; calccostnrow=0; } }else if(primarytail->col==nncol-1){ /* right edge */ if(tilecol==ntilecol-1){ zerocost=TRUE; }else{ primaryarcrow=primarytail->row; primaryarccol=0; costs=rightedgecosts; flows=rightedgeflows; calccostnrow=0; } }else{ /* normal arc */ primaryarcrow=primarytail->row+nrow-1; primaryarccol=primarytail->col-1; costs=tilecosts; flows=tileflows; calccostnrow=nrow; } }else if(tempnode->col==primarytail->col-1){ /* leftward arc */ primaryarcdir=-1; primaryarccol=primarytail->col-1; if(primarytail->row==0){ /* top edge */ if(tilerow==0){ zerocost=TRUE; }else{ primaryarcrow=0; costs=upperedgecosts; flows=upperedgeflows; calccostnrow=2; } }else if(primarytail->row==nnrow-1){ /* bottom edge */ if(tilerow==ntilerow-1){ zerocost=TRUE; }else{ primaryarcrow=0; costs=loweredgecosts; flows=loweredgeflows; calccostnrow=2; } }else{ /* normal arc */ primaryarcrow=primarytail->row-1; costs=tilecosts; flows=tileflows; calccostnrow=nrow; } }else{ /* upward arc */ primaryarcdir=-1; if(primarytail->col==0){ /* left edge */ if(tilecol==0){ zerocost=TRUE; }else{ primaryarcrow=primarytail->row-1; primaryarccol=0; costs=leftedgecosts; flows=leftedgeflows; calccostnrow=0; } }else if(primarytail->col==nncol-1){ /* right edge */ if(tilecol==ntilecol-1){ zerocost=TRUE; }else{ primaryarcrow=primarytail->row-1; primaryarccol=0; costs=rightedgecosts; flows=rightedgeflows; calccostnrow=0; } }else{ /* normal arc */ primaryarcrow=primarytail->row+nrow-2; primaryarccol=primarytail->col-1; costs=tilecosts; flows=tileflows; calccostnrow=nrow; } } /* keep absolute cost of arc to the previous node */ if(!zerocost){ flows[primaryarcrow][primaryarccol]-=primaryarcdir*arroffset; nomcost=EvalCost(costs,flows,primaryarcrow,primaryarccol,calccostnrow, params); for(nflow=1;nflow<=flowmax;nflow++){ flows[primaryarcrow][primaryarccol]+=(primaryarcdir*nflow); poscost=EvalCost(costs,flows,primaryarcrow,primaryarccol, calccostnrow,params); flows[primaryarcrow][primaryarccol]-=(2*primaryarcdir*nflow); negcost=EvalCost(costs,flows,primaryarcrow,primaryarccol, calccostnrow,params); flows[primaryarcrow][primaryarccol]+=(primaryarcdir*nflow); templongdouble=(scndrycostarr[nflow]+(poscost-nomcost)); if(templongdouble>LARGELONG){ scndrycostarr[nflow]=LARGELONG; }else if(templongdouble<-LARGELONG){ scndrycostarr[nflow]=-LARGELONG; }else{ scndrycostarr[nflow]+=(poscost-nomcost); } templongdouble=(scndrycostarr[nflow+flowmax]+(negcost-nomcost)); if(templongdouble>LARGELONG){ scndrycostarr[nflow+flowmax]=LARGELONG; }else if(templongdouble<-LARGELONG){ scndrycostarr[nflow+flowmax]=-LARGELONG; }else{ scndrycostarr[nflow+flowmax]+=(negcost-nomcost); } } flows[primaryarcrow][primaryarccol]+=primaryarcdir*arroffset; if(params->costmode==TOPO || params->costmode==DEFO){ sigsq=((costT **)costs)[primaryarcrow][primaryarccol].sigsq; }else if(params->costmode==SMOOTH){ sigsq=((smoothcostT **)costs)[primaryarcrow][primaryarccol].sigsq; } sumsigsqinv+=(1.0/sigsq); } /* break if found the secondary arc tail */ if(primarytail->group==ONTREE){ break; } /* move up the tree */ tempnode=primarytail; primarytail=primarytail->pred; } /* end while loop for tracing secondary arc for costs */ /* break if we have a zero-cost arc on the edge of the full array */ if(zerocost){ break; } /* find flow index with minimum cost */ mincost=0; mincostflow=0; for(nflow=1;nflow<=flowmax;nflow++){ if(scndrycostarr[nflow]row==primarytail->row && (primaryhead->row==0 || primaryhead->row==nnrow-1)) || (primaryhead->col==primarytail->col && (primaryhead->col==0 || primaryhead->col==nncol-1))){ for(nflow=1;nflow<=2*flowmax;nflow++){ tempdouble=scndrycostarr[nflow]*tileedgearcweight; if(tempdouble>LARGELONG){ scndrycostarr[nflow]=LARGELONG; }else if(tempdouble<-LARGELONG){ scndrycostarr[nflow]=-LARGELONG; }else{ scndrycostarr[nflow]=LRound(tempdouble); } } sumsigsqinv*=tileedgearcweight; } /* store sum of primary cost variances at end of secondary cost array */ tempdouble=sumsigsqinv*nshortcycle*nshortcycle; if(tempdoublerow==0 && tilerow!=0){ scndrytail=FindScndryNode(scndrynodes,nodesupp, (tilerow-1)*ntilecol+tilecol, prevnrow,primarytail->col); }else if(primarytail->col==0 && tilecol!=0){ scndrytail=FindScndryNode(scndrynodes,nodesupp, tilerow*ntilecol+(tilecol-1), primarytail->row,prevncol); }else{ scndrytail=FindScndryNode(scndrynodes,nodesupp,tilenum, primarytail->row,primarytail->col); } if(primaryhead->row==0 && tilerow!=0){ scndryhead=FindScndryNode(scndrynodes,nodesupp, (tilerow-1)*ntilecol+tilecol, prevnrow,primaryhead->col); }else if(primaryhead->col==0 && tilecol!=0){ scndryhead=FindScndryNode(scndrynodes,nodesupp, tilerow*ntilecol+(tilecol-1), primaryhead->row,prevncol); }else{ scndryhead=FindScndryNode(scndrynodes,nodesupp,tilenum, primaryhead->row,primaryhead->col); } /* see if there is already arc between secondary head, tail */ row=scndrytail->row; col=scndrytail->col; for(i=0;irow==primaryhead->row && tempnode->col==primaryhead->col) || (nodesupp[row][col].outarcs[i]!=NULL && tempnode->row==scndryhead->row && tempnode->col==scndryhead->col)){ /* see if secondary arc traverses only one primary arc */ primarydummy=primaryhead->pred; if(primarydummy->group!=ONTREE){ /* arc already exists, free memory for cost array (will trace again) */ free(scndrycostarr); /* set up dummy node */ primarydummy->group=ONTREE; nnewnodes=++(*nnewnodesptr); scndrynodes[tilenum]=(nodeT *)ReAlloc(scndrynodes[tilenum], nnewnodes*sizeof(nodeT)); scndrydummy=&scndrynodes[tilenum][nnewnodes-1]; nodesupp[tilenum]=(nodesuppT *)ReAlloc(nodesupp[tilenum], nnewnodes*sizeof(nodesuppT)); suppdummy=&nodesupp[tilenum][nnewnodes-1]; scndrydummy->row=tilenum; scndrydummy->col=nnewnodes-1; suppdummy->row=primarydummy->row; suppdummy->col=primarydummy->col; suppdummy->noutarcs=0; suppdummy->neighbornodes=NULL; suppdummy->outarcs=NULL; /* recursively call TraceSecondaryArc() to set up arcs */ TraceSecondaryArc(primarydummy,scndrynodes,nodesupp,scndryarcs, scndrycosts,nnewnodesptr,nnewarcsptr,tilerow,tilecol, flowmax,nrow,ncol,prevnrow,prevncol,params,tilecosts, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,tileflows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); TraceSecondaryArc(primaryhead,scndrynodes,nodesupp,scndryarcs, scndrycosts,nnewnodesptr,nnewarcsptr,tilerow,tilecol, flowmax,nrow,ncol,prevnrow,prevncol,params,tilecosts, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,tileflows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); }else{ /* only one primary arc; just delete other secondary arc */ /* find existing secondary arc (must be in this tile) */ /* swap direction of existing secondary arc if necessary */ arcnum=0; while(TRUE){ if(scndryarcs[tilenum][arcnum].from==primarytail && scndryarcs[tilenum][arcnum].to==primaryhead){ break; }else if(scndryarcs[tilenum][arcnum].from==primaryhead && scndryarcs[tilenum][arcnum].to==primarytail){ scndryarcs[tilenum][arcnum].from=primarytail; scndryarcs[tilenum][arcnum].to=primaryhead; break; } arcnum++; } /* assign cost of this secondary arc to existing secondary arc */ free(scndrycosts[tilenum][arcnum]); scndrycosts[tilenum][arcnum]=scndrycostarr; /* update direction data in secondary arc structure */ if(primarytail->col==primaryhead->col+1){ scndryarcs[tilenum][arcnum].fromdir=RIGHT; }else if(primarytail->row==primaryhead->row+1){ scndryarcs[tilenum][arcnum].fromdir=DOWN; }else if(primarytail->col==primaryhead->col-1){ scndryarcs[tilenum][arcnum].fromdir=LEFT; }else{ scndryarcs[tilenum][arcnum].fromdir=UP; } } /* we're done */ return; } } /* set up secondary arc datastructures */ nnewarcs=++(*nnewarcsptr); scndryarcs[tilenum]=(scndryarcT *)ReAlloc(scndryarcs[tilenum], nnewarcs*sizeof(scndryarcT)); newarc=&scndryarcs[tilenum][nnewarcs-1]; newarc->arcrow=tilenum; newarc->arccol=nnewarcs-1; scndrycosts[tilenum]=(long **)ReAlloc(scndrycosts[tilenum], nnewarcs*sizeof(long *)); scndrycosts[tilenum][nnewarcs-1]=scndrycostarr; /* update secondary node data */ /* store primary nodes in nodesuppT neighbornodes[] arrays since */ /* secondary node addresses change in ReAlloc() calls in TraceRegions() */ supptail=&nodesupp[scndrytail->row][scndrytail->col]; supphead=&nodesupp[scndryhead->row][scndryhead->col]; supptail->noutarcs++; supptail->neighbornodes=(nodeT **)ReAlloc(supptail->neighbornodes, supptail->noutarcs *sizeof(nodeT *)); supptail->neighbornodes[supptail->noutarcs-1]=primaryhead; primarytail->level=scndrytail->row; primarytail->incost=scndrytail->col; supptail->outarcs=(scndryarcT **)ReAlloc(supptail->outarcs, supptail->noutarcs *sizeof(scndryarcT *)); supptail->outarcs[supptail->noutarcs-1]=NULL; supphead->noutarcs++; supphead->neighbornodes=(nodeT **)ReAlloc(supphead->neighbornodes, supphead->noutarcs *sizeof(nodeT *)); supphead->neighbornodes[supphead->noutarcs-1]=primarytail; primaryhead->level=scndryhead->row; primaryhead->incost=scndryhead->col; supphead->outarcs=(scndryarcT **)ReAlloc(supphead->outarcs, supphead->noutarcs *sizeof(scndryarcT *)); supphead->outarcs[supphead->noutarcs-1]=NULL; /* keep track of updated secondary nodes that were not in this tile */ if(scndrytail->row!=tilenum){ if(++(*nupdatednontilenodesptr)==(*updatednontilenodesizeptr)){ (*updatednontilenodesizeptr)+=INITARRSIZE; (*updatednontilenodesptr)=(nodeT **)ReAlloc((*updatednontilenodesptr), (*updatednontilenodesizeptr) *sizeof(nodeT *)); (*inontilenodeoutarcptr)=(short *)ReAlloc((*inontilenodeoutarcptr), (*updatednontilenodesizeptr) *sizeof(short)); } (*updatednontilenodesptr)[*nupdatednontilenodesptr-1]=scndrytail; (*inontilenodeoutarcptr)[*nupdatednontilenodesptr-1]=supptail->noutarcs-1; } if(scndryhead->row!=tilenum){ if(++(*nupdatednontilenodesptr)==(*updatednontilenodesizeptr)){ (*updatednontilenodesizeptr)+=INITARRSIZE; (*updatednontilenodesptr)=(nodeT **)ReAlloc((*updatednontilenodesptr), (*updatednontilenodesizeptr) *sizeof(nodeT *)); (*inontilenodeoutarcptr)=(short *)ReAlloc((*inontilenodeoutarcptr), (*updatednontilenodesizeptr) *sizeof(short)); } (*updatednontilenodesptr)[*nupdatednontilenodesptr-1]=scndryhead; (*inontilenodeoutarcptr)[*nupdatednontilenodesptr-1]=supphead->noutarcs-1; } /* set up node data in secondary arc structure */ newarc->from=primarytail; newarc->to=primaryhead; /* set up direction data in secondary arc structure */ tempnode=primaryhead->pred; if(tempnode->col==primaryhead->col+1){ newarc->fromdir=RIGHT; }else if(tempnode->row==primaryhead->row+1){ newarc->fromdir=DOWN; }else if(tempnode->col==primaryhead->col-1){ newarc->fromdir=LEFT; }else{ newarc->fromdir=UP; } /* add number of primary arcs in secondary arc to counter */ (*totarclenptr)+=arclen; } /* function: FindScndryNode() * -------------------------- */ nodeT *FindScndryNode(nodeT **scndrynodes, nodesuppT **nodesupp, long tilenum, long primaryrow, long primarycol){ long nodenum; nodesuppT *nodesuppptr; /* set temporary variables */ nodesuppptr=nodesupp[tilenum]; /* loop over all nodes in the tile until we find a match */ nodenum=0; while(nodesuppptr[nodenum].row!=primaryrow || nodesuppptr[nodenum].col!=primarycol){ nodenum++; } return(&scndrynodes[tilenum][nodenum]); } /* function: IntegrateSecondaryFlows() * ----------------------------------- */ void IntegrateSecondaryFlows(long linelen, long nlines, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, short *nscndryarcs, short **scndryflows, short **bulkoffsets, outfileT *outfiles, paramT *params){ FILE *outfp; float **unwphase, **tileunwphase, **mag, **tilemag; float *outline; long row, col, colstart, nrow=0, ncol, nnrow, nncol, maxcol; long readtilelinelen, readtilenlines, nextcoloffset, nextrowoffset; long tilerow, tilecol, ntilerow, ntilecol, rowovrlp, colovrlp; long ni, nj, tilenum; double tileoffset; short **regions, **tileflows; char realoutfile[MAXSTRLEN], readfile[MAXSTRLEN], tempstring[MAXTMPSTRLEN]; char path[MAXSTRLEN], basename[MAXSTRLEN]; signed char writeerror; tileparamT readtileparams[1]; outfileT readtileoutfiles[1]; /* set up */ fprintf(sp1,"Integrating secondary flows\n"); ntilerow=params->ntilerow; ntilecol=params->ntilecol; rowovrlp=params->rowovrlp; colovrlp=params->colovrlp; ni=ceil((nlines+(ntilerow-1)*rowovrlp)/(double )ntilerow); nj=ceil((linelen+(ntilecol-1)*colovrlp)/(double )ntilecol); nextcoloffset=0; writeerror=FALSE; /* get memory */ regions=(short **)Get2DMem(ni,nj,sizeof(short *),sizeof(short)); tileflows=(short **)Get2DRowColMem(ni+2,nj+2,sizeof(short *),sizeof(short)); tileunwphase=(float **)Get2DMem(ni,nj,sizeof(float *),sizeof(float)); tilemag=(float **)Get2DMem(ni,nj,sizeof(float *),sizeof(float)); unwphase=(float **)Get2DMem(ni,linelen,sizeof(float *),sizeof(float)); mag=(float **)Get2DMem(ni,linelen,sizeof(float *),sizeof(float)); outline=(float *)MAlloc(2*linelen*sizeof(float)); /* flip sign of bulk offsets if flip flag is set */ /* do this and flip flow signs instead of flipping phase signs */ if(params->flipphasesign){ for(row=0;rowoutfile,realoutfile); /* process each tile row */ for(tilerow=0;tilerowfirstcol; readtilenlines=readtileparams->nrow; readtilelinelen=readtileparams->ncol; /* set tile read parameters */ SetTileReadParams(readtileparams,readtilenlines,readtilelinelen, tilerow,tilecol,nlines,linelen,params); colstart+=readtileparams->firstcol; nrow=readtileparams->nrow; ncol=readtileparams->ncol; nnrow=nrow+1; nncol=ncol+1; /* read unwrapped phase */ /* phase sign not flipped for positive baseline */ /* since flow will be flipped if necessary */ if(TMPTILEOUTFORMAT==ALT_LINE_DATA){ ReadAltLineFile(&tilemag,&tileunwphase,readtileoutfiles->outfile, readtilelinelen,readtilenlines,readtileparams); }else if(TMPTILEOUTFORMAT==FLOAT_DATA){ Read2DArray((void ***)&tileunwphase,readtileoutfiles->outfile, readtilelinelen,readtilenlines,readtileparams, sizeof(float *),sizeof(float)); } /* read regions */ ParseFilename(outfiles->outfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld%s", params->tiledir,TMPTILEROOT,basename,tilerow,tilecol, readtilelinelen,REGIONSUFFIX); StrNCopy(readfile,tempstring,MAXSTRLEN); Read2DArray((void ***)®ions,readfile,readtilelinelen,readtilenlines, readtileparams,sizeof(short *),sizeof(short)); /* remove temporary files unless told so save them */ if(params->rmtmptile){ unlink(readtileoutfiles->outfile); unlink(readfile); } /* zero out primary flow array */ for(row=0;row<2*nrow+1;row++){ if(rowoutfileformat==ALT_LINE_DATA){ if(fwrite(mag[row],sizeof(float),linelen,outfp)!=linelen || fwrite(unwphase[row],sizeof(float),linelen,outfp)!=linelen){ writeerror=TRUE; break; } }else if(outfiles->outfileformat==ALT_SAMPLE_DATA){ for(col=0;colflipphasesign){ phaseflipsign=-1; }else{ phaseflipsign=1; } /* loop over all arcs in tile */ for(arcnum=0;arcnumrow==tilenum){ primaryfromrow=nodesupp[scndryfrom->row][scndryfrom->col].row; primaryfromcol=nodesupp[scndryfrom->row][scndryfrom->col].col; }else if(scndryfrom->row==tilenum-ntilecol){ primaryfromrow=0; primaryfromcol=nodesupp[scndryfrom->row][scndryfrom->col].col; }else if(scndryfrom->row==tilenum-1){ primaryfromrow=nodesupp[scndryfrom->row][scndryfrom->col].row; primaryfromcol=0; }else{ primaryfromrow=0; primaryfromcol=0; } if(scndryto->row==tilenum){ thisrow=nodesupp[scndryto->row][scndryto->col].row; thiscol=nodesupp[scndryto->row][scndryto->col].col; }else if(scndryto->row==tilenum-ntilecol){ thisrow=0; thiscol=nodesupp[scndryto->row][scndryto->col].col; }else if(scndryto->row==tilenum-1){ thisrow=nodesupp[scndryto->row][scndryto->col].row; thiscol=0; }else{ thisrow=0; thiscol=0; } /* set initial direction out of secondary arc head */ switch(scndryarcs[tilenum][arcnum].fromdir){ case RIGHT: nextrow=thisrow; nextcol=thiscol+1; tileflows[thisrow][thiscol]-=nflow; break; case DOWN: nextrow=thisrow+1; nextcol=thiscol; tileflows[nnrow+thisrow][thiscol]-=nflow; break; case LEFT: nextrow=thisrow; nextcol=thiscol-1; tileflows[thisrow][thiscol-1]+=nflow; break; default: nextrow=thisrow-1; nextcol=thiscol; tileflows[nnrow+thisrow-1][thiscol]+=nflow; break; } /* use region data to trace path between secondary from, to */ while(!(nextrow==primaryfromrow && nextcol==primaryfromcol)){ /* move to next node */ prevrow=thisrow; prevcol=thiscol; thisrow=nextrow; thiscol=nextcol; /* check rightward arc */ if(thiscol!=nncol-1){ if(thisrow==0 || thisrow==nnrow-1 || regions[thisrow-1][thiscol]!=regions[thisrow][thiscol]){ if(!(thisrow==prevrow && thiscol+1==prevcol)){ tileflows[thisrow][thiscol]-=nflow; nextcol++; } } } /* check downward arc */ if(thisrow!=nnrow-1){ if(thiscol==0 || thiscol==nncol-1 || regions[thisrow][thiscol]!=regions[thisrow][thiscol-1]){ if(!(thisrow+1==prevrow && thiscol==prevcol)){ tileflows[nnrow+thisrow][thiscol]-=nflow; nextrow++; } } } /* check leftward arc */ if(thiscol!=0){ if(thisrow==0 || thisrow==nnrow-1 || regions[thisrow][thiscol-1]!=regions[thisrow-1][thiscol-1]){ if(!(thisrow==prevrow && thiscol-1==prevcol)){ tileflows[thisrow][thiscol-1]+=nflow; nextcol--; } } } /* check upward arc */ if(thisrow!=0){ if(thiscol==0 || thiscol==nncol-1 || regions[thisrow-1][thiscol-1]!=regions[thisrow-1][thiscol]){ if(!(thisrow-1==prevrow && thiscol==prevcol)){ tileflows[nnrow+thisrow-1][thiscol]+=nflow; nextrow--; } } } } } } } GMTSAR_V5.7/snaphu/src/snaphu_cost.c000644 015705 000000 00000176071 13505462014 020334 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu statistical cost model source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* function: BuildCostArrays() * --------------------------- * Builds cost arrays for arcs based on interferogram intensity * and correlation, depending on options and passed parameters. */ void BuildCostArrays(void ***costsptr, short ***mstcostsptr, float **mag, float **wrappedphase, float **unwrappedest, long linelen, long nlines, long nrow, long ncol, paramT *params, tileparamT *tileparams, infileT *infiles, outfileT *outfiles){ long row, col, maxcol, tempcost; long poscost, negcost, costtypesize; float **pwr, **corr; short **weights, **rowweight, **colweight, **scalarcosts = NULL; void **costs, **rowcost = NULL, **colcost = NULL; void (*CalcStatCost)() = NULL; /* read weights */ weights=NULL; ReadWeightsFile(&weights,infiles->weightfile,linelen,nlines,tileparams); rowweight=weights; colweight=&weights[nrow-1]; /* if we're only initializing and we don't want statistical weights */ if(params->initonly && params->costmode==NOSTATCOSTS){ *mstcostsptr=weights; return; } /* size of the data type for holding cost data depends on cost mode */ if(params->costmode==TOPO){ costtypesize=sizeof(costT); }else if(params->costmode==DEFO){ costtypesize=sizeof(costT); }else if(params->costmode==SMOOTH){ costtypesize=sizeof(smoothcostT); } /* build or read the statistical cost arrays unless we were told not to */ if(strlen(infiles->costinfile)){ fprintf(sp1,"Reading cost information from file %s\n",infiles->costinfile); costs=NULL; Read2DRowColFile((void ***)&costs,infiles->costinfile, linelen,nlines,tileparams,costtypesize); (*costsptr)=costs; }else if(params->costmode!=NOSTATCOSTS){ /* get intensity and correlation info */ /* correlation generated from interferogram and amplitude if not given */ GetIntensityAndCorrelation(mag,wrappedphase,&pwr,&corr,infiles, linelen,nlines,nrow,ncol,outfiles, params,tileparams); /* call specific functions for building cost array and */ /* set global pointers to functions for calculating and evaluating costs */ if(params->costmode==TOPO){ fprintf(sp1,"Calculating topography-mode cost parameters\n"); costs=BuildStatCostsTopo(wrappedphase,mag,unwrappedest,pwr,corr, rowweight,colweight,nrow,ncol,tileparams, outfiles,params); }else if(params->costmode==DEFO){ fprintf(sp1,"Calculating deformation-mode cost parameters\n"); costs=BuildStatCostsDefo(wrappedphase,mag,unwrappedest,corr, rowweight,colweight,nrow,ncol,tileparams, outfiles,params); }else if(params->costmode==SMOOTH){ fprintf(sp1,"Calculating smooth-solution cost parameters\n"); costs=BuildStatCostsSmooth(wrappedphase,mag,unwrappedest,corr, rowweight,colweight,nrow,ncol,tileparams, outfiles,params); }else{ fprintf(sp0,"unrecognized cost mode\n"); exit(ABNORMAL_EXIT); } (*costsptr)=costs; }/* end if(params->costmode!=NOSTATCOSTS) */ /* set array subpointers and temporary cost-calculation function pointer */ if(params->costmode==TOPO){ rowcost=costs; colcost=(void **)&(((costT **)costs)[nrow-1]); CalcStatCost=CalcCostTopo; }else if(params->costmode==DEFO){ rowcost=costs; colcost=(void **)&(((costT **)costs)[nrow-1]); CalcStatCost=CalcCostDefo; }else if(params->costmode==SMOOTH){ rowcost=costs; colcost=(void **)&(((smoothcostT **)costs)[nrow-1]); CalcStatCost=CalcCostSmooth; } /* dump statistical cost arrays */ if(strlen(infiles->costinfile) || params->costmode!=NOSTATCOSTS){ if(strlen(outfiles->costoutfile)){ Write2DRowColArray((void **)costs,outfiles->costoutfile, nrow,ncol,costtypesize); }else{ if(strlen(outfiles->rowcostfile)){ Write2DArray((void **)rowcost,outfiles->rowcostfile, nrow-1,ncol,costtypesize); } if(strlen(outfiles->colcostfile)){ Write2DArray((void **)colcost,outfiles->colcostfile, nrow,ncol-1,costtypesize); } } } /* get memory for scalar costs if in Lp mode */ if(params->p>=0){ scalarcosts=(short **)Get2DRowColMem(nrow,ncol, sizeof(short *),sizeof(short)); (*costsptr)=(void **)scalarcosts; } /* now, set scalar costs for MST initialization or optimization if needed */ if(params->costmode==NOSTATCOSTS){ /* if in no-statistical-costs mode, copy weights to scalarcosts array */ if(!params->initonly){ for(row=0;row<2*nrow-1;row++){ if(rowunwrapped){ (*mstcostsptr)=weights; }else{ Free2DArray((void **)weights,2*nrow-1); (*mstcostsptr)=NULL; } }else if(!params->unwrapped || params->p>=0){ /* if we got here, we had statistical costs and we need scalar weights */ /* from them for MST initialization or for Lp optimization */ for(row=0;row<2*nrow-1;row++){ if(rowmaxcost */ if(tempcostmaxcost){ if(tempcost>MINSCALARCOST){ weights[row][col]=tempcost; }else{ weights[row][col]=MINSCALARCOST; } }else{ weights[row][col]=params->maxcost; } if(params->p>=0){ scalarcosts[row][col]=weights[row][col]; } } } /* set costs for corner arcs to prevent ambiguous flows */ weights[nrow-1][0]=LARGESHORT; weights[nrow-1][ncol-2]=LARGESHORT; weights[2*nrow-2][0]=LARGESHORT; weights[2*nrow-2][ncol-2]=LARGESHORT; if(params->p>=0){ scalarcosts[nrow-1][0]=LARGESHORT; scalarcosts[nrow-1][ncol-2]=LARGESHORT; scalarcosts[2*nrow-2][0]=LARGESHORT; scalarcosts[2*nrow-2][ncol-2]=LARGESHORT; } /* dump mst initialization costs */ if(strlen(outfiles->mstrowcostfile)){ Write2DArray((void **)rowweight,outfiles->mstrowcostfile, nrow-1,ncol,sizeof(short)); } if(strlen(outfiles->mstcolcostfile)){ Write2DArray((void **)colweight,outfiles->mstcolcostfile, nrow,ncol-1,sizeof(short)); } if(strlen(outfiles->mstcostsfile)){ Write2DRowColArray((void **)rowweight,outfiles->mstcostsfile, nrow,ncol,sizeof(short)); } /* unless input is unwrapped, calculate initialization max flow */ if(params->initmaxflow==AUTOCALCSTATMAX && !params->unwrapped){ CalcInitMaxFlow(params,(void **)costs,nrow,ncol); } /* free costs memory if in init-only or Lp mode */ if(params->initonly || params->p>=0){ Free2DArray((void **)costs,2*nrow-1); } /* use memory allocated for weights arrays for mstcosts if needed */ if(!params->unwrapped){ (*mstcostsptr)=weights; }else{ Free2DArray((void **)weights,2*nrow-1); } }else{ Free2DArray((void **)weights,2*nrow-1); } } /* function: BuildStatCostsTopo() * ------------------------------ * Builds statistical cost arrays for topography mode. */ void **BuildStatCostsTopo(float **wrappedphase, float **mag, float **unwrappedest, float **pwr, float **corr, short **rowweight, short **colweight, long nrow, long ncol, tileparamT *tileparams, outfileT *outfiles, paramT *params){ long row, col, iei, nrho, nominctablesize; long kperpdpsi, kpardpsi, sigsqshortmin; double a, re, dr, slantrange, nearrange, nominc0, dnominc; double nomincangle, nomincind, sinnomincangle, cosnomincangle, bperp; double baseline, baselineangle, lambda, lookangle; double dzlay, dzei, dzr0, dzrcrit, dzeimin, dphilaypeak, dzrhomax; double azdzfactor, dzeifactor, dzeiweight, dzlayfactor; double avgei, eicrit, layminei, laywidth, slope1, const1, slope2, const2; double rho, rho0, rhomin, drho, rhopow; double sigsqrho, sigsqrhoconst, sigsqei, sigsqlay; double glay, costscale, ambiguityheight, ztoshort, ztoshortsq; double nshortcycle, midrangeambight; float **ei, **dpsi, **avgdpsi, *dzrcrittable, **dzrhomaxtable; costT **costs, **rowcost, **colcost; signed char noshadow, nolayover; /* get memory and set cost array pointers */ costs=(costT **)Get2DRowColMem(nrow,ncol,sizeof(costT *),sizeof(costT)); rowcost=(costT **)costs; colcost=(costT **)&costs[nrow-1]; /* set up */ rho0=(params->rhosconst1)/(params->ncorrlooks)+(params->rhosconst2); rhomin=params->rhominfactor*rho0; rhopow=2*(params->cstd1)+(params->cstd2)*log(params->ncorrlooks) +(params->cstd3)*(params->ncorrlooks); sigsqshortmin=params->sigsqshortmin; kperpdpsi=params->kperpdpsi; kpardpsi=params->kpardpsi; dr=params->dr; nearrange=params->nearrange+dr*tileparams->firstcol; drho=params->drho; nrho=(long )floor((1-rhomin)/drho)+1; nshortcycle=params->nshortcycle; layminei=params->layminei; laywidth=params->laywidth; azdzfactor=params->azdzfactor; dzeifactor=params->dzeifactor; dzeiweight=params->dzeiweight; dzeimin=params->dzeimin; dzlayfactor=params->dzlayfactor; sigsqei=params->sigsqei; lambda=params->lambda; noshadow=!(params->shadow); a=params->orbitradius; re=params->earthradius; /* despeckle the interferogram intensity */ fprintf(sp2,"Despeckling intensity image\n"); ei=NULL; Despeckle(pwr,&ei,nrow,ncol); Free2DArray((void **)pwr,nrow); /* remove large-area average intensity */ fprintf(sp2,"Normalizing intensity\n"); RemoveMean(ei,nrow,ncol,params->krowei,params->kcolei); /* dump normalized, despeckled intensity */ if(strlen(outfiles->eifile)){ Write2DArray((void **)ei,outfiles->eifile,nrow,ncol,sizeof(float)); } /* compute some midswath parameters */ slantrange=nearrange+ncol/2*dr; sinnomincangle=sin(acos((a*a-slantrange*slantrange-re*re) /(2*slantrange*re))); lookangle=asin(re/a*sinnomincangle); /* see if we were passed bperp rather than baseline and baselineangle */ if(params->bperp){ if(params->bperp>0){ params->baselineangle=lookangle; }else{ params->baselineangle=lookangle+PI; } params->baseline=fabs(params->bperp); } /* the baseline should be halved if we are in single antenna transmit mode */ if(params->transmitmode==SINGLEANTTRANSMIT){ params->baseline/=2.0; } baseline=params->baseline; baselineangle=params->baselineangle; /* build lookup table for dzrcrit vs incidence angle */ dzrcrittable=BuildDZRCritLookupTable(&nominc0,&dnominc,&nominctablesize, tileparams,params); /* build lookup table for dzrhomax vs incidence angle */ dzrhomaxtable=BuildDZRhoMaxLookupTable(nominc0,dnominc,nominctablesize, rhomin,drho,nrho,params); /* set cost autoscale factor based on midswath parameters */ bperp=baseline*cos(lookangle-baselineangle); midrangeambight=fabs(lambda*slantrange*sinnomincangle/(2*bperp)); costscale=params->costscale*fabs(params->costscaleambight/midrangeambight); glay=-costscale*log(params->layconst); /* get memory for wrapped difference arrays */ dpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); avgdpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); /* build array of mean wrapped phase differences in range */ /* simple average of phase differences is biased, but mean phase */ /* differences usually near zero, so don't bother with complex average */ fprintf(sp2,"Building range cost arrays\n"); CalcWrappedRangeDiffs(dpsi,avgdpsi,wrappedphase,kperpdpsi,kpardpsi, nrow,ncol); /* build colcost array (range slopes) */ /* loop over range */ for(col=0;colsigsqlayfactor; /* interpolate scattering model parameters */ nomincind=(nomincangle-nominc0)/dnominc; dzrcrit=LinInterp1D(dzrcrittable,nomincind,nominctablesize); SolveEIModelParams(&slope1,&slope2,&const1,&const2,dzrcrit,dzr0, sinnomincangle,cosnomincangle,params); eicrit=(dzrcrit-const1)/slope1; dphilaypeak=params->dzlaypeak/ambiguityheight; /* loop over azimuth */ for(row=0;roweicrit){ dzei=(slope2*ei[row][col]+const2)*dzeifactor; }else{ dzei=(slope1*ei[row][col]+const1)*dzeifactor; } if(noshadow && dzeilayminei){ for(iei=0;ieieicrit){ dzlay+=slope2*ei[row][col+iei]+const2; }else{ dzlay+=slope1*ei[row][col+iei]+const1; } if(col+iei>ncol-2){ break; } } } if(dzlay){ dzlay=(dzlay+iei*(-2.0*dzr0))*dzlayfactor; } /* set maximum dz based on unbiased correlation and layover max */ if(rho>0){ dzrhomax=LinInterp2D(dzrhomaxtable,nomincind,(rho-rhomin)/drho, nominctablesize,nrho); if(dzrhomax0){ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*(avgdpsi[row][col]+dphilaypeak)); }else{ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.25*avgdpsi[row][col]-0.75*dphilaypeak); } colcost[row][col].sigsq=(sigsqrho+sigsqei+sigsqlay)*ztoshortsq /(costscale*colweight[row][col]); if(colcost[row][col].sigsqfloor(sqrt(colcost[row][col].laycost*colcost[row][col].sigsq))){ nolayover=FALSE; } } if(nolayover){ colcost[row][col].sigsq=(sigsqrho+sigsqei)*ztoshortsq /(costscale*colweight[row][col]); if(colcost[row][col].sigsq0){ colcost[row][col].offset=ztoshort* (ambiguityheight*(dpsi[row][col]-0.5*avgdpsi[row][col]) -0.5*dzeiweight*dzei); }else{ colcost[row][col].offset=ztoshort* (ambiguityheight*(dpsi[row][col]-0.25*avgdpsi[row][col]) -0.75*dzeiweight*dzei); } colcost[row][col].laycost=NOCOSTSHELF; colcost[row][col].dzmax=LARGESHORT; } /* shift PDF to account for flattening by coarse unwrapped estimate */ if(unwrappedest!=NULL){ colcost[row][col].offset+=(nshortcycle/TWOPI* (unwrappedest[row][col+1] -unwrappedest[row][col])); } } } } /* end of range gradient cost calculation */ /* reset layover constant for row (azimuth) costs */ glay+=(-costscale*log(azdzfactor)); /* build array of mean wrapped phase differences in azimuth */ /* biased, but not much, so don't bother with complex averaging */ fprintf(sp2,"Building azimuth cost arrays\n"); CalcWrappedAzDiffs(dpsi,avgdpsi,wrappedphase,kperpdpsi,kpardpsi, nrow,ncol); /* build rowcost array */ /* for the rowcost array, there is symmetry between positive and */ /* negative flows, so we average ei[][] and corr[][] values in azimuth */ /* loop over range */ for(col=0;colsigsqlayfactor; /* interpolate scattering model parameters */ nomincind=(nomincangle-nominc0)/dnominc; dzrcrit=LinInterp1D(dzrcrittable,nomincind,nominctablesize); SolveEIModelParams(&slope1,&slope2,&const1,&const2,dzrcrit,dzr0, sinnomincangle,cosnomincangle,params); eicrit=(dzrcrit-const1)/slope1; dphilaypeak=params->dzlaypeak/ambiguityheight; /* loop over azimuth */ for(row=0;rowlayminei){ for(iei=0;ieieicrit){ dzlay+=slope2*avgei+const2; }else{ dzlay+=slope1*avgei+const1; } if(col+iei>ncol-2){ break; } } } if(dzlay){ dzlay=(dzlay+iei*(-2.0*dzr0))*dzlayfactor; } /* set maximum dz based on correlation max and layover max */ if(rho>0){ dzrhomax=LinInterp2D(dzrhomaxtable,nomincind,(rho-rhomin)/drho, nominctablesize,nrho); if(dzrhomax0){ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-avgdpsi[row][col]); }else{ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*avgdpsi[row][col]); } nolayover=TRUE; if(dzlay){ rowcost[row][col].sigsq=(sigsqrho+sigsqei+sigsqlay)*ztoshortsq /(costscale*rowweight[row][col]); if(rowcost[row][col].sigsqfloor(sqrt(rowcost[row][col].laycost*rowcost[row][col].sigsq))){ nolayover=FALSE; } } if(nolayover){ rowcost[row][col].sigsq=(sigsqrho+sigsqei)*ztoshortsq /(costscale*rowweight[row][col]); if(rowcost[row][col].sigsqrhosconst1)/(params->ncorrlooks)+(params->rhosconst2); defocorrthresh=params->defothreshfactor*rho0; rhopow=2*(params->cstd1)+(params->cstd2)*log(params->ncorrlooks) +(params->cstd3)*(params->ncorrlooks); sigsqrhoconst=2.0/12.0; sigsqcorr=params->sigsqcorr; sigsqshortmin=params->sigsqshortmin; kperpdpsi=params->kperpdpsi; kpardpsi=params->kpardpsi; costscale=params->costscale; nshortcycle=params->nshortcycle; nshortcyclesq=nshortcycle*nshortcycle; glay=-costscale*log(params->defolayconst); defomax=(long )ceil(params->defomax*nshortcycle); /* get memory for wrapped difference arrays */ dpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); avgdpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); /* build array of mean wrapped phase differences in range */ /* simple average of phase differences is biased, but mean phase */ /* differences usually near zero, so don't bother with complex average */ fprintf(sp2,"Building range cost arrays\n"); CalcWrappedRangeDiffs(dpsi,avgdpsi,wrappedphase,kperpdpsi,kpardpsi, nrow,ncol); /* build colcost array (range slopes) */ for(col=0;col0){ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-avgdpsi[row][col]); }else{ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*avgdpsi[row][col]); } colcost[row][col].sigsq=sigsqrho/(costscale*colweight[row][col]); if(colcost[row][col].sigsq0){ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-avgdpsi[row][col]); }else{ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*avgdpsi[row][col]); } rowcost[row][col].sigsq=sigsqrho/(costscale*rowweight[row][col]); if(rowcost[row][col].sigsqrhosconst1)/(params->ncorrlooks)+(params->rhosconst2); defocorrthresh=params->defothreshfactor*rho0; rhopow=2*(params->cstd1)+(params->cstd2)*log(params->ncorrlooks) +(params->cstd3)*(params->ncorrlooks); sigsqrhoconst=2.0/12.0; sigsqcorr=params->sigsqcorr; sigsqshortmin=params->sigsqshortmin; kperpdpsi=params->kperpdpsi; kpardpsi=params->kpardpsi; costscale=params->costscale; nshortcycle=params->nshortcycle; nshortcyclesq=nshortcycle*nshortcycle; /* get memory for wrapped difference arrays */ dpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); avgdpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); /* build array of mean wrapped phase differences in range */ /* simple average of phase differences is biased, but mean phase */ /* differences usually near zero, so don't bother with complex average */ fprintf(sp2,"Building range cost arrays\n"); CalcWrappedRangeDiffs(dpsi,avgdpsi,wrappedphase,kperpdpsi,kpardpsi, nrow,ncol); /* build colcost array (range slopes) */ for(col=0;col0){ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-avgdpsi[row][col]); }else{ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*avgdpsi[row][col]); } colcost[row][col].sigsq=sigsqrho/(costscale*colweight[row][col]); if(colcost[row][col].sigsq0){ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-avgdpsi[row][col]); }else{ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*avgdpsi[row][col]); } rowcost[row][col].sigsq=sigsqrho/(costscale*rowweight[row][col]); if(rowcost[row][col].sigsqampfile)){ ReadIntensity(&pwr,&pwr1,&pwr2,infiles,linelen,nlines,params,tileparams); }else{ if(params->costmode==TOPO){ fprintf(sp1,"No brightness file specified. "); fprintf(sp1,"Using interferogram magnitude as intensity\n"); } pwr=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); for(row=0;rowcorrfile)){ ReadCorrelation(&corr,infiles,linelen,nlines,tileparams); }else if(pwr1!=NULL && pwr2!=NULL && params->havemagnitude){ /* generate the correlation info from the interferogram and amplitude */ fprintf(sp1,"Generating correlation from interferogram and intensity\n"); /* get the correct number of looks, and make sure its odd */ krowcorr=1+2*floor(params->ncorrlooksaz/(double )params->nlooksaz/2); kcolcorr=1+2*floor(params->ncorrlooksrange/(double )params->nlooksrange/2); /* calculate equivalent number of independent looks */ params->ncorrlooks=(kcolcorr*(params->dr/params->rangeres)) *(krowcorr*(params->da/params->azres))*params->nlooksother; fprintf(sp1," (%.1f equivalent independent looks)\n", params->ncorrlooks); /* get real and imaginary parts of interferogram */ realcomp=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); imagcomp=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); for(row=0;rowdefaultcorr); rho0=(params->rhosconst1)/(params->ncorrlooks)+(params->rhosconst2); rhomin=params->rhominfactor*rho0; if(params->defaultcorr>rhomin){ biaseddefaultcorr=params->defaultcorr; }else{ biaseddefaultcorr=0.0; } for(row=0;rowrawcorrdumpfile)){ Write2DArray((void **)corr,outfiles->rawcorrdumpfile, nrow,ncol,sizeof(float)); } /* check correlation data validity */ iclipped=0; for(row=0;row1.0){ if(corr[row][col]>1.001){ iclipped++; /* don't warn for minor numerical errors */ } corr[row][col]=1.0; }else if(corr[row][col]<0.0){ if(corr[row][col]<-0.001){ iclipped++; /* don't warn for minor numerical errors */ } corr[row][col]=0.0; } } } if(iclipped){ fprintf(sp0,"WARNING: %ld illegal correlation values clipped to [0,1]\n", iclipped); } /* dump correlation data if necessary */ if(strlen(outfiles->corrdumpfile)){ Write2DArray((void **)corr,outfiles->corrdumpfile, nrow,ncol,sizeof(float)); } /* free memory and set output pointers */ if(pwr1!=NULL){ Free2DArray((void **)pwr1,nrow); } if(pwr2!=NULL){ Free2DArray((void **)pwr2,nrow); } if(params->costmode==DEFO && pwr!=NULL){ Free2DArray((void **)pwr,nrow); pwr=NULL; } *pwrptr=pwr; *corrptr=corr; } /* function: RemoveMean() * ------------------------- * Divides intensity by average over sliding window. */ void RemoveMean(float **ei, long nrow, long ncol, long krowei, long kcolei){ float **avgei, **padei; long row, col; /* make sure krowei, kcolei are odd */ if(!(krowei % 2)){ krowei++; } if(!(kcolei % 2)){ kcolei++; } /* get memory */ avgei=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); /* pad ei in new array */ padei=MirrorPad(ei,nrow,ncol,(krowei-1)/2,(kcolei-1)/2); if(padei==ei){ fprintf(sp0,"Intensity-normalization averaging box too large " "for input array size\nAbort\n"); exit(ABNORMAL_EXIT); } /* calculate average ei by using sliding window */ BoxCarAvg(avgei,padei,nrow,ncol,krowei,kcolei); /* divide ei by avgei */ for(row=0;roworbitradius; re=params->earthradius; slantrange=params->nearrange+params->dr*tileparams->firstcol; nominc0=acos((a*a-slantrange*slantrange-re*re)/(2*slantrange*re)); slantrange+=params->dr*tileparams->ncol; nomincmax=acos((a*a-slantrange*slantrange-re*re)/(2*slantrange*re)); if(!IsFinite(nominc0) || !IsFinite(nomincmax)){ fprintf(sp0,"Geometry error detected. " "Check altitude, near range, and earth radius parameters\n" "Abort\n"); exit(ABNORMAL_EXIT); } /* build lookup table */ dnominc=params->dnomincangle; tablesize=(long )floor((nomincmax-nominc0)/dnominc)+1; dzrcrittable=MAlloc(tablesize*sizeof(float)); nominc=nominc0; for(k=0;kthreshold); nominc+=dnominc; if(nominc>PI/2.0){ nominc-=dnominc; } } /* set return variables */ (*nominc0ptr)=nominc; (*dnomincptr)=dnominc; (*tablesizeptr)=tablesize; return(dzrcrittable); } /* function: SolveDZRCrit() * ------------------------ * Numerically solve for the transition point of the linearized scattering * model. */ double SolveDZRCrit(double sinnomincangle, double cosnomincangle, paramT *params, double threshold){ double residual, thetai, kds, n, dr, dzr, dx; double costhetai, cos2thetai, step; double dzrcritfactor, diffuse, specular; long i; /* get parameters */ kds=params->kds; n=params->specularexp; dr=params->dr; dzrcritfactor=params->dzrcritfactor; /* solve for critical incidence angle */ thetai=PI/4; step=PI/4-1e-6; i=0; while(TRUE){ if((cos2thetai=cos(2*thetai))<0){ cos2thetai=0; } diffuse=dzrcritfactor*kds*cos(thetai); specular=pow(cos2thetai,n); if(fabs(residual=diffuse-specular)MAXITERATION){ fprintf(sp0,"Couldn't find critical incidence angle "); fprintf(sp0,"(check scattering parameters)\nAbort\n"); exit(ABNORMAL_EXIT); } } /* solve for critical height change */ costhetai=cos(thetai); dzr=params->initdzr; step=dzr+dr*cosnomincangle-1e-2; i=0; while(TRUE){ dx=(dr+dzr*cosnomincangle)/sinnomincangle; if(fabs(residual=costhetai-(dzr*sinnomincangle+dx*cosnomincangle) /sqrt(dzr*dzr+dx*dx)) MAXITERATION){ fprintf(sp0,"Couldn't find critical slope "); fprintf(sp0,"(check geometry parameters)\nAbort\n"); exit(ABNORMAL_EXIT); } } } /* function: SolveEIModelParams() * ------------------------------ * Calculates parameters for linearized model of EI vs. range slope * relationship. */ void SolveEIModelParams(double *slope1ptr, double *slope2ptr, double *const1ptr, double *const2ptr, double dzrcrit, double dzr0, double sinnomincangle, double cosnomincangle, paramT *params){ double slope1, slope2, const1, const2, sloperatio; double dzr3, ei3; /* set up */ sloperatio=params->kds*params->sloperatiofactor; /* find normalized intensity at 15(dzrcrit-dzr0)+dzr0 */ dzr3=15.0*(dzrcrit-dzr0)+dzr0; ei3=EIofDZR(dzr3,sinnomincangle,cosnomincangle,params) /EIofDZR(0,sinnomincangle,cosnomincangle,params); /* calculate parameters */ const1=dzr0; slope2=(sloperatio*(dzrcrit-const1)-dzrcrit+dzr3)/ei3; slope1=slope2/sloperatio; const2=dzr3-slope2*ei3; /* set return values */ *slope1ptr=slope1; *slope2ptr=slope2; *const1ptr=const1; *const2ptr=const2; } /* function: EIofDZR() * ------------------- * Calculates expected value of intensity with arbitrary units for given * parameters. Assumes azimuth slope is zero. */ double EIofDZR(double dzr, double sinnomincangle, double cosnomincangle, paramT *params){ double dr, da, dx, kds, n, dzr0, projarea; double costhetai, cos2thetai, sigma0; dr=params->dr; da=params->da; dx=dr/sinnomincangle+dzr*cosnomincangle/sinnomincangle; kds=params->kds; n=params->specularexp; dzr0=-dr*cosnomincangle; projarea=da*fabs((dzr-dzr0)/sinnomincangle); costhetai=projarea/sqrt(dzr*dzr*da*da + da*da*dx*dx); if(costhetai>SQRTHALF){ cos2thetai=2*costhetai*costhetai-1; sigma0=kds*costhetai+pow(cos2thetai,n); }else{ sigma0=kds*costhetai; } return(sigma0*projarea); } /* function: BuildDZRhoMaxLookupTable() * ------------------------------------ * Builds a 2-D lookup table of dzrhomax values vs nominal incidence angle * (rad) and correlation. */ float **BuildDZRhoMaxLookupTable(double nominc0, double dnominc, long nominctablesize, double rhomin, double drho, long nrho, paramT *params){ long krho, knominc; double nominc, rho; float **dzrhomaxtable; dzrhomaxtable=(float **)Get2DMem(nominctablesize,nrho, sizeof(float *),sizeof(float)); nominc=nominc0; for(knominc=0;knomincthreshold); rho+=drho; } nominc+=dnominc; } return(dzrhomaxtable); } /* function: CalcDZRhoMax() * ------------------------ * Calculates the maximum slope (in range) for the given unbiased correlation * using spatial decorrelation as an upper limit (Zebker & Villasenor, * 1992). */ double CalcDZRhoMax(double rho, double nominc, paramT *params, double threshold){ long i; double dx, dr, dz, dzstep, rhos, sintheta, costheta, numerator; double a, re, bperp, slantrange, lookangle; double costhetairsq, rhosfactor, residual; /* set up */ i=0; dr=params->dr; costheta=cos(nominc); sintheta=sin(nominc); dzstep=params->initdzstep; a=params->orbitradius; re=params->earthradius; lookangle=asin(re/a*sintheta); bperp=params->baseline*cos(lookangle-params->baselineangle); slantrange=sqrt(a*a+re*re-2*a*re*cos(nominc-lookangle)); rhosfactor=2.0*fabs(bperp)*(params->rangeres)/((params->lambda)*slantrange); /* take care of the extremes */ if(rho>=1.0){ return(-dr*costheta); }else if(rho<=0){ return(LARGEFLOAT); } /* start with slope for unity correlation, step slope upwards */ dz=-dr*costheta; rhos=1.0; while(rhos>rho){ dz+=dzstep; dx=(dr+dz*costheta)/sintheta; numerator=dz*sintheta+dx*costheta; costhetairsq=numerator*numerator/(dz*dz+dx*dx); rhos=1-rhosfactor*sqrt(costhetairsq/(1-costhetairsq)); if(rhos<0){ rhos=0; } if(dz>BIGGESTDZRHOMAX){ return(BIGGESTDZRHOMAX); } } /* now iteratively decrease step size and narrow in on correct slope */ while(fabs(residual=rhos-rho)>threshold*rho){ dzstep/=2.0; if(residual<0){ dz-=dzstep; }else{ dz+=dzstep; } dx=(dr+dz*costheta)/sintheta; numerator=dz*sintheta+dx*costheta; costhetairsq=numerator*numerator/(dz*dz+dx*dx); rhos=1-rhosfactor*sqrt(costhetairsq/(1-costhetairsq)); if(rhos<0){ rhos=0; } if(++i>MAXITERATION){ fprintf(sp0,"Couldn't find slope for correlation of %f\n",rho); fprintf(sp0,"(check geometry and spatial decorrelation parameters)\n"); fprintf(sp0,"Abort\n"); exit(ABNORMAL_EXIT); } } return(dz); } /* function: CalcCostTopo() * ------------------------ * Calculates topography arc distance given an array of cost data structures. */ void CalcCostTopo(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long idz1, idz2pos, idz2neg, cost1, nflowsq, poscost, negcost; long nshortcycle, layfalloffconst; long offset, sigsq, laycost, dzmax; costT *cost; /* get arc info */ cost=&((costT **)(costs))[arcrow][arccol]; dzmax=cost->dzmax; offset=cost->offset; sigsq=cost->sigsq; laycost=cost->laycost; nshortcycle=params->nshortcycle; layfalloffconst=params->layfalloffconst; if(arcrowdzmax){ idz1-=dzmax; cost1=(idz1*idz1)/(layfalloffconst*sigsq)+laycost; }else{ cost1=(idz1*idz1)/sigsq; if(laycost!=NOCOSTSHELF && idz1>0 && cost1>laycost){ cost1=laycost; } } /* calculate positive cost increment */ if(idz2pos>dzmax){ idz2pos-=dzmax; poscost=(idz2pos*idz2pos)/(layfalloffconst*sigsq) +laycost-cost1; }else{ poscost=(idz2pos*idz2pos)/sigsq; if(laycost!=NOCOSTSHELF && idz2pos>0 && poscost>laycost){ poscost=laycost-cost1; }else{ poscost-=cost1; } } /* calculate negative cost increment */ if(idz2neg>dzmax){ idz2neg-=dzmax; negcost=(idz2neg*idz2neg)/(layfalloffconst*sigsq) +laycost-cost1; }else{ negcost=(idz2neg*idz2neg)/sigsq; if(laycost!=NOCOSTSHELF && idz2neg>0 && negcost>laycost){ negcost=laycost-cost1; }else{ negcost-=cost1; } } /* scale costs for this nflow */ nflowsq=nflow*nflow; if(poscost>0){ *poscostptr=(long )ceil((float )poscost/nflowsq); }else{ *poscostptr=(long )floor((float )poscost/nflowsq); } if(negcost>0){ *negcostptr=(long )ceil((float )negcost/nflowsq); }else{ *negcostptr=(long )floor((float )negcost/nflowsq); } } /* function: CalcCostDefo() * ------------------------ * Calculates deformation arc distance given an array of cost data structures. */ void CalcCostDefo(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long idz1, idz2pos, idz2neg, cost1, nflowsq, poscost, negcost; long nshortcycle, layfalloffconst; costT *cost; /* get arc info */ cost=&((costT **)(costs))[arcrow][arccol]; nshortcycle=params->nshortcycle; layfalloffconst=params->layfalloffconst; idz1=labs(flow*nshortcycle+cost->offset); idz2pos=labs((flow+nflow)*nshortcycle+cost->offset); idz2neg=labs((flow-nflow)*nshortcycle+cost->offset); /* calculate cost1 */ if(idz1>cost->dzmax){ idz1-=cost->dzmax; cost1=(idz1*idz1)/(layfalloffconst*(cost->sigsq))+cost->laycost; }else{ cost1=(idz1*idz1)/cost->sigsq; if(cost->laycost!=NOCOSTSHELF && cost1>cost->laycost){ cost1=cost->laycost; } } /* calculate positive cost increment */ if(idz2pos>cost->dzmax){ idz2pos-=cost->dzmax; poscost=(idz2pos*idz2pos)/(layfalloffconst*(cost->sigsq)) +cost->laycost-cost1; }else{ poscost=(idz2pos*idz2pos)/cost->sigsq; if(cost->laycost!=NOCOSTSHELF && poscost>cost->laycost){ poscost=cost->laycost-cost1; }else{ poscost-=cost1; } } /* calculate negative cost increment */ if(idz2neg>cost->dzmax){ idz2neg-=cost->dzmax; negcost=(idz2neg*idz2neg)/(layfalloffconst*(cost->sigsq)) +cost->laycost-cost1; }else{ negcost=(idz2neg*idz2neg)/cost->sigsq; if(cost->laycost!=NOCOSTSHELF && negcost>cost->laycost){ negcost=cost->laycost-cost1; }else{ negcost-=cost1; } } /* scale costs for this nflow */ nflowsq=nflow*nflow; if(poscost>0){ *poscostptr=(long )ceil((float )poscost/nflowsq); }else{ *poscostptr=(long )floor((float )poscost/nflowsq); } if(negcost>0){ *negcostptr=(long )ceil((float )negcost/nflowsq); }else{ *negcostptr=(long )floor((float )negcost/nflowsq); } } /* function: CalcCostSmooth() * -------------------------- * Calculates smooth-solution arc distance given an array of smoothcost * data structures. */ void CalcCostSmooth(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long idz1, idz2pos, idz2neg, cost1, nflowsq, poscost, negcost; long nshortcycle; smoothcostT *cost; /* get arc info */ cost=&((smoothcostT **)(costs))[arcrow][arccol]; nshortcycle=params->nshortcycle; idz1=labs(flow*nshortcycle+cost->offset); idz2pos=labs((flow+nflow)*nshortcycle+cost->offset); idz2neg=labs((flow-nflow)*nshortcycle+cost->offset); /* calculate cost1 */ cost1=(idz1*idz1)/cost->sigsq; /* calculate positive cost increment */ poscost=(idz2pos*idz2pos)/cost->sigsq-cost1; /* calculate negative cost increment */ negcost=(idz2neg*idz2neg)/cost->sigsq-cost1; /* scale costs for this nflow */ nflowsq=nflow*nflow; if(poscost>0){ *poscostptr=(long )ceil((float )poscost/nflowsq); }else{ *poscostptr=(long )floor((float )poscost/nflowsq); } if(negcost>0){ *negcostptr=(long )ceil((float )negcost/nflowsq); }else{ *negcostptr=(long )floor((float )negcost/nflowsq); } } /* function: CalcCostL0() * ---------------------- * Calculates the L0 arc distance given an array of short integer weights. */ void CalcCostL0(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ /* L0-norm */ if(flow){ if(flow+nflow){ *poscostptr=0; }else{ *poscostptr=-((short **)costs)[arcrow][arccol]; } if(flow-nflow){ *negcostptr=0; }else{ *negcostptr=-((short **)costs)[arcrow][arccol]; } }else{ *poscostptr=((short **)costs)[arcrow][arccol]; *negcostptr=((short **)costs)[arcrow][arccol]; } } /* function: CalcCostL1() * ---------------------- * Calculates the L1 arc distance given an array of short integer weights. */ void CalcCostL1(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ /* L1-norm */ *poscostptr=((short **)costs)[arcrow][arccol]*(labs(flow+nflow)-labs(flow)); *negcostptr=((short **)costs)[arcrow][arccol]*(labs(flow-nflow)-labs(flow)); } /* function: CalcCostL2() * ---------------------- * Calculates the L2 arc distance given an array of short integer weights. */ void CalcCostL2(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long flow2, flowsq; /* L2-norm */ flowsq=flow*flow; flow2=flow+nflow; *poscostptr=((short **)costs)[arcrow][arccol]*(flow2*flow2-flowsq); flow2=flow-nflow; *negcostptr=((short **)costs)[arcrow][arccol]*(flow2*flow2-flowsq); } /* function: CalcCostLP() * ---------------------- * Calculates the Lp arc distance given an array of short integer weights. */ void CalcCostLP(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long p; short flow2; /* Lp-norm */ flow2=flow+nflow; p=params->p; *poscostptr=LRound(((short **)costs)[arcrow][arccol]* (pow(labs(flow2),p)-pow(labs(flow),p))); flow2=flow-nflow; *negcostptr=LRound(((short **)costs)[arcrow][arccol]* (pow(labs(flow2),p)-pow(labs(flow),p))); } /* function: CalcCostNonGrid() * --------------------------- * Calculates the arc cost given an array of long integer cost lookup tables. */ void CalcCostNonGrid(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long xflow, flowmax, poscost, negcost, nflowsq, arroffset, sumsigsqinv; long abscost0; long *costarr; float c1; /* set up */ flowmax=params->scndryarcflowmax; costarr=((long ***)costs)[arcrow][arccol]; arroffset=costarr[0]; sumsigsqinv=costarr[2*flowmax+1]; /* return zero costs if this is a zero cost arc */ if(sumsigsqinv==ZEROCOSTARC){ *poscostptr=0; *negcostptr=0; return; } /* compute cost of current flow */ xflow=flow+arroffset; if(xflow>flowmax){ c1=costarr[flowmax]/(float )flowmax-sumsigsqinv*flowmax; abscost0=(sumsigsqinv*xflow+LRound(c1))*xflow; }else if(xflow<-flowmax){ c1=costarr[2*flowmax]/(float )flowmax-sumsigsqinv*flowmax; abscost0=(sumsigsqinv*xflow+LRound(c1))*xflow; }else{ if(xflow>0){ abscost0=costarr[xflow]; }else if(xflow<0){ abscost0=costarr[flowmax-xflow]; }else{ abscost0=0; } } /* compute costs of positive and negative flow increments */ xflow=flow+arroffset+nflow; if(xflow>flowmax){ c1=costarr[flowmax]/(float )flowmax-sumsigsqinv*flowmax; poscost=((sumsigsqinv*xflow+LRound(c1))*xflow)-abscost0; }else if(xflow<-flowmax){ c1=costarr[2*flowmax]/(float )flowmax-sumsigsqinv*flowmax; poscost=((sumsigsqinv*xflow+LRound(c1))*xflow)-abscost0; }else{ if(xflow>0){ poscost=costarr[xflow]-abscost0; }else if(xflow<0){ poscost=costarr[flowmax-xflow]-abscost0; }else{ poscost=-abscost0; } } xflow=flow+arroffset-nflow; if(xflow>flowmax){ c1=costarr[flowmax]/(float )flowmax-sumsigsqinv*flowmax; negcost=((sumsigsqinv*xflow+LRound(c1))*xflow)-abscost0; }else if(xflow<-flowmax){ c1=costarr[2*flowmax]/(float )flowmax-sumsigsqinv*flowmax; negcost=((sumsigsqinv*xflow+LRound(c1))*xflow)-abscost0; }else{ if(xflow>0){ negcost=costarr[xflow]-abscost0; }else if(xflow<0){ negcost=costarr[flowmax-xflow]-abscost0; }else{ negcost=-abscost0; } } /* scale for this flow increment and set output values */ nflowsq=nflow*nflow; if(poscost>0){ *poscostptr=(long )ceil((float )poscost/nflowsq); }else{ *poscostptr=(long )floor((float )poscost/nflowsq); } if(negcost>0){ *negcostptr=(long )ceil((float )negcost/nflowsq); }else{ *negcostptr=(long )floor((float )negcost/nflowsq); } } /* function: EvalCostTopo() * ------------------------ * Calculates topography arc cost given an array of cost data structures. */ long EvalCostTopo(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ long idz1, cost1, dzmax; costT *cost; /* get arc info */ cost=&((costT **)(costs))[arcrow][arccol]; if(arcrownshortcycle)+cost->offset); dzmax=cost->dzmax; }else{ /* column cost: non-symmetric dz */ idz1=flows[arcrow][arccol]*(params->nshortcycle)+cost->offset; if((dzmax=cost->dzmax)<0){ idz1*=-1; dzmax*=-1; } } /* calculate and return cost */ if(idz1>dzmax){ idz1-=dzmax; cost1=(idz1*idz1)/((params->layfalloffconst)*(cost->sigsq))+cost->laycost; }else{ cost1=(idz1*idz1)/cost->sigsq; if(cost->laycost!=NOCOSTSHELF && idz1>0 && cost1>cost->laycost){ cost1=cost->laycost; } } return(cost1); } /* function: EvalCostDefo() * ------------------------ * Calculates deformation arc cost given an array of cost data structures. */ long EvalCostDefo(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ long idz1, cost1; costT *cost; /* get arc info */ cost=&((costT **)(costs))[arcrow][arccol]; idz1=labs(flows[arcrow][arccol]*(params->nshortcycle)+cost->offset); /* calculate and return cost */ if(idz1>cost->dzmax){ idz1-=cost->dzmax; cost1=(idz1*idz1)/((params->layfalloffconst)*(cost->sigsq))+cost->laycost; }else{ cost1=(idz1*idz1)/cost->sigsq; if(cost->laycost!=NOCOSTSHELF && cost1>cost->laycost){ cost1=cost->laycost; } } return(cost1); } /* function: EvalCostSmooth() * -------------------------- * Calculates smooth-solution arc cost given an array of * smoothcost data structures. */ long EvalCostSmooth(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ long idz1; smoothcostT *cost; /* get arc info */ cost=&((smoothcostT **)(costs))[arcrow][arccol]; idz1=labs(flows[arcrow][arccol]*(params->nshortcycle)+cost->offset); /* calculate and return cost */ return((idz1*idz1)/cost->sigsq); } /* function: EvalCostL0() * ---------------------- * Calculates the L0 arc cost given an array of cost data structures. */ long EvalCostL0(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ /* L0-norm */ if(flows[arcrow][arccol]){ return((long)((short **)costs)[arcrow][arccol]); }else{ return(0); } } /* function: EvalCostL1() * ---------------------- * Calculates the L1 arc cost given an array of cost data structures. */ long EvalCostL1(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ /* L1-norm */ return( (((short **)costs)[arcrow][arccol]) * labs(flows[arcrow][arccol]) ); } /* function: EvalCostL2() * ---------------------- * Calculates the L2 arc cost given an array of cost data structures. */ long EvalCostL2(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ /* L2-norm */ return( (((short **)costs)[arcrow][arccol]) * (flows[arcrow][arccol]*flows[arcrow][arccol]) ); } /* function: EvalCostLP() * ---------------------- * Calculates the Lp arc cost given an array of cost data structures. */ long EvalCostLP(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ /* Lp-norm */ return( (((short **)costs)[arcrow][arccol]) * pow(labs(flows[arcrow][arccol]),params->p) ); } /* function: EvalCostNonGrid() * --------------------------- * Calculates the arc cost given an array of long integer cost lookup tables. */ long EvalCostNonGrid(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ long flow, xflow, flowmax, arroffset, sumsigsqinv; long *costarr; float c1; /* set up */ flow=flows[arcrow][arccol]; flowmax=params->scndryarcflowmax; costarr=((long ***)costs)[arcrow][arccol]; arroffset=costarr[0]; sumsigsqinv=costarr[2*flowmax+1]; /* return zero costs if this is a zero cost arc */ if(sumsigsqinv==ZEROCOSTARC){ return(0); } /* compute cost of current flow */ xflow=flow+arroffset; if(xflow>flowmax){ c1=costarr[flowmax]/(float )flowmax-sumsigsqinv*flowmax; return((sumsigsqinv*xflow+LRound(c1))*xflow); }else if(xflow<-flowmax){ c1=costarr[2*flowmax]/(float )flowmax-sumsigsqinv*flowmax; return((sumsigsqinv*xflow+LRound(c1))*xflow); }else{ if(xflow>0){ return(costarr[xflow]); }else if(xflow<0){ return(costarr[flowmax-xflow]); }else{ return(0); } } } /* function: CalcInitMaxFlow() * --------------------------- * Calculates the maximum flow magnitude to allow in the initialization * by examining the dzmax members of arc statistical cost data structures. */ void CalcInitMaxFlow(paramT *params, void **costs, long nrow, long ncol){ long row, col, maxcol, initmaxflow, arcmaxflow; if(params->initmaxflow<=0){ if(params->costmode==NOSTATCOSTS){ params->initmaxflow=NOSTATINITMAXFLOW; }else{ if(params->costmode==TOPO || params->costmode==DEFO){ initmaxflow=0; for(row=0;row<2*nrow-1;row++){ if(rownshortcycle) +params->arcmaxflowconst); if(arcmaxflow>initmaxflow){ initmaxflow=arcmaxflow; } } } } params->initmaxflow=initmaxflow; }else{ params->initmaxflow=DEF_INITMAXFLOW; } } } } GMTSAR_V5.7/snaphu/src/Makefile000644 015705 000000 00000003032 13505462014 017264 0ustar00sandwellwheel000000 000000 # $Id: Makefile 33 2013-04-06 05:37:15Z pwessel $ # # makefile for snaphu directory # # Makefile for statistical-cost network-flow algorithm for phase unwrapping # Curtis W. Chen # Copyright 2002 Board of Trustees, Leland Stanford Jr. University # # If you want to copy the man page and executable to a system directory, # specify the appropriate directories in the INSTALLDIR and MANDIR # variables and do 'make install' (you will probably need to be root). # # If you specify -D NO_CS2, the program will be compiled without the # CS2 MCF solver module. include ../../config.mk PROGS_C = snaphu.c LIB_C = snaphu_tile.c \ snaphu_solver.c \ snaphu_io.c \ snaphu_util.c \ snaphu_cost.c \ snaphu_cs2.c PROGS_O = $(PROGS_C:.c=.o) PROGS = $(PROGS_C:.c=) MANDIR = /usr/local/man SNAPHUMAN = ../man/man1/snaphu.1 LIB_O = $(LIB_C:.c=.o) #------------------------------------------------------------------------------- # software targets #------------------------------------------------------------------------------- all: $(PROGS) install: all $(INSTALL) -d $(bindir) $(INSTALL) $(PROGS) $(bindir) install-man: cp $(SNAPHUMAN) $(MANDIR)/man1 uninstall: cd $(bindir); rm -f $(PROGS) spotless:: clean clean: rm -f *.o *% core tags $(PROGS) #------------------------------------------------------------------------------- # program rules #------------------------------------------------------------------------------- $(PROGS): $(PROGS_O) $(LIB_O) $(CC) $(LDFLAGS) $@.o $(LIB_O) $(LIBS) -o $@ GMTSAR_V5.7/snaphu/src/snaphu_cs2.c000644 015705 000000 00000116077 13505462014 020053 0ustar00sandwellwheel000000 000000 /*********************************************************************** This code is derived from cs2 v3.7 Written by Andrew V. Goldberg and Boris Cherkassky Modifications for use in snaphu by Curtis W. Chen The cs2 code is used here with permission for strictly noncommerical use. The original cs2 source code can be downloaded from http://www.igsystems.com/cs2 The original cs2 copyright is stated as follows: COPYRIGHT C 1995 IG Systems, Inc. Permission to use for evaluation purposes is granted provided that proper acknowledgments are given. For a commercial licence, contact igsys@eclipse.net. This software comes with NO WARRANTY, expressed or implied. By way of example, but not limitation, we make no representations of warranties of merchantability or fitness for any particular purpose or that the use of the software components or documentation will not infringe any patents, copyrights, trademarks, or other rights. Copyright 2002 Board of Trustees, Leland Stanford Jr. University *************************************************************************/ /* min-cost flow */ /* successive approximation algorithm */ /* Copyright C IG Systems, igsys@eclipse.com */ /* any use except for evaluation purposes requires a licence */ /* parser changed to take input from passed data */ /* main() changed to callable function */ /* outputs parsed as flow */ /* functions made static */ /* MAX and MIN macros renamed GREATEROF and LESSEROF */ #ifndef NO_CS2 /************************************** constants & parameters ********/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* for measuring time */ /* definitions of types: node & arc */ #define PRICE_MAX 1e30 #define BIGGEST_FLOW LARGESHORT #include "snaphu_cs2types.h" /* parser for getting DIMACS format input and transforming the data to the internal representation */ #include "snaphu_cs2parse.c" #define N_NODE( i ) ( ( (i) == NULL ) ? -1 : ( (i) - ndp + nmin ) ) #define N_ARC( a ) ( ( (a) == NULL )? -1 : (a) - arp ) #define UNFEASIBLE 2 #define ALLOCATION_FAULT 5 #define PRICE_OFL 6 /* parameters */ #define UPDT_FREQ 0.4 #define UPDT_FREQ_S 30 #define SCALE_DEFAULT 12.0 /* PRICE_OUT_START may not be less than 1 */ #define PRICE_OUT_START 1 #define CUT_OFF_POWER 0.44 #define CUT_OFF_COEF 1.5 #define CUT_OFF_POWER2 0.75 #define CUT_OFF_COEF2 1 #define CUT_OFF_GAP 0.8 #define CUT_OFF_MIN 12 #define CUT_OFF_INCREASE 4 /* #define TIME_FOR_PRICE_IN 5 */ #define TIME_FOR_PRICE_IN1 2 #define TIME_FOR_PRICE_IN2 4 #define TIME_FOR_PRICE_IN3 6 #define EMPTY_PUSH_COEF 1.0 /* #define MAX_CYCLES_CANCELLED 10 #define START_CYCLE_CANCEL 3 */ #define MAX_CYCLES_CANCELLED 0 #define START_CYCLE_CANCEL 100 /************************************************ shared macros *******/ #define GREATEROF( x, y ) ( ( (x) > (y) ) ? x : y ) #define LESSEROF( x, y ) ( ( (x) < (y) ) ? x : y ) #define OPEN( a ) ( a -> r_cap > 0 ) #define CLOSED( a ) ( a -> r_cap <= 0 ) #define REDUCED_COST( i, j, a ) ( (i->price) + dn*(a->cost) - (j->price) ) #define FEASIBLE( i, j, a ) ( (i->price) + dn*(a->cost) < (j->price) ) #define ADMISSIBLE( i, j, a ) ( OPEN(a) && FEASIBLE( i, j, a ) ) #define INCREASE_FLOW( i, j, a, df )\ {\ (i) -> excess -= df;\ (j) -> excess += df;\ (a) -> r_cap -= df;\ ((a) -> sister) -> r_cap += df;\ }\ /*---------------------------------- macros for excess queue */ #define RESET_EXCESS_Q \ {\ for ( ; excq_first != NULL; excq_first = excq_last )\ {\ excq_last = excq_first -> q_next;\ excq_first -> q_next = sentinel_node;\ }\ } #define OUT_OF_EXCESS_Q( i ) ( i -> q_next == sentinel_node ) #define EMPTY_EXCESS_Q ( excq_first == NULL ) #define NONEMPTY_EXCESS_Q ( excq_first != NULL ) #define INSERT_TO_EXCESS_Q( i )\ {\ if ( NONEMPTY_EXCESS_Q )\ excq_last -> q_next = i;\ else\ excq_first = i;\ \ i -> q_next = NULL;\ excq_last = i;\ } #define INSERT_TO_FRONT_EXCESS_Q( i )\ {\ if ( EMPTY_EXCESS_Q )\ excq_last = i;\ \ i -> q_next = excq_first;\ excq_first = i;\ } #define REMOVE_FROM_EXCESS_Q( i )\ {\ i = excq_first;\ excq_first = i -> q_next;\ i -> q_next = sentinel_node;\ } /*---------------------------------- excess queue as a stack */ #define EMPTY_STACKQ EMPTY_EXCESS_Q #define NONEMPTY_STACKQ NONEMPTY_EXCESS_Q #define RESET_STACKQ RESET_EXCESS_Q #define STACKQ_PUSH( i )\ {\ i -> q_next = excq_first;\ excq_first = i;\ } #define STACKQ_POP( i ) REMOVE_FROM_EXCESS_Q( i ) /*------------------------------------ macros for buckets */ node dnd, *dnode; #define RESET_BUCKET( b ) ( b -> p_first ) = dnode; #define INSERT_TO_BUCKET( i, b )\ {\ i -> b_next = ( b -> p_first );\ ( b -> p_first ) -> b_prev = i;\ ( b -> p_first ) = i;\ } #define NONEMPTY_BUCKET( b ) ( ( b -> p_first ) != dnode ) #define GET_FROM_BUCKET( i, b )\ {\ i = ( b -> p_first );\ ( b -> p_first ) = i -> b_next;\ } #define REMOVE_FROM_BUCKET( i, b )\ {\ if ( i == ( b -> p_first ) )\ ( b -> p_first ) = i -> b_next;\ else\ {\ ( i -> b_prev ) -> b_next = i -> b_next;\ ( i -> b_next ) -> b_prev = i -> b_prev;\ }\ } /*------------------------------------------- misc macros */ #define UPDATE_CUT_OFF \ {\ if (n_bad_pricein + n_bad_relabel == 0) \ {\ cut_off_factor = CUT_OFF_COEF2 * pow ( (double)n, CUT_OFF_POWER2 );\ cut_off_factor = GREATEROF ( cut_off_factor, CUT_OFF_MIN );\ cut_off = cut_off_factor * epsilon;\ cut_on = cut_off * CUT_OFF_GAP;\ }\ else\ {\ cut_off_factor *= CUT_OFF_INCREASE;\ cut_off = cut_off_factor * epsilon;\ cut_on = cut_off * CUT_OFF_GAP;\ }\ } #define TIME_FOR_UPDATE \ ( n_rel > n * UPDT_FREQ + n_src * UPDT_FREQ_S ) #define FOR_ALL_NODES_i for ( i = nodes; i != sentinel_node; i ++ ) #define FOR_ALL_ARCS_a_FROM_i \ for ( a = i -> first, a_stop = ( i + 1 ) -> suspended; a != a_stop; a ++ ) #define FOR_ALL_CURRENT_ARCS_a_FROM_i \ for ( a = i -> current, a_stop = ( i + 1 ) -> suspended; a != a_stop; a ++ ) #define WHITE 0 #define GREY 1 #define BLACK 2 arc *sa, *sb; long d_cap; #define EXCHANGE( a, b )\ {\ if ( a != b )\ {\ sa = a -> sister;\ sb = b -> sister;\ \ d_arc.r_cap = a -> r_cap;\ d_arc.cost = a -> cost;\ d_arc.head = a -> head;\ \ a -> r_cap = b -> r_cap;\ a -> cost = b -> cost;\ a -> head = b -> head;\ \ b -> r_cap = d_arc.r_cap;\ b -> cost = d_arc.cost;\ b -> head = d_arc.head;\ \ if ( a != sb )\ {\ b -> sister = sa;\ a -> sister = sb;\ sa -> sister = b;\ sb -> sister = a;\ }\ \ d_cap = cap[a-arcs];\ cap[a-arcs] = cap[b-arcs];\ cap[b-arcs] = d_cap;\ }\ } #define SUSPENDED( i, a ) ( a < i -> first ) long n_push =0, n_relabel =0, n_discharge =0, n_refine =0, n_update =0, n_scan =0, n_prscan =0, n_prscan1 =0, n_prscan2 =0, n_bad_pricein = 0, n_bad_relabel = 0, n_prefine =0; long n, /* number of nodes */ m; /* number of arcs */ short *cap; /* array containig capacities */ node *nodes, /* array of nodes */ *sentinel_node, /* next after last */ *excq_first, /* first node in push-queue */ *excq_last; /* last node in push-queue */ arc *arcs, /* array of arcs */ *sentinel_arc; /* next after last */ bucket *buckets, /* array of buckets */ *l_bucket; /* last bucket */ long linf; /* number of l_bucket + 1 */ double dlinf; /* copy of linf in double mode */ int time_for_price_in; double epsilon, /* optimality bound */ low_bound, /* lowest bound for epsilon */ price_min, /* lowest bound for prices */ f_scale, /* scale factor */ dn, /* cost multiplier - number of nodes + 1 */ mmc, /* multiplied maximal cost */ cut_off_factor, /* multiplier to produce cut_on and cut_off from n and epsilon */ cut_on, /* the bound for returning suspended arcs */ cut_off; /* the bound for suspending arcs */ double total_excess; /* total excess */ long n_rel, /* number of relabels from last price update */ n_ref, /* current number of refines */ n_src; /* current number of nodes with excess */ int flag_price = 0, /* if = 1 - signal to start price-in ASAP - maybe there is infeasibility because of susoended arcs */ flag_updt = 0; /* if = 1 - update failed some sources are unreachable: either the problem is unfeasible or you have to return suspended arcs */ long empty_push_bound; /* maximal possible number of zero pushes during one discharge */ int snc_max; /* maximal number of cycles cancelled during price refine */ arc d_arc; /* dummy arc - for technical reasons */ node d_node, /* dummy node - for technical reasons */ *dummy_node; /* the address of d_node */ /************************************************ abnormal finish **********/ static void err_end ( cc ) int cc; { fprintf ( sp0, "\ncs2 solver: Error %d ", cc ); if(cc==ALLOCATION_FAULT){ fprintf(sp0,"(allocation fault)\n"); }else if(cc==UNFEASIBLE){ fprintf(sp0,"(problem infeasible)\n"); }else if(cc==PRICE_OFL){ fprintf(sp0,"(price overflow)\n"); } /* 2 - problem is unfeasible 5 - allocation fault 6 - price overflow */ exit(ABNORMAL_EXIT); /* exit ( cc ); */ } /************************************************* initialization **********/ static void cs_init ( n_p, m_p, nodes_p, arcs_p, f_sc, max_c, cap_p ) long n_p, /* number of nodes */ m_p; /* number of arcs */ node *nodes_p; /* array of nodes */ arc *arcs_p; /* array of arcs */ long f_sc; /* scaling factor */ double max_c; /* maximal cost */ short *cap_p; /* array of capacities (changed to short by CWC) */ { node *i; /* current node */ /*arc *a; */ /* current arc */ bucket *b; /* current bucket */ n = n_p; nodes = nodes_p; sentinel_node = nodes + n; m = m_p; arcs = arcs_p; sentinel_arc = arcs + m; cap = cap_p; f_scale = f_sc; low_bound = 1.00001; dn = (double) n ; /* for ( a = arcs ; a != sentinel_arc ; a ++ ) a -> cost *= dn; */ mmc = max_c * dn; linf = n * f_scale + 2; dlinf = (double)linf; buckets = (bucket*) CAlloc ( linf, sizeof (bucket) ); if ( buckets == NULL ) err_end ( ALLOCATION_FAULT ); l_bucket = buckets + linf; dnode = &dnd; for ( b = buckets; b != l_bucket; b ++ ) RESET_BUCKET ( b ); epsilon = mmc; if ( epsilon < 1 ) epsilon = 1; price_min = - PRICE_MAX; FOR_ALL_NODES_i { i -> price = 0; i -> suspended = i -> first; i -> q_next = sentinel_node; } sentinel_node -> first = sentinel_node -> suspended = sentinel_arc; cut_off_factor = CUT_OFF_COEF * pow ( (double)n, CUT_OFF_POWER ); cut_off_factor = GREATEROF ( cut_off_factor, CUT_OFF_MIN ); n_ref = 0; flag_price = 0; dummy_node = &d_node; excq_first = NULL; empty_push_bound = n * EMPTY_PUSH_COEF; } /* end of initialization */ /********************************************** up_node_scan *************/ static void up_node_scan ( i ) node *i; /* node for scanning */ { node *j; /* opposite node */ arc *a, /* ( i, j ) */ *a_stop, /* first arc from the next node */ *ra; /* ( j, i ) */ bucket *b_old, /* old bucket contained j */ *b_new; /* new bucket for j */ long i_rank, j_rank, /* ranks of nodes */ j_new_rank; double rc, /* reduced cost of (j,i) */ dr; /* rank difference */ n_scan ++; i_rank = i -> rank; FOR_ALL_ARCS_a_FROM_i { ra = a -> sister; if ( OPEN ( ra ) ) { j = a -> head; j_rank = j -> rank; if ( j_rank > i_rank ) { if ( ( rc = REDUCED_COST ( j, i, ra ) ) < 0 ) j_new_rank = i_rank; else { dr = rc / epsilon; j_new_rank = ( dr < dlinf ) ? i_rank + (long)dr + 1 : linf; } if ( j_rank > j_new_rank ) { j -> rank = j_new_rank; j -> current = ra; if ( j_rank < linf ) { b_old = buckets + j_rank; REMOVE_FROM_BUCKET ( j, b_old ) } b_new = buckets + j_new_rank; INSERT_TO_BUCKET ( j, b_new ) } } } } /* end of scanning arcs */ i -> price -= i_rank * epsilon; i -> rank = -1; } /*************************************************** price_update *******/ static void price_update () { register node *i; double remain; /* total excess of unscanned nodes with positive excess */ bucket *b; /* current bucket */ double dp; /* amount to be subtracted from prices */ n_update ++; FOR_ALL_NODES_i { if ( i -> excess < 0 ) { INSERT_TO_BUCKET ( i, buckets ); i -> rank = 0; } else { i -> rank = linf; } } remain = total_excess; if ( remain < 0.5 ) return; /* main loop */ for ( b = buckets; b != l_bucket; b ++ ) { while ( NONEMPTY_BUCKET ( b ) ) { GET_FROM_BUCKET ( i, b ) up_node_scan ( i ); if ( i -> excess > 0 ) { remain -= (double)(i -> excess); if ( remain <= 0 ) break; } } /* end of scanning the bucket */ if ( remain <= 0 ) break; } /* end of scanning buckets */ if ( remain > 0.5 ) flag_updt = 1; /* finishup */ /* changing prices for nodes which were not scanned during main loop */ dp = ( b - buckets ) * epsilon; FOR_ALL_NODES_i { if ( i -> rank >= 0 ) { if ( i -> rank < linf ) REMOVE_FROM_BUCKET ( i, (buckets + i -> rank) ); if ( i -> price > price_min ) i -> price -= dp; } } } /* end of price_update */ /****************************************************** relabel *********/ static int relabel ( i ) register node *i; /* node for relabelling */ { register arc *a, /* current arc from i */ *a_stop, /* first arc from the next node */ *a_max = NULL; /* arc which provides maximum price */ register double p_max, /* current maximal price */ i_price, /* price of node i */ dp; /* current arc partial residual cost */ p_max = price_min; i_price = i -> price; for ( a = i -> current + 1, a_stop = ( i + 1 ) -> suspended; a != a_stop; a ++ ) { if ( OPEN ( a ) && ( ( dp = ( ( a -> head ) -> price ) - dn*( a -> cost ) ) > p_max ) ) { if ( i_price < dp ) { i -> current = a; return ( 1 ); } p_max = dp; a_max = a; } } /* 1/2 arcs are scanned */ for ( a = i -> first, a_stop = ( i -> current ) + 1; a != a_stop; a ++ ) { if ( OPEN ( a ) && ( ( dp = ( ( a -> head ) -> price ) - dn*( a -> cost ) ) > p_max ) ) { if ( i_price < dp ) { i -> current = a; return ( 1 ); } p_max = dp; a_max = a; } } /* 2/2 arcs are scanned */ /* finishup */ if ( p_max != price_min ) { i -> price = p_max - epsilon; i -> current = a_max; } else { /* node can't be relabelled */ if ( i -> suspended == i -> first ) { if ( i -> excess == 0 ) { i -> price = price_min; } else { if ( n_ref == 1 ) { err_end ( UNFEASIBLE ); } else { err_end ( PRICE_OFL ); } } } else /* node can't be relabelled because of suspended arcs */ { flag_price = 1; } } n_relabel ++; n_rel ++; return ( 0 ); } /* end of relabel */ /***************************************************** discharge *********/ static void discharge ( i ) register node *i; /* node to be discharged */ { register arc *a; /* an arc from i */ arc *b, /* an arc from j */ *ra; /* reversed arc (j,i) */ register node *j; /* head of a */ register long df; /* amoumt of flow to be pushed through a */ excess_t j_exc; /* former excess of j */ int empty_push; /* number of unsuccessful attempts to push flow out of i. If it is too big - it is time for global update */ n_discharge ++; empty_push = 0; a = i -> current; j = a -> head; if ( !ADMISSIBLE ( i, j, a ) ) { relabel ( i ); a = i -> current; j = a -> head; } while ( 1 ) { j_exc = j -> excess; if ( j_exc >= 0 ) { b = j -> current; if ( ADMISSIBLE ( j, b -> head, b ) || relabel ( j ) ) { /* exit from j exists */ df = LESSEROF ( i -> excess, a -> r_cap ); if (j_exc == 0) n_src++; INCREASE_FLOW ( i, j, a, df ) n_push ++; if ( OUT_OF_EXCESS_Q ( j ) ) { INSERT_TO_EXCESS_Q ( j ); } } else { /* push back */ ra = a -> sister; df = LESSEROF ( j -> excess, ra -> r_cap ); if ( df > 0 ) { INCREASE_FLOW ( j, i, ra, df ); if (j->excess == 0) n_src--; n_push ++; } if ( empty_push ++ >= empty_push_bound ) { flag_price = 1; return; } } } else /* j_exc < 0 */ { df = LESSEROF ( i -> excess, a -> r_cap ); INCREASE_FLOW ( i, j, a, df ) n_push ++; if ( j -> excess >= 0 ) { if ( j -> excess > 0 ) { n_src++; relabel ( j ); INSERT_TO_EXCESS_Q ( j ); } total_excess += j_exc; } else total_excess -= df; } if (i -> excess <= 0) n_src--; if ( i -> excess <= 0 || flag_price ) break; relabel ( i ); a = i -> current; j = a -> head; } i -> current = a; } /* end of discharge */ /***************************************************** price_in *******/ static int price_in () { node *i, /* current node */ *j; arc *a, /* current arc from i */ *a_stop, /* first arc from the next node */ *b, /* arc to be exchanged with suspended */ *ra, /* opposite to a */ *rb; /* opposite to b */ double rc; /* reduced cost */ int n_in_bad, /* number of priced_in arcs with negative reduced cost */ bad_found; /* if 1 we are at the second scan if 0 we are at the first scan */ excess_t i_exc, /* excess of i */ df; /* an amount to increase flow */ bad_found = 0; n_in_bad = 0; restart: FOR_ALL_NODES_i { for ( a = ( i -> first ) - 1, a_stop = ( i -> suspended ) - 1; a != a_stop; a -- ) { rc = REDUCED_COST ( i, a -> head, a ); if ( (rc < 0) && ( a -> r_cap > 0) ) { /* bad case */ if ( bad_found == 0 ) { bad_found = 1; UPDATE_CUT_OFF; goto restart; } df = a -> r_cap; INCREASE_FLOW ( i, a -> head, a, df ); ra = a -> sister; j = a -> head; b = -- ( i -> first ); EXCHANGE ( a, b ); if ( SUSPENDED ( j, ra ) ) { rb = -- ( j -> first ); EXCHANGE ( ra, rb ); } n_in_bad ++; } else if ( ( rc < cut_on ) && ( rc > -cut_on ) ) { b = -- ( i -> first ); EXCHANGE ( a, b ); } } } if ( n_in_bad != 0 ) { n_bad_pricein ++; /* recalculating excess queue */ total_excess = 0; n_src=0; RESET_EXCESS_Q; FOR_ALL_NODES_i { i -> current = i -> first; i_exc = i -> excess; if ( i_exc > 0 ) { /* i is a source */ total_excess += i_exc; n_src++; INSERT_TO_EXCESS_Q ( i ); } } INSERT_TO_EXCESS_Q ( dummy_node ); } if (time_for_price_in == TIME_FOR_PRICE_IN2) time_for_price_in = TIME_FOR_PRICE_IN3; if (time_for_price_in == TIME_FOR_PRICE_IN1) time_for_price_in = TIME_FOR_PRICE_IN2; return ( n_in_bad ); } /* end of price_in */ /************************************************** refine **************/ static void refine () { node *i; /* current node */ excess_t i_exc; /* excess of i */ /* long np, nr, ns; */ /* variables for additional print */ int pr_in_int; /* current number of updates between price_in */ /* np = n_push; nr = n_relabel; ns = n_scan; */ n_refine ++; n_ref ++; n_rel = 0; pr_in_int = 0; /* initialize */ total_excess = 0; n_src=0; RESET_EXCESS_Q time_for_price_in = TIME_FOR_PRICE_IN1; FOR_ALL_NODES_i { i -> current = i -> first; i_exc = i -> excess; if ( i_exc > 0 ) { /* i is a source */ total_excess += i_exc; n_src++; INSERT_TO_EXCESS_Q ( i ) } } if ( total_excess <= 0 ) return; /* main loop */ while ( 1 ) { if ( EMPTY_EXCESS_Q ) { if ( n_ref > PRICE_OUT_START ) { price_in (); } if ( EMPTY_EXCESS_Q ) break; } REMOVE_FROM_EXCESS_Q ( i ); /* push all excess out of i */ if ( i -> excess > 0 ) { discharge ( i ); if ( TIME_FOR_UPDATE || flag_price ) { if ( i -> excess > 0 ) { INSERT_TO_EXCESS_Q ( i ); } if ( flag_price && ( n_ref > PRICE_OUT_START ) ) { pr_in_int = 0; price_in (); flag_price = 0; } price_update(); while ( flag_updt ) { if ( n_ref == 1 ) { err_end ( UNFEASIBLE ); } else { flag_updt = 0; UPDATE_CUT_OFF; n_bad_relabel++; pr_in_int = 0; price_in (); price_update (); } } n_rel = 0; if ( n_ref > PRICE_OUT_START && (pr_in_int ++ > time_for_price_in) ) { pr_in_int = 0; price_in (); } } /* time for update */ } } /* end of main loop */ return; } /*----- end of refine */ /*************************************************** price_refine **********/ static int price_refine () { node *i, /* current node */ *j, /* opposite node */ *ir, /* nodes for passing over the negative cycle */ *is; arc *a, /* arc (i,j) */ *a_stop, /* first arc from the next node */ *ar; long bmax; /* number of farest nonempty bucket */ long i_rank, /* rank of node i */ j_rank, /* rank of node j */ j_new_rank; /* new rank of node j */ bucket *b, /* current bucket */ *b_old, /* old and new buckets of current node */ *b_new; double rc, /* reduced cost of a */ dr, /* ranks difference */ dp; int cc; /* return code: 1 - flow is epsilon optimal 0 - refine is needed */ long df; /* cycle capacity */ int nnc, /* number of negative cycles cancelled during one iteration */ snc; /* total number of negative cycle cancelled */ n_prefine ++; cc=1; snc=0; snc_max = ( n_ref >= START_CYCLE_CANCEL ) ? MAX_CYCLES_CANCELLED : 0; /* main loop */ while ( 1 ) { /* while negative cycle is found or eps-optimal solution is constructed */ nnc=0; FOR_ALL_NODES_i { i -> rank = 0; i -> inp = WHITE; i -> current = i -> first; } RESET_STACKQ FOR_ALL_NODES_i { if ( i -> inp == BLACK ) continue; i -> b_next = NULL; /* deapth first search */ while ( 1 ) { i -> inp = GREY; /* scanning arcs from node i starting from current */ FOR_ALL_CURRENT_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; if ( REDUCED_COST ( i, j, a ) < 0 ) { if ( j -> inp == WHITE ) { /* fresh node - step forward */ i -> current = a; j -> b_next = i; i = j; a = j -> current; a_stop = (j+1) -> suspended; break; } if ( j -> inp == GREY ) { /* cycle detected */ cc = 0; nnc++; i -> current = a; is = ir = i; df = BIGGEST_FLOW; while ( 1 ) { ar = ir -> current; if ( ar -> r_cap <= df ) { df = ar -> r_cap; is = ir; } if ( ir == j ) break; ir = ir -> b_next; } ir = i; while ( 1 ) { ar = ir -> current; INCREASE_FLOW( ir, ar -> head, ar, df) if ( ir == j ) break; ir = ir -> b_next; } if ( is != i ) { for ( ir = i; ir != is; ir = ir -> b_next ) ir -> inp = WHITE; i = is; a = (is -> current) + 1; a_stop = (is+1) -> suspended; break; } } } /* if j-color is BLACK - continue search from i */ } } /* all arcs from i are scanned */ if ( a == a_stop ) { /* step back */ i -> inp = BLACK; n_prscan1++; j = i -> b_next; STACKQ_PUSH ( i ); if ( j == NULL ) break; i = j; i -> current ++; } } /* end of deapth first search */ } /* all nodes are scanned */ /* no negative cycle */ /* computing longest paths with eps-precision */ snc += nnc; if ( snc rank; FOR_ALL_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; rc = REDUCED_COST ( i, j, a ); if ( rc < 0 ) /* admissible arc */ { dr = ( - rc - 0.5 ) / epsilon; if (( j_rank = dr + i_rank ) < dlinf ) { if ( j_rank > j -> rank ) j -> rank = j_rank; } } } } /* all arcs from i are scanned */ if ( i_rank > 0 ) { if ( i_rank > bmax ) bmax = i_rank; b = buckets + i_rank; INSERT_TO_BUCKET ( i, b ) } } /* end of while-cycle: all nodes are scanned - longest distancess are computed */ if ( bmax == 0 ) /* preflow is eps-optimal */ { break; } for ( b = buckets + bmax; b != buckets; b -- ) { i_rank = b - buckets; dp = (double)i_rank * epsilon; while ( NONEMPTY_BUCKET( b ) ) { GET_FROM_BUCKET ( i, b ); n_prscan++; FOR_ALL_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; j_rank = j -> rank; if ( j_rank < i_rank ) { rc = REDUCED_COST ( i, j, a ); if ( rc < 0 ) j_new_rank = i_rank; else { dr = rc / epsilon; j_new_rank = ( dr < dlinf ) ? i_rank - ( (long)dr + 1 ) : 0; } if ( j_rank < j_new_rank ) { if ( cc == 1 ) { j -> rank = j_new_rank; if ( j_rank > 0 ) { b_old = buckets + j_rank; REMOVE_FROM_BUCKET ( j, b_old ) } b_new = buckets + j_new_rank; INSERT_TO_BUCKET ( j, b_new ) } else { df = a -> r_cap; INCREASE_FLOW ( i, j, a, df ) } } } } /* end if opened arc */ } /* all arcs are scanned */ i -> price -= dp; } /* end of while-cycle: the bucket is scanned */ } /* end of for-cycle: all buckets are scanned */ if ( cc == 0 ) break; } /* end of main loop */ /* finish: */ /* if refine needed - saturate non-epsilon-optimal arcs */ if ( cc == 0 ) { FOR_ALL_NODES_i { FOR_ALL_ARCS_a_FROM_i { if ( REDUCED_COST ( i, a -> head, a ) < -epsilon ) { if ( ( df = a -> r_cap ) > 0 ) { INCREASE_FLOW ( i, a -> head, a, df ) } } } } } /*neg_cyc();*/ return ( cc ); } /* end of price_refine */ void compute_prices () { node *i, /* current node */ *j; /* opposite node */ arc *a, /* arc (i,j) */ *a_stop; /* first arc from the next node */ long bmax; /* number of farest nonempty bucket */ long i_rank, /* rank of node i */ j_rank, /* rank of node j */ j_new_rank; /* new rank of node j */ bucket *b, /* current bucket */ *b_old, /* old and new buckets of current node */ *b_new; double rc, /* reduced cost of a */ dr, /* ranks difference */ dp; int cc; /* return code: 1 - flow is epsilon optimal 0 - refine is needed */ n_prefine ++; cc=1; /* main loop */ while ( 1 ) { /* while negative cycle is found or eps-optimal solution is constructed */ FOR_ALL_NODES_i { i -> rank = 0; i -> inp = WHITE; i -> current = i -> first; } RESET_STACKQ FOR_ALL_NODES_i { if ( i -> inp == BLACK ) continue; i -> b_next = NULL; /* deapth first search */ while ( 1 ) { i -> inp = GREY; /* scanning arcs from node i */ FOR_ALL_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; if ( REDUCED_COST ( i, j, a ) < 0 ) { if ( j -> inp == WHITE ) { /* fresh node - step forward */ i -> current = a; j -> b_next = i; i = j; a = j -> current; a_stop = (j+1) -> suspended; break; } if ( j -> inp == GREY ) { /* cycle detected; should not happen */ cc = 0; } } /* if j-color is BLACK - continue search from i */ } } /* all arcs from i are scanned */ if ( a == a_stop ) { /* step back */ i -> inp = BLACK; n_prscan1++; j = i -> b_next; STACKQ_PUSH ( i ); if ( j == NULL ) break; i = j; i -> current ++; } } /* end of deapth first search */ } /* all nodes are scanned */ /* no negative cycle */ /* computing longest paths */ if ( cc == 0 ) break; bmax = 0; while ( NONEMPTY_STACKQ ) { n_prscan2++; STACKQ_POP ( i ); i_rank = i -> rank; FOR_ALL_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; rc = REDUCED_COST ( i, j, a ); if ( rc < 0 ) /* admissible arc */ { dr = - rc; if (( j_rank = dr + i_rank ) < dlinf ) { if ( j_rank > j -> rank ) j -> rank = j_rank; } } } } /* all arcs from i are scanned */ if ( i_rank > 0 ) { if ( i_rank > bmax ) bmax = i_rank; b = buckets + i_rank; INSERT_TO_BUCKET ( i, b ) } } /* end of while-cycle: all nodes are scanned - longest distancess are computed */ if ( bmax == 0 ) { break; } for ( b = buckets + bmax; b != buckets; b -- ) { i_rank = b - buckets; dp = (double) i_rank; while ( NONEMPTY_BUCKET( b ) ) { GET_FROM_BUCKET ( i, b ) n_prscan++; FOR_ALL_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; j_rank = j -> rank; if ( j_rank < i_rank ) { rc = REDUCED_COST ( i, j, a ); if ( rc < 0 ) j_new_rank = i_rank; else { dr = rc; j_new_rank = ( dr < dlinf ) ? i_rank - ( (long)dr + 1 ) : 0; } if ( j_rank < j_new_rank ) { if ( cc == 1 ) { j -> rank = j_new_rank; if ( j_rank > 0 ) { b_old = buckets + j_rank; REMOVE_FROM_BUCKET ( j, b_old ) } b_new = buckets + j_new_rank; INSERT_TO_BUCKET ( j, b_new ) } } } } /* end if opened arc */ } /* all arcs are scanned */ i -> price -= dp; } /* end of while-cycle: the bucket is scanned */ } /* end of for-cycle: all buckets are scanned */ if ( cc == 0 ) break; } /* end of main loop */ } /* end of compute_prices */ /***************************************************** price_out ************/ static void price_out () { node *i; /* current node */ arc *a, /* current arc from i */ *a_stop, /* first arc from the next node */ *b; /* arc to be exchanged with suspended */ double n_cut_off, /* -cut_off */ rc; /* reduced cost */ n_cut_off = - cut_off; FOR_ALL_NODES_i { FOR_ALL_ARCS_a_FROM_i { rc = REDUCED_COST ( i, a -> head, a ); if (((rc > cut_off) && (CLOSED(a -> sister))) || ((rc < n_cut_off) && (CLOSED(a))) ) { /* suspend the arc */ b = ( i -> first ) ++ ; EXCHANGE ( a, b ); } } } } /* end of price_out */ /**************************************************** update_epsilon *******/ /*----- decrease epsilon after epsilon-optimal flow is constructed */ static int update_epsilon() { if ( epsilon <= low_bound ) return ( 1 ); epsilon = ceil ( epsilon / f_scale ); cut_off = cut_off_factor * epsilon; cut_on = cut_off * CUT_OFF_GAP; return ( 0 ); } /*************************************************** finishup ***********/ static void finishup ( obj_ad ) double *obj_ad; /* objective */ { arc *a; /* current arc */ long na; /* corresponding position in capacity array */ double obj_internal;/* objective */ double cs; /* actual arc cost */ long flow; /* flow through an arc */ obj_internal = 0; for ( a = arcs, na = 0; a != sentinel_arc ; a ++, na ++ ) { /* cs = a -> cost / dn; */ cs = a -> cost; if ( cap[na] > 0 && ( flow = cap[na] - (a -> r_cap) ) != 0 ) obj_internal += cs * (double) flow; /* a -> cost = cs; */ } *obj_ad = obj_internal; } /*********************************************** init_solution ***********/ /* static void init_solution ( ) */ /* { */ /* arc *a; */ /* current arc (i,j) */ /* node *i, */ /* tail of a */ /* *j; */ /* head of a */ /* long df; */ /* ricidual capacity */ /* for ( a = arcs; a != sentinel_arc ; a ++ ) */ /* { */ /* if ( a -> r_cap > 0 && a -> cost < 0 ) */ /* { */ /* df = a -> r_cap; */ /* i = ( a -> sister ) -> head; */ /* j = a -> head; */ /* INCREASE_FLOW ( i, j, a, df ); */ /* } */ /* } */ /* } */ /* check complimentary slackness */ /* int check_cs () */ /* { */ /* node *i; */ /* arc *a, *a_stop; */ /* FOR_ALL_NODES_i */ /* FOR_ALL_ARCS_a_FROM_i */ /* if (OPEN(a) && (REDUCED_COST(i, a->head, a) < 0)) */ /* assert(0); */ /* return(1); */ /* } */ /************************************************* cs2 - head program ***/ static void cs2 ( n_p, m_p, nodes_p, arcs_p, f_sc, max_c, cap_p, obj_ad) long n_p, /* number of nodes */ m_p; /* number of arcs */ node *nodes_p; /* array of nodes */ arc *arcs_p; /* array of arcs */ long f_sc; /* scaling factor */ double max_c; /* maximal cost */ short *cap_p; /* capacities (changed to short by CWC) */ double *obj_ad; /* objective */ { int cc; /* for storing return code */ cs_init ( n_p, m_p, nodes_p, arcs_p, f_sc, max_c, cap_p ); /*init_solution ( );*/ cc = 0; update_epsilon (); do{ /* scaling loop */ refine (); if ( n_ref >= PRICE_OUT_START ) { price_out ( ); } if ( update_epsilon () ) break; while ( 1 ) { if ( ! price_refine () ) break; if ( n_ref >= PRICE_OUT_START ) { if ( price_in () ) { break; } } if ((cc = update_epsilon ())) break; } } while ( cc == 0 ); finishup ( obj_ad ); } /*-----------------------------------------------------------------------*/ /* SolveCS2-- formerly main() */ void SolveCS2(signed char **residue, short **mstcosts, long nrow, long ncol, long cs2scalefactor, short ***flowsptr) { /* double t; */ arc *arp; node *ndp; long n, m, m2, nmin; node *i; long ni; arc *a; long nNrow, nNcol; long to, from, num, flow, ground; long f_sc; double cost, c_max; short *cap; /* cap changed to short by CWC */ short **rowcost, **colcost; short **rowflow, **colflow; /* number of rows, cols, in residue network */ nNrow=nrow-1; nNcol=ncol-1; ground=nNrow*nNcol+1; /* parse input, set up the problem */ rowcost=mstcosts; colcost=&(mstcosts[nrow-1]); f_sc=cs2scalefactor; cs2mcfparse( residue,rowcost,colcost,nNrow,nNcol, &n,&m,&ndp,&arp,&nmin,&c_max,&cap ); /* free memory that is no longer needed */ Free2DArray((void **)residue,nrow-1); Free2DArray((void **)mstcosts,2*nrow-1); /* solve it! */ fprintf(sp2,"Running cs2 MCF solver\n"); m2 = 2 * m; cs2 ( n, m2, ndp, arp, f_sc, c_max, cap, &cost ); /* parse flow solution and place into flow arrays */ /* get memory for flow arrays */ (*flowsptr)=(short **)Get2DRowColZeroMem(nrow,ncol, sizeof(short *),sizeof(short)); rowflow=(*flowsptr); colflow=&((*flowsptr)[nrow-1]); /* loop over nodes */ for ( i = ndp; i < ndp + n; i ++ ){ ni = N_NODE ( i ); /* loop over arcs */ for ( a = i -> suspended; a != (i+1)->suspended; a ++ ){ /* if finite (non-zero) flow */ if ( cap[ N_ARC (a) ] > 0 && (cap[ N_ARC (a) ] - ( a -> r_cap ) ) ){ /* get to, from nodes and flow amount */ from=ni; to=N_NODE( a -> head ); flow=cap[ N_ARC (a) ] - ( a -> r_cap ); if(flow>LARGESHORT || flow<-LARGESHORT){ fprintf(sp0,"Flow will overflow short data type\nAbort\n"); exit(ABNORMAL_EXIT); } if(from==(to+1)){ num=from+(int )((from-1)/nNrow); colflow[(num-1) % (nNrow+1)][(int )(num-1)/(nNrow+1)]-=flow; }else if(from==(to-1)){ num=from+(int )((from-1)/nNrow)+1; colflow[(num-1) % (nNrow+1)][(int )(num-1)/(nNrow+1)]+=flow; }else if(from==(to-nNrow)){ num=from+nNrow; rowflow[(num-1) % nNrow][(int )((num-1)/nNrow)]+=flow; }else if(from==(to+nNrow)){ num=from; rowflow[(num-1) % nNrow][(int )((num-1)/nNrow)]-=flow; }else if((from==ground) || (to==ground)){ if(to==ground){ num=to; to=from; from=num; flow=-flow; } if(!((to-1) % nNrow)){ colflow[0][(int )((to-1)/nNrow)]+=flow; }else if(to<=nNrow){ rowflow[to-1][0]+=flow; }else if(to>=(ground-nNrow-1)){ rowflow[(to-1) % nNrow][nNcol]-=flow; }else if(!(to % nNrow)){ colflow[nNrow][(int )((to/nNrow)-1)]-=flow; }else{ fprintf(sp0,"Unassigned ground arc parsing cs2 solution\nAbort\n"); exit(ABNORMAL_EXIT); } }else{ fprintf(sp0,"Non-grid arc parsing cs2 solution\nAbort\n"); exit(ABNORMAL_EXIT); } } /* end if flow on arc */ } /* end for loop over arcs of node */ } /* end for loop over nodes */ /* free memory */ free(ndp-nmin); free(arp); free(cap); free(buckets); } #endif /* end #ifndef NO_CS2 */ GMTSAR_V5.7/snaphu/src/snaphu.c000644 015705 000000 00000042065 13505462014 017277 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu main source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* global (external) variable definitions */ /* flags used for signal handling */ char dumpresults_global; char requestedstop_global; /* ouput stream pointers */ /* sp0=error messages, sp1=status output, sp2=verbose, sp3=verbose counter */ FILE *sp0, *sp1, *sp2, *sp3; /* node pointer for marking arc not on tree in apex array */ /* this should be treated as a constant */ nodeT NONTREEARC[1]; /* pointers to functions which calculate arc costs */ void (*CalcCost)(); long (*EvalCost)(); /* pointers to functions for tailoring network solver to specific topologies */ nodeT *(*NeighborNode)(); void (*GetArc)(); /***************************/ /* main program for snaphu */ /***************************/ int main(int argc, char **argv){ /* variable declarations */ infileT infiles[1]; outfileT outfiles[1]; paramT params[1]; time_t tstart; double cputimestart; long linelen, nlines; /* get current wall clock and CPU time */ StartTimers(&tstart,&cputimestart); /* set output stream pointers (may be reset after inputs parsed) */ SetStreamPointers(); /* print greeting */ fprintf(sp1,"\n%s v%s\n",PROGRAMNAME,VERSION); /* set default parameters */ SetDefaults(infiles,outfiles,params); ReadConfigFile(DEF_SYSCONFFILE,infiles,outfiles,&linelen,params); /* parse the command line inputs */ ProcessArgs(argc,argv,infiles,outfiles,&linelen,params); /* set verbose output if specified */ SetVerboseOut(params); /* set names of dump files if necessary */ SetDumpAll(outfiles,params); /* get number of lines in file */ nlines=GetNLines(infiles,linelen); /* check validity of parameters */ CheckParams(infiles,outfiles,linelen,nlines,params); /* log the runtime parameters */ WriteConfigLogFile(argc,argv,infiles,outfiles,linelen,params); /* unwrap, forming tiles and reassembling if necessary */ Unwrap(infiles,outfiles,params,linelen,nlines); /* finish up */ fprintf(sp1,"Program %s done\n",PROGRAMNAME); DisplayElapsedTime(tstart,cputimestart); exit(NORMAL_EXIT); } /* end of main() */ /* function: Unwrap() * ------------------ * Sets parameters for each tile and calls UnwrapTile() to do the * unwrapping. */ void Unwrap(infileT *infiles, outfileT *outfiles, paramT *params, long linelen, long nlines){ long nexttilerow, nexttilecol, ntilerow, ntilecol, nthreads, nchildren; long sleepinterval; tileparamT tileparams[1]; outfileT tileoutfiles[1]; pid_t pid; int childstatus; double tilecputimestart; time_t tiletstart; /* set up */ ntilerow=params->ntilerow; ntilecol=params->ntilecol; nthreads=params->nthreads; dumpresults_global=FALSE; requestedstop_global=FALSE; /* do the unwrapping */ if(ntilerow==1 && ntilecol==1){ /* only single tile */ /* do the unwrapping */ tileparams->firstrow=params->piecefirstrow; tileparams->firstcol=params->piecefirstcol; tileparams->nrow=params->piecenrow; tileparams->ncol=params->piecencol; UnwrapTile(infiles,outfiles,params,tileparams,nlines,linelen); }else{ /* don't unwrap if in assemble-only mode */ if(!params->assembleonly){ /* make a temporary directory into which tile files will be written */ MakeTileDir(params,outfiles); /* different code for parallel or nonparallel operation */ if(nthreads>1){ /* parallel code */ /* initialize */ nexttilerow=0; nexttilecol=0; nchildren=0; sleepinterval=LRound(nlines*linelen/ntilerow/ntilecol*SECONDSPERPIXEL); /* trap signals so children get killed if parent dies */ CatchSignals(KillChildrenExit); /* loop until we're done unwrapping */ while(TRUE){ /* unwrap next tile if there are free processors and tiles left */ if(nchildren1 */ } /* end if !params->assembleonly */ /* reassemble tiles */ AssembleTiles(outfiles,params,nlines,linelen); } /* end if multiple tiles */ } /* end of Unwrap() */ /* function: UnwrapTile() * ---------------------- * This is the main phase unwrapping function for a single tile. */ void UnwrapTile(infileT *infiles, outfileT *outfiles, paramT *params, tileparamT *tileparams, long nlines, long linelen){ /* variable declarations */ long nrow, ncol, nnoderow, narcrow, n, ngroundarcs, iincrcostfile; long nflow, ncycle, mostflow, nflowdone; long candidatelistsize, candidatebagsize; short *nnodesperrow, *narcsperrow; short **flows, **mstcosts; float **wrappedphase, **unwrappedphase, **mag, **unwrappedest; incrcostT **incrcosts; void **costs; totalcostT totalcost, oldtotalcost; nodeT *source, ***apexes; nodeT **nodes, ground[1]; candidateT *candidatebag, *candidatelist; signed char **iscandidate; signed char notfirstloop; bucketT *bkts; /* get size of tile */ nrow=tileparams->nrow; ncol=tileparams->ncol; /* read input file (memory allocated by read function) */ ReadInputFile(infiles,&mag,&wrappedphase,&flows,linelen,nlines, params,tileparams); /* read interferogram magnitude if specified separately */ ReadMagnitude(mag,infiles,linelen,nlines,tileparams); /* read the coarse unwrapped estimate, if provided */ unwrappedest=NULL; if(strlen(infiles->estfile)){ ReadUnwrappedEstimateFile(&unwrappedest,infiles,linelen,nlines, params,tileparams); /* subtract the estimate from the wrapped phase (and re-wrap) */ FlattenWrappedPhase(wrappedphase,unwrappedest,nrow,ncol); } /* build the cost arrays */ BuildCostArrays(&costs,&mstcosts,mag,wrappedphase,unwrappedest, linelen,nlines,nrow,ncol,params,tileparams,infiles,outfiles); /* if in quantify-only mode, evaluate cost of unwrapped input then return */ if(params->eval){ mostflow=Short2DRowColAbsMax(flows,nrow,ncol); fprintf(sp1,"Maximum flow on network: %ld\n",mostflow); totalcost=EvaluateTotalCost(costs,flows,nrow,ncol,NULL,params); fprintf(sp1,"Total solution cost: %.9g\n",(double )totalcost); Free2DArray((void **)costs,2*nrow-1); Free2DArray((void **)mag,nrow); Free2DArray((void **)wrappedphase,nrow); Free2DArray((void **)flows,2*nrow-1); return; } /* set network function pointers for grid network */ NeighborNode=NeighborNodeGrid; GetArc=GetArcGrid; /* initialize the flows (find simple unwrapping to get a feasible flow) */ unwrappedphase=NULL; nodes=NULL; if(!params->unwrapped){ /* see which initialization method to use */ if(params->initmethod==MSTINIT){ /* use minimum spanning tree (MST) algorithm */ MSTInitFlows(wrappedphase,&flows,mstcosts,nrow,ncol, &nodes,ground,params->initmaxflow); }else if(params->initmethod==MCFINIT){ /* use minimum cost flow (MCF) algorithm */ MCFInitFlows(wrappedphase,&flows,mstcosts,nrow,ncol, params->cs2scalefactor); }else{ fprintf(sp0,"Illegal initialization method\nAbort\n"); exit(ABNORMAL_EXIT); } /* integrate the phase and write out if necessary */ if(params->initonly || strlen(outfiles->initfile)){ fprintf(sp1,"Integrating phase\n"); unwrappedphase=(float **)Get2DMem(nrow,ncol, sizeof(float *),sizeof(float)); IntegratePhase(wrappedphase,unwrappedphase,flows,nrow,ncol); if(unwrappedest!=NULL){ Add2DFloatArrays(unwrappedphase,unwrappedest,nrow,ncol); } FlipPhaseArraySign(unwrappedphase,params,nrow,ncol); /* return if called in init only; otherwise, free memory and continue */ if(params->initonly){ fprintf(sp1,"Writing output to file %s\n",outfiles->outfile); WriteOutputFile(mag,unwrappedphase,outfiles->outfile,outfiles, nrow,ncol); Free2DArray((void **)mag,nrow); Free2DArray((void **)wrappedphase,nrow); Free2DArray((void **)unwrappedphase,nrow); if(nodes!=NULL){ Free2DArray((void **)nodes,nrow-1); } Free2DArray((void **)flows,2*nrow-1); return; }else{ fprintf(sp2,"Writing initialization to file %s\n",outfiles->initfile); WriteOutputFile(mag,unwrappedphase,outfiles->initfile,outfiles, nrow,ncol); Free2DArray((void **)unwrappedphase,nrow); } } } /* initialize network variables */ InitNetwork(flows,&ngroundarcs,&ncycle,&nflowdone,&mostflow,&nflow, &candidatebagsize,&candidatebag,&candidatelistsize, &candidatelist,&iscandidate,&apexes,&bkts,&iincrcostfile, &incrcosts,&nodes,ground,&nnoderow,&nnodesperrow,&narcrow, &narcsperrow,nrow,ncol,¬firstloop,&totalcost,params); /* regrow regions with -G parameter */ if(params->regrowconncomps){ /* free up some memory */ Free2DArray((void **)apexes,2*nrow-1); Free2DArray((void **)iscandidate,2*nrow-1); Free2DArray((void **)nodes,nrow-1); free(candidatebag); free(candidatelist); free(bkts->bucketbase); /* grow connected components */ GrowConnCompsMask(costs,flows,nrow,ncol,incrcosts,outfiles,params); /* free up remaining memory and return */ Free2DArray((void **)incrcosts,2*nrow-1); Free2DArray((void **)costs,2*nrow-1); Free2DArray((void **)mag,nrow); Free2DArray((void **)wrappedphase,nrow); Free2DArray((void **)flows,2*nrow-1); free(nnodesperrow); free(narcsperrow); return; } /* if we have a single tile, trap signals for dumping results */ if(params->ntilerow==1 && params->ntilecol==1){ signal(SIGINT,SetDump); signal(SIGHUP,SetDump); } /* main loop: loop over flow increments and sources */ fprintf(sp1,"Running nonlinear network flow optimizer\n"); fprintf(sp1,"Maximum flow on network: %ld\n",mostflow); fprintf(sp2,"Number of nodes in network: %ld\n",(nrow-1)*(ncol-1)+1); while(TRUE){ fprintf(sp1,"Flow increment: %ld (Total improvements: %ld)\n", nflow,ncycle); /* set up the incremental (residual) cost arrays */ SetupIncrFlowCosts(costs,incrcosts,flows,nflow,nrow,narcrow,narcsperrow, params); if(params->dumpall && params->ntilerow==1 && params->ntilecol==1){ DumpIncrCostFiles(incrcosts,++iincrcostfile,nflow,nrow,ncol); } /* set the tree root (equivalent to source of shortest path problem) */ source=SelectSource(nodes,ground,nflow,flows,ngroundarcs, nrow,ncol,params); /* run the solver, and increment nflowdone if no cycles are found */ n=TreeSolve(nodes,NULL,ground,source,&candidatelist,&candidatebag, &candidatelistsize,&candidatebagsize, bkts,flows,costs,incrcosts,apexes,iscandidate, ngroundarcs,nflow,mag,wrappedphase,outfiles->outfile, nnoderow,nnodesperrow,narcrow,narcsperrow,nrow,ncol, outfiles,params); /* evaluate and save the total cost (skip if first loop through nflow) */ if(notfirstloop){ oldtotalcost=totalcost; totalcost=EvaluateTotalCost(costs,flows,nrow,ncol,NULL,params); if(totalcost>oldtotalcost || (n>0 && totalcost==oldtotalcost)){ fprintf(sp0,"Unexpected increase in total cost. Breaking loop\n"); break; } } /* consider this flow increment done if not too many neg cycles found */ ncycle+=n; if(n<=params->maxnflowcycles){ nflowdone++; }else{ nflowdone=1; } /* find maximum flow on network */ mostflow=Short2DRowColAbsMax(flows,nrow,ncol); /* break if we're done with all flow increments or problem is convex */ if(nflowdone>=params->maxflow || nflowdone>=mostflow || params->p>=1.0){ break; } /* update flow increment */ nflow++; if(nflow>params->maxflow || nflow>mostflow){ nflow=1; notfirstloop=TRUE; } fprintf(sp2,"Maximum flow on network: %ld\n",mostflow); /* dump flow arrays if necessary */ if(strlen(outfiles->flowfile)){ FlipFlowArraySign(flows,params,nrow,ncol); Write2DRowColArray((void **)flows,outfiles->flowfile,nrow,ncol, sizeof(short)); FlipFlowArraySign(flows,params,nrow,ncol); } } /* end loop until no more neg cycles */ /* if we have single tile, return signal handlers to default behavior */ if(params->ntilerow==1 && params->ntilecol==1){ signal(SIGINT,SIG_DFL); signal(SIGHUP,SIG_DFL); } /* free some memory */ Free2DArray((void **)apexes,2*nrow-1); Free2DArray((void **)iscandidate,2*nrow-1); Free2DArray((void **)nodes,nrow-1); free(candidatebag); free(candidatelist); free(bkts->bucketbase); /* grow connected component mask */ if(strlen(outfiles->conncompfile)){ GrowConnCompsMask(costs,flows,nrow,ncol,incrcosts,outfiles,params); } /* grow regions for tiling */ if(params->ntilerow!=1 || params->ntilecol!=1){ GrowRegions(costs,flows,nrow,ncol,incrcosts,outfiles,params); } /* free some more memory */ Free2DArray((void **)incrcosts,2*nrow-1); /* evaluate and display the maximum flow and total cost */ totalcost=EvaluateTotalCost(costs,flows,nrow,ncol,NULL,params); fprintf(sp1,"Maximum flow on network: %ld\n",mostflow); fprintf(sp1,"Total solution cost: %.9g\n",(double )totalcost); /* integrate the wrapped phase using the solution flow */ fprintf(sp1,"Integrating phase\n"); unwrappedphase=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); IntegratePhase(wrappedphase,unwrappedphase,flows,nrow,ncol); /* reinsert the coarse estimate, if it was given */ if(unwrappedest!=NULL){ Add2DFloatArrays(unwrappedphase,unwrappedest,nrow,ncol); } /* flip the sign of the unwrapped phase array if it was flipped initially, */ FlipPhaseArraySign(unwrappedphase,params,nrow,ncol); /* write the unwrapped output */ fprintf(sp1,"Writing output to file %s\n",outfiles->outfile); WriteOutputFile(mag,unwrappedphase,outfiles->outfile,outfiles, nrow,ncol); /* free remaining memory and return */ Free2DArray((void **)costs,2*nrow-1); Free2DArray((void **)mag,nrow); Free2DArray((void **)wrappedphase,nrow); Free2DArray((void **)unwrappedphase,nrow); Free2DArray((void **)flows,2*nrow-1); free(nnodesperrow); free(narcsperrow); return; } /* end of UnwrapTile() */ GMTSAR_V5.7/snaphu/src/snaphu_util.c000644 015705 000000 00000072077 13505462014 020342 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu utility function source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* function: IsTrue() * ------------------ * Returns TRUE if the string input is any of TRUE, True, true, 1, * y, Y, yes, YES */ int IsTrue(char *str){ if(!strcmp(str,"TRUE") || !strcmp(str,"true") || !strcmp(str,"True") || !strcmp(str,"1") || !strcmp(str,"y") || !strcmp(str,"Y") || !strcmp(str,"yes") || !strcmp(str,"YES") || !strcmp(str,"Yes")){ return(TRUE); }else{ return(FALSE); } } /* function: IsFalse() * ------------------ * Returns FALSE if the string input is any of FALSE, False, false, * 0, n, N, no, NO */ int IsFalse(char *str){ if(!strcmp(str,"FALSE") || !strcmp(str,"false") || !strcmp(str,"False") || !strcmp(str,"0") || !strcmp(str,"n") || !strcmp(str,"N") || !strcmp(str,"no") || !strcmp(str,"NO") || !strcmp(str,"No")){ return(TRUE); }else{ return(FALSE); } } /* function: SetBoolenaSignedChar() * -------------------------------- * Sets the value of a signed character based on the string argument passed. * Returns TRUE if the string was not a valid value, FALSE otherwise. */ signed char SetBooleanSignedChar(signed char *boolptr, char *str){ if(IsTrue(str)){ (*boolptr)=TRUE; return(FALSE); }else if(IsFalse(str)){ (*boolptr)=FALSE; return(FALSE); } return(TRUE); } /* function: ModDiff() * ------------------- * Computes floating point difference between two numbers. * f1 and f2 should be between [0,2pi). The result is the * modulo difference between (-pi,pi]. Assumes that * PI and TWOPI have been defined. */ double ModDiff(double f1, double f2){ double f3; f3=f1-f2; if(f3>PI){ f3-=TWOPI; }else if(f3<=-PI){ f3+=TWOPI; } return(f3); } /* function: WrapPhase() * --------------------- * Makes sure the passed float array is properly wrapped into the [0,2pi) * interval. */ void WrapPhase(float **wrappedphase, long nrow, long ncol){ long row, col; for(row=0;row=0.5){ dpsi[row][col]-=1.0; }else if(dpsi[row][col]<-0.5){ dpsi[row][col]+=1.0; } } } paddpsi=MirrorPad(dpsi,nrow,ncol-1,(kperpdpsi-1)/2,(kpardpsi-1)/2); if(paddpsi==dpsi){ fprintf(sp0,"Wrapped-gradient averaging box too large " "for input array size\nAbort\n"); exit(ABNORMAL_EXIT); } BoxCarAvg(avgdpsi,paddpsi,nrow,ncol-1,kperpdpsi,kpardpsi); Free2DArray((void **)paddpsi,nrow+kperpdpsi-1); } /* function: CalcWrappedAzDiffs() * --------------------------------- * Computes an array of wrapped phase differences in range (across rows). * Input wrapped phase array should be in radians. Output is in cycles. */ void CalcWrappedAzDiffs(float **dpsi, float **avgdpsi, float **wrappedphase, long kperpdpsi, long kpardpsi, long nrow, long ncol){ long row, col; float **paddpsi; for(row=0;row=0.5){ dpsi[row][col]-=1.0; }else if(dpsi[row][col]<-0.5){ dpsi[row][col]+=1.0; } } } paddpsi=MirrorPad(dpsi,nrow-1,ncol,(kpardpsi-1)/2,(kperpdpsi-1)/2); if(paddpsi==dpsi){ fprintf(sp0,"Wrapped-gradient averaging box too large " "for input array size\nAbort\n"); exit(ABNORMAL_EXIT); } BoxCarAvg(avgdpsi,paddpsi,nrow-1,ncol,kpardpsi,kperpdpsi); Free2DArray((void **)paddpsi,nrow-1+kpardpsi-1); } /* function: CycleResidue() * ------------------------ * Computes the cycle array of a phase 2D phase array. Input arrays * should be type float ** and signed char ** with memory pre-allocated. * Numbers of rows and columns in phase array should be passed. * Residue array will then have size nrow-1 x ncol-1. Residues will * always be -1, 0, or 1 if wrapped phase is passed in. */ void CycleResidue(float **phase, signed char **residue, int nrow, int ncol){ int row, col; float **rowdiff, **coldiff; rowdiff=(float **)Get2DMem(nrow-1,ncol,sizeof(float *),sizeof(float)); coldiff=(float **)Get2DMem(nrow,ncol-1,sizeof(float *),sizeof(float)); for(row=0;rowflipphasesign){ for(row=0;rowflipphasesign){ for(row=0;row<2*nrow-1;row++){ if(row= 199901L return(isfinite(d)); #else return(finite(d)); #endif /* return(isfinite(d)); */ /* return(!(isnan(d) || isinf(d))); */ /* return(TRUE) */ } /* function: LRound() * ------------------ * Rounds a floating point number to the nearest integer. * The function takes a float and returns a long. */ long LRound(double a){ return((long )rint(a)); } /* function: Short2DRowColAbsMax() * ------------------------------- * Returns the maximum of the absolute values of element in a * two-dimensional short array. The number of rows and columns * should be passed in. */ long Short2DRowColAbsMax(short **arr, long nrow, long ncol){ long row, col, maxval; maxval=0; for(row=0;rowmaxval){ maxval=labs(arr[row][col]); } } } for(row=nrow-1;row<2*nrow-1;row++){ for(col=0;colmaxval){ maxval=labs(arr[row][col]); } } } return(maxval); } /* function: LinInterp1D() * ----------------------- * Given an array of floats, interpolates at the specified noninteger * index. Returns first or last array value if index is out of bounds. */ float LinInterp1D(float *arr, double index, long nelem){ long intpart; double fracpart; intpart=(long )floor(index); fracpart=index-intpart; if(intpart<0){ return(arr[0]); }else if(intpart>=nelem-1){ return(arr[nelem-1]); }else{ return(((1-fracpart)*arr[intpart]+fracpart*arr[intpart+1])/2.0); } } /* function: LinInterp2D() * ----------------------- * Given a 2-D array of floats, interpolates at the specified noninteger * indices. Returns first or last array values if index is out of bounds. */ float LinInterp2D(float **arr, double rowind, double colind , long nrow, long ncol){ long rowintpart; double rowfracpart; rowintpart=(long )floor(rowind); rowfracpart=rowind-rowintpart; if(rowintpart<0){ return(LinInterp1D(arr[0],colind,ncol)); }else if(rowintpart>=nrow-1){ return(LinInterp1D(arr[nrow-1],colind,ncol)); }else{ return(((1-rowfracpart)*LinInterp1D(arr[rowintpart],colind,ncol) +rowfracpart*LinInterp1D(arr[rowintpart+1],colind,ncol))/2.0); } } /* function: Despeckle() * --------------------- * Filters magnitude/power data with adaptive geometric filter to get rid of * speckle. Allocates 2D memory for ei. Does not square before averaging. */ void Despeckle(float **mag, float ***ei, long nrow, long ncol){ float **intensity; double ratio, ratiomax, wfull, wstick, w[NARMS+1]; long row, col, i, j, k, Irow, Icol; short jmin[5]={2,2,0,1,2}; short jmax[5]={2,3,4,3,2}; enum{ C=0, T, B, R, L, TR, BL, TL, BR}; /* get memory for output array */ if(*ei==NULL){ (*ei)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } /* pad magnitude and place into new array (don't touch original data) */ intensity=MirrorPad(mag,nrow,ncol,ARMLEN,ARMLEN); if(intensity==mag){ fprintf(sp0,"Despeckling box size too large for input array size\n" "Abort\n"); exit(ABNORMAL_EXIT); } /* do the filtering */ for(row=0;rowratiomax){ ratiomax=ratio; (*ei)[row][col]=wstick; } } } } } /* free memory */ Free2DArray((void **)intensity,nrow+2*ARMLEN); } /* function: MirrorPad() * --------------------- * Returns pointer to 2D array where passed array is in center and * edges are padded by mirror reflections. If the pad dimensions are * too large for the array size, a pointer to the original array is * returned. */ float **MirrorPad(float **array1, long nrow, long ncol, long krow, long kcol){ long row, col; float **array2; /* get memory */ array2=(float **)Get2DMem(nrow+2*krow,ncol+2*kcol, sizeof(float *),sizeof(float)); /* center array1 in new array */ for(row=0;rownrow || kcol>ncol){ return(array1); } /* mirror reflect edges */ for(row=0;row=HUGE_VAL || tempdouble<=-HUGE_VAL){ return(TRUE); }else{ *d=tempdouble; return(FALSE); } } /* function: StringToLong() * ------------------------ * Uses strtol to convert a string to a base-10 long, but also does error * checking. If any part of the string is not converted, the function does * not make the assignment and returns TRUE. Otherwise, returns FALSE. */ int StringToLong(char *str, long *l){ long templong; char *endp; endp=str; templong=strtol(str,&endp,10); if(strlen(endp) || templong==LONG_MAX || templong==LONG_MIN){ return(TRUE); }else{ *l=templong; return(FALSE); } } /* function: CatchSignals() * ------------------------ * Traps common signals that by default cause the program to abort. * Sets (pointer to function) Handler as the signal handler for all. * Note that SIGKILL usually cannot be caught. No return value. */ void CatchSignals(void (*SigHandler)(int)){ signal(SIGHUP,SigHandler); signal(SIGINT,SigHandler); signal(SIGQUIT,SigHandler); signal(SIGILL,SigHandler); signal(SIGABRT,SigHandler); signal(SIGFPE,SigHandler); signal(SIGSEGV,SigHandler); signal(SIGPIPE,SigHandler); signal(SIGALRM,SigHandler); signal(SIGTERM,SigHandler); signal(SIGBUS,SigHandler); } /* function: SetDump() * ------------------- * Set the global variable dumpresults_global to TRUE if SIGINT or SIGHUP * signals recieved. Also sets requestedstop_global if SIGINT signal * received. This function should only be called via signal() when * a signal is caught. */ void SetDump(int signum){ if(signum==SIGINT){ /* exit if we receive another interrupt */ signal(SIGINT,exit); /* print nice message and set global variables so program knows to exit */ fprintf(sp0,"\n\nSIGINT signal caught. Please wait for graceful exit\n"); fprintf(sp0,"(One more interrupt signal halts job)\n"); dumpresults_global=TRUE; requestedstop_global=TRUE; }else if(signum==SIGHUP){ /* make sure the hangup signal doesn't revert to default behavior */ signal(SIGHUP,SetDump); /* print a nice message, and set the dump variable */ fprintf(sp0,"\n\nSIGHUP signal caught. Dumping results\n"); dumpresults_global=TRUE; }else{ fprintf(sp0,"WARNING: Invalid signal (%d) passed to signal handler\n", signum); } } /* function: KillChildrenExit() * ---------------------------- * Signal handler that sends a KILL signal to all processes in the group * so that children exit when parent exits. */ void KillChildrenExit(int signum){ fprintf(sp0,"Parent received signal %d\nKilling children and exiting\n", signum); fflush(NULL); signal(SIGTERM,SIG_IGN); kill(0,SIGTERM); exit(ABNORMAL_EXIT); } /* function: SignalExit() * ---------------------- * Signal hanlder that prints message about the signal received, then exits. */ void SignalExit(int signum){ signal(SIGTERM,SIG_IGN); fprintf(sp0,"Exiting with status %d on signal %d\n",ABNORMAL_EXIT,signum); fflush(NULL); exit(ABNORMAL_EXIT); } /* function: StartTimers() * ----------------------- * Starts the wall clock and CPU timers for use in conjunction with * DisplayElapsedTime(). */ void StartTimers(time_t *tstart, double *cputimestart){ struct rusage usagebuf; *tstart=time(NULL); *cputimestart=-1.0; if(!getrusage(RUSAGE_SELF,&usagebuf)){ *cputimestart=(double )(usagebuf.ru_utime.tv_sec +(usagebuf.ru_utime.tv_usec/(double )1000000) +usagebuf.ru_stime.tv_sec +(usagebuf.ru_stime.tv_usec/(double )1000000)); if(!getrusage(RUSAGE_CHILDREN,&usagebuf)){ *cputimestart+=(double )(usagebuf.ru_utime.tv_sec +(usagebuf.ru_utime.tv_usec/(double )1000000) +usagebuf.ru_stime.tv_sec +(usagebuf.ru_stime.tv_usec/(double )1000000)); } } } /* function: DisplayElapsedTime() * ------------------------------ * Displays the elapsed wall clock and CPU times for the process and its * children. Times should be initialized at the start of the program with * StartTimers(). The code is written to show the total processor time * for the parent process and all of its children, but whether or not * this is actually done depends on the implementation of the system time * functions. */ void DisplayElapsedTime(time_t tstart, double cputimestart){ double cputime, walltime, seconds; long hours, minutes; time_t tstop; struct rusage usagebuf; cputime=-1.0; if(!getrusage(RUSAGE_CHILDREN,&usagebuf)){ cputime=(double )(usagebuf.ru_utime.tv_sec +(usagebuf.ru_utime.tv_usec/(double )1000000) +usagebuf.ru_stime.tv_sec +(usagebuf.ru_stime.tv_usec/(double )1000000)); if(!getrusage(RUSAGE_SELF,&usagebuf)){ cputime+=(double )(usagebuf.ru_utime.tv_sec +(usagebuf.ru_utime.tv_usec/(double )1000000) +usagebuf.ru_stime.tv_sec +(usagebuf.ru_stime.tv_usec/(double )1000000)); } } tstop=time(NULL); if(cputime>0 && cputimestart>=0){ cputime-=cputimestart; hours=(long )floor(cputime/3600); minutes=(long )floor((cputime-3600*hours)/60); seconds=cputime-3600*hours-60*minutes; fprintf(sp1,"Elapsed processor time: %ld:%02ld:%05.2f\n", hours,minutes,seconds); } if(tstart>0 && tstop>0){ walltime=tstop-tstart; hours=(long )floor(walltime/3600); minutes=(long )floor((walltime-3600*hours)/60); seconds=walltime-3600*hours-60*minutes; fprintf(sp1,"Elapsed wall clock time: %ld:%02ld:%02ld\n", hours,minutes,(long )seconds); } } /* function: LongCompare() * ----------------------- * Compares two long integers. For use with qsort(). */ int LongCompare(const void *c1, const void *c2){ return((*((long *)c1))-(*((long *)c2))); } GMTSAR_V5.7/snaphu/src/snaphu_io.c000644 015705 000000 00000304444 13505462014 017770 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu input/output source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* function: SetDefaults() * ----------------------- * Sets all parameters to their initial default values. */ void SetDefaults(infileT *infiles, outfileT *outfiles, paramT *params){ /* input files */ StrNCopy(infiles->weightfile,DEF_WEIGHTFILE,MAXSTRLEN); StrNCopy(infiles->corrfile,DEF_CORRFILE,MAXSTRLEN); StrNCopy(infiles->ampfile,DEF_AMPFILE,MAXSTRLEN); StrNCopy(infiles->ampfile2,DEF_AMPFILE2,MAXSTRLEN); StrNCopy(infiles->estfile,DEF_ESTFILE,MAXSTRLEN); StrNCopy(infiles->magfile,DEF_MAGFILE,MAXSTRLEN); StrNCopy(infiles->costinfile,DEF_COSTINFILE,MAXSTRLEN); /* output and dump files */ StrNCopy(outfiles->initfile,DEF_INITFILE,MAXSTRLEN); StrNCopy(outfiles->flowfile,DEF_FLOWFILE,MAXSTRLEN); StrNCopy(outfiles->eifile,DEF_EIFILE,MAXSTRLEN); StrNCopy(outfiles->rowcostfile,DEF_ROWCOSTFILE,MAXSTRLEN); StrNCopy(outfiles->colcostfile,DEF_COLCOSTFILE,MAXSTRLEN); StrNCopy(outfiles->mstrowcostfile,DEF_MSTROWCOSTFILE,MAXSTRLEN); StrNCopy(outfiles->mstcolcostfile,DEF_MSTCOLCOSTFILE,MAXSTRLEN); StrNCopy(outfiles->mstcostsfile,DEF_MSTCOSTSFILE,MAXSTRLEN); StrNCopy(outfiles->corrdumpfile,DEF_CORRDUMPFILE,MAXSTRLEN); StrNCopy(outfiles->rawcorrdumpfile,DEF_RAWCORRDUMPFILE,MAXSTRLEN); StrNCopy(outfiles->costoutfile,DEF_COSTOUTFILE,MAXSTRLEN); StrNCopy(outfiles->conncompfile,DEF_CONNCOMPFILE,MAXSTRLEN); StrNCopy(outfiles->outfile,DEF_OUTFILE,MAXSTRLEN); StrNCopy(outfiles->logfile,DEF_LOGFILE,MAXSTRLEN); /* file formats */ infiles->infileformat=DEF_INFILEFORMAT; infiles->unwrappedinfileformat=DEF_UNWRAPPEDINFILEFORMAT; infiles->magfileformat=DEF_MAGFILEFORMAT; infiles->corrfileformat=DEF_CORRFILEFORMAT; infiles->estfileformat=DEF_ESTFILEFORMAT; infiles->ampfileformat=DEF_AMPFILEFORMAT; outfiles->outfileformat=DEF_OUTFILEFORMAT; /* options and such */ params->unwrapped=DEF_UNWRAPPED; params->regrowconncomps=DEF_REGROWCONNCOMPS; params->eval=DEF_EVAL; params->initonly=DEF_INITONLY; params->initmethod=DEF_INITMETHOD; params->costmode=DEF_COSTMODE; params->amplitude=DEF_AMPLITUDE; params->verbose=DEF_VERBOSE; /* SAR and geometry parameters */ params->orbitradius=DEF_ORBITRADIUS; params->altitude=DEF_ALTITUDE; params->earthradius=DEF_EARTHRADIUS; params->bperp=DEF_BPERP; params->transmitmode=DEF_TRANSMITMODE; params->baseline=DEF_BASELINE; params->baselineangle=DEF_BASELINEANGLE; params->nlooksrange=DEF_NLOOKSRANGE; params->nlooksaz=DEF_NLOOKSAZ; params->nlooksother=DEF_NLOOKSOTHER; params->ncorrlooks=DEF_NCORRLOOKS; params->ncorrlooksrange=DEF_NCORRLOOKSRANGE; params->ncorrlooksaz=DEF_NCORRLOOKSAZ; params->nearrange=DEF_NEARRANGE; params->dr=DEF_DR; params->da=DEF_DA; params->rangeres=DEF_RANGERES; params->azres=DEF_AZRES; params->lambda=DEF_LAMBDA; /* scattering model parameters */ params->kds=DEF_KDS; params->specularexp=DEF_SPECULAREXP; params->dzrcritfactor=DEF_DZRCRITFACTOR; params->shadow=DEF_SHADOW; params->dzeimin=DEF_DZEIMIN; params->laywidth=DEF_LAYWIDTH; params->layminei=DEF_LAYMINEI; params->sloperatiofactor=DEF_SLOPERATIOFACTOR; params->sigsqei=DEF_SIGSQEI; /* decorrelation model parameters */ params->drho=DEF_DRHO; params->rhosconst1=DEF_RHOSCONST1; params->rhosconst2=DEF_RHOSCONST2; params->cstd1=DEF_CSTD1; params->cstd2=DEF_CSTD2; params->cstd3=DEF_CSTD3; params->defaultcorr=DEF_DEFAULTCORR; params->rhominfactor=DEF_RHOMINFACTOR; /* pdf model parameters */ params->dzlaypeak=DEF_DZLAYPEAK; params->azdzfactor=DEF_AZDZFACTOR; params->dzeifactor=DEF_DZEIFACTOR; params->dzeiweight=DEF_DZEIWEIGHT; params->dzlayfactor=DEF_DZLAYFACTOR; params->layconst=DEF_LAYCONST; params->layfalloffconst=DEF_LAYFALLOFFCONST; params->sigsqshortmin=DEF_SIGSQSHORTMIN; params->sigsqlayfactor=DEF_SIGSQLAYFACTOR; /* deformation mode parameters */ params->defoazdzfactor=DEF_DEFOAZDZFACTOR; params->defothreshfactor=DEF_DEFOTHRESHFACTOR; params->defomax=DEF_DEFOMAX; params->sigsqcorr=DEF_SIGSQCORR; params->defolayconst=DEF_DEFOLAYCONST; /* algorithm parameters */ params->flipphasesign=DEF_FLIPPHASESIGN; params->initmaxflow=DEF_INITMAXFLOW; params->arcmaxflowconst=DEF_ARCMAXFLOWCONST; params->maxflow=DEF_MAXFLOW; params->krowei=DEF_KROWEI; params->kcolei=DEF_KCOLEI; params->kperpdpsi=DEF_KPERPDPSI; params->kpardpsi=DEF_KPARDPSI; params->threshold=DEF_THRESHOLD; params->initdzr=DEF_INITDZR; params->initdzstep=DEF_INITDZSTEP; params->maxcost=DEF_MAXCOST; params->costscale=DEF_COSTSCALE; params->costscaleambight=DEF_COSTSCALEAMBIGHT; params->dnomincangle=DEF_DNOMINCANGLE; params->srcrow=DEF_SRCROW; params->srccol=DEF_SRCCOL; params->p=DEF_P; params->nshortcycle=DEF_NSHORTCYCLE; params->maxnewnodeconst=DEF_MAXNEWNODECONST; params->maxcyclefraction=DEF_MAXCYCLEFRACTION; params->sourcemode=DEF_SOURCEMODE; params->maxnflowcycles=DEF_MAXNFLOWCYCLES; params->dumpall=DEF_DUMPALL; params->cs2scalefactor=DEF_CS2SCALEFACTOR; /* tile parameters */ params->ntilerow=DEF_NTILEROW; params->ntilecol=DEF_NTILECOL; params->rowovrlp=DEF_ROWOVRLP; params->colovrlp=DEF_COLOVRLP; params->piecefirstrow=DEF_PIECEFIRSTROW; params->piecefirstcol=DEF_PIECEFIRSTCOL; params->piecenrow=DEF_PIECENROW; params->piecencol=DEF_PIECENCOL; params->tilecostthresh=DEF_TILECOSTTHRESH; params->minregionsize=DEF_MINREGIONSIZE; params->nthreads=DEF_NTHREADS; params->scndryarcflowmax=DEF_SCNDRYARCFLOWMAX; params->assembleonly=DEF_ASSEMBLEONLY; params->rmtmptile=DEF_RMTMPTILE; params->tileedgeweight=DEF_TILEEDGEWEIGHT; /* connected component parameters */ params->minconncompfrac=DEF_MINCONNCOMPFRAC; params->conncompthresh=DEF_CONNCOMPTHRESH; params->maxncomps=DEF_MAXNCOMPS; } /* function: ProcessArgs() * ----------------------- * Parses command line inputs passed to main(). */ void ProcessArgs(int argc, char *argv[], infileT *infiles, outfileT *outfiles, long *linelenptr, paramT *params){ long i,j; signed char noarg_exit; /* required inputs */ noarg_exit=FALSE; StrNCopy(infiles->infile,"",MAXSTRLEN); *linelenptr=0; /* loop over inputs */ if(argc<2){ /* catch zero arguments in */ fprintf(sp1,OPTIONSHELPBRIEF); exit(ABNORMAL_EXIT); } for(i=1;iunwrapped=TRUE; }else if(argv[i][j]=='t'){ params->costmode=TOPO; }else if(argv[i][j]=='d'){ params->costmode=DEFO; }else if(argv[i][j]=='s'){ params->costmode=SMOOTH; params->defomax=0.0; }else if(argv[i][j]=='q'){ params->eval=TRUE; params->unwrapped=TRUE; }else if(argv[i][j]=='f'){ if(++ioutfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='c'){ if(++icorrfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='m'){ if(++imagfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='a'){ if(++iampfile,argv[i],MAXSTRLEN); params->amplitude=TRUE; break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='A'){ if(++iampfile,argv[i],MAXSTRLEN); params->amplitude=FALSE; break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='e'){ if(++iestfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='w'){ if(++iweightfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='g'){ if(++iconncompfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='G'){ params->regrowconncomps=TRUE; if(++iconncompfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='b'){ if(++ibperp)) || !(params->bperp)){ fprintf(sp0,"option -%c requires non-zero decimal argument\n", argv[i-1][j]); exit(ABNORMAL_EXIT); } break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='p'){ if(++ip))){ fprintf(sp0,"option -%c requires decimal argument\n", argv[i-1][j]); exit(ABNORMAL_EXIT); } break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='i'){ params->initonly=TRUE; }else if(argv[i][j]=='n'){ params->costmode=NOSTATCOSTS; }else if(argv[i][j]=='v'){ params->verbose=TRUE; }else if(argv[i][j]=='l'){ if(++ilogfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else{ fprintf(sp0,"unrecognized option -%c\n",argv[i][j]); exit(ABNORMAL_EXIT); } if(noarg_exit){ fprintf(sp0,"option -%c requires an argument\n",argv[i-1][j]); exit(ABNORMAL_EXIT); } } }else{ /* argument is a "--" option */ if(!strcmp(argv[i],"--costinfile")){ if(++icostinfile,argv[i],MAXSTRLEN); }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--costoutfile")){ if(++icostoutfile,argv[i],MAXSTRLEN); }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--debug") || !strcmp(argv[i],"--dumpall")){ params->dumpall=TRUE; }else if(!strcmp(argv[i],"--mst")){ params->initmethod=MSTINIT; }else if(!strcmp(argv[i],"--mcf")){ params->initmethod=MCFINIT; }else if(!strcmp(argv[i],"--aa")){ if(i+2ampfile,argv[++i],MAXSTRLEN); StrNCopy(infiles->ampfile2,argv[++i],MAXSTRLEN); infiles->ampfileformat=FLOAT_DATA; params->amplitude=TRUE; }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--AA")){ if(++i+1ampfile,argv[i++],MAXSTRLEN); StrNCopy(infiles->ampfile2,argv[i],MAXSTRLEN); infiles->ampfileformat=FLOAT_DATA; params->amplitude=FALSE; }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--tile")){ if(++i+3ntilerow)) || StringToLong(argv[i++],&(params->ntilecol)) || StringToLong(argv[i++],&(params->rowovrlp)) || StringToLong(argv[i],&(params->colovrlp))){ fprintf(sp0,"option %s requires four integer arguments\n", argv[i-4]); exit(ABNORMAL_EXIT); } }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--piece")){ if(++i+3piecefirstrow)) || StringToLong(argv[i++],&(params->piecefirstcol)) || StringToLong(argv[i++],&(params->piecenrow)) || StringToLong(argv[i],&(params->piecencol))){ fprintf(sp0,"option %s requires four integer arguments\n", argv[i-4]); exit(ABNORMAL_EXIT); } }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--nproc")){ if(++inthreads))){ fprintf(sp0,"option %s requires an integer arguemnt\n", argv[i-1]); exit(ABNORMAL_EXIT); } }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--assemble")){ params->assembleonly=TRUE; if(++itiledir,argv[i],MAXSTRLEN); }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--copyright") || !strcmp(argv[i],"--info")){ fprintf(sp1,COPYRIGHT); exit(ABNORMAL_EXIT); }else if(!strcmp(argv[i],"--help")){ fprintf(sp1,OPTIONSHELPFULL); exit(ABNORMAL_EXIT); }else{ fprintf(sp0,"unrecognized option %s\n",argv[i]); exit(ABNORMAL_EXIT); } if(noarg_exit){ fprintf(sp0,"incorrect number of arguments for option %s\n", argv[i-1]); exit(ABNORMAL_EXIT); } } }else{ /* argument is not an option */ if(!strlen(infiles->infile)){ StrNCopy(infiles->infile,argv[i],MAXSTRLEN); }else if(*linelenptr==0){ if(StringToLong(argv[i],linelenptr) || *linelenptr<=0){ fprintf(sp0,"line length must be positive integer\n"); exit(ABNORMAL_EXIT); } }else{ fprintf(sp0,"multiple input files: %s and %s\n", infiles->infile,argv[i]); exit(ABNORMAL_EXIT); } } } /* end for loop over arguments */ /* check to make sure we have required arguments */ if(!strlen(infiles->infile) || !(*linelenptr)){ fprintf(sp0,"not enough input arguments. type %s -h for help\n", PROGRAMNAME); exit(ABNORMAL_EXIT); } } /* end of ProcessArgs */ /* function: CheckParams() * ----------------------- * Checks all parameters to make sure they are valid. This is just a boring * function with lots of checks in it. */ void CheckParams(infileT *infiles, outfileT *outfiles, long linelen, long nlines, paramT *params){ long ni, nj, n; FILE *fp; /* make sure output file is writable (try opening in append mode) */ /* file will be opened in write mode later, clobbering existing file */ if((fp=fopen(outfiles->outfile,"a"))==NULL){ fprintf(sp0,"file %s is not writable\n",outfiles->outfile); exit(ABNORMAL_EXIT); }else{ if(ftell(fp)){ fclose(fp); }else{ fclose(fp); remove(outfiles->outfile); } if(!strcmp(outfiles->outfile,infiles->infile) && !params->eval && !params->regrowconncomps){ fprintf(sp0,"WARNING: output will overwrite input\n"); } } /* make sure options aren't contradictory */ if(params->initonly && params->unwrapped){ fprintf(sp0,"cannot use initialize-only mode with unwrapped input\n"); exit(ABNORMAL_EXIT); } if(params->initonly && params->p>=0){ fprintf(sp0,"cannot use initialize-only mode with Lp costs\n"); exit(ABNORMAL_EXIT); } if(params->costmode==NOSTATCOSTS && !(params->initonly || params->p>=0)){ fprintf(sp0,"no-statistical-costs option can only be used in\n"); fprintf(sp0," initialize-only or Lp-norm modes\n"); exit(ABNORMAL_EXIT); } if(strlen(infiles->costinfile) && params->costmode==NOSTATCOSTS){ fprintf(sp0,"no-statistical-costs option cannot be given\n"); fprintf(sp0," if input cost file is specified\n"); exit(ABNORMAL_EXIT); } if(strlen(outfiles->costoutfile) && params->costmode==NOSTATCOSTS){ fprintf(sp0,"no-statistical-costs option cannot be given\n"); fprintf(sp0," if output cost file is specified\n"); exit(ABNORMAL_EXIT); } /* check geometry parameters */ if(params->earthradius<=0){ fprintf(sp0,"earth radius must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->altitude){ if(params->altitude>0){ params->orbitradius=params->earthradius+params->altitude; }else{ fprintf(sp0,"platform altitude must be positive\n"); exit(ABNORMAL_EXIT); } }else if(params->orbitradius < params->earthradius){ fprintf(sp0,"platform orbit radius must be greater than earth radius\n"); exit(ABNORMAL_EXIT); } if(params->costmode==TOPO && params->baseline<0){ fprintf(sp0,"baseline length must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->costmode==TOPO && params->baseline==0){ fprintf(sp0,"WARNING: zero baseline may give unpredictable results\n"); } if(params->ncorrlooks<=0){ fprintf(sp0,"number of looks ncorrlooks must be positive\n"); exit(ABNORMAL_EXIT); } if(params->nearrange<=0){ fprintf(sp0,"slant range parameter nearrange must be positive (meters)\n"); exit(ABNORMAL_EXIT); } if(params->dr<=0 || params->da<=0){ fprintf(sp0,"pixel spacings dr and da must be positive (meters)\n"); exit(ABNORMAL_EXIT); } /* dr and da after multilooking can be larger than rangeres, azres */ /* if(params->rangeres<=(params->dr) || params->azres<=(params->da)){ fprintf(sp0,"resolutions parameters must be larger than pixel spacings\n"); exit(ABNORMAL_EXIT); } */ if(params->lambda<=0){ fprintf(sp0,"wavelength lambda must be positive (meters)\n"); exit(ABNORMAL_EXIT); } /* check scattering model defaults */ if(params->kds<=0){ fprintf(sp0,"scattering model parameter kds must be positive\n"); exit(ABNORMAL_EXIT); } if(params->specularexp<=0){ fprintf(sp0,"scattering model parameter SPECULAREXP must be positive\n"); exit(ABNORMAL_EXIT); } if(params->dzrcritfactor<0){ fprintf(sp0,"dzrcritfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->laywidth<1){ fprintf(sp0,"layover window width laywidth must be positive\n"); exit(ABNORMAL_EXIT); } if(params->layminei<0){ fprintf(sp0,"layover minimum brightness must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->sloperatiofactor<0){ fprintf(sp0,"slope ratio fudge factor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->sigsqei<=0){ fprintf(sp0,"intensity estimate variance must be positive\n"); exit(ABNORMAL_EXIT); } /* check decorrelation model defaults */ if(params->drho<=0){ fprintf(sp0,"correlation step size drho must be positive\n"); exit(ABNORMAL_EXIT); } if(params->rhosconst1<=0 || params->rhosconst2<=0){ fprintf(sp0,"parameters rhosconst1 and rhosconst2 must be positive\n"); exit(ABNORMAL_EXIT); } if(!strlen(infiles->corrfile) && (params->defaultcorr<0 || params->defaultcorr>1)){ fprintf(sp0,"default correlation must be between 0 and 1\n"); exit(ABNORMAL_EXIT); } if(params->rhominfactor<0){ fprintf(sp0,"parameter rhominfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->ncorrlooksaz<1 || params->ncorrlooksrange<1 || params->nlooksaz<1 || params->nlooksrange<1 || params->nlooksother<1){ fprintf(sp0,"numbers of looks must be positive integer\n"); exit(ABNORMAL_EXIT); } if(!strlen(infiles->corrfile)){ if(params->ncorrlooksaznlooksaz){ fprintf(sp0,"NCORRLOOKSAZ cannot be smaller than NLOOKSAZ\n"); fprintf(sp0," setting NCORRLOOKSAZ to equal NLOOKSAZ\n"); params->ncorrlooksaz=params->nlooksaz; } if(params->ncorrlooksrangenlooksrange){ fprintf(sp0,"NCORRLOOKSRANGE cannot be smaller than NLOOKSRANGE\n"); fprintf(sp0," setting NCORRLOOKSRANGE to equal NLOOKSRANGE\n"); params->ncorrlooksrange=params->nlooksrange; } } /* check pdf model parameters */ if(params->azdzfactor<0){ fprintf(sp0,"parameter azdzfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->dzeifactor<0){ fprintf(sp0,"parameter dzeifactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->dzeiweight<0 || params->dzeiweight>1.0){ fprintf(sp0,"parameter dzeiweight must be between 0 and 1\n"); exit(ABNORMAL_EXIT); } if(params->dzlayfactor<0){ fprintf(sp0,"parameter dzlayfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->layconst<=0){ fprintf(sp0,"parameter layconst must be positive\n"); exit(ABNORMAL_EXIT); } if(params->layfalloffconst<0){ fprintf(sp0,"parameter layfalloffconst must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->sigsqshortmin<=0){ fprintf(sp0,"parameter sigsqshortmin must be positive\n"); exit(ABNORMAL_EXIT); } if(params->sigsqlayfactor<0){ fprintf(sp0,"parameter sigsqlayfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } /* check deformation mode parameters */ if(params->defoazdzfactor<0){ fprintf(sp0,"parameter defoazdzfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->defothreshfactor<0){ fprintf(sp0,"parameter defothreshfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->defomax<0){ fprintf(sp0,"parameter defomax must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->sigsqcorr<0){ fprintf(sp0,"parameter sigsqcorr must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->defolayconst<=0){ fprintf(sp0,"parameter defolayconst must be positive\n"); exit(ABNORMAL_EXIT); } /* check algorithm parameters */ /* be sure to check for things that will cause type overflow */ /* or floating point exception */ if((params->initmaxflow)<1 && (params->initmaxflow)!=AUTOCALCSTATMAX){ fprintf(sp0,"initialization maximum flow must be positive\n"); exit(ABNORMAL_EXIT); } if((params->arcmaxflowconst)<1){ fprintf(sp0,"arcmaxflowconst must be positive\n"); exit(ABNORMAL_EXIT); } if((params->maxflow)<1){ fprintf(sp0,"maxflow must be positive\n"); exit(ABNORMAL_EXIT); } if(params->krowei<=0 || params->kcolei<=0){ fprintf(sp0,"averaging window sizes krowei and kcolei must be positive\n"); exit(ABNORMAL_EXIT); } if(params->kperpdpsi<=0 || params->kpardpsi<=0){ fprintf(sp0, "averaging window sizes kperpdpsi and kpardpsi must be positive\n"); exit(ABNORMAL_EXIT); } if(params->threshold<=0){ fprintf(sp0,"numerical solver threshold must be positive\n"); exit(ABNORMAL_EXIT); } if(params->initdzr<=0){ fprintf(sp0,"initdzr must be positive\n"); exit(ABNORMAL_EXIT); } if(params->initdzstep<=0){ fprintf(sp0,"initdzstep must be positive\n"); exit(ABNORMAL_EXIT); } if(params->maxcost>POSSHORTRANGE || params->maxcost<=0){ fprintf(sp0,"maxcost must be positive and within range or short int\n"); exit(ABNORMAL_EXIT); } if(params->costscale<=0){ fprintf(sp0,"cost scale factor costscale must be positive\n"); exit(ABNORMAL_EXIT); } if(params->p<0 && params->p!=PROBCOSTP){ fprintf(sp0,"Lp-norm parameter p should be nonnegative\n"); exit(ABNORMAL_EXIT); } if((params->costmode==TOPO && params->maxflow*params->nshortcycle) >POSSHORTRANGE){ fprintf(sp0,"maxflow exceeds range of short int for given nshortcycle\n"); exit(ABNORMAL_EXIT); } if(params->costmode==DEFO && ceil(params->defomax*params->nshortcycle) >POSSHORTRANGE){ fprintf(sp0,"defomax exceeds range of short int for given nshortcycle\n"); exit(ABNORMAL_EXIT); } if(params->maxnewnodeconst<=0 || params->maxnewnodeconst>1){ fprintf(sp0,"maxnewnodeconst must be between 0 and 1\n"); exit(ABNORMAL_EXIT); } if(params->sourcemode>1 || params->sourcemode<-1){ fprintf(sp0,"sourcemode must be -1, 0, or 1\n"); exit(ABNORMAL_EXIT); } if(infiles->infileformat!=FLOAT_DATA || strlen(infiles->magfile)){ params->havemagnitude=TRUE; }else{ params->havemagnitude=FALSE; } if(params->maxnflowcycles==USEMAXCYCLEFRACTION){ params->maxnflowcycles=LRound(params->maxcyclefraction *nlines/(double )params->ntilerow *linelen/(double )params->ntilecol); } if(params->initmaxflow==AUTOCALCSTATMAX && !(params->ntilerow==1 && params->ntilecol==1)){ fprintf(sp0,"initial maximum flow cannot be calculated automatically in " "tile mode\n"); exit(ABNORMAL_EXIT); } #ifdef NO_CS2 if(params->initmethod==MCFINIT && !params->unwrapped){ fprintf(sp0,"program not compiled with cs2 MCF solver module\n"); exit(ABNORMAL_EXIT); } #endif /* tile parameters */ if(params->ntilerow<1 || params->ntilecol<1){ fprintf(sp0,"numbers of tile rows and columns must be positive\n"); exit(ABNORMAL_EXIT); } if(params->rowovrlp<0 || params->colovrlp<0){ fprintf(sp0,"tile overlaps must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->ntilerow>1 || params->ntilecol>1){ ni=ceil((nlines+(params->ntilerow-1)*params->rowovrlp) /(double )params->ntilerow); nj=ceil((linelen+(params->ntilecol-1)*params->colovrlp) /(double )params->ntilecol); if(params->p>=0){ fprintf(sp0,"tile mode not enabled for Lp costs\n"); exit(ABNORMAL_EXIT); } if(params->ntilerow+params->rowovrlp > nlines || params->ntilecol+params->colovrlp > linelen || params->ntilerow*params->ntilerow > nlines || params->ntilecol*params->ntilecol > linelen){ fprintf(sp0,"tiles too small or overlap too large for given input\n"); exit(ABNORMAL_EXIT); } if(params->minregionsize > ((nlines-(params->ntilerow-1)*(ni-params->rowovrlp)) *(linelen-(params->ntilecol-1)*(nj-params->colovrlp)))){ fprintf(sp0,"minimum region size too large for given tile parameters\n"); exit(ABNORMAL_EXIT); } if(TMPTILEOUTFORMAT!=ALT_LINE_DATA && TMPTILEOUTFORMAT!=FLOAT_DATA){ fprintf(sp0,"unsupported TMPTILEOUTFORMAT value in complied binary\n"); exit(ABNORMAL_EXIT); } if(TMPTILEOUTFORMAT==FLOAT_DATA && outfiles->outfileformat!=FLOAT_DATA){ fprintf(sp0,"precompiled tile format precludes given output format\n"); exit(ABNORMAL_EXIT); } if(params->scndryarcflowmax<1){ fprintf(sp0,"parameter scndryarcflowmax too small\n"); exit(ABNORMAL_EXIT); } if(params->initonly){ fprintf(sp0, "initialize-only mode and tile mode are mutually exclusive\n"); exit(ABNORMAL_EXIT); } if(strlen(outfiles->conncompfile)){ fprintf(sp0, "connected components output not yet supported for tile mode\n"); exit(ABNORMAL_EXIT); } if(params->assembleonly){ n=strlen(params->tiledir); while(--n>0 && params->tiledir[n]=='/'){ params->tiledir[n]='\0'; } if(!strlen(params->tiledir)){ fprintf(sp0,"tile directory name cannot have zero length\n"); exit(ABNORMAL_EXIT); } if(!strcmp(params->tiledir,"/")){ StrNCopy(params->tiledir,"",MAXSTRLEN); } } if(params->piecefirstrow!=DEF_PIECEFIRSTROW || params->piecefirstcol!=DEF_PIECEFIRSTCOL || params->piecenrow!=DEF_PIECENROW || params->piecencol!=DEF_PIECENCOL){ fprintf(sp0,"piece-only mode cannot be used with multiple tiles\n"); exit(ABNORMAL_EXIT); } }else{ if(params->assembleonly){ fprintf(sp0,"assemble-only mode can only be used with multiple tiles\n"); exit(ABNORMAL_EXIT); } if(params->nthreads>1){ fprintf(sp0,"only one tile--disregarding multiprocessor option\n"); } if(params->rowovrlp || params->colovrlp){ fprintf(sp0,"only one tile--disregarding tile overlap values\n"); } params->piecefirstrow--; /* index from 0 instead of 1 */ params->piecefirstcol--; /* index from 0 instead of 1 */ if(!params->piecenrow){ params->piecenrow=nlines; } if(!params->piecencol){ params->piecencol=linelen; } if(params->piecefirstrow<0 || params->piecefirstcol<0 || params->piecenrow<1 || params->piecencol<1 || params->piecefirstrow+params->piecenrow>nlines || params->piecefirstcol+params->piecencol>linelen){ fprintf(sp0,"illegal values for piece of interferogram to unwrap\n"); exit(ABNORMAL_EXIT); } } if(params->nthreads<1){ fprintf(sp0,"number of processors must be at least one\n"); exit(ABNORMAL_EXIT); }else if(params->nthreads>MAXTHREADS){ fprintf(sp0,"number of processors exceeds precomplied limit of %d\n", MAXTHREADS); exit(ABNORMAL_EXIT); } /* connected component parameters */ if(params->regrowconncomps){ if(!strlen(outfiles->conncompfile)){ fprintf(sp0,"no connected component output file specified\n"); exit(ABNORMAL_EXIT); } params->unwrapped=TRUE; } if(params->minconncompfrac<0 || params->minconncompfrac>1){ fprintf(sp0,"illegal value for minimum connected component fraction\n"); exit(ABNORMAL_EXIT); } if(params->maxncomps<=0){ fprintf(sp0,"illegal value for maximum number of connected components\n"); exit(ABNORMAL_EXIT); } if(strlen(outfiles->conncompfile)){ if(params->initonly){ fprintf(sp0,"WARNING: connected component mask cannot be generated " "in initialize-only mode\n mask will not be output\n"); StrNCopy(outfiles->conncompfile,"",MAXSTRLEN); } if(params->costmode==NOSTATCOSTS){ fprintf(sp0,"WARNING: connected component mask cannot be generated " "without statistical costs\n mask will not be output\n"); StrNCopy(outfiles->conncompfile,"",MAXSTRLEN); } } /* set global pointers to functions for calculating and evaluating costs */ if(params->p<0){ if(params->costmode==TOPO){ CalcCost=CalcCostTopo; EvalCost=EvalCostTopo; }else if(params->costmode==DEFO){ CalcCost=CalcCostDefo; EvalCost=EvalCostDefo; }else if(params->costmode==SMOOTH){ CalcCost=CalcCostSmooth; EvalCost=EvalCostSmooth; } }else{ if(params->p==0){ CalcCost=CalcCostL0; EvalCost=EvalCostL0; }else if(params->p==1){ CalcCost=CalcCostL1; EvalCost=EvalCostL1; }else if(params->p==2){ CalcCost=CalcCostL2; EvalCost=EvalCostL2; }else{ CalcCost=CalcCostLP; EvalCost=EvalCostLP; } } } /* function: ReadConfigFile() * -------------------------- * Read in parameter values from a file, overriding existing parameters. */ void ReadConfigFile(char *conffile, infileT *infiles, outfileT *outfiles, long *linelenptr, paramT *params){ long nlines, nparams, nfields; FILE *fp; char buf[MAXLINELEN]; char str1[MAXLINELEN], str2[MAXLINELEN]; char *ptr; signed char badparam; /* open input config file */ if(strlen(conffile)){ if((fp=fopen(conffile,"r"))==NULL){ /* abort if we were given a non-zero length name that is unreadable */ fprintf(sp0,"unable to read configuration file %s\n",conffile); exit(ABNORMAL_EXIT); } }else{ /* if we were given a zero-length name, just ignore it and go on */ return; } /* read each line and convert the first two fields */ nlines=0; nparams=0; badparam=FALSE; while(TRUE){ /* read a line from the file and store it in buffer buf */ buf[0]='\0'; ptr=fgets(buf,MAXLINELEN,fp); /* break when we read EOF without reading any text */ if(ptr==NULL && !strlen(buf)){ break; } nlines++; /* make sure we got the whole line */ if(strlen(buf)>=MAXLINELEN-1){ fprintf(sp0,"line %ld in file %s exceeds maximum line length\n", nlines,conffile); exit(ABNORMAL_EXIT); } /* read the first two fields */ /* (str1, str2 same size as buf, so can't overflow them */ nfields=sscanf(buf,"%s %s",str1,str2); /* if only one field is read, and it is not a comment, we have an error */ if(nfields==1 && isalnum(str1[0])){ fprintf(sp0,"unrecognized configuration parameter '%s' (%s:%ld)\n", str1,conffile,nlines); exit(ABNORMAL_EXIT); } /* if we have (at least) two non-comment fields */ if(nfields==2 && isalnum(str1[0])){ /* do the conversions */ nparams++; if(!strcmp(str1,"INFILE")){ StrNCopy(infiles->infile,str2,MAXSTRLEN); }else if(!strcmp(str1,"OUTFILE")){ StrNCopy(outfiles->outfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"WEIGHTFILE")){ StrNCopy(infiles->weightfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"AMPFILE") || !strcmp(str1,"AMPFILE1")){ if(strlen(infiles->ampfile2) && !params->amplitude){ fprintf(sp0,"cannot specify both amplitude and power\n"); exit(ABNORMAL_EXIT); } StrNCopy(infiles->ampfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"AMPFILE2")){ if(strlen(infiles->ampfile) && !params->amplitude){ fprintf(sp0,"cannot specify both amplitude and power\n"); exit(ABNORMAL_EXIT); } StrNCopy(infiles->ampfile2,str2,MAXSTRLEN); infiles->ampfileformat=FLOAT_DATA; }else if(!strcmp(str1,"PWRFILE") || !strcmp(str1,"PWRFILE1")){ if(strlen(infiles->ampfile2) && params->amplitude){ fprintf(sp0,"cannot specify both amplitude and power\n"); exit(ABNORMAL_EXIT); } StrNCopy(infiles->ampfile,str2,MAXSTRLEN); params->amplitude=FALSE; }else if(!strcmp(str1,"PWRFILE2")){ if(strlen(infiles->ampfile) && params->amplitude){ fprintf(sp0,"cannot specify both amplitude and power\n"); exit(ABNORMAL_EXIT); } StrNCopy(infiles->ampfile2,str2,MAXSTRLEN); params->amplitude=FALSE; infiles->ampfileformat=FLOAT_DATA; }else if(!strcmp(str1,"MAGFILE")){ StrNCopy(infiles->magfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"CORRFILE")){ StrNCopy(infiles->corrfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"ESTIMATEFILE")){ StrNCopy(infiles->estfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"LINELENGTH") || !strcmp(str1,"LINELEN")){ badparam=StringToLong(str2,linelenptr); }else if(!strcmp(str1,"STATCOSTMODE")){ if(!strcmp(str2,"TOPO")){ params->costmode=TOPO; }else if(!strcmp(str2,"DEFO")){ params->costmode=DEFO; }else if(!strcmp(str2,"SMOOTH")){ params->costmode=SMOOTH; }else if(!strcmp(str2,"NOSTATCOSTS")){ params->costmode=NOSTATCOSTS; }else{ badparam=TRUE; } }else if(!strcmp(str1,"INITONLY")){ badparam=SetBooleanSignedChar(&(params->initonly),str2); }else if(!strcmp(str1,"UNWRAPPED_IN")){ badparam=SetBooleanSignedChar(&(params->unwrapped),str2); }else if(!strcmp(str1,"DEBUG") || !strcmp(str1,"DUMPALL")){ badparam=SetBooleanSignedChar(&(params->dumpall),str2); }else if(!strcmp(str1,"VERBOSE")){ badparam=SetBooleanSignedChar(&(params->verbose),str2); }else if(!strcmp(str1,"INITMETHOD")){ if(!strcmp(str2,"MST") || !strcmp(str2,"mst")){ params->initmethod=MSTINIT; }else if(!strcmp(str2,"MCF") || !strcmp(str2,"mcf") || !strcmp(str2,"CS2") || !strcmp(str2,"cs2")){ params->initmethod=MCFINIT; }else{ badparam=TRUE; } }else if(!strcmp(str1,"ORBITRADIUS")){ if(!(badparam=StringToDouble(str2,&(params->orbitradius)))){ params->altitude=0; } }else if(!strcmp(str1,"ALTITUDE")){ if(!(badparam=StringToDouble(str2,&(params->altitude)))){ params->orbitradius=0; } }else if(!strcmp(str1,"EARTHRADIUS")){ badparam=StringToDouble(str2,&(params->earthradius)); }else if(!strcmp(str1,"BPERP")){ badparam=StringToDouble(str2,&(params->bperp)); }else if(!strcmp(str1,"TRANSMITMODE")){ if(!strcmp(str2,"PINGPONG") || !strcmp(str2,"REPEATPASS")){ params->transmitmode=PINGPONG; }else if(!strcmp(str2,"SINGLEANTENNATRANSMIT") || !strcmp(str2,"SAT") || !strcmp(str2,"SINGLEANTTRANSMIT")){ params->transmitmode=SINGLEANTTRANSMIT; }else{ badparam=TRUE; } }else if(!strcmp(str1,"BASELINE")){ if(!(badparam=StringToDouble(str2,&(params->baseline)))){ params->bperp=0; } }else if(!strcmp(str1,"BASELINEANGLE_RAD")){ if(!(badparam=StringToDouble(str2,&(params->baselineangle)))){ params->bperp=0; } }else if(!strcmp(str1,"BASELINEANGLE_DEG")){ if(!(badparam=StringToDouble(str2,&(params->baselineangle)))){ (params->baselineangle)*=(PI/180.0); params->bperp=0; } }else if(!strcmp(str1,"NLOOKSRANGE")){ badparam=StringToLong(str2,&(params->nlooksrange)); }else if(!strcmp(str1,"NLOOKSAZ")){ badparam=StringToLong(str2,&(params->nlooksaz)); }else if(!strcmp(str1,"NLOOKSOTHER")){ badparam=StringToLong(str2,&(params->nlooksother)); }else if(!strcmp(str1,"NCORRLOOKS")){ badparam=StringToDouble(str2,&(params->ncorrlooks)); }else if(!strcmp(str1,"NCORRLOOKSRANGE")){ badparam=StringToLong(str2,&(params->ncorrlooksrange)); }else if(!strcmp(str1,"NCORRLOOKSAZ")){ badparam=StringToLong(str2,&(params->ncorrlooksaz)); }else if(!strcmp(str1,"NEARRANGE") || !strcmp(str1,"NOMRANGE")){ badparam=StringToDouble(str2,&(params->nearrange)); }else if(!strcmp(str1,"DR")){ badparam=StringToDouble(str2,&(params->dr)); }else if(!strcmp(str1,"DA")){ badparam=StringToDouble(str2,&(params->da)); }else if(!strcmp(str1,"RANGERES")){ badparam=StringToDouble(str2,&(params->rangeres)); }else if(!strcmp(str1,"AZRES")){ badparam=StringToDouble(str2,&(params->azres)); }else if(!strcmp(str1,"LAMBDA")){ badparam=StringToDouble(str2,&(params->lambda)); }else if(!strcmp(str1,"KDS") || !strcmp(str1,"KSD")){ if(!strcmp(str1,"KSD")){ fprintf(sp0,"WARNING: parameter KSD interpreted as KDS (%s:%ld)\n", conffile,nlines); } badparam=StringToDouble(str2,&(params->kds)); }else if(!strcmp(str1,"SPECULAREXP") || !strcmp(str1,"N")){ badparam=StringToDouble(str2,&(params->specularexp)); }else if(!strcmp(str1,"DZRCRITFACTOR")){ badparam=StringToDouble(str2,&(params->dzrcritfactor)); }else if(!strcmp(str1,"SHADOW")){ badparam=SetBooleanSignedChar(&(params->shadow),str2); }else if(!strcmp(str1,"DZEIMIN")){ badparam=StringToDouble(str2,&(params->dzeimin)); }else if(!strcmp(str1,"LAYWIDTH")){ badparam=StringToLong(str2,&(params->laywidth)); }else if(!strcmp(str1,"LAYMINEI")){ badparam=StringToDouble(str2,&(params->layminei)); }else if(!strcmp(str1,"SLOPERATIOFACTOR")){ badparam=StringToDouble(str2,&(params->sloperatiofactor)); }else if(!strcmp(str1,"SIGSQEI")){ badparam=StringToDouble(str2,&(params->sigsqei)); }else if(!strcmp(str1,"DRHO")){ badparam=StringToDouble(str2,&(params->drho)); }else if(!strcmp(str1,"RHOSCONST1")){ badparam=StringToDouble(str2,&(params->rhosconst1)); }else if(!strcmp(str1,"RHOSCONST2")){ badparam=StringToDouble(str2,&(params->rhosconst2)); }else if(!strcmp(str1,"CSTD1")){ badparam=StringToDouble(str2,&(params->cstd1)); }else if(!strcmp(str1,"CSTD2")){ badparam=StringToDouble(str2,&(params->cstd2)); }else if(!strcmp(str1,"CSTD3")){ badparam=StringToDouble(str2,&(params->cstd3)); }else if(!strcmp(str1,"DEFAULTCORR")){ badparam=StringToDouble(str2,&(params->defaultcorr)); }else if(!strcmp(str1,"RHOMINFACTOR")){ badparam=StringToDouble(str2,&(params->rhominfactor)); }else if(!strcmp(str1,"DZLAYPEAK")){ badparam=StringToDouble(str2,&(params->dzlaypeak)); }else if(!strcmp(str1,"AZDZFACTOR")){ badparam=StringToDouble(str2,&(params->azdzfactor)); }else if(!strcmp(str1,"DZEIFACTOR")){ badparam=StringToDouble(str2,&(params->dzeifactor)); }else if(!strcmp(str1,"DZEIWEIGHT")){ badparam=StringToDouble(str2,&(params->dzeiweight)); }else if(!strcmp(str1,"DZLAYFACTOR")){ badparam=StringToDouble(str2,&(params->dzlayfactor)); }else if(!strcmp(str1,"LAYCONST")){ badparam=StringToDouble(str2,&(params->layconst)); }else if(!strcmp(str1,"LAYFALLOFFCONST")){ badparam=StringToDouble(str2,&(params->layfalloffconst)); }else if(!strcmp(str1,"SIGSQSHORTMIN")){ badparam=StringToLong(str2,&(params->sigsqshortmin)); }else if(!strcmp(str1,"SIGSQLAYFACTOR")){ badparam=StringToDouble(str2,&(params->sigsqlayfactor)); }else if(!strcmp(str1,"DEFOAZDZFACTOR")){ badparam=StringToDouble(str2,&(params->defoazdzfactor)); }else if(!strcmp(str1,"DEFOTHRESHFACTOR")){ badparam=StringToDouble(str2,&(params->defothreshfactor)); }else if(!strcmp(str1,"DEFOMAX_CYCLE")){ badparam=StringToDouble(str2,&(params->defomax)); }else if(!strcmp(str1,"DEFOMAX_RAD")){ if(!(badparam=StringToDouble(str2,&(params->defomax)))){ params->defomax/=TWOPI; } }else if(!strcmp(str1,"SIGSQCORR")){ badparam=StringToDouble(str2,&(params->sigsqcorr)); }else if(!strcmp(str1,"DEFOLAYCONST") || !strcmp(str1,"DEFOCONST")){ badparam=StringToDouble(str2,&(params->defolayconst)); }else if(!strcmp(str1,"INITMAXFLOW")){ badparam=StringToLong(str2,&(params->initmaxflow)); }else if(!strcmp(str1,"ARCMAXFLOWCONST")){ badparam=StringToLong(str2,&(params->arcmaxflowconst)); }else if(!strcmp(str1,"MAXFLOW")){ badparam=StringToLong(str2,&(params->maxflow)); }else if(!strcmp(str1,"KROWEI") || !strcmp(str1,"KROW")){ badparam=StringToLong(str2,&(params->krowei)); }else if(!strcmp(str1,"KCOLEI") || !strcmp(str1,"KCOL")){ badparam=StringToLong(str2,&(params->kcolei)); }else if(!strcmp(str1,"KPERPDPSI")){ badparam=StringToLong(str2,&(params->kperpdpsi)); }else if(!strcmp(str1,"KPARDPSI")){ badparam=StringToLong(str2,&(params->kpardpsi)); }else if(!strcmp(str1,"THRESHOLD")){ badparam=StringToDouble(str2,&(params->threshold)); }else if(!strcmp(str1,"INITDZR")){ badparam=StringToDouble(str2,&(params->initdzr)); }else if(!strcmp(str1,"INITDZSTEP")){ badparam=StringToDouble(str2,&(params->initdzstep)); }else if(!strcmp(str1,"MAXCOST")){ badparam=StringToDouble(str2,&(params->maxcost)); }else if(!strcmp(str1,"COSTSCALE")){ badparam=StringToDouble(str2,&(params->costscale)); }else if(!strcmp(str1,"COSTSCALEAMBIGHT")){ badparam=StringToDouble(str2,&(params->costscaleambight)); }else if(!strcmp(str1,"DNOMINCANGLE")){ badparam=StringToDouble(str2,&(params->dnomincangle)); }else if(!strcmp(str1,"CS2SCALEFACTOR")){ badparam=StringToLong(str2,&(params->cs2scalefactor)); }else if(!strcmp(str1,"PIECEFIRSTROW")){ badparam=StringToLong(str2,&(params->piecefirstrow)); }else if(!strcmp(str1,"PIECEFIRSTCOL")){ badparam=StringToLong(str2,&(params->piecefirstcol)); }else if(!strcmp(str1,"PIECENROW")){ badparam=StringToLong(str2,&(params->piecenrow)); }else if(!strcmp(str1,"PIECENCOL")){ badparam=StringToLong(str2,&(params->piecencol)); }else if(!strcmp(str1,"NTILEROW")){ badparam=StringToLong(str2,&(params->ntilerow)); }else if(!strcmp(str1,"NTILECOL")){ badparam=StringToLong(str2,&(params->ntilecol)); }else if(!strcmp(str1,"ROWOVRLP")){ badparam=StringToLong(str2,&(params->rowovrlp)); }else if(!strcmp(str1,"COLOVRLP")){ badparam=StringToLong(str2,&(params->colovrlp)); }else if(!strcmp(str1,"TILECOSTTHRESH")){ badparam=StringToLong(str2,&(params->tilecostthresh)); }else if(!strcmp(str1,"MINREGIONSIZE")){ badparam=StringToLong(str2,&(params->minregionsize)); }else if(!strcmp(str1,"TILEEDGEWEIGHT")){ badparam=StringToDouble(str2,&(params->tileedgeweight)); }else if(!strcmp(str1,"SCNDRYARCFLOWMAX")){ badparam=StringToLong(str2,&(params->scndryarcflowmax)); }else if(!strcmp(str1,"ASSEMBLEONLY")){ if(!strcmp(str2,"FALSE")){ params->assembleonly=FALSE; }else{ params->assembleonly=TRUE; StrNCopy(params->tiledir,str2,MAXSTRLEN); } }else if(!strcmp(str1,"RMTMPTILE")){ badparam=SetBooleanSignedChar(&(params->rmtmptile),str2); }else if(!strcmp(str1,"MINCONNCOMPFRAC")){ badparam=StringToDouble(str2,&(params->minconncompfrac)); }else if(!strcmp(str1,"CONNCOMPTHRESH")){ badparam=StringToLong(str2,&(params->conncompthresh)); }else if(!strcmp(str1,"MAXNCOMPS")){ badparam=StringToLong(str2,&(params->maxncomps)); }else if(!strcmp(str1,"NSHORTCYCLE")){ badparam=StringToLong(str2,&(params->nshortcycle)); }else if(!strcmp(str1,"MAXNEWNODECONST")){ badparam=StringToDouble(str2,&(params->maxnewnodeconst)); }else if(!strcmp(str1,"MAXNFLOWCYCLES")){ badparam=StringToLong(str2,&(params->maxnflowcycles)); }else if(!strcmp(str1,"MAXCYCLEFRACTION")){ badparam=StringToDouble(str2,&(params->maxcyclefraction)); params->maxnflowcycles=USEMAXCYCLEFRACTION; }else if(!strcmp(str1,"SOURCEMODE")){ badparam=StringToLong(str2,&(params->sourcemode)); }else if(!strcmp(str1,"NPROC") || !strcmp(str1,"NTHREADS")){ badparam=StringToLong(str2,&(params->nthreads)); }else if(!strcmp(str1,"COSTINFILE")){ StrNCopy(infiles->costinfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"COSTOUTFILE")){ StrNCopy(outfiles->costoutfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"LOGFILE")){ StrNCopy(outfiles->logfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"INFILEFORMAT")){ if(!strcmp(str2,"COMPLEX_DATA")){ infiles->infileformat=COMPLEX_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->infileformat=FLOAT_DATA; }else if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->infileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->infileformat=ALT_SAMPLE_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"UNWRAPPEDINFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->unwrappedinfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->unwrappedinfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->unwrappedinfileformat=FLOAT_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"MAGFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->magfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->magfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->magfileformat=FLOAT_DATA; }else if(!strcmp(str2,"COMPLEX_DATA")){ infiles->magfileformat=COMPLEX_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"OUTFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ outfiles->outfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ outfiles->outfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ outfiles->outfileformat=FLOAT_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"CORRFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->corrfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->corrfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->corrfileformat=FLOAT_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"AMPFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->ampfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->ampfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->ampfileformat=FLOAT_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"ESTFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->estfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->estfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->estfileformat=FLOAT_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"INITFILE")){ StrNCopy(outfiles->initfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"FLOWFILE")){ StrNCopy(outfiles->flowfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"EIFILE")){ StrNCopy(outfiles->eifile,str2,MAXSTRLEN); }else if(!strcmp(str1,"ROWCOSTFILE")){ StrNCopy(outfiles->rowcostfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"COLCOSTFILE")){ StrNCopy(outfiles->colcostfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"MSTROWCOSTFILE")){ StrNCopy(outfiles->mstrowcostfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"MSTCOLCOSTFILE")){ StrNCopy(outfiles->mstcolcostfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"MSTCOSTSFILE")){ StrNCopy(outfiles->mstcostsfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"CORRDUMPFILE")){ StrNCopy(outfiles->corrdumpfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"RAWCORRDUMPFILE")){ StrNCopy(outfiles->rawcorrdumpfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"CONNCOMPFILE")){ StrNCopy(outfiles->conncompfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"REGROWCONNCOMPS")){ badparam=SetBooleanSignedChar(&(params->regrowconncomps),str2); }else{ fprintf(sp0,"unrecognized configuration parameter '%s' (%s:%ld)\n", str1,conffile,nlines); exit(ABNORMAL_EXIT); } /* give an error if we had trouble interpreting the line */ if(badparam){ fprintf(sp0,"illegal argument %s for parameter %s (%s:%ld)\n", str2,str1,conffile,nlines); exit(ABNORMAL_EXIT); } } } /* finish up */ fclose(fp); if(nparams>1){ fprintf(sp1,"%ld parameters input from file %s (%ld lines total)\n", nparams,conffile,nlines); }else{ if(nlines>1){ fprintf(sp1,"%ld parameter input from file %s (%ld lines total)\n", nparams,conffile,nlines); }else{ fprintf(sp1,"%ld parameter input from file %s (%ld line total)\n", nparams,conffile,nlines); } } } /* function: WriteConfigLogFile() * ------------------------------ * Writes a text log file of configuration parameters and other * information. The log file is in a format compatible to be used as * a configuration file. */ void WriteConfigLogFile(int argc, char *argv[], infileT *infiles, outfileT *outfiles, long linelen, paramT *params){ FILE *fp; time_t t[1]; long k; char buf[MAXSTRLEN], *ptr; /* see if we need to write a log file */ if(strlen(outfiles->logfile)){ /* open the log file */ if((fp=fopen(outfiles->logfile,"w"))==NULL){ fprintf(sp0,"unable to write to log file %s\n",outfiles->logfile); exit(ABNORMAL_EXIT); } fprintf(sp1,"Logging run-time parameters to file %s\n",outfiles->logfile); /* print some run-time environment information */ fprintf(fp,"# %s v%s\n",PROGRAMNAME,VERSION); time(t); fprintf(fp,"# Log file generated %s",ctime(t)); ptr=getcwd(buf,MAXSTRLEN); if(ptr!=NULL){ fprintf(fp,"# Current working directory: %s\n",buf); }else{ fprintf(fp,"# Could not determine current working directory\n"); } fprintf(fp,"# Command line call:"); for(k=0;kinfile); fprintf(fp,"LINELENGTH %ld\n",linelen); LogStringParam(fp,"OUTFILE",outfiles->outfile); LogStringParam(fp,"WEIGHTFILE",infiles->weightfile); if(params->amplitude){ if(strlen(infiles->ampfile2)){ LogStringParam(fp,"AMPFILE1",infiles->ampfile); LogStringParam(fp,"AMPFILE2",infiles->ampfile2); }else{ LogStringParam(fp,"AMPFILE",infiles->ampfile); } }else{ if(strlen(infiles->ampfile2)){ LogStringParam(fp,"PWRFILE1",infiles->ampfile); LogStringParam(fp,"PWRFILE2",infiles->ampfile2); }else{ LogStringParam(fp,"PWRFILE",infiles->ampfile); } } LogStringParam(fp,"MAGFILE",infiles->magfile); LogStringParam(fp,"CORRFILE",infiles->corrfile); LogStringParam(fp,"ESTIMATEFILE",infiles->estfile); LogStringParam(fp,"COSTINFILE",infiles->costinfile); LogStringParam(fp,"COSTOUTFILE",outfiles->costoutfile); LogStringParam(fp,"LOGFILE",outfiles->logfile); if(params->costmode==TOPO){ fprintf(fp,"STATCOSTMODE TOPO\n"); }else if(params->costmode==DEFO){ fprintf(fp,"STATCOSTMODE DEFO\n"); }else if(params->costmode==SMOOTH){ fprintf(fp,"STATCOSTMODE SMOOTH\n"); }else if(params->costmode==NOSTATCOSTS){ fprintf(fp,"STATCOSTMODE NOSTATCOSTS\n"); } LogBoolParam(fp,"INITONLY",params->initonly); LogBoolParam(fp,"UNWRAPPED_IN",params->unwrapped); LogBoolParam(fp,"DEBUG",params->dumpall); if(params->initmethod==MSTINIT){ fprintf(fp,"INITMETHOD MST\n"); }else if(params->initmethod==MCFINIT){ fprintf(fp,"INITMETHOD MCF\n"); } LogBoolParam(fp,"VERBOSE",params->verbose); /* file formats */ fprintf(fp,"\n# File Formats\n"); LogFileFormat(fp,"INFILEFORMAT",infiles->infileformat); LogFileFormat(fp,"OUTFILEFORMAT",outfiles->outfileformat); LogFileFormat(fp,"AMPFILEFORMAT",infiles->ampfileformat); LogFileFormat(fp,"MAGFILEFORMAT",infiles->magfileformat); LogFileFormat(fp,"CORRFILEFORMAT",infiles->corrfileformat); LogFileFormat(fp,"ESTFILEFORMAT",infiles->estfileformat); LogFileFormat(fp,"UNWRAPPEDINFILEFORMAT",infiles->unwrappedinfileformat); /* SAR and geometry parameters */ fprintf(fp,"\n# SAR and Geometry Parameters\n"); fprintf(fp,"ALTITUDE %.8f\n", params->orbitradius-params->earthradius); fprintf(fp,"# ORBITRADIUS %.8f\n",params->orbitradius); fprintf(fp,"EARTHRADIUS %.8f\n",params->earthradius); if(params->bperp){ fprintf(fp,"BPERP %.8f\n",params->bperp); }else{ fprintf(fp,"BASELINE %.8f\n",params->baseline); fprintf(fp,"BASELINEANGLE_DEG %.8f\n", params->baselineangle*(180.0/PI)); } if(params->transmitmode==PINGPONG){ fprintf(fp,"TRANSMITMODE REPEATPASS\n"); }else if(params->transmitmode==SINGLEANTTRANSMIT){ fprintf(fp,"TRANSMITMODE SINGLEANTENNATRANSMIT\n"); } fprintf(fp,"NEARRANGE %.8f\n",params->nearrange); fprintf(fp,"DR %.8f\n",params->dr); fprintf(fp,"DA %.8f\n",params->da); fprintf(fp,"RANGERES %.8f\n",params->rangeres); fprintf(fp,"AZRES %.8f\n",params->azres); fprintf(fp,"LAMBDA %.8f\n",params->lambda); fprintf(fp,"NLOOKSRANGE %ld\n",params->nlooksrange); fprintf(fp,"NLOOKSAZ %ld\n",params->nlooksaz); fprintf(fp,"NLOOKSOTHER %ld\n",params->nlooksother); fprintf(fp,"NCORRLOOKS %.8f\n",params->ncorrlooks); fprintf(fp,"NCORRLOOKSRANGE %ld\n",params->ncorrlooksrange); fprintf(fp,"NCORRLOOKSAZ %ld\n",params->ncorrlooksaz); /* scattering model parameters */ fprintf(fp,"\n# Scattering model parameters\n"); fprintf(fp,"KDS %.8f\n",params->kds); fprintf(fp,"SPECULAREXP %.8f\n",params->specularexp); fprintf(fp,"DZRCRITFACTOR %.8f\n",params->dzrcritfactor); LogBoolParam(fp,"SHADOW",params->shadow); fprintf(fp,"DZEIMIN %.8f\n",params->dzeimin); fprintf(fp,"LAYWIDTH %ld\n",params->laywidth); fprintf(fp,"LAYMINEI %.8f\n",params->layminei); fprintf(fp,"SLOPERATIOFACTOR %.8f\n",params->sloperatiofactor); fprintf(fp,"SIGSQEI %.8f\n",params->sigsqei); /* decorrelation model paramters */ fprintf(fp,"\n# Decorrelation model parameters\n"); fprintf(fp,"DRHO %.8f\n",params->drho); fprintf(fp,"RHOSCONST1 %.8f\n",params->rhosconst1); fprintf(fp,"RHOSCONST2 %.8f\n",params->rhosconst2); fprintf(fp,"CSTD1 %.8f\n",params->cstd1); fprintf(fp,"CSTD2 %.8f\n",params->cstd2); fprintf(fp,"CSTD3 %.8f\n",params->cstd3); fprintf(fp,"DEFAULTCORR %.8f\n",params->defaultcorr); fprintf(fp,"RHOMINFACTOR %.8f\n",params->rhominfactor); /* PDF model paramters */ fprintf(fp,"\n# PDF model parameters\n"); fprintf(fp,"DZLAYPEAK %.8f\n",params->dzlaypeak); fprintf(fp,"AZDZFACTOR %.8f\n",params->azdzfactor); fprintf(fp,"DZEIFACTOR %.8f\n",params->dzeifactor); fprintf(fp,"DZEIWEIGHT %.8f\n",params->dzeiweight); fprintf(fp,"DZLAYFACTOR %.8f\n",params->dzlayfactor); fprintf(fp,"LAYCONST %.8f\n",params->layconst); fprintf(fp,"LAYFALLOFFCONST %.8f\n",params->layfalloffconst); fprintf(fp,"SIGSQSHORTMIN %ld\n",params->sigsqshortmin); fprintf(fp,"SIGSQLAYFACTOR %.8f\n",params->sigsqlayfactor); /* deformation mode paramters */ fprintf(fp,"\n# Deformation mode parameters\n"); fprintf(fp,"DEFOAZDZFACTOR %.8f\n",params->defoazdzfactor); fprintf(fp,"DEFOTHRESHFACTOR %.8f\n",params->defothreshfactor); fprintf(fp,"DEFOMAX_CYCLE %.8f\n",params->defomax); fprintf(fp,"SIGSQCORR %.8f\n",params->sigsqcorr); fprintf(fp,"DEFOCONST %.8f\n",params->defolayconst); /* algorithm parameters */ fprintf(fp,"\n# Algorithm parameters\n"); fprintf(fp,"INITMAXFLOW %ld\n",params->initmaxflow); fprintf(fp,"ARCMAXFLOWCONST %ld\n",params->arcmaxflowconst); fprintf(fp,"MAXFLOW %ld\n",params->maxflow); fprintf(fp,"KROWEI %ld\n",params->krowei); fprintf(fp,"KCOLEI %ld\n",params->kcolei); fprintf(fp,"KPARDPSI %ld\n",params->kpardpsi); fprintf(fp,"KPERPDPSI %ld\n",params->kperpdpsi); fprintf(fp,"THRESHOLD %.8f\n",params->threshold); fprintf(fp,"INITDZR %.8f\n",params->initdzr); fprintf(fp,"INITDZSTEP %.8f\n",params->initdzstep); fprintf(fp,"MAXCOST %.8f\n",params->maxcost); fprintf(fp,"COSTSCALE %.8f\n",params->costscale); fprintf(fp,"COSTSCALEAMBIGHT %.8f\n",params->costscaleambight); fprintf(fp,"DNOMINCANGLE %.8f\n",params->dnomincangle); fprintf(fp,"NSHORTCYCLE %ld\n",params->nshortcycle); fprintf(fp,"MAXNEWNODECONST %.8f\n",params->maxnewnodeconst); if(params->maxnflowcycles==USEMAXCYCLEFRACTION){ fprintf(fp,"MAXCYCLEFRACTION %.8f\n",params->maxcyclefraction); }else{ fprintf(fp,"MAXNFLOWCYCLES %ld\n",params->maxnflowcycles); } fprintf(fp,"SOURCEMODE %ld\n",params->sourcemode); fprintf(fp,"CS2SCALEFACTOR %ld\n",params->cs2scalefactor); /* file names for dumping intermediate arrays */ fprintf(fp,"\n# File names for dumping intermediate arrays\n"); LogStringParam(fp,"INITFILE",outfiles->initfile); LogStringParam(fp,"FLOWFILE",outfiles->flowfile); LogStringParam(fp,"EIFILE",outfiles->eifile); LogStringParam(fp,"ROWCOSTFILE",outfiles->rowcostfile); LogStringParam(fp,"COLCOSTFILE",outfiles->colcostfile); LogStringParam(fp,"MSTROWCOSTFILE",outfiles->mstrowcostfile); LogStringParam(fp,"MSTCOLCOSTFILE",outfiles->mstcolcostfile); LogStringParam(fp,"MSTCOSTSFILE",outfiles->mstcostsfile); LogStringParam(fp,"RAWCORRDUMPFILE",outfiles->rawcorrdumpfile); LogStringParam(fp,"CORRDUMPFILE",outfiles->corrdumpfile); /* piece extraction parameters */ if(params->ntilerow==1 && params->ntilecol==1){ fprintf(fp,"\n# Piece extraction parameters\n"); fprintf(fp,"PIECEFIRSTROW %ld\n",params->piecefirstrow+1); fprintf(fp,"PIECEFIRSTCOL %ld\n",params->piecefirstcol+1); fprintf(fp,"PIECENROW %ld\n",params->piecenrow); fprintf(fp,"PIECENCOL %ld\n",params->piecencol); }else{ fprintf(fp,"\n# Piece extraction parameters\n"); fprintf(fp,"# Parameters ignored because of tile mode\n"); fprintf(fp,"# PIECEFIRSTROW %ld\n",params->piecefirstrow); fprintf(fp,"# PIECEFIRSTCOL %ld\n",params->piecefirstcol); fprintf(fp,"# PIECENROW %ld\n",params->piecenrow); fprintf(fp,"# PIECENCOL %ld\n",params->piecencol); } /* tile control */ fprintf(fp,"\n# Tile control\n"); fprintf(fp,"NTILEROW %ld\n",params->ntilerow); fprintf(fp,"NTILECOL %ld\n",params->ntilecol); fprintf(fp,"ROWOVRLP %ld\n",params->rowovrlp); fprintf(fp,"COLOVRLP %ld\n",params->colovrlp); fprintf(fp,"NPROC %ld\n",params->nthreads); fprintf(fp,"TILECOSTTHRESH %ld\n",params->tilecostthresh); fprintf(fp,"MINREGIONSIZE %ld\n",params->minregionsize); fprintf(fp,"TILEEDGEWEIGHT %.8f\n",params->tileedgeweight); fprintf(fp,"SCNDRYARCFLOWMAX %ld\n",params->scndryarcflowmax); LogBoolParam(fp,"RMTMPTILE",params->rmtmptile); if(params->assembleonly){ LogStringParam(fp,"ASSEMBLEONLY",params->tiledir); }else{ fprintf(fp,"ASSEMBLEONLY FALSE\n"); } /* connected component control */ fprintf(fp,"\n# Connected component control\n"); LogStringParam(fp,"CONNCOMPFILE",outfiles->conncompfile); LogBoolParam(fp,"REGROWCONNCOMPS",params->regrowconncomps); fprintf(fp,"MINCONNCOMPFRAC %.8f\n",params->minconncompfrac); fprintf(fp,"CONNCOMPTHRESH %ld\n",params->conncompthresh); fprintf(fp,"MAXNCOMPS %ld\n",params->maxncomps); /* close the log file */ fclose(fp); } } /* function: LogStringParam() * -------------------------- * Writes a line to the log file stream for the given keyword/value * pair. */ void LogStringParam(FILE *fp, char *key, char *value){ /* see if we were passed a zero length value string */ if(strlen(value)){ fprintf(fp,"%s %s\n",key,value); fflush(fp); }else{ fprintf(fp,"# Empty value for parameter %s\n",key); } } /* LogBoolParam() * -------------- * Writes a line to the log file stream for the given keyword/bool * pair. */ void LogBoolParam(FILE *fp, char *key, signed char boolvalue){ if(boolvalue){ fprintf(fp,"%s TRUE\n",key); }else{ fprintf(fp,"%s FALSE\n",key); } } /* LogFileFormat() * --------------- * Writes a line to the log file stream for the given keyword/ * file format pair. */ void LogFileFormat(FILE *fp, char *key, signed char fileformat){ if(fileformat==COMPLEX_DATA){ fprintf(fp,"%s COMPLEX_DATA\n",key); }else if(fileformat==FLOAT_DATA){ fprintf(fp,"%s FLOAT_DATA\n",key); }else if(fileformat==ALT_LINE_DATA){ fprintf(fp,"%s ALT_LINE_DATA\n",key); }else if(fileformat==ALT_SAMPLE_DATA){ fprintf(fp,"%s ALT_SAMPLE_DATA\n",key); } } /* function: GetNLines() * --------------------- * Gets the number of lines of data in the input file based on the file * size. */ long GetNLines(infileT *infiles, long linelen){ FILE *fp; long filesize, datasize; /* get size of input file in rows and columns */ if((fp=fopen(infiles->infile,"r"))==NULL){ fprintf(sp0,"can't open file %s\n",infiles->infile); exit(ABNORMAL_EXIT); } fseek(fp,0,SEEK_END); filesize=ftell(fp); fclose(fp); if(infiles->infileformat==FLOAT_DATA){ datasize=sizeof(float); }else{ datasize=2*sizeof(float); } if(filesize % (datasize*linelen)){ fprintf(sp0,"extra data in file %s (bad linelength?)\n", infiles->infile); exit(ABNORMAL_EXIT); } return(filesize/(datasize*linelen)); /* implicit floor */ } /* function: WriteOutputFile() * --------------------------- * Writes the unwrapped phase to the output file specified, in the * format given in the parameter structure. */ void WriteOutputFile(float **mag, float **unwrappedphase, char *outfile, outfileT *outfiles, long nrow, long ncol){ if(outfiles->outfileformat==ALT_LINE_DATA){ WriteAltLineFile(mag,unwrappedphase,outfile,nrow,ncol); }else if(outfiles->outfileformat==ALT_SAMPLE_DATA){ WriteAltSampFile(mag,unwrappedphase,outfile,nrow,ncol); }else if(outfiles->outfileformat==FLOAT_DATA){ Write2DArray((void **)unwrappedphase,outfile, nrow,ncol,sizeof(float)); }else{ fprintf(sp0,"WARNING: Illegal format specified for output file\n"); fprintf(sp0," using default floating-point format\n"); Write2DArray((void **)unwrappedphase,outfile, nrow,ncol,sizeof(float)); } } /* function: OpenOutputFile() * -------------------------- * Opens a file for writing. If unable to open the file, tries to * open a file in a dump path. The name of the opened output file * is written into the string realoutfile, for which at least * MAXSTRLEN bytes should already be allocated. */ FILE *OpenOutputFile(char *outfile, char *realoutfile){ char path[MAXSTRLEN], basename[MAXSTRLEN], dumpfile[MAXSTRLEN]; FILE *fp; if((fp=fopen(outfile,"w"))==NULL){ /* if we can't write to the out file, get the file name from the path */ /* and dump to the default path */ ParseFilename(outfile,path,basename); StrNCopy(dumpfile,DUMP_PATH,MAXSTRLEN); strcat(dumpfile,basename); if((fp=fopen(dumpfile,"w"))!=NULL){ fprintf(sp0,"WARNING: Can't write to file %s. Dumping to file %s\n", outfile,dumpfile); StrNCopy(realoutfile,dumpfile,MAXSTRLEN); }else{ fprintf(sp0,"Unable to write to file %s or dump to file %s\nAbort\n", outfile,dumpfile); exit(ABNORMAL_EXIT); } }else{ StrNCopy(realoutfile,outfile,MAXSTRLEN); } return(fp); } /* function: WriteAltLineFile() * ---------------------------- * Writes magnitude and phase data from separate arrays to file. * Data type is float. For each line of data, a full line of magnitude data * is written, then a full line of phase data. Dumps the file to a * default directory if the file name/path passed in cannot be used. */ void WriteAltLineFile(float **mag, float **phase, char *outfile, long nrow, long ncol){ int row; FILE *fp; char realoutfile[MAXSTRLEN]; fp=OpenOutputFile(outfile,realoutfile); for(row=0; rownrow; ncol=tileparams->ncol; /* check data size */ if(tileparams->ncol>LARGESHORT || tileparams->nrow>LARGESHORT){ fprintf(sp0,"one or more interferogram dimensions too large\n"); exit(ABNORMAL_EXIT); } if(tileparams->ncol<2 || tileparams->nrow<2){ fprintf(sp0,"input interferogram must be at least 2x2\n"); exit(ABNORMAL_EXIT); } /* is the input file already unwrapped? */ if(!params->unwrapped){ /* read wrapped phase and possibly interferogram magnitude data */ fprintf(sp1,"Reading wrapped phase from file %s\n",infiles->infile); if(infiles->infileformat==COMPLEX_DATA){ ReadComplexFile(&mag,&wrappedphase,infiles->infile, linelen,nlines,tileparams); }else if(infiles->infileformat==ALT_LINE_DATA){ ReadAltLineFile(&mag,&wrappedphase,infiles->infile, linelen,nlines,tileparams); }else if(infiles->infileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&mag,&wrappedphase,infiles->infile, linelen,nlines,tileparams); }else if(infiles->infileformat==FLOAT_DATA){ Read2DArray((void ***)&wrappedphase,infiles->infile,linelen,nlines, tileparams,sizeof(float *),sizeof(float)); }else{ fprintf(sp0,"illegal input file format specification\n"); exit(ABNORMAL_EXIT); } /* check to make sure the input data doesn't contain NaNs or infs */ if(!ValidDataArray(wrappedphase,nrow,ncol) || (mag!=NULL && !ValidDataArray(mag,nrow,ncol))){ fprintf(sp0,"NaN or infinity found in input float data\nAbort\n"); exit(ABNORMAL_EXIT); } /* flip the sign of the wrapped phase if flip flag is set */ FlipPhaseArraySign(wrappedphase,params,nrow,ncol); /* make sure the wrapped phase is properly wrapped */ WrapPhase(wrappedphase,nrow,ncol); }else{ /* read unwrapped phase input */ fprintf(sp1,"Reading unwrapped phase from file %s\n",infiles->infile); if(infiles->unwrappedinfileformat==ALT_LINE_DATA){ ReadAltLineFile(&mag,&unwrappedphase,infiles->infile, linelen,nlines,tileparams); }else if(infiles->unwrappedinfileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&mag,&unwrappedphase,infiles->infile, linelen,nlines,tileparams); }else if(infiles->unwrappedinfileformat==FLOAT_DATA){ Read2DArray((void ***)&unwrappedphase,infiles->infile,linelen,nlines, tileparams,sizeof(float *),sizeof(float)); }else{ fprintf(sp0,"Illegal input file format specification\nAbort\n"); exit(ABNORMAL_EXIT); } /* check to make sure the input data doesn't contain NaNs or infs */ if(!ValidDataArray(unwrappedphase,nrow,ncol) || (mag!=NULL && !ValidDataArray(mag,nrow,ncol))){ fprintf(sp0,"NaN or infinity found in input float data\nAbort\n"); exit(ABNORMAL_EXIT); } /* flip the sign of the input unwrapped phase if flip flag is set */ FlipPhaseArraySign(unwrappedphase,params,nrow,ncol); /* parse flows of unwrapped phase */ wrappedphase=ExtractFlow(unwrappedphase,&flows,nrow,ncol); /* free unwrapped phase array to save memory */ Free2DArray((void **)unwrappedphase,nrow); } /* get memory for mag (power) image and set to unity if not passed */ if(mag==NULL){ mag=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); for(row=0;rowmagfile)){ fprintf(sp1,"Reading interferogram magnitude from file %s\n", infiles->magfile); if(infiles->magfileformat==FLOAT_DATA){ Read2DArray((void ***)&mag,infiles->magfile,linelen,nlines,tileparams, sizeof(float *),sizeof(float)); }else if(infiles->magfileformat==COMPLEX_DATA){ ReadComplexFile(&mag,&dummy,infiles->magfile,linelen,nlines, tileparams); }else if(infiles->magfileformat==ALT_LINE_DATA){ ReadAltLineFile(&mag,&dummy,infiles->magfile,linelen,nlines, tileparams); }else if(infiles->magfileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&mag,&dummy,infiles->magfile,linelen,nlines, tileparams); } } if(dummy!=NULL){ Free2DArray((void **)dummy,tileparams->nrow); } } /* function: ReadUnwrappedEstimateFile() * ------------------------------------- * Reads the unwrapped-phase estimate from a file (assumes file name exists). */ void ReadUnwrappedEstimateFile(float ***unwrappedestptr, infileT *infiles, long linelen, long nlines, paramT *params, tileparamT *tileparams){ float **dummy; long nrow, ncol; /* initialize */ dummy=NULL; nrow=tileparams->nrow; ncol=tileparams->ncol; /* read data */ fprintf(sp1,"Reading coarse unwrapped estimate from file %s\n", infiles->estfile); if(infiles->estfileformat==ALT_LINE_DATA){ ReadAltLineFilePhase(unwrappedestptr,infiles->estfile, linelen,nlines,tileparams); }else if(infiles->estfileformat==FLOAT_DATA){ Read2DArray((void ***)unwrappedestptr,infiles->estfile,linelen,nlines, tileparams,sizeof(float *),sizeof(float)); }else if(infiles->estfileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&dummy,unwrappedestptr,infiles->estfile, linelen,nlines,tileparams); }else{ fprintf(sp0,"Illegal file format specification for file %s\nAbort\n", infiles->estfile); } if(dummy!=NULL){ Free2DArray((void **)dummy,nrow); } /* make sure data is valid */ if(!ValidDataArray(*unwrappedestptr,nrow,ncol)){ fprintf(sp0,"Infinity or NaN found in file %s\nAbort\n",infiles->estfile); exit(ABNORMAL_EXIT); } /* flip the sign of the unwrapped estimate if the flip flag is set */ FlipPhaseArraySign(*unwrappedestptr,params,nrow,ncol); } /* function: ReadWeightsFile() * --------------------------- * Read in weights form rowcol format file of short ints. */ void ReadWeightsFile(short ***weightsptr,char *weightfile, long linelen, long nlines, tileparamT *tileparams){ long row, col, nrow, ncol; short **rowweight, **colweight; signed char printwarning; /* set up and read data */ nrow=tileparams->nrow; ncol=tileparams->ncol; if(strlen(weightfile)){ fprintf(sp1,"Reading weights from file %s\n",weightfile); Read2DRowColFile((void ***)weightsptr,weightfile,linelen,nlines, tileparams,sizeof(short)); rowweight=*weightsptr; colweight=&(*weightsptr)[nrow-1]; printwarning=FALSE; for(row=0;rownrow; ncol=tileparams->ncol; pwr=NULL; pwr1=NULL; pwr2=NULL; /* read the data */ if(strlen(infiles->ampfile2)){ /* data is given in two separate files */ fprintf(sp1,"Reading brightness data from files %s and %s\n", infiles->ampfile,infiles->ampfile2); if(infiles->ampfileformat==FLOAT_DATA){ Read2DArray((void ***)&pwr1,infiles->ampfile,linelen,nlines,tileparams, sizeof(float *),sizeof(float)); Read2DArray((void ***)&pwr2,infiles->ampfile2,linelen,nlines,tileparams, sizeof(float *),sizeof(float)); }else{ fprintf(sp0,"Illegal file formats specified for files %s, %s\nAbort\n", infiles->ampfile,infiles->ampfile2); exit(ABNORMAL_EXIT); } }else{ /* data is in single file */ fprintf(sp1,"Reading brightness data from file %s\n",infiles->ampfile); if(infiles->ampfileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&pwr1,&pwr2,infiles->ampfile,linelen,nlines, tileparams); }else if(infiles->ampfileformat==ALT_LINE_DATA){ ReadAltLineFile(&pwr1,&pwr2,infiles->ampfile,linelen,nlines, tileparams); }else if(infiles->ampfileformat==FLOAT_DATA){ Read2DArray((void ***)&pwr,infiles->ampfile,linelen,nlines,tileparams, sizeof(float *),sizeof(float)); pwr1=NULL; pwr2=NULL; }else{ fprintf(sp0,"Illegal file format specified for file %s\nAbort\n", infiles->ampfile); exit(ABNORMAL_EXIT); } } /* check data validity */ if((pwr1!=NULL && !ValidDataArray(pwr1,nrow,ncol)) || (pwr2!=NULL && !ValidDataArray(pwr2,nrow,ncol)) || (pwr!=NULL && !ValidDataArray(pwr,nrow,ncol))){ fprintf(sp0,"Infinity or NaN found in amplitude or power data\nAbort\n"); exit(ABNORMAL_EXIT); } /* if data is amplitude, square to get power */ if(params->amplitude){ for(row=0;rownrow; dummy=NULL; corr=NULL; /* read the data */ fprintf(sp1,"Reading correlation data from file %s\n",infiles->corrfile); if(infiles->corrfileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&dummy,&corr,infiles->corrfile,linelen,nlines,tileparams); }else if(infiles->corrfileformat==ALT_LINE_DATA){ ReadAltLineFilePhase(&corr,infiles->corrfile,linelen,nlines,tileparams); }else if(infiles->corrfileformat==FLOAT_DATA){ Read2DArray((void ***)&corr,infiles->corrfile,linelen,nlines,tileparams, sizeof(float *),sizeof(float)); }else{ fprintf(sp0,"Illegal file format specified for file %s\nAbort\n", infiles->corrfile); exit(ABNORMAL_EXIT); } /* set output pointer and free memory */ if(dummy!=NULL){ Free2DArray((void **)dummy,nrow); } *corrptr=corr; } /* function: ReadAltLineFile() * --------------------------- * Read in the data from a file containing magnitude and phase * data. File should have one line of magnitude data, one line * of phase data, another line of magnitude data, etc. * ncol refers to the number of complex elements in one line of * data. */ void ReadAltLineFile(float ***mag, float ***phase, char *alfile, long linelen, long nlines, tileparamT *tileparams){ FILE *fp; long filesize,row,nrow,ncol,padlen; /* open the file */ if((fp=fopen(alfile,"r"))==NULL){ fprintf(sp0,"Can't open file %s\nAbort\n",alfile); exit(ABNORMAL_EXIT); } /* get number of lines based on file size and line length */ fseek(fp,0,SEEK_END); filesize=ftell(fp); if(filesize!=(2*nlines*linelen*sizeof(float))){ fprintf(sp0,"File %s wrong size (%ldx%ld array expected)\nAbort\n", alfile,nlines,linelen); exit(ABNORMAL_EXIT); } fseek(fp,0,SEEK_SET); /* get memory */ nrow=tileparams->nrow; ncol=tileparams->ncol; if(*mag==NULL){ (*mag)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } if(*phase==NULL){ (*phase)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } /* read the data */ fseek(fp,(tileparams->firstrow*2*linelen+tileparams->firstcol) *sizeof(float),SEEK_CUR); padlen=(linelen-ncol)*sizeof(float); for(row=0; rownrow; ncol=tileparams->ncol; if(*phase==NULL){ (*phase)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } /* read the phase data */ fseek(fp,(tileparams->firstrow*2*linelen+linelen +tileparams->firstcol)*sizeof(float),SEEK_CUR); padlen=(2*linelen-ncol)*sizeof(float); for(row=0; rownrow; ncol=tileparams->ncol; if(*mag==NULL){ (*mag)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } if(*phase==NULL){ (*phase)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } inpline=(float *)MAlloc(2*ncol*sizeof(float)); /* read the data and convert to magnitude and phase */ fseek(fp,(tileparams->firstrow*linelen+tileparams->firstcol) *2*sizeof(float),SEEK_CUR); padlen=(linelen-ncol)*2*sizeof(float); for(row=0; row=TWOPI){ (*phase)[row][col]-=TWOPI; } } fseek(fp,padlen,SEEK_CUR); } free(inpline); fclose(fp); } /* function: Read2DArray() * ------------------------- * Reads file of real data of size elsize. Assumes the native byte order * of the platform. */ void Read2DArray(void ***arr, char *infile, long linelen, long nlines, tileparamT *tileparams, size_t elptrsize, size_t elsize){ FILE *fp; long filesize,row,nrow,ncol,padlen; /* open the file */ if((fp=fopen(infile,"r"))==NULL){ fprintf(sp0,"Can't open file %s\nAbort\n",infile); exit(ABNORMAL_EXIT); } /* get number of lines based on file size and line length */ fseek(fp,0,SEEK_END); filesize=ftell(fp); if(filesize!=(nlines*linelen*elsize)){ fprintf(sp0,"File %s wrong size (%ldx%ld array expected)\nAbort\n", infile,nlines,linelen); exit(ABNORMAL_EXIT); } fseek(fp,0,SEEK_SET); /* get memory */ nrow=tileparams->nrow; ncol=tileparams->ncol; if(*arr==NULL){ (*arr)=(void **)Get2DMem(nrow,ncol,elptrsize,elsize); } /* read the data */ fseek(fp,(linelen*tileparams->firstrow+tileparams->firstcol) *elsize,SEEK_CUR); padlen=(linelen-ncol)*elsize; for(row=0; rownrow; ncol=tileparams->ncol; if(*arr1==NULL){ (*arr1)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } if(*arr2==NULL){ (*arr2)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } inpline=(float *)MAlloc(2*ncol*sizeof(float)); /* read the data */ fseek(fp,(tileparams->firstrow*linelen+tileparams->firstcol) *2*sizeof(float),SEEK_CUR); padlen=(linelen-ncol)*2*sizeof(float); for(row=0; rownrow; ncol=tileparams->ncol; if(*arr==NULL){ (*arr)=Get2DRowColMem(nrow,ncol,sizeof(void *),size); } /* read arrays */ fseek(fp,(linelen*tileparams->firstrow+tileparams->firstcol) *size,SEEK_SET); padlen=(linelen-ncol)*size; for(row=0; rowfirstrow +tileparams->firstcol)*size,SEEK_SET); for(row=nrow-1; row<2*nrow-1; row++){ if(fread((*arr)[row],size,ncol-1,fp)!=ncol-1){ fprintf(sp0,"Error while reading from file %s\nAbort\n",filename); exit(ABNORMAL_EXIT); } fseek(fp,padlen,SEEK_CUR); } fclose(fp); } /* function: Read2DRowColFileRows() * -------------------------------- * Similar to Read2DRowColFile(), except reads only row (horizontal) data * at specified locations. tileparams->nrow is treated as the number of * rows of data to be read from the RowCol file, not the number of * equivalent rows in the orginal pixel file (whose arcs are represented * in the RowCol file). */ void Read2DRowColFileRows(void ***arr, char *filename, long linelen, long nlines, tileparamT *tileparams, size_t size){ FILE *fp; long row, nel, nrow, ncol, padlen, filelen; /* open the file */ if((fp=fopen(filename,"r"))==NULL){ fprintf(sp0,"Can't open file %s\nAbort\n",filename); exit(ABNORMAL_EXIT); } /* get number of data elements in file */ fseek(fp,0,SEEK_END); filelen=ftell(fp); fseek(fp,0,SEEK_SET); nel=(long )(filelen/size); /* check file size */ if(2*linelen*nlines-nlines-linelen != nel || (filelen % size)){ fprintf(sp0,"File %s wrong size (%ld elements expected)\nAbort\n", filename,2*linelen*nlines-nlines-linelen); exit(ABNORMAL_EXIT); } /* get memory if passed pointer is NULL */ nrow=tileparams->nrow; ncol=tileparams->ncol; if(*arr==NULL){ (*arr)=Get2DMem(nrow,ncol,sizeof(void *),size); } /* read arrays */ fseek(fp,(linelen*tileparams->firstrow+tileparams->firstcol) *size,SEEK_SET); padlen=(linelen-ncol)*size; for(row=0; rowdumpall){ if(!strlen(outfiles->initfile)){ StrNCopy(outfiles->initfile,DUMP_INITFILE,MAXSTRLEN); } if(!strlen(outfiles->flowfile)){ StrNCopy(outfiles->flowfile,DUMP_FLOWFILE,MAXSTRLEN); } if(!strlen(outfiles->eifile)){ StrNCopy(outfiles->eifile,DUMP_EIFILE,MAXSTRLEN); } if(!strlen(outfiles->rowcostfile)){ StrNCopy(outfiles->rowcostfile,DUMP_ROWCOSTFILE,MAXSTRLEN); } if(!strlen(outfiles->colcostfile)){ StrNCopy(outfiles->colcostfile,DUMP_COLCOSTFILE,MAXSTRLEN); } if(!strlen(outfiles->mstrowcostfile)){ StrNCopy(outfiles->mstrowcostfile,DUMP_MSTROWCOSTFILE,MAXSTRLEN); } if(!strlen(outfiles->mstcolcostfile)){ StrNCopy(outfiles->mstcolcostfile,DUMP_MSTCOLCOSTFILE,MAXSTRLEN); } if(!strlen(outfiles->mstcostsfile)){ StrNCopy(outfiles->mstcostsfile,DUMP_MSTCOSTSFILE,MAXSTRLEN); } if(!strlen(outfiles->corrdumpfile)){ StrNCopy(outfiles->corrdumpfile,DUMP_CORRDUMPFILE,MAXSTRLEN); } if(!strlen(outfiles->rawcorrdumpfile)){ StrNCopy(outfiles->rawcorrdumpfile,DUMP_RAWCORRDUMPFILE,MAXSTRLEN); } } } /* function: SetStreamPointers() * ----------------------------- * Sets the default stream pointers (global variables). */ void SetStreamPointers(void){ fflush(NULL); if((sp0=DEF_ERRORSTREAM)==NULL){ if((sp0=fopen(NULLFILE,"w"))==NULL){ fprintf(sp0,"unable to open null file %s\n",NULLFILE); exit(ABNORMAL_EXIT); } } if((sp1=DEF_OUTPUTSTREAM)==NULL){ if((sp1=fopen(NULLFILE,"w"))==NULL){ fprintf(sp0,"unable to open null file %s\n",NULLFILE); exit(ABNORMAL_EXIT); } } if((sp2=DEF_VERBOSESTREAM)==NULL){ if((sp2=fopen(NULLFILE,"w"))==NULL){ fprintf(sp0,"unable to open null file %s\n",NULLFILE); exit(ABNORMAL_EXIT); } } if((sp3=DEF_COUNTERSTREAM)==NULL){ if((sp3=fopen(NULLFILE,"w"))==NULL){ fprintf(sp0,"unable to open null file %s\n",NULLFILE); exit(ABNORMAL_EXIT); } } } /* function: SetVerboseOut() * ------------------------- * Set the global stream pointer sp2 to be stdout if the verbose flag * is set in the parameter data type. */ void SetVerboseOut(paramT *params){ fflush(NULL); if(params->verbose){ if(sp2!=stdout && sp2!=stderr && sp2!=stdin && sp2!=NULL){ fclose(sp2); } sp2=stdout; if(sp3!=stdout && sp3!=stderr && sp3!=stdin && sp3!=NULL){ fclose(sp3); } sp3=stdout; } } /* function: ChildResetStreamPointers() * ----------------------------------- * Reset the global stream pointers for a child. Streams equal to stdout * are directed to a log file, and errors are written to the screen. */ void ChildResetStreamPointers(pid_t pid, long tilerow, long tilecol, paramT *params){ FILE *logfp; char logfile[MAXSTRLEN], cwd[MAXSTRLEN]; fflush(NULL); sprintf(logfile,"%s/%s%ld_%ld",params->tiledir,LOGFILEROOT,tilerow,tilecol); if((logfp=fopen(logfile,"w"))==NULL){ fprintf(sp0,"Unable to open log file %s\nAbort\n",logfile); exit(ABNORMAL_EXIT); } fprintf(logfp,"%s (pid %ld): unwrapping tile at row %ld, column %ld\n\n", PROGRAMNAME,(long )pid,tilerow,tilecol); if(getcwd(cwd,MAXSTRLEN)!=NULL){ fprintf(logfp,"Current working directory is %s\n",cwd); } if(sp2==stdout || sp2==stderr){ sp2=logfp; } if(sp1==stdout || sp1==stderr){ sp1=logfp; } if(sp0==stdout || sp0==stderr){ sp0=logfp; } if(sp3!=stdout && sp3!=stderr && sp3!=stdin && sp3!=NULL){ fclose(sp3); } if((sp3=fopen(NULLFILE,"w"))==NULL){ fprintf(sp0,"Unable to open null file %s\n",NULLFILE); exit(ABNORMAL_EXIT); } } /* function: DumpIncrCostFiles() * ----------------------------- * Dumps incremental cost arrays, creating file names for them. */ void DumpIncrCostFiles(incrcostT **incrcosts, long iincrcostfile, long nflow, long nrow, long ncol){ long row, col, maxcol; char incrcostfile[MAXSTRLEN]; char tempstr[MAXSTRLEN]; short **tempcosts; /* get memory for tempcosts */ tempcosts=(short **)Get2DRowColMem(nrow,ncol,sizeof(short *),sizeof(short)); /* create the file names and dump the files */ /* snprintf() is more elegant, but its unavailable on some machines */ for(row=0;row<2*nrow-1;row++){ if(rowoutfile,path,basename); sprintf(params->tiledir,"%s%s%ld",path,TMPTILEDIRROOT,(long )getpid()); /* create tile directory */ fprintf(sp1,"Creating temporary directory %s\n",params->tiledir); if(mkdir(params->tiledir,TILEDIRMODE)){ fprintf(sp0,"Error creating directory %s\nAbort\n",params->tiledir); exit(ABNORMAL_EXIT); } } /* function: ParseFilename() * ------------------------- * Given a filename, separates it into path and base filename. Output * buffers should be at least MAXSTRLEN characters, and filename buffer * should be no more than MAXSTRLEN characters. The output path * has a trailing "/" character. */ void ParseFilename(char *filename, char *path, char *basename){ char tempstring[MAXSTRLEN]; char *tempouttok; /* make sure we have a nonzero filename */ if(!strlen(filename)){ fprintf(sp0,"Zero-length filename passed to ParseFilename()\nAbort\n"); exit(ABNORMAL_EXIT); } /* initialize path */ if(filename[0]=='/'){ StrNCopy(path,"/",MAXSTRLEN); }else{ StrNCopy(path,"",MAXSTRLEN); } /* parse the filename */ StrNCopy(tempstring,filename,MAXSTRLEN); tempouttok=strtok(tempstring,"/"); while(TRUE){ StrNCopy(basename,tempouttok,MAXSTRLEN); if((tempouttok=strtok(NULL,"/"))==NULL){ break; } strcat(path,basename); strcat(path,"/"); } /* make sure we have a nonzero base filename */ if(!strlen(basename)){ fprintf(sp0,"Zero-length base filename found in ParseFilename()\nAbort\n"); exit(ABNORMAL_EXIT); } } GMTSAR_V5.7/snaphu/src/snaphu.h000644 015705 000000 00000144477 13505462014 017316 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu header file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ /**********************/ /* defined constants */ /**********************/ #define PROGRAMNAME "snaphu" #define VERSION "1.4.2" #ifdef PI #undef PI #endif #define PI 3.14159265358979323846 #define TWOPI 6.28318530717958647692 #define SQRTHALF 0.70710678118654752440 #define MAXSTRLEN 512 #define MAXTMPSTRLEN 1024 #define MAXLINELEN 2048 #define TRUE 1 #define FALSE 0 #define LARGESHORT 32000 #define LARGELONG 2000000000 #define LARGELONGLONG 9000000000000000000 #define LARGEFLOAT 1.0e35 #define VERYFAR LARGELONG #define GROUNDROW -2 #define GROUNDCOL -2 #define MAXGROUPBASE LARGELONG #define ONTREE 1 #define INBUCKET 2 #define NOTINBUCKET 3 #define POSINCR 0 #define NEGINCR 1 #define NOCOSTSHELF -LARGESHORT #define MINSCALARCOST 1 #define INITARRSIZE 500 #define NEWNODEBAGSTEP 500 #define CANDIDATEBAGSTEP 500 #define NEGBUCKETFRACTION 1.0 #define POSBUCKETFRACTION 1.0 #define CLIPFACTOR 0.6666666667 #define DEF_OUTFILE "snaphu.out" #define DEF_SYSCONFFILE "" /* "/usr/local/snaphu/snaphu.conf" */ #define DEF_WEIGHTFILE "" /* "snaphu.weight" */ #define DEF_AMPFILE "" /* "snaphu.amp" */ #define DEF_AMPFILE2 "" /* "snaphu.amp" */ #define DEF_MAGFILE "" /* "snaphu.mag" */ #define DEF_CORRFILE "" /* "snaphu.corr" */ #define DEF_ESTFILE "" /* "snaphu.est" */ #define DEF_COSTINFILE "" #define DEF_INITFILE "" #define DEF_FLOWFILE "" #define DEF_EIFILE "" #define DEF_ROWCOSTFILE "" #define DEF_COLCOSTFILE "" #define DEF_MSTROWCOSTFILE "" #define DEF_MSTCOLCOSTFILE "" #define DEF_MSTCOSTSFILE "" #define DEF_CORRDUMPFILE "" #define DEF_RAWCORRDUMPFILE "" #define DEF_CONNCOMPFILE "" #define DEF_COSTOUTFILE "" #define DEF_LOGFILE "" #define MAXITERATION 5000 #define NEGSHORTRANGE SHRT_MIN #define POSSHORTRANGE SHRT_MAX #define MAXRES SCHAR_MAX #define MINRES SCHAR_MIN #define PROBCOSTP (-16) #define NULLFILE "/dev/null" #define DEF_ERRORSTREAM stderr #define DEF_OUTPUTSTREAM stdout #define DEF_VERBOSESTREAM NULL #define DEF_COUNTERSTREAM NULL #define DEF_INITONLY FALSE #define DEF_INITMETHOD MSTINIT #define DEF_UNWRAPPED FALSE #define DEF_REGROWCONNCOMPS FALSE #define DEF_EVAL FALSE #define DEF_WEIGHT 1 #define DEF_COSTMODE TOPO #define DEF_VERBOSE FALSE #define DEF_AMPLITUDE TRUE #define AUTOCALCSTATMAX 0 #define USEMAXCYCLEFRACTION (-123) #define COMPLEX_DATA 1 /* file format */ #define FLOAT_DATA 2 /* file format */ #define ALT_LINE_DATA 3 /* file format */ #define ALT_SAMPLE_DATA 4 /* file format */ #define ABNORMAL_EXIT 1 /* exit code */ #define NORMAL_EXIT 0 /* exit code */ #define DUMP_PATH "/tmp/" /* default location for writing dumps */ #define NARMS 8 /* number of arms for Despeckle() */ #define ARMLEN 5 /* length of arms for Despeckle() */ #define KEDGE 5 /* length of edge detection window */ #define ARCUBOUND 200 /* capacities for cs2 */ #define MSTINIT 1 /* initialization method */ #define MCFINIT 2 /* initialization method */ #define BIGGESTDZRHOMAX 10000.0 #define SECONDSPERPIXEL 0.000001 /* for delay between thread creations */ #define MAXTHREADS 64 #define TMPTILEDIRROOT "snaphu_tiles_" #define TILEDIRMODE 511 #define TMPTILEROOT "tmptile_" #define TMPTILECOSTSUFFIX "cost_" #define TMPTILEOUTFORMAT ALT_LINE_DATA #define REGIONSUFFIX "_regions" #define LOGFILEROOT "tmptilelog_" #define RIGHT 1 #define DOWN 2 #define LEFT 3 #define UP 4 #define TILEDPSICOLFACTOR 0.8 #define ZEROCOSTARC -LARGELONG #define PINGPONG 2 #define SINGLEANTTRANSMIT 1 #define NOSTATCOSTS 0 #define TOPO 1 #define DEFO 2 #define SMOOTH 3 /* SAR and geometry parameter defaults */ #define DEF_ORBITRADIUS 7153000.0 #define DEF_ALTITUDE 0.0 #define DEF_EARTHRADIUS 6378000.0 #define DEF_BASELINE 150.0 #define DEF_BASELINEANGLE (1.25*PI) #define DEF_BPERP 0 #define DEF_TRANSMITMODE PINGPONG #define DEF_NLOOKSRANGE 1 #define DEF_NLOOKSAZ 5 #define DEF_NLOOKSOTHER 1 #define DEF_NCORRLOOKS 23.8 #define DEF_NCORRLOOKSRANGE 3 #define DEF_NCORRLOOKSAZ 15 #define DEF_NEARRANGE 831000.0 #define DEF_DR 8.0 #define DEF_DA 20.0 #define DEF_RANGERES 10.0 #define DEF_AZRES 6.0 #define DEF_LAMBDA 0.0565647 /* scattering model defaults */ #define DEF_KDS 0.02 #define DEF_SPECULAREXP 8.0 #define DEF_DZRCRITFACTOR 2.0 #define DEF_SHADOW FALSE #define DEF_DZEIMIN -4.0 #define DEF_LAYWIDTH 16 #define DEF_LAYMINEI 1.25 #define DEF_SLOPERATIOFACTOR 1.18 #define DEF_SIGSQEI 100.0 /* decorrelation model parameters */ #define DEF_DRHO 0.005 #define DEF_RHOSCONST1 1.3 #define DEF_RHOSCONST2 0.14 #define DEF_CSTD1 0.4 #define DEF_CSTD2 0.35 #define DEF_CSTD3 0.06 #define DEF_DEFAULTCORR 0.01 #define DEF_RHOMINFACTOR 1.3 /* pdf model parameters */ #define DEF_DZLAYPEAK -2.0 #define DEF_AZDZFACTOR 0.99 #define DEF_DZEIFACTOR 4.0 #define DEF_DZEIWEIGHT 0.5 #define DEF_DZLAYFACTOR 1.0 #define DEF_LAYCONST 0.9 #define DEF_LAYFALLOFFCONST 2.0 #define DEF_SIGSQSHORTMIN 1 #define DEF_SIGSQLAYFACTOR 0.1 /* deformation mode parameters */ #define DEF_DEFOAZDZFACTOR 1.0 #define DEF_DEFOTHRESHFACTOR 1.2 #define DEF_DEFOMAX 1.2 #define DEF_SIGSQCORR 0.05 #define DEF_DEFOLAYCONST 0.9 /* algorithm parameters */ #define DEF_FLIPPHASESIGN FALSE #define DEF_MAXFLOW 4 #define DEF_KROWEI 65 #define DEF_KCOLEI 257 #define DEF_KPARDPSI 7 #define DEF_KPERPDPSI 7 #define DEF_THRESHOLD 0.001 #define DEF_INITDZR 2048.0 #define DEF_INITDZSTEP 100.0 #define DEF_MAXCOST 1000.0 #define DEF_COSTSCALE 100.0 #define DEF_COSTSCALEAMBIGHT 80.0 #define DEF_DNOMINCANGLE 0.01 #define DEF_SRCROW -1 #define DEF_SRCCOL -1 #define DEF_P PROBCOSTP #define DEF_NSHORTCYCLE 200 #define DEF_MAXNEWNODECONST 0.0008 #define DEF_MAXCYCLEFRACTION 0.00001 #define DEF_SOURCEMODE 0 #define DEF_MAXNFLOWCYCLES USEMAXCYCLEFRACTION #define DEF_INITMAXFLOW 9999 #define INITMAXCOSTINCR 200 #define NOSTATINITMAXFLOW 15 #define DEF_ARCMAXFLOWCONST 3 #define DEF_DUMPALL FALSE #define DUMP_INITFILE "snaphu.init" #define DUMP_FLOWFILE "snaphu.flow" #define DUMP_EIFILE "snaphu.ei" #define DUMP_ROWCOSTFILE "snaphu.rowcost" #define DUMP_COLCOSTFILE "snaphu.colcost" #define DUMP_MSTROWCOSTFILE "snaphu.mstrowcost" #define DUMP_MSTCOLCOSTFILE "snaphu.mstcolcost" #define DUMP_MSTCOSTSFILE "snaphu.mstcosts" #define DUMP_CORRDUMPFILE "snaphu.corr" #define DUMP_RAWCORRDUMPFILE "snaphu.rawcorr" #define INCRCOSTFILEPOS "snaphu.incrcostpos" #define INCRCOSTFILENEG "snaphu.incrcostneg" #define DEF_CS2SCALEFACTOR 8 /* default tile parameters */ #define DEF_NTILEROW 1 #define DEF_NTILECOL 1 #define DEF_ROWOVRLP 0 #define DEF_COLOVRLP 0 #define DEF_PIECEFIRSTROW 1 #define DEF_PIECEFIRSTCOL 1 #define DEF_PIECENROW 0 #define DEF_PIECENCOL 0 #define DEF_TILECOSTTHRESH 500 #define DEF_MINREGIONSIZE 100 #define DEF_NTHREADS 1 #define DEF_SCNDRYARCFLOWMAX 8 #define DEF_TILEEDGEWEIGHT 2.5 #define DEF_ASSEMBLEONLY FALSE #define DEF_RMTMPTILE FALSE /* default connected component parameters */ #define DEF_MINCONNCOMPFRAC 0.01 #define DEF_CONNCOMPTHRESH 300 #define DEF_MAXNCOMPS 32 /* default file formats */ #define DEF_INFILEFORMAT COMPLEX_DATA #define DEF_UNWRAPPEDINFILEFORMAT ALT_LINE_DATA #define DEF_MAGFILEFORMAT FLOAT_DATA #define DEF_OUTFILEFORMAT ALT_LINE_DATA #define DEF_CORRFILEFORMAT ALT_LINE_DATA #define DEF_ESTFILEFORMAT ALT_LINE_DATA #define DEF_AMPFILEFORMAT ALT_SAMPLE_DATA /* command-line usage help strings */ #define OPTIONSHELPFULL\ "usage: snaphu [options] infile linelength [options]\n"\ "options:\n"\ " -t use topography mode costs (default)\n"\ " -d use deformation mode costs\n"\ " -s use smooth-solution mode costs\n"\ " -f read configuration parameters from file\n"\ " -o write output to file\n"\ " -a read amplitude data from file\n"\ " -A read power data from file\n"\ " -m read interferogram magnitude data from file\n"\ " -c read correlation data from file\n"\ " -e read coarse unwrapped-phase estimate from file\n"\ " -w read scalar weights from file\n"\ " -b perpendicular baseline (meters, topo mode only)\n"\ " -p Lp-norm parameter p\n"\ " -i do initialization and exit\n"\ " -n do not use statistical costs (with -p or -i)\n"\ " -u infile is already unwrapped; initialization not needed\n"\ " -q quantify cost of unwrapped input file then exit\n"\ " -g grow connected components mask and write to file\n"\ " -G grow connected components mask for unwrapped input\n"\ " -l log runtime parameters to file\n"\ " -v give verbose output\n"\ " --mst use MST algorithm for initialization (default)\n"\ " --mcf use MCF algorithm for initialization\n"\ " --aa read amplitude from next two files\n"\ " --AA read power from next two files\n"\ " --costinfile read statistical costs from file\n"\ " --costoutfile write statistical costs to file\n"\ " --tile unwrap as nrow x ncol tiles\n"\ " --nproc number of processors used in tile mode\n"\ " --assemble assemble unwrapped tiles in dir\n"\ " --piece unwrap subset of image\n" \ " --debug, --dumpall dump all intermediate data arrays\n"\ " --copyright, --info print copyright and bug report info\n"\ " -h, --help print this help text\n"\ "\n" #define OPTIONSHELPBRIEF\ "usage: snaphu [options] infile linelength [options]\n"\ "most common options:\n"\ " -t use topography mode costs (default)\n"\ " -d use deformation mode costs\n"\ " -s use smooth-solution mode costs\n"\ " -f read configuration parameters from file\n"\ " -o write output to file\n"\ " -a read amplitude data from file\n"\ " -c read correlation data from file\n"\ " -b perpendicular baseline (meters)\n"\ " -i do initialization and exit\n"\ " -l log runtime parameters to file\n"\ " -v give verbose output\n"\ " --mst use MST algorithm for initialization (default)\n"\ " --mcf use MCF algorithm for initialization\n"\ "\n"\ "type snaphu -h for a complete list of options\n"\ "\n" #define COPYRIGHT\ "Copyright 2002 Board of Trustees, Leland Stanford Jr. University\n"\ "\n"\ "Except as noted below, permission to use, copy, modify, and\n"\ "distribute, this software and its documentation for any purpose is\n"\ "hereby granted without fee, provided that the above copyright notice\n"\ "appear in all copies and that both that copyright notice and this\n"\ "permission notice appear in supporting documentation, and that the\n"\ "name of the copyright holders be used in advertising or publicity\n"\ "pertaining to distribution of the software with specific, written\n"\ "prior permission, and that no fee is charged for further distribution\n"\ "of this software, or any modifications thereof. The copyright holder\n"\ "makes no representations about the suitability of this software for\n"\ "any purpose. It is provided \"as is\" without express or implied\n"\ "warranty.\n"\ "\n"\ "THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS\n"\ "SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n"\ "FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY\n"\ "SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER\n"\ "RESULTING FROM LOSS OF USE, DATA, PROFITS, QPA OR GPA, WHETHER IN AN\n"\ "ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT\n"\ "OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"\ "\n"\ "The parts of this software derived from the CS2 minimum cost flow\n"\ "solver written by A. V. Goldberg and B. Cherkassky are governed by the\n"\ "terms of the copyright holder of that software. Permission has been\n"\ "granted to use and distrubute that software for strictly noncommercial\n"\ "purposes as part of this package, provided that the following\n"\ "copyright notice from the original distribution and URL accompany the\n"\ "software:\n"\ "\n"\ " COPYRIGHT C 1995 IG Systems, Inc. Permission to use for\n"\ " evaluation purposes is granted provided that proper\n"\ " acknowledgments are given. For a commercial licence, contact\n"\ " igsys@eclipse.net.\n"\ "\n"\ " This software comes with NO WARRANTY, expressed or implied. By way\n"\ " of example, but not limitation, we make no representations of\n"\ " warranties of merchantability or fitness for any particular\n"\ " purpose or that the use of the software components or\n"\ " documentation will not infringe any patents, copyrights,\n"\ " trademarks, or other rights.\n"\ "\n"\ " http://www.igsystems.com/cs2\n"\ "\n"\ "\n"\ "Send snaphu bug reports to Curtis W. Chen (curtis@nova.stanford.edu).\n"\ "\n" /********************/ /* type definitions */ /********************/ /* node data structure */ typedef struct nodeST{ short row,col; /* row, col of this node */ unsigned long level; /* tree level */ struct nodeST *next; /* ptr to next node in thread or bucket */ struct nodeST *prev; /* ptr to previous node in thread or bucket */ struct nodeST *pred; /* parent node in tree */ long group; /* for marking label */ long incost,outcost; /* costs to, from root of tree */ }nodeT; /* arc cost data structure */ typedef struct costST{ short offset; /* offset of wrapped phase gradient from 0 */ short sigsq; /* variance due to decorrelation */ short dzmax; /* largest discontinuity on shelf */ short laycost; /* cost of layover discontinuity shelf */ }costT; /* arc cost data structure for smooth costs */ typedef struct smoothcostST{ short offset; /* offset of wrapped phase gradient from 0 */ short sigsq; /* variance due to decorrelation */ }smoothcostT; /* incremental cost data structure */ typedef struct incrcostST{ short poscost; /* cost for positive flow increment */ short negcost; /* cost for negative flow increment */ }incrcostT; /* arc candidate data structure */ typedef struct candidateST{ nodeT *from, *to; /* endpoints of candidate arc */ long violation; /* magnitude of arc violation */ short arcrow,arccol; /* indexes into arc arrays */ signed char arcdir; /* direction of arc (1=fwd, -1=rev) */ }candidateT; /* bucket data structure */ typedef struct bucketST{ long size; /* number of buckets in list */ long curr; /* current bucket index */ long maxind; /* maximum bucket index */ long minind; /* smallest (possibly negative) bucket index */ nodeT **bucket; /* array of first nodes in each bucket */ nodeT **bucketbase; /* real base of bucket array */ signed char wrapped; /* flag denoting wrapped circular buckets */ }bucketT; /* secondary arc data structure */ typedef struct scndryarcST{ short arcrow; /* row of arc in secondary network array */ short arccol; /* col of arc in secondary network array */ nodeT *from; /* secondary node at tail of arc */ nodeT *to; /* secondary node at head of arc */ signed char fromdir; /* direction from which arc enters head */ }scndryarcT; /* supplementary data structure for secondary nodes */ typedef struct nodesuppST{ short row; /* row of node in primary network problem */ short col; /* col of node in primary network problem */ nodeT **neighbornodes; /* pointers to neighboring secondary nodes */ scndryarcT **outarcs; /* pointers to secondary arcs to neighbors */ short noutarcs; /* number of arcs from this node */ }nodesuppT; /* run-time parameter data structure */ typedef struct paramST{ /* SAR and geometry parameters */ double orbitradius; /* radius of platform orbit (meters) */ double altitude; /* SAR altitude (meters) */ double earthradius; /* radius of earth (meters) */ double bperp; /* nominal perpendiuclar baseline (meters) */ signed char transmitmode; /* transmit mode (PINGPONG or SINGLEANTTRANSMIT) */ double baseline; /* baseline length (meters, always postive) */ double baselineangle; /* baseline angle above horizontal (rad) */ long nlooksrange; /* number of looks in range for input data */ long nlooksaz; /* number of looks in azimuth for input data */ long nlooksother; /* number of nonspatial looks for input data */ double ncorrlooks; /* number of independent looks in correlation est */ long ncorrlooksrange; /* number of looks in range for correlation */ long ncorrlooksaz; /* number of looks in azimuth for correlation */ double nearrange; /* slant range to near part of swath (meters) */ double dr; /* range bin spacing (meters) */ double da; /* azimuth bin spacing (meters) */ double rangeres; /* range resolution (meters) */ double azres; /* azimuth resolution (meters) */ double lambda; /* wavelength (meters) */ /* scattering model parameters */ double kds; /* ratio of diffuse to specular scattering */ double specularexp; /* power specular scattering component */ double dzrcritfactor; /* fudge factor for linearizing scattering model */ signed char shadow; /* allow discontinuities from shadowing */ double dzeimin; /* lower limit for backslopes (if shadow = FALSE) */ long laywidth; /* width of window for summing layover brightness */ double layminei; /* threshold brightness for assuming layover */ double sloperatiofactor;/* fudge factor for linearized scattering slopes */ double sigsqei; /* variance (dz, meters) due to uncertainty in EI */ /* decorrelation model parameters */ double drho; /* step size of correlation-slope lookup table */ double rhosconst1,rhosconst2;/* for calculating rho0 in biased rho */ double cstd1,cstd2,cstd3;/* for calculating correlation power given nlooks */ double defaultcorr; /* default correlation if no correlation file */ double rhominfactor; /* threshold for setting unbiased correlation to 0 */ /* pdf model parameters */ double dzlaypeak; /* range pdf peak for no discontinuity when bright */ double azdzfactor; /* fraction of dz in azimuth vs. rnage */ double dzeifactor; /* nonlayover dz scale factor */ double dzeiweight; /* weight to give dz expected from intensity */ double dzlayfactor; /* layover regime dz scale factor */ double layconst; /* normalized constant pdf of layover edge */ double layfalloffconst; /* factor of sigsq for layover cost increase */ long sigsqshortmin; /* min short value for costT variance */ double sigsqlayfactor; /* fration of ambiguityheight^2 for layover sigma */ /* deformation mode parameters */ double defoazdzfactor; /* scale for azimuth ledge in defo cost function */ double defothreshfactor;/* factor of rho0 for discontinuity threshold */ double defomax; /* max discontinuity (cycles) from deformation */ double sigsqcorr; /* variance in measured correlation */ double defolayconst; /* layconst for deformation mode */ /* algorithm parameters */ signed char eval; /* evaluate unwrapped input file if TRUE */ signed char unwrapped; /* input file is unwrapped if TRUE */ signed char regrowconncomps;/* grow connected components and exit if TRUE */ signed char initonly; /* exit after initialization if TRUE */ signed char initmethod; /* MST or MCF initialization */ signed char costmode; /* statistical cost mode */ signed char dumpall; /* dump intermediate files */ signed char verbose; /* print verbose output */ signed char amplitude; /* intensity data is amplitude, not power */ signed char havemagnitude; /* flag to create correlation from other inputs */ signed char flipphasesign; /* flag to flip phase and flow array signs */ long initmaxflow; /* maximum flow for initialization */ long arcmaxflowconst; /* units of flow past dzmax to use for initmaxflow */ long maxflow; /* max flow for tree solve looping */ long krowei, kcolei; /* size of boxcar averaging window for mean ei */ long kpardpsi; /* length of boxcar for mean wrapped gradient */ long kperpdpsi; /* width of boxcar for mean wrapped gradient */ double threshold; /* thershold for numerical dzrcrit calculation */ double initdzr; /* initial dzr for numerical dzrcrit calc. (m) */ double initdzstep; /* initial stepsize for spatial decor slope calc. */ double maxcost; /* min and max float values for cost arrays */ double costscale; /* scale factor for discretizing to integer costs */ double costscaleambight;/* ambiguity height for auto costs caling */ double dnomincangle; /* step size for range-varying param lookup table */ long srcrow,srccol; /* source node location */ double p; /* power for Lp-norm solution (less than 0 is MAP) */ long nshortcycle; /* number of points for one cycle in short int dz */ double maxnewnodeconst; /* number of nodes added to tree on each iteration */ long maxnflowcycles; /* max number of cycles to consider nflow done */ double maxcyclefraction;/* ratio of max cycles to pixels */ long sourcemode; /* 0, -1, or 1, determines how tree root is chosen */ long cs2scalefactor; /* scale factor for cs2 initialization (eg, 3-30) */ /* tiling parameters */ long ntilerow; /* number of tiles in azimuth */ long ntilecol; /* number of tiles in range */ long rowovrlp; /* pixels of overlap between row tiles */ long colovrlp; /* pixels of overlap between column tiles */ long piecefirstrow; /* first row (indexed from 1) for piece mode */ long piecefirstcol; /* first column (indexed from 1) for piece mode */ long piecenrow; /* number of rows for piece mode */ long piecencol; /* number of rows for piece mode */ long tilecostthresh; /* maximum cost within single reliable tile region */ long minregionsize; /* minimum number of pixels in a region */ long nthreads; /* number of parallel processes to run */ long scndryarcflowmax; /* max flow increment for which to keep cost data */ double tileedgeweight; /* weight applied to tile-edge secondary arc costs */ signed char assembleonly; /* flag for assemble-only (no unwrap) mode */ signed char rmtmptile; /* flag for removing temporary tile files */ char tiledir[MAXSTRLEN];/* directory for temporary tile files */ /* connected component parameters */ double minconncompfrac; /* min fraction of pixels in connected component */ long conncompthresh; /* cost threshold for connected component */ long maxncomps; /* max number of connected components */ }paramT; /* input file name data structure */ typedef struct infileST{ char infile[MAXSTRLEN]; /* input interferogram */ char magfile[MAXSTRLEN]; /* interferogram magnitude (optional) */ char ampfile[MAXSTRLEN]; /* image amplitude or power file */ char ampfile2[MAXSTRLEN]; /* second amplitude or power file */ char weightfile[MAXSTRLEN]; /* arc weights */ char corrfile[MAXSTRLEN]; /* correlation file */ char estfile[MAXSTRLEN]; /* unwrapped estimate */ char costinfile[MAXSTRLEN]; /* file from which cost data is read */ signed char infileformat; /* input file format */ signed char unwrappedinfileformat; /* input file format if unwrapped */ signed char magfileformat; /* interferogram magnitude file format */ signed char corrfileformat; /* correlation file format */ signed char weightfileformat; /* weight file format */ signed char ampfileformat; /* amplitude file format */ signed char estfileformat; /* unwrapped-estimate file format */ }infileT; /* output file name data structure */ typedef struct outfileST{ char outfile[MAXSTRLEN]; /* unwrapped output */ char initfile[MAXSTRLEN]; /* unwrapped initialization */ char flowfile[MAXSTRLEN]; /* flows of unwrapped solution */ char eifile[MAXSTRLEN]; /* despckled, normalized intensity */ char rowcostfile[MAXSTRLEN]; /* statistical azimuth cost array */ char colcostfile[MAXSTRLEN]; /* statistical range cost array */ char mstrowcostfile[MAXSTRLEN]; /* scalar initialization azimuth costs */ char mstcolcostfile[MAXSTRLEN]; /* scalar initialization range costs */ char mstcostsfile[MAXSTRLEN]; /* scalar initialization costs (all) */ char corrdumpfile[MAXSTRLEN]; /* correlation coefficient magnitude */ char rawcorrdumpfile[MAXSTRLEN]; /* correlation coefficient magnitude */ char conncompfile[MAXSTRLEN]; /* connected component map or mask */ char costoutfile[MAXSTRLEN]; /* file to which cost data is written */ char logfile[MAXSTRLEN]; /* file to which parmeters are logged */ signed char outfileformat; /* output file format */ }outfileT; /* tile parameter data structure */ typedef struct tileparamST{ long firstcol; /* first column of tile to process (index from 0) */ long ncol; /* number of columns in tile to process */ long firstrow; /* first row of tile to process (index from 0) */ long nrow; /* number of rows in tile to process */ }tileparamT; /* type for total cost of solution (may overflow long) */ typedef double totalcostT; /* typedef long long totalcostT; */ #define INITTOTALCOST LARGEFLOAT /* #define INITTOTALCOST LARGELONGLONG */ /***********************/ /* function prototypes */ /***********************/ /* functions in snaphu.c */ void Unwrap(infileT *infiles, outfileT *outfiles, paramT *params, long linelen, long nlines); void UnwrapTile(infileT *infiles, outfileT *outfiles, paramT *params, tileparamT *tileparams, long nlines, long linelen); /* functions in snaphu_tile.c */ void SetupTile(long nlines, long linelen, paramT *params, tileparamT *tileparams, outfileT *outfiles, outfileT *tileoutfiles, long tilerow, long tilecol); void GrowRegions(void **costs, short **flows, long nrow, long ncol, incrcostT **incrcosts, outfileT *outfiles, paramT *params); void GrowConnCompsMask(void **costs, short **flows, long nrow, long ncol, incrcostT **incrcosts, outfileT *outfiles, paramT *params); long ThickenCosts(incrcostT **incrcosts, long nrow, long ncol); nodeT *RegionsNeighborNode(nodeT *node1, long *arcnumptr, nodeT **nodes, long *arcrowptr, long *arccolptr, long nrow, long ncol); void ClearBuckets(bucketT *bkts); void MergeRegions(nodeT **nodes, nodeT *source, long *regionsizes, long closestregion, long nrow, long ncol); void RenumberRegion(nodeT **nodes, nodeT *source, long newnum, long nrow, long ncol); void AssembleTiles(outfileT *outfiles, paramT *params, long nlines, long linelen); void ReadNextRegion(long tilerow, long tilecol, long nlines, long linelen, outfileT *outfiles, paramT *params, short ***nextregionsptr, float ***nextunwphaseptr, void ***nextcostsptr, long *nextnrowptr, long *nextncolptr); void SetTileReadParams(tileparamT *tileparams, long nexttilenlines, long nexttilelinelen, long tilerow, long tilecol, long nlines, long linelen, paramT *params); void ReadEdgesAboveAndBelow(long tilerow, long tilecol, long nlines, long linelen, paramT *params, outfileT *outfiles, short *regionsabove, short *regionsbelow, float *unwphaseabove, float *unwphasebelow, void *costsabove, void *costsbelow); void TraceRegions(short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, float **unwphase, float **nextunwphase, float **lastunwphase, float *unwphaseabove, float *unwphasebelow, void **costs, void **nextcosts, void **lastcosts, void *costsabove, void *costsbelow, long prevnrow, long prevncol, long tilerow, long tilecol, long nrow, long ncol, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, long ***scndrycosts, short *nscndrynodes, short *nscndryarcs, long *totarclens, short **bulkoffsets, paramT *params); long FindNumPathsOut(nodeT *from, paramT *params, long tilerow, long tilecol, long nnrow, long nncol, short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, long prevncol); void RegionTraceCheckNeighbors(nodeT *from, nodeT **nextnodeptr, nodeT **primarynodes, short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, long tilerow, long tilecol, long nnrow, long nncol, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, long *nnewnodesptr, long *nnewarcsptr, long flowmax, long nrow, long ncol, long prevnrow, long prevncol, paramT *params, void **costs, void **rightedgecosts, void **loweredgecosts, void **leftedgecosts, void **upperedgecosts, short **flows, short **rightedgeflows, short **loweredgeflows, short **leftedgeflows, short **upperedgeflows, long ***scndrycosts, nodeT ***updatednontilenodesptr, long *nupdatednontilenodesptr, long *updatednontilenodesizeptr, short **inontilenodeoutarcptr, long *totarclenptr); void SetUpperEdge(long ncol, long tilerow, long tilecol, void **voidcosts, void *voidcostsabove, float **unwphase, float *unwphaseabove, void **voidupperedgecosts, short **upperedgeflows, paramT *params, short **bulkoffsets); void SetLowerEdge(long nrow, long ncol, long tilerow, long tilecol, void **voidcosts, void *voidcostsbelow, float **unwphase, float *unwphasebelow, void **voidloweredgecosts, short **loweredgeflows, paramT *params, short **bulkoffsets); void SetLeftEdge(long nrow, long prevncol, long tilerow, long tilecol, void **voidcosts, void **voidlastcosts, float **unwphase, float **lastunwphase, void **voidleftedgecosts, short **leftedgeflows, paramT *params, short **bulkoffsets); void SetRightEdge(long nrow, long ncol, long tilerow, long tilecol, void **voidcosts, void **voidnextcosts, float **unwphase, float **nextunwphase, void **voidrightedgecosts, short **rightedgeflows, paramT *params, short **bulkoffsets); void TraceSecondaryArc(nodeT *primaryhead, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, long ***scndrycosts, long *nnewnodesptr, long *nnewarcsptr, long tilerow, long tilecol, long flowmax, long nrow, long ncol, long prevnrow, long prevncol, paramT *params, void **tilecosts, void **rightedgecosts, void **loweredgecosts, void **leftedgecosts, void **upperedgecosts, short **tileflows, short **rightedgeflows, short **loweredgeflows, short **leftedgeflows, short **upperedgeflows, nodeT ***updatednontilenodesptr, long *nupdatednontilenodesptr, long *updatednontilenodesizeptr, short **inontilenodeoutarcptr, long *totarclenptr); nodeT *FindScndryNode(nodeT **scndrynodes, nodesuppT **nodesupp, long tilenum, long primaryrow, long primarycol); void IntegrateSecondaryFlows(long linelen, long nlines, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, short *nscndryarcs, short **scndryflows, short **bulkoffsets, outfileT *outfiles, paramT *params); void ParseSecondaryFlows(long tilenum, short *nscndryarcs, short **tileflows, short **regions, short **scndryflows, nodesuppT **nodesupp, scndryarcT **scndryarcs, long nrow, long ncol, long ntilerow, long ntilecol, paramT *params); /* functions in snaphu_solver.c */ long TreeSolve(nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, nodeT *source, candidateT **candidatelistptr, candidateT **candidatebagptr, long *candidatelistsizeptr, long *candidatebagsizeptr, bucketT *bkts, short **flows, void **costs, incrcostT **incrcosts, nodeT ***apexes, signed char **iscandidate, long ngroundarcs, long nflow, float **mag, float **wrappedphase, char *outfile, long nnoderow, short *nnodesperrow, long narcrow, short *narcsperrow, long nrow, long ncol, outfileT *outfiles, paramT *params); void AddNewNode(nodeT *from, nodeT *to, long arcdir, bucketT *bkts, long nflow, incrcostT **incrcosts, long arcrow, long arccol, paramT *params); void CheckArcReducedCost(nodeT *from, nodeT *to, nodeT *apex, long arcrow, long arccol, long arcdir, long nflow, nodeT **nodes, nodeT *ground, candidateT **candidatebagptr, long *candidatebagnextptr, long *candidatebagsizeptr, incrcostT **incrcosts, signed char **iscandidate, paramT *params); long InitTree(nodeT *source, nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, long ngroundarcs, bucketT *bkts, long nflow, incrcostT **incrcosts, nodeT ***apexes, signed char **iscandidate, long nnoderow, short *nnodesperrow, long narcrow, short *narcsperrow, long nrow, long ncol, paramT *params); nodeT *FindApex(nodeT *from, nodeT *to); int CandidateCompare(const void *c1, const void *c2); nodeT *NeighborNodeGrid(nodeT *node1, long arcnum, long *upperarcnumptr, nodeT **nodes, nodeT *ground, long *arcrowptr, long *arccolptr, long *arcdirptr, long nrow, long ncol, nodesuppT **nodesupp); nodeT *NeighborNodeNonGrid(nodeT *node1, long arcnum, long *upperarcnumptr, nodeT **nodes, nodeT *ground, long *arcrowptr, long *arccolptr, long *arcdirptr, long nrow, long ncol, nodesuppT **nodesupp); void GetArcGrid(nodeT *from, nodeT *to, long *arcrow, long *arccol, long *arcdir, long nrow, long ncol, nodesuppT **nodesupp); void GetArcNonGrid(nodeT *from, nodeT *to, long *arcrow, long *arccol, long *arcdir, long nrow, long ncol, nodesuppT **nodesupp); void NonDegenUpdateChildren(nodeT *startnode, nodeT *lastnode, nodeT *nextonpath, long dgroup, long ngroundarcs, long nflow, nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, nodeT ***apexes, incrcostT **incrcosts, long nrow, long ncol, paramT *params); void InitNetwork(short **flows, long *ngroundarcsptr, long *ncycleptr, long *nflowdoneptr, long *mostflowptr, long *nflowptr, long *candidatebagsizeptr, candidateT **candidatebagptr, long *candidatelistsizeptr, candidateT **candidatelistptr, signed char ***iscandidateptr, nodeT ****apexesptr, bucketT **bktsptr, long *iincrcostfileptr, incrcostT ***incrcostsptr, nodeT ***nodesptr, nodeT *ground, long *nnoderowptr, short **nnodesperrowptr, long *narcrowptr, short **narcsperrowptr, long nrow, long ncol, signed char *notfirstloopptr, totalcostT *totalcostptr, paramT *params); void InitNodeNums(long nrow, long ncol, nodeT **nodes, nodeT *ground); void InitBuckets(bucketT *bkts, nodeT *source, long nbuckets); void InitNodes(long nrow, long ncol, nodeT **nodes, nodeT *ground); void BucketInsert(nodeT *node, long ind, bucketT *bkts); void BucketRemove(nodeT *node, long ind, bucketT *bkts); nodeT *ClosestNode(bucketT *bkts); nodeT *ClosestNodeCircular(bucketT *bkts); nodeT *MinOutCostNode(bucketT *bkts); nodeT *SelectSource(nodeT **nodes, nodeT *ground, long nflow, short **flows, long ngroundarcs, long nrow, long ncol, paramT *params); short GetCost(incrcostT **incrcosts, long arcrow, long arccol, long arcdir); long ReCalcCost(void **costs, incrcostT **incrcosts, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params); void SetupIncrFlowCosts(void **costs, incrcostT **incrcosts, short **flows, long nflow, long nrow, long narcrow, short *narcsperrow, paramT *params); totalcostT EvaluateTotalCost(void **costs, short **flows, long nrow, long ncol, short *narcsperrow,paramT *params); void MSTInitFlows(float **wrappedphase, short ***flowsptr, short **mstcosts, long nrow, long ncol, nodeT ***nodes, nodeT *ground, long maxflow); void SolveMST(nodeT **nodes, nodeT *source, nodeT *ground, bucketT *bkts, short **mstcosts, signed char **residue, signed char **arcstatus, long nrow, long ncol); long DischargeTree(nodeT *source, short **mstcosts, short **flows, signed char **residue, signed char **arcstatus, nodeT **nodes, nodeT *ground, long nrow, long ncol); signed char ClipFlow(signed char **residue, short **flows, short **mstcosts, long nrow, long ncol, long maxflow); void MCFInitFlows(float **wrappedphase, short ***flowsptr, short **mstcosts, long nrow, long ncol, long cs2scalefactor); /* functions in snaphu_cost.c */ void BuildCostArrays(void ***costsptr, short ***mstcostsptr, float **mag, float **wrappedphase, float **unwrappedest, long linelen, long nlines, long nrow, long ncol, paramT *params, tileparamT *tileparams, infileT *infiles, outfileT *outfiles); void **BuildStatCostsTopo(float **wrappedphase, float **mag, float **unwrappedest, float **pwr, float **corr, short **rowweight, short **colweight, long nrow, long ncol, tileparamT *tileparams, outfileT *outfiles, paramT *params); void **BuildStatCostsDefo(float **wrappedphase, float **mag, float **unwrappedest, float **corr, short **rowweight, short **colweight, long nrow, long ncol, tileparamT *tileparams, outfileT *outfiles, paramT *params); void **BuildStatCostsSmooth(float **wrappedphase, float **mag, float **unwrappedest, float **corr, short **rowweight, short **colweight, long nrow, long ncol, tileparamT *tileparams, outfileT *outfiles, paramT *params); void GetIntensityAndCorrelation(float **mag, float **wrappedphase, float ***pwrptr, float ***corrptr, infileT *infiles, long linelen, long nlines, long nrow, long ncol, outfileT *outfiles, paramT *params, tileparamT *tileparams); void RemoveMean(float **ei, long nrow, long ncol, long krowei, long kcolei); float *BuildDZRCritLookupTable(double *nominc0ptr, double *dnomincptr, long *tablesizeptr, tileparamT *tileparams, paramT *params); double SolveDZRCrit(double sinnomincangle, double cosnomincangle, paramT *params, double threshold); void SolveEIModelParams(double *slope1ptr, double *slope2ptr, double *const1ptr, double *const2ptr, double dzrcrit, double dzr0, double sinnomincangle, double cosnomincangle, paramT *params); double EIofDZR(double dzr, double sinnomincangle, double cosnomincangle, paramT *params); float **BuildDZRhoMaxLookupTable(double nominc0, double dnominc, long nominctablesize, double rhomin, double drho, long nrho, paramT *params); double CalcDZRhoMax(double rho, double nominc, paramT *params, double threshold); void CalcCostTopo(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostDefo(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostSmooth(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostL0(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostL1(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostL2(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostLP(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostNonGrid(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); long EvalCostTopo(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostDefo(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostSmooth(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostL0(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostL1(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostL2(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostLP(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostNonGrid(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); void CalcInitMaxFlow(paramT *params, void **costs, long nrow, long ncol); /* functions in snaphu_util.c */ int IsTrue(char *str); int IsFalse(char *str); signed char SetBooleanSignedChar(signed char *boolptr, char *str); double ModDiff(double f1, double f2); void WrapPhase(float **wrappedphase, long nrow, long ncol); void CalcWrappedRangeDiffs(float **dpsi, float **avgdpsi, float **wrappedphase, long kperpdpsi, long kpardpsi, long nrow, long ncol); void CalcWrappedAzDiffs(float **dpsi, float **avgdpsi, float **wrappedphase, long kperpdpsi, long kpardpsi, long nrow, long ncol); void CycleResidue(float **phase, signed char **residue, int nrow, int ncol); void CalcFlow(float **phase, short ***flowsptr, long nrow, long ncol); void IntegratePhase(float **psi, float **phi, short **flows, long nrow, long ncol); float **ExtractFlow(float **unwrappedphase, short ***flowsptr, long nrow, long ncol); void FlipPhaseArraySign(float **arr, paramT *params, long nrow, long ncol); void FlipFlowArraySign(short **arr, paramT *params, long nrow, long ncol); void **Get2DMem(int nrow, int ncol, int psize, size_t size); void **Get2DRowColMem(long nrow, long ncol, int psize, size_t size); void **Get2DRowColZeroMem(long nrow, long ncol, int psize, size_t size); void *MAlloc(size_t size); void *CAlloc(size_t nitems, size_t size); void *ReAlloc(void *ptr, size_t size); void Free2DArray(void **array, unsigned int nrow); void Set2DShortArray(short **arr, long nrow, long ncol, long value); signed char ValidDataArray(float **arr, long nrow, long ncol); signed char IsFinite(double d); long LRound(double a); long Short2DRowColAbsMax(short **arr, long nrow, long ncol); float LinInterp1D(float *arr, double index, long nelem); float LinInterp2D(float **arr, double rowind, double colind , long nrow, long ncol); void Despeckle(float **mag, float ***ei, long nrow, long ncol); float **MirrorPad(float **array1, long nrow, long ncol, long krow, long kcol); void BoxCarAvg(float **avgarr, float **padarr, long nrow, long ncol, long krow, long kcol); char *StrNCopy(char *dest, const char *src, size_t n); void FlattenWrappedPhase(float **wrappedphase, float **unwrappedest, long nrow, long ncol); void Add2DFloatArrays(float **arr1, float **arr2, long nrow, long ncol); int StringToDouble(char *str, double *d); int StringToLong(char *str, long *l); void CatchSignals(void (*SigHandler)(int)); void SetDump(int signum); void KillChildrenExit(int signum); void SignalExit(int signum); void StartTimers(time_t *tstart, double *cputimestart); void DisplayElapsedTime(time_t tstart, double cputimestart); int LongCompare(const void *c1, const void *c2); /* functions in snaphu_io.c */ void SetDefaults(infileT *infiles, outfileT *outfiles, paramT *params); void ProcessArgs(int argc, char *argv[], infileT *infiles, outfileT *outfiles, long *ncolptr, paramT *params); void CheckParams(infileT *infiles, outfileT *outfiles, long linelen, long nlines, paramT *params); void ReadConfigFile(char *conffile, infileT *infiles, outfileT *outfiles, long *ncolptr, paramT *params); void WriteConfigLogFile(int argc, char *argv[], infileT *infiles, outfileT *outfiles, long linelen, paramT *params); void LogStringParam(FILE *fp, char *key, char *value); void LogBoolParam(FILE *fp, char *key, signed char boolvalue); void LogFileFormat(FILE *fp, char *key, signed char fileformat); long GetNLines(infileT *infiles, long linelen); void WriteOutputFile(float **mag, float **unwrappedphase, char *outfile, outfileT *outfiles, long nrow, long ncol); FILE *OpenOutputFile(char *outfile, char *realoutfile); void WriteAltLineFile(float **mag, float **phase, char *outfile, long nrow, long ncol); void WriteAltSampFile(float **arr1, float **arr2, char *outfile, long nrow, long ncol); void Write2DArray(void **array, char *filename, long nrow, long ncol, size_t size); void Write2DRowColArray(void **array, char *filename, long nrow, long ncol, size_t size); void ReadInputFile(infileT *infiles, float ***magptr, float ***wrappedphaseptr, short ***flowsptr, long linelen, long nlines, paramT *params, tileparamT *tileparams); void ReadMagnitude(float **mag, infileT *infiles, long linelen, long nlines, tileparamT *tileparams); void ReadUnwrappedEstimateFile(float ***unwrappedestptr, infileT *infiles, long linelen, long nlines, paramT *params, tileparamT *tileparams); void ReadWeightsFile(short ***weightsptr,char *weightfile, long linelen, long nlines, tileparamT *tileparams); void ReadIntensity(float ***pwrptr, float ***pwr1ptr, float ***pwr2ptr, infileT *infiles, long linelen, long nlines, paramT *params, tileparamT *tileparams); void ReadCorrelation(float ***corrptr, infileT *infiles, long linelen, long nlines, tileparamT *tileparams); void ReadAltLineFile(float ***mag, float ***phase, char *alfile, long linelen, long nlines, tileparamT *tileparams); void ReadAltLineFilePhase(float ***phase, char *alfile, long linelen, long nlines, tileparamT *tileparams); void ReadComplexFile(float ***mag, float ***phase, char *rifile, long linelen, long nlines, tileparamT *tileparams); void Read2DArray(void ***arr, char *infile, long linelen, long nlines, tileparamT *tileparams, size_t elptrsize, size_t elsize); void ReadAltSampFile(float ***arr1, float ***arr2, char *infile, long linelen, long nlines, tileparamT *tileparams); void Read2DRowColFile(void ***arr, char *filename, long linelen, long nlines, tileparamT *tileparams, size_t size); void Read2DRowColFileRows(void ***arr, char *filename, long linelen, long nlines, tileparamT *tileparams, size_t size); void SetDumpAll(outfileT *outfiles, paramT *params); void SetStreamPointers(void); void SetVerboseOut(paramT *params); void ChildResetStreamPointers(pid_t pid, long tilerow, long tilecol, paramT *params); void DumpIncrCostFiles(incrcostT **incrcosts, long iincrcostfile, long nflow, long nrow, long ncol); void MakeTileDir(paramT *params, outfileT *outfiles); void ParseFilename(char *filename, char *path, char *basename); /* functions in snaphu_cs2.c */ void SolveCS2(signed char **residue, short **mstcosts, long nrow, long ncol, long cs2scalefactor, short ***flowsptr); /*******************************************/ /* global (external) variable declarations */ /*******************************************/ /* flags used for signal handling */ extern char dumpresults_global; extern char requestedstop_global; /* ouput stream pointers */ /* sp0=error messages, sp1=status output, sp2=verbose, sp3=verbose counter */ extern FILE *sp0, *sp1, *sp2, *sp3; /* node pointer for marking arc not on tree in apex array */ /* this should be treat as a constant */ extern nodeT NONTREEARC[1]; /* pointers to functions which calculate arc costs */ extern void (*CalcCost)(); extern long (*EvalCost)(); /* pointers to functions for tailoring network solver to specific topologies */ extern nodeT *(*NeighborNode)(); extern void (*GetArc)(); /* end of snaphu.h */ GMTSAR_V5.7/snaphu/src/snaphu_cs2parse.c000644 015705 000000 00000035301 13505462014 021074 0ustar00sandwellwheel000000 000000 /************************************************************************* This code is derived from cs2 v3.7 Written by Andrew V. Goldberg and Boris Cherkassky Modifications for use in snaphu by Curtis W. Chen Parser for cs2 minimum cost flow solver. Originally written to read DIMACS format (text) input files. Modified to parse passed data from snaphu. This file is included with a #include from snaphu_cs2.c. The cs2 code is used here with permission for strictly noncommerical use. The original cs2 source code can be downloaded from http://www.igsystems.com/cs2 The original cs2 copyright is stated as follows: COPYRIGHT C 1995 IG Systems, Inc. Permission to use for evaluation purposes is granted provided that proper acknowledgments are given. For a commercial licence, contact igsys@eclipse.net. This software comes with NO WARRANTY, expressed or implied. By way of example, but not limitation, we make no representations of warranties of merchantability or fitness for any particular purpose or that the use of the software components or documentation will not infringe any patents, copyrights, trademarks, or other rights. Copyright 2002 Board of Trustees, Leland Stanford Jr. University *************************************************************************/ int cs2mcfparse(residue, rowcost, colcost, nNrow, nNcol, n_ad, m_ad, nodes_ad, arcs_ad, node_min_ad, m_c_ad, cap_ad ) /* parameters passed to set up network */ signed char **residue; /* 2D array of residues */ short **rowcost; /* 2D array of row arc costs */ short **colcost; /* 2D array of col arc costs */ long nNrow; /* number of nodes per row */ long nNcol; /* number of nodes per column */ /* these parameters are output */ long *n_ad; /* address of the number of nodes */ long *m_ad; /* address of the number of arcs */ node **nodes_ad; /* address of the array of nodes */ arc **arcs_ad; /* address of the array of arcs */ long *node_min_ad; /* address of the minimal node */ double *m_c_ad; /* maximal arc cost */ short **cap_ad; /* array of capacities (changed to short) */ { #define ABS( x ) ( (x) >= 0 ) ? (x) : -(x) /* variables added for unwrapping parse */ unsigned int row, col, dir; unsigned long narcs, nnodes, nodectr, arcctr, nresidues; long cumsupply, temp; long inf_cap = 0; long n, /* internal number of nodes */ node_min, /* minimal no of node */ node_max, /* maximal no of nodes */ *arc_first, /* internal array for holding - node degree - position of the first outgoing arc */ *arc_tail, /* internal array: tails of the arcs */ /* temporary variables carrying no of nodes */ head, tail, i; long m, /* internal number of arcs */ /* temporary variables carrying no of arcs */ last, arc_num, arc_new_num; node *nodes, /* pointers to the node structure */ *head_p, *ndp, *in, *jn; arc *arcs, /* pointers to the arc structure */ *arc_current, *arc_new, *arc_tmp; long excess, /* supply/demand of the node */ low, /* lowest flow through the arc */ acap; /* capacity */ long cost; /* arc cost */ double dcost, /* arc cost in double mode */ m_c; /* maximal arc cost */ short *cap; /* array of capacities (changed to short) */ double total_p, /* total supply */ total_n, /* total demand */ cap_out, /* sum of outgoing capacities */ cap_in; /* sum of incoming capacities */ long no_lines=0, /* no of current input line */ /* no_plines=0, */ /* no of problem-lines */ /* no_nlines=0, */ /* no of node lines */ no_alines=0, /* no of arc-lines */ pos_current=0; /* 2*no_alines */ int /* k, */ /* temporary */ err_no; /* no of detected error */ /* -------------- error numbers & error messages ---------------- */ #define EN1 0 #define EN2 1 #define EN3 2 #define EN4 3 #define EN6 4 #define EN10 5 #define EN7 6 #define EN8 7 #define EN9 8 #define EN11 9 #define EN12 10 #define EN13 11 #define EN14 12 #define EN16 13 #define EN15 14 #define EN17 15 #define EN18 16 #define EN21 17 #define EN19 18 #define EN20 19 #define EN22 20 static char *err_message[] = { /* 0*/ "more than one problem line", /* 1*/ "wrong number of parameters in the problem line", /* 2*/ "it is not a Min-cost problem line", /* 3*/ "bad value of a parameter in the problem line", /* 4*/ "can't obtain enough memory to solve this problem", /* 5*/ "", /* 6*/ "can't read problem name", /* 7*/ "problem description must be before node description", /* 8*/ "wrong capacity bounds", /* 9*/ "wrong number of parameters in the node line", /*10*/ "wrong value of parameters in the node line", /*11*/ "unbalanced problem", /*12*/ "node descriptions must be before arc descriptions", /*13*/ "too many arcs in the input", /*14*/ "wrong number of parameters in the arc line", /*15*/ "wrong value of parameters in the arc line", /*16*/ "unknown line type in the input", /*17*/ "read error", /*18*/ "not enough arcs in the input", /*19*/ "warning: capacities too big - excess overflow possible", /*20*/ "can't read anything from the input file", /*21*/ "warning: infinite capacity replaced by BIGGEST_FLOW" }; /* --------------------------------------------------------------- */ /* set up */ nnodes=nNrow*nNcol+1; /* add one for ground node */ narcs=2*((nNrow+1)*nNcol+nNrow*(nNcol+1)); /* 2x for two directional arcs */ cumsupply=0; nresidues=0; /* get memory (formerly case 'p' in DIMACS file read) */ fprintf(sp2,"Setting up data structures for cs2 MCF solver\n"); n=nnodes; m=narcs; if ( n <= 0 || m <= 0 ) /*wrong value of no of arcs or nodes*/ { err_no = EN4; goto error; } /* allocating memory for 'nodes', 'arcs' and internal arrays */ nodes = (node*) CAlloc ( n+2, sizeof(node) ); arcs = (arc*) CAlloc ( 2*m+1, sizeof(arc) ); cap = (short*) CAlloc ( 2*m, sizeof(short) ); /* changed to short */ arc_tail = (long*) CAlloc ( 2*m, sizeof(long) ); arc_first= (long*) CAlloc ( n+2, sizeof(long) ); /* arc_first [ 0 .. n+1 ] = 0 - initialized by calloc */ for ( in = nodes; in <= nodes + n; in ++ ) in -> excess = 0; if ( nodes == NULL || arcs == NULL || arc_first == NULL || arc_tail == NULL ) /* memory is not allocated */ { err_no = EN6; goto error; } /* setting pointer to the first arc */ arc_current = arcs; node_max = 0; node_min = n; m_c = 0; total_p = total_n = 0; for ( ndp = nodes; ndp < nodes + n; ndp ++ ) ndp -> excess = 0; /* end of former case 'p' */ /* load supply/demand info into arrays (case 'n' in former loop) */ for(col=0; col excess = excess; if ( excess > 0 ) total_p += (double)excess; if ( excess < 0 ) total_n -= (double)excess; nresidues++; cumsupply+=residue[row][col]; } } } /* give ground node excess of -cumsupply */ ( nodes + nnodes ) -> excess = -cumsupply; if (cumsupply < 0) total_p -= (double)cumsupply; if (cumsupply > 0) total_n += (double)cumsupply; /* load arc info into arrays (case 'a' in former loop) */ low=0; acap=ARCUBOUND; /* horizontal (row) direction arcs first */ for(arcctr=1;arcctr<=2*nNrow*nNcol+nNrow+nNcol;arcctr++){ if(arcctr<=nNrow*(nNcol+1)){ /* row (horizontal) arcs first */ nodectr=arcctr; if(nodectr<=nNrow*nNcol){ tail=nodectr; }else{ tail=nnodes; } if(nodectr<=nNrow){ head=nnodes; }else{ head=nodectr-nNrow; } cost=rowcost[((nodectr-1) % nNrow)][(int )((nodectr-1)/nNrow)]; }else{ /* column (vertical) arcs */ nodectr=arcctr-nNrow*(nNcol+1); if(nodectr % (nNrow+1)==0){ tail=nnodes; }else{ tail=(int )(nodectr-ceil(nodectr/(nNrow+1.0))+1); } if(nodectr % (nNrow+1)==1){ head=nnodes; }else{ head=(int )(nodectr-ceil(nodectr/(nNrow+1.0))); } cost=colcost[((nodectr-1) % (nNrow+1))][(int )((nodectr-1)/(nNrow+1))]; } if ( tail < 0 || tail > n || head < 0 || head > n ) /* wrong value of nodes */ { err_no = EN17; goto error; } if ( acap < 0 ) { acap = BIGGEST_FLOW; if (!inf_cap) { inf_cap = 1; fprintf ( sp0, "\ncs2 solver: %s\n", err_message[21] ); } } if ( low < 0 || low > acap ) { err_no = EN9; goto error; } for(dir=0;dir<=1;dir++){ if(dir){ /* switch head and tail and loop for two directional arcs */ temp=tail; tail=head; head=temp; } /* no of arcs incident to node i is placed in arc_first[i+1] */ arc_first[tail + 1] ++; arc_first[head + 1] ++; in = nodes + tail; jn = nodes + head; dcost = (double)cost; /* storing information about the arc */ arc_tail[pos_current] = tail; arc_tail[pos_current+1] = head; arc_current -> head = jn; arc_current -> r_cap = acap - low; cap[pos_current] = acap; arc_current -> cost = dcost; arc_current -> sister = arc_current + 1; ( arc_current + 1 ) -> head = nodes + tail; ( arc_current + 1 ) -> r_cap = 0; cap[pos_current+1] = 0; ( arc_current + 1 ) -> cost = -dcost; ( arc_current + 1 ) -> sister = arc_current; in -> excess -= low; jn -> excess += low; /* searching for minimum and maximum node */ if ( head < node_min ) node_min = head; if ( tail < node_min ) node_min = tail; if ( head > node_max ) node_max = head; if ( tail > node_max ) node_max = tail; if ( dcost < 0 ) dcost = -dcost; if ( dcost > m_c && acap > 0 ) m_c = dcost; no_alines ++; arc_current += 2; pos_current += 2; }/* end of for loop over arc direction */ }/* end of for loop over arcss */ /* ----- all is red or error while reading ----- */ if ( ABS( total_p - total_n ) > 0.5 ) /* unbalanced problem */ { err_no = EN13; goto error; } /********** ordering arcs - linear time algorithm ***********/ /* first arc from the first node */ ( nodes + node_min ) -> first = arcs; /* before below loop arc_first[i+1] is the number of arcs outgoing from i; after this loop arc_first[i] is the position of the first outgoing from node i arcs after they would be ordered; this value is transformed to pointer and written to node.first[i] */ for ( i = node_min + 1; i <= node_max + 1; i ++ ) { arc_first[i] += arc_first[i-1]; ( nodes + i ) -> first = arcs + arc_first[i]; } for ( i = node_min; i < node_max; i ++ ) /* scanning all the nodes exept the last*/ { last = ( ( nodes + i + 1 ) -> first ) - arcs; /* arcs outgoing from i must be cited from position arc_first[i] to the position equal to initial value of arc_first[i+1]-1 */ for ( arc_num = arc_first[i]; arc_num < last; arc_num ++ ) { tail = arc_tail[arc_num]; while ( tail != i ) /* the arc no arc_num is not in place because arc cited here must go out from i; we'll put it to its place and continue this process until an arc in this position would go out from i */ { arc_new_num = arc_first[tail]; arc_current = arcs + arc_num; arc_new = arcs + arc_new_num; /* arc_current must be cited in the position arc_new swapping these arcs: */ head_p = arc_new -> head; arc_new -> head = arc_current -> head; arc_current -> head = head_p; acap = cap[arc_new_num]; cap[arc_new_num] = cap[arc_num]; cap[arc_num] = acap; acap = arc_new -> r_cap; arc_new -> r_cap = arc_current -> r_cap; arc_current -> r_cap = acap; dcost = arc_new -> cost; arc_new -> cost = arc_current -> cost; arc_current -> cost = dcost; if ( arc_new != arc_current -> sister ) { arc_tmp = arc_new -> sister; arc_new -> sister = arc_current -> sister; arc_current -> sister = arc_tmp; ( arc_current -> sister ) -> sister = arc_current; ( arc_new -> sister ) -> sister = arc_new; } arc_tail[arc_num] = arc_tail[arc_new_num]; arc_tail[arc_new_num] = tail; /* we increase arc_first[tail] */ arc_first[tail] ++ ; tail = arc_tail[arc_num]; } } /* all arcs outgoing from i are in place */ } /* ----------------------- arcs are ordered ------------------------- */ /*------------ testing network for possible excess overflow ---------*/ for ( ndp = nodes + node_min; ndp <= nodes + node_max; ndp ++ ) { cap_in = ( ndp -> excess ); cap_out = - ( ndp -> excess ); for ( arc_current = ndp -> first; arc_current != (ndp+1) -> first; arc_current ++ ) { arc_num = arc_current - arcs; if ( cap[arc_num] > 0 ) cap_out += cap[arc_num]; if ( cap[arc_num] == 0 ) cap_in += cap[( arc_current -> sister )-arcs]; } /* if (cap_in > BIGGEST_FLOW || cap_out > BIGGEST_FLOW) { fprintf ( sp0, "\ncs2 solver: %s\n", err_message[EN20] ); break; } */ } /* ----------- assigning output values ------------*/ *m_ad = m; *n_ad = node_max - node_min + 1; *node_min_ad = node_min; *nodes_ad = nodes + node_min; *arcs_ad = arcs; *m_c_ad = m_c; *cap_ad = cap; /* free internal memory */ free ( arc_first ); free ( arc_tail ); /* Thanks God! All is done! */ return (0); /* ---------------------------------- */ error: /* error found reading input */ fprintf ( sp0, "\ncs2 solver: line %ld of input - %s\n", no_lines, err_message[err_no] ); exit (ABNORMAL_EXIT); /* this is a needless return statement so the compiler doesn't complain */ return(1); } /* -------------------- end of parser -------------------*/ GMTSAR_V5.7/snaphu/config/snaphu.conf.brief000644 015705 000000 00000024414 13505462013 021543 0ustar00sandwellwheel000000 000000 # snaphu configuration file # # Lines with fewer than two fields and lines whose first non-whitespace # characters are not alphnumeric are ignored. For the remaining lines, # anything after the first two fields (delimited by whitespace) is # also ignored. Inputs are converted in the order they appear in the file; # if multiple assignments are made to the same parameter, the last one # given is the one used. Parameters in this file will be superseded by # parameters given on the command line after the -f flag specifying this # file. Multiple configuration files may be given on the command line. ############################################# # File input and output and runtime options # ############################################# # See section below for file format configuration options. # Input file name # INFILE snaphu.in # Input file line length # LINELENGTH 1000 # Output file name # OUTFILE snaphu.out # Amplitude file name(s) # AMPFILE snaphu.amp.in # Single file containing amplitude images # Correlation file name # CORRFILE snaphu.corr.in # Statistical-cost mode (TOPO, DEFO, SMOOTH, or NOSTATCOSTS) # STATCOSTMODE TOPO # Initialize-only mode (TRUE or FALSE) # INITONLY FALSE # Algorithm used for initialization of wrapped phase values. Possible # values are MST and MCF. # INITMETHOD MST # Verbose-output mode (TRUE or FALSE) # VERBOSE FALSE ################ # File formats # ################ # Valid data formats: # # COMPLEX_DATA: complex values: real, imag, real, imag # ALT_LINE_DATA: real values from different arrays, alternating by line # ALT_SAMPLE_DATA: real values from different arrays, alternating by sample # FLOAT_DATA: single array of floating-point data # # The ALT_SAMPLE_DATA format is sometimes known as .amp or sample- # interleaved format; the ALT_LINE_DATA format is sometimes known as # .hgt or line-interleaved format. For the ALT_LINE_DATA format, the # first array is always assumed to be the interferogram magnitude. All # formats assume single-precision (32-bit) floating-point data (real*4 # and complex*8 in Fortran) in the native byte order (big vs. little # endian) of the system. # Input file format # Allowable formats: # COMPLEX_DATA (default) # ALT_LINE_DATA (magnitude in channel 1, phase in radians in channel 2) # ALT_SAMPLE_DATA (magnitude in channel 1, phase in radians in channel 2) # FLOAT_DATA (phase in radians) # #INFILEFORMAT COMPLEX_DATA # Output file format # Allowable formats: # ALT_LINE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2; default) # ALT_SAMPLE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2) # FLOAT_DATA (unwrapped phase in radians) # #OUTFILEFORMAT ALT_LINE_DATA # Amplitude or power file format # Units should be consistent with interferogram. Allowable formats: # ALT_LINE_DATA (first image amplitude in channel 1, # second image amplitude in channel 2) # ALT_SAMPLE_DATA (first image amplitude in channel 1, # second image amplitude in channel 2; default) # FLOAT_DATA (square root of average power of two images) # #AMPFILEFORMAT ALT_SAMPLE_DATA # Correlation file format # Allowable formats: # ALT_LINE_DATA (channel 1 ignored; correlation values # between 0 and 1 in channel 2; default) # ALT_SAMPLE_DATA (channel 1 ignored; correlation values # between 0 and 1 in channel 2) # FLOAT_DATA (correlation values between 0 and 1) # #CORRFILEFORMAT ALT_LINE_DATA ############################### # SAR and geometry parameters # ############################### # Orbital radius (double, meters) or altitude (double, meters). The # radius should be the local radius if the orbit is not circular. The # altitude is just defined as the orbit radius minus the earth radius. # Only one of these two parameters should be given. ORBITRADIUS 7153000.0 #ALTITUDE 775000.0 # Local earth radius (double, meters). A spherical-earth model is # used. EARTHRADIUS 6378000.0 # The baseline parameters are not used in deformation mode, but they # are very important in topography mode. The parameter BASELINE # (double, meters) is the physical distance (always positive) between # the antenna phase centers. The along-track componenet of the # baseline is assumed to be zero. The parameter BASELINEANGLE_DEG # (double, degrees) is the angle between the antenna phase centers # with respect to the local horizontal. Suppose the interferogram is # s1*conj(s2). The baseline angle is defined as the angle of antenna2 # above the horizontal line extending from antenna1 towards the side # of the SAR look direction. Thus, if the baseline angle minus the # look angle is less than -pi/2 or greater than pi/2, the topographic # height increases with increasing elevation. The units of # BASELINEANGLE_RAD are radians. BASELINE 150.0 BASELINEANGLE_DEG 225.0 #BASELINEANGLE_RAD 3.92699 # If the BPERP parameter is given, the baseline angle is taken to be # equal to the look angle (mod pi) at midswath, and the length of the # baseline is set accordingly. Particular attention must be paid to # the sign of this parameter--it should be negative if increasing # phase implies increasing topographic height. #BPERP -150.0 # The transmit mode should be either REPEATPASS or PINGPONG if both # antennas transmitted and both received (REPEATPASS and PINGPONG have # the same effect); the transmit mode should be SINGLEANTENNATRANSMIT # if only one antenna was used to transmit while both antennas # received. In single-antenna-transmit mode, the baseline is # effectively halved. This parameter is ignored for cost modes other # than topography. TRANSMITMODE REPEATPASS # Slant range from platform to first range bin in input data file # (double, meters). Be sure to modify this parameter if the input # file is extracted from a larger scene. The parameter does not need # to be modified is snaphu is unwrapping only a subset of the input file. NEARRANGE 831000.0 # Slant range and azimuth pixel spacings of input interferogram after # any multilook averaging. This is not the same as the resolution. # (double, meters). DR 8.0 DA 20.0 # Single-look slant range and azimuth resolutions. This is not the # same as the pixel spacing. (double, meters). RANGERES 10.0 AZRES 6.0 # Wavelength (double, meters). LAMBDA 0.0565647 # Number of real (not necessarily independent) looks taken in range and # azimuth to form the input interferogram (long). NLOOKSRANGE 1 NLOOKSAZ 5 # Number of looks (assumed independent) from nonspatial averaging (long). NLOOKSOTHER 1 # Equivalent number of independent looks (double, dimensionless) that were # used to generate correlation file if one is specified. This parameter # is ignored if the correlation data are generated by the interferogram # and amplitude data. # # The equivalent number of independent looks is approximately equal to the # real number of looks divided by the product of range and azimuth # resolutions, and multiplied by the product of the single-look range and # azimuth pixel spacings. It is about 0.53 times the number of real looks # for ERS data processed without windowing. NCORRLOOKS 23.8 # Number of looks that should be taken in range and azimuth for estimating # the correlation coefficient from the interferogram and the amplitude # data. These numbers must be larger than NLOOKSRANGE and NLOOKSAZ. # The actual numbers used may be different since we prefer odd integer # multiples of NLOOKSRANGE and NLOOKSAZ (long). These numbers are ignored # if a separate correlation file is given as input. NCORRLOOKSRANGE 3 NCORRLOOKSAZ 15 ############################### # Scattering model parameters # ############################### # Threshold brightness (normalized) for layover height integration # (double, dimensionless) LAYMINEI 1.25 ################################## # Decorrelation model parameters # ################################## # Here, rho is the magnitude of the complex correlation coefficient # between the two observations forming the interferogram (0<=rho<=1) # See Zebker & Villasenor, 1992 # Default value to use uniformly for true, unbiased correlation if no # correlation file is specified and correlation cannot be generated # from the available data (double). DEFAULTCORR 0.01 # Factor applied to expected minimum measured (biased) correlation. # Values smaller than the threshold rhominfactor*rho0 are assumed to # come from zero statistical correlation because of estimator bias (double). # This is used only in topo mode; for defo mode, use DEFOTHRESHFACTOR. RHOMINFACTOR 1.3 ######################## # PDF model parameters # ######################## # Algorithm costs are based on the negative log pdf: # # cost = -log(f(phi | EI, rho)) # Factor applied to range layover probability density to get azimuth # layover probability density (double). AZDZFACTOR 0.99 # Ratio of layover probability density to peak probability density # for non-layover slopes expected (double). LAYCONST 0.9 ############################### # Deformation mode parameters # ############################### # Factor applied to range discontinuity probability density to get # corresponding value for azimuth (double). DEFOAZDZFACTOR 1.0 # Factor applied to rho0 to get threshold for whether or not phase # discontinuity is possible (double). rho0 is the expected, biased # correlation measure if true correlation is 0. DEFOTHRESHFACTOR 1.2 # Maximum phase discontinuity likely (double). Units are radians or cycles. # If abrupt phase discontinuities are not expected, this paramter can be # set to zero. DEFOMAX_CYCLE 1.2 #DEFOMAX_RAD 7.5398 # Ratio of phase discontinuity probability density to peak probability # density expected for discontinuity-possible pixel differences (double). # Value of 1 means zero cost for discontinuity, 0 means infinite cost. DEFOCONST 0.9 ######################## # Algorithm parameters # ######################## # Maximum flow increment (long) for solver. Not the same as maximum # flow possible. MAXFLOW 4 # Scaling constant factor applied to double precision costs to get # integer costs (double). COSTSCALE 100.0 # End of snaphu configuration file GMTSAR_V5.7/snaphu/config/snaphu.conf.full000644 015705 000000 00000055673 13505462013 021431 0ustar00sandwellwheel000000 000000 # snaphu configuration file # # Lines with fewer than two fields and lines whose first non-whitespace # characters are not alphnumeric are ignored. For the remaining lines, # anything after the first two fields (delimited by whitespace) is # also ignored. Inputs are converted in the order they appear in the file; # if multiple assignments are made to the same parameter, the last one # given is the one used. Parameters in this file will be superseded by # parameters given on the command line after the -f flag specifying this # file. Multiple configuration files may be given on the command line. ############################################# # File input and output and runtime options # ############################################# # See section below for file format configuration options. # Input file name # INFILE snaphu.in # Input file line length # LINELENGTH 1000 # Output file name # OUTFILE snaphu.out # Weight file name # WEIGHTFILE snaphu.weights.in # Amplitude file name(s) # AMPFILE snaphu.amp.in # Single file containing amplitude images # # AMPFILE1 snaphu.amp1.in # Pair of separate files for amplitude images # AMPFILE2 snaphu.amp2.in # Power file name(s) # PWRFILE snaphu.amp.in # Single file containing power images # # PWRFILE1 snaphu.amp1.in # Pair of separate files for power images # PWRFILE2 snaphu.amp2.in # Interferogram magnitude file # MAGFILE snaphu.mag.in # Correlation file name # CORRFILE snaphu.corr.in # Coarse unwrapped-phase estimate file name # ESTIMATEFILE snaphu.est.in # Input cost file (for statistical costs). If costs are read from this # file, many of the other parameters will be ignored (string). # COSTINFILE snaphu.costinfile # Output cost file to which statistical costs will be dumped (string). # Costs are not dumped if no file is given. # COSTOUTFILE snaphu.costoutfile # Text file to which runtime parameters will be logged. The format of # that file will be suitable so that it can also be used as a # configuration file. # LOGFILE snaph.logfile # Statistical-cost mode (TOPO, DEFO, SMOOTH, or NOSTATCOSTS) # STATCOSTMODE TOPO # Initialize-only mode (TRUE or FALSE) # INITONLY FALSE # Unwrapped-input mode (TRUE or FALSE) # UNWRAPPED_IN FALSE # Debug mode, dumps all intermediate arrays (TRUE or FALSE) # DEBUG FALSE # Algorithm used for initialization of wrapped phase values. Possible # values are MST and MCF. # INITMETHOD MST # Verbose-output mode (TRUE or FALSE) # VERBOSE FALSE ################ # File formats # ################ # Valid data formats: # # COMPLEX_DATA: complex values: real, imag, real, imag # ALT_LINE_DATA: real values from different arrays, alternating by line # ALT_SAMPLE_DATA: real values from different arrays, alternating by sample # FLOAT_DATA: single array of floating-point data # # The ALT_SAMPLE_DATA format is sometimes known as .amp or sample- # interleaved format; the ALT_LINE_DATA format is sometimes known as # .hgt or line-interleaved format. For the ALT_LINE_DATA format, the # first array is always assumed to be the interferogram magnitude. All # formats assume single-precision (32-bit) floating-point data (real*4 # and complex*8 in Fortran) in the native byte order (big vs. little # endian) of the system. # Input file format # Allowable formats: # COMPLEX_DATA (default) # ALT_LINE_DATA (magnitude in channel 1, phase in radians in channel 2) # ALT_SAMPLE_DATA (magnitude in channel 1, phase in radians in channel 2) # FLOAT_DATA (phase in radians) # #INFILEFORMAT COMPLEX_DATA INFILEFORMAT FLOAT_DATA # Output file format # Allowable formats: # ALT_LINE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2; default) # ALT_SAMPLE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2) # FLOAT_DATA (unwrapped phase in radians) # #OUTFILEFORMAT ALT_LINE_DATA OUTFILEFORMAT FLOAT_DATA # Amplitude or power file format # Units should be consistent with interferogram. Allowable formats: # ALT_LINE_DATA (first image amplitude in channel 1, # second image amplitude in channel 2) # ALT_SAMPLE_DATA (first image amplitude in channel 1, # second image amplitude in channel 2; default) # FLOAT_DATA (square root of average power of two images) # #AMPFILEFORMAT ALT_SAMPLE_DATA AMPFILEFORMAT FLOAT_DATA # Magnitude file format # Allowable formats: # ALT_LINE_DATA (interferogram magnitude in channel 1, # channel 2 ignored) # ALT_SAMPLE_DATA (interferogram magnitude in channel 1, # channel 2 ignored) # FLOAT_DATA (interferogram magnitude; default) # #MAGFILEFORMAT FLOAT_DATA # Correlation file format # Allowable formats: # ALT_LINE_DATA (channel 1 ignored; correlation values # between 0 and 1 in channel 2; default) # ALT_SAMPLE_DATA (channel 1 ignored; correlation values # between 0 and 1 in channel 2) # FLOAT_DATA (correlation values between 0 and 1) # #CORRFILEFORMAT ALT_LINE_DATA CORRFILEFORMAT FLOAT_DATA # Unwrapped estimate file format # Allowable formats: # ALT_LINE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2; default) # ALT_SAMPLE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2) # FLOAT_DATA (unwrapped phase in radians) # #ESTFILEFORMAT ALT_LINE_DATA ESTFILEFORMAT FLOAT_DATA # Unwrapped input file format # Allowable formats: # ALT_LINE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2; default) # ALT_SAMPLE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2) # FLOAT_DATA (unwrapped phase in radians) # #UNWRAPPEDINFILEFORMAT ALT_LINE_DATA ############################### # SAR and geometry parameters # ############################### # Orbital radius (double, meters) or altitude (double, meters). The # radius should be the local radius if the orbit is not circular. The # altitude is just defined as the orbit radius minus the earth radius. # Only one of these two parameters should be given. ORBITRADIUS 7153000.0 #ALTITUDE 775000.0 # Local earth radius (double, meters). A spherical-earth model is # used. EARTHRADIUS 6378000.0 # The baseline parameters are not used in deformation mode, but they # are very important in topography mode. The parameter BASELINE # (double, meters) is the physical distance (always positive) between # the antenna phase centers. The along-track componenet of the # baseline is assumed to be zero. The parameter BASELINEANGLE_DEG # (double, degrees) is the angle between the antenna phase centers # with respect to the local horizontal. Suppose the interferogram is # s1*conj(s2). The baseline angle is defined as the angle of antenna2 # above the horizontal line extending from antenna1 towards the side # of the SAR look direction. Thus, if the baseline angle minus the # look angle is less than -pi/2 or greater than pi/2, the topographic # height increases with increasing elevation. The units of # BASELINEANGLE_RAD are radians. BASELINE 150.0 BASELINEANGLE_DEG 225.0 #BASELINEANGLE_RAD 3.92699 # If the BPERP parameter is given, the baseline angle is taken to be # equal to the look angle (mod pi) at midswath, and the length of the # baseline is set accordingly. Particular attention must be paid to # the sign of this parameter--it should be negative if increasing # phase implies increasing topographic height. #BPERP -150.0 # The transmit mode should be either REPEATPASS or PINGPONG if both # antennas transmitted and both received (REPEATPASS and PINGPONG have # the same effect); the transmit mode should be SINGLEANTENNATRANSMIT # if only one antenna was used to transmit while both antennas # received. In single-antenna-transmit mode, the baseline is # effectively halved. This parameter is ignored for cost modes other # than topography. TRANSMITMODE REPEATPASS # Slant range from platform to first range bin in input data file # (double, meters). Be sure to modify this parameter if the input # file is extracted from a larger scene. The parameter does not need # to be modified is snaphu is unwrapping only a subset of the input file. NEARRANGE 831000.0 # Slant range and azimuth pixel spacings of input interferogram after # any multilook averaging. This is not the same as the resolution. # (double, meters). DR 8.0 DA 20.0 # Single-look slant range and azimuth resolutions. This is not the # same as the pixel spacing. (double, meters). RANGERES 10.0 AZRES 6.0 # Wavelength (double, meters). LAMBDA 0.0565647 # Number of real (not necessarily independent) looks taken in range and # azimuth to form the input interferogram (long). NLOOKSRANGE 1 NLOOKSAZ 5 # Number of looks (assumed independent) from nonspatial averaging (long). NLOOKSOTHER 1 # Equivalent number of independent looks (double, dimensionless) that were # used to generate correlation file if one is specified. This parameter # is ignored if the correlation data are generated by the interferogram # and amplitude data. # # The equivalent number of independent looks is approximately equal to the # real number of looks divided by the product of range and azimuth # resolutions, and multiplied by the product of the single-look range and # azimuth pixel spacings. It is about 0.53 times the number of real looks # for ERS data processed without windowing. NCORRLOOKS 23.8 # Number of looks that should be taken in range and azimuth for estimating # the correlation coefficient from the interferogram and the amplitude # data. These numbers must be larger than NLOOKSRANGE and NLOOKSAZ. # The actual numbers used may be different since we prefer odd integer # multiples of NLOOKSRANGE and NLOOKSAZ (long). These numbers are ignored # if a separate correlation file is given as input. NCORRLOOKSRANGE 3 NCORRLOOKSAZ 15 ############################### # Scattering model parameters # ############################### # The scattering model: brightness proportional to # # sigma0 = C * (kds*cos(thetai) + (cos(2thetai))^n) * cos(thetai) # # kds (input parameter KDS) is the ratio of diffuse to specular # scattering. n (input parameter SPECULAREXP) is the power to which # speclar cosine term is rasied. Larger n implies a sharper peak for # specular scatter (both doubles, dimensionless). KDS 0.02 SPECULAREXP 8.0 # Multiplicative factor applied to diffuse scatter term in evaluating # crossover point between diffuse and specular scatter in terms of # range slope (double, dimensionless). DZRCRITFACTOR 2.0 # Allow shadow discontinuities (TRUE,FALSE)? (not yet enabled) SHADOW FALSE # Minimum slope expected in the absence of layover (double, # meters per slant-range pixel). DZEIMIN -4.0 # Number of pixels towards in increasing range that should be included in # layover height estimation (long, dimensionless). LAYWIDTH 16 # Threshold brightness (normalized) for layover height integration # (double, dimensionless) LAYMINEI 1.25 # Multiplicative factor applied to kds (see scattering model) in order # to get ratio of slopes for linearized scattering model. The term improves # agreement of the piecewise-linear model with the cosine model near the # transition point (dzrcrit) at the expense of poorer agreement at very # large slopes (double, dimensionless). SLOPERATIOFACTOR 1.18 # Variance (sigma squared) of range slopes due to uncertainties in slope # estimation from brightness (double, (meters/pixel)^2) SIGSQEI 100.0 ################################## # Decorrelation model parameters # ################################## # Here, rho is the magnitude of the complex correlation coefficient # between the two observations forming the interferogram (0<=rho<=1) # See Zebker & Villasenor, 1992 # Step size for calculating lookup table of maximum layover slope based # on measured correlation (double, dimensionless). DRHO 0.005 # Constants (double) for modeling biased measured correlation expected for # zero statistical correlation: # # rho0 ~= rhosconst1/ncorrlooks + rhosconst2 # # Approximately matches curves of Touzi, Lopes, Bruniquel, & Vachon 1999 # (double). RHOSCONST1 1.3 RHOSCONST2 0.14 # Constants (double) for modeling phase standard deviation as a function # of rho: # # sigma ~= rho ^ ( cstd1 + cstd2*log(nlooks) + cstd3*nlooks ) # # Approximately matches curves of Lee, Hoppel, Mango, & Miller, 1994. CSTD1 0.4 CSTD2 0.35 CSTD3 0.06 # Default value to use uniformly for true, unbiased correlation if no # correlation file is specified and correlation cannot be generated # from the available data (double). DEFAULTCORR 0.01 # Factor applied to expected minimum measured (biased) correlation. # Values smaller than the threshold rhominfactor*rho0 are assumed to # come from zero statistical correlation because of estimator bias (double). # This is used only in topo mode; for defo mode, use DEFOTHRESHFACTOR. RHOMINFACTOR 1.3 ######################## # PDF model parameters # ######################## # Algorithm costs are based on the negative log pdf: # # cost = -log(f(phi | EI, rho)) # Layover peak location (meters/pixel) DZLAYPEAK -2.0 # Factor applied to range layover probability density to get azimuth # layover probability density (double). AZDZFACTOR 0.99 # Factor applied to slope expected from brightness without layover (double). # Can account for underestimation of brightness from averaging with # neighboring dark pixels when despeckling. DZEIFACTOR 4.0 # Weight applied to slope expected from brightness without layover (double). # Must be between zero and one. Can reduce influence of intensity on # nonlayover slope. This is useful if there are lots of nontopographic # variations in brightness (ie, changes in surface relfectivity). DZEIWEIGHT 0.5 # Factor applied to slope expected from brightness with layover (double). # Can account for underestimation of brightness from averaging with # neighboring dark pixels when despeckling. DZLAYFACTOR 1.0 # Ratio of layover probability density to peak probability density # for non-layover slopes expected (double). LAYCONST 0.9 # Factor applied to slope varinace for nonlayover to get falloff of # probability density after the upper layover slope limit has been # exceeded (double). LAYFALLOFFCONST 2.0 # Minimum value of variance when cast to short integer data type (long). # Must be greater than 0 to avoid divide-by-zero. SIGSQSHORTMIN 1 # Fraction of (ambiguity height)^2 to use for slope variance in the # presence of layover. Should usually be less than (1/2)^2 = 0.25. SIGSQLAYFACTOR 0.1 ############################### # Deformation mode parameters # ############################### # Factor applied to range discontinuity probability density to get # corresponding value for azimuth (double). DEFOAZDZFACTOR 1.0 # Factor applied to rho0 to get threshold for whether or not phase # discontinuity is possible (double). rho0 is the expected, biased # correlation measure if true correlation is 0. DEFOTHRESHFACTOR 1.2 # Maximum phase discontinuity likely (double). Units are radians or cycles. # If abrupt phase discontinuities are not expected, this paramter can be # set to zero. DEFOMAX_CYCLE 0.1 #DEFOMAX_RAD 7.5398 # Phase variance (cycles^2) reflecting uncertainty in measurement of # actual statistical correlation (double). SIGSQCORR 0.05 # Ratio of phase discontinuity probability density to peak probability # density expected for discontinuity-possible pixel differences (double). # Value of 1 means zero cost for discontinuity, 0 means infinite cost. DEFOCONST 0.9 ######################## # Algorithm parameters # ######################## # Maximum flow (long) to allow in initialization. If this is zero, # then the maximum is calculated automatically from the statistical # cost functions. To disable, set it to a large value like 9999, but # do not overflow the long integer data type. INITMAXFLOW 9999 # Constant (long) to add to maximum flow expected from statistical # cost functions for automatically determining initial maximum # flow (see above). ARCMAXFLOWCONST 3 # Maximum flow increment (long) for solver. Not the same as maximum # flow possible. MAXFLOW 4 # Number of pixels in row and column dimensions to use in sliding average # window used for normalizing intensity values (long). KROWEI 65 KCOLEI 257 # Number of pixels to use in sliding window average used for averaging # wrapped gradients to get mean non-layover slope, in directions parallel # and perpendicular to the examined phase difference (long). KPARDPSI 7 KPERPDPSI 7 # Threshold precision for iterative numerical calculations (double). THRESHOLD 0.001 # Initial value of range slope for dzrcrit numerical solution (double, # meters/pixel) INITDZR 2048.0 # Initial range slope stepsize in dzrhomax numerical solution (double, # meters/pixel) INITDZSTEP 100.0 # Maximum cost allowd for scalar MST costs and for estimating number of # buckets needed for solver routine (double). MAXCOST 1000.0 # Scaling constant factor applied to double precision costs to get # integer costs (double). COSTSCALE 100.0 # Ambiguity height for autoscaling COSTSCALE to equal 100 (double, # meters). COSTSCALE is automatically adjusted to be inversely # proportional to the midswath ambigutiy height in topography mode. COSTSCALEAMBIGHT 80.0 # Step size (double, radians) for dzrhomax lookup table. The index is # on the local flat-earth incidence angle; this is the sample spacing # in the table. DNOMINCANGLE 0.01 # Integer spacing that represents one unit of flow or one cycle of phase # when storing costs as short integer types (long). NSHORTCYCLE 200 # Fraction of total number of nodes to add in each tree expansion # phase of solver algorithm (double). MAXNEWNODECONST 0.0008 # Number of cycles to allow for a call to solver with a specific flow # increment delta and still consider that increment done. Ideally # it would be zero, but scaling for different deltas may leave some # negative cycles that won't affect solution much. Comment this out # to automatically determine the number based on the size of the # interferogram. #MAXNFLOWCYCLES 10 # Fraction of the number of pixels to use as the maximum number of # cycles allowed for a specific flow increment if MAXNFLOWCYCLES # is not given. MAXCYCLEFRACTION 0.00001 # Determines how the source or root of the tree is chosen for the # modified network-simplex solver. If SOURCEMODE is zero, the # ground node is used as the root (usually fastest). Otherwise, # SOURCEMODE should be 1 or -1, and the root is the endpoint of the # longest chain of flow greater than or equal to the current flow # increment, where the sign of SOURCEMODE determines which end of the # chain is used. SOURCEMODE 0 # Scale factor (long) for cs2 MCF initializations. A larger number # gives greater speed, but uses more memory. CS2SCALEFACTOR 8 ############################################## # File names for dumping intermediate arrays # ############################################## # If the following file names are given, the corresponding intermediate # array will be dumped to that file. Otherwise, the array is not dumped. # These filenames override the default file names assigned when # DEBUG is TRUE. # Unwrapped initialization # INITFILE snaphu.init # Flow corresponding to unwrapped solution # FLOWFILE snaphu.flow # Normalized, despeckled SAR image intensity # EIFILE snaphu.ei # Statistical costs for azimuth # ROWCOSTFILE snaphu.rowcost # Statistical costs for range # COLCOSTFILE snaphu.colcost # Scalar initialization costs for azimuth # MSTROWCOSTFILE snaphu.mstrowcost # Scalar initialization costs for range # MSTCOLCOSTFILE snaphu.mstcolcost # Scalar initialization costs for both azimuth and range, concatenated # MSTCOSTSFILE snaphu.mstcosts # Correlation coefficient magnitude (before clipping into [0,1] interval) # RAWCORRDUMPFILE snaphu.rawcorr # Correlation coefficient magnitude (after clipping into [0,1] interval) # CORRDUMPFILE snaphu.corr ############################### # Piece extraction parameters # ############################### # These parameters (long, dimensionless) allow only a subset of the # input data files to be read and unwrapped. The upper left corner of # the subset is at row PIECEFIRSTROW and column PIECEFIRSTCOL, with # both indexed from 1 (that is, the upper left corner is pixel 1,1). # The output will be PIECENROW rows x PIECENCOL columns in size. # These parameters cannot be used in tile mode. If PIECENROW or # PIECENCOL is zero, the full depth or width of the input is # unwrapped. # PIECEFIRSTROW 1 # PIECEFIRSTCOL 1 # PIECENROW 0 # PIECENCOL 0 ################ # Tile control # ################ # Parameters in this section describe how the input files will be # tiled. This is mainly used for tiling, in which different # patches of the interferogram are unwrapped separately. # Number of rows and columns of tiles into which the data files are # to be broken up. # NTILEROW 1 # NTILECOL 1 # Overlap, in pixels, between neighboring tiles. # ROWOVRLP 0 # COLOVRLP 0 # Maximum number of child processes to start for parallel tile # unwrapping. # NPROC 1 # Cost threshold to use for determining boundaries of reliable regions # (long, dimensionless; scaled according to other cost constants). # Larger cost threshold implies smaller regions---safer, but # more expensive computationally. # TILECOSTTHRESH 500 # Minimum size (long, pixels) of a reliable region in tile mode. # MINREGIONSIZE 100 # Extra weight applied to secondary arcs on tile edges. # TILEEDGEWEIGHT 2.5 # Maximum flow magnitude (long) whose cost will be stored in the secondary # cost lookup table. Secondary costs larger than this will be approximated # by a quadratic function. # SCNDRYARCFLOWMAX 8 # The program will remove temporary tile files if this is set. # RMTMPTILE FALSE # If this is set to anything besides FALSE, the program will skip # the unwrapping step and only assemble temporary tile files from a previous # invocation saved in the directory whose name is given here. The tile size # parameters and file names must be the same. # ASSEMBLEONLY tiledir ############################### # Connected component control # ############################### # Grow connected components mask and write to output file specified. # CONNCOMPFILE snaphu.conncomp # Grow connected components mask from unwrapped input then exit if TRUE. # Output is written to the file specified by CONNCOMPFILE. # REGROWCONNCOMPS FALSE # Minimum size of a single connected component, as a fraction (double) # of the total number of pixels in tile. # MINCONNCOMPFRAC 0.01 # Cost threshold for connected components (long). Higher threshold will # give smaller connected components. # CONNCOMPTHRESH 300 # Maximum number of connected components per tile (long). # MAXNCOMPS 32 # End of snaphu configuration file GMTSAR_V5.7/snaphu/man/snaphu_man1.txt000644 015705 000000 00000072107 13505462014 020574 0ustar00sandwellwheel000000 000000 snaphu(1) snaphu(1) NAME snaphu - phase unwrapping algorithm for SAR interferometry SYNOPSIS snaphu [options] [infile] [linelength] [options] DESCRIPTION snaphu is a statistical-cost network-flow algorithm for phase unwrapping. Given an input interferogram and other observable data, snaphu attempts to compute congruent phase-unwrapped solutions that are maximally probable in an approximate a posteriori sense. The algorithm's solver routine is based on network optimization. By default, snaphu assumes that its input is a synthetic aperture radar (SAR) interferogram measuring surface topography. Deformation measurements are assumed if the -d option is given. Smooth, generic data are assumed if the -s option is given. This man page documents only snaphu's syntax and usage. Its theoretical foundations are discussed in the refer- ences cited below. The most common input parameters may be given on the com- mand line, while many other twiddle parameters are handled via the -f option and configuration files. At the very least, the name of a wrapped-phase input file and its line length must be specified. Range should increase towards the right in the interferogram, and the flat-earth phase ramp should be removed from the input interferogram before snaphu is run. For deformation interferograms, phase variations due to topography should be removed as well. Except for the input file name and the line length, all input parameters take default values if not specified. However, these parameters should be customized whenever possible since the accuracy of the solution depends on how well the statistics of the estimation problem are modeled. To avoid poor-quality solutions, users are strongly encouraged to provide their best estimates of the relevant problem parameters. Parameters are set in the order in which they are given on the command line, so multiple con- figuration files or options may be given, with later val- ues overriding earlier ones. Allowable file formats are detailed below. The default format for the input file is COMPLEX_DATA, but any of the described formats may be used. If either of the ALT_LINE_DATA or ALT_SAMPLE_DATA formats are used, the magnitude and phase (in radians) of the interferogram should be in the first and second channels of the file, respectively. If the FLOAT_DATA format is used, the input file should contain only the phase of the interferogram (in radians); the magnitude may be passed with the -m option. OPTIONS -a ampfile Read brightness data from the file ampfile. The file should contain the amplitudes (not powers) of the two individual SAR images forming the interfer- ogram if the formats ALT_SAMPLE_DATA (default) or ALT_LINE_DATA are used. It should contain an aver- age of those two images if the FLOAT_DATA format is used. If (1) the amplitudes of both images are available, (2) the interferogram magnitude is also available, and (3) the -c option is not used, then a coherence estimate is automatically formed from the available data. The number of looks used for this estimate can be set in a configuration file. If no amplitude or power data are specified, then the magnitude of the input interferogram is used as the average amplitude, and no coherence estimate is formed. Note that the magnitude of the interfero- gram is not equal to the average amplitude of the SAR images. The amplitude data should be in the same system of units used for the input interfero- gram, and also coregistered to it. -A pwrfile Similar to the -a option, except the data in the specified file is assumed to represent the powers of the two individual SAR images. -b Bperp For topography mode, use Bperp (decimal value, in meters) as the value of the perpendicular component of the interferometric baseline. The sign is defined such that Bperp is negative if the unwrapped phase increases with the elevation. By default, repeat-pass or ping-pong mode is assumed; for single-antenna-transmit data, the value of Bperp should be halved, or the transmit mode should be set accordingly in a configuration file (see the -f option). The baseline value is only used in topography mode. -c corrfile Read correlation data from the file corrfile. The correlation data should be the same size as, and registered to, the input interferogram. Conse- quently, a raw correlation estimate may need to be upsampled if it incorporates more looks than the interferogram. If the -c option is not given, a coherence estimate is formed from the available data if possible. Otherwise, a uniform default coherence is assumed for the entire interferogram. If the ALT_LINE_DATA (default) or ALT_SAMPLE_DATA formats are used, the correlation data should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA format may also be used. The correlation values should be between zero and one, inclusive. -d Run in deformation mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents surface displacement rather than elevation. -e estimatefile Flatten using the unwrapped phase estimate in the file estimatefile. The estimate is subtracted from the input interferogram before unwrapping, and is inserted back into the solution just before the output is written. The estimate also affects the cost functions used, since subtracting a constant from a random variable shifts the probability den- sity function of the random variable. If the formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped estimate (in radians) should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA for- mat may also be used. -f configfile Read configuration parameters from file configfile. The file is parsed line by line for key-value pairs. Template configuration files are included with the snaphu source code: snaphu.conf.full con- tains all valid key-value pairs; snaphu.conf.brief contains the most important parameters. Lines not beginning with alphanumeric characters are treated as comment lines. Command line options specified after -f will override parameters specified in the configfile and vice versa. The -f option may be given multiple times with different configuration files, with parameters in later-specified files overriding those in earlier ones. -g maskfile Grow a connected component mask for the unwrapped solution and write the mask to the file maskfile. A connected component is a region of pixels in the solution that is believed to have been unwrapped in a relative, internally self-consistent manner according to the statistical costs used. Regions that are smaller than a preselected threshold are masked out. Parameters for this option can be set in the configuration file. The connected component file is composed of unsigned characters, with all pixels of the same value belonging to the same con- nected component and zero corresponding to masked pixels. -G maskfile Grow a connected component mask (see the -g option) for the input data array, assuming that it is already unwrapped, and write the mask to the file maskfile. Statistical cost functions are computed for forming the mask, but a new unwrapped solution is not computed. -h Print a help message summarizing command-line options and exit. -i Run in initialize-only mode. Normally, snaphu uses either an approximate minimum spanning tree (MST) algorithm or a minimum cost flow (MCF) algorithm for generating the initialization to its iterative, modified network-simplex solver. If -i is given, the initialization is written to the output and the program exits without running the iterative solver. -l logfile Log all runtime parameters and some other environ- ment information into the specified file. The log file is a text file in the same format as a config- uration file. -m magfile Read interferogram magnitude data from the speci- fied file. This option is useful mainly if the wrapped-phase input file is given as a set of real phase values rather than complex interferogram values. The interferogram magnitude is used to form a coherence estimate if appropriate amplitude data are given as well. The default file format is FLOAT_DATA. If the formats ALT_LINE_DATA or ALT_SAMPLE_DATA are used, the magnitude should be in the first data channel of the file; the second channel is ignored. If the COMPLEX_DATA format is used, the phase information is ignored. -n Run in no-statistical-costs mode. If the -i or -p options are given, snaphu will not use statistical costs. Information from a weight file (-w option) will still be used if given. -o outfile Write the unwrapped output to file called outfile. If the file formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped phase is written into the second data channel, while the interferogram magnitude is written into the first channel. The format FLOAT_DATA may also be used. -p value Run in Lp-norm mode with p=value, where value is a nonnegative decimal. Instead of statistical cost functions, the program uses Lp cost functions with statistically based weights (unless -n is also given). Solutions are still always congruent. Moreover, congruence is enforced within the solver routine, not as a post-optimization processing step. Therefore, if p=2, for example, least- squares cost functions are used, but the solution will probably be more accurate than one generated from a transform-based least-squares algorithm. -q Run in quantify-only mode. The input data are assumed to be unwrapped already, and the total cost of this solution is calculated and printed. The unwrapped phase is wrapped assuming congruence for the cost calculation. Round-off errors may limit the precision of the quantified cost. See the -u option for allowable file formats. -s Run in smooth-solution mode. The problem statis- tics and resulting cost functions are based on the assumption that the true unwrapped phase represents a generic surface with no discontinuities. This is the same as deformation mode with the DEFOMAX parameter set to zero. -t Run in topography mode. The problem statistics and resulting cost functions are based on the assump- tion that the true unwrapped phase represents sur- face elevation. This is the default. -u Assume that the input file is unwrapped rather than wrapped. The algorithm makes iterative improve- ments to this solution instead of using an initial- ization routine. The input file may be in the for- mats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA; the interferogram magnitude should be in the first data channel and the unwrapped phase should be in the second data channel. The format FLOAT_DATA may also be used. -v Run in verbose mode. Extra information on the algorithm's progress is printed to the standard output. -w weightfile Read external, scalar weights from file weightfile. The weights, which should be positive short inte- gers, are applied to whichever cost functions are used. There is one weight value for each arc in the network, so weightfile should be the concatena- tion of raster horizontal-flow and vertical-flow arc weights. Thus, for an N row by M column inter- ferogram, weightfile would consist of a rasterized (N-1) by M array followed by a rasterized N by (M-1) array of short integer data. This option is not well tested. --aa ampfile1 ampfile2 Amplitude data are read from the files specified. The data from the two individual SAR images forming the interferogram are assumed to be separately stored in files ampfile1 and ampfile2. These files should be in the format FLOAT_DATA. This option is similar to the -a option. --AA pwrfile1 pwrfile2 Similar to the --aa option, but power data are read from the specified files. --assemble dirname Assemble the tile-mode temporary files in the spec- ified directory. Most configuration options (from the command line and any configuration files) must be specified. This option is useful if the user wishes to modify tile-assembly parameters without unwrapping the individual tiles over again. --copyright, --info Print the software copyright notice and bug report info, then exit. --costinfile costfile Read statistical cost arrays from file costfile. This file should be in the format written by the --costoutfile option. The cost file does not con- trol whether snaphu runs in topography, deforma- tion, or smooth-solution mode; the latter two must be specified explicitly even if costfile was gener- ated while running in those modes. --costoutfile costfile Write statistical cost arrays to file costfile. This option can be used with the --costinfile option to save the time of generating statistical costs if the same costs are used multiple times. --debug, --dumpall Dump all sorts of intermediate arrays to files. --mst Use a minimum spanning tree (MST) algorithm for the initialization. This is the default. --mcf Use a minimum cost flow (MCF) algorithm for the initialization. The cs2 solver by Goldberg and Cherkassky is used. The modified network-simplex solver in L1 mode may give different results than the cs2 solver, though in principle both should be L1 optimal. --nproc n Use n parallel processes when in tile mode. The program forks a new process for each tile so that tiles can be unwrapped in parallel; at most n pro- cesses will run concurrently. Forking is done before data is read. The standard output streams of child processes are directed to log files in the temporary tile directory. --piece firstrow firstcol nrow ncol Read and unwrap only a subset or part of the input interferogram. The read piece is the nrow by ncol rectangle whose upper left corner is the pixel at row firstrow and column firstcol (indexed from 1). All input files (such as amplitude, coherence, etc.) are assumed to be the same size as the input phase file. All output files are nrow by ncol. --tile ntilerow ntilecol rowovrlp colovrlp Unwrap the interferogram in tile mode. The inter- ferogram is partitioned into ntilerow by ntilecol tiles, each of which is unwrapped independently. Tiles overlap by rowovrlp and colovrlp pixels in the row and column directions. The tiles are then segmented into reliable regions based on the cost functions, and the regions are reassembled. The program creates a subdirectory for temporary files in the directory of the eventual output file. This option is currently enabled only for statistical cost functions. FILE FORMATS The formats of input files may be specified in a configu- ration file. All of these formats are composed of raster, single-precision (float, real*4, or complex*8) floating- point data types in the platform's native byte order. Data are read line by line (across then down). Regardless of the file format, all input data arrays should have the same number of samples in width and depth and should be coregistered to one another. Note that weight files and cost files have their own formats. The allowable formats for other data files are described below. COMPLEX_DATA Alternating floats correspond to the real (in- phase) and imaginary (quadrature) components of complex data samples. The specified line length should be the number of complex samples (pairs of real and imaginary samples) per line. ALT_LINE_DATA Alternating lines (rows) of data correspond to lines of purely real data from two separate arrays. The first array is often the magnitude of the interferogram, and the second may be unwrapped phase, coherence, etc. This is also sometimes called hgt or line-interleaved format. ALT_SAMPLE_DATA Alternating samples correspond to purely real sam- ples from two separate arrays. This format is sometimes used for the amplitudes of the two SAR images. FLOAT_DATA The file contains data for only one channel or array, and the data are purely real. EXAMPLES Unwrap a wrapped topographic interferogram called ``wrappedfile'' whose line length is 1024 complex samples (output will be written to a file whose name is compiled into the program): snaphu wrappedfile 1024 Unwrap the same file as above, but use brightness informa- tion from the file ``ampfile,'' set the perpendicular baseline to -165 m at midswath, and place the output in a file called ``unwrappedfile'' (coherence data are gener- ated automatically if ``wrappedfile'' contains complex data and ``ampfile'' contains amplitude data from both SAR images): snaphu wrappedfile 1024 -a ampfile \ -b -165 -o unwrappedfile Unwrap the interferogram as above, but read correlation information from the file ``corrfile'' instead of generat- ing it from the interferogram and amplitude data: snaphu wrappedfile 1024 -a ampfile -c corrfile \ -b -165 -o unwrappedfile The following is equivalent to the previous example, but input parameters are read from a configuration file, and verbose output is displayed: cat > configfile # This is a comment line which will be ignored AMPFILE ampfile CORRFILE corrfile BPERP -165 OUTFILE unwrappedfile snaphu -v -f configfile wrappedfile 1024 Unwrap the same interferogram, but use only the MST ini- tialization (with scalar statistical weights) and write the output to ``mstfile'': snaphu -f configfile -i wrappedfile 1024 -o mstfile Read the unwrapped data in ``mstfile'' and use that as the initialization to the modified network-simplex solver: snaphu -f configfile -u mstfile 1024 -o unwrappedfile Note that in the previous two examples, the output file name in the configuration file is overrided by the one given on the command line. The previous two commands together are in principle equivalent to the preceding one, although round-off errors in flow-to-phase conversions may cause minor differences Unwrap the interferogram as above, but use the MCF algo- rithm for initialization: snaphu -f configfile wrappedfile 1024 --mcf Unwrap the interferogram once again, but first flatten it with the unwrapped data in ``estfile,'' then reinsert the subtracted phase after unwrapping: snaphu -f configfile wrappedfile 1024 -e estfile The following assumes that the wrapped input interferogram measures deformation, not topography. Unwrap the inter- ferogram with the given correlation data: snaphu -d wrappedfile 1024 -c corrfile Unwrap the input interferogram by minimizing the unweighted congruent L2 norm: snaphu -p 2 -n wrappedfile 1024 Unwrap the interferogram as a three-by-four set of tiles that overlap by 30 pixels, with the specified configura- tion file, using two processors: snaphu wrappedfile 1024 -f configfile \ --tile 3 4 30 30 --nproc 2 HINTS AND TIPS The program may print a warning message about costs being clipped to avoid overflow. If too many costs are clipped, the value of COSTSCALE may need to be decreased in a con- figuration file (via the -f option). If the program prints a warning message about an unexpected increase in the total solution cost, this is an indication that too many costs are clipped. It is usually okay if just a few costs are clipped. In topography mode, if the unwrapped result contains too many discontinuities, try increasing the value of LAYMINEI or decreasing the value of LAYCONST. The former deter- mines the normalized intensity threshold for layover, and the latter is the relative layover probability. If there are too many discontinuities running in azimuth, try decreasing the value of AZDZFACTOR, which affects the ratio of azimuth to range costs. If the baseline is not known, take a guess at it and be sure its sign is correct. Specify the SAR imaging geometry parameters as well as possible. The defaults assume ERS data with five looks taken in azimuth. In deformation mode, if the unwrapped result contains too many discontinuities, try increasing the value of DEFOTHRESHFACTOR or decreasing the value of DEFOCONST. If the surface displacement varies slowly and true disconti- nuities are not expected at all, DEFOMAX_CYCLE can be set to zero. This behavior is also invoked with the -s option. The resulting cost functions will be similar to correlation-weighted L2 cost functions, though the former are not necessarily centered on the wrapped gradients. Congruence is still enforced during rather than after optimization. The program can be run in initialize-only (-i) mode for quick down-and-dirty MST or MCF solutions. SIGNALS Once the iterative solver has started, snaphu traps the interrupt (INT) and hangup (HUP) signals. Upon receiving an interrupt, for example if the user types Ctrl-C, the program finishes a minor iteration, dumps its current solution to the output, and exits. If a second interrupt is given after the first (caught) interrupt, the program exits immediately. If a hangup signal is received, the program dumps its current solution then continues to exe- cute normally. EXIT STATUS Upon successful termination, the program exits with code 0. Errors result in exit code 1. FILES The following files may be useful for reference, but are not required. They are included in the program source distribution and may be installed somewhere on the system. snaphu.conf.full Template configuration file setting all valid input parameters (though some may be commented out). snaphu.conf.brief General-purpose template configuration file setting the most important or commonly modified input parameters. In addition to parameters read from configuration files specified on the command line, default parameters may be read from a system-wide configuration file if such a file is named when the program is compiled. BUGS The -w option has not been tested exhaustively. Extreme shadow discontinuities (i.e., abrupt elevation drops in increasing range due to cliffs facing away from the radar) are not modeled that well in the cost functions for topography mode. Abrupt changes in surface reflectivity, such as those of coastlines between bright land and dark water, might be misinterpreted as layover and assigned inappropriate costs. The algorithm's behavior may be unpredictable if the costs are badly scaled and excessively clipped to fit into their short-integer data types. There is no error checking that ensures that the network node potentials (incost and outcost) do not overflow their long-integer data types. Automatic flow clipping is built into the MST initializa- tion, but it can give erratic results and may loop infinitely for certain input data sets. It is conse- quently turned off by default. Dedicated programs for specific Lp objective functions may work better than snaphu in Lp mode. Note that snaphu enforces congruence as part of the problem formulation, however, not as a post-optimization processing step. REFERENCES C. W. Chen and H. A. Zebker, ``Two-dimensional phase unwrapping with use of statistical models for cost functions in nonlinear optimization,'' Journal of the Optical Society of America A, 18, 338-351 (2001). C. W. Chen and H. A. Zebker, ``Network approaches to two- dimensional phase unwrapping: intractability and two new algorithms,'' Journal of the Optical Society of America A, 17, 401-414 (2000). C. W. Chen and H. A. Zebker, ``Phase unwrapping for large SAR interferograms: Statistical segmentation and general- ized network models,'' IEEE Transactions on Geoscience and Remote Sensing, 40, 1709-1719 (2002). snaphu(1) GMTSAR_V5.7/snaphu/man/man1/000755 015705 000000 00000000000 13505462014 016446 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/snaphu/man/snaphu_man1.html000644 015705 000000 00000135673 13505462014 020731 0ustar00sandwellwheel000000 000000 snaphu

snaphu

NAME
SYNOPSIS
DESCRIPTION
OPTIONS
FILE FORMATS
EXAMPLES
HINTS AND TIPS
SIGNALS
EXIT STATUS
FILES
BUGS
REFERENCES

NAME

snaphu - phase unwrapping algorithm for SAR interferometry

SYNOPSIS

snaphu [options] [infile] [linelength] [options]

DESCRIPTION

snaphu is a statistical-cost network-flow algorithm for phase unwrapping. Given an input interferogram and other observable data, snaphu attempts to compute congruent phase-unwrapped solutions that are maximally probable in an approximate a posteriori sense. The algorithm's solver routine is based on network optimization. By default, snaphu assumes that its input is a synthetic aperture radar (SAR) interferogram measuring surface topography. Deformation measurements are assumed if the -d option is given. Smooth, generic data are assumed if the -s option is given.

This man page documents only snaphu's syntax and usage. Its theoretical foundations are discussed in the references cited below.

The most common input parameters may be given on the command line, while many other twiddle parameters are handled via the -f option and configuration files. At the very least, the name of a wrapped-phase input file and its line length must be specified. Range should increase towards the right in the interferogram, and the flat-earth phase ramp should be removed from the input interferogram before snaphu is run. For deformation interferograms, phase variations due to topography should be removed as well.

Except for the input file name and the line length, all input parameters take default values if not specified. However, these parameters should be customized whenever possible since the accuracy of the solution depends on how well the statistics of the estimation problem are modeled. To avoid poor-quality solutions, users are strongly encouraged to provide their best estimates of the relevant problem parameters. Parameters are set in the order in which they are given on the command line, so multiple configuration files or options may be given, with later values overriding earlier ones.

Allowable file formats are detailed below. The default format for the input file is COMPLEX_DATA, but any of the described formats may be used. If either of the ALT_LINE_DATA or ALT_SAMPLE_DATA formats are used, the magnitude and phase (in radians) of the interferogram should be in the first and second channels of the file, respectively. If the FLOAT_DATA format is used, the input file should contain only the phase of the interferogram (in radians); the magnitude may be passed with the -m option.

OPTIONS

-a ampfile

Read brightness data from the file ampfile. The file should contain the amplitudes (not powers) of the two individual SAR images forming the interferogram if the formats ALT_SAMPLE_DATA (default) or ALT_LINE_DATA are used. It should contain an average of those two images if the FLOAT_DATA format is used. If (1) the amplitudes of both images are available, (2) the interferogram magnitude is also available, and (3) the -c option is not used, then a coherence estimate is automatically formed from the available data. The number of looks used for this estimate can be set in a configuration file. If no amplitude or power data are specified, then the magnitude of the input interferogram is used as the average amplitude, and no coherence estimate is formed. Note that the magnitude of the interferogram is not equal to the average amplitude of the SAR images. The amplitude data should be in the same system of units used for the input interferogram, and also coregistered to it.

-A pwrfile

Similar to the -a option, except the data in the specified file is assumed to represent the powers of the two individual SAR images.

-b Bperp

For topography mode, use Bperp (decimal value, in meters) as the value of the perpendicular component of the interferometric baseline. The sign is defined such that Bperp is negative if the unwrapped phase increases with the elevation. By default, repeat-pass or ping-pong mode is assumed; for single-antenna-transmit data, the value of Bperp should be halved, or the transmit mode should be set accordingly in a configuration file (see the -f option). The baseline value is only used in topography mode.

-c corrfile

Read correlation data from the file corrfile. The correlation data should be the same size as, and registered to, the input interferogram. Consequently, a raw correlation estimate may need to be upsampled if it incorporates more looks than the interferogram. If the -c option is not given, a coherence estimate is formed from the available data if possible. Otherwise, a uniform default coherence is assumed for the entire interferogram. If the ALT_LINE_DATA (default) or ALT_SAMPLE_DATA formats are used, the correlation data should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA format may also be used. The correlation values should be between zero and one, inclusive.

-d

Run in deformation mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents surface displacement rather than elevation.

-e estimatefile

Flatten using the unwrapped phase estimate in the file estimatefile. The estimate is subtracted from the input interferogram before unwrapping, and is inserted back into the solution just before the output is written. The estimate also affects the cost functions used, since subtracting a constant from a random variable shifts the probability density function of the random variable. If the formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped estimate (in radians) should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA format may also be used.

-f configfile

Read configuration parameters from file configfile. The file is parsed line by line for key-value pairs. Template configuration files are included with the snaphu source code: snaphu.conf.full contains all valid key-value pairs; snaphu.conf.brief contains the most important parameters. Lines not beginning with alphanumeric characters are treated as comment lines. Command line options specified after -f will override parameters specified in the configfile and vice versa. The -f option may be given multiple times with different configuration files, with parameters in later-specified files overriding those in earlier ones.

-g maskfile

Grow a connected component mask for the unwrapped solution and write the mask to the file maskfile. A connected component is a region of pixels in the solution that is believed to have been unwrapped in a relative, internally self-consistent manner according to the statistical costs used. Regions that are smaller than a preselected threshold are masked out. Parameters for this option can be set in the configuration file. The connected component file is composed of unsigned characters, with all pixels of the same value belonging to the same connected component and zero corresponding to masked pixels.

-G maskfile

Grow a connected component mask (see the -g option) for the input data array, assuming that it is already unwrapped, and write the mask to the file maskfile. Statistical cost functions are computed for forming the mask, but a new unwrapped solution is not computed.

-h

Print a help message summarizing command-line options and exit.

-i

Run in initialize-only mode. Normally, snaphu uses either an approximate minimum spanning tree (MST) algorithm or a minimum cost flow (MCF) algorithm for generating the initialization to its iterative, modified network-simplex solver. If -i is given, the initialization is written to the output and the program exits without running the iterative solver.

-l logfile

Log all runtime parameters and some other environment information into the specified file. The log file is a text file in the same format as a configuration file.

-m magfile

Read interferogram magnitude data from the specified file. This option is useful mainly if the wrapped-phase input file is given as a set of real phase values rather than complex interferogram values. The interferogram magnitude is used to form a coherence estimate if appropriate amplitude data are given as well. The default file format is FLOAT_DATA. If the formats ALT_LINE_DATA or ALT_SAMPLE_DATA are used, the magnitude should be in the first data channel of the file; the second channel is ignored. If the COMPLEX_DATA format is used, the phase information is ignored.

-n

Run in no-statistical-costs mode. If the -i or -p options are given, snaphu will not use statistical costs. Information from a weight file (-w option) will still be used if given.

-o outfile

Write the unwrapped output to file called outfile. If the file formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped phase is written into the second data channel, while the interferogram magnitude is written into the first channel. The format FLOAT_DATA may also be used.

-p value

Run in Lp-norm mode with p=value, where value is a nonnegative decimal. Instead of statistical cost functions, the program uses Lp cost functions with statistically based weights (unless -n is also given). Solutions are still always congruent. Moreover, congruence is enforced within the solver routine, not as a post-optimization processing step. Therefore, if p=2, for example, least-squares cost functions are used, but the solution will probably be more accurate than one generated from a transform-based least-squares algorithm.

-q

Run in quantify-only mode. The input data are assumed to be unwrapped already, and the total cost of this solution is calculated and printed. The unwrapped phase is wrapped assuming congruence for the cost calculation. Round-off errors may limit the precision of the quantified cost. See the -u option for allowable file formats.

-s

Run in smooth-solution mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents a generic surface with no discontinuities. This is the same as deformation mode with the DEFOMAX parameter set to zero.

-t

Run in topography mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents surface elevation. This is the default.

-u

Assume that the input file is unwrapped rather than wrapped. The algorithm makes iterative improvements to this solution instead of using an initialization routine. The input file may be in the formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA; the interferogram magnitude should be in the first data channel and the unwrapped phase should be in the second data channel. The format FLOAT_DATA may also be used.

-v

Run in verbose mode. Extra information on the algorithm's progress is printed to the standard output.

-w weightfile

Read external, scalar weights from file weightfile. The weights, which should be positive short integers, are applied to whichever cost functions are used. There is one weight value for each arc in the network, so weightfile should be the concatenation of raster horizontal-flow and vertical-flow arc weights. Thus, for an N row by M column interferogram, weightfile would consist of a rasterized (N-1) by M array followed by a rasterized N by (M-1) array of short integer data. This option is not well tested.

--aa ampfile1 ampfile2

Amplitude data are read from the files specified. The data from the two individual SAR images forming the interferogram are assumed to be separately stored in files ampfile1 and ampfile2. These files should be in the format FLOAT_DATA. This option is similar to the -a option.

--AA pwrfile1 pwrfile2

Similar to the --aa option, but power data are read from the specified files.

--assemble dirname

Assemble the tile-mode temporary files in the specified directory. Most configuration options (from the command line and any configuration files) must be specified. This option is useful if the user wishes to modify tile-assembly parameters without unwrapping the individual tiles over again.

--copyright, --info

Print the software copyright notice and bug report info, then exit.

--costinfile costfile

Read statistical cost arrays from file costfile. This file should be in the format written by the --costoutfile option. The cost file does not control whether snaphu runs in topography, deformation, or smooth-solution mode; the latter two must be specified explicitly even if costfile was generated while running in those modes.

--costoutfile costfile

Write statistical cost arrays to file costfile. This option can be used with the --costinfile option to save the time of generating statistical costs if the same costs are used multiple times.

--debug, --dumpall

Dump all sorts of intermediate arrays to files.

--mst

Use a minimum spanning tree (MST) algorithm for the initialization. This is the default.

--mcf

Use a minimum cost flow (MCF) algorithm for the initialization. The cs2 solver by Goldberg and Cherkassky is used. The modified network-simplex solver in L1 mode may give different results than the cs2 solver, though in principle both should be L1 optimal.

--nproc n

Use n parallel processes when in tile mode. The program forks a new process for each tile so that tiles can be unwrapped in parallel; at most n processes will run concurrently. Forking is done before data is read. The standard output streams of child processes are directed to log files in the temporary tile directory.

--piece firstrow firstcol nrow ncol

Read and unwrap only a subset or part of the input interferogram. The read piece is the nrow by ncol rectangle whose upper left corner is the pixel at row firstrow and column firstcol (indexed from 1). All input files (such as amplitude, coherence, etc.) are assumed to be the same size as the input phase file. All output files are nrow by ncol.

--tile ntilerow ntilecol rowovrlp colovrlp

Unwrap the interferogram in tile mode. The interferogram is partitioned into ntilerow by ntilecol tiles, each of which is unwrapped independently. Tiles overlap by rowovrlp and colovrlp pixels in the row and column directions. The tiles are then segmented into reliable regions based on the cost functions, and the regions are reassembled. The program creates a subdirectory for temporary files in the directory of the eventual output file. This option is currently enabled only for statistical cost functions.

FILE FORMATS

The formats of input files may be specified in a configuration file. All of these formats are composed of raster, single-precision (float, real*4, or complex*8) floating-point data types in the platform's native byte order. Data are read line by line (across then down). Regardless of the file format, all input data arrays should have the same number of samples in width and depth and should be coregistered to one another. Note that weight files and cost files have their own formats. The allowable formats for other data files are described below.

COMPLEX_DATA

Alternating floats correspond to the real (in-phase) and imaginary (quadrature) components of complex data samples. The specified line length should be the number of complex samples (pairs of real and imaginary samples) per line.

ALT_LINE_DATA

Alternating lines (rows) of data correspond to lines of purely real data from two separate arrays. The first array is often the magnitude of the interferogram, and the second may be unwrapped phase, coherence, etc. This is also sometimes called hgt or line-interleaved format.

ALT_SAMPLE_DATA

Alternating samples correspond to purely real samples from two separate arrays. This format is sometimes used for the amplitudes of the two SAR images.

FLOAT_DATA

The file contains data for only one channel or array, and the data are purely real.

EXAMPLES

Unwrap a wrapped topographic interferogram called ``wrappedfile'' whose line length is 1024 complex samples (output will be written to a file whose name is compiled into the program):

     snaphu wrappedfile 1024
Unwrap the same file as above, but use brightness information from the file ``ampfile,'' set the perpendicular baseline to -165 m at midswath, and place the output in a file called ``unwrappedfile'' (coherence data are generated automatically if ``wrappedfile'' contains complex data and ``ampfile'' contains amplitude data from both SAR images):

     snaphu wrappedfile 1024 -a ampfile \
          -b -165 -o unwrappedfile
Unwrap the interferogram as above, but read correlation information from the file ``corrfile'' instead of generating it from the interferogram and amplitude data:

     snaphu wrappedfile 1024 -a ampfile -c corrfile \
          -b -165 -o unwrappedfile
The following is equivalent to the previous example, but input parameters are read from a configuration file, and verbose output is displayed:

     cat > configfile
     # This is a comment line which will be ignored
     AMPFILE      ampfile
     CORRFILE     corrfile
     BPERP        -165
     OUTFILE      unwrappedfile
     <Ctrl-D>

     snaphu -v -f configfile wrappedfile 1024
Unwrap the same interferogram, but use only the MST initialization (with scalar statistical weights) and write the output to ``mstfile'':

     snaphu -f configfile -i wrappedfile 1024 -o mstfile
Read the unwrapped data in ``mstfile'' and use that as the initialization to the modified network-simplex solver:

     snaphu -f configfile -u mstfile 1024 -o unwrappedfile
Note that in the previous two examples, the output file name in the configuration file is overrided by the one given on the command line. The previous two commands together are in principle equivalent to the preceding one, although round-off errors in flow-to-phase conversions may cause minor differences

Unwrap the interferogram as above, but use the MCF algorithm for initialization:

     snaphu -f configfile wrappedfile 1024 --mcf
Unwrap the interferogram once again, but first flatten it with the unwrapped data in ``estfile,'' then reinsert the subtracted phase after unwrapping:

     snaphu -f configfile wrappedfile 1024 -e estfile
The following assumes that the wrapped input interferogram measures deformation, not topography. Unwrap the interferogram with the given correlation data:

     snaphu -d wrappedfile 1024 -c corrfile
Unwrap the input interferogram by minimizing the unweighted congruent L2 norm:

     snaphu -p 2 -n wrappedfile 1024
Unwrap the interferogram as a three-by-four set of tiles that overlap by 30 pixels, with the specified configuration file, using two processors:

     snaphu wrappedfile 1024 -f configfile \
          --tile 3 4 30 30 --nproc 2

HINTS AND TIPS

The program may print a warning message about costs being clipped to avoid overflow. If too many costs are clipped, the value of COSTSCALE may need to be decreased in a configuration file (via the -f option). If the program prints a warning message about an unexpected increase in the total solution cost, this is an indication that too many costs are clipped. It is usually okay if just a few costs are clipped.

In topography mode, if the unwrapped result contains too many discontinuities, try increasing the value of LAYMINEI or decreasing the value of LAYCONST. The former determines the normalized intensity threshold for layover, and the latter is the relative layover probability. If there are too many discontinuities running in azimuth, try decreasing the value of AZDZFACTOR, which affects the ratio of azimuth to range costs. If the baseline is not known, take a guess at it and be sure its sign is correct. Specify the SAR imaging geometry parameters as well as possible. The defaults assume ERS data with five looks taken in azimuth.

In deformation mode, if the unwrapped result contains too many discontinuities, try increasing the value of DEFOTHRESHFACTOR or decreasing the value of DEFOCONST. If the surface displacement varies slowly and true discontinuities are not expected at all, DEFOMAX_CYCLE can be set to zero. This behavior is also invoked with the -s option. The resulting cost functions will be similar to correlation-weighted L2 cost functions, though the former are not necessarily centered on the wrapped gradients. Congruence is still enforced during rather than after optimization.

The program can be run in initialize-only (-i) mode for quick down-and-dirty MST or MCF solutions.

SIGNALS

Once the iterative solver has started, snaphu traps the interrupt (INT) and hangup (HUP) signals. Upon receiving an interrupt, for example if the user types Ctrl-C, the program finishes a minor iteration, dumps its current solution to the output, and exits. If a second interrupt is given after the first (caught) interrupt, the program exits immediately. If a hangup signal is received, the program dumps its current solution then continues to execute normally.

EXIT STATUS

Upon successful termination, the program exits with code 0. Errors result in exit code 1.

FILES

The following files may be useful for reference, but are not required. They are included in the program source distribution and may be installed somewhere on the system.

snaphu.conf.full

Template configuration file setting all valid input parameters (though some may be commented out).

snaphu.conf.brief

General-purpose template configuration file setting the most important or commonly modified input parameters.

In addition to parameters read from configuration files specified on the command line, default parameters may be read from a system-wide configuration file if such a file is named when the program is compiled.

BUGS

The -w option has not been tested exhaustively.

Extreme shadow discontinuities (i.e., abrupt elevation drops in increasing range due to cliffs facing away from the radar) are not modeled that well in the cost functions for topography mode.

Abrupt changes in surface reflectivity, such as those of coastlines between bright land and dark water, might be misinterpreted as layover and assigned inappropriate costs.

The algorithm's behavior may be unpredictable if the costs are badly scaled and excessively clipped to fit into their short-integer data types.

There is no error checking that ensures that the network node potentials (incost and outcost) do not overflow their long-integer data types.

Automatic flow clipping is built into the MST initialization, but it can give erratic results and may loop infinitely for certain input data sets. It is consequently turned off by default.

Dedicated programs for specific Lp objective functions may work better than snaphu in Lp mode. Note that snaphu enforces congruence as part of the problem formulation, however, not as a post-optimization processing step.

REFERENCES

C. W. Chen and H. A. Zebker, ``Two-dimensional phase unwrapping with use of statistical models for cost functions in nonlinear optimization,'' Journal of the Optical Society of America A, 18, 338-351 (2001).

C. W. Chen and H. A. Zebker, ``Network approaches to two-dimensional phase unwrapping: intractability and two new algorithms,'' Journal of the Optical Society of America A, 17, 401-414 (2000).

C. W. Chen and H. A. Zebker, ``Phase unwrapping for large SAR interferograms: Statistical segmentation and generalized network models,'' IEEE Transactions on Geoscience and Remote Sensing, 40, 1709-1719 (2002).


GMTSAR_V5.7/snaphu/man/man1/snaphu.1000644 015705 000000 00000057555 13505462014 020047 0ustar00sandwellwheel000000 000000 .TH "snaphu" 1 .SH NAME snaphu \- phase unwrapping algorithm for SAR interferometry .SH SYNOPSIS .B snaphu [options] [infile] [linelength] [options] .SH DESCRIPTION \fBsnaphu\fR is a \fBs\fRtatistical-cost \fBn\fRetwork-flow \fBa\fRlgorithm for \fBph\fRase \fBu\fRnwrapping. Given an input interferogram and other observable data, \fBsnaphu\fR attempts to compute congruent phase-unwrapped solutions that are maximally probable in an approximate \fIa posteriori\fR sense. The algorithm's solver routine is based on network optimization. By default, \fBsnaphu\fR assumes that its input is a synthetic aperture radar (SAR) interferogram measuring surface topography. Deformation measurements are assumed if the \fB\-d\fR option is given. Smooth, generic data are assumed if the \fB\-s\fR option is given. This man page documents only \fBsnaphu\fR's syntax and usage. Its theoretical foundations are discussed in the references cited below. The most common input parameters may be given on the command line, while many other twiddle parameters are handled via the \fB\-f\fR option and configuration files. At the very least, the name of a wrapped-phase input file and its line length must be specified. Range should increase towards the right in the interferogram, and the flat-earth phase ramp should be removed from the input interferogram before \fBsnaphu\fR is run. For deformation interferograms, phase variations due to topography should be removed as well. Except for the input file name and the line length, all input parameters take default values if not specified. However, these parameters should be customized whenever possible since the accuracy of the solution depends on how well the statistics of the estimation problem are modeled. To avoid poor-quality solutions, users are strongly encouraged to provide their best estimates of the relevant problem parameters. Parameters are set in the order in which they are given on the command line, so multiple configuration files or options may be given, with later values overriding earlier ones. Allowable file formats are detailed below. The default format for the input file is COMPLEX_DATA, but any of the described formats may be used. If either of the ALT_LINE_DATA or ALT_SAMPLE_DATA formats are used, the magnitude and phase (in radians) of the interferogram should be in the first and second channels of the file, respectively. If the FLOAT_DATA format is used, the input file should contain only the phase of the interferogram (in radians); the magnitude may be passed with the \fB\-m\fR option. .SH OPTIONS .TP \fB\-a\fP \fIampfile\fP Read brightness data from the file \fIampfile\fP. The file should contain the amplitudes (not powers) of the two individual SAR images forming the interferogram if the formats ALT_SAMPLE_DATA (default) or ALT_LINE_DATA are used. It should contain an average of those two images if the FLOAT_DATA format is used. If (1) the amplitudes of both images are available, (2) the interferogram magnitude is also available, and (3) the \fB\-c\fP option is not used, then a coherence estimate is automatically formed from the available data. The number of looks used for this estimate can be set in a configuration file. If no amplitude or power data are specified, then the magnitude of the input interferogram is used as the average amplitude, and no coherence estimate is formed. Note that the magnitude of the interferogram is not equal to the average amplitude of the SAR images. The amplitude data should be in the same system of units used for the input interferogram, and also coregistered to it. .TP \fB\-A\fP \fIpwrfile\fP Similar to the \fB\-a\fP option, except the data in the specified file is assumed to represent the powers of the two individual SAR images. .TP \fB\-b\fP \fIBperp\fP For topography mode, use \fIBperp\fP (decimal value, in meters) as the value of the perpendicular component of the interferometric baseline. The sign is defined such that \fIBperp\fP is negative if the unwrapped phase increases with the elevation. By default, repeat-pass or ping-pong mode is assumed; for single-antenna-transmit data, the value of \fIBperp\fP should be halved, or the transmit mode should be set accordingly in a configuration file (see the \fB\-f\fP option). The baseline value is only used in topography mode. .TP \fB\-c\fP \fIcorrfile\fP Read correlation data from the file \fIcorrfile\fP. The correlation data should be the same size as, and registered to, the input interferogram. Consequently, a raw correlation estimate may need to be upsampled if it incorporates more looks than the interferogram. If the \fB\-c\fP option is not given, a coherence estimate is formed from the available data if possible. Otherwise, a uniform default coherence is assumed for the entire interferogram. If the ALT_LINE_DATA (default) or ALT_SAMPLE_DATA formats are used, the correlation data should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA format may also be used. The correlation values should be between zero and one, inclusive. .TP .B \-d Run in deformation mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents surface displacement rather than elevation. .TP \fB\-e\fP \fIestimatefile\fP Flatten using the unwrapped phase estimate in the file \fIestimatefile\fP. The estimate is subtracted from the input interferogram before unwrapping, and is inserted back into the solution just before the output is written. The estimate also affects the cost functions used, since subtracting a constant from a random variable shifts the probability density function of the random variable. If the formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped estimate (in radians) should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA format may also be used. .TP \fB\-f\fP \fIconfigfile\fP Read configuration parameters from file \fIconfigfile\fP. The file is parsed line by line for key-value pairs. Template configuration files are included with the \fBsnaphu\fP source code: \fIsnaphu.conf.full\fP contains all valid key-value pairs; \fIsnaphu.conf.brief\fP contains the most important parameters. Lines not beginning with alphanumeric characters are treated as comment lines. Command line options specified after \fB\-f\fP will override parameters specified in the \fIconfigfile\fP and vice versa. The \fB\-f\fP option may be given multiple times with different configuration files, with parameters in later-specified files overriding those in earlier ones. .TP .B \-g \fImaskfile\fP Grow a connected component mask for the unwrapped solution and write the mask to the file \fImaskfile\fP. A connected component is a region of pixels in the solution that is believed to have been unwrapped in a relative, internally self-consistent manner according to the statistical costs used. Regions that are smaller than a preselected threshold are masked out. Parameters for this option can be set in the configuration file. The connected component file is composed of unsigned characters, with all pixels of the same value belonging to the same connected component and zero corresponding to masked pixels. .TP .B \-G \fImaskfile\fP Grow a connected component mask (see the \fB\-g\fP option) for the input data array, assuming that it is already unwrapped, and write the mask to the file \fImaskfile\fP. Statistical cost functions are computed for forming the mask, but a new unwrapped solution is not computed. .TP .B \-h Print a help message summarizing command-line options and exit. .TP .B \-i Run in initialize-only mode. Normally, \fBsnaphu\fP uses either an approximate minimum spanning tree (MST) algorithm or a minimum cost flow (MCF) algorithm for generating the initialization to its iterative, modified network-simplex solver. If \fB\-i\fP is given, the initialization is written to the output and the program exits without running the iterative solver. .TP \fB\-l\fP \fIlogfile\fP Log all runtime parameters and some other environment information into the specified file. The log file is a text file in the same format as a configuration file. .TP \fB\-m\fP \fImagfile\fP Read interferogram magnitude data from the specified file. This option is useful mainly if the wrapped-phase input file is given as a set of real phase values rather than complex interferogram values. The interferogram magnitude is used to form a coherence estimate if appropriate amplitude data are given as well. The default file format is FLOAT_DATA. If the formats ALT_LINE_DATA or ALT_SAMPLE_DATA are used, the magnitude should be in the first data channel of the file; the second channel is ignored. If the COMPLEX_DATA format is used, the phase information is ignored. .TP .B \-n Run in no-statistical-costs mode. If the \fB\-i\fP or \fB\-p\fP options are given, \fBsnaphu\fP will not use statistical costs. Information from a weight file (\fB\-w\fP option) will still be used if given. .TP \fB\-o\fP \fIoutfile\fP Write the unwrapped output to file called \fIoutfile\fP. If the file formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped phase is written into the second data channel, while the interferogram magnitude is written into the first channel. The format FLOAT_DATA may also be used. .TP \fB\-p\fP \fIvalue\fP Run in Lp-norm mode with p=\fIvalue\fP, where \fIvalue\fP is a nonnegative decimal. Instead of statistical cost functions, the program uses Lp cost functions with statistically based weights (unless \fB\-n\fP is also given). Solutions are still always congruent. Moreover, congruence is enforced within the solver routine, not as a post-optimization processing step. Therefore, if p=2, for example, least-squares cost functions are used, but the solution will probably be more accurate than one generated from a transform-based least-squares algorithm. .TP .B \-q Run in quantify-only mode. The input data are assumed to be unwrapped already, and the total cost of this solution is calculated and printed. The unwrapped phase is wrapped assuming congruence for the cost calculation. Round-off errors may limit the precision of the quantified cost. See the \fB\-u\fP option for allowable file formats. .TP .B \-s Run in smooth-solution mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents a generic surface with no discontinuities. This is the same as deformation mode with the DEFOMAX parameter set to zero. .TP .B \-t Run in topography mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents surface elevation. This is the default. .TP .B \-u Assume that the input file is unwrapped rather than wrapped. The algorithm makes iterative improvements to this solution instead of using an initialization routine. The input file may be in the formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA; the interferogram magnitude should be in the first data channel and the unwrapped phase should be in the second data channel. The format FLOAT_DATA may also be used. .TP .B \-v Run in verbose mode. Extra information on the algorithm's progress is printed to the standard output. .TP \fB\-w\fP \fIweightfile\fP Read external, scalar weights from file \fIweightfile\fP. The weights, which should be positive short integers, are applied to whichever cost functions are used. There is one weight value for each arc in the network, so \fIweightfile\fP should be the concatenation of raster horizontal-flow and vertical-flow arc weights. Thus, for an N row by M column interferogram, \fIweightfile\fP would consist of a rasterized (N-1) by M array followed by a rasterized N by (M-1) array of short integer data. This option is not well tested. .TP \fB\-\-aa\fP \fIampfile1 ampfile2\fP Amplitude data are read from the files specified. The data from the two individual SAR images forming the interferogram are assumed to be separately stored in files \fIampfile1\fP and \fIampfile2\fP. These files should be in the format FLOAT_DATA. This option is similar to the \fB\-a\fP option. .TP \fB\-\-AA\fP \fIpwrfile1 pwrfile2\fP Similar to the \fB\-\-aa\fP option, but power data are read from the specified files. .TP \fB\-\-assemble \fIdirname\fP Assemble the tile-mode temporary files in the specified directory. Most configuration options (from the command line and any configuration files) must be specified. This option is useful if the user wishes to modify tile-assembly parameters without unwrapping the individual tiles over again. .TP .B \-\-copyright, \-\-info Print the software copyright notice and bug report info, then exit. .TP \fB\-\-costinfile\fP \fIcostfile\fP Read statistical cost arrays from file \fIcostfile\fP. This file should be in the format written by the \fB\-\-costoutfile\fP option. The cost file does not control whether \fBsnaphu\fP runs in topography, deformation, or smooth-solution mode; the latter two must be specified explicitly even if \fIcostfile\fP was generated while running in those modes. .TP \fB\-\-costoutfile\fP \fIcostfile\fP Write statistical cost arrays to file \fIcostfile\fP. This option can be used with the \fB\-\-costinfile\fP option to save the time of generating statistical costs if the same costs are used multiple times. .TP .B \-\-debug, \-\-dumpall Dump all sorts of intermediate arrays to files. .TP .B \-\-mst Use a minimum spanning tree (MST) algorithm for the initialization. This is the default. .TP .B \-\-mcf Use a minimum cost flow (MCF) algorithm for the initialization. The cs2 solver by Goldberg and Cherkassky is used. The modified network-simplex solver in L1 mode may give different results than the cs2 solver, though in principle both should be L1 optimal. .TP .B \-\-nproc \fIn\fP Use \fIn\fP parallel processes when in tile mode. The program forks a new process for each tile so that tiles can be unwrapped in parallel; at most \fIn\fP processes will run concurrently. Forking is done before data is read. The standard output streams of child processes are directed to log files in the temporary tile directory. .TP .B \-\-piece \fIfirstrow firstcol nrow ncol\fP Read and unwrap only a subset or part of the input interferogram. The read piece is the \fInrow\fP by \fIncol\fP rectangle whose upper left corner is the pixel at row \fIfirstrow\fP and column \fIfirstcol\fP (indexed from 1). All input files (such as amplitude, coherence, etc.) are assumed to be the same size as the input phase file. All output files are \fInrow\fP by \fIncol\fP. .TP .B \-\-tile \fIntilerow ntilecol rowovrlp colovrlp\fP Unwrap the interferogram in tile mode. The interferogram is partitioned into \fIntilerow\fP by \fIntilecol\fP tiles, each of which is unwrapped independently. Tiles overlap by \fIrowovrlp\fP and \fIcolovrlp\fP pixels in the row and column directions. The tiles are then segmented into reliable regions based on the cost functions, and the regions are reassembled. The program creates a subdirectory for temporary files in the directory of the eventual output file. This option is currently enabled only for statistical cost functions. .SH FILE FORMATS The formats of input files may be specified in a configuration file. All of these formats are composed of raster, single-precision (float, real*4, or complex*8) floating-point data types in the platform's native byte order. Data are read line by line (across then down). Regardless of the file format, all input data arrays should have the same number of samples in width and depth and should be coregistered to one another. Note that weight files and cost files have their own formats. The allowable formats for other data files are described below. .TP COMPLEX_DATA Alternating floats correspond to the real (in-phase) and imaginary (quadrature) components of complex data samples. The specified line length should be the number of complex samples (pairs of real and imaginary samples) per line. .TP ALT_LINE_DATA Alternating lines (rows) of data correspond to lines of purely real data from two separate arrays. The first array is often the magnitude of the interferogram, and the second may be unwrapped phase, coherence, etc. This is also sometimes called \fBhgt\fP or line-interleaved format. .TP ALT_SAMPLE_DATA Alternating samples correspond to purely real samples from two separate arrays. This format is sometimes used for the amplitudes of the two SAR images. .TP FLOAT_DATA The file contains data for only one channel or array, and the data are purely real. .SH EXAMPLES Unwrap a wrapped topographic interferogram called ``wrappedfile'' whose line length is 1024 complex samples (output will be written to a file whose name is compiled into the program): .nf snaphu wrappedfile 1024 .fi Unwrap the same file as above, but use brightness information from the file ``ampfile,'' set the perpendicular baseline to -165 m at midswath, and place the output in a file called ``unwrappedfile'' (coherence data are generated automatically if ``wrappedfile'' contains complex data and ``ampfile'' contains amplitude data from both SAR images): .nf snaphu wrappedfile 1024 -a ampfile \\\ -b -165 -o unwrappedfile .fi Unwrap the interferogram as above, but read correlation information from the file ``corrfile'' instead of generating it from the interferogram and amplitude data: .nf snaphu wrappedfile 1024 -a ampfile -c corrfile \\\ -b -165 -o unwrappedfile .fi The following is equivalent to the previous example, but input parameters are read from a configuration file, and verbose output is displayed: .nf cat > configfile # This is a comment line which will be ignored AMPFILE ampfile CORRFILE corrfile BPERP -165 OUTFILE unwrappedfile snaphu -v -f configfile wrappedfile 1024 .fi Unwrap the same interferogram, but use only the MST initialization (with scalar statistical weights) and write the output to ``mstfile'': .nf snaphu -f configfile -i wrappedfile 1024 -o mstfile .fi Read the unwrapped data in ``mstfile'' and use that as the initialization to the modified network-simplex solver: .nf snaphu -f configfile -u mstfile 1024 -o unwrappedfile .fi Note that in the previous two examples, the output file name in the configuration file is overrided by the one given on the command line. The previous two commands together are in principle equivalent to the preceding one, although round-off errors in flow-to-phase conversions may cause minor differences Unwrap the interferogram as above, but use the MCF algorithm for initialization: .nf snaphu -f configfile wrappedfile 1024 --mcf .fi Unwrap the interferogram once again, but first flatten it with the unwrapped data in ``estfile,'' then reinsert the subtracted phase after unwrapping: .nf snaphu -f configfile wrappedfile 1024 -e estfile .fi The following assumes that the wrapped input interferogram measures deformation, not topography. Unwrap the interferogram with the given correlation data: .nf snaphu -d wrappedfile 1024 -c corrfile .fi Unwrap the input interferogram by minimizing the unweighted congruent L2 norm: .nf snaphu -p 2 -n wrappedfile 1024 .fi Unwrap the interferogram as a three-by-four set of tiles that overlap by 30 pixels, with the specified configuration file, using two processors: .nf snaphu wrappedfile 1024 -f configfile \\\ --tile 3 4 30 30 --nproc 2 .fi .SH "HINTS AND TIPS" The program may print a warning message about costs being clipped to avoid overflow. If too many costs are clipped, the value of COSTSCALE may need to be decreased in a configuration file (via the \fB\-f\fR option). If the program prints a warning message about an unexpected increase in the total solution cost, this is an indication that too many costs are clipped. It is usually okay if just a few costs are clipped. In topography mode, if the unwrapped result contains too many discontinuities, try increasing the value of LAYMINEI or decreasing the value of LAYCONST. The former determines the normalized intensity threshold for layover, and the latter is the relative layover probability. If there are too many discontinuities running in azimuth, try decreasing the value of AZDZFACTOR, which affects the ratio of azimuth to range costs. If the baseline is not known, take a guess at it and be sure its sign is correct. Specify the SAR imaging geometry parameters as well as possible. The defaults assume ERS data with five looks taken in azimuth. In deformation mode, if the unwrapped result contains too many discontinuities, try increasing the value of DEFOTHRESHFACTOR or decreasing the value of DEFOCONST. If the surface displacement varies slowly and true discontinuities are not expected at all, DEFOMAX_CYCLE can be set to zero. This behavior is also invoked with the \fB\-s\fR option. The resulting cost functions will be similar to correlation-weighted L2 cost functions, though the former are not necessarily centered on the wrapped gradients. Congruence is still enforced during rather than after optimization. The program can be run in initialize-only (\fB\-i\fR) mode for quick down-and-dirty MST or MCF solutions. .SH SIGNALS Once the iterative solver has started, \fBsnaphu\fR traps the interrupt (INT) and hangup (HUP) signals. Upon receiving an interrupt, for example if the user types Ctrl-C, the program finishes a minor iteration, dumps its current solution to the output, and exits. If a second interrupt is given after the first (caught) interrupt, the program exits immediately. If a hangup signal is received, the program dumps its current solution then continues to execute normally. .SH "EXIT STATUS" Upon successful termination, the program exits with code 0. Errors result in exit code 1. .SH FILES The following files may be useful for reference, but are not required. They are included in the program source distribution and may be installed somewhere on the system. .TP \fIsnaphu.conf.full\fP Template configuration file setting all valid input parameters (though some may be commented out). .TP \fIsnaphu.conf.brief\fP General-purpose template configuration file setting the most important or commonly modified input parameters. .PP In addition to parameters read from configuration files specified on the command line, default parameters may be read from a system-wide configuration file if such a file is named when the program is compiled. .SH BUGS The \fB\-w\fR option has not been tested exhaustively. Extreme shadow discontinuities (i.e., abrupt elevation drops in increasing range due to cliffs facing away from the radar) are not modeled that well in the cost functions for topography mode. Abrupt changes in surface reflectivity, such as those of coastlines between bright land and dark water, might be misinterpreted as layover and assigned inappropriate costs. The algorithm's behavior may be unpredictable if the costs are badly scaled and excessively clipped to fit into their short-integer data types. There is no error checking that ensures that the network node potentials (incost and outcost) do not overflow their long-integer data types. Automatic flow clipping is built into the MST initialization, but it can give erratic results and may loop infinitely for certain input data sets. It is consequently turned off by default. Dedicated programs for specific Lp objective functions may work better than \fBsnaphu\fR in Lp mode. Note that snaphu enforces congruence as part of the problem formulation, however, not as a post-optimization processing step. .SH REFERENCES C. W. Chen and H. A. Zebker, ``Two-dimensional phase unwrapping with use of statistical models for cost functions in nonlinear optimization,'' \fIJournal of the Optical Society of America A\fP, \fB18\fP, 338-351 (2001). C. W. Chen and H. A. Zebker, ``Network approaches to two-dimensional phase unwrapping: intractability and two new algorithms,'' \fIJournal of the Optical Society of America A\fP, \fB17\fP, 401-414 (2000). C. W. Chen and H. A. Zebker, ``Phase unwrapping for large SAR interferograms: Statistical segmentation and generalized network models,'' \fIIEEE Transactions on Geoscience and Remote Sensing\fP, \fB40\fP, 1709-1719 (2002). GMTSAR_V5.7/.svn/pristine/000755 015705 000000 00000000000 13505462014 016262 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/entries000644 015705 000000 00000000003 13505462012 016010 0ustar00sandwellwheel000000 000000 12 GMTSAR_V5.7/.svn/format000644 015705 000000 00000000003 13505462012 015627 0ustar00sandwellwheel000000 000000 12 GMTSAR_V5.7/.svn/wc.db000644 015705 000000 00001640000 13507227512 015352 0ustar00sandwellwheel000000 000000 SQLite format 3@ t.$ O[Usvn://gmtserver.soest.hawaii.edu/GMTSARa547e0ec-64cf-4d6c-80b5-aae2c1ebc685 *[ svn://gmtserver.soest.hawaii.edu/GMTSAR !WORK_QUEUE  WCROOT ! REPOSITORY 'U a547e0ec-64cf-4d6c-80b5-aae2c1ebc685 *[ svn://gmtserver.soest.hawaii.edu/GMTSAR     qhx`NX$NzGPB&=|6R1((~#T"* UyA Y!@3i$sha1$8624bcdae55baeef00cd11d5dfcfa60f68710a02043i$sha1$673f6cca90dbcb78b2759c53287022028dba3caaY%3i$sha1$1e22bed4e58a3168dcaff411939b33058ad5a9a6d3i$sha1$dc9ca369a8c9ca069f50742be1fa0e7537659e846I3i$sha1$be3611c8a65790a06ec573ea176d66a2bd3f5d96s2i$sha1$9c0b3b303fea16e2e763cc620b847a7df03e1f09>8&2i$sha1$3d11a654aada52113e648a7f744aa15ec394db53TB^p8+Y$md5 $6e9b0b4d3b11d8f90b119c865e35aa00#n+Y$md5 $8337f3c33c5974854619657031cfe94e;+Y$md5 $adf59f1e9f54bfba8657503641f686a5.-+Y$md5 $4af3c5eef0354ccffd88c46501d6e102,+Y$md5 $21d7097932a09a9e37dfadb4b5212a27"Q+Y$md5 $d9b7206df7f254201e609b3555d4fd6b      99999~77777777777777777777777777777 n  &"t|vpjd^XRLF@:4.("r+pomqjbgWfLe=c&_]\sZaTQS>P)OKJsHdFED1<|5AA> :m9\EK332. +v!:*b$L *lZaE preproc/ERS_preproc/read_data_file_ccrs/read_data_file_ccrs.cYG preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dddb.cOM, Wpreproc/ALOS_preproc/lib_src/Makefile?0 _preproc/ALOS_preproc/ALOS_fbd2ss/Makefile0 3gmtsar/filters/ydirX/ 9gmtsar/csh/p2p_ERS.csh e k:+ *  [{ u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dsd.h^R6 3Cpreproc/CSK_preprocpreproc/CSK_preproc/include)AiE ;Ypreproc/RS2_preproc/srcpreproc/RS2_preproc/src/make_slc_rs2.c]b6 3Cpreproc/ERS_preprocpreproc/ERS_preproc/includeoL| s preproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftpreproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/test_shift.c+7. )?gmtsar/filtersgmtsar/filters/gaussian.mV$CV Mipreproc/ALOS_preproc/ALOS_fbd2sspreproc/ALOS_preproc/ALOS_fbd2ss/ALOS_fbd2ss.c)2 !Mgmtsar/cshgmtsar/csh/p2p_S1_TOPS_Frame.csh'/ !Ggmtsar/cshgmtsar/csh/MAI_processing.cshWV  &H  @ ?  o @j wtableLOCKLOCKCREATE TABLE LOCK ( repos_id INTEGER NOT NULL REFERENCES REPOSITORY (id), repos_relpath TEXT NOT NULL, lock_token TEXT NOT NULL, lock_owner TEXT, lock_comment TEXT, lock_date INTEGER, PRIMARY KEY (repos_id, repos_relpath) ))4+#'indexI_ACTUAL_PARENTACTUAL_NODECREATE UNIQUE INDEX I_ACTUAL_PARENT ON ACTUAL_NODE (wc_id, parent_relpath, local_relpath)< ##?tableACTUAL_NODEACTUAL_NODE CREATE TABLE ACTUAL_NODE ( wc_id INTEGER NOT NULL REFERENCES WCROOT (id), local_relpath TEXT NOT NULL, parent_relpath TEXT, properties BLOB, conflict_old TEXT, conflict_new TEXT, conflict_working TEXT, prop_reject TEXT, changelist TEXT, text_mod TEXT, tree_conflict_data TEXT, conflict_data BLOB, older_checksum TEXT REFERENCES PRISTINE (checksum), left_checksum TEXT REFERENCES PRISTINE (checksum), right_checksum TEXT REFERENCES PRISTINE (checksum), PRIMARY KEY (wc_id, local_relpath) )5 I#indexsqlite_autoindex_ACTUAL_NODE_1ACTUAL_NODEX )yindexI_PRISTINE_MD5PRISTINE CREATE INDEX I_PRISTINE_MD5 ON PRISTINE (md5_checksum)M mtablePRISTINEPRISTINE CREATE TABLE PRISTINE ( checksum TEXT NOT NULL PRIMARY KEY, compression INTEGER, size INTEGER NOT NULL, refcount INTEGER NOT NULL, md5_checksum TEXT NOT NULL )/ Cindexsqlite_autoindex_PRISTINE_1PRISTINE _+indexI_LOCAL_ABSPATHWCROOT CREATE UNIQUE INDEX I_LOCAL_ABSPATH ON WCROOT (local_abspath)xKtableWCROOTWCROOTCREATE TABLE WCROOT ( id INTEGER PRIMARY KEY AUTOINCREMENT, local_abspath TEXT UNIQUE )+?indexsqlite_autoindex_WCROOT_1WCROOTD!]indexI_ROOTREPOSITORYCREATE INDEX I_ROOT ON REPOSITORY (root)D!]indexI_UUIDREPOSITORYCREATE INDEX I_UUID ON REPOSITORY (uuid)P++Ytablesqlite_sequencesqlite_sequenceCREATE TABLE sqlite_sequence(name,seq)!!tableREPOSITORYREPOSITORYCREATE TABLE REPOSITORY ( id INTEGER PRIMARY KEY AUTOINCREMENT, root TEXT UNIQUE NOT NULL, uuid TEXT NOT NULL )3G!indexsqlite_autoindex_REPOSITORY_1REPOSITORY eXsD l A . $ eK %%[tablesqlite_stat1sqlite_stat1CREATE TABLE sqlite_stat1(tbl,idx,stat)s3!indexI_EXTERNALS_DEFINEDEXTERNALSCREATE UNIQUE INDEX I_EXTERNALS_DEFINED ON EXTERNALS (wc_id, def_local_relpath, local_relpath)V{tableEXTERNALSEXTERNALSCREATE TABLE EXTERNALS ( wc_id INTEGER NOT NULL REFERENCES WCROOT (id), local_relpath TEXT NOT NULL, parent_relpath TEXT NOT NULL, repos_id INTEGER NOT NULL REFERENCES REPOSITORY (id), presence TEXT NOT NULL, kind TEXT NOT NULL, def_local_relpath TEXT NOT NULL, def_repos_relpath TEXT NOT NULL, def_operational_revision TEXT, def_revision TEXT, PRIMARY KEY (wc_id, local_relpath) )1Eindexsqlite_autoindex_EXTERNALS_1EXTERNALSLGEtriggernodes_update_checksum_triggernodesCREATE TRIGGER nodes_update_checksum_trigger AFTER UPDATE OF checksum ON nodes WHEN NEW.checksum IS NOT OLD.checksum BEGIN UPDATE pristine SET refcount = refcount + 1 WHERE checksum = NEW.checksum; UPDATE pristine SET refcount = refcount - 1 WHERE checksum = OLD.checksum; ENDW5mtriggernodes_delete_triggernodesCREATE TRIGGER nodes_delete_trigger AFTER DELETE ON nodes WHEN OLD.checksum IS NOT NULL BEGIN UPDATE pristine SET refcount = refcount - 1 WHERE checksum = OLD.checksum; ENDW5mtriggernodes_insert_triggernodesCREATE TRIGGER nodes_insert_trigger AFTER INSERT ON nodes WHEN NEW.checksum IS NOT NULL BEGIN UPDATE pristine SET refcount = refcount + 1 WHERE checksum = NEW.checksum; ENDc!!viewNODES_BASENODES_BASECREATE VIEW NODES_BASE AS SELECT * FROM nodes WHERE op_depth = 0''QviewNODES_CURRENTNODES_CURRENTCREATE VIEW NODES_CURRENT AS SELECT * FROM nodes AS n WHERE op_depth = (SELECT MAX(op_depth) FROM nodes AS n2 WHERE n2.wc_id = n.wc_id AND n2.local_relpath = n.local_relpath)e'indexI_NODES_MOVEDNODESCREATE UNIQUE INDEX I_NODES_MOVED ON NODES (wc_id, moved_to, op_depth)))indexI_NODES_PARENTNODESCREATE UNIQUE INDEX I_NODES_PARENT ON NODES (wc_id, parent_relpath, local_relpath, op_depth))=indexsqlite_autoindex_NODES_1NODESU tableNODESNODESCREATE TABLE NODES ( wc_id INTEGER NOT NULL REFERENCES WCROOT (id), local_relpath TEXT NOT NULL, op_depth INTEGER NOT NULL, parent_relpath TEXT, repos_id INTEGER REFERENCES REPOSITORY (id), repos_path TEXT, revision INTEGER, presence TEXT NOT NULL, moved_here INTEGER, moved_to TEXT, kind TEXT NOT NULL, properties BLOB, depth TEXT, checksum TEXT REFERENCES PRISTINE (checksum), symlink_target TEXT, changed_revision INTEGER, changed_date INTEGER, changed_author TEXT, translated_size INTEGER, last_mod_time INTEGER, dav_cache BLOB, file_external INTEGER, inherited_props BLOB, PRIMARY KEY (wc_id, local_relpath, op_depth) )-Aindexsqlite_autoindex_WC_LOCK_1WC_LOCKbtableWC_LOCKWC_LOCKCREATE TABLE WC_LOCK ( wc_id INTEGER NOT NULL REFERENCES WCROOT (id), local_dir_relpath TEXT NOT NULL, locked_levels INTEGER NOT NULL DEFAULT -1, PRIMARY KEY (wc_id, local_dir_relpath) )}!!EtableWORK_QUEUEWORK_QUEUECREATE TABLE WORK_QUEUE ( id INTEGER PRIMARY KEY AUTOINCREMENT, work BLOB NOT NULL )';indexsqlite_autoindex_LOCK_1LOCK    _H_+ 3#EXTERNALSI_EXTERNALS_DEFINED100 100 3 12EEXTERNALSsqlite_autoindex_EXTERNALS_1100 100 1.AWC_LOCKsqlite_autoindex_WC_LOCK_1100 100 1(;LOCKsqlite_autoindex_LOCK_1100 100 1,#+)ACTUAL_NODEI_ACTUAL_PARENT8000 8000 10 18#I#ACTUAL_NODEsqlite_autoindex_ACTUAL_NODE_18000 8000 1#''NODESI_NODES_MOVED8000 8000 1 1')-NODESI_NODES_PARENT8000 8000 10 2 1.='NODESsqlite_autoindex_NODES_18000 8000 2 1 _7  y c ,l2777e_* 1 Ki#gmtsar/read_data.cgmtsarbranches/5.7/gmtsar/read_data.cnormalfile()$sha1$7f129947d762309dc2a13f953a6a7ada37e36f98iv$yxxu-svn-gmt f& - Gi#gmtsar/acpatch.cgmtsarbranches/5.7/gmtsar/acpatch.cnormalfile()$sha1$2fa17cb17aadc7f657fb0b1056f83949e1c209afiv$yxxu-svn-gmt{f" ) Ci#gmtsar/utils.cgmtsarbranches/5.7/gmtsar/utils.cnormalfile()$sha1$a2a203681d38016f50ff384c0e8bd318555833b7iv$yxxu-svn-gmtf % ?i#gmtsar/soi.hgmtsarbranches/5.7/gmtsar/soi.hnormalfile()$sha1$80581eb4b6b10fb55d5878dcd32d991b5533cd05iv$yxxu-svn-gmt9f % ?iconfig.guessbranches/5.7/config.guessnormalfile()$sha1$8f59a4c1a393d057511131811d2a06ca5e165c57*-AUqksandwellf ! ;iax_blas.m4branches/5.7/ax_blas.m4normalfile()$sha1$fd095de6c39d74feff3b5a89874354bdcd4427ab*-AUqksandwellf # =iGNUmakefilebranches/5.7/GNUmakefilenormalfile()$sha1$56e81c2f2566954c80a40893e810851c28cbca3bVpwessel0f % ?iBASICSVN.TXTbranches/5.7/BASICSVN.TXTnormalfile()$sha1$a1b02b0897af84695cd538ad430ec43959acbaccVpwesselSf  ) Ciax_lib_hdf5.m4branches/5.7/ax_lib_hdf5.m4normalfile()$sha1$0eacfb12d598dd1555b7c671bf5431f490a460f6*-AUqksandwell*f  % ?iconfig.mk.inbranches/5.7/config.mk.innormalfile()$sha1$a32057510953fc8ed54ad804603b52f6a74b1c19VlpwesselWfIT   1cmakebranches/5.7/cmakenormaldir()infinity|:k}fwobbew  ? Yicmake/ConfigDefault.cmakecmakebranches/5.7/cmake/ConfigDefault.cmakenormalfile(svn:keywords 31 Author Date Id Rev Revision URL svn:eol-style native)$sha1$b73e14a0532f0fc5051bf0d77869380c0830b278|:k}fwobbefi  ' Acmake/modulescmakebranches/5.7/cmake/modulesnormaldir()infinity|:k}fwobbe S' micmake/modules/CheckTypeExists.cmakecmake/modulesbranches/5.7/cmake/modules/CheckTypeExists.cmakenormalfile(svn:keywords 31 Author Date Id Rev Revision URL svn:eol-style native)$sha1$15cec8ace887167af7b48689ff8edc7b3d34d67bw9SVfwobbeXf C' ]icmake/modules/FindGMT.cmakecmake/modulesbranches/5.7/cmake/modules/FindGMT.cmakenormalfile(svn:keywords 31 Author Date Id Rev Revision URL svn:eol-style native)$sha1$913497a74526dac3d151d204d8da8213a127da7cw9SVfwobbe f  K' eicmake/modules/ConfigCMake.cmakecmake/modulesbranches/5.7/cmake/modules/ConfigCMake.cmakenormalfile(svn:keywords 31 Author Date Id Rev Revision URL svn:eol-style native)$sha1$3af6a2ae023b84e0b28f02c94b1954d2c3f1875a|:k}fwobbef ]' wicmake/modules/CheckPrototypeExists.cmakecmake/modulesbranches/5.7/cmake/modules/CheckPrototypeExists.cmakenormalfile(svn:eol-style native svn:keywords 31 Author Date Id Rev Revision URL)$sha1$41162d9752750f0e431b0621db7730c370930accw9SVfwobbe1f S' micmake/modules/ConfigureChecks.cmakecmake/modulesbranches/5.7/cmake/modules/ConfigureChecks.cmakenormalfile(svn:eol-style native svn:keywords 31 Author Date Id Rev Revision URL)$sha1$321d7b5bd5c8affcb9ea6845c11927977fd83dc3w9SVfwobbe[/f= A9 N QL9*j4t AA$" + Ei#gmtsar/resamp.cgmtsarbranches/5.7/gmtsar/resamp.cnormalfile()$sha1$2d3c11d08f80cdd5bb23acbdcf8d8d7f4c0a94c0iv$yxxu-svn-gmtMf,! 3 Mi#gmtsar/file_stuff.cgmtsarbranches/5.7/gmtsar/file_stuff.cnormalfile()$sha1$ad19b3d5efcb7cfcdb419e335edecdb7c62f7487iv$yxxu-svn-gmt&f:  A [i#gmtsar/interpolate_orbit.cgmtsarbranches/5.7/gmtsar/interpolate_orbit.cnormalfile()$sha1$a5d1236c29fb8b949eac2979f9f6a07984044dc0iv$yxxu-svn-gmt Jf$ + Ei#gmtsar/geoxyz.cgmtsarbranches/5.7/gmtsar/geoxyz.cnormalfile()$sha1$65eb93a9c5dbf081432486721386daf93f4820d6iv$yxxu-svn-gmtKf, 3 Mi#gmtsar/phase2topo.cgmtsarbranches/5.7/gmtsar/phase2topo.cnormalfile()$sha1$8b3a7038d68be407365156e04744b2f0c0408e3aiv$yxxu-svn-gmtif, 3 Mi#gmtsar/siocomplex.cgmtsarbranches/5.7/gmtsar/siocomplex.cnormalfile()$sha1$8400c3375880f632a183caacacb633bfce50b6d1iv$yxxu-svn-gmt1f* 1 Ki#gmtsar/ldr_orbit.cgmtsarbranches/5.7/gmtsar/ldr_orbit.cnormalfile()$sha1$74637c5ed94b640cbbd25a9ece13aa0fe0ea3717iv$yxxu-svn-gmt%fF ; U4i#gmtsar/update_PRM_sub.cgmtsarbranches/5.7/gmtsar/update_PRM_sub.cnormalfile(svn:executable 1 *)$sha1$d87f487d4fc3485a436581d5d856f0eea3a7abfbiv$yxxu-svn-gmtYf: A [i#gmtsar/do_time_int_xcorr.cgmtsarbranches/5.7/gmtsar/do_time_int_xcorr.cnormalfile()$sha1$abd6676bd30b456bee04919e0f06520c465e4440iv$yxxu-svn-gmt*f: A [i#gmtsar/parse_xcorr_input.cgmtsarbranches/5.7/gmtsar/parse_xcorr_input.cnormalfile()$sha1$d56af16769a6f9340340d27a6622549a35b1eb9aiv$yxxu-svn-gmt'7f )=& ?) Yigmtsar/filters/gauss13x13gmtsar/filtersbranches/5.7/gmtsar/filters/gauss13x13normalfile()$sha1$84dc472957da1a42add562de34951d04c996026f*-AUqksandwellf=% ?) Yigmtsar/filters/gauss5x5.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss5x5.mnormalfile()$sha1$35071d11678d99db4175f51e22e9aa250c8ec6f1*-AUqksandwellf.# 5 Oi#gmtsar/offset_topo.cgmtsarbranches/5.7/gmtsar/offset_topo.cnormalfile()$sha1$93d6c5b688548553347623add05e5495f26e6a4div$yxxu-svn-gmtf0 7 Qi#gmtsar/nearest_grid.cgmtsarbranches/5.7/gmtsar/nearest_grid.cnormalfile()$sha1$5d9b5c8a325dd70273f3022be9f89033fa547ba8iv$yxxu-svn-gmtf* 1 Ki#gmtsar/intp_coef.cgmtsarbranches/5.7/gmtsar/intp_coef.cnormalfile()$sha1$68f731b65d2eab0b5d04195ff4413d86e681e5a6iv$yxxu-svn-gmtfK* M) gigmtsar/filters/gauss_alos_100m.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_alos_100m.mnormalfile()$sha1$514fa1513ea9b26582b185c6d944314757abbf36*-AUqksandwellpf=) ?) Yigmtsar/filters/gauss15x15gmtsar/filtersbranches/5.7/gmtsar/filters/gauss15x15normalfile()$sha1$2fec5fd21b9ff8a5a00e7a2ed9d5faac58905669*-AUqksandwellf=( ?) Yigmtsar/filters/gauss33x33gmtsar/filtersbranches/5.7/gmtsar/filters/gauss33x33normalfile()$sha1$7c65a84e3b600727976ace2c47b34b35bbd2f09f*-AUqksandwelljfI' K) eigmtsar/filters/gauss_ers_100m.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_ers_100m.mnormalfile()$sha1$fecdc35959c154d317aebe4431f01d475c76e073*-AUqksandwellnf ^X@r * l 2tLBG0 I) cigmtsar/filters/gauss_alos_200mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_alos_200mnormalfile()$sha1$e431b0d22b761ac366cd1e467174408123cbbb7d*-AUqksandwellfE+ G) aigmtsar/filters/gauss_ers_200mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_ers_200mnormalfile()$sha1$e431b0d22b761ac366cd1e467174408123cbbb7d*-AUqksandwellfE/ I) cigmtsar/filters/gauss_tsx_50m.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_tsx_50m.mnormalfile()$sha1$506309dd4d18ddc1b2ba7f1a7e0024c1a82cf7e7s9=ntfwobbe`fK. M) gigmtsar/filters/gauss_alos_500m.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_alos_500m.mnormalfile()$sha1$445d51466e2c71f25ea2875514a586fe2d83f6f4*-AUqksandwellpfK- M) gigmtsar/filters/gauss_alos_300m.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_alos_300m.mnormalfile()$sha1$8c5216a06eb2a2248ec6da598170bea996f89b6c*-AUqksandwellqf=, ?) Yigmtsar/filters/gauss17x17gmtsar/filtersbranches/5.7/gmtsar/filters/gauss17x17normalfile()$sha1$ab10e93ca93a621523420a67b7f2932769a75748*-AUqksandwellNf\;: =) Wigmtsar/filters/gauss17x5gmtsar/filtersbranches/5.7/gmtsar/filters/gauss17x5normalfile()$sha1$5e5e784b105d91aee97d64f4bad5473200556773*-AUqksandwellif19 3) Migmtsar/filters/xdirgmtsar/filtersbranches/5.7/gmtsar/filters/xdirnormalfile()$sha1$a88dd51f7d985c17de35d84b0cf44db00db1c9ca*-AUqksandwellf;8 =) Wigmtsar/filters/gauss15x5gmtsar/filtersbranches/5.7/gmtsar/filters/gauss15x5normalfile()$sha1$7e5a5bd1b5e0c3fd7f10adf8fcda80a669b4a9aa*-AUqksandwellfE7 G) aigmtsar/filters/sanandreas13x9gmtsar/filtersbranches/5.7/gmtsar/filters/sanandreas13x9normalfile()$sha1$4344075a7d0c32589d411418d9f1f475cbaba4d9*-AUqksandwellef;6 =) Wigmtsar/filters/gauss15x3gmtsar/filtersbranches/5.7/gmtsar/filters/gauss15x3normalfile()$sha1$711357cfe8fd3986eed2e8b46513964996e0be1d*-AUqksandwellf?5 A) [igmtsar/filters/sanandreas2gmtsar/filtersbranches/5.7/gmtsar/filters/sanandreas2normalfile()$sha1$50b4bbef7e89a25c6029ab7e311ff7c1ae529c98*-AUqksandwellfE4 G) aigmtsar/filters/sanandreas11x7gmtsar/filtersbranches/5.7/gmtsar/filters/sanandreas11x7normalfile()$sha1$35098a451549734c51e7414dda87ccc8b3262fd4*-AUqksandwellf;3 =) Wigmtsar/filters/gauss3x21gmtsar/filtersbranches/5.7/gmtsar/filters/gauss3x21normalfile()$sha1$71e57c56b4d4b47d10ace3dfb1b4c6ab49a43b2b*-AUqksandwell/fK2 M) gigmtsar/filters/gauss_alos_700m.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_alos_700m.mnormalfile()$sha1$553ad0399691ccacc7991366cf763a561504d857*-AUqksandwellof=1 ?) Yigmtsar/filters/gauss19x19gmtsar/filtersbranches/5.7/gmtsar/filters/gauss19x19normalfile()$sha1$9958c9ee3517881fe6aa2e9f52dd20219b9eed27*-AUqksandwell#Zf *D* n  T 9 }  c I/sY?%i O\*i Y$sha1$553ad0399691ccacc7991366cf763a561504d857o$md5 $9ae8fba7894f8778dc224e9e26f04b8d]$iY$sha1$e431b0d22b761ac366cd1e467174408123cbbb7d$md5 $19ab60d9cd7b27dc2375c27c1ac04791\(i Y$sha1$506309dd4d18ddc1b2ba7f1a7e0024c1a82cf7e7`$md5 $f123eca46c271480630372490f05ebad\'i Y$sha1$445d51466e2c71f25ea2875514a586fe2d83f6f4p$md5 $4c8f1e19daf7c7a27c39133ef920c3e2\&i Y$sha1$8c5216a06eb2a2248ec6da598170bea996f89b6cq$md5 $148351268ccdc68f4748ac158d886149\%i Y$sha1$ab10e93ca93a621523420a67b7f2932769a75748N$md5 $07fadd8b56bcb3ba0bf112a3e5dcad4e\)i Y$sha1$9958c9ee3517881fe6aa2e9f52dd20219b9eed27#Z$md5 $2775815315ecd5607831e22190ae447d\#i Y$sha1$514fa1513ea9b26582b185c6d944314757abbf36p$md5 $d7f8383fc4a16c50d4ced39c00b18eb6\"i Y$sha1$2fec5fd21b9ff8a5a00e7a2ed9d5faac58905669$md5 $83369a93c3654524c33c3a9166ba57c0\!i Y$sha1$7c65a84e3b600727976ace2c47b34b35bbd2f09fj$md5 $1b8fb968737cb80bc2513c7f1d03faa0\ i Y$sha1$fecdc35959c154d317aebe4431f01d475c76e073n$md5 $8b00e13f1932f59e622bbbd35ec5f185\i Y$sha1$84dc472957da1a42add562de34951d04c996026f$md5 $4d19a0d642640b26d6cd6568adc51b03\i Y$sha1$35071d11678d99db4175f51e22e9aa250c8ec6f1$md5 $8e5f9b98ffa9e84cfc78130a3525e705\i Y$sha1$93d6c5b688548553347623add05e5495f26e6a4d$md5 $4d809100da103444416b0a7b9a800426\i Y$sha1$2d3c11d08f80cdd5bb23acbdcf8d8d7f4c0a94c0M$md5 $e99e88e378144cb6c65743354659931a\i Y$sha1$ad19b3d5efcb7cfcdb419e335edecdb7c62f7487&$md5 $e6ebbe7ca80b06463e1bad607836bd8f\i Y$sha1$a5d1236c29fb8b949eac2979f9f6a07984044dc0 J$md5 $7f076aa66011bd8de220b1997a3a3890\i Y$sha1$65eb93a9c5dbf081432486721386daf93f4820d6K$md5 $80593e3ff0926f3a40ac129d6615f484\i Y$sha1$8b3a7038d68be407365156e04744b2f0c0408e3ai$md5 $245d93d20122aa4bdebbfad44fbfd44d\i Y$sha1$8400c3375880f632a183caacacb633bfce50b6d11$md5 $807a07e5b5e9b7030b6a48d82cf07f11\i Y$sha1$74637c5ed94b640cbbd25a9ece13aa0fe0ea3717%$md5 $1a97c23a3c2c0cc819f435d099be706e\i Y$sha1$d87f487d4fc3485a436581d5d856f0eea3a7abfbY$md5 $bad4e767ac9649481f9d9eef921ab295\i Y$sha1$abd6676bd30b456bee04919e0f06520c465e4440*$md5 $1536e01194a58b1ed194f4f659b9f2b7\i Y$sha1$d56af16769a6f9340340d27a6622549a35b1eb9a'7$md5 $16ef74e6a4800ebf4d7fa96cc9c8d1f3\i Y$sha1$5d9b5c8a325dd70273f3022be9f89033fa547ba8$md5 $0c7935da9aaf6f2106e26a3af618f65b\i Y$sha1$68f731b65d2eab0b5d04195ff4413d86e681e5a6$md5 $4ec13cd661ac86ec40381d8a378964bf\i Y$sha1$7f129947d762309dc2a13f953a6a7ada37e36f98 $md5 $e5bfe71004753b1f7a6263e0c72a0b4c\i Y$sha1$2fa17cb17aadc7f657fb0b1056f83949e1c209af{$md5 $6e46a3777a5d55c60eae8427077af278\i Y$sha1$a2a203681d38016f50ff384c0e8bd318555833b7$md5 $4183d6d079a32028f446c5c18e8637a4\ i Y$sha1$80581eb4b6b10fb55d5878dcd32d991b5533cd059$md5 $d2dd51b0af396975d4394959a83a8a6e] i Y$sha1$8f59a4c1a393d057511131811d2a06ca5e165c57$md5 $f27066cdcc9625c6f40715836b2da913\ i Y$sha1$fd095de6c39d74feff3b5a89874354bdcd4427ab$md5 $e1a9b6b75fa86eacebbe54cb2219464d\ i Y$sha1$56e81c2f2566954c80a40893e810851c28cbca3b0$md5 $6b4c356b5600043bbda8bcde2f6c4794\ i Y$sha1$a1b02b0897af84695cd538ad430ec43959acbaccS$md5 $727a77fc280bf7f973897c099ea65d16\i Y$sha1$0eacfb12d598dd1555b7c671bf5431f490a460f6*$md5 $8228137da6428e260b215262c00a0008\i Y$sha1$a32057510953fc8ed54ad804603b52f6a74b1c19W$md5 $504f50a334e69e90463c57044303cac3\i Y$sha1$b73e14a0532f0fc5051bf0d77869380c0830b278$md5 $54e510c4dbec88f878c32647d00abc89\i Y$sha1$15cec8ace887167af7b48689ff8edc7b3d34d67b $md5 $26fcf0e5d3367c610cab7a33f00c2e0c\i Y$sha1$913497a74526dac3d151d204d8da8213a127da7c \$md5 $5f8c95abf32444a79da4da46b15e4984\i Y$sha1$3af6a2ae023b84e0b28f02c94b1954d2c3f1875aW$md5 $16272326ee89929242f0e7ea46542187\i Y$sha1$41162d9752750f0e431b0621db7730c370930acc$md5 $dcc4ef2cee358b519294f6bf1c6099a0\i Y$sha1$321d7b5bd5c8affcb9ea6845c11927977fd83dc3Z$md5 $43a1ebe0f683f736c18dc3e9ea430174 *D* n  T ;  ! e M3w]C*oU\Ti Y$sha1$3d11a654aada52113e648a7f744aa15ec394db53v$md5 $d74418b901b4f51c021b1e654728eb56\Si Y$sha1$f71e471c7b4498b8ee0b2c84896f77459c24c9e0$md5 $28fa55e92edc9ac8e0750e03f18388b1\Ri Y$sha1$74325fffea70cf9ede74657581b8eb754ece0627c$md5 $d29d9b381f44d08c1d2533ff539df707\Qi Y$sha1$26fe63e00d38f3509df93519898cc76205f7eaa3 $md5 $de6c16f1deb4793314585c07b318bac9\Pi Y$sha1$db2ae78e04072e0aab3a5ead0e39b4e42bf4b740$md5 $eb43e8cec2b038ad173ed190eda6b7d9[Oi Y$sha1$99022608e5592a030b219d2fd564feb805ffb902a$md5 $99cea833857e07dba3194948b9b9f4de\Ni Y$sha1$cbbde935edf7975bbfceaa1ec31aee898cf443b7$md5 $3519730c9449fc13291ccbda725d9983\Mi Y$sha1$68026814226ad9324144bd5d15b973892b771cee$md5 $2fe08bf23fc08cf6a8cf536ae1bfca55\Li Y$sha1$c7aa9cad1392c8343a51412a781543685cb87c51Q$md5 $2fdff59db4d7679233aecaffa0e10239[Ki Y$sha1$edab0f3aa753bd3139b802c86963b09c6324b6b3$md5 $e7f3af2f39bba43305b6fbb8f3903e03\Ji Y$sha1$5d6c0861f7277d3fb735bb2124783f1b103f2e07$md5 $a0d0a81f9ca4fc7279b0ffdd0f49ec5a\Ii Y$sha1$e2c1fe37f13c4db7fd0acda4701890ffaf422258T$md5 $dc1acd23bc35b89dd29393deacbae816\Hi Y$sha1$02d1eb963701f213a13d5400eb4f9c72b41f86dd$md5 $91cb208493a9ddfad7e387168d6101e1\Gi Y$sha1$11ef715414ed520afd739822f744b72005579c12RD$md5 $afa4e5b4fbcc126e3c2e600e1009fd94\Fi Y$sha1$371e94db7cc42c24868bfa05db92b476e413c02d $md5 $651536df5a73f56733710481f475a5c2\Ei Y$sha1$20c2bc32fe097c4c6cf9faefa3c2d92de2bb0178e$md5 $dc04a35490bda6b78a985dec88a1dbdc\Di Y$sha1$719152350ffdfe5f4c12cfa942919be36bd7a175z$md5 $b792c584ed2defba1a6e7427965ede3e\Ci Y$sha1$3c762876fbc9a8397375677825aa5f33b235c34e$md5 $692a0dcea7e4a80d47f1c8dadea86125\Bi Y$sha1$da686e534999dd1b848d5e01a81619ff0615c0b1p$md5 $4d7ff3cc913ce64900ed919e1b420ac3\Ai Y$sha1$960ab21caa38d6166e511d8a9e35c034affb798cz$md5 $6f9f941276869c1f7b74ce354c91e73a\@i Y$sha1$53339edc0a501c1522df2077be26638ca1997662=($md5 $0c5aad9a9587885fd0f0c7f4220906ca[?i Y$sha1$fd64c8a422d76b2730afa99d4c89fca4d83cdb481$md5 $420ce976d832850fe2a79b75251eab1c\>i Y$sha1$9c0b3b303fea16e2e763cc620b847a7df03e1f09$md5 $482634db2d7a3688f2cd7ca7448c2122[=i Y$sha1$99b648bc3c18d0c118b42b9f9924aeb6ffb3209b $md5 $f2827784fe1f94c1c2684e3efffc84cd\<i Y$sha1$d1283300ef070eb148a1ee14828350d8485506f7$md5 $15c68bbe63d17a5534fc014881c0cd53\;i Y$sha1$eefeb1512e2eec99fa0651af5ec0e931125ac736z$md5 $94c13000f36707e7f2747870e0c9d72f\:i Y$sha1$23ee9e1d5099dbba40458a11e1e98316fc164f86$md5 $2d1d626344f8580948d1768f7b0731b0\9i Y$sha1$c43f730bd30d8cc5946cf3f5aca39eb140031545+,$md5 $656ff008246222ef8afbf05b9ff002a5\8i Y$sha1$93fc089ba3f359ba52ead69906d84e5a7144bdafP$md5 $b6586d1edfff4228f8a76cc065373154\7i Y$sha1$30ca4f7224fd66396167e774280036cb72244434$md5 $d72ab3d136337e49ed8b86753c617415\6i Y$sha1$4c447e47b5cd07c140ae06140304b1f581450bfe $md5 $1672986dc42e7fe7ba9a279f8949dfdf[5i Y$sha1$66e5cd1f28b6b08d6fda301ad8019d45a92b28c2$md5 $4d34672867f9f610011fe6c7b002d5ce\4i Y$sha1$361961b6cd7667a32c11325c05e30e6206edb206$md5 $c74ff901cfa431ae80111aecee36913f\3i Y$sha1$95e2b19f0082257b1cd5dbf1692902cb52e7ef16a$md5 $f6dbd1bdf0e3675e1ad756ce8d7029f1\2i Y$sha1$5e5e784b105d91aee97d64f4bad5473200556773i$md5 $2ad24613fc9f969c2e22d272672acb91\1i Y$sha1$a88dd51f7d985c17de35d84b0cf44db00db1c9ca$md5 $d777a47e63673924ec71ba94ef83a8ba\0i Y$sha1$7e5a5bd1b5e0c3fd7f10adf8fcda80a669b4a9aa$md5 $bebd0dd8ec15518fde3fc86284cff023\/i Y$sha1$4344075a7d0c32589d411418d9f1f475cbaba4d9e$md5 $b4a0f4cb24139989af389a61a41ae410\.i Y$sha1$711357cfe8fd3986eed2e8b46513964996e0be1d$md5 $48c96326840b2ba4e06077771dcaa07e\-i Y$sha1$50b4bbef7e89a25c6029ab7e311ff7c1ae529c98$md5 $441d9b8ec01e12d4d4124138f576bb4e\,i Y$sha1$35098a451549734c51e7414dda87ccc8b3262fd4$md5 $2bab3935fb620ecfbef8e853bf0dba60\+i Y$sha1$71e57c56b4d4b47d10ace3dfb1b4c6ab49a43b2b/$md5 $e976062d17a3713887129723b7c2f85d B + k %7{<nGL I) cigmtsar/filters/gauss_alos_100mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_alos_100mnormalfile()$sha1$719152350ffdfe5f4c12cfa942919be36bd7a175*-AUqksandwellzf9K ;) Uigmtsar/filters/gauss9x9gmtsar/filtersbranches/5.7/gmtsar/filters/gauss9x9normalfile()$sha1$3c762876fbc9a8397375677825aa5f33b235c34e*-AUqksandwellfKJ M) gigmtsar/filters/gauss_alos_200m.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_alos_200m.mnormalfile()$sha1$da686e534999dd1b848d5e01a81619ff0615c0b1*-AUqksandwellpfEI G) aigmtsar/filters/gauss_ers_100mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_ers_100mnormalfile()$sha1$960ab21caa38d6166e511d8a9e35c034affb798c*-AUqksandwellzf=H ?) Yigmtsar/filters/gauss25x25gmtsar/filtersbranches/5.7/gmtsar/filters/gauss25x25normalfile()$sha1$53339edc0a501c1522df2077be26638ca1997662*-AUqksandwell=(f4G 7) Qigmtsar/filters/box5x3gmtsar/filtersbranches/5.7/gmtsar/filters/box5x3normalfile()$sha1$fd64c8a422d76b2730afa99d4c89fca4d83cdb48*-AUqksandwell1f9F ;) Uigmtsar/filters/gauss9x5gmtsar/filtersbranches/5.7/gmtsar/filters/gauss9x5normalfile()$sha1$9c0b3b303fea16e2e763cc620b847a7df03e1f09*-AUqksandwellf:E =) Wigmtsar/filters/slcfiltergmtsar/filtersbranches/5.7/gmtsar/filters/slcfilternormalfile()$sha1$99b648bc3c18d0c118b42b9f9924aeb6ffb3209b*-AUqksandwell fG; K) eigmtsar/filters/gauss_tsx_100m.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_tsx_100m.mnormalfile()$sha1$95e2b19f0082257b1cd5dbf1692902cb52e7ef16s9=ntfwobbeafgKD M) gigmtsar/filters/gauss_dir_range.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_dir_range.mnormalfile()$sha1$d1283300ef070eb148a1ee14828350d8485506f7*-AUqksandwellf9C ;) Uigmtsar/filters/gauss5x5gmtsar/filtersbranches/5.7/gmtsar/filters/gauss5x5normalfile()$sha1$eefeb1512e2eec99fa0651af5ec0e931125ac736*-AUqksandwellzf9B ;) Uigmtsar/filters/gauss5x3gmtsar/filtersbranches/5.7/gmtsar/filters/gauss5x3normalfile()$sha1$23ee9e1d5099dbba40458a11e1e98316fc164f86*-AUqksandwellf=A ?) Yigmtsar/filters/gauss21x21gmtsar/filtersbranches/5.7/gmtsar/filters/gauss21x21normalfile()$sha1$c43f730bd30d8cc5946cf3f5aca39eb140031545*-AUqksandwell+,fG@ I) cigmtsar/filters/gauss17x17_2siggmtsar/filtersbranches/5.7/gmtsar/filters/gauss17x17_2signormalfile()$sha1$93fc089ba3f359ba52ead69906d84e5a7144bdaf*-AUqksandwellPfG? I) cigmtsar/filters/gauss_dir_azi.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_dir_azi.mnormalfile()$sha1$30ca4f7224fd66396167e774280036cb72244434*-AUqksandwellfE> G) aigmtsar/filters/gauss_tsx_200mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_tsx_200mnormalfile()$sha1$4c447e47b5cd07c140ae06140304b1f581450bfe*-AUqksandwell f8= ;) Uigmtsar/filters/gauss1x1gmtsar/filtersbranches/5.7/gmtsar/filters/gauss1x1normalfile()$sha1$66e5cd1f28b6b08d6fda301ad8019d45a92b28c2*-AUqksandwellf;< =) Wigmtsar/filters/gauss33x9gmtsar/filtersbranches/5.7/gmtsar/filters/gauss33x9normalfile()$sha1$361961b6cd7667a32c11325c05e30e6206edb206*-AUqksandwellf HIe1a.@ _p + lx< [D ' X %  W #  T8 ! RtNK|H3i$sha1$071527a062fffdaed344c8337c47331ce1798bbc3i$sha1$0096769df2f4b3a9ab61a6b8a6f4eae44f191da73i$sha1$12ceb578d70baeda37e68a6b7081f641c77015773i$sha1$076a332b2901a759d19741814b1799ce9e01dc7c3i$sha1$0e447fcd933b8485752ee116d46b646e2ddc15853i$sha1$154600fb7f08e0ec3f0aa58dfb300bf204e28ed33i$sha1$089619dba241935e716800923189a42d939084913i$sha1$088848473491e83f395dede9237fe64b0b26f4893i$sha1$05d9eaabc9f8197241786c58ace29a063b83cd74z3i$sha1$1185fed2c9952e881e19888312162a87ddbe3e8b3i$sha1$16c240fc62c796bf5c0a6371b09cac21f6dbc53a3i$sha1$13ec8c550d5aca9844bd120807a45f7f6bd308bf3i$sha1$034b4d51b2119a850a58fc6f82a65454f57b61893i$sha1$18f42cf483ff8f9846caa86b2ea8dfd509531f623i$sha1$17c492b21b77189ca5ab79d939f4c5c8534f05323i$sha1$17f5e13431adbdd4d0e4f882cc7ea128ee34cbc13i$sha1$139f9e565345610e467632542c59aeb6f3742d8f3i$sha1$0bd5555bf079c1fc479b8341691ce519f9e504c23i$sha1$081238c5154cfa5f92a264f3bc86a54f888060073i$sha1$0557f29a8b92bfc84a5e48bb06d78172e30c6aa83i$sha1$1774d27969e33aba71fd57ae656b72c6ffa4fa343i$sha1$08e1250f8bd08c01b626469ccfaf5dd7cfefaab1g3i$sha1$0f6791daa6bd73abee8e5f7ad580965d3eabc48b3i$sha1$1241c3e9f6f3e37716a710c34eff52e1f5b01d8d 3i$sha1$1d82c99f4b9e289747e19cc2bde6b5e8cf02271c3i$sha1$1d19f46b820aab0f69b33b7a295a1a2f07fbba742i$sha1$1c4654ce554fa6a2262b6e760d69fc9f6d11d242X3i$sha1$1af17d72b093959e9834b5217a2e2991fe4a4b3c3i$sha1$1a9611bc93d729226e755d2998a83a12364230283i$sha1$19bc07edcd4a80224634c90a48f6573a2e0b0bb4L3i$sha1$1900e83c69b44f7fad5d8d723a2fac782ea58c333i$sha1$18cc894c6758f9784fe5446aa84aa1911ab653af@3i$sha1$18a08baa0a4fe59465a0d09c4a95a555ccc937223i$sha1$17930313e6df2e3e4b78479f17bf9382c7fb930c3i$sha1$175b95cae68c750bbe0c7da832ac21656fe41c35k3i$sha1$16c2e96b83975e1ff0d2743051d558cd326e012cC2i$sha1$15cec8ace887167af7b48689ff8edc7b3d34d67b3i$sha1$157e4840b45f96d657e3c9645b89254972103cae3i$sha1$13dcd2f57d4bee1f8f95195d44e537e05b6ff89c%2i$sha1$13ac74d180d2bf5b40604dcde3a2d85dd17c3db6z3i$sha1$12cd1dcbae854d7a3b8650453bf5353ccca367383i$sha1$12833a8e551e2d3bc6aba4a7f356400f602d9c503i$sha1$11f8d5d990c29fbdf45481b4fac8fe5887abe4fbM2i$sha1$11ef715414ed520afd739822f744b72005579c12G3i$sha1$11eb6331d6eefb228c60fc92881e1308ef7415cdO3i$sha1$1066ca01d3b34c285d30da15908a1251cd9475132i$sha1$0f955f088724171716e17625542851e923c42966}2i$sha1$0f6bfca3179d8e37f82693583b3d853b24c8a37fh3i$sha1$0f08aef8dc38fb3b48ee36b8fbd05602aaf0a60e2i$sha1$0eacfb12d598dd1555b7c671bf5431f490a460f63i$sha1$0e30bdf47ce50d0a25a9a915e51205bd5f1040893i$sha1$0e18888d972a24565c9d3eec2a8735c205fe3a873i$sha1$0cd82c5dc0626f81e504f547f5d926d3413ee5c42i$sha1$0caa62eba78e0f9cca568aa2844a159227109cc9`3i$sha1$0c7ca0c728ce415ba8f08fffb63ec597c01af31a3i$sha1$0a7a9feeb8233f2fb2f062f0f69cffd05403f9a03i$sha1$099bbfb6c17c1e07add69ce5b574c6e0479489203i$sha1$0725b2dbb344010d9fdccef19840b756fe9381e53i$sha1$06673c28b8c69ff1128b7047723fb763825517be)3i$sha1$05ece19f05427bd61cb0aae25668c258d23cc1c93i$sha1$0544368ed8970f79f1d9b301807e7086be4e8d05X2i$sha1$04a778d3f6976e414c55ff89366454e568944e79n3i$sha1$03f21661be43cd2e8356ab76c497503fe02e216b3i$sha1$036f4859e85670827aa796c9b4d23a3c3193b6b7'2i$sha1$02d1eb963701f213a13d5400eb4f9c72b41f86ddH3i$sha1$021b0a451f22f9485dce5bf8408f1287edc396f063i$sha1$01d23a3837b4c515fa8a221ba0242cc5ac77edef3i$sha1$01b1b35a9a421f0823b08b26ec9fbde120c1f9823i$sha1$01adffb8999f1a7d096e03cb6653f6785fdca1423i$sha1$015db74211e4a68d1c7fd17eaff526a1a2f891363i$sha1$00e8379ec2da3fbb56adad6ac2de779a230346f32i$sha1$008a02d00215debcd99f76dd0969b0981faf6a25q3i$sha1$0071224c2e0d5389bcd3eb181c26118975c490e9 (I ^ *  AMq $U!Q} J {GxEd0 c0 X b / u a -=  \ (3i$sha1$2d091d0edf9e838d77e54e00008ce458e860f06b3i$sha1$24efebe721455b82094968d50a0024903c7d5def2i$sha1$2beec07180bfbc423210b1d106d28fc543f74a26Z3i$sha1$3ba87f8710ac954fefcb3f6c3d09a3c0c602baa33i$sha1$249e96c078021fe0ae4d278dffb1b764eef15ca62i$sha1$23ee9e1d5099dbba40458a11e1e98316fc164f86:3i$sha1$20b985c8606ce31b35f7a5d290af9b1e55b6da703i$sha1$3358e60f5754d330ecf63adf76ecaf4d9e202fe43i$sha1$2450e019a43135289269ce7dfc55a929431cc1ba3i$sha1$3adca06bbdd216ee02fb9ca620e5914316466ed83i$sha1$2cf08634ab910915c00a753dc824f829721ec87c3i$sha1$35c4535e82e3bf7295bffa6d119f6095ac0e060cs3i$sha1$2832393b367ae52a6236cd371d6a02c4282fbbe42i$sha1$30ca4f7224fd66396167e774280036cb7224443473i$sha1$3095531bf6d04c275e343c36883bccb78e756d55(3i$sha1$306c91996d69cfce0c3fc46fcfbe8f06e86be4332i$sha1$2fec5fd21b9ff8a5a00e7a2ed9d5faac58905669"3i$sha1$2fd73742ccf235e53733ee43e78934365cbee4af23i$sha1$2fbe9f2e9c52558b3ef1d058abb357784c45a465:2i$sha1$2fa17cb17aadc7f657fb0b1056f83949e1c209af3i$sha1$2dc27ca865ecc42e17ff67c196d9b7d1b535ae0b2i$sha1$2d3c11d08f80cdd5bb23acbdcf8d8d7f4c0a94c02i$sha1$2caa06a0be86ed8b31feb65dcd398a00ddc555df|2i$sha1$2c398d6a354a683e0828305a203833b080fd6e96b3i$sha1$2b89c68d8d6d9106c0786ba7e33444c9b4b9ae83t3i$sha1$2b84648406996ce4e11d539846ed2338d4982d1a3i$sha1$3483ae295a82f042961a34f9ba92d03ee4b7fd223i$sha1$24922f527f4b88888bb82915456a270bfa23aa39A3i$sha1$24906508bb8c544247b1d441bdacb01d1a2a35e6y3i$sha1$2463787ae68cdf12beeed413d4377a1719eeb4553i$sha1$27fe91caca096d81382441b63989e2920213f0993i$sha1$25940f59434c85ed7d218a78143ee90f7f6df420 2i$sha1$20c2bc32fe097c4c6cf9faefa3c2d92de2bb0178E3i$sha1$29af8a76c58ed193055d39ce2ee936821bc63f073i$sha1$29053a1bb0205796e501f5d514b448c5d5b13f8c3i$sha1$2a7500e539be1e132b88ba5b74df8b98bd33ebb43i$sha1$287e5d2fccec13e8df99a72804f05358dd30d7d93i$sha1$27bba08307f8f1a52b5bd8ea6e789cb9358eba803i$sha1$2729cbf361df5d04d6b1904d2ba6e6f922f7fb6d2i$sha1$26fe63e00d38f3509df93519898cc76205f7eaa3Q3i$sha1$25e92c789ffe672875766e7775bafd275c984212"3i$sha1$25b7606e45717b2317519bd45a5dfb894bd1c6813i$sha1$2532afbec6a26749373814e8ffb5dbd94331cc3c3i$sha1$35b4d9b517369cc59639eea331179b896444e0693i$sha1$33ca41e46b7b09179c475761650cb0134f45b4443i$sha1$23decfad06dcf00d265d9c15ff53c1eed48fd6d8d3i$sha1$23631e27b5252d44ac2b7574a1114769b05671e53i$sha1$2e2d702f163cdde842d460dfef3c2e6c040148d53i$sha1$24023b593de46ad28391e4181d7d646b4e568f343i$sha1$2343f0b01eb74c9b25ee779c54bd5ee38183f4d53i$sha1$225fd9924ac56658a8e65ce53ae466e08e3b466a3i$sha1$3cecf564e32afef62d3ab87fb897196c2ce9310f3i$sha1$3cd6f6847b3a3c91567c2dcd6f1710f919b54e242i$sha1$3c762876fbc9a8397375677825aa5f33b235c34eC3i$sha1$3b1c69158f5d6263162781118be0a1e988748d712i$sha1$3af6a2ae023b84e0b28f02c94b1954d2c3f1875a3i$sha1$3aad433d4d5afd3ad778001bd9ffc1035a0725b92i$sha1$37725882aed8e72fdac3a96d99c804187379eea4i3i$sha1$374fd0f8b3d5ab53ede77a515256fc097bbbf934K2i$sha1$371e94db7cc42c24868bfa05db92b476e413c02dF2i$sha1$36a9b58c956cdd4705b9fe346a723f1a6f6b2706Y2i$sha1$361961b6cd7667a32c11325c05e30e6206edb20643i$sha1$35ed5eecbc685b14559fbcc17c9824cc8d7d4aef3i$sha1$358312213e5bc057f2644b28bc798d499d07ff9f2i$sha1$35098a451549734c51e7414dda87ccc8b3262fd4,2i$sha1$35071d11678d99db4175f51e22e9aa250c8ec6f13i$sha1$34820176d9b6cafb75d4ece237c43b1dec09325d3i$sha1$322b3e6dd4e630939facac98ef54856fbf497f5f 1i $sha1$321d7b5bd5c8affcb9ea6845c11927977fd83dc33i$sha1$320a7b7770bad33ac70df79df26cc0aced26a9b543i$sha1$32074105b601a3cb43e81506d66156ffca313b113i$sha1$317dddfca86c276e942f5f172250233e7f217bb2N3i$sha1$3126720a90b6f49d9ef1d807062a669268fd8f7b y00L3ctu 9O5T$i  _ >    j B %  [ { ] 9  o S 4J  m E $ pP&Z+;}|V3 =iF&dG  !install-sh )CMakeLists.txt Makefile %README.CMake !README.txt snaphuQ !config.sub5 )gmtsargmtsar/plxyz.c) -gmtsargmtsar/polyfit.c( -gmtsargmtsar/rng_cmp.c'! 3gmtsargmtsar/get_params.c& -gmtsargmtsar/rng_ref.c%& =gmtsargmtsar/read_xcorr_data.c$ )gmtsargmtsar/shift.c#! 3gmtsargmtsar/sbas_utils.c"# 7gmtsargmtsar/calc_dop_orb.c!$ 9gmtsargmtsar/lib_functions.h ! 3gmtsargmtsar/sio_struct.c -gmtsargmtsar/rmpatch.c -gmtsargmtsar/llt2xyz.h# 7gmtsargmtsar/CMakeLists.txt gmtsar4 'gmtsargmtsar/sbas.h3# 7gmtsargmtsar/lib_strfuncs.c2  1gmtsargmtsar/write_orb.c1 +gmtsargmtsar/conv2d.c0! 3gmtsargmtsar/rng_filter.c/ +gmtsargmtsar/spline.c.  1gmtsargmtsar/fitoffset.c- 'gmtsargmtsar/sbas.c,$ 9gmtsargmtsar/utils_complex.c+# 7gmtsargmtsar/extend_orbit.c* preproc  libW  docV %configure.acT %ax_lapack.m4S #LICENSE.TXTR )gmtsargmtsar/xcorr.h )gmtsargmtsar/xcorr.c} )gmtsargmtsar/utils.c$ ;gmtsargmtsar/update_PRM_sub.c! 3gmtsargmtsar/update_PRM.h! 3gmtsargmtsar/update_PRM.c  1gmtsargmtsar/trans_col.c /gmtsargmtsar/test_shift" 5gmtsargmtsar/stringutils.c% ;gmtsargmtsar/split_spectrum.c% ;gmtsargmtsar/split_aperture.c! 3gmtsargmtsar/solid_tide.c %gmtsargmtsar/soi.h  3gmtsargmtsar/siocomplex.h^  3gmtsargmtsar/siocomplex.c" 5gmtsargmtsar/sfd_complex.h& ?gmtsargmtsar/set_prm_defaults.c$ 9gmtsargmtsar/sarleader_fdr.h% ;gmtsargmtsar/sarleader_ALOS.h  1gmtsargmtsar/sarglobal.h +gmtsargmtsar/resamp.c" /gmtsargmtsar/read_orb.c) Cgmtsargmtsar/read_optional_args.c 1gmtsargmtsar/read_data.c +gmtsargmtsar/radopp.c$ 9gmtsargmtsar/print_results.c  1gmtsargmtsar/phasefilt.c/ Ogmtsargmtsar/phasediff_get_topo_phase.c 1gmtsargmtsar/phasediff.c_  3gmtsargmtsar/phase2topo.c' Agmtsargmtsar/parse_xcorr_input.c  1gmtsargmtsar/p_scatter.c )gmtsargmtsar/orbit.h! 5gmtsargmtsar/offset_topo.c#" 7gmtsargmtsar/nearest_grid.c !gmtsargmtsar/manr+ Ggmtsargmtsar/make_gaussian_filter.c -gmtsargmtsar/llt2rat.h )gmtsargmtsar/lib_srcz 1gmtsargmtsar/ldr_orbit.c 1gmtsargmtsar/intp_coef.c' Agmtsargmtsar/interpolate_orbit.c # 7gmtsargmtsar/highres_corr.c 1gmtsargmtsar/hermite_c.c~ +gmtsargmtsar/gmtsar.h# 9gmtsargmtsar/get_locations.cs -gmtsargmtsar/get_PRM.c| +gmtsargmtsar/geoxyz.c )gmtsargmtsar/filters]  3gmtsargmtsar/file_stuff.c!/ Ogmtsargmtsar/fft_interpolate_routines.c /gmtsargmtsar/fft_bins.c )gmtsargmtsar/esarp.c' Agmtsargmtsar/do_time_int_xcorr.c$ 9gmtsargmtsar/do_freq_xcorr.c -gmtsargmtsar/cut_slc.c !gmtsargmtsar/csh 'gmtsargmtsar/conv.c /gmtsargmtsar/calc_dop.c )gmtsargmtsar/bperp.c -gmtsargmtsar/acpatch.c  1gmtsargmtsar/aastretch.c /gmtsargmtsar/SAT_look.c& =gmtsargmtsar/SAT_llt2rat_sub.c" 5gmtsargmtsar/SAT_llt2rat.c" 7gmtsargmtsar/SAT_baseline.c` %gmtsargmtsar/PRM.h +gmtsargmtsar/Makefile{/ 'Ccmake/modulescmake/modules/FindGMT.cmake7 'Scmake/modulescmake/modules/ConfigureChecks.cmake3 'Kcmake/modulescmake/modules/ConfigCMake.cmake7 'Scmake/modulescmake/modules/CheckTypeExists.cmake< ']cmake/modulescmake/modules/CheckPrototypeExists.cmake 'cmakecmake/modules % ?cmakecmake/ConfigDefault.cmake  %config.mk.in  %config.guess  cmake  )ax_lib_hdf5.m4  !ax_blas.m4 #GNUmakefile %BASICSVN.TXT *D* n  T : ~ d J0tZ@&j P\~i Y$sha1$7ad9722f08573b3207e06dd3d4365ae5c7ee97a8"d$md5 $c97b684b055881d2195148af95efeed3\}i Y$sha1$0f955f088724171716e17625542851e923c42966<$md5 $d110cc98094a7bb2ed356397a58b875d\|i Y$sha1$2caa06a0be86ed8b31feb65dcd398a00ddc555df $md5 $8ae34b66f5a76092e10806161f8e5834\{i Y$sha1$8f77290bd3addeeb9dd694d78289a931e791830cq$md5 $c37aa355da5d2f396ad10fd0efbb304a\zi Y$sha1$13ac74d180d2bf5b40604dcde3a2d85dd17c3db6S$md5 $58a8367b2b0b083f32a286814e965977\yi Y$sha1$dcc905cbd8695a5e2cbed939848fc92b3f08ea3eUN$md5 $60eed968441be9170d265f5568902944\xi Y$sha1$d251edff6bba335c0b4c4f818d4d32cf984f4f5c$md5 $bd0d5f01b4cc402f3d0bd3789124bac7\wi Y$sha1$6d44428cf4da5806ebaa0c6444453959b2ca74c71Q$md5 $bfb917580dbb3b01dbd6a48fc84a8c6f\vi Y$sha1$e52d56855830832558eb57c9a2eee69c5969423c$md5 $d07c9826cf470dd607b4e5bb696e39ac\ui Y$sha1$ca70480ed52829b95c7d8e0507213ed74903fc1b $md5 $da6ceb8d6870a0378f284073fe941545\ti Y$sha1$78bbc92a0181854edb95bc7a6d52039d53c86fc9+$md5 $603315d2de653ec754df9652f0bf67ef\si Y$sha1$b41900442e22cc25dc302a65ecbbd294e28dc39c6$md5 $1c1a717834c908fe880dea32f7ae2401\ri Y$sha1$819d15e202b06680a2aa0ab1d78603a539c0aac8 ^$md5 $a4e06dd0817be57d482be7285860922f\qi Y$sha1$008a02d00215debcd99f76dd0969b0981faf6a25$md5 $ad77ffa8c6e011e16c1306e3263d6a29\pi Y$sha1$d872c92039873b1c61865da1f5550314162deb0b!$md5 $07e412d72219fbc535523abbf6a6e4c5\oi Y$sha1$52f24a90792aeade940faf238853a092787722c7z$md5 $e68103abbc50ac760f72dccb4fbc5697\ni Y$sha1$04a778d3f6976e414c55ff89366454e568944e79$md5 $392fc6152de04724b3b5dcfae96f1051\mi Y$sha1$e8f735e184797e77af1fb9bd1d192b93c4dbc514 $md5 $c8231c45b78f36cbb199db8d6369f498\li Y$sha1$cab320daf7211d0c83ff9b5e5180d775a04c5a07+$$md5 $9de74975172961ff5afe0025f0bd11b4\ki Y$sha1$bf8162daa191406449e2b6334e068b962f9e70da$md5 $7d79acc31e21499f9b008b175ed1bd8d\ji Y$sha1$ab6ca53165bee77689f13246f1b0a6847f59ef59 m$md5 $7a5d5bfd8488afe10f2e0e5aa8ee188b\ii Y$sha1$37725882aed8e72fdac3a96d99c804187379eea4$md5 $434879abbf32a7781d16971688b264a8\hi Y$sha1$0f6bfca3179d8e37f82693583b3d853b24c8a37f$md5 $ee4ff4929e0a0180159d9c41f4eb1758\gi Y$sha1$7cdf236adb65b3b64cab85a451320485ee3f76f8 $md5 $54d2f1d8b32d68f7d52b86308160702b\fi Y$sha1$9da9baab02e47ecceb82cb051b2b75fb431d2bad$md5 $795d6ea43a960f1aa189e6bcb6873a35\ei Y$sha1$5c6ac3367b0832fb2f9c230e05835daf159a54be$md5 $a290af8b95db86a5fd8830ee4178f8f2\di Y$sha1$ae5fa49d2eb048cc2b061b586cf8e48808b1f237f$md5 $dfa40ce54f26d7a38132927b6c980581\ci Y$sha1$9c33492d739f7746ff6f4cda96a3052c578c7679A$md5 $d204ea13bc5b3de6a7e65873a82703eb\bi Y$sha1$2c398d6a354a683e0828305a203833b080fd6e96 $md5 $8d6d662d2bea026320ab39a897d8ec99\ai Y$sha1$c406ed43a476f3b9b31cf30300bf1f40ae0a91e1 $md5 $6e08ad86c02bcbb7832cee5af8adb892\`i Y$sha1$0caa62eba78e0f9cca568aa2844a159227109cc9 $md5 $7fbf76375a1c828fe2eef777ce832091\_i Y$sha1$7a91d9b84982af669447265d2d31977f3699634e-$md5 $b8914b0788332ad97890e9ab11a4eac6\^i Y$sha1$fc9494fa4a0bebf7b1b003cb8a0bc8e48f4b3fb5$md5 $7b87b0bd12845ada9ca201cd3ce3ee09\]i Y$sha1$caa9b96d655f96864b09e9aaf3969d5aa8f552f3$md5 $813235bb75aeaa631e00692b9a907d7b\\i Y$sha1$ad8aca99d36c2600118c98083cbe778df88745e7 i$md5 $02e3f79a02985259ee1aeb309d465467\[i Y$sha1$ced9f23c282e5833e4929945fb578790380274f7m$md5 $eb69f0f71944608b3ae77d2631ecc924\Zi Y$sha1$2beec07180bfbc423210b1d106d28fc543f74a26S$md5 $05e118a2c3c4dc2c59e9063f98042197\Yi Y$sha1$36a9b58c956cdd4705b9fe346a723f1a6f6b2706b$md5 $7aed21b5ac4fa31b459c39a6dcfc857a\Xi Y$sha1$1c4654ce554fa6a2262b6e760d69fc9f6d11d242$md5 $778a8c2ad1e6aca23722b55b0babba59\Wi Y$sha1$c91ff2d47f3f07b59bddbec3f7380d86218cb092S$md5 $505695aee426d95c5fd23b5ea958a533\Vi Y$sha1$dd51299806c615ea110b0588a1f5ba2d129d58f5TW$md5 $889fea47689309e137c0aeee0115762d\Ui Y$sha1$fef5a288b59d74d6149accc114aa6b4a91d3a303$md5 $4ccc2c304539dfc6b7fd9ab7fe118f83 JwLT$ k B  V ) y F  s B  c : |KlA _5o:k<a3 Q$qA + !?gmtsar/cshgmtsar/csh/, !Agmtsar/cshgmtsar/csh/p2p_S1_TOPS.csh+ !?gmtsar/cshgmtsar/csh/p2p_S1_SLC.csh, !Agmtsar/cshgmtsar/csh/p2p_RS2_SLC.csh( !9gmtsar/cshgmtsar/csh/p2p_ERS.csh- !Cgmtsar/cshgmtsar/csh/p2p_ENVI_SLC.csh) !;gmtsar/cshgmtsar/csh/p2p_ENVI.csh, !Agmtsar/cshgmtsar/csh/p2p_CSK_SLC.csh( !9gmtsar/cshgmtsar/csh/p2p_CSK.csh, !Agmtsar/cshgmtsar/csh/p2p_ALOS_SS.csh- !Cgmtsar/cshgmtsar/csh/p2p_ALOS_SLC.csh. !Egmtsar/cshgmtsar/csh/p2p_ALOS2_SLC.csh3 !Ogmtsar/cshgmtsar/csh/p2p_ALOS2_SCAN_SLC.csh5 !Sgmtsar/cshgmtsar/csh/p2p_ALOS2_SCAN_Frame.csh) !;gmtsar/cshgmtsar/csh/p2p_ALOS.csh: !]gmtsar/cshgmtsar/csh/organize_files_tops_linux.csh 4 !Qgmtsar/cshgmtsar/csh/organize_files_tops.csh: !]gmtsar/cshgmtsar/csh/merge_unwrap_geocode_tops.csh, !Agmtsar/cshgmtsar/csh/merge_batch.csh- !Cgmtsar/cshgmtsar/csh/make_profile.csh/ !Ggmtsar/cshgmtsar/csh/make_los_ascii.csh) !;gmtsar/cshgmtsar/csh/make_dem.csh. !Egmtsar/cshgmtsar/csh/make_a_offset.csh$ !1gmtsar/cshgmtsar/csh/m2s.csh/ !Ggmtsar/cshgmtsar/csh/landmask_ALOS2.csh) !;gmtsar/cshgmtsar/csh/landmask.csh3 !Ogmtsar/cshgmtsar/csh/intf_tops_parallel.csh* !=gmtsar/cshgmtsar/csh/intf_tops.csh6 !Ugmtsar/cshgmtsar/csh/intf_batch_ALOS2_SCAN.csh+ !?gmtsar/cshgmtsar/csh/intf_batch.csh% !3gmtsar/cshgmtsar/csh/intf.csh( !9gmtsar/cshgmtsar/csh/grd2kml.csh, !Agmtsar/cshgmtsar/csh/grd2geotiff.csh0 !Igmtsar/cshgmtsar/csh/gmtsar_uninstall.sh3 !Ogmtsar/cshgmtsar/csh/gmtsar_sharedir.csh.in' !7gmtsar/cshgmtsar/csh/gmtsar.csh3 !Ogmtsar/cshgmtsar/csh/get_baseline_table.csh- !Cgmtsar/cshgmtsar/csh/geocode.csh_orig ( !9gmtsar/cshgmtsar/csh/geocode.csh* !=gmtsar/cshgmtsar/csh/fitoffset.csh0 !Igmtsar/cshgmtsar/csh/fit_planar_trend.py/ !Ggmtsar/cshgmtsar/csh/filter_alos_ss.csh' !7gmtsar/cshgmtsar/csh/filter.csh* !=gmtsar/cshgmtsar/csh/fetchOrbit.py0 !Igmtsar/cshgmtsar/csh/example.intf.config; !_gmtsar/cshgmtsar/csh/estimate_ionospheric_phase.csh6 !Ugmtsar/cshgmtsar/csh/detrend_before_unwrap.csh2 !Mgmtsar/cshgmtsar/csh/dem2topo_ra_ALOS2.csh, !Agmtsar/cshgmtsar/csh/dem2topo_ra.csh2 !Mgmtsar/cshgmtsar/csh/create_frame_tops.csh+ !?gmtsar/cshgmtsar/csh/config.tsx.txt+ !?gmtsar/cshgmtsar/csh/config.s1a.txt+ !?gmtsar/cshgmtsar/csh/config.rs2.txt+ !?gmtsar/cshgmtsar/csh/config.ers.txt, !Agmtsar/cshgmtsar/csh/config.envi.txt+ !?gmtsar/cshgmtsar/csh/config.csk.txt1 !Kgmtsar/cshgmtsar/csh/config.alos2.slc.txt, !Agmtsar/cshgmtsar/csh/config.alos.txt/ !Ggmtsar/cshgmtsar/csh/config.alos.ss.txt0 !Igmtsar/cshgmtsar/csh/config.alos.slc.txt( !9gmtsar/cshgmtsar/csh/cleanup.csh . !Egmtsar/cshgmtsar/csh/batch_tops.config) !;gmtsar/cshgmtsar/csh/batch.config/ !Ggmtsar/cshgmtsar/csh/batch.alos2.config/ !Ggmtsar/cshgmtsar/csh/baseline_table.csh/ !Ggmtsar/cshgmtsar/csh/align_tops_esd.csh0 !Igmtsar/cshgmtsar/csh/align_tops_6par.csh + !?gmtsar/cshgmtsar/csh/align_tops.csh5 !Sgmtsar/cshgmtsar/csh/align_batch_ALOS_SLC.csh7 !Wgmtsar/cshgmtsar/csh/align_batch_ALOS2_SCAN.csh, !Agmtsar/cshgmtsar/csh/align_batch.csh* !=gmtsar/cshgmtsar/csh/align_SAT.csh/ !Ggmtsar/cshgmtsar/csh/align_ALOS_SLC.csh1 !Kgmtsar/cshgmtsar/csh/align_ALOS2_SCAN.csh& !5gmtsar/cshgmtsar/csh/align.csh X>t ( b U&\h X0` 7 Qi#gmtsar/SAT_baseline.cgmtsarbranches/5.7/gmtsar/SAT_baseline.cnormalfile()$sha1$c91ff2d47f3f07b59bddbec3f7380d86218cb092iv$yxxu-svn-gmtSf*_ 1 Ki#gmtsar/phasediff.cgmtsarbranches/5.7/gmtsar/phasediff.cnormalfile()$sha1$dd51299806c615ea110b0588a1f5ba2d129d58f5mzv xxu-svn-gmtTWf,^ 3 Mi#gmtsar/siocomplex.hgmtsarbranches/5.7/gmtsar/siocomplex.hnormalfile()$sha1$fef5a288b59d74d6149accc114aa6b4a91d3a303iv$yxxu-svn-gmtfl] ) Cgmtsar/filtersgmtsarbranches/5.7/gmtsar/filtersnormaldir()infinitys9=ntfwobbe;\ =) Wigmtsar/filters/gauss29x9gmtsar/filtersbranches/5.7/gmtsar/filters/gauss29x9normalfile()$sha1$3d11a654aada52113e648a7f744aa15ec394db53*-AUqksandwellvfE[ G) aigmtsar/filters/gauss_tsx_100mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_tsx_100mnormalfile()$sha1$f71e471c7b4498b8ee0b2c84896f77459c24c9e0*-AUqksandwellfGZ K) eigmtsar/filters/gauss_tsx_200m.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_tsx_200m.mnormalfile()$sha1$74325fffea70cf9ede74657581b8eb754ece0627s9=ntfwobbecf;Y =) Wigmtsar/filters/gauss25x7gmtsar/filtersbranches/5.7/gmtsar/filters/gauss25x7normalfile()$sha1$26fe63e00d38f3509df93519898cc76205f7eaa3*-AUqksandwell f1X 3) Migmtsar/filters/ydirgmtsar/filtersbranches/5.7/gmtsar/filters/ydirnormalfile()$sha1$db2ae78e04072e0aab3a5ead0e39b4e42bf4b740*-AUqksandwellf:W =) Wigmtsar/filters/smooth3x3gmtsar/filtersbranches/5.7/gmtsar/filters/smooth3x3normalfile()$sha1$99022608e5592a030b219d2fd564feb805ffb902*-AUqksandwellaf=V ?) Yigmtsar/filters/gaussian.mgmtsar/filtersbranches/5.7/gmtsar/filters/gaussian.mnormalfile()$sha1$cbbde935edf7975bbfceaa1ec31aee898cf443b7*-AUqksandwellfEU G) aigmtsar/filters/gauss15x5_53kmgmtsar/filtersbranches/5.7/gmtsar/filters/gauss15x5_53kmnormalfile()$sha1$68026814226ad9324144bd5d15b973892b771cee*-AUqksandwellfGT I) cigmtsar/filters/gauss_alos_700mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_alos_700mnormalfile()$sha1$c7aa9cad1392c8343a51412a781543685cb87c51*-AUqksandwellQf8S ;) Uigmtsar/filters/fill.3x3gmtsar/filtersbranches/5.7/gmtsar/filters/fill.3x3normalfile()$sha1$edab0f3aa753bd3139b802c86963b09c6324b6b3*-AUqksandwellfCR E) _igmtsar/filters/gauss_tsx_50mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_tsx_50mnormalfile()$sha1$5d6c0861f7277d3fb735bb2124783f1b103f2e07*-AUqksandwellfGQ I) cigmtsar/filters/gauss_alos_500mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_alos_500mnormalfile()$sha1$e2c1fe37f13c4db7fd0acda4701890ffaf422258*-AUqksandwellTf?P A) [igmtsar/filters/gauss15x5.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss15x5.mnormalfile()$sha1$02d1eb963701f213a13d5400eb4f9c72b41f86dd*-AUqksandwellf=O ?) Yigmtsar/filters/gauss29x29gmtsar/filtersbranches/5.7/gmtsar/filters/gauss29x29normalfile()$sha1$11ef715414ed520afd739822f744b72005579c12*-AUqksandwellRDfGN I) cigmtsar/filters/gauss_alos_300mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss_alos_300mnormalfile()$sha1$371e94db7cc42c24868bfa05db92b476e413c02d*-AUqksandwell f?M A) [igmtsar/filters/gauss15x3.mgmtsar/filtersbranches/5.7/gmtsar/filters/gauss15x3.mnormalfile()$sha1$20c2bc32fe097c4c6cf9faefa3c2d92de2bb0178*-AUqksandwellef ;  E )^4VHZnCv E) _igmtsar/lib_src/filelist_makegmtsar/lib_srcbranches/5.7/gmtsar/lib_src/filelist_makenormalfile()$sha1$0f6bfca3179d8e37f82693583b3d853b24c8a37f*-AUqksandwellfGu I) cigmtsar/lib_src/read_data.c_oldgmtsar/lib_srcbranches/5.7/gmtsar/lib_src/read_data.c_oldnormalfile()$sha1$7cdf236adb65b3b64cab85a451320485ee3f76f8*-AUqksandwell f2s 9 Si#gmtsar/get_locations.cgmtsarbranches/5.7/gmtsar/get_locations.cnormalfile()$sha1$9da9baab02e47ecceb82cb051b2b75fb431d2badiv$yxxu-svn-gmtffr ! ;gmtsar/mangmtsarbranches/5.7/gmtsar/mannormaldir()infinity*-AUqksandwelltq +! Egmtsar/man/manlgmtsar/manbranches/5.7/gmtsar/man/manlnormaldir()infinity*-AUqksandwell@p A+ [igmtsar/man/manl/prm2gips.lgmtsar/man/manlbranches/5.7/gmtsar/man/manl/prm2gips.lnormalfile()$sha1$5c6ac3367b0832fb2f9c230e05835daf159a54be*-AUqksandwellfLo M+ gigmtsar/man/manl/ers_line_fixer.lgmtsar/man/manlbranches/5.7/gmtsar/man/manl/ers_line_fixer.lnormalfile()$sha1$ae5fa49d2eb048cc2b061b586cf8e48808b1f237*-AUqksandwellffFn G+ aigmtsar/man/manl/stack_table.lgmtsar/man/manlbranches/5.7/gmtsar/man/manl/stack_table.lnormalfile()$sha1$9c33492d739f7746ff6f4cda96a3052c578c7679*-AUqksandwellAfLm M+ gigmtsar/man/manl/exact_ers_time.lgmtsar/man/manlbranches/5.7/gmtsar/man/manl/exact_ers_time.lnormalfile()$sha1$2c398d6a354a683e0828305a203833b080fd6e96*-AUqksandwell fHl I+ cigmtsar/man/manl/ers_baseline.lgmtsar/man/manlbranches/5.7/gmtsar/man/manl/ers_baseline.lnormalfile()$sha1$c406ed43a476f3b9b31cf30300bf1f40ae0a91e1*-AUqksandwell fPk Q+ kigmtsar/man/manl/ers_repeat_times.lgmtsar/man/manlbranches/5.7/gmtsar/man/manl/ers_repeat_times.lnormalfile()$sha1$0caa62eba78e0f9cca568aa2844a159227109cc9*-AUqksandwell f@j A+ [igmtsar/man/manl/pre_proc.lgmtsar/man/manlbranches/5.7/gmtsar/man/manl/pre_proc.lnormalfile()$sha1$7a91d9b84982af669447265d2d31977f3699634e*-AUqksandwell-f>i ?+ Yigmtsar/man/manl/ihBperp.lgmtsar/man/manlbranches/5.7/gmtsar/man/manl/ihBperp.lnormalfile()$sha1$fc9494fa4a0bebf7b1b003cb8a0bc8e48f4b3fb5*-AUqksandwellfBh C+ ]igmtsar/man/manl/fitoffset.lgmtsar/man/manlbranches/5.7/gmtsar/man/manl/fitoffset.lnormalfile()$sha1$caa9b96d655f96864b09e9aaf3969d5aa8f552f3*-AUqksandwellf:g ;+ Uigmtsar/man/manl/pdiff.lgmtsar/man/manlbranches/5.7/gmtsar/man/manl/pdiff.lnormalfile()$sha1$ad8aca99d36c2600118c98083cbe778df88745e7*-AUqksandwell if+Y$md5 $4510a45e00ed8c6046549b0a192048d2 +Y$md5 $4503cfcf13394c68c3488393a88958a6+Y$md5 $44a9ee7c68d6ffe20787ba6b4fa2cfb8*Y$md5 $441d9b8ec01e12d4d4124138f576bb4e-+Y$md5 $43b0e10b1081de82497352c2220b39a9)Y $md5 $43a1ebe0f683f736c18dc3e9ea430174*Y$md5 $434879abbf32a7781d16971688b264a8i+Y$md5 $4325ab880c4f36c60133f66b345c1abbJ+Y$md5 $42a244a59a556376e7fb41d227f7d891*Y$md5 $420ce976d832850fe2a79b75251eab1c?+Y$md5 $41aa9fb68b3825f2829e2ea1d11617ac F[ C = !q'[Ob&| - Gi#gmtsar/get_PRM.cgmtsarbranches/5.7/gmtsar/get_PRM.cnormalfile()$sha1$bf8162daa191406449e2b6334e068b962f9e70daiv$yxxu-svn-gmtf${ + Ei#gmtsar/Makefilegmtsarbranches/5.7/gmtsar/Makefilenormalfile()$sha1$ab6ca53165bee77689f13246f1b0a6847f59ef59&Txxu-svn-gmt mflz ) Cgmtsar/lib_srcgmtsarbranches/5.7/gmtsar/lib_srcnormaldir()infinityt9ZG1fwobbe7y ;) Uigmtsar/lib_src/Makefilegmtsar/lib_srcbranches/5.7/gmtsar/lib_src/Makefilenormalfile()$sha1$37725882aed8e72fdac3a96d99c804187379eea4t9ZG1fwobbef x ?) Ygmtsar/lib_src/test_shiftgmtsar/lib_srcbranches/5.7/gmtsar/lib_src/test_shiftnormaldir()infinity*-AUqksandwellH  O ii#gmtsar/phasediff_get_topo_phase.cgmtsarbranches/5.7/gmtsar/phasediff_get_topo_phase.cnormalfile()$sha1$dcc905cbd8695a5e2cbed939848fc92b3f08ea3exxu-svn-gmtUNf"  ) Ci#gmtsar/bperp.cgmtsarbranches/5.7/gmtsar/bperp.cnormalfile()$sha1$d251edff6bba335c0b4c4f818d4d32cf984f4f5civ$yxxu-svn-gmtf  ' Ai#gmtsar/conv.cgmtsarbranches/5.7/gmtsar/conv.cnormalfile()$sha1$6d44428cf4da5806ebaa0c6444453959b2ca74c7iv$yxxu-svn-gmt1Qf, 3 Mi#gmtsar/update_PRM.hgmtsarbranches/5.7/gmtsar/update_PRM.hnormalfile()$sha1$e52d56855830832558eb57c9a2eee69c5969423civ$yxxu-svn-gmtf( / Ii#gmtsar/calc_dop.cgmtsarbranches/5.7/gmtsar/calc_dop.cnormalfile()$sha1$ca70480ed52829b95c7d8e0507213ed74903fc1biv$yxxu-svn-gmt f6 = Wi#gmtsar/SAT_llt2rat_sub.cgmtsarbranches/5.7/gmtsar/SAT_llt2rat_sub.cnormalfile()$sha1$78bbc92a0181854edb95bc7a6d52039d53c86fc9iv$yxxu-svn-gmt+f2 9 Si#gmtsar/sarleader_fdr.hgmtsarbranches/5.7/gmtsar/sarleader_fdr.hnormalfile()$sha1$b41900442e22cc25dc302a65ecbbd294e28dc39civ$yxxu-svn-gmt6f$ + Ei#gmtsar/gmtsar.hgmtsarbranches/5.7/gmtsar/gmtsar.hnormalfile()$sha1$819d15e202b06680a2aa0ab1d78603a539c0aac8iv$yxxu-svn-gmt ^f4 ; Ui#gmtsar/split_aperture.cgmtsarbranches/5.7/gmtsar/split_aperture.cnormalfile()$sha1$008a02d00215debcd99f76dd0969b0981faf6a25k_v/xxu-svn-gmtf" ) Ci#gmtsar/xcorr.hgmtsarbranches/5.7/gmtsar/xcorr.hnormalfile()$sha1$d872c92039873b1c61865da1f5550314162deb0biv$yxxu-svn-gmt!f, 3 Mi#gmtsar/update_PRM.cgmtsarbranches/5.7/gmtsar/update_PRM.cnormalfile()$sha1$52f24a90792aeade940faf238853a092787722c7iv$yxxu-svn-gmtzf8 ? Yi#gmtsar/set_prm_defaults.cgmtsarbranches/5.7/gmtsar/set_prm_defaults.cnormalfile()$sha1$04a778d3f6976e414c55ff89366454e568944e79iv$yxxu-svn-gmtf*~ 1 Ki#gmtsar/hermite_c.cgmtsarbranches/5.7/gmtsar/hermite_c.cnormalfile()$sha1$e8f735e184797e77af1fb9bd1d192b93c4dbc514iv$yxxu-svn-gmt f"} ) Ci#gmtsar/xcorr.cgmtsarbranches/5.7/gmtsar/xcorr.cnormalfile()$sha1$cab320daf7211d0c83ff9b5e5180d775a04c5a07iv$yxxu-svn-gmt+$f oaai|\H}jWE1& y ` F /  d =  ~ ] 7  g A  o N - n=oQ.wY>dJ&mC|Y7 a< 5 1gmtsar/csh/m  )CMakeLists.txt Makefile %README.CMake !README.txt" Cgmtsar/csh/p2p_ENVI_SLC.csh ;gmtsar/csh/p2p_ENVI.csh! Agmtsar/csh/p2p_CSK_SLC.csh 9gmtsar/csh/p2p_CSK.csh! Agmtsar/csh/p2p_ALOS_SS.csh" Cgmtsar/csh/p2p_ALOS_SLC.csh# Egmtsar/csh/p2p_ALOS2_SLC.csh( Ogmtsar/csh/p2p_ALOS2_SCAN_SLC.csh* Sgmtsar/csh/p2p_ALOS2_SCAN_Frame.csh ;gmtsar/csh/p2p_ALOS.csh/ ]gmtsar/csh/organize_files_tops_linux.csh ) Qgmtsar/csh/organize_files_tops.csh/ ]gmtsar/csh/merge_unwrap_geocode_tops.csh! Agmtsar/csh/merge_batch.csh" Cgmtsar/csh/make_profile.csh$ Ggmtsar/csh/make_los_ascii.csh ;gmtsar/csh/make_dem.csh# Egmtsar/csh/make_a_offset.csh 1gmtsar/csh/m2s.csh$ Ggmtsar/csh/landmask_ALOS2.csh ;gmtsar/csh/landmask.csh( Ogmtsar/csh/intf_tops_parallel.csh =gmtsar/csh/intf_tops.csh+ Ugmtsar/csh/intf_batch_ALOS2_SCAN.csh  ?gmtsar/csh/intf_batch.csh 3gmtsar/csh/intf.csh 9gmtsar/csh/grd2kml.csh! Agmtsar/csh/grd2geotiff.csh% Igmtsar/csh/gmtsar_uninstall.sh( Ogmtsar/csh/gmtsar_sharedir.csh.in 7gmtsar/csh/gmtsar.csh( Ogmtsar/csh/get_baseline_table.csh" Cgmtsar/csh/geocode.csh_orig  9gmtsar/csh/geocode.csh =gmtsar/csh/fitoffset.csh% Igmtsar/csh/fit_planar_trend.py$ Ggmtsar/csh/filter_alos_ss.csh 7gmtsar/csh/filter.csh =gmtsar/csh/fetchOrbit.py% Igmtsar/csh/example.intf.config0 _gmtsar/csh/estimate_ionospheric_phase.csh+ Ugmtsar/csh/detrend_before_unwrap.csh' Mgmtsar/csh/dem2topo_ra_ALOS2.csh! Agmtsar/csh/dem2topo_ra.csh' Mgmtsar/csh/create_frame_tops.csh  ?gmtsar/csh/config.tsx.txt  ?gmtsar/csh/config.s1a.txt  ?gmtsar/csh/config.rs2.txt  ?gmtsar/csh/config.ers.txt! Agmtsar/csh/config.envi.txt  ?gmtsar/csh/config.csk.txt& Kgmtsar/csh/config.alos2.slc.txt! Agmtsar/csh/config.alos.txt$ Ggmtsar/csh/config.alos.ss.txt% Igmtsar/csh/config.alos.slc.txt 9gmtsar/csh/cleanup.csh # Egmtsar/csh/batch_tops.config ;gmtsar/csh/batch.config$ Ggmtsar/csh/batch.alos2.config$ Ggmtsar/csh/baseline_table.csh$ Ggmtsar/csh/align_tops_esd.csh% Igmtsar/csh/align_tops_6par.csh  ?gmtsar/csh/align_tops.csh* Sgmtsar/csh/align_batch_ALOS_SLC.csh, Wgmtsar/csh/align_batch_ALOS2_SCAN.csh! Agmtsar/csh/align_batch.csh =gmtsar/csh/align_SAT.csh$ Ggmtsar/csh/align_ALOS_SLC.csh& Kgmtsar/csh/align_ALOS2_SCAN.csh 5gmtsar/csh/align.csh$ Ggmtsar/csh/MAI_processing.csh !gmtsar/csh +gmtsar/conv2d.c0 'gmtsar/conv.c 7gmtsar/calc_dop_orb.c! /gmtsar/calc_dop.c )gmtsar/bperp.c -gmtsar/acpatch.c 1gmtsar/aastretch.c /gmtsar/SAT_look.c =gmtsar/SAT_llt2rat_sub.c 5gmtsar/SAT_llt2rat.c 7gmtsar/SAT_baseline.c` %gmtsar/PRM.h +gmtsar/Makefile{ 7gmtsar/CMakeLists.txt  gmtsar4  docV %configure.acT !config.sub5 %config.mk.in  %config.guess! Ccmake/modules/FindGMT.cmake) Scmake/modules/ConfigureChecks.cmake% Kcmake/modules/ConfigCMake.cmake) Scmake/modules/CheckTypeExists.cmake. ]cmake/modules/CheckPrototypeExists.cmake 'cmake/modules  ?cmake/ConfigDefault.cmake  cmake  )ax_lib_hdf5.m4  %ax_lapack.m4S !ax_blas.m4 #LICENSE.TXTR #GNUmakefile %BASICSVN.TXT drQ/}^9 m@pU2 m L )  e O 2  g G (  ^ ?   c C $ mH!d=[7[;w`C(jU71 3gmtsar/filters/xdir9- Ygmtsar/csh/pre_proc_batch_ALOS_SLC.csh/ ]gmtsar/csh/pre_proc_batch_ALOS2_SCAN.csh$ Ggmtsar/csh/pre_proc_batch.csh ;gmtsar/csh/pre_proc.csh  ?gmtsar/csh/pop_config.csh $ Ggmtsar/csh/p2p_processing.csh! Agmtsar/csh/p2p_TSX_SLC.csh! Agmtsar/csh/p2p_SAT_SLC.csh' Mgmtsar/csh/p2p_S1_TOPS_Frame.csh! Agmtsar/csh/p2p_S1_TOPS.csh  ?gmtsar/csh/p2p_S1_SLC.csh! Agmtsar/csh/p2p_RS2_SLC.csh =gmtsar/filters/smooth3x3W =gmtsar/filters/slcfilterE  Agmtsar/filters/sanandreas25# Ggmtsar/filters/sanandreas13x97# Ggmtsar/filters/sanandreas11x74 ?gmtsar/filters/gaussian.mV$ Igmtsar/filters/gauss_tsx_50m.m/" Egmtsar/filters/gauss_tsx_50mR% Kgmtsar/filters/gauss_tsx_200m.mZ# Ggmtsar/filters/gauss_tsx_200m>% Kgmtsar/filters/gauss_tsx_100m.m;# Ggmtsar/filters/gauss_tsx_100m[# Ggmtsar/filters/gauss_ers_200m+% Kgmtsar/filters/gauss_ers_100m.m'# Ggmtsar/filters/gauss_ers_100mI& Mgmtsar/filters/gauss_dir_range.mD$ Igmtsar/filters/gauss_dir_azi.m?& Mgmtsar/filters/gauss_alos_700m.m2$ Igmtsar/filters/gauss_alos_700mT& Mgmtsar/filters/gauss_alos_500m.m.$ Igmtsar/filters/gauss_alos_500mQ& Mgmtsar/filters/gauss_alos_300m.m-$ Igmtsar/filters/gauss_alos_300mN& Mgmtsar/filters/gauss_alos_200m.mJ$ Igmtsar/filters/gauss_alos_200m0& Mgmtsar/filters/gauss_alos_100m.m*$ Igmtsar/filters/gauss_alos_100mL ;gmtsar/filters/gauss9x9K ;gmtsar/filters/gauss9x5F ?gmtsar/filters/gauss5x5.m% ;gmtsar/filters/gauss5x5C ;gmtsar/filters/gauss5x3B =gmtsar/filters/gauss3x213 =gmtsar/filters/gauss33x9< ?gmtsar/filters/gauss33x33( =gmtsar/filters/gauss29x9\ ?gmtsar/filters/gauss29x29O =gmtsar/filters/gauss25x7Y ?gmtsar/filters/gauss25x25H ?gmtsar/filters/gauss21x21A ;gmtsar/filters/gauss1x1= ?gmtsar/filters/gauss19x191 =gmtsar/filters/gauss17x5:$ Igmtsar/filters/gauss17x17_2sig@ ?gmtsar/filters/gauss17x17,# Ggmtsar/filters/gauss15x5_53kmU  Agmtsar/filters/gauss15x5.mP =gmtsar/filters/gauss15x58  Agmtsar/filters/gauss15x3.mM =gmtsar/filters/gauss15x36 ?gmtsar/filters/gauss15x15) ?gmtsar/filters/gauss13x13& ;gmtsar/filters/fill.3x3S 7gmtsar/filters/box5x3G )gmtsar/filters] 3gmtsar/file_stuff.c!( Ogmtsar/fft_interpolate_routines.c /gmtsar/fft_bins.c 7gmtsar/extend_orbit.c* )gmtsar/esarp.c  Agmtsar/do_time_int_xcorr.c 9gmtsar/do_freq_xcorr.c -gmtsar/cut_slc.c  ?gmtsar/csh/update_PRM.csh% Igmtsar/csh/unwrap_parallel.csh% Igmtsar/csh/tide_correction.csh" Cgmtsar/csh/stack_phase.bash  ?gmtsar/csh/stack_corr.csh 5gmtsar/csh/stack.csh# Egmtsar/csh/snaphu_interp.csh 7gmtsar/csh/snaphu.csh# Egmtsar/csh/snaphu.conf.brief 9gmtsar/csh/slc2amp.csh% Igmtsar/csh/shift_atime_PRM.csh" Cgmtsar/csh/select_pairs.csh 3gmtsar/csh/sarp.csh ;gmtsar/csh/samp_slc.csh& Kgmtsar/csh/proj_ra2ll_ascii.csh  ?gmtsar/csh/proj_ra2ll.csh  ?gmtsar/csh/proj_model.csh& Kgmtsar/csh/proj_ll2ra_ascii.csh  ?gmtsar/csh/proj_ll2ra.csh, Wgmtsar/csh/preproc_batch_tops_esd.csh( Ogmtsar/csh/preproc_batch_tops.csh% Igmtsar/csh/prep_data_linux.csh =gmtsar/csh/prep_data.csh# Egmtsar/csh/pre_proc_init.csh *fC# e  H + m  P2sV9{^A$f\(i Y$sha1$d57b5cd0c347ead79dd533f70784314803bd869b$md5 $3888c9c18dd6b2650639dad3a48a9d0c\'i Y$sha1$0725b2dbb344010d9fdccef19840b756fe9381e5%$md5 $e240e9f79d3cb46891333234c4838e02\&i Y$sha1$aa4419c4a36d8edf33f1688dc0d6e95df25274ca1$md5 $e440ddc94a312b8cc3b4c9925512db8a\%i Y$sha1$872e8c16ce5e80be97ea3dace77dab71ff958d3f@$md5 $1595aab2bab6f6678276d157b7984b65\$i Y$sha1$f4ffe1630e2761550f0152c39777b9698a3c006d$md5 $92ae93918e11c72195cf56ba5161d49d\#i Y$sha1$802d1964e556b047387b6ce78cde110722313337$md5 $da92b1ad51124b8a52d79ddb32abee90\"i Y$sha1$12cd1dcbae854d7a3b8650453bf5353ccca36738$md5 $a8cd19068f29011afa85df16706aca45\!i Y$sha1$d3cafe1091710dc4b976da53325e25a848b24e06$md5 $3e82170ec37b5c7eac81ca32a9a615d4\ i Y$sha1$2463787ae68cdf12beeed413d4377a1719eeb455%$md5 $d652f48738d322f1ba14a73025ee8a74\i Y$sha1$1900e83c69b44f7fad5d8d723a2fac782ea58c33(D$md5 $08d31a99d23c0482d9b5654c5ab137fa\i Y$sha1$6ffe42680d0382b61aa21d3d2b2b7b5ddf25a2a1$md5 $af91fb61fbebe2c4e7c82d2b396875e9\i Y$sha1$5f1fcde59f6346f8bf9eb5503cc996102152e7a2&$md5 $1786416a819f1049e05fa096e382b433\i Y$sha1$7153648e9ab8d0c03521e9d9fa70da4452e98b44(B$md5 $80d5912d9ac25a4d8fa57d1232e56cf4\i Y$sha1$b2fc5eb40ae7e57367b0280ac956bf78755ed55ce$md5 $8bf4472b708c282947986b5f99ba11db\i Y$sha1$12833a8e551e2d3bc6aba4a7f356400f602d9c508$md5 $6d37bda4585718a9c996d36645e437df\i Y$sha1$015db74211e4a68d1c7fd17eaff526a1a2f89136$md5 $97dbed170091f02a69764f2810b30776\i Y$sha1$f6508dcc5941caec6b5a1b374a1bbc043b45994d$md5 $5999fa6b304422ef14102bd46bddb914\i Y$sha1$0e30bdf47ce50d0a25a9a915e51205bd5f104089$md5 $c923872d4e68830a8a317a53f514cf18\i Y$sha1$c77674d1b7f647b6478944dfdeb67f6efd2323f5$md5 $3ecaddca969e02c04655a0338d751370]i Y$sha1$d76d5c4663c9655f806bbdbe3a34f90e96d0dbec$md5 $684f6ee91a05ececa273c46d0cd7b1ec\i Y$sha1$ada5e034e3f4ad986ca63f52a186a620b2ff6d81$md5 $df90f8d60a6e65ebcb1fcdbe036c39ed\i Y$sha1$6c397f9064568e138e51e288cd49a80afb0f27e8+$md5 $575d5eb26deee5886dc63ca8bd25df19]i Y$sha1$9e5c8481162f9ffba39341beccad8c9acb467f2d$md5 $21486b0cd56584b576a49ec0af69dded\i Y$sha1$51a9104a608b9e2f9e282753b5bdc2d923dc6cc8$md5 $b2dbf9d2cc500f0f7cc1659277f91de6\i Y$sha1$00e8379ec2da3fbb56adad6ac2de779a230346f3 6$md5 $807599acf2d21fbfbfe7233ecae84cff\i Y$sha1$b41762995f8a9dba2422d7e054a987ca0066a59b $md5 $da37f4dd8917e65ed28b73f2167bed13\i Y$sha1$5cd75647c57bc863ec68655fc9d3e5c58ac957f1\$md5 $9e5dd45c25a4c6c6285cd0427ea1d23e\ i Y$sha1$306c91996d69cfce0c3fc46fcfbe8f06e86be433BS$md5 $3518f6f3a53bff31c878540136ebb1a1\ i Y$sha1$417cab945b7b9bf805c632c84781e9133134a3ea$md5 $5028af1554d643c8ba811bd3bf0c6ba2\ i Y$sha1$bcbf0cf9b3b4c7c6f1dedfdcbbf867ee6fe60623+$md5 $99c5352ba12a90b9a425930df46d918f\ i Y$sha1$01b1b35a9a421f0823b08b26ec9fbde120c1f982$md5 $9976b6936535e2002daf0c127ba5d9da\ i Y$sha1$a18b206a136ed2cf742e2d28fc97da4d1611664e $md5 $a7a124b4d3d48533aa169e5a9db975ea\i Y$sha1$c6b0f31a105348fb3bd6f1b8cd154458c25c6e1c\$md5 $b14524f74876fffe85a4382a9f8d52cf\i Y$sha1$62d8162110da0b899b1718627d2cb0d086c1846f $md5 $d0cdd4df2b05b9f8cd5bb6e1f6a3218c\i Y$sha1$8358f4d8e328d305623f6d5871ea88f858ff0e558$md5 $00c25d37ded4b0f7a73cc1da3a422e6b\i Y$sha1$b1c0bc9694820c30b6477fa37cabec8bc6c5728f$md5 $513fed25a5fbe647c13a98c3d40ab06c\i Y$sha1$7fb5fb2693f79570c98361c40496c85b2149cf05$md5 $44a9ee7c68d6ffe20787ba6b4fa2cfb8\i Y$sha1$3cd6f6847b3a3c91567c2dcd6f1710f919b54e24$md5 $a3c8ac15ca037187ec2b92a8bba47265]i Y$sha1$b309caf2d8b6a8a4c55943ab88ccda42da825202-$md5 $2eeeed4251ec8b6ebe75a7127e3afda4^iY$sha1$0071224c2e0d5389bcd3eb181c26118975c490e9$md5 $59c19ab40e7f3551c0acc82d9ecafae8\i Y$sha1$17930313e6df2e3e4b78479f17bf9382c7fb930c?$md5 $6b62dfb0434a944047c812aca20cc314\i Y$sha1$b53cf8fdb03009e820cde2c00c3878deb3ed65c0$md5 $fbd9f9a5cd58fd60cbdadae6f2cf8efb  \8-` Y [[Z" ) Ci#gmtsar/esarp.cgmtsarbranches/5.7/gmtsar/esarp.cnormalfile()$sha1$bcbf0cf9b3b4c7c6f1dedfdcbbf867ee6fe60623iv$yxxu-svn-gmt+f. 5 Oi#gmtsar/sfd_complex.hgmtsarbranches/5.7/gmtsar/sfd_complex.hnormalfile()$sha1$01b1b35a9a421f0823b08b26ec9fbde120c1f982iv$yxxu-svn-gmtf % ?i#gmtsar/PRM.hgmtsarbranches/5.7/gmtsar/PRM.hnormalfile()$sha1$a18b206a136ed2cf742e2d28fc97da4d1611664eiv$yxxu-svn-gmt f& - Gi#gmtsar/cut_slc.cgmtsarbranches/5.7/gmtsar/cut_slc.cnormalfile()$sha1$c6b0f31a105348fb3bd6f1b8cd154458c25c6e1cnzYxxu-svn-gmt\f2 9 Si#gmtsar/do_freq_xcorr.cgmtsarbranches/5.7/gmtsar/do_freq_xcorr.cnormalfile()$sha1$62d8162110da0b899b1718627d2cb0d086c1846fiv$yxxu-svn-gmt f. 5 Oi#gmtsar/SAT_llt2rat.cgmtsarbranches/5.7/gmtsar/SAT_llt2rat.cnormalfile()$sha1$8358f4d8e328d305623f6d5871ea88f858ff0e55iv$yxxu-svn-gmt8fE C/ ]igmtsar/test_shift/gauss.datgmtsar/test_shiftbranches/5.7/gmtsar/test_shift/gauss.datnormalfile()$sha1$0071224c2e0d5389bcd3eb181c26118975c490e9*-AUqksandwellf* 1 Ki#gmtsar/p_scatter.cgmtsarbranches/5.7/gmtsar/p_scatter.cnormalfile()$sha1$7ad9722f08573b3207e06dd3d4365ae5c7ee97a8iv$yxxu-svn-gmt"dfH I/ cigmtsar/test_shift/plot_shift.mgmtsar/test_shiftbranches/5.7/gmtsar/test_shift/plot_shift.mnormalfile()$sha1$17930313e6df2e3e4b78479f17bf9382c7fb930cs9=ntfwobbe?f& - Gi#gmtsar/llt2rat.hgmtsarbranches/5.7/gmtsar/llt2rat.hnormalfile()$sha1$b53cf8fdb03009e820cde2c00c3878deb3ed65c0iv$yxxu-svn-gmtf* 1 Ki#gmtsar/phasefilt.cgmtsarbranches/5.7/gmtsar/phasefilt.cnormalfile()$sha1$0f955f088724171716e17625542851e923c42966iv$yxxu-svn-gmt<f*  1 Ki#gmtsar/aastretch.cgmtsarbranches/5.7/gmtsar/aastretch.cnormalfile()$sha1$2caa06a0be86ed8b31feb65dcd398a00ddc555dfiv$yxxu-svn-gmt f0  7 Qi#gmtsar/highres_corr.cgmtsarbranches/5.7/gmtsar/highres_corr.cnormalfile()$sha1$8f77290bd3addeeb9dd694d78289a931e791830civ$yxxu-svn-gmtqf@  G ai#gmtsar/make_gaussian_filter.cgmtsarbranches/5.7/gmtsar/make_gaussian_filter.cnormalfile()$sha1$13ac74d180d2bf5b40604dcde3a2d85dd17c3db6iv$yxxu-svn-gmtSfs / Igmtsar/test_shiftgmtsarbranches/5.7/gmtsar/test_shiftnormaldir()infinityVpwesselR S/ migmtsar/test_shift/test_shift.c_origgmtsar/test_shiftbranches/5.7/gmtsar/test_shift/test_shift.c_orignormalfile()$sha1$b1c0bc9694820c30b6477fa37cabec8bc6c5728fs9=ntfwobbefI I/ cigmtsar/test_shift/test_shift.cgmtsar/test_shiftbranches/5.7/gmtsar/test_shift/test_shift.cnormalfile()$sha1$7fb5fb2693f79570c98361c40496c85b2149cf05VpwesselfA A/ [igmtsar/test_shift/Makefilegmtsar/test_shiftbranches/5.7/gmtsar/test_shift/Makefilenormalfile()$sha1$3cd6f6847b3a3c91567c2dcd6f1710f919b54e24VpwesselfI G/ aigmtsar/test_shift/shifted.epsgmtsar/test_shiftbranches/5.7/gmtsar/test_shift/shifted.epsnormalfile()$sha1$b309caf2d8b6a8a4c55943ab88ccda42da825202*-AUqksandwell-fO M/ gigmtsar/test_shift/gauss.dat_origgmtsar/test_shiftbranches/5.7/gmtsar/test_shift/gauss.dat_orignormalfile()$sha1$0071224c2e0d5389bcd3eb181c26118975c490e9*-AUqksandwellf l2I2T O < 'Uq5l2$ 9 Si#gmtsar/print_results.cgmtsarbranches/5.7/gmtsar/print_results.cnormalfile()$sha1$00e8379ec2da3fbb56adad6ac2de779a230346f3iv$yxxu-svn-gmt 6fH# O ii#gmtsar/fft_interpolate_routines.cgmtsarbranches/5.7/gmtsar/fft_interpolate_routines.cnormalfile()$sha1$b41762995f8a9dba2422d7e054a987ca0066a59biv$yxxu-svn-gmt f4" ; Ui#gmtsar/split_spectrum.cgmtsarbranches/5.7/gmtsar/split_spectrum.cnormalfile()$sha1$5cd75647c57bc863ec68655fc9d3e5c58ac957f1 /xxu-svn-gmt\f(! / Ii#gmtsar/SAT_look.cgmtsarbranches/5.7/gmtsar/SAT_look.cnormalfile()$sha1$306c91996d69cfce0c3fc46fcfbe8f06e86be433kxxxu-svn-gmtBSf*  1 Ki#gmtsar/sarglobal.hgmtsarbranches/5.7/gmtsar/sarglobal.hnormalfile()$sha1$417cab945b7b9bf805c632c84781e9133134a3eaiv$yxxu-svn-gmtfJ3 ?! Y4igmtsar/csh/proj_ll2ra.cshgmtsar/cshbranches/5.7/gmtsar/csh/proj_ll2ra.cshnormalfile(svn:executable 1 *)$sha1$6ffe42680d0382b61aa21d3d2b2b7b5ddf25a2a1VPOpwesself`2 Q! k4i#gmtsar/csh/organize_files_tops.cshgmtsar/cshbranches/5.7/gmtsar/csh/organize_files_tops.cshnormalfile(svn:executable 1 *)$sha1$5f1fcde59f6346f8bf9eb5503cc996102152e7a2Mrdxxu-svn-gmt&fN1 ?! Y4i#gmtsar/csh/p2p_S1_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_S1_SLC.cshnormalfile(svn:executable 1 *)$sha1$7153648e9ab8d0c03521e9d9fa70da4452e98b44Krryxxu-svn-gmt(BfA0 5! O4igmtsar/csh/stack.cshgmtsar/cshbranches/5.7/gmtsar/csh/stack.cshnormalfile(svn:executable 1 *)$sha1$b2fc5eb40ae7e57367b0280ac956bf78755ed55c*-AUqksandwellef`/ U! o4igmtsar/csh/detrend_before_unwrap.cshgmtsar/cshbranches/5.7/gmtsar/csh/detrend_before_unwrap.cshnormalfile(svn:executable 1 *)$sha1$12833a8e551e2d3bc6aba4a7f356400f602d9c50VPOpwessel8f<- C ]i#gmtsar/read_optional_args.cgmtsarbranches/5.7/gmtsar/read_optional_args.cnormalfile()$sha1$015db74211e4a68d1c7fd17eaff526a1a2f89136iv$yxxu-svn-gmtf(, / Ii#gmtsar/fft_bins.cgmtsarbranches/5.7/gmtsar/fft_bins.cnormalfile()$sha1$f6508dcc5941caec6b5a1b374a1bbc043b45994div$yxxu-svn-gmtf.+ 5 Oi#gmtsar/stringutils.cgmtsarbranches/5.7/gmtsar/stringutils.cnormalfile()$sha1$0e30bdf47ce50d0a25a9a915e51205bd5f104089iv$yxxu-svn-gmtf$* + Ei#gmtsar/radopp.cgmtsarbranches/5.7/gmtsar/radopp.cnormalfile()$sha1$c77674d1b7f647b6478944dfdeb67f6efd2323f5iv$yxxu-svn-gmtf5) ; Ui#gmtsar/sarleader_ALOS.hgmtsarbranches/5.7/gmtsar/sarleader_ALOS.hnormalfile()$sha1$d76d5c4663c9655f806bbdbe3a34f90e96d0dbeciv$yxxu-svn-gmtf"( ) Ci#gmtsar/orbit.hgmtsarbranches/5.7/gmtsar/orbit.hnormalfile()$sha1$ada5e034e3f4ad986ca63f52a186a620b2ff6d81iv$yxxu-svn-gmtf*' 1 Ki#gmtsar/trans_col.cgmtsarbranches/5.7/gmtsar/trans_col.cnormalfile()$sha1$6c397f9064568e138e51e288cd49a80afb0f27e8iv$yxxu-svn-gmt+f-& 3 Mi#gmtsar/solid_tide.cgmtsarbranches/5.7/gmtsar/solid_tide.cnormalfile()$sha1$9e5c8481162f9ffba39341beccad8c9acb467f2d}pKF9xxu-svn-gmtf(% / Ii#gmtsar/read_orb.cgmtsarbranches/5.7/gmtsar/read_orb.cnormalfile()$sha1$51a9104a608b9e2f9e282753b5bdc2d923dc6cc8iv$yxxu-svn-gmtf ?C{GxEe1a- ` - ^ + \ ) Y % U ! S QM~JuBr?3i$sha1$6739c2a13fc61b70a084098ad50bb4fbb61bb6833i$sha1$4d67d78dcedb48c258a91b5ba0c99ab4a6865eb43i$sha1$5c46f720b4e9ebeba7e3247f324093c1745790c73i$sha1$3d461e8ced55730247af420fa259f5045bb4e0f552i$sha1$4344075a7d0c32589d411418d9f1f475cbaba4d9/3i$sha1$41a40275da06babd69ebc178652f27fb7e01fe8bE3i$sha1$417cab945b7b9bf805c632c84781e9133134a3ea3i$sha1$4158cdb81499a090412c792e35d0af8d41415ecf2i$sha1$41162d9752750f0e431b0621db7730c370930acc3i$sha1$402d35cb34808e3b0d483fc9b91fd2e25a72d4653i$sha1$3edc99b52447d1c186a39404b7ec3954a479f0a53i$sha1$3ed237ac3b90b1d514c739f987dfeaa29d6a9e4b/2i$sha1$66e5cd1f28b6b08d6fda301ad8019d45a92b28c253i$sha1$669e2f18f43c03b70393be78e83798d57c2b0ac73i$sha1$6670bb2d75f6406b6f9e7d0a8ef3cd90f4fc111aT3i$sha1$65f237e66a59528cde009e05cc9e2975c9eb5be92i$sha1$65eb93a9c5dbf081432486721386daf93f4820d63i$sha1$6521a0282d7ce731fe26e7defe327a16d38239ce~3i$sha1$631728119a6cf2bdb520b4363bac7a62c4188be1P3i$sha1$62d8162110da0b899b1718627d2cb0d086c1846f3i$sha1$61386717cb4b3f6823d600e11ef42e0ab2245b303i$sha1$60759c6de63a00f20f889766c11129e9fd5ef7db3i$sha1$60126f84fd3ff270d6067b5ef0224a2283cd91bc3i$sha1$600e660ebc0a47e5a36f3146cb080ae9caf84c2c3i$sha1$5f27f98a2b856f6bd3c3c014b0b72841203463473i$sha1$5f1fcde59f6346f8bf9eb5503cc996102152e7a23i$sha1$5eab3b6bf1a14d929b509c07d734c6e64488054f2i$sha1$5e5e784b105d91aee97d64f4bad547320055677322i$sha1$5d9b5c8a325dd70273f3022be9f89033fa547ba83i$sha1$5d75cfe043a493e810c87946b291c27fbc8b05162i$sha1$5d6c0861f7277d3fb735bb2124783f1b103f2e07J3i$sha1$5cd75647c57bc863ec68655fc9d3e5c58ac957f12i$sha1$5c6ac3367b0832fb2f9c230e05835daf159a54bee3i$sha1$5c163a9896e8987ac17b8f70a3e5b140b2efa3173i$sha1$5bdaabb67bbe73c3b8280beeae178eb906e6ac6f3i$sha1$5b6774df79fbeefde8957fb06f939ab5a0cd32e03i$sha1$5af59ca2d309bc72075296e2d1441a749e65703f?3i$sha1$5ad7580d615cc1721fe73821de4dccebd0981c9cQ3i$sha1$597391956e1e74d0e25432a0ab007be3a4df524d3i$sha1$595293d81991ef35c767049214d6e001053fe9273i$sha1$58e7b1128f462263515190fd9085e2853b266b053i$sha1$5869c372ce1668cd893aff4feaf90a928934d76f3i$sha1$57e96798530a9afaa8867fa1c304f53d9f2416f22i$sha1$56e81c2f2566954c80a40893e810851c28cbca3b 3i$sha1$55eb9a055c251a1ed880d0f0a57a50b44f35d66a3i$sha1$5556931f57f306b374e8beedb5a8421a1d161456i2i$sha1$553ad0399691ccacc7991366cf763a561504d857*3i$sha1$53db8da12fe37b51975f830deeabde3657091d6b2i$sha1$53339edc0a501c1522df2077be26638ca1997662@2i$sha1$52f24a90792aeade940faf238853a092787722c7o3i$sha1$526d3b9902f82e7437b35cb7c1e793bcaf83774a^3i$sha1$525fb950f831c35c1fd7dfd796b17e8469824f973i$sha1$51a9104a608b9e2f9e282753b5bdc2d923dc6cc82i$sha1$514fa1513ea9b26582b185c6d944314757abbf36#2i$sha1$50b4bbef7e89a25c6029ab7e311ff7c1ae529c98-2i$sha1$506309dd4d18ddc1b2ba7f1a7e0024c1a82cf7e7(2i$sha1$4c447e47b5cd07c140ae06140304b1f581450bfe63i$sha1$4b47c26d38f6b0cd06aeffa987add0a7cd1de27b3i$sha1$4b2ea1e8e604e28c279dd15588a148a867c788473i$sha1$4aac4d9f70cfc38b0596420c7b75507544fc17ec>3i$sha1$49ffffc67287629fe8f32f896b4416c7b0a056da3i$sha1$492028f2c0a47edb85a5f0d2f8aab76908c466fc3i$sha1$47f40ac0aaa2948a040eddff81e1c5957baf0133!3i$sha1$466f870d5dffa631458f9daf9e59a2348335f12f3i$sha1$463cd1f77815a417f9d3e3aafc12fc0de9e443c12i$sha1$445d51466e2c71f25ea2875514a586fe2d83f6f4'3i$sha1$43e63a66d2ee5703bd54fe72a9a38d37cc77decer %\; Y 6lRUV8 K! e4igmtsar/csh/proj_ll2ra_ascii.cshgmtsar/cshbranches/5.7/gmtsar/csh/proj_ll2ra_ascii.cshnormalfile(svn:executable 1 *)$sha1$802d1964e556b047387b6ce78cde110722313337VPOpwesselfO7 C! ]4igmtsar/csh/select_pairs.cshgmtsar/cshbranches/5.7/gmtsar/csh/select_pairs.cshnormalfile(svn:executable 1 *)$sha1$12cd1dcbae854d7a3b8650453bf5353ccca36738a\SsandwellfP6 A! [4i#gmtsar/csh/dem2topo_ra.cshgmtsar/cshbranches/5.7/gmtsar/csh/dem2topo_ra.cshnormalfile(svn:executable 1 *)$sha1$d3cafe1091710dc4b976da53325e25a848b24e06eUxxu-svn-gmtfE5 9! S4igmtsar/csh/p2p_ERS.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_ERS.cshnormalfile(svn:executable 1 *)$sha1$2463787ae68cdf12beeed413d4377a1719eeb455JrLsandwell%fM4 A! [4igmtsar/csh/p2p_SAT_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_SAT_SLC.cshnormalfile(svn:executable 1 *)$sha1$1900e83c69b44f7fad5d8d723a2fac782ea58c33JrLsandwell(DfvFA ;! U4igmtsar/csh/landmask.cshgmtsar/cshbranches/5.7/gmtsar/csh/landmask.cshnormalfile(svn:executable 1 *)$sha1$e4ee3392e8ca33a7c587f9e99dee0598680b7da0VPOpwesselfR@ G! a4igmtsar/csh/landmask_ALOS2.cshgmtsar/cshbranches/5.7/gmtsar/csh/landmask_ALOS2.cshnormalfile(svn:executable 1 *)$sha1$5b6774df79fbeefde8957fb06f939ab5a0cd32e0VPOpwesself^? O! i4i#gmtsar/csh/get_baseline_table.cshgmtsar/cshbranches/5.7/gmtsar/csh/get_baseline_table.cshnormalfile(svn:executable 1 *)$sha1$34820176d9b6cafb75d4ece237c43b1dec09325dxxu-svn-gmt_fO> C! ]4igmtsar/csh/stack_phase.bashgmtsar/cshbranches/5.7/gmtsar/csh/stack_phase.bashnormalfile(svn:executable 1 *)$sha1$0c7ca0c728ce415ba8f08fffb63ec597c01af31a*-AUqksandwell =fI= O! iigmtsar/csh/gmtsar_sharedir.csh.ingmtsar/cshbranches/5.7/gmtsar/csh/gmtsar_sharedir.csh.innormalfile()$sha1$d57b5cd0c347ead79dd533f70784314803bd869b*-AUqksandwellfG< ;! U4igmtsar/csh/p2p_ENVI.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_ENVI.cshnormalfile(svn:executable 1 *)$sha1$0725b2dbb344010d9fdccef19840b756fe9381e5JrLsandwell%f^; O! i4i#gmtsar/csh/preproc_batch_tops.cshgmtsar/cshbranches/5.7/gmtsar/csh/preproc_batch_tops.cshnormalfile(svn:executable 1 *)$sha1$aa4419c4a36d8edf33f1688dc0d6e95df25274caKrryxxu-svn-gmt1fT: E! _4i#gmtsar/csh/snaphu_interp.cshgmtsar/cshbranches/5.7/gmtsar/csh/snaphu_interp.cshnormalfile(svn:executable 1 *)$sha1$872e8c16ce5e80be97ea3dace77dab71ff958d3fmzv xxu-svn-gmt@fi9 ]! w4igmtsar/csh/pre_proc_batch_ALOS2_SCAN.cshgmtsar/cshbranches/5.7/gmtsar/csh/pre_proc_batch_ALOS2_SCAN.cshnormalfile(svn:executable 1 *)$sha1$f4ffe1630e2761550f0152c39777b9698a3c006dJrLsandwellf *iB% g   - o  R5wZ= bE J'i\Ri Y$sha1$0cd82c5dc0626f81e504f547f5d926d3413ee5c4$md5 $ade5308658cf6e3df9af844313ec866f\Qi Y$sha1$157e4840b45f96d657e3c9645b89254972103cae1$md5 $9ef7156f099ea7c3904fe38fa0845432\Pi Y$sha1$b3569767b71fb521902f24adaa61d6f12dc7cf4a$md5 $2b78b483057e80b51aa918d0d65a37da\Oi Y$sha1$b442c77b156ab417e245d753337ab448c72f289a$md5 $7370f22a0db3703e27a8fe620fcb72b9]2iY$sha1$3b1c69158f5d6263162781118be0a1e988748d71(D$md5 $8e16a25e64a6a4c66df3bc793db17c72\Mi Y$sha1$0f08aef8dc38fb3b48ee36b8fbd05602aaf0a60e $md5 $2350e671a164f30007a2c8ecc01585d9\Li Y$sha1$6bd076e374b5357a1bf65e8ccb557a5f2b758721b$md5 $f3f0c25a9d75fe5a51df71fcfe834221\Ki Y$sha1$2532afbec6a26749373814e8ffb5dbd94331cc3c$md5 $f457d3b370c9313d26a575efed8de0a2\Ji Y$sha1$dc0fbac4cf114c0a757f58ee8dd273276317340c $md5 $4af3c5eef0354ccffd88c46501d6e102\Ii Y$sha1$c1ee2fedfe0ca7fa3ffaa216c127044ba7a70689 $md5 $fe1d0c7ff12cb408360912527a812521\Hi Y$sha1$27bba08307f8f1a52b5bd8ea6e789cb9358eba80 $md5 $1cb90433d1d362b2075cb124e62d6400\Gi Y$sha1$1d82c99f4b9e289747e19cc2bde6b5e8cf02271cm$md5 $80e24ffdaf3d5cbd7cf445115410db89\Fi Y$sha1$c595dadc1b6b4ad1aaf3fb0284c9bad9d9b35a19A$md5 $0e99bcfdb059a3f25c92825f3c312068\Ei Y$sha1$61386717cb4b3f6823d600e11ef42e0ab2245b30$md5 $01eeaab091d7c6b40f6e907d3dcf142f\Di Y$sha1$3cecf564e32afef62d3ab87fb897196c2ce9310f$$md5 $5ce8ad618efa155e5acac58559f94d04\Ci Y$sha1$f65f0e9de933fe9512cd641a94fcb9f70d951bb0$md5 $2a1e12f135f705e34d9c8ceaeb5e79e4\Bi Y$sha1$5d75cfe043a493e810c87946b291c27fbc8b0516%>$md5 $d1ee8b84abf06de23f5da68219478fb7\Ai Y$sha1$55eb9a055c251a1ed880d0f0a57a50b44f35d66a x$md5 $54c743743410164ee899411b0e9e9178\@i Y$sha1$1e22bed4e58a3168dcaff411939b33058ad5a9a6[$md5 $0dad3582d75fe6b8804740c0e718f040\?i Y$sha1$6b4f58910f3360c6e61ef6e490ffcc67a113b7bc7$md5 $72d63c76f76907bab45dbd3e2bb441d1\>i Y$sha1$3126720a90b6f49d9ef1d807062a669268fd8f7b $md5 $ebd5f2d307b17bf3bd3fffa7416090b2\=i Y$sha1$dc9ca369a8c9ca069f50742be1fa0e7537659e84$$md5 $4af163093394bc73d3bdbcd3af2ce905\<i Y$sha1$9ef3e48229407da170402dc824fe2bf1c388e46b8f$md5 $0e15e40011c449c005cc15f3787a4838\;i Y$sha1$b6913c175e6d5d11fcd34e0ea6fce65977101d89 $md5 $40248241f3c188e8374a1ea44548d9d7\:i Y$sha1$1d19f46b820aab0f69b33b7a295a1a2f07fbba74$md5 $96df7284c5d37c981ce77a837431256d\9i Y$sha1$d0c7a2104c345fee233148e7c1608ed398842b02$md5 $32d750f77b1d22010403aa48a4884795\8i Y$sha1$03f21661be43cd2e8356ab76c497503fe02e216b"p$md5 $0cdd728fac2d46a1db74d683856dee7e\7i Y$sha1$3aad433d4d5afd3ad778001bd9ffc1035a0725b9$md5 $bfca40bdc7bef9b1e7e5167f26bfb59e\6i Y$sha1$60126f84fd3ff270d6067b5ef0224a2283cd91bc$md5 $61fd65ac053af914c005b206d0084bf9\5i Y$sha1$2dc27ca865ecc42e17ff67c196d9b7d1b535ae0b $md5 $d7f263bdf32fb62b0cc4c4006759a2d3\4i Y$sha1$cf1ee770c5d73bba5844d2a4aee10ed68bbc6524)$md5 $149d54f4559d15c017e9fb6e88b1c440\3i Y$sha1$fb33f52102f901916929bc3c2769003135f144f6 $md5 $e7e1f052a74d56bb7730ae03dc823e18\Ni Y$sha1$600e660ebc0a47e5a36f3146cb080ae9caf84c2c$md5 $a6d7bc4b7145ab62459faead3f3e0eba\1i Y$sha1$83356ef9678aaed6c6158ab91cfcc534ffca28a5o$md5 $8de1168d9eea21de2812186b1356ac99\0i Y$sha1$597391956e1e74d0e25432a0ab007be3a4df524d$md5 $4fb7cda64c82889bfdd422f029ded39b\/i Y$sha1$ee37d193146a2b51a944d0f79d0ab17b06d86fe2 8$md5 $eb527a13568962200281bf0d268aa369\.i Y$sha1$ab84db10cfec0ac328461c5feba71d3f8b6e4020$md5 $05e775f73a03f0dd6ff6c5fb5b1b128c\-i Y$sha1$4b47c26d38f6b0cd06aeffa987add0a7cd1de27b%$md5 $fe0548735bb49fce9f523c661e12e335\,i Y$sha1$e4ee3392e8ca33a7c587f9e99dee0598680b7da0$md5 $e0f3d73cd4aea15c496113f61c4b319f\+i Y$sha1$5b6774df79fbeefde8957fb06f939ab5a0cd32e0$md5 $bee8b4d6be586c3372a0a5bd12d4f860\*i Y$sha1$34820176d9b6cafb75d4ece237c43b1dec09325d_$md5 $7dc7376a3f4f8d006130c114d7cf3bf6\)i Y$sha1$0c7ca0c728ce415ba8f08fffb63ec597c01af31a =$md5 $d60ce0a9fa5e47cfd807e7bbde4eb279 PvJ |M" Y ' s M  n ?  \ 0  z L \(o@X*tGs? k5c0`.. )?gmtsar/filtersg3 )Igmtsar/filtersgmtsar/filters/gauss_tsx_50m.m/1 )Egmtsar/filtersgmtsar/filters/gauss_tsx_50mR4 )Kgmtsar/filtersgmtsar/filters/gauss_tsx_200m.mZ2 )Ggmtsar/filtersgmtsar/filters/gauss_tsx_200m>4 )Kgmtsar/filtersgmtsar/filters/gauss_tsx_100m.m;2 )Ggmtsar/filtersgmtsar/filters/gauss_tsx_100m[2 )Ggmtsar/filtersgmtsar/filters/gauss_ers_200m+4 )Kgmtsar/filtersgmtsar/filters/gauss_ers_100m.m'2 )Ggmtsar/filtersgmtsar/filters/gauss_ers_100mI5 )Mgmtsar/filtersgmtsar/filters/gauss_dir_range.mD3 )Igmtsar/filtersgmtsar/filters/gauss_dir_azi.m?5 )Mgmtsar/filtersgmtsar/filters/gauss_alos_700m.m23 )Igmtsar/filtersgmtsar/filters/gauss_alos_700mT5 )Mgmtsar/filtersgmtsar/filters/gauss_alos_500m.m.3 )Igmtsar/filtersgmtsar/filters/gauss_alos_500mQ5 )Mgmtsar/filtersgmtsar/filters/gauss_alos_300m.m-3 )Igmtsar/filtersgmtsar/filters/gauss_alos_300mN5 )Mgmtsar/filtersgmtsar/filters/gauss_alos_200m.mJ3 )Igmtsar/filtersgmtsar/filters/gauss_alos_200m05 )Mgmtsar/filtersgmtsar/filters/gauss_alos_100m.m*3 )Igmtsar/filtersgmtsar/filters/gauss_alos_100mL, );gmtsar/filtersgmtsar/filters/gauss9x9K, );gmtsar/filtersgmtsar/filters/gauss9x5F. )?gmtsar/filtersgmtsar/filters/gauss5x5.m%, );gmtsar/filtersgmtsar/filters/gauss5x5C, );gmtsar/filtersgmtsar/filters/gauss5x3B- )=gmtsar/filtersgmtsar/filters/gauss3x213- )=gmtsar/filtersgmtsar/filters/gauss33x9<. )?gmtsar/filtersgmtsar/filters/gauss33x33(- )=gmtsar/filtersgmtsar/filters/gauss29x9\. )?gmtsar/filtersgmtsar/filters/gauss29x29O- )=gmtsar/filtersgmtsar/filters/gauss25x7Y. )?gmtsar/filtersgmtsar/filters/gauss25x25H. )?gmtsar/filtersgmtsar/filters/gauss21x21A, );gmtsar/filtersgmtsar/filters/gauss1x1=. )?gmtsar/filtersgmtsar/filters/gauss19x191- )=gmtsar/filtersgmtsar/filters/gauss17x5:3 )Igmtsar/filtersgmtsar/filters/gauss17x17_2sig@. )?gmtsar/filtersgmtsar/filters/gauss17x17,2 )Ggmtsar/filtersgmtsar/filters/gauss15x5_53kmU/ )Agmtsar/filtersgmtsar/filters/gauss15x5.mP- )=gmtsar/filtersgmtsar/filters/gauss15x58/ )Agmtsar/filtersgmtsar/filters/gauss15x3.mM- )=gmtsar/filtersgmtsar/filters/gauss15x36. )?gmtsar/filtersgmtsar/filters/gauss15x15). )?gmtsar/filtersgmtsar/filters/gauss13x13&, );gmtsar/filtersgmtsar/filters/fill.3x3S* )7gmtsar/filtersgmtsar/filters/box5x3G+ !?gmtsar/cshgmtsar/csh/update_PRM.csh0 !Igmtsar/cshgmtsar/csh/unwrap_parallel.csh0 !Igmtsar/cshgmtsar/csh/tide_correction.csh- !Cgmtsar/cshgmtsar/csh/stack_phase.bash+ !?gmtsar/cshgmtsar/csh/stack_corr.csh& !5gmtsar/cshgmtsar/csh/stack.csh. !Egmtsar/cshgmtsar/csh/snaphu_interp.csh' !7gmtsar/cshgmtsar/csh/snaphu.csh. !Egmtsar/cshgmtsar/csh/snaphu.conf.brief( !9gmtsar/cshgmtsar/csh/slc2amp.csh0 !Igmtsar/cshgmtsar/csh/shift_atime_PRM.csh- !Cgmtsar/cshgmtsar/csh/select_pairs.csh% !3gmtsar/cshgmtsar/csh/sarp.csh) !;gmtsar/cshgmtsar/csh/samp_slc.csh1 !Kgmtsar/cshgmtsar/csh/proj_ra2ll_ascii.csh+ !?gmtsar/cshgmtsar/csh/proj_ra2ll.csh+ !?gmtsar/cshgmtsar/csh/proj_model.csh1 !Kgmtsar/cshgmtsar/csh/proj_ll2ra_ascii.csh+ !?gmtsar/cshgmtsar/csh/proj_ll2ra.csh7 !Wgmtsar/cshgmtsar/csh/preproc_batch_tops_esd.csh3 !Ogmtsar/cshgmtsar/csh/preproc_batch_tops.csh0 !Igmtsar/cshgmtsar/csh/prep_data_linux.csh* !=gmtsar/cshgmtsar/csh/prep_data.csh. !Egmtsar/cshgmtsar/csh/pre_proc_init.csh8 !Ygmtsar/cshgmtsar/csh/pre_proc_batch_ALOS_SLC.csh: !]gmtsar/cshgmtsar/csh/pre_proc_batch_ALOS2_SCAN.csh/ !Ggmtsar/cshgmtsar/csh/pre_proc_batch.csh) !;gmtsar/cshgmtsar/csh/pre_proc.csh+ !?gmtsar/cshgmtsar/csh/pop_config.csh / !Ggmtsar/cshgmtsar/csh/p2p_processing.csh, !Agmtsar/cshgmtsar/csh/p2p_TSX_SLC.csh, !Agmtsar/cshgmtsar/csh/p2p_SAT_SLC.csh K1P$wL!sGlA9|Q&evJ o C   j >  b 6 1] \ 1   V *|X,}Q&+Y$md5 $677459b0f5d3a572ef92d0195ea64049+Y$md5 $67f6d4f4e26319345389fe7cd5b17ea9+Y$md5 $5f76b28dc97a25ce1fee4f62df4d1e1f+Y$md5 $6cecdc5a9b3fb140435564f28de33408+Y$md5 $5698ccf7179f0fffbc080cf4a5d4e089+Y$md5 $6b14e4deeb5a42be209526dba98ed6ac+Y$md5 $54b0d7773fef8792717df526948d5b61+Y$md5 $582822103dc4413d0b31c14178b8a0ad+Y$md5 $53c760b977b667dcd1961b91cfa22a49+Y$md5 $523169bda658a987769845755a531511+Y$md5 $51cfc250c7c5d7c6c703d2f4d2a499e5!+Y$md5 $513fed25a5fbe647c13a98c3d40ab06c*Y$md5 $505695aee426d95c5fd23b5ea958a533W*Y$md5 $504f50a334e69e90463c57044303cac3+Y$md5 $5028af1554d643c8ba811bd3bf0c6ba2+Y$md5 $4ffe192e46098cee171756ae1fd643e0+Y$md5 $4fb7cda64c82889bfdd422f029ded39b+Y$md5 $4f700544c6e31f89f3d8c81b36f59861v+Y$md5 $4f60ac0598e46d6be3d654de85a2fec1*Y$md5 $4ec13cd661ac86ec40381d8a378964bf+Y$md5 $4e21650be4f173b2e958f869f65b30f8m+Y$md5 $4e0780ce947fc894b973c785dd762ca7*Y$md5 $4d809100da103444416b0a7b9a800426*Y$md5 $4d7ff3cc913ce64900ed919e1b420ac3B*Y$md5 $4d34672867f9f610011fe6c7b002d5ce5*Y$md5 $4d19a0d642640b26d6cd6568adc51b03*Y$md5 $4ccc2c304539dfc6b7fd9ab7fe118f83U*Y$md5 $4c8f1e19daf7c7a27c39133ef920c3e2'+Y$md5 $4ba2c830433ffc50d5ab32d76adf9bec6+Y$md5 $4b99896a72c1537b09fadfc646a95005+Y$md5 $4b863247ed949108c22f75624497bceb^*Y$md5 $6e46a3777a5d55c60eae8427077af278*Y$md5 $6e08ad86c02bcbb7832cee5af8adb892a+Y$md5 $6daaa9cef76b889f3c8b53bf5bf885d29+Y$md5 $6d37bda4585718a9c996d36645e437df+Y$md5 $6d1e3f6492ad77fa50ccb8602758ab1d+Y$md5 $6b62dfb0434a944047c812aca20cc314*Y$md5 $6b4c356b5600043bbda8bcde2f6c4794 +Y$md5 $6aebbab4466318cada0a38c9949a30f9+Y$md5 $6a5f9978569d2aecf1fae10a133018f7+Y$md5 $6967a059d1f0305224fdc7094aa97865P*Y$md5 $692a0dcea7e4a80d47f1c8dadea86125C+Y$md5 $684f6ee91a05ececa273c46d0cd7b1ec+Y$md5 $6711b78cf0adf93dcf53ecbda02bc7af+Y$md5 $667a74d8ff54eb4adcac18f91e41f6f2*Y$md5 $656ff008246222ef8afbf05b9ff002a59*Y$md5 $651536df5a73f56733710481f475a5c2F+Y$md5 $64635cd5a5ca3adc5c919938104afa6bL+Y$md5 $645eebee83ecb40385cbfd96e7b2b613D+Y$md5 $63db57b17f5ac6bd90893cc0fadf99c6Z+Y$md5 $6295de3e39d56c1ed2cde958be90a5fb+Y$md5 $622c01136c8e1dd0e57005cf77097d69+Y$md5 $61fd65ac053af914c005b206d0084bf9+Y$md5 $610fb996c2c2b00b72862ef9c7378d92*Y$md5 $60eed968441be9170d265f5568902944y*Y$md5 $603315d2de653ec754df9652f0bf67eft*Y$md5 $5f8c95abf32444a79da4da46b15e4984+Y$md5 $5ee010f66127761ae1f8a9e6b864993a+Y$md5 $5ea0ac9ac2d10e9355c755cf2c7595f4+Y$md5 $5dcfafaba7e6ac844f789774e02d634c +Y$md5 $5ce8ad618efa155e5acac58559f94d04+Y$md5 $5acaa72a41da1f831aacd28d5df23b30+Y$md5 $59c19ab40e7f3551c0acc82d9ecafae8+Y$md5 $5999fa6b304422ef14102bd46bddb914*Y$md5 $58a8367b2b0b083f32a286814e965977z+Y$md5 $5894f711778339f7848aa90e8a27de4a+Y$md5 $5891d2e0cdc2ad5faacededf6f037fe1+Y$md5 $5776b9cb9f3e6ff8e664b6639e457b0b+Y$md5 $575d5eb26deee5886dc63ca8bd25df19+Y$md5 $575b82bdf12fd794227e7464fb0954c9*Y$md5 $54e510c4dbec88f878c32647d00abc89*Y$md5 $54d2f1d8b32d68f7d52b86308160702bg+Y$md5 $54c743743410164ee899411b0e9e9178+Y$md5 $54a718f0d77d7e79e5e0ccf1b7fe37df+Y$md5 $5483299475658a7feea4bab5cfe39e22K &A ~  + Ho 5u/X\ I! c4i#gmtsar/csh/unwrap_parallel.cshgmtsar/cshbranches/5.7/gmtsar/csh/unwrap_parallel.cshnormalfile(svn:executable 1 *)$sha1$1d82c99f4b9e289747e19cc2bde6b5e8cf02271cWs*Zdxxu-svn-gmtmfF[ 7! Q4i#gmtsar/csh/filter.cshgmtsar/cshbranches/5.7/gmtsar/csh/filter.cshnormalfile(svn:executable 1 *)$sha1$c595dadc1b6b4ad1aaf3fb0284c9bad9d9b35a19ju}xxu-svn-gmtAffXV I! c4i#gmtsar/csh/prep_data_linux.cshgmtsar/cshbranches/5.7/gmtsar/csh/prep_data_linux.cshnormalfile(svn:executable 1 *)$sha1$55eb9a055c251a1ed880d0f0a57a50b44f35d66aUs[mxxu-svn-gmt xfVU K! e4igmtsar/csh/proj_ra2ll_ascii.cshgmtsar/cshbranches/5.7/gmtsar/csh/proj_ra2ll_ascii.cshnormalfile(svn:executable 1 *)$sha1$1e22bed4e58a3168dcaff411939b33058ad5a9a6VPOpwessel[fUT I! c4igmtsar/csh/tide_correction.cshgmtsar/cshbranches/5.7/gmtsar/csh/tide_correction.cshnormalfile(svn:executable 1 *)$sha1$6b4f58910f3360c6e61ef6e490ffcc67a113b7bc/nzo [sandwell7f_S S! m4igmtsar/csh/align_batch_ALOS_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/align_batch_ALOS_SLC.cshnormalfile(svn:executable 1 *)$sha1$3126720a90b6f49d9ef1d807062a669268fd8f7bJrLsandwell fSR G! a4igmtsar/csh/pre_proc_batch.cshgmtsar/cshbranches/5.7/gmtsar/csh/pre_proc_batch.cshnormalfile(svn:executable 1 *)$sha1$dc9ca369a8c9ca069f50742be1fa0e7537659e84JrLsandwell$fJQ ;! U4i#gmtsar/csh/pre_proc.cshgmtsar/cshbranches/5.7/gmtsar/csh/pre_proc.cshnormalfile(svn:executable 1 *)$sha1$9ef3e48229407da170402dc824fe2bf1c388e46b1?xxu-svn-gmt8ffXP G! a4i'gmtsar/csh/filter_alos_ss.cshgmtsar/cshbranches/5.7/gmtsar/csh/filter_alos_ss.cshnormalfile(svn:executable 1 *)$sha1$b6913c175e6d5d11fcd34e0ea6fce65977101d89'ma)gxtong-svn-gmt fNO ?! Y4i#gmtsar/csh/proj_ra2ll.cshgmtsar/cshbranches/5.7/gmtsar/csh/proj_ra2ll.cshnormalfile(svn:executable 1 *)$sha1$1d19f46b820aab0f69b33b7a295a1a2f07fbba74Tsxxu-svn-gmtf?N 3! M4igmtsar/csh/sarp.cshgmtsar/cshbranches/5.7/gmtsar/csh/sarp.cshnormalfile(svn:executable 1 *)$sha1$d0c7a2104c345fee233148e7c1608ed398842b02JrLsandwellfaM U! o4igmtsar/csh/intf_batch_ALOS2_SCAN.cshgmtsar/cshbranches/5.7/gmtsar/csh/intf_batch_ALOS2_SCAN.cshnormalfile(svn:executable 1 *)$sha1$03f21661be43cd2e8356ab76c497503fe02e216bCr|#Qsandwell"pfVL G! a4i#gmtsar/csh/MAI_processing.cshgmtsar/cshbranches/5.7/gmtsar/csh/MAI_processing.cshnormalfile(svn:executable 1 *)$sha1$3aad433d4d5afd3ad778001bd9ffc1035a0725b9gC~g[xxu-svn-gmtf 57f$d5>g ;d A! [igmtsar/csh/grd2geotiff.cshgmtsar/cshbranches/5.7/gmtsar/csh/grd2geotiff.cshnormalfile()$sha1$600e660ebc0a47e5a36f3146cb080ae9caf84c2cWsXЇsandwellfMc A! [4igmtsar/csh/p2p_CSK_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_CSK_SLC.cshnormalfile(svn:executable 1 *)$sha1$3b1c69158f5d6263162781118be0a1e988748d71JrLsandwell(DfIb =! W4igmtsar/csh/align_SAT.cshgmtsar/cshbranches/5.7/gmtsar/csh/align_SAT.cshnormalfile(svn:executable 1 *)$sha1$0f08aef8dc38fb3b48ee36b8fbd05602aaf0a60eJrLsandwell fNa ?! Y4i#gmtsar/csh/align_tops.cshgmtsar/cshbranches/5.7/gmtsar/csh/align_tops.cshnormalfile(svn:executable 1 *)$sha1$6bd076e374b5357a1bf65e8ccb557a5f2b758721q{ BNAxxu-svn-gmtbf<` ?! Yi#gmtsar/csh/config.ers.txtgmtsar/cshbranches/5.7/gmtsar/csh/config.ers.txtnormalfile()$sha1$2532afbec6a26749373814e8ffb5dbd94331cc3cDr|nxxu-svn-gmtfL_ =! W4i#gmtsar/csh/prep_data.cshgmtsar/cshbranches/5.7/gmtsar/csh/prep_data.cshnormalfile(svn:executable 1 *)$sha1$dc0fbac4cf114c0a757f58ee8dd273276317340cUs[mxxu-svn-gmt f  [g O! i4igmtsar/csh/p2p_ALOS2_SCAN_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_ALOS2_SCAN_SLC.cshnormalfile(svn:executable 1 *)$sha1$157e4840b45f96d657e3c9645b89254972103caeJrLsandwell1f7f =! Wigmtsar/csh/fetchOrbit.pygmtsar/cshbranches/5.7/gmtsar/csh/fetchOrbit.pynormalfile()$sha1$b3569767b71fb521902f24adaa61d6f12dc7cf4a*-AUqksandwellfGe ;! U4igmtsar/csh/make_dem.cshgmtsar/cshbranches/5.7/gmtsar/csh/make_dem.cshnormalfile(svn:executable 1 *)$sha1$b442c77b156ab417e245d753337ab448c72f289aM`9sandwellfM^ A! [4igmtsar/csh/align_batch.cshgmtsar/cshbranches/5.7/gmtsar/csh/align_batch.cshnormalfile(svn:executable 1 *)$sha1$c1ee2fedfe0ca7fa3ffaa216c127044ba7a70689JrLsandwell fK] ?! Y4igmtsar/csh/proj_model.cshgmtsar/cshbranches/5.7/gmtsar/csh/proj_model.cshnormalfile(svn:executable 1 *)$sha1$27bba08307f8f1a52b5bd8ea6e789cb9358eba80*-AUqksandwell f Fm I! ci#gmtsar/csh/example.intf.configgmtsar/cshbranches/5.7/gmtsar/csh/example.intf.confignormalfile()$sha1$eed3be1ee64225a9b4aa120dc9723a08bbba7534Erm ߭xxu-svn-gmt 9fOl C! ]4igmtsar/csh/p2p_ALOS_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_ALOS_SLC.cshnormalfile(svn:executable 1 *)$sha1$5eab3b6bf1a14d929b509c07d734c6e64488054fJrLsandwell+4f\k M! g4i#gmtsar/csh/dem2topo_ra_ALOS2.cshgmtsar/cshbranches/5.7/gmtsar/csh/dem2topo_ra_ALOS2.cshnormalfile(svn:executable 1 *)$sha1$d7c380abfd2f1c3c3a0c2e88a7ff72132119e33cKrryxxu-svn-gmtNfUj I! c4igmtsar/csh/shift_atime_PRM.cshgmtsar/cshbranches/5.7/gmtsar/csh/shift_atime_PRM.cshnormalfile(svn:executable 1 *)$sha1$492028f2c0a47edb85a5f0d2f8aab76908c466fcJrLsandwellgfSi G! a4igmtsar/csh/align_ALOS_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/align_ALOS_SLC.cshnormalfile(svn:executable 1 *)$sha1$01adffb8999f1a7d096e03cb6653f6785fdca142JrLsandwell f>h A! [i#gmtsar/csh/config.envi.txtgmtsar/cshbranches/5.7/gmtsar/csh/config.envi.txtnormalfile()$sha1$0cd82c5dc0626f81e504f547f5d926d3413ee5c4Dr|nxxu-svn-gmtf R"N}Q"%NwL q E  jr >  c 7 [ /   U )zFk?e9 ]1V*z+Y$md5 $a482fa6e4319106918b7361fa9cd0e67+Y$md5 $8a8811364c21b6cc9cc8c94adaa1fab5 +Y$md5 $8b36cab44c75290cc22d65048c1f53df +Y$md5 $adf57255c71a84cb22d1f751c83fbe67+Y$md5 $87f08fb6a5a0b25d02beea3fa2a243f9+Y$md5 $a43ce1ca53a4124f0a2373a5abd526fa+Y$md5 $9f6086ce8df5a1e97c5d2511a506d2e2+Y$md5 $ade5308658cf6e3df9af844313ec866f*Y$md5 $ad77ffa8c6e011e16c1306e3263d6a29q+Y$md5 $ab8714059125f63ce41b4e26c30e189e+Y$md5 $aa4ec3419cf2d007b8377acaacb93861V+Y$md5 $a9cb315615fedce9df35f232f5bab857+Y$md5 $a9b88b82ebbc38b714209fa34e9f1651+Y$md5 $a8cd19068f29011afa85df16706aca45+Y$md5 $a8a6ac72c73c7193b171baed97c9c368+Y$md5 $a7df589215553bf506f7560a4e39e52e+Y$md5 $a7a124b4d3d48533aa169e5a9db975ea+Y$md5 $a6d7bc4b7145ab62459faead3f3e0eba+Y$md5 $a5d73c7f1add31132fccb93332b37b9bY+Y$md5 $a5a3a6cd7d537188560fa97cb28b65e6*Y$md5 $a4e06dd0817be57d482be7285860922fr+Y$md5 $a4b629bb0f3cc129825402e7576bd280x+Y$md5 $a3c8ac15ca037187ec2b92a8bba47265+Y$md5 $a3493b36b5f4d49a475070d22cf152f0T*Y$md5 $a290af8b95db86a5fd8830ee4178f8f2e+Y$md5 $a275aa1072cbcbae74f787778352c352+Y$md5 $a226e3f87c4fe3c0fbc9318ff0d8d402A+Y$md5 $a16d76e8cf8fa90064e135786db2f35a+Y$md5 $a0df5980c5910486a4477a5931d50d36f*Y$md5 $a0d0a81f9ca4fc7279b0ffdd0f49ec5aJ+Y$md5 $9ef7156f099ea7c3904fe38fa0845432+Y$md5 $9eac27376945dfbd87f71d26cd6ee2d13+Y$md5 $9246222c6b0c3bc2ad7fdb854ceb2352+Y$md5 $9aaa561d0f831a3a94f58a2d3cf1e526+Y$md5 $8f322697d8f66056f9384479e9204c6a+Y$md5 $9d2837a25403c2dacd8a2a58c75940ac+Y$md5 $85ae5d700851be13a21702fe8a6ed849+Y$md5 $8857afaba6429bf51a4aa6f1d41c0ad5+Y$md5 $9e5dd45c25a4c6c6285cd0427ea1d23e*Y$md5 $9de74975172961ff5afe0025f0bd11b4l+Y$md5 $9cd305c2591a0aa026bf91d69d0be66a+Y$md5 $9c0424692b94c34caab86e4815411169+Y$md5 $9bca9b10b88321ea6766c5b9b7e60c07+Y$md5 $9b27cf01d278b9e3f68a6588eb49fce3R*Y$md5 $9ae8fba7894f8778dc224e9e26f04b8d**Y$md5 $99cea833857e07dba3194948b9b9f4deO+Y$md5 $99c5352ba12a90b9a425930df46d918f+Y$md5 $99c0dee1bc37d8310235924834020b2d$+Y$md5 $9998a679df1133538f5d5d16d47c5f5c+Y$md5 $9976b6936535e2002daf0c127ba5d9da+Y$md5 $99736c3a45d04cef559224694ee0be2d8+Y$md5 $986c296e3de91b634741197538a4862e+Y$md5 $97dbed170091f02a69764f2810b30776+Y$md5 $96df7284c5d37c981ce77a837431256d+Y$md5 $968de03239f7831956ac08c5a4754205F+Y$md5 $950e0126906d5fc0151b7e84797f54c3+Y$md5 $94c2976a486b07ea165ff5b751457a06}*Y$md5 $94c13000f36707e7f2747870e0c9d72f;+Y$md5 $92da077cb29e4d64b1660ae67b253050g+Y$md5 $92cee39cdd7971a108923a0c2cd16be2+Y$md5 $92ae93918e11c72195cf56ba5161d49d+Y$md5 $9206d5a10e815ee64063fb13048497ed+Y$md5 $91fb229634b703fb557ed92728ac0be7r*Y$md5 $91cb208493a9ddfad7e387168d6101e1H+Y$md5 $9194113aa0ae113f6d6121171f87ee79I+Y$md5 $90afa82969c5144a2f7c0187e6415f88+Y$md5 $90106922ea76fb44608cdbb3e5f537fa2+Y$md5 $8edb3e0dd05e6089476ea18305117af6]+Y$md5 $8ed02abde635444ff4cd40ae4f6026c9-*Y$md5 $8e5f9b98ffa9e84cfc78130a3525e705+Y$md5 $8e16a25e64a6a4c66df3bc793db17c72+Y$md5 $8de1168d9eea21de2812186b1356ac99*Y$md5 $8d6d662d2bea026320ab39a897d8ec99b+Y$md5 $8bf4472b708c282947986b5f99ba11db*Y$md5 $8b00e13f1932f59e622bbbd35ec5f185 +Y$md5 $8aee441bf7688b67b37d0064de025c23*Y$md5 $8ae34b66f5a76092e10806161f8e5834|+Y$md5 $8aba0f983c98271d963cfa1c20c0fe5fh+Y$md5 $88dd7653bf239c051f7b5baa8a0e594bN*Y$md5 $889fea47689309e137c0aeee0115762dV+Y$md5 $88905b2267140dee2c86196ab3690c98+Y$md5 $83d80d021f977d20905a56ed0da33ca67 e)i  ^ ]| A! [i#gmtsar/csh/config.alos.txtgmtsar/cshbranches/5.7/gmtsar/csh/config.alos.txtnormalfile()$sha1$e54b46dfc5c8f7eae57a25374f1794530deb8202Dr|nxxu-svn-gmtfE{ 9! S4igmtsar/csh/slc2amp.cshgmtsar/cshbranches/5.7/gmtsar/csh/slc2amp.cshnormalfile(svn:executable 1 *)$sha1$7dd2fcefe17fd0348346de8f141efa3979fe10a7*-AUqksandwellmf=z 1! K4igmtsar/csh/m2s.cshgmtsar/cshbranches/5.7/gmtsar/csh/m2s.cshnormalfile(svn:executable 1 *)$sha1$35ed5eecbc685b14559fbcc17c9824cc8d7d4aefksCsandwellfKy ?! Y4igmtsar/csh/update_PRM.cshgmtsar/cshbranches/5.7/gmtsar/csh/update_PRM.cshnormalfile(svn:executable 1 *)$sha1$f36c0855468150ad528d02e26c35a3069aeebeaaIrsandwellfBx 3! M4i#gmtsar/csh/intf.cshgmtsar/cshbranches/5.7/gmtsar/csh/intf.cshnormalfile(svn:executable 1 *)$sha1$4b2ea1e8e604e28c279dd15588a148a867c78847gvͦcxxu-svn-gmt)fWw K! e4igmtsar/csh/align_ALOS2_SCAN.cshgmtsar/cshbranches/5.7/gmtsar/csh/align_ALOS2_SCAN.cshnormalfile(svn:executable 1 *)$sha1$1a9611bc93d729226e755d2998a83a1236423028JrLsandwell bfVv G! a4i#gmtsar/csh/p2p_processing.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_processing.cshnormalfile(svn:executable 1 *)$sha1$c3cd31fba26237aa8df11c9362c6a522ffc5e755 /xxu-svn-gmtcf3xxu-svn-gmtfQ E! _4igmtsar/csh/make_a_offset.cshgmtsar/cshbranches/5.7/gmtsar/csh/make_a_offset.cshnormalfile(svn:executable 1 *)$sha1$1066ca01d3b34c285d30da15908a1251cd947513{~O8sandwellfL} =! W4i#gmtsar/csh/intf_tops.cshgmtsar/cshbranches/5.7/gmtsar/csh/intf_tops.cshnormalfile(svn:executable 1 *)$sha1$595293d81991ef35c767049214d6e001053fe927mzv xxu-svn-gmtmfl^ O! i4i#gmtsar/csh/intf_tops_parallel.cshgmtsar/cshbranches/5.7/gmtsar/csh/intf_tops_parallel.cshnormalfile(svn:executable 1 *)$sha1$8bf46aad081af8b63d8a0188558a7a45a9bca488Hr xxu-svn-gmtxfb S! m4i#gmtsar/csh/p2p_ALOS2_SCAN_Frame.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_ALOS2_SCAN_Frame.cshnormalfile(svn:executable 1 *)$sha1$f5b57d7b55f948254f7543cb576a1e65163cf8df?gxxu-svn-gmtfB E! _i#gmtsar/csh/batch_tops.configgmtsar/cshbranches/5.7/gmtsar/csh/batch_tops.confignormalfile()$sha1$525fb950f831c35c1fd7dfd796b17e8469824f97SsZ; xxu-svn-gmt Af< ?! Yi#gmtsar/csh/config.rs2.txtgmtsar/cshbranches/5.7/gmtsar/csh/config.rs2.txtnormalfile()$sha1$1af17d72b093959e9834b5217a2e2991fe4a4b3cDr|nxxu-svn-gmtff W! q4i#gmtsar/csh/preproc_batch_tops_esd.cshgmtsar/cshbranches/5.7/gmtsar/csh/preproc_batch_tops_esd.cshnormalfile(svn:executable 1 *)$sha1$c6575b1766e7cb095190dfd2f3788a7f68db0318odjGxxu-svn-gmt7fP A! [4i#gmtsar/csh/p2p_S1_TOPS.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_S1_TOPS.cshnormalfile(svn:executable 1 *)$sha1$ca9d04ad694d5a715661538ef9c6b08114317d45Krryxxu-svn-gmt(f8 ;! Ui#gmtsar/csh/batch.configgmtsar/cshbranches/5.7/gmtsar/csh/batch.confignormalfile()$sha1$01d23a3837b4c515fa8a221ba0242cc5ac77edefDr|nxxu-svn-gmt fH K! ei#gmtsar/csh/config.alos2.slc.txtgmtsar/cshbranches/5.7/gmtsar/csh/config.alos2.slc.txtnormalfile()$sha1$f6435ffe363e6a9f499acacd925b06d67c60dc2cErm ߭xxu-svn-gmtfJ~ 9! S4i'gmtsar/csh/geocode.cshgmtsar/cshbranches/5.7/gmtsar/csh/geocode.cshnormalfile(svn:executable 1 *)$sha1$a8797e5ed13f0d89529b970a3f074f30d9034418&mªxtong-svn-gmtf n}gP3xZE'n]G"iJ+ h L 1   j T <   | d L 1  } ] A +  x Y = $ lFz`K5*^+k+Mb0 !install-sh$ Igmtsar/lib_src/read_data.c_oldu" Egmtsar/lib_src/filelist_makev ;gmtsar/lib_src/Makefiley )gmtsar/lib_srcz 9gmtsar/lib_functions.h  1gmtsar/ldr_orbit.c 1gmtsar/intp_coef.c  Agmtsar/interpolate_orbit.c  7gmtsar/highres_corr.c 1gmtsar/hermite_c.c~ +gmtsar/gmtsar.h 3gmtsar/get_params.c& 9gmtsar/get_locations.cs -gmtsar/get_PRM.c| +gmtsar/geoxyz.c 1gmtsar/fitoffset.c-5 ipreproc/ALOS_preproc/ALOS_fbd2ss/ALOS_fbd2ss.c' Mpreproc/ALOS_preproc/ALOS_fbd2ss5 ipreproc/ALOS_preproc/ALOS_fbd2fbs_SLC/Makefile? }preproc/ALOS_preproc/ALOS_fbd2fbs_SLC/ALOS_fbd2fbs_SLC.c, Wpreproc/ALOS_preproc/ALOS_fbd2fbs_SLC1 apreproc/ALOS_preproc/ALOS_fbd2fbs/Makefile7 mpreproc/ALOS_preproc/ALOS_fbd2fbs/ALOS_fbd2fbs.c( Opreproc/ALOS_preproc/ALOS_fbd2fbs2 cpreproc/ALOS_preproc/ALOS_baseline/Makefile< wpreproc/ALOS_preproc/ALOS_baseline/ALOS_llt2rat_sub.c9 qpreproc/ALOS_preproc/ALOS_baseline/ALOS_baseline.c) Qpreproc/ALOS_preproc/ALOS_baseline 5preproc/ALOS_preproc preproc  libW )gmtsar/xcorr.h )gmtsar/xcorr.c} 1gmtsar/write_orb.c1 9gmtsar/utils_complex.c+ )gmtsar/utils.c ;gmtsar/update_PRM_sub.c 3gmtsar/update_PRM.h 3gmtsar/update_PRM.c 1gmtsar/trans_col.c* Sgmtsar/test_shift/test_shift.c_orig% Igmtsar/test_shift/test_shift.c$ Ggmtsar/test_shift/shifted.eps% Igmtsar/test_shift/plot_shift.m' Mgmtsar/test_shift/gauss.dat_orig" Cgmtsar/test_shift/gauss.dat! Agmtsar/test_shift/Makefile /gmtsar/test_shift 5gmtsar/stringutils.c ;gmtsar/split_spectrum.c ;gmtsar/split_aperture.c +gmtsar/spline.c. 3gmtsar/solid_tide.c %gmtsar/soi.h 3gmtsar/siocomplex.h^ 3gmtsar/siocomplex.c 3gmtsar/sio_struct.c )gmtsar/shift.c# 5gmtsar/sfd_complex.h ?gmtsar/set_prm_defaults.c 3gmtsar/sbas_utils.c" 'gmtsar/sbas.h3 'gmtsar/sbas.c, 9gmtsar/sarleader_fdr.h ;gmtsar/sarleader_ALOS.h 1gmtsar/sarglobal.h -gmtsar/rng_ref.c% 3gmtsar/rng_filter.c/ -gmtsar/rng_cmp.c' -gmtsar/rmpatch.c +gmtsar/resamp.c" =gmtsar/read_xcorr_data.c$ /gmtsar/read_orb.c" Cgmtsar/read_optional_args.c 1gmtsar/read_data.c +gmtsar/radopp.c 9gmtsar/print_results.c -gmtsar/polyfit.c( )gmtsar/plxyz.c) 1gmtsar/phasefilt.c( Ogmtsar/phasediff_get_topo_phase.c 1gmtsar/phasediff.c_ 3gmtsar/phase2topo.c  Agmtsar/parse_xcorr_input.c 1gmtsar/p_scatter.c )gmtsar/orbit.h 5gmtsar/offset_topo.c# 7gmtsar/nearest_grid.c# Ggmtsar/man/manl/stack_table.ln 9gmtsar/man/manl/sarp.ld! Cgmtsar/man/manl/read_ccrs.lc  Agmtsar/man/manl/prm2gips.lp  Agmtsar/man/manl/pre_proc.lj ;gmtsar/man/manl/pdiff.lg =gmtsar/man/manl/offset.lf =gmtsar/man/manl/ihconv.le ?gmtsar/man/manl/ihBperp.li! Cgmtsar/man/manl/fitoffset.lh& Mgmtsar/man/manl/exact_ers_time.lm( Qgmtsar/man/manl/ers_repeat_times.lk& Mgmtsar/man/manl/ers_line_fixer.lo$ Igmtsar/man/manl/ers_baseline.ll +gmtsar/man/manlq !gmtsar/manr$ Ggmtsar/make_gaussian_filter.c -gmtsar/llt2xyz.h -gmtsar/llt2rat.h 7gmtsar/lib_strfuncs.c2 ?gmtsar/lib_src/test_shiftx ;$U!QNKf2d0 a - _ , ] * [ ( Y %W~J|HxE3i$sha1$6e645d2310faaa48ec01f5d5e1688ae8a0b6a3ee3i$sha1$70d694054cea4de5df182e84087cd1c8b2bba9bf3i$sha1$7153648e9ab8d0c03521e9d9fa70da4452e98b442i$sha1$711357cfe8fd3986eed2e8b46513964996e0be1d.3i$sha1$70aa0523ea322a9536975a2fbeb3963194f38f623i$sha1$6ffe42680d0382b61aa21d3d2b2b7b5ddf25a2a13i$sha1$6e4327fabeceaf4375d057ddbf6e34128ede689a3i$sha1$6d4fc8a2575f1b9c7d446d0d4160e779c6666bd42i$sha1$6d44428cf4da5806ebaa0c6444453959b2ca74c7w3i$sha1$6d1bbf1707ebaa83378cdc832d7ade083640581a 3i$sha1$6d05b0d95ecd1bb11b8ea53074c5f5577b401fae33i$sha1$6c397f9064568e138e51e288cd49a80afb0f27e83i$sha1$6bf72277365f0d993d475fff2f9a3b1f6c7e75683i$sha1$6bd076e374b5357a1bf65e8ccb557a5f2b7587213i$sha1$6ba5954eda09d3c493b94b8108b38a9c31795f713i$sha1$6b4f58910f3360c6e61ef6e490ffcc67a113b7bc3i$sha1$6a5b8c885cc9972daa5259bd2b6d873c8a4f16573i$sha1$6968108f90a4dbba9267d29c595a95b97f94a8f93i$sha1$695452bc5621dc58ff6b4261620b88a5ee6d4a2b2i$sha1$68f731b65d2eab0b5d04195ff4413d86e681e5a62i$sha1$68026814226ad9324144bd5d15b973892b771ceeM3i$sha1$85f8f9afae10720cdc2234410fc43e8677fd6831u2i$sha1$84dc472957da1a42add562de34951d04c996026f3i$sha1$845f5aecbbdfde56faadc5ea3e6f830a011b8c9c2i$sha1$8400c3375880f632a183caacacb633bfce50b6d13i$sha1$8358f4d8e328d305623f6d5871ea88f858ff0e553i$sha1$83356ef9678aaed6c6158ab91cfcc534ffca28a53i$sha1$81fcfad8a15f969b65d94b1ce2b462e41c847bdd3i$sha1$81dd319c352bb565a89163ab21085a49bcc50b3c*2i$sha1$819d15e202b06680a2aa0ab1d78603a539c0aac8r2i$sha1$80581eb4b6b10fb55d5878dcd32d991b5533cd05 3i$sha1$802d1964e556b047387b6ce78cde1107223133373i$sha1$7fb5fb2693f79570c98361c40496c85b2149cf052i$sha1$7f129947d762309dc2a13f953a6a7ada37e36f983i$sha1$7e8140832a1d37c1d563732c246fa73c1654b7712i$sha1$7e5a5bd1b5e0c3fd7f10adf8fcda80a669b4a9aa03i$sha1$7e244155638d2eca84603567ff89801e663ffe103i$sha1$7de7217d1a0cf530271f8775956f0f6d75b77eb43i$sha1$7dd2fcefe17fd0348346de8f141efa3979fe10a72i$sha1$7cdf236adb65b3b64cab85a451320485ee3f76f8g2i$sha1$7c65a84e3b600727976ace2c47b34b35bbd2f09f!3i$sha1$7ba737099cca4e42542fb55f7d86a4793d6a33132i$sha1$7ad9722f08573b3207e06dd3d4365ae5c7ee97a8~2i$sha1$7a91d9b84982af669447265d2d31977f3699634e_3i$sha1$7939ee4eb08fcc361343d5c19f9f790b0438b42893i$sha1$7912eac5ee7e5ecde61ea4c148fd316cc3b98b9b2i$sha1$78bbc92a0181854edb95bc7a6d52039d53c86fc9t3i$sha1$7818c1d2156c7dcb55460ac1e1090a42f90315533i$sha1$77911683254a77e640d2673a202d741bb32869233i$sha1$75c5cafa459428490545fe113dd712fcd2ff20cb3i$sha1$7561776edf3e983b17fbd0ae7332d76147d84d303i$sha1$7551532fd8ba27b54a5c316738dec65740a1ee542i$sha1$74637c5ed94b640cbbd25a9ece13aa0fe0ea37172i$sha1$74325fffea70cf9ede74657581b8eb754ece0627R3i$sha1$738d049593f6cf4171360c750aac8968ee0dde693i$sha1$7366c62aecf4a139834d58fb9de2a6b8a80f8d532i$sha1$71e57c56b4d4b47d10ace3dfb1b4c6ab49a43b2b+2i$sha1$719152350ffdfe5f4c12cfa942919be36bd7a175D3i$sha1$716c1050eb9e26f5799a64665a2f64472ac91d6d; 8 ( ` Fq2<8, 3 Mi#gmtsar/sio_struct.cgmtsarbranches/5.7/gmtsar/sio_struct.cnormalfile()$sha1$23631e27b5252d44ac2b7574a1114769b05671e5iv$yxxu-svn-gmtNf& - Gi#gmtsar/rmpatch.cgmtsarbranches/5.7/gmtsar/rmpatch.cnormalfile()$sha1$c1cfc121dd9d44546e60c428024cbd145b5097b6iv$yxxu-svn-gmtf& - Gi#gmtsar/llt2xyz.hgmtsarbranches/5.7/gmtsar/llt2xyz.hnormalfile()$sha1$f75f023f19f7caa7c058c9d0694056d517c53306iv$yxxu-svn-gmt fr 7 Qigmtsar/CMakeLists.txtgmtsarbranches/5.7/gmtsar/CMakeLists.txtnormalfile(svn:keywords 31 Author Date Id Rev Revision URL svn:eol-style native)$sha1$7ba737099cca4e42542fb55f7d86a4793d6a3313:q&7sandwellfQ E! _4igmtsar/csh/p2p_ALOS2_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_ALOS2_SLC.cshnormalfile(svn:executable 1 *)$sha1$2450e019a43135289269ce7dfc55a929431cc1baJrLsandwell+fJ ;! U4i#gmtsar/csh/samp_slc.cshgmtsar/cshbranches/5.7/gmtsar/csh/samp_slc.cshnormalfile(svn:executable 1 *)$sha1$7551532fd8ba27b54a5c316738dec65740a1ee54(|Lxxu-svn-gmt fc W! q4igmtsar/csh/align_batch_ALOS2_SCAN.cshgmtsar/cshbranches/5.7/gmtsar/csh/align_batch_ALOS2_SCAN.cshnormalfile(svn:executable 1 *)$sha1$7e8140832a1d37c1d563732c246fa73c1654b771JrLsandwell Vfn _! y4i#gmtsar/csh/estimate_ionospheric_phase.cshgmtsar/cshbranches/5.7/gmtsar/csh/estimate_ionospheric_phase.cshnormalfile(svn:executable 1 *)$sha1$18a08baa0a4fe59465a0d09c4a95a555ccc93722u{7BTxxu-svn-gmtFf? E! _igmtsar/csh/snaphu.conf.briefgmtsar/cshbranches/5.7/gmtsar/csh/snaphu.conf.briefnormalfile()$sha1$98fe09d116b1790ac45d0952b89aff7585a27bf4*-AUqksandwell*fQ E! _4igmtsar/csh/pre_proc_init.cshgmtsar/cshbranches/5.7/gmtsar/csh/pre_proc_init.cshnormalfile(svn:executable 1 *)$sha1$a25c7283524118a648ddfc2e582382e553426e89JrLsandwellfK ?! Y4igmtsar/csh/stack_corr.cshgmtsar/cshbranches/5.7/gmtsar/csh/stack_corr.cshnormalfile(svn:executable 1 *)$sha1$afc863d06338294627acb0d8a9abf98e71997744*-AUqksandwellQfA 5! O4igmtsar/csh/align.cshgmtsar/cshbranches/5.7/gmtsar/csh/align.cshnormalfile(svn:executable 1 *)$sha1$58e7b1128f462263515190fd9085e2853b266b05JrLsandwell ,fe Y! s4igmtsar/csh/pre_proc_batch_ALOS_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/pre_proc_batch_ALOS_SLC.cshnormalfile(svn:executable 1 *)$sha1$0e18888d972a24565c9d3eec2a8735c205fe3a87JrLsandwellifH =! W4igmtsar/csh/fitoffset.cshgmtsar/cshbranches/5.7/gmtsar/csh/fitoffset.cshnormalfile(svn:executable 1 *)$sha1$65f237e66a59528cde009e05cc9e2975c9eb5be9VPOpwessel fM A! [4igmtsar/csh/p2p_RS2_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_RS2_SLC.cshnormalfile(svn:executable 1 *)$sha1$a802a4a4934905fb67d06e6538d05981a08e2352JrLsandwell(CfD G! ai#gmtsar/csh/config.alos.ss.txtgmtsar/cshbranches/5.7/gmtsar/csh/config.alos.ss.txtnormalfile()$sha1$b099005e5837806180b744c28a8dac26d4be23b1Dr|nxxu-svn-gmt@fD G! ai#gmtsar/csh/batch.alos2.configgmtsar/cshbranches/5.7/gmtsar/csh/batch.alos2.confignormalfile()$sha1$d24a060e6e85772ff48c45063772b3a7511522e2Dr|nxxu-svn-gmt *fX  I! c4i#gmtsar/csh/align_tops_6par.cshgmtsar/cshbranches/5.7/gmtsar/csh/align_tops_6par.cshnormalfile(svn:executable 1 *)$sha1$c29060d09389c9729f476d020a36c0adfd019f2fKrryxxu-svn-gmtfD  9! S4igmtsar/csh/cleanup.cshgmtsar/cshbranches/5.7/gmtsar/csh/cleanup.cshnormalfile(svn:executable 1 *)$sha1$669e2f18f43c03b70393be78e83798d57c2b0ac7VPOpwesselgfi ! ;#gmtsar/cshgmtsarbranches/5.7/gmtsar/cshnormaldir()infinityxxu-svn-gmt *dB% g  d J - o  R5wZ=aD$]iY$sha1$f75f023f19f7caa7c058c9d0694056d517c53306 $md5 $0136f3870b35dcc7885b15c94807e7d4]&i Y$sha1$ccdf1f6f649aa096c58e0967280908cdd911c9c69$md5 $1787ad1a1606f0ae97cb29b9b5e995f4]%i Y$sha1$13dcd2f57d4bee1f8f95195d44e537e05b6ff89c$$md5 $c6bb69cdb00a594fc472fcfbe294fc23]$i Y$sha1$a4930250919ee17387ce16e67b7c47f7d00d523a?$md5 $99c0dee1bc37d8310235924834020b2d]#i Y$sha1$f15cc2842ca0c4375d2790c92879e1569f532fe8?$md5 $6e9b0b4d3b11d8f90b119c865e35aa00\"i Y$sha1$25e92c789ffe672875766e7775bafd275c984212:$md5 $21d7097932a09a9e37dfadb4b5212a27\!i Y$sha1$47f40ac0aaa2948a040eddff81e1c5957baf0133 v$md5 $51cfc250c7c5d7c6c703d2f4d2a499e5\ i Y$sha1$d1bc1fe79e541a2aac4fcd44f636e4f7d65e2abaD5$md5 $2f5851646fc17395abf053b67915ad64\i Y$sha1$099bbfb6c17c1e07add69ce5b574c6e047948920) $md5 $018a4b29fce148f96438f9a1dc319835\i Y$sha1$f1e4672d482406a93b5bde87ce053aea11c6109c[$md5 $0ccd6416ef650bb00e1d96b10d87f70b]i Y$sha1$8e97193bfb1ce1db499ab72f803805cd0c59f743 $md5 $2016438e8e51ac7713cda3d12c8d17d8\i Y$sha1$287e5d2fccec13e8df99a72804f05358dd30d7d9$md5 $0d89b36bbac4a833e6722533b674dbbc\i Y$sha1$f74f171b76ba1606c7378c7511b1ec0150355991$md5 $8337f3c33c5974854619657031cfe94e\i Y$sha1$57e96798530a9afaa8867fa1c304f53d9f2416f2$md5 $cb14f6b0dbf63ea5c4457d12a9165824\i Y$sha1$32074105b601a3cb43e81506d66156ffca313b11 )$md5 $1d2a9d391e8da0d94b1bc02bc8432860\i Y$sha1$ed17b385e81f3451a610b5a352d6d848356f46ba+$md5 $03a45fbb525767be3449879823959ac6\i Y$sha1$e42eb545b07d31c2573d052539b90bc13165a145$md5 $e0551e7872c33875cb510408373e6262\i Y$sha1$c1a3495df6adddae66c026d2f38cf2f7d04266a5.!$md5 $a275aa1072cbcbae74f787778352c352\i Y$sha1$6968108f90a4dbba9267d29c595a95b97f94a8f9@=$md5 $df979e818c8183c880796ad97dbd7e3e\i Y$sha1$ea127034c3ea6e47bc228595366eb8ac62d19dcd$md5 $3bed9ab0b5b606976ad33b16cac9d7d1\i Y$sha1$2729cbf361df5d04d6b1904d2ba6e6f922f7fb6d$md5 $41aa9fb68b3825f2829e2ea1d11617ac\i Y$sha1$2b84648406996ce4e11d539846ed2338d4982d1a$md5 $4503cfcf13394c68c3488393a88958a6\i Y$sha1$05ece19f05427bd61cb0aae25668c258d23cc1c9 $md5 $4e0780ce947fc894b973c785dd762ca7\i Y$sha1$f0da19fe08afc44bba6369c854c3c3bebd94b161Q$md5 $42a244a59a556376e7fb41d227f7d891\i Y$sha1$7912eac5ee7e5ecde61ea4c148fd316cc3b98b9b$md5 $d4d5ab0ba2dbfba7791b114f3b624ed6\i Y$sha1$402d35cb34808e3b0d483fc9b91fd2e25a72d465$md5 $8aee441bf7688b67b37d0064de025c23\ i Y$sha1$f0713231953a39509eacd2bedf05f31133e74536R$md5 $5dcfafaba7e6ac844f789774e02d634c\ i Y$sha1$322b3e6dd4e630939facac98ef54856fbf497f5f$md5 $4510a45e00ed8c6046549b0a192048d2\ i Y$sha1$95bc9958e183e888a72c6262a6159498766736b9q$md5 $ce7c4b1f966fc11675774645a095ff8f\ i Y$sha1$932ef34389003a30638a9a296427793a09bcbcfc a$md5 $0ecccf75e1308df9b906f40241ebbe76\ i Y$sha1$eae56735bb6d9587cfd33413c870f336fddae041U$md5 $799f5e71ffa1124282b5782aa8363d38\i Y$sha1$23631e27b5252d44ac2b7574a1114769b05671e5N$md5 $a8a6ac72c73c7193b171baed97c9c368\i Y$sha1$c1cfc121dd9d44546e60c428024cbd145b5097b6$md5 $034795084619f462b95e0fefa5c2cd83\i Y$sha1$7ba737099cca4e42542fb55f7d86a4793d6a3313q$md5 $f0363b7b52e567d291ba4f64dfa446b4\i Y$sha1$2450e019a43135289269ce7dfc55a929431cc1ba+$md5 $2773495deb1dff7c092501f15fa3f149\i Y$sha1$7551532fd8ba27b54a5c316738dec65740a1ee54 $md5 $790ef512a2a7ebf8f956cb21c149d1f0\i Y$sha1$7e8140832a1d37c1d563732c246fa73c1654b771 V$md5 $d616c0a65ee7bf6adc4f8f56095fdcfc\i Y$sha1$18a08baa0a4fe59465a0d09c4a95a555ccc93722F$md5 $4b99896a72c1537b09fadfc646a95005\i Y$sha1$98fe09d116b1790ac45d0952b89aff7585a27bf4*$md5 $5776b9cb9f3e6ff8e664b6639e457b0b\i Y$sha1$a25c7283524118a648ddfc2e582382e553426e89$md5 $5894f711778339f7848aa90e8a27de4a\~i Y$sha1$afc863d06338294627acb0d8a9abf98e71997744Q$md5 $3996d9bcbc658d74ce493ad0762cc24b\}i Y$sha1$58e7b1128f462263515190fd9085e2853b266b05 ,$md5 $88905b2267140dee2c86196ab3690c98 Dj<]) m 4 l =  { N  w ?   L ) pj-OtXN4]M7# 5preprocpreproc/ENVI_preproc" 3preprocpreproc/CSK_preproc08 5Epreproc/ALOS_preprocpreproc/ALOS_preproc/lib_src; 5Kpreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_merge= 5Opreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_llt2rat9 5Gpreproc/ALOS_preprocpreproc/ALOS_preproc/Makefile; 5Kpreproc/ALOS_preprocpreproc/ALOS_preproc/README.txtD 5]preproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_pre_process_SSE 5_preproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_pre_process_SLCA 5Wpreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_pre_process o# 5preprocpreproc/ALOS_preprocG 5cpreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_mosaic_ss_2frames? 5Spreproc/ALOS_preprocpreproc/ALOS_preproc/CMakeLists.txt`" 3preprocpreproc/S1A_preproc% 9preprocpreproc/CMakeLists.txt[ Wipreproc/ALOS_preproc/ALOS_fbd2fbs_SLCpreproc/ALOS_preproc/ALOS_fbd2fbs_SLC/Makefilee W}preproc/ALOS_preproc/ALOS_fbd2fbs_SLCpreproc/ALOS_preproc/ALOS_fbd2fbs_SLC/ALOS_fbd2fbs_SLC.cS Oapreproc/ALOS_preproc/ALOS_fbd2fbspreproc/ALOS_preproc/ALOS_fbd2fbs/MakefileY Ompreproc/ALOS_preproc/ALOS_fbd2fbspreproc/ALOS_preproc/ALOS_fbd2fbs/ALOS_fbd2fbs.cU Qcpreproc/ALOS_preproc/ALOS_baselinepreproc/ALOS_preproc/ALOS_baseline/Makefile_ Qwpreproc/ALOS_preproc/ALOS_baselinepreproc/ALOS_preproc/ALOS_baseline/ALOS_llt2rat_sub.c\ Qqpreproc/ALOS_preproc/ALOS_baselinepreproc/ALOS_preproc/ALOS_baseline/ALOS_baseline.c@ 5Upreproc/ALOS_preprocpreproc/ALOS_preproc/roi_pac_scripts8 5Epreproc/ALOS_preprocpreproc/ALOS_preproc/include? 5Spreproc/ALOS_preprocpreproc/ALOS_preproc/create_tar.csh? 5Spreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_mosaic_ss: 5Ipreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_look= 5Opreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_fbs2fbd< 5Mpreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_fbd2ssA 5Wpreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_fbd2fbs_SLC= 5Opreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_fbd2fbs> 5Qpreproc/ALOS_preprocpreproc/ALOS_preproc/ALOS_baseline" 3preprocpreproc/RS2_preproca" 3preprocpreproc/ERS_preproc" 3preprocpreproc/TSX_preproc#< /Sgmtsar/test_shiftgmtsar/test_shift/test_shift.c_orig7 /Igmtsar/test_shiftgmtsar/test_shift/test_shift.c6 /Ggmtsar/test_shiftgmtsar/test_shift/shifted.eps7 /Igmtsar/test_shiftgmtsar/test_shift/plot_shift.m9 /Mgmtsar/test_shiftgmtsar/test_shift/gauss.dat_orig4 /Cgmtsar/test_shiftgmtsar/test_shift/gauss.dat3 /Agmtsar/test_shiftgmtsar/test_shift/Makefile3 +Ggmtsar/man/manlgmtsar/man/manl/stack_table.ln, +9gmtsar/man/manlgmtsar/man/manl/sarp.ld1 +Cgmtsar/man/manlgmtsar/man/manl/read_ccrs.lc0 +Agmtsar/man/manlgmtsar/man/manl/prm2gips.lp0 +Agmtsar/man/manlgmtsar/man/manl/pre_proc.lj- +;gmtsar/man/manlgmtsar/man/manl/pdiff.lg. +=gmtsar/man/manlgmtsar/man/manl/offset.lf. +=gmtsar/man/manlgmtsar/man/manl/ihconv.le/ +?gmtsar/man/manlgmtsar/man/manl/ihBperp.li1 +Cgmtsar/man/manlgmtsar/man/manl/fitoffset.lh6 +Mgmtsar/man/manlgmtsar/man/manl/exact_ers_time.lm8 +Qgmtsar/man/manlgmtsar/man/manl/ers_repeat_times.lk6 +Mgmtsar/man/manlgmtsar/man/manl/ers_line_fixer.lo4 +Igmtsar/man/manlgmtsar/man/manl/ers_baseline.ll  !+gmtsar/mangmtsar/man/manlq. )?gmtsar/lib_srcgmtsar/lib_src/test_shiftx3 )Igmtsar/lib_srcgmtsar/lib_src/read_data.c_oldu1 )Egmtsar/lib_srcgmtsar/lib_src/filelist_makev, );gmtsar/lib_srcgmtsar/lib_src/Makefiley( )3gmtsar/filtersgmtsar/filters/ydirX( )3gmtsar/filtersgmtsar/filters/xdir9- )=gmtsar/filtersgmtsar/filters/smooth3x3W- )=gmtsar/filtersgmtsar/filters/slcfilterE/ )Agmtsar/filtersgmtsar/filters/sanandreas252 )Ggmtsar/filtersgmtsar/filters/sanandreas13x972 )Ggmtsar/filtersgmtsar/filters/sanandreas11x74 $$L < 8 4~,,~pB%8_8K82  9 Si#gmtsar/lib_functions.hgmtsarbranches/5.7/gmtsar/lib_functions.hnormalfile()$sha1$eae56735bb6d9587cfd33413c870f336fddae041iv$yxxu-svn-gmtUf*1 1 Ki#gmtsar/write_orb.cgmtsarbranches/5.7/gmtsar/write_orb.cnormalfile()$sha1$57e96798530a9afaa8867fa1c304f53d9f2416f2iv$yxxu-svn-gmtf$0 + Ei#gmtsar/conv2d.cgmtsarbranches/5.7/gmtsar/conv2d.cnormalfile()$sha1$32074105b601a3cb43e81506d66156ffca313b11iv$yxxu-svn-gmt )f,/ 3 Mi#gmtsar/rng_filter.cgmtsarbranches/5.7/gmtsar/rng_filter.cnormalfile()$sha1$ed17b385e81f3451a610b5a352d6d848356f46baiv$yxxu-svn-gmt+f$. + Ei#gmtsar/spline.cgmtsarbranches/5.7/gmtsar/spline.cnormalfile()$sha1$e42eb545b07d31c2573d052539b90bc13165a145iv$yxxu-svn-gmtf*- 1 Ki#gmtsar/fitoffset.cgmtsarbranches/5.7/gmtsar/fitoffset.cnormalfile()$sha1$c1a3495df6adddae66c026d2f38cf2f7d04266a5iv$yxxu-svn-gmt.!f , ' Ai#gmtsar/sbas.cgmtsarbranches/5.7/gmtsar/sbas.cnormalfile()$sha1$6968108f90a4dbba9267d29c595a95b97f94a8f9iv$yxxu-svn-gmt@=f2+ 9 Si#gmtsar/utils_complex.cgmtsarbranches/5.7/gmtsar/utils_complex.cnormalfile()$sha1$ea127034c3ea6e47bc228595366eb8ac62d19dcdiv$yxxu-svn-gmtf0* 7 Qi#gmtsar/extend_orbit.cgmtsarbranches/5.7/gmtsar/extend_orbit.cnormalfile()$sha1$2729cbf361df5d04d6b1904d2ba6e6f922f7fb6div$yxxu-svn-gmtf") ) Ci#gmtsar/plxyz.cgmtsarbranches/5.7/gmtsar/plxyz.cnormalfile()$sha1$2b84648406996ce4e11d539846ed2338d4982d1aiv$yxxu-svn-gmtf&( - Gi#gmtsar/polyfit.cgmtsarbranches/5.7/gmtsar/polyfit.cnormalfile()$sha1$05ece19f05427bd61cb0aae25668c258d23cc1c9iv$yxxu-svn-gmt f&' - Gi#gmtsar/rng_cmp.cgmtsarbranches/5.7/gmtsar/rng_cmp.cnormalfile()$sha1$f0da19fe08afc44bba6369c854c3c3bebd94b161iv$yxxu-svn-gmtQf,& 3 Mi#gmtsar/get_params.cgmtsarbranches/5.7/gmtsar/get_params.cnormalfile()$sha1$7912eac5ee7e5ecde61ea4c148fd316cc3b98b9biv$yxxu-svn-gmtf&% - Gi#gmtsar/rng_ref.cgmtsarbranches/5.7/gmtsar/rng_ref.cnormalfile()$sha1$402d35cb34808e3b0d483fc9b91fd2e25a72d465iv$yxxu-svn-gmtf6$ = Wi#gmtsar/read_xcorr_data.cgmtsarbranches/5.7/gmtsar/read_xcorr_data.cnormalfile()$sha1$f0713231953a39509eacd2bedf05f31133e74536iv$yxxu-svn-gmtRf"# ) Ci#gmtsar/shift.cgmtsarbranches/5.7/gmtsar/shift.cnormalfile()$sha1$322b3e6dd4e630939facac98ef54856fbf497f5fiv$yxxu-svn-gmtf," 3 Mi#gmtsar/sbas_utils.cgmtsarbranches/5.7/gmtsar/sbas_utils.cnormalfile()$sha1$95bc9958e183e888a72c6262a6159498766736b9iv$yxxu-svn-gmtqf0! 7 Qi#gmtsar/calc_dop_orb.cgmtsarbranches/5.7/gmtsar/calc_dop_orb.cnormalfile()$sha1$932ef34389003a30638a9a296427793a09bcbcfciv$yxxu-svn-gmt af _ -f = t VB G! a4i#gmtsar/csh/align_tops_esd.cshgmtsar/cshbranches/5.7/gmtsar/csh/align_tops_esd.cshnormalfile(svn:executable 1 *)$sha1$4b47c26d38f6b0cd06aeffa987add0a7cd1de27bs{6Pxxu-svn-gmt%fvEK 9! S4igmtsar/csh/grd2kml.cshgmtsar/cshbranches/5.7/gmtsar/csh/grd2kml.cshnormalfile(svn:executable 1 *)$sha1$60126f84fd3ff270d6067b5ef0224a2283cd91bcWsXЇsandwellfRJ G! a4igmtsar/csh/make_los_ascii.cshgmtsar/cshbranches/5.7/gmtsar/csh/make_los_ascii.cshnormalfile(svn:executable 1 *)$sha1$2dc27ca865ecc42e17ff67c196d9b7d1b535ae0bVPOpwessel fEI 9! S4igmtsar/csh/p2p_CSK.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_CSK.cshnormalfile(svn:executable 1 *)$sha1$cf1ee770c5d73bba5844d2a4aee10ed68bbc6524JrLsandwell)f9H ?! Yigmtsar/csh/intf_batch.cshgmtsar/cshbranches/5.7/gmtsar/csh/intf_batch.cshnormalfile()$sha1$fb33f52102f901916929bc3c2769003135f144f6Cr|#Qsandwell fMG A! [4igmtsar/csh/p2p_TSX_SLC.cshgmtsar/cshbranches/5.7/gmtsar/csh/p2p_TSX_SLC.cshnormalfile(svn:executable 1 *)$sha1$3b1c69158f5d6263162781118be0a1e988748d71JrLsandwell(DfMF A! [4igmtsar/csh/merge_batch.cshgmtsar/cshbranches/5.7/gmtsar/csh/merge_batch.cshnormalfile(svn:executable 1 *)$sha1$83356ef9678aaed6c6158ab91cfcc534ffca28a5JrLsandwellofFE 7! Q4i#gmtsar/csh/snaphu.cshgmtsar/cshbranches/5.7/gmtsar/csh/snaphu.cshnormalfile(svn:executable 1 *)$sha1$597391956e1e74d0e25432a0ab007be3a4df524dmzv xxu-svn-gmtfCD 7! Q4igmtsar/csh/gmtsar.cshgmtsar/cshbranches/5.7/gmtsar/csh/gmtsar.cshnormalfile(svn:executable 1 *)$sha1$ee37d193146a2b51a944d0f79d0ab17b06d86fe2JrLsandwell 8fOC C! ]4igmtsar/csh/make_profile.cshgmtsar/cshbranches/5.7/gmtsar/csh/make_profile.cshnormalfile(svn:executable 1 *)$sha1$ab84db10cfec0ac328461c5feba71d3f8b6e4020*-AUqksandwellf WKW1e @ }  N ^p2op5 ! ;iconfig.subbranches/5.7/config.subnormalfile()$sha1$8e97193bfb1ce1db499ab72f803805cd0c59f743*-AUqksandwell f[4  3#gmtsarbranches/5.7/gmtsarnormaldir()infinityxxu-svn-gmt 3 ' Ai#gmtsar/sbas.hgmtsarbranches/5.7/gmtsar/sbas.hnormalfile()$sha1$287e5d2fccec13e8df99a72804f05358dd30d7d9iv$yxxu-svn-gmtf02 7 Qi#gmtsar/lib_strfuncs.cgmtsarbranches/5.7/gmtsar/lib_strfuncs.cnormalfile()$sha1$f74f171b76ba1606c7378c7511b1ec0150355991iv$yxxu-svn-gmtf7E =! Wisnaphu/src/snaphu_util.csnaphu/srcbranches/5.7/snaphu/src/snaphu_util.cnormalfile()$sha1$06673c28b8c69ff1128b7047723fb763825517be*-AUqksandwellt?f8D =! Wisnaphu/src/snaphu_tile.csnaphu/srcbranches/5.7/snaphu/src/snaphu_tile.cnormalfile()$sha1$3095531bf6d04c275e343c36883bccb78e756d55*-AUqksandwell:f E! _isnaphu/src/snaphu_cs2parse.csnaphu/srcbranches/5.7/snaphu/src/snaphu_cs2parse.cnormalfile()$sha1$25e92c789ffe672875766e7775bafd275c984212*-AUqksandwell:f?= E! _isnaphu/src/snaphu_cs2types.hsnaphu/srcbranches/5.7/snaphu/src/snaphu_cs2types.hnormalfile()$sha1$47f40ac0aaa2948a040eddff81e1c5957baf0133*-AUqksandwell vf-< 3! Misnaphu/src/snaphu.csnaphu/srcbranches/5.7/snaphu/src/snaphu.cnormalfile()$sha1$d1bc1fe79e541a2aac4fcd44f636e4f7d65e2aba*-AUqksandwellD5fq: ' A'snaphu/configsnaphubranches/5.7/snaphu/confignormaldir()infinityQ*4Jcxtong-svn-gmtH9 K' eisnaphu/config/snaphu.conf.briefsnaphu/configbranches/5.7/snaphu/config/snaphu.conf.briefnormalfile()$sha1$099bbfb6c17c1e07add69ce5b574c6e047948920*-AUqksandwell) fK8 I' ci'snaphu/config/snaphu.conf.fullsnaphu/configbranches/5.7/snaphu/config/snaphu.conf.fullnormalfile()$sha1$f1e4672d482406a93b5bde87ce053aea11c6109cQ*4Jcxtong-svn-gmt[f *f@# e  F *% lf O2tW:|_B]8iY$sha1$98de84f2158bd840acdacd6b3c325f7a0cf502b5$md5 $99736c3a45d04cef559224694ee0be2d\5iY$sha1$3d461e8ced55730247af420fa259f5045bb4e0f5$md5 $e1b7240afd63a9a78e45462efb9973d2\4iY$sha1$320a7b7770bad33ac70df79df26cc0aced26a9b5$md5 $ae9a9c235131aec813d49f21abb34595\Pi Y$sha1$631728119a6cf2bdb520b4363bac7a62c4188be1)$md5 $6967a059d1f0305224fdc7094aa97865\Oi Y$sha1$11eb6331d6eefb228c60fc92881e1308ef7415cd$md5 $0c573b2e40d911e8b34682f19e7fcd22\Ni Y$sha1$317dddfca86c276e942f5f172250233e7f217bb2^$md5 $88dd7653bf239c051f7b5baa8a0e594b\Mi Y$sha1$11f8d5d990c29fbdf45481b4fac8fe5887abe4fb8$md5 $03958ff493ba0e41dcbb753ae2cbcc95\Li Y$sha1$19bc07edcd4a80224634c90a48f6573a2e0b0bb4 $md5 $64635cd5a5ca3adc5c919938104afa6b\Ki Y$sha1$374fd0f8b3d5ab53ede77a515256fc097bbbf934$md5 $5483299475658a7feea4bab5cfe39e22\Ji Y$sha1$ee277ab2729966f8cb8f1e6e97319f56c38eeb93$md5 $4325ab880c4f36c60133f66b345c1abb\Ii Y$sha1$ee36a9e5fd3927f0e05dfb509d49be705deb399b$md5 $9194113aa0ae113f6d6121171f87ee79\Hi Y$sha1$92ff7e646824fab2cd56ebf7e3825956855569f49$md5 $ee7126cc1965716fbd1af53a596440a5\Gi Y$sha1$c08b8933f26b290bc0b0e0ffca8fcdeea72de8a4 $md5 $3556a581fb3bcd21a0e821405012ea27\Fi Y$sha1$b75d3944acf4e598f3c3d2f353b41e3e215fff0bi$md5 $968de03239f7831956ac08c5a4754205\Ei Y$sha1$41a40275da06babd69ebc178652f27fb7e01fe8bj$md5 $cf59e4ce3ec4ea7578ab19e804c7180e\Di Y$sha1$eb9e97abc3f557a09788b0d62f8db5604de60614$md5 $645eebee83ecb40385cbfd96e7b2b613\Ci Y$sha1$16c2e96b83975e1ff0d2743051d558cd326e012c$md5 $3e356f496e5c55331b9f89fcde889489\Bi Y$sha1$bd6d85e77db6d3d7705f5bc1b7d7fc525f26276dx$md5 $2959ea67e24032eb9d6d793ab272c64b\Ai Y$sha1$24922f527f4b88888bb82915456a270bfa23aa39B$md5 $a226e3f87c4fe3c0fbc9318ff0d8d402\@i Y$sha1$18cc894c6758f9784fe5446aa84aa1911ab653af$md5 $c99029a9c96360b1b930c305e8aaa178\?i Y$sha1$5af59ca2d309bc72075296e2d1441a749e65703f D$md5 $0e2ae2da55c3b424c9d724fb0ca2c8ce\>i Y$sha1$4aac4d9f70cfc38b0596420c7b75507544fc17ecw$md5 $ed87b82e7894bbf56531095e173efe7f\=i Y$sha1$a5d51b44c942bd3b930f3e203dacfbeb0b2e7852$md5 $c66136c2b113e18e0588a9aa9f9446d3\<i Y$sha1$adbc3ead83f055a02955125798177f48457534e0G;$md5 $ca34b39a822de0f8f6ad231ec5bef01a\;i Y$sha1$716c1050eb9e26f5799a64665a2f64472ac91d6d '$md5 $7cf14e79ae01cbb81ce955d03c60117e\:i Y$sha1$2fbe9f2e9c52558b3ef1d058abb357784c45a465 $md5 $b7cddf26577303fee5c2aa9f4e80747e\9i Y$sha1$7939ee4eb08fcc361343d5c19f9f790b0438b428$md5 $6daaa9cef76b889f3c8b53bf5bf885d2\7i Y$sha1$ad536986d98c242b5b6bb92c1f8a4547b6b1e200$md5 $83d80d021f977d20905a56ed0da33ca6\6i Y$sha1$021b0a451f22f9485dce5bf8408f1287edc396f02$md5 $4ba2c830433ffc50d5ab32d76adf9bec[3i Y$sha1$6d05b0d95ecd1bb11b8ea53074c5f5577b401fae$md5 $9eac27376945dfbd87f71d26cd6ee2d1\2i Y$sha1$2fd73742ccf235e53733ee43e78934365cbee4af;W$md5 $90106922ea76fb44608cdbb3e5f537fa\1i Y$sha1$fecd75ae41ae82e0962e887a66c6b3c060f7d290$md5 $2b1ccd73f438fea158aa19f43dc13cbc]0i Y$sha1$8624bcdae55baeef00cd11d5dfcfa60f68710a02K$md5 $d32239bcb673463ab874e80d47fae504\/i Y$sha1$3ed237ac3b90b1d514c739f987dfeaa29d6a9e4b$md5 $fcf1ae8ddf37ceaf8c786e97b954e1da].i Y$sha1$f36d99f78b92a906af7e68b9021f836209f6a063$md5 $401a84acdef8cab2f1b65a29de17c4ed\-i Y$sha1$dffaf622d7e782bd7ae456730e446bf799edd41d_m$md5 $8ed02abde635444ff4cd40ae4f6026c9\,i Y$sha1$fa8069da738f3814635f6bac9590d97e78b54281tG$md5 $c9b96de449ea14b507303eee492be428\+i Y$sha1$fb0d1420c6cf1715b767dee5cedb464213553bbf$md5 $23c21346be4650fe9603ea31b0edfc77\*i Y$sha1$81dd319c352bb565a89163ab21085a49bcc50b3c $md5 $d5b9bd733102cbf9fa58c2b1c357db51\)i Y$sha1$06673c28b8c69ff1128b7047723fb763825517bet?$md5 $d498d57ec8a887aa46f57c822c650080](i Y$sha1$3095531bf6d04c275e343c36883bccb78e756d55:$md5 $2fe7edb951c5ce7e7451bd15ddf1120e]'i Y$sha1$036f4859e85670827aa796c9b4d23a3c3193b6b7$md5 $3c9ce59e99fe310800dba5519c810536 4EO ) k 4 , 4"?X}jEEEkd ]C wi#preproc/ERS_preproc/include/data_param.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/data_param.hnormalfile()$sha1$7939ee4eb08fcc361343d5c19f9f790b0438b428iv$yxxu-svn-gmtflF` E3 _ipreproc/RS2_preproc/Makefilepreproc/RS2_preprocbranches/5.7/preproc/RS2_preproc/Makefilenormalfile()$sha1$98de84f2158bd840acdacd6b3c325f7a0cf502b5z9&fwobbef|a 3 M#preproc/RS2_preprocpreprocbranches/5.7/preproc/RS2_preprocnormaldir()infinityvxxu-svn-gmt_ ;3 U#preproc/RS2_preproc/srcpreproc/RS2_preprocbranches/5.7/preproc/RS2_preproc/srcnormaldir()infinityvxxu-svn-gmtW^ M; gi#preproc/RS2_preproc/src/Makefilepreproc/RS2_preproc/srcbranches/5.7/preproc/RS2_preproc/src/Makefilenormalfile()$sha1$ad536986d98c242b5b6bb92c1f8a4547b6b1e200V@;\xxu-svn-gmtfc] Y; si#preproc/RS2_preproc/src/make_slc_rs2.cpreproc/RS2_preproc/srcbranches/5.7/preproc/RS2_preproc/src/make_slc_rs2.cnormalfile()$sha1$021b0a451f22f9485dce5bf8408f1287edc396f0vxxu-svn-gmt2fC[ ;3 U.ipreproc/RS2_preproc/libpreproc/RS2_preprocbranches/5.7/preproc/RS2_preproc/libnormalfile(svn:special 1 *)$sha1$3d461e8ced55730247af420fa259f5045bb4e0f5*-AUqksandwellKZ C3 ].ipreproc/RS2_preproc/includepreproc/RS2_preprocbranches/5.7/preproc/RS2_preproc/includenormalfile(svn:special 1 *)$sha1$320a7b7770bad33ac70df79df26cc0aced26a9b5*-AUqksandwellMW  -.ilibbranches/5.7/libnormalfile(svn:special 1 *)$sha1$6d05b0d95ecd1bb11b8ea53074c5f5577b401fae*-AUqksandwellRV  -docbranches/5.7/docnormaldir()infinity*-AUqksandwellT % ?iconfigure.acbranches/5.7/configure.acnormalfile()$sha1$2fd73742ccf235e53733ee43e78934365cbee4afjKffpwessel;WfS % ?iax_lapack.m4branches/5.7/ax_lapack.m4normalfile()$sha1$fecd75ae41ae82e0962e887a66c6b3c060f7d290*-AUqksandwellfR # =iLICENSE.TXTbranches/5.7/LICENSE.TXTnormalfile()$sha1$8624bcdae55baeef00cd11d5dfcfa60f68710a02*-AUqksandwellKf]Q  3'snaphubranches/5.7/snaphunormaldir()infinityQ*4Jcxtong-svn-gmtP ' Aisnaphu/READMEsnaphubranches/5.7/snaphu/READMEnormalfile()$sha1$3ed237ac3b90b1d514c739f987dfeaa29d6a9e4b*-AUqksandwellfdO ! ;snaphu/mansnaphubranches/5.7/snaphu/mannormaldir()infinityz9&fwobbe>N C! ]isnaphu/man/snaphu_man1.htmlsnaphu/manbranches/5.7/snaphu/man/snaphu_man1.htmlnormalfile()$sha1$f36d99f78b92a906af7e68b9021f836209f6a063*-AUqksandwellfrM +! Esnaphu/man/man1snaphu/manbranches/5.7/snaphu/man/man1normaldir()infinityz9&fwobbe:L =+ Wisnaphu/man/man1/snaphu.1snaphu/man/man1branches/5.7/snaphu/man/man1/snaphu.1normalfile()$sha1$dffaf622d7e782bd7ae456730e446bf799edd41dz9&fwobbe_mf;J A! [isnaphu/man/snaphu_man1.txtsnaphu/manbranches/5.7/snaphu/man/snaphu_man1.txtnormalfile()$sha1$fa8069da738f3814635f6bac9590d97e78b54281*-AUqksandwelltGfdH ! ;snaphu/srcsnaphubranches/5.7/snaphu/srcnormaldir()infinityy9Cfwobbe-G 3! Misnaphu/src/Makefilesnaphu/srcbranches/5.7/snaphu/src/Makefilenormalfile()$sha1$fb0d1420c6cf1715b767dee5cedb464213553bbf*-AUqksandwellf|F ?! Yisnaphu/src/CMakeLists.txtsnaphu/srcbranches/5.7/snaphu/src/CMakeLists.txtnormalfile(svn:eol-style native svn:keywords 31 Author Date Id Rev Revision URL)$sha1$81dd319c352bb565a89163ab21085a49bcc50b3cy9Cfwobbe:f Le2b. _ + ] ) Z & W # T !SQM}IyEwCt@ p<3i$sha1$a90078a8b94098f16a5be611c826648455107d3a 3i$sha1$be343e235dcb522497eaef92e166af0928925ac63i$sha1$bd6d85e77db6d3d7705f5bc1b7d7fc525f26276dB3i$sha1$bcbf0cf9b3b4c7c6f1dedfdcbbf867ee6fe606233i$sha1$bb3464696cf106a515db6a09911edb77af099f6f]3i$sha1$ba82e536d56a04404d0373d1a47d95710429b245a3i$sha1$b86899d0eb972fc2c5d482759ffc8c7506c3d6d83i$sha1$b7f8aacb9dbde7ae8be4d8dfe8644e0de35f73a53i$sha1$b78164f2a24fbd7e987c5bc3a1015bc25ca5e20b3i$sha1$b75d3944acf4e598f3c3d2f353b41e3e215fff0bF2i$sha1$b73e14a0532f0fc5051bf0d77869380c0830b2783i$sha1$b6e4b339606f1b3dc82416cc6eac0906e50a8f433i$sha1$b6913c175e6d5d11fcd34e0ea6fce65977101d893i$sha1$b61937b7b761d60ba2490860762b8406200cdc772i$sha1$b53cf8fdb03009e820cde2c00c3878deb3ed65c03i$sha1$b47ecf4ccc4567a79faaafe88d3a2487721407de3i$sha1$b442c77b156ab417e245d753337ab448c72f289a2i$sha1$b41900442e22cc25dc302a65ecbbd294e28dc39cs3i$sha1$b41762995f8a9dba2422d7e054a987ca0066a59b3i$sha1$b3fd87760af15f0df9902c6d37464650ad092e93o3i$sha1$b3569767b71fb521902f24adaa61d6f12dc7cf4a3i$sha1$b309caf2d8b6a8a4c55943ab88ccda42da8252023i$sha1$b2fc5eb40ae7e57367b0280ac956bf78755ed55c3i$sha1$b2eaab8c4a9d9f21f26e0f098f72195d4a209aac|3i$sha1$b1c0bc9694820c30b6477fa37cabec8bc6c5728f3i$sha1$b16672f914614f1defd372e2d202cec5714e1ed13i$sha1$b12b8e49a3e534b148f0727291a0a0569d5141423i$sha1$b099005e5837806180b744c28a8dac26d4be23b13i$sha1$b092a090fb0b10914c526aa81b0709e2d7fe4e703i$sha1$afeaf5f8a89b29bf0378953e1911ab1cff66c1ec3i$sha1$afc863d06338294627acb0d8a9abf98e719977443i$sha1$af7b873caa52ddff6197bc4280230d0f4b84d0c33i$sha1$ae9ddf9c393c0c68281be0c98144c59f56c225092i$sha1$ae5fa49d2eb048cc2b061b586cf8e48808b1f237d3i$sha1$adbc3ead83f055a02955125798177f48457534e0<3i$sha1$ada5e034e3f4ad986ca63f52a186a620b2ff6d812i$sha1$ad8aca99d36c2600118c98083cbe778df88745e7\3i$sha1$ad536986d98c242b5b6bb92c1f8a4547b6b1e20072i$sha1$ad19b3d5efcb7cfcdb419e335edecdb7c62f74872i$sha1$abd6676bd30b456bee04919e0f06520c465e44403i$sha1$aba1ff16e3a529bc518dd1cc0553f47a263f62a73i$sha1$ab84db10cfec0ac328461c5feba71d3f8b6e40202i$sha1$ab6ca53165bee77689f13246f1b0a6847f59ef59j3i$sha1$ab3aafd67a13cb7e1b3cf721bbdce9ee17fa5e452i$sha1$ab10e93ca93a621523420a67b7f2932769a75748%3i$sha1$aaf08adcca55d8db1a0080eb5346a0f5c119fab43i$sha1$aa971166ffacd30327ccd46ec3936c0049d3f2393i$sha1$aa4419c4a36d8edf33f1688dc0d6e95df25274ca3i$sha1$a897e07fa69c45b70bedce3a7455c1c0cd4f6408h2i$sha1$a88dd51f7d985c17de35d84b0cf44db00db1c9ca13i$sha1$a8797e5ed13f0d89529b970a3f074f30d90344183i$sha1$a802a4a4934905fb67d06e6538d05981a08e23523i$sha1$a7bc202701e9f33b2967b3df216052708433105f3i$sha1$a5d51b44c942bd3b930f3e203dacfbeb0b2e7852=2i$sha1$a5d1236c29fb8b949eac2979f9f6a07984044dc03i$sha1$a5a28831c70feaff7ae72fdf6751e2ee69b9af123i$sha1$a4cf0bd0e129da867af77f5a3473e44de302ef6dR3i$sha1$a4930250919ee17387ce16e67b7c47f7d00d523a$3i$sha1$a3748a849e7e65d53e7dc1e2aa09e54c917e76e53i$sha1$a346242711241e142ba7061aa1761be69dff67acp2i$sha1$a32057510953fc8ed54ad804603b52f6a74b1c192i$sha1$a2a203681d38016f50ff384c0e8bd318555833b73i$sha1$a25c7283524118a648ddfc2e582382e553426e893i$sha1$a1f68a44b9b513ef275e00562d9a7f933c6ac2002i$sha1$a1b02b0897af84695cd538ad430ec43959acbacc 3i$sha1$a18b206a136ed2cf742e2d28fc97da4d1611664e3i$sha1$9ef3e48229407da170402dc824fe2bf1c388e46b3i$sha1$9eb3a064b383587ace07c4d03151f2822929281fW3i$sha1$9e945c46fd5523c9da931dda10664cb096935bfa3i$sha1$9e8b7e42e43fc9e4ec98a24a6164ad8b3df7b609q3i$sha1$9e5c8481162f9ffba39341beccad8c9acb467f2d3i$sha1$9e1a8396574a5f3c78ed85327c815320a1d9587fg2i$sha1$9da9baab02e47ecceb82cb051b2b75fb431d2badf3i$sha1$9d05afa376253f4bd747b9db228029ec64b490833i$sha1$9d02c1f5be48dfcf0306d003ce514ea153dbae51}2i$sha1$9c33492d739f7746ff6f4cda96a3052c578c7679c x# . 2 = F ]txs C3 ]#preproc/ERS_preproc/utilitypreproc/ERS_preprocbranches/5.7/preproc/ERS_preproc/utilitynormaldir()infinityiv$yxxu-svn-gmtir [C ui#preproc/ERS_preproc/utility/ccrs2dpaf.cpreproc/ERS_preproc/utilitybranches/5.7/preproc/ERS_preproc/utility/ccrs2dpaf.cnormalfile()$sha1$41a40275da06babd69ebc178652f27fb7e01fe8biv$yxxu-svn-gmtjffq ]C wipreproc/ERS_preproc/utility/makefile_sunpreproc/ERS_preproc/utilitybranches/5.7/preproc/ERS_preproc/utility/makefile_sunnormalfile()$sha1$eb9e97abc3f557a09788b0d62f8db5604de60614z9&fwobbefo C3 ]#preproc/ERS_preproc/includepreproc/ERS_preprocbranches/5.7/preproc/ERS_preproc/includenormaldir()infinityiv$yxxu-svn-gmt|n mC i#preproc/ERS_preproc/include/sarleader_platform.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/sarleader_platform.hnormalfile()$sha1$16c2e96b83975e1ff0d2743051d558cd326e012civ$yxxu-svn-gmtfim [C ui#preproc/ERS_preproc/include/write_dss.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/write_dss.hnormalfile()$sha1$bd6d85e77db6d3d7705f5bc1b7d7fc525f26276div$yxxu-svn-gmtxfel WC qi#preproc/ERS_preproc/include/sardata.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/sardata.hnormalfile()$sha1$24922f527f4b88888bb82915456a270bfa23aa39iv$yxxu-svn-gmtBfek WC qi#preproc/ERS_preproc/include/SARtape.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/SARtape.hnormalfile()$sha1$18cc894c6758f9784fe5446aa84aa1911ab653afiv$yxxu-svn-gmtfsj eC i#preproc/ERS_preproc/include/write_platform.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/write_platform.hnormalfile()$sha1$5af59ca2d309bc72075296e2d1441a749e65703fiv$yxxu-svn-gmt Dfqi cC }i#preproc/ERS_preproc/include/sarleader_fdr.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/sarleader_fdr.hnormalfile()$sha1$4aac4d9f70cfc38b0596420c7b75507544fc17eciv$yxxu-svn-gmtwfxh iC i#preproc/ERS_preproc/include/write_fdr_varseg.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/write_fdr_varseg.hnormalfile()$sha1$a5d51b44c942bd3b930f3e203dacfbeb0b2e7852iv$yxxu-svn-gmtfqg cC }i#preproc/ERS_preproc/include/sarleader_dss.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/sarleader_dss.hnormalfile()$sha1$adbc3ead83f055a02955125798177f48457534e0iv$yxxu-svn-gmtG;fxf iC i#preproc/ERS_preproc/include/write_fdr_fixseg.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/write_fdr_fixseg.hnormalfile()$sha1$716c1050eb9e26f5799a64665a2f64472ac91d6div$yxxu-svn-gmt 'f]e OC ii#preproc/ERS_preproc/include/soi.hpreproc/ERS_preproc/includebranches/5.7/preproc/ERS_preproc/include/soi.hnormalfile()$sha1$2fbe9f2e9c52558b3ef1d058abb357784c45a465iv$yxxu-svn-gmt f  (! m S . 'vMz ]C w4ipreproc/ERS_preproc/scripts/check_PRC.plpreproc/ERS_preproc/scriptsbranches/5.7/preproc/ERS_preproc/scripts/check_PRC.plnormalfile(svn:executable 1 *)$sha1$5ad7580d615cc1721fe73821de4dccebd0981c9c*-AUqksandwell~f iC 4ipreproc/ERS_preproc/scripts/ERS_pre_process.inpreproc/ERS_preproc/scriptsbranches/5.7/preproc/ERS_preproc/scripts/ERS_pre_process.innormalfile(svn:executable 1 *)$sha1$317dddfca86c276e942f5f172250233e7f217bb2*-AUqksandwell^f gC 4ipreproc/ERS_preproc/scripts/dump_orbit_ers.plpreproc/ERS_preproc/scriptsbranches/5.7/preproc/ERS_preproc/scripts/dump_orbit_ers.plnormalfile(svn:executable 1 *)$sha1$631728119a6cf2bdb520b4363bac7a62c4188be1*-AUqksandwell)f qC 4ipreproc/ERS_preproc/scripts/ERS_pre_process_031014preproc/ERS_preproc/scriptsbranches/5.7/preproc/ERS_preproc/scripts/ERS_pre_process_031014normalfile(svn:executable 1 *)$sha1$11eb6331d6eefb228c60fc92881e1308ef7415cd*-AUqksandwellf#v [ !i#preproc/ERS_preproc/read_sarleader_ccrs/read_sarleader_ccrs.cpreproc/ERS_preproc/read_sarleader_ccrsbranches/5.7/preproc/ERS_preproc/read_sarleader_ccrs/read_sarleader_ccrs.cnormalfile()$sha1$c08b8933f26b290bc0b0e0ffca8fcdeea72de8a4iv$yxxu-svn-gmt fu {[ i#preproc/ERS_preproc/read_sarleader_ccrs/make_prm_ccrs.cpreproc/ERS_preproc/read_sarleader_ccrsbranches/5.7/preproc/ERS_preproc/read_sarleader_ccrs/make_prm_ccrs.cnormalfile()$sha1$b75d3944acf4e598f3c3d2f353b41e3e215fff0biv$yxxu-svn-gmtif0 [3 u#preproc/ERS_preproc/read_sarleader_dpafpreproc/ERS_preprocbranches/5.7/preproc/ERS_preproc/read_sarleader_dpafnormaldir()infinityiv$yxxu-svn-gmt m[ ipreproc/ERS_preproc/read_sarleader_dpaf/Makefilepreproc/ERS_preproc/read_sarleader_dpafbranches/5.7/preproc/ERS_preproc/read_sarleader_dpaf/Makefilenormalfile()$sha1$11f8d5d990c29fbdf45481b4fac8fe5887abe4fbz9&fwobbe8f# [ !i#preproc/ERS_preproc/read_sarleader_dpaf/read_sarleader_dpaf.cpreproc/ERS_preproc/read_sarleader_dpafbranches/5.7/preproc/ERS_preproc/read_sarleader_dpaf/read_sarleader_dpaf.cnormalfile()$sha1$19bc07edcd4a80224634c90a48f6573a2e0b0bb4iv$yxxu-svn-gmt f!~ [ i#preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf_orig.cpreproc/ERS_preproc/read_sarleader_dpafbranches/5.7/preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf_orig.cnormalfile()$sha1$374fd0f8b3d5ab53ede77a515256fc097bbbf934iv$yxxu-svn-gmtf!} [ i#preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf_kang.cpreproc/ERS_preproc/read_sarleader_dpafbranches/5.7/preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf_kang.cnormalfile()$sha1$ee277ab2729966f8cb8f1e6e97319f56c38eeb93iv$yxxu-svn-gmtf| {[ i#preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf.cpreproc/ERS_preproc/read_sarleader_dpafbranches/5.7/preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf.cnormalfile()$sha1$ee36a9e5fd3927f0e05dfb509d49be705deb399biv$yxxu-svn-gmtf0z [3 u#preproc/ERS_preproc/read_sarleader_ccrspreproc/ERS_preprocbranches/5.7/preproc/ERS_preproc/read_sarleader_ccrsnormaldir()infinityiv$yxxu-svn-gmty m[ ipreproc/ERS_preproc/read_sarleader_ccrs/Makefilepreproc/ERS_preproc/read_sarleader_ccrsbranches/5.7/preproc/ERS_preproc/read_sarleader_ccrs/Makefilenormalfile()$sha1$92ff7e646824fab2cd56ebf7e3825956855569f4z9&fwobbe9fTx m[ preproc/ERS_preproc/read_sarleader_ccrs/testdatapreproc/ERS_preproc/read_sarleader_ccrsbranches/5.7/preproc/ERS_preproc/read_sarleader_ccrs/testdatanormaldir()infinity*-AUqksandwell o%*|+7* Z 2 U   , NdpX ~I o ] preproc/ALOS_preproc/ALOS_pre_process_SSpreproc/ALOS_preproc/ALOS_pre_process_SS/swap_ALOS_data_info.ca ]opreproc/ALOS_preproc/ALOS_pre_process_SSpreproc/ALOS_preproc/ALOS_pre_process_SS/Makefile~+Q M_preproc/ALOS_preproc/ALOS_fbd2sspreproc/ALOS_preproc/ALOS_fbd2ss/Makefilew spreproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftpreproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/shift.cx spreproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftpreproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/MakefileM I[preproc/ALOS_preproc/ALOS_lookpreproc/ALOS_preproc/ALOS_look/MakefileP Iapreproc/ALOS_preproc/ALOS_lookpreproc/ALOS_preproc/ALOS_look/ALOS_look.cS Oapreproc/ALOS_preproc/ALOS_llt2ratpreproc/ALOS_preproc/ALOS_llt2rat/MakefileY Ompreproc/ALOS_preproc/ALOS_llt2ratpreproc/ALOS_preproc/ALOS_llt2rat/ALOS_llt2rat.cS Oapreproc/ALOS_preproc/ALOS_fbs2fbdpreproc/ALOS_preproc/ALOS_fbs2fbd/Makefile S Kepreproc/ALOS_preproc/ALOS_mergepreproc/ALOS_preproc/ALOS_merge/ALOS_merge.cO K]preproc/ALOS_preproc/ALOS_mergepreproc/ALOS_preproc/ALOS_merge/Makefilex cpreproc/ALOS_preproc/ALOS_mosaic_ss_2framespreproc/ALOS_preproc/ALOS_mosaic_ss_2frames/ALOS_mosaic_ss_2frames.cg cupreproc/ALOS_preproc/ALOS_mosaic_ss_2framespreproc/ALOS_preproc/ALOS_mosaic_ss_2frames/MakefileY Ompreproc/ALOS_preproc/ALOS_fbs2fbdpreproc/ALOS_preproc/ALOS_fbs2fbd/ALOS_fbs2fbd.c| s preproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftpreproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/plot_shift.my spreproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftpreproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/gauss.datc ]spreproc/ALOS_preproc/ALOS_pre_process_SSpreproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftm ]preproc/ALOS_preproc/ALOS_pre_process_SSpreproc/ALOS_preproc/ALOS_pre_process_SS/read_ALOS_data_SS.co ] preproc/ALOS_preproc/ALOS_pre_process_SSpreproc/ALOS_preproc/ALOS_pre_process_SS/parse_ALOS_commands.co ] preproc/ALOS_preproc/ALOS_pre_process_SSpreproc/ALOS_preproc/ALOS_pre_process_SS/ALOS_pre_process_SS.cq _ preproc/ALOS_preproc/ALOS_pre_process_SLCpreproc/ALOS_preproc/ALOS_pre_process_SLC/swap_ALOS_data_info.cp _ preproc/ALOS_preproc/ALOS_pre_process_SLCpreproc/ALOS_preproc/ALOS_pre_process_SLC/read_ALOS_data_SLC.cq _ preproc/ALOS_preproc/ALOS_pre_process_SLCpreproc/ALOS_preproc/ALOS_pre_process_SLC/parse_ALOS_commands.cc _qpreproc/ALOS_preproc/ALOS_pre_process_SLCpreproc/ALOS_preproc/ALOS_pre_process_SLC/Makefiler _ preproc/ALOS_preproc/ALOS_pre_process_SLCpreproc/ALOS_preproc/ALOS_pre_process_SLC/ALOS_pre_process_SLC.ci Wpreproc/ALOS_preproc/ALOS_pre_processpreproc/ALOS_preproc/ALOS_pre_process/swap_ALOS_data_info.c^ Wopreproc/ALOS_preproc/ALOS_pre_processpreproc/ALOS_preproc/ALOS_pre_process/roi_utils.cc Wypreproc/ALOS_preproc/ALOS_pre_processpreproc/ALOS_preproc/ALOS_pre_process/read_ALOS_data.cd W{preproc/ALOS_preproc/ALOS_pre_processpreproc/ALOS_preproc/ALOS_pre_process/read_ALOSE_data.ci Wpreproc/ALOS_preproc/ALOS_pre_processpreproc/ALOS_preproc/ALOS_pre_process/parse_ALOS_commands.c[ Wipreproc/ALOS_preproc/ALOS_pre_processpreproc/ALOS_preproc/ALOS_pre_process/Makefilee W}preproc/ALOS_preproc/ALOS_pre_processpreproc/ALOS_preproc/ALOS_pre_process/ALOS_pre_process.cX Sgpreproc/ALOS_preproc/ALOS_mosaic_sspreproc/ALOS_preproc/ALOS_mosaic_ss/Makefile2W Sepreproc/ALOS_preproc/ALOS_mosaic_sspreproc/ALOS_preproc/ALOS_mosaic_ss/Makefileh Spreproc/ALOS_preproc/ALOS_mosaic_sspreproc/ALOS_preproc/ALOS_mosaic_ss/ALOS_mosaic_ss_2frames.c_ Supreproc/ALOS_preproc/ALOS_mosaic_sspreproc/ALOS_preproc/ALOS_mosaic_ss/ALOS_mosaic_ss.c ?V6k9q5T ^ ( g . p 6 _ / h #\@zJV!_V)j'4 gpreproc/ALOS_preproc/lib_src/ALOS_ldr_orbit.c& Kpreproc/ALOS_preproc/ALOS_merge. [preproc/ALOS_preproc/ALOS_look/Makefile1 apreproc/ALOS_preproc/ALOS_look/ALOS_look.c% Ipreproc/ALOS_preproc/ALOS_look1 apreproc/ALOS_preproc/ALOS_llt2rat/Makefile7 mpreproc/ALOS_preproc/ALOS_llt2rat/ALOS_llt2rat.c( Opreproc/ALOS_preproc/ALOS_llt2rat1 apreproc/ALOS_preproc/ALOS_fbs2fbd/Makefile7 mpreproc/ALOS_preproc/ALOS_fbs2fbd/ALOS_fbs2fbd.c( Opreproc/ALOS_preproc/ALOS_fbs2fbd8 opreproc/ALOS_preproc/lib_src/ALOSE_orbits_utils.c# Epreproc/ALOS_preproc/lib_src0 _preproc/ALOS_preproc/include/siocomplex.h3 epreproc/ALOS_preproc/include/sarleader_fdr.h4 gpreproc/ALOS_preproc/include/sarleader_ALOS.h0 _preproc/ALOS_preproc/include/orbit_ALOS.h- Ypreproc/ALOS_preproc/include/llt2xyz.h3 epreproc/ALOS_preproc/include/lib_functions.h/ ]preproc/ALOS_preproc/include/image_sio.h0 _preproc/ALOS_preproc/include/data_ALOSE.h/ ]preproc/ALOS_preproc/include/data_ALOS.h# Epreproc/ALOS_preproc/include* Spreproc/ALOS_preproc/create_tar.csh& Kpreproc/ALOS_preproc/README.txt$ Gpreproc/ALOS_preproc/Makefile* Spreproc/ALOS_preproc/CMakeLists.txtH preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/test_shift.cC preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/shift.cH preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/plot_shift.mE preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/gauss.datD preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/Makefile: spreproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftF preproc/ALOS_preproc/ALOS_pre_process_SS/swap_ALOS_data_info.cD preproc/ALOS_preproc/ALOS_pre_process_SS/read_ALOS_data_SS.cF preproc/ALOS_preproc/ALOS_pre_process_SS/parse_ALOS_commands.c8 opreproc/ALOS_preproc/ALOS_pre_process_SS/MakefileF preproc/ALOS_preproc/ALOS_pre_process_SS/ALOS_pre_process_SS.c/ ]preproc/ALOS_preproc/ALOS_pre_process_SSG preproc/ALOS_preproc/ALOS_pre_process_SLC/swap_ALOS_data_info.cF preproc/ALOS_preproc/ALOS_pre_process_SLC/read_ALOS_data_SLC.cG preproc/ALOS_preproc/ALOS_pre_process_SLC/parse_ALOS_commands.c9 qpreproc/ALOS_preproc/ALOS_pre_process_SLC/MakefileH preproc/ALOS_preproc/ALOS_pre_process_SLC/ALOS_pre_process_SLC.c0 _preproc/ALOS_preproc/ALOS_pre_process_SLCC preproc/ALOS_preproc/ALOS_pre_process/swap_ALOS_data_info.c8 opreproc/ALOS_preproc/ALOS_pre_process/roi_utils.c= ypreproc/ALOS_preproc/ALOS_pre_process/read_ALOS_data.c> {preproc/ALOS_preproc/ALOS_pre_process/read_ALOSE_data.cC preproc/ALOS_preproc/ALOS_pre_process/parse_ALOS_commands.c5 ipreproc/ALOS_preproc/ALOS_pre_process/Makefile? }preproc/ALOS_preproc/ALOS_pre_process/ALOS_pre_process.c, Wpreproc/ALOS_preproc/ALOS_pre_process; upreproc/ALOS_preproc/ALOS_mosaic_ss_2frames/MakefileL preproc/ALOS_preproc/ALOS_mosaic_ss_2frames/ALOS_mosaic_ss_2frames.c2 cpreproc/ALOS_preproc/ALOS_mosaic_ss_2frames4 gpreproc/ALOS_preproc/ALOS_mosaic_ss/Makefile23 epreproc/ALOS_preproc/ALOS_mosaic_ss/MakefileD preproc/ALOS_preproc/ALOS_mosaic_ss/ALOS_mosaic_ss_2frames.c; upreproc/ALOS_preproc/ALOS_mosaic_ss/ALOS_mosaic_ss.c* Spreproc/ALOS_preproc/ALOS_mosaic_ss/ ]preproc/ALOS_preproc/ALOS_merge/Makefile3 epreproc/ALOS_preproc/ALOS_merge/ALOS_merge.c *iB% g  J - o  R4vY<~aD'i\zi Y$sha1$05d9eaabc9f8197241786c58ace29a063b83cd741$md5 $07b4b30c6bd2a86aa11617b0ce15e73f\yi Y$sha1$24906508bb8c544247b1d441bdacb01d1a2a35e6<$md5 $3c53e19066ff1534c01a1b4633e409f4\xi Y$sha1$c9f9b8c0c092e0ba78a10a2446c90327e8341358!$md5 $a4b629bb0f3cc129825402e7576bd280\wi Y$sha1$86f3256e64cf9193824cef6b5108bb378e35a96bE$md5 $cfdcd61c3d9979d8620ef39848fafc0f\vi Y$sha1$f28ae09e9328c6b480b8387f8bc51eef4f14c103?w$md5 $4f700544c6e31f89f3d8c81b36f59861\ui Y$sha1$85f8f9afae10720cdc2234410fc43e8677fd6831B$md5 $d96dab44a0bc15bedd04f0ad3137fbd6\ti Y$sha1$2b89c68d8d6d9106c0786ba7e33444c9b4b9ae83$md5 $75991142d16f91bf6dc7981d44497e63\si Y$sha1$35c4535e82e3bf7295bffa6d119f6095ac0e060cT$md5 $243150224f07b859554e099b45b2fb83\ri Y$sha1$43e63a66d2ee5703bd54fe72a9a38d37cc77dece+$md5 $91fb229634b703fb557ed92728ac0be7\qi Y$sha1$9e8b7e42e43fc9e4ec98a24a6164ad8b3df7b609I$md5 $3328a60817dd6f6a0e9c6addf0a8e162\pi Y$sha1$a346242711241e142ba7061aa1761be69dff67acvB$md5 $e0f7ce31c5b4f69e82b92c99fef59015\oi Y$sha1$b3fd87760af15f0df9902c6d37464650ad092e93$md5 $35e45841e0551145ad1c6b3afe69830c\ni Y$sha1$9205eb41f541fdd5c600d0edfcda02e45d58f1c6$md5 $6f9dead16dd5843d01e1a7743ed49ba7\mi Y$sha1$fa4c61f6880cea08822c70f9380cf16f8791b4eaf$md5 $4e21650be4f173b2e958f869f65b30f8\li Y$sha1$c35b4f5182b0d7d192456530a64a7a835427358bL$md5 $7442288f01cb4baa87594a58a91f8de3\ki Y$sha1$175b95cae68c750bbe0c7da832ac21656fe41c35-$md5 $d78cd7c81865f0410cbdb261093051f8\ji Y$sha1$c17640a30fcd6e65f4739d8f6dd28c2c4159fc7eD$md5 $76172815bdb437ea4ea081de74246a9b\ii Y$sha1$5556931f57f306b374e8beedb5a8421a1d161456L$md5 $464b4666586bb15e53ec21811c5c2297\hi Y$sha1$a897e07fa69c45b70bedce3a7455c1c0cd4f6408D$md5 $8aba0f983c98271d963cfa1c20c0fe5f\gi Y$sha1$9e1a8396574a5f3c78ed85327c815320a1d9587f$md5 $92da077cb29e4d64b1660ae67b253050\fi Y$sha1$95f813c0c22eba1ccf47fd9e1a5310f12abe3b46$md5 $a0df5980c5910486a4477a5931d50d36\ei Y$sha1$fad2679a14436b07c2d2d6ed285299e7fb717e97Vd$md5 $1e16b0845d7000c26265f65475922493\di Y$sha1$23decfad06dcf00d265d9c15ff53c1eed48fd6d8$md5 $f64400a787201b85ef377731b964ea89]ci Y$sha1$ef50ecca0669ce49dbb77b8f0501b41b631f398e$md5 $782bd3d1c908c1b9d8b5678092230a6f\bi Y$sha1$f23b87f901dd9fa4dabcd68c2b8649142c6911db$md5 $da9e0eed8957b72eff48bd561f14ba65\ai Y$sha1$ba82e536d56a04404d0373d1a47d95710429b2456B$md5 $04abedd366d0e37b6144dcc65908aa45\`i Y$sha1$dc42c44eff830f314ede04efa5c8f2f0956c207c$md5 $dbfc58d70628c88dd357d04fc1eac148\_i Y$sha1$cdc868412ca70b9bb7d4459717390e0d086e2a8fr$md5 $7c2112b67e7562b1ebcf918c543448e3\^i Y$sha1$526d3b9902f82e7437b35cb7c1e793bcaf83774aUT$md5 $4b863247ed949108c22f75624497bceb\]i Y$sha1$bb3464696cf106a515db6a09911edb77af099f6f$md5 $8edb3e0dd05e6089476ea18305117af6\\i Y$sha1$d9eeac9788f29221f0b9e5fc10bf4a8c77a3b66b?$md5 $75320d50234677d4f6e5ac73c3946cd8\[i Y$sha1$c1ebeb31cb1d66180510acaaf455f3e1ebeb036eA3$md5 $e4159eb8a5cda9e258d420a3de15f291\Zi Y$sha1$e82a66aa88204c3147bc2933d0b2a2fe108e7940$md5 $63db57b17f5ac6bd90893cc0fadf99c6\Yi Y$sha1$673f6cca90dbcb78b2759c53287022028dba3caaH$md5 $a5d73c7f1add31132fccb93332b37b9b\Xi Y$sha1$0544368ed8970f79f1d9b301807e7086be4e8d05$md5 $80f2d214d16a5841905bf7943af49dfe\Wi Y$sha1$9eb3a064b383587ace07c4d03151f2822929281fP$md5 $c12352168d5f936abb54f111ba2a44a7\Vi Y$sha1$8db6631947a55001b1a1fc5fe4f53cc7a2bb79ce[l$md5 $aa4ec3419cf2d007b8377acaacb93861\Ui Y$sha1$d824c45957f16278c4e77257d12fb4ae83611bd5>$md5 $1b1b1cab7b9af1a61f11638202a536fc\Ti Y$sha1$6670bb2d75f6406b6f9e7d0a8ef3cd90f4fc111a$md5 $a3493b36b5f4d49a475070d22cf152f0\Si Y$sha1$9a55c1593d35ea929d31cb1b97200a08175182bcK$md5 $d00c41344d3f933b055029901e2402e7\Ri Y$sha1$a4cf0bd0e129da867af77f5a3473e44de302ef6d&$md5 $9b27cf01d278b9e3f68a6588eb49fce3\Qi Y$sha1$5ad7580d615cc1721fe73821de4dccebd0981c9c~$md5 $1c439f09ca4b10b0ebbdb1901d575cc1 u     ZS,x]/r aI {i#preproc/ALOS_preproc/ALOS_look/ALOS_look.cpreproc/ALOS_preproc/ALOS_lookbranches/5.7/preproc/ALOS_preproc/ALOS_look/ALOS_look.cnormalfile()$sha1$c1ebeb31cb1d66180510acaaf455f3e1ebeb036eiv$yxxu-svn-gmtA3f]ny 3 Mpreproc/ERS_preprocpreprocbranches/5.7/preproc/ERS_preprocnormaldir()infinityjw1Tosandwell# [ !i#preproc/ERS_preproc/read_data_file_dpaf/read_data_file_dpaf.cpreproc/ERS_preproc/read_data_file_dpafbranches/5.7/preproc/ERS_preproc/read_data_file_dpaf/read_data_file_dpaf.cnormalfile()$sha1$e82a66aa88204c3147bc2933d0b2a2fe108e7940iv$yxxu-svn-gmtf m[ ipreproc/ERS_preproc/read_data_file_dpaf/Makefilepreproc/ERS_preproc/read_data_file_dpafbranches/5.7/preproc/ERS_preproc/read_data_file_dpaf/Makefilenormalfile()$sha1$673f6cca90dbcb78b2759c53287022028dba3caaz9&fwobbeHf0 [3 u#preproc/ERS_preproc/read_data_file_dpafpreproc/ERS_preprocbranches/5.7/preproc/ERS_preproc/read_data_file_dpafnormaldir()infinityiv$yxxu-svn-gmt0 [3 u#preproc/ERS_preproc/read_data_file_ccrspreproc/ERS_preprocbranches/5.7/preproc/ERS_preproc/read_data_file_ccrsnormaldir()infinityiv$yxxu-svn-gmt# [ !i#preproc/ERS_preproc/read_data_file_ccrs/read_data_file_ccrs.cpreproc/ERS_preproc/read_data_file_ccrsbranches/5.7/preproc/ERS_preproc/read_data_file_ccrs/read_data_file_ccrs.cnormalfile()$sha1$0544368ed8970f79f1d9b301807e7086be4e8d05iv$yxxu-svn-gmtf m[ ipreproc/ERS_preproc/read_data_file_ccrs/Makefilepreproc/ERS_preproc/read_data_file_ccrsbranches/5.7/preproc/ERS_preproc/read_data_file_ccrs/Makefilenormalfile()$sha1$9eb3a064b383587ace07c4d03151f2822929281fz9&fwobbePf& Q3 k#preproc/ERS_preproc/ers_line_fixerpreproc/ERS_preprocbranches/5.7/preproc/ERS_preproc/ers_line_fixernormaldir()infinityiv$yxxu-svn-gmt  sQ i#preproc/ERS_preproc/ers_line_fixer/ers_line_fixer.cpreproc/ERS_preproc/ers_line_fixerbranches/5.7/preproc/ERS_preproc/ers_line_fixer/ers_line_fixer.cnormalfile()$sha1$8db6631947a55001b1a1fc5fe4f53cc7a2bb79ceiv$yxxu-svn-gmt[lfs  cQ }ipreproc/ERS_preproc/ers_line_fixer/Makefilepreproc/ERS_preproc/ers_line_fixerbranches/5.7/preproc/ERS_preproc/ers_line_fixer/Makefilenormalfile()$sha1$d824c45957f16278c4e77257d12fb4ae83611bd5z9&fwobbe>f  sQ ipreproc/ERS_preproc/ers_line_fixer/ers_line_fixer.lpreproc/ERS_preproc/ers_line_fixerbranches/5.7/preproc/ERS_preproc/ers_line_fixer/ers_line_fixer.lnormalfile()$sha1$6670bb2d75f6406b6f9e7d0a8ef3cd90f4fc111az9&fwobbefH  E3 _ipreproc/ERS_preproc/Makefilepreproc/ERS_preprocbranches/5.7/preproc/ERS_preproc/Makefilenormalfile()$sha1$9a55c1593d35ea929d31cb1b97200a08175182bc_{sandwellKf C3 ]preproc/ERS_preproc/scriptspreproc/ERS_preprocbranches/5.7/preproc/ERS_preproc/scriptsnormaldir()infinityjw1Tosandwelld YC sipreproc/ERS_preproc/scripts/virgin.PRMpreproc/ERS_preproc/scriptsbranches/5.7/preproc/ERS_preproc/scripts/virgin.PRMnormalfile()$sha1$a4cf0bd0e129da867af77f5a3473e44de302ef6djw1Tosandwell&f # 1 A O W _cqtgl. I5 c#preproc/ALOS_preproc/ALOS_lookpreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_looknormaldir()infinityiv$yxxu-svn-gmtg [I uipreproc/ALOS_preproc/ALOS_look/Makefilepreproc/ALOS_preproc/ALOS_lookbranches/5.7/preproc/ALOS_preproc/ALOS_look/Makefilenormalfile()$sha1$d9eeac9788f29221f0b9e5fc10bf4a8c77a3b66bz9&fwobbe?fh) YE si#preproc/ALOS_preproc/include/llt2xyz.hpreproc/ALOS_preproc/includebranches/5.7/preproc/ALOS_preproc/include/llt2xyz.hnormalfile()$sha1$f75f023f19f7caa7c058c9d0694056d517c53306iv$yxxu-svn-gmt fl( ]E wi#preproc/ALOS_preproc/include/data_ALOS.hpreproc/ALOS_preproc/includebranches/5.7/preproc/ALOS_preproc/include/data_ALOS.hnormalfile()$sha1$fad2679a14436b07c2d2d6ed285299e7fb717e97iv$yxxu-svn-gmtVdfn' _E yi#preproc/ALOS_preproc/include/siocomplex.hpreproc/ALOS_preproc/includebranches/5.7/preproc/ALOS_preproc/include/siocomplex.hnormalfile()$sha1$23decfad06dcf00d265d9c15ff53c1eed48fd6d8iv$yxxu-svn-gmtfx& gE i#preproc/ALOS_preproc/include/sarleader_ALOS.hpreproc/ALOS_preproc/includebranches/5.7/preproc/ALOS_preproc/include/sarleader_ALOS.hnormalfile()$sha1$ef50ecca0669ce49dbb77b8f0501b41b631f398eiv$yxxu-svn-gmtft% eE i#preproc/ALOS_preproc/include/lib_functions.hpreproc/ALOS_preproc/includebranches/5.7/preproc/ALOS_preproc/include/lib_functions.hnormalfile()$sha1$f23b87f901dd9fa4dabcd68c2b8649142c6911dbiv$yxxu-svn-gmtft$ eE i#preproc/ALOS_preproc/include/sarleader_fdr.hpreproc/ALOS_preproc/includebranches/5.7/preproc/ALOS_preproc/include/sarleader_fdr.hnormalfile()$sha1$ba82e536d56a04404d0373d1a47d95710429b245iv$yxxu-svn-gmt6Bfn# _E yi#preproc/ALOS_preproc/include/orbit_ALOS.hpreproc/ALOS_preproc/includebranches/5.7/preproc/ALOS_preproc/include/orbit_ALOS.hnormalfile()$sha1$dc42c44eff830f314ede04efa5c8f2f0956c207civ$yxxu-svn-gmtfl" ]E wi#preproc/ALOS_preproc/include/image_sio.hpreproc/ALOS_preproc/includebranches/5.7/preproc/ALOS_preproc/include/image_sio.hnormalfile()$sha1$cdc868412ca70b9bb7d4459717390e0d086e2a8fiv$yxxu-svn-gmtrfn! _E yi#preproc/ALOS_preproc/include/data_ALOSE.hpreproc/ALOS_preproc/includebranches/5.7/preproc/ALOS_preproc/include/data_ALOSE.hnormalfile()$sha1$526d3b9902f82e7437b35cb7c1e793bcaf83774aiv$yxxu-svn-gmtUTf( U5 opreproc/ALOS_preproc/roi_pac_scriptspreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/roi_pac_scriptsnormaldir()infinity*-AUqksandwell- U 4ipreproc/ALOS_preproc/roi_pac_scripts/make_raw_alos_ERSDAC.plpreproc/ALOS_preproc/roi_pac_scriptsbranches/5.7/preproc/ALOS_preproc/roi_pac_scripts/make_raw_alos_ERSDAC.plnormalfile(svn:executable 1 *)$sha1$bb3464696cf106a515db6a09911edb77af099f6f*-AUqksandwellf <X x p h a 6L 2   ] 2N  Y -  V"*~xM!  Dq Ezj>f:^R&~S'76+Y$md5 $cc9cde67dc6d4425b9b67690f3d8b084+Y$md5 $b58a993dcd9dff6e952ee098df5a5e03+Y$md5 $c33bf966702e624e260f32fe1ffabb9e+Y$md5 $bade6640b5163ec55ac1ec551d9e37ed+Y$md5 $cedc033b1a6f80c3c4fa948b7a562d9d+Y$md5 $ce5f2bb6854d3393f861101e473f91db+Y$md5 $d60ce0a9fa5e47cfd807e7bbde4eb279+Y$md5 $b71ec15e85f11e20f41d38a9457cafc6+Y$md5 $c5b0023b68b9798f693441e4ddab25ba+Y$md5 $c15d1c322d02663d209c8c8e41949896+Y$md5 $b08c27aedeaa3ea026a02ce53c658d4a+Y$md5 $b8ef29f570059bca9f253293fb863548+Y$md5 $cd6f33dfb43bf57517dc1d31327c3e68+Y$md5 $ceadf47b74fc30320120e2a3c581a89c+Y$md5 $b642f33a8e26811dd380d7aa60f2adf3+Y$md5 $d5b9bd733102cbf9fa58c2b1c357db51*+Y$md5 $d5a6f894e395b801c86453dec7ef4aa3+Y$md5 $d4eeab4df8bcec4fe94455f6745be3f2+Y$md5 $d4d5ab0ba2dbfba7791b114f3b624ed6+Y$md5 $d498d57ec8a887aa46f57c822c650080)+Y$md5 $d32239bcb673463ab874e80d47fae5040*Y$md5 $d2dd51b0af396975d4394959a83a8a6e *Y$md5 $d29d9b381f44d08c1d2533ff539df707R*Y$md5 $d204ea13bc5b3de6a7e65873a82703ebc+Y$md5 $d1ee8b84abf06de23f5da68219478fb7*Y$md5 $d110cc98094a7bb2ed356397a58b875d}+Y$md5 $d0cdd4df2b05b9f8cd5bb6e1f6a3218c*Y$md5 $d07c9826cf470dd607b4e5bb696e39acv+Y$md5 $d00c41344d3f933b055029901e2402e7S+Y$md5 $cfdcd61c3d9979d8620ef39848fafc0fw+Y$md5 $cfbfa41ef8c869b0fc068c3f579eb73b+Y$md5 $cf59e4ce3ec4ea7578ab19e804c7180eE+Y$md5 $ce7c4b1f966fc11675774645a095ff8f +Y$md5 $cd88194c00a2a23c75eb23d829c596f0+Y$md5 $cb14f6b0dbf63ea5c4457d12a9165824+Y$md5 $ca34b39a822de0f8f6ad231ec5bef01a<+Y$md5 $c9b96de449ea14b507303eee492be428,+Y$md5 $c99029a9c96360b1b930c305e8aaa178@*Y$md5 $c97b684b055881d2195148af95efeed3~+Y$md5 $c923872d4e68830a8a317a53f514cf18*Y$md5 $c8231c45b78f36cbb199db8d6369f498m+Y$md5 $c7683ac4630116b4b9470f810ef2c87e*Y$md5 $c74ff901cfa431ae80111aecee36913f4+Y$md5 $d652f48738d322f1ba14a73025ee8a74+Y$md5 $d616c0a65ee7bf6adc4f8f56095fdcfc+Y$md5 $c66136c2b113e18e0588a9aa9f9446d3=*Y$md5 $c37aa355da5d2f396ad10fd0efbb304a{+Y$md5 $c1e4b0aeadabafefb7dab11567e964be+Y$md5 $c12352168d5f936abb54f111ba2a44a7W+Y$md5 $bfca40bdc7bef9b1e7e5167f26bfb59e*Y$md5 $bfb917580dbb3b01dbd6a48fc84a8c6fw+Y$md5 $bee8b4d6be586c3372a0a5bd12d4f860*Y$md5 $bebd0dd8ec15518fde3fc86284cff0230*Y$md5 $bd0d5f01b4cc402f3d0bd3789124bac7x+Y$md5 $bb76e5a7673d0d641e46941fa994b69c*Y$md5 $bad4e767ac9649481f9d9eef921ab295+Y$md5 $b8f9a50aafdf11a3b5352ad175628469*Y$md5 $b8914b0788332ad97890e9ab11a4eac6_+Y$md5 $b7cddf26577303fee5c2aa9f4e80747e:*Y$md5 $b792c584ed2defba1a6e7427965ede3eD*Y$md5 $b6586d1edfff4228f8a76cc0653731548*Y$md5 $b4a0f4cb24139989af389a61a41ae410/+Y$md5 $b2dbf9d2cc500f0f7cc1659277f91de6+Y$md5 $b14524f74876fffe85a4382a9f8d52cf*Y$md5 $afa4e5b4fbcc126e3c2e600e1009fd94G+Y$md5 $af91fb61fbebe2c4e7c82d2b396875e9+Y$md5 $ae9a9c235131aec813d49f21abb345954,+Y$md5 $b0aa9f5f306963e4523add2102c07f6e+Y$md5 $be7b8a45b7fd5e083059ed528843b488 +Y$md5 $c1571f91f467a281cf74af682d8ba184+Y$md5 $b73f74850f3619c09d8993e38396a93d+Y$md5 $cae839b2a61c7d0fd2c82022e84f0e47+Y$md5 $cd53f530d8609243c3673af599af8a85+Y$md5 $b082517fb0e078621f79ece02f4c1106+Y$md5 $be968282b6158f94ca609c4f43498342+Y$md5 $b567c222bba8b1671a346bc6014ec800+Y$md5 $afb106db76d46a6ba007bf5a7d880af5+Y$md5 $ce029d4306e253a0249077690ff97404+Y$md5 $b4c3276927c5266912fd171c6ee0d567+Y$md5 $af0b2c642132667f283f04263cb467d8+Y$md5 $d96dab44a0bc15bedd04f0ad3137fbd6u*Y$md5 $d7f8383fc4a16c50d4ced39c00b18eb6#+Y$md5 $d7f263bdf32fb62b0cc4c4006759a2d3+Y$md5 $d78cd7c81865f0410cbdb261093051f8k*Y$md5 $d777a47e63673924ec71ba94ef83a8ba1*Y$md5 $d74418b901b4f51c021b1e654728eb56T*Y$md5 $d72ab3d136337e49ed8b86753c6174157+Y$md5 $c6bb69cdb00a594fc472fcfbe294fc23% .De|. = K f  z ( .SZ i>M,X|D lz7 3Epreproc/CSK_preprocpreproc/CSK_preproc/Makefile/i Upreproc/ALOS_preproc/roi_pac_scriptspreproc/ALOS_preproc/roi_pac_scripts/make_raw_alos_ERSDAC.plq _ preproc/ALOS_preproc/lib_src/cfft1d_codespreproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_veclib031110.cj _preproc/ALOS_preproc/lib_src/cfft1d_codespreproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_veclib.ch _{preproc/ALOS_preproc/lib_src/cfft1d_codespreproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_sun4.ch _{preproc/ALOS_preproc/lib_src/cfft1d_codespreproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_fftw.cl _preproc/ALOS_preproc/lib_src/cfft1d_codespreproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_fftpack.cJ EYpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/xyz2plh.c L E]preproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/write_orb.cQ Egpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/write_ALOS_prm.cQ Egpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/write_ALOS_LED.cH EUpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/utils.cI EWpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/swap32.cI EWpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/swap16.c M E_preproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/siocomplex.cT Empreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/set_ALOS_defaults.cM E_preproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/rng_filter.cM E_preproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/rng_expand.cO Ecpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/rng_compress.cV Eqpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/read_ALOS_sarleader.cQ Egpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/put_sio_struct.cD EMpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/pt0 J EYpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/polyfit.cJ EYpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/plh2xyz.c R Eipreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/null_sio_struct.cY Ewpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/interpolate_ALOS_orbit.cL E]preproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/hermite_c.cQ Egpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/get_sio_struct.cR Eipreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/find_fft_length.c J EYpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/fftpack.cM E_preproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/cfft1d_codesI EWpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/cfft1d.cK E[preproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/calc_dop.cN Eapreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/Makefile_origI EWpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/MakefileQ Egpreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/ALOS_ldr_orbit.cU Eopreproc/ALOS_preproc/lib_srcpreproc/ALOS_preproc/lib_src/ALOSE_orbits_utils.cM E_preproc/ALOS_preproc/includepreproc/ALOS_preproc/include/siocomplex.hP Eepreproc/ALOS_preproc/includepreproc/ALOS_preproc/include/sarleader_fdr.hQ Egpreproc/ALOS_preproc/includepreproc/ALOS_preproc/include/sarleader_ALOS.hM E_preproc/ALOS_preproc/includepreproc/ALOS_preproc/include/orbit_ALOS.hJ EYpreproc/ALOS_preproc/includepreproc/ALOS_preproc/include/llt2xyz.hP Eepreproc/ALOS_preproc/includepreproc/ALOS_preproc/include/lib_functions.hL E]preproc/ALOS_preproc/includepreproc/ALOS_preproc/include/image_sio.hM E_preproc/ALOS_preproc/includepreproc/ALOS_preproc/include/data_ALOSE.hL E]preproc/ALOS_preproc/includepreproc/ALOS_preproc/include/data_ALOS.h bat n z .bdC{: gS ipreproc/ALOS_preproc/ALOS_mosaic_ss/Makefile2preproc/ALOS_preproc/ALOS_mosaic_ssbranches/5.7/preproc/ALOS_preproc/ALOS_mosaic_ss/Makefile2normalfile()$sha1$9205eb41f541fdd5c600d0edfcda02e45d58f1c6!mL+D)sandwellf 9 uS i#preproc/ALOS_preproc/ALOS_mosaic_ss/ALOS_mosaic_ss.cpreproc/ALOS_preproc/ALOS_mosaic_ssbranches/5.7/preproc/ALOS_preproc/ALOS_mosaic_ss/ALOS_mosaic_ss.cnormalfile()$sha1$fa4c61f6880cea08822c70f9380cf16f8791b4eaiv$yxxu-svn-gmtff)= S5 m#preproc/ALOS_preproc/ALOS_mosaic_sspreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_mosaic_ssnormaldir()infinityiv$yxxu-svn-gmt< S i#preproc/ALOS_preproc/ALOS_mosaic_ss/ALOS_mosaic_ss_2frames.cpreproc/ALOS_preproc/ALOS_mosaic_ssbranches/5.7/preproc/ALOS_preproc/ALOS_mosaic_ss/ALOS_mosaic_ss_2frames.cnormalfile()$sha1$a346242711241e142ba7061aa1761be69dff67aciv$yxxu-svn-gmtvBfz; eS i!preproc/ALOS_preproc/ALOS_mosaic_ss/Makefilepreproc/ALOS_preproc/ALOS_mosaic_ssbranches/5.7/preproc/ALOS_preproc/ALOS_mosaic_ss/Makefilenormalfile()$sha1$b3fd87760af15f0df9902c6d37464650ad092e93cuĩahogreliusf-7 W5 q#preproc/ALOS_preproc/ALOS_fbd2fbs_SLCpreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_fbd2fbs_SLCnormaldir()infinityiv$yxxu-svn-gmt}6 iW ipreproc/ALOS_preproc/ALOS_fbd2fbs_SLC/Makefilepreproc/ALOS_preproc/ALOS_fbd2fbs_SLCbranches/5.7/preproc/ALOS_preproc/ALOS_fbd2fbs_SLC/Makefilenormalfile()$sha1$c35b4f5182b0d7d192456530a64a7a835427358bz9&fwobbeLf5 }W i#preproc/ALOS_preproc/ALOS_fbd2fbs_SLC/ALOS_fbd2fbs_SLC.cpreproc/ALOS_preproc/ALOS_fbd2fbs_SLCbranches/5.7/preproc/ALOS_preproc/ALOS_fbd2fbs_SLC/ALOS_fbd2fbs_SLC.cnormalfile()$sha1$175b95cae68c750bbe0c7da832ac21656fe41c35iv$yxxu-svn-gmt-f%3 O5 i#preproc/ALOS_preproc/ALOS_fbs2fbdpreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_fbs2fbdnormaldir()infinityiv$yxxu-svn-gmtp2 aO {ipreproc/ALOS_preproc/ALOS_fbs2fbd/Makefilepreproc/ALOS_preproc/ALOS_fbs2fbdbranches/5.7/preproc/ALOS_preproc/ALOS_fbs2fbd/Makefilenormalfile()$sha1$c17640a30fcd6e65f4739d8f6dd28c2c4159fc7ez9&fwobbeDf1 mO i#preproc/ALOS_preproc/ALOS_fbs2fbd/ALOS_fbs2fbd.cpreproc/ALOS_preproc/ALOS_fbs2fbdbranches/5.7/preproc/ALOS_preproc/ALOS_fbs2fbd/ALOS_fbs2fbd.cnormalfile()$sha1$5556931f57f306b374e8beedb5a8421a1d161456iv$yxxu-svn-gmtLf%/ O5 i#preproc/ALOS_preproc/ALOS_fbd2fbspreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_fbd2fbsnormaldir()infinityiv$yxxu-svn-gmtp. aO {ipreproc/ALOS_preproc/ALOS_fbd2fbs/Makefilepreproc/ALOS_preproc/ALOS_fbd2fbsbranches/5.7/preproc/ALOS_preproc/ALOS_fbd2fbs/Makefilenormalfile()$sha1$a897e07fa69c45b70bedce3a7455c1c0cd4f6408z9&fwobbeDf- mO i#preproc/ALOS_preproc/ALOS_fbd2fbs/ALOS_fbd2fbs.cpreproc/ALOS_preproc/ALOS_fbd2fbsbranches/5.7/preproc/ALOS_preproc/ALOS_fbd2fbs/ALOS_fbd2fbs.cnormalfile()$sha1$9e1a8396574a5f3c78ed85327c815320a1d9587fiv$yxxu-svn-gmtfi+ S5 m4ipreproc/ALOS_preproc/create_tar.cshpreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/create_tar.cshnormalfile(svn:executable 1 *)$sha1$95f813c0c22eba1ccf47fd9e1a5310f12abe3b46*-AUqksandwellf* E5 _#preproc/ALOS_preproc/includepreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/includenormaldir()infinityiv$yxxu-svn-gmt  B A P .c}Q iW ipreproc/ALOS_preproc/ALOS_pre_process/Makefilepreproc/ALOS_preproc/ALOS_pre_processbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process/Makefilenormalfile()$sha1$9d02c1f5be48dfcf0306d003ce514ea153dbae51z9&fwobbefP oW i#preproc/ALOS_preproc/ALOS_pre_process/roi_utils.cpreproc/ALOS_preproc/ALOS_pre_processbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process/roi_utils.cnormalfile()$sha1$b2eaab8c4a9d9f21f26e0f098f72195d4a209aaciv$yxxu-svn-gmt)fO W i#preproc/ALOS_preproc/ALOS_pre_process/parse_ALOS_commands.cpreproc/ALOS_preproc/ALOS_pre_processbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process/parse_ALOS_commands.cnormalfile()$sha1$e9eabba95f481f8342d792bbea59a5873547049fiv$yxxu-svn-gmt fN {W i#preproc/ALOS_preproc/ALOS_pre_process/read_ALOSE_data.cpreproc/ALOS_preproc/ALOS_pre_processbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process/read_ALOSE_data.cnormalfile()$sha1$05d9eaabc9f8197241786c58ace29a063b83cd74iv$yxxu-svn-gmt1fM yW i#preproc/ALOS_preproc/ALOS_pre_process/read_ALOS_data.cpreproc/ALOS_preproc/ALOS_pre_processbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process/read_ALOS_data.cnormalfile()$sha1$24906508bb8c544247b1d441bdacb01d1a2a35e6iv$yxxu-svn-gmt<fL }W i#preproc/ALOS_preproc/ALOS_pre_process/ALOS_pre_process.cpreproc/ALOS_preproc/ALOS_pre_processbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process/ALOS_pre_process.cnormalfile()$sha1$c9f9b8c0c092e0ba78a10a2446c90327e8341358iv$yxxu-svn-gmt!f%J O5 i#preproc/ALOS_preproc/ALOS_llt2ratpreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_llt2ratnormaldir()infinityiv$yxxu-svn-gmtpI aO {ipreproc/ALOS_preproc/ALOS_llt2rat/Makefilepreproc/ALOS_preproc/ALOS_llt2ratbranches/5.7/preproc/ALOS_preproc/ALOS_llt2rat/Makefilenormalfile()$sha1$86f3256e64cf9193824cef6b5108bb378e35a96bz9&fwobbeEfH mO i#preproc/ALOS_preproc/ALOS_llt2rat/ALOS_llt2rat.cpreproc/ALOS_preproc/ALOS_llt2ratbranches/5.7/preproc/ALOS_preproc/ALOS_llt2rat/ALOS_llt2rat.cnormalfile()$sha1$f28ae09e9328c6b480b8387f8bc51eef4f14c103iv$yxxu-svn-gmt?wf#F M5 g#preproc/ALOS_preproc/ALOS_fbd2sspreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_fbd2ssnormaldir()infinityiv$yxxu-svn-gmtmE _M yipreproc/ALOS_preproc/ALOS_fbd2ss/Makefilepreproc/ALOS_preproc/ALOS_fbd2ssbranches/5.7/preproc/ALOS_preproc/ALOS_fbd2ss/Makefilenormalfile()$sha1$85f8f9afae10720cdc2234410fc43e8677fd6831z9&fwobbeBf}D iM i#preproc/ALOS_preproc/ALOS_fbd2ss/ALOS_fbd2ss.cpreproc/ALOS_preproc/ALOS_fbd2ssbranches/5.7/preproc/ALOS_preproc/ALOS_fbd2ss/ALOS_fbd2ss.cnormalfile()$sha1$2b89c68d8d6d9106c0786ba7e33444c9b4b9ae83iv$yxxu-svn-gmtf'B Q5 k#preproc/ALOS_preproc/ALOS_baselinepreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_baselinenormaldir()infinityiv$yxxu-svn-gmtsA cQ }ipreproc/ALOS_preproc/ALOS_baseline/Makefilepreproc/ALOS_preproc/ALOS_baselinebranches/5.7/preproc/ALOS_preproc/ALOS_baseline/Makefilenormalfile()$sha1$35c4535e82e3bf7295bffa6d119f6095ac0e060cz9&fwobbeTf @ wQ i#preproc/ALOS_preproc/ALOS_baseline/ALOS_llt2rat_sub.cpreproc/ALOS_preproc/ALOS_baselinebranches/5.7/preproc/ALOS_preproc/ALOS_baseline/ALOS_llt2rat_sub.cnormalfile()$sha1$43e63a66d2ee5703bd54fe72a9a38d37cc77deceiv$yxxu-svn-gmt+f? qQ i#preproc/ALOS_preproc/ALOS_baseline/ALOS_baseline.cpreproc/ALOS_preproc/ALOS_baselinebranches/5.7/preproc/ALOS_preproc/ALOS_baseline/ALOS_baseline.cnormalfile()$sha1$9e8b7e42e43fc9e4ec98a24a6164ad8b3df7b609iv$yxxu-svn-gmtIf C   c /U  YQ bMI . d%0M } _) + Q \ )!]c3f557a09788b0d62f3i$sha1$eb9e97abc3f557a09788b0d62f8db5604de60614D3i$sha1$fecd75ae41ae82e0962e887a66c6b3c060f7d290133i$sha1$ee36a9e5fd3927f0e05dfb509d49be705deb399bI3i$sha1$f36d99f78b92a906af7e68b9021f836209f6a063.3i$sha1$dffaf622d7e782bd7ae456730e446bf799edd41d-3i$sha1$fa8069da738f3814635f6bac9590d97e78b54281,3i$sha1$fb0d1420c6cf1715b767dee5cedb464213553bbf+3i$sha1$ee277ab2729966f8cb8f1e6e97319f56c38eeb93J3i$sha1$f15cc2842ca0c4375d2790c92879e1569f532fe8#3i$sha1$e9eabba95f481f8342d792bbea59a5873547049f{3i$sha1$f1e4672d482406a93b5bde87ce053aea11c6109c3i$sha1$f74f171b76ba1606c7378c7511b1ec01503559913i$sha1$ed17b385e81f3451a610b5a352d6d848356f46ba3i$sha1$e42eb545b07d31c2573d052539b90bc13165a145 /,3i$sha1$fcbd6975cec49fe6a56328e578689c0b62c62db73i$sha1$ef5bd5e4296dff0f76effff2df0674f8bb7f064b3i$sha1$f2a360d889402e5f3a5ad342d86c00d05204960b3i$sha1$e08d885ab71fe6e402d51144a3c3ac6c7e37e05e3i$sha1$dd7ed2459c2a3b77f92bd8cdbe2d525142fb1c4b3i$sha1$de7cf554c4d9edccbe26d64d0e5ef4120a6f019a3i$sha1$f28ae09e9328c6b480b8387f8bc51eef4f14c103v3i$sha1$fa4c61f6880cea08822c70f9380cf16f8791b4eam3i$sha1$fad2679a14436b07c2d2d6ed285299e7fb717e97e3i$sha1$ef50ecca0669ce49dbb77b8f0501b41b631f398ec3i$sha1$f23b87f901dd9fa4dabcd68c2b8649142c6911dbb3i$sha1$fd8fb192e2ff677ad4c7aab8ec00224a4e7c6ee33i$sha1$e50e44aa1d2e47668f1b777ed25ff2483e64bd7a3i$sha1$e82a66aa88204c3147bc2933d0b2a2fe108e7940Z3i$sha1$ea127034c3ea6e47bc228595366eb8ac62d19dcd3i$sha1$f0da19fe08afc44bba6369c854c3c3bebd94b1613i$sha1$f0713231953a39509eacd2bedf05f31133e74536 3i$sha1$eae56735bb6d9587cfd33413c870f336fddae041 3i$sha1$f75f023f19f7caa7c058c9d0694056d517c533063i$sha1$ee5aa94a2091680acc5855d183688ddd5c3c1f463i$sha1$f5b57d7b55f948254f7543cb576a1e65163cf8df3i$sha1$f6435ffe363e6a9f499acacd925b06d67c60dc2c2i$sha1$fef5a288b59d74d6149accc114aa6b4a91d3a303U2i$sha1$fecdc35959c154d317aebe4431f01d475c76e073 2i$sha1$fd64c8a422d76b2730afa99d4c89fca4d83cdb48?2i$sha1$fd095de6c39d74feff3b5a89874354bdcd4427ab 2i$sha1$fc9494fa4a0bebf7b1b003cb8a0bc8e48f4b3fb5^3i$sha1$fbdb87d71180d433746a2216973ec30ebfc20b133i$sha1$fb33f52102f901916929bc3c2769003135f144f62i$sha1$f71e471c7b4498b8ee0b2c84896f77459c24c9e0S3i$sha1$f65f0e9de933fe9512cd641a94fcb9f70d951bb03i$sha1$f6508dcc5941caec6b5a1b374a1bbc043b45994d3i$sha1$f4ffe1630e2761550f0152c39777b9698a3c006d3i$sha1$f36c0855468150ad528d02e26c35a3069aeebeaa2i$sha1$eefeb1512e2eec99fa0651af5ec0e931125ac736;3i$sha1$eed3be1ee64225a9b4aa120dc9723a08bbba75343i$sha1$ee37d193146a2b51a944d0f79d0ab17b06d86fe22i$sha1$edab0f3aa753bd3139b802c86963b09c6324b6b3K2i$sha1$e8f735e184797e77af1fb9bd1d192b93c4dbc514m3i$sha1$e54b46dfc5c8f7eae57a25374f1794530deb82022i$sha1$e52d56855830832558eb57c9a2eee69c5969423cv3i$sha1$e4ee3392e8ca33a7c587f9e99dee0598680b7da02i$sha1$e431b0d22b761ac366cd1e467174408123cbbb7d$2i$sha1$e2c1fe37f13c4db7fd0acda4701890ffaf422258I2i$sha1$dd51299806c615ea110b0588a1f5ba2d129d58f5V2i$sha1$dcc905cbd8695a5e2cbed939848fc92b3f08ea3eye3i$sha1$e762cfa76b90c30cbde14951d59f37a44c395ab93i$sha1$eac09d8cd3ac420ffc1a88762e0a010b212ecd6d3i$sha1$f7f94114e5c6b7cf9c99735b6675f59fbd5ed1ea3i$sha1$f0be043195163240143a8a09a36c74ac5531ee5f3i$sha1$efeb364663b22bf04853785903509720567e75873i$sha1$fa5b7fe7b40e032fa46bba0beb105c973ed763503i$sha1$fce36f238fd52ca990deaa67398a5d35e3baa5c3 I |ung`YRKD=6/(! yrkd]VOHA:3,%   } v a Z S L E > 7 0 ) "    h o y q i a Y Q I A 9 1 !    ) y q i a Y Q A 9 1 ) !    y q i a Y Q I A 9 1 ) !    y q i a Y Q I A 9 1 ) !   yqiaYQIA91)!  IyqiaYQIA91)! qyiaYQIA91! )yiaYQqA91)!I yiqYQIA91)!a qiyYQai IH                                                                                                   ~ } | { y x v u z s p o n m l k j i h g f e d c q r ` _ ^ \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A @ ? > = < ; : 9 8 7 6 5 4 3 2 1 0 / . - , + * ) ( ' & % ] # " !                                   hxph`XPH@80( xph`XPH@80(  x p h ` X P H @ 8 0 (    x p h ` X P H @ 8 0 (    x p h ` X P H @ 8 0 (    x p h ` X P H @ 8 0 (    x p h X P H @ 8 ` (     0xph`PH@80X( xp `XH@P8h (0ph`XPH@80( xpxh`XP@8H( 0xphXP`@80H ( xph                                             ~ | { } x w v u t s y p o q l k m h g f e b a ` _ ^ ] \ [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B c d i = < > 9 8 7 : 4 3 5  / - , . * ) ' & ( 0 "    !   #                                                                                                                                           ~ } | z y x v u s r q o n m l k j i h g f e d a ` _ ^ ] [ Z  W V T S R Q P O N M L J H G F E D C B A @ ? > = < : 9 8 5 4 3 2 1 0 / . - , + * ) ( ' & % $ # " !                                                                    *eB % g  I + m  P3tW:|_B$e\$i Y$sha1$3ba87f8710ac954fefcb3f6c3d09a3c0c602baa3$md5 $8857afaba6429bf51a4aa6f1d41c0ad5]#i Y$sha1$8d7610a32fe0b84c9ed2bfed44268fab8f6f8135$md5 $287329b8ede4d9f35bef12e819a0adfb\"i Y$sha1$ef5bd5e4296dff0f76effff2df0674f8bb7f064b$md5 $4098863fda73bd59714871430d57a0dc]iY$sha1$2a7500e539be1e132b88ba5b74df8b98bd33ebb4B$md5 $173d38f498b0334b0cab20231083312c\ i Y$sha1$b61937b7b761d60ba2490860762b8406200cdc77$md5 $14f46f5a8f6163fe95bb612fc013dfbc\i Y$sha1$d3215049e60f2362b74598bd028fabc9b19873d0 $md5 $1c6b660dca82bd9cd251dc361e0ef488\i Y$sha1$bea601f75b6606f7ae39ec655b56e9ff59340103 $md5 $cd6f33dfb43bf57517dc1d31327c3e68\i Y$sha1$aa971166ffacd30327ccd46ec3936c0049d3f239$md5 $ceadf47b74fc30320120e2a3c581a89c\i Y$sha1$a7bc202701e9f33b2967b3df216052708433105f$md5 $06f8b45bea5a8f129867c623a2416caa\!i Y$sha1$5f27f98a2b856f6bd3c3c014b0b7284120346347C$md5 $b8ef29f570059bca9f253293fb863548\i Y$sha1$0e447fcd933b8485752ee116d46b646e2ddc1585t$md5 $fafacc4a2e0b32559a7b53375189953f\i Y$sha1$7818c1d2156c7dcb55460ac1e1090a42f9031553$md5 $fbf8d40a7f70ea40f1c412b9a0e906d5\i Y$sha1$be3611c8a65790a06ec573ea176d66a2bd3f5d96$md5 $828b97eb87a67f4b44fde7771beda48d\i Y$sha1$bf08be523af1a11e870d2e69a82cc28b1dd4c58d)$md5 $122fe249b1624f1a0838b44ab6a8f5fd\i Y$sha1$f2a360d889402e5f3a5ad342d86c00d05204960b $md5 $12986bb7ee3f08cd93d3861d04c34248\i Y$sha1$154600fb7f08e0ec3f0aa58dfb300bf204e28ed3 p$md5 $1f824c052c302628548bb8e3f0eef9df\i Y$sha1$089619dba241935e716800923189a42d93908491J$md5 $33adcd12a4c68a4f661548b4070ec987\i Y$sha1$53db8da12fe37b51975f830deeabde3657091d6bB$md5 $b642f33a8e26811dd380d7aa60f2adf3\i Y$sha1$e08d885ab71fe6e402d51144a3c3ac6c7e37e05e@$md5 $986c296e3de91b634741197538a4862e]i Y$sha1$93a5b98498a25fb05439826327fec66317556bf6 $md5 $808452607598d34d3950c3a24121ea61\i Y$sha1$49ffffc67287629fe8f32f896b4416c7b0a056da$md5 $9cd305c2591a0aa026bf91d69d0be66a\i Y$sha1$7561776edf3e983b17fbd0ae7332d76147d84d30$md5 $6a5f9978569d2aecf1fae10a133018f7\i Y$sha1$dd7ed2459c2a3b77f92bd8cdbe2d525142fb1c4b$md5 $77825ebf4e47f3d6aad7486e09413dd0\ i Y$sha1$738d049593f6cf4171360c750aac8968ee0dde69$md5 $5ee010f66127761ae1f8a9e6b864993a\ i Y$sha1$4158cdb81499a090412c792e35d0af8d41415ecf $md5 $082283a30cf35e8f3c27e5721ad809e0\ i Y$sha1$b47ecf4ccc4567a79faaafe88d3a2487721407de$md5 $2b5702efd6bd62b592fb4c3132f71fa2\ i Y$sha1$d24c282d780123a5bbad2f25804a07103116b69c$md5 $4f60ac0598e46d6be3d654de85a2fec1\ i Y$sha1$3358e60f5754d330ecf63adf76ecaf4d9e202fe4$md5 $fa05b1dfbeb3cdf49bb18ca15bb52a2d\i Y$sha1$d48a2322736c9a687dd56cc8f008543c834698e1W$md5 $2fa1da503eb3155538c54d96c7bb210d]i Y$sha1$088848473491e83f395dede9237fe64b0b26f489$md5 $9998a679df1133538f5d5d16d47c5f5c\i Y$sha1$de7cf554c4d9edccbe26d64d0e5ef4120a6f019a=$md5 $92cee39cdd7971a108923a0c2cd16be2\i Y$sha1$b16672f914614f1defd372e2d202cec5714e1ed1 I$md5 $e0b769a0166dd2417fdfa1bb873e7afc\i Y$sha1$a5a28831c70feaff7ae72fdf6751e2ee69b9af12O6$md5 $0c05ea88cc91cd4c3713277290bed4cb]~iY$sha1$6521a0282d7ce731fe26e7defe327a16d38239ce $md5 $250242e5e647eb9e5b2a538e081a1082\i Y$sha1$3adca06bbdd216ee02fb9ca620e5914316466ed8$md5 $40d41a8e38912dacc90c5e7b1afc2008\i Y$sha1$2cf08634ab910915c00a753dc824f829721ec87c j$md5 $49856d8f2052abf81e5d842a5ec9cb37\i Y$sha1$695452bc5621dc58ff6b4261620b88a5ee6d4a2bB)$md5 $90afa82969c5144a2f7c0187e6415f88\i Y$sha1$9819a3b1df794d61817b5d27848b80aaec9521f2H$md5 $4ffe192e46098cee171756ae1fd643e0\i Y$sha1$463cd1f77815a417f9d3e3aafc12fc0de9e443c1<$md5 $cd88194c00a2a23c75eb23d829c596f0\}i Y$sha1$9d02c1f5be48dfcf0306d003ce514ea153dbae51$md5 $94c2976a486b07ea165ff5b751457a06\|i Y$sha1$b2eaab8c4a9d9f21f26e0f098f72195d4a209aac)$md5 $1ffae5236c566c324f04955ee7770461\{i Y$sha1$e9eabba95f481f8342d792bbea59a5873547049f $md5 $753aa1eb6680c422f6e84b001d92d15e NGL T|N V % ^ 1  k =   j K ( { I* rN:qD*O:N, Wpreproc/ENVI_preproc/ASA_CAT/Makefile|- Ypreproc/ENVI_preproc/ASA_CAT/asa_cat.c{# Epreproc/ENVI_preproc/ASA_CAT}4 gpreproc/ENVI_preproc/ENVI_SLC_decode/Makefileh? }preproc/ENVI_preproc/ENVI_SLC_decode/envisat_dump_data.cgB preproc/ENVI_preproc/ENVI_SLC_decode/envisat_dump_header.cf= ypreproc/ENVI_preproc/ENVI_SLC_decode/envi_slc_decode.ceH preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_api.defb@ preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_veclib.c> {preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_sun4.c> {preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_fftw.cB preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_fftpack.c0 _preproc/ALOS_preproc/lib_src/cfft1d_codes, Wpreproc/ALOS_preproc/lib_src/cfft1d.c. [preproc/ALOS_preproc/lib_src/calc_dop.c1 apreproc/ALOS_preproc/lib_src/Makefile_orig -VJ preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dataset.hMJ preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dataset.cIG preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_core.hNG preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_core.cK 9preproc/CMakeLists.txt 5preproc/ENVI_preprocJ preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_bitmask.hPJ preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_bitmask.cLG preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_band.hYG preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_band.cTF preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_api.hGF preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_api.cDE preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/MakefileJ; upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcc7 mpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3d+ Upreproc/ENVI_preproc/ENVI_SLC_decodei9 qpreproc/ENVI_preproc/Dop_orbit/calc_dop_orb_envi.c3. [preproc/ENVI_preproc/Dop_orbit/Makefile4% Ipreproc/ENVI_preproc/Dop_orbit51 apreproc/CSK_preproc/src_slc/make_slc_csk.c,+ Upreproc/CSK_preproc/src_slc/Makefile-" Cpreproc/CSK_preproc/src_slc.1 apreproc/CSK_preproc/src_raw/make_raw_csk.c&+ Upreproc/CSK_preproc/src_raw/Makefile'" Cpreproc/CSK_preproc/src_raw( ;preproc/CSK_preproc/lib*" Cpreproc/CSK_preproc/include)# Epreproc/CSK_preproc/Makefile/ 3preproc/CSK_preproc0D preproc/ALOS_preproc/roi_pac_scripts/make_raw_alos_ERSDAC.pl+ Upreproc/ALOS_preproc/roi_pac_scripts- Ypreproc/ALOS_preproc/lib_src/xyz2plh.c / ]preproc/ALOS_preproc/lib_src/write_orb.c4 gpreproc/ALOS_preproc/lib_src/write_ALOS_prm.c4 gpreproc/ALOS_preproc/lib_src/write_ALOS_LED.c+ Upreproc/ALOS_preproc/lib_src/utils.c, Wpreproc/ALOS_preproc/lib_src/swap32.c, Wpreproc/ALOS_preproc/lib_src/swap16.c 0 _preproc/ALOS_preproc/lib_src/siocomplex.c7 mpreproc/ALOS_preproc/lib_src/set_ALOS_defaults.c0 _preproc/ALOS_preproc/lib_src/rng_filter.c0 _preproc/ALOS_preproc/lib_src/rng_expand.c2 cpreproc/ALOS_preproc/lib_src/rng_compress.c9 qpreproc/ALOS_preproc/lib_src/read_ALOS_sarleader.c4 gpreproc/ALOS_preproc/lib_src/put_sio_struct.c' Mpreproc/ALOS_preproc/lib_src/pt0 - Ypreproc/ALOS_preproc/lib_src/polyfit.c- Ypreproc/ALOS_preproc/lib_src/plh2xyz.c 5 ipreproc/ALOS_preproc/lib_src/null_sio_struct.c< wpreproc/ALOS_preproc/lib_src/interpolate_ALOS_orbit.c/ ]preproc/ALOS_preproc/lib_src/hermite_c.c4 gpreproc/ALOS_preproc/lib_src/get_sio_struct.c5 ipreproc/ALOS_preproc/lib_src/find_fft_length.c - Ypreproc/ALOS_preproc/lib_src/fftpack.cG preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_veclib031110.c  6 u J  G\6"] ] i#preproc/ALOS_preproc/ALOS_pre_process_SS/read_ALOS_data_SS.cpreproc/ALOS_preproc/ALOS_pre_process_SSbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/read_ALOS_data_SS.cnormalfile()$sha1$a5a28831c70feaff7ae72fdf6751e2ee69b9af12iv$yxxu-svn-gmtO6f&\ ] #i#preproc/ALOS_preproc/ALOS_pre_process_SS/ALOS_pre_process_SS.cpreproc/ALOS_preproc/ALOS_pre_process_SSbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/ALOS_pre_process_SS.cnormalfile()$sha1$463cd1f77815a417f9d3e3aafc12fc0de9e443c1iv$yxxu-svn-gmt<f?+a s !ipreproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/gauss.datpreproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/gauss.datnormalfile()$sha1$088848473491e83f395dede9237fe64b0b26f489z9&fwobbef0` s 'ipreproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/plot_shift.mpreproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/plot_shift.mnormalfile()$sha1$de7cf554c4d9edccbe26d64d0e5ef4120a6f019az9&fwobbe=f&^ ] #i#preproc/ALOS_preproc/ALOS_pre_process_SS/parse_ALOS_commands.cpreproc/ALOS_preproc/ALOS_pre_process_SSbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/parse_ALOS_commands.cnormalfile()$sha1$b16672f914614f1defd372e2d202cec5714e1ed1iv$yxxu-svn-gmt If+U _ 'i#preproc/ALOS_preproc/ALOS_pre_process_SLC/ALOS_pre_process_SLC.cpreproc/ALOS_preproc/ALOS_pre_process_SLCbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/ALOS_pre_process_SLC.cnormalfile()$sha1$9819a3b1df794d61817b5d27848b80aaec9521f2r{ jxxu-svn-gmtHf)Y _ %i#preproc/ALOS_preproc/ALOS_pre_process_SLC/swap_ALOS_data_info.cpreproc/ALOS_preproc/ALOS_pre_process_SLCbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/swap_ALOS_data_info.cnormalfile()$sha1$6521a0282d7ce731fe26e7defe327a16d38239ceiv$yxxu-svn-gmt f X q_ ipreproc/ALOS_preproc/ALOS_pre_process_SLC/Makefilepreproc/ALOS_preproc/ALOS_pre_process_SLCbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/Makefilenormalfile()$sha1$3adca06bbdd216ee02fb9ca620e5914316466ed8z9&fwobbef)W _ %i#preproc/ALOS_preproc/ALOS_pre_process_SLC/parse_ALOS_commands.cpreproc/ALOS_preproc/ALOS_pre_process_SLCbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/parse_ALOS_commands.cnormalfile()$sha1$2cf08634ab910915c00a753dc824f829721ec87civ$yxxu-svn-gmt jf'V _ #i#preproc/ALOS_preproc/ALOS_pre_process_SLC/read_ALOS_data_SLC.cpreproc/ALOS_preproc/ALOS_pre_process_SLCbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SLC/read_ALOS_data_SLC.cnormalfile()$sha1$695452bc5621dc58ff6b4261620b88a5ee6d4a2br{ jxxu-svn-gmtB)fR W i#preproc/ALOS_preproc/ALOS_pre_process/swap_ALOS_data_info.cpreproc/ALOS_preproc/ALOS_pre_processbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process/swap_ALOS_data_info.cnormalfile()$sha1$6521a0282d7ce731fe26e7defe327a16d38239ceiv$yxxu-svn-gmt f-S W5 q#preproc/ALOS_preproc/ALOS_pre_processpreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_pre_processnormaldir()infinityiv$yxxu-svn-gmt5Z _5 y#preproc/ALOS_preproc/ALOS_pre_process_SLCpreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SLCnormaldir()infinityr{ jxxu-svn-gmt  *^Nja$EI }+^ 8  @ F FLLRd U}preproc/ENVI_preproc/ENVI_SLC_decodepreproc/ENVI_preproc/ENVI_SLC_decode/envisat_dump_data.cgg Upreproc/ENVI_preproc/ENVI_SLC_decodepreproc/ENVI_preproc/ENVI_SLC_decode/envisat_dump_header.cfb Uypreproc/ENVI_preproc/ENVI_SLC_decodepreproc/ENVI_preproc/ENVI_SLC_decode/envi_slc_decode.ce} u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_api.defb8 5Epreproc/ENVI_preprocpreproc/ENVI_preproc/ASA_CAT}J EYpreproc/ENVI_preproc/ASA_CATpreproc/ENVI_preproc/ASA_CAT/asa_cat.c{8 5Epreproc/ENVI_preprocpreproc/ENVI_preproc/lib_src8 5Epreproc/ENVI_preprocpreproc/ENVI_preproc/scriptsyG CUpreproc/CSK_preproc/src_rawpreproc/CSK_preproc/src_raw/Makefile'6 3Cpreproc/CSK_preprocpreproc/CSK_preproc/src_slc.6 3Cpreproc/CSK_preprocpreproc/CSK_preproc/src_raw(2 3;preproc/CSK_preprocpreproc/CSK_preproc/lib*Y I EWpreproc/ENVI_preproc/ASA_CATpreproc/ENVI_preproc/ASA_CAT/Makefile|: 5Ipreproc/ENVI_preprocpreproc/ENVI_preproc/ENVI_lookq= 5Opreproc/ENVI_preprocpreproc/ENVI_preproc/ENVI_llt2ratm@ 5Upreproc/ENVI_preprocpreproc/ENVI_preproc/ENVI_SLC_decodeiY Ugpreproc/ENVI_preproc/ENVI_SLC_decodepreproc/ENVI_preproc/ENVI_SLC_decode/MakefilehC9 5Gpreproc/ENVI_preprocpreproc/ENVI_preproc/Makefile~{ u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dsd.c[| u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dddb.hS| u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dddb.cO upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dataset.hM upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dataset.cI| u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_core.hN| u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_core.cK upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_bitmask.hP upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_bitmask.cL| u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_band.hY| u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_band.cT{ u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_api.hG{ u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_api.cDz upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/MakefileJl mupreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcc\ Umpreproc/ENVI_preproc/ENVI_SLC_decodepreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3dX Iqpreproc/ENVI_preproc/Dop_orbitpreproc/ENVI_preproc/Dop_orbit/calc_dop_orb_envi.c3M I[preproc/ENVI_preproc/Dop_orbitpreproc/ENVI_preproc/Dop_orbit/Makefile4< 5Mpreproc/ENVI_preprocpreproc/ENVI_preproc/ENVI_decode>> 5Qpreproc/ENVI_preprocpreproc/ENVI_preproc/ENVI_baseline:A: 5Ipreproc/ENVI_preprocpreproc/ENVI_preproc/Dop_orbit5M Capreproc/CSK_preproc/src_slcpreproc/CSK_preproc/src_slc/make_slc_csk.c,G CUpreproc/CSK_preproc/src_slcpreproc/CSK_preproc/src_slc/Makefile-M Capreproc/CSK_preproc/src_rawpreproc/CSK_preproc/src_raw/make_raw_csk.c& D l V?D-wr eK i#preproc/ALOS_preproc/ALOS_merge/ALOS_merge.cpreproc/ALOS_preproc/ALOS_mergebranches/5.7/preproc/ALOS_preproc/ALOS_merge/ALOS_merge.cnormalfile()$sha1$53db8da12fe37b51975f830deeabde3657091d6biv$yxxu-svn-gmtBfjq ]K wipreproc/ALOS_preproc/ALOS_merge/Makefilepreproc/ALOS_preproc/ALOS_mergebranches/5.7/preproc/ALOS_preproc/ALOS_merge/Makefilenormalfile()$sha1$e08d885ab71fe6e402d51144a3c3ac6c7e37e05ez9&fwobbe@f!s K5 e#preproc/ALOS_preproc/ALOS_mergepreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_mergenormaldir()infinityiv$yxxu-svn-gmt9o c5 }#preproc/ALOS_preproc/ALOS_mosaic_ss_2framespreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_mosaic_ss_2framesnormaldir()infinityiv$yxxu-svn-gmt6n c /i#preproc/ALOS_preproc/ALOS_mosaic_ss_2frames/ALOS_mosaic_ss_2frames.cpreproc/ALOS_preproc/ALOS_mosaic_ss_2framesbranches/5.7/preproc/ALOS_preproc/ALOS_mosaic_ss_2frames/ALOS_mosaic_ss_2frames.cnormalfile()$sha1$93a5b98498a25fb05439826327fec66317556bf6iv$yxxu-svn-gmt fm uc i!preproc/ALOS_preproc/ALOS_mosaic_ss_2frames/Makefilepreproc/ALOS_preproc/ALOS_mosaic_ss_2framesbranches/5.7/preproc/ALOS_preproc/ALOS_mosaic_ss_2frames/Makefilenormalfile()$sha1$49ffffc67287629fe8f32f896b4416c7b0a056dacuĩahogreliusfk S5 mipreproc/ALOS_preproc/CMakeLists.txtpreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/CMakeLists.txtnormalfile(svn:eol-style native svn:keywords 31 Author Date Id Rev Revision URL)$sha1$7561776edf3e983b17fbd0ae7332d76147d84d30W%pwessel fKj G5 aipreproc/ALOS_preproc/Makefilepreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/Makefilenormalfile()$sha1$dd7ed2459c2a3b77f92bd8cdbe2d525142fb1c4b:q&7sandwellfMi K5 eipreproc/ALOS_preproc/README.txtpreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/README.txtnormalfile()$sha1$738d049593f6cf4171360c750aac8968ee0dde69z9&fwobbef3h ]5 w#preproc/ALOS_preproc/ALOS_pre_process_SSpreproc/ALOS_preprocbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SSnormaldir()infinityiv$yxxu-svn-gmt&g ] #i#preproc/ALOS_preproc/ALOS_pre_process_SS/swap_ALOS_data_info.cpreproc/ALOS_preproc/ALOS_pre_process_SSbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/swap_ALOS_data_info.cnormalfile()$sha1$4158cdb81499a090412c792e35d0af8d41415ecfiv$yxxu-svn-gmt ff o] ipreproc/ALOS_preproc/ALOS_pre_process_SS/Makefilepreproc/ALOS_preproc/ALOS_pre_process_SSbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/Makefilenormalfile()$sha1$b47ecf4ccc4567a79faaafe88d3a2487721407dez9&fwobbef^e s] #preproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftpreproc/ALOS_preproc/ALOS_pre_process_SSbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftnormaldir()infinityiv$yxxu-svn-gmt+d s i#preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/shift.cpreproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/shift.cnormalfile()$sha1$d24c282d780123a5bbad2f25804a07103116b69civ$yxxu-svn-gmtf5c s 'i#preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/test_shift.cpreproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/test_shift.cnormalfile()$sha1$3358e60f5754d330ecf63adf76ecaf4d9e202fe4iv$yxxu-svn-gmtf(b s ipreproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/Makefilepreproc/ALOS_preproc/ALOS_pre_process_SS/test_shiftbranches/5.7/preproc/ALOS_preproc/ALOS_pre_process_SS/test_shift/Makefilenormalfile()$sha1$d48a2322736c9a687dd56cc8f008543c834698e1z9&fwobbeWf  - , 6 j [E ui#preproc/ALOS_preproc/lib_src/calc_dop.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/calc_dop.cnormalfile()$sha1$d3215049e60f2362b74598bd028fabc9b19873d0iv$yxxu-svn-gmt f wE i#preproc/ALOS_preproc/lib_src/interpolate_ALOS_orbit.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/interpolate_ALOS_orbit.cnormalfile()$sha1$bea601f75b6606f7ae39ec655b56e9ff59340103iv$yxxu-svn-gmt f= _E y#preproc/ALOS_preproc/lib_src/cfft1d_codespreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/cfft1d_codesnormaldir()infinityiv$yxxu-svn-gmt {_ i#preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_fftw.cpreproc/ALOS_preproc/lib_src/cfft1d_codesbranches/5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_fftw.cnormalfile()$sha1$aa971166ffacd30327ccd46ec3936c0049d3f239iv$yxxu-svn-gmtf~ _ i#preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_veclib.cpreproc/ALOS_preproc/lib_src/cfft1d_codesbranches/5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_veclib.cnormalfile()$sha1$a7bc202701e9f33b2967b3df216052708433105fiv$yxxu-svn-gmtf} _ i#preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_fftpack.cpreproc/ALOS_preproc/lib_src/cfft1d_codesbranches/5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_fftpack.cnormalfile()$sha1$2a7500e539be1e132b88ba5b74df8b98bd33ebb4iv$yxxu-svn-gmtBf)| _ %i#preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_veclib031110.cpreproc/ALOS_preproc/lib_src/cfft1d_codesbranches/5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_veclib031110.cnormalfile()$sha1$0e447fcd933b8485752ee116d46b646e2ddc1585iv$yxxu-svn-gmttf{ {_ i#preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_sun4.cpreproc/ALOS_preproc/lib_src/cfft1d_codesbranches/5.7/preproc/ALOS_preproc/lib_src/cfft1d_codes/cfft1d_sun4.cnormalfile()$sha1$7818c1d2156c7dcb55460ac1e1090a42f9031553iv$yxxu-svn-gmtfry cE }i#preproc/ALOS_preproc/lib_src/rng_compress.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/rng_compress.cnormalfile()$sha1$be3611c8a65790a06ec573ea176d66a2bd3f5d96iv$yxxu-svn-gmtf}x mE i#preproc/ALOS_preproc/lib_src/set_ALOS_defaults.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/set_ALOS_defaults.cnormalfile()$sha1$bf08be523af1a11e870d2e69a82cc28b1dd4c58div$yxxu-svn-gmt)fdw UE oi#preproc/ALOS_preproc/lib_src/utils.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/utils.cnormalfile()$sha1$f2a360d889402e5f3a5ad342d86c00d05204960biv$yxxu-svn-gmt flv ]E wi#preproc/ALOS_preproc/lib_src/hermite_c.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/hermite_c.cnormalfile()$sha1$154600fb7f08e0ec3f0aa58dfb300bf204e28ed3iv$yxxu-svn-gmt pfwu gE i#preproc/ALOS_preproc/lib_src/ALOS_ldr_orbit.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/ALOS_ldr_orbit.cnormalfile()$sha1$089619dba241935e716800923189a42d93908491iv$yxxu-svn-gmtJf 5D-&wL!  [ t/ H-    n C '  j ?    f^ :  a 6S :fY5,5,Y,+Y$md5 $e0f7ce31c5b4f69e82b92c99fef59015p+Y$md5 $ffbe2c38e70594d1f91d6ea95965a745+Y$md5 $f64400a787201b85ef377731b964ea89d+Y$md5 $da9e0eed8957b72eff48bd561f14ba65b+Y$md5 $dbfc58d70628c88dd357d04fc1eac148`+Y$md5 $e4159eb8a5cda9e258d420a3de15f291[B)+Y$md5 $ee7a3b9219db2a4b28b7c1d5e6681d9c+Y$md5 $fa27b4658e653c1696b6636e23d4927d+Y$md5 $e939df0e80bfaca837ce4cbb4c59accb+Y$md5 $dbfe4a3f6c35dd84aa22575d6456030e+Y$md5 $e7d9d2730b5fb2c3f7755eb008395b26+Y$md5 $fafacc4a2e0b32559a7b53375189953f+Y$md5 $fbf8d40a7f70ea40f1c412b9a0e906d5+Y$md5 $fa05b1dfbeb3cdf49bb18ca15bb52a2d+Y$md5 $e0b769a0166dd2417fdfa1bb873e7afc+Y$md5 $ee7126cc1965716fbd1af53a596440a5H+Y$md5 $eb579aff731c8de839acffea56327bb7Ra+Y$md5 $e799a99784d174e00e32a2ea50d3b187+Y$md5 $efb506534cd6c6d54126df0e21361091+Y$md5 $ff68e63b34b426d06512672eee7e0f07+Y$md5 $e75c25684550bc8b9abb833e8e238d90+Y$md5 $f8b4b07a23ed8148828f90f4ab9c0453+Y$md5 $df4b925fabaa69f570855b8f4860252f+Y$md5 $ed87b82e7894bbf56531095e173efe7f>+Y$md5 $e1b7240afd63a9a78e45462efb9973d25+Y$md5 $fcf1ae8ddf37ceaf8c786e97b954e1da/+Y$md5 $e0551e7872c33875cb510408373e6262+Y$md5 $df979e818c8183c880796ad97dbd7e3e+Y$md5 $fe1d0c7ff12cb408360912527a812521+Y$md5 $fe0548735bb49fce9f523c661e12e335*Y$md5 $fbd9f9a5cd58fd60cbdadae6f2cf8efb+Y$md5 $fa9d762c88061595b091aa50842b7bd6*Y$md5 $f6dbd1bdf0e3675e1ad756ce8d7029f13+Y$md5 $f457d3b370c9313d26a575efed8de0a2+Y$md5 $f3f0c25a9d75fe5a51df71fcfe834221*Y$md5 $f2827784fe1f94c1c2684e3efffc84cd=*Y$md5 $f27066cdcc9625c6f40715836b2da913 *Y$md5 $f123eca46c271480630372490f05ebad(+Y$md5 $f0363b7b52e567d291ba4f64dfa446b4*Y$md5 $ee4ff4929e0a0180159d9c41f4eb1758h+Y$md5 $ebd5f2d307b17bf3bd3fffa7416090b2*Y$md5 $eb69f0f71944608b3ae77d2631ecc924[+Y$md5 $eb527a13568962200281bf0d268aa369*Y$md5 $eb43e8cec2b038ad173ed190eda6b7d9P*Y$md5 $e99e88e378144cb6c65743354659931a*Y$md5 $e976062d17a3713887129723b7c2f85d++Y$md5 $e8b0eb2f87d970489479113d10c4601b*Y$md5 $e7f3af2f39bba43305b6fbb8f3903e03K+Y$md5 $e7e1f052a74d56bb7730ae03dc823e18*Y$md5 $e6ebbe7ca80b06463e1bad607836bd8f*Y$md5 $e68103abbc50ac760f72dccb4fbc5697o*Y$md5 $e5bfe71004753b1f7a6263e0c72a0b4c+Y$md5 $e440ddc94a312b8cc3b4c9925512db8a+Y$md5 $e240e9f79d3cb46891333234c4838e02*Y$md5 $e1a9b6b75fa86eacebbe54cb2219464d +Y$md5 $e133b98717397d33a3ce04afa605053c+Y$md5 $e0f3d73cd4aea15c496113f61c4b319f*Y$md5 $dfa40ce54f26d7a38132927b6c980581d+Y$md5 $df90f8d60a6e65ebcb1fcdbe036c39ed*Y$md5 $de6c16f1deb4793314585c07b318bac9Q*Y$md5 $dcc4ef2cee358b519294f6bf1c6099a0*Y$md5 $dc1acd23bc35b89dd29393deacbae816I*Y$md5 $dc04a35490bda6b78a985dec88a1dbdcE+Y$md5 $db9fefc15537e2c76049c4eb3f98e29c+Y$md5 $daa9c8ee2f70afa6e69a212808be1654+Y$md5 $da92b1ad51124b8a52d79ddb32abee90*Y$md5 $da6ceb8d6870a0378f284073fe941545u+Y$md5 $da37f4dd8917e65ed28b73f2167bed13    2 H K_s fh YE si#preproc/ALOS_preproc/lib_src/polyfit.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/polyfit.cnormalfile()$sha1$a1f68a44b9b513ef275e00562d9a7f933c6ac200iv$yxxu-svn-gmt Ofn _E yi#preproc/ALOS_preproc/lib_src/rng_expand.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/rng_expand.cnormalfile()$sha1$e50e44aa1d2e47668f1b777ed25ff2483e64bd7aiv$yxxu-svn-gmtfn _E yi#preproc/ALOS_preproc/lib_src/siocomplex.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/siocomplex.cnormalfile()$sha1$845f5aecbbdfde56faadc5ea3e6f830a011b8c9civ$yxxu-svn-gmtkfY  ME gipreproc/ALOS_preproc/lib_src/pt0preproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/pt0normalfile()$sha1$8ff62139a4336b5795368189a6bed806f6822ad6*-AUqksandwell ff  WE qi#preproc/ALOS_preproc/lib_src/swap16.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/swap16.cnormalfile()$sha1$bf36ae92da9f6511a7b95db49f9a789c7d239b9div$yxxu-svn-gmt2fh  YE si#preproc/ALOS_preproc/lib_src/xyz2plh.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/xyz2plh.cnormalfile()$sha1$fcbd6975cec49fe6a56328e578689c0b62c62db7iv$yxxu-svn-gmtfh  YE si#preproc/ALOS_preproc/lib_src/plh2xyz.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/plh2xyz.cnormalfile()$sha1$12ceb578d70baeda37e68a6b7081f641c7701577iv$yxxu-svn-gmt fy  iE i#preproc/ALOS_preproc/lib_src/find_fft_length.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/find_fft_length.cnormalfile()$sha1$b092a090fb0b10914c526aa81b0709e2d7fe4e70iv$yxxu-svn-gmtff WE qi#preproc/ALOS_preproc/lib_src/swap32.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/swap32.cnormalfile()$sha1$3ba87f8710ac954fefcb3f6c3d09a3c0c602baa3iv$yxxu-svn-gmtfi YE si#preproc/ALOS_preproc/lib_src/fftpack.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/fftpack.cnormalfile()$sha1$8d7610a32fe0b84c9ed2bfed44268fab8f6f8135iv$yxxu-svn-gmtfk aE {ipreproc/ALOS_preproc/lib_src/Makefile_origpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/Makefile_orignormalfile()$sha1$ef5bd5e4296dff0f76effff2df0674f8bb7f064bz9&fwobbef qE i#preproc/ALOS_preproc/lib_src/read_ALOS_sarleader.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/read_ALOS_sarleader.cnormalfile()$sha1$5f27f98a2b856f6bd3c3c014b0b7284120346347iv$yxxu-svn-gmtCff WE qi#preproc/ALOS_preproc/lib_src/cfft1d.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/cfft1d.cnormalfile()$sha1$2a7500e539be1e132b88ba5b74df8b98bd33ebb4iv$yxxu-svn-gmtBf oE i#preproc/ALOS_preproc/lib_src/ALOSE_orbits_utils.cpreproc/ALOS_preproc/lib_srcbranches/5.7/preproc/ALOS_preproc/lib_src/ALOSE_orbits_utils.cnormalfile()$sha1$b61937b7b761d60ba2490860762b8406200cdc77iv$yxxu-svn-gmtf *hB% g  J - o  R5wZ=~aC&h\Ni Y$sha1$b7f8aacb9dbde7ae8be4d8dfe8644e0de35f73a5$md5 $9246222c6b0c3bc2ad7fdb854ceb2352\Mi Y$sha1$91b66cf70978a0ca2f2f5491028ccfffaf29e9ebs\$md5 $08ac5e66d660f60bf58b3f619c96f8e0\Li Y$sha1$17f5e13431adbdd4d0e4f882cc7ea128ee34cbc16L$md5 $9aaa561d0f831a3a94f58a2d3cf1e526\Ki Y$sha1$d18685f0ab8ac782e1182bfbd9223b0390b03d7c-$md5 $667a74d8ff54eb4adcac18f91e41f6f2\Ji Y$sha1$af7b873caa52ddff6197bc4280230d0f4b84d0c3+$md5 $b58a993dcd9dff6e952ee098df5a5e03\Ii Y$sha1$c3088c7d129fdd314c94702f36f0468815c3c8d0s$md5 $c33bf966702e624e260f32fe1ffabb9e]Hi Y$sha1$fa5b7fe7b40e032fa46bba0beb105c973ed76350ǿ$md5 $2b1581bd616c8b5a51c676c43489a1f2\Gi Y$sha1$139f9e565345610e467632542c59aeb6f3742d8f$md5 $8f322697d8f66056f9384479e9204c6a\Fi Y$sha1$fce36f238fd52ca990deaa67398a5d35e3baa5c3$md5 $1d550cce6a6138b91bdf2b5ee8444971\Ei Y$sha1$0bd5555bf079c1fc479b8341691ce519f9e504c2$md5 $bade6640b5163ec55ac1ec551d9e37ed\Di Y$sha1$c78eecaa7e76b7092b61ec9fdc268b5a82156e2a"t$md5 $eb579aff731c8de839acffea56327bb7\Ci Y$sha1$3edc99b52447d1c186a39404b7ec3954a479f0a5L$md5 $4ab0b4681c299e5d87e2e8eafd456eab]Bi Y$sha1$cd580f5dccc11e0b785ef162743371c9f7c80aa9$md5 $38bfa9af2da00f22b09c499678fb3f6f\Ai Y$sha1$c64fd39058d1a0398006c6cbb31665aa60943400$md5 $54a718f0d77d7e79e5e0ccf1b7fe37df\@i Y$sha1$081238c5154cfa5f92a264f3bc86a54f88806007$md5 $ee7a3b9219db2a4b28b7c1d5e6681d9c\?i Y$sha1$a3748a849e7e65d53e7dc1e2aa09e54c917e76e5D$md5 $758bfdf68ed67329fb496f0920aadf7e\>i Y$sha1$6bf72277365f0d993d475fff2f9a3b1f6c7e7568+$md5 $cedc033b1a6f80c3c4fa948b7a562d9d\=i Y$sha1$ae9ddf9c393c0c68281be0c98144c59f56c22509$md5 $14a91e00faae39d25f910b3ab75787c5\<i Y$sha1$16c240fc62c796bf5c0a6371b09cac21f6dbc53a $md5 $7ce1146374af0c17d68b82f6004bb754\;i Y$sha1$9513672e2b6785c612edf72f5a5caa978266a212$md5 $ce5f2bb6854d3393f861101e473f91db\:i Y$sha1$29af8a76c58ed193055d39ce2ee936821bc63f07$md5 $5ea0ac9ac2d10e9355c755cf2c7595f4\9i Y$sha1$5c163a9896e8987ac17b8f70a3e5b140b2efa317,o$md5 $ab8714059125f63ce41b4e26c30e189e\8i Y$sha1$70aa0523ea322a9536975a2fbeb3963194f38f62$md5 $b71ec15e85f11e20f41d38a9457cafc6\7i Y$sha1$29053a1bb0205796e501f5d514b448c5d5b13f8c-k$md5 $fa27b4658e653c1696b6636e23d4927d\6i Y$sha1$13ec8c550d5aca9844bd120807a45f7f6bd308bf6O$md5 $1f85849a5176efd5af4104eba1a8f727\5i Y$sha1$aba1ff16e3a529bc518dd1cc0553f47a263f62a7$md5 $1eedfb521534c8ee3cc529288d82995e\4i Y$sha1$aaf08adcca55d8db1a0080eb5346a0f5c119fab4 $md5 $c5b0023b68b9798f693441e4ddab25ba\3i Y$sha1$ee5aa94a2091680acc5855d183688ddd5c3c1f46$md5 $610fb996c2c2b00b72862ef9c7378d92\2i Y$sha1$076a332b2901a759d19741814b1799ce9e01dc7c$md5 $9d2837a25403c2dacd8a2a58c75940ac\1i Y$sha1$fd8fb192e2ff677ad4c7aab8ec00224a4e7c6ee3$md5 $e939df0e80bfaca837ce4cbb4c59accb\0i Y$sha1$81fcfad8a15f969b65d94b1ce2b462e41c847bdds$md5 $6711b78cf0adf93dcf53ecbda02bc7af\/i Y$sha1$225fd9924ac56658a8e65ce53ae466e08e3b466a $md5 $c15d1c322d02663d209c8c8e41949896\.i Y$sha1$249e96c078021fe0ae4d278dffb1b764eef15ca6$md5 $2528f4a4b4db636dfe8d4401991f7f76\-i Y$sha1$25b7606e45717b2317519bd45a5dfb894bd1c6819$md5 $dbfe4a3f6c35dd84aa22575d6456030e\,i Y$sha1$a1f68a44b9b513ef275e00562d9a7f933c6ac200 O$md5 $4924cce437c2813673c9052a146a4a69\+i Y$sha1$e50e44aa1d2e47668f1b777ed25ff2483e64bd7a$md5 $189c8f20d6baf05497910ddfa56a3e44\*i Y$sha1$845f5aecbbdfde56faadc5ea3e6f830a011b8c9ck$md5 $0c4c3d9595884768c07166429e123f73\)i Y$sha1$8ff62139a4336b5795368189a6bed806f6822ad6 $md5 $34783b716beb390db1809db7fc374a52\(i Y$sha1$bf36ae92da9f6511a7b95db49f9a789c7d239b9d2$md5 $85ae5d700851be13a21702fe8a6ed849\'i Y$sha1$fcbd6975cec49fe6a56328e578689c0b62c62db7$md5 $e7d9d2730b5fb2c3f7755eb008395b26\&i Y$sha1$12ceb578d70baeda37e68a6b7081f641c7701577 $md5 $b08c27aedeaa3ea026a02ce53c658d4a\%i Y$sha1$b092a090fb0b10914c526aa81b0709e2d7fe4e70$md5 $127bc477f7b9ec445c1a663e0c702461 FA k# I g e  COyT# - % z K Os*b|}P9 n&gi{C3 epreproc/ENVI_preproc/lib_src/read_ENVI_orb.c5 ipreproc/ENVI_preproc/scripts/dump_time_envi.plxJ preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_typconv.cR) Qpreproc/ENVI_preproc/ENVI_baseline:9 qpreproc/ENVI_preproc/ENVI_baseline/ENVI_baseline.c82 cpreproc/ENVI_preproc/ENVI_baseline/Makefile9< wpreproc/ENVI_preproc/ENVI_baseline/ENVI_llt2rat_sub.c70 _preproc/ENVI_preproc/ENVI_decode/Makefile<' Mpreproc/ENVI_preproc/ENVI_decode>2 cpreproc/ERS_preproc/ers_line_fixer/Makefile) Qpreproc/ERS_preproc/ers_line_fixer# Epreproc/ERS_preproc/Makefile 3preproc/ERS_preproc7 mpreproc/ENVI_preproc/ENVI_decode/asa_im_decode.c=, Wpreproc/ERS_preproc/include/SARtape.hk" Cpreproc/ERS_preproc/includeo: spreproc/ERS_preproc/ers_line_fixer/ers_line_fixer.l: spreproc/ERS_preproc/ers_line_fixer/ers_line_fixer.ci, Wpreproc/ENVI_preproc/lib_src/Makefilei(7 mpreproc/ERS_preproc/include/sarleader_platform.hn2 cpreproc/ERS_preproc/include/sarleader_fdr.hi2 cpreproc/ERS_preproc/include/sarleader_dss.hg, Wpreproc/ERS_preproc/include/sardata.hl/ ]preproc/ERS_preproc/include/data_param.hd7"5 ipreproc/ERS_preproc/include/write_fdr_varseg.hh5 ipreproc/ERS_preproc/include/write_fdr_fixseg.hf. [preproc/ERS_preproc/include/write_dss.hm( Opreproc/ERS_preproc/include/soi.he# Epreproc/ENVI_preproc/lib_src4 gpreproc/ENVI_preproc/lib_src/ENVI_ldr_orbit.cF preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dsd.c[G preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dddb.hS 0. [preproc/ERS_preproc/read_data_file_ccrs3 epreproc/ERS_preproc/include/write_platform.hj# Epreproc/ENVI_preproc/scriptsy; upreproc/ENVI_preproc/scripts/ENVI_SLC_pre_process.inw7 mpreproc/ENVI_preproc/scripts/ENVI_pre_process.inv6 kpreproc/ENVI_preproc/scripts/virgin_envisat.PRMu0 _preproc/ENVI_preproc/scripts/find_auxi.plt6 kpreproc/ENVI_preproc/scripts/dump_orbit_envi.plsC$% Ipreproc/ENVI_preproc/ENVI_lookq. [preproc/ENVI_preproc/ENVI_look/Makefilep1 apreproc/ENVI_preproc/ENVI_look/ENVI_look.co $ Gpreproc/ENVI_preproc/Makefile~( Opreproc/ENVI_preproc/ENVI_llt2ratm1 apreproc/ENVI_preproc/ENVI_llt2rat/Makefilel7 mpreproc/ENVI_preproc/ENVI_llt2rat/ENVI_llt2rat.ckI preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_record.haH preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_field.c`J preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_product.c_G preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_swap.hHG preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_swap.cEI preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_string.hFI preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_string.cCI preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_record.c]K preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_ptrarray.hZK preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_ptrarray.cUH preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_param.hWH preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_param.cQG preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_msph.h\G preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_msph.cXH preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_field.hBG preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dump.cVF preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dsd.h^7 mpreproc/ERS_preproc/read_data_file_ccrs/Makefile % v}x|zw 4 )6 I 6 7 Q  1 @ e ?  o @ 9M E_preproc/ENVI_preproc/scriptspreproc/ENVI_preproc/scripts/find_auxi.pltS Ekpreproc/ENVI_preproc/scriptspreproc/ENVI_preproc/scripts/dump_orbit_envi.plsM I[preproc/ENVI_preproc/ENVI_lookpreproc/ENVI_preproc/ENVI_look/MakefilepP Iapreproc/ENVI_preproc/ENVI_lookpreproc/ENVI_preproc/ENVI_look/ENVI_look.coS Oapreproc/ENVI_preproc/ENVI_llt2ratpreproc/ENVI_preproc/ENVI_llt2rat/MakefilelY Ompreproc/ENVI_preproc/ENVI_llt2ratpreproc/ENVI_preproc/ENVI_llt2rat/ENVI_llt2rat.ck| u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_msph.h\| u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_msph.cX~ upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_record.ha upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_product.c_| u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_swap.cE~ upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_string.hF~ upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_string.cC~ upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_record.c] upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_ptrarray.hZ upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_ptrarray.cU| u preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_swap.hH upreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_typconv.cR\ Qqpreproc/ENVI_preproc/ENVI_baselinepreproc/ENVI_preproc/ENVI_baseline/ENVI_baseline.c8_ Qwpreproc/ENVI_preproc/ENVI_baselinepreproc/ENVI_preproc/ENVI_baseline/ENVI_llt2rat_sub.c7Q M_preproc/ENVI_preproc/ENVI_decodepreproc/ENVI_preproc/ENVI_decode/Makefile M5 g#preproc/ENVI_preproc/ENVI_decodepreproc/ENVI_preprocbranches/5.7/preproc/ENVI_preproc/ENVI_decodenormaldir()infinityiv$yxxu-svn-gmt ^ & Q  c*&x >4V u %i#preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dump.cpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcbranches/5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_dump.cnormalfile()$sha1$0096769df2f4b3a9ab61a6b8a6f4eae44f191da7Osxxu-svn-gmt;fR6W u 'i#preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_param.hpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcbranches/5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/src/epr_param.hnormalfile()$sha1$c3a95c36b74a65851c955bcecb9784001586f6ddOsxxu-svn-gmthf) !;snaphu/srcsnaphu/src/snaphu_cs2.c@* !=snaphu/srcsnaphu/src/snaphu_cost.cB% !3snaphu/srcsnaphu/src/snaphu.h?% !3snaphu/srcsnaphu/src/snaphu.c<% !3snaphu/srcsnaphu/src/MakefileG+ !?snaphu/srcsnaphu/src/CMakeLists.txtF/ +=snaphu/man/man1snaphu/man/man1/snaphu.1L, !Asnaphu/mansnaphu/man/snaphu_man1.txtJ- !Csnaphu/mansnaphu/man/snaphu_man1.htmlN! !+snaphu/mansnaphu/man/man1M3 'Isnaphu/configsnaphu/config/snaphu.conf.full84 'Ksnaphu/configsnaphu/config/snaphu.conf.brief9 !snaphusnaphu/srcH !snaphusnaphu/manO 'snaphusnaphu/config: 'snaphusnaphu/READMEPE ;Ypreproc/TSX_preproc/srcpreproc/TSX_preproc/src/make_slc_tsx.c ? ;Mpreproc/TSX_preproc/srcpreproc/TSX_preproc/src/Makefile2 3;preproc/TSX_preprocpreproc/TSX_preproc/src!2 3;preproc/TSX_preprocpreproc/TSX_preproc/lib6 3Cpreproc/TSX_preprocpreproc/TSX_preproc/include7 3Epreproc/TSX_preprocpreproc/TSX_preproc/Makefile"E8 3Gpreproc/S1A_preprocpreproc/S1A_preproc/src_swathK GYpreproc/S1A_preproc/src_swathpreproc/S1A_preproc/src_swath/MakefileQ Gepreproc/S1A_preproc/src_swathpreproc/S1A_preproc/src_swath/make_slc_s1a.c97 3Epreproc/S1A_preprocpreproc/S1A_preproc/Makefile ]?SD`& p A  q I &YZ 5|WY$6gy5Y  { S %   w W 4  n O + - Ypreproc/S1A_preproc/src_swath/Makefile3 epreproc/S1A_preproc/src_swath/make_slc_s1a.c2 cpreproc/S1A_preproc/src_orbit/ext_orb_s1a.c$ Gpreproc/S1A_preproc/src_orbit0 _preproc/S1A_preproc/src_assembly/Makefile7 mpreproc/S1A_preproc/src_assembly/assemble_tops.c' Mpreproc/S1A_preproc/src_assembly' Mpreproc/S1A_preproc/lib/Makefile$ Gpreproc/S1A_preproc/lib/xml.c ;preproc/S1A_preproc/lib. [preproc/S1A_preproc/src_stitch/Makefile3 epreproc/S1A_preproc/src_stitch/merge_swath.c3 epreproc/S1A_preproc/src_stitch/stitch_tops.c% Ipreproc/S1A_preproc/src_stitch0 _preproc/S1A_preproc/src_spec_div/Makefile< wpreproc/S1A_preproc/src_spec_div/spectral_diversity.c' Mpreproc/S1A_preproc/src_spec_div- Ypreproc/S1A_preproc/include/lib_defs.h+ Upreproc/S1A_preproc/include/stateV.h2 cpreproc/S1A_preproc/include/lib_defs.h.orig) Qpreproc/S1A_preproc/include/xmlC.h* Spreproc/S1A_preproc/include/include" Cpreproc/S1A_preproc/include 3preproc/S1A_preproc. [preproc/ERS_preproc/read_sarleader_dpaf7 mpreproc/ERS_preproc/read_sarleader_ccrs/testdataxE preproc/ERS_preproc/read_sarleader_ccrs/read_sarleader_ccrs.cv> {preproc/ERS_preproc/read_sarleader_ccrs/make_prm_ccrs.cu7 mpreproc/ERS_preproc/read_sarleader_ccrs/Makefiley. [preproc/ERS_preproc/read_sarleader_ccrszE preproc/ERS_preproc/read_data_file_dpaf/read_data_file_dpaf.c7 mpreproc/ERS_preproc/read_data_file_dpaf/Makefile. [preproc/ERS_preproc/read_data_file_dpaf$ Gpreproc/S1A_preproc/src_swath# Epreproc/S1A_preproc/Makefile# Epreproc/S1A_preproc/src_tops1 apreproc/S1A_preproc/src_tops/Makefile_orig, Wpreproc/S1A_preproc/src_tops/Makefile3 epreproc/S1A_preproc/src_tops/s1a-aux-cal.xml3 epreproc/S1A_preproc/src_tops/make_s1a_tops.c8 opreproc/S1A_preproc/src_tops/make_s1a_tops_6par.c- Ypreproc/S1A_preproc/src_orbit/Makefile =snaphu/src/snaphu_util.cE =snaphu/src/snaphu_tile.cD! Asnaphu/src/snaphu_solver.cC 9snaphu/src/snaphu_io.cA# Esnaphu/src/snaphu_cs2types.h=# Esnaphu/src/snaphu_cs2parse.c> ;snaphu/src/snaphu_cs2.c@ =snaphu/src/snaphu_cost.cB 3snaphu/src/snaphu.h? 3snaphu/src/snaphu.c< 3snaphu/src/MakefileG  ?snaphu/src/CMakeLists.txtF !snaphu/srcH! Asnaphu/man/snaphu_man1.txtJ" Csnaphu/man/snaphu_man1.htmlN =snaphu/man/man1/snaphu.1L +snaphu/man/man1M !snaphu/manO% Isnaphu/config/snaphu.conf.full8& Ksnaphu/config/snaphu.conf.brief9 'snaphu/config: 'snaphu/READMEP  snaphuQ- Ypreproc/TSX_preproc/src/make_slc_tsx.c ' Mpreproc/TSX_preproc/src/Makefile ;preproc/TSX_preproc/src! ;preproc/TSX_preproc/lib" Cpreproc/TSX_preproc/include# Epreproc/TSX_preproc/Makefile" 3preproc/TSX_preproc#- Ypreproc/RS2_preproc/src/make_slc_rs2.c]' Mpreproc/RS2_preproc/src/Makefile^ ;preproc/RS2_preproc/src_ ;preproc/RS2_preproc/lib[" Cpreproc/RS2_preproc/includeZ# Epreproc/RS2_preproc/Makefile` 3preproc/RS2_preproca/ ]preproc/ERS_preproc/utility/makefile_sunq. [preproc/ERS_preproc/utility/ccrs2dpaf.cr" Cpreproc/ERS_preproc/utilitys- Ypreproc/ERS_preproc/scripts/virgin.PRM4 gpreproc/ERS_preproc/scripts/dump_orbit_ers.pl/ ]preproc/ERS_preproc/scripts/check_PRC.pl9 qpreproc/ERS_preproc/scripts/ERS_pre_process_0310145 ipreproc/ERS_preproc/scripts/ERS_pre_process.in" Cpreproc/ERS_preproc/scriptsE preproc/ERS_preproc/read_sarleader_dpaf/read_sarleader_dpaf.cD preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf_orig.c~D preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf_kang.c}> {preproc/ERS_preproc/read_sarleader_dpaf/make_prm_dpaf.c|7 mpreproc/ERS_preproc/read_sarleader_dpaf/Makefile q >H]--0q I5 c#preproc/ENVI_preproc/ENVI_lookpreproc/ENVI_preprocbranches/5.7/preproc/ENVI_preproc/ENVI_looknormaldir()infinityiv$yxxu-svn-gmte yU i#preproc/ENVI_preproc/ENVI_SLC_decode/envi_slc_decode.cpreproc/ENVI_preproc/ENVI_SLC_decodebranches/5.7/preproc/ENVI_preproc/ENVI_SLC_decode/envi_slc_decode.cnormalfile()$sha1$7de7217d1a0cf530271f8775956f0f6d75b77eb4iv$yxxu-svn-gmtfTd mU #preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3preproc/ENVI_preproc/ENVI_SLC_decodebranches/5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3normaldir()infinity4xxu-svn-gmthc um #preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcpreproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3branches/5.7/preproc/ENVI_preproc/ENVI_SLC_decode/epr_api-2.3/srcnormaldir()infinity4xxu-svn-gmtgp [I uipreproc/ENVI_preproc/ENVI_look/Makefilepreproc/ENVI_preproc/ENVI_lookbranches/5.7/preproc/ENVI_preproc/ENVI_look/Makefilenormalfile()$sha1$33ca41e46b7b09179c475761650cb0134f45b444z9&fwobbefro aI {i#preproc/ENVI_preproc/ENVI_look/ENVI_look.cpreproc/ENVI_preproc/ENVI_lookbranches/5.7/preproc/ENVI_preproc/ENVI_look/ENVI_look.cnormalfile()$sha1$034b4d51b2119a850a58fc6f82a65454f57b6189iv$yxxu-svn-gmtBNf%m O5 i#preproc/ENVI_preproc/ENVI_llt2ratpreproc/ENVI_preprocbranches/5.7/preproc/ENVI_preproc/ENVI_llt2ratnormaldir()infinityiv$yxxu-svn-gmtpl aO {ipreproc/ENVI_preproc/ENVI_llt2rat/Makefilepreproc/ENVI_preproc/ENVI_llt2ratbranches/5.7/preproc/ENVI_preproc/ENVI_llt2rat/Makefilenormalfile()$sha1$1185fed2c9952e881e19888312162a87ddbe3e8bz9&fwobbeufk mO i#preproc/ENVI_preproc/ENVI_llt2rat/ENVI_llt2rat.cpreproc/ENVI_preproc/ENVI_llt2ratbranches/5.7/preproc/ENVI_preproc/ENVI_llt2rat/ENVI_llt2rat.cnormalfile()$sha1$bf5ea1b833e937ffd1839ca6fb2829a6d53b3d61iv$yxxu-svn-gmt8f+i U5 o#preproc/ENVI_preproc/ENVI_SLC_decodepreproc/ENVI_preprocbranches/5.7/preproc/ENVI_preproc/ENVI_SLC_decodenormaldir()infinity4xxu-svn-gmth gU 4i#preproc/ENVI_preproc/ENVI_SLC_decode/Makefilepreproc/ENVI_preproc/ENVI_SLC_decodebranches/5.7/preproc/ENVI_preproc/ENVI_SLC_decode/Makefilenormalfile(svn:executable 1 *)$sha1$7366c62aecf4a139834d58fb9de2a6b8a80f8d53TM@Jxxu-svn-gmt"f'g }U 4i#preproc/ENVI_preproc/ENVI_SLC_decode/envisat_dump_data.cpreproc/ENVI_preproc/ENVI_SLC_decodebranches/5.7/preproc/ENVI_preproc/ENVI_SLC_decode/envisat_dump_data.cnormalfile(svn:executable 1 *)$sha1$b86899d0eb972fc2c5d482759ffc8c7506c3d6d8iv$yxxu-svn-gmtf,f U 4i#preproc/ENVI_preproc/ENVI_SLC_decode/envisat_dump_header.cpreproc/ENVI_preproc/ENVI_SLC_decodebranches/5.7/preproc/ENVI_preproc/ENVI_SLC_decode/envisat_dump_header.cnormalfile(svn:executable 1 *)$sha1$60759c6de63a00f20f889766c11129e9fd5ef7dbiv$yxxu-svn-gmt"$f /}Q&'vJ n C  i >  d 8 _ 3 S X - +Y$md5 $7323acf38404c8e60f1ceeb7708b46ff+Y$md5 $72ecc5a51f6258cfdea40fd5b8b7b436+Y$md5 $807cab94b8d21f2a356ae534bf1ce8e7*Y$md5 $83369a93c3654524c33c3a9166ba57c0"+Y$md5 $828b97eb87a67f4b44fde7771beda48d*Y$md5 $8228137da6428e260b215262c00a0008+Y$md5 $81ca7211849688088aaaf0ebfca0ee19*Y$md5 $813235bb75aeaa631e00692b9a907d7b]+Y$md5 $80f2d214d16a5841905bf7943af49dfeX+Y$md5 $80e24ffdaf3d5cbd7cf445115410db89+Y$md5 $80d5912d9ac25a4d8fa57d1232e56cf4+Y$md5 $808452607598d34d3950c3a24121ea61*Y$md5 $807a07e5b5e9b7030b6a48d82cf07f11+Y$md5 $807599acf2d21fbfbfe7233ecae84cff*Y$md5 $80593e3ff0926f3a40ac129d6615f484+Y$md5 $8040e073ee8069e87d2e792859c3c9a9*Y$md5 $7fbf76375a1c828fe2eef777ce832091`*Y$md5 $7f076aa66011bd8de220b1997a3a3890+Y$md5 $7ec83045700441b962e4b19582b64b80+Y$md5 $7dc7376a3f4f8d006130c114d7cf3bf6*Y$md5 $7d79acc31e21499f9b008b175ed1bd8dk+Y$md5 $7cf14e79ae01cbb81ce955d03c60117e;+Y$md5 $7ce1146374af0c17d68b82f6004bb754+Y$md5 $7c2112b67e7562b1ebcf918c543448e3_*Y$md5 $7b87b0bd12845ada9ca201cd3ce3ee09^*Y$md5 $7aed21b5ac4fa31b459c39a6dcfc857aY*Y$md5 $7a5d5bfd8488afe10f2e0e5aa8ee188bj+Y$md5 $799f5e71ffa1124282b5782aa8363d38 *Y$md5 $795d6ea43a960f1aa189e6bcb6873a35f+Y$md5 $790ef512a2a7ebf8f956cb21c149d1f0+Y$md5 $782bd3d1c908c1b9d8b5678092230a6fc*Y$md5 $778a8c2ad1e6aca23722b55b0babba59X+Y$md5 $77825ebf4e47f3d6aad7486e09413dd0+Y$md5 $76172815bdb437ea4ea081de74246a9bj+Y$md5 $75991142d16f91bf6dc7981d44497e63t+Y$md5 $758bfdf68ed67329fb496f0920aadf7e+Y$md5 $753aa1eb6680c422f6e84b001d92d15e{+Y$md5 $75320d50234677d4f6e5ac73c3946cd8\+Y$md5 $74ac48274b8504b2c492c301b347d55e+Y$md5 $7442288f01cb4baa87594a58a91f8de3l+Y$md5 $7370f22a0db3703e27a8fe620fcb72b9+Y$md5 $72d63c76f76907bab45dbd3e2bb441d1*Y$md5 $727a77fc280bf7f973897c099ea65d16 +Y$md5 $722e6cdc51298fd6647c5d902cb3c4cd+Y$md5 $720eaaaa8221e3203b719a8ff0606de7*Y$md5 $6f9f941276869c1f7b74ce354c91e73aA+Y$md5 $6f9dead16dd5843d01e1a7743ed49ba7n ]|O N R B < 0#T\a|a]]a WE qipreproc/ENVI_preproc/lib_src/Makefilepreproc/ENVI_preproc/lib_srcbranches/5.7/preproc/ENVI_preproc/lib_src/Makefilenormalfile()$sha1$9d05afa376253f4bd747b9db228029ec64b49083z9&fwobbe1fw gE i#preproc/ENVI_preproc/lib_src/ENVI_ldr_orbit.cpreproc/ENVI_preproc/lib_srcbranches/5.7/preproc/ENVI_preproc/lib_src/ENVI_ldr_orbit.cnormalfile()$sha1$2832393b367ae52a6236cd371d6a02c4282fbbe4iv$yxxu-svn-gmtft eE i#preproc/ENVI_preproc/lib_src/read_ENVI_orb.cpreproc/ENVI_preproc/lib_srcbranches/5.7/preproc/ENVI_preproc/lib_src/read_ENVI_orb.cnormalfile()$sha1$2d091d0edf9e838d77e54e00008ce458e860f06biv$yxxu-svn-gmtfK~ G5 aipreproc/ENVI_preproc/Makefilepreproc/ENVI_preprocbranches/5.7/preproc/ENVI_preproc/Makefilenormalfile()$sha1$cbbb7a5c31bf9d2f93d51284656a6af25b281dad_{sandwellf} E5 _#preproc/ENVI_preproc/ASA_CATpreproc/ENVI_preprocbranches/5.7/preproc/ENVI_preproc/ASA_CATnormaldir()infinityiv$yxxu-svn-gmta| WE qipreproc/ENVI_preproc/ASA_CAT/Makefilepreproc/ENVI_preproc/ASA_CATbranches/5.7/preproc/ENVI_preproc/ASA_CAT/Makefilenormalfile()$sha1$466f870d5dffa631458f9daf9e59a2348335f12fz9&fwobbefi{ YE si#preproc/ENVI_preproc/ASA_CAT/asa_cat.cpreproc/ENVI_preproc/ASA_CATbranches/5.7/preproc/ENVI_preproc/ASA_CAT/asa_cat.cnormalfile()$sha1$5869c372ce1668cd893aff4feaf90a928934d76fiv$yxxu-svn-gmtfy E5 _preproc/ENVI_preproc/scriptspreproc/ENVI_preprocbranches/5.7/preproc/ENVI_preproc/scriptsnormaldir()infinityjw1Tosandwellx iE 4ipreproc/ENVI_preproc/scripts/dump_time_envi.plpreproc/ENVI_preproc/scriptsbranches/5.7/preproc/ENVI_preproc/scripts/dump_time_envi.plnormalfile(svn:executable 1 *)$sha1$b12b8e49a3e534b148f0727291a0a0569d514142*-AUqksandwell fw uE ipreproc/ENVI_preproc/scripts/ENVI_SLC_pre_process.inpreproc/ENVI_preproc/scriptsbranches/5.7/preproc/ENVI_preproc/scripts/ENVI_SLC_pre_process.innormalfile()$sha1$6a5b8c885cc9972daa5259bd2b6d873c8a4f1657OTsandwell f v mE 4ipreproc/ENVI_preproc/scripts/ENVI_pre_process.inpreproc/ENVI_preproc/scriptsbranches/5.7/preproc/ENVI_preproc/scripts/ENVI_pre_process.innormalfile(svn:executable 1 *)$sha1$cc745c466c8613247ac8d9473d6213fa08271783*-AUqksandwellfxu kE ipreproc/ENVI_preproc/scripts/virgin_envisat.PRMpreproc/ENVI_preproc/scriptsbranches/5.7/preproc/ENVI_preproc/scripts/virgin_envisat.PRMnormalfile()$sha1$24efebe721455b82094968d50a0024903c7d5defjw1Tosandwell|f}t _E y4ipreproc/ENVI_preproc/scripts/find_auxi.plpreproc/ENVI_preproc/scriptsbranches/5.7/preproc/ENVI_preproc/scripts/find_auxi.plnormalfile(svn:executable 1 *)$sha1$cf1174a6327ae3c2bef13321889bcea117da5654*-AUqksandwell$f s kE 4ipreproc/ENVI_preproc/scripts/dump_orbit_envi.plpreproc/ENVI_preproc/scriptsbranches/5.7/preproc/ENVI_preproc/scripts/dump_orbit_envi.plnormalfile(svn:executable 1 *)$sha1$35b4d9b517369cc59639eea331179b896444e069*-AUqksandwellf %%6 D ] r 06<<pkuls 9 Sipreproc/CMakeLists.txtpreprocbranches/5.7/preproc/CMakeLists.txtnormalfile(svn:keywords 31 Author Date Id Rev Revision URL svn:eol-style native)$sha1$6d4fc8a2575f1b9c7d446d0d4160e779c6666bd4|:k}fwobbef~ 5 O#preproc/ENVI_preprocpreprocbranches/5.7/preproc/ENVI_preprocnormaldir()infinity4xxu-svn-gmt E5 _#preproc/ENVI_preproc/lib_srcpreproc/ENVI_preprocbranches/5.7/preproc/ENVI_preproc/lib_srcnormaldir()infinityiv$yxxu-svn-gmtv eI i#preproc/S1A_preproc/src_stitch/merge_swath.cpreproc/S1A_preproc/src_stitchbranches/5.7/preproc/S1A_preproc/src_stitch/merge_swath.cnormalfile()$sha1$c538d098d5a048990b5be44afafaca9511c5a508iv$yxxu-svn-gmt)fv eI i#preproc/S1A_preproc/src_stitch/stitch_tops.cpreproc/S1A_preproc/src_stitchbranches/5.7/preproc/S1A_preproc/src_stitch/stitch_tops.cnormalfile()$sha1$5c46f720b4e9ebeba7e3247f324093c1745790c7iv$yxxu-svn-gmtf" M3 g#preproc/S1A_preproc/src_spec_divpreproc/S1A_preprocbranches/5.7/preproc/S1A_preproc/src_spec_divnormaldir()infinityiv$yxxu-svn-gmtm _M yipreproc/S1A_preproc/src_spec_div/Makefilepreproc/S1A_preproc/src_spec_divbranches/5.7/preproc/S1A_preproc/src_spec_div/Makefilenormalfile()$sha1$eac09d8cd3ac420ffc1a88762e0a010b212ecd6dz9&fwobbexf  wM i#preproc/S1A_preproc/src_spec_div/spectral_diversity.cpreproc/S1A_preproc/src_spec_divbranches/5.7/preproc/S1A_preproc/src_spec_div/spectral_diversity.cnormalfile()$sha1$c8a1479188f2885843a61911834dbeddb76fb313iv$yxxu-svn-gmt,f  C3 ]#preproc/S1A_preproc/includepreproc/S1A_preprocbranches/5.7/preproc/S1A_preproc/includenormaldir()infinityiv$yxxu-svn-gmtg  YC si#preproc/S1A_preproc/include/lib_defs.hpreproc/S1A_preproc/includebranches/5.7/preproc/S1A_preproc/include/lib_defs.hnormalfile()$sha1$4d67d78dcedb48c258a91b5ba0c99ab4a6865eb4iv$yxxu-svn-gmtfc  UC oi#preproc/S1A_preproc/include/stateV.hpreproc/S1A_preproc/includebranches/5.7/preproc/S1A_preproc/include/stateV.hnormalfile()$sha1$f7f94114e5c6b7cf9c99735b6675f59fbd5ed1eaiv$yxxu-svn-gmtfn  cC }ipreproc/S1A_preproc/include/lib_defs.h.origpreproc/S1A_preproc/includebranches/5.7/preproc/S1A_preproc/include/lib_defs.h.orignormalfile()$sha1$be343e235dcb522497eaef92e166af0928925ac6*-AUqksandwellf_  QC ki#preproc/S1A_preproc/include/xmlC.hpreproc/S1A_preproc/includebranches/5.7/preproc/S1A_preproc/include/xmlC.hnormalfile()$sha1$93a66a9c75e1df5d78c8811ca7ce5d868df95748iv$yxxu-svn-gmtfc SC m.ipreproc/S1A_preproc/include/includepreproc/S1A_preproc/includebranches/5.7/preproc/S1A_preproc/include/includenormalfile(svn:special 1 *)$sha1$320a7b7770bad33ac70df79df26cc0aced26a9b5*-AUqksandwell B% g  J - o  P3uX\i Y$sha1$8637978c9e80041114e494fb7d732ba27e63d918$$md5 $a482fa6e4319106918b7361fa9cd0e67\i Y$sha1$6e645d2310faaa48ec01f5d5e1688ae8a0b6a3ee $md5 $b0aa9f5f306963e4523add2102c07f6e\i Y$sha1$0f6791daa6bd73abee8e5f7ad580965d3eabc48b $md5 $677459b0f5d3a572ef92d0195ea64049\i Y$sha1$2e2d702f163cdde842d460dfef3c2e6c040148d5($md5 $67f6d4f4e26319345389fe7cd5b17ea9\i Y$sha1$70d694054cea4de5df182e84087cd1c8b2bba9bf/"$md5 $34fb66f85c43586e692fb370d849431b\i Y$sha1$c11e98a188b9beddae6e2cc7f16a18e7d3434596u$md5 $5f76b28dc97a25ce1fee4f62df4d1e1f\i Y$sha1$24023b593de46ad28391e4181d7d646b4e568f34*$md5 $2dc6cd07969d39928628a5f63c6770f2\ i Y$sha1$a90078a8b94098f16a5be611c826648455107d3a$md5 $2cb9a65eb76352a5bb2cdef3e227b556\ i Y$sha1$1241c3e9f6f3e37716a710c34eff52e1f5b01d8d$md5 $15731151ea1b42ad3d909f242e118ca2\ i Y$sha1$d2b27265039d98678e5a53f9c0b919b880ff6ee67$md5 $8a8811364c21b6cc9cc8c94adaa1fab5] i Y$sha1$c4520ee8b21674c560c644eff31bd810704e52e5%$md5 $8b36cab44c75290cc22d65048c1f53df] i Y$sha1$6d1bbf1707ebaa83378cdc832d7ade083640581a $md5 $be7b8a45b7fd5e083059ed528843b488\i Y$sha1$75c5cafa459428490545fe113dd712fcd2ff20cb|\$md5 $e799a99784d174e00e32a2ea50d3b187\i Y$sha1$7e244155638d2eca84603567ff89801e663ffe10s$md5 $13bda94fa5fa81fd61cb82517f1c0c13\i Y$sha1$cd993d31ebfe2e74bfac66fc89d8c2dbe7825362=$md5 $7323acf38404c8e60f1ceeb7708b46ff\i Y$sha1$d2b829cbd8275df4e5ff6f6bccf7c9c306bdb58c}$md5 $6cecdc5a9b3fb140435564f28de33408\i Y$sha1$6739c2a13fc61b70a084098ad50bb4fbb61bb683;$md5 $c1571f91f467a281cf74af682d8ba184\i Y$sha1$8cb93ae0284f7fb51fbe2843fc46c17b5d8b9886$md5 $321e8e9394e2894d62133334e6f9226e\i Y$sha1$e762cfa76b90c30cbde14951d59f37a44c395ab9_^$md5 $5698ccf7179f0fffbc080cf4a5d4e089\i Y$sha1$b6e4b339606f1b3dc82416cc6eac0906e50a8f43$md5 $efb506534cd6c6d54126df0e21361091\i Y$sha1$c538d098d5a048990b5be44afafaca9511c5a508)$md5 $b73f74850f3619c09d8993e38396a93d\i Y$sha1$5c46f720b4e9ebeba7e3247f324093c1745790c7$md5 $1698f51b2f23b7fc6699b30d0a37541f\~i Y$sha1$eac09d8cd3ac420ffc1a88762e0a010b212ecd6dx$md5 $72ecc5a51f6258cfdea40fd5b8b7b436\}i Y$sha1$c8a1479188f2885843a61911834dbeddb76fb313,$md5 $807cab94b8d21f2a356ae534bf1ce8e7\|i Y$sha1$4d67d78dcedb48c258a91b5ba0c99ab4a6865eb4$md5 $cae839b2a61c7d0fd2c82022e84f0e47\{i Y$sha1$f7f94114e5c6b7cf9c99735b6675f59fbd5ed1ea$md5 $cd53f530d8609243c3673af599af8a85\zi Y$sha1$be343e235dcb522497eaef92e166af0928925ac6$md5 $35e59e5580b04a48ba96f67f7e690aae\yi Y$sha1$93a66a9c75e1df5d78c8811ca7ce5d868df95748$md5 $b082517fb0e078621f79ece02f4c1106   > Zc v 5FVK* E3 _i#preproc/S1A_preproc/Makefilepreproc/S1A_preprocbranches/5.7/preproc/S1A_preproc/Makefilenormalfile()$sha1$a90078a8b94098f16a5be611c826648455107d3a?xxu-svn-gmtf) E3 _#preproc/S1A_preproc/src_topspreproc/S1A_preprocbranches/5.7/preproc/S1A_preproc/src_topsnormaldir()infinityq{ BNAxxu-svn-gmtk( aE {ipreproc/S1A_preproc/src_tops/Makefile_origpreproc/S1A_preproc/src_topsbranches/5.7/preproc/S1A_preproc/src_tops/Makefile_orignormalfile()$sha1$1241c3e9f6f3e37716a710c34eff52e1f5b01d8dz9&fwobbefa' WE qipreproc/S1A_preproc/src_tops/Makefilepreproc/S1A_preproc/src_topsbranches/5.7/preproc/S1A_preproc/src_tops/Makefilenormalfile()$sha1$d2b27265039d98678e5a53f9c0b919b880ff6ee6z9&fwobbe7fu& eE i#preproc/S1A_preproc/src_tops/s1a-aux-cal.xmlpreproc/S1A_preproc/src_topsbranches/5.7/preproc/S1A_preproc/src_tops/s1a-aux-cal.xmlnormalfile()$sha1$c4520ee8b21674c560c644eff31bd810704e52e5W6Gxxu-svn-gmt%fu% eE i#preproc/S1A_preproc/src_tops/make_s1a_tops.cpreproc/S1A_preproc/src_topsbranches/5.7/preproc/S1A_preproc/src_tops/make_s1a_tops.cnormalfile()$sha1$6d1bbf1707ebaa83378cdc832d7ade083640581aq{ BNAxxu-svn-gmt f$ oE i#preproc/S1A_preproc/src_tops/make_s1a_tops_6par.cpreproc/S1A_preproc/src_topsbranches/5.7/preproc/S1A_preproc/src_tops/make_s1a_tops_6par.cnormalfile()$sha1$75c5cafa459428490545fe113dd712fcd2ff20cbiv$yxxu-svn-gmt|\f" G3 a#preproc/S1A_preproc/src_orbitpreproc/S1A_preprocbranches/5.7/preproc/S1A_preproc/src_orbitnormaldir()infinityiv$yxxu-svn-gmtr _M yi#preproc/S1A_preproc/src_assembly/Makefilepreproc/S1A_preproc/src_assemblybranches/5.7/preproc/S1A_preproc/src_assembly/Makefilenormalfile()$sha1$d2b829cbd8275df4e5ff6f6bccf7c9c306bdb58c?ʻ xxu-svn-gmt}f mM i#preproc/S1A_preproc/src_assembly/assemble_tops.cpreproc/S1A_preproc/src_assemblybranches/5.7/preproc/S1A_preproc/src_assembly/assemble_tops.cnormalfile()$sha1$6739c2a13fc61b70a084098ad50bb4fbb61bb683iv$yxxu-svn-gmt;f ;3 U#preproc/S1A_preproc/libpreproc/S1A_preprocbranches/5.7/preproc/S1A_preproc/libnormaldir()infinityiv$yxxu-svn-gmtR M; gipreproc/S1A_preproc/lib/Makefilepreproc/S1A_preproc/libbranches/5.7/preproc/S1A_preproc/lib/Makefilenormalfile()$sha1$8cb93ae0284f7fb51fbe2843fc46c17b5d8b9886z9&fwobbefQ G; ai#preproc/S1A_preproc/lib/xml.cpreproc/S1A_preproc/libbranches/5.7/preproc/S1A_preproc/lib/xml.cnormalfile()$sha1$e762cfa76b90c30cbde14951d59f37a44c395ab9iv$yxxu-svn-gmt_^f I3 c#preproc/S1A_preproc/src_stitchpreproc/S1A_preprocbranches/5.7/preproc/S1A_preproc/src_stitchnormaldir()infinityiv$yxxu-svn-gmtg [I uipreproc/S1A_preproc/src_stitch/Makefilepreproc/S1A_preproc/src_stitchbranches/5.7/preproc/S1A_preproc/src_stitch/Makefilenormalfile()$sha1$b6e4b339606f1b3dc82416cc6eac0906e50a8f43z9&fwobbefi! YG si#preproc/S1A_preproc/src_orbit/Makefilepreproc/S1A_preproc/src_orbitbranches/5.7/preproc/S1A_preproc/src_orbit/Makefilenormalfile()$sha1$7e244155638d2eca84603567ff89801e663ffe10V@;\xxu-svn-gmtsfs  cG }i#preproc/S1A_preproc/src_orbit/ext_orb_s1a.cpreproc/S1A_preproc/src_orbitbranches/5.7/preproc/S1A_preproc/src_orbit/ext_orb_s1a.cnormalfile()$sha1$cd993d31ebfe2e74bfac66fc89d8c2dbe7825362iv$yxxu-svn-gmt=f" M3 g#preproc/S1A_preproc/src_assemblypreproc/S1A_preprocbranches/5.7/preproc/S1A_preproc/src_assemblynormaldir()infinityiv$yxxu-svn-gmt &TTe1b. ` - ] ) [ ' Y % U "3i$sha1$8637978c9e80041114e494fb7d732ba27e63d9183i$sha1$9a55c1593d35ea929d31cb1b97200a08175182bcS2i$sha1$99b648bc3c18d0c118b42b9f9924aeb6ffb3209b=2i$sha1$9958c9ee3517881fe6aa2e9f52dd20219b9eed27)2i$sha1$99022608e5592a030b219d2fd564feb805ffb902O3i$sha1$98fe09d116b1790ac45d0952b89aff7585a27bf43i$sha1$98de84f2158bd840acdacd6b3c325f7a0cf502b583i$sha1$9819a3b1df794d61817b5d27848b80aaec9521f23i$sha1$97e788abfaf2bd7c24c7cc75984c77d019e8846d3i$sha1$978a7c042148e228274e3473984eb208850ff8752i$sha1$960ab21caa38d6166e511d8a9e35c034affb798cA3i$sha1$95f813c0c22eba1ccf47fd9e1a5310f12abe3b46f2i$sha1$95e2b19f0082257b1cd5dbf1692902cb52e7ef1633i$sha1$95bc9958e183e888a72c6262a6159498766736b9 3i$sha1$9513672e2b6785c612edf72f5a5caa978266a2122i$sha1$93fc089ba3f359ba52ead69906d84e5a7144bdaf82i$sha1$93d6c5b688548553347623add05e5495f26e6a4d3i$sha1$93a66a9c75e1df5d78c8811ca7ce5d868df957483i$sha1$93a5b98498a25fb05439826327fec66317556bf63i$sha1$932ef34389003a30638a9a296427793a09bcbcfc 3i$sha1$92ff7e646824fab2cd56ebf7e3825956855569f4H3i$sha1$9205eb41f541fdd5c600d0edfcda02e45d58f1c6n3i$sha1$91dc2ac745a07b048b3cffbf2e39644dc03749cc3i$sha1$91b66cf70978a0ca2f2f5491028ccfffaf29e9eb2i$sha1$913497a74526dac3d151d204d8da8213a127da7c3i$sha1$8ff62139a4336b5795368189a6bed806f6822ad62i$sha1$8f77290bd3addeeb9dd694d78289a931e791830c{2i$sha1$8f59a4c1a393d057511131811d2a06ca5e165c57 3i$sha1$8e97193bfb1ce1db499ab72f803805cd0c59f7433i$sha1$8db6631947a55001b1a1fc5fe4f53cc7a2bb79ceV3i$sha1$8d7610a32fe0b84c9ed2bfed44268fab8f6f81353i$sha1$8cf49108c7f88b9ca6df80ce63c41a8b868c14b73i$sha1$8cb93ae0284f7fb51fbe2843fc46c17b5d8b98862i$sha1$8c5216a06eb2a2248ec6da598170bea996f89b6c&3i$sha1$8bf46aad081af8b63d8a0188558a7a45a9bca4882i$sha1$8b3a7038d68be407365156e04744b2f0c0408e3a3i$sha1$872e8c16ce5e80be97ea3dace77dab71ff958d3f3i$sha1$86f3256e64cf9193824cef6b5108bb378e35a96bw  &  4& ) I 1 ! ;iREADME.txtbranches/5.7/README.txtnormalfile()$sha1$70d694054cea4de5df182e84087cd1c8b2bba9bfVpwessel/"f.b7  %zbranches/5.7normaldir(svn:mergeinfo 36 /branches/5.3:439-469 /trunk:211-357)infinity\9sandwell()#5 ! ;4iinstall-shbranches/5.7/install-shnormalfile(svn:executable 1 *)$sha1$8637978c9e80041114e494fb7d732ba27e63d918*-AUqksandwell$f\4 ) CiCMakeLists.txtbranches/5.7/CMakeLists.txtnormalfile(svn:keywords 31 Author Date Id Rev Revision URL svn:eol-style native)$sha1$6e645d2310faaa48ec01f5d5e1688ae8a0b6a3ee|:k}fwobbe f 3  7iMakefilebranches/5.7/Makefilenormalfile()$sha1$0f6791daa6bd73abee8e5f7ad580965d3eabc48bVpwessel fX2 % ?iREADME.CMakebranches/5.7/README.CMakenormalfile(svn:keywords 31 Author Date Id Rev Revision URL svn:eol-style native)$sha1$2e2d702f163cdde842d460dfef3c2e6c040148d5w9SVfwobbeWfu, eG i#preproc/S1A_preproc/src_swath/make_slc_s1a.cpreproc/S1A_preproc/src_swathbranches/5.7/preproc/S1A_preproc/src_swath/make_slc_s1a.cnormalfile()$sha1$24023b593de46ad28391e4181d7d646b4e568f34iv$yxxu-svn-gmt*f. G3 a#preproc/S1A_preproc/src_swathpreproc/S1A_preprocbranches/5.7/preproc/S1A_preproc/src_swathnormaldir()infinityiv$yxxu-svn-gmt]0  5#preprocbranches/5.7/preprocnormaldir()infinity4xxu-svn-gmt|/ 3 M#preproc/S1A_preprocpreprocbranches/5.7/preproc/S1A_preprocnormaldir()infinityq{ BNAxxu-svn-gmti- YG si#preproc/S1A_preproc/src_swath/Makefilepreproc/S1A_preproc/src_swathbranches/5.7/preproc/S1A_preproc/src_swath/Makefilenormalfile()$sha1$c11e98a188b9beddae6e2cc7f16a18e7d3434596V@;\xxu-svn-gmtufGMTSAR_V5.7/.svn/wc.db-journal000644 015705 000000 00000000000 13507227512 017007 0ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/tmp/000755 015705 000000 00000000000 13505462014 015225 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/61/000755 015705 000000 00000000000 13505462013 016507 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/95/000755 015705 000000 00000000000 13505462014 016517 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/59/000755 015705 000000 00000000000 13505462013 016516 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/92/000755 015705 000000 00000000000 13505462014 016514 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/0c/000755 015705 000000 00000000000 13505462013 016563 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/66/000755 015705 000000 00000000000 13505462014 016515 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/3e/000755 015705 000000 00000000000 13505462014 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/50/000755 015705 000000 00000000000 13505462013 016505 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/68/000755 015705 000000 00000000000 13505462013 016516 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/57/000755 015705 000000 00000000000 13505462013 016514 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/3b/000755 015705 000000 00000000000 13505462014 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/6f/000755 015705 000000 00000000000 13505462013 016574 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/03/000755 015705 000000 00000000000 13505462014 016504 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/9e/000755 015705 000000 00000000000 13505462014 016577 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/04/000755 015705 000000 00000000000 13505462013 016504 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/6a/000755 015705 000000 00000000000 13505462014 016570 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/32/000755 015705 000000 00000000000 13505462014 016506 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/35/000755 015705 000000 00000000000 13505462014 016511 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/69/000755 015705 000000 00000000000 13505462014 016520 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/3c/000755 015705 000000 00000000000 13505462013 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/56/000755 015705 000000 00000000000 13505462013 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/51/000755 015705 000000 00000000000 13505462013 016506 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/3d/000755 015705 000000 00000000000 13505462014 016570 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/58/000755 015705 000000 00000000000 13505462014 016516 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/67/000755 015705 000000 00000000000 13505462014 016516 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/0b/000755 015705 000000 00000000000 13505462014 016563 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/93/000755 015705 000000 00000000000 13505462014 016515 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/0e/000755 015705 000000 00000000000 13505462014 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/60/000755 015705 000000 00000000000 13505462014 016507 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/34/000755 015705 000000 00000000000 13505462014 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/5a/000755 015705 000000 00000000000 13505462014 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/5f/000755 015705 000000 00000000000 13505462014 016574 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/33/000755 015705 000000 00000000000 13505462014 016507 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/05/000755 015705 000000 00000000000 13505462014 016506 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/9d/000755 015705 000000 00000000000 13505462014 016576 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/9c/000755 015705 000000 00000000000 13505462013 016574 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/02/000755 015705 000000 00000000000 13505462014 016503 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/a4/000755 015705 000000 00000000000 13505462014 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/a3/000755 015705 000000 00000000000 13505462014 016565 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/b5/000755 015705 000000 00000000000 13505462013 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/b2/000755 015705 000000 00000000000 13505462014 016565 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/d9/000755 015705 000000 00000000000 13505462014 016576 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/ad/000755 015705 000000 00000000000 13505462014 016646 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/bb/000755 015705 000000 00000000000 13505462014 016645 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/d7/000755 015705 000000 00000000000 13505462013 016573 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/d0/000755 015705 000000 00000000000 13505462013 016564 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/be/000755 015705 000000 00000000000 13505462014 016650 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/b3/000755 015705 000000 00000000000 13505462014 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/df/000755 015705 000000 00000000000 13505462014 016653 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/da/000755 015705 000000 00000000000 13505462013 016645 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/b4/000755 015705 000000 00000000000 13505462014 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/a2/000755 015705 000000 00000000000 13505462013 016563 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/a5/000755 015705 000000 00000000000 13505462014 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/bd/000755 015705 000000 00000000000 13505462014 016647 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/d1/000755 015705 000000 00000000000 13505462014 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/bc/000755 015705 000000 00000000000 13505462013 016645 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/ae/000755 015705 000000 00000000000 13505462014 016647 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/d8/000755 015705 000000 00000000000 13505462014 016575 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/ab/000755 015705 000000 00000000000 13505462014 016644 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/e5/000755 015705 000000 00000000000 13505462014 016573 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/e2/000755 015705 000000 00000000000 13505462013 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/f4/000755 015705 000000 00000000000 13505462013 016572 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/f3/000755 015705 000000 00000000000 13505462014 016572 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/eb/000755 015705 000000 00000000000 13505462014 016650 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/c7/000755 015705 000000 00000000000 13505462014 016573 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/c0/000755 015705 000000 00000000000 13505462014 016564 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/ee/000755 015705 000000 00000000000 13505462014 016653 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/c9/000755 015705 000000 00000000000 13505462014 016575 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/fc/000755 015705 000000 00000000000 13505462014 016652 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/fd/000755 015705 000000 00000000000 13505462014 016653 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/f2/000755 015705 000000 00000000000 13505462014 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/f5/000755 015705 000000 00000000000 13505462013 016573 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/cf/000755 015705 000000 00000000000 13505462014 016652 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/ca/000755 015705 000000 00000000000 13505462013 016644 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/e4/000755 015705 000000 00000000000 13505462013 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/fe/000755 015705 000000 00000000000 13505462014 016654 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/c8/000755 015705 000000 00000000000 13505462014 016574 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/fb/000755 015705 000000 00000000000 13505462014 016651 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/ed/000755 015705 000000 00000000000 13505462013 016651 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/c1/000755 015705 000000 00000000000 13505462014 016565 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/c6/000755 015705 000000 00000000000 13505462014 016572 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/20/000755 015705 000000 00000000000 13505462013 016502 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/18/000755 015705 000000 00000000000 13505462014 016512 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/27/000755 015705 000000 00000000000 13505462014 016512 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/4b/000755 015705 000000 00000000000 13505462013 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/11/000755 015705 000000 00000000000 13505462014 016503 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/7d/000755 015705 000000 00000000000 13505462014 016574 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/29/000755 015705 000000 00000000000 13505462014 016514 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/7c/000755 015705 000000 00000000000 13505462013 016572 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/16/000755 015705 000000 00000000000 13505462014 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/73/000755 015705 000000 00000000000 13505462014 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/87/000755 015705 000000 00000000000 13505462013 016517 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/80/000755 015705 000000 00000000000 13505462013 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/74/000755 015705 000000 00000000000 13505462013 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/1a/000755 015705 000000 00000000000 13505462013 016562 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/28/000755 015705 000000 00000000000 13505462014 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/17/000755 015705 000000 00000000000 13505462014 016511 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/7b/000755 015705 000000 00000000000 13505462013 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/8f/000755 015705 000000 00000000000 13505462014 016577 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/7e/000755 015705 000000 00000000000 13505462014 016575 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/10/000755 015705 000000 00000000000 13505462013 016501 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/19/000755 015705 000000 00000000000 13505462014 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/4c/000755 015705 000000 00000000000 13505462013 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/26/000755 015705 000000 00000000000 13505462013 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/4d/000755 015705 000000 00000000000 13505462014 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/75/000755 015705 000000 00000000000 13505462014 016515 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/81/000755 015705 000000 00000000000 13505462014 016512 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/86/000755 015705 000000 00000000000 13505462014 016517 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/44/000755 015705 000000 00000000000 13505462013 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/2a/000755 015705 000000 00000000000 13505462014 016564 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/2f/000755 015705 000000 00000000000 13505462014 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/43/000755 015705 000000 00000000000 13505462014 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/6b/000755 015705 000000 00000000000 13505462014 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/07/000755 015705 000000 00000000000 13505462014 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/00/000755 015705 000000 00000000000 13505462014 016501 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/6e/000755 015705 000000 00000000000 13505462014 016574 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/9a/000755 015705 000000 00000000000 13505462014 016573 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/36/000755 015705 000000 00000000000 13505462013 016511 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/5c/000755 015705 000000 00000000000 13505462014 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/09/000755 015705 000000 00000000000 13505462013 016511 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/5d/000755 015705 000000 00000000000 13505462013 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/31/000755 015705 000000 00000000000 13505462014 016505 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/91/000755 015705 000000 00000000000 13505462014 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/65/000755 015705 000000 00000000000 13505462014 016514 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/62/000755 015705 000000 00000000000 13505462013 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/96/000755 015705 000000 00000000000 13505462013 016517 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/3a/000755 015705 000000 00000000000 13505462014 016565 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/98/000755 015705 000000 00000000000 13505462014 016522 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/53/000755 015705 000000 00000000000 13505462014 016511 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/30/000755 015705 000000 00000000000 13505462014 016504 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/5e/000755 015705 000000 00000000000 13505462013 016572 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/5b/000755 015705 000000 00000000000 13505462014 016570 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/37/000755 015705 000000 00000000000 13505462014 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/08/000755 015705 000000 00000000000 13505462014 016511 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/6d/000755 015705 000000 00000000000 13505462014 016573 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/01/000755 015705 000000 00000000000 13505462013 016501 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/06/000755 015705 000000 00000000000 13505462014 016507 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/6c/000755 015705 000000 00000000000 13505462013 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/99/000755 015705 000000 00000000000 13505462013 016522 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/52/000755 015705 000000 00000000000 13505462014 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/55/000755 015705 000000 00000000000 13505462014 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/97/000755 015705 000000 00000000000 13505462014 016521 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/63/000755 015705 000000 00000000000 13505462014 016512 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/0f/000755 015705 000000 00000000000 13505462014 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/0a/000755 015705 000000 00000000000 13505462013 016561 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/bf/000755 015705 000000 00000000000 13505462014 016651 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/d3/000755 015705 000000 00000000000 13505462014 016570 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/d4/000755 015705 000000 00000000000 13505462014 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/ba/000755 015705 000000 00000000000 13505462014 016644 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/a7/000755 015705 000000 00000000000 13505462014 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/b8/000755 015705 000000 00000000000 13505462014 016573 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/b1/000755 015705 000000 00000000000 13505462014 016564 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/dd/000755 015705 000000 00000000000 13505462014 016651 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/dc/000755 015705 000000 00000000000 13505462014 016650 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/b6/000755 015705 000000 00000000000 13505462014 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/a9/000755 015705 000000 00000000000 13505462014 016573 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/d5/000755 015705 000000 00000000000 13505462013 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/d2/000755 015705 000000 00000000000 13505462014 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/aa/000755 015705 000000 00000000000 13505462014 016643 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/af/000755 015705 000000 00000000000 13505462014 016650 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/b7/000755 015705 000000 00000000000 13505462014 016572 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/db/000755 015705 000000 00000000000 13505462013 016646 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/a8/000755 015705 000000 00000000000 13505462014 016572 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/de/000755 015705 000000 00000000000 13505462014 016652 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/b0/000755 015705 000000 00000000000 13505462014 016563 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/a1/000755 015705 000000 00000000000 13505462014 016563 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/ef/000755 015705 000000 00000000000 13505462014 016654 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/c3/000755 015705 000000 00000000000 13505462014 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/c4/000755 015705 000000 00000000000 13505462014 016570 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/ea/000755 015705 000000 00000000000 13505462014 016647 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/cd/000755 015705 000000 00000000000 13505462014 016650 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/cc/000755 015705 000000 00000000000 13505462014 016647 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/f0/000755 015705 000000 00000000000 13505462014 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/f7/000755 015705 000000 00000000000 13505462014 016576 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/e8/000755 015705 000000 00000000000 13505462014 016576 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/fa/000755 015705 000000 00000000000 13505462014 016650 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/c5/000755 015705 000000 00000000000 13505462014 016571 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/c2/000755 015705 000000 00000000000 13505462013 016565 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/f6/000755 015705 000000 00000000000 13505462013 016574 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/e9/000755 015705 000000 00000000000 13505462014 016577 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/f1/000755 015705 000000 00000000000 13505462013 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/e7/000755 015705 000000 00000000000 13505462014 016575 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/cb/000755 015705 000000 00000000000 13505462014 016646 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/ce/000755 015705 000000 00000000000 13505462013 016650 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/e0/000755 015705 000000 00000000000 13505462014 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/46/000755 015705 000000 00000000000 13505462014 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/2c/000755 015705 000000 00000000000 13505462014 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/79/000755 015705 000000 00000000000 13505462014 016521 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/2d/000755 015705 000000 00000000000 13505462014 016567 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/41/000755 015705 000000 00000000000 13505462014 016506 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/83/000755 015705 000000 00000000000 13505462013 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/77/000755 015705 000000 00000000000 13505462014 016517 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/70/000755 015705 000000 00000000000 13505462014 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/1e/000755 015705 000000 00000000000 13505462013 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/84/000755 015705 000000 00000000000 13505462014 016515 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/4a/000755 015705 000000 00000000000 13505462014 016566 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/24/000755 015705 000000 00000000000 13505462014 016507 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/23/000755 015705 000000 00000000000 13505462014 016506 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/8d/000755 015705 000000 00000000000 13505462014 016575 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/15/000755 015705 000000 00000000000 13505462014 016507 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/12/000755 015705 000000 00000000000 13505462014 016504 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/8c/000755 015705 000000 00000000000 13505462014 016574 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/85/000755 015705 000000 00000000000 13505462014 016516 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/1d/000755 015705 000000 00000000000 13505462013 016565 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/71/000755 015705 000000 00000000000 13505462014 016511 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/1c/000755 015705 000000 00000000000 13505462013 016564 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/49/000755 015705 000000 00000000000 13505462014 016516 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/40/000755 015705 000000 00000000000 13505462013 016504 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/2e/000755 015705 000000 00000000000 13505462014 016570 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/2b/000755 015705 000000 00000000000 13505462014 016565 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/47/000755 015705 000000 00000000000 13505462013 016513 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/78/000755 015705 000000 00000000000 13505462014 016520 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/8b/000755 015705 000000 00000000000 13505462013 016572 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/13/000755 015705 000000 00000000000 13505462014 016505 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/7f/000755 015705 000000 00000000000 13505462013 016575 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/7a/000755 015705 000000 00000000000 13505462013 016570 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/8e/000755 015705 000000 00000000000 13505462013 016575 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/22/000755 015705 000000 00000000000 13505462014 016505 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/25/000755 015705 000000 00000000000 13505462014 016510 5ustar00sandwellwheel000000 000000 GMTSAR_V5.7/.svn/pristine/25/2532afbec6a26749373814e8ffb5dbd94331cc3c.svn-base000444 015705 000000 00000007231 13505462013 025673 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ERS.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 1 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 200m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0.12 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/300/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 65 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/.svn/pristine/25/25b7606e45717b2317519bd45a5dfb894bd1c681.svn-base000444 015705 000000 00000016471 13505462014 025404 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" /* #define OUTFILE stdout */ /***************************************************************************/ void put_sio_struct(struct PRM prm, FILE *OUTFILE) { /* set by set_ALOS_defaults */ if (prm.num_valid_az != NULL_INT) fprintf(OUTFILE, "num_valid_az = %d \n", prm.num_valid_az); if (prm.nrows != NULL_INT) fprintf(OUTFILE, "nrows = %d \n", prm.nrows); if (prm.first_line != NULL_INT) fprintf(OUTFILE, "first_line = %d \n", prm.first_line); if (strncmp(prm.deskew, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "deskew = %s \n", prm.deskew); if (prm.caltone != NULL_DOUBLE) fprintf(OUTFILE, "caltone = %lf \n", prm.caltone); if (prm.st_rng_bin != NULL_INT) fprintf(OUTFILE, "st_rng_bin = %d \n", prm.st_rng_bin); if (strncmp(prm.iqflip, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "Flip_iq = %s \n", prm.iqflip); if (strncmp(prm.offset_video, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "offset_video = %s \n", prm.offset_video); if (prm.az_res != NULL_DOUBLE) fprintf(OUTFILE, "az_res = %lf \n", prm.az_res); if (prm.nlooks != NULL_INT) fprintf(OUTFILE, "nlooks = %d \n", prm.nlooks); if (prm.chirp_ext != NULL_INT) fprintf(OUTFILE, "chirp_ext = %d \n", prm.chirp_ext); if (strncmp(prm.srm, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "scnd_rng_mig = %s \n", prm.srm); if (prm.rhww != NULL_DOUBLE) fprintf(OUTFILE, "rng_spec_wgt = %lf \n", prm.rhww); if (prm.pctbw != NULL_DOUBLE) fprintf(OUTFILE, "rm_rng_band = %lf \n", prm.pctbw); if (prm.pctbwaz != NULL_DOUBLE) fprintf(OUTFILE, "rm_az_band = %lf \n", prm.pctbwaz); if (prm.rshift != NULL_INT) fprintf(OUTFILE, "rshift = %d \n", prm.rshift); if (prm.ashift != NULL_INT) fprintf(OUTFILE, "ashift = %d \n", prm.ashift); if (prm.stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "stretch_r = %lf \n", prm.stretch_r); if (prm.stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "stretch_a = %lf \n", prm.stretch_a); if (prm.a_stretch_r != NULL_DOUBLE) fprintf(OUTFILE, "a_stretch_r = %lf \n", prm.a_stretch_r); if (prm.a_stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "a_stretch_a = %lf \n", prm.a_stretch_a); if (prm.first_sample != NULL_INT) fprintf(OUTFILE, "first_sample = %d \n", prm.first_sample); if (prm.SC_identity != NULL_INT) fprintf(OUTFILE, "SC_identity = %d \n", prm.SC_identity); if (prm.fs != NULL_DOUBLE) fprintf(OUTFILE, "rng_samp_rate = %lf \n", prm.fs); /* from read_ALOS_data */ if (strncmp(prm.input_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "input_file = %s \n", prm.input_file); if (prm.num_rng_bins != NULL_INT) fprintf(OUTFILE, "num_rng_bins = %d \n", prm.num_rng_bins); if (prm.bytes_per_line != NULL_INT) fprintf(OUTFILE, "bytes_per_line = %d \n", prm.bytes_per_line); if (prm.good_bytes != NULL_INT) fprintf(OUTFILE, "good_bytes_per_line = %d \n", prm.good_bytes); if (prm.prf != NULL_DOUBLE) fprintf(OUTFILE, "PRF = %lf \n", prm.prf); if (prm.pulsedur != NULL_DOUBLE) fprintf(OUTFILE, "pulse_dur = %e \n", prm.pulsedur); if (prm.near_range != NULL_DOUBLE) fprintf(OUTFILE, "near_range = %lf \n", prm.near_range); if (prm.num_lines != NULL_INT) fprintf(OUTFILE, "num_lines = %d \n", prm.num_lines); if (prm.num_patches != NULL_INT) fprintf(OUTFILE, "num_patches = %d \n", prm.num_patches); if (prm.SC_clock_start != NULL_DOUBLE) fprintf(OUTFILE, "SC_clock_start = %16.10lf \n", prm.SC_clock_start); if (prm.SC_clock_stop != NULL_DOUBLE) fprintf(OUTFILE, "SC_clock_stop = %16.10lf \n", prm.SC_clock_stop); if (prm.clock_start != NULL_DOUBLE) fprintf(OUTFILE, "clock_start = %16.12lf \n", prm.clock_start); if (prm.clock_stop != NULL_DOUBLE) fprintf(OUTFILE, "clock_stop = %16.12lf \n", prm.clock_stop); if (strncmp(prm.led_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "led_file = %s \n", prm.led_file); /* from read_ALOS_ldrfile */ if (strncmp(prm.date, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "date = %.6s \n", prm.date); if (strncmp(prm.orbdir, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "orbdir = %.1s \n", prm.orbdir); if (strncmp(prm.lookdir, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "lookdir = %.1s \n", prm.lookdir); if (prm.lambda != NULL_DOUBLE) fprintf(OUTFILE, "radar_wavelength = %lg \n", prm.lambda); if (prm.chirp_slope != NULL_DOUBLE) fprintf(OUTFILE, "chirp_slope = %lg \n", prm.chirp_slope); if (prm.fs != NULL_DOUBLE) fprintf(OUTFILE, "rng_samp_rate = %lf \n", prm.fs); if (prm.xmi != NULL_DOUBLE) fprintf(OUTFILE, "I_mean = %lg \n", prm.xmi); if (prm.xmq != NULL_DOUBLE) fprintf(OUTFILE, "Q_mean = %lg \n", prm.xmq); if (prm.vel != NULL_DOUBLE) fprintf(OUTFILE, "SC_vel = %lf \n", prm.vel); if (prm.RE != NULL_DOUBLE) fprintf(OUTFILE, "earth_radius = %lf \n", prm.RE); if (prm.ra != NULL_DOUBLE) fprintf(OUTFILE, "equatorial_radius = %lf \n", prm.ra); if (prm.rc != NULL_DOUBLE) fprintf(OUTFILE, "polar_radius = %lf \n", prm.rc); if (prm.ht != NULL_DOUBLE) fprintf(OUTFILE, "SC_height = %lf \n", prm.ht); if (prm.ht_start != NULL_DOUBLE) fprintf(OUTFILE, "SC_height_start = %lf \n", prm.ht_start); if (prm.ht_end != NULL_DOUBLE) fprintf(OUTFILE, "SC_height_end = %lf \n", prm.ht_end); if (prm.fd1 != NULL_DOUBLE) fprintf(OUTFILE, "fd1 = %lf \n", prm.fd1); if (prm.fdd1 != NULL_DOUBLE) fprintf(OUTFILE, "fdd1 = %12.8lf \n", prm.fdd1); if (prm.fddd1 != NULL_DOUBLE) fprintf(OUTFILE, "fddd1 = %lf \n", prm.fddd1); /* from calc_baseline */ /* if (prm.rshift != NULL_INT) fprintf(OUTFILE, "rshift = %d \n",prm.rshift); if (prm.ashift != NULL_INT) fprintf(OUTFILE, "ashift = %d\n",prm.ashift); */ if (prm.sub_int_r != NULL_DOUBLE) fprintf(OUTFILE, "sub_int_r = %f \n", prm.sub_int_r); if (prm.sub_int_a != NULL_DOUBLE) fprintf(OUTFILE, "sub_int_a = %f \n", prm.sub_int_a); if (prm.bpara != NULL_DOUBLE) fprintf(OUTFILE, "B_parallel = %f \n", prm.bpara); if (prm.bperp != NULL_DOUBLE) fprintf(OUTFILE, "B_perpendicular = %f \n", prm.bperp); if (prm.baseline_start != NULL_DOUBLE) fprintf(OUTFILE, "baseline_start = %f \n", prm.baseline_start); if (prm.alpha_start != NULL_DOUBLE) fprintf(OUTFILE, "alpha_start = %f \n", prm.alpha_start); if (prm.baseline_end != NULL_DOUBLE) fprintf(OUTFILE, "baseline_end = %f \n", prm.baseline_end); if (prm.alpha_end != NULL_DOUBLE) fprintf(OUTFILE, "alpha_end = %f \n", prm.alpha_end); /* from sarp */ if (strncmp(prm.SLC_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "SLC_file = %s \n", prm.SLC_file); if (strncmp(prm.dtype, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "dtype = %s \n", prm.dtype); if (prm.SLC_scale != NULL_DOUBLE) fprintf(OUTFILE, "SLC_scale = %f \n", prm.SLC_scale); } /***************************************************************************/ GMTSAR_V5.7/.svn/pristine/25/25940f59434c85ed7d218a78143ee90f7f6df420.svn-base000444 015705 000000 00000015367 13505462014 025427 0ustar00sandwellwheel000000 000000 /* * $Id: epr_param.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" /** * Creates a new element (pair 'name-value') for the parameter table. * * @param param_name the name of the parameter, * @param param_value the value of this parameter, * @return the pointer at this element * or NULL if an error occured. */ EPR_SParamElem* epr_create_param_elem(const char* param_name, int param_value) { EPR_SParamElem* param_elem = NULL; /* LINE_LENGTH=+02241 -1 / LINES_PER_TIE_PT=+064 +1 = */ param_elem = (EPR_SParamElem*) calloc(1, sizeof (EPR_SParamElem)); if (param_elem == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_field_info: out of memory"); return NULL; } param_elem->param_name = epr_clone_string(param_name); param_elem->param_value = param_value; return param_elem; } EPR_SPtrArray* epr_create_param_table() { EPR_SPtrArray* param_table = NULL; param_table = epr_create_ptr_array(16); return param_table; } /** * Frees the memory allocated by the given param_table. * *

After calling this function the give record_info pointer gets * invalid and should not be used anymore. * * @param param_table the table to be released, if NULL * the function immediately returns */ void epr_free_param_table(EPR_SPtrArray* param_table) { EPR_SParamElem* param_elem = NULL; int param_index = 0; if (param_table == NULL) return; for (param_index = 0; param_index < (int)param_table->length; param_index++) { param_elem = (EPR_SParamElem*)epr_get_ptr_array_elem_at(param_table, param_index); epr_free_param_elem(param_elem); } epr_free_ptr_array(param_table); } /** * Frees the memory allocated by the given param_elem. * *

After calling this function the give record_info pointer gets * invalid and should not be used anymore. * * @param param_table the table to be released, if NULL * the function immediately returns */ void epr_free_param_elem(EPR_SParamElem* param_elem) { if (param_elem == NULL) return; epr_free_string(param_elem->param_name); param_elem->param_name = NULL; param_elem->param_value = 0; free(param_elem); return; } int epr_set_dyn_dddb_params(EPR_SProductId* product_id) { const EPR_SField* field; const EPR_SField* product_field; char* tmp; EPR_SParamElem* param_elem = NULL; uint line_length = 0; uint num_tie_points_across = 0; uint ntpa = 0; product_field = epr_get_field(product_id->mph_record, "PRODUCT"); tmp = epr_sub_string((char*)product_field->elems, 0, 3); /* MERIS */ if (strcmp(EPR_ENVISAT_PRODUCT_MERIS, tmp) == 0) { if (product_id->sph_record == NULL) { product_id->sph_record = epr_read_sph(product_id); if (product_id->sph_record == NULL) { epr_set_err(e_err_file_read_error, "epr_set_param: wrong SPH"); epr_free_string(tmp); return 0; } } field = epr_get_field(product_id->sph_record, "LINE_LENGTH"); if (field == NULL) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: unable to read LINE_LENGTH"); epr_free_string(tmp); return 0; } line_length = ((uint*) field->elems)[0]; if (line_length == 0) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: LINE_LENGTH must be > 0"); epr_free_string(tmp); return 0; } field = epr_get_field(product_id->sph_record, "LINES_PER_TIE_PT"); if (field == NULL) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: unable to read LINES_PER_TIE_PT"); epr_free_string(tmp); return 0; } num_tie_points_across = ((uint*) field->elems)[0]; if (num_tie_points_across == 0) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: LINES_PER_TIE_PT must be > 0"); epr_free_string(tmp); return 0; } param_elem = epr_create_param_elem("sceneRasterWidth", line_length); epr_add_ptr_array_elem(product_id->param_table, param_elem); ntpa = ((line_length - 1) / num_tie_points_across) + 1; param_elem = epr_create_param_elem("tiePointGridWidth", ntpa); epr_add_ptr_array_elem(product_id->param_table, param_elem); } /* AATSR does NOT have any dynamic parameters in DDDB */ /* ASAR */ else if ((strcmp(EPR_ENVISAT_PRODUCT_ASAR, epr_sub_string((char*)product_field->elems, 0, 3)) == 0) || (strcmp(EPR_ENVISAT_PRODUCT_SAR, epr_sub_string((char*)product_field->elems, 0, 3)) == 0)) { field = epr_get_field(product_id->sph_record, "LINE_LENGTH"); if (field == NULL) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: unable to read LINE_LENGTH"); epr_free_string(tmp); return 0; } line_length = ((uint*) field->elems)[0]; if (line_length == 0) { epr_set_err(e_err_invalid_value, "epr_set_param: wrong SPH: LINE_LENGTH must be > 0"); epr_free_string(tmp); return 0; } param_elem = epr_create_param_elem("sceneRasterWidth", line_length); epr_add_ptr_array_elem(product_id->param_table, param_elem); param_elem = epr_create_param_elem("tiePointGridWidth", EPR_ASAR_NUM_PER_POINT_ACROSS_LOCAT); epr_add_ptr_array_elem(product_id->param_table, param_elem); } epr_free_string(tmp); return 1; } GMTSAR_V5.7/.svn/pristine/25/25e92c789ffe672875766e7775bafd275c984212.svn-base000444 015705 000000 00000035301 13505462013 025366 0ustar00sandwellwheel000000 000000 /************************************************************************* This code is derived from cs2 v3.7 Written by Andrew V. Goldberg and Boris Cherkassky Modifications for use in snaphu by Curtis W. Chen Parser for cs2 minimum cost flow solver. Originally written to read DIMACS format (text) input files. Modified to parse passed data from snaphu. This file is included with a #include from snaphu_cs2.c. The cs2 code is used here with permission for strictly noncommerical use. The original cs2 source code can be downloaded from http://www.igsystems.com/cs2 The original cs2 copyright is stated as follows: COPYRIGHT C 1995 IG Systems, Inc. Permission to use for evaluation purposes is granted provided that proper acknowledgments are given. For a commercial licence, contact igsys@eclipse.net. This software comes with NO WARRANTY, expressed or implied. By way of example, but not limitation, we make no representations of warranties of merchantability or fitness for any particular purpose or that the use of the software components or documentation will not infringe any patents, copyrights, trademarks, or other rights. Copyright 2002 Board of Trustees, Leland Stanford Jr. University *************************************************************************/ int cs2mcfparse(residue, rowcost, colcost, nNrow, nNcol, n_ad, m_ad, nodes_ad, arcs_ad, node_min_ad, m_c_ad, cap_ad ) /* parameters passed to set up network */ signed char **residue; /* 2D array of residues */ short **rowcost; /* 2D array of row arc costs */ short **colcost; /* 2D array of col arc costs */ long nNrow; /* number of nodes per row */ long nNcol; /* number of nodes per column */ /* these parameters are output */ long *n_ad; /* address of the number of nodes */ long *m_ad; /* address of the number of arcs */ node **nodes_ad; /* address of the array of nodes */ arc **arcs_ad; /* address of the array of arcs */ long *node_min_ad; /* address of the minimal node */ double *m_c_ad; /* maximal arc cost */ short **cap_ad; /* array of capacities (changed to short) */ { #define ABS( x ) ( (x) >= 0 ) ? (x) : -(x) /* variables added for unwrapping parse */ unsigned int row, col, dir; unsigned long narcs, nnodes, nodectr, arcctr, nresidues; long cumsupply, temp; long inf_cap = 0; long n, /* internal number of nodes */ node_min, /* minimal no of node */ node_max, /* maximal no of nodes */ *arc_first, /* internal array for holding - node degree - position of the first outgoing arc */ *arc_tail, /* internal array: tails of the arcs */ /* temporary variables carrying no of nodes */ head, tail, i; long m, /* internal number of arcs */ /* temporary variables carrying no of arcs */ last, arc_num, arc_new_num; node *nodes, /* pointers to the node structure */ *head_p, *ndp, *in, *jn; arc *arcs, /* pointers to the arc structure */ *arc_current, *arc_new, *arc_tmp; long excess, /* supply/demand of the node */ low, /* lowest flow through the arc */ acap; /* capacity */ long cost; /* arc cost */ double dcost, /* arc cost in double mode */ m_c; /* maximal arc cost */ short *cap; /* array of capacities (changed to short) */ double total_p, /* total supply */ total_n, /* total demand */ cap_out, /* sum of outgoing capacities */ cap_in; /* sum of incoming capacities */ long no_lines=0, /* no of current input line */ /* no_plines=0, */ /* no of problem-lines */ /* no_nlines=0, */ /* no of node lines */ no_alines=0, /* no of arc-lines */ pos_current=0; /* 2*no_alines */ int /* k, */ /* temporary */ err_no; /* no of detected error */ /* -------------- error numbers & error messages ---------------- */ #define EN1 0 #define EN2 1 #define EN3 2 #define EN4 3 #define EN6 4 #define EN10 5 #define EN7 6 #define EN8 7 #define EN9 8 #define EN11 9 #define EN12 10 #define EN13 11 #define EN14 12 #define EN16 13 #define EN15 14 #define EN17 15 #define EN18 16 #define EN21 17 #define EN19 18 #define EN20 19 #define EN22 20 static char *err_message[] = { /* 0*/ "more than one problem line", /* 1*/ "wrong number of parameters in the problem line", /* 2*/ "it is not a Min-cost problem line", /* 3*/ "bad value of a parameter in the problem line", /* 4*/ "can't obtain enough memory to solve this problem", /* 5*/ "", /* 6*/ "can't read problem name", /* 7*/ "problem description must be before node description", /* 8*/ "wrong capacity bounds", /* 9*/ "wrong number of parameters in the node line", /*10*/ "wrong value of parameters in the node line", /*11*/ "unbalanced problem", /*12*/ "node descriptions must be before arc descriptions", /*13*/ "too many arcs in the input", /*14*/ "wrong number of parameters in the arc line", /*15*/ "wrong value of parameters in the arc line", /*16*/ "unknown line type in the input", /*17*/ "read error", /*18*/ "not enough arcs in the input", /*19*/ "warning: capacities too big - excess overflow possible", /*20*/ "can't read anything from the input file", /*21*/ "warning: infinite capacity replaced by BIGGEST_FLOW" }; /* --------------------------------------------------------------- */ /* set up */ nnodes=nNrow*nNcol+1; /* add one for ground node */ narcs=2*((nNrow+1)*nNcol+nNrow*(nNcol+1)); /* 2x for two directional arcs */ cumsupply=0; nresidues=0; /* get memory (formerly case 'p' in DIMACS file read) */ fprintf(sp2,"Setting up data structures for cs2 MCF solver\n"); n=nnodes; m=narcs; if ( n <= 0 || m <= 0 ) /*wrong value of no of arcs or nodes*/ { err_no = EN4; goto error; } /* allocating memory for 'nodes', 'arcs' and internal arrays */ nodes = (node*) CAlloc ( n+2, sizeof(node) ); arcs = (arc*) CAlloc ( 2*m+1, sizeof(arc) ); cap = (short*) CAlloc ( 2*m, sizeof(short) ); /* changed to short */ arc_tail = (long*) CAlloc ( 2*m, sizeof(long) ); arc_first= (long*) CAlloc ( n+2, sizeof(long) ); /* arc_first [ 0 .. n+1 ] = 0 - initialized by calloc */ for ( in = nodes; in <= nodes + n; in ++ ) in -> excess = 0; if ( nodes == NULL || arcs == NULL || arc_first == NULL || arc_tail == NULL ) /* memory is not allocated */ { err_no = EN6; goto error; } /* setting pointer to the first arc */ arc_current = arcs; node_max = 0; node_min = n; m_c = 0; total_p = total_n = 0; for ( ndp = nodes; ndp < nodes + n; ndp ++ ) ndp -> excess = 0; /* end of former case 'p' */ /* load supply/demand info into arrays (case 'n' in former loop) */ for(col=0; col excess = excess; if ( excess > 0 ) total_p += (double)excess; if ( excess < 0 ) total_n -= (double)excess; nresidues++; cumsupply+=residue[row][col]; } } } /* give ground node excess of -cumsupply */ ( nodes + nnodes ) -> excess = -cumsupply; if (cumsupply < 0) total_p -= (double)cumsupply; if (cumsupply > 0) total_n += (double)cumsupply; /* load arc info into arrays (case 'a' in former loop) */ low=0; acap=ARCUBOUND; /* horizontal (row) direction arcs first */ for(arcctr=1;arcctr<=2*nNrow*nNcol+nNrow+nNcol;arcctr++){ if(arcctr<=nNrow*(nNcol+1)){ /* row (horizontal) arcs first */ nodectr=arcctr; if(nodectr<=nNrow*nNcol){ tail=nodectr; }else{ tail=nnodes; } if(nodectr<=nNrow){ head=nnodes; }else{ head=nodectr-nNrow; } cost=rowcost[((nodectr-1) % nNrow)][(int )((nodectr-1)/nNrow)]; }else{ /* column (vertical) arcs */ nodectr=arcctr-nNrow*(nNcol+1); if(nodectr % (nNrow+1)==0){ tail=nnodes; }else{ tail=(int )(nodectr-ceil(nodectr/(nNrow+1.0))+1); } if(nodectr % (nNrow+1)==1){ head=nnodes; }else{ head=(int )(nodectr-ceil(nodectr/(nNrow+1.0))); } cost=colcost[((nodectr-1) % (nNrow+1))][(int )((nodectr-1)/(nNrow+1))]; } if ( tail < 0 || tail > n || head < 0 || head > n ) /* wrong value of nodes */ { err_no = EN17; goto error; } if ( acap < 0 ) { acap = BIGGEST_FLOW; if (!inf_cap) { inf_cap = 1; fprintf ( sp0, "\ncs2 solver: %s\n", err_message[21] ); } } if ( low < 0 || low > acap ) { err_no = EN9; goto error; } for(dir=0;dir<=1;dir++){ if(dir){ /* switch head and tail and loop for two directional arcs */ temp=tail; tail=head; head=temp; } /* no of arcs incident to node i is placed in arc_first[i+1] */ arc_first[tail + 1] ++; arc_first[head + 1] ++; in = nodes + tail; jn = nodes + head; dcost = (double)cost; /* storing information about the arc */ arc_tail[pos_current] = tail; arc_tail[pos_current+1] = head; arc_current -> head = jn; arc_current -> r_cap = acap - low; cap[pos_current] = acap; arc_current -> cost = dcost; arc_current -> sister = arc_current + 1; ( arc_current + 1 ) -> head = nodes + tail; ( arc_current + 1 ) -> r_cap = 0; cap[pos_current+1] = 0; ( arc_current + 1 ) -> cost = -dcost; ( arc_current + 1 ) -> sister = arc_current; in -> excess -= low; jn -> excess += low; /* searching for minimum and maximum node */ if ( head < node_min ) node_min = head; if ( tail < node_min ) node_min = tail; if ( head > node_max ) node_max = head; if ( tail > node_max ) node_max = tail; if ( dcost < 0 ) dcost = -dcost; if ( dcost > m_c && acap > 0 ) m_c = dcost; no_alines ++; arc_current += 2; pos_current += 2; }/* end of for loop over arc direction */ }/* end of for loop over arcss */ /* ----- all is red or error while reading ----- */ if ( ABS( total_p - total_n ) > 0.5 ) /* unbalanced problem */ { err_no = EN13; goto error; } /********** ordering arcs - linear time algorithm ***********/ /* first arc from the first node */ ( nodes + node_min ) -> first = arcs; /* before below loop arc_first[i+1] is the number of arcs outgoing from i; after this loop arc_first[i] is the position of the first outgoing from node i arcs after they would be ordered; this value is transformed to pointer and written to node.first[i] */ for ( i = node_min + 1; i <= node_max + 1; i ++ ) { arc_first[i] += arc_first[i-1]; ( nodes + i ) -> first = arcs + arc_first[i]; } for ( i = node_min; i < node_max; i ++ ) /* scanning all the nodes exept the last*/ { last = ( ( nodes + i + 1 ) -> first ) - arcs; /* arcs outgoing from i must be cited from position arc_first[i] to the position equal to initial value of arc_first[i+1]-1 */ for ( arc_num = arc_first[i]; arc_num < last; arc_num ++ ) { tail = arc_tail[arc_num]; while ( tail != i ) /* the arc no arc_num is not in place because arc cited here must go out from i; we'll put it to its place and continue this process until an arc in this position would go out from i */ { arc_new_num = arc_first[tail]; arc_current = arcs + arc_num; arc_new = arcs + arc_new_num; /* arc_current must be cited in the position arc_new swapping these arcs: */ head_p = arc_new -> head; arc_new -> head = arc_current -> head; arc_current -> head = head_p; acap = cap[arc_new_num]; cap[arc_new_num] = cap[arc_num]; cap[arc_num] = acap; acap = arc_new -> r_cap; arc_new -> r_cap = arc_current -> r_cap; arc_current -> r_cap = acap; dcost = arc_new -> cost; arc_new -> cost = arc_current -> cost; arc_current -> cost = dcost; if ( arc_new != arc_current -> sister ) { arc_tmp = arc_new -> sister; arc_new -> sister = arc_current -> sister; arc_current -> sister = arc_tmp; ( arc_current -> sister ) -> sister = arc_current; ( arc_new -> sister ) -> sister = arc_new; } arc_tail[arc_num] = arc_tail[arc_new_num]; arc_tail[arc_new_num] = tail; /* we increase arc_first[tail] */ arc_first[tail] ++ ; tail = arc_tail[arc_num]; } } /* all arcs outgoing from i are in place */ } /* ----------------------- arcs are ordered ------------------------- */ /*------------ testing network for possible excess overflow ---------*/ for ( ndp = nodes + node_min; ndp <= nodes + node_max; ndp ++ ) { cap_in = ( ndp -> excess ); cap_out = - ( ndp -> excess ); for ( arc_current = ndp -> first; arc_current != (ndp+1) -> first; arc_current ++ ) { arc_num = arc_current - arcs; if ( cap[arc_num] > 0 ) cap_out += cap[arc_num]; if ( cap[arc_num] == 0 ) cap_in += cap[( arc_current -> sister )-arcs]; } /* if (cap_in > BIGGEST_FLOW || cap_out > BIGGEST_FLOW) { fprintf ( sp0, "\ncs2 solver: %s\n", err_message[EN20] ); break; } */ } /* ----------- assigning output values ------------*/ *m_ad = m; *n_ad = node_max - node_min + 1; *node_min_ad = node_min; *nodes_ad = nodes + node_min; *arcs_ad = arcs; *m_c_ad = m_c; *cap_ad = cap; /* free internal memory */ free ( arc_first ); free ( arc_tail ); /* Thanks God! All is done! */ return (0); /* ---------------------------------- */ error: /* error found reading input */ fprintf ( sp0, "\ncs2 solver: line %ld of input - %s\n", no_lines, err_message[err_no] ); exit (ABNORMAL_EXIT); /* this is a needless return statement so the compiler doesn't complain */ return(1); } /* -------------------- end of parser -------------------*/ GMTSAR_V5.7/.svn/pristine/22/225fd9924ac56658a8e65ce53ae466e08e3b466a.svn-base000444 015705 000000 00000005651 13505462014 025555 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" void null_sio_struct(struct PRM *p) { /* characters */ strncpy(p->input_file, NULL_CHAR, 8); strncpy(p->SLC_file, NULL_CHAR, 8); strncpy(p->out_amp_file, NULL_CHAR, 8); strncpy(p->out_data_file, NULL_CHAR, 8); strncpy(p->deskew, NULL_CHAR, 8); strncpy(p->iqflip, NULL_CHAR, 8); strncpy(p->offset_video, NULL_CHAR, 8); strncpy(p->srm, NULL_CHAR, 8); strncpy(p->ref_file, NULL_CHAR, 8); strncpy(p->led_file, NULL_CHAR, 8); strncpy(p->orbdir, NULL_CHAR, 8); strncpy(p->lookdir, NULL_CHAR, 8); strncpy(p->date, NULL_CHAR, 8); strncpy(p->SLC_file, NULL_CHAR, 8); strncpy(p->dtype, NULL_CHAR, 8); /* ints */ p->debug_flag = NULL_INT; p->bytes_per_line = NULL_INT; p->good_bytes = NULL_INT; p->first_line = NULL_INT; p->num_patches = NULL_INT; p->first_sample = NULL_INT; p->num_valid_az = NULL_INT; p->st_rng_bin = NULL_INT; p->num_rng_bins = NULL_INT; p->chirp_ext = NULL_INT; p->nlooks = NULL_INT; p->rshift = NULL_INT; p->ashift = NULL_INT; p->fdc_ystrt = NULL_INT; p->fdc_strt = NULL_INT; p->rec_start = NULL_INT; p->rec_stop = NULL_INT; p->SC_identity = NULL_INT; p->ref_identity = NULL_INT; p->nrows = NULL_INT; p->num_lines = NULL_INT; p->SLC_format = NULL_INT; /* doubles */ p->SC_clock_start = NULL_DOUBLE; p->SC_clock_stop = NULL_DOUBLE; p->clock_start = NULL_DOUBLE; p->clock_stop = NULL_DOUBLE; p->icu_start = NULL_DOUBLE; p->clock_start = NULL_DOUBLE; p->clock_stop = NULL_DOUBLE; p->caltone = NULL_DOUBLE; p->RE = NULL_DOUBLE; p->rc = NULL_DOUBLE; p->ra = NULL_DOUBLE; p->vel = NULL_DOUBLE; p->ht = NULL_DOUBLE; p->near_range = NULL_DOUBLE; p->far_range = NULL_DOUBLE; p->prf = NULL_DOUBLE; p->xmi = NULL_DOUBLE; p->xmq = NULL_DOUBLE; p->az_res = NULL_DOUBLE; p->fs = NULL_DOUBLE; p->chirp_slope = NULL_DOUBLE; p->pulsedur = NULL_DOUBLE; p->lambda = NULL_DOUBLE; p->rhww = NULL_DOUBLE; p->pctbw = NULL_DOUBLE; p->pctbwaz = NULL_DOUBLE; p->fd1 = NULL_DOUBLE; p->fdd1 = NULL_DOUBLE; p->fddd1 = NULL_DOUBLE; p->delr = NULL_DOUBLE; p->SLC_scale = NULL_DOUBLE; p->sub_int_r = NULL_DOUBLE; p->sub_int_a = NULL_DOUBLE; p->sub_double = NULL_DOUBLE; p->stretch_r = NULL_DOUBLE; p->stretch_a = NULL_DOUBLE; p->a_stretch_r = NULL_DOUBLE; p->a_stretch_a = NULL_DOUBLE; p->baseline_start = NULL_DOUBLE; p->baseline_end = NULL_DOUBLE; p->alpha_start = NULL_DOUBLE; p->alpha_end = NULL_DOUBLE; p->bpara = NULL_DOUBLE; p->bperp = NULL_DOUBLE; }; GMTSAR_V5.7/.svn/pristine/8e/8e97193bfb1ce1db499ab72f803805cd0c59f743.svn-base000444 015705 000000 00000106411 13505462013 025715 0ustar00sandwellwheel000000 000000 #! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-07-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: GMTSAR_V5.7/.svn/pristine/7a/7ad9722f08573b3207e06dd3d4365ae5c7ee97a8.svn-base000444 015705 000000 00000021144 13505462013 025626 0ustar00sandwellwheel000000 000000 /* $Id$ */ /*************************************************************************** * p_scatter computes the average amplitude or persistent scatter function * * from aligned SLCs. * **************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 06/06/18 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 06/06/17 Code largely based on resamp.c * ***************************************************************************/ /* References: Ferretti, A., Prati, C., & Rocca, F. (2001). Permanent scatterers in SAR interferometry. IEEE Transactions on geoscience and remote sensing, 39(1), 8-20. Lyons, S., & Sandwell, D. (2003). Fault creep along the southern San Andreas from interferometric synthetic aperture radar, permanent scatterers, and stacking. Journal of Geophysical Research: Solid Earth, 108(B1). */ #include "gmtsar.h" #include #include #include #include char *USAGE = "\nUsage: " "p_scatter PRM_filelist fileout.grd mode \n" " PRM_filelist - list of aligned SLCs \n" " fileout.grd - output file either average amplitude or " "persistent_scatter \n" " mode - (0) amplitude; (1) persistent_scatter; " "(2) compute and apply persistent_scatter \n \n" " Computes the average amplitude or persistent scattering " "function which is mu/(2*sig) \n" " The factor of 2 is used do the display_amplitude is not " "significantly changed. \n \n"; void read_input_file(char *, int, char **); #define BUFSIZE 1024 int main(int argc, char **argv) { char line[BUFSIZE]; char **PRMname; char **SLCname; int i, ii, jj, kk, mm; int nfiles, imode = 1; int debug = 0; int xdimm, ydimm; /* size of master SLC file */ short *slc_rows = NULL; /* pointer to a composite row of all the SLC files*/ float *sum, *sum2; float amp2, ave, sig, sig2; double test1, test2; FILE *fin = NULL; FILE *prmfile = NULL; FILE **slcin = NULL; struct PRM *r; double inc[2], wesn[4]; void *API = NULL; /* GMT control structure */ struct GMT_GRID *scatter = NULL; /* For the scatter grid */ if (argc < 4) die(USAGE, ""); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; imode = atoi(argv[3]); /* open the PRM_filelist count the number of lines */ if ((fin = fopen(argv[1], "r")) == NULL) die("Can't open file", argv[1]); nfiles = 0; while (fgets(line, BUFSIZE, fin) != NULL) { nfiles++; } fclose(fin); if (debug) fprintf(stderr, "number of PRM files %d \n", nfiles); /* allocate memory for the PRM, SLC, and the PRM structures */ PRMname = malloc(nfiles * sizeof(char *)); SLCname = malloc(nfiles * sizeof(char *)); slcin = malloc(nfiles * sizeof(FILE *)); for (i = 0; i < nfiles; i++) { PRMname[i] = (char *)malloc(512 * sizeof(char)); SLCname[i] = (char *)malloc(512 * sizeof(char)); slcin[i] = (FILE *)malloc(sizeof(FILE)); } r = malloc(nfiles * sizeof(struct PRM)); /* get the PRM filenames */ read_input_file(argv[1], nfiles, PRMname); if (debug) for (i = 0; i < nfiles; i++) fprintf(stderr, "%s \n", PRMname[i]); /* read the first PRM file and get the dimensions of the SLC files */ i = 0; if ((prmfile = fopen(PRMname[i], "r")) == NULL) die("Can't open prmfile ", PRMname[i]); get_sio_struct(prmfile, &r[i]); xdimm = r[i].num_rng_bins; ydimm = r[i].num_patches * r[i].num_valid_az; if (debug) fprintf(stderr, " SLC dimensions %d %d \n", xdimm, ydimm); fclose(prmfile); /* prepare the gmt grd file */ inc[GMT_X] = inc[GMT_Y] = 1.0; /* Pixels */ wesn[GMT_XLO] = 0.0; wesn[GMT_XHI] = inc[GMT_X] * xdimm; wesn[GMT_YLO] = 0.0; wesn[GMT_YHI] = inc[GMT_Y] * ydimm; if ((scatter = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "scatter", scatter)) return EXIT_FAILURE; /* allocate the memory for the input SLC files and output scattering (or * amplitude) file */ slc_rows = (short *)malloc(2 * xdimm * nfiles * sizeof(short)); sum = (float *)malloc(xdimm * sizeof(float)); sum2 = (float *)malloc(xdimm * sizeof(float)); /* open all the PRM files and get the names of the SLC files */ for (kk = 0; kk < nfiles; kk++) { if ((prmfile = fopen(PRMname[kk], "r")) == NULL) die("Can't open prmfile ", PRMname[kk]); get_sio_struct(prmfile, &r[kk]); SLCname[kk] = r[kk].SLC_file; if (debug) fprintf(stderr, " SLC name %s \n", SLCname[kk]); fclose(prmfile); } /* open all the SLC files for reading and writing*/ for (kk = 0; kk < nfiles; kk++) { if ((slcin[kk] = fopen(SLCname[kk], "r+")) == NULL) die("Can't open prmfile ", SLCname[kk]); } /* loopover the rows, read a row from each SLC, compute scatter, and save the * output */ for (ii = 0; ii < ydimm; ii++) { /* read all the SLCs with the same row */ for (kk = 0; kk < nfiles; kk++) { fread(slc_rows + kk * 2 * xdimm, 2 * sizeof(short), xdimm, slcin[kk]); } /* zero all the sum and output arrays */ /* loop over all the columns and then the SLCs */ for (jj = 0; jj < xdimm; jj++) { scatter->data[ii * xdimm + jj] = 0.; sum[jj] = 0.; sum2[jj] = 0.; for (kk = 0; kk < nfiles; kk++) { mm = kk * 2 * xdimm + 2 * jj; amp2 = (float)slc_rows[mm] * (float)slc_rows[mm] + (float)slc_rows[mm + 1] * (float)slc_rows[mm + 1]; sum[jj] = sum[jj] + sqrt(amp2); sum2[jj] = sum2[jj] + amp2; } ave = sum[jj] / nfiles; sig2 = sum2[jj] / nfiles - ave * ave; sig = sqrt(sig2); /* output either the scatter function or the average amplitude */ if (imode == 1 || imode == 2) { scatter->data[ii * xdimm + jj] = .1; if (sig > .1) scatter->data[ii * xdimm + jj] = ave / (2. * sig); } else { scatter->data[ii * xdimm + jj] = ave; } } } /* apply the scatter function to all the SLC files */ if (imode == 2) { /* rewind all the SLC files */ for (kk = 0; kk < nfiles; kk++) { rewind(slcin[kk]); } /* loop over the rows, read a row from each SLC, and multiple by the scatter */ for (ii = 0; ii < ydimm; ii++) { /* read all the SLCs with the same row */ for (kk = 0; kk < nfiles; kk++) { fread(slc_rows + kk * 2 * xdimm, 2 * sizeof(short), xdimm, slcin[kk]); } /* loop over all the columns and multiply each SLC by scatter */ for (jj = 0; jj < xdimm; jj++) { for (kk = 0; kk < nfiles; kk++) { mm = kk * 2 * xdimm + 2 * jj; test1 = (float)slc_rows[mm] * scatter->data[ii * xdimm + jj]; slc_rows[mm] = round(test1); test2 = (float)slc_rows[mm + 1] * scatter->data[ii * xdimm + jj]; slc_rows[mm + 1] = round(test2); // if(fabs(test1) > 32767. || fabs(test2) > 32767.) fprintf(stderr," // %f %f test out of bounds \n",test1,test2); } } /* write all the SLCs with the same row */ for (kk = 0; kk < nfiles; kk++) { fseek(slcin[kk], -2 * sizeof(short) * xdimm, SEEK_CUR); fwrite(slc_rows + kk * 2 * xdimm, 2 * sizeof(short), xdimm, slcin[kk]); } } } /* write out the amplitude or scatter function */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[2], scatter)) { die("Failed to write output grd file", ""); } /* close all the files and remove the GMT machinery*/ for (kk = 0; kk < nfiles; kk++) { fclose(slcin[kk]); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; return (EXIT_SUCCESS); } /*---------------------------------------------------------------------------*/ void read_input_file(char *inputfilename, int nfiles, char **filename) { int i; FILE *inputfile; if ((inputfile = fopen(inputfilename, "rw")) == NULL) die("Can't open ", inputfilename); for (i = 0; i < nfiles; i++) fscanf(inputfile, " %s ", filename[i]); fclose(inputfile); } GMTSAR_V5.7/.svn/pristine/7a/7a91d9b84982af669447265d2d31977f3699634e.svn-base000444 015705 000000 00000003055 13505462013 025310 0ustar00sandwellwheel000000 000000 .TH PRE_PROC l "04/01/98 \@ 1996 Rob Mellors, Paul Jamason and David Sandwell" "1.0" "SIOSAR Command" .SH NAME pre_proc \- reads raw SAR data files and creates a parameter file and a fixed raw data file .SH SYNOPSIS .B pre_proc (pre_proc_dpaf or pre_proc_ccrs) .I sat_orbit_frame [swst] .SH DESCRIPTION Reads 3 files from tape or disk (DPAF-pre_proc_dpaf or CCRS-pre_proc_ccrs format) and creates a parameter file and a fixed raw data file that are fed to the SAR processor (esarp). The script first checks the local disk for two files that it could get from the tape if necessary (sat_orbit_frame.ldr and sat_orbit_frame.raw). Then the script runs .B ers_line_fixer to create sat_orbit_frame.fix. The optional parameter .I swst is the sample window start time for proper near-range alignment of raw data. The default value is 878 which is good for the radius of the earth at the latitude of Southern California. For other latitudes, this number will need to be changed. During this processing, the parameter file (sat_orbit_frame.PRM) is constructed. .TP 10 .I sat_orbit_frame orbit number and frame number of data tape .TP 10 .I sat_orbit_frame.PRM parameter file used for the SAR processor (esarp) .TP 10 .I sat_orbit_frame.fix fixed raw signal data to be read by the SAR processor .SH FILES /opt/siosar/lib/virgin.PRM .SH SEE ALSO .B read_ccrs ers_line_fixer read_sarleader read_data_file ers_baseline .sp CCT.format* files in SAR_tape_data_description .sp .SH AUTHORS Rob Mellors, Paul Jamason, and David Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS GMTSAR_V5.7/.svn/pristine/7f/7fb5fb2693f79570c98361c40496c85b2149cf05.svn-base000444 015705 000000 00000001675 13505462013 025435 0ustar00sandwellwheel000000 000000 /* program to test the fft shift routine */ #include "../include/soi.h" #include "../include/siocomplex.h" #include "../include/gmtsar.h" #include void main(int argc, char *argv[]) { int k,nd=1024; fcomplex *datai, *datao; double arg; void *API = NULL; /* GMT API control structure */ /* Begin: Initializing new GMT session */ API = GMT_Create_Session (argv[0], 0U, 0U, NULL); datai = (fcomplex *) malloc(nd*sizeof(fcomplex)); datao = (fcomplex *) malloc(nd*sizeof(fcomplex)); /* fill the data array with a gaussian function */ for (k=0; k #include #include #include /*-------------------------------------------------------*/ void read_complex_short(FILE *f, int *d, int iy, int jx, int npx, int npy, int nx) { long num_to_seek; int i, j; int ireal, iimag; short *tmp; tmp = malloc(2 * nx * sizeof(short)); /* whole line */ num_to_seek = 2 * iy * nx * sizeof(short); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers - use amplitude */ for (i = 0; i < npy; i++) { fread(&tmp[0], 2 * sizeof(short), nx, f); /* read whole line */ for (j = 0; j < npx; j++) { ireal = (int)tmp[2 * (j + jx)]; iimag = (int)tmp[2 * (j + jx) + 1]; d[i * npx + j] = (int)rint(sqrt(ireal * ireal + iimag * iimag)); } } free((short *)tmp); } /*-------------------------------------------------------*/ void read_real_float(FILE *f, int *d, int iy, int jx, int npx, int npy, int nx) { long num_to_seek; int i, j; float *tmp; tmp = malloc(nx * sizeof(float)); /* whole line */ num_to_seek = iy * nx * sizeof(short); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* read the floats */ for (i = 0; i < npy; i++) { fread(&tmp[0], sizeof(float), nx, f); /* read whole line */ for (j = 0; j < npx; j++) d[i * npx + j] = (int)rintf(tmp[j + jx]); } free((float *)tmp); } /*-------------------------------------------------------*/ /*-------------------------------------------------------*/ void read_data(struct xcorr xc) { int iy, jx, ishft; /* set locations and read data for master */ iy = xc.loc[iloc].y - xc.npy / 2; jx = xc.loc[iloc].x - xc.npx / 2; if (verbose) fprintf(stderr, " reading data (format %d) at iloc %d %d : %d %d\n", xc.format, xc.loc[iloc].x, xc.loc[iloc].y, jx, iy); if (xc.format == 0) read_complex_short(xc.data1, xc.d1, iy, jx, xc.npx, xc.npy, xc.m_nx); if (xc.format == 1) read_real_float(xc.data1, xc.d1, iy, jx, xc.npx, xc.npy, xc.m_nx); /* set locations and read data for slave */ ishft = (int)xc.loc[iloc].y * xc.astretcha; iy = xc.loc[iloc].y + xc.y_offset + ishft - xc.npy / 2; jx = xc.loc[iloc].x + xc.x_offset - xc.npx / 2; if (verbose) fprintf(stderr, " reading data (format %d) at iloc %d %d : %d %d\n", xc.format, xc.loc[iloc].x, xc.loc[iloc].y, jx, iy); if (xc.format == 0) read_complex_short(xc.data2, xc.d2, iy, jx, xc.npx, xc.npy, xc.s_nx); if (xc.format == 1) read_real_float(xc.data2, xc.d2, iy, jx, xc.npx, xc.npy, xc.s_nx); } /*-------------------------------------------------------*/ void read_complex_short2float(FILE *f, float *d, int iy, int jx, int npx, int npy, int nx) { long num_to_seek; int i, j; int ireal, iimag; short *tmp; tmp = malloc(2 * nx * sizeof(short)); /* whole line */ num_to_seek = 2 * iy * nx * sizeof(short); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers - use amplitude */ for (i = 0; i < npy; i++) { fread(&tmp[0], 2 * sizeof(short), nx, f); /* read whole line */ for (j = 0; j < npx; j++) { ireal = (int)tmp[2 * (j + jx)]; iimag = (int)tmp[2 * (j + jx) + 1]; d[i * npx + j] = (float)sqrt(ireal * ireal + iimag * iimag); } } free((short *)tmp); } GMTSAR_V5.7/.svn/pristine/13/139f9e565345610e467632542c59aeb6f3742d8f.svn-base000444 015705 000000 00000003756 13505462014 025264 0ustar00sandwellwheel000000 000000 /* * $Id: epr_string.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_STRING_H_INCL #define EPR_STRING_H_INCL #ifdef __cplusplus extern "C" { #endif #include #include #include char* epr_assign_string(char** str_clone, const char* str); char* epr_create_string(unsigned int length); char* epr_clone_string(const char* str); void epr_cut_string(char** sub_str, const char* str, int start, int length); char* epr_sub_string(const char* str, int start, int length); epr_boolean epr_equal_names(const char* name1, const char* name2); void epr_free_string(char* str); char* epr_str_tok(const char* str, const char* seps, int* pos); char* epr_str_tok_tok(const char* str, const char* seps, const char* exceptions, uint* pos); int epr_find_first_not_white(const char* str); int epr_find_last_not_white(const char* str); char* epr_trim_string(char* str); char* epr_strip_string_r(char* str); int epr_if_no_letters(const char* str); int epr_numeral_suspicion(const char* str); int epr_get_positive_int(const char* str); void epr_free_and_null_string(char** str); int epr_if_no_scaling(const char* str); /** * Non-ANSI string compare (ignores case). */ int stricmp(const char* s1, const char* s2); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_STRING_H_INCL */ GMTSAR_V5.7/.svn/pristine/13/13ec8c550d5aca9844bd120807a45f7f6bd308bf.svn-base000444 015705 000000 00000033117 13505462014 025663 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 07/09/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include #include #include #include int pop_prm(struct PRM *, tree *, char *); int pop_led(tree *, state_vector *); int write_orb(state_vector *sv, FILE *fp, int); int write_slc(FILE *, FILE *, int, int); static int is_big_endian() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } #ifndef __CYGWIN__ static inline unsigned short bswap_16(unsigned short x) { return (x >> 8) | (x << 8); } static inline unsigned int bswap_32(unsigned int x) { return (bswap_16(x & 0xffff) << 16) | (bswap_16(x >> 16)); } /*static inline unsigned long long bswap_64(unsigned long long x) { return (((unsigned long long)bswap_32(x&0xffffffffull))<<32) | (bswap_32(x>>32)); }*/ #endif char *USAGE = "\n\nUsage: make_slc_tsx name_of_xml_file name_of_image_file name_output\n" "\nExample: make_slc_s1a " "TSX1_SAR__SSC______SM_S_SRA_20120615T162057_20120615T162105.xml " "IMAGE_HH_SRA_strip_007.cos TSX_HH_20120615\n" "\nOutput: TSX_HH_20120615.SLC TSX_HH_20120615.PRM TSX_HH_20120615.LED\n"; int main(int argc, char **argv) { FILE *XML_FILE, *OUTPUT_PRM, *OUTPUT_SLC, *OUTPUT_LED, *INPUT_SLC; char tmp_str[200]; struct PRM prm; tree *xml_tree; state_vector sv[200]; int rows, cols; int ch, n = 0, nc = 0, nlmx = 0; if (argc < 4) die(USAGE, ""); // find the number of lines and the maximum line length of the xml file if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } xml_tree = (struct tree *)malloc(n * 5 * sizeof(struct tree)); fclose(XML_FILE); // generate the xml tree if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_tree(XML_FILE, xml_tree, 0); fclose(XML_FILE); // show_tree(xml_tree,0,0); // initiate the prm null_sio_struct(&prm); // generate the PRM file pop_prm(&prm, xml_tree, argv[3]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); // generate the LED file n = pop_led(xml_tree, sv); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // generate the SLC file if ((INPUT_SLC = fopen(argv[2], "rb")) == NULL) die("Couldn't open data file: \n", argv[2]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open tiff file: \n", tmp_str); search_tree(xml_tree, "/level1Product/productInfo/imageDataInfo/imageRaster/numberOfColumns/", tmp_str, 1, 0, 1); cols = (int)str2double(tmp_str); search_tree(xml_tree, "/level1Product/productInfo/imageDataInfo/imageRaster/numberOfRows/", tmp_str, 1, 0, 1); rows = (int)str2double(tmp_str); write_slc(INPUT_SLC, OUTPUT_SLC, rows, cols); fclose(INPUT_SLC); fclose(OUTPUT_SLC); // TIFFClose(TIFF_FILE); // fclose(OUTPUT_SLC); } int write_slc(FILE *input, FILE *slc, int rows, int cols) { int i, j, tj, k, tk, x; short *buf = malloc(sizeof(unsigned short) * (cols + 2) * 2); int bib, rsri, rs, as, bi, rtnb, tnl, asri, asfv, aslv, rsfv, rslv; i = is_big_endian(); if (i == 1) { printf("System is Big Endian...\n"); } else { printf("System is Little Endian...\n"); } printf("Writing SLC..Image Size: %d X %d...\n", cols, rows); // fread(buf,sizeof(short),(cols+2)*2,input); j = 0; tj = rows; while (j < tj) { // first line fread(&bib, sizeof(int), 1, input); fread(&rsri, sizeof(int), 1, input); fread(&rs, sizeof(int), 1, input); fread(&as, sizeof(int), 1, input); fread(&bi, sizeof(int), 1, input); fread(&rtnb, sizeof(int), 1, input); fread(&tnl, sizeof(int), 1, input); fread(buf, sizeof(short), (cols - 5) * 2, input); // second line fread(buf, sizeof(short), 4, input); fread(&asri, sizeof(int), 1, input); fread(buf, sizeof(short), (cols - 1) * 2, input); // third line fread(buf, sizeof(short), 4, input); fread(&asfv, sizeof(int), 1, input); fread(buf, sizeof(short), (cols - 1) * 2, input); // fourth line fread(buf, sizeof(short), 4, input); fread(&aslv, sizeof(int), 1, input); fread(buf, sizeof(short), (cols - 1) * 2, input); if (i != 1) { bib = bswap_32(bib); rsri = bswap_32(rsri); rs = bswap_32(rs); as = bswap_32(as); bi = bswap_32(bi); rtnb = bswap_32(rtnb); tnl = bswap_32(tnl); asri = bswap_32(asri); asfv = bswap_32(asfv); aslv = bswap_32(aslv); } // printf("Burst Info: \n\tBytes in Burst: %u\n\tRange Samples: // %u\n\tAzimuth Samples: %u\n\tRange Total Number of Bytes: %u\n\tTotal // Number of Lines: %u\n",bib,rs,as,rtnb,tnl); printf("ASRI: %u ASFV: %u // ASLV: %u\n",asri,asfv,aslv); // printf("Writing %u Bytes to SLC...\n",(tnl-4)*(rtnb-8)); if (i != 1) { printf("Swaping Bytes...\n"); } tk = tnl - 4; for (k = 0; k < tk; k++) { fread(&rsfv, sizeof(int), 1, input); fread(&rslv, sizeof(int), 1, input); fread(buf, sizeof(short), cols * 2, input); if (i != 1) { // printf("RSFV: %u RSLV: %u\n",bswap_32(rsfv),bswap_32(rslv)); for (x = 0; x < cols * 2; x++) { buf[x] = (short)bswap_16(buf[x]); } } fwrite(buf, sizeof(short), cols * 2, slc); } j = j + tk; } free(buf); return (1); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 1e4) / 1e4 - trunc((sv[0].sec) * 1e4) / 1e4; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.3lf %.3lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led(tree *xml_tree, state_vector *sv) { int i, count; char tmp_c[200]; double tmp_d; search_tree(xml_tree, "/level1Product/platform/orbit/orbitHeader/numStateVectors/", tmp_c, 1, 0, 1); count = (int)str2double(tmp_c); for (i = 0; i < count; i++) { search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/timeUTC/", tmp_c, 2, 4, i + 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/timeUTC/", tmp_c, 1, 4, i + 1); tmp_c[4] = '\0'; sv[i].yr = (int)(str2double(tmp_c)); sv[i].jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); sv[i].sec = (tmp_d - trunc(tmp_d)) * 86400; search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/posX/", tmp_c, 1, 4, i + 1); sv[i].x = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/posY/", tmp_c, 1, 4, i + 1); sv[i].y = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/posZ/", tmp_c, 1, 4, i + 1); sv[i].z = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/velX/", tmp_c, 1, 4, i + 1); sv[i].vx = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/velY/", tmp_c, 1, 4, i + 1); sv[i].vy = str2double(tmp_c); search_tree(xml_tree, "/level1Product/platform/orbit/stateVec/velZ/", tmp_c, 1, 4, i + 1); sv[i].vz = str2double(tmp_c); } printf("%d Lines Written for Orbit...\n", count); return (count); } int pop_prm(struct PRM *prm, tree *xml_tree, char *file_name) { char tmp_c[200]; double tmp_d; int tmp_i; double c_speed = 299792458.0; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; search_tree(xml_tree, "/level1Product/processing/processingParameter/rangeLooks/", tmp_c, 1, 0, 1); prm->nlooks = (int)str2double(tmp_c); prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; strasign(prm->dtype, "a", 0, 0); search_tree(xml_tree, "/level1Product/productInfo/imageDataInfo/imageRaster/rowSpacing/", tmp_c, 1, 0, 1); prm->fs = 1 / str2double(tmp_c); // rng_samp_rate prm->SC_identity = 7; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ search_tree(xml_tree, "/level1Product/instrument/radarParameters/centerFrequency/", tmp_c, 1, 0, 1); prm->lambda = c_speed / str2double(tmp_c); search_tree(xml_tree, "/level1Product/processing/processingParameter/rangeCompression/" "chirps/referenceChirp/pulseLength/", tmp_c, 1, 0, 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/level1Product/processing/processingParameter/rangeCompression/" "chirps/referenceChirp/pulseBandwidth/", tmp_c, 1, 0, 1); prm->chirp_slope = str2double(tmp_c) / tmp_d * pow(10.0, 9.0); search_tree(xml_tree, "/level1Product/processing/processingParameter/rangeCompression/" "chirps/referenceChirp/chirpSlope/", tmp_c, 1, 0, 1); if (strcmp(tmp_c, "DOWN") == 0) { prm->chirp_slope = -1.0 * prm->chirp_slope; } prm->pulsedur = tmp_d / pow(10.0, 9.0); // search_tree(xml_tree,"/product/qualityInformation/qualityDataList/qualityData/imageQuality/imageStatistics/outputDataMean/re/",tmp_c,1,0,1); prm->xmi = 0.0; // str2double(tmp_c); //I_mean // search_tree(xml_tree,"/product/qualityInformation/qualityDataList/qualityData/imageQuality/imageStatistics/outputDataMean/im/",tmp_c,1,0,1); prm->xmq = 0.0; // str2double(tmp_c); //Q_mean search_tree(xml_tree, "/level1Product/productSpecific/complexImageInfo/commonPRF/", tmp_c, 1, 0, 1); prm->prf = str2double(tmp_c); search_tree(xml_tree, "/level1Product/productInfo/sceneInfo/rangeTime/firstPixel/", tmp_c, 1, 0, 1); prm->near_range = str2double(tmp_c) * c_speed / 2; prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius search_tree(xml_tree, "/level1Product/productInfo/missionInfo/orbitDirection/", tmp_c, 1, 0, 1); strasign(prm->orbdir, tmp_c, 0, 0); search_tree(xml_tree, "/level1Product/productInfo/acquisitionInfo/lookDirection/", tmp_c, 1, 0, 1); strasign(prm->lookdir, tmp_c, 0, 0); strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; search_tree(xml_tree, "/level1Product/productInfo/sceneInfo/start/timeUTC/", tmp_c, 2, 0, 1); prm->clock_start = str2double(tmp_c); search_tree(xml_tree, "/level1Product/productInfo/sceneInfo/start/timeUTC/", tmp_c, 1, 0, 1); tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(tmp_c); strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); search_tree(xml_tree, "/level1Product/productInfo/imageDataInfo/imageRaster/numberOfColumns/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c); prm->bytes_per_line = tmp_i * 4; prm->good_bytes = prm->bytes_per_line; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig search_tree(xml_tree, "/level1Product/calibration/nominalGeometricPerformance/azimuthRes/", tmp_c, 1, 0, 1); prm->az_res = str2double(tmp_c); /*search_tree(xml_tree,"/level1Product/productInfo/acquisitionInfo/lookDirection/",tmp_c,1,0,1); prm->antenna_side = 1; if (strcmp(tmp_c,"R")==0){ prm->antenna_side = -1; } */ prm->fdd1 = 0.0; prm->fddd1 = 0.0; search_tree(xml_tree, "/level1Product/productInfo/imageDataInfo/imageRaster/numberOfRows/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c); prm->num_lines = tmp_i - tmp_i % 4; // search_tree(xml_tree,"/product/adsHeader/stopTime/",tmp_c,2,0,1); prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->num_rng_bins = prm->bytes_per_line / 4; prm->chirp_ext = 0; printf("PRM set for Image File...\n"); return (1); } GMTSAR_V5.7/.svn/pristine/13/13ac74d180d2bf5b40604dcde3a2d85dd17c3db6.svn-base000444 015705 000000 00000013523 13505462013 026001 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU & David Sandwell * * (Scripps Institution of Oceanography) * * Date : 04/26/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "lib_functions.h" #include #include #include #include double str2double(char *); int strasign(char *, char *, int, int); int strlocate(char *, int, int); char *USAGE = "\n\nUsage: make_gaussian_filter name_of_PRM_file RNG_DEC " "AZI_DEC WAVELENGTH(m)\n" "\nExample: make_gaussian_filter " "IMG-HH-ALPSRP211830620-H1.0__A.PRM 2 4 200\n" "\nOutput: gauss_200\n"; int main(int argc, char **argv) { FILE *fid; int rng_dec, azi_dec, w, n_azi, n_rng; int i, j, idec, jdec; struct PRM prm; double azi_px_size, rng_px_size, x, y; double c_speed = 299792458.0; double sig_azi, sig_rng, a, rng, cost, cosa; double g[50][50]; char out_name[100] = "gauss_"; if (argc < 4) die(USAGE, ""); rng_dec = (int)str2double(argv[2]); azi_dec = (int)str2double(argv[3]); w = (int)str2double(argv[4]); if (rng_dec < 1 || rng_dec > 4) die("Incorrect range decimation factor: \n", argv[2]); if (azi_dec < 1 || azi_dec > 4) die("Incorrect azimuth decimation factor: \n", argv[3]); if (w < 2 || w > 10000) die("Incorrect wavelength: \n", argv[4]); // get the prm get_prm(&prm, argv[1]); // compute the range and azimuth pixel size azi_px_size = prm.vel / sqrt(1 + prm.ht / prm.RE) / prm.prf; // real_vel/prf rng_px_size = c_speed / prm.fs / 2; // compute the cosine of the looking angle and the surface deviate angle a = prm.ht + prm.RE; prm.far_range = prm.near_range + rng_px_size * (double)prm.num_rng_bins; rng = (prm.near_range + prm.far_range) / 2; cost = (pow(a, 2.0) + pow(rng, 2.0) - pow(prm.RE, 2.0)) / 2 / a / rng; cosa = (pow(a, 2.0) + pow(prm.RE, 2.0) - pow(rng, 2.0)) / 2 / a / prm.RE; // fprintf(stderr,"cosa = %.9f, cost = %.9f\n", cosa ,cost); // compute the ground range pixel size rng_px_size = rng_px_size / sin(acos(cost) + acos(cosa)); azi_px_size = azi_px_size * azi_dec; rng_px_size = rng_px_size * rng_dec; sig_azi = w / 5.3 / azi_px_size; sig_rng = w / 5.3 / rng_px_size; idec = floor(sig_azi / 2.); if (idec < 1) idec = 1; jdec = floor(sig_rng / 2.); if (jdec < 1) jdec = 1; fprintf(stdout, " %d %d \n", idec, jdec); n_azi = (int)(sig_azi * 4); n_rng = (int)(sig_rng * 4); if (n_azi % 2 == 0) n_azi = n_azi + 1; if (n_rng % 2 == 0) n_rng = n_rng + 1; strcat(out_name, argv[4]); if ((fid = fopen(out_name, "w")) == NULL) die("Couldn't open file: \n", out_name); fprintf(fid, "%d %d\n", n_rng, n_azi); for (i = 0; i < n_azi; i++) { for (j = 0; j < n_rng; j++) { x = (-(n_rng - 1) / 2 + j); y = (-(n_azi - 1) / 2 + i); g[i][j] = exp(-(x * x / sig_rng / sig_rng + y * y / sig_azi / sig_azi) / 2.0); fprintf(fid, "\t%.16e", g[i][j]); } fprintf(fid, "\n"); } fclose(fid); } int strasign(char *str_out, char *str, int n1, int n2) { // asign n1-n2 of str to str_out int i; if (n1 > n2 || n2 > 199) { return (-1); } for (i = n1; i <= n2; i++) { str_out[i - n1] = str[i]; } str_out[n2 - n1 + 1] = '\0'; return (1); } int strlocate(char *str, int c, int n) { // locate the n-th c in str int i, j = 0; for (i = 0; i < strlen(str); i++) { if (str[i] == (char)c) { j++; if (j == n) { return (i); } } } return (-1); } double str2double(char *str) { int i, n, m; double value = 0.0, value1 = 0.0, value2 = 0.0, sgn = 1.0; char tmp1[100], tmp2[100], tmp[100], str_tmp[100]; strasign(str_tmp, str, 0, strlen(str)); // decide the sign if (str_tmp[0] == '-' || str_tmp[0] == '+') { if (str_tmp[0] == '-') { sgn = -1.0; } strasign(tmp, str_tmp, 1, strlen(str_tmp)); strasign(str_tmp, tmp, 0, strlen(tmp)); } // decide where it is sci form if (strlocate(str_tmp, 'e', 1) != -1 || strlocate(str_tmp, 'E', 1) != -1) { n = strlocate(str_tmp, 'e', 1); if (n == -1) { n = strlocate(str_tmp, 'E', 1); } strasign(tmp2, str_tmp, n + 1, strlen(str)); // exponential part strasign(tmp1, str_tmp, 0, n - 1); // digits part } else { strasign(tmp1, str_tmp, 0, strlen(str_tmp)); // digits part } // decide whether it has fraction n = strlocate(tmp1, '.', 1); if (n != -1) { strasign(tmp, tmp1, 0, n - 1); m = strlen(tmp); for (i = 0; i < m; i++) { value1 = value1 + (double)((int)tmp[i] - 48) * pow(10.0, (double)(m - i - 1)); } m = strlen(tmp1); strasign(tmp, tmp1, n + 1, m); m = strlen(tmp); for (i = 0; i < m; i++) { value2 = value2 + (double)((int)tmp[i] - 48) * pow(10.0, (double)(-i - 1)); } // puts(tmp2); // fprintf(stderr,"%.12f %.12f %.12f\n",value1,value2,str2double(tmp2)); value = value1 + value2; } else { m = strlen(tmp1); for (i = 0; i < m; i++) { value = value + (double)((int)tmp1[i] - 48) * pow(10.0, (double)(m - i - 1)); } } if (strlocate(str_tmp, 'e', 1) != -1 || strlocate(str_tmp, 'E', 1) != -1) { value = value * pow(10.0, str2double(tmp2)); } return (value * sgn); } GMTSAR_V5.7/.svn/pristine/13/13dcd2f57d4bee1f8f95195d44e537e05b6ff89c.svn-base000444 015705 000000 00000304444 13505462013 026005 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu input/output source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* function: SetDefaults() * ----------------------- * Sets all parameters to their initial default values. */ void SetDefaults(infileT *infiles, outfileT *outfiles, paramT *params){ /* input files */ StrNCopy(infiles->weightfile,DEF_WEIGHTFILE,MAXSTRLEN); StrNCopy(infiles->corrfile,DEF_CORRFILE,MAXSTRLEN); StrNCopy(infiles->ampfile,DEF_AMPFILE,MAXSTRLEN); StrNCopy(infiles->ampfile2,DEF_AMPFILE2,MAXSTRLEN); StrNCopy(infiles->estfile,DEF_ESTFILE,MAXSTRLEN); StrNCopy(infiles->magfile,DEF_MAGFILE,MAXSTRLEN); StrNCopy(infiles->costinfile,DEF_COSTINFILE,MAXSTRLEN); /* output and dump files */ StrNCopy(outfiles->initfile,DEF_INITFILE,MAXSTRLEN); StrNCopy(outfiles->flowfile,DEF_FLOWFILE,MAXSTRLEN); StrNCopy(outfiles->eifile,DEF_EIFILE,MAXSTRLEN); StrNCopy(outfiles->rowcostfile,DEF_ROWCOSTFILE,MAXSTRLEN); StrNCopy(outfiles->colcostfile,DEF_COLCOSTFILE,MAXSTRLEN); StrNCopy(outfiles->mstrowcostfile,DEF_MSTROWCOSTFILE,MAXSTRLEN); StrNCopy(outfiles->mstcolcostfile,DEF_MSTCOLCOSTFILE,MAXSTRLEN); StrNCopy(outfiles->mstcostsfile,DEF_MSTCOSTSFILE,MAXSTRLEN); StrNCopy(outfiles->corrdumpfile,DEF_CORRDUMPFILE,MAXSTRLEN); StrNCopy(outfiles->rawcorrdumpfile,DEF_RAWCORRDUMPFILE,MAXSTRLEN); StrNCopy(outfiles->costoutfile,DEF_COSTOUTFILE,MAXSTRLEN); StrNCopy(outfiles->conncompfile,DEF_CONNCOMPFILE,MAXSTRLEN); StrNCopy(outfiles->outfile,DEF_OUTFILE,MAXSTRLEN); StrNCopy(outfiles->logfile,DEF_LOGFILE,MAXSTRLEN); /* file formats */ infiles->infileformat=DEF_INFILEFORMAT; infiles->unwrappedinfileformat=DEF_UNWRAPPEDINFILEFORMAT; infiles->magfileformat=DEF_MAGFILEFORMAT; infiles->corrfileformat=DEF_CORRFILEFORMAT; infiles->estfileformat=DEF_ESTFILEFORMAT; infiles->ampfileformat=DEF_AMPFILEFORMAT; outfiles->outfileformat=DEF_OUTFILEFORMAT; /* options and such */ params->unwrapped=DEF_UNWRAPPED; params->regrowconncomps=DEF_REGROWCONNCOMPS; params->eval=DEF_EVAL; params->initonly=DEF_INITONLY; params->initmethod=DEF_INITMETHOD; params->costmode=DEF_COSTMODE; params->amplitude=DEF_AMPLITUDE; params->verbose=DEF_VERBOSE; /* SAR and geometry parameters */ params->orbitradius=DEF_ORBITRADIUS; params->altitude=DEF_ALTITUDE; params->earthradius=DEF_EARTHRADIUS; params->bperp=DEF_BPERP; params->transmitmode=DEF_TRANSMITMODE; params->baseline=DEF_BASELINE; params->baselineangle=DEF_BASELINEANGLE; params->nlooksrange=DEF_NLOOKSRANGE; params->nlooksaz=DEF_NLOOKSAZ; params->nlooksother=DEF_NLOOKSOTHER; params->ncorrlooks=DEF_NCORRLOOKS; params->ncorrlooksrange=DEF_NCORRLOOKSRANGE; params->ncorrlooksaz=DEF_NCORRLOOKSAZ; params->nearrange=DEF_NEARRANGE; params->dr=DEF_DR; params->da=DEF_DA; params->rangeres=DEF_RANGERES; params->azres=DEF_AZRES; params->lambda=DEF_LAMBDA; /* scattering model parameters */ params->kds=DEF_KDS; params->specularexp=DEF_SPECULAREXP; params->dzrcritfactor=DEF_DZRCRITFACTOR; params->shadow=DEF_SHADOW; params->dzeimin=DEF_DZEIMIN; params->laywidth=DEF_LAYWIDTH; params->layminei=DEF_LAYMINEI; params->sloperatiofactor=DEF_SLOPERATIOFACTOR; params->sigsqei=DEF_SIGSQEI; /* decorrelation model parameters */ params->drho=DEF_DRHO; params->rhosconst1=DEF_RHOSCONST1; params->rhosconst2=DEF_RHOSCONST2; params->cstd1=DEF_CSTD1; params->cstd2=DEF_CSTD2; params->cstd3=DEF_CSTD3; params->defaultcorr=DEF_DEFAULTCORR; params->rhominfactor=DEF_RHOMINFACTOR; /* pdf model parameters */ params->dzlaypeak=DEF_DZLAYPEAK; params->azdzfactor=DEF_AZDZFACTOR; params->dzeifactor=DEF_DZEIFACTOR; params->dzeiweight=DEF_DZEIWEIGHT; params->dzlayfactor=DEF_DZLAYFACTOR; params->layconst=DEF_LAYCONST; params->layfalloffconst=DEF_LAYFALLOFFCONST; params->sigsqshortmin=DEF_SIGSQSHORTMIN; params->sigsqlayfactor=DEF_SIGSQLAYFACTOR; /* deformation mode parameters */ params->defoazdzfactor=DEF_DEFOAZDZFACTOR; params->defothreshfactor=DEF_DEFOTHRESHFACTOR; params->defomax=DEF_DEFOMAX; params->sigsqcorr=DEF_SIGSQCORR; params->defolayconst=DEF_DEFOLAYCONST; /* algorithm parameters */ params->flipphasesign=DEF_FLIPPHASESIGN; params->initmaxflow=DEF_INITMAXFLOW; params->arcmaxflowconst=DEF_ARCMAXFLOWCONST; params->maxflow=DEF_MAXFLOW; params->krowei=DEF_KROWEI; params->kcolei=DEF_KCOLEI; params->kperpdpsi=DEF_KPERPDPSI; params->kpardpsi=DEF_KPARDPSI; params->threshold=DEF_THRESHOLD; params->initdzr=DEF_INITDZR; params->initdzstep=DEF_INITDZSTEP; params->maxcost=DEF_MAXCOST; params->costscale=DEF_COSTSCALE; params->costscaleambight=DEF_COSTSCALEAMBIGHT; params->dnomincangle=DEF_DNOMINCANGLE; params->srcrow=DEF_SRCROW; params->srccol=DEF_SRCCOL; params->p=DEF_P; params->nshortcycle=DEF_NSHORTCYCLE; params->maxnewnodeconst=DEF_MAXNEWNODECONST; params->maxcyclefraction=DEF_MAXCYCLEFRACTION; params->sourcemode=DEF_SOURCEMODE; params->maxnflowcycles=DEF_MAXNFLOWCYCLES; params->dumpall=DEF_DUMPALL; params->cs2scalefactor=DEF_CS2SCALEFACTOR; /* tile parameters */ params->ntilerow=DEF_NTILEROW; params->ntilecol=DEF_NTILECOL; params->rowovrlp=DEF_ROWOVRLP; params->colovrlp=DEF_COLOVRLP; params->piecefirstrow=DEF_PIECEFIRSTROW; params->piecefirstcol=DEF_PIECEFIRSTCOL; params->piecenrow=DEF_PIECENROW; params->piecencol=DEF_PIECENCOL; params->tilecostthresh=DEF_TILECOSTTHRESH; params->minregionsize=DEF_MINREGIONSIZE; params->nthreads=DEF_NTHREADS; params->scndryarcflowmax=DEF_SCNDRYARCFLOWMAX; params->assembleonly=DEF_ASSEMBLEONLY; params->rmtmptile=DEF_RMTMPTILE; params->tileedgeweight=DEF_TILEEDGEWEIGHT; /* connected component parameters */ params->minconncompfrac=DEF_MINCONNCOMPFRAC; params->conncompthresh=DEF_CONNCOMPTHRESH; params->maxncomps=DEF_MAXNCOMPS; } /* function: ProcessArgs() * ----------------------- * Parses command line inputs passed to main(). */ void ProcessArgs(int argc, char *argv[], infileT *infiles, outfileT *outfiles, long *linelenptr, paramT *params){ long i,j; signed char noarg_exit; /* required inputs */ noarg_exit=FALSE; StrNCopy(infiles->infile,"",MAXSTRLEN); *linelenptr=0; /* loop over inputs */ if(argc<2){ /* catch zero arguments in */ fprintf(sp1,OPTIONSHELPBRIEF); exit(ABNORMAL_EXIT); } for(i=1;iunwrapped=TRUE; }else if(argv[i][j]=='t'){ params->costmode=TOPO; }else if(argv[i][j]=='d'){ params->costmode=DEFO; }else if(argv[i][j]=='s'){ params->costmode=SMOOTH; params->defomax=0.0; }else if(argv[i][j]=='q'){ params->eval=TRUE; params->unwrapped=TRUE; }else if(argv[i][j]=='f'){ if(++ioutfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='c'){ if(++icorrfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='m'){ if(++imagfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='a'){ if(++iampfile,argv[i],MAXSTRLEN); params->amplitude=TRUE; break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='A'){ if(++iampfile,argv[i],MAXSTRLEN); params->amplitude=FALSE; break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='e'){ if(++iestfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='w'){ if(++iweightfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='g'){ if(++iconncompfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='G'){ params->regrowconncomps=TRUE; if(++iconncompfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='b'){ if(++ibperp)) || !(params->bperp)){ fprintf(sp0,"option -%c requires non-zero decimal argument\n", argv[i-1][j]); exit(ABNORMAL_EXIT); } break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='p'){ if(++ip))){ fprintf(sp0,"option -%c requires decimal argument\n", argv[i-1][j]); exit(ABNORMAL_EXIT); } break; }else{ noarg_exit=TRUE; } }else if(argv[i][j]=='i'){ params->initonly=TRUE; }else if(argv[i][j]=='n'){ params->costmode=NOSTATCOSTS; }else if(argv[i][j]=='v'){ params->verbose=TRUE; }else if(argv[i][j]=='l'){ if(++ilogfile,argv[i],MAXSTRLEN); break; }else{ noarg_exit=TRUE; } }else{ fprintf(sp0,"unrecognized option -%c\n",argv[i][j]); exit(ABNORMAL_EXIT); } if(noarg_exit){ fprintf(sp0,"option -%c requires an argument\n",argv[i-1][j]); exit(ABNORMAL_EXIT); } } }else{ /* argument is a "--" option */ if(!strcmp(argv[i],"--costinfile")){ if(++icostinfile,argv[i],MAXSTRLEN); }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--costoutfile")){ if(++icostoutfile,argv[i],MAXSTRLEN); }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--debug") || !strcmp(argv[i],"--dumpall")){ params->dumpall=TRUE; }else if(!strcmp(argv[i],"--mst")){ params->initmethod=MSTINIT; }else if(!strcmp(argv[i],"--mcf")){ params->initmethod=MCFINIT; }else if(!strcmp(argv[i],"--aa")){ if(i+2ampfile,argv[++i],MAXSTRLEN); StrNCopy(infiles->ampfile2,argv[++i],MAXSTRLEN); infiles->ampfileformat=FLOAT_DATA; params->amplitude=TRUE; }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--AA")){ if(++i+1ampfile,argv[i++],MAXSTRLEN); StrNCopy(infiles->ampfile2,argv[i],MAXSTRLEN); infiles->ampfileformat=FLOAT_DATA; params->amplitude=FALSE; }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--tile")){ if(++i+3ntilerow)) || StringToLong(argv[i++],&(params->ntilecol)) || StringToLong(argv[i++],&(params->rowovrlp)) || StringToLong(argv[i],&(params->colovrlp))){ fprintf(sp0,"option %s requires four integer arguments\n", argv[i-4]); exit(ABNORMAL_EXIT); } }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--piece")){ if(++i+3piecefirstrow)) || StringToLong(argv[i++],&(params->piecefirstcol)) || StringToLong(argv[i++],&(params->piecenrow)) || StringToLong(argv[i],&(params->piecencol))){ fprintf(sp0,"option %s requires four integer arguments\n", argv[i-4]); exit(ABNORMAL_EXIT); } }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--nproc")){ if(++inthreads))){ fprintf(sp0,"option %s requires an integer arguemnt\n", argv[i-1]); exit(ABNORMAL_EXIT); } }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--assemble")){ params->assembleonly=TRUE; if(++itiledir,argv[i],MAXSTRLEN); }else{ noarg_exit=TRUE; } }else if(!strcmp(argv[i],"--copyright") || !strcmp(argv[i],"--info")){ fprintf(sp1,COPYRIGHT); exit(ABNORMAL_EXIT); }else if(!strcmp(argv[i],"--help")){ fprintf(sp1,OPTIONSHELPFULL); exit(ABNORMAL_EXIT); }else{ fprintf(sp0,"unrecognized option %s\n",argv[i]); exit(ABNORMAL_EXIT); } if(noarg_exit){ fprintf(sp0,"incorrect number of arguments for option %s\n", argv[i-1]); exit(ABNORMAL_EXIT); } } }else{ /* argument is not an option */ if(!strlen(infiles->infile)){ StrNCopy(infiles->infile,argv[i],MAXSTRLEN); }else if(*linelenptr==0){ if(StringToLong(argv[i],linelenptr) || *linelenptr<=0){ fprintf(sp0,"line length must be positive integer\n"); exit(ABNORMAL_EXIT); } }else{ fprintf(sp0,"multiple input files: %s and %s\n", infiles->infile,argv[i]); exit(ABNORMAL_EXIT); } } } /* end for loop over arguments */ /* check to make sure we have required arguments */ if(!strlen(infiles->infile) || !(*linelenptr)){ fprintf(sp0,"not enough input arguments. type %s -h for help\n", PROGRAMNAME); exit(ABNORMAL_EXIT); } } /* end of ProcessArgs */ /* function: CheckParams() * ----------------------- * Checks all parameters to make sure they are valid. This is just a boring * function with lots of checks in it. */ void CheckParams(infileT *infiles, outfileT *outfiles, long linelen, long nlines, paramT *params){ long ni, nj, n; FILE *fp; /* make sure output file is writable (try opening in append mode) */ /* file will be opened in write mode later, clobbering existing file */ if((fp=fopen(outfiles->outfile,"a"))==NULL){ fprintf(sp0,"file %s is not writable\n",outfiles->outfile); exit(ABNORMAL_EXIT); }else{ if(ftell(fp)){ fclose(fp); }else{ fclose(fp); remove(outfiles->outfile); } if(!strcmp(outfiles->outfile,infiles->infile) && !params->eval && !params->regrowconncomps){ fprintf(sp0,"WARNING: output will overwrite input\n"); } } /* make sure options aren't contradictory */ if(params->initonly && params->unwrapped){ fprintf(sp0,"cannot use initialize-only mode with unwrapped input\n"); exit(ABNORMAL_EXIT); } if(params->initonly && params->p>=0){ fprintf(sp0,"cannot use initialize-only mode with Lp costs\n"); exit(ABNORMAL_EXIT); } if(params->costmode==NOSTATCOSTS && !(params->initonly || params->p>=0)){ fprintf(sp0,"no-statistical-costs option can only be used in\n"); fprintf(sp0," initialize-only or Lp-norm modes\n"); exit(ABNORMAL_EXIT); } if(strlen(infiles->costinfile) && params->costmode==NOSTATCOSTS){ fprintf(sp0,"no-statistical-costs option cannot be given\n"); fprintf(sp0," if input cost file is specified\n"); exit(ABNORMAL_EXIT); } if(strlen(outfiles->costoutfile) && params->costmode==NOSTATCOSTS){ fprintf(sp0,"no-statistical-costs option cannot be given\n"); fprintf(sp0," if output cost file is specified\n"); exit(ABNORMAL_EXIT); } /* check geometry parameters */ if(params->earthradius<=0){ fprintf(sp0,"earth radius must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->altitude){ if(params->altitude>0){ params->orbitradius=params->earthradius+params->altitude; }else{ fprintf(sp0,"platform altitude must be positive\n"); exit(ABNORMAL_EXIT); } }else if(params->orbitradius < params->earthradius){ fprintf(sp0,"platform orbit radius must be greater than earth radius\n"); exit(ABNORMAL_EXIT); } if(params->costmode==TOPO && params->baseline<0){ fprintf(sp0,"baseline length must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->costmode==TOPO && params->baseline==0){ fprintf(sp0,"WARNING: zero baseline may give unpredictable results\n"); } if(params->ncorrlooks<=0){ fprintf(sp0,"number of looks ncorrlooks must be positive\n"); exit(ABNORMAL_EXIT); } if(params->nearrange<=0){ fprintf(sp0,"slant range parameter nearrange must be positive (meters)\n"); exit(ABNORMAL_EXIT); } if(params->dr<=0 || params->da<=0){ fprintf(sp0,"pixel spacings dr and da must be positive (meters)\n"); exit(ABNORMAL_EXIT); } /* dr and da after multilooking can be larger than rangeres, azres */ /* if(params->rangeres<=(params->dr) || params->azres<=(params->da)){ fprintf(sp0,"resolutions parameters must be larger than pixel spacings\n"); exit(ABNORMAL_EXIT); } */ if(params->lambda<=0){ fprintf(sp0,"wavelength lambda must be positive (meters)\n"); exit(ABNORMAL_EXIT); } /* check scattering model defaults */ if(params->kds<=0){ fprintf(sp0,"scattering model parameter kds must be positive\n"); exit(ABNORMAL_EXIT); } if(params->specularexp<=0){ fprintf(sp0,"scattering model parameter SPECULAREXP must be positive\n"); exit(ABNORMAL_EXIT); } if(params->dzrcritfactor<0){ fprintf(sp0,"dzrcritfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->laywidth<1){ fprintf(sp0,"layover window width laywidth must be positive\n"); exit(ABNORMAL_EXIT); } if(params->layminei<0){ fprintf(sp0,"layover minimum brightness must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->sloperatiofactor<0){ fprintf(sp0,"slope ratio fudge factor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->sigsqei<=0){ fprintf(sp0,"intensity estimate variance must be positive\n"); exit(ABNORMAL_EXIT); } /* check decorrelation model defaults */ if(params->drho<=0){ fprintf(sp0,"correlation step size drho must be positive\n"); exit(ABNORMAL_EXIT); } if(params->rhosconst1<=0 || params->rhosconst2<=0){ fprintf(sp0,"parameters rhosconst1 and rhosconst2 must be positive\n"); exit(ABNORMAL_EXIT); } if(!strlen(infiles->corrfile) && (params->defaultcorr<0 || params->defaultcorr>1)){ fprintf(sp0,"default correlation must be between 0 and 1\n"); exit(ABNORMAL_EXIT); } if(params->rhominfactor<0){ fprintf(sp0,"parameter rhominfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->ncorrlooksaz<1 || params->ncorrlooksrange<1 || params->nlooksaz<1 || params->nlooksrange<1 || params->nlooksother<1){ fprintf(sp0,"numbers of looks must be positive integer\n"); exit(ABNORMAL_EXIT); } if(!strlen(infiles->corrfile)){ if(params->ncorrlooksaznlooksaz){ fprintf(sp0,"NCORRLOOKSAZ cannot be smaller than NLOOKSAZ\n"); fprintf(sp0," setting NCORRLOOKSAZ to equal NLOOKSAZ\n"); params->ncorrlooksaz=params->nlooksaz; } if(params->ncorrlooksrangenlooksrange){ fprintf(sp0,"NCORRLOOKSRANGE cannot be smaller than NLOOKSRANGE\n"); fprintf(sp0," setting NCORRLOOKSRANGE to equal NLOOKSRANGE\n"); params->ncorrlooksrange=params->nlooksrange; } } /* check pdf model parameters */ if(params->azdzfactor<0){ fprintf(sp0,"parameter azdzfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->dzeifactor<0){ fprintf(sp0,"parameter dzeifactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->dzeiweight<0 || params->dzeiweight>1.0){ fprintf(sp0,"parameter dzeiweight must be between 0 and 1\n"); exit(ABNORMAL_EXIT); } if(params->dzlayfactor<0){ fprintf(sp0,"parameter dzlayfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->layconst<=0){ fprintf(sp0,"parameter layconst must be positive\n"); exit(ABNORMAL_EXIT); } if(params->layfalloffconst<0){ fprintf(sp0,"parameter layfalloffconst must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->sigsqshortmin<=0){ fprintf(sp0,"parameter sigsqshortmin must be positive\n"); exit(ABNORMAL_EXIT); } if(params->sigsqlayfactor<0){ fprintf(sp0,"parameter sigsqlayfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } /* check deformation mode parameters */ if(params->defoazdzfactor<0){ fprintf(sp0,"parameter defoazdzfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->defothreshfactor<0){ fprintf(sp0,"parameter defothreshfactor must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->defomax<0){ fprintf(sp0,"parameter defomax must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->sigsqcorr<0){ fprintf(sp0,"parameter sigsqcorr must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->defolayconst<=0){ fprintf(sp0,"parameter defolayconst must be positive\n"); exit(ABNORMAL_EXIT); } /* check algorithm parameters */ /* be sure to check for things that will cause type overflow */ /* or floating point exception */ if((params->initmaxflow)<1 && (params->initmaxflow)!=AUTOCALCSTATMAX){ fprintf(sp0,"initialization maximum flow must be positive\n"); exit(ABNORMAL_EXIT); } if((params->arcmaxflowconst)<1){ fprintf(sp0,"arcmaxflowconst must be positive\n"); exit(ABNORMAL_EXIT); } if((params->maxflow)<1){ fprintf(sp0,"maxflow must be positive\n"); exit(ABNORMAL_EXIT); } if(params->krowei<=0 || params->kcolei<=0){ fprintf(sp0,"averaging window sizes krowei and kcolei must be positive\n"); exit(ABNORMAL_EXIT); } if(params->kperpdpsi<=0 || params->kpardpsi<=0){ fprintf(sp0, "averaging window sizes kperpdpsi and kpardpsi must be positive\n"); exit(ABNORMAL_EXIT); } if(params->threshold<=0){ fprintf(sp0,"numerical solver threshold must be positive\n"); exit(ABNORMAL_EXIT); } if(params->initdzr<=0){ fprintf(sp0,"initdzr must be positive\n"); exit(ABNORMAL_EXIT); } if(params->initdzstep<=0){ fprintf(sp0,"initdzstep must be positive\n"); exit(ABNORMAL_EXIT); } if(params->maxcost>POSSHORTRANGE || params->maxcost<=0){ fprintf(sp0,"maxcost must be positive and within range or short int\n"); exit(ABNORMAL_EXIT); } if(params->costscale<=0){ fprintf(sp0,"cost scale factor costscale must be positive\n"); exit(ABNORMAL_EXIT); } if(params->p<0 && params->p!=PROBCOSTP){ fprintf(sp0,"Lp-norm parameter p should be nonnegative\n"); exit(ABNORMAL_EXIT); } if((params->costmode==TOPO && params->maxflow*params->nshortcycle) >POSSHORTRANGE){ fprintf(sp0,"maxflow exceeds range of short int for given nshortcycle\n"); exit(ABNORMAL_EXIT); } if(params->costmode==DEFO && ceil(params->defomax*params->nshortcycle) >POSSHORTRANGE){ fprintf(sp0,"defomax exceeds range of short int for given nshortcycle\n"); exit(ABNORMAL_EXIT); } if(params->maxnewnodeconst<=0 || params->maxnewnodeconst>1){ fprintf(sp0,"maxnewnodeconst must be between 0 and 1\n"); exit(ABNORMAL_EXIT); } if(params->sourcemode>1 || params->sourcemode<-1){ fprintf(sp0,"sourcemode must be -1, 0, or 1\n"); exit(ABNORMAL_EXIT); } if(infiles->infileformat!=FLOAT_DATA || strlen(infiles->magfile)){ params->havemagnitude=TRUE; }else{ params->havemagnitude=FALSE; } if(params->maxnflowcycles==USEMAXCYCLEFRACTION){ params->maxnflowcycles=LRound(params->maxcyclefraction *nlines/(double )params->ntilerow *linelen/(double )params->ntilecol); } if(params->initmaxflow==AUTOCALCSTATMAX && !(params->ntilerow==1 && params->ntilecol==1)){ fprintf(sp0,"initial maximum flow cannot be calculated automatically in " "tile mode\n"); exit(ABNORMAL_EXIT); } #ifdef NO_CS2 if(params->initmethod==MCFINIT && !params->unwrapped){ fprintf(sp0,"program not compiled with cs2 MCF solver module\n"); exit(ABNORMAL_EXIT); } #endif /* tile parameters */ if(params->ntilerow<1 || params->ntilecol<1){ fprintf(sp0,"numbers of tile rows and columns must be positive\n"); exit(ABNORMAL_EXIT); } if(params->rowovrlp<0 || params->colovrlp<0){ fprintf(sp0,"tile overlaps must be nonnegative\n"); exit(ABNORMAL_EXIT); } if(params->ntilerow>1 || params->ntilecol>1){ ni=ceil((nlines+(params->ntilerow-1)*params->rowovrlp) /(double )params->ntilerow); nj=ceil((linelen+(params->ntilecol-1)*params->colovrlp) /(double )params->ntilecol); if(params->p>=0){ fprintf(sp0,"tile mode not enabled for Lp costs\n"); exit(ABNORMAL_EXIT); } if(params->ntilerow+params->rowovrlp > nlines || params->ntilecol+params->colovrlp > linelen || params->ntilerow*params->ntilerow > nlines || params->ntilecol*params->ntilecol > linelen){ fprintf(sp0,"tiles too small or overlap too large for given input\n"); exit(ABNORMAL_EXIT); } if(params->minregionsize > ((nlines-(params->ntilerow-1)*(ni-params->rowovrlp)) *(linelen-(params->ntilecol-1)*(nj-params->colovrlp)))){ fprintf(sp0,"minimum region size too large for given tile parameters\n"); exit(ABNORMAL_EXIT); } if(TMPTILEOUTFORMAT!=ALT_LINE_DATA && TMPTILEOUTFORMAT!=FLOAT_DATA){ fprintf(sp0,"unsupported TMPTILEOUTFORMAT value in complied binary\n"); exit(ABNORMAL_EXIT); } if(TMPTILEOUTFORMAT==FLOAT_DATA && outfiles->outfileformat!=FLOAT_DATA){ fprintf(sp0,"precompiled tile format precludes given output format\n"); exit(ABNORMAL_EXIT); } if(params->scndryarcflowmax<1){ fprintf(sp0,"parameter scndryarcflowmax too small\n"); exit(ABNORMAL_EXIT); } if(params->initonly){ fprintf(sp0, "initialize-only mode and tile mode are mutually exclusive\n"); exit(ABNORMAL_EXIT); } if(strlen(outfiles->conncompfile)){ fprintf(sp0, "connected components output not yet supported for tile mode\n"); exit(ABNORMAL_EXIT); } if(params->assembleonly){ n=strlen(params->tiledir); while(--n>0 && params->tiledir[n]=='/'){ params->tiledir[n]='\0'; } if(!strlen(params->tiledir)){ fprintf(sp0,"tile directory name cannot have zero length\n"); exit(ABNORMAL_EXIT); } if(!strcmp(params->tiledir,"/")){ StrNCopy(params->tiledir,"",MAXSTRLEN); } } if(params->piecefirstrow!=DEF_PIECEFIRSTROW || params->piecefirstcol!=DEF_PIECEFIRSTCOL || params->piecenrow!=DEF_PIECENROW || params->piecencol!=DEF_PIECENCOL){ fprintf(sp0,"piece-only mode cannot be used with multiple tiles\n"); exit(ABNORMAL_EXIT); } }else{ if(params->assembleonly){ fprintf(sp0,"assemble-only mode can only be used with multiple tiles\n"); exit(ABNORMAL_EXIT); } if(params->nthreads>1){ fprintf(sp0,"only one tile--disregarding multiprocessor option\n"); } if(params->rowovrlp || params->colovrlp){ fprintf(sp0,"only one tile--disregarding tile overlap values\n"); } params->piecefirstrow--; /* index from 0 instead of 1 */ params->piecefirstcol--; /* index from 0 instead of 1 */ if(!params->piecenrow){ params->piecenrow=nlines; } if(!params->piecencol){ params->piecencol=linelen; } if(params->piecefirstrow<0 || params->piecefirstcol<0 || params->piecenrow<1 || params->piecencol<1 || params->piecefirstrow+params->piecenrow>nlines || params->piecefirstcol+params->piecencol>linelen){ fprintf(sp0,"illegal values for piece of interferogram to unwrap\n"); exit(ABNORMAL_EXIT); } } if(params->nthreads<1){ fprintf(sp0,"number of processors must be at least one\n"); exit(ABNORMAL_EXIT); }else if(params->nthreads>MAXTHREADS){ fprintf(sp0,"number of processors exceeds precomplied limit of %d\n", MAXTHREADS); exit(ABNORMAL_EXIT); } /* connected component parameters */ if(params->regrowconncomps){ if(!strlen(outfiles->conncompfile)){ fprintf(sp0,"no connected component output file specified\n"); exit(ABNORMAL_EXIT); } params->unwrapped=TRUE; } if(params->minconncompfrac<0 || params->minconncompfrac>1){ fprintf(sp0,"illegal value for minimum connected component fraction\n"); exit(ABNORMAL_EXIT); } if(params->maxncomps<=0){ fprintf(sp0,"illegal value for maximum number of connected components\n"); exit(ABNORMAL_EXIT); } if(strlen(outfiles->conncompfile)){ if(params->initonly){ fprintf(sp0,"WARNING: connected component mask cannot be generated " "in initialize-only mode\n mask will not be output\n"); StrNCopy(outfiles->conncompfile,"",MAXSTRLEN); } if(params->costmode==NOSTATCOSTS){ fprintf(sp0,"WARNING: connected component mask cannot be generated " "without statistical costs\n mask will not be output\n"); StrNCopy(outfiles->conncompfile,"",MAXSTRLEN); } } /* set global pointers to functions for calculating and evaluating costs */ if(params->p<0){ if(params->costmode==TOPO){ CalcCost=CalcCostTopo; EvalCost=EvalCostTopo; }else if(params->costmode==DEFO){ CalcCost=CalcCostDefo; EvalCost=EvalCostDefo; }else if(params->costmode==SMOOTH){ CalcCost=CalcCostSmooth; EvalCost=EvalCostSmooth; } }else{ if(params->p==0){ CalcCost=CalcCostL0; EvalCost=EvalCostL0; }else if(params->p==1){ CalcCost=CalcCostL1; EvalCost=EvalCostL1; }else if(params->p==2){ CalcCost=CalcCostL2; EvalCost=EvalCostL2; }else{ CalcCost=CalcCostLP; EvalCost=EvalCostLP; } } } /* function: ReadConfigFile() * -------------------------- * Read in parameter values from a file, overriding existing parameters. */ void ReadConfigFile(char *conffile, infileT *infiles, outfileT *outfiles, long *linelenptr, paramT *params){ long nlines, nparams, nfields; FILE *fp; char buf[MAXLINELEN]; char str1[MAXLINELEN], str2[MAXLINELEN]; char *ptr; signed char badparam; /* open input config file */ if(strlen(conffile)){ if((fp=fopen(conffile,"r"))==NULL){ /* abort if we were given a non-zero length name that is unreadable */ fprintf(sp0,"unable to read configuration file %s\n",conffile); exit(ABNORMAL_EXIT); } }else{ /* if we were given a zero-length name, just ignore it and go on */ return; } /* read each line and convert the first two fields */ nlines=0; nparams=0; badparam=FALSE; while(TRUE){ /* read a line from the file and store it in buffer buf */ buf[0]='\0'; ptr=fgets(buf,MAXLINELEN,fp); /* break when we read EOF without reading any text */ if(ptr==NULL && !strlen(buf)){ break; } nlines++; /* make sure we got the whole line */ if(strlen(buf)>=MAXLINELEN-1){ fprintf(sp0,"line %ld in file %s exceeds maximum line length\n", nlines,conffile); exit(ABNORMAL_EXIT); } /* read the first two fields */ /* (str1, str2 same size as buf, so can't overflow them */ nfields=sscanf(buf,"%s %s",str1,str2); /* if only one field is read, and it is not a comment, we have an error */ if(nfields==1 && isalnum(str1[0])){ fprintf(sp0,"unrecognized configuration parameter '%s' (%s:%ld)\n", str1,conffile,nlines); exit(ABNORMAL_EXIT); } /* if we have (at least) two non-comment fields */ if(nfields==2 && isalnum(str1[0])){ /* do the conversions */ nparams++; if(!strcmp(str1,"INFILE")){ StrNCopy(infiles->infile,str2,MAXSTRLEN); }else if(!strcmp(str1,"OUTFILE")){ StrNCopy(outfiles->outfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"WEIGHTFILE")){ StrNCopy(infiles->weightfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"AMPFILE") || !strcmp(str1,"AMPFILE1")){ if(strlen(infiles->ampfile2) && !params->amplitude){ fprintf(sp0,"cannot specify both amplitude and power\n"); exit(ABNORMAL_EXIT); } StrNCopy(infiles->ampfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"AMPFILE2")){ if(strlen(infiles->ampfile) && !params->amplitude){ fprintf(sp0,"cannot specify both amplitude and power\n"); exit(ABNORMAL_EXIT); } StrNCopy(infiles->ampfile2,str2,MAXSTRLEN); infiles->ampfileformat=FLOAT_DATA; }else if(!strcmp(str1,"PWRFILE") || !strcmp(str1,"PWRFILE1")){ if(strlen(infiles->ampfile2) && params->amplitude){ fprintf(sp0,"cannot specify both amplitude and power\n"); exit(ABNORMAL_EXIT); } StrNCopy(infiles->ampfile,str2,MAXSTRLEN); params->amplitude=FALSE; }else if(!strcmp(str1,"PWRFILE2")){ if(strlen(infiles->ampfile) && params->amplitude){ fprintf(sp0,"cannot specify both amplitude and power\n"); exit(ABNORMAL_EXIT); } StrNCopy(infiles->ampfile2,str2,MAXSTRLEN); params->amplitude=FALSE; infiles->ampfileformat=FLOAT_DATA; }else if(!strcmp(str1,"MAGFILE")){ StrNCopy(infiles->magfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"CORRFILE")){ StrNCopy(infiles->corrfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"ESTIMATEFILE")){ StrNCopy(infiles->estfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"LINELENGTH") || !strcmp(str1,"LINELEN")){ badparam=StringToLong(str2,linelenptr); }else if(!strcmp(str1,"STATCOSTMODE")){ if(!strcmp(str2,"TOPO")){ params->costmode=TOPO; }else if(!strcmp(str2,"DEFO")){ params->costmode=DEFO; }else if(!strcmp(str2,"SMOOTH")){ params->costmode=SMOOTH; }else if(!strcmp(str2,"NOSTATCOSTS")){ params->costmode=NOSTATCOSTS; }else{ badparam=TRUE; } }else if(!strcmp(str1,"INITONLY")){ badparam=SetBooleanSignedChar(&(params->initonly),str2); }else if(!strcmp(str1,"UNWRAPPED_IN")){ badparam=SetBooleanSignedChar(&(params->unwrapped),str2); }else if(!strcmp(str1,"DEBUG") || !strcmp(str1,"DUMPALL")){ badparam=SetBooleanSignedChar(&(params->dumpall),str2); }else if(!strcmp(str1,"VERBOSE")){ badparam=SetBooleanSignedChar(&(params->verbose),str2); }else if(!strcmp(str1,"INITMETHOD")){ if(!strcmp(str2,"MST") || !strcmp(str2,"mst")){ params->initmethod=MSTINIT; }else if(!strcmp(str2,"MCF") || !strcmp(str2,"mcf") || !strcmp(str2,"CS2") || !strcmp(str2,"cs2")){ params->initmethod=MCFINIT; }else{ badparam=TRUE; } }else if(!strcmp(str1,"ORBITRADIUS")){ if(!(badparam=StringToDouble(str2,&(params->orbitradius)))){ params->altitude=0; } }else if(!strcmp(str1,"ALTITUDE")){ if(!(badparam=StringToDouble(str2,&(params->altitude)))){ params->orbitradius=0; } }else if(!strcmp(str1,"EARTHRADIUS")){ badparam=StringToDouble(str2,&(params->earthradius)); }else if(!strcmp(str1,"BPERP")){ badparam=StringToDouble(str2,&(params->bperp)); }else if(!strcmp(str1,"TRANSMITMODE")){ if(!strcmp(str2,"PINGPONG") || !strcmp(str2,"REPEATPASS")){ params->transmitmode=PINGPONG; }else if(!strcmp(str2,"SINGLEANTENNATRANSMIT") || !strcmp(str2,"SAT") || !strcmp(str2,"SINGLEANTTRANSMIT")){ params->transmitmode=SINGLEANTTRANSMIT; }else{ badparam=TRUE; } }else if(!strcmp(str1,"BASELINE")){ if(!(badparam=StringToDouble(str2,&(params->baseline)))){ params->bperp=0; } }else if(!strcmp(str1,"BASELINEANGLE_RAD")){ if(!(badparam=StringToDouble(str2,&(params->baselineangle)))){ params->bperp=0; } }else if(!strcmp(str1,"BASELINEANGLE_DEG")){ if(!(badparam=StringToDouble(str2,&(params->baselineangle)))){ (params->baselineangle)*=(PI/180.0); params->bperp=0; } }else if(!strcmp(str1,"NLOOKSRANGE")){ badparam=StringToLong(str2,&(params->nlooksrange)); }else if(!strcmp(str1,"NLOOKSAZ")){ badparam=StringToLong(str2,&(params->nlooksaz)); }else if(!strcmp(str1,"NLOOKSOTHER")){ badparam=StringToLong(str2,&(params->nlooksother)); }else if(!strcmp(str1,"NCORRLOOKS")){ badparam=StringToDouble(str2,&(params->ncorrlooks)); }else if(!strcmp(str1,"NCORRLOOKSRANGE")){ badparam=StringToLong(str2,&(params->ncorrlooksrange)); }else if(!strcmp(str1,"NCORRLOOKSAZ")){ badparam=StringToLong(str2,&(params->ncorrlooksaz)); }else if(!strcmp(str1,"NEARRANGE") || !strcmp(str1,"NOMRANGE")){ badparam=StringToDouble(str2,&(params->nearrange)); }else if(!strcmp(str1,"DR")){ badparam=StringToDouble(str2,&(params->dr)); }else if(!strcmp(str1,"DA")){ badparam=StringToDouble(str2,&(params->da)); }else if(!strcmp(str1,"RANGERES")){ badparam=StringToDouble(str2,&(params->rangeres)); }else if(!strcmp(str1,"AZRES")){ badparam=StringToDouble(str2,&(params->azres)); }else if(!strcmp(str1,"LAMBDA")){ badparam=StringToDouble(str2,&(params->lambda)); }else if(!strcmp(str1,"KDS") || !strcmp(str1,"KSD")){ if(!strcmp(str1,"KSD")){ fprintf(sp0,"WARNING: parameter KSD interpreted as KDS (%s:%ld)\n", conffile,nlines); } badparam=StringToDouble(str2,&(params->kds)); }else if(!strcmp(str1,"SPECULAREXP") || !strcmp(str1,"N")){ badparam=StringToDouble(str2,&(params->specularexp)); }else if(!strcmp(str1,"DZRCRITFACTOR")){ badparam=StringToDouble(str2,&(params->dzrcritfactor)); }else if(!strcmp(str1,"SHADOW")){ badparam=SetBooleanSignedChar(&(params->shadow),str2); }else if(!strcmp(str1,"DZEIMIN")){ badparam=StringToDouble(str2,&(params->dzeimin)); }else if(!strcmp(str1,"LAYWIDTH")){ badparam=StringToLong(str2,&(params->laywidth)); }else if(!strcmp(str1,"LAYMINEI")){ badparam=StringToDouble(str2,&(params->layminei)); }else if(!strcmp(str1,"SLOPERATIOFACTOR")){ badparam=StringToDouble(str2,&(params->sloperatiofactor)); }else if(!strcmp(str1,"SIGSQEI")){ badparam=StringToDouble(str2,&(params->sigsqei)); }else if(!strcmp(str1,"DRHO")){ badparam=StringToDouble(str2,&(params->drho)); }else if(!strcmp(str1,"RHOSCONST1")){ badparam=StringToDouble(str2,&(params->rhosconst1)); }else if(!strcmp(str1,"RHOSCONST2")){ badparam=StringToDouble(str2,&(params->rhosconst2)); }else if(!strcmp(str1,"CSTD1")){ badparam=StringToDouble(str2,&(params->cstd1)); }else if(!strcmp(str1,"CSTD2")){ badparam=StringToDouble(str2,&(params->cstd2)); }else if(!strcmp(str1,"CSTD3")){ badparam=StringToDouble(str2,&(params->cstd3)); }else if(!strcmp(str1,"DEFAULTCORR")){ badparam=StringToDouble(str2,&(params->defaultcorr)); }else if(!strcmp(str1,"RHOMINFACTOR")){ badparam=StringToDouble(str2,&(params->rhominfactor)); }else if(!strcmp(str1,"DZLAYPEAK")){ badparam=StringToDouble(str2,&(params->dzlaypeak)); }else if(!strcmp(str1,"AZDZFACTOR")){ badparam=StringToDouble(str2,&(params->azdzfactor)); }else if(!strcmp(str1,"DZEIFACTOR")){ badparam=StringToDouble(str2,&(params->dzeifactor)); }else if(!strcmp(str1,"DZEIWEIGHT")){ badparam=StringToDouble(str2,&(params->dzeiweight)); }else if(!strcmp(str1,"DZLAYFACTOR")){ badparam=StringToDouble(str2,&(params->dzlayfactor)); }else if(!strcmp(str1,"LAYCONST")){ badparam=StringToDouble(str2,&(params->layconst)); }else if(!strcmp(str1,"LAYFALLOFFCONST")){ badparam=StringToDouble(str2,&(params->layfalloffconst)); }else if(!strcmp(str1,"SIGSQSHORTMIN")){ badparam=StringToLong(str2,&(params->sigsqshortmin)); }else if(!strcmp(str1,"SIGSQLAYFACTOR")){ badparam=StringToDouble(str2,&(params->sigsqlayfactor)); }else if(!strcmp(str1,"DEFOAZDZFACTOR")){ badparam=StringToDouble(str2,&(params->defoazdzfactor)); }else if(!strcmp(str1,"DEFOTHRESHFACTOR")){ badparam=StringToDouble(str2,&(params->defothreshfactor)); }else if(!strcmp(str1,"DEFOMAX_CYCLE")){ badparam=StringToDouble(str2,&(params->defomax)); }else if(!strcmp(str1,"DEFOMAX_RAD")){ if(!(badparam=StringToDouble(str2,&(params->defomax)))){ params->defomax/=TWOPI; } }else if(!strcmp(str1,"SIGSQCORR")){ badparam=StringToDouble(str2,&(params->sigsqcorr)); }else if(!strcmp(str1,"DEFOLAYCONST") || !strcmp(str1,"DEFOCONST")){ badparam=StringToDouble(str2,&(params->defolayconst)); }else if(!strcmp(str1,"INITMAXFLOW")){ badparam=StringToLong(str2,&(params->initmaxflow)); }else if(!strcmp(str1,"ARCMAXFLOWCONST")){ badparam=StringToLong(str2,&(params->arcmaxflowconst)); }else if(!strcmp(str1,"MAXFLOW")){ badparam=StringToLong(str2,&(params->maxflow)); }else if(!strcmp(str1,"KROWEI") || !strcmp(str1,"KROW")){ badparam=StringToLong(str2,&(params->krowei)); }else if(!strcmp(str1,"KCOLEI") || !strcmp(str1,"KCOL")){ badparam=StringToLong(str2,&(params->kcolei)); }else if(!strcmp(str1,"KPERPDPSI")){ badparam=StringToLong(str2,&(params->kperpdpsi)); }else if(!strcmp(str1,"KPARDPSI")){ badparam=StringToLong(str2,&(params->kpardpsi)); }else if(!strcmp(str1,"THRESHOLD")){ badparam=StringToDouble(str2,&(params->threshold)); }else if(!strcmp(str1,"INITDZR")){ badparam=StringToDouble(str2,&(params->initdzr)); }else if(!strcmp(str1,"INITDZSTEP")){ badparam=StringToDouble(str2,&(params->initdzstep)); }else if(!strcmp(str1,"MAXCOST")){ badparam=StringToDouble(str2,&(params->maxcost)); }else if(!strcmp(str1,"COSTSCALE")){ badparam=StringToDouble(str2,&(params->costscale)); }else if(!strcmp(str1,"COSTSCALEAMBIGHT")){ badparam=StringToDouble(str2,&(params->costscaleambight)); }else if(!strcmp(str1,"DNOMINCANGLE")){ badparam=StringToDouble(str2,&(params->dnomincangle)); }else if(!strcmp(str1,"CS2SCALEFACTOR")){ badparam=StringToLong(str2,&(params->cs2scalefactor)); }else if(!strcmp(str1,"PIECEFIRSTROW")){ badparam=StringToLong(str2,&(params->piecefirstrow)); }else if(!strcmp(str1,"PIECEFIRSTCOL")){ badparam=StringToLong(str2,&(params->piecefirstcol)); }else if(!strcmp(str1,"PIECENROW")){ badparam=StringToLong(str2,&(params->piecenrow)); }else if(!strcmp(str1,"PIECENCOL")){ badparam=StringToLong(str2,&(params->piecencol)); }else if(!strcmp(str1,"NTILEROW")){ badparam=StringToLong(str2,&(params->ntilerow)); }else if(!strcmp(str1,"NTILECOL")){ badparam=StringToLong(str2,&(params->ntilecol)); }else if(!strcmp(str1,"ROWOVRLP")){ badparam=StringToLong(str2,&(params->rowovrlp)); }else if(!strcmp(str1,"COLOVRLP")){ badparam=StringToLong(str2,&(params->colovrlp)); }else if(!strcmp(str1,"TILECOSTTHRESH")){ badparam=StringToLong(str2,&(params->tilecostthresh)); }else if(!strcmp(str1,"MINREGIONSIZE")){ badparam=StringToLong(str2,&(params->minregionsize)); }else if(!strcmp(str1,"TILEEDGEWEIGHT")){ badparam=StringToDouble(str2,&(params->tileedgeweight)); }else if(!strcmp(str1,"SCNDRYARCFLOWMAX")){ badparam=StringToLong(str2,&(params->scndryarcflowmax)); }else if(!strcmp(str1,"ASSEMBLEONLY")){ if(!strcmp(str2,"FALSE")){ params->assembleonly=FALSE; }else{ params->assembleonly=TRUE; StrNCopy(params->tiledir,str2,MAXSTRLEN); } }else if(!strcmp(str1,"RMTMPTILE")){ badparam=SetBooleanSignedChar(&(params->rmtmptile),str2); }else if(!strcmp(str1,"MINCONNCOMPFRAC")){ badparam=StringToDouble(str2,&(params->minconncompfrac)); }else if(!strcmp(str1,"CONNCOMPTHRESH")){ badparam=StringToLong(str2,&(params->conncompthresh)); }else if(!strcmp(str1,"MAXNCOMPS")){ badparam=StringToLong(str2,&(params->maxncomps)); }else if(!strcmp(str1,"NSHORTCYCLE")){ badparam=StringToLong(str2,&(params->nshortcycle)); }else if(!strcmp(str1,"MAXNEWNODECONST")){ badparam=StringToDouble(str2,&(params->maxnewnodeconst)); }else if(!strcmp(str1,"MAXNFLOWCYCLES")){ badparam=StringToLong(str2,&(params->maxnflowcycles)); }else if(!strcmp(str1,"MAXCYCLEFRACTION")){ badparam=StringToDouble(str2,&(params->maxcyclefraction)); params->maxnflowcycles=USEMAXCYCLEFRACTION; }else if(!strcmp(str1,"SOURCEMODE")){ badparam=StringToLong(str2,&(params->sourcemode)); }else if(!strcmp(str1,"NPROC") || !strcmp(str1,"NTHREADS")){ badparam=StringToLong(str2,&(params->nthreads)); }else if(!strcmp(str1,"COSTINFILE")){ StrNCopy(infiles->costinfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"COSTOUTFILE")){ StrNCopy(outfiles->costoutfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"LOGFILE")){ StrNCopy(outfiles->logfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"INFILEFORMAT")){ if(!strcmp(str2,"COMPLEX_DATA")){ infiles->infileformat=COMPLEX_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->infileformat=FLOAT_DATA; }else if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->infileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->infileformat=ALT_SAMPLE_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"UNWRAPPEDINFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->unwrappedinfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->unwrappedinfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->unwrappedinfileformat=FLOAT_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"MAGFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->magfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->magfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->magfileformat=FLOAT_DATA; }else if(!strcmp(str2,"COMPLEX_DATA")){ infiles->magfileformat=COMPLEX_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"OUTFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ outfiles->outfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ outfiles->outfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ outfiles->outfileformat=FLOAT_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"CORRFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->corrfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->corrfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->corrfileformat=FLOAT_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"AMPFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->ampfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->ampfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->ampfileformat=FLOAT_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"ESTFILEFORMAT")){ if(!strcmp(str2,"ALT_LINE_DATA")){ infiles->estfileformat=ALT_LINE_DATA; }else if(!strcmp(str2,"ALT_SAMPLE_DATA")){ infiles->estfileformat=ALT_SAMPLE_DATA; }else if(!strcmp(str2,"FLOAT_DATA")){ infiles->estfileformat=FLOAT_DATA; }else{ badparam=TRUE; } }else if(!strcmp(str1,"INITFILE")){ StrNCopy(outfiles->initfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"FLOWFILE")){ StrNCopy(outfiles->flowfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"EIFILE")){ StrNCopy(outfiles->eifile,str2,MAXSTRLEN); }else if(!strcmp(str1,"ROWCOSTFILE")){ StrNCopy(outfiles->rowcostfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"COLCOSTFILE")){ StrNCopy(outfiles->colcostfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"MSTROWCOSTFILE")){ StrNCopy(outfiles->mstrowcostfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"MSTCOLCOSTFILE")){ StrNCopy(outfiles->mstcolcostfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"MSTCOSTSFILE")){ StrNCopy(outfiles->mstcostsfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"CORRDUMPFILE")){ StrNCopy(outfiles->corrdumpfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"RAWCORRDUMPFILE")){ StrNCopy(outfiles->rawcorrdumpfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"CONNCOMPFILE")){ StrNCopy(outfiles->conncompfile,str2,MAXSTRLEN); }else if(!strcmp(str1,"REGROWCONNCOMPS")){ badparam=SetBooleanSignedChar(&(params->regrowconncomps),str2); }else{ fprintf(sp0,"unrecognized configuration parameter '%s' (%s:%ld)\n", str1,conffile,nlines); exit(ABNORMAL_EXIT); } /* give an error if we had trouble interpreting the line */ if(badparam){ fprintf(sp0,"illegal argument %s for parameter %s (%s:%ld)\n", str2,str1,conffile,nlines); exit(ABNORMAL_EXIT); } } } /* finish up */ fclose(fp); if(nparams>1){ fprintf(sp1,"%ld parameters input from file %s (%ld lines total)\n", nparams,conffile,nlines); }else{ if(nlines>1){ fprintf(sp1,"%ld parameter input from file %s (%ld lines total)\n", nparams,conffile,nlines); }else{ fprintf(sp1,"%ld parameter input from file %s (%ld line total)\n", nparams,conffile,nlines); } } } /* function: WriteConfigLogFile() * ------------------------------ * Writes a text log file of configuration parameters and other * information. The log file is in a format compatible to be used as * a configuration file. */ void WriteConfigLogFile(int argc, char *argv[], infileT *infiles, outfileT *outfiles, long linelen, paramT *params){ FILE *fp; time_t t[1]; long k; char buf[MAXSTRLEN], *ptr; /* see if we need to write a log file */ if(strlen(outfiles->logfile)){ /* open the log file */ if((fp=fopen(outfiles->logfile,"w"))==NULL){ fprintf(sp0,"unable to write to log file %s\n",outfiles->logfile); exit(ABNORMAL_EXIT); } fprintf(sp1,"Logging run-time parameters to file %s\n",outfiles->logfile); /* print some run-time environment information */ fprintf(fp,"# %s v%s\n",PROGRAMNAME,VERSION); time(t); fprintf(fp,"# Log file generated %s",ctime(t)); ptr=getcwd(buf,MAXSTRLEN); if(ptr!=NULL){ fprintf(fp,"# Current working directory: %s\n",buf); }else{ fprintf(fp,"# Could not determine current working directory\n"); } fprintf(fp,"# Command line call:"); for(k=0;kinfile); fprintf(fp,"LINELENGTH %ld\n",linelen); LogStringParam(fp,"OUTFILE",outfiles->outfile); LogStringParam(fp,"WEIGHTFILE",infiles->weightfile); if(params->amplitude){ if(strlen(infiles->ampfile2)){ LogStringParam(fp,"AMPFILE1",infiles->ampfile); LogStringParam(fp,"AMPFILE2",infiles->ampfile2); }else{ LogStringParam(fp,"AMPFILE",infiles->ampfile); } }else{ if(strlen(infiles->ampfile2)){ LogStringParam(fp,"PWRFILE1",infiles->ampfile); LogStringParam(fp,"PWRFILE2",infiles->ampfile2); }else{ LogStringParam(fp,"PWRFILE",infiles->ampfile); } } LogStringParam(fp,"MAGFILE",infiles->magfile); LogStringParam(fp,"CORRFILE",infiles->corrfile); LogStringParam(fp,"ESTIMATEFILE",infiles->estfile); LogStringParam(fp,"COSTINFILE",infiles->costinfile); LogStringParam(fp,"COSTOUTFILE",outfiles->costoutfile); LogStringParam(fp,"LOGFILE",outfiles->logfile); if(params->costmode==TOPO){ fprintf(fp,"STATCOSTMODE TOPO\n"); }else if(params->costmode==DEFO){ fprintf(fp,"STATCOSTMODE DEFO\n"); }else if(params->costmode==SMOOTH){ fprintf(fp,"STATCOSTMODE SMOOTH\n"); }else if(params->costmode==NOSTATCOSTS){ fprintf(fp,"STATCOSTMODE NOSTATCOSTS\n"); } LogBoolParam(fp,"INITONLY",params->initonly); LogBoolParam(fp,"UNWRAPPED_IN",params->unwrapped); LogBoolParam(fp,"DEBUG",params->dumpall); if(params->initmethod==MSTINIT){ fprintf(fp,"INITMETHOD MST\n"); }else if(params->initmethod==MCFINIT){ fprintf(fp,"INITMETHOD MCF\n"); } LogBoolParam(fp,"VERBOSE",params->verbose); /* file formats */ fprintf(fp,"\n# File Formats\n"); LogFileFormat(fp,"INFILEFORMAT",infiles->infileformat); LogFileFormat(fp,"OUTFILEFORMAT",outfiles->outfileformat); LogFileFormat(fp,"AMPFILEFORMAT",infiles->ampfileformat); LogFileFormat(fp,"MAGFILEFORMAT",infiles->magfileformat); LogFileFormat(fp,"CORRFILEFORMAT",infiles->corrfileformat); LogFileFormat(fp,"ESTFILEFORMAT",infiles->estfileformat); LogFileFormat(fp,"UNWRAPPEDINFILEFORMAT",infiles->unwrappedinfileformat); /* SAR and geometry parameters */ fprintf(fp,"\n# SAR and Geometry Parameters\n"); fprintf(fp,"ALTITUDE %.8f\n", params->orbitradius-params->earthradius); fprintf(fp,"# ORBITRADIUS %.8f\n",params->orbitradius); fprintf(fp,"EARTHRADIUS %.8f\n",params->earthradius); if(params->bperp){ fprintf(fp,"BPERP %.8f\n",params->bperp); }else{ fprintf(fp,"BASELINE %.8f\n",params->baseline); fprintf(fp,"BASELINEANGLE_DEG %.8f\n", params->baselineangle*(180.0/PI)); } if(params->transmitmode==PINGPONG){ fprintf(fp,"TRANSMITMODE REPEATPASS\n"); }else if(params->transmitmode==SINGLEANTTRANSMIT){ fprintf(fp,"TRANSMITMODE SINGLEANTENNATRANSMIT\n"); } fprintf(fp,"NEARRANGE %.8f\n",params->nearrange); fprintf(fp,"DR %.8f\n",params->dr); fprintf(fp,"DA %.8f\n",params->da); fprintf(fp,"RANGERES %.8f\n",params->rangeres); fprintf(fp,"AZRES %.8f\n",params->azres); fprintf(fp,"LAMBDA %.8f\n",params->lambda); fprintf(fp,"NLOOKSRANGE %ld\n",params->nlooksrange); fprintf(fp,"NLOOKSAZ %ld\n",params->nlooksaz); fprintf(fp,"NLOOKSOTHER %ld\n",params->nlooksother); fprintf(fp,"NCORRLOOKS %.8f\n",params->ncorrlooks); fprintf(fp,"NCORRLOOKSRANGE %ld\n",params->ncorrlooksrange); fprintf(fp,"NCORRLOOKSAZ %ld\n",params->ncorrlooksaz); /* scattering model parameters */ fprintf(fp,"\n# Scattering model parameters\n"); fprintf(fp,"KDS %.8f\n",params->kds); fprintf(fp,"SPECULAREXP %.8f\n",params->specularexp); fprintf(fp,"DZRCRITFACTOR %.8f\n",params->dzrcritfactor); LogBoolParam(fp,"SHADOW",params->shadow); fprintf(fp,"DZEIMIN %.8f\n",params->dzeimin); fprintf(fp,"LAYWIDTH %ld\n",params->laywidth); fprintf(fp,"LAYMINEI %.8f\n",params->layminei); fprintf(fp,"SLOPERATIOFACTOR %.8f\n",params->sloperatiofactor); fprintf(fp,"SIGSQEI %.8f\n",params->sigsqei); /* decorrelation model paramters */ fprintf(fp,"\n# Decorrelation model parameters\n"); fprintf(fp,"DRHO %.8f\n",params->drho); fprintf(fp,"RHOSCONST1 %.8f\n",params->rhosconst1); fprintf(fp,"RHOSCONST2 %.8f\n",params->rhosconst2); fprintf(fp,"CSTD1 %.8f\n",params->cstd1); fprintf(fp,"CSTD2 %.8f\n",params->cstd2); fprintf(fp,"CSTD3 %.8f\n",params->cstd3); fprintf(fp,"DEFAULTCORR %.8f\n",params->defaultcorr); fprintf(fp,"RHOMINFACTOR %.8f\n",params->rhominfactor); /* PDF model paramters */ fprintf(fp,"\n# PDF model parameters\n"); fprintf(fp,"DZLAYPEAK %.8f\n",params->dzlaypeak); fprintf(fp,"AZDZFACTOR %.8f\n",params->azdzfactor); fprintf(fp,"DZEIFACTOR %.8f\n",params->dzeifactor); fprintf(fp,"DZEIWEIGHT %.8f\n",params->dzeiweight); fprintf(fp,"DZLAYFACTOR %.8f\n",params->dzlayfactor); fprintf(fp,"LAYCONST %.8f\n",params->layconst); fprintf(fp,"LAYFALLOFFCONST %.8f\n",params->layfalloffconst); fprintf(fp,"SIGSQSHORTMIN %ld\n",params->sigsqshortmin); fprintf(fp,"SIGSQLAYFACTOR %.8f\n",params->sigsqlayfactor); /* deformation mode paramters */ fprintf(fp,"\n# Deformation mode parameters\n"); fprintf(fp,"DEFOAZDZFACTOR %.8f\n",params->defoazdzfactor); fprintf(fp,"DEFOTHRESHFACTOR %.8f\n",params->defothreshfactor); fprintf(fp,"DEFOMAX_CYCLE %.8f\n",params->defomax); fprintf(fp,"SIGSQCORR %.8f\n",params->sigsqcorr); fprintf(fp,"DEFOCONST %.8f\n",params->defolayconst); /* algorithm parameters */ fprintf(fp,"\n# Algorithm parameters\n"); fprintf(fp,"INITMAXFLOW %ld\n",params->initmaxflow); fprintf(fp,"ARCMAXFLOWCONST %ld\n",params->arcmaxflowconst); fprintf(fp,"MAXFLOW %ld\n",params->maxflow); fprintf(fp,"KROWEI %ld\n",params->krowei); fprintf(fp,"KCOLEI %ld\n",params->kcolei); fprintf(fp,"KPARDPSI %ld\n",params->kpardpsi); fprintf(fp,"KPERPDPSI %ld\n",params->kperpdpsi); fprintf(fp,"THRESHOLD %.8f\n",params->threshold); fprintf(fp,"INITDZR %.8f\n",params->initdzr); fprintf(fp,"INITDZSTEP %.8f\n",params->initdzstep); fprintf(fp,"MAXCOST %.8f\n",params->maxcost); fprintf(fp,"COSTSCALE %.8f\n",params->costscale); fprintf(fp,"COSTSCALEAMBIGHT %.8f\n",params->costscaleambight); fprintf(fp,"DNOMINCANGLE %.8f\n",params->dnomincangle); fprintf(fp,"NSHORTCYCLE %ld\n",params->nshortcycle); fprintf(fp,"MAXNEWNODECONST %.8f\n",params->maxnewnodeconst); if(params->maxnflowcycles==USEMAXCYCLEFRACTION){ fprintf(fp,"MAXCYCLEFRACTION %.8f\n",params->maxcyclefraction); }else{ fprintf(fp,"MAXNFLOWCYCLES %ld\n",params->maxnflowcycles); } fprintf(fp,"SOURCEMODE %ld\n",params->sourcemode); fprintf(fp,"CS2SCALEFACTOR %ld\n",params->cs2scalefactor); /* file names for dumping intermediate arrays */ fprintf(fp,"\n# File names for dumping intermediate arrays\n"); LogStringParam(fp,"INITFILE",outfiles->initfile); LogStringParam(fp,"FLOWFILE",outfiles->flowfile); LogStringParam(fp,"EIFILE",outfiles->eifile); LogStringParam(fp,"ROWCOSTFILE",outfiles->rowcostfile); LogStringParam(fp,"COLCOSTFILE",outfiles->colcostfile); LogStringParam(fp,"MSTROWCOSTFILE",outfiles->mstrowcostfile); LogStringParam(fp,"MSTCOLCOSTFILE",outfiles->mstcolcostfile); LogStringParam(fp,"MSTCOSTSFILE",outfiles->mstcostsfile); LogStringParam(fp,"RAWCORRDUMPFILE",outfiles->rawcorrdumpfile); LogStringParam(fp,"CORRDUMPFILE",outfiles->corrdumpfile); /* piece extraction parameters */ if(params->ntilerow==1 && params->ntilecol==1){ fprintf(fp,"\n# Piece extraction parameters\n"); fprintf(fp,"PIECEFIRSTROW %ld\n",params->piecefirstrow+1); fprintf(fp,"PIECEFIRSTCOL %ld\n",params->piecefirstcol+1); fprintf(fp,"PIECENROW %ld\n",params->piecenrow); fprintf(fp,"PIECENCOL %ld\n",params->piecencol); }else{ fprintf(fp,"\n# Piece extraction parameters\n"); fprintf(fp,"# Parameters ignored because of tile mode\n"); fprintf(fp,"# PIECEFIRSTROW %ld\n",params->piecefirstrow); fprintf(fp,"# PIECEFIRSTCOL %ld\n",params->piecefirstcol); fprintf(fp,"# PIECENROW %ld\n",params->piecenrow); fprintf(fp,"# PIECENCOL %ld\n",params->piecencol); } /* tile control */ fprintf(fp,"\n# Tile control\n"); fprintf(fp,"NTILEROW %ld\n",params->ntilerow); fprintf(fp,"NTILECOL %ld\n",params->ntilecol); fprintf(fp,"ROWOVRLP %ld\n",params->rowovrlp); fprintf(fp,"COLOVRLP %ld\n",params->colovrlp); fprintf(fp,"NPROC %ld\n",params->nthreads); fprintf(fp,"TILECOSTTHRESH %ld\n",params->tilecostthresh); fprintf(fp,"MINREGIONSIZE %ld\n",params->minregionsize); fprintf(fp,"TILEEDGEWEIGHT %.8f\n",params->tileedgeweight); fprintf(fp,"SCNDRYARCFLOWMAX %ld\n",params->scndryarcflowmax); LogBoolParam(fp,"RMTMPTILE",params->rmtmptile); if(params->assembleonly){ LogStringParam(fp,"ASSEMBLEONLY",params->tiledir); }else{ fprintf(fp,"ASSEMBLEONLY FALSE\n"); } /* connected component control */ fprintf(fp,"\n# Connected component control\n"); LogStringParam(fp,"CONNCOMPFILE",outfiles->conncompfile); LogBoolParam(fp,"REGROWCONNCOMPS",params->regrowconncomps); fprintf(fp,"MINCONNCOMPFRAC %.8f\n",params->minconncompfrac); fprintf(fp,"CONNCOMPTHRESH %ld\n",params->conncompthresh); fprintf(fp,"MAXNCOMPS %ld\n",params->maxncomps); /* close the log file */ fclose(fp); } } /* function: LogStringParam() * -------------------------- * Writes a line to the log file stream for the given keyword/value * pair. */ void LogStringParam(FILE *fp, char *key, char *value){ /* see if we were passed a zero length value string */ if(strlen(value)){ fprintf(fp,"%s %s\n",key,value); fflush(fp); }else{ fprintf(fp,"# Empty value for parameter %s\n",key); } } /* LogBoolParam() * -------------- * Writes a line to the log file stream for the given keyword/bool * pair. */ void LogBoolParam(FILE *fp, char *key, signed char boolvalue){ if(boolvalue){ fprintf(fp,"%s TRUE\n",key); }else{ fprintf(fp,"%s FALSE\n",key); } } /* LogFileFormat() * --------------- * Writes a line to the log file stream for the given keyword/ * file format pair. */ void LogFileFormat(FILE *fp, char *key, signed char fileformat){ if(fileformat==COMPLEX_DATA){ fprintf(fp,"%s COMPLEX_DATA\n",key); }else if(fileformat==FLOAT_DATA){ fprintf(fp,"%s FLOAT_DATA\n",key); }else if(fileformat==ALT_LINE_DATA){ fprintf(fp,"%s ALT_LINE_DATA\n",key); }else if(fileformat==ALT_SAMPLE_DATA){ fprintf(fp,"%s ALT_SAMPLE_DATA\n",key); } } /* function: GetNLines() * --------------------- * Gets the number of lines of data in the input file based on the file * size. */ long GetNLines(infileT *infiles, long linelen){ FILE *fp; long filesize, datasize; /* get size of input file in rows and columns */ if((fp=fopen(infiles->infile,"r"))==NULL){ fprintf(sp0,"can't open file %s\n",infiles->infile); exit(ABNORMAL_EXIT); } fseek(fp,0,SEEK_END); filesize=ftell(fp); fclose(fp); if(infiles->infileformat==FLOAT_DATA){ datasize=sizeof(float); }else{ datasize=2*sizeof(float); } if(filesize % (datasize*linelen)){ fprintf(sp0,"extra data in file %s (bad linelength?)\n", infiles->infile); exit(ABNORMAL_EXIT); } return(filesize/(datasize*linelen)); /* implicit floor */ } /* function: WriteOutputFile() * --------------------------- * Writes the unwrapped phase to the output file specified, in the * format given in the parameter structure. */ void WriteOutputFile(float **mag, float **unwrappedphase, char *outfile, outfileT *outfiles, long nrow, long ncol){ if(outfiles->outfileformat==ALT_LINE_DATA){ WriteAltLineFile(mag,unwrappedphase,outfile,nrow,ncol); }else if(outfiles->outfileformat==ALT_SAMPLE_DATA){ WriteAltSampFile(mag,unwrappedphase,outfile,nrow,ncol); }else if(outfiles->outfileformat==FLOAT_DATA){ Write2DArray((void **)unwrappedphase,outfile, nrow,ncol,sizeof(float)); }else{ fprintf(sp0,"WARNING: Illegal format specified for output file\n"); fprintf(sp0," using default floating-point format\n"); Write2DArray((void **)unwrappedphase,outfile, nrow,ncol,sizeof(float)); } } /* function: OpenOutputFile() * -------------------------- * Opens a file for writing. If unable to open the file, tries to * open a file in a dump path. The name of the opened output file * is written into the string realoutfile, for which at least * MAXSTRLEN bytes should already be allocated. */ FILE *OpenOutputFile(char *outfile, char *realoutfile){ char path[MAXSTRLEN], basename[MAXSTRLEN], dumpfile[MAXSTRLEN]; FILE *fp; if((fp=fopen(outfile,"w"))==NULL){ /* if we can't write to the out file, get the file name from the path */ /* and dump to the default path */ ParseFilename(outfile,path,basename); StrNCopy(dumpfile,DUMP_PATH,MAXSTRLEN); strcat(dumpfile,basename); if((fp=fopen(dumpfile,"w"))!=NULL){ fprintf(sp0,"WARNING: Can't write to file %s. Dumping to file %s\n", outfile,dumpfile); StrNCopy(realoutfile,dumpfile,MAXSTRLEN); }else{ fprintf(sp0,"Unable to write to file %s or dump to file %s\nAbort\n", outfile,dumpfile); exit(ABNORMAL_EXIT); } }else{ StrNCopy(realoutfile,outfile,MAXSTRLEN); } return(fp); } /* function: WriteAltLineFile() * ---------------------------- * Writes magnitude and phase data from separate arrays to file. * Data type is float. For each line of data, a full line of magnitude data * is written, then a full line of phase data. Dumps the file to a * default directory if the file name/path passed in cannot be used. */ void WriteAltLineFile(float **mag, float **phase, char *outfile, long nrow, long ncol){ int row; FILE *fp; char realoutfile[MAXSTRLEN]; fp=OpenOutputFile(outfile,realoutfile); for(row=0; rownrow; ncol=tileparams->ncol; /* check data size */ if(tileparams->ncol>LARGESHORT || tileparams->nrow>LARGESHORT){ fprintf(sp0,"one or more interferogram dimensions too large\n"); exit(ABNORMAL_EXIT); } if(tileparams->ncol<2 || tileparams->nrow<2){ fprintf(sp0,"input interferogram must be at least 2x2\n"); exit(ABNORMAL_EXIT); } /* is the input file already unwrapped? */ if(!params->unwrapped){ /* read wrapped phase and possibly interferogram magnitude data */ fprintf(sp1,"Reading wrapped phase from file %s\n",infiles->infile); if(infiles->infileformat==COMPLEX_DATA){ ReadComplexFile(&mag,&wrappedphase,infiles->infile, linelen,nlines,tileparams); }else if(infiles->infileformat==ALT_LINE_DATA){ ReadAltLineFile(&mag,&wrappedphase,infiles->infile, linelen,nlines,tileparams); }else if(infiles->infileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&mag,&wrappedphase,infiles->infile, linelen,nlines,tileparams); }else if(infiles->infileformat==FLOAT_DATA){ Read2DArray((void ***)&wrappedphase,infiles->infile,linelen,nlines, tileparams,sizeof(float *),sizeof(float)); }else{ fprintf(sp0,"illegal input file format specification\n"); exit(ABNORMAL_EXIT); } /* check to make sure the input data doesn't contain NaNs or infs */ if(!ValidDataArray(wrappedphase,nrow,ncol) || (mag!=NULL && !ValidDataArray(mag,nrow,ncol))){ fprintf(sp0,"NaN or infinity found in input float data\nAbort\n"); exit(ABNORMAL_EXIT); } /* flip the sign of the wrapped phase if flip flag is set */ FlipPhaseArraySign(wrappedphase,params,nrow,ncol); /* make sure the wrapped phase is properly wrapped */ WrapPhase(wrappedphase,nrow,ncol); }else{ /* read unwrapped phase input */ fprintf(sp1,"Reading unwrapped phase from file %s\n",infiles->infile); if(infiles->unwrappedinfileformat==ALT_LINE_DATA){ ReadAltLineFile(&mag,&unwrappedphase,infiles->infile, linelen,nlines,tileparams); }else if(infiles->unwrappedinfileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&mag,&unwrappedphase,infiles->infile, linelen,nlines,tileparams); }else if(infiles->unwrappedinfileformat==FLOAT_DATA){ Read2DArray((void ***)&unwrappedphase,infiles->infile,linelen,nlines, tileparams,sizeof(float *),sizeof(float)); }else{ fprintf(sp0,"Illegal input file format specification\nAbort\n"); exit(ABNORMAL_EXIT); } /* check to make sure the input data doesn't contain NaNs or infs */ if(!ValidDataArray(unwrappedphase,nrow,ncol) || (mag!=NULL && !ValidDataArray(mag,nrow,ncol))){ fprintf(sp0,"NaN or infinity found in input float data\nAbort\n"); exit(ABNORMAL_EXIT); } /* flip the sign of the input unwrapped phase if flip flag is set */ FlipPhaseArraySign(unwrappedphase,params,nrow,ncol); /* parse flows of unwrapped phase */ wrappedphase=ExtractFlow(unwrappedphase,&flows,nrow,ncol); /* free unwrapped phase array to save memory */ Free2DArray((void **)unwrappedphase,nrow); } /* get memory for mag (power) image and set to unity if not passed */ if(mag==NULL){ mag=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); for(row=0;rowmagfile)){ fprintf(sp1,"Reading interferogram magnitude from file %s\n", infiles->magfile); if(infiles->magfileformat==FLOAT_DATA){ Read2DArray((void ***)&mag,infiles->magfile,linelen,nlines,tileparams, sizeof(float *),sizeof(float)); }else if(infiles->magfileformat==COMPLEX_DATA){ ReadComplexFile(&mag,&dummy,infiles->magfile,linelen,nlines, tileparams); }else if(infiles->magfileformat==ALT_LINE_DATA){ ReadAltLineFile(&mag,&dummy,infiles->magfile,linelen,nlines, tileparams); }else if(infiles->magfileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&mag,&dummy,infiles->magfile,linelen,nlines, tileparams); } } if(dummy!=NULL){ Free2DArray((void **)dummy,tileparams->nrow); } } /* function: ReadUnwrappedEstimateFile() * ------------------------------------- * Reads the unwrapped-phase estimate from a file (assumes file name exists). */ void ReadUnwrappedEstimateFile(float ***unwrappedestptr, infileT *infiles, long linelen, long nlines, paramT *params, tileparamT *tileparams){ float **dummy; long nrow, ncol; /* initialize */ dummy=NULL; nrow=tileparams->nrow; ncol=tileparams->ncol; /* read data */ fprintf(sp1,"Reading coarse unwrapped estimate from file %s\n", infiles->estfile); if(infiles->estfileformat==ALT_LINE_DATA){ ReadAltLineFilePhase(unwrappedestptr,infiles->estfile, linelen,nlines,tileparams); }else if(infiles->estfileformat==FLOAT_DATA){ Read2DArray((void ***)unwrappedestptr,infiles->estfile,linelen,nlines, tileparams,sizeof(float *),sizeof(float)); }else if(infiles->estfileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&dummy,unwrappedestptr,infiles->estfile, linelen,nlines,tileparams); }else{ fprintf(sp0,"Illegal file format specification for file %s\nAbort\n", infiles->estfile); } if(dummy!=NULL){ Free2DArray((void **)dummy,nrow); } /* make sure data is valid */ if(!ValidDataArray(*unwrappedestptr,nrow,ncol)){ fprintf(sp0,"Infinity or NaN found in file %s\nAbort\n",infiles->estfile); exit(ABNORMAL_EXIT); } /* flip the sign of the unwrapped estimate if the flip flag is set */ FlipPhaseArraySign(*unwrappedestptr,params,nrow,ncol); } /* function: ReadWeightsFile() * --------------------------- * Read in weights form rowcol format file of short ints. */ void ReadWeightsFile(short ***weightsptr,char *weightfile, long linelen, long nlines, tileparamT *tileparams){ long row, col, nrow, ncol; short **rowweight, **colweight; signed char printwarning; /* set up and read data */ nrow=tileparams->nrow; ncol=tileparams->ncol; if(strlen(weightfile)){ fprintf(sp1,"Reading weights from file %s\n",weightfile); Read2DRowColFile((void ***)weightsptr,weightfile,linelen,nlines, tileparams,sizeof(short)); rowweight=*weightsptr; colweight=&(*weightsptr)[nrow-1]; printwarning=FALSE; for(row=0;rownrow; ncol=tileparams->ncol; pwr=NULL; pwr1=NULL; pwr2=NULL; /* read the data */ if(strlen(infiles->ampfile2)){ /* data is given in two separate files */ fprintf(sp1,"Reading brightness data from files %s and %s\n", infiles->ampfile,infiles->ampfile2); if(infiles->ampfileformat==FLOAT_DATA){ Read2DArray((void ***)&pwr1,infiles->ampfile,linelen,nlines,tileparams, sizeof(float *),sizeof(float)); Read2DArray((void ***)&pwr2,infiles->ampfile2,linelen,nlines,tileparams, sizeof(float *),sizeof(float)); }else{ fprintf(sp0,"Illegal file formats specified for files %s, %s\nAbort\n", infiles->ampfile,infiles->ampfile2); exit(ABNORMAL_EXIT); } }else{ /* data is in single file */ fprintf(sp1,"Reading brightness data from file %s\n",infiles->ampfile); if(infiles->ampfileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&pwr1,&pwr2,infiles->ampfile,linelen,nlines, tileparams); }else if(infiles->ampfileformat==ALT_LINE_DATA){ ReadAltLineFile(&pwr1,&pwr2,infiles->ampfile,linelen,nlines, tileparams); }else if(infiles->ampfileformat==FLOAT_DATA){ Read2DArray((void ***)&pwr,infiles->ampfile,linelen,nlines,tileparams, sizeof(float *),sizeof(float)); pwr1=NULL; pwr2=NULL; }else{ fprintf(sp0,"Illegal file format specified for file %s\nAbort\n", infiles->ampfile); exit(ABNORMAL_EXIT); } } /* check data validity */ if((pwr1!=NULL && !ValidDataArray(pwr1,nrow,ncol)) || (pwr2!=NULL && !ValidDataArray(pwr2,nrow,ncol)) || (pwr!=NULL && !ValidDataArray(pwr,nrow,ncol))){ fprintf(sp0,"Infinity or NaN found in amplitude or power data\nAbort\n"); exit(ABNORMAL_EXIT); } /* if data is amplitude, square to get power */ if(params->amplitude){ for(row=0;rownrow; dummy=NULL; corr=NULL; /* read the data */ fprintf(sp1,"Reading correlation data from file %s\n",infiles->corrfile); if(infiles->corrfileformat==ALT_SAMPLE_DATA){ ReadAltSampFile(&dummy,&corr,infiles->corrfile,linelen,nlines,tileparams); }else if(infiles->corrfileformat==ALT_LINE_DATA){ ReadAltLineFilePhase(&corr,infiles->corrfile,linelen,nlines,tileparams); }else if(infiles->corrfileformat==FLOAT_DATA){ Read2DArray((void ***)&corr,infiles->corrfile,linelen,nlines,tileparams, sizeof(float *),sizeof(float)); }else{ fprintf(sp0,"Illegal file format specified for file %s\nAbort\n", infiles->corrfile); exit(ABNORMAL_EXIT); } /* set output pointer and free memory */ if(dummy!=NULL){ Free2DArray((void **)dummy,nrow); } *corrptr=corr; } /* function: ReadAltLineFile() * --------------------------- * Read in the data from a file containing magnitude and phase * data. File should have one line of magnitude data, one line * of phase data, another line of magnitude data, etc. * ncol refers to the number of complex elements in one line of * data. */ void ReadAltLineFile(float ***mag, float ***phase, char *alfile, long linelen, long nlines, tileparamT *tileparams){ FILE *fp; long filesize,row,nrow,ncol,padlen; /* open the file */ if((fp=fopen(alfile,"r"))==NULL){ fprintf(sp0,"Can't open file %s\nAbort\n",alfile); exit(ABNORMAL_EXIT); } /* get number of lines based on file size and line length */ fseek(fp,0,SEEK_END); filesize=ftell(fp); if(filesize!=(2*nlines*linelen*sizeof(float))){ fprintf(sp0,"File %s wrong size (%ldx%ld array expected)\nAbort\n", alfile,nlines,linelen); exit(ABNORMAL_EXIT); } fseek(fp,0,SEEK_SET); /* get memory */ nrow=tileparams->nrow; ncol=tileparams->ncol; if(*mag==NULL){ (*mag)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } if(*phase==NULL){ (*phase)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } /* read the data */ fseek(fp,(tileparams->firstrow*2*linelen+tileparams->firstcol) *sizeof(float),SEEK_CUR); padlen=(linelen-ncol)*sizeof(float); for(row=0; rownrow; ncol=tileparams->ncol; if(*phase==NULL){ (*phase)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } /* read the phase data */ fseek(fp,(tileparams->firstrow*2*linelen+linelen +tileparams->firstcol)*sizeof(float),SEEK_CUR); padlen=(2*linelen-ncol)*sizeof(float); for(row=0; rownrow; ncol=tileparams->ncol; if(*mag==NULL){ (*mag)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } if(*phase==NULL){ (*phase)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } inpline=(float *)MAlloc(2*ncol*sizeof(float)); /* read the data and convert to magnitude and phase */ fseek(fp,(tileparams->firstrow*linelen+tileparams->firstcol) *2*sizeof(float),SEEK_CUR); padlen=(linelen-ncol)*2*sizeof(float); for(row=0; row=TWOPI){ (*phase)[row][col]-=TWOPI; } } fseek(fp,padlen,SEEK_CUR); } free(inpline); fclose(fp); } /* function: Read2DArray() * ------------------------- * Reads file of real data of size elsize. Assumes the native byte order * of the platform. */ void Read2DArray(void ***arr, char *infile, long linelen, long nlines, tileparamT *tileparams, size_t elptrsize, size_t elsize){ FILE *fp; long filesize,row,nrow,ncol,padlen; /* open the file */ if((fp=fopen(infile,"r"))==NULL){ fprintf(sp0,"Can't open file %s\nAbort\n",infile); exit(ABNORMAL_EXIT); } /* get number of lines based on file size and line length */ fseek(fp,0,SEEK_END); filesize=ftell(fp); if(filesize!=(nlines*linelen*elsize)){ fprintf(sp0,"File %s wrong size (%ldx%ld array expected)\nAbort\n", infile,nlines,linelen); exit(ABNORMAL_EXIT); } fseek(fp,0,SEEK_SET); /* get memory */ nrow=tileparams->nrow; ncol=tileparams->ncol; if(*arr==NULL){ (*arr)=(void **)Get2DMem(nrow,ncol,elptrsize,elsize); } /* read the data */ fseek(fp,(linelen*tileparams->firstrow+tileparams->firstcol) *elsize,SEEK_CUR); padlen=(linelen-ncol)*elsize; for(row=0; rownrow; ncol=tileparams->ncol; if(*arr1==NULL){ (*arr1)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } if(*arr2==NULL){ (*arr2)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } inpline=(float *)MAlloc(2*ncol*sizeof(float)); /* read the data */ fseek(fp,(tileparams->firstrow*linelen+tileparams->firstcol) *2*sizeof(float),SEEK_CUR); padlen=(linelen-ncol)*2*sizeof(float); for(row=0; rownrow; ncol=tileparams->ncol; if(*arr==NULL){ (*arr)=Get2DRowColMem(nrow,ncol,sizeof(void *),size); } /* read arrays */ fseek(fp,(linelen*tileparams->firstrow+tileparams->firstcol) *size,SEEK_SET); padlen=(linelen-ncol)*size; for(row=0; rowfirstrow +tileparams->firstcol)*size,SEEK_SET); for(row=nrow-1; row<2*nrow-1; row++){ if(fread((*arr)[row],size,ncol-1,fp)!=ncol-1){ fprintf(sp0,"Error while reading from file %s\nAbort\n",filename); exit(ABNORMAL_EXIT); } fseek(fp,padlen,SEEK_CUR); } fclose(fp); } /* function: Read2DRowColFileRows() * -------------------------------- * Similar to Read2DRowColFile(), except reads only row (horizontal) data * at specified locations. tileparams->nrow is treated as the number of * rows of data to be read from the RowCol file, not the number of * equivalent rows in the orginal pixel file (whose arcs are represented * in the RowCol file). */ void Read2DRowColFileRows(void ***arr, char *filename, long linelen, long nlines, tileparamT *tileparams, size_t size){ FILE *fp; long row, nel, nrow, ncol, padlen, filelen; /* open the file */ if((fp=fopen(filename,"r"))==NULL){ fprintf(sp0,"Can't open file %s\nAbort\n",filename); exit(ABNORMAL_EXIT); } /* get number of data elements in file */ fseek(fp,0,SEEK_END); filelen=ftell(fp); fseek(fp,0,SEEK_SET); nel=(long )(filelen/size); /* check file size */ if(2*linelen*nlines-nlines-linelen != nel || (filelen % size)){ fprintf(sp0,"File %s wrong size (%ld elements expected)\nAbort\n", filename,2*linelen*nlines-nlines-linelen); exit(ABNORMAL_EXIT); } /* get memory if passed pointer is NULL */ nrow=tileparams->nrow; ncol=tileparams->ncol; if(*arr==NULL){ (*arr)=Get2DMem(nrow,ncol,sizeof(void *),size); } /* read arrays */ fseek(fp,(linelen*tileparams->firstrow+tileparams->firstcol) *size,SEEK_SET); padlen=(linelen-ncol)*size; for(row=0; rowdumpall){ if(!strlen(outfiles->initfile)){ StrNCopy(outfiles->initfile,DUMP_INITFILE,MAXSTRLEN); } if(!strlen(outfiles->flowfile)){ StrNCopy(outfiles->flowfile,DUMP_FLOWFILE,MAXSTRLEN); } if(!strlen(outfiles->eifile)){ StrNCopy(outfiles->eifile,DUMP_EIFILE,MAXSTRLEN); } if(!strlen(outfiles->rowcostfile)){ StrNCopy(outfiles->rowcostfile,DUMP_ROWCOSTFILE,MAXSTRLEN); } if(!strlen(outfiles->colcostfile)){ StrNCopy(outfiles->colcostfile,DUMP_COLCOSTFILE,MAXSTRLEN); } if(!strlen(outfiles->mstrowcostfile)){ StrNCopy(outfiles->mstrowcostfile,DUMP_MSTROWCOSTFILE,MAXSTRLEN); } if(!strlen(outfiles->mstcolcostfile)){ StrNCopy(outfiles->mstcolcostfile,DUMP_MSTCOLCOSTFILE,MAXSTRLEN); } if(!strlen(outfiles->mstcostsfile)){ StrNCopy(outfiles->mstcostsfile,DUMP_MSTCOSTSFILE,MAXSTRLEN); } if(!strlen(outfiles->corrdumpfile)){ StrNCopy(outfiles->corrdumpfile,DUMP_CORRDUMPFILE,MAXSTRLEN); } if(!strlen(outfiles->rawcorrdumpfile)){ StrNCopy(outfiles->rawcorrdumpfile,DUMP_RAWCORRDUMPFILE,MAXSTRLEN); } } } /* function: SetStreamPointers() * ----------------------------- * Sets the default stream pointers (global variables). */ void SetStreamPointers(void){ fflush(NULL); if((sp0=DEF_ERRORSTREAM)==NULL){ if((sp0=fopen(NULLFILE,"w"))==NULL){ fprintf(sp0,"unable to open null file %s\n",NULLFILE); exit(ABNORMAL_EXIT); } } if((sp1=DEF_OUTPUTSTREAM)==NULL){ if((sp1=fopen(NULLFILE,"w"))==NULL){ fprintf(sp0,"unable to open null file %s\n",NULLFILE); exit(ABNORMAL_EXIT); } } if((sp2=DEF_VERBOSESTREAM)==NULL){ if((sp2=fopen(NULLFILE,"w"))==NULL){ fprintf(sp0,"unable to open null file %s\n",NULLFILE); exit(ABNORMAL_EXIT); } } if((sp3=DEF_COUNTERSTREAM)==NULL){ if((sp3=fopen(NULLFILE,"w"))==NULL){ fprintf(sp0,"unable to open null file %s\n",NULLFILE); exit(ABNORMAL_EXIT); } } } /* function: SetVerboseOut() * ------------------------- * Set the global stream pointer sp2 to be stdout if the verbose flag * is set in the parameter data type. */ void SetVerboseOut(paramT *params){ fflush(NULL); if(params->verbose){ if(sp2!=stdout && sp2!=stderr && sp2!=stdin && sp2!=NULL){ fclose(sp2); } sp2=stdout; if(sp3!=stdout && sp3!=stderr && sp3!=stdin && sp3!=NULL){ fclose(sp3); } sp3=stdout; } } /* function: ChildResetStreamPointers() * ----------------------------------- * Reset the global stream pointers for a child. Streams equal to stdout * are directed to a log file, and errors are written to the screen. */ void ChildResetStreamPointers(pid_t pid, long tilerow, long tilecol, paramT *params){ FILE *logfp; char logfile[MAXSTRLEN], cwd[MAXSTRLEN]; fflush(NULL); sprintf(logfile,"%s/%s%ld_%ld",params->tiledir,LOGFILEROOT,tilerow,tilecol); if((logfp=fopen(logfile,"w"))==NULL){ fprintf(sp0,"Unable to open log file %s\nAbort\n",logfile); exit(ABNORMAL_EXIT); } fprintf(logfp,"%s (pid %ld): unwrapping tile at row %ld, column %ld\n\n", PROGRAMNAME,(long )pid,tilerow,tilecol); if(getcwd(cwd,MAXSTRLEN)!=NULL){ fprintf(logfp,"Current working directory is %s\n",cwd); } if(sp2==stdout || sp2==stderr){ sp2=logfp; } if(sp1==stdout || sp1==stderr){ sp1=logfp; } if(sp0==stdout || sp0==stderr){ sp0=logfp; } if(sp3!=stdout && sp3!=stderr && sp3!=stdin && sp3!=NULL){ fclose(sp3); } if((sp3=fopen(NULLFILE,"w"))==NULL){ fprintf(sp0,"Unable to open null file %s\n",NULLFILE); exit(ABNORMAL_EXIT); } } /* function: DumpIncrCostFiles() * ----------------------------- * Dumps incremental cost arrays, creating file names for them. */ void DumpIncrCostFiles(incrcostT **incrcosts, long iincrcostfile, long nflow, long nrow, long ncol){ long row, col, maxcol; char incrcostfile[MAXSTRLEN]; char tempstr[MAXSTRLEN]; short **tempcosts; /* get memory for tempcosts */ tempcosts=(short **)Get2DRowColMem(nrow,ncol,sizeof(short *),sizeof(short)); /* create the file names and dump the files */ /* snprintf() is more elegant, but its unavailable on some machines */ for(row=0;row<2*nrow-1;row++){ if(rowoutfile,path,basename); sprintf(params->tiledir,"%s%s%ld",path,TMPTILEDIRROOT,(long )getpid()); /* create tile directory */ fprintf(sp1,"Creating temporary directory %s\n",params->tiledir); if(mkdir(params->tiledir,TILEDIRMODE)){ fprintf(sp0,"Error creating directory %s\nAbort\n",params->tiledir); exit(ABNORMAL_EXIT); } } /* function: ParseFilename() * ------------------------- * Given a filename, separates it into path and base filename. Output * buffers should be at least MAXSTRLEN characters, and filename buffer * should be no more than MAXSTRLEN characters. The output path * has a trailing "/" character. */ void ParseFilename(char *filename, char *path, char *basename){ char tempstring[MAXSTRLEN]; char *tempouttok; /* make sure we have a nonzero filename */ if(!strlen(filename)){ fprintf(sp0,"Zero-length filename passed to ParseFilename()\nAbort\n"); exit(ABNORMAL_EXIT); } /* initialize path */ if(filename[0]=='/'){ StrNCopy(path,"/",MAXSTRLEN); }else{ StrNCopy(path,"",MAXSTRLEN); } /* parse the filename */ StrNCopy(tempstring,filename,MAXSTRLEN); tempouttok=strtok(tempstring,"/"); while(TRUE){ StrNCopy(basename,tempouttok,MAXSTRLEN); if((tempouttok=strtok(NULL,"/"))==NULL){ break; } strcat(path,basename); strcat(path,"/"); } /* make sure we have a nonzero base filename */ if(!strlen(basename)){ fprintf(sp0,"Zero-length base filename found in ParseFilename()\nAbort\n"); exit(ABNORMAL_EXIT); } } GMTSAR_V5.7/.svn/pristine/8b/8b3a7038d68be407365156e04744b2f0c0408e3a.svn-base000444 015705 000000 00000012551 13505462013 025363 0ustar00sandwellwheel000000 000000 /* $Id: phase2topo.c 74 2013-04-21 02:57:20Z pwessel $ */ /***************************************************************************/ /* phase2topo reads residual phase and computes residual topography. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 10 July, 1999 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE: Nov 23 2012 - modified to Use GMT i/o functions [P.Wessel] * * DATE: Nov 9 2010 - modified to read and write grd files * * - use a linear relationship between the stacked * * residual phase and DEM corrections * * - this linear relationship is valid because the * * deviations from the SRTM is small (a few meters) * * by Xiaopeng * ***************************************************************************/ #include "gmtsar.h" char *USAGE = "phase2topo [GMTSAR] - Compute residual topography\n\n" "Usage: phase2topo master.PRM topo_in.grd res_phase.grd topo_out.grd \n \n" " master.PRM - master PRM files used for mapping \n" " topo_in.grd - name of input topography in the radar co-ordinates of " "the master. \n" " res_phase.grd - name of input phase per unit baseline\n" " topo_out.grd - name of output corrected topography in the radar " "co-ordinates of the master. \n\n" " Note the residual phase should be scaled by the perpendicular " "baseline (see bperp). \n"; void calc_phase2topo(int xdim, double range0, double drange, double re, double height, float *scale, float *res) { int k; double rho, etat; double sint, c, c2, ret, ret2; c = re + height; c2 = c * c; for (k = 0; k < xdim; k++) { ret = re + scale[k]; ret2 = ret * ret; rho = range0 + k * drange; etat = ((rho * rho + c2 - ret2) / (2. * rho * c)); if (etat >= 1.) die("eta >= 0", ""); sint = sqrt(1. - etat * etat); scale[k] = (float)(res[k] * rho * c * sint / ret); /* printf("ret = %f res[k] = %f rho = %f c = %f sint = %f scale * = %f \n", ret, res[k], rho, c, sint, scale[k]); */ } } int main(int argc, char **argv) { unsigned int col, row; uint64_t node; int ixdec; float *scale = NULL, *res = NULL; double drange, cnst; struct PRM prm; void *API = NULL; /* GMT control structure */ struct GMT_GRID *P = NULL, *T = NULL; /* Grid structure containing ->header and ->data */ debug = 0; if (argc < 5) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; /* Get header from grd rat file */ if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* Get header from residual phase file */ if ((P = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[3], NULL)) == NULL) return EXIT_FAILURE; /* Make sure the topo and residual phase have the same dimensions */ if (!(T->header->nx == P->header->nx && T->header->ny == P->header->ny)) { die("\n", "topo and residue phase should have the same dimensions. \n"); } get_prm(&prm, argv[1]); /* Open and read PRM file */ /* allocate the memory for work arrays */ scale = malloc(T->header->nx * sizeof(float)); res = malloc(T->header->nx * sizeof(float)); ixdec = (int)prm.num_rng_bins / T->header->nx; drange = ixdec * SOL / (2.0 * prm.fs); cnst = -prm.lambda / 4.0 / M_PI; /* Read the two grids into P->data and T->data which automatically are * allocated */ if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[2], T) == NULL) return EXIT_FAILURE; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[3], P) == NULL) return EXIT_FAILURE; for (row = 0; row < T->header->ny; row++) { /* For each row */ for (col = 0; col < T->header->nx; col++) { /* For each column, get node number */ node = GMT_Get_Index(API, T->header, row, col); scale[col] = T->data[node]; res[col] = P->data[node]; } calc_phase2topo(T->header->nx, prm.near_range, drange, prm.RE, prm.ht, scale, res); for (col = 0; col < T->header->nx; col++) { /* For each column, get node number */ node = GMT_Get_Index(API, T->header, row, col); T->data[node] += (float)(cnst * scale[col] + T->data[node]); } } /* Write the output grd file */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[4], T)) return EXIT_FAILURE; if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/8b/8bf46aad081af8b63d8a0188558a7a45a9bca488.svn-base000444 015705 000000 00000001570 13505462013 025763 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # by Xiaohua XU, 03/06/2018 # if ($#argv != 3) then echo "" echo "Usage: intf_tops_parallel.csh intf.in batch.config Ncores" echo "" echo " Run intf jobs parallelly. Need to install GNU parallel first." echo " e.g. sudo port install parallel" echo "" exit endif rm -f intf_tops.cmd set t1 = `date` set ncores = $3 foreach intf (`awk '{print $0}' $1`) set date1 = `echo $intf |awk -F":" '{print $1}'|cut -c 4-11` set date2 = `echo $intf |awk -F":" '{print $2}'|cut -c 4-11` set logfile = "intf_"$date1"_"$date2".log" set infile = "intf_"$date1"_"$date2".in" echo $intf > $infile echo "intf_tops.csh $infile $2 > $logfile" >> intf_tops.cmd end parallel --jobs $ncores < intf_tops.cmd set t2 = `date` set dir0 = `pwd` #echo "Job started on $t1 and finishe don $t2 at $dir0 "|mail -s "TOPS intfs job finished" balabala@gmail.com GMTSAR_V5.7/.svn/pristine/78/7818c1d2156c7dcb55460ac1e1090a42f9031553.svn-base000444 015705 000000 00000003644 13505462014 025304 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine used to call and initialize perflib Fortran FFT * * routines in a Sun computer. * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography * * Date : 12/27/96 * ************************************************************************/ /************************************************************************ * Modification history: * * 04/01/98 - changed to have arguments be pointers (Fotran callable) * * * * DATE * ************************************************************************/ #include "../include/soi.h" #include cfft1d_(np, c, dir) int *np, *dir; fcomplex *c; { static float *work; static int nold = 0; int i, n; /* Initialize work array with sines and cosines to save CPU time later This is done when the length of the FFT has changed or when *dir == 0. */ n = *np; if ((n != nold) || (*dir == 0)) { if (nold != 0) free((char *)work); if ((work = (float *)malloc((4 * n + 30) * sizeof(float))) == NULL) { fprintf(stderr, "Sorry, can't allocate mem.\n"); return (-1); } cffti_(np, work); nold = n; } /* Do forward transform with NO normalization. Forward is exp(+i*k*x) */ if (*dir == -1) { cfftf_(np, c, work); } /* Do inverse transform with normalization. Inverse is exp(-i*k*x) */ if (*dir == 1) { cfftb_(np, c, work); for (i = 0; i < n; i++) { c[i].r = c[i].r / ((float)n); c[i].i = c[i].i / ((float)n); } } } GMTSAR_V5.7/.svn/pristine/78/78bbc92a0181854edb95bc7a6d52039d53c86fc9.svn-base000444 015705 000000 00000025610 13505462013 025637 0ustar00sandwellwheel000000 000000 /**************************************************************************** * Subroutine to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/15/09 - modifed to correct the contradiction of range sampling rate * * between FBS and FBD mode. ****************************************************************************/ #include "gmtsar.h" #include "llt2xyz.h" #include "orbit.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 void set_prm_defaults(struct PRM *); void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void hermite_c(double *, double *, double *, int, int, double, double *, int *); void llt2rat_sub(char *filename, double *target_llt, double *target_rat) { double rln, rlt, rht, dr, t1, t2, tm; // double ts,rng, thet, relp, telp; double ts, rng; double xp[3]; double xt[3]; double rp[3]; /* double r0,rf,a0,af; */ // double rad=PI/180.; double fll, rdd, daa, drr; int j, nrec, npad = 8000; int goldop(); int stai, endi, midi; double **orb_pos; struct PRM prm; struct SAT_ORB *orb; FILE *ldrfile; FILE *fprm1; int calorb_alos(struct SAT_ORB *, double **orb_pos, double ts, double t1, int nrec); double rsr; char value[128], name[128]; /* open and read the parameter file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } /* initialize the prm file */ set_prm_defaults(&prm); get_sio_struct(fprm1, &prm); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); read_orb(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; #if 0 r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* read the llt points and convert to xyz. */ rlt = target_llt[0]; rln = target_llt[1]; rht = target_llt[2]; rp[0] = rlt; rp[1] = rln; rp[2] = rht; plh2xyz(rp, xp, prm.ra, fll); xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ // thet = rlt * rad; // if(prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { // relp=1./sqrt((cos(thet)/prm.ra)*(cos(thet)/prm.ra)+(sin(thet)/prm.rc)*(sin(thet)/prm.rc)); // telp=relp-prm.RE; //} // else { // telp=0.; //} // rp[2]=rht + telp; rp[2] = sqrt(xp[0] * xp[0] + xp[1] * xp[1] + xp[2] * xp[2]) - prm.RE; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); xt[0] = rng; xt[1] = tm; /* compute the range and azimuth in pixel space and correct for an azimuth * bias*/ xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a); /* compute the azimuth and range correction if the Doppler is not zero */ if (prm.fd1 != 0.) { rdd = (prm.vel * prm.vel) / rng; daa = -0.5 * (prm.lambda * prm.fd1) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } target_rat[0] = xt[0]; target_rat[1] = xt[1]; target_rat[2] = rp[2]; free(orb_pos); free(orb); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct SAT_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/.svn/pristine/47/47f40ac0aaa2948a040eddff81e1c5957baf0133.svn-base000444 015705 000000 00000004566 13505462013 025740 0ustar00sandwellwheel000000 000000 /************************************************************************* This code is derived from cs2 v3.7 Written by Andrew V. Goldberg and Boris Cherkassky Modifications for use in snaphu by Curtis W. Chen Header for cs2 minimum cost flow solver. This file is included with a #include from snaphu_cs2.c. The cs2 code is used here with permission for strictly noncommerical use. The original cs2 source code can be downloaded from http://www.igsystems.com/cs2 The original cs2 copyright is stated as follows: COPYRIGHT C 1995 IG Systems, Inc. Permission to use for evaluation purposes is granted provided that proper acknowledgments are given. For a commercial licence, contact igsys@eclipse.net. This software comes with NO WARRANTY, expressed or implied. By way of example, but not limitation, we make no representations of warranties of merchantability or fitness for any particular purpose or that the use of the software components or documentation will not infringe any patents, copyrights, trademarks, or other rights. Copyright 2002 Board of Trustees, Leland Stanford Jr. University *************************************************************************/ /* defs.h */ typedef long excess_t; typedef /* arc */ struct arc_st { short r_cap; /* residual capasity */ short cost; /* cost of the arc*/ struct node_st *head; /* head node */ struct arc_st *sister; /* opposite arc */ } arc; typedef /* node */ struct node_st { arc *first; /* first outgoing arc */ arc *current; /* current outgoing arc */ arc *suspended; double price; /* distance from a sink */ struct node_st *q_next; /* next node in push queue */ struct node_st *b_next; /* next node in bucket-list */ struct node_st *b_prev; /* previous node in bucket-list */ long rank; /* bucket number */ excess_t excess; /* excess of the node */ signed char inp; /* temporary number of input arcs */ } node; typedef /* bucket */ struct bucket_st { node *p_first; /* 1st node with positive excess or simply 1st node in the buket */ } bucket; GMTSAR_V5.7/.svn/pristine/2b/2b89c68d8d6d9106c0786ba7e33444c9b4b9ae83.svn-base000444 015705 000000 00000012243 13505462014 025633 0ustar00sandwellwheel000000 000000 /*************************************************************************** * ALOS_fbd_ss reads a raw FBD-HH file and zeroes all the lines * * corresponding to a SW4 scansar file * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Rob Mellors * * (Scripps Institution of Oceanography) * * Date : 11/03/2009 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" #include #include /* fast random number generator */ #define znew (int)(z = 36969 * (z & 65535) + (z >> 16)) typedef unsigned long UL; static UL z = 362436069, t[256]; void settable(UL i1) { int i; z = i1; for (i = 0; i < 256; i = i + 1) t[i] = znew; } char *USAGE = "\nALOS_fbd2ss FBD.PRM SW4.PRM ashift ntot a_stretch_a \n\n" " FBD.PRM PRM file for input image in fine beam dual " "polarization (FBD 14 MHz) (input) \n" " SW4.PRM PRM file with appropriate lines zeroed to match a " "WB1_SW4 file \n" " ashift azimuth shift needed to align the first row of " "the FBD to the SW4 \n" " ntot total number of rows between bursts in the SW4 = " "num_valid_az/6 \n" " a_stretch_a either the parameter from matching or (SW4_PRF - " "FBD_PRF)/FBD_PRF \n\n" " EXAMPLE: ALOS_fbd2ss FBD.PRM SW4.PRM -1046 1684 0.010972 \n\n"; int main(int argc, char **argv) { FILE *prmfile, *datafile, *prmout, *dataout; unsigned char *indata; int j, k, headsize; /* set these three numbers and then recompile */ /* ashift is the ashift from fitoffset this fbd file should be the slave */ /* nburst is 355 for SW4 */ /* ntot is the total number of lines between bursts scaled by the ratio of * the fbd_PRF/SW4_PRF */ int ibufsize, ashift = 652, nburst0 = 355, nburst, ntot0 = 1684, ntot; int necho, IQ_mean; struct PRM r; if (argc < 6) die(USAGE, ""); /* flags defined in global_flags.h */ verbose = 0; debug = 0; /* fill the struct with default parameters */ null_sio_struct(&r); /* open input PRM file and read the parameters */ if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); get_sio_struct(prmfile, &r); IQ_mean = (int)(r.xmi - 15.5); /* get the remaining parameters from the command line */ ashift = atoi(argv[3]); ntot0 = atoi(argv[4]); ntot = (int)ntot0 * (1. + atof(argv[5])); /* increase the burst length to ensure complete overlap and shift the * ashift back by 1/4 burst */ nburst = (int)(1.5 * nburst0); ashift = (int)(ashift - nburst0 / 4); fprintf(stderr, " ashift, nburst, ntot %d %d %d \n", ashift, nburst, ntot); /* open input raw data file */ if ((datafile = fopen(r.input_file, "r")) == NULL) die("Can't open ", r.input_file); /* open output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); /* assemble the output filename and open for writing */ sscanf(argv[2], "%s", r.input_file); r.input_file[strlen(argv[2]) - 4] = 0; strcat(r.input_file, ".raw"); /* open output file for scansar image */ if ((dataout = fopen(r.input_file, "w")) == NULL) die("Can't open ", r.input_file); /* compute the sizes for the input and output buffers and allocate the memory */ ibufsize = r.bytes_per_line; headsize = 2 * r.first_sample; if ((indata = (unsigned char *)malloc(ibufsize * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } /* read and write the input and output raw files */ for (k = 0; k < r.num_lines; k++) { fread((void *)indata, sizeof(unsigned char), ibufsize, datafile); fwrite((void *)indata, sizeof(unsigned char), headsize, dataout); /* fill the output array with random 15 or 16 */ necho = (k + 100 * ntot - ashift) % (ntot); if (necho > nburst) { for (j = 0; j < ibufsize - headsize; j++) indata[j + headsize] = IQ_mean + NULL_DATA + znew % 2; } fwrite(indata + headsize, sizeof(unsigned char), ibufsize - headsize, dataout); } if (debug) fprintf(stderr, " %d %d %d %d %f %f \n", r.chirp_ext, r.good_bytes, r.bytes_per_line, r.num_rng_bins, r.fs, r.chirp_slope); /* write the output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("can't open prfile", argv[2]); put_sio_struct(r, prmout); fclose(prmfile); fclose(prmout); fclose(datafile); fclose(dataout); } GMTSAR_V5.7/.svn/pristine/2b/2beec07180bfbc423210b1d106d28fc543f74a26.svn-base000444 015705 000000 00000002523 13505462013 025630 0ustar00sandwellwheel000000 000000 .TH IHCONV l "04/25/98 \(co 1998 David Sandwell" "ihconv.l 1.0" "SIOSAR Command" .SH NAME ihconv \- convolves a 2-D filter with an array .SH SYNOPSIS .B ihconv .I idec jdec filter_file < input.gips >_out.gips .SH DESCRIPTION The .B ihconv convolves a filter with an array by skipping through the rows and columns by idec and jdec. The complete input file is used for the convolution but output can be decimated in one step which saves a lot of computer time with respect to the GIPS command .B ihbox. .TP 10 .I idec skips rows at an increment of idec .TP 10 .I jdec skips columns at an increment of jdec .TP 10 .I filter_file ascii file of filter coefficients in free format. The first line of the file gives the number_of_columns, number_of_rows in the filter (i.e. 2 integers). The coefficients follow starting at the top and moving across the first row. .TP 10 .I input.gips input file to be filtered (standart input only). This file must have a gips header attached. The elements can be almost any type but complex numbers will be converted to amplitudes prior to filtering. .TP 10 .I output.gips filtered and decimated output file (standard output only). .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B ihbox(l) phased_grad(l) .sp .SH AUTHOR David T. Sandwell. .SH DIAGNOSTICS GMTSAR_V5.7/.svn/pristine/2b/2b84648406996ce4e11d539846ed2338d4982d1a.svn-base000444 015705 000000 00000014706 13505462013 025341 0ustar00sandwellwheel000000 000000 /************************************************************************ * plh2xyz converts elliptic lat, lon, hgt to geocentric X, Y, Z * * the library found at http://www.ngs.noaa.gov/PC_PROD/XYZWIN/ * ************************************************************************/ /************************************************************************ * Creator: Clyde Goad (National Geodetic Survey) * ************************************************************************/ /************************************************************************ * Modification history: * *:8301.00, CG, Creation * *:9406.16, MSS, Conversion to C. * *:9602.20, MSS, Stripped plh to xyz convertion from tlate. * *:0708.07, DTS, changed comments slightly * ************************************************************************/ #include "gmtsar.h" #include "lib_functions.h" #include "llt2xyz.h" #include void plh2xyz(double *plh, double *xyz, double A, double FL) /********1*********2*********3*********4*********5*********6*********7********* * input parameters * ---------------- * A semi-major axis of ellipsoid [units are of distance] * FL flattening of ellipsoid [unitless] * plh[] ellipsoidal coordinates of point, in geodetic latitude, * longitude east of Greenwich, and height [units for * latitude=plh[0] and longitude=plh[1] are in degrees; * height=plh[2] are distance and will be the same as * those of the input parameters] * * output parameters * ----------------- * xyz[] geocentric Cartesian coordinates [units are of distance] * * * ------------------------------ * Escobal, "Methods of Orbit Determination", 1965, Wiley & Sons, Inc., * pp. 27-29. * * see also: * ------------------------------ * xyz2plh */ { double flatfn = (TWO - FL) * FL; double funsq = (ONE - FL) * (ONE - FL); double g1; double g2; double lat_rad = deg_to_rad * plh[0]; double lon_rad = deg_to_rad * plh[1]; double sin_lat; sin_lat = sin(lat_rad); g1 = A / sqrt(ONE - flatfn * sin_lat * sin_lat); g2 = g1 * funsq + plh[2]; g1 = g1 + plh[2]; xyz[0] = g1 * cos(lat_rad); xyz[1] = xyz[0] * sin(lon_rad); xyz[0] = xyz[0] * cos(lon_rad); xyz[2] = g2 * sin_lat; } /************************************************************************ * xyz2plh Converts XYZ geocentric coordinates to Phi (latitude), * * Lambda (longitude), H (height) referred to an * * ellipsoid of semi-major axis A and flattening FL. * ************************************************************************/ /************************************************************************ * Creator: B. Archinal (USNO) * ************************************************************************/ /************************************************************************ * Modification history: * * 9007.20, BA, Creation * 9507,21, JR, Modified for use with the page programs * 9602.17, MSS, Converted to C. ************************************************************************/ void xyz2plh(double *xyz, double *plh, double A, double FL) /********1*********2*********3*********4*********5*********6*********7** * input: * ----------- * A semi-major axis of ellipsoid [units are of distance] * FL flattening of ellipsoid [unitless] * xyz[] geocentric Cartesian coordinates [units are of distance] * * output: * ----------- * plh[] ellipsoidal coordinates of point, in geodetic latitude, * longitude east of Greenwich, and height [units for * latitude=plh[0] and longitude=plh[1] are in degrees; * height=plh[2] are distance and will be the same as * those of the input parameters] * * Local: * ----------- * B semi-minor axis of ellipsoid [same units as A] * * Notes: * ----------- * This routine will fail for points on the Z axis, i.e. if X= Y= 0 * (Phi = +/- 90 degrees). * * Units of input parameters `A' and `xyz' must be the same. * * References: * ----------- * Borkowski, K. M. (1989). "Accurate algorithms to transform geocentric * to geodetic coordinates", *Bulletin Geodesique*, v. 63, pp. 50-56. * * Borkowski, K. M. (1987). "Transformation of geocentric to geodetic * coordinates without approximations", *Astrophysics and Space Science*, * v. 139, n. 1, pp. 1-4. Correction in (1988), v. 146, n. 1, p. 201. * * An equivalent formulation is recommended in the IERS Standards * (1995), draft. * ********1*********2*********3*********4*********5*********6*********7*/ { double B; double d; double e; double f; double g; double p; double q; double r; double t; double v; double x = xyz[0]; double y = xyz[1]; double z = xyz[2]; double zlong; /* * 1.0 compute semi-minor axis and set sign to that of z in order * to get sign of Phi correct */ B = A * (ONE - FL); if (z < ZERO) B = -B; /* * 2.0 compute intermediate values for latitude */ r = sqrt(x * x + y * y); e = (B * z - (A * A - B * B)) / (A * r); f = (B * z + (A * A - B * B)) / (A * r); /* * 3.0 find solution to: * t^4 + 2*E*t^3 + 2*F*t - 1 = 0 */ p = (FOUR / THREE) * (e * f + ONE); q = TWO * (e * e - f * f); d = p * p * p + q * q; if (d >= ZERO) { v = pow((sqrt(d) - q), (ONE / THREE)) - pow((sqrt(d) + q), (ONE / THREE)); } else { v = TWO * sqrt(-p) * cos(acos(q / (p * sqrt(-p))) / THREE); } /* * 4.0 improve v * NOTE: not really necessary unless point is near pole */ if (v * v < fabs(p)) { v = -(v * v * v + TWO * q) / (THREE * p); } g = (sqrt(e * e + v) + e) / TWO; t = sqrt(g * g + (f - v * g) / (TWO * g - e)) - g; plh[0] = atan((A * (ONE - t * t)) / (TWO * B * t)); /* * 5.0 compute height above ellipsoid */ plh[2] = (r - A * t) * cos(plh[0]) + (z - B) * sin(plh[0]); /* * 6.0 compute longitude east of Greenwich */ zlong = atan2(y, x); if (zlong < ZERO) zlong = zlong + twopi; plh[1] = zlong; /* * 7.0 convert latitude and longitude to degrees */ plh[0] = plh[0] * rad_to_deg; plh[1] = plh[1] * rad_to_deg; return; } GMTSAR_V5.7/.svn/pristine/2e/2e2d702f163cdde842d460dfef3c2e6c040148d5.svn-base000444 015705 000000 00000002450 13505462014 025735 0ustar00sandwellwheel000000 000000 //// $Id$ //// Information for building GMTSAR with CMake ------------------------------------------ Quick start: ~~~~~~~~~~~~ Checkout GMTSAR from its subversion repository: $ svn co svn://gmtserver.soest.hawaii.edu/GMTSAR/trunk gmtsar-dev $ cd gmtsar-dev $ mkdir build $ cd build $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=RelWithDebInfo .. $ make -j $ make -j install Invoking CMake: ~~~~~~~~~~~~~~~ CMake supports out-of-source builds and puts generated files in a completely separate directory, so that the source tree is unchanged. Trying to run CMake in the source tree will result in an error. CMake will first check for the minimal required version and then search for required and optional libraries (GMT, TIFF, LAPACK) in the default locations. The configuration step will fail if dependencies are not met. Updating: ~~~~~~~~~ Assuming you did not delete the build directory and that your current working directory is the build directory this is just as simple as $ cd .. $ svn up $ cd - $ make -jx install CMake will detect any changes to the source files and will automatically reconfigure. If you deleted all files inside the build directory you have to run cmake again manually. //// vim: ft=asciidoc tw=78 et ts=2 sts=2 sw=2 autoindent smartindent //// GMTSAR_V5.7/.svn/pristine/40/402d35cb34808e3b0d483fc9b91fd2e25a72d465.svn-base000444 015705 000000 00000011342 13505462013 025520 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_ref computes the range reference function used for range * compression of *raw radar echoes * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * * 08/06/08 DTS - secondary range migration code added from HZ * * * ************************************************************************/ #include "gmt.h" #include "siocomplex.h" #include "soi.h" #define RW 0666 void rng_ref(void *API, int ranfft, float delr, fcomplex *ref1) { float ts, t, phase, rhww1, win1; float wgt; fcomplex cref; fcomplex junk; int npts, k1start, k1end, icaltone; int i, k, index = 0; double delw, rc, kx, omega, omega0; /* Compute range reference function */ /* Compute number of points in reference function. */ if ((strcmp(off_vid, "y") == 0) || (strcmp(off_vid, "Y") == 0)) { npts = 2.0 * fs * pulsedur; ts = 1.0 / (2.0 * fs); } else { npts = fs * pulsedur; ts = 1. / fs; } if (fmod(npts, 2.0) == 0.0) npts = npts + 1; k1start = (int)fabs(pctbw) * npts; k1end = npts - (int)fabs(pctbw) * npts; /* compute reference function */ k = 0; for (i = -npts / 2; i <= npts / 2; i++) { t = i * ts; if ((strcmp(off_vid, "y") == 0) || (strcmp(off_vid, "Y") == 0)) { phase = PI * slope * t * t + PI * fs * t; if ((k >= k1start) && (k < k1end)) { ref1[i + npts / 2].r = cosf(phase); ref1[i + npts / 2].i = 0.0f; } else { ref1[i + npts / 2].r = 0.0f; ref1[i + npts / 2].i = 0.0f; } } else { phase = PI * slope * t * t; if ((k >= k1start) && (k < k1end)) { index = i + npts / 2; ref1[index] = Cexp(phase); } else { ref1[index].r = 0.0f; ref1[index].i = 0.0f; } } k = k + 1; } /* window reference function */ rhww1 = 1.0 - rhww; for (i = 0; i < ranfft; i++) { if (i < npts) { win1 = rhww - rhww1 * cos((2.0 * PI * ((float)i)) / ((float)(npts - 1))); junk = ref1[i]; ref1[i] = RCmul(win1, junk); } else { ref1[i].r = 0.0f; ref1[i].i = 0.0f; } } /* extend the chirp */ if (nextend > 0) { for (i = 0; i < npts; i++) { if ((k = i - nextend) < 0) k = k + ranfft; ref1[k] = ref1[i]; } for (i = 0; i < nextend; i++) { if ((k = npts - nextend + i) < 0) k = k + ranfft; ref1[k].r = 0.0f; ref1[k].i = 0.0f; } } /* Calculate fft of range reference function */ // dir = -1; // cfft1d_(&ranfft,ref1,&dir); GMT_FFT_1D(API, (float *)ref1, ranfft, GMT_FFT_FWD, GMT_FFT_COMPLEX); /* zero out dc and caltone location */ icaltone = (int)(caltone * ranfft + 0.5); for (i = 0; i < 6; i++) { wgt = 0.5 - 0.5 * cos(((float)i) / 5.0 * PI); ref1[i] = RCmul((float)wgt, ref1[i]); if ((strcmp(off_vid, "y") == 0) || (strcmp(off_vid, "Y") == 0)) { ref1[i + ranfft / 2] = RCmul((float)wgt, ref1[i + ranfft / 2]); ref1[ranfft / 2 - i - 1] = RCmul((float)wgt, ref1[ranfft / 2 - 1 - i]); } ref1[i + icaltone] = RCmul((float)wgt, ref1[i + icaltone]); k = icaltone - i; if (k < 0) k = k + ranfft; ref1[k] = RCmul((float)wgt, ref1[k]); if ((strcmp(off_vid, "y") == 0) || (strcmp(off_vid, "Y") == 0)) { k = i + ranfft - icaltone; if (k >= ranfft) k = k - ranfft; ref1[k] = RCmul((float)wgt, ref1[k]); ref1[ranfft - icaltone - 1 - i] = RCmul((float)wgt, ref1[ranfft - icaltone - 1 - i]); } if (i > 0) ref1[ranfft - i] = RCmul((float)wgt, ref1[ranfft - i]); } /* apply secondary range migration */ if ((strcmp(srm, "y") == 0) || (strcmp(srm, "Y") == 0)) { delw = PI2 * fs / ranfft; rc = near_range + delr * num_rng_bins / 2; kx = PI2 * (fd1 + fdd1 * rc + pow(fddd1 * rc, 2.0)) / vel1; omega0 = PI2 * SOL / lambda; /* printf("delw= %f rc=%f kx=%f omega0 = %f \n",delw,rc,kx,omega0);*/ phase = -0.25 * rc * (lambda / PI2) * pow(kx, 2.0) * pow(((omega0 - ranfft / 2. * delw) / omega0), 2.0); /* printf("phase = %f \n",phase);*/ /* loop over frequencies and update the reference function */ for (i = 0; i < ranfft; i++) { k = i; if (i > ranfft / 2) k = i - ranfft; omega = omega0 + k * delw; phase = -0.25 * rc * (lambda / PI2) * pow(kx, 2.0) * pow(((omega) / omega0), 2.0); /* printf("i= %d k= %d phase = %f \n",i,k,phase);*/ junk = Cexp(phase); ref1[i] = Cmul(ref1[i], junk); } } for (i = 0; i < ranfft; i++) { cref = Conjg(ref1[i]); ref1[i] = RCmul((float)(1.0 / ranfft), cref); } } GMTSAR_V5.7/.svn/pristine/49/49ffffc67287629fe8f32f896b4416c7b0a056da.svn-base000444 015705 000000 00000000637 13505462014 025661 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_mosaic_ss_2frames CSRCS = ALOS_mosaic_ss_2frames.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar $(GMT_INC) CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) $(GMTSAR) $(GMT_LIB) $(INCLUDES) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(PROG) $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/49/492028f2c0a47edb85a5f0d2f8aab76908c466fc.svn-base000444 015705 000000 00000002147 13505462013 025704 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu Mar 2017 # # Script to shift time in azimuth by a number of lines # if ($#argv < 2) then echo " " echo "Usage: shift_aline_PRM.csh file.PRM num_lines " echo " " echo "Example: shift_aline_PRM.csh IMG-HH-ALPSRP049040660-H1.0__A.PRM 12365.84726" echo "" echo "Note: To shift the PRM file with a given number of lines along azimuth." exit 1 endif set nl = $2 set file = $1 set prf = `grep PRF $file | awk '{print $3}'` set ttmp = `grep clock_start $file | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM $file clock_start $ttmp set ttmp = `grep clock_stop $file | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM $file clock_stop $ttmp set ttmp = `grep SC_clock_start $file | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM $file SC_clock_start $ttmp set ttmp = `grep SC_clock_stop $file | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM $file SC_clock_stop $ttmp GMTSAR_V5.7/.svn/pristine/1c/1c4654ce554fa6a2262b6e760d69fc9f6d11d242.svn-base000444 015705 000000 00000001777 13505462013 025621 0ustar00sandwellwheel000000 000000 .TH READ_CCRS l "08/28/97 \@ 1996 David Sandwell and Rob Mellors" "1.0" "SIOSAR Command" .SH NAME read_ccrs \- reads files from CCRS SAR data tape and writes to disk .SH SYNOPSIS .B read_ccrs .I input_device orbit_frame .SH DESCRIPTION Reads files from a raw SAR data tape (CCRS format) and writes 3 files to disk. .TP 10 .I input device tape drive name (example /dev/rmt/0n) .TP 10 .I vdf SAR volume descriptor file - describes what files are on the tape. .TP 10 .I leader Mixed ASCII and binary file which contains parameters about the acquisition of the SAR data. Time information is not included. .TP 10 .I data SAR data (also has a mixed ASCII and binary header). Time information is encoded. .TP 10 .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B read_SAR_tape(l) .sp CCT.format* files in SAR_tape_data_description .sp .SH AUTHORS David Sandwell and Rob Mellors, Scripps Institution of Oceanography .SH DIAGNOSTICS no bugs, just features GMTSAR_V5.7/.svn/pristine/71/711357cfe8fd3986eed2e8b46513964996e0be1d.svn-base000444 015705 000000 00000001344 13505462013 025567 0ustar00sandwellwheel000000 000000 3 15 1.6389554e-02 6.5728529e-02 1.6389554e-02 3.3746152e-02 1.3533528e-01 3.3746152e-02 6.2176524e-02 2.4935221e-01 6.2176524e-02 1.0251176e-01 4.1111229e-01 1.0251176e-01 1.5123976e-01 6.0653066e-01 1.5123976e-01 1.9966564e-01 8.0073740e-01 1.9966564e-01 2.3587708e-01 9.4595947e-01 2.3587708e-01 2.4935221e-01 1.0000000e+00 2.4935221e-01 2.3587708e-01 9.4595947e-01 2.3587708e-01 1.9966564e-01 8.0073740e-01 1.9966564e-01 1.5123976e-01 6.0653066e-01 1.5123976e-01 1.0251176e-01 4.1111229e-01 1.0251176e-01 6.2176524e-02 2.4935221e-01 6.2176524e-02 3.3746152e-02 1.3533528e-01 3.3746152e-02 1.6389554e-02 6.5728529e-02 1.6389554e-02 GMTSAR_V5.7/.svn/pristine/71/71e57c56b4d4b47d10ace3dfb1b4c6ab49a43b2b.svn-base000444 015705 000000 00000003057 13505462013 026067 0ustar00sandwellwheel000000 000000 21 3 1.8315638888734179e-02 2.6782676492638175e-02 3.7628256807176200e-02 5.0792833864898503e-02 6.5874754426402976e-02 8.2084998623898800e-02 9.8273585604361502e-02 1.1304153064044985e-01 1.2493021219858241e-01 1.3265546508012172e-01 1.3533528323661270e-01 1.3265546508012172e-01 1.2493021219858241e-01 1.1304153064044985e-01 9.8273585604361502e-02 8.2084998623898800e-02 6.5874754426402976e-02 5.0792833864898503e-02 3.7628256807176200e-02 2.6782676492638175e-02 1.8315638888734179e-02 1.3533528323661270e-01 1.9789869908361465e-01 2.7803730045319408e-01 3.7531109885139957e-01 4.8675225595997168e-01 6.0653065971263342e-01 7.2614903707369094e-01 8.3527021141127200e-01 9.2311634638663576e-01 9.8019867330675525e-01 1.0000000000000000e+00 9.8019867330675525e-01 9.2311634638663576e-01 8.3527021141127200e-01 7.2614903707369094e-01 6.0653065971263342e-01 4.8675225595997168e-01 3.7531109885139957e-01 2.7803730045319408e-01 1.9789869908361465e-01 1.3533528323661270e-01 1.8315638888734179e-02 2.6782676492638175e-02 3.7628256807176200e-02 5.0792833864898503e-02 6.5874754426402976e-02 8.2084998623898800e-02 9.8273585604361502e-02 1.1304153064044985e-01 1.2493021219858241e-01 1.3265546508012172e-01 1.3533528323661270e-01 1.3265546508012172e-01 1.2493021219858241e-01 1.1304153064044985e-01 9.8273585604361502e-02 8.2084998623898800e-02 6.5874754426402976e-02 5.0792833864898503e-02 3.7628256807176200e-02 2.6782676492638175e-02 1.8315638888734179e-02 GMTSAR_V5.7/.svn/pristine/71/719152350ffdfe5f4c12cfa942919be36bd7a175.svn-base000444 015705 000000 00000001172 13505462013 025616 0ustar00sandwellwheel000000 000000 5 5 8.6860849005128124e-02 2.8118910837651029e-01 4.1596485279363227e-01 2.8118910837651029e-01 8.6860849005128124e-02 1.6769943245613345e-01 5.4288271905796148e-01 8.0308989071788695e-01 5.4288271905796148e-01 1.6769943245613345e-01 2.0881776049531126e-01 6.7599247024847398e-01 1.0000000000000000e+00 6.7599247024847398e-01 2.0881776049531126e-01 1.6769943245613345e-01 5.4288271905796148e-01 8.0308989071788695e-01 5.4288271905796148e-01 1.6769943245613345e-01 8.6860849005128124e-02 2.8118910837651029e-01 4.1596485279363227e-01 2.8118910837651029e-01 8.6860849005128124e-02 GMTSAR_V5.7/.svn/pristine/71/716c1050eb9e26f5799a64665a2f64472ac91d6d.svn-base000444 015705 000000 00000005047 13505462014 025414 0ustar00sandwellwheel000000 000000 #define SARLEADER_FDR_FIXSEG_WCS \ "*********** SAR FDR FIXED SEGMENT ***********\n" \ "A_E_flag ==> %.2s\n" \ "blank_2 ==> %.2s\n" \ "for_con_doc ==> %.12s\n" \ "for_con_doc_rev_level ==> %.2s\n" \ "file_des_rev_level ==> %.2s\n" \ "softw_rel ==> %.12s\n" \ "file_number ==> %.4s\n" \ "file_name ==> %.16s\n" \ "rec_seq_loc_type_flag ==> %.4s\n" \ "seq_number_loc ==> %.8s\n" \ "seq_number_field_length ==> %.4s\n" \ "rec_code_loc_type_flag ==> %.4s\n" \ "rec_code_loc ==> %.8s\n" \ "rec_code_field_length ==> %.4s\n" \ "rec_len_loc_type_flag ==> %.4s\n" \ "rec_len_loc ==> %.8s\n" \ "rec_len_field_length ==> %.4s\n" \ "reserved_4 ==> %.4s\n" \ "reserved_segment ==> %.64s\n\n" GMTSAR_V5.7/.svn/pristine/71/7153648e9ab8d0c03521e9d9fa70da4452e98b44.svn-base000444 015705 000000 00000024102 13505462013 025456 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # # process generic L1.1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_S1_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_S1_SLC.csh TSX_20110608 TSX_20110619 config.tsx.slc.txt" echo "" echo " Place the L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/.svn/pristine/1d/1d82c99f4b9e289747e19cc2bde6b5e8cf02271c.svn-base000444 015705 000000 00000001555 13505462013 025777 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # By Xiaohua XU, 03/12/2018 # # Unwrap interferograms parallelly using GNU parallel # # IMPORTANT: put a script called unwrap_intf.csh in the current folder # e.g. # cd $1 # snaphu[_interp].csh 0.1 0 # cd .. # if ($#argv != 2) then echo "" echo "Usage: unwrap_parallel.csh intflist Ncores" echo "" echo " Run unwrapping jobs parallelly. Need to install GNU parallel first." echo " Note, run this in the intf_all folder where all the interferograms are stored. " echo "" exit endif set ncores = $2 set d1 = `date` foreach line (`awk '{print $0}' $1`) echo "unwrap_intf.csh $line > log_$line.txt" >> unwrap.cmd end parallel --jobs $ncores < unwrap.cmd echo "" echo "Finished all unwrapping jobs..." echo "" set d2 = `date` #echo "parallel --jobs $ncores < intf_tops.cmd" | mail -s "Unwrapping finished" "balabala@gmail.com" GMTSAR_V5.7/.svn/pristine/1d/1d19f46b820aab0f69b33b7a295a1a2f07fbba74.svn-base000444 015705 000000 00000004316 13505462013 026004 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # D. Sandwell 1/12/07 # alias rm 'rm -f' unset noclobber if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # # # project a grd file from range/azimuth coordinates into lon/lat coordinates # this version only works with GMT V4.0 and higher # # Input: # trans.dat - file generated by llt_grid2rat (r a topo lon lat) # phase_ra.grd - a GRD file of phase or anything # # Output: # phase_ll.grd - a GRD file of phase in longitude/latitude coordinates # # check for number of arguments # if ($#argv < 3) then echo " " echo "Usage: proj_ra2ll.csh trans.dat phase.grd phase_ll.grd" echo " trans.dat - file generated by llt_grid2rat (r a topo lon lat)" echo " phase_ra.grd - a GRD file of phase or anything" echo " phase_ll.grd - output file in lon/lat-coordinates" echo " " exit 1 endif echo "proj_ra2ll.csh" # # extract the phase in the r a positions # gmt grd2xyz $2 -s -bo3f > rap # # make grids of longitude and latitude versus range and azimuth unless they already exist # if (! -f raln.grd || ! -f ralt.grd ) then gmt gmtconvert $1 -o0,1,3 -bi5d -bo3f > raln gmt gmtconvert $1 -o0,1,4 -bi5d -bo3f > ralt # gmt surface raln `gmt gmtinfo rap -I16/32 -bi3f` -bi3f -I16/32 -T.50 -Graln.grd $V gmt surface ralt `gmt gmtinfo rap -I16/32 -bi3f` -bi3f -I16/32 -T.50 -Gralt.grd $V endif # gmt grdtrack rap -nl -Graln.grd -bi3f -bo4f > rapln gmt grdtrack rapln -nl -Gralt.grd -bi4f -bo5f > raplnlt # # get the lon, lat, phase columns and grid # gmt gmtconvert raplnlt -bi5f -bo3f -o3,4,2 > llp # # use higher resolution for data with higher range resolution and PRF # set filt = `ls gauss_*` if ( $filt != "" ) then set pix_m = `ls gauss_* | awk -F_ '{print $2/4}'` # Use 1/4 the filter width echo "Sampling in geocoordinates with $pix_m meter pixels ..." else set pix_m = 60 echo "Sampling in geocoordinates with deault ($pix_m meter) pixel size ..." endif set incs = `m2s.csh $pix_m llp` # Get fine and crude grid interval for lookup grids # set R = `gmt gmtinfo llp -I$incs[2] -bi3f ` gmt blockmedian llp $R -bi3f -bo3f -I$incs[1] -r -V > llpb gmt xyz2grd llpb $R -I$incs[1] -r -fg -G$3 -bi3f # # clean # rm rap* llp llpb raln ralt GMTSAR_V5.7/.svn/pristine/85/85f8f9afae10720cdc2234410fc43e8677fd6831.svn-base000444 015705 000000 00000000502 13505462014 025540 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_fbd2ss CSRCS = ALOS_fbd2ss.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/8c/8cf49108c7f88b9ca6df80ce63c41a8b868c14b7.svn-base000444 015705 000000 00000010364 13505462013 026005 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 10 20100 # # alias rm 'rm -f' unset noclobber # if ($#argv < 1) then errormessage: echo "" echo "Usage: geocode.csh correlation_threshold" echo "" echo " phase is masked when correlation is less than correlation_threshold" echo "" echo "Example: geocode.csh .12" echo "" exit 1 endif # # first mask the phase and phase gradient using the correlation # gmt grdmath corr.grd $1 GE 0 NAN mask.grd MUL = mask2.grd -V gmt grdmath phase.grd mask2.grd MUL = phase_mask.grd if (-e xphase.grd) then gmt grdmath xphase.grd mask2.grd MUL = xphase_mask.grd gmt grdmath yphase.grd mask2.grd MUL = yphase_mask.grd endif if (-e unwrap.grd) then gmt grdcut mask2.grd `gmt grdinfo unwrap.grd -I-` -Gmask3.grd gmt grdmath unwrap.grd mask3.grd MUL = unwrap_mask.grd endif if (-e phasefilt.grd) then gmt grdmath phasefilt.grd mask2.grd MUL = phasefilt_mask.grd endif # # look at the masked phase # set boundR = `gmt grdinfo display_amp.grd -C | awk '{print ($3-$2)/4}'` set boundA = `gmt grdinfo display_amp.grd -C | awk '{print ($5-$4)/4}'` gmt grdimage phase_mask.grd -JX6.5i -Cphase.cpt -B"$boundR":Range:/"$boundA":Azimuth:WSen -X1.3i -Y3i -P -K > phase_mask.ps gmt psscale -D3.3/-1.5/5/0.2h -Cphase.cpt -B1.57:"phase, rad": -O >> phase_mask.ps if (-e xphase_mask.grd) then gmt grdimage xphase_mask.grd -JX8i -Cphase_grad.cpt -X.2i -Y.5i -P > xphase_mask.ps gmt grdimage yphase_mask.grd -JX8i -Cphase_grad.cpt -X.2i -Y.5i -P > yphase_mask.ps endif if (-e unwrap_mask.grd) then gmt grdimage unwrap_mask.grd -JX6.5i -B"$boundR":Range:/"$boundA":Azimuth:WSen -Cunwrap.cpt -X1.3i -Y3i -P -K > unwrap_mask.ps set std = `gmt grdinfo -C -L2 unwrap_mask.grd | awk '{printf("%5.1f", $13)}'` gmt psscale -D3.3/-1.5/5/0.2h -Cunwrap.cpt -B"$std":"unwrapped phase, rad": -O -E >> unwrap_mask.ps endif if (-e phasefilt_mask.grd) then gmt grdimage phasefilt_mask.grd -JX6.5i -B"$boundR":Range:/"$boundA":Azimuth:WSen -Cphase.cpt -X1.3i -Y3i -P -K > phasefilt_mask.ps gmt psscale -D3.3/-1.5/5/0.2h -Cphase.cpt -B1.57:"phase, rad": -O >> phasefilt_mask.ps endif # line-of-sight displacement if (-e unwrap_mask.grd) then set wavel = `grep wavelength *.PRM | awk '{print($3)}' | head -1 ` gmt grdmath unwrap_mask.grd $wavel MUL -79.58 MUL = los.grd gmt grdgradient los.grd -Nt.9 -A0. -Glos_grad.grd set tmp = `gmt grdinfo -C -L2 los.grd` set limitU = `echo $tmp | awk '{printf("%5.1f", $12+$13*2)}'` set limitL = `echo $tmp | awk '{printf("%5.1f", $12-$13*2)}'` set std = `echo $tmp | awk '{printf("%5.1f", $13)}'` gmt makecpt -Cpolar -Z -T"$limitL"/"$limitU"/1 -D > los.cpt gmt grdimage los.grd -Ilos_grad.grd -Clos.cpt -B"$boundR":Range:/"$boundA":Azimuth:WSen -JX6.5i -X1.3i -Y3i -P -K > los.ps gmt psscale -D3.3/-1.5/4/0.2h -Clos.cpt -B"$std":"LOS displacement, mm":/:"range decrease": -O -E >> los.ps endif # # now reproject the phase to lon/lat space # echo "geocode.csh" echo "project correlation, phase, unwrapped and amplitude back to lon lat coordinates" proj_ra2ll.csh trans.dat corr.grd corr_ll.grd proj_ra2ll.csh trans.dat phase_mask.grd phase_mask_ll.grd proj_ra2ll.csh trans.dat display_amp.grd display_amp_ll.grd if (-e xphase_mask.grd) then proj_ra2ll.csh trans.dat xphase_mask.grd xphase_mask_ll.grd proj_ra2ll.csh trans.dat yphase_mask.grd yphase_mask_ll.grd endif if (-e unwrap_mask.grd) then proj_ra2ll.csh trans.dat unwrap_mask.grd unwrap_mask_ll.grd endif if (-e phasefilt_mask.grd) then proj_ra2ll.csh trans.dat phasefilt_mask.grd phasefilt_mask_ll.grd endif # # now image for google earth # echo "geocode.csh" echo "make the KML files for Google Earth" grd2kml.csh display_amp_ll display_amp.cpt grd2kml.csh corr_ll corr.cpt grd2kml.csh phase_mask_ll phase.cpt #ln -s phasefilt_mask_ll.grd phase_mask_ll_bw.grd #grd2kml.csh phase_mask_ll_bw phase_bw.cpt #rm phase_mask_ll_bw.grd if (-e xphase_mask_ll.grd) then grd2kml.csh xphase_mask_ll phase_grad.cpt grd2kml.csh yphase_mask_ll phase_grad.cpt endif if (-e unwrap_mask_ll.grd) then grd2kml.csh unwrap_mask_ll unwrap.cpt endif if (-e phasefilt_mask_ll.grd) then grd2kml.csh phasefilt_mask_ll phase.cpt endif if (-e unwrap_mask_ll.grd) then gmt grdmath unwrap_mask_ll.grd $wavel MUL -79.58 MUL = los_ll.grd grd2kml.csh los_ll los.cpt endif GMTSAR_V5.7/.svn/pristine/8c/8cb93ae0284f7fb51fbe2843fc46c17b5d8b9886.svn-base000444 015705 000000 00000000372 13505462014 026003 0ustar00sandwellwheel000000 000000 include ../../../config.mk # Makefile for lib LIB = libxmlC.a INCLUDES = -I../include SRCS = xml.c OBJS= $(SRCS:.c=.o) all: $(LIB) install: all $(LIB) : $(OBJS) $(AR) rv $(LIB) $? $(RANLIB) $(LIB) clean: rm -f *.o $(LIB) spotless: clean GMTSAR_V5.7/.svn/pristine/8c/8c5216a06eb2a2248ec6da598170bea996f89b6c.svn-base000444 015705 000000 00000000561 13505462013 025707 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for alos after 4 x 2 decimation so the 0.5 gain % is at 300 km wavelength % clear sigx=3.39; sigy=4.53; nx=11; ny=11; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_alos_300m -ASCII -double gauss GMTSAR_V5.7/.svn/pristine/12/12833a8e551e2d3bc6aba4a7f356400f602d9c50.svn-base000444 015705 000000 00000013070 13505462013 025477 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # Original version: Eric Lindsey, May 2015 if ($#argv != 3) then echo " usage: detrend_before_unwrap.csh master # bounds" echo " master is the stem name for the master image, eg. ALOS2040533050-150222-WBDR1.1__D" echo " # is the frame number (1-5) to use for detrending" echo " bounds (eg. 0/1000/0/1000) is the GMT bounds in range/az coordinates to use" exit 1 endif if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # correlation threshold for the detrending set corr_threshold = 0.2 set master = $1 # go to the selected frame directory cd F$2/intf/*/ if ( -e phasefilt_nodetrend.grd ) then mv phasefilt_nodetrend.grd phasefilt.grd endif # unwrap a part of the selected frame for detrending mkdir detrend_part cd detrend_part ln -s ../corr.grd . ln -s ../mask.grd . ln -s ../phasefilt.grd . # ## convert to range(meters) / azimuth (seconds) coordinates before fitting the trend # #speed of light set cee = "299792458.0" # convert coordinates for each frame to absolute range and azimuth (time) #compute far range in meters #range_meters = near_range + i * speed_of_light/(2*rng_samp_rate) set near_range = `grep near_range ../*$master*PRM | head -n1 |awk '{print $3}'` set rng_samp_rate = `grep rng_samp_rate ../*$master*PRM | head -n1 |awk '{print $3}'` set numrng = `grep num_rng_bins ../*$master*PRM | head -n1 |awk '{print $3}'` set far_range = `echo $near_range $numrng $cee $rng_samp_rate |awk '{printf("%.14f", $1 + $2*$3/(2.0*$4))}'` set drng = `echo $far_range $near_range $numrng |awk '{printf("%.14f", ($1-$2)/$3)}'` #compute start time relative to the start time of the selected frame, in seconds #azi_time(n,j) = (SC_clock_start(1) - SC_clock_start(n)) + j / PRF(n) set numaz = `grep num_lines ../*$master*PRM | head -n1 |awk '{print $3}'` set PRF = `grep PRF ../*$master*PRM | head -n1 |awk '{print $3}'` set azi_start = "0.0" set azi_end = `echo $numaz $PRF |awk '{printf("%.14f", $1/$2 )}'` set daz = `echo $azi_end $azi_start $numaz |awk '{printf("%.14f", ($1-$2)/$3)}'` # unwrap the patch echo "unwrap the selected region" #snaphu_interp_lindsey.csh $corr_threshold 0 $3 snaphu.csh $corr_threshold 1 $3 set rng_actual_min = `gmt grdinfo -I- unwrap.grd | sed -e 's:R:/:' | awk -F/ '{print $2}'` set rng_actual_max = `gmt grdinfo -I- unwrap.grd | sed -e 's:R:/:' | awk -F/ '{print $3}'` set az_actual_min = `gmt grdinfo -I- unwrap.grd | sed -e 's:R:/:' | awk -F/ '{print $4}'` set az_actual_max = `gmt grdinfo -I- unwrap.grd | sed -e 's:R:/:' | awk -F/ '{print $5}'` set near_range_crop = `echo $near_range $rng_actual_min $drng |awk '{print $1 + $2*$3}'` set far_range_crop = `echo $near_range $rng_actual_max $drng |awk '{print $1 + $2*$3}'` set azi_start_crop = `echo $azi_start $az_actual_min $daz |awk '{print $1 + $2*$3}'` set azi_end_crop = `echo $azi_start $az_actual_max $daz |awk '{print $1 + $2*$3}'` # edit the coordinates echo "edit unwrap.grd coordinates to -R$near_range_crop/$far_range_crop/$azi_start_crop/$azi_end_crop" gmt grdedit unwrap.grd -R$near_range_crop/$far_range_crop/$azi_start_crop/$azi_end_crop gmt grd2xyz unwrap.grd -S > unwrap.dat # compute the trend echo "find the trend from a simple 3-parameter inversion" set params = `fit_planar_trend.py unwrap.dat` set mean = `echo $params |cut -d\ -f 1` set rslope = `echo $params |cut -d\ -f 2` set aslope = `echo $params |cut -d\ -f 3` echo "found trend parameters (mean, range, az) $mean, $rslope, $aslope" set SC_clock_start0 = `grep SC_clock_start ../*$master*PRM | head -n1 |awk '{print $3}'` #back to top directory cd ../../../../ foreach n ( 1 2 3 4 5 ) cd F$n/intf/*/ echo "detrending F$n" if ( -e phasefilt_nodetrend.grd ) then #don't detrend something that was already detrended mv phasefilt_nodetrend.grd phasefilt.grd endif mv phasefilt.grd phasefilt_nodetrend.grd # convert coordinates for each frame to absolute range and azimuth (time) #compute far range in meters: range_meters = near_range + i * (rng_samp_rate)/(2*C) set near_range = `grep near_range *$master*PRM | head -n1 |awk '{print $3}'` set rng_samp_rate = `grep rng_samp_rate *$master*PRM | head -n1 |awk '{print $3}'` set numrng = `grep num_rng_bins *$master*PRM | head -n1 |awk '{print $3}'` set far_range = `echo $near_range $numrng $cee $rng_samp_rate |awk '{printf("%.14f", $1 + $2*$3/(2.0*$4))}'` #compute start time relative to the start time of the selected frame, in seconds set SC_clock_start = `grep SC_clock_start *$master*PRM | head -n1 |awk '{print $3}'` set numaz = `grep num_lines *$master*PRM | head -n1 |awk '{print $3}'` set PRF = `grep PRF *$master*PRM | head -n1 |awk '{print $3}'` set azi_start = `echo $SC_clock_start $SC_clock_start0 |awk '{printf("%.14f", 86400.0*($1-$2))}'` set azi_end = `echo $SC_clock_start $SC_clock_start0 $numaz $PRF |awk '{printf("%.14f", 86400.0*($1-$2) + $3/$4)}'` # edit the coordinates echo "edit coordinates to -R$near_range/$far_range/$azi_start/$azi_end" gmt grdedit phasefilt_nodetrend.grd -R$near_range/$far_range/$azi_start/$azi_end # subtract the fitted trend gmt grdmath $V phasefilt_nodetrend.grd X $rslope MUL SUB Y $aslope MUL SUB 2 PI MUL MOD PI SUB = phasefilt.grd # edit the coordinates back gmt grdedit phasefilt.grd -Rcorr.grd gmt grdedit phasefilt_nodetrend.grd -Rcorr.grd #geocode again if it was done before if ( -e phasefilt_mask_ll.grd ) then echo "redoing geocoding of phasefilt" gmt grdmath phasefilt.grd mask2.grd MUL = phasefilt_mask.grd proj_ra2ll.csh trans.dat phasefilt_mask.grd phasefilt_mask_ll.grd grd2kml.csh phasefilt_mask_ll phase.cpt endif cd ../../../ end GMTSAR_V5.7/.svn/pristine/12/12cd1dcbae854d7a3b8650453bf5353ccca36738.svn-base000444 015705 000000 00000003674 13505462013 025662 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Select pairs according to the given threshold in time and baseline # used for time series analysis # Xiaohua(Eric) Xu, Jan 21 2016 # if ($#argv != 3) then echo "" echo "Usage: select_pairs.csh baseline_table.dat threshold_time threshold_baseline" echo " generate the input file for intf_tops.csh with given threshold of time and baseline" echo "" echo " outputs:" echo " intf.in" echo "" exit 1 endif set file = $1 set dt = `echo $2 | awk '{print $0}'` set db = `echo $3 | awk '{printf $0}'` # loop over possible pairs rm intf.in awk '{print 2014+$3/365.25, $5, $1}' < $1 > text set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-50, $4+50}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > baseline.ps foreach line1 (`awk '{print $1":"$2":"$3":"$4":"$5}' < $file`) foreach line2 (`awk '{print $1":"$2":"$3":"$4":"$5}' < $file`) set t1 = `echo $line1 | awk -F: '{print $3}'` set t2 = `echo $line2 | awk -F: '{print $3}'` set b1 = `echo $line1 | awk -F: '{print $5}'` set b2 = `echo $line2 | awk -F: '{print $5}'` set n1 = `echo $line1 | awk -F: '{print $1}'` set n2 = `echo $line2 | awk -F: '{print $1}'` #if ($t1 < $t2 && $t2 - $t1 < $dt && $db0 < $db) then if ($t1 < $t2 & $t2 - $t1 < $dt) then set db0 = `echo $b1 $b2 | awk '{printf "%d", sqrt(($1-$2)*($1-$2))}'` if ($db0 < $db) then echo $n1 $n2 | awk '{print $1":"$2}' >> intf.in echo $t1 $b1 | awk '{print $1/365.25+2014, $2}' >> tmp echo $t2 $b2 | awk '{print $1/365.25+2014, $2}' >> tmp gmt psxy tmp -R -J -K -O >> baseline.ps rm tmp endif endif end end awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba0.5:"year":/a50g00f25:"baseline (m)":WSen -O >> baseline.ps GMTSAR_V5.7/.svn/pristine/12/1241c3e9f6f3e37716a710c34eff52e1f5b01d8d.svn-base000444 015705 000000 00000000623 13505462014 025577 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_s1a_tops CSRCS = make_s1a_tops.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I$(GMTSARHOME)/gmtsar/include -I$(TIFF_INC) $(GMT_INC) CLIBS = -L../lib -lxmlC $(GMTSAR) $(GMT_LIB) $(LALIBS) -L$(TIFF_LIB) -ltiff -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/12/12ceb578d70baeda37e68a6b7081f641c7701577.svn-base000444 015705 000000 00000004675 13505462014 025542 0ustar00sandwellwheel000000 000000 /************************************************************************ * plh2xyz converts elliptic lat, lon, hgt to geocentric X, Y, Z * * the library found at http://www.ngs.noaa.gov/PC_PROD/XYZWIN/ * ************************************************************************/ /************************************************************************ * Creator: Clyde Goad (National Geodetic Survey) * ************************************************************************/ /************************************************************************ * Modification history: * *:8301.00, CG, Creation * *:9406.16, MSS, Conversion to C. * *:9602.20, MSS, Stripped plh to xyz convertion from tlate. * *:0708.07, DTS, changed comments slightly * ************************************************************************/ #include "llt2xyz.h" #include void plh2xyz(double *plh, double *xyz, double A, double FL) /********1*********2*********3*********4*********5*********6*********7********* * input parameters * ---------------- * A semi-major axis of ellipsoid [units are of distance] * FL flattening of ellipsoid [unitless] * plh[] ellipsoidal coordinates of point, in geodetic latitude, * longitude east of Greenwich, and height [units for * latitude=plh[0] and longitude=plh[1] are in degrees; * height=plh[2] are distance and will be the same as * those of the input parameters] * * output parameters * ----------------- * xyz[] geocentric Cartesian coordinates [units are of distance] * * * ------------------------------ * Escobal, "Methods of Orbit Determination", 1965, Wiley & Sons, Inc., * pp. 27-29. * * see also: * ------------------------------ * xyz2plh */ { double flatfn = (TWO - FL) * FL; double funsq = (ONE - FL) * (ONE - FL); double g1; double g2; double lat_rad = deg_to_rad * plh[0]; double lon_rad = deg_to_rad * plh[1]; double sin_lat; sin_lat = sin(lat_rad); g1 = A / sqrt(ONE - flatfn * sin_lat * sin_lat); g2 = g1 * funsq + plh[2]; g1 = g1 + plh[2]; xyz[0] = g1 * cos(lat_rad); xyz[1] = xyz[0] * sin(lon_rad); xyz[0] = xyz[0] * cos(lon_rad); xyz[2] = g2 * sin_lat; } GMTSAR_V5.7/.svn/pristine/15/15cec8ace887167af7b48689ff8edc7b3d34d67b.svn-base000444 015705 000000 00000002040 13505462013 026063 0ustar00sandwellwheel000000 000000 # # $Id$ # # - Check if the given struct or class has the specified member variable # CHECK_STRUCT_MEMBER (STRUCT MEMBER HEADER VARIABLE) # # STRUCT - the name of the struct or class you are interested in # MEMBER - the member which existence you want to check # HEADER - the header(s) where the prototype should be declared # VARIABLE - variable to store the result # # The following variables may be set before calling this macro to # modify the way the check is run: # # CMAKE_REQUIRED_FLAGS = string of compile command line flags # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) # CMAKE_REQUIRED_INCLUDES = list of include directories # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. INCLUDE(CheckTypeSize) MACRO (CHECK_TYPE_EXISTS _TYPE _HEADER _RESULT) SET(CMAKE_EXTRA_INCLUDE_FILES ${_HEADER}) CHECK_TYPE_SIZE(${_TYPE} ${_RESULT}) ENDMACRO (CHECK_TYPE_EXISTS) GMTSAR_V5.7/.svn/pristine/15/157e4840b45f96d657e3c9645b89254972103cae.svn-base000444 015705 000000 00000030763 13505462013 025264 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # # Modification History # # Xiaohua Xu, Oct 9, 2013 # # Changed some code in Part 2 to make it work for one FBD and one FBS files. # # Xiaopeng Tong, Oct, 2016 # # Add options to do subswaths # alias rm 'rm -f' unset noclobber # if ($#argv != 4) then echo "" echo "Usage: p2p_ALOS2_SCAN_SLC.csh master_image slave_image configuration_file subswatch" echo "" echo "Example: p2p_ALOS2_SCAN_SLC.csh IMG-HH-ALOS2047033500-150407-WBDR1.1__D IMG-HH-ALOS2100853500-160405-WBDR1.1__D config.alos2.slc.txt 1" echo "" echo " Place the raw L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if(! -f raw/$1"-F"$4 ) then echo " no file raw/"$1"-F"$4 exit endif if(! -f raw/$2"-F"$4 ) then echo " no file raw/"$2"-F"$4 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif set subswath = "F"$4 # # read parameters from configuration file # set SAT = `grep SAT $3 | awk '{print $3}'` set stage = `grep proc_stage $3 | awk '{print $3}'` set num_patches = `grep num_patches $3 | awk '{print $3}'` set SLC_factor = `grep SLC_factor $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 300m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 300 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = ` echo $1 | awk '{ print substr($1,5,length($1)-4)}'` set slave = ` echo $2 | awk '{ print substr($1,5,length($1)-4)}'` set master_led = ` echo $1 | awk '{ print substr($1,8,length($1)-7)}'` set slave_led = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p $subswath cd $subswath mkdir -p intf/ SLC/ topo/ cd .. ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # rm raw/*.PRM* rm raw/*.SLC rm raw/*.LED # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif echo $commandline # ALOS_pre_process_SLC IMG-$master LED-$master_led $commandline -rbias -68. # ALOS_pre_process_SLC IMG-$slave LED-$slave_led $commandline -rbias -68. ALOS_pre_process_SLC IMG-$master-$subswath LED-$master_led $commandline ALOS_pre_process_SLC IMG-$slave-$subswath LED-$slave_led $commandline # # special code to filter the SLC data in range does not seem to work # cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cd $subswath cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../../raw/*.PRM . ln -s ../../raw/IMG-$master-$subswath.SLC . ln -s ../../raw/IMG-$slave-$subswath.SLC . ln -s ../../raw/IMG-$master-$subswath.LED . ln -s ../../raw/IMG-$slave-$subswath.LED . # if images do not match, convert the FBD image to FBS set rng_samp_rate_m = `grep rng_samp_rate IMG-$master-$subswath.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate IMG-$slave-$subswath.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$slave-$subswath.PRM IMG-$slave-$subswath"_"FBS.PRM echo "Overwriting the old slave image" mv IMG-$slave-$subswath"_"FBS.PRM IMG-$slave-$subswath.PRM update_PRM IMG-$slave-$subswath.PRM input_file IMG-$slave-$subswath.SLC mv IMG-$slave-$subswath"_"FBS.SLC IMG-$slave-$subswath.SLC else if ($t == 0.5) then echo "Convert the master image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$master-$subswath.PRM IMG-$master-$subswath"_"FBS.PRM echo "Overwriting the old master image" mv IMG-$master-$subswath"_"FBS.PRM IMG-$master-$subswath.PRM update_PRM IMG-$master-$subswath.PRM input_file IMG-$master-$subswath.SLC mv IMG-$master-$subswath"_"FBS.SLC IMG-$master-$subswath.SLC else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif cp IMG-$slave-$subswath.PRM IMG-$slave-$subswath.PRM0 SAT_baseline IMG-$master-$subswath.PRM IMG-$slave-$subswath.PRM0 >> IMG-$slave-$subswath.PRM # # there is a bug in xcorr so xsearch and ysearch must be the same # # xcorr IMG-$master.PRM IMG-$slave.PRM -xsearch 128 -ysearch 128 -nx 64 -ny 256 xcorr IMG-$master-$subswath.PRM IMG-$slave-$subswath.PRM -xsearch 32 -ysearch 256 -nx 32 -ny 128 awk '{print $4}' < freq_xcorr.dat > tmp.dat set amedian = `sort -n tmp.dat | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }'` set amax = `echo $amedian | awk '{print $1+3}'` set amin = `echo $amedian | awk '{print $1-3}'` awk '{if($4 > '$amin' && $4 < '$amax') print $0}' < freq_xcorr.dat > tmp2.dat fitoffset.csh 2 3 tmp2.dat >> IMG-$slave-$subswath.PRM 10 resamp IMG-$master-$subswath.PRM IMG-$slave-$subswath.PRM IMG-$slave-$subswath.PRMresamp IMG-$slave-$subswath.SLCresamp 4 rm IMG-$slave-$subswath.SLC mv IMG-$slave-$subswath.SLCresamp IMG-$slave-$subswath.SLC cp IMG-$slave-$subswath.PRMresamp IMG-$slave-$subswath.PRM cd ../.. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cd $subswath cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/IMG-$master-$subswath.PRM master.PRM ln -s ../../raw/IMG-$master-$subswath.LED . if (-f ../../topo/dem.grd) then ln -s ../../topo/dem.grd . dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC slc2amp.csh IMG-$master-$subswath.PRM 2 amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif cd .. endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cd $subswath cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../SLC/IMG-$ref-$subswath.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep-$subswath.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../../raw/IMG-$ref-$subswath.LED . ln -s ../../../raw/IMG-$rep-$subswath.LED . ln -s ../../SLC/IMG-$ref-$subswath.SLC . ln -s ../../SLC/IMG-$rep-$subswath.SLC . cp ../../SLC/IMG-$ref-$subswath.PRM . cp ../../SLC/IMG-$rep-$subswath.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM -topo topo_shift.grd filter.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM -topo topo_ra.grd filter.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM $filter $dec endif else intf.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM filter.csh IMG-$ref-$subswath.PRM IMG-$rep-$subswath.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" cd .. endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd $subswath cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-$ref-$subswath.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep-$subswath.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd $subswath cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-$ref-$subswath.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep-$subswath.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../../.. endif # end GMTSAR_V5.7/.svn/pristine/15/154600fb7f08e0ec3f0aa58dfb300bf204e28ed3.svn-base000444 015705 000000 00000005560 13505462014 025724 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Hermite orbit interpolator based on fortran code of Werner Gunter * * 13th International Workshop on Laser Ranging, 2002, Washington, DC * *******************************************************************************/ /******************************************************************************** * Creator: David T. Sandwell and Rob Mellors * (San Diego State University, *Scripps Institution of Oceanography) * Date : 06/07/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 10/03/2007 - converted from FORTRAN to C * * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" void hermite_c(double *x, double *y, double *z, int nmax, int nval, double xp, double *yp, int *ir) { /* interpolation by a polynomial using nval out of nmax given data points input: x(i) - arguments of given values (i=1,...,nmax) y(i) - functional values y=f(x) z(i) - derivatives z=f'(x) nmax - number of given points in list nval - number of points to use for interpolation xp - interpolation argument output: yp - interpolated value at xp ir - return code 0 = ok 1 = interpolation not in center interval 2 = argument out of range ***** calls no other routines */ int n, i, j, i0; double sj, hj, f0, f1; /* check to see if interpolation point is inside data range */ *yp = 0.0; n = nval - 1; *ir = 0; /* reduced index by 1 */ if (xp < x[0] || xp > x[nmax - 1]) { fprintf(stderr, "interpolation point outside of data constraints\n"); *ir = 2; exit(1); } /* look for given value immediately preceeding interpolation argument */ for (i = 0; i < nmax; i++) { if (x[i] >= xp) break; } /* check to see if interpolation point is centered in data range */ i0 = i - (n + 1) / 2; if (i0 <= 0) { // fprintf(stderr,"hermite: interpolation not in center interval\n"); i0 = 0; *ir = 0; } /* reduced index by 1 */ if (i0 + n > nmax) { fprintf(stderr, "hermite: interpolation not in center interval\n"); i0 = nmax - n - 1; *ir = 0; } /* do Hermite interpolation */ for (i = 0; i <= n; i++) { sj = 0.0; hj = 1.0; for (j = 0; j <= n; j++) { if (j != i) { hj = hj * (xp - x[j + i0]) / (x[i + i0] - x[j + i0]); sj = sj + 1.0 / (x[i + i0] - x[j + i0]); } } f0 = 1.0 - 2.0 * (xp - x[i + i0]) * sj; f1 = xp - x[i + i0]; *yp = *yp + (y[i + i0] * f0 + z[i + i0] * f1) * hj * hj; if (isnan(*yp) != 0) { fprintf(stderr, "nan!\n"); exit(1); } } /* done */ } GMTSAR_V5.7/.svn/pristine/8d/8db6631947a55001b1a1fc5fe4f53cc7a2bb79ce.svn-base000444 015705 000000 00000055554 13505462014 026042 0ustar00sandwellwheel000000 000000 /*----------------------------------------------------------------------*/ /* NAME */ /* ers_line_fixer - fixes lines in an ERS SAR raw data file */ /* */ /* SYNOPSIS */ /* ers_line_fixer [ -a ] [ -h header ] [ -l line ] [ -s station ] */ /* */ /* */ /* DESCRIPTION */ /* The ers_line_fixer program reads in ERS SAR raw data files */ /* and produces a single "preprocessed" ERS SAR data file. */ /* Missing lines are "replaced" by the next available line. */ /* */ /* OPTIONS */ /* -a Align the lines by shifting them so they all have the */ /* same sampling window start time. */ /* */ /* -h header */ /* Sets the number of bytes per header to be

. */ /* If this option is not specified, the program will use */ /* the header length for the specified station, or the */ /* default header length. */ /* */ /* -l line */ /* Sets the number of bytes per line to be . If */ /* this option is not specified, the program will use the */ /* line length for the specified station, or attempt to */ /* determine the line length. */ /* */ /* -s station */ /* Indicates the input file station. If this option is */ /* not specified, the program will use the default */ /* station. */ /*----------------------------------------------------------------------*/ /* DEC 29, 2010 - Modified for little endian computer. */ /* Does not change byte order on output. */ /* Jan 23, 2011 - Modified to read near range instead of swst */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) #define OPTSTRING "a:h:l:s:" /* for assessing unknown stations */ #define UNKNOWN "Unknown" #define MIN_LINE_SIZE 10000 #define MAX_LINE_SIZE 13000 #define MIN_PRF 1640.0 #define MAX_PRF 1720.0 #define DEFAULT_HEADER_SIZE 412 #define CHECK_LINES 5 /* number of lines to check */ #define MISSING_LINES 1 /* OK # of missing lines */ #define MAX_GAP 900 /* max consec. missing lines */ #define SWST_OFFSET 4 /* bytes from ifc to swst */ #define PRI_OFFSET 6 /* bytes from ifc to pri */ #define IFC_SIZE 4 /* four bytes per ifc */ #define SWST_SIZE 2 /* two bytes per swst */ #define PRI_SIZE 2 /* two bytes per pri */ #define SEC_PER_PRI_COUNT 210.94e-09 #define SOL 299792456.0 /*-----------*/ /* FUNCTIONS */ /*-----------*/ void readline(int ifd, char *data, int line_length, char *command, char *filename, int line_number); void writeline(int ofd, char *data, int line_length, char *command, char *filename, int line_number); int determine_info(char *command, char *filename, int station_index); int try_info(int ifd, int line_length, int ifc_index); double calc_pri(unsigned short pri_dn); double calc_swst(unsigned short swst_dn, double pri); int range2swst(double range, double pri); void underline(FILE *ofp, int count, char character); void usage(char *command, int exit_code); int is_big_endian_(void); int is_big_endian__(void); /*-----------------------------*/ /* PROCESSING SITE INFORMATION */ /*-----------------------------*/ typedef struct station_info { char *station_name; int line_length; int header_length; int ifc_index; /* image format counter */ int swst_index; /* sampling window start time */ int pri_index; /* pulse repetition interval */ } Station_Info; Station_Info station[] = {{"DPAF/ESRIN", 11644, 412, 210, 214, 216}, {"CO", 11644, 416, 214, 218, 220}, {"EIC", 11644, 410, 198, 202, 204}, {"UK", 11644, 412, 210, 214, 216}, {"CCRS", 12060, 412, 200, 204, 206}, {"ASF", 11474, 242, 200, 204, 206}, {UNKNOWN, 0, DEFAULT_HEADER_SIZE, 0, 0, 0}, {NULL, 0, 0, 0, 0, 0}}; /*------------------*/ /* OPTION VARIABLES */ /*------------------*/ char opt_adjust, opt_line, opt_header, opt_station; /*==========================*/ /* MAIN PROGRAM: line_fixer */ /*==========================*/ int main(int argc, char *argv[]) { char *output_filename, *station_name, *filename, *data, *data_buf; char **input_filenames; unsigned short swst_dn, old_swst_dn, swst_dn1 = 0, pri_dn, old_pri_dn; int station_index, c, header_length = 0, line_length = 0, match_count; int i, input_filecount, ifc_index, swst_index, pri_index, file_index; int file_size, line_count, input_line_number, ifc, lines_to_write; int old_ifc, shift_bytes, old_shift_bytes, output_line_number = 0; int char_count, ignore_flag; int ofd, ifd = 0; int endian; int pcount; /* actual count of data pixels */ double pri, swst; double near_range, near_range_in = 0.0; extern char *optarg; extern int optind; /*------------------------*/ /* check endian */ /*------------------------*/ endian = is_big_endian_(); printf("\ncheck endian on this computer: (1 big or -1 little) %d \n", endian); /*------------------------*/ /* parse the command line */ /*------------------------*/ station_index = 0; /* the first station is the default */ while ((c = getopt(argc, argv, OPTSTRING)) != -1) { switch (c) { case 'a': opt_adjust = 1; near_range_in = atof(optarg); break; case 'h': opt_header = 1; header_length = atoi(optarg); break; case 'l': opt_line = 1; line_length = atoi(optarg); break; case 's': opt_station = 1; match_count = 0; for (i = 0; station[i].station_name; i++) { if (strcasecmp(optarg, station[i].station_name) == 0) { station_index = i; match_count = 1; break; } } if (match_count != 1) { printf("%s ERROR: station %s is unknown\n", argv[0], optarg); exit(1); } break; case '?': usage(argv[0], 1); break; } } if (argc < optind + 2) usage(argv[0], 1); input_filenames = argv + optind; input_filecount = argc - optind - 1; output_filename = argv[argc - 1]; /*------------------*/ /* open output file */ /*------------------*/ ofd = open(output_filename, O_WRONLY | O_CREAT | O_EXCL, 0644); if (ofd == -1) { switch (errno) { case EACCES: printf("%s ERROR: can't write to output file (%s) parent directory\n", argv[0], output_filename); break; case EEXIST: printf("%s ERROR: output file (%s) already exists (I don't clobber)\n", argv[0], output_filename); break; default: printf("%s ERROR: error opening output file (%s)\n", argv[0], output_filename); break; } exit(1); } /*-----------------------------*/ /* override station parameters */ /*-----------------------------*/ if (opt_line) station[station_index].line_length = line_length; if (opt_header) station[station_index].header_length = header_length; /*------------------------------------*/ /* if unknown station, determine type */ /*------------------------------------*/ if (strcasecmp(UNKNOWN, station[station_index].station_name) == 0) { printf("\n"); char_count = printf("Using %s to determine station information\n", *input_filenames); underline(stdout, char_count - 1, '-'); determine_info(argv[0], *input_filenames, station_index); } /*--------------------------------*/ /* set variables based on station */ /*--------------------------------*/ line_length = station[station_index].line_length; header_length = station[station_index].header_length; station_name = station[station_index].station_name; ifc_index = station[station_index].ifc_index; swst_index = station[station_index].swst_index; pri_index = station[station_index].pri_index; /*----------------*/ /* print out info */ /*----------------*/ printf("\n"); printf(" Station: %s\n", station_name); printf(" Line Length: %d\n", line_length); printf("Header Length: %d\n", header_length); printf(" IFC Index: %d\n", ifc_index); printf(" SWST Index: %d\n", swst_index); printf(" PRI Index: %d\n", pri_index); /*----------------------------*/ /* allocate memory for a line */ /*----------------------------*/ data = (char *)malloc(line_length); if (data == 0) { printf("%s ERROR: error allocating line memory (%d bytes)\n", argv[0], line_length); exit(1); } data_buf = (char *)malloc(line_length); if (data_buf == 0) { printf("%s ERROR: error allocating line memory (%d bytes)\n", argv[0], line_length); exit(1); } /*------------*/ /* initialize */ /*------------*/ old_shift_bytes = 0; old_ifc = 0; old_pri_dn = 0; old_swst_dn = 0; ignore_flag = 0; /*------------------------------------*/ /* process file by file, line by line */ /*------------------------------------*/ printf("\n"); char_count = printf("Writing to fixed data file %s\n", output_filename); underline(stdout, char_count - 1, '-'); for (file_index = 0; file_index < input_filecount; file_index++) { filename = *(input_filenames + file_index); ifd = open(filename, O_RDONLY); if (ifd == -1) { printf("%s ERROR: error opening input file %s\n", argv[0], filename); exit(1); } file_size = lseek(ifd, 0, SEEK_END); line_count = file_size / line_length; printf("\n"); printf("INPUT FILE: %s\n", filename); printf("LINE COUNT: %d\n", line_count); /*---------------------------*/ /* do something with headers */ /*---------------------------*/ lseek(ifd, 0, SEEK_SET); readline(ifd, data, line_length, argv[0], filename, 0); if (file_index == 0) { printf(" Transferring header.\n"); writeline(ofd, data, line_length, argv[0], output_filename, 0); } else printf(" Discarding header.\n"); /*-------------------*/ /* read line by line */ /*-------------------*/ for (input_line_number = 1; input_line_number < line_count; input_line_number++) { memcpy(data_buf, data, line_length); readline(ifd, data, line_length, argv[0], filename, input_line_number); /*----------------------------------------------------*/ /* swap bytes on the pixel count for esarp */ /* note this is the ONLY field that gets a byte swap. */ /*----------------------------------------------------*/ memcpy((char *)&pcount, data + 24, 4); if (endian == -1) FIX_INT(pcount); memcpy((char *)data + 24, &pcount, 4); /*------------------------------------*/ /* determine the image format counter */ /*------------------------------------*/ memcpy((char *)&ifc, data + ifc_index, IFC_SIZE); if (endian == -1) FIX_INT(ifc); if (ifc == 0) { printf(" Line: %d, Previously inserted line\n", input_line_number); } /*----------------------*/ /* detect missing lines */ /*----------------------*/ if (file_index == 0 && input_line_number == 1) { /* can't detect missing lines yet */ lines_to_write = 1; } else if (ifc > old_ifc) { /* the standard case */ lines_to_write = ifc - old_ifc; } else if (ifc == 0) { /* a previously inserted line */ lines_to_write = 1; } else if (ifc < old_ifc) { /* backtracking due to overlapped files or bad line */ lines_to_write = 0; } else { /* what else can I do? */ lines_to_write = 0; } if (lines_to_write > MAX_GAP + 1) { if (ignore_flag) { printf("%s ERROR: too many missing lines (%d)\n", argv[0], lines_to_write - 1); exit(1); } printf(" Line: %d, ignoring line (%d missing)\n", input_line_number, lines_to_write - 1); lines_to_write = 0; ignore_flag = 1; } else ignore_flag = 0; if (lines_to_write) { if (ifc) old_ifc = ifc; else old_ifc++; } else continue; /*-----------------------------------------------*/ /* determine the pri (pulse repetition interval) */ /*-----------------------------------------------*/ /* pri_dn was sometimes zero which caused problems so force it to 2820 */ memcpy((char *)&pri_dn, data + pri_index, PRI_SIZE); if (endian == -1) FIX_SHORT(pri_dn); pri_dn = (unsigned short)2820; if (pri_dn != old_pri_dn) { pri = calc_pri(pri_dn); printf(" Line: %d, PRI = %.8g s, PRF = %.8g Hz\n", input_line_number, pri, 1.0 / pri); old_pri_dn = pri_dn; } /*------------------------------------------*/ /* determine the sampling window start time */ /*------------------------------------------*/ memcpy((char *)&swst_dn, data + swst_index, SWST_SIZE); if (endian == -1) FIX_SHORT(swst_dn); if (swst_dn != old_swst_dn) { printf("Line: %d, swst_dn = %d, old_swst_dn = %d \n", input_line_number, swst_dn, old_swst_dn); old_swst_dn = swst_dn; } /*-----------------------------------------------------*/ /* calculate the swst_dn1 */ /*-----------------------------------------------------*/ if (input_line_number == 1) swst_dn1 = swst_dn; if (opt_adjust) swst_dn1 = range2swst(near_range_in, pri); /* debug printf("near_range_in %f, pri %.8g, swst_dn1 %d\n", near_range_in, pri, swst_dn1); */ /*------------------------------------------*/ /* write the near range */ /*------------------------------------------*/ if (input_line_number == 2) { swst = calc_swst(swst_dn1, pri); near_range = SOL * swst / 2.; printf("near_range = %lf \n", near_range); } /*----------------------------*/ /* align lines */ /*----------------------------*/ // if (opt_adjust) // { /* set the sampling window start time */ if (endian == -1) FIX_SHORT(swst_dn); memcpy(data + swst_index, (char *)&swst_dn, SWST_SIZE); if (endian == -1) FIX_SHORT(swst_dn); shift_bytes = (swst_dn1 - swst_dn) * 8; if (shift_bytes != old_shift_bytes) { printf(" Line: %d, Byte shift = %d bytes\n", input_line_number, shift_bytes); old_shift_bytes = shift_bytes; } /* fix for CCRS data of length 12060 */ if (line_length == 12060) { for (i = 11644; i < 12060; i++) data[i] = 35; } if (shift_bytes > 0) { for (i = header_length; i < line_length - shift_bytes; i++) { data[i] = data[i + shift_bytes]; } for (i = line_length - shift_bytes; i < line_length; i++) { data[i] = 35; } } else if (shift_bytes < 0) { if (shift_bytes >= -1.0 * (line_length - 1)) { for (i = line_length - 1; i >= header_length - shift_bytes; i--) { data[i] = data[i + shift_bytes]; } for (i = header_length; i < header_length - shift_bytes; i++) { data[i] = 35; } } else { lines_to_write++; if (input_line_number != 1) { memcpy(data, data_buf, line_length); } } } // } /*-----------------*/ /* write out lines */ /*-----------------*/ switch (lines_to_write) { case 1: writeline(ofd, data, line_length, argv[0], output_filename, output_line_number); output_line_number++; break; case 0: break; default: printf(" Line: %d, %d missing line(s)\n", input_line_number, lines_to_write - 1); /* zero the ifc */ memset(data + ifc_index, 0, IFC_SIZE); for (i = 0; i < lines_to_write - 1; i++) { writeline(ofd, data, line_length, argv[0], output_filename, output_line_number); output_line_number++; } /* restore the ifc */ if (endian == -1) FIX_INT(ifc); memcpy(data + ifc_index, (char *)&ifc, IFC_SIZE); writeline(ofd, data, line_length, argv[0], output_filename, output_line_number); output_line_number++; } } } /*---------------*/ /* free the line */ /*---------------*/ free(data); /*-----------------*/ /* close the files */ /*-----------------*/ close(ifd); close(ofd); } /*----------*/ /* calc_pri */ /*----------*/ /* Calculates the pri */ double calc_pri(unsigned short pri_dn) { return (((double)pri_dn + 2.0) * SEC_PER_PRI_COUNT); } /*-----------*/ /* calc_swst */ /*-----------*/ /* Calculates the swst */ double calc_swst(unsigned short swst_dn, double pri) { /* return ((double) swst_dn * SEC_PER_PRI_COUNT + 9.0 * pri - 6.0E-6);*/ /* based on Johan Jacob Mohr and Søren Nørvang Madsen, Member, IEEE,Geometric * Calibration of ERS Satellite SAR Images, 2001, calibriation should be 6.6*/ return ((double)swst_dn * SEC_PER_PRI_COUNT + 9.0 * pri - 6.6E-6); } /*------------*/ /* range2swst */ /*------------*/ /* Calculates the swst_dn from near_range_in defined by user */ int range2swst(double range, double pri) { /* refer to calc_swst */ return ((int)floor((2.0 * range / SOL + 6.6E-6 - 9.0 * pri) / SEC_PER_PRI_COUNT)); } /*----------*/ /* readline */ /*----------*/ /* Reads in the specified number of bytes and exits with message on error */ void readline(int ifd, char *data, int line_length, char *command, char *filename, int line_number) { if (read(ifd, data, line_length) != line_length) { if (line_number) printf("%s ERROR: error reading line %d from %s\n", command, line_number, filename); else printf("%s ERROR: error reading header from %s\n", command, filename); exit(1); } return; } /*-----------*/ /* writeline */ /*-----------*/ /* Writes the specified number of bytes and exits with message on error */ void writeline(int ofd, char *data, int line_length, char *command, char *filename, int line_number) { if (write(ofd, data, line_length) != line_length) { if (line_number) printf("%s ERROR: error writing line %d to %s\n", command, line_number, filename); else printf("%s ERROR: error writing header to %s\n", command, filename); exit(1); } return; } /*----------------*/ /* determine_info */ /*----------------*/ /* Sets-up the station_info structure based on file size and contents */ int determine_info(char *command, char *filename, int station_index) { int file_size, header_length, ifc_index, pass, line_length, x; int ifd; /*-----------*/ /* open file */ /*-----------*/ ifd = open(filename, O_RDONLY); if (ifd == -1) { printf("%s ERROR: error opening file (%s) for station determination\n", command, filename); exit(1); } file_size = lseek(ifd, 0, SEEK_END); header_length = station[station_index].header_length; /*----------------------------------------------*/ /* if line length is known, just search for IFC */ /*----------------------------------------------*/ if (station[station_index].line_length) { for (ifc_index = 0; ifc_index < header_length; ifc_index++) { if (try_info(ifd, station[station_index].line_length, ifc_index)) { station[station_index].ifc_index = ifc_index; station[station_index].swst_index = ifc_index + SWST_OFFSET; station[station_index].pri_index = ifc_index + PRI_OFFSET; close(ifd); return (1); } } } else { /*--------------------------------------------------*/ /* use two passes (one based on file size, one not) */ /*--------------------------------------------------*/ for (pass = 0; pass < 2; pass++) { /*------------------------------------*/ /* step through possible line lengths */ /*------------------------------------*/ for (line_length = MIN_LINE_SIZE; line_length < MAX_LINE_SIZE; line_length++) { if (pass == 0) { /* check line sizes with integer lines per file */ x = file_size / line_length; if (x * line_length != file_size) continue; } else { /* check line sizes with non-integer lines per file */ x = file_size / line_length; if (x * line_length == file_size) continue; } /*-------------------------------------*/ /* step through possible ifc locations */ /*-------------------------------------*/ for (ifc_index = 0; ifc_index < header_length; ifc_index++) { if (try_info(ifd, line_length, ifc_index)) { station[station_index].line_length = line_length; station[station_index].ifc_index = ifc_index; station[station_index].swst_index = ifc_index + SWST_OFFSET; station[station_index].pri_index = ifc_index + PRI_OFFSET; close(ifd); return (1); } } } } } close(ifd); return (0); } /*----------*/ /* try_info */ /*----------*/ /* returns 1 if info appears to be acceptable, 0 otherwise */ int try_info(int ifd, int line_length, int ifc_index) { char bad; unsigned short pri_dn[CHECK_LINES]; int line_number, ifc_offset, pri_offset; int ifc_dn[CHECK_LINES]; unsigned int sum_dif, dif; double pri, prf; /*--------------------------------------*/ /* load in values for CHECK_LINES lines */ /*--------------------------------------*/ for (line_number = 0; line_number < CHECK_LINES; line_number++) { ifc_offset = line_length * (line_number + 1) + ifc_index; pri_offset = ifc_offset + PRI_OFFSET; lseek(ifd, ifc_offset, SEEK_SET); read(ifd, (char *)&ifc_dn[line_number], IFC_SIZE); lseek(ifd, pri_offset, SEEK_SET); read(ifd, (char *)&pri_dn[line_number], PRI_SIZE); } /*---------------------------------*/ /* check values for reasonableness */ /*---------------------------------*/ sum_dif = 0; bad = 0; for (line_number = 0; line_number < CHECK_LINES; line_number++) { if (line_number > 0) { dif = ifc_dn[line_number] - ifc_dn[line_number - 1]; if (dif < 1) { bad = 1; break; } else sum_dif += dif; } pri = calc_pri(pri_dn[line_number]); if (pri == 0.0) { bad = 1; break; } prf = 1.0 / calc_pri(pri_dn[line_number]); if (prf < MIN_PRF || prf > MAX_PRF) { bad = 1; break; } } if (!bad && sum_dif < CHECK_LINES - 1 + MISSING_LINES) return (1); else return (0); } /*-------*/ /* usage */ /*-------*/ /* Prints a usage message to stderr, and exits */ void usage(char *command, int exit_code) { int i; printf("usage : ers_line_fixer [ -a near_range] [ -h header ] [ -l line ] [ " "-s station ]\n"); printf(" \n"); printf("\n"); printf(" -a near_range : align near_range \n"); printf(" -h header : set the header length (bytes)\n"); printf(" -l line : set the line length (bytes)\n"); printf(" -s station : set processing station\n"); printf(" raw file : input filename\n"); printf(" fixed file : output filename\n"); printf("\n"); printf("Stations: %s", station[0].station_name); for (i = 1; station[i].station_name; i++) printf(", %s", station[i].station_name); printf("\n"); exit(exit_code); return; } /*-----------*/ /* underline */ /*-----------*/ void underline(FILE *ofp, int count, char character) { int i; for (i = 0; i < count; i++) fprintf(ofp, "%c", character); fprintf(ofp, "\n"); } /*_______________________________*/ /* check endian of machine */ /* 1 if big; -1 if little */ /*_______________________________*/ int is_big_endian_() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } int is_big_endian__() { return is_big_endian_(); } GMTSAR_V5.7/.svn/pristine/8d/8d7610a32fe0b84c9ed2bfed44268fab8f6f8135.svn-base000444 015705 000000 00000136001 13505462014 026050 0ustar00sandwellwheel000000 000000 /* fftpack.c : A set of FFT routines in C. Algorithmically based on Fortran-77 FFTPACK by Paul N. Swarztrauber (Version 4, 1985). */ /* isign is +1 for backward and -1 for forward transforms */ #include #include /* #define DOUBLE */ #ifdef DOUBLE #define Treal double #else #define Treal float #endif #define ref(u, a) u[a] #define MAXFAC 13 /* maximum number of factors in factorization of n */ #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------------- passf2, passf3, passf4, passf5, passf. Complex FFT passes fwd and bwd. ---------------------------------------------------------------------- */ static void passf2(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], int isign) /* isign==+1 for backward transform */ { int i, k, ah, ac; Treal ti2, tr2; if (ido <= 2) { for (k = 0; k < l1; k++) { ah = k * ido; ac = 2 * k * ido; ch[ah] = ref(cc, ac) + ref(cc, ac + ido); ch[ah + ido * l1] = ref(cc, ac) - ref(cc, ac + ido); ch[ah + 1] = ref(cc, ac + 1) + ref(cc, ac + ido + 1); ch[ah + ido * l1 + 1] = ref(cc, ac + 1) - ref(cc, ac + ido + 1); } } else { for (k = 0; k < l1; k++) { for (i = 0; i < ido - 1; i += 2) { ah = i + k * ido; ac = i + 2 * k * ido; ch[ah] = ref(cc, ac) + ref(cc, ac + ido); tr2 = ref(cc, ac) - ref(cc, ac + ido); ch[ah + 1] = ref(cc, ac + 1) + ref(cc, ac + 1 + ido); ti2 = ref(cc, ac + 1) - ref(cc, ac + 1 + ido); ch[ah + l1 * ido + 1] = wa1[i] * ti2 + isign * wa1[i + 1] * tr2; ch[ah + l1 * ido] = wa1[i] * tr2 - isign * wa1[i + 1] * ti2; } } } } /* passf2 */ static void passf3(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], int isign) /* isign==+1 for backward transform */ { static const Treal taur = -0.5; static const Treal taui = 0.866025403784439; int i, k, ac, ah; Treal ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2; if (ido == 2) { for (k = 1; k <= l1; k++) { ac = (3 * k - 2) * ido; tr2 = ref(cc, ac) + ref(cc, ac + ido); cr2 = ref(cc, ac - ido) + taur * tr2; ah = (k - 1) * ido; ch[ah] = ref(cc, ac - ido) + tr2; ti2 = ref(cc, ac + 1) + ref(cc, ac + ido + 1); ci2 = ref(cc, ac - ido + 1) + taur * ti2; ch[ah + 1] = ref(cc, ac - ido + 1) + ti2; cr3 = isign * taui * (ref(cc, ac) - ref(cc, ac + ido)); ci3 = isign * taui * (ref(cc, ac + 1) - ref(cc, ac + ido + 1)); ch[ah + l1 * ido] = cr2 - ci3; ch[ah + 2 * l1 * ido] = cr2 + ci3; ch[ah + l1 * ido + 1] = ci2 + cr3; ch[ah + 2 * l1 * ido + 1] = ci2 - cr3; } } else { for (k = 1; k <= l1; k++) { for (i = 0; i < ido - 1; i += 2) { ac = i + (3 * k - 2) * ido; tr2 = ref(cc, ac) + ref(cc, ac + ido); cr2 = ref(cc, ac - ido) + taur * tr2; ah = i + (k - 1) * ido; ch[ah] = ref(cc, ac - ido) + tr2; ti2 = ref(cc, ac + 1) + ref(cc, ac + ido + 1); ci2 = ref(cc, ac - ido + 1) + taur * ti2; ch[ah + 1] = ref(cc, ac - ido + 1) + ti2; cr3 = isign * taui * (ref(cc, ac) - ref(cc, ac + ido)); ci3 = isign * taui * (ref(cc, ac + 1) - ref(cc, ac + ido + 1)); dr2 = cr2 - ci3; dr3 = cr2 + ci3; di2 = ci2 + cr3; di3 = ci2 - cr3; ch[ah + l1 * ido + 1] = wa1[i] * di2 + isign * wa1[i + 1] * dr2; ch[ah + l1 * ido] = wa1[i] * dr2 - isign * wa1[i + 1] * di2; ch[ah + 2 * l1 * ido + 1] = wa2[i] * di3 + isign * wa2[i + 1] * dr3; ch[ah + 2 * l1 * ido] = wa2[i] * dr3 - isign * wa2[i + 1] * di3; } } } } /* passf3 */ static void passf4(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[], int isign) /* isign == -1 for forward transform and +1 for backward transform */ { int i, k, ac, ah; Treal ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4; if (ido == 2) { for (k = 0; k < l1; k++) { ac = 4 * k * ido + 1; ti1 = ref(cc, ac) - ref(cc, ac + 2 * ido); ti2 = ref(cc, ac) + ref(cc, ac + 2 * ido); tr4 = ref(cc, ac + 3 * ido) - ref(cc, ac + ido); ti3 = ref(cc, ac + ido) + ref(cc, ac + 3 * ido); tr1 = ref(cc, ac - 1) - ref(cc, ac + 2 * ido - 1); tr2 = ref(cc, ac - 1) + ref(cc, ac + 2 * ido - 1); ti4 = ref(cc, ac + ido - 1) - ref(cc, ac + 3 * ido - 1); tr3 = ref(cc, ac + ido - 1) + ref(cc, ac + 3 * ido - 1); ah = k * ido; ch[ah] = tr2 + tr3; ch[ah + 2 * l1 * ido] = tr2 - tr3; ch[ah + 1] = ti2 + ti3; ch[ah + 2 * l1 * ido + 1] = ti2 - ti3; ch[ah + l1 * ido] = tr1 + isign * tr4; ch[ah + 3 * l1 * ido] = tr1 - isign * tr4; ch[ah + l1 * ido + 1] = ti1 + isign * ti4; ch[ah + 3 * l1 * ido + 1] = ti1 - isign * ti4; } } else { for (k = 0; k < l1; k++) { for (i = 0; i < ido - 1; i += 2) { ac = i + 1 + 4 * k * ido; ti1 = ref(cc, ac) - ref(cc, ac + 2 * ido); ti2 = ref(cc, ac) + ref(cc, ac + 2 * ido); ti3 = ref(cc, ac + ido) + ref(cc, ac + 3 * ido); tr4 = ref(cc, ac + 3 * ido) - ref(cc, ac + ido); tr1 = ref(cc, ac - 1) - ref(cc, ac + 2 * ido - 1); tr2 = ref(cc, ac - 1) + ref(cc, ac + 2 * ido - 1); ti4 = ref(cc, ac + ido - 1) - ref(cc, ac + 3 * ido - 1); tr3 = ref(cc, ac + ido - 1) + ref(cc, ac + 3 * ido - 1); ah = i + k * ido; ch[ah] = tr2 + tr3; cr3 = tr2 - tr3; ch[ah + 1] = ti2 + ti3; ci3 = ti2 - ti3; cr2 = tr1 + isign * tr4; cr4 = tr1 - isign * tr4; ci2 = ti1 + isign * ti4; ci4 = ti1 - isign * ti4; ch[ah + l1 * ido] = wa1[i] * cr2 - isign * wa1[i + 1] * ci2; ch[ah + l1 * ido + 1] = wa1[i] * ci2 + isign * wa1[i + 1] * cr2; ch[ah + 2 * l1 * ido] = wa2[i] * cr3 - isign * wa2[i + 1] * ci3; ch[ah + 2 * l1 * ido + 1] = wa2[i] * ci3 + isign * wa2[i + 1] * cr3; ch[ah + 3 * l1 * ido] = wa3[i] * cr4 - isign * wa3[i + 1] * ci4; ch[ah + 3 * l1 * ido + 1] = wa3[i] * ci4 + isign * wa3[i + 1] * cr4; } } } } /* passf4 */ static void passf5(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[], const Treal wa4[], int isign) /* isign == -1 for forward transform and +1 for backward transform */ { static const Treal tr11 = 0.309016994374947; static const Treal ti11 = 0.951056516295154; static const Treal tr12 = -0.809016994374947; static const Treal ti12 = 0.587785252292473; int i, k, ac, ah; Treal ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5; if (ido == 2) { for (k = 1; k <= l1; ++k) { ac = (5 * k - 4) * ido + 1; ti5 = ref(cc, ac) - ref(cc, ac + 3 * ido); ti2 = ref(cc, ac) + ref(cc, ac + 3 * ido); ti4 = ref(cc, ac + ido) - ref(cc, ac + 2 * ido); ti3 = ref(cc, ac + ido) + ref(cc, ac + 2 * ido); tr5 = ref(cc, ac - 1) - ref(cc, ac + 3 * ido - 1); tr2 = ref(cc, ac - 1) + ref(cc, ac + 3 * ido - 1); tr4 = ref(cc, ac + ido - 1) - ref(cc, ac + 2 * ido - 1); tr3 = ref(cc, ac + ido - 1) + ref(cc, ac + 2 * ido - 1); ah = (k - 1) * ido; ch[ah] = ref(cc, ac - ido - 1) + tr2 + tr3; ch[ah + 1] = ref(cc, ac - ido) + ti2 + ti3; cr2 = ref(cc, ac - ido - 1) + tr11 * tr2 + tr12 * tr3; ci2 = ref(cc, ac - ido) + tr11 * ti2 + tr12 * ti3; cr3 = ref(cc, ac - ido - 1) + tr12 * tr2 + tr11 * tr3; ci3 = ref(cc, ac - ido) + tr12 * ti2 + tr11 * ti3; cr5 = isign * (ti11 * tr5 + ti12 * tr4); ci5 = isign * (ti11 * ti5 + ti12 * ti4); cr4 = isign * (ti12 * tr5 - ti11 * tr4); ci4 = isign * (ti12 * ti5 - ti11 * ti4); ch[ah + l1 * ido] = cr2 - ci5; ch[ah + 4 * l1 * ido] = cr2 + ci5; ch[ah + l1 * ido + 1] = ci2 + cr5; ch[ah + 2 * l1 * ido + 1] = ci3 + cr4; ch[ah + 2 * l1 * ido] = cr3 - ci4; ch[ah + 3 * l1 * ido] = cr3 + ci4; ch[ah + 3 * l1 * ido + 1] = ci3 - cr4; ch[ah + 4 * l1 * ido + 1] = ci2 - cr5; } } else { for (k = 1; k <= l1; k++) { for (i = 0; i < ido - 1; i += 2) { ac = i + 1 + (k * 5 - 4) * ido; ti5 = ref(cc, ac) - ref(cc, ac + 3 * ido); ti2 = ref(cc, ac) + ref(cc, ac + 3 * ido); ti4 = ref(cc, ac + ido) - ref(cc, ac + 2 * ido); ti3 = ref(cc, ac + ido) + ref(cc, ac + 2 * ido); tr5 = ref(cc, ac - 1) - ref(cc, ac + 3 * ido - 1); tr2 = ref(cc, ac - 1) + ref(cc, ac + 3 * ido - 1); tr4 = ref(cc, ac + ido - 1) - ref(cc, ac + 2 * ido - 1); tr3 = ref(cc, ac + ido - 1) + ref(cc, ac + 2 * ido - 1); ah = i + (k - 1) * ido; ch[ah] = ref(cc, ac - ido - 1) + tr2 + tr3; ch[ah + 1] = ref(cc, ac - ido) + ti2 + ti3; cr2 = ref(cc, ac - ido - 1) + tr11 * tr2 + tr12 * tr3; ci2 = ref(cc, ac - ido) + tr11 * ti2 + tr12 * ti3; cr3 = ref(cc, ac - ido - 1) + tr12 * tr2 + tr11 * tr3; ci3 = ref(cc, ac - ido) + tr12 * ti2 + tr11 * ti3; cr5 = isign * (ti11 * tr5 + ti12 * tr4); ci5 = isign * (ti11 * ti5 + ti12 * ti4); cr4 = isign * (ti12 * tr5 - ti11 * tr4); ci4 = isign * (ti12 * ti5 - ti11 * ti4); dr3 = cr3 - ci4; dr4 = cr3 + ci4; di3 = ci3 + cr4; di4 = ci3 - cr4; dr5 = cr2 + ci5; dr2 = cr2 - ci5; di5 = ci2 - cr5; di2 = ci2 + cr5; ch[ah + l1 * ido] = wa1[i] * dr2 - isign * wa1[i + 1] * di2; ch[ah + l1 * ido + 1] = wa1[i] * di2 + isign * wa1[i + 1] * dr2; ch[ah + 2 * l1 * ido] = wa2[i] * dr3 - isign * wa2[i + 1] * di3; ch[ah + 2 * l1 * ido + 1] = wa2[i] * di3 + isign * wa2[i + 1] * dr3; ch[ah + 3 * l1 * ido] = wa3[i] * dr4 - isign * wa3[i + 1] * di4; ch[ah + 3 * l1 * ido + 1] = wa3[i] * di4 + isign * wa3[i + 1] * dr4; ch[ah + 4 * l1 * ido] = wa4[i] * dr5 - isign * wa4[i + 1] * di5; ch[ah + 4 * l1 * ido + 1] = wa4[i] * di5 + isign * wa4[i + 1] * dr5; } } } } /* passf5 */ static void passf(int *nac, int ido, int ip, int l1, int idl1, Treal cc[], Treal ch[], const Treal wa[], int isign) /* isign is -1 for forward transform and +1 for backward transform */ { int idij, idlj, idot, ipph, i, j, k, l, jc, lc, ik, idj, idl, inc, idp; Treal wai, war; idot = ido / 2; // nt = ip*idl1; ipph = (ip + 1) / 2; idp = ip * ido; if (ido >= l1) { for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { for (i = 0; i < ido; i++) { ch[i + (k + j * l1) * ido] = ref(cc, i + (j + k * ip) * ido) + ref(cc, i + (jc + k * ip) * ido); ch[i + (k + jc * l1) * ido] = ref(cc, i + (j + k * ip) * ido) - ref(cc, i + (jc + k * ip) * ido); } } } for (k = 0; k < l1; k++) for (i = 0; i < ido; i++) ch[i + k * ido] = ref(cc, i + k * ip * ido); } else { for (j = 1; j < ipph; j++) { jc = ip - j; for (i = 0; i < ido; i++) { for (k = 0; k < l1; k++) { ch[i + (k + j * l1) * ido] = ref(cc, i + (j + k * ip) * ido) + ref(cc, i + (jc + k * ip) * ido); ch[i + (k + jc * l1) * ido] = ref(cc, i + (j + k * ip) * ido) - ref(cc, i + (jc + k * ip) * ido); } } } for (i = 0; i < ido; i++) for (k = 0; k < l1; k++) ch[i + k * ido] = ref(cc, i + k * ip * ido); } idl = 2 - ido; inc = 0; for (l = 1; l < ipph; l++) { lc = ip - l; idl += ido; for (ik = 0; ik < idl1; ik++) { cc[ik + l * idl1] = ch[ik] + wa[idl - 2] * ch[ik + idl1]; cc[ik + lc * idl1] = isign * wa[idl - 1] * ch[ik + (ip - 1) * idl1]; } idlj = idl; inc += ido; for (j = 2; j < ipph; j++) { jc = ip - j; idlj += inc; if (idlj > idp) idlj -= idp; war = wa[idlj - 2]; wai = wa[idlj - 1]; for (ik = 0; ik < idl1; ik++) { cc[ik + l * idl1] += war * ch[ik + j * idl1]; cc[ik + lc * idl1] += isign * wai * ch[ik + jc * idl1]; } } } for (j = 1; j < ipph; j++) for (ik = 0; ik < idl1; ik++) ch[ik] += ch[ik + j * idl1]; for (j = 1; j < ipph; j++) { jc = ip - j; for (ik = 1; ik < idl1; ik += 2) { ch[ik - 1 + j * idl1] = cc[ik - 1 + j * idl1] - cc[ik + jc * idl1]; ch[ik - 1 + jc * idl1] = cc[ik - 1 + j * idl1] + cc[ik + jc * idl1]; ch[ik + j * idl1] = cc[ik + j * idl1] + cc[ik - 1 + jc * idl1]; ch[ik + jc * idl1] = cc[ik + j * idl1] - cc[ik - 1 + jc * idl1]; } } *nac = 1; if (ido == 2) return; *nac = 0; for (ik = 0; ik < idl1; ik++) cc[ik] = ch[ik]; for (j = 1; j < ip; j++) { for (k = 0; k < l1; k++) { cc[(k + j * l1) * ido + 0] = ch[(k + j * l1) * ido + 0]; cc[(k + j * l1) * ido + 1] = ch[(k + j * l1) * ido + 1]; } } if (idot <= l1) { idij = 0; for (j = 1; j < ip; j++) { idij += 2; for (i = 3; i < ido; i += 2) { idij += 2; for (k = 0; k < l1; k++) { cc[i - 1 + (k + j * l1) * ido] = wa[idij - 2] * ch[i - 1 + (k + j * l1) * ido] - isign * wa[idij - 1] * ch[i + (k + j * l1) * ido]; cc[i + (k + j * l1) * ido] = wa[idij - 2] * ch[i + (k + j * l1) * ido] + isign * wa[idij - 1] * ch[i - 1 + (k + j * l1) * ido]; } } } } else { idj = 2 - ido; for (j = 1; j < ip; j++) { idj += ido; for (k = 0; k < l1; k++) { idij = idj; for (i = 3; i < ido; i += 2) { idij += 2; cc[i - 1 + (k + j * l1) * ido] = wa[idij - 2] * ch[i - 1 + (k + j * l1) * ido] - isign * wa[idij - 1] * ch[i + (k + j * l1) * ido]; cc[i + (k + j * l1) * ido] = wa[idij - 2] * ch[i + (k + j * l1) * ido] + isign * wa[idij - 1] * ch[i - 1 + (k + j * l1) * ido]; } } } } } /* passf */ /* ---------------------------------------------------------------------- radf2,radb2, radf3,radb3, radf4,radb4, radf5,radb5, radfg,radbg. Treal FFT passes fwd and bwd. ---------------------------------------------------------------------- */ static void radf2(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[]) { int i, k, ic; Treal ti2, tr2; for (k = 0; k < l1; k++) { ch[2 * k * ido] = ref(cc, k * ido) + ref(cc, (k + l1) * ido); ch[(2 * k + 1) * ido + ido - 1] = ref(cc, k * ido) - ref(cc, (k + l1) * ido); } if (ido < 2) return; if (ido != 2) { for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; tr2 = wa1[i - 2] * ref(cc, i - 1 + (k + l1) * ido) + wa1[i - 1] * ref(cc, i + (k + l1) * ido); ti2 = wa1[i - 2] * ref(cc, i + (k + l1) * ido) - wa1[i - 1] * ref(cc, i - 1 + (k + l1) * ido); ch[i + 2 * k * ido] = ref(cc, i + k * ido) + ti2; ch[ic + (2 * k + 1) * ido] = ti2 - ref(cc, i + k * ido); ch[i - 1 + 2 * k * ido] = ref(cc, i - 1 + k * ido) + tr2; ch[ic - 1 + (2 * k + 1) * ido] = ref(cc, i - 1 + k * ido) - tr2; } } if (ido % 2 == 1) return; } for (k = 0; k < l1; k++) { ch[(2 * k + 1) * ido] = -ref(cc, ido - 1 + (k + l1) * ido); ch[ido - 1 + 2 * k * ido] = ref(cc, ido - 1 + k * ido); } } /* radf2 */ static void radb2(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[]) { int i, k, ic; Treal ti2, tr2; for (k = 0; k < l1; k++) { ch[k * ido] = ref(cc, 2 * k * ido) + ref(cc, ido - 1 + (2 * k + 1) * ido); ch[(k + l1) * ido] = ref(cc, 2 * k * ido) - ref(cc, ido - 1 + (2 * k + 1) * ido); } if (ido < 2) return; if (ido != 2) { for (k = 0; k < l1; ++k) { for (i = 2; i < ido; i += 2) { ic = ido - i; ch[i - 1 + k * ido] = ref(cc, i - 1 + 2 * k * ido) + ref(cc, ic - 1 + (2 * k + 1) * ido); tr2 = ref(cc, i - 1 + 2 * k * ido) - ref(cc, ic - 1 + (2 * k + 1) * ido); ch[i + k * ido] = ref(cc, i + 2 * k * ido) - ref(cc, ic + (2 * k + 1) * ido); ti2 = ref(cc, i + (2 * k) * ido) + ref(cc, ic + (2 * k + 1) * ido); ch[i - 1 + (k + l1) * ido] = wa1[i - 2] * tr2 - wa1[i - 1] * ti2; ch[i + (k + l1) * ido] = wa1[i - 2] * ti2 + wa1[i - 1] * tr2; } } if (ido % 2 == 1) return; } for (k = 0; k < l1; k++) { ch[ido - 1 + k * ido] = 2 * ref(cc, ido - 1 + 2 * k * ido); ch[ido - 1 + (k + l1) * ido] = -2 * ref(cc, (2 * k + 1) * ido); } } /* radb2 */ static void radf3(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[]) { static const Treal taur = -0.5; static const Treal taui = 0.866025403784439; int i, k, ic; Treal ci2, di2, di3, cr2, dr2, dr3, ti2, ti3, tr2, tr3; for (k = 0; k < l1; k++) { cr2 = ref(cc, (k + l1) * ido) + ref(cc, (k + 2 * l1) * ido); ch[3 * k * ido] = ref(cc, k * ido) + cr2; ch[(3 * k + 2) * ido] = taui * (ref(cc, (k + l1 * 2) * ido) - ref(cc, (k + l1) * ido)); ch[ido - 1 + (3 * k + 1) * ido] = ref(cc, k * ido) + taur * cr2; } if (ido == 1) return; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; dr2 = wa1[i - 2] * ref(cc, i - 1 + (k + l1) * ido) + wa1[i - 1] * ref(cc, i + (k + l1) * ido); di2 = wa1[i - 2] * ref(cc, i + (k + l1) * ido) - wa1[i - 1] * ref(cc, i - 1 + (k + l1) * ido); dr3 = wa2[i - 2] * ref(cc, i - 1 + (k + l1 * 2) * ido) + wa2[i - 1] * ref(cc, i + (k + l1 * 2) * ido); di3 = wa2[i - 2] * ref(cc, i + (k + l1 * 2) * ido) - wa2[i - 1] * ref(cc, i - 1 + (k + l1 * 2) * ido); cr2 = dr2 + dr3; ci2 = di2 + di3; ch[i - 1 + 3 * k * ido] = ref(cc, i - 1 + k * ido) + cr2; ch[i + 3 * k * ido] = ref(cc, i + k * ido) + ci2; tr2 = ref(cc, i - 1 + k * ido) + taur * cr2; ti2 = ref(cc, i + k * ido) + taur * ci2; tr3 = taui * (di2 - di3); ti3 = taui * (dr3 - dr2); ch[i - 1 + (3 * k + 2) * ido] = tr2 + tr3; ch[ic - 1 + (3 * k + 1) * ido] = tr2 - tr3; ch[i + (3 * k + 2) * ido] = ti2 + ti3; ch[ic + (3 * k + 1) * ido] = ti3 - ti2; } } } /* radf3 */ static void radb3(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[]) { static const Treal taur = -0.5; static const Treal taui = 0.866025403784439; int i, k, ic; Treal ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2; for (k = 0; k < l1; k++) { tr2 = 2 * ref(cc, ido - 1 + (3 * k + 1) * ido); cr2 = ref(cc, 3 * k * ido) + taur * tr2; ch[k * ido] = ref(cc, 3 * k * ido) + tr2; ci3 = 2 * taui * ref(cc, (3 * k + 2) * ido); ch[(k + l1) * ido] = cr2 - ci3; ch[(k + 2 * l1) * ido] = cr2 + ci3; } if (ido == 1) return; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; tr2 = ref(cc, i - 1 + (3 * k + 2) * ido) + ref(cc, ic - 1 + (3 * k + 1) * ido); cr2 = ref(cc, i - 1 + 3 * k * ido) + taur * tr2; ch[i - 1 + k * ido] = ref(cc, i - 1 + 3 * k * ido) + tr2; ti2 = ref(cc, i + (3 * k + 2) * ido) - ref(cc, ic + (3 * k + 1) * ido); ci2 = ref(cc, i + 3 * k * ido) + taur * ti2; ch[i + k * ido] = ref(cc, i + 3 * k * ido) + ti2; cr3 = taui * (ref(cc, i - 1 + (3 * k + 2) * ido) - ref(cc, ic - 1 + (3 * k + 1) * ido)); ci3 = taui * (ref(cc, i + (3 * k + 2) * ido) + ref(cc, ic + (3 * k + 1) * ido)); dr2 = cr2 - ci3; dr3 = cr2 + ci3; di2 = ci2 + cr3; di3 = ci2 - cr3; ch[i - 1 + (k + l1) * ido] = wa1[i - 2] * dr2 - wa1[i - 1] * di2; ch[i + (k + l1) * ido] = wa1[i - 2] * di2 + wa1[i - 1] * dr2; ch[i - 1 + (k + 2 * l1) * ido] = wa2[i - 2] * dr3 - wa2[i - 1] * di3; ch[i + (k + 2 * l1) * ido] = wa2[i - 2] * di3 + wa2[i - 1] * dr3; } } } /* radb3 */ static void radf4(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[]) { static const Treal hsqt2 = 0.7071067811865475; int i, k, ic; Treal ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4; for (k = 0; k < l1; k++) { tr1 = ref(cc, (k + l1) * ido) + ref(cc, (k + 3 * l1) * ido); tr2 = ref(cc, k * ido) + ref(cc, (k + 2 * l1) * ido); ch[4 * k * ido] = tr1 + tr2; ch[ido - 1 + (4 * k + 3) * ido] = tr2 - tr1; ch[ido - 1 + (4 * k + 1) * ido] = ref(cc, k * ido) - ref(cc, (k + 2 * l1) * ido); ch[(4 * k + 2) * ido] = ref(cc, (k + 3 * l1) * ido) - ref(cc, (k + l1) * ido); } if (ido < 2) return; if (ido != 2) { for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; cr2 = wa1[i - 2] * ref(cc, i - 1 + (k + l1) * ido) + wa1[i - 1] * ref(cc, i + (k + l1) * ido); ci2 = wa1[i - 2] * ref(cc, i + (k + l1) * ido) - wa1[i - 1] * ref(cc, i - 1 + (k + l1) * ido); cr3 = wa2[i - 2] * ref(cc, i - 1 + (k + 2 * l1) * ido) + wa2[i - 1] * ref(cc, i + (k + 2 * l1) * ido); ci3 = wa2[i - 2] * ref(cc, i + (k + 2 * l1) * ido) - wa2[i - 1] * ref(cc, i - 1 + (k + 2 * l1) * ido); cr4 = wa3[i - 2] * ref(cc, i - 1 + (k + 3 * l1) * ido) + wa3[i - 1] * ref(cc, i + (k + 3 * l1) * ido); ci4 = wa3[i - 2] * ref(cc, i + (k + 3 * l1) * ido) - wa3[i - 1] * ref(cc, i - 1 + (k + 3 * l1) * ido); tr1 = cr2 + cr4; tr4 = cr4 - cr2; ti1 = ci2 + ci4; ti4 = ci2 - ci4; ti2 = ref(cc, i + k * ido) + ci3; ti3 = ref(cc, i + k * ido) - ci3; tr2 = ref(cc, i - 1 + k * ido) + cr3; tr3 = ref(cc, i - 1 + k * ido) - cr3; ch[i - 1 + 4 * k * ido] = tr1 + tr2; ch[ic - 1 + (4 * k + 3) * ido] = tr2 - tr1; ch[i + 4 * k * ido] = ti1 + ti2; ch[ic + (4 * k + 3) * ido] = ti1 - ti2; ch[i - 1 + (4 * k + 2) * ido] = ti4 + tr3; ch[ic - 1 + (4 * k + 1) * ido] = tr3 - ti4; ch[i + (4 * k + 2) * ido] = tr4 + ti3; ch[ic + (4 * k + 1) * ido] = tr4 - ti3; } } if (ido % 2 == 1) return; } for (k = 0; k < l1; k++) { ti1 = -hsqt2 * (ref(cc, ido - 1 + (k + l1) * ido) + ref(cc, ido - 1 + (k + 3 * l1) * ido)); tr1 = hsqt2 * (ref(cc, ido - 1 + (k + l1) * ido) - ref(cc, ido - 1 + (k + 3 * l1) * ido)); ch[ido - 1 + 4 * k * ido] = tr1 + ref(cc, ido - 1 + k * ido); ch[ido - 1 + (4 * k + 2) * ido] = ref(cc, ido - 1 + k * ido) - tr1; ch[(4 * k + 1) * ido] = ti1 - ref(cc, ido - 1 + (k + 2 * l1) * ido); ch[(4 * k + 3) * ido] = ti1 + ref(cc, ido - 1 + (k + 2 * l1) * ido); } } /* radf4 */ static void radb4(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[]) { static const Treal sqrt2 = 1.414213562373095; int i, k, ic; Treal ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4; for (k = 0; k < l1; k++) { tr1 = ref(cc, 4 * k * ido) - ref(cc, ido - 1 + (4 * k + 3) * ido); tr2 = ref(cc, 4 * k * ido) + ref(cc, ido - 1 + (4 * k + 3) * ido); tr3 = ref(cc, ido - 1 + (4 * k + 1) * ido) + ref(cc, ido - 1 + (4 * k + 1) * ido); tr4 = ref(cc, (4 * k + 2) * ido) + ref(cc, (4 * k + 2) * ido); ch[k * ido] = tr2 + tr3; ch[(k + l1) * ido] = tr1 - tr4; ch[(k + 2 * l1) * ido] = tr2 - tr3; ch[(k + 3 * l1) * ido] = tr1 + tr4; } if (ido < 2) return; if (ido != 2) { for (k = 0; k < l1; ++k) { for (i = 2; i < ido; i += 2) { ic = ido - i; ti1 = ref(cc, i + 4 * k * ido) + ref(cc, ic + (4 * k + 3) * ido); ti2 = ref(cc, i + 4 * k * ido) - ref(cc, ic + (4 * k + 3) * ido); ti3 = ref(cc, i + (4 * k + 2) * ido) - ref(cc, ic + (4 * k + 1) * ido); tr4 = ref(cc, i + (4 * k + 2) * ido) + ref(cc, ic + (4 * k + 1) * ido); tr1 = ref(cc, i - 1 + 4 * k * ido) - ref(cc, ic - 1 + (4 * k + 3) * ido); tr2 = ref(cc, i - 1 + 4 * k * ido) + ref(cc, ic - 1 + (4 * k + 3) * ido); ti4 = ref(cc, i - 1 + (4 * k + 2) * ido) - ref(cc, ic - 1 + (4 * k + 1) * ido); tr3 = ref(cc, i - 1 + (4 * k + 2) * ido) + ref(cc, ic - 1 + (4 * k + 1) * ido); ch[i - 1 + k * ido] = tr2 + tr3; cr3 = tr2 - tr3; ch[i + k * ido] = ti2 + ti3; ci3 = ti2 - ti3; cr2 = tr1 - tr4; cr4 = tr1 + tr4; ci2 = ti1 + ti4; ci4 = ti1 - ti4; ch[i - 1 + (k + l1) * ido] = wa1[i - 2] * cr2 - wa1[i - 1] * ci2; ch[i + (k + l1) * ido] = wa1[i - 2] * ci2 + wa1[i - 1] * cr2; ch[i - 1 + (k + 2 * l1) * ido] = wa2[i - 2] * cr3 - wa2[i - 1] * ci3; ch[i + (k + 2 * l1) * ido] = wa2[i - 2] * ci3 + wa2[i - 1] * cr3; ch[i - 1 + (k + 3 * l1) * ido] = wa3[i - 2] * cr4 - wa3[i - 1] * ci4; ch[i + (k + 3 * l1) * ido] = wa3[i - 2] * ci4 + wa3[i - 1] * cr4; } } if (ido % 2 == 1) return; } for (k = 0; k < l1; k++) { ti1 = ref(cc, (4 * k + 1) * ido) + ref(cc, (4 * k + 3) * ido); ti2 = ref(cc, (4 * k + 3) * ido) - ref(cc, (4 * k + 1) * ido); tr1 = ref(cc, ido - 1 + 4 * k * ido) - ref(cc, ido - 1 + (4 * k + 2) * ido); tr2 = ref(cc, ido - 1 + 4 * k * ido) + ref(cc, ido - 1 + (4 * k + 2) * ido); ch[ido - 1 + k * ido] = tr2 + tr2; ch[ido - 1 + (k + l1) * ido] = sqrt2 * (tr1 - ti1); ch[ido - 1 + (k + 2 * l1) * ido] = ti2 + ti2; ch[ido - 1 + (k + 3 * l1) * ido] = -sqrt2 * (tr1 + ti1); } } /* radb4 */ static void radf5(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[], const Treal wa4[]) { static const Treal tr11 = 0.309016994374947; static const Treal ti11 = 0.951056516295154; static const Treal tr12 = -0.809016994374947; static const Treal ti12 = 0.587785252292473; int i, k, ic; Treal ci2, di2, ci4, ci5, di3, di4, di5, ci3, cr2, cr3, dr2, dr3, dr4, dr5, cr5, cr4, ti2, ti3, ti5, ti4, tr2, tr3, tr4, tr5; for (k = 0; k < l1; k++) { cr2 = ref(cc, (k + 4 * l1) * ido) + ref(cc, (k + l1) * ido); ci5 = ref(cc, (k + 4 * l1) * ido) - ref(cc, (k + l1) * ido); cr3 = ref(cc, (k + 3 * l1) * ido) + ref(cc, (k + 2 * l1) * ido); ci4 = ref(cc, (k + 3 * l1) * ido) - ref(cc, (k + 2 * l1) * ido); ch[5 * k * ido] = ref(cc, k * ido) + cr2 + cr3; ch[ido - 1 + (5 * k + 1) * ido] = ref(cc, k * ido) + tr11 * cr2 + tr12 * cr3; ch[(5 * k + 2) * ido] = ti11 * ci5 + ti12 * ci4; ch[ido - 1 + (5 * k + 3) * ido] = ref(cc, k * ido) + tr12 * cr2 + tr11 * cr3; ch[(5 * k + 4) * ido] = ti12 * ci5 - ti11 * ci4; } if (ido == 1) return; for (k = 0; k < l1; ++k) { for (i = 2; i < ido; i += 2) { ic = ido - i; dr2 = wa1[i - 2] * ref(cc, i - 1 + (k + l1) * ido) + wa1[i - 1] * ref(cc, i + (k + l1) * ido); di2 = wa1[i - 2] * ref(cc, i + (k + l1) * ido) - wa1[i - 1] * ref(cc, i - 1 + (k + l1) * ido); dr3 = wa2[i - 2] * ref(cc, i - 1 + (k + 2 * l1) * ido) + wa2[i - 1] * ref(cc, i + (k + 2 * l1) * ido); di3 = wa2[i - 2] * ref(cc, i + (k + 2 * l1) * ido) - wa2[i - 1] * ref(cc, i - 1 + (k + 2 * l1) * ido); dr4 = wa3[i - 2] * ref(cc, i - 1 + (k + 3 * l1) * ido) + wa3[i - 1] * ref(cc, i + (k + 3 * l1) * ido); di4 = wa3[i - 2] * ref(cc, i + (k + 3 * l1) * ido) - wa3[i - 1] * ref(cc, i - 1 + (k + 3 * l1) * ido); dr5 = wa4[i - 2] * ref(cc, i - 1 + (k + 4 * l1) * ido) + wa4[i - 1] * ref(cc, i + (k + 4 * l1) * ido); di5 = wa4[i - 2] * ref(cc, i + (k + 4 * l1) * ido) - wa4[i - 1] * ref(cc, i - 1 + (k + 4 * l1) * ido); cr2 = dr2 + dr5; ci5 = dr5 - dr2; cr5 = di2 - di5; ci2 = di2 + di5; cr3 = dr3 + dr4; ci4 = dr4 - dr3; cr4 = di3 - di4; ci3 = di3 + di4; ch[i - 1 + 5 * k * ido] = ref(cc, i - 1 + k * ido) + cr2 + cr3; ch[i + 5 * k * ido] = ref(cc, i + k * ido) + ci2 + ci3; tr2 = ref(cc, i - 1 + k * ido) + tr11 * cr2 + tr12 * cr3; ti2 = ref(cc, i + k * ido) + tr11 * ci2 + tr12 * ci3; tr3 = ref(cc, i - 1 + k * ido) + tr12 * cr2 + tr11 * cr3; ti3 = ref(cc, i + k * ido) + tr12 * ci2 + tr11 * ci3; tr5 = ti11 * cr5 + ti12 * cr4; ti5 = ti11 * ci5 + ti12 * ci4; tr4 = ti12 * cr5 - ti11 * cr4; ti4 = ti12 * ci5 - ti11 * ci4; ch[i - 1 + (5 * k + 2) * ido] = tr2 + tr5; ch[ic - 1 + (5 * k + 1) * ido] = tr2 - tr5; ch[i + (5 * k + 2) * ido] = ti2 + ti5; ch[ic + (5 * k + 1) * ido] = ti5 - ti2; ch[i - 1 + (5 * k + 4) * ido] = tr3 + tr4; ch[ic - 1 + (5 * k + 3) * ido] = tr3 - tr4; ch[i + (5 * k + 4) * ido] = ti3 + ti4; ch[ic + (5 * k + 3) * ido] = ti4 - ti3; } } } /* radf5 */ static void radb5(int ido, int l1, const Treal cc[], Treal ch[], const Treal wa1[], const Treal wa2[], const Treal wa3[], const Treal wa4[]) { static const Treal tr11 = 0.309016994374947; static const Treal ti11 = 0.951056516295154; static const Treal tr12 = -0.809016994374947; static const Treal ti12 = 0.587785252292473; int i, k, ic; Treal ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5; for (k = 0; k < l1; k++) { ti5 = 2 * ref(cc, (5 * k + 2) * ido); ti4 = 2 * ref(cc, (5 * k + 4) * ido); tr2 = 2 * ref(cc, ido - 1 + (5 * k + 1) * ido); tr3 = 2 * ref(cc, ido - 1 + (5 * k + 3) * ido); ch[k * ido] = ref(cc, 5 * k * ido) + tr2 + tr3; cr2 = ref(cc, 5 * k * ido) + tr11 * tr2 + tr12 * tr3; cr3 = ref(cc, 5 * k * ido) + tr12 * tr2 + tr11 * tr3; ci5 = ti11 * ti5 + ti12 * ti4; ci4 = ti12 * ti5 - ti11 * ti4; ch[(k + l1) * ido] = cr2 - ci5; ch[(k + 2 * l1) * ido] = cr3 - ci4; ch[(k + 3 * l1) * ido] = cr3 + ci4; ch[(k + 4 * l1) * ido] = cr2 + ci5; } if (ido == 1) return; for (k = 0; k < l1; ++k) { for (i = 2; i < ido; i += 2) { ic = ido - i; ti5 = ref(cc, i + (5 * k + 2) * ido) + ref(cc, ic + (5 * k + 1) * ido); ti2 = ref(cc, i + (5 * k + 2) * ido) - ref(cc, ic + (5 * k + 1) * ido); ti4 = ref(cc, i + (5 * k + 4) * ido) + ref(cc, ic + (5 * k + 3) * ido); ti3 = ref(cc, i + (5 * k + 4) * ido) - ref(cc, ic + (5 * k + 3) * ido); tr5 = ref(cc, i - 1 + (5 * k + 2) * ido) - ref(cc, ic - 1 + (5 * k + 1) * ido); tr2 = ref(cc, i - 1 + (5 * k + 2) * ido) + ref(cc, ic - 1 + (5 * k + 1) * ido); tr4 = ref(cc, i - 1 + (5 * k + 4) * ido) - ref(cc, ic - 1 + (5 * k + 3) * ido); tr3 = ref(cc, i - 1 + (5 * k + 4) * ido) + ref(cc, ic - 1 + (5 * k + 3) * ido); ch[i - 1 + k * ido] = ref(cc, i - 1 + 5 * k * ido) + tr2 + tr3; ch[i + k * ido] = ref(cc, i + 5 * k * ido) + ti2 + ti3; cr2 = ref(cc, i - 1 + 5 * k * ido) + tr11 * tr2 + tr12 * tr3; ci2 = ref(cc, i + 5 * k * ido) + tr11 * ti2 + tr12 * ti3; cr3 = ref(cc, i - 1 + 5 * k * ido) + tr12 * tr2 + tr11 * tr3; ci3 = ref(cc, i + 5 * k * ido) + tr12 * ti2 + tr11 * ti3; cr5 = ti11 * tr5 + ti12 * tr4; ci5 = ti11 * ti5 + ti12 * ti4; cr4 = ti12 * tr5 - ti11 * tr4; ci4 = ti12 * ti5 - ti11 * ti4; dr3 = cr3 - ci4; dr4 = cr3 + ci4; di3 = ci3 + cr4; di4 = ci3 - cr4; dr5 = cr2 + ci5; dr2 = cr2 - ci5; di5 = ci2 - cr5; di2 = ci2 + cr5; ch[i - 1 + (k + l1) * ido] = wa1[i - 2] * dr2 - wa1[i - 1] * di2; ch[i + (k + l1) * ido] = wa1[i - 2] * di2 + wa1[i - 1] * dr2; ch[i - 1 + (k + 2 * l1) * ido] = wa2[i - 2] * dr3 - wa2[i - 1] * di3; ch[i + (k + 2 * l1) * ido] = wa2[i - 2] * di3 + wa2[i - 1] * dr3; ch[i - 1 + (k + 3 * l1) * ido] = wa3[i - 2] * dr4 - wa3[i - 1] * di4; ch[i + (k + 3 * l1) * ido] = wa3[i - 2] * di4 + wa3[i - 1] * dr4; ch[i - 1 + (k + 4 * l1) * ido] = wa4[i - 2] * dr5 - wa4[i - 1] * di5; ch[i + (k + 4 * l1) * ido] = wa4[i - 2] * di5 + wa4[i - 1] * dr5; } } } /* radb5 */ static void radfg(int ido, int ip, int l1, int idl1, Treal cc[], Treal ch[], const Treal wa[]) { static const Treal twopi = 6.28318530717959; int idij, ipph, i, j, k, l, j2, ic, jc, lc, ik, is, nbd; Treal dc2, ai1, ai2, ar1, ar2, ds2, dcp, arg, dsp, ar1h, ar2h; arg = twopi / ip; dcp = cos(arg); dsp = sin(arg); ipph = (ip + 1) / 2; nbd = (ido - 1) / 2; if (ido != 1) { for (ik = 0; ik < idl1; ik++) ch[ik] = cc[ik]; for (j = 1; j < ip; j++) for (k = 0; k < l1; k++) ch[(k + j * l1) * ido] = cc[(k + j * l1) * ido]; if (nbd <= l1) { is = -ido; for (j = 1; j < ip; j++) { is += ido; idij = is - 1; for (i = 2; i < ido; i += 2) { idij += 2; for (k = 0; k < l1; k++) { ch[i - 1 + (k + j * l1) * ido] = wa[idij - 1] * cc[i - 1 + (k + j * l1) * ido] + wa[idij] * cc[i + (k + j * l1) * ido]; ch[i + (k + j * l1) * ido] = wa[idij - 1] * cc[i + (k + j * l1) * ido] - wa[idij] * cc[i - 1 + (k + j * l1) * ido]; } } } } else { is = -ido; for (j = 1; j < ip; j++) { is += ido; for (k = 0; k < l1; k++) { idij = is - 1; for (i = 2; i < ido; i += 2) { idij += 2; ch[i - 1 + (k + j * l1) * ido] = wa[idij - 1] * cc[i - 1 + (k + j * l1) * ido] + wa[idij] * cc[i + (k + j * l1) * ido]; ch[i + (k + j * l1) * ido] = wa[idij - 1] * cc[i + (k + j * l1) * ido] - wa[idij] * cc[i - 1 + (k + j * l1) * ido]; } } } } if (nbd >= l1) { for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { cc[i - 1 + (k + j * l1) * ido] = ch[i - 1 + (k + j * l1) * ido] + ch[i - 1 + (k + jc * l1) * ido]; cc[i - 1 + (k + jc * l1) * ido] = ch[i + (k + j * l1) * ido] - ch[i + (k + jc * l1) * ido]; cc[i + (k + j * l1) * ido] = ch[i + (k + j * l1) * ido] + ch[i + (k + jc * l1) * ido]; cc[i + (k + jc * l1) * ido] = ch[i - 1 + (k + jc * l1) * ido] - ch[i - 1 + (k + j * l1) * ido]; } } } } else { for (j = 1; j < ipph; j++) { jc = ip - j; for (i = 2; i < ido; i += 2) { for (k = 0; k < l1; k++) { cc[i - 1 + (k + j * l1) * ido] = ch[i - 1 + (k + j * l1) * ido] + ch[i - 1 + (k + jc * l1) * ido]; cc[i - 1 + (k + jc * l1) * ido] = ch[i + (k + j * l1) * ido] - ch[i + (k + jc * l1) * ido]; cc[i + (k + j * l1) * ido] = ch[i + (k + j * l1) * ido] + ch[i + (k + jc * l1) * ido]; cc[i + (k + jc * l1) * ido] = ch[i - 1 + (k + jc * l1) * ido] - ch[i - 1 + (k + j * l1) * ido]; } } } } } else { /* now ido == 1 */ for (ik = 0; ik < idl1; ik++) cc[ik] = ch[ik]; } for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { cc[(k + j * l1) * ido] = ch[(k + j * l1) * ido] + ch[(k + jc * l1) * ido]; cc[(k + jc * l1) * ido] = ch[(k + jc * l1) * ido] - ch[(k + j * l1) * ido]; } } ar1 = 1; ai1 = 0; for (l = 1; l < ipph; l++) { lc = ip - l; ar1h = dcp * ar1 - dsp * ai1; ai1 = dcp * ai1 + dsp * ar1; ar1 = ar1h; for (ik = 0; ik < idl1; ik++) { ch[ik + l * idl1] = cc[ik] + ar1 * cc[ik + idl1]; ch[ik + lc * idl1] = ai1 * cc[ik + (ip - 1) * idl1]; } dc2 = ar1; ds2 = ai1; ar2 = ar1; ai2 = ai1; for (j = 2; j < ipph; j++) { jc = ip - j; ar2h = dc2 * ar2 - ds2 * ai2; ai2 = dc2 * ai2 + ds2 * ar2; ar2 = ar2h; for (ik = 0; ik < idl1; ik++) { ch[ik + l * idl1] += ar2 * cc[ik + j * idl1]; ch[ik + lc * idl1] += ai2 * cc[ik + jc * idl1]; } } } for (j = 1; j < ipph; j++) for (ik = 0; ik < idl1; ik++) ch[ik] += cc[ik + j * idl1]; if (ido >= l1) { for (k = 0; k < l1; k++) { for (i = 0; i < ido; i++) { ref(cc, i + k * ip * ido) = ch[i + k * ido]; } } } else { for (i = 0; i < ido; i++) { for (k = 0; k < l1; k++) { ref(cc, i + k * ip * ido) = ch[i + k * ido]; } } } for (j = 1; j < ipph; j++) { jc = ip - j; j2 = 2 * j; for (k = 0; k < l1; k++) { ref(cc, ido - 1 + (j2 - 1 + k * ip) * ido) = ch[(k + j * l1) * ido]; ref(cc, (j2 + k * ip) * ido) = ch[(k + jc * l1) * ido]; } } if (ido == 1) return; if (nbd >= l1) { for (j = 1; j < ipph; j++) { jc = ip - j; j2 = 2 * j; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; ref(cc, i - 1 + (j2 + k * ip) * ido) = ch[i - 1 + (k + j * l1) * ido] + ch[i - 1 + (k + jc * l1) * ido]; ref(cc, ic - 1 + (j2 - 1 + k * ip) * ido) = ch[i - 1 + (k + j * l1) * ido] - ch[i - 1 + (k + jc * l1) * ido]; ref(cc, i + (j2 + k * ip) * ido) = ch[i + (k + j * l1) * ido] + ch[i + (k + jc * l1) * ido]; ref(cc, ic + (j2 - 1 + k * ip) * ido) = ch[i + (k + jc * l1) * ido] - ch[i + (k + j * l1) * ido]; } } } } else { for (j = 1; j < ipph; j++) { jc = ip - j; j2 = 2 * j; for (i = 2; i < ido; i += 2) { ic = ido - i; for (k = 0; k < l1; k++) { ref(cc, i - 1 + (j2 + k * ip) * ido) = ch[i - 1 + (k + j * l1) * ido] + ch[i - 1 + (k + jc * l1) * ido]; ref(cc, ic - 1 + (j2 - 1 + k * ip) * ido) = ch[i - 1 + (k + j * l1) * ido] - ch[i - 1 + (k + jc * l1) * ido]; ref(cc, i + (j2 + k * ip) * ido) = ch[i + (k + j * l1) * ido] + ch[i + (k + jc * l1) * ido]; ref(cc, ic + (j2 - 1 + k * ip) * ido) = ch[i + (k + jc * l1) * ido] - ch[i + (k + j * l1) * ido]; } } } } } /* radfg */ static void radbg(int ido, int ip, int l1, int idl1, Treal cc[], Treal ch[], const Treal wa[]) { static const Treal twopi = 6.28318530717959; int idij, ipph, i, j, k, l, j2, ic, jc, lc, ik, is; Treal dc2, ai1, ai2, ar1, ar2, ds2; int nbd; Treal dcp, arg, dsp, ar1h, ar2h; arg = twopi / ip; dcp = cos(arg); dsp = sin(arg); nbd = (ido - 1) / 2; ipph = (ip + 1) / 2; if (ido >= l1) { for (k = 0; k < l1; k++) { for (i = 0; i < ido; i++) { ch[i + k * ido] = ref(cc, i + k * ip * ido); } } } else { for (i = 0; i < ido; i++) { for (k = 0; k < l1; k++) { ch[i + k * ido] = ref(cc, i + k * ip * ido); } } } for (j = 1; j < ipph; j++) { jc = ip - j; j2 = 2 * j; for (k = 0; k < l1; k++) { ch[(k + j * l1) * ido] = ref(cc, ido - 1 + (j2 - 1 + k * ip) * ido) + ref(cc, ido - 1 + (j2 - 1 + k * ip) * ido); ch[(k + jc * l1) * ido] = ref(cc, (j2 + k * ip) * ido) + ref(cc, (j2 + k * ip) * ido); } } if (ido != 1) { if (nbd >= l1) { for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ic = ido - i; ch[i - 1 + (k + j * l1) * ido] = ref(cc, i - 1 + (2 * j + k * ip) * ido) + ref(cc, ic - 1 + (2 * j - 1 + k * ip) * ido); ch[i - 1 + (k + jc * l1) * ido] = ref(cc, i - 1 + (2 * j + k * ip) * ido) - ref(cc, ic - 1 + (2 * j - 1 + k * ip) * ido); ch[i + (k + j * l1) * ido] = ref(cc, i + (2 * j + k * ip) * ido) - ref(cc, ic + (2 * j - 1 + k * ip) * ido); ch[i + (k + jc * l1) * ido] = ref(cc, i + (2 * j + k * ip) * ido) + ref(cc, ic + (2 * j - 1 + k * ip) * ido); } } } } else { for (j = 1; j < ipph; j++) { jc = ip - j; for (i = 2; i < ido; i += 2) { ic = ido - i; for (k = 0; k < l1; k++) { ch[i - 1 + (k + j * l1) * ido] = ref(cc, i - 1 + (2 * j + k * ip) * ido) + ref(cc, ic - 1 + (2 * j - 1 + k * ip) * ido); ch[i - 1 + (k + jc * l1) * ido] = ref(cc, i - 1 + (2 * j + k * ip) * ido) - ref(cc, ic - 1 + (2 * j - 1 + k * ip) * ido); ch[i + (k + j * l1) * ido] = ref(cc, i + (2 * j + k * ip) * ido) - ref(cc, ic + (2 * j - 1 + k * ip) * ido); ch[i + (k + jc * l1) * ido] = ref(cc, i + (2 * j + k * ip) * ido) + ref(cc, ic + (2 * j - 1 + k * ip) * ido); } } } } } ar1 = 1; ai1 = 0; for (l = 1; l < ipph; l++) { lc = ip - l; ar1h = dcp * ar1 - dsp * ai1; ai1 = dcp * ai1 + dsp * ar1; ar1 = ar1h; for (ik = 0; ik < idl1; ik++) { cc[ik + l * idl1] = ch[ik] + ar1 * ch[ik + idl1]; cc[ik + lc * idl1] = ai1 * ch[ik + (ip - 1) * idl1]; } dc2 = ar1; ds2 = ai1; ar2 = ar1; ai2 = ai1; for (j = 2; j < ipph; j++) { jc = ip - j; ar2h = dc2 * ar2 - ds2 * ai2; ai2 = dc2 * ai2 + ds2 * ar2; ar2 = ar2h; for (ik = 0; ik < idl1; ik++) { cc[ik + l * idl1] += ar2 * ch[ik + j * idl1]; cc[ik + lc * idl1] += ai2 * ch[ik + jc * idl1]; } } } for (j = 1; j < ipph; j++) { for (ik = 0; ik < idl1; ik++) { ch[ik] += ch[ik + j * idl1]; } } for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { ch[(k + j * l1) * ido] = cc[(k + j * l1) * ido] - cc[(k + jc * l1) * ido]; ch[(k + jc * l1) * ido] = cc[(k + j * l1) * ido] + cc[(k + jc * l1) * ido]; } } if (ido == 1) return; if (nbd >= l1) { for (j = 1; j < ipph; j++) { jc = ip - j; for (k = 0; k < l1; k++) { for (i = 2; i < ido; i += 2) { ch[i - 1 + (k + j * l1) * ido] = cc[i - 1 + (k + j * l1) * ido] - cc[i + (k + jc * l1) * ido]; ch[i - 1 + (k + jc * l1) * ido] = cc[i - 1 + (k + j * l1) * ido] + cc[i + (k + jc * l1) * ido]; ch[i + (k + j * l1) * ido] = cc[i + (k + j * l1) * ido] + cc[i - 1 + (k + jc * l1) * ido]; ch[i + (k + jc * l1) * ido] = cc[i + (k + j * l1) * ido] - cc[i - 1 + (k + jc * l1) * ido]; } } } } else { for (j = 1; j < ipph; j++) { jc = ip - j; for (i = 2; i < ido; i += 2) { for (k = 0; k < l1; k++) { ch[i - 1 + (k + j * l1) * ido] = cc[i - 1 + (k + j * l1) * ido] - cc[i + (k + jc * l1) * ido]; ch[i - 1 + (k + jc * l1) * ido] = cc[i - 1 + (k + j * l1) * ido] + cc[i + (k + jc * l1) * ido]; ch[i + (k + j * l1) * ido] = cc[i + (k + j * l1) * ido] + cc[i - 1 + (k + jc * l1) * ido]; ch[i + (k + jc * l1) * ido] = cc[i + (k + j * l1) * ido] - cc[i - 1 + (k + jc * l1) * ido]; } } } } for (ik = 0; ik < idl1; ik++) cc[ik] = ch[ik]; for (j = 1; j < ip; j++) for (k = 0; k < l1; k++) cc[(k + j * l1) * ido] = ch[(k + j * l1) * ido]; if (nbd <= l1) { is = -ido; for (j = 1; j < ip; j++) { is += ido; idij = is - 1; for (i = 2; i < ido; i += 2) { idij += 2; for (k = 0; k < l1; k++) { cc[i - 1 + (k + j * l1) * ido] = wa[idij - 1] * ch[i - 1 + (k + j * l1) * ido] - wa[idij] * ch[i + (k + j * l1) * ido]; cc[i + (k + j * l1) * ido] = wa[idij - 1] * ch[i + (k + j * l1) * ido] + wa[idij] * ch[i - 1 + (k + j * l1) * ido]; } } } } else { is = -ido; for (j = 1; j < ip; j++) { is += ido; for (k = 0; k < l1; k++) { idij = is; for (i = 2; i < ido; i += 2) { idij += 2; cc[i - 1 + (k + j * l1) * ido] = wa[idij - 1] * ch[i - 1 + (k + j * l1) * ido] - wa[idij] * ch[i + (k + j * l1) * ido]; cc[i + (k + j * l1) * ido] = wa[idij - 1] * ch[i + (k + j * l1) * ido] + wa[idij] * ch[i - 1 + (k + j * l1) * ido]; } } } } } /* radbg */ /* ---------------------------------------------------------------------- cfftf1, cfftf, cfftb, cffti1, cffti. Complex FFTs. ---------------------------------------------------------------------- */ static void cfftf1(int n, Treal c[], Treal ch[], const Treal wa[], const int ifac[MAXFAC + 2], int isign) { int idot, i; int k1, l1, l2; int na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1; Treal *cinput, *coutput; nf = ifac[1]; na = 0; l1 = 1; iw = 0; for (k1 = 2; k1 <= nf + 1; k1++) { ip = ifac[k1]; l2 = ip * l1; ido = n / l2; idot = ido + ido; idl1 = idot * l1; if (na) { cinput = ch; coutput = c; } else { cinput = c; coutput = ch; } switch (ip) { case 4: ix2 = iw + idot; ix3 = ix2 + idot; passf4(idot, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3], isign); na = !na; break; case 2: passf2(idot, l1, cinput, coutput, &wa[iw], isign); na = !na; break; case 3: ix2 = iw + idot; passf3(idot, l1, cinput, coutput, &wa[iw], &wa[ix2], isign); na = !na; break; case 5: ix2 = iw + idot; ix3 = ix2 + idot; ix4 = ix3 + idot; passf5(idot, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign); na = !na; break; default: passf(&nac, idot, ip, l1, idl1, cinput, coutput, &wa[iw], isign); if (nac != 0) na = !na; } l1 = l2; iw += (ip - 1) * idot; } if (na == 0) return; for (i = 0; i < 2 * n; i++) c[i] = ch[i]; } /* cfftf1 */ void cfftf(int n, Treal c[], Treal wsave[]) { int iw1, iw2; if (n == 1) return; iw1 = 2 * n; iw2 = iw1 + 2 * n; cfftf1(n, c, wsave, wsave + iw1, (int *)(wsave + iw2), -1); } /* cfftf */ void cfftb(int n, Treal c[], Treal wsave[]) { int iw1, iw2; if (n == 1) return; iw1 = 2 * n; iw2 = iw1 + 2 * n; cfftf1(n, c, wsave, wsave + iw1, (int *)(wsave + iw2), +1); } /* cfftb */ static void factorize(int n, int ifac[MAXFAC + 2]) /* Factorize n in factors of 2,3,4,5 and rest. On exit, ifac[0] contains n and ifac[1] contains number of factors, the factors start from ifac[2]. */ { static const int ntryh[4] = {3, 4, 2, 5}; int ntry = 3, i, j = 0, ib, nf = 0, nl = n, nq, nr; startloop: if (j < 4) ntry = ntryh[j]; else ntry += 2; j++; do { nq = nl / ntry; nr = nl - ntry * nq; if (nr != 0) goto startloop; nf++; ifac[nf + 1] = ntry; nl = nq; if (ntry == 2 && nf != 1) { for (i = 2; i <= nf; i++) { ib = nf - i + 2; ifac[ib + 1] = ifac[ib]; } ifac[2] = 2; } } while (nl != 1); ifac[0] = n; ifac[1] = nf; } static void cffti1(int n, Treal wa[], int ifac[MAXFAC + 2]) { static const Treal twopi = 6.28318530717959; Treal arg, argh, argld, fi; int idot, i, j; int i1, k1, l1, l2; int ld, ii, nf, ip; int ido, ipm; factorize(n, ifac); nf = ifac[1]; argh = twopi / (Treal)n; i = 1; l1 = 1; for (k1 = 1; k1 <= nf; k1++) { ip = ifac[k1 + 1]; ld = 0; l2 = l1 * ip; ido = n / l2; idot = ido + ido + 2; ipm = ip - 1; for (j = 1; j <= ipm; j++) { i1 = i; wa[i - 1] = 1; wa[i] = 0; ld += l1; fi = 0; argld = ld * argh; for (ii = 4; ii <= idot; ii += 2) { i += 2; fi += 1; arg = fi * argld; wa[i - 1] = cos(arg); wa[i] = sin(arg); } if (ip > 5) { wa[i1 - 1] = wa[i - 1]; wa[i1] = wa[i]; } } l1 = l2; } } /* cffti1 */ void cffti(int n, Treal wsave[]) { int iw1, iw2; if (n == 1) return; iw1 = 2 * n; iw2 = iw1 + 2 * n; cffti1(n, wsave + iw1, (int *)(wsave + iw2)); } /* cffti */ /* ---------------------------------------------------------------------- rfftf1, rfftb1, rfftf, rfftb, rffti1, rffti. Treal FFTs. ---------------------------------------------------------------------- */ static void rfftf1(int n, Treal c[], Treal ch[], const Treal wa[], const int ifac[MAXFAC + 2]) { int i; int k1, l1, l2, na, kh, nf, ip, iw, ix2, ix3, ix4, ido, idl1; Treal *cinput, *coutput; nf = ifac[1]; na = 1; l2 = n; iw = n - 1; for (k1 = 1; k1 <= nf; ++k1) { kh = nf - k1; ip = ifac[kh + 2]; l1 = l2 / ip; ido = n / l2; idl1 = ido * l1; iw -= (ip - 1) * ido; na = !na; if (na) { cinput = ch; coutput = c; } else { cinput = c; coutput = ch; } switch (ip) { case 4: ix2 = iw + ido; ix3 = ix2 + ido; radf4(ido, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3]); break; case 2: radf2(ido, l1, cinput, coutput, &wa[iw]); break; case 3: ix2 = iw + ido; radf3(ido, l1, cinput, coutput, &wa[iw], &wa[ix2]); break; case 5: ix2 = iw + ido; ix3 = ix2 + ido; ix4 = ix3 + ido; radf5(ido, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4]); break; default: if (ido == 1) na = !na; if (na == 0) { radfg(ido, ip, l1, idl1, c, ch, &wa[iw]); na = 1; } else { radfg(ido, ip, l1, idl1, ch, c, &wa[iw]); na = 0; } } l2 = l1; } if (na == 1) return; for (i = 0; i < n; i++) c[i] = ch[i]; } /* rfftf1 */ void rfftb1(int n, Treal c[], Treal ch[], const Treal wa[], const int ifac[MAXFAC + 2]) { int i; int k1, l1, l2, na, nf, ip, iw, ix2, ix3, ix4, ido, idl1; Treal *cinput, *coutput; nf = ifac[1]; na = 0; l1 = 1; iw = 0; for (k1 = 1; k1 <= nf; k1++) { ip = ifac[k1 + 1]; l2 = ip * l1; ido = n / l2; idl1 = ido * l1; if (na) { cinput = ch; coutput = c; } else { cinput = c; coutput = ch; } switch (ip) { case 4: ix2 = iw + ido; ix3 = ix2 + ido; radb4(ido, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3]); na = !na; break; case 2: radb2(ido, l1, cinput, coutput, &wa[iw]); na = !na; break; case 3: ix2 = iw + ido; radb3(ido, l1, cinput, coutput, &wa[iw], &wa[ix2]); na = !na; break; case 5: ix2 = iw + ido; ix3 = ix2 + ido; ix4 = ix3 + ido; radb5(ido, l1, cinput, coutput, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4]); na = !na; break; default: radbg(ido, ip, l1, idl1, cinput, coutput, &wa[iw]); if (ido == 1) na = !na; } l1 = l2; iw += (ip - 1) * ido; } if (na == 0) return; for (i = 0; i < n; i++) c[i] = ch[i]; } /* rfftb1 */ void rfftf(int n, Treal r[], Treal wsave[]) { if (n == 1) return; rfftf1(n, r, wsave, wsave + n, (int *)(wsave + 2 * n)); } /* rfftf */ void rfftb(int n, Treal r[], Treal wsave[]) { if (n == 1) return; rfftb1(n, r, wsave, wsave + n, (int *)(wsave + 2 * n)); } /* rfftb */ static void rffti1(int n, Treal wa[], int ifac[MAXFAC + 2]) { static const Treal twopi = 6.28318530717959; Treal arg, argh, argld, fi; int i, j; int k1, l1, l2; int ld, ii, nf, ip, is; int ido, ipm, nfm1; factorize(n, ifac); nf = ifac[1]; argh = twopi / n; is = 0; nfm1 = nf - 1; l1 = 1; if (nfm1 == 0) return; for (k1 = 1; k1 <= nfm1; k1++) { ip = ifac[k1 + 1]; ld = 0; l2 = l1 * ip; ido = n / l2; ipm = ip - 1; for (j = 1; j <= ipm; ++j) { ld += l1; i = is; argld = (Treal)ld * argh; fi = 0; for (ii = 3; ii <= ido; ii += 2) { i += 2; fi += 1; arg = fi * argld; wa[i - 2] = cos(arg); wa[i - 1] = sin(arg); } is += ido; } l1 = l2; } } /* rffti1 */ void rffti(int n, Treal wsave[]) { if (n == 1) return; rffti1(n, wsave + n, (int *)(wsave + 2 * n)); } /* rffti */ #ifdef __cplusplus } #endif GMTSAR_V5.7/.svn/pristine/23/23decfad06dcf00d265d9c15ff53c1eed48fd6d8.svn-base000444 015705 000000 00000000646 13505462014 026255 0ustar00sandwellwheel000000 000000 #ifndef _COMPLEX_H #define _COMPLEX_H typedef struct SCOMPLEX { short r, i; } scomplex; typedef struct FCOMPLEX { float r, i; } fcomplex; typedef struct DCOMPLEX { double r, i; } dcomplex; fcomplex Cmul(fcomplex x, fcomplex y); fcomplex Cexp(float theta); fcomplex Conjg(fcomplex z); fcomplex RCmul(float a, fcomplex z); fcomplex Cadd(fcomplex x, fcomplex y); float Cabs(fcomplex z); #endif /* _COMPLEX_H */ GMTSAR_V5.7/.svn/pristine/23/2343f0b01eb74c9b25ee779c54bd5ee38183f4d5.svn-base000444 015705 000000 00000027111 13505462014 025615 0ustar00sandwellwheel000000 000000 /* * $Id: epr_band.h,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_BAND_H_INCL #define EPR_BAND_H_INCL #ifdef __cplusplus extern "C" { #endif #include "epr_ptrarray.h" #include /* just to get the ANSI-C type FILE */ /** * Converts the given string into a scaling method identifier. * * @param str the string to be converted. * @return the scaling method identifier represented by the given string. * If the string is equal of '*' the value * e_non_smid is returned. */ EPR_EScalingMethod epr_str_to_scaling_method(const char* str); /** * Converts the given string into a sample offset identifier. * * @param str the string to be converted. * @return the sample offset identifier represented by the given string. * If the string is equal of '*' the value * e_none_samoff is returned. */ EPR_ESampleModel epr_str_to_sample_offset(const char* str); /** * Gets the dataset_id, field_index and elem_index * * @param product_id the the product file identifier * @param str the string with the name, separator ('.') and indexes. * @return the dataset_id, field_index and elem_index (-1 if no). * NULL if correspondent dataset name was not found. */ EPR_SDatasetRef epr_get_ref_struct(EPR_SProductId* product_id, const char* str); /** * Gets the scaling factor by the given dataset_id, field_index, elem_index * * @param product_id the the product file identifier * @param str the string with the name, separator ('.') and indexes. * @return the dataset_id, field_index and elem_index (-1 if no). * NULL if correspondent dataset name was not found. */ float epr_get_scaling_factor(EPR_SProductId* product_id, const char* str); float epr_get_scaling_params(EPR_SProductId* product_id, const char* str); /** * Reads the measurement data and converts its in physical values. * * @param band_id the information about properties and quantities of ENVISAT data. * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster the instance to the buffer information was used * * @return zero for success, and error code otherwise */ int epr_read_band_measurement_data(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster); /** * Reads the annotation data and converts its in physical values. * * @param band_id the information about properties and quantities of ENVISAT data. * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster the instance to the buffer information was used * * @return zero for success, and error code otherwise */ int epr_read_band_annotation_data(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster); /** * This group of functions is for scaling the field element for a physical measurement values. *
The type is located in the field info. *
One field must have one type only. * * @param sourceArray the sourse array identifier (to be scaled) * @param band_id the band ID with the information about the field's physical properties * @param xo [PIXEL] X-coordinate (0-bazed) of the upper right corner raster to search * @param raster_width [PIXEL] the width of the raster is been research * @param s_x X-step to get the next raster to search * @param raster_buffer [BYTE] the memory buffer to save information was scaled * @param raster_pos shows the point of filling of the array raster_buffer * */ /*@{*/ void decode_line_uchar_1_of_1_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_ushort_1_of_1_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_short_1_of_1_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_short_1_of_2_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_short_2_of_2_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_char_1_of_1_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_1_of_1_to_uchar (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_1_of_2_to_uchar (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_2_of_2_to_uchar (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_ushort_1_of_1_to_ushort (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_1_of_2_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_2_of_2_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_2_to_f_to_float (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); void decode_line_uchar_3_to_i_to_uint (void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); /*@}*/ /** * This group of functions is for scaling the field element for a physical annotation values. *
The type is located in the field info. *
One field must have one type only. * * @param sourceArray the sourse array identifier (to be scaled) * @param band_id the band ID with the information about the field's physical properties * @param raster_buffer [BYTE] the memory buffer to save information was scaled * @param nel number of element to scale * */ /*@{*/ void transform_array_short_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel); void transform_array_ushort_to_float(void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel); void transform_array_int_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel); void transform_array_uint_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel); /*@}*/ /** * This group of functions is for mirroring the scaled line of a physical MERIS values. * * @param raster_buffer [BYTE] the memory buffer to be Y-mirrored * @param raster_width [PIXEL] the width of the raster is been Y-mirrored * @param raster_height [PIXEL] the height of the raster is been Y-mirrored * */ /*@{*/ void mirror_float_array (float* raster_buffer, uint raster_width, uint raster_height); void mirror_uchar_array (uchar* raster_buffer, uint raster_width, uint raster_height); void mirror_ushort_array (ushort* raster_buffer, uint raster_width, uint raster_height); void mirror_uint_array (uint* raster_buffer, uint raster_width, uint raster_height); /*@}*/ /** * Two dimenzional interpolation * * @param wi the interpolation point location in [0,1] in "horizontal" direction * @param wj the interpolation point location in [0,1] in "vertical" direction * @param x00 the first point in "horizontal" direction * @param x10 the second point in "horizontal" direction * @param x01 the first point in "vertical" direction * @param x11 the second point in "vertical" direction * * @return float interpolated value */ float epr_interpolate2D(float wi, float wj, float x00, float x10, float x01, float x11); /** * Computes the physical values for the annotation data. * * @param sa_beg the float array of tie points "before" Y-coordinate of the point to search * @param sa_end the float array of tie points "after" Y-coordinate of the point to search * @param samples_per_tie_pt the "distance" between two neighbour tie point (in scan-line direction) * @param num_elems number of elements in one tie point scan-line * @param band_id the information about properties and quantities of ENVISAT data. * @param xo [PIXEL] X-coordinate (0-bazed) of the upper right corner raster to search * @param y_mod [PIXEL] relativ location of the point is been researched (in fly direction) * @param raster_width [PIXEL] the width of the raster is been researched * @param s_x [PIXEL] X-step to get the next point (in source coordinates) to search * @param raster_buffer the float user array to be filled with physical values * @param raster_pos the actual "filled" position in raster_buffer-array * */ void decode_tiepoint_band(float* sa_beg, float* sa_end, uint samples_per_tie_pt, uint num_elems, EPR_SBandId* band_id, int xo, float scan_offset_x, float y_mod, int raster_width, int s_x, float* raster_buffer, int raster_pos); typedef void (*EPR_FLineDecoder)(void* sourceArray, EPR_SBandId* band_id, int xo, int raster_width, int s_x, void* raster_buffer, int raster_pos); /** * Selects the line decode function, depended on measurement data type. */ EPR_FLineDecoder select_line_decode_function(EPR_EDataTypeId band_daty, EPR_ESampleModel band_smod, EPR_EDataTypeId daty_id); typedef void (*EPR_FArrayTransformer)(void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel); /** * Selects the transform array function, dependent on annotation data type. */ EPR_FArrayTransformer select_transform_array_function(EPR_EDataTypeId band_daty, EPR_EDataTypeId daty_id); /** * Masks the band information out. * The band information will be masked dependent on bit mask filter for the same * selected area (described in raster). * * @param raster selected and physically processed the ENVISAT product data band information * @param bm_raster selected the ENVISAT flag bit mask filter */ void epr_zero_invalid_pixels(EPR_SRaster* raster, EPR_SRaster* bm_raster); /** * Release the memory allocated through a band ID. * * @param band_id the band identifier to be released. */ void epr_free_band_id(EPR_SBandId* band_id); EPR_SPtrArray* epr_create_band_ids(EPR_SProductId* product_id); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_BAND_H_INCL */ GMTSAR_V5.7/.svn/pristine/23/23ee9e1d5099dbba40458a11e1e98316fc164f86.svn-base000444 015705 000000 00000000335 13505462013 025533 0ustar00sandwellwheel000000 000000 3 5 0.0439 0.3247 0.0439 0.0821 0.6065 0.0821 0.1194 0.8825 0.1194 0.1353 1.0000 0.1353 0.1194 0.8825 0.1194 0.0821 0.6065 0.0821 0.0439 0.3247 0.0439 GMTSAR_V5.7/.svn/pristine/23/23631e27b5252d44ac2b7574a1114769b05671e5.svn-base000444 015705 000000 00000047214 13505462013 025137 0ustar00sandwellwheel000000 000000 /************************************************************************ * routines for handling sio struct in PRM files * ************************************************************************/ /************************************************************************ * Creator: Rob J. Mellors, San Deigo State University * * Date : December 18, 2007 * * * * Modification history: * * some slight format changes - Dec 18, 2007 - RJM * ************************************************************************/ /* null_sio_struct(struct PRM *p) sets all values to a NULL value */ /* get_sio_struct(FILE *,struct PRM *p) reads values from FILE */ /* put_sio_struct(struct PRM *p,FILE *,) writes all non-NULL values to FILE */ #include "gmtsar.h" #include "lib_functions.h" /*---------------------------------------------------------------*/ int get_prm(struct PRM *p, char *filename) { FILE *PRMfile; if ((PRMfile = fopen(filename, "r")) == NULL) die("can't open file", filename); /* set all prm parameters in structure to NULL values */ null_sio_struct(p); /* read in prm parameters */ get_sio_struct(PRMfile, p); return (EXIT_SUCCESS); } /*---------------------------------------------------------------*/ void null_sio_struct(struct PRM *p) { /* characters */ strncpy(p->input_file, NULL_CHAR, 8); strncpy(p->SLC_file, NULL_CHAR, 8); strncpy(p->out_amp_file, NULL_CHAR, 8); strncpy(p->out_data_file, NULL_CHAR, 8); strncpy(p->deskew, NULL_CHAR, 8); strncpy(p->iqflip, NULL_CHAR, 8); strncpy(p->offset_video, NULL_CHAR, 8); strncpy(p->srm, NULL_CHAR, 8); strncpy(p->ref_file, NULL_CHAR, 8); strncpy(p->led_file, NULL_CHAR, 8); strncpy(p->orbdir, NULL_CHAR, 8); strncpy(p->lookdir, NULL_CHAR, 8); strncpy(p->dtype, NULL_CHAR, 8); /* ints */ p->debug_flag = NULL_INT; p->bytes_per_line = NULL_INT; p->good_bytes = NULL_INT; p->first_line = NULL_INT; p->num_patches = NULL_INT; p->first_sample = NULL_INT; p->num_valid_az = NULL_INT; p->st_rng_bin = NULL_INT; p->num_rng_bins = NULL_INT; p->chirp_ext = NULL_INT; p->nlooks = NULL_INT; p->rshift = NULL_INT; p->ashift = NULL_INT; p->fdc_ystrt = NULL_INT; p->fdc_strt = NULL_INT; p->rec_start = NULL_INT; p->rec_stop = NULL_INT; p->SC_identity = NULL_INT; p->ref_identity = NULL_INT; p->nrows = NULL_INT; p->num_lines = NULL_INT; p->SLC_format = NULL_INT; /* doubles */ p->SC_clock_start = NULL_DOUBLE; p->SC_clock_stop = NULL_DOUBLE; p->icu_start = NULL_DOUBLE; p->clock_start = NULL_DOUBLE; p->clock_stop = NULL_DOUBLE; p->caltone = NULL_DOUBLE; p->RE = NULL_DOUBLE; p->ra = NULL_DOUBLE; p->rc = NULL_DOUBLE; p->vel = NULL_DOUBLE; p->ht = NULL_DOUBLE; p->ht_start = NULL_DOUBLE; p->ht_end = NULL_DOUBLE; p->near_range = NULL_DOUBLE; p->far_range = NULL_DOUBLE; p->prf = NULL_DOUBLE; p->xmi = NULL_DOUBLE; p->xmq = NULL_DOUBLE; p->az_res = NULL_DOUBLE; p->fs = NULL_DOUBLE; p->chirp_slope = NULL_DOUBLE; p->pulsedur = NULL_DOUBLE; p->lambda = NULL_DOUBLE; p->rhww = NULL_DOUBLE; p->pctbw = NULL_DOUBLE; p->pctbwaz = NULL_DOUBLE; p->fd1 = NULL_DOUBLE; p->fdd1 = NULL_DOUBLE; p->fddd1 = NULL_DOUBLE; p->sub_int_r = NULL_DOUBLE; p->sub_int_a = NULL_DOUBLE; p->stretch_r = NULL_DOUBLE; p->stretch_a = NULL_DOUBLE; p->a_stretch_r = NULL_DOUBLE; p->a_stretch_a = NULL_DOUBLE; p->baseline_start = NULL_DOUBLE; p->baseline_center = NULL_DOUBLE; p->baseline_end = NULL_DOUBLE; p->alpha_start = NULL_DOUBLE; p->alpha_center = NULL_DOUBLE; p->alpha_end = NULL_DOUBLE; p->bpara = NULL_DOUBLE; p->bperp = NULL_DOUBLE; p->SLC_scale = NULL_DOUBLE; /* New parameters 9/25/18 -EXU */ p->B_offset_start = NULL_DOUBLE; p->B_offset_center = NULL_DOUBLE; p->B_offset_end = NULL_DOUBLE; }; /*--------------------------------------------------------------------*/ /* Read parameters into PRM structure from PRM file Based on get_params by Evelyn J. Price Modified by RJM */ /*--------------------------------------------------------------------*/ void get_sio_struct(FILE *fh, struct PRM *s) { char name[128], value[128], equal[128]; char str[1024]; if (debug) { fprintf(stderr, "get_sio_struct:\n"); fprintf(stderr, "PRMname (PRM value) interpreted value\n"); } while (fgets(str, 1024, fh) != NULL) { value[0] = '\0'; sscanf(str, "%s %s %s", name, equal, value); /* strings */ if (strcmp(name, "input_file") == 0) get_string(name, "input_file", value, s->input_file); if (strcmp(name, "led_file") == 0) get_string(name, "led_file", value, s->led_file); if (strcmp(name, "out_amp_file") == 0) get_string(name, "out_amp_file", value, s->out_amp_file); if (strcmp(name, "out_data_file") == 0) get_string(name, "out_data_file", value, s->out_data_file); if (strcmp(name, "scnd_rng_mig") == 0) get_string(name, "scnd_rng_mig", value, s->srm); if (strcmp(name, "deskew") == 0) get_string(name, "deskew", value, s->deskew); if (strcmp(name, "Flip_iq") == 0) get_string(name, "Flip_iq", value, s->iqflip); if (strcmp(name, "offset_video") == 0) get_string(name, "offset_video", value, s->offset_video); if (strcmp(name, "ref_file") == 0) get_string(name, "ref_file", value, s->ref_file); if (strcmp(name, "SLC_file") == 0) get_string(name, "SLC_file", value, s->SLC_file); if (strcmp(name, "orbdir") == 0) get_string(name, "orbdir", value, s->orbdir); if (strcmp(name, "lookdir") == 0) get_string(name, "lookdir", value, s->lookdir); if (strcmp(name, "dtype") == 0) get_string(name, "dtype", value, s->dtype); /* integers */ if (strcmp(name, "nrows") == 0) get_int(name, "nrows", value, &s->nrows); if (strcmp(name, "num_lines") == 0) get_int(name, "num_lines", value, &s->num_lines); if (strcmp(name, "bytes_per_line") == 0) get_int(name, "bytes_per_line", value, &s->bytes_per_line); if (strcmp(name, "good_bytes_per_line") == 0) get_int(name, "good_bytes_per_line", value, &s->good_bytes); if (strcmp(name, "first_line") == 0) get_int(name, "first_line", value, &s->first_line); if (strcmp(name, "num_patches") == 0) get_int(name, "num_patches", value, &s->num_patches); if (strcmp(name, "first_sample") == 0) get_int(name, "first_sample", value, &s->first_sample); if (strcmp(name, "num_valid_az") == 0) get_int(name, "num_valid_az", value, &s->num_valid_az); if (strcmp(name, "SC_identity") == 0) get_int(name, "SC_identity", value, &s->SC_identity); if (strcmp(name, "chirp_ext") == 0) get_int(name, "chirp_ext", value, &s->chirp_ext); if (strcmp(name, "st_rng_bin") == 0) get_int(name, "st_rng_bin", value, &s->st_rng_bin); if (strcmp(name, "num_rng_bins") == 0) get_int(name, "num_rng_bins", value, &s->num_rng_bins); if (strcmp(name, "ref_identity") == 0) get_int(name, "ref_identity", value, &s->ref_identity); if (strcmp(name, "nlooks") == 0) get_int(name, "nlooks", value, &s->nlooks); if (strcmp(name, "rshift") == 0) get_int(name, "rshift", value, &s->rshift); if (strcmp(name, "ashift") == 0) get_int(name, "ashift", value, &s->ashift); /* backwards compatibility for xshift/rshift yshift/ashift */ if (strcmp(name, "xshift") == 0) get_int(name, "rshift", value, &s->rshift); if (strcmp(name, "yshift") == 0) get_int(name, "ashift", value, &s->ashift); if (strcmp(name, "SLC_format") == 0) get_int(name, "SLC_format", value, &s->SLC_format); /* doubles */ if (strcmp(name, "SC_clock_start") == 0) get_double(name, "SC_clock_start", value, &s->SC_clock_start); if (strcmp(name, "SC_clock_stop") == 0) get_double(name, "SC_clock_stop", value, &s->SC_clock_stop); if (strcmp(name, "icu_start") == 0) get_double(name, "icu_start", value, &s->icu_start); if (strcmp(name, "clock_start") == 0) get_double(name, "clock_start", value, &s->clock_start); if (strcmp(name, "clock_stop") == 0) get_double(name, "clock_stop", value, &s->clock_stop); if (strcmp(name, "caltone") == 0) get_double(name, "caltone", value, &s->caltone); if (strcmp(name, "earth_radius") == 0) get_double(name, "earth_radius", value, &s->RE); if (strcmp(name, "equatorial_radius") == 0) get_double(name, "equatorial_radius", value, &s->ra); if (strcmp(name, "polar_radius") == 0) get_double(name, "polar_radius", value, &s->rc); if (strcmp(name, "SC_vel") == 0) get_double(name, "SC_vel", value, &s->vel); if (strcmp(name, "SC_height") == 0) get_double(name, "SC_height", value, &s->ht); if (strcmp(name, "SC_height_start") == 0) get_double(name, "SC_height_start", value, &s->ht_start); if (strcmp(name, "SC_height_end") == 0) get_double(name, "SC_height_end", value, &s->ht_end); if (strcmp(name, "near_range") == 0) get_double(name, "near_range", value, &s->near_range); if (strcmp(name, "PRF") == 0) get_double(name, "PRF", value, &s->prf); if (strcmp(name, "I_mean") == 0) get_double(name, "I_mean", value, &s->xmi); if (strcmp(name, "Q_mean") == 0) get_double(name, "Q_mean", value, &s->xmq); if (strcmp(name, "az_res") == 0) get_double(name, "az_res", value, &s->az_res); if (strcmp(name, "rng_samp_rate") == 0) get_double(name, "rng_samp_rate", value, &s->fs); if (strcmp(name, "chirp_slope") == 0) get_double(name, "chirp_slope", value, &s->chirp_slope); if (strcmp(name, "pulse_dur") == 0) get_double(name, "pulse_dur", value, &s->pulsedur); if (strcmp(name, "radar_wavelength") == 0) get_double(name, "radar_wavelength", value, &s->lambda); if (strcmp(name, "rng_spec_wgt") == 0) get_double(name, "rng_spec_wgt", value, &s->rhww); if (strcmp(name, "rm_rng_band") == 0) get_double(name, "rm_rng_band", value, &s->pctbw); if (strcmp(name, "rm_az_band") == 0) get_double(name, "rm_az_band", value, &s->pctbwaz); if (strcmp(name, "fd1") == 0) get_double(name, "fd1", value, &s->fd1); if (strcmp(name, "fdd1") == 0) get_double(name, "fdd1", value, &s->fdd1); if (strcmp(name, "fddd1") == 0) get_double(name, "fddd1", value, &s->fddd1); if (strcmp(name, "sub_int_r") == 0) get_double(name, "sub_int_r", value, &s->sub_int_r); if (strcmp(name, "sub_int_a") == 0) get_double(name, "sub_int_a", value, &s->sub_int_a); if (strcmp(name, "stretch_r") == 0) get_double(name, "stretch_r", value, &s->stretch_r); if (strcmp(name, "stretch_a") == 0) get_double(name, "stretch_a", value, &s->stretch_a); if (strcmp(name, "a_stretch_r") == 0) get_double(name, "a_stretch_r", value, &s->a_stretch_r); if (strcmp(name, "a_stretch_a") == 0) get_double(name, "a_stretch_a", value, &s->a_stretch_a); if (strcmp(name, "baseline_start") == 0) get_double(name, "baseline_start", value, &s->baseline_start); if (strcmp(name, "baseline_center") == 0) get_double(name, "baseline_center", value, &s->baseline_center); if (strcmp(name, "baseline_end") == 0) get_double(name, "baseline_end", value, &s->baseline_end); if (strcmp(name, "alpha_start") == 0) get_double(name, "alpha_start", value, &s->alpha_start); if (strcmp(name, "alpha_center") == 0) get_double(name, "alpha_center", value, &s->alpha_center); if (strcmp(name, "alpha_end") == 0) get_double(name, "alpha_end", value, &s->alpha_end); if (strcmp(name, "SLC_scale") == 0) get_double(name, "SLC_scale", value, &s->SLC_scale); /* New parameters 9/25/18 -EXU */ if (strcmp(name, "B_offset_start") == 0) get_double(name, "B_offset_start", value, &s->B_offset_start); if (strcmp(name, "B_offset_center") == 0) get_double(name, "B_offset_center", value, &s->B_offset_center); if (strcmp(name, "B_offset_end") == 0) get_double(name, "B_offset_end", value, &s->B_offset_end); } } /*--------------------------------------------------------------------------------*/ void get_string(char *s1, char *name, char *value, char *s2) { strcpy(s2, value); if (debug == 1) fprintf(stderr, " %s (%s) = %s\n", s1, name, value); } /*--------------------------------------------------------------------------------*/ void get_int(char *s1, char *name, char *value, int *iparam) { *iparam = atoi(value); if (debug == 1) fprintf(stderr, " %s (%s) = %s (%d)\n", s1, name, value, *iparam); } /*--------------------------------------------------------------------------------*/ void get_double(char *s1, char *name, char *value, double *param) { *param = atof(value); if (debug == 1) fprintf(stderr, " %s (%s) = %s (%lf)\n", s1, name, value, *param); } /*--------------------------------------------------------------------------------*/ /***************************************************************************/ void put_sio_struct(struct PRM prm, FILE *OUTFILE) { /* set by set_ALOS_defaults */ if (prm.num_valid_az != NULL_INT) fprintf(OUTFILE, "num_valid_az = %d \n", prm.num_valid_az); if (prm.nrows != NULL_INT) fprintf(OUTFILE, "nrows = %d \n", prm.nrows); if (prm.first_line != NULL_INT) fprintf(OUTFILE, "first_line = %d \n", prm.first_line); if (strncmp(prm.deskew, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "deskew = %s \n", prm.deskew); if (prm.caltone != NULL_DOUBLE) fprintf(OUTFILE, "caltone = %lf \n", prm.caltone); if (prm.st_rng_bin != NULL_INT) fprintf(OUTFILE, "st_rng_bin = %d \n", prm.st_rng_bin); if (strncmp(prm.iqflip, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "Flip_iq = %s \n", prm.iqflip); if (strncmp(prm.offset_video, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "offset_video = %s \n", prm.offset_video); if (prm.az_res != NULL_DOUBLE) fprintf(OUTFILE, "az_res = %lf \n", prm.az_res); if (prm.nlooks != NULL_INT) fprintf(OUTFILE, "nlooks = %d \n", prm.nlooks); if (prm.chirp_ext != NULL_INT) fprintf(OUTFILE, "chirp_ext = %d \n", prm.chirp_ext); if (strncmp(prm.srm, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "scnd_rng_mig = %s \n", prm.srm); if (prm.rhww != NULL_DOUBLE) fprintf(OUTFILE, "rng_spec_wgt = %lf \n", prm.rhww); if (prm.pctbw != NULL_DOUBLE) fprintf(OUTFILE, "rm_rng_band = %lf \n", prm.pctbw); if (prm.pctbwaz != NULL_DOUBLE) fprintf(OUTFILE, "rm_az_band = %lf \n", prm.pctbwaz); if (prm.rshift != NULL_INT) fprintf(OUTFILE, "rshift = %d \n", prm.rshift); if (prm.ashift != NULL_INT) fprintf(OUTFILE, "ashift = %d \n", prm.ashift); if (prm.stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "stretch_r = %g \n", prm.stretch_r); if (prm.stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "stretch_a = %g \n", prm.stretch_a); if (prm.a_stretch_r != NULL_DOUBLE) fprintf(OUTFILE, "a_stretch_r = %g \n", prm.a_stretch_r); if (prm.a_stretch_a != NULL_DOUBLE) fprintf(OUTFILE, "a_stretch_a = %g \n", prm.a_stretch_a); if (prm.first_sample != NULL_INT) fprintf(OUTFILE, "first_sample = %d \n", prm.first_sample); if (prm.SC_identity != NULL_INT) fprintf(OUTFILE, "SC_identity = %d \n", prm.SC_identity); if (prm.fs != NULL_DOUBLE) fprintf(OUTFILE, "rng_samp_rate = %.6f \n", prm.fs); /* from read_ALOS_data */ if (strncmp(prm.input_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "input_file = %s \n", prm.input_file); if (prm.num_rng_bins != NULL_INT) fprintf(OUTFILE, "num_rng_bins = %d \n", prm.num_rng_bins); if (prm.bytes_per_line != NULL_INT) fprintf(OUTFILE, "bytes_per_line = %d \n", prm.bytes_per_line); if (prm.good_bytes != NULL_INT) fprintf(OUTFILE, "good_bytes_per_line = %d \n", prm.good_bytes); if (prm.prf != NULL_DOUBLE) fprintf(OUTFILE, "PRF = %lf \n", prm.prf); if (prm.pulsedur != NULL_DOUBLE) fprintf(OUTFILE, "pulse_dur = %e \n", prm.pulsedur); if (prm.near_range != NULL_DOUBLE) fprintf(OUTFILE, "near_range = %lf \n", prm.near_range); if (prm.num_lines != NULL_INT) fprintf(OUTFILE, "num_lines = %d \n", prm.num_lines); if (prm.num_patches != NULL_INT) fprintf(OUTFILE, "num_patches = %d \n", prm.num_patches); if (prm.SC_clock_start != NULL_DOUBLE) fprintf(OUTFILE, "SC_clock_start = %16.10lf \n", prm.SC_clock_start); if (prm.SC_clock_stop != NULL_DOUBLE) fprintf(OUTFILE, "SC_clock_stop = %16.10lf \n", prm.SC_clock_stop); if (prm.clock_start != NULL_DOUBLE) fprintf(OUTFILE, "clock_start = %16.12lf \n", prm.clock_start); if (prm.clock_stop != NULL_DOUBLE) fprintf(OUTFILE, "clock_stop = %16.12lf \n", prm.clock_stop); if (strncmp(prm.led_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "led_file = %s \n", prm.led_file); /* from read_ALOS_ldrfile */ if (strncmp(prm.orbdir, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "orbdir = %s \n", prm.orbdir); if (strncmp(prm.lookdir, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "lookdir = %s \n", prm.lookdir); if (prm.lambda != NULL_DOUBLE) fprintf(OUTFILE, "radar_wavelength = %lg \n", prm.lambda); if (prm.chirp_slope != NULL_DOUBLE) fprintf(OUTFILE, "chirp_slope = %lg \n", prm.chirp_slope); if (prm.fs != NULL_DOUBLE) fprintf(OUTFILE, "rng_samp_rate = %.6f \n", prm.fs); if (prm.xmi != NULL_DOUBLE) fprintf(OUTFILE, "I_mean = %lg \n", prm.xmi); if (prm.xmq != NULL_DOUBLE) fprintf(OUTFILE, "Q_mean = %lg \n", prm.xmq); if (prm.vel != NULL_DOUBLE) fprintf(OUTFILE, "SC_vel = %lf \n", prm.vel); if (prm.RE != NULL_DOUBLE) fprintf(OUTFILE, "earth_radius = %lf \n", prm.RE); if (prm.ra != NULL_DOUBLE) fprintf(OUTFILE, "equatorial_radius = %lf \n", prm.ra); if (prm.rc != NULL_DOUBLE) fprintf(OUTFILE, "polar_radius = %lf \n", prm.rc); if (prm.ht != NULL_DOUBLE) fprintf(OUTFILE, "SC_height = %lf \n", prm.ht); if (prm.ht_start != NULL_DOUBLE) fprintf(OUTFILE, "SC_height_start = %lf \n", prm.ht_start); if (prm.ht_end != NULL_DOUBLE) fprintf(OUTFILE, "SC_height_end = %lf \n", prm.ht_end); if (prm.fd1 != NULL_DOUBLE) fprintf(OUTFILE, "fd1 = %lf \n", prm.fd1); if (prm.fdd1 != NULL_DOUBLE) fprintf(OUTFILE, "fdd1 = %lf \n", prm.fdd1); if (prm.fddd1 != NULL_DOUBLE) fprintf(OUTFILE, "fddd1 = %lf \n", prm.fddd1); /* from calc_baseline */ /* if (prm.rshift != NULL_INT) fprintf(OUTFILE, "rshift = %d \n",prm.rshift); if (prm.ashift != NULL_INT) fprintf(OUTFILE, "ashift = %d\n",prm.ashift); */ if (prm.sub_int_r != NULL_DOUBLE) fprintf(OUTFILE, "sub_int_r = %lf \n", prm.sub_int_r); if (prm.sub_int_a != NULL_DOUBLE) fprintf(OUTFILE, "sub_int_a = %lf \n", prm.sub_int_a); if (prm.bpara != NULL_DOUBLE) fprintf(OUTFILE, "B_parallel = %lf \n", prm.bpara); if (prm.bperp != NULL_DOUBLE) fprintf(OUTFILE, "B_perpendicular = %lf \n", prm.bperp); if (prm.baseline_start != NULL_DOUBLE) fprintf(OUTFILE, "baseline_start = %lf \n", prm.baseline_start); if (prm.baseline_center != NULL_DOUBLE) fprintf(OUTFILE, "baseline_center = %lf \n", prm.baseline_center); if (prm.baseline_end != NULL_DOUBLE) fprintf(OUTFILE, "baseline_end = %lf \n", prm.baseline_end); if (prm.alpha_start != NULL_DOUBLE) fprintf(OUTFILE, "alpha_start = %lf \n", prm.alpha_start); if (prm.alpha_center != NULL_DOUBLE) fprintf(OUTFILE, "alpha_center = %lf \n", prm.alpha_center); if (prm.alpha_end != NULL_DOUBLE) fprintf(OUTFILE, "alpha_end = %lf \n", prm.alpha_end); if (prm.B_offset_start != NULL_DOUBLE) fprintf(OUTFILE, "B_offset_start = %lf \n", prm.B_offset_start); if (prm.B_offset_center != NULL_DOUBLE) fprintf(OUTFILE, "B_offset_center = %lf \n", prm.B_offset_center); if (prm.B_offset_end != NULL_DOUBLE) fprintf(OUTFILE, "B_offset_end = %lf \n", prm.B_offset_end); /* from sarp */ if (strncmp(prm.SLC_file, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "SLC_file = %s \n", prm.SLC_file); if (strncmp(prm.dtype, NULL_CHAR, 8) != 0) fprintf(OUTFILE, "dtype = %.1s \n", prm.dtype); if (prm.SLC_scale != NULL_DOUBLE) fprintf(OUTFILE, "SLC_scale = %lf \n", prm.SLC_scale); } /***************************************************************************/ GMTSAR_V5.7/.svn/pristine/24/24906508bb8c544247b1d441bdacb01d1a2a35e6.svn-base000444 015705 000000 00000036255 13505462014 025503 0ustar00sandwellwheel000000 000000 /***************************************************************************/ /* read_ALOS_data reads an ALOS IMG file containing raw signal data */ /* and creates a raw-file and PRM-file suitable for our esarp processor. */ /* The program skips the first 720 bytes of the IMG file but copies the */ /* remaining data to the IMG.raw file after checking and fixing problems. */ /* The first record is read to determine the linelength, starting PRF, */ /* and near_range. If the line length or PRF change then the program */ /* halts. If the near_range changes then the lines are shifted and */ /* unconstrained values at the ends are set to NULL_DATA (15 or 16). */ /* (random sequence of 15 and 16's) */ /* During this processing the available parameters are added to the */ /* PRM-file. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Meng Wei * * (Scripps Institution of Oceanography) * * Date : 06/29/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 06/29/2006 added the near_range as an optional command-line argument * * 02/19/2007 added the ability to remove duplicate lines * * 03/07/2007 more robust to bad data in file * * 03/26/2007 ability to swap bytes (read on PC) RJM * * 03/28/2007 part of subroutine RJM * * removed set n_azimuth to 9000 rather than default * * 07/17/08 creates new file when prf changes RJM * * 07/17/08 reformatted; added functions RJM * ***************************************************************************/ /* the data header information is read into the structure dfd the line prefix information is read into sdr Values read here (and or generated) are: num_rng_bins bytes_per_line good_bytes_per_line PRF pulse_dur near_range num_lines num_patches SC_clock_start SC_clock_stop clock_start clock_stop */ /* fast random number generator */ #include "image_sio.h" #include "lib_functions.h" #define znew (int)(z = 36969 * (z & 65535) + (z >> 16)) typedef unsigned long UL; static UL z = 362436069, t[256]; void settable(UL i1) { int i; z = i1; for (i = 0; i < 256; i = i + 1) t[i] = znew; } void swap_ALOS_data_info(struct sardata_info *sdr); long read_sardata_info(FILE *, struct PRM *, int *, int *); void print_params(struct PRM *prm); int assign_sardata_params(struct PRM *, int, int *, int *); int check_shift(struct PRM *, int *, int *, int *, int); int set_file_position(FILE *, long *, int); int reset_params(struct PRM *prm, long *, int *, int *); int fill_shift_data(int, int, int, int, int, char *, char *, FILE *); int handle_prf_change(struct PRM *, FILE *, long *, int); struct sardata_record r1; struct sardata_descriptor dfd; struct sardata_info sdr; long read_ALOS_data(FILE *imagefile, FILE *outfile, struct PRM *prm, long *byte_offset) { char *data, *shift_data; int record_length0; /* length of record read at start of file */ int record_length1; /* length of record read in file */ int start_sdr_rec_len = 0; /* sdr record length for fisrt record */ int slant_range_old = 0; /* slant range of previous record */ int line_suffix_size; /* number of bytes after data */ int data_length; /* bytes of data */ int n, m, ishift, shift, shift0, npatch_max; int header_size, line_prefix_size; double get_clock(); settable(12345); if (debug) fprintf(stderr, ".... reading header \n"); /* read header information */ read_sardata_info(imagefile, prm, &header_size, &line_prefix_size); /* calculate parameters (data length, range bins, etc) */ assign_sardata_params(prm, line_prefix_size, &line_suffix_size, &record_length0); // fprintf(stderr,"before allocate data\n"); /* allocate data */ if ((data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); // fprintf(stderr,"after allocate length0 data\n"); if ((shift_data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); // fprintf(stderr,"after allocate data\n"); /* if byte_offset < 0 this is the first time through */ /* if prf change has occurred, set file to byte_offset */ set_file_position(imagefile, byte_offset, header_size); if (verbose) fprintf(stderr, ".... reading data (byte %ld) \n", ftell(imagefile)); shift0 = 0; n = 1; m = 0; /* read the rest of the file */ while ((fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile)) == 1) { n++; /* checks for little endian/ big endian */ if (swap) swap_ALOS_data_info(&sdr); /* if this is partway through the file due to prf change, reset sequence, * PRF, and near_range */ if ((*byte_offset > 0) && (n == 2)) reset_params(prm, byte_offset, &n, &m); if (n == 2) start_sdr_rec_len = sdr.record_length; if (sdr.record_length != start_sdr_rec_len) { printf(" ***** warning sdr.record_length error %d \n", sdr.record_length); sdr.record_length = start_sdr_rec_len; sdr.PRF = prm->prf; sdr.slant_range = slant_range_old; } if (sdr.sequence_number != n) printf(" missing line: n, seq# %d %d \n", n, sdr.sequence_number); /* check for changes in record_length and PRF */ record_length1 = sdr.record_length - line_prefix_size; if (record_length0 != record_length1) die("record_length changed", ""); /* if prf changes, close file and set byte_offset */ if ((sdr.PRF) != prm->prf) { handle_prf_change(prm, imagefile, byte_offset, n); break; } /* check shift to see if it varies from beginning or from command line value */ check_shift(prm, &shift, &ishift, &shift0, record_length1); if ((verbose) && (n / 2000.0 == n / 2000)) { fprintf(stderr, " Working on line %d prf %f record length %d slant_range %d \n", sdr.sequence_number, 0.001 * sdr.PRF, record_length1, sdr.slant_range); } /* read data (and trailing bytes) */ if (fread((char *)data, record_length1, (size_t)1, imagefile) != 1) break; data_length = record_length1; slant_range_old = sdr.slant_range; /* write line header to output data */ fwrite((void *)&sdr, line_prefix_size, 1, outfile); /* write data */ if (shift == 0) { fwrite((char *)data, data_length, 1, outfile); /* if data is shifted, fill in with data values of NULL_DATA at start or * end*/ } else if (shift != 0) { fill_shift_data(shift, ishift, data_length, line_suffix_size, record_length1, data, shift_data, outfile); } } /* calculate end time and fix prf */ prm->prf = 0.001 * prm->prf; prm->clock_stop = get_clock(sdr, tbias); prm->SC_clock_stop = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_stop; /* m is non-zero only in the event of a prf change */ prm->num_lines = n - m - 1; /* calculate the maximum number of patches and use that if the default is set * to 1000 */ npatch_max = (int)((1.0 * n) / (1.0 * prm->num_valid_az)); if (npatch_max < prm->num_patches) prm->num_patches = npatch_max; if (prm->num_lines == 0) prm->num_lines = 1; if (verbose) print_params(prm); free(data); free(shift_data); fclose(outfile); return (*byte_offset); } /***************************************************************************/ double get_clock(struct sardata_info sdr, double tbias) { double time; // nsd = 24.0*60.0*60.0; /* seconds in a day */ time = (double)sdr.sensor_acquisition_DOY + (double)sdr.sensor_acquisition_msecs_day / 1000.0 / 86400.0 + tbias / 86400.0; return (time); } /***************************************************************************/ void print_params(struct PRM *prm) { fprintf(stdout, "input_file = %s \n", prm->input_file); fprintf(stdout, "num_rng_bins = %d \n", prm->num_rng_bins); fprintf(stdout, "bytes_per_line = %d \n", prm->bytes_per_line); fprintf(stdout, "good_bytes_per_line = %d \n", prm->good_bytes); fprintf(stdout, "first_sample = %d \n", prm->first_sample); fprintf(stdout, "PRF = %f \n", prm->prf); fprintf(stdout, "pulse_dur = %e \n", prm->pulsedur); fprintf(stdout, "near_range = %f \n", prm->near_range); fprintf(stdout, "num_lines = %d \n", prm->num_lines); fprintf(stdout, "num_patches = %d \n", prm->num_patches); fprintf(stdout, "SC_clock_start = %16.10lf \n", prm->SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf \n", prm->SC_clock_stop); fprintf(stdout, "clock_start = %16.12lf \n", prm->clock_start); fprintf(stdout, "clock_stop = %16.12lf \n", prm->clock_stop); } /***************************************************************************/ long read_sardata_info(FILE *imagefile, struct PRM *prm, int *header_size, int *line_prefix_size) { long nitems; *header_size = sizeof(struct sardata_record) + sizeof(struct sardata_descriptor); *line_prefix_size = sizeof(struct sardata_info); if (*header_size != 720) die("header size is not 720 bytes\n", ""); if (*line_prefix_size != 412) die("header size is not 720 bytes\n", ""); if (debug) fprintf(stderr, " header_size %d line_prefix_size %d swap data %d\n", *header_size, *line_prefix_size, swap); /* make sure that we are at the beginning */ /* re-read header even if resetting after a PRF change */ rewind(imagefile); if (verbose) fprintf(stderr, ".... reading header (byte %ld) \n", ftell(imagefile)); /* data processed before Sept 15, 2006 have a timing bias of 0.9 s */ /* data processed after this data have a smaller bias 0.0 s */ nitems = fread((void *)&r1, sizeof(struct sardata_record), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_RECORD_WCS, SARDATA_RECORD_RVL(&r1)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_record)), ftell(imagefile)); } nitems = fread((void *)&dfd, sizeof(struct sardata_descriptor), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_DESCRIPTOR_WCS, SARDATA_DESCRIPTOR_RVL(&dfd)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_descriptor)), ftell(imagefile)); } nitems = fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile); if (debug) fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_info)), ftell(imagefile)); /* swap data little end/ big end if needed */ if (swap) swap_ALOS_data_info(&sdr); if (debug) fprintf(stderr, SARDATA__WCS, SARDATA_RVL(sdr)); return (nitems); } /***************************************************************************/ int assign_sardata_params(struct PRM *prm, int line_prefix_size, int *line_suffix_size, int *record_length0) { double get_clock(); prm->prf = sdr.PRF; prm->pulsedur = (1e-9) * sdr.chirp_length; *record_length0 = sdr.record_length - line_prefix_size; prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; /* record_length is 21100 */ /* beginning of line has a 412 byte prefix */ /* end of line has a 80 byte (40 pixels) suffix (right-fill pixels)*/ /* record_length0 (data length) is (20688 - 412) = 20276 */ /* n_data_pixels 10304 */ /* 2 bytes per pixel */ /* 412 bytes + (2*10304) bytes + (40*2) bytes = 21100 bytes*/ prm->good_bytes = 2 * sdr.n_data_pixels + line_prefix_size; prm->num_rng_bins = sdr.n_data_pixels + prm->chirp_ext; /* chirp_ext formerly nextend */ prm->bytes_per_line = sdr.record_length; *line_suffix_size = sdr.record_length - prm->good_bytes; if (prm->near_range < 0) prm->near_range = sdr.slant_range; if (*record_length0 > 50000) { fprintf(stderr, "**** record_length is %d !\n", *record_length0); die("expect something like 21100 .... try -swap option?\n", "exiting"); } return (EXIT_SUCCESS); } /***************************************************************************/ int check_shift(struct PRM *prm, int *shift, int *ishift, int *shift0, int record_length1) { *shift = 2 * floor(0.5 + (sdr.slant_range - prm->near_range) / (0.5 * SOL / prm->fs)); *ishift = abs(*shift); if (*ishift > record_length1) { printf(" end: shift exceeds data window %d \n", *shift); die("exitting", ""); } if (*shift != *shift0) { printf(" near_range, shift = %d %d \n", sdr.slant_range, *shift); *shift0 = *shift; } return (EXIT_SUCCESS); } /***************************************************************************/ int set_file_position(FILE *imagefile, long *byte_offset, int header_size) { if (*byte_offset < 0) { *byte_offset = 0; rewind(imagefile); fseek(imagefile, header_size, SEEK_SET); } else { fseek(imagefile, *byte_offset, SEEK_SET); } return (EXIT_SUCCESS); } /***************************************************************************/ int reset_params(struct PRM *prm, long *byte_offset, int *n, int *m) { double get_clock(); prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; prm->prf = sdr.PRF; prm->near_range = sdr.slant_range; *n = sdr.sequence_number; *m = *n; *byte_offset = 0; if (verbose) { fprintf(stderr, " new parameters: \n sequence number %d \n PRF %f\n near_range %lf\n", *n, 0.001 * prm->prf, prm->near_range); } return (EXIT_SUCCESS); } /***************************************************************************/ int fill_shift_data(int shift, int ishift, int data_length, int line_suffix_size, int record_length1, char *data, char *shift_data, FILE *outfile) { int k; /* NULL_DATA = 15; znew randonly is 0 or 1 */ if (shift > 0) { for (k = 0; k < ishift; k++) shift_data[k] = NULL_DATA + znew % 2; for (k = 0; k < data_length - ishift; k++) shift_data[k + ishift] = data[k]; } /* if data is shifted, fill in with data vlues of NULL_DATA at end */ if (shift < 0) { for (k = 0; k < data_length - ishift - line_suffix_size; k++) shift_data[k] = data[k + ishift]; for (k = data_length - ishift - line_suffix_size; k < record_length1; k++) shift_data[k] = NULL_DATA + znew % 2; } /* write the shifted data out */ fwrite((char *)shift_data, data_length, 1, outfile); return (EXIT_SUCCESS); } /***************************************************************************/ int handle_prf_change(struct PRM *prm, FILE *imagefile, long *byte_offset, int n) { prm->num_lines = n; /* skip back to beginning of the line */ fseek(imagefile, -1 * sizeof(struct sardata_info), SEEK_CUR); /* define byte_offset */ *byte_offset = ftell(imagefile); /* tell the world */ printf(" *** PRF changed from %lf to %lf at line %d (byte %ld)\n", (0.001 * prm->prf), (0.001 * sdr.PRF), n, *byte_offset); printf(" end: PRF changed from %lf to %lf at line %d \n", (0.001 * prm->prf), (0.001 * sdr.PRF), n); return (EXIT_SUCCESS); } /***************************************************************************/ GMTSAR_V5.7/.svn/pristine/24/24023b593de46ad28391e4181d7d646b4e568f34.svn-base000444 015705 000000 00000025342 13505462014 025324 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 04/06/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include "tiffio.h" #include #include #include #include int pop_prm(struct PRM *, tree *, char *); int pop_led(tree *, state_vector *); int write_orb(state_vector *sv, FILE *fp, int); int write_slc(TIFF *, FILE *); char *USAGE = "\n\nUsage: make_slc_s1a name_of_xml_file name_of_tiff_file name_output\n" "\nExample: make_slc_s1a s1a-s1-slc-vv-20140807.xml " "s1a-s1-slc-vv-20140807.tiff S1Avv_20140807\n" "\nOutput: S1Avv_20140807.SLC S1Avv_20140807.PRM S1Avv_20140807.LED\n"; int main(int argc, char **argv) { FILE *XML_FILE, *OUTPUT_PRM, *OUTPUT_SLC, *OUTPUT_LED; TIFF *TIFF_FILE; char tmp_str[200]; struct PRM prm; tree *xml_tree; state_vector sv[200]; int ch, n = 0, nc = 0, nlmx = 0; if (argc < 4) die(USAGE, ""); // find the number of lines and the maximum line length of the xml file if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } // fprintf(stderr,"%d %d \n",n,nlmx); xml_tree = (struct tree *)malloc(5 * n * sizeof(struct tree)); fclose(XML_FILE); // generate the xml tree if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_tree(XML_FILE, xml_tree, 1); fclose(XML_FILE); // show_tree(xml_tree,0,0); // initiate the prm null_sio_struct(&prm); // generate the PRM file pop_prm(&prm, xml_tree, argv[3]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); // generate the LED file n = pop_led(xml_tree, sv); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // generate the SLC file TIFFSetWarningHandler(NULL); if ((TIFF_FILE = TIFFOpen(argv[2], "r")) == NULL) die("Couldn't open tiff file: \n", argv[2]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc file: \n", tmp_str); write_slc(TIFF_FILE, OUTPUT_SLC); TIFFClose(TIFF_FILE); fclose(OUTPUT_SLC); } int write_slc(TIFF *tif, FILE *slc) { uint32 width, height, widthi; uint32 i, j; uint16 s, nsamples; uint16 *buf; short *tmp; // get the width and the height of the file, make width dividable by 4 TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &widthi); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); width = widthi - widthi % 4; // printf("%d %d \n",width,height); buf = (uint16 *)_TIFFmalloc(TIFFScanlineSize(tif)); tmp = (short *)malloc(width * 2 * sizeof(short)); printf("Writing SLC..Image Size: %d X %d...\n", width, height); TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &nsamples); for (s = 0; s < nsamples; s++) { for (i = 0; i < height; i++) { TIFFReadScanline(tif, buf, i, s); for (j = 0; j < width * 2; j++) { tmp[j] = (short)buf[j]; } fwrite(tmp, sizeof(short), width * 2, slc); } } _TIFFfree(buf); free(tmp); return (1); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 100.0) / 100.0 - trunc((sv[0].sec) * 100.0) / 100.0; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.6lf %lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led(tree *xml_tree, state_vector *sv) { int i, count; char tmp_c[200]; double tmp_d; search_tree(xml_tree, "/product/generalAnnotation/orbitList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); for (i = 0; i < count; i++) { search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 2, 4, i + 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 1, 4, i + 1); tmp_c[4] = '\0'; sv[i].yr = (int)(str2double(tmp_c)); sv[i].jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); sv[i].sec = (tmp_d - trunc(tmp_d)) * 86400; search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/x/", tmp_c, 1, 4, i + 1); sv[i].x = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/y/", tmp_c, 1, 4, i + 1); sv[i].y = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/z/", tmp_c, 1, 4, i + 1); sv[i].z = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, i + 1); sv[i].vx = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, i + 1); sv[i].vy = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, i + 1); sv[i].vz = str2double(tmp_c); } printf("%d Lines Written for Orbit...\n", count); return (count); } int pop_prm(struct PRM *prm, tree *xml_tree, char *file_name) { char tmp_c[200]; double tmp_d; int tmp_i; double c_speed = 299792458.0; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/numberOfLooks/", tmp_c, 1, 0, 1); prm->nlooks = (int)str2double(tmp_c); prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; strasign(prm->dtype, "a", 0, 0); search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_c, 1, 0, 1); prm->fs = str2double(tmp_c); // rng_samp_rate prm->SC_identity = 10; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ search_tree(xml_tree, "/product/generalAnnotation/productInformation/radarFrequency/", tmp_c, 1, 0, 1); prm->lambda = c_speed / str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/downlinkInformationList/" "downlinkInformation/downlinkValues/txPulseLength/", tmp_c, 1, 0, 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/lookBandwidth/", tmp_c, 1, 0, 1); prm->chirp_slope = str2double(tmp_c) / tmp_d; prm->pulsedur = tmp_d; search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/re/", tmp_c, 1, 0, 1); prm->xmi = str2double(tmp_c); // I_mean search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/im/", tmp_c, 1, 0, 1); prm->xmq = str2double(tmp_c); // Q_mean search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); prm->prf = 1 / str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_c, 1, 0, 1); prm->near_range = str2double(tmp_c) * c_speed / 2; prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius search_tree(xml_tree, "/product/generalAnnotation/productInformation/pass/", tmp_c, 1, 0, 1); strasign(prm->orbdir, tmp_c, 0, 0); strasign(prm->lookdir, "R", 0, 0); strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; search_tree(xml_tree, "/product/adsHeader/startTime/", tmp_c, 2, 0, 1); prm->clock_start = str2double(tmp_c); search_tree(xml_tree, "/product/adsHeader/startTime/", tmp_c, 1, 0, 1); tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(tmp_c); strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfSamples/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c) - (int)str2double(tmp_c) % 4; prm->bytes_per_line = tmp_i * 4; prm->good_bytes = prm->bytes_per_line; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig prm->az_res = 0.0; // prm.antenna_side = -1; prm->fdd1 = 0.0; prm->fddd1 = 0.0; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfLines/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c); prm->num_lines = tmp_i - tmp_i % 4; search_tree(xml_tree, "/product/adsHeader/stopTime/", tmp_c, 2, 0, 1); prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->num_rng_bins = prm->bytes_per_line / 4; prm->chirp_ext = 0; printf("PRM set for Image File...\n"); return (1); } GMTSAR_V5.7/.svn/pristine/24/24efebe721455b82094968d50a0024903c7d5def.svn-base000444 015705 000000 00000001174 13505462014 025452 0ustar00sandwellwheel000000 000000 num_valid_az = 2800 nrows = 4096 first_line = 1 deskew = n caltone = 0.000000 st_rng_bin = 1 num_rng_bins = 6144 Flip_iq = n offset_video = n az_res = 5 nlooks = 1 chirp_ext = 500 scnd_rng_mig = n rng_spec_wgt = 1.000000 rm_rng_band = 0.000000 rm_az_band = 0.000000 rshift = 0 sub_int_r = 0.0 ashift = 0 sub_int_a = 0.0 stretch_r = 0.0 stretch_a = 0.0 a_stretch_r = 0.0 a_stretch_a = 0.0 I_mean = 128. Q_mean = 128. first_sample = 0 SC_identity = 4 equatorial_radius = 6378137.000000 polar_radius = 6356752.314100 SLC_scale = 4000000.0 lookdir = R GMTSAR_V5.7/.svn/pristine/24/2450e019a43135289269ce7dfc55a929431cc1ba.svn-base000444 015705 000000 00000025767 13505462013 025400 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # # Modification History # # Xiaohua Xu, Oct 9, 2013 # # Changed some code in Part 2 to make it work for one FBD and one FBS files. alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_ALOS_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_ALOS_SLC.csh IMG-ALPSRP022200660-H1.1__A IMG-ALPSRP028910660-H1.1__A config.alos.slc.txt" echo "" echo " Place the raw L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set SAT = `grep SAT $3 | awk '{print $3}'` set stage = `grep proc_stage $3 | awk '{print $3}'` set num_patches = `grep num_patches $3 | awk '{print $3}'` set SLC_factor = `grep SLC_factor $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = ` echo $1 | awk '{ print substr($1,5,length($1)-4)}'` set slave = ` echo $2 | awk '{ print substr($1,5,length($1)-4)}'` set master_led = ` echo $1 | awk '{ print substr($1,8,length($1)-7)}'` set slave_led = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # rm raw/*.PRM* rm raw/*.SLC rm raw/*.LED # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif # # make sure the files exits # echo $commandline if(! -f $1 ) then echo " no file "$1 exit endif if(! -f $2 ) then echo " no file "$2 exit endif # ALOS_pre_process_SLC IMG-$master LED-$master_led $commandline -rbias -68. # ALOS_pre_process_SLC IMG-$slave LED-$slave_led $commandline -rbias -68. ALOS_pre_process_SLC IMG-$master LED-$master_led $commandline ALOS_pre_process_SLC IMG-$slave LED-$slave_led $commandline # # special code to filter the SLC data in range does not seem to work # cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/IMG-$master.SLC . ln -s ../raw/IMG-$slave.SLC . ln -s ../raw/IMG-$master.LED . ln -s ../raw/IMG-$slave.LED . # if images do not match, convert the FBD image to FBS set rng_samp_rate_m = `grep rng_samp_rate IMG-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate IMG-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$slave.PRM IMG-$slave"_"FBS.PRM echo "Overwriting the old slave image" mv IMG-$slave"_"FBS.PRM IMG-$slave.PRM update_PRM IMG-$slave.PRM input_file IMG-$slave.SLC mv IMG-$slave"_"FBS.SLC IMG-$slave.SLC else if ($t == 0.5) then echo "Convert the master image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$master.PRM IMG-$master"_"FBS.PRM echo "Overwriting the old master image" mv IMG-$master"_"FBS.PRM IMG-$master.PRM update_PRM IMG-$master.PRM input_file IMG-$master.SLC mv IMG-$master"_"FBS.SLC IMG-$master.SLC else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif cp IMG-$slave.PRM IMG-$slave.PRM0 SAT_baseline IMG-$master.PRM IMG-$slave.PRM0 >> IMG-$slave.PRM xcorr IMG-$master.PRM IMG-$slave.PRM -xsearch 64 -ysearch 64 -nx 32 -ny 64 fitoffset.csh 2 2 freq_xcorr.dat 18 >> IMG-$slave.PRM resamp IMG-$master.PRM IMG-$slave.PRM IMG-$slave.PRMresamp IMG-$slave.SLCresamp 4 rm IMG-$slave.SLC mv IMG-$slave.SLCresamp IMG-$slave.SLC cp IMG-$slave.PRMresamp IMG-$slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/IMG-$master.PRM master.PRM ln -s ../raw/IMG-$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC slc2amp.csh IMG-$master.PRM 2 amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../SLC/IMG-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/IMG-$ref.LED . ln -s ../../raw/IMG-$rep.LED . ln -s ../../SLC/IMG-$ref.SLC . ln -s ../../SLC/IMG-$rep.SLC . cp ../../SLC/IMG-$ref.PRM . cp ../../SLC/IMG-$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh IMG-$ref.PRM IMG-$rep.PRM -topo topo_shift.grd filter.csh IMG-$ref.PRM IMG-$rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh IMG-$ref.PRM IMG-$rep.PRM -topo topo_ra.grd filter.csh IMG-$ref.PRM IMG-$rep.PRM $filter $dec endif else intf.csh IMG-$ref.PRM IMG-$rep.PRM filter.csh IMG-$ref.PRM IMG-$rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/.svn/pristine/24/24922f527f4b88888bb82915456a270bfa23aa39.svn-base000444 015705 000000 00000041272 13505462014 025327 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define SARDATA_HEADER_WCS \ "*********** SARDATA **********\n" \ "n_record ==> %.6s\n" \ "record_length ==> %.6s\n" \ "blank1 ==> %.24s\n" \ "n_bits_per_sample ==> %.4s\n" \ "n_samples_data_group ==> %.4s\n" \ "n_bytes_per_data_group ==> %.4s\n" \ "justification ==> %.4s\n" \ "n_channels ==> %.4s\n" \ "n_lines ==> %.8s\n" \ "n_left_border_pixels ==> %.4s\n" \ "n_data_groups ==> %.8s\n" \ "n_right_border_pixels ==> %.4s\n" \ "n_top_border_lines ==> %.4s\n" \ "bottom_border_lines ==> %.4s\n" \ "interleaving ==> %.4s\n" \ "n_phys_records ==> %.2s\n" \ "n_phy_records_multi ==> %.2s\n" \ "n_bytes_prefix_data ==> %.4s\n" \ "n_bytes_SARdata_record ==> %.8s\n" \ "n_bytes_suffix_data ==> %.4s\n" \ "blank2 ==> %.48s\n" \ "blank3 ==> %.28s\n" \ "blank4 ==> %.32s\n" \ "data_format_type_id ==> %.28s\n" \ "data_format_type_code ==> %.4s\n" \ "n_left_fill_bits_pixel ==> %.4s\n" \ "n_right_fill_bits_pixel ==> %.4s\n" \ "max_data_range_pixel ==> %.8s\n" \ "blank_filler ==> %.10s\n" #define SARDATA_HEADER_RCS \ "%6c%6c%24c%4c%4c%4c%4c%4c%8c%4c%8c%4c%4c%4c%4c%2c%2c%4c%8c%4c%48c%28c%32c%" \ "28c%4c%4c%4c%8c%10196c" #define SARDATA_HEADER_RVL(SP) \ (SP)->n_records, (SP)->record_length, (SP)->blank1, (SP)->n_bits_per_sample, (SP)->n_samples_data_group, \ (SP)->n_bytes_per_data_group, (SP)->justification, (SP)->n_channels, (SP)->n_lines, (SP)->n_left_border_pixels, \ (SP)->n_data_groups, (SP)->n_right_border_pixels, (SP)->n_top_border_lines, (SP)->bottom_border_lines, \ (SP)->interleaving, (SP)->n_phys_records, (SP)->n_phy_records_multi, (SP)->n_bytes_prefix_data, \ (SP)->n_bytes_SARdata_record, (SP)->n_bytes_suffix_data, (SP)->blank2, (SP)->blank3, (SP)->blank4, \ (SP)->data_format_type_id, (SP)->data_format_type_code, (SP)->n_left_fill_bits_pixel, (SP)->n_right_fill_bits_pixel, \ (SP)->max_data_range_pixel, (SP)->blank_filler struct sardata_header { char n_records[7]; char record_length[7]; char blank1[25]; char n_bits_per_sample[5]; char n_samples_data_group[5]; char n_bytes_per_data_group[5]; char justification[5]; char n_channels[5]; char n_lines[9]; char n_left_border_pixels[5]; char n_data_groups[9]; char n_right_border_pixels[5]; char n_top_border_lines[5]; char bottom_border_lines[5]; char interleaving[5]; char n_phys_records[3]; char n_phy_records_multi[3]; char n_bytes_prefix_data[5]; char n_bytes_SARdata_record[9]; char n_bytes_suffix_data[5]; char blank2[49]; char blank3[29]; char blank4[33]; char data_format_type_id[29]; char data_format_type_code[5]; char n_left_fill_bits_pixel[5]; char n_right_fill_bits_pixel[5]; char max_data_range_pixel[5]; char blank_filler[10197]; }; #define SARDATA_REC_WCS \ "*********** SARDATA **********\n" \ "line_no ==> %1d\n" \ "rec_index ==> %1d\n" \ "left_fill_pixels ==> %1d\n" \ "data_pixels ==> %1d\n" \ "right_fill_pixels ==> %1d\n" \ "sensor_update_flag ==> %1d\n" \ "year ==> %1d\n" \ "day_of_year ==> %1d\n" \ "msecs_of_day ==> %1d\n" \ "chan_ind ==> %1d\n" \ "chan_code ==> %1d\n" \ "trans_polar ==> %1d\n" \ "rec_polar ==> %1d\n" \ "prf ==> %1d\n" \ "spare ==> %1d\n" \ "range_flag ==> %1d\n" \ "chirp_type ==> %1d\n" \ "chirp_length ==> %1d\n" \ "chirp_const_coeff ==> %1d\n" \ "chirp_lin_coef ==> %1d\n" \ "chirp_quad ==> %1d\n" \ "spare1 ==> %1x\n" \ "spare2 ==> %1x\n" \ "nought_gain ==> %1d\n" \ "rec_gain ==> %1d\n" \ "ant_elec_angle ==> %1d\n" \ "ant_mech_angle ==> %1d\n" \ "ant_elec_squint_angle ==> %1d\n" \ "ant_mech_squint_angle ==> %1d\n" \ "slant_first_sample ==> %1d\n" \ "sample_delay ==> %1d\n" \ "spare3 ==> %1x\n" \ "pltformref ==> %1x\n" \ "ICU_onboard_time ==> %1d\n" \ "task ==> %1d\n" \ "image_format_counter ==> %1d\n" \ "sample_window_start_time ==> %1d\n" \ "pulse_repetition_interval ==> %1d\n" \ "cal_gain ==> %1d\n" \ "longspare ==> %1x\n" \ "calpulse36 ==> %1x\n" #define SARDATA_REC_RVL(SP) \ (SP)->line_no, (SP)->rec_index, (SP)->left_fill_pixels, (SP)->data_pixels, (SP)->right_fill_pixels, \ (SP)->sensor_update_flag, (SP)->year, (SP)->day_of_year, (SP)->msecs_of_day, (SP)->chan_ind, (SP)->chan_code, \ (SP)->trans_polar, (SP)->rec_polar, (SP)->prf, (SP)->spare, (SP)->range_flag, (SP)->chirp_type, (SP)->chirp_length, \ (SP)->chirp_const_coeff, (SP)->chirp_lin_coef, (SP)->chirp_quad, (SP)->spare1, (SP)->spare2, (SP)->nought_gain, \ (SP)->rec_gain, (SP)->ant_elec_angle, (SP)->ant_mech_angle, (SP)->ant_elec_squint_angle, (SP)->ant_mech_squint_angle, \ (SP)->slant_first_sample, (SP)->sample_delay, (SP)->spare3, (SP)->pltformref, (SP)->ICU_onboard_time, (SP)->task, \ (SP)->image_format_counter, (SP)->sample_window_start_time, (SP)->pulse_repetition_interval, (SP)->cal_gain, \ (SP)->longspare, (SP)->calpulse36 struct sardata_rec { int line_no; int rec_index; int left_fill_pixels; int data_pixels; int right_fill_pixels; int sensor_update_flag; int year; int day_of_year; int msecs_of_day; short chan_ind; short chan_code; short trans_polar; short rec_polar; int prf; int spare; short range_flag; short chirp_type; int chirp_length; int chirp_const_coeff; int chirp_lin_coef; int chirp_quad; char spare1[4]; char spare2[4]; int nought_gain; int rec_gain; int ant_elec_angle; int ant_mech_angle; int ant_elec_squint_angle; int ant_mech_squint_angle; int slant_first_sample; int sample_delay; char spare3[4]; char pltformref[64]; int ICU_onboard_time; short task; int image_format_counter; short sample_window_start_time; short pulse_repetition_interval; short cal_gain; char longspare[120]; char calpulse36[72]; }; /*#define SARDATA_DPAF_REC_WCS "*********** SARDATA **********\n"\ "line_no ==> %1d\n"\ "rec_index ==> %1d\n"\ "left_fill_pixels ==> %1d\n"\ "data_pixels ==> %1d\n"\ "right_fill_pixels ==> %1d\n"\ "reserved_a ==> %1x\n"\ "spare_a ==> %1x\n"\ "spare_b ==> %1x\n"\ "reserved_b ==> %1x\n"\ "spare_c ==> %1x\n"\ "platform_reference_info ==> %1x\n"\ "sensor_facil_aux_info ==> %1x\n"\ "IDHT_general_ctr ==> %1x\n"\ "packet_ctr ==> %1d\n"\ "subcommutation_ctr ==> %1d\n"\ "IDHT_gen_hdr_src_pack ==> %1x\n"\ "fixed_code ==> %1d\n"\ "OGRC_OBRC_flag ==> %1d\n"\ "ICU_onboard_time ==> %1d\n"\ "task ==> %1d\n"\ "image_format_counter ==> %1d\n"\ "sample_window_start_time ==> %1d\n"\ "pulse_repetition_interval ==> %1d\n"\ "cal_gain ==> %1d\n"\ "longspare ==> %1x\n"\ "Calpulse36 ==> %1x\n" #define SARDATA_DPAF_REC_RVL(SP)\ (SP)->line_no,\ (SP)->rec_index,\ (SP)->left_fill_pixels,\ (SP)->data_pixels,\ (SP)->right_fill_pixels,\ (SP)->reserved_a,\ (SP)->spare_a,\ (SP)->spare_b,\ (SP)->reserved_b,\ (SP)->spare_c,\ (SP)->platform_reference_info,\ (SP)->sensor_facil_aux_info,\ (SP)->IDHT_general_ctr,\ (SP)->packet_ctr,\ (SP)->subcommutation_ctr,\ (SP)->IDHT_gen_hdr_src_pack,\ (SP)->fixed_code,\ (SP)->OGRC_OBRC_flag,\ (SP)->ICU_onboard_time,\ (SP)->task,\ (SP)->image_format_counter,\ (SP)->sample_window_start_time,\ (SP)->pulse_repetition_interval,\ (SP)->cal_gain,\ (SP)->longspare,\ (SP)->calpulse36 struct sardata_dpaf_rec { int line_no; int rec_index; int left_fill_pixels; int data_pixels; int right_fill_pixels; char reserved_a[52]; char spare_a[4]; char spare_b[4]; char reserved_b[32]; char spare_c[4]; char platform_reference_info[64]; char sensor_facil_aux_info[220]; char IDHT_general_ctr[10]; int packet_ctr; int subcommutation_ctr; char IDHT_gen_hdr_src_pack[8]; int fixed_code; int OGRC_OBRC_flag; int ICU_onboard_time; short task; int image_format_counter; short sample_window_start_time; short pulse_repetition_interval; short cal_gain; char longspare[120]; char calpulse36[72]; }; */ #define SARDATA_DPAF_REC_WCS \ "*********** SARDATA **********\n" \ "line_no ==> %1d\n" \ "rec_index ==> %1d\n" \ "left_fill_pixels ==> %1d\n" \ "data_pixels ==> %1d\n" \ "right_fill_pixels ==> %1d\n" #define SARDATA_DPAF_REC_RVL(SP) \ (SP)->line_no, (SP)->rec_index, (SP)->left_fill_pixels, (SP)->data_pixels, (SP)->right_fill_pixels struct sardata_dpaf_rec { int line_no; int rec_index; int left_fill_pixels; int data_pixels; int right_fill_pixels; }; GMTSAR_V5.7/.svn/pristine/24/2463787ae68cdf12beeed413d4377a1719eeb455.svn-base000444 015705 000000 00000022676 13505462013 025634 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Matt Wei, May 2010 # based on Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv < 3) then echo "" echo "Usage: p2p_ERS.csh master_stem slave_stem configuration_file" echo "" echo "Example: p2p_ERS.csh ERS_127_2943_61103 ERS2_127_2943_65111 config.ers.txt" echo "" echo " Place the raw data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. The raw data should have 4 files " echo " - two with a suffix of .dat and two with a suffix of .ldr. " echo " Execute this command at the directory location above raw and topo. " echo " The file dem.grd is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" exit 1 endif # start # # make sure the files exist # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` if ((! $?near_range) || ($near_range == "")) then set near_range = 0 endif set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set npatch = `grep num_patches $3 | awk '{print $3}'` if ((! $?npatch) || ($npatch == "")) then set npatch = 0 endif set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # cleanup.csh raw # # preprocess the raw data # echo "" echo " PREPROCESS ERS DATA -- START" cd raw ERS_pre_process $master $near_range $earth_radius $npatch $fd set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` ERS_pre_process $slave $NEAR $RAD $npatch $fd # # check patch number, if different, use the smaller one # set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` echo "Different number of patches: $pch1 $pch2" if ($pch1 != $pch2) then if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp cd .. echo " PREPROCESS ERS DATA -- END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # focus and align SLC files # echo " " echo "ALIGN.CSH - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.raw . ln -s ../raw/$slave.raw . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . align.csh SAT $master $slave cd .. echo "ALIGN.CSH - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is a dem.grd # if ($topo_phase == 1) then echo " " echo " DEM2TOPOP_RA.CSH - START " echo " USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC slc2amp.csh $master.PRM 1 amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 11 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make interferogram # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/.svn/pristine/24/249e96c078021fe0ae4d278dffb1b764eef15ca6.svn-base000444 015705 000000 00000007640 13505462014 025763 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /***************************************************************************/ void write_ALOS_prm(FILE *prmfile, char *filename, struct PRM *prm) { fprintf(stderr, ".... writing PRM file %s\n", filename); /* set by set_ALOS_defaults */ fprintf(prmfile, "num_valid_az = %d \n", prm->num_valid_az); fprintf(prmfile, "nrows = %d \n", prm->nrows); fprintf(prmfile, "first_line = %d \n", prm->first_line); fprintf(prmfile, "deskew = %s \n", prm->deskew); fprintf(prmfile, "caltone = %lf \n", prm->caltone); fprintf(prmfile, "st_rng_bin = %d \n", prm->st_rng_bin); fprintf(prmfile, "Flip_iq = %s \n", prm->iqflip); fprintf(prmfile, "offset_video = %s \n", prm->offset_video); fprintf(prmfile, "az_res = %lf \n", prm->az_res); fprintf(prmfile, "nlooks = %d \n", prm->nlooks); fprintf(prmfile, "chirp_ext = %d \n", prm->chirp_ext); fprintf(prmfile, "scnd_rng_mig = %s \n", prm->srm); fprintf(prmfile, "rng_spec_wgt = %lf \n", prm->rhww); fprintf(prmfile, "rm_rng_band = %lf \n", prm->pctbw); fprintf(prmfile, "rm_az_band = %lf \n", prm->pctbwaz); fprintf(prmfile, "rshift = %d \n", prm->rshift); fprintf(prmfile, "ashift = %d \n", prm->ashift); fprintf(prmfile, "stretch_r = %lf \n", prm->stretch_r); fprintf(prmfile, "stretch_a = %lf \n", prm->stretch_a); fprintf(prmfile, "a_stretch_r = %lf \n", prm->a_stretch_r); fprintf(prmfile, "a_stretch_a = %lf \n", prm->a_stretch_a); fprintf(prmfile, "first_sample = %d \n", prm->first_sample); fprintf(prmfile, "SC_identity = %d \n", prm->SC_identity); fprintf(prmfile, "rng_samp_rate = %lf \n", prm->fs); /* from read_ALOS_data */ fprintf(prmfile, "input_file = %s \n", prm->input_file); fprintf(prmfile, "num_rng_bins = %d \n", prm->num_rng_bins); fprintf(prmfile, "bytes_per_line = %d \n", prm->bytes_per_line); fprintf(prmfile, "good_bytes_per_line = %d \n", prm->good_bytes); fprintf(prmfile, "PRF = %lf \n", prm->prf); fprintf(prmfile, "pulse_dur = %e \n", prm->pulsedur); fprintf(prmfile, "near_range = %lf \n", prm->near_range); fprintf(prmfile, "num_lines = %d \n", prm->num_lines); fprintf(prmfile, "num_patches = %d \n", prm->num_patches); fprintf(prmfile, "SC_clock_start = %16.10lf \n", prm->SC_clock_start); fprintf(prmfile, "SC_clock_stop = %16.10lf \n", prm->SC_clock_stop); fprintf(prmfile, "clock_start = %16.12lf \n", prm->clock_start); fprintf(prmfile, "clock_stop = %16.12lf \n", prm->clock_stop); fprintf(prmfile, "led_file = %s \n", prm->led_file); /* from read_ALOS_ldrfile */ fprintf(prmfile, "date = %.6s \n", prm->date); fprintf(prmfile, "orbdir = %.1s \n", prm->orbdir); fprintf(prmfile, "lookdir = %.1s \n", prm->lookdir); fprintf(prmfile, "radar_wavelength = %lg \n", prm->lambda); fprintf(prmfile, "chirp_slope = %lg \n", prm->chirp_slope); fprintf(prmfile, "rng_samp_rate = %lf \n", prm->fs); fprintf(prmfile, "I_mean = %lg \n", prm->xmi); fprintf(prmfile, "Q_mean = %lg \n", prm->xmq); fprintf(prmfile, "SC_vel = %lf \n", prm->vel); fprintf(prmfile, "earth_radius = %lf \n", prm->RE); fprintf(prmfile, "equatorial_radius = %lf \n", prm->ra); fprintf(prmfile, "polar_radius = %lf \n", prm->rc); fprintf(prmfile, "SC_height = %lf \n", prm->ht); fprintf(prmfile, "SC_height_start = %lf \n", prm->ht_start); fprintf(prmfile, "SC_height_end = %lf \n", prm->ht_end); fprintf(prmfile, "fd1 = %lf \n", prm->fd1); fprintf(prmfile, "fdd1 = %lf \n", prm->fdd1); fprintf(prmfile, "fddd1 = %lf \n", prm->fddd1); fclose(prmfile); } /***************************************************************************/ /* difference between variable names (in prm file) and variables in code. changed: offset_video off_vid chirp_ext nextend prm sio.h ---------------------------------- Flip_iq iqflip scnd_rng_mig srm rng_spec_wgt rhww rm_rng_band pctbw rm_az_band pctbwaz rng_samp_rate fs */ GMTSAR_V5.7/.svn/pristine/4a/4aac4d9f70cfc38b0596420c7b75507544fc17ec.svn-base000444 015705 000000 00000015167 13505462014 025701 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define SARLEADER_FDR_BINARY_WCS \ "*********** SAR FDR BINARY **********\n" \ "record_seq_no ==> %1d\n" \ "record_subtype_code1 ==> %1x\n" \ "record_type_code1 ==> %1x\n" \ "record_subtype_code2 ==> %1x\n" \ "record_subtype_code3 ==> %1x\n" \ "record_length ==> %1d\n\n" #define SARLEADER_FDR_BINARY_RVL(SP) \ (SP)->record_seq_no, (SP)->record_subtype_code1, (SP)->record_type_code1, (SP)->record_subtype_code2, \ (SP)->record_subtype_code3, (SP)->record_length struct sarleader_binary { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; #define SARLEADER_FDR_FIXSEG_RCS "%2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c" #define SARLEADER_FDR_FIXSEG_RVL(SP) \ (SP)->A_E_flag, (SP)->blank_2, (SP)->for_con_doc, (SP)->for_con_doc_rev_level, (SP)->file_des_rev_level, (SP)->softw_rel, \ (SP)->file_number, (SP)->file_name, (SP)->rec_seq_loc_type_flag, (SP)->seq_number_loc, (SP)->seq_number_field_length, \ (SP)->rec_code_loc_type_flag, (SP)->rec_code_loc, (SP)->rec_code_field_length, (SP)->rec_len_loc_type_flag, \ (SP)->rec_len_loc, (SP)->rec_len_field_length, (SP)->reserved_4, (SP)->reserved_segment struct sarleader_fdr_fixseg { char A_E_flag[2]; /* 13 */ char blank_2[2]; /* 15 */ char for_con_doc[12]; /* 17 */ char for_con_doc_rev_level[2]; /* 29 */ char file_des_rev_level[2]; /* 31 */ char softw_rel[12]; /* 33 */ char file_number[4]; /* 45 */ char file_name[16]; /* 49 */ char rec_seq_loc_type_flag[4]; /* 65 */ char seq_number_loc[8]; /* 69 */ char seq_number_field_length[4]; /* 77 */ char rec_code_loc_type_flag[4]; /* 81 */ char rec_code_loc[8]; /* 85 */ char rec_code_field_length[4]; /* 93 */ char rec_len_loc_type_flag[4]; /* 97 */ char rec_len_loc[8]; /* 101 */ char rec_len_field_length[4]; /* 109 */ char reserved_4[4]; /* 113 */ char reserved_segment[64]; /* 117 */ }; #define SARLEADER_FDR_VARSEG_RCS \ "%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%" \ "6c%6c%6c%6c%6c%6c%60c%6c%6c%288c" #define SARLEADER_FDR_VARSEG_RVL(SP) \ (SP)->n_data_set_summ_rec, (SP)->data_set_summ_rec_len, (SP)->n_map_projec_rec, (SP)->map_projec_rec_len, \ (SP)->n_plat_pos_data_rec, (SP)->plat_pos_data_rec_len, (SP)->n_att_data_rec, (SP)->att_data_rec_len, \ (SP)->n_rad_data_rec, (SP)->rad_data_rec_len, (SP)->n_rad_comp_rec, (SP)->rad_comp_rec_len, (SP)->n_data_qua_summ_rec, \ (SP)->data_qua_summ_rec_len, (SP)->n_data_hist_rec, (SP)->data_hist_rec_len, (SP)->n_range_spectra_rec, \ (SP)->range_spectra_rec_len, (SP)->n_DEM_des_rec, (SP)->DEM_des_rec_len, (SP)->n_radar_par_update_rec, \ (SP)->radar_par_update_rec_len, (SP)->n_annotation_data_rec, (SP)->annotation_data_rec_len, (SP)->n_detailed_proc_rec, \ (SP)->detailed_proc_rec_len, (SP)->n_cal_rec, (SP)->cal_rec_len, (SP)->n_GCP_rec, (SP)->GCP_rec_len, (SP)->spare_60, \ (SP)->n_facility_data_rec, (SP)->facility_data_rec_len, (SP)->blanks_288 struct sarleader_fdr_varseg { char n_data_set_summ_rec[6]; /* 181-186 I6*/ char data_set_summ_rec_len[6]; /* 187-192 I6*/ char n_map_projec_rec[6]; /* 193-198 I6*/ char map_projec_rec_len[6]; /* 199-204 I6*/ char n_plat_pos_data_rec[6]; /* 205-210 I6*/ char plat_pos_data_rec_len[6]; /* 211-216 I6*/ char n_att_data_rec[6]; /* 217-222 I6*/ char att_data_rec_len[6]; /* 223-228 I6*/ char n_rad_data_rec[6]; /* 229-234 I6*/ char rad_data_rec_len[6]; /* 235-240 I6*/ char n_rad_comp_rec[6]; /* 241-246 I6*/ char rad_comp_rec_len[6]; /* 247-252 I6*/ char n_data_qua_summ_rec[6]; /* 253-258 I6*/ char data_qua_summ_rec_len[6]; /* 259-264 I6*/ char n_data_hist_rec[6]; /* 265-270 I6*/ char data_hist_rec_len[6]; /* 271-276 I6*/ char n_range_spectra_rec[6]; /* 277-282 I6*/ char range_spectra_rec_len[6]; /* 283-288 I6*/ char n_DEM_des_rec[6]; /* 289-294 I6*/ char DEM_des_rec_len[6]; /* 295-300 I6*/ char n_radar_par_update_rec[6]; /* 301-306 I6*/ char radar_par_update_rec_len[6]; /* 307-312 I6*/ char n_annotation_data_rec[6]; /* 313-318 I6*/ char annotation_data_rec_len[6]; /* 319-324 I6*/ char n_detailed_proc_rec[6]; /* 325-330 I6*/ char detailed_proc_rec_len[6]; /* 331-336 I6*/ char n_cal_rec[6]; /* 337-342 I6*/ char cal_rec_len[6]; /* 343-348 I6*/ char n_GCP_rec[6]; /* 349-354 I6*/ char GCP_rec_len[6]; /* 355-360 I6*/ char spare_60[60]; /* 361-420 I6*/ char n_facility_data_rec[6]; /* 421-426 I6*/ char facility_data_rec_len[6]; /* 427-432 I6*/ char blanks_288[288]; /* 433-720 A80*/ }; GMTSAR_V5.7/.svn/pristine/84/845f5aecbbdfde56faadc5ea3e6f830a011b8c9c.svn-base000444 015705 000000 00000001153 13505462014 026406 0ustar00sandwellwheel000000 000000 #include "siocomplex.h" #include "image_sio.h" #include fcomplex Cmul(fcomplex x, fcomplex y) { fcomplex z; z.r = x.r * y.r - x.i * y.i; z.i = x.i * y.r + x.r * y.i; return z; } fcomplex Cexp(float theta) { fcomplex z; z.r = cos(theta); z.i = sin(theta); return z; } fcomplex Conjg(fcomplex z) { fcomplex x; x.r = z.r; x.i = -z.i; return x; } fcomplex RCmul(float a, fcomplex z) { fcomplex x; x.r = a * z.r; x.i = a * z.i; return x; } fcomplex Cadd(fcomplex x, fcomplex y) { fcomplex z; z.r = x.r + y.r; z.i = x.i + y.i; return z; } float Cabs(fcomplex z) { return hypot(z.r, z.i); } GMTSAR_V5.7/.svn/pristine/84/84dc472957da1a42add562de34951d04c996026f.svn-base000444 015705 000000 00000010225 13505462013 025461 0ustar00sandwellwheel000000 000000 13 13 1.0539922456186433e-01 1.4863673053812251e-01 1.9691167520419406e-01 2.4506053924552590e-01 2.8650479686019009e-01 3.1466396101845906e-01 3.2465246735834974e-01 3.1466396101845906e-01 2.8650479686019009e-01 2.4506053924552590e-01 1.9691167520419406e-01 1.4863673053812251e-01 1.0539922456186433e-01 1.4863673053812251e-01 2.0961138715109784e-01 2.7768997095378994e-01 3.4559075257697452e-01 4.0403652366334208e-01 4.4374731008107987e-01 4.5783336177161427e-01 4.4374731008107987e-01 4.0403652366334208e-01 3.4559075257697452e-01 2.7768997095378994e-01 2.0961138715109784e-01 1.4863673053812251e-01 1.9691167520419406e-01 2.7768997095378994e-01 3.6787944117144233e-01 4.5783336177161427e-01 5.3526142851899028e-01 5.8786967312234650e-01 6.0653065971263342e-01 5.8786967312234650e-01 5.3526142851899028e-01 4.5783336177161427e-01 3.6787944117144233e-01 2.7768997095378994e-01 1.9691167520419406e-01 2.4506053924552590e-01 3.4559075257697452e-01 4.5783336177161427e-01 5.6978282473092301e-01 6.6614361070348771e-01 7.3161562894664178e-01 7.5483960198900735e-01 7.3161562894664178e-01 6.6614361070348771e-01 5.6978282473092301e-01 4.5783336177161427e-01 3.4559075257697452e-01 2.4506053924552590e-01 2.8650479686019009e-01 4.0403652366334208e-01 5.3526142851899028e-01 6.6614361070348771e-01 7.7880078307140488e-01 8.5534532730742252e-01 8.8249690258459546e-01 8.5534532730742252e-01 7.7880078307140488e-01 6.6614361070348771e-01 5.3526142851899028e-01 4.0403652366334208e-01 2.8650479686019009e-01 3.1466396101845906e-01 4.4374731008107987e-01 5.8786967312234650e-01 7.3161562894664178e-01 8.5534532730742252e-01 9.3941306281347581e-01 9.6923323447634413e-01 9.3941306281347581e-01 8.5534532730742252e-01 7.3161562894664178e-01 5.8786967312234650e-01 4.4374731008107987e-01 3.1466396101845906e-01 3.2465246735834974e-01 4.5783336177161427e-01 6.0653065971263342e-01 7.5483960198900735e-01 8.8249690258459546e-01 9.6923323447634413e-01 1.0000000000000000e+00 9.6923323447634413e-01 8.8249690258459546e-01 7.5483960198900735e-01 6.0653065971263342e-01 4.5783336177161427e-01 3.2465246735834974e-01 3.1466396101845906e-01 4.4374731008107987e-01 5.8786967312234650e-01 7.3161562894664178e-01 8.5534532730742252e-01 9.3941306281347581e-01 9.6923323447634413e-01 9.3941306281347581e-01 8.5534532730742252e-01 7.3161562894664178e-01 5.8786967312234650e-01 4.4374731008107987e-01 3.1466396101845906e-01 2.8650479686019009e-01 4.0403652366334208e-01 5.3526142851899028e-01 6.6614361070348771e-01 7.7880078307140488e-01 8.5534532730742252e-01 8.8249690258459546e-01 8.5534532730742252e-01 7.7880078307140488e-01 6.6614361070348771e-01 5.3526142851899028e-01 4.0403652366334208e-01 2.8650479686019009e-01 2.4506053924552590e-01 3.4559075257697452e-01 4.5783336177161427e-01 5.6978282473092301e-01 6.6614361070348771e-01 7.3161562894664178e-01 7.5483960198900735e-01 7.3161562894664178e-01 6.6614361070348771e-01 5.6978282473092301e-01 4.5783336177161427e-01 3.4559075257697452e-01 2.4506053924552590e-01 1.9691167520419406e-01 2.7768997095378994e-01 3.6787944117144233e-01 4.5783336177161427e-01 5.3526142851899028e-01 5.8786967312234650e-01 6.0653065971263342e-01 5.8786967312234650e-01 5.3526142851899028e-01 4.5783336177161427e-01 3.6787944117144233e-01 2.7768997095378994e-01 1.9691167520419406e-01 1.4863673053812251e-01 2.0961138715109784e-01 2.7768997095378994e-01 3.4559075257697452e-01 4.0403652366334208e-01 4.4374731008107987e-01 4.5783336177161427e-01 4.4374731008107987e-01 4.0403652366334208e-01 3.4559075257697452e-01 2.7768997095378994e-01 2.0961138715109784e-01 1.4863673053812251e-01 1.0539922456186433e-01 1.4863673053812251e-01 1.9691167520419406e-01 2.4506053924552590e-01 2.8650479686019009e-01 3.1466396101845906e-01 3.2465246735834974e-01 3.1466396101845906e-01 2.8650479686019009e-01 2.4506053924552590e-01 1.9691167520419406e-01 1.4863673053812251e-01 1.0539922456186433e-01 GMTSAR_V5.7/.svn/pristine/84/8400c3375880f632a183caacacb633bfce50b6d1.svn-base000444 015705 000000 00000001461 13505462013 025646 0ustar00sandwellwheel000000 000000 /************************************************************************ * routine for doing complex functions in C * *************************************************************************/ #include "gmtsar.h" #include fcomplex Cmul(fcomplex x, fcomplex y) { fcomplex z; z.r = x.r * y.r - x.i * y.i; z.i = x.i * y.r + x.r * y.i; return z; } fcomplex Cexp(float theta) { fcomplex z; z.r = cos(theta); z.i = sin(theta); return z; } fcomplex Conjg(fcomplex z) { fcomplex x; x.r = z.r; x.i = -z.i; return x; } fcomplex RCmul(float a, fcomplex z) { fcomplex x; x.r = a * z.r; x.i = a * z.i; return x; } fcomplex Cadd(fcomplex x, fcomplex y) { fcomplex z; z.r = x.r + y.r; z.i = x.i + y.i; return z; } float Cabs(fcomplex z) { return hypot(z.r, z.i); } GMTSAR_V5.7/.svn/pristine/1e/1e22bed4e58a3168dcaff411939b33058ad5a9a6.svn-base000444 015705 000000 00000003133 13505462013 025740 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # D. Sandwell 1/12/07 # alias rm 'rm -f' unset noclobber if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # # # project an ASCII file from range/azimuth coordinates into lon/lat coordinates # this version only works with GMT V4.0 and higher # # Input: # trans.dat - file generated by llt_grid2rat (r a topo lon lat) # phase_ra.txt - an ASCII file of phase or anything # # Output: # phase_ll.txt - an ASCII file of phase in longitude/latitude coordinates # # check for number of arguments # if ($#argv < 3) then echo " " echo "Usage: proj_ra2ll_ascii.csh trans.dat phase.txt phase_ll.txt" echo " trans.dat - file generated by SAT_llt2rat (r a topo lon lat)" echo " phase_ra.txt - an ASCII file of phase or anything" echo " phase_ll.txt - output file in lon/lat-coordinates" echo " " exit 1 endif # # make grids of longitude and latitude versus range and azimuth unless they already exist # if (! -f raln.grd || ! -f ralt.grd ) then gmt gmtconvert $1 -o0,1,3 -bi5d -bo3f > raln gmt gmtconvert $1 -o0,1,4 -bi5d -bo3f > ralt # awk '{ if ($4 > 180.) printf("%f %f %e \n",$1,$2,$4-360.); else printf("%f %f %e \n",$1,$2,$4) }' < $1 | gmtconvert -bos3 > raln # awk '{ printf("%f %f %e \n",$1,$2,$5) }' < $1 | gmtconvert -bos3 > ralt # gmt surface raln `gmt gmtinfo $2 -I16/32` -bi3f -I8/32 -T.50 -Graln.grd $V gmt surface ralt `gmt gmtinfo $2 -I16/32` -bi3f -I8/32 -T.50 -Gralt.grd $V endif # # get the lon, lat, phase columns and grid # gmt grdtrack $2 -nl -Graln.grd -Gralt.grd -o3,4,2 > $3 # # clean # rm -f rap* llp llpb GMTSAR_V5.7/.svn/pristine/70/70aa0523ea322a9536975a2fbeb3963194f38f62.svn-base000444 015705 000000 00000000645 13505462014 025373 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_raw_csk CSRCS = make_raw_csk.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar $(HDF5_CPPFLAGS) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC $(HDF5_LDFLAGS) $(HDF5_LIBS) -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/70/70d694054cea4de5df182e84087cd1c8b2bba9bf.svn-base000444 015705 000000 00000027442 13505462014 026042 0ustar00sandwellwheel000000 000000 ***************************************************************************************************** # $Id: README.TXT 211 2015-08-07 15:49:42Z pwessel $ # INSTRUCTIONS FOR INSTALLING AND RUNNING GMTSAR Copyright (c) 2009-2017 David T. Sandwell - dsandwell@ucsd.edu Rob Mellors - rmellors@geology.sdsu.edu Xiaopeng Tong - xitong@ucsd.edu Meng Wei - mwei@ucsd.edu Paul Wessel - pwessel@hawaii.edu This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 3 of the LICENSE.TXT This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Significant Modifications: February 13, 2010 March 11, 2010 March 25, 2010 June 8, 2010 September 27, 2010 April 4, 2013 Converted to use GMT API and redone the entire install procedure. Linking with GMT means GMTSAR will use the FFTs recognized by GMT: Accelerate Framework on OS X, FFTW, KISS FFT, or Brenner Fortran-translated FFT. GMT selects the fastest FFT given the dimensions and the availability of libraries. ***************************************************************************************************** 1) Obtain GMT from SOEST and install [see "Obtaining GMT" on gmt.soest.hawaii.edu]. Make sure all the required libraries (e.g., netcdf, GDAL, PCRE) have been installed before you start the GMT build/install procedure. 2) Go to the GMTSAR WIKI and follow the instructions. http://gmt.soest.hawaii.edu/projects/gmt5sar/wiki 3) Download orbit files for ERS and ENVISAT. No need for ALOS orbit data because it is built in raw file. The file is > 1G and contains all the available orbit for ERS and ENVISAT. It takes a while to download but you only need to download it once. Put it anywhere you like; let's refer to this dir as http://topex.ucsd.edu/gmtsar/downloads 4) Obtain GMTSAR subversion. Go to the GMTSAR WIKI and follow the instructions. http://gmt.soest.hawaii.edu/projects/gmt5sar/wiki autoconf (When we install you can specify a system directory such as /usr/local, assuming you have permission). 4) Configure GMTSAR: Run the configure script. To see all options, run ./configure --help Most users will simply run ./configure --with-orbits-dir= --prefix= where was defined in step (3) and is where you want to place all the executables. For example, you might run ./configure --with-orbits-dir=/usr/local/orbits If you are a developer you may also want to add --enable-debug so you can run the programs in a visual debugger. Note: If you ever decide to move the orbits directory then you must also reconfigure GMTSAR. 5) To build all executables, type make Assuming that went well, you can install executables, scripts, and shared data by running make install or sudo make install if you are writing to a system directory that requires admin privileges. After this step you can remove your staging directory/tar-files if you like. 6) test the commands: gmt, esarp, xcorr, conv, gmtsar.csh, etc. If using C-shell you may have to type rehash first. If this does not work then make sure the is in your system $PATH or $path. ***************************************************************************************************** RUN 1) GET DATA. There is an example data set at our website: http://topex.ucsd.edu/gmtsar/downloads/ Uncompress the file and then unpack with tar. 2) ORGANIZE the DISK. The standard GMTSAR run has the following directories. raw SLC topo intf raw - contains the original data. SLC - contains the single look complex images derived from the raw data. topo - contains a digital elevation model for the area in geographic and ultimately radar coordinates. intf - contains subdirectories with the possible interferograms (only 1 for this example). In raw, original data have special name format. If you got data that have different name system, you need to change the name according to the following: For ALOS we just need the IMG- and LED-files. Here is an example. -rw-r--r-- 1 sandwell 14 382547520 Aug 28 15:29 IMG-HH-ALPSRP227730640-H1.0__A -rw-r--r-- 1 sandwell 14 12506972 Aug 28 15:28 LED-ALPSRP227730640-H1.0__A -rw-r--r-- 1 sandwell 14 12506972 Aug 28 15:28 LED-ALPSRP207600640-H1.0__A -rw-r--r-- 1 sandwell 14 747383820 Aug 28 15:28 IMG-HH-ALPSRP207600640-H1.0__A Make sure the images are all from the same orbit direction, same track, and same frame. The filename ALPSRP207600640-H1.0__A can be decomposed as: __A - ascending 0640 - frame number 20760 - orbit number To check that the data are from the same track, the difference between orbit numbers should be divisible by 671. In this case there are 7, 46-day cycles between the acquisitions. For ENVISAT we just need .baq file. Here is an example. ENV1_2_084_2943_42222.baq ENV1_2_084_2943_42723.baq The filename means: ENVISAT _ 2 _ track number _ frame number _ orbit number For ERS we just need .dat and .ldr file. Here is an example. e2_127_2907_23027.ldr e2_127_2907_23027.dat e2_127_2907_23528.ldr e2_127_2907_23528.dat The filename means: ERS2_track number_frame number_orbit number. .dat - raw data file .ldr - leader file 3) MAKE DEM Go to the following web site and construct a file dem.grd that encloses the SAR frame. http://topex.ucsd.edu/gmtsar/demgen Place the file dem.grd in the /topo directory. 4) DO EVERYTHING For ALOS: p2p_ALOS.csh IMG-HH-ALPSRP207600640-H1.0__A IMG-HH-ALPSRP227730640-H1.0__A configure.txt The file configure.txt should be edited to set a number of parameters including the starting point for t he InSAR processing. For ENVISAT: p2p_ENVI.csh ENV1_2_084_2943_42222 ENV1_2_084_2943_42723 dem.grd For ERS: p2p_ERS.csh e2_127_2907_23027 e2_127_2907_23528 dem.grd ********************************************************************************************************* RUN - STEP-BY-STEP INSTRUCTIONS Taking ALOS for example but applicable to ERS and ENVISAT. 1) PREPROCESS the raw data cd raw ls IMG* >> data.in Edit the data.in file and place the master in the first line. Also one can set the -radius and -near_range on the first line to have this frame match other frames along the same track. When this command is done you will have PRM and raw files for every scene in the list data.in, all in the same format and geometry. Execute the command. pre_proc_batch.csh ALOS data.in 2) ALIGN the SLC images. Link the raw data into the SLC directory. cd SLC cp ../raw/*.PRM . ln -s ../raw/*.raw . ln -s ../raw/LED* . Align the images align.csh ALOS IMG-HH-ALPSRP207600640-H1.0__A IMG-HH-ALPSRP227730640-H1.0__A This will keep your computer busy for a while. The first image is called the master and the second is a slave. One can align a slave to the master and then use that slave as a surrogate master. This is useful for alignment of a large stack of data having a large spread in the baseline versus time plot. When this is done you will have 2 output files for each scene, a PRM-file and a Single Look Complex (SLC-file). The PRM-files are ascii text files containing the parameters needed for InSAR processing. master IMG-HH-ALPSRP207600640-H1.0__A.PRM IMG-HH-ALPSRP207600640-H1.0__A.SLC slave IMG-HH-ALPSRP227730640-H1.0__A.PRM IMG-HH-ALPSRP227730640-H1.0__A.SLC (Look inside the script align.csh to see what it does.) 3) MAKE the topo_ra.grd cd topo cp ../SLC/IMG-HH-ALPSRP207600640-H1.0__A.PRM master.PRM ln -s ../raw/LED-ALPSRP207600640-H1.0__A . Next you will need a file dem.grd. Thus can be created at: http://topex.ucsd.edu/gmtsar/demgen Once you have the dem.grd in lon/lat coordinates you can convert it to radar coordinates using the following command. dem2topo_ra.csh master.PRM dem.grd This creates a file called topo_ra.grd. The script also creates postscript images of the dem.ps and topo_ra.ps that can be viewed. The script also creates a file trans.dat that has the complete mapping from lon,lat,topo to range,azimuth. This same file will be used later for geocoding, (i.e., converting the range, azimuth grids back into lon, lat space). 4) INTERFEROGRAM cd intf mkdir 20760_22773 Note these are the orbit numbers of the reference and repeat images. One could also use dates for the directory name. cd 20760_22773 ln -s ../../raw/LED-ALPSRP207600640-H1.0__A . ln -s ../../raw/LED-ALPSRP227730640-H1.0__A . cp ../../SLC/IMG-HH-ALPSRP207600640-H1.0__A.PRM . cp ../../SLC/IMG-HH-ALPSRP227730640-H1.0__A.PRM . ln -s ../../SLC/IMG-HH-ALPSRP207600640-H1.0__A.SLC . ln -s ../../SLC/IMG-HH-ALPSRP227730640-H1.0__A.SLC . ln -s ../../topo/topo_ra.grd . All these files are needed to be linked or copied to make the interferogram. Of course this could all be done with a script. Now make the interferogram. While it is running look inside the script intf.csh to see the grdmath. Also, if you have any kind of error, delete everything and start over. intf.csh IMG-HH-ALPSRP207600640-H1.0__A.PRM IMG-HH-ALPSRP227730640-H1.0__A.PRM -topo topo_ra.grd The output will be three grd and postscript files. display_amp.grd, display_amp.ps - amplitude of interferogram phase.grd, phase.ps - phase of interferogram corr.grd, corr.ps - correlation of interferogram The phase measures the displacement of the repeat images relative to the reference images. The "reference and repeat" is a separate definition from the "master and slave" (refer to the document). Note that the phase is relative measurement so it's not important whether the pixel values are negative or positive. Phase increase means that the ground is moving away from the radar (range increasing); phase decrease means that the ground is moving toward the radar (range decreasing). 5) FILTER INTERFEROGRAM filter.csh IMG-HH-ALPSRP207600640-H1.0__A.PRM IMG-HH-ALPSRP227730640-H1.0__A.PRM gauss_alos_200m 2 The gaussian filter and decimation for the amplitude and phase images are the same. filter is the name of the filter. decimation control the size of the amplitude and phase images. It is either 1 or 2. Set the decimation to be 1 if you want higher resolution images. Set the decimation to be 2 if you want images with smaller file size. The output will be masked and filtered phase as well as phase gradients (xphase.grd and yphase.grd). 6) UNWRAP PHASE cd intf/20760_22773 shaphu.csh .10 7) GEOCODE cd intf/20760_22773 ln -s ../../topo/trans.dat . geocode.csh .10 This command will make postscript and KML images of the phase, correlation, and display amplitude. The argument 0.15 is used to mask the phase when the coherence is less than 0.15. Use your GMT skills to improve on these maps. One can combine the phase (color) and amplitude (shading) in gmt grdimage or combine the phase (color) and gmt grdgradient dem.grd (shading) to make interesting plots. 8) SHIFT THE TOPOPHASE [OPTIONAL] The topo_ra.grd may not be perfectly aligned with the master SLC. This can be corrected by shifting the topo_ra by 1 or 2 pixels, usually in the range direction. cd SLC slc2amp.csh IMG-HH-ALPSRP207600640-H1.0__A.PRM amp_master.grd cd ../topo ln -s ../SLC/amp_master.grd . offset_topo amp_master.grd topo_ra.grd 0 0 5 topo_shift.grd The last line of the output from this program shows the shift needed to maximize the cross correlation between the amplitude of the master image and the range gradient of the topo_ra.grd. The output file is the topography shifted by an integer number of pixels. Now go back to step 4) and use the topo_ra_shift.grd instead of the topo_ra.grd to remake the interferogram. GMTSAR_V5.7/.svn/pristine/77/77911683254a77e640d2673a202d741bb3286923.svn-base000444 015705 000000 00000045371 13505462014 025031 0ustar00sandwellwheel000000 000000 /* * $Id: epr_msph.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" /** * Reads the full main product header (MPH) of the ENVISAT product file * by the given product identifier. * * @param product_id the product identifier, must not be NULL * @return a record representing the MPH of the specified product file * or NULL if an error occured. */ EPR_SRecord* epr_read_mph(EPR_SProductId* product_id) { EPR_SRecord* record = NULL; char* code_block; int numread; epr_clear_err(); code_block = epr_create_string(EPR_MPH_SIZE); if (code_block == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_mph: out of memory"); return NULL; } rewind(product_id->istream); numread = fread(code_block, 1, EPR_MPH_SIZE, product_id->istream); if (numread != EPR_MPH_SIZE) { epr_set_err(e_err_file_read_error, "epr_read_mph: wrong reading MPH from product data file"); return NULL; } record = epr_parse_header("mph", code_block); if (record == NULL) { epr_set_err(e_err_invalid_record, "epr_read_mph: can not recognize the correct MPH from product data file"); } else { epr_add_ptr_array_elem(product_id->record_info_cache, record->info); } epr_free_string(code_block); return record; } /** * Reads the full specific product header (SPH) of the ENVISAT product file * by the given product identifier. * * @param product_id the product identifier, must not be NULL * @return a record representing the MPH of the specified product file * or NULL if an error occured. */ EPR_SRecord* epr_read_sph(EPR_SProductId* product_id) { EPR_SRecord* sph_record = NULL; const EPR_SField* field; char* code_block; int numread; uint sph_length = 0; uint sph_without_dsd_length = 0; uint dsd_number = 0; epr_clear_err(); if (product_id->mph_record == NULL) { product_id->mph_record = epr_read_mph(product_id); if (product_id->mph_record == NULL) { epr_set_err(e_err_file_read_error, "epr_read_sph: wrong MPH"); return NULL; } } field = epr_get_field(product_id->mph_record, "SPH_SIZE"); sph_length = ((uint*) field->elems)[0]; if (sph_length == 0) { epr_set_err(e_err_invalid_value, "epr_read_sph: wrong MPH: SPH_SIZE must be > 0"); return NULL; } field = epr_get_field(product_id->mph_record, "NUM_DSD"); dsd_number = ((uint*) field->elems)[0]; if (dsd_number == 0) { epr_set_err(e_err_invalid_value, "epr_read_sph: wrong MPH: NUM_DSD must be > 0"); return NULL; } epr_api.epr_head_size = sph_length + EPR_MPH_SIZE; if (fseek(product_id->istream, EPR_MPH_SIZE, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_read_sph: file seek failed"); return NULL; } sph_without_dsd_length = sph_length - dsd_number * EPR_DSD_SIZE; code_block = epr_create_string(sph_without_dsd_length); numread = fread(code_block, 1, sph_without_dsd_length, product_id->istream); if ((uint)numread != sph_without_dsd_length) { epr_set_err(e_err_file_read_error, "epr_read_sph: wrong reading SPH from product data file"); return NULL; } sph_record = epr_parse_header("sph", code_block); if (sph_record == NULL) { epr_set_err(e_err_invalid_record, "epr_read_sph: can not recognize the correct SPH from product data file"); } else { epr_add_ptr_array_elem(product_id->record_info_cache, sph_record->info); } epr_free_string(code_block); return sph_record; } void epr_store_header(const char* header_name, const char* ascii_source) { FILE* os; char fname[1024]; sprintf(fname, "%s.txt", header_name); os=fopen(fname, "w"); fprintf(os,"%s", ascii_source); fclose(os); } /** * Parses the header ASCII information. * * @param header_name name of the header ascii information; * @param ascii_source the header ascii information was read; * @param record the identifier of header ascii information. */ EPR_SRecord* epr_parse_header(const char* header_name, const char* ascii_source) { EPR_SRecordInfo* record_info; EPR_SPtrArray* field_infos = NULL; EPR_SFieldInfo* field_info; EPR_SPtrArray* header_values = NULL; EPR_SRecord* record = NULL; EPR_EDataTypeId tp; char * code_block; char seps[] = EPR_HEADER_SEPARATOR_ARRAY; char * token_name; char * token_value; char * token_unit; char * h_name; int pos = 0; int pos_ascii = 0; uint num_bytes = 0; uint num_elems = 0; epr_clear_err(); /* uncomment for debugging purpose */ /* epr_store_header(header_name, ascii_source); */ header_values = epr_create_ptr_array(16); field_infos = epr_create_ptr_array(16); h_name = epr_clone_string(header_name); while ((code_block = epr_str_tok(ascii_source, "\n", &pos_ascii)) != NULL) { /*if EMPTY code_block*/ if ((strlen(code_block) > 0) && (code_block[0] == ' ')) { /* epr_log(e_log_info, "code_block is empty"); */ if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } continue; } /*if '=' separator*/ pos = 0; token_name = epr_str_tok(code_block, seps, &pos); if (pos == 1) { epr_set_err(e_err_invalid_keyword_name, "epr_parse_header: invalid ascii header: keyword is empty"); epr_free_string(token_name); if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } continue; } if (pos == (int)strlen(code_block) + 1) { epr_set_err(e_err_invalid_keyword_name, "epr_parse_header: invalid ascii header: keyword not found"); epr_free_string(token_name); if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } continue; } /*if STRING value*/ if (code_block[pos] == '\"') { pos ++; /* Note that strings always are considered as one single element, so we get the total number of characters from tot_size. Addidionally we reserve an extra character for the trailing zero (terminator), */ token_value = epr_strip_string_r(epr_str_tok(code_block, "\"", &pos)); token_unit = NULL; tp = e_tid_string; num_bytes = (uint)strlen(token_value); num_elems = 1; epr_add_ptr_array_elem(header_values, token_value); } else { token_value = epr_str_tok(code_block, seps, &pos); if (token_value == NULL) { epr_set_err(e_err_invalid_value, "epr_parse_header: invalid ascii header: value not found"); token_value = epr_clone_string(""); token_unit = NULL; tp = e_tid_uchar; num_bytes = 0; num_elems = 1; epr_add_ptr_array_elem(header_values, token_value); } else { /*if FLOAT-DOUBLE value*/ if (strchr(token_value, '.') != NULL || strchr(token_value, 'e') != NULL || strchr(token_value, 'E') != NULL) { epr_parse_double_token(header_values, token_value, &num_elems, &num_bytes, &tp); token_unit = epr_str_tok(code_block, seps, &pos); epr_free_string(token_value); token_value = NULL; /*if INTEGER_LONG value*/ } else if ((strlen(token_value) > 1)) { epr_parse_int_token(header_values, token_value, &num_elems, &num_bytes, &tp); epr_free_string(token_value); token_value = NULL; token_unit = epr_str_tok(code_block, seps, &pos); } else { /*if CHAR value*/ if (strlen(token_value) > 1) { epr_set_err(e_err_invalid_value, "epr_parse_header: invalid ascii header: illegal value"); token_value = epr_clone_string(""); token_unit = NULL; tp = e_tid_uchar; num_bytes = 0; num_elems = 1; epr_add_ptr_array_elem(header_values, token_value); epr_free_string(token_name); if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } continue; } else { token_unit = NULL; tp = e_tid_uchar; num_bytes = (uint)strlen(token_value); num_elems = 1; epr_add_ptr_array_elem(header_values, token_value); } } } } field_info = epr_create_field_info(tp, h_name, token_name, num_elems, num_bytes, 1, token_unit); epr_add_ptr_array_elem(field_infos, field_info); epr_free_string(token_name); epr_free_string(token_unit); epr_free_string(code_block); } if (field_infos->length > 0) { record_info = epr_create_record_info(h_name, field_infos); record = epr_create_record_from_info(record_info); epr_set_header_field_values(record, header_values); } epr_free_char_ptr_array(header_values); epr_free_string(h_name); return record; } void epr_parse_string_token(EPR_SPtrArray* header_values, char* token_value, uint* num_elems, uint* num_bytes, EPR_EDataTypeId* tp) { char exceptions[] = EPR_HEADER_EXCEPTIONS_ARRAY; char * token_value_o; char * tmp; uint pos_value = 0; int cyc = 0; pos_value = 0; *num_elems = 0; while ((tmp = epr_str_tok_tok(token_value + 1, "+-", exceptions, &pos_value)) != NULL) { cyc ++; token_value_o = epr_create_string(strlen(tmp) + 1); if (strlen(tmp) == strlen(token_value) - 1) { token_value_o[0] = token_value[0]; } else if (pos_value < (uint)strlen(token_value) - 1) { token_value_o[0] = token_value[pos_value - strlen(tmp) - 1]; } else { token_value_o[0] = token_value[pos_value - strlen(tmp)]; } strcat(token_value_o, tmp); epr_add_ptr_array_elem(header_values, token_value_o); epr_free_string(tmp); } *num_bytes = sizeof(double); *tp = e_tid_double; *num_elems = cyc; } void epr_parse_double_token(EPR_SPtrArray* header_values, char* token_value, uint* num_elems, uint* num_bytes, EPR_EDataTypeId* tp) { char exceptions[] = EPR_HEADER_EXCEPTIONS_ARRAY; char * token_value_o; char * tmp; uint pos_value = 0; int cyc = 0; pos_value = 0; *num_elems = 0; while ((tmp = epr_str_tok_tok(token_value + 1, "+-", exceptions, &pos_value)) != NULL) { cyc ++; token_value_o = epr_create_string(strlen(tmp) + 1); if (strlen(tmp) == strlen(token_value) - 1) { token_value_o[0] = token_value[0]; } else if (pos_value < (uint)strlen(token_value) - 1) { token_value_o[0] = token_value[pos_value - strlen(tmp) - 1]; } else { token_value_o[0] = token_value[pos_value - strlen(tmp)]; } strcat(token_value_o, tmp); epr_add_ptr_array_elem(header_values, token_value_o); epr_free_string(tmp); } *num_bytes = sizeof(double); *tp = e_tid_double; *num_elems = cyc; } void epr_parse_int_token(EPR_SPtrArray* header_values, char* token_value, uint* num_elems, uint* num_bytes, EPR_EDataTypeId* tp) { char * token_value_o; char * tmp; char * tmp_v; char * stopstring; int pos_value = 0; uint dlina; uint i; char value_buffer[32]; int lmp; uint ulmp; int flag_int = 0; int flag_negative = 0; int cyc = 0; pos_value = 0; *num_elems = 0; flag_int = 0; flag_negative = 0; if (strchr(token_value, '-') != NULL) { flag_int = 1; *num_bytes = sizeof(int); *tp = e_tid_int; } else { *num_bytes = sizeof(uint); *tp = e_tid_uint; } while ((tmp = epr_str_tok(token_value + 1, "+-", &pos_value)) != NULL) { if (epr_if_no_letters(tmp) == 0) { epr_set_err(e_err_invalid_value, "epr_parse_header: invalid ascii header: illegal value"); cyc ++; tmp = epr_clone_string("-999999"); *num_bytes = sizeof(int); *tp = e_tid_int; epr_add_ptr_array_elem(header_values, tmp); } else { cyc ++; token_value_o = epr_create_string(strlen(tmp) + 1); if (strlen(tmp) == strlen(token_value) - 1) { token_value_o[0] = token_value[0]; } else if (pos_value < (int)strlen(token_value) - 1) { token_value_o[0] = token_value[pos_value - strlen(tmp) - 1]; } else if (strlen(tmp) == 1) { if (cyc == 1) token_value_o[0] = token_value[pos_value]; else token_value_o[0] = token_value[pos_value - 1]; } else { token_value_o[0] = token_value[pos_value - strlen(tmp)]; } strcat(token_value_o, tmp); dlina = (uint)strlen(token_value_o); tmp_v = epr_create_string(dlina); /*if int*/ if (flag_int == 1) { lmp = strtol(token_value_o, &stopstring, 10); if (lmp != 0) { tmp_v[0] = token_value_o[0]; for (i = 1; i < dlina; i ++) if (token_value_o[i] != '0') break; if (token_value_o[0] == '+') strncpy(tmp_v + 0, token_value_o + i, dlina - i); if (token_value_o[0] == '-') strncpy(tmp_v + 1, token_value_o + i, dlina - i); sprintf(value_buffer, "%d", lmp); /*if int value too large*/ if (strcmp(tmp_v, value_buffer) != 0) epr_log(e_log_warning, "product header: int integer value out of range"); } } else if (flag_int == 0) { ulmp = strtoul(token_value_o, &stopstring, 10); if (ulmp != 0UL) { tmp_v[0] = token_value_o[0]; for (i = 1; i < dlina; i ++) if (token_value_o[i] != '0') break; strncpy(tmp_v, token_value_o + i, dlina - i); sprintf(value_buffer, "%u", ulmp); /*if uint value too large*/ if (strcmp(tmp_v, value_buffer) != 0) epr_log(e_log_warning, "product header: unsigned int integer value out of range"); } } epr_free_string(tmp_v); epr_add_ptr_array_elem(header_values, token_value_o); epr_free_string(tmp); } } *num_elems = cyc; } /** * Fills the record for the header ASCII information. * * @param record to fill; * @param header_values values from the given product file; * @param record beeng filling. */ void epr_set_header_field_values(EPR_SRecord* record, EPR_SPtrArray* header_values) { EPR_SFieldInfo* field_info; EPR_SField* field; uint ptr_index = 0; uint field_index; uint field_info_index; char * tmp; char * stopstring; assert(header_values != NULL); for (field_index = 0; field_index < record->num_fields; field_index++) { field = record->fields[field_index]; field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(record->info->field_infos, field_index); for (field_info_index = 0; field_info_index < field->info->num_elems; field_info_index++) { tmp = (char*)epr_get_ptr_array_elem_at(header_values, ptr_index); switch (field_info->data_type_id) { case e_tid_uchar: *(((uchar*)field->elems) + field_info_index) = (uchar) tmp[field_info_index]; break; case e_tid_int: *(((int*)field->elems) + field_info_index) = strtol(tmp, &stopstring, 10); break; case e_tid_uint: *(((uint*)field->elems) + field_info_index) = strtoul(tmp, &stopstring, 10); break; case e_tid_string:; /*epr_assign_string(&(char*)field->elems, tmp);*/ strncpy((char*)field->elems, tmp, field->info->tot_size); break; case e_tid_double: *(((double*)field->elems) + field_info_index) = strtod(tmp, &stopstring); break; default: epr_set_err(e_err_invalid_value, "epr_set_header_field_values: internal error: illegal value type"); } ptr_index ++; } } } uint epr_compare_param(EPR_SProductId* product_id) { EPR_SDSD* dsd; uint of; epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_invalid_product_id, "epr_compare_param: invalid product identifier"); return 0UL; } of = epr_api.epr_head_size; dsd = (EPR_SDSD*)epr_get_ptr_array_elem_at(product_id->dsd_array, 0); if (dsd->ds_offset == epr_api.epr_head_size) return of; return 0UL; } GMTSAR_V5.7/.svn/pristine/83/83356ef9678aaed6c6158ab91cfcc534ffca28a5.svn-base000444 015705 000000 00000007157 13505462013 026064 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # # Xiaohua(Eric) XU, July 7, 2016 # # Script for merging 3 subswaths TOPS interferograms and then unwrap and geocode for a stack of interferograms. # # if ($#argv != 2) then echo "" echo "Usage: merge_batch.csh inputfile config_file" echo "" echo "Note: Inputfiles should be as following:" echo "" echo " IF1_Swath1_Path:master.PRM:repeat.PRM,IF1_Swath2_Path:master.PRM:repeat.PRM,IF1_Swath3_Path:master.PRM:repeat.PRM" echo " IF2_Swath1_Path:master.PRM:repeat.PRM,IF2_Swath2_Path:master.PRM:repeat.PRM,IF1_Swath3_Path:master.PRM:repeat.PRM" echo " (Use the repeat PRM which contains the shift information.)" echo " e.g. ../F1/intf_all/2015092_2015128/:S1A20150403_ALL_F1.PRM:S1A20150509_ALL_F1.PRM,../F2/intf_all/2015092_2015128/:S1A20150403_ALL_F2.PRM:S1A20150509_ALL_F2.PRM,../F3/intf_all/2015092_2015128/:S1A20150403_ALL_F3.PRM:S1A20150509_ALL_F3.PRM" echo "" echo " Make sure under each path, the processed phasefilt.grd, corr.grd and mask.grd exist." echo " Also make sure the dem.grd is linked. " echo " If trans.dat exits, recomputation of projection matrix will not proceed." echo " The master image of firet line should be the super_master." echo "" echo " config_file is the same one used for processing." echo "" echo "Example: merge_batch.csh filelist batch.config" echo "" exit 1 endif if (! -f dem.grd) then echo "dem.grd is required ..." exit 1 endif set input_file = $1 awk 'NR==1{print $0}' $input_file | awk -F, '{for (i=1;i<=NF;i++) print "../"$i}' | awk -F: '{print $1$2}'> tmpm.filelist set now_dir = `pwd` foreach line (`awk '{print $0}' $input_file`) set dir_name = `echo $line | awk -F, '{print $1}' | awk -F: '{print $1}' | awk -F"/" '{print $(NF-1)}'` mkdir $dir_name cd $dir_name echo $line | awk -F, '{for (i=1;i<=NF;i++) print "../"$i}' > tmp.filelist paste ../tmpm.filelist tmp.filelist | awk '{print $1","$2}' > tmp rm tmp.filelist foreach f_name (`awk '{print $0}' < tmp`) set mm = `echo $f_name | awk -F, '{print $1}'` set pth = `echo $f_name | awk -F, '{print $2}' | awk -F: '{print $1}'` set f1 = `echo $f_name | awk -F, '{print $2}' | awk -F: '{print $2}'` set f2 = `echo $f_name | awk -F, '{print $2}' | awk -F: '{print $3}'` cp $mm ./supermaster.PRM set rshift = `grep rshift $pth$f1 | tail -1 | awk '{print $3}'` update_PRM supermaster.PRM rshift $rshift set fs1 = `grep first_sample supermaster.PRM | awk '{print $3}'` set fs2 = `grep first_sample $pth$f1 | awk '{print $3}'` if ($fs2 > $fs1) then update_PRM supermaster.PRM first_sample $fs2 endif cp supermaster.PRM $pth echo $pth":supermaster.PRM:"$f2 >> tmp.filelist end if (-f ../trans.dat) ln -s ../trans.dat . if (-f ../raln.grd) ln -s ../raln.grd . if (-f ../ralt.grd) ln -s ../ralt.grd . if (-f ../landmask_ra.grd ) ln -s ../landmask_ra.grd . ln -s ../dem.grd . ln -s ../$2 . rm tmp merge_unwrap_geocode_tops.csh tmp.filelist $2 if (! -f ../trans.dat && -f trans.dat) then mv trans.dat ../ ln -s ../trans.dat . endif if (! -f ../landmask_ra.grd && -f landmask_ra.grd ) then mv landmask_ra.grd ../ ln -s ../landmask_ra.grd . endif if (! -f ../raln.grd && -f raln.grd) then mv raln.grd ../ ln -s ../raln.grd . endif if (! -f ../ralt.grd && -f raln.grd) then mv ralt.grd ../ ln -s ../ralt.grd . endif cd $now_dir end GMTSAR_V5.7/.svn/pristine/83/8358f4d8e328d305623f6d5871ea88f858ff0e55.svn-base000444 015705 000000 00000034031 13505462013 025441 0ustar00sandwellwheel000000 000000 /* $Id$ */ /**************************************************************************** * Program to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/04/09 - update the range sampling rate from new PRM file to solve * * confict of rng_samp_rate between LED file and PRM file in FBD mode. * * 04/28/10 - modified to work with envisat - M.Wei * ****************************************************************************/ #include "gmtsar.h" #include "llt2xyz.h" #include "orbit.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 2 char *USAGE = " \n Usage: " "SAT_llt2rat master.PRM prec [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " precise - (0) standard back geocoding, (1) - " "polynomial refinenent (slower) \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - range, azimuth, lon, lat, elevation [ASCII " "default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: SAT_llt2rat master.PRM 0 < topo.llt > topo.ratll \n"; int npad = 8000; void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void set_prm_defaults(struct PRM *); void hermite_c(double *, double *, double *, int, int, double, double *, int *); void set_prm_defaults(struct PRM *); void interpolate_SAT_orbit_slow(struct SAT_ORB *orb, double time, double *, double *, double *, int *); void polyfit(double *, double *, double *, int *, int *); int main(int argc, char **argv) { FILE *fprm1 = NULL; int otype; double rln, rlt, rht, dr, t1, t11, t2, tm; double ts, rng0; double xp[3]; double xt[3]; double rp[3]; double dd[5]; /* dummy for output double precision */ float ds[5]; /* dummy for output single precision */ double r0, rf, a0, af; double fll, rdd, daa, drr, dopc; double dt, dtt, xs, ys, zs; double time[20], rng[20], d[3]; /* arrays used for polynomial refinement of min range */ int ir, k, ntt = 10, nc = 3; /* size of arrays used for polynomial refinement */ int j, nrec, precise = 0; int goldop(); int stai, endi, midi; double **orb_pos = NULL; struct PRM prm; struct SAT_ORB *orb = NULL; char name[128], value[128]; double rsr; FILE *ldrfile = NULL; int calorb_alos(struct SAT_ORB *, double **orb_pos, double ts, double t1, int nrec); /* Make sure usage is correct and files can be opened */ if (argc < 3 || argc > 4) { fprintf(stderr, "%s\n", USAGE); exit(-1); } precise = atoi(argv[2]); /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 4) { if (!strcmp(argv[3], "-bos")) otype = 2; else if (!strcmp(argv[3], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_prm_defaults(&prm); get_sio_struct(fprm1, &prm); fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); read_orb(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ /* if this is S1A which has a low PRF sample 2 times more often */ ts = 2. / prm.prf; if (prm.prf < 600.) { ts = 2. / (2. * prm.prf); npad = 20000; } nrec = (int)((t2 - t1) / ts); /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* read the llt points and convert to xyz. */ while (scanf(" %lf %lf %lf ", &rln, &rlt, &rht) == 3) { rp[0] = rlt; rp[1] = rln; rp[2] = rht; plh2xyz(rp, xp, prm.ra, fll); if (rp[1] > 180.) rp[1] = rp[1] - 360.; xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ rp[2] = sqrt(xp[0] * xp[0] + xp[1] * xp[1] + xp[2] * xp[2]) - prm.RE; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng0, &tm); if (precise == 1) { /* refine this minimum range and azimuth with a polynomial fit */ dt = 1. / ntt; /* make the polynomial 1 second long */ for (k = 0; k < ntt; k++) { time[k] = dt * (k - ntt / 2 + .5); t11 = tm + time[k]; interpolate_SAT_orbit_slow(orb, t11, &xs, &ys, &zs, &ir); rng[k] = sqrt((xp[0] - xs) * (xp[0] - xs) + (xp[1] - ys) * (xp[1] - ys) + (xp[2] - zs) * (xp[2] - zs)) - rng0; } /* fit a second order polynomial to the range versus time function and * update the tm and rng0 */ polyfit(time, rng, d, &ntt, &nc); dtt = -d[1] / (2. * d[2]); tm = tm + dtt; interpolate_SAT_orbit_slow(orb, tm, &xs, &ys, &zs, &ir); rng0 = sqrt((xp[0] - xs) * (xp[0] - xs) + (xp[1] - ys) * (xp[1] - ys) + (xp[2] - zs) * (xp[2] - zs)); } /* compute the range and azimuth in pixel space */ xt[0] = rng0; xt[1] = tm; xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a); /* For Envisat correct for biases based on Pinon reflector analysis */ if (prm.SC_identity == 4) { xt[0] = xt[0] + 8.4; xt[1] = xt[1] + 4; } /* compute the azimuth and range correction if the Doppler is not zero */ if (prm.fd1 != 0.) { dopc = prm.fd1 + prm.fdd1 * (prm.near_range + dr * prm.num_rng_bins / 2.); rdd = (prm.vel * prm.vel) / rng0; daa = -0.5 * (prm.lambda * dopc) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } if ((xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) && (otype > 1)) continue; if (otype == 1) { fprintf(stdout, "%.9f %.9f %.9f %.9f %.9f \n", xt[0], xt[1], rp[2], rp[1], rp[0]); } else if (otype == 2) { ds[0] = (float)xt[0]; ds[1] = (float)xt[1]; ds[2] = (float)rp[2]; ds[3] = (float)rp[1]; ds[4] = (float)rp[0]; fwrite(ds, sizeof(float), 5, stdout); } else if (otype == 3) { dd[0] = xt[0]; dd[1] = xt[1]; dd[2] = rp[2]; dd[3] = rp[1]; dd[4] = rp[0]; fwrite(dd, sizeof(double), 5, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL && (x2 != x1)) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct SAT_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; // int npad = 8000; /* number of buffer points to add before and after // the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/.svn/pristine/41/41a40275da06babd69ebc178652f27fb7e01fe8b.svn-base000444 015705 000000 00000002552 13505462014 025742 0ustar00sandwellwheel000000 000000 /* program to transform CCRS format to DPAF format of ERS data method: CCRS has 12060 bytes per line. DPAF has 11644. Read 12060 bytes from CCRS file and print 11644 bytes to new file */ #include "../include/soi.h" #include main(argc, argv) int argc; char *argv[]; { char *ifile, *ofile; /* input file and output file*/ FILE *fopen(), *fpi, *fpo; unsigned char *indata; int ccrs_length = 12060, dpaf_length = 11644; int n; if (argc < 3) { fprintf(stderr, "Usage: %s ccrs_raw out_file \n", argv[0]); exit(-1); } if ((fpi = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "Can't open file %s \n", argv[1]); exit(-1); } if ((n = fseek(fpi, ccrs_length, 0)) != 0) { perror(argv[0]); exit(-1); } if ((fpo = fopen(argv[2], "w")) == NULL) { fprintf(stderr, "Can't open output file %s \n", argv[2]); exit(-1); } /* allocate memory */ if ((indata = (unsigned char *)malloc(ccrs_length * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } /* read data */ while (n = (fread((void *)indata, sizeof(unsigned char), ccrs_length, fpi)) == ccrs_length) { memcpy(indata + 210, indata + 200, 8); if (n = (fwrite((void *)indata, sizeof(unsigned char), dpaf_length, fpo)) != dpaf_length) { fprintf(stderr, "Problem writing data \n"); } } fclose(fpi); fclose(fpo); } GMTSAR_V5.7/.svn/pristine/41/41162d9752750f0e431b0621db7730c370930acc.svn-base000444 015705 000000 00000002364 13505462013 025201 0ustar00sandwellwheel000000 000000 # # $Id$ # # - Check if the prototype for a function exists. # CHECK_PROTOTYPE_EXISTS (FUNCTION HEADER VARIABLE) # # FUNCTION - the name of the function you are looking for # HEADER - the header(s) where the prototype should be declared # VARIABLE - variable to store the result # # The following variables may be set before calling this macro to # modify the way the check is run: # # CMAKE_REQUIRED_FLAGS = string of compile command line flags # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) # CMAKE_REQUIRED_INCLUDES = list of include directories # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. INCLUDE(CheckCSourceCompiles) MACRO (CHECK_PROTOTYPE_EXISTS _SYMBOL _HEADER _RESULT) SET(_INCLUDE_FILES) FOREACH (it ${_HEADER}) SET(_INCLUDE_FILES "${_INCLUDE_FILES}#include <${it}>\n") ENDFOREACH (it) SET(_CHECK_PROTO_EXISTS_SOURCE_CODE " ${_INCLUDE_FILES} int main() { #ifndef ${_SYMBOL} int i = sizeof(&${_SYMBOL}); #endif return 0; } ") CHECK_C_SOURCE_COMPILES("${_CHECK_PROTO_EXISTS_SOURCE_CODE}" ${_RESULT}) ENDMACRO (CHECK_PROTOTYPE_EXISTS _SYMBOL _HEADER _RESULT) GMTSAR_V5.7/.svn/pristine/41/4158cdb81499a090412c792e35d0af8d41415ecf.svn-base000444 015705 000000 00000004401 13505462014 025443 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /* this swaps bytes */ #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) /*------------------------------------------------------------------*/ /* need to swap bytes for all */ /* must be a better way to do this */ void swap_ALOS_data_info(struct sardata_info *sdr) { FIX_SHORT(sdr->channel_indicator); FIX_SHORT(sdr->channel_code); FIX_SHORT(sdr->transmit_polarization); FIX_SHORT(sdr->receive_polarization); FIX_SHORT(sdr->onboard_range_compress); FIX_SHORT(sdr->chirp_type); FIX_SHORT(sdr->nought_line_flag); FIX_SHORT(sdr->platform_update_flag); FIX_INT(sdr->sequence_number); FIX_INT(sdr->record_length); FIX_INT(sdr->data_line_number); FIX_INT(sdr->data_record_index); FIX_INT(sdr->n_left_fill_pixels); FIX_INT(sdr->n_data_pixels); FIX_INT(sdr->n_right_fill_pixels); FIX_INT(sdr->sensor_update_flag); FIX_INT(sdr->sensor_acquisition_year); FIX_INT(sdr->sensor_acquisition_DOY); FIX_INT(sdr->sensor_acquisition_msecs_day); FIX_INT(sdr->PRF); FIX_INT(sdr->scan_ID); FIX_INT(sdr->chirp_length); FIX_INT(sdr->chirp_constant_coeff); FIX_INT(sdr->chirp_linear_coeff); FIX_INT(sdr->chirp_quad_coeff); FIX_INT(sdr->receiver_gain); FIX_INT(sdr->elec_antenna_squint_angle); FIX_INT(sdr->mech_antenna_squint_angle); FIX_INT(sdr->slant_range); FIX_INT(sdr->data_record_window_position); FIX_INT(sdr->platform_latitude); FIX_INT(sdr->platform_longitude); FIX_INT(sdr->platform_altitude); FIX_INT(sdr->platform_ground_speed); FIX_INT(sdr->platform_velocity_x); FIX_INT(sdr->platform_velocity_y); FIX_INT(sdr->platform_velocity_z); FIX_INT(sdr->platform_acc_x); FIX_INT(sdr->platform_acc_y); FIX_INT(sdr->platform_acc_z); FIX_INT(sdr->platform_track_angle_1); FIX_INT(sdr->platform_track_angle_2); FIX_INT(sdr->platform_pitch_angle); FIX_INT(sdr->platform_roll_angle); FIX_INT(sdr->platform_yaw_angle); FIX_INT(sdr->frame_counter); } /*------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/41/417cab945b7b9bf805c632c84781e9133134a3ea.svn-base000444 015705 000000 00000000327 13505462013 025445 0ustar00sandwellwheel000000 000000 /* global variables are initialized here */ #ifndef SARGLOBAL_H #define SARGLOBAL_H int verbose = 0; /* controls minimal level of output */ int debug = 0; /* more output */ #endif /* SARGLOBAL_H */ GMTSAR_V5.7/.svn/pristine/2d/2d091d0edf9e838d77e54e00008ce458e860f06b.svn-base000444 015705 000000 00000002250 13505462014 025616 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); void read_ENVI_orb(FILE *ldrfile, struct PRM *prm, struct ALOS_ORB *orb) { int n; int nd, iy, id; double isec, idsec, px, py, pz, vx, vy, vz; /* open each ldrfile and read into structure r */ fscanf(ldrfile, "%d %d %d %lf %lf", &nd, &iy, &id, &isec, &idsec); orb->itype = 0; orb->nd = nd; orb->iy = iy; orb->id = id; orb->sec = isec; orb->dsec = idsec; orb->points = (struct ORB_XYZ *)malloc(orb->nd * sizeof(struct ORB_XYZ)); n = 0; while (fscanf(ldrfile, "%d %d %lf %lf %lf %lf %lf %lf %lf", &iy, &id, &isec, &px, &py, &pz, &vx, &vy, &vz) != EOF) { orb->points[n].pt = 0.0; orb->points[n].px = px; orb->points[n].py = py; orb->points[n].pz = pz; orb->points[n].vx = vx; orb->points[n].vy = vy; orb->points[n].vz = vz; n++; } /*fprintf(stderr,"debugging the readleader file\n"); for (n=0; nnd; n++){ fprintf(stderr, "%d %lf %lf %lf %lf %lf %lf %lf \n",n,orb->points[n].pt, orb->points[n].px, \ orb->points[n].py,orb->points[n].pz,orb->points[n].vx,orb->points[n].vy,orb->points[n].vz); } */ } GMTSAR_V5.7/.svn/pristine/2d/2d3c11d08f80cdd5bb23acbdcf8d8d7f4c0a94c0.svn-base000444 015705 000000 00000046433 13505462013 026316 0ustar00sandwellwheel000000 000000 /* $Id$ */ /*************************************************************************** * resamp resamples a slave image to match the geometry of a master image. * **************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 03/21/13 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 11/18/96 Code largely based on phasediff. * * 01/11/14 Code modified to use mmap() instead of fread() * * 01/06/15 Code modified to use only integer rshift, ashift for * * nearest (imode = 1) interpolation. * * 04/28/16 EXU Modified 4 resampling subroutine to shift pointer before * * interpolation, so that resamp won't fail on files larger * * than 4GB. * ***************************************************************************/ #include "gmtsar.h" #include #include #include #include #include char *USAGE = "\nUsage: " "resamp master.PRM slave.PRM new_slave.PRM new_slave.SLC intrp \n" " master.PRM - PRM for master imagea \n" " slave.PRM - PRM for slave image \n" " new_slave.PRM - PRM for aligned slave image \n" " new_slave.SLC - SLC for aligned slave image \n" " intrp - interpolation method: 1-nearest; " "2-bilinear; 3-biquadratic; 4-bisinc \n \n"; void print_prm_params(struct PRM, struct PRM); void fix_prm_params(struct PRM *, char *); void ram2ras(struct PRM, double *, double *); void nearest(double *, short *, int, int, short *); void bilinear(double *, short *, int, int, short *); void bicubic(double *, short *, int, int, short *); void bicubic_one(double *, double *, double, double, double *); void bisinc(double *, short *, int, int, short *); void sinc_one(double *, double *, double, double, double *); int main(int argc, char **argv) { int ii, jj; int debug, intrp; int xdimm, ydimm; /* size of master SLC file */ int xdims, ydims; /* size of slave SLC file */ short *sinn = NULL, *sout = NULL; /* pointer to input (whole array) and output (row) files.*/ double ram[2], ras[2]; /* range and azimuth locations for master and slave images */ FILE *SLC_file2 = NULL, *prmout = NULL; int fdin; double sv_pr[6]; size_t st_size; // long long int count=0; struct PRM pm, ps; debug = 0; intrp = 2; if (argc < 6) die(USAGE, ""); /* read prm file into two pointers */ get_prm(&pm, argv[1]); get_prm(&ps, argv[2]); intrp = atoi(argv[5]); if (debug) print_prm_params(pm, ps); /* set width and length of the master and slave images */ xdimm = pm.num_rng_bins; ydimm = pm.num_patches * pm.num_valid_az; xdims = ps.num_rng_bins; ydims = ps.num_patches * ps.num_valid_az; /* force integer interpolation if this is nearest neighbor, needed for TOPS */ if (intrp == 1) { sv_pr[0] = ps.sub_int_r; ps.sub_int_r = 0.; sv_pr[1] = ps.stretch_r; ps.stretch_r = 0.; sv_pr[2] = ps.a_stretch_r; ps.a_stretch_r = 0.; sv_pr[3] = ps.sub_int_a; ps.sub_int_a = 0.; sv_pr[4] = ps.stretch_a; ps.stretch_a = 0.; sv_pr[5] = ps.a_stretch_a; ps.a_stretch_a = 0.; } /* allocate memory for one row of the slave image */ if ((sout = (short *)malloc(2 * xdimm * sizeof(short))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for output indata.\n"); exit(-1); } /* open the input file, determine its length and mmap the input file */ if ((fdin = open(ps.SLC_file, O_RDONLY)) < 0) die("can't open %s for reading", ps.SLC_file); st_size = (size_t)4 * (size_t)xdims * (size_t)ydims; /* mmap the file */ if ((sinn = mmap(0, st_size, PROT_READ, MAP_SHARED, fdin, 0)) == MAP_FAILED) die("mmap error for input", " "); /* open the slave slc file for writing and write one row at a time */ if ((SLC_file2 = fopen(argv[4], "w")) == NULL) die("Can't open SLCfile for output", argv[4]); for (ii = 0; ii < ydimm; ii++) { for (jj = 0; jj < xdimm; jj++) { /* convert master ra to slave ra */ ram[0] = jj; ram[1] = ii; ram2ras(ps, ram, ras); /* do nearest, bilinear, bicubic, or sinc interpolation */ if (intrp == 1) { nearest(ras, sinn, ydims, xdims, &sout[2 * jj]); } else if (intrp == 2) { bilinear(ras, sinn, ydims, xdims, &sout[2 * jj]); } else if (intrp == 3) { bicubic(ras, sinn, ydims, xdims, &sout[2 * jj]); } else if (intrp == 4) { bisinc(ras, sinn, ydims, xdims, &sout[2 * jj]); } // if(ras[0]>xdimm||ras[0]<0) count++; } fwrite(sout, 2 * sizeof(short), xdimm, SLC_file2); } // fprintf(stderr,"%llu points out of bounds // (%d,%.6f,%.6f,%.6f)\n",count,ps.rshift,ps.sub_int_r,ps.stretch_r,ps.a_stretch_r); /* restore the affine parameters if this is nearest interpolation */ if (intrp == 1) { ps.sub_int_r = sv_pr[0]; ps.stretch_r = sv_pr[1]; ps.a_stretch_r = sv_pr[2]; ps.sub_int_a = sv_pr[3]; ps.stretch_a = sv_pr[4]; ps.a_stretch_a = sv_pr[5]; } /* update and write the slave PRM file */ ps.num_rng_bins = pm.num_rng_bins; ps.fs = pm.fs; ps.bytes_per_line = pm.bytes_per_line; ps.good_bytes = pm.good_bytes; ps.prf = pm.prf; ps.num_valid_az = pm.num_valid_az; ps.num_lines = pm.num_lines; ps.num_patches = pm.num_patches; ps.nrows = pm.nrows; if ((prmout = fopen(argv[3], "w")) == NULL) die("can't open prfile", argv[3]); put_sio_struct(ps, prmout); fclose(prmout); if (munmap(sinn, st_size) == -1) die("mmap error unmapping file", " "); close(fdin); fclose(SLC_file2); return (EXIT_SUCCESS); } /************************************************************************ * bi-cubic interpolation algorithm modified from GMT * ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/22/13 * ************************************************************************/ #include #include double cubic_kernel(double, double); void bicubic_one(double *rdata, double *idata, double x, double y, double *cz) { int i, j, ij; double wx[4], wy[4]; double arg, w, wsum, rsum, isum; double a = -0.3; /* These weights are based on the cubic convolution kernel, see for example http://undergraduate.csse.uwa.edu.au/units/CITS4241/Handouts/Lecture04.html These weights include a free parameter (a). */ for (i = 0; i < 4; i++) { arg = fabs(x + 1 - i); wx[i] = cubic_kernel(arg, a); arg = fabs(y + 1 - i); wy[i] = cubic_kernel(arg, a); } rsum = isum = wsum = 0.0; ij = 0; for (j = 0; j < 4; j++) { for (i = 0; i < 4; i++) { w = wx[i] * wy[j]; rsum += rdata[ij + i] * w; isum += idata[ij + i] * w; wsum += w; } ij += 4; } if (wsum <= 0.0) printf(" error wsum is zero \n"); cz[0] = rsum / wsum; cz[1] = isum / wsum; } /************************************************************************ kernel computes a bi-cubic spline kernel using the formula given at the following web page http://undergraduate.csse.uwa.edu.au/units/CITS4241/Handouts/Lecture04.html ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/22/13 * ************************************************************************/ #include double cubic_kernel(double arg, double a) /* note arg must be positive and a must be between -3 and 0. */ { double arg2, arg3, f; arg2 = arg * arg; arg3 = arg2 * arg; if (arg <= 1.) { f = (a + 2) * arg3 - (a + 3) * arg2 + 1.; } else if (arg <= 2.) { f = a * arg3 - 5 * a * arg2 + 8 * a * arg - 4 * a; } else { f = 0.; } return (f); } /************************************************************************ * nearest, bilinear, and bicubic interpolations * ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/22/13 * ************************************************************************/ #include "gmtsar.h" #include #include void nearest(double *ras, short *s_in, int ydims, int xdims, short *sout) { int i, j, k; short *tmp_sin; /* compute the indices of the upper left corner */ j = (int)(ras[0] + 0.5); i = (int)(ras[1] + 0.5); // k = 2*xdims*i + 2*j; k = 2 * j; /* shift the pointer by i0-ns2 lines */ tmp_sin = s_in; tmp_sin++; tmp_sin = s_in + (size_t)(2 * xdims) * (size_t)i * (tmp_sin - s_in); /* use the nearest point if it is within the bounds of the slave array */ if (i < 0 || i >= ydims || j < 0 || j >= xdims) { sout[0] = 0; sout[1] = 0; } else { // sout[0] = s_in[k]; // sout[1] = s_in[k+1]; sout[0] = tmp_sin[k]; sout[1] = tmp_sin[k + 1]; } } void bilinear(double *ras, short *s_in, int ydims, int xdims, short *sout) { double dr, da, real, imag; int k00, k01, k10, k11; int i0, j0; int nclip; short *tmp_sin; /* compute the residual offsets */ nclip = 0; j0 = (int)floor(ras[0]); i0 = (int)floor(ras[1]); dr = ras[0] - (double)j0; da = ras[1] - (double)i0; if (dr < 0. || dr > 1. || da < 0. || da > 1) fprintf(stderr, " dr or da out of bounds %f %f \n", dr, da); /* shift the pointer by i0-ns2 lines */ tmp_sin = s_in; tmp_sin++; tmp_sin = s_in + (size_t)(2 * xdims) * (size_t)i0 * (tmp_sin - s_in); /* compute the indices of the 4 corners */ /* k00 = 2*xdims*i0 + 2*j0; k01 = 2*xdims*i0 + 2*(j0+1); k10 = 2*xdims*(i0+1) + 2*j0; k11 = 2*xdims*(i0+1) + 2*(j0+1); */ k00 = 2 * j0; k01 = 2 * (j0 + 1); k10 = 2 * xdims + 2 * j0; k11 = 2 * xdims + 2 * (j0 + 1); /* do the interpolation if all 4 corners are within the bounds of the slave * array */ if (i0 < 0 || i0 >= (ydims - 1) || j0 < 0 || j0 >= (xdims - 1)) { sout[0] = 0; sout[1] = 0; } else { /*real = s_in[k00] * (1.0 - da) * (1.0 - dr) + s_in[k10] * (da) * (1.0 - dr) + s_in[k01] * (1.0 - da) * (dr) + s_in[k11] * (da) * (dr);*/ real = tmp_sin[k00] * (1.0 - da) * (1.0 - dr) + tmp_sin[k10] * (da) * (1.0 - dr) + tmp_sin[k01] * (1.0 - da) * (dr) + tmp_sin[k11] * (da) * (dr); if ((int)fabs(real) > I2MAX) nclip = nclip + 1; sout[0] = (short)clipi2(real + 0.5); /*imag = s_in[k00+1] * (1.0 - da) * (1.0 - dr) + s_in[k10+1] * (da) * (1.0 - dr) + s_in[k01+1] * (1.0 - da) * (dr) + s_in[k11+1] * (da) * (dr);*/ imag = tmp_sin[k00 + 1] * (1.0 - da) * (1.0 - dr) + tmp_sin[k10 + 1] * (da) * (1.0 - dr) + tmp_sin[k01 + 1] * (1.0 - da) * (dr) + tmp_sin[k11 + 1] * (da) * (dr); if ((int)fabs(imag) > I2MAX) nclip = nclip + 1; sout[1] = (short)clipi2(imag + 0.5); } /*if(nclip > 0) fprintf(stderr," %d integers were clipped \n",nclip);*/ } void bicubic(double *ras, short *s_in, int ydims, int xdims, short *sout) { double dr, da; double rdata[16], idata[16], cz[2]; int i, j, k, kk; int i0, j0; int nclip; short *tmp_sin; /* compute the residual offsets */ nclip = 0; j0 = (int)floor(ras[0]); i0 = (int)floor(ras[1]); dr = ras[0] - (double)j0; da = ras[1] - (double)i0; if (dr < 0. || dr > 1. || da < 0. || da > 1) fprintf(stderr, " dr or da out of bounds %f %f \n", dr, da); /* make sure all 4 corners are within the bounds of the slave array */ if ((i0 - 1) < 0 || (i0 + 2) >= ydims || (j0 - 1) < 0 || (j0 + 2) >= xdims) { sout[0] = 0; sout[1] = 0; } else { /* safe to do the interpolation */ /* shift the pointer by i0-1 lines */ tmp_sin = s_in; tmp_sin++; tmp_sin = s_in + (size_t)(2 * xdims) * (size_t)(i0 - 1) * (tmp_sin - s_in); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { k = i * 4 + j; // kk = 2*xdims*(i0-1+i) + 2*(j0-1+j); kk = 2 * xdims * i + 2 * (j0 - 1 + j); // rdata[k] = s_in[kk]; // idata[k] = s_in[kk+1]; rdata[k] = tmp_sin[kk]; idata[k] = tmp_sin[kk + 1]; } } /* interpolate the real and imaginary data */ bicubic_one(rdata, idata, dr, da, cz); if ((int)fabs(cz[0]) > I2MAX) nclip = nclip + 1; sout[0] = (short)clipi2(cz[0] + 0.5); if ((int)fabs(cz[1]) > I2MAX) nclip = nclip + 1; sout[1] = (short)clipi2(cz[1] + 0.5); } /*if(nclip > 0) fprintf(stderr," %d integers were clipped \n",nclip);*/ } void bisinc(double *ras, short *s_in, int ydims, int xdims, short *sout) { double dr, da, ns2 = NS / 2 - 1; double rdata[NS * NS], idata[NS * NS], cz[2]; int i, j, k, kk; int i0, j0; int nclip; short *tmp_sin; /* compute the residual offsets */ nclip = 0; j0 = (int)floor(ras[0]); i0 = (int)floor(ras[1]); dr = ras[0] - (double)j0; da = ras[1] - (double)i0; if (dr < 0. || dr > 1. || da < 0. || da > 1) fprintf(stderr, " dr or da out of bounds %f %f \n", dr, da); /* make sure all 4 corners are within the bounds of the slave array */ if ((i0 - ns2) < 0 || (i0 + ns2 + 1) >= ydims || (j0 - ns2) < 0 || (j0 + ns2 + 1) >= xdims) { sout[0] = 0; sout[1] = 0; } else { /* safe to do the interpolation */ /* shift the pointer by i0-ns2 lines */ tmp_sin = s_in; tmp_sin++; tmp_sin = s_in + (size_t)(2 * xdims) * (size_t)(i0 - ns2) * (tmp_sin - s_in); for (i = 0; i < NS; i++) { for (j = 0; j < NS; j++) { k = i * NS + j; // kk = 2*xdims*(i0-ns2+i) + 2*(j0-ns2+j); kk = 2 * xdims * i + 2 * (j0 + j - ns2); rdata[k] = tmp_sin[kk]; idata[k] = tmp_sin[kk + 1]; } } /* interpolate the real and imaginary data */ sinc_one(rdata, idata, dr, da, cz); if ((int)fabs(cz[0]) > I2MAX) nclip = nclip + 1; sout[0] = (short)clipi2(cz[0] + 0.5); if ((int)fabs(cz[1]) > I2MAX) nclip = nclip + 1; sout[1] = (short)clipi2(cz[1] + 0.5); } /*if(nclip > 0) fprintf(stderr," %d integers were clipped \n",nclip);*/ } #include "gmtsar.h" #include "lib_functions.h" /*--------------------------------------------------------------*/ void print_prm_params(struct PRM p1, struct PRM p2) { fprintf(stderr, " SLC 1: num_rng_bins %d num_lines %d \n", p1.num_rng_bins, p1.num_lines); fprintf(stderr, " SLC 2: num_rng_bins %d num_lines %d \n", p2.num_rng_bins, p2.num_lines); fprintf(stderr, " lambda %f \n", p2.lambda); fprintf(stderr, " near_range %f \n", p2.near_range); fprintf(stderr, " rng_samp_rate %.7f \n", p2.fs); fprintf(stderr, " sc_clock_start %f \n", p2.SC_clock_start); fprintf(stderr, " sc_clock_stop %f \n", p2.SC_clock_stop); fprintf(stderr, " clock_start %f \n", p2.clock_start); fprintf(stderr, " clock_stop %f \n", p2.clock_stop); fprintf(stderr, " prfm %f \n", p1.prf); fprintf(stderr, " prfs %f \n", p2.prf); fprintf(stderr, " rshift %f \n", p2.rshift + p2.sub_int_r); fprintf(stderr, " ashift %f \n", p2.ashift + p2.sub_int_a); } /*--------------------------------------------------------------*/ void fix_prm_params(struct PRM *p, char *s) { double delr; delr = SOL / p->fs / 2.0; /* these are from prm2gips */ p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift - 1) * delr; p->SC_clock_start = p->SC_clock_start + p->ashift / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } /************************************************************************ * ram2ras maps range and azimuth from a master image location into the * * corresponding range and azimuth location of the slave image. * ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/22/13 * ************************************************************************/ /************************************************************************ * Modification history: * * * * DATE * ************************************************************************/ #include "gmtsar.h" #include #include void ram2ras(struct PRM ps, double *ram, double *ras) { /* this is the range coordinate */ ras[0] = ram[0] + ((ps.rshift + ps.sub_int_r) + ram[0] * ps.stretch_r + ram[1] * ps.a_stretch_r); /* this is the azimuth coordinate */ ras[1] = ram[1] + ((ps.ashift + ps.sub_int_a) + ram[0] * ps.stretch_a + ram[1] * ps.a_stretch_a); } /************************************************************************ computes sinc function kernel for interpolation ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/28/13 * ************************************************************************/ #include #define PI 3.1415926535897932 double sinc_kernel(double x) { double arg, f; arg = fabs(PI * x); if (arg > 0.) { f = sin(arg) / arg; } else { f = 1.; } return (f); } /************************************************************************ * sinc function interpolation * ************************************************************************/ /************************************************************************ * Creator: David Sandwell (Scripps Institution of Oceanography) * * Date : 03/28/13 * ************************************************************************/ #include "gmtsar.h" #include #include double sinc_kernel(double); void sinc_one(double *rdata, double *idata, double x, double y, double *cz) { int i, j, ij, ns2 = NS / 2 - 1; double wx[NS], wy[NS]; double arg, w, wsum, rsum, isum; for (i = 0; i < NS; i++) { arg = fabs(x + ns2 - i); wx[i] = sinc_kernel(arg); arg = fabs(y + ns2 - i); wy[i] = sinc_kernel(arg); } rsum = isum = wsum = 0.0; ij = 0; for (j = 0; j < NS; j++) { for (i = 0; i < NS; i++) { w = wx[i] * wy[j]; rsum += rdata[ij + i] * w; isum += idata[ij + i] * w; wsum += w; } ij += NS; } if (wsum <= 0.0) printf(" error wsum is zero \n"); cz[0] = rsum / wsum; cz[1] = isum / wsum; } GMTSAR_V5.7/.svn/pristine/2d/2dc27ca865ecc42e17ff67c196d9b7d1b535ae0b.svn-base000444 015705 000000 00000002040 13505462013 026104 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # subsample and LOS grid and add the look vector # need to include the PRM and LED file in the local directory # if ($#argv <1 || $#argv >5) then echo "" echo "Usage: make_los_ascii.csh los.grd dem.grd -I0.01/0.01 PRM_file Satellite " echo "" echo "Example: make_los_ascii.csh los_ll.grd dem.grd -I0.01/0.01 IMG-HH-ALOS2046743050-150405-WBDR1.1__D-F1.PRM ALOS" echo "" echo "output: los.lltnde" exit 1 endif if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif gmt grdsample $2 -Gtmp_topo.grd `grdinfo $1 -I-` `grdinfo $1 -I` -F gmt grdmath $1 0 MUL 1 ADD tmp_topo.grd MUL = tmp_topo.grd gmt grd2xyz $1 > tmp.xyz gmt grd2xyz tmp_topo.grd > tmp_topo.xyz gmt blockmedian tmp.xyz `grdinfo $1 -I-` $3 $V > tmp_b.xyz gmt blockmedian tmp_topo.xyz `grdinfo $1 -I-` $3 $V > tmp_topo_b.xyz set SAT = $5 if($SAT == ERS) then set SAT = 'ENVI' endif $SAT"_"look $4 < tmp_topo_b.xyz > tmp_topo_b_n.lltn awk '{ a=$3;getline <"tmp_topo_b_n.lltn";print $1,$2,$3,$4,$5,$6,a,-1}' tmp_b.xyz > los.lltnde rm tmp* GMTSAR_V5.7/.svn/pristine/79/7939ee4eb08fcc361343d5c19f9f790b0438b428.svn-base000444 015705 000000 00000000410 13505462014 025476 0ustar00sandwellwheel000000 000000 /* include file for CEOS data files parameters */ #define MIN_PRF 1640.0 #define MAX_PRF 1720.0 #define SEC_PER_PRI_COUNT 210.94e-09 #define LINESIZE 12060 struct lineparam { int ifc; unsigned short swst_dn; unsigned short pri_dn; double pri; double swst; }; GMTSAR_V5.7/.svn/pristine/79/7912eac5ee7e5ecde61ea4c148fd316cc3b98b9b.svn-base000444 015705 000000 00000014644 13505462013 026221 0ustar00sandwellwheel000000 000000 /************************************************************************ * get_params retrieves parameters from the esar parameter file. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History: * 04/21/97 Added sc_clock_start, sc_stop_clock and *sc_identity * 06/12/00 Added icu_start * 04/26/06 Added nrows, *num_lines * 06/09/07 Added *orbdir,rcc,raa,bpara,bperp * 08/01/07 Addes rshift *and ashift to be compatible with Mellors code * 07/10/08 Added height0 and *heightf to make phase continuous * 09/19/08 Added TEC_start and *TEC_end to account for ionosphere * Date ** ************************************************************************/ #include "soi.h" #include #include #define BUFSIZE 80 char *p2strcpy(char strng[]) { char *charptr; if ((charptr = (void *)malloc(strlen(strng) + 1)) != NULL) strcpy(charptr, strng); return (charptr); } void get_params(FILE *fh) { char variable[BUFSIZE], value[BUFSIZE]; while (fscanf(fh, "%s = %s \n", variable, value) != EOF) { if (strcmp(variable, "input_file") == 0) input_file = p2strcpy(value); if (strcmp(variable, "led_file") == 0) led_file = p2strcpy(value); if (strcmp(variable, "out_amp_file") == 0) out_amp_file = p2strcpy(value); if (strcmp(variable, "out_data_file") == 0) out_data_file = p2strcpy(value); if (strcmp(variable, "bytes_per_line") == 0) bytes_per_line = atoi(value); if (strcmp(variable, "good_bytes_per_line") == 0) good_bytes = atoi(value); if (strcmp(variable, "first_line") == 0) first_line = atoi(value); if (strcmp(variable, "num_patches") == 0) num_patches = atoi(value); if (strcmp(variable, "first_sample") == 0) first_sample = atoi(value); if (strcmp(variable, "num_valid_az") == 0) num_valid_az = atoi(value); if (strcmp(variable, "icu_start") == 0) icu_start = atof(value); if (strcmp(variable, "SC_clock_start") == 0) SC_clock_start = atof(value); if (strcmp(variable, "SC_clock_stop") == 0) SC_clock_stop = atof(value); if (strcmp(variable, "SC_identity") == 0) SC_identity = atoi(value); if (strcmp(variable, "clock_start") == 0) clock_start = atof(value); if (strcmp(variable, "clock_stop") == 0) clock_stop = atof(value); if (strcmp(variable, "ref_identity") == 0) ref_identity = atoi(value); if (strcmp(variable, "deskew") == 0) deskew = p2strcpy(value); if (strcmp(variable, "caltone") == 0) caltone = atof(value); if (strcmp(variable, "st_rng_bin") == 0) st_rng_bin = atoi(value); if (strcmp(variable, "num_rng_bins") == 0) num_rng_bins = atoi(value); if (strcmp(variable, "earth_radius") == 0) RE = atof(value); if (strcmp(variable, "SC_vel") == 0) vel1 = atof(value); if (strcmp(variable, "SC_height") == 0) ht1 = atof(value); if (strcmp(variable, "near_range") == 0) near_range = atof(value); if (strcmp(variable, "PRF") == 0) prf1 = atof(value); if (strcmp(variable, "I_mean") == 0) xmi1 = atof(value); if (strcmp(variable, "Q_mean") == 0) xmq1 = atof(value); if (strcmp(variable, "Flip_iq") == 0) iqflip = p2strcpy(value); if (strcmp(variable, "offset_video") == 0) off_vid = p2strcpy(value); if (strcmp(variable, "az_res") == 0) az_res = atof(value); if (strcmp(variable, "nlooks") == 0) nlooks = atoi(value); if (strcmp(variable, "rng_samp_rate") == 0) fs = atof(value); if (strcmp(variable, "chirp_slope") == 0) slope = atof(value); if (strcmp(variable, "pulse_dur") == 0) pulsedur = atof(value); if (strcmp(variable, "chirp_ext") == 0) nextend = atoi(value); if (strcmp(variable, "scnd_rng_mig") == 0) srm = p2strcpy(value); if (strcmp(variable, "radar_wavelength") == 0) lambda = atof(value); if (strcmp(variable, "rng_spec_wgt") == 0) rhww = atof(value); if (strcmp(variable, "rm_rng_band") == 0) pctbw = atof(value); if (strcmp(variable, "rm_az_band") == 0) pctbwaz = atof(value); if (strcmp(variable, "fd1") == 0) fd1 = atof(value); if (strcmp(variable, "fdd1") == 0) fdd1 = atof(value); if (strcmp(variable, "fddd1") == 0) fddd1 = atof(value); if (strcmp(variable, "rshift") == 0) xshift = atoi(value); if (strcmp(variable, "ashift") == 0) yshift = atoi(value); if (strcmp(variable, "xshift") == 0) xshift = atoi(value); if (strcmp(variable, "yshift") == 0) yshift = atoi(value); if (strcmp(variable, "sub_int_r") == 0) sub_int_r = atof(value); if (strcmp(variable, "sub_int_a") == 0) sub_int_a = atof(value); if (strcmp(variable, "stretch_r") == 0) stretch_r = atof(value); if (strcmp(variable, "stretch_a") == 0) stretch_a = atof(value); if (strcmp(variable, "a_stretch_r") == 0) a_stretch_r = atof(value); if (strcmp(variable, "a_stretch_a") == 0) a_stretch_a = atof(value); if (strcmp(variable, "baseline_start") == 0) baseline_start = atof(value); if (strcmp(variable, "alpha_start") == 0) alpha_start = atof(value); if (strcmp(variable, "baseline_end") == 0) baseline_end = atof(value); if (strcmp(variable, "alpha_end") == 0) alpha_end = atof(value); if (strcmp(variable, "reference_file") == 0) ref_file = p2strcpy(value); if (strcmp(variable, "nrows") == 0) nrows = atoi(value); if (strcmp(variable, "num_lines") == 0) num_lines = atoi(value); /* new parameters added June 9, 2007 */ if (strcmp(variable, "orbdir") == 0) orbdir = p2strcpy(value); if (strcmp(variable, "lookdir") == 0) lookdir = p2strcpy(value); if (strcmp(variable, "equatorial_radius") == 0) raa = atof(value); if (strcmp(variable, "polar_radius") == 0) rcc = atof(value); if (strcmp(variable, "B_parallel") == 0) bparaa = atof(value); if (strcmp(variable, "B_perpendicular") == 0) bperpp = atof(value); /* new parameters added July 11, 2008 */ if (strcmp(variable, "SC_height_start") == 0) ht0 = atof(value); if (strcmp(variable, "SC_height_end") == 0) htf = atof(value); /* new parameters added September 18, 2008 */ if (strcmp(variable, "TEC_start") == 0) TEC_start = atof(value); if (strcmp(variable, "TEC_end") == 0) TEC_end = atof(value); } } GMTSAR_V5.7/.svn/pristine/2c/2cf08634ab910915c00a753dc824f829721ec87c.svn-base000444 015705 000000 00000004552 13505462014 025452 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" int ledflag; /* reads options */ /* start with third arguement */ void parse_ALOS_commands(int na, char **a, char *USAGE, struct PRM *prm) { int n; for (n = 3; n < na; n++) { if (!strcmp(a[n], "-near")) { n++; if (n == na) die(" no option after -near!\n", ""); prm->near_range = atof(a[n]); fprintf(stderr, " setting near_range to %9.2lf \n", prm->near_range); } else if (!strcmp(a[n], "-radius")) { n++; if (n == na) die(" no option after -radius!\n", ""); prm->RE = atof(a[n]); fprintf(stderr, " setting radius to %f \n", prm->RE); } else if (!strcmp(a[n], "-nrows")) { n++; if (n == na) die(" no option after -nrows!\n", ""); prm->nrows = atoi(a[n]); fprintf(stderr, " setting nrows to %d \n", prm->nrows); } else if (!strcmp(a[n], "-tbias")) { n++; if (n == na) die(" no option after -tbias!\n", ""); tbias = atof(a[n]); fprintf(stderr, " setting tbias to %f \n", tbias); } else if (!strcmp(a[n], "-rbias")) { n++; if (n == na) die(" no option after -rbias!\n", ""); rbias = atof(a[n]); fprintf(stderr, " setting rbias to %f \n", rbias); } else if (!strcmp(a[n], "-SLC_factor")) { n++; if (n == na) die(" no option after -SLC_factor!\n", ""); slc_fact = atof(a[n]); fprintf(stderr, " setting SLC_factor to %f \n", slc_fact); } else if (!strcmp(a[n], "-ALOS1")) { prefix_off = 0; fprintf(stderr, " processing ALOS1 L1.1 \n"); } else if (!strcmp(a[n], "-ALOS2")) { prefix_off = 132; fprintf(stderr, " processing ALOS2 L1.1 \n"); } else if (!strcmp(a[n], "-roi")) { roi = 1; fprintf(stderr, " writing roi_pac rsc files \n"); } else if (!strcmp(a[n], "-LED")) { ledflag = 1; fprintf(stderr, " creating *.LED file \n"); } else if (!strcmp(a[n], "-noLED")) { ledflag = 0; fprintf(stderr, " no *.LED file written (default) \n"); } else if (!strncmp(a[n], "-debug", 2)) { verbose = debug = 1; fprintf(stderr, " debug and verbose output \n"); } else if (!strncmp(a[n], "-V", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else if (!strncmp(a[n], "-v", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } } GMTSAR_V5.7/.svn/pristine/2c/2caa06a0be86ed8b31feb65dcd398a00ddc555df.svn-base000444 015705 000000 00000005235 13505462013 026315 0ustar00sandwellwheel000000 000000 /************************************************************************ * aastretch performs an azimuth dependent azimuth interpolation * ************************************************************************/ /************************************************************************ * Creator: Meng Wei, Scripps Institution of Oceanography) * * Date : 09/29/06 * ************************************************************************/ /************************************************************************ * Modification History * * 02/23/11 DTS modified interpolation to use cubic spline * * Date * ************************************************************************/ #include "gmt.h" #include "gmtsar.h" #include "siocomplex.h" #include "soi.h" #include void aastretch(fcomplex **fdata, int ipatch, int nrows, int num_valid_az, int num_rng_bins, float coef) { int i, j, low_ind, istart, nsmx; double *xs, *real, *imag, *ss, *as; double yss, test; low_ind = (nrows - num_valid_az) / 2; nsmx = low_ind / 2; /* check to see if the total shift will be larger than 1/4 the length of the * aperture */ if (coef * num_valid_az >= nsmx || coef * num_valid_az <= -nsmx) { fprintf(stderr, "The a_stretch_a is too large.\n"); exit(-1); } /* allocate memory for vectors */ xs = (double *)malloc((nrows) * sizeof(double)); ss = (double *)malloc((nrows) * sizeof(double)); as = (double *)malloc((nrows) * sizeof(double)); real = (double *)malloc((nrows) * sizeof(double)); imag = (double *)malloc((nrows) * sizeof(double)); /* calculate the original and shifted positions */ for (i = 0; i < nrows; i++) { xs[i] = (ipatch - 1) * num_valid_az + i - low_ind; } /* process each column */ for (j = 0; j < num_rng_bins; j++) { /* get a column of data from the 2-D array */ for (i = 0; i < nrows; i++) { real[i] = fdata[i][j].r; imag[i] = fdata[i][j].i; } /* interpolate each column - real then imaginary */ spline_(&istart, &nrows, xs, real, ss, as); for (i = low_ind - nsmx; i < nrows - nsmx; i++) { yss = xs[i] * (1 + coef); evals_(&istart, &yss, &nrows, xs, real, ss, &test); fdata[i][j].r = (float)test; } spline_(&istart, &nrows, xs, imag, ss, as); for (i = low_ind - nsmx; i < nrows - nsmx; i++) { yss = xs[i] * (1 + coef); evals_(&istart, &yss, &nrows, xs, imag, ss, &test); fdata[i][j].i = (float)test; } } free((double *)xs); free((double *)real); free((double *)imag); free((double *)ss); free((double *)as); } GMTSAR_V5.7/.svn/pristine/2c/2c398d6a354a683e0828305a203833b080fd6e96.svn-base000444 015705 000000 00000004614 13505462013 025312 0ustar00sandwellwheel000000 000000 .TH EXACT_ERS_TIME l "15 JUN 2000, Copyright 2000 David Sandwell" " " "SIOSAR ERS time correction" .SH NAME exact_ers_time \- corrects the start time of the first radar echo using the ICU clock imbedded in the raw data file .SH SYNOPSIS .B exact_ers_time .I SC_clock_start SC_identity icu_start .SH DESCRIPTION The .B exact_ers_time command reads the approximate start-time and ICU clock counter of the first radar echo and computes a new corrected start time. The approximate time is used to determine the correct PATN file that, in turn, is used to translate the onboard computer clock counter into UTC. The PATN files are generated at ESA from precise tracking data. .sp .br icu - ldr - exact start time minus app. start time (s) .br SC_clock_start - start time of repeat pass .br .br .SH INPUT .TP 10 .I SC_clock_start start time of frame in format YYYYDDD.DDDD .TP 10 .I SC_identity spacecraft number of reference (1)-ERS-1 (2)-ERS2 .TP 10 .I icu_start onboard clock counter of first record in frame .sp .SH INPUT .br icu - ldr - exact start time minus start time (s) .br SC_clock_start - exact start time of frame .br .SH EXAMPLES Compute exact start time for frames in the Salton Sea area. These are recent ERS-2 data and the largest difference is 2.7 milliseconds. .br .sp exact_ers_time 1999169.7658487617 2 3555329853.933 .br icu - ldr = 0.000167 .br SC_clock_start = 1999169.76584876352 .br .sp exact_ers_time 1999204.7658464119 2 34506524.933 .br icu - ldr = -0.000049 .br SC_clock_start = 1999204.76584641146 .br .sp exact_ers_time 1999274.7658527894 2 1582794635.714 .br icu - ldr = 0.002735 .br SC_clock_start = 1999274.76585282106 .br .sp exact_ers_time 1999344.7658110070 2 3131081524.933 .br icu - ldr = 0.000059 .br SC_clock_start = 1999344.76581100770 .br .sp exact_ers_time 2000014.7658063078 2 3905225265.714 .br icu - ldr = 0.002198 .br SC_clock_start = 2000014.76580633316 .br .sp exact_ers_time 2000049.7658661806 2 384403147.933 .br icu - ldr = 0.001426 .br SC_clock_start = 2000049.76586619718 .br .sp .SH SEE ALSO .B getorb software and precise orbit files were provided by Remko Scharroo (remko.scharroo@lr.tudelft.nl). For more up-to-date information on this package and the DUT orbits, netsurf to: .br http://www.deos.tudelft.nl/ers/precorbs/ .sp .br .SH AUTHOR David T. Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS GMTSAR_V5.7/.svn/pristine/46/463cd1f77815a417f9d3e3aafc12fc0de9e443c1.svn-base000444 015705 000000 00000014474 13505462014 025761 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Program to prepare ALOS L1.0 data for InSAR processing. Read in data and * * leader file and write out prm and raw file for siosar * ******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 4/23/07 added code to check endianess RJM * * 07/15/08 added a command-line option to force earth radius DTS * 10/02/08 * added capability to pre_process ScanSAR WB1 data DTS * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "\n\nUsage: ALOS_pre_process_SS imagefile LEDfile [-near near_range] " "[-radius RE] [-swath swath#] [-burst_skip] [-num_burst] [-swap] [-V] " "[-debug] [-quiet] \n" "\ncreates data.raw and writes out parameters (PRM format) to stdout\n" "\nimagefile ALOS Level 1.0 complex file (CEOS format):\n" "LEDfile ALOS Level 1.0 LED file (CEOS leaderfile format):\n" "\n options: \n" "-near near_range specify the near_range (m) \n" "-radius RE specify the local earth radius (m) \n" "-swath specify swath number 1-5 [default 4] \n" "-burst_skip number of burst to skip before starting output " "(1559 lines/burst) \n" "-num_burst number of burst to process [default all] \n" " there are 72 bursts in a WB1 frame \n" "-swap do byte-swap (should be automatic) \n" "-fd1 [DOPP] sets doppler centroid [fd1] to DOPP\n" "-V verbose write information) \n" "-debug write even more information \n" "-quiet don't write any information \n" "Example:\n" "ALOS_pre_process_SS IMG-HH-ALPSRS049842950-W1.0__D " "LED-ALPSRS049842950-W1.0__D -near 847916 -radius 6371668.872945 " "-burst_skip 5 -num_burst 36 \n\n" " burst # look_angle #lines_burst \n" " 1 20.1 247 \n" " 2 26.1 356 \n" " 3 30.6 274 \n" " 4 34.1 355 \n" " 5 36.5 327 \n\n"; long read_ALOS_data_SS(FILE *, FILE *, struct PRM *, long *, int *, int *, int *); void parse_ALOS_commands(int, char **, char *, struct PRM *, int *, int *, int *); void set_ALOS_defaults(struct PRM *); void print_ALOS_defaults(struct PRM *); void swap_ALOS_data_info(struct sardata_info *); void get_files(struct PRM *, FILE **, FILE **, char *, char *, int, int); int main(int argc, char **argv) { FILE *imagefile, *ldrfile; FILE *rawfile[11], *prmfile[11]; char prmfilename[128]; int nPRF; long byte_offset; int nsub = 3, burst_skip = 0, num_burst = 1000; struct PRM prm; struct ALOS_ORB orb; if (argc < 3) die(USAGE, ""); /* set flags */ dopp = 0; debug = verbose = swap = quiet_flag = 0; nPRF = 0; null_sio_struct(&prm); set_ALOS_defaults(&prm); /* read command line */ parse_ALOS_commands(argc, argv, USAGE, &prm, &nsub, &burst_skip, &num_burst); if (verbose) print_ALOS_defaults(&prm); if (is_big_endian_() == -1) { swap = 1; fprintf(stderr, ".... swapping bytes\n"); } else { swap = 0; } /* IMG and LED files should exist already */ if ((imagefile = fopen(argv[1], "r")) == NULL) die("couldn't open Level 1.0 IMG file \n", argv[1]); if ((ldrfile = fopen(argv[2], "r")) == NULL) die("couldn't open LED file \n", argv[2]); /* if it exists, copy to prm structure */ strcpy(prm.led_file, argv[2]); /* name and open output files and header files for raw data (but input for * later processing) */ get_files(&prm, &rawfile[nPRF], &prmfile[nPRF], prmfilename, argv[1], nPRF, nsub + 1); /* read sarleader; put info into prm; write log file if specified */ read_ALOS_sarleader(ldrfile, &prm, &orb); /* read Level 1.0 file; put info into prm; convert to *.raw format */ /* if PRF changes halfway through, create new set of header and data files */ /* byte_offset is non-zero only if the prf changes */ /* byte_offset gets set to point in file at prf change */ byte_offset = -1; /* set the chirp extension to 500 if FBD or WB1 fs = 16000000 */ if (prm.fs < 17000000.) prm.chirp_ext = 500; /* check to be sure the burst_skip*1559 lines does not exceed the file size */ if (burst_skip * 1559 > 100000) fprintf(stderr, " warning skip could exceed the length of the file \n"); /* read_ALOS_data returns 0 if all data file is read; returns byte offset if the PRF changes */ byte_offset = read_ALOS_data_SS(imagefile, rawfile[nPRF], &prm, &byte_offset, &nsub, &burst_skip, &num_burst); /* calculate parameters from orbit */ ALOS_ldr_orbit(&orb, &prm); /* calculate doppler from raw file */ if (dopp == 1) calc_dop(&prm); /* write ascii output, SIO format */ put_sio_struct(prm, prmfile[nPRF]); return (EXIT_SUCCESS); } /*------------------------------------------------------*/ void get_files(struct PRM *prm, FILE **rawfile, FILE **prmfile, char *prmfilename, char *name, int n, int nsub) { /* name and open output file for raw data (but input for later processing) */ /* if more than 1 set of output files, append an integer (beginning with 2) */ if (n == 0) { sprintf(prm->input_file, "%s_SW%d.raw", name, nsub); sprintf(prmfilename, "%s_SW%d.PRM", name, nsub); } else { sprintf(prm->input_file, "%s_SW%d.raw.%d", name, nsub, n + 1); sprintf(prmfilename, "%s_SW%d.PRM.%d", name, nsub, n + 1); } /* now open the files */ if ((*rawfile = fopen(prm->input_file, "w")) == NULL) die("can't open ", prm->input_file); if ((*prmfile = fopen(prmfilename, "w")) == NULL) die("couldn't open output PRM file \n", prmfilename); } /*------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/46/466f870d5dffa631458f9daf9e59a2348335f12f.svn-base000444 015705 000000 00000000422 13505462014 025562 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = asa_cat CSRCS = asa_cat.c OBJS = $(CSRCS:.c=.o) CLIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/e0/e08d885ab71fe6e402d51144a3c3ac6c7e37e05e.svn-base000444 015705 000000 00000000500 13505462014 025732 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_merge CSRCS = ALOS_merge.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/ce/ced9f23c282e5833e4929945fb578790380274f7.svn-base000444 015705 000000 00000003555 13505462013 025444 0ustar00sandwellwheel000000 000000 .TH OFFSET l "04/10/98 \(co 1998 David Sandwell" "offset.l 1.0" "SIOSAR Command" .SH NAME offset \- calculates offsets in range and azimuth between master and slave SCL images .SH SYNOPSIS .B offset .I master.head slave.head offset.dat [-V] .SH DESCRIPTION The .B offset command reads two SLC SAR images, (master and slave) and computes row and column offsets needed to align the slave to the master. These offsets are used by a program .B fitoffset to generate parameters for the SAR processor .B esarp. Here is an example run: .sp .br offset 22876_585.head 19369_585.head offset.dat .br .sp The second header file (created with the .B prm2gips command) contains initial offsets needed to bring the alignment to within 40 pixels. These initial offsets can be estimated using .B ers_baseline. .sp .br xshift = 0 yshift = 653 .sp .br Then one runs .B fitoffset to refine these parameters. .sp .br fitoffset offset.dat 50 .br stretch_r = -9.25792E-06 .br stretch_a = 4.23417E-06 .br yshift = 653 .br sub_int_a = 0.333923 .br xshift = -3 .br sub_int_r = 0.806506 .br .sp .TP 10 .I master.head gips header for master image must contain pointer to SLC file. Example pointer is .br input_file = 22876_585.SLC .TP 10 .I slave.head gips header for slave image must also contain pointer to SLC file. .TP 10 .I offset.dat ascii output file containing range and azimuthal offsets for numerous points in the master image. SNR of crosscorrelation is also output in the last column. .TP 10 .I -V optional verbose mode .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B esarp(l) prm2gips(l) ers_baseline(1) fitoffset(l) .sp .SH AUTHOR Howard Zebker. Modified by David T. Sandwell. .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/.svn/pristine/cb/cbbde935edf7975bbfceaa1ec31aee898cf443b7.svn-base000444 015705 000000 00000000362 13505462013 026561 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % clear sigx=1.0; sigy=4; nx=5; ny=17; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); GMTSAR_V5.7/.svn/pristine/cb/cbbb7a5c31bf9d2f93d51284656a6af25b281dad.svn-base000444 015705 000000 00000001642 13505462014 026160 0ustar00sandwellwheel000000 000000 include ../../config.mk LIB = lib/ibENVI.a DIRS = ASA_CAT Dop_orbit ENVI_decode ENVI_SLC_decode SCRIPT = scripts all: $(LIB) for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done $(INSTALL) $(SCRIPT)/dump_orbit_envi.pl $(bindir) $(INSTALL) $(SCRIPT)/dump_time_envi.pl $(bindir) $(INSTALL) $(SCRIPT)/find_auxi.pl $(bindir) $(INSTALL) $(SCRIPT)/ENVI_pre_process $(bindir) $(INSTALL) $(SCRIPT)/ENVI_SLC_pre_process $(bindir) uninstall: for d in $(DIRS); do \ (cd $$d; $(MAKE) uninstall); \ done rm -f $(bindir)/dump_orbit_envi.pl rm -f $(bindir)/dump_time_envi.pl rm -f $(bindir)/find_auxi.pl rm -f $(bindir)/ENVI_pre_process rm -f $(bindir)/ENVI_SLC_pre_process clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done (cd lib_src; $(MAKE) clean) $(LIB): mkdir -p lib (cd lib_src; $(MAKE) all) spotless: clean rm -rf lib GMTSAR_V5.7/.svn/pristine/e7/e762cfa76b90c30cbde14951d59f37a44c395ab9.svn-base000444 015705 000000 00000057536 13505462014 026003 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 04/06/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * Date : DTS made the set of xml functions into a library * * Date : EX made changed the way of getting tree (more robust) * ***************************************************************************/ #include #include #include #include #include "lib_defs.h" /* global variables needed for the xml library */ int N = 0; int MAX_TREE_SIZE = 600000; // size of the tree in maximum int MAX_CHAR_SIZE = 60000; // size of char arrays in maximum char STR[4000][60000]; int search_tree(tree *list, char *str, char *s_out, int type, int loc, int num) { /*************************************************************************** list - pointer to the tree structure str_out - pointer to the output string(everything will be output as string). str - is the string used for searching in the shape of /lev1_name/lev2_name/.../levN_name/ Note all the names should be seperated by '/', including the start and end with '/'. type - choice of return where 1 string to str_out 2 converted date to str_out with the format yyyyddd.frac_of_day 3 values in the names, for example will return 31 For names occurred in multiple locations, use loc and num to return the one at correct location. loc - the term to be repeatedly found, num - index of array. For example, to search /product/OrbitInformation/OrbitList/orbit/position/x/ and there are multiple state vectors under Orbitlist, set loc = 4, the 4th value of x After reading parameters in string format, use str2double to convert to double, use str2ints to convert to integer array, or use str2dbs to convert to double array. ***************************************************************************/ // search the num-th target at loc in str in the tree long int ct = 0; int n = 1, i, j, j1, j2; char s_name[200], *tmp_name, tmp_num[200]; while (strlocate(str, '/', n) != -1) { n++; } n = n - 2; tmp_name = (char *)malloc(MAX_CHAR_SIZE * sizeof(char)); for (i = 0; i < n; i++) { j1 = strlocate(str, '/', i + 1); j2 = strlocate(str, '/', i + 2); strasign(s_name, str, j1 + 1, j2 - 1); if (strncmp(list[ct].name, "OutOfSpace", 10) == 0) { cat_nums(tmp_num, list[ct].name); strcpy(tmp_name, STR[(int)str2double(tmp_num)]); } else { strcpy(tmp_name, list[ct].name); } while (ct < MAX_TREE_SIZE && ct >= 0 && strncmp(tmp_name, s_name, strlen(s_name)) != 0) { ct = list[ct].sibr; if (strncmp(list[ct].name, "OutOfSpace", 10) == 0) { cat_nums(tmp_num, list[ct].name); strcpy(tmp_name, STR[(int)str2double(tmp_num)]); } else { strcpy(tmp_name, list[ct].name); } } if (ct >= MAX_TREE_SIZE || ct < 0 || list[ct].firstchild == -1) { fprintf(stderr, "Unable to find designated string...after %ld searches..\n", ct); return (-1); } if (loc == i + 1) { if (num > 1) { for (j = 1; j < num; j++) { if (list[ct].sibr != -1) { ct = list[ct].sibr; } else if (list[ct].sibr == -1) { fprintf(stderr, "Unable to find designated string...\n"); return (-1); } } } } ct = list[ct].firstchild; } if (type == 1) { if (strncmp(list[ct].name, "OutOfSpace", 10) == 0) { cat_nums(s_name, list[ct].name); strcpy(s_out, STR[(int)str2double(s_name)]); } else { strcpy(s_out, list[ct].name); } } else if (type == 2) { cat_nums(s_name, list[ct].name); str_date2JD(s_out, s_name); } else if (type == 3) { cat_nums(s_out, list[list[ct].parent].name); } free(tmp_name); return (list[ct].parent); } int get_tree(FILE *fp, tree *list, int num_parse) { /* fp - file pointer to the xml file list - structure to hold the entire xml file num_parse - number of header lines to skip The xml file is required to have the names in pairs, either as value_of_par or as ... The current code can also deal with some not well shaped conditions like or lines not indented correctly like ... For questions, please send to xix016@ucsd.edu */ char *buffer; char tmp_char[200], tmp_s[200], *tmp_c; int i1, i2, j1, j2, have_slash; long int count = 0; // int *num_space; long int level[100] = {-1}, lev_ct = 0; char lev_rec[100][200]; buffer = (char *)malloc(MAX_CHAR_SIZE * sizeof(char)); tmp_c = (char *)malloc(MAX_CHAR_SIZE * sizeof(char)); for (i1 = 0; i1 < 100; i1++) { strcpy(lev_rec[i1], "CLOSED"); } // num_space = (int *)malloc(aprox_size*5*sizeof(int)); // fprintf(stderr," %d \n",sizeof(buffer)); for (i1 = 0; i1 < num_parse; i1++) { fgets(buffer, MAX_CHAR_SIZE * sizeof(char), fp); } while (fgets(buffer, MAX_CHAR_SIZE * sizeof(char), fp) != NULL) { // num_space[count] = space_count(buffer); i1 = strlocate(buffer, '<', 1); j1 = strlocate(buffer, '>', 1); i2 = strlocate(buffer, '<', 2); j2 = strlocate(buffer, '>', 2); if (i1 < 0 || j1 < 0) { fprintf(stderr, "Not an well formatted XML file...%d, %d\n", i1, j1); return (-1); } else if (buffer[i1 + 1] == '/') { have_slash = 1; strasign(tmp_char, buffer, i1 + 2, j1 - 1); } else { have_slash = 0; strasign(tmp_char, buffer, i1 + 1, j1 - 1); } // initinate the numbers list[count].sibr = -1; list[count].sibl = -1; list[count].parent = -1; list[count].firstchild = -1; // create tree // first node if (count == 0) { strcpy(list[count].name, tmp_char); level[lev_ct] = count; strcpy(lev_rec[lev_ct], tmp_char); if (i2 != -1 || (buffer[j1 - 1] == '/')) { list[count].firstchild = count + 1; create_child(list, buffer, j1 + 1, i2 - 1, count++); strcpy(lev_rec[lev_ct], "CLOSED"); } } // child else if (count != 0 && have_slash == 0 && strncmp(lev_rec[lev_ct], "CLOSED", 6) != 0) { lev_ct++; strcpy(list[count].name, tmp_char); strcpy(lev_rec[lev_ct], tmp_char); list[count].parent = level[lev_ct - 1]; list[count].sibl = -1; list[count].sibr = -1; list[count].firstchild = -1; list[level[lev_ct - 1]].firstchild = count; level[lev_ct] = count; if (i2 != -1 || (buffer[j1 - 1] == '/')) { list[count].firstchild = count + 1; create_child(list, buffer, j1 + 1, i2 - 1, count++); // fprintf(stderr,"CHILD: %s,LVL: %ld\n",tmp_char,lev_ct); strcpy(lev_rec[lev_ct], "CLOSED"); } } // sibling else if (count != 0 && have_slash == 0 && strncmp(lev_rec[lev_ct], "CLOSED", 6) == 0) { strcpy(list[count].name, tmp_char); strcpy(lev_rec[lev_ct], tmp_char); list[count].sibl = level[lev_ct]; list[count].sibr = -1; list[count].firstchild = -1; list[count].parent = list[level[lev_ct]].parent; list[level[lev_ct]].sibr = count; level[lev_ct] = count; if (i2 != -1 || (buffer[j1 - 1] == '/')) { list[count].firstchild = count + 1; create_child(list, buffer, j1 + 1, i2 - 1, count++); strcpy(lev_rec[lev_ct], "CLOSED"); } } // go to parent level else if (count != 0 && have_slash == 1) { // fprintf(stderr,"%s\n",tmp_char); if (strncmp(lev_rec[lev_ct - 1], "OutOfSpace", 10) == 0) { cat_nums(tmp_s, lev_rec[lev_ct - 1]); strcpy(tmp_c, STR[(int)str2double(tmp_s)]); } else { strcpy(tmp_c, lev_rec[lev_ct - 1]); } if (strncmp(tmp_char, tmp_c, strlen(tmp_char)) == 0) { strcpy(lev_rec[lev_ct - 1], "CLOSED"); lev_ct--; } } // printf("%s",buffer); // printf("%d %d %d\n",num_space[count],count,lev_ct); count++; } free(buffer); free(tmp_c); // fclose(fp); // free(num_space); return (1); } int space_count(char *str) { // count the number of spaces in front of each line int i, j; j = 0; for (i = 0; i < strlen(str); i++) { if (str[i] == ' ') { j = j + 1; continue; } else if (str[i] == '\t') { j = j + 2; continue; } else { break; } } return (j); } int itoa_xml(int d, char *buf, int base) { char *p = buf; char *p1, *p2; unsigned long ud = d; int divisor = 10; /* If %d is specified and D is minus, put `-' in the head. */ if (base == 'd' && d < 0) { *p++ = '-'; buf++; ud = -d; } else if (base == 'x') { divisor = 16; } /* Divide UD by DIVISOR until UD == 0. */ do { int remainder = ud % divisor; *p++ = (remainder < 10) ? remainder + '0' : remainder + 'a' - 10; } while (ud /= divisor); /* Terminate BUF. */ *p = 0; /* Reverse BUF. */ p1 = buf; p2 = p - 1; while (p1 < p2) { char tmp = *p1; *p1 = *p2; *p2 = tmp; p1++; p2--; } return (1); } int strasign(char *str_out, char *str, int n1, int n2) { // asign n1-n2 of str to str_out int i; if (n1 > n2) { return (-1); } if (n2 - n1 > 199) { // fprintf(stderr,"OutOfSpace %d, n1: %d, n2 %d\n",N,n1,n2); strcpy(str_out, "OutOfSpace"); char c[100]; itoa_xml(N, c, 'd'); strcat(str_out, c); // strcpy(STR[N],str); // fprintf(stderr,"%s\n",str_out); // STR[N] = (char *)malloc(MAX_CHAR_SIZE*sizeof(char)); for (i = n1; i <= n2; i++) { STR[N][i - n1] = str[i]; } STR[N][i - n1] = '\0'; // fprintf(stderr,"%s\n",STR[N]); N++; return (1); } for (i = n1; i <= n2; i++) { str_out[i - n1] = str[i]; } str_out[n2 - n1 + 1] = '\0'; return (1); } int strlocate(char *str, int c, int n) { // locate the n-th c in str int i, j = 0; for (i = 0; i < strlen(str); i++) { if (str[i] == (char)c) { j++; if (j == n) { return (i); } } } return (-1); } int create_child(tree *T, char *str, int i, int j, int ct) { // create the firstchild of a tree-element if (j >= i) { strasign(T[ct + 1].name, str, i, j); } else { T[ct + 1].name[0] = '\0'; } T[ct + 1].sibr = -1; T[ct + 1].sibl = -1; T[ct + 1].parent = ct; T[ct + 1].firstchild = -1; // num_space[ct+1] = num_space[ct]; return (1); } int show_tree(tree *T, int ct, int lvl) { // print out the tree if (ct == 0) { printf("In the brackets the numbers are (count, child, sibling)\n"); } int i; for (i = 0; i < 2 * lvl; i++) { putchar(' '); } if (T[ct].sibr == -1 && T[ct].firstchild == -1) { putchar('='); } if (strncmp(T[ct].name, "OutOfSpace", 10) == 0) { char c[100]; cat_nums(c, T[ct].name); printf("%s (%d,%d,%d)\n", STR[(int)str2double(c)], ct, T[ct].firstchild, T[ct].sibr); } else { printf("%s (%d,%d,%d)\n", T[ct].name, ct, T[ct].firstchild, T[ct].sibr); } if (T[ct].firstchild != -1) { show_tree(T, T[ct].firstchild, lvl + 1); } if (T[ct].sibr != -1) { show_tree(T, T[ct].sibr, lvl); } return (1); } int cat_nums(char *str_out, char *str) { // cat out the numbers in str to str_out int i = 0, j = 0; while (str[i] != '\0') { if (str[i] >= '0' && str[i] <= '9') { str_out[j++] = str[i]; } i++; } str_out[j] = '\0'; return (j); } double date2MJD(int yr, int mo, int day, int hr, int min, double sec) { /* convert to date to MJD */ double part1, part2; double MJD; part1 = 367 * ((double)yr) - floor(7 * ((double)yr + floor(((double)mo + 9) / 12.0)) / 4.0) + floor(275 * (double)mo / 9.0) + (double)day; part2 = -678987 + ((sec / 60.0 + (double)min) / 60.0 + (double)hr) / 24.0; MJD = part1 + part2; return MJD; } int str_date2JD(char *str_JD, char *str_date) { double str2double(char *); int yr, mo, day, hr, min, doy; double sec = 0, MJDday, MJDyr, MJDfrac; char tmp[30]; strasign(tmp, str_date, 0, 3); yr = (int)str2double(tmp); strasign(tmp, str_date, 4, 5); mo = (int)str2double(tmp); strasign(tmp, str_date, 6, 7); day = (int)str2double(tmp); strasign(tmp, str_date, 8, 9); hr = (int)str2double(tmp); strasign(tmp, str_date, 10, 11); min = (int)str2double(tmp); strasign(tmp, str_date, 12, 13); sec = sec + str2double(tmp); strasign(tmp, str_date, 14, 19); sec = sec + str2double(tmp) / 1000000.0; // printf("%d %d %d %d %d %.10f\n",yr,mo,day,hr,min,sec); MJDyr = date2MJD(yr, 1, 1, 0, 0, 0); MJDday = date2MJD(yr, mo, day, 0, 0, 0); MJDfrac = (((hr * 60.) + min) * 60 + sec) / 86400; doy = (int)(MJDday - MJDyr + .1); sprintf(str_JD, "%.12f", doy + MJDfrac); return (1); } double str2double(char *str) { int i, n, m; double value = 0.0, value1 = 0.0, value2 = 0.0, sgn = 1.0; char tmp1[100], tmp2[100], tmp[100], str_tmp[100]; strasign(str_tmp, str, 0, strlen(str)); // decide the sign if (str_tmp[0] == '-' || str_tmp[0] == '+') { if (str_tmp[0] == '-') { sgn = -1.0; } strasign(tmp, str_tmp, 1, strlen(str_tmp)); strasign(str_tmp, tmp, 0, strlen(tmp)); } // decide where it is sci form if (strlocate(str_tmp, 'e', 1) != -1 || strlocate(str_tmp, 'E', 1) != -1) { n = strlocate(str_tmp, 'e', 1); if (n == -1) { n = strlocate(str_tmp, 'E', 1); } strasign(tmp2, str_tmp, n + 1, strlen(str)); // exponential part strasign(tmp1, str_tmp, 0, n - 1); // digits part } else { strasign(tmp1, str_tmp, 0, strlen(str_tmp)); // digits part } // decide whether it has fraction n = strlocate(tmp1, '.', 1); if (n != -1) { strasign(tmp, tmp1, 0, n - 1); m = strlen(tmp); for (i = 0; i < m; i++) { value1 = value1 + (double)((int)tmp[i] - 48) * pow(10.0, (double)(m - i - 1)); } m = strlen(tmp1); strasign(tmp, tmp1, n + 1, m); m = strlen(tmp); for (i = 0; i < m; i++) { value2 = value2 + (double)((int)tmp[i] - 48) * pow(10.0, (double)(-i - 1)); } // puts(tmp2); // fprintf(stderr,"%.12f %.12f %.12f\n",value1,value2,str2double(tmp2)); value = value1 + value2; } else { m = strlen(tmp1); for (i = 0; i < m; i++) { value = value + (double)((int)tmp1[i] - 48) * pow(10.0, (double)(m - i - 1)); } } if (strlocate(str_tmp, 'e', 1) != -1 || strlocate(str_tmp, 'E', 1) != -1) { value = value * pow(10.0, str2double(tmp2)); } return (value * sgn); } int str2ints(int *a, char *c) { int i = 0, n1 = 0, n2 = 0, len; char tmp_c[100]; len = strlen(c); for (n2 = 0; n2 < len; n2++) { if (strncmp(&c[n2], " ", 1) == 0) { strasign(tmp_c, c, n1, n2 - 1); a[i] = (int)str2double(tmp_c); i++; n1 = ++n2; } } n2 = len; if (n2 > n1 + 1) { strasign(tmp_c, c, n1, n2); a[i] = (int)str2double(tmp_c); i++; } /* while((n2 = strlocate(c,' ',i+1)) != -1){ strasign(tmp_c,c,n1,n2-1); a[i] = (int)str2double(tmp_c); i++; n1 = n2+1; } */ return (i); } int str2dbs(double *a, char *c) { int i = 0, n1 = 0, n2 = 0, len; char tmp_c[100]; len = strlen(c); for (n2 = 0; n2 < len; n2++) { if (c[n2] == ' ' || c[n2] == '\0' || c[n2] == '\n') { strasign(tmp_c, c, n1, n2 - 1); a[i] = str2double(tmp_c); i++; n1 = ++n2; } } n2 = len; if (n2 > n1 + 1) { strasign(tmp_c, c, n1, n2); a[i] = str2double(tmp_c); i++; } /* while((n2 = strlocate(c,' ',i+1)) != -1){ strasign(tmp_c,c,n1,n2-1); a[i] = (int)str2double(tmp_c); i++; n1 = n2+1; } */ return (i); } int null_MEM_STR() { int i; for (i = 0; i < 100; i++) { STR[i][0] = '\0'; } N = 0; return (1); } int prefix_str(char *a, char *b) { // put b infront of a char *str; str = (char *)malloc((strlen(a) + strlen(b)) * 2 * sizeof(char)); strcpy(str, b); strcat(str, a); strcpy(a, str); free(str); return (1); } int print_space(int j, FILE *fp) { int i; for (i = 0; i < j; i++) fprintf(fp, "%s", " "); return (1); } /* int find_assembly(struct tree **T, int ct, int ii) { char str[2000],str_out[60000]; int jj; str[0] = '\0'; jj = ct; while(T[ii][jj].parent != -1) { prefix_str(str,"/"); sscanf(T[ii][jj].name,"%s ",str_out); prefix_str(str,str_out); jj = T[ii][jj].parent; } prefix_str(str,"/"); sscanf(T[ii][jj].name,"%s ",str_out); prefix_str(str,str_out); prefix_str(str,"/"); //fprintf(stderr,"%s\n",str); jj = search_tree(T[ii],str,str_out,1,0,1); //search_tree(tree *list, char *str, char *s_out, int type, int loc, int num) //fprintf(stderr,"%d found...\n",jj); return(jj); } */ int print_tree(struct tree *T, int ct, int mode, FILE *fp) { char str[200]; if (strncmp(T[ct].name, "OutOfSpace", 10) == 0) { char c[100]; cat_nums(c, T[ct].name); if (mode == 1) { fprintf(fp, "<%s>\n", STR[(int)str2double(c)]); } else if (mode == 2) { sscanf(STR[(int)str2double(c)], "%s ", str); fprintf(fp, "\n", str); } else { sscanf(STR[(int)str2double(c)], "%s ", str); if (strncmp(T[T[ct].firstchild].name, "OutOfSpace", 10) == 0) { char c2[100]; cat_nums(c2, T[T[ct].firstchild].name); fprintf(fp, "<%s>%s\n", STR[(int)str2double(c)], STR[(int)str2double(c2)], str); } else { fprintf(fp, "<%s>%s\n", STR[(int)str2double(c)], T[T[ct].firstchild].name, str); } } } else { if (mode == 1) { fprintf(fp, "<%s>\n", T[ct].name); } else if (mode == 2) { sscanf(T[ct].name, "%s ", str); fprintf(fp, "\n", str); } else { sscanf(T[ct].name, "%s ", str); if (strncmp(T[T[ct].firstchild].name, "OutOfSpace", 10) == 0) { char c2[100]; cat_nums(c2, T[T[ct].firstchild].name); fprintf(fp, "<%s>%s\n", T[ct].name, STR[(int)str2double(c2)], str); } else { fprintf(fp, "<%s>%s\n", T[ct].name, T[T[ct].firstchild].name, str); } } } return (1); } int assemble_trees(int nfiles, struct tree **T, int ct, int lvl, FILE *fp) { int j, k; if (ct == 0) fprintf(fp, "\n"); print_space(2 * lvl, fp); /* if(T[0][ct].sibr == -1 && T[0][ct].firstchild == -1) { putchar('='); } */ if (T[0][ct].firstchild != -1 && T[0][T[0][ct].firstchild].firstchild == -1) { print_tree(T[0], ct, 3, fp); /* for (i=1;i=0) { if (strncmp(T[0][ct].name,T[i][j].name,strlen(T[0][ct].name)-1) == 0 && strncmp(T[0][T[0][ct].firstchild].name,T[i][T[i][j].firstchild].name,strlen(T[0][T[0][ct].firstchild].name)-1) == 0) mark = 0; else mark = 1; if (mark == 1) { print_space(2*lvl,fp); print_tree(T[i],j,3,fp); } } } */ if (T[0][ct].sibr != -1) { assemble_trees(nfiles, T, T[0][ct].sibr, lvl, fp); } else { j = ct; k = 1; while (T[0][j].sibr == -1 & j != 0) { print_space(2 * (lvl - k), fp); print_tree(T[0], T[0][j].parent, 2, fp); j = T[0][j].parent; k++; } } } else { print_tree(T[0], ct, 1, fp); /* for (i=1;i=0) { if (strncmp(T[0][ct].name,T[i][j].name,strlen(T[0][ct].name)-1) == 0) mark = 0; else mark = 1; if (mark == 1) { print_space(2*lvl,fp); print_tree(T[i],j,1,fp); } } } */ if (T[0][ct].firstchild != -1) { assemble_trees(nfiles, T, T[0][ct].firstchild, lvl + 1, fp); } if (T[0][ct].sibr != -1) { assemble_trees(nfiles, T, T[0][ct].sibr, lvl, fp); } if (T[0][ct].firstchild == -1 && T[0][ct].sibr == -1) { j = ct; k = 1; while (T[0][j].sibr == -1 & j != 0) { print_space(2 * (lvl - k), fp); print_tree(T[0], T[0][j].parent, 2, fp); j = T[0][j].parent; k++; } } } return (1); } /* add_branch(int n, struct tree **T, str, ct) { int i; char str_out[60000]; i = search_tree(T[0],str,str_out,1,0,1); return(1); } */ /* int add_index(struct tree *T, int ct, int ii) { int i; //printf("hahaha %d\n",ii); for (i=0;i read configuration parameters from file\n"\ " -o write output to file\n"\ " -a read amplitude data from file\n"\ " -A read power data from file\n"\ " -m read interferogram magnitude data from file\n"\ " -c read correlation data from file\n"\ " -e read coarse unwrapped-phase estimate from file\n"\ " -w read scalar weights from file\n"\ " -b perpendicular baseline (meters, topo mode only)\n"\ " -p Lp-norm parameter p\n"\ " -i do initialization and exit\n"\ " -n do not use statistical costs (with -p or -i)\n"\ " -u infile is already unwrapped; initialization not needed\n"\ " -q quantify cost of unwrapped input file then exit\n"\ " -g grow connected components mask and write to file\n"\ " -G grow connected components mask for unwrapped input\n"\ " -l log runtime parameters to file\n"\ " -v give verbose output\n"\ " --mst use MST algorithm for initialization (default)\n"\ " --mcf use MCF algorithm for initialization\n"\ " --aa read amplitude from next two files\n"\ " --AA read power from next two files\n"\ " --costinfile read statistical costs from file\n"\ " --costoutfile write statistical costs to file\n"\ " --tile unwrap as nrow x ncol tiles\n"\ " --nproc number of processors used in tile mode\n"\ " --assemble assemble unwrapped tiles in dir\n"\ " --piece unwrap subset of image\n" \ " --debug, --dumpall dump all intermediate data arrays\n"\ " --copyright, --info print copyright and bug report info\n"\ " -h, --help print this help text\n"\ "\n" #define OPTIONSHELPBRIEF\ "usage: snaphu [options] infile linelength [options]\n"\ "most common options:\n"\ " -t use topography mode costs (default)\n"\ " -d use deformation mode costs\n"\ " -s use smooth-solution mode costs\n"\ " -f read configuration parameters from file\n"\ " -o write output to file\n"\ " -a read amplitude data from file\n"\ " -c read correlation data from file\n"\ " -b perpendicular baseline (meters)\n"\ " -i do initialization and exit\n"\ " -l log runtime parameters to file\n"\ " -v give verbose output\n"\ " --mst use MST algorithm for initialization (default)\n"\ " --mcf use MCF algorithm for initialization\n"\ "\n"\ "type snaphu -h for a complete list of options\n"\ "\n" #define COPYRIGHT\ "Copyright 2002 Board of Trustees, Leland Stanford Jr. University\n"\ "\n"\ "Except as noted below, permission to use, copy, modify, and\n"\ "distribute, this software and its documentation for any purpose is\n"\ "hereby granted without fee, provided that the above copyright notice\n"\ "appear in all copies and that both that copyright notice and this\n"\ "permission notice appear in supporting documentation, and that the\n"\ "name of the copyright holders be used in advertising or publicity\n"\ "pertaining to distribution of the software with specific, written\n"\ "prior permission, and that no fee is charged for further distribution\n"\ "of this software, or any modifications thereof. The copyright holder\n"\ "makes no representations about the suitability of this software for\n"\ "any purpose. It is provided \"as is\" without express or implied\n"\ "warranty.\n"\ "\n"\ "THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS\n"\ "SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n"\ "FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY\n"\ "SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER\n"\ "RESULTING FROM LOSS OF USE, DATA, PROFITS, QPA OR GPA, WHETHER IN AN\n"\ "ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT\n"\ "OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"\ "\n"\ "The parts of this software derived from the CS2 minimum cost flow\n"\ "solver written by A. V. Goldberg and B. Cherkassky are governed by the\n"\ "terms of the copyright holder of that software. Permission has been\n"\ "granted to use and distrubute that software for strictly noncommercial\n"\ "purposes as part of this package, provided that the following\n"\ "copyright notice from the original distribution and URL accompany the\n"\ "software:\n"\ "\n"\ " COPYRIGHT C 1995 IG Systems, Inc. Permission to use for\n"\ " evaluation purposes is granted provided that proper\n"\ " acknowledgments are given. For a commercial licence, contact\n"\ " igsys@eclipse.net.\n"\ "\n"\ " This software comes with NO WARRANTY, expressed or implied. By way\n"\ " of example, but not limitation, we make no representations of\n"\ " warranties of merchantability or fitness for any particular\n"\ " purpose or that the use of the software components or\n"\ " documentation will not infringe any patents, copyrights,\n"\ " trademarks, or other rights.\n"\ "\n"\ " http://www.igsystems.com/cs2\n"\ "\n"\ "\n"\ "Send snaphu bug reports to Curtis W. Chen (curtis@nova.stanford.edu).\n"\ "\n" /********************/ /* type definitions */ /********************/ /* node data structure */ typedef struct nodeST{ short row,col; /* row, col of this node */ unsigned long level; /* tree level */ struct nodeST *next; /* ptr to next node in thread or bucket */ struct nodeST *prev; /* ptr to previous node in thread or bucket */ struct nodeST *pred; /* parent node in tree */ long group; /* for marking label */ long incost,outcost; /* costs to, from root of tree */ }nodeT; /* arc cost data structure */ typedef struct costST{ short offset; /* offset of wrapped phase gradient from 0 */ short sigsq; /* variance due to decorrelation */ short dzmax; /* largest discontinuity on shelf */ short laycost; /* cost of layover discontinuity shelf */ }costT; /* arc cost data structure for smooth costs */ typedef struct smoothcostST{ short offset; /* offset of wrapped phase gradient from 0 */ short sigsq; /* variance due to decorrelation */ }smoothcostT; /* incremental cost data structure */ typedef struct incrcostST{ short poscost; /* cost for positive flow increment */ short negcost; /* cost for negative flow increment */ }incrcostT; /* arc candidate data structure */ typedef struct candidateST{ nodeT *from, *to; /* endpoints of candidate arc */ long violation; /* magnitude of arc violation */ short arcrow,arccol; /* indexes into arc arrays */ signed char arcdir; /* direction of arc (1=fwd, -1=rev) */ }candidateT; /* bucket data structure */ typedef struct bucketST{ long size; /* number of buckets in list */ long curr; /* current bucket index */ long maxind; /* maximum bucket index */ long minind; /* smallest (possibly negative) bucket index */ nodeT **bucket; /* array of first nodes in each bucket */ nodeT **bucketbase; /* real base of bucket array */ signed char wrapped; /* flag denoting wrapped circular buckets */ }bucketT; /* secondary arc data structure */ typedef struct scndryarcST{ short arcrow; /* row of arc in secondary network array */ short arccol; /* col of arc in secondary network array */ nodeT *from; /* secondary node at tail of arc */ nodeT *to; /* secondary node at head of arc */ signed char fromdir; /* direction from which arc enters head */ }scndryarcT; /* supplementary data structure for secondary nodes */ typedef struct nodesuppST{ short row; /* row of node in primary network problem */ short col; /* col of node in primary network problem */ nodeT **neighbornodes; /* pointers to neighboring secondary nodes */ scndryarcT **outarcs; /* pointers to secondary arcs to neighbors */ short noutarcs; /* number of arcs from this node */ }nodesuppT; /* run-time parameter data structure */ typedef struct paramST{ /* SAR and geometry parameters */ double orbitradius; /* radius of platform orbit (meters) */ double altitude; /* SAR altitude (meters) */ double earthradius; /* radius of earth (meters) */ double bperp; /* nominal perpendiuclar baseline (meters) */ signed char transmitmode; /* transmit mode (PINGPONG or SINGLEANTTRANSMIT) */ double baseline; /* baseline length (meters, always postive) */ double baselineangle; /* baseline angle above horizontal (rad) */ long nlooksrange; /* number of looks in range for input data */ long nlooksaz; /* number of looks in azimuth for input data */ long nlooksother; /* number of nonspatial looks for input data */ double ncorrlooks; /* number of independent looks in correlation est */ long ncorrlooksrange; /* number of looks in range for correlation */ long ncorrlooksaz; /* number of looks in azimuth for correlation */ double nearrange; /* slant range to near part of swath (meters) */ double dr; /* range bin spacing (meters) */ double da; /* azimuth bin spacing (meters) */ double rangeres; /* range resolution (meters) */ double azres; /* azimuth resolution (meters) */ double lambda; /* wavelength (meters) */ /* scattering model parameters */ double kds; /* ratio of diffuse to specular scattering */ double specularexp; /* power specular scattering component */ double dzrcritfactor; /* fudge factor for linearizing scattering model */ signed char shadow; /* allow discontinuities from shadowing */ double dzeimin; /* lower limit for backslopes (if shadow = FALSE) */ long laywidth; /* width of window for summing layover brightness */ double layminei; /* threshold brightness for assuming layover */ double sloperatiofactor;/* fudge factor for linearized scattering slopes */ double sigsqei; /* variance (dz, meters) due to uncertainty in EI */ /* decorrelation model parameters */ double drho; /* step size of correlation-slope lookup table */ double rhosconst1,rhosconst2;/* for calculating rho0 in biased rho */ double cstd1,cstd2,cstd3;/* for calculating correlation power given nlooks */ double defaultcorr; /* default correlation if no correlation file */ double rhominfactor; /* threshold for setting unbiased correlation to 0 */ /* pdf model parameters */ double dzlaypeak; /* range pdf peak for no discontinuity when bright */ double azdzfactor; /* fraction of dz in azimuth vs. rnage */ double dzeifactor; /* nonlayover dz scale factor */ double dzeiweight; /* weight to give dz expected from intensity */ double dzlayfactor; /* layover regime dz scale factor */ double layconst; /* normalized constant pdf of layover edge */ double layfalloffconst; /* factor of sigsq for layover cost increase */ long sigsqshortmin; /* min short value for costT variance */ double sigsqlayfactor; /* fration of ambiguityheight^2 for layover sigma */ /* deformation mode parameters */ double defoazdzfactor; /* scale for azimuth ledge in defo cost function */ double defothreshfactor;/* factor of rho0 for discontinuity threshold */ double defomax; /* max discontinuity (cycles) from deformation */ double sigsqcorr; /* variance in measured correlation */ double defolayconst; /* layconst for deformation mode */ /* algorithm parameters */ signed char eval; /* evaluate unwrapped input file if TRUE */ signed char unwrapped; /* input file is unwrapped if TRUE */ signed char regrowconncomps;/* grow connected components and exit if TRUE */ signed char initonly; /* exit after initialization if TRUE */ signed char initmethod; /* MST or MCF initialization */ signed char costmode; /* statistical cost mode */ signed char dumpall; /* dump intermediate files */ signed char verbose; /* print verbose output */ signed char amplitude; /* intensity data is amplitude, not power */ signed char havemagnitude; /* flag to create correlation from other inputs */ signed char flipphasesign; /* flag to flip phase and flow array signs */ long initmaxflow; /* maximum flow for initialization */ long arcmaxflowconst; /* units of flow past dzmax to use for initmaxflow */ long maxflow; /* max flow for tree solve looping */ long krowei, kcolei; /* size of boxcar averaging window for mean ei */ long kpardpsi; /* length of boxcar for mean wrapped gradient */ long kperpdpsi; /* width of boxcar for mean wrapped gradient */ double threshold; /* thershold for numerical dzrcrit calculation */ double initdzr; /* initial dzr for numerical dzrcrit calc. (m) */ double initdzstep; /* initial stepsize for spatial decor slope calc. */ double maxcost; /* min and max float values for cost arrays */ double costscale; /* scale factor for discretizing to integer costs */ double costscaleambight;/* ambiguity height for auto costs caling */ double dnomincangle; /* step size for range-varying param lookup table */ long srcrow,srccol; /* source node location */ double p; /* power for Lp-norm solution (less than 0 is MAP) */ long nshortcycle; /* number of points for one cycle in short int dz */ double maxnewnodeconst; /* number of nodes added to tree on each iteration */ long maxnflowcycles; /* max number of cycles to consider nflow done */ double maxcyclefraction;/* ratio of max cycles to pixels */ long sourcemode; /* 0, -1, or 1, determines how tree root is chosen */ long cs2scalefactor; /* scale factor for cs2 initialization (eg, 3-30) */ /* tiling parameters */ long ntilerow; /* number of tiles in azimuth */ long ntilecol; /* number of tiles in range */ long rowovrlp; /* pixels of overlap between row tiles */ long colovrlp; /* pixels of overlap between column tiles */ long piecefirstrow; /* first row (indexed from 1) for piece mode */ long piecefirstcol; /* first column (indexed from 1) for piece mode */ long piecenrow; /* number of rows for piece mode */ long piecencol; /* number of rows for piece mode */ long tilecostthresh; /* maximum cost within single reliable tile region */ long minregionsize; /* minimum number of pixels in a region */ long nthreads; /* number of parallel processes to run */ long scndryarcflowmax; /* max flow increment for which to keep cost data */ double tileedgeweight; /* weight applied to tile-edge secondary arc costs */ signed char assembleonly; /* flag for assemble-only (no unwrap) mode */ signed char rmtmptile; /* flag for removing temporary tile files */ char tiledir[MAXSTRLEN];/* directory for temporary tile files */ /* connected component parameters */ double minconncompfrac; /* min fraction of pixels in connected component */ long conncompthresh; /* cost threshold for connected component */ long maxncomps; /* max number of connected components */ }paramT; /* input file name data structure */ typedef struct infileST{ char infile[MAXSTRLEN]; /* input interferogram */ char magfile[MAXSTRLEN]; /* interferogram magnitude (optional) */ char ampfile[MAXSTRLEN]; /* image amplitude or power file */ char ampfile2[MAXSTRLEN]; /* second amplitude or power file */ char weightfile[MAXSTRLEN]; /* arc weights */ char corrfile[MAXSTRLEN]; /* correlation file */ char estfile[MAXSTRLEN]; /* unwrapped estimate */ char costinfile[MAXSTRLEN]; /* file from which cost data is read */ signed char infileformat; /* input file format */ signed char unwrappedinfileformat; /* input file format if unwrapped */ signed char magfileformat; /* interferogram magnitude file format */ signed char corrfileformat; /* correlation file format */ signed char weightfileformat; /* weight file format */ signed char ampfileformat; /* amplitude file format */ signed char estfileformat; /* unwrapped-estimate file format */ }infileT; /* output file name data structure */ typedef struct outfileST{ char outfile[MAXSTRLEN]; /* unwrapped output */ char initfile[MAXSTRLEN]; /* unwrapped initialization */ char flowfile[MAXSTRLEN]; /* flows of unwrapped solution */ char eifile[MAXSTRLEN]; /* despckled, normalized intensity */ char rowcostfile[MAXSTRLEN]; /* statistical azimuth cost array */ char colcostfile[MAXSTRLEN]; /* statistical range cost array */ char mstrowcostfile[MAXSTRLEN]; /* scalar initialization azimuth costs */ char mstcolcostfile[MAXSTRLEN]; /* scalar initialization range costs */ char mstcostsfile[MAXSTRLEN]; /* scalar initialization costs (all) */ char corrdumpfile[MAXSTRLEN]; /* correlation coefficient magnitude */ char rawcorrdumpfile[MAXSTRLEN]; /* correlation coefficient magnitude */ char conncompfile[MAXSTRLEN]; /* connected component map or mask */ char costoutfile[MAXSTRLEN]; /* file to which cost data is written */ char logfile[MAXSTRLEN]; /* file to which parmeters are logged */ signed char outfileformat; /* output file format */ }outfileT; /* tile parameter data structure */ typedef struct tileparamST{ long firstcol; /* first column of tile to process (index from 0) */ long ncol; /* number of columns in tile to process */ long firstrow; /* first row of tile to process (index from 0) */ long nrow; /* number of rows in tile to process */ }tileparamT; /* type for total cost of solution (may overflow long) */ typedef double totalcostT; /* typedef long long totalcostT; */ #define INITTOTALCOST LARGEFLOAT /* #define INITTOTALCOST LARGELONGLONG */ /***********************/ /* function prototypes */ /***********************/ /* functions in snaphu.c */ void Unwrap(infileT *infiles, outfileT *outfiles, paramT *params, long linelen, long nlines); void UnwrapTile(infileT *infiles, outfileT *outfiles, paramT *params, tileparamT *tileparams, long nlines, long linelen); /* functions in snaphu_tile.c */ void SetupTile(long nlines, long linelen, paramT *params, tileparamT *tileparams, outfileT *outfiles, outfileT *tileoutfiles, long tilerow, long tilecol); void GrowRegions(void **costs, short **flows, long nrow, long ncol, incrcostT **incrcosts, outfileT *outfiles, paramT *params); void GrowConnCompsMask(void **costs, short **flows, long nrow, long ncol, incrcostT **incrcosts, outfileT *outfiles, paramT *params); long ThickenCosts(incrcostT **incrcosts, long nrow, long ncol); nodeT *RegionsNeighborNode(nodeT *node1, long *arcnumptr, nodeT **nodes, long *arcrowptr, long *arccolptr, long nrow, long ncol); void ClearBuckets(bucketT *bkts); void MergeRegions(nodeT **nodes, nodeT *source, long *regionsizes, long closestregion, long nrow, long ncol); void RenumberRegion(nodeT **nodes, nodeT *source, long newnum, long nrow, long ncol); void AssembleTiles(outfileT *outfiles, paramT *params, long nlines, long linelen); void ReadNextRegion(long tilerow, long tilecol, long nlines, long linelen, outfileT *outfiles, paramT *params, short ***nextregionsptr, float ***nextunwphaseptr, void ***nextcostsptr, long *nextnrowptr, long *nextncolptr); void SetTileReadParams(tileparamT *tileparams, long nexttilenlines, long nexttilelinelen, long tilerow, long tilecol, long nlines, long linelen, paramT *params); void ReadEdgesAboveAndBelow(long tilerow, long tilecol, long nlines, long linelen, paramT *params, outfileT *outfiles, short *regionsabove, short *regionsbelow, float *unwphaseabove, float *unwphasebelow, void *costsabove, void *costsbelow); void TraceRegions(short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, float **unwphase, float **nextunwphase, float **lastunwphase, float *unwphaseabove, float *unwphasebelow, void **costs, void **nextcosts, void **lastcosts, void *costsabove, void *costsbelow, long prevnrow, long prevncol, long tilerow, long tilecol, long nrow, long ncol, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, long ***scndrycosts, short *nscndrynodes, short *nscndryarcs, long *totarclens, short **bulkoffsets, paramT *params); long FindNumPathsOut(nodeT *from, paramT *params, long tilerow, long tilecol, long nnrow, long nncol, short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, long prevncol); void RegionTraceCheckNeighbors(nodeT *from, nodeT **nextnodeptr, nodeT **primarynodes, short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, long tilerow, long tilecol, long nnrow, long nncol, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, long *nnewnodesptr, long *nnewarcsptr, long flowmax, long nrow, long ncol, long prevnrow, long prevncol, paramT *params, void **costs, void **rightedgecosts, void **loweredgecosts, void **leftedgecosts, void **upperedgecosts, short **flows, short **rightedgeflows, short **loweredgeflows, short **leftedgeflows, short **upperedgeflows, long ***scndrycosts, nodeT ***updatednontilenodesptr, long *nupdatednontilenodesptr, long *updatednontilenodesizeptr, short **inontilenodeoutarcptr, long *totarclenptr); void SetUpperEdge(long ncol, long tilerow, long tilecol, void **voidcosts, void *voidcostsabove, float **unwphase, float *unwphaseabove, void **voidupperedgecosts, short **upperedgeflows, paramT *params, short **bulkoffsets); void SetLowerEdge(long nrow, long ncol, long tilerow, long tilecol, void **voidcosts, void *voidcostsbelow, float **unwphase, float *unwphasebelow, void **voidloweredgecosts, short **loweredgeflows, paramT *params, short **bulkoffsets); void SetLeftEdge(long nrow, long prevncol, long tilerow, long tilecol, void **voidcosts, void **voidlastcosts, float **unwphase, float **lastunwphase, void **voidleftedgecosts, short **leftedgeflows, paramT *params, short **bulkoffsets); void SetRightEdge(long nrow, long ncol, long tilerow, long tilecol, void **voidcosts, void **voidnextcosts, float **unwphase, float **nextunwphase, void **voidrightedgecosts, short **rightedgeflows, paramT *params, short **bulkoffsets); void TraceSecondaryArc(nodeT *primaryhead, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, long ***scndrycosts, long *nnewnodesptr, long *nnewarcsptr, long tilerow, long tilecol, long flowmax, long nrow, long ncol, long prevnrow, long prevncol, paramT *params, void **tilecosts, void **rightedgecosts, void **loweredgecosts, void **leftedgecosts, void **upperedgecosts, short **tileflows, short **rightedgeflows, short **loweredgeflows, short **leftedgeflows, short **upperedgeflows, nodeT ***updatednontilenodesptr, long *nupdatednontilenodesptr, long *updatednontilenodesizeptr, short **inontilenodeoutarcptr, long *totarclenptr); nodeT *FindScndryNode(nodeT **scndrynodes, nodesuppT **nodesupp, long tilenum, long primaryrow, long primarycol); void IntegrateSecondaryFlows(long linelen, long nlines, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, short *nscndryarcs, short **scndryflows, short **bulkoffsets, outfileT *outfiles, paramT *params); void ParseSecondaryFlows(long tilenum, short *nscndryarcs, short **tileflows, short **regions, short **scndryflows, nodesuppT **nodesupp, scndryarcT **scndryarcs, long nrow, long ncol, long ntilerow, long ntilecol, paramT *params); /* functions in snaphu_solver.c */ long TreeSolve(nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, nodeT *source, candidateT **candidatelistptr, candidateT **candidatebagptr, long *candidatelistsizeptr, long *candidatebagsizeptr, bucketT *bkts, short **flows, void **costs, incrcostT **incrcosts, nodeT ***apexes, signed char **iscandidate, long ngroundarcs, long nflow, float **mag, float **wrappedphase, char *outfile, long nnoderow, short *nnodesperrow, long narcrow, short *narcsperrow, long nrow, long ncol, outfileT *outfiles, paramT *params); void AddNewNode(nodeT *from, nodeT *to, long arcdir, bucketT *bkts, long nflow, incrcostT **incrcosts, long arcrow, long arccol, paramT *params); void CheckArcReducedCost(nodeT *from, nodeT *to, nodeT *apex, long arcrow, long arccol, long arcdir, long nflow, nodeT **nodes, nodeT *ground, candidateT **candidatebagptr, long *candidatebagnextptr, long *candidatebagsizeptr, incrcostT **incrcosts, signed char **iscandidate, paramT *params); long InitTree(nodeT *source, nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, long ngroundarcs, bucketT *bkts, long nflow, incrcostT **incrcosts, nodeT ***apexes, signed char **iscandidate, long nnoderow, short *nnodesperrow, long narcrow, short *narcsperrow, long nrow, long ncol, paramT *params); nodeT *FindApex(nodeT *from, nodeT *to); int CandidateCompare(const void *c1, const void *c2); nodeT *NeighborNodeGrid(nodeT *node1, long arcnum, long *upperarcnumptr, nodeT **nodes, nodeT *ground, long *arcrowptr, long *arccolptr, long *arcdirptr, long nrow, long ncol, nodesuppT **nodesupp); nodeT *NeighborNodeNonGrid(nodeT *node1, long arcnum, long *upperarcnumptr, nodeT **nodes, nodeT *ground, long *arcrowptr, long *arccolptr, long *arcdirptr, long nrow, long ncol, nodesuppT **nodesupp); void GetArcGrid(nodeT *from, nodeT *to, long *arcrow, long *arccol, long *arcdir, long nrow, long ncol, nodesuppT **nodesupp); void GetArcNonGrid(nodeT *from, nodeT *to, long *arcrow, long *arccol, long *arcdir, long nrow, long ncol, nodesuppT **nodesupp); void NonDegenUpdateChildren(nodeT *startnode, nodeT *lastnode, nodeT *nextonpath, long dgroup, long ngroundarcs, long nflow, nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, nodeT ***apexes, incrcostT **incrcosts, long nrow, long ncol, paramT *params); void InitNetwork(short **flows, long *ngroundarcsptr, long *ncycleptr, long *nflowdoneptr, long *mostflowptr, long *nflowptr, long *candidatebagsizeptr, candidateT **candidatebagptr, long *candidatelistsizeptr, candidateT **candidatelistptr, signed char ***iscandidateptr, nodeT ****apexesptr, bucketT **bktsptr, long *iincrcostfileptr, incrcostT ***incrcostsptr, nodeT ***nodesptr, nodeT *ground, long *nnoderowptr, short **nnodesperrowptr, long *narcrowptr, short **narcsperrowptr, long nrow, long ncol, signed char *notfirstloopptr, totalcostT *totalcostptr, paramT *params); void InitNodeNums(long nrow, long ncol, nodeT **nodes, nodeT *ground); void InitBuckets(bucketT *bkts, nodeT *source, long nbuckets); void InitNodes(long nrow, long ncol, nodeT **nodes, nodeT *ground); void BucketInsert(nodeT *node, long ind, bucketT *bkts); void BucketRemove(nodeT *node, long ind, bucketT *bkts); nodeT *ClosestNode(bucketT *bkts); nodeT *ClosestNodeCircular(bucketT *bkts); nodeT *MinOutCostNode(bucketT *bkts); nodeT *SelectSource(nodeT **nodes, nodeT *ground, long nflow, short **flows, long ngroundarcs, long nrow, long ncol, paramT *params); short GetCost(incrcostT **incrcosts, long arcrow, long arccol, long arcdir); long ReCalcCost(void **costs, incrcostT **incrcosts, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params); void SetupIncrFlowCosts(void **costs, incrcostT **incrcosts, short **flows, long nflow, long nrow, long narcrow, short *narcsperrow, paramT *params); totalcostT EvaluateTotalCost(void **costs, short **flows, long nrow, long ncol, short *narcsperrow,paramT *params); void MSTInitFlows(float **wrappedphase, short ***flowsptr, short **mstcosts, long nrow, long ncol, nodeT ***nodes, nodeT *ground, long maxflow); void SolveMST(nodeT **nodes, nodeT *source, nodeT *ground, bucketT *bkts, short **mstcosts, signed char **residue, signed char **arcstatus, long nrow, long ncol); long DischargeTree(nodeT *source, short **mstcosts, short **flows, signed char **residue, signed char **arcstatus, nodeT **nodes, nodeT *ground, long nrow, long ncol); signed char ClipFlow(signed char **residue, short **flows, short **mstcosts, long nrow, long ncol, long maxflow); void MCFInitFlows(float **wrappedphase, short ***flowsptr, short **mstcosts, long nrow, long ncol, long cs2scalefactor); /* functions in snaphu_cost.c */ void BuildCostArrays(void ***costsptr, short ***mstcostsptr, float **mag, float **wrappedphase, float **unwrappedest, long linelen, long nlines, long nrow, long ncol, paramT *params, tileparamT *tileparams, infileT *infiles, outfileT *outfiles); void **BuildStatCostsTopo(float **wrappedphase, float **mag, float **unwrappedest, float **pwr, float **corr, short **rowweight, short **colweight, long nrow, long ncol, tileparamT *tileparams, outfileT *outfiles, paramT *params); void **BuildStatCostsDefo(float **wrappedphase, float **mag, float **unwrappedest, float **corr, short **rowweight, short **colweight, long nrow, long ncol, tileparamT *tileparams, outfileT *outfiles, paramT *params); void **BuildStatCostsSmooth(float **wrappedphase, float **mag, float **unwrappedest, float **corr, short **rowweight, short **colweight, long nrow, long ncol, tileparamT *tileparams, outfileT *outfiles, paramT *params); void GetIntensityAndCorrelation(float **mag, float **wrappedphase, float ***pwrptr, float ***corrptr, infileT *infiles, long linelen, long nlines, long nrow, long ncol, outfileT *outfiles, paramT *params, tileparamT *tileparams); void RemoveMean(float **ei, long nrow, long ncol, long krowei, long kcolei); float *BuildDZRCritLookupTable(double *nominc0ptr, double *dnomincptr, long *tablesizeptr, tileparamT *tileparams, paramT *params); double SolveDZRCrit(double sinnomincangle, double cosnomincangle, paramT *params, double threshold); void SolveEIModelParams(double *slope1ptr, double *slope2ptr, double *const1ptr, double *const2ptr, double dzrcrit, double dzr0, double sinnomincangle, double cosnomincangle, paramT *params); double EIofDZR(double dzr, double sinnomincangle, double cosnomincangle, paramT *params); float **BuildDZRhoMaxLookupTable(double nominc0, double dnominc, long nominctablesize, double rhomin, double drho, long nrho, paramT *params); double CalcDZRhoMax(double rho, double nominc, paramT *params, double threshold); void CalcCostTopo(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostDefo(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostSmooth(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostL0(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostL1(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostL2(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostLP(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); void CalcCostNonGrid(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr); long EvalCostTopo(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostDefo(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostSmooth(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostL0(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostL1(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostL2(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostLP(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); long EvalCostNonGrid(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params); void CalcInitMaxFlow(paramT *params, void **costs, long nrow, long ncol); /* functions in snaphu_util.c */ int IsTrue(char *str); int IsFalse(char *str); signed char SetBooleanSignedChar(signed char *boolptr, char *str); double ModDiff(double f1, double f2); void WrapPhase(float **wrappedphase, long nrow, long ncol); void CalcWrappedRangeDiffs(float **dpsi, float **avgdpsi, float **wrappedphase, long kperpdpsi, long kpardpsi, long nrow, long ncol); void CalcWrappedAzDiffs(float **dpsi, float **avgdpsi, float **wrappedphase, long kperpdpsi, long kpardpsi, long nrow, long ncol); void CycleResidue(float **phase, signed char **residue, int nrow, int ncol); void CalcFlow(float **phase, short ***flowsptr, long nrow, long ncol); void IntegratePhase(float **psi, float **phi, short **flows, long nrow, long ncol); float **ExtractFlow(float **unwrappedphase, short ***flowsptr, long nrow, long ncol); void FlipPhaseArraySign(float **arr, paramT *params, long nrow, long ncol); void FlipFlowArraySign(short **arr, paramT *params, long nrow, long ncol); void **Get2DMem(int nrow, int ncol, int psize, size_t size); void **Get2DRowColMem(long nrow, long ncol, int psize, size_t size); void **Get2DRowColZeroMem(long nrow, long ncol, int psize, size_t size); void *MAlloc(size_t size); void *CAlloc(size_t nitems, size_t size); void *ReAlloc(void *ptr, size_t size); void Free2DArray(void **array, unsigned int nrow); void Set2DShortArray(short **arr, long nrow, long ncol, long value); signed char ValidDataArray(float **arr, long nrow, long ncol); signed char IsFinite(double d); long LRound(double a); long Short2DRowColAbsMax(short **arr, long nrow, long ncol); float LinInterp1D(float *arr, double index, long nelem); float LinInterp2D(float **arr, double rowind, double colind , long nrow, long ncol); void Despeckle(float **mag, float ***ei, long nrow, long ncol); float **MirrorPad(float **array1, long nrow, long ncol, long krow, long kcol); void BoxCarAvg(float **avgarr, float **padarr, long nrow, long ncol, long krow, long kcol); char *StrNCopy(char *dest, const char *src, size_t n); void FlattenWrappedPhase(float **wrappedphase, float **unwrappedest, long nrow, long ncol); void Add2DFloatArrays(float **arr1, float **arr2, long nrow, long ncol); int StringToDouble(char *str, double *d); int StringToLong(char *str, long *l); void CatchSignals(void (*SigHandler)(int)); void SetDump(int signum); void KillChildrenExit(int signum); void SignalExit(int signum); void StartTimers(time_t *tstart, double *cputimestart); void DisplayElapsedTime(time_t tstart, double cputimestart); int LongCompare(const void *c1, const void *c2); /* functions in snaphu_io.c */ void SetDefaults(infileT *infiles, outfileT *outfiles, paramT *params); void ProcessArgs(int argc, char *argv[], infileT *infiles, outfileT *outfiles, long *ncolptr, paramT *params); void CheckParams(infileT *infiles, outfileT *outfiles, long linelen, long nlines, paramT *params); void ReadConfigFile(char *conffile, infileT *infiles, outfileT *outfiles, long *ncolptr, paramT *params); void WriteConfigLogFile(int argc, char *argv[], infileT *infiles, outfileT *outfiles, long linelen, paramT *params); void LogStringParam(FILE *fp, char *key, char *value); void LogBoolParam(FILE *fp, char *key, signed char boolvalue); void LogFileFormat(FILE *fp, char *key, signed char fileformat); long GetNLines(infileT *infiles, long linelen); void WriteOutputFile(float **mag, float **unwrappedphase, char *outfile, outfileT *outfiles, long nrow, long ncol); FILE *OpenOutputFile(char *outfile, char *realoutfile); void WriteAltLineFile(float **mag, float **phase, char *outfile, long nrow, long ncol); void WriteAltSampFile(float **arr1, float **arr2, char *outfile, long nrow, long ncol); void Write2DArray(void **array, char *filename, long nrow, long ncol, size_t size); void Write2DRowColArray(void **array, char *filename, long nrow, long ncol, size_t size); void ReadInputFile(infileT *infiles, float ***magptr, float ***wrappedphaseptr, short ***flowsptr, long linelen, long nlines, paramT *params, tileparamT *tileparams); void ReadMagnitude(float **mag, infileT *infiles, long linelen, long nlines, tileparamT *tileparams); void ReadUnwrappedEstimateFile(float ***unwrappedestptr, infileT *infiles, long linelen, long nlines, paramT *params, tileparamT *tileparams); void ReadWeightsFile(short ***weightsptr,char *weightfile, long linelen, long nlines, tileparamT *tileparams); void ReadIntensity(float ***pwrptr, float ***pwr1ptr, float ***pwr2ptr, infileT *infiles, long linelen, long nlines, paramT *params, tileparamT *tileparams); void ReadCorrelation(float ***corrptr, infileT *infiles, long linelen, long nlines, tileparamT *tileparams); void ReadAltLineFile(float ***mag, float ***phase, char *alfile, long linelen, long nlines, tileparamT *tileparams); void ReadAltLineFilePhase(float ***phase, char *alfile, long linelen, long nlines, tileparamT *tileparams); void ReadComplexFile(float ***mag, float ***phase, char *rifile, long linelen, long nlines, tileparamT *tileparams); void Read2DArray(void ***arr, char *infile, long linelen, long nlines, tileparamT *tileparams, size_t elptrsize, size_t elsize); void ReadAltSampFile(float ***arr1, float ***arr2, char *infile, long linelen, long nlines, tileparamT *tileparams); void Read2DRowColFile(void ***arr, char *filename, long linelen, long nlines, tileparamT *tileparams, size_t size); void Read2DRowColFileRows(void ***arr, char *filename, long linelen, long nlines, tileparamT *tileparams, size_t size); void SetDumpAll(outfileT *outfiles, paramT *params); void SetStreamPointers(void); void SetVerboseOut(paramT *params); void ChildResetStreamPointers(pid_t pid, long tilerow, long tilecol, paramT *params); void DumpIncrCostFiles(incrcostT **incrcosts, long iincrcostfile, long nflow, long nrow, long ncol); void MakeTileDir(paramT *params, outfileT *outfiles); void ParseFilename(char *filename, char *path, char *basename); /* functions in snaphu_cs2.c */ void SolveCS2(signed char **residue, short **mstcosts, long nrow, long ncol, long cs2scalefactor, short ***flowsptr); /*******************************************/ /* global (external) variable declarations */ /*******************************************/ /* flags used for signal handling */ extern char dumpresults_global; extern char requestedstop_global; /* ouput stream pointers */ /* sp0=error messages, sp1=status output, sp2=verbose, sp3=verbose counter */ extern FILE *sp0, *sp1, *sp2, *sp3; /* node pointer for marking arc not on tree in apex array */ /* this should be treat as a constant */ extern nodeT NONTREEARC[1]; /* pointers to functions which calculate arc costs */ extern void (*CalcCost)(); extern long (*EvalCost)(); /* pointers to functions for tailoring network solver to specific topologies */ extern nodeT *(*NeighborNode)(); extern void (*GetArc)(); /* end of snaphu.h */ GMTSAR_V5.7/.svn/pristine/e9/e9eabba95f481f8342d792bbea59a5873547049f.svn-base000444 015705 000000 00000006233 13505462014 025732 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /* reads options */ /* start with third arguement */ int ledflag; void parse_ALOS_commands(int na, char **a, char *USAGE, struct PRM *prm) { int n; tbias = 0.; for (n = 3; n < na; n++) { if (!strcmp(a[n], "-near")) { n++; if (n == na) die(" no option after -near!\n", ""); prm->near_range = atof(a[n]); fprintf(stderr, " setting near_range to %9.2lf \n", prm->near_range); } else if (!strcmp(a[n], "-radius")) { n++; if (n == na) die(" no option after -radius!\n", ""); prm->RE = atof(a[n]); fprintf(stderr, " setting radius to %f \n", prm->RE); } else if (!strcmp(a[n], "-force_slope")) { n++; if (n == na) die(" no option after -force_slope!\n", ""); force_slope = 1; forced_slope = atof(a[n]); fprintf(stderr, " setting chirp slope to %f \n", forced_slope); } else if (!strcmp(a[n], "-fd1")) { n++; if (n == na) die(" no option after -fd1!\n", ""); prm->fd1 = atof(a[n]); dopp = 0; fprintf(stderr, " setting fd1 to %f \n", prm->fd1); } else if (!strcmp(a[n], "-chirp_ext")) { n++; if (n == na) die(" no option after -chirp_ext!\n", ""); prm->chirp_ext = atoi(a[n]); fprintf(stderr, " setting chirp extent to %d \n", prm->chirp_ext); } else if (!strcmp(a[n], "-nrows")) { n++; if (n == na) die(" no option after -nrows!\n", ""); prm->nrows = atoi(a[n]); fprintf(stderr, " setting nrows to %d \n", prm->nrows); } else if (!strcmp(a[n], "-npatch")) { n++; if (n == na) die(" no option after -npatches!\n", ""); prm->num_patches = atoi(a[n]); fprintf(stderr, " setting npatches to %d \n", prm->num_patches); } else if (!strcmp(a[n], "-tbias")) { n++; if (n == na) die(" no option after -tbias!\n", ""); tbias = atof(a[n]); fprintf(stderr, " setting tbias to %f \n", tbias); } else if (!strcmp(a[n], "-nodopp")) { dopp = 0; prm->fd1 = prm->fdd1 = prm->fddd1 = 0.0; fprintf(stderr, " no doppler calculation (sets to zero!) \n"); } else if (!strcmp(a[n], "-quad")) { quad_pol = 1; fprintf(stderr, " quad pol data: divide PRF by 2; defining chirp_slope) \n"); } else if (!strcmp(a[n], "-ALOSE")) { ALOS_format = 1; fprintf(stderr, " data is in ALOSE (ERSDAC) format \n"); } else if (!strcmp(a[n], "-ALOSA")) { ALOS_format = 0; fprintf(stderr, " data is in ALOSA (AUIG) format) \n"); } else if (!strcmp(a[n], "-LED")) { ledflag = 1; fprintf(stderr, " creating *.LED file \n"); } else if (!strcmp(a[n], "-noLED")) { ledflag = 0; fprintf(stderr, " no *.LED file written (default) \n"); } else if (!strcmp(a[n], "-roi")) { roi = 1; fprintf(stderr, " writing roi_pac rsc files \n"); } else if (!strncmp(a[n], "-debug", 2)) { verbose = debug = 1; fprintf(stderr, " debug and verbose output \n"); } else if (!strncmp(a[n], "-V", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else if (!strncmp(a[n], "-v", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } } GMTSAR_V5.7/.svn/pristine/f6/f6508dcc5941caec6b5a1b374a1bbc043b45994d.svn-base000444 015705 000000 00000001620 13505462013 026016 0ustar00sandwellwheel000000 000000 /************************************************************************ * fft_bins calculates the appropriate number of elements in an fft * * vector corresponding to the number of elements in an array. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History: * * * * Date * ************************************************************************/ int fft_bins(int num) { int ranfft = 2; while (num > ranfft / 2) { if (num < ranfft) { return (ranfft); } ranfft = ranfft * 2; } return (ranfft); } GMTSAR_V5.7/.svn/pristine/f6/f65f0e9de933fe9512cd641a94fcb9f70d951bb0.svn-base000444 015705 000000 00000016654 13505462013 026066 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # Xiaohua XU, Mar 10, 2017 # # process Sentinel-1A TOPS data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 7) then echo "" echo "Usage: p2p_S1_TOPS_Frame.csh Master.SAFE Master.EOF Slave.SAFE Slave.EOF config.s1a.txt polarization parallel" echo "" echo "Example: p2p_S1_TOPS_Frame.csh S1A_IW_SLC__1SDV_20150607T014936_20150607T015003_006261_00832E_3626.SAFE S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944.EOF S1A_IW_SLC__1SSV_20150526T014935_20150526T015002_006086_007E23_679A.SAFE S1A_OPER_AUX_POEORB_OPOD_20150627T155155_V20150606T225944_20150608T005944.EOF config.s1a.txt vv 1" echo "" echo " Place the .SAFE file in the raw folder, DEM in the topo folder" echo " During processing, F1, F2, F3 and merge folder will be generated" echo " Final results will be placed in the merge folder, with phase" echo " corr [unwrapped phase]." echo " polarization = vv vh hh or hv " echo " parallel = 0-sequential 1-parallel " echo "" exit 1 endif # start # # set polarization # set pol = $6 echo $pol # # set processing mode seq # set seq = $7 echo $seq #if (6 == 9) then #:< $5 echo "Linking files for Subswath 1 ..." cd topo ln -s ../../topo/dem.grd . cd ../raw ln -s ../topo/dem.grd . ln -s ../../raw/$1/*/$f1m.xml . ln -s ../../raw/$1/*/$f1m.tiff . ln -s ../../raw/$2 ./$f1m.EOF ln -s ../../raw/$3/*/$f1s.xml . ln -s ../../raw/$3/*/$f1s.tiff . ln -s ../../raw/$4 ./$f1s.EOF cd ../.. mkdir F2 mkdir F2/raw F2/topo cd F2 sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g"> $5 echo "Linking files for Subswath 2 ..." cd topo ln -s ../../topo/dem.grd . cd ../raw ln -s ../topo/dem.grd . ln -s ../../raw/$1/*/$f2m.xml . ln -s ../../raw/$1/*/$f2m.tiff . ln -s ../../raw/$2 ./$f2m.EOF ln -s ../../raw/$3/*/$f2s.xml . ln -s ../../raw/$3/*/$f2s.tiff . ln -s ../../raw/$4 ./$f2s.EOF cd ../.. mkdir F3 mkdir F3/raw F3/topo cd F3 echo "Linking files for Subswath 3 ..." sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g"> $5 cd topo ln -s ../../topo/dem.grd . cd ../raw ln -s ../topo/dem.grd . ln -s ../../raw/$1/*/$f3m.xml . ln -s ../../raw/$1/*/$f3m.tiff . ln -s ../../raw/$2 ./$f3m.EOF ln -s ../../raw/$3/*/$f3s.xml . ln -s ../../raw/$3/*/$f3s.tiff . ln -s ../../raw/$4 ./$f3s.EOF cd ../.. # # process data # if ($seq == 0) then cd F1 p2p_processing.csh S1_TOPS $f1m $f1s $5 cd ../F2 p2p_processing.csh S1_TOPS $f2m $f2s $5 cd ../F3 p2p_processing.csh S1_TOPS $f3m $f3s $5 cd .. else if ($seq == 1) then cd F1 p2p_processing.csh S1_TOPS $f1m $f1s $5 >&log& cd ../F2 p2p_processing.csh S1_TOPS $f2m $f2s $5 >&log& cd ../F3 p2p_processing.csh S1_TOPS $f3m $f3s $5 >&log& cd .. wait else echo "Invalid mode" exit endif #supercalifragilisticexpialidocious # # merge_unwrap_geocode # #endif mkdir merge cd merge ln -s ../topo/dem.grd . ln -s ../F1/intf/*/gauss* . if (-f tmp.filelist) then rm tmp.filelist endif set pth1 = `ls ../F1/intf/*/*PRM | awk NR==1'{print $1}' | awk -F"/" '{for (i=1;i tmp.filelist set pth2 = `ls ../F2/intf/*/*PRM | awk NR==1'{print $1}' | awk -F"/" '{for (i=1;i> tmp.filelist set pth3 = `ls ../F3/intf/*/*PRM | awk NR==1'{print $1}' | awk -F"/" '{for (i=1;i> tmp.filelist set iono = `grep correct_iono ../$5 | awk '{print $3}'` if ($iono != 0) then sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g" > $5 merge_unwrap_geocode_tops.csh tmp.filelist $5 cd .. mkdir iono cd iono mkdir intf_h intf_l intf_o iono_correction cd intf_h echo "../../F1/iono_phase/intf_h/:"$prm1m":"$prm1s > tmp.filelist echo "../../F2/iono_phase/intf_h/:"$prm2m":"$prm2s >> tmp.filelist echo "../../F3/iono_phase/intf_h/:"$prm3m":"$prm3s >> tmp.filelist sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0.1/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g" > $5 ln -s ../../topo/dem.grd . ln -s ../../merge/trans.dat . merge_unwrap_geocode_tops.csh tmp.filelist $5 cp ../../F1/SLC/params* . cd ../intf_l echo "../../F1/iono_phase/intf_l/:"$prm1m":"$prm1s > tmp.filelist echo "../../F2/iono_phase/intf_l/:"$prm2m":"$prm2s >> tmp.filelist echo "../../F3/iono_phase/intf_l/:"$prm3m":"$prm3s >> tmp.filelist sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0.1/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g" > $5 ln -s ../../topo/dem.grd . ln -s ../../merge/trans.dat . merge_unwrap_geocode_tops.csh tmp.filelist $5 cp ../../F1/SLC/params* . cd ../intf_o echo "../../F1/iono_phase/intf_o/:"$prm1m":"$prm1s > tmp.filelist echo "../../F2/iono_phase/intf_o/:"$prm2m":"$prm2s >> tmp.filelist echo "../../F3/iono_phase/intf_o/:"$prm3m":"$prm3s >> tmp.filelist sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../../$5 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0.1/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g" > $5 ln -s ../../topo/dem.grd . ln -s ../../merge/trans.dat . merge_unwrap_geocode_tops.csh tmp.filelist $5 cp ../../F1/SLC/params* . cd ../iono_correction estimate_ionospheric_phase.csh ../intf_h ../intf_l ../intf_o ../../merge 0.8 0.8 cd ../../merge ln -s ../iono/iono_correction/ph_iono_orig.grd . cp ../$5 . merge_unwrap_geocode_tops.csh tmp.filelist $5 else cp ../$5 . merge_unwrap_geocode_tops.csh tmp.filelist $5 endif GMTSAR_V5.7/.svn/pristine/f6/f6435ffe363e6a9f499acacd925b06d67c60dc2c.svn-base000444 015705 000000 00000007357 13505462013 026145 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ALOS2_SLC.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ################ # Satellite # # ALOS or ENVI # ################ SAT = ALOS ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches (usually 1~3) num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = # SLC scale factor to convert float to int ( 0.01 is good for ALOS1 L1.1) SLC_factor = 4.0 ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # filters # look at the filter/ folder to choose other filters filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 0 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .10 GMTSAR_V5.7/.svn/pristine/c2/c29060d09389c9729f476d020a36c0adfd019f2f.svn-base000444 015705 000000 00000013617 13505462013 025536 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Xiaohua Xu and David Sandwell Dec 23 2015 # # script to align S1 TOPS mode data # # 1) Make PRM and LED files for both master and slave. # # 2) Do geometric back projection to determine the alignment parameters. # # 3) Make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level. # alias rm 'rm -f' unset noclobber # if ($#argv < 5) then echo " " echo "Usage: align_tops.csh master_prefix master_orb_file slave_s1a_prefix slave_orb_file dem.grd" echo " " echo "Be sure the tiff, xml, orbit and dem files are available in the local directory." echo " " echo "Example: align_tops.csh s1a-iw3-slc-vv-20150526t014937-20150526t015002-006086-007e23-003 S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944.EOF.txt s1a-iw3-slc-vv-20150607t014937-20150607t015003-006261-00832e-006 S1A_OPER_AUX_POEORB_OPOD_20150627T155155_V20150606T225944_20150608T005944.EOF.txt dem.grd " echo " " echo "Output: S1_20150526_F3.PRM S1_20150526_F3.LED S1_20150526_F3.SLC S1_20150607_F3.PRM S1_20150607_F3.LED S1_20150607_F3.SLC " echo " " exit 1 endif # # make sure the files are available # if(! -f $1.xml) then echo "****** missing file: "$1 exit endif if(! -f $2) then echo "****** missing file: "$2 exit endif if(! -f $3.xml) then echo "****** missing file: "$3 exit endif if(! -f $4) then echo "****** missing file: "$4 exit endif if(! -f $5) then echo "****** missing file: "$5 exit endif # # set the full names and create an output prefix # set mtiff = ` echo $1.tiff ` set mxml = ` echo $1.xml ` set stiff = ` echo $3.tiff ` set sxml = ` echo $3.xml ` set mpre = ` echo $1 | awk '{ print "S1"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set spre = ` echo $3 | awk '{ print "S1"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set swath = ` echo $1 | awk '{ print substr($1,7,1)}'` echo $mpre echo $spre # # 1) make PRM and LED files for both master and slave but not the SLC file # make_s1a_tops_6par $mxml $mtiff $mpre 0 0. 0. 0. 0. 0. 0. make_s1a_tops_6par $sxml $stiff $spre 0 0. 0. 0. 0. 0. 0. # # replace the LED with the precise orbit # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2 # # 2) do a geometric back projection to determine the alignment parameters # # Downsample the topography. The topo value is irrelevant so it can be filtered and downsampled. # gmt grdfilter $5 -D2 -Fg4 -I30s -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt # # zero the alignment parameters of the slave image # don'd change the alignment parameters of the master image in case this is a surrogate master # update_PRM $spre".PRM" rshift 0 update_PRM $spre".PRM" sub_int_r 0.0 update_PRM $spre".PRM" stretch_r 0.0 update_PRM $spre".PRM" a_stretch_r 0.0 update_PRM $spre".PRM" ashift 0 update_PRM $spre".PRM" sub_int_a 0.0 update_PRM $spre".PRM" stretch_a 0.0 update_PRM $spre".PRM" a_stretch_a 0.0 # # map the topography into the range and azimuth of the master and slave using polynomial refinement # SAT_llt2rat $mpre".PRM" 1 < topo.llt > master.ratll SAT_llt2rat $spre".PRM" 1 < topo.llt > slave.ratll # # paste the files and compute the dr and da # #paste master.ratll slave.ratll | awk '{print( $6, $6-$1, $7, $7-$2, "100")}' > tmp.dat paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $6, $6-$1, $7, $7-$2, "100")}' > tmp.dat # # make sure the range and azimuth are within the bounds of the master # set rmax = `grep num_rng_bins $spre".PRM" | awk '{print $3}'` set amax = `grep num_lines $spre".PRM" | awk '{print $3}'` awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat # # run fitoffset # fitoffset.csh 3 3 offset.dat >> $spre".PRM" # # save the rshift and ashift for the end # set rshift = `grep rshift $spre".PRM" | tail -1 | awk '{print $3}'` set ashift = `grep ashift $spre".PRM" | tail -1 | awk '{print $3}'` # # clean up the mess # rm topo.llt master.ratll slave.ratll tmp.dat offset.dat flt.grd # # 3) make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level but still need a integer alignment from # resamp # set sub_int_r = `grep sub_int_r $spre".PRM" | tail -1 | awk '{print $3}'` set sub_int_a = `grep sub_int_a $spre".PRM" | tail -1 | awk '{print $3}'` set stretch_r = `grep stretch_r $spre".PRM" | grep -v a_stretch_r | tail -1 | awk '{print $3}'` set stretch_a = `grep stretch_a $spre".PRM" | grep -v a_stretch_a | tail -1 | awk '{print $3}'` set a_stretch_a = `grep a_stretch_a $spre".PRM" | tail -1 | awk '{print $3}'` set a_stretch_r = `grep a_stretch_r $spre".PRM" | tail -1 | awk '{print $3}'` #echo $rshift $sub_int_r $stretch_r $a_stretch_r $ashift $sub_int_a $stretch_a $a_stretch_a # # make the new PRM files and SLC # make_s1a_tops_6par $mxml $mtiff $mpre 1 0. 0. 0. 0. 0. 0. make_s1a_tops_6par $sxml $stiff $spre 1 $sub_int_r $sub_int_a $stretch_a $a_stretch_a $stretch_r $a_stretch_r # # restore the integer rshift and ashift # update_PRM $spre".PRM" rshift $rshift update_PRM $spre".PRM" ashift $ashift # # re-extract the lED files # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2 # # do integer resampling of the slave # resamp $mpre".PRM" $spre".PRM" $spre".PRMresamp" $spre".SLCresamp" 1 mv $spre".SLCresamp" $spre".SLC" mv $spre".PRMresamp" $spre".PRM" # rm topo.llt master.ratll slave.ratll *tmp* flt.grd r.xyz a.xyz GMTSAR_V5.7/.svn/pristine/c5/c595dadc1b6b4ad1aaf3fb0284c9bad9d9b35a19.svn-base000444 015705 000000 00000016501 13505462013 026316 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong and David Sandwell # FEB 4 2010 # Matt Wei May 4 2010, ENVISAT # DTS - May 26, 2010, added phase gadient # EF, DTS, XT - Jan 10 2014, TSX # # Convolve the real.grd and imag.grd with gaussian filters. # Form amplitude, phase, phase gradient, and correlation images. # # alias rm 'rm -f' gmt set IO_NC4_CHUNK_SIZE classic # # # set grdimage options # set scale = "-JX6.5i" set thresh = "5.e-21" gmt set COLOR_MODEL = hsv gmt set PROJ_LENGTH_UNIT = inch if ($#argv != 4 && $#argv != 6) then errormessage: echo "" echo "Usage: filter.csh master.PRM slave.PRM filter decimation [rng_dec azi_dec]" echo "" echo " Apply gaussian filter to amplitude and phase images." echo " " echo " filter - wavelength of the filter in meters (0.5 gain)" echo " decimation - (1) better resolution, (2) smaller files" echo " " echo "Example: filter.csh IMG-HH-ALPSRP055750660-H1.0__A.PRM IMG-HH-ALPSRP049040660-H1.0__A.PRM 300 2" echo "" exit 1 endif echo "filter.csh" # # define filter and decimation variables # set sharedir = `gmtsar_sharedir.csh` set filter3 = $sharedir/filters/fill.3x3 set filter4 = $sharedir/filters/xdir set filter5 = $sharedir/filters/ydir set dec = $4 set az_lks = 4 set PRF = `grep PRF *.PRM | awk 'NR == 1 {printf("%d", $3)}'` if( $PRF < 1000 ) then set az_lks = 1 endif # # look for range sampling rate # set rng_samp_rate = `grep rng_samp_rate $1 | awk 'NR == 1 {printf("%d", $3)}'` # # set the range spacing in units of image range pixel size # if ($?rng_samp_rate) then if ($rng_samp_rate > 110000000) then set dec_rng = 4 set filter1 = $sharedir/filters/gauss15x5 else if ($rng_samp_rate < 110000000 && $rng_samp_rate > 20000000) then set dec_rng = 2 set filter1 = $sharedir/filters/gauss15x5 # # special for TOPS mode # if($az_lks == 1) then set filter1 = $sharedir/filters/gauss5x5 endif else set dec_rng = 1 set filter1 = $sharedir/filters/gauss15x3 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif # # set az_lks and dec_rng to 1 for odd decimation # if($#argv == 6) then set jud = `echo $6 | awk '{if($1%2 == 0) print 1;else print 0}'` if ($jud == 0) then set az_lks = 1 endif set jud = `echo $5 | awk '{if($1%2 == 0) print 1;else print 0}'` if ($jud == 0) then set dec_rng = 1 endif endif # # make the custom filter2 and set the decimation # make_gaussian_filter $1 $dec_rng $az_lks $3 > ijdec set filter2 = gauss_$3 set idec = `cat ijdec | awk -v dc="$dec" '{ print dc*$1 }'` set jdec = `cat ijdec | awk -v dc="$dec" '{ print dc*$2 }'` if($#argv == 6) then set idec = `echo $6 $az_lks | awk '{printf("%d",$1/$2)}'` set jdec = `echo $5 $dec_rng | awk '{printf("%d",$1/$2)}'` echo "setting range_dec = $5, azimuth_dec = $6" endif echo "$filter2 $idec $jdec ($az_lks $dec_rng)" # # filter the two amplitude images # echo "making amplitudes..." conv $az_lks $dec_rng $filter1 $1 amp1_tmp.grd=bf conv $idec $jdec $filter2 amp1_tmp.grd=bf amp1.grd rm amp1_tmp.grd conv $az_lks $dec_rng $filter1 $2 amp2_tmp.grd=bf conv $idec $jdec $filter2 amp2_tmp.grd=bf amp2.grd rm amp2_tmp.grd # # filter the real and imaginary parts of the interferogram # also compute gradients # echo "filtering interferogram..." conv $az_lks $dec_rng $filter1 real.grd=bf real_tmp.grd=bf conv $idec $jdec $filter2 real_tmp.grd=bf realfilt.grd # conv $dec $dec $filter4 real_tmp.grd xreal.grd # conv $dec $dec $filter5 real_tmp.grd yreal.grd rm real_tmp.grd rm real.grd conv $az_lks $dec_rng $filter1 imag.grd=bf imag_tmp.grd=bf conv $idec $jdec $filter2 imag_tmp.grd=bf imagfilt.grd # conv $dec $dec $filter4 imag_tmp.grd ximag.grd # conv $dec $dec $filter5 imag_tmp.grd yimag.grd rm imag_tmp.grd rm imag.grd # # form amplitude image # echo "making amplitude..." gmt grdmath realfilt.grd imagfilt.grd HYPOT = amp.grd gmt grdmath amp.grd 0.5 POW FLIPUD = display_amp.grd set AMAX = `gmt grdinfo -L2 display_amp.grd | grep stdev | awk '{ print 3*$5 }'` gmt grd2cpt display_amp.grd -Z -D -L0/$AMAX -Cgray > display_amp.cpt echo "N 255 255 254" >> display_amp.cpt gmt grdimage display_amp.grd -Cdisplay_amp.cpt $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > display_amp.ps gmt psscale -Rdisplay_amp.grd -J -DJTC+w5i/0.2i+h+ef -Cdisplay_amp.cpt -Bx0+l"Amplitude (histogram equalized)" -O >> display_amp.ps gmt psconvert -Tf -P -Z display_amp.ps #echo "Amplitude map: display_amp.pdf" # # form the correlation # echo "making correlation..." gmt grdmath amp1.grd amp2.grd MUL = tmp.grd gmt grdmath tmp.grd $thresh GE 0 NAN = mask.grd gmt grdmath amp.grd tmp.grd SQRT DIV mask.grd MUL FLIPUD = tmp2.grd=bf conv 1 1 $filter3 tmp2.grd=bf corr.grd gmt makecpt -T0./.8/0.1 -Cgray -Z -N > corr.cpt echo "N 255 255 254" >> corr.cpt gmt grdimage corr.grd $scale -Ccorr.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > corr.ps gmt psscale -Rcorr.grd -J -DJTC+w5i/0.2i+h+ef -Ccorr.cpt -Baf+lCorrelation -O >> corr.ps gmt psconvert -Tf -P -Z corr.ps #echo "Correlation map: corr.pdf" # # form the phase # echo "making phase..." gmt grdmath imagfilt.grd realfilt.grd ATAN2 mask.grd MUL FLIPUD = phase.grd gmt makecpt -Crainbow -T-3.15/3.15/0.1 -Z -N > phase.cpt gmt grdimage phase.grd $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phase.ps gmt psscale -Rphase.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -B1.57+l"Phase" -By+lrad -O >> phase.ps gmt psconvert -Tf -P -Z phase.ps #echo "Phase map: phase.pdf" # # compute the solid earth tide # uncomment lines with ## # ##ln -s ../../topo/dem.grd . ##tide_correction.csh $1 $2 dem.grd ##mv tide.grd tmp.grd ##gmt grdsample tmp.grd -Rimagfilt.grd -Gtide.grd # # make the Werner/Goldstein filtered phase # echo "filtering phase..." phasefilt -imag imagfilt.grd -real realfilt.grd -amp1 amp1.grd -amp2 amp2.grd -psize 32 gmt grdedit filtphase.grd `gmt grdinfo mask.grd -I- --FORMAT_FLOAT_OUT=%.12lg` gmt grdmath filtphase.grd mask.grd MUL FLIPUD = phasefilt.grd ##cp phasefilt.grd phasefilt_old.grd ##gmt grdmath phasefilt.grd tide.grd SUB PI ADD 2 PI MUL MOD PI SUB = phasefilt.grd rm filtphase.grd gmt grdimage phasefilt.grd $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phasefilt.ps gmt psscale -Rphasefilt.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -Bxa1.57+l"Phase" -By+lrad -O >> phasefilt.ps gmt psconvert -Tf -P -Z phasefilt.ps #echo "Filtered phase map: phasefilt.pdf" # # form the phase gradients # # echo "making phase gradient..." # gmt grdmath amp.grd 2. POW = amp_pow.grd # gmt grdmath realfilt.grd ximag.grd MUL imagfilt.grd xreal.grd MUL SUB amp_pow.grd DIV mask.grd MUL FLIPUD = xphase.grd # gmt grdmath realfilt.grd yimag.grd MUL imagfilt.grd yreal.grd MUL SUB amp_pow.grd DIV mask.grd MUL FLIPUD = yphase.grd # gmt makecpt -Cgray -T-0.7/0.7/0.1 -Z -N > phase_grad.cpt # echo "N 255 255 254" >> phase_grad.cpt # gmt grdimage xphase.grd $scale -Cphase_grad.cpt -X.2i -Y.5i -P > xphase.ps # gmt grdimage yphase.grd $scale -Cphase_grad.cpt -X.2i -Y.5i -P > yphase.ps # mv mask.grd tmp.grd gmt grdmath tmp.grd FLIPUD = mask.grd # # delete files rm tmp.grd tmp2.grd #rm ximag.grd yimag.grd xreal.grd yreal.grd GMTSAR_V5.7/.svn/pristine/c5/c538d098d5a048990b5be44afafaca9511c5a508.svn-base000444 015705 000000 00000024657 13505462014 025763 0ustar00sandwellwheel000000 000000 /* $Id$ */ /***************************************************************************************** * Program to merge 3 subswaths of TOPS data. * ***************************************************************************************** * Creator: Xiaohua(Eric) XU * (Scripps Institution of Oceanography) * Date: *07/01/2016 * ****************************************************************************************/ /***************************************************************************************** * Modification history: * ****************************************************************************************/ #include "PRM.h" #include "gmtsar.h" #include #include #include char *USAGE = "\n\nUSAGE: merge_swath inputlist output [stem]\n" "\ninputlist example: " "F1/intf/2015036_2015060/S1A_20150609.PRM:F1/intf/2015036_2015060/" "phasefilt.grd\n" " " "F2/intf/2015036_2015060/S1A_20150609.PRM:F2/intf/2015036_2015060/" "phasefilt.grd\n" " " "F3/intf/2015036_2015060/S1A_20150609.PRM:F3/intf/2015036_2015060/" "phasefilt.grd\n" "\nnote: use the slave PRM which contains the shift information\n" "\noutput: output.grd [stem.PRM]\n" "\nnote: please put the files to stem.in in the order of swath numbers.\n" "\n make sure all images have same num_rng_bin\n"; void fix_prm(struct PRM *p) { double delr; delr = SOL / p->fs / 2.0; /* these are from prm2gips */ p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift - 1) * delr; p->SC_clock_start = p->SC_clock_start + p->ashift / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->clock_start = p->clock_start + p->ashift / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); p->clock_stop = p->clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } int main(int argc, char **argv) { /* define variables */ FILE *stemin = NULL, *PRM = NULL; struct PRM prm1, prm2, prm3; char stem[3][500], grid[3][500], tmp_str[200]; char *str2; int nfile = 0, head1, head2, head3 = 0, minh, maxy, ovl12, ovl23 = 0, ii, jj, kk, k, n1, n2; double incx, incy, wesn[4], inc[2]; double c_speed = 299792458; double dt; struct GMT_GRID *G1 = NULL, *G2 = NULL, *G3 = NULL; struct GMT_GRID *GOUT = NULL; if (argc != 4 && argc != 3) die(USAGE, ""); /* read in the filelist */ if ((stemin = fopen(argv[1], "r")) == NULL) die("Couldn't open inputfile list: \n", argv[1]); while (fscanf(stemin, "%s", tmp_str) != EOF) { strcpy(stem[nfile], tmp_str); nfile++; } fclose(stemin); if (nfile > 3 || nfile < 2) die("Incorrect input filelist, should contain 2 or 3 files\n", ""); fprintf(stderr, "Number of Files to be merged is %d \n", nfile); /* sperate the string for PRM and grid names*/ str2 = strchr(stem[0], ':'); strcpy(grid[0], &str2[1]); str2[0] = '\0'; str2 = strchr(stem[1], ':'); strcpy(grid[1], &str2[1]); str2[0] = '\0'; if (nfile == 3) { str2 = strchr(stem[2], ':'); strcpy(grid[2], &str2[1]); str2[0] = '\0'; } // printf("%s\n%s\n%s\n\n",stem[0],stem[1],stem[2]); // printf("%s\n%s\n%s\n",grid[0],grid[1],grid[2]); /* read in the PRM files */ if ((PRM = fopen(stem[0], "r")) == NULL) die("Couldn't open PRM file: \n", stem[0]); null_sio_struct(&prm1); get_sio_struct(PRM, &prm1); // fix_prm(&prm1); fclose(PRM); if ((PRM = fopen(stem[1], "r")) == NULL) die("Couldn't open PRM file: \n", stem[1]); null_sio_struct(&prm2); get_sio_struct(PRM, &prm2); // fix_prm(&prm2); fclose(PRM); if (prm1.prf != prm2.prf) die("Image PRFs are not consistent", ""); if (prm1.fs != prm2.fs) die("Image range sampling rates are not consistent", ""); if (nfile == 3) { if ((PRM = fopen(stem[2], "r")) == NULL) die("Couldn't open PRM file: \n", stem[2]); null_sio_struct(&prm3); get_sio_struct(PRM, &prm3); // fix_prm(&prm3); fclose(PRM); if (prm1.prf != prm3.prf) die("Image PRFs are not consistent", ""); if (prm1.fs != prm3.fs) die("Image range sampling rates are not consistent", ""); } /* read in the grid files */ void *API = NULL; // GMT API control structure if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; printf("Reading in the grids...\n"); if ((G1 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, grid[0], NULL)) == NULL) die("cannot open grids", grid[0]); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, grid[0], G1) == NULL) return EXIT_FAILURE; if ((G2 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, grid[1], NULL)) == NULL) die("cannot open grids", grid[0]); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, grid[1], G2) == NULL) return EXIT_FAILURE; if (nfile == 3) { if ((G3 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, grid[2], NULL)) == NULL) die("cannot open grids", grid[0]); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, grid[2], G3) == NULL) return EXIT_FAILURE; } /* compute coefficients neede for merging*/ incx = (G1->header->inc[GMT_X] + G2->header->inc[GMT_X]) / 2; incy = (G1->header->inc[GMT_Y] + G2->header->inc[GMT_Y]) / 2; if (nfile == 3) { incx = (G1->header->inc[GMT_X] + G2->header->inc[GMT_X] + G3->header->inc[GMT_X]) / 3; incy = (G1->header->inc[GMT_Y] + G2->header->inc[GMT_Y] + G3->header->inc[GMT_Y]) / 3; } head1 = 0; head2 = (int)round(((prm2.clock_start - prm1.clock_start) * 86400.0 * prm1.prf) / incy); if (nfile == 3) head3 = (int)round((prm3.clock_start - prm1.clock_start) * 86400.0 * prm1.prf / incy); minh = MIN(head1, head2); if (nfile == 3) minh = MIN(minh, head3); head1 = head1 - minh; head2 = head2 - minh; if (nfile == 3) head3 = head3 - minh; maxy = MAX(G1->header->ny + head1, G2->header->ny + head2); if (nfile == 3) maxy = MAX(maxy, G3->header->ny + head3); maxy = maxy + 1; inc[GMT_X] = incx; inc[GMT_Y] = incy; ovl12 = G1->header->nx - (int)round((prm2.near_range - prm1.near_range) / (c_speed / prm1.fs / 2) / incx); if (nfile == 3) ovl23 = G2->header->nx - (int)round((prm3.near_range - prm2.near_range) / (c_speed / prm1.fs / 2) / incx); wesn[GMT_XLO] = 0.0; wesn[GMT_YLO] = 0.0; // minh*incy; wesn[GMT_YHI] = (int)round(maxy * incy); //(maxy+minh-1)*incy; wesn[GMT_XHI] = (G1->header->nx + G2->header->nx - ovl12 - 1) * incx; if (nfile == 3) wesn[GMT_XHI] = wesn[GMT_XHI] + (G3->header->nx - ovl23 - 1) * incx; wesn[GMT_XHI] = (int)round(wesn[GMT_XHI]); // printf("%f,%f,%f,%f,%f,%f\n",inc[0],inc[1],wesn[0],wesn[1],wesn[2],wesn[3]); // printf("%d,%d,%d,%d,%d\n",head1,head2,head3,ovl12,ovl23); /* write a new grid file */ printf("Writing the grid files..Size(%dx%d)...\n", (int)round((wesn[GMT_XHI] - wesn[GMT_XLO]) / inc[GMT_X]), (int)round((wesn[GMT_YHI] - wesn[GMT_YLO]) / inc[GMT_Y])); if ((GOUT = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate output grid", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "merged grid", GOUT)) die("could not set title", ""); // printf("%d,%d,%f,%f\n",GOUT->header->nx,GOUT->header->ny,GOUT->header->inc[GMT_X],GOUT->header->inc[GMT_Y]); for (ii = 0; ii < GOUT->header->ny; ii++) for (jj = 0; jj < GOUT->header->nx; jj++) GOUT->data[ii * GOUT->header->nx + jj] = (float)NAN; head1 = GOUT->header->ny - G1->header->ny - head1; head2 = GOUT->header->ny - G2->header->ny - head2; if (nfile == 3) head3 = GOUT->header->ny - G3->header->ny - head3; n1 = (int)ceil((-(float)prm2.rshift + (float)prm2.first_sample + 150.0) / incx); if (nfile == 3) n2 = (int)ceil((-(float)prm3.rshift + (float)prm3.first_sample + 150.0) / incx); if (n1 < 10) n1 = 10; if (nfile == 3) if (n2 < 10) n2 = 10; // printf("%d,%d\n",n1,n2); for (ii = head1; ii < G1->header->ny + head1; ii++) { for (jj = 0; jj < G1->header->nx - (ovl12 - n1); jj++) { kk = ii * GOUT->header->nx + jj; k = (ii - head1) * G1->header->nx + jj; GOUT->data[kk] = G1->data[k]; } } if (nfile != 3) { for (ii = head2; ii < G2->header->ny + head2; ii++) { for (jj = G1->header->nx - (ovl12 - n1); jj < GOUT->header->nx; jj++) { kk = ii * GOUT->header->nx + jj; k = (ii - head2) * G2->header->nx + jj - G1->header->nx + ovl12; GOUT->data[kk] = G2->data[k]; } } } if (nfile == 3) { for (ii = head2; ii < G2->header->ny + head2; ii++) { for (jj = G1->header->nx - (ovl12 - n1); jj < G1->header->nx + G2->header->nx - ovl12 - 1 - (ovl23 - n2); jj++) { kk = ii * GOUT->header->nx + jj; k = (ii - head2) * G2->header->nx + jj - G1->header->nx + ovl12 - 1; GOUT->data[kk] = G2->data[k]; } } for (ii = head3; ii < G3->header->ny + head3; ii++) { for (jj = G1->header->nx + G2->header->nx - ovl12 - 1 - (ovl23 - n2); jj < GOUT->header->nx; jj++) { kk = ii * GOUT->header->nx + jj; k = (ii - head3) * G3->header->nx + jj - (G1->header->nx + G2->header->nx - ovl12 - 1) + ovl23 - 1; GOUT->data[kk] = G3->data[k]; } } } strcpy(tmp_str, argv[2]); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, tmp_str, GOUT)) die("Failed to write output grid", ""); if (argc == 4) { strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open PRM file: \n", tmp_str); prm1.num_lines = (int)round(maxy * incy); prm1.nrows = prm1.num_lines; prm1.num_valid_az = prm1.num_lines; prm1.num_rng_bins = (int)round(GOUT->header->nx * incx); prm1.bytes_per_line = prm1.num_rng_bins * 4; prm1.good_bytes = prm1.bytes_per_line; dt = (-minh * incy) / prm1.prf / 86400.0; prm1.SC_clock_start = prm1.SC_clock_start - dt; prm1.clock_start = prm1.clock_start - dt; prm1.SC_clock_stop = prm1.SC_clock_start + prm1.num_lines / prm1.prf / 86400.0; prm1.clock_stop = prm1.clock_start + prm1.num_lines / prm1.prf / 86400.0; put_sio_struct(prm1, PRM); fclose(PRM); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/fa/fa8069da738f3814635f6bac9590d97e78b54281.svn-base000444 015705 000000 00000072107 13505462014 025574 0ustar00sandwellwheel000000 000000 snaphu(1) snaphu(1) NAME snaphu - phase unwrapping algorithm for SAR interferometry SYNOPSIS snaphu [options] [infile] [linelength] [options] DESCRIPTION snaphu is a statistical-cost network-flow algorithm for phase unwrapping. Given an input interferogram and other observable data, snaphu attempts to compute congruent phase-unwrapped solutions that are maximally probable in an approximate a posteriori sense. The algorithm's solver routine is based on network optimization. By default, snaphu assumes that its input is a synthetic aperture radar (SAR) interferogram measuring surface topography. Deformation measurements are assumed if the -d option is given. Smooth, generic data are assumed if the -s option is given. This man page documents only snaphu's syntax and usage. Its theoretical foundations are discussed in the refer- ences cited below. The most common input parameters may be given on the com- mand line, while many other twiddle parameters are handled via the -f option and configuration files. At the very least, the name of a wrapped-phase input file and its line length must be specified. Range should increase towards the right in the interferogram, and the flat-earth phase ramp should be removed from the input interferogram before snaphu is run. For deformation interferograms, phase variations due to topography should be removed as well. Except for the input file name and the line length, all input parameters take default values if not specified. However, these parameters should be customized whenever possible since the accuracy of the solution depends on how well the statistics of the estimation problem are modeled. To avoid poor-quality solutions, users are strongly encouraged to provide their best estimates of the relevant problem parameters. Parameters are set in the order in which they are given on the command line, so multiple con- figuration files or options may be given, with later val- ues overriding earlier ones. Allowable file formats are detailed below. The default format for the input file is COMPLEX_DATA, but any of the described formats may be used. If either of the ALT_LINE_DATA or ALT_SAMPLE_DATA formats are used, the magnitude and phase (in radians) of the interferogram should be in the first and second channels of the file, respectively. If the FLOAT_DATA format is used, the input file should contain only the phase of the interferogram (in radians); the magnitude may be passed with the -m option. OPTIONS -a ampfile Read brightness data from the file ampfile. The file should contain the amplitudes (not powers) of the two individual SAR images forming the interfer- ogram if the formats ALT_SAMPLE_DATA (default) or ALT_LINE_DATA are used. It should contain an aver- age of those two images if the FLOAT_DATA format is used. If (1) the amplitudes of both images are available, (2) the interferogram magnitude is also available, and (3) the -c option is not used, then a coherence estimate is automatically formed from the available data. The number of looks used for this estimate can be set in a configuration file. If no amplitude or power data are specified, then the magnitude of the input interferogram is used as the average amplitude, and no coherence estimate is formed. Note that the magnitude of the interfero- gram is not equal to the average amplitude of the SAR images. The amplitude data should be in the same system of units used for the input interfero- gram, and also coregistered to it. -A pwrfile Similar to the -a option, except the data in the specified file is assumed to represent the powers of the two individual SAR images. -b Bperp For topography mode, use Bperp (decimal value, in meters) as the value of the perpendicular component of the interferometric baseline. The sign is defined such that Bperp is negative if the unwrapped phase increases with the elevation. By default, repeat-pass or ping-pong mode is assumed; for single-antenna-transmit data, the value of Bperp should be halved, or the transmit mode should be set accordingly in a configuration file (see the -f option). The baseline value is only used in topography mode. -c corrfile Read correlation data from the file corrfile. The correlation data should be the same size as, and registered to, the input interferogram. Conse- quently, a raw correlation estimate may need to be upsampled if it incorporates more looks than the interferogram. If the -c option is not given, a coherence estimate is formed from the available data if possible. Otherwise, a uniform default coherence is assumed for the entire interferogram. If the ALT_LINE_DATA (default) or ALT_SAMPLE_DATA formats are used, the correlation data should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA format may also be used. The correlation values should be between zero and one, inclusive. -d Run in deformation mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents surface displacement rather than elevation. -e estimatefile Flatten using the unwrapped phase estimate in the file estimatefile. The estimate is subtracted from the input interferogram before unwrapping, and is inserted back into the solution just before the output is written. The estimate also affects the cost functions used, since subtracting a constant from a random variable shifts the probability den- sity function of the random variable. If the formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped estimate (in radians) should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA for- mat may also be used. -f configfile Read configuration parameters from file configfile. The file is parsed line by line for key-value pairs. Template configuration files are included with the snaphu source code: snaphu.conf.full con- tains all valid key-value pairs; snaphu.conf.brief contains the most important parameters. Lines not beginning with alphanumeric characters are treated as comment lines. Command line options specified after -f will override parameters specified in the configfile and vice versa. The -f option may be given multiple times with different configuration files, with parameters in later-specified files overriding those in earlier ones. -g maskfile Grow a connected component mask for the unwrapped solution and write the mask to the file maskfile. A connected component is a region of pixels in the solution that is believed to have been unwrapped in a relative, internally self-consistent manner according to the statistical costs used. Regions that are smaller than a preselected threshold are masked out. Parameters for this option can be set in the configuration file. The connected component file is composed of unsigned characters, with all pixels of the same value belonging to the same con- nected component and zero corresponding to masked pixels. -G maskfile Grow a connected component mask (see the -g option) for the input data array, assuming that it is already unwrapped, and write the mask to the file maskfile. Statistical cost functions are computed for forming the mask, but a new unwrapped solution is not computed. -h Print a help message summarizing command-line options and exit. -i Run in initialize-only mode. Normally, snaphu uses either an approximate minimum spanning tree (MST) algorithm or a minimum cost flow (MCF) algorithm for generating the initialization to its iterative, modified network-simplex solver. If -i is given, the initialization is written to the output and the program exits without running the iterative solver. -l logfile Log all runtime parameters and some other environ- ment information into the specified file. The log file is a text file in the same format as a config- uration file. -m magfile Read interferogram magnitude data from the speci- fied file. This option is useful mainly if the wrapped-phase input file is given as a set of real phase values rather than complex interferogram values. The interferogram magnitude is used to form a coherence estimate if appropriate amplitude data are given as well. The default file format is FLOAT_DATA. If the formats ALT_LINE_DATA or ALT_SAMPLE_DATA are used, the magnitude should be in the first data channel of the file; the second channel is ignored. If the COMPLEX_DATA format is used, the phase information is ignored. -n Run in no-statistical-costs mode. If the -i or -p options are given, snaphu will not use statistical costs. Information from a weight file (-w option) will still be used if given. -o outfile Write the unwrapped output to file called outfile. If the file formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped phase is written into the second data channel, while the interferogram magnitude is written into the first channel. The format FLOAT_DATA may also be used. -p value Run in Lp-norm mode with p=value, where value is a nonnegative decimal. Instead of statistical cost functions, the program uses Lp cost functions with statistically based weights (unless -n is also given). Solutions are still always congruent. Moreover, congruence is enforced within the solver routine, not as a post-optimization processing step. Therefore, if p=2, for example, least- squares cost functions are used, but the solution will probably be more accurate than one generated from a transform-based least-squares algorithm. -q Run in quantify-only mode. The input data are assumed to be unwrapped already, and the total cost of this solution is calculated and printed. The unwrapped phase is wrapped assuming congruence for the cost calculation. Round-off errors may limit the precision of the quantified cost. See the -u option for allowable file formats. -s Run in smooth-solution mode. The problem statis- tics and resulting cost functions are based on the assumption that the true unwrapped phase represents a generic surface with no discontinuities. This is the same as deformation mode with the DEFOMAX parameter set to zero. -t Run in topography mode. The problem statistics and resulting cost functions are based on the assump- tion that the true unwrapped phase represents sur- face elevation. This is the default. -u Assume that the input file is unwrapped rather than wrapped. The algorithm makes iterative improve- ments to this solution instead of using an initial- ization routine. The input file may be in the for- mats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA; the interferogram magnitude should be in the first data channel and the unwrapped phase should be in the second data channel. The format FLOAT_DATA may also be used. -v Run in verbose mode. Extra information on the algorithm's progress is printed to the standard output. -w weightfile Read external, scalar weights from file weightfile. The weights, which should be positive short inte- gers, are applied to whichever cost functions are used. There is one weight value for each arc in the network, so weightfile should be the concatena- tion of raster horizontal-flow and vertical-flow arc weights. Thus, for an N row by M column inter- ferogram, weightfile would consist of a rasterized (N-1) by M array followed by a rasterized N by (M-1) array of short integer data. This option is not well tested. --aa ampfile1 ampfile2 Amplitude data are read from the files specified. The data from the two individual SAR images forming the interferogram are assumed to be separately stored in files ampfile1 and ampfile2. These files should be in the format FLOAT_DATA. This option is similar to the -a option. --AA pwrfile1 pwrfile2 Similar to the --aa option, but power data are read from the specified files. --assemble dirname Assemble the tile-mode temporary files in the spec- ified directory. Most configuration options (from the command line and any configuration files) must be specified. This option is useful if the user wishes to modify tile-assembly parameters without unwrapping the individual tiles over again. --copyright, --info Print the software copyright notice and bug report info, then exit. --costinfile costfile Read statistical cost arrays from file costfile. This file should be in the format written by the --costoutfile option. The cost file does not con- trol whether snaphu runs in topography, deforma- tion, or smooth-solution mode; the latter two must be specified explicitly even if costfile was gener- ated while running in those modes. --costoutfile costfile Write statistical cost arrays to file costfile. This option can be used with the --costinfile option to save the time of generating statistical costs if the same costs are used multiple times. --debug, --dumpall Dump all sorts of intermediate arrays to files. --mst Use a minimum spanning tree (MST) algorithm for the initialization. This is the default. --mcf Use a minimum cost flow (MCF) algorithm for the initialization. The cs2 solver by Goldberg and Cherkassky is used. The modified network-simplex solver in L1 mode may give different results than the cs2 solver, though in principle both should be L1 optimal. --nproc n Use n parallel processes when in tile mode. The program forks a new process for each tile so that tiles can be unwrapped in parallel; at most n pro- cesses will run concurrently. Forking is done before data is read. The standard output streams of child processes are directed to log files in the temporary tile directory. --piece firstrow firstcol nrow ncol Read and unwrap only a subset or part of the input interferogram. The read piece is the nrow by ncol rectangle whose upper left corner is the pixel at row firstrow and column firstcol (indexed from 1). All input files (such as amplitude, coherence, etc.) are assumed to be the same size as the input phase file. All output files are nrow by ncol. --tile ntilerow ntilecol rowovrlp colovrlp Unwrap the interferogram in tile mode. The inter- ferogram is partitioned into ntilerow by ntilecol tiles, each of which is unwrapped independently. Tiles overlap by rowovrlp and colovrlp pixels in the row and column directions. The tiles are then segmented into reliable regions based on the cost functions, and the regions are reassembled. The program creates a subdirectory for temporary files in the directory of the eventual output file. This option is currently enabled only for statistical cost functions. FILE FORMATS The formats of input files may be specified in a configu- ration file. All of these formats are composed of raster, single-precision (float, real*4, or complex*8) floating- point data types in the platform's native byte order. Data are read line by line (across then down). Regardless of the file format, all input data arrays should have the same number of samples in width and depth and should be coregistered to one another. Note that weight files and cost files have their own formats. The allowable formats for other data files are described below. COMPLEX_DATA Alternating floats correspond to the real (in- phase) and imaginary (quadrature) components of complex data samples. The specified line length should be the number of complex samples (pairs of real and imaginary samples) per line. ALT_LINE_DATA Alternating lines (rows) of data correspond to lines of purely real data from two separate arrays. The first array is often the magnitude of the interferogram, and the second may be unwrapped phase, coherence, etc. This is also sometimes called hgt or line-interleaved format. ALT_SAMPLE_DATA Alternating samples correspond to purely real sam- ples from two separate arrays. This format is sometimes used for the amplitudes of the two SAR images. FLOAT_DATA The file contains data for only one channel or array, and the data are purely real. EXAMPLES Unwrap a wrapped topographic interferogram called ``wrappedfile'' whose line length is 1024 complex samples (output will be written to a file whose name is compiled into the program): snaphu wrappedfile 1024 Unwrap the same file as above, but use brightness informa- tion from the file ``ampfile,'' set the perpendicular baseline to -165 m at midswath, and place the output in a file called ``unwrappedfile'' (coherence data are gener- ated automatically if ``wrappedfile'' contains complex data and ``ampfile'' contains amplitude data from both SAR images): snaphu wrappedfile 1024 -a ampfile \ -b -165 -o unwrappedfile Unwrap the interferogram as above, but read correlation information from the file ``corrfile'' instead of generat- ing it from the interferogram and amplitude data: snaphu wrappedfile 1024 -a ampfile -c corrfile \ -b -165 -o unwrappedfile The following is equivalent to the previous example, but input parameters are read from a configuration file, and verbose output is displayed: cat > configfile # This is a comment line which will be ignored AMPFILE ampfile CORRFILE corrfile BPERP -165 OUTFILE unwrappedfile snaphu -v -f configfile wrappedfile 1024 Unwrap the same interferogram, but use only the MST ini- tialization (with scalar statistical weights) and write the output to ``mstfile'': snaphu -f configfile -i wrappedfile 1024 -o mstfile Read the unwrapped data in ``mstfile'' and use that as the initialization to the modified network-simplex solver: snaphu -f configfile -u mstfile 1024 -o unwrappedfile Note that in the previous two examples, the output file name in the configuration file is overrided by the one given on the command line. The previous two commands together are in principle equivalent to the preceding one, although round-off errors in flow-to-phase conversions may cause minor differences Unwrap the interferogram as above, but use the MCF algo- rithm for initialization: snaphu -f configfile wrappedfile 1024 --mcf Unwrap the interferogram once again, but first flatten it with the unwrapped data in ``estfile,'' then reinsert the subtracted phase after unwrapping: snaphu -f configfile wrappedfile 1024 -e estfile The following assumes that the wrapped input interferogram measures deformation, not topography. Unwrap the inter- ferogram with the given correlation data: snaphu -d wrappedfile 1024 -c corrfile Unwrap the input interferogram by minimizing the unweighted congruent L2 norm: snaphu -p 2 -n wrappedfile 1024 Unwrap the interferogram as a three-by-four set of tiles that overlap by 30 pixels, with the specified configura- tion file, using two processors: snaphu wrappedfile 1024 -f configfile \ --tile 3 4 30 30 --nproc 2 HINTS AND TIPS The program may print a warning message about costs being clipped to avoid overflow. If too many costs are clipped, the value of COSTSCALE may need to be decreased in a con- figuration file (via the -f option). If the program prints a warning message about an unexpected increase in the total solution cost, this is an indication that too many costs are clipped. It is usually okay if just a few costs are clipped. In topography mode, if the unwrapped result contains too many discontinuities, try increasing the value of LAYMINEI or decreasing the value of LAYCONST. The former deter- mines the normalized intensity threshold for layover, and the latter is the relative layover probability. If there are too many discontinuities running in azimuth, try decreasing the value of AZDZFACTOR, which affects the ratio of azimuth to range costs. If the baseline is not known, take a guess at it and be sure its sign is correct. Specify the SAR imaging geometry parameters as well as possible. The defaults assume ERS data with five looks taken in azimuth. In deformation mode, if the unwrapped result contains too many discontinuities, try increasing the value of DEFOTHRESHFACTOR or decreasing the value of DEFOCONST. If the surface displacement varies slowly and true disconti- nuities are not expected at all, DEFOMAX_CYCLE can be set to zero. This behavior is also invoked with the -s option. The resulting cost functions will be similar to correlation-weighted L2 cost functions, though the former are not necessarily centered on the wrapped gradients. Congruence is still enforced during rather than after optimization. The program can be run in initialize-only (-i) mode for quick down-and-dirty MST or MCF solutions. SIGNALS Once the iterative solver has started, snaphu traps the interrupt (INT) and hangup (HUP) signals. Upon receiving an interrupt, for example if the user types Ctrl-C, the program finishes a minor iteration, dumps its current solution to the output, and exits. If a second interrupt is given after the first (caught) interrupt, the program exits immediately. If a hangup signal is received, the program dumps its current solution then continues to exe- cute normally. EXIT STATUS Upon successful termination, the program exits with code 0. Errors result in exit code 1. FILES The following files may be useful for reference, but are not required. They are included in the program source distribution and may be installed somewhere on the system. snaphu.conf.full Template configuration file setting all valid input parameters (though some may be commented out). snaphu.conf.brief General-purpose template configuration file setting the most important or commonly modified input parameters. In addition to parameters read from configuration files specified on the command line, default parameters may be read from a system-wide configuration file if such a file is named when the program is compiled. BUGS The -w option has not been tested exhaustively. Extreme shadow discontinuities (i.e., abrupt elevation drops in increasing range due to cliffs facing away from the radar) are not modeled that well in the cost functions for topography mode. Abrupt changes in surface reflectivity, such as those of coastlines between bright land and dark water, might be misinterpreted as layover and assigned inappropriate costs. The algorithm's behavior may be unpredictable if the costs are badly scaled and excessively clipped to fit into their short-integer data types. There is no error checking that ensures that the network node potentials (incost and outcost) do not overflow their long-integer data types. Automatic flow clipping is built into the MST initializa- tion, but it can give erratic results and may loop infinitely for certain input data sets. It is conse- quently turned off by default. Dedicated programs for specific Lp objective functions may work better than snaphu in Lp mode. Note that snaphu enforces congruence as part of the problem formulation, however, not as a post-optimization processing step. REFERENCES C. W. Chen and H. A. Zebker, ``Two-dimensional phase unwrapping with use of statistical models for cost functions in nonlinear optimization,'' Journal of the Optical Society of America A, 18, 338-351 (2001). C. W. Chen and H. A. Zebker, ``Network approaches to two- dimensional phase unwrapping: intractability and two new algorithms,'' Journal of the Optical Society of America A, 17, 401-414 (2000). C. W. Chen and H. A. Zebker, ``Phase unwrapping for large SAR interferograms: Statistical segmentation and general- ized network models,'' IEEE Transactions on Geoscience and Remote Sensing, 40, 1709-1719 (2002). snaphu(1) GMTSAR_V5.7/.svn/pristine/fa/fa5b7fe7b40e032fa46bba0beb105c973ed76350.svn-base000444 015705 000000 00000143677 13505462014 026167 0ustar00sandwellwheel000000 000000 /* * $Id: epr_api.h,v 1.3 2009-03-27 10:25:54 sabine Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_API_H_INCL #define EPR_API_H_INCL #ifdef __cplusplus extern "C" { #endif /* to make the FILE structure available */ #include /* to make dynamic arrays available*/ #include "epr_ptrarray.h" #define EPR_PRODUCT_API_NAME_STR "ENVISAT Product Reader API" #define EPR_PRODUCT_API_VERSION_STR "2.3" /* needed by Doxygen */ /** \mainpage * \htmlinclude doxygen_main_content.html */ /** * The EPR_DataTypeId enumeration lists all possible data * types for field elements in ENVISAT dataset records. */ enum EPR_DataTypeId { /** The ID for unknown types. */ e_tid_unknown = 0, /** An array of unsigned 8-bit integers, C type is uchar* */ e_tid_uchar = 1, /** An array of signed 8-bit integers, C type is char* */ e_tid_char = 2, /** An array of unsigned 16-bit integers, C type is ushort* */ e_tid_ushort = 3, /** An array of signed 16-bit integers, C type is short* */ e_tid_short = 4, /** An array of unsigned 32-bit integers, C type is uint* */ e_tid_uint = 5, /** An array of signed 32-bit integers, C type is int* */ e_tid_int = 6, /** An array of 32-bit floating point numbers, C type is float* */ e_tid_float = 7, /** An array of 64-bit floating point numbers, C type is double* */ e_tid_double = 8, /** A zero-terminated ASCII string, C type is char* */ e_tid_string = 11, /** An array of unsigned character, C type is uchar* */ e_tid_spare = 13, /** A time (MJD) structure, C type is EPR_Time */ e_tid_time = 21 }; /** * The EPR_ErrCode enumeration lists all possible error * codes for the ENVISAT product reader API. */ enum EPR_ErrCode { /* Not an error */ e_err_none = 0, /* Low level errors */ e_err_null_pointer = 1, e_err_illegal_arg = 2, e_err_illegal_state = 3, e_err_out_of_memory = 4, e_err_index_out_of_range = 5, e_err_illegal_conversion = 6, e_err_illegal_data_type = 7, /* I/O errors */ e_err_file_not_found = 101, e_err_file_access_denied = 102, e_err_file_read_error = 103, e_err_file_write_error = 104, e_err_file_open_failed = 105, e_err_file_close_failed = 106, /* API related errors */ e_err_api_not_initialized = 201, e_err_invalid_product_id = 203, e_err_invalid_record = 204, e_err_invalid_band = 205, e_err_invalid_raster = 206, e_err_invalid_dataset_name = 207, e_err_invalid_field_name = 208, e_err_invalid_record_name = 209, e_err_invalid_product_name = 210, e_err_invalid_band_name = 211, e_err_invalid_data_format = 212, e_err_invalid_value = 213, e_err_invalid_keyword_name = 214, e_err_unknown_endian_order = 216, /* Bitmask term errors */ e_err_flag_not_found = 301, /* DDDB errors */ e_err_invalid_ddbb_format = 402 }; /** * The EPR_LogLevel enumeration lists possible log levels * for the ENVISAT product reader API. */ enum EPR_LogLevel { e_log_debug = -1, e_log_info = 0, e_log_warning = 1, e_log_error = 2 }; enum EPR_SampleModel { e_smod_1OF1 = 0, e_smod_1OF2 = 1, e_smod_2OF2 = 2, e_smod_3TOI = 3, e_smod_2TOF = 4 }; enum EPR_ScalingMethod { e_smid_non = 0, e_smid_lin = 1, e_smid_log = 2 }; struct EPR_ProductId; struct EPR_DatasetId; struct EPR_BandId; struct EPR_Record; struct EPR_RecordInfo; struct EPR_Field; struct EPR_FieldInfo; struct EPR_ProductInfo; struct EPR_DSD; struct EPR_Raster; struct EPR_DatasetRef; struct EPR_Flag; struct EPR_BandId; struct EPR_ParamElem; struct EPR_Time; typedef enum EPR_DataTypeId EPR_EDataTypeId; typedef enum EPR_ErrCode EPR_EErrCode; typedef enum EPR_LogLevel EPR_ELogLevel; typedef enum EPR_SampleModel EPR_ESampleModel; typedef enum EPR_ScalingMethod EPR_EScalingMethod; typedef struct EPR_ProductId EPR_SProductId; typedef struct EPR_DatasetId EPR_SDatasetId; typedef struct EPR_BandId EPR_SBandId; typedef struct EPR_Record EPR_SRecord; typedef struct EPR_RecordInfo EPR_SRecordInfo; typedef struct EPR_Field EPR_SField; typedef struct EPR_FieldInfo EPR_SFieldInfo; typedef struct EPR_DSD EPR_SDSD; typedef struct EPR_Raster EPR_SRaster; typedef struct EPR_FlagDef EPR_SFlagDef; typedef struct EPR_ParamElem EPR_SParamElem; typedef struct EPR_Time EPR_STime; typedef struct EPR_DatasetRef EPR_SDatasetRef; typedef struct EPR_BitmaskTerm EPR_SBitmaskTerm; typedef struct EPR_FlagSet EPR_SFlagSet; typedef void (*EPR_FErrHandler)(EPR_EErrCode err_code, const char* err_message); typedef void (*EPR_FLogHandler)(EPR_ELogLevel log_level, const char* log_message); typedef int epr_boolean; typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint; typedef unsigned long ulong; typedef int EPR_Magic; #define EPR_MAGIC_PRODUCT_ID 0xCAFFEE64 #define EPR_MAGIC_DATASET_ID 0xEFEABDCA #define EPR_MAGIC_BAND_ID 0xFEC21ABD #define EPR_MAGIC_RECORD 0x7BABACAE #define EPR_MAGIC_FIELD 0xBA0BABBA #define EPR_MAGIC_RASTER 0x0BABA0EB #define EPR_MAGIC_FLAG_DEF 0xCABA11AD #define TRUE 1 #define FALSE 0 #define EPR_PRODUCT_ID_STRLEN 48 /*************************************************************************/ /******************************** STRUCTURES *****************************/ /*************************************************************************/ /** * The EPR_ProductId structure contains information * about an ENVISAT product file which has been opened with the * epr_open_product() function. * * @see epr_open_product */ struct EPR_ProductId { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The file's path including the file name. */ char* file_path; /** * The input stream as returned by the ANSI C fopen * function for the given file path. */ FILE* istream; /** * The total size in bytes of the product file. */ uint tot_size; /** * The total width of product's scene raster in pixels. */ uint scene_width; /** * The total height of product's scene raster in pixels. */ uint scene_height; /** * The product identifier string obtained from the MPH * parameter 'PRODUCT'. *

The first 10 characters of this string identify the * the product type, e.g. "MER_1P__FR" for a MERIS Level 1b * full resolution product. The rest of the string decodes * product instance properties. */ char id_string[EPR_PRODUCT_ID_STRLEN + 1]; /** * The record representing the main product header (MPH). */ EPR_SRecord* mph_record; /** * The record representing the specific product header (SPH). */ EPR_SRecord* sph_record; /** * An array containing all (!) DSDs read from the product's * specific product header (SPH). */ EPR_SPtrArray* dsd_array; /** * Cache for record infos. Contains all record infos read * from the database for this file so far. * * The reason for caching record infos on a per-file-base is that * a some record infos instances can contain file related content * such as the number of pixels in a measurecment dataset record * (MDSR). */ EPR_SPtrArray* record_info_cache; /** * A table containing dynamic field info parameters. * Dynamic field info parameters are created at runtime because * the are derived from the product file contents and can * not be staically stored in the record info database. */ EPR_SPtrArray* param_table; /** * Contains and array of all dataset IDs for the product (type EPR_SDatasetId*) */ EPR_SPtrArray* dataset_ids; /** * Contains and array of all band IDs for the product (type EPR_SBandId*) */ EPR_SPtrArray* band_ids; /** * For MERIS L1b and RR and FR to provide backward compatibility */ int meris_iodd_version; }; /** * The EPR_DatasetId structure contains information * about a dataset within an ENVISAT product file which has been opened with the * epr_open_product() API function. * * A new EPR_DatasetId instance can be obtained with the * epr_get_dataset_id() or epr_get_dataset_id_at() API functions. * * @see epr_open_product * @see epr_get_dataset_id * @see epr_get_dataset_id_at */ struct EPR_DatasetId { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The ID of the product to which this dataset belongs to. */ EPR_SProductId* product_id; /** * The name as presented to the user in a dsd selection dialog */ char* dsd_name; /** * The dataset descriptor obtained from the current product. */ const EPR_SDSD* dsd; /** * The name as presented to the user in a dataset selection dialog */ char* dataset_name; /** * The record descriptor found in the DDDB for this dataset. */ const struct RecordDescriptor* record_descriptor; /** * The record info which describes a record of this dataset. */ EPR_SRecordInfo* record_info; /** * A short description of the band's contents */ char* description; }; /** * The EPR_DSD structure contains information * about the propertier of a dataset properties and its location * within an ENVISAT product file * * @see epr_read_each_dsd */ struct EPR_DSD { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The index of this DSD (zero-based) */ int index; /** * The dataset name. */ char* ds_name; /** * The dataset type descriptor. */ char* ds_type; /** * The filename in the DDDB with the description of this dataset. */ char* filename; /** * The offset of dataset-information the product file. */ uint ds_offset; /** * The size of dataset-information in dataset product file. */ uint ds_size; /** * The number of dataset records for the given dataset name. */ uint num_dsr; /** * The size of dataset record for the given dataset name. */ uint dsr_size; }; /** * The EPR_Record structure represents a * record instance read from an ENVISAT dataset. * A record is composed of multiple fields. * * @see EPR_Field */ struct EPR_Record { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The corresponding record info for this record (a 'soft' pointer). */ EPR_SRecordInfo* info; /** * The number of fields contained in this record. * The value is always equal info->field_infos->length and is * provided here for convenience only. */ uint num_fields; /** * The record fields. An array of EPR_Field* * of length info->num_fields */ EPR_SField** fields; }; /** * Represents a field within a record. A field is composed of * one or more data elements of one of the types defined in the * in field_info. * * @see EPR_Record */ struct EPR_Field { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The corresponding field info for this field. * supplierCardinality 1 */ EPR_SFieldInfo* info; /** * The elements of this field. * * In order to use the data, this member must be casted to one * of the following array data types: * * -# unsigned char* - array of unsigned 8-bit integer elements * -# char* - array of signed 8-bit integer fields * -# unsigned short* - array of unsigned 16-bit integer elements * -# short* - array of signed 16-bit integer elements * -# unsigned int* - array of unsigned 32-bit integer elements * -# int* - array of signed 32-bit integer elements * -# float* - array of signed 32-bit floating point elements * -# double* - array of signed 64-bit floating point elements * -# EPR_STime* - array of MJD elements * * Dedicated access routine are available * The element type is given by info->data_type_id and the array length by * info->num_elems. */ void* elems; }; /** * Represents a raster in which data will be stored. * * All 'size' parameter are in PIXEL. */ struct EPR_Raster { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The data type of the band's pixel values. *
All corresponding with EPR_DataTypeId types are possible */ EPR_EDataTypeId data_type; /** * The size in byte of a single element (sample) of this raster's buffer. */ uint elem_size; /** * The width of the source . */ uint source_width; /** * The height of the source. */ uint source_height; /** * The sub-sampling for the across-track direction in pixel. */ uint source_step_x; /** * The sub-sampling for the along-track direction in pixel. */ uint source_step_y; /** * The width of the raster in pixel. *
raster_width = (source_width - 1) / source_step_x + 1 */ uint raster_width; /** * The height of the raster in pixel. *
raster_height = (source_height - 1) / source_step_y + 1 */ uint raster_height; /** * The elements of this raster. *
Its volume is raster_width * raster_height * sizeof(data_type) in bytes. */ void* buffer; }; /** * The EPR_DatasetRef structure represents the information from dddb *
with the reference to data name (in dddb), field-name and index * of the element in field-array, in which (by name) searchable values are located. * Example for the search for a scaling_offset information: * This information for the reflec_10 is described with the Scaling_Factor_GADS.22.10 * In dataset_id the searched ENVISAT product name (e.g. MER_RR__2P) is located. *
In the corresponding file (e.g. /product/MER_RR__2P.dd) the path, * how to find that information will be decribed. * In that file, in the field number 22 there is an information about the location * of the searched value in the ENVISAT product data. * * @see EPR_SDatasetId */ struct EPR_DatasetRef { EPR_SDatasetId* dataset_id; int field_index; /* -1 if not used */ int elem_index; /* -1 if not used */ }; /** * Represents a flag-field within a flag-record. * */ struct EPR_FlagDef { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The flag name. */ char* name; /** * The bit mask describing this flag */ uint bit_mask; /** * The flag description. */ char* description; }; /** * The EPR_BandId structure contains information * about a band within an ENVISAT product file which has been opened with the * epr_open_product() API function. * * A new EPR_BandId instance can be obtained with the * epr_get_band_id() API function. * * @see epr_open_product * @see epr_get_band_id */ struct EPR_BandId { /** * The magic number for this structure. * IMPORTANT: This must always be the first member of this structure. */ EPR_Magic magic; /** * The ID of the product to which this band belongs to. */ EPR_SProductId* product_id; /** * The name as presented to the user in a band selection dialog * (also known as spectral subset) */ char* band_name; /** * The (zero-based) spectral band index. -1 if this is not a spectral band. */ int spectr_band_index; /** * The reference of the source dataset containing the raw data used to * create the band's pixel values. The external format used in the DDDB * is MDS-name.field, where field is a one-based * index (field=1 corresponds to the first field) */ EPR_SDatasetRef dataset_ref; /** * The sample model operation applied to the source dataset for getting the * correct samples from the MDS (for example MERIS L2). * Possible values are: * - * --> no operation (direct copy) * - 1OF2 --> first byte of 2-byte interleaved MDS * - 2OF2 --> second byte of 2-byte interleaved MDS * - 0123 --> combine 3-bytes interleaved to 4-byte integer */ EPR_ESampleModel sample_model; /** * The data type of the band's pixel values. Possible values are: * - * --> the datatype remains unchanged. * - uint8_t --> 8-bit unsigned integer * - uint32_t --> 32-bit unsigned integer * - Float --> 32-bit IEEE floating point */ EPR_EDataTypeId data_type; /** * The scaling method which must be applied to the raw source data in order * to get the 'real' pixel values in geo-physical units. * Possible values are: * - * --> no scaling applied * - Linear_Scale --> linear scaling applied: y = offset + scale * x * - Log_Scale --> logarithmic scaling applied: y = log10(offset + scale * x) */ EPR_EScalingMethod scaling_method; /** * The scaling offset. Possible values are:
* - * --> no offset provided (implies scaling_method=*) * - const --> a floating point constant * - GADS.field[.field2] --> value is provided in * global annotation dataset with name GADS in field * field. Optionally a second element index * for multiple-element fields can be given too */ float scaling_offset; /** * The scaling factor. * Possible values are: * - * --> no factor provided (implies scaling_method=*) * - const --> a floating point constant * - GADS.field[.field2] --> value is provided in global annotation dataset with name * GADS in field field. Optionally * a second element index for multiple-element fields can be * given too */ float scaling_factor; /** * A bit-mask expression used to filter valid pixels. All others are set to zero. */ char* bm_expr; /** * The flag coding is a list of EPR_SFlag instances. It determines each of the flags * used in this band (= flags dataset). * Each flag has a name, a bit-index and a description. */ EPR_SPtrArray* flag_coding; /** * The geophysical unit for the band's pixel values */ char* unit; /** * A short description of the band's contents */ char* description; /** * If true (=1) lines will be mirrored (flipped) after read into a raster * in order to ensure a pixel ordering in raster X direction from * WEST to EAST. */ epr_boolean lines_mirrored; }; /** * Represents a binary time value field in ENVISAT records. * *

Refer to ENVISAT documentation for the exact definition of * this data type. */ struct EPR_Time { int days; uint seconds; uint microseconds; }; /*************************************************************************/ /********************************* FUNCTIONS *****************************/ /*************************************************************************/ /* * ============================ (1) Initialisation ========================== */ /** * @defgroup INIT API Initialisation * @{ */ /** * Initializes the ENVISAT product reader API. * * * @param log_level the log level. All logging messages with a log level lower * than the given one, will be supressed * @param log_handler the log handler function pointer which * will be used for logging, can be NULL, * if logging shall be disabled * @param err_handler the new error handler (function pointer), * can be NULL, if errors shall not be reported * @return zero for success, an error code otherwise * * @author Norman Fomferra */ int epr_init_api(EPR_ELogLevel log_level, EPR_FLogHandler log_handler, EPR_FErrHandler err_handler); /** * Closes the ENVISAT product reader API by releasing all * resources allocated by the API. * * @author Norman Fomferra */ void epr_close_api(); /** @} */ /* * ============================ (2) Logging ============================ */ /** * @defgroup LOGGING Logging * @{ */ /** * Sets the log level for the ENVISAT API. All logging * messages with a log level lower than the given one, will * be supressed, thus the log handler will not be called * for such messages. * * @param log_level the new log level. All logging messages with a log level lower * than the given one, will be supressed * @return zero for success, an error code otherwise */ int epr_set_log_level(EPR_ELogLevel log_level); /** * Sets the log handler for the ENVISAT API. * * @param log_handler the log handler function pointer which * will be used for logging, can be NULL, if logging shall * be disabled * * @see epr_log_message */ void epr_set_log_handler(EPR_FLogHandler log_handler); /** * A default implementation for a logging function to be passed into * the epr_init() function. The function writes to * stdout, the format is: log_level date time log_message. * * @param log_level the log level * @param log_message the log message */ void epr_log_message(EPR_ELogLevel log_level, const char* log_message); /** @} */ /* * ========================= (3) Error Handling ========================== */ /** * @defgroup ERROR Error Handling * @{ */ /** * Sets the error handler for the ENVISAT API. * * @param err_handler the new error handler (function pointer), * can be NULL, if errors shall not be reported */ void epr_set_err_handler(EPR_FErrHandler err_handler); /** * Gets the error code of the error that occured during * the last API function call. * * @return the error code, e_err_none or zero if no error occured */ EPR_EErrCode epr_get_last_err_code(); /** * Gets the error message of the error that occured during * the last API function call. * * @return the error message, NULL if no error occured */ const char* epr_get_last_err_message(); /** * Clears the last error. After calling this function, calling * epr_get_last_err_code returns e_err_none or zero and * epr_get_last_err_message returns NULL. */ void epr_clear_err(); /** @} */ /* * ========================== (4) Input / Output ============================ */ /** * @defgroup IO Input / Output * @{ */ /* * ======================= (4.1) Product File Access ========================== */ /** * @defgroup ProductIO Product IO * @{ */ /** * Opens the ENVISAT product file with the given file path, *
reads MPH, SPH and all DSDs,
organized the table with * parameter of line length and tie points number; *
returns a file identifier for the product. * *

The ENVISAT product reader API must be initialized before. * * @param product_file_path the path to the ENVISAT product file * @return the product identifier, or NULL if the file * could not be opened. epr_get_error_code() should * be called in this case in order to obtain the error code. */ EPR_SProductId* epr_open_product(const char* product_file_path); /** * Closes the ENVISAT product file determined by the given product identifier. * * @param product_id the product identifier, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise */ int epr_close_product(EPR_SProductId* product_id); /** @} */ /** @} */ /* * ================= (4.2) Writing to a file or standard output ================= */ /** * @ingroup IO * @defgroup WtFoSO Writing to a file or standard output * This group of functions is for writing an object to a file * or standard output. * * An object can be: * - record * - field * - field element * * If FILE* istream is given, the ASCII file will be outputed, * else printed to standard output device. * *

In case record and/or field: * @param record the record, must not be NULL * @param field the field, must not be NULL * *

In case field element: * @param record the record, must not be NULL * @param field_index the index of field in the given record * @param element_index the index of element in the given field * * @param ostream the identifier of the output file. */ /** @{ */ void epr_print_record(const EPR_SRecord* record, FILE* ostream); void epr_print_field(const EPR_SField* field, FILE* ostream); void epr_print_element(const EPR_SRecord* record, uint field_index, uint element_index, FILE* ostream); void epr_dump_record(const EPR_SRecord* record); void epr_dump_field(const EPR_SField* field); void epr_dump_element(const EPR_SRecord* record, uint field_index, uint element_index); /** @} */ /* * ======================= (5) Basic Data Access ========================= */ /** * @defgroup DA Basic Data Access * @{ */ /** * Gets the product's scene width in pixels. * * @param product_id the product identifier, must not be NULL * @return the product's total scene width in pixels, or 0 * if an error occured. */ uint epr_get_scene_width(const EPR_SProductId* product_id); /** * Gets the product's scene height in pixels. * * @param product_id the product identifier, must not be NULL * @return the product's total scene height in pixels, or 0 * if an error occured. */ uint epr_get_scene_height(const EPR_SProductId* product_id); /** @} */ /* * ============================ (5.1) Dataset ============================== */ /** * @ingroup DA * @defgroup DATASET Dataset Access * @{ */ /** * Gets the number off all datasets contained in a product. * * @param product_id the product identifier, must not be NULL * @return the number off all dataset */ uint epr_get_num_datasets(EPR_SProductId* product_id); /** * Gets the dataset_id at the specified position within the product. * * @param product_id the product identifier, must not be NULL * @param index the index identifying the position of the dataset, starting with 0, * must not be negative * @return the requested dataset_id */ EPR_SDatasetId* epr_get_dataset_id_at(EPR_SProductId* product_id, uint index); /** * Gets the dataset_id coresponding to the specified dataset name. * * @param product_id the product identifier, must not be NULL * @param dataset_name the dataset name, must not be NULL * @return the requested dataset_id */ EPR_SDatasetId* epr_get_dataset_id(EPR_SProductId* product_id, const char* dataset_name); /** * Gets the name of the dataset for the given dataset ID. * * @param dataset_id the dataset identifier, must not be NULL * @return the name of the dataset. */ const char* epr_get_dataset_name(EPR_SDatasetId* dataset_id); /** * Gets the name of the dsd for the given dataset ID. * * @param dataset_id the dataset identifier, must not be NULL * @return the name of the dsd. */ const char* epr_get_dsd_name(const EPR_SDatasetId* dataset_id); /** * Gets the MPH record from the given product_id. * * @param product_id the product identifier, must not be NULL * @return the MPH record or NULL if an error occured. */ EPR_SRecord* epr_get_mph(const EPR_SProductId* product_id); /** * Gets the SPH record from the given product_id. * * @param product_id the product identifier, must not be NULL * @return the SPH record or NULL if an error occured. */ EPR_SRecord* epr_get_sph(const EPR_SProductId* product_id); /** * Gets the dataset descriptor (DSD) for the dataset specified by dataset_id. * * @param dataset_id the dataset identifier, must not be NULL * @return the pointer at the dsd or NULL if an error occured. */ const EPR_SDSD* epr_get_dsd(const EPR_SDatasetId* dataset_id); /** * Gets the number of records of the dataset specified by dataset_id. * * @param dataset_id the dataset identifier, must not be NULL * @return the number of records or 0 if an error occured. */ uint epr_get_num_records(const EPR_SDatasetId* dataset_id); uint epr_get_num_dsds(const EPR_SProductId* product_id); EPR_SDSD* epr_get_dsd_at(const EPR_SProductId* product_id, uint dsd_index); /** @} */ /* * ================================= (5.2) Records ============================ */ /** * @ingroup DA * @defgroup REC Record Access * @{ */ /** * Creates a new, empty record with a structure compatible with the dataset specified * by dataset_id. Such a record is typically used in subsequent calls to epr_read_record. * * @param dataset_id the dataset identifier, must not be NULL * @return the new record instance * or NULL if an error occured. */ EPR_SRecord* epr_create_record(EPR_SDatasetId* dataset_id); /** * Reads a record of a dataset specified by dataset_id. *

* The record is identified through the given dataset identifier and the given * zero-based record index. In order to reduce memory reallocation, a * record (pre-) created by the function epr_create_record * can be passed to this function. Data is then read into this given record. * If no record (NULL) is given, the function initiates a new * one. In both cases, the record in which the data is read into will be * returned. * * @param dataset_id the dataset identifier, must not be NULL * @param record_index the zero-based record index * @param record a pre-created record to reduce memory reallocation, * can be NULL to let the function allocate a new record * @return the record in which the data has been read into * or NULL if an error occured. */ EPR_SRecord* epr_read_record(EPR_SDatasetId* dataset_id, uint record_index, EPR_SRecord* record); /** * Frees the memory allocated through the given record. * *

After calling this function the given record pointer becomes * invalid and should not be used anymore. * */ void epr_free_record(EPR_SRecord* record); /** @} */ /* * =========================== (5.3) Field Access ============================= */ /** * @ingroup DA * @defgroup FA Field Access * @{ */ /** * Gets a field from the given record. * *

The field is here identified through the given name. *
It contains the field info and all corresponding values. * * @param record the record identifier, must not be NULL * @param field_name the the name of required field, must not be NULL. * @return the field or NULL if an error occured. */ const EPR_SField* epr_get_field(const EPR_SRecord* record, const char* field_name); /** * Gets the number of fields contained in the given record. * * @param record the record to be analysed, must not be NULL * @return the fields number or 0 if an error occured. */ uint epr_get_num_fields(const EPR_SRecord* record); /** * Gets a field at the specified position within the record. * * @param record the record from the field shall be returned, * must not be NULL * @param field_index the zero-based index (position within record) of the field * @return the field or NULL if an error occured. */ const EPR_SField* epr_get_field_at(const EPR_SRecord* record, uint field_index); /** * Gets the unit of the field. * * @param field the field from which the unit shall be returned, must not be NULL * @return the field unit or NULL if an error occured. */ const char* epr_get_field_unit(const EPR_SField* field); /** * Gets the description of the field. * * @param field field from which the description shall be returned, must not be NULL * * @return the field description or NULL if an error occured. */ const char* epr_get_field_description(const EPR_SField* field); /** * Gets the number of elements of the field. * * @param field field to be analysed, must not be NULL * * @return the number of elements of the field or 0 if an error occured. */ uint epr_get_field_num_elems(const EPR_SField* field); /** * Gets the name of the field. * * @param field field to be analysed, must not be NULL * * @return the field name or NULL if an error occured. */ const char* epr_get_field_name(const EPR_SField* field); /** * Gets the type of the field. * * @param field field to be analysed, must not be NULL * * @return the field type or 0 if an error occured. */ EPR_EDataTypeId epr_get_field_type(const EPR_SField* field); /** @} */ /* * ========================= (5.4) Single Element Access ========================= */ /** * @ingroup DA * @defgroup FSEA Field Single Element Access * This group of functions is for getting the elements of a field as a typed value. *
Typed value means that the returned variable is of a certain variable type, * e.g. such as short or float. *
The type is located in the field info. See epr_get_field_type. *
One field must have one type only. * * @param field the field, must not be NULL * @param elem_index the zero-based index of element to be returned, must not be negative. * * @return the typed value from given field */ /*@{*/ char epr_get_field_elem_as_char(const EPR_SField* field, uint elem_index); uchar epr_get_field_elem_as_uchar(const EPR_SField* field, uint elem_index); short epr_get_field_elem_as_short(const EPR_SField* field, uint elem_index); ushort epr_get_field_elem_as_ushort(const EPR_SField* field, uint elem_index); int epr_get_field_elem_as_int(const EPR_SField* field, uint elem_index); uint epr_get_field_elem_as_uint(const EPR_SField* field, uint elem_index); float epr_get_field_elem_as_float(const EPR_SField* field, uint elem_index); double epr_get_field_elem_as_double(const EPR_SField* field, uint elem_index); const EPR_STime* epr_get_field_elem_as_mjd(const EPR_SField* field); const char* epr_get_field_elem_as_str(const EPR_SField* field); /*@}*/ /* * =========================== (5.5) Array Element Access ============================= */ /** * @ingroup DA * @defgroup FAEA Field Array Element Access * This group of functions is for getting an array of field elements * of a certain data type. *

If the given field is not of the expected type, the functions * return NULL. * * @param field the field, must not be NULL * @return the data array of the expected type or NULL * if the field is of a different type */ /*@{*/ const char* epr_get_field_elems_char(const EPR_SField* field); const uchar* epr_get_field_elems_uchar(const EPR_SField* field); const short* epr_get_field_elems_short(const EPR_SField* field); const ushort* epr_get_field_elems_ushort(const EPR_SField* field); const int* epr_get_field_elems_int(const EPR_SField* field); const uint* epr_get_field_elems_uint(const EPR_SField* field); const float* epr_get_field_elems_float(const EPR_SField* field); const double* epr_get_field_elems_double(const EPR_SField* field); /*@}*/ /** * @ingroup DA * @defgroup CFE Copy Field Elems * This group of functions is for copying the data of the given field into the given * buffer of elements by selected type. The actual number of elements copied is the * minimum of the given number of elements (the buffer's size) and the actual number * of elements contained * in the field. *

If the actual field data type is not selected type, the function automatically * performs the conversion. * * @param field the field from which to copy the elements * @param buffer the buffer in which to copy the data * @param num_elems the number of elements in the given buffer * @return the actual number of elements copied */ /*@{*/ uint epr_copy_field_elems_as_ints(const EPR_SField* field, int* buffer, uint num_elems); uint epr_copy_field_elems_as_uints(const EPR_SField* field, uint* buffer, uint num_elems); uint epr_copy_field_elems_as_floats(const EPR_SField* field, float* buffer, uint num_elems); uint epr_copy_field_elems_as_doubles(const EPR_SField* field, double* buffer, uint num_elems); /*@}*/ /* * ======================== (6) Geophysical Data Access ========================= */ /** * @defgroup GDA Geopysical Data Access * @{ */ /** @} */ /* * ================================== (6.1) Raster =============================== */ /** * @ingroup GDA * @defgroup RASTER Raster Data Access * @{ */ /** * Creates a raster which is compatible with the data type contained in the band * identified by band_id. The created raster is used to read the data in it * (see epr_read_band_raster). *

* The raster is defined on the grid of the product, from which the data are read. Spatial * subsets and undersampling are possible) through the parameter of the function. *

* The concept of defining the raster is such: A certain portion of the ENVISAT product * will be read into the raster. This is called the source. The complete ENVISAT product can be * much greater than the source. One can move the raster over the complete ENVISAT product and * read in turn different parts - always of the size of the source - of it into the raster. * The source is specified by the parameter source_height and source_width. *

* A typical example is a processing in blocks. Lets say, a block * has 64x32 pixel. Then, my source has a width of 64 pixel and a height of 32 pixel. Another * example is a processing of complete image lines. Then, my source has a widths of the complete * product (for example 1121 for a MERIS RR product), and a height of 1). One can loop over all blocks * read into the raster and process it. *

* In addition, it is possible to defined a subsampling step for a raster. This means, that the * source is not read 1:1 into the raster, but that only every 2nd or 3rd pixel is read. This step * can be set differently for the across track (source_step_x) and along track (source_step_y) directions. * * @param band_id the band identifier. The raster will be compatible with the data type * of that band; must not be NULL * @param source_width the width (across track dimension) of the source to be read into the raster. See text above. * @param source_height the height (along track dimension) of the source to be read into the raster. See text above. * @param source_step_x the subsampling step across track of the source when reading into the raster. See text above. * @param source_step_y the subsampling step along track of the source when reading into the raster. See text above. * * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_compatible_raster(EPR_SBandId* band_id, uint source_width, uint source_height, uint source_step_x, uint source_step_y); /** * Creates a raster of the specified data type. This function can be used to create any type of raster, * e.g. for later use as a bit-mask. * * @param data_type the type of the data to stored in the raster, must not be NULL * @param source_width the width (across track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_height the height (along track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_step_x the subsampling step across track of the source when reading into the raster. See description of epr_create_compatible_raster. * @param source_step_y the subsampling step along track of the source when reading into the raster. See description of epr_create_compatible_raster. * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_raster(EPR_EDataTypeId data_type, uint source_width, uint source_height, uint source_step_x, uint source_step_y); /** * Creates a raster to be used for reading bitmasks. The raster returned always is of type byte. * * @param source_width the width (across track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_height the height (along track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_step_x the subsampling step across track of the source when reading into the raster. See description of epr_create_compatible_raster. * @param source_step_y the subsampling step along track of the source when reading into the raster. See description of epr_create_compatible_raster. * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_bitmask_raster(uint source_width, uint source_height, uint source_step_x, uint source_step_y); /** * Reads (geo-)physical values of the given band of the specified source-region. *

The source-region is a defined part of the whole ENVISAT product image, which shall be read into * a raster. In this routine the co-ordinates are specified, where the source-region to be read starts. * The dimension of the region and the sub-sampling are attributes of the raster into which the data are * read. * * @param band_id the identified of the band to be read into the raster. * @param offset_x across-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region * @param offset_y along-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region * @param raster the identifier to given raster information and raster buffer * * @return zero for success, and error code otherwise * * @see epr_create_compatible_raster * @see epr_create_rater */ int epr_read_band_raster(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster); /** * @todo 1 se/nf - doku */ uint epr_get_raster_elem_size(const EPR_SRaster* raster); /** * @todo 1 se/nf - doku */ void* epr_get_raster_elem_addr(const EPR_SRaster* raster, uint offset); /** * @todo 1 se/nf - doku */ void* epr_get_raster_pixel_addr(const EPR_SRaster* raster, uint x, uint y); /** * @todo 1 se/nf - doku */ void* epr_get_raster_line_addr(const EPR_SRaster* raster, uint y); /** * Gets the raster's scene width in pixels. * * @param raster the raster identifier, must not be NULL * @return the raster's total scene width in pixels, or 0 * if an error occured. */ uint epr_get_raster_width(EPR_SRaster* raster); /** * Gets the raster's scene height in pixels. * * @param raster the product identifier, must not be NULL * @return the raster's total scene height in pixels, or 0 * if an error occured. */ uint epr_get_raster_height(EPR_SRaster* raster); /** * Gets the number of all bands contained in a product. * * @param product_id the source product ID, must not be NULL * @return the number off all bands */ uint epr_get_num_bands(EPR_SProductId* product_id); /** * Gets the band ID at the specified position within the product. * * @param product_id the source product ID, must not be NULL * @param index the index identifying the position of the band, starting with 0, * must not be negative * @return the requested band ID, or NULL if not found */ EPR_SBandId* epr_get_band_id_at(EPR_SProductId* product_id, uint index); /** * Gets the band ID corresponding to the specified name. * * @param product_id the source product ID, must not be NULL * @param band_name the name of the band, must not be NULL * @return the requested band ID, or NULL if not found */ EPR_SBandId* epr_get_band_id(EPR_SProductId* product_id, const char* band_name); /** * Gets the name of the band for the given band ID. * * @param band_id the band identifier, must not be NULL * @return the name of the band. */ const char* epr_get_band_name(EPR_SBandId* band_id); /** * Release the memory allocated through a raster. * * @param raster the raster to be released. */ void epr_free_raster(EPR_SRaster* raster); /** @} */ /* * ============================ (6.2) Single Pixel Access ======================== */ /** * @ingroup GDA * @defgroup SPA Single Pixel Access * @{ */ /** * This group of functions is for getting the values of the elements of a raster * (i.e. pixel) in a type-safe way.
* * @param raster the raster which contains the pixel, must not be NULL * @param x the (zero-based) X co-ordinate of the pixel * @param y the (zero-based) Y co-ordinate of the pixel * * @return the typed value at the given co-ordinate. */ uint epr_get_pixel_as_uint(const EPR_SRaster* raster, int x, int y); int epr_get_pixel_as_int(const EPR_SRaster* raster, int x, int y); float epr_get_pixel_as_float(const EPR_SRaster* raster, int x, int y); double epr_get_pixel_as_double(const EPR_SRaster* raster, int x, int y); /*@}*/ /* * ================================= (7) Bitmasks ========================== */ /** * @defgroup BM Bitmask * @{ */ /** * Calculates a bit-mask, composed of flags of the given product and combined as described in the * given bit-mask expression, for the a certain dimension and sub-sampling as defined in the * given raster. *

* * @param product_id Identifier of the ENVISAT product for which the bit-mask shall be created. * This is used by the function to retreive the needed flags. * @param bm_expr A string holding the logical expression for the defintion of the bit-mask. * In a bit-mask expression, any number of the flag-names (found in the DDDB) can * be composed with "(", ")", "NOT", "AND", "OR". Valid bit-mask expression are for example:
* "flags.LAND OR flags.CLOUD" or "NOT flags.WATER AND flags.TURBID_S". * @param offset_x across-track co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region * @param offset_y along-track co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region * @param raster the raster for the bit-mask. The data type of the raster must be either e_tid_uchar or e_tid_char. * * @return zero for success, an error code otherwise * * @see create_band_raster */ int epr_read_bitmask_raster(EPR_SProductId* product_id, const char* bm_expr, int offset_x, int offset_y, EPR_SRaster* raster); /** @} */ /* * ================================= (8) Utility functions ========================== */ /** * @defgroup UTILS Utility Functions * @{ */ /** * Gets the size in bytes for an element of the given data type. */ uint epr_get_data_type_size(EPR_EDataTypeId data_type_id); /** * Gets the 'C' data type string for the given data type. */ const char* epr_data_type_id_to_str(EPR_EDataTypeId data_type_id); /** @} */ #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_API_H_INCL */ GMTSAR_V5.7/.svn/pristine/fa/fad2679a14436b07c2d2d6ed285299e7fb717e97.svn-base000444 015705 000000 00000053144 13505462014 025724 0ustar00sandwellwheel000000 000000 /* Structure to read ALOS signal data */ /* Each structure has write control string (WCS) and pointers (RVL) to aid in input and output. RJM June 2007 */ struct ALOS_image { struct sardata_record *rec1; struct sardata_descriptor *dfd; struct sardata_record *rec2; struct sardata_info *sdr; }; /* beginning of short binary segment */ struct sardata_record { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; #define SARDATA_RECORD_WCS \ "*********** SAR FDR BINARY **********\n" \ "record_seq_no ==> %4x\n" \ "record_subtype_code1 ==> %1x\n" \ "record_type_code1 ==> %1x\n" \ "record_subtype_code2 ==> %1x\n" \ "record_subtype_code3 ==> %1x\n" \ "record_length ==> %4x\n\n" #define SARDATA_RECORD_RVL(SP) \ (SP)->record_seq_no, (SP)->record_subtype_code1, (SP)->record_type_code1, (SP)->record_subtype_code2, \ (SP)->record_subtype_code3, (SP)->record_length /* end of short binary segment */ /* beginning of data descriptor segment */ struct sardata_descriptor { char ascii_ebcdic_flag[2]; char blank_1[2]; char format_doc_ID[12]; char format_control_level[2]; char file_design_descriptor[2]; char facility_soft_release[12]; char file_number[4]; char file_name[16]; char record_seq_loc_type_flag_1[4]; char record_seq_loc_type_flag_2[8]; char sequence_number_loc[4]; char record_code_loc_flag[4]; char record_code_loc[8]; char record_code_field_length[4]; char record_length_loc_flag[4]; char record_length_loc[8]; char record_length_field_length[4]; char blank_2[68]; char number_sar_data_records[6]; char sar_data_record_length[6]; char blank_3[24]; char num_bits_sample[4]; char num_sample_data_group[4]; char num_bytes_data_group[4]; char just_order_samples[4]; char num_sar_channels[4]; char num_lines_data_set[8]; char num_left_border_pixels[4]; char total_num_data_groups[8]; char num_right_border_pixels[4]; char num_top_border_lines[4]; char num_bottom_border_lines[4]; char interleave_indicator[4]; char num_physical_records_line[2]; char num_physical_records_multi_chan[2]; char num_bytes_prefix[4]; char num_bytes_SAR_data[8]; char num_bytes_suffix[4]; char pref_fix_repeat_flag[4]; char sample_data_lin_no[8]; char SAR_chan_num_loc[8]; char time_SAR_data_line[8]; char left_fill_count[8]; char right_fill_count[8]; char pad_pixels[4]; char blank_4[28]; char sar_data_line_qual_loc[8]; char calib_info_field_loc[8]; char gain_values_field_loc[8]; char bias_values_field_loc[8]; char sar_data_format_code_1[28]; char sar_data_format_code_2[4]; char num_left_fill_bits_pixel[4]; char num_right_fill_bits_pixel[4]; char max_range_pixel[8]; char blank_5[272]; }; #define SARDATA_DESCRIPTOR_WCS \ "*********** SAR DATA DESCRIPTOR**********\n" \ "ascii_ebcdic_flag ==> %.2s\n" \ "blank_1 ==> %.2s\n" \ "format_doc_ID ==> %.12s\n" \ "format_control_level ==> %.2s\n" \ "file_design_descriptor ==> %.2s\n" \ "facility_soft_release ==> %.12s\n" \ "file_number ==> %.4s\n" \ "file_name ==> %.16s\n" \ "record_seq_loc_type_flag_1 ==> %.4s\n" \ "record_seq_loc_type_flag_2 ==> %.8s\n" \ "sequence_number_loc ==> %.4s\n" \ "record_code_loc_flag ==> %.4s\n" \ "record_code_loc ==> %.8s\n" \ "record_code_field_length ==> %.4s\n" \ "record_length_loc_flag ==> %.4s\n" \ "record_length_loc ==> %.8s\n" \ "record_length_field_length ==> %.4s\n" \ "blank_2 ==> %.68s\n" \ "number_sar_data_records ==> %.6s\n" \ "sar_data_record_length ==> %.6s\n" \ "blank_3 ==> %.24s\n" \ "num_bits_sample ==> %.4s\n" \ "num_sample_data_group ==> %.4s\n" \ "num_bytes_data_group ==> %.4s\n" \ "just_order_samples ==> %.4s\n" \ "num_sar_channels ==> %.4s\n" \ "num_lines_data_set ==> %.8s\n" \ "num_left_border_pixels ==> %.4s\n" \ "total_num_data_groups ==> %.8s\n" \ "num_right_border_pixels ==> %.4s\n" \ "num_top_border_lines ==> %.4s\n" \ "num_bottom_border_lines ==> %.4s\n" \ "interleave_indicator ==> %.4s\n" \ "num_physical_records_line ==> %.2s\n" \ "num_physical_records_multi_chan ==> %.2s\n" \ "num_bytes_prefix ==> %.4s\n" \ "num_bytes_SAR_data ==> %.8s\n" \ "num_bytes_suffix ==> %.4s\n" \ "pref_fix_repeat_flag ==> %.4s\n" \ "sample_data_lin_no ==> %.8s\n" \ "SAR_chan_num_loc ==> %.8s\n" \ "time_SAR_data_line ==> %.8s\n" \ "left_fill_count ==> %.8s\n" \ "right_fill_count ==> %.8s\n" \ "pad_pixels ==> %.4s\n" \ "blank_4 ==> %.28s\n" \ "sar_data_line_qual_loc ==> %.8s\n" \ "calib_info_field_loc ==> %.8s\n" \ "gain_values_field_loc ==> %.8s\n" \ "bias_values_field_loc ==> %.8s\n" \ "sar_data_format_code_1 ==> %.28s\n" \ "sar_data_format_code_2 ==> %.4s\n" \ "num_left_fill_bits_pixel ==> %.4s\n" \ "num_right_fill_bits_pixel ==> %.4s\n" \ "max_range_pixel ==> %.8s\n" \ "blank_5 ==> %.272s\n" #define SARDATA_DESCRIPTOR_RVL(SP) \ (SP)->ascii_ebcdic_flag, (SP)->blank_1, (SP)->format_doc_ID, (SP)->format_control_level, (SP)->file_design_descriptor, \ (SP)->facility_soft_release, (SP)->file_number, (SP)->file_name, (SP)->record_seq_loc_type_flag_1, \ (SP)->record_seq_loc_type_flag_2, (SP)->sequence_number_loc, (SP)->record_code_loc_flag, (SP)->record_code_loc, \ (SP)->record_code_field_length, (SP)->record_length_loc_flag, (SP)->record_length_loc, (SP)->record_length_field_length, \ (SP)->blank_2, (SP)->number_sar_data_records, (SP)->sar_data_record_length, (SP)->blank_3, (SP)->num_bits_sample, \ (SP)->num_sample_data_group, (SP)->num_bytes_data_group, (SP)->just_order_samples, (SP)->num_sar_channels, \ (SP)->num_lines_data_set, (SP)->num_left_border_pixels, (SP)->total_num_data_groups, (SP)->num_right_border_pixels, \ (SP)->num_top_border_lines, (SP)->num_bottom_border_lines, (SP)->interleave_indicator, (SP)->num_physical_records_line, \ (SP)->num_physical_records_multi_chan, (SP)->num_bytes_prefix, (SP)->num_bytes_SAR_data, (SP)->num_bytes_suffix, \ (SP)->pref_fix_repeat_flag, (SP)->sample_data_lin_no, (SP)->SAR_chan_num_loc, (SP)->time_SAR_data_line, \ (SP)->left_fill_count, (SP)->right_fill_count, (SP)->pad_pixels, (SP)->blank_4, (SP)->sar_data_line_qual_loc, \ (SP)->calib_info_field_loc, (SP)->gain_values_field_loc, (SP)->bias_values_field_loc, (SP)->sar_data_format_code_1, \ (SP)->sar_data_format_code_2, (SP)->num_left_fill_bits_pixel, (SP)->num_right_fill_bits_pixel, (SP)->max_range_pixel, \ (SP)->blank_5 struct sardata_info { int sequence_number; char subtype[4]; int record_length; int data_line_number; int data_record_index; int n_left_fill_pixels; int n_data_pixels; int n_right_fill_pixels; int sensor_update_flag; int sensor_acquisition_year; int sensor_acquisition_DOY; int sensor_acquisition_msecs_day; short channel_indicator; short channel_code; short transmit_polarization; short receive_polarization; int PRF; int scan_ID; short onboard_range_compress; short chirp_type; int chirp_length; int chirp_constant_coeff; int chirp_linear_coeff; int chirp_quad_coeff; char spare1[4]; char spare2[4]; int receiver_gain; int nought_line_flag; int elec_antenna_elevation_angle; int mech_antenna_elevation_angle; int elec_antenna_squint_angle; int mech_antenna_squint_angle; int slant_range; int data_record_window_position; char spare3[4]; short platform_update_flag; int platform_latitude; int platform_longitude; int platform_altitude; int platform_ground_speed; int platform_velocity_x; int platform_velocity_y; int platform_velocity_z; int platform_acc_x; int platform_acc_y; int platform_acc_z; int platform_track_angle_1; int platform_track_angle_2; int platform_pitch_angle; int platform_roll_angle; int platform_yaw_angle; char blank1[92]; int frame_counter; char PALSAR_aux_data[100]; char blank2[24]; /* char blank3[132]; more blanks needed for ALOS2 data but not ALOS1 * data */ }; #define SARDATA__WCS \ "*********** SAR DATA DESCRIPTOR**********\n" \ "sequence_number ==> %d\n" \ "subtype ==> %.4s\n" \ "record_length ==> %d\n" \ "data_line_number ==> %d\n" \ "data_record_index ==> %d\n" \ "n_left_fill_pixels ==> %d\n" \ "n_data_pixels ==> %d\n" \ "n_right_fill_pixels ==> %d\n" \ "sensor_update_flag ==> %d\n" \ "sensor_acquisition_year ==> %d\n" \ "sensor_acquisition_DOY ==> %d\n" \ "sensor_acquisition_msecs_day ==> %d\n" \ "channel_indicator ==> %d\n" \ "channel_code ==> %d\n" \ "transmit_polarization ==> %d\n" \ "receive_polarization ==> %d\n" \ "PRF ==> %d\n" \ "scan_ID ==> %d\n" \ "onboard_range_compress ==> %d\n" \ "chirp_type ==> %d\n" \ "chirp_length ==> %d\n" \ "chirp_constant_coeff ==> %d\n" \ "chirp_linear_coeff ==> %d\n" \ "chirp_quad_coeff ==> %d\n" \ "receiver_gain ==> %d\n" \ "nought_line_flag ==> %d\n" \ "elec_antenna_elevation_angle ==> %d\n" \ "mech_antenna_elevation_angle ==> %d\n" \ "elec_antenna_squint_angle ==> %d\n" \ "mech_antenna_squint_angle ==> %d\n" \ "slant_range ==> %d\n" \ "data_record_window_position ==> %d\n" \ "platform_update_flag ==> %d\n" \ "platform_latitude ==> %d\n" \ "platform_longitude ==> %d\n" \ "platform_altitude ==> %d\n" \ "platform_ground_speed ==> %d\n" \ "platform_velocity_x ==> %d\n" \ "platform_velocity_y ==> %d\n" \ "platform_velocity_z ==> %d\n" \ "platform_acc_x ==> %d\n" \ "platform_acc_y ==> %d\n" \ "platform_acc_z ==> %d\n" \ "platform_track_angle_1 ==> %d\n" \ "platform_track_angle_2 ==> %d\n" \ "platform_pitch_angle ==> %d\n" \ "platform_roll_angle ==> %d\n" \ "platform_yaw_angle ==> %d\n" \ "frame_counter ==> %d\n" #define SARDATA_RVL(SP) \ (SP).sequence_number, (SP).subtype, (SP).record_length, (SP).data_line_number, (SP).data_record_index, \ (SP).n_left_fill_pixels, (SP).n_data_pixels, (SP).n_right_fill_pixels, (SP).sensor_update_flag, \ (SP).sensor_acquisition_year, (SP).sensor_acquisition_DOY, (SP).sensor_acquisition_msecs_day, (SP).channel_indicator, \ (SP).channel_code, (SP).transmit_polarization, (SP).receive_polarization, (SP).PRF, (SP).scan_ID, \ (SP).onboard_range_compress, (SP).chirp_type, (SP).chirp_length, (SP).chirp_constant_coeff, (SP).chirp_linear_coeff, \ (SP).chirp_quad_coeff, (SP).receiver_gain, (SP).nought_line_flag, (SP).elec_antenna_elevation_angle, \ (SP).mech_antenna_elevation_angle, (SP).elec_antenna_squint_angle, (SP).mech_antenna_squint_angle, (SP).slant_range, \ (SP).data_record_window_position, (SP).platform_update_flag, (SP).platform_latitude, (SP).platform_longitude, \ (SP).platform_altitude, (SP).platform_ground_speed, (SP).platform_velocity_x, (SP).platform_velocity_y, \ (SP).platform_velocity_z, (SP).platform_acc_x, (SP).platform_acc_y, (SP).platform_acc_z, (SP).platform_track_angle_1, \ (SP).platform_track_angle_2, (SP).platform_pitch_angle, (SP).platform_roll_angle, (SP).platform_yaw_angle, \ (SP).frame_counter GMTSAR_V5.7/.svn/pristine/fa/fa4c61f6880cea08822c70f9380cf16f8791b4ea.svn-base000444 015705 000000 00000063377 13505462014 026002 0ustar00sandwellwheel000000 000000 /**************************************************************************/ /* */ /* Mosaic 5 subswaths of ALOS ScanSAR in radar coordinates */ /* */ /* This program is written for better unwrapping because */ /* there will be phase difference for each subswath if unwrapping */ /* individually and the phase difference might not be a constant. */ /* */ /* This program will read the clock_start and near_range info from */ /* 5 PRM files of each subswath and read the pixel values from each */ /* GMT grids, calculate the coordinates of each subswath in meters, */ /* put each subswath in the corresponding coordinates. The boundary in */ /* range direction of each subswath is chosen to be at the middle of */ /* the overlapping region. */ /* */ /* After this step, should be phase unwrapping. */ /* */ /* May 18 2018 */ /* */ /* Xiaopeng Tong */ /* */ /* Update history: */ /* */ /* May 30 2018: divide mosaic into 5 subswath */ /* */ /**************************************************************************/ char *USAGE = " ALOS_mosaic_ss prmfile1 grd1 prmfile2 grd2 prmfile3 grd3 prmfile4 grd4 " "prmfile5 grd5 mosaic dec dir \n\n" " USAGE: \n" " mosaic 5 subswath of ALOS ScanSAR in radar coordinates\n\n" " prmfile[1-5] the PRM files \n" " grd[1-5] the GMT grid files (corr, phase, phasefilt) \n" " dec decimation factor in radar coordinates (100) \n" " dir dir is 1 means mosaic 5 subswaths \n" " dir is 0 means divide the mosaic into 5 subswaths \n"; #include "gmt.h" #include "gmtsar.h" void set_ALOS_defaults(struct PRM *); void get_sio_struct(FILE *, struct PRM *); int main(int argc, char **argv) { /* define variables */ FILE *prmfile; struct PRM prm; void *API = NULL; /* GMT control structure */ struct GMT_GRID *grid1 = NULL, *grid2 = NULL, *grid3 = NULL, *grid4 = NULL, *grid5 = NULL, *grid6 = NULL; double inc[2], wesn[4]; double clock_start[5], clock_start_rel[5], near_range[5], near_range_rel[5]; double prf[5], rng_samp_rate[5], vel[5]; int num_rng[5], num_azi[5]; double clock_start_min; int ra[5][4]; int range_ub, azimuth_ub; double sol = 3.0e8; double rsr, dr; double dec; int row, col; int i; int range, azimuth; int range_boundary1, range_boundary2, range_boundary3, range_boundary4, range_boundary5; int node1, node2, node3, node4, node5, node6; int dir; double num_x, num_y; /* parse arguments */ if (argc != 14) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 2, 0, NULL)) == NULL) return EXIT_FAILURE; /* read in dec */ dec = atof(argv[12]); /* read in dir */ dir = atoi(argv[13]); num_x = 1000; num_y = 5000; /* open and read PRM files */ /* subswath 1 */ if ((prmfile = fopen(argv[1], "r")) == NULL) { die("\n can't open PRM file:\n", argv[1]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[0] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[0] = prm.near_range; rng_samp_rate[0] = prm.fs; num_rng[0] = prm.num_rng_bins; num_azi[0] = prm.num_patches * prm.num_valid_az; prf[0] = prm.prf; vel[0] = prm.vel; fclose(prmfile); /* subswath 2 */ if ((prmfile = fopen(argv[3], "r")) == NULL) { die("\n can't open PRM file:\n", argv[3]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[1] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[1] = prm.near_range; rng_samp_rate[1] = prm.fs; num_rng[1] = prm.num_rng_bins; num_azi[1] = prm.num_patches * prm.num_valid_az; prf[1] = prm.prf; vel[1] = prm.vel; fclose(prmfile); /* subswath 3 */ if ((prmfile = fopen(argv[5], "r")) == NULL) { die("\n can't open PRM file:\n", argv[5]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[2] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[2] = prm.near_range; rng_samp_rate[2] = prm.fs; num_rng[2] = prm.num_rng_bins; num_azi[2] = prm.num_patches * prm.num_valid_az; prf[2] = prm.prf; vel[2] = prm.vel; fclose(prmfile); /* subswath 4 */ if ((prmfile = fopen(argv[7], "r")) == NULL) { die("\n can't open PRM file:\n", argv[7]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[3] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[3] = prm.near_range; rng_samp_rate[3] = prm.fs; num_rng[3] = prm.num_rng_bins; num_azi[3] = prm.num_patches * prm.num_valid_az; prf[3] = prm.prf; vel[3] = prm.vel; fclose(prmfile); /* subswath 5 */ if ((prmfile = fopen(argv[9], "r")) == NULL) { die("\n can't open PRM file:\n", argv[9]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[4] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[4] = prm.near_range; rng_samp_rate[4] = prm.fs; num_rng[4] = prm.num_rng_bins; num_azi[4] = prm.num_patches * prm.num_valid_az; prf[4] = prm.prf; vel[4] = prm.vel; fclose(prmfile); /* open and read GMT grids */ if (dir == 1) { /* subswath 1 */ if ((grid1 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 1: num_rng=%d, num_azi=%d\n", num_rng[0], num_azi[0]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid1->header->nx, grid1->header->inc[GMT_X], grid1->header->ny, grid1->header->inc[GMT_Y]); if ((num_rng[0] != round(grid1->header->nx * grid1->header->inc[GMT_X])) || (num_azi[0] != round(grid1->header->ny * grid1->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[2]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[2], grid1) == NULL) return EXIT_FAILURE; /* subswath 2 */ if ((grid2 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[4], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 2: num_rng=%d, num_azi=%d\n", num_rng[1], num_azi[1]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid2->header->nx, grid2->header->inc[GMT_X], grid2->header->ny, grid2->header->inc[GMT_Y]); if ((num_rng[1] != round(grid2->header->nx * grid2->header->inc[GMT_X])) || (num_azi[1] != round(grid2->header->ny * grid2->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[4]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[4], grid2) == NULL) return EXIT_FAILURE; /* subswath 3 */ if ((grid3 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[6], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 3: num_rng=%d, num_azi=%d\n", num_rng[2], num_azi[2]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid3->header->nx, grid3->header->inc[GMT_X], grid3->header->ny, grid3->header->inc[GMT_Y]); if ((num_rng[2] != round(grid3->header->nx * grid3->header->inc[GMT_X])) || (num_azi[2] != round(grid3->header->ny * grid3->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[6]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[6], grid3) == NULL) return EXIT_FAILURE; /* subswath 4 */ if ((grid4 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[8], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 4: num_rng=%d, num_azi=%d\n", num_rng[3], num_azi[3]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid4->header->nx, grid4->header->inc[GMT_X], grid4->header->ny, grid4->header->inc[GMT_Y]); if ((num_rng[3] != round(grid4->header->nx * grid4->header->inc[GMT_X])) || (num_azi[3] != round(grid4->header->ny * grid4->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[8]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[8], grid4) == NULL) return EXIT_FAILURE; /* subswath 5 */ if ((grid5 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[10], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 5: num_rng=%d, num_azi=%d\n", num_rng[4], num_azi[4]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid5->header->nx, grid5->header->inc[GMT_X], grid5->header->ny, grid5->header->inc[GMT_Y]); if ((num_rng[4] != round(grid5->header->nx * grid5->header->inc[GMT_X])) || (num_azi[4] != round(grid5->header->ny * grid5->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[10]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[10], grid5) == NULL) return EXIT_FAILURE; } else if (dir == 0) { /* subswath 1 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[0]; wesn[GMT_YHI] = num_azi[0]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid1 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "subswath 1", grid1)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node1 = 0; node1 < grid1->header->size; node1++) grid1->data[node1] = NAN; /* subswath 2 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[1]; wesn[GMT_YHI] = num_azi[1]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid2 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "subswath 2", grid2)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node2 = 0; node2 < grid2->header->size; node2++) grid2->data[node2] = NAN; /* subswath 3 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[2]; wesn[GMT_YHI] = num_azi[2]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid3 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "subswath 3", grid3)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node3 = 0; node3 < grid3->header->size; node3++) grid3->data[node3] = NAN; /* subswath 4 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[3]; wesn[GMT_YHI] = num_azi[3]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid4 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "subswath 4", grid4)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node4 = 0; node4 < grid4->header->size; node4++) grid4->data[node4] = NAN; /* subswath 5 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[4]; wesn[GMT_YHI] = num_azi[4]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid5 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "subswath 5", grid5)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node5 = 0; node5 < grid5->header->size; node5++) grid5->data[node5] = NAN; } else { die("dir must be either 1 or 0", ""); } /* find the maximum of the clock start */ clock_start_min = 1e10; for (i = 0; i < 5; i++) { if (clock_start[i] < clock_start_min) { clock_start_min = clock_start[i]; } } /* check the range sampling rate should be the same */ rsr = rng_samp_rate[0]; for (i = 1; i < 5; i++) { if (rsr != rng_samp_rate[i]) { die("\nrange sampling rate from PRM files are not the same.\n", " "); } } dr = sol / rsr / 2.0; fprintf(stderr, "dr = %f\n", dr); for (i = 0; i < 5; i++) { fprintf(stderr, "subswath %d, da = %f\n", i + 1, vel[i] / prf[i]); } /* calculate the relative clock in seconds */ for (i = 0; i < 5; i++) { clock_start_rel[i] = clock_start[i] - clock_start_min; near_range_rel[i] = near_range[i] - near_range[0]; fprintf(stderr, "subswath = %d, clock_start_rel = %f\n", i + 1, clock_start_rel[i]); fprintf(stderr, "subswath = %d, near_range_rel = %f\n", i + 1, near_range_rel[i]); } /* calculate the positions of the grids in dec meters */ ra[0][0] = round(near_range_rel[0] / dec); ra[0][1] = ra[0][0] + round(grid1->header->nx * grid1->header->inc[GMT_X] * dr / dec); ra[0][2] = round(clock_start_rel[0] * vel[0] / dec); ra[0][3] = ra[0][2] + round(grid1->header->ny * grid1->header->inc[GMT_Y] * vel[0] / prf[0] / dec); ra[1][0] = round(near_range_rel[1] / dec); ra[1][1] = ra[1][0] + round(grid2->header->nx * grid2->header->inc[GMT_X] * dr / dec); ra[1][2] = round(clock_start_rel[1] * vel[1] / dec); ra[1][3] = ra[1][2] + round(grid2->header->ny * grid2->header->inc[GMT_Y] * vel[1] / prf[1] / dec); ra[2][0] = round(near_range_rel[2] / dec); ra[2][1] = ra[2][0] + round(grid3->header->nx * grid3->header->inc[GMT_X] * dr / dec); ra[2][2] = round(clock_start_rel[2] * vel[2] / dec); ra[2][3] = ra[2][2] + round(grid3->header->ny * grid3->header->inc[GMT_Y] * vel[2] / prf[2] / dec); ra[3][0] = round(near_range_rel[3] / dec); ra[3][1] = ra[3][0] + round(grid4->header->nx * grid4->header->inc[GMT_X] * dr / dec); ra[3][2] = round(clock_start_rel[3] * vel[3] / dec); ra[3][3] = ra[3][2] + round(grid4->header->ny * grid4->header->inc[GMT_Y] * vel[3] / prf[3] / dec); ra[4][0] = round(near_range_rel[4] / dec); ra[4][1] = ra[4][0] + round(grid5->header->nx * grid5->header->inc[GMT_X] * dr / dec); ra[4][2] = round(clock_start_rel[4] * vel[4] / dec); ra[4][3] = ra[4][2] + round(grid5->header->ny * grid5->header->inc[GMT_Y] * vel[4] / prf[4] / dec); /* debug */ /*for (i=0;i<5;i++) { for (j=0;j<4;j++) { fprintf(stderr, "i=%d j=%d ra=%d\n", i,j,ra[i][j]); } }*/ range_boundary1 = round((ra[0][1] + ra[1][0]) / 2); range_boundary2 = round((ra[1][1] + ra[2][0]) / 2); range_boundary3 = round((ra[2][1] + ra[3][0]) / 2); range_boundary4 = round((ra[3][1] + ra[4][0]) / 2); range_boundary5 = ra[4][1]; if (dir == 1) { fprintf(stderr, "mosaic the 5 subswath...\n"); /* the lower boundary in the azimuth and range direction is 0 */ /* find the upper boundary in the azimuth and range direction */ azimuth_ub = -999999; for (i = 0; i < 5; i++) { if (ra[i][3] > azimuth_ub) { azimuth_ub = ra[i][3]; } } range_ub = ra[4][1]; /* make an output grid */ inc[GMT_X] = inc[GMT_Y] = dec; /* in meters */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = range_ub * inc[GMT_X]; wesn[GMT_YHI] = azimuth_ub * inc[GMT_Y]; /* debug */ /* fprintf(stderr, "inc[GMT_X] = %f , inc[GMT_Y] = %f\n", inc[GMT_X], inc[GMT_Y]); fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); */ if ((grid6 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "mosaic", grid6)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node6 = 0; node6 < grid6->header->size; node6++) grid6->data[node6] = NAN; /* put in the subswath grids */ /* debug */ // fprintf(stderr,"range_boundary1=%d\n",range_boundary1); /* put in subswath 1 */ for (range = ra[0][0]; range < range_boundary1; range++) { for (azimuth = ra[0][2]; azimuth < ra[0][3]; azimuth++) { node6 = GMT_Get_Index(API, grid6->header, azimuth, range); col = round((range * dec - near_range_rel[0]) / dr / grid1->header->inc[GMT_X]); row = grid1->header->ny - round((azimuth * dec - clock_start_rel[0] * vel[0]) / (vel[0] / prf[0]) / grid1->header->inc[GMT_Y]); if (col >= 0 && col <= grid1->header->nx && row >= 0 && row <= grid1->header->ny) { node1 = GMT_Get_Index(API, grid1->header, row, col); grid6->data[node6] = grid1->data[node1]; } } } /* put in subswath 2 */ /* debug */ // fprintf(stderr,"range_boundary2=%d\n",range_boundary2); for (range = range_boundary1; range < range_boundary2; range++) { for (azimuth = ra[1][2]; azimuth < ra[1][3]; azimuth++) { node6 = GMT_Get_Index(API, grid6->header, azimuth, range); col = round((range * dec - near_range_rel[1]) / dr / grid2->header->inc[GMT_X]); row = grid2->header->ny - round((azimuth * dec - clock_start_rel[1] * vel[1]) / (vel[1] / prf[1]) / grid2->header->inc[GMT_Y]); if (col >= 0 && col <= grid2->header->nx && row >= 0 && row <= grid2->header->ny) { node2 = GMT_Get_Index(API, grid2->header, row, col); grid6->data[node6] = grid2->data[node2]; } } } /* put in subswath 3 */ /* debug */ // fprintf(stderr,"range_boundary3=%d\n",range_boundary3); for (range = range_boundary2; range < range_boundary3; range++) { for (azimuth = ra[2][2]; azimuth < ra[2][3]; azimuth++) { node6 = GMT_Get_Index(API, grid6->header, azimuth, range); col = round((range * dec - near_range_rel[2]) / dr / grid3->header->inc[GMT_X]); row = grid3->header->ny - round((azimuth * dec - clock_start_rel[2] * vel[2]) / (vel[2] / prf[2]) / grid3->header->inc[GMT_Y]); if (col >= 0 && col <= grid3->header->nx && row >= 0 && row <= grid3->header->ny) { node3 = GMT_Get_Index(API, grid3->header, row, col); grid6->data[node6] = grid3->data[node3]; } } } /* put in subswath 4 */ /* debug */ // fprintf(stderr,"range_boundary4=%d\n",range_boundary4); for (range = range_boundary3; range < range_boundary4; range++) { for (azimuth = ra[3][2]; azimuth < ra[3][3]; azimuth++) { node6 = GMT_Get_Index(API, grid6->header, azimuth, range); col = round((range * dec - near_range_rel[3]) / dr / grid4->header->inc[GMT_X]); row = grid4->header->ny - round((azimuth * dec - clock_start_rel[3] * vel[3]) / (vel[3] / prf[3]) / grid4->header->inc[GMT_Y]); if (col >= 0 && col <= grid4->header->nx && row >= 0 && row <= grid4->header->ny) { node4 = GMT_Get_Index(API, grid4->header, row, col); grid6->data[node6] = grid4->data[node4]; } } } /* put in subswath 5 */ /* debug */ // fprintf(stderr,"range_boundary5=%d\n",range_boundary5); for (range = range_boundary4; range < range_boundary5; range++) { for (azimuth = ra[4][2]; azimuth < ra[4][3]; azimuth++) { node6 = GMT_Get_Index(API, grid6->header, azimuth, range); col = round((range * dec - near_range_rel[4]) / dr / grid5->header->inc[GMT_X]); row = grid5->header->ny - round((azimuth * dec - clock_start_rel[4] * vel[4]) / (vel[4] / prf[4]) / grid5->header->inc[GMT_Y]); if (col >= 0 && col <= grid5->header->nx && row >= 0 && row <= grid5->header->ny) { node5 = GMT_Get_Index(API, grid5->header, row, col); grid6->data[node6] = grid5->data[node5]; } } } /* output and clean up */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[11], grid6)) return EXIT_FAILURE; } else if (dir == 0) { fprintf(stderr, "divide the mosaic into 5 subswath...\n"); /* open the mosaic grid */ if ((grid6 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[11], NULL)) == NULL) return EXIT_FAILURE; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[11], grid6) == NULL) return EXIT_FAILURE; /* subswath 1 */ for (col = 0; col < grid1->header->nx; col++) { for (row = 0; row < grid1->header->ny; row++) { node1 = GMT_Get_Index(API, grid1->header, row, col); range = round((near_range_rel[0] + col * grid1->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[0] * vel[0] + (grid1->header->ny - row) * grid1->header->inc[GMT_Y] * vel[0] / prf[0]) / dec); node6 = GMT_Get_Index(API, grid6->header, azimuth, range); grid1->data[node1] = grid6->data[node6]; } } /* subswath 2 */ for (col = 0; col < grid2->header->nx; col++) { for (row = 0; row < grid2->header->ny; row++) { node2 = GMT_Get_Index(API, grid2->header, row, col); range = round((near_range_rel[1] + col * grid2->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[1] * vel[1] + (grid2->header->ny - row) * grid2->header->inc[GMT_Y] * vel[1] / prf[1]) / dec); node6 = GMT_Get_Index(API, grid6->header, azimuth, range); grid2->data[node2] = grid6->data[node6]; } } /* subswath 3 */ for (col = 0; col < grid3->header->nx; col++) { for (row = 0; row < grid3->header->ny; row++) { node3 = GMT_Get_Index(API, grid3->header, row, col); range = round((near_range_rel[2] + col * grid3->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[2] * vel[2] + (grid3->header->ny - row) * grid3->header->inc[GMT_Y] * vel[2] / prf[2]) / dec); node6 = GMT_Get_Index(API, grid6->header, azimuth, range); grid3->data[node3] = grid6->data[node6]; } } /* subswath 4 */ for (col = 0; col < grid4->header->nx; col++) { for (row = 0; row < grid4->header->ny; row++) { node4 = GMT_Get_Index(API, grid4->header, row, col); range = round((near_range_rel[3] + col * grid4->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[3] * vel[3] + (grid4->header->ny - row) * grid4->header->inc[GMT_Y] * vel[3] / prf[3]) / dec); node6 = GMT_Get_Index(API, grid6->header, azimuth, range); grid4->data[node4] = grid6->data[node6]; } } /* subswath 5 */ for (col = 0; col < grid5->header->nx; col++) { for (row = 0; row < grid5->header->ny; row++) { node5 = GMT_Get_Index(API, grid5->header, row, col); range = round((near_range_rel[4] + col * grid5->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[4] * vel[4] + (grid5->header->ny - row) * grid5->header->inc[GMT_Y] * vel[4] / prf[4]) / dec); node6 = GMT_Get_Index(API, grid6->header, azimuth, range); grid5->data[node5] = grid6->data[node6]; } } if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[2], grid1)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[4], grid2)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[6], grid3)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[8], grid4)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[10], grid5)) return EXIT_FAILURE; } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/e8/e82a66aa88204c3147bc2933d0b2a2fe108e7940.svn-base000444 015705 000000 00000014642 13505462014 025526 0ustar00sandwellwheel000000 000000 /* program to read sample window start time, pulse repetition interval, and count lines and image format counter in CEOS SAR data file rjm UCSD/SDSU Sept 97 modified by Paul F. Jamason IGPP/SIO */ #include "SARtape.h" #include "data_param.h" #include #include #include #include #include #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) #define MIN_PRF 1640.0 #define MAX_PRF 1720.0 #define SEC_PER_PRI_COUNT 210.94e-09 #define LINELENGTH 11644 #define PREFIX 412 #define SUFFIX 0 #define IFC_OFF 210 #define SOL 299792456.0 int is_big_endian_(void); int is_big_endian__(void); int main(argc, argv) int argc; char *argv[]; { char *data, logfilename[255]; // int file_size,year; int prior_pri_dn; int endian; FILE *indata, *logfile; struct sarleader_binary slb; /* pj use dpaf version */ /* struct sardata_rec sdr; */ struct sardata_dpaf_rec dpaf_sdr; struct SAR_info sar; struct lineparam info; int logflag; int nlines, linelength, prefix, suffix; int num_patches, good_bytes_per_line, first_sample; int iwrite = 0; // char *iptr; int ncnt, print_start; unsigned short *icu_time1, *icu_time2; double icu_time, icu_time_old; struct lineparam { int ifc; unsigned short swst_dn; unsigned short pri_dn; double pri; double swst; }; double calc_pri(); double calc_swst(); logflag = 0; /*------------------------*/ /* check endian */ /*------------------------*/ endian = is_big_endian_(); if (argc < 2) { fprintf(stderr, "Usage: %s datafile\n", argv[0]); exit(1); } indata = fopen(argv[1], "r"); strcpy(logfilename, "dataheader.log"); logfile = fopen(logfilename, "w"); logflag = 1; if (indata == NULL) { fprintf(stderr, "error opening data file\n"); exit(1); } /* read top of file */ (void)fread(&slb, sizeof(struct sarleader_binary), 1, indata); sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); /* read nominal parameters */ fscanf(indata, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); sar.dataheader = (struct sardata_header *)malloc(sizeof(struct sardata_header)); fscanf(indata, SARDATA_HEADER_RCS, SARDATA_HEADER_RVL(sar.dataheader)); /* reset file pointer and read first line of data */ fseek(indata, LINELENGTH, 0); (void)fread(&slb, sizeof(struct sarleader_binary), 1, indata); /* pj use dpaf version */ /* nitems = fread(&sdr,sizeof(struct sardata_rec),1,indata); */ (void)fread(&dpaf_sdr, sizeof(struct sardata_dpaf_rec), 1, indata); if (logflag) { fprintf(logfile, SARLEADER_FDR_FIXSEG_WCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fprintf(logfile, SARDATA_HEADER_WCS, SARDATA_HEADER_RVL(sar.dataheader)); /* fprintf(logfile,SARDATA_REC_WCS, SARDATA_REC_RVL(&sdr)); */ fprintf(logfile, SARDATA_DPAF_REC_WCS, SARDATA_DPAF_REC_RVL(&dpaf_sdr)); } /* used in SAR processor - each patch is 2800 long */ nlines = atoi(sar.dataheader->n_records); num_patches = nlines / 2800; /* double-check length of line */ linelength = atoi(sar.dataheader->record_length); /* check data preifx and suffic; add 12 to prefix for top of file */ prefix = atoi(sar.dataheader->n_bytes_prefix_data) + 12; suffix = atoi(sar.dataheader->n_bytes_suffix_data); /* SAR processor needs to know where the first sample is so skip the dataheader (specified in equivalent samples - 2 bytes per sample) and subtract the data suffix (in bytes) */ first_sample = prefix / 2; good_bytes_per_line = linelength - suffix; /* use PRI times the number of lines */ fprintf(stdout, "num_lines = %d\n", nlines); fprintf(stdout, "good_bytes_per_line = %d\n", good_bytes_per_line); fprintf(stdout, "bytes_per_line = %d\n", linelength); fprintf(stdout, "first_sample = %d\n", first_sample); fprintf(stdout, "num_patches = %d\n", num_patches); if (linelength != LINELENGTH) { fprintf(stderr, "**** header_linelength (%d) != default linelength (LINELENGTH)\n", linelength); } if (prefix != PREFIX) { fprintf(stderr, "**** header_prefix (%d) != default prefix (PREFIX)\n", prefix); } if (suffix != SUFFIX) { fprintf(stderr, "**** header_suffix (%d) != default suffix (SUFFIX)\n", suffix); } fseek(indata, LINELENGTH, 0); prior_pri_dn = 0; data = (char *)malloc(LINELENGTH); ncnt = 0; print_start = 0; icu_time_old = 0.; while (fread(data, LINELENGTH, 1, indata) != 0) { ncnt = ncnt + 1; memcpy((char *)&info, (data + IFC_OFF), sizeof(struct lineparam)); icu_time1 = (unsigned short *)(data + IFC_OFF - 6); icu_time2 = (unsigned short *)(data + IFC_OFF - 4); /* swap bytes if necessary */ if (endian == -1) { FIX_INT(info.ifc); FIX_SHORT(info.swst_dn); FIX_SHORT(info.pri_dn); FIX_SHORT(*icu_time1); FIX_SHORT(*icu_time2); } info.pri = calc_pri(info); info.swst = calc_swst(info); icu_time = (double)(*icu_time1) * 65536.0 + (double)(*icu_time2); if (((icu_time - icu_time_old) == 1) & (print_start == 0)) { fprintf(stdout, "icu_start = %.3lf\n", (icu_time - (ncnt - 2) * (info.pri * 256))); print_start = 1; } icu_time_old = icu_time; if (info.pri_dn != prior_pri_dn && iwrite == 0) { /* don't need to print near_range here because it is obtained from * ers_line_fixer */ /*fprintf(stdout, "near_range = %lf * \n",(info.swst*SOL/2.0));*/ fprintf(stdout, "PRF = %lf\n", (1.0 / info.pri)); prior_pri_dn = info.pri_dn; iwrite = 1; } } } /* these are taken verbatim from fix_line */ double calc_pri(info) struct lineparam info; { return (((double)info.pri_dn + 2.0) * SEC_PER_PRI_COUNT); } double calc_swst(info) struct lineparam info; { return ((double)info.swst_dn * SEC_PER_PRI_COUNT + 9.0 * info.pri - 6.6E-6); /* based on Johan Jacob Mohr and Søren Nørvang Madsen, Member, IEEE,Geometric Calibration of ERS Satellite SAR Images, 2001, calibriation should be 6.6*/ } /*_______________________________*/ /* check endian of machine */ /* 1 if big; -1 if little */ /*_______________________________*/ int is_big_endian_() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } int is_big_endian__() { return is_big_endian_(); } GMTSAR_V5.7/.svn/pristine/e8/e8f735e184797e77af1fb9bd1d192b93c4dbc514.svn-base000444 015705 000000 00000005707 13505462013 026011 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Hermite orbit interpolator based on fortran code of Werner Gunter * * 13th International Workshop on Laser Ranging, 2002, Washington, DC * *******************************************************************************/ /******************************************************************************** * Creator: David T. Sandwell and Rob Mellors * (San Diego State University, *Scripps Institution of Oceanography) * Date : 06/07/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 10/03/2007 - converted from FORTRAN to C * * * *****************************************************************************/ #include "gmtsar.h" #include "lib_functions.h" #include #include #include void hermite_c(double *x, double *y, double *z, int nmax, int nval, double xp, double *yp, int *ir) { /* interpolation by a polynomial using nval out of nmax given data points input: x(i) - arguments of given values (i=1,...,nmax) y(i) - functional values y=f(x) z(i) - derivatives z=f'(x) nmax - number of given points in list nval - number of points to use for interpolation xp - interpolation argument output: yp - interpolated value at xp ir - return code 0 = ok 1 = interpolation not in center interval 2 = argument out of range ***** calls no other routines */ int n, i, j, i0; double sj, hj, f0, f1; /* check to see if interpolation point is inside data range */ *yp = 0.0; n = nval - 1; *ir = 0; /* reduced index by 1 */ if (xp < x[0] || xp > x[nmax - 1]) { fprintf(stderr, "interpolation point outside of data constraints, %f %f %f\n", xp, x[0], x[nmax - 1]); *ir = 2; exit(1); } /* look for given value immediately preceeding interpolation argument */ for (i = 0; i < nmax; i++) { if (x[i] >= xp) break; } /* check to see if interpolation point is centered in data range */ i0 = i - (n + 1) / 2; if (i0 <= 0) { // fprintf(stderr,"hermite: interpolation not in center interval\n"); i0 = 0; *ir = 0; } /* reduced index by 1 */ if (i0 + n > nmax) { fprintf(stderr, "hermite: interpolation not in center interval\n"); i0 = nmax - n - 1; *ir = 0; } /* do Hermite interpolation */ for (i = 0; i <= n; i++) { sj = 0.0; hj = 1.0; for (j = 0; j <= n; j++) { if (j != i) { hj = hj * (xp - x[j + i0]) / (x[i + i0] - x[j + i0]); sj = sj + 1.0 / (x[i + i0] - x[j + i0]); } } f0 = 1.0 - 2.0 * (xp - x[i + i0]) * sj; f1 = xp - x[i + i0]; *yp = *yp + (y[i + i0] * f0 + z[i + i0] * f1) * hj * hj; if (isnan(*yp) != 0) { fprintf(stderr, "nan!\n"); exit(1); } } /* done */ } GMTSAR_V5.7/.svn/pristine/f7/f71e471c7b4498b8ee0b2c84896f77459c24c9e0.svn-base000444 015705 000000 00000001351 13505462013 025574 0ustar00sandwellwheel000000 000000 7 7 3.67879441e-01 4.85671785e-01 5.73753421e-01 6.06530660e-01 5.73753421e-01 4.85671785e-01 3.67879441e-01 4.85671785e-01 6.41180388e-01 7.57465128e-01 8.00737403e-01 7.57465128e-01 6.41180388e-01 4.85671785e-01 5.73753421e-01 7.57465128e-01 8.94839317e-01 9.45959469e-01 8.94839317e-01 7.57465128e-01 5.73753421e-01 6.06530660e-01 8.00737403e-01 9.45959469e-01 1.00000000e+00 9.45959469e-01 8.00737403e-01 6.06530660e-01 5.73753421e-01 7.57465128e-01 8.94839317e-01 9.45959469e-01 8.94839317e-01 7.57465128e-01 5.73753421e-01 4.85671785e-01 6.41180388e-01 7.57465128e-01 8.00737403e-01 7.57465128e-01 6.41180388e-01 4.85671785e-01 3.67879441e-01 4.85671785e-01 5.73753421e-01 6.06530660e-01 5.73753421e-01 4.85671785e-01 3.67879441e-01 GMTSAR_V5.7/.svn/pristine/f7/f7f94114e5c6b7cf9c99735b6675f59fbd5ed1ea.svn-base000444 015705 000000 00000000270 13505462014 026101 0ustar00sandwellwheel000000 000000 /* include file for state vector */ typedef struct state_vector { int yr; int jd; double sec; double x; double y; double z; double vx; double vy; double vz; } state_vector; GMTSAR_V5.7/.svn/pristine/f7/f75f023f19f7caa7c058c9d0694056d517c53306.svn-base000444 015705 000000 00000005713 13505462013 025471 0ustar00sandwellwheel000000 000000 /* @(#)physcon.h 1.1 98/12/08 */ /********1*********2*********3*********4*********5*********6*********7** * Name: physcon * Version: 9602.17 * Author: M. Schenewerk * Purpose: physical constants * * Global: * ----------- * C_to_K convert Celcius to Kelvin [degree K] * FIVE (double)5.0 * FOUR (double)4.0 * L1_frequency GPS L1 frequency [Hz] * L1_wavelength GPS L1 wavelength [m] * L2_frequency GPS L2 frequency [Hz] * L2_wavelength GPS L2 wavelength [m] * ONE (double)1.0 * THREE (double)3.0 * TWO (double)2.0 * ZERO (double)0.0 * cee speed of light [m/s] * deg_to_rad conversion for degrees to radians [rad/deg] * eflat Earth flattening factor * emajor Earth's semi-major axis [m] * eom Earth / Moon mass ratio * erate Earth's rotation rate [rad/sec] * pi pi * pio2 pi over two * rad_to_deg conversion for radians to degrees [deg/rad] * rad_to_hours conversion for radians to hours [hours/rad] * st_to_ut conversion for siderial to UT time [sid s/UT s] * soe Sun / Earth mass ratio * soem Sun / (Earth + Moon) mass ratio * tropical_year tropical year [day] * twopi two pi * ut_to_st conversion factor for UT to siderial time [UT s/sid s] * * Notes: * ----------- * * References: * ----------- * "IERS Standards (1992)", IERS Technical Note 13, ed. D.D. McCarthy, * July 1992 * ********1*********2*********3*********4*********5*********6*********7** * Modification History: * 9602.17, MSS, Converted to C. ********1*********2*********3*********4*********5*********6*********7*/ #ifndef physcon_h #define physcon_h #define ZERO ((double)0.0) #define ONE ((double)1.0) #define TWO ((double)2.0) #define THREE ((double)3.0) #define FOUR ((double)4.0) #define FIVE ((double)5.0) #define pi ((double)3.14159265358979) #define pio2 ((double)0.5 * pi) #define twopi ((double)2.0 * pi) #define deg_to_rad (twopi / (double)360.0) #define rad_to_deg ((double)360.0 / twopi) #define rad_to_hours ((double)24.0 / twopi) #define m_to_km ((double)1.0e-3) #define km_to_m ((double)1.0e+3) #define cee ((double)299792458.0) #define C_to_K ((double)273.15) #define J2000 ((long)51545) #define tropical_year ((double)365.2421910) #define ut_to_st ((double)1.00273790934) #define st_to_ut ((double)0.9972695663399999) #define emajor ((double)6378137.0) #define eflat ((double)0.00335281068118) #define erate ((double)7.292115855228083e-5) #define soem ((double)328900.550) #define eom ((double)81.3005870) #define soe (soem * ((double)1.0 + (double)1.0 / eom)) #define L1_frequency ((double)1575.420e+6) #define L2_frequency ((double)1227.600e+6) #define L1_wavelength ((double)cee / L1_frequency) #define L2_wavelength ((double)cee / L2_frequency) #endif /* physcon_h */ GMTSAR_V5.7/.svn/pristine/f7/f74f171b76ba1606c7378c7511b1ec0150355991.svn-base000444 015705 000000 00000000726 13505462013 025314 0ustar00sandwellwheel000000 000000 #include "lib_functions.h" #include #include /* Removes leading and trailing whitespaces from a string */ char *trimwhitespace(char *str) { char *end; // Trim leading space while (isspace((unsigned char)*str)) str++; if (*str == 0) // All spaces? return str; // Trim trailing space end = str + strlen(str) - 1; while (end > str && isspace((unsigned char)*end)) end--; // Write new null terminator *(end + 1) = 0; return str; } GMTSAR_V5.7/.svn/pristine/f0/f0be043195163240143a8a09a36c74ac5531ee5f.svn-base000444 015705 000000 00000002763 13505462014 025431 0ustar00sandwellwheel000000 000000 /* * $Id: epr_msph.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_MSPH_H_INCL #define EPR_MSPH_H_INCL #ifdef __cplusplus extern "C" { #endif #include /* just to get the ANSI-C type FILE */ /*void epr_read_mph(EPR_SProductId* product_id);*/ EPR_SRecord* epr_parse_header(const char* header_name, const char* ascii_source); void epr_set_header_field_values(EPR_SRecord* record, EPR_SPtrArray* header_values); uint epr_compare_param(EPR_SProductId* product_id); void epr_parse_double_token(EPR_SPtrArray* header_values, char* token_value, uint* value_number, uint* l, EPR_EDataTypeId* tp); void epr_parse_int_token(EPR_SPtrArray* header_values, char* token_value, uint* value_number, uint* l, EPR_EDataTypeId* tp); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* EPR_MSPH_H_INCL */ GMTSAR_V5.7/.svn/pristine/f0/f0713231953a39509eacd2bedf05f31133e74536.svn-base000444 015705 000000 00000007122 13505462013 025434 0ustar00sandwellwheel000000 000000 /* $Id: read_xcorr_data.c 39 2013-04-07 00:49:34Z pwessel $ */ #include "gmtsar.h" #include "xcorr.h" #include #include #include #include /*-------------------------------------------------------*/ void read_complex_short2(FILE *f, struct FCOMPLEX *d, int iy, int npy, int nx, short *tmp) { long num_to_seek; int i, j; num_to_seek = 2 * iy * nx * sizeof(short); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers */ for (i = 0; i < npy; i++) { fread(&tmp[0], 2 * sizeof(short), nx, f); /* read whole line */ /* read into complex float */ for (j = 0; j < nx; j++) { d[i * nx + j].r = (float)tmp[2 * j]; d[i * nx + j].i = (float)tmp[2 * j + 1]; // d[i*nx+j].r = // sqrt(((float)tmp[2*j])*((float)tmp[2*j])+((float)tmp[2*j+1])*((float)tmp[2*j+1])); // d[i*nx+j].i = 0.0; } } } /*-------------------------------------------------------*/ void read_real_float2(FILE *f, struct FCOMPLEX *d, int iy, int npy, int nx, float *tmp) { long num_to_seek; int i, j; num_to_seek = iy * nx * sizeof(float); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers */ for (i = 0; i < npy; i++) { fread(&tmp[0], sizeof(float), nx, f); /* read whole line */ /* read into complex float */ for (j = 0; j < nx; j++) { d[i * nx + j].r = (float)tmp[j]; d[i * nx + j].i = 0.0; } } } /*-------------------------------------------------------*/ void read_real_float_grid(struct GMT_GRID *f, struct FCOMPLEX *d, int iy, int npy, int nx, int ny) { // long num; int i, j; // num_to_seek = iy*nx; // fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers */ for (i = 0; i < npy; i++) { // fread(&tmp[0],sizeof(float), nx, f); /* read whole line */ /* read into complex float */ for (j = 0; j < nx; j++) { // num = i+npy+j*ny; d[i * nx + j].r = f->data[(i + iy) * nx + j]; d[i * nx + j].i = 0.0; } } } /*-------------------------------------------------------*/ void read_xcorr_data(struct xcorr *xc, int iloc) { int iy, ishft; short *tmp_m, *tmp_s; float *tmp2_m, *tmp2_s; tmp_m = (short *)malloc(2 * xc->m_nx * sizeof(short)); /* whole line */ tmp2_m = (float *)malloc(2 * xc->m_nx * sizeof(float)); /* whole line */ tmp_s = (short *)malloc(2 * xc->s_nx * sizeof(short)); /* whole line */ tmp2_s = (float *)malloc(2 * xc->s_nx * sizeof(float)); /* whole line */ /* set locations and read data for master */ /* read whole line at correct y offset */ iy = xc->loc[iloc].y - xc->npy / 2; if (debug) fprintf(stderr, " reading data from master at y = %d and %d items\n", iy, xc->m_nx); if (xc->format == 0) read_complex_short2(xc->data1, xc->d1, iy, xc->npy, xc->m_nx, tmp_m); if (xc->format == 1) read_real_float2(xc->data1, xc->d1, iy, xc->npy, xc->m_nx, tmp2_m); if (xc->format == 2) read_real_float_grid(xc->D1, xc->d1, iy, xc->npy, xc->m_nx, xc->m_ny); /* set locations and read data for slave */ ishft = (int)xc->loc[iloc].y * xc->astretcha; iy = xc->loc[iloc].y + xc->y_offset + ishft - xc->npy / 2; if (debug) fprintf(stderr, " reading data from slave at y = %d and %d items\n", iy, xc->s_nx); if (xc->format == 0) read_complex_short2(xc->data2, xc->d2, iy, xc->npy, xc->s_nx, tmp_s); if (xc->format == 1) read_real_float2(xc->data2, xc->d2, iy, xc->npy, xc->s_nx, tmp2_s); if (xc->format == 2) read_real_float_grid(xc->D2, xc->d2, iy, xc->npy, xc->s_nx, xc->s_ny); free((char *)tmp_m); free((char *)tmp2_m); free((char *)tmp_s); free((char *)tmp2_s); } GMTSAR_V5.7/.svn/pristine/f0/f0da19fe08afc44bba6369c854c3c3bebd94b161.svn-base000444 015705 000000 00000002121 13505462013 026152 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_cmp performs the range compression operation on raw radar echos. * * using a precomputed range reference function. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "gmt.h" #include "siocomplex.h" #include "soi.h" #include void rng_cmp(void *API, int ranfft, fcomplex *data, fcomplex *ref) { int i; GMT_FFT_1D(API, (float *)data, ranfft, GMT_FFT_FWD, GMT_FFT_COMPLEX); for (i = 0; i < ranfft; i++) { data[i] = Cmul(ref[i], data[i]); } GMT_FFT_1D(API, (float *)data, ranfft, GMT_FFT_INV, GMT_FFT_COMPLEX); } GMTSAR_V5.7/.svn/pristine/cc/ccdf1f6f649aa096c58e0967280908cdd911c9c6.svn-base000444 015705 000000 00000176071 13505462014 026010 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu statistical cost model source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* function: BuildCostArrays() * --------------------------- * Builds cost arrays for arcs based on interferogram intensity * and correlation, depending on options and passed parameters. */ void BuildCostArrays(void ***costsptr, short ***mstcostsptr, float **mag, float **wrappedphase, float **unwrappedest, long linelen, long nlines, long nrow, long ncol, paramT *params, tileparamT *tileparams, infileT *infiles, outfileT *outfiles){ long row, col, maxcol, tempcost; long poscost, negcost, costtypesize; float **pwr, **corr; short **weights, **rowweight, **colweight, **scalarcosts = NULL; void **costs, **rowcost = NULL, **colcost = NULL; void (*CalcStatCost)() = NULL; /* read weights */ weights=NULL; ReadWeightsFile(&weights,infiles->weightfile,linelen,nlines,tileparams); rowweight=weights; colweight=&weights[nrow-1]; /* if we're only initializing and we don't want statistical weights */ if(params->initonly && params->costmode==NOSTATCOSTS){ *mstcostsptr=weights; return; } /* size of the data type for holding cost data depends on cost mode */ if(params->costmode==TOPO){ costtypesize=sizeof(costT); }else if(params->costmode==DEFO){ costtypesize=sizeof(costT); }else if(params->costmode==SMOOTH){ costtypesize=sizeof(smoothcostT); } /* build or read the statistical cost arrays unless we were told not to */ if(strlen(infiles->costinfile)){ fprintf(sp1,"Reading cost information from file %s\n",infiles->costinfile); costs=NULL; Read2DRowColFile((void ***)&costs,infiles->costinfile, linelen,nlines,tileparams,costtypesize); (*costsptr)=costs; }else if(params->costmode!=NOSTATCOSTS){ /* get intensity and correlation info */ /* correlation generated from interferogram and amplitude if not given */ GetIntensityAndCorrelation(mag,wrappedphase,&pwr,&corr,infiles, linelen,nlines,nrow,ncol,outfiles, params,tileparams); /* call specific functions for building cost array and */ /* set global pointers to functions for calculating and evaluating costs */ if(params->costmode==TOPO){ fprintf(sp1,"Calculating topography-mode cost parameters\n"); costs=BuildStatCostsTopo(wrappedphase,mag,unwrappedest,pwr,corr, rowweight,colweight,nrow,ncol,tileparams, outfiles,params); }else if(params->costmode==DEFO){ fprintf(sp1,"Calculating deformation-mode cost parameters\n"); costs=BuildStatCostsDefo(wrappedphase,mag,unwrappedest,corr, rowweight,colweight,nrow,ncol,tileparams, outfiles,params); }else if(params->costmode==SMOOTH){ fprintf(sp1,"Calculating smooth-solution cost parameters\n"); costs=BuildStatCostsSmooth(wrappedphase,mag,unwrappedest,corr, rowweight,colweight,nrow,ncol,tileparams, outfiles,params); }else{ fprintf(sp0,"unrecognized cost mode\n"); exit(ABNORMAL_EXIT); } (*costsptr)=costs; }/* end if(params->costmode!=NOSTATCOSTS) */ /* set array subpointers and temporary cost-calculation function pointer */ if(params->costmode==TOPO){ rowcost=costs; colcost=(void **)&(((costT **)costs)[nrow-1]); CalcStatCost=CalcCostTopo; }else if(params->costmode==DEFO){ rowcost=costs; colcost=(void **)&(((costT **)costs)[nrow-1]); CalcStatCost=CalcCostDefo; }else if(params->costmode==SMOOTH){ rowcost=costs; colcost=(void **)&(((smoothcostT **)costs)[nrow-1]); CalcStatCost=CalcCostSmooth; } /* dump statistical cost arrays */ if(strlen(infiles->costinfile) || params->costmode!=NOSTATCOSTS){ if(strlen(outfiles->costoutfile)){ Write2DRowColArray((void **)costs,outfiles->costoutfile, nrow,ncol,costtypesize); }else{ if(strlen(outfiles->rowcostfile)){ Write2DArray((void **)rowcost,outfiles->rowcostfile, nrow-1,ncol,costtypesize); } if(strlen(outfiles->colcostfile)){ Write2DArray((void **)colcost,outfiles->colcostfile, nrow,ncol-1,costtypesize); } } } /* get memory for scalar costs if in Lp mode */ if(params->p>=0){ scalarcosts=(short **)Get2DRowColMem(nrow,ncol, sizeof(short *),sizeof(short)); (*costsptr)=(void **)scalarcosts; } /* now, set scalar costs for MST initialization or optimization if needed */ if(params->costmode==NOSTATCOSTS){ /* if in no-statistical-costs mode, copy weights to scalarcosts array */ if(!params->initonly){ for(row=0;row<2*nrow-1;row++){ if(rowunwrapped){ (*mstcostsptr)=weights; }else{ Free2DArray((void **)weights,2*nrow-1); (*mstcostsptr)=NULL; } }else if(!params->unwrapped || params->p>=0){ /* if we got here, we had statistical costs and we need scalar weights */ /* from them for MST initialization or for Lp optimization */ for(row=0;row<2*nrow-1;row++){ if(rowmaxcost */ if(tempcostmaxcost){ if(tempcost>MINSCALARCOST){ weights[row][col]=tempcost; }else{ weights[row][col]=MINSCALARCOST; } }else{ weights[row][col]=params->maxcost; } if(params->p>=0){ scalarcosts[row][col]=weights[row][col]; } } } /* set costs for corner arcs to prevent ambiguous flows */ weights[nrow-1][0]=LARGESHORT; weights[nrow-1][ncol-2]=LARGESHORT; weights[2*nrow-2][0]=LARGESHORT; weights[2*nrow-2][ncol-2]=LARGESHORT; if(params->p>=0){ scalarcosts[nrow-1][0]=LARGESHORT; scalarcosts[nrow-1][ncol-2]=LARGESHORT; scalarcosts[2*nrow-2][0]=LARGESHORT; scalarcosts[2*nrow-2][ncol-2]=LARGESHORT; } /* dump mst initialization costs */ if(strlen(outfiles->mstrowcostfile)){ Write2DArray((void **)rowweight,outfiles->mstrowcostfile, nrow-1,ncol,sizeof(short)); } if(strlen(outfiles->mstcolcostfile)){ Write2DArray((void **)colweight,outfiles->mstcolcostfile, nrow,ncol-1,sizeof(short)); } if(strlen(outfiles->mstcostsfile)){ Write2DRowColArray((void **)rowweight,outfiles->mstcostsfile, nrow,ncol,sizeof(short)); } /* unless input is unwrapped, calculate initialization max flow */ if(params->initmaxflow==AUTOCALCSTATMAX && !params->unwrapped){ CalcInitMaxFlow(params,(void **)costs,nrow,ncol); } /* free costs memory if in init-only or Lp mode */ if(params->initonly || params->p>=0){ Free2DArray((void **)costs,2*nrow-1); } /* use memory allocated for weights arrays for mstcosts if needed */ if(!params->unwrapped){ (*mstcostsptr)=weights; }else{ Free2DArray((void **)weights,2*nrow-1); } }else{ Free2DArray((void **)weights,2*nrow-1); } } /* function: BuildStatCostsTopo() * ------------------------------ * Builds statistical cost arrays for topography mode. */ void **BuildStatCostsTopo(float **wrappedphase, float **mag, float **unwrappedest, float **pwr, float **corr, short **rowweight, short **colweight, long nrow, long ncol, tileparamT *tileparams, outfileT *outfiles, paramT *params){ long row, col, iei, nrho, nominctablesize; long kperpdpsi, kpardpsi, sigsqshortmin; double a, re, dr, slantrange, nearrange, nominc0, dnominc; double nomincangle, nomincind, sinnomincangle, cosnomincangle, bperp; double baseline, baselineangle, lambda, lookangle; double dzlay, dzei, dzr0, dzrcrit, dzeimin, dphilaypeak, dzrhomax; double azdzfactor, dzeifactor, dzeiweight, dzlayfactor; double avgei, eicrit, layminei, laywidth, slope1, const1, slope2, const2; double rho, rho0, rhomin, drho, rhopow; double sigsqrho, sigsqrhoconst, sigsqei, sigsqlay; double glay, costscale, ambiguityheight, ztoshort, ztoshortsq; double nshortcycle, midrangeambight; float **ei, **dpsi, **avgdpsi, *dzrcrittable, **dzrhomaxtable; costT **costs, **rowcost, **colcost; signed char noshadow, nolayover; /* get memory and set cost array pointers */ costs=(costT **)Get2DRowColMem(nrow,ncol,sizeof(costT *),sizeof(costT)); rowcost=(costT **)costs; colcost=(costT **)&costs[nrow-1]; /* set up */ rho0=(params->rhosconst1)/(params->ncorrlooks)+(params->rhosconst2); rhomin=params->rhominfactor*rho0; rhopow=2*(params->cstd1)+(params->cstd2)*log(params->ncorrlooks) +(params->cstd3)*(params->ncorrlooks); sigsqshortmin=params->sigsqshortmin; kperpdpsi=params->kperpdpsi; kpardpsi=params->kpardpsi; dr=params->dr; nearrange=params->nearrange+dr*tileparams->firstcol; drho=params->drho; nrho=(long )floor((1-rhomin)/drho)+1; nshortcycle=params->nshortcycle; layminei=params->layminei; laywidth=params->laywidth; azdzfactor=params->azdzfactor; dzeifactor=params->dzeifactor; dzeiweight=params->dzeiweight; dzeimin=params->dzeimin; dzlayfactor=params->dzlayfactor; sigsqei=params->sigsqei; lambda=params->lambda; noshadow=!(params->shadow); a=params->orbitradius; re=params->earthradius; /* despeckle the interferogram intensity */ fprintf(sp2,"Despeckling intensity image\n"); ei=NULL; Despeckle(pwr,&ei,nrow,ncol); Free2DArray((void **)pwr,nrow); /* remove large-area average intensity */ fprintf(sp2,"Normalizing intensity\n"); RemoveMean(ei,nrow,ncol,params->krowei,params->kcolei); /* dump normalized, despeckled intensity */ if(strlen(outfiles->eifile)){ Write2DArray((void **)ei,outfiles->eifile,nrow,ncol,sizeof(float)); } /* compute some midswath parameters */ slantrange=nearrange+ncol/2*dr; sinnomincangle=sin(acos((a*a-slantrange*slantrange-re*re) /(2*slantrange*re))); lookangle=asin(re/a*sinnomincangle); /* see if we were passed bperp rather than baseline and baselineangle */ if(params->bperp){ if(params->bperp>0){ params->baselineangle=lookangle; }else{ params->baselineangle=lookangle+PI; } params->baseline=fabs(params->bperp); } /* the baseline should be halved if we are in single antenna transmit mode */ if(params->transmitmode==SINGLEANTTRANSMIT){ params->baseline/=2.0; } baseline=params->baseline; baselineangle=params->baselineangle; /* build lookup table for dzrcrit vs incidence angle */ dzrcrittable=BuildDZRCritLookupTable(&nominc0,&dnominc,&nominctablesize, tileparams,params); /* build lookup table for dzrhomax vs incidence angle */ dzrhomaxtable=BuildDZRhoMaxLookupTable(nominc0,dnominc,nominctablesize, rhomin,drho,nrho,params); /* set cost autoscale factor based on midswath parameters */ bperp=baseline*cos(lookangle-baselineangle); midrangeambight=fabs(lambda*slantrange*sinnomincangle/(2*bperp)); costscale=params->costscale*fabs(params->costscaleambight/midrangeambight); glay=-costscale*log(params->layconst); /* get memory for wrapped difference arrays */ dpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); avgdpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); /* build array of mean wrapped phase differences in range */ /* simple average of phase differences is biased, but mean phase */ /* differences usually near zero, so don't bother with complex average */ fprintf(sp2,"Building range cost arrays\n"); CalcWrappedRangeDiffs(dpsi,avgdpsi,wrappedphase,kperpdpsi,kpardpsi, nrow,ncol); /* build colcost array (range slopes) */ /* loop over range */ for(col=0;colsigsqlayfactor; /* interpolate scattering model parameters */ nomincind=(nomincangle-nominc0)/dnominc; dzrcrit=LinInterp1D(dzrcrittable,nomincind,nominctablesize); SolveEIModelParams(&slope1,&slope2,&const1,&const2,dzrcrit,dzr0, sinnomincangle,cosnomincangle,params); eicrit=(dzrcrit-const1)/slope1; dphilaypeak=params->dzlaypeak/ambiguityheight; /* loop over azimuth */ for(row=0;roweicrit){ dzei=(slope2*ei[row][col]+const2)*dzeifactor; }else{ dzei=(slope1*ei[row][col]+const1)*dzeifactor; } if(noshadow && dzeilayminei){ for(iei=0;ieieicrit){ dzlay+=slope2*ei[row][col+iei]+const2; }else{ dzlay+=slope1*ei[row][col+iei]+const1; } if(col+iei>ncol-2){ break; } } } if(dzlay){ dzlay=(dzlay+iei*(-2.0*dzr0))*dzlayfactor; } /* set maximum dz based on unbiased correlation and layover max */ if(rho>0){ dzrhomax=LinInterp2D(dzrhomaxtable,nomincind,(rho-rhomin)/drho, nominctablesize,nrho); if(dzrhomax0){ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*(avgdpsi[row][col]+dphilaypeak)); }else{ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.25*avgdpsi[row][col]-0.75*dphilaypeak); } colcost[row][col].sigsq=(sigsqrho+sigsqei+sigsqlay)*ztoshortsq /(costscale*colweight[row][col]); if(colcost[row][col].sigsqfloor(sqrt(colcost[row][col].laycost*colcost[row][col].sigsq))){ nolayover=FALSE; } } if(nolayover){ colcost[row][col].sigsq=(sigsqrho+sigsqei)*ztoshortsq /(costscale*colweight[row][col]); if(colcost[row][col].sigsq0){ colcost[row][col].offset=ztoshort* (ambiguityheight*(dpsi[row][col]-0.5*avgdpsi[row][col]) -0.5*dzeiweight*dzei); }else{ colcost[row][col].offset=ztoshort* (ambiguityheight*(dpsi[row][col]-0.25*avgdpsi[row][col]) -0.75*dzeiweight*dzei); } colcost[row][col].laycost=NOCOSTSHELF; colcost[row][col].dzmax=LARGESHORT; } /* shift PDF to account for flattening by coarse unwrapped estimate */ if(unwrappedest!=NULL){ colcost[row][col].offset+=(nshortcycle/TWOPI* (unwrappedest[row][col+1] -unwrappedest[row][col])); } } } } /* end of range gradient cost calculation */ /* reset layover constant for row (azimuth) costs */ glay+=(-costscale*log(azdzfactor)); /* build array of mean wrapped phase differences in azimuth */ /* biased, but not much, so don't bother with complex averaging */ fprintf(sp2,"Building azimuth cost arrays\n"); CalcWrappedAzDiffs(dpsi,avgdpsi,wrappedphase,kperpdpsi,kpardpsi, nrow,ncol); /* build rowcost array */ /* for the rowcost array, there is symmetry between positive and */ /* negative flows, so we average ei[][] and corr[][] values in azimuth */ /* loop over range */ for(col=0;colsigsqlayfactor; /* interpolate scattering model parameters */ nomincind=(nomincangle-nominc0)/dnominc; dzrcrit=LinInterp1D(dzrcrittable,nomincind,nominctablesize); SolveEIModelParams(&slope1,&slope2,&const1,&const2,dzrcrit,dzr0, sinnomincangle,cosnomincangle,params); eicrit=(dzrcrit-const1)/slope1; dphilaypeak=params->dzlaypeak/ambiguityheight; /* loop over azimuth */ for(row=0;rowlayminei){ for(iei=0;ieieicrit){ dzlay+=slope2*avgei+const2; }else{ dzlay+=slope1*avgei+const1; } if(col+iei>ncol-2){ break; } } } if(dzlay){ dzlay=(dzlay+iei*(-2.0*dzr0))*dzlayfactor; } /* set maximum dz based on correlation max and layover max */ if(rho>0){ dzrhomax=LinInterp2D(dzrhomaxtable,nomincind,(rho-rhomin)/drho, nominctablesize,nrho); if(dzrhomax0){ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-avgdpsi[row][col]); }else{ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*avgdpsi[row][col]); } nolayover=TRUE; if(dzlay){ rowcost[row][col].sigsq=(sigsqrho+sigsqei+sigsqlay)*ztoshortsq /(costscale*rowweight[row][col]); if(rowcost[row][col].sigsqfloor(sqrt(rowcost[row][col].laycost*rowcost[row][col].sigsq))){ nolayover=FALSE; } } if(nolayover){ rowcost[row][col].sigsq=(sigsqrho+sigsqei)*ztoshortsq /(costscale*rowweight[row][col]); if(rowcost[row][col].sigsqrhosconst1)/(params->ncorrlooks)+(params->rhosconst2); defocorrthresh=params->defothreshfactor*rho0; rhopow=2*(params->cstd1)+(params->cstd2)*log(params->ncorrlooks) +(params->cstd3)*(params->ncorrlooks); sigsqrhoconst=2.0/12.0; sigsqcorr=params->sigsqcorr; sigsqshortmin=params->sigsqshortmin; kperpdpsi=params->kperpdpsi; kpardpsi=params->kpardpsi; costscale=params->costscale; nshortcycle=params->nshortcycle; nshortcyclesq=nshortcycle*nshortcycle; glay=-costscale*log(params->defolayconst); defomax=(long )ceil(params->defomax*nshortcycle); /* get memory for wrapped difference arrays */ dpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); avgdpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); /* build array of mean wrapped phase differences in range */ /* simple average of phase differences is biased, but mean phase */ /* differences usually near zero, so don't bother with complex average */ fprintf(sp2,"Building range cost arrays\n"); CalcWrappedRangeDiffs(dpsi,avgdpsi,wrappedphase,kperpdpsi,kpardpsi, nrow,ncol); /* build colcost array (range slopes) */ for(col=0;col0){ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-avgdpsi[row][col]); }else{ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*avgdpsi[row][col]); } colcost[row][col].sigsq=sigsqrho/(costscale*colweight[row][col]); if(colcost[row][col].sigsq0){ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-avgdpsi[row][col]); }else{ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*avgdpsi[row][col]); } rowcost[row][col].sigsq=sigsqrho/(costscale*rowweight[row][col]); if(rowcost[row][col].sigsqrhosconst1)/(params->ncorrlooks)+(params->rhosconst2); defocorrthresh=params->defothreshfactor*rho0; rhopow=2*(params->cstd1)+(params->cstd2)*log(params->ncorrlooks) +(params->cstd3)*(params->ncorrlooks); sigsqrhoconst=2.0/12.0; sigsqcorr=params->sigsqcorr; sigsqshortmin=params->sigsqshortmin; kperpdpsi=params->kperpdpsi; kpardpsi=params->kpardpsi; costscale=params->costscale; nshortcycle=params->nshortcycle; nshortcyclesq=nshortcycle*nshortcycle; /* get memory for wrapped difference arrays */ dpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); avgdpsi=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); /* build array of mean wrapped phase differences in range */ /* simple average of phase differences is biased, but mean phase */ /* differences usually near zero, so don't bother with complex average */ fprintf(sp2,"Building range cost arrays\n"); CalcWrappedRangeDiffs(dpsi,avgdpsi,wrappedphase,kperpdpsi,kpardpsi, nrow,ncol); /* build colcost array (range slopes) */ for(col=0;col0){ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-avgdpsi[row][col]); }else{ colcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*avgdpsi[row][col]); } colcost[row][col].sigsq=sigsqrho/(costscale*colweight[row][col]); if(colcost[row][col].sigsq0){ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-avgdpsi[row][col]); }else{ rowcost[row][col].offset=nshortcycle* (dpsi[row][col]-0.5*avgdpsi[row][col]); } rowcost[row][col].sigsq=sigsqrho/(costscale*rowweight[row][col]); if(rowcost[row][col].sigsqampfile)){ ReadIntensity(&pwr,&pwr1,&pwr2,infiles,linelen,nlines,params,tileparams); }else{ if(params->costmode==TOPO){ fprintf(sp1,"No brightness file specified. "); fprintf(sp1,"Using interferogram magnitude as intensity\n"); } pwr=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); for(row=0;rowcorrfile)){ ReadCorrelation(&corr,infiles,linelen,nlines,tileparams); }else if(pwr1!=NULL && pwr2!=NULL && params->havemagnitude){ /* generate the correlation info from the interferogram and amplitude */ fprintf(sp1,"Generating correlation from interferogram and intensity\n"); /* get the correct number of looks, and make sure its odd */ krowcorr=1+2*floor(params->ncorrlooksaz/(double )params->nlooksaz/2); kcolcorr=1+2*floor(params->ncorrlooksrange/(double )params->nlooksrange/2); /* calculate equivalent number of independent looks */ params->ncorrlooks=(kcolcorr*(params->dr/params->rangeres)) *(krowcorr*(params->da/params->azres))*params->nlooksother; fprintf(sp1," (%.1f equivalent independent looks)\n", params->ncorrlooks); /* get real and imaginary parts of interferogram */ realcomp=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); imagcomp=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); for(row=0;rowdefaultcorr); rho0=(params->rhosconst1)/(params->ncorrlooks)+(params->rhosconst2); rhomin=params->rhominfactor*rho0; if(params->defaultcorr>rhomin){ biaseddefaultcorr=params->defaultcorr; }else{ biaseddefaultcorr=0.0; } for(row=0;rowrawcorrdumpfile)){ Write2DArray((void **)corr,outfiles->rawcorrdumpfile, nrow,ncol,sizeof(float)); } /* check correlation data validity */ iclipped=0; for(row=0;row1.0){ if(corr[row][col]>1.001){ iclipped++; /* don't warn for minor numerical errors */ } corr[row][col]=1.0; }else if(corr[row][col]<0.0){ if(corr[row][col]<-0.001){ iclipped++; /* don't warn for minor numerical errors */ } corr[row][col]=0.0; } } } if(iclipped){ fprintf(sp0,"WARNING: %ld illegal correlation values clipped to [0,1]\n", iclipped); } /* dump correlation data if necessary */ if(strlen(outfiles->corrdumpfile)){ Write2DArray((void **)corr,outfiles->corrdumpfile, nrow,ncol,sizeof(float)); } /* free memory and set output pointers */ if(pwr1!=NULL){ Free2DArray((void **)pwr1,nrow); } if(pwr2!=NULL){ Free2DArray((void **)pwr2,nrow); } if(params->costmode==DEFO && pwr!=NULL){ Free2DArray((void **)pwr,nrow); pwr=NULL; } *pwrptr=pwr; *corrptr=corr; } /* function: RemoveMean() * ------------------------- * Divides intensity by average over sliding window. */ void RemoveMean(float **ei, long nrow, long ncol, long krowei, long kcolei){ float **avgei, **padei; long row, col; /* make sure krowei, kcolei are odd */ if(!(krowei % 2)){ krowei++; } if(!(kcolei % 2)){ kcolei++; } /* get memory */ avgei=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); /* pad ei in new array */ padei=MirrorPad(ei,nrow,ncol,(krowei-1)/2,(kcolei-1)/2); if(padei==ei){ fprintf(sp0,"Intensity-normalization averaging box too large " "for input array size\nAbort\n"); exit(ABNORMAL_EXIT); } /* calculate average ei by using sliding window */ BoxCarAvg(avgei,padei,nrow,ncol,krowei,kcolei); /* divide ei by avgei */ for(row=0;roworbitradius; re=params->earthradius; slantrange=params->nearrange+params->dr*tileparams->firstcol; nominc0=acos((a*a-slantrange*slantrange-re*re)/(2*slantrange*re)); slantrange+=params->dr*tileparams->ncol; nomincmax=acos((a*a-slantrange*slantrange-re*re)/(2*slantrange*re)); if(!IsFinite(nominc0) || !IsFinite(nomincmax)){ fprintf(sp0,"Geometry error detected. " "Check altitude, near range, and earth radius parameters\n" "Abort\n"); exit(ABNORMAL_EXIT); } /* build lookup table */ dnominc=params->dnomincangle; tablesize=(long )floor((nomincmax-nominc0)/dnominc)+1; dzrcrittable=MAlloc(tablesize*sizeof(float)); nominc=nominc0; for(k=0;kthreshold); nominc+=dnominc; if(nominc>PI/2.0){ nominc-=dnominc; } } /* set return variables */ (*nominc0ptr)=nominc; (*dnomincptr)=dnominc; (*tablesizeptr)=tablesize; return(dzrcrittable); } /* function: SolveDZRCrit() * ------------------------ * Numerically solve for the transition point of the linearized scattering * model. */ double SolveDZRCrit(double sinnomincangle, double cosnomincangle, paramT *params, double threshold){ double residual, thetai, kds, n, dr, dzr, dx; double costhetai, cos2thetai, step; double dzrcritfactor, diffuse, specular; long i; /* get parameters */ kds=params->kds; n=params->specularexp; dr=params->dr; dzrcritfactor=params->dzrcritfactor; /* solve for critical incidence angle */ thetai=PI/4; step=PI/4-1e-6; i=0; while(TRUE){ if((cos2thetai=cos(2*thetai))<0){ cos2thetai=0; } diffuse=dzrcritfactor*kds*cos(thetai); specular=pow(cos2thetai,n); if(fabs(residual=diffuse-specular)MAXITERATION){ fprintf(sp0,"Couldn't find critical incidence angle "); fprintf(sp0,"(check scattering parameters)\nAbort\n"); exit(ABNORMAL_EXIT); } } /* solve for critical height change */ costhetai=cos(thetai); dzr=params->initdzr; step=dzr+dr*cosnomincangle-1e-2; i=0; while(TRUE){ dx=(dr+dzr*cosnomincangle)/sinnomincangle; if(fabs(residual=costhetai-(dzr*sinnomincangle+dx*cosnomincangle) /sqrt(dzr*dzr+dx*dx)) MAXITERATION){ fprintf(sp0,"Couldn't find critical slope "); fprintf(sp0,"(check geometry parameters)\nAbort\n"); exit(ABNORMAL_EXIT); } } } /* function: SolveEIModelParams() * ------------------------------ * Calculates parameters for linearized model of EI vs. range slope * relationship. */ void SolveEIModelParams(double *slope1ptr, double *slope2ptr, double *const1ptr, double *const2ptr, double dzrcrit, double dzr0, double sinnomincangle, double cosnomincangle, paramT *params){ double slope1, slope2, const1, const2, sloperatio; double dzr3, ei3; /* set up */ sloperatio=params->kds*params->sloperatiofactor; /* find normalized intensity at 15(dzrcrit-dzr0)+dzr0 */ dzr3=15.0*(dzrcrit-dzr0)+dzr0; ei3=EIofDZR(dzr3,sinnomincangle,cosnomincangle,params) /EIofDZR(0,sinnomincangle,cosnomincangle,params); /* calculate parameters */ const1=dzr0; slope2=(sloperatio*(dzrcrit-const1)-dzrcrit+dzr3)/ei3; slope1=slope2/sloperatio; const2=dzr3-slope2*ei3; /* set return values */ *slope1ptr=slope1; *slope2ptr=slope2; *const1ptr=const1; *const2ptr=const2; } /* function: EIofDZR() * ------------------- * Calculates expected value of intensity with arbitrary units for given * parameters. Assumes azimuth slope is zero. */ double EIofDZR(double dzr, double sinnomincangle, double cosnomincangle, paramT *params){ double dr, da, dx, kds, n, dzr0, projarea; double costhetai, cos2thetai, sigma0; dr=params->dr; da=params->da; dx=dr/sinnomincangle+dzr*cosnomincangle/sinnomincangle; kds=params->kds; n=params->specularexp; dzr0=-dr*cosnomincangle; projarea=da*fabs((dzr-dzr0)/sinnomincangle); costhetai=projarea/sqrt(dzr*dzr*da*da + da*da*dx*dx); if(costhetai>SQRTHALF){ cos2thetai=2*costhetai*costhetai-1; sigma0=kds*costhetai+pow(cos2thetai,n); }else{ sigma0=kds*costhetai; } return(sigma0*projarea); } /* function: BuildDZRhoMaxLookupTable() * ------------------------------------ * Builds a 2-D lookup table of dzrhomax values vs nominal incidence angle * (rad) and correlation. */ float **BuildDZRhoMaxLookupTable(double nominc0, double dnominc, long nominctablesize, double rhomin, double drho, long nrho, paramT *params){ long krho, knominc; double nominc, rho; float **dzrhomaxtable; dzrhomaxtable=(float **)Get2DMem(nominctablesize,nrho, sizeof(float *),sizeof(float)); nominc=nominc0; for(knominc=0;knomincthreshold); rho+=drho; } nominc+=dnominc; } return(dzrhomaxtable); } /* function: CalcDZRhoMax() * ------------------------ * Calculates the maximum slope (in range) for the given unbiased correlation * using spatial decorrelation as an upper limit (Zebker & Villasenor, * 1992). */ double CalcDZRhoMax(double rho, double nominc, paramT *params, double threshold){ long i; double dx, dr, dz, dzstep, rhos, sintheta, costheta, numerator; double a, re, bperp, slantrange, lookangle; double costhetairsq, rhosfactor, residual; /* set up */ i=0; dr=params->dr; costheta=cos(nominc); sintheta=sin(nominc); dzstep=params->initdzstep; a=params->orbitradius; re=params->earthradius; lookangle=asin(re/a*sintheta); bperp=params->baseline*cos(lookangle-params->baselineangle); slantrange=sqrt(a*a+re*re-2*a*re*cos(nominc-lookangle)); rhosfactor=2.0*fabs(bperp)*(params->rangeres)/((params->lambda)*slantrange); /* take care of the extremes */ if(rho>=1.0){ return(-dr*costheta); }else if(rho<=0){ return(LARGEFLOAT); } /* start with slope for unity correlation, step slope upwards */ dz=-dr*costheta; rhos=1.0; while(rhos>rho){ dz+=dzstep; dx=(dr+dz*costheta)/sintheta; numerator=dz*sintheta+dx*costheta; costhetairsq=numerator*numerator/(dz*dz+dx*dx); rhos=1-rhosfactor*sqrt(costhetairsq/(1-costhetairsq)); if(rhos<0){ rhos=0; } if(dz>BIGGESTDZRHOMAX){ return(BIGGESTDZRHOMAX); } } /* now iteratively decrease step size and narrow in on correct slope */ while(fabs(residual=rhos-rho)>threshold*rho){ dzstep/=2.0; if(residual<0){ dz-=dzstep; }else{ dz+=dzstep; } dx=(dr+dz*costheta)/sintheta; numerator=dz*sintheta+dx*costheta; costhetairsq=numerator*numerator/(dz*dz+dx*dx); rhos=1-rhosfactor*sqrt(costhetairsq/(1-costhetairsq)); if(rhos<0){ rhos=0; } if(++i>MAXITERATION){ fprintf(sp0,"Couldn't find slope for correlation of %f\n",rho); fprintf(sp0,"(check geometry and spatial decorrelation parameters)\n"); fprintf(sp0,"Abort\n"); exit(ABNORMAL_EXIT); } } return(dz); } /* function: CalcCostTopo() * ------------------------ * Calculates topography arc distance given an array of cost data structures. */ void CalcCostTopo(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long idz1, idz2pos, idz2neg, cost1, nflowsq, poscost, negcost; long nshortcycle, layfalloffconst; long offset, sigsq, laycost, dzmax; costT *cost; /* get arc info */ cost=&((costT **)(costs))[arcrow][arccol]; dzmax=cost->dzmax; offset=cost->offset; sigsq=cost->sigsq; laycost=cost->laycost; nshortcycle=params->nshortcycle; layfalloffconst=params->layfalloffconst; if(arcrowdzmax){ idz1-=dzmax; cost1=(idz1*idz1)/(layfalloffconst*sigsq)+laycost; }else{ cost1=(idz1*idz1)/sigsq; if(laycost!=NOCOSTSHELF && idz1>0 && cost1>laycost){ cost1=laycost; } } /* calculate positive cost increment */ if(idz2pos>dzmax){ idz2pos-=dzmax; poscost=(idz2pos*idz2pos)/(layfalloffconst*sigsq) +laycost-cost1; }else{ poscost=(idz2pos*idz2pos)/sigsq; if(laycost!=NOCOSTSHELF && idz2pos>0 && poscost>laycost){ poscost=laycost-cost1; }else{ poscost-=cost1; } } /* calculate negative cost increment */ if(idz2neg>dzmax){ idz2neg-=dzmax; negcost=(idz2neg*idz2neg)/(layfalloffconst*sigsq) +laycost-cost1; }else{ negcost=(idz2neg*idz2neg)/sigsq; if(laycost!=NOCOSTSHELF && idz2neg>0 && negcost>laycost){ negcost=laycost-cost1; }else{ negcost-=cost1; } } /* scale costs for this nflow */ nflowsq=nflow*nflow; if(poscost>0){ *poscostptr=(long )ceil((float )poscost/nflowsq); }else{ *poscostptr=(long )floor((float )poscost/nflowsq); } if(negcost>0){ *negcostptr=(long )ceil((float )negcost/nflowsq); }else{ *negcostptr=(long )floor((float )negcost/nflowsq); } } /* function: CalcCostDefo() * ------------------------ * Calculates deformation arc distance given an array of cost data structures. */ void CalcCostDefo(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long idz1, idz2pos, idz2neg, cost1, nflowsq, poscost, negcost; long nshortcycle, layfalloffconst; costT *cost; /* get arc info */ cost=&((costT **)(costs))[arcrow][arccol]; nshortcycle=params->nshortcycle; layfalloffconst=params->layfalloffconst; idz1=labs(flow*nshortcycle+cost->offset); idz2pos=labs((flow+nflow)*nshortcycle+cost->offset); idz2neg=labs((flow-nflow)*nshortcycle+cost->offset); /* calculate cost1 */ if(idz1>cost->dzmax){ idz1-=cost->dzmax; cost1=(idz1*idz1)/(layfalloffconst*(cost->sigsq))+cost->laycost; }else{ cost1=(idz1*idz1)/cost->sigsq; if(cost->laycost!=NOCOSTSHELF && cost1>cost->laycost){ cost1=cost->laycost; } } /* calculate positive cost increment */ if(idz2pos>cost->dzmax){ idz2pos-=cost->dzmax; poscost=(idz2pos*idz2pos)/(layfalloffconst*(cost->sigsq)) +cost->laycost-cost1; }else{ poscost=(idz2pos*idz2pos)/cost->sigsq; if(cost->laycost!=NOCOSTSHELF && poscost>cost->laycost){ poscost=cost->laycost-cost1; }else{ poscost-=cost1; } } /* calculate negative cost increment */ if(idz2neg>cost->dzmax){ idz2neg-=cost->dzmax; negcost=(idz2neg*idz2neg)/(layfalloffconst*(cost->sigsq)) +cost->laycost-cost1; }else{ negcost=(idz2neg*idz2neg)/cost->sigsq; if(cost->laycost!=NOCOSTSHELF && negcost>cost->laycost){ negcost=cost->laycost-cost1; }else{ negcost-=cost1; } } /* scale costs for this nflow */ nflowsq=nflow*nflow; if(poscost>0){ *poscostptr=(long )ceil((float )poscost/nflowsq); }else{ *poscostptr=(long )floor((float )poscost/nflowsq); } if(negcost>0){ *negcostptr=(long )ceil((float )negcost/nflowsq); }else{ *negcostptr=(long )floor((float )negcost/nflowsq); } } /* function: CalcCostSmooth() * -------------------------- * Calculates smooth-solution arc distance given an array of smoothcost * data structures. */ void CalcCostSmooth(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long idz1, idz2pos, idz2neg, cost1, nflowsq, poscost, negcost; long nshortcycle; smoothcostT *cost; /* get arc info */ cost=&((smoothcostT **)(costs))[arcrow][arccol]; nshortcycle=params->nshortcycle; idz1=labs(flow*nshortcycle+cost->offset); idz2pos=labs((flow+nflow)*nshortcycle+cost->offset); idz2neg=labs((flow-nflow)*nshortcycle+cost->offset); /* calculate cost1 */ cost1=(idz1*idz1)/cost->sigsq; /* calculate positive cost increment */ poscost=(idz2pos*idz2pos)/cost->sigsq-cost1; /* calculate negative cost increment */ negcost=(idz2neg*idz2neg)/cost->sigsq-cost1; /* scale costs for this nflow */ nflowsq=nflow*nflow; if(poscost>0){ *poscostptr=(long )ceil((float )poscost/nflowsq); }else{ *poscostptr=(long )floor((float )poscost/nflowsq); } if(negcost>0){ *negcostptr=(long )ceil((float )negcost/nflowsq); }else{ *negcostptr=(long )floor((float )negcost/nflowsq); } } /* function: CalcCostL0() * ---------------------- * Calculates the L0 arc distance given an array of short integer weights. */ void CalcCostL0(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ /* L0-norm */ if(flow){ if(flow+nflow){ *poscostptr=0; }else{ *poscostptr=-((short **)costs)[arcrow][arccol]; } if(flow-nflow){ *negcostptr=0; }else{ *negcostptr=-((short **)costs)[arcrow][arccol]; } }else{ *poscostptr=((short **)costs)[arcrow][arccol]; *negcostptr=((short **)costs)[arcrow][arccol]; } } /* function: CalcCostL1() * ---------------------- * Calculates the L1 arc distance given an array of short integer weights. */ void CalcCostL1(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ /* L1-norm */ *poscostptr=((short **)costs)[arcrow][arccol]*(labs(flow+nflow)-labs(flow)); *negcostptr=((short **)costs)[arcrow][arccol]*(labs(flow-nflow)-labs(flow)); } /* function: CalcCostL2() * ---------------------- * Calculates the L2 arc distance given an array of short integer weights. */ void CalcCostL2(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long flow2, flowsq; /* L2-norm */ flowsq=flow*flow; flow2=flow+nflow; *poscostptr=((short **)costs)[arcrow][arccol]*(flow2*flow2-flowsq); flow2=flow-nflow; *negcostptr=((short **)costs)[arcrow][arccol]*(flow2*flow2-flowsq); } /* function: CalcCostLP() * ---------------------- * Calculates the Lp arc distance given an array of short integer weights. */ void CalcCostLP(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long p; short flow2; /* Lp-norm */ flow2=flow+nflow; p=params->p; *poscostptr=LRound(((short **)costs)[arcrow][arccol]* (pow(labs(flow2),p)-pow(labs(flow),p))); flow2=flow-nflow; *negcostptr=LRound(((short **)costs)[arcrow][arccol]* (pow(labs(flow2),p)-pow(labs(flow),p))); } /* function: CalcCostNonGrid() * --------------------------- * Calculates the arc cost given an array of long integer cost lookup tables. */ void CalcCostNonGrid(void **costs, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params, long *poscostptr, long *negcostptr){ long xflow, flowmax, poscost, negcost, nflowsq, arroffset, sumsigsqinv; long abscost0; long *costarr; float c1; /* set up */ flowmax=params->scndryarcflowmax; costarr=((long ***)costs)[arcrow][arccol]; arroffset=costarr[0]; sumsigsqinv=costarr[2*flowmax+1]; /* return zero costs if this is a zero cost arc */ if(sumsigsqinv==ZEROCOSTARC){ *poscostptr=0; *negcostptr=0; return; } /* compute cost of current flow */ xflow=flow+arroffset; if(xflow>flowmax){ c1=costarr[flowmax]/(float )flowmax-sumsigsqinv*flowmax; abscost0=(sumsigsqinv*xflow+LRound(c1))*xflow; }else if(xflow<-flowmax){ c1=costarr[2*flowmax]/(float )flowmax-sumsigsqinv*flowmax; abscost0=(sumsigsqinv*xflow+LRound(c1))*xflow; }else{ if(xflow>0){ abscost0=costarr[xflow]; }else if(xflow<0){ abscost0=costarr[flowmax-xflow]; }else{ abscost0=0; } } /* compute costs of positive and negative flow increments */ xflow=flow+arroffset+nflow; if(xflow>flowmax){ c1=costarr[flowmax]/(float )flowmax-sumsigsqinv*flowmax; poscost=((sumsigsqinv*xflow+LRound(c1))*xflow)-abscost0; }else if(xflow<-flowmax){ c1=costarr[2*flowmax]/(float )flowmax-sumsigsqinv*flowmax; poscost=((sumsigsqinv*xflow+LRound(c1))*xflow)-abscost0; }else{ if(xflow>0){ poscost=costarr[xflow]-abscost0; }else if(xflow<0){ poscost=costarr[flowmax-xflow]-abscost0; }else{ poscost=-abscost0; } } xflow=flow+arroffset-nflow; if(xflow>flowmax){ c1=costarr[flowmax]/(float )flowmax-sumsigsqinv*flowmax; negcost=((sumsigsqinv*xflow+LRound(c1))*xflow)-abscost0; }else if(xflow<-flowmax){ c1=costarr[2*flowmax]/(float )flowmax-sumsigsqinv*flowmax; negcost=((sumsigsqinv*xflow+LRound(c1))*xflow)-abscost0; }else{ if(xflow>0){ negcost=costarr[xflow]-abscost0; }else if(xflow<0){ negcost=costarr[flowmax-xflow]-abscost0; }else{ negcost=-abscost0; } } /* scale for this flow increment and set output values */ nflowsq=nflow*nflow; if(poscost>0){ *poscostptr=(long )ceil((float )poscost/nflowsq); }else{ *poscostptr=(long )floor((float )poscost/nflowsq); } if(negcost>0){ *negcostptr=(long )ceil((float )negcost/nflowsq); }else{ *negcostptr=(long )floor((float )negcost/nflowsq); } } /* function: EvalCostTopo() * ------------------------ * Calculates topography arc cost given an array of cost data structures. */ long EvalCostTopo(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ long idz1, cost1, dzmax; costT *cost; /* get arc info */ cost=&((costT **)(costs))[arcrow][arccol]; if(arcrownshortcycle)+cost->offset); dzmax=cost->dzmax; }else{ /* column cost: non-symmetric dz */ idz1=flows[arcrow][arccol]*(params->nshortcycle)+cost->offset; if((dzmax=cost->dzmax)<0){ idz1*=-1; dzmax*=-1; } } /* calculate and return cost */ if(idz1>dzmax){ idz1-=dzmax; cost1=(idz1*idz1)/((params->layfalloffconst)*(cost->sigsq))+cost->laycost; }else{ cost1=(idz1*idz1)/cost->sigsq; if(cost->laycost!=NOCOSTSHELF && idz1>0 && cost1>cost->laycost){ cost1=cost->laycost; } } return(cost1); } /* function: EvalCostDefo() * ------------------------ * Calculates deformation arc cost given an array of cost data structures. */ long EvalCostDefo(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ long idz1, cost1; costT *cost; /* get arc info */ cost=&((costT **)(costs))[arcrow][arccol]; idz1=labs(flows[arcrow][arccol]*(params->nshortcycle)+cost->offset); /* calculate and return cost */ if(idz1>cost->dzmax){ idz1-=cost->dzmax; cost1=(idz1*idz1)/((params->layfalloffconst)*(cost->sigsq))+cost->laycost; }else{ cost1=(idz1*idz1)/cost->sigsq; if(cost->laycost!=NOCOSTSHELF && cost1>cost->laycost){ cost1=cost->laycost; } } return(cost1); } /* function: EvalCostSmooth() * -------------------------- * Calculates smooth-solution arc cost given an array of * smoothcost data structures. */ long EvalCostSmooth(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ long idz1; smoothcostT *cost; /* get arc info */ cost=&((smoothcostT **)(costs))[arcrow][arccol]; idz1=labs(flows[arcrow][arccol]*(params->nshortcycle)+cost->offset); /* calculate and return cost */ return((idz1*idz1)/cost->sigsq); } /* function: EvalCostL0() * ---------------------- * Calculates the L0 arc cost given an array of cost data structures. */ long EvalCostL0(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ /* L0-norm */ if(flows[arcrow][arccol]){ return((long)((short **)costs)[arcrow][arccol]); }else{ return(0); } } /* function: EvalCostL1() * ---------------------- * Calculates the L1 arc cost given an array of cost data structures. */ long EvalCostL1(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ /* L1-norm */ return( (((short **)costs)[arcrow][arccol]) * labs(flows[arcrow][arccol]) ); } /* function: EvalCostL2() * ---------------------- * Calculates the L2 arc cost given an array of cost data structures. */ long EvalCostL2(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ /* L2-norm */ return( (((short **)costs)[arcrow][arccol]) * (flows[arcrow][arccol]*flows[arcrow][arccol]) ); } /* function: EvalCostLP() * ---------------------- * Calculates the Lp arc cost given an array of cost data structures. */ long EvalCostLP(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ /* Lp-norm */ return( (((short **)costs)[arcrow][arccol]) * pow(labs(flows[arcrow][arccol]),params->p) ); } /* function: EvalCostNonGrid() * --------------------------- * Calculates the arc cost given an array of long integer cost lookup tables. */ long EvalCostNonGrid(void **costs, short **flows, long arcrow, long arccol, long nrow, paramT *params){ long flow, xflow, flowmax, arroffset, sumsigsqinv; long *costarr; float c1; /* set up */ flow=flows[arcrow][arccol]; flowmax=params->scndryarcflowmax; costarr=((long ***)costs)[arcrow][arccol]; arroffset=costarr[0]; sumsigsqinv=costarr[2*flowmax+1]; /* return zero costs if this is a zero cost arc */ if(sumsigsqinv==ZEROCOSTARC){ return(0); } /* compute cost of current flow */ xflow=flow+arroffset; if(xflow>flowmax){ c1=costarr[flowmax]/(float )flowmax-sumsigsqinv*flowmax; return((sumsigsqinv*xflow+LRound(c1))*xflow); }else if(xflow<-flowmax){ c1=costarr[2*flowmax]/(float )flowmax-sumsigsqinv*flowmax; return((sumsigsqinv*xflow+LRound(c1))*xflow); }else{ if(xflow>0){ return(costarr[xflow]); }else if(xflow<0){ return(costarr[flowmax-xflow]); }else{ return(0); } } } /* function: CalcInitMaxFlow() * --------------------------- * Calculates the maximum flow magnitude to allow in the initialization * by examining the dzmax members of arc statistical cost data structures. */ void CalcInitMaxFlow(paramT *params, void **costs, long nrow, long ncol){ long row, col, maxcol, initmaxflow, arcmaxflow; if(params->initmaxflow<=0){ if(params->costmode==NOSTATCOSTS){ params->initmaxflow=NOSTATINITMAXFLOW; }else{ if(params->costmode==TOPO || params->costmode==DEFO){ initmaxflow=0; for(row=0;row<2*nrow-1;row++){ if(rownshortcycle) +params->arcmaxflowconst); if(arcmaxflow>initmaxflow){ initmaxflow=arcmaxflow; } } } } params->initmaxflow=initmaxflow; }else{ params->initmaxflow=DEF_INITMAXFLOW; } } } } GMTSAR_V5.7/.svn/pristine/cc/cc745c466c8613247ac8d9473d6213fa08271783.svn-base000444 015705 000000 00000011265 13505462014 025406 0ustar00sandwellwheel000000 000000 #! /bin/csh -f # D. Sandwell and R. Mellors 09/09/97 # # M. Wei 04/05/2006 # Modified by Xiaopeng Tong, 01/21/2011 # script to preprocess Envisat ASAR data # produce .PRM file and decode level 0 image data file # # if ($#argv < 4) then echo "" echo " Usage: ENVI_pre_process [Doppler]" echo "" echo " name_stem - filename of the .baq file" echo " near_range - near range (in meters) of the SAR image (put 0 if use default value)" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo " num_patch - number of patches (put 0 if use default value)" echo " Doppler - Doppler value (blank if use default value)" echo "" echo " Example: " echo " command line: Envisat_pre_process ENV1_2463_2943_15046 978992.922 6378000 5" echo " will preprocess raw Envisat ASAR data 'ENV1_2463_2943_15046.baq' " echo " then output parameter file 'ENV1_2463_2943_15046.PRM' and raw data file 'ENV1_2463_2943_15046.raw' and LED file 'ENV1_2463_2943_15046.LED' " echo " with near range close to 978992.922 meters and earth radius 6378000 meters and 5 patches" echo "" exit 1 endif # # 0) start with a virgin header, Need to be modified for other users # set ORBITS = "@ORBITS_DIR@" set ENVIPRE = `gmtsar_sharedir.csh` cp $ENVIPRE/virgin_envisat.PRM $1.PRM echo " " echo "=========================" echo "Start pre-process $1" # # make sure the baq file exists # if(! -f $1.baq ) then echo "" echo "error - raw file does not have correct .baq suffix" echo "" exit 1 endif # echo "dump start and stop time of operation" # # 1) add info provided by user # echo "input_file = $1.raw" >> $1.PRM # # 2) add the parameters from envisat_baseline # # 2a) get the start and stop time dump_time_envi.pl $1.baq > $1.time # 2b) make orbit file set START = `grep SENSING_START0 $1.time | awk '{print $2}'` set END = `grep SENSING_STOP0 $1.time | awk '{print $2}'` echo "clock_start = $START" >> $1.PRM echo "clock_stop = $END" >> $1.PRM set START = `grep SENSING_STARTY $1.time | awk '{print $2}'` set END = `grep SENSING_STOPY $1.time | awk '{print $2}'` echo "SC_clock_start = $START" >> $1.PRM echo "SC_clock_stop = $END" >> $1.PRM dump_orbit_envi.pl $START $END $1.LED $ORBITS/ENVI/Doris echo "led_file = $1.LED" >> $1.PRM # # 3) decode L0 image data and add info to .PRM # # 3a) find the right auxiliary file cp $ORBITS/ENVI/ASA_INS/list $1.list grep START2 $1.time | awk '{print int($2)}' > sensing_$1.time grep STOP2 $1.time | awk '{print int($2)}' >> sensing_$1.time set AUXI = `find_auxi.pl $1.list sensing_$1.time` # 3b) decode the L0 image data echo "decode L0 image data using asa_im_decode" echo "auxiliary file is:" echo $AUXI asa_im_decode $1.baq $ORBITS/ENVI/ASA_INS/$AUXI $1.raw 1 $2 >> $1.log # 3c) grep parameters from .log file #set NOS = `grep "number of output samples" $1.log |awk '{print $5}'` #echo "num_rng_bins = $NOS" >> $1.PRM set BPL = `grep "number of output samples" $1.log |awk '{print $5*2}'` echo "bytes_per_line = $BPL" >> $1.PRM echo "good_bytes_per_line = $BPL" >> $1.PRM set NPATCH = `grep "number of output lines" $1.log | awk '{print int($5/2800)}'` echo "num_patches = $NPATCH" >> $1.PRM set PRF = `grep prf $1.log | awk '{print $3}'` echo "PRF = $PRF" >> $1.PRM set RSR = `grep "range sampling frequency" $1.log |awk '{print $5}'` echo "rng_samp_rate = $RSR" >> $1.PRM set CS = `grep "chirp slope" $1.log |awk '{print $4}'` echo "chirp_slope = $CS" >> $1.PRM set PD = `grep "pulse length" $1.log |awk '{print $4}'` echo "pulse_dur = $PD" >> $1.PRM set WAVELENGTH = `grep wavelength $1.log | awk '{print $3}'` echo "radar_wavelength = $WAVELENGTH" >> $1.PRM set NLINES = `grep "number of output lines" $1.log |awk '{print $5}'` echo "num_lines = $NLINES" >> $1.PRM set NEARRG = `grep "starting range" $1.log |awk '{print $4}'` echo "near_range = $NEARRG" >> $1.PRM # # 4) doppler centroid estimation and orbital information # if ($#argv == 5) then calc_dop_orb_envi $1.PRM $1.log2 $3 $5 else if ($#argv == 4) then calc_dop_orb_envi $1.PRM $1.log2 $3 endif cat $1.PRM $1.log2 > $1_tmp.PRM echo "fdd1 = 0" >> $1_tmp.PRM echo "fddd1 = 0" >> $1_tmp.PRM mv $1_tmp.PRM $1.PRM # 5) other stuff echo "SLC_file = $1.SLC" >> $1.PRM # # 6) change the number of patches # if ($4 != 0) then update_PRM.csh $1.PRM num_patches $4 echo "Number of patches is set to $4" endif # # clean unwanted files # rm *$1.time $1.list rm *$1.log* # echo "End pre-process $1" # GMTSAR_V5.7/.svn/pristine/cd/cd580f5dccc11e0b785ef162743371c9f7c80aa9.svn-base000444 015705 000000 00000207603 13505462014 026042 0ustar00sandwellwheel000000 000000 /*********************************************************************************************************************************** asa_im_decode.c Decodes Envisat ASAR Image Mode Level 0 data compiled on a Sun and SGI with command gcc -O2 asa_im_decode.c -o asa_im_decode v1.0, Feb/Mar 2004, Sean M. Buckley v1.05, Mar 25, 2004, Sean M. Buckley, now fills missing lines with zeroes in float mode and 0.*127.5+127.5 + .5 = 128 for byte mode v1.1, 17 Feb 2005, Zhenhong Li: 1. This program can run on a little endian machine as well as a big endian machine! 2. On Linux, compiled with command gcc -O2 asa_im_decode.c -o asa_im_decode 3. On Unix, compiled with command gcc -O2 asa_im_decode.c -o asa_im_decode v1.1.1, 8 Nov 2005, Vikas Gudipati, now runs correctly on 64-bit compilers. ***********************************************************************************************************************************/ #include #include #include #include /** * The EPR_DataTypeId enumeration lists all possible data * types for field elements in ENVISAT dataset records. */ // added by Z. Li on 16/02/2005 // extracted from ESA BEAM epr_api package enum EPR_DataTypeId { /** The ID for unknown types. */ e_tid_unknown = 0, /** An array of unsigned 8-bit integers, C type is uchar* */ e_tid_uchar = 1, /** An array of signed 8-bit integers, C type is char* */ e_tid_char = 2, /** An array of unsigned 16-bit integers, C type is ushort* */ e_tid_ushort = 3, /** An array of signed 16-bit integers, C type is short* */ e_tid_short = 4, /** An array of unsigned 32-bit integers, C type is ulong* */ e_tid_ulong = 5, /** An array of signed 32-bit integers, C type is long* */ e_tid_long = 6, /** An array of 32-bit floating point numbers, C type is float* */ e_tid_float = 7, /** An array of 64-bit floating point numbers, C type is double* */ e_tid_double = 8, /** A zero-terminated ASCII string, C type is char* */ e_tid_string = 11, /** An array of unsigned character, C type is uchar* */ e_tid_spare = 13, /** A time (MJD) structure, C type is EPR_Time */ e_tid_time = 21 }; /* structures */ struct mphStruct { char product[62]; char procStage[1]; char refDoc[23]; char spare1[40]; char acquisitionStation[20]; char procCenter[6]; char procTime[27]; char softwareVer[14]; char spare2[40]; char sensingStart[27]; char sensingStop[27]; char spare3[40]; char phase[1]; int cycle; int relOrbit; int absOrbit; char stateVectorTime[27]; double deltaUt1; double xPosition; double yPosition; double zPosition; double xVelocity; double yVelocity; double zVelocity; char vectorSource[2]; char spare4[40]; char utcSbtTime[27]; unsigned int satBinaryTime; unsigned int clockStep; char spare5[32]; char leapUtc[27]; int leapSign; int leapErr; char spare6[40]; int productErr; int totSize; int sphSize; int numDsd; int dsdSize; int numDataSets; char spare7[40]; }; struct dsdStruct { char dsName[28]; char dsType[1]; char filename[62]; int dsOffset; int dsSize; int numDsr; int dsrSize; }; struct sphStruct { char sphDescriptor[28]; double startLat; double startLon; double stopLat; double stopLon; double satTrack; char spare1[50]; int ispErrorsSignificant; int missingIspsSignificant; int ispDiscardedSignificant; int rsSignificant; char spare2[50]; int numErrorIsps; double errorIspsThresh; int numMissingIsps; double missingIspsThresh; int numDiscardedIsps; double discardedIspsThresh; int numRsIsps; double rsThresh; char spare3[100]; char txRxPolar[5]; char swath[3]; char spare4[41]; struct dsdStruct dsd[4]; }; struct sphAuxStruct { char sphDescriptor[28]; char spare1[51]; struct dsdStruct dsd[1]; }; struct dsrTimeStruct { int days; int seconds; int microseconds; }; struct calPulseStruct { float nomAmplitude[32]; float nomPhase[32]; }; struct nomPulseStruct { float pulseAmpCoeff[4]; float pulsePhsCoeff[4]; float pulseDuration; }; struct dataConfigStruct { char echoCompMethod[4]; char echoCompRatio[3]; char echoResampFlag[1]; char initCalCompMethod[4]; char initCalCompRatio[3]; char initCalResampFlag[1]; char perCalCompMethod[4]; char perCalCompRatio[3]; char perCalResampFlag[1]; char noiseCompMethod[4]; char noiseCompRatio[3]; char noiseResampFlag[1]; }; struct swathConfigStruct { unsigned short numSampWindowsEcho[7]; unsigned short numSampWindowsInitCal[7]; unsigned short numSampWindowsPerCal[7]; unsigned short numSampWindowsNoise[7]; float resampleFactor[7]; }; struct swathIdStruct { unsigned short swathNum[7]; unsigned short beamSetNum[7]; }; struct timelineStruct { unsigned short swathNums[7]; unsigned short mValues[7]; unsigned short rValues[7]; unsigned short gValues[7]; }; /* problems begin with field 132 - check the double statement */ struct testStruct { float operatingTemp; float rxGainDroopCoeffSmb[16]; /* this needs to be converted to a double array of eight elements */ // double rxGainDroopCoeffSmb[ 8 ]; /* Something wrong here, why?*/ }; struct insGadsStruct { /* see pages 455-477 for the 142 fields associated with this gads - got length of 121712 bytes */ struct dsrTimeStruct dsrTime; unsigned int dsrLength; float radarFrequency; float sampRate; float offsetFreq; struct calPulseStruct calPulseIm0TxH1; struct calPulseStruct calPulseIm0TxV1; struct calPulseStruct calPulseIm0TxH1a; struct calPulseStruct calPulseIm0TxV1a; struct calPulseStruct calPulseIm0RxH2; struct calPulseStruct calPulseIm0RxV2; struct calPulseStruct calPulseIm0H3; struct calPulseStruct calPulseIm0V3; struct calPulseStruct calPulseImTxH1[7]; struct calPulseStruct calPulseImTxV1[7]; struct calPulseStruct calPulseImTxH1a[7]; struct calPulseStruct calPulseImTxV1a[7]; struct calPulseStruct calPulseImRxH2[7]; struct calPulseStruct calPulseImRxV2[7]; struct calPulseStruct calPulseImH3[7]; struct calPulseStruct calPulseImV3[7]; struct calPulseStruct calPulseApTxH1[7]; struct calPulseStruct calPulseApTxV1[7]; struct calPulseStruct calPulseApTxH1a[7]; struct calPulseStruct calPulseApTxV1a[7]; struct calPulseStruct calPulseApRxH2[7]; struct calPulseStruct calPulseApRxV2[7]; struct calPulseStruct calPulseApH3[7]; struct calPulseStruct calPulseApV3[7]; struct calPulseStruct calPulseWvTxH1[7]; struct calPulseStruct calPulseWvTxV1[7]; struct calPulseStruct calPulseWvTxH1a[7]; struct calPulseStruct calPulseWvTxV1a[7]; struct calPulseStruct calPulseWvRxH2[7]; struct calPulseStruct calPulseWvRxV2[7]; struct calPulseStruct calPulseWvH3[7]; struct calPulseStruct calPulseWvV3[7]; struct calPulseStruct calPulseWsTxH1[5]; struct calPulseStruct calPulseWsTxV1[5]; struct calPulseStruct calPulseWsTxH1a[5]; struct calPulseStruct calPulseWsTxV1a[5]; struct calPulseStruct calPulseWsRxH2[5]; struct calPulseStruct calPulseWsRxV2[5]; struct calPulseStruct calPulseWsH3[5]; struct calPulseStruct calPulseWsV3[5]; struct calPulseStruct calPulseGmTxH1[5]; struct calPulseStruct calPulseGmTxV1[5]; struct calPulseStruct calPulseGmTxH1a[5]; struct calPulseStruct calPulseGmTxV1a[5]; struct calPulseStruct calPulseGmRxH2[5]; struct calPulseStruct calPulseGmRxV2[5]; struct calPulseStruct calPulseGmH3[5]; struct calPulseStruct calPulseGmV3[5]; struct nomPulseStruct nomPulseIm[7]; struct nomPulseStruct nomPulseAp[7]; struct nomPulseStruct nomPulseWv[7]; struct nomPulseStruct nomPulseWs[5]; struct nomPulseStruct nomPulseGm[5]; float azPatternIs1[101]; float azPatternIs2[101]; float azPatternIs3Ss2[101]; float azPatternIs4Ss3[101]; float azPatternIs5Ss4[101]; float azPatternIs6Ss5[101]; float azPatternIs7[101]; float azPatternSs1[101]; float rangeGateBias; float rangeGateBiasGm; float adcLutI[255]; float adcLutQ[255]; char spare1[648]; float full8LutI[256]; float full8LutQ[256]; float fbaq4LutI[4096]; float fbaq3LutI[2048]; float fbaq2LutI[1024]; float fbaq4LutQ[4096]; float fbaq3LutQ[2048]; float fbaq2LutQ[1024]; float fbaq4NoAdc[4096]; float fbaq3NoAdc[2048]; float fbaq2NoAdc[1024]; float smLutI[16]; float smLutQ[16]; struct dataConfigStruct dataConfigIm; struct dataConfigStruct dataConfigAp; struct dataConfigStruct dataConfigWs; struct dataConfigStruct dataConfigGm; struct dataConfigStruct dataConfigWv; struct swathConfigStruct swathConfigIm; struct swathConfigStruct swathConfigAp; struct swathConfigStruct swathConfigWs; struct swathConfigStruct swathConfigGm; struct swathConfigStruct swathConfigWv; unsigned short perCalWindowsEc; unsigned short perCalWindowsMs; struct swathIdStruct swathIdIm; struct swathIdStruct swathIdAp; struct swathIdStruct swathIdWs; struct swathIdStruct swathIdGm; struct swathIdStruct swathIdWv; unsigned short initCalBeamSetWv; unsigned short beamSetEc; unsigned short beamSetMs; unsigned short calSeq[32]; struct timelineStruct timelineIm; struct timelineStruct timelineAp; struct timelineStruct timelineWs; struct timelineStruct timelineGm; struct timelineStruct timelineWv; unsigned short mEc; char spare2[44]; float refElevAngleIs1; float refElevAngleIs2; float refElevAngleIs3Ss2; float refElevAngleIs4Ss3; float refElevAngleIs5Ss4; float refElevAngleIs6Ss5; float refElevAngleIs7; float refElevAngleSs1; char spare3[64]; float calLoopRefIs1[128]; float calLoopRefIs2[128]; float calLoopRefIs3Ss2[128]; float calLoopRefIs4Ss3[128]; float calLoopRefIs5Ss4[128]; float calLoopRefIs6Ss5[128]; float calLoopRefIs7[128]; float calLoopRefSs1[128]; char spare4[5120]; struct testStruct im; struct testStruct ap; struct testStruct ws; struct testStruct gm; struct testStruct wv; float swstCalP2; char spare5[72]; }; // added by Z. Li on 16/02/2005 typedef enum EPR_DataTypeId EPR_EDataTypeId; typedef int boolean; typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint; typedef unsigned long ulong; /* function prototypes */ struct mphStruct readMph(const char *mphPtr, const int printMphIfZero); struct sphStruct readSph(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph); struct sphAuxStruct readSphAux(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph); struct insGadsStruct readInsGads(const char *gadsPtr, const int printInsGadsIfZero); void printInsGads(const struct insGadsStruct); // added by Z. Li on 16/02/2005 int is_bigendian(); void byte_swap_short(short *buffer, uint number_of_swaps); void byte_swap_ushort(ushort *buffer, uint number_of_swaps); void byte_swap_long(long *buffer, uint number_of_swaps); void byte_swap_ulong(ulong *buffer, uint number_of_swaps); void byte_swap_float(float *buffer, uint number_of_swaps); /* new byte_swap_int type added below*/ void byte_swap_int(int *buffer, uint number_of_swaps); void byte_swap_uint(uint *buffer, uint number_of_swaps); /* new byte_swap_uint type added above*/ void swap_endian_order(EPR_EDataTypeId data_type_id, void *elems, uint num_elems); void byte_swap_InsGads(struct insGadsStruct *InsGads); /**********************************************************************************************************************************/ int main(int argc, char *argv[]) { /* variable definitions */ FILE *imFilePtr; FILE *outFilePtr; FILE *blockIdFilePtr; FILE *insFilePtr; char imFileName[200]; char outFileName[200]; char blockIdFileName[200] = "blockId"; char insFileName[200]; char *mphPtr; char *sphPtr; // char *gadsPtr; unsigned char onBoardTimeLSB; unsigned char auxTxMonitorLevel; unsigned char mdsrBlockId[200]; unsigned char mdsrCheck[63]; unsigned char beamAdjDeltaCodeword; unsigned char compressionRatio; unsigned char echoFlag; unsigned char noiseFlag; unsigned char calFlag; unsigned char calType; // unsigned char spare; unsigned char antennaBeamSetNumber = 0; unsigned char TxPolarization; unsigned char RxPolarization; unsigned char calibrationRowNumber; unsigned char chirpPulseBandwidthCodeword = 0; unsigned char mdsrLineChar[20000]; int printImMphIfZero = 1; int printImSphIfZero = 1; int printImMdsrIfZero = 1; int printInsMphIfZero = 1; int printInsSphIfZero = 1; int printInsGadsIfZero = 1; int printBlockIdIfZero = 1; int noAdcIfZero = 1; int firstTimeEqualsZero = 0; int mphSize = 1247; /* fixed size */ int outSamples = 0; int outLines = 0; int sampleShift = 0; int bytesRead = 0; // int nonOverlappingLineIfZero = 0; int outType = 4; int i; int ii; int j; int k; // int m; // int n; int numFiles; int mdsrDsrTimeDays; int mdsrDsrTimeSeconds; int mdsrDsrTimeMicroseconds; int mdsrGsrtTimeDays; int mdsrGsrtTimeSeconds; int mdsrGsrtTimeMicroseconds; int mdsrLineInt; unsigned int modePacketCount = 0; unsigned int modePacketCountOld = 0; unsigned int onBoardTimeIntegerSeconds = 0; short upConverterLevel; short downConverterLevel; unsigned short resamplingFactor; unsigned short onBoardTimeMSW; unsigned short onBoardTimeLSW; unsigned short mdsrIspLength; unsigned short mdsrCrcErrs; unsigned short mdsrRsErrs; unsigned short mdsrSpare1; unsigned short mdsrPacketIdentification; unsigned short mdsrPacketSequenceControl; unsigned short mdsrPacketLength; unsigned short mdsrPacketDataHeader[15]; unsigned short onBoardTimeFractionalSecondsInt = 0; unsigned short TxPulseLengthCodeword = 0; unsigned short priCodeword = 0; unsigned short priCodewordOld = 0; unsigned short priCodewordOldOld = 0; unsigned short windowStartTimeCodeword = 0; unsigned short windowStartTimeCodeword0 = 0; unsigned short windowStartTimeCodewordOld = 0; unsigned short windowStartTimeCodewordOldOld = 0; unsigned short windowLengthCodeword; unsigned short dataFieldHeaderLength; unsigned short modeID; unsigned short cyclePacketCount; float LUTi[4096]; float LUTq[4096]; float mdsrLine[20000]; // double onBoardTimeFractionalSeconds; double TxPulseLength; // double beamAdjDelta; double chirpPulseBandwidth; double c = 299792458.; // double timeCode; double pri; double windowStartTime; // double windowLength; double near_range; double swst0; struct mphStruct mph; struct mphStruct mphIns; struct sphStruct sph; // struct sphAuxStruct sphIns; struct insGadsStruct insGads; int is_littlendian; /* usage note */ // printf( "\n*** asa_im_decode v1.0 by smb ***\n\n" ); printf("\n*** asa_im_decode v1.1 by smb ***\n\n"); if ((argc - 1) < 5) { printf("Decodes Envisat ASAR Image Mode Level 0 data.\n\n"); printf("Usage: asa_im_decode " "\n\n"); printf(" asa_im input image file(s) (multiple files if merging " "along-track)\n"); printf(" asa_ins input auxilary instrument characterization data " "file\n"); printf(" out output raw data file\n"); printf(" outType output file type (1=byte,4=float)\n"); printf(" near_range near range to which to align all lines (0=use " "first line near range)\n\n"); printf("Notes:\n\n"); printf("out is a complex file with no headers (byte/float I1, byte/float " "Q1, byte/float I2, byte/float Q2, ...)\n\n"); printf("if outType is byte, then the decoded floats are multiplied by " "127.5, shifted by 127.5, rounded to the nearest integer and " "limited to the range 0-255\n\n"); printf("starting range computed as (rank*pri+windowStartTime)*c/2 where rank " "is the number of pri between transmitted pulse and return echo\n\n"); printf("calibration/noise lines are replaced with previous echo data " "line\n\n"); printf("missing lines within a data set and between adjacent along-track " "data sets are filled with zeroes in float mode and 0.*127.5+127.5 " "+ .5 = 128 for byte mode\n\n"); printf("auxilary data files can be found at " "http://envisat.esa.int/services/auxiliary_data/asar/\n\n"); printf("Envisat ASAR Product Handbook, Issue 1.1, 1 December 2002 can be " "found at " "http://envisat.esa.int/dataproducts/asar/" "CNTR6-3-6.htm#eph.asar.asardf.0pASA_IM__0P\n\n"); return 0; } /* read in command-line arguments */ numFiles = (argc - 1) - 4; sscanf(argv[numFiles + 1], "%s", insFileName); sscanf(argv[numFiles + 2], "%s", outFileName); sscanf(argv[numFiles + 3], "%d", &outType); sscanf(argv[numFiles + 4], "%lf", &near_range); /*//debug numFiles = 1; //sscanf( "D:\\data\\scign\\ASAR_RAW\\09786-2925-20040113\\ASA_IM__0CNPDK20040113_180720_000000152023_00213_09786_1579.N1", "%s", insFileName ); sscanf( "D:\\data\\scign\\ASARAux\\ASA_INS_AXVIEC20031209_113421_20030211_000000_20041231_000000", "%s", insFileName ); sscanf( "D:\\temp\\tmp_IMAGERY.raw", "%s", outFileName ); sscanf( "1", "%d", &outType ); sscanf( "0", "%hd", &windowStartTimeCodeword0 ); printImMphIfZero = 0; printImSphIfZero = 0; printImMdsrIfZero = 1; printInsMphIfZero = 0; printInsSphIfZero = 0; printInsGadsIfZero = 0; printBlockIdIfZero = 0; */ if (is_bigendian()) { printf("It is running under Unix or Mac...\n"); is_littlendian = 0; } else { printf("It is running under Linux or Windows...\n"); is_littlendian = 1; } /* open files */ outFilePtr = fopen(outFileName, "wb"); if (outFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", outFileName); printf("\n"); exit(-1); } if (printBlockIdIfZero == 0) { blockIdFilePtr = fopen(blockIdFileName, "wb"); if (blockIdFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", blockIdFileName); printf("\n"); exit(-1); } } insFilePtr = fopen(insFileName, "rb"); if (insFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", insFileName); printf("\n"); exit(-1); } /* read MPH of ins file */ printf("Reading MPH of ins file...\n\n"); mphPtr = (char *)malloc(sizeof(char) * mphSize); if (mphPtr == NULL) { printf("ERROR - mph allocation memory\n"); exit(-1); } if ((fread(mphPtr, sizeof(char), mphSize, insFilePtr)) != mphSize) { printf("ERROR - mph read error\n\n"); exit(-1); } mphIns = readMph(mphPtr, printInsMphIfZero); /* extract information from MPH */ free(mphPtr); /* read SPH from ins file */ printf("Reading SPH from ins file...\n\n"); sphPtr = (char *)malloc(sizeof(char) * mphIns.sphSize); if (sphPtr == NULL) { printf("ERROR - sph allocation memory\n"); exit(-1); } if ((fread(sphPtr, sizeof(char), mphIns.sphSize, insFilePtr)) != mphIns.sphSize) { printf("ERROR - sph read error\n\n"); exit(-1); } // sphIns = readSphAux( sphPtr, printInsSphIfZero, mphIns ); /* extract // information from SPH */ (void)readSphAux(sphPtr, printInsSphIfZero, mphIns); /* extract information from SPH */ free(sphPtr); /* read GADS from ins file */ printf("Reading GADS from ins file...\n\n"); /*gadsPtr = ( char * ) malloc( sizeof( char ) * sphIns.dsd[ 0 ].dsrSize ); if ( gadsPtr == NULL ){ printf( "ERROR - gads allocation memory\n" ); exit( -1 ); } //edited by Z. Li at UCL on 16/02/2005 if ( (fread( gadsPtr, sizeof( char ), sizeof( insGads ), insFilePtr ) ) != sizeof( insGads ) ){ printf( "sizeof( insGads ): %d\n", sizeof( insGads ) ); printf( "ERROR - gads read error\n\n" ); printf( "%d %d %d\n", 171648, sizeof ( insGads ), 171648-sizeof( insGads ) ); exit( -1 ); } insGads = readInsGads( gadsPtr, printInsGadsIfZero ); free (gadsPtr); */ if ((fread(&insGads, sizeof(insGads), 1, insFilePtr)) != 1) { printf("sizeof( insGads ): %ld\n", sizeof(insGads)); printf("ERROR - gads read error\n\n"); printf("%d %ld %ld\n", 171648, sizeof(insGads), 171648 - sizeof(insGads)); exit(-1); } if (is_littlendian) { byte_swap_InsGads(&insGads); } if (printInsGadsIfZero == 0) printInsGads(insGads); fclose(insFilePtr); /* fill LUTs */ for (i = 0; i < 4096; i++) { if (i < 2048) ii = i; else ii = 256 * (23 - (i / 256)) + (i % 256); if (noAdcIfZero == 0) { LUTi[i] = insGads.fbaq4NoAdc[ii]; LUTq[i] = insGads.fbaq4NoAdc[ii]; } else { LUTi[i] = insGads.fbaq4LutI[ii]; LUTq[i] = insGads.fbaq4LutQ[ii]; } } /* begin loop over files */ for (ii = 0; ii < numFiles; ii++) { /* open image file */ sscanf(argv[ii + 1], "%s", imFileName); // debug // sscanf( // "D:\\data\\scign\\ASAR_RAW\\09786-2925-20040113\\ASA_IM__0CNPDK20040113_180720_000000152023_00213_09786_1579.N1", // "%s", imFileName ); imFilePtr = fopen(imFileName, "rb"); if (imFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", imFileName); printf("\n"); exit(-1); } /* read image MPH */ printf("Reading image MPH...\n\n"); mphPtr = (char *)malloc(sizeof(char) * mphSize); if (mphPtr == NULL) { printf("ERROR - mph allocation memory\n"); exit(-1); } if ((fread(mphPtr, sizeof(char), mphSize, imFilePtr)) != mphSize) { printf("ERROR - mph read error\n\n"); exit(-1); } mph = readMph(mphPtr, printImMphIfZero); /* extract information from MPH */ free(mphPtr); /* read image SPH */ printf("Reading image SPH...\n\n"); sphPtr = (char *)malloc(sizeof(char) * mph.sphSize); if (sphPtr == NULL) { printf("ERROR - sph allocation memory\n"); exit(-1); } if ((fread(sphPtr, sizeof(char), mph.sphSize, imFilePtr)) != mph.sphSize) { printf("ERROR - sph read error\n\n"); exit(-1); } sph = readSph(sphPtr, printImSphIfZero, mph); /* extract information from SPH */ free(sphPtr); /* read image MDSR from file */ printf("Reading and decoding image MDSR...\n\n"); bytesRead = 0; for (i = 0; i < sph.dsd[0].numDsr; i++) { if ((i + 1) % 1000 == 0) printf("Line %5d\n", i + 1); modePacketCountOld = modePacketCount; /* sensing time added by Level 0 processor, as converted from Satellite * Binary Time (SBT) counter embedded in each ISP */ /** * Represents a binary time value field in ENVISAT records. * *

Refer to ENVISAT documentation for the exact definition of * this data type. */ /* long days; ulong seconds; ulong microseconds; */ bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeDays, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_long, &mdsrDsrTimeDays, 1); } /* header added to the ISP by the Front End Processor (FEP) */ bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeSeconds, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ulong, &mdsrDsrTimeSeconds, 1); } bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeMicroseconds, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ulong, &mdsrDsrTimeMicroseconds, 1); } bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeDays, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_long, &mdsrGsrtTimeDays, 1); } bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeSeconds, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ulong, &mdsrGsrtTimeSeconds, 1); } bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeMicroseconds, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ulong, &mdsrGsrtTimeMicroseconds, 1); } bytesRead = bytesRead + 2 * fread(&mdsrIspLength, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrIspLength, 1); } bytesRead = bytesRead + 2 * fread(&mdsrCrcErrs, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrCrcErrs, 1); } bytesRead = bytesRead + 2 * fread(&mdsrRsErrs, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrRsErrs, 1); } bytesRead = bytesRead + 2 * fread(&mdsrSpare1, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrSpare1, 1); } /* 6-byte ISP Packet Header */ bytesRead = bytesRead + 2 * fread(&mdsrPacketIdentification, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketIdentification, 1); } bytesRead = bytesRead + 2 * fread(&mdsrPacketSequenceControl, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketSequenceControl, 1); } bytesRead = bytesRead + 2 * fread(&mdsrPacketLength, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketLength, 1); } /* 30-byte Data Field Header in Packet Data Field */ bytesRead = bytesRead + 30 * fread(&mdsrPacketDataHeader, 30, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketDataHeader, 15); } priCodewordOldOld = priCodewordOld; windowStartTimeCodewordOldOld = windowStartTimeCodewordOld; priCodewordOld = priCodeword; windowStartTimeCodewordOld = windowStartTimeCodeword; dataFieldHeaderLength = mdsrPacketDataHeader[0]; modeID = mdsrPacketDataHeader[1]; onBoardTimeMSW = mdsrPacketDataHeader[2]; onBoardTimeLSW = mdsrPacketDataHeader[3]; onBoardTimeLSB = (unsigned char)((mdsrPacketDataHeader[4] >> 8) & 255); modePacketCount = mdsrPacketDataHeader[5] * 256 + ((mdsrPacketDataHeader[6] >> 8) & 255); antennaBeamSetNumber = (unsigned char)((mdsrPacketDataHeader[6] >> 2) & 63); compressionRatio = (unsigned char)((mdsrPacketDataHeader[6]) & 3); /* 1 is 8/4 compression */ echoFlag = (unsigned char)((mdsrPacketDataHeader[7] >> 15) & 1); noiseFlag = (unsigned char)((mdsrPacketDataHeader[7] >> 14) & 1); calFlag = (unsigned char)((mdsrPacketDataHeader[7] >> 13) & 1); calType = (unsigned char)((mdsrPacketDataHeader[7] >> 12) & 1); cyclePacketCount = (mdsrPacketDataHeader[7] & 4095); priCodeword = mdsrPacketDataHeader[8]; windowStartTimeCodeword = mdsrPacketDataHeader[9]; windowLengthCodeword = mdsrPacketDataHeader[10]; upConverterLevel = (short)((mdsrPacketDataHeader[11] >> 12) & 15); downConverterLevel = (short)((mdsrPacketDataHeader[11] >> 7) & 31); TxPolarization = (unsigned char)((mdsrPacketDataHeader[11] >> 6) & 1); RxPolarization = (unsigned char)((mdsrPacketDataHeader[11] >> 5) & 1); calibrationRowNumber = (unsigned char)((mdsrPacketDataHeader[11]) & 31); TxPulseLengthCodeword = (unsigned short)((mdsrPacketDataHeader[12] >> 6) & 1023); beamAdjDeltaCodeword = (unsigned char)((mdsrPacketDataHeader[12]) & 63); chirpPulseBandwidthCodeword = (unsigned char)((mdsrPacketDataHeader[13] >> 8) & 255); auxTxMonitorLevel = (unsigned char)((mdsrPacketDataHeader[13]) & 255); resamplingFactor = mdsrPacketDataHeader[14]; if (printImMdsrIfZero == 0) { onBoardTimeIntegerSeconds = (unsigned int)(onBoardTimeMSW * 256 + ((onBoardTimeLSW >> 8) & 255)); onBoardTimeFractionalSecondsInt = (unsigned short)((onBoardTimeLSW & 255) * 256 + onBoardTimeLSB); /* onBoardTimeFractionalSeconds = (double) * ((double)onBoardTimeFractionalSecondsInt/65536.); */ printf("%6d %2u %2x %8d %5d %d %d %d %d %d %d %d %4d %5d %5d %5d %2d " "%2d %1d %1d %2u %4d %2d %3d %3d %5d\n", i + 1, dataFieldHeaderLength, modeID, onBoardTimeIntegerSeconds, onBoardTimeFractionalSecondsInt, modePacketCount, antennaBeamSetNumber, compressionRatio, echoFlag, noiseFlag, calFlag, calType, cyclePacketCount, priCodeword, windowStartTimeCodeword, windowLengthCodeword, upConverterLevel, downConverterLevel, TxPolarization, RxPolarization, calibrationRowNumber, TxPulseLengthCodeword, beamAdjDeltaCodeword, chirpPulseBandwidthCodeword, auxTxMonitorLevel, resamplingFactor); } if ((modePacketCount == modePacketCountOld + 1) || (firstTimeEqualsZero == 0)) { /* write out data */ if ((echoFlag == 1) && (noiseFlag == 0) && (calFlag == 0)) { if (firstTimeEqualsZero == 0) { outSamples = ((mdsrIspLength + 1 - 30) / 64) * 63 + ((mdsrIspLength + 1 - 30) % 64) - 1; /* compute windowStartTimeCodeword0 from the near_range Jan 21 2011 * by Xiaopeng */ if (fabs(near_range) < 1e-9) windowStartTimeCodeword0 = windowStartTimeCodeword; else { pri = priCodeword / insGads.sampRate; swst0 = near_range * 2 / c - pri * insGads.timelineIm.rValues[antennaBeamSetNumber - 1]; windowStartTimeCodeword0 = (int)floor(swst0 * insGads.sampRate + 0.5); } /* end of modification: compute windowStartTimeCodeword0 from the * near_range */ if (windowStartTimeCodeword0 == 0) windowStartTimeCodeword0 = windowStartTimeCodeword; else if (windowStartTimeCodeword0 != windowStartTimeCodeword) printf("Line %5d : windowStartTimeCodeword %5d : shifting this " "and subsequent data to %5d\n", i + 1, windowStartTimeCodeword, windowStartTimeCodeword0); windowStartTimeCodewordOld = windowStartTimeCodeword; firstTimeEqualsZero = 1; } /* check a few things - still need to check TxPulseLength, * chirpPulseBandwidthCodeword, beamAdjDeltaCodeword */ if ((i != 0) && (priCodeword != priCodewordOld)) { printf("Line %5d : priCodeword changes from %5d to %5d : no action " "taken\n", i + 1, priCodewordOld, priCodeword); } if (windowStartTimeCodeword != windowStartTimeCodewordOld) { printf("Line %5d : windowStartTimeCodeword changes from %5d to %5d " ": shifting this and subsequent data to %5d\n", i + 1, windowStartTimeCodewordOld, windowStartTimeCodeword, windowStartTimeCodeword0); } /* read 64-byte blocks */ for (j = 0; j < (mdsrIspLength + 1 - 30) / 64; j++) { fread(&mdsrBlockId[j], sizeof(char), 1, imFilePtr); fread(&mdsrCheck, sizeof(char), 63, imFilePtr); bytesRead = bytesRead + 64; for (k = 0; k < 63; k++) { mdsrLine[2 * 63 * j + 2 * k] = LUTi[256 * (15 - ((mdsrCheck[k] >> 4) & 15)) + mdsrBlockId[j]]; mdsrLine[2 * 63 * j + 2 * k + 1] = LUTq[256 * (15 - (mdsrCheck[k] & 15)) + mdsrBlockId[j]]; /* if ( i == 0 ) { printf( "k,sample,blockId,i_in,q_in,i_out,q_out: %2d %4d %3d %2d %2d %15f %15f\n", k, 63*j+k, mdsrBlockId[ j ], ((mdsrCheck[ k ] >> 4) & 15), ( mdsrCheck[ k ] & 15), mdsrLine[ 2*k ], mdsrLine[ 2*k+1 ] ); } */ } } /* read partial last block */ fread(&mdsrBlockId[j], sizeof(char), 1, imFilePtr); fread(&mdsrCheck, sizeof(char), ((mdsrIspLength + 1 - 30) % 64) - 1, imFilePtr); bytesRead = bytesRead + (mdsrIspLength + 1 - 30) % 64; for (k = 0; k < ((mdsrIspLength + 1 - 30) % 64) - 1; k++) { mdsrLine[2 * 63 * j + 2 * k] = LUTi[256 * (15 - ((mdsrCheck[k] >> 4) & 15)) + mdsrBlockId[j]]; mdsrLine[2 * 63 * j + 2 * k + 1] = LUTq[256 * (15 - (mdsrCheck[k] & 15)) + mdsrBlockId[j]]; /* if ( i == 0 ) { printf( "k,sample,blockId,i_in,q_in,i_out,q_out: %2d %4d %3d %2d %2d %15f %15f\n", k, 63*j+k, mdsrBlockId[ j ], ((mdsrCheck[ k ] >> 4) & 15), ( mdsrCheck[ k ] & 15), mdsrLine[ 2*k ], mdsrLine[ 2*k+1 ] ); } */ } if (windowStartTimeCodeword != windowStartTimeCodeword0) { sampleShift = windowStartTimeCodeword - windowStartTimeCodeword0; if (sampleShift < 0) { for (k = 0; k < outSamples + sampleShift; k++) { mdsrLine[2 * k] = mdsrLine[2 * (k - sampleShift)]; mdsrLine[2 * k + 1] = mdsrLine[2 * (k - sampleShift) + 1]; } for (k = outSamples + sampleShift; k < outSamples; k++) { mdsrLine[2 * k] = 0.; mdsrLine[2 * k + 1] = 0.; } } else { for (k = outSamples - 1; k >= sampleShift; k--) { mdsrLine[2 * k] = mdsrLine[2 * (k - sampleShift)]; mdsrLine[2 * k + 1] = mdsrLine[2 * (k - sampleShift) + 1]; } for (k = sampleShift - 1; k >= 0; k--) { mdsrLine[2 * k] = 0.; mdsrLine[2 * k + 1] = 0.; } } } } else { /* skip ahead and write out previous line as a placeholder */ fseek(imFilePtr, mdsrIspLength + 1 - 30, SEEK_CUR); bytesRead = bytesRead + mdsrIspLength + 1 - 30; } if (printBlockIdIfZero == 0) { if ((fwrite(&mdsrBlockId, sizeof(unsigned char), outSamples / 63 + 1, blockIdFilePtr)) != outSamples / 63 + 1) { printf("ERROR - blockIdFile write error\n\n"); exit(-1); } } if (outType == 1) { for (k = 0; k < 2 * outSamples; k++) { mdsrLineInt = (mdsrLine[k] * 127.5 + 127.5) + .5; /* 5 for rounding */ if (mdsrLineInt < 0) mdsrLineInt = 0; if (mdsrLineInt > 255) mdsrLineInt = 255; mdsrLineChar[k] = mdsrLineInt; } if ((fwrite(&mdsrLineChar, 2 * sizeof(unsigned char), outSamples, outFilePtr)) != outSamples) { printf("ERROR - outFile write error\n\n"); exit(-1); } } else { if ((fwrite(&mdsrLine, 2 * sizeof(float), outSamples, outFilePtr)) != outSamples) { printf("ERROR - outFile write error\n\n"); exit(-1); } } outLines = outLines + 1; } else if (modePacketCount > modePacketCountOld + 1) { /* printf( "Line %5d : missing line - no action taken - %d %d\n", i+1, modePacketCount, modePacketCountOld ); fseek( imFilePtr, mdsrIspLength+1-30, SEEK_CUR ); bytesRead = bytesRead + mdsrIspLength+1-30; */ printf("Line %5d : missing line(s) - filling with zeroes - %d %d\n", i + 1, modePacketCount, modePacketCountOld); for (j = 0; j < (modePacketCount - modePacketCountOld - 1); j++) { if (outType == 1) { for (k = 0; k < 2 * outSamples; k++) { mdsrLineChar[k] = 128; /* (0.*127.5+127.5) + .5 */ } if ((fwrite(&mdsrLineChar, 2 * sizeof(unsigned char), outSamples, outFilePtr)) != outSamples) { printf("ERROR - outFile write error\n\n"); exit(-1); } } else { for (k = 0; k < 2 * outSamples; k++) { mdsrLine[k] = 0.; } if ((fwrite(&mdsrLine, 2 * sizeof(float), outSamples, outFilePtr)) != outSamples) { printf("ERROR - outFile write error\n\n"); exit(-1); } } outLines = outLines + 1; } modePacketCountOld = modePacketCount - 1; /* set up to re-read header and decode current line */ fseek(imFilePtr, -68, SEEK_CUR); bytesRead = bytesRead - 68; modePacketCountOld = modePacketCountOld - 1; modePacketCount = modePacketCount - 1; priCodewordOld = priCodewordOldOld; priCodeword = priCodewordOld; windowStartTimeCodewordOld = windowStartTimeCodewordOldOld; windowStartTimeCodeword = windowStartTimeCodewordOld; i = i - 1; } else if (modePacketCount < modePacketCountOld + 1) { printf("Line %5d : duplicate line\n", i + 1); fseek(imFilePtr, mdsrIspLength + 1 - 30, SEEK_CUR); bytesRead = bytesRead + mdsrIspLength + 1 - 30; modePacketCount = modePacketCountOld; } else { printf("Line %5d : error - %d %d\n", i + 1, modePacketCount, modePacketCountOld); exit(-1); } } if ((i - 1 + 1) % 1000 != 0) printf("Line %5d\n\n", i - 1 + 1); /* write out a few things */ /* pri = priCodeword / insGads.sampRate; windowStartTime = windowStartTimeCodeword0 / insGads.sampRate; TxPulseLength = TxPulseLengthCodeword / insGads.sampRate; chirpPulseBandwidth = (double)chirpPulseBandwidthCodeword*16.e6/255.; windowLength = windowLengthCodeword / insGads.sampRate; beamAdjDelta = (double)(beamAdjDeltaCodeword-32)*360./4096.; printf( "%s%d\n", "swathNum: ", insGads.timelineIm.swathNums[ antennaBeamSetNumber-1 ] ); printf( "%s%d\n", "mValue: ", insGads.timelineIm.mValues[ antennaBeamSetNumber-1 ] ); printf( "%s%d\n", "rValue: ", insGads.timelineIm.rValues[ antennaBeamSetNumber-1 ] ); printf( "%s%d\n", "gValue: ", insGads.timelineIm.gValues[ antennaBeamSetNumber-1 ] ); printf( "%s%.9g\n", "(rank*pri+windowStartTime)*c/2 (m): ", (insGads.timelineIm.rValues[ antennaBeamSetNumber-1 ]*pri+windowStartTime)*c/2. ); printf( "%s%.9g\n", "(last)windowStartTime*c/2 (m): ", windowStartTime*c/2. ); printf( "%s%.9g\n", "windowLength*c/2 (m): ", windowLength*c/2. ); printf( "%s%.9g\n", "rangeGateBias*c/2 (m): ", insGads.rangeGateBias*c/2. ); printf( "\nOutput information:\n\n" ); printf( "%s%d\n", "number of output samples: ", outSamples ); printf( "%s%d\n", "number of output lines: ", outLines ); printf( "%s%.9g\n", "chirp pulse bandwidth (Hz): ", chirpPulseBandwidth ); printf( "%s%.9g\n", "prf (Hz): ", 1./pri ); printf( "%s%.9g\n", "range sampling frequency (Hz): ", insGads.sampRate ); printf( "%s%.9g\n", "range sample spacing (m): ", c/(2.*insGads.sampRate)); printf( "%s%.9g\n", "chirp slope (Hz/s): ", chirpPulseBandwidth/TxPulseLength ); printf( "%s%.9g\n", "pulse length (s): ", TxPulseLength ); printf( "%s%.9g\n", "radar frequency (Hz): ", insGads.radarFrequency ); printf( "%s%.9g\n", "wavelength (m): ", c/insGads.radarFrequency ); printf( "%s%.9g\n", "starting range (m): ", (insGads.timelineIm.rValues[ antennaBeamSetNumber-1 ]*pri+windowStartTime)*c/2. ); printf( "\n" ); */ fclose(imFilePtr); } /* write out a few things */ pri = priCodeword / insGads.sampRate; windowStartTime = windowStartTimeCodeword0 / insGads.sampRate; TxPulseLength = TxPulseLengthCodeword / insGads.sampRate; chirpPulseBandwidth = (double)chirpPulseBandwidthCodeword * 16.e6 / 255.; /*//debug */ printf("%s%d\n", "priCodeword=: ", priCodeword); printf("%s%.12f\n", "insGads.sampRate=: ", insGads.sampRate); printf("%s%.12f\n", "pri=: ", pri); printf("%s%d\n", "windowStartTimeCodeword0=:", windowStartTimeCodeword0); printf("%s%.12f\n", "windowStartTime=: ", windowStartTime); printf("%s%.12f\n", "TxPulseLength=: ", TxPulseLength); printf("%s%.12f\n", "chirpPulseBandwidth=: ", chirpPulseBandwidth); /* //end of debug */ printf("\nOutput information:\n\n"); printf("%s%d\n", "number of output samples: ", outSamples); printf("%s%d\n", "number of output lines: ", outLines); printf("%s%.9g\n", "chirp pulse bandwidth (Hz): ", chirpPulseBandwidth); printf("%s%.9g\n", "prf (Hz): ", 1. / pri); printf("%s%.9g\n", "range sampling frequency (Hz): ", insGads.sampRate); printf("%s%.9g\n", "range sample spacing (m): ", c / (2. * insGads.sampRate)); printf("%s%.9g\n", "chirp slope (Hz/s): ", chirpPulseBandwidth / TxPulseLength); printf("%s%.9g\n", "pulse length (s): ", TxPulseLength); printf("%s%.9g\n", "radar frequency (Hz): ", insGads.radarFrequency); printf("%s%.9g\n", "wavelength (m): ", c / insGads.radarFrequency); printf("%s%.9g\n", "starting range (m): ", (insGads.timelineIm.rValues[antennaBeamSetNumber - 1] * pri + windowStartTime) * c / 2.); printf("%s%.9g\n", "rangeGateBias*c/2 (m): ", insGads.rangeGateBias * c / 2.); printf("\n"); /* end program */ fclose(outFilePtr); printf("\nDone.\n\n"); return 0; } /* end main */ /**********************************************************************************************************************************/ struct mphStruct readMph(const char *mphPtr, const int printMphIfZero) { struct mphStruct mph; if (1 == 0) { printf("check:\n%s\n", mphPtr + 1247); } memcpy(mph.product, mphPtr + 0 + 9, 62); memcpy(mph.procStage, mphPtr + 73 + 11, 1); memcpy(mph.refDoc, mphPtr + 86 + 9, 23); memcpy(mph.spare1, mphPtr + 120 + 0, 40); memcpy(mph.acquisitionStation, mphPtr + 161 + 21, 20); memcpy(mph.procCenter, mphPtr + 204 + 13, 6); memcpy(mph.procTime, mphPtr + 225 + 11, 27); memcpy(mph.softwareVer, mphPtr + 265 + 14, 14); memcpy(mph.spare2, mphPtr + 295 + 0, 40); memcpy(mph.sensingStart, mphPtr + 336 + 15, 27); memcpy(mph.sensingStop, mphPtr + 380 + 14, 27); memcpy(mph.spare3, mphPtr + 423 + 0, 40); memcpy(mph.phase, mphPtr + 464 + 6, 1); mph.cycle = atoi((char *)strchr(mphPtr + 472 + 0, '=') + 1); mph.relOrbit = atoi((char *)strchr(mphPtr + 483 + 0, '=') + 1); mph.absOrbit = atoi((char *)strchr(mphPtr + 500 + 0, '=') + 1); memcpy(mph.stateVectorTime, mphPtr + 517 + 19, 27); mph.deltaUt1 = atof((char *)strchr(mphPtr + 565 + 0, '=') + 1); mph.xPosition = atof((char *)strchr(mphPtr + 587 + 0, '=') + 1); mph.yPosition = atof((char *)strchr(mphPtr + 614 + 0, '=') + 1); mph.zPosition = atof((char *)strchr(mphPtr + 641 + 0, '=') + 1); mph.xVelocity = atof((char *)strchr(mphPtr + 668 + 0, '=') + 1); mph.yVelocity = atof((char *)strchr(mphPtr + 697 + 0, '=') + 1); mph.zVelocity = atof((char *)strchr(mphPtr + 726 + 0, '=') + 1); memcpy(mph.vectorSource, mphPtr + 755 + 15, 2); memcpy(mph.spare4, mphPtr + 774 + 0, 40); memcpy(mph.utcSbtTime, mphPtr + 815 + 14, 27); mph.satBinaryTime = atoi((char *)strchr(mphPtr + 858 + 0, '=') + 1); mph.clockStep = atoi((char *)strchr(mphPtr + 886 + 0, '=') + 1); memcpy(mph.spare5, mphPtr + 913 + 0, 32); memcpy(mph.leapUtc, mphPtr + 946 + 10, 27); mph.leapSign = atoi((char *)strchr(mphPtr + 985 + 0, '=') + 1); mph.leapErr = atoi((char *)strchr(mphPtr + 1000 + 0, '=') + 1); memcpy(mph.spare6, mphPtr + 1011 + 0, 40); mph.productErr = atoi((char *)strchr(mphPtr + 1052 + 0, '=') + 1); mph.totSize = atoi((char *)strchr(mphPtr + 1066 + 0, '=') + 1); mph.sphSize = atoi((char *)strchr(mphPtr + 1104 + 0, '=') + 1); mph.numDsd = atoi((char *)strchr(mphPtr + 1132 + 0, '=') + 1); mph.dsdSize = atoi((char *)strchr(mphPtr + 1152 + 0, '=') + 1); mph.numDataSets = atoi((char *)strchr(mphPtr + 1180 + 0, '=') + 1); memcpy(mph.spare7, mphPtr + 1206 + 0, 40); if (printMphIfZero == 0) { printf("%s%.62s\n", "product: ", mph.product); printf("%s%.1s\n", "procStage: ", mph.procStage); printf("%s%.23s\n", "refDoc: ", mph.refDoc); printf("%s%.40s\n", "spare1: ", mph.spare1); printf("%s%.20s\n", "acquisitionStation: ", mph.acquisitionStation); printf("%s%.6s\n", "procCenter: ", mph.procCenter); printf("%s%.27s\n", "procTime: ", mph.procTime); printf("%s%.14s\n", "softwareVer: ", mph.softwareVer); printf("%s%.40s\n", "spare2: ", mph.spare2); printf("%s%.27s\n", "sensingStart: ", mph.sensingStart); printf("%s%.27s\n", "sensingStop: ", mph.sensingStop); printf("%s%.40s\n", "spare3: ", mph.spare3); printf("%s%.1s\n", "phase: ", mph.phase); printf("%s%d\n", "cycle: ", mph.cycle); printf("%s%d\n", "relOrbit: ", mph.relOrbit); printf("%s%d\n", "absOrbit: ", mph.absOrbit); printf("%s%.27s\n", "stateVectorTime: ", mph.stateVectorTime); printf("%s%f\n", "deltaUt1: ", mph.deltaUt1); printf("%s%f\n", "xPosition: ", mph.xPosition); printf("%s%f\n", "yPosition: ", mph.yPosition); printf("%s%f\n", "zPosition: ", mph.zPosition); printf("%s%f\n", "xVelocity: ", mph.xVelocity); printf("%s%f\n", "yVelocity: ", mph.yVelocity); printf("%s%f\n", "zVelocity: ", mph.zVelocity); printf("%s%.2s\n", "vectorSource: ", mph.vectorSource); printf("%s%.40s\n", "spare4: ", mph.spare4); printf("%s%.27s\n", "utcSbtTime: ", mph.utcSbtTime); printf("%s%u\n", "satBinaryTime: ", mph.satBinaryTime); printf("%s%u\n", "clockStep: ", mph.clockStep); printf("%s%.32s\n", "spare5: ", mph.spare5); printf("%s%.27s\n", "leapUtc: ", mph.leapUtc); printf("%s%d\n", "leapSign: ", mph.leapSign); printf("%s%d\n", "leapErr: ", mph.leapErr); printf("%s%.40s\n", "spare6: ", mph.spare6); printf("%s%d\n", "productErr: ", mph.productErr); printf("%s%d\n", "totSize: ", mph.totSize); printf("%s%d\n", "sphSize: ", mph.sphSize); printf("%s%d\n", "numDsd: ", mph.numDsd); printf("%s%d\n", "dsdSize: ", mph.dsdSize); printf("%s%d\n", "numDataSets: ", mph.numDataSets); printf("%s%.40s\n", "spare7: ", mph.spare7); printf("\n"); } return mph; } /* end readMph */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ struct sphStruct readSph(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph) { struct sphStruct sph; int i; memcpy(sph.sphDescriptor, sphPtr + 0 + 16, 28); sph.startLat = atof((char *)strchr(sphPtr + 46 + 0, '=') + 1) * 1.e-6; sph.startLon = atof((char *)strchr(sphPtr + 78 + 0, '=') + 1) * 1.e-6; sph.stopLat = atof((char *)strchr(sphPtr + 111 + 0, '=') + 1) * 1.e-6; sph.stopLon = atof((char *)strchr(sphPtr + 142 + 0, '=') + 1) * 1.e-6; sph.satTrack = atof((char *)strchr(sphPtr + 174 + 0, '=') + 1); memcpy(sph.spare1, sphPtr + 205 + 0, 50); sph.ispErrorsSignificant = atoi((char *)strchr(sphPtr + 256 + 0, '=') + 1); sph.missingIspsSignificant = atoi((char *)strchr(sphPtr + 281 + 0, '=') + 1); sph.ispDiscardedSignificant = atoi((char *)strchr(sphPtr + 308 + 0, '=') + 1); sph.rsSignificant = atoi((char *)strchr(sphPtr + 336 + 0, '=') + 1); memcpy(sph.spare2, sphPtr + 353 + 0, 50); sph.numErrorIsps = atoi((char *)strchr(sphPtr + 404 + 0, '=') + 1); sph.errorIspsThresh = atof((char *)strchr(sphPtr + 431 + 0, '=') + 1); sph.numMissingIsps = atoi((char *)strchr(sphPtr + 468 + 0, '=') + 1); sph.missingIspsThresh = atof((char *)strchr(sphPtr + 497 + 0, '=') + 1); sph.numDiscardedIsps = atoi((char *)strchr(sphPtr + 536 + 0, '=') + 1); sph.discardedIspsThresh = atof((char *)strchr(sphPtr + 567 + 0, '=') + 1); sph.numRsIsps = atoi((char *)strchr(sphPtr + 608 + 0, '=') + 1); sph.rsThresh = atof((char *)strchr(sphPtr + 632 + 0, '=') + 1); memcpy(sph.spare3, sphPtr + 661 + 0, 100); memcpy(sph.txRxPolar, sphPtr + 762 + 13, 5); memcpy(sph.swath, sphPtr + 782 + 7, 3); memcpy(sph.spare4, sphPtr + 794 + 0, 41); if (1 == 0) { printf("check:\n%s\n", sphPtr + 836 + 0); } if (printSphIfZero == 0) { printf("%s%.28s\n", "sphDescriptor: ", sph.sphDescriptor); printf("%s%f\n", "startLat: ", sph.startLat); printf("%s%f\n", "startLon: ", sph.startLon); printf("%s%f\n", "stopLat: ", sph.stopLat); printf("%s%f\n", "stopLon: ", sph.stopLon); printf("%s%f\n", "satTrack: ", sph.satTrack); printf("%s%.50s\n", "spare1: ", sph.spare1); printf("%s%d\n", "ispErrorsSignificant: ", sph.ispErrorsSignificant); printf("%s%d\n", "missingIspsSignificant: ", sph.missingIspsSignificant); printf("%s%d\n", "ispDiscardedSignificant: ", sph.ispDiscardedSignificant); printf("%s%d\n", "rsSignificant: ", sph.rsSignificant); printf("%s%.50s\n", "spare2: ", sph.spare2); printf("%s%d\n", "numErrorIsps: ", sph.numErrorIsps); printf("%s%f\n", "errorIspsThresh: ", sph.errorIspsThresh); printf("%s%d\n", "numMissingIsps: ", sph.numMissingIsps); printf("%s%f\n", "missingIspsThresh: ", sph.missingIspsThresh); printf("%s%d\n", "numDiscardedIsps: ", sph.numDiscardedIsps); printf("%s%f\n", "discardedIspsThresh: ", sph.discardedIspsThresh); printf("%s%d\n", "numRsIsps: ", sph.numRsIsps); printf("%s%f\n", "rsThresh: ", sph.rsThresh); printf("%s%.100s\n", "spare3: ", sph.spare3); printf("%s%.5s\n", "txRxPolar: ", sph.txRxPolar); printf("%s%.3s\n", "swath: ", sph.swath); printf("%s%.41s\n", "spare4: ", sph.spare4); } for (i = 0; i < mph.numDsd; i++) { /* extract DSDs from SPH */ if (i != 3) { /* fourth is a spare DSD - see pdf page 537 */ if (1 == 0) { printf("check:\n%s\n", sphPtr + 836 + mph.dsdSize * i + 0 + 0); } memcpy(sph.dsd[i].dsName, sphPtr + 836 + mph.dsdSize * i + 0 + 9, 28); memcpy(sph.dsd[i].dsType, sphPtr + 836 + mph.dsdSize * i + 39 + 8, 1); memcpy(sph.dsd[i].filename, sphPtr + 836 + mph.dsdSize * i + 49 + 10, 62); sph.dsd[i].dsOffset = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 123 + 0, '=') + 1); sph.dsd[i].dsSize = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 162 + 0, '=') + 1); sph.dsd[i].numDsr = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 199 + 0, '=') + 1); sph.dsd[i].dsrSize = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 219 + 0, '=') + 1); /* write out a few things */ if (printSphIfZero == 0) { printf("%s%d%s%.28s\n", "dsd[ ", i, " ].dsName: ", sph.dsd[i].dsName); printf("%s%d%s%.1s\n", "dsd[ ", i, " ].dsType: ", sph.dsd[i].dsType); printf("%s%d%s%.62s\n", "dsd[ ", i, " ].filename: ", sph.dsd[i].filename); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsOffset: ", sph.dsd[i].dsOffset); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsSize: ", sph.dsd[i].dsSize); printf("%s%d%s%d\n", "dsd[ ", i, " ].numDsr: ", sph.dsd[i].numDsr); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsrSize: ", sph.dsd[i].dsrSize); } } } if (printSphIfZero == 0) { printf("\n"); } return sph; } /* end readSph */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ struct sphAuxStruct readSphAux(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph) { struct sphAuxStruct sph; int i; memcpy(sph.sphDescriptor, sphPtr + 0 + 16, 28); memcpy(sph.spare1, sphPtr + 46 + 0, 51); if (printSphIfZero == 0) { printf("%s%.28s\n", "sphDescriptor: ", sph.sphDescriptor); printf("%s%.51s\n", "spare1: ", sph.spare1); } for (i = 0; i < mph.numDsd; i++) { /* extract DSDs from SPH */ memcpy(sph.dsd[i].dsName, sphPtr + 98 + mph.dsdSize * i + 0 + 9, 28); memcpy(sph.dsd[i].dsType, sphPtr + 98 + mph.dsdSize * i + 39 + 8, 1); memcpy(sph.dsd[i].filename, sphPtr + 98 + mph.dsdSize * i + 49 + 10, 62); sph.dsd[i].dsOffset = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 123 + 0, '=') + 1); sph.dsd[i].dsSize = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 162 + 0, '=') + 1); sph.dsd[i].numDsr = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 199 + 0, '=') + 1); sph.dsd[i].dsrSize = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 219 + 0, '=') + 1); /* write out a few things */ if (printSphIfZero == 0) { printf("%s%d%s%.28s\n", "dsd[ ", i, " ].dsName: ", sph.dsd[i].dsName); printf("%s%d%s%.1s\n", "dsd[ ", i, " ].dsType: ", sph.dsd[i].dsType); printf("%s%d%s%.62s\n", "dsd[ ", i, " ].filename: ", sph.dsd[i].filename); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsOffset: ", sph.dsd[i].dsOffset); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsSize: ", sph.dsd[i].dsSize); printf("%s%d%s%d\n", "dsd[ ", i, " ].numDsr: ", sph.dsd[i].numDsr); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsrSize: ", sph.dsd[i].dsrSize); } } if (printSphIfZero == 0) { printf("\n"); } return sph; } /* end readSphAux */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ void printInsGads(const struct insGadsStruct insGads) { int i; printf("%s%d\n", "dsrTime.days: ", insGads.dsrTime.days); printf("%s%d\n", "dsrTime.seconds: ", insGads.dsrTime.seconds); printf("%s%d\n", "dsrTime.microseconds: ", insGads.dsrTime.microseconds); printf("%s%d\n", "dsrLength: ", insGads.dsrLength); printf("%s%.9g\n", "radarFrequency: ", insGads.radarFrequency); printf("%s%.9g\n", "sampRate: ", insGads.sampRate); printf("%s%.9g\n", "offsetFreq: ", insGads.offsetFreq); printf("%s%.9g\n", "rangeGateBias: ", insGads.rangeGateBias); printf("%s%.9g\n", "rangeGateBiasGm: ", insGads.rangeGateBiasGm); printf("%s%f\n", "refElevAngleIs1: ", insGads.refElevAngleIs1); printf("%s%f\n", "refElevAngleIs2: ", insGads.refElevAngleIs2); printf("%s%f\n", "refElevAngleIs3Ss2: ", insGads.refElevAngleIs3Ss2); printf("%s%f\n", "refElevAngleIs4Ss3: ", insGads.refElevAngleIs4Ss3); printf("%s%f\n", "refElevAngleIs5Ss4: ", insGads.refElevAngleIs5Ss4); printf("%s%f\n", "refElevAngleIs6Ss5: ", insGads.refElevAngleIs6Ss5); printf("%s%f\n", "refElevAngleIs7: ", insGads.refElevAngleIs7); printf("%s%f\n", "refElevAngleSs1: ", insGads.refElevAngleSs1); printf("%s%.9g\n", "swstCalP2: ", insGads.swstCalP2); printf("%s%u\n", "perCalWindowsEc: ", insGads.perCalWindowsEc); printf("%s%u\n", "perCalWindowsMs: ", insGads.perCalWindowsMs); printf("%s%u\n", "initCalBeamSetWv: ", insGads.initCalBeamSetWv); printf("%s%u\n", "beamSetEc: ", insGads.beamSetEc); printf("%s%u\n", "beamSetMs: ", insGads.beamSetMs); printf("%s%u\n", "mEc: ", insGads.mEc); printf(".\n"); printf(".\n"); printf(".\n"); for (i = 0; i < 4096; i++) printf("%s%4d%s%15f %15f %15f\n", "fbaq4LutI,Q,NoAdc[ ", i, " ]: ", insGads.fbaq4LutI[i], insGads.fbaq4LutQ[i], insGads.fbaq4NoAdc[i]); printf(".\n"); printf(".\n"); printf(".\n"); printf("\n"); /* exit( 0 ); */ return; } /* end printInsGads */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ /********************************************************** ** Function: byte_swap_InsGads ** ** Purpose: Convert the bytes of struct insGadsStruct for a little endian order machine ** ** Comment: struct testStruct should be redefined in the future! ** ** Author: Zhenhong Li at UCL ** ** Created: 17/02/2005 ** ** Modified: ** ;**********************************************************/ void byte_swap_InsGads(struct insGadsStruct *InsGads) { swap_endian_order(e_tid_long, &(*InsGads).dsrTime, 3); swap_endian_order(e_tid_ulong, &(*InsGads).dsrLength, 1); swap_endian_order(e_tid_float, &(*InsGads).radarFrequency, 1); swap_endian_order(e_tid_float, &(*InsGads).sampRate, 1); swap_endian_order(e_tid_float, &(*InsGads).offsetFreq, 1); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0TxH1, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0TxV1, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0TxH1a, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0TxV1a, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0RxH2, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0RxV2, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0H3, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseIm0V3, 64); swap_endian_order(e_tid_float, &(*InsGads).calPulseImTxH1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImTxV1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImTxH1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImTxV1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImRxH2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImRxV2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImH3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseImV3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApTxH1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApTxV1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApTxH1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApTxV1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApRxH2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApRxV2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApH3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseApV3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvTxH1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvTxV1, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvTxH1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvTxV1a, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvRxH2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvRxV2, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvH3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWvV3, 448); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsTxH1, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsTxV1, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsTxH1a, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsTxV1a, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsRxH2, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsRxV2, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsH3, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseWsV3, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmTxH1, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmTxV1, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmTxH1a, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmTxV1a, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmRxH2, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmRxV2, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmH3, 320); swap_endian_order(e_tid_float, &(*InsGads).calPulseGmV3, 320); swap_endian_order(e_tid_float, &(*InsGads).nomPulseIm, 63); swap_endian_order(e_tid_float, &(*InsGads).nomPulseAp, 63); swap_endian_order(e_tid_float, &(*InsGads).nomPulseWv, 63); swap_endian_order(e_tid_float, &(*InsGads).nomPulseWs, 45); swap_endian_order(e_tid_float, &(*InsGads).nomPulseGm, 45); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs1, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs2, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs3Ss2, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs4Ss3, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs5Ss4, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs6Ss5, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternIs7, 101); swap_endian_order(e_tid_float, &(*InsGads).azPatternSs1, 101); swap_endian_order(e_tid_float, &(*InsGads).rangeGateBias, 1); swap_endian_order(e_tid_float, &(*InsGads).rangeGateBiasGm, 1); swap_endian_order(e_tid_float, &(*InsGads).adcLutI, 255); swap_endian_order(e_tid_float, &(*InsGads).adcLutQ, 255); swap_endian_order(e_tid_float, &(*InsGads).full8LutI, 256); swap_endian_order(e_tid_float, &(*InsGads).full8LutQ, 256); swap_endian_order(e_tid_float, &(*InsGads).fbaq4LutI, 4096); swap_endian_order(e_tid_float, &(*InsGads).fbaq3LutI, 2048); swap_endian_order(e_tid_float, &(*InsGads).fbaq2LutI, 1024); swap_endian_order(e_tid_float, &(*InsGads).fbaq4LutQ, 4096); swap_endian_order(e_tid_float, &(*InsGads).fbaq3LutQ, 2048); swap_endian_order(e_tid_float, &(*InsGads).fbaq2LutQ, 1024); swap_endian_order(e_tid_float, &(*InsGads).fbaq4NoAdc, 4096); swap_endian_order(e_tid_float, &(*InsGads).fbaq3NoAdc, 2048); swap_endian_order(e_tid_float, &(*InsGads).fbaq2NoAdc, 1024); swap_endian_order(e_tid_float, &(*InsGads).smLutI, 16); swap_endian_order(e_tid_float, &(*InsGads).smLutQ, 16); swap_endian_order(e_tid_ushort, &(*InsGads).swathConfigIm, 28); swap_endian_order(e_tid_float, &(*InsGads).swathConfigIm.resampleFactor, 7); swap_endian_order(e_tid_ushort, &(*InsGads).swathConfigAp, 28); swap_endian_order(e_tid_float, &(*InsGads).swathConfigAp.resampleFactor, 7); swap_endian_order(e_tid_ushort, &(*InsGads).swathConfigWs, 28); swap_endian_order(e_tid_float, &(*InsGads).swathConfigWs.resampleFactor, 7); swap_endian_order(e_tid_ushort, &(*InsGads).swathConfigGm, 28); swap_endian_order(e_tid_float, &(*InsGads).swathConfigGm.resampleFactor, 7); swap_endian_order(e_tid_ushort, &(*InsGads).swathConfigWv, 28); swap_endian_order(e_tid_float, &(*InsGads).swathConfigWv.resampleFactor, 7); swap_endian_order(e_tid_ushort, &(*InsGads).perCalWindowsEc, 1); swap_endian_order(e_tid_ushort, &(*InsGads).perCalWindowsMs, 1); swap_endian_order(e_tid_ushort, &(*InsGads).swathIdIm, 14); swap_endian_order(e_tid_ushort, &(*InsGads).swathIdAp, 14); swap_endian_order(e_tid_ushort, &(*InsGads).swathIdWs, 14); swap_endian_order(e_tid_ushort, &(*InsGads).swathIdGm, 14); swap_endian_order(e_tid_ushort, &(*InsGads).swathIdWv, 14); swap_endian_order(e_tid_ushort, &(*InsGads).initCalBeamSetWv, 1); swap_endian_order(e_tid_ushort, &(*InsGads).beamSetEc, 1); swap_endian_order(e_tid_ushort, &(*InsGads).beamSetMs, 1); swap_endian_order(e_tid_ushort, &(*InsGads).calSeq, 32); swap_endian_order(e_tid_ushort, &(*InsGads).timelineIm, 28); swap_endian_order(e_tid_ushort, &(*InsGads).timelineAp, 28); swap_endian_order(e_tid_ushort, &(*InsGads).timelineWs, 28); swap_endian_order(e_tid_ushort, &(*InsGads).timelineGm, 28); swap_endian_order(e_tid_ushort, &(*InsGads).timelineWv, 28); swap_endian_order(e_tid_ushort, &(*InsGads).mEc, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs1, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs2, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs3Ss2, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs4Ss3, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs5Ss4, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs6Ss5, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleIs7, 1); swap_endian_order(e_tid_float, &(*InsGads).refElevAngleSs1, 1); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs1, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs2, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs3Ss2, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs4Ss3, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs5Ss4, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs6Ss5, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefIs7, 128); swap_endian_order(e_tid_float, &(*InsGads).calLoopRefSs1, 128); // struct testStruct should be redefined in the future. swap_endian_order(e_tid_float, &(*InsGads).im, 17); swap_endian_order(e_tid_float, &(*InsGads).ap, 17); swap_endian_order(e_tid_float, &(*InsGads).ws, 17); swap_endian_order(e_tid_float, &(*InsGads).gm, 17); swap_endian_order(e_tid_float, &(*InsGads).wv, 17); swap_endian_order(e_tid_float, &(*InsGads).swstCalP2, 1); } /********************************************************** ** Function: is_bigendian ** ** Purpose: Test whether it is a bigendian machine ** ** Return values: true: 1, false: 0 ** ** Comment: ** ** Author: Eric J Fielding at JPL ** ** Created: ** ** Modified: ** ;**********************************************************/ int is_bigendian() { int bigendian, littleendian, test; unsigned char t[4]; littleendian = 256; bigendian = 256 * 256; t[0] = 0; t[1] = 1; t[2] = 0; t[3] = 0; memcpy(&test, &t[0], 4); /* printf("test: %i\n",test); */ if (test == bigendian) return (1); if (test == littleendian) return (0); printf("Error in endian test, test= %i ********\n", test); return (-1); } /* * Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_short(short *buffer, uint number_of_swaps) { short *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = (short)(((*temp & 0x00ff) << 8) | ((*temp & 0xff00) >> 8)); } } /* Function: byte_swap_long.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_long(long *buffer, uint number_of_swaps) { long *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* ADDED THESE LINES TO TEST THE 4-BYTE INT TYPE ON 64 BIT */ /* Function: byte_swap_int.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_int(int *buffer, uint number_of_swaps) { int *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* Function: byte_swap_uint.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_uint(uint *buffer, uint number_of_swaps) { uint *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* ADDDED NEW LINES ABOVE */ /* ************************************************************************** */ /* Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_ushort(ushort *buffer, uint number_of_swaps) { byte_swap_short((short *)buffer, number_of_swaps); } /* * Function: byte_swap_ulong.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_ulong(ulong *buffer, uint number_of_swaps) { byte_swap_long((long *)buffer, number_of_swaps); } /* * Function: byte_swap_long.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_float(float *buffer, uint number_of_swaps) { byte_swap_int((int *)buffer, number_of_swaps); } /* Function: epr_swap_endian_order Access: public API Changelog: 2002/02/04 mp nitial version */ /** * Converts bytes for a little endian order machine * * @param field the pointer at data reading in * */ void swap_endian_order(EPR_EDataTypeId data_type_id, void *elems, uint num_elems) { switch (data_type_id) { case e_tid_uchar: case e_tid_char: case e_tid_string: /* no conversion required */ break; case e_tid_time: byte_swap_uint((uint *)elems, 3); break; case e_tid_spare: /* no conversion required */ break; case e_tid_ushort: byte_swap_ushort((ushort *)elems, num_elems); break; case e_tid_short: byte_swap_short((short *)elems, num_elems); break; case e_tid_ulong: byte_swap_uint((uint *)elems, num_elems); break; case e_tid_long: byte_swap_int((int *)elems, num_elems); break; case e_tid_float: byte_swap_float((float *)elems, num_elems); break; case e_tid_double: printf("swap_endian_order: DOUBLE type was not yet processed\n"); break; default: printf("swap_endian_order: unknown data type\n"); } } GMTSAR_V5.7/.svn/pristine/cd/cdf77fea7815190204fb47f74bcca9687aa356ea.svn-base000444 015705 000000 00000022042 13505462014 026122 0ustar00sandwellwheel000000 000000 /* * $Id: epr_field.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" /** * Creates the field information of the given record and returns the poiter at it. * * @param data_type_id the data type identifier * @param description the field description * @param field_name the field name * @param num_elems the number of field elements * @param num_bytes the number of bytes in each element * @param more_count the number of the element repetition * @param unit the unit descrimtion (name) * * @return the the pointer at the field information, or NULL if the file * it is not enough memory for some field_info element. */ EPR_SFieldInfo* epr_create_field_info(EPR_EDataTypeId data_type_id, char* description, char* field_name, uint num_elems, uint num_bytes, uint more_count, char* unit) { EPR_SFieldInfo* field_info = NULL; uint data_type_size; field_info = (EPR_SFieldInfo*) calloc(1, sizeof (EPR_SFieldInfo)); if (field_info == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_field_info: out of memory"); return NULL; } epr_assign_string(&field_info->name, field_name); if (field_info->name == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_field_info: out of memory"); return NULL; } if (description == NULL) { field_info->description = NULL; } else epr_assign_string(&field_info->description, description); if (unit == NULL) { field_info->unit = NULL; } else epr_assign_string(&field_info->unit, unit); data_type_size = epr_get_data_type_size(data_type_id); field_info->num_elems = num_elems; /* IMPORTANT !!!!it's one or the other !!!!*/ field_info->tot_size = num_elems * num_bytes * more_count; /*for the case data_type_size=num_bytes*/ /*this is not true for the case "spare" (1!=60)*/ /* field_info->tot_size = num_elems * data_type_size * more_count;*/ field_info->data_type_id = data_type_id; return field_info; } /** * Frees the memory allocated by the given 'field_info'. * *

After calling this function the give field_info pointer * should not be used anymore. * * @param field_info the field_info to be released */ void epr_free_field_info(EPR_SFieldInfo* field_info) { if (field_info == NULL) return; epr_free_string(field_info->name); field_info->name = NULL; epr_free_string(field_info->description); field_info->description = NULL; epr_free_string(field_info->unit); field_info->unit = NULL; field_info->num_elems = 0; field_info->tot_size = 0; field_info->data_type_id = 0; free(field_info); } /* Function: epr_create_field Access: public API Changelog: 2002/01/23 mp initial version */ /** * Creates a new field instance belongs to the given * record_info. * * @param the pointer at the field information. * must not be NULL * @return the new field instance * or NULL if an error occured. */ EPR_SField* epr_create_field(EPR_SFieldInfo* field_info) { EPR_SField* field = NULL; uint data_type_size = 0; field = (EPR_SField*) calloc(1, sizeof(EPR_SField)); if (field == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_field: out of memory"); return NULL; } field->magic = EPR_MAGIC_FIELD; data_type_size = epr_get_data_type_size(field_info->data_type_id); if (data_type_size == 0) { epr_set_err(e_err_illegal_data_type, "epr_create_field: illegal field_info data type identifier"); return NULL; } field->info = field_info; if (field_info->num_elems == 0) { free(field); epr_set_err(e_err_invalid_value, "epr_create_field: field_info->num_elems is zero"); return NULL; } if (field_info->data_type_id == e_tid_spare) { field->elems = calloc(field_info->tot_size, 1 /*byte*/); } else { if (field_info->data_type_id == e_tid_string) { /* Note that string always are considered as one single element, so we get the total number of characters from tot_size. Addidionally we reserve an extra character for the trailing zero (terminator), */ field->elems = calloc(field_info->tot_size + 1, sizeof (char)); } else { field->elems = calloc(field_info->num_elems, data_type_size); } } if (field->elems == NULL) { free(field); epr_set_err(e_err_out_of_memory, "epr_create_field: out of memory"); return NULL; } /* if (field->info->data_type_id == e_tid_string) { printf("string field: name=%s, num_elems=%d, tot_size=%d\n", field->info->name, field->info->num_elems, field->info->tot_size); } */ return field; } /** * Frees the memory allocated by the given 'field'. * *

After calling this function the give field pointer * should not be used anymore. * * @param field the field to be released */ void epr_free_field(EPR_SField* field) { if (field == NULL) return; /* Do NOT free field->info since many fields can share the same field->info! */ field->info = NULL; if (field->elems != NULL) { free(field->elems); field->elems = NULL; } free(field); } /** * Gets a full field from the given record. * *

The field is hier identified through the given name. *
It contains the field info and all corresponding values. * * @param record the record identifier, must not be NULL * @param field_name the the name of required field, must not be NULL. * * @return the field or NULL if an error occured. */ const EPR_SField* epr_get_field(const EPR_SRecord* record, const char* field_name) { EPR_SField* field; uint field_index; epr_clear_err(); if (record == NULL) { epr_set_err(e_err_invalid_record_name, "epr_get_field: record must not be NULL"); return NULL; } if (field_name == NULL) { epr_set_err(e_err_invalid_record_name, "epr_get_field: field_name must not be NULL"); return NULL; } for (field_index = 0; field_index < record->num_fields; field_index++) { field = record->fields[field_index]; if (strcmp(field_name, field->info->name) == 0) { return field; } } epr_set_err(e_err_illegal_arg, "epr_get_field: field not found"); return NULL; } uint epr_get_field_num_elems(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_num_elems: field-identifier must not be NULL"); return 0; } return field->info->num_elems; } const char* epr_get_field_name(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_name: field-identifier must not be NULL"); return NULL; } return field->info->name; } EPR_EDataTypeId epr_get_field_type(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_type: field-identifier must not be NULL"); return e_tid_unknown; } return field->info->data_type_id; } const char* epr_get_field_unit(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_unit: field-identifier must not be NULL"); return NULL; } return field->info->unit; } const char* epr_get_field_description(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_description: field-identifier must not be NULL"); return NULL; } return field->info->description; } GMTSAR_V5.7/.svn/pristine/cd/cdc868412ca70b9bb7d4459717390e0d086e2a8f.svn-base000444 015705 000000 00000013162 13505462014 025702 0ustar00sandwellwheel000000 000000 /* taken from soi.h */ #include #include #include #include #include #include #include #define SOL 299792456.0 #define PI 3.1415926535897932 #define PI2 6.2831853071795864 #define I2MAX 32767.0 #define I2SCALE 4.e6 #define TRUE 1 #define FALSE 0 #define RW 0666 #define MULT_FACT 1000.0 #define sgn(A) ((A) >= 0.0 ? 1.0 : -1.0) #define clipi2(A) (((A) > I2MAX) ? I2MAX : (((A) < -I2MAX) ? -I2MAX : A)) #define nint(x) (int)rint(x) #define ERS1 1 #define ERS2 2 #define RSAT 3 #define ENVS 4 #define ALOS 5 #define EXIT_FLAG 1 #define paka(p) \ { \ perror((p)); \ exit(EXIT_FLAG); \ } #define MALLOC(p, s) \ if (((p) = malloc(s)) == NULL) { \ paka("error: malloc() "); \ } #define NULL_DATA 15 #define NULL_INT -99999 #define NULL_DOUBLE -99999.9999 #define NULL_CHAR "XXXXXXXX" struct PRM { char input_file[256]; char SLC_file[256]; char out_amp_file[256]; char out_data_file[256]; char deskew[8]; char iqflip[8]; char offset_video[8]; char srm[8]; char ref_file[128]; char led_file[128]; char orbdir[8]; /* orbit direction A or D (ASCEND or DESCEND) - added by RJM*/ char lookdir[8]; /* look direction R or L (RIGHT or LEFT) */ char dtype[8]; /* SLC data type a-SCOMPLEX integer complex, c-FCOMPLEX float complex */ char date[16]; /* yymmdd format - skip first two digits of year - added by RJM*/ int debug_flag; int bytes_per_line; int good_bytes; int first_line; int num_patches; int first_sample; int num_valid_az; int st_rng_bin; int num_rng_bins; int chirp_ext; int nlooks; int rshift; int ashift; int fdc_ystrt; int fdc_strt; int rec_start; int rec_stop; int SC_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS */ int ref_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS */ int nrows; int num_lines; int SLC_format; /* 1 => complex ints (2 bytes) 2 => complex floats (4 bytes) */ double SC_clock_start; /* YYDDD.DDDD */ double SC_clock_stop; /* YYDDD.DDDD */ double icu_start; /* onboard clock counter */ double clock_start; /* DDD.DDDDDDDD - same as SC_clock_start but no YY so more precision */ double clock_stop; /* DDD.DDDDDDDD - same as SC_clock_stop but no YY so more precision */ double caltone; double RE; /*local earth eadius */ double rc; /* polar radius */ double ra; /* equatorial radius */ double vel; /* Equivalent SC velocity */ double ht; /* (SC_radius - RE) center */ double ht_start; /* (SC_radius - RE) start */ double ht_end; /* (SC_radius - RE) end */ double near_range; double far_range; double prf; double xmi; double xmq; double az_res; double fs; double chirp_slope; double pulsedur; double lambda; double rhww; double pctbw; double pctbwaz; double fd1; double fdd1; double fddd1; double delr; /* added RJM */ double yaw; /* added RJM 12/07*/ double SLC_scale; /* added XT 01/14 */ double sub_int_r; double sub_int_a; double sub_double; double stretch_r; double stretch_a; double a_stretch_r; double a_stretch_a; double baseline_start; double baseline_center; double baseline_end; double alpha_start; double alpha_center; double alpha_end; double bpara; /* parallel baseline - added by RJM */ double bperp; /* perpendicular baseline - added by RJM */ }; /* offset_video off_vid chirp_ext nextend ------------------------------- scnd_rng_mig srm Flip_iq iqflip reference_file ref_file rng_spec_wgt rhww rm_rng_band pctbw rm_az_band pctbwaz rng_samp_rate fs good_bytes_per_line good_bytes earth_radius RE SC_vel vel SC_height ht SC_height_start ht_start SC_height_end ht_end PRF prf I_mean xmi Q_mean xmq pulse_dur pulsedur radar_wavelength lambda rng_spec_wgt rhww */ int verbose; /* controls minimal level of output */ int debug; /* more output */ int roi; /* more output */ int swap; /* whether to swap bytes */ int quad_pol; /* quad polarization data */ int ALOS_format; /* AUIG: ALOS_format = 0 */ /* ERSDAC: ALOS_format = 1 */ /* ALOS2: ALOS_format =2 */ int force_slope; /* whether to set the slope */ int dopp; /* whether to calculate doppler */ int quiet_flag; /* reduce output */ int SAR_mode; /* 0 => high-res */ /* 1 => wide obs */ /* 2 => polarimetry */ /* from ALOS Product Format 3-2 */ int prefix_off; /* offset needed for ALOS-2 prefix size */ double forced_slope; /* value to set chirp_slope to */ double tbias; /* time bias for clock bias */ double rbias; /* range bias for near range corr */ double slc_fact; /* factor to convert float to int slc */ GMTSAR_V5.7/.svn/pristine/cd/cd993d31ebfe2e74bfac66fc89d8c2dbe7825362.svn-base000444 015705 000000 00000013475 13505462014 026306 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: David Sandwell * * (Scripps Institution of Oceanography) * * Date : 09/23/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE : EX made the code capable of reading long vectors of orbits * * * ***************************************************************************/ #include "PRM.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include #include #include #include // int pop_prm(struct PRM *, tree *, char *); int pop_led_pre(tree *, state_vector *, double, double); int write_orb(state_vector *sv, FILE *fp, int); double yds2ydf(state_vector); char *USAGE = "\n\nUsage: ext_orb_s1a.c name_of_prm name_of_orb_xml name_output\n" "\nExample: ext_orb_s1a.c S1A20140807.PRM " "S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944." "EOF output\n" "\nOutput: output.LED\n"; int main(int argc, char **argv) { FILE *XML_FILE, *INPUT_PRM, *OUTPUT_LED; char tmp_str[200]; struct PRM prm; tree *xml_tree; state_vector *sv; int ch, n = 0, nc = 0, nlmx = 0; double t1, t2; if (argc < 3) die(USAGE, ""); // find the number of lines and the maximum line length of the xml file if ((XML_FILE = fopen(argv[2], "r")) == NULL) die("Couldn't open xml file: \n", argv[2]); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } xml_tree = (struct tree *)malloc(5 * n * sizeof(struct tree)); sv = (struct state_vector *)malloc(n / 2 * sizeof(struct state_vector)); fclose(XML_FILE); if ((XML_FILE = fopen(argv[2], "r")) == NULL) die("Couldn't open xml file: \n", argv[2]); get_tree(XML_FILE, xml_tree, 1); // show_tree(xml_tree,0,0); fclose(XML_FILE); // get the prm if ((INPUT_PRM = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_sio_struct(INPUT_PRM, &prm); // fprintf(stderr,"%.12f %.12f\n",prm.SC_clock_start,prm.SC_clock_stop); t1 = prm.SC_clock_start - 10 * (prm.SC_clock_stop - prm.SC_clock_start); t2 = prm.SC_clock_stop + 10 * (prm.SC_clock_stop - prm.SC_clock_start); // generate the LED file n = pop_led_pre(xml_tree, sv, t1, t2); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); // tmp_str = search_tree() write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); free(xml_tree); free(sv); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; if (n <= 0) { fprintf(stderr, "NO orbit coverage in the selected file...\n"); return (-1); } else { printf("Writing %d lines of precise orbit for the LED file...\n", n); } dt = round((sv[1].sec) * 1000.0) / 1000.0 - round((sv[0].sec) * 1000.0) / 1000.0; // printf("%f,%f\n",sv[1].sec,sv[0].sec); if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.6lf %.3lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led_pre(tree *xml_tree, state_vector *sv, double t1, double t2) { int i, count, num = 0; char tmp_c[200], tmp_y[200]; double tmp_d, tmp_t; state_vector tmp_sv; search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); // printf("Reading %d lines from precise orbit...\n",count); for (i = 0; i < count; i++) { search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/UTC/", tmp_c, 2, 4, i + 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/UTC/", tmp_c, 1, 4, i + 1); strasign(tmp_y, tmp_c, 4, 7); tmp_sv.yr = (int)(str2double(tmp_y)); tmp_sv.jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); tmp_sv.sec = (tmp_d - trunc(tmp_d)) * 86400; tmp_t = yds2ydf(tmp_sv); if (tmp_t < t1 || tmp_t > t2) { continue; } else { sv[num].yr = tmp_sv.yr; sv[num].jd = tmp_sv.jd; sv[num].sec = tmp_sv.sec; search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/X/", tmp_c, 1, 4, i + 1); sv[num].x = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/Y/", tmp_c, 1, 4, i + 1); sv[num].y = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/Z/", tmp_c, 1, 4, i + 1); sv[num].z = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/VX/", tmp_c, 1, 4, i + 1); sv[num].vx = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/VY/", tmp_c, 1, 4, i + 1); sv[num].vy = str2double(tmp_c); search_tree(xml_tree, "/Earth_Explorer_File/Data_Block/List_of_OSVs/OSV/VZ/", tmp_c, 1, 4, i + 1); sv[num].vz = str2double(tmp_c); num++; } } return (num); } double yds2ydf(state_vector s) { // convert year, day, sec to year, day, fraction of day double t = 0; t = t + (double)s.yr * 1000; t = t + (double)s.jd; t = t + (double)s.sec / 86400.; return (t); } GMTSAR_V5.7/.svn/pristine/ea/eac09d8cd3ac420ffc1a88762e0a010b212ecd6d.svn-base000444 015705 000000 00000000570 13505462014 026214 0ustar00sandwellwheel000000 000000 include ../../../config.mk INCLUDES = -I../include -I$(GMTSARHOME)/gmtsar $(GMT_INC) CLIBS = -L../lib -lxmlC $(GMTSAR) $(GMT_LIB) $(LALIBS) -lm spectral_diversity: spectral_diversity.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ spectral_diversity.o $(CLIBS) all: spectral_diversity install: $(INSTALL) spectral_diversity $(bindir) clean: rm -f *.o spectral_diversity tags core GMTSAR_V5.7/.svn/pristine/ea/ea127034c3ea6e47bc228595366eb8ac62d19dcd.svn-base000444 015705 000000 00000003405 13505462013 026025 0ustar00sandwellwheel000000 000000 /* $Id: utils_complex.c 39 2013-04-07 00:49:34Z pwessel $ */ #include "gmtsar.h" #include "lib_functions.h" /*--------------------------------------------------------------*/ /* read i2 SLC complex data */ /* SLCfile - SLC file */ /* name - name of SLC_file */ /* sdata - input i2 data */ /* cdata - output complex data (float) */ /* xdim - length of row */ /* */ int read_SLC_short2float(FILE *SLCfile, char *name, short *sdata, fcomplex *cdata, int xdim, int psize, double dfact) { long k; if (fread(sdata, 2 * sizeof(short), psize * xdim, SLCfile) != (size_t)(psize * xdim)) die("error reading SLC file", name); for (k = 0; k < psize * xdim; k++) { if (sdata[2 * k] == 0 && sdata[2 * k + 1] == 0) sdata[2 * k] = 1; cdata[k].r = (float)dfact * sdata[2 * k]; cdata[k].i = (float)dfact * sdata[2 * k + 1]; } return (EXIT_SUCCESS); } /*---------------------------------------------------------------*/ /*--------------------------------------------------------------*/ /* read i2 SLC complex data */ /* SLCfile - SLC file */ /* name - name of SLC_file */ /* sdata - input i2 data */ /* cdata - output complex data (double) */ /* xdim - length of row */ /* */ int read_SLC_short2double(FILE *SLCfile, char *name, short *sdata, dcomplex *cdata, int xdim, int psize, double dfact) { long k; if (fread(sdata, 2 * sizeof(short), psize * xdim, SLCfile) != (size_t)(psize * xdim)) die("error reading SLC file", name); for (k = 0; k < psize * xdim; k++) { if (sdata[2 * k] == 0 && sdata[2 * k + 1] == 0) sdata[2 * k] = 1; cdata[k].r = (double)dfact * sdata[2 * k]; cdata[k].i = (double)dfact * sdata[2 * k + 1]; } return (EXIT_SUCCESS); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/ea/eae56735bb6d9587cfd33413c870f336fddae041.svn-base000444 015705 000000 00000010525 13505462013 026036 0ustar00sandwellwheel000000 000000 /* $Id: lib_functions.h 39 2013-04-07 00:49:34Z pwessel $ */ /* include files to define sarleader structure */ #ifndef LIB_FUNCTIONS_H #define LIB_FUNCTIONS_H #include "sarleader_ALOS.h" #include "sarleader_fdr.h" #include "sfd_complex.h" #include "xcorr.h" #include "PRM.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* function prototypes */ void null_sio_struct(struct PRM *); void get_sio_struct(FILE *, struct PRM *); void put_sio_struct(struct PRM, FILE *); void get_string(char *, char *, char *, char *); void get_int(char *, char *, char *, int *); void get_double(char *, char *, char *, double *); void ALOS_ldr_prm(struct SAR_info, struct PRM *); int is_big_endian_(void); int is_big_endian__(void); void die(char *, char *); int get_prm(struct PRM *p, char *filename); void cross3(double *, double *, double *); void get_seconds(struct PRM, double *, double *); void plh2xyz(double *, double *, double, double); void xyz2plh(double *, double *, double, double); void find_unit_vector(double *, double *); double find_length(double *); double find_distance(double *, double *); double find_distance3(double, double, double, double, double, double); int geo2latlon(double *, double *, struct PRM); void geoxyz(double, double, double, double *, double *); int spline_(int *istart, int *nn, double *x, double *u, double *s, double *a); int evals_(int *istart, double *y, int *nn, double *x, double *u, double *s, double *eval); int find_fft_length(int n); void aastretch(fcomplex **fdata, int ipatch, int nrows, int num_valid_az, int num_rng_bins, float coef); void acpatch(void *API, fcomplex **data, int nrows, double delr, double fd, double fdd, double fddd); void conv2d(float *rdat, int *ni, int *nj, float *filt, int *nif, int *njf, float *fdat, int *ic, int *jc, float *rnorm); void do_freq_corr(void *API, struct xcorr *xc, int iloc); void do_time_corr(struct xcorr *xc, int iloc); double calc_time_corr(struct xcorr *xc, int ioff, int joff); int fft_bins(int num); void fft_interpolate_1d(void *API, struct FCOMPLEX *in, int N, struct FCOMPLEX *out, int ifactor); void fft_interpolate_2d(void *API, struct FCOMPLEX *in, int N1, int M1, struct FCOMPLEX *out, int N, int M, int ifactor); void print_prm_params(struct PRM p1, struct PRM p2); void fix_prm_params(struct PRM *p, char *s); void get_locations(struct xcorr *xc); void get_params(FILE *fh); void do_highres_corr(void *API, struct xcorr *xc, int iloc); void intp_coef(int nfilter, float *xintp); void print_params(struct xcorr *xc); void set_defaults(struct xcorr *xc); void parse_command_line(int na, char **a, struct xcorr *xc, int *nfiles, int *input_flag, char *USAGE); void handle_prm(void *, char **argv, struct xcorr *xc, int nfiles); void print_results(struct xcorr *xc, int iloc); void print_complex(struct FCOMPLEX *a, int ny, int nx, int real_flag); void print_float(float *a, int ny, int nx); void print_double(double *a, int ny, int nx); void print_int(int *a, int ny, int nx); void radopp(double *fd, double *fdd, double *fddd, double r, double del); void read_complex_short(FILE *f, int *d, int iy, int jx, int npx, int npy, int nx); void read_real_float(FILE *f, int *d, int iy, int jx, int npx, int npy, int nx); void read_data(struct xcorr xc); void read_complex_short2float(FILE *f, float *d, int iy, int jx, int npx, int npy, int nx); void read_optional_args(void *API, int argc, char **argv, struct PRM *tp, int *topoflag, struct PRM *mp, int *modelflag); void read_xcorr_data(struct xcorr *xc, int iloc); void rmpatch(fcomplex **data, int nrows, double delr, double fd, double fdd, double fddd); void rng_cmp(void *API, int ranfft, fcomplex *data, fcomplex *ref); void rng_ref(void *API, int ranfft, float delr, fcomplex *ref1); void rng_filter(void *API, fcomplex *cin, int nffti, fcomplex *cout); void shift(void *API, int ranfft, fcomplex *data, double shift); int trans_col(void *API, int xnum, int ynum, fcomplex **data); int read_SLC_short2float(FILE *SLCfile, char *name, short *sdata, fcomplex *cdata, int xdim, int psize, double dfact); int read_SLC_short2double(FILE *SLCfile, char *name, short *sdata, dcomplex *cdata, int xdim, int psize, double dfact); void handle_input(char *, struct xcorr *); void read_params(struct xcorr *, FILE *); void make_mask(struct xcorr *); void do_highres(struct xcorr *, int); void allocate_arrays(struct xcorr *); char *trimwhitespace(char *str); #endif /* LIB_FUNCTIONS_H */ GMTSAR_V5.7/.svn/pristine/c4/c406ed43a476f3b9b31cf30300bf1f40ae0a91e1.svn-base000444 015705 000000 00000006577 13505462013 025725 0ustar00sandwellwheel000000 000000 .TH ERS_BASELINE l "05 MAR 2000, Copyright 1997 David Sandwell" " " "SIOSAR Baseline Calculator" .SH NAME ers_baseline \- calculates baseline parameters from a precise ERS-1/2 orbit .SH SYNOPSIS .B ers_baseline .I ref_t0 ref_tf ref# rep_t0 rep_tf rep# xt yt zt .SH DESCRIPTION The .B ers_baseline Command reads start-time and stop-time of reference and repeat ERS-1/2 frames. Precise orbit information, stored in ODR files, is used to calculate the position of the baseline between the reference and repeat orbits at the start and end of the frame. The program returns the following information needed for the SAR processor as well as for interferometry: .sp .br earth_radius - radius of ellipse beneath repeat orbit (m) .br sc_height - height of satellite above ellipse (m) .br sc_velocity - equivalent velocity for SAR processor (m/s) .br baseline_start- length of baseline (m) at start of frame .br alpha_start - baseline alpha (deg) at start of frame .br baseline_end - length of baseline (m) at end of frame .br alpha_end - baseline alpha (deg) at end of frame .br xshift - number of range cells to allign rep. to ref. .br yshift - number of echos to allign rep. to ref. .br (Note that if the reference and repeat times are the same then only the relevant part of the information is returned.) .br .SH INPUT .TP 10 .I ref_t0 starting time of reference frame in format YYYYDDD.DD .TP 10 .I ref_tf ending time of reference frame in format YYYYDDD.DD .TP 10 .I ref# spacecraft number of reference (1)-ERS-1 (2)-ERS2 .TP 10 .I rep_t0 starting time of repeat frame in format YYYYDDD.DD .TP 10 .I rep_tf ending time of repeat frame in format YYYYDDD.DD .TP 10 .I rep# spacecraft number of repeat (1)-ERS-1 (2)-ERS2 .sp .SH EXAMPLE Compute orbit parameters for an interferogram spanning the Landers 1992. .br .sp %ers_baseline 1992220.7697722 1992220.7699099 1 1992115.7695606 1992115.7696984 1 .br .sp ref_clock_start = 1992220.7697721999 .br ref_clock_stop = 1992220.7699098999 .br ref_identity = 1 .br SC_clock_start = 1992115.7695605999 .br SC_clock_stop = 1992115.7696984001 .br SC_identity = 1 .br earth_radius = 6371413.7408 .br SC_height = 788146.89 .br SC_vel = 7124.7584 .br yshift = 61 .br baseline_start = 150.588 .br baseline_end = 146.081 .br alpha_start = 153.530 .br alpha_end = 152.028 .br B_parallel = -109.18 .br B_perpendicular = -103.72 .br xshift = 13 .br .sp Note the two SAR frames reach the reference point at slightly different times corresponding to an along-track shift of 61.5 echos. Also note the baseline (B_start = 150.588 m, B_end =146.081, alpha_start = 153.530deg, alpha_end = 152.028deg ) closely match the values published in Zebker et al., 1994 (B = 146.1 m, alpha = -152 deg). .br .sp .SH SEE ALSO .B getorb software and precise orbit files were provided by Remko Scharroo (remko.scharroo@lr.tudelft.nl). For more up-to-date information on this package and the DUT orbits, netsurf to: .br http://www.deos.tudelft.nl/ers/precorbs/ .sp .br .SH AUTHORS David T. Sandwell and Karen Watson, Scripps Institution of Oceanography .SH DIAGNOSTICS 11 NOV 1997 - bug fixed on computation of baselines .br 03 MAR 2000 - fixed Y2K bugs and expanded year to YYYY GMTSAR_V5.7/.svn/pristine/c4/c4520ee8b21674c560c644eff31bd810704e52e5.svn-base000444 015705 000000 00005622711 13505462014 025535 0ustar00sandwellwheel000000 000000 S1 HH 17.14 22.7 0.05 1.934e+10 1.092e+10 2.119e+10 2.312e+10 2.324e+10 4.261e+10 2.411e+10 7.261e+10 2.213e+10 1.165e+11 1.547e+10 1.776e+11 2.088e+09 2.599e+11 -2.033e+10 3.675e+11 -5.426e+10 5.046e+11 -1.025e+11 6.761e+11 -1.682e+11 8.872e+11 -2.545e+11 1.143e+12 -3.650e+11 1.449e+12 -5.036e+11 1.811e+12 -6.739e+11 2.235e+12 -8.811e+11 2.728e+12 -1.129e+12 3.297e+12 -1.421e+12 3.946e+12 -1.762e+12 4.681e+12 -2.157e+12 5.509e+12 -2.610e+12 6.435e+12 -3.123e+12 7.466e+12 -3.703e+12 8.607e+12 -4.352e+12 9.861e+12 -5.074e+12 1.123e+13 -5.873e+12 1.273e+13 -6.751e+12 1.436e+13 -7.712e+12 1.611e+13 -8.757e+12 1.800e+13 -9.889e+12 2.003e+13 -1.111e+13 2.219e+13 -1.242e+13 2.448e+13 -1.381e+13 2.692e+13 -1.530e+13 2.948e+13 -1.687e+13 3.219e+13 -1.853e+13 3.502e+13 -2.027e+13 3.799e+13 -2.209e+13 4.108e+13 -2.399e+13 4.428e+13 -2.597e+13 4.760e+13 -2.801e+13 5.103e+13 -3.012e+13 5.456e+13 -3.229e+13 5.818e+13 -3.450e+13 6.188e+13 -3.677e+13 6.566e+13 -3.907e+13 6.950e+13 -4.141e+13 7.340e+13 -4.376e+13 7.734e+13 -4.613e+13 8.131e+13 -4.851e+13 8.531e+13 -5.089e+13 8.932e+13 -5.325e+13 9.333e+13 -5.560e+13 9.733e+13 -5.792e+13 1.013e+14 -6.020e+13 1.052e+14 -6.243e+13 1.091e+14 -6.461e+13 1.130e+14 -6.673e+13 1.168e+14 -6.877e+13 1.205e+14 -7.074e+13 1.241e+14 -7.262e+13 1.276e+14 -7.442e+13 1.311e+14 -7.613e+13 1.344e+14 -7.772e+13 1.376e+14 -7.922e+13 1.407e+14 -8.060e+13 1.437e+14 -8.186e+13 1.466e+14 -8.301e+13 1.494e+14 -8.403e+13 1.520e+14 -8.493e+13 1.545e+14 -8.571e+13 1.568e+14 -8.637e+13 1.591e+14 -8.690e+13 1.612e+14 -8.732e+13 1.631e+14 -8.761e+13 1.650e+14 -8.779e+13 1.668e+14 -8.785e+13 1.684e+14 -8.781e+13 1.699e+14 -8.766e+13 1.714e+14 -8.741e+13 1.727e+14 -8.706e+13 1.740e+14 -8.663e+13 1.752e+14 -8.611e+13 1.763e+14 -8.551e+13 1.773e+14 -8.483e+13 1.783e+14 -8.410e+13 1.793e+14 -8.330e+13 1.802e+14 -8.244e+13 1.811e+14 -8.154e+13 1.820e+14 -8.060e+13 1.829e+14 -7.962e+13 1.838e+14 -7.862e+13 1.846e+14 -7.759e+13 1.855e+14 -7.654e+13 1.865e+14 -7.549e+13 1.874e+14 -7.443e+13 1.884e+14 -7.337e+13 1.895e+14 -7.231e+13 1.906e+14 -7.126e+13 1.918e+14 -7.023e+13 1.930e+14 -6.923e+13 1.944e+14 -6.827e+13 1.958e+14 -6.736e+13 1.973e+14 -6.647e+13 1.990e+14 -6.562e+13 2.007e+14 -6.481e+13 2.025e+14 -6.403e+13 2.044e+14 -6.330e+13 2.064e+14 -6.262e+13 2.085e+14 -6.198e+13 2.107e+14 -6.139e+13 2.130e+14 -6.086e+13 2.154e+14 -6.038e+13 2.179e+14 -5.996e+13 2.204e+14 -5.959e+13 2.231e+14 -5.928e+13 2.258e+14 -5.903e+13 2.286e+14 -5.885e+13 2.315e+14 -5.872e+13 2.344e+14 -5.865e+13 2.373e+14 -5.865e+13 2.403e+14 -5.871e+13 2.433e+14 -5.882e+13 2.464e+14 -5.900e+13 2.494e+14 -5.924e+13 2.524e+14 -5.954e+13 2.554e+14 -5.989e+13 2.584e+14 -6.030e+13 2.613e+14 -6.076e+13 2.641e+14 -6.127e+13 2.669e+14 -6.183e+13 2.695e+14 -6.244e+13 2.721e+14 -6.309e+13 2.745e+14 -6.378e+13 2.767e+14 -6.450e+13 2.788e+14 -6.525e+13 2.808e+14 -6.603e+13 2.825e+14 -6.683e+13 2.840e+14 -6.765e+13 2.853e+14 -6.848e+13 2.863e+14 -6.932e+13 2.871e+14 -7.017e+13 2.877e+14 -7.101e+13 2.881e+14 -7.184e+13 2.882e+14 -7.265e+13 2.879e+14 -7.345e+13 2.874e+14 -7.422e+13 2.865e+14 -7.495e+13 2.853e+14 -7.565e+13 2.838e+14 -7.630e+13 2.819e+14 -7.690e+13 2.797e+14 -7.744e+13 2.771e+14 -7.792e+13 2.742e+14 -7.834e+13 2.710e+14 -7.868e+13 2.674e+14 -7.894e+13 2.635e+14 -7.912e+13 2.592e+14 -7.921e+13 2.547e+14 -7.921e+13 2.498e+14 -7.911e+13 2.447e+14 -7.892e+13 2.393e+14 -7.863e+13 2.336e+14 -7.824e+13 2.277e+14 -7.775e+13 2.215e+14 -7.715e+13 2.152e+14 -7.645e+13 2.086e+14 -7.565e+13 2.019e+14 -7.475e+13 1.951e+14 -7.374e+13 1.881e+14 -7.264e+13 1.811e+14 -7.145e+13 1.739e+14 -7.016e+13 1.667e+14 -6.879e+13 1.595e+14 -6.734e+13 1.523e+14 -6.580e+13 1.452e+14 -6.420e+13 1.380e+14 -6.253e+13 1.309e+14 -6.080e+13 1.240e+14 -5.902e+13 1.171e+14 -5.719e+13 1.103e+14 -5.532e+13 1.037e+14 -5.341e+13 9.730e+13 -5.146e+13 9.103e+13 -4.950e+13 8.496e+13 -4.754e+13 7.909e+13 -4.556e+13 7.343e+13 -4.359e+13 6.798e+13 -4.163e+13 6.277e+13 -3.969e+13 5.779e+13 -3.777e+13 5.305e+13 -3.587e+13 4.856e+13 -3.401e+13 4.430e+13 -3.218e+13 4.029e+13 -3.040e+13 3.652e+13 -2.866e+13 3.298e+13 -2.698e+13 2.968e+13 -2.534e+13 2.662e+13 -2.377e+13 2.377e+13 -2.225e+13 2.115e+13 -2.079e+13 1.873e+13 -1.940e+13 1.651e+13 -1.807e+13 1.448e+13 -1.680e+13 1.264e+13 -1.560e+13 1.097e+13 -1.447e+13 9.461e+12 -1.340e+13 8.104e+12 -1.239e+13 6.888e+12 -1.144e+13 5.804e+12 -1.056e+13 4.841e+12 -9.732e+12 3.989e+12 -8.962e+12 3.238e+12 -8.247e+12 2.579e+12 -7.583e+12 2.004e+12 -6.968e+12 1.504e+12 -6.400e+12 1.072e+12 -5.874e+12 6.997e+11 -5.389e+12 3.812e+11 -4.941e+12 1.105e+11 -4.527e+12 -1.180e+11 -4.145e+12 -3.089e+11 -3.792e+12 -4.665e+11 -3.466e+12 -5.951e+11 -3.164e+12 -6.975e+11 -2.884e+12 -7.768e+11 -2.624e+12 -8.354e+11 -2.382e+12 -8.757e+11 -2.157e+12 -8.997e+11 -1.948e+12 -9.093e+11 -1.754e+12 -9.062e+11 -1.573e+12 -8.920e+11 -1.405e+12 -8.680e+11 -1.249e+12 -8.358e+11 -1.105e+12 -7.966e+11 -9.720e+11 -7.517e+11 -8.497e+11 -7.023e+11 -7.377e+11 -6.497e+11 -6.354e+11 -5.947e+11 -5.427e+11 -5.386e+11 -4.590e+11 -4.823e+11 -3.840e+11 -4.266e+11 -3.173e+11 -3.724e+11 -2.585e+11 -3.204e+11 -2.072e+11 -2.712e+11 -1.628e+11 -2.254e+11 -1.250e+11 -1.834e+11 -9.332e+10 -1.456e+11 -6.720e+10 -1.121e+11 -4.619e+10 -8.310e+10 -2.977e+10 -5.870e+10 -1.748e+10 -3.883e+10 -8.818e+09 -2.339e+10 -3.290e+09 -1.217e+10 -3.972e+08 -4.940e+09 6.653e+08 -1.334e+09 1.869e+09 4.961e+08 4.456e+09 3.479e+09 8.263e+09 8.714e+09 1.287e+10 1.601e+10 1.796e+10 2.497e+10 2.324e+10 3.516e+10 2.851e+10 4.618e+10 3.355e+10 5.766e+10 3.821e+10 6.920e+10 4.237e+10 8.051e+10 4.591e+10 9.125e+10 4.878e+10 1.012e+11 5.093e+10 1.101e+11 5.234e+10 1.178e+11 5.303e+10 1.241e+11 5.302e+10 1.291e+11 5.234e+10 1.325e+11 5.107e+10 1.345e+11 4.925e+10 1.350e+11 4.696e+10 1.341e+11 4.429e+10 1.319e+11 4.130e+10 1.285e+11 3.808e+10 1.240e+11 3.471e+10 1.186e+11 3.126e+10 1.123e+11 2.780e+10 1.054e+11 2.439e+10 9.806e+10 2.109e+10 9.036e+10 1.795e+10 8.249e+10 1.501e+10 7.458e+10 1.228e+10 6.676e+10 9.813e+09 5.915e+10 7.607e+09 5.185e+10 5.671e+09 4.493e+10 4.008e+09 3.848e+10 2.611e+09 3.253e+10 1.465e+09 2.713e+10 5.581e+08 2.231e+10 -1.325e+08 1.805e+10 -6.305e+08 1.435e+10 -9.601e+08 1.119e+10 -1.148e+09 8.551e+09 -1.222e+09 6.377e+09 -1.208e+09 4.633e+09 -1.129e+09 3.267e+09 -1.010e+09 2.224e+09 -9.016e+08 1.451e+09 -7.393e+08 9.097e+08 -5.990e+08 5.340e+08 -4.754e+08 2.865e+08 -3.703e+08 1.289e+08 -2.814e+08 3.228e+07 -2.045e+08 -2.295e+07 -1.363e+08 -4.864e+07 -7.656e+07 -5.219e+07 -2.959e+07 -4.094e+07 8.231e+05 -2.592e+07 2.912e+07 -1.855e+07 9.677e+07 -3.891e+06 2.324e+08 5.033e+07 4.553e+08 1.732e+08 7.829e+08 3.936e+08 1.233e+09 7.421e+08 1.821e+09 1.250e+09 2.561e+09 1.948e+09 3.464e+09 2.864e+09 4.541e+09 4.027e+09 5.795e+09 5.458e+09 7.229e+09 7.176e+09 8.844e+09 9.197e+09 1.063e+10 1.152e+10 1.259e+10 1.416e+10 1.470e+10 1.711e+10 1.694e+10 2.035e+10 1.931e+10 2.387e+10 2.179e+10 2.765e+10 2.433e+10 3.164e+10 2.694e+10 3.583e+10 2.957e+10 4.017e+10 3.219e+10 4.461e+10 3.479e+10 4.911e+10 3.733e+10 5.362e+10 3.979e+10 5.808e+10 4.213e+10 6.245e+10 4.434e+10 6.667e+10 4.639e+10 7.069e+10 4.826e+10 7.447e+10 4.993e+10 7.797e+10 5.139e+10 8.114e+10 5.262e+10 8.394e+10 5.360e+10 8.634e+10 5.432e+10 8.830e+10 5.478e+10 8.981e+10 5.498e+10 9.085e+10 5.491e+10 9.140e+10 5.459e+10 9.148e+10 5.401e+10 9.107e+10 5.319e+10 9.020e+10 5.214e+10 8.887e+10 5.087e+10 8.711e+10 4.941e+10 8.495e+10 4.776e+10 8.241e+10 4.596e+10 7.953e+10 4.402e+10 7.636e+10 4.196e+10 7.292e+10 3.981e+10 6.927e+10 3.759e+10 6.545e+10 3.533e+10 6.150e+10 3.305e+10 5.747e+10 3.076e+10 5.340e+10 2.849e+10 4.933e+10 2.626e+10 4.531e+10 2.409e+10 4.136e+10 2.199e+10 3.752e+10 1.997e+10 3.382e+10 1.804e+10 3.029e+10 1.622e+10 2.695e+10 1.452e+10 2.380e+10 1.292e+10 2.088e+10 1.145e+10 1.817e+10 1.010e+10 1.569e+10 8.866e+09 1.345e+10 7.750e+09 1.142e+10 6.746e+09 9.622e+09 5.852e+09 8.032e+09 5.060e+09 6.643e+09 4.364e+09 5.443e+09 3.759e+09 4.418e+09 3.236e+09 3.552e+09 2.789e+09 2.828e+09 2.410e+09 2.230e+09 2.093e+09 1.743e+09 1.831e+09 1.351e+09 1.618e+09 1.039e+09 1.449e+09 7.933e+08 1.318e+09 6.012e+08 1.221e+09 4.520e+08 1.152e+09 3.364e+08 1.108e+09 2.473e+08 1.084e+09 1.793e+08 1.078e+09 1.286e+08 1.087e+09 9.278e+07 1.110e+09 7.040e+07 1.144e+09 6.064e+07 1.189e+09 6.318e+07 1.245e+09 7.796e+07 1.311e+09 1.052e+08 1.388e+09 1.451e+08 1.476e+09 1.982e+08 1.575e+09 2.650e+08 1.684e+09 3.459e+08 1.805e+09 4.415e+08 1.936e+09 5.521e+08 2.076e+09 6.780e+08 2.225e+09 8.188e+08 2.382e+09 9.744e+08 2.543e+09 1.144e+09 2.708e+09 1.325e+09 2.874e+09 1.518e+09 3.039e+09 1.718e+09 3.198e+09 1.925e+09 3.351e+09 2.135e+09 3.493e+09 2.344e+09 3.622e+09 2.549e+09 3.735e+09 2.747e+09 3.830e+09 2.934e+09 3.904e+09 3.106e+09 3.956e+09 3.260e+09 3.983e+09 3.393e+09 3.986e+09 3.502e+09 3.962e+09 3.586e+09 3.912e+09 3.643e+09 3.837e+09 3.671e+09 3.737e+09 3.671e+09 3.613e+09 3.642e+09 3.467e+09 3.584e+09 3.302e+09 3.500e+09 3.120e+09 3.390e+09 2.923e+09 3.257e+09 2.715e+09 3.103e+09 2.500e+09 2.932e+09 2.279e+09 2.746e+09 2.058e+09 2.548e+09 1.838e+09 2.343e+09 1.622e+09 2.133e+09 1.414e+09 1.921e+09 1.217e+09 1.712e+09 1.031e+09 1.507e+09 8.590e+08 1.310e+09 7.025e+08 1.123e+09 5.623e+08 9.480e+08 4.389e+08 7.864e+08 3.324e+08 6.398e+08 2.426e+08 5.089e+08 1.689e+08 3.940e+08 1.103e+08 2.955e+08 6.560e+07 2.130e+08 3.330e+07 1.459e+08 1.175e+07 9.345e+07 -9.396e+05 5.462e+07 -6.934e+06 2.808e+07 -8.988e+06 1.206e+07 -1.075e+07 2.972e+06 -1.477e+07 -4.963e+06 -2.065e+07 -1.627e+07 -2.659e+07 -3.228e+07 -3.102e+07 -5.275e+07 -3.270e+07 -7.707e+07 -3.062e+07 -1.048e+08 -2.382e+07 -1.358e+08 -1.128e+07 -1.702e+08 8.171e+06 -2.083e+08 3.605e+07 -2.511e+08 7.427e+07 -2.994e+08 1.252e+08 -3.543e+08 1.919e+08 -4.171e+08 2.779e+08 -4.892e+08 3.871e+08 -5.717e+08 5.241e+08 -6.661e+08 6.936e+08 -7.736e+08 9.007e+08 -8.955e+08 1.151e+09 -1.033e+09 1.449e+09 -1.188e+09 1.801e+09 -1.362e+09 2.211e+09 -1.556e+09 2.685e+09 -1.773e+09 3.227e+09 -2.014e+09 3.842e+09 -2.281e+09 4.534e+09 -2.578e+09 5.305e+09 -2.906e+09 6.159e+09 -3.267e+09 7.097e+09 -3.666e+09 8.121e+09 -4.103e+09 9.233e+09 -4.583e+09 1.043e+10 -5.107e+09 1.171e+10 -5.678e+09 1.308e+10 -6.299e+09 1.453e+10 -6.971e+09 1.605e+10 -7.695e+09 1.765e+10 -8.474e+09 1.931e+10 -9.309e+09 2.103e+10 -1.020e+10 2.281e+10 -1.114e+10 2.464e+10 -1.214e+10 2.650e+10 -1.319e+10 2.838e+10 -1.429e+10 3.029e+10 -1.544e+10 3.221e+10 -1.662e+10 3.412e+10 -1.785e+10 3.603e+10 -1.910e+10 3.790e+10 -2.038e+10 3.973e+10 -2.167e+10 4.151e+10 -2.297e+10 4.322e+10 -2.426e+10 4.485e+10 -2.554e+10 4.640e+10 -2.679e+10 4.783e+10 -2.800e+10 4.915e+10 -2.916e+10 5.034e+10 -3.026e+10 5.139e+10 -3.127e+10 5.229e+10 -3.220e+10 5.303e+10 -3.302e+10 5.360e+10 -3.373e+10 5.399e+10 -3.430e+10 5.419e+10 -3.473e+10 5.421e+10 -3.501e+10 5.404e+10 -3.513e+10 5.366e+10 -3.507e+10 5.309e+10 -3.484e+10 5.233e+10 -3.443e+10 5.137e+10 -3.383e+10 5.022e+10 -3.304e+10 4.888e+10 -3.207e+10 4.737e+10 -3.092e+10 4.569e+10 -2.960e+10 4.385e+10 -2.811e+10 4.186e+10 -2.648e+10 3.975e+10 -2.471e+10 3.752e+10 -2.282e+10 3.519e+10 -2.083e+10 3.278e+10 -1.878e+10 3.031e+10 -1.667e+10 2.781e+10 -1.455e+10 2.529e+10 -1.244e+10 2.279e+10 -1.037e+10 2.033e+10 -8.374e+09 1.793e+10 -6.480e+09 1.564e+10 -4.718e+09 1.346e+10 -3.109e+09 1.145e+10 -1.674e+09 9.622e+09 -4.210e+08 8.015e+09 6.615e+08 6.655e+09 1.605e+09 5.551e+09 2.476e+09 4.684e+09 3.378e+09 3.999e+09 4.431e+09 3.401e+09 5.756e+09 2.783e+09 7.446e+09 2.040e+09 9.558e+09 1.089e+09 1.212e+10 -1.336e+08 1.515e+10 -1.672e+09 1.863e+10 -3.558e+09 2.256e+10 -5.814e+09 2.691e+10 -8.451e+09 3.166e+10 -1.148e+10 3.678e+10 -1.489e+10 4.223e+10 -1.869e+10 4.797e+10 -2.287e+10 5.396e+10 -2.741e+10 6.014e+10 -3.230e+10 6.647e+10 -3.751e+10 7.289e+10 -4.302e+10 7.934e+10 -4.881e+10 8.577e+10 -5.484e+10 9.211e+10 -6.108e+10 9.831e+10 -6.750e+10 1.043e+11 -7.405e+10 1.101e+11 -8.070e+10 1.155e+11 -8.741e+10 1.206e+11 -9.414e+10 1.252e+11 -1.008e+11 1.295e+11 -1.075e+11 1.332e+11 -1.140e+11 1.364e+11 -1.204e+11 1.390e+11 -1.266e+11 1.411e+11 -1.326e+11 1.426e+11 -1.383e+11 1.435e+11 -1.438e+11 1.437e+11 -1.489e+11 1.434e+11 -1.537e+11 1.424e+11 -1.581e+11 1.409e+11 -1.621e+11 1.387e+11 -1.657e+11 1.360e+11 -1.688e+11 1.328e+11 -1.716e+11 1.290e+11 -1.738e+11 1.247e+11 -1.756e+11 1.200e+11 -1.770e+11 1.149e+11 -1.779e+11 1.095e+11 -1.783e+11 1.037e+11 -1.782e+11 9.765e+10 -1.777e+11 9.138e+10 -1.768e+11 8.491e+10 -1.754e+11 7.832e+10 -1.736e+11 7.164e+10 -1.713e+11 6.491e+10 0.005 -51.282 -50.302 -49.323 -48.343 -47.414 -46.579 -45.831 -45.163 -44.571 -44.051 -43.598 -43.212 -42.888 -42.627 -42.426 -42.285 -42.204 -42.184 -42.224 -42.326 -42.491 -42.722 -43.021 -43.392 -43.839 -44.366 -44.982 -45.693 -46.510 -47.447 -48.519 -49.749 -51.167 -52.815 -54.755 -57.085 -59.976 -63.769 -69.353 -81.103 -78.834 -72.144 -69.813 -69.256 -69.501 -68.999 -66.292 -62.597 -59.162 -56.218 -53.707 -51.542 -49.654 -47.992 -46.518 -45.203 -44.027 -42.971 -42.024 -41.174 -40.414 -39.736 -39.135 -38.606 -38.146 -37.753 -37.423 -37.155 -36.947 -36.799 -36.711 -36.682 -36.714 -36.805 -36.959 -37.177 -37.460 -37.812 -38.235 -38.735 -39.316 -39.983 -40.744 -41.608 -42.585 -43.686 -44.927 -46.326 -47.906 -49.694 -51.727 -54.057 -56.768 -60.034 -64.261 -69.716 -69.639 -64.559 -59.642 -55.873 -52.782 -50.141 -47.835 -45.796 -43.979 -42.348 -40.881 -39.555 -38.357 -37.273 -36.293 -35.409 -34.614 -33.902 -33.269 -32.712 -32.227 -31.812 -31.466 -31.188 -30.978 -30.836 -30.764 -30.763 -30.835 -30.982 -31.210 -31.523 -31.927 -32.432 -33.047 -33.786 -34.666 -35.710 -36.949 -38.426 -40.205 -42.384 -45.127 -48.746 -53.911 -60.403 -62.792 -58.670 -57.331 -57.298 -55.256 -50.070 -44.969 -40.805 -37.357 -34.419 -31.858 -29.584 -27.538 -25.679 -23.975 -22.403 -20.944 -19.586 -18.316 -17.125 -16.005 -14.950 -13.954 -13.013 -12.122 -11.279 -10.479 -9.721 -9.002 -8.320 -7.673 -7.060 -6.479 -5.928 -5.407 -4.914 -4.449 -4.010 -3.597 -3.210 -2.846 -2.507 -2.190 -1.897 -1.626 -1.376 -1.149 -0.942 -0.757 -0.592 -0.448 -0.324 -0.220 -0.136 -0.072 -0.029 -0.004 0.000 -0.015 -0.050 -0.105 -0.179 -0.273 -0.388 -0.523 -0.679 -0.855 -1.052 -1.271 -1.511 -1.773 -2.058 -2.365 -2.696 -3.051 -3.430 -3.835 -4.265 -4.722 -5.207 -5.721 -6.265 -6.840 -7.447 -8.089 -8.766 -9.482 -10.238 -11.036 -11.881 -12.775 -13.722 -14.727 -15.796 -16.935 -18.153 -19.460 -20.867 -22.392 -24.056 -25.888 -27.930 -30.243 -32.927 -36.163 -40.333 -46.552 -57.906 -55.380 -48.108 -45.352 -44.195 -43.915 -44.231 -44.927 -45.630 -45.698 -44.691 -42.899 -40.901 -39.031 -37.390 -35.980 -34.778 -33.756 -32.890 -32.160 -31.551 -31.050 -30.647 -30.333 -30.103 -29.951 -29.872 -29.865 -29.926 -30.053 -30.246 -30.504 -30.828 -31.217 -31.672 -32.195 -32.789 -33.456 -34.201 -35.027 -35.940 -36.948 -38.059 -39.283 -40.634 -42.129 -43.786 -45.634 -47.707 -50.050 -52.722 -55.799 -59.329 -63.058 -65.652 -65.369 -62.999 -60.296 -57.721 -55.332 -53.148 -51.177 -49.413 -47.841 -46.446 -45.209 -44.116 -43.152 -42.306 -41.567 -40.926 -40.378 -39.914 -39.531 -39.225 -38.992 -38.830 -38.736 -38.709 -38.748 -38.853 -39.024 -39.261 -39.566 -39.940 -40.385 -40.903 -41.500 -42.178 -42.944 -43.803 -44.763 -45.833 -47.023 -48.345 -49.811 -51.431 -53.209 -55.132 -57.152 -59.156 -60.969 -62.434 -63.561 -64.542 -65.547 -66.383 -66.140 -64.160 -61.305 -58.481 -55.973 -53.792 -51.894 -50.233 -48.772 -47.479 -46.332 -45.312 -44.404 -43.596 -42.879 -42.246 -41.690 -41.205 -40.788 -40.434 -40.140 -39.905 -39.725 -39.599 -39.526 -39.504 -39.533 -39.613 -39.743 -39.924 -40.155 -40.437 -40.771 -41.159 -41.601 -42.100 -42.658 -43.277 -43.961 -44.714 -45.539 -46.443 -47.388 -48.334 -49.280 0 1 1.0 4353721066.7 S1 HV 17.14 22.7 0.05 2.187e+10 -8.616e+09 3.292e+10 -1.786e+09 4.976e+10 9.787e+09 7.391e+10 2.940e+10 1.067e+11 6.060e+10 1.492e+11 1.071e+11 2.028e+11 1.731e+11 2.689e+11 2.631e+11 3.484e+11 3.816e+11 4.427e+11 5.341e+11 5.531e+11 7.263e+11 6.804e+11 9.636e+11 8.259e+11 1.252e+12 9.908e+11 1.599e+12 1.175e+12 2.010e+12 1.381e+12 2.494e+12 1.609e+12 3.057e+12 1.858e+12 3.704e+12 2.130e+12 4.443e+12 2.425e+12 5.282e+12 2.742e+12 6.225e+12 3.082e+12 7.280e+12 3.445e+12 8.454e+12 3.830e+12 9.751e+12 4.237e+12 1.118e+13 4.665e+12 1.274e+13 5.114e+12 1.444e+13 5.582e+12 1.628e+13 6.068e+12 1.827e+13 6.571e+12 2.040e+13 7.090e+12 2.269e+13 7.623e+12 2.513e+13 8.169e+12 2.772e+13 8.725e+12 3.045e+13 9.291e+12 3.335e+13 9.864e+12 3.638e+13 1.044e+13 3.956e+13 1.102e+13 4.288e+13 1.160e+13 4.633e+13 1.218e+13 4.991e+13 1.276e+13 5.360e+13 1.333e+13 5.741e+13 1.389e+13 6.131e+13 1.445e+13 6.531e+13 1.499e+13 6.939e+13 1.552e+13 7.353e+13 1.604e+13 7.773e+13 1.654e+13 8.198e+13 1.703e+13 8.624e+13 1.749e+13 9.053e+13 1.794e+13 9.482e+13 1.837e+13 9.909e+13 1.879e+13 1.033e+14 1.918e+13 1.075e+14 1.956e+13 1.117e+14 1.992e+13 1.158e+14 2.026e+13 1.198e+14 2.059e+13 1.237e+14 2.091e+13 1.275e+14 2.121e+13 1.312e+14 2.150e+13 1.348e+14 2.178e+13 1.383e+14 2.206e+13 1.416e+14 2.233e+13 1.448e+14 2.260e+13 1.479e+14 2.286e+13 1.508e+14 2.313e+13 1.535e+14 2.340e+13 1.561e+14 2.368e+13 1.586e+14 2.396e+13 1.609e+14 2.426e+13 1.630e+14 2.456e+13 1.650e+14 2.488e+13 1.669e+14 2.521e+13 1.686e+14 2.556e+13 1.701e+14 2.593e+13 1.716e+14 2.631e+13 1.729e+14 2.672e+13 1.740e+14 2.715e+13 1.751e+14 2.760e+13 1.761e+14 2.808e+13 1.769e+14 2.858e+13 1.777e+14 2.910e+13 1.784e+14 2.965e+13 1.790e+14 3.023e+13 1.796e+14 3.083e+13 1.801e+14 3.146e+13 1.805e+14 3.211e+13 1.810e+14 3.280e+13 1.813e+14 3.350e+13 1.817e+14 3.424e+13 1.821e+14 3.500e+13 1.824e+14 3.579e+13 1.828e+14 3.660e+13 1.832e+14 3.743e+13 1.836e+14 3.830e+13 1.840e+14 3.918e+13 1.845e+14 4.009e+13 1.851e+14 4.103e+13 1.857e+14 4.198e+13 1.863e+14 4.295e+13 1.871e+14 4.395e+13 1.879e+14 4.496e+13 1.889e+14 4.598e+13 1.899e+14 4.703e+13 1.911e+14 4.809e+13 1.923e+14 4.916e+13 1.937e+14 5.025e+13 1.952e+14 5.135e+13 1.967e+14 5.245e+13 1.984e+14 5.356e+13 2.002e+14 5.467e+13 2.021e+14 5.578e+13 2.042e+14 5.689e+13 2.063e+14 5.799e+13 2.086e+14 5.907e+13 2.109e+14 6.015e+13 2.134e+14 6.120e+13 2.160e+14 6.222e+13 2.186e+14 6.322e+13 2.214e+14 6.418e+13 2.242e+14 6.510e+13 2.271e+14 6.598e+13 2.300e+14 6.680e+13 2.330e+14 6.756e+13 2.361e+14 6.826e+13 2.391e+14 6.889e+13 2.422e+14 6.944e+13 2.453e+14 6.991e+13 2.483e+14 7.029e+13 2.513e+14 7.057e+13 2.543e+14 7.075e+13 2.572e+14 7.083e+13 2.600e+14 7.079e+13 2.627e+14 7.065e+13 2.653e+14 7.038e+13 2.678e+14 6.998e+13 2.701e+14 6.947e+13 2.723e+14 6.882e+13 2.742e+14 6.804e+13 2.760e+14 6.715e+13 2.775e+14 6.614e+13 2.789e+14 6.501e+13 2.800e+14 6.376e+13 2.809e+14 6.238e+13 2.815e+14 6.087e+13 2.818e+14 5.925e+13 2.818e+14 5.751e+13 2.815e+14 5.567e+13 2.808e+14 5.372e+13 2.799e+14 5.168e+13 2.786e+14 4.955e+13 2.770e+14 4.734e+13 2.750e+14 4.505e+13 2.727e+14 4.271e+13 2.700e+14 4.031e+13 2.671e+14 3.786e+13 2.638e+14 3.538e+13 2.601e+14 3.288e+13 2.562e+14 3.035e+13 2.519e+14 2.783e+13 2.473e+14 2.530e+13 2.425e+14 2.279e+13 2.373e+14 2.029e+13 2.319e+14 1.783e+13 2.263e+14 1.541e+13 2.204e+14 1.304e+13 2.144e+14 1.072e+13 2.081e+14 8.460e+12 2.017e+14 6.276e+12 1.951e+14 4.169e+12 1.884e+14 2.145e+12 1.816e+14 2.112e+11 1.747e+14 -1.628e+12 1.677e+14 -3.369e+12 1.607e+14 -5.005e+12 1.537e+14 -6.535e+12 1.467e+14 -7.956e+12 1.398e+14 -9.264e+12 1.328e+14 -1.046e+13 1.260e+14 -1.154e+13 1.192e+14 -1.249e+13 1.126e+14 -1.333e+13 1.060e+14 -1.406e+13 9.967e+13 -1.467e+13 9.345e+13 -1.518e+13 8.741e+13 -1.559e+13 8.156e+13 -1.589e+13 7.591e+13 -1.610e+13 7.048e+13 -1.622e+13 6.526e+13 -1.625e+13 6.027e+13 -1.620e+13 5.551e+13 -1.608e+13 5.098e+13 -1.589e+13 4.670e+13 -1.563e+13 4.265e+13 -1.532e+13 3.884e+13 -1.495e+13 3.527e+13 -1.455e+13 3.193e+13 -1.410e+13 2.881e+13 -1.363e+13 2.592e+13 -1.313e+13 2.325e+13 -1.262e+13 2.078e+13 -1.209e+13 1.851e+13 -1.155e+13 1.643e+13 -1.101e+13 1.453e+13 -1.047e+13 1.280e+13 -9.935e+12 1.124e+13 -9.409e+12 9.821e+12 -8.896e+12 8.547e+12 -8.396e+12 7.402e+12 -7.913e+12 6.377e+12 -7.447e+12 5.463e+12 -7.001e+12 4.649e+12 -6.573e+12 3.927e+12 -6.166e+12 3.288e+12 -5.778e+12 2.723e+12 -5.410e+12 2.226e+12 -5.061e+12 1.790e+12 -4.730e+12 1.408e+12 -4.415e+12 1.075e+12 -4.118e+12 7.852e+11 -3.835e+12 5.339e+11 -3.567e+12 3.174e+11 -3.312e+12 1.323e+11 -3.068e+12 -2.487e+10 -2.836e+12 -1.567e+11 -2.615e+12 -2.656e+11 -2.404e+12 -3.539e+11 -2.202e+12 -4.235e+11 -2.010e+12 -4.762e+11 -1.827e+12 -5.139e+11 -1.652e+12 -5.380e+11 -1.487e+12 -5.499e+11 -1.331e+12 -5.513e+11 -1.184e+12 -5.434e+11 -1.047e+12 -5.275e+11 -9.182e+11 -5.050e+11 -7.989e+11 -4.770e+11 -6.890e+11 -4.448e+11 -5.882e+11 -4.094e+11 -4.966e+11 -3.719e+11 -4.141e+11 -3.333e+11 -3.404e+11 -2.945e+11 -2.753e+11 -2.563e+11 -2.184e+11 -2.193e+11 -1.694e+11 -1.843e+11 -1.278e+11 -1.517e+11 -9.319e+10 -1.220e+11 -6.497e+10 -9.534e+10 -4.263e+10 -7.212e+10 -2.559e+10 -5.240e+10 -1.321e+10 -3.621e+10 -4.856e+09 -2.356e+10 2.573e+08 -1.432e+10 3.181e+09 -8.247e+09 5.422e+09 -4.651e+09 8.481e+09 -2.086e+09 1.299e+10 9.288e+08 1.877e+10 5.138e+09 2.542e+10 1.066e+10 3.256e+10 1.732e+10 3.985e+10 2.487e+10 4.700e+10 3.301e+10 5.379e+10 4.146e+10 6.001e+10 4.992e+10 6.552e+10 5.817e+10 7.022e+10 6.597e+10 7.402e+10 7.314e+10 7.688e+10 7.952e+10 7.878e+10 8.499e+10 7.972e+10 8.945e+10 7.974e+10 9.286e+10 7.889e+10 9.517e+10 7.722e+10 9.641e+10 7.482e+10 9.657e+10 7.177e+10 9.573e+10 6.816e+10 9.393e+10 6.409e+10 9.128e+10 5.965e+10 8.784e+10 5.497e+10 8.375e+10 5.012e+10 7.909e+10 4.519e+10 7.400e+10 4.029e+10 6.857e+10 3.550e+10 6.293e+10 3.086e+10 5.718e+10 2.647e+10 5.143e+10 2.236e+10 4.577e+10 1.857e+10 4.027e+10 1.515e+10 3.503e+10 1.209e+10 3.009e+10 9.418e+09 2.551e+10 7.124e+09 2.132e+10 5.197e+09 1.755e+10 3.615e+09 1.421e+10 2.355e+09 1.130e+10 1.384e+09 8.810e+09 6.644e+08 6.720e+09 1.603e+08 5.008e+09 -1.680e+08 3.635e+09 -3.587e+08 2.563e+09 -4.561e+08 1.756e+09 -4.751e+08 1.163e+09 -4.469e+08 7.412e+08 -3.974e+08 4.533e+08 -3.398e+08 2.620e+08 -2.806e+08 1.376e+08 -2.210e+08 5.908e+07 -1.609e+08 1.313e+07 -1.017e+08 -8.362e+06 -4.868e+07 -1.187e+07 -1.129e+07 -5.503e+06 3.465e+06 1.736e+05 4.102e+07 1.257e+07 1.425e+08 6.171e+07 3.274e+08 1.714e+08 6.147e+08 3.677e+08 1.023e+09 6.788e+08 1.571e+09 1.134e+09 2.273e+09 1.760e+09 3.142e+09 2.585e+09 4.189e+09 3.634e+09 5.420e+09 4.925e+09 6.840e+09 6.476e+09 8.451e+09 8.300e+09 1.025e+10 1.040e+10 1.223e+10 1.278e+10 1.438e+10 1.543e+10 1.669e+10 1.835e+10 1.914e+10 2.151e+10 2.173e+10 2.490e+10 2.441e+10 2.849e+10 2.718e+10 3.226e+10 3.001e+10 3.616e+10 3.287e+10 4.016e+10 3.572e+10 4.423e+10 3.855e+10 4.832e+10 4.132e+10 5.238e+10 4.399e+10 5.638e+10 4.653e+10 6.028e+10 4.892e+10 6.402e+10 5.113e+10 6.758e+10 5.313e+10 7.091e+10 5.489e+10 7.398e+10 5.638e+10 7.674e+10 5.759e+10 7.916e+10 5.850e+10 8.122e+10 5.909e+10 8.288e+10 5.935e+10 8.414e+10 5.929e+10 8.496e+10 5.891e+10 8.534e+10 5.821e+10 8.528e+10 5.720e+10 8.478e+10 5.590e+10 8.384e+10 5.433e+10 8.248e+10 5.252e+10 8.071e+10 5.049e+10 7.855e+10 4.828e+10 7.604e+10 4.591e+10 7.320e+10 4.342e+10 7.008e+10 4.084e+10 6.670e+10 3.821e+10 6.313e+10 3.556e+10 5.939e+10 3.291e+10 5.553e+10 3.030e+10 5.161e+10 2.775e+10 4.766e+10 2.529e+10 4.372e+10 2.292e+10 3.985e+10 2.068e+10 3.607e+10 1.856e+10 3.242e+10 1.658e+10 2.892e+10 1.474e+10 2.561e+10 1.305e+10 2.251e+10 1.151e+10 1.962e+10 1.010e+10 1.696e+10 8.838e+09 1.454e+10 7.706e+09 1.236e+10 6.698e+09 1.041e+10 5.808e+09 8.680e+09 5.027e+09 7.173e+09 4.345e+09 5.870e+09 3.754e+09 4.757e+09 3.246e+09 3.818e+09 2.812e+09 3.035e+09 2.446e+09 2.390e+09 2.140e+09 1.866e+09 1.887e+09 1.444e+09 1.682e+09 1.109e+09 1.520e+09 8.456e+08 1.395e+09 6.391e+08 1.302e+09 4.780e+08 1.237e+09 3.526e+08 1.196e+09 2.548e+08 1.175e+09 1.792e+08 1.170e+09 1.220e+08 1.179e+09 8.045e+07 1.200e+09 5.320e+07 1.233e+09 3.942e+07 1.275e+09 3.874e+07 1.328e+09 5.113e+07 1.390e+09 7.672e+07 1.463e+09 1.159e+08 1.547e+09 1.693e+08 1.642e+09 2.374e+08 1.748e+09 3.214e+08 1.866e+09 4.220e+08 1.996e+09 5.403e+08 2.138e+09 6.772e+08 2.290e+09 8.335e+08 2.451e+09 1.010e+09 2.620e+09 1.206e+09 2.795e+09 1.421e+09 2.972e+09 1.656e+09 3.150e+09 1.907e+09 3.325e+09 2.174e+09 3.494e+09 2.453e+09 3.654e+09 2.742e+09 3.800e+09 3.036e+09 3.929e+09 3.330e+09 4.039e+09 3.621e+09 4.125e+09 3.904e+09 4.187e+09 4.172e+09 4.221e+09 4.421e+09 4.227e+09 4.646e+09 4.202e+09 4.842e+09 4.148e+09 5.006e+09 4.063e+09 5.135e+09 3.949e+09 5.224e+09 3.808e+09 5.273e+09 3.642e+09 5.280e+09 3.454e+09 5.245e+09 3.246e+09 5.168e+09 3.022e+09 5.051e+09 2.787e+09 4.897e+09 2.542e+09 4.708e+09 2.294e+09 4.489e+09 2.046e+09 4.244e+09 1.800e+09 3.977e+09 1.561e+09 3.693e+09 1.333e+09 3.399e+09 1.116e+09 3.098e+09 9.152e+08 2.797e+09 7.307e+08 2.499e+09 5.642e+08 2.208e+09 4.166e+08 1.930e+09 2.884e+08 1.667e+09 1.794e+08 1.421e+09 8.896e+07 1.194e+09 1.631e+07 9.894e+08 -3.996e+07 8.063e+08 -8.139e+07 6.455e+08 -1.098e+08 5.068e+08 -1.274e+08 3.892e+08 -1.363e+08 2.916e+08 -1.388e+08 2.122e+08 -1.372e+08 1.488e+08 -1.337e+08 9.865e+07 -1.300e+08 5.873e+07 -1.273e+08 2.568e+07 -1.257e+08 -3.611e+06 -1.249e+08 -3.180e+07 -1.239e+08 -6.084e+07 -1.213e+08 -9.198e+07 -1.158e+08 -1.260e+08 -1.062e+08 -1.635e+08 -9.121e+07 -2.051e+08 -6.926e+07 -2.515e+08 -3.855e+07 -3.037e+08 3.234e+06 -3.629e+08 5.900e+07 -4.302e+08 1.325e+08 -5.070e+08 2.279e+08 -5.946e+08 3.504e+08 -6.941e+08 5.058e+08 -8.064e+08 7.003e+08 -9.323e+08 9.405e+08 -1.072e+09 1.234e+09 -1.227e+09 1.588e+09 -1.396e+09 2.009e+09 -1.581e+09 2.507e+09 -1.780e+09 3.088e+09 -1.995e+09 3.759e+09 -2.224e+09 4.529e+09 -2.469e+09 5.404e+09 -2.729e+09 6.389e+09 -3.005e+09 7.490e+09 -3.296e+09 8.713e+09 -3.605e+09 1.006e+10 -3.930e+09 1.154e+10 -4.273e+09 1.314e+10 -4.634e+09 1.488e+10 -5.016e+09 1.674e+10 -5.418e+09 1.873e+10 -5.842e+09 2.085e+10 -6.289e+09 2.309e+10 -6.759e+09 2.544e+10 -7.254e+09 2.790e+10 -7.772e+09 3.046e+10 -8.316e+09 3.311e+10 -8.884e+09 3.584e+10 -9.474e+09 3.864e+10 -1.009e+10 4.150e+10 -1.072e+10 4.441e+10 -1.136e+10 4.735e+10 -1.202e+10 5.032e+10 -1.268e+10 5.329e+10 -1.334e+10 5.626e+10 -1.400e+10 5.921e+10 -1.465e+10 6.213e+10 -1.528e+10 6.500e+10 -1.587e+10 6.781e+10 -1.643e+10 7.055e+10 -1.694e+10 7.319e+10 -1.740e+10 7.574e+10 -1.778e+10 7.818e+10 -1.808e+10 8.049e+10 -1.829e+10 8.266e+10 -1.840e+10 8.467e+10 -1.839e+10 8.652e+10 -1.826e+10 8.820e+10 -1.800e+10 8.968e+10 -1.759e+10 9.096e+10 -1.702e+10 9.203e+10 -1.630e+10 9.287e+10 -1.541e+10 9.347e+10 -1.435e+10 9.383e+10 -1.311e+10 9.393e+10 -1.170e+10 9.376e+10 -1.011e+10 9.333e+10 -8.354e+09 9.263e+10 -6.430e+09 9.165e+10 -4.345e+09 9.040e+10 -2.107e+09 8.888e+10 2.686e+08 8.711e+10 2.772e+09 8.508e+10 5.393e+09 8.282e+10 8.113e+09 8.036e+10 1.092e+10 7.770e+10 1.380e+10 7.489e+10 1.675e+10 7.194e+10 1.975e+10 6.890e+10 2.281e+10 6.579e+10 2.593e+10 6.265e+10 2.913e+10 5.951e+10 3.242e+10 5.637e+10 3.584e+10 5.326e+10 3.941e+10 5.018e+10 4.319e+10 4.711e+10 4.723e+10 4.405e+10 5.157e+10 4.094e+10 5.629e+10 3.776e+10 6.144e+10 3.443e+10 6.705e+10 3.090e+10 7.318e+10 2.710e+10 7.984e+10 2.295e+10 8.705e+10 1.839e+10 9.481e+10 1.335e+10 1.031e+11 7.785e+09 1.119e+11 1.636e+09 1.212e+11 -5.129e+09 1.309e+11 -1.254e+10 1.410e+11 -2.062e+10 1.514e+11 -2.937e+10 1.619e+11 -3.880e+10 1.727e+11 -4.889e+10 1.835e+11 -5.964e+10 1.942e+11 -7.101e+10 2.049e+11 -8.299e+10 2.153e+11 -9.553e+10 2.255e+11 -1.086e+11 2.353e+11 -1.221e+11 2.446e+11 -1.361e+11 2.534e+11 -1.504e+11 2.616e+11 -1.651e+11 2.690e+11 -1.801e+11 2.757e+11 -1.952e+11 2.816e+11 -2.105e+11 2.866e+11 -2.259e+11 2.906e+11 -2.413e+11 2.937e+11 -2.566e+11 2.957e+11 -2.718e+11 2.966e+11 -2.868e+11 2.964e+11 -3.015e+11 2.951e+11 -3.159e+11 2.926e+11 -3.299e+11 2.890e+11 -3.434e+11 2.843e+11 -3.563e+11 2.783e+11 -3.686e+11 2.712e+11 -3.801e+11 2.629e+11 -3.909e+11 2.535e+11 -4.008e+11 2.431e+11 -4.097e+11 2.316e+11 -4.178e+11 2.192e+11 -4.247e+11 2.058e+11 -4.306e+11 1.917e+11 -4.354e+11 1.767e+11 -4.390e+11 1.611e+11 -4.414e+11 1.450e+11 -4.427e+11 1.283e+11 -4.427e+11 1.113e+11 -4.415e+11 9.394e+10 -4.391e+11 7.642e+10 0.005 -52.363 -51.281 -50.198 -49.115 -48.089 -47.168 -46.341 -45.602 -44.943 -44.360 -43.848 -43.405 -43.027 -42.712 -42.459 -42.266 -42.133 -42.059 -42.045 -42.091 -42.199 -42.369 -42.604 -42.907 -43.281 -43.731 -44.262 -44.882 -45.599 -46.424 -47.372 -48.464 -49.725 -51.194 -52.928 -55.019 -57.628 -61.085 -66.262 -77.509 -74.609 -67.112 -63.739 -61.879 -60.837 -60.340 -60.224 -60.325 -60.390 -60.064 -59.073 -57.484 -55.611 -53.720 -51.944 -50.326 -48.872 -47.572 -46.412 -45.379 -44.461 -43.648 -42.932 -42.306 -41.763 -41.300 -40.913 -40.600 -40.357 -40.185 -40.081 -40.047 -40.081 -40.186 -40.362 -40.613 -40.940 -41.347 -41.840 -42.423 -43.103 -43.889 -44.788 -45.814 -46.978 -48.293 -49.774 -51.430 -53.260 -55.244 -57.323 -59.418 -61.500 -63.749 -66.748 -71.015 -69.982 -64.250 -58.957 -55.012 -51.874 -49.261 -47.024 -45.072 -43.348 -41.813 -40.438 -39.201 -38.085 -37.080 -36.174 -35.359 -34.629 -33.979 -33.405 -32.905 -32.474 -32.113 -31.820 -31.594 -31.436 -31.347 -31.328 -31.382 -31.511 -31.719 -32.012 -32.395 -32.876 -33.466 -34.178 -35.027 -36.036 -37.233 -38.657 -40.363 -42.425 -44.941 -47.992 -51.338 -53.741 -53.799 -52.767 -52.376 -53.094 -54.165 -52.799 -48.067 -43.291 -39.369 -36.111 -33.325 -30.888 -28.717 -26.759 -24.975 -23.336 -21.820 -20.413 -19.099 -17.869 -16.713 -15.626 -14.600 -13.631 -12.715 -11.847 -11.024 -10.244 -9.503 -8.801 -8.134 -7.501 -6.901 -6.332 -5.793 -5.283 -4.801 -4.345 -3.915 -3.511 -3.131 -2.775 -2.442 -2.132 -1.845 -1.579 -1.335 -1.112 -0.911 -0.729 -0.569 -0.428 -0.308 -0.207 -0.127 -0.066 -0.024 -0.002 0.000 -0.017 -0.053 -0.109 -0.185 -0.281 -0.396 -0.531 -0.687 -0.864 -1.061 -1.279 -1.519 -1.780 -2.064 -2.370 -2.700 -3.053 -3.430 -3.832 -4.260 -4.715 -5.197 -5.707 -6.246 -6.817 -7.420 -8.056 -8.728 -9.437 -10.186 -10.977 -11.813 -12.698 -13.635 -14.628 -15.685 -16.810 -18.013 -19.302 -20.690 -22.194 -23.833 -25.637 -27.646 -29.922 -32.563 -35.749 -39.859 -46.006 -57.274 -54.642 -47.239 -44.318 -42.951 -42.406 -42.400 -42.765 -43.314 -43.759 -43.717 -42.969 -41.666 -40.135 -38.624 -37.246 -36.034 -34.987 -34.092 -33.335 -32.702 -32.182 -31.764 -31.440 -31.204 -31.050 -30.974 -30.973 -31.044 -31.186 -31.397 -31.678 -32.028 -32.448 -32.940 -33.504 -34.144 -34.863 -35.664 -36.553 -37.535 -38.616 -39.804 -41.105 -42.529 -44.084 -45.776 -47.609 -49.582 -51.694 -53.944 -56.355 -58.957 -61.545 -62.915 -61.506 -58.281 -55.074 -52.315 -49.965 -47.944 -46.187 -44.648 -43.291 -42.090 -41.026 -40.082 -39.246 -38.507 -37.857 -37.289 -36.798 -36.378 -36.026 -35.739 -35.514 -35.349 -35.241 -35.190 -35.195 -35.255 -35.370 -35.540 -35.765 -36.047 -36.386 -36.783 -37.242 -37.764 -38.352 -39.010 -39.742 -40.555 -41.454 -42.447 -43.545 -44.759 -46.105 -47.602 -49.274 -51.153 -53.280 -55.708 -58.507 -61.749 -65.449 -69.347 -72.578 -74.589 -75.897 -74.722 -70.236 -65.707 -61.991 -58.960 -56.442 -54.311 -52.485 -50.902 -49.520 -48.307 -47.240 -46.300 -45.473 -44.747 -44.113 -43.564 -43.092 -42.694 -42.364 -42.099 -41.897 -41.755 -41.671 -41.643 -41.672 -41.756 -41.894 -42.088 -42.336 -42.641 -43.002 -43.422 -43.902 -44.444 -45.052 -45.729 -46.479 -47.308 -48.178 -49.049 -49.919 0 1 1.0 4353721066.7 S1 VV 17.14 22.7 0.05 2.080e+09 -4.638e+09 8.978e+09 -8.948e+09 2.291e+10 -1.565e+10 4.673e+10 -2.467e+10 8.342e+10 -3.600e+10 1.362e+11 -4.952e+10 2.088e+11 -6.507e+10 3.053e+11 -8.238e+10 4.296e+11 -1.010e+11 5.866e+11 -1.205e+11 7.812e+11 -1.402e+11 1.018e+12 -1.593e+11 1.303e+12 -1.769e+11 1.642e+12 -1.919e+11 2.039e+12 -2.031e+11 2.504e+12 -2.090e+11 3.040e+12 -2.080e+11 3.653e+12 -1.986e+11 4.349e+12 -1.786e+11 5.135e+12 -1.462e+11 6.016e+12 -9.903e+10 6.998e+12 -3.450e+10 8.087e+12 4.992e+10 9.288e+12 1.568e+11 1.060e+13 2.890e+11 1.204e+13 4.496e+11 1.361e+13 6.416e+11 1.530e+13 8.680e+11 1.713e+13 1.132e+12 1.909e+13 1.437e+12 2.119e+13 1.786e+12 2.343e+13 2.181e+12 2.581e+13 2.626e+12 2.832e+13 3.123e+12 3.098e+13 3.675e+12 3.376e+13 4.283e+12 3.668e+13 4.949e+12 3.973e+13 5.675e+12 4.290e+13 6.461e+12 4.618e+13 7.307e+12 4.957e+13 8.213e+12 5.307e+13 9.180e+12 5.666e+13 1.020e+13 6.034e+13 1.128e+13 6.410e+13 1.242e+13 6.792e+13 1.360e+13 7.180e+13 1.484e+13 7.572e+13 1.611e+13 7.968e+13 1.743e+13 8.366e+13 1.879e+13 8.765e+13 2.017e+13 9.165e+13 2.158e+13 9.564e+13 2.302e+13 9.961e+13 2.447e+13 1.035e+14 2.594e+13 1.074e+14 2.741e+13 1.113e+14 2.889e+13 1.151e+14 3.036e+13 1.188e+14 3.183e+13 1.225e+14 3.330e+13 1.260e+14 3.475e+13 1.295e+14 3.620e+13 1.330e+14 3.763e+13 1.363e+14 3.904e+13 1.395e+14 4.043e+13 1.426e+14 4.180e+13 1.456e+14 4.314e+13 1.484e+14 4.445e+13 1.512e+14 4.573e+13 1.538e+14 4.698e+13 1.563e+14 4.820e+13 1.587e+14 4.938e+13 1.610e+14 5.053e+13 1.631e+14 5.163e+13 1.652e+14 5.270e+13 1.671e+14 5.374e+13 1.689e+14 5.473e+13 1.706e+14 5.568e+13 1.722e+14 5.659e+13 1.737e+14 5.745e+13 1.751e+14 5.828e+13 1.764e+14 5.906e+13 1.776e+14 5.980e+13 1.788e+14 6.050e+13 1.799e+14 6.115e+13 1.810e+14 6.177e+13 1.820e+14 6.236e+13 1.829e+14 6.291e+13 1.839e+14 6.343e+13 1.848e+14 6.392e+13 1.858e+14 6.438e+13 1.867e+14 6.483e+13 1.876e+14 6.525e+13 1.886e+14 6.567e+13 1.896e+14 6.608e+13 1.906e+14 6.648e+13 1.916e+14 6.689e+13 1.927e+14 6.730e+13 1.939e+14 6.773e+13 1.951e+14 6.817e+13 1.963e+14 6.864e+13 1.977e+14 6.915e+13 1.991e+14 6.969e+13 2.005e+14 7.027e+13 2.020e+14 7.089e+13 2.036e+14 7.155e+13 2.052e+14 7.225e+13 2.069e+14 7.301e+13 2.087e+14 7.381e+13 2.105e+14 7.467e+13 2.123e+14 7.559e+13 2.142e+14 7.656e+13 2.161e+14 7.758e+13 2.180e+14 7.867e+13 2.200e+14 7.981e+13 2.220e+14 8.101e+13 2.240e+14 8.227e+13 2.260e+14 8.358e+13 2.280e+14 8.495e+13 2.300e+14 8.638e+13 2.320e+14 8.785e+13 2.340e+14 8.939e+13 2.360e+14 9.097e+13 2.379e+14 9.260e+13 2.398e+14 9.428e+13 2.417e+14 9.601e+13 2.435e+14 9.779e+13 2.452e+14 9.960e+13 2.469e+14 1.015e+14 2.485e+14 1.034e+14 2.500e+14 1.053e+14 2.514e+14 1.072e+14 2.527e+14 1.092e+14 2.539e+14 1.112e+14 2.549e+14 1.132e+14 2.558e+14 1.153e+14 2.565e+14 1.173e+14 2.571e+14 1.193e+14 2.574e+14 1.213e+14 2.576e+14 1.233e+14 2.575e+14 1.252e+14 2.573e+14 1.271e+14 2.568e+14 1.290e+14 2.560e+14 1.308e+14 2.550e+14 1.325e+14 2.537e+14 1.341e+14 2.522e+14 1.356e+14 2.503e+14 1.370e+14 2.482e+14 1.383e+14 2.457e+14 1.394e+14 2.430e+14 1.404e+14 2.399e+14 1.412e+14 2.366e+14 1.418e+14 2.329e+14 1.422e+14 2.290e+14 1.425e+14 2.248e+14 1.425e+14 2.203e+14 1.424e+14 2.156e+14 1.420e+14 2.106e+14 1.414e+14 2.054e+14 1.406e+14 2.000e+14 1.396e+14 1.944e+14 1.384e+14 1.886e+14 1.370e+14 1.827e+14 1.354e+14 1.766e+14 1.335e+14 1.704e+14 1.315e+14 1.642e+14 1.293e+14 1.578e+14 1.270e+14 1.514e+14 1.245e+14 1.450e+14 1.218e+14 1.386e+14 1.190e+14 1.321e+14 1.161e+14 1.257e+14 1.131e+14 1.194e+14 1.099e+14 1.131e+14 1.067e+14 1.069e+14 1.034e+14 1.008e+14 1.000e+14 9.483e+13 9.661e+13 8.897e+13 9.314e+13 8.326e+13 8.965e+13 7.769e+13 8.612e+13 7.229e+13 8.258e+13 6.706e+13 7.903e+13 6.202e+13 7.549e+13 5.717e+13 7.198e+13 5.252e+13 6.849e+13 4.807e+13 6.504e+13 4.384e+13 6.164e+13 3.981e+13 5.830e+13 3.600e+13 5.502e+13 3.241e+13 5.181e+13 2.903e+13 4.868e+13 2.587e+13 4.564e+13 2.292e+13 4.269e+13 2.018e+13 3.983e+13 1.764e+13 3.708e+13 1.531e+13 3.444e+13 1.317e+13 3.191e+13 1.122e+13 2.949e+13 9.450e+12 2.719e+13 7.850e+12 2.501e+13 6.413e+12 2.295e+13 5.132e+12 2.101e+13 3.994e+12 1.919e+13 2.990e+12 1.749e+13 2.112e+12 1.590e+13 1.348e+12 1.443e+13 6.886e+11 1.307e+13 1.249e+11 1.182e+13 -3.532e+11 1.067e+13 -7.545e+11 9.614e+12 -1.087e+12 8.651e+12 -1.360e+12 7.775e+12 -1.580e+12 6.978e+12 -1.753e+12 6.256e+12 -1.887e+12 5.603e+12 -1.986e+12 5.012e+12 -2.056e+12 4.479e+12 -2.100e+12 3.998e+12 -2.123e+12 3.564e+12 -2.126e+12 3.172e+12 -2.114e+12 2.818e+12 -2.088e+12 2.498e+12 -2.050e+12 2.209e+12 -2.000e+12 1.947e+12 -1.941e+12 1.710e+12 -1.874e+12 1.495e+12 -1.800e+12 1.300e+12 -1.719e+12 1.124e+12 -1.632e+12 9.658e+11 -1.541e+12 8.229e+11 -1.447e+12 6.948e+11 -1.349e+12 5.803e+11 -1.250e+12 4.785e+11 -1.151e+12 3.888e+11 -1.051e+12 3.102e+11 -9.527e+11 2.419e+11 -8.563e+11 1.833e+11 -7.626e+11 1.337e+11 -6.726e+11 9.227e+10 -5.868e+11 5.835e+10 -5.060e+11 3.121e+10 -4.306e+11 1.010e+10 -3.610e+11 -5.662e+09 -2.977e+11 -1.678e+10 -2.408e+11 -2.396e+10 -1.904e+11 -2.785e+10 -1.466e+11 -2.907e+10 -1.092e+11 -2.823e+10 -7.802e+10 -2.587e+10 -5.284e+10 -2.250e+10 -3.327e+10 -1.860e+10 -1.887e+10 -1.462e+10 -9.059e+09 -1.103e+10 -2.906e+09 -8.357e+09 1.157e+09 -7.090e+09 5.213e+09 -7.120e+09 1.072e+10 -7.726e+09 1.807e+10 -8.211e+09 2.701e+10 -8.212e+09 3.718e+10 -7.593e+09 4.814e+10 -6.339e+09 5.948e+10 -4.490e+09 7.084e+10 -2.119e+09 8.186e+10 6.756e+08 9.225e+10 3.790e+09 1.018e+11 7.118e+09 1.102e+11 1.055e+10 1.175e+11 1.398e+10 1.234e+11 1.733e+10 1.278e+11 2.050e+10 1.309e+11 2.343e+10 1.324e+11 2.606e+10 1.326e+11 2.835e+10 1.314e+11 3.025e+10 1.289e+11 3.177e+10 1.253e+11 3.287e+10 1.207e+11 3.357e+10 1.151e+11 3.387e+10 1.088e+11 3.378e+10 1.018e+11 3.334e+10 9.446e+10 3.257e+10 8.677e+10 3.150e+10 7.893e+10 3.016e+10 7.105e+10 2.860e+10 6.329e+10 2.685e+10 5.576e+10 2.495e+10 4.854e+10 2.295e+10 4.173e+10 2.088e+10 3.541e+10 1.879e+10 2.961e+10 1.670e+10 2.438e+10 1.466e+10 1.973e+10 1.270e+10 1.567e+10 1.084e+10 1.219e+10 9.116e+09 9.254e+09 7.534e+09 6.836e+09 6.111e+09 4.894e+09 4.858e+09 3.374e+09 3.776e+09 2.220e+09 2.863e+09 1.394e+09 2.100e+09 7.858e+08 1.525e+09 3.970e+08 1.058e+09 1.575e+08 7.100e+08 2.296e+07 4.606e+08 -4.263e+07 2.882e+08 -6.609e+07 1.728e+08 -6.512e+07 9.674e+07 -5.007e+07 4.721e+07 -2.823e+07 1.696e+07 -7.970e+06 2.262e+06 1.949e+06 -1.359e+06 2.817e+07 -1.030e+07 1.093e+08 -2.409e+07 2.726e+08 -3.422e+07 5.479e+08 -2.932e+07 9.672e+08 4.609e+06 1.564e+09 8.370e+07 2.368e+09 2.251e+08 3.410e+09 4.468e+08 4.719e+09 7.666e+08 6.317e+09 1.200e+09 8.222e+09 1.763e+09 1.045e+10 2.469e+09 1.301e+10 3.325e+09 1.590e+10 4.338e+09 1.913e+10 5.514e+09 2.268e+10 6.850e+09 2.653e+10 8.345e+09 3.067e+10 9.993e+09 3.506e+10 1.178e+10 3.968e+10 1.371e+10 4.448e+10 1.575e+10 4.943e+10 1.790e+10 5.447e+10 2.013e+10 5.956e+10 2.244e+10 6.464e+10 2.480e+10 6.965e+10 2.720e+10 7.455e+10 2.962e+10 7.926e+10 3.203e+10 8.375e+10 3.442e+10 8.795e+10 3.677e+10 9.182e+10 3.906e+10 9.529e+10 4.126e+10 9.833e+10 4.336e+10 1.009e+11 4.533e+10 1.029e+11 4.716e+10 1.045e+11 4.881e+10 1.054e+11 5.027e+10 1.058e+11 5.151e+10 1.056e+11 5.252e+10 1.049e+11 5.328e+10 1.036e+11 5.377e+10 1.017e+11 5.397e+10 9.938e+10 5.388e+10 9.658e+10 5.350e+10 9.335e+10 5.281e+10 8.974e+10 5.182e+10 8.580e+10 5.055e+10 8.159e+10 4.900e+10 7.716e+10 4.720e+10 7.258e+10 4.516e+10 6.789e+10 4.291e+10 6.315e+10 4.050e+10 5.842e+10 3.794e+10 5.374e+10 3.527e+10 4.916e+10 3.254e+10 4.471e+10 2.978e+10 4.044e+10 2.702e+10 3.637e+10 2.431e+10 3.252e+10 2.168e+10 2.891e+10 1.914e+10 2.556e+10 1.674e+10 2.247e+10 1.448e+10 1.965e+10 1.239e+10 1.708e+10 1.048e+10 1.478e+10 8.747e+09 1.272e+10 7.200e+09 1.090e+10 5.838e+09 9.300e+09 4.651e+09 7.912e+09 3.633e+09 6.717e+09 2.773e+09 5.699e+09 2.054e+09 4.840e+09 1.462e+09 4.125e+09 9.804e+08 3.537e+09 5.924e+08 3.060e+09 2.818e+08 2.682e+09 3.322e+07 2.386e+09 -1.678e+08 2.160e+09 -3.331e+08 1.994e+09 -4.726e+08 1.876e+09 -5.935e+08 1.798e+09 -7.005e+08 1.754e+09 -7.963e+08 1.738e+09 -8.821e+08 1.746e+09 -9.580e+08 1.775e+09 -1.023e+09 1.823e+09 -1.078e+09 1.890e+09 -1.120e+09 1.973e+09 -1.149e+09 2.073e+09 -1.164e+09 2.189e+09 -1.165e+09 2.320e+09 -1.150e+09 2.466e+09 -1.119e+09 2.627e+09 -1.072e+09 2.803e+09 -1.007e+09 2.992e+09 -9.225e+08 3.194e+09 -8.185e+08 3.408e+09 -6.938e+08 3.632e+09 -5.469e+08 3.865e+09 -3.772e+08 4.104e+09 -1.839e+08 4.346e+09 3.361e+07 4.589e+09 2.751e+08 4.830e+09 5.399e+08 5.064e+09 8.272e+08 5.287e+09 1.135e+09 5.496e+09 1.460e+09 5.686e+09 1.801e+09 5.853e+09 2.152e+09 5.992e+09 2.508e+09 6.101e+09 2.863e+09 6.176e+09 3.213e+09 6.214e+09 3.551e+09 6.213e+09 3.872e+09 6.172e+09 4.169e+09 6.091e+09 4.436e+09 5.968e+09 4.669e+09 5.806e+09 4.862e+09 5.607e+09 5.012e+09 5.372e+09 5.116e+09 5.105e+09 5.172e+09 4.811e+09 5.180e+09 4.493e+09 5.140e+09 4.156e+09 5.054e+09 3.806e+09 4.924e+09 3.447e+09 4.755e+09 3.086e+09 4.549e+09 2.726e+09 4.313e+09 2.374e+09 4.052e+09 2.033e+09 3.770e+09 1.708e+09 3.475e+09 1.403e+09 3.170e+09 1.121e+09 2.863e+09 8.636e+08 2.557e+09 6.334e+08 2.258e+09 4.313e+08 1.969e+09 2.578e+08 1.695e+09 1.123e+08 1.439e+09 -6.259e+06 1.203e+09 -9.952e+07 9.883e+08 -1.702e+08 7.971e+08 -2.212e+08 6.299e+08 -2.567e+08 4.861e+08 -2.809e+08 3.644e+08 -2.988e+08 2.620e+08 -3.148e+08 1.748e+08 -3.331e+08 9.664e+07 -3.556e+08 2.086e+07 -3.827e+08 -5.944e+07 -4.128e+08 -1.504e+08 -4.429e+08 -2.567e+08 -4.695e+08 -3.819e+08 -4.886e+08 -5.285e+08 -4.961e+08 -6.982e+08 -4.877e+08 -8.923e+08 -4.592e+08 -1.112e+09 -4.059e+08 -1.358e+09 -3.232e+08 -1.630e+09 -2.061e+08 -1.930e+09 -4.929e+07 -2.258e+09 1.526e+08 -2.613e+09 4.055e+08 -2.996e+09 7.153e+08 -3.406e+09 1.088e+09 -3.842e+09 1.530e+09 -4.304e+09 2.048e+09 -4.791e+09 2.647e+09 -5.301e+09 3.334e+09 -5.834e+09 4.115e+09 -6.387e+09 4.996e+09 -6.959e+09 5.981e+09 -7.550e+09 7.076e+09 -8.157e+09 8.284e+09 -8.780e+09 9.609e+09 -9.417e+09 1.105e+10 -1.007e+10 1.262e+10 -1.073e+10 1.430e+10 -1.141e+10 1.611e+10 -1.209e+10 1.804e+10 -1.279e+10 2.008e+10 -1.350e+10 2.223e+10 -1.422e+10 2.449e+10 -1.495e+10 2.684e+10 -1.569e+10 2.929e+10 -1.643e+10 3.181e+10 -1.718e+10 3.440e+10 -1.794e+10 3.704e+10 -1.869e+10 3.972e+10 -1.943e+10 4.243e+10 -2.017e+10 4.515e+10 -2.089e+10 4.786e+10 -2.158e+10 5.055e+10 -2.224e+10 5.320e+10 -2.286e+10 5.579e+10 -2.343e+10 5.830e+10 -2.395e+10 6.072e+10 -2.441e+10 6.304e+10 -2.479e+10 6.524e+10 -2.509e+10 6.730e+10 -2.530e+10 6.922e+10 -2.541e+10 7.098e+10 -2.542e+10 7.258e+10 -2.533e+10 7.401e+10 -2.513e+10 7.525e+10 -2.481e+10 7.632e+10 -2.437e+10 7.720e+10 -2.382e+10 7.789e+10 -2.316e+10 7.839e+10 -2.238e+10 7.870e+10 -2.148e+10 7.883e+10 -2.048e+10 7.878e+10 -1.937e+10 7.854e+10 -1.816e+10 7.813e+10 -1.684e+10 7.754e+10 -1.544e+10 7.679e+10 -1.394e+10 7.587e+10 -1.236e+10 7.479e+10 -1.069e+10 7.357e+10 -8.958e+09 7.221e+10 -7.150e+09 7.070e+10 -5.275e+09 6.907e+10 -3.342e+09 6.733e+10 -1.352e+09 6.547e+10 6.907e+08 6.352e+10 2.779e+09 6.149e+10 4.911e+09 5.939e+10 7.087e+09 5.724e+10 9.301e+09 5.506e+10 1.156e+10 5.286e+10 1.386e+10 5.067e+10 1.622e+10 4.851e+10 1.866e+10 4.639e+10 2.118e+10 4.431e+10 2.382e+10 4.229e+10 2.660e+10 4.032e+10 2.957e+10 3.840e+10 3.275e+10 3.652e+10 3.621e+10 3.464e+10 3.998e+10 3.273e+10 4.412e+10 3.076e+10 4.866e+10 2.867e+10 5.364e+10 2.641e+10 5.910e+10 2.393e+10 6.504e+10 2.117e+10 7.149e+10 1.807e+10 7.843e+10 1.460e+10 8.586e+10 1.070e+10 9.376e+10 6.335e+09 1.021e+11 1.481e+09 1.108e+11 -3.897e+09 1.199e+11 -9.814e+09 1.293e+11 -1.628e+10 1.389e+11 -2.331e+10 1.487e+11 -3.090e+10 1.587e+11 -3.905e+10 1.688e+11 -4.775e+10 1.789e+11 -5.700e+10 1.889e+11 -6.677e+10 1.989e+11 -7.706e+10 2.087e+11 -8.784e+10 2.183e+11 -9.910e+10 2.277e+11 -1.108e+11 2.368e+11 -1.229e+11 2.455e+11 -1.355e+11 2.538e+11 -1.484e+11 2.617e+11 -1.616e+11 2.691e+11 -1.752e+11 2.759e+11 -1.890e+11 2.821e+11 -2.031e+11 2.877e+11 -2.173e+11 2.925e+11 -2.317e+11 2.966e+11 -2.461e+11 3.000e+11 -2.606e+11 3.024e+11 -2.750e+11 3.039e+11 -2.894e+11 3.045e+11 -3.035e+11 3.040e+11 -3.174e+11 3.025e+11 -3.310e+11 2.998e+11 -3.442e+11 2.960e+11 -3.569e+11 2.911e+11 -3.691e+11 2.850e+11 -3.805e+11 2.777e+11 -3.912e+11 2.693e+11 -4.012e+11 2.597e+11 -4.101e+11 2.491e+11 -4.182e+11 2.373e+11 -4.251e+11 2.246e+11 -4.310e+11 2.109e+11 -4.357e+11 1.964e+11 -4.392e+11 1.811e+11 0.005 -51.591 -50.498 -49.405 -48.312 -47.274 -46.338 -45.494 -44.735 -44.054 -43.447 -42.909 -42.436 -42.026 -41.677 -41.386 -41.152 -40.974 -40.852 -40.784 -40.772 -40.816 -40.915 -41.073 -41.289 -41.566 -41.906 -42.313 -42.789 -43.341 -43.972 -44.690 -45.503 -46.420 -47.454 -48.619 -49.934 -51.423 -53.114 -55.034 -57.205 -59.597 -62.015 -63.914 -64.658 -64.417 -63.889 -63.484 -63.253 -63.010 -62.412 -61.184 -59.391 -57.340 -55.293 -53.379 -51.639 -50.074 -48.674 -47.423 -46.305 -45.309 -44.422 -43.637 -42.945 -42.340 -41.817 -41.372 -41.002 -40.703 -40.475 -40.316 -40.226 -40.204 -40.251 -40.367 -40.555 -40.816 -41.154 -41.571 -42.071 -42.661 -43.345 -44.130 -45.024 -46.035 -47.168 -48.429 -49.813 -51.300 -52.835 -54.314 -55.573 -56.438 -56.815 -56.732 -56.265 -55.459 -54.331 -52.914 -51.290 -49.565 -47.831 -46.149 -44.556 -43.068 -41.689 -40.418 -39.250 -38.179 -37.202 -36.311 -35.503 -34.773 -34.119 -33.536 -33.023 -32.578 -32.200 -31.888 -31.642 -31.463 -31.350 -31.306 -31.333 -31.434 -31.612 -31.872 -32.220 -32.664 -33.213 -33.880 -34.680 -35.634 -36.770 -38.125 -39.751 -41.720 -44.128 -47.046 -50.230 -52.427 -52.217 -50.823 -49.942 -50.130 -51.936 -57.017 -59.676 -50.537 -43.878 -39.389 -35.908 -33.024 -30.541 -28.352 -26.390 -24.609 -22.978 -21.473 -20.077 -18.775 -17.557 -16.415 -15.340 -14.326 -13.369 -12.464 -11.607 -10.795 -10.025 -9.295 -8.603 -7.946 -7.323 -6.732 -6.171 -5.641 -5.139 -4.665 -4.217 -3.795 -3.398 -3.025 -2.676 -2.351 -2.048 -1.767 -1.508 -1.270 -1.054 -0.858 -0.683 -0.528 -0.394 -0.279 -0.184 -0.109 -0.053 -0.017 0.000 -0.003 -0.024 -0.065 -0.126 -0.206 -0.306 -0.425 -0.565 -0.725 -0.905 -1.106 -1.327 -1.570 -1.835 -2.121 -2.430 -2.762 -3.117 -3.496 -3.900 -4.329 -4.783 -5.265 -5.775 -6.313 -6.882 -7.482 -8.115 -8.782 -9.485 -10.226 -11.007 -11.832 -12.702 -13.622 -14.595 -15.626 -16.720 -17.883 -19.123 -20.450 -21.875 -23.412 -25.079 -26.901 -28.908 -31.145 -33.672 -36.569 -39.922 -43.677 -46.975 -48.116 -47.374 -46.347 -45.772 -45.666 -45.845 -45.995 -45.716 -44.773 -43.305 -41.635 -40.004 -38.522 -37.217 -36.086 -35.117 -34.292 -33.596 -33.018 -32.546 -32.171 -31.887 -31.687 -31.567 -31.524 -31.553 -31.654 -31.825 -32.065 -32.374 -32.752 -33.200 -33.719 -34.311 -34.979 -35.725 -36.554 -37.469 -38.474 -39.575 -40.775 -42.079 -43.487 -44.995 -46.592 -48.253 -49.937 -51.578 -53.094 -54.382 -55.315 -55.731 -55.474 -54.527 -53.071 -51.369 -49.626 -47.954 -46.403 -44.985 -43.702 -42.545 -41.505 -40.573 -39.742 -39.002 -38.348 -37.774 -37.274 -36.845 -36.483 -36.185 -35.949 -35.772 -35.652 -35.590 -35.583 -35.631 -35.733 -35.891 -36.104 -36.373 -36.699 -37.083 -37.528 -38.037 -38.611 -39.254 -39.972 -40.769 -41.652 -42.629 -43.710 -44.907 -46.236 -47.718 -49.377 -51.251 -53.388 -55.860 -58.778 -62.329 -66.862 -73.216 -84.675 -87.638 -82.111 -78.545 -72.967 -67.839 -63.753 -60.476 -57.784 -55.527 -53.603 -51.945 -50.503 -49.242 -48.135 -47.163 -46.310 -45.562 -44.911 -44.347 -43.864 -43.457 -43.122 -42.853 -42.650 -42.509 -42.428 -42.407 -42.443 -42.537 -42.689 -42.898 -43.165 -43.491 -43.878 -44.327 -44.840 -45.422 -46.075 -46.803 -47.614 -48.512 -49.457 -50.403 -51.349 0 1 1.0 4353721066.7 S1 VH 17.14 22.7 0.05 4.649e+09 -1.239e+09 1.201e+10 1.189e+09 2.554e+10 7.279e+09 4.710e+10 1.911e+10 7.872e+10 3.888e+10 1.226e+11 6.899e+10 1.813e+11 1.122e+11 2.574e+11 1.716e+11 3.538e+11 2.504e+11 4.735e+11 3.524e+11 6.199e+11 4.817e+11 7.962e+11 6.423e+11 1.006e+12 8.387e+11 1.253e+12 1.076e+12 1.541e+12 1.359e+12 1.875e+12 1.694e+12 2.258e+12 2.087e+12 2.693e+12 2.541e+12 3.184e+12 3.063e+12 3.736e+12 3.660e+12 4.351e+12 4.336e+12 5.033e+12 5.097e+12 5.786e+12 5.951e+12 6.612e+12 6.901e+12 7.514e+12 7.953e+12 8.495e+12 9.114e+12 9.556e+12 1.039e+13 1.070e+13 1.178e+13 1.193e+13 1.329e+13 1.324e+13 1.493e+13 1.463e+13 1.670e+13 1.611e+13 1.859e+13 1.768e+13 2.062e+13 1.932e+13 2.279e+13 2.105e+13 2.508e+13 2.286e+13 2.752e+13 2.475e+13 3.008e+13 2.671e+13 3.277e+13 2.874e+13 3.559e+13 3.084e+13 3.853e+13 3.301e+13 4.158e+13 3.523e+13 4.475e+13 3.751e+13 4.802e+13 3.984e+13 5.138e+13 4.222e+13 5.484e+13 4.464e+13 5.837e+13 4.710e+13 6.197e+13 4.959e+13 6.564e+13 5.211e+13 6.935e+13 5.465e+13 7.310e+13 5.720e+13 7.688e+13 5.976e+13 8.067e+13 6.233e+13 8.447e+13 6.491e+13 8.828e+13 6.747e+13 9.206e+13 7.002e+13 9.582e+13 7.256e+13 9.956e+13 7.507e+13 1.032e+14 7.756e+13 1.069e+14 8.001e+13 1.104e+14 8.243e+13 1.140e+14 8.481e+13 1.174e+14 8.715e+13 1.208e+14 8.943e+13 1.240e+14 9.166e+13 1.272e+14 9.383e+13 1.303e+14 9.593e+13 1.333e+14 9.796e+13 1.361e+14 9.993e+13 1.389e+14 1.018e+14 1.415e+14 1.036e+14 1.440e+14 1.054e+14 1.464e+14 1.070e+14 1.486e+14 1.086e+14 1.507e+14 1.101e+14 1.527e+14 1.116e+14 1.546e+14 1.129e+14 1.563e+14 1.142e+14 1.580e+14 1.154e+14 1.595e+14 1.166e+14 1.609e+14 1.177e+14 1.621e+14 1.188e+14 1.633e+14 1.198e+14 1.644e+14 1.208e+14 1.653e+14 1.218e+14 1.662e+14 1.227e+14 1.670e+14 1.236e+14 1.678e+14 1.246e+14 1.684e+14 1.255e+14 1.690e+14 1.264e+14 1.696e+14 1.273e+14 1.702e+14 1.283e+14 1.707e+14 1.292e+14 1.712e+14 1.302e+14 1.717e+14 1.313e+14 1.722e+14 1.323e+14 1.727e+14 1.334e+14 1.732e+14 1.346e+14 1.738e+14 1.357e+14 1.744e+14 1.370e+14 1.750e+14 1.382e+14 1.757e+14 1.395e+14 1.765e+14 1.409e+14 1.773e+14 1.423e+14 1.782e+14 1.437e+14 1.792e+14 1.452e+14 1.802e+14 1.467e+14 1.813e+14 1.482e+14 1.825e+14 1.497e+14 1.837e+14 1.512e+14 1.850e+14 1.528e+14 1.864e+14 1.543e+14 1.878e+14 1.559e+14 1.893e+14 1.574e+14 1.908e+14 1.590e+14 1.924e+14 1.605e+14 1.940e+14 1.620e+14 1.957e+14 1.635e+14 1.975e+14 1.649e+14 1.992e+14 1.663e+14 2.010e+14 1.676e+14 2.029e+14 1.690e+14 2.047e+14 1.702e+14 2.066e+14 1.714e+14 2.085e+14 1.726e+14 2.104e+14 1.736e+14 2.123e+14 1.746e+14 2.142e+14 1.756e+14 2.161e+14 1.764e+14 2.180e+14 1.772e+14 2.199e+14 1.779e+14 2.217e+14 1.784e+14 2.236e+14 1.789e+14 2.253e+14 1.793e+14 2.271e+14 1.795e+14 2.287e+14 1.796e+14 2.303e+14 1.795e+14 2.319e+14 1.794e+14 2.333e+14 1.790e+14 2.346e+14 1.785e+14 2.358e+14 1.778e+14 2.369e+14 1.770e+14 2.379e+14 1.761e+14 2.387e+14 1.749e+14 2.394e+14 1.735e+14 2.398e+14 1.720e+14 2.401e+14 1.702e+14 2.401e+14 1.682e+14 2.399e+14 1.660e+14 2.395e+14 1.636e+14 2.388e+14 1.610e+14 2.379e+14 1.582e+14 2.367e+14 1.552e+14 2.352e+14 1.520e+14 2.334e+14 1.486e+14 2.313e+14 1.451e+14 2.290e+14 1.413e+14 2.263e+14 1.374e+14 2.234e+14 1.334e+14 2.202e+14 1.292e+14 2.167e+14 1.250e+14 2.129e+14 1.206e+14 2.090e+14 1.161e+14 2.047e+14 1.116e+14 2.003e+14 1.070e+14 1.956e+14 1.023e+14 1.907e+14 9.768e+13 1.857e+14 9.302e+13 1.805e+14 8.836e+13 1.752e+14 8.374e+13 1.697e+14 7.914e+13 1.642e+14 7.460e+13 1.585e+14 7.013e+13 1.529e+14 6.574e+13 1.471e+14 6.143e+13 1.414e+14 5.722e+13 1.356e+14 5.313e+13 1.299e+14 4.915e+13 1.242e+14 4.530e+13 1.185e+14 4.159e+13 1.129e+14 3.802e+13 1.073e+14 3.460e+13 1.018e+14 3.134e+13 9.645e+13 2.823e+13 9.118e+13 2.528e+13 8.603e+13 2.249e+13 8.100e+13 1.985e+13 7.611e+13 1.739e+13 7.137e+13 1.508e+13 6.678e+13 1.293e+13 6.235e+13 1.094e+13 5.808e+13 9.101e+12 5.398e+13 7.417e+12 5.005e+13 5.882e+12 4.630e+13 4.489e+12 4.272e+13 3.234e+12 3.932e+13 2.113e+12 3.610e+13 1.116e+12 3.305e+13 2.397e+11 3.019e+13 -5.239e+11 2.750e+13 -1.182e+12 2.498e+13 -1.743e+12 2.263e+13 -2.213e+12 2.045e+13 -2.600e+12 1.844e+13 -2.912e+12 1.657e+13 -3.156e+12 1.486e+13 -3.340e+12 1.329e+13 -3.470e+12 1.185e+13 -3.553e+12 1.055e+13 -3.596e+12 9.363e+12 -3.604e+12 8.293e+12 -3.583e+12 7.328e+12 -3.538e+12 6.461e+12 -3.473e+12 5.684e+12 -3.392e+12 4.989e+12 -3.299e+12 4.369e+12 -3.196e+12 3.817e+12 -3.086e+12 3.326e+12 -2.971e+12 2.890e+12 -2.851e+12 2.503e+12 -2.729e+12 2.160e+12 -2.606e+12 1.856e+12 -2.482e+12 1.586e+12 -2.357e+12 1.348e+12 -2.231e+12 1.138e+12 -2.106e+12 9.525e+11 -1.980e+12 7.893e+11 -1.855e+12 6.462e+11 -1.731e+12 5.211e+11 -1.608e+12 4.126e+11 -1.487e+12 3.188e+11 -1.367e+12 2.386e+11 -1.250e+12 1.707e+11 -1.136e+12 1.138e+11 -1.025e+12 6.693e+10 -9.186e+11 2.910e+10 -8.164e+11 -6.981e+08 -7.192e+11 -2.336e+10 -6.274e+11 -3.976e+10 -5.413e+11 -5.075e+10 -4.615e+11 -5.713e+10 -3.880e+11 -5.966e+10 -3.212e+11 -5.905e+10 -2.610e+11 -5.599e+10 -2.077e+11 -5.110e+10 -1.610e+11 -4.495e+10 -1.209e+11 -3.808e+10 -8.726e+10 -3.095e+10 -5.970e+10 -2.395e+10 -3.796e+10 -1.745e+10 -2.164e+10 -1.172e+10 -1.031e+10 -6.986e+09 -3.489e+09 -3.465e+09 -3.564e+08 -1.440e+09 1.751e+09 -8.297e+08 5.687e+09 -2.110e+08 1.206e+10 1.382e+09 2.045e+10 4.102e+09 3.036e+10 7.863e+09 4.131e+10 1.253e+10 5.288e+10 1.796e+10 6.466e+10 2.396e+10 7.629e+10 3.035e+10 8.746e+10 3.695e+10 9.785e+10 4.358e+10 1.073e+11 5.005e+10 1.155e+11 5.622e+10 1.224e+11 6.194e+10 1.278e+11 6.708e+10 1.318e+11 7.155e+10 1.343e+11 7.527e+10 1.353e+11 7.817e+10 1.349e+11 8.023e+10 1.331e+11 8.144e+10 1.300e+11 8.180e+10 1.258e+11 8.134e+10 1.206e+11 8.012e+10 1.146e+11 7.818e+10 1.079e+11 7.559e+10 1.006e+11 7.244e+10 9.294e+10 6.882e+10 8.505e+10 6.480e+10 7.709e+10 6.047e+10 6.918e+10 5.594e+10 6.142e+10 5.127e+10 5.395e+10 4.656e+10 4.685e+10 4.188e+10 4.018e+10 3.729e+10 3.402e+10 3.287e+10 2.840e+10 2.865e+10 2.334e+10 2.468e+10 1.887e+10 2.101e+10 1.497e+10 1.764e+10 1.163e+10 1.460e+10 8.816e+09 1.190e+10 6.501e+09 9.540e+09 4.634e+09 7.500e+09 3.172e+09 5.776e+09 2.060e+09 4.347e+09 1.244e+09 3.186e+09 6.654e+08 2.278e+09 2.886e+08 1.574e+09 6.176e+07 1.046e+09 -6.040e+07 6.669e+08 -1.131e+08 4.060e+08 -1.239e+08 2.333e+08 -1.120e+08 1.232e+08 -8.883e+07 5.498e+07 -6.069e+07 1.484e+07 -3.272e+07 -5.460e+06 -1.093e+07 -1.312e+07 7.413e+06 -2.210e+07 5.208e+07 -4.295e+07 1.568e+08 -6.866e+07 3.513e+08 -8.739e+07 6.657e+08 -8.483e+07 1.132e+09 -4.419e+07 1.784e+09 5.362e+07 2.652e+09 2.287e+08 3.766e+09 5.022e+08 5.156e+09 8.955e+08 6.841e+09 1.427e+09 8.843e+09 2.117e+09 1.118e+10 2.980e+09 1.385e+10 4.029e+09 1.686e+10 5.273e+09 2.021e+10 6.719e+09 2.387e+10 8.367e+09 2.784e+10 1.022e+10 3.209e+10 1.226e+10 3.659e+10 1.449e+10 4.129e+10 1.688e+10 4.616e+10 1.944e+10 5.115e+10 2.211e+10 5.620e+10 2.490e+10 6.128e+10 2.777e+10 6.630e+10 3.069e+10 7.123e+10 3.364e+10 7.600e+10 3.658e+10 8.055e+10 3.948e+10 8.485e+10 4.232e+10 8.884e+10 4.506e+10 9.248e+10 4.766e+10 9.571e+10 5.011e+10 9.850e+10 5.237e+10 1.008e+11 5.442e+10 1.026e+11 5.622e+10 1.039e+11 5.776e+10 1.047e+11 5.902e+10 1.049e+11 5.998e+10 1.047e+11 6.063e+10 1.039e+11 6.096e+10 1.026e+11 6.097e+10 1.008e+11 6.065e+10 9.855e+10 6.000e+10 9.590e+10 5.904e+10 9.287e+10 5.778e+10 8.950e+10 5.623e+10 8.583e+10 5.441e+10 8.192e+10 5.235e+10 7.780e+10 5.007e+10 7.352e+10 4.760e+10 6.913e+10 4.498e+10 6.468e+10 4.224e+10 6.021e+10 3.940e+10 5.575e+10 3.651e+10 5.136e+10 3.360e+10 4.707e+10 3.071e+10 4.290e+10 2.785e+10 3.889e+10 2.507e+10 3.506e+10 2.239e+10 3.143e+10 1.982e+10 2.802e+10 1.740e+10 2.484e+10 1.513e+10 2.189e+10 1.303e+10 1.918e+10 1.110e+10 1.671e+10 9.356e+09 1.448e+10 7.787e+09 1.248e+10 6.395e+09 1.071e+10 5.172e+09 9.142e+09 4.113e+09 7.778e+09 3.207e+09 6.598e+09 2.441e+09 5.588e+09 1.802e+09 4.735e+09 1.275e+09 4.022e+09 8.461e+08 3.433e+09 5.006e+08 2.956e+09 2.242e+08 2.574e+09 3.105e+06 2.276e+09 -1.751e+08 2.048e+09 -3.211e+08 1.879e+09 -4.441e+08 1.759e+09 -5.503e+08 1.681e+09 -6.444e+08 1.636e+09 -7.289e+08 1.620e+09 -8.048e+08 1.628e+09 -8.721e+08 1.659e+09 -9.303e+08 1.708e+09 -9.786e+08 1.775e+09 -1.016e+09 1.859e+09 -1.041e+09 1.958e+09 -1.054e+09 2.072e+09 -1.054e+09 2.200e+09 -1.039e+09 2.341e+09 -1.010e+09 2.495e+09 -9.652e+08 2.660e+09 -9.052e+08 2.837e+09 -8.290e+08 3.022e+09 -7.362e+08 3.217e+09 -6.265e+08 3.417e+09 -4.997e+08 3.623e+09 -3.559e+08 3.831e+09 -1.951e+08 4.040e+09 -1.814e+07 4.246e+09 1.741e+08 4.447e+09 3.803e+08 4.639e+09 5.986e+08 4.820e+09 8.265e+08 4.987e+09 1.062e+09 5.135e+09 1.301e+09 5.262e+09 1.540e+09 5.366e+09 1.775e+09 5.443e+09 2.003e+09 5.492e+09 2.219e+09 5.510e+09 2.420e+09 5.496e+09 2.603e+09 5.449e+09 2.763e+09 5.370e+09 2.899e+09 5.257e+09 3.007e+09 5.113e+09 3.086e+09 4.938e+09 3.134e+09 4.735e+09 3.151e+09 4.506e+09 3.138e+09 4.255e+09 3.094e+09 3.984e+09 3.022e+09 3.698e+09 2.924e+09 3.401e+09 2.802e+09 3.096e+09 2.659e+09 2.790e+09 2.498e+09 2.484e+09 2.323e+09 2.185e+09 2.138e+09 1.895e+09 1.945e+09 1.619e+09 1.748e+09 1.359e+09 1.551e+09 1.119e+09 1.356e+09 9.007e+08 1.167e+09 7.055e+08 9.869e+08 5.349e+08 8.171e+08 3.890e+08 6.599e+08 2.679e+08 5.172e+08 1.709e+08 3.906e+08 9.662e+07 2.811e+08 4.345e+07 1.899e+08 8.977e+06 1.176e+08 -1.009e+07 6.459e+07 -1.901e+07 3.031e+07 -2.654e+07 9.578e+06 -4.071e+07 -1.010e+07 -6.274e+07 -4.105e+07 -8.932e+07 -8.928e+07 -1.168e+08 -1.567e+08 -1.418e+08 -2.440e+08 -1.612e+08 -3.513e+08 -1.721e+08 -4.792e+08 -1.712e+08 -6.279e+08 -1.557e+08 -7.976e+08 -1.223e+08 -9.889e+08 -6.774e+07 -1.202e+09 1.121e+07 -1.438e+09 1.182e+08 -1.697e+09 2.566e+08 -1.978e+09 4.303e+08 -2.284e+09 6.430e+08 -2.614e+09 8.986e+08 -2.968e+09 1.201e+09 -3.347e+09 1.554e+09 -3.751e+09 1.961e+09 -4.180e+09 2.427e+09 -4.635e+09 2.954e+09 -5.117e+09 3.547e+09 -5.625e+09 4.207e+09 -6.161e+09 4.939e+09 -6.726e+09 5.743e+09 -7.319e+09 6.623e+09 -7.943e+09 7.579e+09 -8.600e+09 8.612e+09 -9.289e+09 9.722e+09 -1.001e+10 1.091e+10 -1.077e+10 1.217e+10 -1.157e+10 1.350e+10 -1.240e+10 1.491e+10 -1.328e+10 1.637e+10 -1.419e+10 1.790e+10 -1.515e+10 1.949e+10 -1.614e+10 2.112e+10 -1.717e+10 2.278e+10 -1.824e+10 2.448e+10 -1.933e+10 2.620e+10 -2.046e+10 2.793e+10 -2.161e+10 2.966e+10 -2.277e+10 3.137e+10 -2.394e+10 3.306e+10 -2.511e+10 3.471e+10 -2.627e+10 3.631e+10 -2.741e+10 3.785e+10 -2.852e+10 3.931e+10 -2.959e+10 4.067e+10 -3.060e+10 4.193e+10 -3.155e+10 4.308e+10 -3.242e+10 4.410e+10 -3.321e+10 4.499e+10 -3.390e+10 4.574e+10 -3.448e+10 4.633e+10 -3.496e+10 4.677e+10 -3.531e+10 4.704e+10 -3.553e+10 4.716e+10 -3.563e+10 4.711e+10 -3.560e+10 4.690e+10 -3.543e+10 4.652e+10 -3.513e+10 4.599e+10 -3.469e+10 4.531e+10 -3.413e+10 4.448e+10 -3.344e+10 4.351e+10 -3.263e+10 4.240e+10 -3.170e+10 4.117e+10 -3.065e+10 3.983e+10 -2.950e+10 3.838e+10 -2.826e+10 3.683e+10 -2.691e+10 3.520e+10 -2.549e+10 3.349e+10 -2.398e+10 3.172e+10 -2.241e+10 2.990e+10 -2.078e+10 2.804e+10 -1.911e+10 2.614e+10 -1.740e+10 2.423e+10 -1.567e+10 2.232e+10 -1.394e+10 2.041e+10 -1.221e+10 1.853e+10 -1.051e+10 1.668e+10 -8.855e+09 1.488e+10 -7.260e+09 1.314e+10 -5.750e+09 1.149e+10 -4.340e+09 9.940e+09 -3.047e+09 8.506e+09 -1.886e+09 7.210e+09 -8.632e+08 6.073e+09 2.699e+07 5.116e+09 8.063e+08 4.350e+09 1.523e+09 3.765e+09 2.256e+09 3.329e+09 3.098e+09 2.980e+09 4.147e+09 2.642e+09 5.484e+09 2.242e+09 7.162e+09 1.718e+09 9.212e+09 1.022e+09 1.165e+10 1.190e+08 1.448e+10 -1.018e+09 1.770e+10 -2.409e+09 2.130e+10 -4.068e+09 2.526e+10 -6.004e+09 2.956e+10 -8.226e+09 3.419e+10 -1.074e+10 3.911e+10 -1.353e+10 4.429e+10 -1.662e+10 4.971e+10 -1.998e+10 5.532e+10 -2.362e+10 6.108e+10 -2.752e+10 6.697e+10 -3.167e+10 7.294e+10 -3.606e+10 7.894e+10 -4.067e+10 8.495e+10 -4.549e+10 9.092e+10 -5.048e+10 9.680e+10 -5.564e+10 1.026e+11 -6.095e+10 1.082e+11 -6.636e+10 1.136e+11 -7.186e+10 1.188e+11 -7.744e+10 1.237e+11 -8.305e+10 1.283e+11 -8.867e+10 1.326e+11 -9.428e+10 1.366e+11 -9.985e+10 1.401e+11 -1.053e+11 1.432e+11 -1.107e+11 1.459e+11 -1.160e+11 1.481e+11 -1.211e+11 1.499e+11 -1.260e+11 1.511e+11 -1.307e+11 1.518e+11 -1.352e+11 1.519e+11 -1.395e+11 1.515e+11 -1.434e+11 1.505e+11 -1.471e+11 1.490e+11 -1.504e+11 1.470e+11 -1.534e+11 1.444e+11 -1.560e+11 1.413e+11 -1.583e+11 1.376e+11 -1.601e+11 1.336e+11 -1.616e+11 1.290e+11 -1.626e+11 1.241e+11 -1.633e+11 1.188e+11 -1.635e+11 1.131e+11 -1.632e+11 1.072e+11 0.005 -50.510 -49.519 -48.529 -47.539 -46.598 -45.749 -44.984 -44.297 -43.683 -43.138 -42.659 -42.243 -41.887 -41.591 -41.352 -41.171 -41.045 -40.976 -40.963 -41.007 -41.108 -41.269 -41.490 -41.774 -42.123 -42.541 -43.032 -43.600 -44.252 -44.995 -45.836 -46.788 -47.862 -49.074 -50.445 -52.000 -53.771 -55.798 -58.126 -60.799 -63.822 -67.047 -69.988 -72.035 -73.080 -72.547 -69.552 -65.526 -61.781 -58.566 -55.819 -53.449 -51.384 -49.566 -47.954 -46.516 -45.229 -44.073 -43.034 -42.100 -41.261 -40.510 -39.840 -39.246 -38.724 -38.270 -37.881 -37.556 -37.293 -37.090 -36.946 -36.862 -36.836 -36.870 -36.964 -37.119 -37.336 -37.618 -37.966 -38.383 -38.873 -39.439 -40.086 -40.819 -41.642 -42.561 -43.582 -44.710 -45.945 -47.286 -48.718 -50.212 -51.706 -53.100 -54.244 -54.965 -55.116 -54.639 -53.599 -52.152 -50.473 -48.710 -46.961 -45.281 -43.698 -42.224 -40.861 -39.604 -38.451 -37.395 -36.431 -35.553 -34.758 -34.042 -33.400 -32.830 -32.331 -31.899 -31.535 -31.237 -31.005 -30.839 -30.742 -30.714 -30.757 -30.875 -31.070 -31.348 -31.715 -32.179 -32.749 -33.439 -34.264 -35.247 -36.416 -37.814 -39.501 -41.570 -44.182 -47.639 -52.598 -58.821 -60.849 -56.237 -54.367 -55.069 -59.474 -61.679 -52.215 -45.313 -40.635 -37.002 -33.994 -31.408 -29.131 -27.094 -25.248 -23.560 -22.005 -20.564 -19.222 -17.969 -16.794 -15.689 -14.649 -13.667 -12.739 -11.862 -11.031 -10.243 -9.497 -8.789 -8.118 -7.481 -6.878 -6.306 -5.765 -5.253 -4.769 -4.312 -3.882 -3.477 -3.097 -2.741 -2.409 -2.100 -1.813 -1.549 -1.307 -1.085 -0.885 -0.706 -0.548 -0.410 -0.292 -0.194 -0.116 -0.057 -0.019 0.000 -0.001 -0.021 -0.060 -0.120 -0.199 -0.298 -0.417 -0.556 -0.716 -0.896 -1.097 -1.319 -1.563 -1.829 -2.116 -2.427 -2.760 -3.117 -3.498 -3.904 -4.336 -4.794 -5.280 -5.793 -6.336 -6.909 -7.515 -8.153 -8.826 -9.536 -10.285 -11.075 -11.909 -12.790 -13.721 -14.706 -15.751 -16.860 -18.041 -19.301 -20.649 -22.098 -23.663 -25.363 -27.222 -29.272 -31.560 -34.146 -37.114 -40.554 -44.415 -47.843 -49.150 -48.617 -47.856 -47.603 -47.829 -48.160 -47.935 -46.689 -44.703 -42.541 -40.531 -38.770 -37.255 -35.960 -34.855 -33.914 -33.117 -32.445 -31.886 -31.429 -31.065 -30.786 -30.588 -30.466 -30.416 -30.435 -30.521 -30.674 -30.891 -31.173 -31.520 -31.932 -32.410 -32.956 -33.572 -34.261 -35.027 -35.874 -36.806 -37.830 -38.953 -40.184 -41.531 -43.005 -44.618 -46.378 -48.293 -50.356 -52.538 -54.754 -56.828 -58.468 -59.337 -59.245 -58.293 -56.775 -54.993 -53.159 -51.393 -49.751 -48.252 -46.900 -45.688 -44.608 -43.649 -42.802 -42.058 -41.411 -40.854 -40.381 -39.988 -39.671 -39.427 -39.253 -39.147 -39.108 -39.136 -39.229 -39.387 -39.612 -39.905 -40.266 -40.698 -41.203 -41.787 -42.451 -43.203 -44.047 -44.993 -46.047 -47.222 -48.527 -49.976 -51.579 -53.340 -55.248 -57.255 -59.254 -61.077 -62.585 -63.832 -65.122 -66.960 -70.252 -78.237 -77.209 -67.518 -62.304 -58.705 -55.923 -53.656 -51.749 -50.114 -48.694 -47.450 -46.355 -45.387 -44.531 -43.775 -43.109 -42.527 -42.020 -41.585 -41.217 -40.912 -40.668 -40.482 -40.353 -40.279 -40.258 -40.291 -40.377 -40.515 -40.705 -40.949 -41.247 -41.600 -42.009 -42.477 -43.005 -43.597 -44.255 -44.984 -45.788 -46.673 -47.647 -48.667 -49.688 -50.709 0 1 1.0 4353721066.7 S2 HH 20.21 25.51 0.05 -1.327e+10 -2.841e+10 -1.437e+10 -2.518e+10 -1.516e+10 -2.208e+10 -1.566e+10 -1.913e+10 -1.588e+10 -1.634e+10 -1.585e+10 -1.371e+10 -1.557e+10 -1.125e+10 -1.506e+10 -8.966e+09 -1.433e+10 -6.876e+09 -1.341e+10 -4.984e+09 -1.231e+10 -3.302e+09 -1.106e+10 -1.841e+09 -9.700e+09 -6.091e+08 -8.257e+09 3.883e+08 -6.785e+09 1.148e+09 -5.337e+09 1.674e+09 -3.968e+09 1.989e+09 -2.737e+09 2.131e+09 -1.682e+09 2.162e+09 -7.959e+08 2.173e+09 1.468e+07 2.269e+09 9.468e+08 2.514e+09 2.238e+09 2.885e+09 4.091e+09 3.290e+09 6.654e+09 3.611e+09 1.004e+10 3.722e+09 1.433e+10 3.494e+09 1.957e+10 2.797e+09 2.581e+10 1.496e+09 3.306e+10 -5.426e+08 4.130e+10 -3.451e+09 5.052e+10 -7.365e+09 6.063e+10 -1.241e+10 7.154e+10 -1.869e+10 8.316e+10 -2.632e+10 9.531e+10 -3.539e+10 1.078e+11 -4.596e+10 1.205e+11 -5.808e+10 1.331e+11 -7.177e+10 1.453e+11 -8.701e+10 1.570e+11 -1.038e+11 1.678e+11 -1.220e+11 1.773e+11 -1.416e+11 1.854e+11 -1.624e+11 1.917e+11 -1.842e+11 1.959e+11 -2.069e+11 1.978e+11 -2.303e+11 1.970e+11 -2.540e+11 1.933e+11 -2.780e+11 1.866e+11 -3.019e+11 1.766e+11 -3.255e+11 1.632e+11 -3.486e+11 1.463e+11 -3.710e+11 1.258e+11 -3.926e+11 1.015e+11 -4.133e+11 7.335e+10 -4.331e+11 4.109e+10 -4.520e+11 4.512e+09 -4.701e+11 -3.685e+10 -4.877e+11 -8.366e+10 -5.050e+11 -1.367e+11 -5.222e+11 -1.971e+11 -5.396e+11 -2.665e+11 -5.573e+11 -3.466e+11 -5.750e+11 -4.397e+11 -5.926e+11 -5.483e+11 -6.095e+11 -6.751e+11 -6.248e+11 -8.234e+11 -6.371e+11 -9.970e+11 -6.446e+11 -1.199e+12 -6.453e+11 -1.433e+12 -6.368e+11 -1.702e+12 -6.161e+11 -2.012e+12 -5.800e+11 -2.364e+12 -5.250e+11 -2.764e+12 -4.472e+11 -3.214e+12 -3.424e+11 -3.718e+12 -2.062e+11 -4.281e+12 -3.356e+10 -4.905e+12 1.802e+11 -5.593e+12 4.404e+11 -6.350e+12 7.527e+11 -7.177e+12 1.122e+12 -8.076e+12 1.555e+12 -9.051e+12 2.057e+12 -1.010e+13 2.634e+12 -1.123e+13 3.292e+12 -1.244e+13 4.037e+12 -1.374e+13 4.874e+12 -1.511e+13 5.809e+12 -1.656e+13 6.849e+12 -1.810e+13 7.998e+12 -1.971e+13 9.261e+12 -2.141e+13 1.064e+13 -2.318e+13 1.215e+13 -2.502e+13 1.378e+13 -2.694e+13 1.555e+13 -2.893e+13 1.745e+13 -3.098e+13 1.949e+13 -3.309e+13 2.166e+13 -3.527e+13 2.398e+13 -3.749e+13 2.644e+13 -3.978e+13 2.904e+13 -4.211e+13 3.179e+13 -4.448e+13 3.467e+13 -4.689e+13 3.769e+13 -4.932e+13 4.085e+13 -5.177e+13 4.414e+13 -5.424e+13 4.755e+13 -5.672e+13 5.109e+13 -5.920e+13 5.474e+13 -6.168e+13 5.851e+13 -6.414e+13 6.237e+13 -6.659e+13 6.632e+13 -6.902e+13 7.036e+13 -7.142e+13 7.448e+13 -7.378e+13 7.866e+13 -7.611e+13 8.289e+13 -7.839e+13 8.717e+13 -8.062e+13 9.148e+13 -8.281e+13 9.581e+13 -8.493e+13 1.001e+14 -8.700e+13 1.045e+14 -8.900e+13 1.088e+14 -9.094e+13 1.131e+14 -9.281e+13 1.174e+14 -9.462e+13 1.216e+14 -9.636e+13 1.258e+14 -9.803e+13 1.299e+14 -9.964e+13 1.339e+14 -1.012e+14 1.378e+14 -1.026e+14 1.416e+14 -1.041e+14 1.454e+14 -1.054e+14 1.490e+14 -1.067e+14 1.525e+14 -1.079e+14 1.559e+14 -1.091e+14 1.591e+14 -1.103e+14 1.623e+14 -1.114e+14 1.652e+14 -1.124e+14 1.681e+14 -1.135e+14 1.708e+14 -1.145e+14 1.734e+14 -1.155e+14 1.758e+14 -1.165e+14 1.782e+14 -1.175e+14 1.804e+14 -1.184e+14 1.825e+14 -1.194e+14 1.844e+14 -1.204e+14 1.862e+14 -1.213e+14 1.878e+14 -1.223e+14 1.894e+14 -1.233e+14 1.907e+14 -1.243e+14 1.920e+14 -1.254e+14 1.932e+14 -1.265e+14 1.942e+14 -1.276e+14 1.951e+14 -1.287e+14 1.959e+14 -1.299e+14 1.966e+14 -1.311e+14 1.973e+14 -1.324e+14 1.978e+14 -1.337e+14 1.982e+14 -1.350e+14 1.986e+14 -1.364e+14 1.989e+14 -1.378e+14 1.992e+14 -1.393e+14 1.994e+14 -1.408e+14 1.996e+14 -1.424e+14 1.997e+14 -1.440e+14 1.998e+14 -1.457e+14 1.998e+14 -1.474e+14 1.998e+14 -1.491e+14 1.998e+14 -1.509e+14 1.998e+14 -1.527e+14 1.998e+14 -1.545e+14 1.998e+14 -1.563e+14 1.997e+14 -1.582e+14 1.997e+14 -1.600e+14 1.997e+14 -1.619e+14 1.996e+14 -1.637e+14 1.996e+14 -1.655e+14 1.995e+14 -1.673e+14 1.995e+14 -1.691e+14 1.994e+14 -1.708e+14 1.994e+14 -1.725e+14 1.993e+14 -1.740e+14 1.993e+14 -1.755e+14 1.992e+14 -1.770e+14 1.991e+14 -1.783e+14 1.990e+14 -1.795e+14 1.989e+14 -1.806e+14 1.987e+14 -1.816e+14 1.985e+14 -1.824e+14 1.983e+14 -1.831e+14 1.980e+14 -1.837e+14 1.977e+14 -1.841e+14 1.972e+14 -1.843e+14 1.967e+14 -1.843e+14 1.962e+14 -1.841e+14 1.955e+14 -1.838e+14 1.948e+14 -1.832e+14 1.940e+14 -1.824e+14 1.930e+14 -1.814e+14 1.920e+14 -1.802e+14 1.908e+14 -1.788e+14 1.895e+14 -1.772e+14 1.881e+14 -1.753e+14 1.866e+14 -1.733e+14 1.849e+14 -1.710e+14 1.831e+14 -1.684e+14 1.811e+14 -1.657e+14 1.790e+14 -1.628e+14 1.768e+14 -1.597e+14 1.744e+14 -1.564e+14 1.719e+14 -1.529e+14 1.693e+14 -1.492e+14 1.664e+14 -1.453e+14 1.635e+14 -1.414e+14 1.604e+14 -1.372e+14 1.572e+14 -1.330e+14 1.539e+14 -1.286e+14 1.504e+14 -1.241e+14 1.468e+14 -1.196e+14 1.431e+14 -1.150e+14 1.393e+14 -1.104e+14 1.354e+14 -1.057e+14 1.315e+14 -1.010e+14 1.274e+14 -9.632e+13 1.233e+14 -9.163e+13 1.191e+14 -8.696e+13 1.149e+14 -8.233e+13 1.107e+14 -7.776e+13 1.064e+14 -7.325e+13 1.021e+14 -6.882e+13 9.776e+13 -6.448e+13 9.345e+13 -6.025e+13 8.916e+13 -5.612e+13 8.490e+13 -5.213e+13 8.067e+13 -4.827e+13 7.650e+13 -4.455e+13 7.239e+13 -4.098e+13 6.835e+13 -3.756e+13 6.439e+13 -3.430e+13 6.052e+13 -3.121e+13 5.675e+13 -2.828e+13 5.309e+13 -2.551e+13 4.954e+13 -2.291e+13 4.611e+13 -2.048e+13 4.280e+13 -1.821e+13 3.962e+13 -1.611e+13 3.658e+13 -1.416e+13 3.368e+13 -1.237e+13 3.092e+13 -1.073e+13 2.829e+13 -9.230e+12 2.581e+13 -7.871e+12 2.347e+13 -6.646e+12 2.128e+13 -5.547e+12 1.922e+13 -4.567e+12 1.730e+13 -3.699e+12 1.552e+13 -2.936e+12 1.386e+13 -2.270e+12 1.234e+13 -1.694e+12 1.094e+13 -1.201e+12 9.657e+12 -7.832e+11 8.489e+12 -4.333e+11 7.431e+12 -1.446e+11 6.475e+12 8.980e+10 5.615e+12 2.759e+11 4.846e+12 4.200e+11 4.161e+12 5.277e+11 3.554e+12 6.043e+11 3.020e+12 6.548e+11 2.552e+12 6.838e+11 2.144e+12 6.953e+11 1.791e+12 6.930e+11 1.487e+12 6.801e+11 1.227e+12 6.595e+11 1.006e+12 6.335e+11 8.186e+11 6.041e+11 6.604e+11 5.728e+11 5.275e+11 5.408e+11 4.162e+11 5.087e+11 3.229e+11 4.772e+11 2.449e+11 4.464e+11 1.797e+11 4.164e+11 1.250e+11 3.872e+11 7.941e+10 3.587e+11 4.138e+10 3.306e+11 9.857e+09 3.030e+11 -1.592e+10 2.757e+11 -3.664e+10 2.488e+11 -5.284e+10 2.224e+11 -6.492e+10 1.966e+11 -7.332e+10 1.715e+11 -7.839e+10 1.474e+11 -8.051e+10 1.245e+11 -8.006e+10 1.031e+11 -7.741e+10 8.329e+10 -7.298e+10 6.533e+10 -6.716e+10 4.935e+10 -6.035e+10 3.546e+10 -5.297e+10 2.371e+10 -4.540e+10 1.405e+10 -3.800e+10 6.980e+09 -3.122e+10 7.226e+08 -2.524e+10 -3.921e+09 -2.026e+10 -7.780e+09 -1.637e+10 -1.155e+10 -1.341e+10 -1.586e+10 -1.094e+10 -2.111e+10 -8.429e+09 -2.742e+10 -5.411e+09 -3.470e+10 -1.558e+09 -4.277e+10 3.285e+09 -5.139e+10 9.169e+09 -6.033e+10 1.607e+10 -6.933e+10 2.386e+10 -7.817e+10 3.243e+10 -8.665e+10 4.161e+10 -9.456e+10 5.121e+10 -1.018e+11 6.104e+10 -1.081e+11 7.090e+10 -1.134e+11 8.060e+10 -1.177e+11 8.996e+10 -1.209e+11 9.880e+10 -1.229e+11 1.069e+11 -1.238e+11 1.143e+11 -1.236e+11 1.207e+11 -1.222e+11 1.261e+11 -1.199e+11 1.303e+11 -1.166e+11 1.334e+11 -1.124e+11 1.354e+11 -1.075e+11 1.362e+11 -1.020e+11 1.358e+11 -9.597e+10 1.343e+11 -8.954e+10 1.318e+11 -8.282e+10 1.283e+11 -7.595e+10 1.239e+11 -6.902e+10 1.188e+11 -6.214e+10 1.130e+11 -5.542e+10 1.067e+11 -4.893e+10 9.995e+10 -4.273e+10 9.288e+10 -3.691e+10 8.564e+10 -3.149e+10 7.832e+10 -2.653e+10 7.104e+10 -2.203e+10 6.389e+10 -1.802e+10 5.694e+10 -1.448e+10 5.027e+10 -1.142e+10 4.394e+10 -8.814e+09 3.801e+10 -6.634e+09 3.251e+10 -4.853e+09 2.748e+10 -3.434e+09 2.292e+10 -2.336e+09 1.885e+10 -1.519e+09 1.526e+10 -9.403e+08 1.214e+10 -5.569e+08 9.463e+09 -3.287e+08 7.213e+09 -2.168e+08 5.353e+09 -1.855e+08 3.851e+09 -2.035e+08 2.673e+09 -2.446e+08 1.780e+09 -2.913e+08 1.136e+09 -3.407e+08 7.060e+08 -4.144e+08 4.438e+08 -5.566e+08 2.907e+08 -8.122e+08 1.816e+08 -1.209e+09 7.382e+07 -1.761e+09 -4.299e+07 -2.480e+09 -1.584e+08 -3.380e+09 -2.529e+08 -4.474e+09 -3.034e+08 -5.775e+09 -2.849e+08 -7.296e+09 -1.718e+08 -9.046e+09 6.203e+07 -1.103e+10 4.421e+08 -1.326e+10 9.941e+08 -1.573e+10 1.742e+09 -1.844e+10 2.708e+09 -2.138e+10 3.911e+09 -2.454e+10 5.369e+09 -2.789e+10 7.092e+09 -3.142e+10 9.090e+09 -3.509e+10 1.136e+10 -3.888e+10 1.391e+10 -4.276e+10 1.672e+10 -4.666e+10 1.977e+10 -5.056e+10 2.306e+10 -5.440e+10 2.653e+10 -5.814e+10 3.018e+10 -6.172e+10 3.394e+10 -6.510e+10 3.778e+10 -6.824e+10 4.166e+10 -7.108e+10 4.551e+10 -7.359e+10 4.928e+10 -7.574e+10 5.293e+10 -7.749e+10 5.639e+10 -7.881e+10 5.962e+10 -7.969e+10 6.256e+10 -8.011e+10 6.516e+10 -8.007e+10 6.738e+10 -7.956e+10 6.918e+10 -7.860e+10 7.054e+10 -7.719e+10 7.142e+10 -7.535e+10 7.181e+10 -7.311e+10 7.170e+10 -7.050e+10 7.109e+10 -6.755e+10 6.997e+10 -6.431e+10 6.838e+10 -6.081e+10 6.632e+10 -5.711e+10 6.383e+10 -5.324e+10 6.094e+10 -4.926e+10 5.770e+10 -4.522e+10 5.415e+10 -4.116e+10 5.034e+10 -3.713e+10 4.634e+10 -3.317e+10 4.219e+10 -2.933e+10 3.797e+10 -2.564e+10 3.372e+10 -2.214e+10 2.952e+10 -1.885e+10 2.542e+10 -1.581e+10 2.148e+10 -1.302e+10 1.776e+10 -1.051e+10 1.430e+10 -8.280e+09 1.115e+10 -6.338e+09 8.342e+09 -4.684e+09 5.919e+09 -3.309e+09 3.900e+09 -2.206e+09 2.305e+09 -1.361e+09 1.142e+09 -7.673e+08 3.948e+08 -4.351e+08 -2.002e+07 -3.306e+08 -3.720e+08 -3.115e+08 -9.640e+08 -2.595e+08 -1.915e+09 -1.484e+08 -3.219e+09 5.998e+06 -4.843e+09 1.778e+08 -6.743e+09 3.391e+08 -8.875e+09 4.631e+08 -1.119e+10 5.245e+08 -1.365e+10 5.010e+08 -1.619e+10 3.732e+08 -1.876e+10 1.252e+08 -2.132e+10 -2.550e+08 -2.382e+10 -7.762e+08 -2.622e+10 -1.443e+09 -2.847e+10 -2.255e+09 -3.054e+10 -3.211e+09 -3.240e+10 -4.305e+09 -3.403e+10 -5.527e+09 -3.539e+10 -6.870e+09 -3.650e+10 -8.318e+09 -3.732e+10 -9.859e+09 -3.787e+10 -1.148e+10 -3.814e+10 -1.317e+10 -3.815e+10 -1.491e+10 -3.790e+10 -1.669e+10 -3.742e+10 -1.850e+10 -3.672e+10 -2.035e+10 -3.582e+10 -2.221e+10 -3.475e+10 -2.410e+10 -3.352e+10 -2.602e+10 -3.216e+10 -2.797e+10 -3.069e+10 -2.996e+10 -2.912e+10 -3.201e+10 -2.746e+10 -3.413e+10 -2.572e+10 -3.632e+10 -2.389e+10 -3.860e+10 -2.198e+10 -4.097e+10 -1.998e+10 -4.345e+10 -1.789e+10 -4.603e+10 -1.569e+10 -4.872e+10 -1.336e+10 -5.150e+10 -1.092e+10 -5.438e+10 -8.334e+09 -5.733e+10 -5.608e+09 -6.035e+10 -2.737e+09 -6.340e+10 2.781e+08 -6.647e+10 3.435e+09 -6.953e+10 6.724e+09 -7.254e+10 1.013e+10 -7.549e+10 1.364e+10 -7.834e+10 1.723e+10 -8.106e+10 2.087e+10 -8.363e+10 2.455e+10 -8.601e+10 2.823e+10 -8.817e+10 3.187e+10 -9.010e+10 3.545e+10 -9.177e+10 3.894e+10 -9.316e+10 4.229e+10 -9.426e+10 4.548e+10 -9.506e+10 4.848e+10 -9.553e+10 5.126e+10 -9.569e+10 5.380e+10 -9.552e+10 5.606e+10 -9.503e+10 5.804e+10 -9.423e+10 5.970e+10 -9.311e+10 6.105e+10 -9.170e+10 6.208e+10 -9.000e+10 6.277e+10 -8.804e+10 6.314e+10 -8.583e+10 6.317e+10 -8.339e+10 6.289e+10 -8.075e+10 6.231e+10 -7.795e+10 6.144e+10 -7.499e+10 6.029e+10 -7.191e+10 5.889e+10 -6.872e+10 5.726e+10 -6.544e+10 5.543e+10 -6.211e+10 5.340e+10 -5.875e+10 5.123e+10 -5.538e+10 4.892e+10 -5.203e+10 4.651e+10 -4.871e+10 4.402e+10 -4.544e+10 4.148e+10 -4.224e+10 3.891e+10 -3.913e+10 3.633e+10 -3.612e+10 3.378e+10 -3.322e+10 3.126e+10 -3.044e+10 2.879e+10 -2.778e+10 2.640e+10 -2.527e+10 2.408e+10 -2.289e+10 2.187e+10 -2.065e+10 1.976e+10 -1.856e+10 1.776e+10 -1.661e+10 1.588e+10 -1.481e+10 1.412e+10 -1.314e+10 1.249e+10 -1.161e+10 1.098e+10 -1.021e+10 9.598e+09 -8.941e+09 8.335e+09 -7.790e+09 7.193e+09 -6.755e+09 6.164e+09 -5.827e+09 5.244e+09 -5.000e+09 4.429e+09 -4.269e+09 3.710e+09 -3.623e+09 3.082e+09 -3.060e+09 2.538e+09 -2.570e+09 2.071e+09 -2.145e+09 1.672e+09 -1.781e+09 1.336e+09 -1.470e+09 1.054e+09 -1.206e+09 8.216e+08 -9.839e+08 6.315e+08 -7.989e+08 4.779e+08 -6.456e+08 3.554e+08 -5.198e+08 2.591e+08 -4.173e+08 1.845e+08 -3.346e+08 1.276e+08 -2.685e+08 8.490e+07 -2.161e+08 5.346e+07 -1.750e+08 3.065e+07 -1.430e+08 1.441e+07 -1.182e+08 3.042e+06 -9.928e+07 -4.795e+06 -8.483e+07 -1.008e+07 -7.389e+07 -1.354e+07 -6.565e+07 -1.568e+07 -5.955e+07 -1.686e+07 -5.513e+07 -1.734e+07 -5.209e+07 -1.730e+07 -5.020e+07 -1.688e+07 -4.931e+07 -1.619e+07 -4.932e+07 -1.532e+07 -5.017e+07 -1.434e+07 -5.178e+07 -1.331e+07 -5.411e+07 -1.226e+07 -5.712e+07 -1.126e+07 -6.072e+07 -1.034e+07 -6.484e+07 -9.557e+06 -6.938e+07 -8.967e+06 -7.423e+07 -8.636e+06 -7.926e+07 -8.633e+06 -8.433e+07 -9.028e+06 -8.929e+07 -9.882e+06 -9.400e+07 -1.125e+07 -9.831e+07 -1.318e+07 -1.021e+08 -1.569e+07 -1.052e+08 -1.878e+07 -1.075e+08 -2.245e+07 -1.090e+08 -2.666e+07 -1.095e+08 -3.135e+07 -1.091e+08 -3.647e+07 -1.077e+08 -4.194e+07 -1.053e+08 -4.766e+07 -1.019e+08 -5.357e+07 -9.761e+07 -5.958e+07 -9.242e+07 -6.564e+07 -8.640e+07 -7.167e+07 -7.961e+07 -7.764e+07 -7.208e+07 -8.353e+07 -6.384e+07 -8.933e+07 -5.494e+07 -9.505e+07 -4.532e+07 -1.007e+08 -3.491e+07 -1.064e+08 -2.362e+07 -1.122e+08 -1.125e+07 -1.180e+08 2.429e+06 -1.241e+08 1.772e+07 -1.302e+08 3.499e+07 -1.365e+08 5.470e+07 -1.429e+08 7.734e+07 -1.492e+08 1.035e+08 -1.552e+08 1.338e+08 -1.607e+08 0.005 -53.436 -52.380 -51.324 -50.268 -49.212 -48.167 -47.229 -46.389 -45.637 -44.969 -44.377 -43.858 -43.408 -43.025 -42.706 -42.449 -42.254 -42.119 -42.044 -42.030 -42.076 -42.183 -42.354 -42.590 -42.892 -43.266 -43.713 -44.240 -44.851 -45.554 -46.357 -47.272 -48.312 -49.494 -50.842 -52.385 -54.163 -56.235 -58.686 -61.647 -65.335 -70.087 -75.782 -77.807 -75.651 -73.133 -70.239 -66.764 -63.235 -60.025 -57.212 -54.767 -52.627 -50.741 -49.070 -47.581 -46.248 -45.054 -43.981 -43.018 -42.155 -41.382 -40.695 -40.086 -39.551 -39.088 -38.693 -38.363 -38.098 -37.895 -37.754 -37.675 -37.657 -37.702 -37.810 -37.982 -38.220 -38.527 -38.905 -39.359 -39.891 -40.507 -41.213 -42.015 -42.921 -43.939 -45.077 -46.345 -47.752 -49.303 -50.997 -52.826 -54.773 -56.824 -58.997 -61.354 -63.741 -64.546 -61.950 -58.122 -54.628 -51.659 -49.112 -46.897 -44.948 -43.217 -41.669 -40.280 -39.029 -37.900 -36.882 -35.965 -35.140 -34.402 -33.745 -33.166 -32.661 -32.228 -31.865 -31.571 -31.346 -31.190 -31.104 -31.089 -31.147 -31.281 -31.496 -31.795 -32.186 -32.675 -33.273 -33.992 -34.848 -35.861 -37.058 -38.474 -40.158 -42.173 -44.607 -47.549 -50.978 -54.243 -55.888 -56.200 -56.942 -58.212 -55.231 -49.421 -44.382 -40.338 -36.985 -34.124 -31.618 -29.386 -27.371 -25.536 -23.851 -22.294 -20.848 -19.499 -18.238 -17.053 -15.939 -14.889 -13.897 -12.959 -12.071 -11.230 -10.433 -9.677 -8.960 -8.280 -7.634 -7.022 -6.442 -5.893 -5.373 -4.881 -4.417 -3.980 -3.568 -3.181 -2.819 -2.481 -2.165 -1.873 -1.603 -1.355 -1.129 -0.924 -0.740 -0.577 -0.434 -0.312 -0.210 -0.128 -0.066 -0.024 -0.002 0.000 -0.018 -0.054 -0.111 -0.188 -0.284 -0.402 -0.539 -0.697 -0.876 -1.076 -1.298 -1.541 -1.807 -2.095 -2.406 -2.741 -3.099 -3.483 -3.891 -4.326 -4.788 -5.278 -5.797 -6.347 -6.927 -7.541 -8.189 -8.874 -9.597 -10.361 -11.168 -12.023 -12.927 -13.887 -14.906 -15.990 -17.147 -18.386 -19.717 -21.155 -22.717 -24.428 -26.322 -28.447 -30.878 -33.742 -37.270 -41.976 -49.250 -54.691 -47.972 -44.510 -42.799 -42.041 -41.928 -42.324 -43.141 -44.246 -45.281 -45.559 -44.589 -42.776 -40.803 -38.998 -37.439 -36.115 -34.997 -34.057 -33.271 -32.619 -32.085 -31.658 -31.327 -31.086 -30.928 -30.848 -30.843 -30.909 -31.046 -31.251 -31.523 -31.864 -32.272 -32.750 -33.300 -33.923 -34.622 -35.402 -36.268 -37.226 -38.283 -39.448 -40.732 -42.149 -43.715 -45.449 -47.375 -49.519 -51.907 -54.554 -57.433 -60.384 -62.949 -64.369 -64.152 -62.587 -60.317 -57.857 -55.485 -53.315 -51.375 -49.657 -48.142 -46.809 -45.636 -44.607 -43.707 -42.923 -42.246 -41.667 -41.180 -40.779 -40.458 -40.215 -40.046 -39.950 -39.924 -39.968 -40.080 -40.263 -40.515 -40.838 -41.235 -41.707 -42.257 -42.890 -43.611 -44.425 -45.340 -46.362 -47.501 -48.766 -50.165 -51.701 -53.369 -55.139 -56.942 -58.657 -60.132 -61.294 -62.239 -63.228 -64.599 -66.747 -69.896 -71.630 -67.374 -62.599 -58.953 -56.093 -53.758 -51.796 -50.115 -48.656 -47.377 -46.250 -45.253 -44.370 -43.588 -42.897 -42.289 -41.757 -41.296 -40.901 -40.569 -40.297 -40.082 -39.922 -39.816 -39.761 -39.758 -39.805 -39.902 -40.049 -40.245 -40.492 -40.789 -41.137 -41.538 -41.994 -42.505 -43.073 -43.702 -44.395 -45.154 -45.985 -46.891 -47.806 -48.720 -49.635 -50.549 0 1 1.0 3669771408.11 S2 HV 20.21 25.51 0.05 -3.904e+10 4.509e+09 -3.853e+10 7.391e+09 -3.788e+10 1.012e+10 -3.705e+10 1.266e+10 -3.602e+10 1.498e+10 -3.476e+10 1.705e+10 -3.327e+10 1.881e+10 -3.153e+10 2.024e+10 -2.954e+10 2.128e+10 -2.733e+10 2.191e+10 -2.490e+10 2.209e+10 -2.229e+10 2.182e+10 -1.956e+10 2.110e+10 -1.674e+10 1.995e+10 -1.391e+10 1.839e+10 -1.113e+10 1.649e+10 -8.489e+09 1.431e+10 -6.056e+09 1.195e+10 -3.910e+09 9.526e+09 -2.117e+09 7.149e+09 -7.399e+08 4.965e+09 2.027e+08 3.122e+09 7.814e+08 1.756e+09 1.286e+09 8.703e+08 2.179e+09 7.844e+07 3.728e+09 -1.209e+09 5.962e+09 -3.419e+09 8.829e+09 -6.800e+09 1.226e+10 -1.152e+10 1.616e+10 -1.771e+10 2.043e+10 -2.544e+10 2.493e+10 -3.482e+10 2.953e+10 -4.586e+10 3.405e+10 -5.859e+10 3.832e+10 -7.298e+10 4.214e+10 -8.899e+10 4.531e+10 -1.065e+11 4.762e+10 -1.255e+11 4.887e+10 -1.456e+11 4.884e+10 -1.669e+11 4.735e+10 -1.889e+11 4.419e+10 -2.116e+11 3.919e+10 -2.345e+11 3.221e+10 -2.574e+11 2.310e+10 -2.799e+11 1.177e+10 -3.017e+11 -1.879e+09 -3.224e+11 -1.789e+10 -3.417e+11 -3.628e+10 -3.592e+11 -5.707e+10 -3.746e+11 -8.026e+10 -3.876e+11 -1.058e+11 -3.979e+11 -1.337e+11 -4.054e+11 -1.639e+11 -4.098e+11 -1.966e+11 -4.111e+11 -2.317e+11 -4.091e+11 -2.696e+11 -4.039e+11 -3.105e+11 -3.954e+11 -3.550e+11 -3.836e+11 -4.037e+11 -3.682e+11 -4.575e+11 -3.490e+11 -5.175e+11 -3.256e+11 -5.850e+11 -2.971e+11 -6.616e+11 -2.626e+11 -7.488e+11 -2.204e+11 -8.485e+11 -1.687e+11 -9.623e+11 -1.052e+11 -1.092e+12 -2.719e+10 -1.240e+12 6.898e+10 -1.408e+12 1.864e+11 -1.597e+12 3.291e+11 -1.809e+12 5.014e+11 -2.044e+12 7.074e+11 -2.305e+12 9.519e+11 -2.593e+12 1.240e+12 -2.907e+12 1.577e+12 -3.249e+12 1.968e+12 -3.620e+12 2.419e+12 -4.019e+12 2.934e+12 -4.448e+12 3.521e+12 -4.905e+12 4.184e+12 -5.391e+12 4.930e+12 -5.904e+12 5.764e+12 -6.445e+12 6.693e+12 -7.012e+12 7.722e+12 -7.604e+12 8.856e+12 -8.220e+12 1.010e+13 -8.857e+12 1.147e+13 -9.514e+12 1.295e+13 -1.019e+13 1.456e+13 -1.088e+13 1.630e+13 -1.158e+13 1.818e+13 -1.230e+13 2.019e+13 -1.302e+13 2.235e+13 -1.374e+13 2.464e+13 -1.447e+13 2.709e+13 -1.519e+13 2.967e+13 -1.591e+13 3.240e+13 -1.662e+13 3.528e+13 -1.731e+13 3.830e+13 -1.799e+13 4.146e+13 -1.866e+13 4.477e+13 -1.931e+13 4.821e+13 -1.993e+13 5.178e+13 -2.052e+13 5.548e+13 -2.108e+13 5.929e+13 -2.161e+13 6.322e+13 -2.210e+13 6.725e+13 -2.256e+13 7.138e+13 -2.297e+13 7.560e+13 -2.334e+13 7.990e+13 -2.367e+13 8.427e+13 -2.395e+13 8.871e+13 -2.419e+13 9.319e+13 -2.439e+13 9.773e+13 -2.454e+13 1.023e+14 -2.465e+13 1.069e+14 -2.471e+13 1.115e+14 -2.474e+13 1.161e+14 -2.472e+13 1.207e+14 -2.467e+13 1.253e+14 -2.459e+13 1.299e+14 -2.448e+13 1.345e+14 -2.434e+13 1.390e+14 -2.418e+13 1.435e+14 -2.400e+13 1.479e+14 -2.381e+13 1.523e+14 -2.361e+13 1.566e+14 -2.340e+13 1.608e+14 -2.320e+13 1.650e+14 -2.300e+13 1.690e+14 -2.282e+13 1.730e+14 -2.265e+13 1.769e+14 -2.251e+13 1.806e+14 -2.239e+13 1.843e+14 -2.231e+13 1.878e+14 -2.227e+13 1.913e+14 -2.227e+13 1.946e+14 -2.232e+13 1.978e+14 -2.242e+13 2.008e+14 -2.258e+13 2.037e+14 -2.279e+13 2.066e+14 -2.307e+13 2.093e+14 -2.341e+13 2.119e+14 -2.382e+13 2.143e+14 -2.431e+13 2.166e+14 -2.487e+13 2.188e+14 -2.550e+13 2.209e+14 -2.622e+13 2.228e+14 -2.701e+13 2.246e+14 -2.788e+13 2.263e+14 -2.884e+13 2.279e+14 -2.988e+13 2.294e+14 -3.099e+13 2.308e+14 -3.220e+13 2.321e+14 -3.348e+13 2.334e+14 -3.484e+13 2.345e+14 -3.629e+13 2.356e+14 -3.781e+13 2.367e+14 -3.941e+13 2.377e+14 -4.109e+13 2.386e+14 -4.285e+13 2.396e+14 -4.468e+13 2.405e+14 -4.658e+13 2.413e+14 -4.855e+13 2.422e+14 -5.059e+13 2.430e+14 -5.269e+13 2.439e+14 -5.485e+13 2.447e+14 -5.707e+13 2.455e+14 -5.933e+13 2.464e+14 -6.165e+13 2.472e+14 -6.401e+13 2.480e+14 -6.640e+13 2.489e+14 -6.882e+13 2.497e+14 -7.126e+13 2.505e+14 -7.371e+13 2.514e+14 -7.617e+13 2.522e+14 -7.863e+13 2.529e+14 -8.108e+13 2.537e+14 -8.350e+13 2.544e+14 -8.589e+13 2.551e+14 -8.821e+13 2.557e+14 -9.047e+13 2.563e+14 -9.266e+13 2.568e+14 -9.478e+13 2.573e+14 -9.682e+13 2.576e+14 -9.876e+13 2.579e+14 -1.006e+14 2.581e+14 -1.023e+14 2.582e+14 -1.039e+14 2.582e+14 -1.054e+14 2.580e+14 -1.067e+14 2.577e+14 -1.079e+14 2.573e+14 -1.089e+14 2.567e+14 -1.098e+14 2.560e+14 -1.105e+14 2.552e+14 -1.110e+14 2.541e+14 -1.113e+14 2.529e+14 -1.115e+14 2.515e+14 -1.115e+14 2.500e+14 -1.113e+14 2.482e+14 -1.109e+14 2.463e+14 -1.103e+14 2.441e+14 -1.095e+14 2.418e+14 -1.086e+14 2.393e+14 -1.075e+14 2.366e+14 -1.062e+14 2.336e+14 -1.048e+14 2.305e+14 -1.031e+14 2.272e+14 -1.014e+14 2.237e+14 -9.942e+13 2.199e+14 -9.734e+13 2.160e+14 -9.512e+13 2.119e+14 -9.276e+13 2.076e+14 -9.029e+13 2.032e+14 -8.770e+13 1.986e+14 -8.500e+13 1.938e+14 -8.221e+13 1.889e+14 -7.933e+13 1.838e+14 -7.638e+13 1.786e+14 -7.338e+13 1.733e+14 -7.033e+13 1.679e+14 -6.726e+13 1.624e+14 -6.415e+13 1.568e+14 -6.102e+13 1.512e+14 -5.789e+13 1.456e+14 -5.476e+13 1.399e+14 -5.165e+13 1.342e+14 -4.856e+13 1.284e+14 -4.552e+13 1.227e+14 -4.252e+13 1.171e+14 -3.958e+13 1.114e+14 -3.672e+13 1.059e+14 -3.393e+13 1.004e+14 -3.123e+13 9.500e+13 -2.863e+13 8.970e+13 -2.613e+13 8.451e+13 -2.374e+13 7.945e+13 -2.146e+13 7.452e+13 -1.929e+13 6.974e+13 -1.724e+13 6.511e+13 -1.532e+13 6.064e+13 -1.352e+13 5.633e+13 -1.184e+13 5.220e+13 -1.029e+13 4.824e+13 -8.849e+12 4.446e+13 -7.531e+12 4.087e+13 -6.328e+12 3.746e+13 -5.237e+12 3.423e+13 -4.253e+12 3.118e+13 -3.372e+12 2.832e+13 -2.589e+12 2.563e+13 -1.899e+12 2.313e+13 -1.296e+12 2.079e+13 -7.734e+11 1.862e+13 -3.268e+11 1.662e+13 5.021e+10 1.477e+13 3.638e+11 1.308e+13 6.195e+11 1.153e+13 8.230e+11 1.012e+13 9.802e+11 8.845e+12 1.096e+12 7.695e+12 1.177e+12 6.662e+12 1.226e+12 5.738e+12 1.248e+12 4.916e+12 1.248e+12 4.189e+12 1.230e+12 3.549e+12 1.197e+12 2.989e+12 1.153e+12 2.501e+12 1.100e+12 2.079e+12 1.042e+12 1.717e+12 9.800e+11 1.407e+12 9.168e+11 1.143e+12 8.538e+11 9.212e+11 7.924e+11 7.344e+11 7.333e+11 5.781e+11 6.773e+11 4.480e+11 6.247e+11 3.400e+11 5.756e+11 2.503e+11 5.300e+11 1.762e+11 4.875e+11 1.149e+11 4.477e+11 6.415e+10 4.104e+11 2.245e+10 3.751e+11 -1.165e+10 3.414e+11 -3.924e+10 3.092e+11 -6.111e+10 2.781e+11 -7.793e+10 2.482e+11 -9.024e+10 2.194e+11 -9.847e+10 1.917e+11 -1.030e+11 1.653e+11 -1.044e+11 1.404e+11 -1.029e+11 1.171e+11 -9.890e+10 9.546e+10 -9.291e+10 7.581e+10 -8.532e+10 5.823e+10 -7.658e+10 4.279e+10 -6.710e+10 2.959e+10 -5.732e+10 1.862e+10 -4.766e+10 9.808e+09 -3.848e+10 3.177e+09 -3.024e+10 -1.819e+09 -2.314e+10 -5.545e+09 -1.732e+10 -8.546e+09 -1.286e+10 -1.160e+10 -9.462e+09 -1.542e+10 -6.484e+09 -2.035e+10 -3.202e+09 -2.646e+10 9.668e+08 -3.360e+10 6.361e+09 -4.150e+10 1.310e+10 -4.994e+10 2.118e+10 -5.867e+10 3.052e+10 -6.743e+10 4.094e+10 -7.600e+10 5.224e+10 -8.420e+10 6.422e+10 -9.183e+10 7.660e+10 -9.873e+10 8.915e+10 -1.048e+11 1.016e+11 -1.099e+11 1.138e+11 -1.139e+11 1.254e+11 -1.168e+11 1.362e+11 -1.186e+11 1.460e+11 -1.192e+11 1.548e+11 -1.187e+11 1.623e+11 -1.171e+11 1.684e+11 -1.144e+11 1.732e+11 -1.108e+11 1.764e+11 -1.063e+11 1.782e+11 -1.011e+11 1.785e+11 -9.513e+10 1.774e+11 -8.866e+10 1.750e+11 -8.177e+10 1.713e+11 -7.459e+10 1.664e+11 -6.724e+10 1.605e+11 -5.986e+10 1.537e+11 -5.253e+10 1.462e+11 -4.539e+10 1.380e+11 -3.852e+10 1.294e+11 -3.201e+10 1.204e+11 -2.592e+10 1.112e+11 -2.032e+10 1.019e+11 -1.525e+10 9.272e+10 -1.072e+10 8.369e+10 -6.769e+09 7.491e+10 -3.381e+09 6.647e+10 -5.534e+08 5.844e+10 1.739e+09 5.089e+10 3.526e+09 4.385e+10 4.844e+09 3.738e+10 5.740e+09 3.147e+10 6.260e+09 2.614e+10 6.457e+09 2.139e+10 6.382e+09 1.721e+10 6.087e+09 1.358e+10 5.622e+09 1.048e+10 5.034e+09 7.862e+09 4.367e+09 5.699e+09 3.663e+09 3.954e+09 2.957e+09 2.582e+09 2.282e+09 1.543e+09 1.667e+09 7.939e+08 1.138e+09 2.907e+08 7.176e+08 -1.629e+07 4.172e+08 -1.921e+08 2.146e+08 -3.270e+08 3.105e+07 -5.095e+08 -2.370e+08 -7.773e+08 -6.649e+08 -1.118e+09 -1.295e+09 -1.503e+09 -2.156e+09 -1.901e+09 -3.269e+09 -2.286e+09 -4.654e+09 -2.628e+09 -6.326e+09 -2.899e+09 -8.302e+09 -3.073e+09 -1.059e+10 -3.121e+09 -1.320e+10 -3.019e+09 -1.613e+10 -2.741e+09 -1.938e+10 -2.265e+09 -2.293e+10 -1.572e+09 -2.679e+10 -6.461e+08 -3.091e+10 5.240e+08 -3.528e+10 1.943e+09 -3.986e+10 3.617e+09 -4.462e+10 5.542e+09 -4.949e+10 7.711e+09 -5.443e+10 1.011e+10 -5.939e+10 1.273e+10 -6.430e+10 1.553e+10 -6.911e+10 1.850e+10 -7.374e+10 2.160e+10 -7.814e+10 2.479e+10 -8.226e+10 2.805e+10 -8.601e+10 3.132e+10 -8.937e+10 3.456e+10 -9.226e+10 3.774e+10 -9.467e+10 4.080e+10 -9.654e+10 4.371e+10 -9.785e+10 4.643e+10 -9.858e+10 4.891e+10 -9.873e+10 5.111e+10 -9.830e+10 5.301e+10 -9.729e+10 5.457e+10 -9.572e+10 5.577e+10 -9.362e+10 5.658e+10 -9.102e+10 5.700e+10 -8.797e+10 5.701e+10 -8.450e+10 5.662e+10 -8.067e+10 5.581e+10 -7.654e+10 5.461e+10 -7.216e+10 5.303e+10 -6.759e+10 5.109e+10 -6.288e+10 4.883e+10 -5.810e+10 4.626e+10 -5.329e+10 4.343e+10 -4.852e+10 4.038e+10 -4.382e+10 3.716e+10 -3.925e+10 3.382e+10 -3.484e+10 3.041e+10 -3.063e+10 2.697e+10 -2.665e+10 2.357e+10 -2.293e+10 2.025e+10 -1.948e+10 1.706e+10 -1.631e+10 1.406e+10 -1.345e+10 1.127e+10 -1.090e+10 8.736e+09 -8.652e+09 6.494e+09 -6.714e+09 4.566e+09 -5.076e+09 2.968e+09 -3.735e+09 1.703e+09 -2.687e+09 7.595e+08 -1.928e+09 8.834e+07 -1.448e+09 -4.115e+08 -1.198e+09 -9.001e+08 -1.086e+09 -1.537e+09 -1.014e+09 -2.413e+09 -9.234e+08 -3.546e+09 -7.945e+08 -4.919e+09 -6.319e+08 -6.500e+09 -4.506e+08 -8.248e+09 -2.702e+08 -1.013e+10 -1.120e+08 -1.209e+10 3.325e+06 -1.411e+10 5.612e+07 -1.613e+10 2.857e+07 -1.813e+10 -9.463e+07 -2.006e+10 -3.263e+08 -2.190e+10 -6.762e+08 -2.362e+10 -1.151e+09 -2.519e+10 -1.755e+09 -2.659e+10 -2.490e+09 -2.782e+10 -3.353e+09 -2.886e+10 -4.342e+09 -2.971e+10 -5.451e+09 -3.036e+10 -6.673e+09 -3.081e+10 -8.003e+09 -3.108e+10 -9.431e+09 -3.117e+10 -1.095e+10 -3.110e+10 -1.256e+10 -3.087e+10 -1.426e+10 -3.051e+10 -1.604e+10 -3.002e+10 -1.790e+10 -2.943e+10 -1.986e+10 -2.874e+10 -2.192e+10 -2.797e+10 -2.408e+10 -2.712e+10 -2.635e+10 -2.619e+10 -2.875e+10 -2.519e+10 -3.127e+10 -2.411e+10 -3.394e+10 -2.294e+10 -3.676e+10 -2.168e+10 -3.972e+10 -2.032e+10 -4.283e+10 -1.885e+10 -4.608e+10 -1.726e+10 -4.947e+10 -1.554e+10 -5.299e+10 -1.368e+10 -5.661e+10 -1.168e+10 -6.031e+10 -9.546e+09 -6.408e+10 -7.270e+09 -6.789e+10 -4.865e+09 -7.170e+10 -2.336e+09 -7.550e+10 3.018e+08 -7.923e+10 3.031e+09 -8.289e+10 5.836e+09 -8.642e+10 8.693e+09 -8.979e+10 1.158e+10 -9.298e+10 1.447e+10 -9.595e+10 1.733e+10 -9.867e+10 2.015e+10 -1.011e+11 2.290e+10 -1.032e+11 2.554e+10 -1.050e+11 2.806e+10 -1.065e+11 3.044e+10 -1.076e+11 3.264e+10 -1.083e+11 3.466e+10 -1.086e+11 3.648e+10 -1.085e+11 3.809e+10 -1.080e+11 3.947e+10 -1.072e+11 4.061e+10 -1.059e+11 4.152e+10 -1.043e+11 4.219e+10 -1.023e+11 4.262e+10 -9.997e+10 4.281e+10 -9.735e+10 4.278e+10 -9.444e+10 4.252e+10 -9.128e+10 4.206e+10 -8.790e+10 4.140e+10 -8.432e+10 4.055e+10 -8.059e+10 3.954e+10 -7.675e+10 3.838e+10 -7.281e+10 3.709e+10 -6.882e+10 3.567e+10 -6.482e+10 3.416e+10 -6.082e+10 3.257e+10 -5.686e+10 3.091e+10 -5.297e+10 2.921e+10 -4.917e+10 2.747e+10 -4.548e+10 2.572e+10 -4.191e+10 2.397e+10 -3.848e+10 2.223e+10 -3.521e+10 2.052e+10 -3.210e+10 1.885e+10 -2.915e+10 1.722e+10 -2.638e+10 1.566e+10 -2.378e+10 1.416e+10 -2.136e+10 1.273e+10 -1.910e+10 1.137e+10 -1.702e+10 1.010e+10 -1.510e+10 8.919e+09 -1.334e+10 7.820e+09 -1.173e+10 6.808e+09 -1.027e+10 5.883e+09 -8.946e+09 5.043e+09 -7.754e+09 4.287e+09 -6.686e+09 3.612e+09 -5.732e+09 3.014e+09 -4.889e+09 2.489e+09 -4.145e+09 2.034e+09 -3.492e+09 1.640e+09 -2.924e+09 1.306e+09 -2.433e+09 1.024e+09 -2.012e+09 7.892e+08 -1.653e+09 5.965e+08 -1.350e+09 4.404e+08 -1.097e+09 3.158e+08 -8.870e+08 2.181e+08 -7.149e+08 1.429e+08 -5.750e+08 8.607e+07 -4.629e+08 4.403e+07 -3.740e+08 1.361e+07 -3.042e+08 -7.961e+06 -2.503e+08 -2.291e+07 -2.091e+08 -3.309e+07 -1.781e+08 -3.994e+07 -1.553e+08 -4.451e+07 -1.389e+08 -4.757e+07 -1.278e+08 -4.966e+07 -1.209e+08 -5.111e+07 -1.176e+08 -5.218e+07 -1.173e+08 -5.304e+07 -1.199e+08 -5.380e+07 -1.250e+08 -5.457e+07 -1.325e+08 -5.540e+07 -1.423e+08 -5.637e+07 -1.541e+08 -5.751e+07 -1.679e+08 -5.888e+07 -1.834e+08 -6.053e+07 -2.002e+08 -6.250e+07 -2.181e+08 -6.487e+07 -2.366e+08 -6.769e+07 -2.553e+08 -7.103e+07 -2.737e+08 -7.495e+07 -2.914e+08 -7.950e+07 -3.080e+08 -8.471e+07 -3.230e+08 -9.061e+07 -3.361e+08 -9.719e+07 -3.471e+08 -1.044e+08 -3.556e+08 -1.123e+08 -3.616e+08 -1.208e+08 -3.650e+08 -1.298e+08 -3.658e+08 -1.393e+08 -3.641e+08 -1.492e+08 -3.599e+08 -1.594e+08 -3.534e+08 -1.699e+08 -3.449e+08 -1.806e+08 -3.344e+08 -1.915e+08 -3.223e+08 -2.026e+08 -3.088e+08 -2.140e+08 -2.939e+08 -2.256e+08 -2.781e+08 -2.377e+08 -2.612e+08 -2.501e+08 -2.437e+08 -2.632e+08 -2.254e+08 -2.770e+08 -2.064e+08 -2.918e+08 -1.866e+08 -3.078e+08 -1.660e+08 -3.251e+08 -1.442e+08 -3.440e+08 -1.211e+08 -3.646e+08 -9.623e+07 -3.872e+08 -6.922e+07 -4.117e+08 -3.968e+07 -4.382e+08 -7.154e+06 -4.665e+08 2.881e+07 -4.966e+08 0.005 -52.065 -51.077 -50.089 -49.101 -48.114 -47.136 -46.255 -45.462 -44.750 -44.115 -43.552 -43.056 -42.625 -42.256 -41.948 -41.699 -41.507 -41.373 -41.295 -41.274 -41.310 -41.405 -41.558 -41.772 -42.048 -42.391 -42.802 -43.286 -43.847 -44.493 -45.230 -46.068 -47.019 -48.097 -49.323 -50.722 -52.330 -54.198 -56.403 -59.064 -62.384 -66.685 -71.842 -73.277 -70.675 -68.396 -67.078 -66.233 -65.265 -63.696 -61.526 -59.120 -56.783 -54.637 -52.709 -50.990 -49.459 -48.093 -46.875 -45.788 -44.819 -43.957 -43.193 -42.519 -41.931 -41.422 -40.989 -40.630 -40.341 -40.121 -39.969 -39.885 -39.867 -39.918 -40.037 -40.226 -40.488 -40.824 -41.239 -41.735 -42.318 -42.992 -43.765 -44.642 -45.630 -46.736 -47.962 -49.310 -50.768 -52.313 -53.901 -55.473 -56.985 -58.456 -60.004 -61.812 -63.801 -64.368 -61.662 -57.809 -54.342 -51.427 -48.947 -46.803 -44.926 -43.265 -41.786 -40.461 -39.271 -38.201 -37.240 -36.376 -35.604 -34.917 -34.310 -33.781 -33.325 -32.942 -32.630 -32.388 -32.217 -32.117 -32.090 -32.137 -32.263 -32.470 -32.764 -33.151 -33.640 -34.240 -34.965 -35.830 -36.855 -38.067 -39.498 -41.185 -43.162 -45.424 -47.813 -49.808 -50.741 -50.736 -50.624 -51.122 -52.680 -54.706 -52.313 -46.950 -42.257 -38.486 -35.353 -32.672 -30.316 -28.211 -26.306 -24.565 -22.963 -21.479 -20.098 -18.808 -17.598 -16.461 -15.389 -14.378 -13.422 -12.517 -11.660 -10.847 -10.076 -9.344 -8.649 -7.990 -7.364 -6.771 -6.208 -5.675 -5.171 -4.694 -4.244 -3.819 -3.420 -3.045 -2.694 -2.366 -2.061 -1.778 -1.518 -1.278 -1.060 -0.863 -0.687 -0.531 -0.396 -0.280 -0.185 -0.109 -0.053 -0.017 0.000 -0.003 -0.026 -0.067 -0.129 -0.210 -0.311 -0.432 -0.574 -0.736 -0.918 -1.122 -1.347 -1.594 -1.862 -2.154 -2.467 -2.805 -3.166 -3.552 -3.963 -4.401 -4.865 -5.357 -5.878 -6.429 -7.012 -7.627 -8.277 -8.964 -9.688 -10.454 -11.263 -12.119 -13.025 -13.985 -15.005 -16.090 -17.248 -18.488 -19.820 -21.259 -22.821 -24.533 -26.427 -28.553 -30.985 -33.849 -37.378 -42.085 -49.360 -54.803 -48.087 -44.630 -42.928 -42.185 -42.100 -42.547 -43.465 -44.766 -46.134 -46.757 -45.840 -43.819 -41.626 -39.667 -38.006 -36.613 -35.449 -34.477 -33.667 -32.998 -32.453 -32.017 -31.681 -31.437 -31.277 -31.197 -31.193 -31.263 -31.403 -31.612 -31.890 -32.236 -32.652 -33.137 -33.693 -34.322 -35.027 -35.812 -36.679 -37.634 -38.682 -39.828 -41.079 -42.442 -43.921 -45.522 -47.246 -49.088 -51.035 -53.055 -55.081 -56.945 -58.279 -58.539 -57.527 -55.709 -53.643 -51.623 -49.754 -48.058 -46.533 -45.164 -43.939 -42.844 -41.867 -40.996 -40.223 -39.541 -38.943 -38.424 -37.979 -37.604 -37.296 -37.052 -36.869 -36.747 -36.684 -36.678 -36.729 -36.837 -37.001 -37.223 -37.502 -37.841 -38.240 -38.701 -39.228 -39.823 -40.490 -41.233 -42.059 -42.974 -43.986 -45.106 -46.347 -47.725 -49.261 -50.981 -52.923 -55.136 -57.694 -60.714 -64.371 -68.951 -74.596 -78.760 -76.603 -73.197 -69.945 -66.716 -63.661 -60.911 -58.492 -56.379 -54.533 -52.916 -51.494 -50.242 -49.137 -48.162 -47.304 -46.550 -45.892 -45.321 -44.831 -44.417 -44.074 -43.800 -43.590 -43.443 -43.356 -43.329 -43.360 -43.448 -43.593 -43.796 -44.056 -44.374 -44.753 -45.192 -45.694 -46.262 -46.899 -47.608 -48.395 -49.264 -50.223 -51.191 -52.158 -53.126 -54.094 0 1 1.0 3669771408.11 S2 VV 20.21 25.51 0.05 -8.242e+09 4.169e+10 -5.245e+09 4.184e+10 -2.398e+09 4.180e+10 2.896e+08 4.154e+10 2.798e+09 4.104e+10 5.099e+09 4.025e+10 7.165e+09 3.915e+10 8.966e+09 3.773e+10 1.047e+10 3.597e+10 1.165e+10 3.388e+10 1.249e+10 3.147e+10 1.297e+10 2.877e+10 1.309e+10 2.583e+10 1.285e+10 2.269e+10 1.227e+10 1.943e+10 1.137e+10 1.613e+10 1.020e+10 1.289e+10 8.827e+09 9.792e+09 7.315e+09 6.953e+09 5.749e+09 4.470e+09 4.233e+09 2.441e+09 2.889e+09 9.334e+08 1.858e+09 -7.301e+07 1.241e+09 -8.386e+08 8.545e+08 -1.916e+09 2.689e+08 -3.752e+09 -8.779e+08 -6.521e+09 -2.818e+09 -1.026e+10 -5.717e+09 -1.498e+10 -9.705e+09 -2.062e+10 -1.489e+10 -2.713e+10 -2.138e+10 -3.442e+10 -2.925e+10 -4.236e+10 -3.854e+10 -5.082e+10 -4.930e+10 -5.962e+10 -6.154e+10 -6.856e+10 -7.522e+10 -7.743e+10 -9.031e+10 -8.600e+10 -1.067e+11 -9.402e+10 -1.243e+11 -1.012e+11 -1.431e+11 -1.074e+11 -1.627e+11 -1.122e+11 -1.830e+11 -1.155e+11 -2.038e+11 -1.169e+11 -2.249e+11 -1.163e+11 -2.460e+11 -1.135e+11 -2.669e+11 -1.083e+11 -2.873e+11 -1.004e+11 -3.071e+11 -8.992e+10 -3.260e+11 -7.658e+10 -3.440e+11 -6.031e+10 -3.608e+11 -4.105e+10 -3.765e+11 -1.867e+10 -3.911e+11 6.984e+09 -4.047e+11 3.608e+10 -4.174e+11 6.895e+10 -4.293e+11 1.060e+11 -4.407e+11 1.479e+11 -4.518e+11 1.953e+11 -4.627e+11 2.494e+11 -4.734e+11 3.114e+11 -4.839e+11 3.829e+11 -4.938e+11 4.659e+11 -5.026e+11 5.623e+11 -5.094e+11 6.745e+11 -5.132e+11 8.052e+11 -5.127e+11 9.567e+11 -5.061e+11 1.132e+12 -4.916e+11 1.335e+12 -4.669e+11 1.568e+12 -4.296e+11 1.834e+12 -3.771e+11 2.137e+12 -3.064e+11 2.479e+12 -2.143e+11 2.864e+12 -9.731e+10 3.296e+12 4.814e+10 3.778e+12 2.260e+11 4.313e+12 4.407e+11 4.905e+12 6.962e+11 5.557e+12 9.972e+11 6.272e+12 1.349e+12 7.055e+12 1.755e+12 7.907e+12 2.222e+12 8.831e+12 2.755e+12 9.832e+12 3.357e+12 1.091e+13 4.036e+12 1.207e+13 4.795e+12 1.331e+13 5.639e+12 1.464e+13 6.574e+12 1.605e+13 7.603e+12 1.754e+13 8.731e+12 1.913e+13 9.961e+12 2.080e+13 1.130e+13 2.256e+13 1.274e+13 2.440e+13 1.429e+13 2.632e+13 1.596e+13 2.833e+13 1.774e+13 3.042e+13 1.962e+13 3.259e+13 2.163e+13 3.483e+13 2.374e+13 3.714e+13 2.596e+13 3.951e+13 2.828e+13 4.196e+13 3.071e+13 4.446e+13 3.324e+13 4.702e+13 3.587e+13 4.963e+13 3.858e+13 5.228e+13 4.138e+13 5.496e+13 4.426e+13 5.768e+13 4.721e+13 6.043e+13 5.023e+13 6.320e+13 5.331e+13 6.599e+13 5.646e+13 6.879e+13 5.965e+13 7.160e+13 6.289e+13 7.442e+13 6.617e+13 7.724e+13 6.948e+13 8.006e+13 7.282e+13 8.287e+13 7.618e+13 8.567e+13 7.956e+13 8.847e+13 8.295e+13 9.125e+13 8.635e+13 9.401e+13 8.975e+13 9.676e+13 9.314e+13 9.949e+13 9.651e+13 1.022e+14 9.986e+13 1.049e+14 1.032e+14 1.076e+14 1.065e+14 1.102e+14 1.097e+14 1.128e+14 1.129e+14 1.154e+14 1.160e+14 1.180e+14 1.191e+14 1.205e+14 1.221e+14 1.230e+14 1.250e+14 1.255e+14 1.278e+14 1.280e+14 1.304e+14 1.304e+14 1.330e+14 1.328e+14 1.354e+14 1.351e+14 1.377e+14 1.374e+14 1.399e+14 1.397e+14 1.419e+14 1.420e+14 1.437e+14 1.442e+14 1.454e+14 1.465e+14 1.470e+14 1.487e+14 1.484e+14 1.508e+14 1.496e+14 1.530e+14 1.507e+14 1.551e+14 1.515e+14 1.573e+14 1.523e+14 1.594e+14 1.528e+14 1.615e+14 1.532e+14 1.636e+14 1.535e+14 1.657e+14 1.536e+14 1.679e+14 1.536e+14 1.700e+14 1.535e+14 1.722e+14 1.533e+14 1.744e+14 1.529e+14 1.766e+14 1.525e+14 1.788e+14 1.520e+14 1.811e+14 1.514e+14 1.834e+14 1.507e+14 1.858e+14 1.500e+14 1.882e+14 1.493e+14 1.907e+14 1.485e+14 1.932e+14 1.476e+14 1.958e+14 1.467e+14 1.985e+14 1.458e+14 2.011e+14 1.449e+14 2.039e+14 1.440e+14 2.067e+14 1.430e+14 2.095e+14 1.420e+14 2.124e+14 1.410e+14 2.153e+14 1.400e+14 2.182e+14 1.390e+14 2.211e+14 1.379e+14 2.241e+14 1.369e+14 2.271e+14 1.358e+14 2.300e+14 1.347e+14 2.330e+14 1.335e+14 2.359e+14 1.323e+14 2.388e+14 1.311e+14 2.416e+14 1.299e+14 2.444e+14 1.286e+14 2.471e+14 1.274e+14 2.496e+14 1.260e+14 2.521e+14 1.247e+14 2.545e+14 1.233e+14 2.567e+14 1.219e+14 2.588e+14 1.205e+14 2.608e+14 1.191e+14 2.626e+14 1.176e+14 2.643e+14 1.162e+14 2.657e+14 1.147e+14 2.670e+14 1.132e+14 2.680e+14 1.117e+14 2.689e+14 1.102e+14 2.695e+14 1.087e+14 2.699e+14 1.072e+14 2.700e+14 1.057e+14 2.699e+14 1.042e+14 2.695e+14 1.027e+14 2.688e+14 1.012e+14 2.679e+14 9.979e+13 2.666e+14 9.833e+13 2.651e+14 9.689e+13 2.633e+14 9.545e+13 2.611e+14 9.401e+13 2.587e+14 9.258e+13 2.560e+14 9.115e+13 2.529e+14 8.971e+13 2.496e+14 8.826e+13 2.460e+14 8.681e+13 2.421e+14 8.534e+13 2.379e+14 8.385e+13 2.334e+14 8.234e+13 2.287e+14 8.081e+13 2.237e+14 7.925e+13 2.185e+14 7.767e+13 2.130e+14 7.605e+13 2.074e+14 7.440e+13 2.016e+14 7.272e+13 1.956e+14 7.101e+13 1.895e+14 6.925e+13 1.833e+14 6.746e+13 1.769e+14 6.565e+13 1.705e+14 6.380e+13 1.640e+14 6.193e+13 1.575e+14 6.004e+13 1.509e+14 5.813e+13 1.444e+14 5.621e+13 1.378e+14 5.428e+13 1.313e+14 5.233e+13 1.248e+14 5.039e+13 1.184e+14 4.845e+13 1.121e+14 4.651e+13 1.059e+14 4.458e+13 9.987e+13 4.266e+13 9.393e+13 4.077e+13 8.813e+13 3.889e+13 8.250e+13 3.704e+13 7.704e+13 3.521e+13 7.175e+13 3.342e+13 6.665e+13 3.167e+13 6.176e+13 2.995e+13 5.706e+13 2.827e+13 5.256e+13 2.663e+13 4.828e+13 2.504e+13 4.421e+13 2.349e+13 4.036e+13 2.199e+13 3.672e+13 2.054e+13 3.329e+13 1.915e+13 3.008e+13 1.781e+13 2.707e+13 1.652e+13 2.427e+13 1.528e+13 2.167e+13 1.410e+13 1.927e+13 1.298e+13 1.706e+13 1.191e+13 1.503e+13 1.090e+13 1.317e+13 9.949e+12 1.149e+13 9.052e+12 9.963e+12 8.210e+12 8.589e+12 7.423e+12 7.358e+12 6.692e+12 6.262e+12 6.014e+12 5.291e+12 5.387e+12 4.434e+12 4.809e+12 3.684e+12 4.279e+12 3.030e+12 3.794e+12 2.464e+12 3.353e+12 1.978e+12 2.954e+12 1.565e+12 2.595e+12 1.214e+12 2.272e+12 9.205e+11 1.984e+12 6.765e+11 1.728e+12 4.753e+11 1.502e+12 3.114e+11 1.303e+12 1.791e+11 1.128e+12 7.344e+10 9.759e+11 -9.814e+09 8.430e+11 -7.459e+10 7.274e+11 -1.243e+11 6.271e+11 -1.616e+11 5.399e+11 -1.889e+11 4.639e+11 -2.081e+11 3.976e+11 -2.207e+11 3.396e+11 -2.278e+11 2.885e+11 -2.304e+11 2.434e+11 -2.291e+11 2.035e+11 -2.245e+11 1.681e+11 -2.171e+11 1.368e+11 -2.071e+11 1.092e+11 -1.950e+11 8.490e+10 -1.811e+11 6.378e+10 -1.658e+11 4.562e+10 -1.495e+11 3.023e+10 -1.325e+11 1.748e+10 -1.153e+11 7.195e+09 -9.819e+10 -8.190e+08 -8.165e+10 -6.742e+09 -6.606e+10 -1.081e+10 -5.173e+10 -1.331e+10 -3.897e+10 -1.475e+10 -2.788e+10 -1.483e+10 -1.916e+10 -1.480e+10 -1.200e+10 -1.493e+10 -6.399e+09 -1.572e+10 -1.661e+09 -1.743e+10 3.172e+09 -1.999e+10 8.958e+09 -2.309e+10 1.625e+10 -2.643e+10 2.527e+10 -2.971e+10 3.600e+10 -3.272e+10 4.830e+10 -3.527e+10 6.195e+10 -3.725e+10 7.664e+10 -3.856e+10 9.208e+10 -3.916e+10 1.080e+11 -3.900e+10 1.239e+11 -3.809e+10 1.396e+11 -3.646e+10 1.548e+11 -3.414e+10 1.692e+11 -3.118e+10 1.824e+11 -2.766e+10 1.944e+11 -2.365e+10 2.048e+11 -1.925e+10 2.136e+11 -1.454e+10 2.206e+11 -9.613e+09 2.257e+11 -4.563e+09 2.290e+11 5.237e+08 2.304e+11 5.554e+09 2.299e+11 1.045e+10 2.277e+11 1.515e+10 2.239e+11 1.956e+10 2.185e+11 2.365e+10 2.116e+11 2.736e+10 2.036e+11 3.064e+10 1.945e+11 3.347e+10 1.844e+11 3.582e+10 1.737e+11 3.769e+10 1.624e+11 3.905e+10 1.508e+11 3.993e+10 1.389e+11 4.032e+10 1.270e+11 4.026e+10 1.152e+11 3.976e+10 1.037e+11 3.886e+10 9.252e+10 3.758e+10 8.181e+10 3.598e+10 7.165e+10 3.410e+10 6.212e+10 3.197e+10 5.327e+10 2.966e+10 4.513e+10 2.722e+10 3.775e+10 2.468e+10 3.111e+10 2.210e+10 2.523e+10 1.953e+10 2.008e+10 1.701e+10 1.564e+10 1.458e+10 1.187e+10 1.227e+10 8.726e+09 1.011e+10 6.163e+09 8.125e+09 4.122e+09 6.344e+09 2.551e+09 4.777e+09 1.387e+09 3.434e+09 5.722e+08 2.325e+09 4.801e+07 1.452e+09 -2.470e+08 8.115e+08 -3.782e+08 3.799e+08 -4.239e+08 8.459e+07 -4.734e+08 -2.072e+08 -5.866e+08 -6.278e+08 -7.550e+08 -1.251e+09 -9.287e+08 -2.105e+09 -1.057e+09 -3.200e+09 -1.097e+09 -4.542e+09 -1.010e+09 -6.135e+09 -7.597e+08 -7.975e+09 -3.134e+08 -1.006e+10 3.605e+08 -1.240e+10 1.291e+09 -1.496e+10 2.501e+09 -1.775e+10 4.015e+09 -2.075e+10 5.848e+09 -2.393e+10 8.011e+09 -2.728e+10 1.051e+10 -3.077e+10 1.335e+10 -3.437e+10 1.651e+10 -3.806e+10 1.998e+10 -4.178e+10 2.375e+10 -4.551e+10 2.779e+10 -4.920e+10 3.207e+10 -5.282e+10 3.654e+10 -5.632e+10 4.117e+10 -5.967e+10 4.592e+10 -6.281e+10 5.072e+10 -6.572e+10 5.554e+10 -6.835e+10 6.031e+10 -7.067e+10 6.498e+10 -7.265e+10 6.949e+10 -7.427e+10 7.378e+10 -7.550e+10 7.781e+10 -7.631e+10 8.152e+10 -7.671e+10 8.486e+10 -7.668e+10 8.778e+10 -7.622e+10 9.023e+10 -7.534e+10 9.219e+10 -7.405e+10 9.362e+10 -7.238e+10 9.450e+10 -7.033e+10 9.479e+10 -6.794e+10 9.450e+10 -6.525e+10 9.362e+10 -6.229e+10 9.216e+10 -5.911e+10 9.012e+10 -5.575e+10 8.754e+10 -5.224e+10 8.443e+10 -4.865e+10 8.084e+10 -4.502e+10 7.681e+10 -4.138e+10 7.240e+10 -3.777e+10 6.767e+10 -3.425e+10 6.268e+10 -3.083e+10 5.749e+10 -2.755e+10 5.219e+10 -2.444e+10 4.684e+10 -2.151e+10 4.152e+10 -1.878e+10 3.629e+10 -1.625e+10 3.124e+10 -1.393e+10 2.642e+10 -1.183e+10 2.189e+10 -9.934e+09 1.772e+10 -8.247e+09 1.394e+10 -6.759e+09 1.059e+10 -5.461e+09 7.703e+09 -4.343e+09 5.294e+09 -3.403e+09 3.369e+09 -2.644e+09 1.911e+09 -2.086e+09 8.662e+08 -1.761e+09 1.202e+08 -1.682e+09 -5.238e+08 -1.810e+09 -1.282e+09 -2.073e+09 -2.297e+09 -2.410e+09 -3.616e+09 -2.791e+09 -5.233e+09 -3.205e+09 -7.114e+09 -3.650e+09 -9.217e+09 -4.133e+09 -1.150e+10 -4.659e+09 -1.390e+10 -5.235e+09 -1.638e+10 -5.867e+09 -1.889e+10 -6.563e+09 -2.137e+10 -7.326e+09 -2.379e+10 -8.162e+09 -2.611e+10 -9.073e+09 -2.827e+10 -1.006e+10 -3.026e+10 -1.112e+10 -3.203e+10 -1.226e+10 -3.356e+10 -1.347e+10 -3.483e+10 -1.475e+10 -3.581e+10 -1.608e+10 -3.651e+10 -1.748e+10 -3.691e+10 -1.891e+10 -3.702e+10 -2.039e+10 -3.683e+10 -2.190e+10 -3.637e+10 -2.344e+10 -3.564e+10 -2.500e+10 -3.466e+10 -2.658e+10 -3.346e+10 -2.818e+10 -3.206e+10 -2.981e+10 -3.049e+10 -3.148e+10 -2.876e+10 -3.320e+10 -2.689e+10 -3.498e+10 -2.491e+10 -3.684e+10 -2.282e+10 -3.879e+10 -2.062e+10 -4.086e+10 -1.833e+10 -4.306e+10 -1.593e+10 -4.541e+10 -1.341e+10 -4.791e+10 -1.076e+10 -5.058e+10 -7.978e+09 -5.340e+10 -5.037e+09 -5.638e+10 -1.931e+09 -5.950e+10 1.345e+09 -6.274e+10 4.796e+09 -6.607e+10 8.415e+09 -6.948e+10 1.219e+10 -7.294e+10 1.611e+10 -7.641e+10 2.014e+10 -7.985e+10 2.427e+10 -8.325e+10 2.845e+10 -8.656e+10 3.266e+10 -8.976e+10 3.685e+10 -9.281e+10 4.100e+10 -9.569e+10 4.506e+10 -9.836e+10 4.900e+10 -1.008e+11 5.279e+10 -1.030e+11 5.639e+10 -1.049e+11 5.978e+10 -1.066e+11 6.293e+10 -1.079e+11 6.583e+10 -1.089e+11 6.846e+10 -1.096e+11 7.080e+10 -1.099e+11 7.284e+10 -1.099e+11 7.459e+10 -1.096e+11 7.603e+10 -1.089e+11 7.716e+10 -1.078e+11 7.799e+10 -1.065e+11 7.852e+10 -1.048e+11 7.875e+10 -1.028e+11 7.869e+10 -1.005e+11 7.833e+10 -9.791e+10 7.770e+10 -9.508e+10 7.681e+10 -9.201e+10 7.566e+10 -8.874e+10 7.427e+10 -8.529e+10 7.265e+10 -8.169e+10 7.081e+10 -7.797e+10 6.876e+10 -7.416e+10 6.654e+10 -7.028e+10 6.414e+10 -6.637e+10 6.159e+10 -6.246e+10 5.891e+10 -5.856e+10 5.612e+10 -5.471e+10 5.323e+10 -5.094e+10 5.028e+10 -4.726e+10 4.729e+10 -4.368e+10 4.427e+10 -4.023e+10 4.126e+10 -3.692e+10 3.827e+10 -3.376e+10 3.531e+10 -3.076e+10 3.243e+10 -2.793e+10 2.962e+10 -2.526e+10 2.692e+10 -2.276e+10 2.432e+10 -2.042e+10 2.186e+10 -1.826e+10 1.953e+10 -1.625e+10 1.734e+10 -1.441e+10 1.531e+10 -1.271e+10 1.343e+10 -1.116e+10 1.170e+10 -9.757e+09 1.013e+10 -8.481e+09 8.711e+09 -7.334e+09 7.440e+09 -6.304e+09 6.308e+09 -5.384e+09 5.308e+09 -4.568e+09 4.433e+09 -3.848e+09 3.672e+09 -3.216e+09 3.016e+09 -2.666e+09 2.457e+09 -2.192e+09 1.983e+09 -1.785e+09 1.586e+09 -1.439e+09 1.255e+09 -1.149e+09 9.831e+08 -9.064e+08 7.611e+08 -7.073e+08 5.822e+08 -5.456e+08 4.395e+08 -4.159e+08 3.269e+08 -3.137e+08 2.393e+08 -2.343e+08 1.720e+08 -1.736e+08 1.210e+08 -1.283e+08 8.314e+07 -9.519e+07 5.543e+07 -7.159e+07 3.553e+07 -5.548e+07 2.150e+07 -4.521e+07 1.164e+07 -3.959e+07 4.453e+06 -3.782e+07 -1.312e+06 -3.938e+07 -6.694e+06 -4.404e+07 -1.245e+07 -5.174e+07 -1.906e+07 -6.263e+07 -2.681e+07 -7.695e+07 -3.587e+07 -9.495e+07 -4.634e+07 -1.169e+08 -5.827e+07 -1.428e+08 -7.170e+07 -1.729e+08 -8.664e+07 -2.070e+08 -1.031e+08 -2.448e+08 -1.210e+08 -2.861e+08 -1.404e+08 -3.302e+08 -1.612e+08 -3.767e+08 -1.835e+08 -4.248e+08 -2.073e+08 -4.739e+08 -2.326e+08 -5.232e+08 -2.594e+08 -5.720e+08 -2.878e+08 -6.197e+08 -3.178e+08 -6.657e+08 -3.497e+08 -7.095e+08 -3.835e+08 -7.506e+08 -4.192e+08 -7.887e+08 -4.571e+08 -8.237e+08 -4.973e+08 -8.553e+08 -5.400e+08 -8.833e+08 -5.854e+08 -9.078e+08 -6.337e+08 -9.287e+08 -6.850e+08 -9.460e+08 -7.397e+08 -9.596e+08 -7.978e+08 -9.695e+08 -8.594e+08 -9.758e+08 -9.246e+08 -9.782e+08 -9.936e+08 -9.765e+08 -1.066e+09 -9.705e+08 -1.142e+09 -9.600e+08 -1.222e+09 -9.445e+08 -1.304e+09 -9.236e+08 -1.389e+09 -8.969e+08 -1.475e+09 -8.641e+08 -1.562e+09 -8.247e+08 -1.650e+09 -7.782e+08 -1.736e+09 0.005 -50.849 -49.863 -48.877 -47.891 -46.906 -45.929 -45.046 -44.248 -43.529 -42.883 -42.307 -41.796 -41.347 -40.959 -40.628 -40.354 -40.135 -39.970 -39.859 -39.801 -39.797 -39.847 -39.951 -40.112 -40.329 -40.605 -40.943 -41.345 -41.814 -42.354 -42.971 -43.670 -44.458 -45.344 -46.339 -47.456 -48.711 -50.125 -51.725 -53.545 -55.631 -58.039 -60.837 -64.061 -67.539 -70.388 -71.286 -70.542 -69.026 -66.873 -64.209 -61.404 -58.742 -56.330 -54.179 -52.271 -50.576 -49.069 -47.726 -46.527 -45.458 -44.505 -43.657 -42.907 -42.246 -41.670 -41.174 -40.754 -40.407 -40.130 -39.923 -39.785 -39.714 -39.711 -39.777 -39.911 -40.117 -40.395 -40.749 -41.181 -41.696 -42.297 -42.988 -43.776 -44.663 -45.654 -46.747 -47.935 -49.201 -50.508 -51.792 -52.966 -53.938 -54.651 -55.103 -55.322 -55.301 -54.961 -54.187 -52.940 -51.328 -49.531 -47.710 -45.954 -44.305 -42.780 -41.377 -40.094 -38.922 -37.855 -36.885 -36.007 -35.213 -34.501 -33.867 -33.306 -32.817 -32.399 -32.049 -31.768 -31.555 -31.410 -31.336 -31.334 -31.407 -31.557 -31.791 -32.112 -32.530 -33.052 -33.690 -34.459 -35.378 -36.470 -37.763 -39.290 -41.081 -43.121 -45.239 -46.899 -47.403 -46.830 -45.933 -45.292 -45.183 -45.816 -47.581 -51.576 -58.891 -49.636 -42.758 -38.220 -34.745 -31.889 -29.443 -27.295 -25.372 -23.631 -22.037 -20.569 -19.207 -17.938 -16.751 -15.639 -14.592 -13.606 -12.675 -11.796 -10.963 -10.175 -9.429 -8.721 -8.051 -7.415 -6.813 -6.243 -5.703 -5.193 -4.711 -4.256 -3.828 -3.425 -3.047 -2.694 -2.364 -2.058 -1.774 -1.512 -1.272 -1.054 -0.857 -0.680 -0.525 -0.390 -0.275 -0.180 -0.105 -0.050 -0.015 0.000 -0.004 -0.028 -0.071 -0.134 -0.217 -0.320 -0.443 -0.587 -0.751 -0.936 -1.142 -1.369 -1.618 -1.889 -2.182 -2.498 -2.838 -3.201 -3.589 -4.002 -4.441 -4.907 -5.401 -5.923 -6.476 -7.059 -7.675 -8.325 -9.010 -9.734 -10.497 -11.304 -12.155 -13.056 -14.009 -15.019 -16.092 -17.234 -18.453 -19.757 -21.160 -22.674 -24.320 -26.123 -28.116 -30.349 -32.892 -35.853 -39.397 -43.703 -48.213 -49.219 -47.206 -45.603 -44.855 -44.820 -45.381 -46.407 -47.558 -48.004 -46.941 -44.795 -42.495 -40.442 -38.698 -37.231 -36.000 -34.966 -34.099 -33.377 -32.782 -32.299 -31.918 -31.630 -31.429 -31.308 -31.263 -31.292 -31.392 -31.561 -31.798 -32.102 -32.473 -32.912 -33.420 -33.998 -34.648 -35.372 -36.173 -37.055 -38.019 -39.070 -40.210 -41.442 -42.764 -44.172 -45.656 -47.194 -48.751 -50.267 -51.663 -52.824 -53.626 -53.941 -53.699 -52.934 -51.783 -50.418 -48.980 -47.560 -46.208 -44.947 -43.788 -42.731 -41.773 -40.909 -40.134 -39.443 -38.832 -38.296 -37.831 -37.434 -37.102 -36.832 -36.623 -36.471 -36.377 -36.339 -36.356 -36.427 -36.553 -36.734 -36.970 -37.262 -37.610 -38.017 -38.484 -39.014 -39.610 -40.274 -41.012 -41.828 -42.728 -43.720 -44.812 -46.016 -47.344 -48.814 -50.446 -52.268 -54.313 -56.633 -59.283 -62.343 -65.914 -70.150 -75.423 -83.068 -90.489 -77.931 -71.511 -67.055 -63.591 -60.771 -58.414 -56.411 -54.690 -53.199 -51.900 -50.767 -49.776 -48.912 -48.161 -47.513 -46.958 -46.491 -46.104 -45.795 -45.559 -45.393 -45.294 -45.263 -45.296 -45.394 -45.556 -45.784 -46.077 -46.437 -46.866 -47.368 -47.945 -48.601 -49.343 -50.177 -51.111 -52.157 -53.327 -54.511 -55.694 -56.878 -58.061 0 1 1.0 3669771408.11 S2 VH 20.21 25.51 0.05 -3.364e+10 4.299e+09 -3.051e+10 6.326e+09 -2.747e+10 7.998e+09 -2.452e+10 9.333e+09 -2.169e+10 1.035e+10 -1.897e+10 1.106e+10 -1.638e+10 1.149e+10 -1.392e+10 1.164e+10 -1.160e+10 1.154e+10 -9.433e+09 1.119e+10 -7.426e+09 1.063e+10 -5.598e+09 9.870e+09 -3.961e+09 8.943e+09 -2.527e+09 7.882e+09 -1.312e+09 6.731e+09 -3.278e+08 5.539e+09 4.333e+08 4.363e+09 9.865e+08 3.267e+09 1.377e+09 2.304e+09 1.693e+09 1.497e+09 2.060e+09 7.964e+08 2.606e+09 4.526e+07 3.394e+09 -9.769e+08 4.414e+09 -2.480e+09 5.616e+09 -4.638e+09 6.930e+09 -7.589e+09 8.272e+09 -1.144e+10 9.549e+09 -1.629e+10 1.066e+10 -2.221e+10 1.150e+10 -2.926e+10 1.195e+10 -3.745e+10 1.189e+10 -4.682e+10 1.119e+10 -5.732e+10 9.712e+09 -6.892e+10 7.342e+09 -8.153e+10 3.951e+09 -9.504e+10 -5.723e+08 -1.093e+11 -6.339e+09 -1.241e+11 -1.344e+10 -1.393e+11 -2.194e+10 -1.547e+11 -3.191e+10 -1.698e+11 -4.337e+10 -1.846e+11 -5.634e+10 -1.987e+11 -7.080e+10 -2.117e+11 -8.674e+10 -2.234e+11 -1.041e+11 -2.335e+11 -1.228e+11 -2.417e+11 -1.427e+11 -2.478e+11 -1.639e+11 -2.514e+11 -1.862e+11 -2.525e+11 -2.095e+11 -2.508e+11 -2.338e+11 -2.461e+11 -2.592e+11 -2.385e+11 -2.858e+11 -2.277e+11 -3.136e+11 -2.136e+11 -3.431e+11 -1.961e+11 -3.744e+11 -1.749e+11 -4.081e+11 -1.497e+11 -4.448e+11 -1.199e+11 -4.852e+11 -8.471e+10 -5.299e+11 -4.317e+10 -5.799e+11 6.104e+09 -6.358e+11 6.487e+10 -6.985e+11 1.350e+11 -7.685e+11 2.191e+11 -8.465e+11 3.199e+11 -9.326e+11 4.403e+11 -1.027e+12 5.838e+11 -1.131e+12 7.548e+11 -1.243e+12 9.564e+11 -1.363e+12 1.193e+12 -1.490e+12 1.470e+12 -1.624e+12 1.790e+12 -1.764e+12 2.160e+12 -1.908e+12 2.584e+12 -2.056e+12 3.067e+12 -2.205e+12 3.615e+12 -2.353e+12 4.233e+12 -2.498e+12 4.927e+12 -2.638e+12 5.701e+12 -2.770e+12 6.563e+12 -2.891e+12 7.517e+12 -2.998e+12 8.567e+12 -3.088e+12 9.721e+12 -3.157e+12 1.098e+13 -3.201e+12 1.235e+13 -3.217e+12 1.384e+13 -3.201e+12 1.545e+13 -3.148e+12 1.718e+13 -3.056e+12 1.904e+13 -2.919e+12 2.103e+13 -2.734e+12 2.314e+13 -2.497e+12 2.539e+13 -2.205e+12 2.777e+13 -1.854e+12 3.027e+13 -1.442e+12 3.291e+13 -9.647e+11 3.568e+13 -4.209e+11 3.857e+13 1.925e+11 4.158e+13 8.766e+11 4.471e+13 1.632e+12 4.796e+13 2.458e+12 5.133e+13 3.357e+12 5.480e+13 4.328e+12 5.837e+13 5.374e+12 6.204e+13 6.492e+12 6.580e+13 7.681e+12 6.963e+13 8.941e+12 7.354e+13 1.027e+13 7.752e+13 1.166e+13 8.155e+13 1.312e+13 8.564e+13 1.464e+13 8.977e+13 1.621e+13 9.393e+13 1.784e+13 9.813e+13 1.952e+13 1.023e+14 2.125e+13 1.066e+14 2.302e+13 1.108e+14 2.482e+13 1.150e+14 2.666e+13 1.193e+14 2.853e+13 1.235e+14 3.042e+13 1.277e+14 3.233e+13 1.318e+14 3.426e+13 1.359e+14 3.619e+13 1.400e+14 3.811e+13 1.440e+14 4.003e+13 1.480e+14 4.194e+13 1.518e+14 4.383e+13 1.557e+14 4.569e+13 1.594e+14 4.751e+13 1.631e+14 4.929e+13 1.666e+14 5.102e+13 1.701e+14 5.269e+13 1.735e+14 5.429e+13 1.767e+14 5.582e+13 1.799e+14 5.727e+13 1.829e+14 5.863e+13 1.859e+14 5.989e+13 1.887e+14 6.105e+13 1.914e+14 6.210e+13 1.940e+14 6.304e+13 1.965e+14 6.388e+13 1.989e+14 6.461e+13 2.013e+14 6.521e+13 2.035e+14 6.569e+13 2.056e+14 6.604e+13 2.077e+14 6.626e+13 2.097e+14 6.635e+13 2.115e+14 6.632e+13 2.134e+14 6.616e+13 2.151e+14 6.588e+13 2.168e+14 6.549e+13 2.185e+14 6.498e+13 2.201e+14 6.436e+13 2.217e+14 6.365e+13 2.233e+14 6.283e+13 2.249e+14 6.193e+13 2.264e+14 6.095e+13 2.280e+14 5.989e+13 2.296e+14 5.876e+13 2.312e+14 5.756e+13 2.328e+14 5.631e+13 2.344e+14 5.501e+13 2.360e+14 5.367e+13 2.377e+14 5.229e+13 2.394e+14 5.087e+13 2.412e+14 4.943e+13 2.429e+14 4.796e+13 2.447e+14 4.648e+13 2.466e+14 4.498e+13 2.484e+14 4.346e+13 2.503e+14 4.194e+13 2.521e+14 4.041e+13 2.540e+14 3.888e+13 2.559e+14 3.735e+13 2.578e+14 3.582e+13 2.596e+14 3.429e+13 2.615e+14 3.277e+13 2.633e+14 3.125e+13 2.651e+14 2.975e+13 2.668e+14 2.826e+13 2.685e+14 2.681e+13 2.701e+14 2.538e+13 2.716e+14 2.397e+13 2.731e+14 2.259e+13 2.744e+14 2.123e+13 2.757e+14 1.991e+13 2.769e+14 1.862e+13 2.779e+14 1.737e+13 2.788e+14 1.616e+13 2.796e+14 1.500e+13 2.802e+14 1.390e+13 2.807e+14 1.285e+13 2.810e+14 1.187e+13 2.812e+14 1.095e+13 2.811e+14 1.011e+13 2.809e+14 9.342e+12 2.804e+14 8.656e+12 2.797e+14 8.054e+12 2.788e+14 7.539e+12 2.777e+14 7.113e+12 2.763e+14 6.778e+12 2.746e+14 6.534e+12 2.727e+14 6.380e+12 2.705e+14 6.317e+12 2.680e+14 6.341e+12 2.653e+14 6.450e+12 2.623e+14 6.640e+12 2.590e+14 6.905e+12 2.554e+14 7.240e+12 2.516e+14 7.639e+12 2.475e+14 8.094e+12 2.431e+14 8.599e+12 2.385e+14 9.144e+12 2.336e+14 9.721e+12 2.285e+14 1.032e+13 2.232e+14 1.094e+13 2.176e+14 1.156e+13 2.119e+14 1.219e+13 2.060e+14 1.280e+13 2.000e+14 1.339e+13 1.938e+14 1.395e+13 1.875e+14 1.447e+13 1.811e+14 1.496e+13 1.747e+14 1.542e+13 1.682e+14 1.582e+13 1.616e+14 1.618e+13 1.550e+14 1.649e+13 1.484e+14 1.675e+13 1.418e+14 1.695e+13 1.353e+14 1.709e+13 1.288e+14 1.718e+13 1.224e+14 1.722e+13 1.160e+14 1.720e+13 1.098e+14 1.713e+13 1.036e+14 1.701e+13 9.764e+13 1.684e+13 9.178e+13 1.662e+13 8.607e+13 1.636e+13 8.053e+13 1.606e+13 7.515e+13 1.572e+13 6.996e+13 1.534e+13 6.496e+13 1.493e+13 6.015e+13 1.450e+13 5.555e+13 1.403e+13 5.115e+13 1.355e+13 4.696e+13 1.304e+13 4.298e+13 1.252e+13 3.922e+13 1.198e+13 3.566e+13 1.144e+13 3.232e+13 1.088e+13 2.918e+13 1.032e+13 2.625e+13 9.763e+12 2.353e+13 9.205e+12 2.100e+13 8.650e+12 1.867e+13 8.103e+12 1.652e+13 7.565e+12 1.456e+13 7.038e+12 1.276e+13 6.525e+12 1.113e+13 6.028e+12 9.659e+12 5.549e+12 8.334e+12 5.091e+12 7.149e+12 4.654e+12 6.095e+12 4.238e+12 5.160e+12 3.845e+12 4.337e+12 3.476e+12 3.616e+12 3.130e+12 2.988e+12 2.809e+12 2.446e+12 2.511e+12 1.980e+12 2.238e+12 1.583e+12 1.987e+12 1.246e+12 1.760e+12 9.637e+11 1.554e+12 7.281e+11 1.369e+12 5.334e+11 1.203e+12 3.739e+11 1.056e+12 2.441e+11 9.254e+11 1.396e+11 8.100e+11 5.622e+10 7.083e+11 -9.803e+09 6.188e+11 -6.140e+10 5.402e+11 -1.012e+11 4.707e+11 -1.314e+11 4.095e+11 -1.537e+11 3.551e+11 -1.693e+11 3.066e+11 -1.795e+11 2.633e+11 -1.850e+11 2.244e+11 -1.865e+11 1.895e+11 -1.845e+11 1.580e+11 -1.795e+11 1.298e+11 -1.719e+11 1.045e+11 -1.621e+11 8.215e+10 -1.505e+11 6.246e+10 -1.375e+11 4.534e+10 -1.234e+11 3.075e+10 -1.088e+11 1.855e+10 -9.408e+10 8.593e+09 -7.953e+10 7.664e+08 -6.561e+10 -5.134e+09 -5.265e+10 -9.343e+09 -4.095e+10 -1.204e+10 -3.091e+10 -1.382e+10 -2.245e+10 -1.507e+10 -1.550e+10 -1.628e+10 -9.929e+09 -1.795e+10 -5.178e+09 -2.040e+10 -5.186e+08 -2.369e+10 4.742e+09 -2.765e+10 1.110e+10 -3.204e+10 1.881e+10 -3.658e+10 2.790e+10 -4.104e+10 3.829e+10 -4.523e+10 4.983e+10 -4.898e+10 6.225e+10 -5.215e+10 7.532e+10 -5.465e+10 8.877e+10 -5.640e+10 1.023e+11 -5.737e+10 1.157e+11 -5.754e+10 1.286e+11 -5.691e+10 1.408e+11 -5.553e+10 1.521e+11 -5.343e+10 1.623e+11 -5.068e+10 1.712e+11 -4.737e+10 1.788e+11 -4.357e+10 1.848e+11 -3.938e+10 1.893e+11 -3.490e+10 1.922e+11 -3.023e+10 1.936e+11 -2.546e+10 1.934e+11 -2.069e+10 1.917e+11 -1.600e+10 1.886e+11 -1.147e+10 1.842e+11 -7.165e+09 1.786e+11 -3.150e+09 1.720e+11 5.241e+08 1.644e+11 3.823e+09 1.561e+11 6.721e+09 1.471e+11 9.195e+09 1.377e+11 1.124e+10 1.279e+11 1.286e+10 1.179e+11 1.407e+10 1.079e+11 1.488e+10 9.802e+10 1.532e+10 8.830e+10 1.541e+10 7.889e+10 1.520e+10 6.985e+10 1.472e+10 6.128e+10 1.400e+10 5.324e+10 1.309e+10 4.577e+10 1.203e+10 3.891e+10 1.087e+10 3.269e+10 9.637e+09 2.711e+10 8.373e+09 2.217e+10 7.117e+09 1.786e+10 5.897e+09 1.414e+10 4.743e+09 1.099e+10 3.680e+09 8.366e+09 2.728e+09 6.221e+09 1.902e+09 4.507e+09 1.215e+09 3.175e+09 6.699e+08 2.175e+09 2.635e+08 1.459e+09 -2.524e+07 9.865e+08 -2.482e+08 7.190e+08 -4.892e+08 6.099e+08 -8.326e+08 6.056e+08 -1.329e+09 6.680e+08 -1.995e+09 7.899e+08 -2.836e+09 9.863e+08 -3.853e+09 1.283e+09 -5.044e+09 1.708e+09 -6.409e+09 2.292e+09 -7.944e+09 3.064e+09 -9.647e+09 4.054e+09 -1.151e+10 5.286e+09 -1.352e+10 6.787e+09 -1.568e+10 8.577e+09 -1.795e+10 1.067e+10 -2.033e+10 1.308e+10 -2.280e+10 1.582e+10 -2.533e+10 1.888e+10 -2.789e+10 2.226e+10 -3.047e+10 2.595e+10 -3.303e+10 2.993e+10 -3.554e+10 3.417e+10 -3.797e+10 3.865e+10 -4.030e+10 4.332e+10 -4.249e+10 4.814e+10 -4.451e+10 5.307e+10 -4.635e+10 5.805e+10 -4.797e+10 6.303e+10 -4.937e+10 6.796e+10 -5.052e+10 7.276e+10 -5.140e+10 7.738e+10 -5.202e+10 8.177e+10 -5.235e+10 8.585e+10 -5.241e+10 8.958e+10 -5.218e+10 9.290e+10 -5.167e+10 9.576e+10 -5.089e+10 9.812e+10 -4.985e+10 9.992e+10 -4.857e+10 1.011e+11 -4.705e+10 1.018e+11 -4.532e+10 1.018e+11 -4.340e+10 1.011e+11 -4.131e+10 9.982e+10 -3.908e+10 9.789e+10 -3.673e+10 9.536e+10 -3.430e+10 9.223e+10 -3.181e+10 8.856e+10 -2.929e+10 8.438e+10 -2.677e+10 7.974e+10 -2.427e+10 7.471e+10 -2.183e+10 6.937e+10 -1.947e+10 6.377e+10 -1.721e+10 5.800e+10 -1.506e+10 5.215e+10 -1.306e+10 4.629e+10 -1.120e+10 4.051e+10 -9.497e+09 3.489e+10 -7.958e+09 2.950e+10 -6.584e+09 2.442e+10 -5.373e+09 1.971e+10 -4.316e+09 1.542e+10 -3.408e+09 1.162e+10 -2.639e+09 8.329e+09 -1.994e+09 5.585e+09 -1.458e+09 3.406e+09 -1.019e+09 1.797e+09 -6.780e+08 7.414e+08 -4.842e+08 1.532e+08 -5.117e+08 -2.760e+08 -7.271e+08 -9.372e+08 -1.046e+09 -2.012e+09 -1.435e+09 -3.507e+09 -1.894e+09 -5.385e+09 -2.433e+09 -7.594e+09 -3.064e+09 -1.008e+10 -3.795e+09 -1.278e+10 -4.635e+09 -1.565e+10 -5.588e+09 -1.861e+10 -6.658e+09 -2.162e+10 -7.844e+09 -2.462e+10 -9.143e+09 -2.755e+10 -1.055e+10 -3.037e+10 -1.206e+10 -3.302e+10 -1.366e+10 -3.546e+10 -1.534e+10 -3.766e+10 -1.709e+10 -3.957e+10 -1.890e+10 -4.118e+10 -2.074e+10 -4.245e+10 -2.260e+10 -4.337e+10 -2.447e+10 -4.393e+10 -2.633e+10 -4.413e+10 -2.816e+10 -4.396e+10 -2.995e+10 -4.344e+10 -3.169e+10 -4.257e+10 -3.337e+10 -4.138e+10 -3.498e+10 -3.988e+10 -3.652e+10 -3.811e+10 -3.798e+10 -3.609e+10 -3.939e+10 -3.386e+10 -4.073e+10 -3.143e+10 -4.205e+10 -2.886e+10 -4.333e+10 -2.615e+10 -4.462e+10 -2.333e+10 -4.592e+10 -2.041e+10 -4.726e+10 -1.740e+10 -4.866e+10 -1.429e+10 -5.015e+10 -1.110e+10 -5.173e+10 -7.804e+09 -5.343e+10 -4.390e+09 -5.524e+10 -8.435e+08 -5.717e+10 2.848e+09 -5.921e+10 6.702e+09 -6.134e+10 1.072e+10 -6.355e+10 1.491e+10 -6.582e+10 1.927e+10 -6.811e+10 2.379e+10 -7.039e+10 2.844e+10 -7.265e+10 3.320e+10 -7.484e+10 3.804e+10 -7.694e+10 4.292e+10 -7.893e+10 4.781e+10 -8.078e+10 5.265e+10 -8.246e+10 5.741e+10 -8.395e+10 6.205e+10 -8.525e+10 6.653e+10 -8.632e+10 7.079e+10 -8.717e+10 7.482e+10 -8.779e+10 7.857e+10 -8.816e+10 8.202e+10 -8.828e+10 8.514e+10 -8.816e+10 8.792e+10 -8.780e+10 9.033e+10 -8.718e+10 9.238e+10 -8.634e+10 9.404e+10 -8.525e+10 9.532e+10 -8.395e+10 9.622e+10 -8.243e+10 9.674e+10 -8.070e+10 9.688e+10 -7.879e+10 9.666e+10 -7.670e+10 9.608e+10 -7.445e+10 9.516e+10 -7.206e+10 9.391e+10 -6.954e+10 9.234e+10 -6.690e+10 9.048e+10 -6.416e+10 8.834e+10 -6.135e+10 8.594e+10 -5.847e+10 8.331e+10 -5.555e+10 8.045e+10 -5.260e+10 7.741e+10 -4.965e+10 7.419e+10 -4.670e+10 7.084e+10 -4.378e+10 6.736e+10 -4.090e+10 6.380e+10 -3.808e+10 6.017e+10 -3.533e+10 5.650e+10 -3.266e+10 5.283e+10 -3.009e+10 4.917e+10 -2.761e+10 4.556e+10 -2.525e+10 4.201e+10 -2.300e+10 3.855e+10 -2.087e+10 3.519e+10 -1.887e+10 3.197e+10 -1.699e+10 2.888e+10 -1.523e+10 2.596e+10 -1.360e+10 2.320e+10 -1.210e+10 2.062e+10 -1.071e+10 1.822e+10 -9.445e+09 1.600e+10 -8.289e+09 1.397e+10 -7.239e+09 1.212e+10 -6.291e+09 1.045e+10 -5.440e+09 8.945e+09 -4.677e+09 7.607e+09 -4.001e+09 6.427e+09 -3.402e+09 5.391e+09 -2.874e+09 4.488e+09 -2.413e+09 3.707e+09 -2.011e+09 3.038e+09 -1.664e+09 2.468e+09 -1.366e+09 1.988e+09 -1.112e+09 1.586e+09 -8.977e+08 1.253e+09 -7.178e+08 9.794e+08 -5.682e+08 7.567e+08 -4.451e+08 5.773e+08 -3.449e+08 4.346e+08 -2.643e+08 3.224e+08 -2.002e+08 2.352e+08 -1.501e+08 1.686e+08 -1.113e+08 1.184e+08 -8.193e+07 8.127e+07 -6.001e+07 5.439e+07 -4.401e+07 3.536e+07 -3.260e+07 2.221e+07 -2.475e+07 1.337e+07 -1.962e+07 7.539e+06 -1.660e+07 3.676e+06 -1.522e+07 9.879e+05 -1.515e+07 -1.095e+06 -1.617e+07 -2.927e+06 -1.817e+07 -4.696e+06 -2.113e+07 -6.487e+06 -2.509e+07 -8.343e+06 -3.011e+07 -1.029e+07 -3.627e+07 -1.235e+07 -4.364e+07 -1.457e+07 -5.227e+07 -1.698e+07 -6.216e+07 -1.966e+07 -7.329e+07 -2.268e+07 -8.556e+07 -2.614e+07 -9.886e+07 -3.016e+07 -1.130e+08 -3.485e+07 -1.278e+08 -4.036e+07 -1.429e+08 -4.683e+07 -1.582e+08 -5.440e+07 -1.733e+08 -6.321e+07 -1.879e+08 -7.337e+07 -2.017e+08 -8.499e+07 -2.144e+08 -9.817e+07 -2.257e+08 -1.130e+08 -2.355e+08 -1.294e+08 -2.434e+08 -1.475e+08 -2.492e+08 -1.673e+08 -2.528e+08 -1.888e+08 -2.539e+08 -2.121e+08 -2.525e+08 -2.370e+08 -2.483e+08 -2.637e+08 -2.413e+08 -2.921e+08 -2.313e+08 -3.222e+08 -2.181e+08 -3.541e+08 -2.014e+08 -3.879e+08 -1.810e+08 -4.236e+08 -1.566e+08 -4.612e+08 -1.277e+08 -5.010e+08 -9.387e+07 -5.428e+08 -5.460e+07 -5.867e+08 -9.232e+06 -6.327e+08 4.284e+07 -6.806e+08 1.023e+08 -7.303e+08 1.699e+08 -7.815e+08 0.005 -52.224 -51.170 -50.116 -49.061 -48.007 -46.964 -46.024 -45.179 -44.420 -43.740 -43.136 -42.602 -42.134 -41.731 -41.389 -41.108 -40.885 -40.719 -40.611 -40.560 -40.566 -40.629 -40.751 -40.933 -41.176 -41.484 -41.858 -42.302 -42.821 -43.418 -44.101 -44.877 -45.755 -46.745 -47.862 -49.122 -50.548 -52.166 -54.012 -56.132 -58.585 -61.444 -64.782 -68.595 -72.519 -75.128 -74.450 -71.076 -67.000 -63.205 -59.898 -57.055 -54.590 -52.438 -50.543 -48.864 -47.369 -46.033 -44.835 -43.761 -42.797 -41.934 -41.163 -40.477 -39.871 -39.340 -38.881 -38.491 -38.167 -37.908 -37.712 -37.578 -37.507 -37.499 -37.553 -37.670 -37.853 -38.102 -38.419 -38.809 -39.273 -39.815 -40.440 -41.153 -41.958 -42.860 -43.865 -44.974 -46.188 -47.501 -48.891 -50.322 -51.729 -53.022 -54.100 -54.868 -55.245 -55.143 -54.478 -53.256 -51.618 -49.767 -47.879 -46.051 -44.331 -42.735 -41.265 -39.917 -38.684 -37.558 -36.532 -35.599 -34.753 -33.990 -33.305 -32.695 -32.157 -31.688 -31.288 -30.954 -30.688 -30.487 -30.354 -30.289 -30.295 -30.372 -30.526 -30.760 -31.079 -31.490 -32.002 -32.626 -33.375 -34.267 -35.326 -36.583 -38.080 -39.873 -42.036 -44.644 -47.643 -50.341 -51.201 -50.373 -49.449 -49.326 -50.503 -54.050 -61.020 -51.491 -44.393 -39.676 -36.050 -33.066 -30.512 -28.268 -26.264 -24.449 -22.791 -21.264 -19.850 -18.534 -17.305 -16.153 -15.071 -14.052 -13.091 -12.183 -11.324 -10.512 -9.743 -9.014 -8.324 -7.670 -7.051 -6.464 -5.909 -5.384 -4.888 -4.420 -3.980 -3.565 -3.176 -2.812 -2.472 -2.156 -1.863 -1.592 -1.344 -1.118 -0.913 -0.730 -0.567 -0.425 -0.304 -0.203 -0.122 -0.062 -0.021 -0.001 0.000 -0.019 -0.057 -0.116 -0.194 -0.293 -0.413 -0.552 -0.713 -0.894 -1.096 -1.320 -1.566 -1.834 -2.124 -2.437 -2.774 -3.135 -3.521 -3.931 -4.368 -4.832 -5.324 -5.844 -6.394 -6.976 -7.590 -8.238 -8.922 -9.644 -10.406 -11.211 -12.062 -12.961 -13.913 -14.922 -15.994 -17.135 -18.353 -19.657 -21.059 -22.573 -24.218 -26.020 -28.013 -30.245 -32.788 -35.748 -39.290 -43.594 -48.101 -49.102 -47.080 -45.462 -44.686 -44.601 -45.061 -45.891 -46.708 -46.809 -45.693 -43.756 -41.675 -39.777 -38.135 -36.736 -35.551 -34.550 -33.706 -33.001 -32.418 -31.943 -31.568 -31.283 -31.083 -30.962 -30.916 -30.943 -31.039 -31.203 -31.434 -31.733 -32.097 -32.530 -33.031 -33.602 -34.246 -34.966 -35.766 -36.650 -37.623 -38.693 -39.866 -41.152 -42.561 -44.103 -45.789 -47.629 -49.626 -51.770 -54.019 -56.267 -58.299 -59.775 -60.328 -59.816 -58.462 -56.655 -54.715 -52.820 -51.054 -49.444 -47.994 -46.699 -45.546 -44.523 -43.621 -42.828 -42.138 -41.543 -41.036 -40.612 -40.268 -39.999 -39.803 -39.678 -39.621 -39.632 -39.711 -39.857 -40.071 -40.353 -40.706 -41.131 -41.631 -42.210 -42.871 -43.621 -44.463 -45.407 -46.458 -47.623 -48.910 -50.318 -51.837 -53.433 -55.029 -56.493 -57.659 -58.428 -58.861 -59.150 -59.514 -60.142 -61.218 -63.023 -66.197 -72.474 -79.501 -67.312 -61.612 -57.944 -55.218 -53.051 -51.262 -49.750 -48.453 -47.331 -46.355 -45.505 -44.764 -44.122 -43.569 -43.097 -42.700 -42.374 -42.116 -41.921 -41.788 -41.715 -41.700 -41.743 -41.842 -41.998 -42.212 -42.483 -42.813 -43.203 -43.656 -44.173 -44.758 -45.416 -46.150 -46.967 -47.874 -48.881 -49.999 -51.130 -52.260 -53.390 -54.520 0 1 1.0 3669771408.11 S3 HH 25.38 30.17 0.05 1.312e+09 7.787e+08 1.368e+09 8.200e+08 1.426e+09 8.603e+08 1.488e+09 8.999e+08 1.552e+09 9.391e+08 1.622e+09 9.779e+08 1.695e+09 1.017e+09 1.775e+09 1.057e+09 1.860e+09 1.098e+09 1.951e+09 1.140e+09 2.049e+09 1.186e+09 2.152e+09 1.234e+09 2.262e+09 1.286e+09 2.378e+09 1.342e+09 2.498e+09 1.403e+09 2.622e+09 1.469e+09 2.749e+09 1.541e+09 2.876e+09 1.619e+09 3.003e+09 1.701e+09 3.126e+09 1.789e+09 3.243e+09 1.881e+09 3.352e+09 1.976e+09 3.452e+09 2.074e+09 3.538e+09 2.172e+09 3.608e+09 2.269e+09 3.661e+09 2.363e+09 3.695e+09 2.452e+09 3.707e+09 2.533e+09 3.698e+09 2.603e+09 3.666e+09 2.661e+09 3.610e+09 2.704e+09 3.532e+09 2.729e+09 3.433e+09 2.735e+09 3.313e+09 2.720e+09 3.175e+09 2.684e+09 3.020e+09 2.625e+09 2.852e+09 2.544e+09 2.673e+09 2.442e+09 2.486e+09 2.320e+09 2.294e+09 2.180e+09 2.101e+09 2.024e+09 1.909e+09 1.855e+09 1.720e+09 1.678e+09 1.538e+09 1.494e+09 1.365e+09 1.309e+09 1.201e+09 1.125e+09 1.049e+09 9.472e+08 9.085e+08 7.782e+08 7.817e+08 6.214e+08 6.685e+08 4.791e+08 5.692e+08 3.532e+08 4.844e+08 2.447e+08 4.143e+08 1.533e+08 3.597e+08 7.727e+07 3.211e+08 1.304e+07 2.985e+08 -4.504e+07 2.912e+08 -1.039e+08 2.971e+08 -1.703e+08 3.137e+08 -2.495e+08 3.387e+08 -3.453e+08 3.703e+08 -4.591e+08 4.079e+08 -5.919e+08 4.512e+08 -7.440e+08 5.006e+08 -9.151e+08 5.568e+08 -1.105e+09 6.212e+08 -1.315e+09 6.950e+08 -1.543e+09 7.800e+08 -1.790e+09 8.784e+08 -2.057e+09 9.922e+08 -2.343e+09 1.124e+09 -2.649e+09 1.276e+09 -2.975e+09 1.452e+09 -3.319e+09 1.654e+09 -3.682e+09 1.885e+09 -4.062e+09 2.149e+09 -4.459e+09 2.447e+09 -4.869e+09 2.783e+09 -5.291e+09 3.159e+09 -5.721e+09 3.575e+09 -6.154e+09 4.034e+09 -6.587e+09 4.534e+09 -7.013e+09 5.073e+09 -7.426e+09 5.651e+09 -7.820e+09 6.261e+09 -8.186e+09 6.898e+09 -8.517e+09 7.555e+09 -8.806e+09 8.223e+09 -9.044e+09 8.890e+09 -9.224e+09 9.544e+09 -9.339e+09 1.017e+10 -9.384e+09 1.076e+10 -9.353e+09 1.129e+10 -9.244e+09 1.174e+10 -9.054e+09 1.210e+10 -8.785e+09 1.236e+10 -8.437e+09 1.249e+10 -8.015e+09 1.249e+10 -7.527e+09 1.235e+10 -6.979e+09 1.205e+10 -6.381e+09 1.159e+10 -5.747e+09 1.099e+10 -5.087e+09 1.023e+10 -4.417e+09 9.330e+09 -3.750e+09 8.309e+09 -3.102e+09 7.190e+09 -2.486e+09 6.004e+09 -1.917e+09 4.788e+09 -1.407e+09 3.590e+09 -9.659e+08 2.464e+09 -6.033e+08 1.473e+09 -3.250e+08 6.885e+08 -1.343e+08 1.902e+08 -3.132e+07 -3.902e+07 1.053e+07 -4.140e+08 7.111e+07 -1.338e+09 1.953e+08 -2.954e+09 3.698e+08 -5.383e+09 5.741e+08 -8.753e+09 7.829e+08 -1.320e+10 9.658e+08 -1.888e+10 1.086e+09 -2.592e+10 1.101e+09 -3.449e+10 9.602e+08 -4.474e+10 6.071e+08 -5.683e+10 -2.379e+07 -7.092e+10 -1.008e+09 -8.716e+10 -2.430e+09 -1.057e+11 -4.384e+09 -1.267e+11 -6.979e+09 -1.503e+11 -1.033e+10 -1.765e+11 -1.458e+10 -2.056e+11 -1.986e+10 -2.375e+11 -2.634e+10 -2.723e+11 -3.418e+10 -3.101e+11 -4.359e+10 -3.507e+11 -5.475e+10 -3.943e+11 -6.788e+10 -4.406e+11 -8.320e+10 -4.895e+11 -1.009e+11 -5.408e+11 -1.213e+11 -5.945e+11 -1.447e+11 -6.503e+11 -1.712e+11 -7.077e+11 -2.010e+11 -7.665e+11 -2.346e+11 -8.262e+11 -2.721e+11 -8.864e+11 -3.138e+11 -9.465e+11 -3.599e+11 -1.006e+12 -4.106e+11 -1.065e+12 -4.662e+11 -1.122e+12 -5.268e+11 -1.177e+12 -5.928e+11 -1.229e+12 -6.643e+11 -1.278e+12 -7.415e+11 -1.324e+12 -8.248e+11 -1.365e+12 -9.142e+11 -1.402e+12 -1.010e+12 -1.433e+12 -1.113e+12 -1.459e+12 -1.224e+12 -1.480e+12 -1.342e+12 -1.493e+12 -1.468e+12 -1.501e+12 -1.604e+12 -1.500e+12 -1.750e+12 -1.493e+12 -1.907e+12 -1.477e+12 -2.076e+12 -1.452e+12 -2.258e+12 -1.418e+12 -2.456e+12 -1.373e+12 -2.670e+12 -1.316e+12 -2.903e+12 -1.246e+12 -3.158e+12 -1.162e+12 -3.435e+12 -1.061e+12 -3.739e+12 -9.414e+11 -4.072e+12 -8.002e+11 -4.437e+12 -6.345e+11 -4.836e+12 -4.412e+11 -5.274e+12 -2.166e+11 -5.754e+12 4.328e+10 -6.279e+12 3.429e+11 -6.853e+12 6.865e+11 -7.478e+12 1.079e+12 -8.160e+12 1.526e+12 -8.902e+12 2.032e+12 -9.706e+12 2.602e+12 -1.058e+13 3.243e+12 -1.152e+13 3.960e+12 -1.254e+13 4.760e+12 -1.363e+13 5.648e+12 -1.480e+13 6.629e+12 -1.606e+13 7.710e+12 -1.740e+13 8.897e+12 -1.884e+13 1.019e+13 -2.036e+13 1.160e+13 -2.198e+13 1.314e+13 -2.369e+13 1.479e+13 -2.551e+13 1.658e+13 -2.742e+13 1.849e+13 -2.943e+13 2.054e+13 -3.155e+13 2.273e+13 -3.376e+13 2.505e+13 -3.608e+13 2.751e+13 -3.851e+13 3.011e+13 -4.103e+13 3.285e+13 -4.366e+13 3.573e+13 -4.639e+13 3.873e+13 -4.923e+13 4.187e+13 -5.216e+13 4.514e+13 -5.519e+13 4.852e+13 -5.833e+13 5.203e+13 -6.156e+13 5.564e+13 -6.488e+13 5.935e+13 -6.830e+13 6.316e+13 -7.180e+13 6.705e+13 -7.540e+13 7.102e+13 -7.908e+13 7.506e+13 -8.285e+13 7.914e+13 -8.670e+13 8.327e+13 -9.063e+13 8.743e+13 -9.463e+13 9.161e+13 -9.871e+13 9.579e+13 -1.029e+14 9.997e+13 -1.071e+14 1.041e+14 -1.113e+14 1.083e+14 -1.157e+14 1.124e+14 -1.201e+14 1.164e+14 -1.246e+14 1.204e+14 -1.291e+14 1.243e+14 -1.336e+14 1.281e+14 -1.382e+14 1.317e+14 -1.428e+14 1.352e+14 -1.475e+14 1.386e+14 -1.521e+14 1.419e+14 -1.568e+14 1.449e+14 -1.615e+14 1.478e+14 -1.661e+14 1.504e+14 -1.708e+14 1.529e+14 -1.755e+14 1.552e+14 -1.801e+14 1.572e+14 -1.847e+14 1.590e+14 -1.893e+14 1.605e+14 -1.938e+14 1.618e+14 -1.983e+14 1.629e+14 -2.027e+14 1.637e+14 -2.071e+14 1.642e+14 -2.114e+14 1.645e+14 -2.156e+14 1.645e+14 -2.197e+14 1.642e+14 -2.238e+14 1.637e+14 -2.278e+14 1.629e+14 -2.317e+14 1.619e+14 -2.355e+14 1.606e+14 -2.392e+14 1.590e+14 -2.428e+14 1.572e+14 -2.463e+14 1.552e+14 -2.497e+14 1.529e+14 -2.530e+14 1.504e+14 -2.562e+14 1.477e+14 -2.592e+14 1.447e+14 -2.622e+14 1.416e+14 -2.651e+14 1.382e+14 -2.679e+14 1.347e+14 -2.705e+14 1.310e+14 -2.731e+14 1.272e+14 -2.756e+14 1.232e+14 -2.780e+14 1.190e+14 -2.804e+14 1.148e+14 -2.826e+14 1.104e+14 -2.847e+14 1.058e+14 -2.867e+14 1.012e+14 -2.886e+14 9.647e+13 -2.904e+14 9.164e+13 -2.921e+14 8.674e+13 -2.937e+14 8.177e+13 -2.951e+14 7.673e+13 -2.965e+14 7.165e+13 -2.977e+14 6.652e+13 -2.988e+14 6.136e+13 -2.998e+14 5.619e+13 -3.006e+14 5.100e+13 -3.013e+14 4.581e+13 -3.018e+14 4.062e+13 -3.022e+14 3.546e+13 -3.024e+14 3.033e+13 -3.024e+14 2.523e+13 -3.023e+14 2.019e+13 -3.019e+14 1.520e+13 -3.014e+14 1.029e+13 -3.007e+14 5.460e+12 -2.997e+14 7.189e+11 -2.986e+14 -3.915e+12 -2.972e+14 -8.434e+12 -2.956e+14 -1.283e+13 -2.938e+14 -1.710e+13 -2.918e+14 -2.122e+13 -2.895e+14 -2.519e+13 -2.870e+14 -2.899e+13 -2.843e+14 -3.263e+13 -2.813e+14 -3.609e+13 -2.781e+14 -3.937e+13 -2.747e+14 -4.245e+13 -2.710e+14 -4.535e+13 -2.672e+14 -4.374e+13 -2.656e+14 -4.844e+13 -2.609e+14 -5.076e+13 -2.565e+14 -5.287e+13 -2.519e+14 -5.478e+13 -2.472e+14 -5.648e+13 -2.422e+14 -5.796e+13 -2.371e+14 -5.924e+13 -2.318e+14 -6.032e+13 -2.264e+14 -6.119e+13 -2.209e+14 -6.186e+13 -2.152e+14 -6.234e+13 -2.094e+14 -6.262e+13 -2.036e+14 -6.272e+13 -1.976e+14 -6.264e+13 -1.916e+14 -6.238e+13 -1.855e+14 -6.196e+13 -1.794e+14 -6.138e+13 -1.732e+14 -6.065e+13 -1.670e+14 -5.977e+13 -1.608e+14 -5.876e+13 -1.546e+14 -5.763e+13 -1.485e+14 -5.638e+13 -1.423e+14 -5.502e+13 -1.362e+14 -5.357e+13 -1.302e+14 -5.202e+13 -1.242e+14 -5.040e+13 -1.183e+14 -4.871e+13 -1.125e+14 -4.696e+13 -1.068e+14 -4.516e+13 -1.012e+14 -4.332e+13 -9.569e+13 -4.145e+13 -9.032e+13 -3.955e+13 -8.508e+13 -3.765e+13 -7.999e+13 -3.574e+13 -7.504e+13 -3.384e+13 -7.025e+13 -3.195e+13 -6.562e+13 -3.008e+13 -6.115e+13 -2.824e+13 -5.686e+13 -2.643e+13 -5.275e+13 -2.467e+13 -4.881e+13 -2.296e+13 -4.506e+13 -2.130e+13 -4.150e+13 -1.970e+13 -3.812e+13 -1.815e+13 -3.491e+13 -1.667e+13 -3.189e+13 -1.526e+13 -2.904e+13 -1.391e+13 -2.636e+13 -1.264e+13 -2.386e+13 -1.143e+13 -2.153e+13 -1.030e+13 -1.936e+13 -9.244e+12 -1.735e+13 -8.257e+12 -1.549e+13 -7.341e+12 -1.378e+13 -6.496e+12 -1.222e+13 -5.718e+12 -1.079e+13 -5.006e+12 -9.481e+12 -4.358e+12 -8.299e+12 -3.771e+12 -7.232e+12 -3.242e+12 -6.271e+12 -2.769e+12 -5.411e+12 -2.346e+12 -4.644e+12 -1.972e+12 -3.964e+12 -1.644e+12 -3.363e+12 -1.356e+12 -2.835e+12 -1.107e+12 -2.374e+12 -8.929e+11 -1.973e+12 -7.102e+11 -1.627e+12 -5.560e+11 -1.331e+12 -4.272e+11 -1.078e+12 -3.209e+11 -8.648e+11 -2.344e+11 -6.861e+11 -1.651e+11 -5.379e+11 -1.107e+11 -4.162e+11 -6.884e+10 -3.175e+11 -3.761e+10 -2.386e+11 -1.505e+10 -1.764e+11 5.594e+08 -1.283e+11 1.083e+10 -9.207e+10 1.728e+10 -6.538e+10 2.130e+10 -4.629e+10 2.410e+10 -3.297e+10 2.664e+10 -2.367e+10 2.947e+10 -1.693e+10 3.273e+10 -1.165e+10 3.623e+10 -7.140e+09 3.969e+10 -3.108e+09 4.279e+10 5.134e+08 4.529e+10 3.680e+09 4.701e+10 6.309e+09 4.786e+10 8.328e+09 4.780e+10 9.700e+09 4.686e+10 1.042e+10 4.510e+10 1.052e+10 4.260e+10 1.006e+10 3.950e+10 9.134e+09 3.593e+10 7.841e+09 3.202e+10 6.295e+09 2.795e+10 4.614e+09 2.385e+10 2.908e+09 1.986e+10 1.278e+09 1.613e+10 -1.965e+08 1.276e+10 -1.462e+09 9.852e+09 -2.510e+09 7.464e+09 -3.390e+09 5.596e+09 -4.222e+09 4.153e+09 -5.193e+09 2.952e+09 -6.495e+09 1.764e+09 -8.266e+09 3.909e+08 -1.056e+10 -1.291e+09 -1.336e+10 -3.333e+09 -1.661e+10 -5.733e+09 -2.024e+10 -8.452e+09 -2.416e+10 -1.143e+10 -2.830e+10 -1.459e+10 -3.257e+10 -1.787e+10 -3.688e+10 -2.116e+10 -4.116e+10 -2.440e+10 -4.531e+10 -2.750e+10 -4.928e+10 -3.040e+10 -5.298e+10 -3.303e+10 -5.636e+10 -3.535e+10 -5.936e+10 -3.731e+10 -6.193e+10 -3.887e+10 -6.406e+10 -4.002e+10 -6.570e+10 -4.074e+10 -6.685e+10 -4.103e+10 -6.750e+10 -4.092e+10 -6.764e+10 -4.040e+10 -6.729e+10 -3.952e+10 -6.646e+10 -3.830e+10 -6.518e+10 -3.679e+10 -6.348e+10 -3.501e+10 -6.140e+10 -3.303e+10 -5.897e+10 -3.087e+10 -5.625e+10 -2.860e+10 -5.327e+10 -2.624e+10 -5.009e+10 -2.385e+10 -4.676e+10 -2.145e+10 -4.333e+10 -1.910e+10 -3.985e+10 -1.681e+10 -3.635e+10 -1.462e+10 -3.290e+10 -1.255e+10 -2.952e+10 -1.062e+10 -2.626e+10 -8.850e+09 -2.314e+10 -7.240e+09 -2.020e+10 -5.800e+09 -1.745e+10 -4.531e+09 -1.492e+10 -3.431e+09 -1.260e+10 -2.497e+09 -1.052e+10 -1.717e+09 -8.669e+09 -1.084e+09 -7.044e+09 -5.826e+08 -5.639e+09 -1.998e+08 -4.441e+09 8.005e+07 -3.439e+09 2.730e+08 -2.616e+09 3.958e+08 -1.952e+09 4.642e+08 -1.428e+09 4.939e+08 -1.025e+09 4.985e+08 -7.196e+08 4.896e+08 -4.921e+08 4.750e+08 -3.225e+08 4.585e+08 -1.934e+08 4.405e+08 -9.150e+07 4.190e+08 -8.136e+06 3.912e+08 6.161e+07 3.552e+08 1.196e+08 3.106e+08 1.665e+08 2.584e+08 2.029e+08 2.007e+08 2.302e+08 1.399e+08 2.515e+08 7.617e+07 2.715e+08 6.480e+06 2.962e+08 -7.721e+07 3.308e+08 -1.872e+08 3.785e+08 -3.376e+08 4.389e+08 -5.419e+08 5.095e+08 -8.121e+08 5.864e+08 -1.158e+09 6.651e+08 -1.587e+09 7.415e+08 -2.105e+09 8.116e+08 -2.715e+09 8.718e+08 -3.417e+09 9.190e+08 -4.212e+09 9.504e+08 -5.095e+09 9.641e+08 -6.060e+09 9.582e+08 -7.100e+09 9.318e+08 -8.205e+09 8.846e+08 -9.362e+09 8.167e+08 -1.056e+10 7.290e+08 -1.178e+10 6.231e+08 -1.301e+10 5.012e+08 -1.424e+10 3.659e+08 -1.544e+10 2.206e+08 -1.660e+10 6.932e+07 -1.770e+10 -8.408e+07 -1.873e+10 -2.351e+08 -1.966e+10 -3.789e+08 -2.050e+10 -5.112e+08 -2.122e+10 -6.279e+08 -2.181e+10 -7.253e+08 -2.227e+10 -7.993e+08 -2.259e+10 -8.466e+08 -2.276e+10 -8.646e+08 -2.278e+10 -8.519e+08 -2.265e+10 -8.077e+08 -2.238e+10 -7.326e+08 -2.196e+10 -6.275e+08 -2.140e+10 -4.947e+08 -2.071e+10 -3.375e+08 -1.991e+10 -1.596e+08 -1.901e+10 3.446e+07 -1.801e+10 2.395e+08 -1.695e+10 4.502e+08 -1.582e+10 6.612e+08 -1.464e+10 8.666e+08 -1.345e+10 1.061e+09 -1.224e+10 1.241e+09 -1.104e+10 1.401e+09 -9.859e+09 1.537e+09 -8.714e+09 1.648e+09 -7.619e+09 1.732e+09 -6.583e+09 1.787e+09 -5.616e+09 1.815e+09 -4.727e+09 1.817e+09 -3.920e+09 1.795e+09 -3.198e+09 1.753e+09 -2.563e+09 1.697e+09 -2.014e+09 1.631e+09 -1.546e+09 1.563e+09 -1.152e+09 1.498e+09 -8.224e+08 1.445e+09 -5.442e+08 1.408e+09 -3.042e+08 1.392e+09 -8.711e+07 1.398e+09 1.197e+08 1.422e+09 3.248e+08 1.462e+09 5.336e+08 1.510e+09 7.478e+08 1.562e+09 9.658e+08 1.610e+09 1.184e+09 1.651e+09 1.399e+09 1.681e+09 1.604e+09 1.696e+09 1.795e+09 1.694e+09 1.965e+09 1.675e+09 2.111e+09 1.636e+09 2.228e+09 1.579e+09 2.314e+09 1.503e+09 2.365e+09 1.411e+09 2.380e+09 1.302e+09 2.359e+09 1.180e+09 2.302e+09 1.047e+09 2.212e+09 9.052e+08 2.091e+09 7.584e+08 1.942e+09 6.102e+08 1.770e+09 4.639e+08 1.581e+09 3.234e+08 1.381e+09 1.923e+08 1.176e+09 7.401e+07 9.746e+08 -2.898e+07 7.839e+08 -1.151e+08 6.112e+08 -1.851e+08 4.621e+08 -2.430e+08 3.387e+08 -2.976e+08 2.364e+08 -3.625e+08 1.418e+08 -4.530e+08 3.552e+07 -5.810e+08 -1.018e+08 -7.525e+08 -2.857e+08 -9.686e+08 -5.268e+08 -1.227e+09 -8.312e+08 -1.525e+09 -1.203e+09 -1.859e+09 -1.642e+09 -2.223e+09 -2.149e+09 -2.613e+09 -2.720e+09 -3.022e+09 -3.352e+09 -3.447e+09 -4.038e+09 -3.880e+09 -4.773e+09 -4.315e+09 -5.550e+09 -4.746e+09 -6.359e+09 -5.167e+09 -7.194e+09 -5.573e+09 -8.043e+09 -5.958e+09 -8.897e+09 -6.317e+09 -9.746e+09 -6.647e+09 -1.058e+10 -6.943e+09 -1.139e+10 -7.203e+09 -1.217e+10 -7.422e+09 -1.290e+10 -7.601e+09 -1.359e+10 -7.738e+09 -1.422e+10 -7.832e+09 -1.478e+10 -7.884e+09 -1.528e+10 -7.894e+09 -1.571e+10 -7.862e+09 -1.606e+10 -7.790e+09 -1.633e+10 -7.678e+09 -1.652e+10 -7.530e+09 -1.664e+10 -7.347e+09 -1.667e+10 -7.130e+09 -1.662e+10 -6.883e+09 -1.650e+10 -6.608e+09 0.005 -53.452 -52.493 -51.535 -50.576 -49.617 -48.659 -47.700 -46.831 -46.054 -45.363 -44.753 -44.219 -43.756 -43.358 -43.027 -42.759 -42.556 -42.414 -42.336 -42.319 -42.366 -42.478 -42.655 -42.902 -43.219 -43.612 -44.085 -44.644 -45.295 -46.049 -46.917 -47.913 -49.057 -50.374 -51.901 -53.688 -55.813 -58.405 -61.698 -66.225 -73.723 -82.799 -75.491 -71.138 -69.814 -69.761 -69.577 -67.375 -63.691 -60.089 -56.982 -54.336 -52.063 -50.087 -48.353 -46.819 -45.453 -44.233 -43.139 -42.159 -41.281 -40.496 -39.797 -39.177 -38.632 -38.159 -37.754 -37.415 -37.140 -36.927 -36.776 -36.687 -36.659 -36.693 -36.789 -36.950 -37.176 -37.471 -37.836 -38.276 -38.794 -39.396 -40.086 -40.870 -41.759 -42.762 -43.892 -45.163 -46.587 -48.178 -49.951 -51.915 -54.079 -56.445 -59.016 -61.701 -63.760 -63.433 -60.418 -56.785 -53.504 -50.656 -48.173 -45.987 -44.047 -42.313 -40.756 -39.352 -38.083 -36.935 -35.895 -34.956 -34.108 -33.344 -32.659 -32.049 -31.512 -31.046 -30.649 -30.319 -30.055 -29.858 -29.728 -29.665 -29.673 -29.753 -29.908 -30.142 -30.459 -30.866 -31.371 -31.983 -32.715 -33.582 -34.606 -35.814 -37.243 -38.944 -40.993 -43.503 -46.645 -50.653 -55.403 -58.788 -59.467 -60.387 -61.880 -57.196 -49.751 -44.216 -39.996 -36.558 -33.643 -31.104 -28.851 -26.824 -24.982 -23.294 -21.737 -20.293 -18.949 -17.693 -16.516 -15.411 -14.371 -13.390 -12.464 -11.588 -10.760 -9.976 -9.233 -8.530 -7.862 -7.226 -6.625 -6.055 -5.517 -5.009 -4.529 -4.077 -3.653 -3.254 -2.881 -2.532 -2.208 -1.908 -1.631 -1.377 -1.145 -0.935 -0.747 -0.580 -0.435 -0.311 -0.207 -0.125 -0.063 -0.021 -0.000 0.000 -0.020 -0.056 -0.112 -0.190 -0.287 -0.406 -0.546 -0.707 -0.889 -1.093 -1.320 -1.568 -1.839 -2.134 -2.452 -2.794 -3.161 -3.554 -3.972 -4.418 -4.891 -5.393 -5.925 -6.488 -7.083 -7.712 -8.377 -9.079 -9.820 -10.601 -11.426 -12.298 -13.221 -14.201 -15.242 -16.349 -17.532 -18.797 -20.157 -21.628 -23.227 -24.978 -26.915 -29.087 -31.571 -34.493 -38.092 -42.906 -49.859 -54.812 -49.896 -46.301 -44.638 -43.995 -44.004 -44.429 -44.980 -45.195 -44.622 -43.250 -41.485 -39.703 -38.080 -36.660 -35.438 -34.396 -33.511 -32.766 -32.146 -31.637 -31.229 -30.914 -30.686 -30.539 -30.469 -30.473 -30.548 -30.694 -30.908 -31.191 -31.542 -31.962 -32.453 -33.016 -33.655 -34.372 -35.173 -36.063 -37.047 -38.134 -39.337 -40.669 -42.148 -43.794 -45.637 -47.714 -50.075 -52.792 -55.968 -59.754 -64.335 -69.317 -71.159 -68.690 -64.964 -61.484 -58.375 -55.637 -53.251 -51.177 -49.372 -47.800 -46.428 -45.230 -44.184 -43.275 -42.488 -41.811 -41.234 -40.749 -40.348 -40.030 -39.790 -39.626 -39.536 -39.517 -39.569 -39.691 -39.884 -40.149 -40.486 -40.899 -41.389 -41.961 -42.620 -43.370 -44.221 -45.179 -46.257 -47.468 -48.829 -50.360 -52.086 -54.037 -56.239 -58.708 -61.402 -64.137 -66.512 -68.168 -69.228 -69.922 -69.612 -67.343 -63.999 -60.734 -57.866 -55.395 -53.259 -51.399 -49.766 -48.325 -47.046 -45.908 -44.894 -43.990 -43.184 -42.468 -41.835 -41.277 -40.790 -40.370 -40.013 -39.716 -39.476 -39.292 -39.162 -39.083 -39.057 -39.081 -39.154 -39.278 -39.452 -39.676 -39.950 -40.276 -40.654 -41.086 -41.573 -42.114 -42.716 -43.380 -44.112 -44.915 -45.794 -46.744 -47.695 -48.645 -49.596 -50.547 -51.497 0 1 1.0 10036369385.73 S3 HV 25.38 30.17 0.05 7.267e+08 -3.433e+09 9.321e+08 -3.753e+09 1.165e+09 -4.086e+09 1.428e+09 -4.429e+09 1.722e+09 -4.780e+09 2.048e+09 -5.136e+09 2.407e+09 -5.494e+09 2.800e+09 -5.850e+09 3.225e+09 -6.201e+09 3.682e+09 -6.542e+09 4.170e+09 -6.870e+09 4.686e+09 -7.180e+09 5.228e+09 -7.469e+09 5.794e+09 -7.733e+09 6.378e+09 -7.969e+09 6.977e+09 -8.172e+09 7.586e+09 -8.342e+09 8.199e+09 -8.477e+09 8.810e+09 -8.574e+09 9.415e+09 -8.633e+09 1.001e+10 -8.655e+09 1.058e+10 -8.639e+09 1.113e+10 -8.587e+09 1.165e+10 -8.499e+09 1.213e+10 -8.377e+09 1.257e+10 -8.224e+09 1.297e+10 -8.041e+09 1.331e+10 -7.832e+09 1.360e+10 -7.599e+09 1.383e+10 -7.345e+09 1.401e+10 -7.073e+09 1.412e+10 -6.785e+09 1.417e+10 -6.484e+09 1.415e+10 -6.173e+09 1.407e+10 -5.854e+09 1.393e+10 -5.529e+09 1.372e+10 -5.200e+09 1.345e+10 -4.870e+09 1.312e+10 -4.539e+09 1.274e+10 -4.210e+09 1.231e+10 -3.883e+09 1.182e+10 -3.561e+09 1.129e+10 -3.246e+09 1.072e+10 -2.939e+09 1.012e+10 -2.640e+09 9.486e+09 -2.354e+09 8.830e+09 -2.080e+09 8.157e+09 -1.821e+09 7.473e+09 -1.578e+09 6.787e+09 -1.353e+09 6.103e+09 -1.147e+09 5.430e+09 -9.623e+08 4.775e+09 -7.984e+08 4.143e+09 -6.560e+08 3.542e+09 -5.351e+08 2.977e+09 -4.350e+08 2.454e+09 -3.545e+08 1.979e+09 -2.918e+08 1.553e+09 -2.448e+08 1.180e+09 -2.105e+08 8.632e+08 -1.860e+08 6.020e+08 -1.682e+08 3.962e+08 -1.548e+08 2.439e+08 -1.449e+08 1.397e+08 -1.413e+08 7.205e+07 -1.529e+08 2.001e+07 -1.913e+08 -3.849e+07 -2.632e+08 -1.155e+08 -3.701e+08 -2.123e+08 -5.115e+08 -3.257e+08 -6.882e+08 -4.506e+08 -9.013e+08 -5.805e+08 -1.151e+09 -7.093e+08 -1.438e+09 -8.306e+08 -1.763e+09 -9.381e+08 -2.124e+09 -1.026e+09 -2.520e+09 -1.089e+09 -2.950e+09 -1.123e+09 -3.410e+09 -1.122e+09 -3.899e+09 -1.083e+09 -4.412e+09 -1.005e+09 -4.945e+09 -8.832e+08 -5.494e+09 -7.176e+08 -6.055e+09 -5.078e+08 -6.621e+09 -2.542e+08 -7.186e+09 4.194e+07 -7.746e+09 3.777e+08 -8.293e+09 7.496e+08 -8.820e+09 1.153e+09 -9.320e+09 1.582e+09 -9.786e+09 2.030e+09 -1.021e+10 2.488e+09 -1.058e+10 2.947e+09 -1.089e+10 3.397e+09 -1.114e+10 3.828e+09 -1.131e+10 4.227e+09 -1.140e+10 4.581e+09 -1.141e+10 4.881e+09 -1.131e+10 5.112e+09 -1.112e+10 5.264e+09 -1.082e+10 5.329e+09 -1.041e+10 5.296e+09 -9.899e+09 5.160e+09 -9.282e+09 4.917e+09 -8.566e+09 4.569e+09 -7.760e+09 4.122e+09 -6.877e+09 3.588e+09 -5.935e+09 2.985e+09 -4.957e+09 2.339e+09 -3.970e+09 1.685e+09 -3.008e+09 1.067e+09 -2.112e+09 5.358e+08 -1.326e+09 1.462e+08 -7.065e+08 -9.222e+07 -3.134e+08 -3.651e+08 -1.023e+08 -9.825e+08 1.767e+08 -2.154e+09 7.763e+08 -4.007e+09 1.817e+09 -6.680e+09 3.374e+09 -1.032e+10 5.508e+09 -1.509e+10 8.272e+09 -2.116e+10 1.172e+10 -2.871e+10 1.587e+10 -3.791e+10 2.076e+10 -4.895e+10 2.639e+10 -6.203e+10 3.276e+10 -7.729e+10 3.983e+10 -9.495e+10 4.755e+10 -1.152e+11 5.586e+10 -1.381e+11 6.464e+10 -1.638e+11 7.379e+10 -1.926e+11 8.315e+10 -2.244e+11 9.254e+10 -2.594e+11 1.018e+11 -2.976e+11 1.106e+11 -3.391e+11 1.188e+11 -3.838e+11 1.262e+11 -4.317e+11 1.323e+11 -4.828e+11 1.369e+11 -5.371e+11 1.397e+11 -5.944e+11 1.403e+11 -6.546e+11 1.384e+11 -7.174e+11 1.336e+11 -7.827e+11 1.256e+11 -8.502e+11 1.138e+11 -9.196e+11 9.795e+10 -9.907e+11 7.761e+10 -1.063e+12 5.239e+10 -1.137e+12 2.184e+10 -1.211e+12 -1.444e+10 -1.285e+12 -5.686e+10 -1.360e+12 -1.059e+11 -1.434e+12 -1.620e+11 -1.507e+12 -2.256e+11 -1.580e+12 -2.973e+11 -1.651e+12 -3.776e+11 -1.721e+12 -4.670e+11 -1.789e+12 -5.664e+11 -1.855e+12 -6.765e+11 -1.919e+12 -7.980e+11 -1.980e+12 -9.321e+11 -2.039e+12 -1.080e+12 -2.096e+12 -1.243e+12 -2.149e+12 -1.422e+12 -2.199e+12 -1.620e+12 -2.246e+12 -1.838e+12 -2.288e+12 -2.079e+12 -2.326e+12 -2.346e+12 -2.358e+12 -2.640e+12 -2.384e+12 -2.965e+12 -2.402e+12 -3.326e+12 -2.410e+12 -3.724e+12 -2.407e+12 -4.165e+12 -2.391e+12 -4.653e+12 -2.359e+12 -5.191e+12 -2.308e+12 -5.784e+12 -2.236e+12 -6.438e+12 -2.138e+12 -7.156e+12 -2.011e+12 -7.944e+12 -1.852e+12 -8.808e+12 -1.657e+12 -9.749e+12 -1.421e+12 -1.078e+13 -1.140e+12 -1.189e+13 -8.082e+11 -1.310e+13 -4.216e+11 -1.441e+13 2.484e+10 -1.583e+13 5.356e+11 -1.735e+13 1.116e+12 -1.899e+13 1.771e+12 -2.074e+13 2.505e+12 -2.262e+13 3.323e+12 -2.462e+13 4.229e+12 -2.675e+13 5.227e+12 -2.902e+13 6.323e+12 -3.142e+13 7.518e+12 -3.396e+13 8.817e+12 -3.664e+13 1.022e+13 -3.947e+13 1.174e+13 -4.244e+13 1.336e+13 -4.556e+13 1.510e+13 -4.882e+13 1.696e+13 -5.224e+13 1.892e+13 -5.579e+13 2.100e+13 -5.950e+13 2.319e+13 -6.335e+13 2.549e+13 -6.734e+13 2.790e+13 -7.147e+13 3.042e+13 -7.573e+13 3.303e+13 -8.013e+13 3.574e+13 -8.465e+13 3.854e+13 -8.930e+13 4.141e+13 -9.405e+13 4.437e+13 -9.892e+13 4.739e+13 -1.039e+14 5.046e+13 -1.090e+14 5.359e+13 -1.141e+14 5.674e+13 -1.193e+14 5.993e+13 -1.247e+14 6.313e+13 -1.300e+14 6.633e+13 -1.354e+14 6.952e+13 -1.409e+14 7.271e+13 -1.464e+14 7.587e+13 -1.520e+14 7.899e+13 -1.575e+14 8.204e+13 -1.631e+14 8.502e+13 -1.687e+14 8.791e+13 -1.742e+14 9.070e+13 -1.798e+14 9.338e+13 -1.853e+14 9.593e+13 -1.908e+14 9.835e+13 -1.962e+14 1.006e+14 -2.016e+14 1.027e+14 -2.069e+14 1.047e+14 -2.122e+14 1.064e+14 -2.174e+14 1.080e+14 -2.225e+14 1.094e+14 -2.275e+14 1.105e+14 -2.325e+14 1.115e+14 -2.373e+14 1.122e+14 -2.420e+14 1.128e+14 -2.467e+14 1.131e+14 -2.512e+14 1.131e+14 -2.556e+14 1.130e+14 -2.600e+14 1.126e+14 -2.641e+14 1.119e+14 -2.682e+14 1.111e+14 -2.721e+14 1.100e+14 -2.759e+14 1.086e+14 -2.796e+14 1.071e+14 -2.832e+14 1.053e+14 -2.866e+14 1.033e+14 -2.899e+14 1.011e+14 -2.930e+14 9.865e+13 -2.960e+14 9.601e+13 -2.989e+14 9.318e+13 -3.016e+14 9.015e+13 -3.042e+14 8.694e+13 -3.066e+14 8.355e+13 -3.089e+14 7.999e+13 -3.111e+14 7.628e+13 -3.132e+14 7.242e+13 -3.152e+14 6.843e+13 -3.171e+14 6.430e+13 -3.189e+14 6.004e+13 -3.205e+14 5.567e+13 -3.220e+14 5.118e+13 -3.234e+14 4.660e+13 -3.247e+14 4.193e+13 -3.258e+14 3.718e+13 -3.268e+14 3.236e+13 -3.277e+14 2.748e+13 -3.285e+14 2.255e+13 -3.292e+14 1.759e+13 -3.297e+14 1.259e+13 -3.301e+14 7.577e+12 -3.303e+14 2.553e+12 -3.304e+14 -2.467e+12 -3.304e+14 -7.481e+12 -3.302e+14 -1.247e+13 -3.299e+14 -1.742e+13 -3.294e+14 -2.233e+13 -3.288e+14 -2.718e+13 -3.280e+14 -3.196e+13 -3.270e+14 -3.667e+13 -3.259e+14 -4.129e+13 -3.245e+14 -4.580e+13 -3.230e+14 -5.020e+13 -3.213e+14 -5.447e+13 -3.194e+14 -5.860e+13 -3.173e+14 -6.259e+13 -3.150e+14 -6.641e+13 -3.124e+14 -7.007e+13 -3.097e+14 -7.355e+13 -3.068e+14 -7.683e+13 -3.036e+14 -7.991e+13 -3.002e+14 -8.279e+13 -2.967e+14 -8.545e+13 -2.929e+14 -8.789e+13 -2.889e+14 -9.009e+13 -2.847e+14 -9.107e+13 -2.815e+14 -9.234e+13 -2.777e+14 -9.385e+13 -2.730e+14 -9.512e+13 -2.680e+14 -9.615e+13 -2.629e+14 -9.694e+13 -2.576e+14 -9.748e+13 -2.522e+14 -9.779e+13 -2.466e+14 -9.786e+13 -2.408e+14 -9.770e+13 -2.349e+14 -9.732e+13 -2.290e+14 -9.672e+13 -2.229e+14 -9.591e+13 -2.167e+14 -9.490e+13 -2.104e+14 -9.370e+13 -2.041e+14 -9.231e+13 -1.977e+14 -9.075e+13 -1.912e+14 -8.903e+13 -1.847e+14 -8.717e+13 -1.782e+14 -8.516e+13 -1.717e+14 -8.303e+13 -1.652e+14 -8.078e+13 -1.587e+14 -7.843e+13 -1.523e+14 -7.599e+13 -1.459e+14 -7.347e+13 -1.395e+14 -7.088e+13 -1.332e+14 -6.824e+13 -1.270e+14 -6.556e+13 -1.209e+14 -6.285e+13 -1.148e+14 -6.011e+13 -1.089e+14 -5.737e+13 -1.031e+14 -5.462e+13 -9.744e+13 -5.189e+13 -9.190e+13 -4.917e+13 -8.651e+13 -4.649e+13 -8.126e+13 -4.384e+13 -7.618e+13 -4.124e+13 -7.126e+13 -3.869e+13 -6.651e+13 -3.620e+13 -6.194e+13 -3.378e+13 -5.755e+13 -3.143e+13 -5.335e+13 -2.917e+13 -4.934e+13 -2.699e+13 -4.552e+13 -2.489e+13 -4.188e+13 -2.289e+13 -3.844e+13 -2.097e+13 -3.518e+13 -1.915e+13 -3.210e+13 -1.743e+13 -2.921e+13 -1.580e+13 -2.650e+13 -1.427e+13 -2.396e+13 -1.283e+13 -2.160e+13 -1.149e+13 -1.941e+13 -1.025e+13 -1.737e+13 -9.096e+12 -1.550e+13 -8.036e+12 -1.377e+13 -7.063e+12 -1.219e+13 -6.174e+12 -1.075e+13 -5.367e+12 -9.437e+12 -4.637e+12 -8.247e+12 -3.981e+12 -7.173e+12 -3.394e+12 -6.209e+12 -2.872e+12 -5.346e+12 -2.411e+12 -4.577e+12 -2.006e+12 -3.896e+12 -1.652e+12 -3.296e+12 -1.347e+12 -2.769e+12 -1.084e+12 -2.309e+12 -8.607e+11 -1.911e+12 -6.723e+11 -1.568e+12 -5.153e+11 -1.275e+12 -3.859e+11 -1.026e+12 -2.808e+11 -8.171e+11 -1.968e+11 -6.428e+11 -1.309e+11 -4.990e+11 -8.044e+10 -3.819e+11 -4.283e+10 -2.878e+11 -1.575e+10 -2.134e+11 2.920e+09 -1.556e+11 1.514e+10 -1.118e+11 2.275e+10 -7.939e+10 2.747e+10 -5.612e+10 3.077e+10 -3.976e+10 3.384e+10 -2.823e+10 3.734e+10 -1.974e+10 4.141e+10 -1.292e+10 4.585e+10 -6.958e+09 5.026e+10 -1.479e+09 5.426e+10 3.581e+09 5.755e+10 8.147e+09 5.991e+10 1.209e+10 6.120e+10 1.530e+10 6.139e+10 1.768e+10 6.047e+10 1.921e+10 5.853e+10 1.990e+10 5.565e+10 1.979e+10 5.199e+10 1.897e+10 4.769e+10 1.755e+10 4.293e+10 1.566e+10 3.787e+10 1.343e+10 3.270e+10 1.102e+10 2.756e+10 8.548e+09 2.263e+10 6.156e+09 1.803e+10 3.958e+09 1.389e+10 2.045e+09 1.030e+10 4.795e+08 7.354e+09 -7.188e+08 5.084e+09 -1.605e+09 3.468e+09 -2.339e+09 2.357e+09 -3.186e+09 1.466e+09 -4.416e+09 4.971e+08 -6.180e+09 -7.483e+08 -8.496e+09 -2.347e+09 -1.131e+10 -4.294e+09 -1.455e+10 -6.540e+09 -1.813e+10 -9.020e+09 -2.195e+10 -1.165e+10 -2.592e+10 -1.435e+10 -2.996e+10 -1.705e+10 -3.397e+10 -1.965e+10 -3.787e+10 -2.211e+10 -4.157e+10 -2.435e+10 -4.501e+10 -2.633e+10 -4.811e+10 -2.801e+10 -5.083e+10 -2.936e+10 -5.313e+10 -3.036e+10 -5.496e+10 -3.101e+10 -5.632e+10 -3.129e+10 -5.719e+10 -3.123e+10 -5.756e+10 -3.085e+10 -5.745e+10 -3.016e+10 -5.688e+10 -2.919e+10 -5.586e+10 -2.799e+10 -5.445e+10 -2.658e+10 -5.266e+10 -2.500e+10 -5.055e+10 -2.330e+10 -4.817e+10 -2.149e+10 -4.556e+10 -1.964e+10 -4.276e+10 -1.775e+10 -3.984e+10 -1.588e+10 -3.684e+10 -1.404e+10 -3.380e+10 -1.226e+10 -3.077e+10 -1.056e+10 -2.778e+10 -8.962e+09 -2.487e+10 -7.479e+09 -2.207e+10 -6.120e+09 -1.942e+10 -4.893e+09 -1.692e+10 -3.803e+09 -1.459e+10 -2.849e+09 -1.246e+10 -2.031e+09 -1.051e+10 -1.343e+09 -8.772e+09 -7.774e+08 -7.224e+09 -3.266e+08 -5.870e+09 2.046e+07 -4.702e+09 2.764e+08 -3.708e+09 4.541e+08 -2.878e+09 5.674e+08 -2.196e+09 6.306e+08 -1.646e+09 6.572e+08 -1.212e+09 6.599e+08 -8.739e+08 6.490e+08 -6.136e+08 6.321e+08 -4.128e+08 6.129e+08 -2.551e+08 5.915e+08 -1.274e+08 5.657e+08 -2.085e+07 5.326e+08 6.962e+07 4.895e+08 1.461e+08 4.355e+08 2.088e+08 3.711e+08 2.575e+08 2.985e+08 2.929e+08 2.207e+08 3.167e+08 1.403e+08 3.329e+08 5.707e+07 3.473e+08 -3.375e+07 3.664e+08 -1.429e+08 3.953e+08 -2.861e+08 4.353e+08 -4.805e+08 4.834e+08 -7.422e+08 5.334e+08 -1.085e+09 5.777e+08 -1.521e+09 6.082e+08 -2.056e+09 6.175e+08 -2.698e+09 5.989e+08 -3.449e+09 5.466e+08 -4.308e+09 4.564e+08 -5.275e+09 3.250e+08 -6.342e+09 1.508e+08 -7.503e+09 -6.631e+07 -8.747e+09 -3.251e+08 -1.006e+10 -6.227e+08 -1.143e+10 -9.546e+08 -1.284e+10 -1.316e+09 -1.428e+10 -1.699e+09 -1.571e+10 -2.096e+09 -1.714e+10 -2.501e+09 -1.853e+10 -2.903e+09 -1.987e+10 -3.295e+09 -2.114e+10 -3.668e+09 -2.232e+10 -4.014e+09 -2.340e+10 -4.325e+09 -2.437e+10 -4.595e+09 -2.522e+10 -4.819e+09 -2.592e+10 -4.994e+09 -2.649e+10 -5.116e+09 -2.690e+10 -5.181e+09 -2.716e+10 -5.191e+09 -2.726e+10 -5.145e+09 -2.721e+10 -5.045e+09 -2.700e+10 -4.894e+09 -2.665e+10 -4.696e+09 -2.616e+10 -4.455e+09 -2.553e+10 -4.177e+09 -2.478e+10 -3.867e+09 -2.392e+10 -3.531e+09 -2.295e+10 -3.176e+09 -2.189e+10 -2.806e+09 -2.076e+10 -2.429e+09 -1.956e+10 -2.050e+09 -1.832e+10 -1.675e+09 -1.704e+10 -1.309e+09 -1.574e+10 -9.573e+08 -1.444e+10 -6.232e+08 -1.314e+10 -3.105e+08 -1.186e+10 -2.315e+07 -1.062e+10 2.368e+08 -9.421e+09 4.674e+08 -8.276e+09 6.670e+08 -7.196e+09 8.351e+08 -6.186e+09 9.717e+08 -5.256e+09 1.078e+09 -4.409e+09 1.154e+09 -3.648e+09 1.204e+09 -2.976e+09 1.231e+09 -2.392e+09 1.239e+09 -1.891e+09 1.234e+09 -1.471e+09 1.222e+09 -1.123e+09 1.212e+09 -8.341e+08 1.210e+09 -5.927e+08 1.221e+09 -3.842e+08 1.251e+09 -1.948e+08 1.299e+09 -1.451e+07 1.362e+09 1.639e+08 1.436e+09 3.438e+08 1.514e+09 5.246e+08 1.590e+09 7.039e+08 1.656e+09 8.779e+08 1.709e+09 1.042e+09 1.742e+09 1.190e+09 1.754e+09 1.319e+09 1.741e+09 1.424e+09 1.702e+09 1.502e+09 1.638e+09 1.550e+09 1.550e+09 1.569e+09 1.438e+09 1.556e+09 1.308e+09 1.515e+09 1.161e+09 1.446e+09 1.003e+09 1.352e+09 8.380e+08 1.239e+09 6.719e+08 1.110e+09 5.099e+08 9.713e+08 3.572e+08 8.294e+08 2.182e+08 6.907e+08 9.648e+07 5.622e+08 -6.556e+06 4.500e+08 -9.301e+07 3.584e+08 -1.699e+08 2.868e+08 -2.498e+08 2.277e+08 -3.490e+08 1.676e+08 -4.824e+08 9.127e+07 -6.595e+08 -1.421e+07 -8.848e+08 -1.583e+08 -1.159e+09 -3.470e+08 -1.482e+09 -5.846e+08 -1.850e+09 -8.733e+08 -2.262e+09 -1.214e+09 -2.713e+09 -1.606e+09 -3.199e+09 -2.048e+09 -3.715e+09 -2.537e+09 -4.256e+09 -3.070e+09 -4.816e+09 -3.644e+09 -5.391e+09 -4.252e+09 -5.973e+09 -4.890e+09 -6.556e+09 -5.552e+09 -7.135e+09 -6.229e+09 -7.702e+09 -6.915e+09 -8.252e+09 -7.603e+09 -8.779e+09 -8.283e+09 -9.276e+09 -8.948e+09 -9.737e+09 -9.590e+09 -1.016e+10 -1.020e+10 -1.054e+10 -1.078e+10 -1.086e+10 -1.130e+10 -1.114e+10 -1.178e+10 -1.135e+10 -1.220e+10 -1.151e+10 -1.256e+10 -1.161e+10 -1.285e+10 -1.165e+10 -1.308e+10 -1.163e+10 -1.323e+10 -1.155e+10 -1.331e+10 -1.140e+10 -1.332e+10 -1.120e+10 -1.325e+10 -1.094e+10 0.005 -52.647 -51.709 -50.770 -49.832 -48.894 -47.955 -47.017 -46.165 -45.401 -44.719 -44.116 -43.585 -43.124 -42.725 -42.390 -42.117 -41.905 -41.753 -41.661 -41.629 -41.658 -41.748 -41.900 -42.118 -42.402 -42.758 -43.188 -43.699 -44.296 -44.988 -45.784 -46.699 -47.749 -48.958 -50.359 -51.997 -53.947 -56.328 -59.368 -63.582 -70.688 -79.266 -71.311 -66.107 -63.681 -62.402 -61.779 -61.530 -61.343 -60.808 -59.625 -57.865 -55.844 -53.826 -51.939 -50.222 -48.678 -47.295 -46.057 -44.951 -43.964 -43.085 -42.305 -41.617 -41.014 -40.491 -40.045 -39.672 -39.370 -39.138 -38.973 -38.876 -38.846 -38.884 -38.990 -39.166 -39.415 -39.739 -40.141 -40.626 -41.199 -41.866 -42.631 -43.505 -44.499 -45.623 -46.893 -48.320 -49.913 -51.671 -53.576 -55.581 -57.611 -59.597 -61.553 -63.511 -64.900 -64.065 -60.721 -56.903 -53.536 -50.663 -48.192 -46.038 -44.141 -42.455 -40.947 -39.593 -38.373 -37.273 -36.281 -35.387 -34.583 -33.863 -33.221 -32.654 -32.161 -31.738 -31.385 -31.100 -30.884 -30.735 -30.657 -30.649 -30.714 -30.857 -31.081 -31.390 -31.792 -32.294 -32.906 -33.643 -34.521 -35.562 -36.797 -38.264 -40.020 -42.141 -44.719 -47.811 -51.095 -53.281 -53.452 -52.872 -53.189 -55.421 -58.015 -54.092 -47.186 -42.047 -38.127 -34.927 -32.203 -29.821 -27.699 -25.784 -24.037 -22.432 -20.948 -19.569 -18.283 -17.078 -15.947 -14.884 -13.882 -12.936 -12.042 -11.196 -10.395 -9.636 -8.917 -8.235 -7.587 -6.971 -6.387 -5.835 -5.312 -4.819 -4.354 -3.915 -3.503 -3.117 -2.755 -2.417 -2.104 -1.813 -1.545 -1.300 -1.076 -0.875 -0.695 -0.535 -0.397 -0.280 -0.183 -0.107 -0.051 -0.015 0.000 -0.005 -0.030 -0.071 -0.132 -0.214 -0.316 -0.439 -0.583 -0.748 -0.934 -1.142 -1.372 -1.624 -1.898 -2.196 -2.517 -2.862 -3.232 -3.627 -4.048 -4.495 -4.971 -5.475 -6.009 -6.573 -7.170 -7.801 -8.467 -9.171 -9.913 -10.695 -11.520 -12.393 -13.317 -14.297 -15.337 -16.445 -17.627 -18.892 -20.251 -21.720 -23.317 -25.066 -27.001 -29.170 -31.650 -34.568 -38.163 -42.972 -49.921 -54.871 -49.954 -46.362 -44.714 -44.110 -44.206 -44.822 -45.745 -46.512 -46.409 -45.135 -43.183 -41.159 -39.337 -37.771 -36.444 -35.325 -34.385 -33.600 -32.950 -32.421 -31.999 -31.677 -31.446 -31.300 -31.235 -31.247 -31.333 -31.494 -31.726 -32.030 -32.405 -32.852 -33.373 -33.970 -34.646 -35.405 -36.250 -37.188 -38.222 -39.362 -40.616 -41.995 -43.510 -45.173 -46.992 -48.978 -51.138 -53.478 -56.027 -58.869 -62.185 -65.699 -66.145 -62.687 -58.558 -55.164 -52.403 -50.097 -48.132 -46.432 -44.950 -43.649 -42.504 -41.494 -40.605 -39.824 -39.143 -38.550 -38.041 -37.607 -37.244 -36.950 -36.723 -36.560 -36.459 -36.419 -36.439 -36.519 -36.658 -36.857 -37.116 -37.436 -37.819 -38.267 -38.783 -39.370 -40.032 -40.773 -41.601 -42.522 -43.545 -44.682 -45.946 -47.356 -48.933 -50.708 -52.720 -55.017 -57.667 -60.743 -64.285 -68.084 -71.205 -72.596 -72.980 -72.657 -70.461 -66.812 -63.169 -60.015 -57.347 -55.079 -53.132 -51.444 -49.970 -48.678 -47.539 -46.536 -45.651 -44.872 -44.188 -43.593 -43.078 -42.639 -42.270 -41.969 -41.731 -41.555 -41.437 -41.378 -41.374 -41.427 -41.534 -41.696 -41.914 -42.187 -42.516 -42.902 -43.348 -43.852 -44.420 -45.054 -45.761 -46.543 -47.406 -48.346 -49.287 -50.227 -51.168 -52.108 -53.049 0 1 1.0 10036369385.73 S3 VV 25.38 30.17 0.05 -3.295e+09 -1.737e+09 -3.548e+09 -2.045e+09 -3.804e+09 -2.385e+09 -4.058e+09 -2.759e+09 -4.308e+09 -3.166e+09 -4.551e+09 -3.607e+09 -4.781e+09 -4.082e+09 -4.997e+09 -4.589e+09 -5.192e+09 -5.127e+09 -5.364e+09 -5.693e+09 -5.508e+09 -6.285e+09 -5.621e+09 -6.899e+09 -5.700e+09 -7.530e+09 -5.742e+09 -8.174e+09 -5.745e+09 -8.826e+09 -5.706e+09 -9.480e+09 -5.625e+09 -1.013e+10 -5.503e+09 -1.077e+10 -5.341e+09 -1.140e+10 -5.139e+09 -1.200e+10 -4.901e+09 -1.257e+10 -4.628e+09 -1.311e+10 -4.324e+09 -1.362e+10 -3.994e+09 -1.408e+10 -3.641e+09 -1.448e+10 -3.271e+09 -1.484e+10 -2.887e+09 -1.514e+10 -2.496e+09 -1.538e+10 -2.101e+09 -1.556e+10 -1.708e+09 -1.568e+10 -1.321e+09 -1.573e+10 -9.447e+08 -1.571e+10 -5.823e+08 -1.564e+10 -2.377e+08 -1.549e+10 8.667e+07 -1.529e+10 3.879e+08 -1.502e+10 6.637e+08 -1.469e+10 9.130e+08 -1.431e+10 1.134e+09 -1.387e+10 1.327e+09 -1.338e+10 1.490e+09 -1.284e+10 1.624e+09 -1.226e+10 1.729e+09 -1.164e+10 1.805e+09 -1.099e+10 1.853e+09 -1.031e+10 1.874e+09 -9.614e+09 1.868e+09 -8.898e+09 1.837e+09 -8.173e+09 1.783e+09 -7.446e+09 1.708e+09 -6.724e+09 1.612e+09 -6.013e+09 1.499e+09 -5.321e+09 1.372e+09 -4.654e+09 1.232e+09 -4.019e+09 1.084e+09 -3.422e+09 9.310e+08 -2.867e+09 7.765e+08 -2.359e+09 6.247e+08 -1.903e+09 4.797e+08 -1.499e+09 3.455e+08 -1.149e+09 2.262e+08 -8.540e+08 1.250e+08 -6.127e+08 4.412e+07 -4.231e+08 -1.611e+07 -2.832e+08 -6.042e+07 -1.893e+08 -1.017e+08 -1.351e+08 -1.597e+08 -1.074e+08 -2.504e+08 -9.022e+07 -3.810e+08 -7.394e+07 -5.517e+08 -5.754e+07 -7.617e+08 -4.455e+07 -1.010e+09 -4.042e+07 -1.293e+09 -5.126e+07 -1.609e+09 -8.314e+07 -1.955e+09 -1.419e+08 -2.326e+09 -2.329e+08 -2.718e+09 -3.606e+08 -3.128e+09 -5.293e+08 -3.549e+09 -7.417e+08 -3.976e+09 -1.000e+09 -4.406e+09 -1.307e+09 -4.830e+09 -1.661e+09 -5.245e+09 -2.062e+09 -5.645e+09 -2.509e+09 -6.024e+09 -2.999e+09 -6.378e+09 -3.528e+09 -6.701e+09 -4.092e+09 -6.988e+09 -4.683e+09 -7.236e+09 -5.295e+09 -7.440e+09 -5.920e+09 -7.597e+09 -6.548e+09 -7.704e+09 -7.169e+09 -7.759e+09 -7.771e+09 -7.760e+09 -8.341e+09 -7.707e+09 -8.868e+09 -7.597e+09 -9.336e+09 -7.433e+09 -9.732e+09 -7.216e+09 -1.004e+10 -6.946e+09 -1.025e+10 -6.628e+09 -1.035e+10 -6.265e+09 -1.032e+10 -5.862e+09 -1.016e+10 -5.423e+09 -9.862e+09 -4.956e+09 -9.416e+09 -4.467e+09 -8.826e+09 -3.964e+09 -8.098e+09 -3.456e+09 -7.244e+09 -2.951e+09 -6.282e+09 -2.458e+09 -5.242e+09 -1.988e+09 -4.160e+09 -1.548e+09 -3.083e+09 -1.147e+09 -2.070e+09 -7.935e+08 -1.191e+09 -5.002e+08 -5.207e+08 -3.107e+08 -1.022e+08 -2.926e+08 2.417e+08 -4.178e+08 9.075e+08 -6.015e+08 2.211e+09 -8.229e+08 4.324e+09 -1.107e+09 7.404e+09 -1.496e+09 1.160e+10 -2.047e+09 1.708e+10 -2.830e+09 2.400e+10 -3.930e+09 3.253e+10 -5.444e+09 4.280e+10 -7.486e+09 5.496e+10 -1.019e+10 6.916e+10 -1.368e+10 8.548e+10 -1.813e+10 1.040e+11 -2.371e+10 1.249e+11 -3.059e+10 1.481e+11 -3.897e+10 1.737e+11 -4.905e+10 2.017e+11 -6.103e+10 2.319e+11 -7.514e+10 2.643e+11 -9.159e+10 2.989e+11 -1.106e+11 3.353e+11 -1.324e+11 3.736e+11 -1.571e+11 4.133e+11 -1.850e+11 4.543e+11 -2.164e+11 4.963e+11 -2.513e+11 5.390e+11 -2.900e+11 5.820e+11 -3.326e+11 6.249e+11 -3.793e+11 6.673e+11 -4.302e+11 7.087e+11 -4.856e+11 7.487e+11 -5.454e+11 7.868e+11 -6.098e+11 8.225e+11 -6.790e+11 8.553e+11 -7.530e+11 8.846e+11 -8.319e+11 9.100e+11 -9.160e+11 9.308e+11 -1.005e+12 9.466e+11 -1.100e+12 9.566e+11 -1.200e+12 9.605e+11 -1.307e+12 9.575e+11 -1.419e+12 9.471e+11 -1.538e+12 9.284e+11 -1.665e+12 9.009e+11 -1.799e+12 8.637e+11 -1.941e+12 8.158e+11 -2.093e+12 7.562e+11 -2.255e+12 6.838e+11 -2.428e+12 5.970e+11 -2.614e+12 4.942e+11 -2.813e+12 3.735e+11 -3.028e+12 2.326e+11 -3.259e+12 6.889e+10 -3.508e+12 -1.204e+11 -3.778e+12 -3.390e+11 -4.069e+12 -5.905e+11 -4.382e+12 -8.789e+11 -4.721e+12 -1.209e+12 -5.085e+12 -1.586e+12 -5.476e+12 -2.015e+12 -5.895e+12 -2.502e+12 -6.344e+12 -3.053e+12 -6.822e+12 -3.674e+12 -7.331e+12 -4.372e+12 -7.870e+12 -5.153e+12 -8.440e+12 -6.024e+12 -9.041e+12 -6.992e+12 -9.673e+12 -8.064e+12 -1.034e+13 -9.248e+12 -1.103e+13 -1.055e+13 -1.175e+13 -1.198e+13 -1.250e+13 -1.354e+13 -1.328e+13 -1.525e+13 -1.409e+13 -1.710e+13 -1.492e+13 -1.910e+13 -1.578e+13 -2.127e+13 -1.666e+13 -2.360e+13 -1.756e+13 -2.610e+13 -1.849e+13 -2.879e+13 -1.943e+13 -3.165e+13 -2.040e+13 -3.471e+13 -2.138e+13 -3.796e+13 -2.238e+13 -4.140e+13 -2.339e+13 -4.505e+13 -2.442e+13 -4.890e+13 -2.546e+13 -5.296e+13 -2.651e+13 -5.721e+13 -2.757e+13 -6.168e+13 -2.865e+13 -6.635e+13 -2.973e+13 -7.123e+13 -3.081e+13 -7.631e+13 -3.191e+13 -8.158e+13 -3.301e+13 -8.705e+13 -3.412e+13 -9.270e+13 -3.524e+13 -9.854e+13 -3.636e+13 -1.045e+14 -3.748e+13 -1.107e+14 -3.862e+13 -1.170e+14 -3.976e+13 -1.235e+14 -4.091e+13 -1.301e+14 -4.207e+13 -1.368e+14 -4.325e+13 -1.436e+14 -4.444e+13 -1.504e+14 -4.564e+13 -1.574e+14 -4.686e+13 -1.644e+14 -4.810e+13 -1.715e+14 -4.935e+13 -1.785e+14 -5.064e+13 -1.856e+14 -5.196e+13 -1.927e+14 -5.331e+13 -1.997e+14 -5.471e+13 -2.067e+14 -5.615e+13 -2.136e+14 -5.764e+13 -2.204e+14 -5.918e+13 -2.271e+14 -6.079e+13 -2.337e+14 -6.247e+13 -2.402e+14 -6.421e+13 -2.465e+14 -6.603e+13 -2.527e+14 -6.792e+13 -2.587e+14 -6.990e+13 -2.646e+14 -7.197e+13 -2.702e+14 -7.413e+13 -2.757e+14 -7.638e+13 -2.809e+14 -7.873e+13 -2.859e+14 -8.118e+13 -2.908e+14 -8.373e+13 -2.954e+14 -8.638e+13 -2.998e+14 -8.913e+13 -3.039e+14 -9.199e+13 -3.078e+14 -9.495e+13 -3.115e+14 -9.801e+13 -3.149e+14 -1.012e+14 -3.181e+14 -1.044e+14 -3.211e+14 -1.078e+14 -3.238e+14 -1.112e+14 -3.263e+14 -1.148e+14 -3.286e+14 -1.184e+14 -3.306e+14 -1.221e+14 -3.323e+14 -1.259e+14 -3.338e+14 -1.298e+14 -3.351e+14 -1.337e+14 -3.362e+14 -1.377e+14 -3.370e+14 -1.418e+14 -3.376e+14 -1.459e+14 -3.379e+14 -1.501e+14 -3.381e+14 -1.543e+14 -3.381e+14 -1.587e+14 -3.379e+14 -1.630e+14 -3.375e+14 -1.674e+14 -3.369e+14 -1.718e+14 -3.361e+14 -1.762e+14 -3.351e+14 -1.806e+14 -3.340e+14 -1.850e+14 -3.326e+14 -1.894e+14 -3.310e+14 -1.938e+14 -3.293e+14 -1.982e+14 -3.274e+14 -2.025e+14 -3.253e+14 -2.068e+14 -3.231e+14 -2.110e+14 -3.207e+14 -2.152e+14 -3.182e+14 -2.193e+14 -3.155e+14 -2.233e+14 -3.127e+14 -2.272e+14 -3.098e+14 -2.310e+14 -3.067e+14 -2.347e+14 -3.036e+14 -2.382e+14 -3.003e+14 -2.416e+14 -2.968e+14 -2.449e+14 -2.933e+14 -2.479e+14 -2.896e+14 -2.508e+14 -2.859e+14 -2.534e+14 -2.820e+14 -2.559e+14 -2.780e+14 -2.581e+14 -2.740e+14 -2.600e+14 -2.698e+14 -2.617e+14 -2.655e+14 -2.632e+14 -2.612e+14 -2.643e+14 -2.567e+14 -2.652e+14 -2.522e+14 -2.657e+14 -2.476e+14 -2.660e+14 -2.429e+14 -2.659e+14 -2.381e+14 -2.655e+14 -2.333e+14 -2.648e+14 -2.284e+14 -2.638e+14 -2.234e+14 -2.641e+14 -2.160e+14 -2.607e+14 -2.154e+14 -2.587e+14 -2.102e+14 -2.563e+14 -2.050e+14 -2.536e+14 -1.998e+14 -2.506e+14 -1.945e+14 -2.472e+14 -1.892e+14 -2.436e+14 -1.839e+14 -2.397e+14 -1.786e+14 -2.356e+14 -1.732e+14 -2.311e+14 -1.679e+14 -2.264e+14 -1.626e+14 -2.215e+14 -1.572e+14 -2.164e+14 -1.520e+14 -2.111e+14 -1.467e+14 -2.056e+14 -1.415e+14 -1.999e+14 -1.363e+14 -1.941e+14 -1.311e+14 -1.882e+14 -1.260e+14 -1.821e+14 -1.209e+14 -1.760e+14 -1.159e+14 -1.697e+14 -1.110e+14 -1.635e+14 -1.062e+14 -1.571e+14 -1.014e+14 -1.508e+14 -9.671e+13 -1.445e+14 -9.210e+13 -1.381e+14 -8.758e+13 -1.318e+14 -8.317e+13 -1.256e+14 -7.885e+13 -1.194e+14 -7.463e+13 -1.133e+14 -7.053e+13 -1.073e+14 -6.654e+13 -1.013e+14 -6.267e+13 -9.555e+13 -5.892e+13 -8.989e+13 -5.529e+13 -8.437e+13 -5.178e+13 -7.902e+13 -4.840e+13 -7.382e+13 -4.516e+13 -6.880e+13 -4.204e+13 -6.396e+13 -3.906e+13 -5.931e+13 -3.621e+13 -5.485e+13 -3.349e+13 -5.060e+13 -3.091e+13 -4.654e+13 -2.846e+13 -4.268e+13 -2.614e+13 -3.903e+13 -2.396e+13 -3.558e+13 -2.189e+13 -3.232e+13 -1.995e+13 -2.927e+13 -1.814e+13 -2.642e+13 -1.644e+13 -2.376e+13 -1.486e+13 -2.128e+13 -1.339e+13 -1.899e+13 -1.202e+13 -1.688e+13 -1.076e+13 -1.494e+13 -9.603e+12 -1.317e+13 -8.537e+12 -1.155e+13 -7.562e+12 -1.008e+13 -6.673e+12 -8.748e+12 -5.864e+12 -7.552e+12 -5.131e+12 -6.482e+12 -4.470e+12 -5.528e+12 -3.876e+12 -4.682e+12 -3.344e+12 -3.938e+12 -2.869e+12 -3.285e+12 -2.448e+12 -2.716e+12 -2.076e+12 -2.225e+12 -1.750e+12 -1.803e+12 -1.464e+12 -1.444e+12 -1.216e+12 -1.142e+12 -1.002e+12 -8.886e+11 -8.181e+11 -6.796e+11 -6.617e+11 -5.093e+11 -5.297e+11 -3.723e+11 -4.192e+11 -2.641e+11 -3.277e+11 -1.804e+11 -2.530e+11 -1.171e+11 -1.927e+11 -7.056e+10 -1.450e+11 -3.755e+10 -1.081e+11 -1.488e+10 -8.035e+10 3.573e+08 -6.034e+10 1.086e+10 -4.656e+10 1.897e+10 -3.743e+10 2.631e+10 -3.139e+10 3.368e+10 -2.707e+10 4.119e+10 -2.355e+10 4.852e+10 -2.031e+10 5.526e+10 -1.718e+10 6.101e+10 -1.414e+10 6.549e+10 -1.128e+10 6.848e+10 -8.668e+09 6.992e+10 -6.394e+09 6.981e+10 -4.512e+09 6.822e+10 -3.052e+09 6.530e+10 -2.011e+09 6.123e+10 -1.367e+09 5.624e+10 -1.076e+09 5.056e+10 -1.080e+09 4.443e+10 -1.310e+09 3.810e+10 -1.694e+09 3.180e+10 -2.156e+09 2.574e+10 -2.626e+09 2.012e+10 -3.042e+09 1.509e+10 -3.355e+09 1.078e+10 -3.539e+09 7.279e+09 -3.605e+09 4.601e+09 -3.623e+09 2.659e+09 -3.744e+09 1.195e+09 -4.179e+09 -1.866e+08 -5.097e+09 -1.849e+09 -6.535e+09 -4.000e+09 -8.439e+09 -6.700e+09 -1.073e+10 -9.911e+09 -1.333e+10 -1.355e+10 -1.617e+10 -1.752e+10 -1.918e+10 -2.171e+10 -2.231e+10 -2.599e+10 -2.549e+10 -3.025e+10 -2.866e+10 -3.439e+10 -3.176e+10 -3.831e+10 -3.474e+10 -4.191e+10 -3.753e+10 -4.513e+10 -4.009e+10 -4.790e+10 -4.237e+10 -5.018e+10 -4.436e+10 -5.193e+10 -4.601e+10 -5.313e+10 -4.730e+10 -5.379e+10 -4.821e+10 -5.390e+10 -4.875e+10 -5.349e+10 -4.890e+10 -5.258e+10 -4.868e+10 -5.123e+10 -4.810e+10 -4.946e+10 -4.718e+10 -4.734e+10 -4.594e+10 -4.491e+10 -4.441e+10 -4.224e+10 -4.263e+10 -3.937e+10 -4.062e+10 -3.637e+10 -3.843e+10 -3.330e+10 -3.610e+10 -3.020e+10 -3.367e+10 -2.712e+10 -3.116e+10 -2.410e+10 -2.863e+10 -2.119e+10 -2.610e+10 -1.842e+10 -2.360e+10 -1.581e+10 -2.117e+10 -1.338e+10 -1.883e+10 -1.116e+10 -1.660e+10 -9.153e+09 -1.450e+10 -7.361e+09 -1.255e+10 -5.789e+09 -1.074e+10 -4.431e+09 -9.104e+09 -3.278e+09 -7.627e+09 -2.320e+09 -6.314e+09 -1.540e+09 -5.164e+09 -9.216e+08 -4.169e+09 -4.457e+08 -3.323e+09 -9.151e+07 -2.615e+09 1.626e+08 -2.033e+09 3.376e+08 -1.564e+09 4.540e+08 -1.192e+09 5.298e+08 -9.010e+08 5.794e+08 -6.727e+08 6.126e+08 -4.911e+08 6.340e+08 -3.416e+08 6.441e+08 -2.137e+08 6.410e+08 -1.011e+08 6.224e+08 -4.361e+05 5.867e+08 8.860e+07 5.340e+08 1.654e+08 4.663e+08 2.293e+08 3.875e+08 2.805e+08 3.019e+08 3.213e+08 2.128e+08 3.563e+08 1.204e+08 3.930e+08 1.868e+07 4.399e+08 -1.055e+08 5.046e+08 -2.700e+08 5.908e+08 -4.945e+08 6.980e+08 -7.974e+08 8.223e+08 -1.194e+09 9.583e+08 -1.697e+09 1.100e+09 -2.314e+09 1.241e+09 -3.054e+09 1.376e+09 -3.916e+09 1.499e+09 -4.903e+09 1.606e+09 -6.009e+09 1.693e+09 -7.227e+09 1.758e+09 -8.549e+09 1.798e+09 -9.960e+09 1.812e+09 -1.144e+10 1.801e+09 -1.298e+10 1.766e+09 -1.456e+10 1.708e+09 -1.615e+10 1.631e+09 -1.774e+10 1.537e+09 -1.929e+10 1.430e+09 -2.080e+10 1.316e+09 -2.223e+10 1.198e+09 -2.356e+10 1.080e+09 -2.479e+10 9.671e+08 -2.588e+10 8.629e+08 -2.684e+10 7.702e+08 -2.763e+10 6.916e+08 -2.826e+10 6.297e+08 -2.872e+10 5.868e+08 -2.900e+10 5.637e+08 -2.911e+10 5.608e+08 -2.904e+10 5.778e+08 -2.880e+10 6.138e+08 -2.840e+10 6.674e+08 -2.783e+10 7.368e+08 -2.712e+10 8.195e+08 -2.628e+10 9.134e+08 -2.531e+10 1.016e+09 -2.424e+10 1.124e+09 -2.307e+10 1.234e+09 -2.182e+10 1.345e+09 -2.051e+10 1.454e+09 -1.916e+10 1.557e+09 -1.777e+10 1.654e+09 -1.637e+10 1.740e+09 -1.497e+10 1.816e+09 -1.358e+10 1.879e+09 -1.221e+10 1.928e+09 -1.089e+10 1.961e+09 -9.623e+09 1.979e+09 -8.416e+09 1.981e+09 -7.281e+09 1.967e+09 -6.225e+09 1.937e+09 -5.255e+09 1.892e+09 -4.375e+09 1.835e+09 -3.587e+09 1.766e+09 -2.894e+09 1.691e+09 -2.294e+09 1.611e+09 -1.782e+09 1.531e+09 -1.354e+09 1.459e+09 -9.986e+08 1.398e+09 -7.041e+08 1.356e+09 -4.568e+08 1.335e+09 -2.412e+08 1.338e+09 -4.381e+07 1.362e+09 1.454e+08 1.404e+09 3.326e+08 1.458e+09 5.204e+08 1.517e+09 7.071e+08 1.573e+09 8.891e+08 1.621e+09 1.062e+09 1.656e+09 1.219e+09 1.673e+09 1.356e+09 1.669e+09 1.467e+09 1.643e+09 1.548e+09 1.593e+09 1.597e+09 1.521e+09 1.612e+09 1.426e+09 1.592e+09 1.312e+09 1.539e+09 1.181e+09 1.454e+09 1.037e+09 1.343e+09 8.845e+08 1.208e+09 7.282e+08 1.056e+09 5.732e+08 8.943e+08 4.253e+08 7.291e+08 2.896e+08 5.681e+08 1.711e+08 4.194e+08 7.401e+07 2.912e+08 5.526e+05 1.906e+08 -5.179e+07 1.201e+08 -9.474e+07 6.991e+07 -1.507e+08 1.633e+07 -2.423e+08 -6.564e+07 -3.818e+08 -1.921e+08 -5.718e+08 -3.716e+08 -8.125e+08 -6.090e+08 -1.103e+09 -9.063e+08 -1.442e+09 -1.265e+09 -1.826e+09 -1.684e+09 -2.255e+09 -2.162e+09 -2.722e+09 -2.697e+09 -3.227e+09 -3.286e+09 -3.763e+09 -3.923e+09 -4.326e+09 -4.604e+09 -4.910e+09 -5.325e+09 -5.511e+09 -6.077e+09 -6.121e+09 -6.854e+09 -6.735e+09 -7.650e+09 -7.348e+09 -8.454e+09 -7.951e+09 -9.259e+09 -8.539e+09 -1.006e+10 -9.107e+09 -1.084e+10 -9.648e+09 -1.160e+10 -1.016e+10 -1.232e+10 -1.063e+10 -1.300e+10 -1.105e+10 -1.363e+10 -1.143e+10 -1.420e+10 -1.176e+10 -1.471e+10 -1.203e+10 -1.515e+10 -1.224e+10 -1.551e+10 -1.239e+10 -1.580e+10 -1.248e+10 -1.600e+10 -1.251e+10 -1.612e+10 -1.247e+10 -1.615e+10 -1.238e+10 -1.609e+10 -1.222e+10 -1.595e+10 -1.200e+10 0.005 -51.828 -50.876 -49.925 -48.973 -48.021 -47.069 -46.118 -45.250 -44.469 -43.769 -43.145 -42.592 -42.106 -41.681 -41.317 -41.013 -40.768 -40.579 -40.447 -40.372 -40.353 -40.392 -40.487 -40.642 -40.858 -41.136 -41.480 -41.893 -42.378 -42.942 -43.590 -44.329 -45.170 -46.125 -47.208 -48.440 -49.848 -51.470 -53.360 -55.603 -58.342 -61.848 -66.745 -74.793 -76.867 -71.089 -67.831 -66.150 -65.062 -63.901 -62.256 -60.140 -57.835 -55.585 -53.504 -51.622 -49.936 -48.428 -47.081 -45.877 -44.801 -43.842 -42.988 -42.231 -41.564 -40.981 -40.478 -40.051 -39.697 -39.414 -39.200 -39.055 -38.977 -38.967 -39.025 -39.153 -39.352 -39.623 -39.971 -40.398 -40.908 -41.507 -42.198 -42.988 -43.887 -44.901 -46.040 -47.310 -48.708 -50.218 -51.801 -53.372 -54.795 -55.908 -56.587 -56.788 -56.509 -55.733 -54.465 -52.801 -50.911 -48.957 -47.050 -45.246 -43.570 -42.025 -40.607 -39.310 -38.125 -37.044 -36.060 -35.167 -34.358 -33.628 -32.972 -32.389 -31.876 -31.432 -31.055 -30.745 -30.501 -30.323 -30.213 -30.171 -30.200 -30.304 -30.486 -30.749 -31.101 -31.548 -32.101 -32.771 -33.575 -34.533 -35.672 -37.030 -38.658 -40.625 -43.020 -45.884 -48.878 -50.681 -50.323 -48.960 -48.006 -47.938 -49.051 -51.892 -54.106 -50.005 -43.861 -39.201 -35.593 -32.626 -30.087 -27.861 -25.872 -24.072 -22.429 -20.916 -19.515 -18.212 -16.995 -15.857 -14.788 -13.781 -12.832 -11.936 -11.088 -10.287 -9.529 -8.811 -8.129 -7.481 -6.867 -6.286 -5.737 -5.218 -4.728 -4.266 -3.832 -3.424 -3.041 -2.684 -2.350 -2.041 -1.755 -1.491 -1.250 -1.031 -0.834 -0.658 -0.504 -0.370 -0.257 -0.165 -0.093 -0.042 -0.011 0.000 -0.009 -0.035 -0.080 -0.146 -0.232 -0.339 -0.466 -0.614 -0.783 -0.974 -1.186 -1.419 -1.675 -1.954 -2.255 -2.580 -2.929 -3.302 -3.700 -4.124 -4.574 -5.052 -5.559 -6.094 -6.660 -7.258 -7.889 -8.554 -9.256 -9.994 -10.771 -11.591 -12.456 -13.371 -14.340 -15.366 -16.455 -17.612 -18.846 -20.167 -21.585 -23.113 -24.768 -26.572 -28.553 -30.750 -33.213 -36.003 -39.177 -42.666 -45.899 -47.677 -47.671 -47.115 -46.893 -47.172 -47.803 -48.330 -48.027 -46.586 -44.493 -42.349 -40.421 -38.762 -37.353 -36.160 -35.153 -34.307 -33.601 -33.019 -32.548 -32.179 -31.903 -31.715 -31.608 -31.579 -31.626 -31.747 -31.939 -32.203 -32.536 -32.941 -33.418 -33.968 -34.594 -35.298 -36.084 -36.954 -37.913 -38.965 -40.117 -41.375 -42.741 -44.216 -45.796 -47.463 -49.185 -50.901 -52.519 -53.917 -54.954 -55.487 -55.409 -54.705 -53.492 -51.974 -50.341 -48.721 -47.184 -45.761 -44.461 -43.283 -42.220 -41.267 -40.415 -39.659 -38.991 -38.405 -37.897 -37.459 -37.088 -36.784 -36.543 -36.364 -36.246 -36.185 -36.183 -36.238 -36.350 -36.519 -36.746 -37.031 -37.377 -37.783 -38.254 -38.790 -39.396 -40.076 -40.834 -41.677 -42.612 -43.647 -44.794 -46.067 -47.482 -49.063 -50.839 -52.849 -55.147 -57.811 -60.952 -64.745 -69.447 -75.324 -81.025 -81.247 -77.183 -72.101 -67.501 -63.688 -60.545 -57.920 -55.696 -53.790 -52.139 -50.700 -49.440 -48.334 -47.361 -46.508 -45.760 -45.110 -44.547 -44.067 -43.664 -43.333 -43.070 -42.874 -42.741 -42.669 -42.658 -42.706 -42.813 -42.979 -43.205 -43.490 -43.836 -44.245 -44.718 -45.255 -45.863 -46.546 -47.311 -48.161 -49.105 -50.141 -51.176 -52.212 -53.247 -54.282 -55.318 0 1 1.0 10036369385.73 S3 VH 25.38 30.17 0.05 1.176e+09 -1.114e+09 1.234e+09 -1.153e+09 1.293e+09 -1.194e+09 1.352e+09 -1.238e+09 1.411e+09 -1.286e+09 1.472e+09 -1.337e+09 1.535e+09 -1.393e+09 1.600e+09 -1.452e+09 1.668e+09 -1.517e+09 1.740e+09 -1.587e+09 1.817e+09 -1.661e+09 1.899e+09 -1.739e+09 1.987e+09 -1.821e+09 2.082e+09 -1.907e+09 2.183e+09 -1.994e+09 2.291e+09 -2.082e+09 2.405e+09 -2.169e+09 2.526e+09 -2.254e+09 2.652e+09 -2.334e+09 2.782e+09 -2.409e+09 2.915e+09 -2.474e+09 3.049e+09 -2.530e+09 3.182e+09 -2.574e+09 3.312e+09 -2.603e+09 3.435e+09 -2.618e+09 3.549e+09 -2.616e+09 3.651e+09 -2.596e+09 3.738e+09 -2.560e+09 3.807e+09 -2.506e+09 3.856e+09 -2.435e+09 3.881e+09 -2.349e+09 3.881e+09 -2.249e+09 3.855e+09 -2.137e+09 3.801e+09 -2.015e+09 3.719e+09 -1.885e+09 3.610e+09 -1.750e+09 3.474e+09 -1.614e+09 3.314e+09 -1.477e+09 3.131e+09 -1.343e+09 2.929e+09 -1.214e+09 2.711e+09 -1.092e+09 2.481e+09 -9.774e+08 2.244e+09 -8.722e+08 2.003e+09 -7.767e+08 1.764e+09 -6.911e+08 1.530e+09 -6.153e+08 1.306e+09 -5.488e+08 1.094e+09 -4.909e+08 8.987e+08 -4.408e+08 7.222e+08 -3.978e+08 5.662e+08 -3.611e+08 4.321e+08 -3.305e+08 3.197e+08 -3.064e+08 2.279e+08 -2.899e+08 1.537e+08 -2.830e+08 9.209e+07 -2.881e+08 3.667e+07 -3.075e+08 -1.939e+07 -3.423e+08 -8.198e+07 -3.928e+08 -1.552e+08 -4.585e+08 -2.411e+08 -5.386e+08 -3.407e+08 -6.332e+08 -4.542e+08 -7.423e+08 -5.812e+08 -8.662e+08 -7.210e+08 -1.006e+09 -8.734e+08 -1.163e+09 -1.037e+09 -1.338e+09 -1.211e+09 -1.533e+09 -1.396e+09 -1.751e+09 -1.589e+09 -1.993e+09 -1.789e+09 -2.262e+09 -1.995e+09 -2.561e+09 -2.206e+09 -2.891e+09 -2.418e+09 -3.255e+09 -2.630e+09 -3.656e+09 -2.838e+09 -4.095e+09 -3.040e+09 -4.574e+09 -3.230e+09 -5.093e+09 -3.406e+09 -5.653e+09 -3.561e+09 -6.251e+09 -3.692e+09 -6.886e+09 -3.793e+09 -7.555e+09 -3.859e+09 -8.251e+09 -3.886e+09 -8.970e+09 -3.868e+09 -9.702e+09 -3.803e+09 -1.044e+10 -3.687e+09 -1.117e+10 -3.518e+09 -1.188e+10 -3.297e+09 -1.255e+10 -3.023e+09 -1.318e+10 -2.700e+09 -1.374e+10 -2.333e+09 -1.422e+10 -1.927e+09 -1.461e+10 -1.490e+09 -1.489e+10 -1.033e+09 -1.505e+10 -5.668e+08 -1.507e+10 -1.034e+08 -1.494e+10 3.436e+08 -1.467e+10 7.610e+08 -1.424e+10 1.135e+09 -1.365e+10 1.453e+09 -1.291e+10 1.704e+09 -1.202e+10 1.879e+09 -1.101e+10 1.969e+09 -9.882e+09 1.972e+09 -8.662e+09 1.888e+09 -7.379e+09 1.722e+09 -6.069e+09 1.486e+09 -4.768e+09 1.196e+09 -3.522e+09 8.759e+08 -2.383e+09 5.564e+08 -1.403e+09 2.760e+08 -6.453e+08 8.132e+07 -1.749e+08 -1.349e+07 3.812e+07 -1.771e+08 3.812e+08 -6.034e+08 1.211e+09 -1.388e+09 2.636e+09 -2.622e+09 4.740e+09 -4.403e+09 7.610e+09 -6.842e+09 1.134e+10 -1.006e+10 1.601e+10 -1.417e+10 2.172e+10 -1.933e+10 2.855e+10 -2.566e+10 3.659e+10 -3.332e+10 4.590e+10 -4.247e+10 5.657e+10 -5.328e+10 6.864e+10 -6.589e+10 8.217e+10 -8.050e+10 9.718e+10 -9.728e+10 1.137e+11 -1.164e+11 1.317e+11 -1.380e+11 1.511e+11 -1.623e+11 1.719e+11 -1.894e+11 1.940e+11 -2.195e+11 2.172e+11 -2.527e+11 2.414e+11 -2.891e+11 2.664e+11 -3.289e+11 2.920e+11 -3.722e+11 3.179e+11 -4.189e+11 3.436e+11 -4.692e+11 3.691e+11 -5.231e+11 3.938e+11 -5.806e+11 4.174e+11 -6.416e+11 4.394e+11 -7.061e+11 4.592e+11 -7.739e+11 4.765e+11 -8.450e+11 4.906e+11 -9.193e+11 5.010e+11 -9.964e+11 5.073e+11 -1.076e+12 5.088e+11 -1.159e+12 5.050e+11 -1.244e+12 4.953e+11 -1.332e+12 4.793e+11 -1.421e+12 4.562e+11 -1.513e+12 4.257e+11 -1.607e+12 3.870e+11 -1.703e+12 3.395e+11 -1.800e+12 2.827e+11 -1.901e+12 2.158e+11 -2.003e+12 1.381e+11 -2.109e+12 4.862e+10 -2.217e+12 -5.363e+10 -2.329e+12 -1.699e+11 -2.445e+12 -3.013e+11 -2.565e+12 -4.498e+11 -2.691e+12 -6.171e+11 -2.823e+12 -8.053e+11 -2.961e+12 -1.017e+12 -3.106e+12 -1.255e+12 -3.258e+12 -1.523e+12 -3.419e+12 -1.824e+12 -3.588e+12 -2.162e+12 -3.765e+12 -2.542e+12 -3.950e+12 -2.968e+12 -4.144e+12 -3.446e+12 -4.345e+12 -3.980e+12 -4.554e+12 -4.577e+12 -4.769e+12 -5.243e+12 -4.989e+12 -5.984e+12 -5.212e+12 -6.806e+12 -5.439e+12 -7.716e+12 -5.665e+12 -8.719e+12 -5.891e+12 -9.824e+12 -6.114e+12 -1.104e+13 -6.331e+12 -1.236e+13 -6.541e+12 -1.381e+13 -6.740e+12 -1.539e+13 -6.926e+12 -1.710e+13 -7.097e+12 -1.895e+13 -7.250e+12 -2.095e+13 -7.383e+12 -2.310e+13 -7.492e+12 -2.541e+13 -7.576e+12 -2.788e+13 -7.631e+12 -3.052e+13 -7.656e+12 -3.333e+13 -7.648e+12 -3.632e+13 -7.605e+12 -3.948e+13 -7.527e+12 -4.283e+13 -7.410e+12 -4.636e+13 -7.254e+12 -5.007e+13 -7.059e+12 -5.397e+13 -6.823e+12 -5.806e+13 -6.547e+12 -6.233e+13 -6.231e+12 -6.678e+13 -5.876e+12 -7.142e+13 -5.483e+12 -7.624e+13 -5.053e+12 -8.123e+13 -4.589e+12 -8.639e+13 -4.094e+12 -9.172e+13 -3.570e+12 -9.721e+13 -3.022e+12 -1.029e+14 -2.454e+12 -1.086e+14 -1.870e+12 -1.146e+14 -1.277e+12 -1.206e+14 -6.787e+11 -1.268e+14 -8.236e+10 -1.331e+14 5.056e+11 -1.395e+14 1.078e+12 -1.460e+14 1.628e+12 -1.525e+14 2.147e+12 -1.592e+14 2.632e+12 -1.658e+14 3.080e+12 -1.726e+14 3.480e+12 -1.793e+14 3.818e+12 -1.861e+14 4.087e+12 -1.929e+14 4.277e+12 -1.997e+14 4.382e+12 -2.064e+14 4.392e+12 -2.130e+14 4.301e+12 -2.197e+14 4.100e+12 -2.262e+14 3.783e+12 -2.326e+14 3.343e+12 -2.390e+14 2.775e+12 -2.452e+14 2.072e+12 -2.513e+14 1.229e+12 -2.572e+14 2.430e+11 -2.630e+14 -8.918e+11 -2.687e+14 -2.177e+12 -2.741e+14 -3.616e+12 -2.794e+14 -5.211e+12 -2.845e+14 -6.962e+12 -2.893e+14 -8.870e+12 -2.940e+14 -1.094e+13 -2.985e+14 -1.316e+13 -3.027e+14 -1.554e+13 -3.067e+14 -1.807e+13 -3.105e+14 -2.076e+13 -3.141e+14 -2.359e+13 -3.174e+14 -2.658e+13 -3.205e+14 -2.970e+13 -3.234e+14 -3.296e+13 -3.261e+14 -3.637e+13 -3.285e+14 -3.990e+13 -3.306e+14 -4.355e+13 -3.326e+14 -4.733e+13 -3.343e+14 -5.122e+13 -3.358e+14 -5.523e+13 -3.371e+14 -5.933e+13 -3.381e+14 -6.354e+13 -3.389e+14 -6.784e+13 -3.395e+14 -7.223e+13 -3.400e+14 -7.672e+13 -3.403e+14 -8.128e+13 -3.404e+14 -8.592e+13 -3.403e+14 -9.062e+13 -3.400e+14 -9.536e+13 -3.396e+14 -1.002e+14 -3.389e+14 -1.050e+14 -3.381e+14 -1.098e+14 -3.371e+14 -1.147e+14 -3.359e+14 -1.196e+14 -3.346e+14 -1.244e+14 -3.331e+14 -1.293e+14 -3.314e+14 -1.341e+14 -3.296e+14 -1.389e+14 -3.276e+14 -1.437e+14 -3.255e+14 -1.484e+14 -3.232e+14 -1.530e+14 -3.208e+14 -1.575e+14 -3.183e+14 -1.619e+14 -3.156e+14 -1.662e+14 -3.127e+14 -1.704e+14 -3.097e+14 -1.744e+14 -3.066e+14 -1.783e+14 -3.034e+14 -1.820e+14 -3.000e+14 -1.856e+14 -2.964e+14 -1.889e+14 -2.928e+14 -1.920e+14 -2.890e+14 -1.949e+14 -2.850e+14 -1.976e+14 -2.810e+14 -2.000e+14 -2.768e+14 -2.021e+14 -2.725e+14 -2.040e+14 -2.681e+14 -2.056e+14 -2.635e+14 -2.070e+14 -2.588e+14 -2.080e+14 -2.540e+14 -2.087e+14 -2.491e+14 -2.092e+14 -2.441e+14 -2.093e+14 -2.390e+14 -2.092e+14 -2.339e+14 -2.083e+14 -2.302e+14 -2.074e+14 -2.258e+14 -2.064e+14 -2.204e+14 -2.051e+14 -2.149e+14 -2.034e+14 -2.094e+14 -2.015e+14 -2.038e+14 -1.994e+14 -1.981e+14 -1.969e+14 -1.925e+14 -1.942e+14 -1.868e+14 -1.913e+14 -1.810e+14 -1.881e+14 -1.753e+14 -1.847e+14 -1.696e+14 -1.811e+14 -1.638e+14 -1.772e+14 -1.581e+14 -1.732e+14 -1.524e+14 -1.690e+14 -1.468e+14 -1.647e+14 -1.412e+14 -1.602e+14 -1.356e+14 -1.556e+14 -1.301e+14 -1.508e+14 -1.247e+14 -1.460e+14 -1.193e+14 -1.411e+14 -1.140e+14 -1.361e+14 -1.088e+14 -1.310e+14 -1.037e+14 -1.259e+14 -9.866e+13 -1.208e+14 -9.374e+13 -1.157e+14 -8.893e+13 -1.105e+14 -8.424e+13 -1.054e+14 -7.966e+13 -1.003e+14 -7.521e+13 -9.530e+13 -7.089e+13 -9.033e+13 -6.669e+13 -8.543e+13 -6.263e+13 -8.062e+13 -5.871e+13 -7.590e+13 -5.493e+13 -7.129e+13 -5.129e+13 -6.680e+13 -4.780e+13 -6.244e+13 -4.445e+13 -5.821e+13 -4.125e+13 -5.414e+13 -3.820e+13 -5.021e+13 -3.529e+13 -4.645e+13 -3.253e+13 -4.286e+13 -2.992e+13 -3.942e+13 -2.745e+13 -3.616e+13 -2.512e+13 -3.306e+13 -2.293e+13 -3.014e+13 -2.087e+13 -2.738e+13 -1.894e+13 -2.479e+13 -1.715e+13 -2.237e+13 -1.548e+13 -2.011e+13 -1.393e+13 -1.801e+13 -1.249e+13 -1.606e+13 -1.117e+13 -1.427e+13 -9.952e+12 -1.263e+13 -8.838e+12 -1.112e+13 -7.819e+12 -9.748e+12 -6.892e+12 -8.503e+12 -6.050e+12 -7.378e+12 -5.290e+12 -6.366e+12 -4.605e+12 -5.461e+12 -3.991e+12 -4.654e+12 -3.442e+12 -3.940e+12 -2.953e+12 -3.312e+12 -2.520e+12 -2.761e+12 -2.139e+12 -2.282e+12 -1.804e+12 -1.868e+12 -1.512e+12 -1.513e+12 -1.258e+12 -1.211e+12 -1.039e+12 -9.569e+11 -8.515e+11 -7.445e+11 -6.916e+11 -5.693e+11 -5.564e+11 -4.266e+11 -4.431e+11 -3.120e+11 -3.489e+11 -2.215e+11 -2.715e+11 -1.515e+11 -2.087e+11 -9.868e+10 -1.583e+11 -5.990e+10 -1.187e+11 -3.240e+10 -8.827e+10 -1.354e+10 -6.553e+10 -8.893e+08 -4.920e+10 7.778e+09 -3.804e+10 1.438e+10 -3.073e+10 2.027e+10 -2.599e+10 2.609e+10 -2.273e+10 3.195e+10 -2.018e+10 3.759e+10 -1.793e+10 4.269e+10 -1.584e+10 4.695e+10 -1.388e+10 5.014e+10 -1.207e+10 5.211e+10 -1.048e+10 5.283e+10 -9.148e+09 5.231e+10 -8.088e+09 5.063e+10 -7.306e+09 4.794e+10 -6.782e+09 4.440e+10 -6.481e+09 4.020e+10 -6.359e+09 3.555e+10 -6.360e+09 3.067e+10 -6.432e+09 2.574e+10 -6.521e+09 2.097e+10 -6.585e+09 1.653e+10 -6.593e+09 1.256e+10 -6.541e+09 9.150e+09 -6.455e+09 6.350e+09 -6.408e+09 4.107e+09 -6.521e+09 2.253e+09 -6.947e+09 5.233e+08 -7.812e+09 -1.368e+09 -9.168e+09 -3.646e+09 -1.099e+10 -6.427e+09 -1.323e+10 -9.741e+09 -1.579e+10 -1.356e+10 -1.861e+10 -1.782e+10 -2.163e+10 -2.241e+10 -2.478e+10 -2.725e+10 -2.801e+10 -3.222e+10 -3.126e+10 -3.719e+10 -3.448e+10 -4.207e+10 -3.761e+10 -4.675e+10 -4.062e+10 -5.112e+10 -4.345e+10 -5.512e+10 -4.605e+10 -5.865e+10 -4.839e+10 -6.166e+10 -5.045e+10 -6.411e+10 -5.220e+10 -6.595e+10 -5.362e+10 -6.717e+10 -5.469e+10 -6.777e+10 -5.539e+10 -6.774e+10 -5.573e+10 -6.713e+10 -5.571e+10 -6.594e+10 -5.531e+10 -6.423e+10 -5.457e+10 -6.205e+10 -5.349e+10 -5.944e+10 -5.209e+10 -5.648e+10 -5.040e+10 -5.321e+10 -4.844e+10 -4.972e+10 -4.625e+10 -4.606e+10 -4.385e+10 -4.229e+10 -4.129e+10 -3.848e+10 -3.860e+10 -3.469e+10 -3.583e+10 -3.097e+10 -3.300e+10 -2.737e+10 -3.016e+10 -2.392e+10 -2.734e+10 -2.067e+10 -2.458e+10 -1.763e+10 -2.190e+10 -1.484e+10 -1.934e+10 -1.230e+10 -1.691e+10 -1.003e+10 -1.464e+10 -8.024e+09 -1.254e+10 -6.281e+09 -1.062e+10 -4.791e+09 -8.889e+09 -3.540e+09 -7.346e+09 -2.513e+09 -5.991e+09 -1.688e+09 -4.818e+09 -1.043e+09 -3.819e+09 -5.547e+08 -2.983e+09 -1.978e+08 -2.296e+09 5.205e+07 -1.743e+09 2.191e+08 -1.307e+09 3.260e+08 -9.711e+08 3.924e+08 -7.158e+08 4.337e+08 -5.223e+08 4.601e+08 -3.728e+08 4.763e+08 -2.530e+08 4.829e+08 -1.524e+08 4.782e+08 -6.471e+07 4.603e+08 1.273e+07 4.286e+08 8.056e+07 3.839e+08 1.388e+08 3.288e+08 1.875e+08 2.668e+08 2.283e+08 2.010e+08 2.649e+08 1.322e+08 3.033e+08 5.668e+07 3.513e+08 -3.511e+07 4.164e+08 -1.570e+08 5.039e+08 -3.246e+08 6.159e+08 -5.528e+08 7.520e+08 -8.544e+08 9.105e+08 -1.240e+09 1.088e+09 -1.717e+09 1.283e+09 -2.292e+09 1.491e+09 -2.968e+09 1.710e+09 -3.745e+09 1.935e+09 -4.621e+09 2.164e+09 -5.592e+09 2.392e+09 -6.651e+09 2.617e+09 -7.787e+09 2.835e+09 -8.990e+09 3.043e+09 -1.024e+10 3.239e+09 -1.154e+10 3.418e+09 -1.285e+10 3.580e+09 -1.416e+10 3.722e+09 -1.546e+10 3.844e+09 -1.672e+10 3.945e+09 -1.792e+10 4.024e+09 -1.905e+10 4.083e+09 -2.008e+10 4.122e+09 -2.101e+10 4.143e+09 -2.181e+10 4.148e+09 -2.247e+10 4.138e+09 -2.299e+10 4.117e+09 -2.335e+10 4.087e+09 -2.355e+10 4.051e+09 -2.359e+10 4.011e+09 -2.346e+10 3.969e+09 -2.317e+10 3.926e+09 -2.272e+10 3.885e+09 -2.213e+10 3.845e+09 -2.139e+10 3.806e+09 -2.054e+10 3.769e+09 -1.957e+10 3.733e+09 -1.850e+10 3.695e+09 -1.736e+10 3.655e+09 -1.616e+10 3.611e+09 -1.492e+10 3.560e+09 -1.365e+10 3.502e+09 -1.238e+10 3.433e+09 -1.112e+10 3.353e+09 -9.884e+09 3.260e+09 -8.692e+09 3.154e+09 -7.556e+09 3.036e+09 -6.487e+09 2.904e+09 -5.492e+09 2.761e+09 -4.582e+09 2.609e+09 -3.760e+09 2.451e+09 -3.028e+09 2.290e+09 -2.388e+09 2.130e+09 -1.837e+09 1.976e+09 -1.368e+09 1.833e+09 -9.756e+08 1.708e+09 -6.470e+08 1.604e+09 -3.687e+08 1.527e+09 -1.268e+08 1.477e+09 9.437e+07 1.453e+09 3.073e+08 1.452e+09 5.200e+08 1.467e+09 7.370e+08 1.491e+09 9.592e+08 1.519e+09 1.184e+09 1.544e+09 1.407e+09 1.563e+09 1.622e+09 1.571e+09 1.825e+09 1.567e+09 2.008e+09 1.549e+09 2.167e+09 1.515e+09 2.295e+09 1.466e+09 2.390e+09 1.402e+09 2.447e+09 1.323e+09 2.466e+09 1.232e+09 2.444e+09 1.128e+09 2.382e+09 1.015e+09 2.282e+09 8.951e+08 2.147e+09 7.697e+08 1.980e+09 6.419e+08 1.787e+09 5.150e+08 1.574e+09 3.919e+08 1.348e+09 2.760e+08 1.117e+09 1.706e+08 8.898e+08 7.895e+07 6.745e+08 3.691e+06 4.810e+08 -5.314e+07 3.179e+08 -9.161e+07 1.918e+08 -1.165e+08 1.017e+08 -1.411e+08 2.974e+07 -1.867e+08 -5.697e+07 -2.707e+08 -1.895e+08 -3.988e+08 -3.862e+08 -5.694e+08 -6.567e+08 -7.801e+08 -1.006e+09 -1.028e+09 -1.434e+09 -1.311e+09 -1.943e+09 -1.626e+09 -2.531e+09 -1.970e+09 -3.192e+09 -2.338e+09 -3.924e+09 -2.726e+09 -4.719e+09 -3.129e+09 -5.570e+09 -3.541e+09 -6.468e+09 -3.958e+09 -7.405e+09 -4.374e+09 -8.369e+09 -4.783e+09 -9.353e+09 -5.180e+09 -1.034e+10 -5.561e+09 -1.133e+10 -5.919e+09 -1.230e+10 -6.253e+09 -1.325e+10 -6.558e+09 -1.417e+10 -6.830e+09 -1.504e+10 -7.067e+09 -1.585e+10 -7.268e+09 -1.661e+10 -7.431e+09 -1.729e+10 -7.556e+09 -1.790e+10 -7.642e+09 -1.844e+10 -7.689e+09 -1.888e+10 -7.698e+09 -1.924e+10 -7.670e+09 -1.952e+10 -7.607e+09 -1.969e+10 -7.508e+09 -1.978e+10 -7.377e+09 -1.977e+10 -7.215e+09 -1.968e+10 -7.023e+09 -1.949e+10 -6.805e+09 0.005 -52.638 -51.666 -50.694 -49.722 -48.750 -47.778 -46.806 -45.921 -45.128 -44.418 -43.788 -43.231 -42.743 -42.319 -41.959 -41.660 -41.423 -41.245 -41.126 -41.067 -41.067 -41.127 -41.248 -41.431 -41.680 -41.995 -42.381 -42.842 -43.383 -44.009 -44.727 -45.549 -46.483 -47.546 -48.755 -50.136 -51.719 -53.551 -55.695 -58.252 -61.382 -65.386 -70.930 -79.829 -83.004 -78.453 -75.634 -72.000 -67.415 -63.188 -59.618 -56.616 -54.058 -51.851 -49.923 -48.224 -46.716 -45.371 -44.168 -43.090 -42.123 -41.257 -40.484 -39.796 -39.187 -38.654 -38.192 -37.799 -37.471 -37.209 -37.009 -36.871 -36.795 -36.781 -36.830 -36.941 -37.118 -37.360 -37.671 -38.053 -38.509 -39.043 -39.658 -40.358 -41.152 -42.045 -43.045 -44.158 -45.387 -46.731 -48.181 -49.710 -51.268 -52.761 -54.055 -54.983 -55.373 -55.105 -54.167 -52.688 -50.884 -48.954 -47.035 -45.200 -43.480 -41.888 -40.421 -39.074 -37.840 -36.711 -35.680 -34.741 -33.887 -33.113 -32.414 -31.788 -31.232 -30.745 -30.324 -29.968 -29.677 -29.450 -29.289 -29.192 -29.163 -29.205 -29.318 -29.506 -29.773 -30.126 -30.570 -31.116 -31.774 -32.558 -33.486 -34.584 -35.885 -37.434 -39.299 -41.580 -44.433 -48.058 -52.279 -54.881 -54.289 -52.909 -52.922 -55.000 -56.676 -52.180 -45.734 -40.837 -37.038 -33.914 -31.244 -28.906 -26.821 -24.939 -23.222 -21.645 -20.187 -18.832 -17.569 -16.389 -15.281 -14.240 -13.259 -12.333 -11.459 -10.632 -9.850 -9.110 -8.408 -7.741 -7.109 -6.512 -5.947 -5.413 -4.909 -4.433 -3.986 -3.566 -3.172 -2.804 -2.460 -2.141 -1.845 -1.573 -1.323 -1.096 -0.891 -0.708 -0.546 -0.406 -0.286 -0.188 -0.110 -0.053 -0.016 0.000 -0.004 -0.024 -0.065 -0.126 -0.208 -0.311 -0.434 -0.578 -0.743 -0.930 -1.139 -1.369 -1.622 -1.897 -2.195 -2.517 -2.863 -3.234 -3.630 -4.051 -4.500 -4.975 -5.480 -6.013 -6.577 -7.174 -7.803 -8.467 -9.168 -9.905 -10.681 -11.500 -12.365 -13.280 -14.249 -15.275 -16.364 -17.523 -18.758 -20.080 -21.500 -23.030 -24.687 -26.494 -28.479 -30.680 -33.146 -35.941 -39.119 -42.612 -45.846 -47.620 -47.600 -47.006 -46.696 -46.784 -47.044 -47.017 -46.245 -44.707 -42.800 -40.897 -39.169 -37.657 -36.353 -35.236 -34.284 -33.478 -32.801 -32.240 -31.782 -31.421 -31.149 -30.959 -30.847 -30.810 -30.845 -30.952 -31.127 -31.369 -31.679 -32.056 -32.503 -33.019 -33.607 -34.270 -35.011 -35.834 -36.742 -37.743 -38.843 -40.054 -41.383 -42.843 -44.445 -46.203 -48.127 -50.220 -52.465 -54.807 -57.109 -59.110 -60.429 -60.713 -59.904 -58.299 -56.317 -54.266 -52.309 -50.510 -48.888 -47.439 -46.150 -45.007 -43.999 -43.114 -42.341 -41.671 -41.095 -40.606 -40.198 -39.869 -39.616 -39.436 -39.327 -39.288 -39.317 -39.415 -39.581 -39.816 -40.121 -40.499 -40.951 -41.482 -42.095 -42.795 -43.590 -44.486 -45.495 -46.628 -47.900 -49.330 -50.939 -52.752 -54.793 -57.068 -59.527 -61.974 -63.998 -65.240 -65.901 -66.587 -67.858 -70.076 -72.049 -69.329 -64.593 -60.688 -57.596 -55.076 -52.968 -51.170 -49.616 -48.259 -47.067 -46.017 -45.090 -44.271 -43.550 -42.918 -42.367 -41.892 -41.487 -41.149 -40.875 -40.661 -40.506 -40.407 -40.365 -40.377 -40.443 -40.562 -40.736 -40.963 -41.246 -41.584 -41.979 -42.433 -42.947 -43.522 -44.164 -44.877 -45.667 -46.538 -47.498 -48.544 -49.589 -50.634 -51.680 -52.725 -53.771 0 1 1.0 10036369385.73 S4 HH 30.06 34.35 0.05 -3.893e+10 -3.153e+10 -3.835e+10 -3.282e+10 -3.766e+10 -3.395e+10 -3.688e+10 -3.490e+10 -3.601e+10 -3.567e+10 -3.506e+10 -3.625e+10 -3.404e+10 -3.665e+10 -3.294e+10 -3.687e+10 -3.179e+10 -3.690e+10 -3.058e+10 -3.676e+10 -2.933e+10 -3.645e+10 -2.805e+10 -3.598e+10 -2.674e+10 -3.536e+10 -2.541e+10 -3.460e+10 -2.408e+10 -3.372e+10 -2.274e+10 -3.271e+10 -2.140e+10 -3.161e+10 -2.008e+10 -3.042e+10 -1.877e+10 -2.916e+10 -1.748e+10 -2.784e+10 -1.622e+10 -2.647e+10 -1.499e+10 -2.506e+10 -1.380e+10 -2.363e+10 -1.264e+10 -2.218e+10 -1.153e+10 -2.074e+10 -1.046e+10 -1.930e+10 -9.440e+09 -1.788e+10 -8.467e+09 -1.648e+10 -7.546e+09 -1.512e+10 -6.677e+09 -1.379e+10 -5.863e+09 -1.251e+10 -5.104e+09 -1.128e+10 -4.402e+09 -1.010e+10 -3.756e+09 -8.989e+09 -3.166e+09 -7.936e+09 -2.632e+09 -6.949e+09 -2.153e+09 -6.031e+09 -1.728e+09 -5.182e+09 -1.355e+09 -4.405e+09 -1.032e+09 -3.699e+09 -7.574e+08 -3.064e+09 -5.273e+08 -2.499e+09 -3.392e+08 -2.003e+09 -1.895e+08 -1.573e+09 -7.451e+07 -1.206e+09 9.621e+06 -9.006e+08 6.732e+07 -6.512e+08 1.033e+08 -4.538e+08 1.231e+08 -3.037e+08 1.331e+08 -1.945e+08 1.410e+08 -1.178e+08 1.544e+08 -6.274e+07 1.781e+08 -1.639e+07 2.127e+08 3.206e+07 2.555e+08 8.864e+07 3.032e+08 1.552e+08 3.529e+08 2.314e+08 4.021e+08 3.155e+08 4.490e+08 4.058e+08 4.924e+08 5.009e+08 5.312e+08 5.995e+08 5.649e+08 7.009e+08 5.928e+08 8.047e+08 6.147e+08 9.110e+08 6.304e+08 1.020e+09 6.399e+08 1.134e+09 6.430e+08 1.253e+09 6.397e+08 1.379e+09 6.296e+08 1.515e+09 6.127e+08 1.664e+09 5.885e+08 1.828e+09 5.563e+08 2.010e+09 5.153e+08 2.215e+09 4.644e+08 2.447e+09 4.021e+08 2.709e+09 3.269e+08 3.007e+09 2.369e+08 3.345e+09 1.301e+08 3.729e+09 4.603e+06 4.164e+09 -1.418e+08 4.654e+09 -3.114e+08 5.205e+09 -5.056e+08 5.822e+09 -7.264e+08 6.509e+09 -9.754e+08 7.273e+09 -1.253e+09 8.116e+09 -1.561e+09 9.043e+09 -1.898e+09 1.006e+10 -2.265e+09 1.116e+10 -2.660e+09 1.236e+10 -3.083e+09 1.366e+10 -3.532e+09 1.506e+10 -4.004e+09 1.655e+10 -4.499e+09 1.815e+10 -5.011e+09 1.985e+10 -5.539e+09 2.166e+10 -6.080e+09 2.356e+10 -6.629e+09 2.557e+10 -7.185e+09 2.768e+10 -7.744e+09 2.989e+10 -8.303e+09 3.219e+10 -8.861e+09 3.458e+10 -9.418e+09 3.707e+10 -9.969e+09 3.965e+10 -1.051e+10 4.229e+10 -1.104e+10 4.501e+10 -1.155e+10 4.778e+10 -1.205e+10 5.060e+10 -1.253e+10 5.344e+10 -1.300e+10 5.630e+10 -1.344e+10 5.915e+10 -1.385e+10 6.199e+10 -1.425e+10 6.477e+10 -1.461e+10 6.749e+10 -1.495e+10 7.011e+10 -1.526e+10 7.261e+10 -1.553e+10 7.496e+10 -1.576e+10 7.714e+10 -1.596e+10 7.912e+10 -1.612e+10 8.087e+10 -1.624e+10 8.236e+10 -1.631e+10 8.358e+10 -1.633e+10 8.450e+10 -1.630e+10 8.511e+10 -1.623e+10 8.539e+10 -1.611e+10 8.534e+10 -1.593e+10 8.493e+10 -1.571e+10 8.419e+10 -1.544e+10 8.310e+10 -1.513e+10 8.167e+10 -1.477e+10 7.993e+10 -1.438e+10 7.789e+10 -1.396e+10 7.556e+10 -1.351e+10 7.298e+10 -1.304e+10 7.017e+10 -1.256e+10 6.716e+10 -1.206e+10 6.399e+10 -1.156e+10 6.069e+10 -1.106e+10 5.729e+10 -1.057e+10 5.382e+10 -1.009e+10 5.033e+10 -9.621e+09 4.685e+10 -9.170e+09 4.340e+10 -8.739e+09 4.003e+10 -8.328e+09 3.673e+10 -7.937e+09 3.354e+10 -7.567e+09 3.047e+10 -7.216e+09 2.755e+10 -6.882e+09 2.478e+10 -6.564e+09 2.217e+10 -6.261e+09 1.974e+10 -5.969e+09 1.749e+10 -5.687e+09 1.541e+10 -5.413e+09 1.351e+10 -5.146e+09 1.179e+10 -4.884e+09 1.024e+10 -4.627e+09 8.846e+09 -4.374e+09 7.608e+09 -4.125e+09 6.514e+09 -3.880e+09 5.553e+09 -3.637e+09 4.713e+09 -3.397e+09 3.984e+09 -3.159e+09 3.354e+09 -2.922e+09 2.812e+09 -2.685e+09 2.349e+09 -2.447e+09 1.954e+09 -2.208e+09 1.620e+09 -1.967e+09 1.339e+09 -1.725e+09 1.104e+09 -1.483e+09 9.110e+08 -1.244e+09 7.533e+08 -1.012e+09 6.263e+08 -7.917e+08 5.253e+08 -5.900e+08 4.464e+08 -4.127e+08 3.869e+08 -2.646e+08 3.471e+08 -1.446e+08 3.323e+08 -4.010e+07 3.526e+08 7.440e+07 4.196e+08 2.298e+08 5.402e+08 4.522e+08 7.173e+08 7.593e+08 9.530e+08 1.162e+09 1.249e+09 1.668e+09 1.609e+09 2.281e+09 2.033e+09 3.002e+09 2.521e+09 3.828e+09 3.070e+09 4.756e+09 3.677e+09 5.777e+09 4.332e+09 6.883e+09 5.027e+09 8.059e+09 5.749e+09 9.290e+09 6.484e+09 1.056e+10 7.215e+09 1.185e+10 7.924e+09 1.313e+10 8.593e+09 1.439e+10 9.203e+09 1.560e+10 9.736e+09 1.674e+10 1.017e+10 1.778e+10 1.050e+10 1.870e+10 1.070e+10 1.948e+10 1.076e+10 2.009e+10 1.068e+10 2.052e+10 1.045e+10 2.075e+10 1.007e+10 2.076e+10 9.548e+09 2.056e+10 8.886e+09 2.012e+10 8.100e+09 1.947e+10 7.206e+09 1.859e+10 6.224e+09 1.751e+10 5.181e+09 1.625e+10 4.101e+09 1.483e+10 3.015e+09 1.328e+10 1.954e+09 1.165e+10 9.476e+08 9.996e+09 2.428e+07 8.363e+09 -7.940e+08 6.811e+09 -1.499e+09 5.399e+09 -2.100e+09 4.171e+09 -2.641e+09 3.133e+09 -3.211e+09 2.234e+09 -3.936e+09 1.347e+09 -4.955e+09 2.988e+08 -6.381e+09 -1.084e+09 -8.282e+09 -2.944e+09 -1.069e+10 -5.387e+09 -1.361e+10 -8.483e+09 -1.705e+10 -1.227e+10 -2.100e+10 -1.677e+10 -2.545e+10 -2.197e+10 -3.038e+10 -2.783e+10 -3.577e+10 -3.430e+10 -4.158e+10 -4.130e+10 -4.778e+10 -4.871e+10 -5.433e+10 -5.642e+10 -6.118e+10 -6.426e+10 -6.828e+10 -7.206e+10 -7.557e+10 -7.966e+10 -8.299e+10 -8.684e+10 -9.048e+10 -9.340e+10 -9.798e+10 -9.916e+10 -1.054e+11 -1.039e+11 -1.128e+11 -1.074e+11 -1.200e+11 -1.096e+11 -1.270e+11 -1.103e+11 -1.339e+11 -1.094e+11 -1.405e+11 -1.069e+11 -1.470e+11 -1.026e+11 -1.534e+11 -9.656e+10 -1.598e+11 -8.884e+10 -1.664e+11 -7.944e+10 -1.735e+11 -6.835e+10 -1.814e+11 -5.546e+10 -1.907e+11 -4.057e+10 -2.018e+11 -2.328e+10 -2.155e+11 -2.893e+09 -2.327e+11 2.155e+10 -2.543e+11 5.137e+10 -2.814e+11 8.827e+10 -3.152e+11 1.342e+11 -3.566e+11 1.915e+11 -4.071e+11 2.628e+11 -4.680e+11 3.509e+11 -5.407e+11 4.587e+11 -6.268e+11 5.896e+11 -7.282e+11 7.468e+11 -8.468e+11 9.339e+11 -9.849e+11 1.155e+12 -1.145e+12 1.413e+12 -1.330e+12 1.713e+12 -1.543e+12 2.059e+12 -1.787e+12 2.455e+12 -2.066e+12 2.905e+12 -2.384e+12 3.413e+12 -2.746e+12 3.983e+12 -3.155e+12 4.620e+12 -3.618e+12 5.328e+12 -4.139e+12 6.110e+12 -4.724e+12 6.969e+12 -5.379e+12 7.910e+12 -6.111e+12 8.935e+12 -6.925e+12 1.004e+13 -7.828e+12 1.124e+13 -8.828e+12 1.253e+13 -9.931e+12 1.391e+13 -1.114e+13 1.538e+13 -1.248e+13 1.695e+13 -1.394e+13 1.860e+13 -1.553e+13 2.034e+13 -1.726e+13 2.216e+13 -1.914e+13 2.407e+13 -2.117e+13 2.606e+13 -2.337e+13 2.812e+13 -2.573e+13 3.024e+13 -2.827e+13 3.243e+13 -3.099e+13 3.467e+13 -3.390e+13 3.696e+13 -3.700e+13 3.928e+13 -4.030e+13 4.163e+13 -4.380e+13 4.400e+13 -4.751e+13 4.637e+13 -5.143e+13 5.003e+13 -5.506e+13 5.196e+13 -5.980e+13 5.436e+13 -6.439e+13 5.672e+13 -6.919e+13 5.902e+13 -7.420e+13 6.125e+13 -7.944e+13 6.340e+13 -8.490e+13 6.545e+13 -9.056e+13 6.738e+13 -9.644e+13 6.919e+13 -1.025e+14 7.084e+13 -1.088e+14 7.234e+13 -1.153e+14 7.366e+13 -1.219e+14 7.478e+13 -1.287e+14 7.570e+13 -1.357e+14 7.639e+13 -1.428e+14 7.685e+13 -1.501e+14 7.705e+13 -1.575e+14 7.699e+13 -1.650e+14 7.664e+13 -1.726e+14 7.601e+13 -1.803e+14 7.508e+13 -1.880e+14 7.383e+13 -1.958e+14 7.227e+13 -2.036e+14 7.037e+13 -2.114e+14 6.814e+13 -2.192e+14 6.557e+13 -2.270e+14 6.265e+13 -2.347e+14 5.938e+13 -2.423e+14 5.576e+13 -2.498e+14 5.180e+13 -2.572e+14 4.748e+13 -2.644e+14 4.282e+13 -2.715e+14 3.781e+13 -2.784e+14 3.248e+13 -2.851e+14 2.681e+13 -2.915e+14 2.083e+13 -2.977e+14 1.455e+13 -3.037e+14 7.962e+12 -3.093e+14 1.105e+12 -3.146e+14 -6.021e+12 -3.197e+14 -1.341e+13 -3.244e+14 -2.103e+13 -3.289e+14 -2.886e+13 -3.329e+14 -3.690e+13 -3.366e+14 -4.511e+13 -3.399e+14 -5.347e+13 -3.428e+14 -6.197e+13 -3.453e+14 -7.056e+13 -3.474e+14 -7.925e+13 -3.491e+14 -8.799e+13 -3.503e+14 -9.677e+13 -3.511e+14 -1.055e+14 -3.515e+14 -1.143e+14 -3.514e+14 -1.230e+14 -3.510e+14 -1.317e+14 -3.500e+14 -1.403e+14 -3.487e+14 -1.487e+14 -3.470e+14 -1.570e+14 -3.448e+14 -1.652e+14 -3.422e+14 -1.731e+14 -3.393e+14 -1.808e+14 -3.359e+14 -1.883e+14 -3.322e+14 -1.956e+14 -3.281e+14 -2.025e+14 -3.237e+14 -2.092e+14 -3.189e+14 -2.155e+14 -3.138e+14 -2.215e+14 -3.084e+14 -2.271e+14 -3.026e+14 -2.324e+14 -2.966e+14 -2.372e+14 -2.904e+14 -2.417e+14 -2.839e+14 -2.457e+14 -2.771e+14 -2.494e+14 -2.701e+14 -2.525e+14 -2.630e+14 -2.553e+14 -2.557e+14 -2.575e+14 -2.482e+14 -2.593e+14 -2.405e+14 -2.606e+14 -2.328e+14 -2.615e+14 -2.250e+14 -2.619e+14 -2.171e+14 -2.618e+14 -2.092e+14 -2.613e+14 -2.013e+14 -2.603e+14 -1.934e+14 -2.588e+14 -1.854e+14 -2.569e+14 -1.775e+14 -2.546e+14 -1.697e+14 -2.518e+14 -1.619e+14 -2.486e+14 -1.542e+14 -2.450e+14 -1.465e+14 -2.410e+14 -1.390e+14 -2.366e+14 -1.317e+14 -2.319e+14 -1.244e+14 -2.268e+14 -1.174e+14 -2.214e+14 -1.105e+14 -2.158e+14 -1.038e+14 -2.099e+14 -9.732e+13 -2.037e+14 -9.104e+13 -1.974e+14 -8.499e+13 -1.908e+14 -7.916e+13 -1.841e+14 -7.358e+13 -1.773e+14 -6.823e+13 -1.705e+14 -6.314e+13 -1.635e+14 -5.828e+13 -1.565e+14 -5.368e+13 -1.495e+14 -4.933e+13 -1.425e+14 -4.522e+13 -1.355e+14 -4.136e+13 -1.286e+14 -3.774e+13 -1.218e+14 -3.436e+13 -1.151e+14 -3.120e+13 -1.086e+14 -2.827e+13 -1.021e+14 -2.556e+13 -9.588e+13 -2.305e+13 -8.979e+13 -2.074e+13 -8.389e+13 -1.862e+13 -7.819e+13 -1.668e+13 -7.270e+13 -1.491e+13 -6.743e+13 -1.330e+13 -6.238e+13 -1.184e+13 -5.756e+13 -1.052e+13 -5.296e+13 -9.326e+12 -4.861e+13 -8.250e+12 -4.448e+13 -7.288e+12 -4.059e+13 -6.431e+12 -3.693e+13 -5.671e+12 -3.349e+13 -4.998e+12 -3.028e+13 -4.404e+12 -2.729e+13 -3.881e+12 -2.451e+13 -3.423e+12 -2.194e+13 -3.021e+12 -1.956e+13 -2.671e+12 -1.738e+13 -2.366e+12 -1.538e+13 -2.099e+12 -1.355e+13 -1.868e+12 -1.189e+13 -1.666e+12 -1.039e+13 -1.490e+12 -9.033e+12 -1.336e+12 -7.816e+12 -1.201e+12 -6.729e+12 -1.083e+12 -5.762e+12 -9.777e+11 -4.907e+12 -8.843e+11 -4.155e+12 -8.006e+11 -3.496e+12 -7.252e+11 -2.924e+12 -6.569e+11 -2.429e+12 -5.945e+11 -2.004e+12 -5.374e+11 -1.642e+12 -4.850e+11 -1.335e+12 -4.366e+11 -1.077e+12 -3.921e+11 -8.632e+11 -3.511e+11 -6.862e+11 -3.134e+11 -5.414e+11 -2.790e+11 -4.240e+11 -2.478e+11 -3.297e+11 -2.196e+11 -2.547e+11 -1.943e+11 -1.955e+11 -1.718e+11 -1.491e+11 -1.519e+11 -1.131e+11 -1.343e+11 -8.534e+10 -1.188e+11 -6.398e+10 -1.051e+11 -4.767e+10 -9.291e+10 -3.532e+10 -8.188e+10 -2.606e+10 -7.174e+10 -1.924e+10 -6.231e+10 -1.438e+10 -5.346e+10 -1.104e+10 -4.513e+10 -8.902e+09 -3.731e+10 -7.654e+09 -3.007e+10 -7.036e+09 -2.350e+10 -6.837e+09 -1.772e+10 -6.920e+09 -1.287e+10 -7.283e+09 -8.986e+09 -8.120e+09 -6.007e+09 -9.796e+09 -3.589e+09 -1.271e+10 -1.153e+09 -1.712e+10 1.918e+09 -2.317e+10 6.090e+09 -3.091e+10 1.165e+10 -4.035e+10 1.873e+10 -5.146e+10 2.738e+10 -6.423e+10 3.759e+10 -7.856e+10 4.930e+10 -9.434e+10 6.241e+10 -1.114e+11 7.679e+10 -1.297e+11 9.229e+10 -1.488e+11 1.087e+11 -1.687e+11 1.259e+11 -1.891e+11 1.435e+11 -2.096e+11 1.615e+11 -2.302e+11 1.795e+11 -2.504e+11 1.973e+11 -2.701e+11 2.147e+11 -2.889e+11 2.314e+11 -3.067e+11 2.473e+11 -3.231e+11 2.620e+11 -3.381e+11 2.755e+11 -3.513e+11 2.875e+11 -3.627e+11 2.979e+11 -3.720e+11 3.065e+11 -3.793e+11 3.133e+11 -3.845e+11 3.182e+11 -3.875e+11 3.211e+11 -3.882e+11 3.221e+11 -3.868e+11 3.211e+11 -3.832e+11 3.183e+11 -3.775e+11 3.136e+11 -3.699e+11 3.071e+11 -3.605e+11 2.991e+11 -3.494e+11 2.896e+11 -3.368e+11 2.788e+11 -3.229e+11 2.669e+11 -3.079e+11 2.540e+11 -2.919e+11 2.403e+11 -2.753e+11 2.261e+11 -2.581e+11 2.115e+11 -2.407e+11 1.967e+11 -2.232e+11 1.818e+11 -2.057e+11 1.671e+11 -1.884e+11 1.526e+11 -1.716e+11 1.386e+11 -1.552e+11 1.251e+11 -1.396e+11 1.122e+11 -1.247e+11 1.000e+11 -1.105e+11 8.860e+10 -9.734e+10 7.799e+10 -8.507e+10 6.822e+10 -7.376e+10 5.928e+10 -6.344e+10 5.120e+10 -5.410e+10 4.394e+10 -4.571e+10 3.747e+10 -3.825e+10 3.178e+10 -3.169e+10 2.680e+10 -2.596e+10 2.249e+10 -2.105e+10 1.881e+10 -1.686e+10 1.569e+10 -1.334e+10 1.307e+10 -1.042e+10 1.090e+10 -8.028e+09 9.133e+09 -6.104e+09 7.710e+09 -4.582e+09 6.596e+09 -3.394e+09 5.752e+09 -2.476e+09 5.144e+09 -1.771e+09 4.749e+09 -1.224e+09 4.544e+09 -7.924e+08 4.513e+09 -4.416e+08 4.642e+09 -1.497e+08 4.923e+09 9.491e+07 5.352e+09 2.947e+08 5.931e+09 4.462e+08 6.665e+09 5.411e+08 7.564e+09 5.675e+08 8.642e+09 5.111e+08 9.913e+09 3.552e+08 1.140e+10 8.117e+07 1.311e+10 -3.313e+08 1.506e+10 -9.045e+08 1.727e+10 -1.661e+09 1.975e+10 -2.622e+09 2.250e+10 -3.814e+09 2.554e+10 -5.255e+09 2.885e+10 -6.966e+09 3.242e+10 -8.965e+09 3.624e+10 -1.127e+10 4.029e+10 -1.388e+10 4.454e+10 -1.681e+10 4.896e+10 -2.007e+10 5.349e+10 -2.364e+10 5.810e+10 -2.752e+10 6.273e+10 -3.171e+10 6.734e+10 -3.616e+10 7.185e+10 -4.088e+10 7.623e+10 -4.582e+10 8.040e+10 -5.097e+10 8.431e+10 -5.627e+10 8.791e+10 -6.171e+10 9.114e+10 -6.722e+10 9.397e+10 -7.278e+10 9.634e+10 -7.835e+10 9.824e+10 -8.386e+10 9.961e+10 -8.929e+10 1.005e+11 -9.459e+10 1.008e+11 -9.972e+10 1.005e+11 -1.047e+11 9.975e+10 -1.093e+11 9.840e+10 -1.137e+11 9.651e+10 -1.178e+11 9.408e+10 -1.216e+11 9.115e+10 -1.250e+11 8.776e+10 -1.281e+11 8.392e+10 -1.307e+11 7.968e+10 -1.330e+11 7.508e+10 -1.348e+11 7.015e+10 -1.363e+11 6.493e+10 -1.373e+11 5.947e+10 -1.380e+11 5.380e+10 -1.382e+11 4.797e+10 -1.381e+11 4.201e+10 -1.377e+11 3.597e+10 -1.369e+11 2.988e+10 0.005 -55.687 -54.659 -53.630 -52.601 -51.573 -50.544 -49.523 -48.610 -47.795 -47.070 -46.430 -45.868 -45.380 -44.964 -44.617 -44.337 -44.121 -43.971 -43.884 -43.862 -43.905 -44.013 -44.189 -44.435 -44.753 -45.148 -45.624 -46.187 -46.844 -47.604 -48.480 -49.484 -50.637 -51.964 -53.500 -55.293 -57.418 -59.995 -63.241 -67.622 -74.565 -98.282 -78.309 -73.556 -71.682 -70.338 -68.271 -65.300 -62.097 -59.120 -56.483 -54.169 -52.134 -50.334 -48.735 -47.306 -46.026 -44.875 -43.841 -42.911 -42.076 -41.329 -40.663 -40.073 -39.556 -39.108 -38.725 -38.407 -38.152 -37.958 -37.825 -37.752 -37.740 -37.790 -37.901 -38.076 -38.316 -38.623 -39.001 -39.452 -39.981 -40.592 -41.290 -42.085 -42.981 -43.986 -45.109 -46.358 -47.744 -49.273 -50.951 -52.787 -54.791 -57.008 -59.552 -62.624 -65.749 -66.002 -62.101 -57.744 -54.194 -51.269 -48.786 -46.631 -44.734 -43.048 -41.538 -40.181 -38.957 -37.853 -36.855 -35.956 -35.148 -34.425 -33.783 -33.217 -32.725 -32.304 -31.953 -31.672 -31.460 -31.317 -31.245 -31.247 -31.323 -31.477 -31.713 -32.037 -32.456 -32.979 -33.616 -34.383 -35.296 -36.381 -37.668 -39.200 -41.033 -43.234 -45.859 -48.799 -51.351 -52.389 -52.035 -51.652 -52.253 -54.501 -56.461 -52.572 -46.380 -41.526 -37.749 -34.639 -31.977 -29.642 -27.557 -25.671 -23.949 -22.364 -20.897 -19.532 -18.257 -17.062 -15.941 -14.885 -13.889 -12.948 -12.057 -11.214 -10.414 -9.657 -8.938 -8.257 -7.611 -6.999 -6.418 -5.869 -5.349 -4.857 -4.394 -3.956 -3.545 -3.159 -2.798 -2.460 -2.146 -1.854 -1.585 -1.338 -1.113 -0.909 -0.727 -0.565 -0.423 -0.303 -0.202 -0.122 -0.061 -0.021 -0.001 0.000 -0.019 -0.056 -0.113 -0.190 -0.288 -0.405 -0.543 -0.702 -0.881 -1.082 -1.303 -1.547 -1.813 -2.101 -2.412 -2.747 -3.105 -3.488 -3.896 -4.331 -4.792 -5.281 -5.798 -6.346 -6.924 -7.535 -8.180 -8.861 -9.580 -10.339 -11.141 -11.988 -12.884 -13.834 -14.841 -15.912 -17.052 -18.271 -19.579 -20.988 -22.517 -24.188 -26.031 -28.091 -30.437 -33.181 -36.537 -40.997 -48.336 -56.505 -51.153 -45.813 -43.449 -42.303 -41.873 -41.949 -42.409 -43.131 -43.909 -44.379 -44.151 -43.156 -41.703 -40.150 -38.697 -37.411 -36.303 -35.361 -34.569 -33.912 -33.375 -32.947 -32.619 -32.383 -32.234 -32.166 -32.175 -32.260 -32.418 -32.649 -32.951 -33.326 -33.773 -34.294 -34.891 -35.567 -36.327 -37.175 -38.118 -39.163 -40.319 -41.600 -43.019 -44.595 -46.353 -48.322 -50.544 -53.071 -55.974 -59.330 -63.144 -66.789 -68.216 -66.683 -63.887 -61.041 -58.394 -55.987 -53.829 -51.911 -50.215 -48.718 -47.401 -46.242 -45.226 -44.338 -43.567 -42.903 -42.338 -41.866 -41.482 -41.179 -40.955 -40.807 -40.733 -40.732 -40.803 -40.946 -41.162 -41.451 -41.816 -42.259 -42.784 -43.394 -44.095 -44.894 -45.799 -46.818 -47.964 -49.249 -50.686 -52.288 -54.061 -55.991 -58.015 -59.991 -61.693 -62.948 -63.827 -64.641 -65.757 -67.441 -69.310 -68.807 -65.293 -61.439 -58.194 -55.522 -53.286 -51.379 -49.726 -48.278 -47.001 -45.869 -44.863 -43.967 -43.171 -42.463 -41.837 -41.286 -40.805 -40.390 -40.037 -39.742 -39.504 -39.321 -39.190 -39.110 -39.081 -39.101 -39.171 -39.289 -39.456 -39.671 -39.937 -40.252 -40.619 -41.037 -41.510 -42.039 -42.626 -43.273 -43.985 -44.765 -45.618 -46.549 -47.485 -48.422 -49.358 -50.295 -51.231 0 1 1.0 4476553695.58 S4 HV 30.06 34.35 0.05 -4.800e+10 1.674e+10 -4.945e+10 1.573e+10 -5.075e+10 1.469e+10 -5.192e+10 1.362e+10 -5.293e+10 1.252e+10 -5.379e+10 1.140e+10 -5.448e+10 1.027e+10 -5.500e+10 9.114e+09 -5.534e+10 7.953e+09 -5.550e+10 6.789e+09 -5.549e+10 5.626e+09 -5.529e+10 4.474e+09 -5.491e+10 3.338e+09 -5.435e+10 2.226e+09 -5.363e+10 1.148e+09 -5.272e+10 1.113e+08 -5.166e+10 -8.768e+08 -5.045e+10 -1.807e+09 -4.909e+10 -2.672e+09 -4.760e+10 -3.467e+09 -4.599e+10 -4.185e+09 -4.427e+10 -4.820e+09 -4.246e+10 -5.370e+09 -4.058e+10 -5.834e+09 -3.862e+10 -6.209e+09 -3.662e+10 -6.498e+09 -3.459e+10 -6.701e+09 -3.254e+10 -6.823e+09 -3.048e+10 -6.867e+09 -2.843e+10 -6.841e+09 -2.641e+10 -6.749e+09 -2.441e+10 -6.600e+09 -2.247e+10 -6.401e+09 -2.058e+10 -6.161e+09 -1.875e+10 -5.886e+09 -1.700e+10 -5.586e+09 -1.532e+10 -5.267e+09 -1.373e+10 -4.937e+09 -1.222e+10 -4.600e+09 -1.081e+10 -4.264e+09 -9.491e+09 -3.932e+09 -8.265e+09 -3.609e+09 -7.135e+09 -3.296e+09 -6.099e+09 -2.996e+09 -5.156e+09 -2.712e+09 -4.306e+09 -2.443e+09 -3.545e+09 -2.190e+09 -2.872e+09 -1.953e+09 -2.284e+09 -1.734e+09 -1.776e+09 -1.531e+09 -1.343e+09 -1.346e+09 -9.817e+08 -1.178e+09 -6.846e+08 -1.030e+09 -4.442e+08 -9.009e+08 -2.516e+08 -7.936e+08 -9.623e+07 -7.082e+08 3.392e+07 -6.441e+08 1.504e+08 -5.987e+08 2.637e+08 -5.674e+08 3.811e+08 -5.441e+08 5.064e+08 -5.224e+08 6.406e+08 -4.965e+08 7.829e+08 -4.618e+08 9.306e+08 -4.149e+08 1.082e+09 -3.534e+08 1.233e+09 -2.754e+08 1.383e+09 -1.802e+08 1.531e+09 -6.677e+07 1.674e+09 6.574e+07 1.812e+09 2.174e+08 1.947e+09 3.890e+08 2.077e+09 5.817e+08 2.204e+09 7.963e+08 2.328e+09 1.034e+09 2.451e+09 1.298e+09 2.573e+09 1.589e+09 2.696e+09 1.910e+09 2.820e+09 2.263e+09 2.947e+09 2.651e+09 3.077e+09 3.077e+09 3.211e+09 3.545e+09 3.352e+09 4.058e+09 3.499e+09 4.619e+09 3.656e+09 5.234e+09 3.822e+09 5.906e+09 4.001e+09 6.640e+09 4.195e+09 7.443e+09 4.404e+09 8.318e+09 4.631e+09 9.272e+09 4.879e+09 1.031e+10 5.148e+09 1.144e+10 5.442e+09 1.267e+10 5.761e+09 1.400e+10 6.107e+09 1.543e+10 6.481e+09 1.698e+10 6.885e+09 1.863e+10 7.318e+09 2.039e+10 7.783e+09 2.227e+10 8.278e+09 2.424e+10 8.804e+09 2.632e+10 9.359e+09 2.848e+10 9.944e+09 3.072e+10 1.056e+10 3.302e+10 1.120e+10 3.536e+10 1.186e+10 3.773e+10 1.255e+10 4.009e+10 1.326e+10 4.242e+10 1.399e+10 4.470e+10 1.473e+10 4.690e+10 1.549e+10 4.899e+10 1.625e+10 5.095e+10 1.702e+10 5.275e+10 1.779e+10 5.437e+10 1.855e+10 5.580e+10 1.931e+10 5.701e+10 2.004e+10 5.800e+10 2.075e+10 5.876e+10 2.142e+10 5.928e+10 2.206e+10 5.956e+10 2.265e+10 5.961e+10 2.318e+10 5.943e+10 2.364e+10 5.904e+10 2.403e+10 5.844e+10 2.434e+10 5.764e+10 2.457e+10 5.667e+10 2.469e+10 5.554e+10 2.472e+10 5.426e+10 2.464e+10 5.286e+10 2.445e+10 5.134e+10 2.415e+10 4.972e+10 2.374e+10 4.802e+10 2.322e+10 4.624e+10 2.259e+10 4.441e+10 2.187e+10 4.254e+10 2.104e+10 4.063e+10 2.013e+10 3.869e+10 1.914e+10 3.674e+10 1.809e+10 3.478e+10 1.698e+10 3.282e+10 1.584e+10 3.087e+10 1.467e+10 2.895e+10 1.349e+10 2.705e+10 1.232e+10 2.519e+10 1.116e+10 2.337e+10 1.003e+10 2.161e+10 8.943e+09 1.990e+10 7.904e+09 1.826e+10 6.925e+09 1.669e+10 6.012e+09 1.521e+10 5.169e+09 1.381e+10 4.400e+09 1.250e+10 3.708e+09 1.128e+10 3.089e+09 1.016e+10 2.544e+09 9.133e+09 2.069e+09 8.206e+09 1.660e+09 7.374e+09 1.312e+09 6.634e+09 1.019e+09 5.983e+09 7.767e+08 5.417e+09 5.783e+08 4.930e+09 4.190e+08 4.517e+09 2.936e+08 4.172e+09 1.980e+08 3.890e+09 1.284e+08 3.664e+09 8.201e+07 3.491e+09 5.660e+07 3.364e+09 5.082e+07 3.281e+09 6.401e+07 3.236e+09 9.618e+07 3.227e+09 1.479e+08 3.251e+09 2.206e+08 3.305e+09 3.158e+08 3.387e+09 4.359e+08 3.493e+09 5.835e+08 3.622e+09 7.618e+08 3.770e+09 9.741e+08 3.937e+09 1.225e+09 4.118e+09 1.517e+09 4.312e+09 1.857e+09 4.517e+09 2.248e+09 4.729e+09 2.697e+09 4.947e+09 3.208e+09 5.167e+09 3.789e+09 5.388e+09 4.446e+09 5.606e+09 5.182e+09 5.819e+09 6.004e+09 6.024e+09 6.915e+09 6.215e+09 7.916e+09 6.388e+09 9.009e+09 6.539e+09 1.019e+10 6.662e+09 1.144e+10 6.752e+09 1.277e+10 6.802e+09 1.415e+10 6.808e+09 1.555e+10 6.766e+09 1.696e+10 6.672e+09 1.835e+10 6.521e+09 1.968e+10 6.313e+09 2.092e+10 6.046e+09 2.204e+10 5.719e+09 2.299e+10 5.334e+09 2.374e+10 4.892e+09 2.426e+10 4.396e+09 2.453e+10 3.850e+09 2.452e+10 3.259e+09 2.421e+10 2.629e+09 2.361e+10 1.968e+09 2.271e+10 1.286e+09 2.152e+10 5.934e+08 2.008e+10 -9.642e+07 1.842e+10 -7.697e+08 1.657e+10 -1.411e+09 1.460e+10 -2.003e+09 1.256e+10 -2.532e+09 1.053e+10 -2.987e+09 8.571e+09 -3.365e+09 6.754e+09 -3.676e+09 5.134e+09 -3.955e+09 3.735e+09 -4.271e+09 2.522e+09 -4.727e+09 1.384e+09 -5.447e+09 1.473e+08 -6.537e+09 -1.384e+09 -8.064e+09 -3.382e+09 -1.005e+10 -5.974e+09 -1.250e+10 -9.247e+09 -1.540e+10 -1.325e+10 -1.873e+10 -1.801e+10 -2.247e+10 -2.351e+10 -2.659e+10 -2.974e+10 -3.107e+10 -3.665e+10 -3.587e+10 -4.416e+10 -4.096e+10 -5.220e+10 -4.630e+10 -6.064e+10 -5.185e+10 -6.937e+10 -5.758e+10 -7.824e+10 -6.344e+10 -8.709e+10 -6.940e+10 -9.574e+10 -7.545e+10 -1.040e+11 -8.154e+10 -1.117e+11 -8.766e+10 -1.186e+11 -9.381e+10 -1.246e+11 -9.999e+10 -1.295e+11 -1.062e+11 -1.330e+11 -1.124e+11 -1.351e+11 -1.188e+11 -1.356e+11 -1.252e+11 -1.345e+11 -1.319e+11 -1.318e+11 -1.389e+11 -1.273e+11 -1.463e+11 -1.211e+11 -1.543e+11 -1.134e+11 -1.633e+11 -1.040e+11 -1.735e+11 -9.303e+10 -1.856e+11 -8.030e+10 -2.001e+11 -6.552e+10 -2.180e+11 -4.814e+10 -2.401e+11 -2.731e+10 -2.678e+11 -1.832e+09 -3.024e+11 2.988e+10 -3.453e+11 6.970e+10 -3.983e+11 1.198e+11 -4.630e+11 1.829e+11 -5.414e+11 2.615e+11 -6.356e+11 3.587e+11 -7.477e+11 4.776e+11 -8.804e+11 6.215e+11 -1.036e+12 7.939e+11 -1.218e+12 9.984e+11 -1.429e+12 1.239e+12 -1.673e+12 1.518e+12 -1.954e+12 1.841e+12 -2.276e+12 2.212e+12 -2.643e+12 2.633e+12 -3.061e+12 3.110e+12 -3.534e+12 3.645e+12 -4.069e+12 4.243e+12 -4.671e+12 4.907e+12 -5.347e+12 5.640e+12 -6.103e+12 6.445e+12 -6.947e+12 7.327e+12 -7.886e+12 8.285e+12 -8.928e+12 9.323e+12 -1.008e+13 1.044e+13 -1.135e+13 1.164e+13 -1.275e+13 1.293e+13 -1.428e+13 1.430e+13 -1.596e+13 1.575e+13 -1.779e+13 1.728e+13 -1.978e+13 1.889e+13 -2.194e+13 2.058e+13 -2.428e+13 2.234e+13 -2.680e+13 2.417e+13 -2.952e+13 2.606e+13 -3.243e+13 2.801e+13 -3.555e+13 3.002e+13 -3.889e+13 3.206e+13 -4.243e+13 3.414e+13 -4.620e+13 3.625e+13 -5.019e+13 3.837e+13 -5.441e+13 4.049e+13 -5.886e+13 4.261e+13 -6.354e+13 4.515e+13 -6.845e+13 4.753e+13 -7.364e+13 4.962e+13 -7.903e+13 5.165e+13 -8.464e+13 5.361e+13 -9.047e+13 5.548e+13 -9.653e+13 5.726e+13 -1.028e+14 5.892e+13 -1.093e+14 6.045e+13 -1.160e+14 6.183e+13 -1.229e+14 6.306e+13 -1.299e+14 6.411e+13 -1.372e+14 6.497e+13 -1.446e+14 6.562e+13 -1.522e+14 6.605e+13 -1.599e+14 6.624e+13 -1.677e+14 6.619e+13 -1.757e+14 6.587e+13 -1.838e+14 6.528e+13 -1.920e+14 6.440e+13 -2.002e+14 6.322e+13 -2.086e+14 6.173e+13 -2.169e+14 5.993e+13 -2.253e+14 5.779e+13 -2.337e+14 5.532e+13 -2.421e+14 5.252e+13 -2.504e+14 4.936e+13 -2.587e+14 4.586e+13 -2.669e+14 4.201e+13 -2.750e+14 3.780e+13 -2.830e+14 3.325e+13 -2.909e+14 2.835e+13 -2.985e+14 2.311e+13 -3.060e+14 1.753e+13 -3.133e+14 1.162e+13 -3.203e+14 5.398e+12 -3.271e+14 -1.130e+12 -3.336e+14 -7.953e+12 -3.398e+14 -1.506e+13 -3.456e+14 -2.242e+13 -3.511e+14 -3.004e+13 -3.563e+14 -3.790e+13 -3.611e+14 -4.596e+13 -3.656e+14 -5.423e+13 -3.696e+14 -6.266e+13 -3.733e+14 -7.123e+13 -3.765e+14 -7.993e+13 -3.792e+14 -8.873e+13 -3.816e+14 -9.759e+13 -3.834e+14 -1.065e+14 -3.848e+14 -1.155e+14 -3.858e+14 -1.244e+14 -3.863e+14 -1.333e+14 -3.864e+14 -1.422e+14 -3.860e+14 -1.510e+14 -3.851e+14 -1.597e+14 -3.838e+14 -1.683e+14 -3.821e+14 -1.767e+14 -3.800e+14 -1.850e+14 -3.774e+14 -1.930e+14 -3.744e+14 -2.009e+14 -3.711e+14 -2.085e+14 -3.673e+14 -2.159e+14 -3.632e+14 -2.230e+14 -3.587e+14 -2.298e+14 -3.539e+14 -2.363e+14 -3.487e+14 -2.424e+14 -3.432e+14 -2.482e+14 -3.374e+14 -2.537e+14 -3.314e+14 -2.587e+14 -3.250e+14 -2.634e+14 -3.184e+14 -2.676e+14 -3.115e+14 -2.714e+14 -3.044e+14 -2.747e+14 -2.971e+14 -2.776e+14 -2.896e+14 -2.800e+14 -2.819e+14 -2.820e+14 -2.741e+14 -2.834e+14 -2.661e+14 -2.844e+14 -2.580e+14 -2.848e+14 -2.497e+14 -2.848e+14 -2.414e+14 -2.843e+14 -2.332e+14 -2.832e+14 -2.248e+14 -2.817e+14 -2.165e+14 -2.797e+14 -2.081e+14 -2.773e+14 -1.998e+14 -2.743e+14 -1.914e+14 -2.709e+14 -1.832e+14 -2.671e+14 -1.749e+14 -2.628e+14 -1.668e+14 -2.582e+14 -1.588e+14 -2.531e+14 -1.509e+14 -2.477e+14 -1.432e+14 -2.420e+14 -1.356e+14 -2.360e+14 -1.282e+14 -2.297e+14 -1.210e+14 -2.231e+14 -1.140e+14 -2.163e+14 -1.072e+14 -2.094e+14 -1.006e+14 -2.022e+14 -9.425e+13 -1.950e+14 -8.814e+13 -1.876e+14 -8.227e+13 -1.802e+14 -7.665e+13 -1.727e+14 -7.128e+13 -1.652e+14 -6.616e+13 -1.578e+14 -6.130e+13 -1.503e+14 -5.669e+13 -1.430e+14 -5.233e+13 -1.357e+14 -4.822e+13 -1.285e+14 -4.435e+13 -1.214e+14 -4.072e+13 -1.145e+14 -3.732e+13 -1.078e+14 -3.414e+13 -1.012e+14 -3.118e+13 -9.482e+13 -2.843e+13 -8.863e+13 -2.588e+13 -8.264e+13 -2.352e+13 -7.689e+13 -2.135e+13 -7.135e+13 -1.934e+13 -6.604e+13 -1.750e+13 -6.098e+13 -1.581e+13 -5.614e+13 -1.425e+13 -5.155e+13 -1.283e+13 -4.720e+13 -1.154e+13 -4.309e+13 -1.037e+13 -3.922e+13 -9.303e+12 -3.558e+13 -8.342e+12 -3.218e+13 -7.473e+12 -2.900e+13 -6.691e+12 -2.605e+13 -5.987e+12 -2.331e+13 -5.353e+12 -2.078e+13 -4.785e+12 -1.846e+13 -4.275e+12 -1.633e+13 -3.818e+12 -1.438e+13 -3.409e+12 -1.261e+13 -3.043e+12 -1.101e+13 -2.715e+12 -9.569e+12 -2.421e+12 -8.274e+12 -2.158e+12 -7.117e+12 -1.923e+12 -6.089e+12 -1.712e+12 -5.181e+12 -1.523e+12 -4.382e+12 -1.354e+12 -3.684e+12 -1.202e+12 -3.078e+12 -1.066e+12 -2.554e+12 -9.442e+11 -2.105e+12 -8.349e+11 -1.723e+12 -7.370e+11 -1.399e+12 -6.495e+11 -1.128e+12 -5.714e+11 -9.023e+11 -5.019e+11 -7.159e+11 -4.402e+11 -5.635e+11 -3.857e+11 -4.399e+11 -3.377e+11 -3.406e+11 -2.958e+11 -2.615e+11 -2.592e+11 -1.990e+11 -2.276e+11 -1.501e+11 -2.004e+11 -1.119e+11 -1.770e+11 -8.240e+10 -1.569e+11 -5.963e+10 -1.395e+11 -4.218e+10 -1.244e+11 -2.892e+10 -1.110e+11 -1.896e+10 -9.889e+10 -1.167e+10 -8.779e+10 -6.561e+09 -7.743e+10 -3.217e+09 -6.763e+10 -1.314e+09 -5.831e+10 -5.521e+08 -4.946e+10 -6.487e+08 -4.112e+10 -1.336e+09 -3.336e+10 -2.366e+09 -2.633e+10 -3.527e+09 -2.014e+10 -4.686e+09 -1.494e+10 -5.857e+09 -1.082e+10 -7.277e+09 -7.746e+09 -9.408e+09 -5.433e+09 -1.277e+10 -3.337e+09 -1.774e+10 -8.448e+08 -2.451e+10 2.511e+09 -3.316e+10 6.999e+09 -4.368e+10 1.274e+10 -5.604e+10 1.976e+10 -7.015e+10 2.800e+10 -8.590e+10 3.737e+10 -1.031e+11 4.774e+10 -1.216e+11 5.895e+10 -1.411e+11 7.083e+10 -1.615e+11 8.317e+10 -1.823e+11 9.578e+10 -2.034e+11 1.084e+11 -2.244e+11 1.210e+11 -2.451e+11 1.331e+11 -2.651e+11 1.447e+11 -2.841e+11 1.557e+11 -3.020e+11 1.657e+11 -3.184e+11 1.747e+11 -3.332e+11 1.827e+11 -3.461e+11 1.894e+11 -3.571e+11 1.949e+11 -3.661e+11 1.991e+11 -3.728e+11 2.020e+11 -3.774e+11 2.036e+11 -3.798e+11 2.040e+11 -3.800e+11 2.030e+11 -3.781e+11 2.010e+11 -3.742e+11 1.978e+11 -3.683e+11 1.937e+11 -3.606e+11 1.886e+11 -3.513e+11 1.827e+11 -3.404e+11 1.761e+11 -3.283e+11 1.689e+11 -3.150e+11 1.611e+11 -3.007e+11 1.530e+11 -2.857e+11 1.445e+11 -2.701e+11 1.358e+11 -2.540e+11 1.270e+11 -2.377e+11 1.182e+11 -2.213e+11 1.094e+11 -2.050e+11 1.007e+11 -1.889e+11 9.213e+10 -1.731e+11 8.383e+10 -1.577e+11 7.582e+10 -1.428e+11 6.816e+10 -1.286e+11 6.088e+10 -1.151e+11 5.401e+10 -1.023e+11 4.759e+10 -9.032e+10 4.163e+10 -7.918e+10 3.616e+10 -6.889e+10 3.117e+10 -5.945e+10 2.666e+10 -5.088e+10 2.263e+10 -4.316e+10 1.906e+10 -3.626e+10 1.594e+10 -3.017e+10 1.325e+10 -2.485e+10 1.095e+10 -2.023e+10 8.999e+09 -1.628e+10 7.381e+09 -1.295e+10 6.052e+09 -1.017e+10 4.975e+09 -7.891e+09 4.119e+09 -6.059e+09 3.450e+09 -4.611e+09 2.941e+09 -3.494e+09 2.570e+09 -2.653e+09 2.319e+09 -2.036e+09 2.179e+09 -1.597e+09 2.147e+09 -1.292e+09 2.224e+09 -1.085e+09 2.412e+09 -9.537e+08 2.713e+09 -8.860e+08 3.133e+09 -8.806e+08 3.675e+09 -9.443e+08 4.346e+09 -1.090e+09 5.152e+09 -1.334e+09 6.102e+09 -1.694e+09 7.203e+09 -2.193e+09 8.461e+09 -2.852e+09 9.882e+09 -3.691e+09 1.147e+10 -4.733e+09 1.322e+10 -5.999e+09 1.514e+10 -7.504e+09 1.721e+10 -9.265e+09 1.942e+10 -1.129e+10 2.177e+10 -1.360e+10 2.423e+10 -1.618e+10 2.677e+10 -1.904e+10 2.939e+10 -2.217e+10 3.204e+10 -2.556e+10 3.470e+10 -2.919e+10 3.735e+10 -3.305e+10 3.994e+10 -3.710e+10 4.244e+10 -4.133e+10 4.484e+10 -4.570e+10 4.709e+10 -5.016e+10 4.916e+10 -5.470e+10 5.103e+10 -5.928e+10 5.267e+10 -6.385e+10 5.406e+10 -6.839e+10 5.517e+10 -7.285e+10 5.599e+10 -7.720e+10 5.650e+10 -8.141e+10 5.669e+10 -8.545e+10 5.656e+10 -8.929e+10 5.608e+10 -9.291e+10 5.526e+10 -9.629e+10 5.409e+10 -9.942e+10 5.258e+10 -1.023e+11 5.073e+10 -1.048e+11 4.854e+10 -1.071e+11 4.604e+10 -1.090e+11 4.323e+10 -1.107e+11 4.014e+10 -1.120e+11 3.678e+10 -1.131e+11 3.318e+10 -1.138e+11 2.936e+10 -1.143e+11 2.534e+10 -1.145e+11 2.115e+10 -1.143e+11 1.681e+10 -1.140e+11 1.236e+10 -1.133e+11 7.812e+09 -1.124e+11 3.197e+09 0.005 -53.528 -52.583 -51.639 -50.694 -49.749 -48.804 -47.866 -47.023 -46.268 -45.594 -44.995 -44.469 -44.011 -43.619 -43.291 -43.024 -42.818 -42.672 -42.586 -42.559 -42.593 -42.688 -42.846 -43.068 -43.358 -43.717 -44.152 -44.666 -45.267 -45.961 -46.760 -47.676 -48.726 -49.933 -51.328 -52.956 -54.886 -57.231 -60.197 -64.238 -70.767 -93.976 -73.392 -67.951 -65.501 -64.255 -63.708 -63.543 -63.380 -62.730 -61.297 -59.271 -57.060 -54.929 -52.980 -51.231 -49.671 -48.281 -47.041 -45.936 -44.952 -44.076 -43.300 -42.615 -42.016 -41.497 -41.054 -40.685 -40.386 -40.156 -39.994 -39.898 -39.870 -39.908 -40.014 -40.190 -40.437 -40.757 -41.154 -41.632 -42.195 -42.849 -43.599 -44.457 -45.426 -46.517 -47.738 -49.095 -50.592 -52.223 -53.972 -55.809 -57.707 -59.684 -61.876 -64.545 -67.292 -67.239 -63.117 -58.614 -54.976 -52.003 -49.499 -47.341 -45.454 -43.785 -42.297 -40.966 -39.771 -38.696 -37.731 -36.865 -36.091 -35.404 -34.799 -34.273 -33.822 -33.445 -33.141 -32.910 -32.751 -32.667 -32.660 -32.732 -32.887 -33.129 -33.465 -33.903 -34.454 -35.130 -35.949 -36.934 -38.113 -39.526 -41.219 -43.241 -45.593 -48.025 -49.732 -49.892 -48.914 -47.873 -47.345 -47.572 -48.830 -51.619 -54.004 -50.449 -44.525 -39.889 -36.292 -33.333 -30.800 -28.575 -26.586 -24.785 -23.136 -21.618 -20.209 -18.897 -17.670 -16.519 -15.438 -14.418 -13.455 -12.544 -11.682 -10.864 -10.090 -9.355 -8.657 -7.996 -7.368 -6.773 -6.209 -5.675 -5.169 -4.691 -4.240 -3.815 -3.415 -3.040 -2.689 -2.361 -2.055 -1.773 -1.512 -1.273 -1.055 -0.859 -0.683 -0.527 -0.392 -0.277 -0.182 -0.107 -0.052 -0.016 0.000 -0.004 -0.027 -0.068 -0.128 -0.209 -0.309 -0.430 -0.570 -0.731 -0.913 -1.116 -1.340 -1.586 -1.853 -2.143 -2.456 -2.791 -3.151 -3.535 -3.945 -4.380 -4.841 -5.331 -5.849 -6.396 -6.975 -7.586 -8.231 -8.911 -9.630 -10.388 -11.188 -12.035 -12.930 -13.878 -14.883 -15.952 -17.091 -18.307 -19.612 -21.018 -22.544 -24.211 -26.051 -28.107 -30.447 -33.186 -36.537 -40.992 -48.324 -56.487 -51.130 -45.786 -43.421 -42.280 -41.868 -41.985 -42.535 -43.443 -44.566 -45.545 -45.782 -44.928 -43.321 -41.527 -39.860 -38.411 -37.182 -36.150 -35.291 -34.581 -34.005 -33.546 -33.195 -32.941 -32.778 -32.700 -32.703 -32.784 -32.941 -33.172 -33.478 -33.856 -34.309 -34.836 -35.441 -36.124 -36.891 -37.744 -38.688 -39.728 -40.871 -42.123 -43.493 -44.988 -46.616 -48.388 -50.314 -52.416 -54.729 -57.312 -60.183 -62.798 -63.251 -60.977 -57.785 -54.878 -52.401 -50.279 -48.438 -46.827 -45.407 -44.149 -43.032 -42.041 -41.162 -40.385 -39.700 -39.100 -38.581 -38.138 -37.765 -37.460 -37.219 -37.040 -36.922 -36.862 -36.861 -36.918 -37.031 -37.203 -37.432 -37.720 -38.068 -38.479 -38.953 -39.495 -40.107 -40.794 -41.562 -42.415 -43.364 -44.416 -45.586 -46.887 -48.340 -49.972 -51.818 -53.926 -56.367 -59.242 -62.694 -66.860 -71.323 -73.547 -72.933 -72.140 -71.815 -70.901 -68.373 -65.058 -61.911 -59.179 -56.844 -54.843 -53.116 -51.614 -50.302 -49.152 -48.142 -47.255 -46.478 -45.800 -45.213 -44.709 -44.283 -43.930 -43.645 -43.426 -43.270 -43.175 -43.140 -43.163 -43.243 -43.381 -43.576 -43.828 -44.139 -44.509 -44.940 -45.433 -45.992 -46.620 -47.319 -48.095 -48.954 -49.901 -50.855 -51.809 -52.763 -53.717 -54.670 0 1 1.0 4476553695.58 S4 VV 30.06 34.35 0.05 -1.862e+08 4.806e+10 -1.643e+09 4.904e+10 -3.089e+09 4.988e+10 -4.520e+09 5.056e+10 -5.930e+09 5.109e+10 -7.311e+09 5.145e+10 -8.658e+09 5.165e+10 -9.965e+09 5.168e+10 -1.122e+10 5.155e+10 -1.243e+10 5.124e+10 -1.357e+10 5.078e+10 -1.464e+10 5.015e+10 -1.564e+10 4.937e+10 -1.656e+10 4.844e+10 -1.738e+10 4.737e+10 -1.811e+10 4.616e+10 -1.873e+10 4.483e+10 -1.925e+10 4.338e+10 -1.965e+10 4.184e+10 -1.994e+10 4.021e+10 -2.011e+10 3.850e+10 -2.017e+10 3.673e+10 -2.011e+10 3.492e+10 -1.994e+10 3.307e+10 -1.966e+10 3.120e+10 -1.927e+10 2.932e+10 -1.878e+10 2.744e+10 -1.820e+10 2.558e+10 -1.754e+10 2.375e+10 -1.681e+10 2.195e+10 -1.602e+10 2.020e+10 -1.518e+10 1.851e+10 -1.430e+10 1.687e+10 -1.340e+10 1.530e+10 -1.248e+10 1.381e+10 -1.155e+10 1.239e+10 -1.064e+10 1.104e+10 -9.737e+09 9.779e+09 -8.858e+09 8.598e+09 -8.011e+09 7.499e+09 -7.200e+09 6.482e+09 -6.430e+09 5.547e+09 -5.705e+09 4.694e+09 -5.027e+09 3.919e+09 -4.398e+09 3.223e+09 -3.819e+09 2.603e+09 -3.290e+09 2.056e+09 -2.811e+09 1.580e+09 -2.381e+09 1.172e+09 -1.998e+09 8.271e+08 -1.662e+09 5.414e+08 -1.371e+09 3.096e+08 -1.122e+09 1.252e+08 -9.137e+08 -1.912e+07 -7.433e+08 -1.317e+08 -6.065e+08 -2.222e+08 -4.976e+08 -3.001e+08 -4.095e+08 -3.742e+08 -3.337e+08 -4.508e+08 -2.621e+08 -5.335e+08 -1.878e+08 -6.225e+08 -1.057e+08 -7.163e+08 -1.238e+07 -8.121e+08 9.400e+07 -9.067e+08 2.145e+08 -9.971e+08 3.497e+08 -1.081e+09 4.994e+08 -1.156e+09 6.638e+08 -1.220e+09 8.437e+08 -1.273e+09 1.039e+09 -1.314e+09 1.250e+09 -1.341e+09 1.478e+09 -1.356e+09 1.724e+09 -1.356e+09 1.990e+09 -1.342e+09 2.277e+09 -1.314e+09 2.587e+09 -1.270e+09 2.922e+09 -1.210e+09 3.284e+09 -1.133e+09 3.675e+09 -1.038e+09 4.098e+09 -9.252e+08 4.557e+09 -7.927e+08 5.052e+09 -6.400e+08 5.589e+09 -4.658e+08 6.171e+09 -2.689e+08 6.803e+09 -4.837e+07 7.488e+09 1.973e+08 8.233e+09 4.701e+08 9.041e+09 7.712e+08 9.919e+09 1.103e+09 1.087e+10 1.467e+09 1.191e+10 1.865e+09 1.303e+10 2.299e+09 1.424e+10 2.773e+09 1.555e+10 3.285e+09 1.696e+10 3.839e+09 1.846e+10 4.435e+09 2.007e+10 5.072e+09 2.177e+10 5.749e+09 2.357e+10 6.464e+09 2.545e+10 7.213e+09 2.742e+10 7.992e+09 2.946e+10 8.796e+09 3.155e+10 9.615e+09 3.369e+10 1.044e+10 3.584e+10 1.126e+10 3.801e+10 1.207e+10 4.015e+10 1.285e+10 4.225e+10 1.359e+10 4.430e+10 1.427e+10 4.625e+10 1.489e+10 4.810e+10 1.543e+10 4.983e+10 1.589e+10 5.140e+10 1.625e+10 5.281e+10 1.651e+10 5.405e+10 1.667e+10 5.510e+10 1.672e+10 5.594e+10 1.666e+10 5.659e+10 1.650e+10 5.702e+10 1.625e+10 5.725e+10 1.591e+10 5.727e+10 1.550e+10 5.709e+10 1.502e+10 5.672e+10 1.448e+10 5.616e+10 1.391e+10 5.543e+10 1.331e+10 5.452e+10 1.269e+10 5.346e+10 1.208e+10 5.226e+10 1.147e+10 5.092e+10 1.088e+10 4.945e+10 1.032e+10 4.787e+10 9.788e+09 4.619e+10 9.298e+09 4.442e+10 8.850e+09 4.258e+10 8.444e+09 4.066e+10 8.080e+09 3.869e+10 7.757e+09 3.667e+10 7.470e+09 3.463e+10 7.216e+09 3.256e+10 6.989e+09 3.049e+10 6.784e+09 2.843e+10 6.595e+09 2.639e+10 6.416e+09 2.439e+10 6.243e+09 2.243e+10 6.070e+09 2.053e+10 5.894e+09 1.870e+10 5.712e+09 1.695e+10 5.521e+09 1.530e+10 5.322e+09 1.374e+10 5.114e+09 1.228e+10 4.898e+09 1.093e+10 4.676e+09 9.700e+09 4.450e+09 8.578e+09 4.224e+09 7.566e+09 4.000e+09 6.665e+09 3.783e+09 5.868e+09 3.573e+09 5.172e+09 3.375e+09 4.570e+09 3.192e+09 4.056e+09 3.024e+09 3.621e+09 2.873e+09 3.261e+09 2.740e+09 2.967e+09 2.625e+09 2.733e+09 2.528e+09 2.555e+09 2.449e+09 2.425e+09 2.386e+09 2.341e+09 2.338e+09 2.300e+09 2.303e+09 2.297e+09 2.280e+09 2.333e+09 2.266e+09 2.405e+09 2.260e+09 2.513e+09 2.258e+09 2.656e+09 2.257e+09 2.835e+09 2.255e+09 3.050e+09 2.247e+09 3.302e+09 2.230e+09 3.591e+09 2.199e+09 3.918e+09 2.151e+09 4.285e+09 2.079e+09 4.693e+09 1.980e+09 5.144e+09 1.847e+09 5.640e+09 1.676e+09 6.183e+09 1.459e+09 6.776e+09 1.193e+09 7.422e+09 8.699e+08 8.121e+09 4.850e+08 8.876e+09 3.174e+07 9.687e+09 -4.949e+08 1.055e+10 -1.098e+09 1.146e+10 -1.782e+09 1.242e+10 -2.547e+09 1.341e+10 -3.390e+09 1.442e+10 -4.307e+09 1.544e+10 -5.288e+09 1.644e+10 -6.323e+09 1.742e+10 -7.395e+09 1.833e+10 -8.486e+09 1.917e+10 -9.573e+09 1.990e+10 -1.063e+10 2.050e+10 -1.164e+10 2.094e+10 -1.258e+10 2.119e+10 -1.340e+10 2.124e+10 -1.411e+10 2.106e+10 -1.466e+10 2.065e+10 -1.505e+10 1.999e+10 -1.526e+10 1.908e+10 -1.529e+10 1.795e+10 -1.512e+10 1.659e+10 -1.477e+10 1.504e+10 -1.424e+10 1.333e+10 -1.354e+10 1.151e+10 -1.270e+10 9.623e+09 -1.174e+10 7.729e+09 -1.070e+10 5.887e+09 -9.608e+09 4.154e+09 -8.517e+09 2.572e+09 -7.480e+09 1.159e+09 -6.562e+09 -1.128e+08 -5.829e+09 -1.342e+09 -5.336e+09 -2.694e+09 -5.099e+09 -4.373e+09 -5.081e+09 -6.574e+09 -5.199e+09 -9.440e+09 -5.356e+09 -1.306e+10 -5.468e+09 -1.750e+10 -5.470e+09 -2.277e+10 -5.319e+09 -2.887e+10 -4.989e+09 -3.578e+10 -4.468e+09 -4.344e+10 -3.755e+09 -5.180e+10 -2.865e+09 -6.077e+10 -1.821e+09 -7.025e+10 -6.589e+08 -8.013e+10 5.713e+08 -9.026e+10 1.811e+09 -1.005e+11 2.985e+09 -1.107e+11 4.010e+09 -1.208e+11 4.792e+09 -1.304e+11 5.227e+09 -1.396e+11 5.203e+09 -1.481e+11 4.607e+09 -1.557e+11 3.321e+09 -1.624e+11 1.233e+09 -1.681e+11 -1.770e+09 -1.726e+11 -5.788e+09 -1.759e+11 -1.091e+10 -1.780e+11 -1.724e+10 -1.789e+11 -2.486e+10 -1.788e+11 -3.386e+10 -1.779e+11 -4.439e+10 -1.763e+11 -5.664e+10 -1.744e+11 -7.092e+10 -1.724e+11 -8.772e+10 -1.706e+11 -1.077e+11 -1.694e+11 -1.319e+11 -1.686e+11 -1.617e+11 -1.685e+11 -1.986e+11 -1.685e+11 -2.448e+11 -1.681e+11 -3.027e+11 -1.667e+11 -3.748e+11 -1.633e+11 -4.642e+11 -1.567e+11 -5.743e+11 -1.459e+11 -7.085e+11 -1.297e+11 -8.709e+11 -1.066e+11 -1.066e+12 -7.540e+10 -1.297e+12 -3.491e+10 -1.570e+12 1.619e+10 -1.890e+12 7.897e+10 -2.263e+12 1.545e+11 -2.693e+12 2.438e+11 -3.189e+12 3.475e+11 -3.756e+12 4.661e+11 -4.402e+12 6.003e+11 -5.133e+12 7.499e+11 -5.958e+12 9.146e+11 -6.884e+12 1.094e+12 -7.921e+12 1.288e+12 -9.074e+12 1.493e+12 -1.035e+13 1.710e+12 -1.177e+13 1.935e+12 -1.333e+13 2.167e+12 -1.504e+13 2.401e+12 -1.692e+13 2.635e+12 -1.897e+13 2.864e+12 -2.119e+13 3.083e+12 -2.360e+13 3.288e+12 -2.621e+13 3.473e+12 -2.902e+13 3.632e+12 -3.204e+13 3.759e+12 -3.527e+13 3.845e+12 -3.872e+13 3.884e+12 -4.241e+13 3.868e+12 -4.631e+13 3.789e+12 -5.046e+13 3.638e+12 -5.484e+13 3.405e+12 -5.945e+13 3.083e+12 -6.430e+13 2.660e+12 -6.939e+13 2.128e+12 -7.470e+13 1.477e+12 -8.025e+13 6.946e+11 -8.603e+13 -9.919e+11 -9.195e+13 -8.301e+11 -9.863e+13 -2.030e+12 -1.051e+14 -3.399e+12 -1.117e+14 -4.949e+12 -1.185e+14 -6.692e+12 -1.255e+14 -8.635e+12 -1.327e+14 -1.079e+13 -1.400e+14 -1.317e+13 -1.475e+14 -1.578e+13 -1.551e+14 -1.864e+13 -1.628e+14 -2.175e+13 -1.706e+14 -2.512e+13 -1.785e+14 -2.876e+13 -1.865e+14 -3.268e+13 -1.945e+14 -3.689e+13 -2.026e+14 -4.139e+13 -2.106e+14 -4.619e+13 -2.187e+14 -5.129e+13 -2.267e+14 -5.671e+13 -2.347e+14 -6.244e+13 -2.426e+14 -6.847e+13 -2.504e+14 -7.482e+13 -2.581e+14 -8.149e+13 -2.657e+14 -8.847e+13 -2.730e+14 -9.575e+13 -2.803e+14 -1.033e+14 -2.873e+14 -1.112e+14 -2.940e+14 -1.194e+14 -3.005e+14 -1.278e+14 -3.068e+14 -1.365e+14 -3.127e+14 -1.454e+14 -3.183e+14 -1.545e+14 -3.235e+14 -1.639e+14 -3.284e+14 -1.735e+14 -3.329e+14 -1.832e+14 -3.370e+14 -1.930e+14 -3.406e+14 -2.030e+14 -3.439e+14 -2.131e+14 -3.467e+14 -2.233e+14 -3.490e+14 -2.335e+14 -3.508e+14 -2.438e+14 -3.522e+14 -2.541e+14 -3.532e+14 -2.643e+14 -3.536e+14 -2.745e+14 -3.536e+14 -2.847e+14 -3.531e+14 -2.947e+14 -3.521e+14 -3.045e+14 -3.506e+14 -3.143e+14 -3.486e+14 -3.238e+14 -3.462e+14 -3.331e+14 -3.434e+14 -3.422e+14 -3.400e+14 -3.510e+14 -3.363e+14 -3.596e+14 -3.321e+14 -3.678e+14 -3.275e+14 -3.758e+14 -3.226e+14 -3.834e+14 -3.172e+14 -3.906e+14 -3.116e+14 -3.974e+14 -3.055e+14 -4.039e+14 -2.992e+14 -4.099e+14 -2.925e+14 -4.155e+14 -2.856e+14 -4.206e+14 -2.784e+14 -4.253e+14 -2.709e+14 -4.295e+14 -2.632e+14 -4.332e+14 -2.553e+14 -4.363e+14 -2.473e+14 -4.390e+14 -2.391e+14 -4.411e+14 -2.307e+14 -4.427e+14 -2.222e+14 -4.437e+14 -2.136e+14 -4.442e+14 -2.049e+14 -4.440e+14 -1.962e+14 -4.434e+14 -1.875e+14 -4.421e+14 -1.787e+14 -4.402e+14 -1.700e+14 -4.378e+14 -1.613e+14 -4.348e+14 -1.527e+14 -4.312e+14 -1.441e+14 -4.271e+14 -1.357e+14 -4.224e+14 -1.274e+14 -4.172e+14 -1.193e+14 -4.115e+14 -1.114e+14 -4.053e+14 -1.036e+14 -3.986e+14 -9.609e+13 -3.914e+14 -8.878e+13 -3.838e+14 -8.169e+13 -3.757e+14 -7.485e+13 -3.673e+14 -6.827e+13 -3.585e+14 -6.195e+13 -3.494e+14 -5.592e+13 -3.400e+14 -5.017e+13 -3.303e+14 -4.471e+13 -3.203e+14 -3.956e+13 -3.102e+14 -3.470e+13 -2.999e+14 -3.014e+13 -2.895e+14 -2.588e+13 -2.790e+14 -2.192e+13 -2.684e+14 -1.826e+13 -2.578e+14 -1.488e+13 -2.472e+14 -1.179e+13 -2.367e+14 -8.975e+12 -2.262e+14 -6.427e+12 -2.157e+14 -4.137e+12 -2.054e+14 -2.094e+12 -1.953e+14 -2.899e+11 -1.853e+14 1.290e+12 -1.755e+14 2.656e+12 -1.659e+14 3.821e+12 -1.565e+14 4.798e+12 -1.474e+14 5.599e+12 -1.385e+14 6.238e+12 -1.299e+14 6.727e+12 -1.216e+14 7.080e+12 -1.136e+14 7.308e+12 -1.058e+14 7.425e+12 -9.842e+13 7.443e+12 -9.131e+13 7.373e+12 -8.452e+13 7.227e+12 -7.804e+13 7.016e+12 -7.189e+13 6.754e+12 -6.604e+13 6.454e+12 -6.051e+13 6.120e+12 -5.529e+13 5.757e+12 -5.038e+13 5.372e+12 -4.577e+13 4.973e+12 -4.147e+13 4.568e+12 -3.745e+13 4.162e+12 -3.372e+13 3.760e+12 -3.026e+13 3.368e+12 -2.706e+13 2.989e+12 -2.411e+13 2.626e+12 -2.141e+13 2.284e+12 -1.894e+13 1.963e+12 -1.669e+13 1.665e+12 -1.465e+13 1.391e+12 -1.281e+13 1.142e+12 -1.115e+13 9.181e+11 -9.659e+12 7.185e+11 -8.331e+12 5.427e+11 -7.150e+12 3.899e+11 -6.107e+12 2.589e+11 -5.189e+12 1.481e+11 -4.386e+12 5.614e+10 -3.686e+12 -1.858e+10 -3.080e+12 -7.784e+10 -2.559e+12 -1.233e+11 -2.113e+12 -1.567e+11 -1.734e+12 -1.796e+11 -1.414e+12 -1.938e+11 -1.146e+12 -2.007e+11 -9.229e+11 -2.017e+11 -7.387e+11 -1.982e+11 -5.880e+11 -1.913e+11 -4.655e+11 -1.820e+11 -3.668e+11 -1.713e+11 -2.879e+11 -1.598e+11 -2.253e+11 -1.482e+11 -1.759e+11 -1.368e+11 -1.371e+11 -1.260e+11 -1.067e+11 -1.158e+11 -8.297e+10 -1.061e+11 -6.443e+10 -9.705e+10 -4.994e+10 -8.835e+10 -3.867e+10 -7.991e+10 -2.998e+10 -7.160e+10 -2.336e+10 -6.336e+10 -1.842e+10 -5.519e+10 -1.484e+10 -4.712e+10 -1.235e+10 -3.926e+10 -1.068e+10 -3.177e+10 -9.620e+09 -2.482e+10 -8.982e+09 -1.860e+10 -8.661e+09 -1.330e+10 -8.681e+09 -9.022e+09 -9.257e+09 -5.668e+09 -1.076e+10 -2.852e+09 -1.356e+10 9.000e+07 -1.790e+10 3.862e+09 -2.384e+10 8.980e+09 -3.139e+10 1.573e+10 -4.056e+10 2.424e+10 -5.131e+10 3.452e+10 -6.355e+10 4.648e+10 -7.723e+10 6.003e+10 -9.219e+10 7.496e+10 -1.083e+11 9.106e+10 -1.254e+11 1.081e+11 -1.432e+11 1.258e+11 -1.615e+11 1.438e+11 -1.801e+11 1.620e+11 -1.988e+11 1.799e+11 -2.172e+11 1.974e+11 -2.351e+11 2.141e+11 -2.523e+11 2.298e+11 -2.686e+11 2.442e+11 -2.837e+11 2.573e+11 -2.974e+11 2.688e+11 -3.096e+11 2.786e+11 -3.202e+11 2.867e+11 -3.290e+11 2.929e+11 -3.359e+11 2.972e+11 -3.409e+11 2.996e+11 -3.440e+11 3.002e+11 -3.452e+11 2.991e+11 -3.445e+11 2.963e+11 -3.420e+11 2.920e+11 -3.377e+11 2.862e+11 -3.317e+11 2.790e+11 -3.242e+11 2.707e+11 -3.153e+11 2.613e+11 -3.051e+11 2.511e+11 -2.937e+11 2.400e+11 -2.814e+11 2.283e+11 -2.683e+11 2.162e+11 -2.545e+11 2.037e+11 -2.403e+11 1.910e+11 -2.256e+11 1.781e+11 -2.108e+11 1.653e+11 -1.959e+11 1.526e+11 -1.811e+11 1.401e+11 -1.665e+11 1.279e+11 -1.522e+11 1.161e+11 -1.383e+11 1.048e+11 -1.249e+11 9.395e+10 -1.121e+11 8.370e+10 -9.990e+10 7.407e+10 -8.842e+10 6.508e+10 -7.770e+10 5.678e+10 -6.774e+10 4.916e+10 -5.857e+10 4.223e+10 -5.021e+10 3.599e+10 -4.265e+10 3.044e+10 -3.586e+10 2.552e+10 -2.984e+10 2.125e+10 -2.456e+10 1.756e+10 -1.997e+10 1.441e+10 -1.603e+10 1.176e+10 -1.269e+10 9.562e+09 -9.902e+09 7.758e+09 -7.612e+09 6.305e+09 -5.765e+09 5.155e+09 -4.302e+09 4.265e+09 -3.169e+09 3.599e+09 -2.310e+09 3.126e+09 -1.670e+09 2.824e+09 -1.197e+09 2.678e+09 -8.450e+08 2.678e+09 -5.734e+08 2.816e+09 -3.565e+08 3.089e+09 -1.803e+08 3.495e+09 -4.205e+07 4.036e+09 5.239e+07 4.718e+09 9.183e+07 5.547e+09 6.124e+07 6.533e+09 -5.697e+07 7.685e+09 -2.821e+08 9.011e+09 -6.348e+08 1.052e+10 -1.136e+09 1.222e+10 -1.808e+09 1.410e+10 -2.670e+09 1.618e+10 -3.744e+09 1.844e+10 -5.046e+09 2.088e+10 -6.594e+09 2.348e+10 -8.399e+09 2.623e+10 -1.047e+10 2.911e+10 -1.281e+10 3.210e+10 -1.543e+10 3.516e+10 -1.832e+10 3.828e+10 -2.146e+10 4.141e+10 -2.486e+10 4.453e+10 -2.849e+10 4.759e+10 -3.233e+10 5.058e+10 -3.636e+10 5.345e+10 -4.055e+10 5.616e+10 -4.486e+10 5.869e+10 -4.928e+10 6.100e+10 -5.376e+10 6.306e+10 -5.827e+10 6.484e+10 -6.278e+10 6.633e+10 -6.725e+10 6.749e+10 -7.164e+10 6.832e+10 -7.593e+10 6.879e+10 -8.009e+10 6.889e+10 -8.409e+10 6.861e+10 -8.790e+10 6.794e+10 -9.151e+10 6.688e+10 -9.488e+10 6.543e+10 -9.802e+10 6.359e+10 -1.009e+11 6.139e+10 -1.035e+11 5.883e+10 -1.058e+11 5.592e+10 -1.079e+11 5.270e+10 -1.097e+11 4.918e+10 -1.112e+11 4.537e+10 -1.124e+11 4.132e+10 -1.133e+11 3.705e+10 -1.139e+11 3.258e+10 -1.143e+11 2.794e+10 -1.145e+11 2.316e+10 -1.143e+11 1.827e+10 0.005 -52.677 -51.731 -50.784 -49.838 -48.891 -47.945 -47.005 -46.156 -45.392 -44.706 -44.093 -43.549 -43.071 -42.656 -42.302 -42.007 -41.769 -41.588 -41.463 -41.394 -41.381 -41.425 -41.525 -41.684 -41.903 -42.184 -42.530 -42.944 -43.430 -43.993 -44.638 -45.374 -46.208 -47.152 -48.221 -49.431 -50.808 -52.382 -54.199 -56.320 -58.840 -61.900 -65.688 -70.122 -72.794 -71.420 -69.489 -68.218 -67.257 -66.021 -64.142 -61.765 -59.272 -56.910 -54.766 -52.851 -51.147 -49.631 -48.280 -47.076 -46.001 -45.044 -44.192 -43.438 -42.774 -42.194 -41.694 -41.270 -40.919 -40.638 -40.427 -40.283 -40.206 -40.196 -40.254 -40.381 -40.577 -40.846 -41.188 -41.607 -42.108 -42.693 -43.368 -44.140 -45.012 -45.989 -47.074 -48.266 -49.557 -50.925 -52.326 -53.688 -54.912 -55.890 -56.540 -56.810 -56.657 -56.033 -54.932 -53.438 -51.707 -49.892 -48.100 -46.392 -44.796 -43.319 -41.962 -40.719 -39.584 -38.550 -37.611 -36.761 -35.996 -35.312 -34.705 -34.172 -33.713 -33.324 -33.007 -32.759 -32.583 -32.479 -32.450 -32.499 -32.628 -32.842 -33.148 -33.553 -34.068 -34.705 -35.480 -36.417 -37.542 -38.893 -40.516 -42.459 -44.716 -47.036 -48.608 -48.600 -47.407 -46.081 -45.158 -44.797 -45.107 -46.314 -48.960 -53.268 -51.383 -45.200 -40.025 -36.191 -33.115 -30.521 -28.264 -26.259 -24.451 -22.802 -21.286 -19.884 -18.579 -17.360 -16.220 -15.147 -14.137 -13.183 -12.282 -11.429 -10.622 -9.856 -9.131 -8.443 -7.790 -7.172 -6.585 -6.030 -5.504 -5.007 -4.538 -4.095 -3.678 -3.286 -2.919 -2.575 -2.255 -1.957 -1.682 -1.429 -1.197 -0.986 -0.797 -0.628 -0.480 -0.351 -0.243 -0.155 -0.087 -0.038 -0.009 0.000 -0.010 -0.038 -0.085 -0.152 -0.239 -0.345 -0.472 -0.619 -0.786 -0.974 -1.183 -1.413 -1.665 -1.938 -2.234 -2.552 -2.894 -3.259 -3.649 -4.064 -4.504 -4.971 -5.466 -5.988 -6.541 -7.124 -7.739 -8.387 -9.071 -9.792 -10.552 -11.354 -12.200 -13.094 -14.038 -15.039 -16.100 -17.227 -18.428 -19.711 -21.088 -22.572 -24.180 -25.932 -27.860 -30.000 -32.407 -35.150 -38.297 -41.784 -44.941 -46.343 -45.746 -44.685 -44.013 -43.851 -44.161 -44.869 -45.826 -46.667 -46.786 -45.830 -44.134 -42.262 -40.524 -39.012 -37.725 -36.639 -35.730 -34.974 -34.353 -33.852 -33.460 -33.166 -32.965 -32.849 -32.814 -32.857 -32.975 -33.166 -33.431 -33.768 -34.176 -34.657 -35.211 -35.840 -36.547 -37.334 -38.203 -39.159 -40.204 -41.341 -42.572 -43.897 -45.311 -46.806 -48.364 -49.954 -51.533 -53.032 -54.352 -55.340 -55.789 -55.536 -54.598 -53.192 -51.575 -49.931 -48.358 -46.895 -45.556 -44.341 -43.244 -42.257 -41.372 -40.583 -39.882 -39.264 -38.724 -38.258 -37.862 -37.532 -37.265 -37.059 -36.913 -36.825 -36.794 -36.819 -36.900 -37.036 -37.229 -37.478 -37.785 -38.151 -38.578 -39.067 -39.623 -40.247 -40.945 -41.720 -42.580 -43.532 -44.585 -45.751 -47.043 -48.479 -50.085 -51.890 -53.939 -56.292 -59.042 -62.335 -66.432 -71.865 -79.807 -84.951 -80.679 -77.201 -73.290 -69.122 -65.397 -62.248 -59.600 -57.355 -55.433 -53.773 -52.331 -51.072 -49.970 -49.005 -48.162 -47.428 -46.792 -46.247 -45.786 -45.403 -45.095 -44.857 -44.687 -44.582 -44.541 -44.562 -44.646 -44.790 -44.997 -45.266 -45.598 -45.995 -46.459 -46.993 -47.599 -48.283 -49.049 -49.904 -50.854 -51.911 -52.975 -54.039 -55.104 -56.168 -57.232 0 1 1.0 4476553695.58 S4 VH 30.06 34.35 0.05 -4.036e+10 2.478e+10 -4.139e+10 2.377e+10 -4.223e+10 2.272e+10 -4.287e+10 2.164e+10 -4.331e+10 2.052e+10 -4.355e+10 1.938e+10 -4.359e+10 1.823e+10 -4.344e+10 1.707e+10 -4.311e+10 1.593e+10 -4.260e+10 1.479e+10 -4.192e+10 1.368e+10 -4.109e+10 1.259e+10 -4.011e+10 1.153e+10 -3.901e+10 1.051e+10 -3.779e+10 9.530e+09 -3.647e+10 8.595e+09 -3.506e+10 7.704e+09 -3.358e+10 6.861e+09 -3.204e+10 6.068e+09 -3.045e+10 5.322e+09 -2.883e+10 4.627e+09 -2.719e+10 3.982e+09 -2.554e+10 3.385e+09 -2.389e+10 2.837e+09 -2.224e+10 2.335e+09 -2.062e+10 1.879e+09 -1.903e+10 1.468e+09 -1.747e+10 1.099e+09 -1.595e+10 7.723e+08 -1.448e+10 4.855e+08 -1.307e+10 2.369e+08 -1.172e+10 2.467e+07 -1.043e+10 -1.530e+08 -9.219e+09 -2.981e+08 -8.080e+09 -4.130e+08 -7.017e+09 -4.998e+08 -6.034e+09 -5.609e+08 -5.132e+09 -5.987e+08 -4.312e+09 -6.160e+08 -3.573e+09 -6.151e+08 -2.915e+09 -5.989e+08 -2.336e+09 -5.699e+08 -1.834e+09 -5.308e+08 -1.405e+09 -4.843e+08 -1.045e+09 -4.327e+08 -7.508e+08 -3.787e+08 -5.159e+08 -3.248e+08 -3.346e+08 -2.735e+08 -2.004e+08 -2.277e+08 -1.050e+08 -1.904e+08 -3.794e+07 -1.646e+08 1.319e+07 -1.521e+08 6.115e+07 -1.513e+08 1.151e+08 -1.582e+08 1.787e+08 -1.678e+08 2.521e+08 -1.766e+08 3.336e+08 -1.823e+08 4.209e+08 -1.835e+08 5.120e+08 -1.795e+08 6.052e+08 -1.698e+08 6.991e+08 -1.543e+08 7.931e+08 -1.326e+08 8.870e+08 -1.045e+08 9.807e+08 -6.965e+07 1.075e+09 -2.770e+07 1.170e+09 2.203e+07 1.268e+09 8.022e+07 1.371e+09 1.479e+08 1.479e+09 2.268e+08 1.595e+09 3.180e+08 1.722e+09 4.236e+08 1.861e+09 5.462e+08 2.015e+09 6.880e+08 2.186e+09 8.522e+08 2.377e+09 1.042e+09 2.591e+09 1.262e+09 2.830e+09 1.515e+09 3.098e+09 1.805e+09 3.395e+09 2.137e+09 3.726e+09 2.515e+09 4.093e+09 2.944e+09 4.498e+09 3.426e+09 4.944e+09 3.967e+09 5.433e+09 4.571e+09 5.967e+09 5.239e+09 6.550e+09 5.975e+09 7.183e+09 6.783e+09 7.868e+09 7.662e+09 8.608e+09 8.615e+09 9.406e+09 9.644e+09 1.026e+10 1.075e+10 1.118e+10 1.192e+10 1.216e+10 1.318e+10 1.320e+10 1.450e+10 1.431e+10 1.589e+10 1.549e+10 1.736e+10 1.673e+10 1.889e+10 1.805e+10 2.048e+10 1.943e+10 2.213e+10 2.088e+10 2.384e+10 2.240e+10 2.560e+10 2.398e+10 2.741e+10 2.562e+10 2.926e+10 2.732e+10 3.115e+10 2.907e+10 3.306e+10 3.086e+10 3.500e+10 3.269e+10 3.695e+10 3.454e+10 3.890e+10 3.640e+10 4.084e+10 3.825e+10 4.276e+10 4.009e+10 4.465e+10 4.189e+10 4.649e+10 4.364e+10 4.826e+10 4.532e+10 4.996e+10 4.691e+10 5.157e+10 4.839e+10 5.307e+10 4.975e+10 5.445e+10 5.095e+10 5.568e+10 5.199e+10 5.675e+10 5.286e+10 5.766e+10 5.352e+10 5.838e+10 5.398e+10 5.890e+10 5.422e+10 5.922e+10 5.423e+10 5.932e+10 5.401e+10 5.920e+10 5.357e+10 5.887e+10 5.289e+10 5.831e+10 5.199e+10 5.753e+10 5.087e+10 5.654e+10 4.955e+10 5.535e+10 4.804e+10 5.397e+10 4.635e+10 5.241e+10 4.451e+10 5.070e+10 4.253e+10 4.884e+10 4.044e+10 4.687e+10 3.826e+10 4.479e+10 3.601e+10 4.264e+10 3.371e+10 4.043e+10 3.139e+10 3.819e+10 2.906e+10 3.593e+10 2.675e+10 3.368e+10 2.448e+10 3.145e+10 2.227e+10 2.927e+10 2.012e+10 2.714e+10 1.806e+10 2.507e+10 1.609e+10 2.309e+10 1.422e+10 2.118e+10 1.247e+10 1.938e+10 1.084e+10 1.767e+10 9.326e+09 1.606e+10 7.941e+09 1.456e+10 6.683e+09 1.317e+10 5.549e+09 1.188e+10 4.536e+09 1.069e+10 3.642e+09 9.604e+09 2.859e+09 8.613e+09 2.180e+09 7.712e+09 1.600e+09 6.898e+09 1.108e+09 6.162e+09 6.978e+08 5.499e+09 3.614e+08 4.902e+09 9.099e+07 4.362e+09 -1.199e+08 3.874e+09 -2.772e+08 3.431e+09 -3.862e+08 3.026e+09 -4.519e+08 2.654e+09 -4.785e+08 2.311e+09 -4.708e+08 1.993e+09 -4.335e+08 1.698e+09 -3.723e+08 1.426e+09 -2.936e+08 1.177e+09 -2.045e+08 9.518e+08 -1.125e+08 7.529e+08 -2.427e+07 5.837e+08 5.689e+07 4.484e+08 1.354e+08 3.509e+08 2.283e+08 2.901e+08 3.628e+08 2.560e+08 5.670e+08 2.310e+08 8.626e+08 1.982e+08 1.264e+09 1.460e+08 1.781e+09 6.795e+07 2.421e+09 -3.957e+07 3.186e+09 -1.781e+08 4.078e+09 -3.481e+08 5.092e+09 -5.497e+08 6.223e+09 -7.826e+08 7.456e+09 -1.046e+09 8.780e+09 -1.339e+09 1.017e+10 -1.660e+09 1.162e+10 -2.009e+09 1.309e+10 -2.385e+09 1.455e+10 -2.785e+09 1.598e+10 -3.207e+09 1.735e+10 -3.649e+09 1.863e+10 -4.108e+09 1.978e+10 -4.579e+09 2.079e+10 -5.058e+09 2.161e+10 -5.538e+09 2.223e+10 -6.011e+09 2.263e+10 -6.471e+09 2.278e+10 -6.908e+09 2.268e+10 -7.312e+09 2.232e+10 -7.673e+09 2.170e+10 -7.979e+09 2.083e+10 -8.220e+09 1.971e+10 -8.386e+09 1.837e+10 -8.467e+09 1.683e+10 -8.456e+09 1.513e+10 -8.347e+09 1.330e+10 -8.138e+09 1.140e+10 -7.831e+09 9.475e+09 -7.433e+09 7.585e+09 -6.956e+09 5.786e+09 -6.424e+09 4.127e+09 -5.868e+09 2.645e+09 -5.336e+09 1.345e+09 -4.891e+09 1.696e+08 -4.604e+09 -1.007e+09 -4.534e+09 -2.374e+09 -4.699e+09 -4.139e+09 -5.068e+09 -6.478e+09 -5.574e+09 -9.516e+09 -6.145e+09 -1.334e+10 -6.723e+09 -1.800e+10 -7.262e+09 -2.351e+10 -7.735e+09 -2.987e+10 -8.125e+09 -3.706e+10 -8.431e+09 -4.502e+10 -8.661e+09 -5.369e+10 -8.836e+09 -6.296e+10 -8.988e+09 -7.271e+10 -9.161e+09 -8.281e+10 -9.407e+09 -9.309e+10 -9.789e+09 -1.034e+11 -1.038e+10 -1.135e+11 -1.125e+10 -1.232e+11 -1.249e+10 -1.324e+11 -1.418e+10 -1.408e+11 -1.639e+10 -1.483e+11 -1.922e+10 -1.546e+11 -2.273e+10 -1.597e+11 -2.700e+10 -1.634e+11 -3.207e+10 -1.657e+11 -3.802e+10 -1.665e+11 -4.489e+10 -1.659e+11 -5.276e+10 -1.641e+11 -6.170e+10 -1.610e+11 -7.185e+10 -1.570e+11 -8.343e+10 -1.523e+11 -9.674e+10 -1.470e+11 -1.123e+11 -1.414e+11 -1.307e+11 -1.355e+11 -1.531e+11 -1.292e+11 -1.805e+11 -1.221e+11 -2.146e+11 -1.136e+11 -2.572e+11 -1.029e+11 -3.103e+11 -8.879e+10 -3.763e+11 -6.996e+10 -4.576e+11 -4.491e+10 -5.573e+11 -1.208e+10 -6.783e+11 3.024e+10 -8.240e+11 8.387e+10 -9.982e+11 1.505e+11 -1.205e+12 2.321e+11 -1.448e+12 3.304e+11 -1.732e+12 4.471e+11 -2.063e+12 5.841e+11 -2.445e+12 7.431e+11 -2.885e+12 9.255e+11 -3.388e+12 1.133e+12 -3.961e+12 1.366e+12 -4.611e+12 1.627e+12 -5.344e+12 1.916e+12 -6.167e+12 2.233e+12 -7.090e+12 2.579e+12 -8.118e+12 2.953e+12 -9.260e+12 3.356e+12 -1.052e+13 3.785e+12 -1.192e+13 4.240e+12 -1.345e+13 4.718e+12 -1.512e+13 5.217e+12 -1.695e+13 5.734e+12 -1.894e+13 6.266e+12 -2.109e+13 6.807e+12 -2.342e+13 7.353e+12 -2.593e+13 7.900e+12 -2.863e+13 8.441e+12 -3.152e+13 8.968e+12 -3.461e+13 9.477e+12 -3.790e+13 9.957e+12 -4.139e+13 1.040e+13 -4.509e+13 1.080e+13 -4.901e+13 1.115e+13 -5.314e+13 1.143e+13 -5.748e+13 1.164e+13 -6.204e+13 1.177e+13 -6.681e+13 1.180e+13 -7.179e+13 1.172e+13 -7.698e+13 1.194e+13 -8.257e+13 1.188e+13 -8.836e+13 1.147e+13 -9.420e+13 1.090e+13 -1.002e+14 1.017e+13 -1.065e+14 9.264e+12 -1.129e+14 8.171e+12 -1.195e+14 6.877e+12 -1.262e+14 5.370e+12 -1.331e+14 3.641e+12 -1.401e+14 1.677e+12 -1.473e+14 -5.346e+11 -1.546e+14 -3.000e+12 -1.620e+14 -5.732e+12 -1.694e+14 -8.742e+12 -1.769e+14 -1.203e+13 -1.845e+14 -1.561e+13 -1.921e+14 -1.950e+13 -1.997e+14 -2.368e+13 -2.074e+14 -2.818e+13 -2.149e+14 -3.299e+13 -2.225e+14 -3.811e+13 -2.299e+14 -4.355e+13 -2.372e+14 -4.930e+13 -2.445e+14 -5.537e+13 -2.515e+14 -6.175e+13 -2.584e+14 -6.844e+13 -2.651e+14 -7.542e+13 -2.716e+14 -8.269e+13 -2.779e+14 -9.025e+13 -2.839e+14 -9.808e+13 -2.896e+14 -1.062e+14 -2.949e+14 -1.145e+14 -3.000e+14 -1.231e+14 -3.047e+14 -1.318e+14 -3.091e+14 -1.408e+14 -3.130e+14 -1.500e+14 -3.166e+14 -1.593e+14 -3.198e+14 -1.687e+14 -3.225e+14 -1.783e+14 -3.248e+14 -1.879e+14 -3.267e+14 -1.977e+14 -3.281e+14 -2.075e+14 -3.292e+14 -2.173e+14 -3.298e+14 -2.272e+14 -3.299e+14 -2.370e+14 -3.295e+14 -2.467e+14 -3.287e+14 -2.564e+14 -3.275e+14 -2.660e+14 -3.258e+14 -2.754e+14 -3.236e+14 -2.847e+14 -3.210e+14 -2.938e+14 -3.179e+14 -3.027e+14 -3.145e+14 -3.114e+14 -3.106e+14 -3.198e+14 -3.063e+14 -3.279e+14 -3.017e+14 -3.357e+14 -2.966e+14 -3.432e+14 -2.912e+14 -3.503e+14 -2.855e+14 -3.571e+14 -2.794e+14 -3.634e+14 -2.730e+14 -3.694e+14 -2.663e+14 -3.749e+14 -2.594e+14 -3.800e+14 -2.522e+14 -3.846e+14 -2.447e+14 -3.887e+14 -2.371e+14 -3.923e+14 -2.292e+14 -3.954e+14 -2.212e+14 -3.979e+14 -2.130e+14 -4.000e+14 -2.047e+14 -4.015e+14 -1.963e+14 -4.024e+14 -1.878e+14 -4.028e+14 -1.793e+14 -4.027e+14 -1.707e+14 -4.019e+14 -1.621e+14 -4.007e+14 -1.535e+14 -3.988e+14 -1.450e+14 -3.964e+14 -1.365e+14 -3.935e+14 -1.282e+14 -3.901e+14 -1.199e+14 -3.861e+14 -1.118e+14 -3.817e+14 -1.039e+14 -3.768e+14 -9.612e+13 -3.714e+14 -8.856e+13 -3.655e+14 -8.122e+13 -3.592e+14 -7.409e+13 -3.525e+14 -6.720e+13 -3.454e+14 -6.056e+13 -3.379e+14 -5.418e+13 -3.301e+14 -4.808e+13 -3.220e+14 -4.227e+13 -3.136e+14 -3.675e+13 -3.049e+14 -3.152e+13 -2.959e+14 -2.661e+13 -2.868e+14 -2.199e+13 -2.775e+14 -1.769e+13 -2.680e+14 -1.370e+13 -2.585e+14 -1.001e+13 -2.488e+14 -6.625e+12 -2.391e+14 -3.541e+12 -2.294e+14 -7.472e+11 -2.196e+14 1.762e+12 -2.100e+14 3.993e+12 -2.003e+14 5.960e+12 -1.908e+14 7.671e+12 -1.814e+14 9.138e+12 -1.721e+14 1.037e+13 -1.629e+14 1.139e+13 -1.540e+14 1.221e+13 -1.452e+14 1.283e+13 -1.367e+14 1.328e+13 -1.284e+14 1.356e+13 -1.204e+14 1.370e+13 -1.126e+14 1.370e+13 -1.051e+14 1.359e+13 -9.784e+13 1.337e+13 -9.090e+13 1.305e+13 -8.426e+13 1.266e+13 -7.792e+13 1.220e+13 -7.188e+13 1.168e+13 -6.614e+13 1.112e+13 -6.070e+13 1.053e+13 -5.556e+13 9.919e+12 -5.072e+13 9.290e+12 -4.618e+13 8.651e+12 -4.192e+13 8.009e+12 -3.795e+13 7.372e+12 -3.425e+13 6.745e+12 -3.081e+13 6.135e+12 -2.764e+13 5.544e+12 -2.470e+13 4.978e+12 -2.201e+13 4.440e+12 -1.954e+13 3.931e+12 -1.728e+13 3.454e+12 -1.523e+13 3.011e+12 -1.337e+13 2.601e+12 -1.169e+13 2.226e+12 -1.017e+13 1.884e+12 -8.818e+12 1.577e+12 -7.607e+12 1.301e+12 -6.532e+12 1.058e+12 -5.581e+12 8.437e+11 -4.743e+12 6.580e+11 -4.010e+12 4.986e+11 -3.372e+12 3.636e+11 -2.818e+12 2.507e+11 -2.342e+12 1.579e+11 -1.934e+12 8.316e+10 -1.587e+12 2.414e+10 -1.294e+12 -2.111e+10 -1.049e+12 -5.458e+10 -8.443e+11 -7.820e+10 -6.758e+11 -9.369e+10 -5.378e+11 -1.026e+11 -4.258e+11 -1.065e+11 -3.356e+11 -1.066e+11 -2.637e+11 -1.039e+11 -2.066e+11 -9.937e+10 -1.617e+11 -9.367e+10 -1.265e+11 -8.731e+10 -9.905e+10 -8.063e+10 -7.764e+10 -7.383e+10 -6.098e+10 -6.699e+10 -4.798e+10 -6.014e+10 -3.788e+10 -5.327e+10 -3.007e+10 -4.642e+10 -2.405e+10 -3.961e+10 -1.947e+10 -3.294e+10 -1.602e+10 -2.653e+10 -1.345e+10 -2.054e+10 -1.158e+10 -1.515e+10 -1.028e+10 -1.052e+10 -9.559e+09 -6.727e+09 -9.574e+09 -3.646e+09 -1.059e+10 -8.630e+08 -1.283e+10 2.288e+09 -1.643e+10 6.484e+09 -2.138e+10 1.222e+10 -2.770e+10 1.980e+10 -3.538e+10 2.936e+10 -4.439e+10 4.096e+10 -5.471e+10 5.459e+10 -6.629e+10 7.015e+10 -7.903e+10 8.751e+10 -9.286e+10 1.065e+11 -1.076e+11 1.269e+11 -1.232e+11 1.485e+11 -1.393e+11 1.711e+11 -1.559e+11 1.942e+11 -1.727e+11 2.177e+11 -1.895e+11 2.412e+11 -2.061e+11 2.644e+11 -2.223e+11 2.870e+11 -2.379e+11 3.087e+11 -2.527e+11 3.292e+11 -2.665e+11 3.482e+11 -2.791e+11 3.654e+11 -2.904e+11 3.808e+11 -3.003e+11 3.940e+11 -3.086e+11 4.050e+11 -3.152e+11 4.135e+11 -3.202e+11 4.196e+11 -3.234e+11 4.232e+11 -3.248e+11 4.242e+11 -3.245e+11 4.228e+11 -3.224e+11 4.190e+11 -3.186e+11 4.128e+11 -3.131e+11 4.044e+11 -3.062e+11 3.940e+11 -2.978e+11 3.817e+11 -2.881e+11 3.677e+11 -2.772e+11 3.523e+11 -2.653e+11 3.357e+11 -2.525e+11 3.181e+11 -2.391e+11 2.997e+11 -2.250e+11 2.808e+11 -2.107e+11 2.616e+11 -1.960e+11 2.423e+11 -1.813e+11 2.231e+11 -1.667e+11 2.043e+11 -1.524e+11 1.859e+11 -1.383e+11 1.681e+11 -1.247e+11 1.511e+11 -1.117e+11 1.350e+11 -9.931e+10 1.198e+11 -8.763e+10 1.056e+11 -7.672e+10 9.252e+10 -6.660e+10 8.049e+10 -5.731e+10 6.956e+10 -4.886e+10 5.971e+10 -4.124e+10 5.089e+10 -3.444e+10 4.310e+10 -2.843e+10 3.627e+10 -2.318e+10 3.033e+10 -1.865e+10 2.524e+10 -1.479e+10 2.091e+10 -1.154e+10 1.727e+10 -8.838e+09 1.425e+10 -6.632e+09 1.178e+10 -4.853e+09 9.792e+09 -3.443e+09 8.226e+09 -2.338e+09 7.029e+09 -1.474e+09 6.149e+09 -7.945e+08 5.547e+09 -2.445e+08 5.185e+09 2.206e+08 5.034e+09 6.335e+08 5.072e+09 1.016e+09 5.280e+09 1.381e+09 5.651e+09 1.730e+09 6.182e+09 2.059e+09 6.878e+09 2.364e+09 7.747e+09 2.633e+09 8.803e+09 2.855e+09 1.006e+10 3.017e+09 1.154e+10 3.102e+09 1.325e+10 3.092e+09 1.523e+10 2.969e+09 1.747e+10 2.711e+09 2.000e+10 2.296e+09 2.282e+10 1.701e+09 2.594e+10 9.015e+08 2.937e+10 -1.242e+08 3.309e+10 -1.400e+09 3.710e+10 -2.945e+09 4.138e+10 -4.778e+09 4.589e+10 -6.915e+09 5.062e+10 -9.369e+09 5.552e+10 -1.214e+10 6.055e+10 -1.525e+10 6.566e+10 -1.868e+10 7.080e+10 -2.242e+10 7.590e+10 -2.648e+10 8.092e+10 -3.083e+10 8.579e+10 -3.545e+10 9.045e+10 -4.032e+10 9.485e+10 -4.540e+10 9.892e+10 -5.067e+10 1.026e+11 -5.607e+10 1.059e+11 -6.159e+10 1.087e+11 -6.716e+10 1.109e+11 -7.274e+10 1.127e+11 -7.830e+10 1.139e+11 -8.379e+10 1.145e+11 -8.917e+10 1.145e+11 -9.439e+10 1.139e+11 -9.942e+10 1.128e+11 -1.042e+11 1.110e+11 -1.087e+11 1.087e+11 -1.130e+11 1.058e+11 -1.169e+11 1.024e+11 -1.205e+11 9.855e+10 -1.237e+11 9.424e+10 -1.265e+11 8.953e+10 -1.290e+11 8.446e+10 -1.310e+11 7.906e+10 -1.327e+11 7.339e+10 -1.340e+11 6.748e+10 -1.349e+11 6.138e+10 -1.355e+11 5.513e+10 -1.357e+11 4.877e+10 0.005 -54.840 -53.810 -52.779 -51.749 -50.719 -49.689 -48.666 -47.747 -46.923 -46.186 -45.531 -44.951 -44.444 -44.005 -43.632 -43.323 -43.076 -42.891 -42.766 -42.701 -42.697 -42.753 -42.872 -43.055 -43.302 -43.618 -44.006 -44.468 -45.011 -45.640 -46.362 -47.186 -48.123 -49.187 -50.396 -51.772 -53.343 -55.150 -57.246 -59.707 -62.642 -66.209 -70.609 -75.731 -78.978 -77.506 -74.055 -69.978 -65.978 -62.414 -59.331 -56.667 -54.350 -52.319 -50.524 -48.930 -47.505 -46.229 -45.084 -44.054 -43.129 -42.300 -41.559 -40.900 -40.318 -39.809 -39.369 -38.996 -38.688 -38.444 -38.261 -38.140 -38.080 -38.082 -38.145 -38.271 -38.460 -38.715 -39.038 -39.431 -39.897 -40.440 -41.063 -41.772 -42.570 -43.461 -44.448 -45.533 -46.713 -47.978 -49.310 -50.670 -52.000 -53.218 -54.221 -54.893 -55.118 -54.800 -53.920 -52.572 -50.929 -49.162 -47.391 -45.686 -44.080 -42.586 -41.207 -39.938 -38.774 -37.710 -36.739 -35.856 -35.057 -34.337 -33.692 -33.120 -32.619 -32.187 -31.823 -31.525 -31.295 -31.133 -31.039 -31.017 -31.068 -31.194 -31.400 -31.691 -32.074 -32.558 -33.151 -33.869 -34.729 -35.752 -36.970 -38.421 -40.160 -42.249 -44.739 -47.510 -49.847 -50.601 -49.851 -48.880 -48.533 -49.200 -51.421 -55.394 -53.241 -46.841 -41.486 -37.500 -34.295 -31.591 -29.238 -27.149 -25.267 -23.552 -21.978 -20.522 -19.169 -17.907 -16.727 -15.618 -14.575 -13.591 -12.661 -11.782 -10.950 -10.162 -9.416 -8.708 -8.037 -7.401 -6.798 -6.228 -5.688 -5.177 -4.695 -4.240 -3.811 -3.409 -3.031 -2.678 -2.348 -2.042 -1.759 -1.498 -1.258 -1.041 -0.844 -0.669 -0.515 -0.381 -0.267 -0.174 -0.100 -0.047 -0.014 0.000 -0.006 -0.030 -0.074 -0.137 -0.221 -0.325 -0.449 -0.593 -0.758 -0.943 -1.150 -1.378 -1.628 -1.900 -2.194 -2.511 -2.852 -3.216 -3.605 -4.019 -4.458 -4.925 -5.419 -5.942 -6.494 -7.077 -7.692 -8.341 -9.025 -9.747 -10.508 -11.311 -12.158 -13.053 -14.000 -15.002 -16.065 -17.195 -18.399 -19.684 -21.065 -22.552 -24.164 -25.921 -27.853 -29.998 -32.411 -35.160 -38.313 -41.805 -44.967 -46.373 -45.777 -44.711 -44.022 -43.819 -44.038 -44.561 -45.173 -45.504 -45.159 -44.062 -42.520 -40.889 -39.365 -38.016 -36.849 -35.854 -35.012 -34.308 -33.727 -33.256 -32.888 -32.612 -32.424 -32.318 -32.290 -32.336 -32.456 -32.647 -32.909 -33.241 -33.644 -34.118 -34.665 -35.287 -35.987 -36.769 -37.637 -38.598 -39.656 -40.821 -42.102 -43.508 -45.052 -46.745 -48.597 -50.613 -52.781 -55.054 -57.316 -59.335 -60.758 -61.245 -60.703 -59.358 -57.572 -55.644 -53.752 -51.982 -50.368 -48.915 -47.616 -46.461 -45.440 -44.540 -43.754 -43.071 -42.484 -41.991 -41.582 -41.255 -41.005 -40.830 -40.729 -40.699 -40.740 -40.851 -41.034 -41.289 -41.617 -42.021 -42.504 -43.070 -43.724 -44.471 -45.318 -46.275 -47.351 -48.557 -49.906 -51.408 -53.065 -54.858 -56.721 -58.502 -59.964 -60.916 -61.402 -61.695 -62.109 -62.920 -64.423 -67.129 -72.171 -74.252 -67.062 -61.826 -58.207 -55.447 -53.215 -51.351 -49.760 -48.384 -47.184 -46.130 -45.203 -44.387 -43.669 -43.040 -42.493 -42.021 -41.619 -41.283 -41.011 -40.798 -40.643 -40.545 -40.501 -40.512 -40.575 -40.692 -40.862 -41.085 -41.361 -41.693 -42.081 -42.527 -43.033 -43.602 -44.236 -44.940 -45.719 -46.577 -47.522 -48.562 -49.609 -50.656 -51.703 -52.750 -53.796 0 1 1.0 4476553695.58 S5 HH 34.25 38.05 0.05 1.247e+10 -1.461e+09 1.242e+10 -1.122e+09 1.232e+10 -7.786e+08 1.216e+10 -4.345e+08 1.196e+10 -9.384e+07 1.170e+10 2.385e+08 1.140e+10 5.588e+08 1.105e+10 8.630e+08 1.066e+10 1.147e+09 1.023e+10 1.407e+09 9.767e+09 1.640e+09 9.265e+09 1.843e+09 8.732e+09 2.013e+09 8.173e+09 2.147e+09 7.591e+09 2.245e+09 6.992e+09 2.303e+09 6.378e+09 2.323e+09 5.758e+09 2.303e+09 5.136e+09 2.245e+09 4.517e+09 2.151e+09 3.909e+09 2.023e+09 3.319e+09 1.863e+09 2.752e+09 1.677e+09 2.217e+09 1.470e+09 1.721e+09 1.249e+09 1.273e+09 1.019e+09 8.797e+08 7.908e+08 5.502e+08 5.732e+08 2.921e+08 3.770e+08 1.124e+08 2.152e+08 9.813e+06 1.034e+08 -5.922e+07 4.746e+07 -1.813e+08 -8.643e+05 -4.108e+08 -1.065e+08 -7.628e+08 -3.075e+08 -1.243e+09 -6.239e+08 -1.858e+09 -1.072e+09 -2.612e+09 -1.669e+09 -3.509e+09 -2.430e+09 -4.553e+09 -3.369e+09 -5.746e+09 -4.501e+09 -7.089e+09 -5.838e+09 -8.580e+09 -7.390e+09 -1.022e+10 -9.168e+09 -1.200e+10 -1.118e+10 -1.392e+10 -1.343e+10 -1.598e+10 -1.592e+10 -1.815e+10 -1.865e+10 -2.044e+10 -2.162e+10 -2.283e+10 -2.481e+10 -2.532e+10 -2.823e+10 -2.787e+10 -3.185e+10 -3.049e+10 -3.565e+10 -3.314e+10 -3.963e+10 -3.582e+10 -4.375e+10 -3.850e+10 -4.798e+10 -4.116e+10 -5.229e+10 -4.379e+10 -5.665e+10 -4.635e+10 -6.103e+10 -4.884e+10 -6.539e+10 -5.122e+10 -6.968e+10 -5.349e+10 -7.387e+10 -5.561e+10 -7.792e+10 -5.757e+10 -8.178e+10 -5.935e+10 -8.542e+10 -6.093e+10 -8.880e+10 -6.230e+10 -9.187e+10 -6.344e+10 -9.461e+10 -6.434e+10 -9.698e+10 -6.498e+10 -9.895e+10 -6.537e+10 -1.005e+11 -6.550e+10 -1.016e+11 -6.537e+10 -1.023e+11 -6.497e+10 -1.025e+11 -6.431e+10 -1.023e+11 -6.339e+10 -1.016e+11 -6.222e+10 -1.004e+11 -6.082e+10 -9.878e+10 -5.918e+10 -9.674e+10 -5.734e+10 -9.430e+10 -5.530e+10 -9.147e+10 -5.308e+10 -8.830e+10 -5.071e+10 -8.480e+10 -4.820e+10 -8.103e+10 -4.558e+10 -7.700e+10 -4.287e+10 -7.278e+10 -4.010e+10 -6.839e+10 -3.728e+10 -6.389e+10 -3.445e+10 -5.931e+10 -3.162e+10 -5.470e+10 -2.883e+10 -5.010e+10 -2.609e+10 -4.556e+10 -2.342e+10 -4.110e+10 -2.084e+10 -3.677e+10 -1.838e+10 -3.260e+10 -1.604e+10 -2.862e+10 -1.384e+10 -2.485e+10 -1.180e+10 -2.133e+10 -9.914e+09 -1.807e+10 -8.198e+09 -1.508e+10 -6.655e+09 -1.238e+10 -5.285e+09 -9.962e+09 -4.089e+09 -7.837e+09 -3.064e+09 -5.998e+09 -2.204e+09 -4.436e+09 -1.503e+09 -3.142e+09 -9.508e+08 -2.102e+09 -5.376e+08 -1.299e+09 -2.511e+08 -7.127e+08 -7.758e+07 -3.221e+08 1.939e+06 -1.038e+08 4.155e+07 -1.113e+07 1.182e+08 6.917e+07 2.559e+08 2.192e+08 4.372e+08 4.393e+08 6.465e+08 7.080e+08 8.707e+08 1.004e+09 1.097e+09 1.307e+09 1.315e+09 1.599e+09 1.514e+09 1.866e+09 1.687e+09 2.094e+09 1.827e+09 2.274e+09 1.930e+09 2.399e+09 1.991e+09 2.465e+09 2.010e+09 2.472e+09 1.986e+09 2.420e+09 1.923e+09 2.313e+09 1.821e+09 2.157e+09 1.687e+09 1.961e+09 1.525e+09 1.733e+09 1.342e+09 1.483e+09 1.146e+09 1.224e+09 9.434e+08 9.646e+08 7.432e+08 7.180e+08 5.531e+08 4.943e+08 3.813e+08 3.034e+08 2.357e+08 1.542e+08 1.238e+08 5.283e+07 5.351e+07 -2.893e+06 1.954e+07 -4.482e+07 -1.386e+07 -1.255e+08 -8.529e+07 -2.703e+08 -2.066e+08 -4.792e+08 -3.801e+08 -7.493e+08 -6.054e+08 -1.076e+09 -8.799e+08 -1.452e+09 -1.200e+09 -1.871e+09 -1.562e+09 -2.324e+09 -1.959e+09 -2.801e+09 -2.385e+09 -3.292e+09 -2.831e+09 -3.785e+09 -3.289e+09 -4.270e+09 -3.751e+09 -4.735e+09 -4.208e+09 -5.171e+09 -4.650e+09 -5.566e+09 -5.070e+09 -5.913e+09 -5.459e+09 -6.204e+09 -5.808e+09 -6.432e+09 -6.113e+09 -6.592e+09 -6.366e+09 -6.681e+09 -6.564e+09 -6.698e+09 -6.702e+09 -6.644e+09 -6.779e+09 -6.519e+09 -6.794e+09 -6.329e+09 -6.747e+09 -6.077e+09 -6.640e+09 -5.771e+09 -6.477e+09 -5.418e+09 -6.261e+09 -5.027e+09 -5.998e+09 -4.607e+09 -5.695e+09 -4.168e+09 -5.357e+09 -3.718e+09 -4.992e+09 -3.268e+09 -4.607e+09 -2.827e+09 -4.212e+09 -2.402e+09 -3.811e+09 -2.000e+09 -3.414e+09 -1.628e+09 -3.026e+09 -1.289e+09 -2.653e+09 -9.879e+08 -2.301e+09 -7.255e+08 -1.974e+09 -5.021e+08 -1.673e+09 -3.170e+08 -1.402e+09 -1.681e+08 -1.161e+09 -5.251e+07 -9.502e+08 3.324e+07 -7.677e+08 9.297e+07 -6.118e+08 1.307e+08 -4.800e+08 1.501e+08 -3.698e+08 1.545e+08 -2.781e+08 1.467e+08 -2.027e+08 1.293e+08 -1.415e+08 1.049e+08 -9.297e+07 7.627e+07 -5.590e+07 4.692e+07 -2.945e+07 2.139e+07 -1.356e+07 4.018e+06 -8.486e+06 -1.026e+07 -1.016e+07 -4.178e+07 -1.333e+07 -1.110e+08 -1.964e+07 -2.319e+08 -3.410e+07 -4.185e+08 -6.329e+07 -6.866e+08 -1.150e+08 -1.052e+09 -1.982e+08 -1.532e+09 -3.229e+08 -2.143e+09 -4.998e+08 -2.902e+09 -7.402e+08 -3.823e+09 -1.056e+09 -4.921e+09 -1.458e+09 -6.207e+09 -1.958e+09 -7.690e+09 -2.567e+09 -9.379e+09 -3.293e+09 -1.127e+10 -4.145e+09 -1.337e+10 -5.128e+09 -1.568e+10 -6.247e+09 -1.817e+10 -7.501e+09 -2.084e+10 -8.890e+09 -2.367e+10 -1.041e+10 -2.663e+10 -1.205e+10 -2.970e+10 -1.380e+10 -3.284e+10 -1.565e+10 -3.602e+10 -1.758e+10 -3.920e+10 -1.957e+10 -4.234e+10 -2.159e+10 -4.540e+10 -2.362e+10 -4.832e+10 -2.564e+10 -5.105e+10 -2.761e+10 -5.357e+10 -2.949e+10 -5.580e+10 -3.127e+10 -5.773e+10 -3.291e+10 -5.930e+10 -3.438e+10 -6.048e+10 -3.565e+10 -6.125e+10 -3.670e+10 -6.159e+10 -3.750e+10 -6.148e+10 -3.804e+10 -6.091e+10 -3.830e+10 -5.988e+10 -3.826e+10 -5.841e+10 -3.794e+10 -5.652e+10 -3.731e+10 -5.423e+10 -3.640e+10 -5.157e+10 -3.522e+10 -4.859e+10 -3.377e+10 -4.534e+10 -3.209e+10 -4.186e+10 -3.020e+10 -3.823e+10 -2.814e+10 -3.449e+10 -2.593e+10 -3.072e+10 -2.363e+10 -2.696e+10 -2.126e+10 -2.329e+10 -1.887e+10 -1.977e+10 -1.650e+10 -1.644e+10 -1.419e+10 -1.335e+10 -1.199e+10 -1.054e+10 -9.917e+09 -8.048e+09 -8.014e+09 -5.890e+09 -6.305e+09 -4.079e+09 -4.809e+09 -2.614e+09 -3.545e+09 -1.485e+09 -2.519e+09 -6.641e+08 -1.734e+09 -1.069e+08 -1.181e+09 2.562e+08 -8.265e+08 5.236e+08 -5.994e+08 7.969e+08 -4.161e+08 1.133e+09 -2.179e+08 1.529e+09 1.389e+07 1.948e+09 2.697e+08 2.341e+09 5.267e+08 2.662e+09 7.579e+08 2.870e+09 9.366e+08 2.937e+09 1.041e+09 2.846e+09 1.057e+09 2.596e+09 9.804e+08 2.203e+09 8.189e+08 1.702e+09 5.945e+08 1.147e+09 3.457e+08 6.142e+08 1.281e+08 2.009e+08 1.688e+07 1.941e+07 -9.996e+07 -2.277e+08 -4.946e+08 -9.651e+08 -1.329e+09 -2.415e+09 -2.751e+09 -4.764e+09 -4.923e+09 -8.214e+09 -8.024e+09 -1.298e+10 -1.224e+10 -1.926e+10 -1.776e+10 -2.726e+10 -2.479e+10 -3.720e+10 -3.351e+10 -4.924e+10 -4.412e+10 -6.356e+10 -5.680e+10 -8.031e+10 -7.169e+10 -9.957e+10 -8.894e+10 -1.214e+11 -1.087e+11 -1.459e+11 -1.309e+11 -1.730e+11 -1.557e+11 -2.027e+11 -1.831e+11 -2.348e+11 -2.129e+11 -2.692e+11 -2.451e+11 -3.055e+11 -2.796e+11 -3.437e+11 -3.160e+11 -3.832e+11 -3.541e+11 -4.238e+11 -3.937e+11 -4.650e+11 -4.281e+11 -5.171e+11 -4.732e+11 -5.550e+11 -5.144e+11 -5.959e+11 -5.552e+11 -6.353e+11 -5.951e+11 -6.727e+11 -6.336e+11 -7.075e+11 -6.699e+11 -7.392e+11 -7.037e+11 -7.671e+11 -7.343e+11 -7.909e+11 -7.611e+11 -8.100e+11 -7.838e+11 -8.241e+11 -8.017e+11 -8.328e+11 -8.145e+11 -8.358e+11 -8.219e+11 -8.330e+11 -8.236e+11 -8.243e+11 -8.195e+11 -8.097e+11 -8.093e+11 -7.893e+11 -7.932e+11 -7.633e+11 -7.713e+11 -7.321e+11 -7.439e+11 -6.960e+11 -7.112e+11 -6.555e+11 -6.737e+11 -6.114e+11 -6.320e+11 -5.641e+11 -5.866e+11 -5.146e+11 -5.384e+11 -4.635e+11 -4.881e+11 -4.117e+11 -4.365e+11 -3.601e+11 -3.846e+11 -3.095e+11 -3.333e+11 -2.608e+11 -2.832e+11 -2.146e+11 -2.355e+11 -1.719e+11 -1.909e+11 -1.331e+11 -1.500e+11 -9.882e+10 -1.136e+11 -6.949e+10 -8.201e+10 -4.532e+10 -5.569e+10 -2.641e+10 -3.484e+10 -1.269e+10 -1.947e+10 -3.796e+09 -9.446e+09 1.049e+09 -4.056e+09 3.667e+09 -1.052e+09 6.995e+09 2.705e+09 1.278e+10 8.412e+09 2.046e+10 1.566e+10 2.897e+10 2.355e+10 3.724e+10 3.107e+10 4.429e+10 3.723e+10 4.924e+10 4.113e+10 5.137e+10 4.211e+10 5.023e+10 3.978e+10 4.568e+10 3.417e+10 3.800e+10 2.588e+10 2.798e+10 1.614e+10 1.702e+10 6.995e+09 7.208e+09 1.191e+09 1.188e+09 -3.630e+09 -3.618e+09 -1.887e+10 -1.849e+10 -5.391e+10 -5.199e+10 -1.171e+11 -1.113e+11 -2.185e+11 -2.048e+11 -3.699e+11 -3.421e+11 -5.853e+11 -5.347e+11 -8.808e+11 -7.951e+11 -1.274e+12 -1.137e+12 -1.786e+12 -1.577e+12 -2.441e+12 -2.133e+12 -3.261e+12 -2.821e+12 -4.277e+12 -3.664e+12 -5.519e+12 -4.683e+12 -7.019e+12 -5.901e+12 -8.812e+12 -7.343e+12 -1.094e+13 -9.035e+12 -1.343e+13 -1.100e+13 -1.634e+13 -1.328e+13 -1.971e+13 -1.588e+13 -2.358e+13 -1.885e+13 -2.800e+13 -2.221e+13 -3.302e+13 -2.599e+13 -3.869e+13 -3.022e+13 -4.505e+13 -3.493e+13 -5.217e+13 -4.016e+13 -6.009e+13 -4.593e+13 -6.887e+13 -5.228e+13 -7.855e+13 -5.923e+13 -8.917e+13 -6.679e+13 -1.008e+14 -7.499e+13 -1.134e+14 -8.384e+13 -1.272e+14 -9.337e+13 -1.420e+14 -1.036e+14 -1.580e+14 -1.145e+14 -1.751e+14 -1.261e+14 -1.934e+14 -1.384e+14 -2.130e+14 -1.514e+14 -2.337e+14 -1.651e+14 -2.557e+14 -1.794e+14 -2.789e+14 -1.944e+14 -3.032e+14 -2.101e+14 -3.288e+14 -2.263e+14 -3.554e+14 -2.431e+14 -3.832e+14 -2.604e+14 -4.121e+14 -2.783e+14 -4.419e+14 -2.965e+14 -4.727e+14 -3.151e+14 -5.044e+14 -3.341e+14 -5.368e+14 -3.533e+14 -5.699e+14 -3.727e+14 -6.037e+14 -3.923e+14 -6.379e+14 -4.118e+14 -6.725e+14 -4.314e+14 -7.073e+14 -4.509e+14 -7.423e+14 -4.701e+14 -7.773e+14 -4.891e+14 -8.121e+14 -5.078e+14 -8.466e+14 -5.261e+14 -8.807e+14 -5.438e+14 -9.143e+14 -5.610e+14 -9.472e+14 -5.775e+14 -9.791e+14 -5.932e+14 -1.010e+15 -6.082e+14 -1.040e+15 -6.222e+14 -1.068e+15 -6.353e+14 -1.096e+15 -6.471e+14 -1.121e+15 -6.578e+14 -1.145e+15 -6.673e+14 -1.167e+15 -6.756e+14 -1.188e+15 -6.828e+14 -1.206e+15 -6.886e+14 -1.222e+15 -6.932e+14 -1.236e+15 -6.965e+14 -1.248e+15 -6.984e+14 -1.257e+15 -6.990e+14 -1.264e+15 -6.983e+14 -1.269e+15 -6.963e+14 -1.271e+15 -6.930e+14 -1.271e+15 -6.883e+14 -1.269e+15 -6.824e+14 -1.264e+15 -6.752e+14 -1.256e+15 -6.669e+14 -1.247e+15 -6.574e+14 -1.235e+15 -6.468e+14 -1.221e+15 -6.351e+14 -1.204e+15 -6.224e+14 -1.186e+15 -6.088e+14 -1.165e+15 -5.943e+14 -1.143e+15 -5.791e+14 -1.119e+15 -5.631e+14 -1.093e+15 -5.465e+14 -1.066e+15 -5.293e+14 -1.037e+15 -5.116e+14 -1.007e+15 -4.935e+14 -9.757e+14 -4.750e+14 -9.436e+14 -4.563e+14 -9.106e+14 -4.375e+14 -8.770e+14 -4.185e+14 -8.427e+14 -3.995e+14 -8.081e+14 -3.805e+14 -7.732e+14 -3.617e+14 -7.381e+14 -3.431e+14 -7.030e+14 -3.246e+14 -6.682e+14 -3.065e+14 -6.336e+14 -2.888e+14 -5.995e+14 -2.715e+14 -5.660e+14 -2.548e+14 -5.331e+14 -2.384e+14 -5.008e+14 -2.226e+14 -4.693e+14 -2.073e+14 -4.386e+14 -1.926e+14 -4.089e+14 -1.785e+14 -3.802e+14 -1.650e+14 -3.525e+14 -1.521e+14 -3.259e+14 -1.398e+14 -3.004e+14 -1.282e+14 -2.761e+14 -1.172e+14 -2.531e+14 -1.068e+14 -2.312e+14 -9.703e+13 -2.105e+14 -8.789e+13 -1.911e+14 -7.937e+13 -1.728e+14 -7.143e+13 -1.558e+14 -6.407e+13 -1.399e+14 -5.727e+13 -1.251e+14 -5.101e+13 -1.115e+14 -4.526e+13 -9.897e+13 -4.000e+13 -8.747e+13 -3.521e+13 -7.696e+13 -3.086e+13 -6.741e+13 -2.693e+13 -5.876e+13 -2.339e+13 -5.095e+13 -2.022e+13 -4.395e+13 -1.740e+13 -3.771e+13 -1.489e+13 -3.215e+13 -1.267e+13 -2.725e+13 -1.071e+13 -2.294e+13 -9.006e+12 -1.918e+13 -7.521e+12 -1.591e+13 -6.237e+12 -1.310e+13 -5.134e+12 -1.068e+13 -4.192e+12 -8.636e+12 -3.393e+12 -6.911e+12 -2.722e+12 -5.469e+12 -2.161e+12 -4.275e+12 -1.697e+12 -3.299e+12 -1.317e+12 -2.509e+12 -1.009e+12 -1.876e+12 -7.616e+11 -1.377e+12 -5.655e+11 -9.901e+11 -4.122e+11 -6.946e+11 -2.941e+11 -4.740e+11 -2.048e+11 -3.128e+11 -1.386e+11 -1.985e+11 -9.072e+10 -1.200e+11 -5.701e+10 -6.833e+10 -3.406e+10 -3.599e+10 -1.909e+10 -1.710e+10 -9.837e+09 -7.023e+09 -4.510e+09 -2.310e+09 -1.738e+09 -5.201e+08 -5.023e+08 -5.053e+07 -8.032e+07 -7.202e+05 3.638e+06 -3.319e+07 3.849e+07 -2.685e+08 1.337e+08 -1.127e+09 2.822e+08 -3.254e+09 3.988e+08 -7.424e+09 3.378e+08 -1.447e+10 -8.176e+07 -2.519e+10 -1.052e+09 -4.030e+10 -2.764e+09 -6.046e+10 -5.392e+09 -8.608e+10 -9.077e+09 -1.175e+11 -1.393e+10 -1.548e+11 -2.004e+10 -1.978e+11 -2.740e+10 -2.463e+11 -3.602e+10 -3.000e+11 -4.586e+10 -3.580e+11 -5.680e+10 -4.196e+11 -6.870e+10 -4.840e+11 -8.143e+10 -5.500e+11 -9.477e+10 -6.167e+11 -1.085e+11 -6.830e+11 -1.225e+11 -7.477e+11 -1.364e+11 -8.098e+11 -1.500e+11 -8.683e+11 -1.633e+11 -9.221e+11 -1.758e+11 -9.703e+11 -1.874e+11 -1.012e+12 -1.979e+11 -1.047e+12 -2.072e+11 -1.074e+12 -2.152e+11 -1.094e+12 -2.216e+11 -1.105e+12 -2.265e+11 -1.108e+12 -2.298e+11 -1.103e+12 -2.315e+11 -1.090e+12 -2.316e+11 -1.070e+12 -2.301e+11 -1.042e+12 -2.271e+11 -1.008e+12 -2.227e+11 -9.678e+11 -2.170e+11 -9.227e+11 -2.100e+11 -8.732e+11 -2.021e+11 -8.203e+11 -1.932e+11 -7.647e+11 -1.835e+11 -7.073e+11 -1.733e+11 -6.491e+11 -1.625e+11 -5.906e+11 -1.515e+11 -5.328e+11 -1.402e+11 -4.763e+11 -1.290e+11 -4.217e+11 -1.178e+11 -3.696e+11 -1.068e+11 -3.204e+11 -9.611e+10 -2.746e+11 -8.580e+10 -2.323e+11 -7.597e+10 -1.939e+11 -6.667e+10 -1.594e+11 -5.794e+10 -1.288e+11 -4.984e+10 -1.021e+11 -4.240e+10 -7.918e+10 -3.562e+10 -5.986e+10 -2.951e+10 -4.392e+10 -2.409e+10 -3.108e+10 -1.933e+10 -2.103e+10 -1.523e+10 -1.344e+10 -1.176e+10 -7.945e+09 -8.923e+09 -4.171e+09 -6.688e+09 -1.720e+09 -5.048e+09 -1.566e+08 -3.969e+09 9.492e+08 -3.363e+09 1.924e+09 -3.065e+09 2.903e+09 -2.891e+09 3.854e+09 -2.710e+09 4.680e+09 -2.469e+09 5.284e+09 -2.157e+09 5.594e+09 -1.786e+09 5.572e+09 -1.379e+09 5.217e+09 -9.653e+08 4.565e+09 -5.732e+08 3.687e+09 -2.316e+08 2.684e+09 3.412e+07 1.682e+09 2.029e+08 8.304e+08 2.639e+08 2.662e+08 2.542e+08 -1.237e+08 3.572e+08 0.005 -53.323 -52.263 -51.204 -50.144 -49.085 -48.047 -47.118 -46.290 -45.552 -44.899 -44.326 -43.827 -43.399 -43.041 -42.748 -42.520 -42.356 -42.256 -42.218 -42.244 -42.334 -42.491 -42.714 -43.009 -43.376 -43.822 -44.350 -44.967 -45.681 -46.502 -47.442 -48.516 -49.745 -51.156 -52.786 -54.685 -56.932 -59.649 -63.056 -67.611 -74.664 -90.038 -80.049 -75.175 -72.553 -69.392 -65.583 -61.900 -58.660 -55.863 -53.439 -51.323 -49.459 -47.806 -46.332 -45.011 -43.825 -42.758 -41.798 -40.936 -40.162 -39.471 -38.858 -38.318 -37.847 -37.443 -37.104 -36.828 -36.613 -36.459 -36.366 -36.333 -36.362 -36.453 -36.608 -36.828 -37.116 -37.475 -37.909 -38.422 -39.019 -39.708 -40.494 -41.388 -42.401 -43.546 -44.839 -46.297 -47.939 -49.784 -51.847 -54.128 -56.611 -59.269 -62.141 -65.396 -68.115 -65.498 -60.388 -56.076 -52.573 -49.646 -47.143 -44.964 -43.043 -41.336 -39.808 -38.434 -37.196 -36.076 -35.064 -34.151 -33.327 -32.588 -31.928 -31.342 -30.828 -30.383 -30.006 -29.694 -29.448 -29.267 -29.152 -29.103 -29.122 -29.211 -29.374 -29.614 -29.935 -30.344 -30.848 -31.456 -32.181 -33.036 -34.042 -35.222 -36.611 -38.255 -40.220 -42.602 -45.553 -49.318 -54.280 -60.526 -64.910 -67.968 -65.333 -55.234 -48.339 -43.347 -39.405 -36.120 -33.296 -30.817 -28.606 -26.609 -24.790 -23.120 -21.578 -20.146 -18.812 -17.564 -16.394 -15.295 -14.259 -13.282 -12.360 -11.487 -10.662 -9.880 -9.140 -8.438 -7.774 -7.145 -6.549 -5.986 -5.453 -4.950 -4.475 -4.028 -3.608 -3.213 -2.844 -2.500 -2.179 -1.882 -1.608 -1.357 -1.128 -0.921 -0.735 -0.571 -0.427 -0.305 -0.203 -0.122 -0.061 -0.020 0.000 -0.000 -0.020 -0.060 -0.120 -0.201 -0.302 -0.424 -0.567 -0.731 -0.916 -1.122 -1.351 -1.602 -1.875 -2.171 -2.491 -2.835 -3.203 -3.597 -4.017 -4.463 -4.938 -5.440 -5.973 -6.536 -7.132 -7.762 -8.427 -9.129 -9.871 -10.655 -11.483 -12.360 -13.288 -14.271 -15.316 -16.427 -17.613 -18.881 -20.242 -21.710 -23.302 -25.041 -26.956 -29.093 -31.517 -34.331 -37.723 -42.087 -48.546 -65.075 -55.165 -49.598 -47.520 -46.830 -46.891 -47.210 -47.093 -45.952 -43.985 -41.806 -39.772 -37.986 -36.449 -35.133 -34.009 -33.051 -32.237 -31.550 -30.976 -30.505 -30.127 -29.835 -29.623 -29.487 -29.424 -29.429 -29.502 -29.640 -29.843 -30.110 -30.441 -30.838 -31.300 -31.831 -32.432 -33.106 -33.858 -34.692 -35.614 -36.630 -37.751 -38.987 -40.351 -41.861 -43.537 -45.408 -47.508 -49.883 -52.590 -55.698 -59.265 -63.235 -67.052 -69.000 -67.915 -65.024 -61.669 -58.485 -55.666 -53.224 -51.117 -49.295 -47.716 -46.342 -45.146 -44.104 -43.200 -42.417 -41.746 -41.175 -40.698 -40.308 -40.000 -39.772 -39.619 -39.539 -39.531 -39.595 -39.728 -39.933 -40.209 -40.558 -40.983 -41.486 -42.071 -42.744 -43.509 -44.375 -45.351 -46.447 -47.678 -49.060 -50.612 -52.355 -54.308 -56.478 -58.825 -61.205 -63.316 -64.848 -65.877 -66.911 -68.584 -71.525 -74.264 -69.783 -64.418 -60.406 -57.296 -54.775 -52.667 -50.867 -49.308 -47.946 -46.747 -45.688 -44.750 -43.921 -43.188 -42.543 -41.978 -41.488 -41.069 -40.715 -40.423 -40.192 -40.018 -39.901 -39.838 -39.828 -39.871 -39.967 -40.115 -40.316 -40.569 -40.877 -41.239 -41.657 -42.134 -42.671 -43.271 -43.937 -44.674 -45.486 -46.378 -47.357 -48.433 -49.526 -50.620 -51.713 -52.807 0 1 1.0 9205761128.73 S5 HV 34.25 38.05 0.05 9.355e+09 -1.303e+10 9.589e+09 -1.265e+10 9.779e+09 -1.221e+10 9.922e+09 -1.173e+10 1.002e+10 -1.121e+10 1.006e+10 -1.066e+10 1.004e+10 -1.007e+10 9.970e+09 -9.450e+09 9.840e+09 -8.813e+09 9.652e+09 -8.160e+09 9.406e+09 -7.498e+09 9.104e+09 -6.833e+09 8.747e+09 -6.171e+09 8.340e+09 -5.517e+09 7.885e+09 -4.880e+09 7.388e+09 -4.264e+09 6.853e+09 -3.674e+09 6.289e+09 -3.117e+09 5.702e+09 -2.597e+09 5.099e+09 -2.116e+09 4.489e+09 -1.681e+09 3.880e+09 -1.293e+09 3.282e+09 -9.537e+08 2.703e+09 -6.647e+08 2.155e+09 -4.261e+08 1.646e+09 -2.373e+08 1.188e+09 -9.686e+07 7.911e+08 -2.168e+06 4.669e+08 5.075e+07 2.266e+08 6.797e+07 7.771e+07 6.322e+07 -7.926e+06 7.186e+07 -1.227e+08 1.195e+08 -3.463e+08 1.967e+08 -7.122e+08 2.851e+08 -1.236e+09 3.722e+08 -1.929e+09 4.476e+08 -2.805e+09 5.011e+08 -3.876e+09 5.223e+08 -5.149e+09 5.007e+08 -6.637e+09 4.259e+08 -8.347e+09 2.877e+08 -1.028e+10 7.628e+07 -1.245e+10 -2.178e+08 -1.485e+10 -6.032e+08 -1.747e+10 -1.087e+09 -2.033e+10 -1.676e+09 -2.340e+10 -2.376e+09 -2.668e+10 -3.188e+09 -3.015e+10 -4.117e+09 -3.380e+10 -5.162e+09 -3.760e+10 -6.320e+09 -4.153e+10 -7.588e+09 -4.557e+10 -8.963e+09 -4.967e+10 -1.043e+10 -5.381e+10 -1.200e+10 -5.796e+10 -1.364e+10 -6.208e+10 -1.534e+10 -6.613e+10 -1.710e+10 -7.008e+10 -1.889e+10 -7.389e+10 -2.071e+10 -7.752e+10 -2.253e+10 -8.096e+10 -2.435e+10 -8.414e+10 -2.613e+10 -8.706e+10 -2.786e+10 -8.967e+10 -2.954e+10 -9.196e+10 -3.112e+10 -9.390e+10 -3.261e+10 -9.547e+10 -3.398e+10 -9.666e+10 -3.521e+10 -9.745e+10 -3.630e+10 -9.786e+10 -3.722e+10 -9.786e+10 -3.798e+10 -9.747e+10 -3.855e+10 -9.668e+10 -3.894e+10 -9.550e+10 -3.913e+10 -9.396e+10 -3.912e+10 -9.205e+10 -3.892e+10 -8.980e+10 -3.851e+10 -8.722e+10 -3.791e+10 -8.435e+10 -3.712e+10 -8.121e+10 -3.616e+10 -7.782e+10 -3.502e+10 -7.420e+10 -3.372e+10 -7.041e+10 -3.228e+10 -6.646e+10 -3.071e+10 -6.239e+10 -2.904e+10 -5.824e+10 -2.727e+10 -5.403e+10 -2.544e+10 -4.981e+10 -2.357e+10 -4.560e+10 -2.166e+10 -4.145e+10 -1.976e+10 -3.738e+10 -1.787e+10 -3.343e+10 -1.602e+10 -2.963e+10 -1.422e+10 -2.599e+10 -1.249e+10 -2.255e+10 -1.086e+10 -1.934e+10 -9.323e+09 -1.635e+10 -7.898e+09 -1.362e+10 -6.593e+09 -1.114e+10 -5.414e+09 -8.932e+09 -4.364e+09 -6.989e+09 -3.442e+09 -5.311e+09 -2.646e+09 -3.890e+09 -1.973e+09 -2.719e+09 -1.415e+09 -1.784e+09 -9.672e+08 -1.070e+09 -6.186e+08 -5.578e+08 -3.599e+08 -2.280e+08 -1.808e+08 -5.521e+07 -7.257e+07 2.232e+07 -3.054e+07 1.188e+08 -1.868e+07 2.960e+08 4.927e+06 5.430e+08 4.859e+07 8.384e+08 1.049e+08 1.162e+09 1.660e+08 1.497e+09 2.246e+08 1.825e+09 2.745e+08 2.134e+09 3.111e+08 2.410e+09 3.308e+08 2.647e+09 3.311e+08 2.835e+09 3.110e+08 2.972e+09 2.704e+08 3.055e+09 2.103e+08 3.084e+09 1.324e+08 3.061e+09 3.925e+07 2.990e+09 -6.595e+07 2.876e+09 -1.799e+08 2.725e+09 -2.992e+08 2.544e+09 -4.203e+08 2.342e+09 -5.404e+08 2.127e+09 -6.575e+08 1.906e+09 -7.706e+08 1.687e+09 -8.806e+08 1.476e+09 -9.899e+08 1.276e+09 -1.103e+09 1.089e+09 -1.227e+09 9.109e+08 -1.368e+09 7.368e+08 -1.535e+09 5.581e+08 -1.733e+09 3.655e+08 -1.965e+09 1.502e+08 -2.234e+09 -9.553e+07 -2.536e+09 -3.767e+08 -2.868e+09 -6.955e+08 -3.222e+09 -1.052e+09 -3.593e+09 -1.445e+09 -3.970e+09 -1.868e+09 -4.344e+09 -2.316e+09 -4.707e+09 -2.780e+09 -5.047e+09 -3.252e+09 -5.357e+09 -3.721e+09 -5.626e+09 -4.178e+09 -5.848e+09 -4.611e+09 -6.015e+09 -5.011e+09 -6.122e+09 -5.367e+09 -6.165e+09 -5.671e+09 -6.143e+09 -5.916e+09 -6.055e+09 -6.097e+09 -5.902e+09 -6.207e+09 -5.689e+09 -6.247e+09 -5.419e+09 -6.214e+09 -5.101e+09 -6.112e+09 -4.740e+09 -5.944e+09 -4.347e+09 -5.715e+09 -3.930e+09 -5.433e+09 -3.499e+09 -5.105e+09 -3.064e+09 -4.741e+09 -2.634e+09 -4.351e+09 -2.218e+09 -3.945e+09 -1.824e+09 -3.532e+09 -1.457e+09 -3.122e+09 -1.124e+09 -2.725e+09 -8.274e+08 -2.347e+09 -5.700e+08 -1.996e+09 -3.524e+08 -1.675e+09 -1.733e+08 -1.388e+09 -3.041e+07 -1.138e+09 7.965e+07 -9.234e+08 1.615e+08 -7.433e+08 2.202e+08 -5.948e+08 2.606e+08 -4.737e+08 2.873e+08 -3.754e+08 3.036e+08 -2.954e+08 3.118e+08 -2.297e+08 3.123e+08 -1.753e+08 3.048e+08 -1.303e+08 2.885e+08 -9.376e+07 2.626e+08 -6.516e+07 2.274e+08 -4.415e+07 1.840e+08 -2.992e+07 1.355e+08 -2.108e+07 8.658e+07 -1.555e+07 4.367e+07 -1.220e+07 1.398e+07 -1.687e+07 -6.383e+06 -3.954e+07 -4.419e+07 -8.602e+07 -1.296e+08 -1.635e+08 -2.812e+08 -2.823e+08 -5.156e+08 -4.543e+08 -8.507e+08 -6.926e+08 -1.305e+09 -1.011e+09 -1.895e+09 -1.424e+09 -2.641e+09 -1.946e+09 -3.557e+09 -2.591e+09 -4.660e+09 -3.373e+09 -5.963e+09 -4.306e+09 -7.476e+09 -5.398e+09 -9.203e+09 -6.661e+09 -1.115e+10 -8.099e+09 -1.332e+10 -9.715e+09 -1.569e+10 -1.151e+10 -1.826e+10 -1.348e+10 -2.102e+10 -1.561e+10 -2.393e+10 -1.789e+10 -2.697e+10 -2.030e+10 -3.011e+10 -2.281e+10 -3.330e+10 -2.541e+10 -3.650e+10 -2.805e+10 -3.968e+10 -3.070e+10 -4.278e+10 -3.332e+10 -4.576e+10 -3.588e+10 -4.856e+10 -3.831e+10 -5.114e+10 -4.060e+10 -5.345e+10 -4.268e+10 -5.544e+10 -4.452e+10 -5.707e+10 -4.608e+10 -5.832e+10 -4.733e+10 -5.915e+10 -4.823e+10 -5.955e+10 -4.878e+10 -5.950e+10 -4.894e+10 -5.900e+10 -4.871e+10 -5.805e+10 -4.810e+10 -5.667e+10 -4.710e+10 -5.487e+10 -4.574e+10 -5.269e+10 -4.402e+10 -5.015e+10 -4.199e+10 -4.731e+10 -3.968e+10 -4.420e+10 -3.712e+10 -4.088e+10 -3.437e+10 -3.741e+10 -3.147e+10 -3.383e+10 -2.847e+10 -3.022e+10 -2.542e+10 -2.661e+10 -2.238e+10 -2.308e+10 -1.939e+10 -1.967e+10 -1.650e+10 -1.643e+10 -1.376e+10 -1.342e+10 -1.121e+10 -1.066e+10 -8.878e+09 -8.184e+09 -6.796e+09 -6.029e+09 -4.983e+09 -4.203e+09 -3.457e+09 -2.718e+09 -2.223e+09 -1.573e+09 -1.281e+09 -7.571e+08 -6.240e+08 -2.490e+08 -2.414e+08 -1.522e+06 -7.832e+07 1.400e+08 5.756e+07 3.902e+08 3.039e+08 8.037e+08 6.722e+08 1.337e+09 1.126e+09 1.934e+09 1.621e+09 2.539e+09 2.110e+09 3.100e+09 2.550e+09 3.568e+09 2.898e+09 3.900e+09 3.120e+09 4.063e+09 3.190e+09 4.036e+09 3.093e+09 3.812e+09 2.828e+09 3.400e+09 2.412e+09 2.828e+09 1.880e+09 2.145e+09 1.285e+09 1.420e+09 7.072e+08 7.466e+08 2.471e+08 2.381e+08 2.991e+07 2.154e+07 -2.039e+08 -2.803e+08 -9.427e+08 -1.161e+09 -2.439e+09 -2.863e+09 -4.904e+09 -5.587e+09 -8.563e+09 -9.541e+09 -1.366e+10 -1.494e+10 -2.043e+10 -2.199e+10 -2.912e+10 -3.090e+10 -3.997e+10 -4.186e+10 -5.321e+10 -5.503e+10 -6.903e+10 -7.056e+10 -8.764e+10 -8.859e+10 -1.092e+11 -1.092e+11 -1.337e+11 -1.324e+11 -1.614e+11 -1.582e+11 -1.921e+11 -1.865e+11 -2.259e+11 -2.174e+11 -2.627e+11 -2.506e+11 -3.023e+11 -2.859e+11 -3.445e+11 -3.231e+11 -3.890e+11 -3.620e+11 -4.355e+11 -4.020e+11 -4.835e+11 -4.430e+11 -5.326e+11 -4.844e+11 -5.817e+11 -5.300e+11 -6.313e+11 -5.740e+11 -6.806e+11 -6.146e+11 -7.285e+11 -6.535e+11 -7.747e+11 -6.903e+11 -8.185e+11 -7.244e+11 -8.591e+11 -7.553e+11 -8.960e+11 -7.824e+11 -9.286e+11 -8.053e+11 -9.562e+11 -8.235e+11 -9.783e+11 -8.365e+11 -9.945e+11 -8.440e+11 -1.004e+12 -8.458e+11 -1.007e+12 -8.417e+11 -1.004e+12 -8.315e+11 -9.928e+11 -8.153e+11 -9.749e+11 -7.931e+11 -9.500e+11 -7.652e+11 -9.185e+11 -7.320e+11 -8.805e+11 -6.937e+11 -8.366e+11 -6.510e+11 -7.875e+11 -6.046e+11 -7.337e+11 -5.551e+11 -6.761e+11 -5.033e+11 -6.158e+11 -4.501e+11 -5.535e+11 -3.964e+11 -4.903e+11 -3.432e+11 -4.274e+11 -2.913e+11 -3.659e+11 -2.417e+11 -3.067e+11 -1.952e+11 -2.509e+11 -1.526e+11 -1.994e+11 -1.145e+11 -1.530e+11 -8.145e+10 -1.124e+11 -5.390e+10 -7.809e+10 -3.198e+10 -5.039e+10 -1.572e+10 -2.946e+10 -4.841e+09 -1.517e+10 1.372e+09 -6.895e+09 4.645e+09 -2.454e+09 8.087e+09 1.971e+09 1.428e+10 8.688e+09 2.313e+10 1.764e+10 3.345e+10 2.790e+10 4.402e+10 3.829e+10 5.369e+10 4.756e+10 6.138e+10 5.457e+10 6.619e+10 5.833e+10 6.741e+10 5.816e+10 6.463e+10 5.375e+10 5.783e+10 4.533e+10 4.745e+10 3.379e+10 3.454e+10 2.079e+10 2.080e+10 8.905e+09 8.736e+09 1.501e+09 1.431e+09 -4.484e+09 -4.300e+09 -2.315e+10 -2.188e+10 -6.561e+10 -6.123e+10 -1.414e+11 -1.305e+11 -2.620e+11 -2.392e+11 -4.405e+11 -3.984e+11 -6.924e+11 -6.207e+11 -1.036e+12 -9.206e+11 -1.490e+12 -1.314e+12 -2.077e+12 -1.819e+12 -2.823e+12 -2.455e+12 -3.755e+12 -3.243e+12 -4.903e+12 -4.208e+12 -6.300e+12 -5.374e+12 -7.980e+12 -6.766e+12 -9.983e+12 -8.416e+12 -1.235e+13 -1.035e+13 -1.511e+13 -1.260e+13 -1.833e+13 -1.521e+13 -2.205e+13 -1.820e+13 -2.630e+13 -2.160e+13 -3.115e+13 -2.546e+13 -3.664e+13 -2.980e+13 -4.282e+13 -3.467e+13 -4.975e+13 -4.009e+13 -5.748e+13 -4.611e+13 -6.606e+13 -5.276e+13 -7.554e+13 -6.009e+13 -8.596e+13 -6.810e+13 -9.737e+13 -7.683e+13 -1.098e+14 -8.631e+13 -1.233e+14 -9.656e+13 -1.380e+14 -1.076e+14 -1.537e+14 -1.194e+14 -1.706e+14 -1.321e+14 -1.887e+14 -1.456e+14 -2.080e+14 -1.599e+14 -2.286e+14 -1.750e+14 -2.503e+14 -1.910e+14 -2.732e+14 -2.078e+14 -2.973e+14 -2.253e+14 -3.225e+14 -2.437e+14 -3.489e+14 -2.627e+14 -3.764e+14 -2.825e+14 -4.049e+14 -3.030e+14 -4.344e+14 -3.241e+14 -4.649e+14 -3.458e+14 -4.961e+14 -3.680e+14 -5.282e+14 -3.907e+14 -5.610e+14 -4.137e+14 -5.944e+14 -4.371e+14 -6.283e+14 -4.608e+14 -6.625e+14 -4.846e+14 -6.971e+14 -5.085e+14 -7.318e+14 -5.325e+14 -7.665e+14 -5.563e+14 -8.012e+14 -5.800e+14 -8.356e+14 -6.034e+14 -8.696e+14 -6.264e+14 -9.031e+14 -6.489e+14 -9.360e+14 -6.709e+14 -9.681e+14 -6.922e+14 -9.993e+14 -7.128e+14 -1.029e+15 -7.325e+14 -1.058e+15 -7.512e+14 -1.086e+15 -7.688e+14 -1.112e+15 -7.852e+14 -1.136e+15 -8.002e+14 -1.159e+15 -8.139e+14 -1.180e+15 -8.263e+14 -1.199e+15 -8.372e+14 -1.216e+15 -8.467e+14 -1.231e+15 -8.546e+14 -1.243e+15 -8.610e+14 -1.254e+15 -8.658e+14 -1.262e+15 -8.689e+14 -1.267e+15 -8.705e+14 -1.270e+15 -8.704e+14 -1.271e+15 -8.687e+14 -1.269e+15 -8.653e+14 -1.265e+15 -8.604e+14 -1.259e+15 -8.539e+14 -1.250e+15 -8.459e+14 -1.239e+15 -8.363e+14 -1.225e+15 -8.254e+14 -1.209e+15 -8.130e+14 -1.192e+15 -7.994e+14 -1.172e+15 -7.845e+14 -1.150e+15 -7.684e+14 -1.127e+15 -7.513e+14 -1.102e+15 -7.331e+14 -1.075e+15 -7.140e+14 -1.047e+15 -6.940e+14 -1.017e+15 -6.734e+14 -9.868e+14 -6.520e+14 -9.552e+14 -6.301e+14 -9.228e+14 -6.077e+14 -8.896e+14 -5.850e+14 -8.559e+14 -5.619e+14 -8.217e+14 -5.387e+14 -7.872e+14 -5.153e+14 -7.525e+14 -4.920e+14 -7.178e+14 -4.686e+14 -6.832e+14 -4.455e+14 -6.488e+14 -4.225e+14 -6.148e+14 -3.999e+14 -5.814e+14 -3.776e+14 -5.485e+14 -3.559e+14 -5.162e+14 -3.345e+14 -4.847e+14 -3.137e+14 -4.539e+14 -2.935e+14 -4.240e+14 -2.739e+14 -3.950e+14 -2.549e+14 -3.671e+14 -2.367e+14 -3.401e+14 -2.192e+14 -3.143e+14 -2.024e+14 -2.896e+14 -1.863e+14 -2.660e+14 -1.711e+14 -2.436e+14 -1.566e+14 -2.225e+14 -1.430e+14 -2.024e+14 -1.301e+14 -1.836e+14 -1.180e+14 -1.660e+14 -1.067e+14 -1.495e+14 -9.614e+13 -1.342e+14 -8.633e+13 -1.199e+14 -7.724e+13 -1.068e+14 -6.886e+13 -9.472e+13 -6.115e+13 -8.365e+13 -5.409e+13 -7.354e+13 -4.765e+13 -6.436e+13 -4.179e+13 -5.606e+13 -3.650e+13 -4.858e+13 -3.172e+13 -4.187e+13 -2.743e+13 -3.590e+13 -2.361e+13 -3.059e+13 -2.020e+13 -2.591e+13 -1.719e+13 -2.180e+13 -1.454e+13 -1.821e+13 -1.222e+13 -1.511e+13 -1.020e+13 -1.243e+13 -8.456e+12 -1.014e+13 -6.953e+12 -8.195e+12 -5.669e+12 -6.558e+12 -4.580e+12 -5.191e+12 -3.665e+12 -4.060e+12 -2.900e+12 -3.134e+12 -2.269e+12 -2.384e+12 -1.752e+12 -1.784e+12 -1.334e+12 -1.312e+12 -9.989e+11 -9.440e+11 -7.345e+11 -6.633e+11 -5.290e+11 -4.535e+11 -3.720e+11 -3.000e+11 -2.545e+11 -1.909e+11 -1.684e+11 -1.158e+11 -1.071e+11 -6.624e+10 -6.492e+10 -3.508e+10 -3.699e+10 -1.677e+10 -1.946e+10 -6.935e+09 -9.171e+09 -2.291e+09 -3.674e+09 -5.070e+08 -1.125e+09 -3.905e+07 -1.967e+08 -7.023e+05 1.132e+07 -5.168e+07 9.887e+07 -3.412e+08 2.702e+08 -1.232e+09 4.646e+08 -3.306e+09 5.318e+08 -7.289e+09 1.978e+08 -1.397e+10 -8.923e+08 -2.408e+10 -3.123e+09 -3.833e+10 -6.880e+09 -5.730e+10 -1.253e+10 -8.139e+10 -2.035e+10 -1.109e+11 -3.060e+10 -1.458e+11 -4.344e+10 -1.861e+11 -5.891e+10 -2.315e+11 -7.701e+10 -2.815e+11 -9.766e+10 -3.355e+11 -1.207e+11 -3.926e+11 -1.457e+11 -4.521e+11 -1.726e+11 -5.129e+11 -2.008e+11 -5.741e+11 -2.300e+11 -6.346e+11 -2.597e+11 -6.934e+11 -2.895e+11 -7.495e+11 -3.190e+11 -8.021e+11 -3.477e+11 -8.501e+11 -3.751e+11 -8.928e+11 -4.008e+11 -9.296e+11 -4.244e+11 -9.599e+11 -4.456e+11 -9.832e+11 -4.641e+11 -9.993e+11 -4.797e+11 -1.008e+12 -4.921e+11 -1.010e+12 -5.012e+11 -1.004e+12 -5.070e+11 -9.911e+11 -5.093e+11 -9.718e+11 -5.083e+11 -9.462e+11 -5.039e+11 -9.150e+11 -4.965e+11 -8.787e+11 -4.860e+11 -8.380e+11 -4.727e+11 -7.936e+11 -4.569e+11 -7.462e+11 -4.388e+11 -6.965e+11 -4.187e+11 -6.453e+11 -3.969e+11 -5.933e+11 -3.739e+11 -5.411e+11 -3.497e+11 -4.894e+11 -3.249e+11 -4.389e+11 -2.998e+11 -3.899e+11 -2.746e+11 -3.430e+11 -2.496e+11 -2.986e+11 -2.251e+11 -2.571e+11 -2.014e+11 -2.186e+11 -1.786e+11 -1.835e+11 -1.570e+11 -1.518e+11 -1.368e+11 -1.235e+11 -1.179e+11 -9.868e+10 -1.006e+11 -7.720e+10 -8.495e+10 -5.892e+10 -7.087e+10 -4.368e+10 -5.843e+10 -3.124e+10 -4.757e+10 -2.131e+10 -3.824e+10 -1.361e+10 -3.039e+10 -7.817e+09 -2.391e+10 -3.593e+09 -1.868e+10 -6.032e+08 -1.457e+10 1.483e+09 -1.144e+10 2.960e+09 -9.097e+09 4.059e+09 -7.349e+09 4.921e+09 -6.012e+09 5.607e+09 -4.916e+09 6.105e+09 -3.961e+09 6.374e+09 -3.091e+09 6.376e+09 -2.289e+09 6.090e+09 -1.564e+09 5.522e+09 -9.324e+08 4.709e+09 -4.129e+08 3.721e+09 -2.276e+07 2.654e+09 2.292e+08 1.627e+09 3.437e+08 7.778e+08 3.368e+08 2.277e+08 2.725e+08 -1.614e+08 3.241e+08 0.005 -52.570 -51.527 -50.483 -49.439 -48.395 -47.372 -46.453 -45.630 -44.895 -44.241 -43.664 -43.158 -42.722 -42.351 -42.044 -41.799 -41.615 -41.492 -41.428 -41.425 -41.483 -41.602 -41.785 -42.034 -42.351 -42.740 -43.204 -43.750 -44.384 -45.114 -45.951 -46.908 -48.003 -49.259 -50.708 -52.396 -54.392 -56.809 -59.851 -63.962 -70.468 -85.183 -74.467 -69.067 -66.951 -66.306 -66.630 -67.454 -67.380 -65.020 -61.598 -58.383 -55.626 -53.279 -51.264 -49.515 -47.985 -46.637 -45.445 -44.388 -43.451 -42.622 -41.891 -41.250 -40.694 -40.217 -39.817 -39.489 -39.232 -39.044 -38.925 -38.874 -38.892 -38.980 -39.138 -39.369 -39.676 -40.063 -40.534 -41.093 -41.749 -42.508 -43.380 -44.377 -45.510 -46.796 -48.248 -49.880 -51.693 -53.665 -55.724 -57.738 -59.568 -61.231 -63.037 -65.455 -67.676 -64.844 -59.694 -55.430 -52.012 -49.185 -46.781 -44.696 -42.864 -41.238 -39.784 -38.478 -37.301 -36.238 -35.280 -34.416 -33.639 -32.944 -32.325 -31.780 -31.306 -30.900 -30.560 -30.287 -30.079 -29.938 -29.863 -29.856 -29.919 -30.055 -30.267 -30.561 -30.941 -31.416 -31.993 -32.684 -33.504 -34.471 -35.609 -36.950 -38.537 -40.429 -42.713 -45.507 -48.946 -52.987 -56.504 -57.832 -58.832 -62.768 -61.476 -52.291 -45.999 -41.426 -37.789 -34.736 -32.095 -29.763 -27.672 -25.776 -24.042 -22.445 -20.966 -19.590 -18.305 -17.101 -15.969 -14.905 -13.901 -12.952 -12.055 -11.207 -10.403 -9.641 -8.919 -8.235 -7.587 -6.972 -6.390 -5.839 -5.318 -4.826 -4.362 -3.924 -3.513 -3.127 -2.766 -2.429 -2.116 -1.825 -1.558 -1.312 -1.089 -0.886 -0.705 -0.546 -0.407 -0.288 -0.190 -0.112 -0.055 -0.017 0.000 -0.003 -0.026 -0.068 -0.130 -0.213 -0.316 -0.439 -0.583 -0.749 -0.935 -1.143 -1.372 -1.623 -1.897 -2.194 -2.514 -2.858 -3.227 -3.620 -4.040 -4.486 -4.960 -5.462 -5.994 -6.556 -7.151 -7.779 -8.443 -9.144 -9.884 -10.665 -11.492 -12.366 -13.291 -14.272 -15.313 -16.421 -17.602 -18.866 -20.223 -21.686 -23.272 -25.005 -26.915 -29.045 -31.462 -34.269 -37.655 -42.014 -48.470 -65.001 -55.104 -49.570 -47.572 -47.060 -47.519 -48.667 -49.819 -49.439 -47.050 -44.154 -41.582 -39.438 -37.660 -36.179 -34.936 -33.891 -33.012 -32.275 -31.664 -31.164 -30.764 -30.456 -30.234 -30.091 -30.025 -30.031 -30.107 -30.252 -30.465 -30.745 -31.092 -31.507 -31.992 -32.549 -33.179 -33.886 -34.675 -35.549 -36.516 -37.581 -38.752 -40.040 -41.455 -43.008 -44.710 -46.571 -48.597 -50.783 -53.106 -55.526 -57.986 -60.383 -62.288 -62.423 -60.258 -57.250 -54.372 -51.837 -49.635 -47.720 -46.046 -44.576 -43.281 -42.137 -41.126 -40.234 -39.449 -38.760 -38.161 -37.644 -37.203 -36.834 -36.534 -36.300 -36.129 -36.020 -35.970 -35.979 -36.047 -36.172 -36.355 -36.597 -36.898 -37.260 -37.685 -38.174 -38.731 -39.359 -40.063 -40.848 -41.720 -42.689 -43.763 -44.956 -46.283 -47.765 -49.430 -51.314 -53.469 -55.971 -58.936 -62.556 -67.165 -73.297 -79.560 -79.199 -78.971 -80.238 -75.892 -69.528 -64.775 -61.158 -58.275 -55.901 -53.901 -52.191 -50.714 -49.428 -48.305 -47.321 -46.461 -45.710 -45.057 -44.495 -44.015 -43.614 -43.285 -43.025 -42.832 -42.702 -42.634 -42.626 -42.678 -42.789 -42.958 -43.187 -43.475 -43.824 -44.236 -44.712 -45.254 -45.867 -46.553 -47.318 -48.168 -49.109 -50.151 -51.212 -52.273 -53.334 -54.395 0 1 1.0 9205761128.73 S5 VV 34.25 38.05 0.05 -3.287e+09 -9.816e+09 -2.870e+09 -9.520e+09 -2.458e+09 -9.182e+09 -2.056e+09 -8.805e+09 -1.668e+09 -8.391e+09 -1.299e+09 -7.943e+09 -9.535e+08 -7.466e+09 -6.346e+08 -6.961e+09 -3.463e+08 -6.436e+09 -9.080e+07 -5.894e+09 1.297e+08 -5.340e+09 3.133e+08 -4.781e+09 4.594e+08 -4.223e+09 5.679e+08 -3.672e+09 6.393e+08 -3.135e+09 6.743e+08 -2.619e+09 6.763e+08 -2.131e+09 6.484e+08 -1.678e+09 5.950e+08 -1.267e+09 5.211e+08 -9.040e+08 4.332e+08 -5.963e+08 3.390e+08 -3.489e+08 2.480e+08 -1.653e+08 1.739e+08 -4.295e+07 1.309e+08 4.173e+07 1.156e+08 1.420e+08 9.940e+07 3.075e+08 5.207e+07 5.629e+08 -4.829e+07 9.181e+08 -2.182e+08 1.378e+09 -4.725e+08 1.946e+09 -8.258e+08 2.627e+09 -1.292e+09 3.422e+09 -1.885e+09 4.334e+09 -2.620e+09 5.366e+09 -3.510e+09 6.517e+09 -4.566e+09 7.787e+09 -5.802e+09 9.177e+09 -7.227e+09 1.068e+10 -8.850e+09 1.230e+10 -1.068e+10 1.403e+10 -1.272e+10 1.587e+10 -1.496e+10 1.779e+10 -1.742e+10 1.981e+10 -2.009e+10 2.190e+10 -2.295e+10 2.405e+10 -2.599e+10 2.625e+10 -2.921e+10 2.848e+10 -3.259e+10 3.072e+10 -3.609e+10 3.295e+10 -3.971e+10 3.516e+10 -4.340e+10 3.732e+10 -4.715e+10 3.942e+10 -5.093e+10 4.142e+10 -5.469e+10 4.330e+10 -5.840e+10 4.506e+10 -6.205e+10 4.666e+10 -6.559e+10 4.808e+10 -6.898e+10 4.932e+10 -7.221e+10 5.036e+10 -7.523e+10 5.119e+10 -7.804e+10 5.179e+10 -8.060e+10 5.218e+10 -8.289e+10 5.233e+10 -8.488e+10 5.225e+10 -8.657e+10 5.195e+10 -8.793e+10 5.143e+10 -8.895e+10 5.070e+10 -8.963e+10 4.977e+10 -8.995e+10 4.865e+10 -8.993e+10 4.737e+10 -8.955e+10 4.593e+10 -8.882e+10 4.435e+10 -8.775e+10 4.266e+10 -8.634e+10 4.087e+10 -8.461e+10 3.900e+10 -8.256e+10 3.707e+10 -8.021e+10 3.509e+10 -7.759e+10 3.308e+10 -7.470e+10 3.106e+10 -7.156e+10 2.904e+10 -6.822e+10 2.704e+10 -6.468e+10 2.506e+10 -6.097e+10 2.311e+10 -5.714e+10 2.121e+10 -5.321e+10 1.936e+10 -4.921e+10 1.758e+10 -4.518e+10 1.586e+10 -4.115e+10 1.421e+10 -3.716e+10 1.264e+10 -3.324e+10 1.114e+10 -2.943e+10 9.737e+09 -2.577e+10 8.417e+09 -2.228e+10 7.187e+09 -1.899e+10 6.050e+09 -1.593e+10 5.007e+09 -1.312e+10 4.063e+09 -1.058e+10 3.218e+09 -8.312e+09 2.472e+09 -6.333e+09 1.827e+09 -4.644e+09 1.283e+09 -3.239e+09 8.384e+08 -2.112e+09 4.907e+08 -1.251e+09 2.370e+08 -6.369e+08 7.208e+07 -2.510e+08 -1.196e+07 -6.248e+07 -4.138e+07 3.816e+07 -9.270e+07 1.960e+08 -2.130e+08 4.633e+08 -3.936e+08 8.216e+08 -6.188e+08 1.244e+09 -8.769e+08 1.704e+09 -1.157e+09 2.177e+09 -1.450e+09 2.641e+09 -1.746e+09 3.077e+09 -2.035e+09 3.469e+09 -2.309e+09 3.803e+09 -2.563e+09 4.070e+09 -2.789e+09 4.264e+09 -2.984e+09 4.380e+09 -3.144e+09 4.419e+09 -3.267e+09 4.383e+09 -3.352e+09 4.276e+09 -3.400e+09 4.105e+09 -3.411e+09 3.876e+09 -3.388e+09 3.600e+09 -3.334e+09 3.286e+09 -3.253e+09 2.944e+09 -3.147e+09 2.585e+09 -3.023e+09 2.218e+09 -2.884e+09 1.854e+09 -2.737e+09 1.499e+09 -2.586e+09 1.160e+09 -2.438e+09 8.405e+08 -2.300e+09 5.420e+08 -2.177e+09 2.619e+08 -2.075e+09 -6.331e+06 -2.001e+09 -2.720e+08 -1.955e+09 -5.463e+08 -1.940e+09 -8.415e+08 -1.952e+09 -1.168e+09 -1.988e+09 -1.534e+09 -2.040e+09 -1.942e+09 -2.102e+09 -2.395e+09 -2.166e+09 -2.887e+09 -2.224e+09 -3.414e+09 -2.273e+09 -3.968e+09 -2.305e+09 -4.537e+09 -2.317e+09 -5.111e+09 -2.307e+09 -5.676e+09 -2.270e+09 -6.218e+09 -2.207e+09 -6.726e+09 -2.117e+09 -7.185e+09 -2.000e+09 -7.583e+09 -1.858e+09 -7.910e+09 -1.693e+09 -8.157e+09 -1.509e+09 -8.316e+09 -1.309e+09 -8.384e+09 -1.098e+09 -8.358e+09 -8.805e+08 -8.240e+09 -6.617e+08 -8.031e+09 -4.464e+08 -7.739e+09 -2.395e+08 -7.372e+09 -4.573e+07 -6.940e+09 1.313e+08 -6.454e+09 2.884e+08 -5.929e+09 4.229e+08 -5.377e+09 5.335e+08 -4.812e+09 6.194e+08 -4.248e+09 6.808e+08 -3.697e+09 7.188e+08 -3.169e+09 7.351e+08 -2.674e+09 7.320e+08 -2.220e+09 7.123e+08 -1.811e+09 6.792e+08 -1.452e+09 6.360e+08 -1.142e+09 5.858e+08 -8.815e+08 5.319e+08 -6.674e+08 4.772e+08 -4.955e+08 4.240e+08 -3.609e+08 3.742e+08 -2.580e+08 3.291e+08 -1.810e+08 2.889e+08 -1.248e+08 2.534e+08 -8.504e+07 2.218e+08 -5.826e+07 1.928e+08 -4.195e+07 1.654e+08 -3.417e+07 1.393e+08 -3.329e+07 1.145e+08 -3.815e+07 9.219e+07 -4.891e+07 7.380e+07 -6.890e+07 6.019e+07 -1.059e+08 4.956e+07 -1.712e+08 3.667e+07 -2.781e+08 1.437e+07 -4.412e+08 -2.458e+07 -6.764e+08 -8.703e+07 -1.002e+09 -1.798e+08 -1.437e+09 -3.096e+08 -2.003e+09 -4.831e+08 -2.720e+09 -7.074e+08 -3.613e+09 -9.892e+08 -4.702e+09 -1.334e+09 -6.011e+09 -1.749e+09 -7.558e+09 -2.239e+09 -9.363e+09 -2.806e+09 -1.144e+10 -3.454e+09 -1.381e+10 -4.183e+09 -1.646e+10 -4.992e+09 -1.941e+10 -5.878e+09 -2.266e+10 -6.835e+09 -2.618e+10 -7.856e+09 -2.996e+10 -8.931e+09 -3.399e+10 -1.005e+10 -3.821e+10 -1.119e+10 -4.260e+10 -1.234e+10 -4.710e+10 -1.349e+10 -5.165e+10 -1.461e+10 -5.621e+10 -1.570e+10 -6.068e+10 -1.671e+10 -6.502e+10 -1.766e+10 -6.914e+10 -1.851e+10 -7.298e+10 -1.925e+10 -7.645e+10 -1.987e+10 -7.950e+10 -2.036e+10 -8.207e+10 -2.070e+10 -8.409e+10 -2.089e+10 -8.552e+10 -2.093e+10 -8.633e+10 -2.082e+10 -8.650e+10 -2.055e+10 -8.601e+10 -2.015e+10 -8.486e+10 -1.960e+10 -8.308e+10 -1.893e+10 -8.070e+10 -1.814e+10 -7.774e+10 -1.724e+10 -7.426e+10 -1.626e+10 -7.032e+10 -1.520e+10 -6.599e+10 -1.409e+10 -6.134e+10 -1.293e+10 -5.645e+10 -1.174e+10 -5.140e+10 -1.054e+10 -4.627e+10 -9.345e+09 -4.115e+10 -8.171e+09 -3.610e+10 -7.033e+09 -3.121e+10 -5.945e+09 -2.654e+10 -4.920e+09 -2.215e+10 -3.970e+09 -1.810e+10 -3.107e+09 -1.441e+10 -2.338e+09 -1.114e+10 -1.671e+09 -8.296e+09 -1.111e+09 -5.893e+09 -6.600e+08 -3.935e+09 -3.177e+08 -2.410e+09 -8.062e+07 -1.297e+09 5.868e+07 -5.667e+08 1.124e+08 -1.726e+08 1.093e+08 7.327e+06 1.323e+08 2.077e+08 2.411e+08 5.409e+08 4.086e+08 9.839e+08 5.969e+08 1.477e+09 7.817e+08 1.959e+09 9.433e+08 2.372e+09 1.065e+09 2.665e+09 1.134e+09 2.800e+09 1.141e+09 2.753e+09 1.083e+09 2.519e+09 9.615e+08 2.115e+09 7.871e+08 1.582e+09 5.770e+08 9.936e+08 3.575e+08 4.517e+08 1.626e+08 9.143e+07 3.444e+07 -7.205e+07 -1.848e+07 -6.310e+08 -1.856e+08 -1.972e+09 -5.839e+08 -4.372e+09 -1.284e+09 -8.125e+09 -2.356e+09 -1.355e+10 -3.869e+09 -2.098e+10 -5.890e+09 -3.075e+10 -8.485e+09 -4.322e+10 -1.172e+10 -5.870e+10 -1.564e+10 -7.751e+10 -2.029e+10 -9.998e+10 -2.571e+10 -1.263e+11 -3.192e+10 -1.568e+11 -3.894e+10 -1.915e+11 -4.678e+10 -2.305e+11 -5.540e+10 -2.739e+11 -6.480e+10 -3.217e+11 -7.495e+10 -3.737e+11 -8.578e+10 -4.297e+11 -9.725e+10 -4.894e+11 -1.093e+11 -5.524e+11 -1.218e+11 -6.183e+11 -1.347e+11 -6.867e+11 -1.478e+11 -7.568e+11 -1.612e+11 -8.280e+11 -1.745e+11 -8.997e+11 -1.878e+11 -9.719e+11 -1.926e+11 -1.044e+12 -2.193e+11 -1.112e+12 -2.317e+11 -1.177e+12 -2.434e+11 -1.239e+12 -2.542e+11 -1.295e+12 -2.639e+11 -1.346e+12 -2.723e+11 -1.391e+12 -2.793e+11 -1.429e+12 -2.846e+11 -1.459e+12 -2.881e+11 -1.480e+12 -2.898e+11 -1.492e+12 -2.894e+11 -1.495e+12 -2.868e+11 -1.488e+12 -2.822e+11 -1.471e+12 -2.753e+11 -1.444e+12 -2.664e+11 -1.408e+12 -2.553e+11 -1.362e+12 -2.423e+11 -1.306e+12 -2.275e+11 -1.243e+12 -2.112e+11 -1.171e+12 -1.935e+11 -1.093e+12 -1.748e+11 -1.010e+12 -1.555e+11 -9.224e+11 -1.357e+11 -8.320e+11 -1.161e+11 -7.401e+11 -9.679e+10 -6.484e+11 -7.827e+10 -5.584e+11 -6.091e+10 -4.716e+11 -4.499e+10 -3.893e+11 -3.080e+10 -3.130e+11 -1.859e+10 -2.438e+11 -8.514e+09 -1.827e+11 -6.596e+08 -1.303e+11 4.942e+09 -8.719e+10 8.374e+09 -5.343e+10 9.814e+09 -2.889e+10 9.591e+09 -1.291e+10 8.332e+09 -3.945e+09 7.286e+09 1.541e+09 8.153e+09 8.089e+09 1.135e+10 1.753e+10 1.565e+10 2.908e+10 1.999e+10 4.125e+10 2.371e+10 5.240e+10 2.635e+10 6.099e+10 2.757e+10 6.574e+10 2.716e+10 6.575e+10 2.505e+10 6.063e+10 2.137e+10 5.069e+10 1.644e+10 3.707e+10 1.083e+10 2.195e+10 5.427e+09 8.650e+09 1.410e+09 6.393e+08 -7.355e+08 -7.883e+09 -4.576e+09 -3.474e+10 -1.611e+10 -9.232e+10 -3.826e+10 -1.926e+11 -7.458e+10 -3.499e+11 -1.294e+11 -5.812e+11 -2.076e+11 -9.055e+11 -3.148e+11 -1.345e+12 -4.575e+11 -1.926e+12 -6.431e+11 -2.675e+12 -8.794e+11 -3.626e+12 -1.176e+12 -4.811e+12 -1.541e+12 -6.269e+12 -1.987e+12 -8.042e+12 -2.526e+12 -1.018e+13 -3.168e+12 -1.272e+13 -3.928e+12 -1.572e+13 -4.819e+12 -1.923e+13 -5.856e+12 -2.331e+13 -7.054e+12 -2.803e+13 -8.429e+12 -3.344e+13 -9.997e+12 -3.960e+13 -1.177e+13 -4.658e+13 -1.378e+13 -5.446e+13 -1.602e+13 -6.328e+13 -1.852e+13 -7.313e+13 -2.129e+13 -8.407e+13 -2.436e+13 -9.615e+13 -2.774e+13 -1.095e+14 -3.145e+13 -1.240e+14 -3.550e+13 -1.399e+14 -3.989e+13 -1.572e+14 -4.464e+13 -1.759e+14 -4.977e+13 -1.960e+14 -5.527e+13 -2.176e+14 -6.116e+13 -2.408e+14 -6.744e+13 -2.654e+14 -7.412e+13 -2.916e+14 -8.120e+13 -3.193e+14 -8.868e+13 -3.485e+14 -9.655e+13 -3.793e+14 -1.048e+14 -4.115e+14 -1.135e+14 -4.451e+14 -1.225e+14 -4.801e+14 -1.320e+14 -5.165e+14 -1.417e+14 -5.541e+14 -1.519e+14 -5.928e+14 -1.623e+14 -6.327e+14 -1.731e+14 -6.735e+14 -1.842e+14 -7.152e+14 -1.955e+14 -7.577e+14 -2.071e+14 -8.008e+14 -2.189e+14 -8.445e+14 -2.309e+14 -8.885e+14 -2.430e+14 -9.327e+14 -2.552e+14 -9.771e+14 -2.675e+14 -1.021e+15 -2.798e+14 -1.065e+15 -2.921e+14 -1.109e+15 -3.043e+14 -1.152e+15 -3.164e+14 -1.194e+15 -3.284e+14 -1.236e+15 -3.401e+14 -1.276e+15 -3.515e+14 -1.315e+15 -3.627e+14 -1.353e+15 -3.734e+14 -1.389e+15 -3.837e+14 -1.423e+15 -3.935e+14 -1.455e+15 -4.025e+14 -1.485e+15 -4.109e+14 -1.513e+15 -4.186e+14 -1.538e+15 -4.257e+14 -1.561e+15 -4.320e+14 -1.581e+15 -4.376e+14 -1.598e+15 -4.425e+14 -1.613e+15 -4.466e+14 -1.624e+15 -4.498e+14 -1.633e+15 -4.523e+14 -1.638e+15 -4.539e+14 -1.641e+15 -4.548e+14 -1.640e+15 -4.547e+14 -1.636e+15 -4.539e+14 -1.629e+15 -4.523e+14 -1.619e+15 -4.498e+14 -1.606e+15 -4.466e+14 -1.590e+15 -4.426e+14 -1.571e+15 -4.379e+14 -1.549e+15 -4.325e+14 -1.525e+15 -4.263e+14 -1.498e+15 -4.196e+14 -1.469e+15 -4.122e+14 -1.438e+15 -4.042e+14 -1.404e+15 -3.957e+14 -1.369e+15 -3.867e+14 -1.332e+15 -3.772e+14 -1.294e+15 -3.673e+14 -1.254e+15 -3.570e+14 -1.213e+15 -3.463e+14 -1.171e+15 -3.353e+14 -1.128e+15 -3.241e+14 -1.085e+15 -3.126e+14 -1.041e+15 -3.010e+14 -9.966e+14 -2.892e+14 -9.524e+14 -2.773e+14 -9.082e+14 -2.654e+14 -8.642e+14 -2.534e+14 -8.206e+14 -2.414e+14 -7.774e+14 -2.295e+14 -7.350e+14 -2.178e+14 -6.934e+14 -2.061e+14 -6.526e+14 -1.946e+14 -6.127e+14 -1.834e+14 -5.739e+14 -1.723e+14 -5.361e+14 -1.616e+14 -4.996e+14 -1.511e+14 -4.644e+14 -1.409e+14 -4.305e+14 -1.311e+14 -3.979e+14 -1.216e+14 -3.668e+14 -1.125e+14 -3.371e+14 -1.038e+14 -3.089e+14 -9.549e+13 -2.822e+14 -8.759e+13 -2.570e+14 -8.011e+13 -2.332e+14 -7.304e+13 -2.110e+14 -6.640e+13 -1.902e+14 -6.016e+13 -1.708e+14 -5.433e+13 -1.528e+14 -4.891e+13 -1.362e+14 -4.387e+13 -1.209e+14 -3.921e+13 -1.069e+14 -3.492e+13 -9.413e+13 -3.098e+13 -8.249e+13 -2.738e+13 -7.195e+13 -2.410e+13 -6.245e+13 -2.112e+13 -5.393e+13 -1.843e+13 -4.632e+13 -1.601e+13 -3.956e+13 -1.383e+13 -3.359e+13 -1.189e+13 -2.834e+13 -1.017e+13 -2.375e+13 -8.649e+12 -1.976e+13 -7.308e+12 -1.632e+13 -6.136e+12 -1.337e+13 -5.115e+12 -1.086e+13 -4.232e+12 -8.732e+12 -3.473e+12 -6.952e+12 -2.825e+12 -5.473e+12 -2.276e+12 -4.256e+12 -1.814e+12 -3.265e+12 -1.430e+12 -2.467e+12 -1.112e+12 -1.833e+12 -8.529e+11 -1.336e+12 -6.437e+11 -9.523e+11 -4.770e+11 -6.623e+11 -3.463e+11 -4.473e+11 -2.455e+11 -2.917e+11 -1.692e+11 -1.825e+11 -1.129e+11 -1.084e+11 -7.240e+10 -6.037e+10 -4.420e+10 -3.089e+10 -2.538e+10 -1.408e+10 -1.344e+10 -5.417e+09 -6.370e+09 -1.579e+09 -2.573e+09 -2.491e+08 -8.024e+08 2.569e+07 -1.488e+08 1.501e+07 1.702e+07 -6.825e+07 1.482e+08 -5.247e+08 4.705e+08 -1.899e+09 9.994e+08 -4.934e+09 1.667e+09 -1.049e+10 2.321e+09 -1.944e+10 2.751e+09 -3.262e+10 2.718e+09 -5.077e+10 1.967e+09 -7.443e+10 2.611e+08 -1.040e+11 -2.619e+09 -1.398e+11 -6.862e+09 -1.816e+11 -1.260e+10 -2.292e+11 -1.992e+10 -2.824e+11 -2.889e+10 -3.403e+11 -3.949e+10 -4.023e+11 -5.166e+10 -4.673e+11 -6.531e+10 -5.342e+11 -8.028e+10 -6.020e+11 -9.641e+10 -6.697e+11 -1.135e+11 -7.358e+11 -1.313e+11 -7.995e+11 -1.498e+11 -8.598e+11 -1.685e+11 -9.153e+11 -1.873e+11 -9.654e+11 -2.057e+11 -1.009e+12 -2.237e+11 -1.046e+12 -2.409e+11 -1.076e+12 -2.571e+11 -1.097e+12 -2.720e+11 -1.111e+12 -2.855e+11 -1.117e+12 -2.974e+11 -1.115e+12 -3.074e+11 -1.105e+12 -3.156e+11 -1.087e+12 -3.217e+11 -1.063e+12 -3.257e+11 -1.032e+12 -3.275e+11 -9.955e+11 -3.272e+11 -9.537e+11 -3.248e+11 -9.075e+11 -3.203e+11 -8.575e+11 -3.137e+11 -8.047e+11 -3.054e+11 -7.496e+11 -2.952e+11 -6.932e+11 -2.836e+11 -6.361e+11 -2.705e+11 -5.791e+11 -2.562e+11 -5.228e+11 -2.410e+11 -4.678e+11 -2.251e+11 -4.147e+11 -2.087e+11 -3.641e+11 -1.919e+11 -3.162e+11 -1.751e+11 -2.714e+11 -1.585e+11 -2.302e+11 -1.422e+11 -1.925e+11 -1.264e+11 -1.585e+11 -1.113e+11 -1.284e+11 -9.705e+10 -1.020e+11 -8.374e+10 -7.931e+10 -7.146e+10 -6.010e+10 -6.031e+10 -4.416e+10 -5.031e+10 -3.122e+10 -4.149e+10 -2.101e+10 -3.386e+10 -1.315e+10 -2.739e+10 -7.268e+09 -2.204e+10 -2.984e+09 -1.775e+10 1.041e+08 -1.441e+10 2.369e+09 -1.188e+10 4.115e+09 -9.979e+09 5.548e+09 -8.517e+09 6.771e+09 -7.298e+09 7.785e+09 -6.196e+09 8.543e+09 -5.134e+09 8.989e+09 -4.081e+09 9.075e+09 -3.045e+09 8.784e+09 -2.050e+09 8.129e+09 -1.128e+09 7.159e+09 -3.197e+08 5.952e+09 3.420e+08 4.614e+09 8.321e+08 3.276e+09 1.141e+09 2.070e+09 1.291e+09 1.095e+09 1.368e+09 0.005 -52.404 -51.320 -50.236 -49.152 -48.068 -47.004 -46.047 -45.186 -44.414 -43.722 -43.107 -42.564 -42.088 -41.678 -41.329 -41.042 -40.813 -40.642 -40.529 -40.473 -40.474 -40.533 -40.651 -40.828 -41.067 -41.369 -41.739 -42.178 -42.692 -43.284 -43.963 -44.735 -45.610 -46.600 -47.719 -48.988 -50.432 -52.084 -53.992 -56.223 -58.876 -62.102 -66.105 -70.871 -74.260 -73.723 -72.643 -72.319 -71.420 -68.455 -64.574 -60.998 -57.951 -55.365 -53.150 -51.230 -49.552 -48.074 -46.767 -45.608 -44.578 -43.665 -42.856 -42.144 -41.521 -40.982 -40.522 -40.138 -39.828 -39.588 -39.419 -39.318 -39.287 -39.326 -39.436 -39.618 -39.874 -40.209 -40.624 -41.126 -41.719 -42.410 -43.207 -44.118 -45.155 -46.326 -47.643 -49.108 -50.711 -52.411 -54.107 -55.614 -56.709 -57.258 -57.302 -56.946 -56.207 -55.035 -53.437 -51.547 -49.546 -47.568 -45.686 -43.933 -42.316 -40.831 -39.473 -38.230 -37.095 -36.059 -35.116 -34.259 -33.484 -32.784 -32.158 -31.601 -31.113 -30.690 -30.332 -30.037 -29.806 -29.639 -29.537 -29.500 -29.531 -29.632 -29.806 -30.058 -30.393 -30.817 -31.339 -31.968 -32.718 -33.606 -34.652 -35.887 -37.348 -39.090 -41.188 -43.747 -46.880 -50.503 -53.414 -53.780 -53.028 -53.128 -55.127 -58.999 -53.627 -46.625 -41.640 -37.786 -34.616 -31.910 -29.541 -27.429 -25.522 -23.784 -22.186 -20.709 -19.337 -18.057 -16.859 -15.735 -14.677 -13.680 -12.739 -11.849 -11.008 -10.212 -9.457 -8.743 -8.066 -7.424 -6.817 -6.242 -5.698 -5.183 -4.698 -4.240 -3.810 -3.405 -3.025 -2.671 -2.340 -2.033 -1.749 -1.487 -1.248 -1.030 -0.834 -0.659 -0.505 -0.372 -0.259 -0.167 -0.095 -0.043 -0.012 0.000 -0.008 -0.036 -0.084 -0.152 -0.240 -0.349 -0.478 -0.628 -0.799 -0.991 -1.204 -1.439 -1.696 -1.975 -2.278 -2.603 -2.953 -3.327 -3.726 -4.151 -4.603 -5.082 -5.589 -6.126 -6.694 -7.293 -7.926 -8.594 -9.299 -10.043 -10.828 -11.657 -12.534 -13.460 -14.441 -15.481 -16.586 -17.762 -19.018 -20.361 -21.805 -23.364 -25.057 -26.908 -28.951 -31.232 -33.816 -36.805 -40.356 -44.703 -49.899 -53.437 -52.257 -50.829 -50.528 -51.134 -51.894 -51.217 -48.599 -45.518 -42.795 -40.524 -38.639 -37.064 -35.739 -34.621 -33.677 -32.882 -32.216 -31.666 -31.220 -30.869 -30.606 -30.424 -30.320 -30.290 -30.331 -30.442 -30.620 -30.867 -31.180 -31.561 -32.011 -32.531 -33.123 -33.791 -34.537 -35.365 -36.281 -37.289 -38.397 -39.610 -40.937 -42.384 -43.954 -45.648 -47.455 -49.342 -51.247 -53.063 -54.637 -55.791 -56.346 -56.157 -55.224 -53.743 -51.986 -50.169 -48.418 -46.788 -45.297 -43.947 -42.730 -41.638 -40.660 -39.787 -39.011 -38.324 -37.720 -37.195 -36.741 -36.357 -36.038 -35.783 -35.588 -35.453 -35.375 -35.353 -35.386 -35.475 -35.619 -35.818 -36.073 -36.385 -36.755 -37.184 -37.675 -38.231 -38.854 -39.549 -40.320 -41.174 -42.116 -43.157 -44.306 -45.577 -46.987 -48.557 -50.316 -52.301 -54.565 -57.184 -60.271 -64.004 -68.701 -74.950 -83.539 -91.411 -85.695 -76.879 -70.572 -65.941 -62.351 -59.457 -57.060 -55.036 -53.305 -51.810 -50.512 -49.379 -48.391 -47.529 -46.780 -46.132 -45.578 -45.110 -44.722 -44.409 -44.169 -43.998 -43.893 -43.853 -43.876 -43.963 -44.112 -44.324 -44.600 -44.940 -45.347 -45.822 -46.369 -46.992 -47.695 -48.483 -49.364 -50.348 -51.444 -52.562 -53.680 -54.798 -55.917 0 1 1.0 9205761128.73 S5 VH 34.25 38.05 0.05 3.945e+09 -7.079e+09 4.012e+09 -6.705e+09 4.053e+09 -6.309e+09 4.066e+09 -5.895e+09 4.051e+09 -5.467e+09 4.006e+09 -5.030e+09 3.932e+09 -4.588e+09 3.828e+09 -4.145e+09 3.695e+09 -3.707e+09 3.533e+09 -3.276e+09 3.343e+09 -2.857e+09 3.129e+09 -2.454e+09 2.891e+09 -2.071e+09 2.633e+09 -1.710e+09 2.359e+09 -1.376e+09 2.073e+09 -1.072e+09 1.780e+09 -7.995e+08 1.486e+09 -5.619e+08 1.199e+09 -3.607e+08 9.246e+08 -1.970e+08 6.727e+08 -7.187e+07 4.522e+08 1.528e+07 2.727e+08 6.761e+07 1.426e+08 9.459e+07 5.648e+07 1.205e+08 -2.427e+07 1.783e+08 -1.543e+08 2.822e+08 -3.733e+08 4.296e+08 -7.060e+08 6.146e+08 -1.170e+09 8.312e+08 -1.781e+09 1.074e+09 -2.557e+09 1.339e+09 -3.509e+09 1.620e+09 -4.654e+09 1.911e+09 -6.005e+09 2.206e+09 -7.574e+09 2.499e+09 -9.371e+09 2.782e+09 -1.141e+10 3.050e+09 -1.369e+10 3.294e+09 -1.622e+10 3.509e+09 -1.900e+10 3.686e+09 -2.203e+10 3.820e+09 -2.531e+10 3.904e+09 -2.882e+10 3.931e+09 -3.257e+10 3.897e+09 -3.653e+10 3.795e+09 -4.068e+10 3.622e+09 -4.501e+10 3.373e+09 -4.949e+10 3.047e+09 -5.408e+10 2.639e+09 -5.877e+10 2.150e+09 -6.351e+10 1.579e+09 -6.827e+10 9.271e+08 -7.302e+10 1.948e+08 -7.770e+10 -6.136e+08 -8.228e+10 -1.495e+09 -8.673e+10 -2.445e+09 -9.099e+10 -3.455e+09 -9.504e+10 -4.520e+09 -9.883e+10 -5.633e+09 -1.023e+11 -6.782e+09 -1.055e+11 -7.960e+09 -1.083e+11 -9.157e+09 -1.108e+11 -1.036e+10 -1.128e+11 -1.155e+10 -1.145e+11 -1.272e+10 -1.156e+11 -1.386e+10 -1.164e+11 -1.496e+10 -1.166e+11 -1.599e+10 -1.165e+11 -1.696e+10 -1.158e+11 -1.784e+10 -1.147e+11 -1.862e+10 -1.132e+11 -1.930e+10 -1.112e+11 -1.986e+10 -1.088e+11 -2.031e+10 -1.061e+11 -2.062e+10 -1.029e+11 -2.080e+10 -9.947e+10 -2.084e+10 -9.568e+10 -2.075e+10 -9.161e+10 -2.052e+10 -8.728e+10 -2.015e+10 -8.274e+10 -1.966e+10 -7.803e+10 -1.905e+10 -7.317e+10 -1.832e+10 -6.821e+10 -1.749e+10 -6.319e+10 -1.658e+10 -5.814e+10 -1.559e+10 -5.312e+10 -1.453e+10 -4.816e+10 -1.343e+10 -4.329e+10 -1.230e+10 -3.856e+10 -1.116e+10 -3.400e+10 -1.001e+10 -2.964e+10 -8.887e+09 -2.553e+10 -7.791e+09 -2.167e+10 -6.741e+09 -1.811e+10 -5.745e+09 -1.485e+10 -4.816e+09 -1.192e+10 -3.962e+09 -9.312e+09 -3.189e+09 -7.048e+09 -2.501e+09 -5.124e+09 -1.902e+09 -3.531e+09 -1.391e+09 -2.262e+09 -9.668e+08 -1.302e+09 -6.267e+08 -6.290e+08 -3.661e+08 -2.198e+08 -1.820e+08 -2.815e+07 -8.031e+07 9.869e+07 -5.705e+07 3.250e+08 -5.442e+07 6.919e+08 -2.637e+07 1.171e+09 3.072e+07 1.731e+09 1.102e+08 2.337e+09 2.045e+08 2.962e+09 3.065e+08 3.577e+09 4.095e+08 4.156e+09 5.077e+08 4.679e+09 5.963e+08 5.127e+09 6.715e+08 5.487e+09 7.304e+08 5.749e+09 7.711e+08 5.907e+09 7.927e+08 5.959e+09 7.951e+08 5.906e+09 7.788e+08 5.754e+09 7.454e+08 5.509e+09 6.966e+08 5.183e+09 6.350e+08 4.788e+09 5.631e+08 4.339e+09 4.841e+08 3.849e+09 4.010e+08 3.336e+09 3.170e+08 2.815e+09 2.355e+08 2.301e+09 1.593e+08 1.811e+09 9.127e+07 1.358e+09 3.410e+07 9.557e+08 -1.013e+07 6.149e+08 -3.968e+07 3.460e+08 -5.361e+07 1.560e+08 -5.277e+07 4.598e+07 -4.534e+07 -1.751e+07 -5.504e+07 -1.083e+08 -9.956e+07 -2.781e+08 -1.708e+08 -5.345e+08 -2.598e+08 -8.745e+08 -3.627e+08 -1.292e+09 -4.765e+08 -1.779e+09 -5.979e+08 -2.325e+09 -7.239e+08 -2.920e+09 -8.507e+08 -3.551e+09 -9.748e+08 -4.205e+09 -1.093e+09 -4.868e+09 -1.201e+09 -5.525e+09 -1.295e+09 -6.163e+09 -1.374e+09 -6.767e+09 -1.434e+09 -7.325e+09 -1.472e+09 -7.824e+09 -1.489e+09 -8.254e+09 -1.482e+09 -8.604e+09 -1.451e+09 -8.870e+09 -1.398e+09 -9.044e+09 -1.323e+09 -9.124e+09 -1.228e+09 -9.110e+09 -1.116e+09 -9.003e+09 -9.900e+08 -8.807e+09 -8.529e+08 -8.529e+09 -7.085e+08 -8.175e+09 -5.607e+08 -7.755e+09 -4.134e+08 -7.281e+09 -2.700e+08 -6.764e+09 -1.342e+08 -6.216e+09 -8.987e+06 -5.649e+09 1.032e+08 -5.075e+09 2.004e+08 -4.506e+09 2.811e+08 -3.953e+09 3.448e+08 -3.424e+09 3.911e+08 -2.927e+09 4.208e+08 -2.469e+09 4.347e+08 -2.053e+09 4.345e+08 -1.683e+09 4.220e+08 -1.359e+09 3.993e+08 -1.081e+09 3.687e+08 -8.464e+08 3.326e+08 -6.529e+08 2.930e+08 -4.964e+08 2.517e+08 -3.726e+08 2.107e+08 -2.769e+08 1.710e+08 -2.047e+08 1.338e+08 -1.519e+08 1.001e+08 -1.149e+08 7.030e+07 -9.094e+07 4.500e+07 -7.870e+07 2.388e+07 -7.868e+07 4.709e+06 -9.327e+07 -1.758e+07 -1.263e+08 -5.035e+07 -1.833e+08 -1.016e+08 -2.718e+08 -1.789e+08 -4.014e+08 -2.895e+08 -5.840e+08 -4.413e+08 -8.335e+08 -6.420e+08 -1.165e+09 -8.995e+08 -1.595e+09 -1.222e+09 -2.142e+09 -1.618e+09 -2.823e+09 -2.095e+09 -3.658e+09 -2.659e+09 -4.665e+09 -3.317e+09 -5.860e+09 -4.074e+09 -7.261e+09 -4.933e+09 -8.881e+09 -5.897e+09 -1.073e+10 -6.964e+09 -1.282e+10 -8.134e+09 -1.515e+10 -9.402e+09 -1.773e+10 -1.076e+10 -2.054e+10 -1.220e+10 -2.358e+10 -1.371e+10 -2.683e+10 -1.527e+10 -3.027e+10 -1.687e+10 -3.387e+10 -1.848e+10 -3.759e+10 -2.010e+10 -4.140e+10 -2.169e+10 -4.526e+10 -2.323e+10 -4.910e+10 -2.470e+10 -5.290e+10 -2.609e+10 -5.657e+10 -2.735e+10 -6.008e+10 -2.847e+10 -6.335e+10 -2.943e+10 -6.635e+10 -3.021e+10 -6.899e+10 -3.079e+10 -7.125e+10 -3.116e+10 -7.308e+10 -3.130e+10 -7.443e+10 -3.122e+10 -7.527e+10 -3.091e+10 -7.559e+10 -3.037e+10 -7.536e+10 -2.961e+10 -7.459e+10 -2.864e+10 -7.328e+10 -2.748e+10 -7.145e+10 -2.613e+10 -6.913e+10 -2.463e+10 -6.634e+10 -2.299e+10 -6.314e+10 -2.124e+10 -5.956e+10 -1.942e+10 -5.569e+10 -1.754e+10 -5.157e+10 -1.564e+10 -4.727e+10 -1.375e+10 -4.287e+10 -1.189e+10 -3.843e+10 -1.010e+10 -3.401e+10 -8.395e+09 -2.970e+10 -6.803e+09 -2.555e+10 -5.343e+09 -2.161e+10 -4.030e+09 -1.794e+10 -2.876e+09 -1.458e+10 -1.891e+09 -1.156e+10 -1.075e+09 -8.913e+09 -4.297e+08 -6.644e+09 5.343e+07 -4.756e+09 3.865e+08 -3.245e+09 5.869e+08 -2.090e+09 6.796e+08 -1.258e+09 6.986e+08 -6.977e+08 6.884e+08 -3.331e+08 6.993e+08 -6.636e+07 7.655e+08 1.825e+08 8.834e+08 4.459e+08 1.022e+09 7.142e+08 1.146e+09 9.563e+08 1.228e+09 1.137e+09 1.247e+09 1.228e+09 1.195e+09 1.208e+09 1.071e+09 1.075e+09 8.838e+08 8.439e+08 6.520e+08 5.511e+08 4.054e+08 2.583e+08 1.840e+08 5.306e+07 3.820e+07 -4.522e+07 -2.426e+07 -3.993e+08 -2.277e+08 -1.270e+09 -7.127e+08 -2.863e+09 -1.570e+09 -5.407e+09 -2.891e+09 -9.155e+09 -4.773e+09 -1.437e+10 -7.309e+09 -2.134e+10 -1.060e+10 -3.036e+10 -1.473e+10 -4.171e+10 -1.978e+10 -5.569e+10 -2.584e+10 -7.259e+10 -3.297e+10 -9.263e+10 -4.121e+10 -1.160e+11 -5.060e+10 -1.431e+11 -6.116e+10 -1.738e+11 -7.289e+10 -2.082e+11 -8.575e+10 -2.466e+11 -9.972e+10 -2.887e+11 -1.147e+11 -3.345e+11 -1.306e+11 -3.839e+11 -1.474e+11 -4.365e+11 -1.648e+11 -4.920e+11 -1.828e+11 -5.500e+11 -2.011e+11 -6.101e+11 -2.197e+11 -6.717e+11 -2.381e+11 -7.342e+11 -2.564e+11 -7.981e+11 -2.786e+11 -8.615e+11 -2.988e+11 -9.229e+11 -3.156e+11 -9.821e+11 -3.312e+11 -1.038e+12 -3.454e+11 -1.091e+12 -3.580e+11 -1.140e+12 -3.687e+11 -1.183e+12 -3.774e+11 -1.220e+12 -3.837e+11 -1.251e+12 -3.877e+11 -1.274e+12 -3.892e+11 -1.290e+12 -3.880e+11 -1.297e+12 -3.842e+11 -1.296e+12 -3.777e+11 -1.287e+12 -3.685e+11 -1.268e+12 -3.567e+11 -1.241e+12 -3.424e+11 -1.205e+12 -3.259e+11 -1.161e+12 -3.073e+11 -1.109e+12 -2.869e+11 -1.050e+12 -2.650e+11 -9.854e+11 -2.419e+11 -9.154e+11 -2.180e+11 -8.411e+11 -1.937e+11 -7.639e+11 -1.694e+11 -6.849e+11 -1.454e+11 -6.053e+11 -1.222e+11 -5.267e+11 -1.002e+11 -4.501e+11 -7.974e+10 -3.768e+11 -6.106e+10 -3.082e+11 -4.448e+10 -2.451e+11 -3.019e+10 -1.884e+11 -1.830e+10 -1.390e+11 -8.913e+09 -9.723e+10 -1.978e+09 -6.337e+10 2.610e+09 -3.746e+10 5.060e+09 -1.918e+10 5.734e+09 -7.862e+09 5.297e+09 -1.867e+09 5.042e+09 2.229e+09 6.465e+09 7.911e+09 9.567e+09 1.581e+10 1.325e+10 2.495e+10 1.675e+10 3.397e+10 1.952e+10 4.152e+10 2.120e+10 4.643e+10 2.151e+10 4.778e+10 2.032e+10 4.510e+10 1.770e+10 3.844e+10 1.386e+10 2.858e+10 9.298e+09 1.717e+10 4.763e+09 6.858e+09 1.303e+09 5.232e+08 -5.825e+08 -6.367e+09 -3.877e+09 -2.832e+10 -1.382e+10 -7.592e+10 -3.309e+10 -1.596e+11 -6.484e+10 -2.920e+11 -1.129e+11 -4.882e+11 -1.815e+11 -7.652e+11 -2.756e+11 -1.143e+12 -4.008e+11 -1.645e+12 -5.633e+11 -2.296e+12 -7.697e+11 -3.125e+12 -1.028e+12 -4.164e+12 -1.346e+12 -5.447e+12 -1.731e+12 -7.012e+12 -2.195e+12 -8.902e+12 -2.747e+12 -1.116e+13 -3.396e+12 -1.383e+13 -4.154e+12 -1.697e+13 -5.032e+12 -2.062e+13 -6.042e+12 -2.485e+13 -7.195e+12 -2.971e+13 -8.503e+12 -3.526e+13 -9.978e+12 -4.156e+13 -1.163e+13 -4.868e+13 -1.348e+13 -5.667e+13 -1.552e+13 -6.560e+13 -1.778e+13 -7.553e+13 -2.026e+13 -8.653e+13 -2.298e+13 -9.867e+13 -2.595e+13 -1.120e+14 -2.917e+13 -1.265e+14 -3.265e+13 -1.424e+14 -3.639e+13 -1.596e+14 -4.041e+13 -1.781e+14 -4.469e+13 -1.981e+14 -4.924e+13 -2.195e+14 -5.406e+13 -2.424e+14 -5.915e+13 -2.667e+14 -6.451e+13 -2.925e+14 -7.013e+13 -3.198e+14 -7.600e+13 -3.486e+14 -8.211e+13 -3.788e+14 -8.846e+13 -4.105e+14 -9.502e+13 -4.435e+14 -1.018e+14 -4.778e+14 -1.088e+14 -5.134e+14 -1.159e+14 -5.503e+14 -1.232e+14 -5.882e+14 -1.306e+14 -6.271e+14 -1.381e+14 -6.670e+14 -1.457e+14 -7.077e+14 -1.534e+14 -7.491e+14 -1.611e+14 -7.911e+14 -1.688e+14 -8.335e+14 -1.765e+14 -8.762e+14 -1.842e+14 -9.191e+14 -1.917e+14 -9.620e+14 -1.992e+14 -1.005e+15 -2.065e+14 -1.047e+15 -2.136e+14 -1.089e+15 -2.206e+14 -1.130e+15 -2.272e+14 -1.171e+15 -2.337e+14 -1.210e+15 -2.398e+14 -1.248e+15 -2.456e+14 -1.285e+15 -2.510e+14 -1.321e+15 -2.560e+14 -1.354e+15 -2.606e+14 -1.386e+15 -2.645e+14 -1.416e+15 -2.679e+14 -1.444e+15 -2.707e+14 -1.469e+15 -2.731e+14 -1.492e+15 -2.749e+14 -1.512e+15 -2.763e+14 -1.530e+15 -2.771e+14 -1.545e+15 -2.773e+14 -1.558e+15 -2.771e+14 -1.567e+15 -2.763e+14 -1.573e+15 -2.750e+14 -1.577e+15 -2.731e+14 -1.577e+15 -2.708e+14 -1.575e+15 -2.680e+14 -1.569e+15 -2.648e+14 -1.561e+15 -2.611e+14 -1.550e+15 -2.569e+14 -1.535e+15 -2.524e+14 -1.519e+15 -2.475e+14 -1.499e+15 -2.422e+14 -1.477e+15 -2.366e+14 -1.452e+15 -2.307e+14 -1.425e+15 -2.246e+14 -1.396e+15 -2.182e+14 -1.365e+15 -2.116e+14 -1.331e+15 -2.048e+14 -1.296e+15 -1.979e+14 -1.260e+15 -1.908e+14 -1.222e+15 -1.837e+14 -1.183e+15 -1.765e+14 -1.143e+15 -1.692e+14 -1.102e+15 -1.620e+14 -1.060e+15 -1.547e+14 -1.018e+15 -1.475e+14 -9.751e+14 -1.403e+14 -9.323e+14 -1.332e+14 -8.894e+14 -1.262e+14 -8.467e+14 -1.193e+14 -8.043e+14 -1.126e+14 -7.623e+14 -1.060e+14 -7.209e+14 -9.957e+13 -6.804e+14 -9.335e+13 -6.405e+14 -8.731e+13 -6.016e+14 -8.147e+13 -5.637e+14 -7.584e+13 -5.268e+14 -7.043e+13 -4.910e+14 -6.524e+13 -4.565e+14 -6.029e+13 -4.233e+14 -5.556e+13 -3.914e+14 -5.108e+13 -3.609e+14 -4.683e+13 -3.317e+14 -4.282e+13 -3.041e+14 -3.905e+13 -2.779e+14 -3.551e+13 -2.531e+14 -3.220e+13 -2.298e+14 -2.912e+13 -2.080e+14 -2.625e+13 -1.875e+14 -2.360e+13 -1.685e+14 -2.114e+13 -1.508e+14 -1.889e+13 -1.345e+14 -1.682e+13 -1.194e+14 -1.493e+13 -1.057e+14 -1.320e+13 -9.305e+13 -1.164e+13 -8.157e+13 -1.022e+13 -7.118e+13 -8.946e+12 -6.181e+13 -7.798e+12 -5.339e+13 -6.770e+12 -4.587e+13 -5.854e+12 -3.919e+13 -5.039e+12 -3.327e+13 -4.317e+12 -2.808e+13 -3.682e+12 -2.353e+13 -3.123e+12 -1.958e+13 -2.634e+12 -1.616e+13 -2.210e+12 -1.324e+13 -1.841e+12 -1.074e+13 -1.524e+12 -8.635e+12 -1.252e+12 -6.869e+12 -1.021e+12 -5.402e+12 -8.249e+11 -4.196e+12 -6.605e+11 -3.214e+12 -5.233e+11 -2.425e+12 -4.097e+11 -1.798e+12 -3.166e+11 -1.307e+12 -2.410e+11 -9.296e+11 -1.803e+11 -6.444e+11 -1.324e+11 -4.335e+11 -9.501e+10 -2.814e+11 -6.637e+10 -1.750e+11 -4.491e+10 -1.033e+11 -2.922e+10 -5.698e+10 -1.810e+10 -2.883e+10 -1.052e+10 -1.295e+10 -5.616e+09 -4.896e+09 -2.657e+09 -1.411e+09 -1.050e+09 -2.433e+08 -3.085e+08 -3.775e+06 -5.148e+07 2.456e+06 1.007e+07 -7.136e+07 9.374e+07 -5.116e+08 3.631e+08 -1.897e+09 9.118e+08 -4.998e+09 1.794e+09 -1.069e+10 3.030e+09 -1.985e+10 4.605e+09 -3.333e+10 6.490e+09 -5.186e+10 8.638e+09 -7.600e+10 1.098e+10 -1.062e+11 1.346e+10 -1.426e+11 1.600e+10 -1.852e+11 1.851e+10 -2.339e+11 2.093e+10 -2.882e+11 2.319e+10 -3.474e+11 2.521e+10 -4.109e+11 2.692e+10 -4.777e+11 2.827e+10 -5.466e+11 2.920e+10 -6.166e+11 2.967e+10 -6.867e+11 2.964e+10 -7.555e+11 2.908e+10 -8.220e+11 2.792e+10 -8.851e+11 2.619e+10 -9.436e+11 2.391e+10 -9.965e+11 2.110e+10 -1.043e+12 1.778e+10 -1.083e+12 1.400e+10 -1.114e+12 9.817e+09 -1.138e+12 5.278e+09 -1.153e+12 4.666e+08 -1.160e+12 -4.542e+09 -1.159e+12 -9.672e+09 -1.149e+12 -1.483e+10 -1.131e+12 -1.992e+10 -1.106e+12 -2.488e+10 -1.073e+12 -2.962e+10 -1.034e+12 -3.404e+10 -9.901e+11 -3.810e+10 -9.410e+11 -4.172e+10 -8.878e+11 -4.485e+10 -8.315e+11 -4.745e+10 -7.728e+11 -4.949e+10 -7.128e+11 -5.095e+10 -6.521e+11 -5.183e+10 -5.916e+11 -5.212e+10 -5.320e+11 -5.185e+10 -4.740e+11 -5.104e+10 -4.181e+11 -4.972e+10 -3.650e+11 -4.795e+10 -3.151e+11 -4.576e+10 -2.687e+11 -4.321e+10 -2.261e+11 -4.037e+10 -1.875e+11 -3.729e+10 -1.529e+11 -3.403e+10 -1.225e+11 -3.068e+10 -9.604e+10 -2.727e+10 -7.352e+10 -2.389e+10 -5.471e+10 -2.060e+10 -3.937e+10 -1.744e+10 -2.717e+10 -1.449e+10 -1.782e+10 -1.180e+10 -1.093e+10 -9.427e+09 -6.093e+09 -7.442e+09 -2.883e+09 -5.915e+09 -7.955e+08 -4.897e+09 6.935e+08 -4.370e+09 2.012e+09 -4.196e+09 3.366e+09 -4.171e+09 4.747e+09 -4.129e+09 6.044e+09 -3.979e+09 7.134e+09 -3.690e+09 7.915e+09 -3.259e+09 8.312e+09 -2.709e+09 8.294e+09 -2.074e+09 7.869e+09 -1.396e+09 7.080e+09 -7.222e+08 6.009e+09 -1.002e+08 4.761e+09 4.259e+08 3.472e+09 8.220e+08 2.284e+09 1.083e+09 1.312e+09 1.270e+09 0.005 -53.159 -52.059 -50.960 -49.860 -48.760 -47.682 -46.715 -45.848 -45.073 -44.383 -43.772 -43.235 -42.769 -42.370 -42.036 -41.766 -41.557 -41.409 -41.322 -41.295 -41.328 -41.424 -41.582 -41.805 -42.095 -42.454 -42.887 -43.398 -43.992 -44.675 -45.456 -46.345 -47.355 -48.499 -49.799 -51.280 -52.974 -54.927 -57.199 -59.875 -63.074 -66.959 -71.689 -76.981 -79.864 -76.812 -71.598 -66.767 -62.703 -59.300 -56.417 -53.941 -51.787 -49.895 -48.220 -46.729 -45.395 -44.198 -43.123 -42.158 -41.292 -40.517 -39.826 -39.214 -38.677 -38.211 -37.812 -37.480 -37.211 -37.005 -36.862 -36.780 -36.760 -36.803 -36.909 -37.079 -37.317 -37.624 -38.003 -38.457 -38.992 -39.612 -40.323 -41.133 -42.048 -43.080 -44.236 -45.527 -46.959 -48.533 -50.232 -52.007 -53.755 -55.298 -56.409 -56.890 -56.649 -55.692 -54.135 -52.197 -50.109 -48.032 -46.051 -44.203 -42.498 -40.932 -39.500 -38.190 -36.993 -35.900 -34.904 -33.997 -33.175 -32.431 -31.763 -31.166 -30.638 -30.176 -29.780 -29.447 -29.178 -28.971 -28.828 -28.750 -28.737 -28.791 -28.916 -29.114 -29.389 -29.748 -30.197 -30.743 -31.397 -32.173 -33.087 -34.162 -35.425 -36.918 -38.697 -40.845 -43.490 -46.837 -51.193 -56.477 -59.108 -58.331 -58.986 -61.946 -55.970 -48.549 -43.258 -39.172 -35.820 -32.967 -30.477 -28.265 -26.273 -24.461 -22.800 -21.268 -19.847 -18.524 -17.287 -16.127 -15.038 -14.013 -13.045 -12.132 -11.269 -10.453 -9.680 -8.948 -8.256 -7.599 -6.978 -6.391 -5.835 -5.310 -4.814 -4.347 -3.907 -3.494 -3.106 -2.744 -2.406 -2.093 -1.802 -1.535 -1.290 -1.067 -0.866 -0.687 -0.528 -0.391 -0.275 -0.179 -0.104 -0.049 -0.014 0.000 -0.006 -0.031 -0.077 -0.143 -0.230 -0.337 -0.464 -0.613 -0.782 -0.973 -1.186 -1.420 -1.676 -1.955 -2.257 -2.583 -2.932 -3.306 -3.706 -4.131 -4.583 -5.063 -5.571 -6.109 -6.677 -7.278 -7.913 -8.582 -9.289 -10.035 -10.823 -11.654 -12.533 -13.463 -14.447 -15.491 -16.600 -17.780 -19.039 -20.388 -21.838 -23.402 -25.101 -26.959 -29.009 -31.296 -33.887 -36.881 -40.436 -44.780 -49.963 -53.468 -52.209 -50.602 -49.902 -49.679 -49.170 -47.734 -45.537 -43.173 -40.988 -39.076 -37.430 -36.021 -34.815 -33.784 -32.905 -32.159 -31.531 -31.010 -30.586 -30.250 -29.997 -29.823 -29.721 -29.691 -29.728 -29.832 -30.001 -30.234 -30.532 -30.894 -31.322 -31.816 -32.379 -33.014 -33.723 -34.510 -35.381 -36.342 -37.398 -38.559 -39.836 -41.239 -42.784 -44.488 -46.368 -48.446 -50.735 -53.238 -55.918 -58.646 -61.113 -62.737 -62.884 -61.520 -59.286 -56.820 -54.452 -52.295 -50.371 -48.669 -47.168 -45.846 -44.682 -43.660 -42.764 -41.984 -41.308 -40.729 -40.239 -39.833 -39.507 -39.257 -39.080 -38.975 -38.938 -38.971 -39.071 -39.239 -39.475 -39.782 -40.161 -40.614 -41.144 -41.757 -42.457 -43.250 -44.145 -45.151 -46.281 -47.548 -48.968 -50.559 -52.335 -54.293 -56.385 -58.451 -60.165 -61.180 -61.509 -61.542 -61.692 -62.236 -63.408 -65.537 -68.988 -71.582 -67.101 -62.128 -58.466 -55.652 -53.387 -51.505 -49.908 -48.535 -47.344 -46.305 -45.397 -44.603 -43.911 -43.310 -42.794 -42.355 -41.989 -41.691 -41.458 -41.288 -41.178 -41.126 -41.133 -41.196 -41.316 -41.492 -41.726 -42.016 -42.366 -42.776 -43.248 -43.784 -44.389 -45.065 -45.818 -46.653 -47.577 -48.599 -49.729 -50.879 -52.030 -53.181 -54.331 0 1 1.0 9205761128.73 S6 HH 36.71 40.21 0.05 -1.759e+07 -2.902e+08 -2.948e+07 -2.631e+08 -3.934e+07 -2.366e+08 -4.727e+07 -2.109e+08 -5.334e+07 -1.862e+08 -5.769e+07 -1.629e+08 -6.045e+07 -1.409e+08 -6.181e+07 -1.206e+08 -6.192e+07 -1.019e+08 -6.096e+07 -8.486e+07 -5.912e+07 -6.953e+07 -5.657e+07 -5.589e+07 -5.347e+07 -4.387e+07 -4.997e+07 -3.338e+07 -4.623e+07 -2.433e+07 -4.234e+07 -1.662e+07 -3.842e+07 -1.009e+07 -3.455e+07 -4.610e+06 -3.078e+07 -4.541e+04 -2.715e+07 3.743e+06 -2.370e+07 6.874e+06 -2.042e+07 9.470e+06 -1.729e+07 1.164e+07 -1.431e+07 1.349e+07 -1.143e+07 1.511e+07 -8.587e+06 1.658e+07 -5.717e+06 1.795e+07 -2.733e+06 1.928e+07 4.619e+05 2.059e+07 3.961e+06 2.187e+07 7.861e+06 2.311e+07 1.225e+07 2.426e+07 1.721e+07 2.526e+07 2.279e+07 2.605e+07 2.903e+07 2.654e+07 3.594e+07 2.665e+07 4.351e+07 2.630e+07 5.173e+07 2.542e+07 6.053e+07 2.394e+07 6.983e+07 2.182e+07 7.955e+07 1.901e+07 8.958e+07 1.552e+07 9.978e+07 1.133e+07 1.100e+08 6.467e+06 1.202e+08 9.810e+05 1.301e+08 -5.062e+06 1.396e+08 -1.159e+07 1.485e+08 -1.849e+07 1.568e+08 -2.566e+07 1.642e+08 -3.298e+07 1.707e+08 -4.030e+07 1.761e+08 -4.750e+07 1.804e+08 -5.445e+07 1.835e+08 -6.100e+07 1.854e+08 -6.703e+07 1.859e+08 -7.244e+07 1.852e+08 -7.712e+07 1.832e+08 -8.100e+07 1.801e+08 -8.400e+07 1.757e+08 -8.610e+07 1.703e+08 -8.727e+07 1.640e+08 -8.753e+07 1.568e+08 -8.688e+07 1.489e+08 -8.539e+07 1.403e+08 -8.310e+07 1.314e+08 -8.009e+07 1.220e+08 -7.647e+07 1.125e+08 -7.233e+07 1.030e+08 -6.776e+07 9.353e+07 -6.289e+07 8.426e+07 -5.784e+07 7.528e+07 -5.269e+07 6.671e+07 -4.755e+07 5.860e+07 -4.252e+07 5.102e+07 -3.766e+07 4.402e+07 -3.305e+07 3.764e+07 -2.874e+07 3.187e+07 -2.477e+07 2.673e+07 -2.116e+07 2.221e+07 -1.793e+07 1.827e+07 -1.509e+07 1.489e+07 -1.262e+07 1.204e+07 -1.050e+07 9.657e+06 -8.726e+06 7.702e+06 -7.257e+06 6.122e+06 -6.066e+06 4.866e+06 -5.122e+06 3.888e+06 -4.396e+06 3.141e+06 -3.862e+06 2.586e+06 -3.497e+06 2.189e+06 -3.284e+06 1.921e+06 -3.213e+06 1.762e+06 -3.278e+06 1.696e+06 -3.483e+06 1.719e+06 -3.835e+06 1.830e+06 -4.350e+06 2.034e+06 -5.048e+06 2.343e+06 -5.952e+06 2.772e+06 -7.090e+06 3.338e+06 -8.490e+06 4.061e+06 -1.018e+07 4.964e+06 -1.219e+07 6.066e+06 -1.454e+07 7.384e+06 -1.723e+07 8.938e+06 -2.029e+07 1.074e+07 -2.370e+07 1.279e+07 -2.745e+07 1.511e+07 -3.152e+07 1.769e+07 -3.586e+07 2.053e+07 -4.041e+07 2.360e+07 -4.512e+07 2.691e+07 -4.990e+07 3.041e+07 -5.466e+07 3.409e+07 -5.931e+07 3.791e+07 -6.374e+07 4.183e+07 -6.785e+07 4.581e+07 -7.153e+07 4.980e+07 -7.469e+07 5.376e+07 -7.722e+07 5.764e+07 -7.907e+07 6.140e+07 -8.015e+07 6.498e+07 -8.043e+07 6.836e+07 -7.988e+07 7.149e+07 -7.849e+07 7.435e+07 -7.629e+07 7.692e+07 -7.331e+07 7.919e+07 -6.962e+07 8.117e+07 -6.528e+07 8.287e+07 -6.038e+07 8.432e+07 -5.502e+07 8.555e+07 -4.928e+07 8.661e+07 -4.326e+07 8.755e+07 -3.703e+07 8.842e+07 -3.065e+07 8.929e+07 -2.418e+07 9.018e+07 -1.763e+07 9.113e+07 -1.104e+07 9.214e+07 -4.405e+06 9.321e+07 2.270e+06 9.430e+07 8.962e+06 9.535e+07 1.565e+07 9.630e+07 2.228e+07 9.704e+07 2.878e+07 9.745e+07 3.504e+07 9.743e+07 4.094e+07 9.686e+07 4.632e+07 9.564e+07 5.101e+07 9.367e+07 5.485e+07 9.090e+07 5.765e+07 8.726e+07 5.927e+07 8.274e+07 5.959e+07 7.734e+07 5.851e+07 7.111e+07 5.600e+07 6.412e+07 5.210e+07 5.650e+07 4.689e+07 4.841e+07 4.057e+07 4.005e+07 3.342e+07 3.169e+07 2.580e+07 2.362e+07 1.818e+07 1.620e+07 1.114e+07 9.834e+06 5.307e+06 5.032e+06 1.271e+06 2.285e+06 -1.275e+06 8.535e+05 -4.845e+06 -1.686e+06 -1.275e+07 -7.159e+06 -2.664e+07 -1.632e+07 -4.755e+07 -2.970e+07 -7.656e+07 -4.774e+07 -1.147e+08 -7.080e+07 -1.629e+08 -9.917e+07 -2.220e+08 -1.331e+08 -2.929e+08 -1.726e+08 -3.759e+08 -2.176e+08 -4.715e+08 -2.681e+08 -5.797e+08 -3.236e+08 -7.004e+08 -3.837e+08 -8.330e+08 -4.477e+08 -9.768e+08 -5.148e+08 -1.130e+09 -5.840e+08 -1.293e+09 -6.542e+08 -1.461e+09 -7.242e+08 -1.634e+09 -7.927e+08 -1.809e+09 -8.580e+08 -1.983e+09 -9.185e+08 -2.152e+09 -9.728e+08 -2.314e+09 -1.019e+09 -2.466e+09 -1.056e+09 -2.604e+09 -1.083e+09 -2.724e+09 -1.097e+09 -2.825e+09 -1.098e+09 -2.901e+09 -1.085e+09 -2.952e+09 -1.058e+09 -2.975e+09 -1.016e+09 -2.967e+09 -9.597e+08 -2.929e+09 -8.894e+08 -2.860e+09 -8.062e+08 -2.760e+09 -7.117e+08 -2.629e+09 -6.076e+08 -2.472e+09 -4.966e+08 -2.289e+09 -3.812e+08 -2.086e+09 -2.648e+08 -1.866e+09 -1.508e+08 -1.637e+09 -4.268e+07 -1.403e+09 5.635e+07 -1.172e+09 1.438e+08 -9.527e+08 2.194e+08 -7.525e+08 2.863e+08 -5.785e+08 3.535e+08 -4.344e+08 4.375e+08 -3.162e+08 5.591e+08 -2.093e+08 7.379e+08 -9.029e+07 9.883e+08 6.664e+07 1.319e+09 2.836e+08 1.737e+09 5.773e+08 2.246e+09 9.611e+08 2.851e+09 1.444e+09 3.556e+09 2.034e+09 4.365e+09 2.737e+09 5.278e+09 3.556e+09 6.298e+09 4.493e+09 7.425e+09 5.550e+09 8.658e+09 6.724e+09 9.991e+09 8.011e+09 1.142e+10 9.407e+09 1.295e+10 1.090e+10 1.455e+10 1.249e+10 1.623e+10 1.415e+10 1.797e+10 1.589e+10 1.975e+10 1.767e+10 2.158e+10 1.949e+10 2.341e+10 2.132e+10 2.525e+10 2.316e+10 2.707e+10 2.497e+10 2.885e+10 2.674e+10 3.057e+10 2.844e+10 3.222e+10 3.007e+10 3.377e+10 3.159e+10 3.520e+10 3.299e+10 3.651e+10 3.425e+10 3.766e+10 3.535e+10 3.864e+10 3.628e+10 3.944e+10 3.703e+10 4.006e+10 3.758e+10 4.047e+10 3.793e+10 4.067e+10 3.807e+10 4.066e+10 3.800e+10 4.044e+10 3.772e+10 4.000e+10 3.723e+10 3.935e+10 3.654e+10 3.851e+10 3.567e+10 3.746e+10 3.460e+10 3.624e+10 3.338e+10 3.485e+10 3.200e+10 3.331e+10 3.048e+10 3.164e+10 2.885e+10 2.985e+10 2.712e+10 2.797e+10 2.532e+10 2.602e+10 2.347e+10 2.402e+10 2.158e+10 2.199e+10 1.969e+10 1.997e+10 1.781e+10 1.796e+10 1.595e+10 1.598e+10 1.415e+10 1.407e+10 1.241e+10 1.223e+10 1.075e+10 1.048e+10 9.182e+09 8.845e+09 7.724e+09 7.328e+09 6.383e+09 5.941e+09 5.166e+09 4.696e+09 4.079e+09 3.598e+09 3.125e+09 2.649e+09 2.305e+09 1.852e+09 1.619e+09 1.206e+09 1.063e+09 7.057e+08 6.323e+08 3.467e+08 3.210e+08 1.203e+08 1.205e+08 1.652e+07 2.120e+07 -2.377e+07 -9.504e+06 -1.313e+08 -8.235e+07 -3.223e+08 -2.198e+08 -5.829e+08 -4.115e+08 -8.979e+08 -6.451e+08 -1.252e+09 -9.083e+08 -1.630e+09 -1.189e+09 -2.018e+09 -1.475e+09 -2.401e+09 -1.756e+09 -2.767e+09 -2.023e+09 -3.104e+09 -2.267e+09 -3.404e+09 -2.482e+09 -3.656e+09 -2.661e+09 -3.857e+09 -2.800e+09 -4.001e+09 -2.897e+09 -4.086e+09 -2.951e+09 -4.111e+09 -2.961e+09 -4.079e+09 -2.929e+09 -3.992e+09 -2.857e+09 -3.854e+09 -2.750e+09 -3.671e+09 -2.612e+09 -3.430e+09 -2.524e+09 -3.198e+09 -2.306e+09 -2.924e+09 -2.103e+09 -2.635e+09 -1.891e+09 -2.340e+09 -1.676e+09 -2.044e+09 -1.462e+09 -1.756e+09 -1.254e+09 -1.482e+09 -1.057e+09 -1.225e+09 -8.745e+08 -9.916e+08 -7.085e+08 -7.835e+08 -5.610e+08 -6.022e+08 -4.330e+08 -4.489e+08 -3.247e+08 -3.229e+08 -2.357e+08 -2.225e+08 -1.646e+08 -1.458e+08 -1.100e+08 -8.972e+07 -6.966e+07 -5.100e+07 -4.130e+07 -2.617e+07 -2.260e+07 -1.169e+07 -1.118e+07 -4.300e+06 -4.890e+06 -1.203e+06 -1.886e+06 -2.402e+05 -7.023e+05 -8.475e+04 -3.532e+05 -3.185e+05 -4.158e+05 -1.499e+06 -1.059e+06 -5.326e+06 -2.955e+06 -1.453e+07 -7.283e+06 -3.285e+07 -1.570e+07 -6.491e+07 -3.024e+07 -1.159e+08 -5.315e+07 -1.917e+08 -8.687e+07 -2.983e+08 -1.338e+08 -4.414e+08 -1.961e+08 -6.266e+08 -2.757e+08 -8.586e+08 -3.740e+08 -1.141e+09 -4.918e+08 -1.475e+09 -6.290e+08 -1.862e+09 -7.850e+08 -2.299e+09 -9.578e+08 -2.782e+09 -1.145e+09 -3.306e+09 -1.343e+09 -3.861e+09 -1.547e+09 -4.435e+09 -1.751e+09 -5.014e+09 -1.950e+09 -5.581e+09 -2.136e+09 -6.120e+09 -2.303e+09 -6.611e+09 -2.444e+09 -7.035e+09 -2.552e+09 -7.373e+09 -2.620e+09 -7.608e+09 -2.643e+09 -7.723e+09 -2.618e+09 -7.705e+09 -2.542e+09 -7.547e+09 -2.414e+09 -7.244e+09 -2.237e+09 -6.799e+09 -2.013e+09 -6.221e+09 -1.751e+09 -5.527e+09 -1.460e+09 -4.739e+09 -1.152e+09 -3.890e+09 -8.413e+08 -3.019e+09 -5.459e+08 -2.172e+09 -2.839e+08 -1.401e+09 -7.512e+07 -7.640e+08 6.285e+07 -3.171e+08 1.276e+08 -5.910e+07 1.831e+08 1.938e+08 3.626e+08 7.136e+08 7.386e+08 1.636e+09 1.306e+09 3.012e+09 2.064e+09 4.870e+09 3.014e+09 7.220e+09 4.155e+09 1.005e+10 5.475e+09 1.332e+10 6.959e+09 1.698e+10 8.580e+09 2.094e+10 1.030e+10 2.509e+10 1.209e+10 2.928e+10 1.388e+10 3.336e+10 1.562e+10 3.713e+10 1.725e+10 4.039e+10 1.869e+10 4.295e+10 1.988e+10 4.460e+10 2.075e+10 4.513e+10 2.123e+10 4.439e+10 2.124e+10 4.227e+10 2.075e+10 3.875e+10 1.972e+10 3.388e+10 1.815e+10 2.786e+10 1.607e+10 2.108e+10 1.353e+10 1.408e+10 1.066e+10 7.659e+09 7.689e+09 2.686e+09 5.058e+09 -9.075e+08 3.671e+09 -6.203e+09 3.890e+09 -1.789e+10 4.558e+09 -3.986e+10 4.219e+09 -7.580e+10 1.938e+09 -1.299e+11 -3.078e+09 -2.070e+11 -1.166e+10 -3.130e+11 -2.475e+10 -4.544e+11 -4.336e+10 -6.388e+11 -6.862e+10 -8.750e+11 -1.018e+11 -1.173e+12 -1.442e+11 -1.542e+12 -1.973e+11 -1.997e+12 -2.626e+11 -2.549e+12 -3.418e+11 -3.213e+12 -4.365e+11 -4.006e+12 -5.485e+11 -4.946e+12 -6.795e+11 -6.049e+12 -8.314e+11 -7.338e+12 -1.006e+12 -8.834e+12 -1.205e+12 -1.056e+13 -1.430e+12 -1.254e+13 -1.683e+12 -1.480e+13 -1.965e+12 -1.736e+13 -2.277e+12 -2.026e+13 -2.621e+12 -2.352e+13 -2.998e+12 -2.717e+13 -3.405e+12 -3.124e+13 -3.842e+12 -3.577e+13 -4.308e+12 -4.077e+13 -4.804e+12 -4.629e+13 -5.329e+12 -5.235e+13 -5.883e+12 -5.898e+13 -6.462e+12 -6.622e+13 -7.064e+12 -7.409e+13 -7.686e+12 -8.261e+13 -8.325e+12 -9.183e+13 -8.976e+12 -1.017e+14 -9.635e+12 -1.124e+14 -1.030e+13 -1.238e+14 -1.096e+13 -1.359e+14 -1.160e+13 -1.489e+14 -1.224e+13 -1.626e+14 -1.285e+13 -1.771e+14 -1.343e+13 -1.924e+14 -1.397e+13 -2.085e+14 -1.447e+13 -2.254e+14 -1.491e+13 -2.430e+14 -1.529e+13 -2.615e+14 -1.559e+13 -2.806e+14 -1.581e+13 -3.005e+14 -1.595e+13 -3.210e+14 -1.598e+13 -3.422e+14 -1.591e+13 -3.639e+14 -1.572e+13 -3.863e+14 -1.541e+13 -4.091e+14 -1.497e+13 -4.323e+14 -1.439e+13 -4.559e+14 -1.366e+13 -4.799e+14 -1.278e+13 -5.040e+14 -1.174e+13 -5.284e+14 -1.054e+13 -5.528e+14 -9.181e+12 -5.772e+14 -7.651e+12 -6.015e+14 -5.953e+12 -6.256e+14 -4.085e+12 -6.494e+14 -2.049e+12 -6.730e+14 1.507e+11 -6.963e+14 2.506e+12 -7.191e+14 5.017e+12 -7.413e+14 7.684e+12 -7.627e+14 1.050e+13 -7.834e+14 1.345e+13 -8.031e+14 1.654e+13 -8.219e+14 1.975e+13 -8.396e+14 2.306e+13 -8.561e+14 2.648e+13 -8.714e+14 2.997e+13 -8.854e+14 3.354e+13 -8.980e+14 3.715e+13 -9.092e+14 4.080e+13 -9.189e+14 4.447e+13 -9.270e+14 4.814e+13 -9.336e+14 5.180e+13 -9.386e+14 5.541e+13 -9.419e+14 5.897e+13 -9.437e+14 6.246e+13 -9.437e+14 6.586e+13 -9.421e+14 6.915e+13 -9.388e+14 7.231e+13 -9.339e+14 7.532e+13 -9.274e+14 7.818e+13 -9.193e+14 8.086e+13 -9.097e+14 8.335e+13 -8.985e+14 8.564e+13 -8.859e+14 8.771e+13 -8.719e+14 8.956e+13 -8.566e+14 9.117e+13 -8.400e+14 9.254e+13 -8.222e+14 9.366e+13 -8.033e+14 9.453e+13 -7.834e+14 9.514e+13 -7.626e+14 9.550e+13 -7.409e+14 9.560e+13 -7.184e+14 9.545e+13 -6.953e+14 9.505e+13 -6.717e+14 9.440e+13 -6.476e+14 9.351e+13 -6.232e+14 9.239e+13 -5.986e+14 9.104e+13 -5.737e+14 8.948e+13 -5.488e+14 8.773e+13 -5.238e+14 8.580e+13 -4.990e+14 8.369e+13 -4.743e+14 8.143e+13 -4.498e+14 7.903e+13 -4.256e+14 7.650e+13 -4.018e+14 7.387e+13 -3.785e+14 7.113e+13 -3.557e+14 6.832e+13 -3.334e+14 6.544e+13 -3.118e+14 6.252e+13 -2.909e+14 5.956e+13 -2.706e+14 5.659e+13 -2.511e+14 5.361e+13 -2.324e+14 5.064e+13 -2.145e+14 4.770e+13 -1.974e+14 4.479e+13 -1.811e+14 4.193e+13 -1.657e+14 3.913e+13 -1.511e+14 3.640e+13 -1.373e+14 3.375e+13 -1.244e+14 3.118e+13 -1.123e+14 2.871e+13 -1.010e+14 2.633e+13 -9.055e+13 2.406e+13 -8.083e+13 2.190e+13 -7.185e+13 1.986e+13 -6.360e+13 1.792e+13 -5.604e+13 1.611e+13 -4.914e+13 1.440e+13 -4.289e+13 1.282e+13 -3.723e+13 1.135e+13 -3.214e+13 9.996e+12 -2.757e+13 8.752e+12 -2.351e+13 7.615e+12 -1.989e+13 6.580e+12 -1.671e+13 5.646e+12 -1.393e+13 4.808e+12 -1.150e+13 4.058e+12 -9.403e+12 3.394e+12 -7.603e+12 2.810e+12 -6.069e+12 2.299e+12 -4.776e+12 1.857e+12 -3.698e+12 1.478e+12 -2.807e+12 1.157e+12 -2.084e+12 8.872e+11 -1.504e+12 6.645e+11 -1.048e+12 4.833e+11 -6.987e+11 3.389e+11 -4.386e+11 2.265e+11 -2.525e+11 1.418e+11 -1.274e+11 8.073e+10 -5.114e+10 3.956e+10 -1.273e+10 1.510e+10 2.478e+09 5.193e+09 1.791e+10 1.346e+09 4.510e+10 -5.459e+09 8.135e+10 -1.726e+10 1.221e+11 -3.254e+10 1.636e+11 -4.977e+10 2.032e+11 -6.760e+10 2.386e+11 -8.492e+10 2.683e+11 -1.009e+11 2.916e+11 -1.148e+11 3.078e+11 -1.263e+11 3.169e+11 -1.349e+11 3.192e+11 -1.407e+11 3.151e+11 -1.435e+11 3.053e+11 -1.436e+11 2.907e+11 -1.409e+11 2.719e+11 -1.360e+11 2.501e+11 -1.289e+11 2.260e+11 -1.202e+11 2.007e+11 -1.101e+11 1.748e+11 -9.900e+10 1.491e+11 -8.734e+10 1.244e+11 -7.548e+10 1.011e+11 -6.373e+10 7.971e+10 -5.239e+10 6.064e+10 -4.174e+10 4.408e+10 -3.200e+10 3.018e+10 -2.336e+10 1.902e+10 -1.598e+10 1.063e+10 -9.989e+09 4.801e+09 -5.419e+09 1.376e+09 -2.309e+09 -2.866e+07 -6.932e+08 -1.074e+09 -1.514e+08 -3.447e+09 9.032e+08 -7.163e+09 2.991e+09 -1.193e+10 6.086e+09 -1.741e+10 1.005e+10 -2.333e+10 1.473e+10 -2.941e+10 1.996e+10 -3.540e+10 2.557e+10 -4.105e+10 3.140e+10 -4.621e+10 3.729e+10 0.005 -51.980 -50.972 -49.964 -48.955 -47.976 -47.099 -46.315 -45.617 -44.999 -44.456 -43.984 -43.580 -43.242 -42.968 -42.757 -42.607 -42.519 -42.491 -42.525 -42.622 -42.783 -43.009 -43.303 -43.669 -44.110 -44.631 -45.239 -45.939 -46.742 -47.658 -48.703 -49.895 -51.257 -52.824 -54.642 -56.777 -59.337 -62.507 -66.663 -72.849 -88.682 -82.353 -75.473 -72.055 -69.138 -65.939 -62.674 -59.631 -56.914 -54.519 -52.406 -50.537 -48.872 -47.385 -46.052 -44.853 -43.775 -42.805 -41.932 -41.150 -40.450 -39.829 -39.281 -38.803 -38.392 -38.045 -37.762 -37.540 -37.380 -37.280 -37.241 -37.263 -37.346 -37.494 -37.706 -37.985 -38.335 -38.759 -39.260 -39.845 -40.519 -41.289 -42.164 -43.154 -44.270 -45.524 -46.932 -48.505 -50.254 -52.178 -54.261 -56.459 -58.717 -61.008 -63.282 -64.826 -63.926 -60.656 -56.863 -53.486 -50.594 -48.099 -45.921 -44.000 -42.290 -40.760 -39.384 -38.142 -37.021 -36.008 -35.092 -34.268 -33.527 -32.866 -32.280 -31.766 -31.321 -30.944 -30.634 -30.389 -30.210 -30.098 -30.052 -30.076 -30.171 -30.340 -30.588 -30.919 -31.340 -31.860 -32.488 -33.237 -34.123 -35.168 -36.398 -37.853 -39.585 -41.668 -44.211 -47.362 -51.229 -55.308 -57.713 -58.036 -59.712 -63.140 -59.829 -50.409 -44.616 -40.329 -36.873 -33.953 -31.416 -29.166 -27.143 -25.305 -23.620 -22.065 -20.624 -19.280 -18.024 -16.846 -15.739 -14.695 -13.711 -12.780 -11.900 -11.066 -10.276 -9.527 -8.817 -8.144 -7.505 -6.900 -6.327 -5.784 -5.270 -4.785 -4.327 -3.896 -3.490 -3.108 -2.752 -2.419 -2.109 -1.821 -1.556 -1.313 -1.091 -0.890 -0.711 -0.552 -0.413 -0.294 -0.196 -0.117 -0.058 -0.019 0.000 -0.000 -0.020 -0.059 -0.118 -0.197 -0.295 -0.414 -0.553 -0.712 -0.892 -1.092 -1.314 -1.557 -1.822 -2.109 -2.419 -2.752 -3.109 -3.490 -3.896 -4.327 -4.785 -5.270 -5.784 -6.327 -6.901 -7.507 -8.146 -8.821 -9.532 -10.284 -11.077 -11.915 -12.800 -13.738 -14.732 -15.788 -16.911 -18.111 -19.395 -20.776 -22.269 -23.893 -25.676 -27.655 -29.884 -32.452 -35.512 -39.372 -44.849 -56.225 -55.825 -49.448 -45.876 -44.330 -43.763 -43.835 -44.365 -45.146 -45.781 -45.678 -44.572 -42.844 -40.992 -39.278 -37.777 -36.488 -35.392 -34.463 -33.682 -33.031 -32.496 -32.065 -31.730 -31.483 -31.319 -31.232 -31.220 -31.279 -31.407 -31.603 -31.866 -32.197 -32.596 -33.064 -33.603 -34.215 -34.903 -35.671 -36.525 -37.471 -38.516 -39.670 -40.943 -42.351 -43.912 -45.648 -47.586 -49.763 -52.220 -55.005 -58.151 -61.620 -65.107 -67.755 -68.420 -66.875 -64.064 -60.972 -58.075 -55.508 -53.273 -51.335 -49.651 -48.186 -46.908 -45.795 -44.825 -43.984 -43.258 -42.638 -42.116 -41.684 -41.337 -41.071 -40.883 -40.769 -40.729 -40.761 -40.864 -41.040 -41.287 -41.609 -42.007 -42.485 -43.045 -43.694 -44.438 -45.285 -46.244 -47.330 -48.558 -49.948 -51.529 -53.332 -55.400 -57.776 -60.470 -63.328 -65.772 -66.948 -66.994 -66.920 -67.423 -68.887 -71.367 -72.690 -68.796 -63.974 -60.212 -57.250 -54.831 -52.801 -51.065 -49.559 -48.241 -47.081 -46.055 -45.148 -44.344 -43.635 -43.010 -42.465 -41.991 -41.586 -41.246 -40.966 -40.745 -40.581 -40.471 -40.414 -40.411 -40.458 -40.558 -40.708 -40.911 -41.165 -41.472 -41.832 -42.248 -42.721 -43.254 -43.848 -44.507 -45.235 -46.036 -46.917 -47.883 -48.943 -50.030 -51.117 -52.204 0 1 1.0 3348270364.71 S6 HV 36.71 40.21 0.05 -5.298e+08 -5.114e+08 -4.896e+08 -4.328e+08 -4.490e+08 -3.607e+08 -4.087e+08 -2.953e+08 -3.691e+08 -2.368e+08 -3.309e+08 -1.851e+08 -2.943e+08 -1.402e+08 -2.597e+08 -1.016e+08 -2.275e+08 -6.898e+07 -1.978e+08 -4.193e+07 -1.707e+08 -1.984e+07 -1.462e+08 -2.146e+06 -1.243e+08 1.177e+07 -1.048e+08 2.251e+07 -8.761e+07 3.060e+07 -7.250e+07 3.653e+07 -5.914e+07 4.077e+07 -4.731e+07 4.367e+07 -3.674e+07 4.550e+07 -2.720e+07 4.646e+07 -1.850e+07 4.672e+07 -1.048e+07 4.640e+07 -2.969e+06 4.560e+07 4.165e+06 4.439e+07 1.107e+07 4.283e+07 1.791e+07 4.094e+07 2.482e+07 3.873e+07 3.197e+07 3.613e+07 3.951e+07 3.307e+07 4.755e+07 2.940e+07 5.617e+07 2.499e+07 6.543e+07 1.965e+07 7.531e+07 1.323e+07 8.578e+07 5.571e+06 9.678e+07 -3.463e+06 1.082e+08 -1.396e+07 1.199e+08 -2.598e+07 1.317e+08 -3.956e+07 1.436e+08 -5.466e+07 1.553e+08 -7.123e+07 1.667e+08 -8.917e+07 1.777e+08 -1.084e+08 1.881e+08 -1.286e+08 1.979e+08 -1.497e+08 2.069e+08 -1.714e+08 2.150e+08 -1.934e+08 2.222e+08 -2.155e+08 2.284e+08 -2.374e+08 2.335e+08 -2.587e+08 2.376e+08 -2.790e+08 2.404e+08 -2.981e+08 2.421e+08 -3.156e+08 2.426e+08 -3.313e+08 2.419e+08 -3.447e+08 2.401e+08 -3.557e+08 2.370e+08 -3.641e+08 2.328e+08 -3.696e+08 2.275e+08 -3.722e+08 2.211e+08 -3.718e+08 2.137e+08 -3.684e+08 2.053e+08 -3.620e+08 1.961e+08 -3.530e+08 1.861e+08 -3.413e+08 1.754e+08 -3.273e+08 1.642e+08 -3.112e+08 1.526e+08 -2.934e+08 1.408e+08 -2.742e+08 1.288e+08 -2.540e+08 1.169e+08 -2.332e+08 1.052e+08 -2.122e+08 9.380e+07 -1.913e+08 8.286e+07 -1.709e+08 7.251e+07 -1.512e+08 6.282e+07 -1.325e+08 5.386e+07 -1.149e+08 4.570e+07 -9.877e+07 3.836e+07 -8.406e+07 3.184e+07 -7.083e+07 2.613e+07 -5.914e+07 2.120e+07 -4.894e+07 1.700e+07 -4.015e+07 1.348e+07 -3.272e+07 1.056e+07 -2.651e+07 8.185e+06 -2.141e+07 6.277e+06 -1.729e+07 4.766e+06 -1.403e+07 3.583e+06 -1.149e+07 2.671e+06 -9.576e+06 1.971e+06 -8.183e+06 1.433e+06 -7.230e+06 1.017e+06 -6.658e+06 6.849e+05 -6.423e+06 4.063e+05 -6.505e+06 1.566e+05 -6.903e+06 -8.416e+04 -7.632e+06 -3.317e+05 -8.728e+06 -5.971e+05 -1.024e+07 -8.879e+05 -1.221e+07 -1.208e+06 -1.473e+07 -1.556e+06 -1.785e+07 -1.927e+06 -2.165e+07 -2.308e+06 -2.620e+07 -2.681e+06 -3.154e+07 -3.022e+06 -3.772e+07 -3.297e+06 -4.478e+07 -3.464e+06 -5.271e+07 -3.476e+06 -6.150e+07 -3.275e+06 -7.110e+07 -2.799e+06 -8.145e+07 -1.985e+06 -9.243e+07 -7.645e+05 -1.039e+08 9.262e+05 -1.158e+08 3.145e+06 -1.278e+08 5.944e+06 -1.397e+08 9.360e+06 -1.515e+08 1.341e+07 -1.627e+08 1.811e+07 -1.732e+08 2.343e+07 -1.827e+08 2.933e+07 -1.910e+08 3.576e+07 -1.980e+08 4.263e+07 -2.034e+08 4.984e+07 -2.071e+08 5.728e+07 -2.090e+08 6.483e+07 -2.090e+08 7.234e+07 -2.071e+08 7.970e+07 -2.034e+08 8.679e+07 -1.980e+08 9.347e+07 -1.909e+08 9.968e+07 -1.824e+08 1.053e+08 -1.726e+08 1.104e+08 -1.618e+08 1.148e+08 -1.503e+08 1.186e+08 -1.381e+08 1.219e+08 -1.257e+08 1.246e+08 -1.131e+08 1.269e+08 -1.006e+08 1.289e+08 -8.834e+07 1.306e+08 -7.638e+07 1.321e+08 -6.483e+07 1.335e+08 -5.371e+07 1.348e+08 -4.304e+07 1.360e+08 -3.284e+07 1.370e+08 -2.310e+07 1.378e+08 -1.383e+07 1.381e+08 -5.088e+06 1.379e+08 3.058e+06 1.369e+08 1.052e+07 1.351e+08 1.716e+07 1.322e+08 2.284e+07 1.280e+08 2.743e+07 1.225e+08 3.078e+07 1.155e+08 3.279e+07 1.071e+08 3.338e+07 9.737e+07 3.253e+07 8.635e+07 3.030e+07 7.431e+07 2.681e+07 6.157e+07 2.230e+07 4.858e+07 1.710e+07 3.587e+07 1.165e+07 2.410e+07 6.485e+06 1.406e+07 2.235e+06 6.608e+06 -5.815e+05 2.235e+06 -2.504e+06 -9.788e+05 -6.251e+06 -7.339e+06 -1.486e+07 -1.972e+07 -2.960e+07 -3.943e+07 -5.150e+07 -6.749e+07 -8.169e+07 -1.047e+08 -1.213e+08 -1.518e+08 -1.713e+08 -2.093e+08 -2.327e+08 -2.774e+08 -3.062e+08 -3.562e+08 -3.924e+08 -4.454e+08 -4.917e+08 -5.446e+08 -6.042e+08 -6.528e+08 -7.294e+08 -7.690e+08 -8.671e+08 -8.919e+08 -1.016e+09 -1.020e+09 -1.175e+09 -1.150e+09 -1.343e+09 -1.282e+09 -1.517e+09 -1.412e+09 -1.694e+09 -1.538e+09 -1.874e+09 -1.658e+09 -2.051e+09 -1.769e+09 -2.224e+09 -1.868e+09 -2.390e+09 -1.954e+09 -2.544e+09 -2.023e+09 -2.684e+09 -2.073e+09 -2.806e+09 -2.103e+09 -2.908e+09 -2.112e+09 -2.987e+09 -2.098e+09 -3.039e+09 -2.059e+09 -3.064e+09 -1.997e+09 -3.059e+09 -1.912e+09 -3.024e+09 -1.803e+09 -2.958e+09 -1.673e+09 -2.862e+09 -1.524e+09 -2.737e+09 -1.358e+09 -2.584e+09 -1.179e+09 -2.406e+09 -9.913e+08 -2.208e+09 -7.993e+08 -1.993e+09 -6.084e+08 -1.766e+09 -4.240e+08 -1.535e+09 -2.516e+08 -1.305e+09 -9.571e+07 -1.085e+09 4.120e+07 -8.835e+08 1.609e+08 -7.090e+08 2.725e+08 -5.676e+08 3.950e+08 -4.591e+08 5.547e+08 -3.727e+08 7.788e+08 -2.878e+08 1.089e+09 -1.797e+08 1.499e+09 -2.668e+07 2.019e+09 1.881e+08 2.656e+09 4.775e+08 3.414e+09 8.506e+08 4.298e+09 1.314e+09 5.309e+09 1.873e+09 6.448e+09 2.529e+09 7.712e+09 3.285e+09 9.101e+09 4.141e+09 1.061e+10 5.094e+09 1.222e+10 6.138e+09 1.394e+10 7.270e+09 1.575e+10 8.482e+09 1.764e+10 9.763e+09 1.959e+10 1.111e+10 2.159e+10 1.249e+10 2.362e+10 1.392e+10 2.567e+10 1.537e+10 2.771e+10 1.682e+10 2.973e+10 1.826e+10 3.171e+10 1.968e+10 3.363e+10 2.106e+10 3.547e+10 2.238e+10 3.721e+10 2.363e+10 3.883e+10 2.480e+10 4.032e+10 2.586e+10 4.165e+10 2.682e+10 4.282e+10 2.765e+10 4.381e+10 2.835e+10 4.460e+10 2.891e+10 4.518e+10 2.932e+10 4.554e+10 2.958e+10 4.567e+10 2.968e+10 4.558e+10 2.962e+10 4.524e+10 2.940e+10 4.467e+10 2.903e+10 4.386e+10 2.851e+10 4.281e+10 2.784e+10 4.154e+10 2.703e+10 4.005e+10 2.609e+10 3.836e+10 2.503e+10 3.649e+10 2.386e+10 3.445e+10 2.259e+10 3.227e+10 2.124e+10 2.997e+10 1.983e+10 2.758e+10 1.837e+10 2.513e+10 1.687e+10 2.266e+10 1.536e+10 2.020e+10 1.384e+10 1.777e+10 1.235e+10 1.541e+10 1.089e+10 1.315e+10 9.474e+09 1.101e+10 8.124e+09 9.026e+09 6.849e+09 7.212e+09 5.665e+09 5.588e+09 4.580e+09 4.167e+09 3.604e+09 2.958e+09 2.744e+09 1.966e+09 2.004e+09 1.186e+09 1.387e+09 6.153e+08 8.941e+08 2.371e+08 5.264e+08 2.226e+07 2.846e+08 -1.027e+08 1.642e+08 -2.625e+08 1.090e+08 -5.268e+08 3.740e+07 -8.940e+08 -8.739e+07 -1.342e+09 -2.685e+08 -1.847e+09 -4.979e+08 -2.384e+09 -7.635e+08 -2.931e+09 -1.053e+09 -3.469e+09 -1.354e+09 -3.978e+09 -1.654e+09 -4.444e+09 -1.942e+09 -4.854e+09 -2.208e+09 -5.198e+09 -2.444e+09 -5.469e+09 -2.643e+09 -5.664e+09 -2.801e+09 -5.779e+09 -2.912e+09 -5.817e+09 -2.977e+09 -5.779e+09 -2.995e+09 -5.671e+09 -2.967e+09 -5.499e+09 -2.897e+09 -5.270e+09 -2.788e+09 -4.992e+09 -2.646e+09 -4.673e+09 -2.475e+09 -4.323e+09 -2.283e+09 -3.954e+09 -2.099e+09 -3.572e+09 -1.893e+09 -3.182e+09 -1.669e+09 -2.796e+09 -1.448e+09 -2.420e+09 -1.235e+09 -2.061e+09 -1.032e+09 -1.724e+09 -8.457e+08 -1.415e+09 -6.771e+08 -1.135e+09 -5.282e+08 -8.883e+08 -4.001e+08 -6.752e+08 -2.929e+08 -4.959e+08 -2.059e+08 -3.496e+08 -1.378e+08 -2.344e+08 -8.663e+07 -1.473e+08 -5.022e+07 -8.513e+07 -2.604e+07 -4.368e+07 -1.140e+07 -1.868e+07 -3.694e+06 -5.789e+06 -5.365e+05 -8.260e+05 1.698e+05 2.075e+05 1.766e+05 1.073e+06 2.857e+05 1.611e+06 -4.728e+04 1.304e+06 -7.614e+05 3.763e+05 -2.211e+06 -2.579e+06 -6.554e+06 -1.205e+07 -1.689e+07 -3.402e+07 -3.651e+07 -7.573e+07 -6.923e+07 -1.456e+08 -1.192e+08 -2.524e+08 -1.908e+08 -4.058e+08 -2.882e+08 -6.149e+08 -4.154e+08 -8.878e+08 -5.758e+08 -1.231e+09 -7.719e+08 -1.651e+09 -1.006e+09 -2.148e+09 -1.277e+09 -2.722e+09 -1.584e+09 -3.370e+09 -1.925e+09 -4.081e+09 -2.295e+09 -4.846e+09 -2.688e+09 -5.651e+09 -3.095e+09 -6.474e+09 -3.508e+09 -7.295e+09 -3.914e+09 -8.091e+09 -4.303e+09 -8.834e+09 -4.661e+09 -9.499e+09 -4.975e+09 -1.006e+10 -5.232e+09 -1.049e+10 -5.420e+09 -1.078e+10 -5.529e+09 -1.089e+10 -5.550e+09 -1.083e+10 -5.477e+09 -1.058e+10 -5.307e+09 -1.013e+10 -5.040e+09 -9.510e+09 -4.681e+09 -8.717e+09 -4.240e+09 -7.777e+09 -3.729e+09 -6.723e+09 -3.166e+09 -5.591e+09 -2.573e+09 -4.426e+09 -1.975e+09 -3.285e+09 -1.403e+09 -2.223e+09 -8.868e+08 -1.304e+09 -4.611e+08 -5.961e+08 -1.599e+08 -1.652e+08 -6.883e+06 4.944e+07 9.377e+07 3.911e+08 3.555e+08 1.176e+09 8.753e+08 2.471e+09 1.664e+09 4.312e+09 2.733e+09 6.719e+09 4.087e+09 9.694e+09 5.720e+09 1.321e+10 7.615e+09 1.723e+10 9.746e+09 2.167e+10 1.207e+10 2.642e+10 1.454e+10 3.136e+10 1.709e+10 3.632e+10 1.964e+10 4.111e+10 2.211e+10 4.550e+10 2.441e+10 4.927e+10 2.643e+10 5.217e+10 2.808e+10 5.396e+10 2.924e+10 5.441e+10 2.984e+10 5.335e+10 2.976e+10 5.064e+10 2.896e+10 4.626e+10 2.739e+10 4.029e+10 2.505e+10 3.299e+10 2.198e+10 2.480e+10 1.831e+10 1.641e+10 1.422e+10 8.751e+09 1.004e+10 2.869e+09 6.405e+09 -1.412e+09 4.404e+09 -7.884e+09 4.215e+09 -2.214e+10 4.011e+09 -4.875e+10 1.665e+09 -9.200e+10 -4.313e+09 -1.568e+11 -1.530e+10 -2.487e+11 -3.279e+10 -3.745e+11 -5.852e+10 -5.417e+11 -9.442e+10 -7.587e+11 -1.426e+11 -1.036e+12 -2.057e+11 -1.383e+12 -2.862e+11 -1.812e+12 -3.872e+11 -2.338e+12 -5.120e+11 -2.974e+12 -6.639e+11 -3.737e+12 -8.468e+11 -4.643e+12 -1.065e+12 -5.712e+12 -1.322e+12 -6.962e+12 -1.623e+12 -8.417e+12 -1.972e+12 -1.010e+13 -2.375e+12 -1.203e+13 -2.836e+12 -1.424e+13 -3.360e+12 -1.675e+13 -3.953e+12 -1.959e+13 -4.619e+12 -2.279e+13 -5.364e+12 -2.638e+13 -6.193e+12 -3.038e+13 -7.108e+12 -3.484e+13 -8.112e+12 -3.978e+13 -9.210e+12 -4.522e+13 -1.041e+13 -5.122e+13 -1.171e+13 -5.778e+13 -1.311e+13 -6.495e+13 -1.463e+13 -7.275e+13 -1.626e+13 -8.122e+13 -1.800e+13 -9.036e+13 -1.985e+13 -1.002e+14 -2.183e+13 -1.108e+14 -2.392e+13 -1.222e+14 -2.612e+13 -1.343e+14 -2.844e+13 -1.472e+14 -3.087e+13 -1.609e+14 -3.341e+13 -1.754e+14 -3.606e+13 -1.907e+14 -3.881e+13 -2.068e+14 -4.165e+13 -2.237e+14 -4.459e+13 -2.414e+14 -4.762e+13 -2.598e+14 -5.072e+13 -2.790e+14 -5.389e+13 -2.989e+14 -5.712e+13 -3.194e+14 -6.040e+13 -3.407e+14 -6.372e+13 -3.624e+14 -6.706e+13 -3.848e+14 -7.042e+13 -4.076e+14 -7.378e+13 -4.309e+14 -7.713e+13 -4.545e+14 -8.045e+13 -4.784e+14 -8.373e+13 -5.026e+14 -8.694e+13 -5.269e+14 -9.009e+13 -5.514e+14 -9.314e+13 -5.758e+14 -9.608e+13 -6.001e+14 -9.890e+13 -6.243e+14 -1.016e+14 -6.482e+14 -1.041e+14 -6.718e+14 -1.065e+14 -6.950e+14 -1.086e+14 -7.178e+14 -1.106e+14 -7.401e+14 -1.124e+14 -7.617e+14 -1.140e+14 -7.826e+14 -1.153e+14 -8.026e+14 -1.164e+14 -8.217e+14 -1.172e+14 -8.397e+14 -1.178e+14 -8.567e+14 -1.181e+14 -8.725e+14 -1.182e+14 -8.870e+14 -1.180e+14 -9.002e+14 -1.175e+14 -9.121e+14 -1.168e+14 -9.225e+14 -1.158e+14 -9.314e+14 -1.145e+14 -9.388e+14 -1.131e+14 -9.447e+14 -1.113e+14 -9.489e+14 -1.094e+14 -9.515e+14 -1.072e+14 -9.524e+14 -1.049e+14 -9.517e+14 -1.024e+14 -9.494e+14 -9.964e+13 -9.453e+14 -9.678e+13 -9.397e+14 -9.377e+13 -9.324e+14 -9.064e+13 -9.235e+14 -8.740e+13 -9.131e+14 -8.407e+13 -9.012e+14 -8.067e+13 -8.878e+14 -7.720e+13 -8.731e+14 -7.369e+13 -8.570e+14 -7.014e+13 -8.397e+14 -6.658e+13 -8.212e+14 -6.303e+13 -8.016e+14 -5.948e+13 -7.810e+14 -5.596e+13 -7.595e+14 -5.248e+13 -7.373e+14 -4.904e+13 -7.142e+14 -4.567e+13 -6.906e+14 -4.237e+13 -6.665e+14 -3.915e+13 -6.420e+14 -3.603e+13 -6.171e+14 -3.303e+13 -5.921e+14 -3.014e+13 -5.669e+14 -2.736e+13 -5.418e+14 -2.469e+13 -5.166e+14 -2.215e+13 -4.916e+14 -1.972e+13 -4.668e+14 -1.743e+13 -4.423e+14 -1.527e+13 -4.182e+14 -1.324e+13 -3.946e+14 -1.134e+13 -3.714e+14 -9.582e+12 -3.488e+14 -7.956e+12 -3.268e+14 -6.465e+12 -3.054e+14 -5.106e+12 -2.848e+14 -3.875e+12 -2.648e+14 -2.771e+12 -2.457e+14 -1.789e+12 -2.273e+14 -9.235e+11 -2.097e+14 -1.705e+11 -1.930e+14 4.765e+11 -1.771e+14 1.024e+12 -1.620e+14 1.478e+12 -1.477e+14 1.845e+12 -1.343e+14 2.134e+12 -1.217e+14 2.349e+12 -1.099e+14 2.500e+12 -9.883e+13 2.593e+12 -8.859e+13 2.635e+12 -7.910e+13 2.633e+12 -7.033e+13 2.593e+12 -6.228e+13 2.521e+12 -5.490e+13 2.424e+12 -4.815e+13 2.306e+12 -4.204e+13 2.172e+12 -3.651e+13 2.027e+12 -3.152e+13 1.875e+12 -2.706e+13 1.720e+12 -2.308e+13 1.564e+12 -1.954e+13 1.410e+12 -1.642e+13 1.260e+12 -1.370e+13 1.115e+12 -1.132e+13 9.782e+11 -9.258e+12 8.498e+11 -7.491e+12 7.308e+11 -5.986e+12 6.214e+11 -4.716e+12 5.222e+11 -3.656e+12 4.330e+11 -2.781e+12 3.536e+11 -2.068e+12 2.839e+11 -1.497e+12 2.233e+11 -1.047e+12 1.714e+11 -7.012e+11 1.277e+11 -4.431e+11 9.150e+10 -2.578e+11 6.221e+10 -1.323e+11 3.923e+10 -5.484e+10 2.194e+10 -1.497e+10 1.005e+10 8.551e+08 5.179e+09 1.533e+10 5.740e+09 4.081e+10 6.761e+09 7.549e+10 5.827e+09 1.150e+11 3.109e+09 1.558e+11 -9.613e+08 1.950e+11 -5.946e+09 2.306e+11 -1.144e+10 2.611e+11 -1.709e+10 2.856e+11 -2.258e+10 3.034e+11 -2.766e+10 3.146e+11 -3.212e+10 3.191e+11 -3.580e+10 3.174e+11 -3.859e+10 3.100e+11 -4.044e+10 2.977e+11 -4.131e+10 2.812e+11 -4.124e+10 2.614e+11 -4.027e+10 2.391e+11 -3.850e+10 2.151e+11 -3.602e+10 1.901e+11 -3.298e+10 1.650e+11 -2.950e+10 1.403e+11 -2.574e+10 1.167e+11 -2.185e+10 9.458e+10 -1.796e+10 7.440e+10 -1.421e+10 5.643e+10 -1.071e+10 4.087e+10 -7.576e+09 2.787e+10 -4.897e+09 1.751e+10 -2.753e+09 9.697e+09 -1.179e+09 4.332e+09 -2.002e+08 1.251e+09 1.982e+08 1.116e+08 2.860e+08 -1.018e+09 9.565e+08 -3.433e+09 2.230e+09 -7.114e+09 3.986e+09 -1.178e+10 6.138e+09 -1.714e+10 8.611e+09 -2.293e+10 1.133e+10 -2.886e+10 1.420e+10 -3.470e+10 1.717e+10 -4.024e+10 2.014e+10 0.005 -51.469 -50.457 -49.445 -48.433 -47.450 -46.566 -45.773 -45.064 -44.432 -43.873 -43.384 -42.960 -42.601 -42.303 -42.065 -41.886 -41.765 -41.703 -41.699 -41.754 -41.868 -42.044 -42.283 -42.588 -42.962 -43.408 -43.933 -44.541 -45.241 -46.043 -46.958 -48.002 -49.197 -50.571 -52.166 -54.042 -56.298 -59.110 -62.843 -68.535 -83.808 -76.918 -69.677 -66.562 -65.145 -64.634 -64.662 -64.786 -64.290 -62.675 -60.300 -57.787 -55.451 -53.370 -51.537 -49.922 -48.498 -47.239 -46.122 -45.132 -44.255 -43.481 -42.801 -42.210 -41.701 -41.271 -40.915 -40.633 -40.421 -40.279 -40.206 -40.202 -40.268 -40.405 -40.616 -40.901 -41.265 -41.712 -42.246 -42.874 -43.602 -44.438 -45.392 -46.474 -47.695 -49.064 -50.584 -52.247 -54.019 -55.827 -57.563 -59.136 -60.568 -62.030 -63.661 -64.819 -63.747 -60.444 -56.694 -53.394 -50.591 -48.189 -46.099 -44.260 -42.628 -41.169 -39.859 -38.679 -37.615 -36.655 -35.791 -35.016 -34.323 -33.709 -33.169 -32.700 -32.301 -31.971 -31.709 -31.514 -31.387 -31.329 -31.342 -31.429 -31.592 -31.837 -32.168 -32.593 -33.120 -33.762 -34.533 -35.450 -36.537 -37.828 -39.365 -41.207 -43.431 -46.112 -49.187 -51.990 -53.084 -52.468 -51.903 -52.468 -55.229 -59.553 -56.898 -47.961 -42.534 -38.532 -35.303 -32.569 -30.186 -28.066 -26.153 -24.410 -22.808 -21.326 -19.948 -18.662 -17.458 -16.326 -15.260 -14.254 -13.304 -12.405 -11.553 -10.746 -9.980 -9.254 -8.565 -7.911 -7.290 -6.702 -6.144 -5.616 -5.116 -4.643 -4.197 -3.776 -3.381 -3.010 -2.662 -2.338 -2.036 -1.756 -1.498 -1.262 -1.046 -0.851 -0.677 -0.523 -0.389 -0.275 -0.181 -0.107 -0.052 -0.016 0.000 -0.003 -0.026 -0.068 -0.129 -0.210 -0.310 -0.431 -0.571 -0.732 -0.913 -1.114 -1.337 -1.581 -1.847 -2.134 -2.445 -2.778 -3.134 -3.515 -3.921 -4.352 -4.809 -5.294 -5.806 -6.348 -6.921 -7.525 -8.163 -8.836 -9.546 -10.295 -11.086 -11.921 -12.804 -13.739 -14.730 -15.782 -16.901 -18.096 -19.376 -20.752 -22.240 -23.859 -25.635 -27.606 -29.829 -32.388 -35.438 -39.289 -44.755 -56.120 -55.708 -49.320 -45.739 -44.190 -43.633 -43.748 -44.394 -45.450 -46.617 -47.169 -46.366 -44.509 -42.389 -40.437 -38.757 -37.338 -36.146 -35.147 -34.313 -33.621 -33.055 -32.600 -32.247 -31.988 -31.816 -31.725 -31.711 -31.771 -31.904 -32.107 -32.381 -32.725 -33.139 -33.626 -34.186 -34.822 -35.538 -36.337 -37.224 -38.204 -39.285 -40.474 -41.780 -43.210 -44.775 -46.480 -48.327 -50.311 -52.407 -54.575 -56.749 -58.829 -60.578 -61.439 -60.787 -58.779 -56.241 -53.752 -51.500 -49.506 -47.749 -46.198 -44.826 -43.612 -42.535 -41.581 -40.738 -39.994 -39.342 -38.775 -38.286 -37.870 -37.525 -37.246 -37.031 -36.877 -36.782 -36.746 -36.768 -36.847 -36.982 -37.175 -37.424 -37.733 -38.101 -38.531 -39.025 -39.585 -40.216 -40.922 -41.707 -42.579 -43.546 -44.617 -45.805 -47.126 -48.601 -50.256 -52.127 -54.266 -56.746 -59.681 -63.254 -67.756 -73.297 -77.818 -77.382 -76.282 -75.771 -73.706 -69.662 -65.601 -62.194 -59.383 -57.034 -55.042 -53.333 -51.852 -50.562 -49.434 -48.446 -47.580 -46.824 -46.167 -45.600 -45.117 -44.710 -44.377 -44.114 -43.916 -43.782 -43.709 -43.698 -43.745 -43.851 -44.017 -44.241 -44.524 -44.868 -45.275 -45.745 -46.282 -46.889 -47.570 -48.329 -49.173 -50.108 -51.144 -52.208 -53.273 -54.337 0 1 1.0 3348270364.71 S6 VV 36.71 40.21 0.05 -3.800e+08 6.441e+08 -3.168e+08 6.198e+08 -2.574e+08 5.933e+08 -2.018e+08 5.651e+08 -1.502e+08 5.356e+08 -1.026e+08 5.052e+08 -5.877e+07 4.743e+08 -1.867e+07 4.432e+08 1.788e+07 4.123e+08 5.121e+07 3.818e+08 8.169e+07 3.520e+08 1.097e+08 3.231e+08 1.356e+08 2.953e+08 1.602e+08 2.685e+08 1.837e+08 2.427e+08 2.069e+08 2.178e+08 2.302e+08 1.933e+08 2.541e+08 1.690e+08 2.787e+08 1.443e+08 3.043e+08 1.186e+08 3.309e+08 9.163e+07 3.582e+08 6.288e+07 3.861e+08 3.199e+07 4.140e+08 -1.181e+06 4.414e+08 -3.674e+07 4.680e+08 -7.468e+07 4.931e+08 -1.148e+08 5.162e+08 -1.568e+08 5.368e+08 -2.004e+08 5.546e+08 -2.451e+08 5.691e+08 -2.904e+08 5.801e+08 -3.359e+08 5.876e+08 -3.811e+08 5.913e+08 -4.253e+08 5.913e+08 -4.683e+08 5.878e+08 -5.094e+08 5.809e+08 -5.482e+08 5.708e+08 -5.843e+08 5.578e+08 -6.175e+08 5.424e+08 -6.473e+08 5.247e+08 -6.735e+08 5.053e+08 -6.959e+08 4.845e+08 -7.143e+08 4.626e+08 -7.284e+08 4.401e+08 -7.383e+08 4.172e+08 -7.438e+08 3.943e+08 -7.449e+08 3.716e+08 -7.415e+08 3.494e+08 -7.337e+08 3.279e+08 -7.215e+08 3.071e+08 -7.051e+08 2.873e+08 -6.847e+08 2.685e+08 -6.604e+08 2.506e+08 -6.325e+08 2.336e+08 -6.015e+08 2.176e+08 -5.676e+08 2.023e+08 -5.313e+08 1.878e+08 -4.931e+08 1.739e+08 -4.535e+08 1.605e+08 -4.130e+08 1.476e+08 -3.723e+08 1.350e+08 -3.319e+08 1.227e+08 -2.923e+08 1.107e+08 -2.541e+08 9.898e+07 -2.177e+08 8.752e+07 -1.836e+08 7.643e+07 -1.521e+08 6.578e+07 -1.236e+08 5.565e+07 -9.812e+07 4.617e+07 -7.591e+07 3.742e+07 -5.693e+07 2.948e+07 -4.109e+07 2.246e+07 -2.828e+07 1.641e+07 -1.828e+07 1.134e+07 -1.082e+07 7.297e+06 -5.598e+06 4.255e+06 -2.273e+06 2.189e+06 -4.533e+05 1.051e+06 3.907e+05 5.169e+05 1.087e+06 -5.821e+04 2.186e+06 -1.026e+06 3.653e+06 -2.436e+06 5.280e+06 -4.240e+06 6.879e+06 -6.368e+06 8.299e+06 -8.763e+06 9.434e+06 -1.139e+07 1.021e+07 -1.422e+07 1.059e+07 -1.727e+07 1.054e+07 -2.057e+07 1.003e+07 -2.418e+07 9.048e+06 -2.818e+07 7.550e+06 -3.266e+07 5.473e+06 -3.772e+07 2.732e+06 -4.345e+07 -7.848e+05 -4.994e+07 -5.216e+06 -5.724e+07 -1.070e+07 -6.537e+07 -1.740e+07 -7.436e+07 -2.545e+07 -8.415e+07 -3.499e+07 -9.467e+07 -4.613e+07 -1.058e+08 -5.897e+07 -1.174e+08 -7.353e+07 -1.292e+08 -8.981e+07 -1.410e+08 -1.078e+08 -1.524e+08 -1.273e+08 -1.633e+08 -1.482e+08 -1.731e+08 -1.703e+08 -1.817e+08 -1.934e+08 -1.886e+08 -2.170e+08 -1.935e+08 -2.408e+08 -1.961e+08 -2.644e+08 -1.962e+08 -2.873e+08 -1.936e+08 -3.090e+08 -1.882e+08 -3.291e+08 -1.800e+08 -3.471e+08 -1.690e+08 -3.626e+08 -1.554e+08 -3.751e+08 -1.394e+08 -3.843e+08 -1.214e+08 -3.901e+08 -1.017e+08 -3.921e+08 -8.085e+07 -3.904e+08 -5.921e+07 -3.850e+08 -3.730e+07 -3.759e+08 -1.562e+07 -3.635e+08 5.402e+06 -3.480e+08 2.534e+07 -3.297e+08 4.383e+07 -3.093e+08 6.061e+07 -2.871e+08 7.546e+07 -2.636e+08 8.824e+07 -2.393e+08 9.893e+07 -2.148e+08 1.075e+08 -1.903e+08 1.141e+08 -1.664e+08 1.189e+08 -1.433e+08 1.219e+08 -1.212e+08 1.235e+08 -1.002e+08 1.238e+08 -8.060e+07 1.229e+08 -6.221e+07 1.210e+08 -4.508e+07 1.181e+08 -2.910e+07 1.144e+08 -1.421e+07 1.098e+08 -3.117e+05 1.044e+08 1.268e+07 9.807e+07 2.483e+07 9.084e+07 3.620e+07 8.269e+07 4.689e+07 7.362e+07 5.702e+07 6.363e+07 6.681e+07 5.261e+07 7.660e+07 4.034e+07 8.688e+07 2.633e+07 9.826e+07 9.694e+06 1.115e+08 -1.092e+07 1.273e+08 -3.733e+07 1.463e+08 -7.190e+07 1.690e+08 -1.174e+08 1.956e+08 -1.768e+08 2.260e+08 -2.535e+08 2.599e+08 -3.511e+08 2.968e+08 -4.730e+08 3.356e+08 -6.228e+08 3.753e+08 -8.042e+08 4.144e+08 -1.020e+09 4.511e+08 -1.274e+09 4.836e+08 -1.568e+09 5.096e+08 -1.903e+09 5.265e+08 -2.282e+09 5.318e+08 -2.703e+09 5.226e+08 -3.166e+09 4.962e+08 -3.669e+09 4.496e+08 -4.208e+09 3.803e+08 -4.780e+09 2.859e+08 -5.378e+09 1.643e+08 -5.996e+09 1.365e+07 -6.626e+09 -1.669e+08 -7.261e+09 -3.779e+08 -7.891e+09 -6.194e+08 -8.507e+09 -8.902e+08 -9.099e+09 -1.189e+09 -9.659e+09 -1.513e+09 -1.018e+10 -1.858e+09 -1.064e+10 -2.223e+09 -1.105e+10 -2.601e+09 -1.139e+10 -2.990e+09 -1.166e+10 -3.384e+09 -1.186e+10 -3.778e+09 -1.198e+10 -4.168e+09 -1.201e+10 -4.547e+09 -1.197e+10 -4.912e+09 -1.184e+10 -5.258e+09 -1.163e+10 -5.580e+09 -1.135e+10 -5.875e+09 -1.099e+10 -6.140e+09 -1.056e+10 -6.372e+09 -1.006e+10 -6.569e+09 -9.507e+09 -6.730e+09 -8.903e+09 -6.855e+09 -8.254e+09 -6.944e+09 -7.570e+09 -6.998e+09 -6.858e+09 -7.020e+09 -6.126e+09 -7.013e+09 -5.384e+09 -6.983e+09 -4.639e+09 -6.934e+09 -3.896e+09 -6.877e+09 -3.161e+09 -6.819e+09 -2.434e+09 -6.772e+09 -1.712e+09 -6.749e+09 -9.878e+08 -6.762e+09 -2.476e+08 -6.824e+09 5.283e+08 -6.946e+09 1.364e+09 -7.137e+09 2.289e+09 -7.401e+09 3.333e+09 -7.738e+09 4.526e+09 -8.145e+09 5.897e+09 -8.614e+09 7.469e+09 -9.135e+09 9.259e+09 -9.696e+09 1.128e+10 -1.028e+10 1.355e+10 -1.089e+10 1.606e+10 -1.149e+10 1.880e+10 -1.209e+10 2.178e+10 -1.266e+10 2.497e+10 -1.320e+10 2.835e+10 -1.369e+10 3.190e+10 -1.413e+10 3.557e+10 -1.451e+10 3.935e+10 -1.483e+10 4.319e+10 -1.508e+10 4.705e+10 -1.526e+10 5.089e+10 -1.536e+10 5.466e+10 -1.539e+10 5.832e+10 -1.535e+10 6.183e+10 -1.523e+10 6.515e+10 -1.506e+10 6.824e+10 -1.482e+10 7.107e+10 -1.453e+10 7.359e+10 -1.419e+10 7.579e+10 -1.380e+10 7.763e+10 -1.337e+10 7.911e+10 -1.291e+10 8.019e+10 -1.242e+10 8.088e+10 -1.190e+10 8.116e+10 -1.137e+10 8.103e+10 -1.081e+10 8.050e+10 -1.024e+10 7.956e+10 -9.659e+09 7.823e+10 -9.065e+09 7.653e+10 -8.463e+09 7.446e+10 -7.854e+09 7.206e+10 -7.240e+09 6.933e+10 -6.622e+09 6.632e+10 -6.004e+09 6.306e+10 -5.389e+09 5.956e+10 -4.778e+09 5.588e+10 -4.177e+09 5.205e+10 -3.590e+09 4.810e+10 -3.021e+09 4.408e+10 -2.476e+09 4.004e+10 -1.959e+09 3.601e+10 -1.475e+09 3.205e+10 -1.032e+09 2.819e+10 -6.312e+08 2.446e+10 -2.780e+08 2.092e+10 2.411e+07 1.758e+10 2.730e+08 1.449e+10 4.677e+08 1.167e+10 6.079e+08 9.145e+09 6.953e+08 6.926e+09 7.327e+08 5.029e+09 7.245e+08 3.456e+09 6.763e+08 2.202e+09 5.954e+08 1.259e+09 4.911e+08 6.085e+08 3.767e+08 2.184e+08 2.764e+08 6.858e+06 2.377e+08 -1.940e+08 2.880e+08 -5.102e+08 3.896e+08 -9.629e+08 5.026e+08 -1.529e+09 6.077e+08 -2.177e+09 6.966e+08 -2.872e+09 7.650e+08 -3.582e+09 8.113e+08 -4.279e+09 8.355e+08 -4.935e+09 8.388e+08 -5.529e+09 8.231e+08 -6.042e+09 7.915e+08 -6.462e+09 7.472e+08 -6.780e+09 6.937e+08 -6.990e+09 6.344e+08 -7.091e+09 5.726e+08 -7.087e+09 5.111e+08 -6.983e+09 4.523e+08 -6.788e+09 3.980e+08 -6.512e+09 3.495e+08 -6.167e+09 3.073e+08 -5.766e+09 2.716e+08 -5.322e+09 2.422e+08 -4.848e+09 2.182e+08 -4.352e+09 2.349e+08 -3.878e+09 1.651e+08 -3.386e+09 1.537e+08 -2.911e+09 1.439e+08 -2.461e+09 1.346e+08 -2.042e+09 1.251e+08 -1.661e+09 1.150e+08 -1.321e+09 1.040e+08 -1.024e+09 9.207e+07 -7.703e+08 7.948e+07 -5.601e+08 6.654e+07 -3.908e+08 5.370e+07 -2.596e+08 4.150e+07 -1.620e+08 3.040e+07 -9.331e+07 2.082e+07 -4.828e+07 1.306e+07 -2.144e+07 7.247e+06 -7.500e+06 3.341e+06 -1.710e+06 1.121e+06 -1.233e+05 1.852e+05 3.398e+04 -2.548e+04 -3.751e+04 -2.804e+05 -1.018e+06 -1.126e+06 -5.357e+06 -3.300e+06 -1.772e+07 -7.487e+06 -4.496e+07 -1.424e+07 -9.597e+07 -2.399e+07 -1.813e+08 -3.694e+07 -3.132e+08 -5.315e+07 -5.047e+08 -7.251e+07 -7.687e+08 -9.470e+07 -1.118e+09 -1.193e+08 -1.565e+09 -1.460e+08 -2.118e+09 -1.741e+08 -2.783e+09 -2.031e+08 -3.563e+09 -2.328e+08 -4.456e+09 -2.626e+08 -5.454e+09 -2.923e+08 -6.546e+09 -3.218e+08 -7.713e+09 -3.508e+08 -8.932e+09 -3.791e+08 -1.018e+10 -4.063e+08 -1.141e+10 -4.321e+08 -1.261e+10 -4.560e+08 -1.373e+10 -4.772e+08 -1.473e+10 -4.947e+08 -1.557e+10 -5.074e+08 -1.623e+10 -5.138e+08 -1.667e+10 -5.127e+08 -1.686e+10 -5.027e+08 -1.680e+10 -4.827e+08 -1.646e+10 -4.518e+08 -1.586e+10 -4.097e+08 -1.498e+10 -3.569e+08 -1.387e+10 -2.946e+08 -1.254e+10 -2.246e+08 -1.103e+10 -1.499e+08 -9.401e+09 -7.427e+07 -7.703e+09 -2.222e+06 -6.003e+09 6.116e+07 -4.377e+09 1.103e+08 -2.901e+09 1.398e+08 -1.656e+09 1.443e+08 -7.252e+08 1.199e+08 -1.811e+08 7.299e+07 9.688e+07 7.569e+07 5.782e+08 1.881e+08 1.633e+09 3.599e+08 3.318e+09 5.697e+08 5.654e+09 8.122e+08 8.646e+09 1.082e+09 1.226e+10 1.371e+09 1.645e+10 1.672e+09 2.113e+10 1.977e+09 2.618e+10 2.277e+09 3.143e+10 2.562e+09 3.672e+10 2.828e+09 4.180e+10 3.069e+09 4.645e+10 3.280e+09 5.038e+10 3.462e+09 5.334e+10 3.617e+09 5.505e+10 3.750e+09 5.528e+10 3.861e+09 5.381e+10 3.946e+09 5.055e+10 4.000e+09 4.547e+10 4.014e+09 3.873e+10 3.966e+09 3.067e+10 3.822e+09 2.187e+10 3.531e+09 1.320e+10 3.028e+09 5.911e+09 2.259e+09 1.341e+09 1.514e+09 -2.435e+09 2.124e+09 -1.163e+10 4.646e+09 -3.192e+10 8.659e+09 -6.756e+10 1.424e+10 -1.234e+11 2.173e+10 -2.052e+11 3.158e+10 -3.195e+11 4.432e+10 -4.739e+11 6.054e+10 -6.772e+11 8.091e+10 -9.392e+11 1.062e+11 -1.270e+12 1.372e+11 -1.684e+12 1.748e+11 -2.192e+12 2.201e+11 -2.810e+12 2.741e+11 -3.554e+12 3.382e+11 -4.441e+12 4.136e+11 -5.489e+12 5.016e+11 -6.720e+12 6.041e+11 -8.155e+12 7.226e+11 -9.815e+12 8.591e+11 -1.173e+13 1.016e+12 -1.391e+13 1.194e+12 -1.640e+13 1.398e+12 -1.922e+13 1.629e+12 -2.240e+13 1.890e+12 -2.597e+13 2.185e+12 -2.996e+13 2.516e+12 -3.440e+13 2.888e+12 -3.932e+13 3.306e+12 -4.476e+13 3.779e+12 -5.075e+13 4.308e+12 -5.731e+13 4.898e+12 -6.449e+13 5.553e+12 -7.232e+13 6.277e+12 -8.081e+13 7.077e+12 -9.002e+13 7.957e+12 -9.995e+13 8.923e+12 -1.106e+14 9.978e+12 -1.221e+14 1.113e+13 -1.344e+14 1.238e+13 -1.475e+14 1.373e+13 -1.614e+14 1.519e+13 -1.761e+14 1.676e+13 -1.917e+14 1.845e+13 -2.082e+14 2.025e+13 -2.254e+14 2.216e+13 -2.435e+14 2.419e+13 -2.625e+14 2.634e+13 -2.821e+14 2.860e+13 -3.026e+14 3.098e+13 -3.238e+14 3.346e+13 -3.457e+14 3.606e+13 -3.682e+14 3.875e+13 -3.913e+14 4.155e+13 -4.149e+14 4.444e+13 -4.391e+14 4.742e+13 -4.636e+14 5.048e+13 -4.885e+14 5.362e+13 -5.136e+14 5.683e+13 -5.390e+14 6.010e+13 -5.644e+14 6.342e+13 -5.899e+14 6.679e+13 -6.153e+14 7.021e+13 -6.406e+14 7.366e+13 -6.656e+14 7.713e+13 -6.904e+14 8.062e+13 -7.147e+14 8.413e+13 -7.385e+14 8.764e+13 -7.619e+14 9.115e+13 -7.846e+14 9.469e+13 -8.066e+14 9.822e+13 -8.279e+14 1.017e+14 -8.482e+14 1.052e+14 -8.675e+14 1.086e+14 -8.857e+14 1.120e+14 -9.028e+14 1.153e+14 -9.187e+14 1.185e+14 -9.333e+14 1.216e+14 -9.466e+14 1.246e+14 -9.584e+14 1.275e+14 -9.688e+14 1.303e+14 -9.777e+14 1.329e+14 -9.850e+14 1.354e+14 -9.907e+14 1.377e+14 -9.947e+14 1.398e+14 -9.971e+14 1.417e+14 -9.978e+14 1.433e+14 -9.968e+14 1.448e+14 -9.942e+14 1.460e+14 -9.898e+14 1.469e+14 -9.837e+14 1.476e+14 -9.760e+14 1.480e+14 -9.667e+14 1.482e+14 -9.557e+14 1.480e+14 -9.432e+14 1.476e+14 -9.292e+14 1.469e+14 -9.137e+14 1.459e+14 -8.969e+14 1.446e+14 -8.787e+14 1.431e+14 -8.594e+14 1.413e+14 -8.389e+14 1.393e+14 -8.174e+14 1.370e+14 -7.949e+14 1.345e+14 -7.716e+14 1.317e+14 -7.475e+14 1.288e+14 -7.229e+14 1.257e+14 -6.976e+14 1.224e+14 -6.720e+14 1.190e+14 -6.460e+14 1.154e+14 -6.199e+14 1.117e+14 -5.935e+14 1.079e+14 -5.672e+14 1.040e+14 -5.410e+14 1.001e+14 -5.149e+14 9.615e+13 -4.890e+14 9.216e+13 -4.635e+14 8.816e+13 -4.385e+14 8.417e+13 -4.138e+14 8.020e+13 -3.898e+14 7.626e+13 -3.663e+14 7.237e+13 -3.434e+14 6.852e+13 -3.213e+14 6.475e+13 -2.999e+14 6.105e+13 -2.793e+14 5.742e+13 -2.594e+14 5.389e+13 -2.404e+14 5.045e+13 -2.222e+14 4.711e+13 -2.048e+14 4.388e+13 -1.883e+14 4.077e+13 -1.726e+14 3.776e+13 -1.578e+14 3.488e+13 -1.438e+14 3.212e+13 -1.306e+14 2.948e+13 -1.183e+14 2.697e+13 -1.068e+14 2.459e+13 -9.606e+13 2.234e+13 -8.609e+13 2.022e+13 -7.687e+13 1.823e+13 -6.835e+13 1.636e+13 -6.052e+13 1.463e+13 -5.336e+13 1.301e+13 -4.681e+13 1.152e+13 -4.088e+13 1.015e+13 -3.552e+13 8.898e+12 -3.069e+13 7.753e+12 -2.636e+13 6.716e+12 -2.250e+13 5.780e+12 -1.907e+13 4.940e+12 -1.605e+13 4.192e+12 -1.340e+13 3.528e+12 -1.109e+13 2.943e+12 -9.094e+12 2.432e+12 -7.378e+12 1.989e+12 -5.913e+12 1.608e+12 -4.677e+12 1.283e+12 -3.643e+12 1.008e+12 -2.787e+12 7.789e+11 -2.088e+12 5.898e+11 -1.526e+12 4.359e+11 -1.081e+12 3.127e+11 -7.363e+11 2.161e+11 -4.765e+11 1.422e+11 -2.870e+11 8.747e+10 -1.555e+11 4.875e+10 -7.090e+10 2.316e+10 -2.315e+10 8.143e+09 -3.759e+09 1.533e+09 5.664e+09 -1.190e+09 2.240e+10 -5.642e+09 4.889e+10 -1.334e+10 8.088e+10 -2.309e+10 1.150e+11 -3.388e+10 1.485e+11 -4.490e+10 1.795e+11 -5.547e+10 2.065e+11 -6.511e+10 2.286e+11 -7.344e+10 2.451e+11 -8.020e+10 2.560e+11 -8.524e+10 2.613e+11 -8.848e+10 2.612e+11 -8.992e+10 2.562e+11 -8.965e+10 2.470e+11 -8.777e+10 2.341e+11 -8.445e+10 2.182e+11 -7.986e+10 2.001e+11 -7.423e+10 1.805e+11 -6.779e+10 1.599e+11 -6.077e+10 1.391e+11 -5.339e+10 1.186e+11 -4.589e+10 9.888e+10 -3.850e+10 8.035e+10 -3.138e+10 6.338e+10 -2.472e+10 4.822e+10 -1.867e+10 3.505e+10 -1.335e+10 2.401e+10 -8.851e+09 1.518e+10 -5.267e+09 8.484e+09 -2.604e+09 3.851e+09 -8.685e+08 1.155e+09 -1.996e+07 1.453e+08 2.400e+08 -7.695e+08 1.023e+09 -2.760e+09 2.554e+09 -5.837e+09 4.720e+09 -9.766e+09 7.398e+09 -1.430e+10 1.048e+10 -1.922e+10 1.384e+10 -2.427e+10 1.737e+10 -2.926e+10 2.097e+10 -3.400e+10 2.453e+10 0.005 -51.499 -50.441 -49.384 -48.326 -47.298 -46.370 -45.535 -44.784 -44.112 -43.512 -42.983 -42.518 -42.117 -41.776 -41.494 -41.269 -41.101 -40.988 -40.932 -40.930 -40.985 -41.096 -41.266 -41.495 -41.786 -42.141 -42.564 -43.058 -43.628 -44.280 -45.021 -45.859 -46.807 -47.877 -49.087 -50.461 -52.029 -53.834 -55.937 -58.428 -61.445 -65.180 -69.657 -72.987 -72.463 -70.740 -69.597 -68.869 -67.753 -65.672 -62.934 -60.130 -57.554 -55.273 -53.271 -51.509 -49.957 -48.583 -47.365 -46.282 -45.322 -44.470 -43.720 -43.062 -42.491 -42.001 -41.589 -41.253 -40.988 -40.795 -40.672 -40.619 -40.636 -40.723 -40.883 -41.117 -41.428 -41.818 -42.293 -42.857 -43.515 -44.275 -45.143 -46.127 -47.234 -48.467 -49.824 -51.284 -52.797 -54.266 -55.543 -56.474 -56.979 -57.086 -56.859 -56.310 -55.396 -54.097 -52.482 -50.684 -48.838 -47.037 -45.331 -43.742 -42.274 -40.924 -39.687 -38.556 -37.523 -36.583 -35.729 -34.956 -34.260 -33.639 -33.088 -32.607 -32.193 -31.844 -31.562 -31.345 -31.195 -31.111 -31.097 -31.154 -31.285 -31.495 -31.788 -32.172 -32.655 -33.247 -33.963 -34.819 -35.838 -37.050 -38.497 -40.234 -42.333 -44.862 -47.751 -50.314 -51.090 -50.030 -48.796 -48.227 -48.617 -50.398 -54.179 -56.165 -49.137 -43.010 -38.673 -35.272 -32.444 -30.005 -27.852 -25.921 -24.167 -22.560 -21.078 -19.701 -18.419 -17.218 -16.092 -15.032 -14.033 -13.089 -12.197 -11.352 -10.552 -9.793 -9.074 -8.392 -7.745 -7.131 -6.549 -5.998 -5.477 -4.983 -4.517 -4.077 -3.663 -3.274 -2.909 -2.568 -2.250 -1.954 -1.680 -1.428 -1.198 -0.988 -0.799 -0.631 -0.483 -0.355 -0.247 -0.158 -0.089 -0.040 -0.010 0.000 -0.009 -0.037 -0.084 -0.151 -0.238 -0.344 -0.470 -0.616 -0.782 -0.969 -1.176 -1.405 -1.654 -1.926 -2.219 -2.535 -2.874 -3.236 -3.622 -4.034 -4.470 -4.933 -5.423 -5.942 -6.489 -7.067 -7.677 -8.320 -8.998 -9.712 -10.465 -11.260 -12.099 -12.985 -13.921 -14.913 -15.964 -17.081 -18.271 -19.541 -20.904 -22.371 -23.960 -25.691 -27.596 -29.714 -32.105 -34.862 -38.129 -42.134 -47.006 -50.657 -50.062 -47.963 -46.611 -46.152 -46.391 -47.146 -48.083 -48.451 -47.500 -45.520 -43.296 -41.253 -39.495 -38.007 -36.753 -35.698 -34.813 -34.075 -33.466 -32.971 -32.581 -32.286 -32.080 -31.957 -31.912 -31.942 -32.045 -32.219 -32.464 -32.779 -33.165 -33.622 -34.152 -34.756 -35.439 -36.203 -37.051 -37.990 -39.025 -40.161 -41.405 -42.763 -44.238 -45.833 -47.537 -49.329 -51.163 -52.957 -54.593 -55.921 -56.769 -56.968 -56.429 -55.234 -53.618 -51.833 -50.052 -48.365 -46.808 -45.390 -44.108 -42.953 -41.915 -40.987 -40.158 -39.421 -38.769 -38.197 -37.700 -37.273 -36.913 -36.617 -36.382 -36.206 -36.087 -36.025 -36.017 -36.064 -36.165 -36.321 -36.530 -36.795 -37.115 -37.493 -37.930 -38.428 -38.989 -39.618 -40.317 -41.093 -41.949 -42.894 -43.936 -45.086 -46.357 -47.766 -49.333 -51.087 -53.063 -55.315 -57.913 -60.965 -64.637 -69.201 -75.049 -81.906 -85.696 -81.972 -75.961 -70.613 -66.342 -62.916 -60.110 -57.764 -55.773 -54.064 -52.584 -51.297 -50.172 -49.189 -48.331 -47.584 -46.938 -46.384 -45.916 -45.527 -45.214 -44.972 -44.798 -44.690 -44.647 -44.667 -44.750 -44.895 -45.102 -45.372 -45.707 -46.107 -46.576 -47.116 -47.730 -48.424 -49.203 -50.074 -51.047 -52.131 -53.248 -54.365 -55.483 0 1 1.0 3348270364.71 S6 VH 36.71 40.21 0.05 -2.825e+08 8.601e+07 -2.637e+08 1.002e+08 -2.446e+08 1.129e+08 -2.254e+08 1.241e+08 -2.062e+08 1.339e+08 -1.871e+08 1.423e+08 -1.682e+08 1.494e+08 -1.496e+08 1.553e+08 -1.313e+08 1.600e+08 -1.134e+08 1.637e+08 -9.581e+07 1.664e+08 -7.866e+07 1.681e+08 -6.190e+07 1.691e+08 -4.549e+07 1.693e+08 -2.942e+07 1.688e+08 -1.363e+07 1.678e+08 1.968e+06 1.662e+08 1.742e+07 1.642e+08 3.283e+07 1.618e+08 4.833e+07 1.590e+08 6.397e+07 1.559e+08 7.987e+07 1.523e+08 9.613e+07 1.482e+08 1.128e+08 1.436e+08 1.298e+08 1.383e+08 1.473e+08 1.323e+08 1.652e+08 1.254e+08 1.833e+08 1.175e+08 2.017e+08 1.087e+08 2.200e+08 9.870e+07 2.381e+08 8.762e+07 2.559e+08 7.543e+07 2.730e+08 6.215e+07 2.893e+08 4.789e+07 3.046e+08 3.272e+07 3.185e+08 1.680e+07 3.310e+08 3.220e+05 3.419e+08 -1.655e+07 3.509e+08 -3.357e+07 3.581e+08 -5.052e+07 3.632e+08 -6.715e+07 3.663e+08 -8.323e+07 3.673e+08 -9.850e+07 3.663e+08 -1.127e+08 3.633e+08 -1.257e+08 3.584e+08 -1.373e+08 3.517e+08 -1.472e+08 3.432e+08 -1.555e+08 3.332e+08 -1.618e+08 3.218e+08 -1.662e+08 3.092e+08 -1.687e+08 2.955e+08 -1.693e+08 2.808e+08 -1.679e+08 2.654e+08 -1.648e+08 2.495e+08 -1.600e+08 2.332e+08 -1.536e+08 2.166e+08 -1.459e+08 1.999e+08 -1.370e+08 1.833e+08 -1.272e+08 1.668e+08 -1.167e+08 1.508e+08 -1.058e+08 1.351e+08 -9.462e+07 1.200e+08 -8.345e+07 1.056e+08 -7.252e+07 9.190e+07 -6.200e+07 7.901e+07 -5.205e+07 6.703e+07 -4.283e+07 5.600e+07 -3.444e+07 4.598e+07 -2.697e+07 3.699e+07 -2.048e+07 2.904e+07 -1.497e+07 2.214e+07 -1.042e+07 1.629e+07 -6.793e+06 1.144e+07 -4.033e+06 7.555e+06 -2.048e+06 4.590e+06 -7.432e+05 2.470e+06 1.126e+03 1.114e+06 3.260e+05 3.934e+05 4.413e+05 -2.562e+04 6.445e+05 -5.779e+05 1.041e+06 -1.431e+06 1.532e+06 -2.567e+06 2.010e+06 -3.923e+06 2.393e+06 -5.426e+06 2.618e+06 -7.017e+06 2.641e+06 -8.649e+06 2.429e+06 -1.028e+07 1.959e+06 -1.190e+07 1.213e+06 -1.350e+07 1.731e+05 -1.508e+07 -1.178e+06 -1.666e+07 -2.869e+06 -1.825e+07 -4.937e+06 -1.987e+07 -7.430e+06 -2.154e+07 -1.041e+07 -2.327e+07 -1.394e+07 -2.505e+07 -1.810e+07 -2.685e+07 -2.296e+07 -2.866e+07 -2.859e+07 -3.043e+07 -3.502e+07 -3.210e+07 -4.230e+07 -3.362e+07 -5.045e+07 -3.491e+07 -5.943e+07 -3.590e+07 -6.919e+07 -3.650e+07 -7.965e+07 -3.666e+07 -9.070e+07 -3.628e+07 -1.022e+08 -3.530e+07 -1.139e+08 -3.366e+07 -1.258e+08 -3.131e+07 -1.374e+08 -2.822e+07 -1.487e+08 -2.435e+07 -1.593e+08 -1.972e+07 -1.691e+08 -1.434e+07 -1.778e+08 -8.257e+06 -1.851e+08 -1.543e+06 -1.909e+08 5.722e+06 -1.951e+08 1.342e+07 -1.974e+08 2.143e+07 -1.979e+08 2.961e+07 -1.965e+08 3.780e+07 -1.932e+08 4.586e+07 -1.881e+08 5.362e+07 -1.812e+08 6.096e+07 -1.729e+08 6.773e+07 -1.631e+08 7.384e+07 -1.523e+08 7.920e+07 -1.405e+08 8.376e+07 -1.281e+08 8.748e+07 -1.153e+08 9.038e+07 -1.023e+08 9.247e+07 -8.929e+07 9.382e+07 -7.648e+07 9.447e+07 -6.399e+07 9.452e+07 -5.193e+07 9.401e+07 -4.034e+07 9.301e+07 -2.925e+07 9.154e+07 -1.867e+07 8.962e+07 -8.573e+06 8.722e+07 1.064e+06 8.432e+07 1.024e+07 8.084e+07 1.898e+07 7.674e+07 2.725e+07 7.193e+07 3.501e+07 6.637e+07 4.222e+07 6.001e+07 4.883e+07 5.284e+07 5.479e+07 4.488e+07 6.012e+07 3.613e+07 6.486e+07 2.657e+07 6.913e+07 1.608e+07 7.317e+07 4.403e+06 7.724e+07 -8.941e+06 8.168e+07 -2.478e+07 8.680e+07 -4.426e+07 9.279e+07 -6.886e+07 9.964e+07 -1.004e+08 1.071e+08 -1.409e+08 1.146e+08 -1.925e+08 1.214e+08 -2.575e+08 1.264e+08 -3.383e+08 1.284e+08 -4.371e+08 1.260e+08 -5.564e+08 1.174e+08 -6.983e+08 1.010e+08 -8.647e+08 7.496e+07 -1.058e+09 3.722e+07 -1.279e+09 -1.422e+07 -1.529e+09 -8.131e+07 -1.808e+09 -1.661e+08 -2.117e+09 -2.705e+08 -2.455e+09 -3.960e+08 -2.820e+09 -5.443e+08 -3.211e+09 -7.166e+08 -3.623e+09 -9.136e+08 -4.055e+09 -1.136e+09 -4.500e+09 -1.383e+09 -4.955e+09 -1.655e+09 -5.412e+09 -1.951e+09 -5.867e+09 -2.269e+09 -6.311e+09 -2.607e+09 -6.739e+09 -2.962e+09 -7.144e+09 -3.330e+09 -7.517e+09 -3.708e+09 -7.853e+09 -4.092e+09 -8.146e+09 -4.478e+09 -8.389e+09 -4.861e+09 -8.579e+09 -5.236e+09 -8.710e+09 -5.600e+09 -8.779e+09 -5.946e+09 -8.785e+09 -6.270e+09 -8.725e+09 -6.568e+09 -8.600e+09 -6.837e+09 -8.411e+09 -7.072e+09 -8.158e+09 -7.270e+09 -7.845e+09 -7.430e+09 -7.475e+09 -7.549e+09 -7.053e+09 -7.626e+09 -6.585e+09 -7.661e+09 -6.075e+09 -7.654e+09 -5.531e+09 -7.608e+09 -4.958e+09 -7.525e+09 -4.365e+09 -7.408e+09 -3.757e+09 -7.262e+09 -3.142e+09 -7.093e+09 -2.525e+09 -6.907e+09 -1.909e+09 -6.713e+09 -1.297e+09 -6.521e+09 -6.871e+08 -6.340e+09 -7.511e+07 -6.181e+09 5.482e+08 -6.054e+09 1.198e+09 -5.967e+09 1.894e+09 -5.927e+09 2.659e+09 -5.937e+09 3.520e+09 -5.995e+09 4.505e+09 -6.098e+09 5.641e+09 -6.236e+09 6.953e+09 -6.400e+09 8.463e+09 -6.576e+09 1.019e+10 -6.753e+09 1.214e+10 -6.918e+09 1.433e+10 -7.059e+09 1.675e+10 -7.167e+09 1.942e+10 -7.231e+09 2.232e+10 -7.243e+09 2.544e+10 -7.197e+09 2.877e+10 -7.089e+09 3.227e+10 -6.914e+09 3.593e+10 -6.672e+09 3.971e+10 -6.362e+09 4.358e+10 -5.986e+09 4.749e+10 -5.547e+09 5.141e+10 -5.048e+09 5.529e+10 -4.496e+09 5.909e+10 -3.897e+09 6.275e+10 -3.260e+09 6.624e+10 -2.592e+09 6.951e+10 -1.903e+09 7.252e+10 -1.203e+09 7.522e+10 -5.011e+08 7.759e+10 1.926e+08 7.959e+10 8.693e+08 8.120e+10 1.520e+09 8.240e+10 2.135e+09 8.317e+10 2.709e+09 8.351e+10 3.233e+09 8.342e+10 3.704e+09 8.289e+10 4.117e+09 8.193e+10 4.468e+09 8.057e+10 4.756e+09 7.882e+10 4.980e+09 7.670e+10 5.140e+09 7.425e+10 5.238e+09 7.148e+10 5.276e+09 6.844e+10 5.257e+09 6.516e+10 5.186e+09 6.168e+10 5.066e+09 5.804e+10 4.903e+09 5.427e+10 4.702e+09 5.041e+10 4.469e+09 4.650e+10 4.210e+09 4.258e+10 3.930e+09 3.869e+10 3.634e+09 3.487e+10 3.329e+09 3.115e+10 3.020e+09 2.754e+10 2.710e+09 2.409e+10 2.406e+09 2.081e+10 2.109e+09 1.774e+10 1.825e+09 1.488e+10 1.556e+09 1.226e+10 1.305e+09 9.895e+09 1.074e+09 7.786e+09 8.639e+08 5.940e+09 6.770e+08 4.358e+09 5.134e+08 3.039e+09 3.735e+08 1.976e+09 2.572e+08 1.158e+09 1.637e+08 5.732e+08 9.224e+07 2.041e+08 4.161e+07 3.105e+07 1.048e+07 -3.032e+07 6.080e+06 -1.862e+08 2.836e+06 -4.659e+08 -1.195e+07 -8.463e+08 -3.774e+07 -1.302e+09 -7.226e+07 -1.808e+09 -1.132e+08 -2.339e+09 -1.583e+08 -2.873e+09 -2.054e+08 -3.390e+09 -2.524e+08 -3.870e+09 -2.975e+08 -4.299e+09 -3.390e+08 -4.664e+09 -3.755e+08 -4.954e+09 -4.059e+08 -5.165e+09 -4.295e+08 -5.292e+09 -4.456e+08 -5.335e+09 -4.540e+08 -5.297e+09 -4.548e+08 -5.182e+09 -4.483e+08 -4.997e+09 -4.350e+08 -4.751e+09 -4.157e+08 -4.454e+09 -3.912e+08 -4.128e+09 -3.823e+08 -3.768e+09 -3.590e+08 -3.382e+09 -3.228e+08 -2.989e+09 -2.856e+08 -2.599e+09 -2.483e+08 -2.220e+09 -2.121e+08 -1.862e+09 -1.776e+08 -1.531e+09 -1.457e+08 -1.230e+09 -1.167e+08 -9.644e+08 -9.118e+07 -7.352e+08 -6.916e+07 -5.426e+08 -5.070e+07 -3.859e+08 -3.571e+07 -2.625e+08 -2.393e+07 -1.692e+08 -1.505e+07 -1.021e+08 -8.695e+06 -5.664e+07 -4.423e+06 -2.811e+07 -1.800e+06 -1.202e+07 -4.039e+05 -4.196e+06 1.691e+05 -1.157e+06 2.886e+05 -3.532e+05 2.984e+05 -3.710e+05 4.453e+05 -1.148e+06 8.502e+05 -3.966e+06 1.732e+06 -1.157e+07 3.317e+06 -2.817e+07 5.796e+06 -5.925e+07 9.374e+06 -1.115e+08 1.431e+07 -1.926e+08 2.091e+07 -3.105e+08 2.957e+07 -4.735e+08 4.075e+07 -6.900e+08 5.503e+07 -9.669e+08 7.299e+07 -1.310e+09 9.533e+07 -1.725e+09 1.227e+08 -2.213e+09 1.559e+08 -2.773e+09 1.954e+08 -3.403e+09 2.418e+08 -4.095e+09 2.954e+08 -4.840e+09 3.564e+08 -5.625e+09 4.250e+08 -6.432e+09 5.006e+08 -7.242e+09 5.825e+08 -8.034e+09 6.695e+08 -8.782e+09 7.602e+08 -9.462e+09 8.527e+08 -1.005e+10 9.450e+08 -1.051e+10 1.034e+09 -1.084e+10 1.118e+09 -1.101e+10 1.194e+09 -1.099e+10 1.258e+09 -1.080e+10 1.307e+09 -1.041e+10 1.340e+09 -9.829e+09 1.352e+09 -9.074e+09 1.343e+09 -8.163e+09 1.309e+09 -7.123e+09 1.251e+09 -5.991e+09 1.168e+09 -4.813e+09 1.060e+09 -3.644e+09 9.298e+08 -2.541e+09 7.795e+08 -1.570e+09 6.144e+08 -7.973e+08 4.436e+08 -2.789e+08 2.910e+08 2.458e+07 2.228e+08 3.747e+08 2.892e+08 1.088e+09 4.344e+08 2.291e+09 5.878e+08 4.021e+09 7.255e+08 6.290e+09 8.372e+08 9.088e+09 9.164e+08 1.237e+10 9.590e+08 1.609e+10 9.637e+08 2.014e+10 9.311e+08 2.439e+10 8.651e+08 2.870e+10 7.724e+08 3.288e+10 6.628e+08 3.673e+10 5.491e+08 4.004e+10 4.463e+08 4.256e+10 3.727e+08 4.408e+10 3.472e+08 4.441e+10 3.832e+08 4.336e+10 4.898e+08 4.084e+10 6.701e+08 3.684e+10 9.167e+08 3.146e+10 1.206e+09 2.499e+10 1.494e+09 1.789e+10 1.710e+09 1.086e+10 1.755e+09 4.920e+09 1.518e+09 1.171e+09 1.159e+09 -1.867e+09 1.865e+09 -9.230e+09 4.441e+09 -2.558e+10 8.885e+09 -5.446e+10 1.554e+10 -9.986e+10 2.503e+10 -1.666e+11 3.815e+10 -2.601e+11 5.583e+10 -3.869e+11 7.916e+10 -5.542e+11 1.095e+11 -7.706e+11 1.482e+11 -1.045e+12 1.971e+11 -1.389e+12 2.580e+11 -1.813e+12 3.333e+11 -2.330e+12 4.252e+11 -2.955e+12 5.366e+11 -3.703e+12 6.706e+11 -4.590e+12 8.304e+11 -5.636e+12 1.020e+12 -6.859e+12 1.243e+12 -8.279e+12 1.504e+12 -9.921e+12 1.809e+12 -1.181e+13 2.161e+12 -1.396e+13 2.568e+12 -1.640e+13 3.034e+12 -1.917e+13 3.567e+12 -2.229e+13 4.172e+12 -2.578e+13 4.859e+12 -2.968e+13 5.634e+12 -3.401e+13 6.506e+12 -3.881e+13 7.490e+12 -4.411e+13 8.591e+12 -4.993e+13 9.817e+12 -5.631e+13 1.118e+13 -6.328e+13 1.269e+13 -7.086e+13 1.435e+13 -7.909e+13 1.618e+13 -8.800e+13 1.818e+13 -9.759e+13 2.037e+13 -1.079e+14 2.276e+13 -1.190e+14 2.535e+13 -1.308e+14 2.816e+13 -1.434e+14 3.119e+13 -1.567e+14 3.446e+13 -1.709e+14 3.796e+13 -1.858e+14 4.172e+13 -2.016e+14 4.572e+13 -2.181e+14 4.998e+13 -2.354e+14 5.450e+13 -2.535e+14 5.928e+13 -2.723e+14 6.432e+13 -2.918e+14 6.963e+13 -3.121e+14 7.519e+13 -3.329e+14 8.101e+13 -3.544e+14 8.708e+13 -3.764e+14 9.338e+13 -3.989e+14 9.992e+13 -4.219e+14 1.067e+14 -4.453e+14 1.136e+14 -4.690e+14 1.208e+14 -4.929e+14 1.281e+14 -5.170e+14 1.356e+14 -5.412e+14 1.433e+14 -5.655e+14 1.510e+14 -5.897e+14 1.589e+14 -6.137e+14 1.668e+14 -6.375e+14 1.748e+14 -6.610e+14 1.828e+14 -6.840e+14 1.909e+14 -7.066e+14 1.989e+14 -7.288e+14 2.069e+14 -7.504e+14 2.149e+14 -7.713e+14 2.227e+14 -7.913e+14 2.305e+14 -8.103e+14 2.381e+14 -8.285e+14 2.455e+14 -8.455e+14 2.527e+14 -8.614e+14 2.596e+14 -8.760e+14 2.663e+14 -8.894e+14 2.727e+14 -9.014e+14 2.788e+14 -9.121e+14 2.845e+14 -9.212e+14 2.899e+14 -9.289e+14 2.948e+14 -9.351e+14 2.993e+14 -9.396e+14 3.034e+14 -9.426e+14 3.070e+14 -9.440e+14 3.101e+14 -9.437e+14 3.127e+14 -9.418e+14 3.148e+14 -9.383e+14 3.164e+14 -9.332e+14 3.174e+14 -9.265e+14 3.178e+14 -9.182e+14 3.177e+14 -9.084e+14 3.170e+14 -8.971e+14 3.157e+14 -8.843e+14 3.139e+14 -8.702e+14 3.115e+14 -8.548e+14 3.086e+14 -8.381e+14 3.051e+14 -8.202e+14 3.011e+14 -8.013e+14 2.966e+14 -7.813e+14 2.916e+14 -7.604e+14 2.862e+14 -7.387e+14 2.803e+14 -7.163e+14 2.740e+14 -6.932e+14 2.673e+14 -6.696e+14 2.603e+14 -6.455e+14 2.530e+14 -6.211e+14 2.454e+14 -5.965e+14 2.375e+14 -5.717e+14 2.295e+14 -5.469e+14 2.212e+14 -5.221e+14 2.128e+14 -4.973e+14 2.043e+14 -4.728e+14 1.958e+14 -4.485e+14 1.872e+14 -4.246e+14 1.786e+14 -4.011e+14 1.700e+14 -3.780e+14 1.615e+14 -3.555e+14 1.531e+14 -3.335e+14 1.448e+14 -3.122e+14 1.366e+14 -2.916e+14 1.286e+14 -2.716e+14 1.208e+14 -2.524e+14 1.131e+14 -2.339e+14 1.057e+14 -2.163e+14 9.854e+13 -1.994e+14 9.162e+13 -1.833e+14 8.494e+13 -1.681e+14 7.853e+13 -1.536e+14 7.240e+13 -1.400e+14 6.654e+13 -1.272e+14 6.097e+13 -1.152e+14 5.569e+13 -1.039e+14 5.069e+13 -9.346e+13 4.598e+13 -8.374e+13 4.156e+13 -7.474e+13 3.742e+13 -6.643e+13 3.356e+13 -5.881e+13 2.997e+13 -5.183e+13 2.665e+13 -4.546e+13 2.358e+13 -3.969e+13 2.077e+13 -3.447e+13 1.821e+13 -2.977e+13 1.586e+13 -2.556e+13 1.374e+13 -2.181e+13 1.183e+13 -1.848e+13 1.012e+13 -1.555e+13 8.589e+12 -1.298e+13 7.235e+12 -1.074e+13 6.040e+12 -8.804e+12 4.996e+12 -7.140e+12 4.089e+12 -5.721e+12 3.307e+12 -4.524e+12 2.640e+12 -3.523e+12 2.076e+12 -2.694e+12 1.603e+12 -2.017e+12 1.213e+12 -1.473e+12 8.956e+11 -1.043e+12 6.413e+11 -7.097e+11 4.419e+11 -4.587e+11 2.896e+11 -2.758e+11 1.770e+11 -1.491e+11 9.770e+10 -6.768e+10 4.567e+10 -2.192e+10 1.557e+10 -3.496e+09 2.755e+09 5.605e+09 -2.993e+09 2.187e+10 -1.286e+10 4.738e+10 -2.922e+10 7.799e+10 -4.951e+10 1.104e+11 -7.166e+10 1.421e+11 -9.394e+10 1.710e+11 -1.150e+11 1.958e+11 -1.339e+11 2.157e+11 -1.498e+11 2.301e+11 -1.624e+11 2.389e+11 -1.713e+11 2.422e+11 -1.766e+11 2.404e+11 -1.782e+11 2.339e+11 -1.765e+11 2.234e+11 -1.716e+11 2.096e+11 -1.641e+11 1.932e+11 -1.543e+11 1.749e+11 -1.426e+11 1.554e+11 -1.296e+11 1.354e+11 -1.157e+11 1.156e+11 -1.012e+11 9.636e+10 -8.680e+10 7.824e+10 -7.270e+10 6.159e+10 -5.926e+10 4.672e+10 -4.678e+10 3.382e+10 -3.551e+10 2.301e+10 -2.562e+10 1.436e+10 -1.729e+10 7.877e+09 -1.062e+10 3.427e+09 -5.614e+09 8.658e+08 -2.289e+09 -1.358e+08 -6.183e+08 -9.917e+08 3.281e+07 -2.971e+09 1.356e+09 -6.018e+09 3.824e+09 -9.876e+09 7.371e+09 -1.429e+10 1.182e+10 -1.901e+10 1.700e+10 -2.383e+10 2.271e+10 -2.854e+10 2.877e+10 -3.295e+10 3.498e+10 -3.693e+10 4.119e+10 0.005 -52.014 -50.960 -49.905 -48.851 -47.827 -46.906 -46.080 -45.340 -44.682 -44.098 -43.586 -43.141 -42.761 -42.445 -42.189 -41.994 -41.857 -41.780 -41.761 -41.802 -41.902 -42.064 -42.289 -42.580 -42.938 -43.367 -43.872 -44.458 -45.131 -45.898 -46.769 -47.755 -48.870 -50.133 -51.567 -53.199 -55.071 -57.235 -59.760 -62.746 -66.321 -70.618 -75.457 -78.483 -76.458 -72.048 -67.612 -63.718 -60.381 -57.518 -55.043 -52.882 -50.979 -49.292 -47.789 -46.443 -45.236 -44.152 -43.178 -42.304 -41.520 -40.822 -40.203 -39.658 -39.184 -38.779 -38.439 -38.163 -37.950 -37.799 -37.710 -37.683 -37.717 -37.814 -37.976 -38.204 -38.500 -38.868 -39.310 -39.831 -40.435 -41.129 -41.918 -42.809 -43.811 -44.931 -46.174 -47.545 -49.035 -50.621 -52.244 -53.799 -55.131 -56.067 -56.483 -56.320 -55.577 -54.312 -52.654 -50.779 -48.843 -46.951 -45.157 -43.484 -41.939 -40.518 -39.216 -38.023 -36.933 -35.938 -35.032 -34.210 -33.467 -32.799 -32.203 -31.676 -31.215 -30.821 -30.490 -30.224 -30.021 -29.883 -29.810 -29.804 -29.866 -30.001 -30.211 -30.501 -30.878 -31.348 -31.922 -32.610 -33.427 -34.393 -35.534 -36.883 -38.490 -40.422 -42.777 -45.689 -49.238 -52.873 -54.609 -53.799 -53.103 -53.988 -57.113 -58.616 -51.222 -44.810 -40.245 -36.659 -33.677 -31.108 -28.845 -26.819 -24.982 -23.303 -21.756 -20.322 -18.988 -17.742 -16.574 -15.476 -14.443 -13.468 -12.546 -11.675 -10.851 -10.070 -9.329 -8.628 -7.963 -7.332 -6.735 -6.170 -5.634 -5.128 -4.650 -4.200 -3.775 -3.376 -3.002 -2.652 -2.326 -2.022 -1.741 -1.483 -1.246 -1.030 -0.836 -0.662 -0.509 -0.377 -0.264 -0.172 -0.099 -0.046 -0.013 0.000 -0.006 -0.032 -0.076 -0.141 -0.226 -0.330 -0.454 -0.599 -0.764 -0.950 -1.156 -1.384 -1.633 -1.904 -2.197 -2.512 -2.851 -3.214 -3.601 -4.012 -4.450 -4.913 -5.404 -5.924 -6.472 -7.052 -7.663 -8.308 -8.987 -9.704 -10.460 -11.257 -12.098 -12.987 -13.927 -14.922 -15.977 -17.098 -18.292 -19.568 -20.936 -22.409 -24.004 -25.742 -27.655 -29.781 -32.182 -34.948 -38.225 -42.242 -47.126 -50.788 -50.203 -48.106 -46.744 -46.243 -46.365 -46.845 -47.250 -46.964 -45.710 -43.857 -41.901 -40.097 -38.518 -37.160 -36.002 -35.017 -34.186 -33.488 -32.910 -32.439 -32.066 -31.784 -31.586 -31.467 -31.424 -31.452 -31.551 -31.718 -31.953 -32.255 -32.625 -33.063 -33.571 -34.152 -34.807 -35.540 -36.356 -37.260 -38.259 -39.359 -40.572 -41.907 -43.379 -45.004 -46.799 -48.784 -50.979 -53.390 -55.999 -58.716 -61.301 -63.287 -64.064 -63.332 -61.444 -59.055 -56.630 -54.370 -52.336 -50.531 -48.936 -47.530 -46.292 -45.203 -44.248 -43.413 -42.688 -42.064 -41.533 -41.090 -40.728 -40.445 -40.237 -40.102 -40.037 -40.042 -40.117 -40.260 -40.474 -40.758 -41.116 -41.550 -42.063 -42.660 -43.346 -44.130 -45.021 -46.029 -47.171 -48.465 -49.935 -51.612 -53.534 -55.739 -58.230 -60.841 -62.981 -63.772 -63.314 -62.557 -62.084 -62.099 -62.710 -64.076 -66.466 -69.601 -70.139 -65.518 -61.134 -57.817 -55.215 -53.095 -51.320 -49.806 -48.499 -47.362 -46.369 -45.500 -44.740 -44.076 -43.501 -43.006 -42.587 -42.237 -41.954 -41.734 -41.574 -41.473 -41.430 -41.442 -41.510 -41.634 -41.812 -42.046 -42.336 -42.683 -43.090 -43.557 -44.087 -44.684 -45.351 -46.092 -46.913 -47.821 -48.825 -49.933 -51.073 -52.213 -53.353 0 1 1.0 3348270364.71 IW1 HH 26.72 31.67 0.050 -3.053e+09 -9.646e+09 -2.320e+09 -9.077e+09 -1.650e+09 -8.555e+09 -1.037e+09 -8.080e+09 -4.752e+08 -7.649e+09 3.978e+07 -7.262e+09 5.148e+08 -6.913e+09 9.556e+08 -6.600e+09 1.366e+09 -6.317e+09 1.751e+09 -6.058e+09 2.112e+09 -5.817e+09 2.450e+09 -5.588e+09 2.767e+09 -5.365e+09 3.060e+09 -5.143e+09 3.327e+09 -4.915e+09 3.565e+09 -4.679e+09 3.773e+09 -4.431e+09 3.946e+09 -4.168e+09 4.082e+09 -3.889e+09 4.180e+09 -3.593e+09 4.237e+09 -3.282e+09 4.252e+09 -2.957e+09 4.226e+09 -2.620e+09 4.160e+09 -2.274e+09 4.056e+09 -1.923e+09 3.917e+09 -1.572e+09 3.749e+09 -1.224e+09 3.557e+09 -8.850e+08 3.346e+09 -5.571e+08 3.125e+09 -2.438e+08 2.901e+09 5.382e+07 2.680e+09 3.371e+08 2.471e+09 6.095e+08 2.277e+09 8.775e+08 2.101e+09 1.151e+09 1.942e+09 1.440e+09 1.796e+09 1.757e+09 1.655e+09 2.114e+09 1.511e+09 2.518e+09 1.352e+09 2.976e+09 1.171e+09 3.490e+09 9.586e+08 4.060e+09 7.096e+08 4.680e+09 4.201e+08 5.345e+09 8.862e+07 6.048e+09 -2.840e+08 6.780e+09 -6.958e+08 7.531e+09 -1.143e+09 8.290e+09 -1.619e+09 9.047e+09 -2.119e+09 9.791e+09 -2.636e+09 1.051e+10 -3.160e+09 1.120e+10 -3.686e+09 1.185e+10 -4.203e+09 1.244e+10 -4.705e+09 1.298e+10 -5.184e+09 1.345e+10 -5.632e+09 1.385e+10 -6.042e+09 1.418e+10 -6.409e+09 1.443e+10 -6.729e+09 1.460e+10 -6.997e+09 1.469e+10 -7.209e+09 1.470e+10 -7.365e+09 1.462e+10 -7.462e+09 1.447e+10 -7.500e+09 1.424e+10 -7.479e+09 1.394e+10 -7.402e+09 1.356e+10 -7.270e+09 1.313e+10 -7.086e+09 1.263e+10 -6.854e+09 1.208e+10 -6.579e+09 1.148e+10 -6.265e+09 1.084e+10 -5.918e+09 1.018e+10 -5.545e+09 9.489e+09 -5.149e+09 8.787e+09 -4.739e+09 8.081e+09 -4.319e+09 7.379e+09 -3.897e+09 6.688e+09 -3.477e+09 6.018e+09 -3.067e+09 5.375e+09 -2.671e+09 4.766e+09 -2.294e+09 4.197e+09 -1.940e+09 3.672e+09 -1.612e+09 3.195e+09 -1.314e+09 2.769e+09 -1.047e+09 2.394e+09 -8.108e+08 2.072e+09 -6.056e+08 1.802e+09 -4.293e+08 1.583e+09 -2.782e+08 1.414e+09 -1.481e+08 1.293e+09 -3.294e+07 1.219e+09 7.398e+07 1.193e+09 1.792e+08 1.213e+09 2.890e+08 1.281e+09 4.086e+08 1.399e+09 5.415e+08 1.574e+09 6.905e+08 1.810e+09 8.574e+08 2.119e+09 1.043e+09 2.510e+09 1.248e+09 2.996e+09 1.473e+09 3.594e+09 1.716e+09 4.318e+09 1.977e+09 5.184e+09 2.256e+09 6.210e+09 2.551e+09 7.410e+09 2.859e+09 8.800e+09 3.181e+09 1.039e+10 3.515e+09 1.220e+10 3.859e+09 1.423e+10 4.214e+09 1.648e+10 4.579e+09 1.896e+10 4.954e+09 2.166e+10 5.342e+09 2.457e+10 5.745e+09 2.768e+10 6.166e+09 3.095e+10 6.608e+09 3.438e+10 7.076e+09 3.793e+10 7.574e+09 4.156e+10 8.107e+09 4.523e+10 8.680e+09 4.889e+10 9.297e+09 5.250e+10 9.961e+09 5.600e+10 1.068e+10 5.934e+10 1.144e+10 6.247e+10 1.226e+10 6.531e+10 1.313e+10 6.782e+10 1.405e+10 6.993e+10 1.501e+10 7.160e+10 1.600e+10 7.276e+10 1.701e+10 7.338e+10 1.804e+10 7.342e+10 1.907e+10 7.283e+10 2.007e+10 7.160e+10 2.104e+10 6.973e+10 2.195e+10 6.721e+10 2.279e+10 6.407e+10 2.353e+10 6.033e+10 2.415e+10 5.607e+10 2.465e+10 5.135e+10 2.501e+10 4.626e+10 2.524e+10 4.093e+10 2.535e+10 3.547e+10 2.535e+10 3.000e+10 2.533e+10 2.466e+10 2.537e+10 1.954e+10 2.563e+10 1.469e+10 2.630e+10 1.008e+10 2.761e+10 5.524e+09 2.978e+10 7.262e+08 3.300e+10 -4.737e+09 3.739e+10 -1.134e+10 4.299e+10 -1.954e+10 4.981e+10 -2.977e+10 5.782e+10 -4.235e+10 6.702e+10 -5.754e+10 7.736e+10 -7.552e+10 8.883e+10 -9.639e+10 1.014e+11 -1.202e+11 1.151e+11 -1.469e+11 1.298e+11 -1.764e+11 1.455e+11 -2.085e+11 1.622e+11 -2.429e+11 1.799e+11 -2.793e+11 1.985e+11 -3.173e+11 2.180e+11 -3.565e+11 2.383e+11 -3.963e+11 2.594e+11 -4.362e+11 2.813e+11 -4.756e+11 3.039e+11 -5.139e+11 3.272e+11 -5.503e+11 3.513e+11 -5.844e+11 3.760e+11 -6.155e+11 4.015e+11 -6.429e+11 4.277e+11 -6.662e+11 4.547e+11 -6.849e+11 4.825e+11 -6.986e+11 5.114e+11 -7.071e+11 5.413e+11 -7.100e+11 5.727e+11 -7.073e+11 6.057e+11 -6.991e+11 6.408e+11 -6.854e+11 6.785e+11 -6.666e+11 7.196e+11 -6.427e+11 7.651e+11 -6.141e+11 8.161e+11 -5.809e+11 8.743e+11 -5.433e+11 9.415e+11 -5.011e+11 1.020e+12 -4.537e+11 1.112e+12 -4.003e+11 1.222e+12 -3.394e+11 1.352e+12 -2.691e+11 1.506e+12 -1.867e+11 1.688e+12 -8.935e+10 1.902e+12 2.677e+10 2.153e+12 1.656e+11 2.445e+12 3.312e+11 2.784e+12 5.282e+11 3.174e+12 7.612e+11 3.620e+12 1.034e+12 4.128e+12 1.353e+12 4.704e+12 1.721e+12 5.352e+12 2.142e+12 6.081e+12 2.620e+12 6.894e+12 3.160e+12 7.800e+12 3.763e+12 8.958e+12 4.511e+12 1.008e+13 5.261e+12 1.132e+13 6.081e+12 1.268e+13 6.973e+12 1.416e+13 7.936e+12 1.578e+13 8.968e+12 1.752e+13 1.007e+13 1.942e+13 1.124e+13 2.146e+13 1.247e+13 2.366e+13 1.374e+13 2.601e+13 1.508e+13 2.851e+13 1.646e+13 3.119e+13 1.787e+13 3.404e+13 1.931e+13 3.705e+13 2.077e+13 4.024e+13 2.225e+13 4.361e+13 2.372e+13 4.714e+13 2.518e+13 5.084e+13 2.662e+13 5.471e+13 2.801e+13 5.874e+13 2.935e+13 6.294e+13 3.062e+13 6.729e+13 3.182e+13 7.177e+13 3.291e+13 7.641e+13 3.390e+13 8.117e+13 3.475e+13 8.606e+13 3.547e+13 9.104e+13 3.603e+13 9.612e+13 3.643e+13 1.013e+14 3.663e+13 1.065e+14 3.665e+13 1.119e+14 3.645e+13 1.171e+14 3.604e+13 1.224e+14 3.539e+13 1.278e+14 3.451e+13 1.331e+14 3.337e+13 1.384e+14 3.197e+13 1.436e+14 3.030e+13 1.488e+14 2.837e+13 1.538e+14 2.616e+13 1.587e+14 2.367e+13 1.635e+14 2.091e+13 1.681e+14 1.786e+13 1.725e+14 1.454e+13 1.767e+14 1.093e+13 1.808e+14 7.052e+12 1.846e+14 2.906e+12 1.881e+14 -1.501e+12 1.914e+14 -6.166e+12 1.944e+14 -1.107e+13 1.971e+14 -1.622e+13 1.994e+14 -2.160e+13 2.015e+14 -2.718e+13 2.033e+14 -3.297e+13 2.047e+14 -3.895e+13 2.058e+14 -4.511e+13 2.066e+14 -5.144e+13 2.070e+14 -5.792e+13 2.070e+14 -6.453e+13 2.067e+14 -7.126e+13 2.060e+14 -7.809e+13 2.050e+14 -8.500e+13 2.035e+14 -9.198e+13 2.017e+14 -9.902e+13 1.996e+14 -1.061e+14 1.971e+14 -1.132e+14 1.942e+14 -1.203e+14 1.910e+14 -1.273e+14 1.874e+14 -1.344e+14 1.836e+14 -1.414e+14 1.793e+14 -1.484e+14 1.748e+14 -1.553e+14 1.698e+14 -1.621e+14 1.647e+14 -1.688e+14 1.591e+14 -1.755e+14 1.534e+14 -1.820e+14 1.472e+14 -1.882e+14 1.409e+14 -1.945e+14 1.342e+14 -2.006e+14 1.273e+14 -2.065e+14 1.201e+14 -2.121e+14 1.127e+14 -2.177e+14 1.049e+14 -2.230e+14 9.707e+13 -2.281e+14 8.892e+13 -2.330e+14 8.059e+13 -2.376e+14 7.205e+13 -2.421e+14 6.331e+13 -2.462e+14 5.441e+13 -2.502e+14 4.534e+13 -2.539e+14 3.611e+13 -2.572e+14 2.673e+13 -2.603e+14 1.725e+13 -2.632e+14 7.629e+12 -2.657e+14 2.596e+12 -2.698e+14 -9.449e+12 -2.717e+14 -1.934e+13 -2.736e+14 -2.929e+13 -2.751e+14 -3.927e+13 -2.764e+14 -4.930e+13 -2.773e+14 -5.933e+13 -2.778e+14 -6.935e+13 -2.781e+14 -7.936e+13 -2.780e+14 -8.932e+13 -2.777e+14 -9.919e+13 -2.769e+14 -1.090e+14 -2.758e+14 -1.187e+14 -2.744e+14 -1.282e+14 -2.727e+14 -1.376e+14 -2.705e+14 -1.468e+14 -2.682e+14 -1.557e+14 -2.654e+14 -1.646e+14 -2.623e+14 -1.730e+14 -2.589e+14 -1.812e+14 -2.551e+14 -1.891e+14 -2.511e+14 -1.967e+14 -2.468e+14 -2.039e+14 -2.422e+14 -2.107e+14 -2.373e+14 -2.171e+14 -2.321e+14 -2.231e+14 -2.267e+14 -2.287e+14 -2.210e+14 -2.337e+14 -2.151e+14 -2.383e+14 -2.090e+14 -2.423e+14 -2.027e+14 -2.459e+14 -1.963e+14 -2.489e+14 -1.897e+14 -2.514e+14 -1.829e+14 -2.533e+14 -1.762e+14 -2.547e+14 -1.692e+14 -2.554e+14 -1.622e+14 -2.557e+14 -1.552e+14 -2.554e+14 -1.482e+14 -2.545e+14 -1.412e+14 -2.532e+14 -1.342e+14 -2.512e+14 -1.274e+14 -2.488e+14 -1.205e+14 -2.460e+14 -1.138e+14 -2.426e+14 -1.073e+14 -2.388e+14 -1.008e+14 -2.346e+14 -9.455e+13 -2.299e+14 -8.846e+13 -2.249e+14 -8.254e+13 -2.194e+14 -7.684e+13 -2.137e+14 -7.135e+13 -2.076e+14 -6.608e+13 -2.013e+14 -6.106e+13 -1.948e+14 -5.627e+13 -1.880e+14 -5.173e+13 -1.812e+14 -4.745e+13 -1.741e+14 -4.341e+13 -1.671e+14 -3.963e+13 -1.598e+14 -3.609e+13 -1.527e+14 -3.280e+13 -1.454e+14 -2.975e+13 -1.382e+14 -2.693e+13 -1.311e+14 -2.434e+13 -1.240e+14 -2.196e+13 -1.171e+14 -1.979e+13 -1.103e+14 -1.783e+13 -1.037e+14 -1.604e+13 -9.712e+13 -1.443e+13 -9.079e+13 -1.298e+13 -8.467e+13 -1.169e+13 -7.877e+13 -1.054e+13 -7.308e+13 -9.515e+12 -6.763e+13 -8.610e+12 -6.242e+13 -7.812e+12 -5.745e+13 -7.109e+12 -5.272e+13 -6.493e+12 -4.825e+13 -5.953e+12 -4.402e+13 -5.480e+12 -4.005e+13 -5.067e+12 -3.632e+13 -4.704e+12 -3.283e+13 -4.385e+12 -2.958e+13 -4.105e+12 -2.658e+13 -3.858e+12 -2.379e+13 -3.638e+12 -2.159e+13 -3.499e+12 -1.919e+13 -3.315e+12 -1.699e+13 -3.144e+12 -1.499e+13 -2.984e+12 -1.317e+13 -2.833e+12 -1.153e+13 -2.688e+12 -1.004e+13 -2.549e+12 -8.717e+12 -2.414e+12 -7.531e+12 -2.283e+12 -6.479e+12 -2.155e+12 -5.550e+12 -2.030e+12 -4.733e+12 -1.909e+12 -4.019e+12 -1.790e+12 -3.398e+12 -1.676e+12 -2.861e+12 -1.566e+12 -2.399e+12 -1.460e+12 -2.003e+12 -1.359e+12 -1.666e+12 -1.264e+12 -1.381e+12 -1.174e+12 -1.139e+12 -1.090e+12 -9.363e+11 -1.011e+12 -7.657e+11 -9.379e+11 -6.230e+11 -8.693e+11 -5.035e+11 -8.051e+11 -4.037e+11 -7.446e+11 -3.206e+11 -6.874e+11 -2.514e+11 -6.327e+11 -1.941e+11 -5.802e+11 -1.470e+11 -5.293e+11 -1.086e+11 -4.798e+11 -7.778e+10 -4.315e+11 -5.345e+10 -3.843e+11 -3.473e+10 -3.384e+11 -2.085e+10 -2.939e+11 -1.106e+10 -2.512e+11 -4.668e+09 -2.105e+11 -1.010e+09 -1.724e+11 5.400e+08 -1.372e+11 5.870e+08 -1.053e+11 -2.855e+08 -7.717e+10 -1.544e+09 -5.316e+10 -2.725e+09 -3.355e+10 -3.457e+09 -1.860e+10 -3.581e+09 -8.451e+09 -3.648e+09 -2.707e+09 -5.289e+09 1.082e+09 -9.486e+09 6.731e+09 -1.611e+10 1.639e+10 -2.491e+10 3.042e+10 -3.580e+10 4.867e+10 -4.870e+10 7.084e+10 -6.351e+10 9.656e+10 -8.008e+10 1.254e+11 -9.825e+10 1.568e+11 -1.178e+11 1.904e+11 -1.385e+11 2.257e+11 -1.600e+11 2.620e+11 -1.822e+11 2.989e+11 -2.047e+11 3.357e+11 -2.272e+11 3.721e+11 -2.494e+11 4.074e+11 -2.711e+11 4.412e+11 -2.919e+11 4.730e+11 -3.116e+11 5.025e+11 -3.299e+11 5.291e+11 -3.466e+11 5.527e+11 -3.616e+11 5.729e+11 -3.745e+11 5.894e+11 -3.854e+11 6.021e+11 -3.940e+11 6.109e+11 -4.003e+11 6.156e+11 -4.042e+11 6.164e+11 -4.058e+11 6.132e+11 -4.050e+11 6.061e+11 -4.018e+11 5.953e+11 -3.964e+11 5.811e+11 -3.889e+11 5.636e+11 -3.795e+11 5.432e+11 -3.682e+11 5.203e+11 -3.554e+11 4.952e+11 -3.410e+11 4.682e+11 -3.253e+11 4.397e+11 -3.086e+11 4.101e+11 -2.909e+11 3.797e+11 -2.727e+11 3.491e+11 -2.540e+11 3.185e+11 -2.350e+11 2.882e+11 -2.160e+11 2.587e+11 -1.973e+11 2.303e+11 -1.788e+11 2.031e+11 -1.609e+11 1.774e+11 -1.436e+11 1.533e+11 -1.271e+11 1.311e+11 -1.115e+11 1.107e+11 -9.688e+10 9.234e+10 -8.329e+10 7.588e+10 -7.077e+10 6.136e+10 -5.938e+10 4.873e+10 -4.910e+10 3.788e+10 -3.995e+10 2.874e+10 -3.190e+10 2.116e+10 -2.490e+10 1.502e+10 -1.893e+10 1.017e+10 -1.393e+10 6.454e+09 -9.832e+09 3.721e+09 -6.575e+09 1.821e+09 -4.090e+09 6.026e+08 -2.303e+09 -8.286e+07 -1.135e+09 -3.968e+08 -4.582e+08 -5.421e+08 -2.406e+07 -7.383e+08 4.788e+08 -1.088e+09 1.233e+09 -1.537e+09 2.273e+09 -1.996e+09 3.579e+09 -2.397e+09 5.123e+09 -2.684e+09 6.880e+09 -2.818e+09 8.834e+09 -2.761e+09 1.097e+10 -2.483e+09 1.328e+10 -1.957e+09 1.576e+10 -1.154e+09 1.842e+10 -4.802e+07 2.125e+10 1.389e+09 2.426e+10 3.185e+09 2.744e+10 5.366e+09 3.081e+10 7.962e+09 3.437e+10 1.100e+10 3.809e+10 1.450e+10 4.197e+10 1.848e+10 4.601e+10 2.296e+10 5.018e+10 2.793e+10 5.446e+10 3.341e+10 5.882e+10 3.937e+10 6.322e+10 4.578e+10 6.765e+10 5.263e+10 7.205e+10 5.987e+10 7.639e+10 6.743e+10 8.062e+10 7.526e+10 8.471e+10 8.329e+10 8.861e+10 9.142e+10 9.227e+10 9.958e+10 9.567e+10 1.077e+11 9.875e+10 1.156e+11 1.015e+11 1.233e+11 1.038e+11 1.306e+11 1.058e+11 1.375e+11 1.073e+11 1.439e+11 1.083e+11 1.496e+11 1.089e+11 1.546e+11 1.090e+11 1.589e+11 1.087e+11 1.624e+11 1.078e+11 1.650e+11 1.065e+11 1.667e+11 1.048e+11 1.676e+11 1.026e+11 1.675e+11 1.001e+11 1.665e+11 9.716e+10 1.646e+11 9.390e+10 1.619e+11 9.036e+10 1.584e+11 8.655e+10 1.542e+11 8.253e+10 1.492e+11 7.833e+10 1.437e+11 7.399e+10 1.375e+11 6.956e+10 1.309e+11 6.506e+10 1.239e+11 6.054e+10 1.165e+11 5.604e+10 1.089e+11 5.158e+10 1.011e+11 4.720e+10 9.323e+10 4.293e+10 8.536e+10 3.879e+10 7.756e+10 3.480e+10 6.990e+10 3.099e+10 6.244e+10 2.737e+10 5.524e+10 2.395e+10 4.836e+10 2.076e+10 4.185e+10 1.779e+10 3.575e+10 1.505e+10 3.009e+10 1.256e+10 2.491e+10 1.030e+10 2.021e+10 8.288e+09 1.603e+10 6.513e+09 1.235e+10 4.973e+09 9.187e+09 3.661e+09 6.529e+09 2.570e+09 4.362e+09 1.692e+09 2.669e+09 1.013e+09 1.424e+09 5.229e+08 5.970e+08 2.141e+08 1.452e+08 7.703e+07 -6.190e+07 3.284e+07 -3.049e+08 -7.060e+07 -7.930e+08 -2.679e+08 -1.508e+09 -5.458e+08 -2.407e+09 -8.857e+08 -3.447e+09 -1.269e+09 -4.587e+09 -1.679e+09 -5.788e+09 -2.096e+09 -7.013e+09 -2.506e+09 -8.227e+09 -2.893e+09 -9.403e+09 -3.244e+09 -1.051e+10 -3.547e+09 -1.153e+10 -3.794e+09 -1.244e+10 -3.976e+09 -1.323e+10 -4.087e+09 -1.388e+10 -4.127e+09 -1.440e+10 -4.093e+09 -1.477e+10 -3.989e+09 -1.500e+10 -3.817e+09 -1.510e+10 -3.582e+09 -1.507e+10 -3.290e+09 -1.491e+10 -2.948e+09 -1.465e+10 -2.565e+09 -1.428e+10 -2.147e+09 -1.383e+10 -1.704e+09 -1.331e+10 -1.245e+09 -1.273e+10 -7.755e+08 -1.210e+10 -3.039e+08 -1.145e+10 0.005 -54.017 -53.002 -51.987 -50.972 -49.957 -48.942 -47.927 -47.001 -46.175 -45.440 -44.790 -44.219 -43.723 -43.300 -42.946 -42.658 -42.434 -42.275 -42.179 -42.146 -42.178 -42.274 -42.436 -42.667 -42.969 -43.346 -43.801 -44.341 -44.972 -45.703 -46.544 -47.509 -48.615 -49.884 -51.349 -53.051 -55.055 -57.461 -60.438 -64.330 -70.032 -82.707 -80.970 -75.020 -72.557 -71.772 -70.242 -66.880 -62.962 -59.427 -56.415 -53.854 -51.643 -49.712 -48.012 -46.503 -45.157 -43.953 -42.873 -41.904 -41.036 -40.259 -39.568 -38.956 -38.419 -37.954 -37.557 -37.226 -36.960 -36.756 -36.616 -36.538 -36.523 -36.571 -36.683 -36.862 -37.108 -37.426 -37.819 -38.290 -38.845 -39.491 -40.234 -41.084 -42.051 -43.149 -44.393 -45.800 -47.394 -49.201 -51.241 -53.528 -56.053 -58.773 -61.635 -64.558 -66.710 -65.650 -61.402 -57.075 -53.425 -50.353 -47.724 -45.438 -43.426 -41.640 -40.042 -38.607 -37.313 -36.144 -35.086 -34.130 -33.264 -32.482 -31.780 -31.155 -30.602 -30.119 -29.704 -29.355 -29.071 -28.853 -28.699 -28.611 -28.590 -28.638 -28.758 -28.953 -29.226 -29.578 -30.015 -30.550 -31.193 -31.955 -32.854 -33.910 -35.149 -36.608 -38.337 -40.407 -42.926 -46.053 -50.033 -55.101 -60.349 -63.467 -63.687 -59.006 -51.912 -46.113 -41.604 -37.928 -34.818 -32.120 -29.737 -27.605 -25.676 -23.916 -22.300 -20.803 -19.403 -18.097 -16.879 -15.739 -14.671 -13.668 -12.715 -11.808 -10.954 -10.150 -9.393 -8.678 -7.991 -7.338 -6.725 -6.151 -5.609 -5.090 -4.596 -4.137 -3.712 -3.309 -2.923 -2.565 -2.240 -1.939 -1.653 -1.391 -1.160 -0.952 -0.756 -0.584 -0.443 -0.320 -0.208 -0.124 -0.071 -0.026 0.000 -0.004 -0.039 -0.060 -0.111 -0.193 -0.296 -0.413 -0.561 -0.735 -0.922 -1.126 -1.362 -1.623 -1.896 -2.193 -2.523 -2.877 -3.245 -3.638 -4.065 -4.523 -5.004 -5.511 -6.056 -6.638 -7.249 -7.885 -8.559 -9.276 -10.039 -10.843 -11.682 -12.570 -13.517 -14.526 -15.602 -16.744 -17.956 -19.259 -20.666 -22.194 -23.859 -25.689 -27.712 -29.988 -32.610 -35.728 -39.646 -45.191 -57.380 -67.638 -51.015 -47.617 -46.341 -46.116 -46.498 -46.990 -46.848 -45.582 -43.526 -41.319 -39.295 -37.538 -36.039 -34.765 -33.684 -32.768 -31.996 -31.351 -30.819 -30.390 -30.054 -29.804 -29.631 -29.532 -29.506 -29.551 -29.667 -29.851 -30.102 -30.421 -30.808 -31.263 -31.790 -32.390 -33.067 -33.825 -34.668 -35.605 -36.641 -37.785 -39.049 -40.451 -42.012 -43.757 -45.722 -47.951 -50.509 -53.485 -57.001 -61.203 -66.040 -70.038 -70.484 -68.014 -64.483 -60.849 -57.533 -54.655 -52.190 -50.078 -48.260 -46.688 -45.323 -44.136 -43.103 -42.204 -41.425 -40.756 -40.187 -39.711 -39.321 -39.014 -38.783 -38.628 -38.546 -38.535 -38.593 -38.722 -38.921 -39.191 -39.533 -39.950 -40.445 -41.021 -41.684 -42.440 -43.296 -44.262 -45.351 -46.577 -47.960 -49.524 -51.303 -53.337 -55.673 -58.355 -61.360 -64.397 -66.623 -67.385 -67.397 -67.561 -67.928 -67.552 -65.427 -62.271 -59.155 -56.414 -54.054 -52.019 -50.251 -48.702 -47.339 -46.134 -45.065 -44.116 -43.274 -42.528 -41.870 -41.293 -40.790 -40.358 -39.991 -39.687 -39.443 -39.256 -39.126 -39.049 -39.026 -39.055 -39.136 -39.269 -39.454 -39.691 -39.980 -40.324 -40.722 -41.177 -41.691 -42.267 -42.908 -43.616 -44.397 -45.255 -46.196 -47.211 -48.227 -49.242 -50.257 -51.273 -52.288 0.03 -18.0399 -17.6856 -17.3348 -16.9875 -16.6437 -16.3034 -15.9667 -15.6334 -15.3037 -14.9775 -14.6548 -14.3356 -14.0199 -13.7078 -13.3991 -13.094 -12.7924 -12.4942 -12.1997 -11.9086 -11.621 -11.337 -11.0564 -10.7794 -10.5059 -10.2359 -9.9694 -9.7064 -9.447 -9.191 -8.9386 -8.6897 -8.4443 -8.2024 -7.964 -7.7292 -7.4978 -7.27 -7.0456 -6.8248 -6.6075 -6.3938 -6.1835 -5.9768 -5.7735 -5.5738 -5.3776 -5.1849 -4.9957 -4.81 -4.6279 -4.4492 -4.2741 -4.1025 -3.9344 -3.7698 -3.6087 -3.4512 -3.2971 -3.1466 -2.9996 -2.8561 -2.7161 -2.5796 -2.4466 -2.3172 -2.1912 -2.0688 -1.9499 -1.8345 -1.7226 -1.6142 -1.5094 -1.4081 -1.3102 -1.2159 -1.1251 -1.0378 -0.95405 -0.87379 -0.79704 -0.72381 -0.65409 -0.58789 -0.5252 -0.46602 -0.41036 -0.35821 -0.30957 -0.26445 -0.22284 -0.18474 -0.15016 -0.11909 -0.091539 -0.067498 -0.046971 -0.029958 -0.016458 -0.0064723 0 0.0029586 0.0024035 -0.0016653 -0.0092478 -0.020344 -0.034954 -0.053077 -0.074714 -0.099865 -0.12853 -0.16071 -0.1964 -0.23561 -0.27832 -0.32456 -0.3743 -0.42756 -0.48434 -0.54463 -0.60843 -0.67574 -0.74657 -0.82091 -0.89877 -0.98014 -1.065 -1.1534 -1.2453 -1.3408 -1.4397 -1.5421 -1.6481 -1.7576 -1.8706 -1.9871 -2.1071 -2.2306 -2.3577 -2.4883 -2.6223 -2.7599 -2.901 -3.0456 -3.1938 -3.3454 -3.5006 -3.6592 -3.8214 -3.9871 -4.1563 -4.3291 -4.5053 -4.685 -4.8683 -5.0551 -5.2454 -5.4392 -5.6365 -5.8373 -6.0417 -6.2496 -6.4609 -6.6758 -6.8942 -7.1161 -7.3416 -7.5705 -7.803 -8.039 -8.2784 -8.5214 -8.7679 -9.018 -9.2715 -9.5286 -9.7891 -10.0532 -10.3208 -10.5919 -10.8665 -11.1447 -11.4263 -11.7115 -12.0002 -12.2924 -12.5881 -12.8873 -13.19 -13.4963 -13.806 -14.1193 -14.4361 -14.7564 -15.0802 -15.4075 -15.7384 -16.0727 -16.4106 -16.752 -17.0969 1.0 59658.3803 IW1 HV 26.72 31.67 0.050 -7.712e+09 -4.395e+09 -6.771e+09 -4.441e+09 -5.919e+09 -4.467e+09 -5.149e+09 -4.479e+09 -4.456e+09 -4.479e+09 -3.833e+09 -4.471e+09 -3.273e+09 -4.456e+09 -2.768e+09 -4.436e+09 -2.311e+09 -4.412e+09 -1.896e+09 -4.382e+09 -1.517e+09 -4.345e+09 -1.171e+09 -4.300e+09 -8.539e+08 -4.244e+09 -5.628e+08 -4.174e+09 -2.969e+08 -4.088e+09 -5.574e+07 -3.983e+09 1.617e+08 -3.859e+09 3.548e+08 -3.714e+09 5.236e+08 -3.548e+09 6.680e+08 -3.362e+09 7.873e+08 -3.155e+09 8.818e+08 -2.931e+09 9.517e+08 -2.690e+09 9.975e+08 -2.437e+09 1.020e+09 -2.174e+09 1.021e+09 -1.905e+09 1.002e+09 -1.636e+09 9.647e+08 -1.371e+09 9.124e+08 -1.115e+09 8.483e+08 -8.743e+08 7.765e+08 -6.531e+08 7.019e+08 -4.554e+08 6.305e+08 -2.834e+08 5.692e+08 -1.358e+08 5.249e+08 -5.421e+06 5.024e+08 1.208e+08 5.022e+08 2.612e+08 5.196e+08 4.343e+08 5.464e+08 6.551e+08 5.743e+08 9.325e+08 5.959e+08 1.271e+09 6.059e+08 1.671e+09 6.001e+08 2.131e+09 5.761e+08 2.644e+09 5.323e+08 3.205e+09 4.685e+08 3.804e+09 3.850e+08 4.431e+09 2.832e+08 5.075e+09 1.654e+08 5.722e+09 3.413e+07 6.359e+09 -1.071e+08 6.974e+09 -2.544e+08 7.551e+09 -4.036e+08 8.079e+09 -5.504e+08 8.546e+09 -6.902e+08 8.941e+09 -8.190e+08 9.254e+09 -9.328e+08 9.481e+09 -1.028e+09 9.614e+09 -1.102e+09 9.653e+09 -1.152e+09 9.597e+09 -1.178e+09 9.449e+09 -1.178e+09 9.214e+09 -1.153e+09 8.896e+09 -1.104e+09 8.505e+09 -1.033e+09 8.050e+09 -9.418e+08 7.542e+09 -8.345e+08 6.992e+09 -7.142e+08 6.414e+09 -5.847e+08 5.818e+09 -4.505e+08 5.217e+09 -3.155e+08 4.623e+09 -1.834e+08 4.046e+09 -5.799e+07 3.496e+09 5.788e+07 2.981e+09 1.621e+08 2.508e+09 2.530e+08 2.082e+09 3.306e+08 1.707e+09 3.963e+08 1.385e+09 4.532e+08 1.117e+09 5.065e+08 8.997e+08 5.638e+08 7.292e+08 6.335e+08 5.982e+08 7.241e+08 4.975e+08 8.424e+08 4.173e+08 9.923e+08 3.501e+08 1.176e+09 2.914e+08 1.393e+09 2.399e+08 1.644e+09 1.975e+08 1.929e+09 1.682e+08 2.248e+09 1.575e+08 2.603e+09 1.724e+08 2.996e+09 2.204e+08 3.430e+09 3.102e+08 3.909e+09 4.513e+08 4.439e+09 6.543e+08 5.026e+09 9.315e+08 5.678e+09 1.296e+09 6.403e+09 1.765e+09 7.211e+09 2.355e+09 8.111e+09 3.086e+09 9.111e+09 3.981e+09 1.022e+10 5.066e+09 1.145e+10 6.364e+09 1.280e+10 7.900e+09 1.428e+10 9.703e+09 1.588e+10 1.179e+10 1.761e+10 1.419e+10 1.947e+10 1.692e+10 2.145e+10 1.998e+10 2.353e+10 2.339e+10 2.572e+10 2.715e+10 2.799e+10 3.124e+10 3.032e+10 3.565e+10 3.271e+10 4.035e+10 3.513e+10 4.531e+10 3.756e+10 5.046e+10 3.997e+10 5.578e+10 4.235e+10 6.117e+10 4.466e+10 6.658e+10 4.689e+10 7.193e+10 4.901e+10 7.713e+10 5.100e+10 8.209e+10 5.283e+10 8.672e+10 5.449e+10 9.094e+10 5.595e+10 9.465e+10 5.720e+10 9.777e+10 5.821e+10 1.002e+11 5.898e+10 1.019e+11 5.947e+10 1.029e+11 5.969e+10 1.029e+11 5.962e+10 1.021e+11 5.924e+10 1.004e+11 5.856e+10 9.782e+10 5.756e+10 9.432e+10 5.625e+10 8.996e+10 5.462e+10 8.479e+10 5.268e+10 7.889e+10 5.045e+10 7.234e+10 4.793e+10 6.527e+10 4.515e+10 5.780e+10 4.215e+10 5.009e+10 3.897e+10 4.231e+10 3.566e+10 3.464e+10 3.230e+10 2.726e+10 2.897e+10 2.035e+10 2.582e+10 1.406e+10 2.302e+10 8.486e+09 2.077e+10 3.570e+09 1.931e+10 -9.384e+08 1.880e+10 -5.563e+09 1.925e+10 -1.102e+10 2.052e+10 -1.808e+10 2.234e+10 -2.738e+10 2.449e+10 -3.943e+10 2.674e+10 -5.455e+10 2.899e+10 -7.299e+10 3.113e+10 -9.492e+10 3.314e+10 -1.204e+11 3.500e+10 -1.494e+11 3.677e+10 -1.820e+11 3.848e+10 -2.179e+11 4.024e+10 -2.571e+11 4.216e+10 -2.991e+11 4.438e+10 -3.437e+11 4.707e+10 -3.904e+11 5.041e+10 -4.388e+11 5.462e+10 -4.882e+11 5.992e+10 -5.381e+11 6.653e+10 -5.879e+11 7.471e+10 -6.368e+11 8.469e+10 -6.841e+11 9.672e+10 -7.293e+11 1.110e+11 -7.715e+11 1.278e+11 -8.102e+11 1.474e+11 -8.448e+11 1.698e+11 -8.748e+11 1.953e+11 -8.997e+11 2.241e+11 -9.194e+11 2.564e+11 -9.336e+11 2.922e+11 -9.422e+11 3.319e+11 -9.455e+11 3.756e+11 -9.437e+11 4.238e+11 -9.371e+11 4.771e+11 -9.264e+11 5.363e+11 -9.122e+11 6.024e+11 -8.950e+11 6.770e+11 -8.756e+11 7.619e+11 -8.545e+11 8.595e+11 -8.319e+11 9.727e+11 -8.078e+11 1.105e+12 -7.818e+11 1.261e+12 -7.531e+11 1.444e+12 -7.201e+11 1.659e+12 -6.812e+11 1.913e+12 -6.340e+11 2.210e+12 -5.758e+11 2.556e+12 -5.039e+11 2.957e+12 -4.151e+11 3.420e+12 -3.064e+11 3.951e+12 -1.748e+11 4.556e+12 -1.713e+10 5.243e+12 1.693e+11 6.018e+12 3.869e+11 6.888e+12 6.381e+11 7.861e+12 9.249e+11 8.942e+12 1.248e+12 1.121e+13 1.779e+12 1.265e+13 2.219e+12 1.423e+13 2.699e+12 1.597e+13 3.220e+12 1.785e+13 3.779e+12 1.989e+13 4.374e+12 2.209e+13 5.002e+12 2.446e+13 5.658e+12 2.701e+13 6.338e+12 2.972e+13 7.035e+12 3.261e+13 7.745e+12 3.568e+13 8.455e+12 3.894e+13 9.163e+12 4.237e+13 9.857e+12 4.597e+13 1.053e+13 4.976e+13 1.117e+13 5.371e+13 1.177e+13 5.784e+13 1.232e+13 6.214e+13 1.279e+13 6.657e+13 1.318e+13 7.115e+13 1.349e+13 7.588e+13 1.369e+13 8.073e+13 1.378e+13 8.571e+13 1.374e+13 9.078e+13 1.355e+13 9.594e+13 1.321e+13 1.012e+14 1.271e+13 1.065e+14 1.203e+13 1.119e+14 1.116e+13 1.172e+14 1.011e+13 1.226e+14 8.844e+12 1.280e+14 7.364e+12 1.334e+14 5.665e+12 1.387e+14 3.736e+12 1.439e+14 1.576e+12 1.492e+14 -8.220e+11 1.542e+14 -3.463e+12 1.592e+14 -6.347e+12 1.640e+14 -9.475e+12 1.686e+14 -1.285e+13 1.731e+14 -1.648e+13 1.774e+14 -2.033e+13 1.815e+14 -2.444e+13 1.853e+14 -2.877e+13 1.889e+14 -3.334e+13 1.922e+14 -3.813e+13 1.953e+14 -4.314e+13 1.981e+14 -4.835e+13 2.005e+14 -5.377e+13 2.025e+14 -5.936e+13 2.043e+14 -6.514e+13 2.057e+14 -7.109e+13 2.069e+14 -7.718e+13 2.076e+14 -8.341e+13 2.078e+14 -8.977e+13 2.078e+14 -9.627e+13 2.075e+14 -1.029e+14 2.067e+14 -1.096e+14 2.056e+14 -1.163e+14 2.040e+14 -1.231e+14 2.021e+14 -1.299e+14 1.998e+14 -1.368e+14 1.970e+14 -1.436e+14 1.940e+14 -1.505e+14 1.905e+14 -1.573e+14 1.867e+14 -1.641e+14 1.825e+14 -1.708e+14 1.779e+14 -1.774e+14 1.730e+14 -1.840e+14 1.679e+14 -1.905e+14 1.623e+14 -1.968e+14 1.564e+14 -2.031e+14 1.502e+14 -2.092e+14 1.437e+14 -2.152e+14 1.369e+14 -2.209e+14 1.298e+14 -2.266e+14 1.225e+14 -2.320e+14 1.149e+14 -2.373e+14 1.071e+14 -2.423e+14 9.897e+13 -2.472e+14 9.066e+13 -2.519e+14 8.213e+13 -2.563e+14 7.341e+13 -2.605e+14 6.449e+13 -2.645e+14 5.538e+13 -2.683e+14 4.611e+13 -2.718e+14 3.668e+13 -2.750e+14 2.709e+13 -2.780e+14 1.737e+13 -2.807e+14 7.538e+12 -2.832e+14 -2.421e+12 -2.854e+14 -1.247e+13 -2.873e+14 -2.259e+13 -2.888e+14 -3.281e+13 -2.902e+14 -4.187e+13 -2.923e+14 -5.158e+13 -2.939e+14 -6.193e+13 -2.945e+14 -7.230e+13 -2.946e+14 -8.265e+13 -2.946e+14 -9.298e+13 -2.942e+14 -1.033e+14 -2.935e+14 -1.135e+14 -2.925e+14 -1.236e+14 -2.912e+14 -1.336e+14 -2.896e+14 -1.436e+14 -2.876e+14 -1.534e+14 -2.854e+14 -1.629e+14 -2.827e+14 -1.724e+14 -2.797e+14 -1.815e+14 -2.765e+14 -1.904e+14 -2.730e+14 -1.991e+14 -2.692e+14 -2.074e+14 -2.650e+14 -2.154e+14 -2.605e+14 -2.231e+14 -2.559e+14 -2.304e+14 -2.508e+14 -2.373e+14 -2.456e+14 -2.438e+14 -2.401e+14 -2.499e+14 -2.343e+14 -2.554e+14 -2.284e+14 -2.605e+14 -2.222e+14 -2.651e+14 -2.159e+14 -2.692e+14 -2.094e+14 -2.728e+14 -2.027e+14 -2.758e+14 -1.960e+14 -2.783e+14 -1.891e+14 -2.802e+14 -1.821e+14 -2.815e+14 -1.751e+14 -2.823e+14 -1.680e+14 -2.825e+14 -1.608e+14 -2.822e+14 -1.538e+14 -2.812e+14 -1.466e+14 -2.798e+14 -1.396e+14 -2.779e+14 -1.326e+14 -2.753e+14 -1.257e+14 -2.723e+14 -1.189e+14 -2.689e+14 -1.123e+14 -2.649e+14 -1.057e+14 -2.606e+14 -9.943e+13 -2.559e+14 -9.319e+13 -2.507e+14 -8.718e+13 -2.451e+14 -8.137e+13 -2.392e+14 -7.577e+13 -2.329e+14 -7.038e+13 -2.264e+14 -6.522e+13 -2.196e+14 -6.030e+13 -2.126e+14 -5.561e+13 -2.053e+14 -5.118e+13 -1.980e+14 -4.698e+13 -1.904e+14 -4.304e+13 -1.828e+14 -3.933e+13 -1.752e+14 -3.587e+13 -1.675e+14 -3.265e+13 -1.597e+14 -2.967e+13 -1.520e+14 -2.691e+13 -1.444e+14 -2.437e+13 -1.369e+14 -2.204e+13 -1.294e+14 -1.991e+13 -1.220e+14 -1.799e+13 -1.148e+14 -1.624e+13 -1.078e+14 -1.465e+13 -1.009e+14 -1.324e+13 -9.426e+13 -1.197e+13 -8.787e+13 -1.084e+13 -8.168e+13 -9.841e+12 -7.572e+13 -8.954e+12 -7.002e+13 -8.170e+12 -6.456e+13 -7.481e+12 -5.938e+13 -6.874e+12 -5.445e+13 -6.342e+12 -4.979e+13 -5.876e+12 -4.538e+13 -5.466e+12 -4.126e+13 -5.106e+12 -3.738e+13 -4.787e+12 -3.376e+13 -4.504e+12 -3.040e+13 -4.251e+12 -2.729e+13 -4.027e+12 -2.441e+13 -3.823e+12 -2.385e+13 -3.984e+12 -2.121e+13 -3.795e+12 -1.878e+13 -3.616e+12 -1.658e+13 -3.445e+12 -1.457e+13 -3.280e+12 -1.276e+13 -3.120e+12 -1.112e+13 -2.963e+12 -9.662e+12 -2.810e+12 -8.355e+12 -2.660e+12 -7.195e+12 -2.513e+12 -6.171e+12 -2.369e+12 -5.269e+12 -2.228e+12 -4.480e+12 -2.092e+12 -3.794e+12 -1.959e+12 -3.199e+12 -1.832e+12 -2.686e+12 -1.711e+12 -2.247e+12 -1.595e+12 -1.872e+12 -1.486e+12 -1.554e+12 -1.383e+12 -1.284e+12 -1.287e+12 -1.056e+12 -1.198e+12 -8.646e+11 -1.114e+12 -7.036e+11 -1.037e+12 -5.683e+11 -9.642e+11 -4.549e+11 -8.961e+11 -3.600e+11 -8.317e+11 -2.807e+11 -7.701e+11 -2.146e+11 -7.109e+11 -1.600e+11 -6.534e+11 -1.153e+11 -5.971e+11 -7.915e+10 -5.419e+11 -5.055e+10 -4.877e+11 -2.849e+10 -4.344e+11 -1.214e+10 -3.823e+11 -7.245e+08 -3.318e+11 6.548e+09 -2.831e+11 1.040e+10 -2.368e+11 1.153e+10 -1.934e+11 1.064e+10 -1.534e+11 8.405e+09 -1.173e+11 5.475e+09 -8.548e+10 2.426e+09 -5.842e+10 -2.173e+08 -3.646e+10 -2.032e+09 -1.984e+10 -2.816e+09 -8.690e+09 -3.194e+09 -2.616e+09 -5.209e+09 1.323e+09 -1.012e+10 7.551e+09 -1.784e+10 1.831e+10 -2.811e+10 3.383e+10 -4.087e+10 5.387e+10 -5.601e+10 7.800e+10 -7.337e+10 1.057e+11 -9.280e+10 1.366e+11 -1.141e+11 1.700e+11 -1.369e+11 2.053e+11 -1.610e+11 2.421e+11 -1.861e+11 2.796e+11 -2.118e+11 3.173e+11 -2.379e+11 3.547e+11 -2.638e+11 3.913e+11 -2.894e+11 4.264e+11 -3.143e+11 4.597e+11 -3.381e+11 4.907e+11 -3.605e+11 5.190e+11 -3.813e+11 5.443e+11 -4.002e+11 5.664e+11 -4.170e+11 5.850e+11 -4.315e+11 5.999e+11 -4.435e+11 6.110e+11 -4.528e+11 6.182e+11 -4.595e+11 6.215e+11 -4.634e+11 6.210e+11 -4.646e+11 6.166e+11 -4.630e+11 6.086e+11 -4.587e+11 5.971e+11 -4.519e+11 5.823e+11 -4.426e+11 5.645e+11 -4.311e+11 5.441e+11 -4.176e+11 5.212e+11 -4.021e+11 4.963e+11 -3.850e+11 4.695e+11 -3.664e+11 4.413e+11 -3.466e+11 4.121e+11 -3.259e+11 3.822e+11 -3.045e+11 3.520e+11 -2.826e+11 3.218e+11 -2.606e+11 2.920e+11 -2.387e+11 2.629e+11 -2.171e+11 2.347e+11 -1.959e+11 2.077e+11 -1.755e+11 1.822e+11 -1.558e+11 1.583e+11 -1.372e+11 1.361e+11 -1.197e+11 1.157e+11 -1.033e+11 9.721e+10 -8.823e+10 8.062e+10 -7.445e+10 6.594e+10 -6.198e+10 5.309e+10 -5.082e+10 4.200e+10 -4.096e+10 3.259e+10 -3.236e+10 2.472e+10 -2.496e+10 1.827e+10 -1.871e+10 1.309e+10 -1.353e+10 9.031e+09 -9.328e+09 5.944e+09 -6.036e+09 3.680e+09 -3.558e+09 2.095e+09 -1.808e+09 1.053e+09 -7.015e+08 4.324e+08 -1.497e+08 1.218e+08 8.792e+07 2.408e+07 4.445e+08 2.635e+06 1.145e+09 -3.758e+07 2.141e+09 -4.773e+07 3.385e+09 2.804e+07 4.840e+09 2.382e+08 6.475e+09 6.251e+08 8.266e+09 1.226e+09 1.020e+10 2.076e+09 1.226e+10 3.210e+09 1.445e+10 4.657e+09 1.675e+10 6.453e+09 1.917e+10 8.631e+09 2.170e+10 1.122e+10 2.433e+10 1.426e+10 2.707e+10 1.778e+10 2.990e+10 2.180e+10 3.282e+10 2.635e+10 3.581e+10 3.145e+10 3.885e+10 3.710e+10 4.193e+10 4.332e+10 4.503e+10 5.009e+10 4.812e+10 5.740e+10 5.118e+10 6.522e+10 5.420e+10 7.351e+10 5.713e+10 8.222e+10 5.996e+10 9.128e+10 6.266e+10 1.006e+11 6.521e+10 1.102e+11 6.757e+10 1.199e+11 6.974e+10 1.296e+11 7.168e+10 1.392e+11 7.337e+10 1.486e+11 7.480e+10 1.577e+11 7.595e+10 1.663e+11 7.681e+10 1.745e+11 7.737e+10 1.821e+11 7.761e+10 1.889e+11 7.754e+10 1.949e+11 7.715e+10 2.001e+11 7.645e+10 2.042e+11 7.544e+10 2.074e+11 7.414e+10 2.096e+11 7.256e+10 2.106e+11 7.072e+10 2.107e+11 6.864e+10 2.096e+11 6.634e+10 2.075e+11 6.385e+10 2.045e+11 6.119e+10 2.005e+11 5.840e+10 1.955e+11 5.550e+10 1.898e+11 5.252e+10 1.832e+11 4.948e+10 1.760e+11 4.643e+10 1.682e+11 4.338e+10 1.599e+11 4.035e+10 1.512e+11 3.738e+10 1.421e+11 3.447e+10 1.329e+11 3.164e+10 1.235e+11 2.892e+10 1.140e+11 2.631e+10 1.046e+11 2.383e+10 9.535e+10 2.147e+10 8.627e+10 1.925e+10 7.745e+10 1.716e+10 6.896e+10 1.521e+10 6.085e+10 1.340e+10 5.317e+10 1.172e+10 4.596e+10 1.018e+10 3.925e+10 8.766e+09 3.307e+10 7.477e+09 2.744e+10 6.309e+09 2.237e+10 5.256e+09 1.785e+10 4.315e+09 1.390e+10 3.480e+09 1.050e+10 2.746e+09 7.633e+09 2.109e+09 5.278e+09 1.564e+09 3.411e+09 1.108e+09 1.999e+09 7.382e+08 1.006e+09 4.608e+08 3.842e+08 2.960e+08 4.732e+07 2.617e+08 -1.801e+08 3.099e+08 -5.168e+08 3.633e+08 -1.043e+09 3.948e+08 -1.738e+09 4.017e+08 -2.562e+09 3.878e+08 -3.478e+09 3.593e+08 -4.447e+09 3.229e+08 -5.434e+09 2.852e+08 -6.408e+09 2.527e+08 -7.343e+09 2.311e+08 -8.213e+09 2.261e+08 -8.996e+09 2.414e+08 -9.681e+09 2.803e+08 -1.025e+10 3.449e+08 -1.071e+10 4.362e+08 -1.104e+10 5.542e+08 -1.125e+10 6.981e+08 -1.134e+10 8.662e+08 -1.132e+10 1.056e+09 -1.119e+10 1.264e+09 -1.096e+10 1.487e+09 -1.064e+10 1.721e+09 -1.026e+10 1.962e+09 -9.807e+09 2.209e+09 -9.309e+09 0.005 -51.343 -50.482 -49.621 -48.759 -47.898 -47.037 -46.176 -45.385 -44.675 -44.042 -43.480 -42.986 -42.558 -42.195 -41.892 -41.650 -41.467 -41.342 -41.276 -41.269 -41.321 -41.434 -41.609 -41.848 -42.154 -42.530 -42.980 -43.510 -44.126 -44.835 -45.648 -46.577 -47.638 -48.853 -50.249 -51.869 -53.770 -56.049 -58.869 -62.562 -68.009 -80.353 -78.181 -71.670 -68.571 -67.533 -67.530 -67.721 -66.653 -63.843 -60.519 -57.483 -54.858 -52.599 -50.640 -48.927 -47.418 -46.082 -44.896 -43.839 -42.899 -42.064 -41.324 -40.673 -40.105 -39.614 -39.198 -38.854 -38.579 -38.372 -38.233 -38.160 -38.155 -38.217 -38.349 -38.551 -38.828 -39.181 -39.616 -40.137 -40.752 -41.466 -42.291 -43.237 -44.320 -45.555 -46.963 -48.568 -50.398 -52.476 -54.799 -57.302 -59.804 -62.047 -63.976 -65.860 -67.221 -65.706 -61.252 -56.863 -53.224 -50.197 -47.627 -45.405 -43.457 -41.732 -40.193 -38.813 -37.570 -36.450 -35.440 -34.529 -33.706 -32.966 -32.306 -31.721 -31.208 -30.766 -30.392 -30.084 -29.844 -29.669 -29.562 -29.522 -29.552 -29.654 -29.834 -30.093 -30.436 -30.866 -31.390 -32.023 -32.778 -33.671 -34.722 -35.959 -37.417 -39.145 -41.206 -43.678 -46.628 -49.944 -52.923 -54.567 -55.272 -56.636 -57.915 -54.561 -48.406 -43.259 -39.220 -35.895 -33.056 -30.574 -28.367 -26.381 -24.574 -22.919 -21.393 -19.975 -18.645 -17.402 -16.239 -15.150 -14.128 -13.166 -12.249 -11.376 -10.552 -9.777 -9.046 -8.355 -7.690 -7.059 -6.465 -5.909 -5.385 -4.883 -4.406 -3.963 -3.553 -3.164 -2.791 -2.446 -2.132 -1.843 -1.567 -1.316 -1.095 -0.897 -0.710 -0.547 -0.414 -0.298 -0.191 -0.111 -0.062 -0.022 0.000 -0.008 -0.047 -0.077 -0.138 -0.228 -0.338 -0.458 -0.608 -0.786 -0.977 -1.187 -1.428 -1.694 -1.970 -2.271 -2.603 -2.960 -3.332 -3.728 -4.159 -4.620 -5.104 -5.614 -6.160 -6.745 -7.358 -7.999 -8.676 -9.398 -10.165 -10.974 -11.817 -12.710 -13.662 -14.676 -15.758 -16.905 -18.122 -19.431 -20.844 -22.378 -24.051 -25.890 -27.922 -30.209 -32.844 -35.978 -39.916 -45.488 -57.713 -68.021 -51.472 -48.186 -47.091 -47.176 -48.089 -49.329 -49.610 -47.921 -45.099 -42.350 -40.019 -38.088 -36.485 -35.146 -34.022 -33.078 -32.287 -31.628 -31.087 -30.651 -30.311 -30.060 -29.886 -29.786 -29.761 -29.808 -29.927 -30.114 -30.369 -30.691 -31.082 -31.543 -32.074 -32.679 -33.359 -34.120 -34.965 -35.899 -36.930 -38.062 -39.304 -40.670 -42.174 -43.830 -45.657 -47.674 -49.907 -52.390 -55.173 -58.320 -61.737 -64.048 -62.953 -59.724 -56.423 -53.581 -51.151 -49.050 -47.215 -45.601 -44.176 -42.914 -41.794 -40.803 -39.924 -39.147 -38.464 -37.869 -37.354 -36.915 -36.548 -36.249 -36.016 -35.845 -35.736 -35.687 -35.696 -35.764 -35.890 -36.074 -36.316 -36.618 -36.981 -37.406 -37.896 -38.454 -39.083 -39.788 -40.573 -41.445 -42.412 -43.482 -44.669 -45.986 -47.453 -49.092 -50.935 -53.021 -55.405 -58.156 -61.355 -65.059 -69.056 -72.455 -74.331 -75.052 -74.039 -70.434 -66.183 -62.492 -59.433 -56.880 -54.721 -52.871 -51.271 -49.877 -48.658 -47.588 -46.650 -45.827 -45.109 -44.485 -43.948 -43.493 -43.112 -42.803 -42.562 -42.386 -42.273 -42.221 -42.229 -42.296 -42.422 -42.607 -42.851 -43.154 -43.519 -43.946 -44.438 -44.999 -45.630 -46.337 -47.123 -47.995 -48.961 -50.010 -51.058 -52.107 -53.155 -54.204 -55.252 0.03 -18.7983 -18.4273 -18.06 -17.6963 -17.3364 -16.9801 -16.6276 -16.2787 -15.9336 -15.5921 -15.2544 -14.9203 -14.59 -14.2633 -13.9403 -13.6211 -13.3055 -12.9936 -12.6855 -12.381 -12.0802 -11.7831 -11.4898 -11.2001 -10.9141 -10.6318 -10.3532 -10.0783 -9.8072 -9.5397 -9.2759 -9.0158 -8.7594 -8.5067 -8.2577 -8.0124 -7.7708 -7.5329 -7.2987 -7.0681 -6.8413 -6.6182 -6.3988 -6.1831 -5.9711 -5.7627 -5.5581 -5.3572 -5.16 -4.9664 -4.7766 -4.5905 -4.408 -4.2293 -4.0542 -3.8829 -3.7153 -3.5513 -3.3911 -3.2345 -3.0817 -2.9325 -2.7871 -2.6453 -2.5072 -2.3729 -2.2422 -2.1152 -1.992 -1.8724 -1.7565 -1.6444 -1.5359 -1.4311 -1.33 -1.2327 -1.139 -1.049 -0.9627 -0.88011 -0.80122 -0.72603 -0.65453 -0.58674 -0.52264 -0.46224 -0.40553 -0.35253 -0.30322 -0.25762 -0.21571 -0.17749 -0.14298 -0.11216 -0.085047 -0.061627 -0.041906 -0.025882 -0.013557 -0.0049293 0 0.0012313 -0.0012355 -0.0074004 -0.017263 -0.030824 -0.048083 -0.06904 -0.093696 -0.12205 -0.1541 -0.18985 -0.2293 -0.27244 -0.31929 -0.36983 -0.42407 -0.482 -0.54364 -0.60897 -0.67801 -0.75074 -0.82716 -0.90729 -0.99111 -1.0786 -1.1699 -1.2648 -1.3634 -1.4657 -1.5717 -1.6814 -1.7948 -1.9119 -2.0327 -2.1573 -2.2855 -2.4174 -2.5529 -2.6922 -2.8352 -2.9819 -3.1323 -3.2864 -3.4442 -3.6057 -3.7709 -3.9397 -4.1123 -4.2886 -4.4686 -4.6522 -4.8396 -5.0307 -5.2254 -5.4239 -5.6261 -5.8319 -6.0415 -6.2547 -6.4717 -6.6923 -6.9167 -7.1447 -7.3765 -7.6119 -7.8511 -8.0939 -8.3405 -8.5907 -8.8446 -9.1023 -9.3636 -9.6286 -9.8973 -10.1698 -10.4459 -10.7257 -11.0092 -11.2965 -11.5874 -11.882 -12.1803 -12.4823 -12.788 -13.0974 -13.4105 -13.7273 -14.0478 -14.372 -14.6999 -15.0315 -15.3668 -15.7058 -16.0485 -16.3949 -16.745 -17.0987 -17.4562 -17.8174 -18.1823 1.0 59658.3803 IW1 VV 26.72 31.67 0.050 -8.338e+09 5.696e+09 -8.016e+09 4.746e+09 -7.712e+09 3.889e+09 -7.426e+09 3.116e+09 -7.158e+09 2.420e+09 -6.907e+09 1.792e+09 -6.672e+09 1.225e+09 -6.447e+09 7.125e+08 -6.230e+09 2.484e+08 -6.017e+09 -1.717e+08 -5.804e+09 -5.516e+08 -5.586e+09 -8.925e+08 -5.361e+09 -1.196e+09 -5.125e+09 -1.463e+09 -4.878e+09 -1.693e+09 -4.617e+09 -1.885e+09 -4.342e+09 -2.040e+09 -4.055e+09 -2.157e+09 -3.755e+09 -2.237e+09 -3.446e+09 -2.281e+09 -3.129e+09 -2.290e+09 -2.808e+09 -2.265e+09 -2.485e+09 -2.209e+09 -2.165e+09 -2.123e+09 -1.851e+09 -2.012e+09 -1.546e+09 -1.879e+09 -1.257e+09 -1.727e+09 -9.851e+08 -1.562e+09 -7.355e+08 -1.388e+09 -5.113e+08 -1.212e+09 -3.149e+08 -1.039e+09 -1.472e+08 -8.752e+08 -6.845e+06 -7.273e+08 1.113e+08 -6.008e+08 2.177e+08 -4.988e+08 3.275e+08 -4.198e+08 4.582e+08 -3.555e+08 6.250e+08 -2.930e+08 8.379e+08 -2.179e+08 1.101e+09 -1.179e+08 1.415e+09 1.616e+07 1.776e+09 1.897e+08 2.182e+09 4.056e+08 2.625e+09 6.643e+08 3.099e+09 9.642e+08 3.595e+09 1.302e+09 4.105e+09 1.672e+09 4.618e+09 2.068e+09 5.125e+09 2.483e+09 5.614e+09 2.906e+09 6.077e+09 3.330e+09 6.502e+09 3.742e+09 6.880e+09 4.133e+09 7.204e+09 4.494e+09 7.465e+09 4.814e+09 7.658e+09 5.086e+09 7.781e+09 5.302e+09 7.829e+09 5.456e+09 7.803e+09 5.545e+09 7.704e+09 5.567e+09 7.536e+09 5.521e+09 7.305e+09 5.411e+09 7.015e+09 5.239e+09 6.674e+09 5.010e+09 6.291e+09 4.732e+09 5.874e+09 4.411e+09 5.433e+09 4.057e+09 4.978e+09 3.679e+09 4.517e+09 3.286e+09 4.059e+09 2.888e+09 3.614e+09 2.493e+09 3.186e+09 2.110e+09 2.783e+09 1.747e+09 2.409e+09 1.409e+09 2.069e+09 1.100e+09 1.765e+09 8.255e+08 1.501e+09 5.861e+08 1.276e+09 3.815e+08 1.092e+09 2.096e+08 9.489e+08 6.518e+07 8.466e+08 -5.976e+07 7.833e+08 -1.750e+08 7.560e+08 -2.916e+08 7.612e+08 -4.194e+08 7.957e+08 -5.653e+08 8.577e+08 -7.335e+08 9.475e+08 -9.257e+08 1.067e+09 -1.141e+09 1.221e+09 -1.379e+09 1.414e+09 -1.636e+09 1.653e+09 -1.912e+09 1.947e+09 -2.203e+09 2.305e+09 -2.508e+09 2.738e+09 -2.824e+09 3.258e+09 -3.149e+09 3.880e+09 -3.480e+09 4.619e+09 -3.813e+09 5.493e+09 -4.146e+09 6.524e+09 -4.473e+09 7.730e+09 -4.788e+09 9.137e+09 -5.083e+09 1.077e+10 -5.350e+09 1.265e+10 -5.576e+09 1.480e+10 -5.751e+09 1.725e+10 -5.859e+09 2.002e+10 -5.887e+09 2.312e+10 -5.820e+09 2.656e+10 -5.643e+09 3.036e+10 -5.341e+09 3.452e+10 -4.904e+09 3.902e+10 -4.321e+09 4.386e+10 -3.585e+09 4.900e+10 -2.695e+09 5.443e+10 -1.651e+09 6.008e+10 -4.605e+08 6.591e+10 8.630e+08 7.187e+10 2.303e+09 7.787e+10 3.837e+09 8.383e+10 5.434e+09 8.968e+10 7.065e+09 9.532e+10 8.691e+09 1.007e+11 1.027e+10 1.056e+11 1.177e+10 1.101e+11 1.314e+10 1.140e+11 1.435e+10 1.172e+11 1.535e+10 1.197e+11 1.611e+10 1.214e+11 1.661e+10 1.222e+11 1.681e+10 1.222e+11 1.669e+10 1.212e+11 1.626e+10 1.192e+11 1.550e+10 1.163e+11 1.442e+10 1.125e+11 1.305e+10 1.078e+11 1.139e+10 1.023e+11 9.495e+09 9.603e+10 7.396e+09 8.909e+10 5.144e+09 8.159e+10 2.796e+09 7.369e+10 4.172e+08 6.551e+10 -1.930e+09 5.722e+10 -4.179e+09 4.901e+10 -6.261e+09 4.106e+10 -8.125e+09 3.355e+10 -9.738e+09 2.670e+10 -1.111e+10 2.066e+10 -1.232e+10 1.550e+10 -1.357e+10 1.118e+10 -1.517e+10 7.385e+09 -1.756e+10 3.592e+09 -2.120e+10 -8.542e+08 -2.643e+10 -6.584e+09 -3.346e+10 -1.410e+10 -4.242e+10 -2.373e+10 -5.336e+10 -3.575e+10 -6.635e+10 -5.028e+10 -8.143e+10 -6.738e+10 -9.863e+10 -8.705e+10 -1.180e+11 -1.092e+11 -1.395e+11 -1.337e+11 -1.630e+11 -1.603e+11 -1.886e+11 -1.887e+11 -2.162e+11 -2.185e+11 -2.455e+11 -2.493e+11 -2.764e+11 -2.806e+11 -3.088e+11 -3.117e+11 -3.423e+11 -3.422e+11 -3.768e+11 -3.712e+11 -4.118e+11 -3.982e+11 -4.472e+11 -4.225e+11 -4.825e+11 -4.433e+11 -5.174e+11 -4.600e+11 -5.516e+11 -4.720e+11 -5.849e+11 -4.789e+11 -6.169e+11 -4.800e+11 -6.473e+11 -4.751e+11 -6.762e+11 -4.640e+11 -7.034e+11 -4.465e+11 -7.288e+11 -4.227e+11 -7.528e+11 -3.925e+11 -7.755e+11 -3.562e+11 -7.975e+11 -3.139e+11 -8.194e+11 -2.656e+11 -8.422e+11 -2.114e+11 -8.672e+11 -1.508e+11 -8.958e+11 -8.292e+10 -9.297e+11 -6.532e+09 -9.708e+11 8.050e+10 -1.021e+12 1.810e+11 -1.083e+12 2.983e+11 -1.158e+12 4.370e+11 -1.248e+12 6.021e+11 -1.357e+12 7.987e+11 -1.484e+12 1.033e+12 -1.632e+12 1.311e+12 -1.803e+12 1.640e+12 -1.998e+12 2.026e+12 -2.219e+12 2.476e+12 -2.468e+12 2.996e+12 -2.747e+12 3.594e+12 -3.059e+12 4.276e+12 -3.406e+12 5.049e+12 -3.790e+12 5.921e+12 -4.216e+12 6.898e+12 -4.686e+12 7.985e+12 -5.203e+12 1.011e+13 -6.349e+12 1.156e+13 -7.029e+12 1.315e+13 -7.774e+12 1.488e+13 -8.589e+12 1.675e+13 -9.479e+12 1.878e+13 -1.045e+13 2.095e+13 -1.151e+13 2.330e+13 -1.266e+13 2.579e+13 -1.392e+13 2.844e+13 -1.528e+13 3.125e+13 -1.675e+13 3.421e+13 -1.834e+13 3.732e+13 -2.005e+13 4.057e+13 -2.192e+13 4.396e+13 -2.391e+13 4.749e+13 -2.604e+13 5.114e+13 -2.834e+13 5.489e+13 -3.080e+13 5.876e+13 -3.341e+13 6.271e+13 -3.621e+13 6.672e+13 -3.917e+13 7.080e+13 -4.233e+13 7.490e+13 -4.565e+13 7.903e+13 -4.917e+13 8.316e+13 -5.287e+13 8.729e+13 -5.676e+13 9.136e+13 -6.084e+13 9.539e+13 -6.511e+13 9.932e+13 -6.956e+13 1.032e+14 -7.419e+13 1.069e+14 -7.900e+13 1.105e+14 -8.398e+13 1.139e+14 -8.913e+13 1.172e+14 -9.444e+13 1.202e+14 -9.990e+13 1.230e+14 -1.055e+14 1.256e+14 -1.113e+14 1.280e+14 -1.171e+14 1.301e+14 -1.231e+14 1.320e+14 -1.291e+14 1.334e+14 -1.353e+14 1.346e+14 -1.416e+14 1.355e+14 -1.478e+14 1.361e+14 -1.542e+14 1.364e+14 -1.606e+14 1.362e+14 -1.670e+14 1.358e+14 -1.734e+14 1.349e+14 -1.798e+14 1.337e+14 -1.863e+14 1.322e+14 -1.927e+14 1.302e+14 -1.990e+14 1.279e+14 -2.053e+14 1.253e+14 -2.116e+14 1.221e+14 -2.177e+14 1.187e+14 -2.238e+14 1.148e+14 -2.297e+14 1.107e+14 -2.356e+14 1.061e+14 -2.414e+14 1.012e+14 -2.471e+14 9.588e+13 -2.525e+14 9.021e+13 -2.577e+14 8.417e+13 -2.628e+14 7.779e+13 -2.677e+14 7.105e+13 -2.724e+14 6.399e+13 -2.769e+14 5.659e+13 -2.811e+14 4.888e+13 -2.850e+14 4.088e+13 -2.887e+14 3.258e+13 -2.920e+14 2.400e+13 -2.951e+14 1.517e+13 -2.979e+14 6.093e+12 -3.005e+14 -3.225e+12 -3.026e+14 -1.275e+13 -3.045e+14 -2.247e+13 -3.060e+14 -3.238e+13 -3.072e+14 -4.245e+13 -3.080e+14 -5.266e+13 -3.086e+14 -6.301e+13 -3.088e+14 -7.346e+13 -3.086e+14 -8.401e+13 -3.080e+14 -9.464e+13 -3.072e+14 -1.054e+14 -3.060e+14 -1.161e+14 -3.045e+14 -1.268e+14 -3.026e+14 -1.375e+14 -3.004e+14 -1.483e+14 -2.978e+14 -1.591e+14 -2.950e+14 -1.698e+14 -2.918e+14 -1.804e+14 -2.883e+14 -1.910e+14 -2.844e+14 -2.015e+14 -2.803e+14 -2.118e+14 -2.759e+14 -2.221e+14 -2.712e+14 -2.342e+14 -2.641e+14 -2.420e+14 -2.631e+14 -2.517e+14 -2.575e+14 -2.614e+14 -2.517e+14 -2.708e+14 -2.456e+14 -2.800e+14 -2.393e+14 -2.890e+14 -2.326e+14 -2.977e+14 -2.259e+14 -3.062e+14 -2.188e+14 -3.143e+14 -2.116e+14 -3.223e+14 -2.041e+14 -3.298e+14 -1.966e+14 -3.369e+14 -1.887e+14 -3.438e+14 -1.808e+14 -3.502e+14 -1.726e+14 -3.562e+14 -1.643e+14 -3.618e+14 -1.560e+14 -3.669e+14 -1.475e+14 -3.715e+14 -1.390e+14 -3.757e+14 -1.304e+14 -3.794e+14 -1.217e+14 -3.825e+14 -1.130e+14 -3.851e+14 -1.045e+14 -3.871e+14 -9.582e+13 -3.887e+14 -8.725e+13 -3.895e+14 -7.876e+13 -3.899e+14 -7.038e+13 -3.896e+14 -6.211e+13 -3.888e+14 -5.401e+13 -3.874e+14 -4.608e+13 -3.854e+14 -3.835e+13 -3.828e+14 -3.085e+13 -3.796e+14 -2.358e+13 -3.760e+14 -1.660e+13 -3.717e+14 -9.892e+12 -3.669e+14 -3.490e+12 -3.616e+14 2.586e+12 -3.558e+14 8.328e+12 -3.496e+14 1.373e+13 -3.430e+14 1.876e+13 -3.359e+14 2.344e+13 -3.285e+14 2.774e+13 -3.207e+14 3.168e+13 -3.126e+14 3.525e+13 -3.042e+14 3.844e+13 -2.956e+14 4.125e+13 -2.867e+14 4.369e+13 -2.777e+14 4.577e+13 -2.685e+14 4.749e+13 -2.592e+14 4.888e+13 -2.498e+14 4.992e+13 -2.403e+14 5.065e+13 -2.307e+14 5.107e+13 -2.211e+14 5.121e+13 -2.116e+14 5.108e+13 -2.022e+14 5.068e+13 -1.928e+14 5.006e+13 -1.835e+14 4.921e+13 -1.743e+14 4.816e+13 -1.652e+14 4.693e+13 -1.563e+14 4.555e+13 -1.477e+14 4.402e+13 -1.392e+14 4.237e+13 -1.310e+14 4.062e+13 -1.229e+14 3.877e+13 -1.152e+14 3.687e+13 -1.077e+14 3.492e+13 -1.004e+14 3.292e+13 -9.346e+13 3.092e+13 -8.674e+13 2.891e+13 -8.034e+13 2.691e+13 -7.422e+13 2.494e+13 -6.841e+13 2.301e+13 -6.289e+13 2.112e+13 -5.767e+13 1.929e+13 -5.274e+13 1.752e+13 -4.810e+13 1.584e+13 -4.374e+13 1.423e+13 -3.968e+13 1.271e+13 -3.588e+13 1.127e+13 -3.236e+13 9.929e+12 -2.910e+13 8.681e+12 -2.608e+13 7.523e+12 -2.545e+13 7.053e+12 -2.269e+13 6.000e+12 -2.017e+13 5.045e+12 -1.787e+13 4.184e+12 -1.578e+13 3.415e+12 -1.389e+13 2.733e+12 -1.218e+13 2.134e+12 -1.065e+13 1.612e+12 -9.280e+12 1.161e+12 -8.060e+12 7.774e+11 -6.979e+12 4.540e+11 -6.023e+12 1.849e+11 -5.184e+12 -3.544e+10 -4.450e+12 -2.127e+11 -3.810e+12 -3.524e+11 -3.255e+12 -4.599e+11 -2.776e+12 -5.400e+11 -2.363e+12 -5.972e+11 -2.010e+12 -6.355e+11 -1.709e+12 -6.586e+11 -1.452e+12 -6.695e+11 -1.233e+12 -6.708e+11 -1.047e+12 -6.645e+11 -8.889e+11 -6.523e+11 -7.539e+11 -6.353e+11 -6.387e+11 -6.143e+11 -5.398e+11 -5.898e+11 -4.549e+11 -5.623e+11 -3.818e+11 -5.320e+11 -3.187e+11 -4.991e+11 -2.644e+11 -4.638e+11 -2.177e+11 -4.264e+11 -1.777e+11 -3.873e+11 -1.437e+11 -3.470e+11 -1.150e+11 -3.059e+11 -9.093e+10 -2.648e+11 -7.109e+10 -2.243e+11 -5.493e+10 -1.852e+11 -4.195e+10 -1.481e+11 -3.167e+10 -1.139e+11 -2.362e+10 -8.324e+10 -1.736e+10 -5.674e+10 -1.249e+10 -3.501e+10 -8.645e+09 -1.850e+10 -5.663e+09 -7.494e+09 -4.002e+09 -1.477e+09 -4.671e+09 3.057e+09 -7.444e+09 1.087e+10 -1.150e+10 2.416e+10 -1.654e+10 4.314e+10 -2.261e+10 6.758e+10 -2.973e+10 9.706e+10 -3.795e+10 1.311e+11 -4.728e+10 1.690e+11 -5.769e+10 2.104e+11 -6.910e+10 2.543e+11 -8.144e+10 3.002e+11 -9.459e+10 3.472e+11 -1.084e+11 3.948e+11 -1.227e+11 4.421e+11 -1.374e+11 4.884e+11 -1.522e+11 5.331e+11 -1.669e+11 5.757e+11 -1.815e+11 6.154e+11 -1.956e+11 6.518e+11 -2.092e+11 6.845e+11 -2.220e+11 7.132e+11 -2.338e+11 7.374e+11 -2.446e+11 7.570e+11 -2.541e+11 7.718e+11 -2.623e+11 7.818e+11 -2.690e+11 7.868e+11 -2.742e+11 7.871e+11 -2.779e+11 7.825e+11 -2.799e+11 7.734e+11 -2.803e+11 7.599e+11 -2.791e+11 7.424e+11 -2.762e+11 7.210e+11 -2.719e+11 6.963e+11 -2.661e+11 6.686e+11 -2.589e+11 6.381e+11 -2.504e+11 6.054e+11 -2.408e+11 5.708e+11 -2.301e+11 5.348e+11 -2.186e+11 4.978e+11 -2.063e+11 4.603e+11 -1.935e+11 4.226e+11 -1.802e+11 3.853e+11 -1.667e+11 3.486e+11 -1.532e+11 3.129e+11 -1.396e+11 2.785e+11 -1.263e+11 2.458e+11 -1.133e+11 2.148e+11 -1.007e+11 1.860e+11 -8.873e+10 1.592e+11 -7.736e+10 1.348e+11 -6.671e+10 1.127e+11 -5.683e+10 9.294e+10 -4.776e+10 7.548e+10 -3.953e+10 6.028e+10 -3.216e+10 4.724e+10 -2.564e+10 3.621e+10 -1.995e+10 2.705e+10 -1.508e+10 1.961e+10 -1.098e+10 1.369e+10 -7.628e+09 9.118e+09 -4.962e+09 5.707e+09 -2.932e+09 3.272e+09 -1.485e+09 1.643e+09 -5.650e+08 6.574e+08 -1.105e+08 1.688e+08 9.396e+07 -3.580e+06 4.355e+08 -1.345e+08 1.101e+09 -3.857e+08 2.053e+09 -6.903e+08 3.257e+09 -9.765e+08 4.686e+09 -1.184e+09 6.321e+09 -1.263e+09 8.147e+09 -1.171e+09 1.016e+10 -8.688e+08 1.235e+10 -3.239e+08 1.471e+10 4.953e+08 1.726e+10 1.621e+09 2.000e+10 3.085e+09 2.292e+10 4.916e+09 2.602e+10 7.147e+09 2.932e+10 9.808e+09 3.278e+10 1.292e+10 3.642e+10 1.652e+10 4.021e+10 2.061e+10 4.414e+10 2.522e+10 4.819e+10 3.034e+10 5.234e+10 3.599e+10 5.655e+10 4.215e+10 6.080e+10 4.880e+10 6.506e+10 5.592e+10 6.929e+10 6.347e+10 7.346e+10 7.140e+10 7.754e+10 7.968e+10 8.149e+10 8.821e+10 8.528e+10 9.694e+10 8.887e+10 1.058e+11 9.223e+10 1.147e+11 9.532e+10 1.235e+11 9.813e+10 1.322e+11 1.006e+11 1.406e+11 1.027e+11 1.486e+11 1.045e+11 1.562e+11 1.059e+11 1.632e+11 1.069e+11 1.696e+11 1.074e+11 1.753e+11 1.075e+11 1.801e+11 1.072e+11 1.841e+11 1.064e+11 1.871e+11 1.052e+11 1.892e+11 1.036e+11 1.902e+11 1.016e+11 1.903e+11 9.918e+10 1.893e+11 9.641e+10 1.874e+11 9.330e+10 1.845e+11 8.988e+10 1.807e+11 8.620e+10 1.760e+11 8.228e+10 1.705e+11 7.817e+10 1.642e+11 7.390e+10 1.573e+11 6.953e+10 1.499e+11 6.508e+10 1.419e+11 6.061e+10 1.336e+11 5.615e+10 1.250e+11 5.174e+10 1.162e+11 4.741e+10 1.074e+11 4.319e+10 9.852e+10 3.911e+10 8.975e+10 3.520e+10 8.116e+10 3.148e+10 7.280e+10 2.795e+10 6.475e+10 2.464e+10 5.706e+10 2.155e+10 4.978e+10 1.869e+10 4.296e+10 1.607e+10 3.662e+10 1.367e+10 3.080e+10 1.149e+10 2.549e+10 9.543e+09 2.073e+10 7.806e+09 1.650e+10 6.275e+09 1.281e+10 4.942e+09 9.636e+09 3.795e+09 6.970e+09 2.824e+09 4.787e+09 2.019e+09 3.064e+09 1.368e+09 1.768e+09 8.632e+08 8.625e+08 5.029e+08 3.027e+08 2.935e+08 1.268e+06 2.260e+08 -2.141e+08 2.209e+08 -5.483e+08 1.900e+08 -1.068e+09 1.083e+08 -1.749e+09 -2.258e+07 -2.554e+09 -1.950e+08 -3.445e+09 -3.993e+08 -4.386e+09 -6.244e+08 -5.344e+09 -8.604e+08 -6.288e+09 -1.097e+09 -7.192e+09 -1.326e+09 -8.030e+09 -1.536e+09 -8.783e+09 -1.721e+09 -9.435e+09 -1.874e+09 -9.975e+09 -1.990e+09 -1.040e+10 -2.065e+09 -1.069e+10 -2.095e+09 -1.086e+10 -2.082e+09 -1.092e+10 -2.023e+09 -1.085e+10 -1.922e+09 -1.068e+10 -1.782e+09 -1.041e+10 -1.605e+09 -1.005e+10 -1.398e+09 -9.620e+09 -1.167e+09 -9.128e+09 -9.167e+08 -8.589e+09 0.005 -51.504 -50.602 -49.700 -48.798 -47.896 -46.994 -46.092 -45.262 -44.515 -43.845 -43.247 -42.718 -42.255 -41.855 -41.517 -41.239 -41.018 -40.855 -40.749 -40.699 -40.707 -40.773 -40.899 -41.084 -41.332 -41.645 -42.026 -42.478 -43.007 -43.618 -44.317 -45.112 -46.015 -47.037 -48.194 -49.506 -50.998 -52.704 -54.663 -56.926 -59.539 -62.494 -65.542 -67.913 -68.917 -69.097 -69.283 -69.368 -68.128 -65.145 -61.664 -58.489 -55.743 -53.376 -51.321 -49.522 -47.935 -46.527 -45.274 -44.156 -43.157 -42.267 -41.474 -40.772 -40.153 -39.614 -39.150 -38.758 -38.436 -38.181 -37.992 -37.870 -37.813 -37.822 -37.898 -38.042 -38.256 -38.543 -38.907 -39.350 -39.879 -40.499 -41.219 -42.046 -42.992 -44.070 -45.293 -46.677 -48.236 -49.978 -51.872 -53.813 -55.554 -56.730 -57.122 -56.869 -56.251 -55.397 -54.287 -52.871 -51.181 -49.330 -47.440 -45.601 -43.864 -42.249 -40.761 -39.397 -38.149 -37.011 -35.974 -35.031 -34.174 -33.399 -32.701 -32.079 -31.529 -31.049 -30.637 -30.291 -30.012 -29.798 -29.651 -29.571 -29.559 -29.619 -29.753 -29.965 -30.259 -30.637 -31.105 -31.677 -32.365 -33.185 -34.154 -35.298 -36.650 -38.253 -40.165 -42.456 -45.179 -48.199 -50.777 -51.846 -51.667 -51.691 -53.154 -57.936 -58.050 -50.862 -44.120 -39.533 -35.963 -33.001 -30.454 -28.212 -26.207 -24.391 -22.734 -21.204 -19.780 -18.455 -17.220 -16.067 -14.988 -13.975 -13.010 -12.093 -11.228 -10.414 -9.648 -8.923 -8.228 -7.567 -6.945 -6.363 -5.813 -5.287 -4.788 -4.323 -3.892 -3.483 -3.091 -2.726 -2.394 -2.086 -1.793 -1.524 -1.286 -1.071 -0.867 -0.687 -0.538 -0.404 -0.278 -0.179 -0.111 -0.051 -0.011 0.000 -0.020 -0.037 -0.084 -0.161 -0.255 -0.355 -0.485 -0.643 -0.815 -1.007 -1.230 -1.477 -1.733 -2.010 -2.320 -2.654 -3.002 -3.374 -3.780 -4.215 -4.670 -5.149 -5.664 -6.215 -6.794 -7.399 -8.039 -8.719 -9.443 -10.203 -10.995 -11.832 -12.721 -13.666 -14.670 -15.729 -16.846 -18.039 -19.317 -20.691 -22.171 -23.771 -25.500 -27.389 -29.479 -31.814 -34.460 -37.508 -41.072 -45.191 -49.251 -51.501 -51.421 -51.001 -51.298 -52.036 -51.928 -49.933 -46.867 -43.916 -41.416 -39.341 -37.614 -36.166 -34.944 -33.912 -33.041 -32.309 -31.699 -31.199 -30.798 -30.488 -30.258 -30.103 -30.024 -30.017 -30.082 -30.215 -30.415 -30.681 -31.014 -31.414 -31.882 -32.418 -33.026 -33.708 -34.466 -35.304 -36.226 -37.235 -38.334 -39.533 -40.837 -42.248 -43.768 -45.391 -47.102 -48.870 -50.637 -52.316 -53.780 -54.868 -55.393 -55.210 -54.334 -52.955 -51.325 -49.641 -48.014 -46.497 -45.106 -43.846 -42.710 -41.692 -40.781 -39.969 -39.250 -38.618 -38.068 -37.593 -37.192 -36.859 -36.593 -36.390 -36.249 -36.168 -36.146 -36.182 -36.277 -36.429 -36.640 -36.910 -37.240 -37.631 -38.086 -38.608 -39.198 -39.862 -40.604 -41.429 -42.344 -43.359 -44.483 -45.731 -47.117 -48.665 -50.400 -52.361 -54.597 -57.177 -60.202 -63.830 -68.238 -73.413 -78.117 -79.715 -77.962 -73.581 -68.774 -64.691 -61.348 -58.582 -56.257 -54.275 -52.567 -51.084 -49.789 -48.655 -47.660 -46.788 -46.026 -45.364 -44.793 -44.306 -43.898 -43.563 -43.299 -43.103 -42.971 -42.902 -42.895 -42.949 -43.063 -43.238 -43.473 -43.770 -44.129 -44.552 -45.043 -45.604 -46.238 -46.950 -47.745 -48.629 -49.610 -50.678 -51.746 -52.814 -53.881 -54.949 -56.017 0.03 -19.3259 -18.9422 -18.5623 -18.1863 -17.8141 -17.4457 -17.0813 -16.7206 -16.3638 -16.0109 -15.6618 -15.3165 -14.9751 -14.6376 -14.3039 -13.974 -13.648 -13.3259 -13.0075 -12.6931 -12.3825 -12.0757 -11.7728 -11.4737 -11.1785 -10.8871 -10.5996 -10.3159 -10.036 -9.76 -9.4879 -9.2196 -8.9552 -8.6946 -8.4378 -8.1849 -7.9359 -7.6907 -7.4493 -7.2118 -6.9781 -6.7483 -6.5224 -6.3002 -6.082 -5.8676 -5.657 -5.4503 -5.2474 -5.0483 -4.8532 -4.6618 -4.4743 -4.2907 -4.1109 -3.935 -3.7629 -3.5946 -3.4302 -3.2697 -3.113 -2.9601 -2.8111 -2.6659 -2.5246 -2.3872 -2.2535 -2.1238 -1.9978 -1.8758 -1.7575 -1.6432 -1.5326 -1.426 -1.3231 -1.2241 -1.129 -1.0377 -0.95026 -0.86666 -0.78691 -0.71101 -0.63896 -0.57076 -0.5064 -0.44589 -0.38923 -0.33642 -0.28745 -0.24233 -0.20106 -0.16364 -0.13007 -0.10034 -0.074465 -0.052434 -0.034252 -0.019917 -0.0094302 -0.0027912 0 -0.0010566 -0.0059611 -0.014713 -0.027314 -0.043762 -0.064057 -0.088201 -0.11619 -0.14803 -0.18372 -0.22325 -0.26664 -0.31387 -0.36495 -0.41987 -0.47865 -0.54127 -0.60774 -0.67806 -0.75222 -0.83023 -0.9121 -0.9978 -1.0874 -1.1808 -1.278 -1.3791 -1.4841 -1.5929 -1.7055 -1.822 -1.9423 -2.0665 -2.1946 -2.3264 -2.4622 -2.6018 -2.7452 -2.8925 -3.0436 -3.1985 -3.3574 -3.52 -3.6865 -3.8569 -4.0311 -4.2092 -4.3911 -4.5768 -4.7664 -4.9599 -5.1572 -5.3583 -5.5633 -5.7722 -5.9848 -6.2014 -6.4218 -6.646 -6.8741 -7.106 -7.3418 -7.5814 -7.8249 -8.0722 -8.3233 -8.5784 -8.8372 -9.0999 -9.3665 -9.6369 -9.9111 -10.1892 -10.4712 -10.757 -11.0466 -11.3401 -11.6375 -11.9387 -12.2437 -12.5526 -12.8653 -13.1819 -13.5023 -13.8266 -14.1547 -14.4867 -14.8225 -15.1622 -15.5057 -15.853 -16.2042 -16.5593 -16.9182 -17.281 -17.6476 -18.018 -18.3923 -18.7705 -19.1524 1.0 59658.3803 IW1 VH 26.72 31.67 0.050 -1.139e+10 -1.686e+09 -1.055e+10 -2.200e+09 -9.790e+09 -2.674e+09 -9.095e+09 -3.114e+09 -8.461e+09 -3.525e+09 -7.883e+09 -3.910e+09 -7.355e+09 -4.272e+09 -6.867e+09 -4.613e+09 -6.414e+09 -4.933e+09 -5.987e+09 -5.232e+09 -5.578e+09 -5.507e+09 -5.183e+09 -5.755e+09 -4.796e+09 -5.972e+09 -4.413e+09 -6.155e+09 -4.031e+09 -6.299e+09 -3.648e+09 -6.398e+09 -3.262e+09 -6.450e+09 -2.875e+09 -6.454e+09 -2.487e+09 -6.406e+09 -2.099e+09 -6.306e+09 -1.716e+09 -6.156e+09 -1.338e+09 -5.957e+09 -9.705e+08 -5.711e+09 -6.159e+08 -5.425e+09 -2.779e+08 -5.103e+09 4.054e+07 -4.751e+09 3.363e+08 -4.378e+09 6.077e+08 -3.991e+09 8.541e+08 -3.598e+09 1.076e+09 -3.209e+09 1.276e+09 -2.829e+09 1.459e+09 -2.466e+09 1.631e+09 -2.123e+09 1.802e+09 -1.801e+09 1.981e+09 -1.498e+09 2.179e+09 -1.208e+09 2.405e+09 -9.187e+08 2.666e+09 -6.193e+08 2.966e+09 -2.964e+08 3.305e+09 6.203e+07 3.681e+09 4.664e+08 4.089e+09 9.236e+08 4.522e+09 1.437e+09 4.974e+09 2.009e+09 5.437e+09 2.637e+09 5.902e+09 3.315e+09 6.362e+09 4.039e+09 6.810e+09 4.799e+09 7.239e+09 5.585e+09 7.641e+09 6.386e+09 8.012e+09 7.193e+09 8.347e+09 7.990e+09 8.640e+09 8.767e+09 8.889e+09 9.513e+09 9.092e+09 1.022e+10 9.244e+09 1.086e+10 9.347e+09 1.145e+10 9.398e+09 1.196e+10 9.399e+09 1.240e+10 9.349e+09 1.275e+10 9.250e+09 1.301e+10 9.105e+09 1.318e+10 8.914e+09 1.326e+10 8.681e+09 1.325e+10 8.408e+09 1.315e+10 8.100e+09 1.297e+10 7.760e+09 1.270e+10 7.392e+09 1.235e+10 7.000e+09 1.193e+10 6.590e+09 1.145e+10 6.168e+09 1.091e+10 5.737e+09 1.033e+10 5.303e+09 9.707e+09 4.872e+09 9.058e+09 4.448e+09 8.390e+09 4.036e+09 7.713e+09 3.640e+09 7.035e+09 3.264e+09 6.365e+09 2.912e+09 5.711e+09 2.587e+09 5.080e+09 2.289e+09 4.479e+09 2.021e+09 3.914e+09 1.783e+09 3.389e+09 1.575e+09 2.909e+09 1.398e+09 2.475e+09 1.249e+09 2.090e+09 1.128e+09 1.753e+09 1.034e+09 1.465e+09 9.666e+08 1.224e+09 9.259e+08 1.026e+09 9.130e+08 8.687e+08 9.303e+08 7.477e+08 9.813e+08 6.582e+08 1.070e+09 5.959e+08 1.203e+09 5.573e+08 1.384e+09 5.405e+08 1.622e+09 5.459e+08 1.923e+09 5.758e+08 2.297e+09 6.346e+08 2.753e+09 7.285e+08 3.302e+09 8.655e+08 3.956e+09 1.055e+09 4.726e+09 1.308e+09 5.625e+09 1.635e+09 6.667e+09 2.048e+09 7.861e+09 2.558e+09 9.219e+09 3.177e+09 1.075e+10 3.915e+09 1.247e+10 4.780e+09 1.437e+10 5.780e+09 1.647e+10 6.918e+09 1.875e+10 8.196e+09 2.123e+10 9.608e+09 2.388e+10 1.115e+10 2.671e+10 1.281e+10 2.969e+10 1.457e+10 3.281e+10 1.642e+10 3.604e+10 1.832e+10 3.935e+10 2.025e+10 4.272e+10 2.218e+10 4.610e+10 2.408e+10 4.945e+10 2.589e+10 5.274e+10 2.760e+10 5.591e+10 2.916e+10 5.891e+10 3.052e+10 6.170e+10 3.165e+10 6.422e+10 3.252e+10 6.643e+10 3.309e+10 6.826e+10 3.333e+10 6.969e+10 3.322e+10 7.066e+10 3.274e+10 7.114e+10 3.188e+10 7.110e+10 3.063e+10 7.052e+10 2.899e+10 6.938e+10 2.699e+10 6.768e+10 2.464e+10 6.545e+10 2.198e+10 6.269e+10 1.904e+10 5.947e+10 1.588e+10 5.583e+10 1.255e+10 5.184e+10 9.134e+09 4.762e+10 5.683e+09 4.326e+10 2.270e+09 3.888e+10 -1.057e+09 3.462e+10 -4.270e+09 3.062e+10 -7.384e+09 2.700e+10 -1.049e+10 2.384e+10 -1.376e+10 2.117e+10 -1.746e+10 1.887e+10 -2.195e+10 1.676e+10 -2.763e+10 1.456e+10 -3.486e+10 1.195e+10 -4.397e+10 8.653e+09 -5.521e+10 4.425e+09 -6.875e+10 -9.213e+08 -8.476e+10 -7.517e+09 -1.033e+11 -1.543e+10 -1.245e+11 -2.468e+10 -1.482e+11 -3.525e+10 -1.745e+11 -4.703e+10 -2.032e+11 -5.990e+10 -2.343e+11 -7.368e+10 -2.675e+11 -8.813e+10 -3.025e+11 -1.030e+11 -3.390e+11 -1.179e+11 -3.767e+11 -1.324e+11 -4.152e+11 -1.463e+11 -4.541e+11 -1.591e+11 -4.928e+11 -1.702e+11 -5.309e+11 -1.794e+11 -5.680e+11 -1.860e+11 -6.035e+11 -1.898e+11 -6.370e+11 -1.902e+11 -6.680e+11 -1.868e+11 -6.963e+11 -1.794e+11 -7.215e+11 -1.677e+11 -7.435e+11 -1.514e+11 -7.621e+11 -1.304e+11 -7.774e+11 -1.046e+11 -7.896e+11 -7.375e+10 -7.989e+11 -3.796e+10 -8.060e+11 3.069e+09 -8.114e+11 4.965e+10 -8.162e+11 1.023e+11 -8.213e+11 1.618e+11 -8.279e+11 2.296e+11 -8.372e+11 3.074e+11 -8.506e+11 3.978e+11 -8.692e+11 5.039e+11 -8.942e+11 6.296e+11 -9.264e+11 7.794e+11 -9.664e+11 9.584e+11 -1.015e+12 1.172e+12 -1.071e+12 1.426e+12 -1.135e+12 1.728e+12 -1.208e+12 2.082e+12 -1.289e+12 2.497e+12 -1.377e+12 2.979e+12 -1.473e+12 3.534e+12 -1.577e+12 4.171e+12 -1.689e+12 4.895e+12 -1.810e+12 5.715e+12 -1.942e+12 6.638e+12 -2.084e+12 7.670e+12 -2.239e+12 8.818e+12 -2.409e+12 1.054e+13 -2.711e+12 1.199e+13 -2.925e+12 1.359e+13 -3.163e+12 1.534e+13 -3.429e+12 1.724e+13 -3.725e+12 1.928e+13 -4.059e+12 2.150e+13 -4.433e+12 2.388e+13 -4.857e+12 2.642e+13 -5.333e+12 2.913e+13 -5.871e+12 3.201e+13 -6.476e+12 3.506e+13 -7.157e+12 3.828e+13 -7.921e+12 4.166e+13 -8.780e+12 4.520e+13 -9.738e+12 4.891e+13 -1.080e+13 5.276e+13 -1.199e+13 5.676e+13 -1.331e+13 6.090e+13 -1.476e+13 6.515e+13 -1.635e+13 6.950e+13 -1.811e+13 7.396e+13 -2.003e+13 7.850e+13 -2.212e+13 8.310e+13 -2.440e+13 8.775e+13 -2.685e+13 9.243e+13 -2.950e+13 9.712e+13 -3.235e+13 1.018e+14 -3.539e+13 1.065e+14 -3.865e+13 1.111e+14 -4.210e+13 1.155e+14 -4.577e+13 1.200e+14 -4.964e+13 1.243e+14 -5.371e+13 1.284e+14 -5.798e+13 1.325e+14 -6.246e+13 1.363e+14 -6.712e+13 1.399e+14 -7.197e+13 1.433e+14 -7.699e+13 1.465e+14 -8.218e+13 1.494e+14 -8.754e+13 1.520e+14 -9.306e+13 1.544e+14 -9.870e+13 1.564e+14 -1.045e+14 1.581e+14 -1.104e+14 1.595e+14 -1.164e+14 1.605e+14 -1.224e+14 1.613e+14 -1.286e+14 1.616e+14 -1.349e+14 1.615e+14 -1.411e+14 1.611e+14 -1.475e+14 1.602e+14 -1.538e+14 1.591e+14 -1.602e+14 1.575e+14 -1.666e+14 1.555e+14 -1.729e+14 1.532e+14 -1.792e+14 1.505e+14 -1.856e+14 1.475e+14 -1.918e+14 1.440e+14 -1.981e+14 1.401e+14 -2.042e+14 1.358e+14 -2.101e+14 1.312e+14 -2.161e+14 1.261e+14 -2.219e+14 1.208e+14 -2.276e+14 1.151e+14 -2.330e+14 1.090e+14 -2.384e+14 1.024e+14 -2.435e+14 9.569e+13 -2.484e+14 8.857e+13 -2.532e+14 8.112e+13 -2.577e+14 7.337e+13 -2.619e+14 6.533e+13 -2.659e+14 5.701e+13 -2.697e+14 4.840e+13 -2.732e+14 3.957e+13 -2.764e+14 3.049e+13 -2.793e+14 2.117e+13 -2.820e+14 1.166e+13 -2.842e+14 1.957e+12 -2.862e+14 -7.926e+12 -2.879e+14 -1.796e+13 -2.893e+14 -2.813e+13 -2.902e+14 -3.843e+13 -2.909e+14 -4.882e+13 -2.912e+14 -5.930e+13 -2.912e+14 -6.986e+13 -2.909e+14 -8.047e+13 -2.901e+14 -9.111e+13 -2.891e+14 -1.017e+14 -2.877e+14 -1.124e+14 -2.860e+14 -1.230e+14 -2.839e+14 -1.337e+14 -2.815e+14 -1.442e+14 -2.788e+14 -1.547e+14 -2.758e+14 -1.651e+14 -2.723e+14 -1.747e+14 -2.702e+14 -1.847e+14 -2.673e+14 -1.948e+14 -2.631e+14 -2.048e+14 -2.587e+14 -2.146e+14 -2.539e+14 -2.242e+14 -2.488e+14 -2.336e+14 -2.434e+14 -2.429e+14 -2.377e+14 -2.519e+14 -2.318e+14 -2.607e+14 -2.257e+14 -2.691e+14 -2.193e+14 -2.773e+14 -2.127e+14 -2.852e+14 -2.058e+14 -2.927e+14 -1.988e+14 -3.000e+14 -1.916e+14 -3.068e+14 -1.841e+14 -3.133e+14 -1.765e+14 -3.193e+14 -1.687e+14 -3.248e+14 -1.608e+14 -3.300e+14 -1.528e+14 -3.347e+14 -1.447e+14 -3.389e+14 -1.364e+14 -3.426e+14 -1.282e+14 -3.458e+14 -1.199e+14 -3.485e+14 -1.116e+14 -3.505e+14 -1.033e+14 -3.521e+14 -9.495e+13 -3.530e+14 -8.673e+13 -3.534e+14 -7.858e+13 -3.531e+14 -7.055e+13 -3.524e+14 -6.264e+13 -3.510e+14 -5.491e+13 -3.491e+14 -4.734e+13 -3.466e+14 -4.000e+13 -3.436e+14 -3.288e+13 -3.400e+14 -2.601e+13 -3.358e+14 -1.943e+13 -3.311e+14 -1.313e+13 -3.260e+14 -7.135e+12 -3.203e+14 -1.475e+12 -3.142e+14 3.851e+12 -3.078e+14 8.839e+12 -3.010e+14 1.347e+13 -2.939e+14 1.774e+13 -2.864e+14 2.165e+13 -2.785e+14 2.518e+13 -2.705e+14 2.835e+13 -2.622e+14 3.115e+13 -2.537e+14 3.359e+13 -2.451e+14 3.569e+13 -2.363e+14 3.744e+13 -2.274e+14 3.886e+13 -2.185e+14 3.995e+13 -2.095e+14 4.075e+13 -2.005e+14 4.125e+13 -1.916e+14 4.148e+13 -1.827e+14 4.145e+13 -1.739e+14 4.119e+13 -1.652e+14 4.070e+13 -1.566e+14 4.002e+13 -1.482e+14 3.914e+13 -1.400e+14 3.811e+13 -1.320e+14 3.693e+13 -1.241e+14 3.563e+13 -1.165e+14 3.422e+13 -1.091e+14 3.272e+13 -1.020e+14 3.116e+13 -9.508e+13 2.953e+13 -8.846e+13 2.787e+13 -8.212e+13 2.618e+13 -7.605e+13 2.448e+13 -7.026e+13 2.279e+13 -6.475e+13 2.112e+13 -5.952e+13 1.947e+13 -5.457e+13 1.786e+13 -4.990e+13 1.629e+13 -4.551e+13 1.479e+13 -4.139e+13 1.335e+13 -3.754e+13 1.197e+13 -3.395e+13 1.066e+13 -3.061e+13 9.431e+12 -2.752e+13 8.280e+12 -2.466e+13 7.210e+12 -2.298e+13 6.489e+12 -2.048e+13 5.548e+12 -1.819e+13 4.689e+12 -1.610e+13 3.913e+12 -1.420e+13 3.217e+12 -1.249e+13 2.597e+12 -1.094e+13 2.050e+12 -9.554e+12 1.572e+12 -8.314e+12 1.158e+12 -7.210e+12 8.040e+11 -6.233e+12 5.049e+11 -5.370e+12 2.553e+11 -4.613e+12 5.027e+10 -3.951e+12 -1.152e+11 -3.376e+12 -2.462e+11 -2.877e+12 -3.473e+11 -2.448e+12 -4.229e+11 -2.079e+12 -4.773e+11 -1.764e+12 -5.140e+11 -1.495e+12 -5.365e+11 -1.267e+12 -5.475e+11 -1.073e+12 -5.494e+11 -9.081e+11 -5.442e+11 -7.684e+11 -5.334e+11 -6.497e+11 -5.180e+11 -5.486e+11 -4.990e+11 -4.623e+11 -4.769e+11 -3.884e+11 -4.520e+11 -3.250e+11 -4.247e+11 -2.706e+11 -3.953e+11 -2.239e+11 -3.640e+11 -1.840e+11 -3.313e+11 -1.499e+11 -2.973e+11 -1.210e+11 -2.627e+11 -9.674e+10 -2.280e+11 -7.647e+10 -1.936e+11 -5.974e+10 -1.604e+11 -4.611e+10 -1.287e+11 -3.512e+10 -9.940e+10 -2.635e+10 -7.300e+10 -1.941e+10 -5.010e+10 -1.391e+10 -3.119e+10 -9.591e+09 -1.673e+10 -6.309e+09 -6.964e+09 -4.459e+09 -1.401e+09 -4.807e+09 2.841e+09 -7.052e+09 9.810e+09 -1.037e+10 2.160e+10 -1.442e+10 3.854e+10 -1.918e+10 6.049e+10 -2.468e+10 8.717e+10 -3.097e+10 1.182e+11 -3.805e+10 1.530e+11 -4.591e+10 1.913e+11 -5.452e+10 2.323e+11 -6.381e+10 2.754e+11 -7.371e+10 3.200e+11 -8.411e+10 3.655e+11 -9.490e+10 4.111e+11 -1.060e+11 4.561e+11 -1.172e+11 5.000e+11 -1.284e+11 5.421e+11 -1.395e+11 5.818e+11 -1.504e+11 6.186e+11 -1.609e+11 6.520e+11 -1.709e+11 6.815e+11 -1.802e+11 7.069e+11 -1.888e+11 7.278e+11 -1.966e+11 7.441e+11 -2.034e+11 7.555e+11 -2.093e+11 7.620e+11 -2.140e+11 7.636e+11 -2.176e+11 7.604e+11 -2.201e+11 7.525e+11 -2.214e+11 7.402e+11 -2.215e+11 7.236e+11 -2.203e+11 7.031e+11 -2.180e+11 6.790e+11 -2.146e+11 6.520e+11 -2.102e+11 6.221e+11 -2.046e+11 5.900e+11 -1.982e+11 5.559e+11 -1.908e+11 5.204e+11 -1.826e+11 4.839e+11 -1.738e+11 4.469e+11 -1.643e+11 4.097e+11 -1.544e+11 3.729e+11 -1.442e+11 3.368e+11 -1.337e+11 3.017e+11 -1.231e+11 2.679e+11 -1.125e+11 2.358e+11 -1.021e+11 2.056e+11 -9.180e+10 1.773e+11 -8.183e+10 1.513e+11 -7.226e+10 1.275e+11 -6.315e+10 1.061e+11 -5.456e+10 8.692e+10 -4.657e+10 7.008e+10 -3.919e+10 5.544e+10 -3.246e+10 4.291e+10 -2.641e+10 3.239e+10 -2.103e+10 2.370e+10 -1.633e+10 1.669e+10 -1.230e+10 1.120e+10 -8.910e+09 7.026e+09 -6.145e+09 4.000e+09 -3.974e+09 1.940e+09 -2.362e+09 6.600e+08 -1.271e+09 -3.475e+07 -6.318e+08 -3.958e+08 -2.578e+08 -7.253e+08 1.312e+08 -1.222e+09 7.316e+08 -1.886e+09 1.600e+09 -2.636e+09 2.735e+09 -3.393e+09 4.120e+09 -4.096e+09 5.741e+09 -4.696e+09 7.588e+09 -5.153e+09 9.653e+09 -5.433e+09 1.193e+10 -5.510e+09 1.444e+10 -5.358e+09 1.716e+10 -4.951e+09 2.012e+10 -4.265e+09 2.332e+10 -3.275e+09 2.676e+10 -1.956e+09 3.045e+10 -2.804e+08 3.439e+10 1.776e+09 3.858e+10 4.235e+09 4.299e+10 7.118e+09 4.763e+10 1.044e+10 5.246e+10 1.421e+10 5.746e+10 1.844e+10 6.261e+10 2.311e+10 6.787e+10 2.822e+10 7.319e+10 3.375e+10 7.854e+10 3.968e+10 8.386e+10 4.595e+10 8.912e+10 5.253e+10 9.427e+10 5.936e+10 9.925e+10 6.639e+10 1.040e+11 7.353e+10 1.085e+11 8.073e+10 1.127e+11 8.790e+10 1.166e+11 9.495e+10 1.200e+11 1.018e+11 1.230e+11 1.084e+11 1.256e+11 1.146e+11 1.277e+11 1.204e+11 1.292e+11 1.256e+11 1.302e+11 1.303e+11 1.306e+11 1.343e+11 1.305e+11 1.376e+11 1.298e+11 1.401e+11 1.285e+11 1.419e+11 1.267e+11 1.428e+11 1.243e+11 1.429e+11 1.214e+11 1.421e+11 1.181e+11 1.406e+11 1.143e+11 1.383e+11 1.101e+11 1.353e+11 1.056e+11 1.315e+11 1.007e+11 1.271e+11 9.559e+10 1.221e+11 9.024e+10 1.166e+11 8.472e+10 1.106e+11 7.909e+10 1.043e+11 7.340e+10 9.766e+10 6.771e+10 9.083e+10 6.205e+10 8.386e+10 5.648e+10 7.684e+10 5.105e+10 6.986e+10 4.578e+10 6.296e+10 4.072e+10 5.623e+10 3.591e+10 4.974e+10 3.136e+10 4.351e+10 2.709e+10 3.762e+10 2.313e+10 3.211e+10 1.949e+10 2.699e+10 1.618e+10 2.230e+10 1.320e+10 1.807e+10 1.055e+10 1.430e+10 8.230e+09 1.099e+10 6.230e+09 8.151e+09 4.540e+09 5.770e+09 3.147e+09 3.835e+09 2.037e+09 2.329e+09 1.192e+09 1.226e+09 5.943e+08 4.992e+08 2.284e+08 1.085e+08 6.524e+07 -7.127e+07 -1.369e+07 -2.997e+08 -1.869e+08 -7.563e+08 -4.861e+08 -1.419e+09 -8.938e+08 -2.248e+09 -1.387e+09 -3.204e+09 -1.944e+09 -4.251e+09 -2.544e+09 -5.353e+09 -3.165e+09 -6.475e+09 -3.789e+09 -7.586e+09 -4.397e+09 -8.660e+09 -4.972e+09 -9.668e+09 -5.500e+09 -1.059e+10 -5.968e+09 -1.141e+10 -6.364e+09 -1.212e+10 -6.679e+09 -1.269e+10 -6.909e+09 -1.313e+10 -7.049e+09 -1.343e+10 -7.099e+09 -1.360e+10 -7.059e+09 -1.363e+10 -6.933e+09 -1.354e+10 -6.726e+09 -1.334e+10 -6.443e+09 -1.303e+10 -6.094e+09 -1.262e+10 -5.688e+09 -1.214e+10 -5.234e+09 -1.158e+10 -4.744e+09 -1.098e+10 -4.229e+09 -1.033e+10 -3.698e+09 -9.655e+09 0.005 -54.182 -53.126 -52.071 -51.015 -49.959 -48.904 -47.848 -46.883 -46.019 -45.247 -44.561 -43.955 -43.424 -42.965 -42.575 -42.250 -41.989 -41.791 -41.655 -41.581 -41.568 -41.617 -41.730 -41.907 -42.151 -42.465 -42.851 -43.313 -43.858 -44.490 -45.217 -46.048 -46.996 -48.073 -49.298 -50.693 -52.287 -54.119 -56.236 -58.698 -61.566 -64.853 -68.335 -71.266 -72.908 -73.340 -72.000 -68.530 -64.441 -60.732 -57.564 -54.865 -52.532 -50.494 -48.697 -47.102 -45.678 -44.402 -43.255 -42.225 -41.298 -40.466 -39.722 -39.059 -38.472 -37.958 -37.513 -37.134 -36.820 -36.569 -36.379 -36.251 -36.185 -36.179 -36.236 -36.356 -36.541 -36.792 -37.113 -37.507 -37.977 -38.528 -39.166 -39.896 -40.727 -41.668 -42.726 -43.913 -45.237 -46.707 -48.318 -50.043 -51.807 -53.461 -54.785 -55.571 -55.743 -55.345 -54.440 -53.087 -51.387 -49.490 -47.540 -45.638 -43.837 -42.161 -40.615 -39.195 -37.896 -36.708 -35.624 -34.637 -33.737 -32.919 -32.180 -31.517 -30.927 -30.406 -29.953 -29.566 -29.244 -28.986 -28.793 -28.664 -28.601 -28.606 -28.682 -28.829 -29.053 -29.353 -29.734 -30.208 -30.784 -31.473 -32.290 -33.253 -34.385 -35.719 -37.300 -39.190 -41.481 -44.313 -47.892 -52.383 -56.748 -58.526 -58.930 -62.386 -61.559 -53.720 -46.508 -41.570 -37.728 -34.551 -31.828 -29.441 -27.313 -25.393 -23.645 -22.036 -20.541 -19.154 -17.864 -16.660 -15.536 -14.481 -13.480 -12.529 -11.634 -10.792 -9.999 -9.251 -8.532 -7.850 -7.209 -6.608 -6.041 -5.498 -4.982 -4.501 -4.055 -3.632 -3.227 -2.850 -2.506 -2.186 -1.882 -1.603 -1.355 -1.130 -0.917 -0.728 -0.571 -0.430 -0.299 -0.196 -0.123 -0.059 -0.015 0.000 -0.016 -0.024 -0.062 -0.130 -0.217 -0.314 -0.442 -0.597 -0.764 -0.951 -1.168 -1.410 -1.662 -1.937 -2.244 -2.575 -2.919 -3.288 -3.690 -4.122 -4.574 -5.051 -5.564 -6.113 -6.689 -7.289 -7.925 -8.602 -9.321 -10.077 -10.864 -11.696 -12.580 -13.519 -14.518 -15.572 -16.684 -17.871 -19.143 -20.510 -21.982 -23.574 -25.294 -27.173 -29.249 -31.568 -34.194 -37.215 -40.743 -44.812 -48.798 -50.936 -50.675 -49.945 -49.710 -49.702 -49.171 -47.599 -45.297 -42.888 -40.696 -38.796 -37.172 -35.789 -34.610 -33.606 -32.755 -32.036 -31.435 -30.941 -30.544 -30.237 -30.007 -29.853 -29.773 -29.764 -29.826 -29.956 -30.153 -30.415 -30.743 -31.139 -31.601 -32.134 -32.738 -33.416 -34.173 -35.013 -35.942 -36.962 -38.084 -39.318 -40.678 -42.179 -43.837 -45.672 -47.708 -49.968 -52.469 -55.203 -58.088 -60.862 -62.927 -63.505 -62.397 -60.226 -57.711 -55.250 -52.994 -50.978 -49.195 -47.624 -46.242 -45.029 -43.963 -43.029 -42.215 -41.510 -40.905 -40.394 -39.969 -39.628 -39.365 -39.177 -39.062 -39.019 -39.047 -39.144 -39.312 -39.550 -39.861 -40.246 -40.708 -41.251 -41.878 -42.597 -43.415 -44.341 -45.385 -46.564 -47.896 -49.405 -51.121 -53.085 -55.341 -57.931 -60.829 -63.740 -65.818 -66.410 -66.249 -66.336 -67.113 -68.515 -69.216 -66.938 -63.082 -59.566 -56.650 -54.223 -52.170 -50.408 -48.880 -47.542 -46.366 -45.327 -44.409 -43.599 -42.885 -42.258 -41.712 -41.241 -40.840 -40.504 -40.232 -40.021 -39.867 -39.770 -39.728 -39.740 -39.807 -39.926 -40.099 -40.326 -40.607 -40.943 -41.336 -41.788 -42.300 -42.877 -43.520 -44.234 -45.023 -45.892 -46.849 -47.884 -48.919 -49.953 -50.988 -52.022 -53.057 0.03 -18.6176 -18.2496 -17.8852 -17.5245 -17.1675 -16.8141 -16.4644 -16.1184 -15.7761 -15.4374 -15.1024 -14.7711 -14.4435 -14.1195 -13.7993 -13.4826 -13.1697 -12.8604 -12.5548 -12.2529 -11.9547 -11.6601 -11.3692 -11.082 -10.7985 -10.5186 -10.2424 -9.9699 -9.701 -9.4359 -9.1744 -8.9165 -8.6624 -8.4119 -8.1651 -7.922 -7.6825 -7.4468 -7.2147 -6.9862 -6.7615 -6.5404 -6.323 -6.1092 -5.8992 -5.6928 -5.4901 -5.2911 -5.0957 -4.904 -4.716 -4.5317 -4.351 -4.174 -4.0007 -3.831 -3.6651 -3.5028 -3.3442 -3.1892 -3.0379 -2.8904 -2.7464 -2.6062 -2.4696 -2.3367 -2.2075 -2.0819 -1.9601 -1.8419 -1.7273 -1.6165 -1.5093 -1.4058 -1.306 -1.2098 -1.1173 -1.0285 -0.94337 -0.86191 -0.78412 -0.71001 -0.63958 -0.57281 -0.50972 -0.45031 -0.39457 -0.3425 -0.29411 -0.24939 -0.20835 -0.17098 -0.13729 -0.10727 -0.080919 -0.058247 -0.039249 -0.023925 -0.012276 -0.0043008 0 0.00062659 -0.0024211 -0.009143 -0.019539 -0.03361 -0.051354 -0.072773 -0.097866 -0.12663 -0.15908 -0.19519 -0.23498 -0.27845 -0.32558 -0.3764 -0.43088 -0.48905 -0.55088 -0.61639 -0.68558 -0.75843 -0.83497 -0.91517 -0.99905 -1.0866 -1.1778 -1.2727 -1.3713 -1.4736 -1.5795 -1.6891 -1.8024 -1.9193 -2.0399 -2.1642 -2.2922 -2.4239 -2.5592 -2.6982 -2.8409 -2.9872 -3.1372 -3.2909 -3.4483 -3.6093 -3.774 -3.9424 -4.1145 -4.2902 -4.4696 -4.6527 -4.8395 -5.0299 -5.224 -5.4218 -5.6233 -5.8284 -6.0372 -6.2497 -6.4658 -6.6857 -6.9092 -7.1363 -7.3672 -7.6017 -7.8399 -8.0818 -8.3273 -8.5766 -8.8295 -9.086 -9.3463 -9.6102 -9.8778 -10.149 -10.424 -10.7026 -10.9849 -11.2709 -11.5605 -11.8538 -12.1508 -12.4515 -12.7558 -13.0638 -13.3755 -13.6909 -14.0099 -14.3326 -14.659 -14.989 -15.3228 -15.6602 -16.0012 -16.346 -16.6944 -17.0465 -17.4023 -17.7617 -18.1249 1.0 59658.3803 IW2 HH 31.58 36.15 0.050 -4.761e+09 -1.485e+09 -4.467e+09 -1.486e+09 -4.155e+09 -1.472e+09 -3.829e+09 -1.444e+09 -3.493e+09 -1.402e+09 -3.153e+09 -1.348e+09 -2.812e+09 -1.281e+09 -2.474e+09 -1.204e+09 -2.146e+09 -1.118e+09 -1.829e+09 -1.024e+09 -1.530e+09 -9.240e+08 -1.250e+09 -8.205e+08 -9.940e+08 -7.153e+08 -7.637e+08 -6.104e+08 -5.619e+08 -5.084e+08 -3.909e+08 -4.117e+08 -2.507e+08 -3.224e+08 -1.415e+08 -2.434e+08 -6.177e+07 -1.774e+08 -6.983e+06 -1.273e+08 3.268e+07 -9.515e+07 7.337e+07 -7.780e+07 1.299e+08 -6.554e+07 2.090e+08 -4.825e+07 3.114e+08 -1.938e+07 4.353e+08 2.444e+07 5.776e+08 8.463e+07 7.350e+08 1.616e+08 9.042e+08 2.553e+08 1.081e+09 3.650e+08 1.263e+09 4.895e+08 1.444e+09 6.277e+08 1.623e+09 7.777e+08 1.795e+09 9.376e+08 1.957e+09 1.105e+09 2.106e+09 1.279e+09 2.238e+09 1.455e+09 2.352e+09 1.632e+09 2.445e+09 1.807e+09 2.515e+09 1.976e+09 2.561e+09 2.139e+09 2.582e+09 2.291e+09 2.577e+09 2.431e+09 2.546e+09 2.557e+09 2.491e+09 2.667e+09 2.411e+09 2.759e+09 2.309e+09 2.831e+09 2.186e+09 2.883e+09 2.044e+09 2.915e+09 1.886e+09 2.926e+09 1.715e+09 2.916e+09 1.534e+09 2.886e+09 1.345e+09 2.838e+09 1.152e+09 2.772e+09 9.573e+08 2.691e+09 7.643e+08 2.597e+09 5.750e+08 2.492e+09 3.917e+08 2.378e+09 2.159e+08 2.258e+09 4.870e+07 2.134e+09 -1.092e+08 2.009e+09 -2.579e+08 1.886e+09 -3.981e+08 1.764e+09 -5.303e+08 1.647e+09 -6.561e+08 1.533e+09 -7.768e+08 1.425e+09 -8.937e+08 1.320e+09 -1.008e+09 1.219e+09 -1.120e+09 1.120e+09 -1.231e+09 1.021e+09 -1.340e+09 9.219e+08 -1.446e+09 8.207e+08 -1.548e+09 7.168e+08 -1.644e+09 6.095e+08 -1.733e+09 4.986e+08 -1.811e+09 3.845e+08 -1.878e+09 2.678e+08 -1.931e+09 1.494e+08 -1.969e+09 3.076e+07 -1.990e+09 -8.659e+07 -1.993e+09 -2.011e+08 -1.977e+09 -3.108e+08 -1.943e+09 -4.139e+08 -1.890e+09 -5.088e+08 -1.819e+09 -5.936e+08 -1.731e+09 -6.668e+08 -1.628e+09 -7.273e+08 -1.512e+09 -7.738e+08 -1.384e+09 -8.058e+08 -1.248e+09 -8.229e+08 -1.105e+09 -8.249e+08 -9.599e+08 -8.124e+08 -8.145e+08 -7.861e+08 -6.722e+08 -7.473e+08 -5.358e+08 -6.975e+08 -4.081e+08 -6.390e+08 -2.914e+08 -5.741e+08 -1.878e+08 -5.057e+08 -9.804e+07 -4.371e+08 -2.222e+07 -3.715e+08 4.154e+07 -3.120e+08 9.737e+07 -2.609e+08 1.515e+08 -2.182e+08 2.114e+08 -1.811e+08 2.843e+08 -1.438e+08 3.746e+08 -9.885e+07 4.845e+08 -3.903e+07 6.137e+08 4.202e+07 7.604e+08 1.492e+08 9.215e+08 2.863e+08 1.094e+09 4.561e+08 1.273e+09 6.603e+08 1.455e+09 9.001e+08 1.634e+09 1.176e+09 1.806e+09 1.487e+09 1.965e+09 1.833e+09 2.107e+09 2.212e+09 2.226e+09 2.622e+09 2.318e+09 3.061e+09 2.377e+09 3.525e+09 2.400e+09 4.012e+09 2.383e+09 4.519e+09 2.321e+09 5.041e+09 2.212e+09 5.577e+09 2.052e+09 6.121e+09 1.839e+09 6.673e+09 1.571e+09 7.227e+09 1.246e+09 7.782e+09 8.610e+08 8.334e+09 4.156e+08 8.883e+09 -9.197e+07 9.423e+09 -6.636e+08 9.955e+09 -1.301e+09 1.048e+10 -2.004e+09 1.098e+10 -2.775e+09 1.147e+10 -3.615e+09 1.194e+10 -4.523e+09 1.238e+10 -5.501e+09 1.280e+10 -6.547e+09 1.318e+10 -7.659e+09 1.352e+10 -8.837e+09 1.383e+10 -1.008e+10 1.409e+10 -1.137e+10 1.429e+10 -1.272e+10 1.443e+10 -1.411e+10 1.451e+10 -1.553e+10 1.451e+10 -1.698e+10 1.443e+10 -1.844e+10 1.426e+10 -1.989e+10 1.401e+10 -2.133e+10 1.366e+10 -2.273e+10 1.322e+10 -2.409e+10 1.269e+10 -2.538e+10 1.206e+10 -2.659e+10 1.134e+10 -2.770e+10 1.052e+10 -2.870e+10 9.628e+09 -2.958e+10 8.654e+09 -3.031e+10 7.612e+09 -3.088e+10 6.509e+09 -3.129e+10 5.358e+09 -3.153e+10 4.170e+09 -3.159e+10 2.958e+09 -3.146e+10 1.735e+09 -3.115e+10 5.174e+08 -3.065e+10 -6.831e+08 -2.998e+10 -1.852e+09 -2.913e+10 -2.973e+09 -2.811e+10 -4.036e+09 -2.694e+10 -5.028e+09 -2.564e+10 -5.936e+09 -2.421e+10 -6.753e+09 -2.267e+10 -7.470e+09 -2.106e+10 -8.080e+09 -1.938e+10 -8.581e+09 -1.766e+10 -8.970e+09 -1.592e+10 -9.248e+09 -1.418e+10 -9.419e+09 -1.247e+10 -9.488e+09 -1.080e+10 -9.465e+09 -9.195e+09 -9.358e+09 -7.668e+09 -9.183e+09 -6.232e+09 -8.953e+09 -4.892e+09 -8.685e+09 -3.649e+09 -8.398e+09 -2.500e+09 -8.110e+09 -1.432e+09 -7.835e+09 -4.273e+08 -7.587e+09 5.344e+08 -7.374e+09 1.480e+09 -7.198e+09 2.436e+09 -7.057e+09 3.423e+09 -6.938e+09 4.463e+09 -6.828e+09 5.565e+09 -6.709e+09 6.735e+09 -6.561e+09 7.970e+09 -6.367e+09 9.262e+09 -6.109e+09 1.059e+10 -5.773e+09 1.195e+10 -5.350e+09 1.331e+10 -4.832e+09 1.465e+10 -4.215e+09 1.594e+10 -3.499e+09 1.716e+10 -2.685e+09 1.828e+10 -1.782e+09 1.929e+10 -7.957e+08 2.016e+10 2.620e+08 2.087e+10 1.377e+09 2.142e+10 2.536e+09 2.177e+10 3.723e+09 2.194e+10 4.918e+09 2.192e+10 6.107e+09 2.169e+10 7.271e+09 2.128e+10 8.393e+09 2.068e+10 9.456e+09 1.991e+10 1.045e+10 1.898e+10 1.135e+10 1.790e+10 1.216e+10 1.670e+10 1.286e+10 1.540e+10 1.345e+10 1.402e+10 1.392e+10 1.257e+10 1.427e+10 1.109e+10 1.452e+10 9.581e+09 1.465e+10 8.075e+09 1.468e+10 6.582e+09 1.461e+10 5.116e+09 1.445e+10 3.686e+09 1.422e+10 2.300e+09 1.392e+10 9.613e+08 1.355e+10 -3.277e+08 1.314e+10 -1.567e+09 1.267e+10 -2.760e+09 1.216e+10 -3.907e+09 1.161e+10 -5.011e+09 1.101e+10 -6.073e+09 1.037e+10 -7.091e+09 9.675e+09 -8.061e+09 8.923e+09 -8.981e+09 8.108e+09 -9.842e+09 7.227e+09 -1.063e+10 6.277e+09 -1.135e+10 5.256e+09 -1.198e+10 4.164e+09 -1.251e+10 3.004e+09 -1.293e+10 1.779e+09 -1.324e+10 4.948e+08 -1.342e+10 -8.433e+08 -1.348e+10 -2.231e+09 -1.342e+10 -3.663e+09 -1.322e+10 -5.135e+09 -1.289e+10 -6.649e+09 -1.243e+10 -8.203e+09 -1.184e+10 -9.803e+09 -1.110e+10 -1.145e+10 -1.021e+10 -1.316e+10 -9.157e+09 -1.493e+10 -7.916e+09 -1.678e+10 -6.466e+09 -1.869e+10 -4.781e+09 -2.066e+10 -2.828e+09 -2.268e+10 -5.832e+08 -2.473e+10 1.980e+09 -2.678e+10 4.886e+09 -2.878e+10 8.144e+09 -3.069e+10 1.176e+10 -3.243e+10 1.572e+10 -3.395e+10 2.001e+10 -3.516e+10 2.458e+10 -3.598e+10 2.940e+10 -3.634e+10 3.440e+10 -3.616e+10 3.951e+10 -3.535e+10 4.465e+10 -3.385e+10 4.974e+10 -3.159e+10 5.469e+10 -2.853e+10 5.944e+10 -2.462e+10 6.393e+10 -1.981e+10 6.811e+10 -1.407e+10 7.200e+10 -7.318e+09 7.561e+10 5.220e+08 7.899e+10 9.612e+09 8.224e+10 2.021e+10 8.541e+10 3.269e+10 8.856e+10 4.759e+10 9.167e+10 6.566e+10 9.458e+10 8.784e+10 9.699e+10 1.153e+11 9.841e+10 1.494e+11 9.810e+10 1.917e+11 9.512e+10 2.440e+11 8.826e+10 3.083e+11 7.609e+10 3.866e+11 5.689e+10 4.813e+11 2.868e+10 5.950e+11 -1.073e+10 7.302e+11 -6.387e+10 8.899e+11 -1.336e+11 1.078e+12 -2.230e+11 1.296e+12 -3.354e+11 1.549e+12 -4.747e+11 1.841e+12 -6.446e+11 2.175e+12 -8.496e+11 2.555e+12 -1.095e+12 2.987e+12 -1.454e+12 3.473e+12 -1.772e+12 4.032e+12 -2.177e+12 4.648e+12 -2.644e+12 5.335e+12 -3.179e+12 6.098e+12 -3.659e+12 6.703e+12 -4.328e+12 7.608e+12 -5.084e+12 8.604e+12 -5.932e+12 9.695e+12 -6.877e+12 1.089e+13 -7.927e+12 1.220e+13 -9.089e+12 1.362e+13 -1.037e+13 1.516e+13 -1.177e+13 1.682e+13 -1.330e+13 1.862e+13 -1.497e+13 2.056e+13 -1.677e+13 2.264e+13 -1.872e+13 2.488e+13 -2.081e+13 2.726e+13 -2.306e+13 2.981e+13 -2.546e+13 3.252e+13 -2.801e+13 3.540e+13 -3.071e+13 3.845e+13 -3.358e+13 4.169e+13 -3.660e+13 4.509e+13 -3.976e+13 4.868e+13 -4.307e+13 5.246e+13 -4.653e+13 5.642e+13 -5.013e+13 6.058e+13 -5.386e+13 6.491e+13 -5.770e+13 6.945e+13 -6.166e+13 7.416e+13 -6.573e+13 7.906e+13 -6.989e+13 8.416e+13 -7.413e+13 8.943e+13 -7.844e+13 9.489e+13 -8.280e+13 1.005e+14 -8.720e+13 1.064e+14 -9.162e+13 1.123e+14 -9.604e+13 1.185e+14 -1.005e+14 1.247e+14 -1.049e+14 1.312e+14 -1.092e+14 1.379e+14 -1.136e+14 1.447e+14 -1.179e+14 1.516e+14 -1.219e+14 1.586e+14 -1.260e+14 1.659e+14 -1.299e+14 1.732e+14 -1.336e+14 1.806e+14 -1.372e+14 1.881e+14 -1.406e+14 1.957e+14 -1.437e+14 2.033e+14 -1.467e+14 2.111e+14 -1.494e+14 2.189e+14 -1.519e+14 2.267e+14 -1.541e+14 2.346e+14 -1.560e+14 2.425e+14 -1.577e+14 2.504e+14 -1.590e+14 2.584e+14 -1.601e+14 2.664e+14 -1.609e+14 2.743e+14 -1.613e+14 2.823e+14 -1.614e+14 2.902e+14 -1.612e+14 2.981e+14 -1.606e+14 3.059e+14 -1.597e+14 3.138e+14 -1.585e+14 3.215e+14 -1.570e+14 3.293e+14 -1.551e+14 3.370e+14 -1.527e+14 3.446e+14 -1.502e+14 3.521e+14 -1.473e+14 3.595e+14 -1.441e+14 3.668e+14 -1.406e+14 3.740e+14 -1.368e+14 3.812e+14 -1.326e+14 3.882e+14 -1.281e+14 3.950e+14 -1.234e+14 4.019e+14 -1.185e+14 4.085e+14 -1.132e+14 4.150e+14 -1.077e+14 4.213e+14 -1.021e+14 4.277e+14 -9.619e+13 4.339e+14 -9.011e+13 4.398e+14 -8.382e+13 4.456e+14 -7.736e+13 4.512e+14 -7.072e+13 4.566e+14 -6.394e+13 4.618e+14 -5.701e+13 4.668e+14 -4.997e+13 4.715e+14 -4.283e+13 4.760e+14 -3.561e+13 4.801e+14 -2.832e+13 4.840e+14 -2.100e+13 4.877e+14 -1.365e+13 4.910e+14 -6.287e+12 4.939e+14 1.046e+12 4.966e+14 8.342e+12 4.988e+14 1.558e+13 5.008e+14 2.273e+13 5.023e+14 2.977e+13 5.034e+14 3.670e+13 5.041e+14 4.347e+13 5.045e+14 5.008e+13 5.044e+14 5.650e+13 5.038e+14 6.271e+13 5.028e+14 6.870e+13 5.014e+14 7.444e+13 4.995e+14 7.992e+13 4.971e+14 8.511e+13 4.943e+14 9.002e+13 4.910e+14 9.461e+13 4.872e+14 9.888e+13 4.830e+14 1.028e+14 4.784e+14 1.064e+14 4.732e+14 1.096e+14 4.676e+14 1.125e+14 4.616e+14 1.150e+14 4.551e+14 1.171e+14 4.482e+14 1.189e+14 4.408e+14 1.203e+14 4.331e+14 1.213e+14 4.250e+14 1.221e+14 4.164e+14 1.225e+14 4.076e+14 1.224e+14 3.984e+14 1.221e+14 3.888e+14 1.213e+14 3.790e+14 1.202e+14 3.690e+14 1.189e+14 3.587e+14 1.172e+14 3.483e+14 1.152e+14 3.375e+14 1.130e+14 3.268e+14 1.105e+14 3.158e+14 1.077e+14 3.047e+14 1.047e+14 2.936e+14 1.016e+14 2.825e+14 9.821e+13 2.713e+14 9.471e+13 2.602e+14 9.108e+13 2.491e+14 8.734e+13 2.381e+14 8.350e+13 2.271e+14 7.960e+13 2.163e+14 7.567e+13 2.056e+14 7.170e+13 1.951e+14 6.774e+13 1.848e+14 6.378e+13 1.747e+14 5.987e+13 1.648e+14 5.602e+13 1.553e+14 5.223e+13 1.459e+14 4.852e+13 1.368e+14 4.491e+13 1.280e+14 4.142e+13 1.196e+14 3.804e+13 1.115e+14 3.481e+13 1.036e+14 3.171e+13 9.614e+13 2.874e+13 8.899e+13 2.594e+13 8.218e+13 2.330e+13 7.569e+13 2.081e+13 6.955e+13 1.849e+13 6.374e+13 1.632e+13 5.826e+13 1.431e+13 5.314e+13 1.246e+13 4.833e+13 1.076e+13 4.383e+13 9.209e+12 3.963e+13 7.801e+12 3.574e+13 6.529e+12 3.211e+13 5.390e+12 2.877e+13 4.375e+12 2.570e+13 3.478e+12 2.286e+13 2.691e+12 2.028e+13 2.008e+12 1.791e+13 1.369e+12 1.520e+13 8.860e+11 1.332e+13 4.809e+11 1.163e+13 1.456e+11 1.011e+13 -1.269e+11 8.754e+12 -3.433e+11 7.546e+12 -5.107e+11 6.475e+12 -6.352e+11 5.530e+12 -7.229e+11 4.701e+12 -7.792e+11 3.976e+12 -8.094e+11 3.345e+12 -8.181e+11 2.800e+12 -8.095e+11 2.331e+12 -7.873e+11 1.929e+12 -7.549e+11 1.587e+12 -7.150e+11 1.297e+12 -6.700e+11 1.052e+12 -6.218e+11 8.475e+11 -5.721e+11 6.764e+11 -5.220e+11 5.343e+11 -4.724e+11 4.169e+11 -4.240e+11 3.204e+11 -3.772e+11 2.415e+11 -3.324e+11 1.774e+11 -2.897e+11 1.259e+11 -2.493e+11 8.497e+10 -2.113e+11 5.294e+10 -1.759e+11 2.845e+10 -1.431e+11 1.031e+10 -1.133e+11 -2.448e+09 -8.667e+10 -1.075e+10 -6.334e+10 -1.539e+10 -4.360e+10 -1.716e+10 -2.761e+10 -1.685e+10 -1.540e+10 -1.531e+10 -6.660e+09 -1.356e+10 -2.155e+08 -1.267e+10 6.087e+09 -1.325e+10 1.460e+10 -1.494e+10 2.678e+10 -1.678e+10 4.318e+10 -1.787e+10 6.383e+10 -1.758e+10 8.860e+10 -1.544e+10 1.172e+11 -1.112e+10 1.493e+11 -4.381e+09 1.845e+11 4.952e+09 2.222e+11 1.698e+10 2.620e+11 3.171e+10 3.032e+11 4.911e+10 3.454e+11 6.911e+10 3.879e+11 9.151e+10 4.301e+11 1.161e+11 4.715e+11 1.427e+11 5.115e+11 1.710e+11 5.495e+11 2.006e+11 5.850e+11 2.312e+11 6.176e+11 2.625e+11 6.468e+11 2.940e+11 6.724e+11 3.254e+11 6.940e+11 3.563e+11 7.113e+11 3.863e+11 7.242e+11 4.151e+11 7.325e+11 4.422e+11 7.363e+11 4.674e+11 7.356e+11 4.905e+11 7.304e+11 5.111e+11 7.210e+11 5.291e+11 7.074e+11 5.442e+11 6.901e+11 5.564e+11 6.693e+11 5.657e+11 6.452e+11 5.718e+11 6.183e+11 5.749e+11 5.889e+11 5.748e+11 5.573e+11 5.717e+11 5.241e+11 5.658e+11 4.897e+11 5.570e+11 4.543e+11 5.456e+11 4.185e+11 5.318e+11 3.826e+11 5.158e+11 3.469e+11 4.978e+11 3.119e+11 4.780e+11 2.778e+11 4.568e+11 2.448e+11 4.344e+11 2.133e+11 4.110e+11 1.835e+11 3.870e+11 1.554e+11 3.625e+11 1.293e+11 3.378e+11 1.051e+11 3.131e+11 8.310e+10 2.888e+11 6.316e+10 2.648e+11 4.533e+10 2.415e+11 2.954e+10 2.191e+11 1.573e+10 1.975e+11 3.834e+09 1.770e+11 -6.279e+09 1.576e+11 -1.473e+10 1.395e+11 -2.164e+10 1.226e+11 -2.718e+10 1.070e+11 -3.150e+10 9.265e+10 -3.474e+10 7.957e+10 -3.706e+10 6.770e+10 -3.862e+10 5.700e+10 -3.955e+10 4.739e+10 -3.999e+10 3.877e+10 -4.006e+10 3.106e+10 -3.985e+10 2.414e+10 -3.944e+10 1.791e+10 -3.891e+10 1.223e+10 -3.829e+10 7.021e+09 -3.762e+10 2.162e+09 -3.689e+10 -2.449e+09 -3.611e+10 -6.891e+09 -3.525e+10 -1.124e+10 -3.428e+10 -1.556e+10 -3.318e+10 -1.990e+10 -3.190e+10 -2.428e+10 -3.040e+10 -2.874e+10 -2.867e+10 -3.329e+10 -2.664e+10 -3.792e+10 -2.431e+10 -4.266e+10 -2.163e+10 -4.747e+10 -1.857e+10 -5.236e+10 -1.513e+10 -5.730e+10 -1.127e+10 -6.226e+10 -6.984e+09 -6.723e+10 -2.265e+09 -7.217e+10 2.886e+09 -7.704e+10 8.463e+09 -8.180e+10 1.446e+10 -8.643e+10 0.005 -52.830 -51.861 -50.892 -49.923 -48.954 -47.985 -47.058 -46.228 -45.488 -44.830 -44.251 -43.745 -43.309 -42.940 -42.637 -42.398 -42.221 -42.107 -42.055 -42.065 -42.139 -42.277 -42.482 -42.755 -43.101 -43.522 -44.023 -44.611 -45.293 -46.077 -46.976 -48.007 -49.187 -50.541 -52.103 -53.923 -56.073 -58.672 -61.929 -66.300 -73.143 -80.664 -78.131 -73.043 -70.604 -68.460 -65.741 -62.595 -59.494 -56.676 -54.185 -51.992 -50.054 -48.335 -46.801 -45.428 -44.194 -43.085 -42.087 -41.190 -40.385 -39.665 -39.024 -38.458 -37.964 -37.537 -37.176 -36.879 -36.645 -36.472 -36.360 -36.309 -36.320 -36.394 -36.533 -36.737 -37.010 -37.353 -37.771 -38.269 -38.851 -39.524 -40.296 -41.176 -42.177 -43.312 -44.597 -46.055 -47.708 -49.588 -51.727 -54.167 -56.962 -60.230 -64.361 -70.810 -72.895 -66.895 -60.371 -55.899 -52.393 -49.480 -46.983 -44.805 -42.881 -41.167 -39.630 -38.246 -36.996 -35.865 -34.841 -33.916 -33.080 -32.328 -31.654 -31.055 -30.529 -30.072 -29.681 -29.355 -29.094 -28.898 -28.766 -28.698 -28.696 -28.764 -28.903 -29.117 -29.410 -29.789 -30.259 -30.829 -31.510 -32.316 -33.264 -34.376 -35.684 -37.228 -39.067 -41.288 -44.024 -47.497 -52.092 -58.244 -63.513 -65.275 -65.431 -58.681 -50.952 -45.229 -40.842 -37.270 -34.246 -31.619 -29.293 -27.207 -25.314 -23.583 -21.990 -20.517 -19.146 -17.867 -16.669 -15.544 -14.486 -13.488 -12.547 -11.658 -10.817 -10.022 -9.269 -8.556 -7.881 -7.242 -6.637 -6.065 -5.524 -5.014 -4.532 -4.079 -3.653 -3.253 -2.880 -2.531 -2.206 -1.905 -1.628 -1.373 -1.141 -0.932 -0.744 -0.577 -0.432 -0.308 -0.205 -0.123 -0.061 -0.020 0.000 -0.000 -0.021 -0.061 -0.121 -0.202 -0.304 -0.427 -0.571 -0.736 -0.923 -1.132 -1.362 -1.615 -1.892 -2.191 -2.514 -2.862 -3.234 -3.632 -4.057 -4.508 -4.988 -5.497 -6.035 -6.606 -7.209 -7.847 -8.520 -9.232 -9.984 -10.779 -11.619 -12.509 -13.451 -14.451 -15.513 -16.644 -17.852 -19.145 -20.535 -22.037 -23.669 -25.455 -27.430 -29.647 -32.182 -35.161 -38.827 -43.753 -51.725 -61.828 -52.137 -48.240 -46.688 -46.245 -46.409 -46.698 -46.474 -45.298 -43.400 -41.316 -39.370 -37.658 -36.182 -34.919 -33.841 -32.925 -32.149 -31.498 -30.959 -30.520 -30.174 -29.914 -29.734 -29.631 -29.600 -29.639 -29.746 -29.920 -30.161 -30.466 -30.838 -31.277 -31.787 -32.368 -33.023 -33.758 -34.578 -35.489 -36.496 -37.611 -38.844 -40.210 -41.728 -43.422 -45.324 -47.477 -49.941 -52.803 -56.190 -60.300 -65.347 -70.434 -71.967 -68.993 -65.176 -61.542 -58.243 -55.350 -52.852 -50.700 -48.841 -47.230 -45.829 -44.608 -43.545 -42.620 -41.818 -41.127 -40.539 -40.044 -39.638 -39.314 -39.068 -38.898 -38.802 -38.776 -38.821 -38.936 -39.122 -39.380 -39.709 -40.114 -40.595 -41.158 -41.807 -42.547 -43.387 -44.336 -45.404 -46.608 -47.964 -49.496 -51.233 -53.206 -55.447 -57.964 -60.659 -63.182 -64.934 -65.675 -65.906 -66.262 -66.915 -67.246 -66.057 -63.325 -60.161 -57.268 -54.772 -52.630 -50.779 -49.166 -47.751 -46.502 -45.397 -44.416 -43.547 -42.777 -42.096 -41.498 -40.977 -40.528 -40.146 -39.827 -39.568 -39.368 -39.223 -39.134 -39.097 -39.114 -39.182 -39.303 -39.475 -39.699 -39.976 -40.307 -40.693 -41.135 -41.635 -42.197 -42.822 -43.514 -44.278 -45.118 -46.041 -47.053 -48.105 -49.156 -50.208 -51.259 -52.311 0.03 -18.4993 -18.1353 -17.7749 -17.4182 -17.065 -16.7155 -16.3696 -16.0273 -15.6886 -15.3536 -15.0221 -14.6943 -14.3701 -14.0495 -13.7325 -13.4192 -13.1094 -12.8033 -12.5008 -12.2019 -11.9066 -11.6149 -11.3269 -11.0425 -10.7616 -10.4844 -10.2109 -9.9409 -9.6745 -9.4118 -9.1527 -8.8972 -8.6453 -8.397 -8.1524 -7.9113 -7.6739 -7.4401 -7.2099 -6.9833 -6.7603 -6.541 -6.3253 -6.1132 -5.9047 -5.6998 -5.4985 -5.3009 -5.1068 -4.9164 -4.7296 -4.5464 -4.3669 -4.1909 -4.0186 -3.8499 -3.6847 -3.5233 -3.3654 -3.2111 -3.0605 -2.9135 -2.7701 -2.6303 -2.4941 -2.3615 -2.2326 -2.1073 -1.9855 -1.8674 -1.753 -1.6421 -1.5349 -1.4312 -1.3312 -1.2348 -1.142 -1.0529 -0.9673 -0.88536 -0.80704 -0.73234 -0.66125 -0.59378 -0.52992 -0.46968 -0.41306 -0.36005 -0.31066 -0.26488 -0.22272 -0.18418 -0.14925 -0.11794 -0.09024 -0.06616 -0.045696 -0.028848 -0.015616 -0.0059999 0 0.0023839 0.0011517 -0.0036964 -0.012161 -0.024241 -0.039937 -0.059249 -0.082178 -0.10872 -0.13888 -0.17266 -0.21005 -0.25106 -0.29568 -0.34392 -0.39578 -0.45125 -0.51034 -0.57305 -0.63937 -0.7093 -0.78286 -0.86002 -0.94081 -1.0252 -1.1132 -1.2049 -1.3001 -1.399 -1.5015 -1.6075 -1.7173 -1.8306 -1.9475 -2.0681 -2.1923 -2.3201 -2.4515 -2.5865 -2.7251 -2.8674 -3.0133 -3.1628 -3.3159 -3.4726 -3.6329 -3.7969 -3.9644 -4.1356 -4.3104 -4.4888 -4.6709 -4.8565 -5.0458 -5.2387 -5.4352 -5.6353 -5.839 -6.0464 -6.2573 -6.4719 -6.6901 -6.9119 -7.1373 -7.3664 -7.599 -7.8353 -8.0752 -8.3187 -8.5658 -8.8166 -9.0709 -9.3289 -9.5905 -9.8557 -10.1245 -10.3969 -10.673 -10.9526 -11.2359 -11.5228 -11.8133 -12.1075 -12.4052 -12.7066 -13.0115 -13.3201 -13.6323 -13.9482 -14.2676 -14.5907 -14.9173 -15.2476 -15.5815 -15.9191 -16.2602 -16.605 -16.9533 -17.3053 -17.6609 1.0 52734.43872 IW2 HV 31.58 36.15 0.050 -4.447e+09 1.942e+09 -4.174e+09 1.723e+09 -3.884e+09 1.509e+09 -3.584e+09 1.303e+09 -3.275e+09 1.106e+09 -2.962e+09 9.225e+08 -2.650e+09 7.524e+08 -2.342e+09 5.973e+08 -2.042e+09 4.587e+08 -1.754e+09 3.368e+08 -1.481e+09 2.319e+08 -1.226e+09 1.441e+08 -9.925e+08 7.281e+07 -7.814e+08 1.726e+07 -5.953e+08 -2.349e+07 -4.360e+08 -5.053e+07 -3.033e+08 -6.591e+07 -1.977e+08 -7.169e+07 -1.182e+08 -7.070e+07 -6.272e+07 -6.699e+07 -2.553e+07 -6.628e+07 4.209e+06 -7.384e+07 3.872e+07 -9.060e+07 8.536e+07 -1.137e+08 1.463e+08 -1.398e+08 2.210e+08 -1.662e+08 3.074e+08 -1.909e+08 4.029e+08 -2.123e+08 5.049e+08 -2.291e+08 6.105e+08 -2.405e+08 7.168e+08 -2.455e+08 8.211e+08 -2.438e+08 9.207e+08 -2.350e+08 1.013e+09 -2.190e+08 1.096e+09 -1.960e+08 1.168e+09 -1.661e+08 1.226e+09 -1.301e+08 1.270e+09 -8.858e+07 1.298e+09 -4.248e+07 1.311e+09 7.125e+06 1.307e+09 5.912e+07 1.287e+09 1.122e+08 1.252e+09 1.651e+08 1.203e+09 2.166e+08 1.141e+09 2.653e+08 1.068e+09 3.103e+08 9.850e+08 3.505e+08 8.955e+08 3.851e+08 8.013e+08 4.138e+08 7.047e+08 4.364e+08 6.079e+08 4.531e+08 5.130e+08 4.644e+08 4.215e+08 4.713e+08 3.345e+08 4.750e+08 2.525e+08 4.770e+08 1.752e+08 4.791e+08 1.012e+08 4.826e+08 2.874e+07 4.887e+08 -4.461e+07 4.981e+08 -1.215e+08 5.105e+08 -2.041e+08 5.250e+08 -2.944e+08 5.405e+08 -3.934e+08 5.551e+08 -5.014e+08 5.670e+08 -6.180e+08 5.744e+08 -7.423e+08 5.757e+08 -8.726e+08 5.697e+08 -1.007e+09 5.553e+08 -1.144e+09 5.316e+08 -1.280e+09 4.984e+08 -1.414e+09 4.557e+08 -1.542e+09 4.036e+08 -1.663e+09 3.427e+08 -1.774e+09 2.736e+08 -1.873e+09 1.974e+08 -1.958e+09 1.153e+08 -2.028e+09 2.858e+07 -2.081e+09 -6.149e+07 -2.116e+09 -1.532e+08 -2.132e+09 -2.449e+08 -2.129e+09 -3.352e+08 -2.106e+09 -4.223e+08 -2.064e+09 -5.046e+08 -2.004e+09 -5.806e+08 -1.925e+09 -6.488e+08 -1.830e+09 -7.079e+08 -1.720e+09 -7.566e+08 -1.597e+09 -7.940e+08 -1.463e+09 -8.192e+08 -1.320e+09 -8.317e+08 -1.171e+09 -8.313e+08 -1.019e+09 -8.179e+08 -8.673e+08 -7.921e+08 -7.181e+08 -7.547e+08 -5.747e+08 -7.068e+08 -4.399e+08 -6.502e+08 -3.163e+08 -5.870e+08 -2.060e+08 -5.199e+08 -1.101e+08 -4.517e+08 -2.853e+07 -3.860e+08 4.037e+07 -3.258e+08 1.010e+08 -2.734e+08 1.599e+08 -2.289e+08 2.252e+08 -1.891e+08 3.047e+08 -1.476e+08 4.035e+08 -9.571e+07 5.240e+08 -2.471e+07 6.660e+08 7.360e+07 8.276e+08 2.061e+08 1.006e+09 3.789e+08 1.196e+09 5.971e+08 1.395e+09 8.651e+08 1.596e+09 1.187e+09 1.794e+09 1.565e+09 1.983e+09 2.003e+09 2.156e+09 2.502e+09 2.307e+09 3.065e+09 2.429e+09 3.691e+09 2.515e+09 4.380e+09 2.557e+09 5.134e+09 2.550e+09 5.950e+09 2.486e+09 6.827e+09 2.358e+09 7.764e+09 2.160e+09 8.757e+09 1.885e+09 9.803e+09 1.528e+09 1.090e+10 1.082e+09 1.204e+10 5.438e+08 1.322e+10 -9.340e+07 1.444e+10 -8.333e+08 1.569e+10 -1.679e+09 1.696e+10 -2.634e+09 1.825e+10 -3.702e+09 1.955e+10 -4.882e+09 2.084e+10 -6.177e+09 2.213e+10 -7.586e+09 2.341e+10 -9.107e+09 2.465e+10 -1.074e+10 2.586e+10 -1.248e+10 2.702e+10 -1.432e+10 2.812e+10 -1.625e+10 2.915e+10 -1.828e+10 3.010e+10 -2.038e+10 3.095e+10 -2.256e+10 3.170e+10 -2.479e+10 3.232e+10 -2.705e+10 3.281e+10 -2.934e+10 3.316e+10 -3.164e+10 3.335e+10 -3.391e+10 3.337e+10 -3.616e+10 3.322e+10 -3.834e+10 3.288e+10 -4.044e+10 3.236e+10 -4.244e+10 3.165e+10 -4.430e+10 3.075e+10 -4.601e+10 2.966e+10 -4.753e+10 2.839e+10 -4.886e+10 2.695e+10 -4.996e+10 2.534e+10 -5.082e+10 2.358e+10 -5.142e+10 2.169e+10 -5.175e+10 1.969e+10 -5.179e+10 1.759e+10 -5.155e+10 1.542e+10 -5.101e+10 1.321e+10 -5.018e+10 1.098e+10 -4.907e+10 8.751e+09 -4.768e+10 6.559e+09 -4.604e+10 4.424e+09 -4.416e+10 2.372e+09 -4.206e+10 4.263e+08 -3.978e+10 -1.394e+09 -3.734e+10 -3.070e+09 -3.477e+10 -4.587e+09 -3.211e+10 -5.935e+09 -2.939e+10 -7.106e+09 -2.666e+10 -8.096e+09 -2.393e+10 -8.907e+09 -2.125e+10 -9.544e+09 -1.866e+10 -1.001e+10 -1.616e+10 -1.034e+10 -1.380e+10 -1.052e+10 -1.158e+10 -1.059e+10 -9.519e+09 -1.058e+10 -7.620e+09 -1.050e+10 -5.878e+09 -1.039e+10 -4.276e+09 -1.027e+10 -2.791e+09 -1.017e+10 -1.392e+09 -1.011e+10 -4.110e+07 -1.009e+10 1.301e+09 -1.011e+10 2.668e+09 -1.017e+10 4.093e+09 -1.026e+10 5.599e+09 -1.034e+10 7.195e+09 -1.041e+10 8.889e+09 -1.042e+10 1.067e+10 -1.036e+10 1.254e+10 -1.020e+10 1.446e+10 -9.920e+09 1.642e+10 -9.509e+09 1.838e+10 -8.953e+09 2.033e+10 -8.240e+09 2.223e+10 -7.368e+09 2.404e+10 -6.336e+09 2.575e+10 -5.146e+09 2.731e+10 -3.805e+09 2.871e+10 -2.324e+09 2.991e+10 -7.157e+08 3.090e+10 1.004e+09 3.166e+10 2.814e+09 3.218e+10 4.696e+09 3.244e+10 6.628e+09 3.244e+10 8.584e+09 3.219e+10 1.054e+10 3.168e+10 1.248e+10 3.092e+10 1.437e+10 2.992e+10 1.620e+10 2.871e+10 1.795e+10 2.729e+10 1.959e+10 2.569e+10 2.111e+10 2.393e+10 2.250e+10 2.202e+10 2.376e+10 2.000e+10 2.488e+10 1.788e+10 2.584e+10 1.569e+10 2.665e+10 1.344e+10 2.731e+10 1.115e+10 2.781e+10 8.837e+09 2.815e+10 6.518e+09 2.835e+10 4.207e+09 2.839e+10 1.917e+09 2.828e+10 -3.408e+08 2.801e+10 -2.552e+09 2.759e+10 -4.703e+09 2.702e+10 -6.781e+09 2.630e+10 -8.769e+09 2.542e+10 -1.065e+10 2.439e+10 -1.241e+10 2.320e+10 -1.404e+10 2.186e+10 -1.550e+10 2.039e+10 -1.680e+10 1.878e+10 -1.791e+10 1.705e+10 -1.881e+10 1.522e+10 -1.951e+10 1.329e+10 -1.998e+10 1.130e+10 -2.024e+10 9.258e+09 -2.028e+10 7.192e+09 -2.011e+10 5.122e+09 -1.974e+10 3.071e+09 -1.920e+10 1.052e+09 -1.850e+10 -9.194e+08 -1.766e+10 -2.839e+09 -1.672e+10 -4.710e+09 -1.568e+10 -6.543e+09 -1.456e+10 -8.356e+09 -1.337e+10 -1.018e+10 -1.210e+10 -1.204e+10 -1.073e+10 -1.398e+10 -9.221e+09 -1.602e+10 -7.524e+09 -1.817e+10 -5.589e+09 -2.044e+10 -3.357e+09 -2.281e+10 -7.787e+08 -2.526e+10 2.191e+09 -2.772e+10 5.589e+09 -3.012e+10 9.425e+09 -3.239e+10 1.370e+10 -3.441e+10 1.839e+10 -3.608e+10 2.347e+10 -3.730e+10 2.886e+10 -3.794e+10 3.452e+10 -3.790e+10 4.035e+10 -3.709e+10 4.627e+10 -3.540e+10 5.220e+10 -3.276e+10 5.807e+10 -2.909e+10 6.384e+10 -2.433e+10 6.949e+10 -1.839e+10 7.503e+10 -1.117e+10 8.054e+10 -2.508e+09 8.611e+10 7.869e+09 9.188e+10 2.033e+10 9.794e+10 3.546e+10 1.044e+11 5.406e+10 1.112e+11 7.715e+10 1.182e+11 1.060e+11 1.250e+11 1.423e+11 1.311e+11 1.877e+11 1.357e+11 2.444e+11 1.376e+11 3.146e+11 1.357e+11 4.009e+11 1.282e+11 5.060e+11 1.133e+11 6.332e+11 8.882e+10 7.853e+11 5.237e+10 9.660e+11 1.089e+09 1.179e+12 -6.802e+10 1.429e+12 -1.584e+11 1.720e+12 -2.739e+11 2.056e+12 -4.185e+11 2.442e+12 -5.966e+11 2.883e+12 -8.133e+11 3.386e+12 -1.094e+12 3.961e+12 -1.422e+12 4.609e+12 -1.794e+12 5.331e+12 -2.227e+12 6.136e+12 -2.728e+12 7.032e+12 -3.141e+12 7.627e+12 -3.769e+12 8.675e+12 -4.482e+12 9.827e+12 -5.288e+12 1.110e+13 -6.192e+12 1.249e+13 -7.203e+12 1.401e+13 -8.329e+12 1.566e+13 -9.570e+12 1.745e+13 -1.094e+13 1.939e+13 -1.246e+13 2.149e+13 -1.410e+13 2.373e+13 -1.589e+13 2.615e+13 -1.784e+13 2.874e+13 -1.994e+13 3.151e+13 -2.219e+13 3.446e+13 -2.462e+13 3.758e+13 -2.721e+13 4.091e+13 -2.996e+13 4.443e+13 -3.289e+13 4.814e+13 -3.598e+13 5.204e+13 -3.925e+13 5.615e+13 -4.267e+13 6.048e+13 -4.626e+13 6.499e+13 -4.999e+13 6.971e+13 -5.388e+13 7.464e+13 -5.791e+13 7.976e+13 -6.207e+13 8.507e+13 -6.635e+13 9.060e+13 -7.074e+13 9.631e+13 -7.523e+13 1.022e+14 -7.981e+13 1.083e+14 -8.445e+13 1.145e+14 -8.915e+13 1.210e+14 -9.388e+13 1.277e+14 -9.864e+13 1.344e+14 -1.034e+14 1.414e+14 -1.082e+14 1.485e+14 -1.129e+14 1.558e+14 -1.176e+14 1.633e+14 -1.222e+14 1.708e+14 -1.268e+14 1.785e+14 -1.311e+14 1.864e+14 -1.354e+14 1.943e+14 -1.396e+14 2.023e+14 -1.436e+14 2.103e+14 -1.474e+14 2.186e+14 -1.509e+14 2.268e+14 -1.543e+14 2.351e+14 -1.574e+14 2.435e+14 -1.604e+14 2.520e+14 -1.630e+14 2.604e+14 -1.654e+14 2.689e+14 -1.674e+14 2.774e+14 -1.692e+14 2.859e+14 -1.707e+14 2.944e+14 -1.719e+14 3.029e+14 -1.728e+14 3.115e+14 -1.733e+14 3.199e+14 -1.735e+14 3.284e+14 -1.733e+14 3.368e+14 -1.728e+14 3.452e+14 -1.720e+14 3.535e+14 -1.708e+14 3.618e+14 -1.693e+14 3.699e+14 -1.675e+14 3.781e+14 -1.652e+14 3.861e+14 -1.628e+14 3.941e+14 -1.599e+14 4.019e+14 -1.567e+14 4.097e+14 -1.532e+14 4.174e+14 -1.495e+14 4.250e+14 -1.453e+14 4.324e+14 -1.409e+14 4.397e+14 -1.362e+14 4.470e+14 -1.314e+14 4.540e+14 -1.262e+14 4.610e+14 -1.208e+14 4.678e+14 -1.152e+14 4.745e+14 -1.094e+14 4.810e+14 -1.033e+14 4.874e+14 -9.717e+13 4.935e+14 -9.079e+13 4.994e+14 -8.425e+13 5.051e+14 -7.756e+13 5.106e+14 -7.075e+13 5.158e+14 -6.384e+13 5.209e+14 -5.684e+13 5.255e+14 -4.978e+13 5.299e+14 -4.266e+13 5.341e+14 -3.552e+13 5.378e+14 -2.838e+13 5.413e+14 -2.125e+13 5.444e+14 -1.416e+13 5.471e+14 -7.132e+12 5.495e+14 -1.886e+11 5.514e+14 6.654e+12 5.530e+14 1.337e+13 5.541e+14 1.994e+13 5.548e+14 2.634e+13 5.551e+14 3.255e+13 5.548e+14 3.855e+13 5.541e+14 4.432e+13 5.529e+14 4.986e+13 5.512e+14 5.513e+13 5.490e+14 6.012e+13 5.464e+14 6.481e+13 5.433e+14 6.920e+13 5.395e+14 7.326e+13 5.353e+14 7.701e+13 5.306e+14 8.040e+13 5.254e+14 8.346e+13 5.197e+14 8.616e+13 5.135e+14 8.851e+13 5.068e+14 9.051e+13 4.996e+14 9.214e+13 4.918e+14 9.344e+13 4.838e+14 9.445e+13 4.751e+14 9.513e+13 4.660e+14 9.546e+13 4.565e+14 9.546e+13 4.467e+14 9.513e+13 4.364e+14 9.448e+13 4.258e+14 9.353e+13 4.149e+14 9.228e+13 4.037e+14 9.076e+13 3.923e+14 8.898e+13 3.806e+14 8.696e+13 3.687e+14 8.472e+13 3.566e+14 8.227e+13 3.444e+14 7.965e+13 3.321e+14 7.685e+13 3.197e+14 7.391e+13 3.072e+14 7.086e+13 2.947e+14 6.770e+13 2.823e+14 6.447e+13 2.699e+14 6.117e+13 2.577e+14 5.784e+13 2.454e+14 5.448e+13 2.335e+14 5.113e+13 2.216e+14 4.778e+13 2.099e+14 4.448e+13 1.984e+14 4.123e+13 1.873e+14 3.804e+13 1.764e+14 3.493e+13 1.658e+14 3.192e+13 1.555e+14 2.901e+13 1.455e+14 2.620e+13 1.359e+14 2.353e+13 1.266e+14 2.098e+13 1.177e+14 1.857e+13 1.092e+14 1.630e+13 1.010e+14 1.418e+13 9.319e+13 1.219e+13 8.578e+13 1.036e+13 7.875e+13 8.667e+12 7.212e+13 7.119e+12 6.586e+13 5.715e+12 5.998e+13 4.447e+12 5.448e+13 3.312e+12 4.933e+13 2.305e+12 4.452e+13 1.419e+12 4.006e+13 6.477e+11 3.592e+13 -1.419e+10 3.210e+13 -5.741e+11 2.859e+13 -1.040e+12 2.536e+13 -1.420e+12 2.241e+13 -1.719e+12 1.972e+13 -1.844e+12 1.637e+13 -1.999e+12 1.428e+13 -2.099e+12 1.239e+13 -2.153e+12 1.071e+13 -2.166e+12 9.208e+12 -2.145e+12 7.878e+12 -2.096e+12 6.703e+12 -2.024e+12 5.671e+12 -1.935e+12 4.769e+12 -1.832e+12 3.986e+12 -1.719e+12 3.309e+12 -1.601e+12 2.728e+12 -1.481e+12 2.231e+12 -1.360e+12 1.809e+12 -1.241e+12 1.454e+12 -1.126e+12 1.155e+12 -1.015e+12 9.069e+11 -9.109e+11 7.013e+11 -8.128e+11 5.321e+11 -7.213e+11 3.939e+11 -6.364e+11 2.820e+11 -5.580e+11 1.921e+11 -4.859e+11 1.205e+11 -4.197e+11 6.433e+10 -3.591e+11 2.098e+10 -3.038e+11 -1.166e+10 -2.535e+11 -3.537e+10 -2.080e+11 -5.167e+10 -1.671e+11 -6.187e+10 -1.309e+11 -6.712e+10 -9.916e+10 -6.848e+10 -7.183e+10 -6.695e+10 -4.876e+10 -6.352e+10 -2.958e+10 -5.916e+10 -1.367e+10 -5.478e+10 -3.440e+07 -5.117e+10 1.274e+10 -4.874e+10 2.625e+10 -4.743e+10 4.190e+10 -4.670e+10 6.074e+10 -4.568e+10 8.332e+10 -4.350e+10 1.098e+11 -3.935e+10 1.400e+11 -3.260e+10 1.737e+11 -2.277e+10 2.104e+11 -9.538e+09 2.497e+11 7.316e+09 2.909e+11 2.790e+10 3.334e+11 5.216e+10 3.766e+11 8.001e+10 4.199e+11 1.113e+11 4.625e+11 1.456e+11 5.038e+11 1.827e+11 5.432e+11 2.223e+11 5.801e+11 2.636e+11 6.140e+11 3.064e+11 6.443e+11 3.501e+11 6.707e+11 3.940e+11 6.927e+11 4.376e+11 7.102e+11 4.804e+11 7.228e+11 5.218e+11 7.305e+11 5.613e+11 7.333e+11 5.983e+11 7.310e+11 6.324e+11 7.239e+11 6.632e+11 7.121e+11 6.904e+11 6.959e+11 7.136e+11 6.755e+11 7.326e+11 6.514e+11 7.472e+11 6.239e+11 7.575e+11 5.936e+11 7.635e+11 5.606e+11 7.651e+11 5.257e+11 7.624e+11 4.892e+11 7.555e+11 4.515e+11 7.446e+11 4.132e+11 7.300e+11 3.747e+11 7.121e+11 3.363e+11 6.910e+11 2.986e+11 6.672e+11 2.618e+11 6.410e+11 2.262e+11 6.128e+11 1.922e+11 5.830e+11 1.599e+11 5.520e+11 1.296e+11 5.201e+11 1.014e+11 4.876e+11 7.543e+10 4.550e+11 5.169e+10 4.224e+11 3.024e+10 3.903e+11 1.109e+10 3.588e+11 -5.836e+09 3.281e+11 -2.058e+10 2.985e+11 -3.323e+10 2.702e+11 -4.392e+10 2.431e+11 -5.276e+10 2.175e+11 -5.990e+10 1.935e+11 -6.549e+10 1.709e+11 -6.968e+10 1.500e+11 -7.263e+10 1.306e+11 -7.450e+10 1.127e+11 -7.544e+10 9.638e+10 -7.559e+10 8.145e+10 -7.510e+10 6.785e+10 -7.408e+10 5.549e+10 -7.264e+10 4.429e+10 -7.088e+10 3.413e+10 -6.888e+10 2.489e+10 -6.670e+10 1.647e+10 -6.439e+10 8.760e+09 -6.198e+10 1.640e+09 -5.949e+10 -4.970e+09 -5.693e+10 -1.116e+10 -5.428e+10 -1.704e+10 -5.153e+10 -2.264e+10 -4.865e+10 -2.804e+10 -4.563e+10 -3.330e+10 -4.241e+10 -3.843e+10 -3.898e+10 -4.347e+10 -3.528e+10 -4.844e+10 -3.131e+10 -5.334e+10 -2.702e+10 -5.816e+10 -2.237e+10 -6.292e+10 -1.737e+10 -6.757e+10 -1.198e+10 -7.211e+10 -6.184e+09 -7.652e+10 8.553e+06 -8.074e+10 6.600e+09 -8.476e+10 1.359e+10 -8.853e+10 2.094e+10 -9.201e+10 2.863e+10 -9.517e+10 3.663e+10 -9.795e+10 0.005 -52.164 -51.194 -50.225 -49.256 -48.286 -47.317 -46.389 -45.557 -44.812 -44.148 -43.561 -43.045 -42.597 -42.215 -41.896 -41.639 -41.442 -41.305 -41.228 -41.210 -41.252 -41.354 -41.520 -41.750 -42.047 -42.414 -42.856 -43.378 -43.985 -44.686 -45.491 -46.416 -47.474 -48.689 -50.092 -51.727 -53.662 -56.006 -58.962 -62.973 -69.389 -76.409 -73.331 -67.782 -65.337 -64.265 -64.041 -64.334 -64.589 -63.921 -61.932 -59.233 -56.538 -54.118 -52.000 -50.152 -48.532 -47.106 -45.844 -44.727 -43.735 -42.857 -42.081 -41.400 -40.805 -40.293 -39.858 -39.498 -39.210 -38.993 -38.844 -38.764 -38.753 -38.813 -38.943 -39.147 -39.426 -39.784 -40.225 -40.755 -41.379 -42.107 -42.948 -43.915 -45.021 -46.287 -47.733 -49.387 -51.278 -53.434 -55.869 -58.551 -61.383 -64.286 -67.613 -73.070 -74.300 -67.725 -60.879 -56.252 -52.689 -49.769 -47.294 -45.151 -43.267 -41.595 -40.101 -38.758 -37.548 -36.456 -35.470 -34.580 -33.779 -33.062 -32.422 -31.857 -31.365 -30.942 -30.586 -30.296 -30.073 -29.916 -29.825 -29.801 -29.847 -29.966 -30.161 -30.437 -30.798 -31.253 -31.810 -32.480 -33.277 -34.219 -35.329 -36.639 -38.192 -40.047 -42.287 -45.025 -48.374 -52.170 -55.105 -55.946 -56.176 -58.030 -60.104 -54.712 -47.847 -42.709 -38.741 -35.483 -32.702 -30.269 -28.102 -26.146 -24.364 -22.728 -21.217 -19.814 -18.506 -17.282 -16.133 -15.053 -14.035 -13.074 -12.165 -11.306 -10.493 -9.722 -8.992 -8.301 -7.645 -7.025 -6.437 -5.881 -5.355 -4.858 -4.390 -3.949 -3.534 -3.145 -2.781 -2.441 -2.126 -1.833 -1.564 -1.316 -1.091 -0.888 -0.706 -0.546 -0.406 -0.287 -0.189 -0.111 -0.054 -0.017 0.000 -0.004 -0.027 -0.070 -0.133 -0.217 -0.321 -0.446 -0.592 -0.759 -0.947 -1.157 -1.389 -1.643 -1.920 -2.220 -2.544 -2.892 -3.264 -3.662 -4.087 -4.538 -5.017 -5.525 -6.063 -6.632 -7.234 -7.870 -8.542 -9.251 -10.001 -10.793 -11.630 -12.517 -13.455 -14.451 -15.509 -16.635 -17.837 -19.124 -20.507 -22.001 -23.624 -25.402 -27.366 -29.571 -32.094 -35.059 -38.709 -43.618 -51.571 -61.656 -51.951 -48.048 -46.517 -46.158 -46.557 -47.364 -47.911 -47.305 -45.419 -43.054 -40.819 -38.883 -37.243 -35.859 -34.691 -33.706 -32.878 -32.186 -31.614 -31.151 -30.786 -30.511 -30.320 -30.210 -30.175 -30.213 -30.322 -30.500 -30.747 -31.062 -31.446 -31.901 -32.427 -33.028 -33.707 -34.469 -35.318 -36.261 -37.304 -38.456 -39.729 -41.133 -42.685 -44.403 -46.305 -48.414 -50.756 -53.358 -56.262 -59.559 -63.386 -66.902 -66.825 -62.703 -58.512 -55.125 -52.339 -49.990 -47.973 -46.222 -44.690 -43.343 -42.155 -41.105 -40.177 -39.360 -38.642 -38.016 -37.474 -37.010 -36.620 -36.300 -36.046 -35.856 -35.728 -35.661 -35.652 -35.702 -35.810 -35.977 -36.202 -36.487 -36.831 -37.238 -37.709 -38.246 -38.853 -39.534 -40.295 -41.140 -42.078 -43.117 -44.269 -45.547 -46.970 -48.559 -50.344 -52.364 -54.670 -57.331 -60.437 -64.073 -68.197 -72.228 -75.087 -76.506 -75.685 -71.974 -67.373 -63.366 -60.089 -57.383 -55.108 -53.168 -51.494 -50.038 -48.763 -47.645 -46.662 -45.798 -45.042 -44.383 -43.813 -43.324 -42.912 -42.571 -42.298 -42.090 -41.944 -41.859 -41.833 -41.866 -41.956 -42.103 -42.308 -42.571 -42.893 -43.275 -43.719 -44.227 -44.802 -45.447 -46.167 -46.966 -47.852 -48.831 -49.851 -50.871 -51.892 -52.912 -53.932 0.03 -19.0393 -18.6638 -18.292 -17.924 -17.5597 -17.1991 -16.8423 -16.4892 -16.1398 -15.7942 -15.4524 -15.1143 -14.7799 -14.4492 -14.1223 -13.7992 -13.4798 -13.1641 -12.8521 -12.5439 -12.2395 -11.9387 -11.6418 -11.3485 -11.059 -10.7733 -10.4912 -10.2129 -9.9384 -9.6676 -9.4005 -9.1372 -8.8776 -8.6218 -8.3697 -8.1213 -7.8767 -7.6358 -7.3987 -7.1653 -6.9356 -6.7097 -6.4875 -6.2691 -6.0544 -5.8434 -5.6362 -5.4327 -5.233 -5.0369 -4.8447 -4.6562 -4.4714 -4.2903 -4.113 -3.9395 -3.7696 -3.6036 -3.4412 -3.2826 -3.1278 -2.9766 -2.8292 -2.6856 -2.5457 -2.4095 -2.2771 -2.1484 -2.0235 -1.9023 -1.7848 -1.6711 -1.5611 -1.4549 -1.3524 -1.2536 -1.1586 -1.0673 -0.97975 -0.89595 -0.81588 -0.73956 -0.66697 -0.59813 -0.53303 -0.47166 -0.41404 -0.36015 -0.31001 -0.26361 -0.22094 -0.18202 -0.14683 -0.11539 -0.087686 -0.063722 -0.043497 -0.027013 -0.014269 -0.0052644 0 0.0015244 -0.00069116 -0.0066467 -0.016342 -0.029778 -0.046953 -0.067869 -0.092524 -0.12092 -0.15305 -0.18893 -0.22855 -0.2719 -0.319 -0.36983 -0.42441 -0.48272 -0.54478 -0.61057 -0.68011 -0.75338 -0.8304 -0.91115 -0.99565 -1.0839 -1.1759 -1.2716 -1.371 -1.4742 -1.5812 -1.6918 -1.8062 -1.9244 -2.0463 -2.1719 -2.3013 -2.4344 -2.5713 -2.7119 -2.8562 -3.0043 -3.1561 -3.3116 -3.4709 -3.634 -3.8007 -3.9713 -4.1455 -4.3235 -4.5052 -4.6907 -4.8799 -5.0729 -5.2696 -5.47 -5.6742 -5.8821 -6.0938 -6.3092 -6.5283 -6.7512 -6.9778 -7.2081 -7.4422 -7.6801 -7.9216 -8.1669 -8.416 -8.6688 -8.9253 -9.1856 -9.4496 -9.7174 -9.9889 -10.2641 -10.5431 -10.8258 -11.1122 -11.4024 -11.6964 -11.994 -12.2954 -12.6006 -12.9095 -13.2221 -13.5385 -13.8586 -14.1825 -14.5101 -14.8414 -15.1765 -15.5153 -15.8578 -16.2041 -16.5542 -16.9079 -17.2654 -17.6267 -17.9917 -18.3604 1.0 52734.43872 IW2 VV 31.58 36.15 0.050 -8.219e+07 1.569e+09 -1.050e+08 1.365e+09 -1.202e+08 1.166e+09 -1.280e+08 9.772e+08 -1.292e+08 7.996e+08 -1.244e+08 6.361e+08 -1.146e+08 4.886e+08 -1.008e+08 3.588e+08 -8.429e+07 2.482e+08 -6.631e+07 1.576e+08 -4.818e+07 8.781e+07 -3.145e+07 3.900e+07 -1.816e+07 1.025e+07 -1.187e+07 -3.694e+06 -1.313e+07 -2.057e+07 -1.385e+07 -5.446e+07 -9.804e+06 -1.061e+08 3.761e+05 -1.741e+08 1.736e+07 -2.568e+08 4.154e+07 -3.524e+08 7.302e+07 -4.585e+08 1.118e+08 -5.730e+08 1.577e+08 -6.936e+08 2.102e+08 -8.177e+08 2.689e+08 -9.427e+08 3.332e+08 -1.066e+09 4.021e+08 -1.186e+09 4.748e+08 -1.299e+09 5.503e+08 -1.403e+09 6.273e+08 -1.496e+09 7.048e+08 -1.576e+09 7.814e+08 -1.641e+09 8.559e+08 -1.689e+09 9.268e+08 -1.720e+09 9.931e+08 -1.733e+09 1.053e+09 -1.727e+09 1.106e+09 -1.703e+09 1.151e+09 -1.660e+09 1.186e+09 -1.599e+09 1.211e+09 -1.523e+09 1.226e+09 -1.431e+09 1.229e+09 -1.328e+09 1.221e+09 -1.214e+09 1.202e+09 -1.092e+09 1.173e+09 -9.652e+08 1.133e+09 -8.359e+08 1.084e+09 -7.068e+08 1.028e+09 -5.804e+08 9.659e+08 -4.590e+08 8.990e+08 -3.444e+08 8.294e+08 -2.381e+08 7.591e+08 -1.411e+08 6.899e+08 -5.368e+07 6.233e+08 2.465e+07 5.610e+08 9.486e+07 5.036e+08 1.587e+08 4.513e+08 2.186e+08 4.036e+08 2.766e+08 3.591e+08 3.353e+08 3.161e+08 3.965e+08 2.723e+08 4.613e+08 2.257e+08 5.300e+08 1.744e+08 6.024e+08 1.170e+08 6.773e+08 5.281e+07 7.532e+08 -1.874e+07 8.287e+08 -9.731e+07 9.017e+08 -1.824e+08 9.705e+08 -2.733e+08 1.033e+09 -3.685e+08 1.088e+09 -4.666e+08 1.135e+09 -5.663e+08 1.171e+09 -6.655e+08 1.195e+09 -7.627e+08 1.208e+09 -8.560e+08 1.209e+09 -9.437e+08 1.197e+09 -1.024e+09 1.173e+09 -1.096e+09 1.136e+09 -1.157e+09 1.087e+09 -1.206e+09 1.028e+09 -1.243e+09 9.580e+08 -1.266e+09 8.797e+08 -1.274e+09 7.939e+08 -1.268e+09 7.021e+08 -1.247e+09 6.063e+08 -1.212e+09 5.082e+08 -1.162e+09 4.096e+08 -1.099e+09 3.127e+08 -1.025e+09 2.194e+08 -9.413e+08 1.315e+08 -8.495e+08 5.074e+07 -7.524e+08 -2.139e+07 -6.525e+08 -8.397e+07 -5.530e+08 -1.364e+08 -4.567e+08 -1.790e+08 -3.659e+08 -2.130e+08 -2.826e+08 -2.409e+08 -2.070e+08 -2.662e+08 -1.367e+08 -2.935e+08 -6.702e+07 -3.270e+08 9.358e+06 -3.697e+08 1.008e+08 -4.224e+08 2.153e+08 -4.834e+08 3.593e+08 -5.493e+08 5.381e+08 -6.156e+08 7.553e+08 -6.771e+08 1.013e+09 -7.281e+08 1.313e+09 -7.628e+08 1.656e+09 -7.752e+08 2.040e+09 -7.590e+08 2.466e+09 -7.084e+08 2.929e+09 -6.171e+08 3.429e+09 -4.795e+08 3.961e+09 -2.898e+08 4.522e+09 -4.260e+07 5.106e+09 2.669e+08 5.711e+09 6.437e+08 6.329e+09 1.092e+09 6.956e+09 1.615e+09 7.585e+09 2.217e+09 8.212e+09 2.901e+09 8.828e+09 3.668e+09 9.429e+09 4.522e+09 1.001e+10 5.464e+09 1.056e+10 6.493e+09 1.107e+10 7.613e+09 1.155e+10 8.821e+09 1.197e+10 1.012e+10 1.234e+10 1.150e+10 1.264e+10 1.297e+10 1.288e+10 1.452e+10 1.304e+10 1.615e+10 1.312e+10 1.785e+10 1.311e+10 1.963e+10 1.301e+10 2.146e+10 1.280e+10 2.335e+10 1.249e+10 2.529e+10 1.206e+10 2.726e+10 1.152e+10 2.926e+10 1.086e+10 3.127e+10 1.007e+10 3.328e+10 9.159e+09 3.528e+10 8.120e+09 3.724e+10 6.954e+09 3.915e+10 5.663e+09 4.099e+10 4.251e+09 4.274e+10 2.723e+09 4.437e+10 1.087e+09 4.588e+10 -6.459e+08 4.722e+10 -2.466e+09 4.840e+10 -4.358e+09 4.937e+10 -6.304e+09 5.014e+10 -8.288e+09 5.067e+10 -1.029e+10 5.096e+10 -1.229e+10 5.099e+10 -1.426e+10 5.075e+10 -1.618e+10 5.024e+10 -1.802e+10 4.946e+10 -1.977e+10 4.840e+10 -2.140e+10 4.708e+10 -2.288e+10 4.550e+10 -2.420e+10 4.368e+10 -2.534e+10 4.164e+10 -2.628e+10 3.939e+10 -2.702e+10 3.697e+10 -2.753e+10 3.441e+10 -2.782e+10 3.172e+10 -2.789e+10 2.895e+10 -2.774e+10 2.613e+10 -2.737e+10 2.330e+10 -2.680e+10 2.047e+10 -2.605e+10 1.770e+10 -2.512e+10 1.500e+10 -2.405e+10 1.241e+10 -2.285e+10 9.938e+09 -2.156e+10 7.620e+09 -2.020e+10 5.461e+09 -1.880e+10 3.472e+09 -1.738e+10 1.656e+09 -1.599e+10 7.500e+06 -1.463e+10 -1.485e+09 -1.332e+10 -2.839e+09 -1.209e+10 -4.081e+09 -1.093e+10 -5.243e+09 -9.851e+09 -6.356e+09 -8.827e+09 -7.457e+09 -7.841e+09 -8.577e+09 -6.867e+09 -9.738e+09 -5.870e+09 -1.096e+10 -4.818e+09 -1.225e+10 -3.683e+09 -1.360e+10 -2.438e+09 -1.500e+10 -1.061e+09 -1.644e+10 4.580e+08 -1.788e+10 2.128e+09 -1.931e+10 3.950e+09 -2.069e+10 5.916e+09 -2.200e+10 8.018e+09 -2.319e+10 1.024e+10 -2.425e+10 1.256e+10 -2.514e+10 1.495e+10 -2.583e+10 1.739e+10 -2.631e+10 1.984e+10 -2.655e+10 2.229e+10 -2.655e+10 2.469e+10 -2.628e+10 2.701e+10 -2.574e+10 2.922e+10 -2.494e+10 3.130e+10 -2.387e+10 3.320e+10 -2.255e+10 3.492e+10 -2.099e+10 3.641e+10 -1.920e+10 3.767e+10 -1.721e+10 3.868e+10 -1.505e+10 3.943e+10 -1.273e+10 3.991e+10 -1.029e+10 4.013e+10 -7.767e+09 4.008e+10 -5.180e+09 3.977e+10 -2.565e+09 3.921e+10 5.333e+07 3.842e+10 2.646e+09 3.740e+10 5.188e+09 3.619e+10 7.662e+09 3.480e+10 1.005e+10 3.324e+10 1.233e+10 3.154e+10 1.448e+10 2.970e+10 1.651e+10 2.776e+10 1.840e+10 2.572e+10 2.014e+10 2.359e+10 2.172e+10 2.140e+10 2.314e+10 1.914e+10 2.439e+10 1.684e+10 2.547e+10 1.450e+10 2.636e+10 1.214e+10 2.706e+10 9.766e+09 2.756e+10 7.397e+09 2.785e+10 5.045e+09 2.792e+10 2.729e+09 2.777e+10 4.691e+08 2.740e+10 -1.718e+09 2.680e+10 -3.810e+09 2.597e+10 -5.786e+09 2.493e+10 -7.628e+09 2.367e+10 -9.317e+09 2.223e+10 -1.084e+10 2.061e+10 -1.218e+10 1.883e+10 -1.334e+10 1.693e+10 -1.431e+10 1.493e+10 -1.510e+10 1.285e+10 -1.571e+10 1.073e+10 -1.617e+10 8.573e+09 -1.650e+10 6.404e+09 -1.672e+10 4.227e+09 -1.685e+10 2.034e+09 -1.692e+10 -1.941e+08 -1.693e+10 -2.484e+09 -1.689e+10 -4.872e+09 -1.678e+10 -7.400e+09 -1.658e+10 -1.010e+10 -1.624e+10 -1.300e+10 -1.571e+10 -1.612e+10 -1.494e+10 -1.945e+10 -1.384e+10 -2.296e+10 -1.237e+10 -2.661e+10 -1.047e+10 -3.033e+10 -8.078e+09 -3.402e+10 -5.172e+09 -3.758e+10 -1.729e+09 -4.091e+10 2.258e+09 -4.387e+10 6.789e+09 -4.635e+10 1.184e+10 -4.823e+10 1.739e+10 -4.941e+10 2.344e+10 -4.979e+10 2.996e+10 -4.931e+10 3.698e+10 -4.789e+10 4.459e+10 -4.548e+10 5.291e+10 -4.200e+10 6.218e+10 -3.732e+10 7.272e+10 -3.118e+10 8.496e+10 -2.322e+10 9.941e+10 -1.281e+10 1.167e+11 9.475e+08 1.373e+11 1.921e+10 1.619e+11 4.351e+10 1.910e+11 7.572e+10 2.252e+11 1.180e+11 2.647e+11 1.729e+11 3.099e+11 2.435e+11 3.610e+11 3.328e+11 4.181e+11 4.446e+11 4.813e+11 5.831e+11 5.502e+11 7.525e+11 6.247e+11 9.578e+11 7.043e+11 1.205e+12 7.884e+11 1.499e+12 8.761e+11 1.846e+12 9.666e+11 2.254e+12 1.059e+12 2.728e+12 1.151e+12 3.278e+12 1.241e+12 3.912e+12 1.366e+12 4.623e+12 1.389e+12 5.493e+12 1.458e+12 6.434e+12 1.516e+12 7.496e+12 1.560e+12 8.687e+12 1.406e+12 8.884e+12 1.414e+12 1.022e+13 1.401e+12 1.169e+13 1.364e+12 1.334e+13 1.299e+12 1.514e+13 1.203e+12 1.712e+13 1.074e+12 1.930e+13 9.060e+11 2.168e+13 6.975e+11 2.427e+13 4.442e+11 2.708e+13 1.435e+11 3.012e+13 -2.080e+11 3.341e+13 -6.131e+11 3.694e+13 -1.074e+12 4.073e+13 -1.593e+12 4.478e+13 -2.172e+12 4.912e+13 -2.810e+12 5.372e+13 -3.511e+12 5.861e+13 -4.274e+12 6.379e+13 -5.098e+12 6.926e+13 -5.982e+12 7.502e+13 -6.925e+12 8.109e+13 -7.922e+12 8.744e+13 -8.973e+12 9.410e+13 -1.007e+13 1.010e+14 -1.122e+13 1.082e+14 -1.240e+13 1.157e+14 -1.361e+13 1.235e+14 -1.485e+13 1.316e+14 -1.610e+13 1.400e+14 -1.737e+13 1.486e+14 -1.863e+13 1.574e+14 -1.989e+13 1.664e+14 -2.111e+13 1.757e+14 -2.232e+13 1.852e+14 -2.347e+13 1.949e+14 -2.457e+13 2.048e+14 -2.561e+13 2.149e+14 -2.656e+13 2.251e+14 -2.741e+13 2.354e+14 -2.816e+13 2.459e+14 -2.880e+13 2.564e+14 -2.929e+13 2.671e+14 -2.964e+13 2.778e+14 -2.984e+13 2.886e+14 -2.985e+13 2.994e+14 -2.969e+13 3.101e+14 -2.932e+13 3.209e+14 -2.876e+13 3.317e+14 -2.797e+13 3.425e+14 -2.694e+13 3.532e+14 -2.567e+13 3.638e+14 -2.417e+13 3.742e+14 -2.240e+13 3.846e+14 -2.035e+13 3.950e+14 -1.804e+13 4.050e+14 -1.545e+13 4.150e+14 -1.257e+13 4.249e+14 -9.409e+12 4.346e+14 -5.956e+12 4.441e+14 -2.211e+12 4.533e+14 1.822e+12 4.624e+14 6.147e+12 4.713e+14 1.076e+13 4.799e+14 1.565e+13 4.883e+14 2.083e+13 4.965e+14 2.628e+13 5.045e+14 3.199e+13 5.121e+14 3.797e+13 5.195e+14 4.420e+13 5.266e+14 5.065e+13 5.335e+14 5.734e+13 5.400e+14 6.424e+13 5.463e+14 7.133e+13 5.523e+14 7.862e+13 5.581e+14 8.605e+13 5.635e+14 9.358e+13 5.686e+14 1.013e+14 5.734e+14 1.090e+14 5.779e+14 1.169e+14 5.822e+14 1.248e+14 5.861e+14 1.328e+14 5.896e+14 1.408e+14 5.929e+14 1.489e+14 5.957e+14 1.569e+14 5.982e+14 1.649e+14 6.004e+14 1.729e+14 6.023e+14 1.808e+14 6.037e+14 1.886e+14 6.048e+14 1.962e+14 6.055e+14 2.037e+14 6.058e+14 2.111e+14 6.059e+14 2.182e+14 6.054e+14 2.252e+14 6.046e+14 2.318e+14 6.035e+14 2.383e+14 6.019e+14 2.444e+14 6.000e+14 2.503e+14 5.976e+14 2.557e+14 5.948e+14 2.609e+14 5.918e+14 2.657e+14 5.882e+14 2.700e+14 5.843e+14 2.739e+14 5.800e+14 2.774e+14 5.752e+14 2.805e+14 5.701e+14 2.831e+14 5.645e+14 2.852e+14 5.587e+14 2.868e+14 5.523e+14 2.880e+14 5.456e+14 2.886e+14 5.385e+14 2.886e+14 5.310e+14 2.882e+14 5.232e+14 2.872e+14 5.149e+14 2.857e+14 5.063e+14 2.837e+14 4.973e+14 2.813e+14 4.881e+14 2.782e+14 4.783e+14 2.749e+14 4.682e+14 2.710e+14 4.579e+14 2.666e+14 4.472e+14 2.618e+14 4.364e+14 2.565e+14 4.252e+14 2.509e+14 4.138e+14 2.449e+14 4.022e+14 2.386e+14 3.905e+14 2.319e+14 3.786e+14 2.249e+14 3.666e+14 2.178e+14 3.544e+14 2.103e+14 3.422e+14 2.027e+14 3.300e+14 1.949e+14 3.177e+14 1.870e+14 3.054e+14 1.790e+14 2.931e+14 1.710e+14 2.809e+14 1.629e+14 2.689e+14 1.548e+14 2.569e+14 1.468e+14 2.451e+14 1.388e+14 2.334e+14 1.310e+14 2.219e+14 1.232e+14 2.107e+14 1.157e+14 1.996e+14 1.082e+14 1.888e+14 1.010e+14 1.782e+14 9.394e+13 1.679e+14 8.713e+13 1.579e+14 8.056e+13 1.483e+14 7.424e+13 1.389e+14 6.818e+13 1.299e+14 6.241e+13 1.212e+14 5.689e+13 1.129e+14 5.167e+13 1.048e+14 4.673e+13 9.717e+13 4.209e+13 8.986e+13 3.773e+13 8.290e+13 3.366e+13 7.629e+13 2.987e+13 7.003e+13 2.636e+13 6.412e+13 2.314e+13 5.857e+13 2.016e+13 5.333e+13 1.744e+13 4.843e+13 1.498e+13 4.385e+13 1.274e+13 3.957e+13 1.073e+13 3.560e+13 8.929e+12 3.193e+13 7.331e+12 2.853e+13 5.921e+12 2.541e+13 4.687e+12 2.254e+13 3.148e+12 1.735e+13 2.341e+12 1.525e+13 1.656e+12 1.335e+13 1.081e+12 1.163e+13 6.053e+11 1.009e+13 2.175e+11 8.720e+12 -9.263e+10 7.497e+12 -3.348e+11 6.415e+12 -5.180e+11 5.462e+12 -6.510e+11 4.625e+12 -7.416e+11 3.896e+12 -7.968e+11 3.263e+12 -8.233e+11 2.716e+12 -8.266e+11 2.247e+12 -8.118e+11 1.846e+12 -7.833e+11 1.506e+12 -7.447e+11 1.218e+12 -6.993e+11 9.764e+11 -6.494e+11 7.744e+11 -5.970e+11 6.064e+11 -5.438e+11 4.676e+11 -4.908e+11 3.534e+11 -4.390e+11 2.600e+11 -3.889e+11 1.843e+11 -3.410e+11 1.234e+11 -2.954e+11 7.506e+10 -2.527e+11 3.726e+10 -2.127e+11 8.338e+09 -1.759e+11 -1.311e+10 -1.423e+11 -2.830e+10 -1.121e+11 -3.836e+10 -8.547e+10 -4.434e+10 -6.252e+10 -4.727e+10 -4.309e+10 -4.819e+10 -2.680e+10 -4.819e+10 -1.288e+10 -4.826e+10 -8.333e+07 -4.917e+10 1.313e+10 -5.128e+10 2.825e+10 -5.440e+10 4.650e+10 -5.797e+10 6.864e+10 -6.128e+10 9.499e+10 -6.356e+10 1.256e+11 -6.419e+10 1.605e+11 -6.258e+10 1.990e+11 -5.832e+10 2.410e+11 -5.104e+10 2.859e+11 -4.050e+10 3.330e+11 -2.656e+10 3.817e+11 -9.146e+09 4.313e+11 1.173e+10 4.810e+11 3.593e+10 5.302e+11 6.329e+10 5.782e+11 9.358e+10 6.241e+11 1.264e+11 6.674e+11 1.615e+11 7.075e+11 1.983e+11 7.437e+11 2.365e+11 7.755e+11 2.754e+11 8.026e+11 3.147e+11 8.245e+11 3.538e+11 8.411e+11 3.921e+11 8.521e+11 4.292e+11 8.574e+11 4.645e+11 8.571e+11 4.977e+11 8.513e+11 5.283e+11 8.402e+11 5.559e+11 8.241e+11 5.803e+11 8.031e+11 6.012e+11 7.779e+11 6.184e+11 7.488e+11 6.320e+11 7.163e+11 6.418e+11 6.808e+11 6.476e+11 6.428e+11 6.496e+11 6.029e+11 6.479e+11 5.615e+11 6.425e+11 5.193e+11 6.337e+11 4.766e+11 6.217e+11 4.339e+11 6.067e+11 3.917e+11 5.892e+11 3.503e+11 5.692e+11 3.101e+11 5.473e+11 2.715e+11 5.236e+11 2.346e+11 4.986e+11 1.997e+11 4.725e+11 1.669e+11 4.456e+11 1.364e+11 4.183e+11 1.082e+11 3.908e+11 8.251e+10 3.634e+11 5.918e+10 3.363e+11 3.823e+10 3.097e+11 1.962e+10 2.838e+11 3.247e+09 2.587e+11 -1.099e+10 2.347e+11 -2.320e+10 2.118e+11 -3.353e+10 1.901e+11 -4.214e+10 1.696e+11 -4.916e+10 1.504e+11 -5.478e+10 1.325e+11 -5.914e+10 1.159e+11 -6.240e+10 1.005e+11 -6.472e+10 8.636e+10 -6.623e+10 7.335e+10 -6.708e+10 6.143e+10 -6.737e+10 5.049e+10 -6.721e+10 4.044e+10 -6.670e+10 3.120e+10 -6.589e+10 2.266e+10 -6.484e+10 1.470e+10 -6.360e+10 7.262e+09 -6.218e+10 2.386e+08 -6.059e+10 -6.459e+09 -5.883e+10 -1.289e+10 -5.690e+10 -1.913e+10 -5.476e+10 -2.522e+10 -5.240e+10 -3.121e+10 -4.978e+10 -3.712e+10 -4.688e+10 -4.299e+10 -4.366e+10 -4.881e+10 -4.010e+10 -5.459e+10 -3.617e+10 -6.034e+10 -3.185e+10 -6.602e+10 -2.711e+10 -7.162e+10 -2.194e+10 -7.712e+10 -1.634e+10 -8.247e+10 -1.030e+10 -8.765e+10 -3.827e+09 -9.262e+10 3.060e+09 -9.732e+10 1.034e+10 -1.017e+11 1.798e+10 -1.058e+11 0.005 -52.210 -51.199 -50.188 -49.178 -48.167 -47.156 -46.188 -45.317 -44.536 -43.836 -43.213 -42.661 -42.178 -41.761 -41.405 -41.111 -40.876 -40.699 -40.580 -40.519 -40.515 -40.568 -40.681 -40.855 -41.090 -41.390 -41.757 -42.195 -42.708 -43.302 -43.983 -44.762 -45.648 -46.652 -47.792 -49.088 -50.570 -52.275 -54.257 -56.589 -59.370 -62.682 -66.300 -68.943 -69.159 -68.051 -67.265 -67.042 -66.886 -65.896 -63.649 -60.739 -57.870 -55.302 -53.058 -51.099 -49.381 -47.867 -46.527 -45.337 -44.279 -43.339 -42.505 -41.768 -41.121 -40.558 -40.074 -39.666 -39.331 -39.066 -38.871 -38.743 -38.684 -38.693 -38.773 -38.922 -39.144 -39.441 -39.817 -40.275 -40.821 -41.461 -42.203 -43.055 -44.030 -45.139 -46.397 -47.819 -49.418 -51.194 -53.119 -55.091 -56.879 -58.148 -58.649 -58.403 -57.582 -56.306 -54.649 -52.723 -50.674 -48.630 -46.673 -44.843 -43.151 -41.596 -40.173 -38.873 -37.685 -36.601 -35.614 -34.718 -33.905 -33.173 -32.516 -31.931 -31.417 -30.970 -30.590 -30.275 -30.025 -29.839 -29.719 -29.663 -29.676 -29.760 -29.918 -30.153 -30.472 -30.881 -31.387 -32.001 -32.736 -33.609 -34.642 -35.862 -37.311 -39.042 -41.133 -43.686 -46.799 -50.283 -52.782 -52.971 -52.129 -52.037 -53.721 -58.600 -56.252 -48.807 -42.910 -38.655 -35.269 -32.428 -29.966 -27.788 -25.830 -24.052 -22.423 -20.922 -19.529 -18.230 -17.016 -15.878 -14.807 -13.799 -12.848 -11.949 -11.100 -10.296 -9.534 -8.813 -8.130 -7.483 -6.870 -6.291 -5.742 -5.224 -4.735 -4.273 -3.839 -3.432 -3.049 -2.692 -2.359 -2.049 -1.763 -1.500 -1.258 -1.039 -0.841 -0.665 -0.510 -0.376 -0.262 -0.169 -0.097 -0.044 -0.012 0.000 -0.008 -0.035 -0.082 -0.150 -0.238 -0.346 -0.475 -0.624 -0.795 -0.986 -1.200 -1.435 -1.692 -1.971 -2.274 -2.599 -2.949 -3.323 -3.723 -4.148 -4.599 -5.078 -5.586 -6.123 -6.690 -7.290 -7.922 -8.590 -9.294 -10.036 -10.820 -11.647 -12.521 -13.444 -14.421 -15.456 -16.554 -17.722 -18.967 -20.297 -21.724 -23.260 -24.923 -26.736 -28.728 -30.935 -33.410 -36.222 -39.460 -43.188 -47.160 -50.185 -50.913 -50.457 -50.284 -50.557 -50.675 -49.728 -47.567 -44.978 -42.557 -40.463 -38.688 -37.186 -35.914 -34.837 -33.925 -33.157 -32.516 -31.987 -31.562 -31.230 -30.986 -30.824 -30.739 -30.728 -30.790 -30.921 -31.121 -31.389 -31.724 -32.129 -32.604 -33.151 -33.772 -34.471 -35.253 -36.120 -37.079 -38.135 -39.295 -40.567 -41.958 -43.477 -45.125 -46.903 -48.791 -50.749 -52.693 -54.486 -55.939 -56.837 -56.998 -56.362 -55.064 -53.370 -51.534 -49.722 -48.017 -46.450 -45.027 -43.745 -42.594 -41.564 -40.644 -39.827 -39.105 -38.469 -37.916 -37.439 -37.034 -36.698 -36.428 -36.221 -36.075 -35.989 -35.961 -35.992 -36.080 -36.226 -36.430 -36.691 -37.013 -37.394 -37.839 -38.348 -38.926 -39.576 -40.302 -41.110 -42.008 -43.002 -44.104 -45.326 -46.685 -48.202 -49.904 -51.828 -54.027 -56.574 -59.583 -63.239 -67.878 -74.193 -83.178 -86.547 -82.763 -76.665 -70.866 -66.167 -62.446 -59.432 -56.933 -54.822 -53.014 -51.450 -50.088 -48.896 -47.852 -46.936 -46.134 -45.437 -44.833 -44.315 -43.878 -43.515 -43.223 -42.998 -42.839 -42.743 -42.709 -42.735 -42.820 -42.966 -43.171 -43.436 -43.763 -44.152 -44.606 -45.128 -45.720 -46.386 -47.131 -47.962 -48.884 -49.907 -50.975 -52.042 -53.110 -54.177 -55.245 0.03 -19.4184 -19.034 -18.6535 -18.2768 -17.904 -17.535 -17.1698 -16.8085 -16.4511 -16.0975 -15.7477 -15.4017 -15.0596 -14.7214 -14.387 -14.0564 -13.7297 -13.4068 -13.0877 -12.7725 -12.4612 -12.1537 -11.85 -11.5501 -11.2542 -10.962 -10.6737 -10.3892 -10.1086 -9.8318 -9.5589 -9.2898 -9.0245 -8.7631 -8.5055 -8.2518 -8.0019 -7.7558 -7.5136 -7.2753 -7.0408 -6.8101 -6.5832 -6.3602 -6.1411 -5.9258 -5.7143 -5.5067 -5.3029 -5.1029 -4.9068 -4.7146 -4.5261 -4.3416 -4.1608 -3.9839 -3.8109 -3.6417 -3.4763 -3.3148 -3.1571 -3.0032 -2.8532 -2.7071 -2.5648 -2.4263 -2.2916 -2.1609 -2.0339 -1.9108 -1.7915 -1.6761 -1.5645 -1.4568 -1.3529 -1.2528 -1.1566 -1.0642 -0.9757 -0.89101 -0.81016 -0.73316 -0.65999 -0.59067 -0.52519 -0.46355 -0.40576 -0.3518 -0.30169 -0.25542 -0.21299 -0.1744 -0.13965 -0.10875 -0.08169 -0.05847 -0.039092 -0.023556 -0.011862 -0.0040103 0 0.00016837 -0.0035051 -0.011021 -0.022378 -0.037577 -0.056618 -0.079501 -0.10623 -0.13679 -0.1712 -0.20945 -0.25154 -0.29748 -0.34725 -0.40087 -0.45833 -0.51963 -0.58478 -0.65376 -0.72659 -0.80326 -0.88377 -0.96812 -1.0563 -1.1484 -1.2442 -1.344 -1.4475 -1.5549 -1.6662 -1.7813 -1.9002 -2.023 -2.1496 -2.28 -2.4143 -2.5525 -2.6944 -2.8403 -2.9899 -3.1434 -3.3008 -3.462 -3.627 -3.7959 -3.9686 -4.1452 -4.3256 -4.5098 -4.6979 -4.8898 -5.0856 -5.2852 -5.4886 -5.6959 -5.9071 -6.1221 -6.3409 -6.5635 -6.79 -7.0204 -7.2546 -7.4926 -7.7345 -7.9802 -8.2297 -8.4831 -8.7404 -9.0014 -9.2664 -9.5351 -9.8077 -10.0842 -10.3645 -10.6486 -10.9366 -11.2284 -11.524 -11.8235 -12.1269 -12.4341 -12.7451 -13.06 -13.3787 -13.7012 -14.0276 -14.3578 -14.6919 -15.0298 -15.3716 -15.7172 -16.0666 -16.4199 -16.7771 -17.138 -17.5028 -17.8715 -18.244 -18.6203 -19.0005 1.0 52734.43872 IW2 VH 31.58 36.15 0.050 -1.120e+09 1.163e+09 -1.013e+09 1.005e+09 -9.012e+08 8.517e+08 -7.871e+08 7.062e+08 -6.727e+08 5.702e+08 -5.605e+08 4.457e+08 -4.526e+08 3.344e+08 -3.514e+08 2.375e+08 -2.594e+08 1.562e+08 -1.786e+08 9.132e+07 -1.113e+08 4.317e+07 -5.950e+07 1.170e+07 -2.522e+07 -4.685e+06 -8.421e+06 -1.308e+07 3.967e+06 -3.079e+07 3.143e+07 -6.558e+07 7.968e+07 -1.155e+08 1.501e+08 -1.788e+08 2.431e+08 -2.538e+08 3.589e+08 -3.388e+08 4.970e+08 -4.318e+08 6.565e+08 -5.309e+08 8.368e+08 -6.341e+08 1.036e+09 -7.390e+08 1.252e+09 -8.436e+08 1.484e+09 -9.457e+08 1.728e+09 -1.043e+09 1.983e+09 -1.133e+09 2.245e+09 -1.214e+09 2.510e+09 -1.285e+09 2.776e+09 -1.342e+09 3.039e+09 -1.386e+09 3.295e+09 -1.413e+09 3.541e+09 -1.424e+09 3.773e+09 -1.418e+09 3.988e+09 -1.394e+09 4.182e+09 -1.351e+09 4.353e+09 -1.291e+09 4.497e+09 -1.213e+09 4.612e+09 -1.120e+09 4.696e+09 -1.011e+09 4.749e+09 -8.886e+08 4.768e+09 -7.548e+08 4.754e+09 -6.115e+08 4.708e+09 -4.608e+08 4.629e+09 -3.055e+08 4.519e+09 -1.478e+08 4.381e+09 9.850e+06 4.217e+09 1.647e+08 4.029e+09 3.148e+08 3.822e+09 4.578e+08 3.598e+09 5.919e+08 3.361e+09 7.155e+08 3.116e+09 8.275e+08 2.865e+09 9.268e+08 2.613e+09 1.013e+09 2.363e+09 1.087e+09 2.118e+09 1.147e+09 1.881e+09 1.196e+09 1.653e+09 1.235e+09 1.437e+09 1.264e+09 1.234e+09 1.285e+09 1.044e+09 1.300e+09 8.658e+08 1.311e+09 6.995e+08 1.319e+09 5.434e+08 1.325e+09 3.964e+08 1.330e+09 2.566e+08 1.334e+09 1.225e+08 1.337e+09 -7.182e+06 1.338e+09 -1.333e+08 1.337e+09 -2.566e+08 1.332e+09 -3.767e+08 1.322e+09 -4.931e+08 1.306e+09 -6.052e+08 1.283e+09 -7.116e+08 1.251e+09 -8.107e+08 1.210e+09 -9.012e+08 1.159e+09 -9.812e+08 1.100e+09 -1.049e+09 1.031e+09 -1.104e+09 9.534e+08 -1.144e+09 8.686e+08 -1.169e+09 7.774e+08 -1.177e+09 6.814e+08 -1.169e+09 5.823e+08 -1.145e+09 4.820e+08 -1.105e+09 3.824e+08 -1.050e+09 2.854e+08 -9.827e+08 1.931e+08 -9.040e+08 1.071e+08 -8.166e+08 2.916e+07 -7.231e+08 -3.953e+07 -6.264e+08 -9.820e+07 -5.297e+08 -1.465e+08 -4.360e+08 -1.850e+08 -3.478e+08 -2.150e+08 -2.671e+08 -2.392e+08 -1.941e+08 -2.611e+08 -1.266e+08 -2.851e+08 -6.010e+07 -3.152e+08 1.207e+07 -3.544e+08 9.758e+07 -4.033e+08 2.033e+08 -4.605e+08 3.348e+08 -5.232e+08 4.962e+08 -5.878e+08 6.896e+08 -6.499e+08 9.160e+08 -7.053e+08 1.176e+09 -7.497e+08 1.467e+09 -7.788e+08 1.789e+09 -7.884e+08 2.138e+09 -7.745e+08 2.511e+09 -7.334e+08 2.904e+09 -6.619e+08 3.312e+09 -5.567e+08 3.731e+09 -4.154e+08 4.154e+09 -2.358e+08 4.577e+09 -1.592e+07 4.995e+09 2.453e+08 5.401e+09 5.485e+08 5.790e+09 8.945e+08 6.159e+09 1.283e+09 6.500e+09 1.714e+09 6.812e+09 2.187e+09 7.088e+09 2.701e+09 7.327e+09 3.254e+09 7.525e+09 3.847e+09 7.678e+09 4.478e+09 7.786e+09 5.146e+09 7.844e+09 5.850e+09 7.852e+09 6.590e+09 7.808e+09 7.364e+09 7.708e+09 8.171e+09 7.552e+09 9.011e+09 7.336e+09 9.881e+09 7.059e+09 1.078e+10 6.718e+09 1.171e+10 6.311e+09 1.266e+10 5.833e+09 1.364e+10 5.284e+09 1.463e+10 4.662e+09 1.563e+10 3.963e+09 1.663e+10 3.189e+09 1.764e+10 2.339e+09 1.864e+10 1.411e+09 1.961e+10 4.080e+08 2.055e+10 -6.655e+08 2.145e+10 -1.806e+09 2.230e+10 -3.007e+09 2.308e+10 -4.260e+09 2.377e+10 -5.556e+09 2.437e+10 -6.885e+09 2.487e+10 -8.232e+09 2.526e+10 -9.585e+09 2.551e+10 -1.093e+10 2.563e+10 -1.225e+10 2.562e+10 -1.353e+10 2.545e+10 -1.476e+10 2.514e+10 -1.591e+10 2.468e+10 -1.698e+10 2.406e+10 -1.795e+10 2.331e+10 -1.880e+10 2.241e+10 -1.953e+10 2.139e+10 -2.012e+10 2.025e+10 -2.057e+10 1.900e+10 -2.087e+10 1.765e+10 -2.101e+10 1.623e+10 -2.100e+10 1.475e+10 -2.084e+10 1.323e+10 -2.053e+10 1.168e+10 -2.007e+10 1.013e+10 -1.949e+10 8.591e+09 -1.878e+10 7.080e+09 -1.796e+10 5.616e+09 -1.705e+10 4.211e+09 -1.606e+10 2.879e+09 -1.502e+10 1.631e+09 -1.394e+10 4.735e+08 -1.284e+10 -5.901e+08 -1.174e+10 -1.559e+09 -1.066e+10 -2.437e+09 -9.607e+09 -3.234e+09 -8.600e+09 -3.961e+09 -7.642e+09 -4.637e+09 -6.735e+09 -5.280e+09 -5.873e+09 -5.913e+09 -5.042e+09 -6.556e+09 -4.226e+09 -7.226e+09 -3.402e+09 -7.936e+09 -2.546e+09 -8.693e+09 -1.635e+09 -9.498e+09 -6.498e+08 -1.034e+10 4.268e+08 -1.122e+10 1.605e+09 -1.210e+10 2.889e+09 -1.298e+10 4.279e+09 -1.382e+10 5.769e+09 -1.462e+10 7.347e+09 -1.534e+10 8.999e+09 -1.596e+10 1.071e+10 -1.647e+10 1.244e+10 -1.684e+10 1.419e+10 -1.707e+10 1.592e+10 -1.713e+10 1.761e+10 -1.702e+10 1.922e+10 -1.673e+10 2.074e+10 -1.627e+10 2.214e+10 -1.563e+10 2.339e+10 -1.482e+10 2.448e+10 -1.385e+10 2.538e+10 -1.273e+10 2.609e+10 -1.148e+10 2.659e+10 -1.011e+10 2.687e+10 -8.654e+09 2.694e+10 -7.126e+09 2.679e+10 -5.552e+09 2.644e+10 -3.955e+09 2.589e+10 -2.358e+09 2.515e+10 -7.826e+08 2.424e+10 7.486e+08 2.319e+10 2.219e+09 2.200e+10 3.613e+09 2.071e+10 4.916e+09 1.934e+10 6.123e+09 1.791e+10 7.225e+09 1.643e+10 8.218e+09 1.493e+10 9.104e+09 1.342e+10 9.884e+09 1.191e+10 1.056e+10 1.041e+10 1.115e+10 8.939e+09 1.165e+10 7.488e+09 1.206e+10 6.059e+09 1.240e+10 4.651e+09 1.267e+10 3.262e+09 1.286e+10 1.888e+09 1.299e+10 5.267e+08 1.303e+10 -8.222e+08 1.299e+10 -2.159e+09 1.287e+10 -3.481e+09 1.264e+10 -4.780e+09 1.231e+10 -6.052e+09 1.187e+10 -7.287e+09 1.132e+10 -8.473e+09 1.064e+10 -9.603e+09 9.842e+09 -1.067e+10 8.922e+09 -1.165e+10 7.883e+09 -1.256e+10 6.726e+09 -1.337e+10 5.458e+09 -1.410e+10 4.080e+09 -1.473e+10 2.593e+09 -1.527e+10 9.986e+08 -1.571e+10 -7.061e+08 -1.606e+10 -2.529e+09 -1.631e+10 -4.478e+09 -1.645e+10 -6.564e+09 -1.647e+10 -8.801e+09 -1.635e+10 -1.120e+10 -1.606e+10 -1.376e+10 -1.558e+10 -1.649e+10 -1.487e+10 -1.938e+10 -1.389e+10 -2.241e+10 -1.261e+10 -2.556e+10 -1.099e+10 -2.879e+10 -8.990e+09 -3.203e+10 -6.589e+09 -3.523e+10 -3.770e+09 -3.829e+10 -5.238e+08 -4.114e+10 3.151e+09 -4.368e+10 7.236e+09 -4.581e+10 1.171e+10 -4.743e+10 1.654e+10 -4.845e+10 2.169e+10 -4.879e+10 2.711e+10 -4.838e+10 3.281e+10 -4.716e+10 3.874e+10 -4.509e+10 4.496e+10 -4.211e+10 5.152e+10 -3.819e+10 5.856e+10 -3.324e+10 6.628e+10 -2.712e+10 7.498e+10 -1.956e+10 8.499e+10 -1.016e+10 9.672e+10 1.702e+09 1.106e+11 1.693e+10 1.270e+11 3.666e+10 1.463e+11 6.233e+10 1.688e+11 9.573e+10 1.946e+11 1.388e+11 2.239e+11 1.940e+11 2.565e+11 2.639e+11 2.924e+11 3.513e+11 3.312e+11 4.597e+11 3.726e+11 5.928e+11 4.160e+11 7.542e+11 4.607e+11 9.486e+11 5.059e+11 1.181e+12 5.504e+11 1.456e+12 5.931e+11 1.779e+12 6.326e+11 2.157e+12 6.672e+11 2.595e+12 6.951e+11 3.100e+12 7.144e+11 3.681e+12 7.052e+11 4.359e+12 6.855e+11 5.127e+12 6.578e+11 5.985e+12 6.104e+11 6.948e+12 5.401e+11 8.029e+12 4.142e+11 8.622e+12 2.972e+11 9.885e+12 1.494e+11 1.128e+13 -3.263e+10 1.282e+13 -2.518e+11 1.453e+13 -5.117e+11 1.639e+13 -8.157e+11 1.843e+13 -1.166e+12 2.066e+13 -1.567e+12 2.308e+13 -2.021e+12 2.571e+13 -2.530e+12 2.853e+13 -3.095e+12 3.159e+13 -3.721e+12 3.488e+13 -4.408e+12 3.840e+13 -5.154e+12 4.217e+13 -5.965e+12 4.618e+13 -6.836e+12 5.044e+13 -7.769e+12 5.497e+13 -8.764e+12 5.977e+13 -9.812e+12 6.482e+13 -1.092e+13 7.015e+13 -1.208e+13 7.575e+13 -1.329e+13 8.163e+13 -1.454e+13 8.778e+13 -1.583e+13 9.419e+13 -1.716e+13 1.009e+14 -1.851e+13 1.078e+14 -1.988e+13 1.150e+14 -2.125e+13 1.224e+14 -2.263e+13 1.302e+14 -2.400e+13 1.381e+14 -2.536e+13 1.462e+14 -2.668e+13 1.546e+14 -2.797e+13 1.632e+14 -2.921e+13 1.720e+14 -3.039e+13 1.809e+14 -3.149e+13 1.900e+14 -3.252e+13 1.993e+14 -3.343e+13 2.088e+14 -3.425e+13 2.184e+14 -3.493e+13 2.281e+14 -3.548e+13 2.378e+14 -3.588e+13 2.477e+14 -3.612e+13 2.576e+14 -3.618e+13 2.676e+14 -3.606e+13 2.775e+14 -3.573e+13 2.875e+14 -3.519e+13 2.974e+14 -3.444e+13 3.073e+14 -3.345e+13 3.172e+14 -3.221e+13 3.270e+14 -3.072e+13 3.367e+14 -2.897e+13 3.463e+14 -2.695e+13 3.558e+14 -2.465e+13 3.652e+14 -2.207e+13 3.744e+14 -1.922e+13 3.835e+14 -1.606e+13 3.924e+14 -1.262e+13 4.011e+14 -8.876e+12 4.097e+14 -4.843e+12 4.180e+14 -5.194e+11 4.261e+14 4.096e+12 4.340e+14 9.000e+12 4.417e+14 1.418e+13 4.491e+14 1.965e+13 4.563e+14 2.537e+13 4.632e+14 3.136e+13 4.700e+14 3.760e+13 4.763e+14 4.408e+13 4.824e+14 5.078e+13 4.884e+14 5.771e+13 4.939e+14 6.484e+13 4.992e+14 7.215e+13 5.042e+14 7.964e+13 5.089e+14 8.725e+13 5.133e+14 9.498e+13 5.175e+14 1.029e+14 5.214e+14 1.107e+14 5.250e+14 1.188e+14 5.283e+14 1.269e+14 5.313e+14 1.350e+14 5.340e+14 1.432e+14 5.362e+14 1.513e+14 5.382e+14 1.594e+14 5.399e+14 1.676e+14 5.412e+14 1.757e+14 5.422e+14 1.835e+14 5.428e+14 1.914e+14 5.430e+14 1.991e+14 5.430e+14 2.067e+14 5.426e+14 2.141e+14 5.417e+14 2.213e+14 5.406e+14 2.283e+14 5.390e+14 2.350e+14 5.372e+14 2.415e+14 5.349e+14 2.477e+14 5.323e+14 2.534e+14 5.294e+14 2.590e+14 5.260e+14 2.642e+14 5.223e+14 2.690e+14 5.183e+14 2.734e+14 5.138e+14 2.774e+14 5.090e+14 2.810e+14 5.038e+14 2.842e+14 4.984e+14 2.869e+14 4.926e+14 2.891e+14 4.864e+14 2.908e+14 4.799e+14 2.921e+14 4.730e+14 2.928e+14 4.658e+14 2.931e+14 4.583e+14 2.928e+14 4.505e+14 2.921e+14 4.425e+14 2.908e+14 4.341e+14 2.890e+14 4.254e+14 2.867e+14 4.165e+14 2.839e+14 4.072e+14 2.808e+14 3.978e+14 2.771e+14 3.880e+14 2.729e+14 3.782e+14 2.683e+14 3.682e+14 2.634e+14 3.580e+14 2.579e+14 3.475e+14 2.521e+14 3.371e+14 2.460e+14 3.266e+14 2.395e+14 3.159e+14 2.328e+14 3.053e+14 2.258e+14 2.945e+14 2.185e+14 2.839e+14 2.111e+14 2.732e+14 2.035e+14 2.625e+14 1.957e+14 2.519e+14 1.878e+14 2.413e+14 1.799e+14 2.309e+14 1.719e+14 2.206e+14 1.639e+14 2.105e+14 1.559e+14 2.005e+14 1.479e+14 1.906e+14 1.400e+14 1.809e+14 1.322e+14 1.715e+14 1.246e+14 1.623e+14 1.171e+14 1.533e+14 1.098e+14 1.446e+14 1.026e+14 1.361e+14 9.569e+13 1.279e+14 8.897e+13 1.200e+14 8.248e+13 1.123e+14 7.624e+13 1.049e+14 7.025e+13 9.779e+13 6.454e+13 9.099e+13 5.909e+13 8.448e+13 5.391e+13 7.827e+13 4.902e+13 7.236e+13 4.440e+13 6.673e+13 4.007e+13 6.141e+13 3.601e+13 5.637e+13 3.224e+13 5.163e+13 2.873e+13 4.718e+13 2.549e+13 4.299e+13 2.250e+13 3.908e+13 1.974e+13 3.542e+13 1.723e+13 3.200e+13 1.495e+13 2.883e+13 1.288e+13 2.591e+13 1.101e+13 2.320e+13 9.351e+12 2.071e+13 7.868e+12 1.842e+13 6.081e+12 1.516e+13 5.004e+12 1.338e+13 4.065e+12 1.177e+13 3.252e+12 1.031e+13 2.554e+12 9.003e+12 1.960e+12 7.828e+12 1.459e+12 6.779e+12 1.042e+12 5.846e+12 6.985e+11 5.021e+12 4.193e+11 4.293e+12 1.964e+11 3.655e+12 2.192e+10 3.098e+12 -1.115e+11 2.613e+12 -2.103e+11 2.194e+12 -2.803e+11 1.833e+12 -3.266e+11 1.523e+12 -3.539e+11 1.259e+12 -3.660e+11 1.035e+12 -3.663e+11 8.457e+11 -3.575e+11 6.858e+11 -3.419e+11 5.518e+11 -3.214e+11 4.397e+11 -2.975e+11 3.462e+11 -2.713e+11 2.688e+11 -2.438e+11 2.049e+11 -2.156e+11 1.525e+11 -1.875e+11 1.100e+11 -1.599e+11 7.587e+10 -1.333e+11 4.897e+10 -1.082e+11 2.829e+10 -8.488e+10 1.294e+10 -6.389e+10 2.134e+09 -4.560e+10 -4.857e+09 -3.036e+10 -8.792e+09 -1.841e+10 -1.052e+10 -9.688e+09 -1.112e+10 -3.352e+09 -1.190e+10 2.492e+09 -1.402e+10 1.017e+10 -1.769e+10 2.132e+10 -2.237e+10 3.670e+10 -2.732e+10 5.651e+10 -3.192e+10 8.076e+10 -3.568e+10 1.093e+11 -3.818e+10 1.418e+11 -3.910e+10 1.780e+11 -3.814e+10 2.174e+11 -3.509e+10 2.595e+11 -2.978e+10 3.038e+11 -2.212e+10 3.497e+11 -1.203e+10 3.965e+11 4.647e+08 4.437e+11 1.531e+10 4.906e+11 3.242e+10 5.365e+11 5.160e+10 5.809e+11 7.268e+10 6.231e+11 9.546e+10 6.625e+11 1.196e+11 6.988e+11 1.449e+11 7.314e+11 1.710e+11 7.598e+11 1.975e+11 7.839e+11 2.242e+11 8.032e+11 2.508e+11 8.177e+11 2.768e+11 8.271e+11 3.019e+11 8.316e+11 3.260e+11 8.310e+11 3.485e+11 8.256e+11 3.694e+11 8.155e+11 3.884e+11 8.009e+11 4.053e+11 7.823e+11 4.200e+11 7.597e+11 4.324e+11 7.337e+11 4.422e+11 7.045e+11 4.494e+11 6.726e+11 4.540e+11 6.383e+11 4.560e+11 6.023e+11 4.555e+11 5.648e+11 4.524e+11 5.264e+11 4.470e+11 4.874e+11 4.393e+11 4.482e+11 4.295e+11 4.093e+11 4.177e+11 3.711e+11 4.042e+11 3.336e+11 3.892e+11 2.975e+11 3.728e+11 2.627e+11 3.553e+11 2.297e+11 3.369e+11 1.985e+11 3.178e+11 1.693e+11 2.982e+11 1.422e+11 2.784e+11 1.173e+11 2.585e+11 9.453e+10 2.388e+11 7.399e+10 2.194e+11 5.561e+10 2.004e+11 3.934e+10 1.821e+11 2.509e+10 1.644e+11 1.276e+10 1.477e+11 2.221e+09 1.318e+11 -6.668e+09 1.169e+11 -1.405e+10 1.030e+11 -2.009e+10 9.022e+10 -2.494e+10 7.843e+10 -2.877e+10 6.765e+10 -3.173e+10 5.786e+10 -3.398e+10 4.898e+10 -3.565e+10 4.094e+10 -3.687e+10 3.367e+10 -3.774e+10 2.707e+10 -3.836e+10 2.101e+10 -3.879e+10 1.542e+10 -3.908e+10 1.018e+10 -3.926e+10 5.198e+09 -3.933e+10 3.820e+08 -3.930e+10 -4.347e+09 -3.915e+10 -9.059e+09 -3.885e+10 -1.380e+10 -3.836e+10 -1.861e+10 -3.766e+10 -2.352e+10 -3.672e+10 -2.855e+10 -3.550e+10 -3.371e+10 -3.396e+10 -3.901e+10 -3.208e+10 -4.443e+10 -2.983e+10 -4.997e+10 -2.718e+10 -5.560e+10 -2.411e+10 -6.131e+10 -2.061e+10 -6.707e+10 -1.667e+10 -7.284e+10 -1.227e+10 -7.859e+10 -7.426e+09 -8.428e+10 -2.132e+09 -8.987e+10 0.005 -52.880 -51.869 -50.859 -49.849 -48.838 -47.828 -46.861 -45.993 -45.215 -44.521 -43.906 -43.364 -42.893 -42.489 -42.149 -41.873 -41.658 -41.505 -41.411 -41.378 -41.406 -41.495 -41.647 -41.863 -42.147 -42.500 -42.927 -43.431 -44.019 -44.696 -45.472 -46.357 -47.364 -48.507 -49.806 -51.287 -52.985 -54.945 -57.228 -59.919 -63.128 -66.941 -71.103 -74.208 -74.430 -72.249 -68.969 -65.306 -61.794 -58.654 -55.905 -53.502 -51.390 -49.523 -47.862 -46.378 -45.047 -43.850 -42.773 -41.804 -40.932 -40.150 -39.451 -38.830 -38.283 -37.806 -37.396 -37.051 -36.769 -36.549 -36.390 -36.292 -36.254 -36.279 -36.366 -36.516 -36.731 -37.014 -37.366 -37.792 -38.295 -38.881 -39.553 -40.320 -41.189 -42.167 -43.265 -44.490 -45.851 -47.351 -48.981 -50.710 -52.462 -54.096 -55.400 -56.147 -56.182 -55.479 -54.145 -52.373 -50.382 -48.344 -46.366 -44.500 -42.768 -41.171 -39.706 -38.364 -37.136 -36.014 -34.990 -34.057 -33.210 -32.442 -31.751 -31.132 -30.584 -30.104 -29.688 -29.337 -29.049 -28.824 -28.662 -28.563 -28.529 -28.561 -28.663 -28.837 -29.088 -29.420 -29.839 -30.354 -30.973 -31.710 -32.580 -33.603 -34.806 -36.227 -37.917 -39.952 -42.453 -45.614 -49.772 -55.273 -59.469 -59.285 -59.053 -62.573 -59.360 -51.330 -45.015 -40.445 -36.816 -33.781 -31.162 -28.852 -26.783 -24.910 -23.200 -21.628 -20.172 -18.818 -17.555 -16.372 -15.262 -14.218 -13.234 -12.305 -11.428 -10.599 -9.814 -9.072 -8.369 -7.703 -7.074 -6.478 -5.915 -5.383 -4.880 -4.407 -3.962 -3.543 -3.151 -2.784 -2.443 -2.125 -1.831 -1.560 -1.312 -1.086 -0.882 -0.700 -0.540 -0.400 -0.282 -0.184 -0.108 -0.051 -0.015 0.000 -0.005 -0.029 -0.073 -0.138 -0.224 -0.330 -0.457 -0.605 -0.774 -0.964 -1.176 -1.410 -1.666 -1.945 -2.247 -2.573 -2.922 -3.296 -3.696 -4.121 -4.574 -5.054 -5.562 -6.100 -6.669 -7.270 -7.904 -8.574 -9.280 -10.026 -10.813 -11.643 -12.520 -13.448 -14.429 -15.469 -16.573 -17.747 -18.998 -20.336 -21.771 -23.317 -24.990 -26.815 -28.820 -31.041 -33.531 -36.360 -39.617 -43.362 -47.349 -50.380 -51.088 -50.547 -50.138 -49.895 -49.241 -47.724 -45.552 -43.245 -41.112 -39.242 -37.630 -36.249 -35.068 -34.059 -33.199 -32.472 -31.863 -31.360 -30.954 -30.637 -30.403 -30.248 -30.167 -30.158 -30.217 -30.344 -30.538 -30.796 -31.119 -31.509 -31.967 -32.493 -33.091 -33.764 -34.516 -35.351 -36.274 -37.292 -38.413 -39.647 -41.004 -42.499 -44.148 -45.969 -47.980 -50.197 -52.624 -55.231 -57.904 -60.372 -62.143 -62.655 -61.731 -59.789 -57.440 -55.086 -52.899 -50.931 -49.182 -47.635 -46.272 -45.071 -44.015 -43.090 -42.283 -41.584 -40.984 -40.477 -40.055 -39.716 -39.454 -39.267 -39.152 -39.108 -39.134 -39.229 -39.395 -39.632 -39.940 -40.322 -40.780 -41.318 -41.941 -42.653 -43.464 -44.381 -45.415 -46.582 -47.897 -49.385 -51.071 -52.988 -55.166 -57.610 -60.223 -62.650 -64.294 -64.921 -65.056 -65.432 -66.599 -69.215 -74.152 -73.368 -67.243 -61.962 -58.268 -55.435 -53.139 -51.218 -49.578 -48.159 -46.920 -45.832 -44.875 -44.031 -43.289 -42.639 -42.072 -41.585 -41.169 -40.821 -40.537 -40.315 -40.152 -40.046 -39.996 -40.001 -40.061 -40.175 -40.343 -40.565 -40.842 -41.175 -41.566 -42.015 -42.526 -43.101 -43.743 -44.457 -45.246 -46.117 -47.076 -48.133 -49.232 -50.330 -51.429 -52.528 -53.627 0.03 -18.79 -18.419 -18.0517 -17.6881 -17.3282 -16.9719 -16.6194 -16.2706 -15.9255 -15.5841 -15.2464 -14.9123 -14.582 -14.2554 -13.9325 -13.6133 -13.2977 -12.9859 -12.6778 -12.3734 -12.0726 -11.7756 -11.4823 -11.1926 -10.9067 -10.6245 -10.3459 -10.0711 -9.8 -9.5325 -9.2688 -9.0088 -8.7524 -8.4998 -8.2509 -8.0056 -7.7641 -7.5263 -7.2921 -7.0617 -6.8349 -6.6119 -6.3925 -6.1769 -5.9649 -5.7567 -5.5522 -5.3513 -5.1542 -4.9607 -4.771 -4.5849 -4.4026 -4.2239 -4.049 -3.8777 -3.7101 -3.5463 -3.3861 -3.2297 -3.0769 -2.9279 -2.7825 -2.6408 -2.5029 -2.3686 -2.2381 -2.1112 -1.988 -1.8686 -1.7528 -1.6407 -1.5324 -1.4277 -1.3267 -1.2295 -1.1359 -1.046 -0.95986 -0.87739 -0.79861 -0.72354 -0.65217 -0.58449 -0.52052 -0.46024 -0.40366 -0.35078 -0.3016 -0.25613 -0.21435 -0.17626 -0.14188 -0.1112 -0.084216 -0.060932 -0.041347 -0.025462 -0.013275 -0.0047879 0 0.0010887 -0.0015218 -0.0078316 -0.017841 -0.031549 -0.048956 -0.070063 -0.094869 -0.12337 -0.15558 -0.19148 -0.23109 -0.27439 -0.32139 -0.37209 -0.42649 -0.48459 -0.54639 -0.61188 -0.68108 -0.75398 -0.83057 -0.91087 -0.99486 -1.0826 -1.1739 -1.269 -1.3678 -1.4703 -1.5765 -1.6864 -1.8 -1.9173 -2.0383 -2.1629 -2.2913 -2.4234 -2.5592 -2.6987 -2.8419 -2.9887 -3.1393 -3.2936 -3.4516 -3.6133 -3.7786 -3.9477 -4.1205 -4.297 -4.4771 -4.661 -4.8486 -5.0398 -5.2348 -5.4335 -5.6359 -5.8419 -6.0517 -6.2652 -6.4823 -6.7032 -6.9278 -7.156 -7.388 -7.6236 -7.863 -8.1061 -8.3528 -8.6033 -8.8574 -9.1153 -9.3769 -9.6421 -9.9111 -10.1837 -10.4601 -10.7401 -11.0239 -11.3113 -11.6025 -11.8973 -12.1959 -12.4981 -12.8041 -13.1137 -13.4271 -13.7441 -14.0649 -14.3893 -14.7175 -15.0493 -15.3848 -15.7241 -16.067 -16.4137 -16.764 -17.118 -17.4758 -17.8372 -18.2024 1.0 52734.43872 IW3 HH 36.06 39.6 0.050 -9.888e+09 9.002e+09 -1.189e+10 1.061e+10 -1.413e+10 1.239e+10 -1.660e+10 1.433e+10 -1.931e+10 1.645e+10 -2.224e+10 1.874e+10 -2.539e+10 2.118e+10 -2.875e+10 2.377e+10 -3.230e+10 2.650e+10 -3.601e+10 2.936e+10 -3.987e+10 3.233e+10 -4.384e+10 3.538e+10 -4.790e+10 3.850e+10 -5.201e+10 4.166e+10 -5.612e+10 4.484e+10 -6.021e+10 4.801e+10 -6.424e+10 5.113e+10 -6.815e+10 5.418e+10 -7.192e+10 5.713e+10 -7.550e+10 5.996e+10 -7.884e+10 6.261e+10 -8.191e+10 6.509e+10 -8.469e+10 6.735e+10 -8.712e+10 6.936e+10 -8.919e+10 7.110e+10 -9.087e+10 7.255e+10 -9.214e+10 7.370e+10 -9.297e+10 7.451e+10 -9.336e+10 7.499e+10 -9.331e+10 7.512e+10 -9.280e+10 7.489e+10 -9.185e+10 7.431e+10 -9.046e+10 7.337e+10 -8.864e+10 7.209e+10 -8.642e+10 7.047e+10 -8.382e+10 6.854e+10 -8.087e+10 6.630e+10 -7.759e+10 6.377e+10 -7.403e+10 6.100e+10 -7.022e+10 5.799e+10 -6.621e+10 5.479e+10 -6.204e+10 5.143e+10 -5.775e+10 4.794e+10 -5.338e+10 4.437e+10 -4.899e+10 4.073e+10 -4.461e+10 3.709e+10 -4.029e+10 3.346e+10 -3.606e+10 2.990e+10 -3.197e+10 2.643e+10 -2.805e+10 2.309e+10 -2.433e+10 1.991e+10 -2.084e+10 1.691e+10 -1.760e+10 1.413e+10 -1.462e+10 1.158e+10 -1.193e+10 9.271e+09 -9.529e+09 7.223e+09 -7.419e+09 5.440e+09 -5.604e+09 3.925e+09 -4.075e+09 2.675e+09 -2.822e+09 1.681e+09 -1.833e+09 9.336e+08 -1.090e+09 4.129e+08 -5.756e+08 9.363e+07 -2.686e+08 -6.852e+07 -1.272e+08 -1.721e+08 -3.524e+07 -3.539e+08 1.128e+08 -6.511e+08 3.353e+08 -1.038e+09 6.177e+08 -1.484e+09 9.359e+08 -1.958e+09 1.268e+09 -2.435e+09 1.592e+09 -2.890e+09 1.889e+09 -3.301e+09 2.144e+09 -3.650e+09 2.344e+09 -3.923e+09 2.479e+09 -4.107e+09 2.544e+09 -4.197e+09 2.537e+09 -4.188e+09 2.459e+09 -4.082e+09 2.314e+09 -3.884e+09 2.111e+09 -3.602e+09 1.861e+09 -3.249e+09 1.577e+09 -2.841e+09 1.272e+09 -2.394e+09 9.648e+08 -1.931e+09 6.717e+08 -1.472e+09 4.102e+08 -1.040e+09 1.976e+08 -6.608e+08 4.836e+07 -3.573e+08 -3.364e+07 -1.533e+08 -9.490e+07 -4.736e+07 -2.340e+08 6.010e+07 -4.992e+08 2.785e+08 -8.986e+08 6.578e+08 -1.434e+09 1.216e+09 -2.108e+09 1.965e+09 -2.917e+09 2.906e+09 -3.858e+09 4.042e+09 -4.923e+09 5.370e+09 -6.102e+09 6.879e+09 -7.382e+09 8.559e+09 -8.751e+09 1.040e+10 -1.019e+10 1.237e+10 -1.168e+10 1.445e+10 -1.320e+10 1.663e+10 -1.472e+10 1.886e+10 -1.623e+10 2.111e+10 -1.770e+10 2.337e+10 -1.910e+10 2.558e+10 -2.043e+10 2.772e+10 -2.165e+10 2.975e+10 -2.274e+10 3.165e+10 -2.369e+10 3.337e+10 -2.449e+10 3.490e+10 -2.512e+10 3.621e+10 -2.557e+10 3.727e+10 -2.583e+10 3.806e+10 -2.590e+10 3.858e+10 -2.579e+10 3.881e+10 -2.548e+10 3.876e+10 -2.500e+10 3.841e+10 -2.434e+10 3.777e+10 -2.353e+10 3.686e+10 -2.256e+10 3.569e+10 -2.147e+10 3.428e+10 -2.027e+10 3.266e+10 -1.897e+10 3.084e+10 -1.760e+10 2.887e+10 -1.619e+10 2.676e+10 -1.474e+10 2.457e+10 -1.329e+10 2.231e+10 -1.185e+10 2.003e+10 -1.044e+10 1.776e+10 -9.088e+09 1.553e+10 -7.798e+09 1.338e+10 -6.588e+09 1.133e+10 -5.470e+09 9.406e+09 -4.452e+09 7.633e+09 -3.541e+09 6.028e+09 -2.742e+09 4.607e+09 -2.053e+09 3.377e+09 -1.476e+09 2.346e+09 -1.006e+09 1.513e+09 -6.375e+08 8.744e+08 -3.635e+08 4.229e+08 -1.773e+08 1.456e+08 -7.624e+07 9.646e+06 -4.424e+07 -8.105e+07 -2.910e+07 -2.443e+08 1.048e+07 -5.097e+08 7.384e+07 -8.575e+08 1.514e+08 -1.264e+09 2.332e+08 -1.706e+09 3.098e+08 -2.161e+09 3.729e+08 -2.606e+09 4.159e+08 -3.023e+09 4.336e+08 -3.394e+09 4.228e+08 -3.704e+09 3.818e+08 -3.940e+09 3.109e+08 -4.096e+09 2.122e+08 -4.165e+09 8.890e+07 -4.147e+09 -5.407e+07 -4.044e+09 -2.107e+08 -3.863e+09 -3.748e+08 -3.613e+09 -5.397e+08 -3.307e+09 -6.992e+08 -2.960e+09 -8.492e+08 -2.588e+09 -9.877e+08 -2.210e+09 -1.117e+09 -1.841e+09 -1.247e+09 -1.495e+09 -1.391e+09 -1.177e+09 -1.571e+09 -8.815e+08 -1.813e+09 -5.909e+08 -2.137e+09 -2.754e+08 -2.558e+09 9.866e+07 -3.082e+09 5.640e+08 -3.711e+09 1.147e+09 -4.437e+09 1.864e+09 -5.255e+09 2.728e+09 -6.154e+09 3.742e+09 -7.123e+09 4.903e+09 -8.147e+09 6.206e+09 -9.214e+09 7.639e+09 -1.031e+10 9.183e+09 -1.141e+10 1.082e+10 -1.251e+10 1.253e+10 -1.358e+10 1.428e+10 -1.461e+10 1.605e+10 -1.559e+10 1.781e+10 -1.649e+10 1.953e+10 -1.730e+10 2.118e+10 -1.802e+10 2.273e+10 -1.862e+10 2.416e+10 -1.909e+10 2.544e+10 -1.944e+10 2.654e+10 -1.965e+10 2.745e+10 -1.971e+10 2.816e+10 -1.964e+10 2.864e+10 -1.943e+10 2.889e+10 -1.908e+10 2.891e+10 -1.861e+10 2.869e+10 -1.801e+10 2.825e+10 -1.730e+10 2.758e+10 -1.650e+10 2.670e+10 -1.560e+10 2.563e+10 -1.464e+10 2.439e+10 -1.362e+10 2.300e+10 -1.255e+10 2.148e+10 -1.146e+10 1.986e+10 -1.037e+10 1.816e+10 -9.274e+09 1.643e+10 -8.202e+09 1.468e+10 -7.164e+09 1.295e+10 -6.172e+09 1.125e+10 -5.237e+09 9.624e+09 -4.368e+09 8.083e+09 -3.573e+09 6.651e+09 -2.856e+09 5.343e+09 -2.223e+09 4.172e+09 -1.675e+09 3.149e+09 -1.212e+09 2.276e+09 -8.321e+08 1.555e+09 -5.314e+08 9.835e+08 -3.053e+08 5.548e+08 -1.477e+08 2.592e+08 -5.165e+07 8.397e+07 -9.252e+06 1.140e+07 1.105e+07 -3.156e+07 4.943e+07 -1.188e+08 1.148e+08 -2.565e+08 1.985e+08 -4.258e+08 2.921e+08 -6.083e+08 3.880e+08 -7.872e+08 4.793e+08 -9.475e+08 5.599e+08 -1.077e+09 6.253e+08 -1.166e+09 6.718e+08 -1.208e+09 6.971e+08 -1.200e+09 7.001e+08 -1.144e+09 6.812e+08 -1.043e+09 6.417e+08 -9.053e+08 5.844e+08 -7.415e+08 5.133e+08 -5.647e+08 4.338e+08 -3.898e+08 3.530e+08 -2.312e+08 2.817e+08 -1.001e+08 2.339e+08 5.212e+06 2.207e+08 1.123e+08 2.376e+08 2.687e+08 2.672e+08 5.171e+08 2.926e+08 8.841e+08 3.034e+08 1.384e+09 2.935e+08 2.026e+09 2.595e+08 2.812e+09 2.001e+08 3.743e+09 1.148e+08 4.810e+09 4.556e+06 6.007e+09 -1.288e+08 7.317e+09 -2.825e+08 8.722e+09 -4.534e+08 1.020e+10 -6.372e+08 1.173e+10 -8.297e+08 1.328e+10 -1.027e+09 1.482e+10 -1.223e+09 1.632e+10 -1.414e+09 1.775e+10 -1.595e+09 1.908e+10 -1.762e+09 2.027e+10 -1.912e+09 2.130e+10 -2.040e+09 2.214e+10 -2.145e+09 2.278e+10 -2.224e+09 2.319e+10 -2.277e+09 2.337e+10 -2.302e+09 2.331e+10 -2.300e+09 2.300e+10 -2.272e+09 2.246e+10 -2.219e+09 2.169e+10 -2.144e+09 2.071e+10 -2.048e+09 1.955e+10 -1.935e+09 1.822e+10 -1.808e+09 1.676e+10 -1.670e+09 1.521e+10 -1.524e+09 1.359e+10 -1.374e+09 1.194e+10 -1.222e+09 1.031e+10 -1.073e+09 8.722e+09 -9.274e+08 7.211e+09 -7.884e+08 5.806e+09 -6.578e+08 4.532e+09 -5.371e+08 3.409e+09 -4.272e+08 2.447e+09 -3.292e+08 1.656e+09 -2.432e+08 1.034e+09 -1.695e+08 5.742e+08 -1.083e+08 2.647e+08 -6.038e+07 8.590e+07 -3.108e+07 9.940e+06 -3.276e+07 -2.872e+07 -4.666e+07 -9.831e+07 -5.668e+07 -1.918e+08 -5.571e+07 -2.871e+08 -5.481e+07 -3.555e+08 -4.669e+07 -3.839e+08 -3.516e+07 -3.629e+08 -2.200e+07 -2.940e+08 -9.456e+06 -1.910e+08 -4.107e+05 -8.182e+07 2.229e+06 -7.358e+06 8.729e+06 3.483e+07 3.655e+07 2.344e+08 8.976e+07 7.037e+08 1.777e+08 1.557e+09 3.116e+08 2.920e+09 5.051e+08 4.941e+09 7.745e+08 7.779e+09 1.138e+09 1.160e+10 1.618e+09 1.658e+10 2.238e+09 2.291e+10 3.024e+09 3.075e+10 4.006e+09 4.029e+10 5.218e+09 5.170e+10 6.688e+09 6.511e+10 8.454e+09 8.066e+10 1.055e+10 9.846e+10 1.301e+10 1.186e+11 1.587e+10 1.410e+11 1.916e+10 1.658e+11 2.290e+10 1.928e+11 2.712e+10 2.220e+11 3.184e+10 2.533e+11 3.705e+10 2.863e+11 4.277e+10 3.209e+11 4.900e+10 3.566e+11 5.569e+10 3.932e+11 6.283e+10 4.302e+11 7.037e+10 4.671e+11 7.825e+10 5.034e+11 8.641e+10 5.387e+11 9.477e+10 5.723e+11 1.032e+11 6.037e+11 1.117e+11 6.323e+11 1.201e+11 6.578e+11 1.282e+11 6.795e+11 1.360e+11 6.969e+11 1.433e+11 7.096e+11 1.499e+11 7.171e+11 1.557e+11 7.193e+11 1.607e+11 7.158e+11 1.646e+11 7.067e+11 1.673e+11 6.919e+11 1.689e+11 6.715e+11 1.691e+11 6.458e+11 1.680e+11 6.151e+11 1.654e+11 5.798e+11 1.615e+11 5.406e+11 1.562e+11 4.981e+11 1.496e+11 4.531e+11 1.418e+11 4.063e+11 1.329e+11 3.586e+11 1.230e+11 3.110e+11 1.123e+11 2.643e+11 1.010e+11 2.195e+11 8.939e+10 1.773e+11 7.766e+10 1.387e+11 6.606e+10 1.042e+11 5.489e+10 7.436e+10 4.446e+10 4.964e+10 3.510e+10 3.013e+10 2.723e+10 1.565e+10 2.134e+10 5.492e+09 1.778e+10 -1.865e+09 1.644e+10 -8.553e+09 1.648e+10 -1.643e+10 1.688e+10 -2.625e+10 1.690e+10 -3.771e+10 1.622e+10 -4.991e+10 1.476e+10 -6.176e+10 1.261e+10 -7.206e+10 9.937e+09 -7.969e+10 6.981e+09 -8.364e+10 4.017e+09 -8.316e+10 1.325e+09 -7.787e+10 -8.410e+08 -6.785e+10 -2.273e+09 -5.378e+10 -2.839e+09 -3.718e+10 -2.528e+09 -2.042e+10 -1.504e+09 -7.057e+09 -8.165e+08 1.142e+08 -1.213e+09 1.127e+10 -1.211e+09 4.310e+10 1.246e+09 1.072e+11 7.935e+09 2.156e+11 2.112e+10 3.823e+11 4.366e+10 6.238e+11 7.908e+10 9.597e+11 1.363e+11 1.462e+12 2.135e+11 2.075e+12 3.199e+11 2.863e+12 4.624e+11 3.856e+12 6.492e+11 5.091e+12 8.896e+11 6.606e+12 1.195e+12 8.443e+12 1.574e+12 1.065e+13 2.044e+12 1.327e+13 2.616e+12 1.635e+13 3.307e+12 1.996e+13 4.134e+12 2.414e+13 5.115e+12 2.897e+13 6.269e+12 3.449e+13 7.620e+12 4.078e+13 9.186e+12 4.791e+13 1.099e+13 5.591e+13 1.306e+13 6.489e+13 1.543e+13 7.489e+13 1.810e+13 8.599e+13 2.112e+13 9.824e+13 2.451e+13 1.117e+14 2.830e+13 1.264e+14 3.250e+13 1.426e+14 3.718e+13 1.601e+14 4.233e+13 1.789e+14 4.801e+13 1.994e+14 5.424e+13 2.213e+14 6.104e+13 2.447e+14 6.844e+13 2.698e+14 7.644e+13 2.964e+14 8.507e+13 3.245e+14 9.435e+13 3.543e+14 1.043e+14 3.857e+14 1.149e+14 4.186e+14 1.262e+14 4.531e+14 1.381e+14 4.890e+14 1.508e+14 5.263e+14 1.641e+14 5.650e+14 1.782e+14 6.051e+14 1.928e+14 6.462e+14 2.080e+14 6.886e+14 2.240e+14 7.319e+14 2.405e+14 7.761e+14 2.575e+14 8.210e+14 2.751e+14 8.665e+14 2.931e+14 9.125e+14 3.116e+14 9.587e+14 3.304e+14 1.005e+15 3.495e+14 1.052e+15 3.689e+14 1.098e+15 3.885e+14 1.144e+15 4.082e+14 1.189e+15 4.279e+14 1.233e+15 4.477e+14 1.276e+15 4.673e+14 1.319e+15 4.867e+14 1.360e+15 5.059e+14 1.400e+15 5.247e+14 1.437e+15 5.431e+14 1.473e+15 5.609e+14 1.506e+15 5.782e+14 1.539e+15 5.948e+14 1.567e+15 6.106e+14 1.595e+15 6.255e+14 1.619e+15 6.397e+14 1.640e+15 6.531e+14 1.659e+15 6.654e+14 1.676e+15 6.766e+14 1.689e+15 6.867e+14 1.699e+15 6.957e+14 1.706e+15 7.033e+14 1.711e+15 7.096e+14 1.712e+15 7.147e+14 1.709e+15 7.184e+14 1.703e+15 7.207e+14 1.694e+15 7.217e+14 1.684e+15 7.212e+14 1.669e+15 7.194e+14 1.651e+15 7.162e+14 1.630e+15 7.117e+14 1.607e+15 7.057e+14 1.581e+15 6.985e+14 1.552e+15 6.901e+14 1.522e+15 6.803e+14 1.488e+15 6.694e+14 1.453e+15 6.574e+14 1.416e+15 6.443e+14 1.377e+15 6.303e+14 1.337e+15 6.152e+14 1.295e+15 5.993e+14 1.253e+15 5.827e+14 1.209e+15 5.652e+14 1.164e+15 5.472e+14 1.118e+15 5.288e+14 1.073e+15 5.098e+14 1.027e+15 4.904e+14 9.810e+14 4.708e+14 9.350e+14 4.509e+14 8.892e+14 4.309e+14 8.440e+14 4.110e+14 7.991e+14 3.909e+14 7.550e+14 3.710e+14 7.118e+14 3.514e+14 6.694e+14 3.320e+14 6.281e+14 3.128e+14 5.879e+14 2.941e+14 5.492e+14 2.758e+14 5.116e+14 2.580e+14 4.755e+14 2.407e+14 4.408e+14 2.240e+14 4.075e+14 2.078e+14 3.757e+14 1.923e+14 3.455e+14 1.775e+14 3.167e+14 1.632e+14 2.896e+14 1.497e+14 2.640e+14 1.369e+14 2.398e+14 1.247e+14 2.172e+14 1.133e+14 1.961e+14 1.026e+14 1.765e+14 9.257e+13 1.582e+14 8.322e+13 1.414e+14 7.453e+13 1.258e+14 6.648e+13 1.116e+14 5.906e+13 9.853e+13 5.225e+13 8.661e+13 4.601e+13 7.581e+13 4.034e+13 6.606e+13 3.520e+13 5.729e+13 3.054e+13 4.942e+13 2.637e+13 4.240e+13 2.264e+13 3.618e+13 1.931e+13 3.069e+13 1.638e+13 2.586e+13 1.378e+13 2.165e+13 1.152e+13 1.799e+13 9.559e+12 1.483e+13 7.861e+12 1.212e+13 6.404e+12 9.820e+12 5.170e+12 7.882e+12 4.129e+12 6.259e+12 3.257e+12 4.910e+12 2.536e+12 3.803e+12 1.946e+12 2.903e+12 1.468e+12 2.179e+12 1.087e+12 1.607e+12 7.873e+11 1.159e+12 5.749e+11 8.434e+11 3.937e+11 5.762e+11 2.597e+11 3.796e+11 1.633e+11 2.390e+11 9.662e+10 1.420e+11 5.251e+10 7.793e+10 2.516e+10 3.814e+10 9.808e+09 1.556e+10 2.542e+09 4.525e+09 2.498e+08 6.681e+08 -8.786e+08 -6.931e+08 -2.489e+09 -2.405e+09 -4.101e+09 -4.217e+09 -5.067e+09 -5.297e+09 -5.132e+09 -5.319e+09 -4.344e+09 -4.362e+09 -2.980e+09 -2.798e+09 -1.485e+09 -1.201e+09 -4.237e+08 -2.028e+08 2.553e+08 7.576e+08 1.854e+09 3.334e+09 5.612e+09 8.710e+09 1.209e+10 1.745e+10 2.173e+10 2.999e+10 3.487e+10 4.664e+10 5.175e+10 6.757e+10 7.244e+10 9.274e+10 9.696e+10 1.220e+11 1.252e+11 1.552e+11 1.568e+11 1.917e+11 1.916e+11 2.311e+11 2.291e+11 2.729e+11 2.687e+11 3.161e+11 3.099e+11 3.603e+11 3.522e+11 4.045e+11 3.947e+11 4.480e+11 4.370e+11 4.900e+11 4.783e+11 5.300e+11 5.180e+11 5.670e+11 5.556e+11 6.006e+11 5.906e+11 6.302e+11 6.222e+11 6.553e+11 6.502e+11 6.756e+11 6.741e+11 6.909e+11 6.936e+11 7.009e+11 7.084e+11 7.055e+11 7.184e+11 7.049e+11 7.236e+11 6.992e+11 7.239e+11 6.886e+11 7.196e+11 6.734e+11 7.108e+11 6.540e+11 6.976e+11 6.308e+11 6.804e+11 6.041e+11 6.596e+11 5.747e+11 6.355e+11 5.429e+11 6.084e+11 5.092e+11 5.790e+11 4.742e+11 5.475e+11 4.384e+11 5.145e+11 4.023e+11 0.005 -52.057 -51.014 -49.971 -48.927 -47.884 -46.944 -46.102 -45.352 -44.687 -44.101 -43.589 -43.147 -42.774 -42.465 -42.220 -42.038 -41.918 -41.860 -41.863 -41.929 -42.058 -42.253 -42.516 -42.848 -43.255 -43.739 -44.308 -44.967 -45.724 -46.591 -47.581 -48.709 -49.998 -51.477 -53.187 -55.185 -57.559 -60.459 -64.164 -69.370 -79.555 -83.474 -77.483 -72.855 -69.821 -66.672 -63.344 -60.158 -57.285 -54.750 -52.521 -50.552 -48.804 -47.245 -45.850 -44.596 -43.469 -42.454 -41.541 -40.721 -39.987 -39.333 -38.754 -38.247 -37.808 -37.435 -37.126 -36.879 -36.693 -36.569 -36.505 -36.502 -36.561 -36.684 -36.871 -37.126 -37.449 -37.846 -38.319 -38.875 -39.518 -40.256 -41.097 -42.052 -43.131 -44.350 -45.722 -47.266 -48.997 -50.926 -53.049 -55.341 -57.747 -60.222 -62.766 -65.004 -65.146 -62.048 -57.844 -54.116 -50.972 -48.293 -45.972 -43.936 -42.131 -40.520 -39.073 -37.770 -36.592 -35.527 -34.564 -33.694 -32.910 -32.207 -31.580 -31.026 -30.541 -30.124 -29.772 -29.486 -29.263 -29.105 -29.012 -28.985 -29.025 -29.136 -29.320 -29.581 -29.924 -30.355 -30.882 -31.515 -32.265 -33.148 -34.184 -35.399 -36.828 -38.523 -40.551 -43.016 -46.078 -49.997 -55.103 -61.019 -64.868 -66.643 -63.228 -53.848 -47.435 -42.666 -38.846 -35.647 -32.888 -30.459 -28.288 -26.325 -24.534 -22.888 -21.367 -19.954 -18.637 -17.404 -16.247 -15.160 -14.135 -13.169 -12.255 -11.391 -10.574 -9.799 -9.066 -8.371 -7.713 -7.089 -6.499 -5.940 -5.412 -4.913 -4.442 -3.999 -3.582 -3.191 -2.824 -2.483 -2.165 -1.870 -1.598 -1.349 -1.121 -0.915 -0.731 -0.568 -0.425 -0.304 -0.202 -0.122 -0.061 -0.020 -0.000 0.000 -0.020 -0.059 -0.119 -0.199 -0.299 -0.419 -0.561 -0.723 -0.906 -1.110 -1.337 -1.585 -1.855 -2.149 -2.465 -2.805 -3.170 -3.559 -3.975 -4.416 -4.885 -5.382 -5.909 -6.465 -7.054 -7.676 -8.333 -9.026 -9.758 -10.532 -11.348 -12.212 -13.126 -14.095 -15.123 -16.216 -17.380 -18.624 -19.959 -21.396 -22.952 -24.647 -26.511 -28.584 -30.924 -33.624 -36.847 -40.924 -46.742 -59.318 -57.168 -51.007 -48.063 -47.043 -46.997 -47.465 -47.827 -47.225 -45.456 -43.184 -40.973 -39.021 -37.346 -35.920 -34.707 -33.678 -32.804 -32.066 -31.448 -30.937 -30.524 -30.200 -29.959 -29.795 -29.706 -29.686 -29.736 -29.851 -30.032 -30.277 -30.586 -30.961 -31.402 -31.910 -32.488 -33.139 -33.866 -34.673 -35.567 -36.554 -37.641 -38.841 -40.164 -41.628 -43.251 -45.059 -47.082 -49.361 -51.945 -54.888 -58.227 -61.899 -65.474 -67.821 -67.790 -65.610 -62.469 -59.272 -56.374 -53.844 -51.658 -49.766 -48.126 -46.699 -45.455 -44.371 -43.427 -42.608 -41.902 -41.299 -40.791 -40.370 -40.034 -39.776 -39.593 -39.484 -39.446 -39.478 -39.580 -39.752 -39.995 -40.309 -40.696 -41.160 -41.703 -42.329 -43.046 -43.858 -44.775 -45.808 -46.969 -48.275 -49.746 -51.406 -53.283 -55.401 -57.768 -60.313 -62.793 -64.756 -65.908 -66.567 -67.434 -69.181 -72.206 -73.484 -69.561 -64.218 -60.222 -57.145 -54.658 -52.582 -50.812 -49.280 -47.942 -46.766 -45.728 -44.809 -43.998 -43.281 -42.652 -42.102 -41.627 -41.220 -40.879 -40.599 -40.379 -40.217 -40.109 -40.056 -40.056 -40.109 -40.213 -40.370 -40.579 -40.840 -41.155 -41.525 -41.950 -42.434 -42.978 -43.584 -44.257 -45.000 -45.819 -46.719 -47.707 -48.784 -49.862 -50.940 -52.017 0.03 -17.4928 -17.1479 -16.8065 -16.4685 -16.134 -15.8029 -15.4752 -15.1509 -14.8301 -14.5127 -14.1987 -13.8882 -13.5811 -13.2775 -12.9772 -12.6805 -12.3871 -12.0972 -11.8107 -11.5276 -11.248 -10.9718 -10.699 -10.4297 -10.1638 -9.9013 -9.6423 -9.3867 -9.1345 -8.8858 -8.6405 -8.3986 -8.1602 -7.9252 -7.6936 -7.4655 -7.2408 -7.0195 -6.8017 -6.5873 -6.3763 -6.1688 -5.9647 -5.764 -5.5667 -5.3729 -5.1826 -4.9956 -4.8121 -4.632 -4.4554 -4.2822 -4.1124 -3.946 -3.7831 -3.6237 -3.4676 -3.315 -3.1658 -3.0201 -2.8777 -2.7389 -2.6034 -2.4714 -2.3428 -2.2177 -2.0959 -1.9776 -1.8628 -1.7514 -1.6434 -1.5388 -1.4377 -1.34 -1.2458 -1.1549 -1.0675 -0.98359 -0.90306 -0.82597 -0.75231 -0.68208 -0.61529 -0.55193 -0.492 -0.4355 -0.38244 -0.33281 -0.28661 -0.24385 -0.20451 -0.16862 -0.13615 -0.10712 -0.081515 -0.059347 -0.040612 -0.02531 -0.01344 -0.0050038 0 0.001571 -0.00029082 -0.0055855 -0.014313 -0.026473 -0.042066 -0.061092 -0.083551 -0.10944 -0.13877 -0.17152 -0.20771 -0.24734 -0.29039 -0.33688 -0.3868 -0.44016 -0.49694 -0.55716 -0.62081 -0.6879 -0.75842 -0.83237 -0.90975 -0.99057 -1.0748 -1.1625 -1.2536 -1.3482 -1.4461 -1.5476 -1.6524 -1.7607 -1.8724 -1.9875 -2.1061 -2.2281 -2.3536 -2.4824 -2.6148 -2.7505 -2.8897 -3.0323 -3.1783 -3.3278 -3.4807 -3.637 -3.7968 -3.96 -4.1266 -4.2967 -4.4702 -4.6472 -4.8275 -5.0113 -5.1986 -5.3892 -5.5833 -5.7809 -5.9818 -6.1862 -6.394 -6.6053 -6.82 -7.0381 -7.2597 -7.4847 -7.7131 -7.945 -8.1803 -8.419 -8.6612 -8.9067 -9.1558 -9.4082 -9.6641 -9.9234 -10.1862 -10.4524 -10.722 -10.9951 -11.2715 -11.5515 -11.8348 -12.1216 -12.4118 -12.7055 -13.0026 -13.3031 -13.607 -13.9144 -14.2252 -14.5395 -14.8571 -15.1783 -15.5028 -15.8308 -16.1622 -16.497 -16.8353 1.0 59758.6889 IW3 HV 36.06 39.6 0.050 -4.551e+08 1.107e+10 -7.830e+08 1.332e+10 -1.185e+09 1.582e+10 -1.666e+09 1.859e+10 -2.230e+09 2.162e+10 -2.878e+09 2.491e+10 -3.613e+09 2.844e+10 -4.432e+09 3.220e+10 -5.333e+09 3.616e+10 -6.310e+09 4.031e+10 -7.359e+09 4.462e+10 -8.468e+09 4.905e+10 -9.629e+09 5.356e+10 -1.083e+10 5.813e+10 -1.206e+10 6.271e+10 -1.329e+10 6.725e+10 -1.453e+10 7.171e+10 -1.574e+10 7.605e+10 -1.692e+10 8.023e+10 -1.805e+10 8.420e+10 -1.911e+10 8.793e+10 -2.009e+10 9.136e+10 -2.098e+10 9.448e+10 -2.176e+10 9.723e+10 -2.243e+10 9.959e+10 -2.298e+10 1.015e+11 -2.341e+10 1.030e+11 -2.370e+10 1.041e+11 -2.386e+10 1.046e+11 -2.389e+10 1.047e+11 -2.378e+10 1.043e+11 -2.356e+10 1.034e+11 -2.321e+10 1.020e+11 -2.274e+10 1.001e+11 -2.217e+10 9.782e+10 -2.151e+10 9.506e+10 -2.075e+10 9.189e+10 -1.992e+10 8.834e+10 -1.902e+10 8.445e+10 -1.807e+10 8.025e+10 -1.707e+10 7.579e+10 -1.603e+10 7.112e+10 -1.497e+10 6.628e+10 -1.390e+10 6.133e+10 -1.282e+10 5.632e+10 -1.175e+10 5.129e+10 -1.070e+10 4.631e+10 -9.666e+09 4.142e+10 -8.665e+09 3.666e+10 -7.702e+09 3.209e+10 -6.783e+09 2.774e+10 -5.915e+09 2.366e+10 -5.102e+09 1.986e+10 -4.347e+09 1.638e+10 -3.654e+09 1.323e+10 -3.025e+09 1.043e+10 -2.459e+09 7.985e+09 -1.959e+09 5.897e+09 -1.522e+09 4.158e+09 -1.146e+09 2.755e+09 -8.300e+08 1.675e+09 -5.708e+08 8.936e+08 -3.688e+08 3.819e+08 -2.334e+08 9.692e+07 -1.873e+08 -5.566e+07 -2.213e+08 -2.388e+08 -2.800e+08 -5.382e+08 -3.376e+08 -9.466e+08 -3.897e+08 -1.436e+09 -4.384e+08 -1.972e+09 -4.866e+08 -2.526e+09 -5.376e+08 -3.069e+09 -5.934e+08 -3.577e+09 -6.557e+08 -4.028e+09 -7.251e+08 -4.405e+09 -8.010e+08 -4.693e+09 -8.823e+08 -4.883e+09 -9.668e+08 -4.970e+09 -1.052e+09 -4.951e+09 -1.134e+09 -4.829e+09 -1.209e+09 -4.611e+09 -1.274e+09 -4.308e+09 -1.325e+09 -3.931e+09 -1.360e+09 -3.498e+09 -1.376e+09 -3.026e+09 -1.371e+09 -2.537e+09 -1.349e+09 -2.050e+09 -1.311e+09 -1.586e+09 -1.268e+09 -1.161e+09 -1.233e+09 -7.837e+08 -1.225e+09 -4.527e+08 -1.267e+09 -1.460e+08 -1.377e+09 1.765e+08 -1.563e+09 5.634e+08 -1.819e+09 1.060e+09 -2.137e+09 1.699e+09 -2.504e+09 2.502e+09 -2.909e+09 3.479e+09 -3.343e+09 4.630e+09 -3.797e+09 5.952e+09 -4.264e+09 7.431e+09 -4.738e+09 9.056e+09 -5.210e+09 1.080e+10 -5.674e+09 1.265e+10 -6.123e+09 1.457e+10 -6.551e+09 1.653e+10 -6.951e+09 1.849e+10 -7.318e+09 2.044e+10 -7.645e+09 2.233e+10 -7.928e+09 2.414e+10 -8.161e+09 2.582e+10 -8.340e+09 2.736e+10 -8.461e+09 2.872e+10 -8.523e+09 2.989e+10 -8.523e+09 3.085e+10 -8.460e+09 3.157e+10 -8.335e+09 3.205e+10 -8.149e+09 3.228e+10 -7.906e+09 3.227e+10 -7.609e+09 3.201e+10 -7.262e+09 3.151e+10 -6.872e+09 3.078e+10 -6.446e+09 2.984e+10 -5.991e+09 2.870e+10 -5.515e+09 2.738e+10 -5.026e+09 2.591e+10 -4.532e+09 2.432e+10 -4.042e+09 2.262e+10 -3.564e+09 2.085e+10 -3.104e+09 1.902e+10 -2.669e+09 1.718e+10 -2.263e+09 1.535e+10 -1.892e+09 1.354e+10 -1.559e+09 1.179e+10 -1.264e+09 1.011e+10 -1.009e+09 8.523e+09 -7.932e+08 7.053e+09 -6.141e+08 5.707e+09 -4.694e+08 4.498e+09 -3.555e+08 3.435e+09 -2.678e+08 2.520e+09 -2.017e+08 1.757e+09 -1.522e+08 1.144e+09 -1.143e+08 6.742e+08 -8.344e+07 3.404e+08 -5.659e+07 1.318e+08 -3.905e+07 2.751e+07 -4.780e+07 -3.063e+07 -8.818e+07 -1.213e+08 -1.476e+08 -2.705e+08 -2.222e+08 -4.654e+08 -3.114e+08 -6.886e+08 -4.147e+08 -9.236e+08 -5.313e+08 -1.155e+09 -6.593e+08 -1.368e+09 -7.972e+08 -1.553e+09 -9.425e+08 -1.699e+09 -1.093e+09 -1.801e+09 -1.247e+09 -1.856e+09 -1.402e+09 -1.862e+09 -1.559e+09 -1.822e+09 -1.717e+09 -1.740e+09 -1.879e+09 -1.620e+09 -2.050e+09 -1.468e+09 -2.235e+09 -1.288e+09 -2.443e+09 -1.080e+09 -2.685e+09 -8.447e+08 -2.971e+09 -5.750e+08 -3.312e+09 -2.616e+08 -3.715e+09 1.076e+08 -4.188e+09 5.473e+08 -4.736e+09 1.072e+09 -5.357e+09 1.693e+09 -6.052e+09 2.423e+09 -6.817e+09 3.269e+09 -7.646e+09 4.234e+09 -8.532e+09 5.321e+09 -9.465e+09 6.527e+09 -1.044e+10 7.845e+09 -1.143e+10 9.269e+09 -1.244e+10 1.079e+10 -1.345e+10 1.238e+10 -1.444e+10 1.404e+10 -1.540e+10 1.574e+10 -1.632e+10 1.747e+10 -1.718e+10 1.921e+10 -1.797e+10 2.093e+10 -1.869e+10 2.260e+10 -1.930e+10 2.422e+10 -1.982e+10 2.575e+10 -2.023e+10 2.718e+10 -2.051e+10 2.848e+10 -2.068e+10 2.963e+10 -2.073e+10 3.062e+10 -2.065e+10 3.142e+10 -2.045e+10 3.203e+10 -2.013e+10 3.243e+10 -1.969e+10 3.261e+10 -1.915e+10 3.257e+10 -1.851e+10 3.230e+10 -1.778e+10 3.181e+10 -1.698e+10 3.109e+10 -1.610e+10 3.016e+10 -1.517e+10 2.904e+10 -1.419e+10 2.773e+10 -1.319e+10 2.625e+10 -1.216e+10 2.464e+10 -1.113e+10 2.291e+10 -1.010e+10 2.110e+10 -9.087e+09 1.923e+10 -8.101e+09 1.733e+10 -7.151e+09 1.544e+10 -6.243e+09 1.358e+10 -5.387e+09 1.177e+10 -4.588e+09 1.006e+10 -3.850e+09 8.445e+09 -3.177e+09 6.958e+09 -2.573e+09 5.611e+09 -2.037e+09 4.413e+09 -1.571e+09 3.371e+09 -1.173e+09 2.485e+09 -8.414e+08 1.753e+09 -5.725e+08 1.167e+09 -3.625e+08 7.189e+08 -2.064e+08 3.944e+08 -9.900e+07 1.791e+08 -3.430e+07 5.644e+07 -6.068e+06 7.471e+06 7.284e+06 -1.931e+07 3.214e+07 -7.035e+07 7.386e+07 -1.463e+08 1.264e+08 -2.328e+08 1.841e+08 -3.175e+08 2.419e+08 -3.905e+08 2.956e+08 -4.442e+08 3.417e+08 -4.738e+08 3.776e+08 -4.772e+08 4.018e+08 -4.547e+08 4.138e+08 -4.090e+08 4.144e+08 -3.449e+08 4.059e+08 -2.683e+08 3.923e+08 -1.854e+08 3.796e+08 -1.005e+08 3.756e+08 -1.317e+07 3.886e+08 8.467e+07 4.240e+08 2.097e+08 4.826e+08 3.834e+08 5.617e+08 6.272e+08 6.574e+08 9.602e+08 7.661e+08 1.398e+09 8.851e+08 1.952e+09 1.013e+09 2.635e+09 1.149e+09 3.450e+09 1.292e+09 4.402e+09 1.442e+09 5.493e+09 1.600e+09 6.717e+09 1.764e+09 8.066e+09 1.936e+09 9.531e+09 2.113e+09 1.109e+10 2.295e+09 1.273e+10 2.481e+09 1.442e+10 2.668e+09 1.614e+10 2.853e+09 1.785e+10 3.033e+09 1.952e+10 3.203e+09 2.112e+10 3.359e+09 2.259e+10 3.497e+09 2.392e+10 3.612e+09 2.507e+10 3.699e+09 2.599e+10 3.756e+09 2.668e+10 3.778e+09 2.709e+10 3.764e+09 2.723e+10 3.713e+09 2.707e+10 3.624e+09 2.662e+10 3.499e+09 2.588e+10 3.340e+09 2.487e+10 3.150e+09 2.361e+10 2.934e+09 2.213e+10 2.698e+09 2.047e+10 2.446e+09 1.867e+10 2.185e+09 1.676e+10 1.921e+09 1.480e+10 1.660e+09 1.284e+10 1.408e+09 1.091e+10 1.170e+09 9.061e+09 9.499e+08 7.333e+09 7.509e+08 5.754e+09 5.752e+08 4.351e+09 4.244e+08 3.143e+09 2.988e+08 2.140e+09 1.976e+08 1.343e+09 1.199e+08 7.481e+08 6.358e+07 3.414e+08 2.604e+07 1.029e+08 4.978e+06 7.908e+06 5.199e+06 -2.669e+07 4.069e+06 -1.274e+08 -3.018e+06 -2.759e+08 -1.332e+07 -4.397e+08 -2.405e+07 -5.890e+08 -2.971e+07 -6.998e+08 -3.257e+07 -7.504e+08 -3.244e+07 -7.285e+08 -2.752e+07 -6.357e+08 -1.862e+07 -4.840e+08 -7.875e+06 -2.991e+08 9.683e+05 -1.231e+08 3.289e+06 -1.074e+07 1.250e+07 4.886e+07 5.330e+07 3.224e+08 1.345e+08 9.490e+08 2.736e+08 2.064e+09 4.915e+08 3.816e+09 8.139e+08 6.376e+09 1.271e+09 9.932e+09 1.896e+09 1.467e+10 2.726e+09 2.081e+10 3.807e+09 2.856e+10 5.179e+09 3.812e+10 6.892e+09 4.971e+10 8.997e+09 6.353e+10 1.154e+10 7.972e+10 1.457e+10 9.846e+10 1.813e+10 1.199e+11 2.227e+10 1.440e+11 2.701e+10 1.708e+11 3.238e+10 2.004e+11 3.840e+10 2.326e+11 4.508e+10 2.673e+11 5.240e+10 3.043e+11 6.035e+10 3.431e+11 6.888e+10 3.835e+11 7.796e+10 4.251e+11 8.750e+10 4.673e+11 9.744e+10 5.097e+11 1.077e+11 5.515e+11 1.181e+11 5.922e+11 1.286e+11 6.311e+11 1.391e+11 6.676e+11 1.494e+11 7.010e+11 1.595e+11 7.307e+11 1.691e+11 7.563e+11 1.782e+11 7.770e+11 1.866e+11 7.924e+11 1.941e+11 8.021e+11 2.007e+11 8.057e+11 2.062e+11 8.032e+11 2.106e+11 7.943e+11 2.137e+11 7.792e+11 2.154e+11 7.579e+11 2.158e+11 7.308e+11 2.147e+11 6.982e+11 2.122e+11 6.607e+11 2.081e+11 6.187e+11 2.027e+11 5.732e+11 1.958e+11 5.247e+11 1.875e+11 4.742e+11 1.780e+11 4.226e+11 1.674e+11 3.707e+11 1.558e+11 3.196e+11 1.434e+11 2.700e+11 1.303e+11 2.230e+11 1.169e+11 1.793e+11 1.034e+11 1.396e+11 9.016e+10 1.045e+11 7.744e+10 7.439e+10 6.572e+10 4.949e+10 5.544e+10 2.962e+10 4.710e+10 1.424e+10 4.112e+10 2.224e+09 3.759e+10 -8.006e+09 3.615e+10 -1.812e+10 3.598e+10 -2.928e+10 3.621e+10 -4.187e+10 3.612e+10 -5.553e+10 3.528e+10 -6.937e+10 3.348e+10 -8.231e+10 3.067e+10 -9.311e+10 2.698e+10 -1.006e+11 2.260e+10 -1.037e+11 1.780e+10 -1.017e+11 1.293e+10 -9.424e+10 8.335e+09 -8.142e+10 4.356e+09 -6.414e+10 1.327e+09 -4.414e+10 -4.866e+08 -2.420e+10 -9.217e+08 -8.394e+09 -9.542e+08 3.527e+07 -2.615e+09 1.282e+10 -5.966e+09 4.928e+10 -9.751e+09 1.226e+11 -1.307e+10 2.464e+11 -1.467e+10 4.364e+11 -1.291e+10 7.111e+11 -5.729e+09 1.092e+12 9.418e+09 1.598e+12 3.560e+10 2.265e+12 7.651e+10 3.121e+12 1.365e+11 4.200e+12 2.203e+11 5.537e+12 3.339e+11 7.176e+12 4.834e+11 9.161e+12 6.761e+11 1.154e+13 9.200e+11 1.436e+13 1.224e+12 1.768e+13 1.597e+12 2.155e+13 2.050e+12 2.604e+13 2.596e+12 3.121e+13 3.244e+12 3.711e+13 4.011e+12 4.383e+13 4.907e+12 5.143e+13 5.949e+12 5.997e+13 7.154e+12 6.954e+13 8.536e+12 8.019e+13 1.011e+13 9.200e+13 1.191e+13 1.050e+14 1.392e+13 1.194e+14 1.620e+13 1.350e+14 1.873e+13 1.522e+14 2.155e+13 1.709e+14 2.470e+13 1.910e+14 2.818e+13 2.127e+14 3.203e+13 2.360e+14 3.625e+13 2.611e+14 4.086e+13 2.878e+14 4.586e+13 3.162e+14 5.127e+13 3.463e+14 5.711e+13 3.783e+14 6.338e+13 4.118e+14 7.008e+13 4.471e+14 7.723e+13 4.841e+14 8.482e+13 5.227e+14 9.284e+13 5.628e+14 1.013e+14 6.045e+14 1.102e+14 6.475e+14 1.195e+14 6.920e+14 1.292e+14 7.376e+14 1.393e+14 7.843e+14 1.498e+14 8.320e+14 1.606e+14 8.805e+14 1.716e+14 9.297e+14 1.829e+14 9.794e+14 1.945e+14 1.030e+15 2.063e+14 1.080e+15 2.183e+14 1.130e+15 2.304e+14 1.180e+15 2.426e+14 1.230e+15 2.548e+14 1.279e+15 2.670e+14 1.327e+15 2.792e+14 1.374e+15 2.913e+14 1.420e+15 3.033e+14 1.465e+15 3.150e+14 1.508e+15 3.266e+14 1.549e+15 3.379e+14 1.588e+15 3.489e+14 1.625e+15 3.594e+14 1.660e+15 3.696e+14 1.692e+15 3.793e+14 1.722e+15 3.885e+14 1.749e+15 3.973e+14 1.773e+15 4.056e+14 1.795e+15 4.133e+14 1.814e+15 4.203e+14 1.830e+15 4.267e+14 1.842e+15 4.323e+14 1.851e+15 4.373e+14 1.857e+15 4.414e+14 1.859e+15 4.448e+14 1.858e+15 4.473e+14 1.854e+15 4.490e+14 1.846e+15 4.499e+14 1.835e+15 4.499e+14 1.821e+15 4.490e+14 1.803e+15 4.472e+14 1.784e+15 4.447e+14 1.760e+15 4.412e+14 1.733e+15 4.369e+14 1.704e+15 4.317e+14 1.672e+15 4.258e+14 1.637e+15 4.191e+14 1.601e+15 4.116e+14 1.562e+15 4.035e+14 1.521e+15 3.946e+14 1.478e+15 3.851e+14 1.433e+15 3.751e+14 1.387e+15 3.645e+14 1.340e+15 3.536e+14 1.292e+15 3.422e+14 1.243e+15 3.304e+14 1.194e+15 3.183e+14 1.144e+15 3.060e+14 1.094e+15 2.935e+14 1.044e+15 2.808e+14 9.939e+14 2.681e+14 9.442e+14 2.554e+14 8.950e+14 2.428e+14 8.464e+14 2.302e+14 7.987e+14 2.177e+14 7.520e+14 2.054e+14 7.063e+14 1.934e+14 6.617e+14 1.816e+14 6.186e+14 1.701e+14 5.768e+14 1.589e+14 5.366e+14 1.481e+14 4.978e+14 1.377e+14 4.607e+14 1.276e+14 4.251e+14 1.179e+14 3.913e+14 1.087e+14 3.592e+14 9.991e+13 3.286e+14 9.155e+13 2.999e+14 8.364e+13 2.728e+14 7.616e+13 2.474e+14 6.912e+13 2.236e+14 6.253e+13 2.015e+14 5.636e+13 1.808e+14 5.061e+13 1.618e+14 4.528e+13 1.442e+14 4.034e+13 1.280e+14 3.579e+13 1.132e+14 3.161e+13 9.970e+13 2.779e+13 8.740e+13 2.432e+13 7.629e+13 2.117e+13 6.626e+13 1.832e+13 5.725e+13 1.578e+13 4.922e+13 1.350e+13 4.207e+13 1.148e+13 3.573e+13 9.691e+12 3.017e+13 8.123e+12 2.530e+13 6.755e+12 2.106e+13 5.570e+12 1.739e+13 4.552e+12 1.425e+13 3.684e+12 1.156e+13 2.950e+12 9.292e+12 2.335e+12 7.391e+12 1.825e+12 5.808e+12 1.406e+12 4.506e+12 1.066e+12 3.445e+12 7.937e+11 2.590e+12 5.790e+11 1.911e+12 4.124e+11 1.380e+12 2.843e+11 9.683e+11 1.903e+11 6.618e+11 1.222e+11 4.361e+11 7.445e+10 2.744e+11 4.232e+10 1.628e+11 2.183e+10 8.913e+10 9.708e+09 4.340e+10 3.330e+09 1.752e+10 6.268e+08 4.974e+09 -2.644e+07 6.857e+08 -4.789e+08 -9.525e+08 -1.096e+09 -3.091e+09 -1.518e+09 -5.325e+09 -1.531e+09 -6.680e+09 -1.135e+09 -6.775e+09 -4.767e+08 -5.703e+09 2.101e+08 -3.905e+09 7.062e+08 -2.048e+09 1.178e+09 -6.722e+08 2.468e+09 8.332e+08 5.345e+09 4.078e+09 1.014e+10 1.043e+10 1.708e+10 2.071e+10 2.636e+10 3.548e+10 3.814e+10 5.513e+10 5.250e+10 7.989e+10 6.947e+10 1.097e+11 8.898e+10 1.446e+11 1.109e+11 1.841e+11 1.351e+11 2.278e+11 1.612e+11 2.752e+11 1.891e+11 3.255e+11 2.182e+11 3.779e+11 2.482e+11 4.317e+11 2.788e+11 4.859e+11 3.094e+11 5.395e+11 3.396e+11 5.919e+11 3.690e+11 6.421e+11 3.970e+11 6.892e+11 4.235e+11 7.326e+11 4.479e+11 7.715e+11 4.697e+11 8.055e+11 4.889e+11 8.340e+11 5.049e+11 8.567e+11 5.177e+11 8.733e+11 5.269e+11 8.835e+11 5.327e+11 8.874e+11 5.348e+11 8.851e+11 5.334e+11 8.768e+11 5.285e+11 8.627e+11 5.203e+11 8.432e+11 5.090e+11 8.187e+11 4.948e+11 7.896e+11 4.779e+11 7.565e+11 4.587e+11 7.201e+11 4.375e+11 6.807e+11 4.147e+11 6.392e+11 3.906e+11 5.960e+11 3.655e+11 5.519e+11 0.005 -51.246 -50.206 -49.166 -48.127 -47.087 -46.147 -45.305 -44.552 -43.881 -43.287 -42.765 -42.312 -41.923 -41.598 -41.335 -41.131 -40.986 -40.901 -40.874 -40.906 -40.997 -41.150 -41.366 -41.648 -41.997 -42.418 -42.916 -43.496 -44.165 -44.932 -45.808 -46.809 -47.952 -49.265 -50.782 -52.556 -54.668 -57.260 -60.602 -65.382 -75.083 -78.502 -72.150 -67.695 -65.966 -65.556 -66.105 -67.233 -67.554 -65.538 -62.098 -58.728 -55.860 -53.448 -51.398 -49.631 -48.094 -46.745 -45.558 -44.509 -43.582 -42.764 -42.046 -41.420 -40.879 -40.418 -40.034 -39.724 -39.486 -39.318 -39.220 -39.191 -39.233 -39.346 -39.532 -39.793 -40.132 -40.553 -41.061 -41.663 -42.365 -43.176 -44.107 -45.170 -46.379 -47.750 -49.297 -51.028 -52.933 -54.962 -56.996 -58.868 -60.475 -61.942 -63.569 -65.178 -64.985 -61.757 -57.542 -53.860 -50.787 -48.188 -45.947 -43.987 -42.253 -40.708 -39.323 -38.075 -36.950 -35.934 -35.017 -34.190 -33.448 -32.786 -32.198 -31.682 -31.235 -30.855 -30.542 -30.294 -30.111 -29.994 -29.944 -29.963 -30.052 -30.215 -30.455 -30.779 -31.191 -31.700 -32.314 -33.048 -33.915 -34.937 -36.139 -37.558 -39.242 -41.263 -43.717 -46.732 -50.403 -54.343 -56.815 -57.207 -58.336 -61.303 -59.198 -50.708 -44.901 -40.565 -37.067 -34.115 -31.552 -29.282 -27.242 -25.389 -23.692 -22.127 -20.675 -19.324 -18.061 -16.876 -15.763 -14.714 -13.725 -12.790 -11.906 -11.069 -10.276 -9.524 -8.811 -8.135 -7.495 -6.888 -6.313 -5.768 -5.254 -4.767 -4.308 -3.876 -3.469 -3.088 -2.731 -2.398 -2.088 -1.801 -1.536 -1.294 -1.073 -0.873 -0.694 -0.537 -0.399 -0.283 -0.186 -0.110 -0.053 -0.017 0.000 -0.003 -0.027 -0.069 -0.132 -0.214 -0.317 -0.440 -0.583 -0.748 -0.933 -1.140 -1.368 -1.617 -1.889 -2.184 -2.502 -2.844 -3.209 -3.600 -4.016 -4.459 -4.928 -5.426 -5.953 -6.511 -7.100 -7.722 -8.379 -9.073 -9.805 -10.579 -11.396 -12.260 -13.174 -14.143 -15.171 -16.263 -17.428 -18.672 -20.007 -21.444 -23.001 -24.697 -26.562 -28.636 -30.979 -33.683 -36.912 -40.998 -46.829 -59.425 -57.307 -51.200 -48.350 -47.504 -47.797 -48.943 -50.424 -50.539 -48.235 -45.139 -42.361 -40.068 -38.183 -36.622 -35.318 -34.225 -33.306 -32.535 -31.893 -31.365 -30.940 -30.609 -30.364 -30.201 -30.113 -30.100 -30.156 -30.282 -30.475 -30.736 -31.064 -31.460 -31.925 -32.460 -33.070 -33.755 -34.522 -35.374 -36.317 -37.359 -38.507 -39.773 -41.168 -42.704 -44.397 -46.261 -48.306 -50.534 -52.924 -55.415 -57.895 -60.181 -61.907 -62.352 -61.024 -58.494 -55.686 -53.067 -50.746 -48.712 -46.930 -45.365 -43.987 -42.769 -41.693 -40.743 -39.904 -39.167 -38.523 -37.963 -37.484 -37.078 -36.743 -36.475 -36.271 -36.129 -36.046 -36.023 -36.058 -36.150 -36.301 -36.508 -36.774 -37.099 -37.485 -37.934 -38.447 -39.029 -39.682 -40.412 -41.224 -42.125 -43.124 -44.230 -45.459 -46.825 -48.351 -50.066 -52.010 -54.237 -56.830 -59.919 -63.722 -68.627 -74.992 -79.894 -79.986 -78.573 -76.375 -72.043 -67.318 -63.388 -60.209 -57.592 -55.397 -53.527 -51.915 -50.515 -49.292 -48.222 -47.283 -46.461 -45.744 -45.122 -44.587 -44.133 -43.754 -43.447 -43.207 -43.032 -42.920 -42.868 -42.876 -42.943 -43.069 -43.253 -43.495 -43.797 -44.160 -44.584 -45.073 -45.629 -46.255 -46.955 -47.735 -48.600 -49.558 -50.612 -51.665 -52.718 -53.772 0.03 -18.1939 -17.8356 -17.4807 -17.1295 -16.7818 -16.4377 -16.0971 -15.7601 -15.4267 -15.0968 -14.7705 -14.4478 -14.1286 -13.813 -13.5009 -13.1925 -12.8875 -12.5862 -12.2884 -11.9942 -11.7035 -11.4164 -11.1329 -10.8529 -10.5765 -10.3037 -10.0344 -9.7687 -9.5066 -9.248 -8.993 -8.7416 -8.4937 -8.2493 -8.0086 -7.7714 -7.5378 -7.3077 -7.0812 -6.8583 -6.6389 -6.4231 -6.2109 -6.0022 -5.7971 -5.5956 -5.3976 -5.2032 -5.0123 -4.825 -4.6413 -4.4611 -4.2846 -4.1115 -3.9421 -3.7762 -3.6138 -3.4551 -3.2999 -3.1482 -3.0001 -2.8556 -2.7147 -2.5773 -2.4435 -2.3132 -2.1865 -2.0634 -1.9438 -1.8279 -1.7154 -1.6066 -1.5013 -1.3995 -1.3013 -1.2067 -1.1157 -1.0282 -0.9443 -0.86395 -0.78716 -0.71394 -0.64428 -0.57819 -0.51566 -0.4567 -0.4013 -0.34947 -0.3012 -0.25649 -0.21535 -0.17778 -0.14377 -0.11332 -0.086438 -0.06312 -0.043367 -0.027178 -0.014554 -0.0054949 0 0.0019304 0.00029622 -0.0049025 -0.013666 -0.025993 -0.041886 -0.061343 -0.084364 -0.11095 -0.1411 -0.17482 -0.21209 -0.25294 -0.29735 -0.34532 -0.39686 -0.45196 -0.51063 -0.57286 -0.63865 -0.70801 -0.78094 -0.85743 -0.93748 -1.0211 -1.1083 -1.199 -1.2933 -1.3912 -1.4927 -1.5977 -1.7062 -1.8184 -1.9341 -2.0533 -2.1762 -2.3026 -2.4325 -2.566 -2.7031 -2.8438 -2.988 -3.1358 -3.2871 -3.442 -3.6005 -3.7625 -3.9281 -4.0973 -4.27 -4.4463 -4.6262 -4.8096 -4.9966 -5.1872 -5.3813 -5.579 -5.7802 -5.985 -6.1934 -6.4053 -6.6209 -6.8399 -7.0626 -7.2888 -7.5185 -7.7519 -7.9887 -8.2292 -8.4732 -8.7208 -8.972 -9.2267 -9.485 -9.7468 -10.0122 -10.2812 -10.5537 -10.8298 -11.1095 -11.3927 -11.6795 -11.9699 -12.2638 -12.5613 -12.8624 -13.167 -13.4752 -13.7869 -14.1022 -14.4211 -14.7436 -15.0696 -15.3991 -15.7323 -16.069 -16.4092 -16.7531 -17.1005 -17.4514 1.0 59758.6889 IW3 VV 36.06 39.6 0.050 8.687e+09 1.165e+10 1.005e+10 1.365e+10 1.151e+10 1.583e+10 1.306e+10 1.819e+10 1.469e+10 2.073e+10 1.639e+10 2.343e+10 1.815e+10 2.627e+10 1.995e+10 2.925e+10 2.176e+10 3.232e+10 2.358e+10 3.546e+10 2.539e+10 3.866e+10 2.717e+10 4.186e+10 2.889e+10 4.505e+10 3.055e+10 4.817e+10 3.212e+10 5.121e+10 3.359e+10 5.411e+10 3.495e+10 5.685e+10 3.618e+10 5.938e+10 3.727e+10 6.169e+10 3.822e+10 6.374e+10 3.900e+10 6.550e+10 3.963e+10 6.696e+10 4.008e+10 6.809e+10 4.036e+10 6.889e+10 4.046e+10 6.933e+10 4.038e+10 6.943e+10 4.011e+10 6.916e+10 3.967e+10 6.855e+10 3.904e+10 6.759e+10 3.824e+10 6.630e+10 3.727e+10 6.470e+10 3.613e+10 6.279e+10 3.483e+10 6.062e+10 3.338e+10 5.819e+10 3.180e+10 5.553e+10 3.009e+10 5.269e+10 2.828e+10 4.968e+10 2.637e+10 4.653e+10 2.440e+10 4.329e+10 2.237e+10 3.999e+10 2.031e+10 3.665e+10 1.825e+10 3.331e+10 1.621e+10 3.000e+10 1.420e+10 2.676e+10 1.226e+10 2.362e+10 1.041e+10 2.060e+10 8.656e+09 1.774e+10 7.033e+09 1.504e+10 5.553e+09 1.254e+10 4.229e+09 1.026e+10 3.071e+09 8.204e+09 2.088e+09 6.387e+09 1.282e+09 4.816e+09 6.499e+08 3.493e+09 1.849e+08 2.421e+09 -1.311e+08 1.591e+09 -3.306e+08 9.938e+08 -4.709e+08 6.007e+08 -6.341e+08 3.484e+08 -8.915e+08 1.379e+08 -1.263e+09 -1.165e+08 -1.734e+09 -4.530e+08 -2.280e+09 -8.746e+08 -2.875e+09 -1.366e+09 -3.498e+09 -1.909e+09 -4.130e+09 -2.479e+09 -4.749e+09 -3.052e+09 -5.339e+09 -3.608e+09 -5.885e+09 -4.125e+09 -6.373e+09 -4.584e+09 -6.791e+09 -4.971e+09 -7.133e+09 -5.273e+09 -7.389e+09 -5.481e+09 -7.556e+09 -5.589e+09 -7.630e+09 -5.596e+09 -7.613e+09 -5.502e+09 -7.504e+09 -5.311e+09 -7.308e+09 -5.031e+09 -7.031e+09 -4.672e+09 -6.678e+09 -4.246e+09 -6.260e+09 -3.766e+09 -5.787e+09 -3.250e+09 -5.271e+09 -2.713e+09 -4.725e+09 -2.173e+09 -4.164e+09 -1.647e+09 -3.605e+09 -1.151e+09 -3.064e+09 -6.975e+08 -2.558e+09 -2.980e+08 -2.105e+09 4.521e+07 -1.719e+09 3.398e+08 -1.412e+09 6.072e+08 -1.178e+09 8.850e+08 -9.971e+08 1.220e+09 -8.355e+08 1.655e+09 -6.546e+08 2.217e+09 -4.228e+08 2.921e+09 -1.188e+08 3.768e+09 2.687e+08 4.751e+09 7.442e+08 5.861e+09 1.305e+09 7.082e+09 1.945e+09 8.395e+09 2.654e+09 9.782e+09 3.419e+09 1.122e+10 4.224e+09 1.268e+10 5.053e+09 1.414e+10 5.888e+09 1.558e+10 6.711e+09 1.696e+10 7.506e+09 1.826e+10 8.253e+09 1.946e+10 8.939e+09 2.053e+10 9.549e+09 2.145e+10 1.007e+10 2.221e+10 1.050e+10 2.279e+10 1.082e+10 2.317e+10 1.104e+10 2.337e+10 1.114e+10 2.336e+10 1.114e+10 2.315e+10 1.103e+10 2.275e+10 1.082e+10 2.217e+10 1.052e+10 2.142e+10 1.013e+10 2.051e+10 9.664e+09 1.947e+10 9.131e+09 1.830e+10 8.542e+09 1.705e+10 7.910e+09 1.572e+10 7.245e+09 1.434e+10 6.557e+09 1.294e+10 5.861e+09 1.154e+10 5.164e+09 1.015e+10 4.479e+09 8.804e+09 3.815e+09 7.516e+09 3.182e+09 6.301e+09 2.588e+09 5.175e+09 2.042e+09 4.149e+09 1.550e+09 3.232e+09 1.119e+09 2.430e+09 7.528e+08 1.748e+09 4.563e+08 1.187e+09 2.311e+08 7.445e+08 7.704e+07 4.185e+08 -1.228e+07 2.030e+08 -6.210e+07 8.488e+07 -1.259e+08 2.128e+07 -2.491e+08 -5.332e+07 -4.366e+08 -1.743e+08 -6.784e+08 -3.408e+08 -9.646e+08 -5.414e+08 -1.285e+09 -7.624e+08 -1.628e+09 -9.894e+08 -1.984e+09 -1.209e+09 -2.341e+09 -1.408e+09 -2.687e+09 -1.576e+09 -3.014e+09 -1.702e+09 -3.311e+09 -1.780e+09 -3.571e+09 -1.805e+09 -3.788e+09 -1.773e+09 -3.958e+09 -1.685e+09 -4.080e+09 -1.542e+09 -4.155e+09 -1.349e+09 -4.186e+09 -1.111e+09 -4.178e+09 -8.350e+08 -4.141e+09 -5.262e+08 -4.083e+09 -1.899e+08 -4.016e+09 1.711e+08 -3.951e+09 5.582e+08 -3.900e+09 9.768e+08 -3.870e+09 1.436e+09 -3.867e+09 1.951e+09 -3.893e+09 2.538e+09 -3.944e+09 3.214e+09 -4.016e+09 3.994e+09 -4.101e+09 4.891e+09 -4.190e+09 5.913e+09 -4.274e+09 7.064e+09 -4.346e+09 8.342e+09 -4.398e+09 9.741e+09 -4.426e+09 1.125e+10 -4.425e+09 1.286e+10 -4.391e+09 1.455e+10 -4.322e+09 1.631e+10 -4.217e+09 1.810e+10 -4.072e+09 1.991e+10 -3.890e+09 2.172e+10 -3.671e+09 2.350e+10 -3.417e+09 2.523e+10 -3.130e+09 2.688e+10 -2.812e+09 2.843e+10 -2.467e+09 2.986e+10 -2.099e+09 3.116e+10 -1.712e+09 3.230e+10 -1.312e+09 3.326e+10 -9.046e+08 3.404e+10 -4.966e+08 3.461e+10 -9.496e+07 3.498e+10 2.938e+08 3.513e+10 6.625e+08 3.505e+10 1.004e+09 3.476e+10 1.312e+09 3.424e+10 1.580e+09 3.351e+10 1.804e+09 3.256e+10 1.980e+09 3.142e+10 2.104e+09 3.009e+10 2.176e+09 2.860e+10 2.196e+09 2.696e+10 2.166e+09 2.519e+10 2.089e+09 2.332e+10 1.970e+09 2.138e+10 1.816e+09 1.939e+10 1.633e+09 1.739e+10 1.429e+09 1.540e+10 1.214e+09 1.345e+10 9.948e+08 1.158e+10 7.806e+08 9.790e+09 5.787e+08 8.122e+09 3.957e+08 6.591e+09 2.366e+08 5.211e+09 1.054e+08 3.995e+09 4.178e+06 2.949e+09 -6.667e+07 2.076e+09 -1.083e+08 1.372e+09 -1.234e+08 8.323e+08 -1.167e+08 4.447e+08 -9.533e+07 1.947e+08 -7.359e+07 5.878e+07 -7.432e+07 -1.493e+07 -1.039e+08 -9.735e+07 -1.460e+08 -2.242e+08 -1.862e+08 -3.897e+08 -2.175e+08 -5.766e+08 -2.358e+08 -7.676e+08 -2.390e+08 -9.474e+08 -2.264e+08 -1.103e+09 -1.981e+08 -1.224e+09 -1.555e+08 -1.304e+09 -1.009e+08 -1.338e+09 -3.725e+07 -1.327e+09 3.199e+07 -1.273e+09 1.030e+08 -1.180e+09 1.721e+08 -1.057e+09 2.363e+08 -9.136e+08 2.936e+08 -7.598e+08 3.448e+08 -6.072e+08 3.947e+08 -4.649e+08 4.539e+08 -3.370e+08 5.387e+08 -2.181e+08 6.670e+08 -9.101e+07 8.537e+08 6.875e+07 1.109e+09 2.867e+08 1.437e+09 5.849e+08 1.843e+09 9.798e+08 2.328e+09 1.483e+09 2.895e+09 2.104e+09 3.544e+09 2.846e+09 4.273e+09 3.709e+09 5.081e+09 4.694e+09 5.963e+09 5.792e+09 6.912e+09 6.995e+09 7.919e+09 8.290e+09 8.973e+09 9.660e+09 1.006e+10 1.108e+10 1.116e+10 1.254e+10 1.226e+10 1.401e+10 1.334e+10 1.546e+10 1.437e+10 1.686e+10 1.533e+10 1.818e+10 1.619e+10 1.938e+10 1.694e+10 2.045e+10 1.754e+10 2.134e+10 1.799e+10 2.204e+10 1.827e+10 2.253e+10 1.835e+10 2.278e+10 1.825e+10 2.279e+10 1.795e+10 2.255e+10 1.746e+10 2.207e+10 1.679e+10 2.134e+10 1.595e+10 2.040e+10 1.496e+10 1.926e+10 1.386e+10 1.795e+10 1.265e+10 1.649e+10 1.139e+10 1.493e+10 1.009e+10 1.331e+10 8.782e+09 1.166e+10 7.505e+09 1.003e+10 6.281e+09 8.445e+09 5.135e+09 6.943e+09 4.089e+09 5.556e+09 3.156e+09 4.307e+09 2.347e+09 3.212e+09 1.668e+09 2.285e+09 1.118e+09 1.529e+09 6.925e+08 9.395e+08 3.831e+08 5.101e+08 1.763e+08 2.248e+08 5.641e+07 6.379e+07 6.293e+06 3.772e+06 -5.473e+06 -1.960e+07 -3.789e+07 -8.346e+07 -8.408e+07 -1.693e+08 -1.288e+08 -2.531e+08 -1.595e+08 -3.151e+08 -1.705e+08 -3.388e+08 -1.493e+08 -3.240e+08 -1.093e+08 -2.631e+08 -5.713e+07 -1.730e+08 -1.024e+07 -7.816e+07 1.414e+07 -1.499e+07 6.896e+07 3.123e+07 2.481e+08 2.083e+08 6.091e+08 6.209e+08 1.222e+09 1.369e+09 2.171e+09 2.571e+09 3.555e+09 4.361e+09 5.479e+09 6.884e+09 8.065e+09 1.030e+10 1.145e+10 1.479e+10 1.576e+10 2.053e+10 2.115e+10 2.771e+10 2.777e+10 3.652e+10 3.575e+10 4.714e+10 4.526e+10 5.974e+10 5.643e+10 7.451e+10 6.935e+10 9.154e+10 8.415e+10 1.110e+11 1.009e+11 1.329e+11 1.196e+11 1.573e+11 1.404e+11 1.841e+11 1.631e+11 2.134e+11 1.876e+11 2.449e+11 2.139e+11 2.785e+11 2.418e+11 3.139e+11 2.710e+11 3.507e+11 3.013e+11 3.887e+11 3.323e+11 4.272e+11 3.637e+11 4.659e+11 3.951e+11 5.042e+11 4.261e+11 5.414e+11 4.561e+11 5.771e+11 4.848e+11 6.104e+11 5.117e+11 6.410e+11 5.363e+11 6.682e+11 5.583e+11 6.913e+11 5.774e+11 7.101e+11 5.931e+11 7.239e+11 6.051e+11 7.324e+11 6.131e+11 7.354e+11 6.171e+11 7.326e+11 6.168e+11 7.241e+11 6.123e+11 7.097e+11 6.035e+11 6.897e+11 5.906e+11 6.643e+11 5.736e+11 6.340e+11 5.529e+11 5.991e+11 5.287e+11 5.602e+11 5.014e+11 5.181e+11 4.713e+11 4.733e+11 4.389e+11 4.268e+11 4.047e+11 3.792e+11 3.693e+11 3.315e+11 3.330e+11 2.845e+11 2.966e+11 2.390e+11 2.606e+11 1.959e+11 2.255e+11 1.557e+11 1.920e+11 1.192e+11 1.605e+11 8.687e+10 1.315e+11 5.909e+10 1.056e+11 3.602e+10 8.318e+10 1.762e+10 6.449e+10 3.482e+09 4.972e+10 -7.190e+09 3.872e+10 -1.563e+10 3.083e+10 -2.335e+10 2.495e+10 -3.171e+10 1.981e+10 -4.137e+10 1.444e+10 -5.221e+10 8.386e+09 -6.352e+10 1.632e+09 -7.425e+10 -5.511e+09 -8.327e+10 -1.252e+10 -8.946e+10 -1.878e+10 -9.185e+10 -2.366e+10 -8.975e+10 -2.660e+10 -8.280e+10 -2.718e+10 -7.119e+10 -2.521e+10 -5.572e+10 -2.088e+10 -3.800e+10 -1.480e+10 -2.060e+10 -8.378e+09 -7.003e+09 -4.590e+09 1.721e+09 -3.357e+09 1.614e+10 1.544e+09 5.264e+10 1.703e+10 1.238e+11 4.893e+10 2.421e+11 1.040e+11 4.224e+11 1.902e+11 6.819e+11 3.169e+11 1.040e+12 4.950e+11 1.521e+12 6.950e+11 2.027e+12 9.969e+11 2.787e+12 1.388e+12 3.745e+12 1.885e+12 4.934e+12 2.505e+12 6.389e+12 3.269e+12 8.151e+12 4.199e+12 1.026e+13 5.318e+12 1.277e+13 6.651e+12 1.572e+13 8.226e+12 1.916e+13 1.007e+13 2.316e+13 1.221e+13 2.775e+13 1.469e+13 3.302e+13 1.753e+13 3.900e+13 2.077e+13 4.578e+13 2.444e+13 5.340e+13 2.857e+13 6.194e+13 3.323e+13 7.147e+13 3.842e+13 8.205e+13 4.420e+13 9.373e+13 5.060e+13 1.066e+14 5.766e+13 1.207e+14 6.541e+13 1.361e+14 7.389e+13 1.529e+14 8.314e+13 1.711e+14 9.320e+13 1.908e+14 1.041e+14 2.119e+14 1.159e+14 2.346e+14 1.286e+14 2.589e+14 1.422e+14 2.848e+14 1.567e+14 3.123e+14 1.722e+14 3.416e+14 1.886e+14 3.724e+14 2.059e+14 4.048e+14 2.242e+14 4.388e+14 2.434e+14 4.746e+14 2.636e+14 5.117e+14 2.845e+14 5.505e+14 3.063e+14 5.905e+14 3.290e+14 6.320e+14 3.524e+14 6.747e+14 3.765e+14 7.186e+14 4.012e+14 7.635e+14 4.264e+14 8.093e+14 4.522e+14 8.559e+14 4.782e+14 9.031e+14 5.047e+14 9.508e+14 5.313e+14 9.991e+14 5.581e+14 1.047e+15 5.848e+14 1.095e+15 6.116e+14 1.143e+15 6.381e+14 1.191e+15 6.643e+14 1.238e+15 6.901e+14 1.283e+15 7.155e+14 1.328e+15 7.403e+14 1.373e+15 7.643e+14 1.415e+15 7.876e+14 1.457e+15 8.101e+14 1.496e+15 8.316e+14 1.533e+15 8.519e+14 1.569e+15 8.712e+14 1.603e+15 8.893e+14 1.634e+15 9.061e+14 1.662e+15 9.215e+14 1.688e+15 9.357e+14 1.711e+15 9.484e+14 1.733e+15 9.597e+14 1.751e+15 9.696e+14 1.765e+15 9.777e+14 1.778e+15 9.842e+14 1.786e+15 9.891e+14 1.793e+15 9.922e+14 1.795e+15 9.935e+14 1.795e+15 9.931e+14 1.791e+15 9.910e+14 1.784e+15 9.871e+14 1.774e+15 9.814e+14 1.761e+15 9.741e+14 1.745e+15 9.649e+14 1.726e+15 9.541e+14 1.703e+15 9.417e+14 1.679e+15 9.277e+14 1.652e+15 9.122e+14 1.622e+15 8.951e+14 1.589e+15 8.767e+14 1.554e+15 8.570e+14 1.518e+15 8.360e+14 1.479e+15 8.140e+14 1.438e+15 7.908e+14 1.396e+15 7.668e+14 1.353e+15 7.419e+14 1.307e+15 7.164e+14 1.261e+15 6.903e+14 1.215e+15 6.637e+14 1.167e+15 6.368e+14 1.119e+15 6.095e+14 1.071e+15 5.823e+14 1.023e+15 5.550e+14 9.744e+14 5.278e+14 9.264e+14 5.008e+14 8.789e+14 4.741e+14 8.318e+14 4.478e+14 7.856e+14 4.220e+14 7.402e+14 3.968e+14 6.959e+14 3.721e+14 6.525e+14 3.481e+14 6.106e+14 3.249e+14 5.698e+14 3.025e+14 5.304e+14 2.809e+14 4.926e+14 2.601e+14 4.562e+14 2.402e+14 4.215e+14 2.213e+14 3.883e+14 2.033e+14 3.567e+14 1.864e+14 3.268e+14 1.702e+14 2.985e+14 1.550e+14 2.720e+14 1.407e+14 2.469e+14 1.274e+14 2.235e+14 1.149e+14 2.017e+14 1.033e+14 1.814e+14 9.253e+13 1.625e+14 8.258e+13 1.451e+14 7.340e+13 1.290e+14 6.498e+13 1.143e+14 5.728e+13 1.009e+14 5.026e+13 8.869e+13 4.390e+13 7.760e+13 3.815e+13 6.757e+13 3.298e+13 5.855e+13 2.836e+13 5.048e+13 2.423e+13 4.327e+13 2.058e+13 3.689e+13 1.736e+13 3.126e+13 1.454e+13 2.630e+13 1.209e+13 2.199e+13 9.962e+12 1.824e+13 8.138e+12 1.501e+13 6.583e+12 1.225e+13 5.273e+12 9.898e+12 4.176e+12 7.921e+12 3.265e+12 6.266e+12 2.517e+12 4.896e+12 1.911e+12 3.775e+12 1.424e+12 2.864e+12 1.041e+12 2.136e+12 7.427e+11 1.562e+12 5.155e+11 1.116e+12 3.462e+11 7.765e+11 2.096e+11 4.910e+11 1.282e+11 3.173e+11 7.318e+10 1.951e+11 3.791e+10 1.124e+11 1.685e+10 5.913e+10 5.620e+09 2.728e+10 7.009e+08 1.020e+10 -6.778e+08 2.674e+09 -1.145e+09 1.463e+08 -2.025e+09 -1.507e+09 -2.882e+09 -3.363e+09 -3.168e+09 -4.797e+09 -2.773e+09 -5.286e+09 -1.863e+09 -4.748e+09 -7.681e+08 -3.467e+09 1.491e+08 -1.989e+09 9.160e+08 -8.736e+08 2.451e+09 2.252e+08 5.837e+09 2.634e+09 1.169e+10 7.608e+09 2.038e+10 1.593e+10 3.220e+10 2.817e+10 4.739e+10 4.472e+10 6.606e+10 6.583e+10 8.821e+10 9.154e+10 1.138e+11 1.218e+11 1.426e+11 1.564e+11 1.743e+11 1.949e+11 2.087e+11 2.368e+11 2.452e+11 2.815e+11 2.834e+11 3.284e+11 3.227e+11 3.767e+11 3.627e+11 4.257e+11 4.026e+11 4.744e+11 4.419e+11 5.222e+11 4.800e+11 5.684e+11 5.164e+11 6.119e+11 5.504e+11 6.524e+11 5.817e+11 6.891e+11 6.096e+11 7.214e+11 6.339e+11 7.491e+11 6.541e+11 7.717e+11 6.700e+11 7.889e+11 6.812e+11 8.004e+11 6.879e+11 8.063e+11 6.899e+11 8.067e+11 6.873e+11 8.016e+11 6.802e+11 7.913e+11 6.689e+11 7.759e+11 6.536e+11 7.559e+11 6.345e+11 7.316e+11 6.121e+11 7.035e+11 5.868e+11 6.720e+11 5.590e+11 6.377e+11 5.291e+11 6.011e+11 4.976e+11 5.628e+11 4.650e+11 5.232e+11 0.005 -51.425 -50.342 -49.260 -48.177 -47.094 -46.113 -45.231 -44.438 -43.728 -43.095 -42.534 -42.041 -41.613 -41.246 -40.940 -40.693 -40.502 -40.369 -40.291 -40.270 -40.305 -40.397 -40.547 -40.757 -41.029 -41.364 -41.767 -42.241 -42.790 -43.420 -44.138 -44.952 -45.873 -46.914 -48.093 -49.429 -50.954 -52.707 -54.745 -57.150 -60.049 -63.628 -68.012 -72.093 -73.184 -72.069 -71.380 -71.573 -71.221 -68.704 -64.880 -61.206 -58.089 -55.472 -53.248 -51.332 -49.664 -48.202 -46.912 -45.771 -44.761 -43.868 -43.080 -42.389 -41.787 -41.269 -40.832 -40.470 -40.183 -39.967 -39.823 -39.748 -39.745 -39.813 -39.954 -40.170 -40.462 -40.835 -41.293 -41.840 -42.485 -43.233 -44.094 -45.078 -46.196 -47.460 -48.877 -50.448 -52.149 -53.909 -55.576 -56.926 -57.759 -58.043 -57.878 -57.332 -56.363 -54.931 -53.111 -51.085 -49.023 -47.037 -45.178 -43.462 -41.887 -40.447 -39.132 -37.931 -36.836 -35.838 -34.930 -34.106 -33.362 -32.693 -32.095 -31.566 -31.104 -30.708 -30.375 -30.106 -29.900 -29.758 -29.681 -29.670 -29.727 -29.856 -30.059 -30.342 -30.709 -31.169 -31.729 -32.402 -33.201 -34.145 -35.259 -36.573 -38.134 -40.007 -42.278 -45.061 -48.427 -51.947 -53.802 -53.198 -52.490 -53.088 -55.626 -57.889 -51.807 -45.308 -40.624 -36.957 -33.918 -31.308 -29.014 -26.962 -25.105 -23.409 -21.847 -20.402 -19.057 -17.801 -16.625 -15.520 -14.479 -13.498 -12.572 -11.696 -10.867 -10.082 -9.338 -8.633 -7.965 -7.332 -6.732 -6.164 -5.627 -5.119 -4.640 -4.188 -3.762 -3.362 -2.987 -2.636 -2.310 -2.006 -1.725 -1.467 -1.230 -1.015 -0.821 -0.649 -0.497 -0.365 -0.254 -0.163 -0.093 -0.042 -0.011 0.000 -0.009 -0.037 -0.085 -0.153 -0.241 -0.350 -0.478 -0.627 -0.797 -0.988 -1.200 -1.434 -1.689 -1.967 -2.267 -2.591 -2.938 -3.309 -3.705 -4.127 -4.575 -5.051 -5.554 -6.087 -6.650 -7.244 -7.872 -8.534 -9.233 -9.970 -10.748 -11.570 -12.437 -13.355 -14.325 -15.355 -16.447 -17.609 -18.849 -20.176 -21.600 -23.136 -24.803 -26.623 -28.627 -30.860 -33.383 -36.290 -39.725 -43.898 -48.879 -52.692 -52.516 -51.198 -50.759 -51.356 -52.439 -52.255 -49.721 -46.442 -43.514 -41.095 -39.104 -37.451 -36.067 -34.903 -33.920 -33.092 -32.398 -31.823 -31.353 -30.980 -30.697 -30.496 -30.374 -30.326 -30.350 -30.444 -30.607 -30.837 -31.134 -31.500 -31.934 -32.438 -33.015 -33.668 -34.399 -35.213 -36.116 -37.113 -38.213 -39.422 -40.751 -42.210 -43.809 -45.554 -47.446 -49.470 -51.577 -53.664 -55.561 -57.039 -57.866 -57.865 -57.004 -55.464 -53.557 -51.557 -49.627 -47.838 -46.210 -44.744 -43.428 -42.251 -41.199 -40.261 -39.427 -38.688 -38.037 -37.468 -36.976 -36.554 -36.201 -35.913 -35.687 -35.520 -35.412 -35.361 -35.365 -35.426 -35.541 -35.711 -35.937 -36.218 -36.557 -36.954 -37.411 -37.931 -38.516 -39.171 -39.898 -40.705 -41.595 -42.579 -43.664 -44.863 -46.189 -47.662 -49.306 -51.151 -53.241 -55.637 -58.426 -61.742 -65.801 -70.976 -77.883 -85.944 -87.598 -80.655 -73.604 -68.312 -64.257 -61.031 -58.386 -56.172 -54.288 -52.667 -51.262 -50.039 -48.970 -48.038 -47.224 -46.519 -45.910 -45.392 -44.957 -44.599 -44.316 -44.103 -43.958 -43.878 -43.862 -43.910 -44.020 -44.193 -44.429 -44.729 -45.094 -45.527 -46.029 -46.605 -47.259 -47.995 -48.821 -49.746 -50.778 -51.923 -53.068 -54.213 -55.359 0.03 -18.9834 -18.6097 -18.2396 -17.8733 -17.5107 -17.1518 -16.7966 -16.4452 -16.0974 -15.7534 -15.4131 -15.0765 -14.7436 -14.4145 -14.089 -13.7673 -13.4492 -13.1349 -12.8244 -12.5175 -12.2143 -11.9149 -11.6192 -11.3271 -11.0388 -10.7543 -10.4734 -10.1963 -9.9228 -9.6531 -9.3871 -9.1248 -8.8662 -8.6114 -8.3602 -8.1128 -7.8691 -7.6291 -7.3928 -7.1603 -6.9314 -6.7063 -6.4849 -6.2672 -6.0532 -5.8429 -5.6364 -5.4335 -5.2344 -5.039 -4.8473 -4.6593 -4.4751 -4.2945 -4.1177 -3.9446 -3.7752 -3.6095 -3.4475 -3.2893 -3.1347 -2.9839 -2.8368 -2.6934 -2.5538 -2.4178 -2.2855 -2.157 -2.0322 -1.9111 -1.7937 -1.6801 -1.5701 -1.4639 -1.3614 -1.2626 -1.1675 -1.0761 -0.98844 -0.90449 -0.82427 -0.74776 -0.67496 -0.60588 -0.54052 -0.47887 -0.42094 -0.36672 -0.31622 -0.26943 -0.22636 -0.187 -0.15136 -0.11944 -0.091228 -0.066735 -0.045957 -0.028894 -0.015547 -0.0059159 0 0.0022004 0.00068526 -0.0045454 -0.013492 -0.026153 -0.04253 -0.062623 -0.086431 -0.11396 -0.14519 -0.18015 -0.21882 -0.26121 -0.30731 -0.35712 -0.41066 -0.4679 -0.52887 -0.59355 -0.66194 -0.73405 -0.80988 -0.88942 -0.97267 -1.0596 -1.1503 -1.2447 -1.3429 -1.4447 -1.5502 -1.6595 -1.7725 -1.8892 -2.0096 -2.1337 -2.2616 -2.3931 -2.5284 -2.6674 -2.8101 -2.9565 -3.1066 -3.2605 -3.4181 -3.5793 -3.7443 -3.9131 -4.0855 -4.2616 -4.4415 -4.6251 -4.8124 -5.0034 -5.1981 -5.3965 -5.5987 -5.8046 -6.0141 -6.2274 -6.4444 -6.6652 -6.8896 -7.1178 -7.3497 -7.5853 -7.8246 -8.0676 -8.3143 -8.5648 -8.819 -9.0768 -9.3384 -9.6038 -9.8728 -10.1455 -10.422 -10.7022 -10.9861 -11.2737 -11.565 -11.8601 -12.1588 -12.4613 -12.7675 -13.0774 -13.391 -13.7083 -14.0294 -14.3541 -14.6826 -15.0148 -15.3507 -15.6904 -16.0337 -16.3808 -16.7315 -17.086 -17.4442 -17.8062 -18.1718 1.0 59758.6889 IW3 VH 36.06 39.6 0.050 -2.631e+09 1.734e+10 -3.006e+09 2.002e+10 -3.410e+09 2.292e+10 -3.844e+09 2.603e+10 -4.308e+09 2.934e+10 -4.799e+09 3.282e+10 -5.316e+09 3.645e+10 -5.857e+09 4.021e+10 -6.417e+09 4.407e+10 -6.994e+09 4.799e+10 -7.582e+09 5.195e+10 -8.176e+09 5.589e+10 -8.770e+09 5.979e+10 -9.357e+09 6.360e+10 -9.929e+09 6.728e+10 -1.048e+10 7.078e+10 -1.100e+10 7.407e+10 -1.148e+10 7.710e+10 -1.191e+10 7.985e+10 -1.230e+10 8.228e+10 -1.262e+10 8.436e+10 -1.288e+10 8.606e+10 -1.307e+10 8.737e+10 -1.318e+10 8.826e+10 -1.323e+10 8.871e+10 -1.320e+10 8.873e+10 -1.309e+10 8.831e+10 -1.292e+10 8.745e+10 -1.268e+10 8.617e+10 -1.238e+10 8.446e+10 -1.203e+10 8.235e+10 -1.162e+10 7.987e+10 -1.118e+10 7.703e+10 -1.070e+10 7.386e+10 -1.019e+10 7.041e+10 -9.669e+09 6.671e+10 -9.135e+09 6.279e+10 -8.596e+09 5.869e+10 -8.059e+09 5.447e+10 -7.529e+09 5.017e+10 -7.010e+09 4.582e+10 -6.505e+09 4.147e+10 -6.017e+09 3.718e+10 -5.547e+09 3.298e+10 -5.096e+09 2.891e+10 -4.662e+09 2.501e+10 -4.246e+09 2.133e+10 -3.846e+09 1.788e+10 -3.461e+09 1.470e+10 -3.089e+09 1.182e+10 -2.730e+09 9.248e+09 -2.383e+09 7.002e+09 -2.048e+09 5.089e+09 -1.729e+09 3.509e+09 -1.430e+09 2.258e+09 -1.162e+09 1.319e+09 -9.451e+08 6.609e+08 -8.107e+08 2.217e+08 -7.891e+08 -1.084e+08 -8.782e+08 -4.635e+08 -1.038e+09 -9.324e+08 -1.231e+09 -1.539e+09 -1.431e+09 -2.268e+09 -1.624e+09 -3.091e+09 -1.802e+09 -3.974e+09 -1.962e+09 -4.882e+09 -2.098e+09 -5.780e+09 -2.209e+09 -6.635e+09 -2.294e+09 -7.418e+09 -2.353e+09 -8.100e+09 -2.385e+09 -8.661e+09 -2.391e+09 -9.084e+09 -2.373e+09 -9.354e+09 -2.332e+09 -9.466e+09 -2.268e+09 -9.417e+09 -2.185e+09 -9.210e+09 -2.084e+09 -8.851e+09 -1.966e+09 -8.354e+09 -1.835e+09 -7.734e+09 -1.691e+09 -7.013e+09 -1.538e+09 -6.212e+09 -1.377e+09 -5.360e+09 -1.210e+09 -4.484e+09 -1.041e+09 -3.612e+09 -8.718e+08 -2.775e+09 -7.052e+08 -2.004e+09 -5.445e+08 -1.326e+09 -3.942e+08 -7.695e+08 -2.601e+08 -3.584e+08 -1.565e+08 -1.059e+08 -1.193e+08 3.622e+07 -1.479e+08 2.357e+08 -1.935e+08 6.178e+08 -2.239e+08 1.221e+09 -2.283e+08 2.051e+09 -2.025e+08 3.107e+09 -1.442e+08 4.382e+09 -5.236e+07 5.863e+09 7.320e+07 7.535e+09 2.316e+08 9.376e+09 4.207e+08 1.136e+10 6.377e+08 1.346e+10 8.790e+08 1.565e+10 1.140e+09 1.788e+10 1.417e+09 2.013e+10 1.703e+09 2.235e+10 1.992e+09 2.450e+10 2.278e+09 2.655e+10 2.556e+09 2.847e+10 2.817e+09 3.021e+10 3.057e+09 3.175e+10 3.271e+09 3.306e+10 3.453e+09 3.412e+10 3.600e+09 3.490e+10 3.708e+09 3.539e+10 3.776e+09 3.559e+10 3.802e+09 3.548e+10 3.786e+09 3.509e+10 3.730e+09 3.440e+10 3.635e+09 3.344e+10 3.502e+09 3.223e+10 3.337e+09 3.079e+10 3.142e+09 2.913e+10 2.922e+09 2.731e+10 2.682e+09 2.534e+10 2.426e+09 2.327e+10 2.159e+09 2.113e+10 1.888e+09 1.895e+10 1.615e+09 1.677e+10 1.348e+09 1.462e+10 1.090e+09 1.254e+10 8.460e+08 1.056e+10 6.204e+08 8.698e+09 4.173e+08 6.987e+09 2.402e+08 5.443e+09 9.249e+07 4.083e+09 -2.313e+07 2.917e+09 -1.047e+08 1.954e+09 -1.512e+08 1.195e+09 -1.641e+08 6.395e+08 -1.520e+08 2.780e+08 -1.452e+08 7.756e+07 -1.927e+08 -5.749e+07 -3.151e+08 -2.525e+08 -4.934e+08 -5.640e+08 -7.124e+08 -9.874e+08 -9.645e+08 -1.503e+09 -1.244e+09 -2.088e+09 -1.543e+09 -2.716e+09 -1.857e+09 -3.362e+09 -2.180e+09 -4.001e+09 -2.502e+09 -4.609e+09 -2.817e+09 -5.165e+09 -3.119e+09 -5.649e+09 -3.398e+09 -6.044e+09 -3.649e+09 -6.336e+09 -3.864e+09 -6.515e+09 -4.039e+09 -6.576e+09 -4.169e+09 -6.517e+09 -4.249e+09 -6.339e+09 -4.279e+09 -6.051e+09 -4.257e+09 -5.663e+09 -4.185e+09 -5.188e+09 -4.065e+09 -4.644e+09 -3.902e+09 -4.051e+09 -3.703e+09 -3.429e+09 -3.476e+09 -2.801e+09 -3.232e+09 -2.188e+09 -2.985e+09 -1.606e+09 -2.751e+09 -1.069e+09 -2.548e+09 -5.781e+08 -2.394e+09 -1.244e+08 -2.304e+09 3.168e+08 -2.285e+09 7.837e+08 -2.333e+09 1.320e+09 -2.435e+09 1.966e+09 -2.573e+09 2.752e+09 -2.727e+09 3.696e+09 -2.881e+09 4.804e+09 -3.023e+09 6.074e+09 -3.143e+09 7.496e+09 -3.234e+09 9.052e+09 -3.292e+09 1.073e+10 -3.314e+09 1.249e+10 -3.300e+09 1.432e+10 -3.250e+09 1.619e+10 -3.165e+09 1.806e+10 -3.047e+09 1.990e+10 -2.899e+09 2.169e+10 -2.725e+09 2.340e+10 -2.529e+09 2.498e+10 -2.315e+09 2.643e+10 -2.086e+09 2.771e+10 -1.849e+09 2.879e+10 -1.608e+09 2.967e+10 -1.367e+09 3.032e+10 -1.131e+09 3.073e+10 -9.051e+08 3.090e+10 -6.922e+08 3.082e+10 -4.965e+08 3.049e+10 -3.209e+08 2.992e+10 -1.680e+08 2.912e+10 -3.974e+07 2.810e+10 6.291e+07 2.688e+10 1.395e+08 2.548e+10 1.905e+08 2.392e+10 2.170e+08 2.223e+10 2.210e+08 2.043e+10 2.050e+08 1.857e+10 1.723e+08 1.667e+10 1.265e+08 1.476e+10 7.157e+07 1.288e+10 1.172e+07 1.105e+10 -4.886e+07 9.303e+09 -1.060e+08 7.664e+09 -1.562e+08 6.155e+09 -1.960e+08 4.795e+09 -2.228e+08 3.599e+09 -2.349e+08 2.577e+09 -2.313e+08 1.733e+09 -2.123e+08 1.070e+09 -1.798e+08 5.817e+08 -1.389e+08 2.586e+08 -1.048e+08 7.825e+07 -1.060e+08 -2.389e+07 -1.515e+08 -1.453e+08 -2.206e+08 -3.397e+08 -2.952e+08 -6.040e+08 -3.668e+08 -9.173e+08 -4.301e+08 -1.256e+09 -4.811e+08 -1.599e+09 -5.166e+08 -1.924e+09 -5.345e+08 -2.212e+09 -5.333e+08 -2.447e+09 -5.126e+08 -2.618e+09 -4.731e+08 -2.715e+09 -4.163e+08 -2.734e+09 -3.447e+08 -2.674e+09 -2.620e+08 -2.540e+09 -1.721e+08 -2.340e+09 -8.018e+07 -2.083e+09 8.491e+06 -1.786e+09 8.854e+07 -1.465e+09 1.547e+08 -1.140e+09 2.030e+08 -8.298e+08 2.322e+08 -5.559e+08 2.479e+08 -3.350e+08 2.690e+08 -1.711e+08 3.281e+08 -3.774e+07 4.530e+08 1.230e+08 6.516e+08 3.693e+08 9.208e+08 7.382e+08 1.256e+09 1.248e+09 1.653e+09 1.907e+09 2.109e+09 2.717e+09 2.620e+09 3.673e+09 3.178e+09 4.768e+09 3.779e+09 5.989e+09 4.413e+09 7.317e+09 5.071e+09 8.732e+09 5.743e+09 1.021e+10 6.419e+09 1.173e+10 7.085e+09 1.325e+10 7.728e+09 1.476e+10 8.336e+09 1.620e+10 8.894e+09 1.756e+10 9.391e+09 1.881e+10 9.815e+09 1.990e+10 1.015e+10 2.083e+10 1.040e+10 2.156e+10 1.055e+10 2.208e+10 1.059e+10 2.237e+10 1.052e+10 2.242e+10 1.035e+10 2.224e+10 1.007e+10 2.182e+10 9.693e+09 2.118e+10 9.223e+09 2.033e+10 8.672e+09 1.928e+10 8.051e+09 1.807e+10 7.375e+09 1.672e+10 6.661e+09 1.527e+10 5.922e+09 1.374e+10 5.178e+09 1.218e+10 4.443e+09 1.061e+10 3.734e+09 9.074e+09 3.065e+09 7.604e+09 2.448e+09 6.225e+09 1.893e+09 4.962e+09 1.409e+09 3.834e+09 9.985e+08 2.854e+09 6.641e+08 2.030e+09 4.049e+08 1.362e+09 2.160e+08 8.460e+08 9.023e+07 4.707e+08 1.843e+07 2.214e+08 -1.152e+07 7.799e+07 -1.688e+07 1.637e+07 -2.876e+07 -7.931e+06 -5.429e+07 -4.455e+07 -7.856e+07 -9.045e+07 -9.141e+07 -1.293e+08 -8.805e+07 -1.464e+08 -6.846e+07 -1.347e+08 -3.795e+07 -9.716e+07 -7.944e+06 -4.729e+07 8.855e+06 -9.746e+06 4.628e+07 2.039e+07 1.716e+08 1.431e+08 4.302e+08 4.414e+08 8.773e+08 1.001e+09 1.580e+09 1.924e+09 2.615e+09 3.329e+09 4.066e+09 5.343e+09 6.030e+09 8.113e+09 8.610e+09 1.180e+10 1.191e+10 1.655e+10 1.605e+10 2.253e+10 2.114e+10 2.993e+10 2.729e+10 3.889e+10 3.462e+10 4.957e+10 4.324e+10 6.212e+10 5.323e+10 7.664e+10 6.467e+10 9.324e+10 7.764e+10 1.120e+11 9.217e+10 1.329e+11 1.083e+11 1.560e+11 1.260e+11 1.813e+11 1.452e+11 2.085e+11 1.659e+11 2.376e+11 1.879e+11 2.684e+11 2.112e+11 3.005e+11 2.355e+11 3.338e+11 2.606e+11 3.679e+11 2.862e+11 4.022e+11 3.122e+11 4.365e+11 3.381e+11 4.702e+11 3.637e+11 5.028e+11 3.885e+11 5.339e+11 4.123e+11 5.628e+11 4.346e+11 5.891e+11 4.552e+11 6.122e+11 4.736e+11 6.319e+11 4.896e+11 6.475e+11 5.027e+11 6.587e+11 5.128e+11 6.652e+11 5.194e+11 6.666e+11 5.225e+11 6.630e+11 5.219e+11 6.541e+11 5.175e+11 6.400e+11 5.093e+11 6.208e+11 4.973e+11 5.968e+11 4.817e+11 5.683e+11 4.626e+11 5.357e+11 4.403e+11 4.995e+11 4.151e+11 4.604e+11 3.874e+11 4.190e+11 3.576e+11 3.760e+11 3.263e+11 3.323e+11 2.938e+11 2.886e+11 2.609e+11 2.456e+11 2.280e+11 2.044e+11 1.958e+11 1.655e+11 1.648e+11 1.296e+11 1.356e+11 9.747e+10 1.086e+11 6.944e+10 8.439e+10 4.591e+10 6.334e+10 2.706e+10 4.578e+10 1.280e+10 3.196e+10 2.710e+09 2.196e+10 -4.123e+09 1.541e+10 -9.293e+09 1.121e+10 -1.470e+10 7.799e+09 -2.164e+10 3.905e+09 -3.028e+10 -9.658e+08 -3.994e+10 -6.705e+09 -4.961e+10 -1.288e+10 -5.821e+10 -1.889e+10 -6.469e+10 -2.409e+10 -6.814e+10 -2.783e+10 -6.788e+10 -2.960e+10 -6.355e+10 -2.904e+10 -5.521e+10 -2.604e+10 -4.349e+10 -2.087e+10 -2.969e+10 -1.427e+10 -1.596e+10 -7.699e+09 -5.182e+09 -3.765e+09 1.865e+09 -1.540e+09 1.413e+10 5.619e+09 4.522e+10 2.466e+10 1.057e+11 6.164e+10 2.062e+11 1.237e+11 3.596e+11 2.192e+11 5.807e+11 3.580e+11 8.867e+11 5.519e+11 1.298e+12 8.131e+11 1.834e+12 1.159e+12 2.522e+12 1.604e+12 3.391e+12 2.170e+12 4.471e+12 2.876e+12 5.792e+12 3.746e+12 7.397e+12 4.806e+12 9.319e+12 6.083e+12 1.160e+13 7.608e+12 1.429e+13 9.412e+12 1.744e+13 1.153e+13 2.108e+13 1.400e+13 2.528e+13 1.685e+13 3.010e+13 2.013e+13 3.557e+13 2.388e+13 4.178e+13 2.814e+13 4.875e+13 3.296e+13 5.658e+13 3.837e+13 6.530e+13 4.444e+13 7.497e+13 5.119e+13 8.566e+13 5.869e+13 9.744e+13 6.696e+13 1.103e+14 7.607e+13 1.244e+14 8.604e+13 1.398e+14 9.693e+13 1.564e+14 1.088e+14 1.743e+14 1.216e+14 1.935e+14 1.356e+14 2.141e+14 1.505e+14 2.361e+14 1.666e+14 2.596e+14 1.838e+14 2.845e+14 2.021e+14 3.109e+14 2.214e+14 3.387e+14 2.420e+14 3.679e+14 2.637e+14 3.984e+14 2.865e+14 4.304e+14 3.105e+14 4.637e+14 3.355e+14 4.983e+14 3.616e+14 5.341e+14 3.887e+14 5.710e+14 4.168e+14 6.090e+14 4.458e+14 6.479e+14 4.755e+14 6.876e+14 5.060e+14 7.281e+14 5.372e+14 7.693e+14 5.690e+14 8.109e+14 6.013e+14 8.529e+14 6.340e+14 8.951e+14 6.670e+14 9.374e+14 7.001e+14 9.795e+14 7.332e+14 1.022e+15 7.663e+14 1.063e+15 7.992e+14 1.104e+15 8.317e+14 1.144e+15 8.638e+14 1.183e+15 8.952e+14 1.221e+15 9.259e+14 1.258e+15 9.558e+14 1.293e+15 9.847e+14 1.327e+15 1.013e+15 1.359e+15 1.039e+15 1.389e+15 1.064e+15 1.417e+15 1.088e+15 1.443e+15 1.110e+15 1.467e+15 1.131e+15 1.488e+15 1.150e+15 1.507e+15 1.167e+15 1.524e+15 1.182e+15 1.538e+15 1.196e+15 1.549e+15 1.207e+15 1.558e+15 1.216e+15 1.563e+15 1.223e+15 1.566e+15 1.228e+15 1.567e+15 1.231e+15 1.564e+15 1.231e+15 1.558e+15 1.229e+15 1.550e+15 1.225e+15 1.539e+15 1.219e+15 1.525e+15 1.211e+15 1.509e+15 1.200e+15 1.490e+15 1.187e+15 1.468e+15 1.172e+15 1.445e+15 1.156e+15 1.418e+15 1.137e+15 1.390e+15 1.117e+15 1.360e+15 1.094e+15 1.328e+15 1.070e+15 1.294e+15 1.045e+15 1.259e+15 1.018e+15 1.222e+15 9.904e+14 1.184e+15 9.612e+14 1.145e+15 9.311e+14 1.105e+15 9.000e+14 1.065e+15 8.682e+14 1.023e+15 8.357e+14 9.821e+14 8.028e+14 9.402e+14 7.696e+14 8.982e+14 7.361e+14 8.563e+14 7.026e+14 8.146e+14 6.691e+14 7.733e+14 6.359e+14 7.324e+14 6.029e+14 6.922e+14 5.703e+14 6.527e+14 5.383e+14 6.140e+14 5.068e+14 5.763e+14 4.760e+14 5.397e+14 4.461e+14 5.042e+14 4.170e+14 4.699e+14 3.888e+14 4.368e+14 3.617e+14 4.051e+14 3.355e+14 3.746e+14 3.104e+14 3.456e+14 2.864e+14 3.179e+14 2.636e+14 2.917e+14 2.418e+14 2.668e+14 2.212e+14 2.434e+14 2.017e+14 2.213e+14 1.834e+14 2.006e+14 1.662e+14 1.812e+14 1.502e+14 1.633e+14 1.352e+14 1.465e+14 1.213e+14 1.311e+14 1.084e+14 1.168e+14 9.649e+13 1.037e+14 8.556e+13 9.172e+13 7.556e+13 8.079e+13 6.644e+13 7.084e+13 5.815e+13 6.185e+13 5.065e+13 5.375e+13 4.389e+13 4.647e+13 3.784e+13 3.998e+13 3.244e+13 3.420e+13 2.764e+13 2.909e+13 2.340e+13 2.459e+13 1.969e+13 2.065e+13 1.644e+13 1.723e+13 1.361e+13 1.425e+13 1.119e+13 1.171e+13 9.109e+12 9.531e+12 7.349e+12 7.691e+12 5.865e+12 6.144e+12 4.626e+12 4.852e+12 3.602e+12 3.786e+12 2.764e+12 2.915e+12 2.086e+12 2.210e+12 1.547e+12 1.647e+12 1.122e+12 1.204e+12 7.944e+11 8.607e+11 5.461e+11 5.993e+11 3.617e+11 4.040e+11 2.294e+11 2.623e+11 1.374e+11 1.624e+11 7.621e+10 9.459e+10 3.779e+10 5.064e+10 1.570e+10 2.406e+10 4.670e+09 9.503e+09 4.411e+08 2.841e+09 -1.033e+09 6.433e+08 -2.625e+09 -4.740e+08 -4.394e+09 -1.695e+09 -5.544e+09 -2.670e+09 -5.683e+09 -3.000e+09 -4.828e+09 -2.614e+09 -3.293e+09 -1.719e+09 -1.607e+09 -7.170e+08 -4.292e+08 -8.451e+07 4.019e+08 6.426e+08 2.440e+09 2.698e+09 7.090e+09 6.959e+09 1.501e+10 1.390e+10 2.670e+10 2.392e+10 4.258e+10 3.731e+10 6.288e+10 5.421e+10 8.772e+10 7.465e+10 1.171e+11 9.855e+10 1.508e+11 1.257e+11 1.885e+11 1.557e+11 2.298e+11 1.882e+11 2.743e+11 2.228e+11 3.212e+11 2.587e+11 3.699e+11 2.954e+11 4.198e+11 3.324e+11 4.698e+11 3.688e+11 5.195e+11 4.042e+11 5.680e+11 4.379e+11 6.144e+11 4.693e+11 6.583e+11 4.979e+11 6.989e+11 5.232e+11 7.355e+11 5.449e+11 7.677e+11 5.626e+11 7.951e+11 5.762e+11 8.172e+11 5.855e+11 8.337e+11 5.902e+11 8.447e+11 5.907e+11 8.499e+11 5.868e+11 8.495e+11 5.789e+11 8.436e+11 5.671e+11 8.325e+11 5.517e+11 8.163e+11 5.330e+11 7.955e+11 5.114e+11 7.704e+11 4.874e+11 7.416e+11 4.612e+11 7.095e+11 4.334e+11 6.746e+11 4.044e+11 6.375e+11 3.746e+11 5.987e+11 3.444e+11 0.005 -52.240 -51.153 -50.067 -48.981 -47.895 -46.913 -46.031 -45.242 -44.538 -43.913 -43.361 -42.880 -42.466 -42.116 -41.829 -41.603 -41.437 -41.331 -41.284 -41.296 -41.369 -41.503 -41.700 -41.961 -42.290 -42.689 -43.162 -43.715 -44.353 -45.083 -45.913 -46.855 -47.922 -49.130 -50.501 -52.062 -53.849 -55.910 -58.311 -61.141 -64.525 -68.603 -73.349 -77.257 -77.043 -73.188 -68.623 -64.501 -60.955 -57.920 -55.306 -53.033 -51.037 -49.273 -47.703 -46.300 -45.043 -43.913 -42.898 -41.987 -41.170 -40.440 -39.791 -39.219 -38.720 -38.290 -37.927 -37.628 -37.393 -37.221 -37.111 -37.062 -37.077 -37.155 -37.297 -37.506 -37.783 -38.131 -38.554 -39.056 -39.641 -40.316 -41.087 -41.963 -42.951 -44.062 -45.306 -46.689 -48.216 -49.876 -51.632 -53.402 -55.035 -56.326 -57.078 -57.161 -56.528 -55.224 -53.417 -51.344 -49.211 -47.146 -45.207 -43.414 -41.768 -40.262 -38.886 -37.629 -36.481 -35.434 -34.480 -33.613 -32.827 -32.117 -31.481 -30.914 -30.414 -29.980 -29.609 -29.301 -29.055 -28.872 -28.752 -28.695 -28.704 -28.780 -28.927 -29.147 -29.445 -29.828 -30.300 -30.872 -31.554 -32.360 -33.306 -34.417 -35.724 -37.270 -39.115 -41.348 -44.105 -47.604 -52.094 -57.013 -59.025 -58.432 -59.660 -61.032 -54.343 -47.412 -42.407 -38.493 -35.258 -32.489 -30.063 -27.902 -25.951 -24.174 -22.542 -21.035 -19.636 -18.332 -17.112 -15.968 -14.893 -13.880 -12.924 -12.022 -11.168 -10.361 -9.596 -8.872 -8.186 -7.536 -6.921 -6.339 -5.788 -5.268 -4.777 -4.314 -3.878 -3.468 -3.084 -2.725 -2.390 -2.078 -1.790 -1.525 -1.282 -1.061 -0.861 -0.683 -0.526 -0.390 -0.274 -0.179 -0.104 -0.049 -0.014 0.000 -0.006 -0.031 -0.076 -0.141 -0.227 -0.332 -0.459 -0.606 -0.773 -0.962 -1.173 -1.404 -1.658 -1.935 -2.233 -2.556 -2.902 -3.272 -3.667 -4.088 -4.535 -5.010 -5.513 -6.045 -6.607 -7.202 -7.829 -8.491 -9.189 -9.926 -10.704 -11.525 -12.393 -13.310 -14.281 -15.310 -16.402 -17.565 -18.804 -20.131 -21.554 -23.090 -24.755 -26.573 -28.576 -30.804 -33.322 -36.220 -39.642 -43.795 -48.743 -52.502 -52.232 -50.741 -49.962 -49.881 -49.845 -48.945 -46.946 -44.489 -42.128 -40.051 -38.270 -36.753 -35.460 -34.360 -33.422 -32.627 -31.957 -31.398 -30.940 -30.574 -30.294 -30.094 -29.969 -29.916 -29.933 -30.017 -30.166 -30.381 -30.660 -31.005 -31.415 -31.892 -32.438 -33.055 -33.746 -34.516 -35.370 -36.312 -37.350 -38.493 -39.752 -41.138 -42.666 -44.355 -46.226 -48.301 -50.602 -53.141 -55.896 -58.761 -61.436 -63.337 -63.774 -62.583 -60.343 -57.765 -55.258 -52.973 -50.941 -49.148 -47.571 -46.184 -44.964 -43.893 -42.953 -42.133 -41.420 -40.807 -40.286 -39.850 -39.495 -39.217 -39.013 -38.879 -38.815 -38.819 -38.891 -39.031 -39.238 -39.515 -39.862 -40.282 -40.777 -41.353 -42.013 -42.763 -43.613 -44.570 -45.647 -46.858 -48.221 -49.758 -51.491 -53.443 -55.609 -57.912 -60.092 -61.674 -62.322 -62.288 -62.142 -62.301 -63.019 -64.569 -67.462 -71.593 -71.449 -65.760 -60.946 -57.510 -54.863 -52.722 -50.935 -49.414 -48.104 -46.965 -45.971 -45.102 -44.343 -43.682 -43.110 -42.620 -42.205 -41.861 -41.585 -41.373 -41.222 -41.130 -41.097 -41.122 -41.202 -41.340 -41.533 -41.784 -42.092 -42.460 -42.888 -43.380 -43.937 -44.564 -45.264 -46.043 -46.909 -47.868 -48.929 -50.099 -51.269 -52.438 -53.608 0.03 -18.2823 -17.9221 -17.5654 -17.2123 -16.8629 -16.517 -16.1746 -15.8359 -15.5008 -15.1692 -14.8412 -14.5168 -14.196 -13.8788 -13.5651 -13.2551 -12.9486 -12.6457 -12.3464 -12.0507 -11.7585 -11.47 -11.185 -10.9036 -10.6258 -10.3516 -10.081 -9.8139 -9.5504 -9.2906 -9.0343 -8.7816 -8.5324 -8.2869 -8.0449 -7.8065 -7.5717 -7.3405 -7.1129 -6.8889 -6.6684 -6.4515 -6.2383 -6.0286 -5.8224 -5.6199 -5.4209 -5.2256 -5.0338 -4.8456 -4.661 -4.4799 -4.3025 -4.1286 -3.9584 -3.7917 -3.6286 -3.469 -3.3131 -3.1607 -3.012 -2.8668 -2.7252 -2.5871 -2.4527 -2.3218 -2.1946 -2.0709 -1.9508 -1.8343 -1.7213 -1.612 -1.5062 -1.4041 -1.3055 -1.2104 -1.119 -1.0312 -0.94692 -0.86624 -0.78915 -0.71564 -0.64572 -0.57938 -0.51663 -0.45746 -0.40187 -0.34987 -0.30145 -0.25662 -0.21537 -0.1777 -0.14362 -0.11312 -0.086211 -0.062882 -0.043137 -0.026977 -0.0144 -0.0054081 0 0.001824 6.3811e-005 -0.0052805 -0.014209 -0.026722 -0.042818 -0.062499 -0.085764 -0.11261 -0.14305 -0.17706 -0.21467 -0.25585 -0.30062 -0.34898 -0.40091 -0.45644 -0.51554 -0.57823 -0.64451 -0.71437 -0.78781 -0.86484 -0.94545 -1.0296 -1.1174 -1.2088 -1.3037 -1.4023 -1.5044 -1.6101 -1.7194 -1.8322 -1.9487 -2.0687 -2.1923 -2.3196 -2.4503 -2.5847 -2.7227 -2.8642 -3.0093 -3.158 -3.3103 -3.4662 -3.6257 -3.7887 -3.9554 -4.1256 -4.2994 -4.4768 -4.6577 -4.8423 -5.0304 -5.2221 -5.4174 -5.6163 -5.8188 -6.0249 -6.2345 -6.4477 -6.6645 -6.8849 -7.1089 -7.3365 -7.5676 -7.8023 -8.0406 -8.2825 -8.528 -8.7771 -9.0297 -9.286 -9.5458 -9.8092 -10.0762 -10.3468 -10.6209 -10.8986 -11.18 -11.4649 -11.7534 -12.0454 -12.3411 -12.6403 -12.9432 -13.2496 -13.5596 -13.8732 -14.1903 -14.5111 -14.8354 -15.1633 -15.4948 -15.8299 -16.1686 -16.5108 -16.8567 -17.2061 -17.5591 1.0 59758.6889 EW1 HH 17.1 25.24 0.050 -4.988e+10 5.199e+10 -5.695e+10 5.705e+10 -6.374e+10 6.044e+10 -7.014e+10 6.194e+10 -7.609e+10 6.137e+10 -8.153e+10 5.868e+10 -8.653e+10 5.389e+10 -9.125e+10 4.711e+10 -9.597e+10 3.846e+10 -1.011e+11 2.799e+10 -1.074e+11 1.552e+10 -1.157e+11 5.864e+08 -1.268e+11 -1.785e+10 -1.418e+11 -4.148e+10 -1.519e+11 -6.817e+10 -1.759e+11 -1.074e+11 -2.058e+11 -1.594e+11 -2.420e+11 -2.276e+11 -2.852e+11 -3.157e+11 -3.359e+11 -4.274e+11 -3.947e+11 -5.669e+11 -4.625e+11 -7.380e+11 -5.402e+11 -9.460e+11 -6.286e+11 -1.194e+12 -7.288e+11 -1.488e+12 -8.423e+11 -1.832e+12 -9.706e+11 -2.232e+12 -1.114e+12 -2.691e+12 -1.276e+12 -3.215e+12 -1.457e+12 -3.810e+12 -1.660e+12 -4.477e+12 -1.885e+12 -5.225e+12 -2.137e+12 -6.054e+12 -2.417e+12 -6.970e+12 -2.728e+12 -7.978e+12 -3.071e+12 -9.078e+12 -3.451e+12 -1.028e+13 -3.871e+12 -1.157e+13 -4.330e+12 -1.297e+13 -4.835e+12 -1.446e+13 -5.388e+12 -1.606e+13 -5.992e+12 -1.777e+13 -6.648e+12 -1.957e+13 -7.361e+12 -2.148e+13 -8.133e+12 -2.347e+13 -8.967e+12 -2.557e+13 -9.862e+12 -2.776e+13 -1.083e+13 -3.003e+13 -1.186e+13 -3.239e+13 -1.297e+13 -3.482e+13 -1.415e+13 -3.732e+13 -1.539e+13 -3.988e+13 -1.673e+13 -4.249e+13 -1.812e+13 -4.515e+13 -1.960e+13 -4.784e+13 -2.116e+13 -5.056e+13 -2.279e+13 -5.329e+13 -2.448e+13 -5.602e+13 -2.627e+13 -5.875e+13 -2.811e+13 -6.145e+13 -3.003e+13 -6.413e+13 -3.201e+13 -6.677e+13 -3.405e+13 -6.935e+13 -3.616e+13 -7.185e+13 -3.832e+13 -7.428e+13 -4.054e+13 -7.663e+13 -4.279e+13 -7.886e+13 -4.509e+13 -8.097e+13 -4.744e+13 -8.296e+13 -4.980e+13 -8.480e+13 -5.219e+13 -8.650e+13 -5.458e+13 -8.803e+13 -5.699e+13 -8.940e+13 -5.941e+13 -9.059e+13 -6.181e+13 -9.160e+13 -6.421e+13 -9.242e+13 -6.657e+13 -9.304e+13 -6.891e+13 -9.346e+13 -7.122e+13 -9.368e+13 -7.348e+13 -9.369e+13 -7.568e+13 -9.349e+13 -7.783e+13 -9.308e+13 -7.990e+13 -9.247e+13 -8.190e+13 -9.165e+13 -8.383e+13 -9.063e+13 -8.565e+13 -8.941e+13 -8.738e+13 -8.799e+13 -8.901e+13 -8.638e+13 -9.053e+13 -8.459e+13 -9.194e+13 -8.263e+13 -9.323e+13 -8.049e+13 -9.441e+13 -7.819e+13 -9.545e+13 -7.575e+13 -9.637e+13 -7.317e+13 -9.716e+13 -7.044e+13 -9.781e+13 -6.761e+13 -9.833e+13 -6.465e+13 -9.877e+13 -6.161e+13 -9.902e+13 -5.847e+13 -9.907e+13 -5.525e+13 -9.912e+13 -5.198e+13 -9.897e+13 -4.866e+13 -9.883e+13 -4.530e+13 -9.849e+13 -4.191e+13 -9.798e+13 -3.850e+13 -9.741e+13 -3.506e+13 -9.673e+13 -3.161e+13 -9.595e+13 -2.817e+13 -9.508e+13 -2.473e+13 -9.413e+13 -2.130e+13 -9.309e+13 -1.789e+13 -9.198e+13 -1.451e+13 -9.080e+13 -1.116e+13 -8.957e+13 -7.837e+12 -8.828e+13 -4.552e+12 -8.695e+13 -1.306e+12 -8.558e+13 1.905e+12 -8.417e+13 5.078e+12 -8.274e+13 8.214e+12 -8.130e+13 1.131e+13 -7.983e+13 1.438e+13 -7.835e+13 1.743e+13 -7.687e+13 2.044e+13 -7.538e+13 2.344e+13 -7.390e+13 2.642e+13 -7.242e+13 2.940e+13 -7.093e+13 3.237e+13 -6.944e+13 3.535e+13 -6.796e+13 3.834e+13 -6.648e+13 4.134e+13 -6.500e+13 4.437e+13 -6.352e+13 4.742e+13 -6.202e+13 5.052e+13 -6.052e+13 5.364e+13 -5.899e+13 5.681e+13 -5.745e+13 6.002e+13 -5.588e+13 6.328e+13 -5.428e+13 6.659e+13 -5.263e+13 6.995e+13 -5.095e+13 7.335e+13 -4.923e+13 7.682e+13 -4.747e+13 8.036e+13 -4.564e+13 8.393e+13 -4.377e+13 8.757e+13 -4.183e+13 9.123e+13 -3.982e+13 9.493e+13 -3.776e+13 9.867e+13 -3.562e+13 1.024e+14 -3.342e+13 1.062e+14 -3.116e+13 1.100e+14 -2.882e+13 1.138e+14 -2.644e+13 1.175e+14 -2.399e+13 1.213e+14 -2.148e+13 1.250e+14 -1.893e+13 1.286e+14 -1.632e+13 1.322e+14 -1.369e+13 1.358e+14 -1.101e+13 1.393e+14 -8.315e+12 1.427e+14 -5.597e+12 1.460e+14 -2.870e+12 1.493e+14 -1.410e+11 1.524e+14 2.583e+12 1.553e+14 5.290e+12 1.582e+14 7.973e+12 1.610e+14 1.062e+13 1.636e+14 1.322e+13 1.660e+14 1.579e+13 1.682e+14 1.828e+13 1.704e+14 2.069e+13 1.723e+14 2.304e+13 1.740e+14 2.528e+13 1.755e+14 2.744e+13 1.770e+14 2.949e+13 1.781e+14 3.143e+13 1.790e+14 3.325e+13 1.797e+14 3.495e+13 1.802e+14 3.651e+13 1.805e+14 3.794e+13 1.806e+14 3.922e+13 1.805e+14 4.038e+13 1.802e+14 4.140e+13 1.796e+14 4.227e+13 1.788e+14 4.299e+13 1.778e+14 4.357e+13 1.766e+14 4.400e+13 1.751e+14 4.427e+13 1.736e+14 4.439e+13 1.717e+14 4.437e+13 1.697e+14 4.420e+13 1.676e+14 4.390e+13 1.652e+14 4.347e+13 1.626e+14 4.290e+13 1.599e+14 4.221e+13 1.571e+14 4.140e+13 1.541e+14 4.048e+13 1.510e+14 3.946e+13 1.477e+14 3.834e+13 1.444e+14 3.714e+13 1.410e+14 3.584e+13 1.374e+14 3.448e+13 1.338e+14 3.305e+13 1.301e+14 3.157e+13 1.263e+14 3.005e+13 1.226e+14 2.847e+13 1.187e+14 2.688e+13 1.148e+14 2.525e+13 1.109e+14 2.362e+13 1.070e+14 2.198e+13 1.031e+14 2.035e+13 9.920e+13 1.871e+13 9.534e+13 1.711e+13 9.149e+13 1.552e+13 8.769e+13 1.395e+13 8.393e+13 1.244e+13 8.024e+13 1.095e+13 7.660e+13 9.516e+12 7.302e+13 8.131e+12 6.953e+13 6.799e+12 6.611e+13 5.524e+12 6.279e+13 4.309e+12 5.957e+13 3.154e+12 5.643e+13 2.061e+12 5.340e+13 1.034e+12 5.048e+13 7.129e+10 4.767e+13 -8.258e+11 4.495e+13 -1.658e+12 4.234e+13 -2.425e+12 3.984e+13 -3.130e+12 3.745e+13 -3.773e+12 3.516e+13 -4.357e+12 3.299e+13 -4.883e+12 3.092e+13 -5.355e+12 2.896e+13 -5.774e+12 2.710e+13 -6.144e+12 2.534e+13 -6.467e+12 2.368e+13 -6.746e+12 2.211e+13 -6.984e+12 2.064e+13 -7.184e+12 1.925e+13 -7.349e+12 1.795e+13 -7.481e+12 1.673e+13 -7.583e+12 1.558e+13 -7.656e+12 1.451e+13 -7.705e+12 1.350e+13 -7.729e+12 1.256e+13 -7.732e+12 1.167e+13 -7.716e+12 1.085e+13 -7.681e+12 1.008e+13 -7.627e+12 9.359e+12 -7.558e+12 8.683e+12 -7.473e+12 8.050e+12 -7.375e+12 7.458e+12 -7.262e+12 6.902e+12 -7.137e+12 6.383e+12 -6.999e+12 5.896e+12 -6.412e+12 5.092e+12 -6.258e+12 4.690e+12 -6.095e+12 4.313e+12 -5.923e+12 3.961e+12 -5.743e+12 3.632e+12 -5.556e+12 3.324e+12 -5.363e+12 3.038e+12 -5.164e+12 2.771e+12 -4.959e+12 2.523e+12 -4.750e+12 2.293e+12 -4.538e+12 2.079e+12 -4.323e+12 1.880e+12 -4.107e+12 1.697e+12 -3.890e+12 1.528e+12 -3.672e+12 1.373e+12 -3.457e+12 1.230e+12 -3.243e+12 1.100e+12 -3.032e+12 9.805e+11 -2.825e+12 8.721e+11 -2.623e+12 7.737e+11 -2.426e+12 6.846e+11 -2.235e+12 6.042e+11 -2.051e+12 5.320e+11 -1.874e+12 4.672e+11 -1.705e+12 4.093e+11 -1.544e+12 3.578e+11 -1.392e+12 3.120e+11 -1.248e+12 2.714e+11 -1.114e+12 2.357e+11 -9.877e+11 2.041e+11 -8.709e+11 1.765e+11 -7.630e+11 1.524e+11 -6.638e+11 1.313e+11 -5.733e+11 1.129e+11 -4.912e+11 9.694e+10 -4.171e+11 8.308e+10 -3.508e+11 7.109e+10 -2.919e+11 6.070e+10 -2.399e+11 5.171e+10 -1.946e+11 4.394e+10 -1.554e+11 3.721e+10 -1.218e+11 3.137e+10 -9.346e+10 2.630e+10 -6.992e+10 2.189e+10 -5.067e+10 1.805e+10 -3.581e+10 1.419e+10 -2.368e+10 1.168e+10 -1.471e+10 9.260e+09 -8.341e+09 7.240e+09 -4.102e+09 5.674e+09 -1.432e+09 4.687e+09 4.201e+08 4.402e+09 2.262e+09 4.752e+09 4.579e+09 5.488e+09 7.465e+09 6.384e+09 1.083e+10 7.312e+09 1.454e+10 8.207e+09 1.844e+10 9.033e+09 2.240e+10 9.773e+09 2.630e+10 1.042e+10 3.005e+10 1.096e+10 3.357e+10 1.139e+10 3.681e+10 1.171e+10 3.972e+10 1.193e+10 4.229e+10 1.204e+10 4.449e+10 1.205e+10 4.632e+10 1.195e+10 4.780e+10 1.176e+10 4.894e+10 1.148e+10 4.976e+10 1.112e+10 5.028e+10 1.068e+10 5.055e+10 1.017e+10 5.058e+10 9.609e+09 5.042e+10 8.991e+09 5.010e+10 8.331e+09 4.965e+10 7.635e+09 4.911e+10 6.910e+09 4.851e+10 6.163e+09 4.787e+10 5.402e+09 4.722e+10 4.629e+09 4.659e+10 3.850e+09 4.599e+10 3.068e+09 4.546e+10 2.285e+09 4.500e+10 1.503e+09 4.463e+10 7.220e+08 4.437e+10 -5.805e+07 4.424e+10 -8.397e+08 4.424e+10 -1.623e+09 4.436e+10 -2.411e+09 4.463e+10 -3.205e+09 4.504e+10 -4.009e+09 4.561e+10 -4.825e+09 4.632e+10 -5.656e+09 4.720e+10 -6.505e+09 4.822e+10 -7.375e+09 4.941e+10 -8.269e+09 5.075e+10 -9.189e+09 5.225e+10 -1.014e+10 5.390e+10 -1.111e+10 5.569e+10 -1.212e+10 5.763e+10 -1.316e+10 5.971e+10 -1.423e+10 6.191e+10 -1.533e+10 6.424e+10 -1.647e+10 6.667e+10 -1.763e+10 6.919e+10 -1.882e+10 7.180e+10 -2.004e+10 7.447e+10 -2.127e+10 7.718e+10 -2.253e+10 7.992e+10 -2.379e+10 8.266e+10 -2.506e+10 8.539e+10 -2.633e+10 8.807e+10 -2.760e+10 9.069e+10 -2.885e+10 9.322e+10 -3.008e+10 9.564e+10 -3.127e+10 9.792e+10 -3.243e+10 1.000e+11 -3.354e+10 1.020e+11 -3.459e+10 1.037e+11 -3.557e+10 1.051e+11 -3.648e+10 1.064e+11 -3.730e+10 1.073e+11 -3.803e+10 1.080e+11 -3.865e+10 1.083e+11 -3.917e+10 1.084e+11 -3.957e+10 1.082e+11 -3.985e+10 1.076e+11 -4.000e+10 1.067e+11 -4.003e+10 1.055e+11 -3.992e+10 1.040e+11 -3.968e+10 1.022e+11 -3.932e+10 1.001e+11 -3.882e+10 9.766e+10 -3.820e+10 9.499e+10 -3.746e+10 9.206e+10 -3.660e+10 8.890e+10 -3.563e+10 8.553e+10 -3.456e+10 8.199e+10 -3.339e+10 7.829e+10 -3.213e+10 7.445e+10 -3.080e+10 7.052e+10 -2.940e+10 6.650e+10 -2.795e+10 6.244e+10 -2.645e+10 5.835e+10 -2.491e+10 5.427e+10 -2.335e+10 5.022e+10 -2.178e+10 4.623e+10 -2.021e+10 4.231e+10 -1.865e+10 3.849e+10 -1.710e+10 3.479e+10 -1.558e+10 3.122e+10 -1.410e+10 2.781e+10 -1.267e+10 2.458e+10 -1.129e+10 2.152e+10 -9.978e+09 1.865e+10 -8.731e+09 1.599e+10 -7.558e+09 1.353e+10 -6.464e+09 1.128e+10 -5.453e+09 9.252e+09 -4.528e+09 7.434e+09 -3.690e+09 5.830e+09 -2.943e+09 4.437e+09 -2.285e+09 3.249e+09 -1.715e+09 2.261e+09 -1.234e+09 1.466e+09 -8.378e+08 8.551e+08 -5.237e+08 4.187e+08 -2.882e+08 1.467e+08 -1.273e+08 2.113e+07 -4.023e+07 -5.710e+07 -1.084e+07 -2.151e+08 2.463e+07 -4.920e+08 1.044e+08 -8.778e+08 2.281e+08 -1.361e+09 3.897e+08 -1.932e+09 5.828e+08 -2.580e+09 8.008e+08 -3.295e+09 1.037e+09 -4.069e+09 1.285e+09 -4.894e+09 1.540e+09 -5.763e+09 1.795e+09 -6.670e+09 2.045e+09 -7.610e+09 2.285e+09 -8.577e+09 2.511e+09 -9.570e+09 2.718e+09 -1.058e+10 2.904e+09 -1.162e+10 3.063e+09 -1.267e+10 3.195e+09 -1.375e+10 3.296e+09 -1.484e+10 3.364e+09 -1.595e+10 3.398e+09 -1.708e+10 3.395e+09 -1.824e+10 3.355e+09 -1.942e+10 3.277e+09 -2.063e+10 3.159e+09 -2.186e+10 3.002e+09 -2.313e+10 2.804e+09 -2.443e+10 2.565e+09 -2.577e+10 2.285e+09 -2.714e+10 1.964e+09 -2.856e+10 1.601e+09 -3.002e+10 1.198e+09 -3.152e+10 7.542e+08 -3.307e+10 2.704e+08 -3.467e+10 -2.521e+08 -3.631e+10 -8.131e+08 -3.801e+10 -1.411e+09 -3.977e+10 -2.044e+09 -4.157e+10 -2.711e+09 -4.341e+10 -3.407e+09 -4.529e+10 -4.130e+09 -4.722e+10 -4.877e+09 -4.918e+10 -5.643e+09 -5.117e+10 -6.424e+09 -5.318e+10 -7.214e+09 -5.522e+10 -8.009e+09 -5.727e+10 -8.801e+09 -5.933e+10 -9.585e+09 -6.138e+10 -1.035e+10 -6.342e+10 -1.110e+10 -6.544e+10 -1.182e+10 -6.743e+10 -1.250e+10 -6.938e+10 -1.313e+10 -7.127e+10 -1.371e+10 -7.309e+10 -1.424e+10 -7.484e+10 -1.469e+10 -7.649e+10 -1.507e+10 -7.804e+10 -1.537e+10 -7.947e+10 -1.559e+10 -8.077e+10 -1.571e+10 -8.193e+10 -1.574e+10 -8.293e+10 -1.567e+10 -8.377e+10 -1.550e+10 -8.444e+10 -1.523e+10 -8.492e+10 -1.486e+10 -8.522e+10 -1.439e+10 -8.532e+10 -1.381e+10 -8.522e+10 -1.314e+10 -8.492e+10 -1.238e+10 -8.441e+10 -1.153e+10 -8.371e+10 -1.060e+10 -8.281e+10 -9.593e+09 -8.171e+10 -8.519e+09 -8.044e+10 -7.386e+09 -7.899e+10 -6.201e+09 -7.738e+10 -4.974e+09 -7.563e+10 -3.717e+09 -7.375e+10 -2.434e+09 -7.174e+10 -1.133e+09 -6.963e+10 1.769e+08 -6.743e+10 1.490e+09 -6.516e+10 2.798e+09 -6.284e+10 4.093e+09 -6.048e+10 5.372e+09 -5.811e+10 6.629e+09 -5.573e+10 7.860e+09 -5.337e+10 9.062e+09 -5.105e+10 1.024e+10 -4.877e+10 1.138e+10 -4.655e+10 1.249e+10 -4.441e+10 1.358e+10 -4.234e+10 1.464e+10 -4.037e+10 1.569e+10 -3.850e+10 1.672e+10 -3.673e+10 1.775e+10 -3.507e+10 1.877e+10 -3.352e+10 1.980e+10 -3.207e+10 2.085e+10 -3.074e+10 2.192e+10 -2.950e+10 2.302e+10 -2.837e+10 2.415e+10 -2.733e+10 2.533e+10 -2.638e+10 2.655e+10 -2.552e+10 2.782e+10 -2.474e+10 2.914e+10 -2.403e+10 3.052e+10 -2.340e+10 3.195e+10 -2.284e+10 3.343e+10 -2.234e+10 3.496e+10 -2.191e+10 3.654e+10 -2.155e+10 3.816e+10 -2.124e+10 3.982e+10 -2.101e+10 4.151e+10 -2.084e+10 4.324e+10 -2.074e+10 4.499e+10 -2.071e+10 4.676e+10 -2.076e+10 4.856e+10 -2.089e+10 5.038e+10 -2.110e+10 5.220e+10 -2.139e+10 5.404e+10 -2.176e+10 5.588e+10 -2.223e+10 5.772e+10 -2.279e+10 5.956e+10 -2.344e+10 6.140e+10 -2.418e+10 6.324e+10 -2.501e+10 6.507e+10 -2.595e+10 6.690e+10 -2.697e+10 6.871e+10 -2.809e+10 7.052e+10 -2.930e+10 7.231e+10 -3.060e+10 7.409e+10 -3.198e+10 7.586e+10 -3.344e+10 7.760e+10 -3.499e+10 7.933e+10 -3.660e+10 8.103e+10 -3.828e+10 8.270e+10 -4.003e+10 8.433e+10 -4.182e+10 8.594e+10 -4.366e+10 8.750e+10 -4.554e+10 8.901e+10 -4.745e+10 9.048e+10 -4.938e+10 9.189e+10 -5.131e+10 9.325e+10 -5.325e+10 9.454e+10 -5.518e+10 9.576e+10 -5.709e+10 9.691e+10 -5.897e+10 9.798e+10 -6.081e+10 9.897e+10 -6.260e+10 9.988e+10 -6.432e+10 1.007e+11 -6.598e+10 1.014e+11 -6.755e+10 1.020e+11 -6.904e+10 1.026e+11 -7.042e+10 1.030e+11 -7.170e+10 1.033e+11 -7.286e+10 1.036e+11 -7.388e+10 1.037e+11 -7.478e+10 1.037e+11 -7.553e+10 1.036e+11 -7.614e+10 1.034e+11 -7.660e+10 1.031e+11 -7.691e+10 1.027e+11 -7.705e+10 1.022e+11 -7.704e+10 1.015e+11 -7.686e+10 1.008e+11 -7.652e+10 9.987e+10 -7.602e+10 9.886e+10 -7.536e+10 9.775e+10 -7.455e+10 9.652e+10 -7.358e+10 9.517e+10 -7.246e+10 9.371e+10 -7.121e+10 9.215e+10 -6.982e+10 9.048e+10 -6.830e+10 8.871e+10 -6.667e+10 8.685e+10 -6.493e+10 8.489e+10 0.005 -51.560 -50.669 -49.777 -48.885 -47.994 -47.178 -46.446 -45.792 -45.212 -44.702 -44.259 -43.879 -43.562 -43.305 -43.110 -42.973 -42.895 -42.876 -42.917 -43.019 -43.183 -43.411 -43.706 -44.071 -44.510 -45.027 -45.630 -46.324 -47.120 -48.027 -49.062 -50.241 -51.588 -53.134 -54.921 -57.006 -59.465 -62.391 -65.824 -69.402 -71.887 -72.547 -72.703 -73.972 -76.288 -74.982 -69.431 -64.248 -60.325 -57.212 -54.638 -52.453 -50.561 -48.902 -47.435 -46.129 -44.961 -43.915 -42.976 -42.136 -41.386 -40.717 -40.127 -39.609 -39.160 -38.778 -38.460 -38.205 -38.010 -37.877 -37.804 -37.791 -37.840 -37.950 -38.123 -38.362 -38.668 -39.046 -39.497 -40.026 -40.639 -41.341 -42.138 -43.040 -44.054 -45.192 -46.464 -47.879 -49.448 -51.171 -53.041 -55.037 -57.129 -59.308 -61.622 -64.021 -65.480 -64.081 -60.350 -56.571 -53.340 -50.596 -48.233 -46.170 -44.349 -42.729 -41.279 -39.977 -38.805 -37.749 -36.799 -35.945 -35.181 -34.501 -33.901 -33.376 -32.925 -32.546 -32.237 -31.998 -31.829 -31.731 -31.704 -31.753 -31.878 -32.085 -32.379 -32.766 -33.254 -33.855 -34.582 -35.454 -36.494 -37.735 -39.224 -41.030 -43.260 -46.097 -49.890 -55.295 -61.081 -58.419 -55.414 -54.677 -56.009 -58.236 -54.525 -47.907 -42.909 -39.011 -35.801 -33.058 -30.655 -28.513 -26.577 -24.812 -23.189 -21.687 -20.290 -18.986 -17.765 -16.617 -15.537 -14.517 -13.554 -12.642 -11.779 -10.960 -10.184 -9.447 -8.748 -8.085 -7.455 -6.858 -6.291 -5.755 -5.247 -4.767 -4.313 -3.886 -3.483 -3.105 -2.751 -2.420 -2.112 -1.826 -1.562 -1.320 -1.099 -0.899 -0.719 -0.560 -0.420 -0.301 -0.202 -0.122 -0.063 -0.022 -0.001 0.000 -0.018 -0.055 -0.112 -0.188 -0.284 -0.400 -0.536 -0.692 -0.869 -1.067 -1.285 -1.525 -1.786 -2.070 -2.376 -2.705 -3.058 -3.434 -3.836 -4.263 -4.717 -5.198 -5.707 -6.245 -6.815 -7.416 -8.051 -8.721 -9.429 -10.176 -10.966 -11.800 -12.684 -13.620 -14.613 -15.670 -16.798 -18.003 -19.298 -20.696 -22.214 -23.876 -25.715 -27.780 -30.146 -32.940 -36.412 -41.158 -49.538 -55.570 -48.569 -43.632 -41.417 -40.268 -39.751 -39.684 -39.969 -40.539 -41.315 -42.155 -42.792 -42.882 -42.255 -41.101 -39.754 -38.435 -37.238 -36.191 -35.295 -34.538 -33.910 -33.398 -32.993 -32.686 -32.470 -32.339 -32.290 -32.318 -32.421 -32.597 -32.846 -33.168 -33.561 -34.029 -34.572 -35.193 -35.896 -36.686 -37.567 -38.546 -39.634 -40.839 -42.177 -43.662 -45.317 -47.166 -49.245 -51.595 -54.270 -57.334 -60.858 -64.866 -68.946 -70.767 -68.694 -64.888 -61.228 -58.061 -55.347 -53.016 -51.003 -49.255 -47.731 -46.397 -45.229 -44.206 -43.312 -42.533 -41.859 -41.282 -40.795 -40.391 -40.066 -39.818 -39.641 -39.536 -39.500 -39.533 -39.632 -39.800 -40.035 -40.340 -40.717 -41.167 -41.695 -42.304 -42.999 -43.788 -44.676 -45.675 -46.795 -48.050 -49.457 -51.035 -52.802 -54.773 -56.938 -59.224 -61.434 -63.236 -64.387 -65.004 -65.440 -65.870 -66.001 -65.169 -63.148 -60.504 -57.857 -55.456 -53.339 -51.480 -49.843 -48.394 -47.107 -45.961 -44.937 -44.023 -43.206 -42.478 -41.831 -41.259 -40.756 -40.319 -39.943 -39.626 -39.364 -39.156 -39.000 -38.895 -38.838 -38.830 -38.870 -38.957 -39.090 -39.271 -39.499 -39.775 -40.100 -40.474 -40.899 -41.376 -41.907 -42.493 -43.139 -43.846 -44.618 -45.448 -46.279 -47.109 -47.939 0.03 -17.8205 -17.4681 -17.1192 -16.7737 -16.4319 -16.0935 -15.7587 -15.4273 -15.0995 -14.7753 -14.4545 -14.1373 -13.8235 -13.5133 -13.2066 -12.9035 -12.6038 -12.3077 -12.0151 -11.726 -11.4405 -11.1584 -10.8799 -10.6049 -10.3334 -10.0655 -9.801 -9.5401 -9.2827 -9.0288 -8.7784 -8.5316 -8.2883 -8.0485 -7.8122 -7.5794 -7.3502 -7.1245 -6.9022 -6.6836 -6.4684 -6.2568 -6.0486 -5.844 -5.6429 -5.4454 -5.2513 -5.0608 -4.8738 -4.6903 -4.5104 -4.3339 -4.161 -3.9916 -3.8257 -3.6633 -3.5045 -3.3492 -3.1973 -3.0491 -2.9043 -2.7631 -2.6253 -2.4911 -2.3604 -2.2333 -2.1096 -1.9895 -1.8729 -1.7598 -1.6502 -1.5442 -1.4417 -1.3427 -1.2472 -1.1552 -1.0668 -0.98183 -0.90042 -0.82253 -0.74816 -0.67732 -0.60999 -0.54618 -0.48589 -0.42913 -0.37588 -0.32615 -0.27994 -0.23725 -0.19809 -0.16244 -0.13031 -0.1017 -0.076612 -0.055044 -0.036995 -0.022466 -0.011458 -0.0039689 0 0.00044896 -0.002622 -0.0092129 -0.019324 -0.032954 -0.050105 -0.070776 -0.094966 -0.12268 -0.15391 -0.18866 -0.22693 -0.26872 -0.31403 -0.36286 -0.41521 -0.47108 -0.53047 -0.59338 -0.65981 -0.72976 -0.80323 -0.88021 -0.96072 -1.0448 -1.1323 -1.2234 -1.318 -1.4161 -1.5177 -1.6228 -1.7315 -1.8437 -1.9594 -2.0786 -2.2014 -2.3277 -2.4574 -2.5908 -2.7276 -2.8679 -3.0118 -3.1592 -3.3101 -3.4645 -3.6225 -3.7839 -3.9489 -4.1174 -4.2895 -4.465 -4.6441 -4.8267 -5.0128 -5.2024 -5.3955 -5.5922 -5.7924 -5.9961 -6.2033 -6.4141 -6.6283 -6.8461 -7.0674 -7.2923 -7.5206 -7.7525 -7.9879 -8.2268 -8.4692 -8.7151 -8.9646 -9.2176 -9.4741 -9.7341 -9.9977 -10.2647 -10.5353 -10.8094 -11.087 -11.3682 -11.6529 -11.941 -12.2327 -12.528 -12.8267 -13.129 -13.4348 -13.7441 -14.0569 -14.3732 -14.6931 -15.0165 -15.3434 -15.6738 -16.0078 -16.3452 -16.6862 -17.0307 -17.3787 1.0 56065.87 EW1 HV 17.1 25.24 0.050 -2.284e+09 9.098e+10 -4.294e+09 9.797e+10 -7.280e+09 1.033e+11 -1.129e+10 1.069e+11 -1.634e+10 1.085e+11 -2.242e+10 1.083e+11 -2.952e+10 1.063e+11 -3.767e+10 1.027e+11 -4.698e+10 9.797e+10 -5.773e+10 9.238e+10 -7.053e+10 8.628e+10 -8.626e+10 7.985e+10 -1.063e+11 7.296e+10 -1.324e+11 6.503e+10 -1.758e+11 5.807e+10 -2.230e+11 4.356e+10 -2.839e+11 2.319e+10 -3.610e+11 -5.220e+09 -4.572e+11 -4.404e+10 -5.754e+11 -9.578e+10 -7.187e+11 -1.629e+11 -8.904e+11 -2.481e+11 -1.094e+12 -3.541e+11 -1.334e+12 -4.834e+11 -1.612e+12 -6.388e+11 -1.934e+12 -8.232e+11 -2.303e+12 -1.039e+12 -2.723e+12 -1.289e+12 -3.200e+12 -1.577e+12 -3.735e+12 -1.903e+12 -4.334e+12 -2.271e+12 -5.003e+12 -2.682e+12 -5.742e+12 -3.140e+12 -6.557e+12 -3.644e+12 -7.452e+12 -4.198e+12 -8.429e+12 -4.802e+12 -9.491e+12 -5.456e+12 -1.064e+13 -6.161e+12 -1.189e+13 -6.918e+12 -1.323e+13 -7.726e+12 -1.466e+13 -8.584e+12 -1.619e+13 -9.491e+12 -1.781e+13 -1.044e+13 -1.953e+13 -1.144e+13 -2.136e+13 -1.248e+13 -2.328e+13 -1.356e+13 -2.530e+13 -1.467e+13 -2.742e+13 -1.581e+13 -2.963e+13 -1.699e+13 -3.193e+13 -1.817e+13 -3.432e+13 -1.938e+13 -3.679e+13 -2.058e+13 -3.935e+13 -2.181e+13 -4.198e+13 -2.301e+13 -4.469e+13 -2.421e+13 -4.746e+13 -2.539e+13 -5.030e+13 -2.655e+13 -5.318e+13 -2.768e+13 -5.612e+13 -2.876e+13 -5.910e+13 -2.979e+13 -6.210e+13 -3.077e+13 -6.514e+13 -3.170e+13 -6.820e+13 -3.255e+13 -7.125e+13 -3.333e+13 -7.432e+13 -3.402e+13 -7.737e+13 -3.463e+13 -8.038e+13 -3.514e+13 -8.337e+13 -3.555e+13 -8.631e+13 -3.585e+13 -8.920e+13 -3.604e+13 -9.202e+13 -3.612e+13 -9.476e+13 -3.608e+13 -9.741e+13 -3.592e+13 -9.997e+13 -3.564e+13 -1.024e+14 -3.523e+13 -1.047e+14 -3.470e+13 -1.069e+14 -3.405e+13 -1.090e+14 -3.327e+13 -1.109e+14 -3.237e+13 -1.127e+14 -3.134e+13 -1.143e+14 -3.020e+13 -1.158e+14 -2.895e+13 -1.170e+14 -2.757e+13 -1.181e+14 -2.610e+13 -1.190e+14 -2.451e+13 -1.198e+14 -2.284e+13 -1.203e+14 -2.106e+13 -1.207e+14 -1.920e+13 -1.209e+14 -1.726e+13 -1.210e+14 -1.524e+13 -1.208e+14 -1.315e+13 -1.205e+14 -1.100e+13 -1.199e+14 -8.795e+12 -1.192e+14 -6.543e+12 -1.185e+14 -4.249e+12 -1.175e+14 -1.921e+12 -1.163e+14 4.339e+11 -1.151e+14 2.808e+12 -1.137e+14 5.198e+12 -1.121e+14 7.594e+12 -1.104e+14 9.988e+12 -1.087e+14 1.238e+13 -1.068e+14 1.475e+13 -1.049e+14 1.711e+13 -1.028e+14 1.945e+13 -1.007e+14 2.177e+13 -9.845e+13 2.405e+13 -9.616e+13 2.631e+13 -9.380e+13 2.853e+13 -9.139e+13 3.072e+13 -8.892e+13 3.286e+13 -8.642e+13 3.497e+13 -8.387e+13 3.704e+13 -8.129e+13 3.907e+13 -7.870e+13 4.105e+13 -7.608e+13 4.299e+13 -7.346e+13 4.489e+13 -7.081e+13 4.677e+13 -6.819e+13 4.860e+13 -6.555e+13 5.041e+13 -6.291e+13 5.220e+13 -6.030e+13 5.397e+13 -5.768e+13 5.571e+13 -5.508e+13 5.746e+13 -5.249e+13 5.919e+13 -4.992e+13 6.093e+13 -4.735e+13 6.267e+13 -4.478e+13 6.442e+13 -4.223e+13 6.619e+13 -3.968e+13 6.798e+13 -3.712e+13 6.979e+13 -3.457e+13 7.164e+13 -3.200e+13 7.352e+13 -2.941e+13 7.544e+13 -2.682e+13 7.739e+13 -2.420e+13 7.940e+13 -2.155e+13 8.143e+13 -1.887e+13 8.351e+13 -1.615e+13 8.563e+13 -1.339e+13 8.779e+13 -1.059e+13 9.000e+13 -7.733e+12 9.226e+13 -4.829e+12 9.456e+13 -1.870e+12 9.690e+13 1.144e+12 9.927e+13 4.211e+12 1.016e+14 7.333e+12 1.041e+14 1.051e+13 1.065e+14 1.374e+13 1.089e+14 1.701e+13 1.113e+14 2.032e+13 1.137e+14 2.367e+13 1.161e+14 2.706e+13 1.186e+14 3.048e+13 1.209e+14 3.390e+13 1.232e+14 3.735e+13 1.255e+14 4.080e+13 1.277e+14 4.423e+13 1.299e+14 4.765e+13 1.319e+14 5.104e+13 1.339e+14 5.439e+13 1.359e+14 5.770e+13 1.378e+14 6.094e+13 1.395e+14 6.411e+13 1.411e+14 6.719e+13 1.426e+14 7.018e+13 1.441e+14 7.306e+13 1.453e+14 7.583e+13 1.465e+14 7.847e+13 1.474e+14 8.097e+13 1.483e+14 8.332e+13 1.491e+14 8.553e+13 1.497e+14 8.757e+13 1.501e+14 8.945e+13 1.504e+14 9.115e+13 1.506e+14 9.267e+13 1.506e+14 9.401e+13 1.504e+14 9.517e+13 1.502e+14 9.613e+13 1.498e+14 9.689e+13 1.493e+14 9.748e+13 1.485e+14 9.787e+13 1.477e+14 9.805e+13 1.467e+14 9.811e+13 1.456e+14 9.787e+13 1.444e+14 9.751e+13 1.429e+14 9.695e+13 1.415e+14 9.622e+13 1.399e+14 9.530e+13 1.381e+14 9.421e+13 1.363e+14 9.295e+13 1.344e+14 9.154e+13 1.324e+14 8.997e+13 1.302e+14 8.824e+13 1.280e+14 8.638e+13 1.257e+14 8.439e+13 1.233e+14 8.227e+13 1.208e+14 8.003e+13 1.184e+14 7.770e+13 1.157e+14 7.527e+13 1.130e+14 7.275e+13 1.102e+14 7.015e+13 1.075e+14 6.750e+13 1.046e+14 6.479e+13 1.017e+14 6.204e+13 9.879e+13 5.927e+13 9.585e+13 5.646e+13 9.288e+13 5.365e+13 8.989e+13 5.085e+13 8.689e+13 4.806e+13 8.389e+13 4.529e+13 8.089e+13 4.256e+13 7.792e+13 3.987e+13 7.495e+13 3.723e+13 7.202e+13 3.464e+13 6.912e+13 3.213e+13 6.626e+13 2.969e+13 6.344e+13 2.732e+13 6.069e+13 2.503e+13 5.798e+13 2.284e+13 5.533e+13 2.074e+13 5.276e+13 1.873e+13 5.025e+13 1.681e+13 4.784e+13 1.499e+13 4.549e+13 1.326e+13 4.321e+13 1.164e+13 4.101e+13 1.010e+13 3.889e+13 8.663e+12 3.686e+13 7.317e+12 3.490e+13 6.061e+12 3.302e+13 4.893e+12 3.123e+13 3.810e+12 2.952e+13 2.808e+12 2.788e+13 1.885e+12 2.632e+13 1.037e+12 2.484e+13 2.597e+11 2.343e+13 -4.501e+11 2.209e+13 -1.096e+12 2.082e+13 -1.681e+12 1.961e+13 -2.210e+12 1.847e+13 -2.685e+12 1.740e+13 -3.110e+12 1.637e+13 -3.489e+12 1.541e+13 -3.822e+12 1.449e+13 -4.116e+12 1.362e+13 -4.371e+12 1.280e+13 -4.590e+12 1.202e+13 -4.775e+12 1.128e+13 -4.927e+12 1.059e+13 -5.051e+12 9.932e+12 -5.145e+12 9.304e+12 -5.213e+12 8.709e+12 -5.256e+12 8.145e+12 -5.274e+12 7.609e+12 -5.271e+12 7.102e+12 -5.524e+12 6.968e+12 -5.479e+12 6.489e+12 -5.415e+12 6.034e+12 -5.333e+12 5.602e+12 -5.235e+12 5.193e+12 -5.120e+12 4.806e+12 -4.993e+12 4.441e+12 -4.854e+12 4.096e+12 -4.703e+12 3.771e+12 -4.542e+12 3.464e+12 -4.372e+12 3.176e+12 -4.196e+12 2.905e+12 -4.013e+12 2.651e+12 -3.826e+12 2.414e+12 -3.636e+12 2.193e+12 -3.444e+12 1.987e+12 -3.252e+12 1.795e+12 -3.059e+12 1.618e+12 -2.868e+12 1.454e+12 -2.680e+12 1.303e+12 -2.494e+12 1.164e+12 -2.313e+12 1.036e+12 -2.137e+12 9.193e+11 -1.966e+12 8.127e+11 -1.801e+12 7.159e+11 -1.642e+12 6.281e+11 -1.490e+12 5.487e+11 -1.346e+12 4.772e+11 -1.209e+12 4.131e+11 -1.080e+12 3.557e+11 -9.585e+11 3.047e+11 -8.453e+11 2.595e+11 -7.400e+11 2.197e+11 -6.429e+11 1.847e+11 -5.537e+11 1.543e+11 -4.724e+11 1.279e+11 -3.988e+11 1.051e+11 -3.328e+11 8.567e+10 -2.740e+11 6.915e+10 -2.222e+11 5.526e+10 -1.770e+11 4.366e+10 -1.381e+11 3.405e+10 -1.051e+11 2.620e+10 -7.761e+10 1.983e+10 -5.511e+10 1.471e+10 -3.738e+10 1.053e+10 -2.364e+10 7.374e+09 -1.348e+10 4.979e+09 -6.539e+09 3.156e+09 -2.353e+09 1.815e+09 -3.686e+08 9.883e+08 6.283e+08 9.251e+08 2.412e+09 1.349e+09 5.327e+09 1.815e+09 9.115e+09 2.240e+09 1.351e+10 2.622e+09 1.826e+10 2.972e+09 2.314e+10 3.298e+09 2.800e+10 3.605e+09 3.268e+10 3.894e+09 3.708e+10 4.163e+09 4.110e+10 4.409e+09 4.471e+10 4.630e+09 4.785e+10 4.822e+09 5.052e+10 4.982e+09 5.272e+10 5.108e+09 5.446e+10 5.199e+09 5.577e+10 5.255e+09 5.669e+10 5.277e+09 5.724e+10 5.267e+09 5.747e+10 5.227e+09 5.742e+10 5.159e+09 5.713e+10 5.068e+09 5.663e+10 4.956e+09 5.596e+10 4.826e+09 5.515e+10 4.681e+09 5.424e+10 4.522e+09 5.324e+10 4.350e+09 5.220e+10 4.167e+09 5.111e+10 3.973e+09 5.001e+10 3.766e+09 4.891e+10 3.546e+09 4.782e+10 3.312e+09 4.676e+10 3.059e+09 4.573e+10 2.788e+09 4.475e+10 2.493e+09 4.384e+10 2.172e+09 4.300e+10 1.821e+09 4.223e+10 1.437e+09 4.155e+10 1.016e+09 4.096e+10 5.558e+08 4.047e+10 5.086e+07 4.010e+10 -5.025e+08 3.986e+10 -1.108e+09 3.974e+10 -1.770e+09 3.977e+10 -2.495e+09 3.996e+10 -3.285e+09 4.031e+10 -4.147e+09 4.083e+10 -5.088e+09 4.154e+10 -6.111e+09 4.245e+10 -7.223e+09 4.355e+10 -8.430e+09 4.486e+10 -9.734e+09 4.637e+10 -1.114e+10 4.809e+10 -1.265e+10 5.002e+10 -1.426e+10 5.215e+10 -1.598e+10 5.448e+10 -1.778e+10 5.698e+10 -1.968e+10 5.965e+10 -2.165e+10 6.247e+10 -2.369e+10 6.540e+10 -2.577e+10 6.843e+10 -2.787e+10 7.152e+10 -2.999e+10 7.464e+10 -3.209e+10 7.776e+10 -3.415e+10 8.084e+10 -3.615e+10 8.384e+10 -3.807e+10 8.671e+10 -3.988e+10 8.944e+10 -4.157e+10 9.197e+10 -4.312e+10 9.427e+10 -4.450e+10 9.632e+10 -4.572e+10 9.809e+10 -4.675e+10 9.956e+10 -4.759e+10 1.007e+11 -4.825e+10 1.015e+11 -4.870e+10 1.020e+11 -4.897e+10 1.022e+11 -4.905e+10 1.019e+11 -4.896e+10 1.014e+11 -4.869e+10 1.005e+11 -4.826e+10 9.928e+10 -4.768e+10 9.775e+10 -4.697e+10 9.593e+10 -4.612e+10 9.383e+10 -4.516e+10 9.149e+10 -4.408e+10 8.891e+10 -4.292e+10 8.612e+10 -4.166e+10 8.314e+10 -4.033e+10 8.001e+10 -3.892e+10 7.673e+10 -3.745e+10 7.333e+10 -3.593e+10 6.983e+10 -3.435e+10 6.626e+10 -3.274e+10 6.263e+10 -3.108e+10 5.896e+10 -2.939e+10 5.528e+10 -2.768e+10 5.159e+10 -2.595e+10 4.792e+10 -2.420e+10 4.429e+10 -2.245e+10 4.070e+10 -2.070e+10 3.719e+10 -1.897e+10 3.376e+10 -1.725e+10 3.044e+10 -1.557e+10 2.723e+10 -1.393e+10 2.415e+10 -1.235e+10 2.122e+10 -1.082e+10 1.845e+10 -9.368e+09 1.585e+10 -8.000e+09 1.343e+10 -6.724e+09 1.120e+10 -5.548e+09 9.168e+09 -4.480e+09 7.340e+09 -3.523e+09 5.721e+09 -2.684e+09 4.312e+09 -1.963e+09 3.110e+09 -1.361e+09 2.116e+09 -8.754e+08 1.324e+09 -5.034e+08 7.281e+08 -2.390e+08 3.203e+08 -7.559e+07 9.137e+07 -2.134e+06 -3.410e+06 3.435e+07 -1.189e+08 1.171e+08 -3.575e+08 2.680e+08 -7.263e+08 4.726e+08 -1.213e+09 7.187e+08 -1.804e+09 9.951e+08 -2.489e+09 1.292e+09 -3.255e+09 1.598e+09 -4.092e+09 1.905e+09 -4.990e+09 2.205e+09 -5.941e+09 2.489e+09 -6.936e+09 2.752e+09 -7.970e+09 2.987e+09 -9.038e+09 3.190e+09 -1.014e+10 3.357e+09 -1.126e+10 3.485e+09 -1.241e+10 3.570e+09 -1.359e+10 3.612e+09 -1.480e+10 3.608e+09 -1.603e+10 3.557e+09 -1.730e+10 3.458e+09 -1.860e+10 3.310e+09 -1.994e+10 3.112e+09 -2.132e+10 2.862e+09 -2.275e+10 2.560e+09 -2.423e+10 2.205e+09 -2.576e+10 1.795e+09 -2.736e+10 1.327e+09 -2.903e+10 8.008e+08 -3.076e+10 2.143e+08 -3.257e+10 -4.355e+08 -3.446e+10 -1.150e+09 -3.643e+10 -1.931e+09 -3.848e+10 -2.782e+09 -4.063e+10 -3.705e+09 -4.286e+10 -4.701e+09 -4.518e+10 -5.772e+09 -4.759e+10 -6.918e+09 -5.006e+10 -8.138e+09 -5.262e+10 -9.434e+09 -5.523e+10 -1.080e+10 -5.791e+10 -1.224e+10 -6.063e+10 -1.375e+10 -6.338e+10 -1.531e+10 -6.616e+10 -1.694e+10 -6.894e+10 -1.861e+10 -7.170e+10 -2.032e+10 -7.444e+10 -2.205e+10 -7.713e+10 -2.381e+10 -7.976e+10 -2.557e+10 -8.229e+10 -2.732e+10 -8.472e+10 -2.905e+10 -8.701e+10 -3.075e+10 -8.916e+10 -3.239e+10 -9.114e+10 -3.396e+10 -9.294e+10 -3.545e+10 -9.453e+10 -3.684e+10 -9.591e+10 -3.811e+10 -9.706e+10 -3.926e+10 -9.796e+10 -4.027e+10 -9.862e+10 -4.113e+10 -9.902e+10 -4.183e+10 -9.917e+10 -4.235e+10 -9.905e+10 -4.271e+10 -9.867e+10 -4.288e+10 -9.803e+10 -4.288e+10 -9.714e+10 -4.269e+10 -9.601e+10 -4.232e+10 -9.464e+10 -4.177e+10 -9.305e+10 -4.105e+10 -9.124e+10 -4.016e+10 -8.923e+10 -3.912e+10 -8.704e+10 -3.793e+10 -8.468e+10 -3.661e+10 -8.216e+10 -3.516e+10 -7.950e+10 -3.361e+10 -7.672e+10 -3.195e+10 -7.383e+10 -3.022e+10 -7.085e+10 -2.841e+10 -6.779e+10 -2.654e+10 -6.467e+10 -2.463e+10 -6.150e+10 -2.270e+10 -5.830e+10 -2.075e+10 -5.509e+10 -1.880e+10 -5.189e+10 -1.686e+10 -4.870e+10 -1.495e+10 -4.554e+10 -1.308e+10 -4.244e+10 -1.126e+10 -3.940e+10 -9.494e+09 -3.644e+10 -7.802e+09 -3.358e+10 -6.189e+09 -3.083e+10 -4.661e+09 -2.821e+10 -3.224e+09 -2.573e+10 -1.881e+09 -2.340e+10 -6.323e+08 -2.125e+10 5.228e+08 -1.927e+10 1.591e+09 -1.747e+10 2.584e+09 -1.587e+10 3.513e+09 -1.446e+10 4.400e+09 -1.325e+10 5.268e+09 -1.222e+10 6.145e+09 -1.137e+10 7.062e+09 -1.069e+10 8.051e+09 -1.014e+10 9.139e+09 -9.720e+09 1.035e+10 -9.404e+09 1.171e+10 -9.177e+09 1.322e+10 -9.027e+09 1.490e+10 -8.946e+09 1.675e+10 -8.932e+09 1.875e+10 -8.984e+09 2.091e+10 -9.109e+09 2.323e+10 -9.312e+09 2.568e+10 -9.607e+09 2.825e+10 -1.000e+10 3.095e+10 -1.050e+10 3.374e+10 -1.112e+10 3.661e+10 -1.187e+10 3.956e+10 -1.276e+10 4.257e+10 -1.379e+10 4.562e+10 -1.497e+10 4.871e+10 -1.631e+10 5.181e+10 -1.780e+10 5.493e+10 -1.946e+10 5.805e+10 -2.129e+10 6.116e+10 -2.327e+10 6.426e+10 -2.541e+10 6.733e+10 -2.770e+10 7.037e+10 -3.015e+10 7.337e+10 -3.274e+10 7.633e+10 -3.547e+10 7.924e+10 -3.833e+10 8.209e+10 -4.131e+10 8.489e+10 -4.440e+10 8.763e+10 -4.759e+10 9.030e+10 -5.088e+10 9.290e+10 -5.424e+10 9.543e+10 -5.768e+10 9.788e+10 -6.117e+10 1.002e+11 -6.472e+10 1.025e+11 -6.829e+10 1.047e+11 -7.189e+10 1.068e+11 -7.550e+10 1.087e+11 -7.910e+10 1.106e+11 -8.269e+10 1.123e+11 -8.625e+10 1.139e+11 -8.976e+10 1.154e+11 -9.322e+10 1.167e+11 -9.660e+10 1.179e+11 -9.990e+10 1.189e+11 -1.031e+11 1.198e+11 -1.062e+11 1.204e+11 -1.091e+11 1.209e+11 -1.119e+11 1.212e+11 -1.145e+11 1.213e+11 -1.169e+11 1.212e+11 -1.191e+11 1.209e+11 -1.211e+11 1.205e+11 -1.228e+11 1.197e+11 -1.243e+11 1.188e+11 -1.256e+11 1.177e+11 -1.265e+11 1.164e+11 -1.272e+11 1.148e+11 -1.275e+11 1.131e+11 -1.276e+11 1.112e+11 -1.273e+11 1.092e+11 -1.267e+11 1.069e+11 -1.258e+11 1.045e+11 -1.246e+11 1.020e+11 -1.231e+11 9.938e+10 -1.213e+11 9.664e+10 -1.191e+11 9.380e+10 -1.167e+11 9.089e+10 0.005 -51.627 -50.681 -49.736 -48.790 -47.845 -46.978 -46.198 -45.499 -44.876 -44.323 -43.838 -43.418 -43.060 -42.762 -42.524 -42.345 -42.222 -42.157 -42.149 -42.199 -42.308 -42.478 -42.710 -43.007 -43.371 -43.808 -44.321 -44.916 -45.602 -46.386 -47.281 -48.301 -49.466 -50.802 -52.342 -54.135 -56.242 -58.738 -61.634 -64.524 -66.102 -65.514 -63.858 -62.346 -61.246 -60.490 -59.944 -59.450 -58.835 -57.965 -56.799 -55.406 -53.899 -52.385 -50.930 -49.569 -48.315 -47.171 -46.135 -45.200 -44.362 -43.614 -42.951 -42.369 -41.864 -41.432 -41.072 -40.781 -40.557 -40.400 -40.309 -40.284 -40.326 -40.435 -40.613 -40.862 -41.185 -41.585 -42.066 -42.631 -43.286 -44.037 -44.889 -45.850 -46.925 -48.119 -49.430 -50.851 -52.357 -53.907 -55.445 -56.924 -58.352 -59.834 -61.555 -63.553 -64.808 -63.352 -59.655 -55.958 -52.829 -50.194 -47.937 -45.975 -44.247 -42.714 -41.344 -40.117 -39.014 -38.023 -37.134 -36.338 -35.629 -35.003 -34.455 -33.982 -33.583 -33.255 -32.999 -32.813 -32.699 -32.659 -32.694 -32.807 -33.003 -33.286 -33.664 -34.144 -34.737 -35.456 -36.318 -37.345 -38.564 -40.009 -41.720 -43.729 -46.008 -48.303 -49.882 -50.060 -49.406 -48.849 -48.899 -49.902 -52.298 -55.233 -52.022 -45.775 -41.063 -37.391 -34.365 -31.774 -29.499 -27.466 -25.625 -23.941 -22.390 -20.952 -19.612 -18.360 -17.184 -16.079 -15.036 -14.051 -13.120 -12.238 -11.402 -10.608 -9.856 -9.141 -8.462 -7.818 -7.206 -6.626 -6.076 -5.554 -5.061 -4.594 -4.153 -3.737 -3.346 -2.979 -2.635 -2.314 -2.015 -1.739 -1.483 -1.249 -1.036 -0.843 -0.670 -0.518 -0.385 -0.272 -0.179 -0.105 -0.051 -0.016 0.000 -0.004 -0.026 -0.068 -0.129 -0.209 -0.309 -0.429 -0.568 -0.728 -0.908 -1.109 -1.330 -1.573 -1.837 -2.123 -2.432 -2.763 -3.118 -3.496 -3.900 -4.329 -4.784 -5.266 -5.776 -6.316 -6.886 -7.488 -8.123 -8.794 -9.502 -10.249 -11.038 -11.871 -12.754 -13.688 -14.680 -15.735 -16.860 -18.062 -19.353 -20.747 -22.260 -23.916 -25.748 -27.805 -30.162 -32.945 -36.404 -41.137 -49.500 -55.513 -48.489 -43.527 -41.282 -40.099 -39.545 -39.437 -39.684 -40.232 -41.033 -42.006 -42.973 -43.604 -43.529 -42.686 -41.411 -40.043 -38.761 -37.629 -36.659 -35.843 -35.169 -34.622 -34.191 -33.867 -33.641 -33.507 -33.460 -33.496 -33.612 -33.807 -34.079 -34.427 -34.854 -35.359 -35.944 -36.613 -37.369 -38.215 -39.158 -40.202 -41.355 -42.622 -44.011 -45.524 -47.164 -48.922 -50.783 -52.721 -54.710 -56.761 -58.958 -61.464 -64.133 -64.941 -62.416 -58.636 -55.274 -52.505 -50.196 -48.234 -46.543 -45.071 -43.781 -42.645 -41.642 -40.758 -39.980 -39.296 -38.700 -38.186 -37.746 -37.378 -37.076 -36.840 -36.665 -36.551 -36.496 -36.499 -36.558 -36.675 -36.848 -37.079 -37.369 -37.717 -38.127 -38.601 -39.141 -39.750 -40.433 -41.195 -42.041 -42.980 -44.020 -45.172 -46.451 -47.874 -49.463 -51.245 -53.260 -55.557 -58.201 -61.273 -64.861 -69.007 -73.625 -79.022 -86.121 -83.319 -73.294 -67.444 -63.273 -60.015 -57.352 -55.115 -53.201 -51.545 -50.098 -48.827 -47.706 -46.716 -45.840 -45.068 -44.389 -43.795 -43.279 -42.837 -42.463 -42.154 -41.907 -41.719 -41.589 -41.514 -41.494 -41.527 -41.613 -41.751 -41.942 -42.185 -42.483 -42.834 -43.242 -43.706 -44.229 -44.814 -45.464 -46.181 -46.971 -47.826 -48.680 -49.535 -50.390 0.03 -18.4636 -18.0999 -17.7399 -17.3835 -17.0308 -16.6816 -16.3361 -15.9941 -15.6558 -15.3211 -14.99 -14.6626 -14.3387 -14.0185 -13.7019 -13.3889 -13.0795 -12.7737 -12.4715 -12.173 -11.8781 -11.5868 -11.2991 -11.015 -10.7346 -10.4577 -10.1845 -9.9149 -9.6489 -9.3865 -9.1277 -8.8726 -8.6211 -8.3731 -8.1288 -7.8882 -7.6511 -7.4176 -7.1878 -6.9616 -6.739 -6.52 -6.3046 -6.0929 -5.8847 -5.6802 -5.4793 -5.282 -5.0883 -4.8983 -4.7118 -4.529 -4.3498 -4.1742 -4.0022 -3.8338 -3.6691 -3.508 -3.3505 -3.1966 -3.0463 -2.8996 -2.7565 -2.6171 -2.4813 -2.3491 -2.2205 -2.0955 -1.9742 -1.8564 -1.7423 -1.6318 -1.5249 -1.4216 -1.322 -1.2259 -1.1335 -1.0447 -0.95949 -0.87791 -0.79994 -0.72559 -0.65486 -0.58774 -0.52424 -0.46436 -0.40809 -0.35544 -0.3064 -0.26098 -0.21917 -0.18098 -0.14641 -0.11545 -0.088112 -0.064387 -0.044277 -0.027784 -0.014907 -0.0056454 0 0.0020294 0.00044283 -0.0047597 -0.013578 -0.026013 -0.042063 -0.06173 -0.085012 -0.11191 -0.14242 -0.17655 -0.2143 -0.25566 -0.30064 -0.34924 -0.40145 -0.45727 -0.51671 -0.57977 -0.64645 -0.71674 -0.79064 -0.86816 -0.9493 -1.0341 -1.1224 -1.2144 -1.31 -1.4092 -1.5121 -1.6185 -1.7286 -1.8423 -1.9596 -2.0805 -2.205 -2.3331 -2.4649 -2.6003 -2.7393 -2.8819 -3.0281 -3.178 -3.3314 -3.4885 -3.6492 -3.8135 -3.9814 -4.1529 -4.3281 -4.5069 -4.6892 -4.8752 -5.0649 -5.2581 -5.4549 -5.6554 -5.8595 -6.0672 -6.2785 -6.4934 -6.712 -6.9341 -7.1599 -7.3893 -7.6223 -7.8589 -8.0992 -8.343 -8.5905 -8.8416 -9.0963 -9.3546 -9.6166 -9.8821 -10.1513 -10.4241 -10.7005 -10.9805 -11.2641 -11.5514 -11.8422 -12.1367 -12.4348 -12.7365 -13.0418 -13.3508 -13.6633 -13.9795 -14.2993 -14.6227 -14.9497 -15.2804 -15.6146 -15.9525 -16.294 -16.6391 -16.9878 -17.3401 -17.6961 1.0 56065.87 EW1 VV 17.1 25.24 0.050 6.516e+10 2.468e+10 6.807e+10 2.804e+10 6.924e+10 3.167e+10 6.861e+10 3.554e+10 6.622e+10 3.961e+10 6.221e+10 4.389e+10 5.679e+10 4.845e+10 5.022e+10 5.347e+10 4.273e+10 5.931e+10 3.439e+10 6.659e+10 2.493e+10 7.619e+10 1.363e+10 8.918e+10 -7.836e+08 1.068e+11 -2.012e+10 1.304e+11 -5.472e+10 1.896e+11 -9.712e+10 2.355e+11 -1.537e+11 2.929e+11 -2.278e+11 3.630e+11 -3.223e+11 4.475e+11 -4.412e+11 5.485e+11 -5.875e+11 6.675e+11 -7.654e+11 8.068e+11 -9.786e+11 9.687e+11 -1.231e+12 1.155e+12 -1.526e+12 1.369e+12 -1.869e+12 1.613e+12 -2.264e+12 1.889e+12 -2.715e+12 2.200e+12 -3.225e+12 2.548e+12 -3.800e+12 2.937e+12 -4.442e+12 3.369e+12 -5.156e+12 3.847e+12 -5.946e+12 4.373e+12 -6.813e+12 4.948e+12 -7.763e+12 5.577e+12 -8.797e+12 6.260e+12 -9.915e+12 6.999e+12 -1.112e+13 7.796e+12 -1.242e+13 8.654e+12 -1.380e+13 9.570e+12 -1.528e+13 1.055e+13 -1.684e+13 1.159e+13 -1.849e+13 1.269e+13 -2.023e+13 1.386e+13 -2.203e+13 1.509e+13 -2.393e+13 1.638e+13 -2.589e+13 1.774e+13 -2.793e+13 1.915e+13 -3.003e+13 2.062e+13 -3.218e+13 2.216e+13 -3.438e+13 2.375e+13 -3.662e+13 2.540e+13 -3.890e+13 2.712e+13 -4.119e+13 2.888e+13 -4.351e+13 3.070e+13 -4.584e+13 3.257e+13 -4.817e+13 3.449e+13 -5.048e+13 3.647e+13 -5.278e+13 3.848e+13 -5.504e+13 4.054e+13 -5.727e+13 4.264e+13 -5.946e+13 4.480e+13 -6.161e+13 4.698e+13 -6.367e+13 4.920e+13 -6.568e+13 5.144e+13 -6.760e+13 5.371e+13 -6.945e+13 5.600e+13 -7.119e+13 5.830e+13 -7.281e+13 6.062e+13 -7.433e+13 6.294e+13 -7.573e+13 6.524e+13 -7.702e+13 6.754e+13 -7.816e+13 6.982e+13 -7.917e+13 7.208e+13 -8.004e+13 7.431e+13 -8.076e+13 7.649e+13 -8.132e+13 7.863e+13 -8.173e+13 8.071e+13 -8.198e+13 8.273e+13 -8.206e+13 8.469e+13 -8.199e+13 8.657e+13 -8.175e+13 8.836e+13 -8.134e+13 9.007e+13 -8.076e+13 9.168e+13 -8.002e+13 9.319e+13 -7.912e+13 9.461e+13 -7.804e+13 9.591e+13 -7.681e+13 9.711e+13 -7.544e+13 9.819e+13 -7.391e+13 9.916e+13 -7.222e+13 1.000e+14 -7.040e+13 1.008e+14 -6.845e+13 1.014e+14 -6.638e+13 1.019e+14 -6.419e+13 1.024e+14 -6.188e+13 1.027e+14 -5.948e+13 1.029e+14 -5.698e+13 1.030e+14 -5.439e+13 1.030e+14 -5.174e+13 1.030e+14 -4.902e+13 1.028e+14 -4.623e+13 1.026e+14 -4.341e+13 1.023e+14 -4.054e+13 1.020e+14 -3.763e+13 1.015e+14 -3.470e+13 1.011e+14 -3.174e+13 1.005e+14 -2.876e+13 9.992e+13 -2.578e+13 9.928e+13 -2.279e+13 9.860e+13 -1.980e+13 9.787e+13 -1.680e+13 9.712e+13 -1.382e+13 9.632e+13 -1.085e+13 9.551e+13 -7.885e+12 9.466e+13 -4.933e+12 9.380e+13 -1.994e+12 9.292e+13 9.313e+11 9.201e+13 3.841e+12 9.110e+13 6.739e+12 9.016e+13 9.624e+12 8.924e+13 1.249e+13 8.829e+13 1.536e+13 8.733e+13 1.822e+13 8.638e+13 2.107e+13 8.543e+13 2.392e+13 8.447e+13 2.678e+13 8.352e+13 2.963e+13 8.257e+13 3.250e+13 8.162e+13 3.538e+13 8.069e+13 3.828e+13 7.975e+13 4.120e+13 7.883e+13 4.415e+13 7.791e+13 4.713e+13 7.700e+13 5.014e+13 7.609e+13 5.319e+13 7.521e+13 5.629e+13 7.431e+13 5.943e+13 7.343e+13 6.262e+13 7.257e+13 6.585e+13 7.169e+13 6.914e+13 7.084e+13 7.249e+13 6.998e+13 7.590e+13 6.913e+13 7.937e+13 6.828e+13 8.287e+13 6.742e+13 8.643e+13 6.656e+13 9.003e+13 6.569e+13 9.366e+13 6.481e+13 9.732e+13 6.393e+13 1.010e+14 6.304e+13 1.047e+14 6.212e+13 1.084e+14 6.121e+13 1.122e+14 6.027e+13 1.158e+14 5.933e+13 1.195e+14 5.837e+13 1.231e+14 5.739e+13 1.267e+14 5.640e+13 1.301e+14 5.539e+13 1.336e+14 5.438e+13 1.369e+14 5.336e+13 1.401e+14 5.233e+13 1.433e+14 5.129e+13 1.463e+14 5.024e+13 1.492e+14 4.919e+13 1.519e+14 4.814e+13 1.544e+14 4.709e+13 1.568e+14 4.604e+13 1.590e+14 4.500e+13 1.610e+14 4.397e+13 1.629e+14 4.295e+13 1.646e+14 4.194e+13 1.660e+14 4.095e+13 1.673e+14 3.999e+13 1.684e+14 3.904e+13 1.692e+14 3.813e+13 1.699e+14 3.725e+13 1.703e+14 3.639e+13 1.706e+14 3.557e+13 1.707e+14 3.480e+13 1.706e+14 3.406e+13 1.702e+14 3.336e+13 1.696e+14 3.269e+13 1.689e+14 3.206e+13 1.680e+14 3.149e+13 1.668e+14 3.095e+13 1.655e+14 3.046e+13 1.640e+14 3.003e+13 1.623e+14 2.965e+13 1.604e+14 2.931e+13 1.584e+14 2.902e+13 1.561e+14 2.877e+13 1.538e+14 2.856e+13 1.512e+14 2.840e+13 1.485e+14 2.827e+13 1.457e+14 2.817e+13 1.427e+14 2.810e+13 1.395e+14 2.806e+13 1.362e+14 2.804e+13 1.328e+14 2.802e+13 1.293e+14 2.803e+13 1.256e+14 2.804e+13 1.219e+14 2.806e+13 1.180e+14 2.806e+13 1.141e+14 2.805e+13 1.101e+14 2.805e+13 1.062e+14 2.802e+13 1.022e+14 2.798e+13 9.803e+13 2.791e+13 9.399e+13 2.782e+13 8.995e+13 2.770e+13 8.591e+13 2.755e+13 8.191e+13 2.737e+13 7.794e+13 2.717e+13 7.403e+13 2.693e+13 7.020e+13 2.666e+13 6.645e+13 2.636e+13 6.278e+13 2.604e+13 5.920e+13 2.568e+13 5.573e+13 2.530e+13 5.237e+13 2.490e+13 4.914e+13 2.447e+13 4.601e+13 2.403e+13 4.301e+13 2.357e+13 4.013e+13 2.310e+13 3.738e+13 2.261e+13 3.477e+13 2.212e+13 3.226e+13 2.161e+13 2.989e+13 2.109e+13 2.764e+13 2.058e+13 2.550e+13 2.005e+13 2.349e+13 1.952e+13 2.159e+13 1.900e+13 1.980e+13 1.847e+13 1.811e+13 1.795e+13 1.654e+13 1.744e+13 1.505e+13 1.693e+13 1.367e+13 1.642e+13 1.237e+13 1.592e+13 1.117e+13 1.544e+13 1.003e+13 1.495e+13 8.978e+12 1.448e+13 8.002e+12 1.401e+13 7.091e+12 1.355e+13 6.247e+12 1.310e+13 5.463e+12 1.266e+13 4.737e+12 1.222e+13 4.066e+12 1.179e+13 3.446e+12 1.138e+13 2.874e+12 1.096e+13 2.349e+12 1.055e+13 1.868e+12 1.015e+13 1.426e+12 9.759e+12 1.025e+12 9.365e+12 6.592e+11 8.981e+12 3.290e+11 8.602e+12 3.730e+10 9.474e+12 -2.680e+11 9.058e+12 -5.395e+11 8.647e+12 -7.784e+11 8.241e+12 -9.865e+11 7.842e+12 -1.166e+12 7.449e+12 -1.317e+12 7.065e+12 -1.443e+12 6.688e+12 -1.545e+12 6.319e+12 -1.625e+12 5.959e+12 -1.683e+12 5.607e+12 -1.722e+12 5.264e+12 -1.743e+12 4.931e+12 -1.748e+12 4.609e+12 -1.738e+12 4.298e+12 -1.716e+12 3.997e+12 -1.682e+12 3.709e+12 -1.638e+12 3.432e+12 -1.585e+12 3.167e+12 -1.525e+12 2.914e+12 -1.459e+12 2.674e+12 -1.388e+12 2.445e+12 -1.313e+12 2.229e+12 -1.235e+12 2.025e+12 -1.156e+12 1.833e+12 -1.076e+12 1.652e+12 -9.952e+11 1.483e+12 -9.153e+11 1.325e+12 -8.366e+11 1.179e+12 -7.597e+11 1.043e+12 -6.852e+11 9.177e+11 -6.135e+11 8.025e+11 -5.450e+11 6.971e+11 -4.800e+11 6.012e+11 -4.189e+11 5.144e+11 -3.618e+11 4.362e+11 -3.091e+11 3.664e+11 -2.607e+11 3.044e+11 -2.167e+11 2.497e+11 -1.773e+11 2.021e+11 -1.423e+11 1.610e+11 -1.116e+11 1.258e+11 -8.524e+10 9.618e+10 -6.295e+10 7.160e+10 -4.451e+10 5.155e+10 -2.942e+10 3.581e+10 -1.852e+10 2.325e+10 -1.009e+10 1.404e+10 -4.421e+09 7.562e+09 -1.143e+09 3.407e+09 2.933e+08 1.245e+09 1.258e+09 5.138e+08 3.356e+09 -2.516e+08 6.647e+09 -1.729e+09 1.082e+10 -3.832e+09 1.560e+10 -6.375e+09 2.075e+10 -9.188e+09 2.606e+10 -1.211e+10 3.133e+10 -1.503e+10 3.644e+10 -1.785e+10 4.125e+10 -2.048e+10 4.568e+10 -2.289e+10 4.966e+10 -2.505e+10 5.315e+10 -2.692e+10 5.613e+10 -2.851e+10 5.860e+10 -2.982e+10 6.058e+10 -3.086e+10 6.208e+10 -3.165e+10 6.314e+10 -3.221e+10 6.379e+10 -3.256e+10 6.409e+10 -3.273e+10 6.407e+10 -3.274e+10 6.377e+10 -3.260e+10 6.324e+10 -3.236e+10 6.252e+10 -3.201e+10 6.164e+10 -3.159e+10 6.064e+10 -3.111e+10 5.954e+10 -3.058e+10 5.837e+10 -3.002e+10 5.715e+10 -2.945e+10 5.590e+10 -2.887e+10 5.465e+10 -2.830e+10 5.339e+10 -2.775e+10 5.215e+10 -2.723e+10 5.093e+10 -2.675e+10 4.975e+10 -2.632e+10 4.862e+10 -2.596e+10 4.754e+10 -2.566e+10 4.652e+10 -2.545e+10 4.557e+10 -2.532e+10 4.469e+10 -2.529e+10 4.391e+10 -2.537e+10 4.322e+10 -2.557e+10 4.264e+10 -2.590e+10 4.217e+10 -2.637e+10 4.183e+10 -2.699e+10 4.163e+10 -2.777e+10 4.158e+10 -2.873e+10 4.169e+10 -2.987e+10 4.196e+10 -3.120e+10 4.241e+10 -3.273e+10 4.304e+10 -3.448e+10 4.387e+10 -3.645e+10 4.489e+10 -3.863e+10 4.611e+10 -4.105e+10 4.753e+10 -4.368e+10 4.915e+10 -4.653e+10 5.097e+10 -4.959e+10 5.298e+10 -5.283e+10 5.518e+10 -5.625e+10 5.755e+10 -5.982e+10 6.008e+10 -6.350e+10 6.274e+10 -6.727e+10 6.553e+10 -7.110e+10 6.842e+10 -7.493e+10 7.137e+10 -7.873e+10 7.436e+10 -8.247e+10 7.737e+10 -8.609e+10 8.034e+10 -8.956e+10 8.327e+10 -9.283e+10 8.610e+10 -9.588e+10 8.880e+10 -9.866e+10 9.135e+10 -1.012e+11 9.371e+10 -1.033e+11 9.585e+10 -1.051e+11 9.775e+10 -1.066e+11 9.939e+10 -1.077e+11 1.008e+11 -1.085e+11 1.018e+11 -1.088e+11 1.026e+11 -1.088e+11 1.030e+11 -1.084e+11 1.030e+11 -1.076e+11 1.028e+11 -1.065e+11 1.021e+11 -1.051e+11 1.012e+11 -1.033e+11 9.992e+10 -1.013e+11 9.833e+10 -9.898e+10 9.643e+10 -9.640e+10 9.424e+10 -9.359e+10 9.177e+10 -9.056e+10 8.905e+10 -8.734e+10 8.609e+10 -8.395e+10 8.292e+10 -8.040e+10 7.955e+10 -7.673e+10 7.601e+10 -7.295e+10 7.232e+10 -6.907e+10 6.851e+10 -6.513e+10 6.460e+10 -6.113e+10 6.062e+10 -5.711e+10 5.659e+10 -5.308e+10 5.254e+10 -4.907e+10 4.849e+10 -4.509e+10 4.447e+10 -4.117e+10 4.052e+10 -3.733e+10 3.664e+10 -3.359e+10 3.287e+10 -2.997e+10 2.923e+10 -2.649e+10 2.574e+10 -2.318e+10 2.242e+10 -2.005e+10 1.929e+10 -1.711e+10 1.638e+10 -1.439e+10 1.368e+10 -1.189e+10 1.122e+10 -9.632e+09 9.002e+09 -7.612e+09 7.032e+09 -5.838e+09 5.315e+09 -4.312e+09 3.848e+09 -3.031e+09 2.631e+09 -1.991e+09 1.659e+09 -1.184e+09 9.241e+08 -5.989e+08 4.164e+08 -2.227e+08 1.257e+08 -3.673e+07 8.146e+06 4.865e+07 -1.195e+08 2.056e+08 -3.888e+08 5.022e+08 -8.122e+08 9.211e+08 -1.375e+09 1.441e+09 -2.059e+09 2.041e+09 -2.851e+09 2.701e+09 -3.735e+09 3.404e+09 -4.693e+09 4.129e+09 -5.715e+09 4.861e+09 -6.784e+09 5.583e+09 -7.889e+09 6.283e+09 -9.019e+09 6.948e+09 -1.016e+10 7.568e+09 -1.131e+10 8.134e+09 -1.246e+10 8.640e+09 -1.360e+10 9.080e+09 -1.472e+10 9.452e+09 -1.583e+10 9.753e+09 -1.691e+10 9.984e+09 -1.796e+10 1.015e+10 -1.900e+10 1.024e+10 -2.001e+10 1.027e+10 -2.099e+10 1.023e+10 -2.195e+10 1.014e+10 -2.289e+10 9.991e+09 -2.382e+10 9.794e+09 -2.473e+10 9.552e+09 -2.563e+10 9.269e+09 -2.653e+10 8.948e+09 -2.744e+10 8.595e+09 -2.835e+10 8.211e+09 -2.927e+10 7.801e+09 -3.021e+10 7.367e+09 -3.119e+10 6.913e+09 -3.219e+10 6.439e+09 -3.323e+10 5.945e+09 -3.432e+10 5.433e+09 -3.545e+10 4.902e+09 -3.663e+10 4.353e+09 -3.786e+10 3.785e+09 -3.916e+10 3.198e+09 -4.051e+10 2.590e+09 -4.192e+10 1.960e+09 -4.340e+10 1.307e+09 -4.493e+10 6.304e+08 -4.652e+10 -7.181e+07 -4.817e+10 -8.000e+08 -4.986e+10 -1.555e+09 -5.159e+10 -2.338e+09 -5.336e+10 -3.146e+09 -5.514e+10 -3.981e+09 -5.693e+10 -4.839e+09 -5.872e+10 -5.717e+09 -6.049e+10 -6.612e+09 -6.222e+10 -7.518e+09 -6.390e+10 -8.430e+09 -6.551e+10 -9.340e+09 -6.703e+10 -1.024e+10 -6.844e+10 -1.112e+10 -6.973e+10 -1.197e+10 -7.088e+10 -1.279e+10 -7.188e+10 -1.355e+10 -7.270e+10 -1.425e+10 -7.335e+10 -1.488e+10 -7.381e+10 -1.542e+10 -7.407e+10 -1.588e+10 -7.412e+10 -1.623e+10 -7.397e+10 -1.647e+10 -7.361e+10 -1.660e+10 -7.305e+10 -1.661e+10 -7.228e+10 -1.649e+10 -7.132e+10 -1.625e+10 -7.016e+10 -1.589e+10 -6.882e+10 -1.542e+10 -6.731e+10 -1.483e+10 -6.564e+10 -1.413e+10 -6.381e+10 -1.333e+10 -6.185e+10 -1.244e+10 -5.976e+10 -1.146e+10 -5.756e+10 -1.042e+10 -5.526e+10 -9.321e+09 -5.288e+10 -8.175e+09 -5.042e+10 -6.996e+09 -4.791e+10 -5.797e+09 -4.535e+10 -4.589e+09 -4.276e+10 -3.386e+09 -4.016e+10 -2.199e+09 -3.756e+10 -1.037e+09 -3.498e+10 8.825e+07 -3.244e+10 1.170e+09 -2.994e+10 2.202e+09 -2.751e+10 3.178e+09 -2.517e+10 4.096e+09 -2.293e+10 4.959e+09 -2.080e+10 5.767e+09 -1.881e+10 6.531e+09 -1.695e+10 7.263e+09 -1.526e+10 7.979e+09 -1.371e+10 8.703e+09 -1.232e+10 9.464e+09 -1.108e+10 1.029e+10 -9.966e+09 1.122e+10 -8.958e+09 1.229e+10 -8.032e+09 1.353e+10 -7.156e+09 1.496e+10 -6.302e+09 1.662e+10 -5.446e+09 1.850e+10 -4.567e+09 2.063e+10 -3.652e+09 2.301e+10 -2.696e+09 2.563e+10 -1.698e+09 2.848e+10 -6.642e+08 3.155e+10 3.935e+08 3.484e+10 1.458e+09 3.833e+10 2.518e+09 4.200e+10 3.552e+09 4.582e+10 4.543e+09 4.977e+10 5.472e+09 5.384e+10 6.321e+09 5.798e+10 7.072e+09 6.218e+10 7.713e+09 6.642e+10 8.228e+09 7.065e+10 8.609e+09 7.486e+10 8.848e+09 7.902e+10 8.940e+09 8.311e+10 8.882e+09 8.710e+10 8.675e+09 9.098e+10 8.321e+09 9.472e+10 7.822e+09 9.832e+10 7.185e+09 1.018e+11 6.415e+09 1.050e+11 5.519e+09 1.081e+11 4.505e+09 1.110e+11 3.380e+09 1.137e+11 2.151e+09 1.163e+11 8.239e+08 1.186e+11 -5.941e+08 1.208e+11 -2.097e+09 1.228e+11 -3.683e+09 1.247e+11 -5.346e+09 1.264e+11 -7.083e+09 1.279e+11 -8.895e+09 1.293e+11 -1.078e+10 1.305e+11 -1.273e+10 1.316e+11 -1.476e+10 1.326e+11 -1.685e+10 1.334e+11 -1.902e+10 1.342e+11 -2.125e+10 1.348e+11 -2.356e+10 1.353e+11 -2.593e+10 1.357e+11 -2.836e+10 1.359e+11 -3.086e+10 1.361e+11 -3.340e+10 1.361e+11 -3.598e+10 1.360e+11 -3.860e+10 1.358e+11 -4.124e+10 1.354e+11 -4.390e+10 1.349e+11 -4.657e+10 1.343e+11 -4.922e+10 1.334e+11 -5.184e+10 1.324e+11 -5.441e+10 1.312e+11 -5.691e+10 1.299e+11 -5.932e+10 1.283e+11 -6.162e+10 1.266e+11 -6.379e+10 1.247e+11 -6.580e+10 1.226e+11 -6.764e+10 1.203e+11 -6.928e+10 1.179e+11 -7.071e+10 1.152e+11 -7.192e+10 1.124e+11 -7.289e+10 1.095e+11 -7.360e+10 1.065e+11 -7.406e+10 1.033e+11 0.005 -51.974 -50.954 -49.934 -48.914 -47.894 -46.958 -46.113 -45.354 -44.672 -44.064 -43.525 -43.052 -42.642 -42.292 -42.002 -41.769 -41.592 -41.471 -41.405 -41.395 -41.441 -41.543 -41.703 -41.922 -42.203 -42.547 -42.959 -43.441 -43.998 -44.637 -45.363 -46.186 -47.116 -48.166 -49.352 -50.696 -52.224 -53.972 -55.981 -58.292 -60.903 -63.598 -65.658 -66.234 -65.499 -64.361 -63.305 -62.352 -61.356 -60.171 -58.746 -57.134 -55.441 -53.766 -52.171 -50.685 -49.320 -48.075 -46.946 -45.927 -45.009 -44.187 -43.454 -42.805 -42.235 -41.742 -41.321 -40.969 -40.686 -40.470 -40.320 -40.234 -40.215 -40.260 -40.372 -40.552 -40.803 -41.125 -41.522 -41.996 -42.552 -43.192 -43.921 -44.742 -45.657 -46.664 -47.755 -48.911 -50.093 -51.240 -52.262 -53.067 -53.590 -53.825 -53.814 -53.604 -53.212 -52.621 -51.801 -50.749 -49.502 -48.129 -46.703 -45.283 -43.911 -42.611 -41.394 -40.264 -39.223 -38.268 -37.398 -36.608 -35.897 -35.261 -34.698 -34.207 -33.785 -33.433 -33.150 -32.936 -32.792 -32.720 -32.721 -32.798 -32.956 -33.199 -33.534 -33.969 -34.512 -35.178 -35.982 -36.945 -38.093 -39.459 -41.080 -42.984 -45.140 -47.289 -48.689 -48.640 -47.691 -46.730 -46.194 -46.282 -47.227 -49.585 -54.238 -57.085 -47.870 -41.981 -37.838 -34.579 -31.858 -29.504 -27.422 -25.549 -23.845 -22.280 -20.834 -19.490 -18.235 -17.059 -15.954 -14.914 -13.932 -13.003 -12.124 -11.292 -10.503 -9.754 -9.043 -8.369 -7.729 -7.121 -6.545 -5.999 -5.481 -4.992 -4.529 -4.092 -3.680 -3.293 -2.929 -2.589 -2.271 -1.976 -1.703 -1.451 -1.220 -1.009 -0.820 -0.650 -0.500 -0.370 -0.260 -0.170 -0.098 -0.046 -0.014 0.000 -0.006 -0.030 -0.073 -0.135 -0.217 -0.318 -0.439 -0.580 -0.740 -0.921 -1.122 -1.343 -1.586 -1.850 -2.135 -2.442 -2.772 -3.125 -3.502 -3.902 -4.328 -4.779 -5.256 -5.761 -6.294 -6.857 -7.450 -8.076 -8.735 -9.429 -10.161 -10.932 -11.745 -12.602 -13.508 -14.466 -15.480 -16.555 -17.698 -18.916 -20.218 -21.615 -23.121 -24.753 -26.533 -28.490 -30.660 -33.087 -35.811 -38.807 -41.766 -43.770 -44.093 -43.415 -42.665 -42.222 -42.147 -42.418 -42.984 -43.757 -44.555 -45.040 -44.838 -43.884 -42.509 -41.051 -39.687 -38.480 -37.441 -36.561 -35.826 -35.222 -34.737 -34.361 -34.085 -33.901 -33.806 -33.794 -33.863 -34.010 -34.233 -34.533 -34.908 -35.360 -35.890 -36.500 -37.193 -37.971 -38.838 -39.799 -40.857 -42.015 -43.276 -44.639 -46.094 -47.623 -49.189 -50.736 -52.190 -53.474 -54.533 -55.330 -55.812 -55.876 -55.400 -54.367 -52.920 -51.275 -49.602 -48.003 -46.519 -45.166 -43.941 -42.839 -41.850 -40.966 -40.178 -39.480 -38.865 -38.329 -37.865 -37.471 -37.142 -36.877 -36.672 -36.527 -36.440 -36.409 -36.434 -36.515 -36.651 -36.842 -37.090 -37.395 -37.758 -38.182 -38.669 -39.221 -39.843 -40.538 -41.311 -42.169 -43.119 -44.172 -45.338 -46.632 -48.074 -49.686 -51.504 -53.572 -55.954 -58.746 -62.099 -66.280 -71.819 -80.077 -92.832 -95.264 -84.671 -75.527 -69.356 -64.882 -61.411 -58.600 -56.260 -54.273 -52.562 -51.076 -49.776 -48.634 -47.629 -46.744 -45.966 -45.285 -44.692 -44.180 -43.743 -43.377 -43.078 -42.843 -42.670 -42.555 -42.498 -42.497 -42.551 -42.661 -42.825 -43.045 -43.320 -43.652 -44.042 -44.491 -45.001 -45.576 -46.218 -46.931 -47.719 -48.577 -49.434 -50.291 -51.149 0.03 -19.1745 -18.7977 -18.4246 -18.0552 -17.6896 -17.3277 -16.9696 -16.6152 -16.2645 -15.9176 -15.5744 -15.235 -14.8993 -14.5673 -14.2391 -13.9146 -13.5938 -13.2768 -12.9636 -12.654 -12.3482 -12.0462 -11.7479 -11.4533 -11.1625 -10.8754 -10.592 -10.3124 -10.0365 -9.7644 -9.496 -9.2313 -8.9704 -8.7132 -8.4598 -8.2101 -7.9641 -7.7219 -7.4834 -7.2486 -7.0176 -6.7904 -6.5668 -6.3471 -6.131 -5.9187 -5.7101 -5.5053 -5.3042 -5.1068 -4.9132 -4.7234 -4.5372 -4.3548 -4.1762 -4.0012 -3.8301 -3.6626 -3.4989 -3.339 -3.1827 -3.0303 -2.8815 -2.7365 -2.5952 -2.4577 -2.3239 -2.1939 -2.0676 -1.945 -1.8262 -1.7111 -1.5997 -1.4921 -1.3882 -1.2881 -1.1917 -1.0991 -1.0101 -0.92496 -0.84352 -0.76583 -0.69187 -0.62165 -0.55516 -0.49242 -0.43342 -0.37816 -0.32663 -0.27885 -0.2348 -0.19449 -0.15793 -0.1251 -0.09601 -0.07066 -0.04905 -0.031178 -0.017046 -0.0066536 0 0.0029144 0.0020895 -0.0024746 -0.010778 -0.02282 -0.038602 -0.058123 -0.081383 -0.10838 -0.13912 -0.1736 -0.21182 -0.25377 -0.29947 -0.3489 -0.40208 -0.45899 -0.51964 -0.58403 -0.65217 -0.72404 -0.79964 -0.87899 -0.96208 -1.0489 -1.1395 -1.2338 -1.3318 -1.4336 -1.5391 -1.6484 -1.7614 -1.8781 -1.9986 -2.1228 -2.2508 -2.3825 -2.5179 -2.6571 -2.8 -2.9467 -3.0971 -3.2512 -3.4091 -3.5707 -3.736 -3.9051 -4.078 -4.2545 -4.4348 -4.6189 -4.8067 -4.9982 -5.1935 -5.3925 -5.5952 -5.8017 -6.0119 -6.2259 -6.4436 -6.665 -6.8902 -7.1191 -7.3518 -7.5882 -7.8283 -8.0722 -8.3198 -8.5711 -8.8262 -9.0851 -9.3476 -9.6139 -9.884 -10.1578 -10.4353 -10.7166 -11.0016 -11.2903 -11.5828 -11.879 -12.179 -12.4827 -12.7901 -13.1013 -13.4162 -13.7349 -14.0573 -14.3834 -14.7133 -15.0469 -15.3843 -15.7254 -16.0702 -16.4188 -16.7711 -17.1271 -17.4869 -17.8505 -18.2177 1.0 56065.87 EW1 VH 17.1 25.24 0.050 2.493e+10 4.919e+10 2.573e+10 5.476e+10 2.515e+10 5.946e+10 2.311e+10 6.318e+10 1.959e+10 6.588e+10 1.465e+10 6.759e+10 8.372e+09 6.849e+10 7.778e+08 6.885e+10 -8.208e+09 6.908e+10 -1.896e+10 6.968e+10 -3.226e+10 7.112e+10 -4.940e+10 7.377e+10 -7.222e+10 7.771e+10 -1.030e+11 8.273e+10 -1.460e+11 8.929e+10 -2.017e+11 9.474e+10 -2.743e+11 9.913e+10 -3.668e+11 1.016e+11 -4.829e+11 1.012e+11 -6.263e+11 9.697e+10 -8.008e+11 8.803e+10 -1.011e+12 7.346e+10 -1.260e+12 5.233e+10 -1.554e+12 2.379e+10 -1.897e+12 -1.297e+10 -2.294e+12 -5.881e+10 -2.750e+12 -1.143e+11 -3.268e+12 -1.803e+11 -3.857e+12 -2.571e+11 -4.520e+12 -3.454e+11 -5.261e+12 -4.452e+11 -6.086e+12 -5.569e+11 -6.999e+12 -6.804e+11 -8.004e+12 -8.156e+11 -9.107e+12 -9.623e+11 -1.031e+13 -1.119e+12 -1.162e+13 -1.288e+12 -1.303e+13 -1.464e+12 -1.455e+13 -1.649e+12 -1.618e+13 -1.840e+12 -1.793e+13 -2.036e+12 -1.978e+13 -2.235e+12 -2.175e+13 -2.435e+12 -2.383e+13 -2.632e+12 -2.602e+13 -2.826e+12 -2.830e+13 -3.012e+12 -3.069e+13 -3.187e+12 -3.319e+13 -3.348e+12 -3.578e+13 -3.491e+12 -3.844e+13 -3.613e+12 -4.120e+13 -3.710e+12 -4.403e+13 -3.776e+12 -4.693e+13 -3.809e+12 -4.988e+13 -3.804e+12 -5.289e+13 -3.756e+12 -5.594e+13 -3.661e+12 -5.903e+13 -3.515e+12 -6.213e+13 -3.315e+12 -6.526e+13 -3.055e+12 -6.840e+13 -2.732e+12 -7.152e+13 -2.343e+12 -7.464e+13 -1.886e+12 -7.773e+13 -1.355e+12 -8.079e+13 -7.495e+11 -8.380e+13 -6.643e+10 -8.677e+13 6.971e+11 -8.966e+13 1.541e+12 -9.247e+13 2.466e+12 -9.520e+13 3.476e+12 -9.784e+13 4.569e+12 -1.004e+14 5.742e+12 -1.028e+14 6.998e+12 -1.051e+14 8.332e+12 -1.072e+14 9.743e+12 -1.092e+14 1.123e+13 -1.111e+14 1.279e+13 -1.128e+14 1.442e+13 -1.143e+14 1.611e+13 -1.156e+14 1.785e+13 -1.168e+14 1.966e+13 -1.178e+14 2.151e+13 -1.186e+14 2.342e+13 -1.192e+14 2.535e+13 -1.196e+14 2.732e+13 -1.198e+14 2.932e+13 -1.197e+14 3.133e+13 -1.195e+14 3.336e+13 -1.191e+14 3.539e+13 -1.185e+14 3.743e+13 -1.177e+14 3.946e+13 -1.167e+14 4.149e+13 -1.155e+14 4.349e+13 -1.140e+14 4.547e+13 -1.124e+14 4.742e+13 -1.107e+14 4.934e+13 -1.088e+14 5.123e+13 -1.067e+14 5.306e+13 -1.045e+14 5.485e+13 -1.021e+14 5.659e+13 -9.967e+13 5.827e+13 -9.709e+13 5.991e+13 -9.440e+13 6.149e+13 -9.163e+13 6.301e+13 -8.879e+13 6.448e+13 -8.585e+13 6.588e+13 -8.286e+13 6.723e+13 -7.982e+13 6.852e+13 -7.672e+13 6.974e+13 -7.359e+13 7.092e+13 -7.042e+13 7.205e+13 -6.724e+13 7.312e+13 -6.404e+13 7.414e+13 -6.082e+13 7.511e+13 -5.760e+13 7.604e+13 -5.438e+13 7.692e+13 -5.116e+13 7.778e+13 -4.794e+13 7.859e+13 -4.473e+13 7.937e+13 -4.152e+13 8.012e+13 -3.832e+13 8.084e+13 -3.514e+13 8.154e+13 -3.195e+13 8.222e+13 -2.876e+13 8.288e+13 -2.558e+13 8.354e+13 -2.240e+13 8.418e+13 -1.922e+13 8.481e+13 -1.602e+13 8.544e+13 -1.283e+13 8.607e+13 -9.610e+12 8.669e+13 -6.379e+12 8.732e+13 -3.128e+12 8.795e+13 1.505e+11 8.858e+13 3.459e+12 8.924e+13 6.799e+12 8.989e+13 1.018e+13 9.055e+13 1.360e+13 9.122e+13 1.707e+13 9.189e+13 2.057e+13 9.258e+13 2.414e+13 9.329e+13 2.776e+13 9.399e+13 3.143e+13 9.470e+13 3.518e+13 9.542e+13 3.897e+13 9.616e+13 4.282e+13 9.689e+13 4.673e+13 9.761e+13 5.069e+13 9.832e+13 5.469e+13 9.902e+13 5.874e+13 9.971e+13 6.282e+13 1.004e+14 6.693e+13 1.010e+14 7.105e+13 1.016e+14 7.520e+13 1.021e+14 7.935e+13 1.027e+14 8.348e+13 1.032e+14 8.761e+13 1.037e+14 9.170e+13 1.041e+14 9.576e+13 1.044e+14 9.977e+13 1.047e+14 1.037e+14 1.050e+14 1.076e+14 1.052e+14 1.113e+14 1.052e+14 1.150e+14 1.053e+14 1.186e+14 1.053e+14 1.221e+14 1.053e+14 1.255e+14 1.051e+14 1.286e+14 1.050e+14 1.316e+14 1.047e+14 1.345e+14 1.044e+14 1.373e+14 1.041e+14 1.397e+14 1.036e+14 1.421e+14 1.032e+14 1.443e+14 1.025e+14 1.463e+14 1.019e+14 1.481e+14 1.013e+14 1.495e+14 1.006e+14 1.509e+14 9.982e+13 1.521e+14 9.907e+13 1.530e+14 9.824e+13 1.537e+14 9.736e+13 1.542e+14 9.645e+13 1.544e+14 9.550e+13 1.544e+14 9.450e+13 1.542e+14 9.346e+13 1.538e+14 9.240e+13 1.532e+14 9.131e+13 1.523e+14 9.019e+13 1.513e+14 8.906e+13 1.500e+14 8.790e+13 1.485e+14 8.672e+13 1.467e+14 8.552e+13 1.447e+14 8.430e+13 1.426e+14 8.307e+13 1.402e+14 8.181e+13 1.377e+14 8.054e+13 1.350e+14 7.925e+13 1.323e+14 7.794e+13 1.293e+14 7.661e+13 1.261e+14 7.526e+13 1.228e+14 7.389e+13 1.194e+14 7.250e+13 1.158e+14 7.109e+13 1.122e+14 6.967e+13 1.084e+14 6.822e+13 1.046e+14 6.675e+13 1.008e+14 6.527e+13 9.694e+13 6.376e+13 9.303e+13 6.224e+13 8.910e+13 6.071e+13 8.518e+13 5.916e+13 8.126e+13 5.761e+13 7.736e+13 5.605e+13 7.351e+13 5.447e+13 6.971e+13 5.289e+13 6.596e+13 5.131e+13 6.229e+13 4.973e+13 5.869e+13 4.816e+13 5.519e+13 4.660e+13 5.178e+13 4.504e+13 4.848e+13 4.350e+13 4.528e+13 4.197e+13 4.220e+13 4.047e+13 3.924e+13 3.899e+13 3.640e+13 3.753e+13 3.369e+13 3.611e+13 3.110e+13 3.471e+13 2.863e+13 3.335e+13 2.629e+13 3.201e+13 2.406e+13 3.071e+13 2.196e+13 2.944e+13 1.997e+13 2.821e+13 1.812e+13 2.702e+13 1.636e+13 2.587e+13 1.473e+13 2.475e+13 1.319e+13 2.367e+13 1.176e+13 2.263e+13 1.043e+13 2.164e+13 9.194e+12 2.067e+13 8.046e+12 1.975e+13 6.985e+12 1.887e+13 6.003e+12 1.802e+13 5.097e+12 1.721e+13 4.264e+12 1.644e+13 3.497e+12 1.569e+13 2.794e+12 1.498e+13 2.150e+12 1.430e+13 1.562e+12 1.365e+13 1.025e+12 1.302e+13 5.387e+11 1.243e+13 9.686e+10 1.185e+13 -3.019e+11 1.131e+13 -6.603e+11 1.078e+13 -9.813e+11 1.027e+13 -1.266e+12 9.780e+12 -1.518e+12 9.307e+12 -1.738e+12 8.851e+12 -1.949e+12 8.503e+12 -2.113e+12 8.072e+12 -2.250e+12 7.655e+12 -2.361e+12 7.251e+12 -2.448e+12 6.860e+12 -2.512e+12 6.481e+12 -2.556e+12 6.116e+12 -2.580e+12 5.762e+12 -2.585e+12 5.420e+12 -2.574e+12 5.090e+12 -2.546e+12 4.770e+12 -2.504e+12 4.462e+12 -2.450e+12 4.165e+12 -2.384e+12 3.880e+12 -2.307e+12 3.605e+12 -2.222e+12 3.343e+12 -2.130e+12 3.092e+12 -2.032e+12 2.852e+12 -1.928e+12 2.624e+12 -1.821e+12 2.407e+12 -1.712e+12 2.202e+12 -1.601e+12 2.008e+12 -1.491e+12 1.825e+12 -1.380e+12 1.654e+12 -1.272e+12 1.493e+12 -1.165e+12 1.343e+12 -1.062e+12 1.203e+12 -9.620e+11 1.073e+12 -8.664e+11 9.529e+11 -7.752e+11 8.423e+11 -6.891e+11 7.409e+11 -6.082e+11 6.483e+11 -5.326e+11 5.639e+11 -4.626e+11 4.875e+11 -3.982e+11 4.187e+11 -3.394e+11 3.569e+11 -2.861e+11 3.019e+11 -2.383e+11 2.532e+11 -1.957e+11 2.102e+11 -1.582e+11 1.727e+11 -1.256e+11 1.402e+11 -9.751e+10 1.122e+11 -7.376e+10 8.845e+10 -5.400e+10 6.847e+10 -3.789e+10 5.186e+10 -2.538e+10 3.832e+10 -1.566e+10 2.755e+10 -8.435e+09 1.914e+10 -3.475e+09 1.286e+10 -3.032e+08 8.463e+09 1.709e+09 5.691e+09 3.386e+09 4.173e+09 5.491e+09 3.305e+09 8.352e+09 2.514e+09 1.191e+10 1.511e+09 1.601e+10 2.236e+08 2.045e+10 -1.320e+09 2.505e+10 -3.053e+09 2.968e+10 -4.907e+09 3.420e+10 -6.820e+09 3.850e+10 -8.733e+09 4.251e+10 -1.060e+10 4.617e+10 -1.239e+10 4.942e+10 -1.408e+10 5.224e+10 -1.564e+10 5.462e+10 -1.706e+10 5.655e+10 -1.835e+10 5.804e+10 -1.950e+10 5.912e+10 -2.052e+10 5.981e+10 -2.142e+10 6.013e+10 -2.219e+10 6.014e+10 -2.287e+10 5.987e+10 -2.346e+10 5.935e+10 -2.397e+10 5.864e+10 -2.441e+10 5.776e+10 -2.481e+10 5.677e+10 -2.518e+10 5.569e+10 -2.552e+10 5.457e+10 -2.585e+10 5.343e+10 -2.618e+10 5.230e+10 -2.653e+10 5.121e+10 -2.690e+10 5.019e+10 -2.731e+10 4.925e+10 -2.776e+10 4.841e+10 -2.826e+10 4.769e+10 -2.882e+10 4.710e+10 -2.946e+10 4.666e+10 -3.017e+10 4.636e+10 -3.096e+10 4.622e+10 -3.184e+10 4.623e+10 -3.281e+10 4.641e+10 -3.388e+10 4.676e+10 -3.505e+10 4.727e+10 -3.631e+10 4.796e+10 -3.769e+10 4.881e+10 -3.916e+10 4.984e+10 -4.075e+10 5.104e+10 -4.244e+10 5.240e+10 -4.423e+10 5.393e+10 -4.613e+10 5.562e+10 -4.813e+10 5.747e+10 -5.022e+10 5.946e+10 -5.240e+10 6.160e+10 -5.466e+10 6.387e+10 -5.701e+10 6.625e+10 -5.942e+10 6.874e+10 -6.188e+10 7.133e+10 -6.440e+10 7.400e+10 -6.695e+10 7.673e+10 -6.952e+10 7.950e+10 -7.211e+10 8.229e+10 -7.468e+10 8.508e+10 -7.723e+10 8.786e+10 -7.975e+10 9.059e+10 -8.220e+10 9.326e+10 -8.458e+10 9.583e+10 -8.686e+10 9.829e+10 -8.903e+10 1.006e+11 -9.106e+10 1.028e+11 -9.294e+10 1.048e+11 -9.464e+10 1.065e+11 -9.615e+10 1.081e+11 -9.745e+10 1.094e+11 -9.852e+10 1.104e+11 -9.934e+10 1.112e+11 -9.991e+10 1.117e+11 -1.002e+11 1.119e+11 -1.002e+11 1.117e+11 -9.992e+10 1.113e+11 -9.933e+10 1.105e+11 -9.843e+10 1.094e+11 -9.723e+10 1.079e+11 -9.573e+10 1.061e+11 -9.393e+10 1.040e+11 -9.184e+10 1.016e+11 -8.947e+10 9.885e+10 -8.684e+10 9.583e+10 -8.396e+10 9.255e+10 -8.086e+10 8.902e+10 -7.756e+10 8.528e+10 -7.407e+10 8.133e+10 -7.044e+10 7.722e+10 -6.668e+10 7.297e+10 -6.283e+10 6.862e+10 -5.892e+10 6.419e+10 -5.497e+10 5.972e+10 -5.101e+10 5.524e+10 -4.708e+10 5.079e+10 -4.320e+10 4.640e+10 -3.939e+10 4.209e+10 -3.569e+10 3.790e+10 -3.211e+10 3.386e+10 -2.868e+10 2.998e+10 -2.540e+10 2.630e+10 -2.230e+10 2.282e+10 -1.939e+10 1.958e+10 -1.668e+10 1.657e+10 -1.417e+10 1.382e+10 -1.187e+10 1.132e+10 -9.790e+09 9.079e+09 -7.922e+09 7.104e+09 -6.268e+09 5.389e+09 -4.826e+09 3.928e+09 -3.588e+09 2.717e+09 -2.550e+09 1.746e+09 -1.704e+09 1.003e+09 -1.042e+09 4.788e+08 -5.544e+08 1.578e+08 -2.308e+08 1.467e+07 -6.364e+07 -8.309e+07 6.036e+06 -2.881e+08 1.137e+08 -6.395e+08 3.273e+08 -1.121e+09 6.427e+08 -1.719e+09 1.048e+09 -2.417e+09 1.529e+09 -3.203e+09 2.075e+09 -4.061e+09 2.670e+09 -4.981e+09 3.304e+09 -5.950e+09 3.962e+09 -6.957e+09 4.634e+09 -7.992e+09 5.307e+09 -9.045e+09 5.972e+09 -1.011e+10 6.616e+09 -1.117e+10 7.232e+09 -1.223e+10 7.811e+09 -1.327e+10 8.346e+09 -1.430e+10 8.831e+09 -1.531e+10 9.261e+09 -1.629e+10 9.632e+09 -1.724e+10 9.942e+09 -1.816e+10 1.019e+10 -1.905e+10 1.037e+10 -1.990e+10 1.049e+10 -2.072e+10 1.056e+10 -2.150e+10 1.056e+10 -2.225e+10 1.051e+10 -2.298e+10 1.041e+10 -2.367e+10 1.026e+10 -2.434e+10 1.007e+10 -2.499e+10 9.845e+09 -2.562e+10 9.589e+09 -2.623e+10 9.305e+09 -2.684e+10 9.000e+09 -2.745e+10 8.677e+09 -2.807e+10 8.343e+09 -2.869e+10 8.001e+09 -2.934e+10 7.655e+09 -3.000e+10 7.307e+09 -3.068e+10 6.959e+09 -3.140e+10 6.614e+09 -3.215e+10 6.275e+09 -3.294e+10 5.943e+09 -3.377e+10 5.619e+09 -3.464e+10 5.306e+09 -3.556e+10 5.003e+09 -3.654e+10 4.712e+09 -3.756e+10 4.432e+09 -3.863e+10 4.166e+09 -3.976e+10 3.914e+09 -4.093e+10 3.676e+09 -4.215e+10 3.453e+09 -4.340e+10 3.245e+09 -4.469e+10 3.054e+09 -4.601e+10 2.882e+09 -4.735e+10 2.728e+09 -4.870e+10 2.596e+09 -5.005e+10 2.487e+09 -5.139e+10 2.403e+09 -5.271e+10 2.347e+09 -5.398e+10 2.321e+09 -5.521e+10 2.329e+09 -5.636e+10 2.372e+09 -5.744e+10 2.455e+09 -5.842e+10 2.581e+09 -5.930e+10 2.751e+09 -6.006e+10 2.969e+09 -6.068e+10 3.237e+09 -6.116e+10 3.558e+09 -6.149e+10 3.932e+09 -6.166e+10 4.361e+09 -6.166e+10 4.844e+09 -6.150e+10 5.382e+09 -6.118e+10 5.973e+09 -6.068e+10 6.615e+09 -6.003e+10 7.306e+09 -5.922e+10 8.039e+09 -5.826e+10 8.815e+09 -5.716e+10 9.628e+09 -5.593e+10 1.047e+10 -5.458e+10 1.135e+10 -5.313e+10 1.225e+10 -5.158e+10 1.317e+10 -4.996e+10 1.410e+10 -4.828e+10 1.505e+10 -4.655e+10 1.600e+10 -4.479e+10 1.696e+10 -4.300e+10 1.793e+10 -4.122e+10 1.890e+10 -3.944e+10 1.987e+10 -3.767e+10 2.086e+10 -3.594e+10 2.186e+10 -3.424e+10 2.288e+10 -3.258e+10 2.392e+10 -3.097e+10 2.499e+10 -2.941e+10 2.610e+10 -2.790e+10 2.726e+10 -2.644e+10 2.847e+10 -2.503e+10 2.975e+10 -2.366e+10 3.111e+10 -2.233e+10 3.254e+10 -2.103e+10 3.407e+10 -1.976e+10 3.569e+10 -1.851e+10 3.740e+10 -1.727e+10 3.922e+10 -1.604e+10 4.115e+10 -1.482e+10 4.317e+10 -1.359e+10 4.530e+10 -1.236e+10 4.752e+10 -1.113e+10 4.983e+10 -9.890e+09 5.223e+10 -8.650e+09 5.470e+10 -7.413e+09 5.724e+10 -6.182e+09 5.983e+10 -4.962e+09 6.246e+10 -3.761e+09 6.513e+10 -2.591e+09 6.783e+10 -1.454e+09 7.053e+10 -3.590e+08 7.323e+10 6.873e+08 7.590e+10 1.678e+09 7.855e+10 2.603e+09 8.114e+10 3.457e+09 8.367e+10 4.235e+09 8.614e+10 4.929e+09 8.852e+10 5.535e+09 9.080e+10 6.050e+09 9.298e+10 6.471e+09 9.505e+10 6.796e+09 9.701e+10 7.024e+09 9.884e+10 7.156e+09 1.005e+11 7.191e+09 1.021e+11 7.132e+09 1.035e+11 6.980e+09 1.049e+11 6.738e+09 1.060e+11 6.409e+09 1.071e+11 5.997e+09 1.080e+11 5.504e+09 1.088e+11 4.935e+09 1.094e+11 4.292e+09 1.100e+11 3.582e+09 1.104e+11 2.805e+09 1.108e+11 1.967e+09 1.110e+11 1.071e+09 1.112e+11 1.202e+08 1.112e+11 -8.825e+08 1.112e+11 -1.933e+09 1.112e+11 -3.029e+09 1.110e+11 -4.167e+09 1.109e+11 -5.342e+09 1.106e+11 -6.553e+09 1.103e+11 -7.797e+09 1.100e+11 -9.067e+09 1.096e+11 -1.036e+10 1.092e+11 -1.168e+10 1.087e+11 -1.300e+10 1.082e+11 -1.433e+10 1.077e+11 -1.566e+10 1.071e+11 -1.699e+10 1.065e+11 -1.831e+10 1.058e+11 -1.962e+10 1.051e+11 -2.091e+10 1.043e+11 -2.218e+10 1.035e+11 -2.340e+10 1.026e+11 -2.459e+10 1.016e+11 -2.572e+10 1.006e+11 -2.680e+10 9.947e+10 -2.781e+10 9.828e+10 -2.875e+10 9.701e+10 -2.962e+10 9.565e+10 -3.039e+10 9.421e+10 -3.108e+10 9.269e+10 -3.167e+10 9.108e+10 -3.216e+10 8.938e+10 -3.255e+10 8.761e+10 -3.284e+10 8.575e+10 0.005 -51.910 -50.944 -49.978 -49.012 -48.046 -47.161 -46.365 -45.650 -45.013 -44.447 -43.949 -43.517 -43.147 -42.839 -42.590 -42.400 -42.268 -42.194 -42.177 -42.218 -42.319 -42.480 -42.703 -42.990 -43.345 -43.771 -44.271 -44.852 -45.520 -46.282 -47.148 -48.129 -49.241 -50.501 -51.935 -53.571 -55.451 -57.629 -60.175 -63.173 -66.691 -70.635 -74.507 -77.863 -80.544 -78.856 -72.796 -67.154 -62.849 -59.422 -56.588 -54.184 -52.106 -50.287 -48.679 -47.249 -45.969 -44.822 -43.792 -42.866 -42.037 -41.294 -40.633 -40.049 -39.536 -39.091 -38.712 -38.397 -38.144 -37.951 -37.818 -37.745 -37.732 -37.778 -37.886 -38.055 -38.289 -38.589 -38.956 -39.395 -39.908 -40.500 -41.174 -41.936 -42.790 -43.741 -44.792 -45.943 -47.188 -48.507 -49.862 -51.184 -52.371 -53.303 -53.884 -54.075 -53.888 -53.353 -52.500 -51.366 -50.016 -48.535 -47.002 -45.482 -44.016 -42.629 -41.332 -40.128 -39.018 -37.998 -37.067 -36.219 -35.452 -34.762 -34.147 -33.604 -33.131 -32.728 -32.392 -32.125 -31.925 -31.795 -31.735 -31.747 -31.835 -32.002 -32.253 -32.594 -33.034 -33.581 -34.251 -35.058 -36.027 -37.189 -38.587 -40.288 -42.396 -45.087 -48.700 -53.879 -59.370 -56.304 -52.714 -51.060 -50.941 -52.592 -56.745 -59.221 -49.720 -43.604 -39.278 -35.866 -33.017 -30.554 -28.378 -26.423 -24.647 -23.019 -21.515 -20.120 -18.819 -17.602 -16.459 -15.383 -14.369 -13.411 -12.505 -11.647 -10.834 -10.064 -9.333 -8.639 -7.981 -7.356 -6.764 -6.203 -5.671 -5.168 -4.693 -4.244 -3.821 -3.423 -3.049 -2.699 -2.372 -2.068 -1.786 -1.525 -1.287 -1.069 -0.872 -0.695 -0.539 -0.403 -0.287 -0.191 -0.114 -0.056 -0.018 0.000 -0.001 -0.020 -0.059 -0.118 -0.196 -0.293 -0.410 -0.548 -0.705 -0.882 -1.080 -1.299 -1.539 -1.800 -2.083 -2.388 -2.716 -3.067 -3.441 -3.840 -4.264 -4.714 -5.190 -5.694 -6.227 -6.789 -7.381 -8.007 -8.666 -9.360 -10.092 -10.864 -11.678 -12.537 -13.445 -14.405 -15.421 -16.500 -17.647 -18.869 -20.176 -21.579 -23.092 -24.731 -26.521 -28.488 -30.670 -33.112 -35.853 -38.867 -41.849 -43.879 -44.232 -43.587 -42.875 -42.472 -42.435 -42.728 -43.269 -43.910 -44.379 -44.322 -43.568 -42.302 -40.855 -39.446 -38.168 -37.046 -36.080 -35.260 -34.571 -34.002 -33.543 -33.183 -32.917 -32.737 -32.639 -32.619 -32.675 -32.804 -33.004 -33.276 -33.619 -34.034 -34.521 -35.084 -35.724 -36.444 -37.250 -38.146 -39.139 -40.236 -41.446 -42.780 -44.250 -45.871 -47.655 -49.615 -51.753 -54.051 -56.436 -58.735 -60.629 -61.704 -61.680 -60.622 -58.878 -56.834 -54.758 -52.789 -50.983 -49.354 -47.895 -46.595 -45.440 -44.417 -43.514 -42.720 -42.028 -41.429 -40.917 -40.487 -40.136 -39.858 -39.652 -39.516 -39.448 -39.447 -39.512 -39.643 -39.841 -40.107 -40.442 -40.848 -41.329 -41.889 -42.531 -43.263 -44.090 -45.021 -46.068 -47.243 -48.560 -50.038 -51.692 -53.535 -55.553 -57.669 -59.682 -61.255 -62.144 -62.481 -62.682 -63.147 -64.198 -66.228 -69.863 -72.452 -69.238 -63.543 -59.425 -56.350 -53.905 -51.883 -50.169 -48.692 -47.405 -46.275 -45.279 -44.400 -43.623 -42.938 -42.337 -41.813 -41.359 -40.972 -40.648 -40.383 -40.175 -40.022 -39.922 -39.874 -39.877 -39.930 -40.033 -40.185 -40.386 -40.638 -40.941 -41.296 -41.703 -42.164 -42.682 -43.259 -43.896 -44.599 -45.370 -46.203 -47.036 -47.869 -48.702 0.03 -18.4828 -18.1182 -17.7572 -17.3999 -17.0462 -16.6961 -16.3497 -16.0068 -15.6677 -15.3321 -15.0002 -14.6719 -14.3472 -14.0262 -13.7088 -13.3951 -13.0849 -12.7784 -12.4756 -12.1763 -11.8807 -11.5888 -11.3004 -11.0157 -10.7347 -10.4572 -10.1834 -9.9132 -9.6467 -9.3838 -9.1245 -8.8688 -8.6168 -8.3684 -8.1237 -7.8826 -7.6451 -7.4112 -7.181 -6.9544 -6.7314 -6.5121 -6.2964 -6.0843 -5.8759 -5.6711 -5.4699 -5.2724 -5.0785 -4.8882 -4.7016 -4.5185 -4.3392 -4.1634 -3.9913 -3.8228 -3.658 -3.4967 -3.3391 -3.1852 -3.0349 -2.8882 -2.7451 -2.6057 -2.4699 -2.3377 -2.2092 -2.0843 -1.963 -1.8454 -1.7314 -1.621 -1.5143 -1.4111 -1.3117 -1.2158 -1.1236 -1.035 -0.95006 -0.86875 -0.79106 -0.717 -0.64658 -0.57979 -0.51663 -0.4571 -0.4012 -0.34894 -0.3003 -0.2553 -0.21393 -0.1762 -0.14209 -0.11162 -0.084778 -0.061569 -0.041991 -0.026046 -0.013732 -0.00505 0 0.0014181 -0.00079563 -0.0066413 -0.016119 -0.029228 -0.045969 -0.066343 -0.090348 -0.11798 -0.14925 -0.18415 -0.22269 -0.26485 -0.31065 -0.36008 -0.41314 -0.46983 -0.53015 -0.59411 -0.66169 -0.73291 -0.80777 -0.88625 -0.96836 -1.0541 -1.1435 -1.2365 -1.3331 -1.4334 -1.5373 -1.6449 -1.756 -1.8708 -1.9893 -2.1113 -2.237 -2.3664 -2.4993 -2.6359 -2.7761 -2.92 -3.0675 -3.2186 -3.3734 -3.5317 -3.6938 -3.8594 -4.0287 -4.2016 -4.3781 -4.5583 -4.7421 -4.9296 -5.1206 -5.3153 -5.5137 -5.7156 -5.9212 -6.1305 -6.3433 -6.5598 -6.78 -7.0037 -7.2311 -7.4621 -7.6968 -7.9351 -8.177 -8.4225 -8.6717 -8.9245 -9.181 -9.4411 -9.7048 -9.9721 -10.2431 -10.5177 -10.7959 -11.0778 -11.3633 -11.6524 -11.9452 -12.2416 -12.5416 -12.8453 -13.1526 -13.4635 -13.778 -14.0962 -14.4181 -14.7435 -15.0726 -15.4053 -15.7416 -16.0816 -16.4252 -16.7725 -17.1234 -17.4779 -17.836 1.0 56065.87 EW2 HH 25.19 29.82 0.050 9.701e+07 -1.243e+09 1.264e+08 -9.749e+08 1.408e+08 -7.306e+08 1.414e+08 -5.149e+08 1.302e+08 -3.325e+08 1.100e+08 -1.882e+08 8.599e+07 -8.487e+07 6.721e+07 -1.956e+07 6.557e+07 2.838e+07 8.154e+07 1.001e+08 1.003e+08 2.246e+08 1.094e+08 4.115e+08 1.004e+08 6.647e+08 6.579e+07 9.862e+08 -1.322e+06 1.376e+09 -1.090e+08 1.834e+09 -2.632e+08 2.358e+09 -4.697e+08 2.943e+09 -7.342e+08 3.583e+09 -1.061e+09 4.273e+09 -1.454e+09 5.004e+09 -1.915e+09 5.767e+09 -2.445e+09 6.552e+09 -3.043e+09 7.346e+09 -3.706e+09 8.138e+09 -4.432e+09 8.917e+09 -5.213e+09 9.668e+09 -6.043e+09 1.038e+10 -6.913e+09 1.104e+10 -7.814e+09 1.164e+10 -8.733e+09 1.216e+10 -9.661e+09 1.261e+10 -1.059e+10 1.296e+10 -1.149e+10 1.323e+10 -1.237e+10 1.339e+10 -1.322e+10 1.346e+10 -1.401e+10 1.342e+10 -1.475e+10 1.329e+10 -1.542e+10 1.306e+10 -1.602e+10 1.273e+10 -1.654e+10 1.233e+10 -1.699e+10 1.184e+10 -1.735e+10 1.128e+10 -1.763e+10 1.066e+10 -1.783e+10 9.988e+09 -1.796e+10 9.267e+09 -1.801e+10 8.506e+09 -1.799e+10 7.715e+09 -1.790e+10 6.902e+09 -1.775e+10 6.073e+09 -1.755e+10 5.234e+09 -1.730e+10 4.392e+09 -1.700e+10 3.551e+09 -1.667e+10 2.716e+09 -1.630e+10 1.890e+09 -1.590e+10 1.076e+09 -1.548e+10 2.766e+08 -1.504e+10 -5.063e+08 -1.457e+10 -1.272e+09 -1.409e+10 -2.020e+09 -1.359e+10 -2.748e+09 -1.308e+10 -3.458e+09 -1.256e+10 -4.150e+09 -1.202e+10 -4.821e+09 -1.147e+10 -5.473e+09 -1.090e+10 -6.107e+09 -1.032e+10 -6.720e+09 -9.723e+09 -7.313e+09 -9.108e+09 -7.885e+09 -8.476e+09 -8.436e+09 -7.825e+09 -8.963e+09 -7.154e+09 -9.468e+09 -6.463e+09 -9.946e+09 -5.752e+09 -1.040e+10 -5.021e+09 -1.082e+10 -4.271e+09 -1.121e+10 -3.504e+09 -1.157e+10 -2.718e+09 -1.190e+10 -1.920e+09 -1.219e+10 -1.110e+09 -1.244e+10 -2.903e+08 -1.265e+10 5.330e+08 -1.282e+10 1.356e+09 -1.295e+10 2.176e+09 -1.305e+10 2.986e+09 -1.310e+10 3.780e+09 -1.311e+10 4.553e+09 -1.308e+10 5.299e+09 -1.302e+10 6.013e+09 -1.293e+10 6.689e+09 -1.282e+10 7.320e+09 -1.268e+10 7.904e+09 -1.253e+10 8.436e+09 -1.237e+10 8.913e+09 -1.220e+10 9.332e+09 -1.205e+10 9.694e+09 -1.191e+10 9.999e+09 -1.180e+10 1.025e+10 -1.172e+10 1.044e+10 -1.168e+10 1.059e+10 -1.170e+10 1.069e+10 -1.179e+10 1.076e+10 -1.195e+10 1.080e+10 -1.220e+10 1.081e+10 -1.255e+10 1.081e+10 -1.303e+10 1.080e+10 -1.363e+10 1.079e+10 -1.440e+10 1.078e+10 -1.534e+10 1.078e+10 -1.649e+10 1.080e+10 -1.788e+10 1.083e+10 -1.954e+10 1.088e+10 -2.151e+10 1.094e+10 -2.383e+10 1.101e+10 -2.656e+10 1.110e+10 -2.975e+10 1.119e+10 -3.344e+10 1.128e+10 -3.769e+10 1.137e+10 -4.258e+10 1.146e+10 -4.816e+10 1.155e+10 -5.449e+10 1.165e+10 -6.165e+10 1.177e+10 -6.969e+10 1.191e+10 -7.868e+10 1.210e+10 -8.870e+10 1.236e+10 -9.977e+10 1.274e+10 -1.120e+11 1.327e+10 -1.254e+11 1.402e+10 -1.399e+11 1.504e+10 -1.557e+11 1.641e+10 -1.728e+11 1.822e+10 -1.911e+11 2.058e+10 -2.106e+11 2.360e+10 -2.312e+11 2.741e+10 -2.529e+11 3.215e+10 -2.757e+11 3.797e+10 -2.993e+11 4.503e+10 -3.237e+11 5.350e+10 -3.487e+11 6.358e+10 -3.741e+11 7.543e+10 -3.997e+11 8.926e+10 -4.254e+11 1.053e+11 -4.509e+11 1.236e+11 -4.760e+11 1.446e+11 -5.004e+11 1.684e+11 -5.239e+11 1.953e+11 -5.462e+11 2.254e+11 -5.671e+11 2.591e+11 -5.864e+11 2.967e+11 -6.039e+11 3.385e+11 -6.195e+11 3.851e+11 -6.331e+11 4.368e+11 -6.444e+11 4.944e+11 -6.534e+11 5.587e+11 -6.601e+11 6.305e+11 -6.641e+11 7.111e+11 -6.652e+11 8.018e+11 -6.633e+11 9.042e+11 -6.576e+11 1.020e+12 -6.477e+11 1.152e+12 -6.327e+11 1.302e+12 -6.114e+11 1.473e+12 -5.824e+11 1.667e+12 -5.440e+11 1.888e+12 -4.942e+11 2.140e+12 -4.307e+11 2.425e+12 -3.506e+11 2.749e+12 -2.511e+11 3.114e+12 -1.287e+11 3.525e+12 2.033e+10 3.986e+12 1.997e+11 4.503e+12 4.140e+11 5.080e+12 6.675e+11 5.722e+12 9.649e+11 6.433e+12 1.311e+12 7.220e+12 1.712e+12 8.087e+12 2.172e+12 9.041e+12 2.697e+12 1.009e+13 3.293e+12 1.090e+13 3.848e+12 1.211e+13 4.581e+12 1.343e+13 5.399e+12 1.486e+13 6.307e+12 1.641e+13 7.310e+12 1.808e+13 8.414e+12 1.987e+13 9.624e+12 2.180e+13 1.095e+13 2.387e+13 1.238e+13 2.608e+13 1.393e+13 2.843e+13 1.561e+13 3.094e+13 1.741e+13 3.359e+13 1.934e+13 3.640e+13 2.140e+13 3.937e+13 2.360e+13 4.248e+13 2.591e+13 4.578e+13 2.836e+13 4.922e+13 3.093e+13 5.283e+13 3.363e+13 5.660e+13 3.646e+13 6.053e+13 3.940e+13 6.462e+13 4.246e+13 6.885e+13 4.562e+13 7.324e+13 4.889e+13 7.779e+13 5.224e+13 8.247e+13 5.568e+13 8.730e+13 5.919e+13 9.226e+13 6.275e+13 9.735e+13 6.637e+13 1.026e+14 7.004e+13 1.079e+14 7.372e+13 1.133e+14 7.742e+13 1.189e+14 8.111e+13 1.245e+14 8.479e+13 1.302e+14 8.843e+13 1.360e+14 9.203e+13 1.419e+14 9.556e+13 1.478e+14 9.903e+13 1.538e+14 1.024e+14 1.597e+14 1.056e+14 1.658e+14 1.088e+14 1.718e+14 1.117e+14 1.778e+14 1.146e+14 1.839e+14 1.173e+14 1.900e+14 1.198e+14 1.961e+14 1.221e+14 2.021e+14 1.242e+14 2.080e+14 1.261e+14 2.139e+14 1.278e+14 2.198e+14 1.292e+14 2.256e+14 1.303e+14 2.313e+14 1.313e+14 2.369e+14 1.319e+14 2.423e+14 1.323e+14 2.477e+14 1.324e+14 2.530e+14 1.322e+14 2.580e+14 1.318e+14 2.630e+14 1.310e+14 2.678e+14 1.300e+14 2.725e+14 1.287e+14 2.769e+14 1.271e+14 2.812e+14 1.253e+14 2.854e+14 1.231e+14 2.892e+14 1.207e+14 2.930e+14 1.181e+14 2.966e+14 1.152e+14 3.000e+14 1.121e+14 3.031e+14 1.086e+14 3.061e+14 1.051e+14 3.089e+14 1.013e+14 3.115e+14 9.731e+13 3.138e+14 9.313e+13 3.160e+14 8.877e+13 3.180e+14 8.425e+13 3.197e+14 7.958e+13 3.213e+14 7.477e+13 3.227e+14 6.984e+13 3.239e+14 6.480e+13 3.250e+14 5.966e+13 3.258e+14 5.443e+13 3.265e+14 4.913e+13 3.270e+14 4.377e+13 3.273e+14 3.835e+13 3.275e+14 3.290e+13 3.277e+14 2.743e+13 3.276e+14 2.194e+13 3.274e+14 1.645e+13 3.270e+14 1.097e+13 3.264e+14 5.507e+12 3.257e+14 7.729e+10 3.249e+14 -5.309e+12 3.239e+14 -1.064e+13 3.227e+14 -1.591e+13 3.213e+14 -2.109e+13 3.198e+14 -2.620e+13 3.182e+14 -3.119e+13 3.163e+14 -3.608e+13 3.143e+14 -4.084e+13 3.121e+14 -4.547e+13 3.098e+14 -4.995e+13 3.072e+14 -5.427e+13 3.045e+14 -5.843e+13 3.016e+14 -6.241e+13 2.986e+14 -6.620e+13 2.953e+14 -6.979e+13 2.918e+14 -7.317e+13 2.882e+14 -7.633e+13 2.843e+14 -7.927e+13 2.803e+14 -8.197e+13 2.761e+14 -8.443e+13 2.716e+14 -8.665e+13 2.671e+14 -8.861e+13 2.622e+14 -9.032e+13 2.574e+14 -9.178e+13 2.522e+14 -9.299e+13 2.469e+14 -9.392e+13 2.415e+14 -9.462e+13 2.361e+14 -9.504e+13 2.304e+14 -9.522e+13 2.246e+14 -9.516e+13 2.187e+14 -9.486e+13 2.127e+14 -9.432e+13 2.096e+14 -9.055e+13 2.026e+14 -9.131e+13 1.965e+14 -9.018e+13 1.903e+14 -8.887e+13 1.840e+14 -8.737e+13 1.778e+14 -8.569e+13 1.716e+14 -8.386e+13 1.653e+14 -8.189e+13 1.591e+14 -7.979e+13 1.528e+14 -7.757e+13 1.467e+14 -7.523e+13 1.406e+14 -7.282e+13 1.346e+14 -7.032e+13 1.286e+14 -6.776e+13 1.227e+14 -6.514e+13 1.170e+14 -6.248e+13 1.113e+14 -5.980e+13 1.057e+14 -5.710e+13 1.003e+14 -5.439e+13 9.498e+13 -5.170e+13 8.980e+13 -4.902e+13 8.476e+13 -4.636e+13 7.986e+13 -4.375e+13 7.511e+13 -4.117e+13 7.051e+13 -3.865e+13 6.606e+13 -3.618e+13 6.178e+13 -3.378e+13 5.766e+13 -3.146e+13 5.371e+13 -2.920e+13 4.990e+13 -2.703e+13 4.628e+13 -2.494e+13 4.282e+13 -2.295e+13 3.952e+13 -2.104e+13 3.639e+13 -1.922e+13 3.342e+13 -1.750e+13 3.062e+13 -1.587e+13 2.798e+13 -1.435e+13 2.549e+13 -1.291e+13 2.315e+13 -1.157e+13 2.097e+13 -1.032e+13 1.894e+13 -9.168e+12 1.705e+13 -8.105e+12 1.531e+13 -7.128e+12 1.369e+13 -6.234e+12 1.221e+13 -5.421e+12 1.084e+13 -4.685e+12 9.296e+12 -3.897e+12 8.189e+12 -3.319e+12 7.185e+12 -2.805e+12 6.276e+12 -2.349e+12 5.458e+12 -1.949e+12 4.726e+12 -1.599e+12 4.071e+12 -1.297e+12 3.490e+12 -1.036e+12 2.976e+12 -8.149e+11 2.524e+12 -6.280e+11 2.128e+12 -4.719e+11 1.783e+12 -3.434e+11 1.485e+12 -2.388e+11 1.229e+12 -1.550e+11 1.010e+12 -8.912e+10 8.237e+11 -3.845e+10 6.670e+11 -5.302e+08 5.360e+11 2.685e+10 4.274e+11 4.572e+10 3.381e+11 5.782e+10 2.654e+11 6.467e+10 2.066e+11 6.761e+10 1.597e+11 6.773e+10 1.225e+11 6.594e+10 9.322e+10 6.296e+10 7.037e+10 5.932e+10 5.260e+10 5.540e+10 3.880e+10 5.142e+10 2.806e+10 4.749e+10 1.970e+10 4.365e+10 1.318e+10 3.986e+10 8.123e+09 3.609e+10 4.265e+09 3.231e+10 1.402e+09 2.849e+10 -6.135e+08 2.466e+10 -1.906e+09 2.084e+10 -2.589e+09 1.711e+10 -2.772e+09 1.353e+10 -2.570e+09 1.019e+10 -2.105e+09 7.196e+09 -1.499e+09 4.627e+09 -8.773e+08 2.572e+09 -3.619e+08 1.099e+09 -6.592e+07 2.712e+08 1.214e+08 -9.816e+07 5.814e+08 -6.928e+08 1.556e+09 -1.979e+09 3.102e+09 -3.972e+09 5.268e+09 -6.644e+09 8.079e+09 -9.951e+09 1.154e+10 -1.383e+10 1.565e+10 -1.821e+10 2.037e+10 -2.301e+10 2.566e+10 -2.814e+10 3.146e+10 -3.349e+10 3.770e+10 -3.896e+10 4.428e+10 -4.445e+10 5.113e+10 -4.985e+10 5.814e+10 -5.506e+10 6.521e+10 -5.999e+10 7.225e+10 -6.455e+10 7.914e+10 -6.865e+10 8.578e+10 -7.223e+10 9.210e+10 -7.523e+10 9.800e+10 -7.761e+10 1.034e+11 -7.933e+10 1.082e+11 -8.037e+10 1.125e+11 -8.074e+10 1.160e+11 -8.042e+10 1.188e+11 -7.946e+10 1.209e+11 -7.787e+10 1.223e+11 -7.569e+10 1.229e+11 -7.298e+10 1.228e+11 -6.979e+10 1.219e+11 -6.619e+10 1.204e+11 -6.224e+10 1.182e+11 -5.803e+10 1.153e+11 -5.360e+10 1.119e+11 -4.903e+10 1.080e+11 -4.439e+10 1.036e+11 -3.974e+10 9.890e+10 -3.514e+10 9.383e+10 -3.065e+10 8.851e+10 -2.632e+10 8.300e+10 -2.219e+10 7.736e+10 -1.831e+10 7.167e+10 -1.469e+10 6.598e+10 -1.137e+10 6.034e+10 -8.361e+09 5.483e+10 -5.674e+09 4.947e+10 -3.310e+09 4.431e+10 -1.268e+09 3.941e+10 4.608e+08 3.477e+10 1.891e+09 3.043e+10 3.039e+09 2.642e+10 3.926e+09 2.273e+10 4.576e+09 1.937e+10 5.015e+09 1.636e+10 5.270e+09 1.367e+10 5.368e+09 1.129e+10 5.335e+09 9.226e+09 5.198e+09 7.440e+09 4.981e+09 5.914e+09 4.705e+09 4.625e+09 4.390e+09 3.545e+09 4.051e+09 2.652e+09 3.702e+09 1.920e+09 3.351e+09 1.325e+09 3.004e+09 8.475e+08 2.667e+09 4.702e+08 2.341e+09 1.777e+08 2.027e+09 -4.201e+07 1.726e+09 -1.987e+08 1.438e+09 -3.010e+08 1.166e+09 -3.561e+08 9.112e+08 -3.713e+08 6.785e+08 -3.541e+08 4.716e+08 -3.131e+08 2.956e+08 -2.587e+08 1.548e+08 -2.032e+08 4.925e+07 -1.593e+08 -3.024e+07 -1.320e+08 -1.090e+08 -1.090e+08 -2.211e+08 -6.622e+07 -3.917e+08 2.039e+07 -6.330e+08 1.704e+08 -9.499e+08 4.001e+08 -1.343e+09 7.238e+08 -1.812e+09 1.155e+09 -2.355e+09 1.705e+09 -2.966e+09 2.383e+09 -3.639e+09 3.199e+09 -4.369e+09 4.160e+09 -5.146e+09 5.269e+09 -5.960e+09 6.530e+09 -6.800e+09 7.943e+09 -7.656e+09 9.505e+09 -8.513e+09 1.121e+10 -9.360e+09 1.306e+10 -1.018e+10 1.504e+10 -1.097e+10 1.713e+10 -1.171e+10 1.933e+10 -1.239e+10 2.162e+10 -1.299e+10 2.397e+10 -1.352e+10 2.638e+10 -1.395e+10 2.881e+10 -1.428e+10 3.125e+10 -1.450e+10 3.366e+10 -1.461e+10 3.603e+10 -1.460e+10 3.834e+10 -1.448e+10 4.054e+10 -1.424e+10 4.263e+10 -1.389e+10 4.457e+10 -1.343e+10 4.635e+10 -1.286e+10 4.795e+10 -1.220e+10 4.935e+10 -1.146e+10 5.053e+10 -1.063e+10 5.148e+10 -9.746e+09 5.218e+10 -8.809e+09 5.263e+10 -7.834e+09 5.282e+10 -6.836e+09 5.275e+10 -5.829e+09 5.243e+10 -4.828e+09 5.185e+10 -3.846e+09 5.102e+10 -2.897e+09 4.995e+10 -1.993e+09 4.867e+10 -1.146e+09 4.717e+10 -3.657e+08 4.547e+10 3.389e+08 4.361e+10 9.597e+08 4.158e+10 1.492e+09 3.943e+10 1.932e+09 3.716e+10 2.277e+09 3.481e+10 2.527e+09 3.239e+10 2.684e+09 2.993e+10 2.751e+09 2.746e+10 2.734e+09 2.498e+10 2.638e+09 2.254e+10 2.473e+09 2.015e+10 2.249e+09 1.783e+10 1.974e+09 1.560e+10 1.663e+09 1.348e+10 1.326e+09 1.149e+10 9.769e+08 9.639e+09 6.290e+08 7.946e+09 2.945e+08 6.418e+09 -1.502e+07 5.071e+09 -2.881e+08 3.909e+09 -5.185e+08 2.935e+09 -7.044e+08 2.151e+09 -8.521e+08 1.548e+09 -9.822e+08 1.103e+09 -1.133e+09 7.697e+08 -1.356e+09 4.812e+08 -1.698e+09 1.729e+08 -2.189e+09 -1.999e+08 -2.838e+09 -6.604e+08 -3.645e+09 -1.216e+09 -4.606e+09 -1.862e+09 -5.717e+09 -2.591e+09 -6.970e+09 -3.390e+09 -8.361e+09 -4.244e+09 -9.881e+09 -5.137e+09 -1.152e+10 -6.055e+09 -1.327e+10 -6.982e+09 -1.512e+10 -7.901e+09 -1.705e+10 -8.800e+09 -1.905e+10 -9.664e+09 -2.111e+10 -1.048e+10 -2.321e+10 -1.124e+10 -2.534e+10 -1.193e+10 -2.747e+10 -1.255e+10 -2.959e+10 -1.308e+10 -3.168e+10 -1.352e+10 -3.373e+10 -1.388e+10 -3.571e+10 -1.414e+10 -3.760e+10 -1.431e+10 -3.940e+10 -1.439e+10 -4.108e+10 -1.437e+10 -4.263e+10 -1.427e+10 -4.403e+10 -1.409e+10 -4.527e+10 -1.383e+10 -4.633e+10 -1.350e+10 -4.722e+10 -1.310e+10 -4.791e+10 -1.265e+10 -4.841e+10 -1.214e+10 -4.870e+10 -1.159e+10 -4.879e+10 -1.100e+10 -4.868e+10 -1.039e+10 -4.836e+10 -9.751e+09 -4.785e+10 -9.099e+09 -4.715e+10 -8.438e+09 -4.626e+10 -7.777e+09 -4.520e+10 -7.126e+09 -4.399e+10 -6.484e+09 -4.263e+10 -5.856e+09 -4.115e+10 -5.246e+09 -3.954e+10 -4.658e+09 -3.784e+10 -4.095e+09 -3.606e+10 -3.562e+09 -3.421e+10 -3.059e+09 -3.232e+10 -2.590e+09 -3.040e+10 -2.155e+09 -2.847e+10 -1.755e+09 -2.654e+10 -1.391e+09 -2.463e+10 -1.064e+09 -2.275e+10 -7.718e+08 -2.091e+10 -5.152e+08 -1.913e+10 -2.925e+08 -1.742e+10 -1.023e+08 -1.577e+10 5.695e+07 -1.421e+10 1.874e+08 -1.273e+10 2.913e+08 -1.134e+10 0.005 -54.414 -53.444 -52.473 -51.502 -50.532 -49.561 -48.590 -47.713 -46.927 -46.230 -45.612 -45.070 -44.599 -44.196 -43.860 -43.588 -43.380 -43.234 -43.150 -43.128 -43.168 -43.273 -43.443 -43.680 -43.986 -44.365 -44.822 -45.363 -45.994 -46.724 -47.565 -48.529 -49.634 -50.904 -52.371 -54.081 -56.104 -58.548 -61.615 -65.728 -72.143 -88.288 -77.880 -71.891 -69.584 -68.488 -67.535 -65.855 -63.320 -60.495 -57.795 -55.360 -53.201 -51.290 -49.595 -48.084 -46.735 -45.526 -44.442 -43.470 -42.599 -41.821 -41.127 -40.512 -39.972 -39.504 -39.104 -38.772 -38.504 -38.299 -38.158 -38.079 -38.062 -38.109 -38.220 -38.396 -38.640 -38.953 -39.340 -39.803 -40.348 -40.979 -41.703 -42.527 -43.460 -44.510 -45.694 -47.019 -48.498 -50.141 -51.955 -53.941 -56.091 -58.405 -60.899 -63.478 -65.200 -64.174 -60.694 -56.986 -53.747 -50.967 -48.556 -46.440 -44.565 -42.892 -41.390 -40.038 -38.818 -37.716 -36.721 -35.824 -35.018 -34.296 -33.655 -33.090 -32.599 -32.179 -31.829 -31.549 -31.337 -31.195 -31.123 -31.123 -31.199 -31.353 -31.589 -31.914 -32.333 -32.856 -33.493 -34.261 -35.176 -36.264 -37.556 -39.102 -40.968 -43.252 -46.085 -49.565 -53.155 -54.905 -54.197 -53.221 -53.488 -55.414 -56.127 -51.849 -45.951 -41.293 -37.603 -34.535 -31.898 -29.578 -27.503 -25.625 -23.908 -22.327 -20.864 -19.502 -18.230 -17.038 -15.918 -14.865 -13.872 -12.933 -12.046 -11.204 -10.404 -9.646 -8.926 -8.244 -7.597 -6.984 -6.403 -5.853 -5.333 -4.841 -4.377 -3.939 -3.528 -3.142 -2.781 -2.443 -2.129 -1.838 -1.570 -1.324 -1.099 -0.896 -0.714 -0.554 -0.413 -0.294 -0.195 -0.116 -0.057 -0.019 0.000 -0.001 -0.023 -0.061 -0.119 -0.197 -0.295 -0.414 -0.554 -0.714 -0.895 -1.098 -1.322 -1.568 -1.836 -2.127 -2.441 -2.779 -3.141 -3.528 -3.941 -4.380 -4.846 -5.340 -5.863 -6.417 -7.002 -7.621 -8.274 -8.964 -9.692 -10.462 -11.275 -12.136 -13.047 -14.013 -15.036 -16.125 -17.286 -18.531 -19.869 -21.318 -22.896 -24.630 -26.554 -28.726 -31.230 -34.220 -37.995 -43.294 -50.202 -52.413 -46.312 -43.188 -41.584 -40.818 -40.619 -40.859 -41.464 -42.364 -43.408 -44.265 -44.437 -43.667 -42.235 -40.606 -39.060 -37.698 -36.530 -35.544 -34.717 -34.033 -33.475 -33.033 -32.693 -32.450 -32.295 -32.224 -32.233 -32.319 -32.481 -32.716 -33.025 -33.406 -33.862 -34.395 -35.005 -35.698 -36.477 -37.348 -38.318 -39.396 -40.594 -41.925 -43.407 -45.064 -46.926 -49.036 -51.452 -54.258 -57.587 -61.638 -66.607 -71.129 -71.195 -68.141 -64.815 -61.719 -58.849 -56.248 -53.939 -51.908 -50.130 -48.573 -47.210 -46.016 -44.972 -44.062 -43.274 -42.595 -42.016 -41.529 -41.129 -40.812 -40.573 -40.409 -40.318 -40.299 -40.350 -40.472 -40.664 -40.927 -41.262 -41.672 -42.159 -42.727 -43.379 -44.121 -44.958 -45.899 -46.951 -48.122 -49.423 -50.863 -52.446 -54.165 -55.986 -57.830 -59.562 -61.024 -62.149 -63.046 -63.946 -65.056 -66.335 -66.984 -65.570 -62.635 -59.592 -56.901 -54.590 -52.599 -50.870 -49.357 -48.025 -46.845 -45.798 -44.867 -44.040 -43.307 -42.659 -42.089 -41.591 -41.162 -40.797 -40.493 -40.247 -40.058 -39.922 -39.839 -39.805 -39.821 -39.888 -40.005 -40.171 -40.388 -40.656 -40.975 -41.347 -41.772 -42.253 -42.791 -43.389 -44.050 -44.777 -45.576 -46.450 -47.399 -48.349 -49.298 -50.247 -51.196 -52.145 0.03 -18.2062 -17.847 -17.4915 -17.1395 -16.7911 -16.4462 -16.105 -15.7673 -15.4332 -15.1027 -14.7757 -14.4524 -14.1326 -13.8164 -13.5037 -13.1947 -12.8892 -12.5873 -12.289 -11.9942 -11.703 -11.4155 -11.1314 -10.851 -10.5741 -10.3009 -10.0311 -9.765 -9.5025 -9.2435 -8.9881 -8.7363 -8.488 -8.2434 -8.0023 -7.7648 -7.5308 -7.3005 -7.0737 -6.8505 -6.6309 -6.4148 -6.2024 -5.9935 -5.7882 -5.5864 -5.3883 -5.1937 -5.0027 -4.8152 -4.6314 -4.4511 -4.2744 -4.1013 -3.9318 -3.7658 -3.6034 -3.4446 -3.2894 -3.1377 -2.9896 -2.8451 -2.7042 -2.5669 -2.4331 -2.3029 -2.1763 -2.0533 -1.9338 -1.8179 -1.7056 -1.5969 -1.4918 -1.3902 -1.2922 -1.1978 -1.1069 -1.0197 -0.93598 -0.85588 -0.77935 -0.7064 -0.63702 -0.57122 -0.509 -0.45036 -0.39529 -0.34381 -0.2959 -0.25156 -0.21081 -0.17363 -0.14003 -0.11 -0.083555 -0.060686 -0.041394 -0.02568 -0.013542 -0.0049825 0 0.0014052 -0.00076704 -0.0065166 -0.015843 -0.028748 -0.045229 -0.065288 -0.088925 -0.11614 -0.14693 -0.1813 -0.21924 -0.26077 -0.30587 -0.35455 -0.4068 -0.46263 -0.52204 -0.58503 -0.65159 -0.72174 -0.79546 -0.87275 -0.95363 -1.0381 -1.1261 -1.2177 -1.3129 -1.4117 -1.514 -1.6199 -1.7294 -1.8425 -1.9591 -2.0793 -2.2031 -2.3305 -2.4615 -2.596 -2.7341 -2.8758 -3.0211 -3.1699 -3.3224 -3.4784 -3.6379 -3.8011 -3.9678 -4.1381 -4.312 -4.4895 -4.6705 -4.8551 -5.0433 -5.2351 -5.4304 -5.6294 -5.8319 -6.038 -6.2476 -6.4608 -6.6777 -6.8981 -7.122 -7.3496 -7.5807 -7.8154 -8.0537 -8.2955 -8.541 -8.79 -9.0426 -9.2987 -9.5585 -9.8218 -10.0887 -10.3591 -10.6332 -10.9108 -11.192 -11.4768 -11.7652 -12.0571 -12.3526 -12.6517 -12.9544 -13.2606 -13.5705 -13.8839 -14.2009 -14.5214 -14.8455 -15.1733 -15.5045 -15.8394 -16.1779 -16.5199 -16.8655 -17.2146 -17.5674 1.0 56559.76 EW2 HV 25.19 29.82 0.050 -2.467e+08 -2.101e+08 -1.356e+08 -8.964e+07 -6.214e+07 -1.575e+07 -2.811e+07 3.007e+07 -1.318e+07 1.070e+08 2.150e+07 2.644e+08 8.797e+07 5.132e+08 1.859e+08 8.582e+08 3.118e+08 1.301e+09 4.614e+08 1.840e+09 6.293e+08 2.474e+09 8.090e+08 3.195e+09 9.940e+08 3.994e+09 1.178e+09 4.862e+09 1.353e+09 5.785e+09 1.513e+09 6.750e+09 1.652e+09 7.743e+09 1.763e+09 8.747e+09 1.842e+09 9.749e+09 1.885e+09 1.074e+10 1.887e+09 1.170e+10 1.848e+09 1.262e+10 1.763e+09 1.349e+10 1.633e+09 1.431e+10 1.456e+09 1.507e+10 1.232e+09 1.577e+10 9.623e+08 1.639e+10 6.468e+08 1.696e+10 2.865e+08 1.745e+10 -1.168e+08 1.788e+10 -5.613e+08 1.824e+10 -1.046e+09 1.854e+10 -1.568e+09 1.878e+10 -2.125e+09 1.896e+10 -2.715e+09 1.909e+10 -3.336e+09 1.915e+10 -3.983e+09 1.916e+10 -4.654e+09 1.911e+10 -5.346e+09 1.901e+10 -6.052e+09 1.884e+10 -6.769e+09 1.862e+10 -7.490e+09 1.833e+10 -8.210e+09 1.797e+10 -8.921e+09 1.755e+10 -9.616e+09 1.705e+10 -1.029e+10 1.649e+10 -1.093e+10 1.585e+10 -1.153e+10 1.515e+10 -1.208e+10 1.438e+10 -1.257e+10 1.354e+10 -1.300e+10 1.264e+10 -1.336e+10 1.169e+10 -1.365e+10 1.070e+10 -1.385e+10 9.664e+09 -1.397e+10 8.605e+09 -1.401e+10 7.528e+09 -1.396e+10 6.443e+09 -1.383e+10 5.364e+09 -1.362e+10 4.298e+09 -1.334e+10 3.254e+09 -1.298e+10 2.244e+09 -1.256e+10 1.274e+09 -1.209e+10 3.496e+08 -1.156e+10 -5.225e+08 -1.099e+10 -1.340e+09 -1.039e+10 -2.100e+09 -9.761e+09 -2.802e+09 -9.114e+09 -3.446e+09 -8.455e+09 -4.035e+09 -7.792e+09 -4.572e+09 -7.129e+09 -5.062e+09 -6.469e+09 -5.511e+09 -5.817e+09 -5.924e+09 -5.173e+09 -6.307e+09 -4.538e+09 -6.667e+09 -3.911e+09 -7.008e+09 -3.291e+09 -7.336e+09 -2.674e+09 -7.654e+09 -2.059e+09 -7.964e+09 -1.443e+09 -8.268e+09 -8.247e+08 -8.566e+09 -2.033e+08 -8.856e+09 4.212e+08 -9.135e+09 1.048e+09 -9.400e+09 1.674e+09 -9.647e+09 2.295e+09 -9.871e+09 2.907e+09 -1.007e+10 3.502e+09 -1.023e+10 4.075e+09 -1.035e+10 4.618e+09 -1.044e+10 5.122e+09 -1.047e+10 5.579e+09 -1.046e+10 5.983e+09 -1.039e+10 6.324e+09 -1.027e+10 6.596e+09 -1.009e+10 6.794e+09 -9.857e+09 6.911e+09 -9.573e+09 6.945e+09 -9.242e+09 6.893e+09 -8.869e+09 6.755e+09 -8.459e+09 6.534e+09 -8.023e+09 6.233e+09 -7.568e+09 5.859e+09 -7.104e+09 5.419e+09 -6.642e+09 4.924e+09 -6.193e+09 4.386e+09 -5.769e+09 3.819e+09 -5.382e+09 3.239e+09 -5.046e+09 2.658e+09 -4.775e+09 2.088e+09 -4.591e+09 1.531e+09 -4.518e+09 9.749e+08 -4.588e+09 3.936e+08 -4.841e+09 -2.604e+08 -5.323e+09 -1.049e+09 -6.084e+09 -2.043e+09 -7.179e+09 -3.315e+09 -8.670e+09 -4.936e+09 -1.063e+10 -6.967e+09 -1.313e+10 -9.469e+09 -1.627e+10 -1.249e+10 -2.015e+10 -1.606e+10 -2.488e+10 -2.023e+10 -3.058e+10 -2.500e+10 -3.735e+10 -3.037e+10 -4.533e+10 -3.635e+10 -5.462e+10 -4.288e+10 -6.534e+10 -4.993e+10 -7.756e+10 -5.742e+10 -9.138e+10 -6.525e+10 -1.069e+11 -7.331e+10 -1.241e+11 -8.146e+10 -1.430e+11 -8.953e+10 -1.636e+11 -9.734e+10 -1.859e+11 -1.047e+11 -2.099e+11 -1.113e+11 -2.354e+11 -1.171e+11 -2.623e+11 -1.216e+11 -2.906e+11 -1.247e+11 -3.201e+11 -1.261e+11 -3.506e+11 -1.255e+11 -3.820e+11 -1.227e+11 -4.141e+11 -1.173e+11 -4.468e+11 -1.091e+11 -4.799e+11 -9.770e+10 -5.133e+11 -8.293e+10 -5.467e+11 -6.443e+10 -5.801e+11 -4.188e+10 -6.134e+11 -1.496e+10 -6.467e+11 1.674e+10 -6.798e+11 5.367e+10 -7.130e+11 9.631e+10 -7.462e+11 1.454e+11 -7.797e+11 2.016e+11 -8.137e+11 2.660e+11 -8.484e+11 3.396e+11 -8.840e+11 4.241e+11 -9.208e+11 5.210e+11 -9.589e+11 6.326e+11 -9.984e+11 7.611e+11 -1.039e+12 9.093e+11 -1.082e+12 1.081e+12 -1.125e+12 1.278e+12 -1.168e+12 1.507e+12 -1.211e+12 1.770e+12 -1.252e+12 2.072e+12 -1.291e+12 2.419e+12 -1.324e+12 2.817e+12 -1.351e+12 3.270e+12 -1.368e+12 3.784e+12 -1.374e+12 4.366e+12 -1.366e+12 5.024e+12 -1.340e+12 5.761e+12 -1.293e+12 6.587e+12 -1.222e+12 7.508e+12 -1.123e+12 8.530e+12 -9.922e+11 9.661e+12 -8.255e+11 1.091e+13 -6.190e+11 1.299e+13 -3.904e+11 1.457e+13 -7.501e+10 1.629e+13 2.942e+11 1.815e+13 7.200e+11 2.018e+13 1.207e+12 2.237e+13 1.759e+12 2.471e+13 2.381e+12 2.723e+13 3.073e+12 2.994e+13 3.841e+12 3.282e+13 4.685e+12 3.589e+13 5.611e+12 3.914e+13 6.617e+12 4.259e+13 7.708e+12 4.624e+13 8.884e+12 5.007e+13 1.015e+13 5.411e+13 1.149e+13 5.835e+13 1.292e+13 6.279e+13 1.445e+13 6.742e+13 1.605e+13 7.225e+13 1.774e+13 7.728e+13 1.952e+13 8.250e+13 2.137e+13 8.790e+13 2.330e+13 9.350e+13 2.530e+13 9.926e+13 2.737e+13 1.052e+14 2.950e+13 1.113e+14 3.169e+13 1.176e+14 3.392e+13 1.239e+14 3.620e+13 1.305e+14 3.851e+13 1.372e+14 4.084e+13 1.440e+14 4.318e+13 1.509e+14 4.552e+13 1.580e+14 4.785e+13 1.650e+14 5.017e+13 1.721e+14 5.244e+13 1.793e+14 5.465e+13 1.865e+14 5.679e+13 1.937e+14 5.886e+13 2.009e+14 6.082e+13 2.082e+14 6.269e+13 2.153e+14 6.441e+13 2.224e+14 6.601e+13 2.294e+14 6.747e+13 2.365e+14 6.877e+13 2.433e+14 6.989e+13 2.501e+14 7.082e+13 2.567e+14 7.155e+13 2.631e+14 7.206e+13 2.693e+14 7.235e+13 2.755e+14 7.242e+13 2.813e+14 7.225e+13 2.871e+14 7.183e+13 2.925e+14 7.118e+13 2.977e+14 7.029e+13 3.027e+14 6.915e+13 3.075e+14 6.777e+13 3.120e+14 6.615e+13 3.163e+14 6.430e+13 3.204e+14 6.221e+13 3.241e+14 5.991e+13 3.277e+14 5.737e+13 3.310e+14 5.463e+13 3.340e+14 5.169e+13 3.368e+14 4.854e+13 3.394e+14 4.522e+13 3.417e+14 4.171e+13 3.438e+14 3.803e+13 3.457e+14 3.419e+13 3.474e+14 3.021e+13 3.488e+14 2.607e+13 3.501e+14 2.181e+13 3.512e+14 1.742e+13 3.519e+14 1.292e+13 3.526e+14 8.315e+12 3.531e+14 3.618e+12 3.533e+14 -1.168e+12 3.534e+14 -6.026e+12 3.534e+14 -1.095e+13 3.530e+14 -1.593e+13 3.526e+14 -2.095e+13 3.521e+14 -2.600e+13 3.512e+14 -3.109e+13 3.504e+14 -3.619e+13 3.494e+14 -4.131e+13 3.483e+14 -4.641e+13 3.469e+14 -5.151e+13 3.454e+14 -5.656e+13 3.437e+14 -6.157e+13 3.419e+14 -6.652e+13 3.398e+14 -7.140e+13 3.377e+14 -7.620e+13 3.354e+14 -8.091e+13 3.329e+14 -8.549e+13 3.302e+14 -8.997e+13 3.274e+14 -9.430e+13 3.244e+14 -9.848e+13 3.212e+14 -1.025e+14 3.180e+14 -1.064e+14 3.145e+14 -1.100e+14 3.109e+14 -1.135e+14 3.072e+14 -1.168e+14 3.033e+14 -1.197e+14 2.993e+14 -1.226e+14 2.951e+14 -1.252e+14 2.908e+14 -1.275e+14 2.864e+14 -1.296e+14 2.817e+14 -1.315e+14 2.770e+14 -1.330e+14 2.722e+14 -1.343e+14 2.673e+14 -1.353e+14 2.622e+14 -1.361e+14 2.571e+14 -1.366e+14 2.519e+14 -1.369e+14 2.465e+14 -1.369e+14 2.411e+14 -1.366e+14 2.356e+14 -1.361e+14 2.300e+14 -1.352e+14 2.243e+14 -1.342e+14 2.186e+14 -1.329e+14 2.128e+14 -1.313e+14 2.070e+14 -1.296e+14 2.023e+14 -1.271e+14 1.970e+14 -1.248e+14 1.910e+14 -1.223e+14 1.850e+14 -1.198e+14 1.790e+14 -1.170e+14 1.729e+14 -1.141e+14 1.669e+14 -1.111e+14 1.609e+14 -1.080e+14 1.549e+14 -1.046e+14 1.488e+14 -1.012e+14 1.429e+14 -9.768e+13 1.370e+14 -9.410e+13 1.311e+14 -9.046e+13 1.253e+14 -8.677e+13 1.197e+14 -8.305e+13 1.141e+14 -7.931e+13 1.086e+14 -7.558e+13 1.031e+14 -7.185e+13 9.786e+13 -6.815e+13 9.271e+13 -6.450e+13 8.766e+13 -6.089e+13 8.276e+13 -5.735e+13 7.800e+13 -5.389e+13 7.338e+13 -5.051e+13 6.891e+13 -4.723e+13 6.460e+13 -4.405e+13 6.044e+13 -4.097e+13 5.645e+13 -3.801e+13 5.262e+13 -3.516e+13 4.895e+13 -3.244e+13 4.545e+13 -2.984e+13 4.210e+13 -2.738e+13 3.892e+13 -2.504e+13 3.590e+13 -2.282e+13 3.303e+13 -2.075e+13 3.032e+13 -1.879e+13 2.777e+13 -1.696e+13 2.537e+13 -1.525e+13 2.311e+13 -1.366e+13 2.099e+13 -1.219e+13 1.902e+13 -1.083e+13 1.717e+13 -9.578e+12 1.547e+13 -8.439e+12 1.388e+13 -7.395e+12 1.242e+13 -6.445e+12 1.107e+13 -5.585e+12 1.038e+13 -5.077e+12 9.187e+12 -4.346e+12 8.100e+12 -3.693e+12 7.111e+12 -3.114e+12 6.215e+12 -2.602e+12 5.408e+12 -2.153e+12 4.683e+12 -1.762e+12 4.034e+12 -1.424e+12 3.458e+12 -1.135e+12 2.947e+12 -8.886e+11 2.497e+12 -6.814e+11 2.104e+12 -5.091e+11 1.761e+12 -3.673e+11 1.465e+12 -2.524e+11 1.210e+12 -1.608e+11 9.927e+11 -8.915e+10 8.085e+11 -3.429e+10 6.537e+11 6.473e+09 5.246e+11 3.573e+10 4.178e+11 5.571e+10 3.303e+11 6.840e+10 2.593e+11 7.553e+10 2.021e+11 7.855e+10 1.565e+11 7.870e+10 1.204e+11 7.695e+10 9.191e+10 7.404e+10 6.959e+10 7.053e+10 5.205e+10 6.675e+10 3.822e+10 6.291e+10 2.727e+10 5.906e+10 1.855e+10 5.521e+10 1.160e+10 5.131e+10 6.102e+09 4.732e+10 1.816e+09 4.320e+10 -1.414e+09 3.894e+10 -3.714e+09 3.457e+10 -5.191e+09 3.013e+10 -5.944e+09 2.569e+10 -6.082e+09 2.133e+10 -5.718e+09 1.714e+10 -4.976e+09 1.322e+10 -3.987e+09 9.676e+09 -2.886e+09 6.580e+09 -1.810e+09 4.019e+09 -8.945e+08 2.062e+09 -2.671e+08 7.613e+08 2.439e+07 1.428e+08 3.903e+08 -2.484e+08 1.310e+09 -1.099e+09 2.926e+09 -2.659e+09 5.287e+09 -4.908e+09 8.429e+09 -7.807e+09 1.236e+10 -1.130e+10 1.706e+10 -1.531e+10 2.251e+10 -1.975e+10 2.864e+10 -2.453e+10 3.536e+10 -2.955e+10 4.259e+10 -3.469e+10 5.021e+10 -3.983e+10 5.810e+10 -4.486e+10 6.613e+10 -4.967e+10 7.415e+10 -5.415e+10 8.203e+10 -5.819e+10 8.964e+10 -6.170e+10 9.684e+10 -6.461e+10 1.035e+11 -6.686e+10 1.096e+11 -6.840e+10 1.149e+11 -6.920e+10 1.195e+11 -6.927e+10 1.232e+11 -6.861e+10 1.261e+11 -6.724e+10 1.280e+11 -6.521e+10 1.291e+11 -6.259e+10 1.293e+11 -5.943e+10 1.286e+11 -5.583e+10 1.272e+11 -5.188e+10 1.249e+11 -4.765e+10 1.221e+11 -4.323e+10 1.186e+11 -3.870e+10 1.145e+11 -3.414e+10 1.100e+11 -2.963e+10 1.052e+11 -2.524e+10 9.998e+10 -2.102e+10 9.455e+10 -1.702e+10 8.893e+10 -1.329e+10 8.321e+10 -9.853e+09 7.743e+10 -6.737e+09 7.164e+10 -3.951e+09 6.591e+10 -1.504e+09 6.026e+10 6.053e+08 5.475e+10 2.385e+09 4.941e+10 3.847e+09 4.428e+10 5.006e+09 3.938e+10 5.886e+09 3.475e+10 6.508e+09 3.040e+10 6.899e+09 2.634e+10 7.085e+09 2.261e+10 7.094e+09 1.919e+10 6.953e+09 1.611e+10 6.691e+09 1.335e+10 6.333e+09 1.091e+10 5.905e+09 8.778e+09 5.428e+09 6.947e+09 4.925e+09 5.395e+09 4.414e+09 4.098e+09 3.909e+09 3.035e+09 3.424e+09 2.177e+09 2.969e+09 1.498e+09 2.550e+09 9.704e+08 2.171e+09 5.686e+08 1.832e+09 2.687e+08 1.532e+09 5.077e+07 1.267e+09 -1.018e+08 1.033e+09 -2.019e+08 8.236e+08 -2.593e+08 6.369e+08 -2.815e+08 4.704e+08 -2.750e+08 3.238e+08 -2.469e+08 1.990e+08 -2.055e+08 9.817e+07 -1.610e+08 2.134e+07 -1.237e+08 -3.872e+07 -9.691e+07 -1.023e+08 -6.807e+07 -1.969e+08 -1.392e+07 -3.432e+08 8.899e+07 -5.516e+08 2.606e+08 -8.264e+08 5.178e+08 -1.168e+09 8.754e+08 -1.576e+09 1.347e+09 -2.045e+09 1.944e+09 -2.571e+09 2.675e+09 -3.144e+09 3.548e+09 -3.756e+09 4.568e+09 -4.396e+09 5.736e+09 -5.051e+09 7.053e+09 -5.709e+09 8.518e+09 -6.356e+09 1.012e+10 -6.978e+09 1.187e+10 -7.562e+09 1.374e+10 -8.096e+09 1.572e+10 -8.568e+09 1.781e+10 -8.967e+09 1.998e+10 -9.284e+09 2.222e+10 -9.511e+09 2.452e+10 -9.643e+09 2.684e+10 -9.675e+09 2.916e+10 -9.605e+09 3.147e+10 -9.433e+09 3.374e+10 -9.159e+09 3.593e+10 -8.788e+09 3.804e+10 -8.324e+09 4.002e+10 -7.773e+09 4.186e+10 -7.144e+09 4.353e+10 -6.444e+09 4.501e+10 -5.684e+09 4.629e+10 -4.874e+09 4.734e+10 -4.025e+09 4.815e+10 -3.150e+09 4.871e+10 -2.261e+09 4.902e+10 -1.368e+09 4.907e+10 -4.842e+08 4.886e+10 3.793e+08 4.840e+10 1.213e+09 4.769e+10 2.007e+09 4.676e+10 2.751e+09 4.560e+10 3.438e+09 4.425e+10 4.061e+09 4.271e+10 4.612e+09 4.101e+10 5.087e+09 3.918e+10 5.482e+09 3.723e+10 5.794e+09 3.518e+10 6.019e+09 3.307e+10 6.159e+09 3.091e+10 6.212e+09 2.871e+10 6.181e+09 2.651e+10 6.069e+09 2.433e+10 5.878e+09 2.217e+10 5.615e+09 2.006e+10 5.286e+09 1.800e+10 4.899e+09 1.603e+10 4.463e+09 1.413e+10 3.987e+09 1.234e+10 3.483e+09 1.065e+10 2.963e+09 9.082e+09 2.439e+09 7.636e+09 1.925e+09 6.320e+09 1.434e+09 5.139e+09 9.766e+08 4.101e+09 5.668e+08 3.208e+09 2.121e+08 2.459e+09 -8.372e+07 1.858e+09 -3.231e+08 1.400e+09 -5.222e+08 1.073e+09 -7.137e+08 8.473e+08 -9.448e+08 6.804e+08 -1.264e+09 5.262e+08 -1.703e+09 3.522e+08 -2.278e+09 1.416e+08 -2.990e+09 -1.102e+08 -3.838e+09 -3.993e+08 -4.815e+09 -7.178e+08 -5.912e+09 -1.056e+09 -7.123e+09 -1.402e+09 -8.435e+09 -1.744e+09 -9.838e+09 -2.071e+09 -1.132e+10 -2.371e+09 -1.287e+10 -2.636e+09 -1.448e+10 -2.857e+09 -1.614e+10 -3.027e+09 -1.782e+10 -3.140e+09 -1.953e+10 -3.191e+09 -2.125e+10 -3.178e+09 -2.296e+10 -3.101e+09 -2.466e+10 -2.958e+09 -2.634e+10 -2.752e+09 -2.798e+10 -2.486e+09 -2.957e+10 -2.163e+09 -3.110e+10 -1.788e+09 -3.256e+10 -1.368e+09 -3.394e+10 -9.090e+08 -3.522e+10 -4.177e+08 -3.639e+10 9.768e+07 -3.744e+10 6.297e+08 -3.835e+10 1.170e+09 -3.913e+10 1.711e+09 -3.975e+10 2.245e+09 -4.020e+10 2.764e+09 -4.048e+10 3.262e+09 -4.058e+10 3.731e+09 -4.050e+10 4.168e+09 -4.024e+10 4.566e+09 -3.979e+10 4.922e+09 -3.916e+10 5.232e+09 -3.835e+10 5.494e+09 -3.738e+10 5.703e+09 -3.625e+10 5.862e+09 -3.498e+10 5.971e+09 -3.358e+10 6.032e+09 -3.208e+10 6.046e+09 -3.047e+10 6.015e+09 -2.880e+10 5.940e+09 -2.707e+10 5.825e+09 -2.531e+10 5.675e+09 -2.354e+10 5.492e+09 -2.178e+10 5.279e+09 -2.003e+10 5.041e+09 -1.833e+10 4.783e+09 -1.668e+10 4.507e+09 -1.509e+10 4.218e+09 -1.357e+10 3.921e+09 -1.214e+10 3.619e+09 -1.080e+10 3.315e+09 -9.549e+09 3.015e+09 -8.394e+09 2.720e+09 -7.333e+09 0.005 -53.972 -53.002 -52.033 -51.063 -50.094 -49.124 -48.155 -47.274 -46.484 -45.778 -45.149 -44.594 -44.108 -43.688 -43.333 -43.039 -42.807 -42.635 -42.522 -42.468 -42.474 -42.541 -42.670 -42.861 -43.117 -43.441 -43.837 -44.311 -44.868 -45.517 -46.265 -47.126 -48.116 -49.255 -50.573 -52.113 -53.938 -56.154 -58.952 -62.749 -68.787 -84.481 -73.535 -66.919 -63.939 -62.305 -61.418 -61.032 -60.968 -61.013 -60.861 -60.181 -58.869 -57.132 -55.263 -53.451 -51.775 -50.259 -48.899 -47.686 -46.605 -45.645 -44.795 -44.044 -43.387 -42.817 -42.330 -41.923 -41.591 -41.333 -41.147 -41.033 -40.989 -41.016 -41.115 -41.288 -41.535 -41.860 -42.266 -42.758 -43.339 -44.016 -44.795 -45.683 -46.689 -47.819 -49.083 -50.478 -51.999 -53.621 -55.303 -56.991 -58.648 -60.312 -62.111 -64.086 -65.377 -64.101 -60.512 -56.786 -53.582 -50.866 -48.530 -46.493 -44.696 -43.098 -41.668 -40.384 -39.227 -38.185 -37.247 -36.404 -35.650 -34.979 -34.388 -33.873 -33.431 -33.061 -32.762 -32.533 -32.376 -32.291 -32.280 -32.345 -32.492 -32.724 -33.047 -33.469 -33.999 -34.649 -35.436 -36.381 -37.512 -38.865 -40.489 -42.450 -44.814 -47.547 -50.137 -51.357 -50.745 -49.520 -48.751 -48.812 -49.982 -52.565 -53.758 -49.841 -44.221 -39.785 -36.274 -33.355 -30.842 -28.629 -26.645 -24.845 -23.198 -21.679 -20.270 -18.956 -17.728 -16.576 -15.492 -14.472 -13.508 -12.597 -11.734 -10.916 -10.137 -9.399 -8.698 -8.033 -7.402 -6.804 -6.237 -5.700 -5.191 -4.711 -4.258 -3.831 -3.429 -3.052 -2.698 -2.369 -2.062 -1.778 -1.516 -1.276 -1.058 -0.860 -0.684 -0.528 -0.392 -0.277 -0.181 -0.106 -0.051 -0.016 0.000 -0.004 -0.028 -0.068 -0.128 -0.208 -0.308 -0.428 -0.569 -0.730 -0.913 -1.116 -1.341 -1.587 -1.855 -2.146 -2.460 -2.798 -3.159 -3.546 -3.957 -4.395 -4.859 -5.352 -5.873 -6.425 -7.008 -7.624 -8.274 -8.961 -9.686 -10.451 -11.260 -12.116 -13.022 -13.982 -14.998 -16.080 -17.234 -18.469 -19.798 -21.236 -22.802 -24.522 -26.431 -28.585 -31.071 -34.038 -37.788 -43.058 -49.932 -52.103 -45.955 -42.774 -41.103 -40.255 -39.957 -40.078 -40.549 -41.319 -42.313 -43.357 -44.103 -44.123 -43.298 -41.943 -40.455 -39.057 -37.828 -36.779 -35.896 -35.165 -34.571 -34.099 -33.738 -33.479 -33.314 -33.238 -33.247 -33.337 -33.507 -33.754 -34.078 -34.478 -34.956 -35.512 -36.149 -36.870 -37.677 -38.575 -39.568 -40.662 -41.862 -43.174 -44.602 -46.153 -47.830 -49.640 -51.595 -53.731 -56.135 -58.989 -62.522 -65.488 -64.102 -59.997 -56.216 -53.211 -50.756 -48.688 -46.911 -45.364 -44.004 -42.803 -41.739 -40.796 -39.960 -39.223 -38.576 -38.011 -37.522 -37.106 -36.757 -36.473 -36.251 -36.090 -35.987 -35.942 -35.952 -36.019 -36.142 -36.320 -36.555 -36.847 -37.198 -37.608 -38.082 -38.620 -39.227 -39.906 -40.661 -41.497 -42.423 -43.447 -44.582 -45.840 -47.238 -48.799 -50.550 -52.530 -54.788 -57.390 -60.419 -63.947 -67.880 -71.445 -73.316 -74.180 -75.203 -74.654 -70.651 -66.144 -62.414 -59.388 -56.889 -54.784 -52.985 -51.432 -50.080 -48.897 -47.860 -46.951 -46.154 -45.458 -44.855 -44.336 -43.895 -43.528 -43.230 -42.997 -42.826 -42.715 -42.663 -42.669 -42.733 -42.853 -43.030 -43.263 -43.554 -43.903 -44.312 -44.782 -45.315 -45.915 -46.585 -47.331 -48.157 -49.061 -49.966 -50.870 -51.774 -52.679 -53.583 0.03 -18.9108 -18.5376 -18.1682 -17.8025 -17.4406 -17.0823 -16.7277 -16.3769 -16.0298 -15.6864 -15.3467 -15.0108 -14.6785 -14.35 -14.0252 -13.7041 -13.3868 -13.0731 -12.7632 -12.457 -12.1545 -11.8557 -11.5606 -11.2693 -10.9817 -10.6978 -10.4176 -10.1411 -9.8683 -9.5993 -9.334 -9.0724 -8.8145 -8.5603 -8.3099 -8.0631 -7.8201 -7.5808 -7.3452 -7.1134 -6.8852 -6.6608 -6.4401 -6.2231 -6.0098 -5.8003 -5.5945 -5.3923 -5.1939 -4.9992 -4.8083 -4.621 -4.4375 -4.2577 -4.0816 -3.9092 -3.7406 -3.5756 -3.4144 -3.2569 -3.1031 -2.953 -2.8067 -2.664 -2.5251 -2.3899 -2.2584 -2.1307 -2.0066 -1.8863 -1.7697 -1.6568 -1.5476 -1.4421 -1.3404 -1.2424 -1.1481 -1.0575 -0.9706 -0.88744 -0.80801 -0.73229 -0.66029 -0.592 -0.52744 -0.46659 -0.40946 -0.35605 -0.30636 -0.26038 -0.21812 -0.17958 -0.14475 -0.11365 -0.086259 -0.062589 -0.042635 -0.0264 -0.013882 -0.0050823 0 0.0013646 -0.0009884 -0.0070591 -0.016848 -0.030354 -0.047577 -0.068519 -0.093178 -0.12155 -0.15365 -0.18946 -0.22899 -0.27224 -0.3192 -0.36989 -0.42429 -0.48241 -0.54424 -0.6098 -0.67907 -0.75206 -0.82876 -0.90919 -0.99333 -1.0812 -1.1728 -1.2681 -1.3671 -1.4698 -1.5763 -1.6864 -1.8003 -1.9179 -2.0392 -2.1643 -2.293 -2.4255 -2.5617 -2.7016 -2.8452 -2.9926 -3.1436 -3.2984 -3.4569 -3.6191 -3.785 -3.9547 -4.128 -4.3051 -4.4859 -4.6705 -4.8587 -5.0506 -5.2463 -5.4457 -5.6488 -5.8556 -6.0662 -6.2804 -6.4984 -6.7201 -6.9455 -7.1747 -7.4075 -7.6441 -7.8844 -8.1284 -8.3761 -8.6275 -8.8827 -9.1416 -9.4042 -9.6705 -9.9405 -10.2142 -10.4917 -10.7729 -11.0578 -11.3464 -11.6387 -11.9348 -12.2345 -12.538 -12.8452 -13.1561 -13.4708 -13.7891 -14.1112 -14.437 -14.7665 -15.0997 -15.4367 -15.7773 -16.1217 -16.4698 -16.8216 -17.1772 -17.5364 -17.8994 -18.2661 1.0 56559.76 EW2 VV 25.19 29.82 0.050 -2.622e+08 1.880e+08 -1.195e+08 1.090e+08 -3.054e+07 5.600e+07 2.185e+07 3.466e+07 9.950e+07 4.011e+07 2.594e+08 4.806e+07 5.154e+08 5.082e+07 8.721e+08 5.114e+07 1.330e+09 5.378e+07 1.887e+09 6.410e+07 2.541e+09 8.758e+07 3.280e+09 1.295e+08 4.097e+09 1.947e+08 4.979e+09 2.879e+08 5.912e+09 4.123e+08 6.880e+09 5.721e+08 7.867e+09 7.686e+08 8.856e+09 1.003e+09 9.832e+09 1.275e+09 1.078e+10 1.585e+09 1.169e+10 1.932e+09 1.254e+10 2.315e+09 1.334e+10 2.733e+09 1.406e+10 3.181e+09 1.471e+10 3.660e+09 1.527e+10 4.166e+09 1.576e+10 4.697e+09 1.616e+10 5.250e+09 1.648e+10 5.825e+09 1.671e+10 6.418e+09 1.687e+10 7.027e+09 1.695e+10 7.651e+09 1.696e+10 8.288e+09 1.689e+10 8.934e+09 1.675e+10 9.589e+09 1.655e+10 1.025e+10 1.628e+10 1.091e+10 1.595e+10 1.157e+10 1.555e+10 1.222e+10 1.509e+10 1.286e+10 1.456e+10 1.348e+10 1.397e+10 1.407e+10 1.333e+10 1.464e+10 1.262e+10 1.517e+10 1.185e+10 1.565e+10 1.102e+10 1.607e+10 1.014e+10 1.643e+10 9.217e+09 1.673e+10 8.247e+09 1.694e+10 7.240e+09 1.708e+10 6.205e+09 1.712e+10 5.150e+09 1.707e+10 4.086e+09 1.693e+10 3.021e+09 1.669e+10 1.967e+09 1.636e+10 9.350e+08 1.594e+10 -6.653e+07 1.544e+10 -1.026e+09 1.485e+10 -1.936e+09 1.419e+10 -2.789e+09 1.347e+10 -3.578e+09 1.270e+10 -4.299e+09 1.188e+10 -4.950e+09 1.102e+10 -5.527e+09 1.014e+10 -6.031e+09 9.244e+09 -6.464e+09 8.340e+09 -6.827e+09 7.439e+09 -7.126e+09 6.547e+09 -7.365e+09 5.667e+09 -7.551e+09 4.808e+09 -7.690e+09 3.970e+09 -7.790e+09 3.155e+09 -7.856e+09 2.364e+09 -7.896e+09 1.594e+09 -7.914e+09 8.434e+08 -7.915e+09 1.097e+08 -7.903e+09 -6.113e+08 -7.881e+09 -1.324e+09 -7.848e+09 -2.030e+09 -7.805e+09 -2.733e+09 -7.751e+09 -3.435e+09 -7.684e+09 -4.134e+09 -7.603e+09 -4.830e+09 -7.505e+09 -5.520e+09 -7.388e+09 -6.198e+09 -7.250e+09 -6.860e+09 -7.089e+09 -7.498e+09 -6.906e+09 -8.104e+09 -6.698e+09 -8.670e+09 -6.468e+09 -9.188e+09 -6.215e+09 -9.647e+09 -5.942e+09 -1.004e+10 -5.650e+09 -1.036e+10 -5.344e+09 -1.059e+10 -5.026e+09 -1.074e+10 -4.702e+09 -1.079e+10 -4.377e+09 -1.075e+10 -4.056e+09 -1.062e+10 -3.746e+09 -1.039e+10 -3.452e+09 -1.006e+10 -3.182e+09 -9.655e+09 -2.941e+09 -9.171e+09 -2.735e+09 -8.621e+09 -2.568e+09 -8.017e+09 -2.444e+09 -7.374e+09 -2.367e+09 -6.709e+09 -2.339e+09 -6.041e+09 -2.363e+09 -5.389e+09 -2.444e+09 -4.774e+09 -2.593e+09 -4.216e+09 -2.828e+09 -3.729e+09 -3.181e+09 -3.326e+09 -3.699e+09 -3.005e+09 -4.443e+09 -2.756e+09 -5.489e+09 -2.560e+09 -6.919e+09 -2.393e+09 -8.824e+09 -2.235e+09 -1.130e+10 -2.074e+09 -1.444e+10 -1.911e+09 -1.837e+10 -1.759e+09 -2.317e+10 -1.644e+09 -2.896e+10 -1.607e+09 -3.585e+10 -1.700e+09 -4.394e+10 -1.986e+09 -5.330e+10 -2.544e+09 -6.402e+10 -3.460e+09 -7.616e+10 -4.833e+09 -8.974e+10 -6.768e+09 -1.048e+11 -9.383e+09 -1.213e+11 -1.280e+10 -1.391e+11 -1.713e+10 -1.582e+11 -2.252e+10 -1.785e+11 -2.909e+10 -1.999e+11 -3.696e+10 -2.220e+11 -4.627e+10 -2.448e+11 -5.715e+10 -2.679e+11 -6.969e+10 -2.911e+11 -8.402e+10 -3.142e+11 -1.003e+11 -3.367e+11 -1.185e+11 -3.585e+11 -1.388e+11 -3.793e+11 -1.614e+11 -3.987e+11 -1.863e+11 -4.163e+11 -2.137e+11 -4.320e+11 -2.436e+11 -4.455e+11 -2.762e+11 -4.565e+11 -3.117e+11 -4.647e+11 -3.504e+11 -4.700e+11 -3.924e+11 -4.721e+11 -4.382e+11 -4.708e+11 -4.883e+11 -4.657e+11 -5.431e+11 -4.566e+11 -6.034e+11 -4.430e+11 -6.701e+11 -4.244e+11 -7.441e+11 -4.000e+11 -8.267e+11 -3.687e+11 -9.192e+11 -3.295e+11 -1.023e+12 -2.805e+11 -1.141e+12 -2.200e+11 -1.274e+12 -1.454e+11 -1.424e+12 -5.393e+10 -1.594e+12 5.775e+10 -1.785e+12 1.933e+11 -2.001e+12 3.571e+11 -2.245e+12 5.541e+11 -2.517e+12 7.890e+11 -2.821e+12 1.068e+12 -3.160e+12 1.397e+12 -3.536e+12 1.783e+12 -3.951e+12 2.232e+12 -4.407e+12 2.752e+12 -4.908e+12 3.349e+12 -5.455e+12 4.034e+12 -6.050e+12 4.812e+12 -6.695e+12 5.692e+12 -7.393e+12 6.683e+12 -8.145e+12 7.793e+12 -8.952e+12 9.534e+12 -1.036e+13 1.097e+13 -1.133e+13 1.257e+13 -1.236e+13 1.431e+13 -1.346e+13 1.622e+13 -1.461e+13 1.830e+13 -1.584e+13 2.056e+13 -1.712e+13 2.300e+13 -1.847e+13 2.563e+13 -1.990e+13 2.847e+13 -2.140e+13 3.150e+13 -2.296e+13 3.475e+13 -2.459e+13 3.821e+13 -2.629e+13 4.188e+13 -2.806e+13 4.576e+13 -2.990e+13 4.987e+13 -3.182e+13 5.420e+13 -3.381e+13 5.876e+13 -3.587e+13 6.354e+13 -3.799e+13 6.855e+13 -4.020e+13 7.378e+13 -4.247e+13 7.922e+13 -4.481e+13 8.489e+13 -4.722e+13 9.076e+13 -4.970e+13 9.684e+13 -5.226e+13 1.031e+14 -5.487e+13 1.096e+14 -5.755e+13 1.163e+14 -6.031e+13 1.230e+14 -6.312e+13 1.301e+14 -6.600e+13 1.371e+14 -6.894e+13 1.444e+14 -7.194e+13 1.517e+14 -7.500e+13 1.592e+14 -7.813e+13 1.667e+14 -8.130e+13 1.742e+14 -8.453e+13 1.819e+14 -8.782e+13 1.895e+14 -9.116e+13 1.970e+14 -9.456e+13 2.046e+14 -9.801e+13 2.119e+14 -1.015e+14 2.193e+14 -1.050e+14 2.265e+14 -1.087e+14 2.337e+14 -1.123e+14 2.406e+14 -1.160e+14 2.473e+14 -1.197e+14 2.539e+14 -1.234e+14 2.602e+14 -1.272e+14 2.663e+14 -1.311e+14 2.721e+14 -1.350e+14 2.777e+14 -1.389e+14 2.829e+14 -1.429e+14 2.878e+14 -1.470e+14 2.924e+14 -1.510e+14 2.967e+14 -1.552e+14 3.007e+14 -1.593e+14 3.044e+14 -1.634e+14 3.078e+14 -1.676e+14 3.107e+14 -1.719e+14 3.134e+14 -1.761e+14 3.158e+14 -1.804e+14 3.178e+14 -1.847e+14 3.195e+14 -1.890e+14 3.210e+14 -1.933e+14 3.221e+14 -1.976e+14 3.230e+14 -2.020e+14 3.235e+14 -2.064e+14 3.238e+14 -2.107e+14 3.238e+14 -2.150e+14 3.236e+14 -2.194e+14 3.231e+14 -2.237e+14 3.222e+14 -2.280e+14 3.212e+14 -2.322e+14 3.200e+14 -2.365e+14 3.185e+14 -2.406e+14 3.168e+14 -2.448e+14 3.149e+14 -2.489e+14 3.127e+14 -2.529e+14 3.104e+14 -2.569e+14 3.078e+14 -2.607e+14 3.051e+14 -2.646e+14 3.021e+14 -2.682e+14 2.990e+14 -2.719e+14 2.957e+14 -2.755e+14 2.923e+14 -2.790e+14 2.888e+14 -2.823e+14 2.850e+14 -2.855e+14 2.813e+14 -2.887e+14 2.772e+14 -2.916e+14 2.731e+14 -2.944e+14 2.688e+14 -2.970e+14 2.644e+14 -2.994e+14 2.600e+14 -3.017e+14 2.554e+14 -3.037e+14 2.507e+14 -3.055e+14 2.460e+14 -3.071e+14 2.413e+14 -3.085e+14 2.364e+14 -3.096e+14 2.316e+14 -3.105e+14 2.267e+14 -3.111e+14 2.217e+14 -3.114e+14 2.168e+14 -3.117e+14 2.118e+14 -3.115e+14 2.069e+14 -3.110e+14 2.020e+14 -3.103e+14 1.971e+14 -3.092e+14 1.923e+14 -3.078e+14 1.874e+14 -3.062e+14 1.826e+14 -3.043e+14 1.778e+14 -3.020e+14 1.731e+14 -2.995e+14 1.684e+14 -2.966e+14 1.637e+14 -2.935e+14 1.591e+14 -2.901e+14 1.546e+14 -2.864e+14 1.501e+14 -2.823e+14 1.457e+14 -2.780e+14 1.413e+14 -2.734e+14 1.370e+14 -2.685e+14 1.327e+14 -2.634e+14 1.285e+14 -2.580e+14 1.244e+14 -2.524e+14 1.181e+14 -2.475e+14 1.178e+14 -2.410e+14 1.138e+14 -2.347e+14 1.098e+14 -2.282e+14 1.059e+14 -2.215e+14 1.020e+14 -2.148e+14 9.823e+13 -2.079e+14 9.445e+13 -2.009e+14 9.077e+13 -1.938e+14 8.716e+13 -1.867e+14 8.362e+13 -1.795e+14 8.014e+13 -1.723e+14 7.674e+13 -1.650e+14 7.341e+13 -1.579e+14 7.014e+13 -1.507e+14 6.696e+13 -1.435e+14 6.385e+13 -1.365e+14 6.081e+13 -1.296e+14 5.786e+13 -1.227e+14 5.499e+13 -1.161e+14 5.220e+13 -1.094e+14 4.948e+13 -1.031e+14 4.685e+13 -9.680e+13 4.429e+13 -9.078e+13 4.182e+13 -8.492e+13 3.943e+13 -7.926e+13 3.712e+13 -7.380e+13 3.488e+13 -6.856e+13 3.273e+13 -6.354e+13 3.066e+13 -5.874e+13 2.867e+13 -5.417e+13 2.675e+13 -4.983e+13 2.492e+13 -4.571e+13 2.316e+13 -4.182e+13 2.148e+13 -3.815e+13 1.989e+13 -3.471e+13 1.836e+13 -3.148e+13 1.691e+13 -2.845e+13 1.554e+13 -2.564e+13 1.423e+13 -2.302e+13 1.300e+13 -2.061e+13 1.185e+13 -1.837e+13 1.076e+13 -1.632e+13 9.747e+12 -1.444e+13 8.800e+12 -1.272e+13 7.917e+12 -1.115e+13 7.476e+12 -1.025e+13 6.680e+12 -8.909e+12 5.947e+12 -7.700e+12 5.273e+12 -6.618e+12 4.656e+12 -5.653e+12 4.094e+12 -4.798e+12 3.583e+12 -4.045e+12 3.121e+12 -3.384e+12 2.706e+12 -2.809e+12 2.334e+12 -2.311e+12 2.002e+12 -1.883e+12 1.708e+12 -1.519e+12 1.449e+12 -1.211e+12 1.222e+12 -9.524e+11 1.024e+12 -7.381e+11 8.529e+11 -5.622e+11 7.056e+11 -4.194e+11 5.801e+11 -3.051e+11 4.737e+11 -2.149e+11 3.844e+11 -1.448e+11 3.102e+11 -9.135e+10 2.491e+11 -5.134e+10 1.992e+11 -2.205e+10 1.589e+11 -1.100e+09 1.267e+11 1.356e+10 1.012e+11 2.361e+10 8.102e+10 3.035e+10 6.507e+10 3.481e+10 5.238e+10 3.768e+10 4.214e+10 3.940e+10 3.373e+10 4.023e+10 2.672e+10 4.027e+10 2.081e+10 3.958e+10 1.580e+10 3.819e+10 1.158e+10 3.613e+10 8.077e+09 3.347e+10 5.248e+09 3.027e+10 3.050e+09 2.667e+10 1.436e+09 2.279e+10 3.466e+08 1.878e+10 -2.905e+08 1.481e+10 -5.599e+08 1.103e+10 -5.582e+08 7.611e+09 -3.905e+08 4.689e+09 -1.673e+08 2.403e+09 1.967e+06 8.675e+08 7.617e+07 1.364e+08 3.094e+08 -3.942e+08 9.446e+08 -1.597e+09 2.042e+09 -3.779e+09 3.660e+09 -6.941e+09 5.852e+09 -1.106e+10 8.650e+09 -1.606e+10 1.206e+10 -2.188e+10 1.609e+10 -2.841e+10 2.071e+10 -3.553e+10 2.586e+10 -4.310e+10 3.150e+10 -5.098e+10 3.754e+10 -5.899e+10 4.390e+10 -6.698e+10 5.049e+10 -7.479e+10 5.719e+10 -8.225e+10 6.390e+10 -8.921e+10 7.053e+10 -9.555e+10 7.696e+10 -1.011e+11 8.309e+10 -1.059e+11 8.885e+10 -1.097e+11 9.414e+10 -1.125e+11 9.889e+10 -1.142e+11 1.031e+11 -1.150e+11 1.066e+11 -1.147e+11 1.094e+11 -1.135e+11 1.116e+11 -1.113e+11 1.131e+11 -1.082e+11 1.139e+11 -1.045e+11 1.140e+11 -1.000e+11 1.134e+11 -9.498e+10 1.122e+11 -8.951e+10 1.104e+11 -8.369e+10 1.080e+11 -7.763e+10 1.052e+11 -7.143e+10 1.019e+11 -6.518e+10 9.820e+10 -5.897e+10 9.416e+10 -5.288e+10 8.981e+10 -4.697e+10 8.521e+10 -4.131e+10 8.040e+10 -3.593e+10 7.545e+10 -3.088e+10 7.039e+10 -2.619e+10 6.528e+10 -2.187e+10 6.016e+10 -1.793e+10 5.508e+10 -1.438e+10 5.008e+10 -1.123e+10 4.520e+10 -8.452e+09 4.048e+10 -6.044e+09 3.596e+10 -3.988e+09 3.166e+10 -2.261e+09 2.763e+10 -8.429e+08 2.387e+10 2.932e+08 2.041e+10 1.175e+09 1.727e+10 1.831e+09 1.444e+10 2.288e+09 1.192e+10 2.577e+09 9.717e+09 2.725e+09 7.812e+09 2.759e+09 6.189e+09 2.704e+09 4.828e+09 2.584e+09 3.704e+09 2.420e+09 2.789e+09 2.227e+09 2.056e+09 2.022e+09 1.478e+09 1.814e+09 1.027e+09 1.609e+09 6.804e+08 1.412e+09 4.173e+08 1.224e+09 2.217e+08 1.042e+09 8.131e+07 8.673e+08 -1.323e+07 6.988e+08 -6.938e+07 5.374e+08 -9.355e+07 3.866e+08 -9.236e+07 2.514e+08 -7.337e+07 1.386e+08 -4.567e+07 5.622e+07 -2.151e+07 9.915e+06 -1.013e+07 -2.238e+07 6.098e+06 -8.891e+07 5.578e+07 -2.196e+08 1.575e+08 -4.229e+08 3.260e+08 -7.037e+08 5.753e+08 -1.065e+09 9.190e+08 -1.507e+09 1.370e+09 -2.028e+09 1.938e+09 -2.625e+09 2.635e+09 -3.292e+09 3.468e+09 -4.021e+09 4.443e+09 -4.801e+09 5.567e+09 -5.621e+09 6.840e+09 -6.470e+09 8.263e+09 -7.332e+09 9.836e+09 -8.195e+09 1.155e+10 -9.043e+09 1.341e+10 -9.862e+09 1.539e+10 -1.064e+10 1.749e+10 -1.136e+10 1.969e+10 -1.201e+10 2.198e+10 -1.258e+10 2.433e+10 -1.306e+10 2.672e+10 -1.344e+10 2.913e+10 -1.371e+10 3.152e+10 -1.387e+10 3.388e+10 -1.392e+10 3.617e+10 -1.385e+10 3.837e+10 -1.366e+10 4.043e+10 -1.335e+10 4.234e+10 -1.294e+10 4.406e+10 -1.243e+10 4.557e+10 -1.181e+10 4.685e+10 -1.111e+10 4.788e+10 -1.034e+10 4.864e+10 -9.505e+09 4.913e+10 -8.620e+09 4.933e+10 -7.701e+09 4.925e+10 -6.760e+09 4.890e+10 -5.813e+09 4.828e+10 -4.871e+09 4.740e+10 -3.950e+09 4.628e+10 -3.061e+09 4.494e+10 -2.215e+09 4.340e+10 -1.423e+09 4.169e+10 -6.944e+08 3.982e+10 -3.598e+07 3.784e+10 5.452e+08 3.575e+10 1.045e+09 3.360e+10 1.462e+09 3.139e+10 1.792e+09 2.916e+10 2.037e+09 2.693e+10 2.199e+09 2.472e+10 2.280e+09 2.254e+10 2.286e+09 2.041e+10 2.222e+09 1.835e+10 2.096e+09 1.636e+10 1.915e+09 1.447e+10 1.688e+09 1.268e+10 1.427e+09 1.100e+10 1.141e+09 9.430e+09 8.410e+08 7.989e+09 5.382e+08 6.677e+09 2.429e+08 5.499e+09 -3.550e+07 4.462e+09 -2.881e+08 3.566e+09 -5.108e+08 2.811e+09 -7.036e+08 2.198e+09 -8.737e+08 1.717e+09 -1.039e+09 1.352e+09 -1.228e+09 1.075e+09 -1.476e+09 8.471e+08 -1.817e+09 6.289e+08 -2.277e+09 3.913e+08 -2.866e+09 1.162e+08 -3.589e+09 -2.039e+08 -4.447e+09 -5.679e+08 -5.435e+09 -9.705e+08 -6.550e+09 -1.403e+09 -7.786e+09 -1.854e+09 -9.135e+09 -2.313e+09 -1.059e+10 -2.766e+09 -1.214e+10 -3.201e+09 -1.379e+10 -3.606e+09 -1.551e+10 -3.971e+09 -1.730e+10 -4.285e+09 -1.914e+10 -4.539e+09 -2.103e+10 -4.727e+09 -2.296e+10 -4.841e+09 -2.490e+10 -4.879e+09 -2.685e+10 -4.838e+09 -2.879e+10 -4.716e+09 -3.071e+10 -4.514e+09 -3.258e+10 -4.235e+09 -3.441e+10 -3.882e+09 -3.616e+10 -3.461e+09 -3.782e+10 -2.977e+09 -3.938e+10 -2.439e+09 -4.081e+10 -1.855e+09 -4.210e+10 -1.233e+09 -4.324e+10 -5.832e+08 -4.421e+10 8.343e+07 -4.499e+10 7.578e+08 -4.557e+10 1.430e+09 -4.595e+10 2.090e+09 -4.611e+10 2.728e+09 -4.606e+10 3.337e+09 -4.578e+10 3.908e+09 -4.529e+10 4.436e+09 -4.458e+10 4.914e+09 -4.367e+10 5.338e+09 -4.257e+10 5.700e+09 -4.129e+10 6.002e+09 -3.985e+10 6.243e+09 -3.826e+10 6.424e+09 -3.656e+10 6.546e+09 -3.475e+10 6.609e+09 -3.287e+10 6.615e+09 -3.093e+10 6.569e+09 -2.896e+10 6.474e+09 -2.699e+10 6.335e+09 -2.502e+10 6.155e+09 -2.308e+10 5.939e+09 -2.118e+10 5.692e+09 -1.935e+10 5.420e+09 -1.758e+10 5.126e+09 -1.590e+10 4.817e+09 -1.431e+10 4.495e+09 -1.281e+10 4.167e+09 -1.141e+10 3.836e+09 -1.011e+10 3.507e+09 -8.919e+09 0.005 -53.369 -52.380 -51.391 -50.402 -49.413 -48.424 -47.434 -46.533 -45.721 -44.992 -44.338 -43.757 -43.243 -42.794 -42.407 -42.080 -41.812 -41.601 -41.447 -41.349 -41.307 -41.322 -41.394 -41.524 -41.711 -41.960 -42.272 -42.652 -43.102 -43.628 -44.235 -44.931 -45.723 -46.624 -47.647 -48.810 -50.140 -51.669 -53.446 -55.548 -58.094 -61.300 -65.591 -71.602 -74.440 -70.296 -67.187 -65.471 -64.548 -63.989 -63.389 -62.362 -60.773 -58.810 -56.752 -54.778 -52.963 -51.324 -49.856 -48.545 -47.377 -46.336 -45.412 -44.592 -43.869 -43.238 -42.693 -42.230 -41.844 -41.533 -41.296 -41.130 -41.036 -41.012 -41.059 -41.178 -41.370 -41.638 -41.984 -42.411 -42.922 -43.523 -44.218 -45.012 -45.910 -46.915 -48.031 -49.248 -50.547 -51.889 -53.205 -54.400 -55.372 -56.049 -56.414 -56.467 -56.178 -55.483 -54.347 -52.836 -51.097 -49.282 -47.496 -45.797 -44.211 -42.745 -41.397 -40.162 -39.033 -38.004 -37.068 -36.220 -35.455 -34.770 -34.160 -33.623 -33.157 -32.761 -32.434 -32.176 -31.987 -31.868 -31.821 -31.848 -31.953 -32.142 -32.418 -32.788 -33.263 -33.853 -34.574 -35.446 -36.496 -37.757 -39.276 -41.117 -43.341 -45.908 -48.296 -49.269 -48.342 -46.703 -45.366 -44.598 -44.471 -45.109 -46.848 -50.564 -53.876 -49.299 -42.701 -38.083 -34.578 -31.714 -29.271 -27.128 -25.214 -23.481 -21.896 -20.436 -19.083 -17.823 -16.645 -15.541 -14.504 -13.526 -12.603 -11.730 -10.901 -10.116 -9.372 -8.668 -7.999 -7.366 -6.766 -6.198 -5.660 -5.152 -4.672 -4.219 -3.792 -3.391 -3.015 -2.664 -2.336 -2.031 -1.749 -1.489 -1.251 -1.034 -0.839 -0.664 -0.511 -0.377 -0.265 -0.172 -0.099 -0.046 -0.013 0.000 -0.007 -0.029 -0.071 -0.133 -0.215 -0.318 -0.440 -0.582 -0.745 -0.929 -1.134 -1.360 -1.608 -1.877 -2.169 -2.483 -2.821 -3.183 -3.568 -3.979 -4.416 -4.879 -5.369 -5.888 -6.436 -7.014 -7.624 -8.268 -8.947 -9.662 -10.417 -11.212 -12.052 -12.939 -13.873 -14.861 -15.909 -17.022 -18.207 -19.475 -20.835 -22.299 -23.885 -25.613 -27.511 -29.619 -31.987 -34.683 -37.773 -41.194 -44.298 -45.696 -45.095 -43.958 -43.162 -42.840 -42.953 -43.433 -44.191 -45.040 -45.621 -45.501 -44.555 -43.094 -41.511 -40.028 -38.722 -37.603 -36.655 -35.864 -35.213 -34.688 -34.275 -33.967 -33.755 -33.633 -33.595 -33.640 -33.765 -33.966 -34.242 -34.594 -35.020 -35.523 -36.102 -36.760 -37.499 -38.322 -39.230 -40.226 -41.312 -42.488 -43.751 -45.097 -46.510 -47.972 -49.449 -50.899 -52.269 -53.492 -54.467 -55.046 -55.050 -54.396 -53.190 -51.665 -50.035 -48.433 -46.925 -45.535 -44.268 -43.121 -42.087 -41.159 -40.327 -39.587 -38.932 -38.357 -37.856 -37.424 -37.060 -36.759 -36.520 -36.340 -36.218 -36.153 -36.144 -36.190 -36.291 -36.447 -36.659 -36.927 -37.252 -37.636 -38.081 -38.590 -39.164 -39.808 -40.526 -41.321 -42.201 -43.175 -44.252 -45.445 -46.769 -48.244 -49.895 -51.756 -53.874 -56.317 -59.182 -62.628 -66.910 -72.434 -79.012 -81.515 -80.578 -78.604 -73.744 -68.690 -64.587 -61.293 -58.593 -56.333 -54.411 -52.757 -51.322 -50.071 -48.976 -48.017 -47.178 -46.446 -45.811 -45.266 -44.802 -44.416 -44.102 -43.856 -43.675 -43.557 -43.501 -43.505 -43.570 -43.694 -43.877 -44.120 -44.424 -44.789 -45.218 -45.713 -46.276 -46.912 -47.624 -48.420 -49.305 -50.279 -51.253 -52.227 -53.200 -54.174 -55.148 0.03 -19.5443 -19.157 -18.7736 -18.3941 -18.0184 -17.6467 -17.2787 -16.9147 -16.5546 -16.1983 -15.8459 -15.4973 -15.1527 -14.8119 -14.475 -14.142 -13.8128 -13.4876 -13.1662 -12.8486 -12.535 -12.2252 -11.9193 -11.6173 -11.3192 -11.0249 -10.7345 -10.448 -10.1653 -9.8866 -9.6117 -9.3406 -9.0735 -8.8102 -8.5508 -8.2953 -8.0437 -7.7959 -7.552 -7.312 -7.0759 -6.8436 -6.6152 -6.3907 -6.1701 -5.9533 -5.7405 -5.5315 -5.3263 -5.1251 -4.9277 -4.7342 -4.5445 -4.3588 -4.1769 -3.9989 -3.8248 -3.6545 -3.4882 -3.3257 -3.167 -3.0123 -2.8614 -2.7144 -2.5713 -2.432 -2.2967 -2.1652 -2.0375 -1.9138 -1.7939 -1.6779 -1.5658 -1.4576 -1.3532 -1.2527 -1.1561 -1.0634 -0.9745 -0.88951 -0.8084 -0.73116 -0.6578 -0.58831 -0.5227 -0.46096 -0.4031 -0.34912 -0.29901 -0.25278 -0.21042 -0.17194 -0.13733 -0.1066 -0.079744 -0.056765 -0.037661 -0.022432 -0.011079 -0.0036018 0 -0.00027381 -0.0044232 -0.012448 -0.024349 -0.040125 -0.059777 -0.083304 -0.11071 -0.14199 -0.17714 -0.21617 -0.25907 -0.30586 -0.35651 -0.41104 -0.46945 -0.53173 -0.59789 -0.66793 -0.74184 -0.81962 -0.90128 -0.98682 -1.0762 -1.1695 -1.2667 -1.3677 -1.4726 -1.5814 -1.6941 -1.8106 -1.9311 -2.0553 -2.1835 -2.3156 -2.4515 -2.5913 -2.7349 -2.8825 -3.0339 -3.1892 -3.3484 -3.5114 -3.6784 -3.8492 -4.0238 -4.2024 -4.3848 -4.5711 -4.7613 -4.9553 -5.1533 -5.3551 -5.5607 -5.7703 -5.9837 -6.201 -6.4222 -6.6473 -6.8762 -7.109 -7.3457 -7.5863 -7.8307 -8.079 -8.3312 -8.5873 -8.8472 -9.111 -9.3787 -9.6503 -9.9257 -10.205 -10.4882 -10.7753 -11.0662 -11.361 -11.6597 -11.9623 -12.2688 -12.5791 -12.8933 -13.2113 -13.5333 -13.8591 -14.1888 -14.5224 -14.8598 -15.2012 -15.5464 -15.8954 -16.2484 -16.6052 -16.9659 -17.3305 -17.699 -18.0713 -18.4475 -18.8276 -19.2115 1.0 56559.76 EW2 VH 25.19 29.82 0.050 -1.178e+09 -3.922e+08 -9.096e+08 -3.597e+08 -6.690e+08 -3.165e+08 -4.599e+08 -2.655e+08 -2.864e+08 -2.099e+08 -1.522e+08 -1.543e+08 -5.881e+07 -1.048e+08 -8.168e+05 -6.960e+07 4.492e+07 -5.507e+07 1.181e+08 -5.049e+07 2.426e+08 -3.326e+07 4.240e+08 1.175e+07 6.632e+08 9.452e+07 9.597e+08 2.235e+08 1.311e+09 4.060e+08 1.714e+09 6.508e+08 2.164e+09 9.631e+08 2.654e+09 1.348e+09 3.176e+09 1.809e+09 3.722e+09 2.350e+09 4.281e+09 2.971e+09 4.844e+09 3.672e+09 5.399e+09 4.450e+09 5.935e+09 5.300e+09 6.441e+09 6.216e+09 6.905e+09 7.190e+09 7.317e+09 8.210e+09 7.667e+09 9.266e+09 7.947e+09 1.034e+10 8.150e+09 1.143e+10 8.270e+09 1.251e+10 8.304e+09 1.357e+10 8.250e+09 1.459e+10 8.109e+09 1.556e+10 7.880e+09 1.647e+10 7.568e+09 1.730e+10 7.178e+09 1.805e+10 6.714e+09 1.871e+10 6.185e+09 1.926e+10 5.598e+09 1.972e+10 4.960e+09 2.006e+10 4.280e+09 2.030e+10 3.567e+09 2.043e+10 2.829e+09 2.046e+10 2.073e+09 2.039e+10 1.308e+09 2.022e+10 5.396e+08 1.997e+10 -2.259e+08 1.964e+10 -9.824e+08 1.923e+10 -1.726e+09 1.876e+10 -2.453e+09 1.823e+10 -3.159e+09 1.764e+10 -3.843e+09 1.702e+10 -4.503e+09 1.636e+10 -5.136e+09 1.566e+10 -5.741e+09 1.494e+10 -6.320e+09 1.420e+10 -6.870e+09 1.344e+10 -7.391e+09 1.267e+10 -7.885e+09 1.188e+10 -8.351e+09 1.109e+10 -8.790e+09 1.029e+10 -9.201e+09 9.484e+09 -9.584e+09 8.671e+09 -9.938e+09 7.853e+09 -1.026e+10 7.028e+09 -1.056e+10 6.197e+09 -1.083e+10 5.361e+09 -1.106e+10 4.517e+09 -1.127e+10 3.667e+09 -1.144e+10 2.811e+09 -1.157e+10 1.947e+09 -1.167e+10 1.079e+09 -1.173e+10 2.065e+08 -1.175e+10 -6.704e+08 -1.173e+10 -1.548e+09 -1.167e+10 -2.425e+09 -1.157e+10 -3.299e+09 -1.142e+10 -4.167e+09 -1.123e+10 -5.024e+09 -1.100e+10 -5.868e+09 -1.072e+10 -6.694e+09 -1.041e+10 -7.498e+09 -1.006e+10 -8.275e+09 -9.676e+09 -9.021e+09 -9.263e+09 -9.731e+09 -8.825e+09 -1.040e+10 -8.369e+09 -1.103e+10 -7.901e+09 -1.161e+10 -7.427e+09 -1.214e+10 -6.956e+09 -1.262e+10 -6.494e+09 -1.305e+10 -6.051e+09 -1.343e+10 -5.634e+09 -1.376e+10 -5.251e+09 -1.404e+10 -4.911e+09 -1.428e+10 -4.621e+09 -1.449e+10 -4.388e+09 -1.466e+10 -4.219e+09 -1.481e+10 -4.120e+09 -1.495e+10 -4.097e+09 -1.509e+10 -4.156e+09 -1.524e+10 -4.304e+09 -1.541e+10 -4.548e+09 -1.562e+10 -4.896e+09 -1.588e+10 -5.357e+09 -1.621e+10 -5.945e+09 -1.663e+10 -6.675e+09 -1.715e+10 -7.564e+09 -1.779e+10 -8.633e+09 -1.859e+10 -9.911e+09 -1.955e+10 -1.143e+10 -2.070e+10 -1.321e+10 -2.208e+10 -1.531e+10 -2.369e+10 -1.775e+10 -2.559e+10 -2.059e+10 -2.778e+10 -2.387e+10 -3.032e+10 -2.763e+10 -3.323e+10 -3.192e+10 -3.655e+10 -3.679e+10 -4.034e+10 -4.228e+10 -4.462e+10 -4.843e+10 -4.946e+10 -5.528e+10 -5.490e+10 -6.286e+10 -6.100e+10 -7.118e+10 -6.782e+10 -8.026e+10 -7.543e+10 -9.011e+10 -8.388e+10 -1.007e+11 -9.324e+10 -1.120e+11 -1.036e+11 -1.239e+11 -1.150e+11 -1.364e+11 -1.274e+11 -1.494e+11 -1.411e+11 -1.628e+11 -1.560e+11 -1.764e+11 -1.721e+11 -1.900e+11 -1.896e+11 -2.035e+11 -2.084e+11 -2.166e+11 -2.286e+11 -2.291e+11 -2.503e+11 -2.408e+11 -2.734e+11 -2.513e+11 -2.979e+11 -2.604e+11 -3.240e+11 -2.678e+11 -3.515e+11 -2.733e+11 -3.805e+11 -2.763e+11 -4.110e+11 -2.767e+11 -4.431e+11 -2.742e+11 -4.767e+11 -2.683e+11 -5.119e+11 -2.588e+11 -5.489e+11 -2.453e+11 -5.878e+11 -2.275e+11 -6.288e+11 -2.049e+11 -6.724e+11 -1.771e+11 -7.187e+11 -1.433e+11 -7.685e+11 -1.030e+11 -8.222e+11 -5.528e+10 -8.805e+11 1.140e+09 -9.443e+11 6.761e+10 -1.014e+12 1.458e+11 -1.092e+12 2.378e+11 -1.177e+12 3.461e+11 -1.272e+12 4.733e+11 -1.378e+12 6.230e+11 -1.494e+12 7.987e+11 -1.623e+12 1.004e+12 -1.765e+12 1.245e+12 -1.920e+12 1.524e+12 -2.090e+12 1.849e+12 -2.275e+12 2.224e+12 -2.476e+12 2.655e+12 -2.692e+12 3.149e+12 -2.924e+12 3.712e+12 -3.173e+12 4.352e+12 -3.437e+12 5.074e+12 -3.717e+12 5.889e+12 -4.013e+12 6.802e+12 -4.324e+12 7.820e+12 -4.650e+12 8.954e+12 -4.991e+12 1.021e+13 -5.345e+12 1.136e+13 -5.594e+12 1.286e+13 -5.968e+12 1.450e+13 -6.353e+12 1.630e+13 -6.751e+12 1.825e+13 -7.160e+12 2.037e+13 -7.579e+12 2.267e+13 -8.007e+12 2.515e+13 -8.444e+12 2.783e+13 -8.889e+12 3.069e+13 -9.343e+12 3.376e+13 -9.804e+12 3.704e+13 -1.027e+13 4.052e+13 -1.074e+13 4.424e+13 -1.123e+13 4.816e+13 -1.172e+13 5.230e+13 -1.223e+13 5.667e+13 -1.273e+13 6.126e+13 -1.326e+13 6.607e+13 -1.379e+13 7.110e+13 -1.434e+13 7.636e+13 -1.489e+13 8.182e+13 -1.546e+13 8.749e+13 -1.607e+13 9.337e+13 -1.668e+13 9.940e+13 -1.732e+13 1.057e+14 -1.799e+13 1.122e+14 -1.869e+13 1.187e+14 -1.942e+13 1.255e+14 -2.020e+13 1.324e+14 -2.101e+13 1.394e+14 -2.187e+13 1.465e+14 -2.278e+13 1.538e+14 -2.374e+13 1.610e+14 -2.477e+13 1.685e+14 -2.585e+13 1.758e+14 -2.702e+13 1.833e+14 -2.825e+13 1.907e+14 -2.956e+13 1.981e+14 -3.096e+13 2.056e+14 -3.245e+13 2.128e+14 -3.403e+13 2.201e+14 -3.571e+13 2.273e+14 -3.749e+13 2.344e+14 -3.938e+13 2.414e+14 -4.137e+13 2.483e+14 -4.348e+13 2.550e+14 -4.571e+13 2.615e+14 -4.807e+13 2.678e+14 -5.055e+13 2.739e+14 -5.316e+13 2.798e+14 -5.590e+13 2.855e+14 -5.877e+13 2.910e+14 -6.178e+13 2.961e+14 -6.492e+13 3.010e+14 -6.818e+13 3.058e+14 -7.158e+13 3.101e+14 -7.511e+13 3.143e+14 -7.876e+13 3.180e+14 -8.254e+13 3.216e+14 -8.642e+13 3.249e+14 -9.043e+13 3.278e+14 -9.455e+13 3.305e+14 -9.876e+13 3.329e+14 -1.031e+14 3.349e+14 -1.075e+14 3.367e+14 -1.120e+14 3.382e+14 -1.165e+14 3.394e+14 -1.211e+14 3.404e+14 -1.258e+14 3.409e+14 -1.305e+14 3.413e+14 -1.352e+14 3.413e+14 -1.401e+14 3.411e+14 -1.449e+14 3.407e+14 -1.497e+14 3.399e+14 -1.545e+14 3.389e+14 -1.594e+14 3.377e+14 -1.641e+14 3.361e+14 -1.689e+14 3.344e+14 -1.736e+14 3.324e+14 -1.783e+14 3.303e+14 -1.829e+14 3.279e+14 -1.875e+14 3.254e+14 -1.919e+14 3.227e+14 -1.965e+14 3.198e+14 -2.008e+14 3.167e+14 -2.052e+14 3.136e+14 -2.093e+14 3.103e+14 -2.134e+14 3.068e+14 -2.174e+14 3.031e+14 -2.212e+14 2.994e+14 -2.250e+14 2.955e+14 -2.285e+14 2.915e+14 -2.319e+14 2.874e+14 -2.352e+14 2.833e+14 -2.382e+14 2.789e+14 -2.411e+14 2.746e+14 -2.438e+14 2.701e+14 -2.461e+14 2.657e+14 -2.484e+14 2.610e+14 -2.504e+14 2.564e+14 -2.522e+14 2.517e+14 -2.537e+14 2.470e+14 -2.549e+14 2.421e+14 -2.559e+14 2.372e+14 -2.566e+14 2.324e+14 -2.570e+14 2.274e+14 -2.571e+14 2.224e+14 -2.568e+14 2.175e+14 -2.563e+14 2.124e+14 -2.555e+14 2.073e+14 -2.542e+14 2.021e+14 -2.527e+14 1.970e+14 -2.508e+14 1.918e+14 -2.487e+14 1.866e+14 -2.462e+14 1.815e+14 -2.433e+14 1.764e+14 -2.402e+14 1.712e+14 -2.368e+14 1.660e+14 -2.330e+14 1.609e+14 -2.291e+14 1.557e+14 -2.248e+14 1.506e+14 -2.202e+14 1.469e+14 -2.154e+14 1.427e+14 -2.105e+14 1.377e+14 -2.053e+14 1.327e+14 -1.999e+14 1.278e+14 -1.944e+14 1.230e+14 -1.887e+14 1.181e+14 -1.828e+14 1.135e+14 -1.768e+14 1.088e+14 -1.708e+14 1.043e+14 -1.647e+14 9.981e+13 -1.586e+14 9.543e+13 -1.524e+14 9.115e+13 -1.462e+14 8.697e+13 -1.400e+14 8.288e+13 -1.339e+14 7.888e+13 -1.277e+14 7.500e+13 -1.217e+14 7.121e+13 -1.156e+14 6.754e+13 -1.097e+14 6.397e+13 -1.039e+14 6.051e+13 -9.818e+13 5.715e+13 -9.260e+13 5.392e+13 -8.715e+13 5.077e+13 -8.183e+13 4.775e+13 -7.668e+13 4.483e+13 -7.169e+13 4.202e+13 -6.685e+13 3.931e+13 -6.219e+13 3.672e+13 -5.773e+13 3.424e+13 -5.343e+13 3.185e+13 -4.932e+13 2.958e+13 -4.541e+13 2.740e+13 -4.169e+13 2.534e+13 -3.815e+13 2.337e+13 -3.481e+13 2.151e+13 -3.167e+13 1.974e+13 -2.871e+13 1.808e+13 -2.595e+13 1.651e+13 -2.336e+13 1.504e+13 -2.095e+13 1.366e+13 -1.873e+13 1.237e+13 -1.668e+13 1.117e+13 -1.479e+13 1.005e+13 -1.306e+13 9.018e+12 -1.148e+13 8.064e+12 -1.004e+13 7.030e+12 -8.552e+12 6.239e+12 -7.403e+12 5.516e+12 -6.374e+12 4.857e+12 -5.456e+12 4.260e+12 -4.641e+12 3.720e+12 -3.923e+12 3.234e+12 -3.292e+12 2.799e+12 -2.741e+12 2.410e+12 -2.265e+12 2.065e+12 -1.854e+12 1.760e+12 -1.503e+12 1.492e+12 -1.206e+12 1.257e+12 -9.553e+11 1.053e+12 -7.467e+11 8.765e+11 -5.748e+11 7.249e+11 -4.344e+11 5.955e+11 -3.212e+11 4.859e+11 -2.312e+11 3.937e+11 -1.606e+11 3.170e+11 -1.062e+11 2.536e+11 -6.515e+10 2.018e+11 -3.474e+10 1.598e+11 -1.278e+10 1.262e+11 2.653e+09 9.948e+10 1.319e+10 7.847e+10 2.016e+10 6.201e+10 2.460e+10 4.909e+10 2.727e+10 3.890e+10 2.872e+10 3.077e+10 2.927e+10 2.417e+10 2.911e+10 1.876e+10 2.833e+10 1.429e+10 2.699e+10 1.060e+10 2.511e+10 7.587e+09 2.278e+10 5.179e+09 2.006e+10 3.318e+09 1.706e+10 1.950e+09 1.392e+10 1.013e+09 1.077e+10 4.354e+08 7.780e+09 1.379e+08 5.095e+09 3.281e+07 2.866e+09 2.716e+07 1.228e+09 3.020e+07 2.959e+08 8.782e+07 -1.430e+08 3.422e+08 -9.125e+08 8.738e+08 -2.575e+09 1.739e+09 -5.172e+09 2.998e+09 -8.695e+09 4.698e+09 -1.311e+10 6.868e+09 -1.835e+10 9.527e+09 -2.435e+10 1.268e+10 -3.099e+10 1.630e+10 -3.817e+10 2.038e+10 -4.577e+10 2.487e+10 -5.364e+10 2.972e+10 -6.165e+10 3.488e+10 -6.966e+10 4.028e+10 -7.752e+10 4.584e+10 -8.511e+10 5.150e+10 -9.230e+10 5.717e+10 -9.898e+10 6.278e+10 -1.050e+11 6.826e+10 -1.104e+11 7.353e+10 -1.150e+11 7.853e+10 -1.187e+11 8.320e+10 -1.215e+11 8.747e+10 -1.235e+11 9.130e+10 -1.245e+11 9.465e+10 -1.247e+11 9.748e+10 -1.239e+11 9.977e+10 -1.223e+11 1.015e+11 -1.199e+11 1.026e+11 -1.167e+11 1.032e+11 -1.128e+11 1.031e+11 -1.084e+11 1.025e+11 -1.034e+11 1.013e+11 -9.793e+10 9.963e+10 -9.212e+10 9.742e+10 -8.603e+10 9.475e+10 -7.975e+10 9.164e+10 -7.335e+10 8.815e+10 -6.692e+10 8.432e+10 -6.053e+10 8.020e+10 -5.426e+10 7.583e+10 -4.817e+10 7.129e+10 -4.231e+10 6.661e+10 -3.674e+10 6.185e+10 -3.149e+10 5.707e+10 -2.661e+10 5.231e+10 -2.211e+10 4.762e+10 -1.802e+10 4.306e+10 -1.434e+10 3.865e+10 -1.107e+10 3.444e+10 -8.204e+09 3.046e+10 -5.734e+09 2.673e+10 -3.638e+09 2.327e+10 -1.894e+09 2.009e+10 -4.734e+08 1.720e+10 6.547e+08 1.460e+10 1.522e+09 1.229e+10 2.162e+09 1.025e+10 2.608e+09 8.477e+09 2.892e+09 6.942e+09 3.043e+09 5.628e+09 3.090e+09 4.514e+09 3.055e+09 3.576e+09 2.958e+09 2.790e+09 2.814e+09 2.138e+09 2.637e+09 1.599e+09 2.434e+09 1.158e+09 2.213e+09 8.009e+08 1.978e+09 5.169e+08 1.733e+09 2.967e+08 1.483e+09 1.331e+08 1.232e+09 1.919e+07 9.857e+08 -5.159e+07 7.501e+08 -8.589e+07 5.330e+08 -9.112e+07 3.427e+08 -7.563e+07 1.876e+08 -4.912e+07 7.673e+07 -2.472e+07 1.530e+07 -1.522e+07 -2.463e+07 -6.028e+06 -1.026e+08 3.098e+07 -2.546e+08 1.139e+08 -4.892e+08 2.564e+08 -8.108e+08 4.716e+08 -1.222e+09 7.728e+08 -1.725e+09 1.172e+09 -2.318e+09 1.681e+09 -3.000e+09 2.310e+09 -3.767e+09 3.070e+09 -4.614e+09 3.966e+09 -5.533e+09 5.008e+09 -6.517e+09 6.199e+09 -7.554e+09 7.542e+09 -8.633e+09 9.037e+09 -9.741e+09 1.068e+10 -1.087e+10 1.247e+10 -1.199e+10 1.441e+10 -1.310e+10 1.647e+10 -1.418e+10 1.864e+10 -1.522e+10 2.092e+10 -1.619e+10 2.328e+10 -1.709e+10 2.571e+10 -1.789e+10 2.817e+10 -1.859e+10 3.066e+10 -1.917e+10 3.312e+10 -1.963e+10 3.555e+10 -1.995e+10 3.792e+10 -2.012e+10 4.019e+10 -2.016e+10 4.233e+10 -2.005e+10 4.432e+10 -1.979e+10 4.614e+10 -1.939e+10 4.776e+10 -1.886e+10 4.916e+10 -1.821e+10 5.031e+10 -1.744e+10 5.121e+10 -1.657e+10 5.184e+10 -1.562e+10 5.219e+10 -1.460e+10 5.226e+10 -1.353e+10 5.205e+10 -1.243e+10 5.157e+10 -1.131e+10 5.081e+10 -1.019e+10 4.980e+10 -9.094e+09 4.854e+10 -8.027e+09 4.706e+10 -7.007e+09 4.537e+10 -6.046e+09 4.350e+10 -5.156e+09 4.147e+10 -4.343e+09 3.930e+10 -3.614e+09 3.702e+10 -2.974e+09 3.465e+10 -2.424e+09 3.223e+10 -1.964e+09 2.977e+10 -1.592e+09 2.730e+10 -1.304e+09 2.484e+10 -1.094e+09 2.242e+10 -9.566e+08 2.006e+10 -8.822e+08 1.777e+10 -8.621e+08 1.559e+10 -8.865e+08 1.351e+10 -9.450e+08 1.156e+10 -1.027e+09 9.758e+09 -1.123e+09 8.106e+09 -1.222e+09 6.617e+09 -1.318e+09 5.303e+09 -1.403e+09 4.166e+09 -1.474e+09 3.205e+09 -1.536e+09 2.421e+09 -1.598e+09 1.798e+09 -1.683e+09 1.307e+09 -1.822e+09 9.043e+08 -2.053e+09 5.343e+08 -2.408e+09 1.417e+08 -2.906e+09 -3.138e+08 -3.556e+09 -8.574e+08 -4.359e+09 -1.501e+09 -5.315e+09 -2.244e+09 -6.419e+09 -3.083e+09 -7.670e+09 -4.008e+09 -9.066e+09 -5.006e+09 -1.060e+10 -6.063e+09 -1.227e+10 -7.165e+09 -1.406e+10 -8.292e+09 -1.598e+10 -9.428e+09 -1.800e+10 -1.056e+10 -2.013e+10 -1.166e+10 -2.234e+10 -1.273e+10 -2.461e+10 -1.374e+10 -2.694e+10 -1.467e+10 -2.931e+10 -1.553e+10 -3.169e+10 -1.629e+10 -3.406e+10 -1.695e+10 -3.640e+10 -1.749e+10 -3.870e+10 -1.792e+10 -4.092e+10 -1.822e+10 -4.305e+10 -1.840e+10 -4.505e+10 -1.846e+10 -4.692e+10 -1.840e+10 -4.863e+10 -1.822e+10 -5.016e+10 -1.793e+10 -5.150e+10 -1.753e+10 -5.262e+10 -1.703e+10 -5.352e+10 -1.645e+10 -5.420e+10 -1.579e+10 -5.463e+10 -1.506e+10 -5.482e+10 -1.428e+10 -5.478e+10 -1.345e+10 -5.449e+10 -1.259e+10 -5.398e+10 -1.171e+10 -5.324e+10 -1.081e+10 -5.229e+10 -9.919e+09 -5.114e+10 -9.035e+09 -4.981e+10 -8.167e+09 -4.831e+10 -7.321e+09 -4.667e+10 -6.503e+09 -4.490e+10 -5.719e+09 -4.302e+10 -4.974e+09 -4.106e+10 -4.272e+09 -3.903e+10 -3.614e+09 -3.694e+10 -3.005e+09 -3.484e+10 -2.444e+09 -3.272e+10 -1.932e+09 -3.060e+10 -1.469e+09 -2.851e+10 -1.055e+09 -2.645e+10 -6.881e+08 -2.444e+10 -3.673e+08 -2.249e+10 -9.048e+07 -2.061e+10 1.449e+08 -1.880e+10 3.409e+08 -1.707e+10 5.005e+08 -1.543e+10 6.267e+08 -1.389e+10 0.005 -53.815 -52.824 -51.834 -50.844 -49.853 -48.863 -47.873 -46.974 -46.167 -45.446 -44.804 -44.235 -43.737 -43.305 -42.937 -42.632 -42.387 -42.203 -42.078 -42.012 -42.005 -42.057 -42.171 -42.346 -42.583 -42.887 -43.260 -43.706 -44.230 -44.839 -45.538 -46.336 -47.244 -48.276 -49.447 -50.782 -52.308 -54.066 -56.112 -58.530 -61.452 -65.110 -69.938 -76.577 -80.088 -76.482 -73.306 -70.297 -66.903 -63.473 -60.325 -57.544 -55.108 -52.971 -51.086 -49.414 -47.925 -46.594 -45.402 -44.332 -43.373 -42.514 -41.747 -41.062 -40.457 -39.928 -39.470 -39.081 -38.759 -38.502 -38.309 -38.179 -38.111 -38.107 -38.166 -38.289 -38.478 -38.734 -39.060 -39.459 -39.934 -40.490 -41.129 -41.859 -42.684 -43.610 -44.645 -45.791 -47.049 -48.412 -49.860 -51.353 -52.817 -54.145 -55.205 -55.862 -56.004 -55.559 -54.532 -53.039 -51.264 -49.386 -47.525 -45.747 -44.083 -42.541 -41.122 -39.819 -38.627 -37.538 -36.545 -35.643 -34.826 -34.089 -33.429 -32.843 -32.328 -31.882 -31.504 -31.194 -30.950 -30.774 -30.666 -30.628 -30.663 -30.773 -30.963 -31.236 -31.600 -32.063 -32.634 -33.328 -34.162 -35.158 -36.346 -37.771 -39.497 -41.615 -44.248 -47.480 -50.755 -52.092 -50.815 -49.009 -47.979 -47.960 -49.220 -52.575 -55.608 -50.810 -44.033 -39.265 -35.637 -32.667 -30.132 -27.910 -25.926 -24.132 -22.493 -20.984 -19.587 -18.288 -17.074 -15.938 -14.870 -13.865 -12.917 -12.021 -11.171 -10.366 -9.604 -8.882 -8.197 -7.549 -6.935 -6.354 -5.804 -5.284 -4.793 -4.330 -3.894 -3.485 -3.100 -2.741 -2.405 -2.093 -1.805 -1.539 -1.295 -1.073 -0.872 -0.693 -0.535 -0.398 -0.281 -0.184 -0.108 -0.052 -0.016 0.000 -0.004 -0.024 -0.065 -0.125 -0.205 -0.306 -0.427 -0.568 -0.731 -0.914 -1.118 -1.344 -1.591 -1.861 -2.153 -2.468 -2.806 -3.168 -3.555 -3.967 -4.405 -4.869 -5.362 -5.882 -6.433 -7.014 -7.627 -8.274 -8.956 -9.676 -10.435 -11.235 -12.080 -12.973 -13.913 -14.909 -15.964 -17.086 -18.281 -19.560 -20.932 -22.410 -24.010 -25.755 -27.674 -29.803 -32.197 -34.923 -38.046 -41.507 -44.659 -46.113 -45.579 -44.524 -43.827 -43.624 -43.871 -44.480 -45.289 -45.951 -45.958 -45.049 -43.495 -41.759 -40.119 -38.671 -37.427 -36.370 -35.479 -34.734 -34.120 -33.624 -33.234 -32.941 -32.739 -32.621 -32.584 -32.625 -32.741 -32.930 -33.191 -33.524 -33.929 -34.408 -34.961 -35.591 -36.302 -37.097 -37.982 -38.963 -40.046 -41.241 -42.558 -44.010 -45.609 -47.371 -49.308 -51.429 -53.724 -56.143 -58.555 -60.690 -62.146 -62.543 -61.791 -60.176 -58.131 -55.996 -53.955 -52.082 -50.397 -48.894 -47.561 -46.382 -45.342 -44.429 -43.633 -42.944 -42.352 -41.850 -41.435 -41.101 -40.844 -40.662 -40.552 -40.514 -40.545 -40.646 -40.816 -41.057 -41.369 -41.755 -42.217 -42.757 -43.381 -44.093 -44.898 -45.805 -46.819 -47.949 -49.204 -50.593 -52.119 -53.773 -55.519 -57.278 -58.910 -60.253 -61.238 -61.975 -62.713 -63.739 -65.368 -67.976 -71.269 -69.973 -64.970 -60.855 -57.685 -55.147 -53.046 -51.265 -49.732 -48.397 -47.226 -46.195 -45.286 -44.484 -43.777 -43.158 -42.618 -42.153 -41.757 -41.426 -41.157 -40.948 -40.797 -40.701 -40.657 -40.666 -40.729 -40.844 -41.011 -41.232 -41.506 -41.835 -42.219 -42.661 -43.162 -43.725 -44.353 -45.049 -45.818 -46.667 -47.601 -48.620 -49.638 -50.657 -51.676 -52.694 -53.713 0.03 -18.7883 -18.4161 -18.0475 -17.6827 -17.3216 -16.9642 -16.6105 -16.2606 -15.9144 -15.5719 -15.2332 -14.8982 -14.5669 -14.2393 -13.9154 -13.5953 -13.2789 -12.9662 -12.6573 -12.3521 -12.0506 -11.7528 -11.4587 -11.1684 -10.8818 -10.5989 -10.3198 -10.0444 -9.7727 -9.5047 -9.2404 -8.9799 -8.7231 -8.47 -8.2207 -7.9751 -7.7332 -7.495 -7.2606 -7.0298 -6.8028 -6.5796 -6.36 -6.1442 -5.9321 -5.7237 -5.5191 -5.3182 -5.121 -4.9275 -4.7377 -4.5517 -4.3694 -4.1909 -4.016 -3.8449 -3.6775 -3.5138 -3.3539 -3.1977 -3.0452 -2.8964 -2.7514 -2.61 -2.4724 -2.3386 -2.2084 -2.082 -1.9593 -1.8403 -1.7251 -1.6136 -1.5058 -1.4017 -1.3014 -1.2048 -1.1119 -1.0227 -0.93726 -0.85555 -0.77755 -0.70329 -0.63275 -0.56593 -0.50284 -0.44347 -0.38783 -0.33592 -0.28773 -0.24326 -0.20252 -0.1655 -0.13221 -0.10265 -0.07681 -0.054696 -0.036306 -0.021642 -0.010703 -0.0034889 0 -0.00023626 -0.0041977 -0.011884 -0.023296 -0.038433 -0.057295 -0.079882 -0.10619 -0.13623 -0.16999 -0.20748 -0.24869 -0.29363 -0.3423 -0.39468 -0.4508 -0.51064 -0.5742 -0.64149 -0.7125 -0.78724 -0.86571 -0.94789 -1.0338 -1.1234 -1.2168 -1.3139 -1.4147 -1.5193 -1.6275 -1.7395 -1.8552 -1.9747 -2.0978 -2.2247 -2.3553 -2.4897 -2.6278 -2.7695 -2.9151 -3.0643 -3.2173 -3.374 -3.5344 -3.6985 -3.8664 -4.038 -4.2133 -4.3923 -4.5751 -4.7616 -4.9518 -5.1458 -5.3434 -5.5448 -5.7499 -5.9588 -6.1714 -6.3877 -6.6077 -6.8314 -7.0589 -7.2901 -7.525 -7.7637 -8.006 -8.2521 -8.5019 -8.7555 -9.0128 -9.2738 -9.5385 -9.8069 -10.0791 -10.355 -10.6346 -10.918 -11.205 -11.4958 -11.7903 -12.0886 -12.3906 -12.6963 -13.0057 -13.3188 -13.6357 -13.9563 -14.2806 -14.6087 -14.9405 -15.276 -15.6152 -15.9581 -16.3048 -16.6552 -17.0093 -17.3672 -17.7287 -18.094 -18.4631 1.0 56559.76 EW3 HH 29.77 34.27 0.050 -5.786e+09 -1.438e+10 -6.083e+09 -1.578e+10 -6.352e+09 -1.712e+10 -6.592e+09 -1.838e+10 -6.799e+09 -1.955e+10 -6.970e+09 -2.061e+10 -7.104e+09 -2.153e+10 -7.198e+09 -2.231e+10 -7.252e+09 -2.294e+10 -7.264e+09 -2.339e+10 -7.235e+09 -2.367e+10 -7.163e+09 -2.378e+10 -7.050e+09 -2.370e+10 -6.898e+09 -2.344e+10 -6.706e+09 -2.301e+10 -6.479e+09 -2.241e+10 -6.217e+09 -2.164e+10 -5.926e+09 -2.073e+10 -5.609e+09 -1.969e+10 -5.269e+09 -1.854e+10 -4.912e+09 -1.728e+10 -4.543e+09 -1.595e+10 -4.165e+09 -1.456e+10 -3.784e+09 -1.314e+10 -3.403e+09 -1.170e+10 -3.028e+09 -1.026e+10 -2.662e+09 -8.862e+09 -2.311e+09 -7.510e+09 -1.977e+09 -6.226e+09 -1.664e+09 -5.029e+09 -1.374e+09 -3.937e+09 -1.109e+09 -2.962e+09 -8.718e+08 -2.116e+09 -6.621e+08 -1.411e+09 -4.808e+08 -8.507e+08 -3.297e+08 -4.391e+08 -2.145e+08 -1.716e+08 -1.503e+08 -1.760e+07 -1.476e+08 1.083e+08 -1.864e+08 3.054e+08 -2.363e+08 6.180e+08 -2.851e+08 1.045e+09 -3.316e+08 1.575e+09 -3.778e+08 2.191e+09 -4.264e+08 2.877e+09 -4.803e+08 3.613e+09 -5.425e+08 4.380e+09 -6.154e+08 5.158e+09 -7.009e+08 5.926e+09 -8.006e+08 6.666e+09 -9.155e+08 7.358e+09 -1.046e+09 7.985e+09 -1.191e+09 8.531e+09 -1.350e+09 8.982e+09 -1.521e+09 9.327e+09 -1.703e+09 9.558e+09 -1.892e+09 9.668e+09 -2.085e+09 9.656e+09 -2.278e+09 9.520e+09 -2.469e+09 9.266e+09 -2.652e+09 8.901e+09 -2.825e+09 8.435e+09 -2.984e+09 7.881e+09 -3.126e+09 7.255e+09 -3.250e+09 6.574e+09 -3.355e+09 5.857e+09 -3.442e+09 5.126e+09 -3.518e+09 4.399e+09 -3.591e+09 3.692e+09 -3.674e+09 3.020e+09 -3.786e+09 2.385e+09 -3.949e+09 1.782e+09 -4.187e+09 1.194e+09 -4.523e+09 5.912e+08 -4.974e+09 -6.429e+07 -5.551e+09 -8.116e+08 -6.257e+09 -1.689e+09 -7.091e+09 -2.728e+09 -8.045e+09 -3.951e+09 -9.114e+09 -5.373e+09 -1.029e+10 -7.003e+09 -1.155e+10 -8.840e+09 -1.290e+10 -1.088e+10 -1.433e+10 -1.311e+10 -1.581e+10 -1.552e+10 -1.733e+10 -1.808e+10 -1.889e+10 -2.077e+10 -2.047e+10 -2.357e+10 -2.205e+10 -2.644e+10 -2.362e+10 -2.935e+10 -2.516e+10 -3.228e+10 -2.666e+10 -3.518e+10 -2.811e+10 -3.803e+10 -2.949e+10 -4.079e+10 -3.080e+10 -4.342e+10 -3.201e+10 -4.591e+10 -3.312e+10 -4.821e+10 -3.412e+10 -5.030e+10 -3.501e+10 -5.217e+10 -3.577e+10 -5.379e+10 -3.640e+10 -5.514e+10 -3.690e+10 -5.622e+10 -3.727e+10 -5.703e+10 -3.750e+10 -5.753e+10 -3.761e+10 -5.774e+10 -3.758e+10 -5.764e+10 -3.742e+10 -5.726e+10 -3.714e+10 -5.659e+10 -3.674e+10 -5.565e+10 -3.623e+10 -5.445e+10 -3.562e+10 -5.301e+10 -3.491e+10 -5.135e+10 -3.410e+10 -4.949e+10 -3.322e+10 -4.745e+10 -3.225e+10 -4.526e+10 -3.123e+10 -4.295e+10 -3.014e+10 -4.054e+10 -2.900e+10 -3.805e+10 -2.783e+10 -3.552e+10 -2.662e+10 -3.297e+10 -2.538e+10 -3.042e+10 -2.413e+10 -2.791e+10 -2.288e+10 -2.544e+10 -2.162e+10 -2.304e+10 -2.037e+10 -2.073e+10 -1.913e+10 -1.852e+10 -1.792e+10 -1.643e+10 -1.674e+10 -1.446e+10 -1.560e+10 -1.263e+10 -1.449e+10 -1.094e+10 -1.344e+10 -9.395e+09 -1.243e+10 -7.991e+09 -1.148e+10 -6.726e+09 -1.059e+10 -5.598e+09 -9.759e+09 -4.600e+09 -8.986e+09 -3.725e+09 -8.271e+09 -2.964e+09 -7.614e+09 -2.308e+09 -7.011e+09 -1.748e+09 -6.459e+09 -1.275e+09 -5.955e+09 -8.809e+08 -5.494e+09 -5.567e+08 -5.070e+09 -2.960e+08 -4.679e+09 -9.229e+07 -4.316e+09 5.982e+07 -3.978e+09 1.652e+08 -3.661e+09 2.285e+08 -3.362e+09 2.543e+08 -3.080e+09 2.469e+08 -2.813e+09 2.108e+08 -2.561e+09 1.509e+08 -2.325e+09 7.175e+07 -2.105e+09 -2.227e+07 -1.903e+09 -1.274e+08 -1.721e+09 -2.408e+08 -1.561e+09 -3.618e+08 -1.423e+09 -4.918e+08 -1.310e+09 -6.347e+08 -1.218e+09 -7.974e+08 -1.146e+09 -9.883e+08 -1.088e+09 -1.216e+09 -1.035e+09 -1.489e+09 -9.805e+08 -1.814e+09 -9.154e+08 -2.193e+09 -8.322e+08 -2.628e+09 -7.241e+08 -3.119e+09 -5.857e+08 -3.661e+09 -4.120e+08 -4.250e+09 -1.997e+08 -4.879e+09 5.375e+07 -5.538e+09 3.500e+08 -6.221e+09 6.897e+08 -6.915e+09 1.072e+09 -7.611e+09 1.496e+09 -8.298e+09 1.960e+09 -8.964e+09 2.459e+09 -9.599e+09 2.992e+09 -1.019e+10 3.552e+09 -1.074e+10 4.135e+09 -1.122e+10 4.736e+09 -1.164e+10 5.349e+09 -1.198e+10 5.966e+09 -1.225e+10 6.583e+09 -1.244e+10 7.195e+09 -1.254e+10 7.797e+09 -1.256e+10 8.383e+09 -1.250e+10 8.949e+09 -1.236e+10 9.492e+09 -1.214e+10 1.001e+10 -1.186e+10 1.050e+10 -1.151e+10 1.095e+10 -1.109e+10 1.138e+10 -1.063e+10 1.177e+10 -1.012e+10 1.212e+10 -9.575e+09 1.245e+10 -8.997e+09 1.274e+10 -8.395e+09 1.299e+10 -7.775e+09 1.321e+10 -7.142e+09 1.339e+10 -6.504e+09 1.353e+10 -5.866e+09 1.362e+10 -5.232e+09 1.367e+10 -4.609e+09 1.367e+10 -4.002e+09 1.361e+10 -3.416e+09 1.349e+10 -2.857e+09 1.330e+10 -2.332e+09 1.303e+10 -1.845e+09 1.269e+10 -1.403e+09 1.226e+10 -1.012e+09 1.174e+10 -6.761e+08 1.114e+10 -4.003e+08 1.046e+10 -1.871e+08 9.702e+09 -3.760e+07 8.873e+09 4.911e+07 7.988e+09 7.632e+07 7.061e+09 4.996e+07 6.112e+09 -2.144e+07 5.164e+09 -1.267e+08 4.240e+09 -2.530e+08 3.368e+09 -3.860e+08 2.576e+09 -5.129e+08 1.890e+09 -6.256e+08 1.331e+09 -7.285e+08 9.040e+08 -8.482e+08 5.816e+08 -1.038e+09 2.968e+08 -1.364e+09 -3.343e+07 -1.872e+09 -4.734e+08 -2.588e+09 -1.054e+09 -3.517e+09 -1.777e+09 -4.655e+09 -2.629e+09 -5.996e+09 -3.576e+09 -7.522e+09 -4.576e+09 -9.208e+09 -5.578e+09 -1.102e+10 -6.520e+09 -1.293e+10 -7.339e+09 -1.487e+10 -7.970e+09 -1.679e+10 -8.346e+09 -1.864e+10 -8.409e+09 -2.034e+10 -8.106e+09 -2.185e+10 -7.400e+09 -2.309e+10 -6.267e+09 -2.405e+10 -4.696e+09 -2.468e+10 -2.689e+09 -2.500e+10 -2.475e+08 -2.506e+10 2.655e+09 -2.493e+10 6.101e+09 -2.474e+10 1.029e+10 -2.463e+10 1.561e+10 -2.471e+10 2.264e+10 -2.504e+10 3.221e+10 -2.551e+10 4.538e+10 -2.586e+10 6.337e+10 -2.567e+10 8.758e+10 -2.434e+10 1.196e+11 -2.119e+10 1.613e+11 -1.538e+10 2.145e+11 -5.995e+09 2.817e+11 8.053e+09 3.654e+11 2.793e+10 4.684e+11 5.496e+10 5.940e+11 9.064e+10 7.456e+11 1.366e+11 9.273e+11 1.944e+11 1.143e+12 2.663e+11 1.398e+12 3.540e+11 1.696e+12 4.598e+11 2.045e+12 5.861e+11 2.447e+12 7.352e+11 2.911e+12 9.095e+11 3.287e+12 1.062e+12 3.869e+12 1.285e+12 4.528e+12 1.539e+12 5.275e+12 1.828e+12 6.116e+12 2.156e+12 7.058e+12 2.522e+12 8.111e+12 2.930e+12 9.282e+12 3.382e+12 1.058e+13 3.881e+12 1.201e+13 4.429e+12 1.359e+13 5.027e+12 1.532e+13 5.676e+12 1.721e+13 6.378e+12 1.928e+13 7.133e+12 2.152e+13 7.942e+12 2.395e+13 8.805e+12 2.658e+13 9.719e+12 2.940e+13 1.069e+13 3.244e+13 1.171e+13 3.569e+13 1.276e+13 3.917e+13 1.388e+13 4.287e+13 1.503e+13 4.680e+13 1.622e+13 5.097e+13 1.744e+13 5.538e+13 1.869e+13 6.004e+13 1.996e+13 6.495e+13 2.125e+13 7.010e+13 2.254e+13 7.550e+13 2.384e+13 8.114e+13 2.512e+13 8.705e+13 2.639e+13 9.331e+13 2.943e+13 9.991e+13 2.993e+13 1.066e+14 3.118e+13 1.135e+14 3.237e+13 1.207e+14 3.351e+13 1.281e+14 3.456e+13 1.358e+14 3.553e+13 1.435e+14 3.638e+13 1.516e+14 3.714e+13 1.598e+14 3.776e+13 1.683e+14 3.824e+13 1.769e+14 3.858e+13 1.856e+14 3.876e+13 1.945e+14 3.875e+13 2.035e+14 3.856e+13 2.127e+14 3.817e+13 2.219e+14 3.759e+13 2.313e+14 3.677e+13 2.406e+14 3.573e+13 2.501e+14 3.445e+13 2.594e+14 3.292e+13 2.689e+14 3.114e+13 2.783e+14 2.910e+13 2.876e+14 2.679e+13 2.970e+14 2.421e+13 3.062e+14 2.136e+13 3.152e+14 1.823e+13 3.242e+14 1.482e+13 3.331e+14 1.114e+13 3.417e+14 7.183e+12 3.501e+14 2.954e+12 3.584e+14 -1.545e+12 3.663e+14 -6.309e+12 3.740e+14 -1.132e+13 3.814e+14 -1.659e+13 3.885e+14 -2.209e+13 3.954e+14 -2.782e+13 4.018e+14 -3.376e+13 4.079e+14 -3.990e+13 4.137e+14 -4.622e+13 4.191e+14 -5.272e+13 4.242e+14 -5.941e+13 4.290e+14 -6.623e+13 4.333e+14 -7.317e+13 4.371e+14 -8.023e+13 4.407e+14 -8.736e+13 4.437e+14 -9.455e+13 4.463e+14 -1.018e+14 4.484e+14 -1.090e+14 4.502e+14 -1.163e+14 4.514e+14 -1.235e+14 4.522e+14 -1.307e+14 4.526e+14 -1.378e+14 4.525e+14 -1.448e+14 4.520e+14 -1.517e+14 4.509e+14 -1.584e+14 4.496e+14 -1.650e+14 4.478e+14 -1.714e+14 4.454e+14 -1.776e+14 4.427e+14 -1.835e+14 4.396e+14 -1.894e+14 4.361e+14 -1.948e+14 4.323e+14 -2.000e+14 4.279e+14 -2.049e+14 4.233e+14 -2.095e+14 4.182e+14 -2.137e+14 4.128e+14 -2.177e+14 4.071e+14 -2.212e+14 4.010e+14 -2.244e+14 3.947e+14 -2.273e+14 3.881e+14 -2.296e+14 3.811e+14 -2.317e+14 3.738e+14 -2.333e+14 3.664e+14 -2.345e+14 3.587e+14 -2.353e+14 3.508e+14 -2.357e+14 3.427e+14 -2.357e+14 3.343e+14 -2.352e+14 3.258e+14 -2.344e+14 3.172e+14 -2.331e+14 3.085e+14 -2.314e+14 2.997e+14 -2.294e+14 2.908e+14 -2.269e+14 2.819e+14 -2.240e+14 2.729e+14 -2.209e+14 2.638e+14 -2.174e+14 2.548e+14 -2.135e+14 2.456e+14 -2.093e+14 2.366e+14 -2.048e+14 2.275e+14 -2.000e+14 2.185e+14 -1.950e+14 2.097e+14 -1.897e+14 2.008e+14 -1.842e+14 1.920e+14 -1.784e+14 1.834e+14 -1.726e+14 1.749e+14 -1.665e+14 1.665e+14 -1.604e+14 1.583e+14 -1.542e+14 1.503e+14 -1.478e+14 1.425e+14 -1.415e+14 1.348e+14 -1.351e+14 1.274e+14 -1.287e+14 1.201e+14 -1.224e+14 1.132e+14 -1.161e+14 1.065e+14 -1.099e+14 9.993e+13 -1.036e+14 9.365e+13 -9.765e+13 8.762e+13 -9.173e+13 8.183e+13 -8.598e+13 7.629e+13 -8.037e+13 7.100e+13 -7.494e+13 6.596e+13 -6.969e+13 6.117e+13 -6.464e+13 5.661e+13 -5.978e+13 5.231e+13 -5.515e+13 4.823e+13 -5.072e+13 4.438e+13 -4.651e+13 4.076e+13 -4.252e+13 3.736e+13 -3.875e+13 3.416e+13 -3.521e+13 3.118e+13 -3.187e+13 2.839e+13 -2.876e+13 2.579e+13 -2.587e+13 2.337e+13 -2.318e+13 2.113e+13 -2.068e+13 1.906e+13 -1.839e+13 1.714e+13 -1.628e+13 1.539e+13 -1.434e+13 1.377e+13 -1.258e+13 1.231e+13 -1.099e+13 1.095e+13 -9.538e+12 9.723e+12 -8.237e+12 8.607e+12 -7.075e+12 7.597e+12 -6.036e+12 6.364e+12 -4.871e+12 5.580e+12 -4.098e+12 4.877e+12 -3.420e+12 4.248e+12 -2.830e+12 3.689e+12 -2.320e+12 3.193e+12 -1.882e+12 2.755e+12 -1.508e+12 2.369e+12 -1.193e+12 2.031e+12 -9.284e+11 1.736e+12 -7.087e+11 1.480e+12 -5.281e+11 1.258e+12 -3.810e+11 1.067e+12 -2.628e+11 9.037e+11 -1.689e+11 7.637e+11 -9.537e+10 6.446e+11 -3.872e+10 5.436e+11 4.108e+09 4.580e+11 3.577e+10 3.856e+11 5.844e+10 3.244e+11 7.392e+10 2.724e+11 8.370e+10 2.283e+11 8.892e+10 1.907e+11 9.049e+10 1.584e+11 8.914e+10 1.307e+11 8.543e+10 1.069e+11 7.984e+10 8.639e+10 7.277e+10 6.876e+10 6.462e+10 5.368e+10 5.575e+10 4.088e+10 4.648e+10 3.015e+10 3.720e+10 2.132e+10 2.827e+10 1.424e+10 2.004e+10 8.757e+09 1.285e+10 4.741e+09 7.034e+09 2.051e+09 2.877e+09 5.664e+08 6.261e+08 2.679e+07 -5.259e+08 -5.189e+08 -2.768e+09 -1.742e+09 -7.400e+09 -3.589e+09 -1.451e+10 -5.931e+09 -2.413e+10 -8.635e+09 -3.620e+10 -1.158e+10 -5.061e+10 -1.465e+10 -6.726e+10 -1.773e+10 -8.593e+10 -2.074e+10 -1.064e+11 -2.359e+10 -1.284e+11 -2.621e+10 -1.517e+11 -2.853e+10 -1.760e+11 -3.051e+10 -2.009e+11 -3.211e+10 -2.261e+11 -3.330e+10 -2.513e+11 -3.407e+10 -2.762e+11 -3.441e+10 -3.004e+11 -3.433e+10 -3.236e+11 -3.382e+10 -3.455e+11 -3.292e+10 -3.660e+11 -3.165e+10 -3.847e+11 -3.002e+10 -4.014e+11 -2.808e+10 -4.160e+11 -2.586e+10 -4.283e+11 -2.339e+10 -4.383e+11 -2.072e+10 -4.458e+11 -1.788e+10 -4.508e+11 -1.491e+10 -4.534e+11 -1.184e+10 -4.536e+11 -8.713e+09 -4.514e+11 -5.562e+09 -4.470e+11 -2.430e+09 -4.403e+11 6.469e+08 -4.317e+11 3.639e+09 -4.212e+11 6.520e+09 -4.090e+11 9.257e+09 -3.953e+11 1.183e+10 -3.803e+11 1.422e+10 -3.642e+11 1.641e+10 -3.472e+11 1.839e+10 -3.295e+11 2.014e+10 -3.113e+11 2.165e+10 -2.929e+11 2.293e+10 -2.743e+11 2.396e+10 -2.557e+11 2.476e+10 -2.373e+11 2.532e+10 -2.193e+11 2.566e+10 -2.018e+11 2.578e+10 -1.848e+11 2.569e+10 -1.685e+11 2.542e+10 -1.530e+11 2.497e+10 -1.383e+11 2.436e+10 -1.244e+11 2.361e+10 -1.114e+11 2.274e+10 -9.934e+10 2.177e+10 -8.816e+10 2.072e+10 -7.787e+10 1.960e+10 -6.847e+10 1.844e+10 -5.992e+10 1.724e+10 -5.218e+10 1.603e+10 -4.523e+10 1.483e+10 -3.901e+10 1.363e+10 -3.348e+10 1.247e+10 -2.860e+10 1.134e+10 -2.431e+10 1.025e+10 -2.056e+10 9.207e+09 -1.729e+10 8.223e+09 -1.447e+10 7.295e+09 -1.204e+10 6.429e+09 -9.964e+09 5.626e+09 -8.196e+09 4.883e+09 -6.697e+09 4.201e+09 -5.436e+09 3.579e+09 -4.379e+09 3.013e+09 -3.497e+09 2.503e+09 -2.766e+09 2.046e+09 -2.164e+09 1.640e+09 -1.671e+09 1.283e+09 -1.269e+09 9.738e+08 -9.456e+08 7.096e+08 -6.865e+08 4.896e+08 -4.820e+08 3.124e+08 -3.233e+08 1.764e+08 -2.030e+08 8.073e+07 -1.159e+08 2.271e+07 -5.823e+07 -7.996e+06 -2.846e+07 -4.039e+07 -1.681e+07 -1.008e+08 -3.909e+06 -1.977e+08 2.313e+07 -3.306e+08 6.809e+07 -4.985e+08 1.325e+08 -7.004e+08 2.180e+08 -9.352e+08 3.265e+08 -1.202e+09 4.606e+08 -1.499e+09 6.232e+08 -1.827e+09 8.179e+08 -2.183e+09 1.048e+09 -2.568e+09 1.319e+09 -2.980e+09 1.634e+09 -3.420e+09 1.998e+09 -3.887e+09 2.418e+09 -4.382e+09 2.899e+09 -4.904e+09 3.446e+09 -5.455e+09 4.067e+09 -6.034e+09 4.768e+09 -6.642e+09 5.555e+09 -7.280e+09 6.435e+09 -7.950e+09 7.416e+09 -8.650e+09 8.503e+09 -9.383e+09 9.705e+09 -1.015e+10 1.103e+10 -1.095e+10 1.247e+10 -1.178e+10 1.405e+10 -1.265e+10 1.576e+10 -1.355e+10 1.760e+10 -1.448e+10 1.959e+10 -1.545e+10 2.171e+10 -1.646e+10 2.396e+10 -1.749e+10 2.633e+10 -1.856e+10 2.883e+10 -1.965e+10 3.144e+10 -2.077e+10 3.416e+10 -2.191e+10 3.696e+10 -2.308e+10 3.983e+10 -2.426e+10 4.275e+10 -2.545e+10 4.571e+10 -2.665e+10 4.868e+10 -2.785e+10 5.164e+10 -2.906e+10 5.456e+10 0.005 -53.712 -52.777 -51.841 -50.905 -49.970 -49.034 -48.102 -47.266 -46.516 -45.849 -45.257 -44.736 -44.284 -43.899 -43.578 -43.320 -43.125 -42.990 -42.917 -42.905 -42.955 -43.068 -43.246 -43.491 -43.805 -44.193 -44.658 -45.207 -45.845 -46.581 -47.426 -48.393 -49.498 -50.764 -52.220 -53.909 -55.890 -58.257 -61.167 -64.921 -70.247 -80.131 -84.686 -76.600 -74.315 -73.931 -72.776 -69.131 -64.847 -61.108 -57.982 -55.345 -53.086 -51.124 -49.402 -47.878 -46.522 -45.310 -44.226 -43.254 -42.383 -41.604 -40.910 -40.297 -39.758 -39.292 -38.894 -38.562 -38.294 -38.089 -37.947 -37.867 -37.849 -37.893 -38.001 -38.174 -38.414 -38.724 -39.105 -39.563 -40.102 -40.726 -41.443 -42.260 -43.188 -44.236 -45.415 -46.738 -48.222 -49.878 -51.721 -53.757 -55.994 -58.457 -61.263 -64.803 -69.413 -70.806 -65.158 -59.662 -55.621 -52.413 -49.740 -47.448 -45.447 -43.680 -42.106 -40.697 -39.430 -38.289 -37.260 -36.335 -35.504 -34.763 -34.104 -33.525 -33.021 -32.591 -32.233 -31.946 -31.729 -31.583 -31.510 -31.511 -31.589 -31.747 -31.989 -32.321 -32.751 -33.288 -33.943 -34.734 -35.680 -36.808 -38.156 -39.775 -41.740 -44.156 -47.146 -50.657 -53.571 -54.099 -52.912 -52.138 -52.720 -55.396 -57.713 -53.093 -46.325 -41.403 -37.624 -34.522 -31.872 -29.548 -27.474 -25.595 -23.879 -22.300 -20.838 -19.477 -18.206 -17.015 -15.897 -14.844 -13.850 -12.911 -12.023 -11.181 -10.384 -9.628 -8.912 -8.232 -7.587 -6.976 -6.397 -5.849 -5.330 -4.840 -4.377 -3.941 -3.531 -3.146 -2.785 -2.448 -2.135 -1.844 -1.576 -1.330 -1.106 -0.903 -0.721 -0.559 -0.419 -0.299 -0.199 -0.119 -0.060 -0.020 0.000 -0.000 -0.020 -0.058 -0.115 -0.193 -0.290 -0.408 -0.547 -0.706 -0.885 -1.086 -1.309 -1.553 -1.819 -2.108 -2.419 -2.754 -3.113 -3.497 -3.906 -4.341 -4.802 -5.292 -5.810 -6.358 -6.938 -7.550 -8.196 -8.878 -9.598 -10.358 -11.161 -12.010 -12.908 -13.860 -14.869 -15.943 -17.087 -18.310 -19.623 -21.038 -22.575 -24.257 -26.113 -28.192 -30.565 -33.352 -36.783 -41.404 -49.279 -57.464 -50.057 -45.220 -43.005 -41.921 -41.519 -41.600 -42.052 -42.760 -43.532 -44.032 -43.882 -42.980 -41.598 -40.085 -38.649 -37.370 -36.262 -35.318 -34.523 -33.861 -33.319 -32.885 -32.552 -32.310 -32.154 -32.079 -32.082 -32.159 -32.308 -32.530 -32.823 -33.187 -33.622 -34.129 -34.712 -35.372 -36.114 -36.941 -37.860 -38.879 -40.005 -41.250 -42.628 -44.155 -45.853 -47.753 -49.894 -52.327 -55.131 -58.414 -62.321 -66.734 -69.514 -68.322 -65.126 -62.011 -59.245 -56.776 -54.573 -52.615 -50.881 -49.350 -48.000 -46.812 -45.769 -44.857 -44.064 -43.380 -42.798 -42.310 -41.909 -41.592 -41.353 -41.192 -41.105 -41.091 -41.149 -41.279 -41.481 -41.757 -42.107 -42.534 -43.040 -43.631 -44.309 -45.082 -45.954 -46.935 -48.034 -49.258 -50.619 -52.120 -53.762 -55.524 -57.349 -59.126 -60.696 -61.935 -62.869 -63.676 -64.570 -65.615 -66.417 -65.901 -63.690 -60.811 -58.056 -55.637 -53.541 -51.717 -50.118 -48.709 -47.461 -46.351 -45.364 -44.484 -43.702 -43.007 -42.393 -41.854 -41.385 -40.981 -40.639 -40.357 -40.131 -39.960 -39.843 -39.777 -39.763 -39.799 -39.885 -40.021 -40.207 -40.443 -40.730 -41.069 -41.461 -41.908 -42.411 -42.972 -43.596 -44.282 -45.035 -45.862 -46.768 -47.760 -48.755 -49.750 -50.745 -51.740 -52.736 0.03 -18.4411 -18.079 -17.7205 -17.3656 -17.0143 -16.6666 -16.3225 -15.9819 -15.645 -15.3116 -14.9818 -14.6556 -14.333 -14.014 -13.6986 -13.3867 -13.0785 -12.7738 -12.4728 -12.1753 -11.8814 -11.5911 -11.3044 -11.0213 -10.7418 -10.4658 -10.1935 -9.9247 -9.6595 -9.398 -9.14 -8.8856 -8.6347 -8.3875 -8.1439 -7.9038 -7.6674 -7.4345 -7.2052 -6.9795 -6.7574 -6.5389 -6.324 -6.1127 -5.9049 -5.7008 -5.5002 -5.3033 -5.1099 -4.9201 -4.7339 -4.5513 -4.3722 -4.1968 -4.0249 -3.8567 -3.692 -3.5309 -3.3734 -3.2195 -3.0692 -2.9225 -2.7794 -2.6398 -2.5039 -2.3715 -2.2427 -2.1175 -1.9959 -1.8779 -1.7635 -1.6527 -1.5454 -1.4418 -1.3417 -1.2453 -1.1524 -1.0631 -0.97738 -0.89527 -0.81674 -0.7418 -0.67046 -0.6027 -0.53853 -0.47795 -0.42097 -0.36757 -0.31776 -0.27153 -0.2289 -0.18986 -0.15441 -0.12254 -0.094269 -0.069584 -0.048489 -0.030983 -0.017066 -0.0067382 0 0.0031488 0.0027083 -0.0013216 -0.0089409 -0.02015 -0.034948 -0.053335 -0.075312 -0.10088 -0.13003 -0.16278 -0.19911 -0.23904 -0.28255 -0.32965 -0.38034 -0.43462 -0.49249 -0.55395 -0.619 -0.68764 -0.75987 -0.83568 -0.91509 -0.99809 -1.0847 -1.1748 -1.2686 -1.366 -1.4669 -1.5714 -1.6796 -1.7913 -1.9066 -2.0255 -2.1479 -2.274 -2.4037 -2.5369 -2.6737 -2.8142 -2.9582 -3.1058 -3.257 -3.4118 -3.5701 -3.7321 -3.8977 -4.0668 -4.2395 -4.4158 -4.5957 -4.7792 -4.9663 -5.157 -5.3513 -5.5491 -5.7506 -5.9556 -6.1642 -6.3764 -6.5922 -6.8116 -7.0346 -7.2612 -7.4913 -7.7251 -7.9624 -8.2034 -8.4479 -8.696 -8.9477 -9.203 -9.4618 -9.7243 -9.9904 -10.26 -10.5332 -10.8101 -11.0905 -11.3745 -11.662 -11.9532 -12.248 -12.5464 -12.8483 -13.1538 -13.463 -13.7757 -14.092 -14.4119 -14.7354 -15.0624 -15.3931 -15.7273 -16.0652 -16.4066 -16.7516 -17.1002 -17.4524 1.0 44956.39 EW3 HV 29.77 34.27 0.050 -1.287e+10 -4.056e+09 -1.392e+10 -4.638e+09 -1.489e+10 -5.203e+09 -1.578e+10 -5.737e+09 -1.657e+10 -6.230e+09 -1.724e+10 -6.670e+09 -1.778e+10 -7.050e+09 -1.818e+10 -7.361e+09 -1.844e+10 -7.597e+09 -1.855e+10 -7.753e+09 -1.851e+10 -7.826e+09 -1.832e+10 -7.817e+09 -1.799e+10 -7.725e+09 -1.753e+10 -7.554e+09 -1.694e+10 -7.309e+09 -1.624e+10 -6.995e+09 -1.544e+10 -6.620e+09 -1.455e+10 -6.194e+09 -1.360e+10 -5.726e+09 -1.260e+10 -5.226e+09 -1.157e+10 -4.703e+09 -1.052e+10 -4.169e+09 -9.474e+09 -3.633e+09 -8.439e+09 -3.104e+09 -7.432e+09 -2.592e+09 -6.464e+09 -2.103e+09 -5.548e+09 -1.648e+09 -4.693e+09 -1.230e+09 -3.905e+09 -8.553e+08 -3.194e+09 -5.281e+08 -2.563e+09 -2.504e+08 -2.016e+09 -2.205e+07 -1.556e+09 1.598e+08 -1.183e+09 3.026e+08 -8.941e+08 4.206e+08 -6.786e+08 5.346e+08 -5.182e+08 6.701e+08 -3.869e+08 8.505e+08 -2.584e+08 1.090e+09 -1.128e+08 1.394e+09 6.140e+07 1.761e+09 2.681e+08 2.186e+09 5.058e+08 2.661e+09 7.704e+08 3.179e+09 1.055e+09 3.730e+09 1.352e+09 4.305e+09 1.653e+09 4.893e+09 1.949e+09 5.483e+09 2.229e+09 6.062e+09 2.486e+09 6.619e+09 2.710e+09 7.140e+09 2.893e+09 7.614e+09 3.028e+09 8.030e+09 3.109e+09 8.376e+09 3.131e+09 8.643e+09 3.093e+09 8.824e+09 2.993e+09 8.913e+09 2.833e+09 8.908e+09 2.614e+09 8.806e+09 2.344e+09 8.611e+09 2.028e+09 8.327e+09 1.675e+09 7.964e+09 1.295e+09 7.528e+09 8.986e+08 7.036e+09 4.959e+08 6.499e+09 9.650e+07 5.934e+09 -2.903e+08 5.360e+09 -6.593e+08 4.793e+09 -1.009e+09 4.251e+09 -1.343e+09 3.748e+09 -1.673e+09 3.294e+09 -2.016e+09 2.894e+09 -2.393e+09 2.545e+09 -2.831e+09 2.232e+09 -3.352e+09 1.938e+09 -3.976e+09 1.638e+09 -4.712e+09 1.310e+09 -5.568e+09 9.338e+08 -6.541e+09 4.937e+08 -7.627e+09 -2.103e+07 -8.820e+09 -6.172e+08 -1.011e+10 -1.296e+09 -1.148e+10 -2.058e+09 -1.292e+10 -2.900e+09 -1.442e+10 -3.815e+09 -1.597e+10 -4.798e+09 -1.755e+10 -5.842e+09 -1.914e+10 -6.935e+09 -2.074e+10 -8.068e+09 -2.232e+10 -9.230e+09 -2.388e+10 -1.041e+10 -2.541e+10 -1.159e+10 -2.687e+10 -1.276e+10 -2.828e+10 -1.391e+10 -2.960e+10 -1.503e+10 -3.083e+10 -1.608e+10 -3.195e+10 -1.707e+10 -3.296e+10 -1.798e+10 -3.384e+10 -1.878e+10 -3.458e+10 -1.948e+10 -3.517e+10 -2.004e+10 -3.561e+10 -2.048e+10 -3.589e+10 -2.076e+10 -3.600e+10 -2.089e+10 -3.595e+10 -2.085e+10 -3.572e+10 -2.065e+10 -3.532e+10 -2.028e+10 -3.476e+10 -1.975e+10 -3.405e+10 -1.907e+10 -3.318e+10 -1.824e+10 -3.219e+10 -1.728e+10 -3.107e+10 -1.621e+10 -2.984e+10 -1.504e+10 -2.853e+10 -1.380e+10 -2.715e+10 -1.251e+10 -2.572e+10 -1.119e+10 -2.426e+10 -9.870e+09 -2.278e+10 -8.560e+09 -2.132e+10 -7.284e+09 -1.988e+10 -6.059e+09 -1.849e+10 -4.899e+09 -1.715e+10 -3.815e+09 -1.587e+10 -2.814e+09 -1.467e+10 -1.899e+09 -1.356e+10 -1.073e+09 -1.253e+10 -3.321e+08 -1.158e+10 3.262e+08 -1.072e+10 9.071e+08 -9.946e+09 1.417e+09 -9.244e+09 1.862e+09 -8.613e+09 2.248e+09 -8.044e+09 2.580e+09 -7.531e+09 2.861e+09 -7.065e+09 3.096e+09 -6.642e+09 3.286e+09 -6.253e+09 3.432e+09 -5.896e+09 3.537e+09 -5.564e+09 3.601e+09 -5.254e+09 3.625e+09 -4.964e+09 3.611e+09 -4.692e+09 3.560e+09 -4.434e+09 3.474e+09 -4.191e+09 3.357e+09 -3.959e+09 3.208e+09 -3.738e+09 3.033e+09 -3.527e+09 2.833e+09 -3.325e+09 2.613e+09 -3.131e+09 2.376e+09 -2.946e+09 2.126e+09 -2.768e+09 1.868e+09 -2.599e+09 1.604e+09 -2.439e+09 1.340e+09 -2.289e+09 1.079e+09 -2.153e+09 8.245e+08 -2.031e+09 5.776e+08 -1.930e+09 3.379e+08 -1.852e+09 1.025e+08 -1.801e+09 -1.351e+08 -1.782e+09 -3.857e+08 -1.794e+09 -6.627e+08 -1.836e+09 -9.813e+08 -1.902e+09 -1.357e+09 -1.986e+09 -1.803e+09 -2.079e+09 -2.329e+09 -2.172e+09 -2.942e+09 -2.254e+09 -3.645e+09 -2.316e+09 -4.436e+09 -2.347e+09 -5.310e+09 -2.338e+09 -6.259e+09 -2.281e+09 -7.270e+09 -2.167e+09 -8.330e+09 -1.988e+09 -9.422e+09 -1.738e+09 -1.053e+10 -1.413e+09 -1.162e+10 -1.007e+09 -1.270e+10 -5.213e+08 -1.372e+10 4.653e+07 -1.469e+10 6.947e+08 -1.557e+10 1.420e+09 -1.637e+10 2.218e+09 -1.706e+10 3.084e+09 -1.765e+10 4.009e+09 -1.812e+10 4.989e+09 -1.849e+10 6.018e+09 -1.875e+10 7.089e+09 -1.890e+10 8.196e+09 -1.897e+10 9.334e+09 -1.895e+10 1.050e+10 -1.885e+10 1.168e+10 -1.869e+10 1.288e+10 -1.846e+10 1.408e+10 -1.819e+10 1.529e+10 -1.787e+10 1.648e+10 -1.750e+10 1.766e+10 -1.711e+10 1.881e+10 -1.667e+10 1.990e+10 -1.620e+10 2.094e+10 -1.571e+10 2.189e+10 -1.518e+10 2.275e+10 -1.463e+10 2.349e+10 -1.405e+10 2.409e+10 -1.345e+10 2.455e+10 -1.283e+10 2.484e+10 -1.220e+10 2.495e+10 -1.155e+10 2.488e+10 -1.089e+10 2.461e+10 -1.023e+10 2.415e+10 -9.568e+09 2.350e+10 -8.909e+09 2.266e+10 -8.259e+09 2.164e+10 -7.621e+09 2.047e+10 -7.002e+09 1.914e+10 -6.406e+09 1.770e+10 -5.836e+09 1.615e+10 -5.298e+09 1.453e+10 -4.796e+09 1.287e+10 -4.330e+09 1.120e+10 -3.904e+09 9.546e+09 -3.517e+09 7.950e+09 -3.169e+09 6.443e+09 -2.857e+09 5.059e+09 -2.581e+09 3.826e+09 -2.340e+09 2.768e+09 -2.138e+09 1.898e+09 -1.989e+09 1.206e+09 -1.920e+09 6.480e+08 -1.975e+09 1.424e+08 -2.196e+09 -4.102e+08 -2.615e+09 -1.091e+09 -3.239e+09 -1.943e+09 -4.065e+09 -2.977e+09 -5.087e+09 -4.173e+09 -6.298e+09 -5.491e+09 -7.688e+09 -6.878e+09 -9.242e+09 -8.266e+09 -1.094e+10 -9.575e+09 -1.274e+10 -1.072e+10 -1.462e+10 -1.163e+10 -1.652e+10 -1.220e+10 -1.838e+10 -1.236e+10 -2.016e+10 -1.204e+10 -2.179e+10 -1.121e+10 -2.323e+10 -9.831e+09 -2.444e+10 -7.894e+09 -2.543e+10 -5.401e+09 -2.622e+10 -2.335e+09 -2.689e+10 1.374e+09 -2.760e+10 5.914e+09 -2.853e+10 1.168e+10 -2.989e+10 1.930e+10 -3.186e+10 2.973e+10 -3.450e+10 4.417e+10 -3.776e+10 6.408e+10 -4.140e+10 9.111e+10 -4.508e+10 1.272e+11 -4.835e+10 1.745e+11 -5.064e+10 2.353e+11 -5.133e+10 3.125e+11 -4.969e+10 4.088e+11 -4.489e+10 5.277e+11 -3.603e+10 6.730e+11 -2.208e+10 8.486e+11 -1.951e+09 1.059e+12 2.560e+10 1.309e+12 6.195e+10 1.604e+12 1.085e+11 1.949e+12 1.668e+11 2.350e+12 2.385e+11 2.815e+12 3.254e+11 3.348e+12 4.293e+11 3.789e+12 5.283e+11 4.457e+12 6.661e+11 5.215e+12 8.259e+11 6.072e+12 1.010e+12 7.034e+12 1.221e+12 8.112e+12 1.458e+12 9.317e+12 1.727e+12 1.066e+13 2.026e+12 1.214e+13 2.360e+12 1.378e+13 2.728e+12 1.558e+13 3.134e+12 1.755e+13 3.575e+12 1.971e+13 4.056e+12 2.207e+13 4.574e+12 2.463e+13 5.131e+12 2.740e+13 5.727e+12 3.040e+13 6.358e+12 3.362e+13 7.025e+12 3.707e+13 7.725e+12 4.079e+13 8.455e+12 4.473e+13 9.212e+12 4.896e+13 9.995e+12 5.343e+13 1.079e+13 5.816e+13 1.160e+13 6.317e+13 1.242e+13 6.844e+13 1.324e+13 7.399e+13 1.407e+13 7.981e+13 1.487e+13 8.589e+13 1.565e+13 9.224e+13 1.641e+13 9.887e+13 1.713e+13 1.059e+14 1.834e+13 1.133e+14 1.932e+13 1.207e+14 1.994e+13 1.284e+14 2.050e+13 1.363e+14 2.098e+13 1.444e+14 2.137e+13 1.528e+14 2.165e+13 1.614e+14 2.184e+13 1.702e+14 2.190e+13 1.792e+14 2.184e+13 1.884e+14 2.164e+13 1.976e+14 2.129e+13 2.072e+14 2.078e+13 2.168e+14 2.011e+13 2.266e+14 1.926e+13 2.364e+14 1.822e+13 2.465e+14 1.699e+13 2.565e+14 1.556e+13 2.667e+14 1.391e+13 2.768e+14 1.205e+13 2.870e+14 9.940e+12 2.972e+14 7.612e+12 3.074e+14 5.037e+12 3.175e+14 2.210e+12 3.276e+14 -8.677e+11 3.377e+14 -4.204e+12 3.475e+14 -7.805e+12 3.573e+14 -1.167e+13 3.669e+14 -1.579e+13 3.762e+14 -2.018e+13 3.854e+14 -2.482e+13 3.944e+14 -2.973e+13 4.030e+14 -3.490e+13 4.114e+14 -4.030e+13 4.195e+14 -4.594e+13 4.271e+14 -5.180e+13 4.345e+14 -5.788e+13 4.415e+14 -6.417e+13 4.481e+14 -7.063e+13 4.542e+14 -7.727e+13 4.599e+14 -8.406e+13 4.653e+14 -9.102e+13 4.703e+14 -9.809e+13 4.747e+14 -1.052e+14 4.788e+14 -1.125e+14 4.823e+14 -1.198e+14 4.854e+14 -1.272e+14 4.879e+14 -1.345e+14 4.900e+14 -1.418e+14 4.916e+14 -1.490e+14 4.927e+14 -1.563e+14 4.934e+14 -1.634e+14 4.936e+14 -1.705e+14 4.933e+14 -1.774e+14 4.926e+14 -1.841e+14 4.915e+14 -1.907e+14 4.898e+14 -1.970e+14 4.878e+14 -2.033e+14 4.855e+14 -2.092e+14 4.826e+14 -2.149e+14 4.794e+14 -2.204e+14 4.757e+14 -2.255e+14 4.717e+14 -2.304e+14 4.673e+14 -2.350e+14 4.625e+14 -2.391e+14 4.574e+14 -2.430e+14 4.519e+14 -2.465e+14 4.461e+14 -2.497e+14 4.399e+14 -2.525e+14 4.335e+14 -2.548e+14 4.267e+14 -2.568e+14 4.195e+14 -2.583e+14 4.122e+14 -2.595e+14 4.044e+14 -2.601e+14 3.965e+14 -2.604e+14 3.882e+14 -2.602e+14 3.797e+14 -2.597e+14 3.710e+14 -2.586e+14 3.621e+14 -2.571e+14 3.529e+14 -2.551e+14 3.437e+14 -2.528e+14 3.343e+14 -2.500e+14 3.248e+14 -2.468e+14 3.151e+14 -2.433e+14 3.054e+14 -2.392e+14 2.956e+14 -2.350e+14 2.857e+14 -2.302e+14 2.758e+14 -2.253e+14 2.659e+14 -2.199e+14 2.560e+14 -2.143e+14 2.461e+14 -2.084e+14 2.362e+14 -2.023e+14 2.264e+14 -1.959e+14 2.168e+14 -1.895e+14 2.072e+14 -1.828e+14 1.978e+14 -1.760e+14 1.886e+14 -1.691e+14 1.795e+14 -1.621e+14 1.706e+14 -1.551e+14 1.619e+14 -1.481e+14 1.534e+14 -1.411e+14 1.452e+14 -1.342e+14 1.371e+14 -1.273e+14 1.294e+14 -1.204e+14 1.219e+14 -1.137e+14 1.146e+14 -1.072e+14 1.077e+14 -1.007e+14 1.009e+14 -9.442e+13 9.440e+13 -8.831e+13 8.818e+13 -8.238e+13 8.223e+13 -7.665e+13 7.655e+13 -7.113e+13 7.113e+13 -6.582e+13 6.596e+13 -6.074e+13 6.106e+13 -5.589e+13 5.641e+13 -5.127e+13 5.200e+13 -4.688e+13 4.784e+13 -4.273e+13 4.391e+13 -3.881e+13 4.021e+13 -3.513e+13 3.673e+13 -3.169e+13 3.348e+13 -2.848e+13 3.043e+13 -2.549e+13 2.759e+13 -2.272e+13 2.495e+13 -2.016e+13 2.250e+13 -1.781e+13 2.024e+13 -1.566e+13 1.814e+13 -1.368e+13 1.622e+13 -1.190e+13 1.445e+13 -1.029e+13 1.284e+13 -8.846e+12 1.137e+13 -7.551e+12 1.003e+13 -6.400e+12 8.821e+12 -5.382e+12 7.376e+12 -4.282e+12 6.437e+12 -3.535e+12 5.596e+12 -2.887e+12 4.846e+12 -2.330e+12 4.182e+12 -1.855e+12 3.594e+12 -1.453e+12 3.076e+12 -1.116e+12 2.623e+12 -8.360e+11 2.228e+12 -6.061e+11 1.885e+12 -4.197e+11 1.590e+12 -2.705e+11 1.335e+12 -1.529e+11 1.118e+12 -6.170e+10 9.331e+11 7.475e+09 7.764e+11 5.872e+10 6.442e+11 9.543e+10 5.330e+11 1.206e+11 4.397e+11 1.366e+11 3.616e+11 1.456e+11 2.963e+11 1.490e+11 2.415e+11 1.483e+11 1.955e+11 1.443e+11 1.570e+11 1.378e+11 1.245e+11 1.293e+11 9.721e+10 1.193e+11 7.431e+10 1.081e+11 5.520e+10 9.612e+10 3.942e+10 8.360e+10 2.658e+10 7.088e+10 1.635e+10 5.829e+10 8.494e+09 4.618e+10 2.749e+09 3.492e+10 -1.137e+09 2.486e+10 -3.437e+09 1.635e+10 -4.520e+09 9.674e+09 -4.954e+09 4.903e+09 -5.584e+09 1.565e+09 -7.172e+09 -1.647e+09 -9.885e+09 -6.263e+09 -1.341e+10 -1.324e+10 -1.739e+10 -2.296e+10 -2.151e+10 -3.551e+10 -2.555e+10 -5.082e+10 -2.931e+10 -6.874e+10 -3.260e+10 -8.905e+10 -3.529e+10 -1.115e+11 -3.725e+10 -1.356e+11 -3.838e+10 -1.612e+11 -3.863e+10 -1.877e+11 -3.794e+10 -2.148e+11 -3.629e+10 -2.421e+11 -3.369e+10 -2.690e+11 -3.016e+10 -2.952e+11 -2.576e+10 -3.204e+11 -2.054e+10 -3.440e+11 -1.460e+10 -3.659e+11 -8.026e+09 -3.856e+11 -9.278e+08 -4.031e+11 6.573e+09 -4.181e+11 1.436e+10 -4.304e+11 2.232e+10 -4.401e+11 3.032e+10 -4.470e+11 3.826e+10 -4.512e+11 4.601e+10 -4.527e+11 5.347e+10 -4.517e+11 6.056e+10 -4.482e+11 6.719e+10 -4.424e+11 7.331e+10 -4.345e+11 7.885e+10 -4.247e+11 8.375e+10 -4.132e+11 8.797e+10 -4.001e+11 9.151e+10 -3.857e+11 9.434e+10 -3.702e+11 9.646e+10 -3.538e+11 9.788e+10 -3.366e+11 9.862e+10 -3.189e+11 9.872e+10 -3.008e+11 9.819e+10 -2.825e+11 9.707e+10 -2.641e+11 9.541e+10 -2.458e+11 9.326e+10 -2.278e+11 9.065e+10 -2.100e+11 8.764e+10 -1.927e+11 8.428e+10 -1.758e+11 8.062e+10 -1.596e+11 7.671e+10 -1.440e+11 7.260e+10 -1.292e+11 6.834e+10 -1.151e+11 6.397e+10 -1.019e+11 5.954e+10 -8.955e+10 5.509e+10 -7.806e+10 5.066e+10 -6.747e+10 4.630e+10 -5.779e+10 4.203e+10 -4.899e+10 3.789e+10 -4.108e+10 3.391e+10 -3.402e+10 3.011e+10 -2.779e+10 2.652e+10 -2.235e+10 2.314e+10 -1.765e+10 2.001e+10 -1.363e+10 1.713e+10 -1.027e+10 1.450e+10 -7.490e+09 1.213e+10 -5.225e+09 1.001e+10 -3.421e+09 8.147e+09 -2.018e+09 6.525e+09 -9.555e+08 5.138e+09 -1.801e+08 3.972e+09 3.632e+08 3.007e+09 7.251e+08 2.227e+09 9.522e+08 1.607e+09 1.089e+09 1.117e+09 1.175e+09 7.260e+08 1.243e+09 3.959e+08 1.315e+09 9.171e+07 1.401e+09 -2.141e+08 1.500e+09 -5.399e+08 1.605e+09 -8.952e+08 1.707e+09 -1.281e+09 1.796e+09 -1.695e+09 1.864e+09 -2.133e+09 1.907e+09 -2.586e+09 1.923e+09 -3.047e+09 1.912e+09 -3.509e+09 1.875e+09 -3.967e+09 1.815e+09 -4.413e+09 1.736e+09 -4.844e+09 1.644e+09 -5.255e+09 1.544e+09 -5.645e+09 1.443e+09 -6.013e+09 1.346e+09 -6.359e+09 1.260e+09 -6.684e+09 1.189e+09 -6.991e+09 1.140e+09 -7.283e+09 1.116e+09 -7.564e+09 1.123e+09 -7.838e+09 1.163e+09 -8.110e+09 1.241e+09 -8.386e+09 1.360e+09 -8.670e+09 1.523e+09 -8.968e+09 1.732e+09 -9.285e+09 1.992e+09 -9.624e+09 2.305e+09 -9.991e+09 2.676e+09 -1.039e+10 3.108e+09 -1.081e+10 3.606e+09 -1.128e+10 4.175e+09 -1.177e+10 4.818e+09 -1.230e+10 5.544e+09 -1.286e+10 6.356e+09 -1.346e+10 7.258e+09 -1.408e+10 8.254e+09 -1.472e+10 9.351e+09 -1.538e+10 1.055e+10 -1.605e+10 1.185e+10 -1.674e+10 1.327e+10 -1.743e+10 1.479e+10 -1.812e+10 1.641e+10 -1.881e+10 1.815e+10 -1.949e+10 1.999e+10 -2.017e+10 2.194e+10 -2.083e+10 2.398e+10 -2.148e+10 2.611e+10 -2.212e+10 2.833e+10 -2.276e+10 3.062e+10 -2.338e+10 3.297e+10 -2.401e+10 3.536e+10 -2.463e+10 3.779e+10 0.005 -52.779 -51.840 -50.901 -49.962 -49.023 -48.085 -47.150 -46.308 -45.553 -44.878 -44.276 -43.744 -43.278 -42.877 -42.538 -42.259 -42.040 -41.878 -41.775 -41.729 -41.742 -41.814 -41.945 -42.139 -42.396 -42.721 -43.115 -43.585 -44.135 -44.772 -45.504 -46.344 -47.304 -48.404 -49.669 -51.135 -52.855 -54.911 -57.447 -60.745 -65.505 -74.671 -78.294 -68.982 -65.104 -63.072 -61.937 -61.351 -61.088 -60.910 -60.523 -59.662 -58.279 -56.562 -54.747 -52.990 -51.361 -49.880 -48.547 -47.353 -46.286 -45.335 -44.491 -43.746 -43.094 -42.527 -42.043 -41.636 -41.304 -41.045 -40.857 -40.740 -40.692 -40.715 -40.808 -40.973 -41.211 -41.527 -41.921 -42.398 -42.964 -43.621 -44.378 -45.241 -46.219 -47.315 -48.537 -49.883 -51.348 -52.913 -54.545 -56.204 -57.877 -59.632 -61.708 -64.637 -68.842 -70.037 -64.346 -58.900 -54.958 -51.867 -49.315 -47.141 -45.250 -43.584 -42.104 -40.781 -39.593 -38.524 -37.564 -36.703 -35.934 -35.250 -34.648 -34.124 -33.674 -33.298 -32.993 -32.761 -32.601 -32.514 -32.502 -32.569 -32.718 -32.952 -33.279 -33.706 -34.243 -34.902 -35.700 -36.658 -37.805 -39.175 -40.815 -42.777 -45.083 -47.581 -49.618 -50.243 -49.517 -48.506 -47.957 -48.192 -49.559 -52.804 -55.541 -51.238 -44.719 -39.996 -36.379 -33.412 -30.875 -28.649 -26.658 -24.853 -23.202 -21.679 -20.268 -18.953 -17.723 -16.569 -15.484 -14.462 -13.497 -12.584 -11.720 -10.900 -10.124 -9.387 -8.688 -8.025 -7.396 -6.799 -6.233 -5.698 -5.191 -4.712 -4.259 -3.833 -3.432 -3.056 -2.703 -2.374 -2.068 -1.784 -1.523 -1.283 -1.064 -0.866 -0.689 -0.533 -0.397 -0.281 -0.185 -0.109 -0.053 -0.017 0.000 -0.003 -0.026 -0.065 -0.125 -0.204 -0.304 -0.423 -0.563 -0.723 -0.904 -1.106 -1.329 -1.574 -1.840 -2.129 -2.441 -2.776 -3.134 -3.518 -3.926 -4.360 -4.821 -5.309 -5.826 -6.373 -6.950 -7.560 -8.204 -8.884 -9.601 -10.358 -11.158 -12.004 -12.898 -13.845 -14.851 -15.919 -17.058 -18.275 -19.582 -20.990 -22.520 -24.193 -26.041 -28.111 -30.473 -33.249 -36.667 -41.274 -49.135 -57.305 -49.882 -45.030 -42.802 -41.711 -41.314 -41.431 -41.979 -42.912 -44.148 -45.435 -46.175 -45.743 -44.255 -42.379 -40.585 -39.022 -37.702 -36.600 -35.684 -34.931 -34.318 -33.830 -33.454 -33.180 -33.000 -32.907 -32.898 -32.969 -33.116 -33.341 -33.641 -34.015 -34.464 -34.990 -35.595 -36.280 -37.051 -37.910 -38.864 -39.919 -41.081 -42.358 -43.760 -45.295 -46.973 -48.805 -50.801 -52.976 -55.357 -58.015 -61.080 -64.486 -66.214 -64.100 -60.255 -56.810 -53.980 -51.615 -49.597 -47.850 -46.324 -44.981 -43.796 -42.748 -41.821 -41.003 -40.285 -39.656 -39.113 -38.648 -38.257 -37.935 -37.680 -37.489 -37.360 -37.291 -37.282 -37.331 -37.438 -37.604 -37.829 -38.113 -38.458 -38.865 -39.337 -39.876 -40.487 -41.172 -41.937 -42.788 -43.732 -44.779 -45.938 -47.227 -48.662 -50.268 -52.072 -54.115 -56.446 -59.123 -62.197 -65.622 -68.955 -71.119 -71.719 -71.640 -71.143 -69.534 -66.774 -63.715 -60.882 -58.398 -56.248 -54.383 -52.759 -51.338 -50.090 -48.993 -48.027 -47.177 -46.433 -45.784 -45.222 -44.741 -44.336 -44.002 -43.736 -43.535 -43.396 -43.318 -43.299 -43.338 -43.435 -43.589 -43.801 -44.071 -44.400 -44.789 -45.241 -45.757 -46.340 -46.991 -47.717 -48.523 -49.415 -50.401 -51.392 -52.382 -53.373 -54.363 -55.353 0.03 -19.0059 -18.631 -18.2598 -17.8924 -17.5287 -17.1688 -16.8126 -16.4601 -16.1113 -15.7663 -15.425 -15.0875 -14.7537 -14.4236 -14.0973 -13.7747 -13.4558 -13.1406 -12.8292 -12.5216 -12.2176 -11.9174 -11.6209 -11.3282 -11.0392 -10.7539 -10.4724 -10.1946 -9.9205 -9.6502 -9.3836 -9.1207 -8.8616 -8.6062 -8.3545 -8.1066 -7.8624 -7.6219 -7.3852 -7.1522 -6.9229 -6.6974 -6.4756 -6.2575 -6.0432 -5.8326 -5.6257 -5.4226 -5.2232 -5.0276 -4.8356 -4.6474 -4.463 -4.2823 -4.1053 -3.932 -3.7625 -3.5967 -3.4346 -3.2763 -3.1217 -2.9709 -2.8238 -2.6804 -2.5407 -2.4048 -2.2726 -2.1442 -2.0195 -1.8985 -1.7812 -1.6677 -1.5579 -1.4519 -1.3496 -1.251 -1.1561 -1.065 -0.97765 -0.89401 -0.8141 -0.73792 -0.66548 -0.59677 -0.5318 -0.47056 -0.41305 -0.35927 -0.30923 -0.26293 -0.22036 -0.18152 -0.14642 -0.11504 -0.087408 -0.063506 -0.043337 -0.026902 -0.014201 -0.0052334 0 0.0014996 -0.00073464 -0.0067027 -0.016405 -0.02984 -0.04701 -0.067913 -0.092551 -0.12092 -0.15303 -0.18887 -0.22844 -0.27174 -0.31879 -0.36956 -0.42407 -0.48231 -0.54429 -0.60999 -0.67944 -0.75262 -0.82953 -0.91017 -0.99455 -1.0827 -1.1745 -1.2701 -1.3694 -1.4725 -1.5792 -1.6897 -1.804 -1.922 -2.0437 -2.1692 -2.2983 -2.4313 -2.5679 -2.7083 -2.8524 -3.0003 -3.1519 -3.3072 -3.4662 -3.629 -3.7955 -3.9658 -4.1398 -4.3175 -4.499 -4.6842 -4.8731 -5.0658 -5.2621 -5.4623 -5.6661 -5.8737 -6.0851 -6.3001 -6.5189 -6.7415 -6.9677 -7.1977 -7.4315 -7.6689 -7.9101 -8.1551 -8.4037 -8.6561 -8.9123 -9.1721 -9.4357 -9.7031 -9.9741 -10.2489 -10.5275 -10.8098 -11.0958 -11.3855 -11.679 -11.9762 -12.2771 -12.5818 -12.8902 -13.2024 -13.5182 -13.8378 -14.1612 -14.4883 -14.8191 -15.1536 -15.4919 -15.8339 -16.1797 -16.5291 -16.8824 -17.2393 -17.6 -17.9644 -18.3326 1.0 44956.39 EW3 VV 29.77 34.27 0.050 -1.462e+10 1.237e+10 -1.560e+10 1.294e+10 -1.648e+10 1.343e+10 -1.725e+10 1.382e+10 -1.788e+10 1.411e+10 -1.836e+10 1.429e+10 -1.869e+10 1.436e+10 -1.887e+10 1.432e+10 -1.888e+10 1.418e+10 -1.874e+10 1.394e+10 -1.844e+10 1.361e+10 -1.799e+10 1.318e+10 -1.741e+10 1.268e+10 -1.671e+10 1.212e+10 -1.591e+10 1.150e+10 -1.501e+10 1.083e+10 -1.403e+10 1.013e+10 -1.301e+10 9.410e+09 -1.195e+10 8.681e+09 -1.086e+10 7.951e+09 -9.776e+09 7.230e+09 -8.703e+09 6.527e+09 -7.655e+09 5.847e+09 -6.646e+09 5.197e+09 -5.687e+09 4.582e+09 -4.786e+09 4.006e+09 -3.954e+09 3.470e+09 -3.195e+09 2.978e+09 -2.514e+09 2.531e+09 -1.915e+09 2.129e+09 -1.400e+09 1.773e+09 -9.682e+08 1.464e+09 -6.162e+08 1.203e+09 -3.371e+08 9.924e+08 -1.177e+08 8.335e+08 6.210e+07 7.282e+08 2.294e+08 6.736e+08 4.124e+08 6.613e+08 6.324e+08 6.792e+08 9.009e+08 7.152e+08 1.221e+09 7.609e+08 1.588e+09 8.114e+08 1.996e+09 8.645e+08 2.436e+09 9.197e+08 2.896e+09 9.775e+08 3.365e+09 1.039e+09 3.830e+09 1.104e+09 4.277e+09 1.176e+09 4.694e+09 1.253e+09 5.067e+09 1.336e+09 5.385e+09 1.426e+09 5.637e+09 1.521e+09 5.814e+09 1.621e+09 5.909e+09 1.723e+09 5.918e+09 1.827e+09 5.838e+09 1.929e+09 5.673e+09 2.027e+09 5.425e+09 2.119e+09 5.105e+09 2.201e+09 4.720e+09 2.271e+09 4.286e+09 2.328e+09 3.817e+09 2.372e+09 3.328e+09 2.403e+09 2.836e+09 2.424e+09 2.354e+09 2.441e+09 1.892e+09 2.462e+09 1.456e+09 2.498e+09 1.045e+09 2.565e+09 6.458e+08 2.678e+09 2.402e+08 2.849e+09 -1.970e+08 3.087e+09 -6.920e+08 3.394e+09 -1.266e+09 3.769e+09 -1.938e+09 4.204e+09 -2.721e+09 4.693e+09 -3.617e+09 5.225e+09 -4.631e+09 5.792e+09 -5.760e+09 6.386e+09 -6.998e+09 6.995e+09 -8.338e+09 7.614e+09 -9.772e+09 8.234e+09 -1.129e+10 8.847e+09 -1.287e+10 9.448e+09 -1.452e+10 1.003e+10 -1.622e+10 1.059e+10 -1.796e+10 1.112e+10 -1.972e+10 1.162e+10 -2.149e+10 1.208e+10 -2.326e+10 1.250e+10 -2.501e+10 1.288e+10 -2.674e+10 1.322e+10 -2.842e+10 1.352e+10 -3.005e+10 1.377e+10 -3.161e+10 1.398e+10 -3.307e+10 1.414e+10 -3.443e+10 1.426e+10 -3.566e+10 1.434e+10 -3.675e+10 1.439e+10 -3.769e+10 1.439e+10 -3.845e+10 1.437e+10 -3.903e+10 1.431e+10 -3.940e+10 1.423e+10 -3.956e+10 1.412e+10 -3.951e+10 1.400e+10 -3.922e+10 1.385e+10 -3.870e+10 1.369e+10 -3.797e+10 1.351e+10 -3.701e+10 1.331e+10 -3.584e+10 1.311e+10 -3.448e+10 1.289e+10 -3.296e+10 1.266e+10 -3.128e+10 1.241e+10 -2.948e+10 1.215e+10 -2.759e+10 1.188e+10 -2.564e+10 1.159e+10 -2.366e+10 1.129e+10 -2.167e+10 1.097e+10 -1.971e+10 1.064e+10 -1.781e+10 1.030e+10 -1.598e+10 9.952e+09 -1.424e+10 9.594e+09 -1.261e+10 9.234e+09 -1.110e+10 8.875e+09 -9.710e+09 8.520e+09 -8.453e+09 8.173e+09 -7.321e+09 7.839e+09 -6.312e+09 7.518e+09 -5.418e+09 7.215e+09 -4.630e+09 6.928e+09 -3.941e+09 6.659e+09 -3.340e+09 6.406e+09 -2.819e+09 6.167e+09 -2.368e+09 5.939e+09 -1.982e+09 5.720e+09 -1.652e+09 5.506e+09 -1.373e+09 5.296e+09 -1.141e+09 5.086e+09 -9.502e+08 4.874e+09 -7.977e+08 4.659e+09 -6.800e+08 4.440e+09 -5.933e+08 4.217e+09 -5.347e+08 3.989e+09 -5.009e+08 3.757e+09 -4.890e+08 3.521e+09 -4.958e+08 3.282e+09 -5.186e+08 3.041e+09 -5.545e+08 2.800e+09 -6.009e+08 2.560e+09 -6.557e+08 2.325e+09 -7.172e+08 2.095e+09 -7.843e+08 1.873e+09 -8.571e+08 1.662e+09 -9.371e+08 1.464e+09 -1.027e+09 1.279e+09 -1.133e+09 1.108e+09 -1.262e+09 9.475e+08 -1.422e+09 7.920e+08 -1.621e+09 6.332e+08 -1.870e+09 4.599e+08 -2.173e+09 2.598e+08 -2.535e+09 2.022e+07 -2.959e+09 -2.711e+08 -3.444e+09 -6.250e+08 -3.986e+09 -1.050e+09 -4.581e+09 -1.553e+09 -5.221e+09 -2.138e+09 -5.895e+09 -2.807e+09 -6.591e+09 -3.559e+09 -7.296e+09 -4.393e+09 -7.992e+09 -5.301e+09 -8.663e+09 -6.276e+09 -9.292e+09 -7.308e+09 -9.860e+09 -8.386e+09 -1.035e+10 -9.497e+09 -1.075e+10 -1.063e+10 -1.104e+10 -1.176e+10 -1.122e+10 -1.289e+10 -1.127e+10 -1.400e+10 -1.120e+10 -1.507e+10 -1.099e+10 -1.611e+10 -1.066e+10 -1.710e+10 -1.020e+10 -1.803e+10 -9.625e+09 -1.890e+10 -8.943e+09 -1.973e+10 -8.164e+09 -2.049e+10 -7.299e+09 -2.121e+10 -6.358e+09 -2.188e+10 -5.354e+09 -2.251e+10 -4.296e+09 -2.310e+10 -3.194e+09 -2.366e+10 -2.058e+09 -2.418e+10 -8.974e+08 -2.466e+10 2.786e+08 -2.511e+10 1.458e+09 -2.552e+10 2.633e+09 -2.587e+10 3.789e+09 -2.617e+10 4.915e+09 -2.640e+10 5.996e+09 -2.656e+10 7.019e+09 -2.662e+10 7.968e+09 -2.659e+10 8.831e+09 -2.645e+10 9.592e+09 -2.619e+10 1.024e+10 -2.581e+10 1.076e+10 -2.530e+10 1.115e+10 -2.467e+10 1.140e+10 -2.390e+10 1.151e+10 -2.301e+10 1.146e+10 -2.200e+10 1.128e+10 -2.088e+10 1.095e+10 -1.967e+10 1.048e+10 -1.836e+10 9.899e+09 -1.700e+10 9.203e+09 -1.558e+10 8.411e+09 -1.413e+10 7.545e+09 -1.267e+10 6.622e+09 -1.123e+10 5.668e+09 -9.814e+09 4.707e+09 -8.459e+09 3.764e+09 -7.178e+09 2.866e+09 -5.991e+09 2.039e+09 -4.916e+09 1.304e+09 -3.970e+09 6.744e+08 -3.167e+09 1.513e+08 -2.524e+09 -2.895e+08 -2.050e+09 -7.032e+08 -1.745e+09 -1.171e+09 -1.591e+09 -1.774e+09 -1.546e+09 -2.567e+09 -1.568e+09 -3.568e+09 -1.628e+09 -4.770e+09 -1.717e+09 -6.144e+09 -1.841e+09 -7.646e+09 -2.013e+09 -9.219e+09 -2.254e+09 -1.079e+10 -2.582e+09 -1.229e+10 -3.016e+09 -1.363e+10 -3.571e+09 -1.472e+10 -4.256e+09 -1.549e+10 -5.072e+09 -1.587e+10 -6.015e+09 -1.581e+10 -7.075e+09 -1.529e+10 -8.238e+09 -1.431e+10 -9.504e+09 -1.292e+10 -1.089e+10 -1.118e+10 -1.248e+10 -9.118e+09 -1.442e+10 -6.674e+09 -1.699e+10 -3.599e+09 -2.062e+10 6.342e+08 -2.581e+10 6.840e+09 -3.314e+10 1.611e+10 -4.317e+10 2.977e+10 -5.652e+10 4.937e+10 -7.383e+10 7.666e+10 -9.578e+10 1.137e+11 -1.232e+11 1.628e+11 -1.568e+11 2.265e+11 -1.977e+11 3.078e+11 -2.468e+11 4.099e+11 -3.053e+11 5.363e+11 -3.744e+11 6.914e+11 -4.555e+11 8.794e+11 -5.501e+11 1.105e+12 -6.598e+11 1.374e+12 -7.863e+11 1.692e+12 -9.313e+11 2.065e+12 -1.097e+12 2.499e+12 -1.285e+12 3.002e+12 -1.498e+12 3.581e+12 -1.738e+12 4.058e+12 -1.921e+12 4.783e+12 -2.212e+12 5.605e+12 -2.538e+12 6.536e+12 -2.901e+12 7.581e+12 -3.305e+12 8.752e+12 -3.754e+12 1.006e+13 -4.251e+12 1.151e+13 -4.802e+12 1.312e+13 -5.408e+12 1.489e+13 -6.077e+12 1.684e+13 -6.811e+12 1.898e+13 -7.618e+12 2.132e+13 -8.502e+12 2.385e+13 -9.467e+12 2.661e+13 -1.052e+13 2.958e+13 -1.167e+13 3.280e+13 -1.292e+13 3.624e+13 -1.427e+13 3.995e+13 -1.575e+13 4.390e+13 -1.734e+13 4.810e+13 -1.905e+13 5.258e+13 -2.091e+13 5.732e+13 -2.289e+13 6.233e+13 -2.503e+13 6.760e+13 -2.731e+13 7.314e+13 -2.976e+13 7.895e+13 -3.237e+13 8.504e+13 -3.515e+13 9.137e+13 -3.810e+13 9.800e+13 -4.123e+13 1.049e+14 -4.456e+13 1.114e+14 -4.896e+13 1.199e+14 -5.138e+13 1.276e+14 -5.524e+13 1.355e+14 -5.929e+13 1.435e+14 -6.353e+13 1.517e+14 -6.799e+13 1.602e+14 -7.265e+13 1.688e+14 -7.751e+13 1.776e+14 -8.261e+13 1.865e+14 -8.790e+13 1.956e+14 -9.340e+13 2.048e+14 -9.918e+13 2.141e+14 -1.051e+14 2.236e+14 -1.112e+14 2.331e+14 -1.177e+14 2.426e+14 -1.243e+14 2.522e+14 -1.311e+14 2.618e+14 -1.382e+14 2.714e+14 -1.455e+14 2.810e+14 -1.531e+14 2.905e+14 -1.608e+14 2.999e+14 -1.688e+14 3.092e+14 -1.769e+14 3.184e+14 -1.854e+14 3.276e+14 -1.940e+14 3.364e+14 -2.028e+14 3.451e+14 -2.117e+14 3.536e+14 -2.209e+14 3.618e+14 -2.302e+14 3.697e+14 -2.398e+14 3.772e+14 -2.494e+14 3.845e+14 -2.591e+14 3.913e+14 -2.689e+14 3.979e+14 -2.788e+14 4.040e+14 -2.887e+14 4.096e+14 -2.986e+14 4.149e+14 -3.086e+14 4.197e+14 -3.185e+14 4.240e+14 -3.284e+14 4.278e+14 -3.381e+14 4.313e+14 -3.479e+14 4.341e+14 -3.574e+14 4.365e+14 -3.669e+14 4.384e+14 -3.760e+14 4.398e+14 -3.850e+14 4.407e+14 -3.938e+14 4.411e+14 -4.023e+14 4.410e+14 -4.105e+14 4.405e+14 -4.183e+14 4.394e+14 -4.258e+14 4.380e+14 -4.331e+14 4.360e+14 -4.398e+14 4.336e+14 -4.462e+14 4.309e+14 -4.522e+14 4.277e+14 -4.578e+14 4.241e+14 -4.629e+14 4.203e+14 -4.676e+14 4.160e+14 -4.719e+14 4.113e+14 -4.757e+14 4.064e+14 -4.790e+14 4.012e+14 -4.818e+14 3.957e+14 -4.842e+14 3.899e+14 -4.861e+14 3.839e+14 -4.874e+14 3.775e+14 -4.882e+14 3.710e+14 -4.885e+14 3.643e+14 -4.884e+14 3.573e+14 -4.877e+14 3.501e+14 -4.864e+14 3.427e+14 -4.846e+14 3.353e+14 -4.822e+14 3.276e+14 -4.794e+14 3.198e+14 -4.759e+14 3.117e+14 -4.719e+14 3.037e+14 -4.673e+14 2.955e+14 -4.622e+14 2.872e+14 -4.565e+14 2.789e+14 -4.502e+14 2.705e+14 -4.435e+14 2.620e+14 -4.362e+14 2.535e+14 -4.284e+14 2.451e+14 -4.202e+14 2.368e+14 -4.115e+14 2.284e+14 -4.024e+14 2.202e+14 -3.927e+14 2.118e+14 -3.829e+14 2.037e+14 -3.725e+14 1.955e+14 -3.619e+14 1.876e+14 -3.510e+14 1.797e+14 -3.398e+14 1.719e+14 -3.284e+14 1.644e+14 -3.169e+14 1.569e+14 -3.052e+14 1.496e+14 -2.934e+14 1.425e+14 -2.816e+14 1.356e+14 -2.697e+14 1.288e+14 -2.579e+14 1.223e+14 -2.462e+14 1.160e+14 -2.346e+14 1.098e+14 -2.231e+14 1.039e+14 -2.117e+14 9.826e+13 -2.006e+14 9.276e+13 -1.896e+14 8.748e+13 -1.790e+14 8.240e+13 -1.686e+14 7.753e+13 -1.584e+14 7.286e+13 -1.486e+14 6.838e+13 -1.390e+14 6.410e+13 -1.298e+14 6.001e+13 -1.210e+14 5.612e+13 -1.125e+14 5.240e+13 -1.044e+14 4.885e+13 -9.657e+13 4.549e+13 -8.914e+13 4.229e+13 -8.206e+13 3.925e+13 -7.533e+13 3.637e+13 -6.897e+13 3.365e+13 -6.297e+13 3.107e+13 -5.732e+13 2.864e+13 -5.200e+13 2.635e+13 -4.702e+13 2.418e+13 -4.238e+13 2.214e+13 -3.806e+13 2.022e+13 -3.406e+13 1.843e+13 -3.035e+13 1.676e+13 -2.694e+13 1.522e+13 -2.382e+13 1.376e+13 -2.096e+13 1.242e+13 -1.835e+13 1.119e+13 -1.600e+13 1.004e+13 -1.387e+13 8.989e+12 -1.196e+13 8.022e+12 -1.026e+13 7.137e+12 -8.744e+12 6.036e+12 -7.062e+12 5.333e+12 -5.937e+12 4.696e+12 -4.954e+12 4.122e+12 -4.102e+12 3.605e+12 -3.369e+12 3.142e+12 -2.741e+12 2.730e+12 -2.207e+12 2.363e+12 -1.757e+12 2.039e+12 -1.381e+12 1.753e+12 -1.070e+12 1.503e+12 -8.140e+11 1.285e+12 -6.057e+11 1.095e+12 -4.381e+11 9.311e+11 -3.047e+11 7.899e+11 -1.996e+11 6.688e+11 -1.180e+11 5.653e+11 -5.548e+10 4.770e+11 -8.378e+09 4.017e+11 2.635e+10 3.375e+11 5.123e+10 2.827e+11 6.833e+10 2.358e+11 7.922e+10 1.955e+11 8.519e+10 1.608e+11 8.720e+10 1.308e+11 8.604e+10 1.048e+11 8.233e+10 8.240e+10 7.659e+10 6.315e+10 6.930e+10 4.677e+10 6.089e+10 3.302e+10 5.178e+10 2.175e+10 4.241e+10 1.282e+10 3.320e+10 6.074e+09 2.458e+10 1.342e+09 1.697e+10 -1.659e+09 1.077e+10 -3.467e+09 6.226e+09 -5.054e+09 3.126e+09 -7.550e+09 4.026e+08 -1.156e+10 -3.412e+09 -1.706e+10 -9.375e+09 -2.378e+10 -1.798e+10 -3.147e+10 -2.944e+10 -3.987e+10 -4.376e+10 -4.872e+10 -6.086e+10 -5.779e+10 -8.061e+10 -6.685e+10 -1.028e+11 -7.566e+10 -1.270e+11 -8.403e+10 -1.530e+11 -9.175e+10 -1.803e+11 -9.866e+10 -2.086e+11 -1.046e+11 -2.374e+11 -1.095e+11 -2.661e+11 -1.131e+11 -2.945e+11 -1.155e+11 -3.220e+11 -1.166e+11 -3.482e+11 -1.164e+11 -3.728e+11 -1.150e+11 -3.954e+11 -1.123e+11 -4.158e+11 -1.084e+11 -4.336e+11 -1.034e+11 -4.488e+11 -9.753e+10 -4.612e+11 -9.078e+10 -4.707e+11 -8.332e+10 -4.774e+11 -7.529e+10 -4.812e+11 -6.685e+10 -4.823e+11 -5.811e+10 -4.807e+11 -4.922e+10 -4.766e+11 -4.031e+10 -4.701e+11 -3.148e+10 -4.615e+11 -2.287e+10 -4.509e+11 -1.459e+10 -4.386e+11 -6.692e+09 -4.248e+11 7.352e+08 -4.096e+11 7.631e+09 -3.934e+11 1.396e+10 -3.762e+11 1.969e+10 -3.583e+11 2.480e+10 -3.399e+11 2.927e+10 -3.210e+11 3.312e+10 -3.020e+11 3.635e+10 -2.829e+11 3.896e+10 -2.639e+11 4.100e+10 -2.450e+11 4.247e+10 -2.264e+11 4.342e+10 -2.082e+11 4.387e+10 -1.905e+11 4.386e+10 -1.734e+11 4.343e+10 -1.570e+11 4.262e+10 -1.412e+11 4.147e+10 -1.263e+11 4.001e+10 -1.121e+11 3.830e+10 -9.883e+10 3.637e+10 -8.646e+10 3.426e+10 -7.501e+10 3.201e+10 -6.448e+10 2.967e+10 -5.490e+10 2.726e+10 -4.624e+10 2.483e+10 -3.849e+10 2.242e+10 -3.163e+10 2.004e+10 -2.561e+10 1.774e+10 -2.040e+10 1.554e+10 -1.595e+10 1.346e+10 -1.220e+10 1.151e+10 -9.074e+09 9.723e+09 -6.526e+09 8.102e+09 -4.484e+09 6.651e+09 -2.881e+09 5.378e+09 -1.657e+09 4.282e+09 -7.474e+08 3.354e+09 -9.165e+07 2.589e+09 3.660e+08 1.971e+09 6.810e+08 1.479e+09 9.038e+08 1.088e+09 1.078e+09 7.629e+08 1.238e+09 4.708e+08 1.402e+09 1.826e+08 1.579e+09 -1.223e+08 1.765e+09 -4.561e+08 1.952e+09 -8.224e+08 2.132e+09 -1.220e+09 2.296e+09 -1.645e+09 2.439e+09 -2.090e+09 2.556e+09 -2.547e+09 2.646e+09 -3.011e+09 2.708e+09 -3.472e+09 2.745e+09 -3.925e+09 2.759e+09 -4.363e+09 2.755e+09 -4.783e+09 2.737e+09 -5.181e+09 2.712e+09 -5.556e+09 2.684e+09 -5.906e+09 2.661e+09 -6.232e+09 2.648e+09 -6.537e+09 2.650e+09 -6.822e+09 2.673e+09 -7.091e+09 2.722e+09 -7.349e+09 2.803e+09 -7.599e+09 2.919e+09 -7.847e+09 3.076e+09 -8.098e+09 3.276e+09 -8.357e+09 3.526e+09 -8.627e+09 3.829e+09 -8.913e+09 4.191e+09 -9.219e+09 4.616e+09 -9.547e+09 5.108e+09 -9.899e+09 5.675e+09 -1.028e+10 6.322e+09 -1.068e+10 7.054e+09 -1.111e+10 7.879e+09 -1.155e+10 8.803e+09 -1.202e+10 9.828e+09 -1.250e+10 1.096e+10 -1.300e+10 1.221e+10 -1.350e+10 1.357e+10 -1.400e+10 1.506e+10 -1.450e+10 1.666e+10 -1.499e+10 1.839e+10 -1.546e+10 2.025e+10 -1.591e+10 2.222e+10 -1.635e+10 2.432e+10 -1.675e+10 2.654e+10 -1.714e+10 2.886e+10 -1.750e+10 3.130e+10 -1.784e+10 3.382e+10 -1.815e+10 3.644e+10 -1.846e+10 3.913e+10 -1.875e+10 4.189e+10 -1.905e+10 4.468e+10 0.005 -52.832 -51.850 -50.869 -49.887 -48.906 -47.924 -46.946 -46.065 -45.270 -44.556 -43.917 -43.347 -42.844 -42.405 -42.028 -41.710 -41.449 -41.246 -41.099 -41.008 -40.972 -40.992 -41.068 -41.203 -41.396 -41.650 -41.967 -42.351 -42.804 -43.333 -43.941 -44.636 -45.426 -46.322 -47.337 -48.489 -49.801 -51.304 -53.042 -55.080 -57.521 -60.530 -64.391 -69.360 -72.713 -70.070 -67.247 -65.509 -64.471 -63.743 -62.947 -61.769 -60.133 -58.209 -56.222 -54.317 -52.561 -50.968 -49.536 -48.253 -47.106 -46.081 -45.168 -44.360 -43.648 -43.025 -42.486 -42.028 -41.647 -41.339 -41.103 -40.939 -40.844 -40.818 -40.863 -40.979 -41.166 -41.428 -41.766 -42.183 -42.683 -43.270 -43.948 -44.723 -45.599 -46.578 -47.660 -48.839 -50.096 -51.397 -52.683 -53.874 -54.882 -55.648 -56.153 -56.396 -56.339 -55.891 -54.966 -53.583 -51.887 -50.058 -48.234 -46.491 -44.863 -43.359 -41.980 -40.720 -39.569 -38.521 -37.570 -36.709 -35.934 -35.240 -34.624 -34.083 -33.614 -33.217 -32.891 -32.634 -32.448 -32.334 -32.293 -32.329 -32.445 -32.644 -32.934 -33.320 -33.813 -34.424 -35.170 -36.071 -37.153 -38.450 -40.008 -41.875 -44.071 -46.437 -48.313 -48.740 -47.759 -46.410 -45.385 -44.902 -45.069 -46.069 -48.319 -52.045 -51.304 -45.826 -40.588 -36.656 -33.511 -30.868 -28.575 -26.539 -24.705 -23.035 -21.501 -20.083 -18.764 -17.533 -16.381 -15.298 -14.279 -13.317 -12.408 -11.548 -10.734 -9.962 -9.231 -8.537 -7.880 -7.256 -6.665 -6.105 -5.576 -5.074 -4.601 -4.154 -3.734 -3.338 -2.967 -2.621 -2.297 -1.996 -1.718 -1.462 -1.227 -1.014 -0.821 -0.650 -0.498 -0.368 -0.257 -0.166 -0.095 -0.044 -0.012 0.000 -0.008 -0.032 -0.077 -0.141 -0.224 -0.328 -0.452 -0.596 -0.760 -0.945 -1.150 -1.377 -1.625 -1.895 -2.188 -2.502 -2.840 -3.202 -3.587 -3.998 -4.434 -4.896 -5.386 -5.903 -6.450 -7.028 -7.637 -8.279 -8.956 -9.670 -10.422 -11.215 -12.053 -12.936 -13.871 -14.859 -15.907 -17.020 -18.204 -19.468 -20.824 -22.283 -23.861 -25.578 -27.461 -29.546 -31.880 -34.524 -37.544 -40.908 -44.125 -45.933 -45.726 -44.746 -44.025 -43.791 -44.038 -44.722 -45.753 -46.869 -47.465 -46.909 -45.313 -43.343 -41.465 -39.827 -38.438 -37.272 -36.298 -35.491 -34.827 -34.291 -33.868 -33.549 -33.326 -33.191 -33.139 -33.168 -33.274 -33.456 -33.712 -34.042 -34.444 -34.921 -35.473 -36.102 -36.811 -37.603 -38.481 -39.449 -40.511 -41.672 -42.933 -44.295 -45.756 -47.307 -48.927 -50.580 -52.206 -53.723 -55.021 -55.961 -56.377 -56.140 -55.258 -53.902 -52.306 -50.654 -49.055 -47.559 -46.184 -44.935 -43.806 -42.790 -41.880 -41.067 -40.346 -39.710 -39.155 -38.675 -38.266 -37.925 -37.648 -37.433 -37.279 -37.184 -37.147 -37.166 -37.242 -37.374 -37.564 -37.810 -38.114 -38.478 -38.903 -39.391 -39.946 -40.569 -41.267 -42.043 -42.904 -43.855 -44.907 -46.071 -47.362 -48.798 -50.402 -52.204 -54.248 -56.591 -59.321 -62.576 -66.594 -71.865 -79.731 -90.188 -82.321 -77.033 -72.453 -68.305 -64.749 -61.754 -59.222 -57.063 -55.206 -53.596 -52.192 -50.964 -49.887 -48.943 -48.118 -47.398 -46.775 -46.241 -45.789 -45.415 -45.114 -44.883 -44.718 -44.619 -44.583 -44.609 -44.696 -44.845 -45.056 -45.328 -45.664 -46.065 -46.533 -47.072 -47.683 -48.371 -49.141 -50.002 -50.960 -52.028 -53.100 -54.172 -55.244 -56.316 -57.388 0.03 -19.5079 -19.1207 -18.7374 -18.358 -17.9824 -17.6108 -17.243 -16.8791 -16.5191 -16.1629 -15.8107 -15.4623 -15.1178 -14.7772 -14.4404 -14.1076 -13.7786 -13.4535 -13.1323 -12.815 -12.5015 -12.192 -11.8863 -11.5845 -11.2865 -10.9925 -10.7023 -10.4161 -10.1337 -9.8551 -9.5805 -9.3097 -9.0429 -8.7799 -8.5208 -8.2655 -8.0142 -7.7667 -7.5231 -7.2834 -7.0476 -6.8156 -6.5875 -6.3634 -6.1431 -5.9266 -5.7141 -5.5054 -5.3006 -5.0997 -4.9027 -4.7096 -4.5203 -4.3349 -4.1535 -3.9758 -3.8021 -3.6323 -3.4663 -3.3042 -3.146 -2.9916 -2.8412 -2.6946 -2.5519 -2.4131 -2.2782 -2.1472 -2.02 -1.8967 -1.7773 -1.6618 -1.5502 -1.4424 -1.3385 -1.2386 -1.1424 -1.0502 -0.96185 -0.87738 -0.79679 -0.72008 -0.64725 -0.57831 -0.51324 -0.45206 -0.39475 -0.34133 -0.29179 -0.24613 -0.20435 -0.16645 -0.13243 -0.10229 -0.076036 -0.053661 -0.035167 -0.020554 -0.0098214 -0.0029702 0 -0.00091078 -0.0057026 -0.014375 -0.026929 -0.043364 -0.06368 -0.087876 -0.11595 -0.14791 -0.18375 -0.22347 -0.26707 -0.31456 -0.36592 -0.42117 -0.48029 -0.5433 -0.61019 -0.68095 -0.7556 -0.83413 -0.91655 -1.0028 -1.093 -1.1871 -1.285 -1.3868 -1.4925 -1.6021 -1.7156 -1.8329 -1.9541 -2.0792 -2.2082 -2.3411 -2.4778 -2.6184 -2.7629 -2.9113 -3.0636 -3.2198 -3.3798 -3.5437 -3.7115 -3.8832 -4.0587 -4.2382 -4.4215 -4.6087 -4.7997 -4.9947 -5.1936 -5.3963 -5.6029 -5.8134 -6.0277 -6.246 -6.4681 -6.6941 -6.924 -7.1578 -7.3954 -7.6369 -7.8824 -8.1317 -8.3848 -8.6419 -8.9028 -9.1676 -9.4363 -9.7089 -9.9854 -10.2657 -10.5499 -10.838 -11.13 -11.4259 -11.7256 -12.0293 -12.3368 -12.6482 -12.9634 -13.2826 -13.6056 -13.9325 -14.2633 -14.598 -14.9366 -15.279 -15.6253 -15.9755 -16.3296 -16.6876 -17.0494 -17.4151 -17.7847 -18.1582 -18.5356 -18.9168 -19.302 1.0 44956.39 EW3 VH 29.77 34.27 0.050 -2.163e+10 -3.959e+09 -2.295e+10 -4.384e+09 -2.413e+10 -4.788e+09 -2.517e+10 -5.166e+09 -2.605e+10 -5.512e+09 -2.675e+10 -5.821e+09 -2.727e+10 -6.087e+09 -2.760e+10 -6.308e+09 -2.773e+10 -6.479e+09 -2.767e+10 -6.599e+09 -2.743e+10 -6.666e+09 -2.699e+10 -6.680e+09 -2.638e+10 -6.641e+09 -2.560e+10 -6.550e+09 -2.468e+10 -6.408e+09 -2.361e+10 -6.217e+09 -2.242e+10 -5.982e+09 -2.113e+10 -5.707e+09 -1.976e+10 -5.395e+09 -1.833e+10 -5.052e+09 -1.685e+10 -4.682e+09 -1.535e+10 -4.292e+09 -1.384e+10 -3.887e+09 -1.235e+10 -3.473e+09 -1.088e+10 -3.057e+09 -9.463e+09 -2.645e+09 -8.106e+09 -2.242e+09 -6.826e+09 -1.856e+09 -5.634e+09 -1.492e+09 -4.542e+09 -1.156e+09 -3.558e+09 -8.524e+08 -2.691e+09 -5.867e+08 -1.945e+09 -3.631e+08 -1.325e+09 -1.850e+08 -8.312e+08 -5.427e+07 -4.641e+08 2.898e+07 -2.199e+08 7.091e+07 -8.173e+07 9.634e+07 6.669e+06 1.514e+08 1.231e+08 2.670e+08 3.105e+08 4.414e+08 5.718e+08 6.652e+08 8.965e+08 9.307e+08 1.271e+09 1.231e+09 1.680e+09 1.560e+09 2.108e+09 1.909e+09 2.538e+09 2.271e+09 2.954e+09 2.636e+09 3.341e+09 2.996e+09 3.686e+09 3.343e+09 3.974e+09 3.668e+09 4.197e+09 3.963e+09 4.344e+09 4.222e+09 4.412e+09 4.438e+09 4.396e+09 4.606e+09 4.296e+09 4.722e+09 4.116e+09 4.785e+09 3.860e+09 4.794e+09 3.539e+09 4.750e+09 3.160e+09 4.657e+09 2.739e+09 4.521e+09 2.287e+09 4.348e+09 1.818e+09 4.148e+09 1.345e+09 3.932e+09 8.772e+08 3.713e+09 4.188e+08 3.506e+09 -3.146e+07 3.327e+09 -4.854e+08 3.188e+09 -9.653e+08 3.101e+09 -1.500e+09 3.069e+09 -2.123e+09 3.086e+09 -2.869e+09 3.143e+09 -3.764e+09 3.224e+09 -4.831e+09 3.312e+09 -6.088e+09 3.393e+09 -7.540e+09 3.451e+09 -9.191e+09 3.476e+09 -1.104e+10 3.458e+09 -1.309e+10 3.391e+09 -1.532e+10 3.268e+09 -1.772e+10 3.086e+09 -2.028e+10 2.843e+09 -2.297e+10 2.539e+09 -2.579e+10 2.173e+09 -2.871e+10 1.749e+09 -3.169e+10 1.268e+09 -3.473e+10 7.348e+08 -3.779e+10 1.546e+08 -4.084e+10 -4.665e+08 -4.386e+10 -1.122e+09 -4.682e+10 -1.804e+09 -4.969e+10 -2.504e+09 -5.244e+10 -3.212e+09 -5.505e+10 -3.919e+09 -5.749e+10 -4.614e+09 -5.974e+10 -5.288e+09 -6.177e+10 -5.930e+09 -6.357e+10 -6.528e+09 -6.511e+10 -7.075e+09 -6.638e+10 -7.559e+09 -6.737e+10 -7.974e+09 -6.807e+10 -8.317e+09 -6.848e+10 -8.577e+09 -6.859e+10 -8.748e+09 -6.839e+10 -8.826e+09 -6.790e+10 -8.810e+09 -6.711e+10 -8.699e+09 -6.604e+10 -8.496e+09 -6.469e+10 -8.203e+09 -6.310e+10 -7.827e+09 -6.127e+10 -7.373e+09 -5.923e+10 -6.851e+09 -5.701e+10 -6.270e+09 -5.461e+10 -5.640e+09 -5.208e+10 -4.973e+09 -4.945e+10 -4.280e+09 -4.672e+10 -3.573e+09 -4.395e+10 -2.864e+09 -4.115e+10 -2.164e+09 -3.834e+10 -1.482e+09 -3.556e+10 -8.301e+08 -3.282e+10 -2.152e+08 -3.015e+10 3.558e+08 -2.757e+10 8.772e+08 -2.509e+10 1.344e+09 -2.272e+10 1.755e+09 -2.049e+10 2.109e+09 -1.839e+10 2.404e+09 -1.644e+10 2.644e+09 -1.463e+10 2.830e+09 -1.297e+10 2.966e+09 -1.146e+10 3.057e+09 -1.010e+10 3.106e+09 -8.870e+09 3.119e+09 -7.776e+09 3.101e+09 -6.806e+09 3.057e+09 -5.952e+09 2.992e+09 -5.205e+09 2.908e+09 -4.554e+09 2.810e+09 -3.991e+09 2.701e+09 -3.505e+09 2.583e+09 -3.088e+09 2.456e+09 -2.732e+09 2.323e+09 -2.429e+09 2.182e+09 -2.172e+09 2.036e+09 -1.956e+09 1.884e+09 -1.775e+09 1.726e+09 -1.625e+09 1.565e+09 -1.502e+09 1.401e+09 -1.404e+09 1.237e+09 -1.326e+09 1.073e+09 -1.270e+09 9.125e+08 -1.232e+09 7.563e+08 -1.216e+09 6.049e+08 -1.222e+09 4.575e+08 -1.252e+09 3.107e+08 -1.312e+09 1.588e+08 -1.402e+09 -5.510e+06 -1.525e+09 -1.916e+08 -1.682e+09 -4.090e+08 -1.872e+09 -6.665e+08 -2.091e+09 -9.718e+08 -2.337e+09 -1.331e+09 -2.605e+09 -1.748e+09 -2.890e+09 -2.224e+09 -3.185e+09 -2.762e+09 -3.484e+09 -3.357e+09 -3.781e+09 -4.009e+09 -4.067e+09 -4.711e+09 -4.337e+09 -5.458e+09 -4.582e+09 -6.243e+09 -4.796e+09 -7.056e+09 -4.973e+09 -7.889e+09 -5.106e+09 -8.732e+09 -5.190e+09 -9.574e+09 -5.222e+09 -1.040e+10 -5.198e+09 -1.121e+10 -5.115e+09 -1.199e+10 -4.973e+09 -1.273e+10 -4.771e+09 -1.342e+10 -4.510e+09 -1.405e+10 -4.193e+09 -1.462e+10 -3.821e+09 -1.511e+10 -3.399e+09 -1.554e+10 -2.930e+09 -1.589e+10 -2.418e+09 -1.616e+10 -1.870e+09 -1.636e+10 -1.291e+09 -1.648e+10 -6.855e+08 -1.653e+10 -6.024e+07 -1.652e+10 5.788e+08 -1.644e+10 1.227e+09 -1.630e+10 1.878e+09 -1.610e+10 2.528e+09 -1.586e+10 3.170e+09 -1.558e+10 3.802e+09 -1.525e+10 4.416e+09 -1.489e+10 5.009e+09 -1.450e+10 5.576e+09 -1.409e+10 6.111e+09 -1.365e+10 6.608e+09 -1.318e+10 7.061e+09 -1.270e+10 7.463e+09 -1.219e+10 7.806e+09 -1.166e+10 8.082e+09 -1.112e+10 8.282e+09 -1.055e+10 8.400e+09 -9.969e+09 8.427e+09 -9.368e+09 8.358e+09 -8.755e+09 8.188e+09 -8.130e+09 7.915e+09 -7.497e+09 7.540e+09 -6.862e+09 7.066e+09 -6.229e+09 6.503e+09 -5.603e+09 5.861e+09 -4.991e+09 5.157e+09 -4.398e+09 4.411e+09 -3.831e+09 3.648e+09 -3.295e+09 2.893e+09 -2.795e+09 2.177e+09 -2.338e+09 1.526e+09 -1.932e+09 9.643e+08 -1.585e+09 5.037e+08 -1.311e+09 1.311e+08 -1.132e+09 -2.054e+08 -1.066e+09 -5.895e+08 -1.117e+09 -1.104e+09 -1.266e+09 -1.802e+09 -1.491e+09 -2.699e+09 -1.776e+09 -3.787e+09 -2.115e+09 -5.041e+09 -2.509e+09 -6.420e+09 -2.963e+09 -7.870e+09 -3.481e+09 -9.330e+09 -4.067e+09 -1.073e+10 -4.723e+09 -1.199e+10 -5.447e+09 -1.303e+10 -6.232e+09 -1.379e+10 -7.070e+09 -1.420e+10 -7.944e+09 -1.420e+10 -8.841e+09 -1.377e+10 -9.742e+09 -1.291e+10 -1.064e+10 -1.164e+10 -1.153e+10 -9.996e+09 -1.245e+10 -8.031e+09 -1.347e+10 -5.750e+09 -1.476e+10 -3.052e+09 -1.655e+10 3.558e+08 -1.917e+10 5.025e+09 -2.297e+10 1.176e+10 -2.831e+10 2.162e+10 -3.550e+10 3.584e+10 -4.487e+10 5.588e+10 -5.669e+10 8.337e+10 -7.129e+10 1.203e+11 -8.905e+10 1.687e+11 -1.103e+11 2.310e+11 -1.356e+11 3.102e+11 -1.653e+11 4.091e+11 -1.999e+11 5.314e+11 -2.401e+11 6.809e+11 -2.865e+11 8.620e+11 -3.399e+11 1.079e+12 -4.009e+11 1.338e+12 -4.705e+11 1.644e+12 -5.495e+11 2.002e+12 -6.390e+11 2.419e+12 -7.402e+11 2.903e+12 -8.542e+11 3.459e+12 -9.824e+11 3.876e+12 -1.066e+12 4.566e+12 -1.219e+12 5.349e+12 -1.391e+12 6.235e+12 -1.585e+12 7.229e+12 -1.800e+12 8.343e+12 -2.042e+12 9.583e+12 -2.311e+12 1.097e+13 -2.610e+12 1.249e+13 -2.943e+12 1.417e+13 -3.315e+12 1.602e+13 -3.727e+12 1.804e+13 -4.183e+12 2.024e+13 -4.690e+12 2.263e+13 -5.250e+12 2.524e+13 -5.868e+12 2.803e+13 -6.549e+12 3.105e+13 -7.300e+12 3.430e+13 -8.123e+12 3.777e+13 -9.028e+12 4.148e+13 -1.002e+13 4.542e+13 -1.109e+13 4.962e+13 -1.228e+13 5.406e+13 -1.355e+13 5.876e+13 -1.495e+13 6.371e+13 -1.646e+13 6.891e+13 -1.808e+13 7.436e+13 -1.984e+13 8.007e+13 -2.174e+13 8.605e+13 -2.377e+13 9.226e+13 -2.595e+13 9.873e+13 -2.830e+13 1.058e+14 -3.040e+13 1.132e+14 -3.284e+13 1.204e+14 -3.563e+13 1.279e+14 -3.860e+13 1.356e+14 -4.175e+13 1.434e+14 -4.511e+13 1.516e+14 -4.865e+13 1.598e+14 -5.239e+13 1.682e+14 -5.633e+13 1.767e+14 -6.048e+13 1.855e+14 -6.486e+13 1.943e+14 -6.946e+13 2.033e+14 -7.427e+13 2.123e+14 -7.931e+13 2.213e+14 -8.459e+13 2.304e+14 -9.011e+13 2.396e+14 -9.585e+13 2.487e+14 -1.019e+14 2.579e+14 -1.081e+14 2.669e+14 -1.145e+14 2.759e+14 -1.213e+14 2.848e+14 -1.281e+14 2.936e+14 -1.354e+14 3.022e+14 -1.427e+14 3.107e+14 -1.504e+14 3.189e+14 -1.581e+14 3.270e+14 -1.662e+14 3.348e+14 -1.744e+14 3.424e+14 -1.829e+14 3.496e+14 -1.914e+14 3.567e+14 -2.002e+14 3.633e+14 -2.090e+14 3.696e+14 -2.180e+14 3.756e+14 -2.271e+14 3.812e+14 -2.362e+14 3.863e+14 -2.455e+14 3.911e+14 -2.547e+14 3.954e+14 -2.640e+14 3.994e+14 -2.733e+14 4.028e+14 -2.825e+14 4.059e+14 -2.918e+14 4.086e+14 -3.009e+14 4.108e+14 -3.100e+14 4.126e+14 -3.189e+14 4.139e+14 -3.277e+14 4.147e+14 -3.363e+14 4.151e+14 -3.447e+14 4.149e+14 -3.529e+14 4.143e+14 -3.607e+14 4.133e+14 -3.684e+14 4.118e+14 -3.757e+14 4.099e+14 -3.828e+14 4.076e+14 -3.895e+14 4.049e+14 -3.958e+14 4.017e+14 -4.017e+14 3.981e+14 -4.072e+14 3.942e+14 -4.124e+14 3.899e+14 -4.171e+14 3.852e+14 -4.215e+14 3.802e+14 -4.253e+14 3.748e+14 -4.287e+14 3.693e+14 -4.315e+14 3.633e+14 -4.340e+14 3.571e+14 -4.359e+14 3.507e+14 -4.374e+14 3.440e+14 -4.383e+14 3.370e+14 -4.388e+14 3.299e+14 -4.387e+14 3.225e+14 -4.381e+14 3.150e+14 -4.370e+14 3.074e+14 -4.354e+14 2.996e+14 -4.331e+14 2.917e+14 -4.305e+14 2.836e+14 -4.272e+14 2.756e+14 -4.235e+14 2.674e+14 -4.193e+14 2.592e+14 -4.145e+14 2.509e+14 -4.093e+14 2.427e+14 -4.036e+14 2.345e+14 -3.973e+14 2.263e+14 -3.907e+14 2.182e+14 -3.836e+14 2.100e+14 -3.760e+14 2.021e+14 -3.682e+14 1.942e+14 -3.599e+14 1.864e+14 -3.512e+14 1.787e+14 -3.422e+14 1.711e+14 -3.329e+14 1.636e+14 -3.233e+14 1.562e+14 -3.135e+14 1.491e+14 -3.035e+14 1.421e+14 -2.933e+14 1.353e+14 -2.830e+14 1.286e+14 -2.725e+14 1.221e+14 -2.619e+14 1.157e+14 -2.513e+14 1.097e+14 -2.407e+14 1.038e+14 -2.302e+14 9.809e+13 -2.196e+14 9.258e+13 -2.092e+14 8.729e+13 -1.988e+14 8.220e+13 -1.887e+14 7.732e+13 -1.786e+14 7.263e+13 -1.688e+14 6.815e+13 -1.592e+14 6.387e+13 -1.498e+14 5.979e+13 -1.407e+14 5.589e+13 -1.318e+14 5.219e+13 -1.233e+14 4.867e+13 -1.150e+14 4.532e+13 -1.070e+14 4.216e+13 -9.941e+13 3.916e+13 -9.209e+13 3.633e+13 -8.511e+13 3.366e+13 -7.846e+13 3.114e+13 -7.214e+13 2.876e+13 -6.615e+13 2.653e+13 -6.050e+13 2.444e+13 -5.516e+13 2.247e+13 -5.015e+13 2.063e+13 -4.547e+13 1.890e+13 -4.108e+13 1.728e+13 -3.701e+13 1.578e+13 -3.323e+13 1.438e+13 -2.972e+13 1.308e+13 -2.648e+13 1.188e+13 -2.352e+13 1.076e+13 -2.080e+13 9.732e+12 -1.831e+13 8.782e+12 -1.606e+13 7.907e+12 -1.402e+13 7.104e+12 -1.218e+13 6.367e+12 -1.053e+13 5.692e+12 -9.060e+12 4.783e+12 -7.302e+12 4.252e+12 -6.206e+12 3.770e+12 -5.242e+12 3.333e+12 -4.400e+12 2.939e+12 -3.668e+12 2.585e+12 -3.036e+12 2.266e+12 -2.493e+12 1.982e+12 -2.030e+12 1.729e+12 -1.639e+12 1.504e+12 -1.309e+12 1.305e+12 -1.035e+12 1.130e+12 -8.079e+11 9.768e+11 -6.217e+11 8.428e+11 -4.704e+11 7.262e+11 -3.483e+11 6.251e+11 -2.509e+11 5.377e+11 -1.739e+11 4.622e+11 -1.135e+11 3.972e+11 -6.686e+10 3.410e+11 -3.126e+10 2.925e+11 -4.545e+09 2.503e+11 1.498e+10 2.136e+11 2.870e+10 1.813e+11 3.772e+10 1.530e+11 4.292e+10 1.279e+11 4.501e+10 1.056e+11 4.458e+10 8.594e+10 4.215e+10 6.858e+10 3.818e+10 5.336e+10 3.311e+10 4.018e+10 2.736e+10 2.897e+10 2.133e+10 1.968e+10 1.543e+10 1.225e+10 1.004e+10 6.658e+09 5.531e+09 2.834e+09 2.238e+09 7.354e+08 4.545e+08 -1.225e+08 -5.276e+08 -1.296e+09 -2.597e+09 -3.817e+09 -6.862e+09 -7.661e+09 -1.345e+10 -1.271e+10 -2.244e+10 -1.881e+10 -3.385e+10 -2.582e+10 -4.762e+10 -3.360e+10 -6.367e+10 -4.197e+10 -8.187e+10 -5.077e+10 -1.020e+11 -5.985e+10 -1.238e+11 -6.906e+10 -1.471e+11 -7.822e+10 -1.716e+11 -8.721e+10 -1.969e+11 -9.588e+10 -2.226e+11 -1.041e+11 -2.486e+11 -1.118e+11 -2.743e+11 -1.188e+11 -2.995e+11 -1.250e+11 -3.238e+11 -1.305e+11 -3.470e+11 -1.350e+11 -3.686e+11 -1.387e+11 -3.886e+11 -1.413e+11 -4.066e+11 -1.431e+11 -4.225e+11 -1.438e+11 -4.361e+11 -1.436e+11 -4.473e+11 -1.425e+11 -4.560e+11 -1.405e+11 -4.621e+11 -1.377e+11 -4.658e+11 -1.341e+11 -4.669e+11 -1.299e+11 -4.657e+11 -1.250e+11 -4.621e+11 -1.195e+11 -4.562e+11 -1.136e+11 -4.483e+11 -1.073e+11 -4.385e+11 -1.008e+11 -4.269e+11 -9.400e+10 -4.138e+11 -8.711e+10 -3.993e+11 -8.017e+10 -3.836e+11 -7.326e+10 -3.669e+11 -6.644e+10 -3.495e+11 -5.977e+10 -3.315e+11 -5.331e+10 -3.131e+11 -4.710e+10 -2.945e+11 -4.119e+10 -2.758e+11 -3.561e+10 -2.572e+11 -3.038e+10 -2.389e+11 -2.553e+10 -2.210e+11 -2.106e+10 -2.035e+11 -1.699e+10 -1.866e+11 -1.330e+10 -1.703e+11 -1.001e+10 -1.549e+11 -7.101e+09 -1.402e+11 -4.554e+09 -1.263e+11 -2.361e+09 -1.133e+11 -4.987e+08 -1.011e+11 1.055e+09 -8.986e+10 2.321e+09 -7.949e+10 3.325e+09 -6.998e+10 4.093e+09 -6.130e+10 4.649e+09 -5.345e+10 5.019e+09 -4.637e+10 5.227e+09 -4.002e+10 5.295e+09 -3.438e+10 5.248e+09 -2.939e+10 5.106e+09 -2.498e+10 4.889e+09 -2.113e+10 4.614e+09 -1.777e+10 4.297e+09 -1.487e+10 3.951e+09 -1.236e+10 3.589e+09 -1.022e+10 3.219e+09 -8.395e+09 2.851e+09 -6.848e+09 2.490e+09 -5.542e+09 2.142e+09 -4.446e+09 1.813e+09 -3.531e+09 1.505e+09 -2.772e+09 1.221e+09 -2.144e+09 9.638e+08 -1.630e+09 7.350e+08 -1.213e+09 5.356e+08 -8.766e+08 3.670e+08 -6.102e+08 2.300e+08 -4.032e+08 1.247e+08 -2.470e+08 5.134e+07 -1.354e+08 8.146e+06 -6.337e+07 -1.484e+07 -2.620e+07 -4.385e+07 -6.857e+06 -1.000e+08 2.015e+07 -1.884e+08 6.923e+07 -3.076e+08 1.436e+08 -4.563e+08 2.442e+08 -6.331e+08 3.721e+08 -8.367e+08 5.287e+08 -1.065e+09 7.157e+08 -1.318e+09 9.358e+08 -1.594e+09 1.192e+09 -1.890e+09 1.488e+09 -2.207e+09 1.827e+09 -2.544e+09 2.214e+09 -2.898e+09 2.654e+09 -3.271e+09 3.153e+09 -3.662e+09 3.717e+09 -4.069e+09 4.352e+09 -4.494e+09 5.065e+09 -4.936e+09 5.865e+09 -5.396e+09 6.758e+09 -5.872e+09 7.753e+09 -6.367e+09 8.859e+09 -6.878e+09 1.008e+10 -7.406e+09 1.143e+10 -7.952e+09 1.292e+10 -8.515e+09 1.455e+10 -9.095e+09 1.632e+10 -9.693e+09 1.825e+10 -1.031e+10 2.034e+10 -1.094e+10 2.259e+10 -1.159e+10 2.500e+10 -1.225e+10 2.757e+10 -1.293e+10 3.029e+10 -1.363e+10 3.316e+10 -1.435e+10 3.617e+10 -1.507e+10 3.931e+10 -1.582e+10 4.256e+10 -1.658e+10 4.591e+10 -1.735e+10 4.933e+10 -1.814e+10 5.281e+10 -1.895e+10 5.631e+10 -1.977e+10 5.982e+10 -2.060e+10 6.329e+10 0.005 -53.768 -52.790 -51.812 -50.833 -49.855 -48.876 -47.902 -47.025 -46.236 -45.530 -44.901 -44.342 -43.853 -43.430 -43.071 -42.774 -42.537 -42.361 -42.244 -42.186 -42.187 -42.249 -42.372 -42.557 -42.807 -43.125 -43.513 -43.976 -44.518 -45.145 -45.866 -46.687 -47.622 -48.684 -49.891 -51.266 -52.839 -54.652 -56.764 -59.258 -62.266 -65.994 -70.785 -76.981 -81.927 -80.931 -78.089 -73.292 -68.233 -63.944 -60.409 -57.456 -54.944 -52.775 -50.879 -49.208 -47.725 -46.401 -45.217 -44.157 -43.205 -42.352 -41.590 -40.913 -40.315 -39.792 -39.340 -38.957 -38.639 -38.386 -38.196 -38.068 -38.003 -38.000 -38.060 -38.183 -38.372 -38.628 -38.953 -39.351 -39.824 -40.377 -41.015 -41.744 -42.571 -43.501 -44.541 -45.697 -46.972 -48.365 -49.862 -51.430 -53.003 -54.476 -55.711 -56.565 -56.913 -56.663 -55.781 -54.347 -52.553 -50.607 -48.662 -46.801 -45.063 -43.458 -41.985 -40.639 -39.409 -38.288 -37.268 -36.343 -35.507 -34.755 -34.083 -33.487 -32.964 -32.514 -32.133 -31.822 -31.579 -31.406 -31.303 -31.274 -31.319 -31.442 -31.646 -31.938 -32.324 -32.813 -33.417 -34.149 -35.031 -36.086 -37.352 -38.876 -40.730 -43.014 -45.845 -49.157 -51.816 -52.005 -50.342 -48.851 -48.232 -48.664 -50.495 -53.902 -52.913 -47.237 -41.837 -37.770 -34.511 -31.771 -29.393 -27.284 -25.386 -23.659 -22.074 -20.610 -19.250 -17.982 -16.796 -15.683 -14.635 -13.647 -12.714 -11.832 -10.997 -10.207 -9.458 -8.748 -8.075 -7.437 -6.832 -6.260 -5.718 -5.206 -4.722 -4.265 -3.835 -3.431 -3.052 -2.698 -2.367 -2.059 -1.774 -1.512 -1.272 -1.053 -0.855 -0.679 -0.523 -0.388 -0.273 -0.179 -0.104 -0.049 -0.015 0.000 -0.005 -0.027 -0.070 -0.132 -0.214 -0.316 -0.438 -0.581 -0.744 -0.928 -1.133 -1.359 -1.607 -1.877 -2.169 -2.484 -2.822 -3.184 -3.570 -3.981 -4.418 -4.882 -5.373 -5.892 -6.441 -7.020 -7.631 -8.276 -8.956 -9.672 -10.428 -11.225 -12.066 -12.954 -13.892 -14.886 -15.939 -17.057 -18.248 -19.519 -20.882 -22.349 -23.936 -25.663 -27.556 -29.652 -31.999 -34.656 -37.690 -41.070 -44.302 -46.126 -45.932 -44.959 -44.232 -43.963 -44.113 -44.573 -45.140 -45.469 -45.174 -44.149 -42.660 -41.052 -39.532 -38.177 -37.000 -35.993 -35.140 -34.423 -33.830 -33.348 -32.968 -32.682 -32.483 -32.365 -32.326 -32.361 -32.469 -32.648 -32.898 -33.216 -33.605 -34.063 -34.593 -35.197 -35.877 -36.637 -37.480 -38.412 -39.438 -40.566 -41.803 -43.157 -44.639 -46.258 -48.022 -49.934 -51.982 -54.125 -56.264 -58.212 -59.679 -60.365 -60.132 -59.105 -57.574 -55.818 -54.034 -52.326 -50.745 -49.307 -48.013 -46.857 -45.831 -44.924 -44.129 -43.437 -42.843 -42.339 -41.921 -41.584 -41.324 -41.139 -41.027 -40.987 -41.017 -41.117 -41.288 -41.530 -41.844 -42.233 -42.700 -43.246 -43.878 -44.599 -45.416 -46.336 -47.367 -48.517 -49.793 -51.200 -52.733 -54.371 -56.052 -57.659 -59.028 -60.027 -60.673 -61.147 -61.697 -62.572 -64.058 -66.650 -71.704 -79.362 -69.237 -63.138 -59.222 -56.309 -53.988 -52.067 -50.438 -49.035 -47.814 -46.745 -45.806 -44.981 -44.256 -43.623 -43.072 -42.598 -42.195 -41.859 -41.587 -41.376 -41.223 -41.128 -41.088 -41.103 -41.172 -41.295 -41.471 -41.702 -41.988 -42.329 -42.728 -43.186 -43.706 -44.290 -44.942 -45.664 -46.462 -47.344 -48.316 -49.389 -50.466 -51.543 -52.620 -53.697 -54.774 0.03 -18.8331 -18.4608 -18.0923 -17.7275 -17.3664 -17.009 -16.6554 -16.3054 -15.9592 -15.6167 -15.2779 -14.9428 -14.6115 -14.2838 -13.9599 -13.6396 -13.3231 -13.0104 -12.7013 -12.3959 -12.0943 -11.7963 -11.5021 -11.2116 -10.9248 -10.6418 -10.3624 -10.0868 -9.8149 -9.5467 -9.2822 -9.0214 -8.7643 -8.511 -8.2613 -8.0154 -7.7732 -7.5347 -7.3 -7.0689 -6.8416 -6.6179 -6.398 -6.1818 -5.9694 -5.7606 -5.5555 -5.3542 -5.1566 -4.9627 -4.7725 -4.586 -4.4033 -4.2242 -4.0489 -3.8773 -3.7094 -3.5452 -3.3847 -3.228 -3.075 -2.9256 -2.78 -2.6381 -2.5 -2.3655 -2.2348 -2.1077 -1.9844 -1.8648 -1.7489 -1.6368 -1.5283 -1.4236 -1.3225 -1.2252 -1.1316 -1.0418 -0.95561 -0.87316 -0.79443 -0.71942 -0.64812 -0.58053 -0.51666 -0.4565 -0.40006 -0.34734 -0.29833 -0.25303 -0.21145 -0.17359 -0.13944 -0.10901 -0.08229 -0.059287 -0.039999 -0.024427 -0.012569 -0.004427 0 0.00071175 -0.0022917 -0.0090104 -0.019444 -0.033594 -0.051458 -0.073038 -0.098332 -0.12734 -0.16007 -0.19651 -0.23666 -0.28053 -0.32812 -0.37942 -0.43444 -0.49317 -0.55562 -0.62178 -0.69166 -0.76525 -0.84256 -0.92358 -1.0083 -1.0968 -1.1889 -1.2848 -1.3844 -1.4877 -1.5948 -1.7055 -1.82 -1.9382 -2.06 -2.1856 -2.315 -2.448 -2.5848 -2.7252 -2.8694 -3.0173 -3.1689 -3.3242 -3.4833 -3.646 -3.8125 -3.9827 -4.1566 -4.3342 -4.5156 -4.7006 -4.8894 -5.0819 -5.2781 -5.478 -5.6816 -5.8889 -6.1 -6.3148 -6.5332 -6.7554 -6.9814 -7.211 -7.4443 -7.6814 -7.9222 -8.1667 -8.4149 -8.6668 -8.9224 -9.1818 -9.4449 -9.7117 -9.9822 -10.2564 -10.5343 -10.8159 -11.1013 -11.3904 -11.6832 -11.9797 -12.2799 -12.5838 -12.8915 -13.2029 -13.5179 -13.8367 -14.1592 -14.4855 -14.8154 -15.1491 -15.4865 -15.8275 -16.1723 -16.5209 -16.8731 -17.2291 -17.5887 -17.9521 -18.3192 1.0 44956.39 EW4 HH 34.22 37.82 0.050 5.152e+09 1.094e+10 5.158e+09 1.091e+10 5.112e+09 1.082e+10 5.015e+09 1.067e+10 4.870e+09 1.046e+10 4.679e+09 1.020e+10 4.446e+09 9.883e+09 4.175e+09 9.519e+09 3.871e+09 9.111e+09 3.541e+09 8.664e+09 3.190e+09 8.185e+09 2.826e+09 7.679e+09 2.454e+09 7.153e+09 2.081e+09 6.612e+09 1.714e+09 6.065e+09 1.360e+09 5.518e+09 1.023e+09 4.976e+09 7.082e+08 4.449e+09 4.201e+08 3.940e+09 1.609e+08 3.456e+09 -6.737e+07 3.002e+09 -2.647e+08 2.584e+09 -4.332e+08 2.202e+09 -5.758e+08 1.862e+09 -6.978e+08 1.562e+09 -8.061e+08 1.302e+09 -9.086e+08 1.077e+09 -1.013e+09 8.814e+08 -1.127e+09 7.053e+08 -1.254e+09 5.395e+08 -1.396e+09 3.741e+08 -1.552e+09 2.005e+08 -1.720e+09 1.260e+07 -1.892e+09 -1.936e+08 -2.065e+09 -4.203e+08 -2.232e+09 -6.677e+08 -2.387e+09 -9.344e+08 -2.524e+09 -1.219e+09 -2.638e+09 -1.518e+09 -2.724e+09 -1.829e+09 -2.781e+09 -2.148e+09 -2.803e+09 -2.473e+09 -2.790e+09 -2.801e+09 -2.741e+09 -3.130e+09 -2.654e+09 -3.457e+09 -2.530e+09 -3.782e+09 -2.368e+09 -4.104e+09 -2.170e+09 -4.423e+09 -1.936e+09 -4.741e+09 -1.666e+09 -5.058e+09 -1.359e+09 -5.377e+09 -1.016e+09 -5.700e+09 -6.334e+08 -6.029e+09 -2.103e+08 -6.366e+09 2.559e+08 -6.713e+09 7.689e+08 -7.071e+09 1.332e+09 -7.442e+09 1.948e+09 -7.823e+09 2.621e+09 -8.214e+09 3.354e+09 -8.614e+09 4.146e+09 -9.017e+09 4.999e+09 -9.422e+09 5.913e+09 -9.824e+09 6.884e+09 -1.022e+10 7.907e+09 -1.059e+10 8.980e+09 -1.095e+10 1.009e+10 -1.128e+10 1.123e+10 -1.157e+10 1.240e+10 -1.183e+10 1.357e+10 -1.205e+10 1.474e+10 -1.221e+10 1.590e+10 -1.232e+10 1.702e+10 -1.238e+10 1.811e+10 -1.238e+10 1.913e+10 -1.231e+10 2.008e+10 -1.218e+10 2.094e+10 -1.199e+10 2.171e+10 -1.174e+10 2.237e+10 -1.142e+10 2.291e+10 -1.105e+10 2.332e+10 -1.062e+10 2.359e+10 -1.014e+10 2.373e+10 -9.613e+09 2.372e+10 -9.044e+09 2.357e+10 -8.440e+09 2.328e+10 -7.809e+09 2.284e+10 -7.155e+09 2.228e+10 -6.487e+09 2.158e+10 -5.812e+09 2.077e+10 -5.137e+09 1.985e+10 -4.471e+09 1.883e+10 -3.819e+09 1.774e+10 -3.188e+09 1.658e+10 -2.585e+09 1.537e+10 -2.016e+09 1.413e+10 -1.485e+09 1.287e+10 -9.967e+08 1.161e+10 -5.554e+08 1.037e+10 -1.628e+08 9.160e+09 1.788e+08 7.996e+09 4.690e+08 6.891e+09 7.089e+08 5.857e+09 8.990e+08 4.903e+09 1.042e+09 4.037e+09 1.141e+09 3.264e+09 1.201e+09 2.587e+09 1.229e+09 2.007e+09 1.234e+09 1.520e+09 1.223e+09 1.118e+09 1.210e+09 7.878e+08 1.205e+09 5.136e+08 1.218e+09 2.751e+08 1.256e+09 5.229e+07 1.322e+09 -1.706e+08 1.412e+09 -4.038e+08 1.519e+09 -6.518e+08 1.636e+09 -9.136e+08 1.754e+09 -1.185e+09 1.867e+09 -1.459e+09 1.966e+09 -1.728e+09 2.049e+09 -1.984e+09 2.109e+09 -2.219e+09 2.145e+09 -2.426e+09 2.155e+09 -2.599e+09 2.137e+09 -2.733e+09 2.093e+09 -2.825e+09 2.023e+09 -2.871e+09 1.928e+09 -2.870e+09 1.812e+09 -2.825e+09 1.677e+09 -2.736e+09 1.526e+09 -2.606e+09 1.364e+09 -2.440e+09 1.195e+09 -2.244e+09 1.023e+09 -2.024e+09 8.521e+08 -1.786e+09 6.867e+08 -1.538e+09 5.309e+08 -1.288e+09 3.882e+08 -1.043e+09 2.620e+08 -8.117e+08 1.549e+08 -6.008e+08 6.893e+07 -4.170e+08 5.069e+06 -2.664e+08 -3.713e+07 -1.530e+08 -6.113e+07 -7.672e+07 -7.644e+07 -2.469e+07 -1.001e+08 2.999e+07 -1.477e+08 1.128e+08 -2.227e+08 2.359e+08 -3.208e+08 4.020e+08 -4.375e+08 6.100e+08 -5.685e+08 8.565e+08 -7.096e+08 1.137e+09 -8.570e+08 1.446e+09 -1.007e+09 1.778e+09 -1.155e+09 2.124e+09 -1.297e+09 2.479e+09 -1.431e+09 2.833e+09 -1.553e+09 3.181e+09 -1.659e+09 3.514e+09 -1.748e+09 3.825e+09 -1.817e+09 4.108e+09 -1.865e+09 4.357e+09 -1.890e+09 4.566e+09 -1.892e+09 4.732e+09 -1.872e+09 4.852e+09 -1.829e+09 4.923e+09 -1.765e+09 4.944e+09 -1.681e+09 4.917e+09 -1.580e+09 4.841e+09 -1.464e+09 4.720e+09 -1.337e+09 4.556e+09 -1.199e+09 4.354e+09 -1.056e+09 4.119e+09 -9.103e+08 3.855e+09 -7.646e+08 3.570e+09 -6.225e+08 3.268e+09 -4.865e+08 2.956e+09 -3.593e+08 2.641e+09 -2.431e+08 2.328e+09 -1.396e+08 2.022e+09 -5.012e+07 1.728e+09 2.437e+07 1.452e+09 8.379e+07 1.196e+09 1.284e+08 9.642e+08 1.588e+08 7.577e+08 1.762e+08 5.780e+08 1.821e+08 4.257e+08 1.784e+08 3.002e+08 1.673e+08 2.002e+08 1.513e+08 1.237e+08 1.331e+08 6.713e+07 1.153e+08 2.604e+07 1.005e+08 -5.404e+06 9.020e+07 -3.339e+07 8.404e+07 -6.273e+07 7.989e+07 -9.587e+07 7.470e+07 -1.332e+08 6.567e+07 -1.739e+08 5.066e+07 -2.168e+08 2.814e+07 -2.607e+08 -3.079e+06 -3.044e+08 -4.402e+07 -3.473e+08 -9.570e+07 -3.886e+08 -1.594e+08 -4.276e+08 -2.367e+08 -4.638e+08 -3.293e+08 -4.962e+08 -4.393e+08 -5.237e+08 -5.691e+08 -5.448e+08 -7.207e+08 -5.577e+08 -8.965e+08 -5.603e+08 -1.099e+09 -5.505e+08 -1.328e+09 -5.259e+08 -1.586e+09 -4.842e+08 -1.872e+09 -4.234e+08 -2.187e+09 -3.418e+08 -2.528e+09 -2.380e+08 -2.892e+09 -1.116e+08 -3.277e+09 3.779e+07 -3.678e+09 2.093e+08 -4.089e+09 4.016e+08 -4.506e+09 6.129e+08 -4.920e+09 8.401e+08 -5.325e+09 1.079e+09 -5.712e+09 1.326e+09 -6.074e+09 1.576e+09 -6.401e+09 1.824e+09 -6.685e+09 2.063e+09 -6.920e+09 2.289e+09 -7.097e+09 2.495e+09 -7.211e+09 2.675e+09 -7.257e+09 2.826e+09 -7.230e+09 2.942e+09 -7.130e+09 3.020e+09 -6.956e+09 3.057e+09 -6.708e+09 3.051e+09 -6.392e+09 3.002e+09 -6.011e+09 2.911e+09 -5.574e+09 2.779e+09 -5.090e+09 2.611e+09 -4.569e+09 2.410e+09 -4.023e+09 2.183e+09 -3.466e+09 1.936e+09 -2.910e+09 1.676e+09 -2.371e+09 1.412e+09 -1.862e+09 1.151e+09 -1.395e+09 9.019e+08 -9.837e+08 6.731e+08 -6.370e+08 4.722e+08 -3.623e+08 3.071e+08 -1.637e+08 1.861e+08 -3.726e+07 1.156e+08 4.064e+07 8.352e+07 1.220e+08 5.546e+07 2.522e+08 4.444e+06 4.432e+08 -7.845e+07 6.865e+08 -1.923e+08 9.674e+08 -3.321e+08 1.269e+09 -4.904e+08 1.574e+09 -6.581e+08 1.862e+09 -8.257e+08 2.115e+09 -9.827e+08 2.315e+09 -1.119e+09 2.447e+09 -1.226e+09 2.498e+09 -1.293e+09 2.459e+09 -1.316e+09 2.329e+09 -1.290e+09 2.110e+09 -1.214e+09 1.812e+09 -1.091e+09 1.456e+09 -9.274e+08 1.067e+09 -7.364e+08 6.826e+08 -5.386e+08 3.440e+08 -3.681e+08 8.772e+07 -2.752e+08 -1.079e+08 -2.629e+08 -4.017e+08 -2.454e+08 -9.900e+08 -1.335e+08 -2.010e+09 1.364e+08 -3.571e+09 6.180e+08 -5.784e+09 1.362e+09 -8.756e+09 2.418e+09 -1.260e+10 3.839e+09 -1.742e+10 5.673e+09 -2.333e+10 7.966e+09 -3.041e+10 1.077e+10 -3.878e+10 1.410e+10 -4.847e+10 1.802e+10 -5.956e+10 2.254e+10 -7.209e+10 2.767e+10 -8.606e+10 3.342e+10 -1.015e+11 3.980e+10 -1.182e+11 4.676e+10 -1.363e+11 5.430e+10 -1.556e+11 6.237e+10 -1.760e+11 7.091e+10 -1.973e+11 7.984e+10 -2.192e+11 8.910e+10 -2.416e+11 9.857e+10 -2.642e+11 1.082e+11 -2.867e+11 1.178e+11 -3.089e+11 1.338e+11 -3.301e+11 1.405e+11 -3.515e+11 1.497e+11 -3.705e+11 1.583e+11 -3.878e+11 1.662e+11 -4.030e+11 1.734e+11 -4.159e+11 1.795e+11 -4.261e+11 1.846e+11 -4.333e+11 1.886e+11 -4.375e+11 1.912e+11 -4.383e+11 1.925e+11 -4.357e+11 1.924e+11 -4.296e+11 1.909e+11 -4.201e+11 1.879e+11 -4.072e+11 1.834e+11 -3.910e+11 1.776e+11 -3.719e+11 1.704e+11 -3.500e+11 1.620e+11 -3.257e+11 1.525e+11 -2.994e+11 1.420e+11 -2.716e+11 1.308e+11 -2.427e+11 1.189e+11 -2.133e+11 1.066e+11 -1.840e+11 9.412e+10 -1.553e+11 8.168e+10 -1.278e+11 6.949e+10 -1.020e+11 5.778e+10 -7.842e+10 4.678e+10 -5.749e+10 3.670e+10 -3.958e+10 2.774e+10 -2.493e+10 2.012e+10 -1.370e+10 1.408e+10 -5.753e+09 9.876e+09 -5.321e+08 7.623e+09 3.276e+09 6.807e+09 7.564e+09 6.390e+09 1.365e+10 5.584e+09 2.169e+10 4.090e+09 3.124e+10 1.898e+09 4.160e+10 -8.579e+08 5.196e+10 -3.977e+09 6.148e+10 -7.216e+09 6.934e+10 -1.031e+10 7.474e+10 -1.299e+10 7.701e+10 -1.502e+10 7.566e+10 -1.618e+10 7.049e+10 -1.630e+10 6.161e+10 -1.530e+10 4.960e+10 -1.321e+10 3.556e+10 -1.018e+10 2.124e+10 -6.651e+09 9.075e+09 -3.972e+09 1.127e+09 -4.062e+09 -6.594e+09 -5.932e+09 -2.633e+10 -6.264e+09 -6.824e+10 -3.219e+09 -1.408e+11 4.908e+09 -2.536e+11 2.003e+10 -4.179e+11 4.604e+10 -6.707e+11 8.349e+10 -9.898e+11 1.361e+11 -1.407e+12 2.071e+11 -1.943e+12 3.004e+11 -2.618e+12 4.198e+11 -3.455e+12 5.697e+11 -4.479e+12 7.550e+11 -5.717e+12 9.806e+11 -7.198e+12 1.252e+12 -8.953e+12 1.574e+12 -1.101e+13 1.954e+12 -1.342e+13 2.397e+12 -1.620e+13 2.909e+12 -1.939e+13 3.497e+12 -2.304e+13 4.168e+12 -2.719e+13 4.927e+12 -3.187e+13 5.780e+12 -3.712e+13 6.735e+12 -4.298e+13 7.797e+12 -4.950e+13 8.972e+12 -5.672e+13 1.026e+13 -6.467e+13 1.169e+13 -7.339e+13 1.324e+13 -8.295e+13 1.493e+13 -9.336e+13 1.676e+13 -1.047e+14 1.873e+13 -1.168e+14 2.085e+13 -1.300e+14 2.310e+13 -1.441e+14 2.550e+13 -1.592e+14 2.804e+13 -1.752e+14 3.072e+13 -1.923e+14 3.353e+13 -2.103e+14 3.648e+13 -2.294e+14 3.954e+13 -2.494e+14 4.273e+13 -2.704e+14 4.602e+13 -2.924e+14 4.942e+13 -3.153e+14 5.290e+13 -3.390e+14 5.646e+13 -3.637e+14 6.008e+13 -3.891e+14 6.375e+13 -4.152e+14 6.746e+13 -4.420e+14 7.119e+13 -4.694e+14 7.492e+13 -4.973e+14 7.864e+13 -5.255e+14 8.233e+13 -5.541e+14 8.598e+13 -5.829e+14 8.955e+13 -6.119e+14 9.305e+13 -6.410e+14 9.646e+13 -6.698e+14 9.973e+13 -6.986e+14 1.029e+14 -7.270e+14 1.059e+14 -7.549e+14 1.088e+14 -7.823e+14 1.114e+14 -8.090e+14 1.139e+14 -8.349e+14 1.162e+14 -8.599e+14 1.182e+14 -8.839e+14 1.201e+14 -9.066e+14 1.216e+14 -9.282e+14 1.230e+14 -9.485e+14 1.240e+14 -9.672e+14 1.247e+14 -9.845e+14 1.249e+14 -1.000e+15 1.249e+14 -1.013e+15 1.247e+14 -1.026e+15 1.242e+14 -1.037e+15 1.234e+14 -1.045e+15 1.223e+14 -1.052e+15 1.210e+14 -1.056e+15 1.195e+14 -1.059e+15 1.177e+14 -1.059e+15 1.157e+14 -1.058e+15 1.134e+14 -1.054e+15 1.109e+14 -1.048e+15 1.083e+14 -1.041e+15 1.054e+14 -1.032e+15 1.025e+14 -1.021e+15 9.931e+13 -1.009e+15 9.603e+13 -9.941e+14 9.263e+13 -9.780e+14 8.913e+13 -9.603e+14 8.556e+13 -9.410e+14 8.191e+13 -9.204e+14 7.822e+13 -8.985e+14 7.451e+13 -8.754e+14 7.078e+13 -8.512e+14 6.705e+13 -8.260e+14 6.336e+13 -8.000e+14 5.970e+13 -7.731e+14 5.609e+13 -7.456e+14 5.255e+13 -7.177e+14 4.908e+13 -6.893e+14 4.571e+13 -6.608e+14 4.244e+13 -6.320e+14 3.927e+13 -6.031e+14 3.623e+13 -5.743e+14 3.331e+13 -5.456e+14 3.052e+13 -5.172e+14 2.787e+13 -4.891e+14 2.536e+13 -4.615e+14 2.299e+13 -4.345e+14 2.077e+13 -4.081e+14 1.870e+13 -3.825e+14 1.676e+13 -3.576e+14 1.496e+13 -3.334e+14 1.329e+13 -3.101e+14 1.175e+13 -2.876e+14 1.032e+13 -2.661e+14 9.033e+12 -2.455e+14 7.855e+12 -2.258e+14 6.788e+12 -2.071e+14 5.826e+12 -1.894e+14 4.962e+12 -1.726e+14 4.191e+12 -1.569e+14 3.508e+12 -1.421e+14 2.906e+12 -1.283e+14 2.379e+12 -1.154e+14 1.920e+12 -1.035e+14 1.525e+12 -9.244e+13 1.186e+12 -8.225e+13 8.988e+11 -7.290e+13 6.581e+11 -6.434e+13 4.587e+11 -5.654e+13 2.959e+11 -4.946e+13 1.649e+11 -4.307e+13 6.193e+10 -3.732e+13 -1.704e+10 -3.217e+13 -7.564e+10 -2.758e+13 -1.170e+11 -2.351e+13 -1.442e+11 -1.992e+13 -1.598e+11 -1.678e+13 -1.661e+11 -1.403e+13 -1.653e+11 -1.164e+13 -1.591e+11 -9.592e+12 -1.490e+11 -7.835e+12 -1.363e+11 -6.344e+12 -1.222e+11 -5.087e+12 -1.074e+11 -4.036e+12 -9.272e+10 -3.165e+12 -7.861e+10 -2.451e+12 -6.544e+10 -1.872e+12 -5.345e+10 -1.408e+12 -4.283e+10 -1.041e+12 -3.366e+10 -7.538e+11 -2.589e+10 -5.339e+11 -1.948e+10 -3.683e+11 -1.429e+10 -2.462e+11 -1.057e+10 -1.645e+11 -7.308e+09 -1.013e+11 -4.872e+09 -5.894e+10 -3.110e+09 -3.182e+10 -1.879e+09 -1.551e+10 -1.052e+09 -6.496e+09 -5.241e+08 -2.128e+09 -2.165e+08 -4.300e+08 -9.453e+07 9.129e+06 -1.189e+08 1.529e+08 -1.418e+08 2.465e+08 -1.297e+08 1.907e+08 -1.023e+08 4.828e+07 -1.396e+08 -1.477e+08 -3.224e+08 -7.809e+08 -6.287e+08 -2.346e+09 -1.072e+09 -5.257e+09 -1.678e+09 -9.895e+09 -2.471e+09 -1.657e+10 -3.471e+09 -2.552e+10 -4.696e+09 -3.691e+10 -6.152e+09 -5.077e+10 -7.843e+09 -6.705e+10 -9.763e+09 -8.564e+10 -1.190e+10 -1.062e+11 -1.422e+10 -1.286e+11 -1.672e+10 -1.523e+11 -1.934e+10 -1.768e+11 -2.205e+10 -2.017e+11 -2.480e+10 -2.266e+11 -2.756e+10 -2.508e+11 -3.026e+10 -2.738e+11 -3.286e+10 -2.952e+11 -3.530e+10 -3.146e+11 -3.754e+10 -3.315e+11 -3.954e+10 -3.456e+11 -4.126e+10 -3.565e+11 -4.266e+10 -3.642e+11 -4.371e+10 -3.685e+11 -4.439e+10 -3.692e+11 -4.469e+10 -3.665e+11 -4.460e+10 -3.603e+11 -4.412e+10 -3.510e+11 -4.326e+10 -3.387e+11 -4.203e+10 -3.237e+11 -4.046e+10 -3.064e+11 -3.858e+10 -2.870e+11 -3.643e+10 -2.661e+11 -3.404e+10 -2.440e+11 -3.147e+10 -2.212e+11 -2.876e+10 -1.980e+11 -2.596e+10 -1.750e+11 -2.313e+10 -1.524e+11 -2.031e+10 -1.306e+11 -1.755e+10 -1.100e+11 -1.490e+10 -9.079e+10 -1.240e+10 -7.321e+10 -1.008e+10 -5.744e+10 -7.967e+09 -4.360e+10 -6.091e+09 -3.175e+10 -4.465e+09 -2.191e+10 -3.096e+09 -1.404e+10 -1.986e+09 -8.076e+09 -1.129e+09 -3.891e+09 -5.189e+08 -1.339e+09 -1.738e+08 -1.691e+08 -9.638e+07 3.961e+08 -8.766e+07 1.587e+09 5.730e+07 3.589e+09 3.212e+08 6.178e+09 6.745e+08 9.129e+09 1.088e+09 1.224e+10 1.532e+09 1.530e+10 1.979e+09 1.815e+10 2.409e+09 2.064e+10 2.797e+09 2.263e+10 3.125e+09 2.405e+10 3.378e+09 2.482e+10 3.547e+09 2.491e+10 3.624e+09 2.433e+10 3.605e+09 2.309e+10 3.494e+09 2.128e+10 3.298e+09 1.899e+10 3.024e+09 1.633e+10 2.684e+09 1.343e+10 2.294e+09 1.045e+10 1.870e+09 7.553e+09 1.430e+09 4.911e+09 9.954e+08 2.702e+09 5.939e+08 1.098e+09 2.973e+08 2.249e+08 2.876e+08 -3.553e+08 4.367e+08 -1.603e+09 5.569e+08 -4.019e+09 0.005 -54.679 -53.616 -52.554 -51.492 -50.430 -49.383 -48.446 -47.609 -46.864 -46.202 -45.621 -45.113 -44.677 -44.309 -44.008 -43.770 -43.596 -43.485 -43.436 -43.450 -43.527 -43.669 -43.877 -44.154 -44.503 -44.927 -45.432 -46.023 -46.707 -47.493 -48.393 -49.420 -50.594 -51.938 -53.487 -55.287 -57.408 -59.964 -63.156 -67.420 -74.057 -89.515 -79.250 -73.144 -70.219 -67.892 -65.422 -62.753 -60.088 -57.591 -55.323 -53.286 -51.462 -49.827 -48.359 -47.040 -45.852 -44.782 -43.818 -42.953 -42.177 -41.485 -40.872 -40.333 -39.865 -39.464 -39.130 -38.859 -38.652 -38.507 -38.424 -38.403 -38.444 -38.549 -38.720 -38.957 -39.264 -39.643 -40.098 -40.634 -41.255 -41.969 -42.780 -43.699 -44.732 -45.890 -47.182 -48.615 -50.193 -51.910 -53.747 -55.671 -57.659 -59.748 -62.113 -65.022 -67.432 -64.883 -60.107 -56.027 -52.737 -49.996 -47.653 -45.614 -43.817 -42.220 -40.790 -39.506 -38.349 -37.307 -36.368 -35.523 -34.767 -34.093 -33.498 -32.977 -32.528 -32.150 -31.841 -31.601 -31.430 -31.328 -31.296 -31.338 -31.455 -31.651 -31.932 -32.303 -32.771 -33.347 -34.042 -34.872 -35.857 -37.021 -38.400 -40.037 -41.987 -44.307 -47.004 -49.813 -51.831 -52.311 -52.071 -52.362 -54.194 -59.402 -58.295 -49.668 -43.789 -39.542 -36.159 -33.317 -30.849 -28.660 -26.691 -24.899 -23.254 -21.736 -20.325 -19.010 -17.779 -16.623 -15.536 -14.510 -13.542 -12.626 -11.759 -10.937 -10.158 -9.419 -8.718 -8.053 -7.422 -6.824 -6.257 -5.720 -5.212 -4.732 -4.279 -3.852 -3.450 -3.073 -2.719 -2.389 -2.082 -1.798 -1.536 -1.295 -1.075 -0.877 -0.699 -0.542 -0.405 -0.288 -0.191 -0.113 -0.056 -0.018 0.000 -0.001 -0.022 -0.062 -0.122 -0.201 -0.300 -0.419 -0.558 -0.718 -0.898 -1.098 -1.320 -1.564 -1.829 -2.116 -2.426 -2.758 -3.115 -3.495 -3.901 -4.332 -4.789 -5.274 -5.787 -6.329 -6.902 -7.507 -8.146 -8.820 -9.531 -10.281 -11.073 -11.910 -12.796 -13.733 -14.727 -15.783 -16.908 -18.110 -19.398 -20.785 -22.288 -23.928 -25.733 -27.747 -30.033 -32.695 -35.921 -40.115 -46.467 -64.777 -51.510 -45.770 -43.237 -41.965 -41.426 -41.403 -41.787 -42.493 -43.398 -44.244 -44.600 -44.104 -42.861 -41.300 -39.750 -38.349 -37.131 -36.092 -35.214 -34.481 -33.877 -33.389 -33.005 -32.718 -32.521 -32.406 -32.371 -32.412 -32.527 -32.713 -32.970 -33.297 -33.695 -34.165 -34.709 -35.329 -36.027 -36.810 -37.680 -38.646 -39.714 -40.896 -42.202 -43.649 -45.255 -47.045 -49.050 -51.308 -53.869 -56.791 -60.117 -63.781 -67.171 -68.649 -67.523 -65.121 -62.386 -59.688 -57.190 -54.949 -52.968 -51.227 -49.701 -48.364 -47.194 -46.173 -45.284 -44.515 -43.856 -43.297 -42.833 -42.456 -42.164 -41.951 -41.816 -41.757 -41.771 -41.859 -42.020 -42.255 -42.566 -42.954 -43.422 -43.973 -44.613 -45.346 -46.179 -47.119 -48.177 -49.361 -50.682 -52.146 -53.753 -55.483 -57.274 -59.001 -60.475 -61.549 -62.256 -62.826 -63.561 -64.765 -66.821 -70.217 -73.175 -68.780 -63.589 -59.764 -56.818 -54.437 -52.448 -50.750 -49.280 -47.994 -46.862 -45.862 -44.977 -44.193 -43.501 -42.892 -42.360 -41.898 -41.504 -41.173 -40.902 -40.688 -40.530 -40.426 -40.374 -40.374 -40.425 -40.527 -40.679 -40.882 -41.137 -41.443 -41.802 -42.216 -42.686 -43.213 -43.802 -44.453 -45.172 -45.963 -46.830 -47.779 -48.819 -49.871 -50.923 -51.975 -53.027 0.03 -18.2761 -17.9158 -17.559 -17.2059 -16.8563 -16.5103 -16.1679 -15.8291 -15.4939 -15.1622 -14.8342 -14.5097 -14.1888 -13.8715 -13.5578 -13.2477 -12.9412 -12.6383 -12.3389 -12.0431 -11.751 -11.4624 -11.1774 -10.8959 -10.6181 -10.3439 -10.0732 -9.8062 -9.5427 -9.2828 -9.0265 -8.7738 -8.5246 -8.2791 -8.0372 -7.7988 -7.564 -7.3328 -7.1052 -6.8812 -6.6608 -6.4439 -6.2307 -6.021 -5.8149 -5.6124 -5.4135 -5.2182 -5.0265 -4.8383 -4.6538 -4.4728 -4.2954 -4.1216 -3.9514 -3.7848 -3.6218 -3.4623 -3.3065 -3.1542 -3.0055 -2.8605 -2.7189 -2.581 -2.4467 -2.316 -2.1888 -2.0652 -1.9452 -1.8289 -1.716 -1.6068 -1.5012 -1.3992 -1.3007 -1.2058 -1.1145 -1.0268 -0.94274 -0.86222 -0.78529 -0.71194 -0.64219 -0.57602 -0.51343 -0.45444 -0.39903 -0.34721 -0.29898 -0.25433 -0.21327 -0.1758 -0.14192 -0.11162 -0.084915 -0.061794 -0.04226 -0.026314 -0.013955 -0.005184 0 0.0015965 -0.00039433 -0.0059726 -0.015138 -0.027891 -0.044232 -0.06416 -0.087675 -0.11478 -0.14547 -0.17975 -0.21761 -0.25906 -0.3041 -0.35273 -0.40495 -0.46075 -0.52014 -0.58311 -0.64968 -0.71983 -0.79357 -0.8709 -0.95181 -1.0363 -1.1244 -1.2161 -1.3113 -1.4102 -1.5126 -1.6187 -1.7283 -1.8415 -1.9583 -2.0786 -2.2026 -2.3301 -2.4613 -2.596 -2.7343 -2.8762 -3.0217 -3.1708 -3.3234 -3.4797 -3.6395 -3.803 -3.97 -4.1406 -4.3148 -4.4925 -4.6739 -4.8588 -5.0474 -5.2395 -5.4352 -5.6345 -5.8374 -6.0439 -6.2539 -6.4676 -6.6848 -6.9056 -7.1301 -7.3581 -7.5896 -7.8248 -8.0636 -8.3059 -8.5519 -8.8014 -9.0545 -9.3112 -9.5715 -9.8353 -10.1028 -10.3739 -10.6485 -10.9267 -11.2085 -11.4939 -11.7829 -12.0755 -12.3716 -12.6714 -12.9747 -13.2816 -13.5921 -13.9062 -14.2239 -14.5452 -14.87 -15.1985 -15.5305 -15.8661 -16.2054 -16.5482 -16.8945 -17.2445 -17.5981 1.0 46324.29 EW4 HV 34.22 37.82 0.050 1.606e+10 6.904e+09 1.580e+10 6.881e+09 1.545e+10 6.844e+09 1.501e+10 6.791e+09 1.449e+10 6.721e+09 1.390e+10 6.630e+09 1.323e+10 6.519e+09 1.250e+10 6.386e+09 1.172e+10 6.229e+09 1.088e+10 6.048e+09 1.002e+10 5.844e+09 9.129e+09 5.616e+09 8.230e+09 5.365e+09 7.332e+09 5.095e+09 6.448e+09 4.806e+09 5.593e+09 4.503e+09 4.774e+09 4.188e+09 4.004e+09 3.867e+09 3.291e+09 3.544e+09 2.639e+09 3.224e+09 2.056e+09 2.913e+09 1.542e+09 2.616e+09 1.096e+09 2.339e+09 7.157e+08 2.085e+09 3.937e+08 1.860e+09 1.209e+08 1.665e+09 -1.136e+08 1.502e+09 -3.225e+08 1.368e+09 -5.178e+08 1.260e+09 -7.095e+08 1.170e+09 -9.043e+08 1.092e+09 -1.106e+09 1.016e+09 -1.314e+09 9.372e+08 -1.527e+09 8.486e+08 -1.741e+09 7.465e+08 -1.953e+09 6.282e+08 -2.157e+09 4.922e+08 -2.350e+09 3.376e+08 -2.529e+09 1.643e+08 -2.692e+09 -2.739e+07 -2.836e+09 -2.373e+08 -2.959e+09 -4.650e+08 -3.063e+09 -7.101e+08 -3.145e+09 -9.728e+08 -3.207e+09 -1.253e+09 -3.249e+09 -1.552e+09 -3.271e+09 -1.871e+09 -3.274e+09 -2.211e+09 -3.256e+09 -2.573e+09 -3.218e+09 -2.961e+09 -3.157e+09 -3.375e+09 -3.072e+09 -3.818e+09 -2.961e+09 -4.291e+09 -2.819e+09 -4.797e+09 -2.645e+09 -5.334e+09 -2.433e+09 -5.905e+09 -2.179e+09 -6.508e+09 -1.881e+09 -7.140e+09 -1.533e+09 -7.800e+09 -1.133e+09 -8.484e+09 -6.777e+08 -9.188e+09 -1.658e+08 -9.907e+09 4.043e+08 -1.063e+10 1.031e+09 -1.136e+10 1.714e+09 -1.209e+10 2.450e+09 -1.280e+10 3.233e+09 -1.349e+10 4.058e+09 -1.415e+10 4.920e+09 -1.477e+10 5.805e+09 -1.534e+10 6.707e+09 -1.587e+10 7.613e+09 -1.633e+10 8.510e+09 -1.672e+10 9.386e+09 -1.704e+10 1.023e+10 -1.728e+10 1.103e+10 -1.744e+10 1.176e+10 -1.752e+10 1.243e+10 -1.751e+10 1.302e+10 -1.741e+10 1.351e+10 -1.723e+10 1.391e+10 -1.696e+10 1.420e+10 -1.660e+10 1.438e+10 -1.617e+10 1.446e+10 -1.566e+10 1.443e+10 -1.509e+10 1.429e+10 -1.445e+10 1.404e+10 -1.375e+10 1.371e+10 -1.300e+10 1.328e+10 -1.222e+10 1.278e+10 -1.139e+10 1.220e+10 -1.055e+10 1.157e+10 -9.691e+09 1.089e+10 -8.824e+09 1.017e+10 -7.960e+09 9.432e+09 -7.108e+09 8.676e+09 -6.275e+09 7.915e+09 -5.471e+09 7.161e+09 -4.703e+09 6.421e+09 -3.978e+09 5.705e+09 -3.303e+09 5.021e+09 -2.682e+09 4.374e+09 -2.120e+09 3.769e+09 -1.620e+09 3.213e+09 -1.182e+09 2.706e+09 -8.075e+08 2.254e+09 -4.937e+08 1.857e+09 -2.375e+08 1.515e+09 -3.303e+07 1.227e+09 1.271e+08 9.923e+08 2.523e+08 8.042e+08 3.537e+08 6.561e+08 4.425e+08 5.387e+08 5.285e+08 4.416e+08 6.187e+08 3.557e+08 7.156e+08 2.743e+08 8.184e+08 1.934e+08 9.238e+08 1.120e+08 1.027e+09 3.094e+07 1.123e+09 -4.761e+07 1.207e+09 -1.207e+08 1.276e+09 -1.851e+08 1.326e+09 -2.381e+08 1.356e+09 -2.771e+08 1.364e+09 -3.005e+08 1.351e+09 -3.074e+08 1.317e+09 -2.977e+08 1.265e+09 -2.725e+08 1.196e+09 -2.335e+08 1.113e+09 -1.832e+08 1.020e+09 -1.249e+08 9.206e+08 -6.166e+07 8.190e+08 3.486e+06 7.194e+08 6.842e+07 6.261e+08 1.329e+08 5.429e+08 1.990e+08 4.727e+08 2.718e+08 4.166e+08 3.591e+08 3.728e+08 4.691e+08 3.367e+08 6.089e+08 3.018e+08 7.839e+08 2.613e+08 9.966e+08 2.092e+08 1.247e+09 1.410e+08 1.534e+09 5.341e+07 1.854e+09 -5.532e+07 2.204e+09 -1.858e+08 2.579e+09 -3.380e+08 2.974e+09 -5.106e+08 3.383e+09 -7.017e+08 3.801e+09 -9.086e+08 4.221e+09 -1.128e+09 4.636e+09 -1.356e+09 5.042e+09 -1.588e+09 5.432e+09 -1.818e+09 5.801e+09 -2.043e+09 6.144e+09 -2.255e+09 6.457e+09 -2.450e+09 6.735e+09 -2.623e+09 6.976e+09 -2.768e+09 7.175e+09 -2.882e+09 7.331e+09 -2.959e+09 7.441e+09 -2.999e+09 7.506e+09 -2.998e+09 7.522e+09 -2.957e+09 7.492e+09 -2.876e+09 7.415e+09 -2.757e+09 7.292e+09 -2.602e+09 7.125e+09 -2.416e+09 6.917e+09 -2.203e+09 6.670e+09 -1.969e+09 6.387e+09 -1.720e+09 6.072e+09 -1.462e+09 5.730e+09 -1.202e+09 5.365e+09 -9.454e+08 4.981e+09 -6.981e+08 4.585e+09 -4.655e+08 4.180e+09 -2.519e+08 3.772e+09 -6.093e+07 3.367e+09 1.045e+08 2.968e+09 2.426e+08 2.581e+09 3.526e+08 2.211e+09 4.343e+08 1.861e+09 4.887e+08 1.536e+09 5.178e+08 1.239e+09 5.238e+08 9.713e+08 5.098e+08 7.361e+08 4.793e+08 5.341e+08 4.364e+08 3.656e+08 3.853e+08 2.294e+08 3.306e+08 1.235e+08 2.768e+08 4.336e+07 2.284e+08 -1.792e+07 1.888e+08 -6.983e+07 1.590e+08 -1.229e+08 1.361e+08 -1.857e+08 1.139e+08 -2.626e+08 8.461e+07 -3.548e+08 4.146e+07 -4.614e+08 -2.120e+07 -5.804e+08 -1.079e+08 -7.099e+08 -2.227e+08 -8.481e+08 -3.697e+08 -9.929e+08 -5.525e+08 -1.143e+09 -7.758e+08 -1.296e+09 -1.044e+09 -1.451e+09 -1.362e+09 -1.605e+09 -1.734e+09 -1.757e+09 -2.166e+09 -1.905e+09 -2.661e+09 -2.045e+09 -3.224e+09 -2.176e+09 -3.859e+09 -2.294e+09 -4.565e+09 -2.396e+09 -5.344e+09 -2.478e+09 -6.195e+09 -2.539e+09 -7.111e+09 -2.573e+09 -8.087e+09 -2.579e+09 -9.113e+09 -2.553e+09 -1.018e+10 -2.493e+09 -1.126e+10 -2.397e+09 -1.235e+10 -2.264e+09 -1.342e+10 -2.093e+09 -1.446e+10 -1.883e+09 -1.544e+10 -1.638e+09 -1.633e+10 -1.359e+09 -1.711e+10 -1.050e+09 -1.776e+10 -7.167e+08 -1.825e+10 -3.643e+08 -1.858e+10 -2.972e+05 -1.872e+10 3.671e+08 -1.866e+10 7.295e+08 -1.841e+10 1.078e+09 -1.796e+10 1.402e+09 -1.731e+10 1.695e+09 -1.649e+10 1.947e+09 -1.551e+10 2.151e+09 -1.439e+10 2.303e+09 -1.316e+10 2.398e+09 -1.185e+10 2.434e+09 -1.049e+10 2.411e+09 -9.107e+09 2.332e+09 -7.743e+09 2.201e+09 -6.426e+09 2.026e+09 -5.183e+09 1.815e+09 -4.042e+09 1.578e+09 -3.024e+09 1.327e+09 -2.145e+09 1.074e+09 -1.418e+09 8.335e+08 -8.470e+08 6.204e+08 -4.297e+08 4.531e+08 -1.492e+08 3.489e+08 3.763e+07 3.069e+08 2.050e+08 2.968e+08 4.230e+08 2.812e+08 7.214e+08 2.369e+08 1.096e+09 1.551e+08 1.528e+09 3.546e+07 1.992e+09 -1.178e+08 2.462e+09 -2.969e+08 2.910e+09 -4.921e+08 3.313e+09 -6.928e+08 3.645e+09 -8.870e+08 3.886e+09 -1.063e+09 4.017e+09 -1.209e+09 4.026e+09 -1.316e+09 3.905e+09 -1.374e+09 3.654e+09 -1.380e+09 3.282e+09 -1.329e+09 2.805e+09 -1.223e+09 2.251e+09 -1.068e+09 1.659e+09 -8.760e+08 1.080e+09 -6.673e+08 5.730e+08 -4.819e+08 1.894e+08 -3.913e+08 -9.305e+07 -4.285e+08 -4.890e+08 -5.145e+08 -1.276e+09 -5.564e+08 -2.650e+09 -4.919e+08 -4.763e+09 -2.734e+08 -7.766e+09 1.426e+08 -1.180e+10 7.988e+08 -1.701e+10 1.739e+09 -2.355e+10 3.004e+09 -3.152e+10 4.636e+09 -4.107e+10 6.677e+09 -5.228e+10 9.159e+09 -6.521e+10 1.212e+10 -7.991e+10 1.558e+10 -9.640e+10 1.957e+10 -1.146e+11 2.410e+10 -1.345e+11 2.919e+10 -1.561e+11 3.482e+10 -1.790e+11 4.097e+10 -2.031e+11 4.764e+10 -2.283e+11 5.478e+10 -2.541e+11 6.232e+10 -2.804e+11 7.023e+10 -3.068e+11 7.840e+10 -3.330e+11 8.675e+10 -3.585e+11 9.518e+10 -3.831e+11 1.057e+11 -4.070e+11 1.154e+11 -4.291e+11 1.235e+11 -4.485e+11 1.312e+11 -4.655e+11 1.383e+11 -4.797e+11 1.447e+11 -4.908e+11 1.502e+11 -4.987e+11 1.546e+11 -5.031e+11 1.580e+11 -5.038e+11 1.602e+11 -5.009e+11 1.611e+11 -4.941e+11 1.606e+11 -4.837e+11 1.588e+11 -4.695e+11 1.556e+11 -4.519e+11 1.511e+11 -4.309e+11 1.453e+11 -4.070e+11 1.383e+11 -3.803e+11 1.303e+11 -3.513e+11 1.213e+11 -3.205e+11 1.115e+11 -2.884e+11 1.011e+11 -2.555e+11 9.035e+10 -2.223e+11 7.940e+10 -1.895e+11 6.845e+10 -1.577e+11 5.774e+10 -1.276e+11 4.747e+10 -9.956e+10 3.782e+10 -7.427e+10 2.900e+10 -5.223e+10 2.116e+10 -3.383e+10 1.444e+10 -1.936e+10 9.010e+09 -9.025e+09 5.091e+09 -2.685e+09 3.038e+09 7.073e+08 2.697e+09 4.011e+09 2.636e+09 9.995e+09 1.877e+09 1.899e+10 2.590e+08 3.039e+10 -2.135e+09 4.338e+10 -5.136e+09 5.706e+10 -8.528e+09 7.039e+10 -1.207e+10 8.235e+10 -1.551e+10 9.193e+10 -1.857e+10 9.818e+10 -2.100e+10 1.003e+11 -2.256e+10 9.782e+10 -2.306e+10 9.049e+10 -2.235e+10 7.857e+10 -2.037e+10 6.284e+10 -1.719e+10 4.478e+10 -1.301e+10 2.658e+10 -8.378e+09 1.128e+10 -4.935e+09 1.382e+09 -4.975e+09 -8.127e+09 -7.163e+09 -3.224e+10 -7.372e+09 -8.311e+10 -3.333e+09 -1.705e+11 7.062e+09 -3.056e+11 2.622e+10 -5.009e+11 5.603e+10 -7.583e+11 1.009e+11 -1.115e+12 1.640e+11 -1.578e+12 2.497e+11 -2.170e+12 3.624e+11 -2.913e+12 5.073e+11 -3.829e+12 6.902e+11 -4.947e+12 9.171e+11 -6.293e+12 1.194e+12 -7.898e+12 1.529e+12 -9.795e+12 1.929e+12 -1.202e+13 2.401e+12 -1.460e+13 2.953e+12 -1.758e+13 3.595e+12 -2.101e+13 4.334e+12 -2.491e+13 5.180e+12 -2.934e+13 6.140e+12 -3.432e+13 7.222e+12 -3.991e+13 8.439e+12 -4.615e+13 9.795e+12 -5.309e+13 1.130e+13 -6.074e+13 1.296e+13 -6.920e+13 1.480e+13 -7.846e+13 1.682e+13 -8.858e+13 1.901e+13 -9.957e+13 2.141e+13 -1.116e+14 2.401e+13 -1.244e+14 2.680e+13 -1.383e+14 2.982e+13 -1.533e+14 3.304e+13 -1.692e+14 3.648e+13 -1.861e+14 4.016e+13 -2.041e+14 4.405e+13 -2.231e+14 4.817e+13 -2.431e+14 5.251e+13 -2.642e+14 5.707e+13 -2.863e+14 6.187e+13 -3.092e+14 6.687e+13 -3.331e+14 7.207e+13 -3.580e+14 7.748e+13 -3.835e+14 8.309e+13 -4.100e+14 8.887e+13 -4.371e+14 9.482e+13 -4.648e+14 1.009e+14 -4.932e+14 1.072e+14 -5.219e+14 1.135e+14 -5.512e+14 1.198e+14 -5.806e+14 1.263e+14 -6.103e+14 1.329e+14 -6.400e+14 1.394e+14 -6.698e+14 1.459e+14 -6.994e+14 1.524e+14 -7.288e+14 1.588e+14 -7.578e+14 1.651e+14 -7.863e+14 1.712e+14 -8.144e+14 1.772e+14 -8.417e+14 1.830e+14 -8.681e+14 1.885e+14 -8.937e+14 1.938e+14 -9.183e+14 1.988e+14 -9.416e+14 2.035e+14 -9.637e+14 2.078e+14 -9.845e+14 2.117e+14 -1.004e+15 2.152e+14 -1.021e+15 2.181e+14 -1.038e+15 2.206e+14 -1.052e+15 2.228e+14 -1.065e+15 2.245e+14 -1.075e+15 2.258e+14 -1.085e+15 2.266e+14 -1.092e+15 2.271e+14 -1.096e+15 2.271e+14 -1.099e+15 2.268e+14 -1.100e+15 2.259e+14 -1.099e+15 2.248e+14 -1.096e+15 2.232e+14 -1.090e+15 2.213e+14 -1.083e+15 2.189e+14 -1.074e+15 2.163e+14 -1.063e+15 2.133e+14 -1.050e+15 2.101e+14 -1.035e+15 2.064e+14 -1.019e+15 2.026e+14 -1.000e+15 1.984e+14 -9.804e+14 1.940e+14 -9.591e+14 1.895e+14 -9.364e+14 1.846e+14 -9.125e+14 1.795e+14 -8.874e+14 1.744e+14 -8.612e+14 1.689e+14 -8.342e+14 1.634e+14 -8.064e+14 1.577e+14 -7.780e+14 1.519e+14 -7.490e+14 1.460e+14 -7.195e+14 1.400e+14 -6.897e+14 1.341e+14 -6.599e+14 1.280e+14 -6.299e+14 1.220e+14 -5.999e+14 1.160e+14 -5.702e+14 1.100e+14 -5.407e+14 1.041e+14 -5.115e+14 9.823e+13 -4.829e+14 9.247e+13 -4.548e+14 8.684e+13 -4.274e+14 8.134e+13 -4.007e+14 7.600e+13 -3.747e+14 7.081e+13 -3.496e+14 6.578e+13 -3.253e+14 6.095e+13 -3.019e+14 5.632e+13 -2.794e+14 5.188e+13 -2.579e+14 4.767e+13 -2.374e+14 4.367e+13 -2.179e+14 3.988e+13 -1.994e+14 3.632e+13 -1.820e+14 3.298e+13 -1.654e+14 2.985e+13 -1.499e+14 2.693e+13 -1.355e+14 2.423e+13 -1.220e+14 2.173e+13 -1.095e+14 1.942e+13 -9.786e+13 1.730e+13 -8.715e+13 1.537e+13 -7.730e+13 1.360e+13 -6.829e+13 1.199e+13 -6.007e+13 1.053e+13 -5.261e+13 9.216e+12 -4.585e+13 8.031e+12 -3.978e+13 6.970e+12 -3.433e+13 6.020e+12 -2.947e+13 5.175e+12 -2.515e+13 4.426e+12 -2.134e+13 3.765e+12 -1.799e+13 3.184e+12 -1.506e+13 2.674e+12 -1.253e+13 2.232e+12 -1.033e+13 1.849e+12 -8.458e+12 1.519e+12 -6.861e+12 1.237e+12 -5.512e+12 9.975e+11 -4.382e+12 7.959e+11 -3.445e+12 6.275e+11 -2.674e+12 4.881e+11 -2.047e+12 3.744e+11 -1.543e+12 2.823e+11 -1.144e+12 2.089e+11 -8.313e+11 1.512e+11 -5.909e+11 1.066e+11 -4.092e+11 7.291e+10 -2.748e+11 4.724e+10 -1.751e+11 2.972e+10 -1.085e+11 1.760e+10 -6.363e+10 9.618e+09 -3.475e+10 4.664e+09 -1.722e+10 1.858e+09 -7.418e+09 4.918e+08 -2.562e+09 -2.683e+06 -5.940e+08 -1.189e+08 -5.050e+07 -2.804e+08 9.536e+07 -4.944e+08 2.003e+08 -6.579e+08 1.516e+08 -7.922e+08 -8.126e+07 -1.003e+09 -5.713e+08 -1.379e+09 -1.603e+09 -1.907e+09 -3.614e+09 -2.517e+09 -7.056e+09 -3.133e+09 -1.234e+10 -3.690e+09 -1.977e+10 -4.133e+09 -2.960e+10 -4.424e+09 -4.200e+10 -4.533e+09 -5.697e+10 -4.446e+09 -7.447e+10 -4.156e+09 -9.435e+10 -3.668e+09 -1.163e+11 -2.988e+09 -1.400e+11 -2.131e+09 -1.652e+11 -1.110e+09 -1.911e+11 5.708e+07 -2.175e+11 1.355e+09 -2.438e+11 2.768e+09 -2.694e+11 4.284e+09 -2.939e+11 5.891e+09 -3.167e+11 7.576e+09 -3.374e+11 9.354e+09 -3.558e+11 1.119e+10 -3.713e+11 1.306e+10 -3.838e+11 1.494e+10 -3.930e+11 1.680e+10 -3.988e+11 1.862e+10 -4.010e+11 2.037e+10 -3.998e+11 2.201e+10 -3.952e+11 2.350e+10 -3.873e+11 2.481e+10 -3.764e+11 2.590e+10 -3.626e+11 2.674e+10 -3.462e+11 2.729e+10 -3.276e+11 2.755e+10 -3.072e+11 2.750e+10 -2.853e+11 2.713e+10 -2.623e+11 2.644e+10 -2.386e+11 2.545e+10 -2.146e+11 2.419e+10 -1.907e+11 2.268e+10 -1.672e+11 2.096e+10 -1.445e+11 1.908e+10 -1.230e+11 1.708e+10 -1.027e+11 1.503e+10 -8.404e+10 1.296e+10 -6.715e+10 1.094e+10 -5.213e+10 8.998e+09 -3.909e+10 7.185e+09 -2.807e+10 5.531e+09 -1.903e+10 4.064e+09 -1.193e+10 2.806e+09 -6.669e+09 1.773e+09 -3.093e+09 1.006e+09 -1.004e+09 6.050e+08 1.166e+06 6.254e+08 7.613e+08 8.117e+08 2.103e+09 9.390e+08 4.075e+09 9.761e+08 6.479e+09 9.364e+08 9.101e+09 8.425e+08 1.173e+10 7.187e+08 1.421e+10 5.852e+08 1.636e+10 4.597e+08 1.807e+10 3.554e+08 1.924e+10 2.813e+08 1.982e+10 2.419e+08 1.978e+10 2.381e+08 1.912e+10 2.648e+08 1.790e+10 3.148e+08 1.618e+10 3.783e+08 1.408e+10 4.437e+08 1.171e+10 4.979e+08 9.207e+09 5.278e+08 6.728e+09 5.201e+08 4.429e+09 4.634e+08 2.479e+09 3.518e+08 1.040e+09 2.249e+08 2.401e+08 3.056e+08 -2.665e+08 6.310e+08 -1.336e+09 1.120e+09 -3.442e+09 0.005 -53.416 -52.397 -51.379 -50.360 -49.341 -48.336 -47.433 -46.623 -45.898 -45.253 -44.683 -44.183 -43.750 -43.382 -43.077 -42.833 -42.649 -42.524 -42.459 -42.452 -42.506 -42.620 -42.796 -43.037 -43.345 -43.723 -44.175 -44.706 -45.324 -46.035 -46.850 -47.781 -48.846 -50.068 -51.476 -53.115 -55.052 -57.397 -60.349 -64.339 -70.677 -85.828 -75.304 -69.123 -66.573 -65.424 -65.109 -65.330 -65.654 -65.250 -63.519 -60.990 -58.390 -56.018 -53.928 -52.097 -50.491 -49.077 -47.828 -46.724 -45.747 -44.884 -44.125 -43.461 -42.886 -42.393 -41.980 -41.643 -41.379 -41.186 -41.064 -41.013 -41.031 -41.120 -41.282 -41.517 -41.829 -42.220 -42.695 -43.257 -43.913 -44.667 -45.527 -46.498 -47.586 -48.793 -50.117 -51.544 -53.045 -54.568 -56.052 -57.458 -58.824 -60.312 -62.211 -64.831 -67.110 -64.535 -59.795 -55.784 -52.574 -49.917 -47.655 -45.694 -43.969 -42.438 -41.071 -39.844 -38.742 -37.750 -36.860 -36.062 -35.350 -34.720 -34.167 -33.688 -33.282 -32.947 -32.682 -32.487 -32.363 -32.311 -32.333 -32.431 -32.610 -32.875 -33.230 -33.686 -34.250 -34.935 -35.756 -36.734 -37.891 -39.259 -40.869 -42.747 -44.867 -47.030 -48.691 -49.259 -48.929 -48.454 -48.426 -49.261 -51.605 -57.225 -56.442 -48.071 -42.396 -38.317 -35.073 -32.347 -29.977 -27.874 -25.978 -24.250 -22.663 -21.195 -19.830 -18.555 -17.360 -16.238 -15.180 -14.182 -13.239 -12.346 -11.500 -10.698 -9.938 -9.215 -8.530 -7.880 -7.262 -6.677 -6.122 -5.596 -5.098 -4.627 -4.183 -3.764 -3.370 -3.000 -2.654 -2.331 -2.030 -1.751 -1.494 -1.258 -1.043 -0.849 -0.675 -0.522 -0.388 -0.275 -0.181 -0.106 -0.051 -0.016 0.000 -0.003 -0.026 -0.067 -0.128 -0.209 -0.309 -0.429 -0.569 -0.729 -0.909 -1.110 -1.332 -1.575 -1.840 -2.127 -2.436 -2.768 -3.123 -3.503 -3.907 -4.336 -4.792 -5.275 -5.786 -6.326 -6.896 -7.499 -8.134 -8.805 -9.512 -10.259 -11.047 -11.879 -12.760 -13.692 -14.680 -15.730 -16.848 -18.042 -19.322 -20.701 -22.194 -23.823 -25.617 -27.617 -29.889 -32.534 -35.741 -39.915 -46.243 -64.526 -51.227 -45.452 -42.878 -41.558 -40.965 -40.885 -41.215 -41.893 -42.852 -43.947 -44.840 -45.022 -44.231 -42.785 -41.167 -39.649 -38.316 -37.178 -36.221 -35.424 -34.769 -34.241 -33.826 -33.515 -33.299 -33.173 -33.130 -33.168 -33.283 -33.473 -33.738 -34.077 -34.490 -34.978 -35.543 -36.187 -36.914 -37.725 -38.627 -39.625 -40.725 -41.933 -43.258 -44.706 -46.285 -47.999 -49.852 -51.841 -53.958 -56.200 -58.561 -60.975 -62.929 -63.019 -60.853 -57.956 -55.223 -52.821 -50.731 -48.906 -47.304 -45.892 -44.643 -43.537 -42.557 -41.690 -40.926 -40.254 -39.668 -39.162 -38.732 -38.372 -38.080 -37.853 -37.689 -37.585 -37.541 -37.556 -37.628 -37.758 -37.946 -38.193 -38.500 -38.867 -39.297 -39.793 -40.356 -40.991 -41.703 -42.496 -43.378 -44.357 -45.442 -46.646 -47.986 -49.482 -51.161 -53.060 -55.230 -57.743 -60.713 -64.324 -68.914 -74.963 -80.677 -78.988 -75.967 -73.038 -69.625 -66.140 -62.980 -60.239 -57.880 -55.846 -54.080 -52.539 -51.189 -50.001 -48.955 -48.034 -47.224 -46.515 -45.898 -45.366 -44.912 -44.533 -44.223 -43.979 -43.800 -43.682 -43.624 -43.625 -43.683 -43.800 -43.974 -44.206 -44.496 -44.846 -45.257 -45.731 -46.271 -46.879 -47.559 -48.316 -49.156 -50.085 -51.111 -52.151 -53.190 -54.230 -55.270 0.03 -18.841 -18.4692 -18.101 -17.7366 -17.3759 -17.0189 -16.6655 -16.3159 -15.97 -15.6278 -15.2894 -14.9546 -14.6235 -14.2961 -13.9725 -13.6525 -13.3362 -13.0237 -12.7148 -12.4097 -12.1083 -11.8105 -11.5165 -11.2262 -10.9396 -10.6567 -10.3775 -10.102 -9.8302 -9.5621 -9.2978 -9.0371 -8.7801 -8.5269 -8.2773 -8.0315 -7.7893 -7.5509 -7.3162 -7.0851 -6.8578 -6.6342 -6.4143 -6.1981 -5.9856 -5.7768 -5.5717 -5.3703 -5.1727 -4.9787 -4.7884 -4.6019 -4.419 -4.2399 -4.0644 -3.8927 -3.7247 -3.5604 -3.3997 -3.2428 -3.0896 -2.9401 -2.7943 -2.6522 -2.5138 -2.3792 -2.2482 -2.1209 -1.9974 -1.8775 -1.7614 -1.6489 -1.5402 -1.4351 -1.3338 -1.2362 -1.1423 -1.0521 -0.96557 -0.88277 -0.80368 -0.72829 -0.65661 -0.58863 -0.52436 -0.4638 -0.40694 -0.35378 -0.30434 -0.25859 -0.21656 -0.17823 -0.1436 -0.11268 -0.085466 -0.061958 -0.042155 -0.026058 -0.013666 -0.0049802 0 0.0012746 -0.0011565 -0.0072932 -0.017136 -0.030684 -0.047937 -0.068897 -0.093562 -0.12193 -0.15401 -0.18979 -0.22928 -0.27247 -0.31937 -0.36997 -0.42428 -0.4823 -0.54402 -0.60945 -0.67858 -0.75142 -0.82796 -0.90821 -0.99217 -1.0798 -1.1712 -1.2663 -1.365 -1.4675 -1.5737 -1.6836 -1.7972 -1.9145 -2.0355 -2.1603 -2.2887 -2.4208 -2.5566 -2.6962 -2.8394 -2.9864 -3.137 -3.2914 -3.4495 -3.6112 -3.7767 -3.9459 -4.1188 -4.2954 -4.4757 -4.6597 -4.8474 -5.0388 -5.234 -5.4328 -5.6353 -5.8416 -6.0515 -6.2652 -6.4825 -6.7036 -6.9284 -7.1568 -7.389 -7.6249 -7.8645 -8.1078 -8.3548 -8.6055 -8.8599 -9.118 -9.3799 -9.6454 -9.9146 -10.1876 -10.4642 -10.7446 -11.0287 -11.3164 -11.6079 -11.9031 -12.202 -12.5045 -12.8108 -13.1208 -13.4345 -13.752 -14.0731 -14.3979 -14.7264 -15.0587 -15.3946 -15.7342 -16.0776 -16.4246 -16.7754 -17.1299 -17.4881 -17.8499 -18.2155 1.0 46324.29 EW4 VV 34.22 37.82 0.050 1.329e+10 -5.753e+09 1.300e+10 -5.370e+09 1.268e+10 -4.949e+09 1.231e+10 -4.495e+09 1.191e+10 -4.017e+09 1.147e+10 -3.519e+09 1.100e+10 -3.009e+09 1.049e+10 -2.494e+09 9.964e+09 -1.981e+09 9.411e+09 -1.477e+09 8.840e+09 -9.872e+08 8.257e+09 -5.186e+08 7.667e+09 -7.548e+07 7.077e+09 3.385e+08 6.493e+09 7.198e+08 5.922e+09 1.066e+09 5.367e+09 1.380e+09 4.836e+09 1.660e+09 4.332e+09 1.911e+09 3.856e+09 2.136e+09 3.410e+09 2.339e+09 2.994e+09 2.527e+09 2.604e+09 2.703e+09 2.237e+09 2.872e+09 1.888e+09 3.038e+09 1.553e+09 3.202e+09 1.225e+09 3.365e+09 8.996e+08 3.526e+09 5.733e+08 3.681e+09 2.436e+08 3.827e+09 -9.101e+07 3.961e+09 -4.311e+08 4.078e+09 -7.757e+08 4.173e+09 -1.123e+09 4.243e+09 -1.472e+09 4.285e+09 -1.820e+09 4.295e+09 -2.164e+09 4.273e+09 -2.504e+09 4.218e+09 -2.836e+09 4.129e+09 -3.160e+09 4.007e+09 -3.475e+09 3.853e+09 -3.782e+09 3.667e+09 -4.079e+09 3.453e+09 -4.369e+09 3.211e+09 -4.652e+09 2.942e+09 -4.930e+09 2.648e+09 -5.205e+09 2.328e+09 -5.478e+09 1.983e+09 -5.752e+09 1.612e+09 -6.027e+09 1.214e+09 -6.304e+09 7.859e+08 -6.583e+09 3.263e+08 -6.863e+09 -1.678e+08 -7.143e+09 -6.995e+08 -7.420e+09 -1.270e+09 -7.691e+09 -1.883e+09 -7.951e+09 -2.539e+09 -8.196e+09 -3.238e+09 -8.421e+09 -3.981e+09 -8.621e+09 -4.767e+09 -8.790e+09 -5.592e+09 -8.924e+09 -6.454e+09 -9.017e+09 -7.349e+09 -9.064e+09 -8.269e+09 -9.062e+09 -9.207e+09 -9.007e+09 -1.016e+10 -8.897e+09 -1.111e+10 -8.731e+09 -1.205e+10 -8.507e+09 -1.297e+10 -8.229e+09 -1.387e+10 -7.899e+09 -1.472e+10 -7.519e+09 -1.552e+10 -7.094e+09 -1.626e+10 -6.630e+09 -1.692e+10 -6.131e+09 -1.750e+10 -5.607e+09 -1.798e+10 -5.064e+09 -1.837e+10 -4.508e+09 -1.864e+10 -3.949e+09 -1.881e+10 -3.392e+09 -1.885e+10 -2.846e+09 -1.878e+10 -2.316e+09 -1.859e+10 -1.810e+09 -1.828e+10 -1.330e+09 -1.786e+10 -8.821e+08 -1.733e+10 -4.693e+08 -1.670e+10 -9.314e+07 -1.598e+10 2.442e+08 -1.518e+10 5.423e+08 -1.431e+10 8.016e+08 -1.337e+10 1.022e+09 -1.240e+10 1.206e+09 -1.139e+10 1.354e+09 -1.037e+10 1.468e+09 -9.338e+09 1.550e+09 -8.322e+09 1.602e+09 -7.329e+09 1.627e+09 -6.373e+09 1.627e+09 -5.466e+09 1.604e+09 -4.616e+09 1.561e+09 -3.834e+09 1.502e+09 -3.126e+09 1.431e+09 -2.495e+09 1.352e+09 -1.946e+09 1.271e+09 -1.477e+09 1.192e+09 -1.085e+09 1.125e+09 -7.615e+08 1.074e+09 -4.966e+08 1.045e+09 -2.752e+08 1.041e+09 -8.127e+07 1.060e+09 1.006e+08 1.098e+09 2.823e+08 1.147e+09 4.704e+08 1.201e+09 6.665e+08 1.254e+09 8.683e+08 1.300e+09 1.071e+09 1.335e+09 1.268e+09 1.358e+09 1.453e+09 1.367e+09 1.618e+09 1.361e+09 1.759e+09 1.343e+09 1.870e+09 1.311e+09 1.947e+09 1.270e+09 1.988e+09 1.220e+09 1.992e+09 1.163e+09 1.960e+09 1.103e+09 1.893e+09 1.040e+09 1.794e+09 9.768e+08 1.667e+09 9.146e+08 1.519e+09 8.544e+08 1.354e+09 7.972e+08 1.178e+09 7.435e+08 9.997e+08 6.942e+08 8.239e+08 6.504e+08 6.568e+08 6.138e+08 5.030e+08 5.873e+08 3.650e+08 5.747e+08 2.422e+08 5.808e+08 1.302e+08 6.097e+08 2.062e+07 6.639e+08 -9.750e+07 7.433e+08 -2.349e+08 8.463e+08 -4.008e+08 9.699e+08 -6.009e+08 1.110e+09 -8.380e+08 1.265e+09 -1.113e+09 1.429e+09 -1.424e+09 1.600e+09 -1.769e+09 1.775e+09 -2.143e+09 1.950e+09 -2.541e+09 2.123e+09 -2.958e+09 2.291e+09 -3.386e+09 2.453e+09 -3.820e+09 2.605e+09 -4.252e+09 2.746e+09 -4.673e+09 2.876e+09 -5.078e+09 2.995e+09 -5.457e+09 3.101e+09 -5.803e+09 3.194e+09 -6.111e+09 3.276e+09 -6.372e+09 3.346e+09 -6.582e+09 3.405e+09 -6.736e+09 3.454e+09 -6.830e+09 3.492e+09 -6.862e+09 3.519e+09 -6.831e+09 3.536e+09 -6.737e+09 3.541e+09 -6.582e+09 3.535e+09 -6.369e+09 3.516e+09 -6.102e+09 3.482e+09 -5.788e+09 3.433e+09 -5.433e+09 3.367e+09 -5.044e+09 3.284e+09 -4.629e+09 3.183e+09 -4.197e+09 3.063e+09 -3.757e+09 2.926e+09 -3.315e+09 2.770e+09 -2.880e+09 2.599e+09 -2.460e+09 2.413e+09 -2.060e+09 2.215e+09 -1.686e+09 2.009e+09 -1.343e+09 1.798e+09 -1.033e+09 1.585e+09 -7.596e+08 1.374e+09 -5.237e+08 1.169e+09 -3.253e+08 9.752e+08 -1.634e+08 7.956e+08 -3.585e+07 6.334e+08 6.077e+07 4.911e+08 1.311e+08 3.699e+08 1.810e+08 2.689e+08 2.176e+08 1.845e+08 2.484e+08 1.102e+08 2.802e+08 3.746e+07 3.172e+08 -4.247e+07 3.603e+08 -1.366e+08 4.075e+08 -2.501e+08 4.551e+08 -3.856e+08 4.985e+08 -5.447e+08 5.332e+08 -7.284e+08 5.550e+08 -9.370e+08 5.596e+08 -1.171e+09 5.433e+08 -1.432e+09 5.019e+08 -1.719e+09 4.315e+08 -2.036e+09 3.279e+08 -2.383e+09 1.865e+08 -2.762e+09 2.467e+06 -3.175e+09 -2.290e+08 -3.623e+09 -5.135e+08 -4.109e+09 -8.563e+08 -4.631e+09 -1.262e+09 -5.191e+09 -1.736e+09 -5.786e+09 -2.281e+09 -6.414e+09 -2.899e+09 -7.072e+09 -3.593e+09 -7.753e+09 -4.360e+09 -8.449e+09 -5.196e+09 -9.153e+09 -6.098e+09 -9.852e+09 -7.055e+09 -1.054e+10 -8.057e+09 -1.119e+10 -9.089e+09 -1.180e+10 -1.013e+10 -1.234e+10 -1.117e+10 -1.282e+10 -1.219e+10 -1.320e+10 -1.316e+10 -1.347e+10 -1.406e+10 -1.363e+10 -1.486e+10 -1.365e+10 -1.555e+10 -1.355e+10 -1.610e+10 -1.330e+10 -1.650e+10 -1.292e+10 -1.673e+10 -1.241e+10 -1.678e+10 -1.177e+10 -1.665e+10 -1.103e+10 -1.634e+10 -1.019e+10 -1.585e+10 -9.275e+09 -1.520e+10 -8.309e+09 -1.438e+10 -7.316e+09 -1.344e+10 -6.317e+09 -1.238e+10 -5.337e+09 -1.124e+10 -4.398e+09 -1.004e+10 -3.518e+09 -8.807e+09 -2.714e+09 -7.577e+09 -2.001e+09 -6.378e+09 -1.386e+09 -5.233e+09 -8.747e+08 -4.168e+09 -4.688e+08 -3.206e+09 -1.643e+08 -2.361e+09 4.558e+07 -1.647e+09 1.725e+08 -1.073e+09 2.334e+08 -6.397e+08 2.535e+08 -3.403e+08 2.695e+08 -1.479e+08 3.179e+08 -5.306e+06 4.100e+08 1.530e+08 5.314e+08 3.645e+08 6.617e+08 6.337e+08 7.840e+08 9.469e+08 8.859e+08 1.283e+09 9.587e+08 1.619e+09 9.962e+08 1.931e+09 9.951e+08 2.194e+09 9.545e+08 2.389e+09 8.762e+08 2.499e+09 7.639e+08 2.510e+09 6.238e+08 2.415e+09 4.646e+08 2.216e+09 2.975e+08 1.923e+09 1.357e+08 1.555e+09 -5.366e+06 1.145e+09 -1.100e+08 7.380e+08 -1.690e+08 3.893e+08 -2.090e+08 1.483e+08 -3.381e+08 -5.226e+07 -6.542e+08 -4.404e+08 -1.192e+09 -1.227e+09 -1.979e+09 -2.571e+09 -3.055e+09 -4.623e+09 -4.461e+09 -7.531e+09 -6.244e+09 -1.145e+10 -8.452e+09 -1.656e+10 -1.112e+10 -2.299e+10 -1.430e+10 -3.090e+10 -1.802e+10 -4.044e+10 -2.231e+10 -5.172e+10 -2.717e+10 -6.485e+10 -3.262e+10 -7.992e+10 -3.863e+10 -9.694e+10 -4.518e+10 -1.160e+11 -5.224e+10 -1.369e+11 -5.973e+10 -1.598e+11 -6.757e+10 -1.844e+11 -7.569e+10 -2.107e+11 -8.395e+10 -2.383e+11 -9.224e+10 -2.671e+11 -1.004e+11 -2.968e+11 -1.084e+11 -3.271e+11 -1.160e+11 -3.576e+11 -1.232e+11 -3.880e+11 -1.296e+11 -4.178e+11 -1.354e+11 -4.466e+11 -1.403e+11 -4.742e+11 -1.483e+11 -4.983e+11 -1.453e+11 -5.262e+11 -1.470e+11 -5.471e+11 -1.476e+11 -5.651e+11 -1.472e+11 -5.798e+11 -1.456e+11 -5.909e+11 -1.430e+11 -5.981e+11 -1.394e+11 -6.013e+11 -1.348e+11 -6.003e+11 -1.294e+11 -5.950e+11 -1.231e+11 -5.854e+11 -1.162e+11 -5.716e+11 -1.087e+11 -5.536e+11 -1.006e+11 -5.316e+11 -9.225e+10 -5.059e+11 -8.360e+10 -4.768e+11 -7.480e+10 -4.448e+11 -6.595e+10 -4.103e+11 -5.719e+10 -3.738e+11 -4.863e+10 -3.360e+11 -4.036e+10 -2.973e+11 -3.252e+10 -2.587e+11 -2.522e+10 -2.206e+11 -1.854e+10 -1.838e+11 -1.262e+10 -1.490e+11 -7.524e+09 -1.168e+11 -3.339e+09 -8.783e+10 -1.305e+08 -6.256e+10 2.070e+09 -4.142e+10 3.267e+09 -2.469e+10 3.539e+09 -1.255e+10 3.169e+09 -4.890e+09 2.996e+09 -8.729e+08 4.262e+09 2.143e+09 7.018e+09 7.221e+09 1.054e+10 1.499e+10 1.437e+10 2.485e+10 1.819e+10 3.595e+10 2.169e+10 4.728e+10 2.458e+10 5.779e+10 2.660e+10 6.648e+10 2.753e+10 7.239e+10 2.719e+10 7.474e+10 2.551e+10 7.300e+10 2.254e+10 6.697e+10 1.844e+10 5.692e+10 1.357e+10 4.369e+10 8.481e+09 2.877e+10 3.932e+09 1.450e+10 9.239e+08 4.102e+09 -7.913e+08 -1.789e+09 -4.916e+09 -1.337e+10 -1.527e+10 -4.532e+10 -3.394e+10 -1.060e+11 -6.333e+10 -2.052e+11 -1.062e+11 -3.544e+11 -1.656e+11 -5.670e+11 -2.447e+11 -8.579e+11 -3.198e+11 -1.145e+12 -4.399e+11 -1.609e+12 -5.894e+11 -2.200e+12 -7.726e+11 -2.938e+12 -9.941e+11 -3.851e+12 -1.258e+12 -4.964e+12 -1.571e+12 -6.305e+12 -1.937e+12 -7.908e+12 -2.363e+12 -9.798e+12 -2.853e+12 -1.203e+13 -3.417e+12 -1.462e+13 -4.057e+12 -1.762e+13 -4.783e+12 -2.106e+13 -5.602e+12 -2.500e+13 -6.521e+12 -2.947e+13 -7.548e+12 -3.453e+13 -8.691e+12 -4.022e+13 -9.960e+12 -4.657e+13 -1.135e+13 -5.366e+13 -1.289e+13 -6.151e+13 -1.457e+13 -7.019e+13 -1.641e+13 -7.972e+13 -1.841e+13 -9.018e+13 -2.055e+13 -1.016e+14 -2.287e+13 -1.140e+14 -2.535e+13 -1.274e+14 -2.802e+13 -1.419e+14 -3.084e+13 -1.574e+14 -3.385e+13 -1.741e+14 -3.703e+13 -1.919e+14 -4.037e+13 -2.108e+14 -4.388e+13 -2.309e+14 -4.755e+13 -2.521e+14 -5.135e+13 -2.743e+14 -5.530e+13 -2.977e+14 -5.936e+13 -3.223e+14 -6.352e+13 -3.478e+14 -6.779e+13 -3.744e+14 -7.212e+13 -4.019e+14 -7.651e+13 -4.303e+14 -8.095e+13 -4.595e+14 -8.540e+13 -4.896e+14 -8.986e+13 -5.203e+14 -9.429e+13 -5.517e+14 -9.866e+13 -5.835e+14 -1.030e+14 -6.158e+14 -1.073e+14 -6.485e+14 -1.115e+14 -6.813e+14 -1.156e+14 -7.143e+14 -1.195e+14 -7.473e+14 -1.234e+14 -7.801e+14 -1.270e+14 -8.128e+14 -1.306e+14 -8.450e+14 -1.339e+14 -8.768e+14 -1.372e+14 -9.080e+14 -1.402e+14 -9.384e+14 -1.430e+14 -9.679e+14 -1.457e+14 -9.963e+14 -1.481e+14 -1.024e+15 -1.504e+14 -1.051e+15 -1.524e+14 -1.075e+15 -1.543e+14 -1.098e+15 -1.558e+14 -1.120e+15 -1.574e+14 -1.140e+15 -1.588e+14 -1.160e+15 -1.599e+14 -1.176e+15 -1.608e+14 -1.190e+15 -1.614e+14 -1.202e+15 -1.617e+14 -1.213e+15 -1.618e+14 -1.221e+15 -1.614e+14 -1.227e+15 -1.609e+14 -1.231e+15 -1.600e+14 -1.232e+15 -1.588e+14 -1.232e+15 -1.573e+14 -1.229e+15 -1.555e+14 -1.223e+15 -1.534e+14 -1.216e+15 -1.509e+14 -1.206e+15 -1.482e+14 -1.195e+15 -1.450e+14 -1.180e+15 -1.417e+14 -1.164e+15 -1.381e+14 -1.146e+15 -1.342e+14 -1.126e+15 -1.302e+14 -1.105e+15 -1.259e+14 -1.082e+15 -1.215e+14 -1.057e+15 -1.168e+14 -1.030e+15 -1.121e+14 -1.003e+15 -1.072e+14 -9.739e+14 -1.024e+14 -9.441e+14 -9.744e+13 -9.134e+14 -9.253e+13 -8.818e+14 -8.764e+13 -8.497e+14 -8.278e+13 -8.171e+14 -7.800e+13 -7.840e+14 -7.332e+13 -7.508e+14 -6.876e+13 -7.175e+14 -6.432e+13 -6.842e+14 -6.004e+13 -6.510e+14 -5.591e+13 -6.181e+14 -5.194e+13 -5.855e+14 -4.815e+13 -5.534e+14 -4.455e+13 -5.218e+14 -4.115e+13 -4.910e+14 -3.792e+13 -4.609e+14 -3.488e+13 -4.317e+14 -3.200e+13 -4.032e+14 -2.929e+13 -3.757e+14 -2.675e+13 -3.491e+14 -2.437e+13 -3.236e+14 -2.214e+13 -2.991e+14 -2.005e+13 -2.758e+14 -1.811e+13 -2.535e+14 -1.630e+13 -2.323e+14 -1.462e+13 -2.123e+14 -1.306e+13 -1.933e+14 -1.162e+13 -1.756e+14 -1.029e+13 -1.588e+14 -9.065e+12 -1.433e+14 -7.942e+12 -1.287e+14 -6.914e+12 -1.154e+14 -5.978e+12 -1.029e+14 -5.130e+12 -9.144e+13 -4.366e+12 -8.093e+13 -3.681e+12 -7.133e+13 -3.071e+12 -6.260e+13 -2.531e+12 -5.469e+13 -2.058e+12 -4.754e+13 -1.646e+12 -4.112e+13 -1.293e+12 -3.539e+13 -9.911e+11 -3.028e+13 -7.377e+11 -2.577e+13 -5.277e+11 -2.179e+13 -3.567e+11 -1.831e+13 -2.201e+11 -1.528e+13 -1.135e+11 -1.265e+13 -3.274e+10 -1.039e+13 2.595e+10 -8.468e+12 6.635e+10 -6.835e+12 9.182e+10 -5.461e+12 1.054e+11 -4.317e+12 1.098e+11 -3.372e+12 1.074e+11 -2.599e+12 1.004e+11 -1.974e+12 9.022e+10 -1.475e+12 7.835e+10 -1.082e+12 6.589e+10 -7.772e+11 5.366e+10 -5.449e+11 4.227e+10 -3.712e+11 2.934e+10 -2.233e+11 2.140e+10 -1.411e+11 1.488e+10 -8.474e+10 9.773e+09 -4.775e+10 5.954e+09 -2.469e+10 3.269e+09 -1.130e+10 1.534e+09 -4.289e+09 5.459e+08 -1.157e+09 1.052e+08 -1.297e+08 -1.445e+07 5.714e+07 -1.297e+08 2.115e+08 -3.214e+08 2.819e+08 -5.555e+08 1.828e+08 -9.143e+08 -1.297e+08 -1.558e+09 -8.728e+08 -2.608e+09 -2.454e+09 -4.123e+09 -5.338e+09 -6.130e+09 -9.966e+09 -8.633e+09 -1.670e+10 -1.162e+10 -2.583e+10 -1.508e+10 -3.756e+10 -1.897e+10 -5.195e+10 -2.323e+10 -6.898e+10 -2.780e+10 -8.852e+10 -3.261e+10 -1.103e+11 -3.757e+10 -1.340e+11 -4.259e+10 -1.592e+11 -4.756e+10 -1.855e+11 -5.236e+10 -2.123e+11 -5.690e+10 -2.392e+11 -6.106e+10 -2.655e+11 -6.475e+10 -2.907e+11 -6.786e+10 -3.144e+11 -7.031e+10 -3.361e+11 -7.201e+10 -3.554e+11 -7.294e+10 -3.720e+11 -7.306e+10 -3.856e+11 -7.238e+10 -3.958e+11 -7.089e+10 -4.027e+11 -6.864e+10 -4.060e+11 -6.568e+10 -4.058e+11 -6.209e+10 -4.022e+11 -5.796e+10 -3.952e+11 -5.339e+10 -3.851e+11 -4.848e+10 -3.720e+11 -4.336e+10 -3.563e+11 -3.814e+10 -3.382e+11 -3.293e+10 -3.182e+11 -2.783e+10 -2.965e+11 -2.296e+10 -2.736e+11 -1.838e+10 -2.498e+11 -1.417e+10 -2.256e+11 -1.040e+10 -2.013e+11 -7.078e+09 -1.774e+11 -4.245e+09 -1.540e+11 -1.904e+09 -1.317e+11 -4.177e+07 -1.106e+11 1.362e+09 -9.100e+10 2.341e+09 -7.315e+10 2.939e+09 -5.716e+10 3.204e+09 -4.317e+10 3.192e+09 -3.124e+10 2.957e+09 -2.138e+10 2.555e+09 -1.355e+10 2.044e+09 -7.689e+09 1.483e+09 -3.650e+09 9.619e+08 -1.252e+09 6.711e+08 -8.331e+07 8.027e+08 7.662e+08 1.193e+09 2.259e+09 1.589e+09 4.497e+09 1.920e+09 7.273e+09 2.164e+09 1.036e+10 2.314e+09 1.351e+10 2.371e+09 1.654e+10 2.339e+09 1.927e+10 2.224e+09 2.152e+10 2.035e+09 2.321e+10 1.784e+09 2.423e+10 1.482e+09 2.455e+10 1.143e+09 2.415e+10 7.830e+08 2.307e+10 4.182e+08 2.139e+10 6.504e+07 1.919e+10 -2.595e+08 1.660e+10 -5.372e+08 1.375e+10 -7.512e+08 1.081e+10 -8.854e+08 7.933e+09 -9.258e+08 5.296e+09 -8.649e+08 3.068e+09 -7.127e+08 1.407e+09 -5.600e+08 4.082e+08 -6.678e+08 -2.647e+08 -1.131e+09 -1.404e+09 0.005 -53.205 -52.154 -51.102 -50.051 -49.000 -47.962 -47.027 -46.185 -45.428 -44.750 -44.146 -43.612 -43.144 -42.739 -42.396 -42.112 -41.885 -41.716 -41.603 -41.547 -41.546 -41.602 -41.715 -41.887 -42.120 -42.415 -42.775 -43.203 -43.704 -44.282 -44.943 -45.695 -46.547 -47.510 -48.599 -49.832 -51.234 -52.838 -54.689 -56.856 -59.440 -62.601 -66.582 -71.447 -74.596 -73.163 -71.238 -70.229 -69.699 -68.681 -66.489 -63.601 -60.713 -58.105 -55.816 -53.817 -52.065 -50.523 -49.162 -47.957 -46.890 -45.944 -45.110 -44.376 -43.736 -43.183 -42.713 -42.321 -42.006 -41.763 -41.593 -41.494 -41.466 -41.510 -41.625 -41.814 -42.078 -42.421 -42.845 -43.354 -43.952 -44.643 -45.434 -46.327 -47.326 -48.429 -49.629 -50.903 -52.211 -53.482 -54.626 -55.554 -56.219 -56.631 -56.808 -56.718 -56.251 -55.289 -53.844 -52.078 -50.188 -48.319 -46.544 -44.891 -43.367 -41.971 -40.694 -39.528 -38.466 -37.501 -36.625 -35.834 -35.123 -34.489 -33.928 -33.438 -33.018 -32.666 -32.382 -32.165 -32.017 -31.939 -31.933 -32.000 -32.146 -32.373 -32.689 -33.101 -33.617 -34.249 -35.012 -35.924 -37.007 -38.290 -39.803 -41.568 -43.554 -45.556 -47.018 -47.335 -46.678 -45.756 -45.078 -44.882 -45.335 -46.706 -49.603 -54.479 -50.757 -44.034 -39.267 -35.652 -32.701 -30.188 -27.987 -26.025 -24.249 -22.627 -21.134 -19.750 -18.461 -17.257 -16.127 -15.065 -14.064 -13.119 -12.225 -11.380 -10.578 -9.819 -9.099 -8.416 -7.769 -7.154 -6.572 -6.020 -5.498 -5.004 -4.537 -4.097 -3.682 -3.293 -2.927 -2.585 -2.266 -1.969 -1.695 -1.442 -1.210 -1.000 -0.810 -0.641 -0.491 -0.362 -0.253 -0.163 -0.093 -0.043 -0.012 0.000 -0.008 -0.034 -0.080 -0.145 -0.229 -0.334 -0.458 -0.602 -0.766 -0.950 -1.155 -1.381 -1.628 -1.896 -2.187 -2.500 -2.835 -3.194 -3.577 -3.984 -4.416 -4.875 -5.360 -5.873 -6.415 -6.987 -7.590 -8.226 -8.897 -9.603 -10.348 -11.133 -11.962 -12.836 -13.761 -14.739 -15.776 -16.878 -18.050 -19.303 -20.645 -22.090 -23.654 -25.359 -27.236 -29.324 -31.685 -34.411 -37.650 -41.634 -46.494 -49.905 -48.132 -45.729 -44.273 -43.589 -43.486 -43.840 -44.550 -45.445 -46.174 -46.220 -45.313 -43.767 -42.062 -40.466 -39.064 -37.864 -36.849 -36.000 -35.297 -34.723 -34.266 -33.915 -33.661 -33.497 -33.419 -33.422 -33.503 -33.659 -33.891 -34.195 -34.574 -35.027 -35.555 -36.161 -36.846 -37.613 -38.467 -39.411 -40.449 -41.587 -42.827 -44.174 -45.626 -47.179 -48.818 -50.513 -52.214 -53.843 -55.290 -56.405 -56.983 -56.850 -55.986 -54.584 -52.917 -51.193 -49.528 -47.973 -46.547 -45.251 -44.079 -43.023 -42.076 -41.229 -40.475 -39.806 -39.218 -38.705 -38.264 -37.890 -37.581 -37.335 -37.148 -37.020 -36.950 -36.935 -36.975 -37.071 -37.222 -37.429 -37.691 -38.011 -38.389 -38.827 -39.328 -39.894 -40.528 -41.235 -42.020 -42.888 -43.847 -44.906 -46.074 -47.367 -48.800 -50.395 -52.179 -54.189 -56.474 -59.100 -62.166 -65.809 -70.211 -75.601 -81.793 -84.658 -78.827 -72.970 -68.371 -64.694 -61.682 -59.167 -57.033 -55.201 -53.615 -52.233 -51.024 -49.965 -49.037 -48.226 -47.520 -46.909 -46.387 -45.947 -45.583 -45.293 -45.071 -44.917 -44.828 -44.801 -44.837 -44.935 -45.094 -45.316 -45.599 -45.947 -46.360 -46.842 -47.394 -48.021 -48.728 -49.519 -50.403 -51.387 -52.483 -53.595 -54.706 -55.818 -56.930 0.03 -19.4487 -19.0646 -18.6843 -18.3078 -17.9352 -17.5664 -17.2014 -16.8402 -16.4829 -16.1294 -15.7798 -15.434 -15.092 -14.7538 -14.4195 -14.089 -13.7624 -13.4395 -13.1205 -12.8054 -12.494 -12.1865 -11.8828 -11.583 -11.287 -10.9948 -10.7064 -10.4219 -10.1412 -9.8644 -9.5914 -9.3222 -9.0568 -8.7953 -8.5376 -8.2837 -8.0337 -7.7875 -7.5451 -7.3065 -7.0718 -6.8409 -6.6139 -6.3907 -6.1713 -5.9557 -5.744 -5.5361 -5.332 -5.1318 -4.9354 -4.7428 -4.5541 -4.3692 -4.1881 -4.0108 -3.8374 -3.6678 -3.5021 -3.3402 -3.1821 -3.0278 -2.8774 -2.7308 -2.588 -2.4491 -2.314 -2.1827 -2.0553 -1.9317 -1.8119 -1.6959 -1.5838 -1.4755 -1.3711 -1.2705 -1.1737 -1.0807 -0.99157 -0.90627 -0.82481 -0.74717 -0.67336 -0.60339 -0.53725 -0.47494 -0.41646 -0.36181 -0.31099 -0.264 -0.22085 -0.18152 -0.14603 -0.11436 -0.086533 -0.062533 -0.042364 -0.026026 -0.01352 -0.0048443 0 0.0010131 -0.001805 -0.0084542 -0.018935 -0.033246 -0.051389 -0.073363 -0.099168 -0.1288 -0.16227 -0.19957 -0.2407 -0.28566 -0.33445 -0.38708 -0.44353 -0.50382 -0.56793 -0.63588 -0.70766 -0.78327 -0.86271 -0.94598 -1.0331 -1.124 -1.2188 -1.3174 -1.4198 -1.5261 -1.6362 -1.7501 -1.8678 -1.9894 -2.1148 -2.2441 -2.3772 -2.5141 -2.6548 -2.7994 -2.9478 -3.1 -3.2561 -3.416 -3.5797 -3.7473 -3.9187 -4.0939 -4.2729 -4.4558 -4.6425 -4.8331 -5.0274 -5.2256 -5.4277 -5.6336 -5.8433 -6.0568 -6.2742 -6.4953 -6.7204 -6.9492 -7.1819 -7.4184 -7.6588 -7.903 -8.151 -8.4028 -8.6585 -8.918 -9.1813 -9.4485 -9.7195 -9.9943 -10.273 -10.5555 -10.8418 -11.132 -11.426 -11.7238 -12.0254 -12.3309 -12.6402 -12.9534 -13.2703 -13.5911 -13.9158 -14.2442 -14.5765 -14.9127 -15.2526 -15.5964 -15.944 -16.2955 -16.6508 -17.0099 -17.3728 -17.7396 -18.1102 -18.4847 -18.8629 1.0 46324.29 EW4 VH 34.22 37.82 0.050 9.524e+09 3.117e+09 9.335e+09 3.166e+09 9.089e+09 3.219e+09 8.792e+09 3.275e+09 8.447e+09 3.332e+09 8.061e+09 3.388e+09 7.638e+09 3.441e+09 7.185e+09 3.488e+09 6.709e+09 3.527e+09 6.215e+09 3.558e+09 5.709e+09 3.578e+09 5.198e+09 3.587e+09 4.689e+09 3.585e+09 4.185e+09 3.571e+09 3.692e+09 3.546e+09 3.216e+09 3.513e+09 2.757e+09 3.472e+09 2.320e+09 3.427e+09 1.905e+09 3.380e+09 1.511e+09 3.334e+09 1.137e+09 3.293e+09 7.807e+08 3.259e+09 4.366e+08 3.233e+09 1.005e+08 3.218e+09 -2.329e+08 3.213e+09 -5.694e+08 3.217e+09 -9.131e+08 3.226e+09 -1.268e+09 3.237e+09 -1.635e+09 3.247e+09 -2.017e+09 3.249e+09 -2.412e+09 3.239e+09 -2.817e+09 3.212e+09 -3.230e+09 3.163e+09 -3.646e+09 3.089e+09 -4.059e+09 2.986e+09 -4.465e+09 2.851e+09 -4.857e+09 2.682e+09 -5.230e+09 2.479e+09 -5.579e+09 2.241e+09 -5.899e+09 1.968e+09 -6.187e+09 1.662e+09 -6.438e+09 1.325e+09 -6.652e+09 9.572e+08 -6.828e+09 5.621e+08 -6.965e+09 1.414e+08 -7.064e+09 -3.024e+08 -7.128e+09 -7.679e+08 -7.158e+09 -1.254e+09 -7.158e+09 -1.760e+09 -7.131e+09 -2.285e+09 -7.080e+09 -2.832e+09 -7.007e+09 -3.400e+09 -6.913e+09 -3.992e+09 -6.800e+09 -4.612e+09 -6.669e+09 -5.261e+09 -6.517e+09 -5.941e+09 -6.344e+09 -6.656e+09 -6.147e+09 -7.404e+09 -5.922e+09 -8.187e+09 -5.667e+09 -9.004e+09 -5.378e+09 -9.851e+09 -5.052e+09 -1.073e+10 -4.685e+09 -1.162e+10 -4.277e+09 -1.254e+10 -3.825e+09 -1.345e+10 -3.329e+09 -1.437e+10 -2.790e+09 -1.528e+10 -2.209e+09 -1.616e+10 -1.588e+09 -1.701e+10 -9.329e+08 -1.781e+10 -2.475e+08 -1.857e+10 4.631e+08 -1.925e+10 1.191e+09 -1.987e+10 1.929e+09 -2.039e+10 2.670e+09 -2.083e+10 3.406e+09 -2.117e+10 4.126e+09 -2.140e+10 4.824e+09 -2.151e+10 5.489e+09 -2.152e+10 6.114e+09 -2.140e+10 6.689e+09 -2.116e+10 7.208e+09 -2.081e+10 7.662e+09 -2.034e+10 8.047e+09 -1.976e+10 8.356e+09 -1.907e+10 8.587e+09 -1.828e+10 8.736e+09 -1.740e+10 8.802e+09 -1.643e+10 8.785e+09 -1.540e+10 8.688e+09 -1.431e+10 8.514e+09 -1.318e+10 8.266e+09 -1.202e+10 7.952e+09 -1.084e+10 7.579e+09 -9.662e+09 7.154e+09 -8.502e+09 6.688e+09 -7.373e+09 6.190e+09 -6.289e+09 5.672e+09 -5.265e+09 5.143e+09 -4.309e+09 4.615e+09 -3.434e+09 4.099e+09 -2.647e+09 3.606e+09 -1.951e+09 3.145e+09 -1.349e+09 2.727e+09 -8.385e+08 2.359e+09 -4.110e+08 2.047e+09 -5.453e+07 1.794e+09 2.490e+08 1.598e+09 5.220e+08 1.452e+09 7.877e+08 1.343e+09 1.066e+09 1.256e+09 1.370e+09 1.176e+09 1.706e+09 1.092e+09 2.072e+09 9.973e+08 2.461e+09 8.866e+08 2.863e+09 7.589e+08 3.266e+09 6.149e+08 3.659e+09 4.569e+08 4.030e+09 2.884e+08 4.367e+09 1.128e+08 4.662e+09 -6.540e+07 4.907e+09 -2.419e+08 5.094e+09 -4.127e+08 5.219e+09 -5.738e+08 5.280e+09 -7.215e+08 5.276e+09 -8.528e+08 5.206e+09 -9.649e+08 5.075e+09 -1.056e+09 4.885e+09 -1.124e+09 4.643e+09 -1.169e+09 4.355e+09 -1.189e+09 4.028e+09 -1.186e+09 3.671e+09 -1.161e+09 3.292e+09 -1.115e+09 2.900e+09 -1.050e+09 2.505e+09 -9.686e+08 2.116e+09 -8.742e+08 1.741e+09 -7.700e+08 1.387e+09 -6.598e+08 1.063e+09 -5.476e+08 7.752e+08 -4.377e+08 5.285e+08 -3.344e+08 3.273e+08 -2.427e+08 1.739e+08 -1.684e+08 6.682e+07 -1.178e+08 -3.327e+06 -9.318e+07 -6.060e+07 -8.403e+07 -1.374e+08 -7.248e+07 -2.546e+08 -4.596e+07 -4.168e+08 1.091e+06 -6.213e+08 7.064e+07 -8.632e+08 1.627e+08 -1.136e+09 2.764e+08 -1.433e+09 4.099e+08 -1.747e+09 5.605e+08 -2.070e+09 7.252e+08 -2.394e+09 9.006e+08 -2.712e+09 1.083e+09 -3.014e+09 1.267e+09 -3.294e+09 1.450e+09 -3.546e+09 1.628e+09 -3.762e+09 1.795e+09 -3.939e+09 1.949e+09 -4.072e+09 2.086e+09 -4.158e+09 2.203e+09 -4.196e+09 2.298e+09 -4.184e+09 2.368e+09 -4.125e+09 2.413e+09 -4.019e+09 2.432e+09 -3.871e+09 2.425e+09 -3.684e+09 2.391e+09 -3.464e+09 2.334e+09 -3.216e+09 2.254e+09 -2.946e+09 2.153e+09 -2.662e+09 2.034e+09 -2.369e+09 1.900e+09 -2.075e+09 1.755e+09 -1.786e+09 1.600e+09 -1.507e+09 1.441e+09 -1.243e+09 1.280e+09 -9.993e+08 1.120e+09 -7.787e+08 9.652e+08 -5.838e+08 8.178e+08 -4.159e+08 6.806e+08 -2.752e+08 5.560e+08 -1.611e+08 4.457e+08 -7.169e+07 3.507e+08 -4.117e+06 2.718e+08 4.551e+07 2.081e+08 8.209e+07 1.575e+08 1.110e+08 1.166e+08 1.370e+08 8.073e+07 1.638e+08 4.521e+07 1.927e+08 6.478e+06 2.230e+08 -3.769e+07 2.530e+08 -8.826e+07 2.804e+08 -1.453e+08 3.031e+08 -2.085e+08 3.191e+08 -2.773e+08 3.269e+08 -3.512e+08 3.253e+08 -4.300e+08 3.132e+08 -5.138e+08 2.898e+08 -6.028e+08 2.540e+08 -6.977e+08 2.047e+08 -7.993e+08 1.403e+08 -9.083e+08 5.876e+07 -1.026e+09 -4.237e+07 -1.152e+09 -1.659e+08 -1.287e+09 -3.148e+08 -1.431e+09 -4.923e+08 -1.583e+09 -7.013e+08 -1.741e+09 -9.442e+08 -1.904e+09 -1.223e+09 -2.068e+09 -1.539e+09 -2.232e+09 -1.892e+09 -2.393e+09 -2.280e+09 -2.546e+09 -2.702e+09 -2.690e+09 -3.154e+09 -2.820e+09 -3.630e+09 -2.934e+09 -4.125e+09 -3.028e+09 -4.630e+09 -3.100e+09 -5.139e+09 -3.147e+09 -5.640e+09 -3.168e+09 -6.125e+09 -3.162e+09 -6.582e+09 -3.127e+09 -7.000e+09 -3.064e+09 -7.369e+09 -2.972e+09 -7.680e+09 -2.854e+09 -7.922e+09 -2.711e+09 -8.090e+09 -2.545e+09 -8.175e+09 -2.358e+09 -8.174e+09 -2.156e+09 -8.085e+09 -1.941e+09 -7.907e+09 -1.718e+09 -7.642e+09 -1.491e+09 -7.296e+09 -1.264e+09 -6.874e+09 -1.042e+09 -6.387e+09 -8.301e+08 -5.844e+09 -6.315e+08 -5.259e+09 -4.502e+08 -4.646e+09 -2.893e+08 -4.020e+09 -1.512e+08 -3.396e+09 -3.778e+07 -2.791e+09 5.003e+07 -2.218e+09 1.123e+08 -1.693e+09 1.497e+08 -1.227e+09 1.644e+08 -8.314e+08 1.595e+08 -5.129e+08 1.400e+08 -2.763e+08 1.151e+08 -1.203e+08 1.019e+08 -2.806e+07 1.168e+08 4.504e+07 1.562e+08 1.474e+08 2.056e+08 2.978e+08 2.536e+08 4.912e+08 2.935e+08 7.138e+08 3.212e+08 9.488e+08 3.334e+08 1.178e+09 3.285e+08 1.382e+09 3.058e+08 1.544e+09 2.663e+08 1.649e+09 2.117e+08 1.685e+09 1.454e+08 1.644e+09 7.216e+07 1.525e+09 -1.856e+06 1.333e+09 -6.946e+07 1.082e+09 -1.225e+08 7.954e+08 -1.533e+08 5.070e+08 -1.598e+08 2.586e+08 -1.646e+08 8.453e+07 -2.381e+08 -7.224e+07 -4.288e+08 -3.859e+08 -7.418e+08 -1.015e+09 -1.182e+09 -2.083e+09 -1.763e+09 -3.709e+09 -2.501e+09 -6.012e+09 -3.412e+09 -9.118e+09 -4.515e+09 -1.316e+10 -5.823e+09 -1.827e+10 -7.354e+09 -2.457e+10 -9.120e+09 -3.219e+10 -1.113e+10 -4.122e+10 -1.339e+10 -5.179e+10 -1.591e+10 -6.396e+10 -1.867e+10 -7.780e+10 -2.168e+10 -9.333e+10 -2.493e+10 -1.106e+11 -2.839e+10 -1.295e+11 -3.203e+10 -1.501e+11 -3.584e+10 -1.722e+11 -3.976e+10 -1.957e+11 -4.375e+10 -2.205e+11 -4.776e+10 -2.464e+11 -5.173e+10 -2.730e+11 -5.561e+10 -3.002e+11 -5.932e+10 -3.277e+11 -6.280e+10 -3.551e+11 -6.598e+10 -3.821e+11 -6.880e+10 -4.083e+11 -6.943e+10 -4.349e+11 -7.023e+10 -4.596e+11 -7.139e+10 -4.814e+11 -7.196e+10 -5.007e+11 -7.191e+10 -5.174e+11 -7.122e+10 -5.311e+11 -6.987e+10 -5.415e+11 -6.788e+10 -5.482e+11 -6.524e+10 -5.512e+11 -6.199e+10 -5.502e+11 -5.817e+10 -5.452e+11 -5.382e+10 -5.360e+11 -4.903e+10 -5.229e+11 -4.387e+10 -5.057e+11 -3.841e+10 -4.849e+11 -3.276e+10 -4.605e+11 -2.702e+10 -4.331e+11 -2.130e+10 -4.029e+11 -1.570e+10 -3.704e+11 -1.034e+10 -3.363e+11 -5.305e+09 -3.011e+11 -7.174e+08 -2.653e+11 3.342e+09 -2.298e+11 6.792e+09 -1.950e+11 9.563e+09 -1.617e+11 1.161e+10 -1.305e+11 1.290e+10 -1.019e+11 1.344e+10 -7.644e+10 1.326e+10 -5.450e+10 1.243e+10 -3.638e+10 1.111e+10 -2.225e+10 9.586e+09 -1.204e+10 8.362e+09 -5.301e+09 8.157e+09 -8.722e+08 9.404e+09 3.163e+09 1.179e+10 8.389e+09 1.470e+10 1.522e+10 1.764e+10 2.330e+10 2.027e+10 3.192e+10 2.233e+10 4.025e+10 2.361e+10 4.745e+10 2.398e+10 5.271e+10 2.332e+10 5.533e+10 2.161e+10 5.480e+10 1.889e+10 5.089e+10 1.534e+10 4.372e+10 1.122e+10 3.387e+10 6.988e+09 2.250e+10 3.237e+09 1.142e+10 7.630e+08 3.254e+09 -6.440e+08 -1.436e+09 -4.020e+09 -1.079e+10 -1.254e+10 -3.677e+10 -2.801e+10 -8.650e+10 -5.254e+10 -1.683e+11 -8.864e+10 -2.923e+11 -1.392e+11 -4.700e+11 -2.072e+11 -7.146e+11 -2.906e+11 -1.021e+12 -4.029e+11 -1.439e+12 -5.443e+11 -1.974e+12 -7.195e+11 -2.646e+12 -9.337e+11 -3.480e+12 -1.192e+12 -4.499e+12 -1.502e+12 -5.731e+12 -1.869e+12 -7.207e+12 -2.298e+12 -8.956e+12 -2.800e+12 -1.101e+13 -3.380e+12 -1.342e+13 -4.047e+12 -1.620e+13 -4.808e+12 -1.941e+13 -5.674e+12 -2.308e+13 -6.652e+12 -2.725e+13 -7.752e+12 -3.197e+13 -8.984e+12 -3.729e+13 -1.036e+13 -4.322e+13 -1.188e+13 -4.985e+13 -1.356e+13 -5.720e+13 -1.541e+13 -6.531e+13 -1.745e+13 -7.424e+13 -1.966e+13 -8.402e+13 -2.206e+13 -9.469e+13 -2.467e+13 -1.063e+14 -2.749e+13 -1.189e+14 -3.053e+13 -1.325e+14 -3.378e+13 -1.470e+14 -3.726e+13 -1.626e+14 -4.097e+13 -1.793e+14 -4.493e+13 -1.970e+14 -4.911e+13 -2.158e+14 -5.352e+13 -2.357e+14 -5.817e+13 -2.566e+14 -6.306e+13 -2.786e+14 -6.817e+13 -3.016e+14 -7.349e+13 -3.256e+14 -7.903e+13 -3.505e+14 -8.477e+13 -3.764e+14 -9.070e+13 -4.031e+14 -9.681e+13 -4.307e+14 -1.031e+14 -4.589e+14 -1.094e+14 -4.879e+14 -1.160e+14 -5.174e+14 -1.227e+14 -5.475e+14 -1.294e+14 -5.779e+14 -1.362e+14 -6.087e+14 -1.430e+14 -6.398e+14 -1.499e+14 -6.708e+14 -1.567e+14 -7.020e+14 -1.635e+14 -7.330e+14 -1.703e+14 -7.637e+14 -1.770e+14 -7.941e+14 -1.835e+14 -8.240e+14 -1.900e+14 -8.534e+14 -1.963e+14 -8.820e+14 -2.023e+14 -9.098e+14 -2.082e+14 -9.366e+14 -2.139e+14 -9.623e+14 -2.193e+14 -9.868e+14 -2.243e+14 -1.010e+15 -2.292e+14 -1.031e+15 -2.336e+14 -1.052e+15 -2.380e+14 -1.071e+15 -2.420e+14 -1.087e+15 -2.456e+14 -1.102e+15 -2.489e+14 -1.115e+15 -2.517e+14 -1.126e+15 -2.541e+14 -1.135e+15 -2.561e+14 -1.142e+15 -2.576e+14 -1.147e+15 -2.587e+14 -1.150e+15 -2.593e+14 -1.150e+15 -2.594e+14 -1.149e+15 -2.591e+14 -1.145e+15 -2.583e+14 -1.139e+15 -2.570e+14 -1.132e+15 -2.552e+14 -1.122e+15 -2.531e+14 -1.109e+15 -2.503e+14 -1.096e+15 -2.473e+14 -1.080e+15 -2.438e+14 -1.062e+15 -2.398e+14 -1.043e+15 -2.355e+14 -1.023e+15 -2.307e+14 -9.999e+14 -2.257e+14 -9.762e+14 -2.203e+14 -9.511e+14 -2.146e+14 -9.249e+14 -2.086e+14 -8.977e+14 -2.024e+14 -8.695e+14 -1.960e+14 -8.405e+14 -1.894e+14 -8.109e+14 -1.826e+14 -7.807e+14 -1.757e+14 -7.500e+14 -1.687e+14 -7.192e+14 -1.616e+14 -6.881e+14 -1.545e+14 -6.570e+14 -1.474e+14 -6.259e+14 -1.404e+14 -5.950e+14 -1.333e+14 -5.644e+14 -1.264e+14 -5.341e+14 -1.195e+14 -5.043e+14 -1.127e+14 -4.752e+14 -1.061e+14 -4.467e+14 -9.966e+13 -4.190e+14 -9.338e+13 -3.919e+14 -8.728e+13 -3.658e+14 -8.137e+13 -3.406e+14 -7.566e+13 -3.162e+14 -7.017e+13 -2.928e+14 -6.490e+13 -2.704e+14 -5.986e+13 -2.489e+14 -5.506e+13 -2.286e+14 -5.049e+13 -2.092e+14 -4.616e+13 -1.910e+14 -4.206e+13 -1.738e+14 -3.821e+13 -1.576e+14 -3.460e+13 -1.425e+14 -3.122e+13 -1.284e+14 -2.807e+13 -1.152e+14 -2.514e+13 -1.030e+14 -2.243e+13 -9.179e+13 -1.993e+13 -8.145e+13 -1.764e+13 -7.199e+13 -1.553e+13 -6.335e+13 -1.362e+13 -5.551e+13 -1.189e+13 -4.841e+13 -1.032e+13 -4.201e+13 -8.912e+12 -3.629e+13 -7.653e+12 -3.117e+13 -6.533e+12 -2.662e+13 -5.542e+12 -2.260e+13 -4.669e+12 -1.908e+13 -3.906e+12 -1.600e+13 -3.245e+12 -1.332e+13 -2.672e+12 -1.100e+13 -2.182e+12 -9.019e+12 -1.766e+12 -7.330e+12 -1.414e+12 -5.902e+12 -1.119e+12 -4.704e+12 -8.761e+11 -3.709e+12 -6.765e+11 -2.889e+12 -5.147e+11 -2.221e+12 -3.853e+11 -1.683e+12 -2.830e+11 -1.254e+12 -2.037e+11 -9.171e+11 -1.430e+11 -6.570e+11 -9.767e+10 -4.592e+11 -6.449e+10 -3.119e+11 -4.008e+10 -2.007e+11 -2.419e+10 -1.266e+11 -1.370e+10 -7.585e+10 -7.133e+09 -4.264e+10 -3.294e+09 -2.199e+10 -1.262e+09 -1.005e+10 -3.393e+08 -3.812e+09 -2.471e+07 -1.039e+09 2.232e+07 -1.268e+08 1.414e+07 3.356e+07 1.740e+07 1.281e+08 -1.302e+07 1.429e+08 -5.359e+07 6.192e+07 -1.482e+08 -7.133e+07 -4.829e+08 -5.297e+08 -1.189e+09 -1.769e+09 -2.385e+09 -4.203e+09 -4.186e+09 -8.226e+09 -6.680e+09 -1.417e+10 -9.938e+09 -2.229e+10 -1.400e+10 -3.280e+10 -1.887e+10 -4.575e+10 -2.453e+10 -6.112e+10 -3.092e+10 -7.883e+10 -3.796e+10 -9.860e+10 -4.554e+10 -1.202e+11 -5.354e+10 -1.432e+11 -6.179e+10 -1.671e+11 -7.014e+10 -1.916e+11 -7.842e+10 -2.161e+11 -8.646e+10 -2.400e+11 -9.409e+10 -2.628e+11 -1.012e+11 -2.842e+11 -1.075e+11 -3.035e+11 -1.130e+11 -3.206e+11 -1.176e+11 -3.349e+11 -1.211e+11 -3.462e+11 -1.235e+11 -3.543e+11 -1.248e+11 -3.590e+11 -1.249e+11 -3.604e+11 -1.238e+11 -3.583e+11 -1.217e+11 -3.529e+11 -1.184e+11 -3.444e+11 -1.143e+11 -3.329e+11 -1.092e+11 -3.187e+11 -1.034e+11 -3.022e+11 -9.688e+10 -2.837e+11 -8.990e+10 -2.636e+11 -8.255e+10 -2.423e+11 -7.496e+10 -2.202e+11 -6.728e+10 -1.977e+11 -5.963e+10 -1.752e+11 -5.214e+10 -1.530e+11 -4.491e+10 -1.316e+11 -3.806e+10 -1.112e+11 -3.166e+10 -9.210e+10 -2.578e+10 -7.454e+10 -2.048e+10 -5.870e+10 -1.580e+10 -4.472e+10 -1.175e+10 -3.269e+10 -8.347e+09 -2.263e+10 -5.577e+09 -1.455e+10 -3.415e+09 -8.386e+09 -1.826e+09 -4.038e+09 -7.688e+08 -1.379e+09 -2.157e+08 -1.590e+08 -4.970e+07 4.521e+08 1.258e+08 1.777e+09 5.562e+08 4.005e+09 1.185e+09 6.909e+09 1.943e+09 1.026e+10 2.765e+09 1.383e+10 3.591e+09 1.742e+10 4.365e+09 2.082e+10 5.043e+09 2.388e+10 5.585e+09 2.645e+10 5.961e+09 2.841e+10 6.152e+09 2.969e+10 6.149e+09 3.022e+10 5.953e+09 3.000e+10 5.573e+09 2.902e+10 5.032e+09 2.736e+10 4.361e+09 2.509e+10 3.597e+09 2.233e+10 2.781e+09 1.920e+10 1.962e+09 1.585e+10 1.187e+09 1.244e+10 5.069e+08 9.140e+09 -2.888e+07 6.137e+09 -3.789e+08 3.604e+09 -5.233e+08 1.709e+09 -5.434e+08 5.633e+08 -7.915e+08 -1.619e+08 -1.525e+09 -1.326e+09 0.005 -54.470 -53.375 -52.280 -51.185 -50.091 -49.011 -48.042 -47.173 -46.395 -45.701 -45.086 -44.544 -44.073 -43.668 -43.328 -43.051 -42.835 -42.679 -42.582 -42.546 -42.569 -42.653 -42.798 -43.006 -43.280 -43.622 -44.034 -44.522 -45.089 -45.742 -46.488 -47.336 -48.297 -49.383 -50.612 -52.006 -53.592 -55.406 -57.499 -59.938 -62.821 -66.290 -70.530 -75.470 -78.244 -75.634 -71.552 -67.654 -64.134 -61.023 -58.295 -55.899 -53.787 -51.915 -50.249 -48.761 -47.428 -46.230 -45.154 -44.188 -43.322 -42.548 -41.859 -41.250 -40.717 -40.256 -39.865 -39.540 -39.281 -39.086 -38.954 -38.886 -38.881 -38.940 -39.065 -39.256 -39.515 -39.845 -40.250 -40.732 -41.296 -41.947 -42.689 -43.530 -44.475 -45.529 -46.696 -47.976 -49.361 -50.826 -52.323 -53.769 -55.056 -56.068 -56.712 -56.911 -56.575 -55.639 -54.157 -52.323 -50.353 -48.400 -46.543 -44.813 -43.218 -41.754 -40.415 -39.192 -38.076 -37.059 -36.135 -35.298 -34.543 -33.865 -33.261 -32.729 -32.266 -31.871 -31.543 -31.281 -31.086 -30.958 -30.898 -30.909 -30.992 -31.152 -31.393 -31.720 -32.140 -32.663 -33.300 -34.064 -34.974 -36.055 -37.336 -38.860 -40.676 -42.835 -45.333 -47.891 -49.582 -49.614 -48.725 -47.984 -47.926 -48.885 -51.459 -56.078 -52.151 -45.261 -40.355 -36.624 -33.575 -30.976 -28.702 -26.675 -24.843 -23.170 -21.631 -20.207 -18.882 -17.644 -16.484 -15.395 -14.368 -13.400 -12.485 -11.620 -10.801 -10.025 -9.289 -8.592 -7.931 -7.304 -6.710 -6.147 -5.615 -5.111 -4.635 -4.187 -3.764 -3.367 -2.994 -2.645 -2.320 -2.018 -1.738 -1.480 -1.244 -1.029 -0.836 -0.662 -0.510 -0.377 -0.265 -0.172 -0.100 -0.047 -0.014 0.000 -0.006 -0.031 -0.075 -0.139 -0.222 -0.326 -0.449 -0.592 -0.756 -0.940 -1.145 -1.371 -1.619 -1.888 -2.179 -2.492 -2.829 -3.189 -3.573 -3.981 -4.415 -4.876 -5.363 -5.879 -6.423 -6.998 -7.604 -8.243 -8.917 -9.627 -10.376 -11.166 -11.999 -12.879 -13.810 -14.794 -15.838 -16.947 -18.128 -19.389 -20.741 -22.196 -23.773 -25.491 -27.382 -29.487 -31.866 -34.613 -37.876 -41.887 -46.778 -50.225 -48.493 -46.138 -44.735 -44.109 -44.060 -44.442 -45.097 -45.744 -45.936 -45.303 -43.945 -42.284 -40.647 -39.168 -37.881 -36.779 -35.845 -35.059 -34.407 -33.873 -33.447 -33.120 -32.884 -32.733 -32.662 -32.668 -32.748 -32.901 -33.124 -33.417 -33.781 -34.216 -34.723 -35.304 -35.961 -36.699 -37.521 -38.433 -39.440 -40.551 -41.773 -43.119 -44.599 -46.227 -48.017 -49.983 -52.127 -54.436 -56.848 -59.214 -61.227 -62.482 -62.657 -61.751 -60.082 -58.062 -55.989 -54.018 -52.212 -50.587 -49.138 -47.852 -46.715 -45.714 -44.836 -44.070 -43.408 -42.842 -42.367 -41.976 -41.667 -41.435 -41.278 -41.194 -41.182 -41.240 -41.370 -41.571 -41.844 -42.191 -42.615 -43.119 -43.706 -44.382 -45.152 -46.024 -47.004 -48.102 -49.326 -50.680 -52.161 -53.744 -55.364 -56.887 -58.115 -58.885 -59.207 -59.274 -59.324 -59.543 -60.076 -61.064 -62.711 -65.395 -69.417 -71.386 -66.022 -61.268 -57.840 -55.207 -53.084 -51.318 -49.817 -48.526 -47.405 -46.427 -45.572 -44.825 -44.175 -43.611 -43.128 -42.718 -42.378 -42.104 -41.892 -41.741 -41.648 -41.611 -41.631 -41.705 -41.835 -42.019 -42.259 -42.555 -42.907 -43.319 -43.791 -44.326 -44.927 -45.598 -46.343 -47.168 -48.079 -49.084 -50.193 -51.317 -52.441 -53.565 -54.688 0.03 -18.873 -18.5006 -18.1319 -17.7669 -17.4057 -17.0481 -16.6943 -16.3441 -15.9977 -15.655 -15.316 -14.9807 -14.6491 -14.3213 -13.9971 -13.6766 -13.3599 -13.0469 -12.7376 -12.4319 -12.13 -11.8319 -11.5374 -11.2466 -10.9596 -10.6762 -10.3966 -10.1206 -9.8484 -9.5799 -9.3151 -9.0541 -8.7967 -8.543 -8.2931 -8.0468 -7.8043 -7.5655 -7.3304 -7.099 -6.8713 -6.6473 -6.427 -6.2105 -5.9976 -5.7885 -5.583 -5.3813 -5.1833 -4.989 -4.7984 -4.6116 -4.4284 -4.249 -4.0732 -3.9012 -3.7329 -3.5682 -3.4073 -3.2501 -3.0967 -2.9469 -2.8008 -2.6585 -2.5198 -2.3849 -2.2537 -2.1262 -2.0024 -1.8823 -1.7659 -1.6533 -1.5443 -1.4391 -1.3375 -1.2397 -1.1456 -1.0552 -0.9685 -0.88552 -0.80625 -0.73068 -0.65883 -0.59069 -0.52626 -0.46554 -0.40853 -0.35523 -0.30565 -0.25977 -0.2176 -0.17914 -0.1444 -0.11336 -0.086035 -0.06242 -0.042515 -0.026321 -0.013837 -0.0050631 0 0.0013526 -0.0010052 -0.0070735 -0.016852 -0.030341 -0.047541 -0.068451 -0.093071 -0.1214 -0.15344 -0.1892 -0.22866 -0.27183 -0.31871 -0.36931 -0.42361 -0.48163 -0.54335 -0.60879 -0.67793 -0.75079 -0.82735 -0.90763 -0.99162 -1.0793 -1.1707 -1.2658 -1.3647 -1.4672 -1.5735 -1.6834 -1.7971 -1.9145 -2.0356 -2.1604 -2.2889 -2.4211 -2.557 -2.6967 -2.84 -2.9871 -3.1379 -3.2924 -3.4506 -3.6125 -3.7781 -3.9474 -4.1205 -4.2972 -4.4777 -4.6618 -4.8497 -5.0413 -5.2366 -5.4356 -5.6383 -5.8448 -6.0549 -6.2688 -6.4863 -6.7076 -6.9326 -7.1613 -7.3937 -7.6298 -7.8696 -8.1132 -8.3604 -8.6114 -8.866 -9.1244 -9.3865 -9.6523 -9.9218 -10.195 -10.472 -10.7526 -11.037 -11.325 -11.6168 -11.9123 -12.2115 -12.5144 -12.821 -13.1313 -13.4453 -13.7631 -14.0845 -14.4097 -14.7386 -15.0712 -15.4075 -15.7475 -16.0912 -16.4386 -16.7898 -17.1446 -17.5032 -17.8654 -18.2314 1.0 46324.29 EW5 HH 37.8 40.37 0.050 1.005e+08 -1.192e+08 7.669e+07 -8.643e+07 5.733e+07 -6.026e+07 4.173e+07 -3.984e+07 2.937e+07 -2.442e+07 1.982e+07 -1.333e+07 1.270e+07 -5.865e+06 7.764e+06 -1.301e+06 4.803e+06 1.351e+06 3.356e+06 3.543e+06 2.425e+06 6.680e+06 1.050e+06 1.124e+07 -1.216e+06 1.710e+07 -4.542e+06 2.403e+07 -9.002e+06 3.181e+07 -1.471e+07 4.028e+07 -2.172e+07 4.929e+07 -3.015e+07 5.871e+07 -4.014e+07 6.847e+07 -5.187e+07 7.852e+07 -6.551e+07 8.882e+07 -8.132e+07 9.936e+07 -9.957e+07 1.101e+08 -1.205e+08 1.211e+08 -1.445e+08 1.323e+08 -1.720e+08 1.438e+08 -2.032e+08 1.554e+08 -2.385e+08 1.671e+08 -2.785e+08 1.791e+08 -3.233e+08 1.910e+08 -3.735e+08 2.030e+08 -4.293e+08 2.150e+08 -4.911e+08 2.268e+08 -5.591e+08 2.383e+08 -6.336e+08 2.495e+08 -7.147e+08 2.601e+08 -8.025e+08 2.701e+08 -8.971e+08 2.792e+08 -9.983e+08 2.873e+08 -1.106e+09 2.941e+08 -1.220e+09 2.994e+08 -1.339e+09 3.030e+08 -1.464e+09 3.046e+08 -1.593e+09 3.039e+08 -1.725e+09 3.006e+08 -1.861e+09 2.945e+08 -1.998e+09 2.852e+08 -2.135e+09 2.724e+08 -2.272e+09 2.560e+08 -2.406e+09 2.357e+08 -2.537e+09 2.114e+08 -2.662e+09 1.829e+08 -2.780e+09 1.502e+08 -2.890e+09 1.134e+08 -2.990e+09 7.256e+07 -3.079e+09 2.798e+07 -3.154e+09 -2.006e+07 -3.215e+09 -7.103e+07 -3.261e+09 -1.244e+08 -3.290e+09 -1.797e+08 -3.303e+09 -2.360e+08 -3.297e+09 -2.927e+08 -3.274e+09 -3.488e+08 -3.233e+09 -4.035e+08 -3.173e+09 -4.559e+08 -3.096e+09 -5.052e+08 -3.003e+09 -5.503e+08 -2.894e+09 -5.906e+08 -2.770e+09 -6.252e+08 -2.634e+09 -6.535e+08 -2.486e+09 -6.751e+08 -2.329e+09 -6.895e+08 -2.164e+09 -6.966e+08 -1.994e+09 -6.961e+08 -1.820e+09 -6.882e+08 -1.645e+09 -6.730e+08 -1.471e+09 -6.509e+08 -1.299e+09 -6.223e+08 -1.133e+09 -5.880e+08 -9.724e+08 -5.485e+08 -8.204e+08 -5.048e+08 -6.782e+08 -4.577e+08 -5.473e+08 -4.084e+08 -4.288e+08 -3.579e+08 -3.237e+08 -3.073e+08 -2.327e+08 -2.579e+08 -1.563e+08 -2.109e+08 -9.466e+07 -1.677e+08 -4.712e+07 -1.300e+08 -1.202e+07 -9.920e+07 1.418e+07 -7.669e+07 3.765e+07 -6.230e+07 6.571e+07 -5.310e+07 1.038e+08 -4.430e+07 1.546e+08 -3.130e+07 2.184e+08 -1.089e+07 2.947e+08 1.897e+07 3.825e+08 5.957e+07 4.807e+08 1.118e+08 5.878e+08 1.762e+08 7.024e+08 2.531e+08 8.233e+08 3.429e+08 9.487e+08 4.454e+08 1.077e+09 5.602e+08 1.206e+09 6.872e+08 1.335e+09 8.255e+08 1.462e+09 9.744e+08 1.584e+09 1.133e+09 1.701e+09 1.300e+09 1.810e+09 1.474e+09 1.911e+09 1.653e+09 2.002e+09 1.836e+09 2.081e+09 2.020e+09 2.147e+09 2.204e+09 2.200e+09 2.386e+09 2.238e+09 2.564e+09 2.262e+09 2.734e+09 2.270e+09 2.895e+09 2.263e+09 3.046e+09 2.241e+09 3.183e+09 2.204e+09 3.305e+09 2.153e+09 3.410e+09 2.088e+09 3.497e+09 2.011e+09 3.564e+09 1.923e+09 3.610e+09 1.825e+09 3.636e+09 1.718e+09 3.639e+09 1.605e+09 3.621e+09 1.485e+09 3.582e+09 1.362e+09 3.522e+09 1.237e+09 3.442e+09 1.111e+09 3.343e+09 9.852e+08 3.227e+09 8.621e+08 3.095e+09 7.425e+08 2.950e+09 6.275e+08 2.793e+09 5.185e+08 2.627e+09 4.161e+08 2.454e+09 3.212e+08 2.275e+09 2.344e+08 2.094e+09 1.563e+08 1.912e+09 8.702e+07 1.732e+09 2.675e+07 1.556e+09 -2.469e+07 1.385e+09 -6.743e+07 1.221e+09 -1.018e+08 1.066e+09 -1.281e+08 9.196e+08 -1.471e+08 7.842e+08 -1.593e+08 6.602e+08 -1.655e+08 5.481e+08 -1.666e+08 4.481e+08 -1.632e+08 3.604e+08 -1.564e+08 2.844e+08 -1.471e+08 2.197e+08 -1.360e+08 1.657e+08 -1.240e+08 1.213e+08 -1.117e+08 8.552e+07 -9.966e+07 5.711e+07 -8.821e+07 3.487e+07 -7.751e+07 1.764e+07 -6.754e+07 4.442e+06 -5.813e+07 -5.531e+06 -4.908e+07 -1.282e+07 -4.025e+07 -1.776e+07 -3.157e+07 -2.055e+07 -2.315e+07 -2.134e+07 -1.525e+07 -2.038e+07 -8.189e+06 -1.803e+07 -2.256e+06 -1.492e+07 2.672e+06 -1.182e+07 7.617e+06 -9.264e+06 1.456e+07 -6.764e+06 2.561e+07 -2.556e+06 4.223e+07 5.705e+06 6.529e+07 2.031e+07 9.527e+07 4.338e+07 1.325e+08 7.696e+07 1.771e+08 1.229e+08 2.288e+08 1.830e+08 2.873e+08 2.587e+08 3.519e+08 3.513e+08 4.217e+08 4.615e+08 4.958e+08 5.898e+08 5.726e+08 7.362e+08 6.507e+08 9.002e+08 7.286e+08 1.081e+09 8.044e+08 1.277e+09 8.763e+08 1.485e+09 9.426e+08 1.705e+09 1.001e+09 1.932e+09 1.051e+09 2.164e+09 1.090e+09 2.396e+09 1.117e+09 2.626e+09 1.130e+09 2.849e+09 1.128e+09 3.061e+09 1.112e+09 3.259e+09 1.079e+09 3.437e+09 1.031e+09 3.593e+09 9.669e+08 3.724e+09 8.875e+08 3.826e+09 7.936e+08 3.897e+09 6.862e+08 3.936e+09 5.669e+08 3.940e+09 4.375e+08 3.909e+09 2.998e+08 3.844e+09 1.562e+08 3.745e+09 8.967e+06 3.615e+09 -1.394e+08 3.455e+09 -2.863e+08 3.269e+09 -4.297e+08 3.061e+09 -5.674e+08 2.836e+09 -6.978e+08 2.599e+09 -8.201e+08 2.355e+09 -9.344e+08 2.109e+09 -1.042e+09 1.868e+09 -1.145e+09 1.635e+09 -1.248e+09 1.412e+09 -1.355e+09 1.202e+09 -1.475e+09 1.001e+09 -1.611e+09 8.066e+08 -1.771e+09 6.114e+08 -1.958e+09 4.077e+08 -2.173e+09 1.875e+08 -2.415e+09 -5.606e+07 -2.682e+09 -3.283e+08 -2.966e+09 -6.317e+08 -3.263e+09 -9.658e+08 -3.563e+09 -1.328e+09 -3.857e+09 -1.713e+09 -4.137e+09 -2.112e+09 -4.392e+09 -2.516e+09 -4.614e+09 -2.914e+09 -4.792e+09 -3.291e+09 -4.918e+09 -3.636e+09 -4.985e+09 -3.934e+09 -4.987e+09 -4.172e+09 -4.919e+09 -4.338e+09 -4.778e+09 -4.421e+09 -4.565e+09 -4.414e+09 -4.280e+09 -4.311e+09 -3.930e+09 -4.111e+09 -3.521e+09 -3.817e+09 -3.064e+09 -3.436e+09 -2.574e+09 -2.981e+09 -2.068e+09 -2.471e+09 -1.565e+09 -1.930e+09 -1.089e+09 -1.387e+09 -6.662e+08 -8.808e+08 -3.256e+08 -4.519e+08 -9.887e+07 -1.493e+08 -4.922e+06 -1.622e+07 1.231e+08 1.417e+08 4.462e+08 5.582e+08 1.026e+09 1.342e+09 1.903e+09 2.563e+09 3.112e+09 4.290e+09 4.691e+09 6.597e+09 6.677e+09 9.556e+09 9.103e+09 1.323e+10 1.200e+10 1.770e+10 1.539e+10 2.302e+10 1.931e+10 2.925e+10 2.378e+10 3.645e+10 2.880e+10 4.465e+10 3.439e+10 5.390e+10 4.053e+10 6.421e+10 4.725e+10 7.560e+10 5.450e+10 8.807e+10 6.228e+10 1.016e+11 7.056e+10 1.162e+11 7.929e+10 1.317e+11 8.844e+10 1.482e+11 9.794e+10 1.656e+11 1.077e+11 1.837e+11 1.178e+11 2.025e+11 1.279e+11 2.219e+11 1.382e+11 2.416e+11 1.484e+11 2.616e+11 1.585e+11 2.817e+11 1.684e+11 3.017e+11 1.780e+11 3.215e+11 1.873e+11 3.408e+11 1.960e+11 3.596e+11 2.041e+11 3.775e+11 2.115e+11 3.944e+11 2.182e+11 4.101e+11 2.241e+11 4.245e+11 2.290e+11 4.374e+11 2.329e+11 4.486e+11 2.359e+11 4.579e+11 2.377e+11 4.654e+11 2.385e+11 4.709e+11 2.382e+11 4.743e+11 2.367e+11 4.755e+11 2.342e+11 4.746e+11 2.306e+11 4.715e+11 2.259e+11 4.663e+11 2.203e+11 4.590e+11 2.138e+11 4.496e+11 2.063e+11 4.384e+11 1.920e+11 4.316e+11 1.867e+11 4.150e+11 1.773e+11 3.988e+11 1.675e+11 3.812e+11 1.573e+11 3.625e+11 1.468e+11 3.428e+11 1.361e+11 3.224e+11 1.255e+11 3.014e+11 1.148e+11 2.801e+11 1.043e+11 2.586e+11 9.408e+10 2.373e+11 8.416e+10 2.161e+11 7.466e+10 1.954e+11 6.564e+10 1.753e+11 5.715e+10 1.560e+11 4.925e+10 1.376e+11 4.197e+10 1.202e+11 3.534e+10 1.039e+11 2.937e+10 8.881e+10 2.406e+10 7.497e+10 1.940e+10 6.241e+10 1.538e+10 5.116e+10 1.196e+10 4.120e+10 9.107e+09 3.250e+10 6.775e+09 2.504e+10 4.912e+09 1.875e+10 3.462e+09 1.356e+10 2.369e+09 9.381e+09 1.571e+09 6.126e+09 1.010e+09 3.691e+09 6.296e+08 1.977e+09 3.782e+08 8.741e+08 2.209e+08 2.706e+08 1.665e+08 4.028e+06 2.538e+08 -2.084e+08 4.517e+08 -5.788e+08 7.405e+08 -1.093e+09 1.133e+09 -1.692e+09 1.647e+09 -2.325e+09 2.301e+09 -2.950e+09 3.113e+09 -3.535e+09 4.110e+09 -4.058e+09 5.317e+09 -4.498e+09 6.772e+09 -4.841e+09 8.520e+09 -5.067e+09 1.061e+10 -5.153e+09 1.309e+10 -5.069e+09 1.603e+10 -4.779e+09 1.947e+10 -4.239e+09 2.347e+10 -3.402e+09 2.806e+10 -2.218e+09 3.327e+10 -6.413e+08 3.911e+10 1.373e+09 4.559e+10 3.860e+09 5.266e+10 6.841e+09 6.030e+10 1.033e+10 6.845e+10 1.432e+10 7.701e+10 1.879e+10 8.589e+10 2.370e+10 9.498e+10 2.901e+10 1.041e+11 3.462e+10 1.132e+11 4.046e+10 1.220e+11 4.643e+10 1.303e+11 5.240e+10 1.381e+11 5.825e+10 1.452e+11 6.386e+10 1.512e+11 6.908e+10 1.562e+11 7.379e+10 1.600e+11 7.786e+10 1.623e+11 8.117e+10 1.632e+11 8.361e+10 1.626e+11 8.510e+10 1.603e+11 8.556e+10 1.565e+11 8.495e+10 1.510e+11 8.326e+10 1.441e+11 8.049e+10 1.358e+11 7.670e+10 1.261e+11 7.195e+10 1.155e+11 6.635e+10 1.039e+11 6.003e+10 9.181e+10 5.317e+10 7.936e+10 4.596e+10 6.687e+10 3.859e+10 5.465e+10 3.128e+10 4.301e+10 2.425e+10 3.225e+10 1.774e+10 2.268e+10 1.197e+10 1.456e+10 7.164e+09 8.121e+09 3.488e+09 3.560e+09 1.093e+09 1.014e+09 -3.221e+07 -1.859e+08 -8.673e+08 -1.954e+09 -2.787e+09 -5.523e+09 -6.194e+09 -1.090e+10 -1.093e+10 -1.784e+10 -1.679e+10 -2.602e+10 -2.352e+10 -3.505e+10 -3.082e+10 -4.445e+10 -3.829e+10 -5.368e+10 -4.553e+10 -6.221e+10 -5.209e+10 -6.944e+10 -5.752e+10 -7.484e+10 -6.139e+10 -7.788e+10 -6.329e+10 -7.817e+10 -6.291e+10 -7.542e+10 -6.006e+10 -6.954e+10 -5.470e+10 -6.069e+10 -4.701e+10 -4.934e+10 -3.743e+10 -3.631e+10 -2.671e+10 -2.292e+10 -1.600e+10 -1.099e+10 -6.877e+09 -2.948e+09 -1.371e+09 1.404e+09 2.466e+09 1.160e+10 1.306e+10 3.709e+10 3.740e+10 8.393e+10 8.028e+10 1.588e+11 1.473e+11 2.698e+11 2.452e+11 4.258e+11 3.813e+11 6.370e+11 5.642e+11 9.154e+11 8.034e+11 1.274e+12 1.109e+12 1.727e+12 1.494e+12 2.290e+12 1.970e+12 2.982e+12 2.552e+12 3.819e+12 3.255e+12 4.825e+12 4.094e+12 6.018e+12 5.088e+12 7.423e+12 6.254e+12 8.924e+12 7.494e+12 1.080e+13 9.041e+12 1.296e+13 1.082e+13 1.544e+13 1.285e+13 1.825e+13 1.515e+13 2.144e+13 1.775e+13 2.502e+13 2.067e+13 2.903e+13 2.393e+13 3.349e+13 2.756e+13 3.845e+13 3.157e+13 4.392e+13 3.599e+13 4.993e+13 4.083e+13 5.652e+13 4.613e+13 6.369e+13 5.189e+13 7.149e+13 5.815e+13 7.993e+13 6.490e+13 8.902e+13 7.216e+13 9.879e+13 7.995e+13 1.093e+14 8.827e+13 1.205e+14 9.714e+13 1.323e+14 1.065e+14 1.449e+14 1.165e+14 1.582e+14 1.270e+14 1.722e+14 1.380e+14 1.869e+14 1.495e+14 2.021e+14 1.616e+14 2.182e+14 1.742e+14 2.349e+14 1.872e+14 2.522e+14 2.006e+14 2.700e+14 2.144e+14 2.884e+14 2.288e+14 3.074e+14 2.434e+14 3.269e+14 2.585e+14 3.468e+14 2.738e+14 3.671e+14 2.894e+14 3.877e+14 3.051e+14 4.086e+14 3.210e+14 4.295e+14 3.370e+14 4.506e+14 3.528e+14 4.717e+14 3.688e+14 4.928e+14 3.846e+14 5.137e+14 4.003e+14 5.344e+14 4.158e+14 5.548e+14 4.310e+14 5.749e+14 4.458e+14 5.945e+14 4.603e+14 6.135e+14 4.742e+14 6.319e+14 4.876e+14 6.496e+14 5.005e+14 6.665e+14 5.126e+14 6.826e+14 5.241e+14 6.976e+14 5.349e+14 7.117e+14 5.448e+14 7.247e+14 5.539e+14 7.365e+14 5.622e+14 7.472e+14 5.694e+14 7.566e+14 5.757e+14 7.647e+14 5.811e+14 7.714e+14 5.854e+14 7.768e+14 5.887e+14 7.809e+14 5.910e+14 7.835e+14 5.921e+14 7.846e+14 5.923e+14 7.844e+14 5.913e+14 7.827e+14 5.894e+14 7.796e+14 5.863e+14 7.751e+14 5.823e+14 7.692e+14 5.772e+14 7.620e+14 5.711e+14 7.534e+14 5.642e+14 7.436e+14 5.563e+14 7.327e+14 5.476e+14 7.206e+14 5.382e+14 7.075e+14 5.280e+14 6.933e+14 5.170e+14 6.782e+14 5.053e+14 6.621e+14 4.929e+14 6.452e+14 4.800e+14 6.275e+14 4.665e+14 6.092e+14 4.526e+14 5.902e+14 4.383e+14 5.708e+14 4.236e+14 5.509e+14 4.086e+14 5.306e+14 3.934e+14 5.101e+14 3.780e+14 4.894e+14 3.626e+14 4.686e+14 3.470e+14 4.478e+14 3.315e+14 4.270e+14 3.159e+14 4.063e+14 3.006e+14 3.859e+14 2.854e+14 3.655e+14 2.704e+14 3.457e+14 2.556e+14 3.260e+14 2.411e+14 3.068e+14 2.269e+14 2.882e+14 2.132e+14 2.699e+14 1.997e+14 2.523e+14 1.868e+14 2.352e+14 1.742e+14 2.187e+14 1.620e+14 2.030e+14 1.505e+14 1.878e+14 1.393e+14 1.733e+14 1.286e+14 1.595e+14 1.185e+14 1.463e+14 1.089e+14 1.339e+14 9.979e+13 1.222e+14 9.118e+13 1.112e+14 8.308e+13 1.008e+14 7.547e+13 9.114e+13 6.835e+13 8.213e+13 6.171e+13 7.377e+13 5.555e+13 6.601e+13 4.984e+13 5.887e+13 4.455e+13 5.230e+13 3.969e+13 4.629e+13 3.522e+13 4.079e+13 3.114e+13 3.580e+13 2.743e+13 3.128e+13 2.405e+13 2.720e+13 2.099e+13 2.353e+13 1.824e+13 2.026e+13 1.577e+13 1.735e+13 1.357e+13 1.477e+13 1.160e+13 1.250e+13 9.874e+12 1.051e+13 8.348e+12 8.776e+12 7.013e+12 7.274e+12 5.850e+12 5.885e+12 4.766e+12 4.797e+12 3.914e+12 3.873e+12 3.185e+12 3.096e+12 2.568e+12 2.447e+12 2.049e+12 1.910e+12 1.616e+12 1.470e+12 1.258e+12 1.114e+12 9.659e+11 8.296e+11 7.292e+11 6.050e+11 5.402e+11 4.308e+11 3.916e+11 2.980e+11 2.765e+11 1.990e+11 1.891e+11 1.271e+11 1.244e+11 7.667e+10 7.773e+10 4.268e+10 4.535e+10 2.113e+10 2.398e+10 8.601e+09 1.084e+10 2.356e+09 3.687e+09 8.831e+07 6.479e+08 -6.496e+08 -2.093e+08 -2.159e+09 -1.414e+09 -3.999e+09 -3.263e+09 -5.580e+09 -5.185e+09 -6.571e+09 -6.787e+09 -6.838e+09 -7.839e+09 -6.400e+09 -8.253e+09 -5.386e+09 -8.044e+09 -3.996e+09 -7.312e+09 -2.462e+09 -6.214e+09 -1.010e+09 -4.969e+09 2.275e+08 -3.814e+09 1.330e+09 -2.958e+09 2.683e+09 -2.431e+09 4.794e+09 -1.974e+09 8.012e+09 -1.219e+09 1.249e+10 1.197e+08 1.825e+10 2.213e+09 2.526e+10 5.152e+09 3.343e+10 8.973e+09 4.261e+10 1.366e+10 5.264e+10 1.917e+10 6.333e+10 2.543e+10 0.005 -53.028 -52.003 -50.979 -49.954 -48.996 -48.137 -47.371 -46.689 -46.086 -45.557 -45.100 -44.711 -44.387 -44.128 -43.931 -43.796 -43.723 -43.712 -43.763 -43.877 -44.056 -44.303 -44.619 -45.007 -45.474 -46.022 -46.660 -47.394 -48.235 -49.194 -50.288 -51.537 -52.968 -54.617 -56.539 -58.812 -61.562 -65.014 -69.656 -76.742 -86.239 -78.867 -74.530 -71.607 -68.595 -65.356 -62.203 -59.331 -56.782 -54.530 -52.538 -50.767 -49.187 -47.770 -46.497 -45.352 -44.319 -43.390 -42.554 -41.805 -41.137 -40.544 -40.023 -39.570 -39.183 -38.860 -38.600 -38.400 -38.261 -38.183 -38.165 -38.209 -38.314 -38.484 -38.719 -39.022 -39.396 -39.846 -40.375 -40.989 -41.694 -42.499 -43.411 -44.443 -45.606 -46.913 -48.382 -50.027 -51.860 -53.887 -56.100 -58.476 -61.012 -63.788 -66.828 -68.241 -65.398 -60.913 -56.909 -53.598 -50.811 -48.417 -46.326 -44.480 -42.837 -41.365 -40.042 -38.848 -37.772 -36.801 -35.926 -35.140 -34.438 -33.815 -33.268 -32.792 -32.387 -32.051 -31.784 -31.585 -31.455 -31.393 -31.404 -31.488 -31.649 -31.892 -32.221 -32.645 -33.172 -33.812 -34.582 -35.498 -36.586 -37.878 -39.421 -41.277 -43.535 -46.298 -49.578 -52.754 -54.204 -53.530 -52.773 -53.242 -55.888 -58.824 -55.302 -47.549 -42.361 -38.450 -35.267 -32.559 -30.192 -28.082 -26.177 -24.439 -22.841 -21.363 -19.987 -18.703 -17.499 -16.368 -15.303 -14.298 -13.348 -12.450 -11.598 -10.791 -10.025 -9.299 -8.609 -7.955 -7.334 -6.745 -6.186 -5.657 -5.156 -4.683 -4.236 -3.814 -3.418 -3.045 -2.696 -2.370 -2.067 -1.786 -1.526 -1.288 -1.071 -0.874 -0.698 -0.542 -0.406 -0.289 -0.192 -0.115 -0.058 -0.019 0.000 -0.000 -0.020 -0.058 -0.115 -0.192 -0.289 -0.405 -0.541 -0.697 -0.873 -1.069 -1.287 -1.525 -1.785 -2.066 -2.369 -2.695 -3.045 -3.418 -3.815 -4.237 -4.686 -5.160 -5.663 -6.194 -6.755 -7.347 -7.971 -8.630 -9.325 -10.058 -10.832 -11.648 -12.512 -13.425 -14.392 -15.419 -16.512 -17.677 -18.924 -20.263 -21.711 -23.285 -25.011 -26.926 -29.084 -31.569 -34.532 -38.278 -43.626 -55.646 -55.949 -48.194 -44.257 -42.406 -41.509 -41.214 -41.360 -41.854 -42.605 -43.451 -44.091 -44.131 -43.398 -42.114 -40.640 -39.212 -37.928 -36.813 -35.860 -35.057 -34.389 -33.841 -33.403 -33.065 -32.820 -32.660 -32.583 -32.583 -32.657 -32.805 -33.024 -33.313 -33.674 -34.106 -34.613 -35.194 -35.854 -36.596 -37.425 -38.347 -39.369 -40.502 -41.756 -43.145 -44.689 -46.410 -48.336 -50.506 -52.965 -55.769 -58.965 -62.525 -66.073 -68.474 -68.475 -66.487 -63.714 -60.821 -58.099 -55.653 -53.496 -51.605 -49.952 -48.503 -47.235 -46.125 -45.155 -44.310 -43.579 -42.951 -42.420 -41.977 -41.619 -41.340 -41.138 -41.010 -40.954 -40.969 -41.055 -41.210 -41.437 -41.736 -42.109 -42.559 -43.089 -43.703 -44.408 -45.208 -46.114 -47.135 -48.282 -49.570 -51.015 -52.634 -54.440 -56.430 -58.557 -60.678 -62.519 -63.811 -64.582 -65.195 -66.104 -67.743 -70.522 -72.925 -69.616 -64.691 -60.712 -57.617 -55.112 -53.021 -51.236 -49.689 -48.335 -47.141 -46.085 -45.148 -44.316 -43.578 -42.925 -42.351 -41.848 -41.412 -41.040 -40.728 -40.474 -40.275 -40.129 -40.036 -39.993 -40.000 -40.057 -40.163 -40.317 -40.521 -40.775 -41.079 -41.434 -41.842 -42.303 -42.821 -43.398 -44.035 -44.737 -45.508 -46.353 -47.277 -48.253 -49.230 -50.206 0.03 -17.3688 -17.0262 -16.6871 -16.3514 -16.0191 -15.6902 -15.3647 -15.0427 -14.724 -14.4088 -14.0969 -13.7885 -13.4835 -13.1819 -12.8837 -12.5889 -12.2975 -12.0096 -11.725 -11.4439 -11.1662 -10.8919 -10.621 -10.3535 -10.0894 -9.8287 -9.5715 -9.3176 -9.0672 -8.8202 -8.5766 -8.3364 -8.0996 -7.8662 -7.6362 -7.4097 -7.1865 -6.9668 -6.7504 -6.5375 -6.328 -6.1219 -5.9193 -5.72 -5.5241 -5.3317 -5.1426 -4.957 -4.7748 -4.596 -4.4206 -4.2486 -4.08 -3.9149 -3.7531 -3.5948 -3.4399 -3.2884 -3.1403 -2.9956 -2.8543 -2.7164 -2.5819 -2.4509 -2.3233 -2.199 -2.0782 -1.9608 -1.8468 -1.7362 -1.6291 -1.5253 -1.4249 -1.328 -1.2345 -1.1444 -1.0576 -0.97435 -0.89447 -0.818 -0.74493 -0.67528 -0.60904 -0.54621 -0.48679 -0.43079 -0.37819 -0.32901 -0.28323 -0.24087 -0.20192 -0.16637 -0.13424 -0.10553 -0.080217 -0.05832 -0.039834 -0.024759 -0.013095 -0.004842 0 0.001431 -0.00054909 -0.0059402 -0.014742 -0.026955 -0.04258 -0.061615 -0.084061 -0.10992 -0.13919 -0.17187 -0.20796 -0.24746 -0.29037 -0.33669 -0.38643 -0.43957 -0.49613 -0.5561 -0.61947 -0.68626 -0.75646 -0.83008 -0.9071 -0.98753 -1.0714 -1.1586 -1.2493 -1.3434 -1.4409 -1.5418 -1.6461 -1.7538 -1.8649 -1.9795 -2.0974 -2.2188 -2.3436 -2.4718 -2.6034 -2.7384 -2.8768 -3.0186 -3.1639 -3.3125 -3.4646 -3.6201 -3.7789 -3.9412 -4.107 -4.2761 -4.4486 -4.6245 -4.8039 -4.9867 -5.1728 -5.3624 -5.5554 -5.7518 -5.9517 -6.1549 -6.3615 -6.5716 -6.785 -7.0019 -7.2222 -7.4459 -7.673 -7.9035 -8.1374 -8.3748 -8.6155 -8.8597 -9.1073 -9.3583 -9.6127 -9.8705 -10.1317 -10.3963 -10.6644 -10.9358 -11.2107 -11.4889 -11.7706 -12.0557 -12.3442 -12.6361 -12.9315 -13.2302 -13.5324 -13.8379 -14.1469 -14.4593 -14.7751 -15.0943 -15.4169 -15.7429 -16.0724 -16.4052 -16.7415 1.0 43505.68 EW5 HV 37.8 40.37 0.050 -4.906e+07 -1.667e+08 -2.702e+07 -1.260e+08 -1.139e+07 -9.223e+07 -1.106e+06 -6.469e+07 4.861e+06 -4.286e+07 7.526e+06 -2.623e+07 7.901e+06 -1.423e+07 7.033e+06 -6.242e+06 6.049e+06 -1.290e+06 5.856e+06 2.496e+06 6.276e+06 7.600e+06 6.111e+06 1.561e+07 4.135e+06 2.718e+07 -7.441e+05 4.263e+07 -9.582e+06 6.222e+07 -2.366e+07 8.637e+07 -4.409e+07 1.153e+08 -7.205e+07 1.491e+08 -1.088e+08 1.881e+08 -1.556e+08 2.325e+08 -2.134e+08 2.823e+08 -2.835e+08 3.376e+08 -3.668e+08 3.985e+08 -4.639e+08 4.650e+08 -5.757e+08 5.369e+08 -7.027e+08 6.143e+08 -8.452e+08 6.972e+08 -1.003e+09 7.852e+08 -1.178e+09 8.786e+08 -1.368e+09 9.768e+08 -1.574e+09 1.080e+09 -1.795e+09 1.187e+09 -2.032e+09 1.299e+09 -2.284e+09 1.413e+09 -2.551e+09 1.531e+09 -2.831e+09 1.651e+09 -3.125e+09 1.772e+09 -3.430e+09 1.892e+09 -3.747e+09 2.011e+09 -4.073e+09 2.128e+09 -4.406e+09 2.239e+09 -4.746e+09 2.345e+09 -5.089e+09 2.442e+09 -5.433e+09 2.529e+09 -5.775e+09 2.604e+09 -6.111e+09 2.665e+09 -6.438e+09 2.711e+09 -6.753e+09 2.739e+09 -7.051e+09 2.749e+09 -7.329e+09 2.740e+09 -7.581e+09 2.710e+09 -7.805e+09 2.660e+09 -7.996e+09 2.590e+09 -8.151e+09 2.500e+09 -8.268e+09 2.391e+09 -8.342e+09 2.265e+09 -8.373e+09 2.124e+09 -8.359e+09 1.970e+09 -8.299e+09 1.805e+09 -8.194e+09 1.632e+09 -8.046e+09 1.454e+09 -7.856e+09 1.274e+09 -7.625e+09 1.094e+09 -7.359e+09 9.167e+08 -7.059e+09 7.452e+08 -6.730e+09 5.813e+08 -6.377e+09 4.271e+08 -6.004e+09 2.842e+08 -5.617e+09 1.537e+08 -5.220e+09 3.681e+07 -4.818e+09 -6.622e+07 -4.415e+09 -1.552e+08 -4.016e+09 -2.301e+08 -3.625e+09 -2.911e+08 -3.245e+09 -3.389e+08 -2.879e+09 -3.742e+08 -2.530e+09 -3.976e+08 -2.200e+09 -4.102e+08 -1.891e+09 -4.130e+08 -1.604e+09 -4.069e+08 -1.339e+09 -3.931e+08 -1.099e+09 -3.726e+08 -8.839e+08 -3.465e+08 -6.928e+08 -3.159e+08 -5.265e+08 -2.822e+08 -3.847e+08 -2.465e+08 -2.667e+08 -2.101e+08 -1.721e+08 -1.747e+08 -9.930e+07 -1.421e+08 -4.580e+07 -1.146e+08 -6.967e+06 -9.472e+07 2.511e+07 -8.372e+07 6.005e+07 -8.004e+07 1.054e+08 -7.937e+07 1.650e+08 -7.691e+07 2.394e+08 -6.889e+07 3.280e+08 -5.276e+07 4.289e+08 -2.674e+07 5.405e+08 1.039e+07 6.603e+08 5.943e+07 7.859e+08 1.208e+08 9.151e+08 1.949e+08 1.045e+09 2.813e+08 1.173e+09 3.795e+08 1.297e+09 4.889e+08 1.415e+09 6.081e+08 1.523e+09 7.356e+08 1.620e+09 8.701e+08 1.705e+09 1.009e+09 1.775e+09 1.151e+09 1.830e+09 1.294e+09 1.869e+09 1.435e+09 1.892e+09 1.572e+09 1.898e+09 1.703e+09 1.888e+09 1.826e+09 1.863e+09 1.939e+09 1.823e+09 2.040e+09 1.770e+09 2.128e+09 1.705e+09 2.202e+09 1.630e+09 2.260e+09 1.547e+09 2.303e+09 1.456e+09 2.329e+09 1.360e+09 2.340e+09 1.260e+09 2.334e+09 1.158e+09 2.313e+09 1.055e+09 2.278e+09 9.520e+08 2.228e+09 8.506e+08 2.166e+09 7.516e+08 2.092e+09 6.556e+08 2.008e+09 5.635e+08 1.915e+09 4.757e+08 1.814e+09 3.926e+08 1.706e+09 3.147e+08 1.594e+09 2.422e+08 1.478e+09 1.752e+08 1.360e+09 1.142e+08 1.241e+09 5.906e+07 1.122e+09 9.993e+06 1.005e+09 -3.292e+07 8.916e+08 -6.972e+07 7.822e+08 -1.005e+08 6.783e+08 -1.255e+08 5.809e+08 -1.450e+08 4.908e+08 -1.595e+08 4.087e+08 -1.697e+08 3.351e+08 -1.764e+08 2.702e+08 -1.806e+08 2.136e+08 -1.834e+08 1.649e+08 -1.858e+08 1.230e+08 -1.884e+08 8.654e+07 -1.917e+08 5.406e+07 -1.955e+08 2.416e+07 -1.993e+08 -4.185e+06 -2.022e+08 -3.146e+07 -2.033e+08 -5.769e+07 -2.016e+08 -8.240e+07 -1.963e+08 -1.048e+08 -1.871e+08 -1.239e+08 -1.737e+08 -1.388e+08 -1.564e+08 -1.486e+08 -1.357e+08 -1.526e+08 -1.125e+08 -1.507e+08 -8.793e+07 -1.428e+08 -6.330e+07 -1.295e+08 -3.998e+07 -1.119e+08 -1.933e+07 -9.154e+07 -2.357e+06 -7.027e+07 1.058e+07 -5.035e+07 2.061e+07 -3.372e+07 3.112e+07 -2.048e+07 4.694e+07 -7.257e+06 7.171e+07 1.214e+07 1.067e+08 4.387e+07 1.515e+08 9.259e+07 2.055e+08 1.617e+08 2.674e+08 2.541e+08 3.361e+08 3.718e+08 4.099e+08 5.164e+08 4.871e+08 6.891e+08 5.661e+08 8.906e+08 6.449e+08 1.120e+09 7.218e+08 1.378e+09 7.949e+08 1.664e+09 8.623e+08 1.974e+09 9.224e+08 2.308e+09 9.735e+08 2.663e+09 1.014e+09 3.036e+09 1.042e+09 3.423e+09 1.057e+09 3.821e+09 1.057e+09 4.224e+09 1.040e+09 4.630e+09 1.005e+09 5.032e+09 9.520e+08 5.425e+09 8.785e+08 5.805e+09 7.838e+08 6.166e+09 6.672e+08 6.501e+09 5.276e+08 6.807e+09 3.648e+08 7.077e+09 1.786e+08 7.306e+09 -3.093e+07 7.490e+09 -2.631e+08 7.626e+09 -5.168e+08 7.710e+09 -7.906e+08 7.741e+09 -1.083e+09 7.717e+09 -1.391e+09 7.638e+09 -1.712e+09 7.507e+09 -2.044e+09 7.326e+09 -2.385e+09 7.098e+09 -2.732e+09 6.830e+09 -3.085e+09 6.526e+09 -3.442e+09 6.192e+09 -3.804e+09 5.835e+09 -4.174e+09 5.460e+09 -4.553e+09 5.071e+09 -4.946e+09 4.670e+09 -5.357e+09 4.260e+09 -5.789e+09 3.839e+09 -6.245e+09 3.403e+09 -6.727e+09 2.951e+09 -7.233e+09 2.476e+09 -7.762e+09 1.975e+09 -8.307e+09 1.445e+09 -8.858e+09 8.836e+08 -9.404e+09 2.920e+08 -9.934e+09 -3.261e+08 -1.043e+10 -9.643e+08 -1.088e+10 -1.615e+09 -1.127e+10 -2.266e+09 -1.159e+10 -2.904e+09 -1.182e+10 -3.516e+09 -1.194e+10 -4.086e+09 -1.196e+10 -4.599e+09 -1.186e+10 -5.040e+09 -1.164e+10 -5.395e+09 -1.129e+10 -5.651e+09 -1.082e+10 -5.800e+09 -1.023e+10 -5.832e+09 -9.529e+09 -5.745e+09 -8.728e+09 -5.538e+09 -7.841e+09 -5.215e+09 -6.886e+09 -4.785e+09 -5.885e+09 -4.259e+09 -4.862e+09 -3.658e+09 -3.849e+09 -3.004e+09 -2.875e+09 -2.327e+09 -1.979e+09 -1.662e+09 -1.201e+09 -1.050e+09 -5.850e+08 -5.380e+08 -1.790e+08 -1.788e+08 -1.139e+07 -2.093e+07 2.041e+08 1.583e+08 7.451e+08 6.306e+08 1.715e+09 1.521e+09 3.174e+09 2.909e+09 5.181e+09 4.873e+09 7.791e+09 7.496e+09 1.107e+10 1.086e+10 1.505e+10 1.506e+10 1.979e+10 2.015e+10 2.534e+10 2.623e+10 3.173e+10 3.337e+10 3.897e+10 4.163e+10 4.708e+10 5.106e+10 5.607e+10 6.169e+10 6.590e+10 7.355e+10 7.657e+10 8.667e+10 8.801e+10 1.010e+11 1.002e+11 1.166e+11 1.130e+11 1.333e+11 1.264e+11 1.511e+11 1.403e+11 1.699e+11 1.545e+11 1.896e+11 1.690e+11 2.101e+11 1.836e+11 2.313e+11 1.982e+11 2.529e+11 2.127e+11 2.748e+11 2.268e+11 2.968e+11 2.406e+11 3.187e+11 2.538e+11 3.403e+11 2.663e+11 3.615e+11 2.780e+11 3.819e+11 2.888e+11 4.015e+11 2.986e+11 4.199e+11 3.073e+11 4.371e+11 3.148e+11 4.529e+11 3.210e+11 4.670e+11 3.260e+11 4.794e+11 3.296e+11 4.899e+11 3.318e+11 4.984e+11 3.326e+11 5.048e+11 3.320e+11 5.091e+11 3.301e+11 5.112e+11 3.267e+11 5.111e+11 3.221e+11 5.088e+11 3.161e+11 5.043e+11 3.089e+11 4.976e+11 3.005e+11 4.889e+11 2.910e+11 4.781e+11 2.805e+11 4.655e+11 2.678e+11 4.536e+11 2.550e+11 4.390e+11 2.420e+11 4.213e+11 2.285e+11 4.023e+11 2.145e+11 3.822e+11 2.002e+11 3.610e+11 1.856e+11 3.392e+11 1.710e+11 3.168e+11 1.564e+11 2.940e+11 1.421e+11 2.711e+11 1.280e+11 2.483e+11 1.144e+11 2.257e+11 1.014e+11 2.037e+11 8.898e+10 1.823e+11 7.731e+10 1.618e+11 6.646e+10 1.422e+11 5.647e+10 1.238e+11 4.737e+10 1.066e+11 3.921e+10 9.067e+10 3.197e+10 7.615e+10 2.564e+10 6.302e+10 2.020e+10 5.133e+10 1.559e+10 4.105e+10 1.177e+10 3.214e+10 8.670e+09 2.456e+10 6.210e+09 1.823e+10 4.310e+09 1.305e+10 2.890e+09 8.938e+09 1.866e+09 5.772e+09 1.156e+09 3.437e+09 6.857e+08 1.816e+09 3.874e+08 7.900e+08 2.116e+08 2.383e+08 1.499e+08 -1.265e+06 2.203e+08 -1.908e+08 3.867e+08 -5.159e+08 6.335e+08 -9.586e+08 9.753e+08 -1.466e+09 1.431e+09 -1.995e+09 2.018e+09 -2.509e+09 2.760e+09 -2.986e+09 3.683e+09 -3.410e+09 4.818e+09 -3.765e+09 6.207e+09 -4.037e+09 7.899e+09 -4.208e+09 9.945e+09 -4.255e+09 1.240e+10 -4.148e+09 1.534e+10 -3.849e+09 1.880e+10 -3.318e+09 2.283e+10 -2.510e+09 2.749e+10 -1.381e+09 3.280e+10 1.098e+08 3.879e+10 1.999e+09 4.545e+10 4.317e+09 5.277e+10 7.078e+09 6.072e+10 1.029e+10 6.926e+10 1.396e+10 7.829e+10 1.804e+10 8.775e+10 2.251e+10 9.750e+10 2.732e+10 1.074e+11 3.239e+10 1.173e+11 3.764e+10 1.271e+11 4.297e+10 1.365e+11 4.827e+10 1.453e+11 5.342e+10 1.534e+11 5.829e+10 1.606e+11 6.274e+10 1.665e+11 6.664e+10 1.712e+11 6.986e+10 1.743e+11 7.229e+10 1.758e+11 7.382e+10 1.756e+11 7.437e+10 1.735e+11 7.387e+10 1.696e+11 7.229e+10 1.639e+11 6.964e+10 1.564e+11 6.595e+10 1.473e+11 6.130e+10 1.367e+11 5.579e+10 1.249e+11 4.958e+10 1.122e+11 4.284e+10 9.886e+10 3.579e+10 8.521e+10 2.867e+10 7.161e+10 2.171e+10 5.844e+10 1.516e+10 4.608e+10 9.268e+09 3.486e+10 4.246e+09 2.514e+10 2.469e+08 1.720e+10 -2.700e+09 1.121e+10 -4.813e+09 7.066e+09 -6.702e+09 4.099e+09 -9.310e+09 1.191e+09 -1.344e+10 -2.643e+09 -1.937e+10 -7.893e+09 -2.697e+10 -1.464e+10 -3.595e+10 -2.271e+10 -4.593e+10 -3.177e+10 -5.648e+10 -4.143e+10 -6.712e+10 -5.117e+10 -7.733e+10 -6.049e+10 -8.654e+10 -6.882e+10 -9.422e+10 -7.561e+10 -9.980e+10 -8.036e+10 -1.028e+11 -8.262e+10 -1.028e+11 -8.203e+10 -9.956e+10 -7.839e+10 -9.291e+10 -7.169e+10 -8.297e+10 -6.213e+10 -7.012e+10 -5.024e+10 -5.507e+10 -3.686e+10 -3.891e+10 -2.327e+10 -2.322e+10 -1.124e+10 -1.009e+10 -3.092e+09 -2.140e+09 1.115e+09 3.029e+09 1.056e+10 1.669e+10 3.442e+10 4.814e+10 7.841e+10 1.033e+11 1.487e+11 1.892e+11 2.527e+11 3.137e+11 3.985e+11 4.861e+11 5.957e+11 7.164e+11 8.551e+11 1.017e+12 1.189e+12 1.399e+12 1.609e+12 1.878e+12 2.132e+12 2.469e+12 2.772e+12 3.190e+12 3.546e+12 4.057e+12 4.473e+12 5.092e+12 5.573e+12 6.314e+12 6.864e+12 7.744e+12 8.100e+12 9.105e+12 9.788e+12 1.097e+13 1.173e+13 1.311e+13 1.396e+13 1.555e+13 1.647e+13 1.831e+13 1.932e+13 2.142e+13 2.251e+13 2.492e+13 2.607e+13 2.881e+13 3.002e+13 3.313e+13 3.440e+13 3.791e+13 3.922e+13 4.317e+13 4.449e+13 4.894e+13 5.026e+13 5.523e+13 5.651e+13 6.207e+13 6.328e+13 6.948e+13 7.060e+13 7.747e+13 7.845e+13 8.606e+13 8.685e+13 9.526e+13 9.584e+13 1.051e+14 1.054e+14 1.155e+14 1.156e+14 1.266e+14 1.263e+14 1.383e+14 1.375e+14 1.507e+14 1.494e+14 1.637e+14 1.618e+14 1.773e+14 1.749e+14 1.915e+14 1.884e+14 2.062e+14 2.024e+14 2.216e+14 2.169e+14 2.375e+14 2.320e+14 2.539e+14 2.474e+14 2.708e+14 2.634e+14 2.882e+14 2.798e+14 3.060e+14 2.965e+14 3.242e+14 3.135e+14 3.427e+14 3.307e+14 3.614e+14 3.482e+14 3.804e+14 3.658e+14 3.994e+14 3.835e+14 4.187e+14 4.011e+14 4.379e+14 4.187e+14 4.569e+14 4.361e+14 4.760e+14 4.535e+14 4.947e+14 4.704e+14 5.132e+14 4.871e+14 5.313e+14 5.033e+14 5.491e+14 5.190e+14 5.663e+14 5.342e+14 5.828e+14 5.486e+14 5.988e+14 5.624e+14 6.140e+14 5.754e+14 6.284e+14 5.876e+14 6.420e+14 5.989e+14 6.545e+14 6.091e+14 6.661e+14 6.184e+14 6.767e+14 6.266e+14 6.861e+14 6.337e+14 6.944e+14 6.397e+14 7.015e+14 6.445e+14 7.074e+14 6.483e+14 7.120e+14 6.507e+14 7.153e+14 6.520e+14 7.174e+14 6.521e+14 7.181e+14 6.510e+14 7.176e+14 6.487e+14 7.158e+14 6.453e+14 7.128e+14 6.407e+14 7.084e+14 6.351e+14 7.029e+14 6.283e+14 6.961e+14 6.205e+14 6.882e+14 6.118e+14 6.792e+14 6.021e+14 6.691e+14 5.914e+14 6.581e+14 5.800e+14 6.461e+14 5.678e+14 6.332e+14 5.549e+14 6.194e+14 5.412e+14 6.050e+14 5.268e+14 5.897e+14 5.120e+14 5.738e+14 4.967e+14 5.573e+14 4.809e+14 5.403e+14 4.648e+14 5.229e+14 4.483e+14 5.051e+14 4.316e+14 4.870e+14 4.147e+14 4.687e+14 3.976e+14 4.501e+14 3.805e+14 4.315e+14 3.634e+14 4.129e+14 3.463e+14 3.943e+14 3.293e+14 3.757e+14 3.125e+14 3.574e+14 2.959e+14 3.392e+14 2.795e+14 3.213e+14 2.634e+14 3.036e+14 2.477e+14 2.864e+14 2.324e+14 2.695e+14 2.174e+14 2.530e+14 2.030e+14 2.370e+14 1.889e+14 2.215e+14 1.755e+14 2.066e+14 1.625e+14 1.921e+14 1.502e+14 1.782e+14 1.383e+14 1.648e+14 1.270e+14 1.522e+14 1.164e+14 1.401e+14 1.063e+14 1.285e+14 9.677e+13 1.176e+14 8.786e+13 1.074e+14 7.951e+13 9.772e+13 7.172e+13 8.864e+13 6.448e+13 8.016e+13 5.777e+13 7.228e+13 5.159e+13 6.494e+13 4.590e+13 5.814e+13 4.068e+13 5.188e+13 3.591e+13 4.611e+13 3.157e+13 4.082e+13 2.765e+13 3.599e+13 2.410e+13 3.161e+13 2.091e+13 2.763e+13 1.806e+13 2.405e+13 1.551e+13 2.082e+13 1.326e+13 1.794e+13 1.126e+13 1.537e+13 9.511e+12 1.310e+13 7.980e+12 1.110e+13 6.651e+12 9.339e+12 5.501e+12 7.806e+12 4.360e+12 6.257e+12 3.545e+12 5.148e+12 2.855e+12 4.199e+12 2.275e+12 3.393e+12 1.793e+12 2.714e+12 1.395e+12 2.146e+12 1.069e+12 1.675e+12 8.069e+11 1.289e+12 5.975e+11 9.762e+11 4.331e+11 7.254e+11 3.061e+11 5.274e+11 2.098e+11 3.735e+11 1.385e+11 2.562e+11 8.718e+10 1.689e+11 5.154e+10 1.057e+11 2.789e+10 6.167e+10 1.321e+10 3.250e+10 4.942e+09 1.454e+10 1.065e+09 4.796e+09 -1.651e+08 7.250e+08 -6.173e+08 -5.058e+08 -1.759e+09 -2.513e+09 -2.988e+09 -5.513e+09 -3.889e+09 -8.680e+09 -4.252e+09 -1.144e+10 -4.020e+09 -1.343e+10 -3.238e+09 -1.451e+10 -2.026e+09 -1.467e+10 -5.436e+08 -1.401e+10 1.052e+09 -1.273e+10 2.637e+09 -1.108e+10 4.175e+09 -9.325e+09 5.758e+09 -7.645e+09 7.617e+09 -6.095e+09 1.005e+10 -4.542e+09 1.334e+10 -2.695e+09 1.764e+10 -2.169e+08 2.298e+10 3.173e+09 2.932e+10 7.672e+09 3.657e+10 1.339e+10 4.456e+10 2.035e+10 5.314e+10 2.852e+10 6.212e+10 3.781e+10 0.005 -52.433 -51.379 -50.324 -49.269 -48.283 -47.397 -46.603 -45.894 -45.264 -44.709 -44.223 -43.805 -43.450 -43.158 -42.927 -42.756 -42.643 -42.590 -42.595 -42.660 -42.786 -42.974 -43.227 -43.546 -43.936 -44.400 -44.944 -45.574 -46.299 -47.128 -48.075 -49.157 -50.398 -51.828 -53.497 -55.475 -57.877 -60.921 -65.084 -71.618 -80.515 -72.608 -68.100 -65.877 -64.762 -64.307 -64.203 -64.051 -63.353 -61.845 -59.774 -57.558 -55.447 -53.528 -51.814 -50.289 -48.933 -47.729 -46.658 -45.707 -44.865 -44.122 -43.471 -42.906 -42.422 -42.015 -41.683 -41.422 -41.232 -41.112 -41.060 -41.079 -41.167 -41.327 -41.561 -41.871 -42.260 -42.734 -43.296 -43.954 -44.713 -45.583 -46.574 -47.694 -48.955 -50.364 -51.923 -53.620 -55.418 -57.244 -59.010 -60.680 -62.360 -64.336 -66.797 -67.886 -64.922 -60.439 -56.500 -53.284 -50.600 -48.308 -46.314 -44.558 -42.998 -41.603 -40.350 -39.223 -38.208 -37.295 -36.476 -35.743 -35.093 -34.520 -34.022 -33.597 -33.242 -32.957 -32.743 -32.600 -32.528 -32.529 -32.606 -32.764 -33.005 -33.338 -33.769 -34.308 -34.969 -35.767 -36.725 -37.872 -39.247 -40.902 -42.909 -45.339 -48.156 -50.782 -51.844 -50.912 -49.528 -48.705 -48.745 -49.961 -53.177 -56.542 -53.349 -45.855 -40.874 -37.133 -34.090 -31.501 -29.236 -27.214 -25.386 -23.716 -22.178 -20.753 -19.425 -18.184 -17.020 -15.924 -14.892 -13.916 -12.994 -12.120 -11.292 -10.507 -9.761 -9.053 -8.381 -7.743 -7.137 -6.562 -6.017 -5.501 -5.012 -4.550 -4.113 -3.702 -3.314 -2.951 -2.610 -2.292 -1.996 -1.722 -1.469 -1.237 -1.026 -0.835 -0.664 -0.513 -0.382 -0.270 -0.178 -0.104 -0.051 -0.016 0.000 -0.003 -0.026 -0.067 -0.127 -0.206 -0.305 -0.423 -0.561 -0.719 -0.897 -1.095 -1.313 -1.553 -1.813 -2.096 -2.400 -2.726 -3.076 -3.449 -3.846 -4.269 -4.717 -5.191 -5.693 -6.223 -6.783 -7.373 -7.996 -8.653 -9.346 -10.077 -10.848 -11.662 -12.522 -13.431 -14.395 -15.417 -16.505 -17.664 -18.905 -20.238 -21.678 -23.243 -24.960 -26.864 -29.010 -31.481 -34.429 -38.157 -43.485 -55.481 -55.758 -47.973 -44.000 -42.108 -41.166 -40.820 -40.916 -41.373 -42.132 -43.102 -44.088 -44.710 -44.558 -43.595 -42.181 -40.685 -39.298 -38.083 -37.046 -36.174 -35.450 -34.859 -34.388 -34.024 -33.760 -33.588 -33.503 -33.500 -33.576 -33.729 -33.956 -34.258 -34.635 -35.086 -35.614 -36.220 -36.906 -37.676 -38.534 -39.484 -40.532 -41.683 -42.942 -44.317 -45.811 -47.427 -49.164 -51.017 -52.978 -55.041 -57.204 -59.434 -61.437 -62.291 -61.071 -58.474 -55.714 -53.221 -51.042 -49.139 -47.470 -46.000 -44.698 -43.544 -42.519 -41.610 -40.805 -40.094 -39.470 -38.927 -38.459 -38.062 -37.733 -37.467 -37.264 -37.120 -37.035 -37.007 -37.036 -37.120 -37.261 -37.458 -37.712 -38.023 -38.395 -38.827 -39.323 -39.886 -40.518 -41.226 -42.013 -42.887 -43.856 -44.929 -46.120 -47.443 -48.919 -50.575 -52.447 -54.585 -57.061 -59.984 -63.534 -68.008 -73.814 -79.525 -79.939 -79.090 -77.922 -73.994 -69.179 -65.054 -61.714 -58.972 -56.678 -54.726 -53.045 -51.585 -50.310 -49.191 -48.207 -47.342 -46.583 -45.920 -45.345 -44.850 -44.432 -44.084 -43.804 -43.587 -43.433 -43.338 -43.302 -43.323 -43.400 -43.533 -43.723 -43.969 -44.272 -44.634 -45.055 -45.539 -46.086 -46.701 -47.387 -48.149 -48.992 -49.923 -50.912 -51.901 -52.890 0.03 -18.0465 -17.6912 -17.3394 -16.9912 -16.6465 -16.3053 -15.9677 -15.6336 -15.303 -14.9759 -14.6524 -14.3324 -14.016 -13.7031 -13.3937 -13.0878 -12.7855 -12.4867 -12.1915 -11.8997 -11.6115 -11.3269 -11.0458 -10.7682 -10.4941 -10.2236 -9.9566 -9.6931 -9.4331 -9.1767 -8.9239 -8.6745 -8.4287 -8.1864 -7.9477 -7.7125 -7.4808 -7.2527 -7.028 -6.807 -6.5894 -6.3754 -6.1649 -5.9579 -5.7545 -5.5546 -5.3583 -5.1654 -4.9761 -4.7904 -4.6081 -4.4294 -4.2543 -4.0826 -3.9145 -3.75 -3.5889 -3.4314 -3.2774 -3.127 -2.9801 -2.8367 -2.6969 -2.5606 -2.4278 -2.2985 -2.1728 -2.0506 -1.932 -1.8168 -1.7053 -1.5972 -1.4927 -1.3917 -1.2942 -1.2003 -1.1099 -1.023 -0.9397 -0.8599 -0.78363 -0.71089 -0.64169 -0.57601 -0.51387 -0.45527 -0.40019 -0.34865 -0.30064 -0.25616 -0.21521 -0.17779 -0.14391 -0.11356 -0.08674 -0.063453 -0.043698 -0.027476 -0.014785 -0.0056264 0 0.0020943 0.00065654 -0.0043133 -0.012815 -0.024849 -0.040416 -0.059514 -0.082144 -0.10831 -0.138 -0.17123 -0.20799 -0.24828 -0.2921 -0.33946 -0.39034 -0.44476 -0.50271 -0.5642 -0.62921 -0.69776 -0.76984 -0.84545 -0.9246 -1.0073 -1.0935 -1.1832 -1.2765 -1.3733 -1.4736 -1.5775 -1.6849 -1.7958 -1.9103 -2.0283 -2.1498 -2.2749 -2.4035 -2.5356 -2.6713 -2.8105 -2.9532 -3.0994 -3.2492 -3.4025 -3.5594 -3.7198 -3.8837 -4.0511 -4.2221 -4.3966 -4.5747 -4.7562 -4.9413 -5.13 -5.3221 -5.5179 -5.7171 -5.9199 -6.1262 -6.336 -6.5493 -6.7662 -6.9867 -7.2106 -7.4381 -7.6691 -7.9037 -8.1418 -8.3834 -8.6286 -8.8773 -9.1295 -9.3852 -9.6445 -9.9073 -10.1737 -10.4435 -10.7169 -10.9939 -11.2744 -11.5584 -11.8459 -12.137 -12.4316 -12.7297 -13.0314 -13.3366 -13.6453 -13.9576 -14.2734 -14.5927 -14.9155 -15.2419 -15.5719 -15.9053 -16.2423 -16.5828 -16.9269 -17.2745 1.0 43505.68 EW5 VV 37.8 40.37 0.050 -9.159e+06 4.238e+07 -1.208e+06 3.953e+07 5.527e+06 3.964e+07 1.195e+07 4.239e+07 1.849e+07 4.755e+07 2.519e+07 5.506e+07 3.190e+07 6.507e+07 3.834e+07 7.789e+07 4.422e+07 9.393e+07 4.925e+07 1.138e+08 5.307e+07 1.380e+08 5.533e+07 1.674e+08 5.560e+07 2.027e+08 5.338e+07 2.448e+08 4.814e+07 2.944e+08 3.917e+07 3.525e+08 2.592e+07 4.199e+08 7.813e+06 4.969e+08 -1.571e+07 5.842e+08 -4.518e+07 6.823e+08 -8.096e+07 7.914e+08 -1.234e+08 9.117e+08 -1.727e+08 1.043e+09 -2.290e+08 1.186e+09 -2.922e+08 1.341e+09 -3.622e+08 1.506e+09 -4.389e+08 1.682e+09 -5.221e+08 1.869e+09 -6.115e+08 2.066e+09 -7.067e+08 2.272e+09 -8.075e+08 2.488e+09 -9.137e+08 2.713e+09 -1.025e+09 2.945e+09 -1.141e+09 3.184e+09 -1.262e+09 3.429e+09 -1.387e+09 3.678e+09 -1.516e+09 3.930e+09 -1.649e+09 4.183e+09 -1.786e+09 4.435e+09 -1.926e+09 4.684e+09 -2.069e+09 4.927e+09 -2.214e+09 5.161e+09 -2.361e+09 5.383e+09 -2.509e+09 5.591e+09 -2.656e+09 5.780e+09 -2.802e+09 5.948e+09 -2.945e+09 6.090e+09 -3.084e+09 6.205e+09 -3.216e+09 6.289e+09 -3.339e+09 6.340e+09 -3.453e+09 6.356e+09 -3.553e+09 6.335e+09 -3.639e+09 6.277e+09 -3.708e+09 6.181e+09 -3.758e+09 6.048e+09 -3.789e+09 5.880e+09 -3.798e+09 5.677e+09 -3.784e+09 5.444e+09 -3.748e+09 5.184e+09 -3.688e+09 4.899e+09 -3.606e+09 4.595e+09 -3.503e+09 4.277e+09 -3.380e+09 3.948e+09 -3.238e+09 3.613e+09 -3.080e+09 3.278e+09 -2.907e+09 2.945e+09 -2.723e+09 2.619e+09 -2.530e+09 2.305e+09 -2.330e+09 2.005e+09 -2.128e+09 1.722e+09 -1.926e+09 1.458e+09 -1.725e+09 1.214e+09 -1.529e+09 9.925e+08 -1.340e+09 7.935e+08 -1.160e+09 6.170e+08 -9.895e+08 4.632e+08 -8.313e+08 3.316e+08 -6.861e+08 2.212e+08 -5.552e+08 1.310e+08 -4.394e+08 5.965e+07 -3.392e+08 5.134e+06 -2.552e+08 -3.482e+07 -1.875e+08 -6.353e+07 -1.350e+08 -8.548e+07 -9.483e+07 -1.063e+08 -6.187e+07 -1.316e+08 -2.922e+07 -1.656e+08 9.559e+06 -2.096e+08 5.931e+07 -2.633e+08 1.231e+08 -3.250e+08 2.027e+08 -3.929e+08 2.990e+08 -4.648e+08 4.123e+08 -5.390e+08 5.425e+08 -6.130e+08 6.890e+08 -6.850e+08 8.513e+08 -7.528e+08 1.028e+09 -8.143e+08 1.217e+09 -8.675e+08 1.418e+09 -9.105e+08 1.627e+09 -9.416e+08 1.843e+09 -9.592e+08 2.062e+09 -9.620e+08 2.282e+09 -9.491e+08 2.499e+09 -9.198e+08 2.710e+09 -8.739e+08 2.912e+09 -8.115e+08 3.101e+09 -7.334e+08 3.274e+09 -6.405e+08 3.430e+09 -5.342e+08 3.564e+09 -4.165e+08 3.676e+09 -2.893e+08 3.763e+09 -1.550e+08 3.825e+09 -1.613e+07 3.862e+09 1.248e+08 3.872e+09 2.651e+08 3.856e+09 4.022e+08 3.816e+09 5.340e+08 3.753e+09 6.581e+08 3.669e+09 7.727e+08 3.564e+09 8.763e+08 3.443e+09 9.676e+08 3.306e+09 1.046e+09 3.157e+09 1.110e+09 2.997e+09 1.160e+09 2.830e+09 1.197e+09 2.657e+09 1.220e+09 2.480e+09 1.230e+09 2.301e+09 1.228e+09 2.122e+09 1.214e+09 1.945e+09 1.191e+09 1.771e+09 1.158e+09 1.601e+09 1.118e+09 1.437e+09 1.070e+09 1.278e+09 1.018e+09 1.127e+09 9.602e+08 9.835e+08 8.994e+08 8.485e+08 8.362e+08 7.222e+08 7.715e+08 6.054e+08 7.063e+08 4.984e+08 6.414e+08 4.014e+08 5.777e+08 3.147e+08 5.159e+08 2.382e+08 4.568e+08 1.718e+08 4.010e+08 1.150e+08 3.491e+08 6.751e+07 3.017e+08 2.829e+07 2.591e+08 -3.639e+06 2.216e+08 -2.948e+07 1.891e+08 -5.058e+07 1.613e+08 -6.817e+07 1.375e+08 -8.318e+07 1.170e+08 -9.620e+07 9.871e+07 -1.073e+08 8.183e+07 -1.161e+08 6.574e+07 -1.222e+08 5.008e+07 -1.247e+08 3.488e+07 -1.233e+08 2.043e+07 -1.174e+08 7.203e+06 -1.072e+08 -4.215e+06 -9.318e+07 -1.324e+07 -7.613e+07 -1.944e+07 -5.742e+07 -2.255e+07 -3.876e+07 -2.268e+07 -2.205e+07 -2.040e+07 -8.846e+06 -1.710e+07 1.363e+06 -1.503e+07 1.326e+07 -1.576e+07 3.400e+07 -1.783e+07 6.882e+07 -1.776e+07 1.208e+08 -1.222e+07 1.921e+08 1.722e+06 2.839e+08 2.683e+07 3.975e+08 6.583e+07 5.331e+08 1.213e+08 6.905e+08 1.955e+08 8.693e+08 2.906e+08 1.068e+09 4.083e+08 1.286e+09 5.499e+08 1.520e+09 7.163e+08 1.768e+09 9.080e+08 2.028e+09 1.124e+09 2.296e+09 1.365e+09 2.570e+09 1.630e+09 2.847e+09 1.917e+09 3.123e+09 2.224e+09 3.395e+09 2.549e+09 3.660e+09 2.890e+09 3.914e+09 3.244e+09 4.153e+09 3.609e+09 4.374e+09 3.980e+09 4.573e+09 4.354e+09 4.747e+09 4.729e+09 4.891e+09 5.099e+09 5.003e+09 5.462e+09 5.079e+09 5.814e+09 5.115e+09 6.151e+09 5.108e+09 6.468e+09 5.057e+09 6.763e+09 4.959e+09 7.031e+09 4.812e+09 7.269e+09 4.616e+09 7.473e+09 4.372e+09 7.641e+09 4.081e+09 7.771e+09 3.744e+09 7.861e+09 3.366e+09 7.911e+09 2.950e+09 7.920e+09 2.501e+09 7.890e+09 2.025e+09 7.824e+09 1.526e+09 7.724e+09 1.010e+09 7.596e+09 4.817e+08 7.444e+09 -5.601e+07 7.274e+09 -6.008e+08 7.092e+09 -1.152e+09 6.902e+09 -1.710e+09 6.709e+09 -2.278e+09 6.515e+09 -2.858e+09 6.322e+09 -3.452e+09 6.128e+09 -4.062e+09 5.931e+09 -4.688e+09 5.726e+09 -5.327e+09 5.507e+09 -5.973e+09 5.270e+09 -6.616e+09 5.010e+09 -7.246e+09 4.721e+09 -7.848e+09 4.403e+09 -8.406e+09 4.055e+09 -8.903e+09 3.677e+09 -9.323e+09 3.275e+09 -9.649e+09 2.853e+09 -9.866e+09 2.418e+09 -9.961e+09 1.978e+09 -9.925e+09 1.544e+09 -9.751e+09 1.122e+09 -9.436e+09 7.247e+08 -8.983e+09 3.600e+08 -8.398e+09 3.593e+07 -7.691e+09 -2.397e+08 -6.880e+09 -4.613e+08 -5.984e+09 -6.247e+08 -5.032e+09 -7.278e+08 -4.055e+09 -7.707e+08 -3.089e+09 -7.559e+08 -2.179e+09 -6.888e+08 -1.370e+09 -5.783e+08 -7.156e+08 -4.388e+08 -2.629e+08 -2.988e+08 6.676e+06 -2.254e+08 3.219e+08 -2.669e+08 9.660e+08 -3.612e+08 2.101e+09 -4.260e+08 3.826e+09 -4.116e+08 6.229e+09 -2.792e+08 9.400e+09 9.586e+06 1.344e+10 4.962e+08 1.842e+10 1.224e+09 2.445e+10 2.240e+09 3.162e+10 3.596e+09 4.000e+10 5.340e+09 4.967e+10 7.525e+09 6.070e+10 1.021e+10 7.315e+10 1.344e+10 8.705e+10 1.728e+10 1.024e+11 2.176e+10 1.193e+11 2.693e+10 1.376e+11 3.283e+10 1.573e+11 3.949e+10 1.783e+11 4.691e+10 2.006e+11 5.511e+10 2.240e+11 6.409e+10 2.483e+11 7.380e+10 2.735e+11 8.423e+10 2.992e+11 9.532e+10 3.253e+11 1.070e+11 3.516e+11 1.192e+11 3.778e+11 1.318e+11 4.037e+11 1.447e+11 4.289e+11 1.578e+11 4.534e+11 1.710e+11 4.767e+11 1.841e+11 4.987e+11 1.969e+11 5.192e+11 2.095e+11 5.379e+11 2.215e+11 5.546e+11 2.329e+11 5.693e+11 2.435e+11 5.816e+11 2.532e+11 5.916e+11 2.620e+11 5.991e+11 2.697e+11 6.040e+11 2.762e+11 6.064e+11 2.814e+11 6.062e+11 2.854e+11 6.035e+11 2.881e+11 5.982e+11 2.894e+11 5.904e+11 2.894e+11 5.803e+11 2.881e+11 5.679e+11 2.854e+11 5.534e+11 2.815e+11 5.369e+11 2.764e+11 5.185e+11 2.701e+11 4.985e+11 2.627e+11 4.787e+11 2.502e+11 4.547e+11 2.482e+11 4.307e+11 2.378e+11 4.058e+11 2.268e+11 3.803e+11 2.151e+11 3.543e+11 2.029e+11 3.281e+11 1.903e+11 3.020e+11 1.774e+11 2.761e+11 1.643e+11 2.507e+11 1.512e+11 2.259e+11 1.381e+11 2.020e+11 1.251e+11 1.791e+11 1.125e+11 1.573e+11 1.002e+11 1.369e+11 8.835e+10 1.178e+11 7.710e+10 1.003e+11 6.650e+10 8.433e+10 5.659e+10 6.995e+10 4.747e+10 5.716e+10 3.916e+10 4.593e+10 3.169e+10 3.624e+10 2.509e+10 2.800e+10 1.935e+10 2.112e+10 1.445e+10 1.550e+10 1.037e+10 1.102e+10 7.072e+09 7.541e+09 4.496e+09 4.941e+09 2.580e+09 3.082e+09 1.244e+09 1.837e+09 3.941e+08 1.094e+09 -1.011e+08 7.324e+08 -4.339e+08 6.007e+08 -8.181e+08 5.616e+08 -1.363e+09 5.652e+08 -2.061e+09 6.259e+08 -2.865e+09 7.773e+08 -3.728e+09 1.054e+09 -4.618e+09 1.487e+09 -5.511e+09 2.104e+09 -6.394e+09 2.936e+09 -7.266e+09 4.016e+09 -8.133e+09 5.385e+09 -9.001e+09 7.094e+09 -9.880e+09 9.205e+09 -1.077e+10 1.178e+10 -1.168e+10 1.490e+10 -1.260e+10 1.864e+10 -1.351e+10 2.307e+10 -1.440e+10 2.825e+10 -1.522e+10 3.423e+10 -1.597e+10 4.105e+10 -1.660e+10 4.872e+10 -1.709e+10 5.726e+10 -1.740e+10 6.662e+10 -1.753e+10 7.676e+10 -1.744e+10 8.761e+10 -1.713e+10 9.906e+10 -1.660e+10 1.110e+11 -1.583e+10 1.232e+11 -1.485e+10 1.356e+11 -1.367e+10 1.479e+11 -1.231e+10 1.599e+11 -1.081e+10 1.714e+11 -9.190e+09 1.822e+11 -7.508e+09 1.919e+11 -5.807e+09 2.003e+11 -4.139e+09 2.071e+11 -2.557e+09 2.123e+11 -1.114e+09 2.155e+11 1.369e+08 2.165e+11 1.151e+09 2.154e+11 1.886e+09 2.119e+11 2.310e+09 2.062e+11 2.403e+09 1.982e+11 2.157e+09 1.880e+11 1.580e+09 1.759e+11 6.959e+08 1.621e+11 -4.544e+08 1.469e+11 -1.812e+09 1.306e+11 -3.306e+09 1.137e+11 -4.844e+09 9.666e+10 -6.325e+09 7.986e+10 -7.657e+09 6.380e+10 -8.743e+09 4.894e+10 -9.495e+09 3.571e+10 -9.849e+09 2.447e+10 -9.796e+09 1.550e+10 -9.429e+09 8.825e+09 -9.029e+09 4.079e+09 -9.134e+09 2.281e+08 -1.036e+10 -4.101e+09 -1.300e+10 -9.910e+09 -1.688e+10 -1.756e+10 -2.164e+10 -2.693e+10 -2.694e+10 -3.767e+10 -3.245e+10 -4.923e+10 -3.785e+10 -6.102e+10 -4.285e+10 -7.233e+10 -4.711e+10 -8.246e+10 -5.033e+10 -9.071e+10 -5.224e+10 -9.643e+10 -5.258e+10 -9.905e+10 -5.118e+10 -9.815e+10 -4.795e+10 -9.349e+10 -4.291e+10 -8.508e+10 -3.624e+10 -7.325e+10 -2.830e+10 -5.871e+10 -1.966e+10 -4.262e+10 -1.115e+10 -2.668e+10 -3.820e+09 -1.324e+10 1.202e+09 -4.604e+09 4.433e+09 2.675e+09 1.144e+10 1.884e+10 2.857e+10 5.345e+10 5.974e+10 1.141e+11 1.088e+11 2.088e+11 1.804e+11 3.468e+11 2.799e+11 5.387e+11 4.139e+11 7.965e+11 5.893e+11 1.133e+12 8.141e+11 1.565e+12 1.097e+12 2.108e+12 1.449e+12 2.781e+12 1.880e+12 3.603e+12 2.402e+12 4.597e+12 3.028e+12 5.785e+12 3.772e+12 7.194e+12 4.650e+12 8.848e+12 5.677e+12 1.077e+13 6.870e+12 1.183e+13 7.498e+12 1.418e+13 8.948e+12 1.686e+13 1.060e+13 1.992e+13 1.248e+13 2.337e+13 1.460e+13 2.724e+13 1.699e+13 3.158e+13 1.966e+13 3.641e+13 2.264e+13 4.176e+13 2.594e+13 4.766e+13 2.958e+13 5.412e+13 3.357e+13 6.118e+13 3.795e+13 6.887e+13 4.272e+13 7.721e+13 4.791e+13 8.621e+13 5.351e+13 9.589e+13 5.956e+13 1.063e+14 6.607e+13 1.174e+14 7.302e+13 1.292e+14 8.045e+13 1.418e+14 8.836e+13 1.550e+14 9.669e+13 1.690e+14 1.056e+14 1.837e+14 1.149e+14 1.991e+14 1.248e+14 2.153e+14 1.350e+14 2.321e+14 1.458e+14 2.496e+14 1.569e+14 2.677e+14 1.686e+14 2.864e+14 1.807e+14 3.057e+14 1.931e+14 3.256e+14 2.060e+14 3.460e+14 2.192e+14 3.668e+14 2.328e+14 3.882e+14 2.467e+14 4.098e+14 2.609e+14 4.317e+14 2.753e+14 4.539e+14 2.899e+14 4.762e+14 3.046e+14 4.985e+14 3.194e+14 5.208e+14 3.343e+14 5.431e+14 3.493e+14 5.653e+14 3.642e+14 5.872e+14 3.790e+14 6.087e+14 3.937e+14 6.297e+14 4.082e+14 6.503e+14 4.223e+14 6.702e+14 4.362e+14 6.894e+14 4.497e+14 7.078e+14 4.628e+14 7.253e+14 4.754e+14 7.418e+14 4.874e+14 7.572e+14 4.987e+14 7.715e+14 5.094e+14 7.845e+14 5.193e+14 7.963e+14 5.285e+14 8.068e+14 5.369e+14 8.158e+14 5.444e+14 8.234e+14 5.510e+14 8.294e+14 5.567e+14 8.341e+14 5.613e+14 8.371e+14 5.650e+14 8.386e+14 5.677e+14 8.386e+14 5.694e+14 8.370e+14 5.700e+14 8.340e+14 5.695e+14 8.294e+14 5.681e+14 8.233e+14 5.657e+14 8.159e+14 5.623e+14 8.070e+14 5.578e+14 7.968e+14 5.526e+14 7.853e+14 5.463e+14 7.726e+14 5.392e+14 7.587e+14 5.312e+14 7.437e+14 5.224e+14 7.277e+14 5.129e+14 7.109e+14 5.027e+14 6.931e+14 4.919e+14 6.746e+14 4.804e+14 6.554e+14 4.684e+14 6.357e+14 4.558e+14 6.154e+14 4.429e+14 5.946e+14 4.295e+14 5.735e+14 4.158e+14 5.520e+14 4.018e+14 5.304e+14 3.877e+14 5.086e+14 3.733e+14 4.868e+14 3.588e+14 4.650e+14 3.442e+14 4.432e+14 3.296e+14 4.216e+14 3.150e+14 4.003e+14 3.004e+14 3.791e+14 2.860e+14 3.584e+14 2.717e+14 3.379e+14 2.577e+14 3.179e+14 2.437e+14 2.984e+14 2.301e+14 2.795e+14 2.167e+14 2.611e+14 2.036e+14 2.432e+14 1.910e+14 2.260e+14 1.787e+14 2.095e+14 1.667e+14 1.937e+14 1.551e+14 1.786e+14 1.440e+14 1.642e+14 1.334e+14 1.505e+14 1.232e+14 1.376e+14 1.135e+14 1.254e+14 1.042e+14 1.139e+14 9.543e+13 1.031e+14 8.712e+13 9.309e+13 7.928e+13 8.375e+13 7.194e+13 7.510e+13 6.508e+13 6.709e+13 5.867e+13 5.972e+13 5.272e+13 5.296e+13 4.720e+13 4.678e+13 4.210e+13 4.115e+13 3.741e+13 3.605e+13 3.310e+13 3.143e+13 2.917e+13 2.729e+13 2.560e+13 2.359e+13 2.237e+13 2.027e+13 1.945e+13 1.733e+13 1.683e+13 1.474e+13 1.449e+13 1.245e+13 1.240e+13 1.046e+13 1.055e+13 8.729e+12 8.925e+12 7.229e+12 7.501e+12 5.338e+12 5.625e+12 4.342e+12 4.651e+12 3.499e+12 3.814e+12 2.792e+12 3.100e+12 2.203e+12 2.496e+12 1.716e+12 1.988e+12 1.319e+12 1.565e+12 9.978e+11 1.215e+12 7.412e+11 9.297e+11 5.391e+11 6.989e+11 3.827e+11 5.151e+11 2.636e+11 3.707e+11 1.750e+11 2.592e+11 1.110e+11 1.750e+11 6.614e+10 1.130e+11 3.613e+10 6.873e+10 1.727e+10 3.854e+10 6.484e+09 1.914e+10 1.242e+09 7.813e+09 -6.111e+08 2.287e+09 -1.272e+09 2.259e+08 -2.582e+09 -1.289e+09 -4.283e+09 -3.679e+09 -5.716e+09 -6.485e+09 -6.547e+09 -9.149e+09 -6.649e+09 -1.128e+10 -6.044e+09 -1.267e+10 -4.847e+09 -1.325e+10 -3.236e+09 -1.307e+10 -1.403e+09 -1.226e+10 4.828e+08 -1.106e+10 2.337e+09 -9.701e+09 4.216e+09 -8.388e+09 6.338e+09 -7.221e+09 9.026e+09 -6.121e+09 1.260e+10 -4.848e+09 1.727e+10 -3.092e+09 2.312e+10 -5.692e+08 3.015e+10 2.933e+09 3.826e+10 7.552e+09 4.731e+10 1.335e+10 5.711e+10 2.031e+10 6.748e+10 2.840e+10 0.005 -51.779 -50.712 -49.646 -48.579 -47.579 -46.678 -45.868 -45.141 -44.491 -43.913 -43.404 -42.961 -42.579 -42.258 -41.995 -41.789 -41.640 -41.546 -41.509 -41.527 -41.601 -41.733 -41.923 -42.174 -42.487 -42.866 -43.313 -43.834 -44.432 -45.115 -45.889 -46.764 -47.753 -48.870 -50.137 -51.579 -53.231 -55.143 -57.388 -60.074 -63.365 -67.404 -71.580 -72.905 -71.030 -69.312 -68.258 -67.422 -66.217 -64.321 -61.943 -59.477 -57.160 -55.068 -53.204 -51.550 -50.081 -48.775 -47.614 -46.581 -45.663 -44.851 -44.136 -43.511 -42.970 -42.509 -42.125 -41.815 -41.577 -41.409 -41.311 -41.283 -41.325 -41.438 -41.623 -41.883 -42.221 -42.639 -43.143 -43.737 -44.426 -45.219 -46.120 -47.139 -48.279 -49.544 -50.926 -52.400 -53.907 -55.344 -56.569 -57.452 -57.944 -58.072 -57.860 -57.267 -56.228 -54.757 -52.985 -51.083 -49.187 -47.375 -45.681 -44.117 -42.682 -41.368 -40.169 -39.075 -38.080 -37.178 -36.361 -35.626 -34.969 -34.386 -33.875 -33.435 -33.063 -32.759 -32.524 -32.358 -32.262 -32.237 -32.286 -32.413 -32.622 -32.919 -33.312 -33.810 -34.425 -35.174 -36.077 -37.161 -38.466 -40.042 -41.956 -44.279 -46.967 -49.438 -50.307 -49.128 -47.414 -46.128 -45.470 -45.504 -46.391 -48.544 -52.212 -52.993 -47.064 -41.466 -37.383 -34.152 -31.453 -29.119 -27.054 -25.198 -23.510 -21.960 -20.528 -19.198 -17.956 -16.793 -15.700 -14.672 -13.701 -12.783 -11.915 -11.092 -10.313 -9.573 -8.872 -8.206 -7.574 -6.975 -6.407 -5.868 -5.358 -4.876 -4.420 -3.990 -3.585 -3.204 -2.846 -2.512 -2.201 -1.911 -1.643 -1.397 -1.171 -0.966 -0.781 -0.616 -0.471 -0.346 -0.240 -0.154 -0.087 -0.039 -0.010 0.000 -0.009 -0.037 -0.084 -0.150 -0.235 -0.340 -0.464 -0.608 -0.771 -0.955 -1.159 -1.383 -1.628 -1.894 -2.182 -2.492 -2.824 -3.179 -3.558 -3.961 -4.388 -4.841 -5.320 -5.827 -6.362 -6.926 -7.521 -8.148 -8.809 -9.505 -10.238 -11.011 -11.826 -12.686 -13.594 -14.555 -15.572 -16.652 -17.801 -19.026 -20.338 -21.749 -23.273 -24.933 -26.754 -28.775 -31.052 -33.668 -36.758 -40.524 -45.066 -48.600 -48.300 -46.047 -44.310 -43.372 -43.043 -43.186 -43.704 -44.484 -45.314 -45.808 -45.546 -44.489 -42.993 -41.425 -39.973 -38.700 -37.609 -36.688 -35.918 -35.284 -34.772 -34.369 -34.068 -33.861 -33.740 -33.703 -33.745 -33.864 -34.057 -34.325 -34.665 -35.079 -35.569 -36.134 -36.776 -37.499 -38.304 -39.196 -40.178 -41.253 -42.424 -43.693 -45.057 -46.511 -48.039 -49.615 -51.196 -52.722 -54.117 -55.281 -56.080 -56.345 -55.948 -54.919 -53.460 -51.812 -50.148 -48.558 -47.081 -45.730 -44.503 -43.395 -42.397 -41.502 -40.701 -39.989 -39.358 -38.805 -38.324 -37.912 -37.564 -37.279 -37.055 -36.888 -36.778 -36.724 -36.724 -36.778 -36.886 -37.049 -37.265 -37.537 -37.864 -38.250 -38.694 -39.200 -39.771 -40.409 -41.120 -41.907 -42.778 -43.738 -44.798 -45.969 -47.263 -48.700 -50.301 -52.097 -54.126 -56.445 -59.133 -62.311 -66.168 -71.027 -77.447 -85.894 -89.171 -82.788 -75.781 -70.326 -66.128 -62.790 -60.059 -57.774 -55.832 -54.163 -52.717 -51.455 -50.352 -49.387 -48.542 -47.806 -47.168 -46.621 -46.157 -45.772 -45.460 -45.218 -45.044 -44.934 -44.888 -44.905 -44.982 -45.121 -45.322 -45.584 -45.909 -46.300 -46.757 -47.284 -47.884 -48.562 -49.323 -50.175 -51.125 -52.183 -53.316 -54.448 -55.581 0.03 -18.6512 -18.2843 -17.9211 -17.5615 -17.2055 -16.8532 -16.5046 -16.1595 -15.8182 -15.4804 -15.1463 -14.8159 -14.4891 -14.1659 -13.8464 -13.5306 -13.2183 -12.9098 -12.6048 -12.3035 -12.0059 -11.7119 -11.4215 -11.1348 -10.8517 -10.5723 -10.2965 -10.0243 -9.7559 -9.491 -9.2298 -8.9722 -8.7183 -8.468 -8.2214 -7.9784 -7.739 -7.5033 -7.2713 -7.0429 -6.8181 -6.597 -6.3795 -6.1656 -5.9554 -5.7489 -5.546 -5.3467 -5.1511 -4.9591 -4.7708 -4.5861 -4.405 -4.2276 -4.0539 -3.8838 -3.7173 -3.5545 -3.3953 -3.2397 -3.0878 -2.9396 -2.795 -2.654 -2.5167 -2.383 -2.253 -2.1266 -2.0039 -1.8848 -1.7693 -1.6575 -1.5493 -1.4448 -1.3439 -1.2467 -1.1531 -1.0631 -0.97683 -0.89416 -0.81515 -0.73977 -0.66804 -0.59996 -0.53551 -0.47471 -0.41756 -0.36405 -0.31418 -0.26796 -0.22538 -0.18644 -0.15115 -0.1195 -0.091501 -0.067141 -0.046425 -0.029353 -0.015925 -0.0061405 0 0.0024967 0.0013494 -0.0034416 -0.011877 -0.023955 -0.039678 -0.059045 -0.082055 -0.10871 -0.13901 -0.17295 -0.21054 -0.25177 -0.29664 -0.34516 -0.39732 -0.45312 -0.51257 -0.57567 -0.6424 -0.71278 -0.78681 -0.86448 -0.94579 -1.0307 -1.1193 -1.2116 -1.3075 -1.407 -1.5102 -1.617 -1.7275 -1.8416 -1.9593 -2.0807 -2.2058 -2.3344 -2.4668 -2.6027 -2.7424 -2.8856 -3.0325 -3.1831 -3.3372 -3.4951 -3.6566 -3.8217 -3.9904 -4.1629 -4.3389 -4.5186 -4.7019 -4.8889 -5.0796 -5.2738 -5.4717 -5.6733 -5.8785 -6.0874 -6.2999 -6.516 -6.7358 -6.9592 -7.1863 -7.417 -7.6513 -7.8893 -8.131 -8.3763 -8.6252 -8.8778 -9.134 -9.3938 -9.6573 -9.9245 -10.1953 -10.4697 -10.7478 -11.0295 -11.3149 -11.6039 -11.8966 -12.1929 -12.4928 -12.7964 -13.1036 -13.4145 -13.729 -14.0472 -14.369 -14.6945 -15.0235 -15.3563 -15.6927 -16.0327 -16.3764 -16.7237 -17.0746 -17.4292 -17.7875 1.0 43505.68 EW5 VH 37.8 40.37 0.050 -3.612e+07 1.413e+07 -2.903e+07 2.014e+07 -2.407e+07 2.637e+07 -2.028e+07 3.347e+07 -1.696e+07 4.169e+07 -1.371e+07 5.094e+07 -1.039e+07 6.105e+07 -7.016e+06 7.183e+07 -3.704e+06 8.308e+07 -6.059e+05 9.470e+07 2.116e+06 1.066e+08 4.295e+06 1.187e+08 5.782e+06 1.310e+08 6.436e+06 1.436e+08 6.130e+06 1.565e+08 4.721e+06 1.698e+08 2.119e+06 1.837e+08 -1.777e+06 1.982e+08 -7.078e+06 2.135e+08 -1.391e+07 2.298e+08 -2.238e+07 2.472e+08 -3.264e+07 2.661e+08 -4.485e+07 2.866e+08 -5.919e+07 3.089e+08 -7.583e+07 3.332e+08 -9.501e+07 3.598e+08 -1.169e+08 3.888e+08 -1.417e+08 4.204e+08 -1.698e+08 4.549e+08 -2.011e+08 4.923e+08 -2.360e+08 5.327e+08 -2.747e+08 5.764e+08 -3.171e+08 6.233e+08 -3.635e+08 6.733e+08 -4.140e+08 7.265e+08 -4.684e+08 7.827e+08 -5.267e+08 8.417e+08 -5.889e+08 9.033e+08 -6.547e+08 9.671e+08 -7.240e+08 1.033e+09 -7.964e+08 1.099e+09 -8.715e+08 1.167e+09 -9.489e+08 1.234e+09 -1.028e+09 1.301e+09 -1.108e+09 1.365e+09 -1.189e+09 1.427e+09 -1.269e+09 1.485e+09 -1.349e+09 1.539e+09 -1.426e+09 1.587e+09 -1.501e+09 1.628e+09 -1.572e+09 1.661e+09 -1.638e+09 1.686e+09 -1.698e+09 1.701e+09 -1.752e+09 1.706e+09 -1.798e+09 1.700e+09 -1.836e+09 1.684e+09 -1.864e+09 1.656e+09 -1.883e+09 1.618e+09 -1.891e+09 1.569e+09 -1.889e+09 1.510e+09 -1.875e+09 1.441e+09 -1.851e+09 1.364e+09 -1.815e+09 1.280e+09 -1.769e+09 1.189e+09 -1.712e+09 1.094e+09 -1.644e+09 9.946e+08 -1.568e+09 8.936e+08 -1.484e+09 7.921e+08 -1.392e+09 6.914e+08 -1.294e+09 5.932e+08 -1.191e+09 4.988e+08 -1.085e+09 4.091e+08 -9.775e+08 3.255e+08 -8.695e+08 2.489e+08 -7.624e+08 1.798e+08 -6.582e+08 1.189e+08 -5.580e+08 6.658e+07 -4.634e+08 2.292e+07 -3.759e+08 -1.209e+07 -2.966e+08 -3.888e+07 -2.266e+08 -5.819e+07 -1.670e+08 -7.118e+07 -1.180e+08 -7.978e+07 -7.883e+07 -8.670e+07 -4.732e+07 -9.538e+07 -1.897e+07 -1.091e+08 1.185e+07 -1.297e+08 5.030e+07 -1.573e+08 1.002e+08 -1.909e+08 1.639e+08 -2.292e+08 2.428e+08 -2.704e+08 3.376e+08 -3.132e+08 4.486e+08 -3.561e+08 5.759e+08 -3.979e+08 7.191e+08 -4.370e+08 8.778e+08 -4.725e+08 1.051e+09 -5.028e+08 1.238e+09 -5.270e+08 1.438e+09 -5.438e+08 1.650e+09 -5.522e+08 1.871e+09 -5.512e+08 2.100e+09 -5.399e+08 2.336e+09 -5.177e+08 2.575e+09 -4.840e+08 2.816e+09 -4.384e+08 3.057e+09 -3.807e+08 3.294e+09 -3.109e+08 3.525e+09 -2.294e+08 3.747e+09 -1.365e+08 3.958e+09 -3.317e+07 4.155e+09 7.986e+07 4.336e+09 2.013e+08 4.497e+09 3.298e+08 4.638e+09 4.638e+08 4.756e+09 6.016e+08 4.850e+09 7.412e+08 4.919e+09 8.810e+08 4.961e+09 1.019e+09 4.976e+09 1.153e+09 4.964e+09 1.281e+09 4.925e+09 1.402e+09 4.860e+09 1.513e+09 4.770e+09 1.614e+09 4.657e+09 1.702e+09 4.521e+09 1.778e+09 4.365e+09 1.840e+09 4.191e+09 1.887e+09 4.002e+09 1.919e+09 3.799e+09 1.936e+09 3.585e+09 1.939e+09 3.364e+09 1.927e+09 3.136e+09 1.902e+09 2.906e+09 1.863e+09 2.675e+09 1.812e+09 2.445e+09 1.751e+09 2.219e+09 1.680e+09 1.999e+09 1.600e+09 1.785e+09 1.513e+09 1.581e+09 1.421e+09 1.388e+09 1.324e+09 1.206e+09 1.225e+09 1.036e+09 1.124e+09 8.798e+08 1.023e+09 7.369e+08 9.227e+08 6.078e+08 8.249e+08 4.926e+08 7.304e+08 3.910e+08 6.401e+08 3.029e+08 5.548e+08 2.276e+08 4.754e+08 1.645e+08 4.022e+08 1.126e+08 3.358e+08 7.118e+07 2.764e+08 3.893e+07 2.241e+08 1.476e+07 1.787e+08 -2.526e+06 1.401e+08 -1.416e+07 1.078e+08 -2.126e+07 8.117e+07 -2.489e+07 5.970e+07 -2.593e+07 4.261e+07 -2.509e+07 2.918e+07 -2.289e+07 1.877e+07 -1.973e+07 1.083e+07 -1.590e+07 4.973e+06 -1.174e+07 9.134e+05 -7.668e+06 -1.586e+06 -4.162e+06 -2.909e+06 -1.354e+06 -3.865e+06 1.822e+06 -5.542e+06 7.651e+06 -8.413e+06 1.845e+07 -1.199e+07 3.617e+07 -1.542e+07 6.258e+07 -1.768e+07 9.934e+07 -1.760e+07 1.481e+08 -1.388e+07 2.102e+08 -5.092e+06 2.869e+08 1.024e+07 3.790e+08 3.363e+07 4.871e+08 6.657e+07 6.112e+08 1.104e+08 7.512e+08 1.664e+08 9.061e+08 2.356e+08 1.075e+09 3.185e+08 1.255e+09 4.158e+08 1.446e+09 5.276e+08 1.644e+09 6.536e+08 1.847e+09 7.935e+08 2.051e+09 9.462e+08 2.254e+09 1.110e+09 2.451e+09 1.284e+09 2.640e+09 1.467e+09 2.817e+09 1.654e+09 2.977e+09 1.846e+09 3.120e+09 2.038e+09 3.240e+09 2.228e+09 3.335e+09 2.413e+09 3.403e+09 2.590e+09 3.443e+09 2.756e+09 3.451e+09 2.909e+09 3.429e+09 3.045e+09 3.374e+09 3.162e+09 3.287e+09 3.259e+09 3.170e+09 3.332e+09 3.023e+09 3.380e+09 2.848e+09 3.403e+09 2.647e+09 3.399e+09 2.425e+09 3.368e+09 2.185e+09 3.312e+09 1.931e+09 3.230e+09 1.667e+09 3.125e+09 1.398e+09 2.999e+09 1.128e+09 2.856e+09 8.635e+08 2.699e+09 6.064e+08 2.533e+09 3.602e+08 2.362e+09 1.268e+08 2.193e+09 -9.412e+07 2.029e+09 -3.044e+08 1.876e+09 -5.081e+08 1.737e+09 -7.114e+08 1.613e+09 -9.212e+08 1.504e+09 -1.145e+09 1.406e+09 -1.389e+09 1.315e+09 -1.656e+09 1.225e+09 -1.948e+09 1.130e+09 -2.262e+09 1.023e+09 -2.593e+09 9.008e+08 -2.933e+09 7.611e+08 -3.273e+09 6.029e+08 -3.601e+09 4.276e+08 -3.904e+09 2.382e+08 -4.170e+09 3.878e+07 -4.386e+09 -1.648e+08 -4.541e+09 -3.661e+08 -4.624e+09 -5.583e+08 -4.627e+09 -7.337e+08 -4.543e+09 -8.854e+08 -4.371e+09 -1.007e+09 -4.110e+09 -1.092e+09 -3.765e+09 -1.136e+09 -3.346e+09 -1.138e+09 -2.867e+09 -1.095e+09 -2.346e+09 -1.010e+09 -1.808e+09 -8.876e+08 -1.282e+09 -7.347e+08 -8.032e+08 -5.628e+08 -4.082e+08 -3.879e+08 -1.331e+08 -2.363e+08 3.671e+07 -1.520e+08 2.600e+08 -1.384e+08 7.255e+08 -1.152e+08 1.542e+09 -2.843e+06 2.782e+09 2.484e+08 4.510e+09 6.792e+08 6.795e+09 1.331e+09 9.707e+09 2.246e+09 1.331e+10 3.470e+09 1.768e+10 5.046e+09 2.287e+10 7.024e+09 2.895e+10 9.447e+09 3.596e+10 1.236e+10 4.397e+10 1.582e+10 5.302e+10 1.986e+10 6.314e+10 2.451e+10 7.436e+10 2.983e+10 8.668e+10 3.582e+10 1.001e+11 4.252e+10 1.146e+11 4.995e+10 1.302e+11 5.810e+10 1.467e+11 6.697e+10 1.642e+11 7.655e+10 1.826e+11 8.681e+10 2.017e+11 9.771e+10 2.215e+11 1.092e+11 2.418e+11 1.212e+11 2.624e+11 1.337e+11 2.833e+11 1.466e+11 3.042e+11 1.597e+11 3.249e+11 1.729e+11 3.452e+11 1.862e+11 3.650e+11 1.994e+11 3.841e+11 2.124e+11 4.022e+11 2.251e+11 4.191e+11 2.373e+11 4.347e+11 2.489e+11 4.488e+11 2.597e+11 4.613e+11 2.697e+11 4.718e+11 2.787e+11 4.805e+11 2.866e+11 4.871e+11 2.933e+11 4.915e+11 2.988e+11 4.937e+11 3.030e+11 4.937e+11 3.058e+11 4.915e+11 3.071e+11 4.871e+11 3.071e+11 4.804e+11 3.057e+11 4.717e+11 3.029e+11 4.610e+11 2.986e+11 4.484e+11 2.931e+11 4.341e+11 2.864e+11 4.182e+11 2.784e+11 4.008e+11 2.720e+11 3.824e+11 2.634e+11 3.628e+11 2.523e+11 3.424e+11 2.404e+11 3.213e+11 2.279e+11 2.998e+11 2.149e+11 2.781e+11 2.014e+11 2.564e+11 1.876e+11 2.348e+11 1.737e+11 2.136e+11 1.597e+11 1.930e+11 1.458e+11 1.730e+11 1.322e+11 1.539e+11 1.188e+11 1.357e+11 1.059e+11 1.185e+11 9.348e+10 1.025e+11 8.169e+10 8.775e+10 7.058e+10 7.422e+10 6.020e+10 6.199e+10 5.065e+10 5.105e+10 4.193e+10 4.138e+10 3.408e+10 3.296e+10 2.712e+10 2.574e+10 2.104e+10 1.965e+10 1.582e+10 1.462e+10 1.146e+10 1.055e+10 7.900e+09 7.342e+09 5.094e+09 4.904e+09 2.983e+09 3.126e+09 1.492e+09 1.912e+09 5.258e+08 1.174e+09 -4.718e+07 8.147e+08 -4.332e+08 6.958e+08 -8.716e+08 6.767e+08 -1.495e+09 7.003e+08 -2.302e+09 7.780e+08 -3.245e+09 9.444e+08 -4.270e+09 1.237e+09 -5.335e+09 1.690e+09 -6.407e+09 2.334e+09 -7.464e+09 3.199e+09 -8.496e+09 4.320e+09 -9.502e+09 5.731e+09 -1.048e+10 7.481e+09 -1.145e+10 9.624e+09 -1.240e+10 1.222e+10 -1.334e+10 1.535e+10 -1.426e+10 1.908e+10 -1.515e+10 2.347e+10 -1.597e+10 2.860e+10 -1.671e+10 3.451e+10 -1.733e+10 4.124e+10 -1.777e+10 4.880e+10 -1.802e+10 5.719e+10 -1.803e+10 6.637e+10 -1.776e+10 7.628e+10 -1.720e+10 8.685e+10 -1.632e+10 9.793e+10 -1.512e+10 1.094e+11 -1.359e+10 1.212e+11 -1.176e+10 1.329e+11 -9.637e+09 1.446e+11 -7.255e+09 1.559e+11 -4.655e+09 1.666e+11 -1.889e+09 1.765e+11 9.886e+08 1.854e+11 3.916e+09 1.931e+11 6.823e+09 1.993e+11 9.644e+09 2.039e+11 1.231e+10 2.067e+11 1.475e+10 2.075e+11 1.690e+10 2.064e+11 1.870e+10 2.032e+11 2.011e+10 1.980e+11 2.109e+10 1.908e+11 2.161e+10 1.816e+11 2.165e+10 1.707e+11 2.123e+10 1.581e+11 2.035e+10 1.443e+11 1.907e+10 1.294e+11 1.741e+10 1.138e+11 1.546e+10 9.792e+10 1.330e+10 8.204e+10 1.102e+10 6.659e+10 8.693e+09 5.198e+10 6.438e+09 3.858e+10 4.357e+09 2.677e+10 2.552e+09 1.688e+10 1.117e+09 9.153e+09 1.287e+08 3.815e+09 -3.602e+08 9.450e+08 -4.262e+08 -5.080e+08 -7.355e+08 -2.876e+09 -1.818e+09 -7.419e+09 -3.543e+09 -1.401e+10 -5.727e+09 -2.229e+10 -8.245e+09 -3.177e+10 -1.095e+10 -4.193e+10 -1.368e+10 -5.212e+10 -1.624e+10 -6.169e+10 -1.844e+10 -6.996e+10 -2.008e+10 -7.626e+10 -2.098e+10 -7.999e+10 -2.098e+10 -8.066e+10 -1.998e+10 -7.796e+10 -1.794e+10 -7.180e+10 -1.493e+10 -6.236e+10 -1.114e+10 -5.024e+10 -6.886e+09 -3.648e+10 -2.676e+09 -2.264e+10 8.315e+08 -1.090e+10 2.975e+09 -3.241e+09 4.440e+09 3.965e+09 9.426e+09 2.043e+10 2.200e+10 5.517e+10 4.445e+10 1.157e+11 7.931e+10 2.101e+11 1.299e+11 3.477e+11 2.001e+11 5.395e+11 2.947e+11 7.977e+11 4.187e+11 1.136e+12 5.778e+11 1.570e+12 7.787e+11 2.117e+12 1.028e+12 2.796e+12 1.335e+12 3.629e+12 1.707e+12 4.636e+12 2.155e+12 5.843e+12 2.687e+12 7.277e+12 3.317e+12 8.964e+12 4.054e+12 1.093e+13 4.911e+12 1.275e+13 5.691e+12 1.529e+13 6.792e+12 1.821e+13 8.049e+12 2.152e+13 9.478e+12 2.528e+13 1.109e+13 2.950e+13 1.291e+13 3.424e+13 1.494e+13 3.953e+13 1.719e+13 4.538e+13 1.970e+13 5.185e+13 2.247e+13 5.896e+13 2.550e+13 6.676e+13 2.883e+13 7.525e+13 3.245e+13 8.448e+13 3.639e+13 9.447e+13 4.065e+13 1.052e+14 4.524e+13 1.169e+14 5.017e+13 1.292e+14 5.545e+13 1.424e+14 6.109e+13 1.564e+14 6.708e+13 1.714e+14 7.343e+13 1.871e+14 8.013e+13 2.037e+14 8.720e+13 2.211e+14 9.460e+13 2.392e+14 1.023e+14 2.582e+14 1.105e+14 2.779e+14 1.189e+14 2.983e+14 1.277e+14 3.195e+14 1.367e+14 3.412e+14 1.460e+14 3.637e+14 1.557e+14 3.867e+14 1.655e+14 4.103e+14 1.756e+14 4.343e+14 1.859e+14 4.586e+14 1.964e+14 4.833e+14 2.070e+14 5.082e+14 2.177e+14 5.333e+14 2.286e+14 5.584e+14 2.393e+14 5.835e+14 2.502e+14 6.085e+14 2.610e+14 6.333e+14 2.717e+14 6.577e+14 2.824e+14 6.818e+14 2.928e+14 7.054e+14 3.031e+14 7.284e+14 3.130e+14 7.507e+14 3.228e+14 7.723e+14 3.322e+14 7.928e+14 3.412e+14 8.125e+14 3.498e+14 8.311e+14 3.580e+14 8.485e+14 3.656e+14 8.646e+14 3.728e+14 8.795e+14 3.795e+14 8.930e+14 3.855e+14 9.049e+14 3.909e+14 9.153e+14 3.956e+14 9.242e+14 3.997e+14 9.314e+14 4.030e+14 9.369e+14 4.057e+14 9.408e+14 4.077e+14 9.429e+14 4.089e+14 9.434e+14 4.094e+14 9.420e+14 4.092e+14 9.390e+14 4.082e+14 9.342e+14 4.066e+14 9.279e+14 4.042e+14 9.198e+14 4.010e+14 9.101e+14 3.973e+14 8.989e+14 3.929e+14 8.863e+14 3.878e+14 8.722e+14 3.822e+14 8.568e+14 3.761e+14 8.402e+14 3.693e+14 8.223e+14 3.621e+14 8.034e+14 3.544e+14 7.834e+14 3.462e+14 7.625e+14 3.376e+14 7.409e+14 3.287e+14 7.184e+14 3.194e+14 6.954e+14 3.098e+14 6.719e+14 2.999e+14 6.478e+14 2.898e+14 6.235e+14 2.796e+14 5.990e+14 2.692e+14 5.742e+14 2.587e+14 5.494e+14 2.483e+14 5.246e+14 2.377e+14 4.999e+14 2.270e+14 4.755e+14 2.165e+14 4.513e+14 2.061e+14 4.274e+14 1.957e+14 4.038e+14 1.856e+14 3.809e+14 1.755e+14 3.583e+14 1.657e+14 3.363e+14 1.561e+14 3.150e+14 1.467e+14 2.943e+14 1.375e+14 2.743e+14 1.287e+14 2.550e+14 1.201e+14 2.365e+14 1.118e+14 2.188e+14 1.038e+14 2.018e+14 9.618e+13 1.857e+14 8.887e+13 1.703e+14 8.191e+13 1.558e+14 7.528e+13 1.421e+14 6.900e+13 1.292e+14 6.307e+13 1.171e+14 5.748e+13 1.058e+14 5.223e+13 9.533e+13 4.731e+13 8.557e+13 4.273e+13 7.655e+13 3.847e+13 6.822e+13 3.453e+13 6.057e+13 3.087e+13 5.357e+13 2.750e+13 4.717e+13 2.441e+13 4.138e+13 2.158e+13 3.613e+13 1.900e+13 3.141e+13 1.666e+13 2.717e+13 1.454e+13 2.337e+13 1.263e+13 2.001e+13 1.092e+13 1.703e+13 9.394e+12 1.441e+13 8.036e+12 1.211e+13 6.834e+12 1.012e+13 5.777e+12 8.390e+12 4.851e+12 6.643e+12 3.893e+12 5.417e+12 3.220e+12 4.377e+12 2.642e+12 3.502e+12 2.148e+12 2.771e+12 1.730e+12 2.167e+12 1.378e+12 1.672e+12 1.085e+12 1.270e+12 8.430e+11 9.488e+11 6.453e+11 6.946e+11 4.855e+11 4.970e+11 3.582e+11 3.458e+11 2.583e+11 2.326e+11 1.811e+11 1.501e+11 1.228e+11 9.165e+10 7.977e+10 5.196e+10 4.902e+10 2.645e+10 2.794e+10 1.130e+10 1.427e+10 3.426e+09 6.153e+09 2.039e+08 2.068e+09 -9.481e+08 5.795e+08 -2.421e+09 -1.993e+08 -4.412e+09 -1.460e+09 -6.242e+09 -2.994e+09 -7.486e+09 -4.449e+09 -7.953e+09 -5.577e+09 -7.631e+09 -6.241e+09 -6.638e+09 -6.402e+09 -5.178e+09 -6.097e+09 -3.505e+09 -5.425e+09 -1.876e+09 -4.556e+09 -4.652e+08 -3.702e+09 7.647e+08 -3.088e+09 2.184e+09 -2.818e+09 4.337e+09 -2.732e+09 7.631e+09 -2.521e+09 1.227e+10 -1.920e+09 1.832e+10 -7.531e+08 2.574e+10 1.090e+09 3.447e+10 3.670e+09 4.435e+10 7.008e+09 5.521e+10 1.109e+10 6.685e+10 1.589e+10 0.005 -52.377 -51.340 -50.304 -49.267 -48.295 -47.422 -46.639 -45.938 -45.315 -44.765 -44.285 -43.870 -43.519 -43.230 -43.002 -42.833 -42.723 -42.672 -42.680 -42.747 -42.875 -43.065 -43.319 -43.639 -44.029 -44.492 -45.032 -45.657 -46.371 -47.184 -48.105 -49.147 -50.326 -51.663 -53.183 -54.920 -56.919 -59.239 -61.963 -65.202 -69.092 -73.666 -78.014 -78.638 -74.867 -70.363 -66.261 -62.706 -59.649 -57.009 -54.710 -52.690 -50.903 -49.313 -47.891 -46.616 -45.470 -44.440 -43.514 -42.682 -41.938 -41.276 -40.691 -40.178 -39.735 -39.358 -39.045 -38.796 -38.609 -38.484 -38.419 -38.416 -38.475 -38.598 -38.784 -39.038 -39.360 -39.755 -40.225 -40.775 -41.411 -42.137 -42.961 -43.891 -44.933 -46.097 -47.388 -48.809 -50.352 -51.990 -53.661 -55.252 -56.599 -57.526 -57.894 -57.625 -56.708 -55.235 -53.397 -51.400 -49.401 -47.487 -45.697 -44.043 -42.524 -41.134 -39.863 -38.704 -37.647 -36.686 -35.815 -35.027 -34.318 -33.685 -33.124 -32.634 -32.211 -31.856 -31.568 -31.347 -31.192 -31.104 -31.086 -31.140 -31.269 -31.477 -31.768 -32.150 -32.632 -33.222 -33.936 -34.790 -35.808 -37.021 -38.472 -40.220 -42.350 -44.958 -48.044 -50.972 -52.093 -50.957 -49.501 -48.788 -49.105 -50.829 -54.168 -54.691 -48.555 -42.787 -38.562 -35.213 -32.412 -29.990 -27.848 -25.924 -24.176 -22.574 -21.094 -19.720 -18.439 -17.241 -16.115 -15.057 -14.058 -13.116 -12.224 -11.380 -10.580 -9.822 -9.103 -8.421 -7.774 -7.160 -6.579 -6.027 -5.506 -5.012 -4.546 -4.106 -3.691 -3.301 -2.936 -2.594 -2.275 -1.978 -1.703 -1.450 -1.219 -1.008 -0.818 -0.648 -0.498 -0.368 -0.258 -0.168 -0.097 -0.045 -0.013 0.000 -0.006 -0.031 -0.076 -0.139 -0.222 -0.325 -0.447 -0.589 -0.751 -0.933 -1.135 -1.358 -1.602 -1.868 -2.155 -2.464 -2.796 -3.151 -3.530 -3.932 -4.360 -4.814 -5.294 -5.801 -6.337 -6.903 -7.499 -8.128 -8.791 -9.489 -10.225 -11.000 -11.819 -12.682 -13.595 -14.560 -15.582 -16.668 -17.823 -19.055 -20.375 -21.794 -23.328 -24.998 -26.831 -28.866 -31.158 -33.793 -36.902 -40.692 -45.260 -48.825 -48.560 -46.347 -44.656 -43.768 -43.490 -43.670 -44.180 -44.836 -45.321 -45.232 -44.389 -43.012 -41.456 -39.955 -38.607 -37.432 -36.426 -35.574 -34.859 -34.269 -33.790 -33.414 -33.131 -32.936 -32.823 -32.789 -32.830 -32.943 -33.128 -33.383 -33.708 -34.103 -34.571 -35.111 -35.728 -36.422 -37.199 -38.062 -39.019 -40.076 -41.241 -42.524 -43.939 -45.497 -47.214 -49.107 -51.186 -53.454 -55.881 -58.375 -60.719 -62.532 -63.355 -62.935 -61.463 -59.415 -57.209 -55.075 -53.110 -51.339 -49.760 -48.358 -47.116 -46.020 -45.055 -44.208 -43.471 -42.833 -42.288 -41.830 -41.454 -41.156 -40.932 -40.781 -40.700 -40.689 -40.746 -40.871 -41.066 -41.330 -41.666 -42.075 -42.562 -43.129 -43.782 -44.526 -45.370 -46.321 -47.391 -48.593 -49.940 -51.446 -53.122 -54.959 -56.905 -58.806 -60.376 -61.326 -61.650 -61.658 -61.706 -62.049 -62.879 -64.431 -67.127 -71.498 -71.964 -66.414 -61.718 -58.296 -55.653 -53.510 -51.720 -50.193 -48.876 -47.729 -46.726 -45.846 -45.074 -44.398 -43.810 -43.301 -42.867 -42.502 -42.203 -41.966 -41.789 -41.670 -41.607 -41.600 -41.647 -41.748 -41.903 -42.112 -42.377 -42.697 -43.074 -43.510 -44.008 -44.570 -45.199 -45.899 -46.677 -47.537 -48.489 -49.541 -50.660 -51.780 -52.900 0.03 -17.9648 -17.6109 -17.2605 -16.9136 -16.5703 -16.2305 -15.8942 -15.5614 -15.2321 -14.9064 -14.5842 -14.2655 -13.9503 -13.6386 -13.3305 -13.0258 -12.7247 -12.4272 -12.1331 -11.8426 -11.5555 -11.272 -10.9921 -10.7156 -10.4427 -10.1733 -9.9074 -9.645 -9.3861 -9.1308 -8.879 -8.6307 -8.3859 -8.1446 -7.9069 -7.6727 -7.442 -7.2148 -6.9912 -6.771 -6.5544 -6.3413 -6.1318 -5.9257 -5.7232 -5.5242 -5.3287 -5.1367 -4.9483 -4.7633 -4.5819 -4.404 -4.2297 -4.0588 -3.8915 -3.7277 -3.5674 -3.4106 -3.2574 -3.1077 -2.9615 -2.8188 -2.6796 -2.544 -2.4119 -2.2833 -2.1582 -2.0366 -1.9186 -1.804 -1.693 -1.5856 -1.4816 -1.3812 -1.2842 -1.1908 -1.101 -1.0146 -0.93177 -0.85246 -0.77666 -0.70438 -0.63563 -0.57039 -0.50868 -0.45048 -0.39581 -0.34465 -0.29702 -0.2529 -0.21231 -0.17524 -0.14169 -0.11165 -0.085142 -0.062151 -0.04268 -0.026729 -0.014299 -0.0053894 0 0.0018691 0.00021775 -0.0049539 -0.013646 -0.025858 -0.041591 -0.060844 -0.083618 -0.10991 -0.13973 -0.17306 -0.20992 -0.25029 -0.29419 -0.3416 -0.39254 -0.447 -0.50497 -0.56647 -0.63149 -0.70003 -0.77209 -0.84767 -0.92677 -1.0094 -1.0955 -1.1852 -1.2784 -1.3751 -1.4753 -1.579 -1.6863 -1.7971 -1.9114 -2.0292 -2.1506 -2.2754 -2.4038 -2.5357 -2.6711 -2.8101 -2.9525 -3.0985 -3.248 -3.4011 -3.5576 -3.7177 -3.8813 -4.0484 -4.219 -4.3932 -4.5708 -4.752 -4.9367 -5.125 -5.3167 -5.512 -5.7108 -5.9131 -6.1189 -6.3283 -6.5411 -6.7575 -6.9775 -7.2009 -7.4278 -7.6583 -7.8923 -8.1298 -8.3709 -8.6154 -8.8635 -9.1151 -9.3702 -9.6289 -9.891 -10.1567 -10.4259 -10.6986 -10.9749 -11.2546 -11.5379 -11.8247 -12.115 -12.4089 -12.7062 -13.0071 -13.3115 -13.6194 -13.9309 -14.2459 -14.5643 -14.8863 -15.2119 -15.5409 -15.8735 -16.2096 -16.5492 -16.8923 -17.239 1.0 43505.68 WV1 HH 20.18 21.55 0.05 -4.376e+10 2.900e+12 -4.027e+10 3.118e+12 -3.586e+10 3.332e+12 -3.057e+10 3.541e+12 -2.443e+10 3.743e+12 -1.754e+10 3.933e+12 -9.962e+09 4.111e+12 -1.817e+09 4.274e+12 6.752e+09 4.419e+12 1.561e+10 4.545e+12 2.460e+10 4.649e+12 3.354e+10 4.729e+12 4.226e+10 4.784e+12 5.060e+10 4.813e+12 5.836e+10 4.815e+12 6.538e+10 4.789e+12 7.152e+10 4.734e+12 7.662e+10 4.653e+12 8.060e+10 4.544e+12 8.336e+10 4.410e+12 8.491e+10 4.252e+12 8.546e+10 4.071e+12 8.474e+10 3.870e+12 8.272e+10 3.652e+12 7.947e+10 3.419e+12 7.509e+10 3.175e+12 6.972e+10 2.922e+12 6.351e+10 2.664e+12 5.665e+10 2.405e+12 4.935e+10 2.148e+12 4.182e+10 1.896e+12 3.427e+10 1.653e+12 2.691e+10 1.420e+12 1.997e+10 1.203e+12 1.361e+10 1.001e+12 8.004e+09 8.170e+11 3.272e+09 6.528e+11 -5.090e+08 5.088e+11 -3.300e+09 3.853e+11 -5.115e+09 2.821e+11 -6.022e+09 1.984e+11 -6.134e+09 1.327e+11 -5.611e+09 8.353e+10 -4.647e+09 4.854e+10 -3.454e+09 2.535e+10 -2.248e+09 1.140e+10 -1.216e+09 4.083e+09 -4.936e+08 9.935e+08 -1.203e+08 1.041e+08 3.854e+06 -8.091e+06 1.683e+08 1.002e+08 9.136e+08 1.009e+09 3.099e+09 4.740e+09 7.979e+09 1.507e+10 1.727e+10 3.784e+10 3.324e+10 8.132e+10 5.887e+10 1.566e+11 9.776e+10 2.777e+11 1.545e+11 4.623e+11 2.346e+11 7.320e+11 3.444e+11 1.112e+12 4.919e+11 1.632e+12 6.860e+11 2.327e+12 9.367e+11 3.236e+12 1.256e+12 4.403e+12 1.658e+12 5.880e+12 2.156e+12 7.718e+12 2.767e+12 9.979e+12 3.513e+12 1.274e+13 4.411e+12 1.606e+13 5.483e+12 2.002e+13 6.755e+12 2.469e+13 8.248e+12 3.017e+13 9.993e+12 3.654e+13 1.202e+13 4.389e+13 1.435e+13 5.232e+13 1.703e+13 6.192e+13 2.008e+13 7.280e+13 2.354e+13 8.504e+13 2.744e+13 9.875e+13 3.183e+13 1.140e+14 3.673e+13 1.310e+14 4.218e+13 1.497e+14 4.823e+13 1.702e+14 5.490e+13 1.927e+14 6.222e+13 2.171e+14 7.025e+13 2.437e+14 7.900e+13 2.723e+14 8.851e+13 3.031e+14 9.881e+13 3.362e+14 1.099e+14 3.715e+14 1.219e+14 4.090e+14 1.347e+14 4.488e+14 1.483e+14 4.909e+14 1.629e+14 5.352e+14 1.783e+14 5.817e+14 1.946e+14 6.303e+14 2.118e+14 6.809e+14 2.299e+14 7.335e+14 2.488e+14 7.880e+14 2.686e+14 8.442e+14 2.891e+14 9.023e+14 3.104e+14 9.618e+14 3.324e+14 1.023e+15 3.551e+14 1.085e+15 3.784e+14 1.148e+15 4.022e+14 1.211e+15 4.265e+14 1.275e+15 4.513e+14 1.339e+15 4.763e+14 1.404e+15 5.016e+14 1.468e+15 5.271e+14 1.531e+15 5.526e+14 1.594e+15 5.781e+14 1.655e+15 6.034e+14 1.715e+15 6.284e+14 1.774e+15 6.531e+14 1.831e+15 6.773e+14 1.885e+15 7.008e+14 1.937e+15 7.237e+14 1.986e+15 7.458e+14 2.033e+15 7.670e+14 2.076e+15 7.871e+14 2.116e+15 8.062e+14 2.152e+15 8.239e+14 2.184e+15 8.404e+14 2.212e+15 8.555e+14 2.237e+15 8.691e+14 2.257e+15 8.811e+14 2.272e+15 8.915e+14 2.283e+15 9.002e+14 2.290e+15 9.072e+14 2.292e+15 9.124e+14 2.290e+15 9.159e+14 2.283e+15 9.174e+14 2.271e+15 9.172e+14 2.256e+15 9.151e+14 2.235e+15 9.112e+14 2.211e+15 9.054e+14 2.182e+15 8.979e+14 2.150e+15 8.888e+14 2.114e+15 8.782e+14 2.074e+15 8.661e+14 2.032e+15 8.524e+14 1.986e+15 8.371e+14 1.937e+15 8.204e+14 1.886e+15 8.024e+14 1.832e+15 7.830e+14 1.775e+15 7.624e+14 1.717e+15 7.408e+14 1.657e+15 7.182e+14 1.596e+15 6.947e+14 1.533e+15 6.705e+14 1.470e+15 6.456e+14 1.406e+15 6.202e+14 1.342e+15 5.944e+14 1.278e+15 5.683e+14 1.213e+15 5.420e+14 1.150e+15 5.157e+14 1.087e+15 4.894e+14 1.025e+15 4.632e+14 9.637e+14 4.373e+14 9.039e+14 4.118e+14 8.456e+14 3.866e+14 7.890e+14 3.620e+14 7.341e+14 3.380e+14 6.811e+14 3.147e+14 6.301e+14 2.921e+14 5.812e+14 2.703e+14 5.344e+14 2.494e+14 4.899e+14 2.293e+14 4.476e+14 2.101e+14 4.077e+14 1.919e+14 3.700e+14 1.746e+14 3.346e+14 1.583e+14 3.015e+14 1.430e+14 2.707e+14 1.287e+14 2.420e+14 1.153e+14 2.155e+14 1.029e+14 1.911e+14 9.144e+13 1.688e+14 8.088e+13 1.483e+14 7.120e+13 1.297e+14 6.237e+13 1.128e+14 5.435e+13 9.766e+13 4.710e+13 8.406e+13 4.058e+13 7.192e+13 3.475e+13 6.115e+13 2.956e+13 5.166e+13 2.497e+13 4.333e+13 2.094e+13 3.606e+13 1.742e+13 2.978e+13 1.437e+13 2.438e+13 1.174e+13 1.977e+13 9.500e+12 1.587e+13 7.604e+12 1.260e+13 6.014e+12 9.884e+12 4.695e+12 7.650e+12 3.612e+12 5.833e+12 2.734e+12 4.374e+12 2.033e+12 3.220e+12 1.480e+12 2.320e+12 1.053e+12 1.631e+12 7.287e+11 1.115e+12 4.883e+11 7.372e+11 3.150e+11 4.682e+11 1.940e+11 2.833e+11 1.127e+11 1.612e+11 6.084e+10 8.482e+10 2.980e+10 4.021e+10 1.275e+10 1.646e+10 4.471e+09 5.411e+09 1.142e+09 1.245e+09 1.638e+08 1.456e+08 4.914e+06 2.866e+06 2.118e+07 8.844e+07 2.933e+08 7.690e+08 1.469e+09 3.236e+09 4.610e+09 9.253e+09 1.107e+10 2.095e+10 2.233e+10 4.060e+10 3.995e+10 7.046e+10 6.541e+10 1.127e+11 1.001e+11 1.691e+11 1.450e+11 2.412e+11 2.013e+11 3.301e+11 2.693e+11 4.362e+11 3.493e+11 5.596e+11 4.414e+11 7.001e+11 5.450e+11 8.565e+11 6.593e+11 1.027e+12 7.834e+11 1.211e+12 9.160e+11 1.406e+12 1.055e+12 1.608e+12 1.200e+12 1.816e+12 1.347e+12 2.026e+12 1.496e+12 2.235e+12 1.643e+12 2.441e+12 1.787e+12 2.640e+12 1.926e+12 2.830e+12 2.057e+12 3.007e+12 2.180e+12 3.170e+12 2.291e+12 3.315e+12 2.389e+12 3.441e+12 2.474e+12 3.547e+12 2.544e+12 3.631e+12 2.598e+12 3.691e+12 2.635e+12 3.729e+12 2.656e+12 3.743e+12 2.660e+12 3.733e+12 2.647e+12 3.701e+12 2.618e+12 3.647e+12 2.574e+12 3.572e+12 2.515e+12 3.479e+12 2.443e+12 3.367e+12 2.358e+12 3.240e+12 2.263e+12 3.100e+12 2.158e+12 2.948e+12 2.046e+12 2.786e+12 1.927e+12 2.618e+12 1.804e+12 2.444e+12 1.678e+12 2.268e+12 1.551e+12 2.091e+12 1.423e+12 1.916e+12 1.297e+12 1.743e+12 1.174e+12 1.575e+12 1.055e+12 1.412e+12 9.398e+11 1.257e+12 8.308e+11 1.110e+12 7.281e+11 9.725e+11 6.323e+11 8.444e+11 5.439e+11 7.264e+11 4.631e+11 6.189e+11 3.899e+11 5.217e+11 3.245e+11 4.349e+11 2.667e+11 3.582e+11 2.161e+11 2.911e+11 1.724e+11 2.332e+11 1.353e+11 1.839e+11 1.041e+11 1.425e+11 7.850e+10 1.082e+11 5.776e+10 8.041e+10 4.131e+10 5.822e+10 2.860e+10 4.093e+10 1.905e+10 2.780e+10 1.210e+10 1.810e+10 7.244e+09 1.120e+10 4.023e+09 6.508e+09 2.017e+09 3.477e+09 8.767e+08 1.663e+09 3.050e+08 6.781e+08 7.054e+07 2.158e+08 4.687e+06 4.509e+07 -1.924e+06 4.197e+06 -2.749e+05 -3.597e+05 8.371e+06 -4.104e+05 7.119e+07 2.406e+07 2.751e+08 1.406e+08 7.386e+08 4.535e+08 1.605e+09 1.095e+09 3.036e+09 2.219e+09 5.161e+09 4.101e+09 8.255e+09 6.680e+09 1.239e+10 1.029e+10 1.772e+10 1.503e+10 2.440e+10 2.103e+10 3.252e+10 2.839e+10 4.214e+10 3.717e+10 5.330e+10 4.741e+10 6.602e+10 5.912e+10 8.022e+10 7.224e+10 9.585e+10 8.670e+10 1.128e+11 1.024e+11 1.309e+11 1.192e+11 1.500e+11 1.369e+11 1.698e+11 1.553e+11 1.901e+11 1.741e+11 2.107e+11 1.932e+11 2.313e+11 2.123e+11 2.516e+11 2.310e+11 2.712e+11 2.492e+11 2.900e+11 2.665e+11 3.076e+11 2.828e+11 3.238e+11 2.977e+11 3.383e+11 3.111e+11 3.509e+11 3.228e+11 3.615e+11 3.326e+11 3.699e+11 3.404e+11 3.759e+11 3.460e+11 3.795e+11 3.495e+11 3.807e+11 3.507e+11 3.794e+11 3.497e+11 3.758e+11 3.466e+11 3.698e+11 3.413e+11 3.616e+11 3.341e+11 3.513e+11 3.250e+11 3.392e+11 3.142e+11 3.253e+11 3.018e+11 3.100e+11 2.881e+11 2.935e+11 2.733e+11 2.760e+11 2.576e+11 2.577e+11 2.412e+11 2.390e+11 2.243e+11 2.201e+11 2.072e+11 2.012e+11 1.900e+11 1.824e+11 1.730e+11 1.641e+11 1.563e+11 1.463e+11 1.400e+11 1.293e+11 1.244e+11 1.132e+11 1.096e+11 9.812e+10 9.562e+10 8.413e+10 8.259e+10 7.131e+10 7.059e+10 5.970e+10 5.965e+10 4.930e+10 4.977e+10 4.012e+10 4.099e+10 3.212e+10 3.325e+10 2.525e+10 2.654e+10 1.945e+10 2.081e+10 1.464e+10 1.599e+10 1.073e+10 1.200e+10 7.621e+09 8.773e+09 5.219e+09 6.218e+09 3.418e+09 4.248e+09 2.120e+09 2.778e+09 1.225e+09 1.719e+09 6.443e+08 9.924e+08 2.969e+08 5.226e+08 1.111e+08 2.420e+08 2.802e+07 9.267e+07 1.044e+06 2.617e+07 -3.148e+06 4.059e+06 -2.452e+06 -1.693e+06 3.217e+05 -4.867e+06 1.154e+07 -8.110e+06 4.903e+07 -8.452e+06 1.444e+08 7.175e+06 3.388e+08 6.128e+07 6.806e+08 1.832e+08 1.223e+09 4.073e+08 2.025e+09 7.723e+08 3.145e+09 1.319e+09 4.640e+09 2.089e+09 6.569e+09 3.123e+09 8.979e+09 4.458e+09 1.191e+10 6.128e+09 1.541e+10 8.162e+09 1.949e+10 1.058e+10 2.416e+10 1.340e+10 2.943e+10 1.662e+10 3.528e+10 2.025e+10 4.168e+10 2.426e+10 4.860e+10 2.864e+10 5.598e+10 3.336e+10 6.375e+10 3.838e+10 7.185e+10 4.365e+10 8.018e+10 4.912e+10 8.864e+10 5.472e+10 9.714e+10 6.040e+10 1.056e+11 6.609e+10 1.138e+11 7.170e+10 1.218e+11 7.718e+10 1.294e+11 8.245e+10 1.365e+11 8.744e+10 1.430e+11 9.209e+10 1.488e+11 9.633e+10 1.539e+11 1.001e+11 1.581e+11 1.034e+11 1.615e+11 1.061e+11 1.639e+11 1.082e+11 1.654e+11 1.097e+11 1.659e+11 1.106e+11 1.655e+11 1.108e+11 1.641e+11 1.104e+11 1.617e+11 1.094e+11 1.585e+11 1.077e+11 1.544e+11 1.055e+11 1.495e+11 1.028e+11 1.440e+11 9.949e+10 1.378e+11 9.577e+10 1.310e+11 9.165e+10 1.239e+11 8.717e+10 1.163e+11 8.239e+10 1.086e+11 7.738e+10 1.006e+11 7.222e+10 9.260e+10 6.696e+10 8.461e+10 6.167e+10 7.673e+10 5.640e+10 6.903e+10 5.121e+10 6.160e+10 4.615e+10 5.449e+10 4.126e+10 4.775e+10 3.659e+10 4.144e+10 3.216e+10 3.559e+10 2.801e+10 3.023e+10 2.416e+10 2.536e+10 2.062e+10 2.100e+10 1.740e+10 1.713e+10 1.450e+10 1.376e+10 1.193e+10 1.086e+10 9.673e+09 8.398e+09 7.717e+09 6.351e+09 6.047e+09 4.681e+09 4.645e+09 3.347e+09 3.486e+09 2.309e+09 2.549e+09 1.527e+09 1.808e+09 9.561e+08 1.236e+09 5.589e+08 8.090e+08 2.976e+08 5.016e+08 1.379e+08 2.903e+08 5.030e+07 1.537e+08 9.479e+06 7.218e+07 -4.669e+06 2.868e+07 -6.797e+06 8.732e+06 -5.611e+06 4.653e+05 -3.688e+06 -4.256e+06 6.898e+05 -9.842e+06 1.319e+07 -1.880e+07 4.445e+07 -3.178e+07 1.095e+08 -4.683e+07 2.263e+08 -5.967e+07 4.157e+08 -6.420e+07 6.998e+08 -5.293e+07 1.101e+09 -1.739e+07 1.643e+09 5.157e+07 2.347e+09 1.632e+08 3.233e+09 3.265e+08 4.320e+09 5.501e+08 5.620e+09 8.414e+08 7.145e+09 1.207e+09 8.902e+09 1.651e+09 1.089e+10 2.177e+09 1.311e+10 2.787e+09 1.555e+10 3.479e+09 1.819e+10 4.250e+09 2.102e+10 5.095e+09 2.402e+10 6.009e+09 2.715e+10 6.981e+09 3.038e+10 8.000e+09 3.369e+10 9.057e+09 3.701e+10 1.014e+10 4.033e+10 1.122e+10 4.358e+10 1.230e+10 4.674e+10 1.336e+10 4.976e+10 1.439e+10 5.259e+10 1.536e+10 5.520e+10 1.626e+10 5.755e+10 1.709e+10 5.961e+10 1.782e+10 6.134e+10 1.846e+10 6.272e+10 1.898e+10 6.374e+10 1.938e+10 6.438e+10 1.966e+10 6.463e+10 1.981e+10 6.449e+10 1.984e+10 6.396e+10 1.974e+10 6.305e+10 1.951e+10 6.179e+10 1.917e+10 6.018e+10 1.872e+10 5.826e+10 1.816e+10 5.606e+10 1.751e+10 5.360e+10 1.677e+10 5.093e+10 1.597e+10 4.808e+10 1.511e+10 4.510e+10 1.419e+10 4.201e+10 1.325e+10 3.885e+10 1.228e+10 3.568e+10 1.130e+10 3.251e+10 1.032e+10 2.940e+10 9.356e+09 2.636e+10 8.411e+09 2.344e+10 7.499e+09 2.065e+10 6.627e+09 1.801e+10 5.800e+09 1.555e+10 5.027e+09 1.328e+10 4.310e+09 1.121e+10 3.653e+09 9.334e+09 3.058e+09 7.664e+09 2.525e+09 6.194e+09 2.053e+09 4.921e+09 1.643e+09 3.833e+09 1.290e+09 2.920e+09 9.921e+08 2.169e+09 7.451e+08 1.565e+09 5.444e+08 1.090e+09 3.850e+08 7.276e+08 2.621e+08 4.614e+08 1.702e+08 2.737e+08 1.042e+08 1.489e+08 5.914e+07 7.162e+07 3.028e+07 2.857e+07 1.335e+07 8.227e+06 4.639e+06 1.092e+06 1.018e+06 -1.109e+05 1.518e+05 -5.745e+05 4.954e+04 -3.843e+05 -1.163e+04 1.750e+04 1.756e+04 2.497e+06 6.417e+05 1.293e+07 3.275e+06 3.862e+07 9.988e+06 8.859e+07 2.343e+07 1.734e+08 4.677e+07 3.047e+08 8.360e+07 4.947e+08 1.377e+08 7.560e+08 2.130e+08 1.101e+09 3.137e+08 1.542e+09 4.434e+08 2.088e+09 6.057e+08 2.751e+09 8.040e+08 3.535e+09 1.041e+09 4.448e+09 1.317e+09 5.492e+09 1.636e+09 6.667e+09 1.997e+09 7.970e+09 2.399e+09 9.397e+09 2.842e+09 1.094e+10 3.323e+09 1.258e+10 3.838e+09 1.431e+10 4.384e+09 1.612e+10 4.956e+09 1.798e+10 5.548e+09 1.988e+10 6.154e+09 2.178e+10 6.767e+09 2.368e+10 7.380e+09 2.554e+10 7.985e+09 2.735e+10 8.576e+09 2.908e+10 9.143e+09 3.070e+10 9.681e+09 3.220e+10 1.018e+10 3.356e+10 1.064e+10 3.475e+10 1.105e+10 3.577e+10 1.140e+10 3.659e+10 1.169e+10 3.722e+10 1.192e+10 3.763e+10 1.208e+10 3.784e+10 1.218e+10 3.783e+10 1.221e+10 3.760e+10 1.217e+10 3.717e+10 1.206e+10 3.654e+10 1.189e+10 3.571e+10 1.165e+10 3.471e+10 1.136e+10 3.354e+10 1.101e+10 3.223e+10 1.061e+10 3.079e+10 1.016e+10 2.924e+10 9.683e+09 2.759e+10 9.171e+09 2.587e+10 8.635e+09 2.411e+10 8.081e+09 2.231e+10 7.516e+09 2.050e+10 6.946e+09 1.871e+10 6.378e+09 1.695e+10 5.816e+09 1.523e+10 5.267e+09 1.358e+10 4.734e+09 1.199e+10 4.223e+09 1.050e+10 3.736e+09 9.102e+09 3.278e+09 7.807e+09 2.849e+09 6.622e+09 2.453e+09 5.548e+09 2.090e+09 4.586e+09 1.761e+09 0.005 -53.924 -52.851 -51.777 -50.704 -49.632 -48.671 -47.811 -47.043 -46.360 -45.758 -45.230 -44.774 -44.387 -44.066 -43.809 -43.616 -43.485 -43.416 -43.410 -43.466 -43.587 -43.773 -44.027 -44.352 -44.752 -45.230 -45.792 -46.445 -47.198 -48.060 -49.047 -50.173 -51.463 -52.945 -54.661 -56.671 -59.064 -61.992 -65.733 -70.946 -80.309 -85.505 -81.971 -78.618 -76.486 -72.500 -67.715 -63.503 -60.027 -57.129 -54.667 -52.540 -50.679 -49.036 -47.576 -46.270 -45.100 -44.048 -43.104 -42.256 -41.497 -40.820 -40.219 -39.691 -39.233 -38.840 -38.511 -38.244 -38.038 -37.892 -37.807 -37.782 -37.817 -37.913 -38.071 -38.293 -38.580 -38.937 -39.365 -39.868 -40.451 -41.120 -41.879 -42.736 -43.699 -44.776 -45.976 -47.307 -48.776 -50.388 -52.139 -54.021 -56.026 -58.164 -60.487 -62.960 -64.699 -63.847 -60.524 -56.852 -53.651 -50.922 -48.567 -46.507 -44.688 -43.068 -41.618 -40.314 -39.141 -38.084 -37.132 -36.277 -35.512 -34.832 -34.231 -33.707 -33.258 -32.880 -32.574 -32.338 -32.172 -32.079 -32.058 -32.113 -32.246 -32.462 -32.766 -33.165 -33.667 -34.284 -35.029 -35.921 -36.982 -38.246 -39.754 -41.567 -43.765 -46.433 -49.545 -52.483 -53.632 -52.914 -52.214 -52.558 -54.541 -57.443 -54.678 -47.739 -42.645 -38.736 -35.540 -32.817 -30.436 -28.314 -26.396 -24.647 -23.039 -21.550 -20.166 -18.872 -17.661 -16.522 -15.449 -14.437 -13.480 -12.574 -11.716 -10.903 -10.131 -9.399 -8.703 -8.044 -7.417 -6.823 -6.260 -5.726 -5.221 -4.743 -4.292 -3.866 -3.466 -3.089 -2.737 -2.408 -2.101 -1.816 -1.554 -1.313 -1.092 -0.893 -0.714 -0.556 -0.417 -0.299 -0.200 -0.121 -0.062 -0.022 -0.001 0.000 -0.018 -0.055 -0.112 -0.188 -0.284 -0.400 -0.536 -0.692 -0.868 -1.065 -1.283 -1.522 -1.782 -2.065 -2.370 -2.698 -3.049 -3.425 -3.825 -4.250 -4.702 -5.181 -5.687 -6.223 -6.790 -7.388 -8.019 -8.685 -9.388 -10.130 -10.913 -11.741 -12.617 -13.544 -14.527 -15.571 -16.683 -17.870 -19.142 -20.511 -21.993 -23.607 -25.382 -27.356 -29.588 -32.171 -35.273 -39.237 -45.003 -56.826 -53.498 -47.243 -44.133 -42.673 -42.083 -42.089 -42.572 -43.449 -44.580 -45.584 -45.747 -44.672 -42.853 -40.927 -39.177 -37.667 -36.387 -35.307 -34.399 -33.639 -33.009 -32.495 -32.085 -31.769 -31.541 -31.394 -31.323 -31.326 -31.399 -31.541 -31.750 -32.025 -32.366 -32.775 -33.251 -33.797 -34.414 -35.106 -35.877 -36.731 -37.674 -38.713 -39.857 -41.117 -42.505 -44.039 -45.737 -47.626 -49.734 -52.097 -54.742 -57.660 -60.681 -63.238 -64.464 -64.120 -62.776 -60.977 -58.985 -56.952 -54.990 -53.166 -51.507 -50.020 -48.697 -47.528 -46.499 -45.598 -44.815 -44.140 -43.566 -43.085 -42.693 -42.384 -42.155 -42.003 -41.926 -41.922 -41.991 -42.132 -42.345 -42.631 -42.993 -43.432 -43.950 -44.550 -45.236 -46.013 -46.884 -47.855 -48.928 -50.106 -51.384 -52.750 -54.173 -55.604 -56.967 -58.186 -59.223 -60.116 -60.990 -62.034 -63.499 -65.767 -69.420 -72.484 -70.023 -64.310 -60.178 -57.096 -54.647 -52.620 -50.899 -49.413 -48.115 -46.974 -45.965 -45.072 -44.281 -43.582 -42.965 -42.425 -41.956 -41.554 -41.214 -40.934 -40.710 -40.542 -40.427 -40.364 -40.352 -40.391 -40.479 -40.617 -40.805 -41.044 -41.333 -41.673 -42.067 -42.516 -43.020 -43.583 -44.208 -44.897 -45.654 -46.485 -47.394 -48.388 -49.384 -50.379 -51.374 0 1 1.0 7272785388.14 WV1 VV 20.18 21.55 0.05 2.828e+12 -1.568e+12 3.015e+12 -1.648e+12 3.196e+12 -1.723e+12 3.369e+12 -1.791e+12 3.533e+12 -1.852e+12 3.685e+12 -1.905e+12 3.824e+12 -1.949e+12 3.946e+12 -1.984e+12 4.050e+12 -2.009e+12 4.135e+12 -2.023e+12 4.199e+12 -2.026e+12 4.241e+12 -2.019e+12 4.260e+12 -2.001e+12 4.254e+12 -1.972e+12 4.224e+12 -1.933e+12 4.170e+12 -1.883e+12 4.091e+12 -1.824e+12 3.990e+12 -1.757e+12 3.866e+12 -1.681e+12 3.721e+12 -1.598e+12 3.558e+12 -1.510e+12 3.378e+12 -1.416e+12 3.183e+12 -1.317e+12 2.976e+12 -1.217e+12 2.760e+12 -1.114e+12 2.537e+12 -1.011e+12 2.311e+12 -9.090e+11 2.084e+12 -8.088e+11 1.859e+12 -7.115e+11 1.640e+12 -6.183e+11 1.428e+12 -5.301e+11 1.227e+12 -4.477e+11 1.038e+12 -3.719e+11 8.630e+11 -3.032e+11 7.041e+11 -2.419e+11 5.622e+11 -1.884e+11 4.380e+11 -1.426e+11 3.315e+11 -1.043e+11 2.426e+11 -7.329e+10 1.705e+11 -4.901e+10 1.140e+11 -3.077e+10 7.167e+10 -1.778e+10 4.160e+10 -9.176e+09 2.169e+10 -3.988e+09 9.713e+09 -1.284e+09 3.453e+09 -1.830e+08 8.267e+08 7.264e+07 8.381e+07 3.936e+07 -4.790e+06 -7.460e+06 7.699e+07 -1.558e+08 8.238e+08 -9.253e+08 3.950e+09 -3.379e+09 1.268e+10 -9.199e+09 3.204e+10 -2.078e+10 6.907e+10 -4.125e+10 1.332e+11 -7.466e+10 2.368e+11 -1.260e+11 3.945e+11 -2.011e+11 6.248e+11 -3.069e+11 9.499e+11 -4.518e+11 1.395e+12 -6.445e+11 1.989e+12 -8.957e+11 2.768e+12 -1.217e+12 3.769e+12 -1.621e+12 5.034e+12 -2.121e+12 6.613e+12 -2.734e+12 8.555e+12 -3.473e+12 1.092e+13 -4.358e+12 1.378e+13 -5.410e+12 1.718e+13 -6.644e+12 2.121e+13 -8.082e+12 2.594e+13 -9.748e+12 3.145e+13 -1.166e+13 3.781e+13 -1.384e+13 4.513e+13 -1.632e+13 5.348e+13 -1.911e+13 6.296e+13 -2.224e+13 7.367e+13 -2.574e+13 8.568e+13 -2.963e+13 9.910e+13 -3.393e+13 1.140e+14 -3.867e+13 1.306e+14 -4.386e+13 1.488e+14 -4.953e+13 1.688e+14 -5.570e+13 1.906e+14 -6.237e+13 2.144e+14 -6.957e+13 2.402e+14 -7.732e+13 2.680e+14 -8.560e+13 2.980e+14 -9.444e+13 3.301e+14 -1.038e+14 3.645e+14 -1.138e+14 4.010e+14 -1.243e+14 4.398e+14 -1.353e+14 4.808e+14 -1.468e+14 5.241e+14 -1.588e+14 5.695e+14 -1.713e+14 6.170e+14 -1.843e+14 6.666e+14 -1.976e+14 7.181e+14 -2.113e+14 7.716e+14 -2.254e+14 8.268e+14 -2.397e+14 8.838e+14 -2.542e+14 9.422e+14 -2.689e+14 1.002e+15 -2.838e+14 1.063e+15 -2.986e+14 1.125e+15 -3.135e+14 1.188e+15 -3.284e+14 1.251e+15 -3.431e+14 1.315e+15 -3.576e+14 1.378e+15 -3.719e+14 1.442e+15 -3.858e+14 1.505e+15 -3.994e+14 1.567e+15 -4.126e+14 1.629e+15 -4.253e+14 1.689e+15 -4.375e+14 1.748e+15 -4.491e+14 1.805e+15 -4.600e+14 1.861e+15 -4.703e+14 1.914e+15 -4.799e+14 1.964e+15 -4.887e+14 2.012e+15 -4.967e+14 2.057e+15 -5.039e+14 2.099e+15 -5.102e+14 2.138e+15 -5.156e+14 2.173e+15 -5.202e+14 2.204e+15 -5.237e+14 2.232e+15 -5.264e+14 2.255e+15 -5.280e+14 2.275e+15 -5.287e+14 2.290e+15 -5.284e+14 2.301e+15 -5.271e+14 2.307e+15 -5.249e+14 2.309e+15 -5.216e+14 2.307e+15 -5.174e+14 2.300e+15 -5.122e+14 2.289e+15 -5.061e+14 2.273e+15 -4.991e+14 2.253e+15 -4.912e+14 2.229e+15 -4.825e+14 2.201e+15 -4.729e+14 2.169e+15 -4.626e+14 2.133e+15 -4.517e+14 2.094e+15 -4.402e+14 2.051e+15 -4.280e+14 2.006e+15 -4.153e+14 1.957e+15 -4.021e+14 1.905e+15 -3.885e+14 1.851e+15 -3.745e+14 1.794e+15 -3.602e+14 1.736e+15 -3.457e+14 1.676e+15 -3.311e+14 1.614e+15 -3.163e+14 1.552e+15 -3.015e+14 1.488e+15 -2.867e+14 1.424e+15 -2.721e+14 1.359e+15 -2.576e+14 1.295e+15 -2.433e+14 1.231e+15 -2.292e+14 1.167e+15 -2.155e+14 1.103e+15 -2.021e+14 1.041e+15 -1.890e+14 9.797e+14 -1.764e+14 9.197e+14 -1.643e+14 8.612e+14 -1.526e+14 8.043e+14 -1.413e+14 7.491e+14 -1.306e+14 6.959e+14 -1.204e+14 6.446e+14 -1.106e+14 5.953e+14 -1.014e+14 5.482e+14 -9.274e+13 5.033e+14 -8.454e+13 4.606e+14 -7.685e+13 4.202e+14 -6.965e+13 3.821e+14 -6.292e+13 3.462e+14 -5.666e+13 3.126e+14 -5.085e+13 2.811e+14 -4.548e+13 2.519e+14 -4.053e+13 2.248e+14 -3.598e+13 1.998e+14 -3.182e+13 1.767e+14 -2.802e+13 1.556e+14 -2.458e+13 1.364e+14 -2.146e+13 1.189e+14 -1.865e+13 1.031e+14 -1.613e+13 8.888e+13 -1.387e+13 7.618e+13 -1.186e+13 6.488e+13 -1.008e+13 5.488e+13 -8.515e+12 4.609e+13 -7.143e+12 3.841e+13 -5.950e+12 3.175e+13 -4.918e+12 2.601e+13 -4.032e+12 2.110e+13 -3.276e+12 1.694e+13 -2.637e+12 1.345e+13 -2.100e+12 1.054e+13 -1.655e+12 8.153e+12 -1.288e+12 6.208e+12 -9.883e+11 4.648e+12 -7.475e+11 3.413e+12 -5.560e+11 2.452e+12 -4.058e+11 1.718e+12 -2.900e+11 1.169e+12 -2.021e+11 7.680e+11 -1.369e+11 4.842e+11 -8.962e+10 2.901e+11 -5.628e+10 1.630e+11 -3.357e+10 8.438e+10 -1.875e+10 3.906e+10 -9.592e+09 1.544e+10 -4.338e+09 4.803e+09 -1.631e+09 9.985e+08 -4.511e+08 9.269e+07 -7.027e+07 2.061e+06 1.549e+06 1.557e+08 5.977e+07 1.176e+09 2.470e+08 4.583e+09 5.892e+08 1.253e+10 1.025e+09 2.756e+10 1.434e+09 5.236e+10 1.657e+09 8.967e+10 1.523e+09 1.420e+11 8.539e+08 2.116e+11 -5.191e+08 3.004e+11 -2.748e+09 4.097e+11 -5.955e+09 5.403e+11 -1.023e+10 6.926e+11 -1.564e+10 8.662e+11 -2.219e+10 1.060e+12 -2.987e+10 1.273e+12 -3.862e+10 1.504e+12 -4.835e+10 1.749e+12 -5.891e+10 2.006e+12 -7.015e+10 2.271e+12 -8.189e+10 2.542e+12 -9.389e+10 2.814e+12 -1.059e+11 3.084e+12 -1.178e+11 3.348e+12 -1.292e+11 3.602e+12 -1.399e+11 3.843e+12 -1.497e+11 4.066e+12 -1.584e+11 4.269e+12 -1.657e+11 4.449e+12 -1.716e+11 4.603e+12 -1.758e+11 4.729e+12 -1.784e+11 4.826e+12 -1.792e+11 4.892e+12 -1.783e+11 4.927e+12 -1.757e+11 4.931e+12 -1.714e+11 4.904e+12 -1.657e+11 4.847e+12 -1.587e+11 4.761e+12 -1.505e+11 4.649e+12 -1.413e+11 4.512e+12 -1.314e+11 4.353e+12 -1.210e+11 4.174e+12 -1.102e+11 3.978e+12 -9.933e+10 3.768e+12 -8.856e+10 3.548e+12 -7.806e+10 3.320e+12 -6.801e+10 3.088e+12 -5.855e+10 2.854e+12 -4.975e+10 2.621e+12 -4.168e+10 2.391e+12 -3.440e+10 2.166e+12 -2.793e+10 1.948e+12 -2.225e+10 1.739e+12 -1.737e+10 1.541e+12 -1.324e+10 1.354e+12 -9.806e+09 1.181e+12 -7.014e+09 1.020e+12 -4.794e+09 8.728e+11 -3.071e+09 7.396e+11 -1.778e+09 6.199e+11 -8.435e+08 5.135e+11 -1.996e+08 4.201e+11 2.120e+08 3.390e+11 4.468e+08 2.694e+11 5.518e+08 2.105e+11 5.657e+08 1.614e+11 5.214e+08 1.211e+11 4.442e+08 8.866e+10 3.534e+08 6.311e+10 2.625e+08 4.342e+10 1.805e+08 2.872e+10 1.127e+08 1.810e+10 6.108e+07 1.072e+10 2.530e+07 5.881e+09 3.631e+06 2.905e+09 -6.852e+06 1.237e+09 -9.474e+06 4.215e+08 -7.581e+06 9.853e+07 -4.123e+06 1.088e+07 -1.276e+06 3.444e+05 -1.647e+05 1.610e+06 -2.266e+05 3.563e+07 4.353e+05 2.003e+08 6.024e+06 6.592e+08 2.298e+07 1.630e+09 6.030e+07 3.367e+09 1.015e+08 6.188e+09 2.764e+08 1.035e+10 4.781e+08 1.615e+10 7.720e+08 2.385e+10 1.182e+09 3.371e+10 1.734e+09 4.590e+10 2.453e+09 6.058e+10 3.365e+09 7.785e+10 4.496e+09 9.768e+10 5.866e+09 1.201e+11 7.495e+09 1.449e+11 9.398e+09 1.719e+11 1.158e+10 2.009e+11 1.404e+10 2.317e+11 1.679e+10 2.637e+11 1.979e+10 2.967e+11 2.304e+10 3.302e+11 2.649e+10 3.637e+11 3.012e+10 3.969e+11 3.387e+10 4.293e+11 3.770e+10 4.604e+11 4.155e+10 4.897e+11 4.536e+10 5.170e+11 4.907e+10 5.419e+11 5.262e+10 5.639e+11 5.596e+10 5.829e+11 5.902e+10 5.986e+11 6.175e+10 6.109e+11 6.412e+10 6.195e+11 6.608e+10 6.246e+11 6.761e+10 6.259e+11 6.868e+10 6.236e+11 6.928e+10 6.178e+11 6.941e+10 6.085e+11 6.907e+10 5.959e+11 6.828e+10 5.802e+11 6.707e+10 5.617e+11 6.545e+10 5.406e+11 6.346e+10 5.173e+11 6.114e+10 4.920e+11 5.854e+10 4.650e+11 5.568e+10 4.368e+11 5.262e+10 4.077e+11 4.941e+10 3.778e+11 4.609e+10 3.477e+11 4.272e+10 3.177e+11 3.931e+10 2.880e+11 3.593e+10 2.590e+11 3.259e+10 2.309e+11 2.934e+10 2.040e+11 2.620e+10 1.785e+11 2.319e+10 1.546e+11 2.035e+10 1.325e+11 1.767e+10 1.121e+11 1.519e+10 9.373e+10 1.290e+10 7.724e+10 1.082e+10 6.269e+10 8.945e+09 5.003e+10 7.279e+09 3.917e+10 5.819e+09 3.004e+10 4.559e+09 2.249e+10 3.490e+09 1.638e+10 2.600e+09 1.155e+10 1.877e+09 7.849e+09 1.304e+09 5.094e+09 8.655e+08 3.126e+09 5.420e+08 1.787e+09 3.148e+08 9.291e+08 1.651e+08 4.242e+08 7.476e+07 1.594e+08 2.668e+07 4.330e+07 5.976e+06 6.263e+06 1.728e+05 -4.361e+05 -7.424e+05 -7.882e+05 -1.095e+06 1.773e+06 -1.075e+06 1.923e+07 -1.318e+05 8.373e+07 8.092e+06 2.422e+08 3.499e+07 5.532e+08 9.523e+07 1.084e+09 2.068e+08 1.908e+09 3.906e+08 3.102e+09 6.697e+08 4.743e+09 1.068e+09 6.903e+09 1.611e+09 9.652e+09 2.322e+09 1.305e+10 3.225e+09 1.715e+10 4.339e+09 2.199e+10 5.685e+09 2.760e+10 7.274e+09 3.399e+10 9.117e+09 4.116e+10 1.122e+10 4.909e+10 1.358e+10 5.775e+10 1.620e+10 6.709e+10 1.906e+10 7.705e+10 2.215e+10 8.754e+10 2.545e+10 9.848e+10 2.893e+10 1.097e+11 3.256e+10 1.212e+11 3.632e+10 1.328e+11 4.016e+10 1.443e+11 4.404e+10 1.556e+11 4.793e+10 1.666e+11 5.179e+10 1.771e+11 5.557e+10 1.869e+11 5.923e+10 1.960e+11 6.272e+10 2.041e+11 6.602e+10 2.112e+11 6.908e+10 2.172e+11 7.186e+10 2.219e+11 7.433e+10 2.253e+11 7.647e+10 2.273e+11 7.824e+10 2.279e+11 7.963e+10 2.271e+11 8.061e+10 2.249e+11 8.117e+10 2.213e+11 8.130e+10 2.165e+11 8.100e+10 2.104e+11 8.027e+10 2.031e+11 7.912e+10 1.949e+11 7.754e+10 1.858e+11 7.554e+10 1.759e+11 7.316e+10 1.654e+11 7.045e+10 1.545e+11 6.743e+10 1.433e+11 6.414e+10 1.319e+11 6.063e+10 1.205e+11 5.693e+10 1.093e+11 5.309e+10 9.831e+10 4.917e+10 8.769e+10 4.519e+10 7.754e+10 4.121e+10 6.794e+10 3.729e+10 5.894e+10 3.344e+10 5.061e+10 2.973e+10 4.298e+10 2.617e+10 3.606e+10 2.281e+10 2.987e+10 1.966e+10 2.440e+10 1.675e+10 1.961e+10 1.409e+10 1.549e+10 1.169e+10 1.201e+10 9.550e+09 9.094e+09 7.673e+09 6.714e+09 6.052e+09 4.809e+09 4.676e+09 3.321e+09 3.527e+09 2.193e+09 2.589e+09 1.368e+09 1.843e+09 7.896e+08 1.264e+09 4.072e+08 8.312e+08 1.725e+08 5.208e+08 4.216e+07 3.091e+08 -2.056e+07 1.738e+08 -4.542e+07 9.279e+07 -5.250e+07 4.537e+07 -5.102e+07 1.580e+07 -4.309e+07 -4.381e+06 -2.990e+07 -1.826e+07 -1.363e+07 -2.948e+07 1.053e+07 -4.634e+07 6.216e+07 -7.638e+07 1.710e+08 -1.203e+08 3.698e+08 -1.735e+08 6.935e+08 -2.286e+08 1.178e+09 -2.765e+08 1.861e+09 -3.062e+08 2.780e+09 -3.053e+08 3.967e+09 -2.604e+08 5.455e+09 -1.569e+08 7.272e+09 1.987e+07 9.438e+09 2.849e+08 1.196e+10 6.524e+08 1.486e+10 1.137e+09 1.813e+10 1.750e+09 2.175e+10 2.503e+09 2.571e+10 3.406e+09 2.997e+10 4.465e+09 3.451e+10 5.683e+09 3.928e+10 7.063e+09 4.422e+10 8.601e+09 4.928e+10 1.029e+10 5.440e+10 1.213e+10 5.951e+10 1.409e+10 6.455e+10 1.617e+10 6.945e+10 1.834e+10 7.414e+10 2.058e+10 7.857e+10 2.286e+10 8.268e+10 2.517e+10 8.640e+10 2.745e+10 8.970e+10 2.970e+10 9.253e+10 3.186e+10 9.486e+10 3.392e+10 9.665e+10 3.584e+10 9.790e+10 3.760e+10 9.859e+10 3.916e+10 9.872e+10 4.050e+10 9.829e+10 4.160e+10 9.731e+10 4.245e+10 9.581e+10 4.304e+10 9.380e+10 4.335e+10 9.132e+10 4.338e+10 8.841e+10 4.314e+10 8.509e+10 4.264e+10 8.142e+10 4.187e+10 7.746e+10 4.086e+10 7.324e+10 3.962e+10 6.881e+10 3.817e+10 6.424e+10 3.655e+10 5.958e+10 3.476e+10 5.486e+10 3.284e+10 5.015e+10 3.083e+10 4.550e+10 2.873e+10 4.094e+10 2.659e+10 3.652e+10 2.444e+10 3.229e+10 2.229e+10 2.826e+10 2.017e+10 2.448e+10 1.810e+10 2.097e+10 1.611e+10 1.773e+10 1.421e+10 1.480e+10 1.241e+10 1.217e+10 1.073e+10 9.838e+09 9.182e+09 7.809e+09 7.764e+09 6.069e+09 6.483e+09 4.603e+09 5.340e+09 3.393e+09 4.335e+09 2.417e+09 3.463e+09 1.649e+09 2.720e+09 1.065e+09 2.098e+09 6.342e+08 1.588e+09 3.306e+08 1.178e+09 1.275e+08 8.582e+08 2.274e+04 6.142e+08 -7.363e+07 4.325e+08 -1.104e+08 3.004e+08 -1.235e+08 2.042e+08 -1.203e+08 1.333e+08 -1.049e+08 8.091e+07 -8.036e+07 4.281e+07 -5.052e+07 1.717e+07 -2.181e+07 3.148e+06 -3.559e+06 -7.778e+05 7.964e+06 -4.525e+06 5.182e+07 -1.236e+07 1.517e+08 -1.765e+07 3.278e+08 -1.133e+07 6.008e+08 1.778e+07 9.917e+08 8.300e+07 1.522e+09 1.996e+08 2.211e+09 3.843e+08 3.076e+09 6.548e+08 4.136e+09 1.030e+09 5.400e+09 1.527e+09 6.880e+09 2.165e+09 8.582e+09 2.959e+09 1.051e+10 3.925e+09 1.265e+10 5.074e+09 1.502e+10 6.417e+09 1.758e+10 7.959e+09 2.033e+10 9.703e+09 2.325e+10 1.165e+10 2.632e+10 1.379e+10 2.950e+10 1.612e+10 3.277e+10 1.862e+10 3.610e+10 2.128e+10 3.944e+10 2.408e+10 4.277e+10 2.699e+10 4.604e+10 3.000e+10 4.921e+10 3.307e+10 5.225e+10 3.617e+10 5.511e+10 3.929e+10 5.777e+10 4.238e+10 6.018e+10 4.541e+10 6.232e+10 4.837e+10 6.415e+10 5.122e+10 6.565e+10 5.393e+10 6.680e+10 5.649e+10 6.758e+10 5.886e+10 6.799e+10 6.102e+10 6.801e+10 6.296e+10 6.764e+10 6.466e+10 6.691e+10 6.610e+10 6.579e+10 6.728e+10 6.432e+10 6.818e+10 6.251e+10 6.880e+10 6.038e+10 6.913e+10 5.795e+10 6.917e+10 5.526e+10 6.892e+10 5.234e+10 6.838e+10 4.923e+10 6.756e+10 4.596e+10 6.647e+10 4.257e+10 6.511e+10 3.911e+10 6.351e+10 3.560e+10 6.167e+10 3.209e+10 5.960e+10 2.862e+10 5.734e+10 2.522e+10 5.490e+10 2.191e+10 5.230e+10 1.873e+10 4.958e+10 1.571e+10 4.674e+10 1.287e+10 4.383e+10 0.005 -52.557 -51.461 -50.365 -49.270 -48.176 -47.189 -46.300 -45.500 -44.781 -44.139 -43.568 -43.065 -42.626 -42.248 -41.930 -41.670 -41.467 -41.319 -41.227 -41.189 -41.207 -41.281 -41.412 -41.600 -41.848 -42.158 -42.533 -42.975 -43.489 -44.080 -44.754 -45.518 -46.382 -47.355 -48.454 -49.696 -51.104 -52.709 -54.554 -56.695 -59.204 -62.153 -65.484 -68.505 -69.808 -69.373 -68.555 -68.140 -68.064 -67.723 -66.367 -63.998 -61.265 -58.656 -56.328 -54.288 -52.503 -50.937 -49.559 -48.342 -47.267 -46.319 -45.484 -44.753 -44.118 -43.572 -43.110 -42.729 -42.425 -42.197 -42.044 -41.965 -41.958 -42.025 -42.168 -42.387 -42.685 -43.065 -43.532 -44.089 -44.742 -45.497 -46.358 -47.331 -48.417 -49.611 -50.893 -52.220 -53.514 -54.661 -55.543 -56.100 -56.359 -56.402 -56.281 -55.967 -55.357 -54.351 -52.951 -51.276 -49.484 -47.697 -45.988 -44.388 -42.907 -41.547 -40.300 -39.161 -38.122 -37.176 -36.319 -35.543 -34.846 -34.225 -33.675 -33.194 -32.782 -32.438 -32.160 -31.949 -31.805 -31.730 -31.725 -31.793 -31.939 -32.165 -32.478 -32.885 -33.395 -34.020 -34.773 -35.673 -36.745 -38.017 -39.526 -41.313 -43.388 -45.627 -47.518 -48.181 -47.514 -46.427 -45.592 -45.270 -45.615 -46.875 -49.517 -52.769 -50.861 -44.431 -39.627 -35.960 -32.974 -30.434 -28.213 -26.234 -24.445 -22.812 -21.308 -19.916 -18.620 -17.409 -16.273 -15.205 -14.198 -13.249 -12.350 -11.501 -10.695 -9.932 -9.208 -8.522 -7.870 -7.253 -6.667 -6.112 -5.586 -5.089 -4.619 -4.175 -3.757 -3.364 -2.994 -2.649 -2.326 -2.026 -1.748 -1.492 -1.256 -1.042 -0.849 -0.675 -0.522 -0.389 -0.275 -0.182 -0.107 -0.052 -0.016 0.000 -0.003 -0.024 -0.065 -0.125 -0.204 -0.303 -0.421 -0.560 -0.718 -0.896 -1.095 -1.314 -1.555 -1.816 -2.099 -2.405 -2.732 -3.083 -3.458 -3.856 -4.280 -4.729 -5.204 -5.707 -6.238 -6.799 -7.391 -8.014 -8.671 -9.364 -10.094 -10.864 -11.675 -12.532 -13.437 -14.394 -15.408 -16.484 -17.628 -18.848 -20.154 -21.557 -23.073 -24.720 -26.524 -28.521 -30.761 -33.317 -36.299 -39.857 -44.034 -47.580 -47.748 -45.987 -44.451 -43.602 -43.340 -43.548 -44.130 -44.951 -45.733 -45.993 -45.340 -43.941 -42.269 -40.648 -39.202 -37.954 -36.891 -35.996 -35.248 -34.632 -34.133 -33.742 -33.449 -33.247 -33.130 -33.093 -33.134 -33.250 -33.439 -33.699 -34.031 -34.434 -34.908 -35.456 -36.079 -36.778 -37.555 -38.414 -39.357 -40.387 -41.504 -42.710 -44.002 -45.372 -46.808 -48.285 -49.768 -51.208 -52.537 -53.669 -54.482 -54.829 -54.591 -53.774 -52.525 -51.047 -49.506 -48.003 -46.585 -45.276 -44.077 -42.988 -42.004 -41.117 -40.322 -39.612 -38.983 -38.428 -37.945 -37.529 -37.177 -36.886 -36.655 -36.481 -36.362 -36.299 -36.289 -36.332 -36.428 -36.576 -36.779 -37.035 -37.345 -37.711 -38.134 -38.617 -39.161 -39.770 -40.446 -41.196 -42.022 -42.932 -43.934 -45.036 -46.249 -47.588 -49.071 -50.718 -52.561 -54.636 -56.997 -59.717 -62.901 -66.695 -71.263 -76.313 -79.443 -78.240 -74.567 -70.665 -67.078 -63.947 -61.261 -58.960 -56.978 -55.263 -53.770 -52.467 -51.327 -50.330 -49.459 -48.701 -48.045 -47.484 -47.009 -46.617 -46.300 -46.057 -45.884 -45.778 -45.739 -45.764 -45.854 -46.007 -46.225 -46.508 -46.857 -47.275 -47.763 -48.325 -48.966 -49.689 -50.502 -51.412 -52.429 -53.565 -54.703 -55.841 -56.979 0 1 1.0 7272785388.14 WV2 HH 31.71 32.78 0.05 -3.893e+10 -3.153e+10 -3.835e+10 -3.282e+10 -3.766e+10 -3.395e+10 -3.688e+10 -3.490e+10 -3.601e+10 -3.567e+10 -3.506e+10 -3.625e+10 -3.404e+10 -3.665e+10 -3.294e+10 -3.687e+10 -3.179e+10 -3.690e+10 -3.058e+10 -3.676e+10 -2.933e+10 -3.645e+10 -2.805e+10 -3.598e+10 -2.674e+10 -3.536e+10 -2.541e+10 -3.460e+10 -2.408e+10 -3.372e+10 -2.274e+10 -3.271e+10 -2.140e+10 -3.161e+10 -2.008e+10 -3.042e+10 -1.877e+10 -2.916e+10 -1.748e+10 -2.784e+10 -1.622e+10 -2.647e+10 -1.499e+10 -2.506e+10 -1.380e+10 -2.363e+10 -1.264e+10 -2.218e+10 -1.153e+10 -2.074e+10 -1.046e+10 -1.930e+10 -9.440e+09 -1.788e+10 -8.467e+09 -1.648e+10 -7.546e+09 -1.512e+10 -6.677e+09 -1.379e+10 -5.863e+09 -1.251e+10 -5.104e+09 -1.128e+10 -4.402e+09 -1.010e+10 -3.756e+09 -8.989e+09 -3.166e+09 -7.936e+09 -2.632e+09 -6.949e+09 -2.153e+09 -6.031e+09 -1.728e+09 -5.182e+09 -1.355e+09 -4.405e+09 -1.032e+09 -3.699e+09 -7.574e+08 -3.064e+09 -5.273e+08 -2.499e+09 -3.392e+08 -2.003e+09 -1.895e+08 -1.573e+09 -7.451e+07 -1.206e+09 9.621e+06 -9.006e+08 6.732e+07 -6.512e+08 1.033e+08 -4.538e+08 1.231e+08 -3.037e+08 1.331e+08 -1.945e+08 1.410e+08 -1.178e+08 1.544e+08 -6.274e+07 1.781e+08 -1.639e+07 2.127e+08 3.206e+07 2.555e+08 8.864e+07 3.032e+08 1.552e+08 3.529e+08 2.314e+08 4.021e+08 3.155e+08 4.490e+08 4.058e+08 4.924e+08 5.009e+08 5.312e+08 5.995e+08 5.649e+08 7.009e+08 5.928e+08 8.047e+08 6.147e+08 9.110e+08 6.304e+08 1.020e+09 6.399e+08 1.134e+09 6.430e+08 1.253e+09 6.397e+08 1.379e+09 6.296e+08 1.515e+09 6.127e+08 1.664e+09 5.885e+08 1.828e+09 5.563e+08 2.010e+09 5.153e+08 2.215e+09 4.644e+08 2.447e+09 4.021e+08 2.709e+09 3.269e+08 3.007e+09 2.369e+08 3.345e+09 1.301e+08 3.729e+09 4.603e+06 4.164e+09 -1.418e+08 4.654e+09 -3.114e+08 5.205e+09 -5.056e+08 5.822e+09 -7.264e+08 6.509e+09 -9.754e+08 7.273e+09 -1.253e+09 8.116e+09 -1.561e+09 9.043e+09 -1.898e+09 1.006e+10 -2.265e+09 1.116e+10 -2.660e+09 1.236e+10 -3.083e+09 1.366e+10 -3.532e+09 1.506e+10 -4.004e+09 1.655e+10 -4.499e+09 1.815e+10 -5.011e+09 1.985e+10 -5.539e+09 2.166e+10 -6.080e+09 2.356e+10 -6.629e+09 2.557e+10 -7.185e+09 2.768e+10 -7.744e+09 2.989e+10 -8.303e+09 3.219e+10 -8.861e+09 3.458e+10 -9.418e+09 3.707e+10 -9.969e+09 3.965e+10 -1.051e+10 4.229e+10 -1.104e+10 4.501e+10 -1.155e+10 4.778e+10 -1.205e+10 5.060e+10 -1.253e+10 5.344e+10 -1.300e+10 5.630e+10 -1.344e+10 5.915e+10 -1.385e+10 6.199e+10 -1.425e+10 6.477e+10 -1.461e+10 6.749e+10 -1.495e+10 7.011e+10 -1.526e+10 7.261e+10 -1.553e+10 7.496e+10 -1.576e+10 7.714e+10 -1.596e+10 7.912e+10 -1.612e+10 8.087e+10 -1.624e+10 8.236e+10 -1.631e+10 8.358e+10 -1.633e+10 8.450e+10 -1.630e+10 8.511e+10 -1.623e+10 8.539e+10 -1.611e+10 8.534e+10 -1.593e+10 8.493e+10 -1.571e+10 8.419e+10 -1.544e+10 8.310e+10 -1.513e+10 8.167e+10 -1.477e+10 7.993e+10 -1.438e+10 7.789e+10 -1.396e+10 7.556e+10 -1.351e+10 7.298e+10 -1.304e+10 7.017e+10 -1.256e+10 6.716e+10 -1.206e+10 6.399e+10 -1.156e+10 6.069e+10 -1.106e+10 5.729e+10 -1.057e+10 5.382e+10 -1.009e+10 5.033e+10 -9.621e+09 4.685e+10 -9.170e+09 4.340e+10 -8.739e+09 4.003e+10 -8.328e+09 3.673e+10 -7.937e+09 3.354e+10 -7.567e+09 3.047e+10 -7.216e+09 2.755e+10 -6.882e+09 2.478e+10 -6.564e+09 2.217e+10 -6.261e+09 1.974e+10 -5.969e+09 1.749e+10 -5.687e+09 1.541e+10 -5.413e+09 1.351e+10 -5.146e+09 1.179e+10 -4.884e+09 1.024e+10 -4.627e+09 8.846e+09 -4.374e+09 7.608e+09 -4.125e+09 6.514e+09 -3.880e+09 5.553e+09 -3.637e+09 4.713e+09 -3.397e+09 3.984e+09 -3.159e+09 3.354e+09 -2.922e+09 2.812e+09 -2.685e+09 2.349e+09 -2.447e+09 1.954e+09 -2.208e+09 1.620e+09 -1.967e+09 1.339e+09 -1.725e+09 1.104e+09 -1.483e+09 9.110e+08 -1.244e+09 7.533e+08 -1.012e+09 6.263e+08 -7.917e+08 5.253e+08 -5.900e+08 4.464e+08 -4.127e+08 3.869e+08 -2.646e+08 3.471e+08 -1.446e+08 3.323e+08 -4.010e+07 3.526e+08 7.440e+07 4.196e+08 2.298e+08 5.402e+08 4.522e+08 7.173e+08 7.593e+08 9.530e+08 1.162e+09 1.249e+09 1.668e+09 1.609e+09 2.281e+09 2.033e+09 3.002e+09 2.521e+09 3.828e+09 3.070e+09 4.756e+09 3.677e+09 5.777e+09 4.332e+09 6.883e+09 5.027e+09 8.059e+09 5.749e+09 9.290e+09 6.484e+09 1.056e+10 7.215e+09 1.185e+10 7.924e+09 1.313e+10 8.593e+09 1.439e+10 9.203e+09 1.560e+10 9.736e+09 1.674e+10 1.017e+10 1.778e+10 1.050e+10 1.870e+10 1.070e+10 1.948e+10 1.076e+10 2.009e+10 1.068e+10 2.052e+10 1.045e+10 2.075e+10 1.007e+10 2.076e+10 9.548e+09 2.056e+10 8.886e+09 2.012e+10 8.100e+09 1.947e+10 7.206e+09 1.859e+10 6.224e+09 1.751e+10 5.181e+09 1.625e+10 4.101e+09 1.483e+10 3.015e+09 1.328e+10 1.954e+09 1.165e+10 9.476e+08 9.996e+09 2.428e+07 8.363e+09 -7.940e+08 6.811e+09 -1.499e+09 5.399e+09 -2.100e+09 4.171e+09 -2.641e+09 3.133e+09 -3.211e+09 2.234e+09 -3.936e+09 1.347e+09 -4.955e+09 2.988e+08 -6.381e+09 -1.084e+09 -8.282e+09 -2.944e+09 -1.069e+10 -5.387e+09 -1.361e+10 -8.483e+09 -1.705e+10 -1.227e+10 -2.100e+10 -1.677e+10 -2.545e+10 -2.197e+10 -3.038e+10 -2.783e+10 -3.577e+10 -3.430e+10 -4.158e+10 -4.130e+10 -4.778e+10 -4.871e+10 -5.433e+10 -5.642e+10 -6.118e+10 -6.426e+10 -6.828e+10 -7.206e+10 -7.557e+10 -7.966e+10 -8.299e+10 -8.684e+10 -9.048e+10 -9.340e+10 -9.798e+10 -9.916e+10 -1.054e+11 -1.039e+11 -1.128e+11 -1.074e+11 -1.200e+11 -1.096e+11 -1.270e+11 -1.103e+11 -1.339e+11 -1.094e+11 -1.405e+11 -1.069e+11 -1.470e+11 -1.026e+11 -1.534e+11 -9.656e+10 -1.598e+11 -8.884e+10 -1.664e+11 -7.944e+10 -1.735e+11 -6.835e+10 -1.814e+11 -5.546e+10 -1.907e+11 -4.057e+10 -2.018e+11 -2.328e+10 -2.155e+11 -2.893e+09 -2.327e+11 2.155e+10 -2.543e+11 5.137e+10 -2.814e+11 8.827e+10 -3.152e+11 1.342e+11 -3.566e+11 1.915e+11 -4.071e+11 2.628e+11 -4.680e+11 3.509e+11 -5.407e+11 4.587e+11 -6.268e+11 5.896e+11 -7.282e+11 7.468e+11 -8.468e+11 9.339e+11 -9.849e+11 1.155e+12 -1.145e+12 1.413e+12 -1.330e+12 1.713e+12 -1.543e+12 2.059e+12 -1.787e+12 2.455e+12 -2.066e+12 2.905e+12 -2.384e+12 3.413e+12 -2.746e+12 3.983e+12 -3.155e+12 4.620e+12 -3.618e+12 5.328e+12 -4.139e+12 6.110e+12 -4.724e+12 6.969e+12 -5.379e+12 7.910e+12 -6.111e+12 8.935e+12 -6.925e+12 1.004e+13 -7.828e+12 1.124e+13 -8.828e+12 1.253e+13 -9.931e+12 1.391e+13 -1.114e+13 1.538e+13 -1.248e+13 1.695e+13 -1.394e+13 1.860e+13 -1.553e+13 2.034e+13 -1.726e+13 2.216e+13 -1.914e+13 2.407e+13 -2.117e+13 2.606e+13 -2.337e+13 2.812e+13 -2.573e+13 3.024e+13 -2.827e+13 3.243e+13 -3.099e+13 3.467e+13 -3.390e+13 3.696e+13 -3.700e+13 3.928e+13 -4.030e+13 4.163e+13 -4.380e+13 4.400e+13 -4.751e+13 4.637e+13 -5.143e+13 5.003e+13 -5.506e+13 5.196e+13 -5.980e+13 5.436e+13 -6.439e+13 5.672e+13 -6.919e+13 5.902e+13 -7.420e+13 6.125e+13 -7.944e+13 6.340e+13 -8.490e+13 6.545e+13 -9.056e+13 6.738e+13 -9.644e+13 6.919e+13 -1.025e+14 7.084e+13 -1.088e+14 7.234e+13 -1.153e+14 7.366e+13 -1.219e+14 7.478e+13 -1.287e+14 7.570e+13 -1.357e+14 7.639e+13 -1.428e+14 7.685e+13 -1.501e+14 7.705e+13 -1.575e+14 7.699e+13 -1.650e+14 7.664e+13 -1.726e+14 7.601e+13 -1.803e+14 7.508e+13 -1.880e+14 7.383e+13 -1.958e+14 7.227e+13 -2.036e+14 7.037e+13 -2.114e+14 6.814e+13 -2.192e+14 6.557e+13 -2.270e+14 6.265e+13 -2.347e+14 5.938e+13 -2.423e+14 5.576e+13 -2.498e+14 5.180e+13 -2.572e+14 4.748e+13 -2.644e+14 4.282e+13 -2.715e+14 3.781e+13 -2.784e+14 3.248e+13 -2.851e+14 2.681e+13 -2.915e+14 2.083e+13 -2.977e+14 1.455e+13 -3.037e+14 7.962e+12 -3.093e+14 1.105e+12 -3.146e+14 -6.021e+12 -3.197e+14 -1.341e+13 -3.244e+14 -2.103e+13 -3.289e+14 -2.886e+13 -3.329e+14 -3.690e+13 -3.366e+14 -4.511e+13 -3.399e+14 -5.347e+13 -3.428e+14 -6.197e+13 -3.453e+14 -7.056e+13 -3.474e+14 -7.925e+13 -3.491e+14 -8.799e+13 -3.503e+14 -9.677e+13 -3.511e+14 -1.055e+14 -3.515e+14 -1.143e+14 -3.514e+14 -1.230e+14 -3.510e+14 -1.317e+14 -3.500e+14 -1.403e+14 -3.487e+14 -1.487e+14 -3.470e+14 -1.570e+14 -3.448e+14 -1.652e+14 -3.422e+14 -1.731e+14 -3.393e+14 -1.808e+14 -3.359e+14 -1.883e+14 -3.322e+14 -1.956e+14 -3.281e+14 -2.025e+14 -3.237e+14 -2.092e+14 -3.189e+14 -2.155e+14 -3.138e+14 -2.215e+14 -3.084e+14 -2.271e+14 -3.026e+14 -2.324e+14 -2.966e+14 -2.372e+14 -2.904e+14 -2.417e+14 -2.839e+14 -2.457e+14 -2.771e+14 -2.494e+14 -2.701e+14 -2.525e+14 -2.630e+14 -2.553e+14 -2.557e+14 -2.575e+14 -2.482e+14 -2.593e+14 -2.405e+14 -2.606e+14 -2.328e+14 -2.615e+14 -2.250e+14 -2.619e+14 -2.171e+14 -2.618e+14 -2.092e+14 -2.613e+14 -2.013e+14 -2.603e+14 -1.934e+14 -2.588e+14 -1.854e+14 -2.569e+14 -1.775e+14 -2.546e+14 -1.697e+14 -2.518e+14 -1.619e+14 -2.486e+14 -1.542e+14 -2.450e+14 -1.465e+14 -2.410e+14 -1.390e+14 -2.366e+14 -1.317e+14 -2.319e+14 -1.244e+14 -2.268e+14 -1.174e+14 -2.214e+14 -1.105e+14 -2.158e+14 -1.038e+14 -2.099e+14 -9.732e+13 -2.037e+14 -9.104e+13 -1.974e+14 -8.499e+13 -1.908e+14 -7.916e+13 -1.841e+14 -7.358e+13 -1.773e+14 -6.823e+13 -1.705e+14 -6.314e+13 -1.635e+14 -5.828e+13 -1.565e+14 -5.368e+13 -1.495e+14 -4.933e+13 -1.425e+14 -4.522e+13 -1.355e+14 -4.136e+13 -1.286e+14 -3.774e+13 -1.218e+14 -3.436e+13 -1.151e+14 -3.120e+13 -1.086e+14 -2.827e+13 -1.021e+14 -2.556e+13 -9.588e+13 -2.305e+13 -8.979e+13 -2.074e+13 -8.389e+13 -1.862e+13 -7.819e+13 -1.668e+13 -7.270e+13 -1.491e+13 -6.743e+13 -1.330e+13 -6.238e+13 -1.184e+13 -5.756e+13 -1.052e+13 -5.296e+13 -9.326e+12 -4.861e+13 -8.250e+12 -4.448e+13 -7.288e+12 -4.059e+13 -6.431e+12 -3.693e+13 -5.671e+12 -3.349e+13 -4.998e+12 -3.028e+13 -4.404e+12 -2.729e+13 -3.881e+12 -2.451e+13 -3.423e+12 -2.194e+13 -3.021e+12 -1.956e+13 -2.671e+12 -1.738e+13 -2.366e+12 -1.538e+13 -2.099e+12 -1.355e+13 -1.868e+12 -1.189e+13 -1.666e+12 -1.039e+13 -1.490e+12 -9.033e+12 -1.336e+12 -7.816e+12 -1.201e+12 -6.729e+12 -1.083e+12 -5.762e+12 -9.777e+11 -4.907e+12 -8.843e+11 -4.155e+12 -8.006e+11 -3.496e+12 -7.252e+11 -2.924e+12 -6.569e+11 -2.429e+12 -5.945e+11 -2.004e+12 -5.374e+11 -1.642e+12 -4.850e+11 -1.335e+12 -4.366e+11 -1.077e+12 -3.921e+11 -8.632e+11 -3.511e+11 -6.862e+11 -3.134e+11 -5.414e+11 -2.790e+11 -4.240e+11 -2.478e+11 -3.297e+11 -2.196e+11 -2.547e+11 -1.943e+11 -1.955e+11 -1.718e+11 -1.491e+11 -1.519e+11 -1.131e+11 -1.343e+11 -8.534e+10 -1.188e+11 -6.398e+10 -1.051e+11 -4.767e+10 -9.291e+10 -3.532e+10 -8.188e+10 -2.606e+10 -7.174e+10 -1.924e+10 -6.231e+10 -1.438e+10 -5.346e+10 -1.104e+10 -4.513e+10 -8.902e+09 -3.731e+10 -7.654e+09 -3.007e+10 -7.036e+09 -2.350e+10 -6.837e+09 -1.772e+10 -6.920e+09 -1.287e+10 -7.283e+09 -8.986e+09 -8.120e+09 -6.007e+09 -9.796e+09 -3.589e+09 -1.271e+10 -1.153e+09 -1.712e+10 1.918e+09 -2.317e+10 6.090e+09 -3.091e+10 1.165e+10 -4.035e+10 1.873e+10 -5.146e+10 2.738e+10 -6.423e+10 3.759e+10 -7.856e+10 4.930e+10 -9.434e+10 6.241e+10 -1.114e+11 7.679e+10 -1.297e+11 9.229e+10 -1.488e+11 1.087e+11 -1.687e+11 1.259e+11 -1.891e+11 1.435e+11 -2.096e+11 1.615e+11 -2.302e+11 1.795e+11 -2.504e+11 1.973e+11 -2.701e+11 2.147e+11 -2.889e+11 2.314e+11 -3.067e+11 2.473e+11 -3.231e+11 2.620e+11 -3.381e+11 2.755e+11 -3.513e+11 2.875e+11 -3.627e+11 2.979e+11 -3.720e+11 3.065e+11 -3.793e+11 3.133e+11 -3.845e+11 3.182e+11 -3.875e+11 3.211e+11 -3.882e+11 3.221e+11 -3.868e+11 3.211e+11 -3.832e+11 3.183e+11 -3.775e+11 3.136e+11 -3.699e+11 3.071e+11 -3.605e+11 2.991e+11 -3.494e+11 2.896e+11 -3.368e+11 2.788e+11 -3.229e+11 2.669e+11 -3.079e+11 2.540e+11 -2.919e+11 2.403e+11 -2.753e+11 2.261e+11 -2.581e+11 2.115e+11 -2.407e+11 1.967e+11 -2.232e+11 1.818e+11 -2.057e+11 1.671e+11 -1.884e+11 1.526e+11 -1.716e+11 1.386e+11 -1.552e+11 1.251e+11 -1.396e+11 1.122e+11 -1.247e+11 1.000e+11 -1.105e+11 8.860e+10 -9.734e+10 7.799e+10 -8.507e+10 6.822e+10 -7.376e+10 5.928e+10 -6.344e+10 5.120e+10 -5.410e+10 4.394e+10 -4.571e+10 3.747e+10 -3.825e+10 3.178e+10 -3.169e+10 2.680e+10 -2.596e+10 2.249e+10 -2.105e+10 1.881e+10 -1.686e+10 1.569e+10 -1.334e+10 1.307e+10 -1.042e+10 1.090e+10 -8.028e+09 9.133e+09 -6.104e+09 7.710e+09 -4.582e+09 6.596e+09 -3.394e+09 5.752e+09 -2.476e+09 5.144e+09 -1.771e+09 4.749e+09 -1.224e+09 4.544e+09 -7.924e+08 4.513e+09 -4.416e+08 4.642e+09 -1.497e+08 4.923e+09 9.491e+07 5.352e+09 2.947e+08 5.931e+09 4.462e+08 6.665e+09 5.411e+08 7.564e+09 5.675e+08 8.642e+09 5.111e+08 9.913e+09 3.552e+08 1.140e+10 8.117e+07 1.311e+10 -3.313e+08 1.506e+10 -9.045e+08 1.727e+10 -1.661e+09 1.975e+10 -2.622e+09 2.250e+10 -3.814e+09 2.554e+10 -5.255e+09 2.885e+10 -6.966e+09 3.242e+10 -8.965e+09 3.624e+10 -1.127e+10 4.029e+10 -1.388e+10 4.454e+10 -1.681e+10 4.896e+10 -2.007e+10 5.349e+10 -2.364e+10 5.810e+10 -2.752e+10 6.273e+10 -3.171e+10 6.734e+10 -3.616e+10 7.185e+10 -4.088e+10 7.623e+10 -4.582e+10 8.040e+10 -5.097e+10 8.431e+10 -5.627e+10 8.791e+10 -6.171e+10 9.114e+10 -6.722e+10 9.397e+10 -7.278e+10 9.634e+10 -7.835e+10 9.824e+10 -8.386e+10 9.961e+10 -8.929e+10 1.005e+11 -9.459e+10 1.008e+11 -9.972e+10 1.005e+11 -1.047e+11 9.975e+10 -1.093e+11 9.840e+10 -1.137e+11 9.651e+10 -1.178e+11 9.408e+10 -1.216e+11 9.115e+10 -1.250e+11 8.776e+10 -1.281e+11 8.392e+10 -1.307e+11 7.968e+10 -1.330e+11 7.508e+10 -1.348e+11 7.015e+10 -1.363e+11 6.493e+10 -1.373e+11 5.947e+10 -1.380e+11 5.380e+10 -1.382e+11 4.797e+10 -1.381e+11 4.201e+10 -1.377e+11 3.597e+10 -1.369e+11 2.988e+10 0.005 -55.839 -55.960 -56.080 -56.201 -56.322 -56.442 -56.540 -56.361 -56.016 -55.593 -55.141 -54.675 -54.190 -53.672 -53.103 -52.472 -51.778 -51.028 -50.236 -49.420 -48.599 -47.788 -47.000 -46.245 -45.530 -44.858 -44.233 -43.656 -43.127 -42.647 -42.215 -41.831 -41.494 -41.204 -40.961 -40.764 -40.612 -40.507 -40.448 -40.436 -40.470 -40.553 -40.686 -40.869 -41.106 -41.398 -41.747 -42.157 -42.631 -43.172 -43.786 -44.480 -45.258 -46.127 -47.091 -48.147 -49.283 -50.459 -51.593 -52.536 -53.102 -53.159 -52.729 -51.970 -51.054 -50.100 -49.165 -48.270 -47.413 -46.584 -45.772 -44.965 -44.155 -43.338 -42.512 -41.679 -40.844 -40.012 -39.189 -38.380 -37.590 -36.824 -36.084 -35.375 -34.696 -34.051 -33.439 -32.861 -32.316 -31.806 -31.331 -30.889 -30.481 -30.106 -29.765 -29.458 -29.183 -28.942 -28.733 -28.558 -28.415 -28.304 -28.226 -28.182 -28.173 -28.199 -28.261 -28.360 -28.496 -28.671 -28.884 -29.139 -29.435 -29.775 -30.158 -30.586 -31.060 -31.580 -32.144 -32.750 -33.393 -34.063 -34.745 -35.413 -36.032 -36.556 -36.931 -37.106 -37.048 -36.751 -36.236 -35.543 -34.713 -33.783 -32.783 -31.736 -30.658 -29.562 -28.460 -27.360 -26.269 -25.194 -24.138 -23.106 -22.100 -21.122 -20.172 -19.252 -18.361 -17.500 -16.668 -15.863 -15.085 -14.334 -13.609 -12.911 -12.238 -11.588 -10.963 -10.360 -9.779 -9.220 -8.683 -8.165 -7.667 -7.189 -6.729 -6.287 -5.863 -5.456 -5.067 -4.693 -4.336 -3.995 -3.669 -3.359 -3.064 -2.783 -2.517 -2.265 -2.028 -1.804 -1.594 -1.397 -1.214 -1.044 -0.887 -0.744 -0.613 -0.495 -0.390 -0.297 -0.217 -0.150 -0.095 -0.053 -0.023 -0.005 0.000 -0.007 -0.027 -0.057 -0.099 -0.154 -0.222 -0.302 -0.395 -0.500 -0.619 -0.751 -0.895 -1.053 -1.224 -1.409 -1.608 -1.820 -2.046 -2.287 -2.542 -2.812 -3.097 -3.397 -3.712 -4.044 -4.391 -4.756 -5.137 -5.536 -5.952 -6.387 -6.841 -7.314 -7.807 -8.321 -8.856 -9.414 -9.994 -10.598 -11.226 -11.880 -12.560 -13.269 -14.006 -14.772 -15.570 -16.400 -17.263 -18.159 -19.091 -20.057 -21.058 -22.090 -23.153 -24.242 -25.351 -26.467 -27.574 -28.650 -29.668 -30.594 -31.397 -32.049 -32.536 -32.856 -33.024 -33.057 -32.980 -32.811 -32.569 -32.267 -31.918 -31.532 -31.119 -30.688 -30.249 -29.809 -29.376 -28.956 -28.554 -28.174 -27.819 -27.493 -27.195 -26.928 -26.693 -26.489 -26.318 -26.179 -26.072 -25.998 -25.956 -25.946 -25.968 -26.023 -26.110 -26.229 -26.380 -26.564 -26.781 -27.030 -27.313 -27.628 -27.976 -28.360 -28.778 -29.233 -29.725 -30.254 -30.821 -31.427 -32.071 -32.756 -33.479 -34.241 -35.040 -35.873 -36.737 -37.625 -38.528 -39.431 -40.318 -41.163 -41.936 -42.602 -43.124 -43.467 -43.607 -43.536 -43.263 -42.812 -42.218 -41.515 -40.740 -39.920 -39.079 -38.235 -37.403 -36.590 -35.804 -35.050 -34.329 -33.643 -32.993 -32.380 -31.802 -31.260 -30.752 -30.277 -29.836 -29.426 -29.046 -28.697 -28.377 -28.083 -27.817 -27.577 -27.363 -27.174 -27.011 -26.872 -26.757 -26.665 -26.596 -26.549 -26.525 -26.523 -26.542 -26.583 -26.645 -26.727 -26.831 -26.956 -27.101 -27.267 -27.453 -27.660 -27.888 -28.136 -28.405 -28.695 -29.006 -29.338 -29.692 -30.067 -30.463 -30.882 -31.323 -31.786 -32.272 -32.780 -33.312 -33.868 -34.447 -35.049 -35.675 -36.325 -36.976 -37.627 -38.278 -38.929 -39.580 0 1 1.0 5760317058.76 WV2 VV 31.71 32.78 0.05 -1.862e+08 4.806e+10 -1.643e+09 4.904e+10 -3.089e+09 4.988e+10 -4.520e+09 5.056e+10 -5.930e+09 5.109e+10 -7.311e+09 5.145e+10 -8.658e+09 5.165e+10 -9.965e+09 5.168e+10 -1.122e+10 5.155e+10 -1.243e+10 5.124e+10 -1.357e+10 5.078e+10 -1.464e+10 5.015e+10 -1.564e+10 4.937e+10 -1.656e+10 4.844e+10 -1.738e+10 4.737e+10 -1.811e+10 4.616e+10 -1.873e+10 4.483e+10 -1.925e+10 4.338e+10 -1.965e+10 4.184e+10 -1.994e+10 4.021e+10 -2.011e+10 3.850e+10 -2.017e+10 3.673e+10 -2.011e+10 3.492e+10 -1.994e+10 3.307e+10 -1.966e+10 3.120e+10 -1.927e+10 2.932e+10 -1.878e+10 2.744e+10 -1.820e+10 2.558e+10 -1.754e+10 2.375e+10 -1.681e+10 2.195e+10 -1.602e+10 2.020e+10 -1.518e+10 1.851e+10 -1.430e+10 1.687e+10 -1.340e+10 1.530e+10 -1.248e+10 1.381e+10 -1.155e+10 1.239e+10 -1.064e+10 1.104e+10 -9.737e+09 9.779e+09 -8.858e+09 8.598e+09 -8.011e+09 7.499e+09 -7.200e+09 6.482e+09 -6.430e+09 5.547e+09 -5.705e+09 4.694e+09 -5.027e+09 3.919e+09 -4.398e+09 3.223e+09 -3.819e+09 2.603e+09 -3.290e+09 2.056e+09 -2.811e+09 1.580e+09 -2.381e+09 1.172e+09 -1.998e+09 8.271e+08 -1.662e+09 5.414e+08 -1.371e+09 3.096e+08 -1.122e+09 1.252e+08 -9.137e+08 -1.912e+07 -7.433e+08 -1.317e+08 -6.065e+08 -2.222e+08 -4.976e+08 -3.001e+08 -4.095e+08 -3.742e+08 -3.337e+08 -4.508e+08 -2.621e+08 -5.335e+08 -1.878e+08 -6.225e+08 -1.057e+08 -7.163e+08 -1.238e+07 -8.121e+08 9.400e+07 -9.067e+08 2.145e+08 -9.971e+08 3.497e+08 -1.081e+09 4.994e+08 -1.156e+09 6.638e+08 -1.220e+09 8.437e+08 -1.273e+09 1.039e+09 -1.314e+09 1.250e+09 -1.341e+09 1.478e+09 -1.356e+09 1.724e+09 -1.356e+09 1.990e+09 -1.342e+09 2.277e+09 -1.314e+09 2.587e+09 -1.270e+09 2.922e+09 -1.210e+09 3.284e+09 -1.133e+09 3.675e+09 -1.038e+09 4.098e+09 -9.252e+08 4.557e+09 -7.927e+08 5.052e+09 -6.400e+08 5.589e+09 -4.658e+08 6.171e+09 -2.689e+08 6.803e+09 -4.837e+07 7.488e+09 1.973e+08 8.233e+09 4.701e+08 9.041e+09 7.712e+08 9.919e+09 1.103e+09 1.087e+10 1.467e+09 1.191e+10 1.865e+09 1.303e+10 2.299e+09 1.424e+10 2.773e+09 1.555e+10 3.285e+09 1.696e+10 3.839e+09 1.846e+10 4.435e+09 2.007e+10 5.072e+09 2.177e+10 5.749e+09 2.357e+10 6.464e+09 2.545e+10 7.213e+09 2.742e+10 7.992e+09 2.946e+10 8.796e+09 3.155e+10 9.615e+09 3.369e+10 1.044e+10 3.584e+10 1.126e+10 3.801e+10 1.207e+10 4.015e+10 1.285e+10 4.225e+10 1.359e+10 4.430e+10 1.427e+10 4.625e+10 1.489e+10 4.810e+10 1.543e+10 4.983e+10 1.589e+10 5.140e+10 1.625e+10 5.281e+10 1.651e+10 5.405e+10 1.667e+10 5.510e+10 1.672e+10 5.594e+10 1.666e+10 5.659e+10 1.650e+10 5.702e+10 1.625e+10 5.725e+10 1.591e+10 5.727e+10 1.550e+10 5.709e+10 1.502e+10 5.672e+10 1.448e+10 5.616e+10 1.391e+10 5.543e+10 1.331e+10 5.452e+10 1.269e+10 5.346e+10 1.208e+10 5.226e+10 1.147e+10 5.092e+10 1.088e+10 4.945e+10 1.032e+10 4.787e+10 9.788e+09 4.619e+10 9.298e+09 4.442e+10 8.850e+09 4.258e+10 8.444e+09 4.066e+10 8.080e+09 3.869e+10 7.757e+09 3.667e+10 7.470e+09 3.463e+10 7.216e+09 3.256e+10 6.989e+09 3.049e+10 6.784e+09 2.843e+10 6.595e+09 2.639e+10 6.416e+09 2.439e+10 6.243e+09 2.243e+10 6.070e+09 2.053e+10 5.894e+09 1.870e+10 5.712e+09 1.695e+10 5.521e+09 1.530e+10 5.322e+09 1.374e+10 5.114e+09 1.228e+10 4.898e+09 1.093e+10 4.676e+09 9.700e+09 4.450e+09 8.578e+09 4.224e+09 7.566e+09 4.000e+09 6.665e+09 3.783e+09 5.868e+09 3.573e+09 5.172e+09 3.375e+09 4.570e+09 3.192e+09 4.056e+09 3.024e+09 3.621e+09 2.873e+09 3.261e+09 2.740e+09 2.967e+09 2.625e+09 2.733e+09 2.528e+09 2.555e+09 2.449e+09 2.425e+09 2.386e+09 2.341e+09 2.338e+09 2.300e+09 2.303e+09 2.297e+09 2.280e+09 2.333e+09 2.266e+09 2.405e+09 2.260e+09 2.513e+09 2.258e+09 2.656e+09 2.257e+09 2.835e+09 2.255e+09 3.050e+09 2.247e+09 3.302e+09 2.230e+09 3.591e+09 2.199e+09 3.918e+09 2.151e+09 4.285e+09 2.079e+09 4.693e+09 1.980e+09 5.144e+09 1.847e+09 5.640e+09 1.676e+09 6.183e+09 1.459e+09 6.776e+09 1.193e+09 7.422e+09 8.699e+08 8.121e+09 4.850e+08 8.876e+09 3.174e+07 9.687e+09 -4.949e+08 1.055e+10 -1.098e+09 1.146e+10 -1.782e+09 1.242e+10 -2.547e+09 1.341e+10 -3.390e+09 1.442e+10 -4.307e+09 1.544e+10 -5.288e+09 1.644e+10 -6.323e+09 1.742e+10 -7.395e+09 1.833e+10 -8.486e+09 1.917e+10 -9.573e+09 1.990e+10 -1.063e+10 2.050e+10 -1.164e+10 2.094e+10 -1.258e+10 2.119e+10 -1.340e+10 2.124e+10 -1.411e+10 2.106e+10 -1.466e+10 2.065e+10 -1.505e+10 1.999e+10 -1.526e+10 1.908e+10 -1.529e+10 1.795e+10 -1.512e+10 1.659e+10 -1.477e+10 1.504e+10 -1.424e+10 1.333e+10 -1.354e+10 1.151e+10 -1.270e+10 9.623e+09 -1.174e+10 7.729e+09 -1.070e+10 5.887e+09 -9.608e+09 4.154e+09 -8.517e+09 2.572e+09 -7.480e+09 1.159e+09 -6.562e+09 -1.128e+08 -5.829e+09 -1.342e+09 -5.336e+09 -2.694e+09 -5.099e+09 -4.373e+09 -5.081e+09 -6.574e+09 -5.199e+09 -9.440e+09 -5.356e+09 -1.306e+10 -5.468e+09 -1.750e+10 -5.470e+09 -2.277e+10 -5.319e+09 -2.887e+10 -4.989e+09 -3.578e+10 -4.468e+09 -4.344e+10 -3.755e+09 -5.180e+10 -2.865e+09 -6.077e+10 -1.821e+09 -7.025e+10 -6.589e+08 -8.013e+10 5.713e+08 -9.026e+10 1.811e+09 -1.005e+11 2.985e+09 -1.107e+11 4.010e+09 -1.208e+11 4.792e+09 -1.304e+11 5.227e+09 -1.396e+11 5.203e+09 -1.481e+11 4.607e+09 -1.557e+11 3.321e+09 -1.624e+11 1.233e+09 -1.681e+11 -1.770e+09 -1.726e+11 -5.788e+09 -1.759e+11 -1.091e+10 -1.780e+11 -1.724e+10 -1.789e+11 -2.486e+10 -1.788e+11 -3.386e+10 -1.779e+11 -4.439e+10 -1.763e+11 -5.664e+10 -1.744e+11 -7.092e+10 -1.724e+11 -8.772e+10 -1.706e+11 -1.077e+11 -1.694e+11 -1.319e+11 -1.686e+11 -1.617e+11 -1.685e+11 -1.986e+11 -1.685e+11 -2.448e+11 -1.681e+11 -3.027e+11 -1.667e+11 -3.748e+11 -1.633e+11 -4.642e+11 -1.567e+11 -5.743e+11 -1.459e+11 -7.085e+11 -1.297e+11 -8.709e+11 -1.066e+11 -1.066e+12 -7.540e+10 -1.297e+12 -3.491e+10 -1.570e+12 1.619e+10 -1.890e+12 7.897e+10 -2.263e+12 1.545e+11 -2.693e+12 2.438e+11 -3.189e+12 3.475e+11 -3.756e+12 4.661e+11 -4.402e+12 6.003e+11 -5.133e+12 7.499e+11 -5.958e+12 9.146e+11 -6.884e+12 1.094e+12 -7.921e+12 1.288e+12 -9.074e+12 1.493e+12 -1.035e+13 1.710e+12 -1.177e+13 1.935e+12 -1.333e+13 2.167e+12 -1.504e+13 2.401e+12 -1.692e+13 2.635e+12 -1.897e+13 2.864e+12 -2.119e+13 3.083e+12 -2.360e+13 3.288e+12 -2.621e+13 3.473e+12 -2.902e+13 3.632e+12 -3.204e+13 3.759e+12 -3.527e+13 3.845e+12 -3.872e+13 3.884e+12 -4.241e+13 3.868e+12 -4.631e+13 3.789e+12 -5.046e+13 3.638e+12 -5.484e+13 3.405e+12 -5.945e+13 3.083e+12 -6.430e+13 2.660e+12 -6.939e+13 2.128e+12 -7.470e+13 1.477e+12 -8.025e+13 6.946e+11 -8.603e+13 -9.919e+11 -9.195e+13 -8.301e+11 -9.863e+13 -2.030e+12 -1.051e+14 -3.399e+12 -1.117e+14 -4.949e+12 -1.185e+14 -6.692e+12 -1.255e+14 -8.635e+12 -1.327e+14 -1.079e+13 -1.400e+14 -1.317e+13 -1.475e+14 -1.578e+13 -1.551e+14 -1.864e+13 -1.628e+14 -2.175e+13 -1.706e+14 -2.512e+13 -1.785e+14 -2.876e+13 -1.865e+14 -3.268e+13 -1.945e+14 -3.689e+13 -2.026e+14 -4.139e+13 -2.106e+14 -4.619e+13 -2.187e+14 -5.129e+13 -2.267e+14 -5.671e+13 -2.347e+14 -6.244e+13 -2.426e+14 -6.847e+13 -2.504e+14 -7.482e+13 -2.581e+14 -8.149e+13 -2.657e+14 -8.847e+13 -2.730e+14 -9.575e+13 -2.803e+14 -1.033e+14 -2.873e+14 -1.112e+14 -2.940e+14 -1.194e+14 -3.005e+14 -1.278e+14 -3.068e+14 -1.365e+14 -3.127e+14 -1.454e+14 -3.183e+14 -1.545e+14 -3.235e+14 -1.639e+14 -3.284e+14 -1.735e+14 -3.329e+14 -1.832e+14 -3.370e+14 -1.930e+14 -3.406e+14 -2.030e+14 -3.439e+14 -2.131e+14 -3.467e+14 -2.233e+14 -3.490e+14 -2.335e+14 -3.508e+14 -2.438e+14 -3.522e+14 -2.541e+14 -3.532e+14 -2.643e+14 -3.536e+14 -2.745e+14 -3.536e+14 -2.847e+14 -3.531e+14 -2.947e+14 -3.521e+14 -3.045e+14 -3.506e+14 -3.143e+14 -3.486e+14 -3.238e+14 -3.462e+14 -3.331e+14 -3.434e+14 -3.422e+14 -3.400e+14 -3.510e+14 -3.363e+14 -3.596e+14 -3.321e+14 -3.678e+14 -3.275e+14 -3.758e+14 -3.226e+14 -3.834e+14 -3.172e+14 -3.906e+14 -3.116e+14 -3.974e+14 -3.055e+14 -4.039e+14 -2.992e+14 -4.099e+14 -2.925e+14 -4.155e+14 -2.856e+14 -4.206e+14 -2.784e+14 -4.253e+14 -2.709e+14 -4.295e+14 -2.632e+14 -4.332e+14 -2.553e+14 -4.363e+14 -2.473e+14 -4.390e+14 -2.391e+14 -4.411e+14 -2.307e+14 -4.427e+14 -2.222e+14 -4.437e+14 -2.136e+14 -4.442e+14 -2.049e+14 -4.440e+14 -1.962e+14 -4.434e+14 -1.875e+14 -4.421e+14 -1.787e+14 -4.402e+14 -1.700e+14 -4.378e+14 -1.613e+14 -4.348e+14 -1.527e+14 -4.312e+14 -1.441e+14 -4.271e+14 -1.357e+14 -4.224e+14 -1.274e+14 -4.172e+14 -1.193e+14 -4.115e+14 -1.114e+14 -4.053e+14 -1.036e+14 -3.986e+14 -9.609e+13 -3.914e+14 -8.878e+13 -3.838e+14 -8.169e+13 -3.757e+14 -7.485e+13 -3.673e+14 -6.827e+13 -3.585e+14 -6.195e+13 -3.494e+14 -5.592e+13 -3.400e+14 -5.017e+13 -3.303e+14 -4.471e+13 -3.203e+14 -3.956e+13 -3.102e+14 -3.470e+13 -2.999e+14 -3.014e+13 -2.895e+14 -2.588e+13 -2.790e+14 -2.192e+13 -2.684e+14 -1.826e+13 -2.578e+14 -1.488e+13 -2.472e+14 -1.179e+13 -2.367e+14 -8.975e+12 -2.262e+14 -6.427e+12 -2.157e+14 -4.137e+12 -2.054e+14 -2.094e+12 -1.953e+14 -2.899e+11 -1.853e+14 1.290e+12 -1.755e+14 2.656e+12 -1.659e+14 3.821e+12 -1.565e+14 4.798e+12 -1.474e+14 5.599e+12 -1.385e+14 6.238e+12 -1.299e+14 6.727e+12 -1.216e+14 7.080e+12 -1.136e+14 7.308e+12 -1.058e+14 7.425e+12 -9.842e+13 7.443e+12 -9.131e+13 7.373e+12 -8.452e+13 7.227e+12 -7.804e+13 7.016e+12 -7.189e+13 6.754e+12 -6.604e+13 6.454e+12 -6.051e+13 6.120e+12 -5.529e+13 5.757e+12 -5.038e+13 5.372e+12 -4.577e+13 4.973e+12 -4.147e+13 4.568e+12 -3.745e+13 4.162e+12 -3.372e+13 3.760e+12 -3.026e+13 3.368e+12 -2.706e+13 2.989e+12 -2.411e+13 2.626e+12 -2.141e+13 2.284e+12 -1.894e+13 1.963e+12 -1.669e+13 1.665e+12 -1.465e+13 1.391e+12 -1.281e+13 1.142e+12 -1.115e+13 9.181e+11 -9.659e+12 7.185e+11 -8.331e+12 5.427e+11 -7.150e+12 3.899e+11 -6.107e+12 2.589e+11 -5.189e+12 1.481e+11 -4.386e+12 5.614e+10 -3.686e+12 -1.858e+10 -3.080e+12 -7.784e+10 -2.559e+12 -1.233e+11 -2.113e+12 -1.567e+11 -1.734e+12 -1.796e+11 -1.414e+12 -1.938e+11 -1.146e+12 -2.007e+11 -9.229e+11 -2.017e+11 -7.387e+11 -1.982e+11 -5.880e+11 -1.913e+11 -4.655e+11 -1.820e+11 -3.668e+11 -1.713e+11 -2.879e+11 -1.598e+11 -2.253e+11 -1.482e+11 -1.759e+11 -1.368e+11 -1.371e+11 -1.260e+11 -1.067e+11 -1.158e+11 -8.297e+10 -1.061e+11 -6.443e+10 -9.705e+10 -4.994e+10 -8.835e+10 -3.867e+10 -7.991e+10 -2.998e+10 -7.160e+10 -2.336e+10 -6.336e+10 -1.842e+10 -5.519e+10 -1.484e+10 -4.712e+10 -1.235e+10 -3.926e+10 -1.068e+10 -3.177e+10 -9.620e+09 -2.482e+10 -8.982e+09 -1.860e+10 -8.661e+09 -1.330e+10 -8.681e+09 -9.022e+09 -9.257e+09 -5.668e+09 -1.076e+10 -2.852e+09 -1.356e+10 9.000e+07 -1.790e+10 3.862e+09 -2.384e+10 8.980e+09 -3.139e+10 1.573e+10 -4.056e+10 2.424e+10 -5.131e+10 3.452e+10 -6.355e+10 4.648e+10 -7.723e+10 6.003e+10 -9.219e+10 7.496e+10 -1.083e+11 9.106e+10 -1.254e+11 1.081e+11 -1.432e+11 1.258e+11 -1.615e+11 1.438e+11 -1.801e+11 1.620e+11 -1.988e+11 1.799e+11 -2.172e+11 1.974e+11 -2.351e+11 2.141e+11 -2.523e+11 2.298e+11 -2.686e+11 2.442e+11 -2.837e+11 2.573e+11 -2.974e+11 2.688e+11 -3.096e+11 2.786e+11 -3.202e+11 2.867e+11 -3.290e+11 2.929e+11 -3.359e+11 2.972e+11 -3.409e+11 2.996e+11 -3.440e+11 3.002e+11 -3.452e+11 2.991e+11 -3.445e+11 2.963e+11 -3.420e+11 2.920e+11 -3.377e+11 2.862e+11 -3.317e+11 2.790e+11 -3.242e+11 2.707e+11 -3.153e+11 2.613e+11 -3.051e+11 2.511e+11 -2.937e+11 2.400e+11 -2.814e+11 2.283e+11 -2.683e+11 2.162e+11 -2.545e+11 2.037e+11 -2.403e+11 1.910e+11 -2.256e+11 1.781e+11 -2.108e+11 1.653e+11 -1.959e+11 1.526e+11 -1.811e+11 1.401e+11 -1.665e+11 1.279e+11 -1.522e+11 1.161e+11 -1.383e+11 1.048e+11 -1.249e+11 9.395e+10 -1.121e+11 8.370e+10 -9.990e+10 7.407e+10 -8.842e+10 6.508e+10 -7.770e+10 5.678e+10 -6.774e+10 4.916e+10 -5.857e+10 4.223e+10 -5.021e+10 3.599e+10 -4.265e+10 3.044e+10 -3.586e+10 2.552e+10 -2.984e+10 2.125e+10 -2.456e+10 1.756e+10 -1.997e+10 1.441e+10 -1.603e+10 1.176e+10 -1.269e+10 9.562e+09 -9.902e+09 7.758e+09 -7.612e+09 6.305e+09 -5.765e+09 5.155e+09 -4.302e+09 4.265e+09 -3.169e+09 3.599e+09 -2.310e+09 3.126e+09 -1.670e+09 2.824e+09 -1.197e+09 2.678e+09 -8.450e+08 2.678e+09 -5.734e+08 2.816e+09 -3.565e+08 3.089e+09 -1.803e+08 3.495e+09 -4.205e+07 4.036e+09 5.239e+07 4.718e+09 9.183e+07 5.547e+09 6.124e+07 6.533e+09 -5.697e+07 7.685e+09 -2.821e+08 9.011e+09 -6.348e+08 1.052e+10 -1.136e+09 1.222e+10 -1.808e+09 1.410e+10 -2.670e+09 1.618e+10 -3.744e+09 1.844e+10 -5.046e+09 2.088e+10 -6.594e+09 2.348e+10 -8.399e+09 2.623e+10 -1.047e+10 2.911e+10 -1.281e+10 3.210e+10 -1.543e+10 3.516e+10 -1.832e+10 3.828e+10 -2.146e+10 4.141e+10 -2.486e+10 4.453e+10 -2.849e+10 4.759e+10 -3.233e+10 5.058e+10 -3.636e+10 5.345e+10 -4.055e+10 5.616e+10 -4.486e+10 5.869e+10 -4.928e+10 6.100e+10 -5.376e+10 6.306e+10 -5.827e+10 6.484e+10 -6.278e+10 6.633e+10 -6.725e+10 6.749e+10 -7.164e+10 6.832e+10 -7.593e+10 6.879e+10 -8.009e+10 6.889e+10 -8.409e+10 6.861e+10 -8.790e+10 6.794e+10 -9.151e+10 6.688e+10 -9.488e+10 6.543e+10 -9.802e+10 6.359e+10 -1.009e+11 6.139e+10 -1.035e+11 5.883e+10 -1.058e+11 5.592e+10 -1.079e+11 5.270e+10 -1.097e+11 4.918e+10 -1.112e+11 4.537e+10 -1.124e+11 4.132e+10 -1.133e+11 3.705e+10 -1.139e+11 3.258e+10 -1.143e+11 2.794e+10 -1.145e+11 2.316e+10 -1.143e+11 1.827e+10 0.005 -39.705 -39.262 -38.819 -38.376 -37.933 -37.490 -37.045 -36.576 -36.087 -35.583 -35.069 -34.548 -34.025 -33.504 -32.988 -32.479 -31.979 -31.492 -31.019 -30.561 -30.119 -29.694 -29.288 -28.900 -28.531 -28.182 -27.853 -27.545 -27.256 -26.988 -26.741 -26.514 -26.308 -26.123 -25.959 -25.815 -25.692 -25.591 -25.510 -25.450 -25.412 -25.394 -25.398 -25.423 -25.470 -25.538 -25.627 -25.738 -25.871 -26.023 -26.196 -26.391 -26.608 -26.847 -27.107 -27.388 -27.690 -28.012 -28.354 -28.715 -29.094 -29.490 -29.900 -30.322 -30.754 -31.193 -31.635 -32.075 -32.509 -32.929 -33.329 -33.703 -34.042 -34.338 -34.585 -34.776 -34.905 -34.968 -34.965 -34.894 -34.759 -34.565 -34.316 -34.020 -33.686 -33.321 -32.933 -32.529 -32.117 -31.703 -31.291 -30.886 -30.493 -30.115 -29.754 -29.414 -29.096 -28.801 -28.533 -28.291 -28.077 -27.891 -27.734 -27.609 -27.516 -27.456 -27.431 -27.441 -27.488 -27.574 -27.699 -27.865 -28.075 -28.331 -28.634 -28.989 -29.397 -29.863 -30.390 -30.984 -31.649 -32.391 -33.219 -34.136 -35.151 -36.268 -37.489 -38.813 -40.226 -41.701 -43.194 -44.649 -46.026 -47.324 -48.563 -49.622 -49.948 -48.771 -46.198 -43.147 -40.214 -37.554 -35.164 -33.007 -31.048 -29.254 -27.601 -26.070 -24.644 -23.310 -22.059 -20.879 -19.765 -18.710 -17.711 -16.761 -15.858 -14.998 -14.179 -13.396 -12.649 -11.934 -11.252 -10.599 -9.974 -9.375 -8.802 -8.254 -7.728 -7.225 -6.744 -6.284 -5.843 -5.422 -5.020 -4.637 -4.271 -3.922 -3.591 -3.276 -2.977 -2.694 -2.426 -2.174 -1.936 -1.713 -1.505 -1.311 -1.131 -0.964 -0.812 -0.673 -0.547 -0.435 -0.335 -0.249 -0.176 -0.116 -0.068 -0.034 -0.012 0.000 -0.001 -0.015 -0.041 -0.080 -0.132 -0.196 -0.273 -0.364 -0.467 -0.583 -0.712 -0.854 -1.010 -1.179 -1.361 -1.557 -1.767 -1.992 -2.230 -2.483 -2.750 -3.033 -3.330 -3.644 -3.973 -4.318 -4.680 -5.058 -5.454 -5.868 -6.301 -6.752 -7.223 -7.714 -8.225 -8.759 -9.314 -9.894 -10.497 -11.127 -11.783 -12.468 -13.182 -13.927 -14.704 -15.517 -16.367 -17.257 -18.189 -19.165 -20.191 -21.270 -22.409 -23.612 -24.887 -26.240 -27.683 -29.225 -30.880 -32.665 -34.598 -36.703 -39.007 -41.537 -44.309 -47.292 -50.296 -52.769 -53.915 -53.546 -52.202 -50.409 -48.453 -46.496 -44.631 -42.908 -41.340 -39.929 -38.667 -37.537 -36.528 -35.628 -34.826 -34.114 -33.484 -32.928 -32.442 -32.019 -31.656 -31.349 -31.094 -30.889 -30.732 -30.619 -30.551 -30.524 -30.538 -30.591 -30.683 -30.811 -30.975 -31.174 -31.410 -31.680 -31.985 -32.323 -32.694 -33.096 -33.530 -33.993 -34.483 -34.999 -35.536 -36.091 -36.660 -37.236 -37.812 -38.379 -38.927 -39.446 -39.924 -40.351 -40.715 -41.010 -41.227 -41.362 -41.412 -41.378 -41.261 -41.063 -40.790 -40.450 -40.050 -39.601 -39.111 -38.592 -38.053 -37.502 -36.949 -36.398 -35.857 -35.328 -34.817 -34.324 -33.853 -33.405 -32.981 -32.581 -32.206 -31.856 -31.530 -31.228 -30.950 -30.696 -30.466 -30.260 -30.078 -29.920 -29.784 -29.671 -29.580 -29.511 -29.464 -29.438 -29.433 -29.450 -29.488 -29.546 -29.626 -29.726 -29.846 -29.987 -30.149 -30.331 -30.534 -30.758 -31.003 -31.268 -31.555 -31.863 -32.193 -32.545 -32.919 -33.315 -33.735 -34.178 -34.645 -35.137 -35.654 -36.196 -36.766 -37.362 -37.987 -38.642 -39.298 -39.954 -40.611 -41.267 -41.923 0 1 1.0 5760317058.76 EN HH 17.14 22.7 0.05 4.391e+10 8.635e+09 5.289e+10 1.064e+10 6.316e+10 1.296e+10 7.480e+10 1.563e+10 8.790e+10 1.868e+10 1.025e+11 2.211e+10 1.186e+11 2.596e+10 1.364e+11 3.024e+10 1.557e+11 3.495e+10 1.766e+11 4.008e+10 1.990e+11 4.565e+10 2.228e+11 5.162e+10 2.479e+11 5.799e+10 2.742e+11 6.472e+10 3.015e+11 7.175e+10 3.297e+11 7.906e+10 3.584e+11 8.658e+10 3.874e+11 9.423e+10 4.164e+11 1.019e+11 4.452e+11 1.096e+11 4.734e+11 1.172e+11 5.006e+11 1.245e+11 5.266e+11 1.316e+11 5.510e+11 1.382e+11 5.734e+11 1.443e+11 5.936e+11 1.499e+11 6.112e+11 1.548e+11 6.259e+11 1.590e+11 6.376e+11 1.623e+11 6.459e+11 1.648e+11 6.506e+11 1.664e+11 6.517e+11 1.670e+11 6.490e+11 1.667e+11 6.425e+11 1.654e+11 6.321e+11 1.631e+11 6.178e+11 1.599e+11 5.999e+11 1.558e+11 5.783e+11 1.508e+11 5.534e+11 1.451e+11 5.254e+11 1.386e+11 4.945e+11 1.314e+11 4.611e+11 1.237e+11 4.256e+11 1.155e+11 3.885e+11 1.069e+11 3.502e+11 9.803e+10 3.112e+11 8.899e+10 2.721e+11 7.986e+10 2.335e+11 7.075e+10 1.959e+11 6.177e+10 1.599e+11 5.301e+10 1.262e+11 4.455e+10 9.541e+10 3.650e+10 6.805e+10 2.896e+10 4.471e+10 2.202e+10 2.597e+10 1.580e+10 1.224e+10 1.048e+10 3.618e+09 6.481e+09 -1.261e+09 4.669e+09 -7.064e+09 5.370e+09 -1.835e+10 6.832e+09 -3.632e+10 7.835e+09 -6.123e+10 8.027e+09 -9.315e+10 7.291e+09 -1.319e+11 5.586e+09 -1.774e+11 2.901e+09 -2.294e+11 -7.599e+08 -2.873e+11 -5.359e+09 -3.508e+11 -1.085e+10 -4.194e+11 -1.720e+10 -4.922e+11 -2.430e+10 -5.684e+11 -3.207e+10 -6.474e+11 -4.040e+10 -7.280e+11 -4.915e+10 -8.095e+11 -5.821e+10 -8.909e+11 -6.744e+10 -9.712e+11 -7.668e+10 -1.049e+12 -8.578e+10 -1.125e+12 -9.461e+10 -1.196e+12 -1.030e+11 -1.262e+12 -1.108e+11 -1.323e+12 -1.180e+11 -1.377e+12 -1.243e+11 -1.424e+12 -1.296e+11 -1.464e+12 -1.340e+11 -1.496e+12 -1.374e+11 -1.519e+12 -1.396e+11 -1.534e+12 -1.407e+11 -1.540e+12 -1.407e+11 -1.538e+12 -1.396e+11 -1.527e+12 -1.375e+11 -1.508e+12 -1.344e+11 -1.482e+12 -1.304e+11 -1.448e+12 -1.257e+11 -1.407e+12 -1.202e+11 -1.360e+12 -1.143e+11 -1.307e+12 -1.078e+11 -1.250e+12 -1.010e+11 -1.188e+12 -9.405e+10 -1.123e+12 -8.696e+10 -1.056e+12 -7.987e+10 -9.866e+11 -7.293e+10 -9.166e+11 -6.623e+10 -8.465e+11 -5.980e+10 -7.768e+11 -5.366e+10 -7.082e+11 -4.785e+10 -6.413e+11 -4.240e+10 -5.767e+11 -3.735e+10 -5.147e+11 -3.270e+10 -4.560e+11 -2.844e+10 -4.007e+11 -2.459e+10 -3.492e+11 -2.113e+10 -3.017e+11 -1.804e+10 -2.582e+11 -1.529e+10 -2.188e+11 -1.288e+10 -1.835e+11 -1.076e+10 -1.522e+11 -8.923e+09 -1.247e+11 -7.333e+09 -1.008e+11 -5.969e+09 -8.046e+10 -4.808e+09 -6.323e+10 -3.827e+09 -4.888e+10 -3.005e+09 -3.713e+10 -2.325e+09 -2.765e+10 -1.767e+09 -2.015e+10 -1.317e+09 -1.434e+10 -9.589e+08 -9.935e+09 -6.796e+08 -6.678e+09 -4.665e+08 -4.339e+09 -3.084e+08 -2.712e+09 -1.947e+08 -1.621e+09 -1.160e+08 -9.209e+08 -6.427e+07 -4.930e+08 -3.222e+07 -2.466e+08 -1.395e+07 -1.143e+08 -4.655e+06 -4.874e+07 -6.864e+05 -1.917e+07 5.131e+05 -7.101e+06 5.464e+05 -2.567e+06 2.506e+05 -9.039e+05 -3.523e+04 -2.510e+05 -3.200e+05 5.610e+05 -1.242e+06 4.126e+06 -4.329e+06 1.687e+07 -1.225e+07 5.332e+07 -2.975e+07 1.426e+08 -6.452e+07 3.371e+08 -1.281e+08 7.240e+08 -2.375e+08 1.438e+09 -4.158e+08 2.678e+09 -6.944e+08 4.725e+09 -1.115e+09 7.962e+09 -1.732e+09 1.289e+10 -2.612e+09 2.017e+10 -3.844e+09 3.061e+10 -5.533e+09 4.521e+10 -7.810e+09 6.522e+10 -1.084e+10 9.208e+10 -1.480e+10 1.275e+11 -1.993e+10 1.734e+11 -2.648e+10 2.320e+11 -3.477e+10 3.059e+11 -4.513e+10 3.978e+11 -5.797e+10 5.108e+11 -7.373e+10 6.480e+11 -9.288e+10 8.130e+11 -1.160e+11 1.010e+12 -1.436e+11 1.241e+12 -1.762e+11 1.512e+12 -2.147e+11 1.825e+12 -2.595e+11 2.185e+12 -3.113e+11 2.595e+12 -3.708e+11 3.058e+12 -4.386e+11 3.577e+12 -5.153e+11 4.155e+12 -6.015e+11 4.793e+12 -6.976e+11 5.492e+12 -8.038e+11 6.253e+12 -9.207e+11 7.075e+12 -1.048e+12 7.955e+12 -1.186e+12 8.892e+12 -1.335e+12 9.881e+12 -1.494e+12 1.092e+13 -1.664e+12 1.199e+13 -1.843e+12 1.310e+13 -2.030e+12 1.423e+13 -2.224e+12 1.538e+13 -2.424e+12 1.653e+13 -2.628e+12 1.766e+13 -2.834e+12 1.877e+13 -3.041e+12 1.984e+13 -3.245e+12 2.086e+13 -3.445e+12 2.181e+13 -3.637e+12 2.267e+13 -3.820e+12 2.343e+13 -3.989e+12 2.408e+13 -4.143e+12 2.459e+13 -4.277e+12 2.495e+13 -4.390e+12 2.516e+13 -4.477e+12 2.520e+13 -4.537e+12 2.505e+13 -4.566e+12 2.473e+13 -4.561e+12 2.421e+13 -4.521e+12 2.349e+13 -4.444e+12 2.259e+13 -4.328e+12 2.150e+13 -4.174e+12 2.023e+13 -3.980e+12 1.880e+13 -3.749e+12 1.723e+13 -3.481e+12 1.553e+13 -3.181e+12 1.373e+13 -2.852e+12 1.188e+13 -2.501e+12 9.993e+12 -2.133e+12 8.124e+12 -1.759e+12 6.318e+12 -1.387e+12 4.630e+12 -1.031e+12 3.114e+12 -7.033e+11 1.832e+12 -4.200e+11 8.505e+11 -1.982e+11 2.383e+11 -5.666e+10 -3.372e+10 7.301e+09 -4.150e+11 9.807e+10 -1.356e+12 3.263e+11 -2.969e+12 7.251e+11 -5.332e+12 1.319e+12 -8.525e+12 2.136e+12 -1.262e+13 3.200e+12 -1.769e+13 4.538e+12 -2.382e+13 6.177e+12 -3.105e+13 8.141e+12 -3.944e+13 1.045e+13 -4.906e+13 1.314e+13 -5.994e+13 1.621e+13 -7.210e+13 1.970e+13 -8.559e+13 2.361e+13 -1.004e+14 2.796e+13 -1.165e+14 3.274e+13 -1.340e+14 3.799e+13 -1.527e+14 4.368e+13 -1.726e+14 4.981e+13 -1.937e+14 5.638e+13 -2.160e+14 6.338e+13 -2.392e+14 7.077e+13 -2.634e+14 7.855e+13 -2.884e+14 8.668e+13 -3.140e+14 9.513e+13 -3.402e+14 1.039e+14 -3.668e+14 1.128e+14 -3.936e+14 1.220e+14 -4.206e+14 1.313e+14 -4.474e+14 1.407e+14 -4.739e+14 1.502e+14 -4.999e+14 1.596e+14 -5.253e+14 1.689e+14 -5.498e+14 1.780e+14 -5.733e+14 1.870e+14 -5.956e+14 1.956e+14 -6.164e+14 2.039e+14 -6.357e+14 2.118e+14 -6.532e+14 2.192e+14 -6.688e+14 2.260e+14 -6.824e+14 2.322e+14 -6.939e+14 2.378e+14 -7.031e+14 2.427e+14 -7.099e+14 2.468e+14 -7.142e+14 2.501e+14 -7.160e+14 2.525e+14 -7.151e+14 2.540e+14 -7.116e+14 2.546e+14 -7.054e+14 2.541e+14 -6.966e+14 2.528e+14 -6.851e+14 2.504e+14 -6.711e+14 2.470e+14 -6.547e+14 2.426e+14 -6.359e+14 2.373e+14 -6.148e+14 2.311e+14 -5.917e+14 2.239e+14 -5.667e+14 2.160e+14 -5.399e+14 2.072e+14 -5.116e+14 1.976e+14 -4.820e+14 1.875e+14 -4.513e+14 1.767e+14 -4.198e+14 1.655e+14 -3.877e+14 1.539e+14 -3.554e+14 1.419e+14 -3.230e+14 1.298e+14 -2.909e+14 1.177e+14 -2.593e+14 1.055e+14 -2.284e+14 9.352e+13 -1.987e+14 8.180e+13 -1.702e+14 7.047e+13 -1.432e+14 5.962e+13 -1.181e+14 4.939e+13 -9.494e+13 3.988e+13 -7.394e+13 3.117e+13 -5.533e+13 2.338e+13 -3.923e+13 1.660e+13 -2.576e+13 1.088e+13 -1.505e+13 6.307e+12 -7.167e+12 2.943e+12 -2.160e+12 8.291e+11 -7.105e+10 5.580e+09 9.170e+11 -5.043e+11 4.685e+12 -2.313e+12 1.131e+13 -5.430e+12 2.073e+13 -9.846e+12 3.286e+13 -1.555e+13 4.755e+13 -2.248e+13 6.466e+13 -3.061e+13 8.405e+13 -3.989e+13 1.055e+14 -5.023e+13 1.288e+14 -6.156e+13 1.538e+14 -7.381e+13 1.802e+14 -8.686e+13 2.079e+14 -1.006e+14 2.364e+14 -1.150e+14 2.657e+14 -1.298e+14 2.954e+14 -1.450e+14 3.253e+14 -1.605e+14 3.551e+14 -1.761e+14 3.845e+14 -1.916e+14 4.135e+14 -2.071e+14 4.415e+14 -2.223e+14 4.685e+14 -2.371e+14 4.943e+14 -2.514e+14 5.186e+14 -2.651e+14 5.413e+14 -2.781e+14 5.621e+14 -2.903e+14 5.809e+14 -3.016e+14 5.976e+14 -3.119e+14 6.120e+14 -3.211e+14 6.242e+14 -3.292e+14 6.339e+14 -3.361e+14 6.411e+14 -3.417e+14 6.459e+14 -3.461e+14 6.482e+14 -3.492e+14 6.481e+14 -3.509e+14 6.455e+14 -3.514e+14 6.405e+14 -3.505e+14 6.332e+14 -3.483e+14 6.237e+14 -3.449e+14 6.122e+14 -3.403e+14 5.988e+14 -3.346e+14 5.836e+14 -3.279e+14 5.668e+14 -3.201e+14 5.484e+14 -3.113e+14 5.286e+14 -3.016e+14 5.077e+14 -2.912e+14 4.857e+14 -2.800e+14 4.630e+14 -2.682e+14 4.395e+14 -2.559e+14 4.156e+14 -2.431e+14 3.914e+14 -2.301e+14 3.671e+14 -2.168e+14 3.428e+14 -2.033e+14 3.187e+14 -1.899e+14 2.949e+14 -1.765e+14 2.716e+14 -1.632e+14 2.489e+14 -1.502e+14 2.270e+14 -1.375e+14 2.058e+14 -1.252e+14 1.855e+14 -1.132e+14 1.662e+14 -1.018e+14 1.479e+14 -9.091e+13 1.307e+14 -8.060e+13 1.146e+14 -7.090e+13 9.968e+13 -6.183e+13 8.591e+13 -5.342e+13 7.328e+13 -4.567e+13 6.181e+13 -3.860e+13 5.147e+13 -3.219e+13 4.223e+13 -2.645e+13 3.407e+13 -2.135e+13 2.694e+13 -1.688e+13 2.079e+13 -1.302e+13 1.558e+13 -9.730e+12 1.124e+13 -6.991e+12 7.712e+12 -4.765e+12 4.940e+12 -3.016e+12 2.858e+12 -1.710e+12 1.398e+12 -8.040e+11 4.979e+11 -2.613e+11 8.871e+10 -3.175e+10 -1.133e+11 1.091e+11 -5.066e+11 4.190e+11 -1.208e+12 9.379e+11 -2.161e+12 1.629e+12 -3.313e+12 2.458e+12 -4.612e+12 3.391e+12 -6.012e+12 4.399e+12 -7.470e+12 5.452e+12 -8.945e+12 6.524e+12 -1.040e+13 7.593e+12 -1.182e+13 8.635e+12 -1.315e+13 9.632e+12 -1.439e+13 1.057e+13 -1.552e+13 1.143e+13 -1.651e+13 1.221e+13 -1.737e+13 1.289e+13 -1.808e+13 1.347e+13 -1.863e+13 1.394e+13 -1.903e+13 1.431e+13 -1.928e+13 1.457e+13 -1.938e+13 1.472e+13 -1.934e+13 1.476e+13 -1.917e+13 1.470e+13 -1.888e+13 1.455e+13 -1.847e+13 1.431e+13 -1.795e+13 1.399e+13 -1.735e+13 1.359e+13 -1.668e+13 1.313e+13 -1.593e+13 1.261e+13 -1.514e+13 1.204e+13 -1.431e+13 1.144e+13 -1.345e+13 1.080e+13 -1.257e+13 1.015e+13 -1.169e+13 9.483e+12 -1.082e+13 8.813e+12 -9.951e+12 8.145e+12 -9.106e+12 7.486e+12 -8.287e+12 6.843e+12 -7.501e+12 6.220e+12 -6.750e+12 5.622e+12 -6.039e+12 5.053e+12 -5.373e+12 4.516e+12 -4.752e+12 4.011e+12 -4.177e+12 3.541e+12 -3.650e+12 3.107e+12 -3.168e+12 2.709e+12 -2.732e+12 2.346e+12 -2.340e+12 2.018e+12 -1.990e+12 1.724e+12 -1.680e+12 1.463e+12 -1.408e+12 1.232e+12 -1.170e+12 1.029e+12 -9.644e+11 8.528e+11 -7.878e+11 7.009e+11 -6.375e+11 5.710e+11 -5.108e+11 4.609e+11 -4.050e+11 3.685e+11 -3.175e+11 2.916e+11 -2.460e+11 2.283e+11 -1.882e+11 1.767e+11 -1.420e+11 1.351e+11 -1.055e+11 1.020e+11 -7.718e+10 7.597e+10 -5.546e+10 5.573e+10 -3.910e+10 4.025e+10 -2.700e+10 2.858e+10 -1.821e+10 1.993e+10 -1.198e+10 1.362e+10 -7.656e+09 9.117e+09 -4.741e+09 5.962e+09 -2.834e+09 3.802e+09 -1.628e+09 2.360e+09 -8.933e+08 1.420e+09 -4.657e+08 8.255e+08 -2.289e+08 4.598e+08 -1.049e+08 2.417e+08 -4.441e+07 1.163e+08 -1.707e+07 4.764e+07 -5.647e+06 1.382e+07 -1.775e+06 1.286e+06 -1.998e+06 -8.118e+06 -2.924e+06 -2.999e+07 -1.169e+06 -7.182e+07 7.599e+06 -1.421e+08 3.130e+07 -2.554e+08 8.309e+07 -4.340e+08 1.835e+08 -7.101e+08 3.629e+08 -1.129e+09 6.637e+08 -1.749e+09 1.143e+09 -2.647e+09 1.874e+09 -3.919e+09 2.946e+09 -5.679e+09 4.468e+09 -8.061e+09 6.568e+09 -1.123e+10 9.387e+09 -1.535e+10 1.308e+10 -2.062e+10 1.782e+10 -2.725e+10 2.380e+10 -3.547e+10 3.118e+10 -4.549e+10 4.017e+10 -5.755e+10 5.094e+10 -7.188e+10 6.367e+10 -8.869e+10 7.852e+10 -1.082e+11 9.564e+10 -1.305e+11 1.151e+11 -1.558e+11 1.371e+11 -1.843e+11 1.616e+11 -2.159e+11 1.886e+11 -2.506e+11 2.181e+11 -2.885e+11 2.500e+11 -3.294e+11 2.842e+11 -3.731e+11 3.206e+11 -4.194e+11 3.588e+11 -4.682e+11 3.987e+11 -5.189e+11 4.398e+11 -5.712e+11 4.820e+11 -6.246e+11 5.246e+11 -6.787e+11 5.674e+11 -7.329e+11 6.098e+11 -7.867e+11 6.515e+11 -8.395e+11 6.919e+11 -8.907e+11 7.305e+11 -9.397e+11 7.667e+11 -9.857e+11 8.001e+11 -1.028e+12 8.302e+11 -1.067e+12 8.566e+11 -1.101e+12 8.788e+11 -1.130e+12 8.966e+11 -1.153e+12 9.096e+11 -1.171e+12 9.176e+11 -1.182e+12 9.204e+11 -1.188e+12 9.180e+11 -1.186e+12 9.103e+11 -1.178e+12 8.974e+11 -1.163e+12 8.794e+11 -1.142e+12 8.566e+11 -1.115e+12 8.291e+11 -1.082e+12 7.974e+11 -1.043e+12 7.619e+11 -9.987e+11 7.229e+11 -9.499e+11 6.811e+11 -8.970e+11 6.369e+11 -8.406e+11 5.907e+11 -7.813e+11 5.434e+11 -7.200e+11 4.953e+11 -6.573e+11 4.471e+11 -5.939e+11 3.993e+11 -5.306e+11 3.525e+11 -4.682e+11 3.070e+11 -4.073e+11 2.636e+11 -3.488e+11 2.225e+11 -2.932e+11 1.841e+11 -2.411e+11 1.488e+11 -1.932e+11 1.170e+11 -1.499e+11 8.873e+10 -1.115e+11 6.428e+10 -7.861e+10 4.375e+10 -5.131e+10 2.718e+10 -2.978e+10 1.464e+10 -1.418e+10 6.106e+09 -4.448e+09 1.639e+09 -2.425e+08 1.994e+08 2.726e+09 -2.808e+09 1.009e+10 -8.937e+09 2.266e+10 -1.819e+10 4.010e+10 -3.034e+10 6.200e+10 -4.510e+10 8.792e+10 -6.214e+10 1.173e+11 -8.112e+10 1.497e+11 -1.017e+11 1.846e+11 -1.236e+11 2.212e+11 -1.463e+11 2.592e+11 -1.695e+11 2.979e+11 -1.929e+11 3.367e+11 -2.161e+11 3.750e+11 -2.388e+11 4.125e+11 -2.606e+11 4.485e+11 -2.812e+11 4.827e+11 -3.003e+11 5.145e+11 -3.178e+11 5.436e+11 -3.333e+11 5.698e+11 -3.468e+11 5.926e+11 -3.580e+11 6.120e+11 -3.668e+11 6.277e+11 -3.733e+11 6.396e+11 -3.772e+11 6.477e+11 -3.788e+11 6.520e+11 -3.779e+11 6.525e+11 -3.747e+11 6.494e+11 -3.693e+11 6.427e+11 -3.618e+11 6.326e+11 -3.524e+11 6.195e+11 -3.413e+11 6.034e+11 -3.286e+11 5.847e+11 -3.147e+11 5.637e+11 -2.997e+11 5.408e+11 -2.838e+11 5.161e+11 -2.673e+11 4.901e+11 -2.504e+11 4.631e+11 -2.332e+11 4.354e+11 -2.160e+11 4.073e+11 -1.990e+11 3.790e+11 -1.823e+11 3.510e+11 -1.661e+11 3.232e+11 -1.505e+11 2.962e+11 -1.356e+11 2.700e+11 -1.215e+11 2.447e+11 -1.082e+11 2.206e+11 -9.585e+10 1.978e+11 -8.438e+10 1.764e+11 -7.383e+10 1.563e+11 -6.420e+10 1.378e+11 -5.547e+10 1.206e+11 -4.761e+10 1.050e+11 -4.058e+10 9.080e+10 -3.434e+10 7.799e+10 -2.885e+10 6.653e+10 -2.404e+10 5.636e+10 -1.987e+10 4.738e+10 0.005 -51.814 -50.910 -50.006 -49.101 -48.197 -47.293 -46.388 -45.558 -44.812 -44.145 -43.554 -43.033 -42.580 -42.192 -41.868 -41.606 -41.405 -41.263 -41.182 -41.161 -41.200 -41.301 -41.464 -41.693 -41.988 -42.354 -42.793 -43.311 -43.913 -44.606 -45.398 -46.299 -47.323 -48.486 -49.810 -51.323 -53.066 -55.096 -57.505 -60.449 -64.254 -69.823 -82.027 -77.748 -70.606 -66.267 -63.089 -60.317 -57.768 -55.413 -53.253 -51.287 -49.500 -47.879 -46.407 -45.070 -43.857 -42.755 -41.755 -40.848 -40.028 -39.288 -38.621 -38.024 -37.494 -37.027 -36.623 -36.277 -35.989 -35.757 -35.579 -35.455 -35.383 -35.364 -35.396 -35.480 -35.615 -35.800 -36.037 -36.324 -36.661 -37.049 -37.487 -37.975 -38.512 -39.101 -39.742 -40.438 -41.196 -42.026 -42.946 -43.982 -45.179 -46.600 -48.360 -50.618 -53.461 -55.904 -55.234 -51.648 -48.159 -45.321 -42.985 -41.008 -39.296 -37.789 -36.447 -35.243 -34.158 -33.176 -32.286 -31.481 -30.754 -30.097 -29.505 -28.977 -28.513 -28.110 -27.767 -27.484 -27.259 -27.094 -26.988 -26.944 -26.961 -27.042 -27.192 -27.412 -27.705 -28.068 -28.516 -29.057 -29.700 -30.456 -31.342 -32.376 -33.583 -34.996 -36.662 -38.647 -41.046 -44.017 -47.845 -53.117 -61.464 -75.662 -76.724 -63.982 -53.970 -47.308 -42.377 -38.445 -35.167 -32.352 -29.885 -27.688 -25.710 -23.912 -22.259 -20.727 -19.308 -17.988 -16.759 -15.610 -14.536 -13.523 -12.557 -11.649 -10.794 -9.989 -9.232 -8.516 -7.826 -7.176 -6.564 -5.991 -5.453 -4.941 -4.449 -3.991 -3.565 -3.172 -2.799 -2.445 -2.119 -1.823 -1.556 -1.304 -1.069 -0.862 -0.684 -0.531 -0.386 -0.263 -0.169 -0.102 -0.050 -0.012 0.000 -0.016 -0.060 -0.096 -0.159 -0.250 -0.369 -0.505 -0.659 -0.841 -1.052 -1.286 -1.528 -1.798 -2.097 -2.426 -2.775 -3.140 -3.537 -3.967 -4.429 -4.910 -5.414 -5.954 -6.532 -7.150 -7.796 -8.476 -9.200 -9.970 -10.789 -11.657 -12.564 -13.525 -14.549 -15.643 -16.813 -18.065 -19.394 -20.819 -22.363 -24.044 -25.883 -27.908 -30.159 -32.681 -35.561 -38.933 -43.033 -48.403 -56.935 -64.005 -57.343 -51.803 -47.924 -44.623 -41.743 -39.250 -37.100 -35.246 -33.643 -32.253 -31.042 -29.982 -29.055 -28.250 -27.554 -26.956 -26.447 -26.020 -25.670 -25.391 -25.180 -25.032 -24.945 -24.909 -24.929 -25.005 -25.138 -25.325 -25.566 -25.862 -26.213 -26.620 -27.083 -27.605 -28.188 -28.834 -29.547 -30.330 -31.185 -32.118 -33.141 -34.261 -35.490 -36.841 -38.333 -39.986 -41.831 -43.903 -46.248 -48.907 -51.879 -54.952 -57.407 -58.451 -58.442 -58.360 -58.817 -60.143 -62.702 -66.340 -65.200 -60.083 -55.897 -52.795 -50.391 -48.452 -46.853 -45.516 -44.389 -43.436 -42.633 -41.960 -41.402 -40.948 -40.590 -40.321 -40.135 -40.029 -39.999 -40.043 -40.159 -40.346 -40.605 -40.935 -41.337 -41.813 -42.365 -42.995 -43.707 -44.503 -45.388 -46.371 -47.457 -48.656 -49.977 -51.435 -53.045 -54.831 -56.828 -59.095 -61.747 -65.026 -69.313 -73.564 -71.271 -66.466 -62.801 -59.941 -57.581 -55.563 -53.802 -52.244 -50.858 -49.618 -48.507 -47.510 -46.618 -45.820 -45.110 -44.480 -43.925 -43.441 -43.024 -42.670 -42.378 -42.143 -41.965 -41.842 -41.772 -41.755 -41.789 -41.875 -42.011 -42.198 -42.436 -42.726 -43.068 -43.464 -43.915 -44.422 -44.988 -45.616 -46.310 -47.073 -47.911 -48.815 -49.720 -50.624 -51.529 -52.433 -53.337 0 1 1.0 1 EN HV 17.14 22.7 0.05 4.440e+10 -5.146e+10 5.330e+10 -5.922e+10 6.344e+10 -6.774e+10 7.491e+10 -7.706e+10 8.777e+10 -8.718e+10 1.021e+11 -9.806e+10 1.179e+11 -1.097e+11 1.352e+11 -1.221e+11 1.540e+11 -1.351e+11 1.743e+11 -1.488e+11 1.960e+11 -1.629e+11 2.191e+11 -1.775e+11 2.434e+11 -1.924e+11 2.688e+11 -2.075e+11 2.951e+11 -2.227e+11 3.221e+11 -2.378e+11 3.496e+11 -2.526e+11 3.773e+11 -2.670e+11 4.050e+11 -2.809e+11 4.323e+11 -2.941e+11 4.590e+11 -3.064e+11 4.846e+11 -3.177e+11 5.090e+11 -3.278e+11 5.317e+11 -3.367e+11 5.525e+11 -3.441e+11 5.710e+11 -3.500e+11 5.870e+11 -3.543e+11 6.003e+11 -3.569e+11 6.105e+11 -3.577e+11 6.175e+11 -3.567e+11 6.212e+11 -3.539e+11 6.213e+11 -3.492e+11 6.179e+11 -3.427e+11 6.109e+11 -3.344e+11 6.004e+11 -3.243e+11 5.863e+11 -3.126e+11 5.687e+11 -2.993e+11 5.479e+11 -2.845e+11 5.241e+11 -2.684e+11 4.974e+11 -2.511e+11 4.682e+11 -2.327e+11 4.368e+11 -2.136e+11 4.036e+11 -1.939e+11 3.689e+11 -1.738e+11 3.332e+11 -1.536e+11 2.970e+11 -1.335e+11 2.607e+11 -1.138e+11 2.248e+11 -9.476e+10 1.899e+11 -7.671e+10 1.564e+11 -5.989e+10 1.250e+11 -4.458e+10 9.608e+10 -3.107e+10 7.021e+10 -1.959e+10 4.787e+10 -1.037e+10 2.957e+10 -3.588e+09 1.572e+10 7.006e+08 6.653e+09 2.826e+09 1.794e+09 4.336e+09 -2.280e+09 8.276e+09 -1.013e+10 1.594e+10 -2.340e+10 2.702e+10 -4.245e+10 4.129e+10 -6.740e+10 5.860e+10 -9.813e+10 7.875e+10 -1.345e+11 1.016e+11 -1.763e+11 1.268e+11 -2.231e+11 1.542e+11 -2.745e+11 1.834e+11 -3.301e+11 2.141e+11 -3.892e+11 2.459e+11 -4.511e+11 2.784e+11 -5.151e+11 3.114e+11 -5.805e+11 3.442e+11 -6.463e+11 3.766e+11 -7.120e+11 4.081e+11 -7.766e+11 4.385e+11 -8.392e+11 4.672e+11 -8.992e+11 4.941e+11 -9.557e+11 5.188e+11 -1.008e+12 5.410e+11 -1.055e+12 5.605e+11 -1.097e+12 5.771e+11 -1.134e+12 5.906e+11 -1.163e+12 6.010e+11 -1.186e+12 6.080e+11 -1.202e+12 6.117e+11 -1.211e+12 6.121e+11 -1.213e+12 6.092e+11 -1.208e+12 6.031e+11 -1.196e+12 5.938e+11 -1.177e+12 5.816e+11 -1.152e+12 5.665e+11 -1.121e+12 5.489e+11 -1.085e+12 5.289e+11 -1.044e+12 5.067e+11 -9.986e+11 4.828e+11 -9.495e+11 4.572e+11 -8.975e+11 4.305e+11 -8.431e+11 4.027e+11 -7.870e+11 3.744e+11 -7.300e+11 3.458e+11 -6.727e+11 3.171e+11 -6.158e+11 2.888e+11 -5.597e+11 2.610e+11 -5.049e+11 2.340e+11 -4.520e+11 2.081e+11 -4.014e+11 1.835e+11 -3.534e+11 1.603e+11 -3.084e+11 1.387e+11 -2.666e+11 1.187e+11 -2.281e+11 1.005e+11 -1.932e+11 8.412e+10 -1.617e+11 6.951e+10 -1.336e+11 5.663e+10 -1.090e+11 4.546e+10 -8.761e+10 3.589e+10 -6.930e+10 2.783e+10 -5.385e+10 2.114e+10 -4.103e+10 1.570e+10 -3.058e+10 1.136e+10 -2.222e+10 7.971e+09 -1.568e+10 5.400e+09 -1.069e+10 3.503e+09 -6.999e+09 2.154e+09 -4.358e+09 1.235e+09 -2.545e+09 6.431e+08 -1.365e+09 2.889e+08 -6.503e+08 9.891e+07 -2.578e+08 1.412e+07 -7.484e+07 -1.093e+07 -1.037e+07 -1.358e+07 1.316e+07 -1.911e+07 3.640e+07 -2.828e+07 5.507e+07 -3.156e+07 6.075e+07 -2.771e+07 5.328e+07 -1.928e+07 3.769e+07 -9.902e+06 2.073e+07 -2.679e+06 8.014e+06 9.222e+05 1.571e+06 2.009e+06 -1.477e+06 2.956e+06 -3.954e+06 3.540e+06 -4.097e+06 2.045e+06 -1.684e+06 -9.008e+05 7.195e+06 -1.192e+07 5.039e+07 -5.615e+07 1.889e+08 -1.764e+08 5.232e+08 -4.399e+08 1.210e+09 -9.470e+08 2.480e+09 -1.842e+09 4.656e+09 -3.321e+09 8.168e+09 -5.643e+09 1.358e+10 -9.145e+09 2.162e+10 -1.425e+10 3.317e+10 -2.148e+10 4.932e+10 -3.146e+10 7.139e+10 -4.496e+10 1.009e+11 -6.285e+10 1.396e+11 -8.617e+10 1.895e+11 -1.161e+11 2.530e+11 -1.539e+11 3.325e+11 -2.011e+11 4.309e+11 -2.593e+11 5.512e+11 -3.302e+11 6.965e+11 -4.156e+11 8.704e+11 -5.176e+11 1.076e+12 -6.379e+11 1.318e+12 -7.788e+11 1.598e+12 -9.422e+11 1.921e+12 -1.130e+12 2.290e+12 -1.344e+12 2.708e+12 -1.586e+12 3.178e+12 -1.857e+12 3.702e+12 -2.159e+12 4.282e+12 -2.492e+12 4.918e+12 -2.857e+12 5.611e+12 -3.254e+12 6.361e+12 -3.682e+12 7.166e+12 -4.141e+12 8.023e+12 -4.627e+12 8.928e+12 -5.141e+12 9.875e+12 -5.678e+12 1.086e+13 -6.235e+12 1.188e+13 -6.809e+12 1.291e+13 -7.393e+12 1.396e+13 -7.983e+12 1.501e+13 -8.573e+12 1.605e+13 -9.156e+12 1.707e+13 -9.726e+12 1.805e+13 -1.028e+13 1.898e+13 -1.080e+13 1.985e+13 -1.128e+13 2.063e+13 -1.172e+13 2.133e+13 -1.211e+13 2.192e+13 -1.244e+13 2.239e+13 -1.271e+13 2.272e+13 -1.290e+13 2.291e+13 -1.301e+13 2.295e+13 -1.303e+13 2.282e+13 -1.297e+13 2.252e+13 -1.280e+13 2.205e+13 -1.255e+13 2.140e+13 -1.219e+13 2.058e+13 -1.173e+13 1.959e+13 -1.118e+13 1.844e+13 -1.054e+13 1.714e+13 -9.813e+12 1.571e+13 -9.008e+12 1.416e+13 -8.136e+12 1.253e+13 -7.211e+12 1.083e+13 -6.249e+12 9.116e+12 -5.270e+12 7.413e+12 -4.295e+12 5.767e+12 -3.349e+12 4.226e+12 -2.461e+12 2.843e+12 -1.660e+12 1.672e+12 -9.795e+11 7.765e+11 -4.567e+11 2.175e+11 -1.287e+11 -3.108e+10 1.737e+10 -3.801e+11 2.216e+11 -1.242e+12 7.278e+11 -2.719e+12 1.599e+12 -4.883e+12 2.880e+12 -7.807e+12 4.615e+12 -1.156e+13 6.847e+12 -1.621e+13 9.618e+12 -2.182e+13 1.297e+13 -2.845e+13 1.694e+13 -3.614e+13 2.155e+13 -4.497e+13 2.685e+13 -5.494e+13 3.285e+13 -6.610e+13 3.958e+13 -7.848e+13 4.704e+13 -9.207e+13 5.525e+13 -1.069e+14 6.420e+13 -1.229e+14 7.390e+13 -1.401e+14 8.432e+13 -1.584e+14 9.544e+13 -1.778e+14 1.072e+14 -1.983e+14 1.197e+14 -2.197e+14 1.327e+14 -2.420e+14 1.463e+14 -2.650e+14 1.603e+14 -2.887e+14 1.748e+14 -3.130e+14 1.896e+14 -3.376e+14 2.047e+14 -3.625e+14 2.200e+14 -3.875e+14 2.353e+14 -4.124e+14 2.507e+14 -4.371e+14 2.659e+14 -4.615e+14 2.810e+14 -4.853e+14 2.957e+14 -5.084e+14 3.101e+14 -5.305e+14 3.239e+14 -5.516e+14 3.371e+14 -5.714e+14 3.495e+14 -5.898e+14 3.612e+14 -6.067e+14 3.719e+14 -6.218e+14 3.816e+14 -6.351e+14 3.902e+14 -6.465e+14 3.977e+14 -6.558e+14 4.039e+14 -6.629e+14 4.088e+14 -6.677e+14 4.124e+14 -6.701e+14 4.144e+14 -6.700e+14 4.150e+14 -6.674e+14 4.140e+14 -6.624e+14 4.115e+14 -6.548e+14 4.075e+14 -6.447e+14 4.019e+14 -6.322e+14 3.947e+14 -6.173e+14 3.861e+14 -6.001e+14 3.761e+14 -5.808e+14 3.647e+14 -5.594e+14 3.519e+14 -5.361e+14 3.380e+14 -5.111e+14 3.230e+14 -4.847e+14 3.069e+14 -4.569e+14 2.900e+14 -4.280e+14 2.724e+14 -3.983e+14 2.541e+14 -3.680e+14 2.355e+14 -3.374e+14 2.165e+14 -3.066e+14 1.974e+14 -2.761e+14 1.784e+14 -2.460e+14 1.596e+14 -2.167e+14 1.411e+14 -1.883e+14 1.232e+14 -1.611e+14 1.060e+14 -1.354e+14 8.957e+13 -1.114e+14 7.421e+13 -8.932e+13 5.998e+13 -6.930e+13 4.701e+13 -5.157e+13 3.544e+13 -3.627e+13 2.536e+13 -2.352e+13 1.686e+13 -1.345e+13 1.003e+13 -6.147e+12 4.934e+12 -1.656e+12 1.610e+12 4.528e+09 1.291e+11 1.316e+12 -3.981e+11 5.474e+12 -2.543e+12 1.247e+13 -6.480e+12 2.225e+13 -1.218e+13 3.473e+13 -1.961e+13 4.979e+13 -2.869e+13 6.729e+13 -3.935e+13 8.711e+13 -5.151e+13 1.090e+14 -6.504e+13 1.329e+14 -7.984e+13 1.585e+14 -9.580e+13 1.856e+14 -1.127e+14 2.140e+14 -1.305e+14 2.434e+14 -1.491e+14 2.735e+14 -1.681e+14 3.042e+14 -1.876e+14 3.352e+14 -2.073e+14 3.662e+14 -2.270e+14 3.969e+14 -2.467e+14 4.272e+14 -2.660e+14 4.566e+14 -2.850e+14 4.851e+14 -3.033e+14 5.124e+14 -3.209e+14 5.381e+14 -3.376e+14 5.623e+14 -3.534e+14 5.846e+14 -3.680e+14 6.049e+14 -3.813e+14 6.230e+14 -3.933e+14 6.389e+14 -4.039e+14 6.523e+14 -4.130e+14 6.633e+14 -4.205e+14 6.717e+14 -4.264e+14 6.776e+14 -4.307e+14 6.809e+14 -4.333e+14 6.815e+14 -4.343e+14 6.796e+14 -4.336e+14 6.753e+14 -4.313e+14 6.684e+14 -4.275e+14 6.593e+14 -4.221e+14 6.479e+14 -4.154e+14 6.345e+14 -4.073e+14 6.192e+14 -3.979e+14 6.020e+14 -3.874e+14 5.832e+14 -3.757e+14 5.629e+14 -3.631e+14 5.413e+14 -3.496e+14 5.186e+14 -3.353e+14 4.950e+14 -3.203e+14 4.706e+14 -3.048e+14 4.456e+14 -2.889e+14 4.203e+14 -2.728e+14 3.948e+14 -2.564e+14 3.692e+14 -2.400e+14 3.438e+14 -2.236e+14 3.187e+14 -2.074e+14 2.940e+14 -1.914e+14 2.699e+14 -1.758e+14 2.465e+14 -1.606e+14 2.239e+14 -1.458e+14 2.022e+14 -1.317e+14 1.815e+14 -1.182e+14 1.618e+14 -1.053e+14 1.433e+14 -9.320e+13 1.259e+14 -8.183e+13 1.097e+14 -7.123e+13 9.473e+13 -6.143e+13 8.097e+13 -5.242e+13 6.843e+13 -4.422e+13 5.710e+13 -3.682e+13 4.695e+13 -3.019e+13 3.795e+13 -2.432e+13 3.007e+13 -1.920e+13 2.325e+13 -1.477e+13 1.745e+13 -1.102e+13 1.262e+13 -7.904e+12 8.676e+12 -5.376e+12 5.568e+12 -3.396e+12 3.227e+12 -1.921e+12 1.582e+12 -9.011e+11 5.639e+11 -2.919e+11 1.005e+11 -3.516e+10 -1.296e+11 1.220e+11 -5.794e+11 4.673e+11 -1.383e+12 1.043e+12 -2.479e+12 1.808e+12 -3.808e+12 2.721e+12 -5.310e+12 3.746e+12 -6.936e+12 4.848e+12 -8.636e+12 5.996e+12 -1.036e+13 7.160e+12 -1.208e+13 8.316e+12 -1.375e+13 9.438e+12 -1.534e+13 1.051e+13 -1.682e+13 1.151e+13 -1.818e+13 1.242e+13 -1.939e+13 1.324e+13 -2.044e+13 1.396e+13 -2.133e+13 1.456e+13 -2.204e+13 1.505e+13 -2.257e+13 1.542e+13 -2.292e+13 1.567e+13 -2.311e+13 1.580e+13 -2.312e+13 1.582e+13 -2.298e+13 1.573e+13 -2.269e+13 1.555e+13 -2.226e+13 1.526e+13 -2.171e+13 1.489e+13 -2.105e+13 1.445e+13 -2.028e+13 1.393e+13 -1.944e+13 1.336e+13 -1.853e+13 1.274e+13 -1.757e+13 1.207e+13 -1.656e+13 1.138e+13 -1.554e+13 1.067e+13 -1.449e+13 9.947e+12 -1.345e+13 9.220e+12 -1.241e+13 8.499e+12 -1.139e+13 7.789e+12 -1.040e+13 7.097e+12 -9.442e+12 6.429e+12 -8.523e+12 5.790e+12 -7.649e+12 5.183e+12 -6.825e+12 4.611e+12 -6.053e+12 4.076e+12 -5.336e+12 3.580e+12 -4.675e+12 3.123e+12 -4.069e+12 2.705e+12 -3.518e+12 2.327e+12 -3.020e+12 1.987e+12 -2.574e+12 1.683e+12 -2.178e+12 1.414e+12 -1.828e+12 1.178e+12 -1.522e+12 9.732e+11 -1.256e+12 7.963e+11 -1.027e+12 6.452e+11 -8.312e+11 5.172e+11 -6.660e+11 4.100e+11 -5.278e+11 3.212e+11 -4.133e+11 2.484e+11 -3.195e+11 1.894e+11 -2.437e+11 1.422e+11 -1.830e+11 1.050e+11 -1.352e+11 7.610e+10 -9.808e+10 5.402e+10 -6.973e+10 3.745e+10 -4.847e+10 2.527e+10 -3.286e+10 1.653e+10 -2.164e+10 1.043e+10 -1.379e+10 6.290e+09 -8.455e+09 3.595e+09 -4.954e+09 1.914e+09 -2.750e+09 9.270e+08 -1.430e+09 3.895e+08 -6.856e+08 1.263e+08 -2.975e+08 1.736e+07 -1.145e+08 -1.544e+07 -3.843e+07 -1.811e+07 -1.086e+07 -1.314e+07 -1.849e+06 -7.720e+06 4.362e+05 -3.052e+06 4.793e+05 -2.998e+05 1.931e+05 3.223e+06 -1.094e+06 1.153e+07 -3.593e+06 2.439e+07 -5.374e+06 3.822e+07 -3.725e+06 4.835e+07 3.304e+06 5.110e+07 1.643e+07 4.639e+07 4.041e+07 3.801e+07 9.657e+07 2.342e+07 2.282e+08 -2.098e+07 4.974e+08 -1.416e+08 9.851e+08 -4.033e+08 1.795e+09 -8.899e+08 3.056e+09 -1.707e+09 4.921e+09 -2.983e+09 7.567e+09 -4.865e+09 1.120e+10 -7.525e+09 1.603e+10 -1.115e+10 2.228e+10 -1.594e+10 3.022e+10 -2.211e+10 4.009e+10 -2.988e+10 5.211e+10 -3.944e+10 6.655e+10 -5.102e+10 8.360e+10 -6.480e+10 1.035e+11 -8.092e+10 1.263e+11 -9.955e+10 1.522e+11 -1.208e+11 1.813e+11 -1.446e+11 2.136e+11 -1.711e+11 2.491e+11 -2.002e+11 2.876e+11 -2.318e+11 3.290e+11 -2.658e+11 3.731e+11 -3.019e+11 4.196e+11 -3.399e+11 4.681e+11 -3.795e+11 5.184e+11 -4.203e+11 5.697e+11 -4.618e+11 6.218e+11 -5.038e+11 6.740e+11 -5.458e+11 7.258e+11 -5.871e+11 7.765e+11 -6.275e+11 8.256e+11 -6.663e+11 8.723e+11 -7.031e+11 9.162e+11 -7.375e+11 9.565e+11 -7.689e+11 9.926e+11 -7.969e+11 1.024e+12 -8.213e+11 1.051e+12 -8.415e+11 1.071e+12 -8.574e+11 1.086e+12 -8.686e+11 1.095e+12 -8.750e+11 1.098e+12 -8.765e+11 1.094e+12 -8.730e+11 1.084e+12 -8.644e+11 1.067e+12 -8.509e+11 1.044e+12 -8.326e+11 1.015e+12 -8.096e+11 9.812e+11 -7.822e+11 9.417e+11 -7.507e+11 8.976e+11 -7.155e+11 8.494e+11 -6.770e+11 7.977e+11 -6.356e+11 7.431e+11 -5.917e+11 6.863e+11 -5.461e+11 6.281e+11 -4.992e+11 5.691e+11 -4.515e+11 5.102e+11 -4.038e+11 4.519e+11 -3.565e+11 3.949e+11 -3.102e+11 3.399e+11 -2.655e+11 2.875e+11 -2.230e+11 2.383e+11 -1.830e+11 1.929e+11 -1.463e+11 1.516e+11 -1.131e+11 1.147e+11 -8.365e+10 8.278e+10 -5.845e+10 5.591e+10 -3.763e+10 3.426e+10 -2.133e+10 1.799e+10 -9.667e+09 7.117e+09 -2.609e+09 1.649e+09 2.211e+08 -5.738e+08 2.690e+09 -5.575e+09 8.959e+09 -1.512e+10 1.936e+10 -2.916e+10 3.353e+10 -4.737e+10 5.112e+10 -6.939e+10 7.177e+10 -9.478e+10 9.503e+10 -1.231e+11 1.205e+11 -1.538e+11 1.477e+11 -1.864e+11 1.761e+11 -2.204e+11 2.053e+11 -2.553e+11 2.350e+11 -2.905e+11 2.645e+11 -3.255e+11 2.934e+11 -3.599e+11 3.215e+11 -3.930e+11 3.483e+11 -4.245e+11 3.735e+11 -4.539e+11 3.967e+11 -4.809e+11 4.178e+11 -5.051e+11 4.365e+11 -5.263e+11 4.526e+11 -5.441e+11 4.659e+11 -5.585e+11 4.765e+11 -5.693e+11 4.842e+11 -5.764e+11 4.890e+11 -5.798e+11 4.909e+11 -5.796e+11 4.901e+11 -5.758e+11 4.865e+11 -5.687e+11 4.803e+11 -5.583e+11 4.717e+11 -5.450e+11 4.607e+11 -5.289e+11 4.477e+11 -5.105e+11 4.328e+11 -4.899e+11 4.162e+11 -4.675e+11 3.982e+11 -4.437e+11 3.789e+11 -4.187e+11 3.587e+11 -3.929e+11 3.379e+11 -3.666e+11 3.166e+11 -3.401e+11 2.950e+11 -3.138e+11 2.734e+11 -2.878e+11 2.520e+11 -2.623e+11 2.309e+11 -2.377e+11 2.103e+11 -2.141e+11 1.905e+11 -1.916e+11 1.714e+11 -1.704e+11 1.534e+11 -1.505e+11 1.363e+11 -1.320e+11 1.203e+11 -1.150e+11 1.055e+11 -9.938e+10 9.189e+10 -8.519e+10 7.942e+10 -7.243e+10 6.812e+10 -6.103e+10 5.797e+10 -5.092e+10 4.892e+10 -4.205e+10 4.092e+10 -3.435e+10 3.392e+10 -2.771e+10 2.785e+10 0.005 -48.907 -47.914 -46.921 -45.928 -44.936 -43.943 -42.950 -42.040 -41.223 -40.493 -39.842 -39.267 -38.761 -38.323 -37.949 -37.638 -37.387 -37.195 -37.061 -36.986 -36.968 -37.009 -37.108 -37.269 -37.491 -37.777 -38.130 -38.554 -39.054 -39.634 -40.302 -41.066 -41.938 -42.933 -44.069 -45.374 -46.885 -48.659 -50.788 -53.434 -56.937 -62.224 -74.223 -69.897 -62.982 -59.238 -57.049 -55.566 -54.448 -53.488 -52.546 -51.528 -50.402 -49.182 -47.912 -46.638 -45.398 -44.219 -43.114 -42.091 -41.153 -40.298 -39.523 -38.825 -38.203 -37.653 -37.174 -36.762 -36.415 -36.133 -35.912 -35.752 -35.652 -35.611 -35.628 -35.704 -35.837 -36.027 -36.275 -36.579 -36.939 -37.356 -37.826 -38.350 -38.925 -39.549 -40.222 -40.942 -41.713 -42.541 -43.439 -44.436 -45.573 -46.919 -48.590 -50.749 -53.489 -55.829 -55.057 -51.375 -47.795 -44.874 -42.462 -40.416 -38.642 -37.079 -35.687 -34.438 -33.311 -32.292 -31.369 -30.533 -29.778 -29.094 -28.478 -27.927 -27.441 -27.017 -26.654 -26.350 -26.106 -25.920 -25.794 -25.727 -25.722 -25.779 -25.903 -26.094 -26.355 -26.682 -27.088 -27.580 -28.166 -28.855 -29.658 -30.590 -31.668 -32.915 -34.359 -36.038 -37.998 -40.302 -43.049 -46.380 -50.565 -56.260 -60.366 -56.633 -49.861 -44.749 -40.624 -37.137 -34.121 -31.467 -29.104 -26.977 -25.047 -23.284 -21.658 -20.146 -18.742 -17.435 -16.217 -15.079 -14.014 -13.010 -12.053 -11.153 -10.307 -9.512 -8.765 -8.058 -7.380 -6.740 -6.141 -5.580 -5.055 -4.555 -4.077 -3.633 -3.222 -2.843 -2.486 -2.148 -1.838 -1.560 -1.311 -1.078 -0.862 -0.675 -0.517 -0.386 -0.261 -0.159 -0.086 -0.042 -0.013 0.000 -0.014 -0.057 -0.130 -0.199 -0.298 -0.427 -0.583 -0.756 -0.947 -1.168 -1.420 -1.698 -1.988 -2.307 -2.660 -3.044 -3.451 -3.876 -4.337 -4.835 -5.369 -5.928 -6.515 -7.145 -7.819 -8.540 -9.298 -10.099 -10.954 -11.868 -12.845 -13.889 -14.991 -16.171 -17.442 -18.817 -20.307 -21.931 -23.695 -25.637 -27.806 -30.256 -33.055 -36.292 -40.021 -44.000 -47.160 -48.401 -48.927 -50.635 -55.833 -60.063 -51.288 -44.567 -40.373 -37.305 -34.897 -32.932 -31.293 -29.905 -28.718 -27.700 -26.822 -26.060 -25.404 -24.846 -24.376 -23.988 -23.675 -23.433 -23.257 -23.144 -23.091 -23.097 -23.159 -23.267 -23.429 -23.645 -23.916 -24.240 -24.617 -25.048 -25.533 -26.072 -26.667 -27.318 -28.026 -28.791 -29.614 -30.494 -31.427 -32.414 -33.454 -34.545 -35.684 -36.867 -38.093 -39.367 -40.701 -42.117 -43.651 -45.342 -47.184 -48.962 -49.949 -49.334 -47.439 -45.178 -43.052 -41.177 -39.542 -38.109 -36.849 -35.738 -34.755 -33.886 -33.117 -32.438 -31.842 -31.320 -30.869 -30.483 -30.160 -29.895 -29.688 -29.535 -29.435 -29.387 -29.390 -29.444 -29.547 -29.700 -29.904 -30.158 -30.464 -30.822 -31.235 -31.704 -32.232 -32.822 -33.477 -34.201 -34.999 -35.881 -36.854 -37.930 -39.124 -40.455 -41.951 -43.647 -45.599 -47.894 -50.676 -54.227 -58.955 -63.836 -62.364 -58.552 -56.025 -54.409 -53.358 -52.671 -52.212 -51.869 -51.541 -51.138 -50.596 -49.894 -49.052 -48.119 -47.150 -46.190 -45.269 -44.406 -43.612 -42.890 -42.242 -41.666 -41.159 -40.720 -40.345 -40.032 -39.779 -39.584 -39.444 -39.360 -39.329 -39.351 -39.426 -39.555 -39.737 -39.974 -40.268 -40.620 -41.035 -41.516 -42.068 -42.684 -43.300 -43.915 -44.531 -45.146 -45.762 0 1 1.0 1 EN VV 17.14 22.7 0.05 -3.541e+10 -7.852e+10 -3.854e+10 -9.154e+10 -4.166e+10 -1.060e+11 -4.473e+10 -1.219e+11 -4.770e+10 -1.392e+11 -5.050e+10 -1.581e+11 -5.308e+10 -1.784e+11 -5.538e+10 -2.001e+11 -5.734e+10 -2.231e+11 -5.888e+10 -2.474e+11 -5.997e+10 -2.728e+11 -6.054e+10 -2.991e+11 -6.054e+10 -3.262e+11 -5.994e+10 -3.540e+11 -5.870e+10 -3.820e+11 -5.677e+10 -4.102e+11 -5.417e+10 -4.383e+11 -5.088e+10 -4.659e+11 -4.692e+10 -4.927e+11 -4.229e+10 -5.186e+11 -3.704e+10 -5.432e+11 -3.119e+10 -5.662e+11 -2.480e+10 -5.873e+11 -1.794e+10 -6.062e+11 -1.067e+10 -6.227e+11 -3.076e+09 -6.364e+11 4.752e+09 -6.471e+11 1.273e+10 -6.547e+11 2.076e+10 -6.589e+11 2.874e+10 -6.596e+11 3.657e+10 -6.566e+11 4.415e+10 -6.499e+11 5.138e+10 -6.395e+11 5.816e+10 -6.254e+11 6.441e+10 -6.075e+11 7.002e+10 -5.862e+11 7.491e+10 -5.614e+11 7.901e+10 -5.334e+11 8.225e+10 -5.026e+11 8.457e+10 -4.692e+11 8.594e+10 -4.336e+11 8.632e+10 -3.963e+11 8.568e+10 -3.577e+11 8.404e+10 -3.184e+11 8.141e+10 -2.790e+11 7.783e+10 -2.400e+11 7.335e+10 -2.020e+11 6.806e+10 -1.657e+11 6.208e+10 -1.318e+11 5.556e+10 -1.008e+11 4.868e+10 -7.330e+10 4.175e+10 -4.985e+10 3.515e+10 -3.076e+10 2.949e+10 -1.603e+10 2.561e+10 -4.978e+09 2.433e+10 4.311e+09 2.583e+10 1.481e+10 2.933e+10 2.929e+10 3.374e+10 4.945e+10 3.824e+10 7.601e+10 4.228e+10 1.091e+11 4.551e+10 1.488e+11 4.769e+10 1.948e+11 4.864e+10 2.468e+11 4.825e+10 3.042e+11 4.643e+10 3.667e+11 4.315e+10 4.335e+11 3.840e+10 5.039e+11 3.219e+10 5.773e+11 2.459e+10 6.527e+11 1.570e+10 7.292e+11 5.614e+09 8.061e+11 -5.507e+09 8.824e+11 -1.752e+10 9.571e+11 -3.027e+10 1.030e+12 -4.355e+10 1.099e+12 -5.717e+10 1.164e+12 -7.097e+10 1.225e+12 -8.472e+10 1.280e+12 -9.824e+10 1.329e+12 -1.114e+11 1.371e+12 -1.239e+11 1.407e+12 -1.357e+11 1.434e+12 -1.466e+11 1.455e+12 -1.566e+11 1.467e+12 -1.654e+11 1.471e+12 -1.730e+11 1.468e+12 -1.793e+11 1.456e+12 -1.843e+11 1.437e+12 -1.880e+11 1.410e+12 -1.904e+11 1.377e+12 -1.914e+11 1.337e+12 -1.910e+11 1.291e+12 -1.895e+11 1.240e+12 -1.866e+11 1.184e+12 -1.827e+11 1.124e+12 -1.777e+11 1.061e+12 -1.717e+11 9.954e+11 -1.648e+11 9.280e+11 -1.572e+11 8.597e+11 -1.490e+11 7.912e+11 -1.402e+11 7.232e+11 -1.311e+11 6.564e+11 -1.217e+11 5.915e+11 -1.121e+11 5.288e+11 -1.024e+11 4.689e+11 -9.288e+10 4.124e+11 -8.349e+10 3.594e+11 -7.437e+10 3.103e+11 -6.562e+10 2.652e+11 -5.732e+10 2.243e+11 -4.953e+10 1.875e+11 -4.231e+10 1.549e+11 -3.570e+10 1.262e+11 -2.972e+10 1.014e+11 -2.439e+10 8.024e+10 -1.969e+10 6.239e+10 -1.563e+10 4.760e+10 -1.217e+10 3.555e+10 -9.268e+09 2.592e+10 -6.889e+09 1.839e+10 -4.980e+09 1.263e+10 -3.484e+09 8.360e+09 -2.345e+09 5.287e+09 -1.507e+09 3.162e+09 -9.131e+08 1.759e+09 -5.130e+08 8.880e+08 -2.600e+08 3.899e+08 -1.133e+08 1.367e+08 -3.906e+07 3.104e+07 -1.051e+07 -1.072e+06 -2.307e+06 -1.273e+07 3.748e+06 -2.327e+07 9.639e+06 -2.719e+07 1.233e+07 -2.261e+07 1.129e+07 -1.329e+07 8.253e+06 -4.473e+06 6.052e+06 1.889e+06 5.476e+06 8.798e+06 4.314e+06 1.803e+07 1.267e+06 2.537e+07 -2.459e+06 2.491e+07 -4.419e+06 1.505e+07 -4.640e+06 2.180e+06 -9.460e+06 -2.755e+07 -2.040e+07 -1.440e+08 -2.452e+07 -4.642e+08 -2.380e+05 -1.160e+09 8.899e+07 -2.485e+09 3.004e+08 -4.792e+09 7.176e+08 -8.560e+09 1.456e+09 -1.440e+10 2.671e+09 -2.312e+10 4.565e+09 -3.568e+10 7.389e+09 -5.326e+10 1.146e+10 -7.730e+10 1.715e+10 -1.095e+11 2.492e+10 -1.516e+11 3.529e+10 -2.060e+11 4.887e+10 -2.751e+11 6.633e+10 -3.616e+11 8.848e+10 -4.684e+11 1.162e+11 -5.987e+11 1.503e+11 -7.559e+11 1.919e+11 -9.437e+11 2.420e+11 -1.166e+12 3.017e+11 -1.425e+12 3.723e+11 -1.726e+12 4.549e+11 -2.073e+12 5.505e+11 -2.468e+12 6.606e+11 -2.914e+12 7.860e+11 -3.416e+12 9.279e+11 -3.974e+12 1.087e+12 -4.591e+12 1.264e+12 -5.268e+12 1.460e+12 -6.005e+12 1.675e+12 -6.803e+12 1.910e+12 -7.659e+12 2.163e+12 -8.572e+12 2.435e+12 -9.538e+12 2.724e+12 -1.055e+13 3.028e+12 -1.161e+13 3.347e+12 -1.270e+13 3.678e+12 -1.382e+13 4.019e+12 -1.495e+13 4.368e+12 -1.610e+13 4.720e+12 -1.724e+13 5.072e+12 -1.836e+13 5.420e+12 -1.945e+13 5.759e+12 -2.049e+13 6.084e+12 -2.148e+13 6.391e+12 -2.238e+13 6.674e+12 -2.319e+13 6.928e+12 -2.390e+13 7.146e+12 -2.447e+13 7.325e+12 -2.491e+13 7.457e+12 -2.519e+13 7.539e+12 -2.530e+13 7.566e+12 -2.523e+13 7.534e+12 -2.497e+13 7.440e+12 -2.452e+13 7.282e+12 -2.386e+13 7.059e+12 -2.301e+13 6.770e+12 -2.195e+13 6.418e+12 -2.071e+13 6.005e+12 -1.929e+13 5.536e+12 -1.771e+13 5.017e+12 -1.599e+13 4.458e+12 -1.416e+13 3.869e+12 -1.225e+13 3.262e+12 -1.031e+13 2.654e+12 -8.375e+12 2.060e+12 -6.502e+12 1.500e+12 -4.747e+12 9.954e+11 -3.173e+12 5.701e+11 -1.845e+12 2.493e+11 -8.359e+11 6.038e+10 -2.218e+11 -2.939e+10 5.739e+10 -1.938e+11 4.948e+11 -5.771e+11 1.546e+12 -1.214e+12 3.320e+12 -2.138e+12 5.900e+12 -3.380e+12 9.366e+12 -4.974e+12 1.380e+13 -6.951e+12 1.928e+13 -9.340e+12 2.588e+13 -1.217e+13 3.366e+13 -1.547e+13 4.269e+13 -1.927e+13 5.301e+13 -2.358e+13 6.469e+13 -2.843e+13 7.774e+13 -3.382e+13 9.218e+13 -3.978e+13 1.081e+14 -4.630e+13 1.253e+14 -5.340e+13 1.440e+14 -6.106e+13 1.641e+14 -6.929e+13 1.856e+14 -7.806e+13 2.083e+14 -8.736e+13 2.323e+14 -9.717e+13 2.575e+14 -1.075e+14 2.837e+14 -1.182e+14 3.109e+14 -1.293e+14 3.390e+14 -1.408e+14 3.678e+14 -1.526e+14 3.972e+14 -1.646e+14 4.271e+14 -1.768e+14 4.572e+14 -1.892e+14 4.874e+14 -2.016e+14 5.175e+14 -2.139e+14 5.473e+14 -2.261e+14 5.766e+14 -2.382e+14 6.053e+14 -2.499e+14 6.331e+14 -2.613e+14 6.597e+14 -2.723e+14 6.851e+14 -2.826e+14 7.089e+14 -2.924e+14 7.310e+14 -3.014e+14 7.512e+14 -3.096e+14 7.692e+14 -3.170e+14 7.851e+14 -3.234e+14 7.986e+14 -3.289e+14 8.097e+14 -3.332e+14 8.180e+14 -3.364e+14 8.235e+14 -3.384e+14 8.260e+14 -3.392e+14 8.255e+14 -3.386e+14 8.220e+14 -3.368e+14 8.154e+14 -3.336e+14 8.057e+14 -3.292e+14 7.930e+14 -3.234e+14 7.773e+14 -3.164e+14 7.587e+14 -3.082e+14 7.373e+14 -2.988e+14 7.134e+14 -2.882e+14 6.869e+14 -2.767e+14 6.582e+14 -2.642e+14 6.275e+14 -2.509e+14 5.949e+14 -2.368e+14 5.609e+14 -2.222e+14 5.255e+14 -2.070e+14 4.891e+14 -1.915e+14 4.521e+14 -1.757e+14 4.147e+14 -1.598e+14 3.772e+14 -1.440e+14 3.399e+14 -1.284e+14 3.032e+14 -1.131e+14 2.674e+14 -9.830e+13 2.328e+14 -8.409e+13 1.996e+14 -7.061e+13 1.682e+14 -5.800e+13 1.388e+14 -4.637e+13 1.117e+14 -3.583e+13 8.708e+13 -2.649e+13 6.522e+13 -1.844e+13 4.628e+13 -1.175e+13 3.040e+13 -6.517e+12 1.776e+13 -2.778e+12 8.447e+12 -5.796e+11 2.543e+12 8.467e+10 1.182e+11 1.004e+12 -1.185e+12 3.643e+12 -5.768e+12 7.908e+12 -1.379e+13 1.378e+13 -2.519e+13 2.122e+13 -3.989e+13 3.019e+13 -5.772e+13 4.061e+13 -7.855e+13 5.243e+13 -1.022e+14 6.554e+13 -1.285e+14 7.986e+13 -1.571e+14 9.529e+13 -1.879e+14 1.117e+14 -2.205e+14 1.289e+14 -2.547e+14 1.469e+14 -2.902e+14 1.654e+14 -3.266e+14 1.844e+14 -3.637e+14 2.036e+14 -4.012e+14 2.229e+14 -4.386e+14 2.422e+14 -4.758e+14 2.614e+14 -5.124e+14 2.801e+14 -5.481e+14 2.984e+14 -5.825e+14 3.160e+14 -6.156e+14 3.328e+14 -6.468e+14 3.487e+14 -6.762e+14 3.636e+14 -7.033e+14 3.773e+14 -7.281e+14 3.898e+14 -7.503e+14 4.009e+14 -7.698e+14 4.106e+14 -7.864e+14 4.188e+14 -8.002e+14 4.254e+14 -8.109e+14 4.305e+14 -8.186e+14 4.340e+14 -8.233e+14 4.358e+14 -8.249e+14 4.361e+14 -8.236e+14 4.347e+14 -8.192e+14 4.318e+14 -8.120e+14 4.274e+14 -8.021e+14 4.215e+14 -7.895e+14 4.143e+14 -7.745e+14 4.058e+14 -7.571e+14 3.960e+14 -7.376e+14 3.851e+14 -7.160e+14 3.732e+14 -6.927e+14 3.603e+14 -6.677e+14 3.466e+14 -6.412e+14 3.322e+14 -6.136e+14 3.173e+14 -5.849e+14 3.018e+14 -5.555e+14 2.859e+14 -5.255e+14 2.699e+14 -4.951e+14 2.536e+14 -4.645e+14 2.374e+14 -4.340e+14 2.212e+14 -4.037e+14 2.051e+14 -3.737e+14 1.894e+14 -3.444e+14 1.740e+14 -3.157e+14 1.589e+14 -2.879e+14 1.444e+14 -2.612e+14 1.305e+14 -2.355e+14 1.172e+14 -2.110e+14 1.045e+14 -1.878e+14 9.254e+13 -1.659e+14 8.131e+13 -1.454e+14 7.084e+13 -1.264e+14 6.115e+13 -1.089e+14 5.224e+13 -9.278e+13 4.411e+13 -7.817e+13 3.676e+13 -6.500e+13 3.018e+13 -5.324e+13 2.435e+13 -4.287e+13 1.923e+13 -3.381e+13 1.482e+13 -2.601e+13 1.107e+13 -1.941e+13 7.945e+12 -1.393e+13 5.409e+12 -9.496e+12 3.421e+12 -6.026e+12 1.936e+12 -3.434e+12 9.085e+11 -1.638e+12 2.947e+11 -5.526e+11 3.671e+10 -8.311e+10 -1.239e+11 1.776e+11 -4.775e+11 7.266e+11 -1.067e+12 1.664e+12 -1.850e+12 2.917e+12 -2.786e+12 4.415e+12 -3.839e+12 6.098e+12 -4.973e+12 7.905e+12 -6.155e+12 9.781e+12 -7.357e+12 1.168e+13 -8.550e+12 1.356e+13 -9.710e+12 1.537e+13 -1.082e+13 1.710e+13 -1.185e+13 1.870e+13 -1.280e+13 2.016e+13 -1.365e+13 2.146e+13 -1.439e+13 2.258e+13 -1.501e+13 2.352e+13 -1.552e+13 2.426e+13 -1.590e+13 2.481e+13 -1.616e+13 2.517e+13 -1.630e+13 2.534e+13 -1.632e+13 2.533e+13 -1.623e+13 2.515e+13 -1.603e+13 2.480e+13 -1.574e+13 2.430e+13 -1.536e+13 2.366e+13 -1.490e+13 2.291e+13 -1.437e+13 2.205e+13 -1.378e+13 2.110e+13 -1.314e+13 2.007e+13 -1.247e+13 1.899e+13 -1.176e+13 1.786e+13 -1.103e+13 1.671e+13 -1.029e+13 1.555e+13 -9.554e+12 1.438e+13 -8.819e+12 1.323e+13 -8.096e+12 1.210e+13 -7.391e+12 1.100e+13 -6.708e+12 9.946e+12 -6.054e+12 8.939e+12 -5.432e+12 7.986e+12 -4.845e+12 7.090e+12 -4.296e+12 6.255e+12 -3.786e+12 5.483e+12 -3.316e+12 4.775e+12 -2.885e+12 4.129e+12 -2.493e+12 3.546e+12 -2.140e+12 3.023e+12 -1.824e+12 2.558e+12 -1.542e+12 2.147e+12 -1.294e+12 1.787e+12 -1.077e+12 1.475e+12 -8.889e+11 1.206e+12 -7.267e+11 9.768e+11 -5.884e+11 7.830e+11 -4.716e+11 6.208e+11 -3.738e+11 4.864e+11 -2.929e+11 3.763e+11 -2.266e+11 2.872e+11 -1.728e+11 2.159e+11 -1.299e+11 1.596e+11 -9.607e+10 1.159e+11 -6.976e+10 8.244e+10 -4.966e+10 5.731e+10 -3.458e+10 3.882e+10 -2.348e+10 2.551e+10 -1.549e+10 1.618e+10 -9.898e+09 9.844e+09 -6.088e+09 5.687e+09 -3.583e+09 3.082e+09 -2.003e+09 1.536e+09 -1.052e+09 6.818e+08 -5.152e+08 2.529e+08 -2.345e+08 6.500e+07 -1.015e+08 -2.856e+06 -4.470e+07 -2.180e+07 -2.077e+07 -2.459e+07 -9.297e+06 -2.059e+07 -3.498e+06 -1.262e+07 -9.775e+05 -4.654e+06 -2.058e+05 -4.798e+05 -8.773e+04 3.476e+06 5.111e+05 1.114e+07 2.824e+06 1.997e+07 7.854e+06 2.529e+07 1.644e+07 2.453e+07 3.277e+07 1.778e+07 7.268e+07 -1.475e+06 1.673e+08 -6.099e+07 3.622e+08 -2.150e+08 7.187e+08 -5.436e+08 1.318e+09 -1.155e+09 2.263e+09 -2.189e+09 3.679e+09 -3.820e+09 5.714e+09 -6.253e+09 8.539e+09 -9.727e+09 1.234e+10 -1.451e+10 1.733e+10 -2.088e+10 2.372e+10 -2.916e+10 3.173e+10 -3.967e+10 4.159e+10 -5.270e+10 5.354e+10 -6.858e+10 6.777e+10 -8.760e+10 8.447e+10 -1.100e+11 1.038e+11 -1.360e+11 1.260e+11 -1.659e+11 1.510e+11 -1.996e+11 1.790e+11 -2.373e+11 2.100e+11 -2.789e+11 2.438e+11 -3.244e+11 2.805e+11 -3.736e+11 3.200e+11 -4.262e+11 3.619e+11 -4.820e+11 4.060e+11 -5.405e+11 4.522e+11 -6.014e+11 4.998e+11 -6.640e+11 5.487e+11 -7.279e+11 5.983e+11 -7.924e+11 6.482e+11 -8.567e+11 6.979e+11 -9.204e+11 7.469e+11 -9.827e+11 7.945e+11 -1.043e+12 8.404e+11 -1.100e+12 8.838e+11 -1.154e+12 9.244e+11 -1.204e+12 9.616e+11 -1.249e+12 9.949e+11 -1.289e+12 1.024e+12 -1.322e+12 1.048e+12 -1.350e+12 1.067e+12 -1.371e+12 1.081e+12 -1.385e+12 1.090e+12 -1.391e+12 1.092e+12 -1.390e+12 1.089e+12 -1.382e+12 1.080e+12 -1.366e+12 1.065e+12 -1.342e+12 1.044e+12 -1.312e+12 1.018e+12 -1.274e+12 9.866e+11 -1.230e+12 9.503e+11 -1.180e+12 9.095e+11 -1.124e+12 8.646e+11 -1.064e+12 8.162e+11 -9.989e+11 7.648e+11 -9.308e+11 7.110e+11 -8.601e+11 6.554e+11 -7.876e+11 5.987e+11 -7.141e+11 5.414e+11 -6.406e+11 4.843e+11 -5.679e+11 4.281e+11 -4.969e+11 3.732e+11 -4.283e+11 3.204e+11 -3.630e+11 2.703e+11 -3.017e+11 2.233e+11 -2.449e+11 1.800e+11 -1.933e+11 1.407e+11 -1.473e+11 1.059e+11 -1.072e+11 7.576e+10 -7.344e+10 5.061e+10 -4.609e+10 3.051e+10 -2.519e+10 1.562e+10 -1.074e+10 5.953e+09 -2.527e+09 1.584e+09 6.844e+08 -7.920e+08 5.046e+09 -6.143e+09 1.433e+10 -1.577e+10 2.871e+10 -2.953e+10 4.766e+10 -4.706e+10 7.063e+10 -6.799e+10 9.709e+10 -9.181e+10 1.264e+11 -1.181e+11 1.579e+11 -1.462e+11 1.912e+11 -1.758e+11 2.255e+11 -2.062e+11 2.602e+11 -2.370e+11 2.949e+11 -2.677e+11 3.290e+11 -2.977e+11 3.619e+11 -3.266e+11 3.933e+11 -3.540e+11 4.228e+11 -3.795e+11 4.498e+11 -4.027e+11 4.742e+11 -4.234e+11 4.957e+11 -4.413e+11 5.141e+11 -4.563e+11 5.292e+11 -4.682e+11 5.409e+11 -4.770e+11 5.491e+11 -4.825e+11 5.539e+11 -4.849e+11 5.553e+11 -4.842e+11 5.533e+11 -4.805e+11 5.481e+11 -4.740e+11 5.399e+11 -4.648e+11 5.287e+11 -4.532e+11 5.149e+11 -4.394e+11 4.987e+11 -4.236e+11 4.804e+11 -4.061e+11 4.602e+11 -3.873e+11 4.384e+11 -3.673e+11 4.154e+11 -3.463e+11 3.914e+11 -3.248e+11 3.668e+11 -3.029e+11 3.417e+11 -2.810e+11 3.166e+11 -2.591e+11 2.915e+11 -2.375e+11 2.669e+11 -2.165e+11 2.428e+11 -1.961e+11 2.196e+11 -1.766e+11 1.973e+11 -1.580e+11 1.761e+11 -1.404e+11 1.561e+11 -1.238e+11 1.375e+11 -1.085e+11 1.202e+11 -9.427e+10 1.043e+11 -8.126e+10 8.984e+10 -6.944e+10 7.675e+10 -5.879e+10 6.502e+10 -4.927e+10 5.461e+10 -4.086e+10 4.545e+10 -3.348e+10 3.746e+10 0.005 -48.664 -47.647 -46.631 -45.615 -44.599 -43.582 -42.566 -41.632 -40.791 -40.035 -39.359 -38.756 -38.222 -37.754 -37.350 -37.005 -36.720 -36.491 -36.319 -36.202 -36.139 -36.132 -36.180 -36.284 -36.445 -36.664 -36.943 -37.284 -37.690 -38.165 -38.713 -39.339 -40.049 -40.852 -41.756 -42.774 -43.921 -45.217 -46.690 -48.376 -50.325 -52.611 -55.335 -58.587 -62.102 -64.024 -62.849 -60.627 -58.659 -57.033 -55.586 -54.179 -52.744 -51.274 -49.797 -48.349 -46.960 -45.652 -44.434 -43.312 -42.284 -41.349 -40.501 -39.735 -39.051 -38.444 -37.911 -37.449 -37.055 -36.726 -36.462 -36.260 -36.118 -36.037 -36.015 -36.050 -36.143 -36.293 -36.499 -36.760 -37.075 -37.442 -37.860 -38.326 -38.835 -39.385 -39.970 -40.586 -41.227 -41.890 -42.573 -43.275 -43.997 -44.727 -45.447 -46.092 -46.538 -46.602 -46.133 -45.130 -43.752 -42.197 -40.615 -39.084 -37.640 -36.296 -35.052 -33.904 -32.849 -31.878 -30.989 -30.175 -29.433 -28.755 -28.139 -27.585 -27.091 -26.657 -26.280 -25.960 -25.697 -25.490 -25.339 -25.246 -25.212 -25.237 -25.325 -25.476 -25.694 -25.973 -26.325 -26.757 -27.276 -27.887 -28.602 -29.431 -30.388 -31.491 -32.759 -34.218 -35.896 -37.824 -40.040 -42.569 -45.401 -48.503 -51.978 -56.068 -56.464 -51.281 -45.360 -40.755 -37.035 -33.904 -31.194 -28.804 -26.668 -24.739 -22.974 -21.345 -19.841 -18.448 -17.153 -15.947 -14.822 -13.764 -12.758 -11.813 -10.926 -10.092 -9.309 -8.570 -7.861 -7.193 -6.567 -5.981 -5.432 -4.910 -4.409 -3.944 -3.512 -3.114 -2.738 -2.382 -2.055 -1.759 -1.494 -1.244 -1.013 -0.810 -0.636 -0.489 -0.348 -0.229 -0.138 -0.077 -0.032 -0.002 0.000 -0.027 -0.083 -0.141 -0.228 -0.344 -0.489 -0.647 -0.820 -1.024 -1.259 -1.519 -1.793 -2.097 -2.433 -2.801 -3.190 -3.596 -4.036 -4.514 -5.026 -5.563 -6.128 -6.734 -7.384 -8.079 -8.809 -9.580 -10.402 -11.282 -12.222 -13.227 -14.287 -15.422 -16.644 -17.963 -19.391 -20.946 -22.631 -24.484 -26.547 -28.872 -31.521 -34.572 -38.067 -41.739 -44.481 -45.114 -44.674 -44.593 -45.349 -46.996 -48.621 -47.792 -44.209 -40.522 -37.531 -35.125 -33.154 -31.510 -30.120 -28.936 -27.921 -27.044 -26.289 -25.644 -25.099 -24.643 -24.269 -23.970 -23.743 -23.582 -23.486 -23.450 -23.472 -23.543 -23.669 -23.849 -24.086 -24.376 -24.719 -25.117 -25.567 -26.072 -26.632 -27.246 -27.915 -28.639 -29.417 -30.249 -31.129 -32.055 -33.026 -34.037 -35.079 -36.145 -37.226 -38.312 -39.397 -40.475 -41.534 -42.551 -43.467 -44.165 -44.478 -44.264 -43.523 -42.405 -41.103 -39.765 -38.473 -37.260 -36.143 -35.126 -34.204 -33.372 -32.627 -31.960 -31.366 -30.842 -30.382 -29.984 -29.645 -29.362 -29.132 -28.955 -28.829 -28.752 -28.723 -28.742 -28.808 -28.921 -29.080 -29.287 -29.541 -29.844 -30.195 -30.597 -31.051 -31.558 -32.122 -32.742 -33.424 -34.171 -34.990 -35.886 -36.867 -37.941 -39.121 -40.420 -41.859 -43.463 -45.267 -47.329 -49.729 -52.591 -56.112 -60.395 -64.105 -63.606 -60.818 -58.651 -57.163 -56.088 -55.219 -54.400 -53.530 -52.562 -51.502 -50.386 -49.262 -48.168 -47.131 -46.168 -45.285 -44.486 -43.769 -43.131 -42.570 -42.083 -41.665 -41.314 -41.028 -40.804 -40.641 -40.536 -40.489 -40.500 -40.568 -40.693 -40.878 -41.123 -41.431 -41.804 -42.248 -42.769 -43.373 -44.052 -44.732 -45.411 -46.091 -46.770 -47.449 0 1 1.0 1 EN VH 17.14 22.7 0.05 3.339e+10 -4.583e+10 4.005e+10 -5.402e+10 4.762e+10 -6.315e+10 5.614e+10 -7.326e+10 6.566e+10 -8.437e+10 7.621e+10 -9.646e+10 8.780e+10 -1.095e+11 1.005e+11 -1.235e+11 1.141e+11 -1.384e+11 1.288e+11 -1.542e+11 1.445e+11 -1.707e+11 1.611e+11 -1.878e+11 1.786e+11 -2.055e+11 1.967e+11 -2.236e+11 2.155e+11 -2.420e+11 2.348e+11 -2.604e+11 2.545e+11 -2.788e+11 2.742e+11 -2.969e+11 2.940e+11 -3.146e+11 3.135e+11 -3.316e+11 3.326e+11 -3.477e+11 3.511e+11 -3.627e+11 3.687e+11 -3.766e+11 3.852e+11 -3.889e+11 4.005e+11 -3.996e+11 4.142e+11 -4.084e+11 4.262e+11 -4.152e+11 4.363e+11 -4.199e+11 4.443e+11 -4.223e+11 4.500e+11 -4.222e+11 4.533e+11 -4.197e+11 4.541e+11 -4.146e+11 4.522e+11 -4.070e+11 4.477e+11 -3.969e+11 4.404e+11 -3.842e+11 4.305e+11 -3.691e+11 4.179e+11 -3.517e+11 4.027e+11 -3.322e+11 3.851e+11 -3.108e+11 3.652e+11 -2.877e+11 3.433e+11 -2.632e+11 3.195e+11 -2.376e+11 2.943e+11 -2.114e+11 2.679e+11 -1.848e+11 2.406e+11 -1.583e+11 2.130e+11 -1.324e+11 1.854e+11 -1.075e+11 1.583e+11 -8.399e+10 1.321e+11 -6.239e+10 1.075e+11 -4.309e+10 8.474e+10 -2.645e+10 6.453e+10 -1.277e+10 4.734e+10 -2.100e+09 3.365e+10 5.876e+09 2.368e+10 1.218e+10 1.692e+10 1.882e+10 1.165e+10 2.827e+10 5.545e+09 4.234e+10 -3.296e+09 6.176e+10 -1.599e+10 8.672e+10 -3.306e+10 1.171e+11 -5.477e+10 1.527e+11 -8.121e+10 1.934e+11 -1.123e+11 2.389e+11 -1.478e+11 2.887e+11 -1.875e+11 3.425e+11 -2.310e+11 3.997e+11 -2.780e+11 4.598e+11 -3.280e+11 5.224e+11 -3.803e+11 5.866e+11 -4.344e+11 6.518e+11 -4.898e+11 7.174e+11 -5.457e+11 7.826e+11 -6.015e+11 8.467e+11 -6.565e+11 9.091e+11 -7.101e+11 9.690e+11 -7.616e+11 1.026e+12 -8.104e+11 1.079e+12 -8.559e+11 1.127e+12 -8.976e+11 1.171e+12 -9.351e+11 1.209e+12 -9.677e+11 1.242e+12 -9.953e+11 1.268e+12 -1.018e+12 1.288e+12 -1.034e+12 1.301e+12 -1.045e+12 1.308e+12 -1.050e+12 1.308e+12 -1.050e+12 1.301e+12 -1.043e+12 1.287e+12 -1.032e+12 1.267e+12 -1.014e+12 1.242e+12 -9.923e+11 1.210e+12 -9.654e+11 1.173e+12 -9.343e+11 1.131e+12 -8.994e+11 1.085e+12 -8.611e+11 1.035e+12 -8.199e+11 9.826e+11 -7.763e+11 9.273e+11 -7.310e+11 8.701e+11 -6.843e+11 8.116e+11 -6.369e+11 7.527e+11 -5.893e+11 6.938e+11 -5.420e+11 6.355e+11 -4.953e+11 5.783e+11 -4.496e+11 5.226e+11 -4.054e+11 4.690e+11 -3.629e+11 4.179e+11 -3.224e+11 3.694e+11 -2.843e+11 3.240e+11 -2.486e+11 2.818e+11 -2.156e+11 2.430e+11 -1.853e+11 2.075e+11 -1.577e+11 1.755e+11 -1.329e+11 1.469e+11 -1.108e+11 1.216e+11 -9.128e+10 9.947e+10 -7.429e+10 8.032e+10 -5.966e+10 6.397e+10 -4.723e+10 5.020e+10 -3.680e+10 3.876e+10 -2.819e+10 2.940e+10 -2.120e+10 2.187e+10 -1.561e+10 1.592e+10 -1.123e+10 1.132e+10 -7.874e+09 7.832e+09 -5.362e+09 5.258e+09 -3.532e+09 3.411e+09 -2.241e+09 2.128e+09 -1.361e+09 1.268e+09 -7.848e+08 7.162e+08 -4.264e+08 3.801e+08 -2.156e+08 1.870e+08 -1.001e+08 8.396e+07 -4.200e+07 3.368e+07 -1.568e+07 1.168e+07 -5.209e+06 3.297e+06 -1.658e+06 6.101e+05 -7.433e+05 -2.100e+05 -7.796e+05 -1.001e+06 -1.200e+06 -3.131e+06 -1.553e+06 -9.080e+06 -3.249e+05 -2.476e+07 7.000e+06 -6.297e+07 3.116e+07 -1.486e+08 9.380e+07 -3.256e+08 2.336e+08 -6.657e+08 5.144e+08 -1.280e+09 1.034e+09 -2.331e+09 1.935e+09 -4.046e+09 3.419e+09 -6.737e+09 5.753e+09 -1.081e+10 9.289e+09 -1.679e+10 1.448e+10 -2.534e+10 2.188e+10 -3.726e+10 3.217e+10 -5.351e+10 4.618e+10 -7.528e+10 6.486e+10 -1.039e+11 8.931e+10 -1.409e+11 1.208e+11 -1.880e+11 1.608e+11 -2.473e+11 2.108e+11 -3.207e+11 2.727e+11 -4.108e+11 3.482e+11 -5.200e+11 4.392e+11 -6.509e+11 5.480e+11 -8.064e+11 6.767e+11 -9.894e+11 8.273e+11 -1.203e+12 1.002e+12 -1.449e+12 1.204e+12 -1.731e+12 1.433e+12 -2.052e+12 1.694e+12 -2.415e+12 1.986e+12 -2.821e+12 2.312e+12 -3.272e+12 2.673e+12 -3.770e+12 3.070e+12 -4.316e+12 3.502e+12 -4.910e+12 3.971e+12 -5.552e+12 4.475e+12 -6.242e+12 5.014e+12 -6.977e+12 5.585e+12 -7.755e+12 6.185e+12 -8.573e+12 6.811e+12 -9.426e+12 7.460e+12 -1.031e+13 8.126e+12 -1.121e+13 8.804e+12 -1.214e+13 9.488e+12 -1.307e+13 1.017e+13 -1.399e+13 1.084e+13 -1.491e+13 1.150e+13 -1.580e+13 1.213e+13 -1.666e+13 1.273e+13 -1.747e+13 1.328e+13 -1.822e+13 1.377e+13 -1.889e+13 1.420e+13 -1.948e+13 1.456e+13 -1.997e+13 1.483e+13 -2.034e+13 1.501e+13 -2.059e+13 1.508e+13 -2.069e+13 1.505e+13 -2.066e+13 1.490e+13 -2.046e+13 1.463e+13 -2.011e+13 1.424e+13 -1.958e+13 1.373e+13 -1.890e+13 1.310e+13 -1.805e+13 1.236e+13 -1.704e+13 1.151e+13 -1.588e+13 1.056e+13 -1.459e+13 9.523e+12 -1.319e+13 8.424e+12 -1.169e+13 7.280e+12 -1.012e+13 6.116e+12 -8.526e+12 4.958e+12 -6.935e+12 3.838e+12 -5.391e+12 2.791e+12 -3.942e+12 1.854e+12 -2.640e+12 1.067e+12 -1.539e+12 4.737e+11 -7.006e+11 1.200e+11 -1.877e+11 -4.360e+10 4.476e+10 -3.202e+11 4.033e+11 -9.720e+11 1.270e+12 -2.059e+12 2.738e+12 -3.631e+12 4.878e+12 -5.737e+12 7.758e+12 -8.425e+12 1.145e+13 -1.174e+13 1.602e+13 -1.573e+13 2.153e+13 -2.043e+13 2.805e+13 -2.588e+13 3.562e+13 -3.210e+13 4.428e+13 -3.914e+13 5.410e+13 -4.700e+13 6.509e+13 -5.569e+13 7.728e+13 -6.525e+13 9.070e+13 -7.565e+13 1.053e+14 -8.690e+13 1.212e+14 -9.898e+13 1.383e+14 -1.119e+14 1.565e+14 -1.255e+14 1.759e+14 -1.399e+14 1.964e+14 -1.550e+14 2.179e+14 -1.708e+14 2.403e+14 -1.871e+14 2.637e+14 -2.039e+14 2.878e+14 -2.212e+14 3.125e+14 -2.387e+14 3.378e+14 -2.565e+14 3.635e+14 -2.745e+14 3.894e+14 -2.925e+14 4.154e+14 -3.104e+14 4.414e+14 -3.281e+14 4.672e+14 -3.454e+14 4.925e+14 -3.624e+14 5.173e+14 -3.787e+14 5.412e+14 -3.944e+14 5.643e+14 -4.092e+14 5.862e+14 -4.231e+14 6.068e+14 -4.359e+14 6.259e+14 -4.475e+14 6.434e+14 -4.578e+14 6.590e+14 -4.668e+14 6.727e+14 -4.743e+14 6.844e+14 -4.803e+14 6.940e+14 -4.847e+14 7.012e+14 -4.874e+14 7.059e+14 -4.883e+14 7.081e+14 -4.874e+14 7.078e+14 -4.847e+14 7.048e+14 -4.802e+14 6.992e+14 -4.739e+14 6.910e+14 -4.658e+14 6.802e+14 -4.560e+14 6.668e+14 -4.445e+14 6.510e+14 -4.315e+14 6.328e+14 -4.169e+14 6.123e+14 -4.010e+14 5.898e+14 -3.837e+14 5.653e+14 -3.653e+14 5.390e+14 -3.460e+14 5.112e+14 -3.257e+14 4.821e+14 -3.048e+14 4.518e+14 -2.834e+14 4.207e+14 -2.616e+14 3.890e+14 -2.397e+14 3.569e+14 -2.178e+14 3.248e+14 -1.961e+14 2.928e+14 -1.747e+14 2.613e+14 -1.539e+14 2.305e+14 -1.339e+14 2.007e+14 -1.147e+14 1.722e+14 -9.660e+13 1.451e+14 -7.970e+13 1.197e+14 -6.413e+13 9.636e+13 -5.001e+13 7.511e+13 -3.749e+13 5.623e+13 -2.665e+13 3.987e+13 -1.756e+13 2.614e+13 -1.032e+13 1.523e+13 -4.966e+12 7.192e+12 -1.537e+12 2.112e+12 -6.315e+10 4.950e+10 5.604e+11 -1.041e+12 3.035e+12 -5.067e+12 7.448e+12 -1.208e+13 1.376e+13 -2.204e+13 2.191e+13 -3.486e+13 3.182e+13 -5.041e+13 4.339e+13 -6.857e+13 5.653e+13 -8.920e+13 7.109e+13 -1.121e+14 8.696e+13 -1.370e+14 1.040e+14 -1.638e+14 1.221e+14 -1.922e+14 1.409e+14 -2.220e+14 1.605e+14 -2.529e+14 1.806e+14 -2.847e+14 2.011e+14 -3.170e+14 2.217e+14 -3.496e+14 2.422e+14 -3.823e+14 2.626e+14 -4.147e+14 2.827e+14 -4.466e+14 3.022e+14 -4.777e+14 3.210e+14 -5.078e+14 3.390e+14 -5.367e+14 3.560e+14 -5.640e+14 3.718e+14 -5.897e+14 3.865e+14 -6.135e+14 3.998e+14 -6.353e+14 4.117e+14 -6.549e+14 4.221e+14 -6.721e+14 4.308e+14 -6.869e+14 4.380e+14 -6.992e+14 4.435e+14 -7.089e+14 4.473e+14 -7.160e+14 4.494e+14 -7.204e+14 4.498e+14 -7.222e+14 4.486e+14 -7.214e+14 4.457e+14 -7.180e+14 4.413e+14 -7.121e+14 4.353e+14 -7.037e+14 4.280e+14 -6.931e+14 4.193e+14 -6.803e+14 4.093e+14 -6.655e+14 3.982e+14 -6.488e+14 3.859e+14 -6.302e+14 3.728e+14 -6.100e+14 3.587e+14 -5.883e+14 3.440e+14 -5.653e+14 3.286e+14 -5.413e+14 3.127e+14 -5.162e+14 2.964e+14 -4.905e+14 2.799e+14 -4.642e+14 2.633e+14 -4.375e+14 2.466e+14 -4.107e+14 2.299e+14 -3.838e+14 2.135e+14 -3.571e+14 1.973e+14 -3.307e+14 1.815e+14 -3.048e+14 1.661e+14 -2.795e+14 1.512e+14 -2.550e+14 1.369e+14 -2.313e+14 1.232e+14 -2.086e+14 1.102e+14 -1.869e+14 9.791e+13 -1.663e+14 8.637e+13 -1.470e+14 7.560e+13 -1.289e+14 6.561e+13 -1.120e+14 5.641e+13 -9.650e+13 4.800e+13 -8.225e+13 4.037e+13 -6.930e+13 3.352e+13 -5.763e+13 2.740e+13 -4.721e+13 2.202e+13 -3.802e+13 1.733e+13 -2.999e+13 1.330e+13 -2.307e+13 9.893e+12 -1.722e+13 7.073e+12 -1.236e+13 4.796e+12 -8.429e+12 3.022e+12 -5.351e+12 1.703e+12 -3.050e+12 7.959e+11 -1.455e+12 2.571e+11 -4.909e+11 3.181e+10 -7.377e+10 -1.074e+11 1.582e+11 -4.123e+11 6.472e+11 -9.172e+11 1.483e+12 -1.584e+12 2.600e+12 -2.377e+12 3.937e+12 -3.262e+12 5.440e+12 -4.209e+12 7.055e+12 -5.189e+12 8.732e+12 -6.177e+12 1.043e+13 -7.150e+12 1.211e+13 -8.088e+12 1.374e+13 -8.973e+12 1.529e+13 -9.791e+12 1.673e+13 -1.053e+13 1.804e+13 -1.118e+13 1.921e+13 -1.174e+13 2.022e+13 -1.219e+13 2.106e+13 -1.255e+13 2.173e+13 -1.280e+13 2.223e+13 -1.294e+13 2.256e+13 -1.300e+13 2.271e+13 -1.295e+13 2.270e+13 -1.282e+13 2.254e+13 -1.260e+13 2.223e+13 -1.231e+13 2.179e+13 -1.196e+13 2.122e+13 -1.154e+13 2.055e+13 -1.107e+13 1.978e+13 -1.056e+13 1.893e+13 -1.002e+13 1.802e+13 -9.454e+12 1.705e+13 -8.870e+12 1.605e+13 -8.276e+12 1.502e+13 -7.680e+12 1.398e+13 -7.089e+12 1.295e+13 -6.507e+12 1.192e+13 -5.940e+12 1.091e+13 -5.391e+12 9.938e+12 -4.865e+12 8.998e+12 -4.364e+12 8.101e+12 -3.892e+12 7.251e+12 -3.451e+12 6.452e+12 -3.041e+12 5.707e+12 -2.663e+12 5.018e+12 -2.318e+12 4.384e+12 -2.004e+12 3.806e+12 -1.721e+12 3.282e+12 -1.467e+12 2.812e+12 -1.242e+12 2.392e+12 -1.044e+12 2.020e+12 -8.698e+11 1.693e+12 -7.189e+11 1.409e+12 -5.890e+11 1.162e+12 -4.780e+11 9.509e+11 -3.842e+11 7.712e+11 -3.056e+11 6.197e+11 -2.403e+11 4.931e+11 -1.867e+11 3.883e+11 -1.432e+11 3.025e+11 -1.083e+11 2.329e+11 -8.069e+10 1.772e+11 -5.910e+10 1.331e+11 -4.249e+10 9.852e+10 -2.993e+10 7.188e+10 -2.061e+10 5.162e+10 -1.382e+10 3.645e+10 -8.991e+09 2.527e+10 -5.650e+09 1.720e+10 -3.403e+09 1.147e+10 -1.945e+09 7.486e+09 -1.038e+09 4.783e+09 -5.007e+08 2.988e+09 -2.031e+08 1.825e+09 -5.271e+07 1.090e+09 1.276e+07 6.352e+08 3.290e+07 3.595e+08 3.157e+07 1.951e+08 2.221e+07 9.814e+07 1.193e+07 4.231e+07 4.266e+06 1.266e+07 7.336e+05 1.104e+06 -1.369e+06 -1.040e+07 -5.258e+06 -4.218e+07 -9.572e+06 -1.097e+08 -8.872e+06 -2.338e+08 6.453e+06 -4.473e+08 5.214e+07 -7.985e+08 1.521e+08 -1.354e+09 3.405e+08 -2.203e+09 6.641e+08 -3.461e+09 1.183e+09 -5.271e+09 1.971e+09 -7.802e+09 3.120e+09 -1.126e+10 4.735e+09 -1.588e+10 6.933e+09 -2.190e+10 9.848e+09 -2.963e+10 1.362e+10 -3.936e+10 1.840e+10 -5.140e+10 2.435e+10 -6.609e+10 3.161e+10 -8.373e+10 4.033e+10 -1.046e+11 5.066e+10 -1.291e+11 6.274e+10 -1.574e+11 7.665e+10 -1.897e+11 9.252e+10 -2.262e+11 1.104e+11 -2.671e+11 1.303e+11 -3.123e+11 1.523e+11 -3.619e+11 1.763e+11 -4.159e+11 2.022e+11 -4.739e+11 2.300e+11 -5.358e+11 2.596e+11 -6.013e+11 2.906e+11 -6.700e+11 3.230e+11 -7.414e+11 3.565e+11 -8.150e+11 3.908e+11 -8.901e+11 4.255e+11 -9.661e+11 4.605e+11 -1.042e+12 4.954e+11 -1.118e+12 5.298e+11 -1.193e+12 5.633e+11 -1.265e+12 5.955e+11 -1.334e+12 6.261e+11 -1.400e+12 6.547e+11 -1.461e+12 6.809e+11 -1.518e+12 7.045e+11 -1.568e+12 7.251e+11 -1.611e+12 7.424e+11 -1.648e+12 7.562e+11 -1.676e+12 7.664e+11 -1.697e+12 7.727e+11 -1.709e+12 7.751e+11 -1.712e+12 7.734e+11 -1.707e+12 7.677e+11 -1.692e+12 7.580e+11 -1.669e+12 7.444e+11 -1.637e+12 7.271e+11 -1.596e+12 7.061e+11 -1.547e+12 6.817e+11 -1.491e+12 6.543e+11 -1.428e+12 6.241e+11 -1.359e+12 5.913e+11 -1.284e+12 5.565e+11 -1.204e+12 5.200e+11 -1.121e+12 4.821e+11 -1.035e+12 4.434e+11 -9.471e+11 4.042e+11 -8.585e+11 3.649e+11 -7.699e+11 3.261e+11 -6.827e+11 2.880e+11 -5.976e+11 2.510e+11 -5.155e+11 2.156e+11 -4.375e+11 1.821e+11 -3.643e+11 1.508e+11 -2.965e+11 1.220e+11 -2.348e+11 9.598e+10 -1.798e+11 7.280e+10 -1.318e+11 5.273e+10 -9.111e+10 3.587e+10 -5.801e+10 2.224e+10 -3.249e+10 1.193e+10 -1.458e+10 4.971e+09 -4.069e+09 1.701e+09 2.062e+08 6.784e+08 5.017e+09 -1.736e+09 1.534e+10 -6.682e+09 3.173e+10 -1.413e+10 5.363e+10 -2.385e+10 8.046e+10 -3.561e+10 1.116e+11 -4.910e+10 1.463e+11 -6.402e+10 1.840e+11 -8.007e+10 2.239e+11 -9.690e+10 2.652e+11 -1.142e+11 3.074e+11 -1.317e+11 3.497e+11 -1.490e+11 3.915e+11 -1.659e+11 4.322e+11 -1.821e+11 4.712e+11 -1.974e+11 5.080e+11 -2.115e+11 5.421e+11 -2.242e+11 5.731e+11 -2.354e+11 6.008e+11 -2.450e+11 6.246e+11 -2.529e+11 6.446e+11 -2.590e+11 6.605e+11 -2.633e+11 6.722e+11 -2.657e+11 6.798e+11 -2.664e+11 6.831e+11 -2.654e+11 6.824e+11 -2.628e+11 6.777e+11 -2.586e+11 6.692e+11 -2.530e+11 6.572e+11 -2.461e+11 6.419e+11 -2.382e+11 6.237e+11 -2.292e+11 6.027e+11 -2.194e+11 5.795e+11 -2.089e+11 5.542e+11 -1.980e+11 5.273e+11 -1.866e+11 4.992e+11 -1.749e+11 4.702e+11 -1.632e+11 4.405e+11 -1.515e+11 4.106e+11 -1.399e+11 3.807e+11 -1.286e+11 3.512e+11 -1.176e+11 3.222e+11 -1.070e+11 2.940e+11 -9.682e+10 2.668e+11 -8.718e+10 2.408e+11 -7.808e+10 2.161e+11 -6.955e+10 1.928e+11 -6.161e+10 1.711e+11 -5.426e+10 1.508e+11 -4.750e+10 1.322e+11 -4.133e+10 1.151e+11 -3.572e+10 9.958e+10 -3.067e+10 8.557e+10 -2.616e+10 7.303e+10 -2.214e+10 6.187e+10 0.005 -51.585 -50.657 -49.730 -48.802 -47.874 -46.946 -46.019 -45.164 -44.394 -43.702 -43.084 -42.537 -42.055 -41.638 -41.283 -40.988 -40.752 -40.574 -40.454 -40.391 -40.386 -40.439 -40.551 -40.723 -40.957 -41.255 -41.620 -42.055 -42.564 -43.152 -43.824 -44.586 -45.448 -46.419 -47.511 -48.737 -50.116 -51.669 -53.421 -55.404 -57.657 -60.224 -63.154 -66.452 -69.741 -71.067 -68.904 -65.391 -61.994 -58.973 -56.307 -53.952 -51.857 -49.985 -48.306 -46.796 -45.433 -44.202 -43.089 -42.083 -41.173 -40.353 -39.613 -38.949 -38.357 -37.833 -37.375 -36.979 -36.643 -36.365 -36.143 -35.977 -35.864 -35.804 -35.797 -35.841 -35.936 -36.081 -36.276 -36.519 -36.811 -37.150 -37.535 -37.965 -38.437 -38.951 -39.504 -40.095 -40.724 -41.390 -42.093 -42.836 -43.617 -44.423 -45.232 -45.975 -46.524 -46.692 -46.324 -45.418 -44.129 -42.659 -41.152 -39.690 -38.308 -37.020 -35.826 -34.724 -33.709 -32.776 -31.920 -31.137 -30.423 -29.772 -29.181 -28.650 -28.178 -27.764 -27.408 -27.108 -26.865 -26.678 -26.549 -26.477 -26.465 -26.514 -26.628 -26.809 -27.059 -27.374 -27.768 -28.248 -28.824 -29.503 -30.301 -31.232 -32.318 -33.587 -35.076 -36.841 -38.959 -41.552 -44.851 -49.320 -56.315 -67.921 -68.350 -63.431 -60.587 -53.854 -47.128 -42.077 -38.096 -34.803 -31.989 -29.530 -27.345 -25.380 -23.590 -21.941 -20.421 -19.015 -17.709 -16.494 -15.359 -14.291 -13.276 -12.323 -11.426 -10.584 -9.791 -9.042 -8.322 -7.643 -7.005 -6.407 -5.845 -5.309 -4.796 -4.316 -3.870 -3.458 -3.066 -2.693 -2.350 -2.037 -1.753 -1.485 -1.234 -1.011 -0.817 -0.649 -0.487 -0.347 -0.235 -0.152 -0.083 -0.028 -0.000 0.000 -0.028 -0.051 -0.103 -0.183 -0.289 -0.410 -0.546 -0.711 -0.905 -1.122 -1.349 -1.602 -1.886 -2.198 -2.529 -2.874 -3.251 -3.660 -4.100 -4.560 -5.041 -5.558 -6.112 -6.703 -7.321 -7.971 -8.663 -9.398 -10.180 -11.010 -11.874 -12.790 -13.765 -14.804 -15.912 -17.095 -18.345 -19.680 -21.119 -22.675 -24.363 -26.203 -28.219 -30.435 -32.896 -35.660 -38.794 -42.375 -46.465 -50.953 -54.691 -55.042 -51.775 -47.854 -44.392 -41.458 -38.976 -36.866 -35.059 -33.504 -32.156 -30.980 -29.954 -29.063 -28.291 -27.625 -27.055 -26.572 -26.171 -25.845 -25.589 -25.399 -25.273 -25.199 -25.183 -25.224 -25.322 -25.475 -25.683 -25.945 -26.262 -26.634 -27.062 -27.547 -28.092 -28.697 -29.365 -30.100 -30.901 -31.774 -32.727 -33.767 -34.899 -36.134 -37.479 -38.945 -40.542 -42.275 -44.145 -46.131 -48.177 -50.170 -51.950 -53.396 -54.541 -55.600 -56.883 -58.746 -61.647 -65.506 -64.509 -59.485 -55.360 -52.296 -49.915 -47.988 -46.392 -45.052 -43.917 -42.952 -42.133 -41.441 -40.861 -40.383 -39.998 -39.700 -39.482 -39.341 -39.274 -39.277 -39.350 -39.490 -39.697 -39.971 -40.312 -40.721 -41.198 -41.746 -42.366 -43.058 -43.827 -44.675 -45.607 -46.626 -47.734 -48.935 -50.230 -51.619 -53.102 -54.678 -56.352 -58.144 -60.101 -62.333 -65.034 -68.323 -70.895 -69.152 -65.055 -61.558 -58.767 -56.478 -54.550 -52.894 -51.455 -50.194 -49.083 -48.102 -47.235 -46.472 -45.802 -45.217 -44.712 -44.280 -43.918 -43.623 -43.390 -43.219 -43.106 -43.051 -43.053 -43.110 -43.222 -43.389 -43.611 -43.889 -44.224 -44.617 -45.070 -45.585 -46.165 -46.814 -47.537 -48.340 -49.230 -50.198 -51.166 -52.134 -53.103 -54.071 -55.039 0 1 1.0 1 N1 HH 17.14 22.7 0.05 1.934e+10 1.092e+10 2.119e+10 2.312e+10 2.324e+10 4.261e+10 2.411e+10 7.261e+10 2.213e+10 1.165e+11 1.547e+10 1.776e+11 2.088e+09 2.599e+11 -2.033e+10 3.675e+11 -5.426e+10 5.046e+11 -1.025e+11 6.761e+11 -1.682e+11 8.872e+11 -2.545e+11 1.143e+12 -3.650e+11 1.449e+12 -5.036e+11 1.811e+12 -6.739e+11 2.235e+12 -8.811e+11 2.728e+12 -1.129e+12 3.297e+12 -1.421e+12 3.946e+12 -1.762e+12 4.681e+12 -2.157e+12 5.509e+12 -2.610e+12 6.435e+12 -3.123e+12 7.466e+12 -3.703e+12 8.607e+12 -4.352e+12 9.861e+12 -5.074e+12 1.123e+13 -5.873e+12 1.273e+13 -6.751e+12 1.436e+13 -7.712e+12 1.611e+13 -8.757e+12 1.800e+13 -9.889e+12 2.003e+13 -1.111e+13 2.219e+13 -1.242e+13 2.448e+13 -1.381e+13 2.692e+13 -1.530e+13 2.948e+13 -1.687e+13 3.219e+13 -1.853e+13 3.502e+13 -2.027e+13 3.799e+13 -2.209e+13 4.108e+13 -2.399e+13 4.428e+13 -2.597e+13 4.760e+13 -2.801e+13 5.103e+13 -3.012e+13 5.456e+13 -3.229e+13 5.818e+13 -3.450e+13 6.188e+13 -3.677e+13 6.566e+13 -3.907e+13 6.950e+13 -4.141e+13 7.340e+13 -4.376e+13 7.734e+13 -4.613e+13 8.131e+13 -4.851e+13 8.531e+13 -5.089e+13 8.932e+13 -5.325e+13 9.333e+13 -5.560e+13 9.733e+13 -5.792e+13 1.013e+14 -6.020e+13 1.052e+14 -6.243e+13 1.091e+14 -6.461e+13 1.130e+14 -6.673e+13 1.168e+14 -6.877e+13 1.205e+14 -7.074e+13 1.241e+14 -7.262e+13 1.276e+14 -7.442e+13 1.311e+14 -7.613e+13 1.344e+14 -7.772e+13 1.376e+14 -7.922e+13 1.407e+14 -8.060e+13 1.437e+14 -8.186e+13 1.466e+14 -8.301e+13 1.494e+14 -8.403e+13 1.520e+14 -8.493e+13 1.545e+14 -8.571e+13 1.568e+14 -8.637e+13 1.591e+14 -8.690e+13 1.612e+14 -8.732e+13 1.631e+14 -8.761e+13 1.650e+14 -8.779e+13 1.668e+14 -8.785e+13 1.684e+14 -8.781e+13 1.699e+14 -8.766e+13 1.714e+14 -8.741e+13 1.727e+14 -8.706e+13 1.740e+14 -8.663e+13 1.752e+14 -8.611e+13 1.763e+14 -8.551e+13 1.773e+14 -8.483e+13 1.783e+14 -8.410e+13 1.793e+14 -8.330e+13 1.802e+14 -8.244e+13 1.811e+14 -8.154e+13 1.820e+14 -8.060e+13 1.829e+14 -7.962e+13 1.838e+14 -7.862e+13 1.846e+14 -7.759e+13 1.855e+14 -7.654e+13 1.865e+14 -7.549e+13 1.874e+14 -7.443e+13 1.884e+14 -7.337e+13 1.895e+14 -7.231e+13 1.906e+14 -7.126e+13 1.918e+14 -7.023e+13 1.930e+14 -6.923e+13 1.944e+14 -6.827e+13 1.958e+14 -6.736e+13 1.973e+14 -6.647e+13 1.990e+14 -6.562e+13 2.007e+14 -6.481e+13 2.025e+14 -6.403e+13 2.044e+14 -6.330e+13 2.064e+14 -6.262e+13 2.085e+14 -6.198e+13 2.107e+14 -6.139e+13 2.130e+14 -6.086e+13 2.154e+14 -6.038e+13 2.179e+14 -5.996e+13 2.204e+14 -5.959e+13 2.231e+14 -5.928e+13 2.258e+14 -5.903e+13 2.286e+14 -5.885e+13 2.315e+14 -5.872e+13 2.344e+14 -5.865e+13 2.373e+14 -5.865e+13 2.403e+14 -5.871e+13 2.433e+14 -5.882e+13 2.464e+14 -5.900e+13 2.494e+14 -5.924e+13 2.524e+14 -5.954e+13 2.554e+14 -5.989e+13 2.584e+14 -6.030e+13 2.613e+14 -6.076e+13 2.641e+14 -6.127e+13 2.669e+14 -6.183e+13 2.695e+14 -6.244e+13 2.721e+14 -6.309e+13 2.745e+14 -6.378e+13 2.767e+14 -6.450e+13 2.788e+14 -6.525e+13 2.808e+14 -6.603e+13 2.825e+14 -6.683e+13 2.840e+14 -6.765e+13 2.853e+14 -6.848e+13 2.863e+14 -6.932e+13 2.871e+14 -7.017e+13 2.877e+14 -7.101e+13 2.881e+14 -7.184e+13 2.882e+14 -7.265e+13 2.879e+14 -7.345e+13 2.874e+14 -7.422e+13 2.865e+14 -7.495e+13 2.853e+14 -7.565e+13 2.838e+14 -7.630e+13 2.819e+14 -7.690e+13 2.797e+14 -7.744e+13 2.771e+14 -7.792e+13 2.742e+14 -7.834e+13 2.710e+14 -7.868e+13 2.674e+14 -7.894e+13 2.635e+14 -7.912e+13 2.592e+14 -7.921e+13 2.547e+14 -7.921e+13 2.498e+14 -7.911e+13 2.447e+14 -7.892e+13 2.393e+14 -7.863e+13 2.336e+14 -7.824e+13 2.277e+14 -7.775e+13 2.215e+14 -7.715e+13 2.152e+14 -7.645e+13 2.086e+14 -7.565e+13 2.019e+14 -7.475e+13 1.951e+14 -7.374e+13 1.881e+14 -7.264e+13 1.811e+14 -7.145e+13 1.739e+14 -7.016e+13 1.667e+14 -6.879e+13 1.595e+14 -6.734e+13 1.523e+14 -6.580e+13 1.452e+14 -6.420e+13 1.380e+14 -6.253e+13 1.309e+14 -6.080e+13 1.240e+14 -5.902e+13 1.171e+14 -5.719e+13 1.103e+14 -5.532e+13 1.037e+14 -5.341e+13 9.730e+13 -5.146e+13 9.103e+13 -4.950e+13 8.496e+13 -4.754e+13 7.909e+13 -4.556e+13 7.343e+13 -4.359e+13 6.798e+13 -4.163e+13 6.277e+13 -3.969e+13 5.779e+13 -3.777e+13 5.305e+13 -3.587e+13 4.856e+13 -3.401e+13 4.430e+13 -3.218e+13 4.029e+13 -3.040e+13 3.652e+13 -2.866e+13 3.298e+13 -2.698e+13 2.968e+13 -2.534e+13 2.662e+13 -2.377e+13 2.377e+13 -2.225e+13 2.115e+13 -2.079e+13 1.873e+13 -1.940e+13 1.651e+13 -1.807e+13 1.448e+13 -1.680e+13 1.264e+13 -1.560e+13 1.097e+13 -1.447e+13 9.461e+12 -1.340e+13 8.104e+12 -1.239e+13 6.888e+12 -1.144e+13 5.804e+12 -1.056e+13 4.841e+12 -9.732e+12 3.989e+12 -8.962e+12 3.238e+12 -8.247e+12 2.579e+12 -7.583e+12 2.004e+12 -6.968e+12 1.504e+12 -6.400e+12 1.072e+12 -5.874e+12 6.997e+11 -5.389e+12 3.812e+11 -4.941e+12 1.105e+11 -4.527e+12 -1.180e+11 -4.145e+12 -3.089e+11 -3.792e+12 -4.665e+11 -3.466e+12 -5.951e+11 -3.164e+12 -6.975e+11 -2.884e+12 -7.768e+11 -2.624e+12 -8.354e+11 -2.382e+12 -8.757e+11 -2.157e+12 -8.997e+11 -1.948e+12 -9.093e+11 -1.754e+12 -9.062e+11 -1.573e+12 -8.920e+11 -1.405e+12 -8.680e+11 -1.249e+12 -8.358e+11 -1.105e+12 -7.966e+11 -9.720e+11 -7.517e+11 -8.497e+11 -7.023e+11 -7.377e+11 -6.497e+11 -6.354e+11 -5.947e+11 -5.427e+11 -5.386e+11 -4.590e+11 -4.823e+11 -3.840e+11 -4.266e+11 -3.173e+11 -3.724e+11 -2.585e+11 -3.204e+11 -2.072e+11 -2.712e+11 -1.628e+11 -2.254e+11 -1.250e+11 -1.834e+11 -9.332e+10 -1.456e+11 -6.720e+10 -1.121e+11 -4.619e+10 -8.310e+10 -2.977e+10 -5.870e+10 -1.748e+10 -3.883e+10 -8.818e+09 -2.339e+10 -3.290e+09 -1.217e+10 -3.972e+08 -4.940e+09 6.653e+08 -1.334e+09 1.869e+09 4.961e+08 4.456e+09 3.479e+09 8.263e+09 8.714e+09 1.287e+10 1.601e+10 1.796e+10 2.497e+10 2.324e+10 3.516e+10 2.851e+10 4.618e+10 3.355e+10 5.766e+10 3.821e+10 6.920e+10 4.237e+10 8.051e+10 4.591e+10 9.125e+10 4.878e+10 1.012e+11 5.093e+10 1.101e+11 5.234e+10 1.178e+11 5.303e+10 1.241e+11 5.302e+10 1.291e+11 5.234e+10 1.325e+11 5.107e+10 1.345e+11 4.925e+10 1.350e+11 4.696e+10 1.341e+11 4.429e+10 1.319e+11 4.130e+10 1.285e+11 3.808e+10 1.240e+11 3.471e+10 1.186e+11 3.126e+10 1.123e+11 2.780e+10 1.054e+11 2.439e+10 9.806e+10 2.109e+10 9.036e+10 1.795e+10 8.249e+10 1.501e+10 7.458e+10 1.228e+10 6.676e+10 9.813e+09 5.915e+10 7.607e+09 5.185e+10 5.671e+09 4.493e+10 4.008e+09 3.848e+10 2.611e+09 3.253e+10 1.465e+09 2.713e+10 5.581e+08 2.231e+10 -1.325e+08 1.805e+10 -6.305e+08 1.435e+10 -9.601e+08 1.119e+10 -1.148e+09 8.551e+09 -1.222e+09 6.377e+09 -1.208e+09 4.633e+09 -1.129e+09 3.267e+09 -1.010e+09 2.224e+09 -9.016e+08 1.451e+09 -7.393e+08 9.097e+08 -5.990e+08 5.340e+08 -4.754e+08 2.865e+08 -3.703e+08 1.289e+08 -2.814e+08 3.228e+07 -2.045e+08 -2.295e+07 -1.363e+08 -4.864e+07 -7.656e+07 -5.219e+07 -2.959e+07 -4.094e+07 8.231e+05 -2.592e+07 2.912e+07 -1.855e+07 9.677e+07 -3.891e+06 2.324e+08 5.033e+07 4.553e+08 1.732e+08 7.829e+08 3.936e+08 1.233e+09 7.421e+08 1.821e+09 1.250e+09 2.561e+09 1.948e+09 3.464e+09 2.864e+09 4.541e+09 4.027e+09 5.795e+09 5.458e+09 7.229e+09 7.176e+09 8.844e+09 9.197e+09 1.063e+10 1.152e+10 1.259e+10 1.416e+10 1.470e+10 1.711e+10 1.694e+10 2.035e+10 1.931e+10 2.387e+10 2.179e+10 2.765e+10 2.433e+10 3.164e+10 2.694e+10 3.583e+10 2.957e+10 4.017e+10 3.219e+10 4.461e+10 3.479e+10 4.911e+10 3.733e+10 5.362e+10 3.979e+10 5.808e+10 4.213e+10 6.245e+10 4.434e+10 6.667e+10 4.639e+10 7.069e+10 4.826e+10 7.447e+10 4.993e+10 7.797e+10 5.139e+10 8.114e+10 5.262e+10 8.394e+10 5.360e+10 8.634e+10 5.432e+10 8.830e+10 5.478e+10 8.981e+10 5.498e+10 9.085e+10 5.491e+10 9.140e+10 5.459e+10 9.148e+10 5.401e+10 9.107e+10 5.319e+10 9.020e+10 5.214e+10 8.887e+10 5.087e+10 8.711e+10 4.941e+10 8.495e+10 4.776e+10 8.241e+10 4.596e+10 7.953e+10 4.402e+10 7.636e+10 4.196e+10 7.292e+10 3.981e+10 6.927e+10 3.759e+10 6.545e+10 3.533e+10 6.150e+10 3.305e+10 5.747e+10 3.076e+10 5.340e+10 2.849e+10 4.933e+10 2.626e+10 4.531e+10 2.409e+10 4.136e+10 2.199e+10 3.752e+10 1.997e+10 3.382e+10 1.804e+10 3.029e+10 1.622e+10 2.695e+10 1.452e+10 2.380e+10 1.292e+10 2.088e+10 1.145e+10 1.817e+10 1.010e+10 1.569e+10 8.866e+09 1.345e+10 7.750e+09 1.142e+10 6.746e+09 9.622e+09 5.852e+09 8.032e+09 5.060e+09 6.643e+09 4.364e+09 5.443e+09 3.759e+09 4.418e+09 3.236e+09 3.552e+09 2.789e+09 2.828e+09 2.410e+09 2.230e+09 2.093e+09 1.743e+09 1.831e+09 1.351e+09 1.618e+09 1.039e+09 1.449e+09 7.933e+08 1.318e+09 6.012e+08 1.221e+09 4.520e+08 1.152e+09 3.364e+08 1.108e+09 2.473e+08 1.084e+09 1.793e+08 1.078e+09 1.286e+08 1.087e+09 9.278e+07 1.110e+09 7.040e+07 1.144e+09 6.064e+07 1.189e+09 6.318e+07 1.245e+09 7.796e+07 1.311e+09 1.052e+08 1.388e+09 1.451e+08 1.476e+09 1.982e+08 1.575e+09 2.650e+08 1.684e+09 3.459e+08 1.805e+09 4.415e+08 1.936e+09 5.521e+08 2.076e+09 6.780e+08 2.225e+09 8.188e+08 2.382e+09 9.744e+08 2.543e+09 1.144e+09 2.708e+09 1.325e+09 2.874e+09 1.518e+09 3.039e+09 1.718e+09 3.198e+09 1.925e+09 3.351e+09 2.135e+09 3.493e+09 2.344e+09 3.622e+09 2.549e+09 3.735e+09 2.747e+09 3.830e+09 2.934e+09 3.904e+09 3.106e+09 3.956e+09 3.260e+09 3.983e+09 3.393e+09 3.986e+09 3.502e+09 3.962e+09 3.586e+09 3.912e+09 3.643e+09 3.837e+09 3.671e+09 3.737e+09 3.671e+09 3.613e+09 3.642e+09 3.467e+09 3.584e+09 3.302e+09 3.500e+09 3.120e+09 3.390e+09 2.923e+09 3.257e+09 2.715e+09 3.103e+09 2.500e+09 2.932e+09 2.279e+09 2.746e+09 2.058e+09 2.548e+09 1.838e+09 2.343e+09 1.622e+09 2.133e+09 1.414e+09 1.921e+09 1.217e+09 1.712e+09 1.031e+09 1.507e+09 8.590e+08 1.310e+09 7.025e+08 1.123e+09 5.623e+08 9.480e+08 4.389e+08 7.864e+08 3.324e+08 6.398e+08 2.426e+08 5.089e+08 1.689e+08 3.940e+08 1.103e+08 2.955e+08 6.560e+07 2.130e+08 3.330e+07 1.459e+08 1.175e+07 9.345e+07 -9.396e+05 5.462e+07 -6.934e+06 2.808e+07 -8.988e+06 1.206e+07 -1.075e+07 2.972e+06 -1.477e+07 -4.963e+06 -2.065e+07 -1.627e+07 -2.659e+07 -3.228e+07 -3.102e+07 -5.275e+07 -3.270e+07 -7.707e+07 -3.062e+07 -1.048e+08 -2.382e+07 -1.358e+08 -1.128e+07 -1.702e+08 8.171e+06 -2.083e+08 3.605e+07 -2.511e+08 7.427e+07 -2.994e+08 1.252e+08 -3.543e+08 1.919e+08 -4.171e+08 2.779e+08 -4.892e+08 3.871e+08 -5.717e+08 5.241e+08 -6.661e+08 6.936e+08 -7.736e+08 9.007e+08 -8.955e+08 1.151e+09 -1.033e+09 1.449e+09 -1.188e+09 1.801e+09 -1.362e+09 2.211e+09 -1.556e+09 2.685e+09 -1.773e+09 3.227e+09 -2.014e+09 3.842e+09 -2.281e+09 4.534e+09 -2.578e+09 5.305e+09 -2.906e+09 6.159e+09 -3.267e+09 7.097e+09 -3.666e+09 8.121e+09 -4.103e+09 9.233e+09 -4.583e+09 1.043e+10 -5.107e+09 1.171e+10 -5.678e+09 1.308e+10 -6.299e+09 1.453e+10 -6.971e+09 1.605e+10 -7.695e+09 1.765e+10 -8.474e+09 1.931e+10 -9.309e+09 2.103e+10 -1.020e+10 2.281e+10 -1.114e+10 2.464e+10 -1.214e+10 2.650e+10 -1.319e+10 2.838e+10 -1.429e+10 3.029e+10 -1.544e+10 3.221e+10 -1.662e+10 3.412e+10 -1.785e+10 3.603e+10 -1.910e+10 3.790e+10 -2.038e+10 3.973e+10 -2.167e+10 4.151e+10 -2.297e+10 4.322e+10 -2.426e+10 4.485e+10 -2.554e+10 4.640e+10 -2.679e+10 4.783e+10 -2.800e+10 4.915e+10 -2.916e+10 5.034e+10 -3.026e+10 5.139e+10 -3.127e+10 5.229e+10 -3.220e+10 5.303e+10 -3.302e+10 5.360e+10 -3.373e+10 5.399e+10 -3.430e+10 5.419e+10 -3.473e+10 5.421e+10 -3.501e+10 5.404e+10 -3.513e+10 5.366e+10 -3.507e+10 5.309e+10 -3.484e+10 5.233e+10 -3.443e+10 5.137e+10 -3.383e+10 5.022e+10 -3.304e+10 4.888e+10 -3.207e+10 4.737e+10 -3.092e+10 4.569e+10 -2.960e+10 4.385e+10 -2.811e+10 4.186e+10 -2.648e+10 3.975e+10 -2.471e+10 3.752e+10 -2.282e+10 3.519e+10 -2.083e+10 3.278e+10 -1.878e+10 3.031e+10 -1.667e+10 2.781e+10 -1.455e+10 2.529e+10 -1.244e+10 2.279e+10 -1.037e+10 2.033e+10 -8.374e+09 1.793e+10 -6.480e+09 1.564e+10 -4.718e+09 1.346e+10 -3.109e+09 1.145e+10 -1.674e+09 9.622e+09 -4.210e+08 8.015e+09 6.615e+08 6.655e+09 1.605e+09 5.551e+09 2.476e+09 4.684e+09 3.378e+09 3.999e+09 4.431e+09 3.401e+09 5.756e+09 2.783e+09 7.446e+09 2.040e+09 9.558e+09 1.089e+09 1.212e+10 -1.336e+08 1.515e+10 -1.672e+09 1.863e+10 -3.558e+09 2.256e+10 -5.814e+09 2.691e+10 -8.451e+09 3.166e+10 -1.148e+10 3.678e+10 -1.489e+10 4.223e+10 -1.869e+10 4.797e+10 -2.287e+10 5.396e+10 -2.741e+10 6.014e+10 -3.230e+10 6.647e+10 -3.751e+10 7.289e+10 -4.302e+10 7.934e+10 -4.881e+10 8.577e+10 -5.484e+10 9.211e+10 -6.108e+10 9.831e+10 -6.750e+10 1.043e+11 -7.405e+10 1.101e+11 -8.070e+10 1.155e+11 -8.741e+10 1.206e+11 -9.414e+10 1.252e+11 -1.008e+11 1.295e+11 -1.075e+11 1.332e+11 -1.140e+11 1.364e+11 -1.204e+11 1.390e+11 -1.266e+11 1.411e+11 -1.326e+11 1.426e+11 -1.383e+11 1.435e+11 -1.438e+11 1.437e+11 -1.489e+11 1.434e+11 -1.537e+11 1.424e+11 -1.581e+11 1.409e+11 -1.621e+11 1.387e+11 -1.657e+11 1.360e+11 -1.688e+11 1.328e+11 -1.716e+11 1.290e+11 -1.738e+11 1.247e+11 -1.756e+11 1.200e+11 -1.770e+11 1.149e+11 -1.779e+11 1.095e+11 -1.783e+11 1.037e+11 -1.782e+11 9.765e+10 -1.777e+11 9.138e+10 -1.768e+11 8.491e+10 -1.754e+11 7.832e+10 -1.736e+11 7.164e+10 -1.713e+11 6.491e+10 0.005 -54.245 -52.564 -50.882 -49.200 -47.564 -46.010 -44.531 -43.121 -41.774 -40.487 -39.255 -38.077 -36.950 -35.871 -34.838 -33.851 -32.906 -32.003 -31.140 -30.317 -29.531 -28.782 -28.068 -27.390 -26.745 -26.134 -25.555 -25.008 -24.493 -24.007 -23.552 -23.127 -22.730 -22.362 -22.022 -21.710 -21.426 -21.170 -20.941 -20.739 -20.564 -20.417 -20.296 -20.203 -20.137 -20.097 -20.085 -20.100 -20.143 -20.213 -20.311 -20.437 -20.592 -20.775 -20.988 -21.231 -21.504 -21.808 -22.143 -22.511 -22.912 -23.347 -23.817 -24.323 -24.867 -25.450 -26.072 -26.738 -27.447 -28.203 -29.008 -29.865 -30.777 -31.750 -32.788 -33.897 -35.084 -36.359 -37.733 -39.221 -40.841 -42.614 -44.566 -46.715 -49.041 -51.395 -53.327 -54.199 -53.882 -52.925 -51.882 -50.990 -50.302 -49.810 -49.496 -49.340 -49.323 -49.422 -49.594 -49.749 -49.727 -49.302 -48.300 -46.743 -44.823 -42.754 -40.676 -38.659 -36.730 -34.896 -33.153 -31.496 -29.920 -28.417 -26.982 -25.611 -24.298 -23.041 -21.835 -20.679 -19.569 -18.503 -17.480 -16.497 -15.553 -14.646 -13.774 -12.937 -12.133 -11.362 -10.621 -9.912 -9.232 -8.581 -7.958 -7.362 -6.794 -6.252 -5.736 -5.245 -4.780 -4.339 -3.923 -3.531 -3.163 -2.818 -2.497 -2.199 -1.925 -1.673 -1.445 -1.239 -1.057 -0.898 -0.762 -0.649 -0.560 -0.494 -0.453 -0.435 -0.442 -0.474 -0.532 -0.615 -0.725 -0.862 -1.027 -1.220 -1.443 -1.696 -1.982 -2.300 -2.653 -3.043 -3.470 -3.938 -4.448 -5.004 -5.608 -6.265 -6.979 -7.754 -8.597 -9.515 -10.516 -11.611 -12.813 -14.137 -15.605 -17.244 -19.090 -21.194 -23.629 -26.510 -30.024 -34.526 -40.802 -50.524 -51.321 -48.006 -44.680 -39.114 -33.949 -29.777 -26.381 -23.546 -21.127 -19.026 -17.176 -15.530 -14.053 -12.718 -11.506 -10.399 -9.387 -8.457 -7.602 -6.815 -6.090 -5.421 -4.804 -4.236 -3.714 -3.234 -2.794 -2.392 -2.027 -1.695 -1.397 -1.131 -0.895 -0.688 -0.510 -0.360 -0.236 -0.139 -0.068 -0.022 0.000 -0.003 -0.029 -0.080 -0.154 -0.250 -0.370 -0.513 -0.679 -0.867 -1.078 -1.311 -1.568 -1.847 -2.149 -2.474 -2.822 -3.193 -3.588 -4.007 -4.450 -4.918 -5.410 -5.928 -6.471 -7.041 -7.637 -8.261 -8.913 -9.594 -10.304 -11.045 -11.817 -12.622 -13.460 -14.333 -15.242 -16.190 -17.177 -18.205 -19.278 -20.398 -21.567 -22.790 -24.070 -25.413 -26.824 -28.312 -29.886 -31.559 -33.346 -35.271 -37.367 -39.681 -42.290 -45.328 -49.058 -54.144 -62.043 -68.431 -59.827 -55.932 -53.953 -52.892 -52.401 -52.329 -52.604 -53.192 -54.048 -55.035 -55.752 -55.535 -54.068 -51.821 -49.419 -47.151 -45.081 -43.202 -41.488 -39.913 -38.458 -37.106 -35.844 -34.662 -33.552 -32.508 -31.524 -30.595 -29.719 -28.893 -28.113 -27.377 -26.683 -26.031 -25.417 -24.841 -24.302 -23.798 -23.329 -22.893 -22.490 -22.118 -21.778 -21.469 -21.190 -20.940 -20.719 -20.527 -20.363 -20.228 -20.120 -20.039 -19.986 -19.960 -19.961 -19.988 -20.043 -20.124 -20.231 -20.366 -20.527 -20.716 -20.931 -21.174 -21.444 -21.742 -22.067 -22.421 -22.803 -23.215 -23.655 -24.125 -24.625 -25.156 -25.719 -26.313 -26.941 -27.602 -28.297 -29.028 -29.795 -30.598 -31.440 -32.320 -33.240 -34.201 -35.204 -36.249 -37.337 -38.469 -39.645 -40.865 -42.128 -43.433 -44.776 -46.156 -47.565 -48.996 -50.440 -51.883 -53.321 -54.759 -56.197 0 1 1.0 1 N1 HV 17.14 22.7 0.05 2.187e+10 -8.616e+09 3.292e+10 -1.786e+09 4.976e+10 9.787e+09 7.391e+10 2.940e+10 1.067e+11 6.060e+10 1.492e+11 1.071e+11 2.028e+11 1.731e+11 2.689e+11 2.631e+11 3.484e+11 3.816e+11 4.427e+11 5.341e+11 5.531e+11 7.263e+11 6.804e+11 9.636e+11 8.259e+11 1.252e+12 9.908e+11 1.599e+12 1.175e+12 2.010e+12 1.381e+12 2.494e+12 1.609e+12 3.057e+12 1.858e+12 3.704e+12 2.130e+12 4.443e+12 2.425e+12 5.282e+12 2.742e+12 6.225e+12 3.082e+12 7.280e+12 3.445e+12 8.454e+12 3.830e+12 9.751e+12 4.237e+12 1.118e+13 4.665e+12 1.274e+13 5.114e+12 1.444e+13 5.582e+12 1.628e+13 6.068e+12 1.827e+13 6.571e+12 2.040e+13 7.090e+12 2.269e+13 7.623e+12 2.513e+13 8.169e+12 2.772e+13 8.725e+12 3.045e+13 9.291e+12 3.335e+13 9.864e+12 3.638e+13 1.044e+13 3.956e+13 1.102e+13 4.288e+13 1.160e+13 4.633e+13 1.218e+13 4.991e+13 1.276e+13 5.360e+13 1.333e+13 5.741e+13 1.389e+13 6.131e+13 1.445e+13 6.531e+13 1.499e+13 6.939e+13 1.552e+13 7.353e+13 1.604e+13 7.773e+13 1.654e+13 8.198e+13 1.703e+13 8.624e+13 1.749e+13 9.053e+13 1.794e+13 9.482e+13 1.837e+13 9.909e+13 1.879e+13 1.033e+14 1.918e+13 1.075e+14 1.956e+13 1.117e+14 1.992e+13 1.158e+14 2.026e+13 1.198e+14 2.059e+13 1.237e+14 2.091e+13 1.275e+14 2.121e+13 1.312e+14 2.150e+13 1.348e+14 2.178e+13 1.383e+14 2.206e+13 1.416e+14 2.233e+13 1.448e+14 2.260e+13 1.479e+14 2.286e+13 1.508e+14 2.313e+13 1.535e+14 2.340e+13 1.561e+14 2.368e+13 1.586e+14 2.396e+13 1.609e+14 2.426e+13 1.630e+14 2.456e+13 1.650e+14 2.488e+13 1.669e+14 2.521e+13 1.686e+14 2.556e+13 1.701e+14 2.593e+13 1.716e+14 2.631e+13 1.729e+14 2.672e+13 1.740e+14 2.715e+13 1.751e+14 2.760e+13 1.761e+14 2.808e+13 1.769e+14 2.858e+13 1.777e+14 2.910e+13 1.784e+14 2.965e+13 1.790e+14 3.023e+13 1.796e+14 3.083e+13 1.801e+14 3.146e+13 1.805e+14 3.211e+13 1.810e+14 3.280e+13 1.813e+14 3.350e+13 1.817e+14 3.424e+13 1.821e+14 3.500e+13 1.824e+14 3.579e+13 1.828e+14 3.660e+13 1.832e+14 3.743e+13 1.836e+14 3.830e+13 1.840e+14 3.918e+13 1.845e+14 4.009e+13 1.851e+14 4.103e+13 1.857e+14 4.198e+13 1.863e+14 4.295e+13 1.871e+14 4.395e+13 1.879e+14 4.496e+13 1.889e+14 4.598e+13 1.899e+14 4.703e+13 1.911e+14 4.809e+13 1.923e+14 4.916e+13 1.937e+14 5.025e+13 1.952e+14 5.135e+13 1.967e+14 5.245e+13 1.984e+14 5.356e+13 2.002e+14 5.467e+13 2.021e+14 5.578e+13 2.042e+14 5.689e+13 2.063e+14 5.799e+13 2.086e+14 5.907e+13 2.109e+14 6.015e+13 2.134e+14 6.120e+13 2.160e+14 6.222e+13 2.186e+14 6.322e+13 2.214e+14 6.418e+13 2.242e+14 6.510e+13 2.271e+14 6.598e+13 2.300e+14 6.680e+13 2.330e+14 6.756e+13 2.361e+14 6.826e+13 2.391e+14 6.889e+13 2.422e+14 6.944e+13 2.453e+14 6.991e+13 2.483e+14 7.029e+13 2.513e+14 7.057e+13 2.543e+14 7.075e+13 2.572e+14 7.083e+13 2.600e+14 7.079e+13 2.627e+14 7.065e+13 2.653e+14 7.038e+13 2.678e+14 6.998e+13 2.701e+14 6.947e+13 2.723e+14 6.882e+13 2.742e+14 6.804e+13 2.760e+14 6.715e+13 2.775e+14 6.614e+13 2.789e+14 6.501e+13 2.800e+14 6.376e+13 2.809e+14 6.238e+13 2.815e+14 6.087e+13 2.818e+14 5.925e+13 2.818e+14 5.751e+13 2.815e+14 5.567e+13 2.808e+14 5.372e+13 2.799e+14 5.168e+13 2.786e+14 4.955e+13 2.770e+14 4.734e+13 2.750e+14 4.505e+13 2.727e+14 4.271e+13 2.700e+14 4.031e+13 2.671e+14 3.786e+13 2.638e+14 3.538e+13 2.601e+14 3.288e+13 2.562e+14 3.035e+13 2.519e+14 2.783e+13 2.473e+14 2.530e+13 2.425e+14 2.279e+13 2.373e+14 2.029e+13 2.319e+14 1.783e+13 2.263e+14 1.541e+13 2.204e+14 1.304e+13 2.144e+14 1.072e+13 2.081e+14 8.460e+12 2.017e+14 6.276e+12 1.951e+14 4.169e+12 1.884e+14 2.145e+12 1.816e+14 2.112e+11 1.747e+14 -1.628e+12 1.677e+14 -3.369e+12 1.607e+14 -5.005e+12 1.537e+14 -6.535e+12 1.467e+14 -7.956e+12 1.398e+14 -9.264e+12 1.328e+14 -1.046e+13 1.260e+14 -1.154e+13 1.192e+14 -1.249e+13 1.126e+14 -1.333e+13 1.060e+14 -1.406e+13 9.967e+13 -1.467e+13 9.345e+13 -1.518e+13 8.741e+13 -1.559e+13 8.156e+13 -1.589e+13 7.591e+13 -1.610e+13 7.048e+13 -1.622e+13 6.526e+13 -1.625e+13 6.027e+13 -1.620e+13 5.551e+13 -1.608e+13 5.098e+13 -1.589e+13 4.670e+13 -1.563e+13 4.265e+13 -1.532e+13 3.884e+13 -1.495e+13 3.527e+13 -1.455e+13 3.193e+13 -1.410e+13 2.881e+13 -1.363e+13 2.592e+13 -1.313e+13 2.325e+13 -1.262e+13 2.078e+13 -1.209e+13 1.851e+13 -1.155e+13 1.643e+13 -1.101e+13 1.453e+13 -1.047e+13 1.280e+13 -9.935e+12 1.124e+13 -9.409e+12 9.821e+12 -8.896e+12 8.547e+12 -8.396e+12 7.402e+12 -7.913e+12 6.377e+12 -7.447e+12 5.463e+12 -7.001e+12 4.649e+12 -6.573e+12 3.927e+12 -6.166e+12 3.288e+12 -5.778e+12 2.723e+12 -5.410e+12 2.226e+12 -5.061e+12 1.790e+12 -4.730e+12 1.408e+12 -4.415e+12 1.075e+12 -4.118e+12 7.852e+11 -3.835e+12 5.339e+11 -3.567e+12 3.174e+11 -3.312e+12 1.323e+11 -3.068e+12 -2.487e+10 -2.836e+12 -1.567e+11 -2.615e+12 -2.656e+11 -2.404e+12 -3.539e+11 -2.202e+12 -4.235e+11 -2.010e+12 -4.762e+11 -1.827e+12 -5.139e+11 -1.652e+12 -5.380e+11 -1.487e+12 -5.499e+11 -1.331e+12 -5.513e+11 -1.184e+12 -5.434e+11 -1.047e+12 -5.275e+11 -9.182e+11 -5.050e+11 -7.989e+11 -4.770e+11 -6.890e+11 -4.448e+11 -5.882e+11 -4.094e+11 -4.966e+11 -3.719e+11 -4.141e+11 -3.333e+11 -3.404e+11 -2.945e+11 -2.753e+11 -2.563e+11 -2.184e+11 -2.193e+11 -1.694e+11 -1.843e+11 -1.278e+11 -1.517e+11 -9.319e+10 -1.220e+11 -6.497e+10 -9.534e+10 -4.263e+10 -7.212e+10 -2.559e+10 -5.240e+10 -1.321e+10 -3.621e+10 -4.856e+09 -2.356e+10 2.573e+08 -1.432e+10 3.181e+09 -8.247e+09 5.422e+09 -4.651e+09 8.481e+09 -2.086e+09 1.299e+10 9.288e+08 1.877e+10 5.138e+09 2.542e+10 1.066e+10 3.256e+10 1.732e+10 3.985e+10 2.487e+10 4.700e+10 3.301e+10 5.379e+10 4.146e+10 6.001e+10 4.992e+10 6.552e+10 5.817e+10 7.022e+10 6.597e+10 7.402e+10 7.314e+10 7.688e+10 7.952e+10 7.878e+10 8.499e+10 7.972e+10 8.945e+10 7.974e+10 9.286e+10 7.889e+10 9.517e+10 7.722e+10 9.641e+10 7.482e+10 9.657e+10 7.177e+10 9.573e+10 6.816e+10 9.393e+10 6.409e+10 9.128e+10 5.965e+10 8.784e+10 5.497e+10 8.375e+10 5.012e+10 7.909e+10 4.519e+10 7.400e+10 4.029e+10 6.857e+10 3.550e+10 6.293e+10 3.086e+10 5.718e+10 2.647e+10 5.143e+10 2.236e+10 4.577e+10 1.857e+10 4.027e+10 1.515e+10 3.503e+10 1.209e+10 3.009e+10 9.418e+09 2.551e+10 7.124e+09 2.132e+10 5.197e+09 1.755e+10 3.615e+09 1.421e+10 2.355e+09 1.130e+10 1.384e+09 8.810e+09 6.644e+08 6.720e+09 1.603e+08 5.008e+09 -1.680e+08 3.635e+09 -3.587e+08 2.563e+09 -4.561e+08 1.756e+09 -4.751e+08 1.163e+09 -4.469e+08 7.412e+08 -3.974e+08 4.533e+08 -3.398e+08 2.620e+08 -2.806e+08 1.376e+08 -2.210e+08 5.908e+07 -1.609e+08 1.313e+07 -1.017e+08 -8.362e+06 -4.868e+07 -1.187e+07 -1.129e+07 -5.503e+06 3.465e+06 1.736e+05 4.102e+07 1.257e+07 1.425e+08 6.171e+07 3.274e+08 1.714e+08 6.147e+08 3.677e+08 1.023e+09 6.788e+08 1.571e+09 1.134e+09 2.273e+09 1.760e+09 3.142e+09 2.585e+09 4.189e+09 3.634e+09 5.420e+09 4.925e+09 6.840e+09 6.476e+09 8.451e+09 8.300e+09 1.025e+10 1.040e+10 1.223e+10 1.278e+10 1.438e+10 1.543e+10 1.669e+10 1.835e+10 1.914e+10 2.151e+10 2.173e+10 2.490e+10 2.441e+10 2.849e+10 2.718e+10 3.226e+10 3.001e+10 3.616e+10 3.287e+10 4.016e+10 3.572e+10 4.423e+10 3.855e+10 4.832e+10 4.132e+10 5.238e+10 4.399e+10 5.638e+10 4.653e+10 6.028e+10 4.892e+10 6.402e+10 5.113e+10 6.758e+10 5.313e+10 7.091e+10 5.489e+10 7.398e+10 5.638e+10 7.674e+10 5.759e+10 7.916e+10 5.850e+10 8.122e+10 5.909e+10 8.288e+10 5.935e+10 8.414e+10 5.929e+10 8.496e+10 5.891e+10 8.534e+10 5.821e+10 8.528e+10 5.720e+10 8.478e+10 5.590e+10 8.384e+10 5.433e+10 8.248e+10 5.252e+10 8.071e+10 5.049e+10 7.855e+10 4.828e+10 7.604e+10 4.591e+10 7.320e+10 4.342e+10 7.008e+10 4.084e+10 6.670e+10 3.821e+10 6.313e+10 3.556e+10 5.939e+10 3.291e+10 5.553e+10 3.030e+10 5.161e+10 2.775e+10 4.766e+10 2.529e+10 4.372e+10 2.292e+10 3.985e+10 2.068e+10 3.607e+10 1.856e+10 3.242e+10 1.658e+10 2.892e+10 1.474e+10 2.561e+10 1.305e+10 2.251e+10 1.151e+10 1.962e+10 1.010e+10 1.696e+10 8.838e+09 1.454e+10 7.706e+09 1.236e+10 6.698e+09 1.041e+10 5.808e+09 8.680e+09 5.027e+09 7.173e+09 4.345e+09 5.870e+09 3.754e+09 4.757e+09 3.246e+09 3.818e+09 2.812e+09 3.035e+09 2.446e+09 2.390e+09 2.140e+09 1.866e+09 1.887e+09 1.444e+09 1.682e+09 1.109e+09 1.520e+09 8.456e+08 1.395e+09 6.391e+08 1.302e+09 4.780e+08 1.237e+09 3.526e+08 1.196e+09 2.548e+08 1.175e+09 1.792e+08 1.170e+09 1.220e+08 1.179e+09 8.045e+07 1.200e+09 5.320e+07 1.233e+09 3.942e+07 1.275e+09 3.874e+07 1.328e+09 5.113e+07 1.390e+09 7.672e+07 1.463e+09 1.159e+08 1.547e+09 1.693e+08 1.642e+09 2.374e+08 1.748e+09 3.214e+08 1.866e+09 4.220e+08 1.996e+09 5.403e+08 2.138e+09 6.772e+08 2.290e+09 8.335e+08 2.451e+09 1.010e+09 2.620e+09 1.206e+09 2.795e+09 1.421e+09 2.972e+09 1.656e+09 3.150e+09 1.907e+09 3.325e+09 2.174e+09 3.494e+09 2.453e+09 3.654e+09 2.742e+09 3.800e+09 3.036e+09 3.929e+09 3.330e+09 4.039e+09 3.621e+09 4.125e+09 3.904e+09 4.187e+09 4.172e+09 4.221e+09 4.421e+09 4.227e+09 4.646e+09 4.202e+09 4.842e+09 4.148e+09 5.006e+09 4.063e+09 5.135e+09 3.949e+09 5.224e+09 3.808e+09 5.273e+09 3.642e+09 5.280e+09 3.454e+09 5.245e+09 3.246e+09 5.168e+09 3.022e+09 5.051e+09 2.787e+09 4.897e+09 2.542e+09 4.708e+09 2.294e+09 4.489e+09 2.046e+09 4.244e+09 1.800e+09 3.977e+09 1.561e+09 3.693e+09 1.333e+09 3.399e+09 1.116e+09 3.098e+09 9.152e+08 2.797e+09 7.307e+08 2.499e+09 5.642e+08 2.208e+09 4.166e+08 1.930e+09 2.884e+08 1.667e+09 1.794e+08 1.421e+09 8.896e+07 1.194e+09 1.631e+07 9.894e+08 -3.996e+07 8.063e+08 -8.139e+07 6.455e+08 -1.098e+08 5.068e+08 -1.274e+08 3.892e+08 -1.363e+08 2.916e+08 -1.388e+08 2.122e+08 -1.372e+08 1.488e+08 -1.337e+08 9.865e+07 -1.300e+08 5.873e+07 -1.273e+08 2.568e+07 -1.257e+08 -3.611e+06 -1.249e+08 -3.180e+07 -1.239e+08 -6.084e+07 -1.213e+08 -9.198e+07 -1.158e+08 -1.260e+08 -1.062e+08 -1.635e+08 -9.121e+07 -2.051e+08 -6.926e+07 -2.515e+08 -3.855e+07 -3.037e+08 3.234e+06 -3.629e+08 5.900e+07 -4.302e+08 1.325e+08 -5.070e+08 2.279e+08 -5.946e+08 3.504e+08 -6.941e+08 5.058e+08 -8.064e+08 7.003e+08 -9.323e+08 9.405e+08 -1.072e+09 1.234e+09 -1.227e+09 1.588e+09 -1.396e+09 2.009e+09 -1.581e+09 2.507e+09 -1.780e+09 3.088e+09 -1.995e+09 3.759e+09 -2.224e+09 4.529e+09 -2.469e+09 5.404e+09 -2.729e+09 6.389e+09 -3.005e+09 7.490e+09 -3.296e+09 8.713e+09 -3.605e+09 1.006e+10 -3.930e+09 1.154e+10 -4.273e+09 1.314e+10 -4.634e+09 1.488e+10 -5.016e+09 1.674e+10 -5.418e+09 1.873e+10 -5.842e+09 2.085e+10 -6.289e+09 2.309e+10 -6.759e+09 2.544e+10 -7.254e+09 2.790e+10 -7.772e+09 3.046e+10 -8.316e+09 3.311e+10 -8.884e+09 3.584e+10 -9.474e+09 3.864e+10 -1.009e+10 4.150e+10 -1.072e+10 4.441e+10 -1.136e+10 4.735e+10 -1.202e+10 5.032e+10 -1.268e+10 5.329e+10 -1.334e+10 5.626e+10 -1.400e+10 5.921e+10 -1.465e+10 6.213e+10 -1.528e+10 6.500e+10 -1.587e+10 6.781e+10 -1.643e+10 7.055e+10 -1.694e+10 7.319e+10 -1.740e+10 7.574e+10 -1.778e+10 7.818e+10 -1.808e+10 8.049e+10 -1.829e+10 8.266e+10 -1.840e+10 8.467e+10 -1.839e+10 8.652e+10 -1.826e+10 8.820e+10 -1.800e+10 8.968e+10 -1.759e+10 9.096e+10 -1.702e+10 9.203e+10 -1.630e+10 9.287e+10 -1.541e+10 9.347e+10 -1.435e+10 9.383e+10 -1.311e+10 9.393e+10 -1.170e+10 9.376e+10 -1.011e+10 9.333e+10 -8.354e+09 9.263e+10 -6.430e+09 9.165e+10 -4.345e+09 9.040e+10 -2.107e+09 8.888e+10 2.686e+08 8.711e+10 2.772e+09 8.508e+10 5.393e+09 8.282e+10 8.113e+09 8.036e+10 1.092e+10 7.770e+10 1.380e+10 7.489e+10 1.675e+10 7.194e+10 1.975e+10 6.890e+10 2.281e+10 6.579e+10 2.593e+10 6.265e+10 2.913e+10 5.951e+10 3.242e+10 5.637e+10 3.584e+10 5.326e+10 3.941e+10 5.018e+10 4.319e+10 4.711e+10 4.723e+10 4.405e+10 5.157e+10 4.094e+10 5.629e+10 3.776e+10 6.144e+10 3.443e+10 6.705e+10 3.090e+10 7.318e+10 2.710e+10 7.984e+10 2.295e+10 8.705e+10 1.839e+10 9.481e+10 1.335e+10 1.031e+11 7.785e+09 1.119e+11 1.636e+09 1.212e+11 -5.129e+09 1.309e+11 -1.254e+10 1.410e+11 -2.062e+10 1.514e+11 -2.937e+10 1.619e+11 -3.880e+10 1.727e+11 -4.889e+10 1.835e+11 -5.964e+10 1.942e+11 -7.101e+10 2.049e+11 -8.299e+10 2.153e+11 -9.553e+10 2.255e+11 -1.086e+11 2.353e+11 -1.221e+11 2.446e+11 -1.361e+11 2.534e+11 -1.504e+11 2.616e+11 -1.651e+11 2.690e+11 -1.801e+11 2.757e+11 -1.952e+11 2.816e+11 -2.105e+11 2.866e+11 -2.259e+11 2.906e+11 -2.413e+11 2.937e+11 -2.566e+11 2.957e+11 -2.718e+11 2.966e+11 -2.868e+11 2.964e+11 -3.015e+11 2.951e+11 -3.159e+11 2.926e+11 -3.299e+11 2.890e+11 -3.434e+11 2.843e+11 -3.563e+11 2.783e+11 -3.686e+11 2.712e+11 -3.801e+11 2.629e+11 -3.909e+11 2.535e+11 -4.008e+11 2.431e+11 -4.097e+11 2.316e+11 -4.178e+11 2.192e+11 -4.247e+11 2.058e+11 -4.306e+11 1.917e+11 -4.354e+11 1.767e+11 -4.390e+11 1.611e+11 -4.414e+11 1.450e+11 -4.427e+11 1.283e+11 -4.427e+11 1.113e+11 -4.415e+11 9.394e+10 -4.391e+11 7.642e+10 0.005 -55.605 -54.088 -52.570 -51.052 -49.565 -48.130 -46.740 -45.390 -44.079 -42.806 -41.570 -40.372 -39.213 -38.094 -37.014 -35.975 -34.975 -34.016 -33.096 -32.215 -31.372 -30.568 -29.800 -29.069 -28.374 -27.714 -27.088 -26.496 -25.937 -25.410 -24.915 -24.451 -24.018 -23.615 -23.241 -22.896 -22.581 -22.294 -22.035 -21.805 -21.603 -21.429 -21.282 -21.163 -21.072 -21.008 -20.972 -20.963 -20.982 -21.029 -21.104 -21.206 -21.338 -21.497 -21.686 -21.905 -22.153 -22.432 -22.741 -23.082 -23.455 -23.862 -24.302 -24.777 -25.288 -25.837 -26.423 -27.051 -27.720 -28.433 -29.193 -30.002 -30.864 -31.783 -32.763 -33.810 -34.932 -36.138 -37.438 -38.848 -40.384 -42.070 -43.929 -45.981 -48.207 -50.457 -52.282 -53.045 -52.619 -51.552 -50.402 -49.406 -48.620 -48.038 -47.642 -47.416 -47.341 -47.395 -47.535 -47.674 -47.648 -47.232 -46.252 -44.727 -42.849 -40.829 -38.805 -36.847 -34.981 -33.212 -31.535 -29.944 -28.433 -26.995 -25.624 -24.314 -23.060 -21.860 -20.710 -19.606 -18.546 -17.528 -16.551 -15.611 -14.708 -13.840 -13.006 -12.204 -11.434 -10.695 -9.985 -9.304 -8.651 -8.026 -7.428 -6.856 -6.309 -5.789 -5.293 -4.822 -4.374 -3.951 -3.552 -3.175 -2.822 -2.492 -2.185 -1.900 -1.638 -1.399 -1.182 -0.988 -0.816 -0.667 -0.541 -0.437 -0.357 -0.300 -0.267 -0.257 -0.272 -0.311 -0.376 -0.466 -0.582 -0.725 -0.896 -1.095 -1.324 -1.583 -1.874 -2.198 -2.556 -2.950 -3.382 -3.855 -4.370 -4.931 -5.540 -6.201 -6.920 -7.700 -8.548 -9.471 -10.478 -11.580 -12.788 -14.121 -15.598 -17.248 -19.107 -21.228 -23.687 -26.601 -30.165 -34.748 -41.172 -51.203 -52.797 -51.889 -49.501 -40.910 -34.701 -30.158 -26.599 -23.680 -21.214 -19.083 -17.215 -15.555 -14.069 -12.728 -11.511 -10.401 -9.386 -8.454 -7.598 -6.810 -6.083 -5.414 -4.797 -4.229 -3.706 -3.226 -2.786 -2.385 -2.020 -1.689 -1.391 -1.125 -0.889 -0.683 -0.506 -0.356 -0.233 -0.137 -0.066 -0.021 0.000 -0.004 -0.031 -0.083 -0.158 -0.256 -0.377 -0.521 -0.688 -0.878 -1.091 -1.326 -1.585 -1.866 -2.170 -2.497 -2.848 -3.222 -3.621 -4.043 -4.489 -4.961 -5.457 -5.979 -6.527 -7.102 -7.704 -8.334 -8.992 -9.680 -10.397 -11.146 -11.926 -12.740 -13.588 -14.472 -15.392 -16.352 -17.351 -18.394 -19.482 -20.617 -21.803 -23.043 -24.343 -25.706 -27.138 -28.648 -30.245 -31.942 -33.754 -35.705 -37.827 -40.167 -42.801 -45.864 -49.618 -54.726 -62.644 -69.049 -60.458 -56.571 -54.596 -53.534 -53.037 -52.952 -53.210 -53.774 -54.603 -55.558 -56.238 -55.982 -54.473 -52.182 -49.736 -47.422 -45.306 -43.381 -41.622 -40.003 -38.504 -37.110 -35.807 -34.584 -33.435 -32.353 -31.332 -30.367 -29.456 -28.595 -27.782 -27.013 -26.288 -25.604 -24.959 -24.352 -23.783 -23.249 -22.749 -22.283 -21.850 -21.448 -21.078 -20.738 -20.428 -20.147 -19.895 -19.671 -19.475 -19.306 -19.164 -19.049 -18.960 -18.897 -18.860 -18.849 -18.863 -18.903 -18.968 -19.059 -19.174 -19.315 -19.482 -19.673 -19.890 -20.132 -20.400 -20.693 -21.012 -21.357 -21.728 -22.124 -22.548 -22.998 -23.476 -23.981 -24.514 -25.076 -25.666 -26.285 -26.933 -27.612 -28.321 -29.060 -29.830 -30.632 -31.465 -32.329 -33.225 -34.152 -35.110 -36.097 -37.112 -38.153 -39.217 -40.300 -41.397 -42.501 -43.602 -44.691 -45.770 -46.849 -47.928 0 1 1.0 1 N1 VV 17.14 22.7 0.05 2.080e+09 -4.638e+09 8.978e+09 -8.948e+09 2.291e+10 -1.565e+10 4.673e+10 -2.467e+10 8.342e+10 -3.600e+10 1.362e+11 -4.952e+10 2.088e+11 -6.507e+10 3.053e+11 -8.238e+10 4.296e+11 -1.010e+11 5.866e+11 -1.205e+11 7.812e+11 -1.402e+11 1.018e+12 -1.593e+11 1.303e+12 -1.769e+11 1.642e+12 -1.919e+11 2.039e+12 -2.031e+11 2.504e+12 -2.090e+11 3.040e+12 -2.080e+11 3.653e+12 -1.986e+11 4.349e+12 -1.786e+11 5.135e+12 -1.462e+11 6.016e+12 -9.903e+10 6.998e+12 -3.450e+10 8.087e+12 4.992e+10 9.288e+12 1.568e+11 1.060e+13 2.890e+11 1.204e+13 4.496e+11 1.361e+13 6.416e+11 1.530e+13 8.680e+11 1.713e+13 1.132e+12 1.909e+13 1.437e+12 2.119e+13 1.786e+12 2.343e+13 2.181e+12 2.581e+13 2.626e+12 2.832e+13 3.123e+12 3.098e+13 3.675e+12 3.376e+13 4.283e+12 3.668e+13 4.949e+12 3.973e+13 5.675e+12 4.290e+13 6.461e+12 4.618e+13 7.307e+12 4.957e+13 8.213e+12 5.307e+13 9.180e+12 5.666e+13 1.020e+13 6.034e+13 1.128e+13 6.410e+13 1.242e+13 6.792e+13 1.360e+13 7.180e+13 1.484e+13 7.572e+13 1.611e+13 7.968e+13 1.743e+13 8.366e+13 1.879e+13 8.765e+13 2.017e+13 9.165e+13 2.158e+13 9.564e+13 2.302e+13 9.961e+13 2.447e+13 1.035e+14 2.594e+13 1.074e+14 2.741e+13 1.113e+14 2.889e+13 1.151e+14 3.036e+13 1.188e+14 3.183e+13 1.225e+14 3.330e+13 1.260e+14 3.475e+13 1.295e+14 3.620e+13 1.330e+14 3.763e+13 1.363e+14 3.904e+13 1.395e+14 4.043e+13 1.426e+14 4.180e+13 1.456e+14 4.314e+13 1.484e+14 4.445e+13 1.512e+14 4.573e+13 1.538e+14 4.698e+13 1.563e+14 4.820e+13 1.587e+14 4.938e+13 1.610e+14 5.053e+13 1.631e+14 5.163e+13 1.652e+14 5.270e+13 1.671e+14 5.374e+13 1.689e+14 5.473e+13 1.706e+14 5.568e+13 1.722e+14 5.659e+13 1.737e+14 5.745e+13 1.751e+14 5.828e+13 1.764e+14 5.906e+13 1.776e+14 5.980e+13 1.788e+14 6.050e+13 1.799e+14 6.115e+13 1.810e+14 6.177e+13 1.820e+14 6.236e+13 1.829e+14 6.291e+13 1.839e+14 6.343e+13 1.848e+14 6.392e+13 1.858e+14 6.438e+13 1.867e+14 6.483e+13 1.876e+14 6.525e+13 1.886e+14 6.567e+13 1.896e+14 6.608e+13 1.906e+14 6.648e+13 1.916e+14 6.689e+13 1.927e+14 6.730e+13 1.939e+14 6.773e+13 1.951e+14 6.817e+13 1.963e+14 6.864e+13 1.977e+14 6.915e+13 1.991e+14 6.969e+13 2.005e+14 7.027e+13 2.020e+14 7.089e+13 2.036e+14 7.155e+13 2.052e+14 7.225e+13 2.069e+14 7.301e+13 2.087e+14 7.381e+13 2.105e+14 7.467e+13 2.123e+14 7.559e+13 2.142e+14 7.656e+13 2.161e+14 7.758e+13 2.180e+14 7.867e+13 2.200e+14 7.981e+13 2.220e+14 8.101e+13 2.240e+14 8.227e+13 2.260e+14 8.358e+13 2.280e+14 8.495e+13 2.300e+14 8.638e+13 2.320e+14 8.785e+13 2.340e+14 8.939e+13 2.360e+14 9.097e+13 2.379e+14 9.260e+13 2.398e+14 9.428e+13 2.417e+14 9.601e+13 2.435e+14 9.779e+13 2.452e+14 9.960e+13 2.469e+14 1.015e+14 2.485e+14 1.034e+14 2.500e+14 1.053e+14 2.514e+14 1.072e+14 2.527e+14 1.092e+14 2.539e+14 1.112e+14 2.549e+14 1.132e+14 2.558e+14 1.153e+14 2.565e+14 1.173e+14 2.571e+14 1.193e+14 2.574e+14 1.213e+14 2.576e+14 1.233e+14 2.575e+14 1.252e+14 2.573e+14 1.271e+14 2.568e+14 1.290e+14 2.560e+14 1.308e+14 2.550e+14 1.325e+14 2.537e+14 1.341e+14 2.522e+14 1.356e+14 2.503e+14 1.370e+14 2.482e+14 1.383e+14 2.457e+14 1.394e+14 2.430e+14 1.404e+14 2.399e+14 1.412e+14 2.366e+14 1.418e+14 2.329e+14 1.422e+14 2.290e+14 1.425e+14 2.248e+14 1.425e+14 2.203e+14 1.424e+14 2.156e+14 1.420e+14 2.106e+14 1.414e+14 2.054e+14 1.406e+14 2.000e+14 1.396e+14 1.944e+14 1.384e+14 1.886e+14 1.370e+14 1.827e+14 1.354e+14 1.766e+14 1.335e+14 1.704e+14 1.315e+14 1.642e+14 1.293e+14 1.578e+14 1.270e+14 1.514e+14 1.245e+14 1.450e+14 1.218e+14 1.386e+14 1.190e+14 1.321e+14 1.161e+14 1.257e+14 1.131e+14 1.194e+14 1.099e+14 1.131e+14 1.067e+14 1.069e+14 1.034e+14 1.008e+14 1.000e+14 9.483e+13 9.661e+13 8.897e+13 9.314e+13 8.326e+13 8.965e+13 7.769e+13 8.612e+13 7.229e+13 8.258e+13 6.706e+13 7.903e+13 6.202e+13 7.549e+13 5.717e+13 7.198e+13 5.252e+13 6.849e+13 4.807e+13 6.504e+13 4.384e+13 6.164e+13 3.981e+13 5.830e+13 3.600e+13 5.502e+13 3.241e+13 5.181e+13 2.903e+13 4.868e+13 2.587e+13 4.564e+13 2.292e+13 4.269e+13 2.018e+13 3.983e+13 1.764e+13 3.708e+13 1.531e+13 3.444e+13 1.317e+13 3.191e+13 1.122e+13 2.949e+13 9.450e+12 2.719e+13 7.850e+12 2.501e+13 6.413e+12 2.295e+13 5.132e+12 2.101e+13 3.994e+12 1.919e+13 2.990e+12 1.749e+13 2.112e+12 1.590e+13 1.348e+12 1.443e+13 6.886e+11 1.307e+13 1.249e+11 1.182e+13 -3.532e+11 1.067e+13 -7.545e+11 9.614e+12 -1.087e+12 8.651e+12 -1.360e+12 7.775e+12 -1.580e+12 6.978e+12 -1.753e+12 6.256e+12 -1.887e+12 5.603e+12 -1.986e+12 5.012e+12 -2.056e+12 4.479e+12 -2.100e+12 3.998e+12 -2.123e+12 3.564e+12 -2.126e+12 3.172e+12 -2.114e+12 2.818e+12 -2.088e+12 2.498e+12 -2.050e+12 2.209e+12 -2.000e+12 1.947e+12 -1.941e+12 1.710e+12 -1.874e+12 1.495e+12 -1.800e+12 1.300e+12 -1.719e+12 1.124e+12 -1.632e+12 9.658e+11 -1.541e+12 8.229e+11 -1.447e+12 6.948e+11 -1.349e+12 5.803e+11 -1.250e+12 4.785e+11 -1.151e+12 3.888e+11 -1.051e+12 3.102e+11 -9.527e+11 2.419e+11 -8.563e+11 1.833e+11 -7.626e+11 1.337e+11 -6.726e+11 9.227e+10 -5.868e+11 5.835e+10 -5.060e+11 3.121e+10 -4.306e+11 1.010e+10 -3.610e+11 -5.662e+09 -2.977e+11 -1.678e+10 -2.408e+11 -2.396e+10 -1.904e+11 -2.785e+10 -1.466e+11 -2.907e+10 -1.092e+11 -2.823e+10 -7.802e+10 -2.587e+10 -5.284e+10 -2.250e+10 -3.327e+10 -1.860e+10 -1.887e+10 -1.462e+10 -9.059e+09 -1.103e+10 -2.906e+09 -8.357e+09 1.157e+09 -7.090e+09 5.213e+09 -7.120e+09 1.072e+10 -7.726e+09 1.807e+10 -8.211e+09 2.701e+10 -8.212e+09 3.718e+10 -7.593e+09 4.814e+10 -6.339e+09 5.948e+10 -4.490e+09 7.084e+10 -2.119e+09 8.186e+10 6.756e+08 9.225e+10 3.790e+09 1.018e+11 7.118e+09 1.102e+11 1.055e+10 1.175e+11 1.398e+10 1.234e+11 1.733e+10 1.278e+11 2.050e+10 1.309e+11 2.343e+10 1.324e+11 2.606e+10 1.326e+11 2.835e+10 1.314e+11 3.025e+10 1.289e+11 3.177e+10 1.253e+11 3.287e+10 1.207e+11 3.357e+10 1.151e+11 3.387e+10 1.088e+11 3.378e+10 1.018e+11 3.334e+10 9.446e+10 3.257e+10 8.677e+10 3.150e+10 7.893e+10 3.016e+10 7.105e+10 2.860e+10 6.329e+10 2.685e+10 5.576e+10 2.495e+10 4.854e+10 2.295e+10 4.173e+10 2.088e+10 3.541e+10 1.879e+10 2.961e+10 1.670e+10 2.438e+10 1.466e+10 1.973e+10 1.270e+10 1.567e+10 1.084e+10 1.219e+10 9.116e+09 9.254e+09 7.534e+09 6.836e+09 6.111e+09 4.894e+09 4.858e+09 3.374e+09 3.776e+09 2.220e+09 2.863e+09 1.394e+09 2.100e+09 7.858e+08 1.525e+09 3.970e+08 1.058e+09 1.575e+08 7.100e+08 2.296e+07 4.606e+08 -4.263e+07 2.882e+08 -6.609e+07 1.728e+08 -6.512e+07 9.674e+07 -5.007e+07 4.721e+07 -2.823e+07 1.696e+07 -7.970e+06 2.262e+06 1.949e+06 -1.359e+06 2.817e+07 -1.030e+07 1.093e+08 -2.409e+07 2.726e+08 -3.422e+07 5.479e+08 -2.932e+07 9.672e+08 4.609e+06 1.564e+09 8.370e+07 2.368e+09 2.251e+08 3.410e+09 4.468e+08 4.719e+09 7.666e+08 6.317e+09 1.200e+09 8.222e+09 1.763e+09 1.045e+10 2.469e+09 1.301e+10 3.325e+09 1.590e+10 4.338e+09 1.913e+10 5.514e+09 2.268e+10 6.850e+09 2.653e+10 8.345e+09 3.067e+10 9.993e+09 3.506e+10 1.178e+10 3.968e+10 1.371e+10 4.448e+10 1.575e+10 4.943e+10 1.790e+10 5.447e+10 2.013e+10 5.956e+10 2.244e+10 6.464e+10 2.480e+10 6.965e+10 2.720e+10 7.455e+10 2.962e+10 7.926e+10 3.203e+10 8.375e+10 3.442e+10 8.795e+10 3.677e+10 9.182e+10 3.906e+10 9.529e+10 4.126e+10 9.833e+10 4.336e+10 1.009e+11 4.533e+10 1.029e+11 4.716e+10 1.045e+11 4.881e+10 1.054e+11 5.027e+10 1.058e+11 5.151e+10 1.056e+11 5.252e+10 1.049e+11 5.328e+10 1.036e+11 5.377e+10 1.017e+11 5.397e+10 9.938e+10 5.388e+10 9.658e+10 5.350e+10 9.335e+10 5.281e+10 8.974e+10 5.182e+10 8.580e+10 5.055e+10 8.159e+10 4.900e+10 7.716e+10 4.720e+10 7.258e+10 4.516e+10 6.789e+10 4.291e+10 6.315e+10 4.050e+10 5.842e+10 3.794e+10 5.374e+10 3.527e+10 4.916e+10 3.254e+10 4.471e+10 2.978e+10 4.044e+10 2.702e+10 3.637e+10 2.431e+10 3.252e+10 2.168e+10 2.891e+10 1.914e+10 2.556e+10 1.674e+10 2.247e+10 1.448e+10 1.965e+10 1.239e+10 1.708e+10 1.048e+10 1.478e+10 8.747e+09 1.272e+10 7.200e+09 1.090e+10 5.838e+09 9.300e+09 4.651e+09 7.912e+09 3.633e+09 6.717e+09 2.773e+09 5.699e+09 2.054e+09 4.840e+09 1.462e+09 4.125e+09 9.804e+08 3.537e+09 5.924e+08 3.060e+09 2.818e+08 2.682e+09 3.322e+07 2.386e+09 -1.678e+08 2.160e+09 -3.331e+08 1.994e+09 -4.726e+08 1.876e+09 -5.935e+08 1.798e+09 -7.005e+08 1.754e+09 -7.963e+08 1.738e+09 -8.821e+08 1.746e+09 -9.580e+08 1.775e+09 -1.023e+09 1.823e+09 -1.078e+09 1.890e+09 -1.120e+09 1.973e+09 -1.149e+09 2.073e+09 -1.164e+09 2.189e+09 -1.165e+09 2.320e+09 -1.150e+09 2.466e+09 -1.119e+09 2.627e+09 -1.072e+09 2.803e+09 -1.007e+09 2.992e+09 -9.225e+08 3.194e+09 -8.185e+08 3.408e+09 -6.938e+08 3.632e+09 -5.469e+08 3.865e+09 -3.772e+08 4.104e+09 -1.839e+08 4.346e+09 3.361e+07 4.589e+09 2.751e+08 4.830e+09 5.399e+08 5.064e+09 8.272e+08 5.287e+09 1.135e+09 5.496e+09 1.460e+09 5.686e+09 1.801e+09 5.853e+09 2.152e+09 5.992e+09 2.508e+09 6.101e+09 2.863e+09 6.176e+09 3.213e+09 6.214e+09 3.551e+09 6.213e+09 3.872e+09 6.172e+09 4.169e+09 6.091e+09 4.436e+09 5.968e+09 4.669e+09 5.806e+09 4.862e+09 5.607e+09 5.012e+09 5.372e+09 5.116e+09 5.105e+09 5.172e+09 4.811e+09 5.180e+09 4.493e+09 5.140e+09 4.156e+09 5.054e+09 3.806e+09 4.924e+09 3.447e+09 4.755e+09 3.086e+09 4.549e+09 2.726e+09 4.313e+09 2.374e+09 4.052e+09 2.033e+09 3.770e+09 1.708e+09 3.475e+09 1.403e+09 3.170e+09 1.121e+09 2.863e+09 8.636e+08 2.557e+09 6.334e+08 2.258e+09 4.313e+08 1.969e+09 2.578e+08 1.695e+09 1.123e+08 1.439e+09 -6.259e+06 1.203e+09 -9.952e+07 9.883e+08 -1.702e+08 7.971e+08 -2.212e+08 6.299e+08 -2.567e+08 4.861e+08 -2.809e+08 3.644e+08 -2.988e+08 2.620e+08 -3.148e+08 1.748e+08 -3.331e+08 9.664e+07 -3.556e+08 2.086e+07 -3.827e+08 -5.944e+07 -4.128e+08 -1.504e+08 -4.429e+08 -2.567e+08 -4.695e+08 -3.819e+08 -4.886e+08 -5.285e+08 -4.961e+08 -6.982e+08 -4.877e+08 -8.923e+08 -4.592e+08 -1.112e+09 -4.059e+08 -1.358e+09 -3.232e+08 -1.630e+09 -2.061e+08 -1.930e+09 -4.929e+07 -2.258e+09 1.526e+08 -2.613e+09 4.055e+08 -2.996e+09 7.153e+08 -3.406e+09 1.088e+09 -3.842e+09 1.530e+09 -4.304e+09 2.048e+09 -4.791e+09 2.647e+09 -5.301e+09 3.334e+09 -5.834e+09 4.115e+09 -6.387e+09 4.996e+09 -6.959e+09 5.981e+09 -7.550e+09 7.076e+09 -8.157e+09 8.284e+09 -8.780e+09 9.609e+09 -9.417e+09 1.105e+10 -1.007e+10 1.262e+10 -1.073e+10 1.430e+10 -1.141e+10 1.611e+10 -1.209e+10 1.804e+10 -1.279e+10 2.008e+10 -1.350e+10 2.223e+10 -1.422e+10 2.449e+10 -1.495e+10 2.684e+10 -1.569e+10 2.929e+10 -1.643e+10 3.181e+10 -1.718e+10 3.440e+10 -1.794e+10 3.704e+10 -1.869e+10 3.972e+10 -1.943e+10 4.243e+10 -2.017e+10 4.515e+10 -2.089e+10 4.786e+10 -2.158e+10 5.055e+10 -2.224e+10 5.320e+10 -2.286e+10 5.579e+10 -2.343e+10 5.830e+10 -2.395e+10 6.072e+10 -2.441e+10 6.304e+10 -2.479e+10 6.524e+10 -2.509e+10 6.730e+10 -2.530e+10 6.922e+10 -2.541e+10 7.098e+10 -2.542e+10 7.258e+10 -2.533e+10 7.401e+10 -2.513e+10 7.525e+10 -2.481e+10 7.632e+10 -2.437e+10 7.720e+10 -2.382e+10 7.789e+10 -2.316e+10 7.839e+10 -2.238e+10 7.870e+10 -2.148e+10 7.883e+10 -2.048e+10 7.878e+10 -1.937e+10 7.854e+10 -1.816e+10 7.813e+10 -1.684e+10 7.754e+10 -1.544e+10 7.679e+10 -1.394e+10 7.587e+10 -1.236e+10 7.479e+10 -1.069e+10 7.357e+10 -8.958e+09 7.221e+10 -7.150e+09 7.070e+10 -5.275e+09 6.907e+10 -3.342e+09 6.733e+10 -1.352e+09 6.547e+10 6.907e+08 6.352e+10 2.779e+09 6.149e+10 4.911e+09 5.939e+10 7.087e+09 5.724e+10 9.301e+09 5.506e+10 1.156e+10 5.286e+10 1.386e+10 5.067e+10 1.622e+10 4.851e+10 1.866e+10 4.639e+10 2.118e+10 4.431e+10 2.382e+10 4.229e+10 2.660e+10 4.032e+10 2.957e+10 3.840e+10 3.275e+10 3.652e+10 3.621e+10 3.464e+10 3.998e+10 3.273e+10 4.412e+10 3.076e+10 4.866e+10 2.867e+10 5.364e+10 2.641e+10 5.910e+10 2.393e+10 6.504e+10 2.117e+10 7.149e+10 1.807e+10 7.843e+10 1.460e+10 8.586e+10 1.070e+10 9.376e+10 6.335e+09 1.021e+11 1.481e+09 1.108e+11 -3.897e+09 1.199e+11 -9.814e+09 1.293e+11 -1.628e+10 1.389e+11 -2.331e+10 1.487e+11 -3.090e+10 1.587e+11 -3.905e+10 1.688e+11 -4.775e+10 1.789e+11 -5.700e+10 1.889e+11 -6.677e+10 1.989e+11 -7.706e+10 2.087e+11 -8.784e+10 2.183e+11 -9.910e+10 2.277e+11 -1.108e+11 2.368e+11 -1.229e+11 2.455e+11 -1.355e+11 2.538e+11 -1.484e+11 2.617e+11 -1.616e+11 2.691e+11 -1.752e+11 2.759e+11 -1.890e+11 2.821e+11 -2.031e+11 2.877e+11 -2.173e+11 2.925e+11 -2.317e+11 2.966e+11 -2.461e+11 3.000e+11 -2.606e+11 3.024e+11 -2.750e+11 3.039e+11 -2.894e+11 3.045e+11 -3.035e+11 3.040e+11 -3.174e+11 3.025e+11 -3.310e+11 2.998e+11 -3.442e+11 2.960e+11 -3.569e+11 2.911e+11 -3.691e+11 2.850e+11 -3.805e+11 2.777e+11 -3.912e+11 2.693e+11 -4.012e+11 2.597e+11 -4.101e+11 2.491e+11 -4.182e+11 2.373e+11 -4.251e+11 2.246e+11 -4.310e+11 2.109e+11 -4.357e+11 1.964e+11 -4.392e+11 1.811e+11 0.005 -55.173 -53.861 -52.550 -51.239 -49.914 -48.572 -47.228 -45.896 -44.582 -43.292 -42.032 -40.806 -39.615 -38.462 -37.348 -36.274 -35.240 -34.247 -33.294 -32.381 -31.507 -30.672 -29.875 -29.115 -28.392 -27.704 -27.051 -26.432 -25.846 -25.294 -24.773 -24.284 -23.826 -23.398 -22.999 -22.630 -22.290 -21.978 -21.695 -21.440 -21.213 -21.013 -20.840 -20.695 -20.577 -20.486 -20.422 -20.385 -20.374 -20.391 -20.434 -20.504 -20.602 -20.727 -20.879 -21.060 -21.268 -21.504 -21.770 -22.064 -22.387 -22.741 -23.125 -23.540 -23.986 -24.464 -24.976 -25.521 -26.100 -26.715 -27.366 -28.055 -28.783 -29.551 -30.361 -31.215 -32.116 -33.066 -34.067 -35.125 -36.244 -37.429 -38.689 -40.031 -41.469 -43.018 -44.698 -46.538 -48.577 -50.871 -53.510 -56.639 -60.552 -66.008 -76.928 -76.637 -69.450 -64.159 -60.183 -56.624 -53.347 -50.337 -47.576 -45.039 -42.697 -40.521 -38.489 -36.582 -34.783 -33.081 -31.464 -29.925 -28.456 -27.051 -25.706 -24.416 -23.178 -21.989 -20.846 -19.747 -18.689 -17.671 -16.692 -15.749 -14.842 -13.969 -13.128 -12.319 -11.542 -10.794 -10.076 -9.386 -8.724 -8.089 -7.481 -6.899 -6.342 -5.811 -5.304 -4.822 -4.364 -3.930 -3.519 -3.131 -2.766 -2.425 -2.105 -1.809 -1.534 -1.282 -1.053 -0.846 -0.661 -0.498 -0.358 -0.241 -0.146 -0.075 -0.026 -0.001 0.000 -0.023 -0.070 -0.143 -0.241 -0.366 -0.517 -0.696 -0.903 -1.140 -1.407 -1.706 -2.037 -2.404 -2.806 -3.247 -3.728 -4.251 -4.821 -5.438 -6.109 -6.837 -7.626 -8.484 -9.417 -10.434 -11.545 -12.764 -14.106 -15.593 -17.252 -19.118 -21.242 -23.695 -26.584 -30.081 -34.489 -40.407 -49.268 -63.063 -57.914 -46.270 -38.594 -33.200 -29.084 -25.773 -23.014 -20.657 -18.606 -16.798 -15.188 -13.741 -12.432 -11.243 -10.157 -9.163 -8.251 -7.411 -6.638 -5.926 -5.270 -4.665 -4.108 -3.596 -3.126 -2.696 -2.304 -1.947 -1.625 -1.335 -1.077 -0.849 -0.650 -0.480 -0.337 -0.221 -0.131 -0.066 -0.027 -0.012 -0.022 -0.055 -0.112 -0.192 -0.296 -0.422 -0.571 -0.743 -0.937 -1.154 -1.394 -1.656 -1.941 -2.249 -2.579 -2.933 -3.310 -3.710 -4.135 -4.583 -5.055 -5.552 -6.074 -6.622 -7.195 -7.795 -8.421 -9.076 -9.758 -10.469 -11.209 -11.980 -12.782 -13.616 -14.483 -15.385 -16.321 -17.294 -18.304 -19.354 -20.445 -21.579 -22.757 -23.982 -25.255 -26.579 -27.957 -29.392 -30.885 -32.441 -34.062 -35.747 -37.495 -39.298 -41.137 -42.975 -44.742 -46.336 -47.639 -48.557 -49.084 -49.293 -49.294 -49.176 -48.991 -48.755 -48.460 -48.085 -47.601 -46.987 -46.230 -45.337 -44.326 -43.226 -42.069 -40.882 -39.687 -38.503 -37.340 -36.207 -35.110 -34.051 -33.032 -32.055 -31.119 -30.224 -29.371 -28.557 -27.782 -27.046 -26.348 -25.686 -25.060 -24.470 -23.913 -23.390 -22.900 -22.442 -22.015 -21.619 -21.253 -20.917 -20.610 -20.331 -20.081 -19.859 -19.664 -19.496 -19.355 -19.241 -19.153 -19.091 -19.055 -19.044 -19.060 -19.100 -19.167 -19.258 -19.375 -19.518 -19.686 -19.880 -20.099 -20.345 -20.616 -20.913 -21.237 -21.587 -21.963 -22.367 -22.797 -23.256 -23.743 -24.259 -24.805 -25.380 -25.985 -26.622 -27.290 -27.992 -28.726 -29.494 -30.298 -31.137 -32.014 -32.929 -33.884 -34.879 -35.916 -36.997 -38.122 -39.294 -40.513 -41.782 -43.102 -44.473 -45.896 -47.371 -48.872 -50.373 -51.874 0 1 1.0 1 N1 VH 17.14 22.7 0.05 4.649e+09 -1.239e+09 1.201e+10 1.189e+09 2.554e+10 7.279e+09 4.710e+10 1.911e+10 7.872e+10 3.888e+10 1.226e+11 6.899e+10 1.813e+11 1.122e+11 2.574e+11 1.716e+11 3.538e+11 2.504e+11 4.735e+11 3.524e+11 6.199e+11 4.817e+11 7.962e+11 6.423e+11 1.006e+12 8.387e+11 1.253e+12 1.076e+12 1.541e+12 1.359e+12 1.875e+12 1.694e+12 2.258e+12 2.087e+12 2.693e+12 2.541e+12 3.184e+12 3.063e+12 3.736e+12 3.660e+12 4.351e+12 4.336e+12 5.033e+12 5.097e+12 5.786e+12 5.951e+12 6.612e+12 6.901e+12 7.514e+12 7.953e+12 8.495e+12 9.114e+12 9.556e+12 1.039e+13 1.070e+13 1.178e+13 1.193e+13 1.329e+13 1.324e+13 1.493e+13 1.463e+13 1.670e+13 1.611e+13 1.859e+13 1.768e+13 2.062e+13 1.932e+13 2.279e+13 2.105e+13 2.508e+13 2.286e+13 2.752e+13 2.475e+13 3.008e+13 2.671e+13 3.277e+13 2.874e+13 3.559e+13 3.084e+13 3.853e+13 3.301e+13 4.158e+13 3.523e+13 4.475e+13 3.751e+13 4.802e+13 3.984e+13 5.138e+13 4.222e+13 5.484e+13 4.464e+13 5.837e+13 4.710e+13 6.197e+13 4.959e+13 6.564e+13 5.211e+13 6.935e+13 5.465e+13 7.310e+13 5.720e+13 7.688e+13 5.976e+13 8.067e+13 6.233e+13 8.447e+13 6.491e+13 8.828e+13 6.747e+13 9.206e+13 7.002e+13 9.582e+13 7.256e+13 9.956e+13 7.507e+13 1.032e+14 7.756e+13 1.069e+14 8.001e+13 1.104e+14 8.243e+13 1.140e+14 8.481e+13 1.174e+14 8.715e+13 1.208e+14 8.943e+13 1.240e+14 9.166e+13 1.272e+14 9.383e+13 1.303e+14 9.593e+13 1.333e+14 9.796e+13 1.361e+14 9.993e+13 1.389e+14 1.018e+14 1.415e+14 1.036e+14 1.440e+14 1.054e+14 1.464e+14 1.070e+14 1.486e+14 1.086e+14 1.507e+14 1.101e+14 1.527e+14 1.116e+14 1.546e+14 1.129e+14 1.563e+14 1.142e+14 1.580e+14 1.154e+14 1.595e+14 1.166e+14 1.609e+14 1.177e+14 1.621e+14 1.188e+14 1.633e+14 1.198e+14 1.644e+14 1.208e+14 1.653e+14 1.218e+14 1.662e+14 1.227e+14 1.670e+14 1.236e+14 1.678e+14 1.246e+14 1.684e+14 1.255e+14 1.690e+14 1.264e+14 1.696e+14 1.273e+14 1.702e+14 1.283e+14 1.707e+14 1.292e+14 1.712e+14 1.302e+14 1.717e+14 1.313e+14 1.722e+14 1.323e+14 1.727e+14 1.334e+14 1.732e+14 1.346e+14 1.738e+14 1.357e+14 1.744e+14 1.370e+14 1.750e+14 1.382e+14 1.757e+14 1.395e+14 1.765e+14 1.409e+14 1.773e+14 1.423e+14 1.782e+14 1.437e+14 1.792e+14 1.452e+14 1.802e+14 1.467e+14 1.813e+14 1.482e+14 1.825e+14 1.497e+14 1.837e+14 1.512e+14 1.850e+14 1.528e+14 1.864e+14 1.543e+14 1.878e+14 1.559e+14 1.893e+14 1.574e+14 1.908e+14 1.590e+14 1.924e+14 1.605e+14 1.940e+14 1.620e+14 1.957e+14 1.635e+14 1.975e+14 1.649e+14 1.992e+14 1.663e+14 2.010e+14 1.676e+14 2.029e+14 1.690e+14 2.047e+14 1.702e+14 2.066e+14 1.714e+14 2.085e+14 1.726e+14 2.104e+14 1.736e+14 2.123e+14 1.746e+14 2.142e+14 1.756e+14 2.161e+14 1.764e+14 2.180e+14 1.772e+14 2.199e+14 1.779e+14 2.217e+14 1.784e+14 2.236e+14 1.789e+14 2.253e+14 1.793e+14 2.271e+14 1.795e+14 2.287e+14 1.796e+14 2.303e+14 1.795e+14 2.319e+14 1.794e+14 2.333e+14 1.790e+14 2.346e+14 1.785e+14 2.358e+14 1.778e+14 2.369e+14 1.770e+14 2.379e+14 1.761e+14 2.387e+14 1.749e+14 2.394e+14 1.735e+14 2.398e+14 1.720e+14 2.401e+14 1.702e+14 2.401e+14 1.682e+14 2.399e+14 1.660e+14 2.395e+14 1.636e+14 2.388e+14 1.610e+14 2.379e+14 1.582e+14 2.367e+14 1.552e+14 2.352e+14 1.520e+14 2.334e+14 1.486e+14 2.313e+14 1.451e+14 2.290e+14 1.413e+14 2.263e+14 1.374e+14 2.234e+14 1.334e+14 2.202e+14 1.292e+14 2.167e+14 1.250e+14 2.129e+14 1.206e+14 2.090e+14 1.161e+14 2.047e+14 1.116e+14 2.003e+14 1.070e+14 1.956e+14 1.023e+14 1.907e+14 9.768e+13 1.857e+14 9.302e+13 1.805e+14 8.836e+13 1.752e+14 8.374e+13 1.697e+14 7.914e+13 1.642e+14 7.460e+13 1.585e+14 7.013e+13 1.529e+14 6.574e+13 1.471e+14 6.143e+13 1.414e+14 5.722e+13 1.356e+14 5.313e+13 1.299e+14 4.915e+13 1.242e+14 4.530e+13 1.185e+14 4.159e+13 1.129e+14 3.802e+13 1.073e+14 3.460e+13 1.018e+14 3.134e+13 9.645e+13 2.823e+13 9.118e+13 2.528e+13 8.603e+13 2.249e+13 8.100e+13 1.985e+13 7.611e+13 1.739e+13 7.137e+13 1.508e+13 6.678e+13 1.293e+13 6.235e+13 1.094e+13 5.808e+13 9.101e+12 5.398e+13 7.417e+12 5.005e+13 5.882e+12 4.630e+13 4.489e+12 4.272e+13 3.234e+12 3.932e+13 2.113e+12 3.610e+13 1.116e+12 3.305e+13 2.397e+11 3.019e+13 -5.239e+11 2.750e+13 -1.182e+12 2.498e+13 -1.743e+12 2.263e+13 -2.213e+12 2.045e+13 -2.600e+12 1.844e+13 -2.912e+12 1.657e+13 -3.156e+12 1.486e+13 -3.340e+12 1.329e+13 -3.470e+12 1.185e+13 -3.553e+12 1.055e+13 -3.596e+12 9.363e+12 -3.604e+12 8.293e+12 -3.583e+12 7.328e+12 -3.538e+12 6.461e+12 -3.473e+12 5.684e+12 -3.392e+12 4.989e+12 -3.299e+12 4.369e+12 -3.196e+12 3.817e+12 -3.086e+12 3.326e+12 -2.971e+12 2.890e+12 -2.851e+12 2.503e+12 -2.729e+12 2.160e+12 -2.606e+12 1.856e+12 -2.482e+12 1.586e+12 -2.357e+12 1.348e+12 -2.231e+12 1.138e+12 -2.106e+12 9.525e+11 -1.980e+12 7.893e+11 -1.855e+12 6.462e+11 -1.731e+12 5.211e+11 -1.608e+12 4.126e+11 -1.487e+12 3.188e+11 -1.367e+12 2.386e+11 -1.250e+12 1.707e+11 -1.136e+12 1.138e+11 -1.025e+12 6.693e+10 -9.186e+11 2.910e+10 -8.164e+11 -6.981e+08 -7.192e+11 -2.336e+10 -6.274e+11 -3.976e+10 -5.413e+11 -5.075e+10 -4.615e+11 -5.713e+10 -3.880e+11 -5.966e+10 -3.212e+11 -5.905e+10 -2.610e+11 -5.599e+10 -2.077e+11 -5.110e+10 -1.610e+11 -4.495e+10 -1.209e+11 -3.808e+10 -8.726e+10 -3.095e+10 -5.970e+10 -2.395e+10 -3.796e+10 -1.745e+10 -2.164e+10 -1.172e+10 -1.031e+10 -6.986e+09 -3.489e+09 -3.465e+09 -3.564e+08 -1.440e+09 1.751e+09 -8.297e+08 5.687e+09 -2.110e+08 1.206e+10 1.382e+09 2.045e+10 4.102e+09 3.036e+10 7.863e+09 4.131e+10 1.253e+10 5.288e+10 1.796e+10 6.466e+10 2.396e+10 7.629e+10 3.035e+10 8.746e+10 3.695e+10 9.785e+10 4.358e+10 1.073e+11 5.005e+10 1.155e+11 5.622e+10 1.224e+11 6.194e+10 1.278e+11 6.708e+10 1.318e+11 7.155e+10 1.343e+11 7.527e+10 1.353e+11 7.817e+10 1.349e+11 8.023e+10 1.331e+11 8.144e+10 1.300e+11 8.180e+10 1.258e+11 8.134e+10 1.206e+11 8.012e+10 1.146e+11 7.818e+10 1.079e+11 7.559e+10 1.006e+11 7.244e+10 9.294e+10 6.882e+10 8.505e+10 6.480e+10 7.709e+10 6.047e+10 6.918e+10 5.594e+10 6.142e+10 5.127e+10 5.395e+10 4.656e+10 4.685e+10 4.188e+10 4.018e+10 3.729e+10 3.402e+10 3.287e+10 2.840e+10 2.865e+10 2.334e+10 2.468e+10 1.887e+10 2.101e+10 1.497e+10 1.764e+10 1.163e+10 1.460e+10 8.816e+09 1.190e+10 6.501e+09 9.540e+09 4.634e+09 7.500e+09 3.172e+09 5.776e+09 2.060e+09 4.347e+09 1.244e+09 3.186e+09 6.654e+08 2.278e+09 2.886e+08 1.574e+09 6.176e+07 1.046e+09 -6.040e+07 6.669e+08 -1.131e+08 4.060e+08 -1.239e+08 2.333e+08 -1.120e+08 1.232e+08 -8.883e+07 5.498e+07 -6.069e+07 1.484e+07 -3.272e+07 -5.460e+06 -1.093e+07 -1.312e+07 7.413e+06 -2.210e+07 5.208e+07 -4.295e+07 1.568e+08 -6.866e+07 3.513e+08 -8.739e+07 6.657e+08 -8.483e+07 1.132e+09 -4.419e+07 1.784e+09 5.362e+07 2.652e+09 2.287e+08 3.766e+09 5.022e+08 5.156e+09 8.955e+08 6.841e+09 1.427e+09 8.843e+09 2.117e+09 1.118e+10 2.980e+09 1.385e+10 4.029e+09 1.686e+10 5.273e+09 2.021e+10 6.719e+09 2.387e+10 8.367e+09 2.784e+10 1.022e+10 3.209e+10 1.226e+10 3.659e+10 1.449e+10 4.129e+10 1.688e+10 4.616e+10 1.944e+10 5.115e+10 2.211e+10 5.620e+10 2.490e+10 6.128e+10 2.777e+10 6.630e+10 3.069e+10 7.123e+10 3.364e+10 7.600e+10 3.658e+10 8.055e+10 3.948e+10 8.485e+10 4.232e+10 8.884e+10 4.506e+10 9.248e+10 4.766e+10 9.571e+10 5.011e+10 9.850e+10 5.237e+10 1.008e+11 5.442e+10 1.026e+11 5.622e+10 1.039e+11 5.776e+10 1.047e+11 5.902e+10 1.049e+11 5.998e+10 1.047e+11 6.063e+10 1.039e+11 6.096e+10 1.026e+11 6.097e+10 1.008e+11 6.065e+10 9.855e+10 6.000e+10 9.590e+10 5.904e+10 9.287e+10 5.778e+10 8.950e+10 5.623e+10 8.583e+10 5.441e+10 8.192e+10 5.235e+10 7.780e+10 5.007e+10 7.352e+10 4.760e+10 6.913e+10 4.498e+10 6.468e+10 4.224e+10 6.021e+10 3.940e+10 5.575e+10 3.651e+10 5.136e+10 3.360e+10 4.707e+10 3.071e+10 4.290e+10 2.785e+10 3.889e+10 2.507e+10 3.506e+10 2.239e+10 3.143e+10 1.982e+10 2.802e+10 1.740e+10 2.484e+10 1.513e+10 2.189e+10 1.303e+10 1.918e+10 1.110e+10 1.671e+10 9.356e+09 1.448e+10 7.787e+09 1.248e+10 6.395e+09 1.071e+10 5.172e+09 9.142e+09 4.113e+09 7.778e+09 3.207e+09 6.598e+09 2.441e+09 5.588e+09 1.802e+09 4.735e+09 1.275e+09 4.022e+09 8.461e+08 3.433e+09 5.006e+08 2.956e+09 2.242e+08 2.574e+09 3.105e+06 2.276e+09 -1.751e+08 2.048e+09 -3.211e+08 1.879e+09 -4.441e+08 1.759e+09 -5.503e+08 1.681e+09 -6.444e+08 1.636e+09 -7.289e+08 1.620e+09 -8.048e+08 1.628e+09 -8.721e+08 1.659e+09 -9.303e+08 1.708e+09 -9.786e+08 1.775e+09 -1.016e+09 1.859e+09 -1.041e+09 1.958e+09 -1.054e+09 2.072e+09 -1.054e+09 2.200e+09 -1.039e+09 2.341e+09 -1.010e+09 2.495e+09 -9.652e+08 2.660e+09 -9.052e+08 2.837e+09 -8.290e+08 3.022e+09 -7.362e+08 3.217e+09 -6.265e+08 3.417e+09 -4.997e+08 3.623e+09 -3.559e+08 3.831e+09 -1.951e+08 4.040e+09 -1.814e+07 4.246e+09 1.741e+08 4.447e+09 3.803e+08 4.639e+09 5.986e+08 4.820e+09 8.265e+08 4.987e+09 1.062e+09 5.135e+09 1.301e+09 5.262e+09 1.540e+09 5.366e+09 1.775e+09 5.443e+09 2.003e+09 5.492e+09 2.219e+09 5.510e+09 2.420e+09 5.496e+09 2.603e+09 5.449e+09 2.763e+09 5.370e+09 2.899e+09 5.257e+09 3.007e+09 5.113e+09 3.086e+09 4.938e+09 3.134e+09 4.735e+09 3.151e+09 4.506e+09 3.138e+09 4.255e+09 3.094e+09 3.984e+09 3.022e+09 3.698e+09 2.924e+09 3.401e+09 2.802e+09 3.096e+09 2.659e+09 2.790e+09 2.498e+09 2.484e+09 2.323e+09 2.185e+09 2.138e+09 1.895e+09 1.945e+09 1.619e+09 1.748e+09 1.359e+09 1.551e+09 1.119e+09 1.356e+09 9.007e+08 1.167e+09 7.055e+08 9.869e+08 5.349e+08 8.171e+08 3.890e+08 6.599e+08 2.679e+08 5.172e+08 1.709e+08 3.906e+08 9.662e+07 2.811e+08 4.345e+07 1.899e+08 8.977e+06 1.176e+08 -1.009e+07 6.459e+07 -1.901e+07 3.031e+07 -2.654e+07 9.578e+06 -4.071e+07 -1.010e+07 -6.274e+07 -4.105e+07 -8.932e+07 -8.928e+07 -1.168e+08 -1.567e+08 -1.418e+08 -2.440e+08 -1.612e+08 -3.513e+08 -1.721e+08 -4.792e+08 -1.712e+08 -6.279e+08 -1.557e+08 -7.976e+08 -1.223e+08 -9.889e+08 -6.774e+07 -1.202e+09 1.121e+07 -1.438e+09 1.182e+08 -1.697e+09 2.566e+08 -1.978e+09 4.303e+08 -2.284e+09 6.430e+08 -2.614e+09 8.986e+08 -2.968e+09 1.201e+09 -3.347e+09 1.554e+09 -3.751e+09 1.961e+09 -4.180e+09 2.427e+09 -4.635e+09 2.954e+09 -5.117e+09 3.547e+09 -5.625e+09 4.207e+09 -6.161e+09 4.939e+09 -6.726e+09 5.743e+09 -7.319e+09 6.623e+09 -7.943e+09 7.579e+09 -8.600e+09 8.612e+09 -9.289e+09 9.722e+09 -1.001e+10 1.091e+10 -1.077e+10 1.217e+10 -1.157e+10 1.350e+10 -1.240e+10 1.491e+10 -1.328e+10 1.637e+10 -1.419e+10 1.790e+10 -1.515e+10 1.949e+10 -1.614e+10 2.112e+10 -1.717e+10 2.278e+10 -1.824e+10 2.448e+10 -1.933e+10 2.620e+10 -2.046e+10 2.793e+10 -2.161e+10 2.966e+10 -2.277e+10 3.137e+10 -2.394e+10 3.306e+10 -2.511e+10 3.471e+10 -2.627e+10 3.631e+10 -2.741e+10 3.785e+10 -2.852e+10 3.931e+10 -2.959e+10 4.067e+10 -3.060e+10 4.193e+10 -3.155e+10 4.308e+10 -3.242e+10 4.410e+10 -3.321e+10 4.499e+10 -3.390e+10 4.574e+10 -3.448e+10 4.633e+10 -3.496e+10 4.677e+10 -3.531e+10 4.704e+10 -3.553e+10 4.716e+10 -3.563e+10 4.711e+10 -3.560e+10 4.690e+10 -3.543e+10 4.652e+10 -3.513e+10 4.599e+10 -3.469e+10 4.531e+10 -3.413e+10 4.448e+10 -3.344e+10 4.351e+10 -3.263e+10 4.240e+10 -3.170e+10 4.117e+10 -3.065e+10 3.983e+10 -2.950e+10 3.838e+10 -2.826e+10 3.683e+10 -2.691e+10 3.520e+10 -2.549e+10 3.349e+10 -2.398e+10 3.172e+10 -2.241e+10 2.990e+10 -2.078e+10 2.804e+10 -1.911e+10 2.614e+10 -1.740e+10 2.423e+10 -1.567e+10 2.232e+10 -1.394e+10 2.041e+10 -1.221e+10 1.853e+10 -1.051e+10 1.668e+10 -8.855e+09 1.488e+10 -7.260e+09 1.314e+10 -5.750e+09 1.149e+10 -4.340e+09 9.940e+09 -3.047e+09 8.506e+09 -1.886e+09 7.210e+09 -8.632e+08 6.073e+09 2.699e+07 5.116e+09 8.063e+08 4.350e+09 1.523e+09 3.765e+09 2.256e+09 3.329e+09 3.098e+09 2.980e+09 4.147e+09 2.642e+09 5.484e+09 2.242e+09 7.162e+09 1.718e+09 9.212e+09 1.022e+09 1.165e+10 1.190e+08 1.448e+10 -1.018e+09 1.770e+10 -2.409e+09 2.130e+10 -4.068e+09 2.526e+10 -6.004e+09 2.956e+10 -8.226e+09 3.419e+10 -1.074e+10 3.911e+10 -1.353e+10 4.429e+10 -1.662e+10 4.971e+10 -1.998e+10 5.532e+10 -2.362e+10 6.108e+10 -2.752e+10 6.697e+10 -3.167e+10 7.294e+10 -3.606e+10 7.894e+10 -4.067e+10 8.495e+10 -4.549e+10 9.092e+10 -5.048e+10 9.680e+10 -5.564e+10 1.026e+11 -6.095e+10 1.082e+11 -6.636e+10 1.136e+11 -7.186e+10 1.188e+11 -7.744e+10 1.237e+11 -8.305e+10 1.283e+11 -8.867e+10 1.326e+11 -9.428e+10 1.366e+11 -9.985e+10 1.401e+11 -1.053e+11 1.432e+11 -1.107e+11 1.459e+11 -1.160e+11 1.481e+11 -1.211e+11 1.499e+11 -1.260e+11 1.511e+11 -1.307e+11 1.518e+11 -1.352e+11 1.519e+11 -1.395e+11 1.515e+11 -1.434e+11 1.505e+11 -1.471e+11 1.490e+11 -1.504e+11 1.470e+11 -1.534e+11 1.444e+11 -1.560e+11 1.413e+11 -1.583e+11 1.376e+11 -1.601e+11 1.336e+11 -1.616e+11 1.290e+11 -1.626e+11 1.241e+11 -1.633e+11 1.188e+11 -1.635e+11 1.131e+11 -1.632e+11 1.072e+11 0.005 -53.801 -52.326 -50.851 -49.375 -47.902 -46.441 -45.009 -43.615 -42.265 -40.962 -39.707 -38.499 -37.340 -36.227 -35.160 -34.138 -33.160 -32.223 -31.327 -30.472 -29.654 -28.875 -28.132 -27.424 -26.751 -26.112 -25.506 -24.933 -24.391 -23.880 -23.399 -22.948 -22.527 -22.134 -21.770 -21.433 -21.124 -20.843 -20.589 -20.363 -20.163 -19.990 -19.843 -19.724 -19.631 -19.564 -19.524 -19.511 -19.524 -19.563 -19.630 -19.724 -19.845 -19.994 -20.170 -20.375 -20.608 -20.869 -21.161 -21.481 -21.833 -22.215 -22.629 -23.075 -23.554 -24.066 -24.613 -25.196 -25.816 -26.473 -27.169 -27.906 -28.685 -29.507 -30.375 -31.291 -32.257 -33.276 -34.352 -35.488 -36.690 -37.963 -39.314 -40.753 -42.292 -43.945 -45.732 -47.681 -49.829 -52.233 -54.978 -58.212 -62.222 -67.769 -78.771 -78.550 -71.421 -66.175 -62.230 -58.688 -55.415 -52.395 -49.613 -47.044 -44.660 -42.436 -40.349 -38.382 -36.521 -34.754 -33.071 -31.465 -29.931 -28.461 -27.053 -25.702 -24.405 -23.159 -21.961 -20.809 -19.701 -18.635 -17.610 -16.624 -15.675 -14.763 -13.885 -13.041 -12.229 -11.450 -10.701 -9.982 -9.293 -8.632 -7.999 -7.394 -6.815 -6.263 -5.736 -5.235 -4.758 -4.306 -3.879 -3.475 -3.095 -2.739 -2.406 -2.096 -1.809 -1.545 -1.304 -1.086 -0.891 -0.718 -0.568 -0.442 -0.338 -0.258 -0.201 -0.168 -0.159 -0.175 -0.216 -0.281 -0.373 -0.491 -0.636 -0.809 -1.011 -1.242 -1.503 -1.797 -2.124 -2.485 -2.883 -3.318 -3.794 -4.313 -4.878 -5.491 -6.157 -6.879 -7.664 -8.516 -9.443 -10.454 -11.558 -12.769 -14.102 -15.579 -17.224 -19.072 -21.173 -23.592 -26.431 -29.848 -34.108 -39.717 -47.782 -59.168 -53.082 -44.462 -37.831 -32.808 -28.855 -25.627 -22.915 -20.588 -18.556 -16.762 -15.160 -13.720 -12.416 -11.230 -10.147 -9.155 -8.244 -7.406 -6.633 -5.922 -5.266 -4.661 -4.104 -3.592 -3.123 -2.692 -2.300 -1.943 -1.620 -1.330 -1.071 -0.842 -0.643 -0.472 -0.329 -0.212 -0.121 -0.056 -0.016 0.000 -0.008 -0.041 -0.097 -0.176 -0.278 -0.403 -0.550 -0.720 -0.913 -1.128 -1.366 -1.626 -1.909 -2.214 -2.542 -2.893 -3.266 -3.664 -4.084 -4.528 -4.997 -5.489 -6.007 -6.549 -7.117 -7.711 -8.331 -8.979 -9.653 -10.357 -11.089 -11.851 -12.643 -13.466 -14.322 -15.211 -16.135 -17.094 -18.090 -19.124 -20.198 -21.314 -22.473 -23.678 -24.930 -26.232 -27.587 -28.997 -30.466 -31.996 -33.591 -35.250 -36.972 -38.751 -40.566 -42.381 -44.129 -45.707 -46.996 -47.906 -48.429 -48.639 -48.647 -48.542 -48.374 -48.161 -47.894 -47.551 -47.104 -46.529 -45.814 -44.964 -43.998 -42.945 -41.833 -40.691 -39.542 -38.402 -37.282 -36.192 -35.136 -34.117 -33.138 -32.199 -31.300 -30.441 -29.622 -28.843 -28.102 -27.398 -26.732 -26.102 -25.507 -24.947 -24.421 -23.928 -23.468 -23.040 -22.643 -22.277 -21.942 -21.636 -21.360 -21.113 -20.894 -20.704 -20.541 -20.407 -20.300 -20.220 -20.168 -20.143 -20.144 -20.172 -20.228 -20.310 -20.418 -20.554 -20.717 -20.907 -21.124 -21.369 -21.642 -21.943 -22.272 -22.630 -23.017 -23.433 -23.879 -24.356 -24.863 -25.403 -25.975 -26.580 -27.220 -27.895 -28.606 -29.354 -30.140 -30.966 -31.834 -32.743 -33.696 -34.695 -35.742 -36.837 -37.984 -39.185 -40.440 -41.754 -43.127 -44.562 -46.061 -47.626 -49.258 -50.957 -52.723 -54.551 -56.412 -58.272 -60.132 0 1 1.0 1 N2 HH 20.21 25.51 0.05 -1.327e+10 -2.841e+10 -1.437e+10 -2.518e+10 -1.516e+10 -2.208e+10 -1.566e+10 -1.913e+10 -1.588e+10 -1.634e+10 -1.585e+10 -1.371e+10 -1.557e+10 -1.125e+10 -1.506e+10 -8.966e+09 -1.433e+10 -6.876e+09 -1.341e+10 -4.984e+09 -1.231e+10 -3.302e+09 -1.106e+10 -1.841e+09 -9.700e+09 -6.091e+08 -8.257e+09 3.883e+08 -6.785e+09 1.148e+09 -5.337e+09 1.674e+09 -3.968e+09 1.989e+09 -2.737e+09 2.131e+09 -1.682e+09 2.162e+09 -7.959e+08 2.173e+09 1.468e+07 2.269e+09 9.468e+08 2.514e+09 2.238e+09 2.885e+09 4.091e+09 3.290e+09 6.654e+09 3.611e+09 1.004e+10 3.722e+09 1.433e+10 3.494e+09 1.957e+10 2.797e+09 2.581e+10 1.496e+09 3.306e+10 -5.426e+08 4.130e+10 -3.451e+09 5.052e+10 -7.365e+09 6.063e+10 -1.241e+10 7.154e+10 -1.869e+10 8.316e+10 -2.632e+10 9.531e+10 -3.539e+10 1.078e+11 -4.596e+10 1.205e+11 -5.808e+10 1.331e+11 -7.177e+10 1.453e+11 -8.701e+10 1.570e+11 -1.038e+11 1.678e+11 -1.220e+11 1.773e+11 -1.416e+11 1.854e+11 -1.624e+11 1.917e+11 -1.842e+11 1.959e+11 -2.069e+11 1.978e+11 -2.303e+11 1.970e+11 -2.540e+11 1.933e+11 -2.780e+11 1.866e+11 -3.019e+11 1.766e+11 -3.255e+11 1.632e+11 -3.486e+11 1.463e+11 -3.710e+11 1.258e+11 -3.926e+11 1.015e+11 -4.133e+11 7.335e+10 -4.331e+11 4.109e+10 -4.520e+11 4.512e+09 -4.701e+11 -3.685e+10 -4.877e+11 -8.366e+10 -5.050e+11 -1.367e+11 -5.222e+11 -1.971e+11 -5.396e+11 -2.665e+11 -5.573e+11 -3.466e+11 -5.750e+11 -4.397e+11 -5.926e+11 -5.483e+11 -6.095e+11 -6.751e+11 -6.248e+11 -8.234e+11 -6.371e+11 -9.970e+11 -6.446e+11 -1.199e+12 -6.453e+11 -1.433e+12 -6.368e+11 -1.702e+12 -6.161e+11 -2.012e+12 -5.800e+11 -2.364e+12 -5.250e+11 -2.764e+12 -4.472e+11 -3.214e+12 -3.424e+11 -3.718e+12 -2.062e+11 -4.281e+12 -3.356e+10 -4.905e+12 1.802e+11 -5.593e+12 4.404e+11 -6.350e+12 7.527e+11 -7.177e+12 1.122e+12 -8.076e+12 1.555e+12 -9.051e+12 2.057e+12 -1.010e+13 2.634e+12 -1.123e+13 3.292e+12 -1.244e+13 4.037e+12 -1.374e+13 4.874e+12 -1.511e+13 5.809e+12 -1.656e+13 6.849e+12 -1.810e+13 7.998e+12 -1.971e+13 9.261e+12 -2.141e+13 1.064e+13 -2.318e+13 1.215e+13 -2.502e+13 1.378e+13 -2.694e+13 1.555e+13 -2.893e+13 1.745e+13 -3.098e+13 1.949e+13 -3.309e+13 2.166e+13 -3.527e+13 2.398e+13 -3.749e+13 2.644e+13 -3.978e+13 2.904e+13 -4.211e+13 3.179e+13 -4.448e+13 3.467e+13 -4.689e+13 3.769e+13 -4.932e+13 4.085e+13 -5.177e+13 4.414e+13 -5.424e+13 4.755e+13 -5.672e+13 5.109e+13 -5.920e+13 5.474e+13 -6.168e+13 5.851e+13 -6.414e+13 6.237e+13 -6.659e+13 6.632e+13 -6.902e+13 7.036e+13 -7.142e+13 7.448e+13 -7.378e+13 7.866e+13 -7.611e+13 8.289e+13 -7.839e+13 8.717e+13 -8.062e+13 9.148e+13 -8.281e+13 9.581e+13 -8.493e+13 1.001e+14 -8.700e+13 1.045e+14 -8.900e+13 1.088e+14 -9.094e+13 1.131e+14 -9.281e+13 1.174e+14 -9.462e+13 1.216e+14 -9.636e+13 1.258e+14 -9.803e+13 1.299e+14 -9.964e+13 1.339e+14 -1.012e+14 1.378e+14 -1.026e+14 1.416e+14 -1.041e+14 1.454e+14 -1.054e+14 1.490e+14 -1.067e+14 1.525e+14 -1.079e+14 1.559e+14 -1.091e+14 1.591e+14 -1.103e+14 1.623e+14 -1.114e+14 1.652e+14 -1.124e+14 1.681e+14 -1.135e+14 1.708e+14 -1.145e+14 1.734e+14 -1.155e+14 1.758e+14 -1.165e+14 1.782e+14 -1.175e+14 1.804e+14 -1.184e+14 1.825e+14 -1.194e+14 1.844e+14 -1.204e+14 1.862e+14 -1.213e+14 1.878e+14 -1.223e+14 1.894e+14 -1.233e+14 1.907e+14 -1.243e+14 1.920e+14 -1.254e+14 1.932e+14 -1.265e+14 1.942e+14 -1.276e+14 1.951e+14 -1.287e+14 1.959e+14 -1.299e+14 1.966e+14 -1.311e+14 1.973e+14 -1.324e+14 1.978e+14 -1.337e+14 1.982e+14 -1.350e+14 1.986e+14 -1.364e+14 1.989e+14 -1.378e+14 1.992e+14 -1.393e+14 1.994e+14 -1.408e+14 1.996e+14 -1.424e+14 1.997e+14 -1.440e+14 1.998e+14 -1.457e+14 1.998e+14 -1.474e+14 1.998e+14 -1.491e+14 1.998e+14 -1.509e+14 1.998e+14 -1.527e+14 1.998e+14 -1.545e+14 1.998e+14 -1.563e+14 1.997e+14 -1.582e+14 1.997e+14 -1.600e+14 1.997e+14 -1.619e+14 1.996e+14 -1.637e+14 1.996e+14 -1.655e+14 1.995e+14 -1.673e+14 1.995e+14 -1.691e+14 1.994e+14 -1.708e+14 1.994e+14 -1.725e+14 1.993e+14 -1.740e+14 1.993e+14 -1.755e+14 1.992e+14 -1.770e+14 1.991e+14 -1.783e+14 1.990e+14 -1.795e+14 1.989e+14 -1.806e+14 1.987e+14 -1.816e+14 1.985e+14 -1.824e+14 1.983e+14 -1.831e+14 1.980e+14 -1.837e+14 1.977e+14 -1.841e+14 1.972e+14 -1.843e+14 1.967e+14 -1.843e+14 1.962e+14 -1.841e+14 1.955e+14 -1.838e+14 1.948e+14 -1.832e+14 1.940e+14 -1.824e+14 1.930e+14 -1.814e+14 1.920e+14 -1.802e+14 1.908e+14 -1.788e+14 1.895e+14 -1.772e+14 1.881e+14 -1.753e+14 1.866e+14 -1.733e+14 1.849e+14 -1.710e+14 1.831e+14 -1.684e+14 1.811e+14 -1.657e+14 1.790e+14 -1.628e+14 1.768e+14 -1.597e+14 1.744e+14 -1.564e+14 1.719e+14 -1.529e+14 1.693e+14 -1.492e+14 1.664e+14 -1.453e+14 1.635e+14 -1.414e+14 1.604e+14 -1.372e+14 1.572e+14 -1.330e+14 1.539e+14 -1.286e+14 1.504e+14 -1.241e+14 1.468e+14 -1.196e+14 1.431e+14 -1.150e+14 1.393e+14 -1.104e+14 1.354e+14 -1.057e+14 1.315e+14 -1.010e+14 1.274e+14 -9.632e+13 1.233e+14 -9.163e+13 1.191e+14 -8.696e+13 1.149e+14 -8.233e+13 1.107e+14 -7.776e+13 1.064e+14 -7.325e+13 1.021e+14 -6.882e+13 9.776e+13 -6.448e+13 9.345e+13 -6.025e+13 8.916e+13 -5.612e+13 8.490e+13 -5.213e+13 8.067e+13 -4.827e+13 7.650e+13 -4.455e+13 7.239e+13 -4.098e+13 6.835e+13 -3.756e+13 6.439e+13 -3.430e+13 6.052e+13 -3.121e+13 5.675e+13 -2.828e+13 5.309e+13 -2.551e+13 4.954e+13 -2.291e+13 4.611e+13 -2.048e+13 4.280e+13 -1.821e+13 3.962e+13 -1.611e+13 3.658e+13 -1.416e+13 3.368e+13 -1.237e+13 3.092e+13 -1.073e+13 2.829e+13 -9.230e+12 2.581e+13 -7.871e+12 2.347e+13 -6.646e+12 2.128e+13 -5.547e+12 1.922e+13 -4.567e+12 1.730e+13 -3.699e+12 1.552e+13 -2.936e+12 1.386e+13 -2.270e+12 1.234e+13 -1.694e+12 1.094e+13 -1.201e+12 9.657e+12 -7.832e+11 8.489e+12 -4.333e+11 7.431e+12 -1.446e+11 6.475e+12 8.980e+10 5.615e+12 2.759e+11 4.846e+12 4.200e+11 4.161e+12 5.277e+11 3.554e+12 6.043e+11 3.020e+12 6.548e+11 2.552e+12 6.838e+11 2.144e+12 6.953e+11 1.791e+12 6.930e+11 1.487e+12 6.801e+11 1.227e+12 6.595e+11 1.006e+12 6.335e+11 8.186e+11 6.041e+11 6.604e+11 5.728e+11 5.275e+11 5.408e+11 4.162e+11 5.087e+11 3.229e+11 4.772e+11 2.449e+11 4.464e+11 1.797e+11 4.164e+11 1.250e+11 3.872e+11 7.941e+10 3.587e+11 4.138e+10 3.306e+11 9.857e+09 3.030e+11 -1.592e+10 2.757e+11 -3.664e+10 2.488e+11 -5.284e+10 2.224e+11 -6.492e+10 1.966e+11 -7.332e+10 1.715e+11 -7.839e+10 1.474e+11 -8.051e+10 1.245e+11 -8.006e+10 1.031e+11 -7.741e+10 8.329e+10 -7.298e+10 6.533e+10 -6.716e+10 4.935e+10 -6.035e+10 3.546e+10 -5.297e+10 2.371e+10 -4.540e+10 1.405e+10 -3.800e+10 6.980e+09 -3.122e+10 7.226e+08 -2.524e+10 -3.921e+09 -2.026e+10 -7.780e+09 -1.637e+10 -1.155e+10 -1.341e+10 -1.586e+10 -1.094e+10 -2.111e+10 -8.429e+09 -2.742e+10 -5.411e+09 -3.470e+10 -1.558e+09 -4.277e+10 3.285e+09 -5.139e+10 9.169e+09 -6.033e+10 1.607e+10 -6.933e+10 2.386e+10 -7.817e+10 3.243e+10 -8.665e+10 4.161e+10 -9.456e+10 5.121e+10 -1.018e+11 6.104e+10 -1.081e+11 7.090e+10 -1.134e+11 8.060e+10 -1.177e+11 8.996e+10 -1.209e+11 9.880e+10 -1.229e+11 1.069e+11 -1.238e+11 1.143e+11 -1.236e+11 1.207e+11 -1.222e+11 1.261e+11 -1.199e+11 1.303e+11 -1.166e+11 1.334e+11 -1.124e+11 1.354e+11 -1.075e+11 1.362e+11 -1.020e+11 1.358e+11 -9.597e+10 1.343e+11 -8.954e+10 1.318e+11 -8.282e+10 1.283e+11 -7.595e+10 1.239e+11 -6.902e+10 1.188e+11 -6.214e+10 1.130e+11 -5.542e+10 1.067e+11 -4.893e+10 9.995e+10 -4.273e+10 9.288e+10 -3.691e+10 8.564e+10 -3.149e+10 7.832e+10 -2.653e+10 7.104e+10 -2.203e+10 6.389e+10 -1.802e+10 5.694e+10 -1.448e+10 5.027e+10 -1.142e+10 4.394e+10 -8.814e+09 3.801e+10 -6.634e+09 3.251e+10 -4.853e+09 2.748e+10 -3.434e+09 2.292e+10 -2.336e+09 1.885e+10 -1.519e+09 1.526e+10 -9.403e+08 1.214e+10 -5.569e+08 9.463e+09 -3.287e+08 7.213e+09 -2.168e+08 5.353e+09 -1.855e+08 3.851e+09 -2.035e+08 2.673e+09 -2.446e+08 1.780e+09 -2.913e+08 1.136e+09 -3.407e+08 7.060e+08 -4.144e+08 4.438e+08 -5.566e+08 2.907e+08 -8.122e+08 1.816e+08 -1.209e+09 7.382e+07 -1.761e+09 -4.299e+07 -2.480e+09 -1.584e+08 -3.380e+09 -2.529e+08 -4.474e+09 -3.034e+08 -5.775e+09 -2.849e+08 -7.296e+09 -1.718e+08 -9.046e+09 6.203e+07 -1.103e+10 4.421e+08 -1.326e+10 9.941e+08 -1.573e+10 1.742e+09 -1.844e+10 2.708e+09 -2.138e+10 3.911e+09 -2.454e+10 5.369e+09 -2.789e+10 7.092e+09 -3.142e+10 9.090e+09 -3.509e+10 1.136e+10 -3.888e+10 1.391e+10 -4.276e+10 1.672e+10 -4.666e+10 1.977e+10 -5.056e+10 2.306e+10 -5.440e+10 2.653e+10 -5.814e+10 3.018e+10 -6.172e+10 3.394e+10 -6.510e+10 3.778e+10 -6.824e+10 4.166e+10 -7.108e+10 4.551e+10 -7.359e+10 4.928e+10 -7.574e+10 5.293e+10 -7.749e+10 5.639e+10 -7.881e+10 5.962e+10 -7.969e+10 6.256e+10 -8.011e+10 6.516e+10 -8.007e+10 6.738e+10 -7.956e+10 6.918e+10 -7.860e+10 7.054e+10 -7.719e+10 7.142e+10 -7.535e+10 7.181e+10 -7.311e+10 7.170e+10 -7.050e+10 7.109e+10 -6.755e+10 6.997e+10 -6.431e+10 6.838e+10 -6.081e+10 6.632e+10 -5.711e+10 6.383e+10 -5.324e+10 6.094e+10 -4.926e+10 5.770e+10 -4.522e+10 5.415e+10 -4.116e+10 5.034e+10 -3.713e+10 4.634e+10 -3.317e+10 4.219e+10 -2.933e+10 3.797e+10 -2.564e+10 3.372e+10 -2.214e+10 2.952e+10 -1.885e+10 2.542e+10 -1.581e+10 2.148e+10 -1.302e+10 1.776e+10 -1.051e+10 1.430e+10 -8.280e+09 1.115e+10 -6.338e+09 8.342e+09 -4.684e+09 5.919e+09 -3.309e+09 3.900e+09 -2.206e+09 2.305e+09 -1.361e+09 1.142e+09 -7.673e+08 3.948e+08 -4.351e+08 -2.002e+07 -3.306e+08 -3.720e+08 -3.115e+08 -9.640e+08 -2.595e+08 -1.915e+09 -1.484e+08 -3.219e+09 5.998e+06 -4.843e+09 1.778e+08 -6.743e+09 3.391e+08 -8.875e+09 4.631e+08 -1.119e+10 5.245e+08 -1.365e+10 5.010e+08 -1.619e+10 3.732e+08 -1.876e+10 1.252e+08 -2.132e+10 -2.550e+08 -2.382e+10 -7.762e+08 -2.622e+10 -1.443e+09 -2.847e+10 -2.255e+09 -3.054e+10 -3.211e+09 -3.240e+10 -4.305e+09 -3.403e+10 -5.527e+09 -3.539e+10 -6.870e+09 -3.650e+10 -8.318e+09 -3.732e+10 -9.859e+09 -3.787e+10 -1.148e+10 -3.814e+10 -1.317e+10 -3.815e+10 -1.491e+10 -3.790e+10 -1.669e+10 -3.742e+10 -1.850e+10 -3.672e+10 -2.035e+10 -3.582e+10 -2.221e+10 -3.475e+10 -2.410e+10 -3.352e+10 -2.602e+10 -3.216e+10 -2.797e+10 -3.069e+10 -2.996e+10 -2.912e+10 -3.201e+10 -2.746e+10 -3.413e+10 -2.572e+10 -3.632e+10 -2.389e+10 -3.860e+10 -2.198e+10 -4.097e+10 -1.998e+10 -4.345e+10 -1.789e+10 -4.603e+10 -1.569e+10 -4.872e+10 -1.336e+10 -5.150e+10 -1.092e+10 -5.438e+10 -8.334e+09 -5.733e+10 -5.608e+09 -6.035e+10 -2.737e+09 -6.340e+10 2.781e+08 -6.647e+10 3.435e+09 -6.953e+10 6.724e+09 -7.254e+10 1.013e+10 -7.549e+10 1.364e+10 -7.834e+10 1.723e+10 -8.106e+10 2.087e+10 -8.363e+10 2.455e+10 -8.601e+10 2.823e+10 -8.817e+10 3.187e+10 -9.010e+10 3.545e+10 -9.177e+10 3.894e+10 -9.316e+10 4.229e+10 -9.426e+10 4.548e+10 -9.506e+10 4.848e+10 -9.553e+10 5.126e+10 -9.569e+10 5.380e+10 -9.552e+10 5.606e+10 -9.503e+10 5.804e+10 -9.423e+10 5.970e+10 -9.311e+10 6.105e+10 -9.170e+10 6.208e+10 -9.000e+10 6.277e+10 -8.804e+10 6.314e+10 -8.583e+10 6.317e+10 -8.339e+10 6.289e+10 -8.075e+10 6.231e+10 -7.795e+10 6.144e+10 -7.499e+10 6.029e+10 -7.191e+10 5.889e+10 -6.872e+10 5.726e+10 -6.544e+10 5.543e+10 -6.211e+10 5.340e+10 -5.875e+10 5.123e+10 -5.538e+10 4.892e+10 -5.203e+10 4.651e+10 -4.871e+10 4.402e+10 -4.544e+10 4.148e+10 -4.224e+10 3.891e+10 -3.913e+10 3.633e+10 -3.612e+10 3.378e+10 -3.322e+10 3.126e+10 -3.044e+10 2.879e+10 -2.778e+10 2.640e+10 -2.527e+10 2.408e+10 -2.289e+10 2.187e+10 -2.065e+10 1.976e+10 -1.856e+10 1.776e+10 -1.661e+10 1.588e+10 -1.481e+10 1.412e+10 -1.314e+10 1.249e+10 -1.161e+10 1.098e+10 -1.021e+10 9.598e+09 -8.941e+09 8.335e+09 -7.790e+09 7.193e+09 -6.755e+09 6.164e+09 -5.827e+09 5.244e+09 -5.000e+09 4.429e+09 -4.269e+09 3.710e+09 -3.623e+09 3.082e+09 -3.060e+09 2.538e+09 -2.570e+09 2.071e+09 -2.145e+09 1.672e+09 -1.781e+09 1.336e+09 -1.470e+09 1.054e+09 -1.206e+09 8.216e+08 -9.839e+08 6.315e+08 -7.989e+08 4.779e+08 -6.456e+08 3.554e+08 -5.198e+08 2.591e+08 -4.173e+08 1.845e+08 -3.346e+08 1.276e+08 -2.685e+08 8.490e+07 -2.161e+08 5.346e+07 -1.750e+08 3.065e+07 -1.430e+08 1.441e+07 -1.182e+08 3.042e+06 -9.928e+07 -4.795e+06 -8.483e+07 -1.008e+07 -7.389e+07 -1.354e+07 -6.565e+07 -1.568e+07 -5.955e+07 -1.686e+07 -5.513e+07 -1.734e+07 -5.209e+07 -1.730e+07 -5.020e+07 -1.688e+07 -4.931e+07 -1.619e+07 -4.932e+07 -1.532e+07 -5.017e+07 -1.434e+07 -5.178e+07 -1.331e+07 -5.411e+07 -1.226e+07 -5.712e+07 -1.126e+07 -6.072e+07 -1.034e+07 -6.484e+07 -9.557e+06 -6.938e+07 -8.967e+06 -7.423e+07 -8.636e+06 -7.926e+07 -8.633e+06 -8.433e+07 -9.028e+06 -8.929e+07 -9.882e+06 -9.400e+07 -1.125e+07 -9.831e+07 -1.318e+07 -1.021e+08 -1.569e+07 -1.052e+08 -1.878e+07 -1.075e+08 -2.245e+07 -1.090e+08 -2.666e+07 -1.095e+08 -3.135e+07 -1.091e+08 -3.647e+07 -1.077e+08 -4.194e+07 -1.053e+08 -4.766e+07 -1.019e+08 -5.357e+07 -9.761e+07 -5.958e+07 -9.242e+07 -6.564e+07 -8.640e+07 -7.167e+07 -7.961e+07 -7.764e+07 -7.208e+07 -8.353e+07 -6.384e+07 -8.933e+07 -5.494e+07 -9.505e+07 -4.532e+07 -1.007e+08 -3.491e+07 -1.064e+08 -2.362e+07 -1.122e+08 -1.125e+07 -1.180e+08 2.429e+06 -1.241e+08 1.772e+07 -1.302e+08 3.499e+07 -1.365e+08 5.470e+07 -1.429e+08 7.734e+07 -1.492e+08 1.035e+08 -1.552e+08 1.338e+08 -1.607e+08 0.005 -63.526 -61.163 -58.799 -56.436 -54.073 -51.736 -49.640 -47.731 -45.971 -44.335 -42.805 -41.367 -40.010 -38.727 -37.512 -36.359 -35.264 -34.223 -33.233 -32.291 -31.396 -30.545 -29.736 -28.967 -28.237 -27.546 -26.890 -26.270 -25.685 -25.133 -24.614 -24.127 -23.672 -23.247 -22.853 -22.488 -22.152 -21.846 -21.568 -21.318 -21.097 -20.903 -20.737 -20.598 -20.487 -20.403 -20.346 -20.317 -20.315 -20.341 -20.394 -20.475 -20.584 -20.721 -20.887 -21.081 -21.305 -21.557 -21.840 -22.153 -22.496 -22.871 -23.278 -23.717 -24.190 -24.697 -25.240 -25.818 -26.433 -27.086 -27.779 -28.512 -29.288 -30.108 -30.974 -31.887 -32.850 -33.865 -34.934 -36.060 -37.242 -38.483 -39.779 -41.123 -42.498 -43.875 -45.201 -46.400 -47.380 -48.063 -48.421 -48.494 -48.364 -48.118 -47.817 -47.500 -47.178 -46.846 -46.482 -46.051 -45.508 -44.805 -43.912 -42.822 -41.555 -40.151 -38.658 -37.117 -35.562 -34.017 -32.498 -31.014 -29.571 -28.173 -26.821 -25.514 -24.253 -23.036 -21.863 -20.733 -19.643 -18.594 -17.583 -16.609 -15.672 -14.770 -13.903 -13.068 -12.266 -11.495 -10.755 -10.045 -9.363 -8.711 -8.086 -7.488 -6.918 -6.373 -5.855 -5.362 -4.894 -4.450 -4.031 -3.637 -3.266 -2.919 -2.595 -2.295 -2.018 -1.764 -1.533 -1.326 -1.143 -0.982 -0.845 -0.731 -0.641 -0.574 -0.532 -0.514 -0.521 -0.553 -0.611 -0.694 -0.805 -0.942 -1.108 -1.303 -1.528 -1.784 -2.071 -2.393 -2.749 -3.142 -3.574 -4.046 -4.562 -5.124 -5.736 -6.401 -7.124 -7.910 -8.766 -9.698 -10.716 -11.831 -13.057 -14.410 -15.914 -17.598 -19.503 -21.685 -24.232 -27.279 -31.071 -36.117 -43.917 -73.570 -51.862 -49.536 -47.291 -39.975 -34.117 -29.718 -26.240 -23.376 -20.948 -18.849 -17.004 -15.365 -13.896 -12.569 -11.364 -10.266 -9.260 -8.338 -7.490 -6.709 -5.990 -5.327 -4.717 -4.155 -3.638 -3.163 -2.729 -2.332 -1.971 -1.645 -1.352 -1.090 -0.859 -0.657 -0.484 -0.338 -0.219 -0.126 -0.059 -0.017 0.000 -0.007 -0.038 -0.092 -0.170 -0.271 -0.395 -0.542 -0.711 -0.903 -1.118 -1.355 -1.615 -1.897 -2.203 -2.531 -2.883 -3.257 -3.655 -4.077 -4.522 -4.992 -5.486 -6.005 -6.550 -7.120 -7.717 -8.341 -8.992 -9.671 -10.380 -11.118 -11.886 -12.687 -13.519 -14.386 -15.288 -16.226 -17.202 -18.219 -19.277 -20.380 -21.530 -22.730 -23.984 -25.296 -26.672 -28.117 -29.640 -31.250 -32.959 -34.783 -36.740 -38.854 -41.156 -43.674 -46.419 -49.309 -51.981 -53.664 -53.955 -53.488 -52.986 -52.769 -52.928 -53.519 -54.637 -56.468 -59.270 -62.314 -61.285 -56.445 -52.345 -49.144 -46.530 -44.311 -42.371 -40.641 -39.075 -37.641 -36.318 -35.089 -33.942 -32.868 -31.859 -30.910 -30.016 -29.173 -28.378 -27.629 -26.922 -26.256 -25.630 -25.041 -24.489 -23.972 -23.489 -23.039 -22.622 -22.237 -21.882 -21.558 -21.263 -20.998 -20.761 -20.552 -20.372 -20.219 -20.093 -19.995 -19.923 -19.878 -19.859 -19.867 -19.901 -19.961 -20.047 -20.160 -20.298 -20.462 -20.653 -20.870 -21.113 -21.383 -21.679 -22.003 -22.354 -22.732 -23.137 -23.571 -24.034 -24.525 -25.045 -25.595 -26.175 -26.786 -27.428 -28.101 -28.807 -29.546 -30.318 -31.123 -31.963 -32.839 -33.749 -34.695 -35.678 -36.696 -37.751 -38.841 -39.967 -41.126 -42.318 -43.541 -44.791 -46.064 -47.355 -48.658 -49.964 -51.269 -52.575 -53.881 -55.187 0 1 1.0 1 N2 HV 20.21 25.51 0.05 -3.904e+10 4.509e+09 -3.853e+10 7.391e+09 -3.788e+10 1.012e+10 -3.705e+10 1.266e+10 -3.602e+10 1.498e+10 -3.476e+10 1.705e+10 -3.327e+10 1.881e+10 -3.153e+10 2.024e+10 -2.954e+10 2.128e+10 -2.733e+10 2.191e+10 -2.490e+10 2.209e+10 -2.229e+10 2.182e+10 -1.956e+10 2.110e+10 -1.674e+10 1.995e+10 -1.391e+10 1.839e+10 -1.113e+10 1.649e+10 -8.489e+09 1.431e+10 -6.056e+09 1.195e+10 -3.910e+09 9.526e+09 -2.117e+09 7.149e+09 -7.399e+08 4.965e+09 2.027e+08 3.122e+09 7.814e+08 1.756e+09 1.286e+09 8.703e+08 2.179e+09 7.844e+07 3.728e+09 -1.209e+09 5.962e+09 -3.419e+09 8.829e+09 -6.800e+09 1.226e+10 -1.152e+10 1.616e+10 -1.771e+10 2.043e+10 -2.544e+10 2.493e+10 -3.482e+10 2.953e+10 -4.586e+10 3.405e+10 -5.859e+10 3.832e+10 -7.298e+10 4.214e+10 -8.899e+10 4.531e+10 -1.065e+11 4.762e+10 -1.255e+11 4.887e+10 -1.456e+11 4.884e+10 -1.669e+11 4.735e+10 -1.889e+11 4.419e+10 -2.116e+11 3.919e+10 -2.345e+11 3.221e+10 -2.574e+11 2.310e+10 -2.799e+11 1.177e+10 -3.017e+11 -1.879e+09 -3.224e+11 -1.789e+10 -3.417e+11 -3.628e+10 -3.592e+11 -5.707e+10 -3.746e+11 -8.026e+10 -3.876e+11 -1.058e+11 -3.979e+11 -1.337e+11 -4.054e+11 -1.639e+11 -4.098e+11 -1.966e+11 -4.111e+11 -2.317e+11 -4.091e+11 -2.696e+11 -4.039e+11 -3.105e+11 -3.954e+11 -3.550e+11 -3.836e+11 -4.037e+11 -3.682e+11 -4.575e+11 -3.490e+11 -5.175e+11 -3.256e+11 -5.850e+11 -2.971e+11 -6.616e+11 -2.626e+11 -7.488e+11 -2.204e+11 -8.485e+11 -1.687e+11 -9.623e+11 -1.052e+11 -1.092e+12 -2.719e+10 -1.240e+12 6.898e+10 -1.408e+12 1.864e+11 -1.597e+12 3.291e+11 -1.809e+12 5.014e+11 -2.044e+12 7.074e+11 -2.305e+12 9.519e+11 -2.593e+12 1.240e+12 -2.907e+12 1.577e+12 -3.249e+12 1.968e+12 -3.620e+12 2.419e+12 -4.019e+12 2.934e+12 -4.448e+12 3.521e+12 -4.905e+12 4.184e+12 -5.391e+12 4.930e+12 -5.904e+12 5.764e+12 -6.445e+12 6.693e+12 -7.012e+12 7.722e+12 -7.604e+12 8.856e+12 -8.220e+12 1.010e+13 -8.857e+12 1.147e+13 -9.514e+12 1.295e+13 -1.019e+13 1.456e+13 -1.088e+13 1.630e+13 -1.158e+13 1.818e+13 -1.230e+13 2.019e+13 -1.302e+13 2.235e+13 -1.374e+13 2.464e+13 -1.447e+13 2.709e+13 -1.519e+13 2.967e+13 -1.591e+13 3.240e+13 -1.662e+13 3.528e+13 -1.731e+13 3.830e+13 -1.799e+13 4.146e+13 -1.866e+13 4.477e+13 -1.931e+13 4.821e+13 -1.993e+13 5.178e+13 -2.052e+13 5.548e+13 -2.108e+13 5.929e+13 -2.161e+13 6.322e+13 -2.210e+13 6.725e+13 -2.256e+13 7.138e+13 -2.297e+13 7.560e+13 -2.334e+13 7.990e+13 -2.367e+13 8.427e+13 -2.395e+13 8.871e+13 -2.419e+13 9.319e+13 -2.439e+13 9.773e+13 -2.454e+13 1.023e+14 -2.465e+13 1.069e+14 -2.471e+13 1.115e+14 -2.474e+13 1.161e+14 -2.472e+13 1.207e+14 -2.467e+13 1.253e+14 -2.459e+13 1.299e+14 -2.448e+13 1.345e+14 -2.434e+13 1.390e+14 -2.418e+13 1.435e+14 -2.400e+13 1.479e+14 -2.381e+13 1.523e+14 -2.361e+13 1.566e+14 -2.340e+13 1.608e+14 -2.320e+13 1.650e+14 -2.300e+13 1.690e+14 -2.282e+13 1.730e+14 -2.265e+13 1.769e+14 -2.251e+13 1.806e+14 -2.239e+13 1.843e+14 -2.231e+13 1.878e+14 -2.227e+13 1.913e+14 -2.227e+13 1.946e+14 -2.232e+13 1.978e+14 -2.242e+13 2.008e+14 -2.258e+13 2.037e+14 -2.279e+13 2.066e+14 -2.307e+13 2.093e+14 -2.341e+13 2.119e+14 -2.382e+13 2.143e+14 -2.431e+13 2.166e+14 -2.487e+13 2.188e+14 -2.550e+13 2.209e+14 -2.622e+13 2.228e+14 -2.701e+13 2.246e+14 -2.788e+13 2.263e+14 -2.884e+13 2.279e+14 -2.988e+13 2.294e+14 -3.099e+13 2.308e+14 -3.220e+13 2.321e+14 -3.348e+13 2.334e+14 -3.484e+13 2.345e+14 -3.629e+13 2.356e+14 -3.781e+13 2.367e+14 -3.941e+13 2.377e+14 -4.109e+13 2.386e+14 -4.285e+13 2.396e+14 -4.468e+13 2.405e+14 -4.658e+13 2.413e+14 -4.855e+13 2.422e+14 -5.059e+13 2.430e+14 -5.269e+13 2.439e+14 -5.485e+13 2.447e+14 -5.707e+13 2.455e+14 -5.933e+13 2.464e+14 -6.165e+13 2.472e+14 -6.401e+13 2.480e+14 -6.640e+13 2.489e+14 -6.882e+13 2.497e+14 -7.126e+13 2.505e+14 -7.371e+13 2.514e+14 -7.617e+13 2.522e+14 -7.863e+13 2.529e+14 -8.108e+13 2.537e+14 -8.350e+13 2.544e+14 -8.589e+13 2.551e+14 -8.821e+13 2.557e+14 -9.047e+13 2.563e+14 -9.266e+13 2.568e+14 -9.478e+13 2.573e+14 -9.682e+13 2.576e+14 -9.876e+13 2.579e+14 -1.006e+14 2.581e+14 -1.023e+14 2.582e+14 -1.039e+14 2.582e+14 -1.054e+14 2.580e+14 -1.067e+14 2.577e+14 -1.079e+14 2.573e+14 -1.089e+14 2.567e+14 -1.098e+14 2.560e+14 -1.105e+14 2.552e+14 -1.110e+14 2.541e+14 -1.113e+14 2.529e+14 -1.115e+14 2.515e+14 -1.115e+14 2.500e+14 -1.113e+14 2.482e+14 -1.109e+14 2.463e+14 -1.103e+14 2.441e+14 -1.095e+14 2.418e+14 -1.086e+14 2.393e+14 -1.075e+14 2.366e+14 -1.062e+14 2.336e+14 -1.048e+14 2.305e+14 -1.031e+14 2.272e+14 -1.014e+14 2.237e+14 -9.942e+13 2.199e+14 -9.734e+13 2.160e+14 -9.512e+13 2.119e+14 -9.276e+13 2.076e+14 -9.029e+13 2.032e+14 -8.770e+13 1.986e+14 -8.500e+13 1.938e+14 -8.221e+13 1.889e+14 -7.933e+13 1.838e+14 -7.638e+13 1.786e+14 -7.338e+13 1.733e+14 -7.033e+13 1.679e+14 -6.726e+13 1.624e+14 -6.415e+13 1.568e+14 -6.102e+13 1.512e+14 -5.789e+13 1.456e+14 -5.476e+13 1.399e+14 -5.165e+13 1.342e+14 -4.856e+13 1.284e+14 -4.552e+13 1.227e+14 -4.252e+13 1.171e+14 -3.958e+13 1.114e+14 -3.672e+13 1.059e+14 -3.393e+13 1.004e+14 -3.123e+13 9.500e+13 -2.863e+13 8.970e+13 -2.613e+13 8.451e+13 -2.374e+13 7.945e+13 -2.146e+13 7.452e+13 -1.929e+13 6.974e+13 -1.724e+13 6.511e+13 -1.532e+13 6.064e+13 -1.352e+13 5.633e+13 -1.184e+13 5.220e+13 -1.029e+13 4.824e+13 -8.849e+12 4.446e+13 -7.531e+12 4.087e+13 -6.328e+12 3.746e+13 -5.237e+12 3.423e+13 -4.253e+12 3.118e+13 -3.372e+12 2.832e+13 -2.589e+12 2.563e+13 -1.899e+12 2.313e+13 -1.296e+12 2.079e+13 -7.734e+11 1.862e+13 -3.268e+11 1.662e+13 5.021e+10 1.477e+13 3.638e+11 1.308e+13 6.195e+11 1.153e+13 8.230e+11 1.012e+13 9.802e+11 8.845e+12 1.096e+12 7.695e+12 1.177e+12 6.662e+12 1.226e+12 5.738e+12 1.248e+12 4.916e+12 1.248e+12 4.189e+12 1.230e+12 3.549e+12 1.197e+12 2.989e+12 1.153e+12 2.501e+12 1.100e+12 2.079e+12 1.042e+12 1.717e+12 9.800e+11 1.407e+12 9.168e+11 1.143e+12 8.538e+11 9.212e+11 7.924e+11 7.344e+11 7.333e+11 5.781e+11 6.773e+11 4.480e+11 6.247e+11 3.400e+11 5.756e+11 2.503e+11 5.300e+11 1.762e+11 4.875e+11 1.149e+11 4.477e+11 6.415e+10 4.104e+11 2.245e+10 3.751e+11 -1.165e+10 3.414e+11 -3.924e+10 3.092e+11 -6.111e+10 2.781e+11 -7.793e+10 2.482e+11 -9.024e+10 2.194e+11 -9.847e+10 1.917e+11 -1.030e+11 1.653e+11 -1.044e+11 1.404e+11 -1.029e+11 1.171e+11 -9.890e+10 9.546e+10 -9.291e+10 7.581e+10 -8.532e+10 5.823e+10 -7.658e+10 4.279e+10 -6.710e+10 2.959e+10 -5.732e+10 1.862e+10 -4.766e+10 9.808e+09 -3.848e+10 3.177e+09 -3.024e+10 -1.819e+09 -2.314e+10 -5.545e+09 -1.732e+10 -8.546e+09 -1.286e+10 -1.160e+10 -9.462e+09 -1.542e+10 -6.484e+09 -2.035e+10 -3.202e+09 -2.646e+10 9.668e+08 -3.360e+10 6.361e+09 -4.150e+10 1.310e+10 -4.994e+10 2.118e+10 -5.867e+10 3.052e+10 -6.743e+10 4.094e+10 -7.600e+10 5.224e+10 -8.420e+10 6.422e+10 -9.183e+10 7.660e+10 -9.873e+10 8.915e+10 -1.048e+11 1.016e+11 -1.099e+11 1.138e+11 -1.139e+11 1.254e+11 -1.168e+11 1.362e+11 -1.186e+11 1.460e+11 -1.192e+11 1.548e+11 -1.187e+11 1.623e+11 -1.171e+11 1.684e+11 -1.144e+11 1.732e+11 -1.108e+11 1.764e+11 -1.063e+11 1.782e+11 -1.011e+11 1.785e+11 -9.513e+10 1.774e+11 -8.866e+10 1.750e+11 -8.177e+10 1.713e+11 -7.459e+10 1.664e+11 -6.724e+10 1.605e+11 -5.986e+10 1.537e+11 -5.253e+10 1.462e+11 -4.539e+10 1.380e+11 -3.852e+10 1.294e+11 -3.201e+10 1.204e+11 -2.592e+10 1.112e+11 -2.032e+10 1.019e+11 -1.525e+10 9.272e+10 -1.072e+10 8.369e+10 -6.769e+09 7.491e+10 -3.381e+09 6.647e+10 -5.534e+08 5.844e+10 1.739e+09 5.089e+10 3.526e+09 4.385e+10 4.844e+09 3.738e+10 5.740e+09 3.147e+10 6.260e+09 2.614e+10 6.457e+09 2.139e+10 6.382e+09 1.721e+10 6.087e+09 1.358e+10 5.622e+09 1.048e+10 5.034e+09 7.862e+09 4.367e+09 5.699e+09 3.663e+09 3.954e+09 2.957e+09 2.582e+09 2.282e+09 1.543e+09 1.667e+09 7.939e+08 1.138e+09 2.907e+08 7.176e+08 -1.629e+07 4.172e+08 -1.921e+08 2.146e+08 -3.270e+08 3.105e+07 -5.095e+08 -2.370e+08 -7.773e+08 -6.649e+08 -1.118e+09 -1.295e+09 -1.503e+09 -2.156e+09 -1.901e+09 -3.269e+09 -2.286e+09 -4.654e+09 -2.628e+09 -6.326e+09 -2.899e+09 -8.302e+09 -3.073e+09 -1.059e+10 -3.121e+09 -1.320e+10 -3.019e+09 -1.613e+10 -2.741e+09 -1.938e+10 -2.265e+09 -2.293e+10 -1.572e+09 -2.679e+10 -6.461e+08 -3.091e+10 5.240e+08 -3.528e+10 1.943e+09 -3.986e+10 3.617e+09 -4.462e+10 5.542e+09 -4.949e+10 7.711e+09 -5.443e+10 1.011e+10 -5.939e+10 1.273e+10 -6.430e+10 1.553e+10 -6.911e+10 1.850e+10 -7.374e+10 2.160e+10 -7.814e+10 2.479e+10 -8.226e+10 2.805e+10 -8.601e+10 3.132e+10 -8.937e+10 3.456e+10 -9.226e+10 3.774e+10 -9.467e+10 4.080e+10 -9.654e+10 4.371e+10 -9.785e+10 4.643e+10 -9.858e+10 4.891e+10 -9.873e+10 5.111e+10 -9.830e+10 5.301e+10 -9.729e+10 5.457e+10 -9.572e+10 5.577e+10 -9.362e+10 5.658e+10 -9.102e+10 5.700e+10 -8.797e+10 5.701e+10 -8.450e+10 5.662e+10 -8.067e+10 5.581e+10 -7.654e+10 5.461e+10 -7.216e+10 5.303e+10 -6.759e+10 5.109e+10 -6.288e+10 4.883e+10 -5.810e+10 4.626e+10 -5.329e+10 4.343e+10 -4.852e+10 4.038e+10 -4.382e+10 3.716e+10 -3.925e+10 3.382e+10 -3.484e+10 3.041e+10 -3.063e+10 2.697e+10 -2.665e+10 2.357e+10 -2.293e+10 2.025e+10 -1.948e+10 1.706e+10 -1.631e+10 1.406e+10 -1.345e+10 1.127e+10 -1.090e+10 8.736e+09 -8.652e+09 6.494e+09 -6.714e+09 4.566e+09 -5.076e+09 2.968e+09 -3.735e+09 1.703e+09 -2.687e+09 7.595e+08 -1.928e+09 8.834e+07 -1.448e+09 -4.115e+08 -1.198e+09 -9.001e+08 -1.086e+09 -1.537e+09 -1.014e+09 -2.413e+09 -9.234e+08 -3.546e+09 -7.945e+08 -4.919e+09 -6.319e+08 -6.500e+09 -4.506e+08 -8.248e+09 -2.702e+08 -1.013e+10 -1.120e+08 -1.209e+10 3.325e+06 -1.411e+10 5.612e+07 -1.613e+10 2.857e+07 -1.813e+10 -9.463e+07 -2.006e+10 -3.263e+08 -2.190e+10 -6.762e+08 -2.362e+10 -1.151e+09 -2.519e+10 -1.755e+09 -2.659e+10 -2.490e+09 -2.782e+10 -3.353e+09 -2.886e+10 -4.342e+09 -2.971e+10 -5.451e+09 -3.036e+10 -6.673e+09 -3.081e+10 -8.003e+09 -3.108e+10 -9.431e+09 -3.117e+10 -1.095e+10 -3.110e+10 -1.256e+10 -3.087e+10 -1.426e+10 -3.051e+10 -1.604e+10 -3.002e+10 -1.790e+10 -2.943e+10 -1.986e+10 -2.874e+10 -2.192e+10 -2.797e+10 -2.408e+10 -2.712e+10 -2.635e+10 -2.619e+10 -2.875e+10 -2.519e+10 -3.127e+10 -2.411e+10 -3.394e+10 -2.294e+10 -3.676e+10 -2.168e+10 -3.972e+10 -2.032e+10 -4.283e+10 -1.885e+10 -4.608e+10 -1.726e+10 -4.947e+10 -1.554e+10 -5.299e+10 -1.368e+10 -5.661e+10 -1.168e+10 -6.031e+10 -9.546e+09 -6.408e+10 -7.270e+09 -6.789e+10 -4.865e+09 -7.170e+10 -2.336e+09 -7.550e+10 3.018e+08 -7.923e+10 3.031e+09 -8.289e+10 5.836e+09 -8.642e+10 8.693e+09 -8.979e+10 1.158e+10 -9.298e+10 1.447e+10 -9.595e+10 1.733e+10 -9.867e+10 2.015e+10 -1.011e+11 2.290e+10 -1.032e+11 2.554e+10 -1.050e+11 2.806e+10 -1.065e+11 3.044e+10 -1.076e+11 3.264e+10 -1.083e+11 3.466e+10 -1.086e+11 3.648e+10 -1.085e+11 3.809e+10 -1.080e+11 3.947e+10 -1.072e+11 4.061e+10 -1.059e+11 4.152e+10 -1.043e+11 4.219e+10 -1.023e+11 4.262e+10 -9.997e+10 4.281e+10 -9.735e+10 4.278e+10 -9.444e+10 4.252e+10 -9.128e+10 4.206e+10 -8.790e+10 4.140e+10 -8.432e+10 4.055e+10 -8.059e+10 3.954e+10 -7.675e+10 3.838e+10 -7.281e+10 3.709e+10 -6.882e+10 3.567e+10 -6.482e+10 3.416e+10 -6.082e+10 3.257e+10 -5.686e+10 3.091e+10 -5.297e+10 2.921e+10 -4.917e+10 2.747e+10 -4.548e+10 2.572e+10 -4.191e+10 2.397e+10 -3.848e+10 2.223e+10 -3.521e+10 2.052e+10 -3.210e+10 1.885e+10 -2.915e+10 1.722e+10 -2.638e+10 1.566e+10 -2.378e+10 1.416e+10 -2.136e+10 1.273e+10 -1.910e+10 1.137e+10 -1.702e+10 1.010e+10 -1.510e+10 8.919e+09 -1.334e+10 7.820e+09 -1.173e+10 6.808e+09 -1.027e+10 5.883e+09 -8.946e+09 5.043e+09 -7.754e+09 4.287e+09 -6.686e+09 3.612e+09 -5.732e+09 3.014e+09 -4.889e+09 2.489e+09 -4.145e+09 2.034e+09 -3.492e+09 1.640e+09 -2.924e+09 1.306e+09 -2.433e+09 1.024e+09 -2.012e+09 7.892e+08 -1.653e+09 5.965e+08 -1.350e+09 4.404e+08 -1.097e+09 3.158e+08 -8.870e+08 2.181e+08 -7.149e+08 1.429e+08 -5.750e+08 8.607e+07 -4.629e+08 4.403e+07 -3.740e+08 1.361e+07 -3.042e+08 -7.961e+06 -2.503e+08 -2.291e+07 -2.091e+08 -3.309e+07 -1.781e+08 -3.994e+07 -1.553e+08 -4.451e+07 -1.389e+08 -4.757e+07 -1.278e+08 -4.966e+07 -1.209e+08 -5.111e+07 -1.176e+08 -5.218e+07 -1.173e+08 -5.304e+07 -1.199e+08 -5.380e+07 -1.250e+08 -5.457e+07 -1.325e+08 -5.540e+07 -1.423e+08 -5.637e+07 -1.541e+08 -5.751e+07 -1.679e+08 -5.888e+07 -1.834e+08 -6.053e+07 -2.002e+08 -6.250e+07 -2.181e+08 -6.487e+07 -2.366e+08 -6.769e+07 -2.553e+08 -7.103e+07 -2.737e+08 -7.495e+07 -2.914e+08 -7.950e+07 -3.080e+08 -8.471e+07 -3.230e+08 -9.061e+07 -3.361e+08 -9.719e+07 -3.471e+08 -1.044e+08 -3.556e+08 -1.123e+08 -3.616e+08 -1.208e+08 -3.650e+08 -1.298e+08 -3.658e+08 -1.393e+08 -3.641e+08 -1.492e+08 -3.599e+08 -1.594e+08 -3.534e+08 -1.699e+08 -3.449e+08 -1.806e+08 -3.344e+08 -1.915e+08 -3.223e+08 -2.026e+08 -3.088e+08 -2.140e+08 -2.939e+08 -2.256e+08 -2.781e+08 -2.377e+08 -2.612e+08 -2.501e+08 -2.437e+08 -2.632e+08 -2.254e+08 -2.770e+08 -2.064e+08 -2.918e+08 -1.866e+08 -3.078e+08 -1.660e+08 -3.251e+08 -1.442e+08 -3.440e+08 -1.211e+08 -3.646e+08 -9.623e+07 -3.872e+08 -6.922e+07 -4.117e+08 -3.968e+07 -4.382e+08 -7.154e+06 -4.665e+08 2.881e+07 -4.966e+08 0.005 -64.630 -62.268 -59.907 -57.545 -55.183 -52.847 -50.746 -48.825 -47.049 -45.392 -43.838 -42.373 -40.989 -39.677 -38.432 -37.250 -36.126 -35.057 -34.040 -33.073 -32.152 -31.277 -30.445 -29.654 -28.904 -28.193 -27.519 -26.882 -26.280 -25.712 -25.178 -24.677 -24.207 -23.769 -23.362 -22.985 -22.638 -22.321 -22.032 -21.771 -21.539 -21.335 -21.159 -21.010 -20.889 -20.794 -20.728 -20.688 -20.676 -20.691 -20.733 -20.803 -20.901 -21.026 -21.179 -21.360 -21.570 -21.809 -22.076 -22.373 -22.700 -23.057 -23.446 -23.865 -24.317 -24.802 -25.320 -25.873 -26.460 -27.085 -27.746 -28.447 -29.187 -29.969 -30.794 -31.664 -32.581 -33.546 -34.563 -35.633 -36.756 -37.934 -39.163 -40.437 -41.739 -43.040 -44.286 -45.403 -46.299 -46.897 -47.170 -47.159 -46.947 -46.622 -46.249 -45.865 -45.485 -45.104 -44.701 -44.242 -43.683 -42.975 -42.088 -41.013 -39.771 -38.400 -36.946 -35.451 -33.946 -32.454 -30.990 -29.564 -28.179 -26.838 -25.543 -24.293 -23.087 -21.924 -20.803 -19.723 -18.682 -17.679 -16.713 -15.783 -14.887 -14.024 -13.194 -12.396 -11.628 -10.890 -10.181 -9.501 -8.848 -8.223 -7.624 -7.052 -6.505 -5.983 -5.487 -5.015 -4.567 -4.143 -3.743 -3.366 -3.012 -2.682 -2.374 -2.090 -1.828 -1.588 -1.372 -1.178 -1.008 -0.860 -0.735 -0.633 -0.555 -0.500 -0.469 -0.463 -0.480 -0.523 -0.591 -0.685 -0.806 -0.954 -1.130 -1.335 -1.570 -1.837 -2.135 -2.467 -2.834 -3.238 -3.681 -4.165 -4.693 -5.268 -5.893 -6.572 -7.310 -8.112 -8.985 -9.936 -10.974 -12.113 -13.364 -14.747 -16.286 -18.011 -19.964 -22.208 -24.832 -27.982 -31.916 -37.175 -45.325 -75.652 -55.693 -63.377 -48.473 -38.930 -33.145 -28.919 -25.579 -22.819 -20.471 -18.434 -16.639 -15.042 -13.607 -12.309 -11.130 -10.053 -9.067 -8.162 -7.329 -6.563 -5.856 -5.205 -4.605 -4.052 -3.544 -3.078 -2.651 -2.262 -1.909 -1.589 -1.302 -1.046 -0.820 -0.624 -0.456 -0.315 -0.201 -0.113 -0.050 -0.013 0.000 -0.011 -0.046 -0.105 -0.187 -0.292 -0.420 -0.571 -0.745 -0.941 -1.160 -1.401 -1.666 -1.953 -2.263 -2.597 -2.953 -3.333 -3.736 -4.164 -4.615 -5.091 -5.592 -6.119 -6.670 -7.249 -7.854 -8.486 -9.147 -9.837 -10.556 -11.305 -12.086 -12.899 -13.746 -14.628 -15.546 -16.501 -17.496 -18.532 -19.612 -20.738 -21.912 -23.139 -24.421 -25.763 -27.171 -28.651 -30.210 -31.859 -33.608 -35.474 -37.476 -39.636 -41.986 -44.553 -47.347 -50.288 -53.008 -54.740 -55.077 -54.653 -54.192 -54.010 -54.199 -54.815 -55.952 -57.795 -60.602 -63.645 -62.608 -57.754 -53.636 -50.410 -47.767 -45.515 -43.540 -41.771 -40.164 -38.688 -37.322 -36.050 -34.859 -33.742 -32.690 -31.698 -30.762 -29.877 -29.042 -28.252 -27.506 -26.802 -26.137 -25.512 -24.923 -24.370 -23.853 -23.369 -22.917 -22.498 -22.110 -21.753 -21.426 -21.128 -20.858 -20.618 -20.405 -20.219 -20.061 -19.929 -19.824 -19.745 -19.692 -19.665 -19.663 -19.687 -19.736 -19.811 -19.910 -20.034 -20.184 -20.358 -20.557 -20.781 -21.031 -21.305 -21.605 -21.929 -22.280 -22.656 -23.057 -23.485 -23.939 -24.419 -24.925 -25.459 -26.019 -26.607 -27.222 -27.864 -28.534 -29.232 -29.959 -30.713 -31.495 -32.305 -33.143 -34.008 -34.900 -35.818 -36.760 -37.726 -38.714 -39.720 -40.742 -41.776 -42.818 -43.861 -44.899 -45.937 -46.975 -48.012 -49.050 0 1 1.0 1 N2 VV 20.21 25.51 0.05 -8.242e+09 4.169e+10 -5.245e+09 4.184e+10 -2.398e+09 4.180e+10 2.896e+08 4.154e+10 2.798e+09 4.104e+10 5.099e+09 4.025e+10 7.165e+09 3.915e+10 8.966e+09 3.773e+10 1.047e+10 3.597e+10 1.165e+10 3.388e+10 1.249e+10 3.147e+10 1.297e+10 2.877e+10 1.309e+10 2.583e+10 1.285e+10 2.269e+10 1.227e+10 1.943e+10 1.137e+10 1.613e+10 1.020e+10 1.289e+10 8.827e+09 9.792e+09 7.315e+09 6.953e+09 5.749e+09 4.470e+09 4.233e+09 2.441e+09 2.889e+09 9.334e+08 1.858e+09 -7.301e+07 1.241e+09 -8.386e+08 8.545e+08 -1.916e+09 2.689e+08 -3.752e+09 -8.779e+08 -6.521e+09 -2.818e+09 -1.026e+10 -5.717e+09 -1.498e+10 -9.705e+09 -2.062e+10 -1.489e+10 -2.713e+10 -2.138e+10 -3.442e+10 -2.925e+10 -4.236e+10 -3.854e+10 -5.082e+10 -4.930e+10 -5.962e+10 -6.154e+10 -6.856e+10 -7.522e+10 -7.743e+10 -9.031e+10 -8.600e+10 -1.067e+11 -9.402e+10 -1.243e+11 -1.012e+11 -1.431e+11 -1.074e+11 -1.627e+11 -1.122e+11 -1.830e+11 -1.155e+11 -2.038e+11 -1.169e+11 -2.249e+11 -1.163e+11 -2.460e+11 -1.135e+11 -2.669e+11 -1.083e+11 -2.873e+11 -1.004e+11 -3.071e+11 -8.992e+10 -3.260e+11 -7.658e+10 -3.440e+11 -6.031e+10 -3.608e+11 -4.105e+10 -3.765e+11 -1.867e+10 -3.911e+11 6.984e+09 -4.047e+11 3.608e+10 -4.174e+11 6.895e+10 -4.293e+11 1.060e+11 -4.407e+11 1.479e+11 -4.518e+11 1.953e+11 -4.627e+11 2.494e+11 -4.734e+11 3.114e+11 -4.839e+11 3.829e+11 -4.938e+11 4.659e+11 -5.026e+11 5.623e+11 -5.094e+11 6.745e+11 -5.132e+11 8.052e+11 -5.127e+11 9.567e+11 -5.061e+11 1.132e+12 -4.916e+11 1.335e+12 -4.669e+11 1.568e+12 -4.296e+11 1.834e+12 -3.771e+11 2.137e+12 -3.064e+11 2.479e+12 -2.143e+11 2.864e+12 -9.731e+10 3.296e+12 4.814e+10 3.778e+12 2.260e+11 4.313e+12 4.407e+11 4.905e+12 6.962e+11 5.557e+12 9.972e+11 6.272e+12 1.349e+12 7.055e+12 1.755e+12 7.907e+12 2.222e+12 8.831e+12 2.755e+12 9.832e+12 3.357e+12 1.091e+13 4.036e+12 1.207e+13 4.795e+12 1.331e+13 5.639e+12 1.464e+13 6.574e+12 1.605e+13 7.603e+12 1.754e+13 8.731e+12 1.913e+13 9.961e+12 2.080e+13 1.130e+13 2.256e+13 1.274e+13 2.440e+13 1.429e+13 2.632e+13 1.596e+13 2.833e+13 1.774e+13 3.042e+13 1.962e+13 3.259e+13 2.163e+13 3.483e+13 2.374e+13 3.714e+13 2.596e+13 3.951e+13 2.828e+13 4.196e+13 3.071e+13 4.446e+13 3.324e+13 4.702e+13 3.587e+13 4.963e+13 3.858e+13 5.228e+13 4.138e+13 5.496e+13 4.426e+13 5.768e+13 4.721e+13 6.043e+13 5.023e+13 6.320e+13 5.331e+13 6.599e+13 5.646e+13 6.879e+13 5.965e+13 7.160e+13 6.289e+13 7.442e+13 6.617e+13 7.724e+13 6.948e+13 8.006e+13 7.282e+13 8.287e+13 7.618e+13 8.567e+13 7.956e+13 8.847e+13 8.295e+13 9.125e+13 8.635e+13 9.401e+13 8.975e+13 9.676e+13 9.314e+13 9.949e+13 9.651e+13 1.022e+14 9.986e+13 1.049e+14 1.032e+14 1.076e+14 1.065e+14 1.102e+14 1.097e+14 1.128e+14 1.129e+14 1.154e+14 1.160e+14 1.180e+14 1.191e+14 1.205e+14 1.221e+14 1.230e+14 1.250e+14 1.255e+14 1.278e+14 1.280e+14 1.304e+14 1.304e+14 1.330e+14 1.328e+14 1.354e+14 1.351e+14 1.377e+14 1.374e+14 1.399e+14 1.397e+14 1.419e+14 1.420e+14 1.437e+14 1.442e+14 1.454e+14 1.465e+14 1.470e+14 1.487e+14 1.484e+14 1.508e+14 1.496e+14 1.530e+14 1.507e+14 1.551e+14 1.515e+14 1.573e+14 1.523e+14 1.594e+14 1.528e+14 1.615e+14 1.532e+14 1.636e+14 1.535e+14 1.657e+14 1.536e+14 1.679e+14 1.536e+14 1.700e+14 1.535e+14 1.722e+14 1.533e+14 1.744e+14 1.529e+14 1.766e+14 1.525e+14 1.788e+14 1.520e+14 1.811e+14 1.514e+14 1.834e+14 1.507e+14 1.858e+14 1.500e+14 1.882e+14 1.493e+14 1.907e+14 1.485e+14 1.932e+14 1.476e+14 1.958e+14 1.467e+14 1.985e+14 1.458e+14 2.011e+14 1.449e+14 2.039e+14 1.440e+14 2.067e+14 1.430e+14 2.095e+14 1.420e+14 2.124e+14 1.410e+14 2.153e+14 1.400e+14 2.182e+14 1.390e+14 2.211e+14 1.379e+14 2.241e+14 1.369e+14 2.271e+14 1.358e+14 2.300e+14 1.347e+14 2.330e+14 1.335e+14 2.359e+14 1.323e+14 2.388e+14 1.311e+14 2.416e+14 1.299e+14 2.444e+14 1.286e+14 2.471e+14 1.274e+14 2.496e+14 1.260e+14 2.521e+14 1.247e+14 2.545e+14 1.233e+14 2.567e+14 1.219e+14 2.588e+14 1.205e+14 2.608e+14 1.191e+14 2.626e+14 1.176e+14 2.643e+14 1.162e+14 2.657e+14 1.147e+14 2.670e+14 1.132e+14 2.680e+14 1.117e+14 2.689e+14 1.102e+14 2.695e+14 1.087e+14 2.699e+14 1.072e+14 2.700e+14 1.057e+14 2.699e+14 1.042e+14 2.695e+14 1.027e+14 2.688e+14 1.012e+14 2.679e+14 9.979e+13 2.666e+14 9.833e+13 2.651e+14 9.689e+13 2.633e+14 9.545e+13 2.611e+14 9.401e+13 2.587e+14 9.258e+13 2.560e+14 9.115e+13 2.529e+14 8.971e+13 2.496e+14 8.826e+13 2.460e+14 8.681e+13 2.421e+14 8.534e+13 2.379e+14 8.385e+13 2.334e+14 8.234e+13 2.287e+14 8.081e+13 2.237e+14 7.925e+13 2.185e+14 7.767e+13 2.130e+14 7.605e+13 2.074e+14 7.440e+13 2.016e+14 7.272e+13 1.956e+14 7.101e+13 1.895e+14 6.925e+13 1.833e+14 6.746e+13 1.769e+14 6.565e+13 1.705e+14 6.380e+13 1.640e+14 6.193e+13 1.575e+14 6.004e+13 1.509e+14 5.813e+13 1.444e+14 5.621e+13 1.378e+14 5.428e+13 1.313e+14 5.233e+13 1.248e+14 5.039e+13 1.184e+14 4.845e+13 1.121e+14 4.651e+13 1.059e+14 4.458e+13 9.987e+13 4.266e+13 9.393e+13 4.077e+13 8.813e+13 3.889e+13 8.250e+13 3.704e+13 7.704e+13 3.521e+13 7.175e+13 3.342e+13 6.665e+13 3.167e+13 6.176e+13 2.995e+13 5.706e+13 2.827e+13 5.256e+13 2.663e+13 4.828e+13 2.504e+13 4.421e+13 2.349e+13 4.036e+13 2.199e+13 3.672e+13 2.054e+13 3.329e+13 1.915e+13 3.008e+13 1.781e+13 2.707e+13 1.652e+13 2.427e+13 1.528e+13 2.167e+13 1.410e+13 1.927e+13 1.298e+13 1.706e+13 1.191e+13 1.503e+13 1.090e+13 1.317e+13 9.949e+12 1.149e+13 9.052e+12 9.963e+12 8.210e+12 8.589e+12 7.423e+12 7.358e+12 6.692e+12 6.262e+12 6.014e+12 5.291e+12 5.387e+12 4.434e+12 4.809e+12 3.684e+12 4.279e+12 3.030e+12 3.794e+12 2.464e+12 3.353e+12 1.978e+12 2.954e+12 1.565e+12 2.595e+12 1.214e+12 2.272e+12 9.205e+11 1.984e+12 6.765e+11 1.728e+12 4.753e+11 1.502e+12 3.114e+11 1.303e+12 1.791e+11 1.128e+12 7.344e+10 9.759e+11 -9.814e+09 8.430e+11 -7.459e+10 7.274e+11 -1.243e+11 6.271e+11 -1.616e+11 5.399e+11 -1.889e+11 4.639e+11 -2.081e+11 3.976e+11 -2.207e+11 3.396e+11 -2.278e+11 2.885e+11 -2.304e+11 2.434e+11 -2.291e+11 2.035e+11 -2.245e+11 1.681e+11 -2.171e+11 1.368e+11 -2.071e+11 1.092e+11 -1.950e+11 8.490e+10 -1.811e+11 6.378e+10 -1.658e+11 4.562e+10 -1.495e+11 3.023e+10 -1.325e+11 1.748e+10 -1.153e+11 7.195e+09 -9.819e+10 -8.190e+08 -8.165e+10 -6.742e+09 -6.606e+10 -1.081e+10 -5.173e+10 -1.331e+10 -3.897e+10 -1.475e+10 -2.788e+10 -1.483e+10 -1.916e+10 -1.480e+10 -1.200e+10 -1.493e+10 -6.399e+09 -1.572e+10 -1.661e+09 -1.743e+10 3.172e+09 -1.999e+10 8.958e+09 -2.309e+10 1.625e+10 -2.643e+10 2.527e+10 -2.971e+10 3.600e+10 -3.272e+10 4.830e+10 -3.527e+10 6.195e+10 -3.725e+10 7.664e+10 -3.856e+10 9.208e+10 -3.916e+10 1.080e+11 -3.900e+10 1.239e+11 -3.809e+10 1.396e+11 -3.646e+10 1.548e+11 -3.414e+10 1.692e+11 -3.118e+10 1.824e+11 -2.766e+10 1.944e+11 -2.365e+10 2.048e+11 -1.925e+10 2.136e+11 -1.454e+10 2.206e+11 -9.613e+09 2.257e+11 -4.563e+09 2.290e+11 5.237e+08 2.304e+11 5.554e+09 2.299e+11 1.045e+10 2.277e+11 1.515e+10 2.239e+11 1.956e+10 2.185e+11 2.365e+10 2.116e+11 2.736e+10 2.036e+11 3.064e+10 1.945e+11 3.347e+10 1.844e+11 3.582e+10 1.737e+11 3.769e+10 1.624e+11 3.905e+10 1.508e+11 3.993e+10 1.389e+11 4.032e+10 1.270e+11 4.026e+10 1.152e+11 3.976e+10 1.037e+11 3.886e+10 9.252e+10 3.758e+10 8.181e+10 3.598e+10 7.165e+10 3.410e+10 6.212e+10 3.197e+10 5.327e+10 2.966e+10 4.513e+10 2.722e+10 3.775e+10 2.468e+10 3.111e+10 2.210e+10 2.523e+10 1.953e+10 2.008e+10 1.701e+10 1.564e+10 1.458e+10 1.187e+10 1.227e+10 8.726e+09 1.011e+10 6.163e+09 8.125e+09 4.122e+09 6.344e+09 2.551e+09 4.777e+09 1.387e+09 3.434e+09 5.722e+08 2.325e+09 4.801e+07 1.452e+09 -2.470e+08 8.115e+08 -3.782e+08 3.799e+08 -4.239e+08 8.459e+07 -4.734e+08 -2.072e+08 -5.866e+08 -6.278e+08 -7.550e+08 -1.251e+09 -9.287e+08 -2.105e+09 -1.057e+09 -3.200e+09 -1.097e+09 -4.542e+09 -1.010e+09 -6.135e+09 -7.597e+08 -7.975e+09 -3.134e+08 -1.006e+10 3.605e+08 -1.240e+10 1.291e+09 -1.496e+10 2.501e+09 -1.775e+10 4.015e+09 -2.075e+10 5.848e+09 -2.393e+10 8.011e+09 -2.728e+10 1.051e+10 -3.077e+10 1.335e+10 -3.437e+10 1.651e+10 -3.806e+10 1.998e+10 -4.178e+10 2.375e+10 -4.551e+10 2.779e+10 -4.920e+10 3.207e+10 -5.282e+10 3.654e+10 -5.632e+10 4.117e+10 -5.967e+10 4.592e+10 -6.281e+10 5.072e+10 -6.572e+10 5.554e+10 -6.835e+10 6.031e+10 -7.067e+10 6.498e+10 -7.265e+10 6.949e+10 -7.427e+10 7.378e+10 -7.550e+10 7.781e+10 -7.631e+10 8.152e+10 -7.671e+10 8.486e+10 -7.668e+10 8.778e+10 -7.622e+10 9.023e+10 -7.534e+10 9.219e+10 -7.405e+10 9.362e+10 -7.238e+10 9.450e+10 -7.033e+10 9.479e+10 -6.794e+10 9.450e+10 -6.525e+10 9.362e+10 -6.229e+10 9.216e+10 -5.911e+10 9.012e+10 -5.575e+10 8.754e+10 -5.224e+10 8.443e+10 -4.865e+10 8.084e+10 -4.502e+10 7.681e+10 -4.138e+10 7.240e+10 -3.777e+10 6.767e+10 -3.425e+10 6.268e+10 -3.083e+10 5.749e+10 -2.755e+10 5.219e+10 -2.444e+10 4.684e+10 -2.151e+10 4.152e+10 -1.878e+10 3.629e+10 -1.625e+10 3.124e+10 -1.393e+10 2.642e+10 -1.183e+10 2.189e+10 -9.934e+09 1.772e+10 -8.247e+09 1.394e+10 -6.759e+09 1.059e+10 -5.461e+09 7.703e+09 -4.343e+09 5.294e+09 -3.403e+09 3.369e+09 -2.644e+09 1.911e+09 -2.086e+09 8.662e+08 -1.761e+09 1.202e+08 -1.682e+09 -5.238e+08 -1.810e+09 -1.282e+09 -2.073e+09 -2.297e+09 -2.410e+09 -3.616e+09 -2.791e+09 -5.233e+09 -3.205e+09 -7.114e+09 -3.650e+09 -9.217e+09 -4.133e+09 -1.150e+10 -4.659e+09 -1.390e+10 -5.235e+09 -1.638e+10 -5.867e+09 -1.889e+10 -6.563e+09 -2.137e+10 -7.326e+09 -2.379e+10 -8.162e+09 -2.611e+10 -9.073e+09 -2.827e+10 -1.006e+10 -3.026e+10 -1.112e+10 -3.203e+10 -1.226e+10 -3.356e+10 -1.347e+10 -3.483e+10 -1.475e+10 -3.581e+10 -1.608e+10 -3.651e+10 -1.748e+10 -3.691e+10 -1.891e+10 -3.702e+10 -2.039e+10 -3.683e+10 -2.190e+10 -3.637e+10 -2.344e+10 -3.564e+10 -2.500e+10 -3.466e+10 -2.658e+10 -3.346e+10 -2.818e+10 -3.206e+10 -2.981e+10 -3.049e+10 -3.148e+10 -2.876e+10 -3.320e+10 -2.689e+10 -3.498e+10 -2.491e+10 -3.684e+10 -2.282e+10 -3.879e+10 -2.062e+10 -4.086e+10 -1.833e+10 -4.306e+10 -1.593e+10 -4.541e+10 -1.341e+10 -4.791e+10 -1.076e+10 -5.058e+10 -7.978e+09 -5.340e+10 -5.037e+09 -5.638e+10 -1.931e+09 -5.950e+10 1.345e+09 -6.274e+10 4.796e+09 -6.607e+10 8.415e+09 -6.948e+10 1.219e+10 -7.294e+10 1.611e+10 -7.641e+10 2.014e+10 -7.985e+10 2.427e+10 -8.325e+10 2.845e+10 -8.656e+10 3.266e+10 -8.976e+10 3.685e+10 -9.281e+10 4.100e+10 -9.569e+10 4.506e+10 -9.836e+10 4.900e+10 -1.008e+11 5.279e+10 -1.030e+11 5.639e+10 -1.049e+11 5.978e+10 -1.066e+11 6.293e+10 -1.079e+11 6.583e+10 -1.089e+11 6.846e+10 -1.096e+11 7.080e+10 -1.099e+11 7.284e+10 -1.099e+11 7.459e+10 -1.096e+11 7.603e+10 -1.089e+11 7.716e+10 -1.078e+11 7.799e+10 -1.065e+11 7.852e+10 -1.048e+11 7.875e+10 -1.028e+11 7.869e+10 -1.005e+11 7.833e+10 -9.791e+10 7.770e+10 -9.508e+10 7.681e+10 -9.201e+10 7.566e+10 -8.874e+10 7.427e+10 -8.529e+10 7.265e+10 -8.169e+10 7.081e+10 -7.797e+10 6.876e+10 -7.416e+10 6.654e+10 -7.028e+10 6.414e+10 -6.637e+10 6.159e+10 -6.246e+10 5.891e+10 -5.856e+10 5.612e+10 -5.471e+10 5.323e+10 -5.094e+10 5.028e+10 -4.726e+10 4.729e+10 -4.368e+10 4.427e+10 -4.023e+10 4.126e+10 -3.692e+10 3.827e+10 -3.376e+10 3.531e+10 -3.076e+10 3.243e+10 -2.793e+10 2.962e+10 -2.526e+10 2.692e+10 -2.276e+10 2.432e+10 -2.042e+10 2.186e+10 -1.826e+10 1.953e+10 -1.625e+10 1.734e+10 -1.441e+10 1.531e+10 -1.271e+10 1.343e+10 -1.116e+10 1.170e+10 -9.757e+09 1.013e+10 -8.481e+09 8.711e+09 -7.334e+09 7.440e+09 -6.304e+09 6.308e+09 -5.384e+09 5.308e+09 -4.568e+09 4.433e+09 -3.848e+09 3.672e+09 -3.216e+09 3.016e+09 -2.666e+09 2.457e+09 -2.192e+09 1.983e+09 -1.785e+09 1.586e+09 -1.439e+09 1.255e+09 -1.149e+09 9.831e+08 -9.064e+08 7.611e+08 -7.073e+08 5.822e+08 -5.456e+08 4.395e+08 -4.159e+08 3.269e+08 -3.137e+08 2.393e+08 -2.343e+08 1.720e+08 -1.736e+08 1.210e+08 -1.283e+08 8.314e+07 -9.519e+07 5.543e+07 -7.159e+07 3.553e+07 -5.548e+07 2.150e+07 -4.521e+07 1.164e+07 -3.959e+07 4.453e+06 -3.782e+07 -1.312e+06 -3.938e+07 -6.694e+06 -4.404e+07 -1.245e+07 -5.174e+07 -1.906e+07 -6.263e+07 -2.681e+07 -7.695e+07 -3.587e+07 -9.495e+07 -4.634e+07 -1.169e+08 -5.827e+07 -1.428e+08 -7.170e+07 -1.729e+08 -8.664e+07 -2.070e+08 -1.031e+08 -2.448e+08 -1.210e+08 -2.861e+08 -1.404e+08 -3.302e+08 -1.612e+08 -3.767e+08 -1.835e+08 -4.248e+08 -2.073e+08 -4.739e+08 -2.326e+08 -5.232e+08 -2.594e+08 -5.720e+08 -2.878e+08 -6.197e+08 -3.178e+08 -6.657e+08 -3.497e+08 -7.095e+08 -3.835e+08 -7.506e+08 -4.192e+08 -7.887e+08 -4.571e+08 -8.237e+08 -4.973e+08 -8.553e+08 -5.400e+08 -8.833e+08 -5.854e+08 -9.078e+08 -6.337e+08 -9.287e+08 -6.850e+08 -9.460e+08 -7.397e+08 -9.596e+08 -7.978e+08 -9.695e+08 -8.594e+08 -9.758e+08 -9.246e+08 -9.782e+08 -9.936e+08 -9.765e+08 -1.066e+09 -9.705e+08 -1.142e+09 -9.600e+08 -1.222e+09 -9.445e+08 -1.304e+09 -9.236e+08 -1.389e+09 -8.969e+08 -1.475e+09 -8.641e+08 -1.562e+09 -8.247e+08 -1.650e+09 -7.782e+08 -1.736e+09 0.005 -61.072 -59.551 -58.031 -56.510 -54.990 -53.447 -51.706 -49.904 -48.122 -46.400 -44.755 -43.191 -41.707 -40.301 -38.967 -37.701 -36.500 -35.360 -34.277 -33.249 -32.272 -31.344 -30.463 -29.627 -28.834 -28.082 -27.370 -26.697 -26.060 -25.460 -24.895 -24.363 -23.865 -23.399 -22.965 -22.562 -22.189 -21.846 -21.532 -21.248 -20.992 -20.764 -20.565 -20.393 -20.249 -20.132 -20.042 -19.980 -19.944 -19.936 -19.955 -20.001 -20.075 -20.176 -20.304 -20.460 -20.644 -20.856 -21.097 -21.366 -21.664 -21.991 -22.349 -22.736 -23.155 -23.605 -24.087 -24.602 -25.150 -25.733 -26.351 -27.006 -27.698 -28.430 -29.202 -30.017 -30.877 -31.785 -32.743 -33.757 -34.831 -35.971 -37.185 -38.484 -39.881 -41.394 -43.047 -44.872 -46.916 -49.240 -51.914 -54.968 -58.085 -59.945 -59.557 -58.208 -57.090 -56.545 -56.637 -57.420 -58.827 -59.645 -57.264 -53.077 -49.159 -45.796 -42.884 -40.311 -37.994 -35.881 -33.931 -32.118 -30.419 -28.819 -27.308 -25.874 -24.510 -23.210 -21.969 -20.782 -19.646 -18.557 -17.514 -16.512 -15.551 -14.629 -13.743 -12.893 -12.077 -11.294 -10.542 -9.822 -9.131 -8.469 -7.836 -7.230 -6.652 -6.100 -5.574 -5.073 -4.597 -4.146 -3.720 -3.317 -2.939 -2.584 -2.252 -1.943 -1.658 -1.395 -1.155 -0.939 -0.745 -0.575 -0.427 -0.302 -0.201 -0.123 -0.068 -0.038 -0.031 -0.049 -0.092 -0.161 -0.255 -0.376 -0.524 -0.700 -0.905 -1.140 -1.405 -1.703 -2.034 -2.400 -2.802 -3.243 -3.725 -4.250 -4.821 -5.441 -6.115 -6.847 -7.641 -8.505 -9.445 -10.470 -11.591 -12.822 -14.179 -15.685 -17.366 -19.261 -21.422 -23.926 -26.889 -30.499 -35.099 -41.411 -51.442 -76.580 -60.493 -46.028 -38.181 -32.805 -28.724 -25.446 -22.714 -20.380 -18.349 -16.558 -14.961 -13.527 -12.230 -11.051 -9.975 -8.989 -8.085 -7.253 -6.488 -5.783 -5.133 -4.535 -3.985 -3.479 -3.016 -2.592 -2.206 -1.856 -1.539 -1.256 -1.004 -0.782 -0.590 -0.426 -0.290 -0.180 -0.097 -0.040 -0.008 0.000 -0.017 -0.058 -0.122 -0.210 -0.322 -0.456 -0.614 -0.794 -0.998 -1.224 -1.473 -1.746 -2.041 -2.360 -2.702 -3.067 -3.457 -3.870 -4.307 -4.770 -5.257 -5.769 -6.307 -6.872 -7.464 -8.083 -8.730 -9.407 -10.113 -10.850 -11.619 -12.420 -13.255 -14.126 -15.034 -15.980 -16.967 -17.997 -19.072 -20.195 -21.370 -22.602 -23.894 -25.253 -26.686 -28.203 -29.815 -31.538 -33.393 -35.406 -37.613 -40.062 -42.801 -45.831 -48.859 -50.809 -50.687 -49.396 -48.041 -46.961 -46.165 -45.608 -45.233 -45.001 -44.883 -44.851 -44.884 -44.954 -45.029 -45.069 -45.022 -44.831 -44.448 -43.846 -43.034 -42.051 -40.950 -39.784 -38.595 -37.414 -36.258 -35.140 -34.066 -33.039 -32.060 -31.129 -30.246 -29.408 -28.615 -27.865 -27.157 -26.490 -25.861 -25.271 -24.717 -24.199 -23.716 -23.266 -22.850 -22.466 -22.112 -21.790 -21.498 -21.236 -21.002 -20.797 -20.621 -20.472 -20.350 -20.256 -20.188 -20.148 -20.134 -20.146 -20.184 -20.248 -20.338 -20.454 -20.595 -20.762 -20.955 -21.174 -21.418 -21.688 -21.985 -22.308 -22.656 -23.032 -23.434 -23.864 -24.320 -24.804 -25.316 -25.856 -26.425 -27.022 -27.649 -28.305 -28.991 -29.707 -30.454 -31.232 -32.041 -32.882 -33.755 -34.660 -35.596 -36.565 -37.565 -38.595 -39.655 -40.744 -41.859 -42.997 -44.155 -45.328 -46.508 -47.690 -48.872 -50.053 -51.235 0 1 1.0 1 N2 VH 20.21 25.51 0.05 -3.364e+10 4.299e+09 -3.051e+10 6.326e+09 -2.747e+10 7.998e+09 -2.452e+10 9.333e+09 -2.169e+10 1.035e+10 -1.897e+10 1.106e+10 -1.638e+10 1.149e+10 -1.392e+10 1.164e+10 -1.160e+10 1.154e+10 -9.433e+09 1.119e+10 -7.426e+09 1.063e+10 -5.598e+09 9.870e+09 -3.961e+09 8.943e+09 -2.527e+09 7.882e+09 -1.312e+09 6.731e+09 -3.278e+08 5.539e+09 4.333e+08 4.363e+09 9.865e+08 3.267e+09 1.377e+09 2.304e+09 1.693e+09 1.497e+09 2.060e+09 7.964e+08 2.606e+09 4.526e+07 3.394e+09 -9.769e+08 4.414e+09 -2.480e+09 5.616e+09 -4.638e+09 6.930e+09 -7.589e+09 8.272e+09 -1.144e+10 9.549e+09 -1.629e+10 1.066e+10 -2.221e+10 1.150e+10 -2.926e+10 1.195e+10 -3.745e+10 1.189e+10 -4.682e+10 1.119e+10 -5.732e+10 9.712e+09 -6.892e+10 7.342e+09 -8.153e+10 3.951e+09 -9.504e+10 -5.723e+08 -1.093e+11 -6.339e+09 -1.241e+11 -1.344e+10 -1.393e+11 -2.194e+10 -1.547e+11 -3.191e+10 -1.698e+11 -4.337e+10 -1.846e+11 -5.634e+10 -1.987e+11 -7.080e+10 -2.117e+11 -8.674e+10 -2.234e+11 -1.041e+11 -2.335e+11 -1.228e+11 -2.417e+11 -1.427e+11 -2.478e+11 -1.639e+11 -2.514e+11 -1.862e+11 -2.525e+11 -2.095e+11 -2.508e+11 -2.338e+11 -2.461e+11 -2.592e+11 -2.385e+11 -2.858e+11 -2.277e+11 -3.136e+11 -2.136e+11 -3.431e+11 -1.961e+11 -3.744e+11 -1.749e+11 -4.081e+11 -1.497e+11 -4.448e+11 -1.199e+11 -4.852e+11 -8.471e+10 -5.299e+11 -4.317e+10 -5.799e+11 6.104e+09 -6.358e+11 6.487e+10 -6.985e+11 1.350e+11 -7.685e+11 2.191e+11 -8.465e+11 3.199e+11 -9.326e+11 4.403e+11 -1.027e+12 5.838e+11 -1.131e+12 7.548e+11 -1.243e+12 9.564e+11 -1.363e+12 1.193e+12 -1.490e+12 1.470e+12 -1.624e+12 1.790e+12 -1.764e+12 2.160e+12 -1.908e+12 2.584e+12 -2.056e+12 3.067e+12 -2.205e+12 3.615e+12 -2.353e+12 4.233e+12 -2.498e+12 4.927e+12 -2.638e+12 5.701e+12 -2.770e+12 6.563e+12 -2.891e+12 7.517e+12 -2.998e+12 8.567e+12 -3.088e+12 9.721e+12 -3.157e+12 1.098e+13 -3.201e+12 1.235e+13 -3.217e+12 1.384e+13 -3.201e+12 1.545e+13 -3.148e+12 1.718e+13 -3.056e+12 1.904e+13 -2.919e+12 2.103e+13 -2.734e+12 2.314e+13 -2.497e+12 2.539e+13 -2.205e+12 2.777e+13 -1.854e+12 3.027e+13 -1.442e+12 3.291e+13 -9.647e+11 3.568e+13 -4.209e+11 3.857e+13 1.925e+11 4.158e+13 8.766e+11 4.471e+13 1.632e+12 4.796e+13 2.458e+12 5.133e+13 3.357e+12 5.480e+13 4.328e+12 5.837e+13 5.374e+12 6.204e+13 6.492e+12 6.580e+13 7.681e+12 6.963e+13 8.941e+12 7.354e+13 1.027e+13 7.752e+13 1.166e+13 8.155e+13 1.312e+13 8.564e+13 1.464e+13 8.977e+13 1.621e+13 9.393e+13 1.784e+13 9.813e+13 1.952e+13 1.023e+14 2.125e+13 1.066e+14 2.302e+13 1.108e+14 2.482e+13 1.150e+14 2.666e+13 1.193e+14 2.853e+13 1.235e+14 3.042e+13 1.277e+14 3.233e+13 1.318e+14 3.426e+13 1.359e+14 3.619e+13 1.400e+14 3.811e+13 1.440e+14 4.003e+13 1.480e+14 4.194e+13 1.518e+14 4.383e+13 1.557e+14 4.569e+13 1.594e+14 4.751e+13 1.631e+14 4.929e+13 1.666e+14 5.102e+13 1.701e+14 5.269e+13 1.735e+14 5.429e+13 1.767e+14 5.582e+13 1.799e+14 5.727e+13 1.829e+14 5.863e+13 1.859e+14 5.989e+13 1.887e+14 6.105e+13 1.914e+14 6.210e+13 1.940e+14 6.304e+13 1.965e+14 6.388e+13 1.989e+14 6.461e+13 2.013e+14 6.521e+13 2.035e+14 6.569e+13 2.056e+14 6.604e+13 2.077e+14 6.626e+13 2.097e+14 6.635e+13 2.115e+14 6.632e+13 2.134e+14 6.616e+13 2.151e+14 6.588e+13 2.168e+14 6.549e+13 2.185e+14 6.498e+13 2.201e+14 6.436e+13 2.217e+14 6.365e+13 2.233e+14 6.283e+13 2.249e+14 6.193e+13 2.264e+14 6.095e+13 2.280e+14 5.989e+13 2.296e+14 5.876e+13 2.312e+14 5.756e+13 2.328e+14 5.631e+13 2.344e+14 5.501e+13 2.360e+14 5.367e+13 2.377e+14 5.229e+13 2.394e+14 5.087e+13 2.412e+14 4.943e+13 2.429e+14 4.796e+13 2.447e+14 4.648e+13 2.466e+14 4.498e+13 2.484e+14 4.346e+13 2.503e+14 4.194e+13 2.521e+14 4.041e+13 2.540e+14 3.888e+13 2.559e+14 3.735e+13 2.578e+14 3.582e+13 2.596e+14 3.429e+13 2.615e+14 3.277e+13 2.633e+14 3.125e+13 2.651e+14 2.975e+13 2.668e+14 2.826e+13 2.685e+14 2.681e+13 2.701e+14 2.538e+13 2.716e+14 2.397e+13 2.731e+14 2.259e+13 2.744e+14 2.123e+13 2.757e+14 1.991e+13 2.769e+14 1.862e+13 2.779e+14 1.737e+13 2.788e+14 1.616e+13 2.796e+14 1.500e+13 2.802e+14 1.390e+13 2.807e+14 1.285e+13 2.810e+14 1.187e+13 2.812e+14 1.095e+13 2.811e+14 1.011e+13 2.809e+14 9.342e+12 2.804e+14 8.656e+12 2.797e+14 8.054e+12 2.788e+14 7.539e+12 2.777e+14 7.113e+12 2.763e+14 6.778e+12 2.746e+14 6.534e+12 2.727e+14 6.380e+12 2.705e+14 6.317e+12 2.680e+14 6.341e+12 2.653e+14 6.450e+12 2.623e+14 6.640e+12 2.590e+14 6.905e+12 2.554e+14 7.240e+12 2.516e+14 7.639e+12 2.475e+14 8.094e+12 2.431e+14 8.599e+12 2.385e+14 9.144e+12 2.336e+14 9.721e+12 2.285e+14 1.032e+13 2.232e+14 1.094e+13 2.176e+14 1.156e+13 2.119e+14 1.219e+13 2.060e+14 1.280e+13 2.000e+14 1.339e+13 1.938e+14 1.395e+13 1.875e+14 1.447e+13 1.811e+14 1.496e+13 1.747e+14 1.542e+13 1.682e+14 1.582e+13 1.616e+14 1.618e+13 1.550e+14 1.649e+13 1.484e+14 1.675e+13 1.418e+14 1.695e+13 1.353e+14 1.709e+13 1.288e+14 1.718e+13 1.224e+14 1.722e+13 1.160e+14 1.720e+13 1.098e+14 1.713e+13 1.036e+14 1.701e+13 9.764e+13 1.684e+13 9.178e+13 1.662e+13 8.607e+13 1.636e+13 8.053e+13 1.606e+13 7.515e+13 1.572e+13 6.996e+13 1.534e+13 6.496e+13 1.493e+13 6.015e+13 1.450e+13 5.555e+13 1.403e+13 5.115e+13 1.355e+13 4.696e+13 1.304e+13 4.298e+13 1.252e+13 3.922e+13 1.198e+13 3.566e+13 1.144e+13 3.232e+13 1.088e+13 2.918e+13 1.032e+13 2.625e+13 9.763e+12 2.353e+13 9.205e+12 2.100e+13 8.650e+12 1.867e+13 8.103e+12 1.652e+13 7.565e+12 1.456e+13 7.038e+12 1.276e+13 6.525e+12 1.113e+13 6.028e+12 9.659e+12 5.549e+12 8.334e+12 5.091e+12 7.149e+12 4.654e+12 6.095e+12 4.238e+12 5.160e+12 3.845e+12 4.337e+12 3.476e+12 3.616e+12 3.130e+12 2.988e+12 2.809e+12 2.446e+12 2.511e+12 1.980e+12 2.238e+12 1.583e+12 1.987e+12 1.246e+12 1.760e+12 9.637e+11 1.554e+12 7.281e+11 1.369e+12 5.334e+11 1.203e+12 3.739e+11 1.056e+12 2.441e+11 9.254e+11 1.396e+11 8.100e+11 5.622e+10 7.083e+11 -9.803e+09 6.188e+11 -6.140e+10 5.402e+11 -1.012e+11 4.707e+11 -1.314e+11 4.095e+11 -1.537e+11 3.551e+11 -1.693e+11 3.066e+11 -1.795e+11 2.633e+11 -1.850e+11 2.244e+11 -1.865e+11 1.895e+11 -1.845e+11 1.580e+11 -1.795e+11 1.298e+11 -1.719e+11 1.045e+11 -1.621e+11 8.215e+10 -1.505e+11 6.246e+10 -1.375e+11 4.534e+10 -1.234e+11 3.075e+10 -1.088e+11 1.855e+10 -9.408e+10 8.593e+09 -7.953e+10 7.664e+08 -6.561e+10 -5.134e+09 -5.265e+10 -9.343e+09 -4.095e+10 -1.204e+10 -3.091e+10 -1.382e+10 -2.245e+10 -1.507e+10 -1.550e+10 -1.628e+10 -9.929e+09 -1.795e+10 -5.178e+09 -2.040e+10 -5.186e+08 -2.369e+10 4.742e+09 -2.765e+10 1.110e+10 -3.204e+10 1.881e+10 -3.658e+10 2.790e+10 -4.104e+10 3.829e+10 -4.523e+10 4.983e+10 -4.898e+10 6.225e+10 -5.215e+10 7.532e+10 -5.465e+10 8.877e+10 -5.640e+10 1.023e+11 -5.737e+10 1.157e+11 -5.754e+10 1.286e+11 -5.691e+10 1.408e+11 -5.553e+10 1.521e+11 -5.343e+10 1.623e+11 -5.068e+10 1.712e+11 -4.737e+10 1.788e+11 -4.357e+10 1.848e+11 -3.938e+10 1.893e+11 -3.490e+10 1.922e+11 -3.023e+10 1.936e+11 -2.546e+10 1.934e+11 -2.069e+10 1.917e+11 -1.600e+10 1.886e+11 -1.147e+10 1.842e+11 -7.165e+09 1.786e+11 -3.150e+09 1.720e+11 5.241e+08 1.644e+11 3.823e+09 1.561e+11 6.721e+09 1.471e+11 9.195e+09 1.377e+11 1.124e+10 1.279e+11 1.286e+10 1.179e+11 1.407e+10 1.079e+11 1.488e+10 9.802e+10 1.532e+10 8.830e+10 1.541e+10 7.889e+10 1.520e+10 6.985e+10 1.472e+10 6.128e+10 1.400e+10 5.324e+10 1.309e+10 4.577e+10 1.203e+10 3.891e+10 1.087e+10 3.269e+10 9.637e+09 2.711e+10 8.373e+09 2.217e+10 7.117e+09 1.786e+10 5.897e+09 1.414e+10 4.743e+09 1.099e+10 3.680e+09 8.366e+09 2.728e+09 6.221e+09 1.902e+09 4.507e+09 1.215e+09 3.175e+09 6.699e+08 2.175e+09 2.635e+08 1.459e+09 -2.524e+07 9.865e+08 -2.482e+08 7.190e+08 -4.892e+08 6.099e+08 -8.326e+08 6.056e+08 -1.329e+09 6.680e+08 -1.995e+09 7.899e+08 -2.836e+09 9.863e+08 -3.853e+09 1.283e+09 -5.044e+09 1.708e+09 -6.409e+09 2.292e+09 -7.944e+09 3.064e+09 -9.647e+09 4.054e+09 -1.151e+10 5.286e+09 -1.352e+10 6.787e+09 -1.568e+10 8.577e+09 -1.795e+10 1.067e+10 -2.033e+10 1.308e+10 -2.280e+10 1.582e+10 -2.533e+10 1.888e+10 -2.789e+10 2.226e+10 -3.047e+10 2.595e+10 -3.303e+10 2.993e+10 -3.554e+10 3.417e+10 -3.797e+10 3.865e+10 -4.030e+10 4.332e+10 -4.249e+10 4.814e+10 -4.451e+10 5.307e+10 -4.635e+10 5.805e+10 -4.797e+10 6.303e+10 -4.937e+10 6.796e+10 -5.052e+10 7.276e+10 -5.140e+10 7.738e+10 -5.202e+10 8.177e+10 -5.235e+10 8.585e+10 -5.241e+10 8.958e+10 -5.218e+10 9.290e+10 -5.167e+10 9.576e+10 -5.089e+10 9.812e+10 -4.985e+10 9.992e+10 -4.857e+10 1.011e+11 -4.705e+10 1.018e+11 -4.532e+10 1.018e+11 -4.340e+10 1.011e+11 -4.131e+10 9.982e+10 -3.908e+10 9.789e+10 -3.673e+10 9.536e+10 -3.430e+10 9.223e+10 -3.181e+10 8.856e+10 -2.929e+10 8.438e+10 -2.677e+10 7.974e+10 -2.427e+10 7.471e+10 -2.183e+10 6.937e+10 -1.947e+10 6.377e+10 -1.721e+10 5.800e+10 -1.506e+10 5.215e+10 -1.306e+10 4.629e+10 -1.120e+10 4.051e+10 -9.497e+09 3.489e+10 -7.958e+09 2.950e+10 -6.584e+09 2.442e+10 -5.373e+09 1.971e+10 -4.316e+09 1.542e+10 -3.408e+09 1.162e+10 -2.639e+09 8.329e+09 -1.994e+09 5.585e+09 -1.458e+09 3.406e+09 -1.019e+09 1.797e+09 -6.780e+08 7.414e+08 -4.842e+08 1.532e+08 -5.117e+08 -2.760e+08 -7.271e+08 -9.372e+08 -1.046e+09 -2.012e+09 -1.435e+09 -3.507e+09 -1.894e+09 -5.385e+09 -2.433e+09 -7.594e+09 -3.064e+09 -1.008e+10 -3.795e+09 -1.278e+10 -4.635e+09 -1.565e+10 -5.588e+09 -1.861e+10 -6.658e+09 -2.162e+10 -7.844e+09 -2.462e+10 -9.143e+09 -2.755e+10 -1.055e+10 -3.037e+10 -1.206e+10 -3.302e+10 -1.366e+10 -3.546e+10 -1.534e+10 -3.766e+10 -1.709e+10 -3.957e+10 -1.890e+10 -4.118e+10 -2.074e+10 -4.245e+10 -2.260e+10 -4.337e+10 -2.447e+10 -4.393e+10 -2.633e+10 -4.413e+10 -2.816e+10 -4.396e+10 -2.995e+10 -4.344e+10 -3.169e+10 -4.257e+10 -3.337e+10 -4.138e+10 -3.498e+10 -3.988e+10 -3.652e+10 -3.811e+10 -3.798e+10 -3.609e+10 -3.939e+10 -3.386e+10 -4.073e+10 -3.143e+10 -4.205e+10 -2.886e+10 -4.333e+10 -2.615e+10 -4.462e+10 -2.333e+10 -4.592e+10 -2.041e+10 -4.726e+10 -1.740e+10 -4.866e+10 -1.429e+10 -5.015e+10 -1.110e+10 -5.173e+10 -7.804e+09 -5.343e+10 -4.390e+09 -5.524e+10 -8.435e+08 -5.717e+10 2.848e+09 -5.921e+10 6.702e+09 -6.134e+10 1.072e+10 -6.355e+10 1.491e+10 -6.582e+10 1.927e+10 -6.811e+10 2.379e+10 -7.039e+10 2.844e+10 -7.265e+10 3.320e+10 -7.484e+10 3.804e+10 -7.694e+10 4.292e+10 -7.893e+10 4.781e+10 -8.078e+10 5.265e+10 -8.246e+10 5.741e+10 -8.395e+10 6.205e+10 -8.525e+10 6.653e+10 -8.632e+10 7.079e+10 -8.717e+10 7.482e+10 -8.779e+10 7.857e+10 -8.816e+10 8.202e+10 -8.828e+10 8.514e+10 -8.816e+10 8.792e+10 -8.780e+10 9.033e+10 -8.718e+10 9.238e+10 -8.634e+10 9.404e+10 -8.525e+10 9.532e+10 -8.395e+10 9.622e+10 -8.243e+10 9.674e+10 -8.070e+10 9.688e+10 -7.879e+10 9.666e+10 -7.670e+10 9.608e+10 -7.445e+10 9.516e+10 -7.206e+10 9.391e+10 -6.954e+10 9.234e+10 -6.690e+10 9.048e+10 -6.416e+10 8.834e+10 -6.135e+10 8.594e+10 -5.847e+10 8.331e+10 -5.555e+10 8.045e+10 -5.260e+10 7.741e+10 -4.965e+10 7.419e+10 -4.670e+10 7.084e+10 -4.378e+10 6.736e+10 -4.090e+10 6.380e+10 -3.808e+10 6.017e+10 -3.533e+10 5.650e+10 -3.266e+10 5.283e+10 -3.009e+10 4.917e+10 -2.761e+10 4.556e+10 -2.525e+10 4.201e+10 -2.300e+10 3.855e+10 -2.087e+10 3.519e+10 -1.887e+10 3.197e+10 -1.699e+10 2.888e+10 -1.523e+10 2.596e+10 -1.360e+10 2.320e+10 -1.210e+10 2.062e+10 -1.071e+10 1.822e+10 -9.445e+09 1.600e+10 -8.289e+09 1.397e+10 -7.239e+09 1.212e+10 -6.291e+09 1.045e+10 -5.440e+09 8.945e+09 -4.677e+09 7.607e+09 -4.001e+09 6.427e+09 -3.402e+09 5.391e+09 -2.874e+09 4.488e+09 -2.413e+09 3.707e+09 -2.011e+09 3.038e+09 -1.664e+09 2.468e+09 -1.366e+09 1.988e+09 -1.112e+09 1.586e+09 -8.977e+08 1.253e+09 -7.178e+08 9.794e+08 -5.682e+08 7.567e+08 -4.451e+08 5.773e+08 -3.449e+08 4.346e+08 -2.643e+08 3.224e+08 -2.002e+08 2.352e+08 -1.501e+08 1.686e+08 -1.113e+08 1.184e+08 -8.193e+07 8.127e+07 -6.001e+07 5.439e+07 -4.401e+07 3.536e+07 -3.260e+07 2.221e+07 -2.475e+07 1.337e+07 -1.962e+07 7.539e+06 -1.660e+07 3.676e+06 -1.522e+07 9.879e+05 -1.515e+07 -1.095e+06 -1.617e+07 -2.927e+06 -1.817e+07 -4.696e+06 -2.113e+07 -6.487e+06 -2.509e+07 -8.343e+06 -3.011e+07 -1.029e+07 -3.627e+07 -1.235e+07 -4.364e+07 -1.457e+07 -5.227e+07 -1.698e+07 -6.216e+07 -1.966e+07 -7.329e+07 -2.268e+07 -8.556e+07 -2.614e+07 -9.886e+07 -3.016e+07 -1.130e+08 -3.485e+07 -1.278e+08 -4.036e+07 -1.429e+08 -4.683e+07 -1.582e+08 -5.440e+07 -1.733e+08 -6.321e+07 -1.879e+08 -7.337e+07 -2.017e+08 -8.499e+07 -2.144e+08 -9.817e+07 -2.257e+08 -1.130e+08 -2.355e+08 -1.294e+08 -2.434e+08 -1.475e+08 -2.492e+08 -1.673e+08 -2.528e+08 -1.888e+08 -2.539e+08 -2.121e+08 -2.525e+08 -2.370e+08 -2.483e+08 -2.637e+08 -2.413e+08 -2.921e+08 -2.313e+08 -3.222e+08 -2.181e+08 -3.541e+08 -2.014e+08 -3.879e+08 -1.810e+08 -4.236e+08 -1.566e+08 -4.612e+08 -1.277e+08 -5.010e+08 -9.387e+07 -5.428e+08 -5.460e+07 -5.867e+08 -9.232e+06 -6.327e+08 4.284e+07 -6.806e+08 1.023e+08 -7.303e+08 1.699e+08 -7.815e+08 0.005 -59.972 -58.450 -56.928 -55.406 -53.884 -52.340 -50.605 -48.814 -47.049 -45.348 -43.727 -42.189 -40.733 -39.355 -38.050 -36.814 -35.642 -34.530 -33.474 -32.472 -31.520 -30.617 -29.758 -28.944 -28.172 -27.439 -26.746 -26.090 -25.470 -24.886 -24.335 -23.818 -23.334 -22.881 -22.459 -22.068 -21.707 -21.375 -21.073 -20.799 -20.554 -20.337 -20.147 -19.985 -19.851 -19.744 -19.665 -19.613 -19.588 -19.590 -19.620 -19.678 -19.763 -19.876 -20.017 -20.186 -20.383 -20.609 -20.865 -21.149 -21.464 -21.809 -22.185 -22.593 -23.032 -23.505 -24.011 -24.551 -25.127 -25.738 -26.388 -27.076 -27.803 -28.573 -29.386 -30.244 -31.150 -32.107 -33.119 -34.188 -35.321 -36.524 -37.805 -39.174 -40.644 -42.234 -43.966 -45.874 -48.002 -50.410 -53.170 -56.307 -59.506 -61.445 -61.129 -59.847 -58.788 -58.291 -58.422 -59.233 -60.656 -61.479 -59.093 -54.890 -50.947 -47.552 -44.600 -41.981 -39.615 -37.448 -35.443 -33.572 -31.816 -30.159 -28.590 -27.099 -25.680 -24.326 -23.033 -21.796 -20.611 -19.476 -18.387 -17.343 -16.341 -15.379 -14.456 -13.570 -12.719 -11.903 -11.121 -10.370 -9.651 -8.962 -8.302 -7.671 -7.069 -6.494 -5.946 -5.424 -4.928 -4.458 -4.013 -3.592 -3.196 -2.825 -2.477 -2.153 -1.852 -1.575 -1.322 -1.092 -0.885 -0.701 -0.541 -0.404 -0.291 -0.201 -0.136 -0.094 -0.076 -0.084 -0.116 -0.174 -0.258 -0.369 -0.506 -0.672 -0.867 -1.091 -1.346 -1.633 -1.953 -2.308 -2.699 -3.128 -3.598 -4.110 -4.668 -5.275 -5.934 -6.649 -7.427 -8.271 -9.191 -10.193 -11.288 -12.489 -13.812 -15.276 -16.908 -18.743 -20.827 -23.228 -26.048 -29.445 -33.696 -39.333 -47.616 -62.743 -59.316 -47.078 -39.157 -33.607 -29.389 -26.007 -23.195 -20.799 -18.718 -16.886 -15.255 -13.791 -12.469 -11.268 -10.172 -9.169 -8.250 -7.404 -6.626 -5.910 -5.250 -4.642 -4.082 -3.569 -3.097 -2.666 -2.273 -1.916 -1.594 -1.304 -1.047 -0.820 -0.622 -0.453 -0.312 -0.198 -0.110 -0.048 -0.012 0.000 -0.013 -0.049 -0.110 -0.194 -0.301 -0.431 -0.584 -0.761 -0.960 -1.182 -1.426 -1.694 -1.985 -2.299 -2.636 -2.996 -3.380 -3.787 -4.219 -4.674 -5.155 -5.660 -6.191 -6.748 -7.331 -7.942 -8.580 -9.246 -9.942 -10.667 -11.423 -12.212 -13.033 -13.889 -14.780 -15.709 -16.678 -17.687 -18.741 -19.842 -20.992 -22.197 -23.461 -24.790 -26.191 -27.674 -29.250 -30.935 -32.748 -34.719 -36.881 -39.284 -41.975 -44.956 -47.935 -49.835 -49.664 -48.325 -46.924 -45.799 -44.964 -44.371 -43.965 -43.709 -43.572 -43.529 -43.555 -43.627 -43.710 -43.763 -43.736 -43.570 -43.215 -42.646 -41.870 -40.925 -39.865 -38.741 -37.595 -36.457 -35.345 -34.270 -33.239 -32.255 -31.319 -30.430 -29.587 -28.789 -28.036 -27.324 -26.654 -26.024 -25.431 -24.877 -24.358 -23.875 -23.425 -23.009 -22.626 -22.274 -21.954 -21.665 -21.405 -21.175 -20.974 -20.802 -20.658 -20.542 -20.454 -20.393 -20.360 -20.354 -20.376 -20.424 -20.499 -20.601 -20.730 -20.886 -21.069 -21.278 -21.515 -21.779 -22.071 -22.391 -22.738 -23.114 -23.519 -23.952 -24.415 -24.908 -25.431 -25.985 -26.570 -27.188 -27.838 -28.521 -29.239 -29.991 -30.778 -31.602 -32.463 -33.362 -34.300 -35.277 -36.294 -37.352 -38.451 -39.592 -40.775 -41.999 -43.265 -44.570 -45.912 -47.289 -48.697 -50.129 -51.577 -53.027 -54.477 -55.926 -57.376 0 1 1.0 1 N3 HH 25.38 30.17 0.05 1.312e+09 7.787e+08 1.368e+09 8.200e+08 1.426e+09 8.603e+08 1.488e+09 8.999e+08 1.552e+09 9.391e+08 1.622e+09 9.779e+08 1.695e+09 1.017e+09 1.775e+09 1.057e+09 1.860e+09 1.098e+09 1.951e+09 1.140e+09 2.049e+09 1.186e+09 2.152e+09 1.234e+09 2.262e+09 1.286e+09 2.378e+09 1.342e+09 2.498e+09 1.403e+09 2.622e+09 1.469e+09 2.749e+09 1.541e+09 2.876e+09 1.619e+09 3.003e+09 1.701e+09 3.126e+09 1.789e+09 3.243e+09 1.881e+09 3.352e+09 1.976e+09 3.452e+09 2.074e+09 3.538e+09 2.172e+09 3.608e+09 2.269e+09 3.661e+09 2.363e+09 3.695e+09 2.452e+09 3.707e+09 2.533e+09 3.698e+09 2.603e+09 3.666e+09 2.661e+09 3.610e+09 2.704e+09 3.532e+09 2.729e+09 3.433e+09 2.735e+09 3.313e+09 2.720e+09 3.175e+09 2.684e+09 3.020e+09 2.625e+09 2.852e+09 2.544e+09 2.673e+09 2.442e+09 2.486e+09 2.320e+09 2.294e+09 2.180e+09 2.101e+09 2.024e+09 1.909e+09 1.855e+09 1.720e+09 1.678e+09 1.538e+09 1.494e+09 1.365e+09 1.309e+09 1.201e+09 1.125e+09 1.049e+09 9.472e+08 9.085e+08 7.782e+08 7.817e+08 6.214e+08 6.685e+08 4.791e+08 5.692e+08 3.532e+08 4.844e+08 2.447e+08 4.143e+08 1.533e+08 3.597e+08 7.727e+07 3.211e+08 1.304e+07 2.985e+08 -4.504e+07 2.912e+08 -1.039e+08 2.971e+08 -1.703e+08 3.137e+08 -2.495e+08 3.387e+08 -3.453e+08 3.703e+08 -4.591e+08 4.079e+08 -5.919e+08 4.512e+08 -7.440e+08 5.006e+08 -9.151e+08 5.568e+08 -1.105e+09 6.212e+08 -1.315e+09 6.950e+08 -1.543e+09 7.800e+08 -1.790e+09 8.784e+08 -2.057e+09 9.922e+08 -2.343e+09 1.124e+09 -2.649e+09 1.276e+09 -2.975e+09 1.452e+09 -3.319e+09 1.654e+09 -3.682e+09 1.885e+09 -4.062e+09 2.149e+09 -4.459e+09 2.447e+09 -4.869e+09 2.783e+09 -5.291e+09 3.159e+09 -5.721e+09 3.575e+09 -6.154e+09 4.034e+09 -6.587e+09 4.534e+09 -7.013e+09 5.073e+09 -7.426e+09 5.651e+09 -7.820e+09 6.261e+09 -8.186e+09 6.898e+09 -8.517e+09 7.555e+09 -8.806e+09 8.223e+09 -9.044e+09 8.890e+09 -9.224e+09 9.544e+09 -9.339e+09 1.017e+10 -9.384e+09 1.076e+10 -9.353e+09 1.129e+10 -9.244e+09 1.174e+10 -9.054e+09 1.210e+10 -8.785e+09 1.236e+10 -8.437e+09 1.249e+10 -8.015e+09 1.249e+10 -7.527e+09 1.235e+10 -6.979e+09 1.205e+10 -6.381e+09 1.159e+10 -5.747e+09 1.099e+10 -5.087e+09 1.023e+10 -4.417e+09 9.330e+09 -3.750e+09 8.309e+09 -3.102e+09 7.190e+09 -2.486e+09 6.004e+09 -1.917e+09 4.788e+09 -1.407e+09 3.590e+09 -9.659e+08 2.464e+09 -6.033e+08 1.473e+09 -3.250e+08 6.885e+08 -1.343e+08 1.902e+08 -3.132e+07 -3.902e+07 1.053e+07 -4.140e+08 7.111e+07 -1.338e+09 1.953e+08 -2.954e+09 3.698e+08 -5.383e+09 5.741e+08 -8.753e+09 7.829e+08 -1.320e+10 9.658e+08 -1.888e+10 1.086e+09 -2.592e+10 1.101e+09 -3.449e+10 9.602e+08 -4.474e+10 6.071e+08 -5.683e+10 -2.379e+07 -7.092e+10 -1.008e+09 -8.716e+10 -2.430e+09 -1.057e+11 -4.384e+09 -1.267e+11 -6.979e+09 -1.503e+11 -1.033e+10 -1.765e+11 -1.458e+10 -2.056e+11 -1.986e+10 -2.375e+11 -2.634e+10 -2.723e+11 -3.418e+10 -3.101e+11 -4.359e+10 -3.507e+11 -5.475e+10 -3.943e+11 -6.788e+10 -4.406e+11 -8.320e+10 -4.895e+11 -1.009e+11 -5.408e+11 -1.213e+11 -5.945e+11 -1.447e+11 -6.503e+11 -1.712e+11 -7.077e+11 -2.010e+11 -7.665e+11 -2.346e+11 -8.262e+11 -2.721e+11 -8.864e+11 -3.138e+11 -9.465e+11 -3.599e+11 -1.006e+12 -4.106e+11 -1.065e+12 -4.662e+11 -1.122e+12 -5.268e+11 -1.177e+12 -5.928e+11 -1.229e+12 -6.643e+11 -1.278e+12 -7.415e+11 -1.324e+12 -8.248e+11 -1.365e+12 -9.142e+11 -1.402e+12 -1.010e+12 -1.433e+12 -1.113e+12 -1.459e+12 -1.224e+12 -1.480e+12 -1.342e+12 -1.493e+12 -1.468e+12 -1.501e+12 -1.604e+12 -1.500e+12 -1.750e+12 -1.493e+12 -1.907e+12 -1.477e+12 -2.076e+12 -1.452e+12 -2.258e+12 -1.418e+12 -2.456e+12 -1.373e+12 -2.670e+12 -1.316e+12 -2.903e+12 -1.246e+12 -3.158e+12 -1.162e+12 -3.435e+12 -1.061e+12 -3.739e+12 -9.414e+11 -4.072e+12 -8.002e+11 -4.437e+12 -6.345e+11 -4.836e+12 -4.412e+11 -5.274e+12 -2.166e+11 -5.754e+12 4.328e+10 -6.279e+12 3.429e+11 -6.853e+12 6.865e+11 -7.478e+12 1.079e+12 -8.160e+12 1.526e+12 -8.902e+12 2.032e+12 -9.706e+12 2.602e+12 -1.058e+13 3.243e+12 -1.152e+13 3.960e+12 -1.254e+13 4.760e+12 -1.363e+13 5.648e+12 -1.480e+13 6.629e+12 -1.606e+13 7.710e+12 -1.740e+13 8.897e+12 -1.884e+13 1.019e+13 -2.036e+13 1.160e+13 -2.198e+13 1.314e+13 -2.369e+13 1.479e+13 -2.551e+13 1.658e+13 -2.742e+13 1.849e+13 -2.943e+13 2.054e+13 -3.155e+13 2.273e+13 -3.376e+13 2.505e+13 -3.608e+13 2.751e+13 -3.851e+13 3.011e+13 -4.103e+13 3.285e+13 -4.366e+13 3.573e+13 -4.639e+13 3.873e+13 -4.923e+13 4.187e+13 -5.216e+13 4.514e+13 -5.519e+13 4.852e+13 -5.833e+13 5.203e+13 -6.156e+13 5.564e+13 -6.488e+13 5.935e+13 -6.830e+13 6.316e+13 -7.180e+13 6.705e+13 -7.540e+13 7.102e+13 -7.908e+13 7.506e+13 -8.285e+13 7.914e+13 -8.670e+13 8.327e+13 -9.063e+13 8.743e+13 -9.463e+13 9.161e+13 -9.871e+13 9.579e+13 -1.029e+14 9.997e+13 -1.071e+14 1.041e+14 -1.113e+14 1.083e+14 -1.157e+14 1.124e+14 -1.201e+14 1.164e+14 -1.246e+14 1.204e+14 -1.291e+14 1.243e+14 -1.336e+14 1.281e+14 -1.382e+14 1.317e+14 -1.428e+14 1.352e+14 -1.475e+14 1.386e+14 -1.521e+14 1.419e+14 -1.568e+14 1.449e+14 -1.615e+14 1.478e+14 -1.661e+14 1.504e+14 -1.708e+14 1.529e+14 -1.755e+14 1.552e+14 -1.801e+14 1.572e+14 -1.847e+14 1.590e+14 -1.893e+14 1.605e+14 -1.938e+14 1.618e+14 -1.983e+14 1.629e+14 -2.027e+14 1.637e+14 -2.071e+14 1.642e+14 -2.114e+14 1.645e+14 -2.156e+14 1.645e+14 -2.197e+14 1.642e+14 -2.238e+14 1.637e+14 -2.278e+14 1.629e+14 -2.317e+14 1.619e+14 -2.355e+14 1.606e+14 -2.392e+14 1.590e+14 -2.428e+14 1.572e+14 -2.463e+14 1.552e+14 -2.497e+14 1.529e+14 -2.530e+14 1.504e+14 -2.562e+14 1.477e+14 -2.592e+14 1.447e+14 -2.622e+14 1.416e+14 -2.651e+14 1.382e+14 -2.679e+14 1.347e+14 -2.705e+14 1.310e+14 -2.731e+14 1.272e+14 -2.756e+14 1.232e+14 -2.780e+14 1.190e+14 -2.804e+14 1.148e+14 -2.826e+14 1.104e+14 -2.847e+14 1.058e+14 -2.867e+14 1.012e+14 -2.886e+14 9.647e+13 -2.904e+14 9.164e+13 -2.921e+14 8.674e+13 -2.937e+14 8.177e+13 -2.951e+14 7.673e+13 -2.965e+14 7.165e+13 -2.977e+14 6.652e+13 -2.988e+14 6.136e+13 -2.998e+14 5.619e+13 -3.006e+14 5.100e+13 -3.013e+14 4.581e+13 -3.018e+14 4.062e+13 -3.022e+14 3.546e+13 -3.024e+14 3.033e+13 -3.024e+14 2.523e+13 -3.023e+14 2.019e+13 -3.019e+14 1.520e+13 -3.014e+14 1.029e+13 -3.007e+14 5.460e+12 -2.997e+14 7.189e+11 -2.986e+14 -3.915e+12 -2.972e+14 -8.434e+12 -2.956e+14 -1.283e+13 -2.938e+14 -1.710e+13 -2.918e+14 -2.122e+13 -2.895e+14 -2.519e+13 -2.870e+14 -2.899e+13 -2.843e+14 -3.263e+13 -2.813e+14 -3.609e+13 -2.781e+14 -3.937e+13 -2.747e+14 -4.245e+13 -2.710e+14 -4.535e+13 -2.672e+14 -4.374e+13 -2.656e+14 -4.844e+13 -2.609e+14 -5.076e+13 -2.565e+14 -5.287e+13 -2.519e+14 -5.478e+13 -2.472e+14 -5.648e+13 -2.422e+14 -5.796e+13 -2.371e+14 -5.924e+13 -2.318e+14 -6.032e+13 -2.264e+14 -6.119e+13 -2.209e+14 -6.186e+13 -2.152e+14 -6.234e+13 -2.094e+14 -6.262e+13 -2.036e+14 -6.272e+13 -1.976e+14 -6.264e+13 -1.916e+14 -6.238e+13 -1.855e+14 -6.196e+13 -1.794e+14 -6.138e+13 -1.732e+14 -6.065e+13 -1.670e+14 -5.977e+13 -1.608e+14 -5.876e+13 -1.546e+14 -5.763e+13 -1.485e+14 -5.638e+13 -1.423e+14 -5.502e+13 -1.362e+14 -5.357e+13 -1.302e+14 -5.202e+13 -1.242e+14 -5.040e+13 -1.183e+14 -4.871e+13 -1.125e+14 -4.696e+13 -1.068e+14 -4.516e+13 -1.012e+14 -4.332e+13 -9.569e+13 -4.145e+13 -9.032e+13 -3.955e+13 -8.508e+13 -3.765e+13 -7.999e+13 -3.574e+13 -7.504e+13 -3.384e+13 -7.025e+13 -3.195e+13 -6.562e+13 -3.008e+13 -6.115e+13 -2.824e+13 -5.686e+13 -2.643e+13 -5.275e+13 -2.467e+13 -4.881e+13 -2.296e+13 -4.506e+13 -2.130e+13 -4.150e+13 -1.970e+13 -3.812e+13 -1.815e+13 -3.491e+13 -1.667e+13 -3.189e+13 -1.526e+13 -2.904e+13 -1.391e+13 -2.636e+13 -1.264e+13 -2.386e+13 -1.143e+13 -2.153e+13 -1.030e+13 -1.936e+13 -9.244e+12 -1.735e+13 -8.257e+12 -1.549e+13 -7.341e+12 -1.378e+13 -6.496e+12 -1.222e+13 -5.718e+12 -1.079e+13 -5.006e+12 -9.481e+12 -4.358e+12 -8.299e+12 -3.771e+12 -7.232e+12 -3.242e+12 -6.271e+12 -2.769e+12 -5.411e+12 -2.346e+12 -4.644e+12 -1.972e+12 -3.964e+12 -1.644e+12 -3.363e+12 -1.356e+12 -2.835e+12 -1.107e+12 -2.374e+12 -8.929e+11 -1.973e+12 -7.102e+11 -1.627e+12 -5.560e+11 -1.331e+12 -4.272e+11 -1.078e+12 -3.209e+11 -8.648e+11 -2.344e+11 -6.861e+11 -1.651e+11 -5.379e+11 -1.107e+11 -4.162e+11 -6.884e+10 -3.175e+11 -3.761e+10 -2.386e+11 -1.505e+10 -1.764e+11 5.594e+08 -1.283e+11 1.083e+10 -9.207e+10 1.728e+10 -6.538e+10 2.130e+10 -4.629e+10 2.410e+10 -3.297e+10 2.664e+10 -2.367e+10 2.947e+10 -1.693e+10 3.273e+10 -1.165e+10 3.623e+10 -7.140e+09 3.969e+10 -3.108e+09 4.279e+10 5.134e+08 4.529e+10 3.680e+09 4.701e+10 6.309e+09 4.786e+10 8.328e+09 4.780e+10 9.700e+09 4.686e+10 1.042e+10 4.510e+10 1.052e+10 4.260e+10 1.006e+10 3.950e+10 9.134e+09 3.593e+10 7.841e+09 3.202e+10 6.295e+09 2.795e+10 4.614e+09 2.385e+10 2.908e+09 1.986e+10 1.278e+09 1.613e+10 -1.965e+08 1.276e+10 -1.462e+09 9.852e+09 -2.510e+09 7.464e+09 -3.390e+09 5.596e+09 -4.222e+09 4.153e+09 -5.193e+09 2.952e+09 -6.495e+09 1.764e+09 -8.266e+09 3.909e+08 -1.056e+10 -1.291e+09 -1.336e+10 -3.333e+09 -1.661e+10 -5.733e+09 -2.024e+10 -8.452e+09 -2.416e+10 -1.143e+10 -2.830e+10 -1.459e+10 -3.257e+10 -1.787e+10 -3.688e+10 -2.116e+10 -4.116e+10 -2.440e+10 -4.531e+10 -2.750e+10 -4.928e+10 -3.040e+10 -5.298e+10 -3.303e+10 -5.636e+10 -3.535e+10 -5.936e+10 -3.731e+10 -6.193e+10 -3.887e+10 -6.406e+10 -4.002e+10 -6.570e+10 -4.074e+10 -6.685e+10 -4.103e+10 -6.750e+10 -4.092e+10 -6.764e+10 -4.040e+10 -6.729e+10 -3.952e+10 -6.646e+10 -3.830e+10 -6.518e+10 -3.679e+10 -6.348e+10 -3.501e+10 -6.140e+10 -3.303e+10 -5.897e+10 -3.087e+10 -5.625e+10 -2.860e+10 -5.327e+10 -2.624e+10 -5.009e+10 -2.385e+10 -4.676e+10 -2.145e+10 -4.333e+10 -1.910e+10 -3.985e+10 -1.681e+10 -3.635e+10 -1.462e+10 -3.290e+10 -1.255e+10 -2.952e+10 -1.062e+10 -2.626e+10 -8.850e+09 -2.314e+10 -7.240e+09 -2.020e+10 -5.800e+09 -1.745e+10 -4.531e+09 -1.492e+10 -3.431e+09 -1.260e+10 -2.497e+09 -1.052e+10 -1.717e+09 -8.669e+09 -1.084e+09 -7.044e+09 -5.826e+08 -5.639e+09 -1.998e+08 -4.441e+09 8.005e+07 -3.439e+09 2.730e+08 -2.616e+09 3.958e+08 -1.952e+09 4.642e+08 -1.428e+09 4.939e+08 -1.025e+09 4.985e+08 -7.196e+08 4.896e+08 -4.921e+08 4.750e+08 -3.225e+08 4.585e+08 -1.934e+08 4.405e+08 -9.150e+07 4.190e+08 -8.136e+06 3.912e+08 6.161e+07 3.552e+08 1.196e+08 3.106e+08 1.665e+08 2.584e+08 2.029e+08 2.007e+08 2.302e+08 1.399e+08 2.515e+08 7.617e+07 2.715e+08 6.480e+06 2.962e+08 -7.721e+07 3.308e+08 -1.872e+08 3.785e+08 -3.376e+08 4.389e+08 -5.419e+08 5.095e+08 -8.121e+08 5.864e+08 -1.158e+09 6.651e+08 -1.587e+09 7.415e+08 -2.105e+09 8.116e+08 -2.715e+09 8.718e+08 -3.417e+09 9.190e+08 -4.212e+09 9.504e+08 -5.095e+09 9.641e+08 -6.060e+09 9.582e+08 -7.100e+09 9.318e+08 -8.205e+09 8.846e+08 -9.362e+09 8.167e+08 -1.056e+10 7.290e+08 -1.178e+10 6.231e+08 -1.301e+10 5.012e+08 -1.424e+10 3.659e+08 -1.544e+10 2.206e+08 -1.660e+10 6.932e+07 -1.770e+10 -8.408e+07 -1.873e+10 -2.351e+08 -1.966e+10 -3.789e+08 -2.050e+10 -5.112e+08 -2.122e+10 -6.279e+08 -2.181e+10 -7.253e+08 -2.227e+10 -7.993e+08 -2.259e+10 -8.466e+08 -2.276e+10 -8.646e+08 -2.278e+10 -8.519e+08 -2.265e+10 -8.077e+08 -2.238e+10 -7.326e+08 -2.196e+10 -6.275e+08 -2.140e+10 -4.947e+08 -2.071e+10 -3.375e+08 -1.991e+10 -1.596e+08 -1.901e+10 3.446e+07 -1.801e+10 2.395e+08 -1.695e+10 4.502e+08 -1.582e+10 6.612e+08 -1.464e+10 8.666e+08 -1.345e+10 1.061e+09 -1.224e+10 1.241e+09 -1.104e+10 1.401e+09 -9.859e+09 1.537e+09 -8.714e+09 1.648e+09 -7.619e+09 1.732e+09 -6.583e+09 1.787e+09 -5.616e+09 1.815e+09 -4.727e+09 1.817e+09 -3.920e+09 1.795e+09 -3.198e+09 1.753e+09 -2.563e+09 1.697e+09 -2.014e+09 1.631e+09 -1.546e+09 1.563e+09 -1.152e+09 1.498e+09 -8.224e+08 1.445e+09 -5.442e+08 1.408e+09 -3.042e+08 1.392e+09 -8.711e+07 1.398e+09 1.197e+08 1.422e+09 3.248e+08 1.462e+09 5.336e+08 1.510e+09 7.478e+08 1.562e+09 9.658e+08 1.610e+09 1.184e+09 1.651e+09 1.399e+09 1.681e+09 1.604e+09 1.696e+09 1.795e+09 1.694e+09 1.965e+09 1.675e+09 2.111e+09 1.636e+09 2.228e+09 1.579e+09 2.314e+09 1.503e+09 2.365e+09 1.411e+09 2.380e+09 1.302e+09 2.359e+09 1.180e+09 2.302e+09 1.047e+09 2.212e+09 9.052e+08 2.091e+09 7.584e+08 1.942e+09 6.102e+08 1.770e+09 4.639e+08 1.581e+09 3.234e+08 1.381e+09 1.923e+08 1.176e+09 7.401e+07 9.746e+08 -2.898e+07 7.839e+08 -1.151e+08 6.112e+08 -1.851e+08 4.621e+08 -2.430e+08 3.387e+08 -2.976e+08 2.364e+08 -3.625e+08 1.418e+08 -4.530e+08 3.552e+07 -5.810e+08 -1.018e+08 -7.525e+08 -2.857e+08 -9.686e+08 -5.268e+08 -1.227e+09 -8.312e+08 -1.525e+09 -1.203e+09 -1.859e+09 -1.642e+09 -2.223e+09 -2.149e+09 -2.613e+09 -2.720e+09 -3.022e+09 -3.352e+09 -3.447e+09 -4.038e+09 -3.880e+09 -4.773e+09 -4.315e+09 -5.550e+09 -4.746e+09 -6.359e+09 -5.167e+09 -7.194e+09 -5.573e+09 -8.043e+09 -5.958e+09 -8.897e+09 -6.317e+09 -9.746e+09 -6.647e+09 -1.058e+10 -6.943e+09 -1.139e+10 -7.203e+09 -1.217e+10 -7.422e+09 -1.290e+10 -7.601e+09 -1.359e+10 -7.738e+09 -1.422e+10 -7.832e+09 -1.478e+10 -7.884e+09 -1.528e+10 -7.894e+09 -1.571e+10 -7.862e+09 -1.606e+10 -7.790e+09 -1.633e+10 -7.678e+09 -1.652e+10 -7.530e+09 -1.664e+10 -7.347e+09 -1.667e+10 -7.130e+09 -1.662e+10 -6.883e+09 -1.650e+10 -6.608e+09 0.005 -59.106 -57.361 -55.616 -53.871 -52.126 -50.380 -48.635 -46.979 -45.410 -43.921 -42.505 -41.156 -39.869 -38.638 -37.462 -36.338 -35.265 -34.241 -33.263 -32.329 -31.439 -30.590 -29.782 -29.012 -28.281 -27.586 -26.928 -26.304 -25.715 -25.159 -24.637 -24.146 -23.687 -23.259 -22.861 -22.494 -22.157 -21.849 -21.570 -21.320 -21.099 -20.907 -20.743 -20.607 -20.500 -20.421 -20.370 -20.349 -20.356 -20.389 -20.450 -20.540 -20.661 -20.811 -20.991 -21.202 -21.445 -21.719 -22.026 -22.366 -22.741 -23.150 -23.596 -24.079 -24.601 -25.162 -25.766 -26.412 -27.105 -27.845 -28.637 -29.482 -30.386 -31.353 -32.389 -33.500 -34.696 -35.988 -37.392 -38.928 -40.625 -42.526 -44.693 -47.231 -50.327 -54.325 -59.642 -62.567 -58.635 -55.214 -52.965 -51.439 -50.377 -49.642 -49.156 -48.874 -48.774 -48.846 -49.094 -49.524 -50.128 -50.839 -51.411 -51.332 -50.140 -47.976 -45.401 -42.822 -40.389 -38.132 -36.038 -34.087 -32.262 -30.544 -28.921 -27.383 -25.923 -24.533 -23.208 -21.943 -20.734 -19.578 -18.471 -17.411 -16.395 -15.422 -14.490 -13.596 -12.739 -11.918 -11.131 -10.378 -9.657 -8.968 -8.309 -7.679 -7.079 -6.507 -5.963 -5.446 -4.956 -4.492 -4.053 -3.639 -3.247 -2.879 -2.537 -2.219 -1.925 -1.655 -1.409 -1.187 -0.989 -0.815 -0.666 -0.540 -0.438 -0.361 -0.309 -0.281 -0.279 -0.302 -0.352 -0.429 -0.532 -0.664 -0.824 -1.013 -1.233 -1.484 -1.767 -2.084 -2.435 -2.819 -3.243 -3.707 -4.215 -4.769 -5.372 -6.029 -6.743 -7.521 -8.367 -9.289 -10.296 -11.399 -12.610 -13.948 -15.432 -17.092 -18.966 -21.107 -23.595 -26.555 -30.200 -34.951 -41.862 -53.684 -50.794 -48.100 -45.330 -39.272 -33.819 -29.535 -26.093 -23.238 -20.812 -18.710 -16.863 -15.221 -13.749 -12.421 -11.216 -10.117 -9.112 -8.192 -7.346 -6.568 -5.852 -5.193 -4.587 -4.030 -3.519 -3.050 -2.623 -2.233 -1.881 -1.563 -1.278 -1.023 -0.798 -0.602 -0.435 -0.296 -0.184 -0.099 -0.041 -0.008 0.000 -0.018 -0.060 -0.126 -0.216 -0.329 -0.467 -0.627 -0.811 -1.018 -1.249 -1.502 -1.779 -2.079 -2.402 -2.749 -3.120 -3.514 -3.933 -4.376 -4.842 -5.330 -5.844 -6.384 -6.949 -7.542 -8.162 -8.809 -9.485 -10.190 -10.925 -11.690 -12.486 -13.315 -14.177 -15.074 -16.005 -16.974 -17.981 -19.028 -20.117 -21.249 -22.426 -23.650 -24.925 -26.253 -27.637 -29.080 -30.588 -32.163 -33.809 -35.531 -37.334 -39.221 -41.187 -43.217 -45.270 -47.270 -49.086 -50.560 -51.578 -52.140 -52.348 -52.322 -52.128 -51.771 -51.221 -50.448 -49.450 -48.265 -46.948 -45.561 -44.151 -42.752 -41.385 -40.062 -38.788 -37.567 -36.398 -35.280 -34.213 -33.192 -32.216 -31.285 -30.399 -29.556 -28.754 -27.992 -27.270 -26.586 -25.939 -25.328 -24.753 -24.213 -23.706 -23.232 -22.791 -22.381 -22.003 -21.656 -21.339 -21.052 -20.794 -20.565 -20.365 -20.193 -20.049 -19.932 -19.844 -19.783 -19.749 -19.742 -19.762 -19.809 -19.882 -19.980 -20.104 -20.256 -20.435 -20.641 -20.874 -21.136 -21.425 -21.742 -22.087 -22.462 -22.865 -23.298 -23.761 -24.255 -24.779 -25.336 -25.924 -26.546 -27.201 -27.890 -28.615 -29.377 -30.175 -31.011 -31.886 -32.801 -33.757 -34.755 -35.796 -36.881 -38.010 -39.184 -40.404 -41.669 -42.977 -44.326 -45.715 -47.140 -48.594 -50.070 -51.554 -53.035 -54.516 -55.997 -57.477 -58.958 -60.439 0 1 1.0 1 N3 HV 25.38 30.17 0.05 7.267e+08 -3.433e+09 9.321e+08 -3.753e+09 1.165e+09 -4.086e+09 1.428e+09 -4.429e+09 1.722e+09 -4.780e+09 2.048e+09 -5.136e+09 2.407e+09 -5.494e+09 2.800e+09 -5.850e+09 3.225e+09 -6.201e+09 3.682e+09 -6.542e+09 4.170e+09 -6.870e+09 4.686e+09 -7.180e+09 5.228e+09 -7.469e+09 5.794e+09 -7.733e+09 6.378e+09 -7.969e+09 6.977e+09 -8.172e+09 7.586e+09 -8.342e+09 8.199e+09 -8.477e+09 8.810e+09 -8.574e+09 9.415e+09 -8.633e+09 1.001e+10 -8.655e+09 1.058e+10 -8.639e+09 1.113e+10 -8.587e+09 1.165e+10 -8.499e+09 1.213e+10 -8.377e+09 1.257e+10 -8.224e+09 1.297e+10 -8.041e+09 1.331e+10 -7.832e+09 1.360e+10 -7.599e+09 1.383e+10 -7.345e+09 1.401e+10 -7.073e+09 1.412e+10 -6.785e+09 1.417e+10 -6.484e+09 1.415e+10 -6.173e+09 1.407e+10 -5.854e+09 1.393e+10 -5.529e+09 1.372e+10 -5.200e+09 1.345e+10 -4.870e+09 1.312e+10 -4.539e+09 1.274e+10 -4.210e+09 1.231e+10 -3.883e+09 1.182e+10 -3.561e+09 1.129e+10 -3.246e+09 1.072e+10 -2.939e+09 1.012e+10 -2.640e+09 9.486e+09 -2.354e+09 8.830e+09 -2.080e+09 8.157e+09 -1.821e+09 7.473e+09 -1.578e+09 6.787e+09 -1.353e+09 6.103e+09 -1.147e+09 5.430e+09 -9.623e+08 4.775e+09 -7.984e+08 4.143e+09 -6.560e+08 3.542e+09 -5.351e+08 2.977e+09 -4.350e+08 2.454e+09 -3.545e+08 1.979e+09 -2.918e+08 1.553e+09 -2.448e+08 1.180e+09 -2.105e+08 8.632e+08 -1.860e+08 6.020e+08 -1.682e+08 3.962e+08 -1.548e+08 2.439e+08 -1.449e+08 1.397e+08 -1.413e+08 7.205e+07 -1.529e+08 2.001e+07 -1.913e+08 -3.849e+07 -2.632e+08 -1.155e+08 -3.701e+08 -2.123e+08 -5.115e+08 -3.257e+08 -6.882e+08 -4.506e+08 -9.013e+08 -5.805e+08 -1.151e+09 -7.093e+08 -1.438e+09 -8.306e+08 -1.763e+09 -9.381e+08 -2.124e+09 -1.026e+09 -2.520e+09 -1.089e+09 -2.950e+09 -1.123e+09 -3.410e+09 -1.122e+09 -3.899e+09 -1.083e+09 -4.412e+09 -1.005e+09 -4.945e+09 -8.832e+08 -5.494e+09 -7.176e+08 -6.055e+09 -5.078e+08 -6.621e+09 -2.542e+08 -7.186e+09 4.194e+07 -7.746e+09 3.777e+08 -8.293e+09 7.496e+08 -8.820e+09 1.153e+09 -9.320e+09 1.582e+09 -9.786e+09 2.030e+09 -1.021e+10 2.488e+09 -1.058e+10 2.947e+09 -1.089e+10 3.397e+09 -1.114e+10 3.828e+09 -1.131e+10 4.227e+09 -1.140e+10 4.581e+09 -1.141e+10 4.881e+09 -1.131e+10 5.112e+09 -1.112e+10 5.264e+09 -1.082e+10 5.329e+09 -1.041e+10 5.296e+09 -9.899e+09 5.160e+09 -9.282e+09 4.917e+09 -8.566e+09 4.569e+09 -7.760e+09 4.122e+09 -6.877e+09 3.588e+09 -5.935e+09 2.985e+09 -4.957e+09 2.339e+09 -3.970e+09 1.685e+09 -3.008e+09 1.067e+09 -2.112e+09 5.358e+08 -1.326e+09 1.462e+08 -7.065e+08 -9.222e+07 -3.134e+08 -3.651e+08 -1.023e+08 -9.825e+08 1.767e+08 -2.154e+09 7.763e+08 -4.007e+09 1.817e+09 -6.680e+09 3.374e+09 -1.032e+10 5.508e+09 -1.509e+10 8.272e+09 -2.116e+10 1.172e+10 -2.871e+10 1.587e+10 -3.791e+10 2.076e+10 -4.895e+10 2.639e+10 -6.203e+10 3.276e+10 -7.729e+10 3.983e+10 -9.495e+10 4.755e+10 -1.152e+11 5.586e+10 -1.381e+11 6.464e+10 -1.638e+11 7.379e+10 -1.926e+11 8.315e+10 -2.244e+11 9.254e+10 -2.594e+11 1.018e+11 -2.976e+11 1.106e+11 -3.391e+11 1.188e+11 -3.838e+11 1.262e+11 -4.317e+11 1.323e+11 -4.828e+11 1.369e+11 -5.371e+11 1.397e+11 -5.944e+11 1.403e+11 -6.546e+11 1.384e+11 -7.174e+11 1.336e+11 -7.827e+11 1.256e+11 -8.502e+11 1.138e+11 -9.196e+11 9.795e+10 -9.907e+11 7.761e+10 -1.063e+12 5.239e+10 -1.137e+12 2.184e+10 -1.211e+12 -1.444e+10 -1.285e+12 -5.686e+10 -1.360e+12 -1.059e+11 -1.434e+12 -1.620e+11 -1.507e+12 -2.256e+11 -1.580e+12 -2.973e+11 -1.651e+12 -3.776e+11 -1.721e+12 -4.670e+11 -1.789e+12 -5.664e+11 -1.855e+12 -6.765e+11 -1.919e+12 -7.980e+11 -1.980e+12 -9.321e+11 -2.039e+12 -1.080e+12 -2.096e+12 -1.243e+12 -2.149e+12 -1.422e+12 -2.199e+12 -1.620e+12 -2.246e+12 -1.838e+12 -2.288e+12 -2.079e+12 -2.326e+12 -2.346e+12 -2.358e+12 -2.640e+12 -2.384e+12 -2.965e+12 -2.402e+12 -3.326e+12 -2.410e+12 -3.724e+12 -2.407e+12 -4.165e+12 -2.391e+12 -4.653e+12 -2.359e+12 -5.191e+12 -2.308e+12 -5.784e+12 -2.236e+12 -6.438e+12 -2.138e+12 -7.156e+12 -2.011e+12 -7.944e+12 -1.852e+12 -8.808e+12 -1.657e+12 -9.749e+12 -1.421e+12 -1.078e+13 -1.140e+12 -1.189e+13 -8.082e+11 -1.310e+13 -4.216e+11 -1.441e+13 2.484e+10 -1.583e+13 5.356e+11 -1.735e+13 1.116e+12 -1.899e+13 1.771e+12 -2.074e+13 2.505e+12 -2.262e+13 3.323e+12 -2.462e+13 4.229e+12 -2.675e+13 5.227e+12 -2.902e+13 6.323e+12 -3.142e+13 7.518e+12 -3.396e+13 8.817e+12 -3.664e+13 1.022e+13 -3.947e+13 1.174e+13 -4.244e+13 1.336e+13 -4.556e+13 1.510e+13 -4.882e+13 1.696e+13 -5.224e+13 1.892e+13 -5.579e+13 2.100e+13 -5.950e+13 2.319e+13 -6.335e+13 2.549e+13 -6.734e+13 2.790e+13 -7.147e+13 3.042e+13 -7.573e+13 3.303e+13 -8.013e+13 3.574e+13 -8.465e+13 3.854e+13 -8.930e+13 4.141e+13 -9.405e+13 4.437e+13 -9.892e+13 4.739e+13 -1.039e+14 5.046e+13 -1.090e+14 5.359e+13 -1.141e+14 5.674e+13 -1.193e+14 5.993e+13 -1.247e+14 6.313e+13 -1.300e+14 6.633e+13 -1.354e+14 6.952e+13 -1.409e+14 7.271e+13 -1.464e+14 7.587e+13 -1.520e+14 7.899e+13 -1.575e+14 8.204e+13 -1.631e+14 8.502e+13 -1.687e+14 8.791e+13 -1.742e+14 9.070e+13 -1.798e+14 9.338e+13 -1.853e+14 9.593e+13 -1.908e+14 9.835e+13 -1.962e+14 1.006e+14 -2.016e+14 1.027e+14 -2.069e+14 1.047e+14 -2.122e+14 1.064e+14 -2.174e+14 1.080e+14 -2.225e+14 1.094e+14 -2.275e+14 1.105e+14 -2.325e+14 1.115e+14 -2.373e+14 1.122e+14 -2.420e+14 1.128e+14 -2.467e+14 1.131e+14 -2.512e+14 1.131e+14 -2.556e+14 1.130e+14 -2.600e+14 1.126e+14 -2.641e+14 1.119e+14 -2.682e+14 1.111e+14 -2.721e+14 1.100e+14 -2.759e+14 1.086e+14 -2.796e+14 1.071e+14 -2.832e+14 1.053e+14 -2.866e+14 1.033e+14 -2.899e+14 1.011e+14 -2.930e+14 9.865e+13 -2.960e+14 9.601e+13 -2.989e+14 9.318e+13 -3.016e+14 9.015e+13 -3.042e+14 8.694e+13 -3.066e+14 8.355e+13 -3.089e+14 7.999e+13 -3.111e+14 7.628e+13 -3.132e+14 7.242e+13 -3.152e+14 6.843e+13 -3.171e+14 6.430e+13 -3.189e+14 6.004e+13 -3.205e+14 5.567e+13 -3.220e+14 5.118e+13 -3.234e+14 4.660e+13 -3.247e+14 4.193e+13 -3.258e+14 3.718e+13 -3.268e+14 3.236e+13 -3.277e+14 2.748e+13 -3.285e+14 2.255e+13 -3.292e+14 1.759e+13 -3.297e+14 1.259e+13 -3.301e+14 7.577e+12 -3.303e+14 2.553e+12 -3.304e+14 -2.467e+12 -3.304e+14 -7.481e+12 -3.302e+14 -1.247e+13 -3.299e+14 -1.742e+13 -3.294e+14 -2.233e+13 -3.288e+14 -2.718e+13 -3.280e+14 -3.196e+13 -3.270e+14 -3.667e+13 -3.259e+14 -4.129e+13 -3.245e+14 -4.580e+13 -3.230e+14 -5.020e+13 -3.213e+14 -5.447e+13 -3.194e+14 -5.860e+13 -3.173e+14 -6.259e+13 -3.150e+14 -6.641e+13 -3.124e+14 -7.007e+13 -3.097e+14 -7.355e+13 -3.068e+14 -7.683e+13 -3.036e+14 -7.991e+13 -3.002e+14 -8.279e+13 -2.967e+14 -8.545e+13 -2.929e+14 -8.789e+13 -2.889e+14 -9.009e+13 -2.847e+14 -9.107e+13 -2.815e+14 -9.234e+13 -2.777e+14 -9.385e+13 -2.730e+14 -9.512e+13 -2.680e+14 -9.615e+13 -2.629e+14 -9.694e+13 -2.576e+14 -9.748e+13 -2.522e+14 -9.779e+13 -2.466e+14 -9.786e+13 -2.408e+14 -9.770e+13 -2.349e+14 -9.732e+13 -2.290e+14 -9.672e+13 -2.229e+14 -9.591e+13 -2.167e+14 -9.490e+13 -2.104e+14 -9.370e+13 -2.041e+14 -9.231e+13 -1.977e+14 -9.075e+13 -1.912e+14 -8.903e+13 -1.847e+14 -8.717e+13 -1.782e+14 -8.516e+13 -1.717e+14 -8.303e+13 -1.652e+14 -8.078e+13 -1.587e+14 -7.843e+13 -1.523e+14 -7.599e+13 -1.459e+14 -7.347e+13 -1.395e+14 -7.088e+13 -1.332e+14 -6.824e+13 -1.270e+14 -6.556e+13 -1.209e+14 -6.285e+13 -1.148e+14 -6.011e+13 -1.089e+14 -5.737e+13 -1.031e+14 -5.462e+13 -9.744e+13 -5.189e+13 -9.190e+13 -4.917e+13 -8.651e+13 -4.649e+13 -8.126e+13 -4.384e+13 -7.618e+13 -4.124e+13 -7.126e+13 -3.869e+13 -6.651e+13 -3.620e+13 -6.194e+13 -3.378e+13 -5.755e+13 -3.143e+13 -5.335e+13 -2.917e+13 -4.934e+13 -2.699e+13 -4.552e+13 -2.489e+13 -4.188e+13 -2.289e+13 -3.844e+13 -2.097e+13 -3.518e+13 -1.915e+13 -3.210e+13 -1.743e+13 -2.921e+13 -1.580e+13 -2.650e+13 -1.427e+13 -2.396e+13 -1.283e+13 -2.160e+13 -1.149e+13 -1.941e+13 -1.025e+13 -1.737e+13 -9.096e+12 -1.550e+13 -8.036e+12 -1.377e+13 -7.063e+12 -1.219e+13 -6.174e+12 -1.075e+13 -5.367e+12 -9.437e+12 -4.637e+12 -8.247e+12 -3.981e+12 -7.173e+12 -3.394e+12 -6.209e+12 -2.872e+12 -5.346e+12 -2.411e+12 -4.577e+12 -2.006e+12 -3.896e+12 -1.652e+12 -3.296e+12 -1.347e+12 -2.769e+12 -1.084e+12 -2.309e+12 -8.607e+11 -1.911e+12 -6.723e+11 -1.568e+12 -5.153e+11 -1.275e+12 -3.859e+11 -1.026e+12 -2.808e+11 -8.171e+11 -1.968e+11 -6.428e+11 -1.309e+11 -4.990e+11 -8.044e+10 -3.819e+11 -4.283e+10 -2.878e+11 -1.575e+10 -2.134e+11 2.920e+09 -1.556e+11 1.514e+10 -1.118e+11 2.275e+10 -7.939e+10 2.747e+10 -5.612e+10 3.077e+10 -3.976e+10 3.384e+10 -2.823e+10 3.734e+10 -1.974e+10 4.141e+10 -1.292e+10 4.585e+10 -6.958e+09 5.026e+10 -1.479e+09 5.426e+10 3.581e+09 5.755e+10 8.147e+09 5.991e+10 1.209e+10 6.120e+10 1.530e+10 6.139e+10 1.768e+10 6.047e+10 1.921e+10 5.853e+10 1.990e+10 5.565e+10 1.979e+10 5.199e+10 1.897e+10 4.769e+10 1.755e+10 4.293e+10 1.566e+10 3.787e+10 1.343e+10 3.270e+10 1.102e+10 2.756e+10 8.548e+09 2.263e+10 6.156e+09 1.803e+10 3.958e+09 1.389e+10 2.045e+09 1.030e+10 4.795e+08 7.354e+09 -7.188e+08 5.084e+09 -1.605e+09 3.468e+09 -2.339e+09 2.357e+09 -3.186e+09 1.466e+09 -4.416e+09 4.971e+08 -6.180e+09 -7.483e+08 -8.496e+09 -2.347e+09 -1.131e+10 -4.294e+09 -1.455e+10 -6.540e+09 -1.813e+10 -9.020e+09 -2.195e+10 -1.165e+10 -2.592e+10 -1.435e+10 -2.996e+10 -1.705e+10 -3.397e+10 -1.965e+10 -3.787e+10 -2.211e+10 -4.157e+10 -2.435e+10 -4.501e+10 -2.633e+10 -4.811e+10 -2.801e+10 -5.083e+10 -2.936e+10 -5.313e+10 -3.036e+10 -5.496e+10 -3.101e+10 -5.632e+10 -3.129e+10 -5.719e+10 -3.123e+10 -5.756e+10 -3.085e+10 -5.745e+10 -3.016e+10 -5.688e+10 -2.919e+10 -5.586e+10 -2.799e+10 -5.445e+10 -2.658e+10 -5.266e+10 -2.500e+10 -5.055e+10 -2.330e+10 -4.817e+10 -2.149e+10 -4.556e+10 -1.964e+10 -4.276e+10 -1.775e+10 -3.984e+10 -1.588e+10 -3.684e+10 -1.404e+10 -3.380e+10 -1.226e+10 -3.077e+10 -1.056e+10 -2.778e+10 -8.962e+09 -2.487e+10 -7.479e+09 -2.207e+10 -6.120e+09 -1.942e+10 -4.893e+09 -1.692e+10 -3.803e+09 -1.459e+10 -2.849e+09 -1.246e+10 -2.031e+09 -1.051e+10 -1.343e+09 -8.772e+09 -7.774e+08 -7.224e+09 -3.266e+08 -5.870e+09 2.046e+07 -4.702e+09 2.764e+08 -3.708e+09 4.541e+08 -2.878e+09 5.674e+08 -2.196e+09 6.306e+08 -1.646e+09 6.572e+08 -1.212e+09 6.599e+08 -8.739e+08 6.490e+08 -6.136e+08 6.321e+08 -4.128e+08 6.129e+08 -2.551e+08 5.915e+08 -1.274e+08 5.657e+08 -2.085e+07 5.326e+08 6.962e+07 4.895e+08 1.461e+08 4.355e+08 2.088e+08 3.711e+08 2.575e+08 2.985e+08 2.929e+08 2.207e+08 3.167e+08 1.403e+08 3.329e+08 5.707e+07 3.473e+08 -3.375e+07 3.664e+08 -1.429e+08 3.953e+08 -2.861e+08 4.353e+08 -4.805e+08 4.834e+08 -7.422e+08 5.334e+08 -1.085e+09 5.777e+08 -1.521e+09 6.082e+08 -2.056e+09 6.175e+08 -2.698e+09 5.989e+08 -3.449e+09 5.466e+08 -4.308e+09 4.564e+08 -5.275e+09 3.250e+08 -6.342e+09 1.508e+08 -7.503e+09 -6.631e+07 -8.747e+09 -3.251e+08 -1.006e+10 -6.227e+08 -1.143e+10 -9.546e+08 -1.284e+10 -1.316e+09 -1.428e+10 -1.699e+09 -1.571e+10 -2.096e+09 -1.714e+10 -2.501e+09 -1.853e+10 -2.903e+09 -1.987e+10 -3.295e+09 -2.114e+10 -3.668e+09 -2.232e+10 -4.014e+09 -2.340e+10 -4.325e+09 -2.437e+10 -4.595e+09 -2.522e+10 -4.819e+09 -2.592e+10 -4.994e+09 -2.649e+10 -5.116e+09 -2.690e+10 -5.181e+09 -2.716e+10 -5.191e+09 -2.726e+10 -5.145e+09 -2.721e+10 -5.045e+09 -2.700e+10 -4.894e+09 -2.665e+10 -4.696e+09 -2.616e+10 -4.455e+09 -2.553e+10 -4.177e+09 -2.478e+10 -3.867e+09 -2.392e+10 -3.531e+09 -2.295e+10 -3.176e+09 -2.189e+10 -2.806e+09 -2.076e+10 -2.429e+09 -1.956e+10 -2.050e+09 -1.832e+10 -1.675e+09 -1.704e+10 -1.309e+09 -1.574e+10 -9.573e+08 -1.444e+10 -6.232e+08 -1.314e+10 -3.105e+08 -1.186e+10 -2.315e+07 -1.062e+10 2.368e+08 -9.421e+09 4.674e+08 -8.276e+09 6.670e+08 -7.196e+09 8.351e+08 -6.186e+09 9.717e+08 -5.256e+09 1.078e+09 -4.409e+09 1.154e+09 -3.648e+09 1.204e+09 -2.976e+09 1.231e+09 -2.392e+09 1.239e+09 -1.891e+09 1.234e+09 -1.471e+09 1.222e+09 -1.123e+09 1.212e+09 -8.341e+08 1.210e+09 -5.927e+08 1.221e+09 -3.842e+08 1.251e+09 -1.948e+08 1.299e+09 -1.451e+07 1.362e+09 1.639e+08 1.436e+09 3.438e+08 1.514e+09 5.246e+08 1.590e+09 7.039e+08 1.656e+09 8.779e+08 1.709e+09 1.042e+09 1.742e+09 1.190e+09 1.754e+09 1.319e+09 1.741e+09 1.424e+09 1.702e+09 1.502e+09 1.638e+09 1.550e+09 1.550e+09 1.569e+09 1.438e+09 1.556e+09 1.308e+09 1.515e+09 1.161e+09 1.446e+09 1.003e+09 1.352e+09 8.380e+08 1.239e+09 6.719e+08 1.110e+09 5.099e+08 9.713e+08 3.572e+08 8.294e+08 2.182e+08 6.907e+08 9.648e+07 5.622e+08 -6.556e+06 4.500e+08 -9.301e+07 3.584e+08 -1.699e+08 2.868e+08 -2.498e+08 2.277e+08 -3.490e+08 1.676e+08 -4.824e+08 9.127e+07 -6.595e+08 -1.421e+07 -8.848e+08 -1.583e+08 -1.159e+09 -3.470e+08 -1.482e+09 -5.846e+08 -1.850e+09 -8.733e+08 -2.262e+09 -1.214e+09 -2.713e+09 -1.606e+09 -3.199e+09 -2.048e+09 -3.715e+09 -2.537e+09 -4.256e+09 -3.070e+09 -4.816e+09 -3.644e+09 -5.391e+09 -4.252e+09 -5.973e+09 -4.890e+09 -6.556e+09 -5.552e+09 -7.135e+09 -6.229e+09 -7.702e+09 -6.915e+09 -8.252e+09 -7.603e+09 -8.779e+09 -8.283e+09 -9.276e+09 -8.948e+09 -9.737e+09 -9.590e+09 -1.016e+10 -1.020e+10 -1.054e+10 -1.078e+10 -1.086e+10 -1.130e+10 -1.114e+10 -1.178e+10 -1.135e+10 -1.220e+10 -1.151e+10 -1.256e+10 -1.161e+10 -1.285e+10 -1.165e+10 -1.308e+10 -1.163e+10 -1.323e+10 -1.155e+10 -1.331e+10 -1.140e+10 -1.332e+10 -1.120e+10 -1.325e+10 -1.094e+10 0.005 -59.214 -57.584 -55.954 -54.324 -52.693 -51.063 -49.433 -47.871 -46.376 -44.940 -43.559 -42.229 -40.950 -39.716 -38.529 -37.389 -36.295 -35.246 -34.242 -33.281 -32.362 -31.485 -30.649 -29.852 -29.093 -28.373 -27.689 -27.041 -26.429 -25.851 -25.307 -24.795 -24.317 -23.870 -23.454 -23.070 -22.716 -22.392 -22.098 -21.833 -21.597 -21.391 -21.213 -21.064 -20.943 -20.851 -20.787 -20.752 -20.746 -20.767 -20.815 -20.893 -20.999 -21.136 -21.302 -21.499 -21.727 -21.986 -22.277 -22.601 -22.958 -23.349 -23.776 -24.238 -24.738 -25.277 -25.856 -26.477 -27.142 -27.853 -28.613 -29.426 -30.293 -31.222 -32.216 -33.283 -34.431 -35.673 -37.022 -38.500 -40.134 -41.968 -44.063 -46.525 -49.541 -53.453 -58.680 -61.512 -57.482 -53.960 -51.609 -49.980 -48.817 -47.983 -47.402 -47.033 -46.855 -46.861 -47.056 -47.446 -48.026 -48.727 -49.304 -49.244 -48.083 -45.961 -43.437 -40.915 -38.547 -36.356 -34.331 -32.452 -30.698 -29.051 -27.497 -26.026 -24.632 -23.305 -22.041 -20.835 -19.682 -18.579 -17.522 -16.510 -15.540 -14.611 -13.720 -12.865 -12.045 -11.260 -10.507 -9.786 -9.095 -8.435 -7.803 -7.200 -6.625 -6.077 -5.556 -5.060 -4.591 -4.147 -3.728 -3.331 -2.957 -2.606 -2.280 -1.977 -1.698 -1.443 -1.211 -1.003 -0.818 -0.657 -0.519 -0.406 -0.316 -0.250 -0.209 -0.193 -0.201 -0.235 -0.295 -0.382 -0.496 -0.637 -0.807 -1.007 -1.237 -1.498 -1.791 -2.118 -2.479 -2.875 -3.309 -3.785 -4.304 -4.871 -5.487 -6.158 -6.887 -7.680 -8.542 -9.483 -10.511 -11.636 -12.873 -14.240 -15.759 -17.459 -19.381 -21.584 -24.150 -27.213 -31.002 -35.970 -43.238 -55.743 -54.502 -56.785 -48.148 -39.019 -33.204 -28.933 -25.555 -22.765 -20.394 -18.339 -16.531 -14.922 -13.479 -12.176 -10.992 -9.913 -8.925 -8.020 -7.188 -6.422 -5.718 -5.070 -4.474 -3.926 -3.423 -2.963 -2.543 -2.161 -1.815 -1.504 -1.226 -0.977 -0.757 -0.567 -0.405 -0.271 -0.165 -0.085 -0.031 -0.003 0.000 -0.022 -0.069 -0.140 -0.235 -0.353 -0.495 -0.660 -0.849 -1.061 -1.296 -1.555 -1.837 -2.143 -2.472 -2.824 -3.201 -3.602 -4.027 -4.476 -4.949 -5.445 -5.966 -6.514 -7.089 -7.690 -8.319 -8.977 -9.663 -10.379 -11.126 -11.904 -12.713 -13.556 -14.433 -15.345 -16.294 -17.281 -18.306 -19.374 -20.484 -21.638 -22.840 -24.090 -25.392 -26.748 -28.162 -29.637 -31.177 -32.786 -34.468 -36.225 -38.066 -39.989 -41.992 -44.057 -46.144 -48.175 -50.020 -51.520 -52.558 -53.136 -53.354 -53.331 -53.134 -52.767 -52.200 -51.405 -50.379 -49.160 -47.806 -46.377 -44.923 -43.478 -42.064 -40.692 -39.370 -38.100 -36.884 -35.720 -34.607 -33.542 -32.524 -31.552 -30.625 -29.743 -28.904 -28.107 -27.350 -26.632 -25.952 -25.310 -24.703 -24.133 -23.596 -23.094 -22.624 -22.187 -21.781 -21.406 -21.062 -20.747 -20.462 -20.206 -19.979 -19.779 -19.608 -19.463 -19.346 -19.256 -19.193 -19.156 -19.146 -19.162 -19.203 -19.267 -19.358 -19.475 -19.617 -19.786 -19.981 -20.202 -20.449 -20.722 -21.022 -21.349 -21.703 -22.084 -22.493 -22.930 -23.394 -23.888 -24.410 -24.962 -25.544 -26.156 -26.798 -27.473 -28.179 -28.917 -29.689 -30.495 -31.334 -32.208 -33.118 -34.062 -35.043 -36.059 -37.111 -38.197 -39.317 -40.465 -41.643 -42.845 -44.066 -45.299 -46.532 -47.755 -48.979 -50.202 -51.426 -52.649 -53.873 0 1 1.0 1 N3 VV 25.38 30.17 0.05 -3.295e+09 -1.737e+09 -3.548e+09 -2.045e+09 -3.804e+09 -2.385e+09 -4.058e+09 -2.759e+09 -4.308e+09 -3.166e+09 -4.551e+09 -3.607e+09 -4.781e+09 -4.082e+09 -4.997e+09 -4.589e+09 -5.192e+09 -5.127e+09 -5.364e+09 -5.693e+09 -5.508e+09 -6.285e+09 -5.621e+09 -6.899e+09 -5.700e+09 -7.530e+09 -5.742e+09 -8.174e+09 -5.745e+09 -8.826e+09 -5.706e+09 -9.480e+09 -5.625e+09 -1.013e+10 -5.503e+09 -1.077e+10 -5.341e+09 -1.140e+10 -5.139e+09 -1.200e+10 -4.901e+09 -1.257e+10 -4.628e+09 -1.311e+10 -4.324e+09 -1.362e+10 -3.994e+09 -1.408e+10 -3.641e+09 -1.448e+10 -3.271e+09 -1.484e+10 -2.887e+09 -1.514e+10 -2.496e+09 -1.538e+10 -2.101e+09 -1.556e+10 -1.708e+09 -1.568e+10 -1.321e+09 -1.573e+10 -9.447e+08 -1.571e+10 -5.823e+08 -1.564e+10 -2.377e+08 -1.549e+10 8.667e+07 -1.529e+10 3.879e+08 -1.502e+10 6.637e+08 -1.469e+10 9.130e+08 -1.431e+10 1.134e+09 -1.387e+10 1.327e+09 -1.338e+10 1.490e+09 -1.284e+10 1.624e+09 -1.226e+10 1.729e+09 -1.164e+10 1.805e+09 -1.099e+10 1.853e+09 -1.031e+10 1.874e+09 -9.614e+09 1.868e+09 -8.898e+09 1.837e+09 -8.173e+09 1.783e+09 -7.446e+09 1.708e+09 -6.724e+09 1.612e+09 -6.013e+09 1.499e+09 -5.321e+09 1.372e+09 -4.654e+09 1.232e+09 -4.019e+09 1.084e+09 -3.422e+09 9.310e+08 -2.867e+09 7.765e+08 -2.359e+09 6.247e+08 -1.903e+09 4.797e+08 -1.499e+09 3.455e+08 -1.149e+09 2.262e+08 -8.540e+08 1.250e+08 -6.127e+08 4.412e+07 -4.231e+08 -1.611e+07 -2.832e+08 -6.042e+07 -1.893e+08 -1.017e+08 -1.351e+08 -1.597e+08 -1.074e+08 -2.504e+08 -9.022e+07 -3.810e+08 -7.394e+07 -5.517e+08 -5.754e+07 -7.617e+08 -4.455e+07 -1.010e+09 -4.042e+07 -1.293e+09 -5.126e+07 -1.609e+09 -8.314e+07 -1.955e+09 -1.419e+08 -2.326e+09 -2.329e+08 -2.718e+09 -3.606e+08 -3.128e+09 -5.293e+08 -3.549e+09 -7.417e+08 -3.976e+09 -1.000e+09 -4.406e+09 -1.307e+09 -4.830e+09 -1.661e+09 -5.245e+09 -2.062e+09 -5.645e+09 -2.509e+09 -6.024e+09 -2.999e+09 -6.378e+09 -3.528e+09 -6.701e+09 -4.092e+09 -6.988e+09 -4.683e+09 -7.236e+09 -5.295e+09 -7.440e+09 -5.920e+09 -7.597e+09 -6.548e+09 -7.704e+09 -7.169e+09 -7.759e+09 -7.771e+09 -7.760e+09 -8.341e+09 -7.707e+09 -8.868e+09 -7.597e+09 -9.336e+09 -7.433e+09 -9.732e+09 -7.216e+09 -1.004e+10 -6.946e+09 -1.025e+10 -6.628e+09 -1.035e+10 -6.265e+09 -1.032e+10 -5.862e+09 -1.016e+10 -5.423e+09 -9.862e+09 -4.956e+09 -9.416e+09 -4.467e+09 -8.826e+09 -3.964e+09 -8.098e+09 -3.456e+09 -7.244e+09 -2.951e+09 -6.282e+09 -2.458e+09 -5.242e+09 -1.988e+09 -4.160e+09 -1.548e+09 -3.083e+09 -1.147e+09 -2.070e+09 -7.935e+08 -1.191e+09 -5.002e+08 -5.207e+08 -3.107e+08 -1.022e+08 -2.926e+08 2.417e+08 -4.178e+08 9.075e+08 -6.015e+08 2.211e+09 -8.229e+08 4.324e+09 -1.107e+09 7.404e+09 -1.496e+09 1.160e+10 -2.047e+09 1.708e+10 -2.830e+09 2.400e+10 -3.930e+09 3.253e+10 -5.444e+09 4.280e+10 -7.486e+09 5.496e+10 -1.019e+10 6.916e+10 -1.368e+10 8.548e+10 -1.813e+10 1.040e+11 -2.371e+10 1.249e+11 -3.059e+10 1.481e+11 -3.897e+10 1.737e+11 -4.905e+10 2.017e+11 -6.103e+10 2.319e+11 -7.514e+10 2.643e+11 -9.159e+10 2.989e+11 -1.106e+11 3.353e+11 -1.324e+11 3.736e+11 -1.571e+11 4.133e+11 -1.850e+11 4.543e+11 -2.164e+11 4.963e+11 -2.513e+11 5.390e+11 -2.900e+11 5.820e+11 -3.326e+11 6.249e+11 -3.793e+11 6.673e+11 -4.302e+11 7.087e+11 -4.856e+11 7.487e+11 -5.454e+11 7.868e+11 -6.098e+11 8.225e+11 -6.790e+11 8.553e+11 -7.530e+11 8.846e+11 -8.319e+11 9.100e+11 -9.160e+11 9.308e+11 -1.005e+12 9.466e+11 -1.100e+12 9.566e+11 -1.200e+12 9.605e+11 -1.307e+12 9.575e+11 -1.419e+12 9.471e+11 -1.538e+12 9.284e+11 -1.665e+12 9.009e+11 -1.799e+12 8.637e+11 -1.941e+12 8.158e+11 -2.093e+12 7.562e+11 -2.255e+12 6.838e+11 -2.428e+12 5.970e+11 -2.614e+12 4.942e+11 -2.813e+12 3.735e+11 -3.028e+12 2.326e+11 -3.259e+12 6.889e+10 -3.508e+12 -1.204e+11 -3.778e+12 -3.390e+11 -4.069e+12 -5.905e+11 -4.382e+12 -8.789e+11 -4.721e+12 -1.209e+12 -5.085e+12 -1.586e+12 -5.476e+12 -2.015e+12 -5.895e+12 -2.502e+12 -6.344e+12 -3.053e+12 -6.822e+12 -3.674e+12 -7.331e+12 -4.372e+12 -7.870e+12 -5.153e+12 -8.440e+12 -6.024e+12 -9.041e+12 -6.992e+12 -9.673e+12 -8.064e+12 -1.034e+13 -9.248e+12 -1.103e+13 -1.055e+13 -1.175e+13 -1.198e+13 -1.250e+13 -1.354e+13 -1.328e+13 -1.525e+13 -1.409e+13 -1.710e+13 -1.492e+13 -1.910e+13 -1.578e+13 -2.127e+13 -1.666e+13 -2.360e+13 -1.756e+13 -2.610e+13 -1.849e+13 -2.879e+13 -1.943e+13 -3.165e+13 -2.040e+13 -3.471e+13 -2.138e+13 -3.796e+13 -2.238e+13 -4.140e+13 -2.339e+13 -4.505e+13 -2.442e+13 -4.890e+13 -2.546e+13 -5.296e+13 -2.651e+13 -5.721e+13 -2.757e+13 -6.168e+13 -2.865e+13 -6.635e+13 -2.973e+13 -7.123e+13 -3.081e+13 -7.631e+13 -3.191e+13 -8.158e+13 -3.301e+13 -8.705e+13 -3.412e+13 -9.270e+13 -3.524e+13 -9.854e+13 -3.636e+13 -1.045e+14 -3.748e+13 -1.107e+14 -3.862e+13 -1.170e+14 -3.976e+13 -1.235e+14 -4.091e+13 -1.301e+14 -4.207e+13 -1.368e+14 -4.325e+13 -1.436e+14 -4.444e+13 -1.504e+14 -4.564e+13 -1.574e+14 -4.686e+13 -1.644e+14 -4.810e+13 -1.715e+14 -4.935e+13 -1.785e+14 -5.064e+13 -1.856e+14 -5.196e+13 -1.927e+14 -5.331e+13 -1.997e+14 -5.471e+13 -2.067e+14 -5.615e+13 -2.136e+14 -5.764e+13 -2.204e+14 -5.918e+13 -2.271e+14 -6.079e+13 -2.337e+14 -6.247e+13 -2.402e+14 -6.421e+13 -2.465e+14 -6.603e+13 -2.527e+14 -6.792e+13 -2.587e+14 -6.990e+13 -2.646e+14 -7.197e+13 -2.702e+14 -7.413e+13 -2.757e+14 -7.638e+13 -2.809e+14 -7.873e+13 -2.859e+14 -8.118e+13 -2.908e+14 -8.373e+13 -2.954e+14 -8.638e+13 -2.998e+14 -8.913e+13 -3.039e+14 -9.199e+13 -3.078e+14 -9.495e+13 -3.115e+14 -9.801e+13 -3.149e+14 -1.012e+14 -3.181e+14 -1.044e+14 -3.211e+14 -1.078e+14 -3.238e+14 -1.112e+14 -3.263e+14 -1.148e+14 -3.286e+14 -1.184e+14 -3.306e+14 -1.221e+14 -3.323e+14 -1.259e+14 -3.338e+14 -1.298e+14 -3.351e+14 -1.337e+14 -3.362e+14 -1.377e+14 -3.370e+14 -1.418e+14 -3.376e+14 -1.459e+14 -3.379e+14 -1.501e+14 -3.381e+14 -1.543e+14 -3.381e+14 -1.587e+14 -3.379e+14 -1.630e+14 -3.375e+14 -1.674e+14 -3.369e+14 -1.718e+14 -3.361e+14 -1.762e+14 -3.351e+14 -1.806e+14 -3.340e+14 -1.850e+14 -3.326e+14 -1.894e+14 -3.310e+14 -1.938e+14 -3.293e+14 -1.982e+14 -3.274e+14 -2.025e+14 -3.253e+14 -2.068e+14 -3.231e+14 -2.110e+14 -3.207e+14 -2.152e+14 -3.182e+14 -2.193e+14 -3.155e+14 -2.233e+14 -3.127e+14 -2.272e+14 -3.098e+14 -2.310e+14 -3.067e+14 -2.347e+14 -3.036e+14 -2.382e+14 -3.003e+14 -2.416e+14 -2.968e+14 -2.449e+14 -2.933e+14 -2.479e+14 -2.896e+14 -2.508e+14 -2.859e+14 -2.534e+14 -2.820e+14 -2.559e+14 -2.780e+14 -2.581e+14 -2.740e+14 -2.600e+14 -2.698e+14 -2.617e+14 -2.655e+14 -2.632e+14 -2.612e+14 -2.643e+14 -2.567e+14 -2.652e+14 -2.522e+14 -2.657e+14 -2.476e+14 -2.660e+14 -2.429e+14 -2.659e+14 -2.381e+14 -2.655e+14 -2.333e+14 -2.648e+14 -2.284e+14 -2.638e+14 -2.234e+14 -2.641e+14 -2.160e+14 -2.607e+14 -2.154e+14 -2.587e+14 -2.102e+14 -2.563e+14 -2.050e+14 -2.536e+14 -1.998e+14 -2.506e+14 -1.945e+14 -2.472e+14 -1.892e+14 -2.436e+14 -1.839e+14 -2.397e+14 -1.786e+14 -2.356e+14 -1.732e+14 -2.311e+14 -1.679e+14 -2.264e+14 -1.626e+14 -2.215e+14 -1.572e+14 -2.164e+14 -1.520e+14 -2.111e+14 -1.467e+14 -2.056e+14 -1.415e+14 -1.999e+14 -1.363e+14 -1.941e+14 -1.311e+14 -1.882e+14 -1.260e+14 -1.821e+14 -1.209e+14 -1.760e+14 -1.159e+14 -1.697e+14 -1.110e+14 -1.635e+14 -1.062e+14 -1.571e+14 -1.014e+14 -1.508e+14 -9.671e+13 -1.445e+14 -9.210e+13 -1.381e+14 -8.758e+13 -1.318e+14 -8.317e+13 -1.256e+14 -7.885e+13 -1.194e+14 -7.463e+13 -1.133e+14 -7.053e+13 -1.073e+14 -6.654e+13 -1.013e+14 -6.267e+13 -9.555e+13 -5.892e+13 -8.989e+13 -5.529e+13 -8.437e+13 -5.178e+13 -7.902e+13 -4.840e+13 -7.382e+13 -4.516e+13 -6.880e+13 -4.204e+13 -6.396e+13 -3.906e+13 -5.931e+13 -3.621e+13 -5.485e+13 -3.349e+13 -5.060e+13 -3.091e+13 -4.654e+13 -2.846e+13 -4.268e+13 -2.614e+13 -3.903e+13 -2.396e+13 -3.558e+13 -2.189e+13 -3.232e+13 -1.995e+13 -2.927e+13 -1.814e+13 -2.642e+13 -1.644e+13 -2.376e+13 -1.486e+13 -2.128e+13 -1.339e+13 -1.899e+13 -1.202e+13 -1.688e+13 -1.076e+13 -1.494e+13 -9.603e+12 -1.317e+13 -8.537e+12 -1.155e+13 -7.562e+12 -1.008e+13 -6.673e+12 -8.748e+12 -5.864e+12 -7.552e+12 -5.131e+12 -6.482e+12 -4.470e+12 -5.528e+12 -3.876e+12 -4.682e+12 -3.344e+12 -3.938e+12 -2.869e+12 -3.285e+12 -2.448e+12 -2.716e+12 -2.076e+12 -2.225e+12 -1.750e+12 -1.803e+12 -1.464e+12 -1.444e+12 -1.216e+12 -1.142e+12 -1.002e+12 -8.886e+11 -8.181e+11 -6.796e+11 -6.617e+11 -5.093e+11 -5.297e+11 -3.723e+11 -4.192e+11 -2.641e+11 -3.277e+11 -1.804e+11 -2.530e+11 -1.171e+11 -1.927e+11 -7.056e+10 -1.450e+11 -3.755e+10 -1.081e+11 -1.488e+10 -8.035e+10 3.573e+08 -6.034e+10 1.086e+10 -4.656e+10 1.897e+10 -3.743e+10 2.631e+10 -3.139e+10 3.368e+10 -2.707e+10 4.119e+10 -2.355e+10 4.852e+10 -2.031e+10 5.526e+10 -1.718e+10 6.101e+10 -1.414e+10 6.549e+10 -1.128e+10 6.848e+10 -8.668e+09 6.992e+10 -6.394e+09 6.981e+10 -4.512e+09 6.822e+10 -3.052e+09 6.530e+10 -2.011e+09 6.123e+10 -1.367e+09 5.624e+10 -1.076e+09 5.056e+10 -1.080e+09 4.443e+10 -1.310e+09 3.810e+10 -1.694e+09 3.180e+10 -2.156e+09 2.574e+10 -2.626e+09 2.012e+10 -3.042e+09 1.509e+10 -3.355e+09 1.078e+10 -3.539e+09 7.279e+09 -3.605e+09 4.601e+09 -3.623e+09 2.659e+09 -3.744e+09 1.195e+09 -4.179e+09 -1.866e+08 -5.097e+09 -1.849e+09 -6.535e+09 -4.000e+09 -8.439e+09 -6.700e+09 -1.073e+10 -9.911e+09 -1.333e+10 -1.355e+10 -1.617e+10 -1.752e+10 -1.918e+10 -2.171e+10 -2.231e+10 -2.599e+10 -2.549e+10 -3.025e+10 -2.866e+10 -3.439e+10 -3.176e+10 -3.831e+10 -3.474e+10 -4.191e+10 -3.753e+10 -4.513e+10 -4.009e+10 -4.790e+10 -4.237e+10 -5.018e+10 -4.436e+10 -5.193e+10 -4.601e+10 -5.313e+10 -4.730e+10 -5.379e+10 -4.821e+10 -5.390e+10 -4.875e+10 -5.349e+10 -4.890e+10 -5.258e+10 -4.868e+10 -5.123e+10 -4.810e+10 -4.946e+10 -4.718e+10 -4.734e+10 -4.594e+10 -4.491e+10 -4.441e+10 -4.224e+10 -4.263e+10 -3.937e+10 -4.062e+10 -3.637e+10 -3.843e+10 -3.330e+10 -3.610e+10 -3.020e+10 -3.367e+10 -2.712e+10 -3.116e+10 -2.410e+10 -2.863e+10 -2.119e+10 -2.610e+10 -1.842e+10 -2.360e+10 -1.581e+10 -2.117e+10 -1.338e+10 -1.883e+10 -1.116e+10 -1.660e+10 -9.153e+09 -1.450e+10 -7.361e+09 -1.255e+10 -5.789e+09 -1.074e+10 -4.431e+09 -9.104e+09 -3.278e+09 -7.627e+09 -2.320e+09 -6.314e+09 -1.540e+09 -5.164e+09 -9.216e+08 -4.169e+09 -4.457e+08 -3.323e+09 -9.151e+07 -2.615e+09 1.626e+08 -2.033e+09 3.376e+08 -1.564e+09 4.540e+08 -1.192e+09 5.298e+08 -9.010e+08 5.794e+08 -6.727e+08 6.126e+08 -4.911e+08 6.340e+08 -3.416e+08 6.441e+08 -2.137e+08 6.410e+08 -1.011e+08 6.224e+08 -4.361e+05 5.867e+08 8.860e+07 5.340e+08 1.654e+08 4.663e+08 2.293e+08 3.875e+08 2.805e+08 3.019e+08 3.213e+08 2.128e+08 3.563e+08 1.204e+08 3.930e+08 1.868e+07 4.399e+08 -1.055e+08 5.046e+08 -2.700e+08 5.908e+08 -4.945e+08 6.980e+08 -7.974e+08 8.223e+08 -1.194e+09 9.583e+08 -1.697e+09 1.100e+09 -2.314e+09 1.241e+09 -3.054e+09 1.376e+09 -3.916e+09 1.499e+09 -4.903e+09 1.606e+09 -6.009e+09 1.693e+09 -7.227e+09 1.758e+09 -8.549e+09 1.798e+09 -9.960e+09 1.812e+09 -1.144e+10 1.801e+09 -1.298e+10 1.766e+09 -1.456e+10 1.708e+09 -1.615e+10 1.631e+09 -1.774e+10 1.537e+09 -1.929e+10 1.430e+09 -2.080e+10 1.316e+09 -2.223e+10 1.198e+09 -2.356e+10 1.080e+09 -2.479e+10 9.671e+08 -2.588e+10 8.629e+08 -2.684e+10 7.702e+08 -2.763e+10 6.916e+08 -2.826e+10 6.297e+08 -2.872e+10 5.868e+08 -2.900e+10 5.637e+08 -2.911e+10 5.608e+08 -2.904e+10 5.778e+08 -2.880e+10 6.138e+08 -2.840e+10 6.674e+08 -2.783e+10 7.368e+08 -2.712e+10 8.195e+08 -2.628e+10 9.134e+08 -2.531e+10 1.016e+09 -2.424e+10 1.124e+09 -2.307e+10 1.234e+09 -2.182e+10 1.345e+09 -2.051e+10 1.454e+09 -1.916e+10 1.557e+09 -1.777e+10 1.654e+09 -1.637e+10 1.740e+09 -1.497e+10 1.816e+09 -1.358e+10 1.879e+09 -1.221e+10 1.928e+09 -1.089e+10 1.961e+09 -9.623e+09 1.979e+09 -8.416e+09 1.981e+09 -7.281e+09 1.967e+09 -6.225e+09 1.937e+09 -5.255e+09 1.892e+09 -4.375e+09 1.835e+09 -3.587e+09 1.766e+09 -2.894e+09 1.691e+09 -2.294e+09 1.611e+09 -1.782e+09 1.531e+09 -1.354e+09 1.459e+09 -9.986e+08 1.398e+09 -7.041e+08 1.356e+09 -4.568e+08 1.335e+09 -2.412e+08 1.338e+09 -4.381e+07 1.362e+09 1.454e+08 1.404e+09 3.326e+08 1.458e+09 5.204e+08 1.517e+09 7.071e+08 1.573e+09 8.891e+08 1.621e+09 1.062e+09 1.656e+09 1.219e+09 1.673e+09 1.356e+09 1.669e+09 1.467e+09 1.643e+09 1.548e+09 1.593e+09 1.597e+09 1.521e+09 1.612e+09 1.426e+09 1.592e+09 1.312e+09 1.539e+09 1.181e+09 1.454e+09 1.037e+09 1.343e+09 8.845e+08 1.208e+09 7.282e+08 1.056e+09 5.732e+08 8.943e+08 4.253e+08 7.291e+08 2.896e+08 5.681e+08 1.711e+08 4.194e+08 7.401e+07 2.912e+08 5.526e+05 1.906e+08 -5.179e+07 1.201e+08 -9.474e+07 6.991e+07 -1.507e+08 1.633e+07 -2.423e+08 -6.564e+07 -3.818e+08 -1.921e+08 -5.718e+08 -3.716e+08 -8.125e+08 -6.090e+08 -1.103e+09 -9.063e+08 -1.442e+09 -1.265e+09 -1.826e+09 -1.684e+09 -2.255e+09 -2.162e+09 -2.722e+09 -2.697e+09 -3.227e+09 -3.286e+09 -3.763e+09 -3.923e+09 -4.326e+09 -4.604e+09 -4.910e+09 -5.325e+09 -5.511e+09 -6.077e+09 -6.121e+09 -6.854e+09 -6.735e+09 -7.650e+09 -7.348e+09 -8.454e+09 -7.951e+09 -9.259e+09 -8.539e+09 -1.006e+10 -9.107e+09 -1.084e+10 -9.648e+09 -1.160e+10 -1.016e+10 -1.232e+10 -1.063e+10 -1.300e+10 -1.105e+10 -1.363e+10 -1.143e+10 -1.420e+10 -1.176e+10 -1.471e+10 -1.203e+10 -1.515e+10 -1.224e+10 -1.551e+10 -1.239e+10 -1.580e+10 -1.248e+10 -1.600e+10 -1.251e+10 -1.612e+10 -1.247e+10 -1.615e+10 -1.238e+10 -1.609e+10 -1.222e+10 -1.595e+10 -1.200e+10 0.005 -63.051 -61.177 -59.304 -57.430 -55.556 -53.683 -51.809 -50.006 -48.287 -46.649 -45.089 -43.602 -42.182 -40.823 -39.525 -38.285 -37.101 -35.971 -34.893 -33.864 -32.883 -31.949 -31.059 -30.213 -29.408 -28.645 -27.920 -27.234 -26.585 -25.972 -25.394 -24.851 -24.341 -23.864 -23.420 -23.007 -22.626 -22.275 -21.954 -21.663 -21.402 -21.170 -20.967 -20.792 -20.646 -20.528 -20.439 -20.378 -20.346 -20.339 -20.360 -20.410 -20.488 -20.595 -20.731 -20.896 -21.091 -21.315 -21.570 -21.856 -22.172 -22.521 -22.902 -23.316 -23.764 -24.246 -24.764 -25.318 -25.909 -26.539 -27.208 -27.919 -28.672 -29.469 -30.312 -31.203 -32.143 -33.135 -34.181 -35.281 -36.437 -37.649 -38.908 -40.207 -41.527 -42.835 -44.074 -45.163 -46.017 -46.578 -46.844 -46.872 -46.751 -46.566 -46.384 -46.253 -46.212 -46.294 -46.536 -46.983 -47.704 -48.794 -50.375 -52.393 -53.637 -52.094 -48.425 -44.715 -41.527 -38.785 -36.374 -34.211 -32.241 -30.424 -28.732 -27.148 -25.657 -24.247 -22.911 -21.640 -20.430 -19.275 -18.172 -17.117 -16.107 -15.141 -14.216 -13.329 -12.479 -11.665 -10.885 -10.138 -9.423 -8.739 -8.084 -7.459 -6.863 -6.294 -5.753 -5.238 -4.749 -4.286 -3.849 -3.434 -3.041 -2.673 -2.329 -2.009 -1.713 -1.440 -1.191 -0.965 -0.763 -0.584 -0.429 -0.298 -0.190 -0.106 -0.046 -0.011 0.000 -0.014 -0.054 -0.120 -0.213 -0.332 -0.479 -0.655 -0.860 -1.095 -1.362 -1.660 -1.991 -2.355 -2.755 -3.195 -3.676 -4.201 -4.772 -5.393 -6.068 -6.802 -7.598 -8.465 -9.409 -10.439 -11.566 -12.803 -14.168 -15.683 -17.375 -19.283 -21.459 -23.982 -26.966 -30.602 -35.228 -41.540 -51.285 -67.583 -57.217 -44.939 -37.562 -32.373 -28.392 -25.175 -22.485 -20.182 -18.176 -16.405 -14.826 -13.407 -12.123 -10.957 -9.893 -8.919 -8.026 -7.206 -6.451 -5.757 -5.119 -4.531 -3.992 -3.498 -3.046 -2.634 -2.260 -1.922 -1.618 -1.344 -1.101 -0.888 -0.705 -0.550 -0.423 -0.324 -0.251 -0.204 -0.183 -0.187 -0.216 -0.270 -0.348 -0.449 -0.575 -0.724 -0.896 -1.092 -1.311 -1.553 -1.819 -2.108 -2.421 -2.757 -3.117 -3.501 -3.910 -4.342 -4.797 -5.275 -5.779 -6.308 -6.864 -7.446 -8.055 -8.692 -9.357 -10.051 -10.774 -11.528 -12.313 -13.130 -13.979 -14.862 -15.780 -16.734 -17.726 -18.756 -19.827 -20.939 -22.094 -23.295 -24.542 -25.838 -27.186 -28.587 -30.043 -31.557 -33.127 -34.756 -36.442 -38.180 -39.954 -41.737 -43.479 -45.105 -46.518 -47.623 -48.373 -48.789 -48.946 -48.928 -48.797 -48.585 -48.298 -47.925 -47.447 -46.848 -46.119 -45.262 -44.295 -43.241 -42.128 -40.980 -39.819 -38.663 -37.525 -36.413 -35.333 -34.287 -33.276 -32.305 -31.375 -30.485 -29.634 -28.824 -28.053 -27.320 -26.625 -25.967 -25.345 -24.758 -24.207 -23.689 -23.204 -22.752 -22.332 -21.943 -21.585 -21.257 -20.959 -20.690 -20.450 -20.239 -20.056 -19.900 -19.772 -19.671 -19.597 -19.550 -19.530 -19.536 -19.568 -19.623 -19.705 -19.813 -19.948 -20.109 -20.296 -20.509 -20.749 -21.015 -21.308 -21.629 -21.976 -22.351 -22.754 -23.185 -23.645 -24.133 -24.651 -25.199 -25.777 -26.386 -27.027 -27.699 -28.405 -29.144 -29.917 -30.725 -31.568 -32.449 -33.367 -34.323 -35.319 -36.354 -37.431 -38.549 -39.708 -40.908 -42.149 -43.433 -44.758 -46.121 -47.518 -48.942 -50.365 -51.789 -53.213 -54.636 -56.060 0 1 1.0 1 N3 VH 25.38 30.17 0.05 1.176e+09 -1.114e+09 1.234e+09 -1.153e+09 1.293e+09 -1.194e+09 1.352e+09 -1.238e+09 1.411e+09 -1.286e+09 1.472e+09 -1.337e+09 1.535e+09 -1.393e+09 1.600e+09 -1.452e+09 1.668e+09 -1.517e+09 1.740e+09 -1.587e+09 1.817e+09 -1.661e+09 1.899e+09 -1.739e+09 1.987e+09 -1.821e+09 2.082e+09 -1.907e+09 2.183e+09 -1.994e+09 2.291e+09 -2.082e+09 2.405e+09 -2.169e+09 2.526e+09 -2.254e+09 2.652e+09 -2.334e+09 2.782e+09 -2.409e+09 2.915e+09 -2.474e+09 3.049e+09 -2.530e+09 3.182e+09 -2.574e+09 3.312e+09 -2.603e+09 3.435e+09 -2.618e+09 3.549e+09 -2.616e+09 3.651e+09 -2.596e+09 3.738e+09 -2.560e+09 3.807e+09 -2.506e+09 3.856e+09 -2.435e+09 3.881e+09 -2.349e+09 3.881e+09 -2.249e+09 3.855e+09 -2.137e+09 3.801e+09 -2.015e+09 3.719e+09 -1.885e+09 3.610e+09 -1.750e+09 3.474e+09 -1.614e+09 3.314e+09 -1.477e+09 3.131e+09 -1.343e+09 2.929e+09 -1.214e+09 2.711e+09 -1.092e+09 2.481e+09 -9.774e+08 2.244e+09 -8.722e+08 2.003e+09 -7.767e+08 1.764e+09 -6.911e+08 1.530e+09 -6.153e+08 1.306e+09 -5.488e+08 1.094e+09 -4.909e+08 8.987e+08 -4.408e+08 7.222e+08 -3.978e+08 5.662e+08 -3.611e+08 4.321e+08 -3.305e+08 3.197e+08 -3.064e+08 2.279e+08 -2.899e+08 1.537e+08 -2.830e+08 9.209e+07 -2.881e+08 3.667e+07 -3.075e+08 -1.939e+07 -3.423e+08 -8.198e+07 -3.928e+08 -1.552e+08 -4.585e+08 -2.411e+08 -5.386e+08 -3.407e+08 -6.332e+08 -4.542e+08 -7.423e+08 -5.812e+08 -8.662e+08 -7.210e+08 -1.006e+09 -8.734e+08 -1.163e+09 -1.037e+09 -1.338e+09 -1.211e+09 -1.533e+09 -1.396e+09 -1.751e+09 -1.589e+09 -1.993e+09 -1.789e+09 -2.262e+09 -1.995e+09 -2.561e+09 -2.206e+09 -2.891e+09 -2.418e+09 -3.255e+09 -2.630e+09 -3.656e+09 -2.838e+09 -4.095e+09 -3.040e+09 -4.574e+09 -3.230e+09 -5.093e+09 -3.406e+09 -5.653e+09 -3.561e+09 -6.251e+09 -3.692e+09 -6.886e+09 -3.793e+09 -7.555e+09 -3.859e+09 -8.251e+09 -3.886e+09 -8.970e+09 -3.868e+09 -9.702e+09 -3.803e+09 -1.044e+10 -3.687e+09 -1.117e+10 -3.518e+09 -1.188e+10 -3.297e+09 -1.255e+10 -3.023e+09 -1.318e+10 -2.700e+09 -1.374e+10 -2.333e+09 -1.422e+10 -1.927e+09 -1.461e+10 -1.490e+09 -1.489e+10 -1.033e+09 -1.505e+10 -5.668e+08 -1.507e+10 -1.034e+08 -1.494e+10 3.436e+08 -1.467e+10 7.610e+08 -1.424e+10 1.135e+09 -1.365e+10 1.453e+09 -1.291e+10 1.704e+09 -1.202e+10 1.879e+09 -1.101e+10 1.969e+09 -9.882e+09 1.972e+09 -8.662e+09 1.888e+09 -7.379e+09 1.722e+09 -6.069e+09 1.486e+09 -4.768e+09 1.196e+09 -3.522e+09 8.759e+08 -2.383e+09 5.564e+08 -1.403e+09 2.760e+08 -6.453e+08 8.132e+07 -1.749e+08 -1.349e+07 3.812e+07 -1.771e+08 3.812e+08 -6.034e+08 1.211e+09 -1.388e+09 2.636e+09 -2.622e+09 4.740e+09 -4.403e+09 7.610e+09 -6.842e+09 1.134e+10 -1.006e+10 1.601e+10 -1.417e+10 2.172e+10 -1.933e+10 2.855e+10 -2.566e+10 3.659e+10 -3.332e+10 4.590e+10 -4.247e+10 5.657e+10 -5.328e+10 6.864e+10 -6.589e+10 8.217e+10 -8.050e+10 9.718e+10 -9.728e+10 1.137e+11 -1.164e+11 1.317e+11 -1.380e+11 1.511e+11 -1.623e+11 1.719e+11 -1.894e+11 1.940e+11 -2.195e+11 2.172e+11 -2.527e+11 2.414e+11 -2.891e+11 2.664e+11 -3.289e+11 2.920e+11 -3.722e+11 3.179e+11 -4.189e+11 3.436e+11 -4.692e+11 3.691e+11 -5.231e+11 3.938e+11 -5.806e+11 4.174e+11 -6.416e+11 4.394e+11 -7.061e+11 4.592e+11 -7.739e+11 4.765e+11 -8.450e+11 4.906e+11 -9.193e+11 5.010e+11 -9.964e+11 5.073e+11 -1.076e+12 5.088e+11 -1.159e+12 5.050e+11 -1.244e+12 4.953e+11 -1.332e+12 4.793e+11 -1.421e+12 4.562e+11 -1.513e+12 4.257e+11 -1.607e+12 3.870e+11 -1.703e+12 3.395e+11 -1.800e+12 2.827e+11 -1.901e+12 2.158e+11 -2.003e+12 1.381e+11 -2.109e+12 4.862e+10 -2.217e+12 -5.363e+10 -2.329e+12 -1.699e+11 -2.445e+12 -3.013e+11 -2.565e+12 -4.498e+11 -2.691e+12 -6.171e+11 -2.823e+12 -8.053e+11 -2.961e+12 -1.017e+12 -3.106e+12 -1.255e+12 -3.258e+12 -1.523e+12 -3.419e+12 -1.824e+12 -3.588e+12 -2.162e+12 -3.765e+12 -2.542e+12 -3.950e+12 -2.968e+12 -4.144e+12 -3.446e+12 -4.345e+12 -3.980e+12 -4.554e+12 -4.577e+12 -4.769e+12 -5.243e+12 -4.989e+12 -5.984e+12 -5.212e+12 -6.806e+12 -5.439e+12 -7.716e+12 -5.665e+12 -8.719e+12 -5.891e+12 -9.824e+12 -6.114e+12 -1.104e+13 -6.331e+12 -1.236e+13 -6.541e+12 -1.381e+13 -6.740e+12 -1.539e+13 -6.926e+12 -1.710e+13 -7.097e+12 -1.895e+13 -7.250e+12 -2.095e+13 -7.383e+12 -2.310e+13 -7.492e+12 -2.541e+13 -7.576e+12 -2.788e+13 -7.631e+12 -3.052e+13 -7.656e+12 -3.333e+13 -7.648e+12 -3.632e+13 -7.605e+12 -3.948e+13 -7.527e+12 -4.283e+13 -7.410e+12 -4.636e+13 -7.254e+12 -5.007e+13 -7.059e+12 -5.397e+13 -6.823e+12 -5.806e+13 -6.547e+12 -6.233e+13 -6.231e+12 -6.678e+13 -5.876e+12 -7.142e+13 -5.483e+12 -7.624e+13 -5.053e+12 -8.123e+13 -4.589e+12 -8.639e+13 -4.094e+12 -9.172e+13 -3.570e+12 -9.721e+13 -3.022e+12 -1.029e+14 -2.454e+12 -1.086e+14 -1.870e+12 -1.146e+14 -1.277e+12 -1.206e+14 -6.787e+11 -1.268e+14 -8.236e+10 -1.331e+14 5.056e+11 -1.395e+14 1.078e+12 -1.460e+14 1.628e+12 -1.525e+14 2.147e+12 -1.592e+14 2.632e+12 -1.658e+14 3.080e+12 -1.726e+14 3.480e+12 -1.793e+14 3.818e+12 -1.861e+14 4.087e+12 -1.929e+14 4.277e+12 -1.997e+14 4.382e+12 -2.064e+14 4.392e+12 -2.130e+14 4.301e+12 -2.197e+14 4.100e+12 -2.262e+14 3.783e+12 -2.326e+14 3.343e+12 -2.390e+14 2.775e+12 -2.452e+14 2.072e+12 -2.513e+14 1.229e+12 -2.572e+14 2.430e+11 -2.630e+14 -8.918e+11 -2.687e+14 -2.177e+12 -2.741e+14 -3.616e+12 -2.794e+14 -5.211e+12 -2.845e+14 -6.962e+12 -2.893e+14 -8.870e+12 -2.940e+14 -1.094e+13 -2.985e+14 -1.316e+13 -3.027e+14 -1.554e+13 -3.067e+14 -1.807e+13 -3.105e+14 -2.076e+13 -3.141e+14 -2.359e+13 -3.174e+14 -2.658e+13 -3.205e+14 -2.970e+13 -3.234e+14 -3.296e+13 -3.261e+14 -3.637e+13 -3.285e+14 -3.990e+13 -3.306e+14 -4.355e+13 -3.326e+14 -4.733e+13 -3.343e+14 -5.122e+13 -3.358e+14 -5.523e+13 -3.371e+14 -5.933e+13 -3.381e+14 -6.354e+13 -3.389e+14 -6.784e+13 -3.395e+14 -7.223e+13 -3.400e+14 -7.672e+13 -3.403e+14 -8.128e+13 -3.404e+14 -8.592e+13 -3.403e+14 -9.062e+13 -3.400e+14 -9.536e+13 -3.396e+14 -1.002e+14 -3.389e+14 -1.050e+14 -3.381e+14 -1.098e+14 -3.371e+14 -1.147e+14 -3.359e+14 -1.196e+14 -3.346e+14 -1.244e+14 -3.331e+14 -1.293e+14 -3.314e+14 -1.341e+14 -3.296e+14 -1.389e+14 -3.276e+14 -1.437e+14 -3.255e+14 -1.484e+14 -3.232e+14 -1.530e+14 -3.208e+14 -1.575e+14 -3.183e+14 -1.619e+14 -3.156e+14 -1.662e+14 -3.127e+14 -1.704e+14 -3.097e+14 -1.744e+14 -3.066e+14 -1.783e+14 -3.034e+14 -1.820e+14 -3.000e+14 -1.856e+14 -2.964e+14 -1.889e+14 -2.928e+14 -1.920e+14 -2.890e+14 -1.949e+14 -2.850e+14 -1.976e+14 -2.810e+14 -2.000e+14 -2.768e+14 -2.021e+14 -2.725e+14 -2.040e+14 -2.681e+14 -2.056e+14 -2.635e+14 -2.070e+14 -2.588e+14 -2.080e+14 -2.540e+14 -2.087e+14 -2.491e+14 -2.092e+14 -2.441e+14 -2.093e+14 -2.390e+14 -2.092e+14 -2.339e+14 -2.083e+14 -2.302e+14 -2.074e+14 -2.258e+14 -2.064e+14 -2.204e+14 -2.051e+14 -2.149e+14 -2.034e+14 -2.094e+14 -2.015e+14 -2.038e+14 -1.994e+14 -1.981e+14 -1.969e+14 -1.925e+14 -1.942e+14 -1.868e+14 -1.913e+14 -1.810e+14 -1.881e+14 -1.753e+14 -1.847e+14 -1.696e+14 -1.811e+14 -1.638e+14 -1.772e+14 -1.581e+14 -1.732e+14 -1.524e+14 -1.690e+14 -1.468e+14 -1.647e+14 -1.412e+14 -1.602e+14 -1.356e+14 -1.556e+14 -1.301e+14 -1.508e+14 -1.247e+14 -1.460e+14 -1.193e+14 -1.411e+14 -1.140e+14 -1.361e+14 -1.088e+14 -1.310e+14 -1.037e+14 -1.259e+14 -9.866e+13 -1.208e+14 -9.374e+13 -1.157e+14 -8.893e+13 -1.105e+14 -8.424e+13 -1.054e+14 -7.966e+13 -1.003e+14 -7.521e+13 -9.530e+13 -7.089e+13 -9.033e+13 -6.669e+13 -8.543e+13 -6.263e+13 -8.062e+13 -5.871e+13 -7.590e+13 -5.493e+13 -7.129e+13 -5.129e+13 -6.680e+13 -4.780e+13 -6.244e+13 -4.445e+13 -5.821e+13 -4.125e+13 -5.414e+13 -3.820e+13 -5.021e+13 -3.529e+13 -4.645e+13 -3.253e+13 -4.286e+13 -2.992e+13 -3.942e+13 -2.745e+13 -3.616e+13 -2.512e+13 -3.306e+13 -2.293e+13 -3.014e+13 -2.087e+13 -2.738e+13 -1.894e+13 -2.479e+13 -1.715e+13 -2.237e+13 -1.548e+13 -2.011e+13 -1.393e+13 -1.801e+13 -1.249e+13 -1.606e+13 -1.117e+13 -1.427e+13 -9.952e+12 -1.263e+13 -8.838e+12 -1.112e+13 -7.819e+12 -9.748e+12 -6.892e+12 -8.503e+12 -6.050e+12 -7.378e+12 -5.290e+12 -6.366e+12 -4.605e+12 -5.461e+12 -3.991e+12 -4.654e+12 -3.442e+12 -3.940e+12 -2.953e+12 -3.312e+12 -2.520e+12 -2.761e+12 -2.139e+12 -2.282e+12 -1.804e+12 -1.868e+12 -1.512e+12 -1.513e+12 -1.258e+12 -1.211e+12 -1.039e+12 -9.569e+11 -8.515e+11 -7.445e+11 -6.916e+11 -5.693e+11 -5.564e+11 -4.266e+11 -4.431e+11 -3.120e+11 -3.489e+11 -2.215e+11 -2.715e+11 -1.515e+11 -2.087e+11 -9.868e+10 -1.583e+11 -5.990e+10 -1.187e+11 -3.240e+10 -8.827e+10 -1.354e+10 -6.553e+10 -8.893e+08 -4.920e+10 7.778e+09 -3.804e+10 1.438e+10 -3.073e+10 2.027e+10 -2.599e+10 2.609e+10 -2.273e+10 3.195e+10 -2.018e+10 3.759e+10 -1.793e+10 4.269e+10 -1.584e+10 4.695e+10 -1.388e+10 5.014e+10 -1.207e+10 5.211e+10 -1.048e+10 5.283e+10 -9.148e+09 5.231e+10 -8.088e+09 5.063e+10 -7.306e+09 4.794e+10 -6.782e+09 4.440e+10 -6.481e+09 4.020e+10 -6.359e+09 3.555e+10 -6.360e+09 3.067e+10 -6.432e+09 2.574e+10 -6.521e+09 2.097e+10 -6.585e+09 1.653e+10 -6.593e+09 1.256e+10 -6.541e+09 9.150e+09 -6.455e+09 6.350e+09 -6.408e+09 4.107e+09 -6.521e+09 2.253e+09 -6.947e+09 5.233e+08 -7.812e+09 -1.368e+09 -9.168e+09 -3.646e+09 -1.099e+10 -6.427e+09 -1.323e+10 -9.741e+09 -1.579e+10 -1.356e+10 -1.861e+10 -1.782e+10 -2.163e+10 -2.241e+10 -2.478e+10 -2.725e+10 -2.801e+10 -3.222e+10 -3.126e+10 -3.719e+10 -3.448e+10 -4.207e+10 -3.761e+10 -4.675e+10 -4.062e+10 -5.112e+10 -4.345e+10 -5.512e+10 -4.605e+10 -5.865e+10 -4.839e+10 -6.166e+10 -5.045e+10 -6.411e+10 -5.220e+10 -6.595e+10 -5.362e+10 -6.717e+10 -5.469e+10 -6.777e+10 -5.539e+10 -6.774e+10 -5.573e+10 -6.713e+10 -5.571e+10 -6.594e+10 -5.531e+10 -6.423e+10 -5.457e+10 -6.205e+10 -5.349e+10 -5.944e+10 -5.209e+10 -5.648e+10 -5.040e+10 -5.321e+10 -4.844e+10 -4.972e+10 -4.625e+10 -4.606e+10 -4.385e+10 -4.229e+10 -4.129e+10 -3.848e+10 -3.860e+10 -3.469e+10 -3.583e+10 -3.097e+10 -3.300e+10 -2.737e+10 -3.016e+10 -2.392e+10 -2.734e+10 -2.067e+10 -2.458e+10 -1.763e+10 -2.190e+10 -1.484e+10 -1.934e+10 -1.230e+10 -1.691e+10 -1.003e+10 -1.464e+10 -8.024e+09 -1.254e+10 -6.281e+09 -1.062e+10 -4.791e+09 -8.889e+09 -3.540e+09 -7.346e+09 -2.513e+09 -5.991e+09 -1.688e+09 -4.818e+09 -1.043e+09 -3.819e+09 -5.547e+08 -2.983e+09 -1.978e+08 -2.296e+09 5.205e+07 -1.743e+09 2.191e+08 -1.307e+09 3.260e+08 -9.711e+08 3.924e+08 -7.158e+08 4.337e+08 -5.223e+08 4.601e+08 -3.728e+08 4.763e+08 -2.530e+08 4.829e+08 -1.524e+08 4.782e+08 -6.471e+07 4.603e+08 1.273e+07 4.286e+08 8.056e+07 3.839e+08 1.388e+08 3.288e+08 1.875e+08 2.668e+08 2.283e+08 2.010e+08 2.649e+08 1.322e+08 3.033e+08 5.668e+07 3.513e+08 -3.511e+07 4.164e+08 -1.570e+08 5.039e+08 -3.246e+08 6.159e+08 -5.528e+08 7.520e+08 -8.544e+08 9.105e+08 -1.240e+09 1.088e+09 -1.717e+09 1.283e+09 -2.292e+09 1.491e+09 -2.968e+09 1.710e+09 -3.745e+09 1.935e+09 -4.621e+09 2.164e+09 -5.592e+09 2.392e+09 -6.651e+09 2.617e+09 -7.787e+09 2.835e+09 -8.990e+09 3.043e+09 -1.024e+10 3.239e+09 -1.154e+10 3.418e+09 -1.285e+10 3.580e+09 -1.416e+10 3.722e+09 -1.546e+10 3.844e+09 -1.672e+10 3.945e+09 -1.792e+10 4.024e+09 -1.905e+10 4.083e+09 -2.008e+10 4.122e+09 -2.101e+10 4.143e+09 -2.181e+10 4.148e+09 -2.247e+10 4.138e+09 -2.299e+10 4.117e+09 -2.335e+10 4.087e+09 -2.355e+10 4.051e+09 -2.359e+10 4.011e+09 -2.346e+10 3.969e+09 -2.317e+10 3.926e+09 -2.272e+10 3.885e+09 -2.213e+10 3.845e+09 -2.139e+10 3.806e+09 -2.054e+10 3.769e+09 -1.957e+10 3.733e+09 -1.850e+10 3.695e+09 -1.736e+10 3.655e+09 -1.616e+10 3.611e+09 -1.492e+10 3.560e+09 -1.365e+10 3.502e+09 -1.238e+10 3.433e+09 -1.112e+10 3.353e+09 -9.884e+09 3.260e+09 -8.692e+09 3.154e+09 -7.556e+09 3.036e+09 -6.487e+09 2.904e+09 -5.492e+09 2.761e+09 -4.582e+09 2.609e+09 -3.760e+09 2.451e+09 -3.028e+09 2.290e+09 -2.388e+09 2.130e+09 -1.837e+09 1.976e+09 -1.368e+09 1.833e+09 -9.756e+08 1.708e+09 -6.470e+08 1.604e+09 -3.687e+08 1.527e+09 -1.268e+08 1.477e+09 9.437e+07 1.453e+09 3.073e+08 1.452e+09 5.200e+08 1.467e+09 7.370e+08 1.491e+09 9.592e+08 1.519e+09 1.184e+09 1.544e+09 1.407e+09 1.563e+09 1.622e+09 1.571e+09 1.825e+09 1.567e+09 2.008e+09 1.549e+09 2.167e+09 1.515e+09 2.295e+09 1.466e+09 2.390e+09 1.402e+09 2.447e+09 1.323e+09 2.466e+09 1.232e+09 2.444e+09 1.128e+09 2.382e+09 1.015e+09 2.282e+09 8.951e+08 2.147e+09 7.697e+08 1.980e+09 6.419e+08 1.787e+09 5.150e+08 1.574e+09 3.919e+08 1.348e+09 2.760e+08 1.117e+09 1.706e+08 8.898e+08 7.895e+07 6.745e+08 3.691e+06 4.810e+08 -5.314e+07 3.179e+08 -9.161e+07 1.918e+08 -1.165e+08 1.017e+08 -1.411e+08 2.974e+07 -1.867e+08 -5.697e+07 -2.707e+08 -1.895e+08 -3.988e+08 -3.862e+08 -5.694e+08 -6.567e+08 -7.801e+08 -1.006e+09 -1.028e+09 -1.434e+09 -1.311e+09 -1.943e+09 -1.626e+09 -2.531e+09 -1.970e+09 -3.192e+09 -2.338e+09 -3.924e+09 -2.726e+09 -4.719e+09 -3.129e+09 -5.570e+09 -3.541e+09 -6.468e+09 -3.958e+09 -7.405e+09 -4.374e+09 -8.369e+09 -4.783e+09 -9.353e+09 -5.180e+09 -1.034e+10 -5.561e+09 -1.133e+10 -5.919e+09 -1.230e+10 -6.253e+09 -1.325e+10 -6.558e+09 -1.417e+10 -6.830e+09 -1.504e+10 -7.067e+09 -1.585e+10 -7.268e+09 -1.661e+10 -7.431e+09 -1.729e+10 -7.556e+09 -1.790e+10 -7.642e+09 -1.844e+10 -7.689e+09 -1.888e+10 -7.698e+09 -1.924e+10 -7.670e+09 -1.952e+10 -7.607e+09 -1.969e+10 -7.508e+09 -1.978e+10 -7.377e+09 -1.977e+10 -7.215e+09 -1.968e+10 -7.023e+09 -1.949e+10 -6.805e+09 0.005 -62.865 -60.876 -58.888 -56.899 -54.910 -52.921 -50.933 -49.035 -47.243 -45.552 -43.957 -42.450 -41.023 -39.667 -38.379 -37.156 -35.994 -34.888 -33.835 -32.834 -31.882 -30.976 -30.114 -29.295 -28.518 -27.780 -27.081 -26.418 -25.793 -25.202 -24.646 -24.123 -23.633 -23.175 -22.749 -22.353 -21.989 -21.654 -21.348 -21.073 -20.826 -20.608 -20.418 -20.257 -20.125 -20.020 -19.944 -19.896 -19.877 -19.883 -19.917 -19.980 -20.071 -20.191 -20.341 -20.521 -20.730 -20.970 -21.241 -21.543 -21.877 -22.244 -22.644 -23.079 -23.548 -24.053 -24.595 -25.175 -25.793 -26.453 -27.153 -27.897 -28.687 -29.522 -30.407 -31.341 -32.329 -33.372 -34.472 -35.632 -36.850 -38.129 -39.460 -40.835 -42.236 -43.629 -44.958 -46.140 -47.092 -47.754 -48.122 -48.253 -48.234 -48.148 -48.059 -48.016 -48.053 -48.201 -48.496 -48.983 -49.728 -50.828 -52.404 -54.403 -55.616 -54.030 -50.311 -46.543 -43.292 -40.483 -38.002 -35.769 -33.727 -31.840 -30.079 -28.427 -26.870 -25.397 -23.999 -22.670 -21.404 -20.196 -19.042 -17.939 -16.884 -15.874 -14.908 -13.982 -13.095 -12.245 -11.431 -10.652 -9.907 -9.194 -8.512 -7.860 -7.239 -6.646 -6.082 -5.545 -5.036 -4.553 -4.096 -3.663 -3.253 -2.868 -2.508 -2.172 -1.861 -1.574 -1.310 -1.071 -0.856 -0.665 -0.497 -0.354 -0.234 -0.139 -0.068 -0.021 0.000 -0.004 -0.033 -0.089 -0.171 -0.281 -0.418 -0.584 -0.779 -1.004 -1.260 -1.548 -1.869 -2.221 -2.611 -3.039 -3.508 -4.020 -4.579 -5.186 -5.847 -6.565 -7.345 -8.193 -9.116 -10.123 -11.225 -12.433 -13.764 -15.238 -16.881 -18.728 -20.827 -23.246 -26.085 -29.505 -33.774 -39.404 -47.499 -58.820 -54.321 -45.114 -38.099 -32.897 -28.851 -25.570 -22.825 -20.475 -18.429 -16.625 -15.018 -13.574 -12.269 -11.083 -10.002 -9.013 -8.106 -7.273 -6.507 -5.802 -5.154 -4.557 -4.009 -3.507 -3.047 -2.628 -2.247 -1.902 -1.592 -1.313 -1.063 -0.845 -0.656 -0.496 -0.364 -0.260 -0.182 -0.130 -0.104 -0.104 -0.129 -0.178 -0.251 -0.348 -0.468 -0.612 -0.780 -0.971 -1.185 -1.422 -1.683 -1.967 -2.274 -2.604 -2.958 -3.336 -3.738 -4.164 -4.612 -5.082 -5.578 -6.099 -6.646 -7.219 -7.819 -8.446 -9.101 -9.783 -10.495 -11.236 -12.008 -12.810 -13.645 -14.512 -15.414 -16.350 -17.322 -18.332 -19.382 -20.471 -21.602 -22.777 -23.997 -25.265 -26.582 -27.952 -29.375 -30.855 -32.390 -33.983 -35.633 -37.334 -39.071 -40.819 -42.527 -44.122 -45.505 -46.585 -47.314 -47.715 -47.862 -47.841 -47.713 -47.511 -47.240 -46.889 -46.440 -45.875 -45.183 -44.368 -43.445 -42.437 -41.371 -40.271 -39.159 -38.051 -36.961 -35.895 -34.860 -33.858 -32.890 -31.961 -31.070 -30.219 -29.406 -28.632 -27.895 -27.196 -26.534 -25.907 -25.316 -24.760 -24.238 -23.749 -23.293 -22.869 -22.476 -22.115 -21.784 -21.483 -21.212 -20.971 -20.758 -20.574 -20.418 -20.291 -20.191 -20.119 -20.075 -20.058 -20.068 -20.105 -20.169 -20.258 -20.374 -20.517 -20.687 -20.885 -21.111 -21.365 -21.646 -21.956 -22.295 -22.663 -23.060 -23.487 -23.944 -24.432 -24.952 -25.503 -26.087 -26.705 -27.356 -28.043 -28.766 -29.525 -30.322 -31.159 -32.035 -32.953 -33.913 -34.918 -35.967 -37.063 -38.208 -39.401 -40.646 -41.942 -43.291 -44.690 -46.143 -47.649 -49.207 -50.814 -52.462 -54.143 -55.824 -57.505 -59.186 -60.867 -62.548 0 1 1.0 1 N4 HH 30.06 34.35 0.05 -3.893e+10 -3.153e+10 -3.835e+10 -3.282e+10 -3.766e+10 -3.395e+10 -3.688e+10 -3.490e+10 -3.601e+10 -3.567e+10 -3.506e+10 -3.625e+10 -3.404e+10 -3.665e+10 -3.294e+10 -3.687e+10 -3.179e+10 -3.690e+10 -3.058e+10 -3.676e+10 -2.933e+10 -3.645e+10 -2.805e+10 -3.598e+10 -2.674e+10 -3.536e+10 -2.541e+10 -3.460e+10 -2.408e+10 -3.372e+10 -2.274e+10 -3.271e+10 -2.140e+10 -3.161e+10 -2.008e+10 -3.042e+10 -1.877e+10 -2.916e+10 -1.748e+10 -2.784e+10 -1.622e+10 -2.647e+10 -1.499e+10 -2.506e+10 -1.380e+10 -2.363e+10 -1.264e+10 -2.218e+10 -1.153e+10 -2.074e+10 -1.046e+10 -1.930e+10 -9.440e+09 -1.788e+10 -8.467e+09 -1.648e+10 -7.546e+09 -1.512e+10 -6.677e+09 -1.379e+10 -5.863e+09 -1.251e+10 -5.104e+09 -1.128e+10 -4.402e+09 -1.010e+10 -3.756e+09 -8.989e+09 -3.166e+09 -7.936e+09 -2.632e+09 -6.949e+09 -2.153e+09 -6.031e+09 -1.728e+09 -5.182e+09 -1.355e+09 -4.405e+09 -1.032e+09 -3.699e+09 -7.574e+08 -3.064e+09 -5.273e+08 -2.499e+09 -3.392e+08 -2.003e+09 -1.895e+08 -1.573e+09 -7.451e+07 -1.206e+09 9.621e+06 -9.006e+08 6.732e+07 -6.512e+08 1.033e+08 -4.538e+08 1.231e+08 -3.037e+08 1.331e+08 -1.945e+08 1.410e+08 -1.178e+08 1.544e+08 -6.274e+07 1.781e+08 -1.639e+07 2.127e+08 3.206e+07 2.555e+08 8.864e+07 3.032e+08 1.552e+08 3.529e+08 2.314e+08 4.021e+08 3.155e+08 4.490e+08 4.058e+08 4.924e+08 5.009e+08 5.312e+08 5.995e+08 5.649e+08 7.009e+08 5.928e+08 8.047e+08 6.147e+08 9.110e+08 6.304e+08 1.020e+09 6.399e+08 1.134e+09 6.430e+08 1.253e+09 6.397e+08 1.379e+09 6.296e+08 1.515e+09 6.127e+08 1.664e+09 5.885e+08 1.828e+09 5.563e+08 2.010e+09 5.153e+08 2.215e+09 4.644e+08 2.447e+09 4.021e+08 2.709e+09 3.269e+08 3.007e+09 2.369e+08 3.345e+09 1.301e+08 3.729e+09 4.603e+06 4.164e+09 -1.418e+08 4.654e+09 -3.114e+08 5.205e+09 -5.056e+08 5.822e+09 -7.264e+08 6.509e+09 -9.754e+08 7.273e+09 -1.253e+09 8.116e+09 -1.561e+09 9.043e+09 -1.898e+09 1.006e+10 -2.265e+09 1.116e+10 -2.660e+09 1.236e+10 -3.083e+09 1.366e+10 -3.532e+09 1.506e+10 -4.004e+09 1.655e+10 -4.499e+09 1.815e+10 -5.011e+09 1.985e+10 -5.539e+09 2.166e+10 -6.080e+09 2.356e+10 -6.629e+09 2.557e+10 -7.185e+09 2.768e+10 -7.744e+09 2.989e+10 -8.303e+09 3.219e+10 -8.861e+09 3.458e+10 -9.418e+09 3.707e+10 -9.969e+09 3.965e+10 -1.051e+10 4.229e+10 -1.104e+10 4.501e+10 -1.155e+10 4.778e+10 -1.205e+10 5.060e+10 -1.253e+10 5.344e+10 -1.300e+10 5.630e+10 -1.344e+10 5.915e+10 -1.385e+10 6.199e+10 -1.425e+10 6.477e+10 -1.461e+10 6.749e+10 -1.495e+10 7.011e+10 -1.526e+10 7.261e+10 -1.553e+10 7.496e+10 -1.576e+10 7.714e+10 -1.596e+10 7.912e+10 -1.612e+10 8.087e+10 -1.624e+10 8.236e+10 -1.631e+10 8.358e+10 -1.633e+10 8.450e+10 -1.630e+10 8.511e+10 -1.623e+10 8.539e+10 -1.611e+10 8.534e+10 -1.593e+10 8.493e+10 -1.571e+10 8.419e+10 -1.544e+10 8.310e+10 -1.513e+10 8.167e+10 -1.477e+10 7.993e+10 -1.438e+10 7.789e+10 -1.396e+10 7.556e+10 -1.351e+10 7.298e+10 -1.304e+10 7.017e+10 -1.256e+10 6.716e+10 -1.206e+10 6.399e+10 -1.156e+10 6.069e+10 -1.106e+10 5.729e+10 -1.057e+10 5.382e+10 -1.009e+10 5.033e+10 -9.621e+09 4.685e+10 -9.170e+09 4.340e+10 -8.739e+09 4.003e+10 -8.328e+09 3.673e+10 -7.937e+09 3.354e+10 -7.567e+09 3.047e+10 -7.216e+09 2.755e+10 -6.882e+09 2.478e+10 -6.564e+09 2.217e+10 -6.261e+09 1.974e+10 -5.969e+09 1.749e+10 -5.687e+09 1.541e+10 -5.413e+09 1.351e+10 -5.146e+09 1.179e+10 -4.884e+09 1.024e+10 -4.627e+09 8.846e+09 -4.374e+09 7.608e+09 -4.125e+09 6.514e+09 -3.880e+09 5.553e+09 -3.637e+09 4.713e+09 -3.397e+09 3.984e+09 -3.159e+09 3.354e+09 -2.922e+09 2.812e+09 -2.685e+09 2.349e+09 -2.447e+09 1.954e+09 -2.208e+09 1.620e+09 -1.967e+09 1.339e+09 -1.725e+09 1.104e+09 -1.483e+09 9.110e+08 -1.244e+09 7.533e+08 -1.012e+09 6.263e+08 -7.917e+08 5.253e+08 -5.900e+08 4.464e+08 -4.127e+08 3.869e+08 -2.646e+08 3.471e+08 -1.446e+08 3.323e+08 -4.010e+07 3.526e+08 7.440e+07 4.196e+08 2.298e+08 5.402e+08 4.522e+08 7.173e+08 7.593e+08 9.530e+08 1.162e+09 1.249e+09 1.668e+09 1.609e+09 2.281e+09 2.033e+09 3.002e+09 2.521e+09 3.828e+09 3.070e+09 4.756e+09 3.677e+09 5.777e+09 4.332e+09 6.883e+09 5.027e+09 8.059e+09 5.749e+09 9.290e+09 6.484e+09 1.056e+10 7.215e+09 1.185e+10 7.924e+09 1.313e+10 8.593e+09 1.439e+10 9.203e+09 1.560e+10 9.736e+09 1.674e+10 1.017e+10 1.778e+10 1.050e+10 1.870e+10 1.070e+10 1.948e+10 1.076e+10 2.009e+10 1.068e+10 2.052e+10 1.045e+10 2.075e+10 1.007e+10 2.076e+10 9.548e+09 2.056e+10 8.886e+09 2.012e+10 8.100e+09 1.947e+10 7.206e+09 1.859e+10 6.224e+09 1.751e+10 5.181e+09 1.625e+10 4.101e+09 1.483e+10 3.015e+09 1.328e+10 1.954e+09 1.165e+10 9.476e+08 9.996e+09 2.428e+07 8.363e+09 -7.940e+08 6.811e+09 -1.499e+09 5.399e+09 -2.100e+09 4.171e+09 -2.641e+09 3.133e+09 -3.211e+09 2.234e+09 -3.936e+09 1.347e+09 -4.955e+09 2.988e+08 -6.381e+09 -1.084e+09 -8.282e+09 -2.944e+09 -1.069e+10 -5.387e+09 -1.361e+10 -8.483e+09 -1.705e+10 -1.227e+10 -2.100e+10 -1.677e+10 -2.545e+10 -2.197e+10 -3.038e+10 -2.783e+10 -3.577e+10 -3.430e+10 -4.158e+10 -4.130e+10 -4.778e+10 -4.871e+10 -5.433e+10 -5.642e+10 -6.118e+10 -6.426e+10 -6.828e+10 -7.206e+10 -7.557e+10 -7.966e+10 -8.299e+10 -8.684e+10 -9.048e+10 -9.340e+10 -9.798e+10 -9.916e+10 -1.054e+11 -1.039e+11 -1.128e+11 -1.074e+11 -1.200e+11 -1.096e+11 -1.270e+11 -1.103e+11 -1.339e+11 -1.094e+11 -1.405e+11 -1.069e+11 -1.470e+11 -1.026e+11 -1.534e+11 -9.656e+10 -1.598e+11 -8.884e+10 -1.664e+11 -7.944e+10 -1.735e+11 -6.835e+10 -1.814e+11 -5.546e+10 -1.907e+11 -4.057e+10 -2.018e+11 -2.328e+10 -2.155e+11 -2.893e+09 -2.327e+11 2.155e+10 -2.543e+11 5.137e+10 -2.814e+11 8.827e+10 -3.152e+11 1.342e+11 -3.566e+11 1.915e+11 -4.071e+11 2.628e+11 -4.680e+11 3.509e+11 -5.407e+11 4.587e+11 -6.268e+11 5.896e+11 -7.282e+11 7.468e+11 -8.468e+11 9.339e+11 -9.849e+11 1.155e+12 -1.145e+12 1.413e+12 -1.330e+12 1.713e+12 -1.543e+12 2.059e+12 -1.787e+12 2.455e+12 -2.066e+12 2.905e+12 -2.384e+12 3.413e+12 -2.746e+12 3.983e+12 -3.155e+12 4.620e+12 -3.618e+12 5.328e+12 -4.139e+12 6.110e+12 -4.724e+12 6.969e+12 -5.379e+12 7.910e+12 -6.111e+12 8.935e+12 -6.925e+12 1.004e+13 -7.828e+12 1.124e+13 -8.828e+12 1.253e+13 -9.931e+12 1.391e+13 -1.114e+13 1.538e+13 -1.248e+13 1.695e+13 -1.394e+13 1.860e+13 -1.553e+13 2.034e+13 -1.726e+13 2.216e+13 -1.914e+13 2.407e+13 -2.117e+13 2.606e+13 -2.337e+13 2.812e+13 -2.573e+13 3.024e+13 -2.827e+13 3.243e+13 -3.099e+13 3.467e+13 -3.390e+13 3.696e+13 -3.700e+13 3.928e+13 -4.030e+13 4.163e+13 -4.380e+13 4.400e+13 -4.751e+13 4.637e+13 -5.143e+13 5.003e+13 -5.506e+13 5.196e+13 -5.980e+13 5.436e+13 -6.439e+13 5.672e+13 -6.919e+13 5.902e+13 -7.420e+13 6.125e+13 -7.944e+13 6.340e+13 -8.490e+13 6.545e+13 -9.056e+13 6.738e+13 -9.644e+13 6.919e+13 -1.025e+14 7.084e+13 -1.088e+14 7.234e+13 -1.153e+14 7.366e+13 -1.219e+14 7.478e+13 -1.287e+14 7.570e+13 -1.357e+14 7.639e+13 -1.428e+14 7.685e+13 -1.501e+14 7.705e+13 -1.575e+14 7.699e+13 -1.650e+14 7.664e+13 -1.726e+14 7.601e+13 -1.803e+14 7.508e+13 -1.880e+14 7.383e+13 -1.958e+14 7.227e+13 -2.036e+14 7.037e+13 -2.114e+14 6.814e+13 -2.192e+14 6.557e+13 -2.270e+14 6.265e+13 -2.347e+14 5.938e+13 -2.423e+14 5.576e+13 -2.498e+14 5.180e+13 -2.572e+14 4.748e+13 -2.644e+14 4.282e+13 -2.715e+14 3.781e+13 -2.784e+14 3.248e+13 -2.851e+14 2.681e+13 -2.915e+14 2.083e+13 -2.977e+14 1.455e+13 -3.037e+14 7.962e+12 -3.093e+14 1.105e+12 -3.146e+14 -6.021e+12 -3.197e+14 -1.341e+13 -3.244e+14 -2.103e+13 -3.289e+14 -2.886e+13 -3.329e+14 -3.690e+13 -3.366e+14 -4.511e+13 -3.399e+14 -5.347e+13 -3.428e+14 -6.197e+13 -3.453e+14 -7.056e+13 -3.474e+14 -7.925e+13 -3.491e+14 -8.799e+13 -3.503e+14 -9.677e+13 -3.511e+14 -1.055e+14 -3.515e+14 -1.143e+14 -3.514e+14 -1.230e+14 -3.510e+14 -1.317e+14 -3.500e+14 -1.403e+14 -3.487e+14 -1.487e+14 -3.470e+14 -1.570e+14 -3.448e+14 -1.652e+14 -3.422e+14 -1.731e+14 -3.393e+14 -1.808e+14 -3.359e+14 -1.883e+14 -3.322e+14 -1.956e+14 -3.281e+14 -2.025e+14 -3.237e+14 -2.092e+14 -3.189e+14 -2.155e+14 -3.138e+14 -2.215e+14 -3.084e+14 -2.271e+14 -3.026e+14 -2.324e+14 -2.966e+14 -2.372e+14 -2.904e+14 -2.417e+14 -2.839e+14 -2.457e+14 -2.771e+14 -2.494e+14 -2.701e+14 -2.525e+14 -2.630e+14 -2.553e+14 -2.557e+14 -2.575e+14 -2.482e+14 -2.593e+14 -2.405e+14 -2.606e+14 -2.328e+14 -2.615e+14 -2.250e+14 -2.619e+14 -2.171e+14 -2.618e+14 -2.092e+14 -2.613e+14 -2.013e+14 -2.603e+14 -1.934e+14 -2.588e+14 -1.854e+14 -2.569e+14 -1.775e+14 -2.546e+14 -1.697e+14 -2.518e+14 -1.619e+14 -2.486e+14 -1.542e+14 -2.450e+14 -1.465e+14 -2.410e+14 -1.390e+14 -2.366e+14 -1.317e+14 -2.319e+14 -1.244e+14 -2.268e+14 -1.174e+14 -2.214e+14 -1.105e+14 -2.158e+14 -1.038e+14 -2.099e+14 -9.732e+13 -2.037e+14 -9.104e+13 -1.974e+14 -8.499e+13 -1.908e+14 -7.916e+13 -1.841e+14 -7.358e+13 -1.773e+14 -6.823e+13 -1.705e+14 -6.314e+13 -1.635e+14 -5.828e+13 -1.565e+14 -5.368e+13 -1.495e+14 -4.933e+13 -1.425e+14 -4.522e+13 -1.355e+14 -4.136e+13 -1.286e+14 -3.774e+13 -1.218e+14 -3.436e+13 -1.151e+14 -3.120e+13 -1.086e+14 -2.827e+13 -1.021e+14 -2.556e+13 -9.588e+13 -2.305e+13 -8.979e+13 -2.074e+13 -8.389e+13 -1.862e+13 -7.819e+13 -1.668e+13 -7.270e+13 -1.491e+13 -6.743e+13 -1.330e+13 -6.238e+13 -1.184e+13 -5.756e+13 -1.052e+13 -5.296e+13 -9.326e+12 -4.861e+13 -8.250e+12 -4.448e+13 -7.288e+12 -4.059e+13 -6.431e+12 -3.693e+13 -5.671e+12 -3.349e+13 -4.998e+12 -3.028e+13 -4.404e+12 -2.729e+13 -3.881e+12 -2.451e+13 -3.423e+12 -2.194e+13 -3.021e+12 -1.956e+13 -2.671e+12 -1.738e+13 -2.366e+12 -1.538e+13 -2.099e+12 -1.355e+13 -1.868e+12 -1.189e+13 -1.666e+12 -1.039e+13 -1.490e+12 -9.033e+12 -1.336e+12 -7.816e+12 -1.201e+12 -6.729e+12 -1.083e+12 -5.762e+12 -9.777e+11 -4.907e+12 -8.843e+11 -4.155e+12 -8.006e+11 -3.496e+12 -7.252e+11 -2.924e+12 -6.569e+11 -2.429e+12 -5.945e+11 -2.004e+12 -5.374e+11 -1.642e+12 -4.850e+11 -1.335e+12 -4.366e+11 -1.077e+12 -3.921e+11 -8.632e+11 -3.511e+11 -6.862e+11 -3.134e+11 -5.414e+11 -2.790e+11 -4.240e+11 -2.478e+11 -3.297e+11 -2.196e+11 -2.547e+11 -1.943e+11 -1.955e+11 -1.718e+11 -1.491e+11 -1.519e+11 -1.131e+11 -1.343e+11 -8.534e+10 -1.188e+11 -6.398e+10 -1.051e+11 -4.767e+10 -9.291e+10 -3.532e+10 -8.188e+10 -2.606e+10 -7.174e+10 -1.924e+10 -6.231e+10 -1.438e+10 -5.346e+10 -1.104e+10 -4.513e+10 -8.902e+09 -3.731e+10 -7.654e+09 -3.007e+10 -7.036e+09 -2.350e+10 -6.837e+09 -1.772e+10 -6.920e+09 -1.287e+10 -7.283e+09 -8.986e+09 -8.120e+09 -6.007e+09 -9.796e+09 -3.589e+09 -1.271e+10 -1.153e+09 -1.712e+10 1.918e+09 -2.317e+10 6.090e+09 -3.091e+10 1.165e+10 -4.035e+10 1.873e+10 -5.146e+10 2.738e+10 -6.423e+10 3.759e+10 -7.856e+10 4.930e+10 -9.434e+10 6.241e+10 -1.114e+11 7.679e+10 -1.297e+11 9.229e+10 -1.488e+11 1.087e+11 -1.687e+11 1.259e+11 -1.891e+11 1.435e+11 -2.096e+11 1.615e+11 -2.302e+11 1.795e+11 -2.504e+11 1.973e+11 -2.701e+11 2.147e+11 -2.889e+11 2.314e+11 -3.067e+11 2.473e+11 -3.231e+11 2.620e+11 -3.381e+11 2.755e+11 -3.513e+11 2.875e+11 -3.627e+11 2.979e+11 -3.720e+11 3.065e+11 -3.793e+11 3.133e+11 -3.845e+11 3.182e+11 -3.875e+11 3.211e+11 -3.882e+11 3.221e+11 -3.868e+11 3.211e+11 -3.832e+11 3.183e+11 -3.775e+11 3.136e+11 -3.699e+11 3.071e+11 -3.605e+11 2.991e+11 -3.494e+11 2.896e+11 -3.368e+11 2.788e+11 -3.229e+11 2.669e+11 -3.079e+11 2.540e+11 -2.919e+11 2.403e+11 -2.753e+11 2.261e+11 -2.581e+11 2.115e+11 -2.407e+11 1.967e+11 -2.232e+11 1.818e+11 -2.057e+11 1.671e+11 -1.884e+11 1.526e+11 -1.716e+11 1.386e+11 -1.552e+11 1.251e+11 -1.396e+11 1.122e+11 -1.247e+11 1.000e+11 -1.105e+11 8.860e+10 -9.734e+10 7.799e+10 -8.507e+10 6.822e+10 -7.376e+10 5.928e+10 -6.344e+10 5.120e+10 -5.410e+10 4.394e+10 -4.571e+10 3.747e+10 -3.825e+10 3.178e+10 -3.169e+10 2.680e+10 -2.596e+10 2.249e+10 -2.105e+10 1.881e+10 -1.686e+10 1.569e+10 -1.334e+10 1.307e+10 -1.042e+10 1.090e+10 -8.028e+09 9.133e+09 -6.104e+09 7.710e+09 -4.582e+09 6.596e+09 -3.394e+09 5.752e+09 -2.476e+09 5.144e+09 -1.771e+09 4.749e+09 -1.224e+09 4.544e+09 -7.924e+08 4.513e+09 -4.416e+08 4.642e+09 -1.497e+08 4.923e+09 9.491e+07 5.352e+09 2.947e+08 5.931e+09 4.462e+08 6.665e+09 5.411e+08 7.564e+09 5.675e+08 8.642e+09 5.111e+08 9.913e+09 3.552e+08 1.140e+10 8.117e+07 1.311e+10 -3.313e+08 1.506e+10 -9.045e+08 1.727e+10 -1.661e+09 1.975e+10 -2.622e+09 2.250e+10 -3.814e+09 2.554e+10 -5.255e+09 2.885e+10 -6.966e+09 3.242e+10 -8.965e+09 3.624e+10 -1.127e+10 4.029e+10 -1.388e+10 4.454e+10 -1.681e+10 4.896e+10 -2.007e+10 5.349e+10 -2.364e+10 5.810e+10 -2.752e+10 6.273e+10 -3.171e+10 6.734e+10 -3.616e+10 7.185e+10 -4.088e+10 7.623e+10 -4.582e+10 8.040e+10 -5.097e+10 8.431e+10 -5.627e+10 8.791e+10 -6.171e+10 9.114e+10 -6.722e+10 9.397e+10 -7.278e+10 9.634e+10 -7.835e+10 9.824e+10 -8.386e+10 9.961e+10 -8.929e+10 1.005e+11 -9.459e+10 1.008e+11 -9.972e+10 1.005e+11 -1.047e+11 9.975e+10 -1.093e+11 9.840e+10 -1.137e+11 9.651e+10 -1.178e+11 9.408e+10 -1.216e+11 9.115e+10 -1.250e+11 8.776e+10 -1.281e+11 8.392e+10 -1.307e+11 7.968e+10 -1.330e+11 7.508e+10 -1.348e+11 7.015e+10 -1.363e+11 6.493e+10 -1.373e+11 5.947e+10 -1.380e+11 5.380e+10 -1.382e+11 4.797e+10 -1.381e+11 4.201e+10 -1.377e+11 3.597e+10 -1.369e+11 2.988e+10 0.005 -58.614 -56.842 -55.069 -53.297 -51.525 -49.752 -47.989 -46.346 -44.805 -43.351 -41.976 -40.670 -39.428 -38.244 -37.115 -36.038 -35.010 -34.028 -33.091 -32.196 -31.341 -30.527 -29.750 -29.011 -28.308 -27.639 -27.005 -26.404 -25.836 -25.299 -24.794 -24.319 -23.875 -23.460 -23.075 -22.718 -22.390 -22.091 -21.819 -21.575 -21.359 -21.170 -21.009 -20.875 -20.768 -20.689 -20.637 -20.613 -20.616 -20.646 -20.704 -20.788 -20.900 -21.041 -21.210 -21.409 -21.637 -21.895 -22.185 -22.505 -22.858 -23.243 -23.662 -24.115 -24.605 -25.131 -25.696 -26.301 -26.947 -27.637 -28.374 -29.159 -29.998 -30.892 -31.848 -32.872 -33.971 -35.154 -36.434 -37.828 -39.358 -41.053 -42.959 -45.147 -47.705 -50.738 -54.151 -56.748 -56.346 -54.092 -51.996 -50.406 -49.240 -48.401 -47.823 -47.465 -47.304 -47.331 -47.542 -47.931 -48.463 -49.014 -49.280 -48.806 -47.367 -45.226 -42.830 -40.458 -38.216 -36.125 -34.177 -32.356 -30.648 -29.038 -27.517 -26.073 -24.701 -23.393 -22.144 -20.951 -19.809 -18.715 -17.668 -16.664 -15.701 -14.776 -13.890 -13.039 -12.223 -11.440 -10.689 -9.970 -9.281 -8.621 -7.991 -7.388 -6.813 -6.265 -5.743 -5.247 -4.777 -4.332 -3.911 -3.515 -3.144 -2.796 -2.472 -2.171 -1.894 -1.641 -1.410 -1.203 -1.017 -0.855 -0.715 -0.599 -0.507 -0.439 -0.395 -0.375 -0.381 -0.411 -0.468 -0.551 -0.661 -0.798 -0.963 -1.157 -1.382 -1.637 -1.924 -2.245 -2.601 -2.994 -3.425 -3.897 -4.412 -4.974 -5.585 -6.249 -6.971 -7.756 -8.609 -9.539 -10.554 -11.665 -12.885 -14.232 -15.726 -17.396 -19.281 -21.434 -23.934 -26.903 -30.550 -35.275 -42.045 -54.091 -53.792 -50.673 -45.733 -38.857 -33.450 -29.271 -25.910 -23.114 -20.731 -18.662 -16.839 -15.217 -13.760 -12.444 -11.248 -10.157 -9.159 -8.242 -7.400 -6.624 -5.910 -5.251 -4.645 -4.087 -3.574 -3.104 -2.673 -2.281 -1.924 -1.602 -1.312 -1.055 -0.827 -0.629 -0.460 -0.318 -0.203 -0.114 -0.051 -0.013 0.000 -0.011 -0.046 -0.105 -0.188 -0.293 -0.421 -0.572 -0.746 -0.942 -1.161 -1.402 -1.663 -1.946 -2.252 -2.581 -2.932 -3.307 -3.704 -4.125 -4.570 -5.038 -5.530 -6.047 -6.589 -7.156 -7.749 -8.368 -9.014 -9.687 -10.388 -11.117 -11.876 -12.665 -13.484 -14.336 -15.221 -16.139 -17.093 -18.084 -19.112 -20.182 -21.293 -22.449 -23.652 -24.905 -26.210 -27.573 -28.997 -30.489 -32.054 -33.701 -35.438 -37.276 -39.227 -41.302 -43.512 -45.852 -48.292 -50.727 -52.930 -54.560 -55.364 -55.378 -54.817 -53.855 -52.587 -51.087 -49.443 -47.742 -46.050 -44.408 -42.836 -41.344 -39.931 -38.595 -37.331 -36.134 -35.000 -33.924 -32.903 -31.934 -31.013 -30.138 -29.306 -28.516 -27.766 -27.054 -26.379 -25.741 -25.137 -24.567 -24.030 -23.525 -23.052 -22.610 -22.198 -21.816 -21.464 -21.140 -20.845 -20.577 -20.338 -20.125 -19.940 -19.781 -19.649 -19.544 -19.464 -19.411 -19.384 -19.382 -19.406 -19.454 -19.527 -19.626 -19.750 -19.901 -20.077 -20.280 -20.509 -20.764 -21.046 -21.355 -21.691 -22.054 -22.445 -22.863 -23.310 -23.786 -24.291 -24.826 -25.391 -25.987 -26.614 -27.272 -27.964 -28.688 -29.447 -30.239 -31.067 -31.931 -32.831 -33.769 -34.744 -35.757 -36.808 -37.898 -39.026 -40.192 -41.394 -42.631 -43.901 -45.199 -46.521 -47.861 -49.209 -50.556 -51.903 -53.249 -54.596 -55.943 -57.290 0 1 1.0 1 N4 HV 30.06 34.35 0.05 -4.800e+10 1.674e+10 -4.945e+10 1.573e+10 -5.075e+10 1.469e+10 -5.192e+10 1.362e+10 -5.293e+10 1.252e+10 -5.379e+10 1.140e+10 -5.448e+10 1.027e+10 -5.500e+10 9.114e+09 -5.534e+10 7.953e+09 -5.550e+10 6.789e+09 -5.549e+10 5.626e+09 -5.529e+10 4.474e+09 -5.491e+10 3.338e+09 -5.435e+10 2.226e+09 -5.363e+10 1.148e+09 -5.272e+10 1.113e+08 -5.166e+10 -8.768e+08 -5.045e+10 -1.807e+09 -4.909e+10 -2.672e+09 -4.760e+10 -3.467e+09 -4.599e+10 -4.185e+09 -4.427e+10 -4.820e+09 -4.246e+10 -5.370e+09 -4.058e+10 -5.834e+09 -3.862e+10 -6.209e+09 -3.662e+10 -6.498e+09 -3.459e+10 -6.701e+09 -3.254e+10 -6.823e+09 -3.048e+10 -6.867e+09 -2.843e+10 -6.841e+09 -2.641e+10 -6.749e+09 -2.441e+10 -6.600e+09 -2.247e+10 -6.401e+09 -2.058e+10 -6.161e+09 -1.875e+10 -5.886e+09 -1.700e+10 -5.586e+09 -1.532e+10 -5.267e+09 -1.373e+10 -4.937e+09 -1.222e+10 -4.600e+09 -1.081e+10 -4.264e+09 -9.491e+09 -3.932e+09 -8.265e+09 -3.609e+09 -7.135e+09 -3.296e+09 -6.099e+09 -2.996e+09 -5.156e+09 -2.712e+09 -4.306e+09 -2.443e+09 -3.545e+09 -2.190e+09 -2.872e+09 -1.953e+09 -2.284e+09 -1.734e+09 -1.776e+09 -1.531e+09 -1.343e+09 -1.346e+09 -9.817e+08 -1.178e+09 -6.846e+08 -1.030e+09 -4.442e+08 -9.009e+08 -2.516e+08 -7.936e+08 -9.623e+07 -7.082e+08 3.392e+07 -6.441e+08 1.504e+08 -5.987e+08 2.637e+08 -5.674e+08 3.811e+08 -5.441e+08 5.064e+08 -5.224e+08 6.406e+08 -4.965e+08 7.829e+08 -4.618e+08 9.306e+08 -4.149e+08 1.082e+09 -3.534e+08 1.233e+09 -2.754e+08 1.383e+09 -1.802e+08 1.531e+09 -6.677e+07 1.674e+09 6.574e+07 1.812e+09 2.174e+08 1.947e+09 3.890e+08 2.077e+09 5.817e+08 2.204e+09 7.963e+08 2.328e+09 1.034e+09 2.451e+09 1.298e+09 2.573e+09 1.589e+09 2.696e+09 1.910e+09 2.820e+09 2.263e+09 2.947e+09 2.651e+09 3.077e+09 3.077e+09 3.211e+09 3.545e+09 3.352e+09 4.058e+09 3.499e+09 4.619e+09 3.656e+09 5.234e+09 3.822e+09 5.906e+09 4.001e+09 6.640e+09 4.195e+09 7.443e+09 4.404e+09 8.318e+09 4.631e+09 9.272e+09 4.879e+09 1.031e+10 5.148e+09 1.144e+10 5.442e+09 1.267e+10 5.761e+09 1.400e+10 6.107e+09 1.543e+10 6.481e+09 1.698e+10 6.885e+09 1.863e+10 7.318e+09 2.039e+10 7.783e+09 2.227e+10 8.278e+09 2.424e+10 8.804e+09 2.632e+10 9.359e+09 2.848e+10 9.944e+09 3.072e+10 1.056e+10 3.302e+10 1.120e+10 3.536e+10 1.186e+10 3.773e+10 1.255e+10 4.009e+10 1.326e+10 4.242e+10 1.399e+10 4.470e+10 1.473e+10 4.690e+10 1.549e+10 4.899e+10 1.625e+10 5.095e+10 1.702e+10 5.275e+10 1.779e+10 5.437e+10 1.855e+10 5.580e+10 1.931e+10 5.701e+10 2.004e+10 5.800e+10 2.075e+10 5.876e+10 2.142e+10 5.928e+10 2.206e+10 5.956e+10 2.265e+10 5.961e+10 2.318e+10 5.943e+10 2.364e+10 5.904e+10 2.403e+10 5.844e+10 2.434e+10 5.764e+10 2.457e+10 5.667e+10 2.469e+10 5.554e+10 2.472e+10 5.426e+10 2.464e+10 5.286e+10 2.445e+10 5.134e+10 2.415e+10 4.972e+10 2.374e+10 4.802e+10 2.322e+10 4.624e+10 2.259e+10 4.441e+10 2.187e+10 4.254e+10 2.104e+10 4.063e+10 2.013e+10 3.869e+10 1.914e+10 3.674e+10 1.809e+10 3.478e+10 1.698e+10 3.282e+10 1.584e+10 3.087e+10 1.467e+10 2.895e+10 1.349e+10 2.705e+10 1.232e+10 2.519e+10 1.116e+10 2.337e+10 1.003e+10 2.161e+10 8.943e+09 1.990e+10 7.904e+09 1.826e+10 6.925e+09 1.669e+10 6.012e+09 1.521e+10 5.169e+09 1.381e+10 4.400e+09 1.250e+10 3.708e+09 1.128e+10 3.089e+09 1.016e+10 2.544e+09 9.133e+09 2.069e+09 8.206e+09 1.660e+09 7.374e+09 1.312e+09 6.634e+09 1.019e+09 5.983e+09 7.767e+08 5.417e+09 5.783e+08 4.930e+09 4.190e+08 4.517e+09 2.936e+08 4.172e+09 1.980e+08 3.890e+09 1.284e+08 3.664e+09 8.201e+07 3.491e+09 5.660e+07 3.364e+09 5.082e+07 3.281e+09 6.401e+07 3.236e+09 9.618e+07 3.227e+09 1.479e+08 3.251e+09 2.206e+08 3.305e+09 3.158e+08 3.387e+09 4.359e+08 3.493e+09 5.835e+08 3.622e+09 7.618e+08 3.770e+09 9.741e+08 3.937e+09 1.225e+09 4.118e+09 1.517e+09 4.312e+09 1.857e+09 4.517e+09 2.248e+09 4.729e+09 2.697e+09 4.947e+09 3.208e+09 5.167e+09 3.789e+09 5.388e+09 4.446e+09 5.606e+09 5.182e+09 5.819e+09 6.004e+09 6.024e+09 6.915e+09 6.215e+09 7.916e+09 6.388e+09 9.009e+09 6.539e+09 1.019e+10 6.662e+09 1.144e+10 6.752e+09 1.277e+10 6.802e+09 1.415e+10 6.808e+09 1.555e+10 6.766e+09 1.696e+10 6.672e+09 1.835e+10 6.521e+09 1.968e+10 6.313e+09 2.092e+10 6.046e+09 2.204e+10 5.719e+09 2.299e+10 5.334e+09 2.374e+10 4.892e+09 2.426e+10 4.396e+09 2.453e+10 3.850e+09 2.452e+10 3.259e+09 2.421e+10 2.629e+09 2.361e+10 1.968e+09 2.271e+10 1.286e+09 2.152e+10 5.934e+08 2.008e+10 -9.642e+07 1.842e+10 -7.697e+08 1.657e+10 -1.411e+09 1.460e+10 -2.003e+09 1.256e+10 -2.532e+09 1.053e+10 -2.987e+09 8.571e+09 -3.365e+09 6.754e+09 -3.676e+09 5.134e+09 -3.955e+09 3.735e+09 -4.271e+09 2.522e+09 -4.727e+09 1.384e+09 -5.447e+09 1.473e+08 -6.537e+09 -1.384e+09 -8.064e+09 -3.382e+09 -1.005e+10 -5.974e+09 -1.250e+10 -9.247e+09 -1.540e+10 -1.325e+10 -1.873e+10 -1.801e+10 -2.247e+10 -2.351e+10 -2.659e+10 -2.974e+10 -3.107e+10 -3.665e+10 -3.587e+10 -4.416e+10 -4.096e+10 -5.220e+10 -4.630e+10 -6.064e+10 -5.185e+10 -6.937e+10 -5.758e+10 -7.824e+10 -6.344e+10 -8.709e+10 -6.940e+10 -9.574e+10 -7.545e+10 -1.040e+11 -8.154e+10 -1.117e+11 -8.766e+10 -1.186e+11 -9.381e+10 -1.246e+11 -9.999e+10 -1.295e+11 -1.062e+11 -1.330e+11 -1.124e+11 -1.351e+11 -1.188e+11 -1.356e+11 -1.252e+11 -1.345e+11 -1.319e+11 -1.318e+11 -1.389e+11 -1.273e+11 -1.463e+11 -1.211e+11 -1.543e+11 -1.134e+11 -1.633e+11 -1.040e+11 -1.735e+11 -9.303e+10 -1.856e+11 -8.030e+10 -2.001e+11 -6.552e+10 -2.180e+11 -4.814e+10 -2.401e+11 -2.731e+10 -2.678e+11 -1.832e+09 -3.024e+11 2.988e+10 -3.453e+11 6.970e+10 -3.983e+11 1.198e+11 -4.630e+11 1.829e+11 -5.414e+11 2.615e+11 -6.356e+11 3.587e+11 -7.477e+11 4.776e+11 -8.804e+11 6.215e+11 -1.036e+12 7.939e+11 -1.218e+12 9.984e+11 -1.429e+12 1.239e+12 -1.673e+12 1.518e+12 -1.954e+12 1.841e+12 -2.276e+12 2.212e+12 -2.643e+12 2.633e+12 -3.061e+12 3.110e+12 -3.534e+12 3.645e+12 -4.069e+12 4.243e+12 -4.671e+12 4.907e+12 -5.347e+12 5.640e+12 -6.103e+12 6.445e+12 -6.947e+12 7.327e+12 -7.886e+12 8.285e+12 -8.928e+12 9.323e+12 -1.008e+13 1.044e+13 -1.135e+13 1.164e+13 -1.275e+13 1.293e+13 -1.428e+13 1.430e+13 -1.596e+13 1.575e+13 -1.779e+13 1.728e+13 -1.978e+13 1.889e+13 -2.194e+13 2.058e+13 -2.428e+13 2.234e+13 -2.680e+13 2.417e+13 -2.952e+13 2.606e+13 -3.243e+13 2.801e+13 -3.555e+13 3.002e+13 -3.889e+13 3.206e+13 -4.243e+13 3.414e+13 -4.620e+13 3.625e+13 -5.019e+13 3.837e+13 -5.441e+13 4.049e+13 -5.886e+13 4.261e+13 -6.354e+13 4.515e+13 -6.845e+13 4.753e+13 -7.364e+13 4.962e+13 -7.903e+13 5.165e+13 -8.464e+13 5.361e+13 -9.047e+13 5.548e+13 -9.653e+13 5.726e+13 -1.028e+14 5.892e+13 -1.093e+14 6.045e+13 -1.160e+14 6.183e+13 -1.229e+14 6.306e+13 -1.299e+14 6.411e+13 -1.372e+14 6.497e+13 -1.446e+14 6.562e+13 -1.522e+14 6.605e+13 -1.599e+14 6.624e+13 -1.677e+14 6.619e+13 -1.757e+14 6.587e+13 -1.838e+14 6.528e+13 -1.920e+14 6.440e+13 -2.002e+14 6.322e+13 -2.086e+14 6.173e+13 -2.169e+14 5.993e+13 -2.253e+14 5.779e+13 -2.337e+14 5.532e+13 -2.421e+14 5.252e+13 -2.504e+14 4.936e+13 -2.587e+14 4.586e+13 -2.669e+14 4.201e+13 -2.750e+14 3.780e+13 -2.830e+14 3.325e+13 -2.909e+14 2.835e+13 -2.985e+14 2.311e+13 -3.060e+14 1.753e+13 -3.133e+14 1.162e+13 -3.203e+14 5.398e+12 -3.271e+14 -1.130e+12 -3.336e+14 -7.953e+12 -3.398e+14 -1.506e+13 -3.456e+14 -2.242e+13 -3.511e+14 -3.004e+13 -3.563e+14 -3.790e+13 -3.611e+14 -4.596e+13 -3.656e+14 -5.423e+13 -3.696e+14 -6.266e+13 -3.733e+14 -7.123e+13 -3.765e+14 -7.993e+13 -3.792e+14 -8.873e+13 -3.816e+14 -9.759e+13 -3.834e+14 -1.065e+14 -3.848e+14 -1.155e+14 -3.858e+14 -1.244e+14 -3.863e+14 -1.333e+14 -3.864e+14 -1.422e+14 -3.860e+14 -1.510e+14 -3.851e+14 -1.597e+14 -3.838e+14 -1.683e+14 -3.821e+14 -1.767e+14 -3.800e+14 -1.850e+14 -3.774e+14 -1.930e+14 -3.744e+14 -2.009e+14 -3.711e+14 -2.085e+14 -3.673e+14 -2.159e+14 -3.632e+14 -2.230e+14 -3.587e+14 -2.298e+14 -3.539e+14 -2.363e+14 -3.487e+14 -2.424e+14 -3.432e+14 -2.482e+14 -3.374e+14 -2.537e+14 -3.314e+14 -2.587e+14 -3.250e+14 -2.634e+14 -3.184e+14 -2.676e+14 -3.115e+14 -2.714e+14 -3.044e+14 -2.747e+14 -2.971e+14 -2.776e+14 -2.896e+14 -2.800e+14 -2.819e+14 -2.820e+14 -2.741e+14 -2.834e+14 -2.661e+14 -2.844e+14 -2.580e+14 -2.848e+14 -2.497e+14 -2.848e+14 -2.414e+14 -2.843e+14 -2.332e+14 -2.832e+14 -2.248e+14 -2.817e+14 -2.165e+14 -2.797e+14 -2.081e+14 -2.773e+14 -1.998e+14 -2.743e+14 -1.914e+14 -2.709e+14 -1.832e+14 -2.671e+14 -1.749e+14 -2.628e+14 -1.668e+14 -2.582e+14 -1.588e+14 -2.531e+14 -1.509e+14 -2.477e+14 -1.432e+14 -2.420e+14 -1.356e+14 -2.360e+14 -1.282e+14 -2.297e+14 -1.210e+14 -2.231e+14 -1.140e+14 -2.163e+14 -1.072e+14 -2.094e+14 -1.006e+14 -2.022e+14 -9.425e+13 -1.950e+14 -8.814e+13 -1.876e+14 -8.227e+13 -1.802e+14 -7.665e+13 -1.727e+14 -7.128e+13 -1.652e+14 -6.616e+13 -1.578e+14 -6.130e+13 -1.503e+14 -5.669e+13 -1.430e+14 -5.233e+13 -1.357e+14 -4.822e+13 -1.285e+14 -4.435e+13 -1.214e+14 -4.072e+13 -1.145e+14 -3.732e+13 -1.078e+14 -3.414e+13 -1.012e+14 -3.118e+13 -9.482e+13 -2.843e+13 -8.863e+13 -2.588e+13 -8.264e+13 -2.352e+13 -7.689e+13 -2.135e+13 -7.135e+13 -1.934e+13 -6.604e+13 -1.750e+13 -6.098e+13 -1.581e+13 -5.614e+13 -1.425e+13 -5.155e+13 -1.283e+13 -4.720e+13 -1.154e+13 -4.309e+13 -1.037e+13 -3.922e+13 -9.303e+12 -3.558e+13 -8.342e+12 -3.218e+13 -7.473e+12 -2.900e+13 -6.691e+12 -2.605e+13 -5.987e+12 -2.331e+13 -5.353e+12 -2.078e+13 -4.785e+12 -1.846e+13 -4.275e+12 -1.633e+13 -3.818e+12 -1.438e+13 -3.409e+12 -1.261e+13 -3.043e+12 -1.101e+13 -2.715e+12 -9.569e+12 -2.421e+12 -8.274e+12 -2.158e+12 -7.117e+12 -1.923e+12 -6.089e+12 -1.712e+12 -5.181e+12 -1.523e+12 -4.382e+12 -1.354e+12 -3.684e+12 -1.202e+12 -3.078e+12 -1.066e+12 -2.554e+12 -9.442e+11 -2.105e+12 -8.349e+11 -1.723e+12 -7.370e+11 -1.399e+12 -6.495e+11 -1.128e+12 -5.714e+11 -9.023e+11 -5.019e+11 -7.159e+11 -4.402e+11 -5.635e+11 -3.857e+11 -4.399e+11 -3.377e+11 -3.406e+11 -2.958e+11 -2.615e+11 -2.592e+11 -1.990e+11 -2.276e+11 -1.501e+11 -2.004e+11 -1.119e+11 -1.770e+11 -8.240e+10 -1.569e+11 -5.963e+10 -1.395e+11 -4.218e+10 -1.244e+11 -2.892e+10 -1.110e+11 -1.896e+10 -9.889e+10 -1.167e+10 -8.779e+10 -6.561e+09 -7.743e+10 -3.217e+09 -6.763e+10 -1.314e+09 -5.831e+10 -5.521e+08 -4.946e+10 -6.487e+08 -4.112e+10 -1.336e+09 -3.336e+10 -2.366e+09 -2.633e+10 -3.527e+09 -2.014e+10 -4.686e+09 -1.494e+10 -5.857e+09 -1.082e+10 -7.277e+09 -7.746e+09 -9.408e+09 -5.433e+09 -1.277e+10 -3.337e+09 -1.774e+10 -8.448e+08 -2.451e+10 2.511e+09 -3.316e+10 6.999e+09 -4.368e+10 1.274e+10 -5.604e+10 1.976e+10 -7.015e+10 2.800e+10 -8.590e+10 3.737e+10 -1.031e+11 4.774e+10 -1.216e+11 5.895e+10 -1.411e+11 7.083e+10 -1.615e+11 8.317e+10 -1.823e+11 9.578e+10 -2.034e+11 1.084e+11 -2.244e+11 1.210e+11 -2.451e+11 1.331e+11 -2.651e+11 1.447e+11 -2.841e+11 1.557e+11 -3.020e+11 1.657e+11 -3.184e+11 1.747e+11 -3.332e+11 1.827e+11 -3.461e+11 1.894e+11 -3.571e+11 1.949e+11 -3.661e+11 1.991e+11 -3.728e+11 2.020e+11 -3.774e+11 2.036e+11 -3.798e+11 2.040e+11 -3.800e+11 2.030e+11 -3.781e+11 2.010e+11 -3.742e+11 1.978e+11 -3.683e+11 1.937e+11 -3.606e+11 1.886e+11 -3.513e+11 1.827e+11 -3.404e+11 1.761e+11 -3.283e+11 1.689e+11 -3.150e+11 1.611e+11 -3.007e+11 1.530e+11 -2.857e+11 1.445e+11 -2.701e+11 1.358e+11 -2.540e+11 1.270e+11 -2.377e+11 1.182e+11 -2.213e+11 1.094e+11 -2.050e+11 1.007e+11 -1.889e+11 9.213e+10 -1.731e+11 8.383e+10 -1.577e+11 7.582e+10 -1.428e+11 6.816e+10 -1.286e+11 6.088e+10 -1.151e+11 5.401e+10 -1.023e+11 4.759e+10 -9.032e+10 4.163e+10 -7.918e+10 3.616e+10 -6.889e+10 3.117e+10 -5.945e+10 2.666e+10 -5.088e+10 2.263e+10 -4.316e+10 1.906e+10 -3.626e+10 1.594e+10 -3.017e+10 1.325e+10 -2.485e+10 1.095e+10 -2.023e+10 8.999e+09 -1.628e+10 7.381e+09 -1.295e+10 6.052e+09 -1.017e+10 4.975e+09 -7.891e+09 4.119e+09 -6.059e+09 3.450e+09 -4.611e+09 2.941e+09 -3.494e+09 2.570e+09 -2.653e+09 2.319e+09 -2.036e+09 2.179e+09 -1.597e+09 2.147e+09 -1.292e+09 2.224e+09 -1.085e+09 2.412e+09 -9.537e+08 2.713e+09 -8.860e+08 3.133e+09 -8.806e+08 3.675e+09 -9.443e+08 4.346e+09 -1.090e+09 5.152e+09 -1.334e+09 6.102e+09 -1.694e+09 7.203e+09 -2.193e+09 8.461e+09 -2.852e+09 9.882e+09 -3.691e+09 1.147e+10 -4.733e+09 1.322e+10 -5.999e+09 1.514e+10 -7.504e+09 1.721e+10 -9.265e+09 1.942e+10 -1.129e+10 2.177e+10 -1.360e+10 2.423e+10 -1.618e+10 2.677e+10 -1.904e+10 2.939e+10 -2.217e+10 3.204e+10 -2.556e+10 3.470e+10 -2.919e+10 3.735e+10 -3.305e+10 3.994e+10 -3.710e+10 4.244e+10 -4.133e+10 4.484e+10 -4.570e+10 4.709e+10 -5.016e+10 4.916e+10 -5.470e+10 5.103e+10 -5.928e+10 5.267e+10 -6.385e+10 5.406e+10 -6.839e+10 5.517e+10 -7.285e+10 5.599e+10 -7.720e+10 5.650e+10 -8.141e+10 5.669e+10 -8.545e+10 5.656e+10 -8.929e+10 5.608e+10 -9.291e+10 5.526e+10 -9.629e+10 5.409e+10 -9.942e+10 5.258e+10 -1.023e+11 5.073e+10 -1.048e+11 4.854e+10 -1.071e+11 4.604e+10 -1.090e+11 4.323e+10 -1.107e+11 4.014e+10 -1.120e+11 3.678e+10 -1.131e+11 3.318e+10 -1.138e+11 2.936e+10 -1.143e+11 2.534e+10 -1.145e+11 2.115e+10 -1.143e+11 1.681e+10 -1.140e+11 1.236e+10 -1.133e+11 7.812e+09 -1.124e+11 3.197e+09 0.005 -59.740 -57.948 -56.156 -54.365 -52.573 -50.782 -48.998 -47.333 -45.765 -44.283 -42.876 -41.537 -40.261 -39.043 -37.880 -36.768 -35.707 -34.692 -33.723 -32.798 -31.914 -31.072 -30.269 -29.504 -28.776 -28.085 -27.428 -26.807 -26.218 -25.663 -25.139 -24.647 -24.186 -23.756 -23.355 -22.984 -22.641 -22.328 -22.043 -21.785 -21.556 -21.354 -21.180 -21.034 -20.915 -20.823 -20.758 -20.721 -20.710 -20.727 -20.772 -20.842 -20.939 -21.065 -21.218 -21.401 -21.612 -21.853 -22.124 -22.426 -22.758 -23.123 -23.520 -23.951 -24.416 -24.917 -25.454 -26.031 -26.647 -27.306 -28.009 -28.759 -29.560 -30.415 -31.329 -32.309 -33.362 -34.496 -35.725 -37.065 -38.538 -40.175 -42.019 -44.143 -46.635 -49.601 -52.944 -55.471 -54.998 -52.672 -50.508 -48.850 -47.620 -46.721 -46.089 -45.683 -45.482 -45.477 -45.665 -46.041 -46.570 -47.127 -47.408 -46.958 -45.550 -43.447 -41.094 -38.770 -36.580 -34.544 -32.652 -30.889 -29.239 -27.687 -26.223 -24.836 -23.519 -22.264 -21.068 -19.925 -18.832 -17.785 -16.782 -15.821 -14.899 -14.014 -13.165 -12.349 -11.567 -10.817 -10.098 -9.408 -8.747 -8.115 -7.510 -6.932 -6.381 -5.855 -5.355 -4.880 -4.429 -4.003 -3.601 -3.222 -2.867 -2.535 -2.227 -1.941 -1.679 -1.439 -1.222 -1.027 -0.854 -0.703 -0.575 -0.471 -0.389 -0.332 -0.298 -0.288 -0.303 -0.344 -0.410 -0.502 -0.620 -0.766 -0.941 -1.144 -1.376 -1.640 -1.936 -2.266 -2.631 -3.032 -3.473 -3.954 -4.479 -5.050 -5.672 -6.347 -7.080 -7.877 -8.743 -9.688 -10.718 -11.847 -13.086 -14.455 -15.976 -17.677 -19.600 -21.800 -24.362 -27.415 -31.180 -36.089 -43.177 -55.878 -57.402 -59.858 -47.308 -38.694 -33.078 -28.901 -25.575 -22.817 -20.468 -18.427 -16.629 -15.028 -13.589 -12.289 -11.107 -10.029 -9.041 -8.135 -7.301 -6.534 -5.827 -5.175 -4.575 -4.023 -3.515 -3.050 -2.624 -2.236 -1.884 -1.566 -1.280 -1.026 -0.802 -0.608 -0.441 -0.303 -0.191 -0.105 -0.045 -0.010 0.000 -0.014 -0.052 -0.114 -0.200 -0.308 -0.440 -0.594 -0.771 -0.970 -1.193 -1.437 -1.702 -1.990 -2.300 -2.634 -2.990 -3.369 -3.772 -4.199 -4.650 -5.125 -5.624 -6.149 -6.698 -7.274 -7.876 -8.505 -9.161 -9.845 -10.558 -11.301 -12.074 -12.878 -13.714 -14.583 -15.486 -16.425 -17.400 -18.414 -19.468 -20.564 -21.705 -22.892 -24.128 -25.416 -26.759 -28.161 -29.628 -31.164 -32.776 -34.471 -36.259 -38.149 -40.153 -42.282 -44.545 -46.940 -49.433 -51.919 -54.170 -55.846 -56.691 -56.742 -56.212 -55.275 -54.026 -52.537 -50.899 -49.196 -47.495 -45.838 -44.247 -42.729 -41.286 -39.916 -38.614 -37.377 -36.200 -35.080 -34.013 -32.997 -32.029 -31.106 -30.227 -29.389 -28.592 -27.833 -27.112 -26.428 -25.779 -25.164 -24.584 -24.036 -23.520 -23.036 -22.582 -22.159 -21.766 -21.402 -21.066 -20.758 -20.479 -20.227 -20.002 -19.803 -19.631 -19.485 -19.365 -19.271 -19.202 -19.158 -19.139 -19.143 -19.172 -19.226 -19.304 -19.407 -19.535 -19.687 -19.865 -20.067 -20.294 -20.547 -20.824 -21.126 -21.454 -21.807 -22.185 -22.590 -23.021 -23.478 -23.961 -24.472 -25.010 -25.575 -26.168 -26.789 -27.439 -28.117 -28.825 -29.561 -30.328 -31.124 -31.950 -32.806 -33.692 -34.608 -35.552 -36.525 -37.524 -38.549 -39.596 -40.663 -41.746 -42.838 -43.933 -45.021 -46.109 -47.198 -48.286 -49.374 -50.462 0 1 1.0 1 N4 VV 30.06 34.35 0.05 -1.862e+08 4.806e+10 -1.643e+09 4.904e+10 -3.089e+09 4.988e+10 -4.520e+09 5.056e+10 -5.930e+09 5.109e+10 -7.311e+09 5.145e+10 -8.658e+09 5.165e+10 -9.965e+09 5.168e+10 -1.122e+10 5.155e+10 -1.243e+10 5.124e+10 -1.357e+10 5.078e+10 -1.464e+10 5.015e+10 -1.564e+10 4.937e+10 -1.656e+10 4.844e+10 -1.738e+10 4.737e+10 -1.811e+10 4.616e+10 -1.873e+10 4.483e+10 -1.925e+10 4.338e+10 -1.965e+10 4.184e+10 -1.994e+10 4.021e+10 -2.011e+10 3.850e+10 -2.017e+10 3.673e+10 -2.011e+10 3.492e+10 -1.994e+10 3.307e+10 -1.966e+10 3.120e+10 -1.927e+10 2.932e+10 -1.878e+10 2.744e+10 -1.820e+10 2.558e+10 -1.754e+10 2.375e+10 -1.681e+10 2.195e+10 -1.602e+10 2.020e+10 -1.518e+10 1.851e+10 -1.430e+10 1.687e+10 -1.340e+10 1.530e+10 -1.248e+10 1.381e+10 -1.155e+10 1.239e+10 -1.064e+10 1.104e+10 -9.737e+09 9.779e+09 -8.858e+09 8.598e+09 -8.011e+09 7.499e+09 -7.200e+09 6.482e+09 -6.430e+09 5.547e+09 -5.705e+09 4.694e+09 -5.027e+09 3.919e+09 -4.398e+09 3.223e+09 -3.819e+09 2.603e+09 -3.290e+09 2.056e+09 -2.811e+09 1.580e+09 -2.381e+09 1.172e+09 -1.998e+09 8.271e+08 -1.662e+09 5.414e+08 -1.371e+09 3.096e+08 -1.122e+09 1.252e+08 -9.137e+08 -1.912e+07 -7.433e+08 -1.317e+08 -6.065e+08 -2.222e+08 -4.976e+08 -3.001e+08 -4.095e+08 -3.742e+08 -3.337e+08 -4.508e+08 -2.621e+08 -5.335e+08 -1.878e+08 -6.225e+08 -1.057e+08 -7.163e+08 -1.238e+07 -8.121e+08 9.400e+07 -9.067e+08 2.145e+08 -9.971e+08 3.497e+08 -1.081e+09 4.994e+08 -1.156e+09 6.638e+08 -1.220e+09 8.437e+08 -1.273e+09 1.039e+09 -1.314e+09 1.250e+09 -1.341e+09 1.478e+09 -1.356e+09 1.724e+09 -1.356e+09 1.990e+09 -1.342e+09 2.277e+09 -1.314e+09 2.587e+09 -1.270e+09 2.922e+09 -1.210e+09 3.284e+09 -1.133e+09 3.675e+09 -1.038e+09 4.098e+09 -9.252e+08 4.557e+09 -7.927e+08 5.052e+09 -6.400e+08 5.589e+09 -4.658e+08 6.171e+09 -2.689e+08 6.803e+09 -4.837e+07 7.488e+09 1.973e+08 8.233e+09 4.701e+08 9.041e+09 7.712e+08 9.919e+09 1.103e+09 1.087e+10 1.467e+09 1.191e+10 1.865e+09 1.303e+10 2.299e+09 1.424e+10 2.773e+09 1.555e+10 3.285e+09 1.696e+10 3.839e+09 1.846e+10 4.435e+09 2.007e+10 5.072e+09 2.177e+10 5.749e+09 2.357e+10 6.464e+09 2.545e+10 7.213e+09 2.742e+10 7.992e+09 2.946e+10 8.796e+09 3.155e+10 9.615e+09 3.369e+10 1.044e+10 3.584e+10 1.126e+10 3.801e+10 1.207e+10 4.015e+10 1.285e+10 4.225e+10 1.359e+10 4.430e+10 1.427e+10 4.625e+10 1.489e+10 4.810e+10 1.543e+10 4.983e+10 1.589e+10 5.140e+10 1.625e+10 5.281e+10 1.651e+10 5.405e+10 1.667e+10 5.510e+10 1.672e+10 5.594e+10 1.666e+10 5.659e+10 1.650e+10 5.702e+10 1.625e+10 5.725e+10 1.591e+10 5.727e+10 1.550e+10 5.709e+10 1.502e+10 5.672e+10 1.448e+10 5.616e+10 1.391e+10 5.543e+10 1.331e+10 5.452e+10 1.269e+10 5.346e+10 1.208e+10 5.226e+10 1.147e+10 5.092e+10 1.088e+10 4.945e+10 1.032e+10 4.787e+10 9.788e+09 4.619e+10 9.298e+09 4.442e+10 8.850e+09 4.258e+10 8.444e+09 4.066e+10 8.080e+09 3.869e+10 7.757e+09 3.667e+10 7.470e+09 3.463e+10 7.216e+09 3.256e+10 6.989e+09 3.049e+10 6.784e+09 2.843e+10 6.595e+09 2.639e+10 6.416e+09 2.439e+10 6.243e+09 2.243e+10 6.070e+09 2.053e+10 5.894e+09 1.870e+10 5.712e+09 1.695e+10 5.521e+09 1.530e+10 5.322e+09 1.374e+10 5.114e+09 1.228e+10 4.898e+09 1.093e+10 4.676e+09 9.700e+09 4.450e+09 8.578e+09 4.224e+09 7.566e+09 4.000e+09 6.665e+09 3.783e+09 5.868e+09 3.573e+09 5.172e+09 3.375e+09 4.570e+09 3.192e+09 4.056e+09 3.024e+09 3.621e+09 2.873e+09 3.261e+09 2.740e+09 2.967e+09 2.625e+09 2.733e+09 2.528e+09 2.555e+09 2.449e+09 2.425e+09 2.386e+09 2.341e+09 2.338e+09 2.300e+09 2.303e+09 2.297e+09 2.280e+09 2.333e+09 2.266e+09 2.405e+09 2.260e+09 2.513e+09 2.258e+09 2.656e+09 2.257e+09 2.835e+09 2.255e+09 3.050e+09 2.247e+09 3.302e+09 2.230e+09 3.591e+09 2.199e+09 3.918e+09 2.151e+09 4.285e+09 2.079e+09 4.693e+09 1.980e+09 5.144e+09 1.847e+09 5.640e+09 1.676e+09 6.183e+09 1.459e+09 6.776e+09 1.193e+09 7.422e+09 8.699e+08 8.121e+09 4.850e+08 8.876e+09 3.174e+07 9.687e+09 -4.949e+08 1.055e+10 -1.098e+09 1.146e+10 -1.782e+09 1.242e+10 -2.547e+09 1.341e+10 -3.390e+09 1.442e+10 -4.307e+09 1.544e+10 -5.288e+09 1.644e+10 -6.323e+09 1.742e+10 -7.395e+09 1.833e+10 -8.486e+09 1.917e+10 -9.573e+09 1.990e+10 -1.063e+10 2.050e+10 -1.164e+10 2.094e+10 -1.258e+10 2.119e+10 -1.340e+10 2.124e+10 -1.411e+10 2.106e+10 -1.466e+10 2.065e+10 -1.505e+10 1.999e+10 -1.526e+10 1.908e+10 -1.529e+10 1.795e+10 -1.512e+10 1.659e+10 -1.477e+10 1.504e+10 -1.424e+10 1.333e+10 -1.354e+10 1.151e+10 -1.270e+10 9.623e+09 -1.174e+10 7.729e+09 -1.070e+10 5.887e+09 -9.608e+09 4.154e+09 -8.517e+09 2.572e+09 -7.480e+09 1.159e+09 -6.562e+09 -1.128e+08 -5.829e+09 -1.342e+09 -5.336e+09 -2.694e+09 -5.099e+09 -4.373e+09 -5.081e+09 -6.574e+09 -5.199e+09 -9.440e+09 -5.356e+09 -1.306e+10 -5.468e+09 -1.750e+10 -5.470e+09 -2.277e+10 -5.319e+09 -2.887e+10 -4.989e+09 -3.578e+10 -4.468e+09 -4.344e+10 -3.755e+09 -5.180e+10 -2.865e+09 -6.077e+10 -1.821e+09 -7.025e+10 -6.589e+08 -8.013e+10 5.713e+08 -9.026e+10 1.811e+09 -1.005e+11 2.985e+09 -1.107e+11 4.010e+09 -1.208e+11 4.792e+09 -1.304e+11 5.227e+09 -1.396e+11 5.203e+09 -1.481e+11 4.607e+09 -1.557e+11 3.321e+09 -1.624e+11 1.233e+09 -1.681e+11 -1.770e+09 -1.726e+11 -5.788e+09 -1.759e+11 -1.091e+10 -1.780e+11 -1.724e+10 -1.789e+11 -2.486e+10 -1.788e+11 -3.386e+10 -1.779e+11 -4.439e+10 -1.763e+11 -5.664e+10 -1.744e+11 -7.092e+10 -1.724e+11 -8.772e+10 -1.706e+11 -1.077e+11 -1.694e+11 -1.319e+11 -1.686e+11 -1.617e+11 -1.685e+11 -1.986e+11 -1.685e+11 -2.448e+11 -1.681e+11 -3.027e+11 -1.667e+11 -3.748e+11 -1.633e+11 -4.642e+11 -1.567e+11 -5.743e+11 -1.459e+11 -7.085e+11 -1.297e+11 -8.709e+11 -1.066e+11 -1.066e+12 -7.540e+10 -1.297e+12 -3.491e+10 -1.570e+12 1.619e+10 -1.890e+12 7.897e+10 -2.263e+12 1.545e+11 -2.693e+12 2.438e+11 -3.189e+12 3.475e+11 -3.756e+12 4.661e+11 -4.402e+12 6.003e+11 -5.133e+12 7.499e+11 -5.958e+12 9.146e+11 -6.884e+12 1.094e+12 -7.921e+12 1.288e+12 -9.074e+12 1.493e+12 -1.035e+13 1.710e+12 -1.177e+13 1.935e+12 -1.333e+13 2.167e+12 -1.504e+13 2.401e+12 -1.692e+13 2.635e+12 -1.897e+13 2.864e+12 -2.119e+13 3.083e+12 -2.360e+13 3.288e+12 -2.621e+13 3.473e+12 -2.902e+13 3.632e+12 -3.204e+13 3.759e+12 -3.527e+13 3.845e+12 -3.872e+13 3.884e+12 -4.241e+13 3.868e+12 -4.631e+13 3.789e+12 -5.046e+13 3.638e+12 -5.484e+13 3.405e+12 -5.945e+13 3.083e+12 -6.430e+13 2.660e+12 -6.939e+13 2.128e+12 -7.470e+13 1.477e+12 -8.025e+13 6.946e+11 -8.603e+13 -9.919e+11 -9.195e+13 -8.301e+11 -9.863e+13 -2.030e+12 -1.051e+14 -3.399e+12 -1.117e+14 -4.949e+12 -1.185e+14 -6.692e+12 -1.255e+14 -8.635e+12 -1.327e+14 -1.079e+13 -1.400e+14 -1.317e+13 -1.475e+14 -1.578e+13 -1.551e+14 -1.864e+13 -1.628e+14 -2.175e+13 -1.706e+14 -2.512e+13 -1.785e+14 -2.876e+13 -1.865e+14 -3.268e+13 -1.945e+14 -3.689e+13 -2.026e+14 -4.139e+13 -2.106e+14 -4.619e+13 -2.187e+14 -5.129e+13 -2.267e+14 -5.671e+13 -2.347e+14 -6.244e+13 -2.426e+14 -6.847e+13 -2.504e+14 -7.482e+13 -2.581e+14 -8.149e+13 -2.657e+14 -8.847e+13 -2.730e+14 -9.575e+13 -2.803e+14 -1.033e+14 -2.873e+14 -1.112e+14 -2.940e+14 -1.194e+14 -3.005e+14 -1.278e+14 -3.068e+14 -1.365e+14 -3.127e+14 -1.454e+14 -3.183e+14 -1.545e+14 -3.235e+14 -1.639e+14 -3.284e+14 -1.735e+14 -3.329e+14 -1.832e+14 -3.370e+14 -1.930e+14 -3.406e+14 -2.030e+14 -3.439e+14 -2.131e+14 -3.467e+14 -2.233e+14 -3.490e+14 -2.335e+14 -3.508e+14 -2.438e+14 -3.522e+14 -2.541e+14 -3.532e+14 -2.643e+14 -3.536e+14 -2.745e+14 -3.536e+14 -2.847e+14 -3.531e+14 -2.947e+14 -3.521e+14 -3.045e+14 -3.506e+14 -3.143e+14 -3.486e+14 -3.238e+14 -3.462e+14 -3.331e+14 -3.434e+14 -3.422e+14 -3.400e+14 -3.510e+14 -3.363e+14 -3.596e+14 -3.321e+14 -3.678e+14 -3.275e+14 -3.758e+14 -3.226e+14 -3.834e+14 -3.172e+14 -3.906e+14 -3.116e+14 -3.974e+14 -3.055e+14 -4.039e+14 -2.992e+14 -4.099e+14 -2.925e+14 -4.155e+14 -2.856e+14 -4.206e+14 -2.784e+14 -4.253e+14 -2.709e+14 -4.295e+14 -2.632e+14 -4.332e+14 -2.553e+14 -4.363e+14 -2.473e+14 -4.390e+14 -2.391e+14 -4.411e+14 -2.307e+14 -4.427e+14 -2.222e+14 -4.437e+14 -2.136e+14 -4.442e+14 -2.049e+14 -4.440e+14 -1.962e+14 -4.434e+14 -1.875e+14 -4.421e+14 -1.787e+14 -4.402e+14 -1.700e+14 -4.378e+14 -1.613e+14 -4.348e+14 -1.527e+14 -4.312e+14 -1.441e+14 -4.271e+14 -1.357e+14 -4.224e+14 -1.274e+14 -4.172e+14 -1.193e+14 -4.115e+14 -1.114e+14 -4.053e+14 -1.036e+14 -3.986e+14 -9.609e+13 -3.914e+14 -8.878e+13 -3.838e+14 -8.169e+13 -3.757e+14 -7.485e+13 -3.673e+14 -6.827e+13 -3.585e+14 -6.195e+13 -3.494e+14 -5.592e+13 -3.400e+14 -5.017e+13 -3.303e+14 -4.471e+13 -3.203e+14 -3.956e+13 -3.102e+14 -3.470e+13 -2.999e+14 -3.014e+13 -2.895e+14 -2.588e+13 -2.790e+14 -2.192e+13 -2.684e+14 -1.826e+13 -2.578e+14 -1.488e+13 -2.472e+14 -1.179e+13 -2.367e+14 -8.975e+12 -2.262e+14 -6.427e+12 -2.157e+14 -4.137e+12 -2.054e+14 -2.094e+12 -1.953e+14 -2.899e+11 -1.853e+14 1.290e+12 -1.755e+14 2.656e+12 -1.659e+14 3.821e+12 -1.565e+14 4.798e+12 -1.474e+14 5.599e+12 -1.385e+14 6.238e+12 -1.299e+14 6.727e+12 -1.216e+14 7.080e+12 -1.136e+14 7.308e+12 -1.058e+14 7.425e+12 -9.842e+13 7.443e+12 -9.131e+13 7.373e+12 -8.452e+13 7.227e+12 -7.804e+13 7.016e+12 -7.189e+13 6.754e+12 -6.604e+13 6.454e+12 -6.051e+13 6.120e+12 -5.529e+13 5.757e+12 -5.038e+13 5.372e+12 -4.577e+13 4.973e+12 -4.147e+13 4.568e+12 -3.745e+13 4.162e+12 -3.372e+13 3.760e+12 -3.026e+13 3.368e+12 -2.706e+13 2.989e+12 -2.411e+13 2.626e+12 -2.141e+13 2.284e+12 -1.894e+13 1.963e+12 -1.669e+13 1.665e+12 -1.465e+13 1.391e+12 -1.281e+13 1.142e+12 -1.115e+13 9.181e+11 -9.659e+12 7.185e+11 -8.331e+12 5.427e+11 -7.150e+12 3.899e+11 -6.107e+12 2.589e+11 -5.189e+12 1.481e+11 -4.386e+12 5.614e+10 -3.686e+12 -1.858e+10 -3.080e+12 -7.784e+10 -2.559e+12 -1.233e+11 -2.113e+12 -1.567e+11 -1.734e+12 -1.796e+11 -1.414e+12 -1.938e+11 -1.146e+12 -2.007e+11 -9.229e+11 -2.017e+11 -7.387e+11 -1.982e+11 -5.880e+11 -1.913e+11 -4.655e+11 -1.820e+11 -3.668e+11 -1.713e+11 -2.879e+11 -1.598e+11 -2.253e+11 -1.482e+11 -1.759e+11 -1.368e+11 -1.371e+11 -1.260e+11 -1.067e+11 -1.158e+11 -8.297e+10 -1.061e+11 -6.443e+10 -9.705e+10 -4.994e+10 -8.835e+10 -3.867e+10 -7.991e+10 -2.998e+10 -7.160e+10 -2.336e+10 -6.336e+10 -1.842e+10 -5.519e+10 -1.484e+10 -4.712e+10 -1.235e+10 -3.926e+10 -1.068e+10 -3.177e+10 -9.620e+09 -2.482e+10 -8.982e+09 -1.860e+10 -8.661e+09 -1.330e+10 -8.681e+09 -9.022e+09 -9.257e+09 -5.668e+09 -1.076e+10 -2.852e+09 -1.356e+10 9.000e+07 -1.790e+10 3.862e+09 -2.384e+10 8.980e+09 -3.139e+10 1.573e+10 -4.056e+10 2.424e+10 -5.131e+10 3.452e+10 -6.355e+10 4.648e+10 -7.723e+10 6.003e+10 -9.219e+10 7.496e+10 -1.083e+11 9.106e+10 -1.254e+11 1.081e+11 -1.432e+11 1.258e+11 -1.615e+11 1.438e+11 -1.801e+11 1.620e+11 -1.988e+11 1.799e+11 -2.172e+11 1.974e+11 -2.351e+11 2.141e+11 -2.523e+11 2.298e+11 -2.686e+11 2.442e+11 -2.837e+11 2.573e+11 -2.974e+11 2.688e+11 -3.096e+11 2.786e+11 -3.202e+11 2.867e+11 -3.290e+11 2.929e+11 -3.359e+11 2.972e+11 -3.409e+11 2.996e+11 -3.440e+11 3.002e+11 -3.452e+11 2.991e+11 -3.445e+11 2.963e+11 -3.420e+11 2.920e+11 -3.377e+11 2.862e+11 -3.317e+11 2.790e+11 -3.242e+11 2.707e+11 -3.153e+11 2.613e+11 -3.051e+11 2.511e+11 -2.937e+11 2.400e+11 -2.814e+11 2.283e+11 -2.683e+11 2.162e+11 -2.545e+11 2.037e+11 -2.403e+11 1.910e+11 -2.256e+11 1.781e+11 -2.108e+11 1.653e+11 -1.959e+11 1.526e+11 -1.811e+11 1.401e+11 -1.665e+11 1.279e+11 -1.522e+11 1.161e+11 -1.383e+11 1.048e+11 -1.249e+11 9.395e+10 -1.121e+11 8.370e+10 -9.990e+10 7.407e+10 -8.842e+10 6.508e+10 -7.770e+10 5.678e+10 -6.774e+10 4.916e+10 -5.857e+10 4.223e+10 -5.021e+10 3.599e+10 -4.265e+10 3.044e+10 -3.586e+10 2.552e+10 -2.984e+10 2.125e+10 -2.456e+10 1.756e+10 -1.997e+10 1.441e+10 -1.603e+10 1.176e+10 -1.269e+10 9.562e+09 -9.902e+09 7.758e+09 -7.612e+09 6.305e+09 -5.765e+09 5.155e+09 -4.302e+09 4.265e+09 -3.169e+09 3.599e+09 -2.310e+09 3.126e+09 -1.670e+09 2.824e+09 -1.197e+09 2.678e+09 -8.450e+08 2.678e+09 -5.734e+08 2.816e+09 -3.565e+08 3.089e+09 -1.803e+08 3.495e+09 -4.205e+07 4.036e+09 5.239e+07 4.718e+09 9.183e+07 5.547e+09 6.124e+07 6.533e+09 -5.697e+07 7.685e+09 -2.821e+08 9.011e+09 -6.348e+08 1.052e+10 -1.136e+09 1.222e+10 -1.808e+09 1.410e+10 -2.670e+09 1.618e+10 -3.744e+09 1.844e+10 -5.046e+09 2.088e+10 -6.594e+09 2.348e+10 -8.399e+09 2.623e+10 -1.047e+10 2.911e+10 -1.281e+10 3.210e+10 -1.543e+10 3.516e+10 -1.832e+10 3.828e+10 -2.146e+10 4.141e+10 -2.486e+10 4.453e+10 -2.849e+10 4.759e+10 -3.233e+10 5.058e+10 -3.636e+10 5.345e+10 -4.055e+10 5.616e+10 -4.486e+10 5.869e+10 -4.928e+10 6.100e+10 -5.376e+10 6.306e+10 -5.827e+10 6.484e+10 -6.278e+10 6.633e+10 -6.725e+10 6.749e+10 -7.164e+10 6.832e+10 -7.593e+10 6.879e+10 -8.009e+10 6.889e+10 -8.409e+10 6.861e+10 -8.790e+10 6.794e+10 -9.151e+10 6.688e+10 -9.488e+10 6.543e+10 -9.802e+10 6.359e+10 -1.009e+11 6.139e+10 -1.035e+11 5.883e+10 -1.058e+11 5.592e+10 -1.079e+11 5.270e+10 -1.097e+11 4.918e+10 -1.112e+11 4.537e+10 -1.124e+11 4.132e+10 -1.133e+11 3.705e+10 -1.139e+11 3.258e+10 -1.143e+11 2.794e+10 -1.145e+11 2.316e+10 -1.143e+11 1.827e+10 0.005 -58.503 -56.963 -55.423 -53.883 -52.343 -50.803 -49.264 -47.731 -46.229 -44.771 -43.362 -42.007 -40.705 -39.456 -38.260 -37.114 -36.017 -34.968 -33.965 -33.006 -32.091 -31.217 -30.384 -29.590 -28.834 -28.115 -27.433 -26.785 -26.171 -25.591 -25.044 -24.528 -24.043 -23.590 -23.166 -22.772 -22.407 -22.071 -21.763 -21.483 -21.231 -21.006 -20.809 -20.639 -20.496 -20.380 -20.291 -20.228 -20.191 -20.182 -20.198 -20.240 -20.307 -20.402 -20.523 -20.672 -20.848 -21.052 -21.284 -21.544 -21.832 -22.150 -22.497 -22.874 -23.281 -23.719 -24.189 -24.691 -25.226 -25.795 -26.399 -27.038 -27.714 -28.429 -29.183 -29.978 -30.816 -31.699 -32.629 -33.608 -34.638 -35.723 -36.864 -38.064 -39.318 -40.623 -41.962 -43.311 -44.621 -45.826 -46.847 -47.619 -48.129 -48.427 -48.610 -48.785 -49.056 -49.517 -50.266 -51.407 -52.985 -54.516 -54.318 -51.621 -47.974 -44.603 -41.676 -39.111 -36.822 -34.747 -32.843 -31.077 -29.426 -27.875 -26.411 -25.022 -23.702 -22.444 -21.242 -20.093 -18.993 -17.938 -16.927 -15.957 -15.026 -14.131 -13.272 -12.447 -11.655 -10.894 -10.165 -9.465 -8.793 -8.150 -7.535 -6.946 -6.384 -5.848 -5.337 -4.851 -4.389 -3.952 -3.539 -3.149 -2.783 -2.439 -2.119 -1.822 -1.548 -1.296 -1.067 -0.861 -0.675 -0.511 -0.371 -0.253 -0.158 -0.087 -0.039 -0.015 -0.015 -0.040 -0.090 -0.166 -0.268 -0.396 -0.552 -0.736 -0.949 -1.192 -1.467 -1.773 -2.113 -2.489 -2.902 -3.353 -3.846 -4.383 -4.967 -5.602 -6.291 -7.038 -7.850 -8.733 -9.695 -10.744 -11.892 -13.154 -14.547 -16.094 -17.826 -19.782 -22.020 -24.624 -27.721 -31.524 -36.422 -43.251 -54.259 -70.377 -54.383 -43.323 -36.480 -31.572 -27.762 -24.659 -22.051 -19.809 -17.849 -16.115 -14.566 -13.171 -11.907 -10.757 -9.706 -8.743 -7.858 -7.045 -6.296 -5.606 -4.971 -4.385 -3.847 -3.353 -2.901 -2.487 -2.110 -1.769 -1.462 -1.187 -0.943 -0.729 -0.544 -0.387 -0.258 -0.155 -0.079 -0.028 -0.002 0.000 -0.023 -0.070 -0.140 -0.234 -0.351 -0.491 -0.654 -0.839 -1.047 -1.277 -1.528 -1.802 -2.098 -2.416 -2.758 -3.123 -3.511 -3.923 -4.358 -4.817 -5.301 -5.809 -6.343 -6.901 -7.486 -8.097 -8.735 -9.401 -10.094 -10.817 -11.569 -12.351 -13.164 -14.010 -14.889 -15.802 -16.750 -17.736 -18.760 -19.824 -20.930 -22.081 -23.277 -24.522 -25.818 -27.168 -28.576 -30.044 -31.576 -33.173 -34.836 -36.561 -38.337 -40.134 -41.902 -43.554 -44.975 -46.053 -46.741 -47.081 -47.175 -47.130 -47.016 -46.867 -46.686 -46.457 -46.149 -45.731 -45.178 -44.479 -43.641 -42.687 -41.648 -40.555 -39.437 -38.316 -37.207 -36.121 -35.066 -34.047 -33.065 -32.122 -31.218 -30.354 -29.529 -28.741 -27.992 -27.279 -26.603 -25.961 -25.355 -24.782 -24.243 -23.736 -23.260 -22.816 -22.403 -22.019 -21.665 -21.341 -21.044 -20.776 -20.535 -20.322 -20.136 -19.977 -19.844 -19.738 -19.657 -19.602 -19.573 -19.567 -19.586 -19.631 -19.701 -19.795 -19.915 -20.061 -20.231 -20.428 -20.649 -20.896 -21.169 -21.467 -21.791 -22.141 -22.518 -22.921 -23.351 -23.808 -24.292 -24.805 -25.346 -25.915 -26.514 -27.142 -27.800 -28.489 -29.209 -29.961 -30.745 -31.562 -32.413 -33.298 -34.218 -35.173 -36.165 -37.193 -38.258 -39.360 -40.498 -41.674 -42.885 -44.129 -45.404 -46.706 -48.010 -49.313 -50.617 -51.920 -53.224 0 1 1.0 1 N4 VH 30.06 34.35 0.05 -4.036e+10 2.478e+10 -4.139e+10 2.377e+10 -4.223e+10 2.272e+10 -4.287e+10 2.164e+10 -4.331e+10 2.052e+10 -4.355e+10 1.938e+10 -4.359e+10 1.823e+10 -4.344e+10 1.707e+10 -4.311e+10 1.593e+10 -4.260e+10 1.479e+10 -4.192e+10 1.368e+10 -4.109e+10 1.259e+10 -4.011e+10 1.153e+10 -3.901e+10 1.051e+10 -3.779e+10 9.530e+09 -3.647e+10 8.595e+09 -3.506e+10 7.704e+09 -3.358e+10 6.861e+09 -3.204e+10 6.068e+09 -3.045e+10 5.322e+09 -2.883e+10 4.627e+09 -2.719e+10 3.982e+09 -2.554e+10 3.385e+09 -2.389e+10 2.837e+09 -2.224e+10 2.335e+09 -2.062e+10 1.879e+09 -1.903e+10 1.468e+09 -1.747e+10 1.099e+09 -1.595e+10 7.723e+08 -1.448e+10 4.855e+08 -1.307e+10 2.369e+08 -1.172e+10 2.467e+07 -1.043e+10 -1.530e+08 -9.219e+09 -2.981e+08 -8.080e+09 -4.130e+08 -7.017e+09 -4.998e+08 -6.034e+09 -5.609e+08 -5.132e+09 -5.987e+08 -4.312e+09 -6.160e+08 -3.573e+09 -6.151e+08 -2.915e+09 -5.989e+08 -2.336e+09 -5.699e+08 -1.834e+09 -5.308e+08 -1.405e+09 -4.843e+08 -1.045e+09 -4.327e+08 -7.508e+08 -3.787e+08 -5.159e+08 -3.248e+08 -3.346e+08 -2.735e+08 -2.004e+08 -2.277e+08 -1.050e+08 -1.904e+08 -3.794e+07 -1.646e+08 1.319e+07 -1.521e+08 6.115e+07 -1.513e+08 1.151e+08 -1.582e+08 1.787e+08 -1.678e+08 2.521e+08 -1.766e+08 3.336e+08 -1.823e+08 4.209e+08 -1.835e+08 5.120e+08 -1.795e+08 6.052e+08 -1.698e+08 6.991e+08 -1.543e+08 7.931e+08 -1.326e+08 8.870e+08 -1.045e+08 9.807e+08 -6.965e+07 1.075e+09 -2.770e+07 1.170e+09 2.203e+07 1.268e+09 8.022e+07 1.371e+09 1.479e+08 1.479e+09 2.268e+08 1.595e+09 3.180e+08 1.722e+09 4.236e+08 1.861e+09 5.462e+08 2.015e+09 6.880e+08 2.186e+09 8.522e+08 2.377e+09 1.042e+09 2.591e+09 1.262e+09 2.830e+09 1.515e+09 3.098e+09 1.805e+09 3.395e+09 2.137e+09 3.726e+09 2.515e+09 4.093e+09 2.944e+09 4.498e+09 3.426e+09 4.944e+09 3.967e+09 5.433e+09 4.571e+09 5.967e+09 5.239e+09 6.550e+09 5.975e+09 7.183e+09 6.783e+09 7.868e+09 7.662e+09 8.608e+09 8.615e+09 9.406e+09 9.644e+09 1.026e+10 1.075e+10 1.118e+10 1.192e+10 1.216e+10 1.318e+10 1.320e+10 1.450e+10 1.431e+10 1.589e+10 1.549e+10 1.736e+10 1.673e+10 1.889e+10 1.805e+10 2.048e+10 1.943e+10 2.213e+10 2.088e+10 2.384e+10 2.240e+10 2.560e+10 2.398e+10 2.741e+10 2.562e+10 2.926e+10 2.732e+10 3.115e+10 2.907e+10 3.306e+10 3.086e+10 3.500e+10 3.269e+10 3.695e+10 3.454e+10 3.890e+10 3.640e+10 4.084e+10 3.825e+10 4.276e+10 4.009e+10 4.465e+10 4.189e+10 4.649e+10 4.364e+10 4.826e+10 4.532e+10 4.996e+10 4.691e+10 5.157e+10 4.839e+10 5.307e+10 4.975e+10 5.445e+10 5.095e+10 5.568e+10 5.199e+10 5.675e+10 5.286e+10 5.766e+10 5.352e+10 5.838e+10 5.398e+10 5.890e+10 5.422e+10 5.922e+10 5.423e+10 5.932e+10 5.401e+10 5.920e+10 5.357e+10 5.887e+10 5.289e+10 5.831e+10 5.199e+10 5.753e+10 5.087e+10 5.654e+10 4.955e+10 5.535e+10 4.804e+10 5.397e+10 4.635e+10 5.241e+10 4.451e+10 5.070e+10 4.253e+10 4.884e+10 4.044e+10 4.687e+10 3.826e+10 4.479e+10 3.601e+10 4.264e+10 3.371e+10 4.043e+10 3.139e+10 3.819e+10 2.906e+10 3.593e+10 2.675e+10 3.368e+10 2.448e+10 3.145e+10 2.227e+10 2.927e+10 2.012e+10 2.714e+10 1.806e+10 2.507e+10 1.609e+10 2.309e+10 1.422e+10 2.118e+10 1.247e+10 1.938e+10 1.084e+10 1.767e+10 9.326e+09 1.606e+10 7.941e+09 1.456e+10 6.683e+09 1.317e+10 5.549e+09 1.188e+10 4.536e+09 1.069e+10 3.642e+09 9.604e+09 2.859e+09 8.613e+09 2.180e+09 7.712e+09 1.600e+09 6.898e+09 1.108e+09 6.162e+09 6.978e+08 5.499e+09 3.614e+08 4.902e+09 9.099e+07 4.362e+09 -1.199e+08 3.874e+09 -2.772e+08 3.431e+09 -3.862e+08 3.026e+09 -4.519e+08 2.654e+09 -4.785e+08 2.311e+09 -4.708e+08 1.993e+09 -4.335e+08 1.698e+09 -3.723e+08 1.426e+09 -2.936e+08 1.177e+09 -2.045e+08 9.518e+08 -1.125e+08 7.529e+08 -2.427e+07 5.837e+08 5.689e+07 4.484e+08 1.354e+08 3.509e+08 2.283e+08 2.901e+08 3.628e+08 2.560e+08 5.670e+08 2.310e+08 8.626e+08 1.982e+08 1.264e+09 1.460e+08 1.781e+09 6.795e+07 2.421e+09 -3.957e+07 3.186e+09 -1.781e+08 4.078e+09 -3.481e+08 5.092e+09 -5.497e+08 6.223e+09 -7.826e+08 7.456e+09 -1.046e+09 8.780e+09 -1.339e+09 1.017e+10 -1.660e+09 1.162e+10 -2.009e+09 1.309e+10 -2.385e+09 1.455e+10 -2.785e+09 1.598e+10 -3.207e+09 1.735e+10 -3.649e+09 1.863e+10 -4.108e+09 1.978e+10 -4.579e+09 2.079e+10 -5.058e+09 2.161e+10 -5.538e+09 2.223e+10 -6.011e+09 2.263e+10 -6.471e+09 2.278e+10 -6.908e+09 2.268e+10 -7.312e+09 2.232e+10 -7.673e+09 2.170e+10 -7.979e+09 2.083e+10 -8.220e+09 1.971e+10 -8.386e+09 1.837e+10 -8.467e+09 1.683e+10 -8.456e+09 1.513e+10 -8.347e+09 1.330e+10 -8.138e+09 1.140e+10 -7.831e+09 9.475e+09 -7.433e+09 7.585e+09 -6.956e+09 5.786e+09 -6.424e+09 4.127e+09 -5.868e+09 2.645e+09 -5.336e+09 1.345e+09 -4.891e+09 1.696e+08 -4.604e+09 -1.007e+09 -4.534e+09 -2.374e+09 -4.699e+09 -4.139e+09 -5.068e+09 -6.478e+09 -5.574e+09 -9.516e+09 -6.145e+09 -1.334e+10 -6.723e+09 -1.800e+10 -7.262e+09 -2.351e+10 -7.735e+09 -2.987e+10 -8.125e+09 -3.706e+10 -8.431e+09 -4.502e+10 -8.661e+09 -5.369e+10 -8.836e+09 -6.296e+10 -8.988e+09 -7.271e+10 -9.161e+09 -8.281e+10 -9.407e+09 -9.309e+10 -9.789e+09 -1.034e+11 -1.038e+10 -1.135e+11 -1.125e+10 -1.232e+11 -1.249e+10 -1.324e+11 -1.418e+10 -1.408e+11 -1.639e+10 -1.483e+11 -1.922e+10 -1.546e+11 -2.273e+10 -1.597e+11 -2.700e+10 -1.634e+11 -3.207e+10 -1.657e+11 -3.802e+10 -1.665e+11 -4.489e+10 -1.659e+11 -5.276e+10 -1.641e+11 -6.170e+10 -1.610e+11 -7.185e+10 -1.570e+11 -8.343e+10 -1.523e+11 -9.674e+10 -1.470e+11 -1.123e+11 -1.414e+11 -1.307e+11 -1.355e+11 -1.531e+11 -1.292e+11 -1.805e+11 -1.221e+11 -2.146e+11 -1.136e+11 -2.572e+11 -1.029e+11 -3.103e+11 -8.879e+10 -3.763e+11 -6.996e+10 -4.576e+11 -4.491e+10 -5.573e+11 -1.208e+10 -6.783e+11 3.024e+10 -8.240e+11 8.387e+10 -9.982e+11 1.505e+11 -1.205e+12 2.321e+11 -1.448e+12 3.304e+11 -1.732e+12 4.471e+11 -2.063e+12 5.841e+11 -2.445e+12 7.431e+11 -2.885e+12 9.255e+11 -3.388e+12 1.133e+12 -3.961e+12 1.366e+12 -4.611e+12 1.627e+12 -5.344e+12 1.916e+12 -6.167e+12 2.233e+12 -7.090e+12 2.579e+12 -8.118e+12 2.953e+12 -9.260e+12 3.356e+12 -1.052e+13 3.785e+12 -1.192e+13 4.240e+12 -1.345e+13 4.718e+12 -1.512e+13 5.217e+12 -1.695e+13 5.734e+12 -1.894e+13 6.266e+12 -2.109e+13 6.807e+12 -2.342e+13 7.353e+12 -2.593e+13 7.900e+12 -2.863e+13 8.441e+12 -3.152e+13 8.968e+12 -3.461e+13 9.477e+12 -3.790e+13 9.957e+12 -4.139e+13 1.040e+13 -4.509e+13 1.080e+13 -4.901e+13 1.115e+13 -5.314e+13 1.143e+13 -5.748e+13 1.164e+13 -6.204e+13 1.177e+13 -6.681e+13 1.180e+13 -7.179e+13 1.172e+13 -7.698e+13 1.194e+13 -8.257e+13 1.188e+13 -8.836e+13 1.147e+13 -9.420e+13 1.090e+13 -1.002e+14 1.017e+13 -1.065e+14 9.264e+12 -1.129e+14 8.171e+12 -1.195e+14 6.877e+12 -1.262e+14 5.370e+12 -1.331e+14 3.641e+12 -1.401e+14 1.677e+12 -1.473e+14 -5.346e+11 -1.546e+14 -3.000e+12 -1.620e+14 -5.732e+12 -1.694e+14 -8.742e+12 -1.769e+14 -1.203e+13 -1.845e+14 -1.561e+13 -1.921e+14 -1.950e+13 -1.997e+14 -2.368e+13 -2.074e+14 -2.818e+13 -2.149e+14 -3.299e+13 -2.225e+14 -3.811e+13 -2.299e+14 -4.355e+13 -2.372e+14 -4.930e+13 -2.445e+14 -5.537e+13 -2.515e+14 -6.175e+13 -2.584e+14 -6.844e+13 -2.651e+14 -7.542e+13 -2.716e+14 -8.269e+13 -2.779e+14 -9.025e+13 -2.839e+14 -9.808e+13 -2.896e+14 -1.062e+14 -2.949e+14 -1.145e+14 -3.000e+14 -1.231e+14 -3.047e+14 -1.318e+14 -3.091e+14 -1.408e+14 -3.130e+14 -1.500e+14 -3.166e+14 -1.593e+14 -3.198e+14 -1.687e+14 -3.225e+14 -1.783e+14 -3.248e+14 -1.879e+14 -3.267e+14 -1.977e+14 -3.281e+14 -2.075e+14 -3.292e+14 -2.173e+14 -3.298e+14 -2.272e+14 -3.299e+14 -2.370e+14 -3.295e+14 -2.467e+14 -3.287e+14 -2.564e+14 -3.275e+14 -2.660e+14 -3.258e+14 -2.754e+14 -3.236e+14 -2.847e+14 -3.210e+14 -2.938e+14 -3.179e+14 -3.027e+14 -3.145e+14 -3.114e+14 -3.106e+14 -3.198e+14 -3.063e+14 -3.279e+14 -3.017e+14 -3.357e+14 -2.966e+14 -3.432e+14 -2.912e+14 -3.503e+14 -2.855e+14 -3.571e+14 -2.794e+14 -3.634e+14 -2.730e+14 -3.694e+14 -2.663e+14 -3.749e+14 -2.594e+14 -3.800e+14 -2.522e+14 -3.846e+14 -2.447e+14 -3.887e+14 -2.371e+14 -3.923e+14 -2.292e+14 -3.954e+14 -2.212e+14 -3.979e+14 -2.130e+14 -4.000e+14 -2.047e+14 -4.015e+14 -1.963e+14 -4.024e+14 -1.878e+14 -4.028e+14 -1.793e+14 -4.027e+14 -1.707e+14 -4.019e+14 -1.621e+14 -4.007e+14 -1.535e+14 -3.988e+14 -1.450e+14 -3.964e+14 -1.365e+14 -3.935e+14 -1.282e+14 -3.901e+14 -1.199e+14 -3.861e+14 -1.118e+14 -3.817e+14 -1.039e+14 -3.768e+14 -9.612e+13 -3.714e+14 -8.856e+13 -3.655e+14 -8.122e+13 -3.592e+14 -7.409e+13 -3.525e+14 -6.720e+13 -3.454e+14 -6.056e+13 -3.379e+14 -5.418e+13 -3.301e+14 -4.808e+13 -3.220e+14 -4.227e+13 -3.136e+14 -3.675e+13 -3.049e+14 -3.152e+13 -2.959e+14 -2.661e+13 -2.868e+14 -2.199e+13 -2.775e+14 -1.769e+13 -2.680e+14 -1.370e+13 -2.585e+14 -1.001e+13 -2.488e+14 -6.625e+12 -2.391e+14 -3.541e+12 -2.294e+14 -7.472e+11 -2.196e+14 1.762e+12 -2.100e+14 3.993e+12 -2.003e+14 5.960e+12 -1.908e+14 7.671e+12 -1.814e+14 9.138e+12 -1.721e+14 1.037e+13 -1.629e+14 1.139e+13 -1.540e+14 1.221e+13 -1.452e+14 1.283e+13 -1.367e+14 1.328e+13 -1.284e+14 1.356e+13 -1.204e+14 1.370e+13 -1.126e+14 1.370e+13 -1.051e+14 1.359e+13 -9.784e+13 1.337e+13 -9.090e+13 1.305e+13 -8.426e+13 1.266e+13 -7.792e+13 1.220e+13 -7.188e+13 1.168e+13 -6.614e+13 1.112e+13 -6.070e+13 1.053e+13 -5.556e+13 9.919e+12 -5.072e+13 9.290e+12 -4.618e+13 8.651e+12 -4.192e+13 8.009e+12 -3.795e+13 7.372e+12 -3.425e+13 6.745e+12 -3.081e+13 6.135e+12 -2.764e+13 5.544e+12 -2.470e+13 4.978e+12 -2.201e+13 4.440e+12 -1.954e+13 3.931e+12 -1.728e+13 3.454e+12 -1.523e+13 3.011e+12 -1.337e+13 2.601e+12 -1.169e+13 2.226e+12 -1.017e+13 1.884e+12 -8.818e+12 1.577e+12 -7.607e+12 1.301e+12 -6.532e+12 1.058e+12 -5.581e+12 8.437e+11 -4.743e+12 6.580e+11 -4.010e+12 4.986e+11 -3.372e+12 3.636e+11 -2.818e+12 2.507e+11 -2.342e+12 1.579e+11 -1.934e+12 8.316e+10 -1.587e+12 2.414e+10 -1.294e+12 -2.111e+10 -1.049e+12 -5.458e+10 -8.443e+11 -7.820e+10 -6.758e+11 -9.369e+10 -5.378e+11 -1.026e+11 -4.258e+11 -1.065e+11 -3.356e+11 -1.066e+11 -2.637e+11 -1.039e+11 -2.066e+11 -9.937e+10 -1.617e+11 -9.367e+10 -1.265e+11 -8.731e+10 -9.905e+10 -8.063e+10 -7.764e+10 -7.383e+10 -6.098e+10 -6.699e+10 -4.798e+10 -6.014e+10 -3.788e+10 -5.327e+10 -3.007e+10 -4.642e+10 -2.405e+10 -3.961e+10 -1.947e+10 -3.294e+10 -1.602e+10 -2.653e+10 -1.345e+10 -2.054e+10 -1.158e+10 -1.515e+10 -1.028e+10 -1.052e+10 -9.559e+09 -6.727e+09 -9.574e+09 -3.646e+09 -1.059e+10 -8.630e+08 -1.283e+10 2.288e+09 -1.643e+10 6.484e+09 -2.138e+10 1.222e+10 -2.770e+10 1.980e+10 -3.538e+10 2.936e+10 -4.439e+10 4.096e+10 -5.471e+10 5.459e+10 -6.629e+10 7.015e+10 -7.903e+10 8.751e+10 -9.286e+10 1.065e+11 -1.076e+11 1.269e+11 -1.232e+11 1.485e+11 -1.393e+11 1.711e+11 -1.559e+11 1.942e+11 -1.727e+11 2.177e+11 -1.895e+11 2.412e+11 -2.061e+11 2.644e+11 -2.223e+11 2.870e+11 -2.379e+11 3.087e+11 -2.527e+11 3.292e+11 -2.665e+11 3.482e+11 -2.791e+11 3.654e+11 -2.904e+11 3.808e+11 -3.003e+11 3.940e+11 -3.086e+11 4.050e+11 -3.152e+11 4.135e+11 -3.202e+11 4.196e+11 -3.234e+11 4.232e+11 -3.248e+11 4.242e+11 -3.245e+11 4.228e+11 -3.224e+11 4.190e+11 -3.186e+11 4.128e+11 -3.131e+11 4.044e+11 -3.062e+11 3.940e+11 -2.978e+11 3.817e+11 -2.881e+11 3.677e+11 -2.772e+11 3.523e+11 -2.653e+11 3.357e+11 -2.525e+11 3.181e+11 -2.391e+11 2.997e+11 -2.250e+11 2.808e+11 -2.107e+11 2.616e+11 -1.960e+11 2.423e+11 -1.813e+11 2.231e+11 -1.667e+11 2.043e+11 -1.524e+11 1.859e+11 -1.383e+11 1.681e+11 -1.247e+11 1.511e+11 -1.117e+11 1.350e+11 -9.931e+10 1.198e+11 -8.763e+10 1.056e+11 -7.672e+10 9.252e+10 -6.660e+10 8.049e+10 -5.731e+10 6.956e+10 -4.886e+10 5.971e+10 -4.124e+10 5.089e+10 -3.444e+10 4.310e+10 -2.843e+10 3.627e+10 -2.318e+10 3.033e+10 -1.865e+10 2.524e+10 -1.479e+10 2.091e+10 -1.154e+10 1.727e+10 -8.838e+09 1.425e+10 -6.632e+09 1.178e+10 -4.853e+09 9.792e+09 -3.443e+09 8.226e+09 -2.338e+09 7.029e+09 -1.474e+09 6.149e+09 -7.945e+08 5.547e+09 -2.445e+08 5.185e+09 2.206e+08 5.034e+09 6.335e+08 5.072e+09 1.016e+09 5.280e+09 1.381e+09 5.651e+09 1.730e+09 6.182e+09 2.059e+09 6.878e+09 2.364e+09 7.747e+09 2.633e+09 8.803e+09 2.855e+09 1.006e+10 3.017e+09 1.154e+10 3.102e+09 1.325e+10 3.092e+09 1.523e+10 2.969e+09 1.747e+10 2.711e+09 2.000e+10 2.296e+09 2.282e+10 1.701e+09 2.594e+10 9.015e+08 2.937e+10 -1.242e+08 3.309e+10 -1.400e+09 3.710e+10 -2.945e+09 4.138e+10 -4.778e+09 4.589e+10 -6.915e+09 5.062e+10 -9.369e+09 5.552e+10 -1.214e+10 6.055e+10 -1.525e+10 6.566e+10 -1.868e+10 7.080e+10 -2.242e+10 7.590e+10 -2.648e+10 8.092e+10 -3.083e+10 8.579e+10 -3.545e+10 9.045e+10 -4.032e+10 9.485e+10 -4.540e+10 9.892e+10 -5.067e+10 1.026e+11 -5.607e+10 1.059e+11 -6.159e+10 1.087e+11 -6.716e+10 1.109e+11 -7.274e+10 1.127e+11 -7.830e+10 1.139e+11 -8.379e+10 1.145e+11 -8.917e+10 1.145e+11 -9.439e+10 1.139e+11 -9.942e+10 1.128e+11 -1.042e+11 1.110e+11 -1.087e+11 1.087e+11 -1.130e+11 1.058e+11 -1.169e+11 1.024e+11 -1.205e+11 9.855e+10 -1.237e+11 9.424e+10 -1.265e+11 8.953e+10 -1.290e+11 8.446e+10 -1.310e+11 7.906e+10 -1.327e+11 7.339e+10 -1.340e+11 6.748e+10 -1.349e+11 6.138e+10 -1.355e+11 5.513e+10 -1.357e+11 4.877e+10 0.005 -57.381 -55.860 -54.339 -52.818 -51.298 -49.777 -48.257 -46.747 -45.272 -43.843 -42.465 -41.143 -39.875 -38.661 -37.498 -36.386 -35.323 -34.307 -33.335 -32.407 -31.521 -30.675 -29.869 -29.100 -28.369 -27.673 -27.012 -26.385 -25.792 -25.230 -24.701 -24.203 -23.735 -23.297 -22.889 -22.509 -22.159 -21.836 -21.542 -21.276 -21.037 -20.825 -20.640 -20.483 -20.353 -20.250 -20.173 -20.123 -20.100 -20.104 -20.134 -20.189 -20.271 -20.381 -20.518 -20.683 -20.876 -21.097 -21.347 -21.626 -21.934 -22.273 -22.642 -23.042 -23.473 -23.937 -24.433 -24.964 -25.529 -26.130 -26.767 -27.441 -28.155 -28.909 -29.705 -30.544 -31.428 -32.360 -33.341 -34.374 -35.461 -36.605 -37.807 -39.070 -40.391 -41.763 -43.172 -44.591 -45.973 -47.248 -48.339 -49.178 -49.752 -50.110 -50.347 -50.570 -50.881 -51.374 -52.145 -53.299 -54.881 -56.406 -56.193 -53.472 -49.794 -46.385 -43.415 -40.801 -38.461 -36.332 -34.370 -32.547 -30.839 -29.229 -27.707 -26.262 -24.887 -23.575 -22.321 -21.122 -19.973 -18.871 -17.816 -16.803 -15.830 -14.897 -14.000 -13.140 -12.313 -11.520 -10.759 -10.029 -9.330 -8.660 -8.018 -7.405 -6.819 -6.260 -5.728 -5.221 -4.740 -4.284 -3.852 -3.445 -3.062 -2.703 -2.367 -2.055 -1.767 -1.501 -1.259 -1.039 -0.841 -0.666 -0.513 -0.385 -0.279 -0.197 -0.139 -0.105 -0.095 -0.111 -0.152 -0.218 -0.311 -0.431 -0.578 -0.753 -0.957 -1.192 -1.457 -1.755 -2.086 -2.453 -2.857 -3.299 -3.783 -4.310 -4.884 -5.507 -6.185 -6.920 -7.719 -8.588 -9.533 -10.565 -11.694 -12.933 -14.300 -15.816 -17.509 -19.418 -21.595 -24.116 -27.094 -30.712 -35.293 -41.467 -50.652 -61.195 -52.811 -43.490 -36.854 -31.945 -28.100 -24.960 -22.318 -20.047 -18.063 -16.307 -14.740 -13.329 -12.051 -10.888 -9.826 -8.853 -7.960 -7.139 -6.382 -5.686 -5.044 -4.453 -3.909 -3.410 -2.952 -2.534 -2.154 -1.808 -1.497 -1.218 -0.971 -0.754 -0.566 -0.406 -0.273 -0.167 -0.088 -0.034 -0.005 0.000 -0.020 -0.064 -0.131 -0.222 -0.336 -0.472 -0.632 -0.814 -1.018 -1.244 -1.492 -1.761 -2.052 -2.367 -2.703 -3.063 -3.446 -3.852 -4.281 -4.734 -5.210 -5.711 -6.237 -6.787 -7.362 -7.964 -8.591 -9.245 -9.927 -10.636 -11.374 -12.141 -12.938 -13.766 -14.626 -15.519 -16.446 -17.408 -18.407 -19.444 -20.522 -21.641 -22.804 -24.014 -25.273 -26.583 -27.948 -29.372 -30.857 -32.406 -34.019 -35.692 -37.414 -39.158 -40.871 -42.469 -43.837 -44.864 -45.503 -45.798 -45.851 -45.769 -45.624 -45.450 -45.251 -45.009 -44.697 -44.281 -43.736 -43.052 -42.234 -41.305 -40.296 -39.238 -38.157 -37.076 -36.010 -34.969 -33.959 -32.987 -32.052 -31.157 -30.301 -29.484 -28.706 -27.965 -27.262 -26.595 -25.963 -25.367 -24.804 -24.275 -23.778 -23.313 -22.879 -22.476 -22.104 -21.761 -21.447 -21.162 -20.906 -20.677 -20.477 -20.304 -20.158 -20.039 -19.947 -19.881 -19.842 -19.829 -19.843 -19.880 -19.944 -20.034 -20.150 -20.292 -20.461 -20.656 -20.878 -21.127 -21.404 -21.707 -22.039 -22.398 -22.785 -23.201 -23.646 -24.120 -24.625 -25.159 -25.725 -26.323 -26.953 -27.616 -28.313 -29.044 -29.811 -30.614 -31.455 -32.334 -33.252 -34.210 -35.210 -36.252 -37.337 -38.467 -39.642 -40.863 -42.131 -43.445 -44.806 -46.212 -47.663 -49.155 -50.684 -52.244 -53.806 -55.368 -56.930 -58.492 -60.054 0 1 1.0 1 N5 HH 34.25 38.05 0.05 1.247e+10 -1.461e+09 1.242e+10 -1.122e+09 1.232e+10 -7.786e+08 1.216e+10 -4.345e+08 1.196e+10 -9.384e+07 1.170e+10 2.385e+08 1.140e+10 5.588e+08 1.105e+10 8.630e+08 1.066e+10 1.147e+09 1.023e+10 1.407e+09 9.767e+09 1.640e+09 9.265e+09 1.843e+09 8.732e+09 2.013e+09 8.173e+09 2.147e+09 7.591e+09 2.245e+09 6.992e+09 2.303e+09 6.378e+09 2.323e+09 5.758e+09 2.303e+09 5.136e+09 2.245e+09 4.517e+09 2.151e+09 3.909e+09 2.023e+09 3.319e+09 1.863e+09 2.752e+09 1.677e+09 2.217e+09 1.470e+09 1.721e+09 1.249e+09 1.273e+09 1.019e+09 8.797e+08 7.908e+08 5.502e+08 5.732e+08 2.921e+08 3.770e+08 1.124e+08 2.152e+08 9.813e+06 1.034e+08 -5.922e+07 4.746e+07 -1.813e+08 -8.643e+05 -4.108e+08 -1.065e+08 -7.628e+08 -3.075e+08 -1.243e+09 -6.239e+08 -1.858e+09 -1.072e+09 -2.612e+09 -1.669e+09 -3.509e+09 -2.430e+09 -4.553e+09 -3.369e+09 -5.746e+09 -4.501e+09 -7.089e+09 -5.838e+09 -8.580e+09 -7.390e+09 -1.022e+10 -9.168e+09 -1.200e+10 -1.118e+10 -1.392e+10 -1.343e+10 -1.598e+10 -1.592e+10 -1.815e+10 -1.865e+10 -2.044e+10 -2.162e+10 -2.283e+10 -2.481e+10 -2.532e+10 -2.823e+10 -2.787e+10 -3.185e+10 -3.049e+10 -3.565e+10 -3.314e+10 -3.963e+10 -3.582e+10 -4.375e+10 -3.850e+10 -4.798e+10 -4.116e+10 -5.229e+10 -4.379e+10 -5.665e+10 -4.635e+10 -6.103e+10 -4.884e+10 -6.539e+10 -5.122e+10 -6.968e+10 -5.349e+10 -7.387e+10 -5.561e+10 -7.792e+10 -5.757e+10 -8.178e+10 -5.935e+10 -8.542e+10 -6.093e+10 -8.880e+10 -6.230e+10 -9.187e+10 -6.344e+10 -9.461e+10 -6.434e+10 -9.698e+10 -6.498e+10 -9.895e+10 -6.537e+10 -1.005e+11 -6.550e+10 -1.016e+11 -6.537e+10 -1.023e+11 -6.497e+10 -1.025e+11 -6.431e+10 -1.023e+11 -6.339e+10 -1.016e+11 -6.222e+10 -1.004e+11 -6.082e+10 -9.878e+10 -5.918e+10 -9.674e+10 -5.734e+10 -9.430e+10 -5.530e+10 -9.147e+10 -5.308e+10 -8.830e+10 -5.071e+10 -8.480e+10 -4.820e+10 -8.103e+10 -4.558e+10 -7.700e+10 -4.287e+10 -7.278e+10 -4.010e+10 -6.839e+10 -3.728e+10 -6.389e+10 -3.445e+10 -5.931e+10 -3.162e+10 -5.470e+10 -2.883e+10 -5.010e+10 -2.609e+10 -4.556e+10 -2.342e+10 -4.110e+10 -2.084e+10 -3.677e+10 -1.838e+10 -3.260e+10 -1.604e+10 -2.862e+10 -1.384e+10 -2.485e+10 -1.180e+10 -2.133e+10 -9.914e+09 -1.807e+10 -8.198e+09 -1.508e+10 -6.655e+09 -1.238e+10 -5.285e+09 -9.962e+09 -4.089e+09 -7.837e+09 -3.064e+09 -5.998e+09 -2.204e+09 -4.436e+09 -1.503e+09 -3.142e+09 -9.508e+08 -2.102e+09 -5.376e+08 -1.299e+09 -2.511e+08 -7.127e+08 -7.758e+07 -3.221e+08 1.939e+06 -1.038e+08 4.155e+07 -1.113e+07 1.182e+08 6.917e+07 2.559e+08 2.192e+08 4.372e+08 4.393e+08 6.465e+08 7.080e+08 8.707e+08 1.004e+09 1.097e+09 1.307e+09 1.315e+09 1.599e+09 1.514e+09 1.866e+09 1.687e+09 2.094e+09 1.827e+09 2.274e+09 1.930e+09 2.399e+09 1.991e+09 2.465e+09 2.010e+09 2.472e+09 1.986e+09 2.420e+09 1.923e+09 2.313e+09 1.821e+09 2.157e+09 1.687e+09 1.961e+09 1.525e+09 1.733e+09 1.342e+09 1.483e+09 1.146e+09 1.224e+09 9.434e+08 9.646e+08 7.432e+08 7.180e+08 5.531e+08 4.943e+08 3.813e+08 3.034e+08 2.357e+08 1.542e+08 1.238e+08 5.283e+07 5.351e+07 -2.893e+06 1.954e+07 -4.482e+07 -1.386e+07 -1.255e+08 -8.529e+07 -2.703e+08 -2.066e+08 -4.792e+08 -3.801e+08 -7.493e+08 -6.054e+08 -1.076e+09 -8.799e+08 -1.452e+09 -1.200e+09 -1.871e+09 -1.562e+09 -2.324e+09 -1.959e+09 -2.801e+09 -2.385e+09 -3.292e+09 -2.831e+09 -3.785e+09 -3.289e+09 -4.270e+09 -3.751e+09 -4.735e+09 -4.208e+09 -5.171e+09 -4.650e+09 -5.566e+09 -5.070e+09 -5.913e+09 -5.459e+09 -6.204e+09 -5.808e+09 -6.432e+09 -6.113e+09 -6.592e+09 -6.366e+09 -6.681e+09 -6.564e+09 -6.698e+09 -6.702e+09 -6.644e+09 -6.779e+09 -6.519e+09 -6.794e+09 -6.329e+09 -6.747e+09 -6.077e+09 -6.640e+09 -5.771e+09 -6.477e+09 -5.418e+09 -6.261e+09 -5.027e+09 -5.998e+09 -4.607e+09 -5.695e+09 -4.168e+09 -5.357e+09 -3.718e+09 -4.992e+09 -3.268e+09 -4.607e+09 -2.827e+09 -4.212e+09 -2.402e+09 -3.811e+09 -2.000e+09 -3.414e+09 -1.628e+09 -3.026e+09 -1.289e+09 -2.653e+09 -9.879e+08 -2.301e+09 -7.255e+08 -1.974e+09 -5.021e+08 -1.673e+09 -3.170e+08 -1.402e+09 -1.681e+08 -1.161e+09 -5.251e+07 -9.502e+08 3.324e+07 -7.677e+08 9.297e+07 -6.118e+08 1.307e+08 -4.800e+08 1.501e+08 -3.698e+08 1.545e+08 -2.781e+08 1.467e+08 -2.027e+08 1.293e+08 -1.415e+08 1.049e+08 -9.297e+07 7.627e+07 -5.590e+07 4.692e+07 -2.945e+07 2.139e+07 -1.356e+07 4.018e+06 -8.486e+06 -1.026e+07 -1.016e+07 -4.178e+07 -1.333e+07 -1.110e+08 -1.964e+07 -2.319e+08 -3.410e+07 -4.185e+08 -6.329e+07 -6.866e+08 -1.150e+08 -1.052e+09 -1.982e+08 -1.532e+09 -3.229e+08 -2.143e+09 -4.998e+08 -2.902e+09 -7.402e+08 -3.823e+09 -1.056e+09 -4.921e+09 -1.458e+09 -6.207e+09 -1.958e+09 -7.690e+09 -2.567e+09 -9.379e+09 -3.293e+09 -1.127e+10 -4.145e+09 -1.337e+10 -5.128e+09 -1.568e+10 -6.247e+09 -1.817e+10 -7.501e+09 -2.084e+10 -8.890e+09 -2.367e+10 -1.041e+10 -2.663e+10 -1.205e+10 -2.970e+10 -1.380e+10 -3.284e+10 -1.565e+10 -3.602e+10 -1.758e+10 -3.920e+10 -1.957e+10 -4.234e+10 -2.159e+10 -4.540e+10 -2.362e+10 -4.832e+10 -2.564e+10 -5.105e+10 -2.761e+10 -5.357e+10 -2.949e+10 -5.580e+10 -3.127e+10 -5.773e+10 -3.291e+10 -5.930e+10 -3.438e+10 -6.048e+10 -3.565e+10 -6.125e+10 -3.670e+10 -6.159e+10 -3.750e+10 -6.148e+10 -3.804e+10 -6.091e+10 -3.830e+10 -5.988e+10 -3.826e+10 -5.841e+10 -3.794e+10 -5.652e+10 -3.731e+10 -5.423e+10 -3.640e+10 -5.157e+10 -3.522e+10 -4.859e+10 -3.377e+10 -4.534e+10 -3.209e+10 -4.186e+10 -3.020e+10 -3.823e+10 -2.814e+10 -3.449e+10 -2.593e+10 -3.072e+10 -2.363e+10 -2.696e+10 -2.126e+10 -2.329e+10 -1.887e+10 -1.977e+10 -1.650e+10 -1.644e+10 -1.419e+10 -1.335e+10 -1.199e+10 -1.054e+10 -9.917e+09 -8.048e+09 -8.014e+09 -5.890e+09 -6.305e+09 -4.079e+09 -4.809e+09 -2.614e+09 -3.545e+09 -1.485e+09 -2.519e+09 -6.641e+08 -1.734e+09 -1.069e+08 -1.181e+09 2.562e+08 -8.265e+08 5.236e+08 -5.994e+08 7.969e+08 -4.161e+08 1.133e+09 -2.179e+08 1.529e+09 1.389e+07 1.948e+09 2.697e+08 2.341e+09 5.267e+08 2.662e+09 7.579e+08 2.870e+09 9.366e+08 2.937e+09 1.041e+09 2.846e+09 1.057e+09 2.596e+09 9.804e+08 2.203e+09 8.189e+08 1.702e+09 5.945e+08 1.147e+09 3.457e+08 6.142e+08 1.281e+08 2.009e+08 1.688e+07 1.941e+07 -9.996e+07 -2.277e+08 -4.946e+08 -9.651e+08 -1.329e+09 -2.415e+09 -2.751e+09 -4.764e+09 -4.923e+09 -8.214e+09 -8.024e+09 -1.298e+10 -1.224e+10 -1.926e+10 -1.776e+10 -2.726e+10 -2.479e+10 -3.720e+10 -3.351e+10 -4.924e+10 -4.412e+10 -6.356e+10 -5.680e+10 -8.031e+10 -7.169e+10 -9.957e+10 -8.894e+10 -1.214e+11 -1.087e+11 -1.459e+11 -1.309e+11 -1.730e+11 -1.557e+11 -2.027e+11 -1.831e+11 -2.348e+11 -2.129e+11 -2.692e+11 -2.451e+11 -3.055e+11 -2.796e+11 -3.437e+11 -3.160e+11 -3.832e+11 -3.541e+11 -4.238e+11 -3.937e+11 -4.650e+11 -4.281e+11 -5.171e+11 -4.732e+11 -5.550e+11 -5.144e+11 -5.959e+11 -5.552e+11 -6.353e+11 -5.951e+11 -6.727e+11 -6.336e+11 -7.075e+11 -6.699e+11 -7.392e+11 -7.037e+11 -7.671e+11 -7.343e+11 -7.909e+11 -7.611e+11 -8.100e+11 -7.838e+11 -8.241e+11 -8.017e+11 -8.328e+11 -8.145e+11 -8.358e+11 -8.219e+11 -8.330e+11 -8.236e+11 -8.243e+11 -8.195e+11 -8.097e+11 -8.093e+11 -7.893e+11 -7.932e+11 -7.633e+11 -7.713e+11 -7.321e+11 -7.439e+11 -6.960e+11 -7.112e+11 -6.555e+11 -6.737e+11 -6.114e+11 -6.320e+11 -5.641e+11 -5.866e+11 -5.146e+11 -5.384e+11 -4.635e+11 -4.881e+11 -4.117e+11 -4.365e+11 -3.601e+11 -3.846e+11 -3.095e+11 -3.333e+11 -2.608e+11 -2.832e+11 -2.146e+11 -2.355e+11 -1.719e+11 -1.909e+11 -1.331e+11 -1.500e+11 -9.882e+10 -1.136e+11 -6.949e+10 -8.201e+10 -4.532e+10 -5.569e+10 -2.641e+10 -3.484e+10 -1.269e+10 -1.947e+10 -3.796e+09 -9.446e+09 1.049e+09 -4.056e+09 3.667e+09 -1.052e+09 6.995e+09 2.705e+09 1.278e+10 8.412e+09 2.046e+10 1.566e+10 2.897e+10 2.355e+10 3.724e+10 3.107e+10 4.429e+10 3.723e+10 4.924e+10 4.113e+10 5.137e+10 4.211e+10 5.023e+10 3.978e+10 4.568e+10 3.417e+10 3.800e+10 2.588e+10 2.798e+10 1.614e+10 1.702e+10 6.995e+09 7.208e+09 1.191e+09 1.188e+09 -3.630e+09 -3.618e+09 -1.887e+10 -1.849e+10 -5.391e+10 -5.199e+10 -1.171e+11 -1.113e+11 -2.185e+11 -2.048e+11 -3.699e+11 -3.421e+11 -5.853e+11 -5.347e+11 -8.808e+11 -7.951e+11 -1.274e+12 -1.137e+12 -1.786e+12 -1.577e+12 -2.441e+12 -2.133e+12 -3.261e+12 -2.821e+12 -4.277e+12 -3.664e+12 -5.519e+12 -4.683e+12 -7.019e+12 -5.901e+12 -8.812e+12 -7.343e+12 -1.094e+13 -9.035e+12 -1.343e+13 -1.100e+13 -1.634e+13 -1.328e+13 -1.971e+13 -1.588e+13 -2.358e+13 -1.885e+13 -2.800e+13 -2.221e+13 -3.302e+13 -2.599e+13 -3.869e+13 -3.022e+13 -4.505e+13 -3.493e+13 -5.217e+13 -4.016e+13 -6.009e+13 -4.593e+13 -6.887e+13 -5.228e+13 -7.855e+13 -5.923e+13 -8.917e+13 -6.679e+13 -1.008e+14 -7.499e+13 -1.134e+14 -8.384e+13 -1.272e+14 -9.337e+13 -1.420e+14 -1.036e+14 -1.580e+14 -1.145e+14 -1.751e+14 -1.261e+14 -1.934e+14 -1.384e+14 -2.130e+14 -1.514e+14 -2.337e+14 -1.651e+14 -2.557e+14 -1.794e+14 -2.789e+14 -1.944e+14 -3.032e+14 -2.101e+14 -3.288e+14 -2.263e+14 -3.554e+14 -2.431e+14 -3.832e+14 -2.604e+14 -4.121e+14 -2.783e+14 -4.419e+14 -2.965e+14 -4.727e+14 -3.151e+14 -5.044e+14 -3.341e+14 -5.368e+14 -3.533e+14 -5.699e+14 -3.727e+14 -6.037e+14 -3.923e+14 -6.379e+14 -4.118e+14 -6.725e+14 -4.314e+14 -7.073e+14 -4.509e+14 -7.423e+14 -4.701e+14 -7.773e+14 -4.891e+14 -8.121e+14 -5.078e+14 -8.466e+14 -5.261e+14 -8.807e+14 -5.438e+14 -9.143e+14 -5.610e+14 -9.472e+14 -5.775e+14 -9.791e+14 -5.932e+14 -1.010e+15 -6.082e+14 -1.040e+15 -6.222e+14 -1.068e+15 -6.353e+14 -1.096e+15 -6.471e+14 -1.121e+15 -6.578e+14 -1.145e+15 -6.673e+14 -1.167e+15 -6.756e+14 -1.188e+15 -6.828e+14 -1.206e+15 -6.886e+14 -1.222e+15 -6.932e+14 -1.236e+15 -6.965e+14 -1.248e+15 -6.984e+14 -1.257e+15 -6.990e+14 -1.264e+15 -6.983e+14 -1.269e+15 -6.963e+14 -1.271e+15 -6.930e+14 -1.271e+15 -6.883e+14 -1.269e+15 -6.824e+14 -1.264e+15 -6.752e+14 -1.256e+15 -6.669e+14 -1.247e+15 -6.574e+14 -1.235e+15 -6.468e+14 -1.221e+15 -6.351e+14 -1.204e+15 -6.224e+14 -1.186e+15 -6.088e+14 -1.165e+15 -5.943e+14 -1.143e+15 -5.791e+14 -1.119e+15 -5.631e+14 -1.093e+15 -5.465e+14 -1.066e+15 -5.293e+14 -1.037e+15 -5.116e+14 -1.007e+15 -4.935e+14 -9.757e+14 -4.750e+14 -9.436e+14 -4.563e+14 -9.106e+14 -4.375e+14 -8.770e+14 -4.185e+14 -8.427e+14 -3.995e+14 -8.081e+14 -3.805e+14 -7.732e+14 -3.617e+14 -7.381e+14 -3.431e+14 -7.030e+14 -3.246e+14 -6.682e+14 -3.065e+14 -6.336e+14 -2.888e+14 -5.995e+14 -2.715e+14 -5.660e+14 -2.548e+14 -5.331e+14 -2.384e+14 -5.008e+14 -2.226e+14 -4.693e+14 -2.073e+14 -4.386e+14 -1.926e+14 -4.089e+14 -1.785e+14 -3.802e+14 -1.650e+14 -3.525e+14 -1.521e+14 -3.259e+14 -1.398e+14 -3.004e+14 -1.282e+14 -2.761e+14 -1.172e+14 -2.531e+14 -1.068e+14 -2.312e+14 -9.703e+13 -2.105e+14 -8.789e+13 -1.911e+14 -7.937e+13 -1.728e+14 -7.143e+13 -1.558e+14 -6.407e+13 -1.399e+14 -5.727e+13 -1.251e+14 -5.101e+13 -1.115e+14 -4.526e+13 -9.897e+13 -4.000e+13 -8.747e+13 -3.521e+13 -7.696e+13 -3.086e+13 -6.741e+13 -2.693e+13 -5.876e+13 -2.339e+13 -5.095e+13 -2.022e+13 -4.395e+13 -1.740e+13 -3.771e+13 -1.489e+13 -3.215e+13 -1.267e+13 -2.725e+13 -1.071e+13 -2.294e+13 -9.006e+12 -1.918e+13 -7.521e+12 -1.591e+13 -6.237e+12 -1.310e+13 -5.134e+12 -1.068e+13 -4.192e+12 -8.636e+12 -3.393e+12 -6.911e+12 -2.722e+12 -5.469e+12 -2.161e+12 -4.275e+12 -1.697e+12 -3.299e+12 -1.317e+12 -2.509e+12 -1.009e+12 -1.876e+12 -7.616e+11 -1.377e+12 -5.655e+11 -9.901e+11 -4.122e+11 -6.946e+11 -2.941e+11 -4.740e+11 -2.048e+11 -3.128e+11 -1.386e+11 -1.985e+11 -9.072e+10 -1.200e+11 -5.701e+10 -6.833e+10 -3.406e+10 -3.599e+10 -1.909e+10 -1.710e+10 -9.837e+09 -7.023e+09 -4.510e+09 -2.310e+09 -1.738e+09 -5.201e+08 -5.023e+08 -5.053e+07 -8.032e+07 -7.202e+05 3.638e+06 -3.319e+07 3.849e+07 -2.685e+08 1.337e+08 -1.127e+09 2.822e+08 -3.254e+09 3.988e+08 -7.424e+09 3.378e+08 -1.447e+10 -8.176e+07 -2.519e+10 -1.052e+09 -4.030e+10 -2.764e+09 -6.046e+10 -5.392e+09 -8.608e+10 -9.077e+09 -1.175e+11 -1.393e+10 -1.548e+11 -2.004e+10 -1.978e+11 -2.740e+10 -2.463e+11 -3.602e+10 -3.000e+11 -4.586e+10 -3.580e+11 -5.680e+10 -4.196e+11 -6.870e+10 -4.840e+11 -8.143e+10 -5.500e+11 -9.477e+10 -6.167e+11 -1.085e+11 -6.830e+11 -1.225e+11 -7.477e+11 -1.364e+11 -8.098e+11 -1.500e+11 -8.683e+11 -1.633e+11 -9.221e+11 -1.758e+11 -9.703e+11 -1.874e+11 -1.012e+12 -1.979e+11 -1.047e+12 -2.072e+11 -1.074e+12 -2.152e+11 -1.094e+12 -2.216e+11 -1.105e+12 -2.265e+11 -1.108e+12 -2.298e+11 -1.103e+12 -2.315e+11 -1.090e+12 -2.316e+11 -1.070e+12 -2.301e+11 -1.042e+12 -2.271e+11 -1.008e+12 -2.227e+11 -9.678e+11 -2.170e+11 -9.227e+11 -2.100e+11 -8.732e+11 -2.021e+11 -8.203e+11 -1.932e+11 -7.647e+11 -1.835e+11 -7.073e+11 -1.733e+11 -6.491e+11 -1.625e+11 -5.906e+11 -1.515e+11 -5.328e+11 -1.402e+11 -4.763e+11 -1.290e+11 -4.217e+11 -1.178e+11 -3.696e+11 -1.068e+11 -3.204e+11 -9.611e+10 -2.746e+11 -8.580e+10 -2.323e+11 -7.597e+10 -1.939e+11 -6.667e+10 -1.594e+11 -5.794e+10 -1.288e+11 -4.984e+10 -1.021e+11 -4.240e+10 -7.918e+10 -3.562e+10 -5.986e+10 -2.951e+10 -4.392e+10 -2.409e+10 -3.108e+10 -1.933e+10 -2.103e+10 -1.523e+10 -1.344e+10 -1.176e+10 -7.945e+09 -8.923e+09 -4.171e+09 -6.688e+09 -1.720e+09 -5.048e+09 -1.566e+08 -3.969e+09 9.492e+08 -3.363e+09 1.924e+09 -3.065e+09 2.903e+09 -2.891e+09 3.854e+09 -2.710e+09 4.680e+09 -2.469e+09 5.284e+09 -2.157e+09 5.594e+09 -1.786e+09 5.572e+09 -1.379e+09 5.217e+09 -9.653e+08 4.565e+09 -5.732e+08 3.687e+09 -2.316e+08 2.684e+09 3.412e+07 1.682e+09 2.029e+08 8.304e+08 2.639e+08 2.662e+08 2.542e+08 -1.237e+08 3.572e+08 0.005 -61.677 -59.579 -57.481 -55.383 -53.285 -51.216 -49.298 -47.506 -45.824 -44.239 -42.740 -41.321 -39.976 -38.698 -37.483 -36.329 -35.231 -34.186 -33.193 -32.248 -31.349 -30.496 -29.685 -28.916 -28.187 -27.496 -26.843 -26.227 -25.646 -25.100 -24.587 -24.108 -23.661 -23.245 -22.862 -22.509 -22.186 -21.893 -21.630 -21.397 -21.192 -21.017 -20.871 -20.753 -20.664 -20.604 -20.573 -20.571 -20.598 -20.654 -20.740 -20.855 -21.000 -21.176 -21.382 -21.620 -21.889 -22.191 -22.525 -22.893 -23.296 -23.734 -24.209 -24.721 -25.271 -25.861 -26.493 -27.167 -27.886 -28.652 -29.467 -30.333 -31.254 -32.232 -33.272 -34.379 -35.559 -36.818 -38.166 -39.614 -41.179 -42.881 -44.749 -46.828 -49.184 -51.925 -55.228 -59.355 -64.008 -65.159 -62.550 -59.935 -58.164 -57.033 -56.359 -56.043 -56.034 -56.307 -56.833 -57.485 -57.843 -57.141 -55.057 -52.227 -49.300 -46.529 -43.961 -41.585 -39.375 -37.308 -35.366 -33.534 -31.800 -30.153 -28.587 -27.094 -25.670 -24.309 -23.007 -21.762 -20.569 -19.426 -18.330 -17.280 -16.273 -15.307 -14.380 -13.492 -12.641 -11.824 -11.042 -10.294 -9.577 -8.891 -8.236 -7.610 -7.013 -6.444 -5.903 -5.389 -4.901 -4.440 -4.004 -3.594 -3.208 -2.847 -2.511 -2.199 -1.911 -1.647 -1.408 -1.192 -1.000 -0.832 -0.687 -0.567 -0.471 -0.399 -0.352 -0.329 -0.332 -0.360 -0.414 -0.494 -0.602 -0.737 -0.901 -1.094 -1.317 -1.571 -1.858 -2.178 -2.534 -2.926 -3.358 -3.830 -4.346 -4.909 -5.521 -6.187 -6.910 -7.697 -8.554 -9.487 -10.506 -11.621 -12.847 -14.201 -15.703 -17.384 -19.283 -21.456 -23.983 -26.994 -30.712 -35.582 -42.787 -59.158 -53.046 -49.534 -44.969 -38.426 -33.134 -29.009 -25.679 -22.906 -20.539 -18.483 -16.671 -15.058 -13.610 -12.301 -11.112 -10.027 -9.034 -8.123 -7.286 -6.516 -5.806 -5.153 -4.551 -3.998 -3.490 -3.024 -2.598 -2.210 -1.858 -1.541 -1.256 -1.003 -0.781 -0.588 -0.424 -0.288 -0.179 -0.096 -0.039 -0.007 0.000 -0.018 -0.060 -0.125 -0.215 -0.327 -0.464 -0.623 -0.805 -1.010 -1.239 -1.490 -1.764 -2.061 -2.382 -2.727 -3.094 -3.486 -3.902 -4.341 -4.806 -5.295 -5.809 -6.349 -6.915 -7.508 -8.128 -8.775 -9.451 -10.156 -10.890 -11.655 -12.452 -13.280 -14.142 -15.038 -15.969 -16.937 -17.943 -18.989 -20.076 -21.206 -22.382 -23.604 -24.877 -26.202 -27.583 -29.025 -30.530 -32.106 -33.757 -35.493 -37.322 -39.257 -41.313 -43.511 -45.877 -48.447 -51.267 -54.404 -57.946 -62.018 -66.789 -72.426 -77.040 -73.510 -68.122 -63.632 -59.885 -56.689 -53.909 -51.449 -49.240 -47.232 -45.390 -43.685 -42.098 -40.613 -39.219 -37.906 -36.666 -35.493 -34.383 -33.331 -32.334 -31.389 -30.495 -29.647 -28.845 -28.087 -27.371 -26.695 -26.059 -25.461 -24.901 -24.376 -23.886 -23.431 -23.009 -22.619 -22.262 -21.937 -21.642 -21.377 -21.143 -20.938 -20.762 -20.615 -20.496 -20.406 -20.344 -20.309 -20.302 -20.323 -20.371 -20.447 -20.550 -20.681 -20.839 -21.025 -21.239 -21.481 -21.751 -22.049 -22.376 -22.732 -23.117 -23.532 -23.977 -24.453 -24.960 -25.498 -26.070 -26.674 -27.312 -27.985 -28.694 -29.439 -30.221 -31.042 -31.902 -32.803 -33.746 -34.732 -35.762 -36.837 -37.959 -39.129 -40.348 -41.616 -42.934 -44.303 -45.721 -47.188 -48.701 -50.258 -51.852 -53.476 -55.121 -56.770 -58.418 -60.067 -61.716 0 1 1.0 1 N5 HV 34.25 38.05 0.05 9.355e+09 -1.303e+10 9.589e+09 -1.265e+10 9.779e+09 -1.221e+10 9.922e+09 -1.173e+10 1.002e+10 -1.121e+10 1.006e+10 -1.066e+10 1.004e+10 -1.007e+10 9.970e+09 -9.450e+09 9.840e+09 -8.813e+09 9.652e+09 -8.160e+09 9.406e+09 -7.498e+09 9.104e+09 -6.833e+09 8.747e+09 -6.171e+09 8.340e+09 -5.517e+09 7.885e+09 -4.880e+09 7.388e+09 -4.264e+09 6.853e+09 -3.674e+09 6.289e+09 -3.117e+09 5.702e+09 -2.597e+09 5.099e+09 -2.116e+09 4.489e+09 -1.681e+09 3.880e+09 -1.293e+09 3.282e+09 -9.537e+08 2.703e+09 -6.647e+08 2.155e+09 -4.261e+08 1.646e+09 -2.373e+08 1.188e+09 -9.686e+07 7.911e+08 -2.168e+06 4.669e+08 5.075e+07 2.266e+08 6.797e+07 7.771e+07 6.322e+07 -7.926e+06 7.186e+07 -1.227e+08 1.195e+08 -3.463e+08 1.967e+08 -7.122e+08 2.851e+08 -1.236e+09 3.722e+08 -1.929e+09 4.476e+08 -2.805e+09 5.011e+08 -3.876e+09 5.223e+08 -5.149e+09 5.007e+08 -6.637e+09 4.259e+08 -8.347e+09 2.877e+08 -1.028e+10 7.628e+07 -1.245e+10 -2.178e+08 -1.485e+10 -6.032e+08 -1.747e+10 -1.087e+09 -2.033e+10 -1.676e+09 -2.340e+10 -2.376e+09 -2.668e+10 -3.188e+09 -3.015e+10 -4.117e+09 -3.380e+10 -5.162e+09 -3.760e+10 -6.320e+09 -4.153e+10 -7.588e+09 -4.557e+10 -8.963e+09 -4.967e+10 -1.043e+10 -5.381e+10 -1.200e+10 -5.796e+10 -1.364e+10 -6.208e+10 -1.534e+10 -6.613e+10 -1.710e+10 -7.008e+10 -1.889e+10 -7.389e+10 -2.071e+10 -7.752e+10 -2.253e+10 -8.096e+10 -2.435e+10 -8.414e+10 -2.613e+10 -8.706e+10 -2.786e+10 -8.967e+10 -2.954e+10 -9.196e+10 -3.112e+10 -9.390e+10 -3.261e+10 -9.547e+10 -3.398e+10 -9.666e+10 -3.521e+10 -9.745e+10 -3.630e+10 -9.786e+10 -3.722e+10 -9.786e+10 -3.798e+10 -9.747e+10 -3.855e+10 -9.668e+10 -3.894e+10 -9.550e+10 -3.913e+10 -9.396e+10 -3.912e+10 -9.205e+10 -3.892e+10 -8.980e+10 -3.851e+10 -8.722e+10 -3.791e+10 -8.435e+10 -3.712e+10 -8.121e+10 -3.616e+10 -7.782e+10 -3.502e+10 -7.420e+10 -3.372e+10 -7.041e+10 -3.228e+10 -6.646e+10 -3.071e+10 -6.239e+10 -2.904e+10 -5.824e+10 -2.727e+10 -5.403e+10 -2.544e+10 -4.981e+10 -2.357e+10 -4.560e+10 -2.166e+10 -4.145e+10 -1.976e+10 -3.738e+10 -1.787e+10 -3.343e+10 -1.602e+10 -2.963e+10 -1.422e+10 -2.599e+10 -1.249e+10 -2.255e+10 -1.086e+10 -1.934e+10 -9.323e+09 -1.635e+10 -7.898e+09 -1.362e+10 -6.593e+09 -1.114e+10 -5.414e+09 -8.932e+09 -4.364e+09 -6.989e+09 -3.442e+09 -5.311e+09 -2.646e+09 -3.890e+09 -1.973e+09 -2.719e+09 -1.415e+09 -1.784e+09 -9.672e+08 -1.070e+09 -6.186e+08 -5.578e+08 -3.599e+08 -2.280e+08 -1.808e+08 -5.521e+07 -7.257e+07 2.232e+07 -3.054e+07 1.188e+08 -1.868e+07 2.960e+08 4.927e+06 5.430e+08 4.859e+07 8.384e+08 1.049e+08 1.162e+09 1.660e+08 1.497e+09 2.246e+08 1.825e+09 2.745e+08 2.134e+09 3.111e+08 2.410e+09 3.308e+08 2.647e+09 3.311e+08 2.835e+09 3.110e+08 2.972e+09 2.704e+08 3.055e+09 2.103e+08 3.084e+09 1.324e+08 3.061e+09 3.925e+07 2.990e+09 -6.595e+07 2.876e+09 -1.799e+08 2.725e+09 -2.992e+08 2.544e+09 -4.203e+08 2.342e+09 -5.404e+08 2.127e+09 -6.575e+08 1.906e+09 -7.706e+08 1.687e+09 -8.806e+08 1.476e+09 -9.899e+08 1.276e+09 -1.103e+09 1.089e+09 -1.227e+09 9.109e+08 -1.368e+09 7.368e+08 -1.535e+09 5.581e+08 -1.733e+09 3.655e+08 -1.965e+09 1.502e+08 -2.234e+09 -9.553e+07 -2.536e+09 -3.767e+08 -2.868e+09 -6.955e+08 -3.222e+09 -1.052e+09 -3.593e+09 -1.445e+09 -3.970e+09 -1.868e+09 -4.344e+09 -2.316e+09 -4.707e+09 -2.780e+09 -5.047e+09 -3.252e+09 -5.357e+09 -3.721e+09 -5.626e+09 -4.178e+09 -5.848e+09 -4.611e+09 -6.015e+09 -5.011e+09 -6.122e+09 -5.367e+09 -6.165e+09 -5.671e+09 -6.143e+09 -5.916e+09 -6.055e+09 -6.097e+09 -5.902e+09 -6.207e+09 -5.689e+09 -6.247e+09 -5.419e+09 -6.214e+09 -5.101e+09 -6.112e+09 -4.740e+09 -5.944e+09 -4.347e+09 -5.715e+09 -3.930e+09 -5.433e+09 -3.499e+09 -5.105e+09 -3.064e+09 -4.741e+09 -2.634e+09 -4.351e+09 -2.218e+09 -3.945e+09 -1.824e+09 -3.532e+09 -1.457e+09 -3.122e+09 -1.124e+09 -2.725e+09 -8.274e+08 -2.347e+09 -5.700e+08 -1.996e+09 -3.524e+08 -1.675e+09 -1.733e+08 -1.388e+09 -3.041e+07 -1.138e+09 7.965e+07 -9.234e+08 1.615e+08 -7.433e+08 2.202e+08 -5.948e+08 2.606e+08 -4.737e+08 2.873e+08 -3.754e+08 3.036e+08 -2.954e+08 3.118e+08 -2.297e+08 3.123e+08 -1.753e+08 3.048e+08 -1.303e+08 2.885e+08 -9.376e+07 2.626e+08 -6.516e+07 2.274e+08 -4.415e+07 1.840e+08 -2.992e+07 1.355e+08 -2.108e+07 8.658e+07 -1.555e+07 4.367e+07 -1.220e+07 1.398e+07 -1.687e+07 -6.383e+06 -3.954e+07 -4.419e+07 -8.602e+07 -1.296e+08 -1.635e+08 -2.812e+08 -2.823e+08 -5.156e+08 -4.543e+08 -8.507e+08 -6.926e+08 -1.305e+09 -1.011e+09 -1.895e+09 -1.424e+09 -2.641e+09 -1.946e+09 -3.557e+09 -2.591e+09 -4.660e+09 -3.373e+09 -5.963e+09 -4.306e+09 -7.476e+09 -5.398e+09 -9.203e+09 -6.661e+09 -1.115e+10 -8.099e+09 -1.332e+10 -9.715e+09 -1.569e+10 -1.151e+10 -1.826e+10 -1.348e+10 -2.102e+10 -1.561e+10 -2.393e+10 -1.789e+10 -2.697e+10 -2.030e+10 -3.011e+10 -2.281e+10 -3.330e+10 -2.541e+10 -3.650e+10 -2.805e+10 -3.968e+10 -3.070e+10 -4.278e+10 -3.332e+10 -4.576e+10 -3.588e+10 -4.856e+10 -3.831e+10 -5.114e+10 -4.060e+10 -5.345e+10 -4.268e+10 -5.544e+10 -4.452e+10 -5.707e+10 -4.608e+10 -5.832e+10 -4.733e+10 -5.915e+10 -4.823e+10 -5.955e+10 -4.878e+10 -5.950e+10 -4.894e+10 -5.900e+10 -4.871e+10 -5.805e+10 -4.810e+10 -5.667e+10 -4.710e+10 -5.487e+10 -4.574e+10 -5.269e+10 -4.402e+10 -5.015e+10 -4.199e+10 -4.731e+10 -3.968e+10 -4.420e+10 -3.712e+10 -4.088e+10 -3.437e+10 -3.741e+10 -3.147e+10 -3.383e+10 -2.847e+10 -3.022e+10 -2.542e+10 -2.661e+10 -2.238e+10 -2.308e+10 -1.939e+10 -1.967e+10 -1.650e+10 -1.643e+10 -1.376e+10 -1.342e+10 -1.121e+10 -1.066e+10 -8.878e+09 -8.184e+09 -6.796e+09 -6.029e+09 -4.983e+09 -4.203e+09 -3.457e+09 -2.718e+09 -2.223e+09 -1.573e+09 -1.281e+09 -7.571e+08 -6.240e+08 -2.490e+08 -2.414e+08 -1.522e+06 -7.832e+07 1.400e+08 5.756e+07 3.902e+08 3.039e+08 8.037e+08 6.722e+08 1.337e+09 1.126e+09 1.934e+09 1.621e+09 2.539e+09 2.110e+09 3.100e+09 2.550e+09 3.568e+09 2.898e+09 3.900e+09 3.120e+09 4.063e+09 3.190e+09 4.036e+09 3.093e+09 3.812e+09 2.828e+09 3.400e+09 2.412e+09 2.828e+09 1.880e+09 2.145e+09 1.285e+09 1.420e+09 7.072e+08 7.466e+08 2.471e+08 2.381e+08 2.991e+07 2.154e+07 -2.039e+08 -2.803e+08 -9.427e+08 -1.161e+09 -2.439e+09 -2.863e+09 -4.904e+09 -5.587e+09 -8.563e+09 -9.541e+09 -1.366e+10 -1.494e+10 -2.043e+10 -2.199e+10 -2.912e+10 -3.090e+10 -3.997e+10 -4.186e+10 -5.321e+10 -5.503e+10 -6.903e+10 -7.056e+10 -8.764e+10 -8.859e+10 -1.092e+11 -1.092e+11 -1.337e+11 -1.324e+11 -1.614e+11 -1.582e+11 -1.921e+11 -1.865e+11 -2.259e+11 -2.174e+11 -2.627e+11 -2.506e+11 -3.023e+11 -2.859e+11 -3.445e+11 -3.231e+11 -3.890e+11 -3.620e+11 -4.355e+11 -4.020e+11 -4.835e+11 -4.430e+11 -5.326e+11 -4.844e+11 -5.817e+11 -5.300e+11 -6.313e+11 -5.740e+11 -6.806e+11 -6.146e+11 -7.285e+11 -6.535e+11 -7.747e+11 -6.903e+11 -8.185e+11 -7.244e+11 -8.591e+11 -7.553e+11 -8.960e+11 -7.824e+11 -9.286e+11 -8.053e+11 -9.562e+11 -8.235e+11 -9.783e+11 -8.365e+11 -9.945e+11 -8.440e+11 -1.004e+12 -8.458e+11 -1.007e+12 -8.417e+11 -1.004e+12 -8.315e+11 -9.928e+11 -8.153e+11 -9.749e+11 -7.931e+11 -9.500e+11 -7.652e+11 -9.185e+11 -7.320e+11 -8.805e+11 -6.937e+11 -8.366e+11 -6.510e+11 -7.875e+11 -6.046e+11 -7.337e+11 -5.551e+11 -6.761e+11 -5.033e+11 -6.158e+11 -4.501e+11 -5.535e+11 -3.964e+11 -4.903e+11 -3.432e+11 -4.274e+11 -2.913e+11 -3.659e+11 -2.417e+11 -3.067e+11 -1.952e+11 -2.509e+11 -1.526e+11 -1.994e+11 -1.145e+11 -1.530e+11 -8.145e+10 -1.124e+11 -5.390e+10 -7.809e+10 -3.198e+10 -5.039e+10 -1.572e+10 -2.946e+10 -4.841e+09 -1.517e+10 1.372e+09 -6.895e+09 4.645e+09 -2.454e+09 8.087e+09 1.971e+09 1.428e+10 8.688e+09 2.313e+10 1.764e+10 3.345e+10 2.790e+10 4.402e+10 3.829e+10 5.369e+10 4.756e+10 6.138e+10 5.457e+10 6.619e+10 5.833e+10 6.741e+10 5.816e+10 6.463e+10 5.375e+10 5.783e+10 4.533e+10 4.745e+10 3.379e+10 3.454e+10 2.079e+10 2.080e+10 8.905e+09 8.736e+09 1.501e+09 1.431e+09 -4.484e+09 -4.300e+09 -2.315e+10 -2.188e+10 -6.561e+10 -6.123e+10 -1.414e+11 -1.305e+11 -2.620e+11 -2.392e+11 -4.405e+11 -3.984e+11 -6.924e+11 -6.207e+11 -1.036e+12 -9.206e+11 -1.490e+12 -1.314e+12 -2.077e+12 -1.819e+12 -2.823e+12 -2.455e+12 -3.755e+12 -3.243e+12 -4.903e+12 -4.208e+12 -6.300e+12 -5.374e+12 -7.980e+12 -6.766e+12 -9.983e+12 -8.416e+12 -1.235e+13 -1.035e+13 -1.511e+13 -1.260e+13 -1.833e+13 -1.521e+13 -2.205e+13 -1.820e+13 -2.630e+13 -2.160e+13 -3.115e+13 -2.546e+13 -3.664e+13 -2.980e+13 -4.282e+13 -3.467e+13 -4.975e+13 -4.009e+13 -5.748e+13 -4.611e+13 -6.606e+13 -5.276e+13 -7.554e+13 -6.009e+13 -8.596e+13 -6.810e+13 -9.737e+13 -7.683e+13 -1.098e+14 -8.631e+13 -1.233e+14 -9.656e+13 -1.380e+14 -1.076e+14 -1.537e+14 -1.194e+14 -1.706e+14 -1.321e+14 -1.887e+14 -1.456e+14 -2.080e+14 -1.599e+14 -2.286e+14 -1.750e+14 -2.503e+14 -1.910e+14 -2.732e+14 -2.078e+14 -2.973e+14 -2.253e+14 -3.225e+14 -2.437e+14 -3.489e+14 -2.627e+14 -3.764e+14 -2.825e+14 -4.049e+14 -3.030e+14 -4.344e+14 -3.241e+14 -4.649e+14 -3.458e+14 -4.961e+14 -3.680e+14 -5.282e+14 -3.907e+14 -5.610e+14 -4.137e+14 -5.944e+14 -4.371e+14 -6.283e+14 -4.608e+14 -6.625e+14 -4.846e+14 -6.971e+14 -5.085e+14 -7.318e+14 -5.325e+14 -7.665e+14 -5.563e+14 -8.012e+14 -5.800e+14 -8.356e+14 -6.034e+14 -8.696e+14 -6.264e+14 -9.031e+14 -6.489e+14 -9.360e+14 -6.709e+14 -9.681e+14 -6.922e+14 -9.993e+14 -7.128e+14 -1.029e+15 -7.325e+14 -1.058e+15 -7.512e+14 -1.086e+15 -7.688e+14 -1.112e+15 -7.852e+14 -1.136e+15 -8.002e+14 -1.159e+15 -8.139e+14 -1.180e+15 -8.263e+14 -1.199e+15 -8.372e+14 -1.216e+15 -8.467e+14 -1.231e+15 -8.546e+14 -1.243e+15 -8.610e+14 -1.254e+15 -8.658e+14 -1.262e+15 -8.689e+14 -1.267e+15 -8.705e+14 -1.270e+15 -8.704e+14 -1.271e+15 -8.687e+14 -1.269e+15 -8.653e+14 -1.265e+15 -8.604e+14 -1.259e+15 -8.539e+14 -1.250e+15 -8.459e+14 -1.239e+15 -8.363e+14 -1.225e+15 -8.254e+14 -1.209e+15 -8.130e+14 -1.192e+15 -7.994e+14 -1.172e+15 -7.845e+14 -1.150e+15 -7.684e+14 -1.127e+15 -7.513e+14 -1.102e+15 -7.331e+14 -1.075e+15 -7.140e+14 -1.047e+15 -6.940e+14 -1.017e+15 -6.734e+14 -9.868e+14 -6.520e+14 -9.552e+14 -6.301e+14 -9.228e+14 -6.077e+14 -8.896e+14 -5.850e+14 -8.559e+14 -5.619e+14 -8.217e+14 -5.387e+14 -7.872e+14 -5.153e+14 -7.525e+14 -4.920e+14 -7.178e+14 -4.686e+14 -6.832e+14 -4.455e+14 -6.488e+14 -4.225e+14 -6.148e+14 -3.999e+14 -5.814e+14 -3.776e+14 -5.485e+14 -3.559e+14 -5.162e+14 -3.345e+14 -4.847e+14 -3.137e+14 -4.539e+14 -2.935e+14 -4.240e+14 -2.739e+14 -3.950e+14 -2.549e+14 -3.671e+14 -2.367e+14 -3.401e+14 -2.192e+14 -3.143e+14 -2.024e+14 -2.896e+14 -1.863e+14 -2.660e+14 -1.711e+14 -2.436e+14 -1.566e+14 -2.225e+14 -1.430e+14 -2.024e+14 -1.301e+14 -1.836e+14 -1.180e+14 -1.660e+14 -1.067e+14 -1.495e+14 -9.614e+13 -1.342e+14 -8.633e+13 -1.199e+14 -7.724e+13 -1.068e+14 -6.886e+13 -9.472e+13 -6.115e+13 -8.365e+13 -5.409e+13 -7.354e+13 -4.765e+13 -6.436e+13 -4.179e+13 -5.606e+13 -3.650e+13 -4.858e+13 -3.172e+13 -4.187e+13 -2.743e+13 -3.590e+13 -2.361e+13 -3.059e+13 -2.020e+13 -2.591e+13 -1.719e+13 -2.180e+13 -1.454e+13 -1.821e+13 -1.222e+13 -1.511e+13 -1.020e+13 -1.243e+13 -8.456e+12 -1.014e+13 -6.953e+12 -8.195e+12 -5.669e+12 -6.558e+12 -4.580e+12 -5.191e+12 -3.665e+12 -4.060e+12 -2.900e+12 -3.134e+12 -2.269e+12 -2.384e+12 -1.752e+12 -1.784e+12 -1.334e+12 -1.312e+12 -9.989e+11 -9.440e+11 -7.345e+11 -6.633e+11 -5.290e+11 -4.535e+11 -3.720e+11 -3.000e+11 -2.545e+11 -1.909e+11 -1.684e+11 -1.158e+11 -1.071e+11 -6.624e+10 -6.492e+10 -3.508e+10 -3.699e+10 -1.677e+10 -1.946e+10 -6.935e+09 -9.171e+09 -2.291e+09 -3.674e+09 -5.070e+08 -1.125e+09 -3.905e+07 -1.967e+08 -7.023e+05 1.132e+07 -5.168e+07 9.887e+07 -3.412e+08 2.702e+08 -1.232e+09 4.646e+08 -3.306e+09 5.318e+08 -7.289e+09 1.978e+08 -1.397e+10 -8.923e+08 -2.408e+10 -3.123e+09 -3.833e+10 -6.880e+09 -5.730e+10 -1.253e+10 -8.139e+10 -2.035e+10 -1.109e+11 -3.060e+10 -1.458e+11 -4.344e+10 -1.861e+11 -5.891e+10 -2.315e+11 -7.701e+10 -2.815e+11 -9.766e+10 -3.355e+11 -1.207e+11 -3.926e+11 -1.457e+11 -4.521e+11 -1.726e+11 -5.129e+11 -2.008e+11 -5.741e+11 -2.300e+11 -6.346e+11 -2.597e+11 -6.934e+11 -2.895e+11 -7.495e+11 -3.190e+11 -8.021e+11 -3.477e+11 -8.501e+11 -3.751e+11 -8.928e+11 -4.008e+11 -9.296e+11 -4.244e+11 -9.599e+11 -4.456e+11 -9.832e+11 -4.641e+11 -9.993e+11 -4.797e+11 -1.008e+12 -4.921e+11 -1.010e+12 -5.012e+11 -1.004e+12 -5.070e+11 -9.911e+11 -5.093e+11 -9.718e+11 -5.083e+11 -9.462e+11 -5.039e+11 -9.150e+11 -4.965e+11 -8.787e+11 -4.860e+11 -8.380e+11 -4.727e+11 -7.936e+11 -4.569e+11 -7.462e+11 -4.388e+11 -6.965e+11 -4.187e+11 -6.453e+11 -3.969e+11 -5.933e+11 -3.739e+11 -5.411e+11 -3.497e+11 -4.894e+11 -3.249e+11 -4.389e+11 -2.998e+11 -3.899e+11 -2.746e+11 -3.430e+11 -2.496e+11 -2.986e+11 -2.251e+11 -2.571e+11 -2.014e+11 -2.186e+11 -1.786e+11 -1.835e+11 -1.570e+11 -1.518e+11 -1.368e+11 -1.235e+11 -1.179e+11 -9.868e+10 -1.006e+11 -7.720e+10 -8.495e+10 -5.892e+10 -7.087e+10 -4.368e+10 -5.843e+10 -3.124e+10 -4.757e+10 -2.131e+10 -3.824e+10 -1.361e+10 -3.039e+10 -7.817e+09 -2.391e+10 -3.593e+09 -1.868e+10 -6.032e+08 -1.457e+10 1.483e+09 -1.144e+10 2.960e+09 -9.097e+09 4.059e+09 -7.349e+09 4.921e+09 -6.012e+09 5.607e+09 -4.916e+09 6.105e+09 -3.961e+09 6.374e+09 -3.091e+09 6.376e+09 -2.289e+09 6.090e+09 -1.564e+09 5.522e+09 -9.324e+08 4.709e+09 -4.129e+08 3.721e+09 -2.276e+07 2.654e+09 2.292e+08 1.627e+09 3.437e+08 7.778e+08 3.368e+08 2.277e+08 2.725e+08 -1.614e+08 3.241e+08 0.005 -63.579 -61.536 -59.493 -57.450 -55.407 -53.387 -51.482 -49.675 -47.954 -46.313 -44.748 -43.256 -41.832 -40.474 -39.181 -37.949 -36.776 -35.660 -34.598 -33.588 -32.628 -31.717 -30.852 -30.031 -29.254 -28.518 -27.822 -27.165 -26.547 -25.964 -25.418 -24.906 -24.428 -23.984 -23.572 -23.193 -22.844 -22.527 -22.240 -21.984 -21.757 -21.560 -21.393 -21.254 -21.145 -21.065 -21.014 -20.992 -20.999 -21.035 -21.101 -21.196 -21.321 -21.476 -21.662 -21.878 -22.125 -22.403 -22.714 -23.058 -23.436 -23.847 -24.294 -24.777 -25.297 -25.855 -26.453 -27.093 -27.774 -28.500 -29.273 -30.095 -30.969 -31.897 -32.885 -33.936 -35.056 -36.252 -37.533 -38.912 -40.402 -42.025 -43.811 -45.803 -48.068 -50.713 -53.916 -57.938 -62.483 -63.521 -60.798 -58.067 -56.180 -54.935 -54.152 -53.736 -53.639 -53.839 -54.311 -54.929 -55.274 -54.580 -52.525 -49.742 -46.878 -44.181 -41.698 -39.412 -37.297 -35.328 -33.484 -31.748 -30.107 -28.552 -27.073 -25.664 -24.319 -23.033 -21.803 -20.624 -19.494 -18.411 -17.371 -16.373 -15.415 -14.496 -13.613 -12.765 -11.952 -11.172 -10.424 -9.707 -9.021 -8.363 -7.735 -7.135 -6.561 -6.015 -5.496 -5.002 -4.533 -4.090 -3.671 -3.277 -2.907 -2.561 -2.239 -1.940 -1.665 -1.414 -1.186 -0.981 -0.799 -0.641 -0.507 -0.396 -0.308 -0.245 -0.206 -0.191 -0.201 -0.237 -0.298 -0.385 -0.499 -0.641 -0.811 -1.010 -1.239 -1.499 -1.791 -2.117 -2.478 -2.876 -3.313 -3.791 -4.312 -4.880 -5.498 -6.169 -6.899 -7.692 -8.555 -9.495 -10.521 -11.645 -12.881 -14.245 -15.760 -17.456 -19.374 -21.571 -24.130 -27.187 -30.973 -35.954 -43.365 -60.192 -55.463 -58.889 -49.571 -39.526 -33.511 -29.157 -25.735 -22.919 -20.529 -18.461 -16.643 -15.026 -13.576 -12.267 -11.078 -9.993 -9.001 -8.092 -7.255 -6.486 -5.778 -5.126 -4.525 -3.973 -3.466 -3.002 -2.577 -2.191 -1.840 -1.524 -1.241 -0.989 -0.768 -0.577 -0.414 -0.279 -0.172 -0.090 -0.035 -0.005 0.000 -0.020 -0.064 -0.131 -0.223 -0.338 -0.477 -0.639 -0.824 -1.032 -1.264 -1.519 -1.797 -2.098 -2.423 -2.772 -3.145 -3.542 -3.964 -4.410 -4.881 -5.377 -5.900 -6.448 -7.024 -7.626 -8.257 -8.916 -9.604 -10.322 -11.071 -11.852 -12.666 -13.513 -14.395 -15.313 -16.268 -17.262 -18.297 -19.373 -20.493 -21.660 -22.874 -24.139 -25.457 -26.832 -28.267 -29.766 -31.333 -32.975 -34.697 -36.507 -38.415 -40.433 -42.575 -44.861 -47.315 -49.973 -52.880 -56.100 -59.719 -63.859 -68.688 -74.371 -79.016 -75.503 -70.116 -65.612 -61.837 -58.599 -55.765 -53.241 -50.961 -48.876 -46.951 -45.162 -43.489 -41.917 -40.438 -39.040 -37.718 -36.466 -35.278 -34.151 -33.083 -32.069 -31.108 -30.197 -29.333 -28.516 -27.744 -27.014 -26.325 -25.676 -25.066 -24.493 -23.957 -23.456 -22.990 -22.557 -22.157 -21.789 -21.453 -21.147 -20.872 -20.626 -20.409 -20.221 -20.062 -19.930 -19.827 -19.750 -19.701 -19.678 -19.683 -19.713 -19.771 -19.855 -19.965 -20.102 -20.265 -20.454 -20.670 -20.912 -21.180 -21.475 -21.797 -22.146 -22.523 -22.926 -23.358 -23.818 -24.306 -24.822 -25.368 -25.944 -26.549 -27.184 -27.851 -28.548 -29.277 -30.038 -30.832 -31.658 -32.517 -33.409 -34.334 -35.292 -36.283 -37.306 -38.360 -39.443 -40.553 -41.688 -42.844 -44.014 -45.195 -46.376 -47.550 -48.722 -49.894 -51.066 -52.238 0 1 1.0 1 N5 VV 34.25 38.05 0.05 -3.287e+09 -9.816e+09 -2.870e+09 -9.520e+09 -2.458e+09 -9.182e+09 -2.056e+09 -8.805e+09 -1.668e+09 -8.391e+09 -1.299e+09 -7.943e+09 -9.535e+08 -7.466e+09 -6.346e+08 -6.961e+09 -3.463e+08 -6.436e+09 -9.080e+07 -5.894e+09 1.297e+08 -5.340e+09 3.133e+08 -4.781e+09 4.594e+08 -4.223e+09 5.679e+08 -3.672e+09 6.393e+08 -3.135e+09 6.743e+08 -2.619e+09 6.763e+08 -2.131e+09 6.484e+08 -1.678e+09 5.950e+08 -1.267e+09 5.211e+08 -9.040e+08 4.332e+08 -5.963e+08 3.390e+08 -3.489e+08 2.480e+08 -1.653e+08 1.739e+08 -4.295e+07 1.309e+08 4.173e+07 1.156e+08 1.420e+08 9.940e+07 3.075e+08 5.207e+07 5.629e+08 -4.829e+07 9.181e+08 -2.182e+08 1.378e+09 -4.725e+08 1.946e+09 -8.258e+08 2.627e+09 -1.292e+09 3.422e+09 -1.885e+09 4.334e+09 -2.620e+09 5.366e+09 -3.510e+09 6.517e+09 -4.566e+09 7.787e+09 -5.802e+09 9.177e+09 -7.227e+09 1.068e+10 -8.850e+09 1.230e+10 -1.068e+10 1.403e+10 -1.272e+10 1.587e+10 -1.496e+10 1.779e+10 -1.742e+10 1.981e+10 -2.009e+10 2.190e+10 -2.295e+10 2.405e+10 -2.599e+10 2.625e+10 -2.921e+10 2.848e+10 -3.259e+10 3.072e+10 -3.609e+10 3.295e+10 -3.971e+10 3.516e+10 -4.340e+10 3.732e+10 -4.715e+10 3.942e+10 -5.093e+10 4.142e+10 -5.469e+10 4.330e+10 -5.840e+10 4.506e+10 -6.205e+10 4.666e+10 -6.559e+10 4.808e+10 -6.898e+10 4.932e+10 -7.221e+10 5.036e+10 -7.523e+10 5.119e+10 -7.804e+10 5.179e+10 -8.060e+10 5.218e+10 -8.289e+10 5.233e+10 -8.488e+10 5.225e+10 -8.657e+10 5.195e+10 -8.793e+10 5.143e+10 -8.895e+10 5.070e+10 -8.963e+10 4.977e+10 -8.995e+10 4.865e+10 -8.993e+10 4.737e+10 -8.955e+10 4.593e+10 -8.882e+10 4.435e+10 -8.775e+10 4.266e+10 -8.634e+10 4.087e+10 -8.461e+10 3.900e+10 -8.256e+10 3.707e+10 -8.021e+10 3.509e+10 -7.759e+10 3.308e+10 -7.470e+10 3.106e+10 -7.156e+10 2.904e+10 -6.822e+10 2.704e+10 -6.468e+10 2.506e+10 -6.097e+10 2.311e+10 -5.714e+10 2.121e+10 -5.321e+10 1.936e+10 -4.921e+10 1.758e+10 -4.518e+10 1.586e+10 -4.115e+10 1.421e+10 -3.716e+10 1.264e+10 -3.324e+10 1.114e+10 -2.943e+10 9.737e+09 -2.577e+10 8.417e+09 -2.228e+10 7.187e+09 -1.899e+10 6.050e+09 -1.593e+10 5.007e+09 -1.312e+10 4.063e+09 -1.058e+10 3.218e+09 -8.312e+09 2.472e+09 -6.333e+09 1.827e+09 -4.644e+09 1.283e+09 -3.239e+09 8.384e+08 -2.112e+09 4.907e+08 -1.251e+09 2.370e+08 -6.369e+08 7.208e+07 -2.510e+08 -1.196e+07 -6.248e+07 -4.138e+07 3.816e+07 -9.270e+07 1.960e+08 -2.130e+08 4.633e+08 -3.936e+08 8.216e+08 -6.188e+08 1.244e+09 -8.769e+08 1.704e+09 -1.157e+09 2.177e+09 -1.450e+09 2.641e+09 -1.746e+09 3.077e+09 -2.035e+09 3.469e+09 -2.309e+09 3.803e+09 -2.563e+09 4.070e+09 -2.789e+09 4.264e+09 -2.984e+09 4.380e+09 -3.144e+09 4.419e+09 -3.267e+09 4.383e+09 -3.352e+09 4.276e+09 -3.400e+09 4.105e+09 -3.411e+09 3.876e+09 -3.388e+09 3.600e+09 -3.334e+09 3.286e+09 -3.253e+09 2.944e+09 -3.147e+09 2.585e+09 -3.023e+09 2.218e+09 -2.884e+09 1.854e+09 -2.737e+09 1.499e+09 -2.586e+09 1.160e+09 -2.438e+09 8.405e+08 -2.300e+09 5.420e+08 -2.177e+09 2.619e+08 -2.075e+09 -6.331e+06 -2.001e+09 -2.720e+08 -1.955e+09 -5.463e+08 -1.940e+09 -8.415e+08 -1.952e+09 -1.168e+09 -1.988e+09 -1.534e+09 -2.040e+09 -1.942e+09 -2.102e+09 -2.395e+09 -2.166e+09 -2.887e+09 -2.224e+09 -3.414e+09 -2.273e+09 -3.968e+09 -2.305e+09 -4.537e+09 -2.317e+09 -5.111e+09 -2.307e+09 -5.676e+09 -2.270e+09 -6.218e+09 -2.207e+09 -6.726e+09 -2.117e+09 -7.185e+09 -2.000e+09 -7.583e+09 -1.858e+09 -7.910e+09 -1.693e+09 -8.157e+09 -1.509e+09 -8.316e+09 -1.309e+09 -8.384e+09 -1.098e+09 -8.358e+09 -8.805e+08 -8.240e+09 -6.617e+08 -8.031e+09 -4.464e+08 -7.739e+09 -2.395e+08 -7.372e+09 -4.573e+07 -6.940e+09 1.313e+08 -6.454e+09 2.884e+08 -5.929e+09 4.229e+08 -5.377e+09 5.335e+08 -4.812e+09 6.194e+08 -4.248e+09 6.808e+08 -3.697e+09 7.188e+08 -3.169e+09 7.351e+08 -2.674e+09 7.320e+08 -2.220e+09 7.123e+08 -1.811e+09 6.792e+08 -1.452e+09 6.360e+08 -1.142e+09 5.858e+08 -8.815e+08 5.319e+08 -6.674e+08 4.772e+08 -4.955e+08 4.240e+08 -3.609e+08 3.742e+08 -2.580e+08 3.291e+08 -1.810e+08 2.889e+08 -1.248e+08 2.534e+08 -8.504e+07 2.218e+08 -5.826e+07 1.928e+08 -4.195e+07 1.654e+08 -3.417e+07 1.393e+08 -3.329e+07 1.145e+08 -3.815e+07 9.219e+07 -4.891e+07 7.380e+07 -6.890e+07 6.019e+07 -1.059e+08 4.956e+07 -1.712e+08 3.667e+07 -2.781e+08 1.437e+07 -4.412e+08 -2.458e+07 -6.764e+08 -8.703e+07 -1.002e+09 -1.798e+08 -1.437e+09 -3.096e+08 -2.003e+09 -4.831e+08 -2.720e+09 -7.074e+08 -3.613e+09 -9.892e+08 -4.702e+09 -1.334e+09 -6.011e+09 -1.749e+09 -7.558e+09 -2.239e+09 -9.363e+09 -2.806e+09 -1.144e+10 -3.454e+09 -1.381e+10 -4.183e+09 -1.646e+10 -4.992e+09 -1.941e+10 -5.878e+09 -2.266e+10 -6.835e+09 -2.618e+10 -7.856e+09 -2.996e+10 -8.931e+09 -3.399e+10 -1.005e+10 -3.821e+10 -1.119e+10 -4.260e+10 -1.234e+10 -4.710e+10 -1.349e+10 -5.165e+10 -1.461e+10 -5.621e+10 -1.570e+10 -6.068e+10 -1.671e+10 -6.502e+10 -1.766e+10 -6.914e+10 -1.851e+10 -7.298e+10 -1.925e+10 -7.645e+10 -1.987e+10 -7.950e+10 -2.036e+10 -8.207e+10 -2.070e+10 -8.409e+10 -2.089e+10 -8.552e+10 -2.093e+10 -8.633e+10 -2.082e+10 -8.650e+10 -2.055e+10 -8.601e+10 -2.015e+10 -8.486e+10 -1.960e+10 -8.308e+10 -1.893e+10 -8.070e+10 -1.814e+10 -7.774e+10 -1.724e+10 -7.426e+10 -1.626e+10 -7.032e+10 -1.520e+10 -6.599e+10 -1.409e+10 -6.134e+10 -1.293e+10 -5.645e+10 -1.174e+10 -5.140e+10 -1.054e+10 -4.627e+10 -9.345e+09 -4.115e+10 -8.171e+09 -3.610e+10 -7.033e+09 -3.121e+10 -5.945e+09 -2.654e+10 -4.920e+09 -2.215e+10 -3.970e+09 -1.810e+10 -3.107e+09 -1.441e+10 -2.338e+09 -1.114e+10 -1.671e+09 -8.296e+09 -1.111e+09 -5.893e+09 -6.600e+08 -3.935e+09 -3.177e+08 -2.410e+09 -8.062e+07 -1.297e+09 5.868e+07 -5.667e+08 1.124e+08 -1.726e+08 1.093e+08 7.327e+06 1.323e+08 2.077e+08 2.411e+08 5.409e+08 4.086e+08 9.839e+08 5.969e+08 1.477e+09 7.817e+08 1.959e+09 9.433e+08 2.372e+09 1.065e+09 2.665e+09 1.134e+09 2.800e+09 1.141e+09 2.753e+09 1.083e+09 2.519e+09 9.615e+08 2.115e+09 7.871e+08 1.582e+09 5.770e+08 9.936e+08 3.575e+08 4.517e+08 1.626e+08 9.143e+07 3.444e+07 -7.205e+07 -1.848e+07 -6.310e+08 -1.856e+08 -1.972e+09 -5.839e+08 -4.372e+09 -1.284e+09 -8.125e+09 -2.356e+09 -1.355e+10 -3.869e+09 -2.098e+10 -5.890e+09 -3.075e+10 -8.485e+09 -4.322e+10 -1.172e+10 -5.870e+10 -1.564e+10 -7.751e+10 -2.029e+10 -9.998e+10 -2.571e+10 -1.263e+11 -3.192e+10 -1.568e+11 -3.894e+10 -1.915e+11 -4.678e+10 -2.305e+11 -5.540e+10 -2.739e+11 -6.480e+10 -3.217e+11 -7.495e+10 -3.737e+11 -8.578e+10 -4.297e+11 -9.725e+10 -4.894e+11 -1.093e+11 -5.524e+11 -1.218e+11 -6.183e+11 -1.347e+11 -6.867e+11 -1.478e+11 -7.568e+11 -1.612e+11 -8.280e+11 -1.745e+11 -8.997e+11 -1.878e+11 -9.719e+11 -1.926e+11 -1.044e+12 -2.193e+11 -1.112e+12 -2.317e+11 -1.177e+12 -2.434e+11 -1.239e+12 -2.542e+11 -1.295e+12 -2.639e+11 -1.346e+12 -2.723e+11 -1.391e+12 -2.793e+11 -1.429e+12 -2.846e+11 -1.459e+12 -2.881e+11 -1.480e+12 -2.898e+11 -1.492e+12 -2.894e+11 -1.495e+12 -2.868e+11 -1.488e+12 -2.822e+11 -1.471e+12 -2.753e+11 -1.444e+12 -2.664e+11 -1.408e+12 -2.553e+11 -1.362e+12 -2.423e+11 -1.306e+12 -2.275e+11 -1.243e+12 -2.112e+11 -1.171e+12 -1.935e+11 -1.093e+12 -1.748e+11 -1.010e+12 -1.555e+11 -9.224e+11 -1.357e+11 -8.320e+11 -1.161e+11 -7.401e+11 -9.679e+10 -6.484e+11 -7.827e+10 -5.584e+11 -6.091e+10 -4.716e+11 -4.499e+10 -3.893e+11 -3.080e+10 -3.130e+11 -1.859e+10 -2.438e+11 -8.514e+09 -1.827e+11 -6.596e+08 -1.303e+11 4.942e+09 -8.719e+10 8.374e+09 -5.343e+10 9.814e+09 -2.889e+10 9.591e+09 -1.291e+10 8.332e+09 -3.945e+09 7.286e+09 1.541e+09 8.153e+09 8.089e+09 1.135e+10 1.753e+10 1.565e+10 2.908e+10 1.999e+10 4.125e+10 2.371e+10 5.240e+10 2.635e+10 6.099e+10 2.757e+10 6.574e+10 2.716e+10 6.575e+10 2.505e+10 6.063e+10 2.137e+10 5.069e+10 1.644e+10 3.707e+10 1.083e+10 2.195e+10 5.427e+09 8.650e+09 1.410e+09 6.393e+08 -7.355e+08 -7.883e+09 -4.576e+09 -3.474e+10 -1.611e+10 -9.232e+10 -3.826e+10 -1.926e+11 -7.458e+10 -3.499e+11 -1.294e+11 -5.812e+11 -2.076e+11 -9.055e+11 -3.148e+11 -1.345e+12 -4.575e+11 -1.926e+12 -6.431e+11 -2.675e+12 -8.794e+11 -3.626e+12 -1.176e+12 -4.811e+12 -1.541e+12 -6.269e+12 -1.987e+12 -8.042e+12 -2.526e+12 -1.018e+13 -3.168e+12 -1.272e+13 -3.928e+12 -1.572e+13 -4.819e+12 -1.923e+13 -5.856e+12 -2.331e+13 -7.054e+12 -2.803e+13 -8.429e+12 -3.344e+13 -9.997e+12 -3.960e+13 -1.177e+13 -4.658e+13 -1.378e+13 -5.446e+13 -1.602e+13 -6.328e+13 -1.852e+13 -7.313e+13 -2.129e+13 -8.407e+13 -2.436e+13 -9.615e+13 -2.774e+13 -1.095e+14 -3.145e+13 -1.240e+14 -3.550e+13 -1.399e+14 -3.989e+13 -1.572e+14 -4.464e+13 -1.759e+14 -4.977e+13 -1.960e+14 -5.527e+13 -2.176e+14 -6.116e+13 -2.408e+14 -6.744e+13 -2.654e+14 -7.412e+13 -2.916e+14 -8.120e+13 -3.193e+14 -8.868e+13 -3.485e+14 -9.655e+13 -3.793e+14 -1.048e+14 -4.115e+14 -1.135e+14 -4.451e+14 -1.225e+14 -4.801e+14 -1.320e+14 -5.165e+14 -1.417e+14 -5.541e+14 -1.519e+14 -5.928e+14 -1.623e+14 -6.327e+14 -1.731e+14 -6.735e+14 -1.842e+14 -7.152e+14 -1.955e+14 -7.577e+14 -2.071e+14 -8.008e+14 -2.189e+14 -8.445e+14 -2.309e+14 -8.885e+14 -2.430e+14 -9.327e+14 -2.552e+14 -9.771e+14 -2.675e+14 -1.021e+15 -2.798e+14 -1.065e+15 -2.921e+14 -1.109e+15 -3.043e+14 -1.152e+15 -3.164e+14 -1.194e+15 -3.284e+14 -1.236e+15 -3.401e+14 -1.276e+15 -3.515e+14 -1.315e+15 -3.627e+14 -1.353e+15 -3.734e+14 -1.389e+15 -3.837e+14 -1.423e+15 -3.935e+14 -1.455e+15 -4.025e+14 -1.485e+15 -4.109e+14 -1.513e+15 -4.186e+14 -1.538e+15 -4.257e+14 -1.561e+15 -4.320e+14 -1.581e+15 -4.376e+14 -1.598e+15 -4.425e+14 -1.613e+15 -4.466e+14 -1.624e+15 -4.498e+14 -1.633e+15 -4.523e+14 -1.638e+15 -4.539e+14 -1.641e+15 -4.548e+14 -1.640e+15 -4.547e+14 -1.636e+15 -4.539e+14 -1.629e+15 -4.523e+14 -1.619e+15 -4.498e+14 -1.606e+15 -4.466e+14 -1.590e+15 -4.426e+14 -1.571e+15 -4.379e+14 -1.549e+15 -4.325e+14 -1.525e+15 -4.263e+14 -1.498e+15 -4.196e+14 -1.469e+15 -4.122e+14 -1.438e+15 -4.042e+14 -1.404e+15 -3.957e+14 -1.369e+15 -3.867e+14 -1.332e+15 -3.772e+14 -1.294e+15 -3.673e+14 -1.254e+15 -3.570e+14 -1.213e+15 -3.463e+14 -1.171e+15 -3.353e+14 -1.128e+15 -3.241e+14 -1.085e+15 -3.126e+14 -1.041e+15 -3.010e+14 -9.966e+14 -2.892e+14 -9.524e+14 -2.773e+14 -9.082e+14 -2.654e+14 -8.642e+14 -2.534e+14 -8.206e+14 -2.414e+14 -7.774e+14 -2.295e+14 -7.350e+14 -2.178e+14 -6.934e+14 -2.061e+14 -6.526e+14 -1.946e+14 -6.127e+14 -1.834e+14 -5.739e+14 -1.723e+14 -5.361e+14 -1.616e+14 -4.996e+14 -1.511e+14 -4.644e+14 -1.409e+14 -4.305e+14 -1.311e+14 -3.979e+14 -1.216e+14 -3.668e+14 -1.125e+14 -3.371e+14 -1.038e+14 -3.089e+14 -9.549e+13 -2.822e+14 -8.759e+13 -2.570e+14 -8.011e+13 -2.332e+14 -7.304e+13 -2.110e+14 -6.640e+13 -1.902e+14 -6.016e+13 -1.708e+14 -5.433e+13 -1.528e+14 -4.891e+13 -1.362e+14 -4.387e+13 -1.209e+14 -3.921e+13 -1.069e+14 -3.492e+13 -9.413e+13 -3.098e+13 -8.249e+13 -2.738e+13 -7.195e+13 -2.410e+13 -6.245e+13 -2.112e+13 -5.393e+13 -1.843e+13 -4.632e+13 -1.601e+13 -3.956e+13 -1.383e+13 -3.359e+13 -1.189e+13 -2.834e+13 -1.017e+13 -2.375e+13 -8.649e+12 -1.976e+13 -7.308e+12 -1.632e+13 -6.136e+12 -1.337e+13 -5.115e+12 -1.086e+13 -4.232e+12 -8.732e+12 -3.473e+12 -6.952e+12 -2.825e+12 -5.473e+12 -2.276e+12 -4.256e+12 -1.814e+12 -3.265e+12 -1.430e+12 -2.467e+12 -1.112e+12 -1.833e+12 -8.529e+11 -1.336e+12 -6.437e+11 -9.523e+11 -4.770e+11 -6.623e+11 -3.463e+11 -4.473e+11 -2.455e+11 -2.917e+11 -1.692e+11 -1.825e+11 -1.129e+11 -1.084e+11 -7.240e+10 -6.037e+10 -4.420e+10 -3.089e+10 -2.538e+10 -1.408e+10 -1.344e+10 -5.417e+09 -6.370e+09 -1.579e+09 -2.573e+09 -2.491e+08 -8.024e+08 2.569e+07 -1.488e+08 1.501e+07 1.702e+07 -6.825e+07 1.482e+08 -5.247e+08 4.705e+08 -1.899e+09 9.994e+08 -4.934e+09 1.667e+09 -1.049e+10 2.321e+09 -1.944e+10 2.751e+09 -3.262e+10 2.718e+09 -5.077e+10 1.967e+09 -7.443e+10 2.611e+08 -1.040e+11 -2.619e+09 -1.398e+11 -6.862e+09 -1.816e+11 -1.260e+10 -2.292e+11 -1.992e+10 -2.824e+11 -2.889e+10 -3.403e+11 -3.949e+10 -4.023e+11 -5.166e+10 -4.673e+11 -6.531e+10 -5.342e+11 -8.028e+10 -6.020e+11 -9.641e+10 -6.697e+11 -1.135e+11 -7.358e+11 -1.313e+11 -7.995e+11 -1.498e+11 -8.598e+11 -1.685e+11 -9.153e+11 -1.873e+11 -9.654e+11 -2.057e+11 -1.009e+12 -2.237e+11 -1.046e+12 -2.409e+11 -1.076e+12 -2.571e+11 -1.097e+12 -2.720e+11 -1.111e+12 -2.855e+11 -1.117e+12 -2.974e+11 -1.115e+12 -3.074e+11 -1.105e+12 -3.156e+11 -1.087e+12 -3.217e+11 -1.063e+12 -3.257e+11 -1.032e+12 -3.275e+11 -9.955e+11 -3.272e+11 -9.537e+11 -3.248e+11 -9.075e+11 -3.203e+11 -8.575e+11 -3.137e+11 -8.047e+11 -3.054e+11 -7.496e+11 -2.952e+11 -6.932e+11 -2.836e+11 -6.361e+11 -2.705e+11 -5.791e+11 -2.562e+11 -5.228e+11 -2.410e+11 -4.678e+11 -2.251e+11 -4.147e+11 -2.087e+11 -3.641e+11 -1.919e+11 -3.162e+11 -1.751e+11 -2.714e+11 -1.585e+11 -2.302e+11 -1.422e+11 -1.925e+11 -1.264e+11 -1.585e+11 -1.113e+11 -1.284e+11 -9.705e+10 -1.020e+11 -8.374e+10 -7.931e+10 -7.146e+10 -6.010e+10 -6.031e+10 -4.416e+10 -5.031e+10 -3.122e+10 -4.149e+10 -2.101e+10 -3.386e+10 -1.315e+10 -2.739e+10 -7.268e+09 -2.204e+10 -2.984e+09 -1.775e+10 1.041e+08 -1.441e+10 2.369e+09 -1.188e+10 4.115e+09 -9.979e+09 5.548e+09 -8.517e+09 6.771e+09 -7.298e+09 7.785e+09 -6.196e+09 8.543e+09 -5.134e+09 8.989e+09 -4.081e+09 9.075e+09 -3.045e+09 8.784e+09 -2.050e+09 8.129e+09 -1.128e+09 7.159e+09 -3.197e+08 5.952e+09 3.420e+08 4.614e+09 8.321e+08 3.276e+09 1.141e+09 2.070e+09 1.291e+09 1.095e+09 1.368e+09 0.005 -63.841 -62.116 -60.391 -58.666 -56.941 -55.197 -53.369 -51.533 -49.732 -47.987 -46.311 -44.708 -43.178 -41.721 -40.335 -39.016 -37.763 -36.573 -35.442 -34.368 -33.348 -32.381 -31.464 -30.594 -29.770 -28.990 -28.252 -27.556 -26.899 -26.280 -25.699 -25.153 -24.643 -24.167 -23.724 -23.315 -22.937 -22.591 -22.276 -21.991 -21.737 -21.513 -21.318 -21.152 -21.016 -20.908 -20.829 -20.779 -20.759 -20.766 -20.803 -20.869 -20.963 -21.087 -21.240 -21.423 -21.636 -21.879 -22.152 -22.457 -22.793 -23.162 -23.563 -23.997 -24.466 -24.968 -25.507 -26.081 -26.693 -27.342 -28.031 -28.760 -29.530 -30.343 -31.200 -32.103 -33.052 -34.050 -35.098 -36.199 -37.354 -38.565 -39.834 -41.160 -42.544 -43.982 -45.465 -46.975 -48.478 -49.923 -51.240 -52.354 -53.221 -53.854 -54.332 -54.768 -55.288 -56.006 -57.010 -58.218 -58.904 -57.619 -54.522 -51.078 -47.898 -45.050 -42.484 -40.146 -37.994 -35.994 -34.122 -32.361 -30.696 -29.117 -27.616 -26.185 -24.818 -23.512 -22.261 -21.062 -19.913 -18.810 -17.752 -16.736 -15.760 -14.823 -13.923 -13.059 -12.230 -11.433 -10.670 -9.937 -9.235 -8.563 -7.919 -7.304 -6.716 -6.155 -5.621 -5.113 -4.630 -4.173 -3.740 -3.332 -2.948 -2.588 -2.251 -1.938 -1.649 -1.383 -1.140 -0.921 -0.725 -0.552 -0.402 -0.276 -0.173 -0.094 -0.038 -0.007 0.000 -0.018 -0.061 -0.130 -0.225 -0.346 -0.496 -0.673 -0.880 -1.116 -1.384 -1.684 -2.018 -2.387 -2.793 -3.238 -3.724 -4.253 -4.830 -5.456 -6.136 -6.875 -7.677 -8.550 -9.500 -10.536 -11.670 -12.916 -14.291 -15.816 -17.522 -19.447 -21.646 -24.200 -27.230 -30.939 -35.697 -42.305 -53.073 -75.126 -57.880 -44.798 -37.374 -32.201 -28.241 -25.043 -22.369 -20.079 -18.083 -16.321 -14.749 -13.336 -12.057 -10.894 -9.833 -8.861 -7.970 -7.151 -6.397 -5.702 -5.064 -4.476 -3.935 -3.440 -2.986 -2.572 -2.195 -1.854 -1.548 -1.274 -1.031 -0.819 -0.637 -0.483 -0.357 -0.257 -0.185 -0.138 -0.116 -0.120 -0.148 -0.200 -0.277 -0.377 -0.501 -0.648 -0.819 -1.013 -1.230 -1.471 -1.735 -2.022 -2.334 -2.669 -3.028 -3.411 -3.818 -4.250 -4.707 -5.190 -5.698 -6.232 -6.792 -7.380 -7.996 -8.640 -9.312 -10.015 -10.749 -11.513 -12.310 -13.141 -14.006 -14.907 -15.845 -16.821 -17.837 -18.896 -19.998 -21.146 -22.342 -23.589 -24.890 -26.248 -27.668 -29.153 -30.710 -32.346 -34.068 -35.886 -37.814 -39.868 -42.069 -44.444 -47.024 -49.833 -52.840 -55.798 -57.971 -58.582 -58.013 -57.141 -56.384 -55.821 -55.413 -55.084 -54.743 -54.281 -53.597 -52.628 -51.384 -49.929 -48.350 -46.725 -45.106 -43.525 -42.001 -40.541 -39.149 -37.824 -36.565 -35.369 -34.234 -33.158 -32.138 -31.171 -30.256 -29.391 -28.572 -27.799 -27.070 -26.383 -25.737 -25.130 -24.561 -24.029 -23.533 -23.072 -22.645 -22.251 -21.890 -21.560 -21.262 -20.993 -20.755 -20.546 -20.366 -20.214 -20.091 -19.995 -19.927 -19.887 -19.873 -19.886 -19.926 -19.992 -20.086 -20.205 -20.351 -20.523 -20.722 -20.947 -21.199 -21.478 -21.783 -22.115 -22.474 -22.861 -23.276 -23.718 -24.188 -24.688 -25.216 -25.773 -26.360 -26.977 -27.625 -28.304 -29.014 -29.756 -30.531 -31.338 -32.178 -33.052 -33.960 -34.902 -35.878 -36.887 -37.930 -39.006 -40.114 -41.251 -42.417 -43.607 -44.817 -46.043 -47.277 -48.512 -49.747 -50.982 -52.217 0 1 1.0 1 N5 VH 34.25 38.05 0.05 3.945e+09 -7.079e+09 4.012e+09 -6.705e+09 4.053e+09 -6.309e+09 4.066e+09 -5.895e+09 4.051e+09 -5.467e+09 4.006e+09 -5.030e+09 3.932e+09 -4.588e+09 3.828e+09 -4.145e+09 3.695e+09 -3.707e+09 3.533e+09 -3.276e+09 3.343e+09 -2.857e+09 3.129e+09 -2.454e+09 2.891e+09 -2.071e+09 2.633e+09 -1.710e+09 2.359e+09 -1.376e+09 2.073e+09 -1.072e+09 1.780e+09 -7.995e+08 1.486e+09 -5.619e+08 1.199e+09 -3.607e+08 9.246e+08 -1.970e+08 6.727e+08 -7.187e+07 4.522e+08 1.528e+07 2.727e+08 6.761e+07 1.426e+08 9.459e+07 5.648e+07 1.205e+08 -2.427e+07 1.783e+08 -1.543e+08 2.822e+08 -3.733e+08 4.296e+08 -7.060e+08 6.146e+08 -1.170e+09 8.312e+08 -1.781e+09 1.074e+09 -2.557e+09 1.339e+09 -3.509e+09 1.620e+09 -4.654e+09 1.911e+09 -6.005e+09 2.206e+09 -7.574e+09 2.499e+09 -9.371e+09 2.782e+09 -1.141e+10 3.050e+09 -1.369e+10 3.294e+09 -1.622e+10 3.509e+09 -1.900e+10 3.686e+09 -2.203e+10 3.820e+09 -2.531e+10 3.904e+09 -2.882e+10 3.931e+09 -3.257e+10 3.897e+09 -3.653e+10 3.795e+09 -4.068e+10 3.622e+09 -4.501e+10 3.373e+09 -4.949e+10 3.047e+09 -5.408e+10 2.639e+09 -5.877e+10 2.150e+09 -6.351e+10 1.579e+09 -6.827e+10 9.271e+08 -7.302e+10 1.948e+08 -7.770e+10 -6.136e+08 -8.228e+10 -1.495e+09 -8.673e+10 -2.445e+09 -9.099e+10 -3.455e+09 -9.504e+10 -4.520e+09 -9.883e+10 -5.633e+09 -1.023e+11 -6.782e+09 -1.055e+11 -7.960e+09 -1.083e+11 -9.157e+09 -1.108e+11 -1.036e+10 -1.128e+11 -1.155e+10 -1.145e+11 -1.272e+10 -1.156e+11 -1.386e+10 -1.164e+11 -1.496e+10 -1.166e+11 -1.599e+10 -1.165e+11 -1.696e+10 -1.158e+11 -1.784e+10 -1.147e+11 -1.862e+10 -1.132e+11 -1.930e+10 -1.112e+11 -1.986e+10 -1.088e+11 -2.031e+10 -1.061e+11 -2.062e+10 -1.029e+11 -2.080e+10 -9.947e+10 -2.084e+10 -9.568e+10 -2.075e+10 -9.161e+10 -2.052e+10 -8.728e+10 -2.015e+10 -8.274e+10 -1.966e+10 -7.803e+10 -1.905e+10 -7.317e+10 -1.832e+10 -6.821e+10 -1.749e+10 -6.319e+10 -1.658e+10 -5.814e+10 -1.559e+10 -5.312e+10 -1.453e+10 -4.816e+10 -1.343e+10 -4.329e+10 -1.230e+10 -3.856e+10 -1.116e+10 -3.400e+10 -1.001e+10 -2.964e+10 -8.887e+09 -2.553e+10 -7.791e+09 -2.167e+10 -6.741e+09 -1.811e+10 -5.745e+09 -1.485e+10 -4.816e+09 -1.192e+10 -3.962e+09 -9.312e+09 -3.189e+09 -7.048e+09 -2.501e+09 -5.124e+09 -1.902e+09 -3.531e+09 -1.391e+09 -2.262e+09 -9.668e+08 -1.302e+09 -6.267e+08 -6.290e+08 -3.661e+08 -2.198e+08 -1.820e+08 -2.815e+07 -8.031e+07 9.869e+07 -5.705e+07 3.250e+08 -5.442e+07 6.919e+08 -2.637e+07 1.171e+09 3.072e+07 1.731e+09 1.102e+08 2.337e+09 2.045e+08 2.962e+09 3.065e+08 3.577e+09 4.095e+08 4.156e+09 5.077e+08 4.679e+09 5.963e+08 5.127e+09 6.715e+08 5.487e+09 7.304e+08 5.749e+09 7.711e+08 5.907e+09 7.927e+08 5.959e+09 7.951e+08 5.906e+09 7.788e+08 5.754e+09 7.454e+08 5.509e+09 6.966e+08 5.183e+09 6.350e+08 4.788e+09 5.631e+08 4.339e+09 4.841e+08 3.849e+09 4.010e+08 3.336e+09 3.170e+08 2.815e+09 2.355e+08 2.301e+09 1.593e+08 1.811e+09 9.127e+07 1.358e+09 3.410e+07 9.557e+08 -1.013e+07 6.149e+08 -3.968e+07 3.460e+08 -5.361e+07 1.560e+08 -5.277e+07 4.598e+07 -4.534e+07 -1.751e+07 -5.504e+07 -1.083e+08 -9.956e+07 -2.781e+08 -1.708e+08 -5.345e+08 -2.598e+08 -8.745e+08 -3.627e+08 -1.292e+09 -4.765e+08 -1.779e+09 -5.979e+08 -2.325e+09 -7.239e+08 -2.920e+09 -8.507e+08 -3.551e+09 -9.748e+08 -4.205e+09 -1.093e+09 -4.868e+09 -1.201e+09 -5.525e+09 -1.295e+09 -6.163e+09 -1.374e+09 -6.767e+09 -1.434e+09 -7.325e+09 -1.472e+09 -7.824e+09 -1.489e+09 -8.254e+09 -1.482e+09 -8.604e+09 -1.451e+09 -8.870e+09 -1.398e+09 -9.044e+09 -1.323e+09 -9.124e+09 -1.228e+09 -9.110e+09 -1.116e+09 -9.003e+09 -9.900e+08 -8.807e+09 -8.529e+08 -8.529e+09 -7.085e+08 -8.175e+09 -5.607e+08 -7.755e+09 -4.134e+08 -7.281e+09 -2.700e+08 -6.764e+09 -1.342e+08 -6.216e+09 -8.987e+06 -5.649e+09 1.032e+08 -5.075e+09 2.004e+08 -4.506e+09 2.811e+08 -3.953e+09 3.448e+08 -3.424e+09 3.911e+08 -2.927e+09 4.208e+08 -2.469e+09 4.347e+08 -2.053e+09 4.345e+08 -1.683e+09 4.220e+08 -1.359e+09 3.993e+08 -1.081e+09 3.687e+08 -8.464e+08 3.326e+08 -6.529e+08 2.930e+08 -4.964e+08 2.517e+08 -3.726e+08 2.107e+08 -2.769e+08 1.710e+08 -2.047e+08 1.338e+08 -1.519e+08 1.001e+08 -1.149e+08 7.030e+07 -9.094e+07 4.500e+07 -7.870e+07 2.388e+07 -7.868e+07 4.709e+06 -9.327e+07 -1.758e+07 -1.263e+08 -5.035e+07 -1.833e+08 -1.016e+08 -2.718e+08 -1.789e+08 -4.014e+08 -2.895e+08 -5.840e+08 -4.413e+08 -8.335e+08 -6.420e+08 -1.165e+09 -8.995e+08 -1.595e+09 -1.222e+09 -2.142e+09 -1.618e+09 -2.823e+09 -2.095e+09 -3.658e+09 -2.659e+09 -4.665e+09 -3.317e+09 -5.860e+09 -4.074e+09 -7.261e+09 -4.933e+09 -8.881e+09 -5.897e+09 -1.073e+10 -6.964e+09 -1.282e+10 -8.134e+09 -1.515e+10 -9.402e+09 -1.773e+10 -1.076e+10 -2.054e+10 -1.220e+10 -2.358e+10 -1.371e+10 -2.683e+10 -1.527e+10 -3.027e+10 -1.687e+10 -3.387e+10 -1.848e+10 -3.759e+10 -2.010e+10 -4.140e+10 -2.169e+10 -4.526e+10 -2.323e+10 -4.910e+10 -2.470e+10 -5.290e+10 -2.609e+10 -5.657e+10 -2.735e+10 -6.008e+10 -2.847e+10 -6.335e+10 -2.943e+10 -6.635e+10 -3.021e+10 -6.899e+10 -3.079e+10 -7.125e+10 -3.116e+10 -7.308e+10 -3.130e+10 -7.443e+10 -3.122e+10 -7.527e+10 -3.091e+10 -7.559e+10 -3.037e+10 -7.536e+10 -2.961e+10 -7.459e+10 -2.864e+10 -7.328e+10 -2.748e+10 -7.145e+10 -2.613e+10 -6.913e+10 -2.463e+10 -6.634e+10 -2.299e+10 -6.314e+10 -2.124e+10 -5.956e+10 -1.942e+10 -5.569e+10 -1.754e+10 -5.157e+10 -1.564e+10 -4.727e+10 -1.375e+10 -4.287e+10 -1.189e+10 -3.843e+10 -1.010e+10 -3.401e+10 -8.395e+09 -2.970e+10 -6.803e+09 -2.555e+10 -5.343e+09 -2.161e+10 -4.030e+09 -1.794e+10 -2.876e+09 -1.458e+10 -1.891e+09 -1.156e+10 -1.075e+09 -8.913e+09 -4.297e+08 -6.644e+09 5.343e+07 -4.756e+09 3.865e+08 -3.245e+09 5.869e+08 -2.090e+09 6.796e+08 -1.258e+09 6.986e+08 -6.977e+08 6.884e+08 -3.331e+08 6.993e+08 -6.636e+07 7.655e+08 1.825e+08 8.834e+08 4.459e+08 1.022e+09 7.142e+08 1.146e+09 9.563e+08 1.228e+09 1.137e+09 1.247e+09 1.228e+09 1.195e+09 1.208e+09 1.071e+09 1.075e+09 8.838e+08 8.439e+08 6.520e+08 5.511e+08 4.054e+08 2.583e+08 1.840e+08 5.306e+07 3.820e+07 -4.522e+07 -2.426e+07 -3.993e+08 -2.277e+08 -1.270e+09 -7.127e+08 -2.863e+09 -1.570e+09 -5.407e+09 -2.891e+09 -9.155e+09 -4.773e+09 -1.437e+10 -7.309e+09 -2.134e+10 -1.060e+10 -3.036e+10 -1.473e+10 -4.171e+10 -1.978e+10 -5.569e+10 -2.584e+10 -7.259e+10 -3.297e+10 -9.263e+10 -4.121e+10 -1.160e+11 -5.060e+10 -1.431e+11 -6.116e+10 -1.738e+11 -7.289e+10 -2.082e+11 -8.575e+10 -2.466e+11 -9.972e+10 -2.887e+11 -1.147e+11 -3.345e+11 -1.306e+11 -3.839e+11 -1.474e+11 -4.365e+11 -1.648e+11 -4.920e+11 -1.828e+11 -5.500e+11 -2.011e+11 -6.101e+11 -2.197e+11 -6.717e+11 -2.381e+11 -7.342e+11 -2.564e+11 -7.981e+11 -2.786e+11 -8.615e+11 -2.988e+11 -9.229e+11 -3.156e+11 -9.821e+11 -3.312e+11 -1.038e+12 -3.454e+11 -1.091e+12 -3.580e+11 -1.140e+12 -3.687e+11 -1.183e+12 -3.774e+11 -1.220e+12 -3.837e+11 -1.251e+12 -3.877e+11 -1.274e+12 -3.892e+11 -1.290e+12 -3.880e+11 -1.297e+12 -3.842e+11 -1.296e+12 -3.777e+11 -1.287e+12 -3.685e+11 -1.268e+12 -3.567e+11 -1.241e+12 -3.424e+11 -1.205e+12 -3.259e+11 -1.161e+12 -3.073e+11 -1.109e+12 -2.869e+11 -1.050e+12 -2.650e+11 -9.854e+11 -2.419e+11 -9.154e+11 -2.180e+11 -8.411e+11 -1.937e+11 -7.639e+11 -1.694e+11 -6.849e+11 -1.454e+11 -6.053e+11 -1.222e+11 -5.267e+11 -1.002e+11 -4.501e+11 -7.974e+10 -3.768e+11 -6.106e+10 -3.082e+11 -4.448e+10 -2.451e+11 -3.019e+10 -1.884e+11 -1.830e+10 -1.390e+11 -8.913e+09 -9.723e+10 -1.978e+09 -6.337e+10 2.610e+09 -3.746e+10 5.060e+09 -1.918e+10 5.734e+09 -7.862e+09 5.297e+09 -1.867e+09 5.042e+09 2.229e+09 6.465e+09 7.911e+09 9.567e+09 1.581e+10 1.325e+10 2.495e+10 1.675e+10 3.397e+10 1.952e+10 4.152e+10 2.120e+10 4.643e+10 2.151e+10 4.778e+10 2.032e+10 4.510e+10 1.770e+10 3.844e+10 1.386e+10 2.858e+10 9.298e+09 1.717e+10 4.763e+09 6.858e+09 1.303e+09 5.232e+08 -5.825e+08 -6.367e+09 -3.877e+09 -2.832e+10 -1.382e+10 -7.592e+10 -3.309e+10 -1.596e+11 -6.484e+10 -2.920e+11 -1.129e+11 -4.882e+11 -1.815e+11 -7.652e+11 -2.756e+11 -1.143e+12 -4.008e+11 -1.645e+12 -5.633e+11 -2.296e+12 -7.697e+11 -3.125e+12 -1.028e+12 -4.164e+12 -1.346e+12 -5.447e+12 -1.731e+12 -7.012e+12 -2.195e+12 -8.902e+12 -2.747e+12 -1.116e+13 -3.396e+12 -1.383e+13 -4.154e+12 -1.697e+13 -5.032e+12 -2.062e+13 -6.042e+12 -2.485e+13 -7.195e+12 -2.971e+13 -8.503e+12 -3.526e+13 -9.978e+12 -4.156e+13 -1.163e+13 -4.868e+13 -1.348e+13 -5.667e+13 -1.552e+13 -6.560e+13 -1.778e+13 -7.553e+13 -2.026e+13 -8.653e+13 -2.298e+13 -9.867e+13 -2.595e+13 -1.120e+14 -2.917e+13 -1.265e+14 -3.265e+13 -1.424e+14 -3.639e+13 -1.596e+14 -4.041e+13 -1.781e+14 -4.469e+13 -1.981e+14 -4.924e+13 -2.195e+14 -5.406e+13 -2.424e+14 -5.915e+13 -2.667e+14 -6.451e+13 -2.925e+14 -7.013e+13 -3.198e+14 -7.600e+13 -3.486e+14 -8.211e+13 -3.788e+14 -8.846e+13 -4.105e+14 -9.502e+13 -4.435e+14 -1.018e+14 -4.778e+14 -1.088e+14 -5.134e+14 -1.159e+14 -5.503e+14 -1.232e+14 -5.882e+14 -1.306e+14 -6.271e+14 -1.381e+14 -6.670e+14 -1.457e+14 -7.077e+14 -1.534e+14 -7.491e+14 -1.611e+14 -7.911e+14 -1.688e+14 -8.335e+14 -1.765e+14 -8.762e+14 -1.842e+14 -9.191e+14 -1.917e+14 -9.620e+14 -1.992e+14 -1.005e+15 -2.065e+14 -1.047e+15 -2.136e+14 -1.089e+15 -2.206e+14 -1.130e+15 -2.272e+14 -1.171e+15 -2.337e+14 -1.210e+15 -2.398e+14 -1.248e+15 -2.456e+14 -1.285e+15 -2.510e+14 -1.321e+15 -2.560e+14 -1.354e+15 -2.606e+14 -1.386e+15 -2.645e+14 -1.416e+15 -2.679e+14 -1.444e+15 -2.707e+14 -1.469e+15 -2.731e+14 -1.492e+15 -2.749e+14 -1.512e+15 -2.763e+14 -1.530e+15 -2.771e+14 -1.545e+15 -2.773e+14 -1.558e+15 -2.771e+14 -1.567e+15 -2.763e+14 -1.573e+15 -2.750e+14 -1.577e+15 -2.731e+14 -1.577e+15 -2.708e+14 -1.575e+15 -2.680e+14 -1.569e+15 -2.648e+14 -1.561e+15 -2.611e+14 -1.550e+15 -2.569e+14 -1.535e+15 -2.524e+14 -1.519e+15 -2.475e+14 -1.499e+15 -2.422e+14 -1.477e+15 -2.366e+14 -1.452e+15 -2.307e+14 -1.425e+15 -2.246e+14 -1.396e+15 -2.182e+14 -1.365e+15 -2.116e+14 -1.331e+15 -2.048e+14 -1.296e+15 -1.979e+14 -1.260e+15 -1.908e+14 -1.222e+15 -1.837e+14 -1.183e+15 -1.765e+14 -1.143e+15 -1.692e+14 -1.102e+15 -1.620e+14 -1.060e+15 -1.547e+14 -1.018e+15 -1.475e+14 -9.751e+14 -1.403e+14 -9.323e+14 -1.332e+14 -8.894e+14 -1.262e+14 -8.467e+14 -1.193e+14 -8.043e+14 -1.126e+14 -7.623e+14 -1.060e+14 -7.209e+14 -9.957e+13 -6.804e+14 -9.335e+13 -6.405e+14 -8.731e+13 -6.016e+14 -8.147e+13 -5.637e+14 -7.584e+13 -5.268e+14 -7.043e+13 -4.910e+14 -6.524e+13 -4.565e+14 -6.029e+13 -4.233e+14 -5.556e+13 -3.914e+14 -5.108e+13 -3.609e+14 -4.683e+13 -3.317e+14 -4.282e+13 -3.041e+14 -3.905e+13 -2.779e+14 -3.551e+13 -2.531e+14 -3.220e+13 -2.298e+14 -2.912e+13 -2.080e+14 -2.625e+13 -1.875e+14 -2.360e+13 -1.685e+14 -2.114e+13 -1.508e+14 -1.889e+13 -1.345e+14 -1.682e+13 -1.194e+14 -1.493e+13 -1.057e+14 -1.320e+13 -9.305e+13 -1.164e+13 -8.157e+13 -1.022e+13 -7.118e+13 -8.946e+12 -6.181e+13 -7.798e+12 -5.339e+13 -6.770e+12 -4.587e+13 -5.854e+12 -3.919e+13 -5.039e+12 -3.327e+13 -4.317e+12 -2.808e+13 -3.682e+12 -2.353e+13 -3.123e+12 -1.958e+13 -2.634e+12 -1.616e+13 -2.210e+12 -1.324e+13 -1.841e+12 -1.074e+13 -1.524e+12 -8.635e+12 -1.252e+12 -6.869e+12 -1.021e+12 -5.402e+12 -8.249e+11 -4.196e+12 -6.605e+11 -3.214e+12 -5.233e+11 -2.425e+12 -4.097e+11 -1.798e+12 -3.166e+11 -1.307e+12 -2.410e+11 -9.296e+11 -1.803e+11 -6.444e+11 -1.324e+11 -4.335e+11 -9.501e+10 -2.814e+11 -6.637e+10 -1.750e+11 -4.491e+10 -1.033e+11 -2.922e+10 -5.698e+10 -1.810e+10 -2.883e+10 -1.052e+10 -1.295e+10 -5.616e+09 -4.896e+09 -2.657e+09 -1.411e+09 -1.050e+09 -2.433e+08 -3.085e+08 -3.775e+06 -5.148e+07 2.456e+06 1.007e+07 -7.136e+07 9.374e+07 -5.116e+08 3.631e+08 -1.897e+09 9.118e+08 -4.998e+09 1.794e+09 -1.069e+10 3.030e+09 -1.985e+10 4.605e+09 -3.333e+10 6.490e+09 -5.186e+10 8.638e+09 -7.600e+10 1.098e+10 -1.062e+11 1.346e+10 -1.426e+11 1.600e+10 -1.852e+11 1.851e+10 -2.339e+11 2.093e+10 -2.882e+11 2.319e+10 -3.474e+11 2.521e+10 -4.109e+11 2.692e+10 -4.777e+11 2.827e+10 -5.466e+11 2.920e+10 -6.166e+11 2.967e+10 -6.867e+11 2.964e+10 -7.555e+11 2.908e+10 -8.220e+11 2.792e+10 -8.851e+11 2.619e+10 -9.436e+11 2.391e+10 -9.965e+11 2.110e+10 -1.043e+12 1.778e+10 -1.083e+12 1.400e+10 -1.114e+12 9.817e+09 -1.138e+12 5.278e+09 -1.153e+12 4.666e+08 -1.160e+12 -4.542e+09 -1.159e+12 -9.672e+09 -1.149e+12 -1.483e+10 -1.131e+12 -1.992e+10 -1.106e+12 -2.488e+10 -1.073e+12 -2.962e+10 -1.034e+12 -3.404e+10 -9.901e+11 -3.810e+10 -9.410e+11 -4.172e+10 -8.878e+11 -4.485e+10 -8.315e+11 -4.745e+10 -7.728e+11 -4.949e+10 -7.128e+11 -5.095e+10 -6.521e+11 -5.183e+10 -5.916e+11 -5.212e+10 -5.320e+11 -5.185e+10 -4.740e+11 -5.104e+10 -4.181e+11 -4.972e+10 -3.650e+11 -4.795e+10 -3.151e+11 -4.576e+10 -2.687e+11 -4.321e+10 -2.261e+11 -4.037e+10 -1.875e+11 -3.729e+10 -1.529e+11 -3.403e+10 -1.225e+11 -3.068e+10 -9.604e+10 -2.727e+10 -7.352e+10 -2.389e+10 -5.471e+10 -2.060e+10 -3.937e+10 -1.744e+10 -2.717e+10 -1.449e+10 -1.782e+10 -1.180e+10 -1.093e+10 -9.427e+09 -6.093e+09 -7.442e+09 -2.883e+09 -5.915e+09 -7.955e+08 -4.897e+09 6.935e+08 -4.370e+09 2.012e+09 -4.196e+09 3.366e+09 -4.171e+09 4.747e+09 -4.129e+09 6.044e+09 -3.979e+09 7.134e+09 -3.690e+09 7.915e+09 -3.259e+09 8.312e+09 -2.709e+09 8.294e+09 -2.074e+09 7.869e+09 -1.396e+09 7.080e+09 -7.222e+08 6.009e+09 -1.002e+08 4.761e+09 4.259e+08 3.472e+09 8.220e+08 2.284e+09 1.083e+09 1.312e+09 1.270e+09 0.005 -61.823 -60.043 -58.263 -56.483 -54.703 -52.910 -51.069 -49.249 -47.486 -45.796 -44.187 -42.658 -41.206 -39.828 -38.521 -37.280 -36.102 -34.983 -33.920 -32.911 -31.953 -31.044 -30.181 -29.362 -28.586 -27.852 -27.157 -26.501 -25.882 -25.299 -24.752 -24.238 -23.759 -23.312 -22.897 -22.514 -22.162 -21.841 -21.549 -21.288 -21.056 -20.853 -20.679 -20.534 -20.418 -20.331 -20.272 -20.242 -20.241 -20.269 -20.325 -20.411 -20.526 -20.670 -20.844 -21.049 -21.284 -21.550 -21.847 -22.176 -22.538 -22.933 -23.361 -23.825 -24.323 -24.858 -25.430 -26.040 -26.689 -27.378 -28.109 -28.882 -29.699 -30.562 -31.472 -32.430 -33.439 -34.499 -35.614 -36.786 -38.015 -39.305 -40.656 -42.069 -43.544 -45.078 -46.661 -48.275 -49.887 -51.445 -52.876 -54.107 -55.089 -55.836 -56.422 -56.959 -57.567 -58.358 -59.416 -60.659 -61.357 -60.063 -56.938 -53.447 -50.205 -47.282 -44.631 -42.203 -39.955 -37.857 -35.888 -34.031 -32.272 -30.602 -29.013 -27.499 -26.053 -24.671 -23.349 -22.084 -20.871 -19.709 -18.595 -17.527 -16.502 -15.518 -14.575 -13.670 -12.802 -11.969 -11.172 -10.407 -9.675 -8.974 -8.304 -7.663 -7.051 -6.468 -5.912 -5.384 -4.882 -4.406 -3.956 -3.532 -3.132 -2.757 -2.407 -2.081 -1.779 -1.500 -1.246 -1.016 -0.809 -0.626 -0.467 -0.331 -0.219 -0.131 -0.068 -0.029 -0.014 -0.025 -0.061 -0.123 -0.211 -0.326 -0.469 -0.641 -0.841 -1.072 -1.334 -1.629 -1.957 -2.321 -2.721 -3.161 -3.642 -4.166 -4.737 -5.358 -6.032 -6.764 -7.560 -8.426 -9.368 -10.396 -11.521 -12.756 -14.118 -15.628 -17.315 -19.216 -21.383 -23.891 -26.853 -30.451 -35.004 -41.155 -50.540 -65.655 -53.162 -43.582 -36.881 -31.936 -28.069 -24.915 -22.263 -19.985 -17.996 -16.237 -14.666 -13.254 -11.975 -10.812 -9.750 -8.777 -7.885 -7.064 -6.309 -5.613 -4.973 -4.384 -3.843 -3.346 -2.891 -2.475 -2.097 -1.755 -1.447 -1.172 -0.928 -0.715 -0.531 -0.375 -0.247 -0.146 -0.072 -0.023 0.000 -0.002 -0.028 -0.078 -0.152 -0.250 -0.371 -0.516 -0.684 -0.875 -1.089 -1.326 -1.586 -1.869 -2.176 -2.507 -2.861 -3.238 -3.640 -4.066 -4.516 -4.991 -5.491 -6.017 -6.568 -7.146 -7.751 -8.383 -9.044 -9.733 -10.451 -11.200 -11.980 -12.792 -13.637 -14.515 -15.429 -16.380 -17.368 -18.396 -19.465 -20.576 -21.733 -22.938 -24.193 -25.502 -26.868 -28.296 -29.791 -31.361 -33.012 -34.755 -36.604 -38.575 -40.691 -42.978 -45.469 -48.190 -51.110 -53.985 -56.083 -56.625 -55.998 -55.080 -54.292 -53.712 -53.302 -52.988 -52.675 -52.255 -51.624 -50.720 -49.547 -48.169 -46.673 -45.132 -43.599 -42.105 -40.666 -39.291 -37.981 -36.736 -35.553 -34.432 -33.369 -32.362 -31.408 -30.506 -29.652 -28.845 -28.083 -27.365 -26.688 -26.052 -25.455 -24.896 -24.374 -23.887 -23.436 -23.018 -22.634 -22.283 -21.963 -21.674 -21.417 -21.189 -20.992 -20.823 -20.684 -20.574 -20.492 -20.438 -20.413 -20.415 -20.445 -20.503 -20.588 -20.702 -20.843 -21.012 -21.209 -21.434 -21.687 -21.968 -22.279 -22.618 -22.986 -23.384 -23.812 -24.271 -24.761 -25.283 -25.836 -26.423 -27.044 -27.699 -28.389 -29.116 -29.879 -30.682 -31.523 -32.405 -33.329 -34.296 -35.308 -36.365 -37.470 -38.623 -39.826 -41.081 -42.389 -43.750 -45.165 -46.635 -48.158 -49.733 -51.358 -53.026 -54.731 -56.443 -58.155 -59.867 -61.578 0 1 1.0 1 N6 HH 36.71 40.21 0.05 -1.759e+07 -2.902e+08 -2.948e+07 -2.631e+08 -3.934e+07 -2.366e+08 -4.727e+07 -2.109e+08 -5.334e+07 -1.862e+08 -5.769e+07 -1.629e+08 -6.045e+07 -1.409e+08 -6.181e+07 -1.206e+08 -6.192e+07 -1.019e+08 -6.096e+07 -8.486e+07 -5.912e+07 -6.953e+07 -5.657e+07 -5.589e+07 -5.347e+07 -4.387e+07 -4.997e+07 -3.338e+07 -4.623e+07 -2.433e+07 -4.234e+07 -1.662e+07 -3.842e+07 -1.009e+07 -3.455e+07 -4.610e+06 -3.078e+07 -4.541e+04 -2.715e+07 3.743e+06 -2.370e+07 6.874e+06 -2.042e+07 9.470e+06 -1.729e+07 1.164e+07 -1.431e+07 1.349e+07 -1.143e+07 1.511e+07 -8.587e+06 1.658e+07 -5.717e+06 1.795e+07 -2.733e+06 1.928e+07 4.619e+05 2.059e+07 3.961e+06 2.187e+07 7.861e+06 2.311e+07 1.225e+07 2.426e+07 1.721e+07 2.526e+07 2.279e+07 2.605e+07 2.903e+07 2.654e+07 3.594e+07 2.665e+07 4.351e+07 2.630e+07 5.173e+07 2.542e+07 6.053e+07 2.394e+07 6.983e+07 2.182e+07 7.955e+07 1.901e+07 8.958e+07 1.552e+07 9.978e+07 1.133e+07 1.100e+08 6.467e+06 1.202e+08 9.810e+05 1.301e+08 -5.062e+06 1.396e+08 -1.159e+07 1.485e+08 -1.849e+07 1.568e+08 -2.566e+07 1.642e+08 -3.298e+07 1.707e+08 -4.030e+07 1.761e+08 -4.750e+07 1.804e+08 -5.445e+07 1.835e+08 -6.100e+07 1.854e+08 -6.703e+07 1.859e+08 -7.244e+07 1.852e+08 -7.712e+07 1.832e+08 -8.100e+07 1.801e+08 -8.400e+07 1.757e+08 -8.610e+07 1.703e+08 -8.727e+07 1.640e+08 -8.753e+07 1.568e+08 -8.688e+07 1.489e+08 -8.539e+07 1.403e+08 -8.310e+07 1.314e+08 -8.009e+07 1.220e+08 -7.647e+07 1.125e+08 -7.233e+07 1.030e+08 -6.776e+07 9.353e+07 -6.289e+07 8.426e+07 -5.784e+07 7.528e+07 -5.269e+07 6.671e+07 -4.755e+07 5.860e+07 -4.252e+07 5.102e+07 -3.766e+07 4.402e+07 -3.305e+07 3.764e+07 -2.874e+07 3.187e+07 -2.477e+07 2.673e+07 -2.116e+07 2.221e+07 -1.793e+07 1.827e+07 -1.509e+07 1.489e+07 -1.262e+07 1.204e+07 -1.050e+07 9.657e+06 -8.726e+06 7.702e+06 -7.257e+06 6.122e+06 -6.066e+06 4.866e+06 -5.122e+06 3.888e+06 -4.396e+06 3.141e+06 -3.862e+06 2.586e+06 -3.497e+06 2.189e+06 -3.284e+06 1.921e+06 -3.213e+06 1.762e+06 -3.278e+06 1.696e+06 -3.483e+06 1.719e+06 -3.835e+06 1.830e+06 -4.350e+06 2.034e+06 -5.048e+06 2.343e+06 -5.952e+06 2.772e+06 -7.090e+06 3.338e+06 -8.490e+06 4.061e+06 -1.018e+07 4.964e+06 -1.219e+07 6.066e+06 -1.454e+07 7.384e+06 -1.723e+07 8.938e+06 -2.029e+07 1.074e+07 -2.370e+07 1.279e+07 -2.745e+07 1.511e+07 -3.152e+07 1.769e+07 -3.586e+07 2.053e+07 -4.041e+07 2.360e+07 -4.512e+07 2.691e+07 -4.990e+07 3.041e+07 -5.466e+07 3.409e+07 -5.931e+07 3.791e+07 -6.374e+07 4.183e+07 -6.785e+07 4.581e+07 -7.153e+07 4.980e+07 -7.469e+07 5.376e+07 -7.722e+07 5.764e+07 -7.907e+07 6.140e+07 -8.015e+07 6.498e+07 -8.043e+07 6.836e+07 -7.988e+07 7.149e+07 -7.849e+07 7.435e+07 -7.629e+07 7.692e+07 -7.331e+07 7.919e+07 -6.962e+07 8.117e+07 -6.528e+07 8.287e+07 -6.038e+07 8.432e+07 -5.502e+07 8.555e+07 -4.928e+07 8.661e+07 -4.326e+07 8.755e+07 -3.703e+07 8.842e+07 -3.065e+07 8.929e+07 -2.418e+07 9.018e+07 -1.763e+07 9.113e+07 -1.104e+07 9.214e+07 -4.405e+06 9.321e+07 2.270e+06 9.430e+07 8.962e+06 9.535e+07 1.565e+07 9.630e+07 2.228e+07 9.704e+07 2.878e+07 9.745e+07 3.504e+07 9.743e+07 4.094e+07 9.686e+07 4.632e+07 9.564e+07 5.101e+07 9.367e+07 5.485e+07 9.090e+07 5.765e+07 8.726e+07 5.927e+07 8.274e+07 5.959e+07 7.734e+07 5.851e+07 7.111e+07 5.600e+07 6.412e+07 5.210e+07 5.650e+07 4.689e+07 4.841e+07 4.057e+07 4.005e+07 3.342e+07 3.169e+07 2.580e+07 2.362e+07 1.818e+07 1.620e+07 1.114e+07 9.834e+06 5.307e+06 5.032e+06 1.271e+06 2.285e+06 -1.275e+06 8.535e+05 -4.845e+06 -1.686e+06 -1.275e+07 -7.159e+06 -2.664e+07 -1.632e+07 -4.755e+07 -2.970e+07 -7.656e+07 -4.774e+07 -1.147e+08 -7.080e+07 -1.629e+08 -9.917e+07 -2.220e+08 -1.331e+08 -2.929e+08 -1.726e+08 -3.759e+08 -2.176e+08 -4.715e+08 -2.681e+08 -5.797e+08 -3.236e+08 -7.004e+08 -3.837e+08 -8.330e+08 -4.477e+08 -9.768e+08 -5.148e+08 -1.130e+09 -5.840e+08 -1.293e+09 -6.542e+08 -1.461e+09 -7.242e+08 -1.634e+09 -7.927e+08 -1.809e+09 -8.580e+08 -1.983e+09 -9.185e+08 -2.152e+09 -9.728e+08 -2.314e+09 -1.019e+09 -2.466e+09 -1.056e+09 -2.604e+09 -1.083e+09 -2.724e+09 -1.097e+09 -2.825e+09 -1.098e+09 -2.901e+09 -1.085e+09 -2.952e+09 -1.058e+09 -2.975e+09 -1.016e+09 -2.967e+09 -9.597e+08 -2.929e+09 -8.894e+08 -2.860e+09 -8.062e+08 -2.760e+09 -7.117e+08 -2.629e+09 -6.076e+08 -2.472e+09 -4.966e+08 -2.289e+09 -3.812e+08 -2.086e+09 -2.648e+08 -1.866e+09 -1.508e+08 -1.637e+09 -4.268e+07 -1.403e+09 5.635e+07 -1.172e+09 1.438e+08 -9.527e+08 2.194e+08 -7.525e+08 2.863e+08 -5.785e+08 3.535e+08 -4.344e+08 4.375e+08 -3.162e+08 5.591e+08 -2.093e+08 7.379e+08 -9.029e+07 9.883e+08 6.664e+07 1.319e+09 2.836e+08 1.737e+09 5.773e+08 2.246e+09 9.611e+08 2.851e+09 1.444e+09 3.556e+09 2.034e+09 4.365e+09 2.737e+09 5.278e+09 3.556e+09 6.298e+09 4.493e+09 7.425e+09 5.550e+09 8.658e+09 6.724e+09 9.991e+09 8.011e+09 1.142e+10 9.407e+09 1.295e+10 1.090e+10 1.455e+10 1.249e+10 1.623e+10 1.415e+10 1.797e+10 1.589e+10 1.975e+10 1.767e+10 2.158e+10 1.949e+10 2.341e+10 2.132e+10 2.525e+10 2.316e+10 2.707e+10 2.497e+10 2.885e+10 2.674e+10 3.057e+10 2.844e+10 3.222e+10 3.007e+10 3.377e+10 3.159e+10 3.520e+10 3.299e+10 3.651e+10 3.425e+10 3.766e+10 3.535e+10 3.864e+10 3.628e+10 3.944e+10 3.703e+10 4.006e+10 3.758e+10 4.047e+10 3.793e+10 4.067e+10 3.807e+10 4.066e+10 3.800e+10 4.044e+10 3.772e+10 4.000e+10 3.723e+10 3.935e+10 3.654e+10 3.851e+10 3.567e+10 3.746e+10 3.460e+10 3.624e+10 3.338e+10 3.485e+10 3.200e+10 3.331e+10 3.048e+10 3.164e+10 2.885e+10 2.985e+10 2.712e+10 2.797e+10 2.532e+10 2.602e+10 2.347e+10 2.402e+10 2.158e+10 2.199e+10 1.969e+10 1.997e+10 1.781e+10 1.796e+10 1.595e+10 1.598e+10 1.415e+10 1.407e+10 1.241e+10 1.223e+10 1.075e+10 1.048e+10 9.182e+09 8.845e+09 7.724e+09 7.328e+09 6.383e+09 5.941e+09 5.166e+09 4.696e+09 4.079e+09 3.598e+09 3.125e+09 2.649e+09 2.305e+09 1.852e+09 1.619e+09 1.206e+09 1.063e+09 7.057e+08 6.323e+08 3.467e+08 3.210e+08 1.203e+08 1.205e+08 1.652e+07 2.120e+07 -2.377e+07 -9.504e+06 -1.313e+08 -8.235e+07 -3.223e+08 -2.198e+08 -5.829e+08 -4.115e+08 -8.979e+08 -6.451e+08 -1.252e+09 -9.083e+08 -1.630e+09 -1.189e+09 -2.018e+09 -1.475e+09 -2.401e+09 -1.756e+09 -2.767e+09 -2.023e+09 -3.104e+09 -2.267e+09 -3.404e+09 -2.482e+09 -3.656e+09 -2.661e+09 -3.857e+09 -2.800e+09 -4.001e+09 -2.897e+09 -4.086e+09 -2.951e+09 -4.111e+09 -2.961e+09 -4.079e+09 -2.929e+09 -3.992e+09 -2.857e+09 -3.854e+09 -2.750e+09 -3.671e+09 -2.612e+09 -3.430e+09 -2.524e+09 -3.198e+09 -2.306e+09 -2.924e+09 -2.103e+09 -2.635e+09 -1.891e+09 -2.340e+09 -1.676e+09 -2.044e+09 -1.462e+09 -1.756e+09 -1.254e+09 -1.482e+09 -1.057e+09 -1.225e+09 -8.745e+08 -9.916e+08 -7.085e+08 -7.835e+08 -5.610e+08 -6.022e+08 -4.330e+08 -4.489e+08 -3.247e+08 -3.229e+08 -2.357e+08 -2.225e+08 -1.646e+08 -1.458e+08 -1.100e+08 -8.972e+07 -6.966e+07 -5.100e+07 -4.130e+07 -2.617e+07 -2.260e+07 -1.169e+07 -1.118e+07 -4.300e+06 -4.890e+06 -1.203e+06 -1.886e+06 -2.402e+05 -7.023e+05 -8.475e+04 -3.532e+05 -3.185e+05 -4.158e+05 -1.499e+06 -1.059e+06 -5.326e+06 -2.955e+06 -1.453e+07 -7.283e+06 -3.285e+07 -1.570e+07 -6.491e+07 -3.024e+07 -1.159e+08 -5.315e+07 -1.917e+08 -8.687e+07 -2.983e+08 -1.338e+08 -4.414e+08 -1.961e+08 -6.266e+08 -2.757e+08 -8.586e+08 -3.740e+08 -1.141e+09 -4.918e+08 -1.475e+09 -6.290e+08 -1.862e+09 -7.850e+08 -2.299e+09 -9.578e+08 -2.782e+09 -1.145e+09 -3.306e+09 -1.343e+09 -3.861e+09 -1.547e+09 -4.435e+09 -1.751e+09 -5.014e+09 -1.950e+09 -5.581e+09 -2.136e+09 -6.120e+09 -2.303e+09 -6.611e+09 -2.444e+09 -7.035e+09 -2.552e+09 -7.373e+09 -2.620e+09 -7.608e+09 -2.643e+09 -7.723e+09 -2.618e+09 -7.705e+09 -2.542e+09 -7.547e+09 -2.414e+09 -7.244e+09 -2.237e+09 -6.799e+09 -2.013e+09 -6.221e+09 -1.751e+09 -5.527e+09 -1.460e+09 -4.739e+09 -1.152e+09 -3.890e+09 -8.413e+08 -3.019e+09 -5.459e+08 -2.172e+09 -2.839e+08 -1.401e+09 -7.512e+07 -7.640e+08 6.285e+07 -3.171e+08 1.276e+08 -5.910e+07 1.831e+08 1.938e+08 3.626e+08 7.136e+08 7.386e+08 1.636e+09 1.306e+09 3.012e+09 2.064e+09 4.870e+09 3.014e+09 7.220e+09 4.155e+09 1.005e+10 5.475e+09 1.332e+10 6.959e+09 1.698e+10 8.580e+09 2.094e+10 1.030e+10 2.509e+10 1.209e+10 2.928e+10 1.388e+10 3.336e+10 1.562e+10 3.713e+10 1.725e+10 4.039e+10 1.869e+10 4.295e+10 1.988e+10 4.460e+10 2.075e+10 4.513e+10 2.123e+10 4.439e+10 2.124e+10 4.227e+10 2.075e+10 3.875e+10 1.972e+10 3.388e+10 1.815e+10 2.786e+10 1.607e+10 2.108e+10 1.353e+10 1.408e+10 1.066e+10 7.659e+09 7.689e+09 2.686e+09 5.058e+09 -9.075e+08 3.671e+09 -6.203e+09 3.890e+09 -1.789e+10 4.558e+09 -3.986e+10 4.219e+09 -7.580e+10 1.938e+09 -1.299e+11 -3.078e+09 -2.070e+11 -1.166e+10 -3.130e+11 -2.475e+10 -4.544e+11 -4.336e+10 -6.388e+11 -6.862e+10 -8.750e+11 -1.018e+11 -1.173e+12 -1.442e+11 -1.542e+12 -1.973e+11 -1.997e+12 -2.626e+11 -2.549e+12 -3.418e+11 -3.213e+12 -4.365e+11 -4.006e+12 -5.485e+11 -4.946e+12 -6.795e+11 -6.049e+12 -8.314e+11 -7.338e+12 -1.006e+12 -8.834e+12 -1.205e+12 -1.056e+13 -1.430e+12 -1.254e+13 -1.683e+12 -1.480e+13 -1.965e+12 -1.736e+13 -2.277e+12 -2.026e+13 -2.621e+12 -2.352e+13 -2.998e+12 -2.717e+13 -3.405e+12 -3.124e+13 -3.842e+12 -3.577e+13 -4.308e+12 -4.077e+13 -4.804e+12 -4.629e+13 -5.329e+12 -5.235e+13 -5.883e+12 -5.898e+13 -6.462e+12 -6.622e+13 -7.064e+12 -7.409e+13 -7.686e+12 -8.261e+13 -8.325e+12 -9.183e+13 -8.976e+12 -1.017e+14 -9.635e+12 -1.124e+14 -1.030e+13 -1.238e+14 -1.096e+13 -1.359e+14 -1.160e+13 -1.489e+14 -1.224e+13 -1.626e+14 -1.285e+13 -1.771e+14 -1.343e+13 -1.924e+14 -1.397e+13 -2.085e+14 -1.447e+13 -2.254e+14 -1.491e+13 -2.430e+14 -1.529e+13 -2.615e+14 -1.559e+13 -2.806e+14 -1.581e+13 -3.005e+14 -1.595e+13 -3.210e+14 -1.598e+13 -3.422e+14 -1.591e+13 -3.639e+14 -1.572e+13 -3.863e+14 -1.541e+13 -4.091e+14 -1.497e+13 -4.323e+14 -1.439e+13 -4.559e+14 -1.366e+13 -4.799e+14 -1.278e+13 -5.040e+14 -1.174e+13 -5.284e+14 -1.054e+13 -5.528e+14 -9.181e+12 -5.772e+14 -7.651e+12 -6.015e+14 -5.953e+12 -6.256e+14 -4.085e+12 -6.494e+14 -2.049e+12 -6.730e+14 1.507e+11 -6.963e+14 2.506e+12 -7.191e+14 5.017e+12 -7.413e+14 7.684e+12 -7.627e+14 1.050e+13 -7.834e+14 1.345e+13 -8.031e+14 1.654e+13 -8.219e+14 1.975e+13 -8.396e+14 2.306e+13 -8.561e+14 2.648e+13 -8.714e+14 2.997e+13 -8.854e+14 3.354e+13 -8.980e+14 3.715e+13 -9.092e+14 4.080e+13 -9.189e+14 4.447e+13 -9.270e+14 4.814e+13 -9.336e+14 5.180e+13 -9.386e+14 5.541e+13 -9.419e+14 5.897e+13 -9.437e+14 6.246e+13 -9.437e+14 6.586e+13 -9.421e+14 6.915e+13 -9.388e+14 7.231e+13 -9.339e+14 7.532e+13 -9.274e+14 7.818e+13 -9.193e+14 8.086e+13 -9.097e+14 8.335e+13 -8.985e+14 8.564e+13 -8.859e+14 8.771e+13 -8.719e+14 8.956e+13 -8.566e+14 9.117e+13 -8.400e+14 9.254e+13 -8.222e+14 9.366e+13 -8.033e+14 9.453e+13 -7.834e+14 9.514e+13 -7.626e+14 9.550e+13 -7.409e+14 9.560e+13 -7.184e+14 9.545e+13 -6.953e+14 9.505e+13 -6.717e+14 9.440e+13 -6.476e+14 9.351e+13 -6.232e+14 9.239e+13 -5.986e+14 9.104e+13 -5.737e+14 8.948e+13 -5.488e+14 8.773e+13 -5.238e+14 8.580e+13 -4.990e+14 8.369e+13 -4.743e+14 8.143e+13 -4.498e+14 7.903e+13 -4.256e+14 7.650e+13 -4.018e+14 7.387e+13 -3.785e+14 7.113e+13 -3.557e+14 6.832e+13 -3.334e+14 6.544e+13 -3.118e+14 6.252e+13 -2.909e+14 5.956e+13 -2.706e+14 5.659e+13 -2.511e+14 5.361e+13 -2.324e+14 5.064e+13 -2.145e+14 4.770e+13 -1.974e+14 4.479e+13 -1.811e+14 4.193e+13 -1.657e+14 3.913e+13 -1.511e+14 3.640e+13 -1.373e+14 3.375e+13 -1.244e+14 3.118e+13 -1.123e+14 2.871e+13 -1.010e+14 2.633e+13 -9.055e+13 2.406e+13 -8.083e+13 2.190e+13 -7.185e+13 1.986e+13 -6.360e+13 1.792e+13 -5.604e+13 1.611e+13 -4.914e+13 1.440e+13 -4.289e+13 1.282e+13 -3.723e+13 1.135e+13 -3.214e+13 9.996e+12 -2.757e+13 8.752e+12 -2.351e+13 7.615e+12 -1.989e+13 6.580e+12 -1.671e+13 5.646e+12 -1.393e+13 4.808e+12 -1.150e+13 4.058e+12 -9.403e+12 3.394e+12 -7.603e+12 2.810e+12 -6.069e+12 2.299e+12 -4.776e+12 1.857e+12 -3.698e+12 1.478e+12 -2.807e+12 1.157e+12 -2.084e+12 8.872e+11 -1.504e+12 6.645e+11 -1.048e+12 4.833e+11 -6.987e+11 3.389e+11 -4.386e+11 2.265e+11 -2.525e+11 1.418e+11 -1.274e+11 8.073e+10 -5.114e+10 3.956e+10 -1.273e+10 1.510e+10 2.478e+09 5.193e+09 1.791e+10 1.346e+09 4.510e+10 -5.459e+09 8.135e+10 -1.726e+10 1.221e+11 -3.254e+10 1.636e+11 -4.977e+10 2.032e+11 -6.760e+10 2.386e+11 -8.492e+10 2.683e+11 -1.009e+11 2.916e+11 -1.148e+11 3.078e+11 -1.263e+11 3.169e+11 -1.349e+11 3.192e+11 -1.407e+11 3.151e+11 -1.435e+11 3.053e+11 -1.436e+11 2.907e+11 -1.409e+11 2.719e+11 -1.360e+11 2.501e+11 -1.289e+11 2.260e+11 -1.202e+11 2.007e+11 -1.101e+11 1.748e+11 -9.900e+10 1.491e+11 -8.734e+10 1.244e+11 -7.548e+10 1.011e+11 -6.373e+10 7.971e+10 -5.239e+10 6.064e+10 -4.174e+10 4.408e+10 -3.200e+10 3.018e+10 -2.336e+10 1.902e+10 -1.598e+10 1.063e+10 -9.989e+09 4.801e+09 -5.419e+09 1.376e+09 -2.309e+09 -2.866e+07 -6.932e+08 -1.074e+09 -1.514e+08 -3.447e+09 9.032e+08 -7.163e+09 2.991e+09 -1.193e+10 6.086e+09 -1.741e+10 1.005e+10 -2.333e+10 1.473e+10 -2.941e+10 1.996e+10 -3.540e+10 2.557e+10 -4.105e+10 3.140e+10 -4.621e+10 3.729e+10 0.005 -58.953 -56.758 -54.563 -52.367 -50.231 -48.289 -46.502 -44.843 -43.291 -41.833 -40.458 -39.159 -37.928 -36.760 -35.650 -34.596 -33.593 -32.639 -31.732 -30.869 -30.049 -29.270 -28.530 -27.829 -27.164 -26.535 -25.941 -25.380 -24.853 -24.358 -23.894 -23.462 -23.060 -22.688 -22.345 -22.032 -21.747 -21.491 -21.263 -21.063 -20.891 -20.746 -20.628 -20.538 -20.476 -20.441 -20.434 -20.454 -20.503 -20.579 -20.684 -20.817 -20.979 -21.171 -21.392 -21.643 -21.924 -22.237 -22.582 -22.959 -23.369 -23.814 -24.293 -24.808 -25.360 -25.951 -26.581 -27.252 -27.967 -28.727 -29.534 -30.392 -31.303 -32.271 -33.301 -34.399 -35.572 -36.828 -38.179 -39.641 -41.236 -42.994 -44.959 -47.205 -49.852 -53.136 -57.599 -64.505 -67.917 -63.442 -59.005 -56.540 -55.034 -54.112 -53.614 -53.467 -53.645 -54.139 -54.902 -55.676 -55.734 -54.316 -51.684 -48.682 -45.800 -43.159 -40.749 -38.537 -36.488 -34.579 -32.787 -31.097 -29.498 -27.980 -26.535 -25.156 -23.839 -22.580 -21.374 -20.218 -19.109 -18.046 -17.026 -16.047 -15.106 -14.204 -13.337 -12.505 -11.707 -10.942 -10.208 -9.505 -8.832 -8.188 -7.572 -6.984 -6.423 -5.888 -5.379 -4.896 -4.438 -4.005 -3.596 -3.212 -2.851 -2.514 -2.201 -1.910 -1.643 -1.400 -1.179 -0.981 -0.806 -0.655 -0.527 -0.422 -0.340 -0.282 -0.249 -0.239 -0.254 -0.294 -0.360 -0.451 -0.569 -0.714 -0.888 -1.090 -1.322 -1.584 -1.879 -2.207 -2.570 -2.969 -3.407 -3.886 -4.407 -4.975 -5.592 -6.263 -6.991 -7.781 -8.641 -9.577 -10.598 -11.716 -12.944 -14.298 -15.801 -17.482 -19.380 -21.551 -24.077 -27.087 -30.804 -35.676 -42.891 -58.751 -53.000 -50.423 -46.421 -39.288 -33.703 -29.442 -26.041 -23.223 -20.828 -18.750 -16.922 -15.297 -13.838 -12.520 -11.323 -10.230 -9.231 -8.313 -7.470 -6.693 -5.977 -5.317 -4.709 -4.150 -3.635 -3.162 -2.729 -2.334 -1.975 -1.649 -1.357 -1.096 -0.865 -0.663 -0.489 -0.343 -0.224 -0.130 -0.062 -0.019 0.000 -0.005 -0.034 -0.086 -0.162 -0.260 -0.380 -0.524 -0.689 -0.877 -1.087 -1.319 -1.574 -1.850 -2.149 -2.470 -2.814 -3.181 -3.570 -3.982 -4.417 -4.876 -5.359 -5.865 -6.396 -6.952 -7.533 -8.140 -8.773 -9.433 -10.120 -10.835 -11.578 -12.351 -13.154 -13.988 -14.854 -15.753 -16.686 -17.653 -18.658 -19.700 -20.782 -21.906 -23.072 -24.285 -25.546 -26.858 -28.225 -29.651 -31.141 -32.702 -34.339 -36.061 -37.879 -39.805 -41.854 -44.042 -46.384 -48.889 -51.534 -54.209 -56.620 -58.266 -58.766 -58.235 -57.070 -55.560 -53.852 -52.044 -50.210 -48.407 -46.667 -45.008 -43.434 -41.945 -40.536 -39.204 -37.942 -36.746 -35.612 -34.534 -33.511 -32.538 -31.613 -30.735 -29.900 -29.107 -28.355 -27.641 -26.966 -26.326 -25.723 -25.154 -24.619 -24.117 -23.647 -23.209 -22.801 -22.424 -22.076 -21.758 -21.469 -21.208 -20.975 -20.770 -20.592 -20.441 -20.317 -20.220 -20.150 -20.105 -20.087 -20.095 -20.128 -20.188 -20.273 -20.384 -20.522 -20.685 -20.874 -21.089 -21.331 -21.598 -21.892 -22.213 -22.561 -22.937 -23.340 -23.772 -24.232 -24.721 -25.239 -25.788 -26.366 -26.976 -27.616 -28.289 -28.994 -29.733 -30.505 -31.312 -32.153 -33.030 -33.943 -34.893 -35.880 -36.903 -37.964 -39.061 -40.195 -41.364 -42.566 -43.799 -45.060 -46.345 -47.649 -48.963 -50.279 -51.586 -52.890 -54.193 -55.497 0 1 1.0 1 N6 HV 36.71 40.21 0.05 -5.298e+08 -5.114e+08 -4.896e+08 -4.328e+08 -4.490e+08 -3.607e+08 -4.087e+08 -2.953e+08 -3.691e+08 -2.368e+08 -3.309e+08 -1.851e+08 -2.943e+08 -1.402e+08 -2.597e+08 -1.016e+08 -2.275e+08 -6.898e+07 -1.978e+08 -4.193e+07 -1.707e+08 -1.984e+07 -1.462e+08 -2.146e+06 -1.243e+08 1.177e+07 -1.048e+08 2.251e+07 -8.761e+07 3.060e+07 -7.250e+07 3.653e+07 -5.914e+07 4.077e+07 -4.731e+07 4.367e+07 -3.674e+07 4.550e+07 -2.720e+07 4.646e+07 -1.850e+07 4.672e+07 -1.048e+07 4.640e+07 -2.969e+06 4.560e+07 4.165e+06 4.439e+07 1.107e+07 4.283e+07 1.791e+07 4.094e+07 2.482e+07 3.873e+07 3.197e+07 3.613e+07 3.951e+07 3.307e+07 4.755e+07 2.940e+07 5.617e+07 2.499e+07 6.543e+07 1.965e+07 7.531e+07 1.323e+07 8.578e+07 5.571e+06 9.678e+07 -3.463e+06 1.082e+08 -1.396e+07 1.199e+08 -2.598e+07 1.317e+08 -3.956e+07 1.436e+08 -5.466e+07 1.553e+08 -7.123e+07 1.667e+08 -8.917e+07 1.777e+08 -1.084e+08 1.881e+08 -1.286e+08 1.979e+08 -1.497e+08 2.069e+08 -1.714e+08 2.150e+08 -1.934e+08 2.222e+08 -2.155e+08 2.284e+08 -2.374e+08 2.335e+08 -2.587e+08 2.376e+08 -2.790e+08 2.404e+08 -2.981e+08 2.421e+08 -3.156e+08 2.426e+08 -3.313e+08 2.419e+08 -3.447e+08 2.401e+08 -3.557e+08 2.370e+08 -3.641e+08 2.328e+08 -3.696e+08 2.275e+08 -3.722e+08 2.211e+08 -3.718e+08 2.137e+08 -3.684e+08 2.053e+08 -3.620e+08 1.961e+08 -3.530e+08 1.861e+08 -3.413e+08 1.754e+08 -3.273e+08 1.642e+08 -3.112e+08 1.526e+08 -2.934e+08 1.408e+08 -2.742e+08 1.288e+08 -2.540e+08 1.169e+08 -2.332e+08 1.052e+08 -2.122e+08 9.380e+07 -1.913e+08 8.286e+07 -1.709e+08 7.251e+07 -1.512e+08 6.282e+07 -1.325e+08 5.386e+07 -1.149e+08 4.570e+07 -9.877e+07 3.836e+07 -8.406e+07 3.184e+07 -7.083e+07 2.613e+07 -5.914e+07 2.120e+07 -4.894e+07 1.700e+07 -4.015e+07 1.348e+07 -3.272e+07 1.056e+07 -2.651e+07 8.185e+06 -2.141e+07 6.277e+06 -1.729e+07 4.766e+06 -1.403e+07 3.583e+06 -1.149e+07 2.671e+06 -9.576e+06 1.971e+06 -8.183e+06 1.433e+06 -7.230e+06 1.017e+06 -6.658e+06 6.849e+05 -6.423e+06 4.063e+05 -6.505e+06 1.566e+05 -6.903e+06 -8.416e+04 -7.632e+06 -3.317e+05 -8.728e+06 -5.971e+05 -1.024e+07 -8.879e+05 -1.221e+07 -1.208e+06 -1.473e+07 -1.556e+06 -1.785e+07 -1.927e+06 -2.165e+07 -2.308e+06 -2.620e+07 -2.681e+06 -3.154e+07 -3.022e+06 -3.772e+07 -3.297e+06 -4.478e+07 -3.464e+06 -5.271e+07 -3.476e+06 -6.150e+07 -3.275e+06 -7.110e+07 -2.799e+06 -8.145e+07 -1.985e+06 -9.243e+07 -7.645e+05 -1.039e+08 9.262e+05 -1.158e+08 3.145e+06 -1.278e+08 5.944e+06 -1.397e+08 9.360e+06 -1.515e+08 1.341e+07 -1.627e+08 1.811e+07 -1.732e+08 2.343e+07 -1.827e+08 2.933e+07 -1.910e+08 3.576e+07 -1.980e+08 4.263e+07 -2.034e+08 4.984e+07 -2.071e+08 5.728e+07 -2.090e+08 6.483e+07 -2.090e+08 7.234e+07 -2.071e+08 7.970e+07 -2.034e+08 8.679e+07 -1.980e+08 9.347e+07 -1.909e+08 9.968e+07 -1.824e+08 1.053e+08 -1.726e+08 1.104e+08 -1.618e+08 1.148e+08 -1.503e+08 1.186e+08 -1.381e+08 1.219e+08 -1.257e+08 1.246e+08 -1.131e+08 1.269e+08 -1.006e+08 1.289e+08 -8.834e+07 1.306e+08 -7.638e+07 1.321e+08 -6.483e+07 1.335e+08 -5.371e+07 1.348e+08 -4.304e+07 1.360e+08 -3.284e+07 1.370e+08 -2.310e+07 1.378e+08 -1.383e+07 1.381e+08 -5.088e+06 1.379e+08 3.058e+06 1.369e+08 1.052e+07 1.351e+08 1.716e+07 1.322e+08 2.284e+07 1.280e+08 2.743e+07 1.225e+08 3.078e+07 1.155e+08 3.279e+07 1.071e+08 3.338e+07 9.737e+07 3.253e+07 8.635e+07 3.030e+07 7.431e+07 2.681e+07 6.157e+07 2.230e+07 4.858e+07 1.710e+07 3.587e+07 1.165e+07 2.410e+07 6.485e+06 1.406e+07 2.235e+06 6.608e+06 -5.815e+05 2.235e+06 -2.504e+06 -9.788e+05 -6.251e+06 -7.339e+06 -1.486e+07 -1.972e+07 -2.960e+07 -3.943e+07 -5.150e+07 -6.749e+07 -8.169e+07 -1.047e+08 -1.213e+08 -1.518e+08 -1.713e+08 -2.093e+08 -2.327e+08 -2.774e+08 -3.062e+08 -3.562e+08 -3.924e+08 -4.454e+08 -4.917e+08 -5.446e+08 -6.042e+08 -6.528e+08 -7.294e+08 -7.690e+08 -8.671e+08 -8.919e+08 -1.016e+09 -1.020e+09 -1.175e+09 -1.150e+09 -1.343e+09 -1.282e+09 -1.517e+09 -1.412e+09 -1.694e+09 -1.538e+09 -1.874e+09 -1.658e+09 -2.051e+09 -1.769e+09 -2.224e+09 -1.868e+09 -2.390e+09 -1.954e+09 -2.544e+09 -2.023e+09 -2.684e+09 -2.073e+09 -2.806e+09 -2.103e+09 -2.908e+09 -2.112e+09 -2.987e+09 -2.098e+09 -3.039e+09 -2.059e+09 -3.064e+09 -1.997e+09 -3.059e+09 -1.912e+09 -3.024e+09 -1.803e+09 -2.958e+09 -1.673e+09 -2.862e+09 -1.524e+09 -2.737e+09 -1.358e+09 -2.584e+09 -1.179e+09 -2.406e+09 -9.913e+08 -2.208e+09 -7.993e+08 -1.993e+09 -6.084e+08 -1.766e+09 -4.240e+08 -1.535e+09 -2.516e+08 -1.305e+09 -9.571e+07 -1.085e+09 4.120e+07 -8.835e+08 1.609e+08 -7.090e+08 2.725e+08 -5.676e+08 3.950e+08 -4.591e+08 5.547e+08 -3.727e+08 7.788e+08 -2.878e+08 1.089e+09 -1.797e+08 1.499e+09 -2.668e+07 2.019e+09 1.881e+08 2.656e+09 4.775e+08 3.414e+09 8.506e+08 4.298e+09 1.314e+09 5.309e+09 1.873e+09 6.448e+09 2.529e+09 7.712e+09 3.285e+09 9.101e+09 4.141e+09 1.061e+10 5.094e+09 1.222e+10 6.138e+09 1.394e+10 7.270e+09 1.575e+10 8.482e+09 1.764e+10 9.763e+09 1.959e+10 1.111e+10 2.159e+10 1.249e+10 2.362e+10 1.392e+10 2.567e+10 1.537e+10 2.771e+10 1.682e+10 2.973e+10 1.826e+10 3.171e+10 1.968e+10 3.363e+10 2.106e+10 3.547e+10 2.238e+10 3.721e+10 2.363e+10 3.883e+10 2.480e+10 4.032e+10 2.586e+10 4.165e+10 2.682e+10 4.282e+10 2.765e+10 4.381e+10 2.835e+10 4.460e+10 2.891e+10 4.518e+10 2.932e+10 4.554e+10 2.958e+10 4.567e+10 2.968e+10 4.558e+10 2.962e+10 4.524e+10 2.940e+10 4.467e+10 2.903e+10 4.386e+10 2.851e+10 4.281e+10 2.784e+10 4.154e+10 2.703e+10 4.005e+10 2.609e+10 3.836e+10 2.503e+10 3.649e+10 2.386e+10 3.445e+10 2.259e+10 3.227e+10 2.124e+10 2.997e+10 1.983e+10 2.758e+10 1.837e+10 2.513e+10 1.687e+10 2.266e+10 1.536e+10 2.020e+10 1.384e+10 1.777e+10 1.235e+10 1.541e+10 1.089e+10 1.315e+10 9.474e+09 1.101e+10 8.124e+09 9.026e+09 6.849e+09 7.212e+09 5.665e+09 5.588e+09 4.580e+09 4.167e+09 3.604e+09 2.958e+09 2.744e+09 1.966e+09 2.004e+09 1.186e+09 1.387e+09 6.153e+08 8.941e+08 2.371e+08 5.264e+08 2.226e+07 2.846e+08 -1.027e+08 1.642e+08 -2.625e+08 1.090e+08 -5.268e+08 3.740e+07 -8.940e+08 -8.739e+07 -1.342e+09 -2.685e+08 -1.847e+09 -4.979e+08 -2.384e+09 -7.635e+08 -2.931e+09 -1.053e+09 -3.469e+09 -1.354e+09 -3.978e+09 -1.654e+09 -4.444e+09 -1.942e+09 -4.854e+09 -2.208e+09 -5.198e+09 -2.444e+09 -5.469e+09 -2.643e+09 -5.664e+09 -2.801e+09 -5.779e+09 -2.912e+09 -5.817e+09 -2.977e+09 -5.779e+09 -2.995e+09 -5.671e+09 -2.967e+09 -5.499e+09 -2.897e+09 -5.270e+09 -2.788e+09 -4.992e+09 -2.646e+09 -4.673e+09 -2.475e+09 -4.323e+09 -2.283e+09 -3.954e+09 -2.099e+09 -3.572e+09 -1.893e+09 -3.182e+09 -1.669e+09 -2.796e+09 -1.448e+09 -2.420e+09 -1.235e+09 -2.061e+09 -1.032e+09 -1.724e+09 -8.457e+08 -1.415e+09 -6.771e+08 -1.135e+09 -5.282e+08 -8.883e+08 -4.001e+08 -6.752e+08 -2.929e+08 -4.959e+08 -2.059e+08 -3.496e+08 -1.378e+08 -2.344e+08 -8.663e+07 -1.473e+08 -5.022e+07 -8.513e+07 -2.604e+07 -4.368e+07 -1.140e+07 -1.868e+07 -3.694e+06 -5.789e+06 -5.365e+05 -8.260e+05 1.698e+05 2.075e+05 1.766e+05 1.073e+06 2.857e+05 1.611e+06 -4.728e+04 1.304e+06 -7.614e+05 3.763e+05 -2.211e+06 -2.579e+06 -6.554e+06 -1.205e+07 -1.689e+07 -3.402e+07 -3.651e+07 -7.573e+07 -6.923e+07 -1.456e+08 -1.192e+08 -2.524e+08 -1.908e+08 -4.058e+08 -2.882e+08 -6.149e+08 -4.154e+08 -8.878e+08 -5.758e+08 -1.231e+09 -7.719e+08 -1.651e+09 -1.006e+09 -2.148e+09 -1.277e+09 -2.722e+09 -1.584e+09 -3.370e+09 -1.925e+09 -4.081e+09 -2.295e+09 -4.846e+09 -2.688e+09 -5.651e+09 -3.095e+09 -6.474e+09 -3.508e+09 -7.295e+09 -3.914e+09 -8.091e+09 -4.303e+09 -8.834e+09 -4.661e+09 -9.499e+09 -4.975e+09 -1.006e+10 -5.232e+09 -1.049e+10 -5.420e+09 -1.078e+10 -5.529e+09 -1.089e+10 -5.550e+09 -1.083e+10 -5.477e+09 -1.058e+10 -5.307e+09 -1.013e+10 -5.040e+09 -9.510e+09 -4.681e+09 -8.717e+09 -4.240e+09 -7.777e+09 -3.729e+09 -6.723e+09 -3.166e+09 -5.591e+09 -2.573e+09 -4.426e+09 -1.975e+09 -3.285e+09 -1.403e+09 -2.223e+09 -8.868e+08 -1.304e+09 -4.611e+08 -5.961e+08 -1.599e+08 -1.652e+08 -6.883e+06 4.944e+07 9.377e+07 3.911e+08 3.555e+08 1.176e+09 8.753e+08 2.471e+09 1.664e+09 4.312e+09 2.733e+09 6.719e+09 4.087e+09 9.694e+09 5.720e+09 1.321e+10 7.615e+09 1.723e+10 9.746e+09 2.167e+10 1.207e+10 2.642e+10 1.454e+10 3.136e+10 1.709e+10 3.632e+10 1.964e+10 4.111e+10 2.211e+10 4.550e+10 2.441e+10 4.927e+10 2.643e+10 5.217e+10 2.808e+10 5.396e+10 2.924e+10 5.441e+10 2.984e+10 5.335e+10 2.976e+10 5.064e+10 2.896e+10 4.626e+10 2.739e+10 4.029e+10 2.505e+10 3.299e+10 2.198e+10 2.480e+10 1.831e+10 1.641e+10 1.422e+10 8.751e+09 1.004e+10 2.869e+09 6.405e+09 -1.412e+09 4.404e+09 -7.884e+09 4.215e+09 -2.214e+10 4.011e+09 -4.875e+10 1.665e+09 -9.200e+10 -4.313e+09 -1.568e+11 -1.530e+10 -2.487e+11 -3.279e+10 -3.745e+11 -5.852e+10 -5.417e+11 -9.442e+10 -7.587e+11 -1.426e+11 -1.036e+12 -2.057e+11 -1.383e+12 -2.862e+11 -1.812e+12 -3.872e+11 -2.338e+12 -5.120e+11 -2.974e+12 -6.639e+11 -3.737e+12 -8.468e+11 -4.643e+12 -1.065e+12 -5.712e+12 -1.322e+12 -6.962e+12 -1.623e+12 -8.417e+12 -1.972e+12 -1.010e+13 -2.375e+12 -1.203e+13 -2.836e+12 -1.424e+13 -3.360e+12 -1.675e+13 -3.953e+12 -1.959e+13 -4.619e+12 -2.279e+13 -5.364e+12 -2.638e+13 -6.193e+12 -3.038e+13 -7.108e+12 -3.484e+13 -8.112e+12 -3.978e+13 -9.210e+12 -4.522e+13 -1.041e+13 -5.122e+13 -1.171e+13 -5.778e+13 -1.311e+13 -6.495e+13 -1.463e+13 -7.275e+13 -1.626e+13 -8.122e+13 -1.800e+13 -9.036e+13 -1.985e+13 -1.002e+14 -2.183e+13 -1.108e+14 -2.392e+13 -1.222e+14 -2.612e+13 -1.343e+14 -2.844e+13 -1.472e+14 -3.087e+13 -1.609e+14 -3.341e+13 -1.754e+14 -3.606e+13 -1.907e+14 -3.881e+13 -2.068e+14 -4.165e+13 -2.237e+14 -4.459e+13 -2.414e+14 -4.762e+13 -2.598e+14 -5.072e+13 -2.790e+14 -5.389e+13 -2.989e+14 -5.712e+13 -3.194e+14 -6.040e+13 -3.407e+14 -6.372e+13 -3.624e+14 -6.706e+13 -3.848e+14 -7.042e+13 -4.076e+14 -7.378e+13 -4.309e+14 -7.713e+13 -4.545e+14 -8.045e+13 -4.784e+14 -8.373e+13 -5.026e+14 -8.694e+13 -5.269e+14 -9.009e+13 -5.514e+14 -9.314e+13 -5.758e+14 -9.608e+13 -6.001e+14 -9.890e+13 -6.243e+14 -1.016e+14 -6.482e+14 -1.041e+14 -6.718e+14 -1.065e+14 -6.950e+14 -1.086e+14 -7.178e+14 -1.106e+14 -7.401e+14 -1.124e+14 -7.617e+14 -1.140e+14 -7.826e+14 -1.153e+14 -8.026e+14 -1.164e+14 -8.217e+14 -1.172e+14 -8.397e+14 -1.178e+14 -8.567e+14 -1.181e+14 -8.725e+14 -1.182e+14 -8.870e+14 -1.180e+14 -9.002e+14 -1.175e+14 -9.121e+14 -1.168e+14 -9.225e+14 -1.158e+14 -9.314e+14 -1.145e+14 -9.388e+14 -1.131e+14 -9.447e+14 -1.113e+14 -9.489e+14 -1.094e+14 -9.515e+14 -1.072e+14 -9.524e+14 -1.049e+14 -9.517e+14 -1.024e+14 -9.494e+14 -9.964e+13 -9.453e+14 -9.678e+13 -9.397e+14 -9.377e+13 -9.324e+14 -9.064e+13 -9.235e+14 -8.740e+13 -9.131e+14 -8.407e+13 -9.012e+14 -8.067e+13 -8.878e+14 -7.720e+13 -8.731e+14 -7.369e+13 -8.570e+14 -7.014e+13 -8.397e+14 -6.658e+13 -8.212e+14 -6.303e+13 -8.016e+14 -5.948e+13 -7.810e+14 -5.596e+13 -7.595e+14 -5.248e+13 -7.373e+14 -4.904e+13 -7.142e+14 -4.567e+13 -6.906e+14 -4.237e+13 -6.665e+14 -3.915e+13 -6.420e+14 -3.603e+13 -6.171e+14 -3.303e+13 -5.921e+14 -3.014e+13 -5.669e+14 -2.736e+13 -5.418e+14 -2.469e+13 -5.166e+14 -2.215e+13 -4.916e+14 -1.972e+13 -4.668e+14 -1.743e+13 -4.423e+14 -1.527e+13 -4.182e+14 -1.324e+13 -3.946e+14 -1.134e+13 -3.714e+14 -9.582e+12 -3.488e+14 -7.956e+12 -3.268e+14 -6.465e+12 -3.054e+14 -5.106e+12 -2.848e+14 -3.875e+12 -2.648e+14 -2.771e+12 -2.457e+14 -1.789e+12 -2.273e+14 -9.235e+11 -2.097e+14 -1.705e+11 -1.930e+14 4.765e+11 -1.771e+14 1.024e+12 -1.620e+14 1.478e+12 -1.477e+14 1.845e+12 -1.343e+14 2.134e+12 -1.217e+14 2.349e+12 -1.099e+14 2.500e+12 -9.883e+13 2.593e+12 -8.859e+13 2.635e+12 -7.910e+13 2.633e+12 -7.033e+13 2.593e+12 -6.228e+13 2.521e+12 -5.490e+13 2.424e+12 -4.815e+13 2.306e+12 -4.204e+13 2.172e+12 -3.651e+13 2.027e+12 -3.152e+13 1.875e+12 -2.706e+13 1.720e+12 -2.308e+13 1.564e+12 -1.954e+13 1.410e+12 -1.642e+13 1.260e+12 -1.370e+13 1.115e+12 -1.132e+13 9.782e+11 -9.258e+12 8.498e+11 -7.491e+12 7.308e+11 -5.986e+12 6.214e+11 -4.716e+12 5.222e+11 -3.656e+12 4.330e+11 -2.781e+12 3.536e+11 -2.068e+12 2.839e+11 -1.497e+12 2.233e+11 -1.047e+12 1.714e+11 -7.012e+11 1.277e+11 -4.431e+11 9.150e+10 -2.578e+11 6.221e+10 -1.323e+11 3.923e+10 -5.484e+10 2.194e+10 -1.497e+10 1.005e+10 8.551e+08 5.179e+09 1.533e+10 5.740e+09 4.081e+10 6.761e+09 7.549e+10 5.827e+09 1.150e+11 3.109e+09 1.558e+11 -9.613e+08 1.950e+11 -5.946e+09 2.306e+11 -1.144e+10 2.611e+11 -1.709e+10 2.856e+11 -2.258e+10 3.034e+11 -2.766e+10 3.146e+11 -3.212e+10 3.191e+11 -3.580e+10 3.174e+11 -3.859e+10 3.100e+11 -4.044e+10 2.977e+11 -4.131e+10 2.812e+11 -4.124e+10 2.614e+11 -4.027e+10 2.391e+11 -3.850e+10 2.151e+11 -3.602e+10 1.901e+11 -3.298e+10 1.650e+11 -2.950e+10 1.403e+11 -2.574e+10 1.167e+11 -2.185e+10 9.458e+10 -1.796e+10 7.440e+10 -1.421e+10 5.643e+10 -1.071e+10 4.087e+10 -7.576e+09 2.787e+10 -4.897e+09 1.751e+10 -2.753e+09 9.697e+09 -1.179e+09 4.332e+09 -2.002e+08 1.251e+09 1.982e+08 1.116e+08 2.860e+08 -1.018e+09 9.565e+08 -3.433e+09 2.230e+09 -7.114e+09 3.986e+09 -1.178e+10 6.138e+09 -1.714e+10 8.611e+09 -2.293e+10 1.133e+10 -2.886e+10 1.420e+10 -3.470e+10 1.717e+10 -4.024e+10 2.014e+10 0.005 -60.809 -58.623 -56.436 -54.250 -52.119 -50.168 -48.360 -46.669 -45.078 -43.575 -42.151 -40.799 -39.514 -38.291 -37.127 -36.019 -34.964 -33.959 -33.002 -32.092 -31.226 -30.403 -29.621 -28.879 -28.175 -27.509 -26.879 -26.284 -25.724 -25.197 -24.703 -24.241 -23.811 -23.411 -23.042 -22.702 -22.392 -22.110 -21.858 -21.634 -21.438 -21.269 -21.128 -21.014 -20.928 -20.870 -20.839 -20.835 -20.859 -20.911 -20.991 -21.099 -21.235 -21.399 -21.593 -21.815 -22.067 -22.350 -22.663 -23.007 -23.384 -23.792 -24.234 -24.710 -25.221 -25.769 -26.355 -26.979 -27.644 -28.352 -29.105 -29.905 -30.755 -31.660 -32.624 -33.652 -34.752 -35.932 -37.203 -38.583 -40.092 -41.761 -43.635 -45.787 -48.338 -51.526 -55.890 -62.699 -66.015 -61.446 -56.919 -54.369 -52.786 -51.796 -51.239 -51.046 -51.191 -51.666 -52.424 -53.209 -53.290 -51.909 -49.325 -46.381 -43.567 -41.000 -38.668 -36.538 -34.574 -32.750 -31.043 -29.438 -27.921 -26.483 -25.116 -23.812 -22.568 -21.377 -20.237 -19.143 -18.095 -17.088 -16.121 -15.192 -14.300 -13.443 -12.619 -11.828 -11.069 -10.340 -9.641 -8.971 -8.329 -7.714 -7.126 -6.564 -6.028 -5.517 -5.031 -4.569 -4.131 -3.717 -3.327 -2.960 -2.616 -2.295 -1.997 -1.721 -1.468 -1.237 -1.029 -0.844 -0.681 -0.540 -0.423 -0.328 -0.256 -0.208 -0.184 -0.183 -0.207 -0.255 -0.328 -0.428 -0.553 -0.706 -0.887 -1.096 -1.335 -1.604 -1.906 -2.240 -2.610 -3.016 -3.461 -3.946 -4.475 -5.050 -5.675 -6.353 -7.089 -7.888 -8.757 -9.703 -10.735 -11.865 -13.106 -14.476 -15.997 -17.700 -19.625 -21.829 -24.398 -27.466 -31.266 -36.267 -43.703 -60.016 -55.517 -58.486 -49.071 -39.464 -33.554 -29.247 -25.851 -23.050 -20.672 -18.611 -16.798 -15.185 -13.737 -12.429 -11.240 -10.156 -9.163 -8.251 -7.413 -6.641 -5.930 -5.274 -4.670 -4.113 -3.602 -3.132 -2.702 -2.309 -1.952 -1.629 -1.338 -1.079 -0.850 -0.650 -0.479 -0.334 -0.216 -0.125 -0.058 -0.017 0.000 -0.007 -0.038 -0.092 -0.169 -0.270 -0.393 -0.538 -0.706 -0.897 -1.110 -1.345 -1.603 -1.883 -2.185 -2.511 -2.859 -3.230 -3.624 -4.041 -4.483 -4.948 -5.437 -5.951 -6.491 -7.055 -7.646 -8.263 -8.907 -9.578 -10.278 -11.007 -11.765 -12.555 -13.375 -14.228 -15.115 -16.036 -16.993 -17.987 -19.020 -20.093 -21.208 -22.366 -23.571 -24.824 -26.128 -27.487 -28.904 -30.382 -31.928 -33.546 -35.244 -37.029 -38.912 -40.905 -43.021 -45.276 -47.685 -50.255 -52.961 -55.695 -58.159 -59.851 -60.390 -59.890 -58.748 -57.250 -55.547 -53.733 -51.885 -50.059 -48.289 -46.592 -44.975 -43.437 -41.976 -40.588 -39.267 -38.011 -36.815 -35.675 -34.589 -33.554 -32.567 -31.628 -30.733 -29.881 -29.070 -28.300 -27.569 -26.875 -26.219 -25.598 -25.012 -24.460 -23.941 -23.454 -22.999 -22.575 -22.182 -21.818 -21.484 -21.178 -20.901 -20.651 -20.429 -20.235 -20.067 -19.925 -19.810 -19.721 -19.657 -19.619 -19.606 -19.619 -19.656 -19.718 -19.806 -19.918 -20.055 -20.216 -20.403 -20.613 -20.849 -21.109 -21.395 -21.706 -22.042 -22.404 -22.791 -23.204 -23.644 -24.110 -24.602 -25.121 -25.668 -26.241 -26.842 -27.471 -28.128 -28.813 -29.527 -30.269 -31.040 -31.839 -32.666 -33.522 -34.405 -35.315 -36.251 -37.211 -38.193 -39.196 -40.216 -41.248 -42.289 -43.333 -44.371 -45.396 -46.417 -47.437 -48.458 0 1 1.0 1 N6 VV 36.71 40.21 0.05 -3.800e+08 6.441e+08 -3.168e+08 6.198e+08 -2.574e+08 5.933e+08 -2.018e+08 5.651e+08 -1.502e+08 5.356e+08 -1.026e+08 5.052e+08 -5.877e+07 4.743e+08 -1.867e+07 4.432e+08 1.788e+07 4.123e+08 5.121e+07 3.818e+08 8.169e+07 3.520e+08 1.097e+08 3.231e+08 1.356e+08 2.953e+08 1.602e+08 2.685e+08 1.837e+08 2.427e+08 2.069e+08 2.178e+08 2.302e+08 1.933e+08 2.541e+08 1.690e+08 2.787e+08 1.443e+08 3.043e+08 1.186e+08 3.309e+08 9.163e+07 3.582e+08 6.288e+07 3.861e+08 3.199e+07 4.140e+08 -1.181e+06 4.414e+08 -3.674e+07 4.680e+08 -7.468e+07 4.931e+08 -1.148e+08 5.162e+08 -1.568e+08 5.368e+08 -2.004e+08 5.546e+08 -2.451e+08 5.691e+08 -2.904e+08 5.801e+08 -3.359e+08 5.876e+08 -3.811e+08 5.913e+08 -4.253e+08 5.913e+08 -4.683e+08 5.878e+08 -5.094e+08 5.809e+08 -5.482e+08 5.708e+08 -5.843e+08 5.578e+08 -6.175e+08 5.424e+08 -6.473e+08 5.247e+08 -6.735e+08 5.053e+08 -6.959e+08 4.845e+08 -7.143e+08 4.626e+08 -7.284e+08 4.401e+08 -7.383e+08 4.172e+08 -7.438e+08 3.943e+08 -7.449e+08 3.716e+08 -7.415e+08 3.494e+08 -7.337e+08 3.279e+08 -7.215e+08 3.071e+08 -7.051e+08 2.873e+08 -6.847e+08 2.685e+08 -6.604e+08 2.506e+08 -6.325e+08 2.336e+08 -6.015e+08 2.176e+08 -5.676e+08 2.023e+08 -5.313e+08 1.878e+08 -4.931e+08 1.739e+08 -4.535e+08 1.605e+08 -4.130e+08 1.476e+08 -3.723e+08 1.350e+08 -3.319e+08 1.227e+08 -2.923e+08 1.107e+08 -2.541e+08 9.898e+07 -2.177e+08 8.752e+07 -1.836e+08 7.643e+07 -1.521e+08 6.578e+07 -1.236e+08 5.565e+07 -9.812e+07 4.617e+07 -7.591e+07 3.742e+07 -5.693e+07 2.948e+07 -4.109e+07 2.246e+07 -2.828e+07 1.641e+07 -1.828e+07 1.134e+07 -1.082e+07 7.297e+06 -5.598e+06 4.255e+06 -2.273e+06 2.189e+06 -4.533e+05 1.051e+06 3.907e+05 5.169e+05 1.087e+06 -5.821e+04 2.186e+06 -1.026e+06 3.653e+06 -2.436e+06 5.280e+06 -4.240e+06 6.879e+06 -6.368e+06 8.299e+06 -8.763e+06 9.434e+06 -1.139e+07 1.021e+07 -1.422e+07 1.059e+07 -1.727e+07 1.054e+07 -2.057e+07 1.003e+07 -2.418e+07 9.048e+06 -2.818e+07 7.550e+06 -3.266e+07 5.473e+06 -3.772e+07 2.732e+06 -4.345e+07 -7.848e+05 -4.994e+07 -5.216e+06 -5.724e+07 -1.070e+07 -6.537e+07 -1.740e+07 -7.436e+07 -2.545e+07 -8.415e+07 -3.499e+07 -9.467e+07 -4.613e+07 -1.058e+08 -5.897e+07 -1.174e+08 -7.353e+07 -1.292e+08 -8.981e+07 -1.410e+08 -1.078e+08 -1.524e+08 -1.273e+08 -1.633e+08 -1.482e+08 -1.731e+08 -1.703e+08 -1.817e+08 -1.934e+08 -1.886e+08 -2.170e+08 -1.935e+08 -2.408e+08 -1.961e+08 -2.644e+08 -1.962e+08 -2.873e+08 -1.936e+08 -3.090e+08 -1.882e+08 -3.291e+08 -1.800e+08 -3.471e+08 -1.690e+08 -3.626e+08 -1.554e+08 -3.751e+08 -1.394e+08 -3.843e+08 -1.214e+08 -3.901e+08 -1.017e+08 -3.921e+08 -8.085e+07 -3.904e+08 -5.921e+07 -3.850e+08 -3.730e+07 -3.759e+08 -1.562e+07 -3.635e+08 5.402e+06 -3.480e+08 2.534e+07 -3.297e+08 4.383e+07 -3.093e+08 6.061e+07 -2.871e+08 7.546e+07 -2.636e+08 8.824e+07 -2.393e+08 9.893e+07 -2.148e+08 1.075e+08 -1.903e+08 1.141e+08 -1.664e+08 1.189e+08 -1.433e+08 1.219e+08 -1.212e+08 1.235e+08 -1.002e+08 1.238e+08 -8.060e+07 1.229e+08 -6.221e+07 1.210e+08 -4.508e+07 1.181e+08 -2.910e+07 1.144e+08 -1.421e+07 1.098e+08 -3.117e+05 1.044e+08 1.268e+07 9.807e+07 2.483e+07 9.084e+07 3.620e+07 8.269e+07 4.689e+07 7.362e+07 5.702e+07 6.363e+07 6.681e+07 5.261e+07 7.660e+07 4.034e+07 8.688e+07 2.633e+07 9.826e+07 9.694e+06 1.115e+08 -1.092e+07 1.273e+08 -3.733e+07 1.463e+08 -7.190e+07 1.690e+08 -1.174e+08 1.956e+08 -1.768e+08 2.260e+08 -2.535e+08 2.599e+08 -3.511e+08 2.968e+08 -4.730e+08 3.356e+08 -6.228e+08 3.753e+08 -8.042e+08 4.144e+08 -1.020e+09 4.511e+08 -1.274e+09 4.836e+08 -1.568e+09 5.096e+08 -1.903e+09 5.265e+08 -2.282e+09 5.318e+08 -2.703e+09 5.226e+08 -3.166e+09 4.962e+08 -3.669e+09 4.496e+08 -4.208e+09 3.803e+08 -4.780e+09 2.859e+08 -5.378e+09 1.643e+08 -5.996e+09 1.365e+07 -6.626e+09 -1.669e+08 -7.261e+09 -3.779e+08 -7.891e+09 -6.194e+08 -8.507e+09 -8.902e+08 -9.099e+09 -1.189e+09 -9.659e+09 -1.513e+09 -1.018e+10 -1.858e+09 -1.064e+10 -2.223e+09 -1.105e+10 -2.601e+09 -1.139e+10 -2.990e+09 -1.166e+10 -3.384e+09 -1.186e+10 -3.778e+09 -1.198e+10 -4.168e+09 -1.201e+10 -4.547e+09 -1.197e+10 -4.912e+09 -1.184e+10 -5.258e+09 -1.163e+10 -5.580e+09 -1.135e+10 -5.875e+09 -1.099e+10 -6.140e+09 -1.056e+10 -6.372e+09 -1.006e+10 -6.569e+09 -9.507e+09 -6.730e+09 -8.903e+09 -6.855e+09 -8.254e+09 -6.944e+09 -7.570e+09 -6.998e+09 -6.858e+09 -7.020e+09 -6.126e+09 -7.013e+09 -5.384e+09 -6.983e+09 -4.639e+09 -6.934e+09 -3.896e+09 -6.877e+09 -3.161e+09 -6.819e+09 -2.434e+09 -6.772e+09 -1.712e+09 -6.749e+09 -9.878e+08 -6.762e+09 -2.476e+08 -6.824e+09 5.283e+08 -6.946e+09 1.364e+09 -7.137e+09 2.289e+09 -7.401e+09 3.333e+09 -7.738e+09 4.526e+09 -8.145e+09 5.897e+09 -8.614e+09 7.469e+09 -9.135e+09 9.259e+09 -9.696e+09 1.128e+10 -1.028e+10 1.355e+10 -1.089e+10 1.606e+10 -1.149e+10 1.880e+10 -1.209e+10 2.178e+10 -1.266e+10 2.497e+10 -1.320e+10 2.835e+10 -1.369e+10 3.190e+10 -1.413e+10 3.557e+10 -1.451e+10 3.935e+10 -1.483e+10 4.319e+10 -1.508e+10 4.705e+10 -1.526e+10 5.089e+10 -1.536e+10 5.466e+10 -1.539e+10 5.832e+10 -1.535e+10 6.183e+10 -1.523e+10 6.515e+10 -1.506e+10 6.824e+10 -1.482e+10 7.107e+10 -1.453e+10 7.359e+10 -1.419e+10 7.579e+10 -1.380e+10 7.763e+10 -1.337e+10 7.911e+10 -1.291e+10 8.019e+10 -1.242e+10 8.088e+10 -1.190e+10 8.116e+10 -1.137e+10 8.103e+10 -1.081e+10 8.050e+10 -1.024e+10 7.956e+10 -9.659e+09 7.823e+10 -9.065e+09 7.653e+10 -8.463e+09 7.446e+10 -7.854e+09 7.206e+10 -7.240e+09 6.933e+10 -6.622e+09 6.632e+10 -6.004e+09 6.306e+10 -5.389e+09 5.956e+10 -4.778e+09 5.588e+10 -4.177e+09 5.205e+10 -3.590e+09 4.810e+10 -3.021e+09 4.408e+10 -2.476e+09 4.004e+10 -1.959e+09 3.601e+10 -1.475e+09 3.205e+10 -1.032e+09 2.819e+10 -6.312e+08 2.446e+10 -2.780e+08 2.092e+10 2.411e+07 1.758e+10 2.730e+08 1.449e+10 4.677e+08 1.167e+10 6.079e+08 9.145e+09 6.953e+08 6.926e+09 7.327e+08 5.029e+09 7.245e+08 3.456e+09 6.763e+08 2.202e+09 5.954e+08 1.259e+09 4.911e+08 6.085e+08 3.767e+08 2.184e+08 2.764e+08 6.858e+06 2.377e+08 -1.940e+08 2.880e+08 -5.102e+08 3.896e+08 -9.629e+08 5.026e+08 -1.529e+09 6.077e+08 -2.177e+09 6.966e+08 -2.872e+09 7.650e+08 -3.582e+09 8.113e+08 -4.279e+09 8.355e+08 -4.935e+09 8.388e+08 -5.529e+09 8.231e+08 -6.042e+09 7.915e+08 -6.462e+09 7.472e+08 -6.780e+09 6.937e+08 -6.990e+09 6.344e+08 -7.091e+09 5.726e+08 -7.087e+09 5.111e+08 -6.983e+09 4.523e+08 -6.788e+09 3.980e+08 -6.512e+09 3.495e+08 -6.167e+09 3.073e+08 -5.766e+09 2.716e+08 -5.322e+09 2.422e+08 -4.848e+09 2.182e+08 -4.352e+09 2.349e+08 -3.878e+09 1.651e+08 -3.386e+09 1.537e+08 -2.911e+09 1.439e+08 -2.461e+09 1.346e+08 -2.042e+09 1.251e+08 -1.661e+09 1.150e+08 -1.321e+09 1.040e+08 -1.024e+09 9.207e+07 -7.703e+08 7.948e+07 -5.601e+08 6.654e+07 -3.908e+08 5.370e+07 -2.596e+08 4.150e+07 -1.620e+08 3.040e+07 -9.331e+07 2.082e+07 -4.828e+07 1.306e+07 -2.144e+07 7.247e+06 -7.500e+06 3.341e+06 -1.710e+06 1.121e+06 -1.233e+05 1.852e+05 3.398e+04 -2.548e+04 -3.751e+04 -2.804e+05 -1.018e+06 -1.126e+06 -5.357e+06 -3.300e+06 -1.772e+07 -7.487e+06 -4.496e+07 -1.424e+07 -9.597e+07 -2.399e+07 -1.813e+08 -3.694e+07 -3.132e+08 -5.315e+07 -5.047e+08 -7.251e+07 -7.687e+08 -9.470e+07 -1.118e+09 -1.193e+08 -1.565e+09 -1.460e+08 -2.118e+09 -1.741e+08 -2.783e+09 -2.031e+08 -3.563e+09 -2.328e+08 -4.456e+09 -2.626e+08 -5.454e+09 -2.923e+08 -6.546e+09 -3.218e+08 -7.713e+09 -3.508e+08 -8.932e+09 -3.791e+08 -1.018e+10 -4.063e+08 -1.141e+10 -4.321e+08 -1.261e+10 -4.560e+08 -1.373e+10 -4.772e+08 -1.473e+10 -4.947e+08 -1.557e+10 -5.074e+08 -1.623e+10 -5.138e+08 -1.667e+10 -5.127e+08 -1.686e+10 -5.027e+08 -1.680e+10 -4.827e+08 -1.646e+10 -4.518e+08 -1.586e+10 -4.097e+08 -1.498e+10 -3.569e+08 -1.387e+10 -2.946e+08 -1.254e+10 -2.246e+08 -1.103e+10 -1.499e+08 -9.401e+09 -7.427e+07 -7.703e+09 -2.222e+06 -6.003e+09 6.116e+07 -4.377e+09 1.103e+08 -2.901e+09 1.398e+08 -1.656e+09 1.443e+08 -7.252e+08 1.199e+08 -1.811e+08 7.299e+07 9.688e+07 7.569e+07 5.782e+08 1.881e+08 1.633e+09 3.599e+08 3.318e+09 5.697e+08 5.654e+09 8.122e+08 8.646e+09 1.082e+09 1.226e+10 1.371e+09 1.645e+10 1.672e+09 2.113e+10 1.977e+09 2.618e+10 2.277e+09 3.143e+10 2.562e+09 3.672e+10 2.828e+09 4.180e+10 3.069e+09 4.645e+10 3.280e+09 5.038e+10 3.462e+09 5.334e+10 3.617e+09 5.505e+10 3.750e+09 5.528e+10 3.861e+09 5.381e+10 3.946e+09 5.055e+10 4.000e+09 4.547e+10 4.014e+09 3.873e+10 3.966e+09 3.067e+10 3.822e+09 2.187e+10 3.531e+09 1.320e+10 3.028e+09 5.911e+09 2.259e+09 1.341e+09 1.514e+09 -2.435e+09 2.124e+09 -1.163e+10 4.646e+09 -3.192e+10 8.659e+09 -6.756e+10 1.424e+10 -1.234e+11 2.173e+10 -2.052e+11 3.158e+10 -3.195e+11 4.432e+10 -4.739e+11 6.054e+10 -6.772e+11 8.091e+10 -9.392e+11 1.062e+11 -1.270e+12 1.372e+11 -1.684e+12 1.748e+11 -2.192e+12 2.201e+11 -2.810e+12 2.741e+11 -3.554e+12 3.382e+11 -4.441e+12 4.136e+11 -5.489e+12 5.016e+11 -6.720e+12 6.041e+11 -8.155e+12 7.226e+11 -9.815e+12 8.591e+11 -1.173e+13 1.016e+12 -1.391e+13 1.194e+12 -1.640e+13 1.398e+12 -1.922e+13 1.629e+12 -2.240e+13 1.890e+12 -2.597e+13 2.185e+12 -2.996e+13 2.516e+12 -3.440e+13 2.888e+12 -3.932e+13 3.306e+12 -4.476e+13 3.779e+12 -5.075e+13 4.308e+12 -5.731e+13 4.898e+12 -6.449e+13 5.553e+12 -7.232e+13 6.277e+12 -8.081e+13 7.077e+12 -9.002e+13 7.957e+12 -9.995e+13 8.923e+12 -1.106e+14 9.978e+12 -1.221e+14 1.113e+13 -1.344e+14 1.238e+13 -1.475e+14 1.373e+13 -1.614e+14 1.519e+13 -1.761e+14 1.676e+13 -1.917e+14 1.845e+13 -2.082e+14 2.025e+13 -2.254e+14 2.216e+13 -2.435e+14 2.419e+13 -2.625e+14 2.634e+13 -2.821e+14 2.860e+13 -3.026e+14 3.098e+13 -3.238e+14 3.346e+13 -3.457e+14 3.606e+13 -3.682e+14 3.875e+13 -3.913e+14 4.155e+13 -4.149e+14 4.444e+13 -4.391e+14 4.742e+13 -4.636e+14 5.048e+13 -4.885e+14 5.362e+13 -5.136e+14 5.683e+13 -5.390e+14 6.010e+13 -5.644e+14 6.342e+13 -5.899e+14 6.679e+13 -6.153e+14 7.021e+13 -6.406e+14 7.366e+13 -6.656e+14 7.713e+13 -6.904e+14 8.062e+13 -7.147e+14 8.413e+13 -7.385e+14 8.764e+13 -7.619e+14 9.115e+13 -7.846e+14 9.469e+13 -8.066e+14 9.822e+13 -8.279e+14 1.017e+14 -8.482e+14 1.052e+14 -8.675e+14 1.086e+14 -8.857e+14 1.120e+14 -9.028e+14 1.153e+14 -9.187e+14 1.185e+14 -9.333e+14 1.216e+14 -9.466e+14 1.246e+14 -9.584e+14 1.275e+14 -9.688e+14 1.303e+14 -9.777e+14 1.329e+14 -9.850e+14 1.354e+14 -9.907e+14 1.377e+14 -9.947e+14 1.398e+14 -9.971e+14 1.417e+14 -9.978e+14 1.433e+14 -9.968e+14 1.448e+14 -9.942e+14 1.460e+14 -9.898e+14 1.469e+14 -9.837e+14 1.476e+14 -9.760e+14 1.480e+14 -9.667e+14 1.482e+14 -9.557e+14 1.480e+14 -9.432e+14 1.476e+14 -9.292e+14 1.469e+14 -9.137e+14 1.459e+14 -8.969e+14 1.446e+14 -8.787e+14 1.431e+14 -8.594e+14 1.413e+14 -8.389e+14 1.393e+14 -8.174e+14 1.370e+14 -7.949e+14 1.345e+14 -7.716e+14 1.317e+14 -7.475e+14 1.288e+14 -7.229e+14 1.257e+14 -6.976e+14 1.224e+14 -6.720e+14 1.190e+14 -6.460e+14 1.154e+14 -6.199e+14 1.117e+14 -5.935e+14 1.079e+14 -5.672e+14 1.040e+14 -5.410e+14 1.001e+14 -5.149e+14 9.615e+13 -4.890e+14 9.216e+13 -4.635e+14 8.816e+13 -4.385e+14 8.417e+13 -4.138e+14 8.020e+13 -3.898e+14 7.626e+13 -3.663e+14 7.237e+13 -3.434e+14 6.852e+13 -3.213e+14 6.475e+13 -2.999e+14 6.105e+13 -2.793e+14 5.742e+13 -2.594e+14 5.389e+13 -2.404e+14 5.045e+13 -2.222e+14 4.711e+13 -2.048e+14 4.388e+13 -1.883e+14 4.077e+13 -1.726e+14 3.776e+13 -1.578e+14 3.488e+13 -1.438e+14 3.212e+13 -1.306e+14 2.948e+13 -1.183e+14 2.697e+13 -1.068e+14 2.459e+13 -9.606e+13 2.234e+13 -8.609e+13 2.022e+13 -7.687e+13 1.823e+13 -6.835e+13 1.636e+13 -6.052e+13 1.463e+13 -5.336e+13 1.301e+13 -4.681e+13 1.152e+13 -4.088e+13 1.015e+13 -3.552e+13 8.898e+12 -3.069e+13 7.753e+12 -2.636e+13 6.716e+12 -2.250e+13 5.780e+12 -1.907e+13 4.940e+12 -1.605e+13 4.192e+12 -1.340e+13 3.528e+12 -1.109e+13 2.943e+12 -9.094e+12 2.432e+12 -7.378e+12 1.989e+12 -5.913e+12 1.608e+12 -4.677e+12 1.283e+12 -3.643e+12 1.008e+12 -2.787e+12 7.789e+11 -2.088e+12 5.898e+11 -1.526e+12 4.359e+11 -1.081e+12 3.127e+11 -7.363e+11 2.161e+11 -4.765e+11 1.422e+11 -2.870e+11 8.747e+10 -1.555e+11 4.875e+10 -7.090e+10 2.316e+10 -2.315e+10 8.143e+09 -3.759e+09 1.533e+09 5.664e+09 -1.190e+09 2.240e+10 -5.642e+09 4.889e+10 -1.334e+10 8.088e+10 -2.309e+10 1.150e+11 -3.388e+10 1.485e+11 -4.490e+10 1.795e+11 -5.547e+10 2.065e+11 -6.511e+10 2.286e+11 -7.344e+10 2.451e+11 -8.020e+10 2.560e+11 -8.524e+10 2.613e+11 -8.848e+10 2.612e+11 -8.992e+10 2.562e+11 -8.965e+10 2.470e+11 -8.777e+10 2.341e+11 -8.445e+10 2.182e+11 -7.986e+10 2.001e+11 -7.423e+10 1.805e+11 -6.779e+10 1.599e+11 -6.077e+10 1.391e+11 -5.339e+10 1.186e+11 -4.589e+10 9.888e+10 -3.850e+10 8.035e+10 -3.138e+10 6.338e+10 -2.472e+10 4.822e+10 -1.867e+10 3.505e+10 -1.335e+10 2.401e+10 -8.851e+09 1.518e+10 -5.267e+09 8.484e+09 -2.604e+09 3.851e+09 -8.685e+08 1.155e+09 -1.996e+07 1.453e+08 2.400e+08 -7.695e+08 1.023e+09 -2.760e+09 2.554e+09 -5.837e+09 4.720e+09 -9.766e+09 7.398e+09 -1.430e+10 1.048e+10 -1.922e+10 1.384e+10 -2.427e+10 1.737e+10 -2.926e+10 2.097e+10 -3.400e+10 2.453e+10 0.005 -60.734 -58.968 -57.202 -55.436 -53.650 -51.819 -50.013 -48.267 -46.596 -45.002 -43.486 -42.044 -40.674 -39.371 -38.131 -36.953 -35.832 -34.767 -33.753 -32.789 -31.872 -31.002 -30.175 -29.390 -28.646 -27.941 -27.274 -26.644 -26.049 -25.489 -24.963 -24.470 -24.009 -23.580 -23.182 -22.813 -22.475 -22.166 -21.886 -21.635 -21.411 -21.215 -21.047 -20.906 -20.793 -20.707 -20.648 -20.616 -20.611 -20.634 -20.684 -20.760 -20.865 -20.996 -21.156 -21.343 -21.559 -21.804 -22.077 -22.379 -22.711 -23.073 -23.465 -23.888 -24.343 -24.829 -25.349 -25.902 -26.489 -27.111 -27.769 -28.464 -29.198 -29.971 -30.784 -31.641 -32.541 -33.488 -34.483 -35.530 -36.630 -37.787 -39.004 -40.282 -41.624 -43.026 -44.480 -45.969 -47.457 -48.889 -50.190 -51.289 -52.158 -52.837 -53.440 -54.117 -55.042 -56.389 -58.190 -59.418 -57.908 -54.194 -50.293 -46.903 -43.978 -41.401 -39.086 -36.973 -35.023 -33.207 -31.504 -29.897 -28.377 -26.932 -25.556 -24.242 -22.986 -21.783 -20.630 -19.523 -18.460 -17.440 -16.459 -15.516 -14.609 -13.738 -12.900 -12.095 -11.321 -10.578 -9.865 -9.181 -8.525 -7.896 -7.295 -6.719 -6.169 -5.645 -5.145 -4.670 -4.219 -3.792 -3.388 -3.008 -2.650 -2.316 -2.004 -1.714 -1.448 -1.203 -0.981 -0.782 -0.604 -0.449 -0.317 -0.208 -0.121 -0.057 -0.017 0.000 -0.007 -0.038 -0.095 -0.176 -0.283 -0.416 -0.577 -0.765 -0.982 -1.229 -1.507 -1.816 -2.159 -2.538 -2.952 -3.406 -3.900 -4.439 -5.023 -5.658 -6.346 -7.093 -7.904 -8.784 -9.743 -10.788 -11.932 -13.188 -14.573 -16.111 -17.832 -19.773 -21.994 -24.574 -27.640 -31.401 -36.244 -43.011 -54.192 -73.727 -56.653 -44.348 -37.152 -32.088 -28.192 -25.035 -22.390 -20.121 -18.140 -16.390 -14.827 -13.420 -12.146 -10.987 -9.929 -8.959 -8.068 -7.248 -6.493 -5.798 -5.157 -4.566 -4.023 -3.523 -3.065 -2.647 -2.265 -1.918 -1.605 -1.325 -1.076 -0.856 -0.666 -0.503 -0.368 -0.259 -0.176 -0.119 -0.087 -0.079 -0.095 -0.134 -0.197 -0.284 -0.393 -0.525 -0.680 -0.857 -1.057 -1.280 -1.525 -1.792 -2.083 -2.396 -2.731 -3.090 -3.472 -3.877 -4.306 -4.759 -5.237 -5.739 -6.266 -6.818 -7.397 -8.001 -8.633 -9.292 -9.980 -10.697 -11.443 -12.220 -13.028 -13.870 -14.745 -15.654 -16.600 -17.584 -18.606 -19.670 -20.776 -21.927 -23.126 -24.376 -25.680 -27.042 -28.467 -29.961 -31.530 -33.183 -34.933 -36.792 -38.780 -40.920 -43.243 -45.786 -48.576 -51.577 -54.496 -56.567 -57.098 -56.466 -55.557 -54.794 -54.236 -53.821 -53.444 -52.983 -52.320 -51.382 -50.171 -48.755 -47.222 -45.651 -44.094 -42.581 -41.128 -39.740 -38.418 -37.161 -35.968 -34.834 -33.757 -32.735 -31.764 -30.843 -29.969 -29.140 -28.354 -27.610 -26.906 -26.242 -25.615 -25.024 -24.469 -23.948 -23.461 -23.006 -22.584 -22.192 -21.831 -21.500 -21.199 -20.926 -20.681 -20.465 -20.276 -20.114 -19.980 -19.871 -19.789 -19.733 -19.702 -19.697 -19.718 -19.764 -19.835 -19.931 -20.052 -20.199 -20.370 -20.566 -20.786 -21.032 -21.304 -21.600 -21.922 -22.270 -22.644 -23.044 -23.470 -23.923 -24.402 -24.909 -25.443 -26.004 -26.594 -27.212 -27.858 -28.533 -29.238 -29.972 -30.736 -31.529 -32.353 -33.207 -34.091 -35.005 -35.948 -36.920 -37.921 -38.948 -40.000 -41.075 -42.170 -43.280 -44.400 -45.524 -46.649 -47.773 -48.898 0 1 1.0 1 N6 VH 36.71 40.21 0.05 -2.825e+08 8.601e+07 -2.637e+08 1.002e+08 -2.446e+08 1.129e+08 -2.254e+08 1.241e+08 -2.062e+08 1.339e+08 -1.871e+08 1.423e+08 -1.682e+08 1.494e+08 -1.496e+08 1.553e+08 -1.313e+08 1.600e+08 -1.134e+08 1.637e+08 -9.581e+07 1.664e+08 -7.866e+07 1.681e+08 -6.190e+07 1.691e+08 -4.549e+07 1.693e+08 -2.942e+07 1.688e+08 -1.363e+07 1.678e+08 1.968e+06 1.662e+08 1.742e+07 1.642e+08 3.283e+07 1.618e+08 4.833e+07 1.590e+08 6.397e+07 1.559e+08 7.987e+07 1.523e+08 9.613e+07 1.482e+08 1.128e+08 1.436e+08 1.298e+08 1.383e+08 1.473e+08 1.323e+08 1.652e+08 1.254e+08 1.833e+08 1.175e+08 2.017e+08 1.087e+08 2.200e+08 9.870e+07 2.381e+08 8.762e+07 2.559e+08 7.543e+07 2.730e+08 6.215e+07 2.893e+08 4.789e+07 3.046e+08 3.272e+07 3.185e+08 1.680e+07 3.310e+08 3.220e+05 3.419e+08 -1.655e+07 3.509e+08 -3.357e+07 3.581e+08 -5.052e+07 3.632e+08 -6.715e+07 3.663e+08 -8.323e+07 3.673e+08 -9.850e+07 3.663e+08 -1.127e+08 3.633e+08 -1.257e+08 3.584e+08 -1.373e+08 3.517e+08 -1.472e+08 3.432e+08 -1.555e+08 3.332e+08 -1.618e+08 3.218e+08 -1.662e+08 3.092e+08 -1.687e+08 2.955e+08 -1.693e+08 2.808e+08 -1.679e+08 2.654e+08 -1.648e+08 2.495e+08 -1.600e+08 2.332e+08 -1.536e+08 2.166e+08 -1.459e+08 1.999e+08 -1.370e+08 1.833e+08 -1.272e+08 1.668e+08 -1.167e+08 1.508e+08 -1.058e+08 1.351e+08 -9.462e+07 1.200e+08 -8.345e+07 1.056e+08 -7.252e+07 9.190e+07 -6.200e+07 7.901e+07 -5.205e+07 6.703e+07 -4.283e+07 5.600e+07 -3.444e+07 4.598e+07 -2.697e+07 3.699e+07 -2.048e+07 2.904e+07 -1.497e+07 2.214e+07 -1.042e+07 1.629e+07 -6.793e+06 1.144e+07 -4.033e+06 7.555e+06 -2.048e+06 4.590e+06 -7.432e+05 2.470e+06 1.126e+03 1.114e+06 3.260e+05 3.934e+05 4.413e+05 -2.562e+04 6.445e+05 -5.779e+05 1.041e+06 -1.431e+06 1.532e+06 -2.567e+06 2.010e+06 -3.923e+06 2.393e+06 -5.426e+06 2.618e+06 -7.017e+06 2.641e+06 -8.649e+06 2.429e+06 -1.028e+07 1.959e+06 -1.190e+07 1.213e+06 -1.350e+07 1.731e+05 -1.508e+07 -1.178e+06 -1.666e+07 -2.869e+06 -1.825e+07 -4.937e+06 -1.987e+07 -7.430e+06 -2.154e+07 -1.041e+07 -2.327e+07 -1.394e+07 -2.505e+07 -1.810e+07 -2.685e+07 -2.296e+07 -2.866e+07 -2.859e+07 -3.043e+07 -3.502e+07 -3.210e+07 -4.230e+07 -3.362e+07 -5.045e+07 -3.491e+07 -5.943e+07 -3.590e+07 -6.919e+07 -3.650e+07 -7.965e+07 -3.666e+07 -9.070e+07 -3.628e+07 -1.022e+08 -3.530e+07 -1.139e+08 -3.366e+07 -1.258e+08 -3.131e+07 -1.374e+08 -2.822e+07 -1.487e+08 -2.435e+07 -1.593e+08 -1.972e+07 -1.691e+08 -1.434e+07 -1.778e+08 -8.257e+06 -1.851e+08 -1.543e+06 -1.909e+08 5.722e+06 -1.951e+08 1.342e+07 -1.974e+08 2.143e+07 -1.979e+08 2.961e+07 -1.965e+08 3.780e+07 -1.932e+08 4.586e+07 -1.881e+08 5.362e+07 -1.812e+08 6.096e+07 -1.729e+08 6.773e+07 -1.631e+08 7.384e+07 -1.523e+08 7.920e+07 -1.405e+08 8.376e+07 -1.281e+08 8.748e+07 -1.153e+08 9.038e+07 -1.023e+08 9.247e+07 -8.929e+07 9.382e+07 -7.648e+07 9.447e+07 -6.399e+07 9.452e+07 -5.193e+07 9.401e+07 -4.034e+07 9.301e+07 -2.925e+07 9.154e+07 -1.867e+07 8.962e+07 -8.573e+06 8.722e+07 1.064e+06 8.432e+07 1.024e+07 8.084e+07 1.898e+07 7.674e+07 2.725e+07 7.193e+07 3.501e+07 6.637e+07 4.222e+07 6.001e+07 4.883e+07 5.284e+07 5.479e+07 4.488e+07 6.012e+07 3.613e+07 6.486e+07 2.657e+07 6.913e+07 1.608e+07 7.317e+07 4.403e+06 7.724e+07 -8.941e+06 8.168e+07 -2.478e+07 8.680e+07 -4.426e+07 9.279e+07 -6.886e+07 9.964e+07 -1.004e+08 1.071e+08 -1.409e+08 1.146e+08 -1.925e+08 1.214e+08 -2.575e+08 1.264e+08 -3.383e+08 1.284e+08 -4.371e+08 1.260e+08 -5.564e+08 1.174e+08 -6.983e+08 1.010e+08 -8.647e+08 7.496e+07 -1.058e+09 3.722e+07 -1.279e+09 -1.422e+07 -1.529e+09 -8.131e+07 -1.808e+09 -1.661e+08 -2.117e+09 -2.705e+08 -2.455e+09 -3.960e+08 -2.820e+09 -5.443e+08 -3.211e+09 -7.166e+08 -3.623e+09 -9.136e+08 -4.055e+09 -1.136e+09 -4.500e+09 -1.383e+09 -4.955e+09 -1.655e+09 -5.412e+09 -1.951e+09 -5.867e+09 -2.269e+09 -6.311e+09 -2.607e+09 -6.739e+09 -2.962e+09 -7.144e+09 -3.330e+09 -7.517e+09 -3.708e+09 -7.853e+09 -4.092e+09 -8.146e+09 -4.478e+09 -8.389e+09 -4.861e+09 -8.579e+09 -5.236e+09 -8.710e+09 -5.600e+09 -8.779e+09 -5.946e+09 -8.785e+09 -6.270e+09 -8.725e+09 -6.568e+09 -8.600e+09 -6.837e+09 -8.411e+09 -7.072e+09 -8.158e+09 -7.270e+09 -7.845e+09 -7.430e+09 -7.475e+09 -7.549e+09 -7.053e+09 -7.626e+09 -6.585e+09 -7.661e+09 -6.075e+09 -7.654e+09 -5.531e+09 -7.608e+09 -4.958e+09 -7.525e+09 -4.365e+09 -7.408e+09 -3.757e+09 -7.262e+09 -3.142e+09 -7.093e+09 -2.525e+09 -6.907e+09 -1.909e+09 -6.713e+09 -1.297e+09 -6.521e+09 -6.871e+08 -6.340e+09 -7.511e+07 -6.181e+09 5.482e+08 -6.054e+09 1.198e+09 -5.967e+09 1.894e+09 -5.927e+09 2.659e+09 -5.937e+09 3.520e+09 -5.995e+09 4.505e+09 -6.098e+09 5.641e+09 -6.236e+09 6.953e+09 -6.400e+09 8.463e+09 -6.576e+09 1.019e+10 -6.753e+09 1.214e+10 -6.918e+09 1.433e+10 -7.059e+09 1.675e+10 -7.167e+09 1.942e+10 -7.231e+09 2.232e+10 -7.243e+09 2.544e+10 -7.197e+09 2.877e+10 -7.089e+09 3.227e+10 -6.914e+09 3.593e+10 -6.672e+09 3.971e+10 -6.362e+09 4.358e+10 -5.986e+09 4.749e+10 -5.547e+09 5.141e+10 -5.048e+09 5.529e+10 -4.496e+09 5.909e+10 -3.897e+09 6.275e+10 -3.260e+09 6.624e+10 -2.592e+09 6.951e+10 -1.903e+09 7.252e+10 -1.203e+09 7.522e+10 -5.011e+08 7.759e+10 1.926e+08 7.959e+10 8.693e+08 8.120e+10 1.520e+09 8.240e+10 2.135e+09 8.317e+10 2.709e+09 8.351e+10 3.233e+09 8.342e+10 3.704e+09 8.289e+10 4.117e+09 8.193e+10 4.468e+09 8.057e+10 4.756e+09 7.882e+10 4.980e+09 7.670e+10 5.140e+09 7.425e+10 5.238e+09 7.148e+10 5.276e+09 6.844e+10 5.257e+09 6.516e+10 5.186e+09 6.168e+10 5.066e+09 5.804e+10 4.903e+09 5.427e+10 4.702e+09 5.041e+10 4.469e+09 4.650e+10 4.210e+09 4.258e+10 3.930e+09 3.869e+10 3.634e+09 3.487e+10 3.329e+09 3.115e+10 3.020e+09 2.754e+10 2.710e+09 2.409e+10 2.406e+09 2.081e+10 2.109e+09 1.774e+10 1.825e+09 1.488e+10 1.556e+09 1.226e+10 1.305e+09 9.895e+09 1.074e+09 7.786e+09 8.639e+08 5.940e+09 6.770e+08 4.358e+09 5.134e+08 3.039e+09 3.735e+08 1.976e+09 2.572e+08 1.158e+09 1.637e+08 5.732e+08 9.224e+07 2.041e+08 4.161e+07 3.105e+07 1.048e+07 -3.032e+07 6.080e+06 -1.862e+08 2.836e+06 -4.659e+08 -1.195e+07 -8.463e+08 -3.774e+07 -1.302e+09 -7.226e+07 -1.808e+09 -1.132e+08 -2.339e+09 -1.583e+08 -2.873e+09 -2.054e+08 -3.390e+09 -2.524e+08 -3.870e+09 -2.975e+08 -4.299e+09 -3.390e+08 -4.664e+09 -3.755e+08 -4.954e+09 -4.059e+08 -5.165e+09 -4.295e+08 -5.292e+09 -4.456e+08 -5.335e+09 -4.540e+08 -5.297e+09 -4.548e+08 -5.182e+09 -4.483e+08 -4.997e+09 -4.350e+08 -4.751e+09 -4.157e+08 -4.454e+09 -3.912e+08 -4.128e+09 -3.823e+08 -3.768e+09 -3.590e+08 -3.382e+09 -3.228e+08 -2.989e+09 -2.856e+08 -2.599e+09 -2.483e+08 -2.220e+09 -2.121e+08 -1.862e+09 -1.776e+08 -1.531e+09 -1.457e+08 -1.230e+09 -1.167e+08 -9.644e+08 -9.118e+07 -7.352e+08 -6.916e+07 -5.426e+08 -5.070e+07 -3.859e+08 -3.571e+07 -2.625e+08 -2.393e+07 -1.692e+08 -1.505e+07 -1.021e+08 -8.695e+06 -5.664e+07 -4.423e+06 -2.811e+07 -1.800e+06 -1.202e+07 -4.039e+05 -4.196e+06 1.691e+05 -1.157e+06 2.886e+05 -3.532e+05 2.984e+05 -3.710e+05 4.453e+05 -1.148e+06 8.502e+05 -3.966e+06 1.732e+06 -1.157e+07 3.317e+06 -2.817e+07 5.796e+06 -5.925e+07 9.374e+06 -1.115e+08 1.431e+07 -1.926e+08 2.091e+07 -3.105e+08 2.957e+07 -4.735e+08 4.075e+07 -6.900e+08 5.503e+07 -9.669e+08 7.299e+07 -1.310e+09 9.533e+07 -1.725e+09 1.227e+08 -2.213e+09 1.559e+08 -2.773e+09 1.954e+08 -3.403e+09 2.418e+08 -4.095e+09 2.954e+08 -4.840e+09 3.564e+08 -5.625e+09 4.250e+08 -6.432e+09 5.006e+08 -7.242e+09 5.825e+08 -8.034e+09 6.695e+08 -8.782e+09 7.602e+08 -9.462e+09 8.527e+08 -1.005e+10 9.450e+08 -1.051e+10 1.034e+09 -1.084e+10 1.118e+09 -1.101e+10 1.194e+09 -1.099e+10 1.258e+09 -1.080e+10 1.307e+09 -1.041e+10 1.340e+09 -9.829e+09 1.352e+09 -9.074e+09 1.343e+09 -8.163e+09 1.309e+09 -7.123e+09 1.251e+09 -5.991e+09 1.168e+09 -4.813e+09 1.060e+09 -3.644e+09 9.298e+08 -2.541e+09 7.795e+08 -1.570e+09 6.144e+08 -7.973e+08 4.436e+08 -2.789e+08 2.910e+08 2.458e+07 2.228e+08 3.747e+08 2.892e+08 1.088e+09 4.344e+08 2.291e+09 5.878e+08 4.021e+09 7.255e+08 6.290e+09 8.372e+08 9.088e+09 9.164e+08 1.237e+10 9.590e+08 1.609e+10 9.637e+08 2.014e+10 9.311e+08 2.439e+10 8.651e+08 2.870e+10 7.724e+08 3.288e+10 6.628e+08 3.673e+10 5.491e+08 4.004e+10 4.463e+08 4.256e+10 3.727e+08 4.408e+10 3.472e+08 4.441e+10 3.832e+08 4.336e+10 4.898e+08 4.084e+10 6.701e+08 3.684e+10 9.167e+08 3.146e+10 1.206e+09 2.499e+10 1.494e+09 1.789e+10 1.710e+09 1.086e+10 1.755e+09 4.920e+09 1.518e+09 1.171e+09 1.159e+09 -1.867e+09 1.865e+09 -9.230e+09 4.441e+09 -2.558e+10 8.885e+09 -5.446e+10 1.554e+10 -9.986e+10 2.503e+10 -1.666e+11 3.815e+10 -2.601e+11 5.583e+10 -3.869e+11 7.916e+10 -5.542e+11 1.095e+11 -7.706e+11 1.482e+11 -1.045e+12 1.971e+11 -1.389e+12 2.580e+11 -1.813e+12 3.333e+11 -2.330e+12 4.252e+11 -2.955e+12 5.366e+11 -3.703e+12 6.706e+11 -4.590e+12 8.304e+11 -5.636e+12 1.020e+12 -6.859e+12 1.243e+12 -8.279e+12 1.504e+12 -9.921e+12 1.809e+12 -1.181e+13 2.161e+12 -1.396e+13 2.568e+12 -1.640e+13 3.034e+12 -1.917e+13 3.567e+12 -2.229e+13 4.172e+12 -2.578e+13 4.859e+12 -2.968e+13 5.634e+12 -3.401e+13 6.506e+12 -3.881e+13 7.490e+12 -4.411e+13 8.591e+12 -4.993e+13 9.817e+12 -5.631e+13 1.118e+13 -6.328e+13 1.269e+13 -7.086e+13 1.435e+13 -7.909e+13 1.618e+13 -8.800e+13 1.818e+13 -9.759e+13 2.037e+13 -1.079e+14 2.276e+13 -1.190e+14 2.535e+13 -1.308e+14 2.816e+13 -1.434e+14 3.119e+13 -1.567e+14 3.446e+13 -1.709e+14 3.796e+13 -1.858e+14 4.172e+13 -2.016e+14 4.572e+13 -2.181e+14 4.998e+13 -2.354e+14 5.450e+13 -2.535e+14 5.928e+13 -2.723e+14 6.432e+13 -2.918e+14 6.963e+13 -3.121e+14 7.519e+13 -3.329e+14 8.101e+13 -3.544e+14 8.708e+13 -3.764e+14 9.338e+13 -3.989e+14 9.992e+13 -4.219e+14 1.067e+14 -4.453e+14 1.136e+14 -4.690e+14 1.208e+14 -4.929e+14 1.281e+14 -5.170e+14 1.356e+14 -5.412e+14 1.433e+14 -5.655e+14 1.510e+14 -5.897e+14 1.589e+14 -6.137e+14 1.668e+14 -6.375e+14 1.748e+14 -6.610e+14 1.828e+14 -6.840e+14 1.909e+14 -7.066e+14 1.989e+14 -7.288e+14 2.069e+14 -7.504e+14 2.149e+14 -7.713e+14 2.227e+14 -7.913e+14 2.305e+14 -8.103e+14 2.381e+14 -8.285e+14 2.455e+14 -8.455e+14 2.527e+14 -8.614e+14 2.596e+14 -8.760e+14 2.663e+14 -8.894e+14 2.727e+14 -9.014e+14 2.788e+14 -9.121e+14 2.845e+14 -9.212e+14 2.899e+14 -9.289e+14 2.948e+14 -9.351e+14 2.993e+14 -9.396e+14 3.034e+14 -9.426e+14 3.070e+14 -9.440e+14 3.101e+14 -9.437e+14 3.127e+14 -9.418e+14 3.148e+14 -9.383e+14 3.164e+14 -9.332e+14 3.174e+14 -9.265e+14 3.178e+14 -9.182e+14 3.177e+14 -9.084e+14 3.170e+14 -8.971e+14 3.157e+14 -8.843e+14 3.139e+14 -8.702e+14 3.115e+14 -8.548e+14 3.086e+14 -8.381e+14 3.051e+14 -8.202e+14 3.011e+14 -8.013e+14 2.966e+14 -7.813e+14 2.916e+14 -7.604e+14 2.862e+14 -7.387e+14 2.803e+14 -7.163e+14 2.740e+14 -6.932e+14 2.673e+14 -6.696e+14 2.603e+14 -6.455e+14 2.530e+14 -6.211e+14 2.454e+14 -5.965e+14 2.375e+14 -5.717e+14 2.295e+14 -5.469e+14 2.212e+14 -5.221e+14 2.128e+14 -4.973e+14 2.043e+14 -4.728e+14 1.958e+14 -4.485e+14 1.872e+14 -4.246e+14 1.786e+14 -4.011e+14 1.700e+14 -3.780e+14 1.615e+14 -3.555e+14 1.531e+14 -3.335e+14 1.448e+14 -3.122e+14 1.366e+14 -2.916e+14 1.286e+14 -2.716e+14 1.208e+14 -2.524e+14 1.131e+14 -2.339e+14 1.057e+14 -2.163e+14 9.854e+13 -1.994e+14 9.162e+13 -1.833e+14 8.494e+13 -1.681e+14 7.853e+13 -1.536e+14 7.240e+13 -1.400e+14 6.654e+13 -1.272e+14 6.097e+13 -1.152e+14 5.569e+13 -1.039e+14 5.069e+13 -9.346e+13 4.598e+13 -8.374e+13 4.156e+13 -7.474e+13 3.742e+13 -6.643e+13 3.356e+13 -5.881e+13 2.997e+13 -5.183e+13 2.665e+13 -4.546e+13 2.358e+13 -3.969e+13 2.077e+13 -3.447e+13 1.821e+13 -2.977e+13 1.586e+13 -2.556e+13 1.374e+13 -2.181e+13 1.183e+13 -1.848e+13 1.012e+13 -1.555e+13 8.589e+12 -1.298e+13 7.235e+12 -1.074e+13 6.040e+12 -8.804e+12 4.996e+12 -7.140e+12 4.089e+12 -5.721e+12 3.307e+12 -4.524e+12 2.640e+12 -3.523e+12 2.076e+12 -2.694e+12 1.603e+12 -2.017e+12 1.213e+12 -1.473e+12 8.956e+11 -1.043e+12 6.413e+11 -7.097e+11 4.419e+11 -4.587e+11 2.896e+11 -2.758e+11 1.770e+11 -1.491e+11 9.770e+10 -6.768e+10 4.567e+10 -2.192e+10 1.557e+10 -3.496e+09 2.755e+09 5.605e+09 -2.993e+09 2.187e+10 -1.286e+10 4.738e+10 -2.922e+10 7.799e+10 -4.951e+10 1.104e+11 -7.166e+10 1.421e+11 -9.394e+10 1.710e+11 -1.150e+11 1.958e+11 -1.339e+11 2.157e+11 -1.498e+11 2.301e+11 -1.624e+11 2.389e+11 -1.713e+11 2.422e+11 -1.766e+11 2.404e+11 -1.782e+11 2.339e+11 -1.765e+11 2.234e+11 -1.716e+11 2.096e+11 -1.641e+11 1.932e+11 -1.543e+11 1.749e+11 -1.426e+11 1.554e+11 -1.296e+11 1.354e+11 -1.157e+11 1.156e+11 -1.012e+11 9.636e+10 -8.680e+10 7.824e+10 -7.270e+10 6.159e+10 -5.926e+10 4.672e+10 -4.678e+10 3.382e+10 -3.551e+10 2.301e+10 -2.562e+10 1.436e+10 -1.729e+10 7.877e+09 -1.062e+10 3.427e+09 -5.614e+09 8.658e+08 -2.289e+09 -1.358e+08 -6.183e+08 -9.917e+08 3.281e+07 -2.971e+09 1.356e+09 -6.018e+09 3.824e+09 -9.876e+09 7.371e+09 -1.429e+10 1.182e+10 -1.901e+10 1.700e+10 -2.383e+10 2.271e+10 -2.854e+10 2.877e+10 -3.295e+10 3.498e+10 -3.693e+10 4.119e+10 0.005 -58.824 -57.048 -55.273 -53.498 -51.707 -49.885 -48.101 -46.386 -44.754 -43.206 -41.739 -40.349 -39.033 -37.784 -36.600 -35.475 -34.407 -33.392 -32.428 -31.511 -30.641 -29.814 -29.029 -28.285 -27.580 -26.912 -26.281 -25.685 -25.123 -24.595 -24.100 -23.636 -23.204 -22.802 -22.430 -22.088 -21.776 -21.492 -21.236 -21.009 -20.810 -20.638 -20.493 -20.376 -20.286 -20.223 -20.188 -20.180 -20.200 -20.247 -20.322 -20.424 -20.555 -20.713 -20.900 -21.116 -21.361 -21.636 -21.941 -22.276 -22.642 -23.040 -23.469 -23.931 -24.426 -24.956 -25.520 -26.120 -26.757 -27.431 -28.144 -28.897 -29.690 -30.527 -31.407 -32.333 -33.306 -34.329 -35.404 -36.533 -37.719 -38.965 -40.273 -41.646 -43.083 -44.582 -46.134 -47.720 -49.305 -50.830 -52.221 -53.405 -54.351 -55.099 -55.760 -56.483 -57.441 -58.807 -60.613 -61.831 -60.298 -56.546 -52.597 -49.149 -46.157 -43.506 -41.112 -38.917 -36.883 -34.981 -33.192 -31.502 -29.899 -28.374 -26.920 -25.531 -24.203 -22.931 -21.712 -20.543 -19.421 -18.343 -17.309 -16.315 -15.361 -14.444 -13.563 -12.717 -11.904 -11.125 -10.378 -9.661 -8.974 -8.316 -7.686 -7.085 -6.510 -5.962 -5.439 -4.943 -4.472 -4.025 -3.603 -3.205 -2.831 -2.480 -2.153 -1.849 -1.569 -1.311 -1.076 -0.864 -0.675 -0.509 -0.367 -0.247 -0.150 -0.077 -0.027 -0.001 0.000 -0.023 -0.071 -0.145 -0.244 -0.370 -0.523 -0.705 -0.915 -1.155 -1.425 -1.728 -2.065 -2.436 -2.844 -3.291 -3.778 -4.309 -4.886 -5.513 -6.193 -6.932 -7.733 -8.604 -9.551 -10.585 -11.715 -12.955 -14.322 -15.839 -17.532 -19.441 -21.618 -24.141 -27.124 -30.756 -35.377 -41.691 -51.620 -65.608 -53.949 -44.117 -37.246 -32.229 -28.328 -25.154 -22.491 -20.205 -18.210 -16.447 -14.873 -13.457 -12.174 -11.008 -9.942 -8.966 -8.070 -7.246 -6.486 -5.787 -5.142 -4.548 -4.002 -3.499 -3.038 -2.617 -2.233 -1.884 -1.569 -1.287 -1.035 -0.814 -0.622 -0.457 -0.320 -0.210 -0.125 -0.066 -0.032 -0.022 -0.036 -0.074 -0.135 -0.219 -0.326 -0.456 -0.608 -0.783 -0.980 -1.200 -1.441 -1.705 -1.992 -2.301 -2.632 -2.986 -3.363 -3.763 -4.186 -4.633 -5.103 -5.598 -6.117 -6.661 -7.230 -7.824 -8.445 -9.093 -9.767 -10.470 -11.201 -11.962 -12.752 -13.575 -14.429 -15.316 -16.238 -17.195 -18.189 -19.222 -20.296 -21.412 -22.573 -23.782 -25.043 -26.358 -27.734 -29.175 -30.689 -32.284 -33.973 -35.769 -37.692 -39.765 -42.021 -44.497 -47.220 -50.157 -53.013 -55.026 -55.505 -54.826 -53.878 -53.084 -52.503 -52.075 -51.695 -51.240 -50.591 -49.675 -48.495 -47.116 -45.627 -44.104 -42.600 -41.143 -39.748 -38.420 -37.160 -35.966 -34.835 -33.764 -32.749 -31.788 -30.877 -30.015 -29.198 -28.426 -27.696 -27.006 -26.356 -25.743 -25.167 -24.627 -24.120 -23.648 -23.208 -22.800 -22.423 -22.077 -21.762 -21.475 -21.218 -20.989 -20.789 -20.617 -20.472 -20.355 -20.264 -20.201 -20.164 -20.154 -20.170 -20.212 -20.280 -20.375 -20.496 -20.643 -20.817 -21.017 -21.243 -21.496 -21.775 -22.082 -22.415 -22.777 -23.166 -23.584 -24.030 -24.506 -25.011 -25.546 -26.112 -26.708 -27.337 -27.998 -28.691 -29.419 -30.180 -30.977 -31.809 -32.678 -33.585 -34.529 -35.512 -36.533 -37.595 -38.696 -39.838 -41.019 -42.239 -43.497 -44.791 -46.118 -47.474 -48.855 -50.254 -51.660 -53.067 -54.475 -55.882 0 1 1.0 1 GMTSAR_V5.7/.svn/pristine/c4/c43f730bd30d8cc5946cf3f5aca39eb140031545.svn-base000444 015705 000000 00000025454 13505462013 025661 0ustar00sandwellwheel000000 000000 21 21 3.6787944117144233e-01 4.0454188510301881e-01 4.4043165450599925e-01 4.7473429993991240e-01 5.0661699236558966e-01 5.3526142851899028e-01 5.5989836656540204e-01 5.7984178333984637e-01 5.9452054797019427e-01 6.0350557542704053e-01 6.0653065971263342e-01 6.0350557542704053e-01 5.9452054797019427e-01 5.7984178333984637e-01 5.5989836656540204e-01 5.3526142851899028e-01 5.0661699236558966e-01 4.7473429993991240e-01 4.4043165450599925e-01 4.0454188510301881e-01 3.6787944117144233e-01 4.0454188510301881e-01 4.4485806622294111e-01 4.8432456895536241e-01 5.2204577676101604e-01 5.5710586181217392e-01 5.8860496967835518e-01 6.1569719676428503e-01 6.3762815162177322e-01 6.5376978512984718e-01 6.6365025013631929e-01 6.6697681085847438e-01 6.6365025013631929e-01 6.5376978512984718e-01 6.3762815162177322e-01 6.1569719676428503e-01 5.8860496967835518e-01 5.5710586181217392e-01 5.2204577676101604e-01 4.8432456895536241e-01 4.4485806622294111e-01 4.0454188510301881e-01 4.4043165450599925e-01 4.8432456895536241e-01 5.2729242404304855e-01 5.6836014675754043e-01 6.0653065971263342e-01 6.4082427603231873e-01 6.7032004603563922e-01 6.9419665087797877e-01 7.1177032276260965e-01 7.2252735364207221e-01 7.2614903707369094e-01 7.2252735364207221e-01 7.1177032276260965e-01 6.9419665087797877e-01 6.7032004603563922e-01 6.4082427603231873e-01 6.0653065971263342e-01 5.6836014675754043e-01 5.2729242404304855e-01 4.8432456895536241e-01 4.4043165450599925e-01 4.7473429993991240e-01 5.2204577676101604e-01 5.6836014675754043e-01 6.1262639418441611e-01 6.5376978512984729e-01 6.9073433063735468e-01 7.2252735364207221e-01 7.4826356757856516e-01 7.6720594997585567e-01 7.7880078307140488e-01 7.8270453824186825e-01 7.7880078307140488e-01 7.6720594997585567e-01 7.4826356757856516e-01 7.2252735364207221e-01 6.9073433063735468e-01 6.5376978512984729e-01 6.1262639418441611e-01 5.6836014675754043e-01 5.2204577676101604e-01 4.7473429993991240e-01 5.0661699236558966e-01 5.5710586181217392e-01 6.0653065971263342e-01 6.5376978512984729e-01 6.9767632607103103e-01 7.3712337439162767e-01 7.7105158580356625e-01 7.9851621875937706e-01 8.1873075307798182e-01 8.3110428385212565e-01 8.3527021141127200e-01 8.3110428385212565e-01 8.1873075307798182e-01 7.9851621875937706e-01 7.7105158580356625e-01 7.3712337439162767e-01 6.9767632607103103e-01 6.5376978512984729e-01 6.0653065971263342e-01 5.5710586181217392e-01 5.0661699236558966e-01 5.3526142851899028e-01 5.8860496967835518e-01 6.4082427603231873e-01 6.9073433063735468e-01 7.3712337439162767e-01 7.7880078307140488e-01 8.1464731641141452e-01 8.4366481659638370e-01 8.6502229311074130e-01 8.7809543092056130e-01 8.8249690258459546e-01 8.7809543092056130e-01 8.6502229311074130e-01 8.4366481659638370e-01 8.1464731641141452e-01 7.7880078307140488e-01 7.3712337439162767e-01 6.9073433063735468e-01 6.4082427603231873e-01 5.8860496967835518e-01 5.3526142851899028e-01 5.5989836656540204e-01 6.1569719676428503e-01 6.7032004603563922e-01 7.2252735364207221e-01 7.7105158580356625e-01 8.1464731641141452e-01 8.5214378896621135e-01 8.8249690258459546e-01 9.0483741803595952e-01 9.1851228440145738e-01 9.2311634638663576e-01 9.1851228440145738e-01 9.0483741803595952e-01 8.8249690258459546e-01 8.5214378896621135e-01 8.1464731641141452e-01 7.7105158580356625e-01 7.2252735364207221e-01 6.7032004603563922e-01 6.1569719676428503e-01 5.5989836656540204e-01 5.7984178333984637e-01 6.3762815162177322e-01 6.9419665087797877e-01 7.4826356757856516e-01 7.9851621875937706e-01 8.4366481659638370e-01 8.8249690258459546e-01 9.1393118527122819e-01 9.3706746337740343e-01 9.5122942450071402e-01 9.5599748183309996e-01 9.5122942450071402e-01 9.3706746337740343e-01 9.1393118527122819e-01 8.8249690258459546e-01 8.4366481659638370e-01 7.9851621875937706e-01 7.4826356757856516e-01 6.9419665087797877e-01 6.3762815162177322e-01 5.7984178333984637e-01 5.9452054797019427e-01 6.5376978512984718e-01 7.1177032276260965e-01 7.6720594997585567e-01 8.1873075307798182e-01 8.6502229311074130e-01 9.0483741803595952e-01 9.3706746337740343e-01 9.6078943915232318e-01 9.7530991202833262e-01 9.8019867330675525e-01 9.7530991202833262e-01 9.6078943915232318e-01 9.3706746337740343e-01 9.0483741803595952e-01 8.6502229311074130e-01 8.1873075307798182e-01 7.6720594997585567e-01 7.1177032276260965e-01 6.5376978512984718e-01 5.9452054797019427e-01 6.0350557542704053e-01 6.6365025013631929e-01 7.2252735364207221e-01 7.7880078307140488e-01 8.3110428385212565e-01 8.7809543092056130e-01 9.1851228440145738e-01 9.5122942450071402e-01 9.7530991202833262e-01 9.9004983374916811e-01 9.9501247919268232e-01 9.9004983374916811e-01 9.7530991202833262e-01 9.5122942450071402e-01 9.1851228440145738e-01 8.7809543092056130e-01 8.3110428385212565e-01 7.7880078307140488e-01 7.2252735364207221e-01 6.6365025013631929e-01 6.0350557542704053e-01 6.0653065971263342e-01 6.6697681085847438e-01 7.2614903707369094e-01 7.8270453824186825e-01 8.3527021141127200e-01 8.8249690258459546e-01 9.2311634638663576e-01 9.5599748183309996e-01 9.8019867330675525e-01 9.9501247919268232e-01 1.0000000000000000e+00 9.9501247919268232e-01 9.8019867330675525e-01 9.5599748183309996e-01 9.2311634638663576e-01 8.8249690258459546e-01 8.3527021141127200e-01 7.8270453824186825e-01 7.2614903707369094e-01 6.6697681085847438e-01 6.0653065971263342e-01 6.0350557542704053e-01 6.6365025013631929e-01 7.2252735364207221e-01 7.7880078307140488e-01 8.3110428385212565e-01 8.7809543092056130e-01 9.1851228440145738e-01 9.5122942450071402e-01 9.7530991202833262e-01 9.9004983374916811e-01 9.9501247919268232e-01 9.9004983374916811e-01 9.7530991202833262e-01 9.5122942450071402e-01 9.1851228440145738e-01 8.7809543092056130e-01 8.3110428385212565e-01 7.7880078307140488e-01 7.2252735364207221e-01 6.6365025013631929e-01 6.0350557542704053e-01 5.9452054797019427e-01 6.5376978512984718e-01 7.1177032276260965e-01 7.6720594997585567e-01 8.1873075307798182e-01 8.6502229311074130e-01 9.0483741803595952e-01 9.3706746337740343e-01 9.6078943915232318e-01 9.7530991202833262e-01 9.8019867330675525e-01 9.7530991202833262e-01 9.6078943915232318e-01 9.3706746337740343e-01 9.0483741803595952e-01 8.6502229311074130e-01 8.1873075307798182e-01 7.6720594997585567e-01 7.1177032276260965e-01 6.5376978512984718e-01 5.9452054797019427e-01 5.7984178333984637e-01 6.3762815162177322e-01 6.9419665087797877e-01 7.4826356757856516e-01 7.9851621875937706e-01 8.4366481659638370e-01 8.8249690258459546e-01 9.1393118527122819e-01 9.3706746337740343e-01 9.5122942450071402e-01 9.5599748183309996e-01 9.5122942450071402e-01 9.3706746337740343e-01 9.1393118527122819e-01 8.8249690258459546e-01 8.4366481659638370e-01 7.9851621875937706e-01 7.4826356757856516e-01 6.9419665087797877e-01 6.3762815162177322e-01 5.7984178333984637e-01 5.5989836656540204e-01 6.1569719676428503e-01 6.7032004603563922e-01 7.2252735364207221e-01 7.7105158580356625e-01 8.1464731641141452e-01 8.5214378896621135e-01 8.8249690258459546e-01 9.0483741803595952e-01 9.1851228440145738e-01 9.2311634638663576e-01 9.1851228440145738e-01 9.0483741803595952e-01 8.8249690258459546e-01 8.5214378896621135e-01 8.1464731641141452e-01 7.7105158580356625e-01 7.2252735364207221e-01 6.7032004603563922e-01 6.1569719676428503e-01 5.5989836656540204e-01 5.3526142851899028e-01 5.8860496967835518e-01 6.4082427603231873e-01 6.9073433063735468e-01 7.3712337439162767e-01 7.7880078307140488e-01 8.1464731641141452e-01 8.4366481659638370e-01 8.6502229311074130e-01 8.7809543092056130e-01 8.8249690258459546e-01 8.7809543092056130e-01 8.6502229311074130e-01 8.4366481659638370e-01 8.1464731641141452e-01 7.7880078307140488e-01 7.3712337439162767e-01 6.9073433063735468e-01 6.4082427603231873e-01 5.8860496967835518e-01 5.3526142851899028e-01 5.0661699236558966e-01 5.5710586181217392e-01 6.0653065971263342e-01 6.5376978512984729e-01 6.9767632607103103e-01 7.3712337439162767e-01 7.7105158580356625e-01 7.9851621875937706e-01 8.1873075307798182e-01 8.3110428385212565e-01 8.3527021141127200e-01 8.3110428385212565e-01 8.1873075307798182e-01 7.9851621875937706e-01 7.7105158580356625e-01 7.3712337439162767e-01 6.9767632607103103e-01 6.5376978512984729e-01 6.0653065971263342e-01 5.5710586181217392e-01 5.0661699236558966e-01 4.7473429993991240e-01 5.2204577676101604e-01 5.6836014675754043e-01 6.1262639418441611e-01 6.5376978512984729e-01 6.9073433063735468e-01 7.2252735364207221e-01 7.4826356757856516e-01 7.6720594997585567e-01 7.7880078307140488e-01 7.8270453824186825e-01 7.7880078307140488e-01 7.6720594997585567e-01 7.4826356757856516e-01 7.2252735364207221e-01 6.9073433063735468e-01 6.5376978512984729e-01 6.1262639418441611e-01 5.6836014675754043e-01 5.2204577676101604e-01 4.7473429993991240e-01 4.4043165450599925e-01 4.8432456895536241e-01 5.2729242404304855e-01 5.6836014675754043e-01 6.0653065971263342e-01 6.4082427603231873e-01 6.7032004603563922e-01 6.9419665087797877e-01 7.1177032276260965e-01 7.2252735364207221e-01 7.2614903707369094e-01 7.2252735364207221e-01 7.1177032276260965e-01 6.9419665087797877e-01 6.7032004603563922e-01 6.4082427603231873e-01 6.0653065971263342e-01 5.6836014675754043e-01 5.2729242404304855e-01 4.8432456895536241e-01 4.4043165450599925e-01 4.0454188510301881e-01 4.4485806622294111e-01 4.8432456895536241e-01 5.2204577676101604e-01 5.5710586181217392e-01 5.8860496967835518e-01 6.1569719676428503e-01 6.3762815162177322e-01 6.5376978512984718e-01 6.6365025013631929e-01 6.6697681085847438e-01 6.6365025013631929e-01 6.5376978512984718e-01 6.3762815162177322e-01 6.1569719676428503e-01 5.8860496967835518e-01 5.5710586181217392e-01 5.2204577676101604e-01 4.8432456895536241e-01 4.4485806622294111e-01 4.0454188510301881e-01 3.6787944117144233e-01 4.0454188510301881e-01 4.4043165450599925e-01 4.7473429993991240e-01 5.0661699236558966e-01 5.3526142851899028e-01 5.5989836656540204e-01 5.7984178333984637e-01 5.9452054797019427e-01 6.0350557542704053e-01 6.0653065971263342e-01 6.0350557542704053e-01 5.9452054797019427e-01 5.7984178333984637e-01 5.5989836656540204e-01 5.3526142851899028e-01 5.0661699236558966e-01 4.7473429993991240e-01 4.4043165450599925e-01 4.0454188510301881e-01 3.6787944117144233e-01 GMTSAR_V5.7/.svn/pristine/c3/c3cd31fba26237aa8df11c9362c6a522ffc5e755.svn-base000444 015705 000000 00000061736 13505462013 026030 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua Xu, Jan, 2018 # # Automatically perform two-path processing on raw(1.0)/SLC(1.1) data # if ($#argv != 3 && $#argv != 4) then echo "" echo "Usage: p2p_processing.csh SAT master_image slave_image [configuration_file] " echo "" echo "Example: p2p_processing.csh ALOS IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A [config.alos.txt]" echo "" echo " Put the data and orbit files in the raw folder, put DEM in the topo folder" echo " The SAT needs to be specified, choices with in ERS, ENVI, ALOS, ALOS_SLC, ALOS2, ALOS2_SCAN" echo " S1_STRIP, S1_TOPS, ENVI_SLC, CSK_RAW, CSK_SLC, TSX, RS2" echo "" echo " Make sure the files from the same date have the same stem, e.g. aaaa.tif aaaa.xml aaaa.cos aaaa.EOF, etc" echo "" echo " If the configuration file is left blank, the program will generate one " echo " with default parameters " echo "" exit 1 endif # start # Make sure the config exist if ($#argv == 4) then if(! -f $4 ) then echo " no configure file: "$4 echo " Leave it blank to generate config file with default values." exit 1 endif endif # # Read parameters from the configure file # set SAT = `echo $1` if ($#argv == 4) then set conf = `echo $4` else pop_config.csh $SAT > config.$SAT.txt set conf = `echo "config.$SAT.txt"` endif # conf may need to be changed later on set stage = `grep proc_stage $conf | awk '{print $3}'` set s_stages = `grep skip_stage $conf | awk '{print $3}' | awk -F, '{print $1,$2,$3,$4,$5,$6}'` set skip_1 = 0 set skip_2 = 0 set skip_3 = 0 set skip_4 = 0 set skip_5 = 0 set skip_6 = 0 foreach line (`echo $s_stages`) if ($line == 1) set skip_1 = 1 if ($line == 2) set skip_2 = 1 if ($line == 3) set skip_3 = 1 if ($line == 4) set skip_4 = 1 if ($line == 5) set skip_5 = 1 if ($line == 6) set skip_6 = 1 end if ("x$s_stages" != "x") then echo "" echo "Skipping stage $s_stages ..." endif set num_patches = `grep num_patches $conf | awk '{print $3}'` set near_range = `grep near_range $conf | awk '{print $3}'` set earth_radius = `grep earth_radius $conf | awk '{print $3}'` set fd = `grep fd1 $conf | awk '{print $3}'` set topo_phase = `grep topo_phase $conf | awk '{print $3}'` set shift_topo = `grep shift_topo $conf | awk '{print $3}'` set switch_master = `grep switch_master $conf | awk '{print $3}'` set filter = `grep filter_wavelength $conf | awk '{print $3}'` set iono = `grep correct_iono $conf | awk '{print $3}'` if ( "x$filter" == "x" ) then set iono = 0 endif set iono_filt_rng = `grep iono_filt_rng $conf | awk '{print $3}'` set iono_filt_azi = `grep iono_filt_azi $conf | awk '{print $3}'` set iono_dsamp = `grep iono_dsamp $conf | awk '{print $3}'` set iono_skip_est = `grep iono_skip_est $conf | awk '{print $3}'` # set filter = 200 # echo " " # echo "WARNING filter wavelength was not set in config.txt file" # echo " please specify wavelength (e.g., filter_wavelength = 200)" # echo " remove filter1 = gauss_alos_200m" #endif set dec = `grep dec_factor $conf | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $conf | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $conf | awk '{print $3}'` set region_cut = `grep region_cut $conf | awk '{print $3}'` set mask_water = `grep mask_water $conf | awk '{print $3}'` set switch_land = `grep switch_land $conf | awk '{print $3}'` set defomax = `grep defomax $conf | awk '{print $3}'` set range_dec = `grep range_dec $conf | awk '{print $3}'` set azimuth_dec = `grep azimuth_dec $conf | awk '{print $3}'` set SLC_factor = `grep SLC_factor $conf | awk '{print $3}'` set near_interp = `grep near_interp $conf | awk '{print $3}'` set master = ` echo $2 ` set slave = ` echo $3 ` echo "" # # combine preprocess parameters # set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif ############################# # 1 - start from preprocess # ############################# # # make sure the files exist # if ($stage == 1 && $skip_1 == 0) then echo "" echo "PREPROCESS - START" echo "" echo "Working on images $master $slave ..." if ($SAT == "ALOS" || $SAT == "ALOS2" || $SAT == "ALOS_SLC" || $SAT == "ALOS2_SCAN") then if(! -f raw/$master ) then echo " no file raw/"$master exit endif if(! -f raw/$slave ) then echo " no file raw/"$slave exit endif else if ($SAT == "ENVI_SLC") then if(! -f raw/$master.N1 ) then echo " no file raw/"$master.N1 exit endif if(! -f raw/$slave.N1 ) then echo " no file raw/"$slave.N1 exit endif else if ($SAT == "ERS") then if(! -f raw/$master.dat ) then echo " no file raw/"$master.dat exit endif if(! -f raw/$slave.dat ) then echo " no file raw/"$slave.dat exit endif if(! -f raw/$master.ldr ) then echo " no file raw/"$master.ldr exit endif if(! -f raw/$slave.ldr ) then echo " no file raw/"$slave.ldr exit endif else if ($SAT == "ENVI") then if(! -f raw/$master.baq ) then echo " no file raw/"$master.baq exit endif if(! -f raw/$slave.baq ) then echo " no file raw/"$slave.baq exit endif else if ($SAT == "S1_STRIP" || $SAT == "S1_TOPS") then if(! -f raw/$master.xml ) then echo " no file raw/"$master".xml" exit endif if(! -f raw/$master.tiff ) then echo " no file raw/"$master".tiff" exit endif if(! -f raw/$slave.xml ) then echo " no file raw/"$slave".xml" exit endif if(! -f raw/$slave.tiff ) then echo " no file raw/"$slave".tiff" exit endif if ($SAT == "S1_TOPS") then if(! -f raw/$master.EOF ) then echo " no file raw/"$master".EOF" endif if(! -f raw/$slave.EOF ) then echo " no file raw/"$slave".EOF" endif endif else if ($SAT == "CSK_RAW" || $SAT == "CSK_SLC") then if(! -f raw/$master.h5 ) then echo " no file raw/"$master".h5" exit endif if(! -f raw/$slave.h5 ) then echo " no file raw/"$slave".h5" exit endif else if ($SAT == "RS2") then if(! -f raw/$master.xml ) then echo " no file raw/"$master".xml" exit endif if(! -f raw/$master.tif ) then echo " no file raw/"$master".tif" exit endif if(! -f raw/$slave.xml ) then echo " no file raw/"$slave".xml" exit endif if(! -f raw/$slave.tif ) then echo " no file raw/"$slave".tif" exit endif else if ($SAT == "TSX") then if(! -f raw/$master.xml ) then echo " no file raw/"$master".xml" exit endif if(! -f raw/$slave.xml ) then echo " no file raw/"$slave".xml" exit endif if(! -f raw/$master.cos ) then echo " no file raw/"$master".cos" exit endif if(! -f raw/$slave.cos ) then echo " no file raw/"$slave".cos" exit endif endif # # Start preprocessing # rm raw/*.PRM* rm raw/*.SLC rm raw/*.LED cd raw #echo "pre_proc.csh $SAT $master $slave $commandline" pre_proc.csh $SAT $master $slave $commandline cd .. echo " " echo "PREPROCESS - END" echo "" endif ############################################# # 2 - start from focus and align SLC images # ############################################# # mkdir -p intf SLC if ($iono == 1) then mkdir -p SLC_L mkdir -p SLC_H endif if ($SAT == "S1_TOPS") then set master = `echo $master | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set slave = `echo $slave | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` endif if ($stage <= 2 && $skip_2 == 0) then cleanup.csh SLC if ($iono == 1) then rm -rf SLC_L/* SLC_H/* endif # # focus and align SLC images # echo " " echo "ALIGN.CSH - START" echo "" cd SLC if ($SAT != "S1_TOPS") then if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then cp ../raw/*.PRM . ln -s ../raw/$master.raw . ln -s ../raw/$slave.raw . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . if ($iono == 1) then # set chirp extention to zero for ionospheric phase estimation sed "s/.*fd1.*/fd1 = 0.0000/g" $master.PRM > tmp sed "s/.*chirp_ext.*/chirp_ext = 0/g" tmp > tmp2 mv tmp2 $master.PRM sed "s/.*fd1.*/fd1 = 0.0000/g" $slave.PRM > tmp sed "s/.*chirp_ext.*/chirp_ext = 0/g" tmp > tmp2 mv tmp2 $slave.PRM rm tmp endif else cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . endif if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then sarp.csh $master.PRM sarp.csh $slave.PRM endif if ($iono == 1) then if (-f ../raw/ALOS_fbd2fbs_log || -f ../raw/ALOS2_fbd2fbs_log) then set cfile = `grep IMG-HH ../raw/ALOS*fbd2fbs_log | awk '{print $1}'` if ($cfile == $slave) then split_spectrum $master.PRM 1 > params1 else split_spectrum $master.PRM > params1 endif endif mv SLCH ../SLC_H/$master.SLC mv SLCL ../SLC_L/$master.SLC if (-f ../raw/ALOS_fbd2fbs_log || -f ../raw/ALOS2_fbd2fbs_log) then set cfile = `grep IMG-HH ../raw/ALOS*fbd2fbs_log | awk '{print $1}'` if ($cfile == $master) then split_spectrum $slave.PRM 1 > params2 else split_spectrum $slave.PRM > params2 endif endif mv SLCH ../SLC_H/$slave.SLC mv SLCL ../SLC_L/$slave.SLC cd ../SLC_L set wl1 = `grep low_wavelength ../SLC/params1 | awk '{print $3}'` set wl2 = `grep low_wavelength ../SLC/params2 | awk '{print $3}'` cp ../SLC/$master.PRM . ln -s ../raw/$master.LED . sed "s/.*wavelength.*/radar_wavelength = $wl1/g" $master.PRM > tmp mv tmp $master.PRM cp ../SLC/$slave.PRM . ln -s ../raw/$slave.LED . sed "s/.*wavelength.*/radar_wavelength = $wl2/g" $slave.PRM > tmp mv tmp $slave.PRM cd ../SLC_H set wh1 = `grep high_wavelength ../SLC/params1 | awk '{print $3}'` set wh2 = `grep high_wavelength ../SLC/params2 | awk '{print $3}'` cp ../SLC/$master.PRM . ln -s ../raw/$master.LED . sed "s/.*wavelength.*/radar_wavelength = $wh1/g" $master.PRM > tmp mv tmp $master.PRM cp ../SLC/$slave.PRM . ln -s ../raw/$slave.LED . sed "s/.*wavelength.*/radar_wavelength = $wh2/g" $slave.PRM > tmp mv tmp $slave.PRM cd ../SLC endif cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM if ($SAT == "ALOS2_SCAN") then xcorr $master.PRM $slave.PRM -xsearch 32 -ysearch 256 -nx 32 -ny 128 awk '{print $4}' < freq_xcorr.dat > tmp.dat set amedian = `sort -n tmp.dat | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }'` set amax = `echo $amedian | awk '{print $1+3}'` set amin = `echo $amedian | awk '{print $1-3}'` awk '{if($4 > '$amin' && $4 < '$amax') print $0}' < freq_xcorr.dat > freq_alos2.dat fitoffset.csh 2 3 freq_alos2.dat 10 >> $slave.PRM else if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 -nx 20 -ny 50 fitoffset.csh 3 3 freq_xcorr.dat 18 >> $slave.PRM else xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 -nx 20 -ny 50 fitoffset.csh 2 2 freq_xcorr.dat 18 >> $slave.PRM endif resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM if ($iono == 1) then cd ../SLC_L cp $slave.PRM $slave.PRM0 if ($SAT == "ALOS2_SCAN") then ln -s ../SLC/freq_alos2.dat fitoffset.csh 2 3 freq_alos2.dat 10 >> $slave.PRM else if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 3 3 freq_xcorr.dat 18 >> $slave.PRM else ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 2 2 freq_xcorr.dat 18 >> $slave.PRM endif resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd ../SLC_H cp $slave.PRM $slave.PRM0 if ($SAT == "ALOS2_SCAN") then ln -s ../SLC/freq_alos2.dat fitoffset.csh 2 3 freq_alos2.dat 10 >> $slave.PRM else if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 3 3 freq_xcorr.dat 18 >> $slave.PRM else ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 2 2 freq_xcorr.dat 18 >> $slave.PRM endif resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd ../SLC endif else if ($SAT == "S1_TOPS") then cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . if ($iono == 1) then cd .. mkdir -p SLC_L mkdir -p SLC_H cd SLC ln -s ../raw/$2.tiff . ln -s ../raw/$3.tiff . split_spectrum $master.PRM > params1 mv high.tiff ../SLC_H/$2.tiff mv low.tiff ../SLC_L/$2.tiff split_spectrum $slave.PRM > params2 mv high.tiff ../SLC_H/$3.tiff mv low.tiff ../SLC_L/$3.tiff cd ../SLC_L ln -s ../raw/$2.xml . ln -s ../raw/$2.EOF . ln -s ../raw/$3.xml . ln -s ../raw/$3.EOF . ln -s ../topo/dem.grd . ln -s ../raw/a.grd . ln -s ../raw/r.grd . ln -s ../raw/offset*.dat . align_tops.csh $2 $2.EOF $3 $3.EOF dem.grd 1 set wl1 = `grep low_wavelength ../SLC/params1 | awk '{print $3}'` set wl2 = `grep low_wavelength ../SLC/params2 | awk '{print $3}'` #cp ../raw/$master.PRM . #ln -s ../raw/$master.LED . sed "s/.*wavelength.*/radar_wavelength = $wl1/g" $master.PRM > tmp mv tmp $master.PRM #cp ../raw/$slave.PRM . #ln -s ../raw/$slave.LED . sed "s/.*wavelength.*/radar_wavelength = $wl2/g" $slave.PRM > tmp mv tmp $slave.PRM cd ../SLC_H ln -s ../raw/$2.xml . ln -s ../raw/$2.EOF . ln -s ../raw/$3.xml . ln -s ../raw/$3.EOF . ln -s ../topo/dem.grd . ln -s ../raw/a.grd . ln -s ../raw/r.grd . ln -s ../raw/offset*.dat . align_tops.csh $2 $2.EOF $3 $3.EOF dem.grd 1 set wh1 = `grep high_wavelength ../SLC/params1 | awk '{print $3}'` set wh2 = `grep high_wavelength ../SLC/params2 | awk '{print $3}'` #cp ../raw/$master.PRM . #ln -s ../raw/$master.LED . sed "s/.*wavelength.*/radar_wavelength = $wh1/g" $master.PRM > tmp mv tmp $master.PRM #cp ../raw/$slave.PRM . #ln -s ../raw/$slave.LED . sed "s/.*wavelength.*/radar_wavelength = $wh2/g" $slave.PRM > tmp mv tmp $slave.PRM cd ../SLC endif endif if ($region_cut != "") then echo "Cutting SLC image to $region_cut" cut_slc $master.PRM junk1 $region_cut cut_slc $slave.PRM junk2 $region_cut mv junk1.PRM $master.PRM mv junk2.PRM $slave.PRM mv junk1.SLC $master.SLC mv junk2.SLC $slave.SLC if ($iono == 1) then cd ../SLC_L cut_slc $master.PRM junk1 $region_cut cut_slc $slave.PRM junk2 $region_cut mv junk1.PRM $master.PRM mv junk2.PRM $slave.PRM mv junk1.SLC $master.SLC mv junk2.SLC $slave.SLC cd ../SLC_H cut_slc $master.PRM junk1 $region_cut cut_slc $slave.PRM junk2 $region_cut mv junk1.PRM $master.PRM mv junk2.PRM $slave.PRM mv junk1.SLC $master.SLC mv junk2.SLC $slave.SLC endif endif cd .. echo "" echo "ALIGN.CSH - END" echo "" endif ################################## # 3 - start from make topo_ra # ################################## # if ($stage <= 3 && $skip_3 == 0) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC set rng_samp_rate = `grep rng_samp_rate $master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng = `gmt grdinfo ../topo/topo_ra.grd | grep x_inc | awk '{print $7}'` slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## # if ($stage <= 4 && $skip_4 == 0) then # # clean up # cleanup.csh intf # # select the master # if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$rep.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../SLC/$ref.LED . ln -s ../../SLC/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec endif else echo "NO TOPOGRAPHIC PHASE REMOVAL PORFORMED" intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec endif cd ../.. if ($iono == 1) then if (-e iono_phase ) rm -r iono_phase mkdir -p iono_phase cd iono_phase mkdir -p intf_o intf_h intf_l iono_correction set new_incx = `echo $range_dec $iono_dsamp | awk '{print $1*$2}'` set new_incy = `echo $azimuth_dec $iono_dsamp | awk '{print $1*$2}'` echo "" cd intf_h ln -s ../../SLC_H/*.SLC . ln -s ../../SLC_H/*.LED . cp ../../SLC_H/*.PRM . cp ../../SLC/params* . intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM 500 $dec $new_incx $new_incy cp phase.grd phasefilt.grd if ($iono_skip_est == 0) then if ($mask_water == 1 || $switch_land == 1) then set rcut = `gmt grdinfo phase.grd -I- | cut -c3-20` cd ../../topo landmask.csh $rcut cd ../iono_phase/intf_h ln -s ../../topo/landmask_ra.grd . endif snaphu_interp.csh 0.05 0 endif cd .. echo "" cd intf_l ln -s ../../SLC_L/*.SLC . ln -s ../../SLC_L/*.LED . cp ../../SLC_L/*.PRM . cp ../../SLC/params* . intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM 500 $dec $new_incx $new_incy cp phase.grd phasefilt.grd if ($iono_skip_est == 0) then if ($mask_water == 1 || $switch_land == 1) ln -s ../../topo/landmask_ra.grd . snaphu_interp.csh 0.05 0 endif cd .. echo "" cd intf_o ln -s ../../SLC/*.SLC . ln -s ../../SLC/*.LED . cp ../../SLC/*.PRM . intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM 500 $dec $new_incx $new_incy cp phase.grd phasefilt.grd if ($iono_skip_est == 0) then if ($mask_water == 1 || $switch_land == 1) ln -s ../../topo/landmask_ra.grd . snaphu_interp.csh 0.05 0 endif cd ../iono_correction echo "" if ($iono_skip_est == 0) then estimate_ionospheric_phase.csh ../intf_h ../intf_l ../intf_o ../../intf/$ref_id"_"$rep_id $iono_filt_rng $iono_filt_azi cd ../../intf/$ref_id"_"$rep_id mv phasefilt.grd phasefilt_non_corrected.grd gmt grdsample ../../iono_phase/iono_correction/ph_iono_orig.grd -Rphasefilt_non_corrected.grd -Gph_iono.grd gmt grdmath phasefilt_non_corrected.grd ph_iono.grd SUB PI ADD 2 PI MUL MOD PI SUB = phasefilt.grd gmt grdimage phasefilt.grd -JX6.5i -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phasefilt.ps gmt psscale -Rphasefilt.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -Bxa1.57+l"Phase" -By+lrad -O >> phasefilt.ps gmt psconvert -Tf -P -Z phasefilt.ps #rm phasefilt.ps endif cd ../../ endif echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ # if ($stage <= 5 && $skip_5 == 0) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../raw/$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id # # landmask # if ($mask_water == 1 || $switch_land == 1) then if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif # echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" # if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif # echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### # if ($stage <= 6 && $skip_6 == 0) then if ($threshold_geocode != 0 ) then cd intf set ref_id = `grep SC_clock_start ../raw/$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" if (-f raln.grd) rm raln.grd if (-f ralt.grd) rm ralt.grd if (-f trans.dat) rm trans.dat if ($topo_phase == 1) then ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. else echo "" echo "SKIP GEOCODE" echo "" endif endif # # end GMTSAR_V5.7/.svn/pristine/c3/c3a95c36b74a65851c955bcecb9784001586f6dd.svn-base000444 015705 000000 00000003150 13505462014 025624 0ustar00sandwellwheel000000 000000 /* * $Id: epr_param.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_PARAM_H_INCL #define EPR_PARAM_H_INCL #ifdef __cplusplus extern "C" { #endif #include /* just to get the ANSI-C type FILE */ /** * The EPR_ParamElem structure contains meta information * how many time is a correspondent parameter represents. */ struct EPR_ParamElem { /** * This is parameter name. */ char* param_name; /** * The number of data elements represented of this parameter. */ uint param_value; }; EPR_SPtrArray* epr_create_param_table(void); EPR_SParamElem* epr_create_param_elem(const char* param_name, int param_value); int epr_set_dyn_dddb_params(EPR_SProductId* product_id); void epr_free_param_table(EPR_SPtrArray* param_table); void epr_free_param_elem(EPR_SParamElem* param_elem); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_PARAM_H_INCL */ GMTSAR_V5.7/.svn/pristine/c3/c3088c7d129fdd314c94702f36f0468815c3c8d0.svn-base000444 015705 000000 00000002563 13505462014 025463 0ustar00sandwellwheel000000 000000 /* * $Id: epr_swap.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_SWAP_H_INCL #define EPR_SWAP_H_INCL #include /* just to get the ANSI-C type FILE */ #ifdef __cplusplus extern "C" { #endif void byte_swap_short(short *buffer, uint number_of_swaps); void byte_swap_ushort(ushort* buffer, uint number_of_swaps); void byte_swap_long(int *buffer, uint number_of_swaps); void byte_swap_uint(uint* buffer, uint number_of_swaps); void byte_swap_float(float* buffer, uint number_of_swaps); void epr_swap_endian_order(const EPR_SField* field); int epr_is_big_endian_order(); int epr_is_little_endian_order(); #ifdef __cplusplus } #endif #endif /* EPR_SWAP_H_INCL */ GMTSAR_V5.7/.svn/pristine/c3/c35b4f5182b0d7d192456530a64a7a835427358b.svn-base000444 015705 000000 00000000514 13505462014 025302 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_fbd2fbs_SLC CSRCS = ALOS_fbd2fbs_SLC.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/ef/efeb364663b22bf04853785903509720567e7587.svn-base000444 015705 000000 00000070430 13505462014 025266 0ustar00sandwellwheel000000 000000 /* * $Id: epr_typconv.c,v 1.2 2009-03-27 10:25:54 sabine Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_field.h" /*********************************** TYPE CONVERSION ***********************************/ /** * Interpretes a memory as a char value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the char typed element * or error_code if an error occured. */ char epr_get_field_elem_as_char(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_char: invalid field name"); return (char)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_char: invalid elem_index parameter"); return (char)0; } if (field->info->data_type_id != e_tid_char) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_char: invalid type"); return (char)0; } return ((char*) field->elems)[elem_index]; } /** * Interpretes a memory data as a char data * * @param field the pointer at the array to convert * * @return the char typed element * or NULL if an error occured. */ const char* epr_get_field_elems_char(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_chars: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_char) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_chars: invalid type"); return NULL; } return (char*) field->elems; } /** * Interpretes a memory as a uchar value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the uchar typed element * or error_code if an error occured. */ uchar epr_get_field_elem_as_uchar(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_uchar: invalid field name"); return (uchar)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_uchar: invalid elem_index parameter"); return (uchar)0; } if (field->info->data_type_id != e_tid_uchar) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_uchar: invalid type"); return (uchar)0; } return ((uchar*) field->elems)[elem_index]; } /** * Interpretes a memory data as a uchar data * * @param field the pointer at the array to convert * * @return the uchar typed element * or NULL if an error occured. */ const uchar* epr_get_field_elems_uchar(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_uchars: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_uchar) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_uchars: invalid type"); return NULL; } return (uchar*) field->elems; } /** * Interpretes a memory as a short value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the short typed element * or error_code if an error occured. */ short epr_get_field_elem_as_short(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_short: invalid field name"); return (short)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_short: invalid elem_index parameter"); return (short)0; } if (field->info->data_type_id == e_tid_uchar) { return (short)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (short)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_short) { return (short)((short*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_short: invalid type"); return (short)0; } /** * Interpretes a memory data as a short data * * @param field the pointer at the array to convert * * @return the short typed element * or NULL if an error occured. */ const short* epr_get_field_elems_short(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_shorts: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_short) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_shorts: invalid type"); return NULL; } return (short*) field->elems; } /** * Interpretes a memory as a ushort value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the ushort typed element * or error_code if an error occured. */ ushort epr_get_field_elem_as_ushort(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_ushort: invalid field name"); return (ushort)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_ushort: invalid elem_index parameter"); return (ushort)0; } if (field->info->data_type_id == e_tid_uchar) { return (ushort)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (ushort)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_ushort) { return (ushort)((ushort*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_ushort: invalid type"); return (ushort)0; } /** * Interpretes a memory data as a ushort data * * @param field the pointer at the array to convert * * @return the ushort typed element * or NULL if an error occured. */ const ushort* epr_get_field_elems_ushort(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_ushorts: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_ushort) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_ushorts: invalid type"); return NULL; } return (ushort*) field->elems; } /** * Interpretes a memory as a int value. * *

If an error occurs the method returns 0 (zero). * Whether an error really occured when zero is returned can by determined by * using the epr_get_last_err_code function. * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return a int value */ int epr_get_field_elem_as_int(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_long: invalid field name"); return (int)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_long: invalid elem_index parameter"); return (int)0; } if (field->info->data_type_id == e_tid_uchar) { return (int)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (int)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_ushort) { return (int)((ushort*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_short) { return (int)((short*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_int) { return (int)((int*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_long: invalid type"); return (int)0; } /** * Interpretes a memory data as a int data * * @param field the pointer at the array to convert * * @return the int typed element * or NULL if an error occured. */ const int* epr_get_field_elems_int(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_longs: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_int) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_longs: invalid type"); return NULL; } return (int*) field->elems; } /** * Interpretes a memory as a uint value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the uint typed element * or error_code if an error occured. */ uint epr_get_field_elem_as_uint(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_uint: invalid field name"); return (uint)0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_uint: invalid elem_index parameter"); return (uint)0; } if (field->info->data_type_id == e_tid_uint) { return (uint)((uint*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_uchar) { return (uint)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (uint)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_ushort) { return (uint)((ushort*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_short) { return (uint)((short*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_uint: invalid type"); return (uint)0; } /** * Interpretes a memory data as a uint data * * @param field the pointer at the array to convert * * @return the uint typed element * or NULL if an error occured. */ const uint* epr_get_field_elems_uint(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_uints: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_uint) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_uints: invalid type"); return NULL; } return (uint*) field->elems; } /** * Interpretes a memory as a float value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the float typed element * or error_code if an error occured. */ float epr_get_field_elem_as_float(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_float: invalid field name"); return 0.0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elem_as_float: invalid elem_index parameter"); return 0.0; } if (field->info->data_type_id == e_tid_float) { return (float)((float*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_uchar) { return (float)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (float)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_ushort) { return (float)((ushort*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_short) { return (float)((short*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_uint) { return (float)((uint*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_int) { return (float)((int*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_float: invalid type"); return 0.0; } /** * Interpretes a memory data as a float data * * @param field the pointer at the array to convert * * @return the float typed element * or NULL if an error occured. */ const float* epr_get_field_elems_float(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_floats: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_float) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_floats: invalid type"); return NULL; } return (float*) field->elems; } /** * Interpretes a memory as a double value * * @param field the pointer at the array to convert * @param elem_index the index of the element * in the given array to convert * * @return the double typed element * or error_code if an error occured. */ double epr_get_field_elem_as_double(const EPR_SField* field, uint elem_index) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_double: invalid field name"); return 0.0; } if (elem_index >= field->info->num_elems) { epr_set_err(e_err_invalid_value, "epr_get_field_elems_as_double: invalid elem_index parameter"); return 0.0; } if (field->info->data_type_id == e_tid_double) { return (double)((double*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_float) { return (double)((float*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_uchar) { return (double)((uchar*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_char) { return (double)((char*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_ushort) { return (double)((ushort*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_short) { return (double)((short*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_uint) { return (double)((uint*) field->elems)[elem_index]; } if (field->info->data_type_id == e_tid_int) { return (double)((int*) field->elems)[elem_index]; } epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_double: invalid type"); return 0.0; } /** * Interpretes a memory data as a double data * * @param field the pointer at the array to convert * * @return the double typed element * or NULL if an error occured. */ const double* epr_get_field_elems_double(const EPR_SField* field) { epr_clear_err(); epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_doubles: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_double) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_doubles: invalid type"); return NULL; } return (double*) field->elems; } /** * Interpretes a memory data as a short data * * @param field the pointer at the array to convert * @param time the pointer at the time structure to get * * @return the time [days, seconds, microseconds] * or NULL if an error occured. */ const EPR_STime* epr_get_field_elem_as_mjd(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_mjd: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_time) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_mjd: invalid type"); return NULL; } return (const EPR_STime*) field->elems; } /** * Interpretes a memory data as a string. * * @param field the pointer at the array to convert * * @return the char typed element * or NULL if an error occured. */ const char* epr_get_field_elem_as_str(const EPR_SField* field) { epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elem_as_str: invalid field name"); return NULL; } if (field->info->data_type_id != e_tid_string) { epr_set_err(e_err_invalid_data_format, "epr_get_field_elem_as_str: invalid type"); return NULL; } return (const char*) field->elems; } /** * Copies the data of the given field into the given buffer of double * elements. The actual number of elements copied is the minimum of the given * number of elements (the buffer's size) and the actual number of elements contained * in the field. *

If the actual field data type is not double the function automatically * performs the conversion. * * @param field the field from which to copy the elements * @param buffer the buffer in which to copy the data * @param num_elems the number of elements in the given buffer * @return the actual number of elements copied */ uint epr_copy_field_elems_as_doubles(const EPR_SField* field, double* buffer, uint num_elems) { uint num_elems_min = 0; uint i; epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_get_field_elems_as_doubles: invalid field name"); return num_elems_min; } num_elems_min = num_elems; if (field->info->num_elems < num_elems_min) { num_elems_min = field->info->num_elems; } if (field->info->data_type_id == e_tid_uchar) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((uchar*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_char) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((char*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_ushort) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((ushort*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_short) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((short*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_uint) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((uint*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_int) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((int*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_float) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((float*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_double) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (double)((double*) field->elems)[i]; } } else { epr_set_err(e_err_invalid_data_format, "epr_get_field_elems_as_double: invalid type"); return 0; } return num_elems_min; } /** * Copies the data of the given field into the given buffer of float * elements. The actual number of elements copied is the minimum of the given * number of elements (the buffer's size) and the actual number of elements contained * in the field. *

If the actual field data type is not float the function automatically * performs the conversion. * * @param field the field from which to copy the elements * @param buffer the buffer in which to copy the data * @param num_elems the number of elements in the given buffer * @return the actual number of elements copied */ uint epr_copy_field_elems_as_floats(const EPR_SField* field, float* buffer, uint num_elems) { uint num_elems_min = 0; uint i; epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_copy_field_elems_as_floats: invalid field name"); return num_elems_min; } num_elems_min = num_elems; if (field->info->num_elems < num_elems_min) { num_elems_min = field->info->num_elems; } if (field->info->data_type_id == e_tid_uchar) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((uchar*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_char) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((char*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_ushort) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((ushort*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_short) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((short*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_uint) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((uint*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_int) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((int*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_float) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (float)((float*) field->elems)[i]; } } else { epr_set_err(e_err_invalid_data_format, "epr_copy_field_elems_as_floats: invalid type"); return 0; } return num_elems_min; } /** * Copies the data of the given field into the given buffer of int * elements. The actual number of elements copied is the minimum of the given * number of elements (the buffer's size) and the actual number of elements contained * in the field. *

If the actual field data type is not int the function automatically * performs the conversion. * * @param field the field from which to copy the elements * @param buffer the buffer in which to copy the data * @param num_elems the number of elements in the given buffer * @return the actual number of elements copied */ uint epr_copy_field_elems_as_longs(const EPR_SField* field, int* buffer, uint num_elems) { uint num_elems_min = 0; uint i; epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_copy_field_elems_as_longs: invalid field name"); return num_elems_min; } num_elems_min = num_elems; if (field->info->num_elems < num_elems_min) { num_elems_min = field->info->num_elems; } if (field->info->data_type_id == e_tid_uchar) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (int)((uchar*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_char) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (int)((char*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_ushort) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (int)((ushort*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_short) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (int)((short*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_int) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (int)((int*) field->elems)[i]; } } else { epr_set_err(e_err_invalid_data_format, "epr_copy_field_elems_as_longs: invalid type"); return 0; } return num_elems_min; } /** * Copies the data of the given field into the given buffer of uint * elements. The actual number of elements copied is the minimum of the given * number of elements (the buffer's size) and the actual number of elements contained * in the field. *

If the actual field data type is not uint the function automatically * performs the conversion. * * @param field the field from which to copy the elements * @param buffer the buffer in which to copy the data * @param num_elems the number of elements in the given buffer * @return the actual number of elements copied */ uint epr_copy_field_elems_as_uints(const EPR_SField* field, uint* buffer, uint num_elems) { uint num_elems_min = 0; uint i; epr_clear_err(); if (field == NULL) { epr_set_err(e_err_invalid_field_name, "epr_copy_field_elems_as_uints: invalid field name"); return num_elems_min; } num_elems_min = num_elems; if (field->info->num_elems < num_elems_min) { num_elems_min = field->info->num_elems; } if (field->info->data_type_id == e_tid_uchar) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (uint)((uchar*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_char) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (uint)((char*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_ushort) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (uint)((ushort*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_short) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (uint)((short*) field->elems)[i]; } } else if (field->info->data_type_id == e_tid_int) { for (i = 0; i < num_elems_min; i++) { buffer[i] = (uint)((uint*) field->elems)[i]; } } else { epr_set_err(e_err_invalid_data_format, "epr_copy_field_elems_as_uints: invalid type"); return 0; } return num_elems_min; } /***************************************************************************************/ GMTSAR_V5.7/.svn/pristine/ef/ef50ecca0669ce49dbb77b8f0501b41b631f398e.svn-base000444 015705 000000 00000110703 13505462014 026117 0ustar00sandwellwheel000000 000000 /* provides structures to read ALOS SAR tapes */ /* reall just a CEOS reader */ /* include files were modified from the rceos.c programs written by C. Tomassini & F. Lorenna other format information from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada Table 6.1.2.2 "SARLEADER" FILE POINTER RECORD CONTENTS page 6. R. J. Mellors July 1997, IGPP-SIO from esa annex A (Document ER-IS-EPO-GS-5902.I) Issue 2.1.1 Paul F. Jamason 25-FEB-1997, IGPP-SIO Modified to read ALOS format Product Format Description (PALSAR Level 1.0) R. J. Mellors June 2007, SDSU 6/1/07 SARLEADER_DSS_RCS_ALOS 7th line changed to "%4c%4c%16c%16c%16c%16c%16c"\ (2 16c at end rather than 1 32c) */ /* ALOS raw data set summary record format */ #define SARLEADER_DSS_RCS_ALOS \ "%4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c" \ "%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c" \ "%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c" \ "%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c" \ "%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c" \ "%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c" \ "%4c%4c%16c%16c%16c%16c%16c" \ "%4c%8c%8c%8c%8c%4c%8c%16c%4c%4c%16c%4c%28c%120c%8c%8c%2048c%26c" /* ALOS raw data set summary corresponding log file output */ #define SARLEADER_DSS_RVL_ALOS(SP) \ (SP)->dss_rec_seq_num, (SP)->chan_ind, (SP)->reserved1, (SP)->scene_number, (SP)->input_scene_center_time, (SP)->spare1, \ (SP)->center_lat, (SP)->center_long, (SP)->center_heading, (SP)->ellipsoid_designator, (SP)->ellipsoid_semimajor_axis, \ (SP)->ellipsoid_semiminor_axis, (SP)->earth_constant, (SP)->spare2, (SP)->ellipsoid_j2, (SP)->ellipsoid_j3, \ (SP)->ellipsoid_j4, (SP)->spare, (SP)->reserved_new, (SP)->scene_centre_line_number, (SP)->scene_centre_pixel_number, \ (SP)->scene_length, (SP)->scene_width, (SP)->spare3, (SP)->nchan, (SP)->spare4, (SP)->mission_identifier, \ (SP)->sensor_id_and_mode, (SP)->orbit_number, (SP)->lat_nadir_center, (SP)->long_nadir_center, \ (SP)->heading_nadir_center, (SP)->clock_angle, (SP)->incidence_angle_center, (SP)->radar_freq, (SP)->radar_wavelength, \ (SP)->motion_compensation, (SP)->range_pulse_code_specifier, (SP)->range_pulse_amplitude_const, \ (SP)->range_pulse_amplitude_lin, (SP)->range_pulse_amplitude_quad, (SP)->range_pulse_amplitude_cube, \ (SP)->range_pulse_amplitude_quart, (SP)->range_pulse_phase_const, (SP)->range_pulse_phase_lin, \ (SP)->range_pulse_phase_quad, (SP)->range_pulse_phase_cube, (SP)->range_pulse_phase_quart, (SP)->chirp_extraction_index, \ (SP)->spare5, (SP)->sampling_rate, (SP)->range_gate_early_edge_start_image, (SP)->range_pulse_length, (SP)->reserved2, \ (SP)->range_compressed_flag, (SP)->reserved3, (SP)->quantisation_in_bits, (SP)->quantizer_descriptor, (SP)->dc_bias_i, \ (SP)->dc_bias_q, (SP)->gain_imbalance, (SP)->spare6, (SP)->reserved4, (SP)->antenna_mech_bor, (SP)->reserved5, \ (SP)->nominal_prf, (SP)->reserved6, (SP)->satelite_encoded_binary_time, (SP)->satelite_clock_time, \ (SP)->satelite_clock_increment, (SP)->spare7, (SP)->processing_facility_identifier, (SP)->processing_system_id, \ (SP)->processing_version_id, (SP)->reserved7, (SP)->product_type_id, (SP)->alg_id, (SP)->nlooks_az, \ (SP)->neff_looks_range, (SP)->bandwidth_look_az, (SP)->bandwidth_look_range, (SP)->total_look_bandwidth_az, \ (SP)->total_look_bandwidth_range, (SP)->w_func_designator_az, (SP)->w_func_designator_range, (SP)->data_input_source, \ (SP)->nom_res_3db_range, (SP)->nom_res_az, (SP)->reserved8, (SP)->a_track_dop_freq_const_early_image, \ (SP)->a_track_dop_freq_lin_early_image, (SP)->a_track_dop_freq_quad_early_image, (SP)->spare8, \ (SP)->c_track_dop_freq_const_early_image, (SP)->c_track_dop_freq_lin_early_image, \ (SP)->c_track_dop_freq_quad_early_image, (SP)->time_direction_along_pixel, (SP)->time_direction_along_line, \ (SP)->a_track_dop_freq_rate_const_early_image, (SP)->a_track_dop_freq_rate_lin_early_image, \ (SP)->a_track_dop_freq_rate_quad_early_image, (SP)->spare9, (SP)->c_track_dop_freq_rate_const_early_image, \ (SP)->c_track_dop_freq_rate_lin_early_image, (SP)->c_track_dop_freq_rate_quad_early_image, (SP)->spare10, \ (SP)->line_content_indicator, (SP)->clut_lock_flag, (SP)->autofocussing_flag, (SP)->line_spacing, \ (SP)->pixel_spacing_range, (SP)->range_compression_designator, (SP)->spare11, (SP)->spare12, \ (SP)->calibration_data_indicator, (SP)->start_line_upper_image, (SP)->stop_line_upper_image, \ (SP)->start_line_bottom_image, (SP)->stop_line_bottom_image, (SP)->PRF_switch, (SP)->PRF_switch_line, (SP)->spare13, \ (SP)->yaw_steering_mode, (SP)->parameter_table, (SP)->nom_offnadir_angle, (SP)->antenna_beam_number, (SP)->spare14, \ (SP)->spare15, (SP)->num_anno_points, (SP)->spare16, (SP)->image_annotation, (SP)->spare17 struct sarleader_dss_ALOS { char dss_rec_seq_num[4]; /*dss record sequence number (1)*/ char chan_ind[4]; /*sar channel indicator (1)*/ char reserved1[16]; /* scene identifier*/ char scene_number[32]; char input_scene_center_time[32]; char spare1[16]; char center_lat[16]; char center_long[16]; char center_heading[16]; char ellipsoid_designator[16]; char ellipsoid_semimajor_axis[16]; char ellipsoid_semiminor_axis[16]; char earth_constant[16]; char spare2[16]; char ellipsoid_j2[16]; char ellipsoid_j3[16]; char ellipsoid_j4[16]; char spare[16]; char reserved_new[16]; char scene_centre_line_number[8]; char scene_centre_pixel_number[8]; char scene_length[16]; char scene_width[16]; char spare3[16]; char nchan[4]; char spare4[4]; char mission_identifier[16]; char sensor_id_and_mode[32]; char orbit_number[8]; char lat_nadir_center[8]; char long_nadir_center[8]; char heading_nadir_center[8]; char clock_angle[8]; char incidence_angle_center[8]; char radar_freq[8]; char radar_wavelength[16]; char motion_compensation[2]; char range_pulse_code_specifier[16]; char range_pulse_amplitude_const[16]; char range_pulse_amplitude_lin[16]; char range_pulse_amplitude_quad[16]; char range_pulse_amplitude_cube[16]; char range_pulse_amplitude_quart[16]; char range_pulse_phase_const[16]; char range_pulse_phase_lin[16]; char range_pulse_phase_quad[16]; char range_pulse_phase_cube[16]; char range_pulse_phase_quart[16]; char chirp_extraction_index[8]; char spare5[8]; char sampling_rate[16]; char range_gate_early_edge_start_image[16]; char range_pulse_length[16]; char reserved2[4]; char range_compressed_flag[4]; char reserved3[32]; char quantisation_in_bits[8]; char quantizer_descriptor[12]; char dc_bias_i[16]; char dc_bias_q[16]; char gain_imbalance[16]; char spare6[32]; char reserved4[16]; char antenna_mech_bor[16]; char reserved5[4]; char nominal_prf[16]; char reserved6[32]; char satelite_encoded_binary_time[16]; char satelite_clock_time[32]; char satelite_clock_increment[8]; char spare7[8]; char processing_facility_identifier[16]; char processing_system_id[8]; char processing_version_id[8]; char reserved7[32]; char product_type_id[32]; char alg_id[32]; char nlooks_az[16]; char neff_looks_range[16]; char bandwidth_look_az[16]; char bandwidth_look_range[16]; char total_look_bandwidth_az[16]; char total_look_bandwidth_range[16]; char w_func_designator_az[32]; char w_func_designator_range[32]; char data_input_source[16]; char nom_res_3db_range[16]; char nom_res_az[16]; char reserved8[32]; char a_track_dop_freq_const_early_image[16]; char a_track_dop_freq_lin_early_image[16]; char a_track_dop_freq_quad_early_image[16]; char spare8[16]; char c_track_dop_freq_const_early_image[16]; char c_track_dop_freq_lin_early_image[16]; char c_track_dop_freq_quad_early_image[16]; char time_direction_along_pixel[8]; char time_direction_along_line[8]; char a_track_dop_freq_rate_const_early_image[16]; char a_track_dop_freq_rate_lin_early_image[16]; char a_track_dop_freq_rate_quad_early_image[16]; char spare9[16]; char c_track_dop_freq_rate_const_early_image[16]; char c_track_dop_freq_rate_lin_early_image[16]; char c_track_dop_freq_rate_quad_early_image[16]; char spare10[16]; char line_content_indicator[8]; char clut_lock_flag[4]; char autofocussing_flag[4]; char line_spacing[16]; char pixel_spacing_range[16]; char range_compression_designator[16]; char spare11[16]; char spare12[16]; char calibration_data_indicator[4]; char start_line_upper_image[8]; char stop_line_upper_image[8]; char start_line_bottom_image[8]; char stop_line_bottom_image[8]; char PRF_switch[4]; char PRF_switch_line[8]; char spare13[16]; char yaw_steering_mode[4]; char parameter_table[4]; char nom_offnadir_angle[16]; char antenna_beam_number[4]; char spare14[28]; char spare15[120]; char num_anno_points[8]; char spare16[8]; char image_annotation[2048]; char spare17[26]; }; #define SARLEADER_DSS_WCS_ALOS \ "*********** DSS RECORD ***********\n" \ "dss_rec_seq_num ==> %.4s\n" \ "chan_ind ==> %.4s\n" \ "reserved1 ==> %.16s\n" \ "scene_number ==> %.32s\n" \ "input_scene_center_time ==> %.32s\n" \ "spare1 ==> %.16s\n" \ "center_lat ==> %.16s\n" \ "center_long ==> %.16s\n" \ "center_heading ==> %.16s\n" \ "ellipsoid_designator ==> %.16s\n" \ "ellipsoid_semimajor_axis ==> %.16s\n" \ "ellipsoid_semiminor_axis ==> %.16s\n" \ "earth_constant ==> %.16s\n" \ "spare2 ==> %.16s\n" \ "ellipsoid_j2 ==> %.16s\n" \ "ellipsoid_j3 ==> %.16s\n" \ "ellipsoid_j4 ==> %.16s\n" \ "spare ==> %.16s\n" \ "reserved_new ==> %.16s\n" \ "scene_centre_line_number ==> %.8s\n" \ "scene_centre_pixel_number ==> %.8s\n" \ "scene_length ==> %.16s\n" \ "scene_width ==> %.16s\n" \ "spare3 ==> %.16s\n" \ "nchan ==> %.4s\n" \ "spare4 ==> %.4s\n" \ "mission_identifier ==> %.16s\n" \ "sensor_id_and_mode ==> %.32s\n" \ "orbit_number ==> %.8s\n" \ "lat_nadir_center ==> %.8s\n" \ "long_nadir_center ==> %.8s\n" \ "heading_nadir_center ==> %.8s\n" \ "clock_angle ==> %.8s\n" \ "incidence_angle_center ==> %.8s\n" \ "radar_freq ==> %.8s\n" \ "radar_wavelength ==> %.16s\n" \ "motion_compensation ==> %.2s\n" \ "range_pulse_code_specifier ==> %.16s\n" \ "range_pulse_amplitude_const ==> %.16s\n" \ "range_pulse_amplitude_lin ==> %.16s\n" \ "range_pulse_amplitude_quad ==> %.16s\n" \ "range_pulse_amplitude_cube ==> %.16s\n" \ "range_pulse_amplitude_quart ==> %.16s\n" \ "range_pulse_phase_const ==> %.16s\n" \ "range_pulse_phase_lin ==> %.16s\n" \ "range_pulse_phase_quad ==> %.16s\n" \ "range_pulse_phase_cube ==> %.16s\n" \ "range_pulse_phase_quart ==> %.16s\n" \ "chirp_extraction_index ==> %.8s\n" \ "spare5 ==> %.8s\n" \ "sampling_rate ==> %.16s\n" \ "range_gate_early_edge_start_image ==> %.16s\n" \ "range_pulse_length ==> %.16s\n" \ "reserved2 ==> %.4s\n" \ "range_compressed_flag ==> %.4s\n" \ "reserved3 ==> %.32s\n" \ "quantisation_in_bits ==> %.8s\n" \ "quantizer_descriptor ==> %.12s\n" \ "dc_bias_i ==> %.16s\n" \ "dc_bias_q ==> %.16s\n" \ "gain_imbalance ==> %.16s\n" \ "spare6 ==> %.32s\n" \ "reserved4 ==> %.16s\n" \ "antenna_mech_bor ==> %.16s\n" \ "reserved5 ==> %.4s\n" \ "nominal_prf ==> %.16s\n" \ "reserved6 ==> %.32s\n" \ "satelite_encoded_binary_time ==> %.16s\n" \ "satelite_clock_time ==> %.32s\n" \ "satelite_clock_increment ==> %.8s\n" \ "spare7 ==> %.8s\n" \ "processing_facility_identifier ==> %.16s\n" \ "processing_system_id ==> %.8s\n" \ "processing_version_id ==> %.8s\n" \ "reserved7 ==> %.32s\n" \ "product_type_id ==> %.32s\n" \ "alg_id ==> %.32s\n" \ "nlooks_az ==> %.16s\n" \ "neff_looks_range ==> %.16s\n" \ "bandwidth_look_az ==> %.16s\n" \ "bandwidth_look_range ==> %.16s\n" \ "total_look_bandwidth_az ==> %.16s\n" \ "total_look_bandwidth_range ==> %.16s\n" \ "w_func_designator_az ==> %.32s\n" \ "w_func_designator_range ==> %.32s\n" \ "data_input_source ==> %.16s\n" \ "nom_res_3db_range ==> %.16s\n" \ "nom_res_az ==> %.16s\n" \ "reserved8 ==> %.32s\n" \ "a_track_dop_freq_const_early_image ==> %.16s\n" \ "a_track_dop_freq_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_quad_early_image ==> %.16s\n" \ "spare8 ==> %.16s\n" \ "c_track_dop_freq_const_early_image ==> %.16s\n" \ "c_track_dop_freq_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_quad_early_image ==> %.16s\n" \ "time_direction_along_pixel ==> %.8s\n" \ "time_direction_along_line ==> %.8s\n" \ "a_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare9 ==> %.16s\n" \ "c_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare10 ==> %.16s\n" \ "line_content_indicator ==> %.8s\n" \ "clut_lock_flag ==> %.4s\n" \ "autofocussing_flag ==> %.4s\n" \ "line_spacing ==> %.16s\n" \ "pixel_spacing_range ==> %.16s\n" \ "range_compression_designator ==> %.16s\n" \ "spare11 ==> %.16s\n" \ "spare12 ==> %.16s\n" \ "calibration_data_indicator ==> %.4s\n" \ "start_line_upper_image ==> %.8s\n" \ "stop_line_upper_image ==> %.8s\n" \ "start_line_bottom_image ==> %.8s\n" \ "stop_line_bottom_image ==> %.8s\n" \ "PRF_switch ==> %.4s\n" \ "PRF_switch_line ==> %.8s\n" \ "spare13 ==> %.16s\n" \ "yaw_steering_mode ==> %.4s\n" \ "parameter_table ==> %.4s\n" \ "nom_offnadir_angle ==> %.16s\n" \ "antenna_beam_number ==> %.4s\n" \ "spare14 ==> %.28s\n" \ "spare15 ==> %.120s\n" \ "num_anno_points ==> %.8s\n" \ "spare16 ==> %.8s\n" \ "image_annotation ==> %.2048s\n" \ "spare17 ==> %.26s\n" /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define PLATFORM_RCS_ALOS \ "%32c%16c%16c%16c%16c%16c%16c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%" \ "16c%16c%16c" #define PLATFORM_RVL_ALOS(SP) \ (SP)->orbital_elements, (SP)->orbital_element_1, (SP)->orbital_element_2, (SP)->orbital_element_3, (SP)->orbital_element_4, \ (SP)->orbital_element_5, (SP)->orbital_element_6, (SP)->num_data_points, (SP)->year_of_data_points, \ (SP)->month_of_data_points, (SP)->day_of_data_points, (SP)->day_of_data_points_in_year, (SP)->sec_of_day_of_data, \ (SP)->data_points_time_gap, (SP)->ref_coord_sys, (SP)->greenwhich_mean_hour_angle, (SP)->a_track_pos_err, \ (SP)->c_track_pos_err, (SP)->radial_pos_err, (SP)->a_track_vel_err, (SP)->c_track_vel_err, (SP)->radial_vel_err /* ALOS stuff added by RJM June 2007 */ struct platform_ALOS { char orbital_elements[32]; char orbital_element_1[16]; char orbital_element_2[16]; char orbital_element_3[16]; char orbital_element_4[16]; char orbital_element_5[16]; char orbital_element_6[16]; char num_data_points[4]; char year_of_data_points[4]; char month_of_data_points[4]; char day_of_data_points[4]; char day_of_data_points_in_year[4]; char sec_of_day_of_data[22]; char data_points_time_gap[22]; char ref_coord_sys[64]; char greenwhich_mean_hour_angle[22]; char a_track_pos_err[16]; char c_track_pos_err[16]; char radial_pos_err[16]; char a_track_vel_err[16]; char c_track_vel_err[16]; char radial_vel_err[16]; }; #define POSITION_VECTOR_RCS_ALOS "%22c%22c%22c%22c%22c%22c" #define POSITION_VECTOR_RVL_ALOS(SP) (SP)->pos_x, (SP)->pos_y, (SP)->pos_z, (SP)->vel_x, (SP)->vel_y, (SP)->vel_z struct position_vector_ALOS { char pos_x[22]; char pos_y[22]; char pos_z[22]; char vel_x[22]; char vel_y[22]; char vel_z[22]; }; #define PLATFORM_WCS_ALOS \ "*********** PLATFORM POSITION VECTOR **********\n" \ "orbital_elements ==> |%.32s|\n" \ "orbital_element_1 ==> |%.16s|\n" \ "orbital_element_2 ==> |%.16s|\n" \ "orbital_element_3 ==> |%.16s|\n" \ "orbital_element_4 ==> |%.16s|\n" \ "orbital_element_5 ==> |%.16s|\n" \ "orbital_element_6 ==> |%.16s|\n" \ "num_data_points ==> |%.4s|\n" \ "year_of_data_points ==> |%.4s|\n" \ "month_of_data_points ==> |%.4s|\n" \ "day_of_data_points ==> |%.4s|\n" \ "day_of_data_points_in_year ==> |%.4s|\n" \ "sec_of_day_of_data ==> |%.22s|\n" \ "data_points_time_gap ==> |%.22s|\n" \ "ref_coord_sys ==> |%.64s|\n" \ "greenwhich_mean_hour_angle ==> |%.22s|\n" \ "a_track_pos_err ==> |%.16s|\n" \ "c_track_pos_err ==> |%.16s|\n" \ "radial_pos_err ==> |%.16s|\n" \ "a_track_vel_err ==> |%.16s|\n" \ "c_track_vel_err ==> |%.16s|\n" \ "radial_vel_err ==> |%.16s|\n" #define POSITION_VECTOR_WCS_ALOS \ "*********** PLATFORM VECTOR **********\n" \ "pos_x ==> %.22s\n" \ "pos_y ==> %.22s\n" \ "pos_z ==> %.22s\n" \ "vel_x ==> %.22s\n" \ "vel_y ==> %.22s\n" \ "vel_z ==> %.22s\n\n" struct attitude_info_ALOS { char num_att_data_points[4]; }; #define ATTITUDE_INFO_RCS_ALOS "%4c" #define ATTITUDE_INFO_WCS_ALOS \ "*********** ATTITUDE INFO **********\n" \ "num_att_data_points ==> |%.4s|\n" #define ATTITUDE_INFO_RVL_ALOS(SP) (SP)->num_att_data_points #define ATTITUDE_DATA_WCS_ALOS \ "*********** ATTITUDE DATA **********\n" \ "day_of_year ==> |%.4s|\n" \ "millisecond_day ==> |%.8s|\n" \ "pitch_data_quality ==> |%.4s|\n" \ "roll_data_quality ==> |%.4s|\n" \ "yaw_data_quality ==> |%.4s|\n" \ "pitch ==> |%.14s|\n" \ "roll ==> |%.14s|\n" \ "yaw ==> |%.14s|\n" \ "pitch_rate_data_quality ==> |%.4s|\n" \ "roll_rate_data_quality ==> |%.4s|\n" \ "yaw_rate_data_quality ==> |%.4s|\n" \ "pitch_rate ==> |%.14s|\n" \ "roll_rate ==> |%.14s|\n" \ "yaw_rate ==> |%.14s|\n" #define ATTITUDE_DATA_RCS_ALOS "%4c%8c%4c%4c%4c%14c%14c%14c%4c%4c%4c%14c%14c%14c" #define ATTITUDE_DATA_RVL_ALOS(SP) \ (SP)->day_of_year, (SP)->millisecond_day, (SP)->pitch_data_quality, (SP)->roll_data_quality, (SP)->yaw_data_quality, \ (SP)->pitch, (SP)->roll, (SP)->yaw, (SP)->pitch_rate_data_quality, (SP)->roll_rate_data_quality, \ (SP)->yaw_rate_data_quality, (SP)->pitch_rate, (SP)->roll_rate, (SP)->yaw_rate struct attitude_data_ALOS { char day_of_year[4]; char millisecond_day[8]; char pitch_data_quality[4]; char roll_data_quality[4]; char yaw_data_quality[4]; char pitch[14]; char roll[14]; char yaw[14]; char pitch_rate_data_quality[4]; char roll_rate_data_quality[4]; char yaw_rate_data_quality[4]; char pitch_rate[14]; char roll_rate[14]; char yaw_rate[14]; }; struct SAR_info { struct sarleader_fdr_fixseg *fixseg; struct sarleader_fdr_varseg *varseg; struct sarleader_dss_ALOS *dss_ALOS; struct platform_ALOS *platform_ALOS; struct position_vector_ALOS *position_ALOS; struct attitude_info_ALOS *attitude_info_ALOS; struct attitude_data_ALOS *attitude_ALOS; }; GMTSAR_V5.7/.svn/pristine/ef/ef5bd5e4296dff0f76effff2df0674f8bb7f064b.svn-base000444 015705 000000 00000001327 13505462014 026451 0ustar00sandwellwheel000000 000000 # Makefile for lib src CC = gcc LIB = libALOS.a INC = ../include #CC = gcc #CFLAGS = -O3 -xN -no-proc-div -ipo -static -Wall -I$(INC) #CFLAGS = -O3 -Wall -I$(INC) CFLAGS = -Wall -I$(INC) SRCS = utils.c \ null_sio_struct.c \ get_sio_struct.c \ put_sio_struct.c \ calc_dop.c \ hermite_c.c \ ALOS_ldr_orbit.c \ ALOSE_orbits_utils.c \ interpolate_ALOS_orbit.c \ read_ALOS_sarleader.c \ set_ALOS_defaults.c \ write_ALOS_prm.c \ rng_expand.c \ rng_compress.c \ find_fft_length.c \ siocomplex.c \ polyfit.c \ plh2xyz.c \ xyz2plh.c \ cfft1d.c \ fftpack.c OBJS= $(SRCS:.c=.o) $(LIB) : $(OBJS) ar r $(LIB) $? ranlib $(LIB) install: mv *.a ../lib/$(OS) ranlib ../lib/$(OS)/$(LIB) clean: \rm -f *.a *.o GMTSAR_V5.7/.svn/pristine/a1/a18b206a136ed2cf742e2d28fc97da4d1611664e.svn-base000444 015705 000000 00000005344 13505462013 025656 0ustar00sandwellwheel000000 000000 #ifndef PRM_H #define PRM_H struct PRM { char input_file[256]; char SLC_file[256]; char out_amp_file[256]; char out_data_file[256]; char deskew[8]; char iqflip[8]; char offset_video[8]; char srm[8]; char ref_file[128]; char led_file[128]; char orbdir[8]; /* orbit direction A or D (ASCEND or DESCEND) - added by RJM*/ char lookdir[8]; /* look direction R or L (RIGHT or LEFT) */ char dtype[8]; /* SLC data type a-SCOMPLEX integer complex, c-FCOMPLEX float complex */ char date[16]; /* yymmdd format - skip first two digits of year - added by RJM*/ int debug_flag; int bytes_per_line; int good_bytes; int first_line; int num_patches; int first_sample; int num_valid_az; int st_rng_bin; int num_rng_bins; int chirp_ext; int nlooks; int rshift; int ashift; int fdc_ystrt; int fdc_strt; int rec_start; int rec_stop; int SC_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)-Envisat_SLC (7)-TSX (8)-CSK (9)-RS2 (10)-S1A */ int ref_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10)-S1A */ int nrows; int num_lines; int SLC_format; /* 1 => complex ints (2 bytes) 2 => complex floats (4 bytes) */ double SC_clock_start; /* YYDDD.DDDD */ double SC_clock_stop; /* YYDDD.DDDD */ double icu_start; /* onboard clock counter */ double clock_start; /* DDD.DDDDDDDD clock without year has more precision */ double clock_stop; /* DDD.DDDDDDDD clock without year has more precision */ double caltone; double RE; /*local earth eadius */ double rc; /* polar radius */ double ra; /* equatorial radius */ double vel; /* Equivalent SC velocity */ double ht; /* (SC_radius - RE) center */ double ht_start; /* (SC_radius - RE) start */ double ht_end; /* (SC_radius - RE) end */ double near_range; double far_range; double prf; double xmi; double xmq; double az_res; double fs; double chirp_slope; double pulsedur; double lambda; double rhww; double pctbw; double pctbwaz; double fd1; double fdd1; double fddd1; double delr; /* added RJM */ double yaw; /* added RJM 12/07*/ double SLC_scale; double sub_int_r; double sub_int_a; double sub_double; double stretch_r; double stretch_a; double a_stretch_r; double a_stretch_a; double baseline_start; double baseline_center; double baseline_end; double alpha_start; double alpha_center; double alpha_end; double bpara; /* parallel baseline - added by RJM */ double bperp; /* perpendicular baseline - added by RJM */ /* New parameters 9/25/18 -EXU */ double B_offset_start; double B_offset_center; double B_offset_end; }; #endif /* PRM_H */ GMTSAR_V5.7/.svn/pristine/a1/a1f68a44b9b513ef275e00562d9a7f933c6ac200.svn-base000444 015705 000000 00000005117 13505462014 025575 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" void polyfit(double *T, double *Y, double *C, int *Mp, int *Np) /* T - array of independent variable of length M - input */ /* Y - array of dependent variable of length M - input */ /* C - array of polynomial coefficients length N - output */ /* FORTRAN callable */ { double **A, *B; int i, j, k; int M, N; M = *Mp; N = *Np; if (N > M) { printf(" underdetermined system \n"); exit(-1); } /* malloc the memory for A, and B */ if ((A = (double **)malloc(N * sizeof(double *))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for A-matrix.\n"); exit(-1); } for (i = 0; i < N; i++) { if ((A[i] = (double *)malloc(N * sizeof(double))) == NULL) { fprintf(stderr, "sorry, couldn't allocate memory for A-matrix.\n"); exit(-1); } } if ((B = (double *)malloc(N * sizeof(double))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for B-vector.\n"); exit(-1); } /* zero all the arrays */ for (i = 0; i < N; i++) { B[i] = 0.0; C[i] = 0.0; for (j = 0; j < N; j++) A[i][j] = 0.0; } /* set up A and B for polynomial fit of order N */ for (j = 0; j < N; j++) { for (k = 0; k < M; k++) { B[j] = B[j] + Y[k] * pow(T[k], j); } } for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { for (k = 0; k < M; k++) A[i][j] = A[i][j] + pow(T[k], j + i); } } gauss_jordan(A, B, C, &N); /* solve the equations */ free(A); free(B); } void gauss_jordan(double **A, double *B, double *X, int *Np) { /* routine for solving an N by N system of linear equations B = A*X using Gaussian elimination with back substitution. FORTRAN callable */ double temp, factor, sum; int m, u, p; int j, k, l, N, N0; N = *Np; N0 = N - 1; for (k = 0; k < N; k++) { m = k; for (l = m + 1; l < N; l++) { if (*(*(A + k) + m) != 0.0) { factor = *(*(A + k) + l) / *(*(A + k) + m); /* perform row operation on A */ for (j = 0; j < N; j++) *(*(A + j) + l) = *(*(A + j) + l) - factor * (*(*(A + j) + m)); /* perform row operation on B */ *(B + l) = *(B + l) - factor * (*(B + m)); } } for (j = 0; j < N; j++) { temp = *(*(A + j) + k); *(*(A + j) + k) = *(*(A + j) + m); *(*(A + j) + m) = temp; } temp = *(B + k); *(B + k) = *(B + m); *(B + m) = temp; } /* back substitute to construct solution vector X */ *(X + N0) = *(B + N0) / (*(*(A + N0) + N0)); for (p = 0; p < N; p++) { sum = 0.0; for (u = N0 - p + 1; u < N; u++) sum = sum + (*(*(A + u) + N0 - p)) * (*(X + u)); *(X + N0 - p) = (*(B + N0 - p) - sum) / (*(*(A + N0 - p) + N0 - p)); } } GMTSAR_V5.7/.svn/pristine/a1/a1b02b0897af84695cd538ad430ec43959acbacc.svn-base000444 015705 000000 00000003523 13505462013 026017 0ustar00sandwellwheel000000 000000 # $Id: BASICSVN.TXT 210 2015-08-07 15:46:10Z pwessel $ # For those unfamiliar with subversion, here are some basic commands and approaches Before you start making any edits, make sure your working copy is up-to-date by running svn up in the top GMTSAR directory. That will minimize any conflicts. After making any changes to the code, make an entry in the ChangeLog file, with the most recent changes on top, following the format of others. If you add any new files, make sure you tell subversion about them, e.g. svn add mynewfile Using svn add mynewdir will add the directory as well as any files in it. Likewise, to remove a file from the repository, use svn remove obsoletefile Nothing really happens until you decide to commit your changes. To commit your changes to the repository, use svn commit -m "short explanation of what you did" This will upload your changes to the server and tell you what the new revision number is. The revision number is for the entire repository and increases for each commit; there is no unique number per file. If during commit you get a conflict message, it means that your changes occurs in an area that one of the other developers _JUST_ committed as well. The simplest approach is to answer the question with "fix later" or something (I don't recall the exact wording), then edit that file. Update the file with svn up first. Now, you should easily find sections marked with >>> <<< showing both yours and the other version of the code. It is usually easy to figure out the issue and make the edits. Because the commit was marked as a conflict you must first remove the conflict once you are happy with your changes: svn resolved Now you can continue with the commit. Should you screw up and wish to revert to what it was before your changes, do svn revert svn up GMTSAR_V5.7/.svn/pristine/b0/b092a090fb0b10914c526aa81b0709e2d7fe4e70.svn-base000444 015705 000000 00000000753 13505462014 025557 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" #include #include #include int find_fft_length(int n); /*-----------------------------------------------------------------------*/ int find_fft_length(int n) { int nfft; nfft = 2; while (nfft < n) nfft = 2 * nfft; if (debug) fprintf(stderr, "find_fft_length:\n...data length n %d nfft %d \n\n", n, nfft); return (nfft); } /*-----------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/b0/b099005e5837806180b744c28a8dac26d4be23b1.svn-base000444 015705 000000 00000007500 13505462013 025433 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ALOS.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ################ # Satellite # # ALOS or ENVI # ################ SAT = ALOS ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches (usually 1~3) num_patches = # earth radius earth_radius = 6372062 # near_range near_range = # Doppler centroid fd1 = 0 # num_burst = 44 # burst_skip = 0 ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 200m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 1000 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 4 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0.01 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 region_cut = 400/5000/0/52000 # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 0 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 1 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = 0.01 GMTSAR_V5.7/.svn/pristine/de/de7cf554c4d9edccbe26d64d0e5ef4120a6f019a.svn-base000444 015705 000000 00000000475 13505462014 026334 0ustar00sandwellwheel000000 000000 % % plot the real and imaginar parts of the shifted gaussian function % load gauss.dat x=gauss(:,1); ri=gauss(:,2); ii=gauss(:,3); ro=gauss(:,4); io=gauss(:,5); clf subplot(2,1,1);plot(x,ri,'k',x,ro,'r');ylabel('real') axis([504,562,-1,1]) subplot(2,1,2);plot(x,ii,'k',x,io,'r');ylabel('imag') axis([504,562,-1,1]) GMTSAR_V5.7/.svn/pristine/a8/a8797e5ed13f0d89529b970a3f074f30d9034418.svn-base000444 015705 000000 00000014762 13505462013 025423 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 10 2010 # Kurt Feigl 20150811 add annotation to grd files # alias rm 'rm -f' unset noclobber # if ($#argv < 1) then errormessage: echo "" echo "Usage: geocode.csh correlation_threshold" echo "" echo " phase is masked when correlation is less than correlation_threshold" echo "" echo "Example: geocode.csh .12" echo "" exit 1 endif # if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # first mask the phase and phase gradient using the correlation # gmt grdmath corr.grd $1 GE 0 NAN mask.grd MUL = mask2.grd $V gmt grdmath phase.grd mask2.grd MUL = phase_mask.grd if (-e xphase.grd) then gmt grdmath xphase.grd mask2.grd MUL = xphase_mask.grd gmt grdmath yphase.grd mask2.grd MUL = yphase_mask.grd endif if (-e unwrap.grd) then gmt grdsample mask2.grd `gmt grdinfo unwrap.grd -I-` `gmt grdinfo unwrap.grd -I` -Gmask3.grd gmt grdmath unwrap.grd mask3.grd MUL = unwrap_mask.grd endif if (-e phasefilt.grd) then gmt grdmath phasefilt.grd mask2.grd MUL = phasefilt_mask.grd endif # # look at the masked phase # gmt grdimage phase_mask.grd -JX6.5i -Cphase.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > phase_mask.ps gmt psscale -Rphase_mask.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -Bxa1.57+l"Phase" -By+lrad -O >> phase_mask.ps gmt psconvert -Tf -P -Z phase_mask.ps echo "Masked phase map: phase_mask.pdf" if (-e xphase_mask.grd) then gmt grdimage xphase_mask.grd -JX8i -Cphase_grad.cpt -X.2i -Y.5i -P -K > xphase_mask.ps gmt psscale -Rxphase_mask.grd -J -DJTC+w5i/0.2i+h -Cphase_grad.cpt -Bxa1.57+l"Phase" -By+lrad -O >> xphase_mask.ps gmt psconvert -Tf -P -Z xphase_mask.ps echo "Masked x phase map: xphase_mask.pdf" gmt grdimage yphase_mask.grd -JX8i -Cphase_grad.cpt -X.2i -Y.5i -P -K > yphase_mask.ps gmt psscale -Ryphase_mask.grd -J -DJTC+w5i/0.2i+h -Cphase_grad.cpt -Bxa1.57+l"Phase" -By+lrad -O >> yphase_mask.ps gmt psconvert -Tf -P -Z yphase_mask.ps echo "Masked y phase map: yphase_mask.pdf" endif if (-e unwrap_mask.grd) then gmt grdimage unwrap_mask.grd -JX6.5i -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cunwrap.cpt -X1.3i -Y3i -P -K > unwrap_mask.ps gmt psscale -Runwrap_mask.grd -J -DJTC+w5i/0.2i+h+e -Cunwrap.cpt -Bxaf+l"Unwrapped phase" -By+lrad -O >> unwrap_mask.ps gmt psconvert -Tf -P -Z unwrap_mask.ps echo "Unwrapped masked phase map: unwrap_mask.pdf" endif if (-e phasefilt_mask.grd) then gmt grdimage phasefilt_mask.grd -JX6.5i -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phasefilt_mask.ps gmt psscale -Rphasefilt_mask.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -Bxa1.57+l"Phase" -By+lrad -O >> phasefilt_mask.ps gmt psconvert -Tf -P -Z phasefilt_mask.ps echo "Filtered masked phase map: phasefilt_mask.pdf" endif # line-of-sight displacement if (-e unwrap_mask.grd) then set wavel = `grep wavelength *.PRM | awk '{print($3)}' | head -1 ` gmt grdmath unwrap_mask.grd $wavel MUL -79.58 MUL = los.grd gmt grdgradient los.grd -Nt.9 -A0. -Glos_grad.grd set tmp = `gmt grdinfo -C -L2 los.grd` set limitU = `echo $tmp | awk '{printf("%5.1f", $12+$13*2)}'` set limitL = `echo $tmp | awk '{printf("%5.1f", $12-$13*2)}'` gmt makecpt -Cpolar -Z -T"$limitL"/"$limitU"/1 -D > los.cpt gmt grdimage los.grd -Ilos_grad.grd -Clos.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen -JX6.5i -X1.3i -Y3i -P -K > los.ps gmt psscale -Rlos.grd -J -DJTC+w5i/0.2i+h+e -Clos.cpt -Bxaf+l"LOS displacement [range decrease @~\256@~]" -By+lmm -O >> los.ps gmt psconvert -Tf -P -Z los.ps echo "Line-of-sight map: los.pdf" endif # # now reproject the phase to lon/lat space # echo "geocode.csh" echo "project correlation, phase, unwrapped and amplitude back to lon lat coordinates" set maker = $0:t set today = `date` set remarked = `echo by $USER on $today with $maker` echo remarked is $remarked proj_ra2ll.csh trans.dat corr.grd corr_ll.grd ; gmt grdedit -D//"dimensionless"/1///"$PWD:t geocoded correlation"/"$remarked" corr_ll.grd #proj_ra2ll.csh trans.dat phase.grd phase_ll.grd ; gmt grdedit -D//"radians"/1///"$PWD:t wrapped phase"/"$remarked" phase_ll.grd proj_ra2ll.csh trans.dat phasefilt.grd phasefilt_ll.grd ; gmt grdedit -D//"radians"/1///"$PWD:t wrapped phase after filtering"/"$remarked" phasefilt_ll.grd proj_ra2ll.csh trans.dat phase_mask.grd phase_mask_ll.grd ; gmt grdedit -D//"radians"/1///"$PWD:t wrapped phase after masking"/"$remarked" phase_mask_ll.grd proj_ra2ll.csh trans.dat display_amp.grd display_amp_ll.grd ; gmt grdedit -D//"dimensionless"/1///"PWD:t amplitude"/"$remarked" display_amp_ll.grd if (-e xphase_mask.grd) then proj_ra2ll.csh trans.dat xphase_mask.grd xphase_mask_ll.grd ; gmt grdedit -D//"radians"/1///PWD:t xphase"/"$remarked" xphase_mask_ll.grd proj_ra2ll.csh trans.dat yphase_mask.grd yphase_mask_ll.grd ; gmt grdedit -D//"radians"/1///PWD:t yphase"/"$remarked" yphase_mask_ll.grd endif if (-e unwrap_mask.grd) then proj_ra2ll.csh trans.dat unwrap_mask.grd unwrap_mask_ll.grd ; gmt grdedit -D//"radians"/1///"PWD:t unwrapped, masked phase"/"$remarked" unwrap_mask_ll.grd endif if (-e unwrap.grd) then proj_ra2ll.csh trans.dat unwrap.grd unwrap_ll.grd ; gmt grdedit -D//"radians"/1///"PWD:t unwrapped phase"/"$remarked" unwrap_ll.grd endif if (-e phasefilt_mask.grd) then proj_ra2ll.csh trans.dat phasefilt_mask.grd phasefilt_mask_ll.grd ; gmt grdedit -D//"phase in radians"/1///"PWD:t wrapped phase masked filtered"/"$remarked" phasefilt_mask_ll.grd endif # # now image for google earth # echo "geocode.csh" echo "make the KML files for Google Earth" grd2kml.csh display_amp_ll display_amp.cpt grd2kml.csh corr_ll corr.cpt grd2kml.csh phase_mask_ll phase.cpt grd2kml.csh phasefilt_mask_ll phase.cpt #ln -s phasefilt_mask_ll.grd phase_mask_ll_bw.grd #grd2kml.csh phase_mask_ll_bw phase_bw.cpt #rm phase_mask_ll_bw.grd if (-e xphase_mask_ll.grd) then grd2kml.csh xphase_mask_ll phase_grad.cpt grd2kml.csh yphase_mask_ll phase_grad.cpt endif if (-e unwrap_mask_ll.grd) then grd2kml.csh unwrap_mask_ll unwrap.cpt endif if (-e phasefilt_mask_ll.grd) then grd2kml.csh phasefilt_mask_ll phase.cpt endif if (-e unwrap_mask_ll.grd) then # constant is negative to make LOS = -1 * range change # constant is (1000 mm) / (4 * pi) gmt grdmath unwrap_mask_ll.grd $wavel MUL -79.58 MUL = los_ll.grd gmt grdedit -D//"mm"/1///"$PWD:t LOS displacement"/"equals negative range" los_ll.grd grd2kml.csh los_ll los.cpt endif GMTSAR_V5.7/.svn/pristine/a8/a897e07fa69c45b70bedce3a7455c1c0cd4f6408.svn-base000444 015705 000000 00000000504 13505462014 026034 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_fbd2fbs CSRCS = ALOS_fbd2fbs.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/a8/a802a4a4934905fb67d06e6538d05981a08e2352.svn-base000444 015705 000000 00000024103 13505462013 025310 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # # process generic L1.1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_SAT_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_SAT_SLC.csh TSX_20110608 TSX_20110619 config.tsx.slc.txt" echo "" echo " Place the L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/.svn/pristine/a8/a88dd51f7d985c17de35d84b0cf44db00db1c9ca.svn-base000444 015705 000000 00000000677 13505462013 026202 0ustar00sandwellwheel000000 000000 17 1 -2.8580304317007326e-03 -1.8456092566716510e-03 2.1764579221615073e-02 -2.1530490335147274e-02 -3.0529940042665758e-02 8.7413051581473736e-02 2.4469607245389439e-02 -6.7318181998379500e-01 0.0000000000000000e+00 6.7318181998379500e-01 -2.4469607245389439e-02 -8.7413051581473736e-02 3.0529940042665758e-02 2.1530490335147274e-02 -2.1764579221615073e-02 1.8456092566716510e-03 2.8580304317007326e-03 GMTSAR_V5.7/.svn/pristine/db/db2ae78e04072e0aab3a5ead0e39b4e42bf4b740.svn-base000444 015705 000000 00000000677 13505462013 026223 0ustar00sandwellwheel000000 000000 1 17 2.8580304317007326e-03 1.8456092566716510e-03 -2.1764579221615073e-02 2.1530490335147274e-02 3.0529940042665758e-02 -8.7413051581473736e-02 -2.4469607245389439e-02 6.7318181998379500e-01 0.0000000000000000e+00 -6.7318181998379500e-01 2.4469607245389439e-02 8.7413051581473736e-02 -3.0529940042665758e-02 -2.1530490335147274e-02 2.1764579221615073e-02 -1.8456092566716510e-03 -2.8580304317007326e-03 GMTSAR_V5.7/.svn/pristine/b7/b7f8aacb9dbde7ae8be4d8dfe8644e0de35f73a5.svn-base000444 015705 000000 00000003266 13505462014 026521 0ustar00sandwellwheel000000 000000 /* * $Id: epr_dataset.h,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_DATASET_H_INCL #define EPR_DATASET_H_INCL #ifdef __cplusplus extern "C" { #endif /** * @todo add docu here... */ EPR_SDatasetId* epr_create_dataset_id(EPR_SProductId* product_id, const EPR_SDSD* dsd, const char* dataset_name, const struct RecordDescriptor* record_info_ref, const char* dsd_name, const char* description); /** * Release the memory allocated through a dataset ID. * * @param product_id the file identifier, if NULL the function * immediately returns * @see epr_create_dataset_id */ void epr_free_dataset_id(EPR_SDatasetId* dataset_id); EPR_SPtrArray* epr_create_dataset_ids(EPR_SProductId* product_id); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_DATASET_H_INCL */ GMTSAR_V5.7/.svn/pristine/b7/b73e14a0532f0fc5051bf0d77869380c0830b278.svn-base000444 015705 000000 00000012712 13505462013 025361 0ustar00sandwellwheel000000 000000 # # $Id$ # # Default GMTSAR settings. DO NOT EDIT THIS FILE! # # There are two configuration files: # 1) "ConfigDefault.cmake" - is version controlled and used to add new default # variables and set defaults for everyone. # 2) "ConfigUser.cmake" - is not version controlled (currently listed in # svn:ignore property) and used to override defaults on a per-user basis. # # NOTE: If you want to change CMake behaviour just for yourself then copy # "ConfigUserTemplate.cmake" to "ConfigUser.cmake" and then edit # "ConfigUser.cmake" (not "ConfigDefault.cmake" or "ConfigUserTemplate.cmake"). # # The GMTSAR package name. set (GMTSAR_PACKAGE_NAME "GMTSAR") # a short description of the gmt project (only a few words). set (GMTSAR_PACKAGE_DESCRIPTION_SUMMARY "Includes preprocessors for ERS1/2, Envisat, ALOS-1, ALOS-2, TerraSAR-X, COSMOS-SkyMed, and RADARSAT-2 (beta), Sentinel-1A TOPS") # GMTSAR_VERSION_YEAR is set to current date in # cmake/modules/ConfigCMake.cmake if not specified here: #set (GMTSAR_VERSION_YEAR "2015") # The GMTSAR package version. set (GMTSAR_PACKAGE_VERSION_MAJOR 5) set (GMTSAR_PACKAGE_VERSION_MINOR 3) set (GMTSAR_PACKAGE_VERSION_PATCH 0) # The subversion revision of the GMTSAR source code. # This is manually set when making GMTSAR *public* releases. # However, when making internal releases or just an ordinary developer build, leave it # empty; if it is empty, the revision number is automatically populated for you on build. #set (GMTSAR_SOURCE_CODE_CONTROL_VERSION_STRING "15220") # The GMTSAR package version. set (GMTSAR_PACKAGE_VERSION "${GMTSAR_PACKAGE_VERSION_MAJOR}.${GMTSAR_PACKAGE_VERSION_MINOR}.${GMTSAR_PACKAGE_VERSION_PATCH}") # The API version (SOVERSION) of the GMTSAR libraries. # Increment this when more or fewer functions are included in the # library, the function prototype changes, or data type changes. set (GMTSAR_LIB_SOVERSION 5) # The build version (VERSION) of the GMTSAR libraries. set (GMTSAR_LIB_VERSION "${GMTSAR_LIB_SOVERSION}.${GMTSAR_PACKAGE_VERSION_MINOR}.${GMTSAR_PACKAGE_VERSION_PATCH}") # The GMTSAR wiki location set (GMTSAR_TRAC_WIKI "http://gmt.soest.hawaii.edu/projects/gmt5sar/wiki") # Directory in which to install the release sources per default if (NOT DEFINED GMTSAR_RELEASE_PREFIX) set (GMTSAR_RELEASE_PREFIX ${GMTSAR_BINARY_DIR}/gmtsar-${GMTSAR_PACKAGE_VERSION}) endif (NOT DEFINED GMTSAR_RELEASE_PREFIX) # You can set the build configuration type as a command-line argument to 'cmake' using -DCMAKE_BUILD_TYPE:STRING=Debug for example. # If no build configuration type was given as a command-line option to 'cmake' then a default cache entry is set here. # A cache entry is what appears in the 'CMakeCache.txt' file that CMake generates - you can edit that file directly or use the CMake GUI to edit it. # The user can then set this parameter via the CMake GUI before generating the native build system. # NOTE: this is not needed for visual studio because it has multiple configurations in the ide (and CMake includes them all). # however makefile generators can only have one build type (to have multiple build types you'll need multiple out-of-place builds - one for each build type). # # The following are some valid build configuration types: # 1) Debug - no optimisation with debug info. # 2) Release - release build optimised for speed. # 3) RelWithDebInfo - release build optimised for speed with debug info. # 4) MinSizeRel - release build optimised for size. # The following is from http://mail.kde.org/pipermail/kde-buildsystem/2008-November/005112.html... # # "The way to identify whether a generator is multi-configuration is to # check whether CMAKE_CONFIGURATION_TYPES is set. The VS/XCode generators # set it (and ignore CMAKE_BUILD_TYPE). The Makefile generators do not # set it (and use CMAKE_BUILD_TYPE). If CMAKE_CONFIGURATION_TYPES is not # already set, don't set it." # if (NOT DEFINED CMAKE_CONFIGURATION_TYPES) if (NOT DEFINED CMAKE_BUILD_TYPE) # Should we set build type to RelWithDebInfo for developers and # to release for general public (ie when GPLATES_SOURCE_RELEASE is true) ? # Currently it's Release for both. set (CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ${extra_build_configurations}." FORCE) endif (NOT DEFINED CMAKE_BUILD_TYPE) endif (NOT DEFINED CMAKE_CONFIGURATION_TYPES) # Turn this on if you want to... # Unix: see compiler commands echoed to console and messages about make # entering and leaving directories. # VisualStudio: see compiler commands. # Setting CMAKE_VERBOSE_MAKEFILE to 'true'... # Unix: puts 'VERBOSE=1' in the top Makefile. # VisualStudio: sets SuppressStartupBanner to FALSE. # If CMAKE_VERBOSE_MAKEFILE is set to 'false' and you want to turn on # verbosity temporarily you can... # Unix: type 'make VERBOSE=1' on the command-line when building. # VisualStudio: change SuppressStartupBanner to 'no' in "project # settings->configuration properties->*->general". if (NOT DEFINED CMAKE_VERBOSE_MAKEFILE) set (CMAKE_VERBOSE_MAKEFILE false) endif (NOT DEFINED CMAKE_VERBOSE_MAKEFILE) # prefer shared libs over static set (BUILD_SHARED_LIBS true) set (CMAKE_FIND_STATIC LAST) # look also for lib64 when building 64-bit binaries if (NOT DEFINED FIND_LIBRARY_USE_LIB64_PATHS) set (FIND_LIBRARY_USE_LIB64_PATHS true) endif (NOT DEFINED FIND_LIBRARY_USE_LIB64_PATHS) # search order for find_* set (CMAKE_FIND_FRAMEWORK LAST) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/.svn/pristine/b7/b78164f2a24fbd7e987c5bc3a1015bc25ca5e20b.svn-base000444 015705 000000 00000013740 13505462013 026014 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # create a configure file for p2p_processing.csh # syntax: pop_config.csh SAT # SAT can be ERS, ENVI, ALOS, ALOS_SLC, ALOS2, ALOS2_SCAN # S1_STRIP, S1_TOPS,, CSK_RAW, CSK_SLC, TSX, RS2 if ($#argv != 1) then echo "" echo "Usage: pop_config.csh SAT" echo "" echo " SAT can be ERS, ENVI, ALOS, ALOS_SLC, ALOS2, ALOS2_SCAN" echo " S1_STRIP, S1_TOPS, CSK_RAW, CSK_SLC, TSX, RS2" echo "" exit 1 endif set SAT = `echo $1` echo "#" echo "# This is an example configuration file for p2p_processing.csh" echo "#" echo "# all the comments or explanations are marked by "\""#"\" echo "# The parameters in this configuration file is distinguished by their first word so " echo "# user should follow the naming of each parameter." echo "# the parameter name, "\""="\"" sign, parameter value should be separated by space "\"" "\"". " echo "# leave the parameter value blank if using default value. " echo "#" echo " " echo "#####################" echo "# processing stage #" echo "#####################" echo "# 1 - start from preprocess" echo "# 2 - start from align SLC images" echo "# 3 - start from make topo_ra " echo "# 4 - start from make and filter interferograms " echo "# 5 - start from unwrap phase" echo "# 6 - start from geocode " echo "proc_stage = 1" echo "skip_stage = " echo "" echo "##################################" echo "# parameters for preprocess #" echo "# - pre_proc.csh #" echo "##################################" echo "# num of patches" echo "num_patches = " echo "" echo "# earth radius " echo "earth_radius =" echo "" echo "# near_range" echo "near_range = " echo "" echo "# Doppler centroid " echo "fd1 = " echo "" if ($SAT == "ALOS_SLC") then echo "# SLC scale factor to convert float to int " echo "SLC_factor = 0.02" echo "" else if ($SAT == "ALOS2" || $SAT == "ALOS2_SCAN") then echo "# SLC scale factor to convert float to int" echo "SLC_factor = 2.0" echo "" endif endif echo "################################################" echo "# parameters for focus and align SLC images #" echo "# - align.csh #" echo "################################################" echo "# region to cut in radar coordinates (leave it blank if process the whole image)" echo "# example 300/5900/0/25000" echo "region_cut =" echo "" echo "#" echo "#####################################" echo "# parameters for make topo_ra #" echo "# - dem2topo_ra.csh #" echo "#####################################" echo "# subtract topo_ra from the phase" echo "# (1 -- yes; 0 -- no)" echo "topo_phase = 1" echo "# if above parameter = 1 then one should have put dem.grd in topo/" echo "" echo "# topo_ra shift (1 -- yes; 0 -- no)" if ($SAT == "ALOS_SLC" || $SAT == "ALOS" || $SAT == "ERS") then echo "shift_topo = 1" else echo "shift_topo = 0" endif echo "" echo "####################################################" echo "# parameters for make and filter interferograms #" echo "# - intf.csh #" echo "# - filter.csh #" echo "####################################################" echo "# switch the master and slave when doing intf. " echo "# put "\""1"\"" if assume master as repeat and slave as reference " echo "# put "\""0"\"" if assume master as reference and slave as repeat [Default]" echo "# phase = repeat phase - reference phase" echo "switch_master = 0" echo "" echo "# filters " echo "# look at the filter/ folder to choose other filters" echo "# for tops processing, to force the decimation factor" echo "# recommended range decimation to be 8, azimuth decimation to be 2" if ($SAT == "ALOS2_SCAN") then echo "filter_wavelength = 400" else if ($SAT == "RS2" || $SAT == "TSX") then echo "filter_wavelength = 100" else echo "filter_wavelength = 200" endif echo "" echo "# decimation of images " echo "# decimation control the size of the amplitude and phase images. It is either 1 or 2." echo "# Set the decimation to be 1 if you want higher resolution images." echo "# Set the decimation to be 2 if you want images with smaller file size." echo "# " if ($SAT == "RS2" || $SAT == "TSX") then echo "dec_factor = 1 " else if ($SAT == "ALOS2_SCAN") then echo "dec_factor = 4 " else echo "dec_factor = 2 " endif if ($SAT == "S1_TOPS") then echo "range_dec = 8" echo "azimuth_dec = 2" endif echo "#" echo "# make ionospheric phase corrections using split spectrum method" echo "correct_iono = 0" echo "iono_filt_rng = 1.0" echo "iono_filt_azi = 1.0" echo "iono_dsamp = 1" echo "# " echo "# set the following parameter to skip ionospheric phase estimation" echo "iono_skip_est = 1 " echo "#" echo "#####################################" echo "# parameters for unwrap phase #" echo "# - snaphu.csh #" echo "#####################################" echo "# correlation threshold for snaphu.csh (0~1)" echo "# set it to be 0 to skip unwrapping." echo "threshold_snaphu = 0" echo "" echo "# interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, " echo "# others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details" echo "# this could be very slow in case a large blank area exist" echo "near_interp = 1" echo "" echo "# mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no)" echo "mask_water = 1" echo "" echo "#" echo "# Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps." echo "# defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation" echo "# defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band" echo "#" echo "defomax = 0" echo "" echo "#####################################" echo "# parameters for geocode #" echo "# - geocode.csh #" echo "#####################################" echo "# correlation threshold for geocode.csh (0< threshold <=1), set 0 to skip" echo "threshold_geocode = .10" echo "" GMTSAR_V5.7/.svn/pristine/b7/b75d3944acf4e598f3c3d2f353b41e3e215fff0b.svn-base000444 015705 000000 00000003151 13505462014 026034 0ustar00sandwellwheel000000 000000 /* write a PRM file */ #include "../include/SARtape.h" #include "../include/soi.h" #include #include #include #define FACTOR 1000000 make_prm(sar) struct SAR_info sar; { double radar_wavelength, pulse_dur, rng_samp_rate; double I_mean, Q_mean, sc_clock_start, chirp_slope; int SC_identity; /* ERS-1 = 1, ERS2 = 2 */ /* translate from structure holding SAR info */ /* see SARtape.h and associated include files for more details */ /* KW - removed dpaf from sar.dpaf_dss 12/17/98 */ sscanf((sar.dss->mission_identifier + 4), "%d", &SC_identity); prf1 = atof(sar.dss->nominal_prf); radar_wavelength = atof(sar.dss->radar_wavelength); /* convert into seconds from MHz */ pulse_dur = (atof(sar.dss->range_pulse_length) / FACTOR); rng_samp_rate = FACTOR * (atof(sar.dss->sampling)); /* correct by factor of two */ chirp_slope = 2.0 * atof(sar.dss->range_pulse_phase_quad); I_mean = atof(sar.dss->dc_bias_i); Q_mean = atof(sar.dss->dc_bias_q); /* pj: rsat leader has no values for dc_*; set to 15.5 (Sandwell) */ if (I_mean == 0.) I_mean = 15.5; if (Q_mean == 0.) Q_mean = 15.5; /* we don't want the first two character; (of year)) */ sc_clock_start = atof((sar.dss->satelite_clock_time + 2)); fprintf(stdout, "I_mean = %lf\n", I_mean); fprintf(stdout, "Q_mean = %lf\n", Q_mean); fprintf(stdout, "rng_samp_rate = %lg\n", rng_samp_rate); fprintf(stdout, "chirp_slope = %lg\n", chirp_slope); fprintf(stdout, "pulse_dur = %lg\n", pulse_dur); fprintf(stdout, "radar_wavelength = %lg\n", radar_wavelength); fprintf(stdout, "SC_identity = %d\n", SC_identity); } GMTSAR_V5.7/.svn/pristine/af/afc863d06338294627acb0d8a9abf98e71997744.svn-base000444 015705 000000 00000002521 13505462013 025640 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # compute the mean correlation # Creator: Xiaopeng Tong, David Sandwell # Date: July 6th 2013 # input: a list of the correlation gird files # output: the mean correlation # Reference: Synthetic Aperture Radar Interferometry, Rosen et al., 2000 if ($#argv != 2) then echo "" echo "Usage: stack_corr.csh list meancorr.grd" echo "" echo " compute the mean correlation from a stack of correlation grid files " echo "" echo " list -- a list of corr.grd file names" echo " meancorr.grd -- output file name of the mean correlation grid " echo "" echo " note that the grid of the grd files must be consistent" echo "" exit 1 endif if (! -e $1) then echo "" echo "no input file found: $1" echo "" exit 1 endif set list = $1 set out = $2 # compute the mean echo "computing the mean correlation of the grids .." @ num = 1 foreach cor (`cat $list`) if (! -e $cor) then echo " Error: file not found: $cor " echo "" exit 1 endif gmt grdmath $cor SQR = tmp.grd if ($num == 1) then gmt grdmath 1 tmp.grd SUB tmp.grd DIV = sum.grd else gmt grdmath 1 tmp.grd SUB tmp.grd DIV sum.grd ADD = tmp2.grd mv tmp2.grd sum.grd endif @ num ++ end @ num -- gmt grdmath 1 sum.grd $num DIV 1 ADD DIV SQRT = $out # clean up rm tmp.grd sum.grd GMTSAR_V5.7/.svn/pristine/af/afeaf5f8a89b29bf0378953e1911ab1cff66c1ec.svn-base000444 015705 000000 00000004641 13505462014 026266 0ustar00sandwellwheel000000 000000 /* * $Id: epr_record.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_RECORD_H_INCL #define EPR_RECORD_H_INCL #ifdef __cplusplus extern "C" { #endif #include /* just to get the ANSI-C type FILE */ /** * The EPR_RecordInfo structure contains meta information * about a particular record. */ struct EPR_RecordInfo { /** * The name of the dataset to which this record belongs to. */ char* dataset_name; /** * The array of field info pointers. */ EPR_SPtrArray* field_infos; /** * The total size in bytes of all data elements of all fields * of a record in a product file. * tot_size is a derived variable, it is computed at * runtime and not stored in the DSD-DB. */ uint tot_size; }; /** * Returns information about the structure of the records contained in * a dataset specified by the given dataset_id. * * @param dataset_id the the dataset identifier * * @return the the pointer for the record structure information. */ EPR_SRecordInfo* epr_get_record_info(EPR_SDatasetId* dataset_id); EPR_SRecordInfo* epr_read_record_info(EPR_SProductId* product_id, EPR_SDatasetId* dataset_id); void epr_read_sub_record_info(EPR_SProductId* product_id, FILE* db_file_istream, const char* parent_name, EPR_SPtrArray* field_infos); EPR_SRecordInfo* epr_create_record_info(const char* dataset_name, EPR_SPtrArray* field_infos); EPR_SRecord* epr_create_record_from_info(EPR_SRecordInfo* record_info); char* epr_get_record_info_path(EPR_SProductId* product_id, const char* dataset_name); void epr_free_record_info(EPR_SRecordInfo* record_info); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_RECORD_H_INCL */ GMTSAR_V5.7/.svn/pristine/af/af7b873caa52ddff6197bc4280230d0f4b84d0c3.svn-base000444 015705 000000 00000025626 13505462014 026107 0ustar00sandwellwheel000000 000000 /* * $Id: epr_dataset.c,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_dataset.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" EPR_SDatasetId* epr_create_dataset_id(EPR_SProductId* product_id, const EPR_SDSD* dsd, const char* dataset_name, const struct RecordDescriptor* record_descriptor, const char* dsd_name, const char* description) { EPR_SDatasetId* dataset_id = (EPR_SDatasetId*) calloc(1, sizeof (EPR_SDatasetId)); if (dataset_id == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_dataset_id: out of memory"); return NULL; } dataset_id->magic = EPR_MAGIC_DATASET_ID; dataset_id->product_id = product_id; dataset_id->dsd = dsd; dataset_id->record_info = NULL; epr_assign_string(&dataset_id->dataset_name, dataset_name); dataset_id->record_descriptor = record_descriptor; epr_assign_string(&dataset_id->dsd_name, dsd_name); epr_assign_string(&dataset_id->description, description); return dataset_id; } /** * Release the memory allocated through a dataset ID. * * @param product_id the file identifier, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise */ void epr_free_dataset_id(EPR_SDatasetId* dataset_id) { if (dataset_id == NULL) return; /* Don't free the product ID, it is NOT owned by a dataset ID */ dataset_id->product_id = NULL; /* Don't free the record information, it is NOT owned by a dataset ID */ dataset_id->record_info = NULL; /* Don't free the DSD, it is NOT owned by a dataset ID */ dataset_id->dsd = NULL; epr_free_and_null_string(&dataset_id->dataset_name); epr_free_and_null_string(&dataset_id->dsd_name); epr_free_and_null_string(&dataset_id->description); free(dataset_id); } /** * Creates an array of dataset_id for the given ENVISAT product * * @param product_id the the product file identifier * @return the instance of the array */ EPR_SPtrArray* epr_create_dataset_ids(EPR_SProductId* product_id) { EPR_SPtrArray* dataset_ids = NULL; EPR_SDatasetId* dataset_id = NULL; const EPR_SDSD* dsd = NULL; uint dsd_index; int i; const struct DatasetDescriptorTable* p_tables; int pt_index; int num_descr; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "create_dataset_ids: product_id must not be NULL"); return NULL; } /* @DDDB */ p_tables = dddb_product_tables; pt_index = -1; for (i = 0; i < EPR_NUM_PRODUCT_TABLES; i++) { const char* id = p_tables[i].name; if (strncmp(product_id->id_string, id, 10) == 0) { if (product_id->meris_iodd_version == 5) { if (strcmp(id, "MER_RR__1P_IODD5") == 0 || strcmp(id, "MER_FR__1P_IODD5") == 0) { pt_index = i; } } else if (product_id->meris_iodd_version == 6) { if (strcmp(id, "MER_RR__2P_IODD6") == 0 || strcmp(id, "MER_FR__2P_IODD6") == 0) { pt_index = i; } } else { pt_index = i; } } if (pt_index != -1) { break; } } if (pt_index == -1) { epr_set_err(e_err_null_pointer, "create_dataset_ids: unknown product type"); return NULL; } dataset_ids = epr_create_ptr_array(16); num_descr = p_tables[pt_index].num_descriptors; for (i = 0; i < num_descr; i++) { for (dsd_index = 0; dsd_index < product_id->dsd_array->length; dsd_index++) { dsd = (EPR_SDSD*)epr_get_ptr_array_elem_at(product_id->dsd_array, dsd_index); if (strncmp(dsd->ds_name, p_tables[pt_index].descriptors[i].ds_name, strlen(epr_strip_string_r(dsd->ds_name))) == 0) { dataset_id = epr_create_dataset_id(product_id, dsd, p_tables[pt_index].descriptors[i].id, p_tables[pt_index].descriptors[i].rec_descriptor, p_tables[pt_index].descriptors[i].ds_name, p_tables[pt_index].descriptors[i].description); epr_add_ptr_array_elem(dataset_ids, dataset_id); break; } } } return dataset_ids; } const char* epr_get_dataset_name(EPR_SDatasetId* dataset_id) { epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_dataset_name: band_id must not be NULL"); return NULL; } return epr_trim_string(dataset_id->dataset_name); } uint epr_get_num_records(const EPR_SDatasetId* dataset_id) { epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_invalid_dataset_name, "epr_get_num_records: invalid dataset name"); return (uint)-1; } return dataset_id->dsd->num_dsr; } const EPR_SDSD* epr_get_dsd(const EPR_SDatasetId* dataset_id) { epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_invalid_dataset_name, "epr_get_dsd: invalid dataset name"); return NULL; } return dataset_id->dsd; } const char* epr_get_dsd_name(const EPR_SDatasetId* dataset_id) { epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_invalid_dataset_name, "epr_get_dsd_name: invalid dataset name"); return NULL; } return epr_trim_string(dataset_id->dsd_name); } uint epr_get_dataset_offset(EPR_SDatasetId* dataset_id) { if (dataset_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_dataset_offset: dataset_id must not be NULL"); return (uint)0; } return dataset_id->dsd->ds_offset; } /*********************************** RECORD ***********************************/ /* Function: epr_create_record Access: public API Changelog: 2002/01/23 mp initial version */ /** * Creates a new record for the dataset given by the specified * dataset identifier. */ EPR_SRecord* epr_create_record(EPR_SDatasetId* dataset_id) { EPR_SRecord* record = NULL; epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_illegal_arg, "epr_create_record: dataset ID must not be NULL"); return NULL; } if (dataset_id->record_info == NULL) { dataset_id->record_info = epr_get_record_info(dataset_id); } record = epr_create_record_from_info(dataset_id->record_info); if (record == NULL) { epr_set_err(e_err_invalid_record_name, "epr_create_record: invalid record name"); return NULL; } return record; } /** * Reads a full record from ENVISAT product file. */ EPR_SRecord* epr_read_record(EPR_SDatasetId* dataset_id, uint record_index, EPR_SRecord* record) { uint field_index; uint dsd_offset; uint record_size; uint data_type_size; uint elements_to_read; uint elements_read; EPR_SField* field = NULL; epr_clear_err(); if (dataset_id == NULL) { epr_set_err(e_err_invalid_dataset_name, "epr_read_record: invalid dataset name"); return NULL; } if ((record_index < 0) || (record_index >= dataset_id->dsd->num_dsr)) { epr_set_err(e_err_invalid_value, "epr_read_record: invalid record_index parameter, must be >=0 and info != dataset_id->record_info) { epr_set_err(e_err_invalid_record_name, "epr_read_record: invalid record name"); return NULL; } /*READ FILE with: dataset_id->product_id->istream after the setting it to begin*/ rewind(dataset_id->product_id->istream); /*GET OFFSET*/ dsd_offset = dataset_id->dsd->ds_offset; record_size = record->info->tot_size; if (record_size != dataset_id->dsd->dsr_size) { //epr_set_err(e_err_invalid_data_format, // "epr_read_record: wrong record size"); //return NULL; } /* Set file pointer to begin of demanded record */ if (fseek(dataset_id->product_id->istream, dsd_offset + record_size * record_index, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_read_record: file seek failed"); return NULL; } for (field_index = 0; field_index < record->num_fields; field_index++) { field = record->fields[field_index]; elements_to_read = field->info->num_elems ; data_type_size = epr_get_data_type_size(field->info->data_type_id); assert(data_type_size != 0); assert(field->elems != NULL); if (elements_to_read * data_type_size != field->info->tot_size) { /*epr_log(e_log_info, "Spare");*/ data_type_size = field->info->tot_size / elements_to_read; } elements_read = fread(field->elems, data_type_size, elements_to_read, dataset_id->product_id->istream); if (elements_read != elements_to_read) { epr_set_err(e_err_file_read_error, "epr_read_record: file read failed"); return NULL; } /* * SWAP bytes on little endian (LE) order architectures (I368, Pentium Processors). * ENVISAT products are stored in big endian (BE) order. */ if (epr_api.little_endian_order) { epr_swap_endian_order(field); } } return record; } GMTSAR_V5.7/.svn/pristine/aa/aaf08adcca55d8db1a0080eb5346a0f5c119fab4.svn-base000444 015705 000000 00000020305 13505462014 026262 0ustar00sandwellwheel000000 000000 /*--------------------------------------------------------------------*/ /* Read parameters into PRM structure from PRM file Based on get_params by Evelyn J. Price Modified by RJM */ /*--------------------------------------------------------------------*/ #include "image_sio.h" #include "lib_functions.h" /* void get_sio_struct(FILE *, struct PRM *); void get_string(char *, char *, char *, char *); void get_int(char *, char *, char *, int *); void get_double(char *, char *, char *, double *); */ void get_sio_struct(FILE *fh, struct PRM *s) { char name[256], value[256]; debug = 0; if (debug) { fprintf(stderr, "get_sio_struct:\n"); fprintf(stderr, "PRMname (PRM value) interpreted value\n"); } while (fscanf(fh, "%s = %s \n", name, value) != EOF) { /* strings */ if (strcmp(name, "input_file") == 0) get_string(name, "input_file", value, s->input_file); if (strcmp(name, "led_file") == 0) get_string(name, "led_file", value, s->led_file); if (strcmp(name, "out_amp_file") == 0) get_string(name, "out_amp_file", value, s->out_amp_file); if (strcmp(name, "out_data_file") == 0) get_string(name, "out_data_file", value, s->out_data_file); if (strcmp(name, "scnd_rng_mig") == 0) get_string(name, "scnd_rng_mig", value, s->srm); if (strcmp(name, "deskew") == 0) get_string(name, "deskew", value, s->deskew); if (strcmp(name, "Flip_iq") == 0) get_string(name, "Flip_iq", value, s->iqflip); if (strcmp(name, "offset_video") == 0) get_string(name, "offset_video", value, s->offset_video); if (strcmp(name, "ref_file") == 0) get_string(name, "ref_file", value, s->ref_file); if (strcmp(name, "SLC_file") == 0) get_string(name, "SLC_file", value, s->SLC_file); if (strcmp(name, "orbdir") == 0) get_string(name, "orbdir", value, s->orbdir); if (strcmp(name, "lookdir") == 0) get_string(name, "lookdir", value, s->lookdir); if (strcmp(name, "date") == 0) get_string(name, "date", value, s->date); /* integers */ if (strcmp(name, "nrows") == 0) get_int(name, "nrows", value, &s->nrows); if (strcmp(name, "num_lines") == 0) get_int(name, "num_lines", value, &s->num_lines); if (strcmp(name, "bytes_per_line") == 0) get_int(name, "bytes_per_line", value, &s->bytes_per_line); if (strcmp(name, "good_bytes_per_line") == 0) get_int(name, "good_bytes_per_line", value, &s->good_bytes); if (strcmp(name, "first_line") == 0) get_int(name, "first_line", value, &s->first_line); if (strcmp(name, "num_patches") == 0) get_int(name, "num_patches", value, &s->num_patches); if (strcmp(name, "first_sample") == 0) get_int(name, "first_sample", value, &s->first_sample); if (strcmp(name, "num_valid_az") == 0) get_int(name, "num_valid_az", value, &s->num_valid_az); if (strcmp(name, "SC_identity") == 0) get_int(name, "SC_identity", value, &s->SC_identity); if (strcmp(name, "chirp_ext") == 0) get_int(name, "chirp_ext", value, &s->chirp_ext); if (strcmp(name, "st_rng_bin") == 0) get_int(name, "st_rng_bin", value, &s->st_rng_bin); if (strcmp(name, "num_rng_bins") == 0) get_int(name, "num_rng_bins", value, &s->num_rng_bins); if (strcmp(name, "ref_identity") == 0) get_int(name, "ref_identity", value, &s->ref_identity); if (strcmp(name, "nlooks") == 0) get_int(name, "nlooks", value, &s->nlooks); if (strcmp(name, "rshift") == 0) get_int(name, "rshift", value, &s->rshift); if (strcmp(name, "ashift") == 0) get_int(name, "ashift", value, &s->ashift); /* backwards compatibility for xshift/rshift yshift/ashift */ if (strcmp(name, "xshift") == 0) get_int(name, "rshift", value, &s->rshift); if (strcmp(name, "yshift") == 0) get_int(name, "ashift", value, &s->ashift); if (strcmp(name, "SLC_format") == 0) get_int(name, "SLC_format", value, &s->SLC_format); /* doubles */ if (strcmp(name, "SC_clock_start") == 0) get_double(name, "SC_clock_start", value, &s->SC_clock_start); if (strcmp(name, "SC_clock_stop") == 0) get_double(name, "SC_clock_stop", value, &s->SC_clock_stop); if (strcmp(name, "icu_start") == 0) get_double(name, "icu_start", value, &s->icu_start); if (strcmp(name, "clock_start") == 0) get_double(name, "clock_start", value, &s->clock_start); if (strcmp(name, "clock_stop") == 0) get_double(name, "clock_stop", value, &s->clock_stop); if (strcmp(name, "caltone") == 0) get_double(name, "caltone", value, &s->caltone); if (strcmp(name, "earth_radius") == 0) get_double(name, "earth_radius", value, &s->RE); if (strcmp(name, "equatorial_radius") == 0) get_double(name, "equatorial_radius", value, &s->ra); if (strcmp(name, "polar_radius") == 0) get_double(name, "polar_radius", value, &s->rc); if (strcmp(name, "SC_vel") == 0) get_double(name, "SC_vel", value, &s->vel); if (strcmp(name, "SC_height") == 0) get_double(name, "SC_height", value, &s->ht); if (strcmp(name, "SC_height_start") == 0) get_double(name, "SC_height_start", value, &s->ht_start); if (strcmp(name, "SC_height_end") == 0) get_double(name, "SC_height_end", value, &s->ht_end); if (strcmp(name, "near_range") == 0) get_double(name, "near_range", value, &s->near_range); if (strcmp(name, "PRF") == 0) get_double(name, "PRF", value, &s->prf); if (strcmp(name, "I_mean") == 0) get_double(name, "I_mean", value, &s->xmi); if (strcmp(name, "Q_mean") == 0) get_double(name, "Q_mean", value, &s->xmq); if (strcmp(name, "az_res") == 0) get_double(name, "az_res", value, &s->az_res); if (strcmp(name, "rng_samp_rate") == 0) get_double(name, "rng_samp_rate", value, &s->fs); if (strcmp(name, "chirp_slope") == 0) get_double(name, "chirp_slope", value, &s->chirp_slope); if (strcmp(name, "pulse_dur") == 0) get_double(name, "pulse_dur", value, &s->pulsedur); if (strcmp(name, "radar_wavelength") == 0) get_double(name, "radar_wavelength", value, &s->lambda); if (strcmp(name, "rng_spec_wgt") == 0) get_double(name, "rng_spec_wgt", value, &s->rhww); if (strcmp(name, "rm_rng_band") == 0) get_double(name, "rm_rng_band", value, &s->pctbw); if (strcmp(name, "rm_az_band") == 0) get_double(name, "rm_az_band", value, &s->pctbwaz); if (strcmp(name, "fd1") == 0) get_double(name, "fd1", value, &s->fd1); if (strcmp(name, "fdd1") == 0) get_double(name, "fdd1", value, &s->fdd1); if (strcmp(name, "fddd1") == 0) get_double(name, "fddd1", value, &s->fddd1); if (strcmp(name, "sub_int_r") == 0) get_double(name, "sub_int_r", value, &s->sub_int_r); if (strcmp(name, "sub_int_a") == 0) get_double(name, "sub_int_a", value, &s->sub_int_a); if (strcmp(name, "stretch_r") == 0) get_double(name, "stretch_r", value, &s->stretch_r); if (strcmp(name, "stretch_a") == 0) get_double(name, "stretch_a", value, &s->stretch_a); if (strcmp(name, "a_stretch_r") == 0) get_double(name, "a_stretch_r", value, &s->a_stretch_r); if (strcmp(name, "a_stretch_a") == 0) get_double(name, "a_stretch_a", value, &s->a_stretch_a); if (strcmp(name, "baseline_start") == 0) get_double(name, "baseline_start", value, &s->baseline_start); if (strcmp(name, "alpha_start") == 0) get_double(name, "alpha_start", value, &s->alpha_start); if (strcmp(name, "baseline_end") == 0) get_double(name, "baseline_end", value, &s->baseline_end); if (strcmp(name, "alpha_end") == 0) get_double(name, "alpha_end", value, &s->alpha_end); if (strcmp(name, "SLC_scale") == 0) get_double(name, "SLC_scale", value, &s->SLC_scale); } } /*--------------------------------------------------------------------------------*/ void get_string(char *s1, char *name, char *value, char *s2) { strcpy(s2, value); if (debug == 1) fprintf(stderr, " %s (%s) = %s\n", s1, name, value); } /*--------------------------------------------------------------------------------*/ void get_int(char *s1, char *name, char *value, int *iparam) { *iparam = atoi(value); if (debug == 1) fprintf(stderr, " %s (%s) = %s (%d)\n", s1, name, value, *iparam); } /*--------------------------------------------------------------------------------*/ void get_double(char *s1, char *name, char *value, double *param) { *param = atof(value); if (debug == 1) fprintf(stderr, " %s (%s) = %s (%lf)\n", s1, name, value, *param); } /*--------------------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/aa/aa971166ffacd30327ccd46ec3936c0049d3f239.svn-base000444 015705 000000 00000003425 13505462014 025743 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine to do a 1-D fft using FFTW routines * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography * * Date : 12/27/96 * ************************************************************************/ /************************************************************************ * Modification history: * * 04/01/98 - changed to have arguments be pointers (Fotran callable) * * 10/16/03 - changed to call fftw instead of the sun perflib * ************************************************************************/ #include "/sw/include/fftw3.h" #include #include #include cfft1d_(np, c, dir) int *np, *dir; fftwf_complex *c; { static int nold = 0; static fftwf_plan pf, pi; int i, n; /* Make the plans for FFTW and destroy the old ones if they exist. This is done when the length of the FFT has changed or when *dir == 0. */ n = *np; if ((n != nold) || (*dir == 0)) { if (nold != 0) { fftwf_destroy_plan(pf); fftwf_destroy_plan(pi); } pf = fftwf_plan_dft_1d(n, c, c, -1, FFTW_MEASURE); pi = fftwf_plan_dft_1d(n, c, c, 1, FFTW_MEASURE); printf(" reset plan \n"); nold = n; } /* Do forward transform with NO normalization. */ if (*dir == -1) { fftwf_execute(pf); } /* Do inverse transform with normalization. */ if (*dir == 1) { fftwf_execute(pi); for (i = 0; i < n; i++) { c[i][0] = c[i][0] / ((float)n); c[i][1] = c[i][1] / ((float)n); } } } GMTSAR_V5.7/.svn/pristine/aa/aa4419c4a36d8edf33f1688dc0d6e95df25274ca.svn-base000444 015705 000000 00000030626 13505462013 026117 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu, Feb 26 2016 # Take previous code, make it work with multiple frames # Take previous code, make it work with bursts mismatch # Preprocess and align tops image stacks # used for time series analysis # Xiaohua(Eric) Xu, Jan 19 2016 # if ($#argv != 3) then echo "" echo "Usage: preproc_batch_tops.csh data.in dem.grd mode" echo " preprocess and align a set of tops images in data.in, precise orbits required" echo "" echo " format of data.in:" echo " image_name:orbit_name" echo "" echo " example of data.in" echo " s1a-iw1-slc-vv-20150626...001:s1a-iw1-slc-vv-20150626...001:s1a-iw1-slc-vv-20150626...001:S1A_OPER_AUX_POEORB_V20150601_20150603.EOF" echo " s1a-iw1-slc-vv-20150715...001:s1a-iw1-slc-vv-20150715...001:s1a-iw1-slc-vv-20150715...001:S1A_OPER_AUX_POEORB_V20150625_20150627.EOF" echo "" echo " outputs:" echo " baseline.ps align_table.ra (contains info for precise geomatric alignment)" echo " *.PRM *.LED *.SLC(mode 2)" echo "" echo " Note:" echo " The names must be in time order in each line to be stitched together" echo "" echo "Reference: Xu, X., Sandwell, D.T., Tymofyeyeva, E., González-Ortega, A. and Tong, X., " echo " 2017. Tectonic and Anthropogenic Deformation at the Cerro Prieto Geothermal " echo " Step-Over Revealed by Sentinel-1A InSAR. IEEE Transactions on Geoscience and " echo " Remote Sensing." exit 1 endif # set up some parameters set mode = $3 set sl = `echo "1"` # sample the dem if ($mode == 2) then gmt grdfilter $2 -D2 -Fg2 -I12s -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt endif # first line is the super-master, all images aligned to it set master = `awk -F: 'NR==1 {print $1}' $1 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set mmaster = `awk -F: 'NR==1 {print $1}' $1 | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` # clean up a little bit rm *.PRM* *.SLC *.LED tmp* if($mode == 1) then rm baseline_table.dat endif # loop over all the acquisitions foreach line (`awk '{print $0}' $1`) # record the first one as the stem_master set stem_master = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set m_stem_master = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` if($mode == 1) then # for mode 1, generate baseline_plots set image = `echo $line | awk -F: '{print $1}'` set orbit = `echo $line | awk -F: '{print $NF}'` # generate prms and leds make_s1a_tops $image.xml $image.tiff $m_stem_master 0 ext_orb_s1a $m_stem_master.PRM $orbit $m_stem_master # get the height and baseline info cp $m_stem_master.PRM junk1 calc_dop_orb junk1 junk2 0 0 cat junk1 junk2 > $m_stem_master.PRM baseline_table.csh $mmaster.PRM $m_stem_master.PRM >> baseline_table.dat baseline_table.csh $mmaster.PRM $m_stem_master.PRM GMT >> table.gmt # clean up the mess rm junk1 junk2 else if($mode == 2) then # for mode 2, stitch and align all the images # find the files to be stitched echo $line | awk -F: '{for (i=1;i tmp.filelist set orbit = `echo $line | awk -F: '{print $NF}'` if (-f tmp.stitchlist) then rm tmp.stitchlist endif set tmp_da = 0 # loop over all the files in this line rm *par* foreach file (`awk '{print $0}' tmp.filelist`) # generate prms and leds set stem = `echo $file | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` # get images aligned if($sl == 1) then # sl=1 means processing the super_master image, simpley generate images and stitch them together make_s1a_tops $file.xml $file.tiff $stem 1 ext_orb_s1a $stem.PRM $orbit $stem echo $stem >> tmp.stitchlist else # sl>1 measn processing slave images, point-by-point alignment and corregistration is required make_s1a_tops $file.xml $file.tiff $stem 0 ext_orb_s1a $stem.PRM $orbit $stem # compute the time difference between first frame and the rest frames set t1 = `grep clock_start $stem_master.PRM | grep -v SC_clock_start | awk '{printf("%.13f", $3)}'` set t2 = `grep clock_start $stem.PRM | grep -v SC_clock_start | awk '{printf("%.13f", $3)}'` set prf = `grep PRF $stem_master.PRM | awk '{printf("%.6f",$3)}'` set nl = `echo $t1 $t2 $prf | awk '{printf("%d",($2 - $1)*$3*86400.0+0.2)}'` echo "Shifting the master PRM by $nl lines..." cp $master.PRM tmp.PRM # shift the super-master's PRM based on $nl so SAT_llt2rat gives precise estimate. set ttmp = `grep clock_start tmp.PRM | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_start $ttmp set ttmp = `grep clock_stop tmp.PRM | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_stop $ttmp set ttmp = `grep SC_clock_start tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_start $ttmp set ttmp = `grep SC_clock_stop tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 + '$nl'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_stop $ttmp # compute whether there are any image offset if ($tmp_da == 0) then cp tmp.PRM junk1.PRM cp $stem.PRM junk2.PRM calc_dop_orb junk1.PRM junk $earth_radius 0 cat junk >> junk1.PRM calc_dop_orb junk2.PRM junk $earth_radius 0 cat junk >> junk2.PRM set lontie = `SAT_baseline junk1.PRM junk2.PRM | grep lon_tie_point | awk '{print $3}'` set lattie = `SAT_baseline junk1.PRM junk2.PRM | grep lat_tie_point | awk '{print $3}'` set tmp_am = `echo $lontie $lattie 0 | SAT_llt2rat tmp.PRM 1 | awk '{print $2}'` set tmp_as = `echo $lontie $lattie 0 | SAT_llt2rat $stem.PRM 1 | awk '{print $2}'` set tmp_da = `echo $tmp_am $tmp_as | awk '{printf("%d",$2-$1)}'` rm junk1.PRM junk2.PRM junk endif # in case the images are offset by more than a burst, shift the super-master's PRM again so SAT_llt2rat gives precise estimate if ($tmp_da > -1000 && $tmp_da < 1000) then cp tmp.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > tmp.PRM cp $stem.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > $stem.PRM rm junk1 junk2 SAT_llt2rat tmp.PRM 1 < topo.llt > tmpm.dat & SAT_llt2rat $stem.PRM 1 < topo.llt > tmp1.dat & wait else echo "Modifying master PRM by $tmp_da lines..." set prf = `grep PRF tmp.PRM | awk '{print $3}'` set ttmp = `grep clock_start tmp.PRM | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_start $ttmp set ttmp = `grep clock_stop tmp.PRM | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_stop $ttmp set ttmp = `grep SC_clock_start tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_start $ttmp set ttmp = `grep SC_clock_stop tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_stop $ttmp cp tmp.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > tmp.PRM cp $stem.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > $stem.PRM rm junk1 junk2 SAT_llt2rat tmp.PRM 1 < topo.llt > tmpm.dat & SAT_llt2rat $stem.PRM 1 < topo.llt > tmp1.dat & wait endif # get r, dr, a, da, SNR table to be used by fitoffset.csh paste tmpm.dat tmp1.dat | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $6 - $1, $2, $7 - $2, "100")}' > tmp.dat set rmax = `grep num_rng_bins $stem.PRM | awk '{print $3}'` set amax = `grep num_lines $stem.PRM | awk '{print $3}'` awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat # prepare the offset parameters for the stitched image if ($tmp_da > -1000 && $tmp_da < 1000) then awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 + '$nl', $4, $5)}' < offset.dat >> par_tmp.dat else awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 + '$nl' - '$tmp_da', $4 + '$tmp_da', $5)}' < offset.dat >> par_tmp.dat endif # prepare the rshift and ashift look up table to be used by make_s1a_tops awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$2) }' < offset.dat > r.xyz awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$4) }' < offset.dat > a.xyz gmt blockmedian r.xyz -R0/$rmax/0/$amax -I8/4 -r -bo3d > rtmp.xyz gmt blockmedian a.xyz -R0/$rmax/0/$amax -I8/4 -r -bo3d > atmp.xyz gmt surface rtmp.xyz -bi3d -R0/$rmax/0/$amax -I8/4 -Grtmp.grd -T0.5 -N1000 -r & gmt surface atmp.xyz -bi3d -R0/$rmax/0/$amax -I8/4 -Gatmp.grd -T0.5 -N1000 -r & wait gmt grdmath rtmp.grd FLIPUD = r.grd gmt grdmath atmp.grd FLIPUD = a.grd # generate the image with point-by-point shifts make_s1a_tops $file.xml $file.tiff $stem 1 r.grd a.grd # need to update shift parameter so stitch_tops will know how to stitch fitoffset.csh 3 3 offset.dat >> $stem.PRM #fitoffset.csh 1 1 offset.dat >> $stem.PRM echo $stem >> tmp.stitchlist endif end set nf = `wc -l tmp.stitchlist | awk '{print $1}'` # get the name for stitched file set stem = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` # stitch images together and get the precise orbit if ($nf > 1) then stitch_tops tmp.stitchlist $stem else set tmp_stem = `cat tmp.stitchlist` cp $tmp_stem.PRM $stem.PRM cp $tmp_stem.LED $stem.LED mv $tmp_stem.SLC $stem.SLC update_PRM $stem.PRM input_file $stem.raw update_PRM $stem.PRM SLC_file $stem.SLC update_PRM $stem.PRM led_file $stem.LED endif ext_orb_s1a $stem.PRM $orbit $stem # for images except the super-master if ($sl != 1) then cp $stem.PRM $stem.PRM0 #if ($bshift != 0) echo "Updated shift caused by burst offset is $bshift" if ($tmp_da > -1000 && $tmp_da < 1000) then update_PRM $stem.PRM ashift 0 else update_PRM $stem.PRM ashift $tmp_da echo "Restoring $tmp_da lines shift to the image..." endif update_PRM $stem.PRM rshift 0 resamp $mmaster.PRM $stem.PRM $stem.PRMresamp $stem.SLCresamp 1 mv $stem.PRMresamp $stem.PRM mv $stem.SLCresamp $stem.SLC fitoffset.csh 3 3 par_tmp.dat >> $stem.PRM endif cp $stem.PRM junk1 if ($sl == 1) then calc_dop_orb junk1 junk2 0 0 set earth_radius = `grep earth_radius junk2 | awk '{print $3}'` else calc_dop_orb junk1 junk2 $earth_radius 0 endif cat junk1 junk2 > $stem.PRM rm junk1 junk2 set sl = `echo "2"` endif end # for mode 1, plot the time-baseline figure if($mode == 1) then awk '{print 2014+$1/365.25,$2,$7}' < table.gmt > text set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-50, $4+50}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > baseline.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba0.5:"year":/a50g00f25:"baseline (m)":WSen -O >> baseline.ps rm text text2 table.gmt endif # clean up a little bit if($mode == 2) rm tmp* topo.llt flt.grd atmp* rtmp* GMTSAR_V5.7/.svn/pristine/d2/d251edff6bba335c0b4c4f818d4d32cf984f4f5c.svn-base000444 015705 000000 00000014606 13505462013 026177 0ustar00sandwellwheel000000 000000 /* $Id: bperp.c 79 2013-06-10 23:43:27Z pwessel $ */ /*************************************************************************** * bperp reads the PRM file of a repeat pass file and extracts the * * baseline information. Then it computes a complete array of * * perpendicular baseline that depends on both range and azimuth. * * This baseline array is used for taking sums and differences of * * interferograms * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 7/7/95 * ***************************************************************************/ /*************************************************************************** * Modification history: * * Modified from ihBperp to read and write grd files. * * Xiaopeng Nov 24 2010 * * DATE * ***************************************************************************/ #include "gmtsar.h" char *USAGE = "bperp [GMTSAR] - Perpendicular baseline processing\n\n" " Usage: bperp rep.PRM phase.grd bperp.grd \n\n" " rep.PRM - input repeat PRM file that provides the interferometric " "baseline \n" " phase.grd - input phase grd file that provides the dimensions of the " "grd file \n" " bperp.grd - output grd file of the perpendicular baseline\n\n"; void print_prm_params(struct PRM p1, struct PRM p2) { fprintf(stderr, " SLC 1: num_rng_bins %d num_lines %d \n", p1.num_rng_bins, p1.num_lines); fprintf(stderr, " SLC 2: num_rng_bins %d num_lines %d \n", p2.num_rng_bins, p2.num_lines); fprintf(stderr, " lambda %f \n", p2.lambda); fprintf(stderr, " baseline_start %f \n", p2.baseline_start); fprintf(stderr, " B_end %f \n", p2.baseline_end); fprintf(stderr, " alpha_start %f \n", p2.alpha_start); fprintf(stderr, " alpha_end %f \n", p2.alpha_end); fprintf(stderr, " near_range %f \n", p2.near_range); fprintf(stderr, " rng_samp_rate %f \n", p2.fs); fprintf(stderr, " sc_clock_start %f \n", p2.SC_clock_start); fprintf(stderr, " sc_clock_stop %f \n", p2.SC_clock_stop); fprintf(stderr, " clock_start %f \n", p2.clock_start); fprintf(stderr, " clock_stop %f \n", p2.clock_stop); fprintf(stderr, " prf %f \n", p2.prf); } void fix_prm_params(struct PRM *p, char *s) { double delr; delr = SOL / p->fs / 2.0; /* these are from prm2gips */ p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift - 1) * delr; p->SC_clock_start = p->SC_clock_start + p->ashift / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } void calc_theta(int xdim, double range0, double drange, double re, double height, double alpha, float *theta) { int k; double rho, eta; double c, c2, re2; c = re + height; c2 = c * c; re2 = re * re; for (k = 0; k < xdim; k++) { rho = range0 + k * drange; eta = ((rho * rho + c2 - re2) / (2. * rho * c)); if (eta >= 1.) die("eta >= 0", ""); theta[k] = (float)acos(eta); } } int main(int argc, char **argv) { struct PRM prm; float *theta = NULL; double drange, dBh, dBv, Bh0, Bhf, Bv0, Bvf, B, alpha, Bh, Bv, dht, height; unsigned int row, col; uint64_t node; void *API = NULL; /* GMT API control structure */ struct GMT_GRID *P = NULL, *BP = NULL; /* Grid structure containing ->header and ->data */ if (argc < 4) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; /* open PRM file */ get_prm(&prm, argv[1]); /* near_range, SC_clock_start, and SC_clock_stop need to be changed */ fix_prm_params(&prm, argv[1]); /* Get header from residual phase file */ if ((P = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* allocate memory */ if ((BP = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, P->header->wesn, P->header->inc, P->header->registration, GMT_NOTSET, NULL)) == NULL) return EXIT_FAILURE; theta = (float *)malloc(P->header->nx * sizeof(float)); /* calculate drange */ drange = fabs(P->header->inc[GMT_X]) * SOL / (2.0 * prm.fs); /* compute starting and ending baselines in rectangular co-ordinates */ dBh = dBv = 0.; Bh0 = prm.baseline_start * cos(prm.alpha_start * PI / 180.); Bhf = prm.baseline_end * cos(prm.alpha_end * PI / 180.); Bv0 = prm.baseline_start * sin(prm.alpha_start * PI / 180.); Bvf = prm.baseline_end * sin(prm.alpha_end * PI / 180.); dBh = (Bhf - Bh0) / P->header->ny; dBv = (Bvf - Bv0) / P->header->ny; dBh = (Bhf - Bh0) / P->header->ny; dBv = (Bvf - Bv0) / P->header->ny; /* calculate height increment if available */ dht = 0.0; if (prm.ht_start > 0.0 && prm.ht_end > 0.0) { dht = (prm.ht_end - prm.ht_start) / P->header->ny; } for (row = 0; row < BP->header->ny; row++) { /* For each row */ /* change the baseline and alpha along the satellite track */ Bh = Bh0 + dBh * row; Bv = Bv0 + dBv * row; B = sqrt(Bh * Bh + Bv * Bv); alpha = atan2(Bv, Bh); height = prm.ht_start + dht * row; calc_theta(P->header->nx, prm.near_range, drange, prm.RE, height, alpha, theta); /* compute the perpendicular baseline */ for (col = 0; col < BP->header->nx; col++) { /* For each column, get node number */ node = GMT_Get_Index(API, BP->header, row, col); BP->data[node] = (float)(B * cos((double)theta[col] - alpha)); } } /* Write the output grd file */ if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "perpendicular baseline", BP)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[3], BP)) return EXIT_FAILURE; if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/d2/d2b829cbd8275df4e5ff6f6bccf7c9c306bdb58c.svn-base000444 015705 000000 00000000575 13505462014 026360 0ustar00sandwellwheel000000 000000 include ../../../config.mk INCLUDES = -I../include -I$(GMTSARHOME)/gmtsar -I$(TIFF_INC) $(GMT_INC) CLIBS = -L../lib -lxmlC $(GMTSAR) $(GMT_LIB) $(LALIBS) -L$(TIFF_LIB) -ltiff -lm assemble_tops: assemble_tops.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ assemble_tops.o $(CLIBS) all: assemble_tops install: $(INSTALL) assemble_tops $(bindir) clean: rm -f *.o assemble_tops tags core GMTSAR_V5.7/.svn/pristine/d2/d24c282d780123a5bbad2f25804a07103116b69c.svn-base000444 015705 000000 00000002202 13505462014 025404 0ustar00sandwellwheel000000 000000 /************************************************************************ * shift performs a range shift using the shift property of the FFT * ************************************************************************/ /************************************************************************ * Creator: David T. SandwellScripps Institution of Oceanography) * * Date : 08/09/06 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" void shift(ranfft, data, shift) int ranfft; fcomplex *data; double shift; { float arg; int i, dir, n2; fcomplex cshift; dir = -1; n2 = ranfft / 2; cfft1d_(&ranfft, data, &dir); for (i = 0; i < ranfft; i++) { arg = -2. * PI * shift * i / ranfft; if (i > n2) arg = -2. * PI * shift * (i - ranfft) / ranfft; cshift = Cexp(arg); data[i] = Cmul(cshift, data[i]); } dir = 1; cfft1d_(&ranfft, data, &dir); } GMTSAR_V5.7/.svn/pristine/d2/d24a060e6e85772ff48c45063772b3a7511522e2.svn-base000444 015705 000000 00000006452 13505462013 025311 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for batch processing # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ####################################### # processing stage for intf_batch.csh # ####################################### # 1 - start from make topo_ra # 2 - start from make and filter interferograms, unwrap and geocode proc_stage = 1 # the namestem of the master image - REQUIRED master_image = IMG-HH-ALOS2101532950-160409-WBDR1.1__D ######################################### # parameters for preprocess # # - pre_proc_batch.csh # # following 4 parameters are OPTIONAL # ######################################### # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = # SLC scale factor to convert float to int ( 0.01 is good for ALOS1 L1.1) SLC_factor = 2.5 ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put DEM.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # filters # look at the filter/ folder to choose other filters filter_wavelength = 400 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 - OPTIONAL region_cut = # use landmask (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = 0.12 GMTSAR_V5.7/.svn/pristine/d2/d2b27265039d98678e5a53f9c0b919b880ff6ee6.svn-base000444 015705 000000 00000001067 13505462014 025572 0ustar00sandwellwheel000000 000000 include ../../../config.mk INCLUDES = -I../include -I$(GMTSARHOME)/gmtsar -I$(TIFF_INC) $(GMT_INC) CLIBS = -L../lib -lxmlC $(GMTSAR) $(GMT_LIB) $(LALIBS) -L$(TIFF_LIB) -ltiff -lm make_s1a_tops: make_s1a_tops.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ make_s1a_tops.o $(CLIBS) make_s1a_tops_6par: make_s1a_tops_6par.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ make_s1a_tops_6par.o $(CLIBS) all: make_s1a_tops make_s1a_tops_6par install: $(INSTALL) make_s1a_tops $(bindir) $(INSTALL) make_s1a_tops_6par $(bindir) clean: rm -f *.o make_s1a_tops make_s1a_tops_6par tags core GMTSAR_V5.7/.svn/pristine/d5/d57b5cd0c347ead79dd533f70784314803bd869b.svn-base000444 015705 000000 00000000224 13505462013 025622 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id: gmtsar_sharedir.csh.in 42 2013-04-08 20:43:57Z pwessel $ # Just report the GMTSAR share directory echo "@prefix@/share/gmtsar" GMTSAR_V5.7/.svn/pristine/d5/d5953c51be99d658dd7a94ce627707f9ca969a72.svn-base000444 015705 000000 00000007265 13505462013 025672 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_S1A_TOPS.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # filters # look at the filter/ folder to choose other filters # for tops processing, to force the decimation factor # recommended range decimation to be 8, azimuth decimation to be 2 filter_wavelength = 200 range_dec = 8 azimuth_dec = 2 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/0/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .10 GMTSAR_V5.7/.svn/pristine/d5/d56af16769a6f9340340d27a6622549a35b1eb9a.svn-base000444 015705 000000 00000023467 13505462013 025466 0ustar00sandwellwheel000000 000000 /* $Id: parse_xcorr_input.c 109 2015-01-19 23:01:24Z sandwell $ */ #include "gmtsar.h" #include "xcorr.h" #include #include #include #include /*-------------------------------------------------------*/ void print_params(struct xcorr *xc) { /* fprintf(stdout," input %s \n",xc->param_name); */ fprintf(stdout, " format %d [0 => complex short, 1 => real float] \n", xc->format); fprintf(stdout, " m_nx %d \n", xc->m_nx); fprintf(stdout, " m_ny %d \n", xc->m_ny); fprintf(stdout, " s_nx %d \n", xc->s_nx); fprintf(stdout, " s_ny %d \n", xc->s_ny); fprintf(stdout, " nxl %d \n", xc->nxl); fprintf(stdout, " nyl %d \n", xc->nyl); fprintf(stdout, " rshift %d \n", xc->x_offset); fprintf(stdout, " ashift %d \n", xc->y_offset); fprintf(stdout, " nx_corr %d \n", xc->nx_corr); fprintf(stdout, " ny_corr %d \n", xc->ny_corr); fprintf(stdout, " yoff %d \n", xc->ysearch); fprintf(stdout, " xoff %d \n", xc->xsearch); fprintf(stdout, " npx %d \n", xc->npx); fprintf(stdout, " npy %d \n", xc->npy); fprintf(stdout, " npx %d \n", xc->npx); fprintf(stdout, " npy %d \n", xc->npy); fprintf(stderr, "data file 1 %s \n", xc->data1_name); fprintf(stderr, "data file 2 %s \n", xc->data2_name); } /*-------------------------------------------------------*/ void set_defaults(struct xcorr *xc) { xc->format = 0; /* data format */ xc->ri = 2; /* range interpolation factor */ /* default values for time correlation */ if ((xc->corr_flag == 0) || (xc->corr_flag == 1)) { xc->nxl = 16; /* number of points in x direction */ xc->nyl = 32; /* number of points in y direction */ xc->x_offset = 0; /* starting x offset point*/ xc->y_offset = 0; /* starting y offset point*/ /* 128; 64 */ xc->nx_corr = 128; /* size of correlation window */ xc->ny_corr = 128; /* size of correlation window */ xc->xsearch = 64; /* size of search x offset */ xc->ysearch = 64; /* size of search y offset */ } /* default values for fft correlation */ /* xc->npx and xc->npx must be powers of two */ if (xc->corr_flag == 2) { xc->nxl = 16; /* number of points in x direction */ xc->nyl = 32; /* number of points in y direction */ xc->x_offset = 0; /* starting x offset point*/ xc->y_offset = 0; /* starting y offset point*/ /* 128; 64 */ xc->nx_corr = 128; /* size of correlation window */ xc->ny_corr = 128; /* size of correlation window */ xc->xsearch = 64; /* size of search x offset */ xc->ysearch = 64; /* size of search y offset */ } /* default values for fft interpolation */ xc->n2x = 8; xc->n2y = 8; xc->npx = xc->nx_corr + 2 * xc->xsearch; /* size of data required*/ xc->npy = xc->ny_corr + 2 * xc->ysearch; /* size of data required*/ xc->nxc = 2 * xc->xsearch; /* size of correlation patch*/ xc->nyc = 2 * xc->ysearch; /* size of correlation patch*/ xc->astretcha = 0.0; /* azimuth stretch partameter */ xc->interp_flag = 1; /* interpolate or not ? */ xc->interp_factor = 16; /* interpolatation factor */ } /*-------------------------------------------------------*/ /* reads options */ /* start with third arguement */ void parse_command_line(int na, char **a, struct xcorr *xc, int *nfiles, int *input_flag, char *USAGE) { int n; FILE *inputfile; char tmp[128]; for (n = 3; n < na; n++) { if (!strcmp(a[n], "-freq")) { xc->corr_flag = 2; fprintf(stderr, " using frequency cross correlation\n"); } else if (!strcmp(a[n], "-time")) { xc->corr_flag = 0; fprintf(stderr, " using time cross correlation\n"); } else if (!strcmp(a[n], "-time4")) { xc->corr_flag = 1; fprintf(stderr, " using 4th power time cross correlation\n"); } else if (!strcmp(a[n], "-real")) { xc->format = 1; fprintf(stderr, " no interpolation\n"); } else if (!strcmp(a[n], "-nointerp")) { xc->interp_flag = 0; fprintf(stderr, " no interpolation\n"); } else if (!strcmp(a[n], "-noshift")) { xc->offset_flag = 1; fprintf(stderr, " ignoring shift in prm\n"); } else if (!strcmp(a[n], "-interp")) { n++; if (n == na) die(" no option after -interp!\n", ""); xc->interp_flag = 1; xc->interp_factor = atoi(a[n]); fprintf(stderr, " setting interpolation factor to %d\n", xc->interp_factor); } else if (!strcmp(a[n], "-range_interp")) { n++; if (n == na) die(" no option after -range_interp!\n", ""); xc->ri = atoi(a[n]); fprintf(stderr, " setting range interpolation factor to %d\n", xc->ri); } else if (!strcmp(a[n], "-nx")) { n++; if (n == na) die(" no option after -nx!\n", ""); xc->nxl = atoi(a[n]); fprintf(stderr, " setting nx to %d\n", xc->nxl); } else if (!strcmp(a[n], "-ny")) { n++; if (n == na) die(" no option after -ny!\n", ""); xc->nyl = atoi(a[n]); fprintf(stderr, " setting ny to %d\n", xc->nyl); } else if (!strcmp(a[n], "-xsearch")) { n++; if (n == na) die(" no option after -xsearch!\n", ""); xc->xsearch = atoi(a[n]); xc->nx_corr = 2 * xc->xsearch; xc->npx = xc->nx_corr + 2 * xc->xsearch; /* size of data required*/ xc->nxc = 2 * xc->xsearch; /* size of correlation patch*/ if (((xc->xsearch - 1) & xc->xsearch)) die(" xsearch needs to be power of 2! (32 64 128 256) \n", ""); fprintf(stderr, " setting xsearch to %d\n", xc->xsearch); fprintf(stderr, " setting nx_corr to %d\n", xc->nx_corr); } else if (!strcmp(a[n], "-ysearch")) { n++; if (n == na) die(" no option after -ysearch!\n", ""); xc->ysearch = atoi(a[n]); xc->ny_corr = 2 * xc->ysearch; xc->npy = xc->ny_corr + 2 * xc->ysearch; /* size of data required*/ xc->nyc = 2 * xc->ysearch; /* size of correlation patch*/ if (((xc->ysearch - 1) & xc->ysearch)) die(" ysearch needs to be power of 2! (32 64 128 256) \n", ""); fprintf(stderr, " setting ysearch to %d\n", xc->ysearch); fprintf(stderr, " setting ny_corr to %d\n", xc->ny_corr); } else if (!strcmp(a[n], "-v")) { verbose = 1; fprintf(stderr, " verbose output \n"); } else if (!strcmp(a[n], "-norange")) { xc->ri = 1; fprintf(stderr, " no range interpolation \n"); } else if (!strncmp(a[n], "-input", 1)) { n++; if (n == na) die(" no option after -input!\n", ""); fprintf(stderr, "using input file \n"); *input_flag = 1; if ((inputfile = fopen(a[2], "r")) == NULL) die("Can't open ", a[2]); while (fscanf(inputfile, " %s ", tmp) != EOF) (*nfiles)++; fclose(inputfile); } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, " %s someone made a mistake!\n\n", a[n]); fprintf(stderr, " %s I think it was you! \n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } } /*---------------------------------------------------------------------------*/ void handle_prm(void *API, char **argv, struct xcorr *xc, int nfiles) { int i; char **filename; FILE *prmfile; struct PRM *r; char tmp_c[1024]; if (debug) fprintf(stderr, "handle_prm %d\n", nfiles); filename = malloc(nfiles * sizeof(char *)); for (i = 0; i < nfiles; i++) filename[i] = malloc(128 * sizeof(char)); r = malloc(nfiles * sizeof(struct PRM)); for (i = 0; i < nfiles; i++) { strcpy(filename[i], argv[i + 1]); strcpy(tmp_c, &filename[i][strlen(filename[i]) - 4]); // fprintf(stderr,"%s\n",tmp_c); if (strcmp(tmp_c, ".PRM") == 0) { // fprintf(stderr," Reading in PRM file: %s\n",filename[i]); if ((prmfile = fopen(filename[i], "r")) == NULL) die("Can't open prmfile ", filename[i]); get_sio_struct(prmfile, &r[i]); if (i == 0) { strcpy(xc->data1_name, r[i].SLC_file); if ((xc->data1 = fopen(xc->data1_name, "r")) == NULL) die("Cannot open SLC_file", xc->data1_name); xc->m_nx = r[i].num_rng_bins; xc->m_ny = r[i].num_patches * r[i].num_valid_az; } if (i == 1) { strcpy(xc->data2_name, r[i].SLC_file); xc->data2 = fopen(xc->data2_name, "r"); if ((xc->data2 = fopen(xc->data2_name, "r")) == NULL) die("Cannot open SLC_file", xc->data2_name); xc->s_nx = r[i].num_rng_bins; xc->s_ny = r[i].num_patches * r[i].num_valid_az; xc->x_offset = r[i].rshift; xc->y_offset = r[i].ashift; } /* added rjm 5/25/2010 to avoid div by zero and Nan */ if (r[0].prf > 0) { xc->astretcha = (r[1].prf - r[0].prf) / r[0].prf; } else { xc->astretcha = 0.0; } if (xc->offset_flag == 1) { xc->x_offset = xc->y_offset = 0; fprintf(stderr, " setting ashift and rshift to zero\n"); } fclose(prmfile); } else { // fprintf(stderr," Reading in netcdf file: %s\n",filename[i]); xc->format = 2; if (i == 0) { if ((xc->D1 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, filename[i], NULL)) == NULL) die("cannot open topofile", filename[i]); strcpy(xc->data1_name, filename[i]); xc->m_nx = xc->D1->header->nx; xc->m_ny = xc->D1->header->ny; if ((GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, filename[i], xc->D1)) == NULL) die("cannot open topofile", filename[i]); } if (i == 1) { if ((xc->D2 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, filename[i], NULL)) == NULL) die("cannot open topofile", filename[i]); strcpy(xc->data2_name, filename[i]); xc->s_nx = xc->D2->header->nx; xc->s_ny = xc->D2->header->ny; xc->x_offset = 0; xc->y_offset = 0; if ((GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, filename[i], xc->D2)) == NULL) die("cannot open topofile", filename[i]); } } } fprintf(stderr, " %d %d %d %d %d %d %f\n", xc->m_nx, xc->m_ny, xc->s_nx, xc->s_ny, xc->x_offset, xc->y_offset, xc->astretcha); free(r); } /*---------------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/a9/a90078a8b94098f16a5be611c826648455107d3a.svn-base000444 015705 000000 00000000725 13505462014 025323 0ustar00sandwellwheel000000 000000 include ../../config.mk # # make all the files # DIRS = lib src_swath src_tops src_orbit src_stitch src_spec_div src_assembly all: $(LN_S) -f ../S1A_preproc/include include $(LN_S) -f ../S1A_preproc/lib lib for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done uninstall: (cd src; $(MAKE) uninstall) clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done spotless: clean GMTSAR_V5.7/.svn/pristine/b6/b6913c175e6d5d11fcd34e0ea6fce65977101d89.svn-base000444 015705 000000 00000015414 13505462013 025705 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong and David Sandwell # FEB 4 2010 # Matt Wei May 4 2010, ENVISAT # DTS - May 26, 2010, added phase gadient # EF, DTS, XT - Jan 10 2014, TSX # # Convolve the real.grd and imag.grd with gaussian filters. # Form amplitude, phase, phase gradient, and correlation images. # # alias rm 'rm -f' gmt set IO_NC4_CHUNK_SIZE classic # # # set grdimage options # set scale = "-JX6.5i" set thresh = "5.e-21" gmt set COLOR_MODEL = hsv gmt set PROJ_LENGTH_UNIT = inch if ($#argv != 4 && $#argv != 6) then errormessage: echo "" echo "Usage: filter.csh master.PRM slave.PRM filter decimation [rng_dec azi_dec]" echo "" echo " Apply gaussian filter to amplitude and phase images." echo " " echo " filter - wavelength of the filter in meters (0.5 gain)" echo " decimation - (1) better resolution, (2) smaller files" echo " " echo "Example: filter.csh IMG-HH-ALPSRP055750660-H1.0__A.PRM IMG-HH-ALPSRP049040660-H1.0__A.PRM 300 2" echo "" exit 1 endif echo "filter.csh" # # define filter and decimation variables # set sharedir = `gmtsar_sharedir.csh` set filter3 = $sharedir/filters/fill.3x3 set filter4 = $sharedir/filters/xdir set filter5 = $sharedir/filters/ydir set dec = $4 set az_lks = 4 set PRF = `grep PRF *.PRM | awk 'NR == 1 {printf("%d", $3)}'` if( $PRF < 1000 ) then set az_lks = 1 endif # # look for range sampling rate # set rng_samp_rate = `grep rng_samp_rate $1 | awk 'NR == 1 {printf("%d", $3)}'` # # set the range spacing in units of image range pixel size # if ($?rng_samp_rate) then if ($rng_samp_rate > 110000000) then set dec_rng = 4 set filter1 = $sharedir/filters/gauss15x5 else if ($rng_samp_rate < 110000000 && $rng_samp_rate > 20000000) then set dec_rng = 2 set filter1 = $sharedir/filters/gauss15x5 # # special for TOPS mode # if($az_lks == 1) then set filter1 = $sharedir/filters/gauss5x5 endif else set dec_rng = 1 set filter1 = $sharedir/filters/gauss15x3 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif # # make the custom filter2 and set the decimation # make_gaussian_filter $1 $dec_rng $az_lks $3 > ijdec set filter2 = gauss_$3 set idec = `cat ijdec | awk -v dc="$dec" '{ print dc*$1 }'` set jdec = `cat ijdec | awk -v dc="$dec" '{ print dc*$2 }'` if($#argv == 6) then set idec = `echo $6 $az_lks | awk '{printf("%d",$1/$2)}'` set jdec = `echo $5 $dec_rng | awk '{printf("%d",$1/$2)}'` echo "setting range_dec = $5, azimuth_dec = $6" endif echo "$filter2 $idec $jdec ($az_lks $dec_rng)" # # filter the two amplitude images # echo "making amplitudes..." conv $az_lks $dec_rng $filter1 $1 amp1_tmp.grd=bf conv $idec $jdec $filter2 amp1_tmp.grd=bf amp1.grd rm amp1_tmp.grd conv $az_lks $dec_rng $filter1 $2 amp2_tmp.grd=bf conv $idec $jdec $filter2 amp2_tmp.grd=bf amp2.grd rm amp2_tmp.grd # # filter the real and imaginary parts of the interferogram # also compute gradients # echo "filtering interferogram..." conv $az_lks $dec_rng $filter1 real.grd=bf real_tmp.grd=bf conv $idec $jdec $filter2 real_tmp.grd=bf realfilt.grd # conv $dec $dec $filter4 real_tmp.grd xreal.grd # conv $dec $dec $filter5 real_tmp.grd yreal.grd rm real_tmp.grd rm real.grd conv $az_lks $dec_rng $filter1 imag.grd=bf imag_tmp.grd=bf conv $idec $jdec $filter2 imag_tmp.grd=bf imagfilt.grd # conv $dec $dec $filter4 imag_tmp.grd ximag.grd # conv $dec $dec $filter5 imag_tmp.grd yimag.grd rm imag_tmp.grd rm imag.grd # # form amplitude image # echo "making amplitude..." gmt grdmath realfilt.grd imagfilt.grd HYPOT = amp.grd gmt grdmath amp.grd 0.5 POW FLIPUD = display_amp.grd set AMAX = `gmt grdinfo -L2 display_amp.grd | grep stdev | awk '{ print 3*$5 }'` gmt grd2cpt display_amp.grd -Z -D -L0/$AMAX -Cgray > display_amp.cpt echo "N 255 255 254" >> display_amp.cpt gmt grdimage display_amp.grd -Cdisplay_amp.cpt $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > display_amp.ps gmt psscale -Rdisplay_amp.grd -J -DJTC+w5i/0.2i+h+ef -Cdisplay_amp.cpt -Bx0+l"Amplitude (histogram equalized)" -O >> display_amp.ps gmt psconvert -Tf -P -Z display_amp.ps echo "Amplitude map: display_amp.pdf" # # form the correlation # echo "making correlation..." gmt grdmath amp1.grd amp2.grd MUL = tmp.grd gmt grdmath tmp.grd $thresh GE 0 NAN = mask.grd gmt grdmath amp.grd tmp.grd SQRT DIV mask.grd MUL FLIPUD = tmp2.grd=bf conv 1 1 $filter3 tmp2.grd=bf corr.grd gmt makecpt -T0./.8/0.1 -Cgray -Z -N > corr.cpt echo "N 255 255 254" >> corr.cpt gmt grdimage corr.grd $scale -Ccorr.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > corr.ps gmt psscale -Rcorr.grd -J -DJTC+w5i/0.2i+h+ef -Ccorr.cpt -Baf+lCorrelation -O >> corr.ps gmt psconvert -Tf -P -Z corr.ps echo "Correlation map: corr.pdf" # # form the phase # echo "making phase..." gmt grdmath imagfilt.grd realfilt.grd ATAN2 mask.grd MUL FLIPUD = phase.grd gmt makecpt -Crainbow -T-3.15/3.15/0.1 -Z -N > phase.cpt gmt grdimage phase.grd $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phase.ps gmt psscale -Rphase.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -B1.57+l"Phase" -By+lrad -O >> phase.ps gmt psconvert -Tf -P -Z phase.ps echo "Phase map: phase.pdf" # # make the Werner/Goldstein filtered phase # echo "filtering phase..." # phasefilt -imag imagfilt.grd -real realfilt.grd -amp1 amp1.grd -amp2 amp2.grd -psize 16 phasefilt -imag imagfilt.grd -real realfilt.grd -amp1 amp1.grd -amp2 amp2.grd -alpha -1 -psize 32 gmt grdedit filtphase.grd `gmt grdinfo mask.grd -I- --FORMAT_FLOAT_OUT=%.12lg` gmt grdmath filtphase.grd mask.grd MUL FLIPUD = phasefilt.grd rm filtphase.grd gmt grdimage phasefilt.grd $scale -Bxaf+lRange -Byaf+lAzimuth -BWSen -Cphase.cpt -X1.3i -Y3i -P -K > phasefilt.ps gmt psscale -Rphasefilt.grd -J -DJTC+w5i/0.2i+h -Cphase.cpt -Bxa1.57+l"Phase" -By+lrad -O >> phasefilt.ps gmt psconvert -Tf -P -Z phasefilt.ps echo "Filtered phase map: phasefilt.pdf" # # form the phase gradients # # echo "making phase gradient..." # gmt grdmath amp.grd 2. POW = amp_pow.grd # gmt grdmath realfilt.grd ximag.grd MUL imagfilt.grd xreal.grd MUL SUB amp_pow.grd DIV mask.grd MUL FLIPUD = xphase.grd # gmt grdmath realfilt.grd yimag.grd MUL imagfilt.grd yreal.grd MUL SUB amp_pow.grd DIV mask.grd MUL FLIPUD = yphase.grd # gmt makecpt -Cgray -T-0.7/0.7/0.1 -Z -N > phase_grad.cpt # echo "N 255 255 254" >> phase_grad.cpt # gmt grdimage xphase.grd $scale -Cphase_grad.cpt -X.2i -Y.5i -P > xphase.ps # gmt grdimage yphase.grd $scale -Cphase_grad.cpt -X.2i -Y.5i -P > yphase.ps # mv mask.grd tmp.grd gmt grdmath tmp.grd FLIPUD = mask.grd # # delete files rm tmp.grd tmp2.grd ximag.grd yimag.grd xreal.grd yreal.grd GMTSAR_V5.7/.svn/pristine/b6/b6e4b339606f1b3dc82416cc6eac0906e50a8f43.svn-base000444 015705 000000 00000000700 13505462014 025655 0ustar00sandwellwheel000000 000000 include ../../../config.mk INCLUDES = -I$(GMTSARHOME)/gmtsar $(GMT_INC) CLIBS = $(GMTSAR) $(GMT_LIB) $(LALIBS) -lm stitch_tops: stitch_tops.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ stitch_tops.o $(CLIBS) merge_swath: merge_swath.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ merge_swath.o $(CLIBS) all: stitch_tops merge_swath install: $(INSTALL) stitch_tops $(bindir) $(INSTALL) merge_swath $(bindir) clean: rm -f *.o stitch_tops merge_swath tags core GMTSAR_V5.7/.svn/pristine/b6/b61937b7b761d60ba2490860762b8406200cdc77.svn-base000444 015705 000000 00000016724 13505462014 025314 0ustar00sandwellwheel000000 000000 /***************************************************** cal2ut1.c Convert calendar date/time to UT1 seconds after 01-01-2000 12:00:00 Reference: "A Simple and Precise Approach to Position and Velocity Estimation of Low Earth Orbit Satellites" 14-April-2010 Jeff Bytof *****************************************************/ #include double cal2ut1(int mode, int cal[3], double daysec) { double days = 0.; // double deltaU = 0.0 ; /* needed for UT1 - refine */ // double deltaU = +0.1 ; /* for 2006-09-28 0000 UTC */ double deltaU = -0.0811; /* for minimum residuals */ double sec; double ut1sec; int monthDays[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; int monthDayLeap[] = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335}; int day; int doy; int month; int year; int years[] = {-7305, -6939, -6574, -6209, -5844, /* 1980 to 2060 */ -5478, -5113, -4748, -4383, -4017, -3652, -3287, -2922, -2556, -2191, -1826, -1461, -1095, -730, -365, 0, 366, 731, 1096, 1461, 1827, 2192, 2557, 2922, 3288, 3653, 4018, 4383, 4749, 5114, 5479, 5844, 6210, 6575, 6940, 7305, 7671, 8036, 8401, 8766, 9132, 9497, 9862, 10227, 10593, 10958, 11323, 11688, 12054, 12419, 12784, 13149, 13515, 13880, 14245, 14610, 14976, 15341, 15706, 16071, 16437, 16802, 17167, 17532, 17898, 18263, 18628, 18993, 19359, 19724, 20089, 20454, 20820, 21185, 21550, 21915}; int leaps[] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, /* 1980 to 2060 */ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1}; if (mode == 1) { /* year, month, day of month */ year = cal[0]; month = cal[1]; day = cal[2]; days = years[year - 1980] - 0.5; if (leaps[year - 1980] == 1) { days = days + monthDayLeap[month - 1]; } else { days = days + monthDays[month - 1]; } days = days + day - 1; } else if (mode == 2) { /* year, day of year */ year = cal[0]; doy = cal[1]; days = years[year - 1980] - 0.5; days = days + doy - 1; } sec = days * 86400.0 + daysec; ut1sec = sec + deltaU; return ut1sec; } /********************************************** eci2ecr.c Convert position and velocity vectors in Inertial Earth Coordinates (ECI) -to- Rotating Earth Coordinates (ECR). Inputs ------ double pos[3] = ECI position vector (meters) double vel[3] = ECI velocity vector (meters/sec) double utsec = UT seconds past 1-JAN-2000 12:00:00 Outputs ------- double pos_ecr[3] = ECR position vector (meters) double vel_ecr[3] = ECR velocity vector (meters/sec) ------------------------------------------- Reference: "A Simple and Precise Approach to Position and Velocity Estimation of Low Earth Orbit Satellites" Authors: P. Beaulne and I. Sikaneta Defence R&D Canada Ottowa TM 2005-250 ------------------------------------------- 5 March 2010 Jeff Bytof **********************************************/ void gmst(double, double *, double *); void matvec(double[3][3], double[3], double[3]); #include void eci2ecr(double pos[], double vel[], double utsec, double pos_ecr[], double vel_ecr[]) { double a[3][3]; double ap[3][3]; double cth; double cthp; double sth; double sthp; double th; double thp; double vel_ecr_1[3]; double vel_ecr_2[3]; int i; gmst(utsec, &th, &thp); cth = cos(th); sth = sin(th); a[0][0] = cth; a[0][1] = sth; a[0][2] = 0.0; a[1][0] = -sth; a[1][1] = cth; a[1][2] = 0.0; a[2][0] = 0.0; a[2][1] = 0.0; a[2][2] = 1.0; matvec(a, pos, pos_ecr); cthp = thp * cos(th); sthp = thp * sin(th); ap[0][0] = -sthp; ap[0][1] = cthp; ap[0][2] = 0.0; ap[1][0] = -cthp; ap[1][1] = -sthp; ap[1][2] = 0.0; ap[2][0] = 0.0; ap[2][1] = 0.0; ap[2][2] = 0.0; matvec(ap, pos, vel_ecr_1); matvec(a, vel, vel_ecr_2); for (i = 0; i < 3; i++) { vel_ecr[i] = vel_ecr_1[i] + vel_ecr_2[i]; } return; } /********************************************** ecr2eci.c Transform position and velocity vectors in Rotating Earth Coordinates (ECR) -to- Inertial Earth Coordinates (ECI). Inputs ------ double pos[3] = ECR position vector (meters) double vel[3] = ECR velocity vector (meters/sec) double utsec = UT seconds past 1-JAN-2000 12:00:00 Outputs ------- double pos_eci[3] = ECI position vector (meters) double vel_eci[3] = ECI velocity vector (meters/sec) ------------------------------------------- Reference: "A Simple and Precise Approach to Position and Velocity Estimation of Low Earth Orbit Satellites" Authors: P. Beaulne and I. Sikaneta Defence R&D Canada Ottowa TM 2005-250 ------------------------------------------- 26-April-2010 Jeff Bytof **********************************************/ void gmst(double, double *, double *); void matvec(double[3][3], double[3], double[3]); #include void ecr2eci(double pos[], double vel[], double utsec, double pos_eci[], double vel_eci[]) { double a[3][3]; double ap[3][3]; double cth; double cthp; double sth; double sthp; double th; double thp; double vel_eci_1[3]; double vel_eci_2[3]; int i; gmst(utsec, &th, &thp); cth = cos(th); sth = sin(th); a[0][0] = cth; a[0][1] = -sth; a[0][2] = 0.0; a[1][0] = sth; a[1][1] = cth; a[1][2] = 0.0; a[2][0] = 0.0; a[2][1] = 0.0; a[2][2] = 1.0; matvec(a, pos, pos_eci); cthp = thp * cos(th); sthp = thp * sin(th); ap[0][0] = -sthp; ap[0][1] = -cthp; ap[0][2] = 0.0; ap[1][0] = cthp; ap[1][1] = -sthp; ap[1][2] = 0.0; ap[2][0] = 0.0; ap[2][1] = 0.0; ap[2][2] = 0.0; matvec(ap, pos, vel_eci_1); matvec(a, vel, vel_eci_2); for (i = 0; i < 3; i++) { vel_eci[i] = vel_eci_1[i] + vel_eci_2[i]; } return; } /********************************************** gmst.c Calculate the Greenwich mean sidereal angle and its first time derivative. ------------------------------------------- Reference: "A Simple and Precise Approach to Position and Velocity Estimation of Low Earth Orbit Satellites" Authors: P. Beaulne and I. Sikaneta Defence R&D Canada Ottowa TM 2005-250 ------------------------------------------- March 2010 Jeff Bytof ***********************************************/ #include void gmst(double julsec, double *th, double *thp) { double a0 = 67310.54841; double a1 = 3164400184.812866; /* 876600*3600+8640184.812866 */ double a2 = 0.093104; double a3 = -6.2e-6; double rpd = 0.01745329251994329444; double sigma; double t; double twopi = 6.283185307179586; t = (julsec / 86400.0) / 36525.0; /* convert to centuries */ sigma = a0 + a1 * t + a2 * t * t + a3 * t * t * t; sigma = sigma / 240.0; /* 240 = 360/86400 */ sigma = sigma * rpd; *th = fmod(sigma, twopi); sigma = a1 + 2. * a2 * t + 3. * a3 * t * t; sigma = sigma / 240.0; sigma = sigma / (36525. * 86400.); *thp = sigma * rpd; return; } /**************************************** matvec.c Multiply a matrix and a vector and return the product vector. March 2010 Jeff Bytof *****************************************/ void matvec(double mat[3][3], double vin[3], double vout[3]) { int i; int j; for (j = 0; j < 3; j++) { vout[j] = 0.0; for (i = 0; i < 3; i++) { vout[j] = vout[j] + mat[j][i] * vin[i]; } } return; } /*---------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/dc/dc42c44eff830f314ede04efa5c8f2f0956c207c.svn-base000444 015705 000000 00000001267 13505462014 026174 0ustar00sandwellwheel000000 000000 /* alos_orbit.h */ /* structure to hold orbit and attitude information derived from ALOS L1.0 * LED-file */ #define NA 64 /* number of altitude data points */ #define HDR 1 /* orbit information from header */ #define ODR 2 /* orbit information from Delft */ #define DOR 3 /* orbit information from Doris */ struct ORB_XYZ { double pt; double px; double py; double pz; double vx; double vy; double vz; }; struct ALOS_ORB { int itype; int nd; int iy; int id; double sec; double dsec; double pt0; struct ORB_XYZ *points; }; struct ALOS_ATT { int na; int id[NA]; int msec[NA]; double ap[NA]; double ar[NA]; double ay[NA]; double dp[NA]; double dr[NA]; double dy[NA]; }; GMTSAR_V5.7/.svn/pristine/dc/dcc905cbd8695a5e2cbed939848fc92b3f08ea3e.svn-base000444 015705 000000 00000052516 13505462013 026303 0ustar00sandwellwheel000000 000000 /* $Id: phasediff.c 109 2015-01-19 23:01:24Z sandwell $ */ /*************************************************************************** * phasediff reads two complex SAR_SLC images and computes the phase * * difference of the images removing the effects of the curved earth * * and optionally the topography. Orbit information is provided in the * * second PRM-file. * * The baseline changes linearly between the start and end of the image. * * This linear baseline model is appropriate for a single frame but higher * * order terms are needed for long swaths of data. * * Model phase can also be removed as an option. * * The images should be matched to a level that will * * produce interference fringes and must be the same size. * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Evelyn J. Price * * (Scripps Institution of Oceanography) * * Date : 7/7/95 * * Rewritten: Rob Mellors (San Diego State University) * * Date : 11/7/09 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 11/18/96 Changed sign of earth flattening phase to fit with signs * * of baseline estimates. * * 11/18/96 Changed to read GIPS headers to gather parameters. * * 11/21/96 Changed to update baseline estimate. * * 06/19/97 Changed to NOT update baseline parameters * * 06/25/97 Changed to change baseline along the frame * * 03/10/99 Changed to remove reference phase due to topography * * 04/06/01 Changed to remove model or other known phase * * 06/21/02 Changed to scale the interferogram by 1/sqrt(amp) * * 08/16/06 Changed to use the topo_ra to shift the range * * coordinate of the repeat image for long baselines. * * 07/02/08 provide ability to shift topo_ra * * 07/11/08 Added spacecraft height start and end to make phase * * continuous across patches * * 09/18/08 Added TEC_start and TEC_end to account for the ionosphere * * 08/18/09 Added small correction to the phase for the elevation- * * dependent range shift, important for long baselines * * 11/07/09 Code rewritten by RJM to read PRM-files and write grd-files* * 04/24/10 changed calc_phase subroutine based on pdiff.c * * changed the phase calculation part to match pdiff.c * * this change is to account for slight range change due to * * topography, which is accounted for in pdiff.c * * 10/23/10 changed calc_phase to calc_drho and completely rewrote * * the topographic phase correction to use all the nonlinear * * terms. ***************************************************************************/ #include "gmtsar.h" char *USAGE = "phasediff [GMTSAR] - Compute phase difference of two images\n\n" "\nUsage: " "phasediff ref.PRM rep.PRM [-topo topo_ra.grd] [-model " "modelphase.grd]\n (topo_ra and model in GMT grd format)\n"; /*--------------------------------------------------------------*/ void calc_drho(int xdim, double *range, double *topo, double avet, double re, double height, double B, double alpha, double Bx, double *drho) { int k; /* EX: changing to long double for better precision */ long double rho, sint, cost, cosa, sina, b; // long double term1,term2,c,c2,ret,ret2; long double term1, c, c2, ret, ret2; sina = sin(alpha); cosa = cos(alpha); c = re + height; c2 = c * c; b = B; for (k = 0; k < xdim; k++) { /* compute the look angle using equation (C26) in Appendix C */ rho = range[k]; ret = re + avet + topo[k]; ret2 = ret * ret; cost = ((rho * rho + c2 - ret2) / (2. * rho * c)); // thet = acos(cost); if (cost >= 1.) die("calc_drho", "cost >= 0"); sint = sqrtl(1. - cost * cost); /* compute the range change using equation (c23) in Appendic C */ // term1 = -B*(sint*cosa-cost*sina); // term2 = B*B*(cost*cosa+sint*sina)*(cost*cosa+sint*sina)/(2.*rho); // drho[k] = term1 + term2; /* New (Eric Lindsey, April 2015): compute the range change using the full * nonlinear equation */ // term1 = rho*rho + b*b - 2*rho*b*(sint*cosa-cost*sina); // term1 = rho*rho + b*b - 2*rho*b*sin(thet-alpha); // drho[k] = -rho + sqrtl(term1); /* Compute the offset effect from non-parallel orbit */ term1 = rho * rho + b * b - 2 * rho * b * (sint * cosa - cost * sina) - Bx * Bx; // term1 = rho*rho + b*b - 2*rho*b*(sint*cosa-cost*sina); drho[k] = -rho + sqrtl(term1); } } /*--------------------------------------------------------------*/ void calc_average_topo(double *avet, int xdimt, int ydimt, float *topo) { double sumt; int k, nsum; sumt = 0.0; nsum = 0; /* compute the average topography, save the value, and remove it from the * topography */ for (k = 0; k < xdimt * ydimt; k++) { sumt += topo[k]; nsum++; } *avet = sumt / nsum; for (k = 0; k < xdimt * ydimt; k++) { topo[k] = topo[k] - (float)*avet; } if (verbose) fprintf(stderr, " mean topo %lf\n", *avet); } void print_prm_params(struct PRM p1, struct PRM p2) { fprintf(stderr, " SLC 1: num_rng_bins %d num_lines %d \n", p1.num_rng_bins, p1.num_lines); fprintf(stderr, " SLC 2: num_rng_bins %d num_lines %d \n", p2.num_rng_bins, p2.num_lines); fprintf(stderr, " lambda %f \n", p2.lambda); fprintf(stderr, " baseline_start %f \n", p2.baseline_start); fprintf(stderr, " baseline_end %f \n", p2.baseline_end); fprintf(stderr, " B_offset_start %f \n", p2.B_offset_start); fprintf(stderr, " B_offset_end %f \n", p2.B_offset_end); fprintf(stderr, " alpha_start %f \n", p2.alpha_start); fprintf(stderr, " alpha_end %f \n", p2.alpha_end); fprintf(stderr, " near_range %f \n", p2.near_range); fprintf(stderr, " rng_samp_rate %f \n", p2.fs); fprintf(stderr, " sc_clock_start %f \n", p2.SC_clock_start); fprintf(stderr, " sc_clock_stop %f \n", p2.SC_clock_stop); fprintf(stderr, " clock_start %f \n", p2.clock_start); fprintf(stderr, " clock_stop %f \n", p2.clock_stop); fprintf(stderr, " prf %f \n", p2.prf); } void fix_prm_params(struct PRM *p, char *s) { double delr; delr = SOL / p->fs / 2.0; /* this is the correction for the range and azimuth shifts of the re-aligned * SLC images */ // if(p->sub_int_r < 0.) p->sub_int_r = 0.; // if(p->sub_int_a < 0.) p->sub_int_a = 0.; p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift + p->sub_int_r - 1) * delr; p->SC_clock_start = p->SC_clock_start + (p->ashift + p->sub_int_a) / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } /*--------------------------------------------------------------*/ /* read topo_ra and model files if provided */ /* must be in GMT binary grd format */ void read_optional_args(void *API, int argc, char **argv, struct PRM *tp, int *topoflag, struct PRM *mp, int *modelflag) { int i; struct GMT_GRID *M = NULL, *T = NULL; /* Grid structures containing ->header and ->data */ for (i = 3; i < argc; i++) { if (strcmp(argv[i], "-topo") == 0) { fprintf(stderr, "reading topo %s\n", argv[i + 1]); strcpy(tp->input_file, argv[i + 1]); if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, tp->input_file, NULL)) == NULL) die("cannot open topofile", tp->input_file); tp->num_rng_bins = T->header->nx; tp->num_lines = T->header->ny; *topoflag = 1; i++; GMT_Destroy_Data(API, &T); } if (strcmp(argv[i], "-model") == 0) { fprintf(stderr, "reading model %s\n", argv[i + 1]); strcpy(mp->input_file, argv[i + 1]); if ((M = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, mp->input_file, NULL)) == NULL) die("cannot open model file", mp->input_file); mp->num_rng_bins = M->header->nx; mp->num_lines = M->header->ny; *modelflag = 1; i++; GMT_Destroy_Data(API, &M); } } } int main(int argc, char **argv) { int j, k, istart; int topoflag, modelflag; int xdim = 0, ydim = 0; /* size of SLC file */ int ydim_start; /* start of SLC filesize */ int xt, yt; /* size of topo file, increment */ int xm, ym; /* size of model file, increment */ uint64_t left_node; short *d1 = NULL, *d2 = NULL; /* pointers to input data files */ double *xs = NULL, *shft = NULL, *ss = NULL, *as = NULL, *topo2 = NULL; double *real = NULL, *imag = NULL, *range = NULL, *drho = NULL, *drho0 = NULL; double drange, dt, tspan, time, time2; double ht0, htc, htf, dht, ddht, height; double alpha, cnst, pha, avet; double B, Bh, Bv, dBh, dBv, ddBh, ddBv; double Bx, dBx, ddBx, Bx0, Bxc, Bxf; double Bh0, Bhc, Bhf, Bv0, Bvc, Bvf; double ys, test, inc[2], wesn[4]; double xdect, ydect, xdecm, ydecm, rdumt; FILE *SLCfile1 = NULL, *SLCfile2 = NULL; fcomplex *intfp = NULL, *iptr1 = NULL, *iptr2 = NULL, pshif; struct PRM p1, p2, tp, mp; void *API = NULL; /* GMT control structure */ struct GMT_GRID *M = NULL, *T = NULL; /* Grid structures containing ->header and ->data */ struct GMT_GRID *RE = NULL, *IM = NULL; /* For the real and imaginary grids */ double *range2 = NULL; /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; verbose = 0; topoflag = modelflag = 0; xdect = ydect = 1.0; xdecm = ydecm = 1.0; avet = 0.0; ydim_start = 0; if (argc < 3) die(USAGE, ""); /* read prm file into two pointers */ get_prm(&p1, argv[1]); get_prm(&p2, argv[2]); if (verbose) fprintf(stderr, "near range: %lf %lf \n", p1.near_range, p2.near_range); if (argc > 3) read_optional_args(API, argc, argv, &tp, &topoflag, &mp, &modelflag); if (debug) print_prm_params(p1, p2); if (p2.baseline_start < -9000) die("baseline < -9000 not set ?", ""); /* near_range, SC_clock_start, and SC_clock_stop need to be changed */ fix_prm_params(&p1, argv[1]); fix_prm_params(&p2, argv[2]); if (verbose) fprintf(stderr, "near range: %lf %lf \n", p1.near_range, p2.near_range); /* open SLC files */ if ((SLCfile1 = fopen(p1.SLC_file, "r")) == NULL) die("Can't open SLCfile", p1.SLC_file); if ((SLCfile2 = fopen(p2.SLC_file, "r")) == NULL) die("Can't open SLCfile", p2.SLC_file); /* set width and length */ /* check dimensions of the two SLC files */ if (p1.num_rng_bins == p2.num_rng_bins) { xdim = p1.num_rng_bins; } else { die("The dimensions of range do not match", ""); } if (p1.num_patches * p1.num_valid_az == p2.num_patches * p2.num_valid_az) { ydim = p1.num_patches * p1.num_valid_az; } else { die("The dimensions of azimuth do not match", ""); } fprintf(stderr, " xdim %d, ydim %d \n", xdim, ydim); /* set heights */ htc = p1.ht; ht0 = p1.ht_start; htf = p1.ht_end; inc[GMT_X] = inc[GMT_Y] = 1.0; /* Pixels */ wesn[GMT_XLO] = 0.0; wesn[GMT_XHI] = inc[GMT_X] * xdim; wesn[GMT_YLO] = 0.0; wesn[GMT_YHI] = inc[GMT_Y] * ydim; if ((RE = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "real", RE)) return EXIT_FAILURE; if ((IM = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "imag", RE)) return EXIT_FAILURE; /* allocate memory */ drho = (double *)malloc(xdim * sizeof(double)); drho0 = (double *)malloc(xdim * sizeof(double)); range = (double *)malloc(xdim * sizeof(double)); range2 = (double *)malloc(xdim * sizeof(double)); intfp = (fcomplex *)malloc(xdim * sizeof(fcomplex)); iptr1 = (fcomplex *)malloc(xdim * sizeof(fcomplex)); iptr2 = (fcomplex *)malloc(xdim * sizeof(fcomplex)); d1 = (short *)malloc(2 * xdim * sizeof(short)); d2 = (short *)malloc(2 * xdim * sizeof(short)); shft = (double *)malloc(xdim * sizeof(double)); xs = (double *)malloc(xdim * sizeof(double)); topo2 = (double *)malloc(xdim * sizeof(double)); imag = (double *)malloc(xdim * sizeof(double)); real = (double *)malloc(xdim * sizeof(double)); ss = (double *)malloc(xdim * sizeof(double)); as = (double *)malloc(xdim * sizeof(double)); /* open and read topo file and allocate memory */ if (topoflag) { if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, tp.input_file, NULL)) == NULL) return EXIT_FAILURE; if (xdim % T->header->nx != 0 || ydim % T->header->ny != 0) die("The dimension SLC must be multiplication factor of the topo_ra", tp.input_file); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, tp.input_file, T) == NULL) return EXIT_FAILURE; rdumt = floor(T->header->z_max + 1.0); if (verbose) fprintf(stderr, "\n%s %s %d %d\n", T->header->title, tp.input_file, T->header->nx, T->header->ny); if (verbose) fprintf(stderr, "\n%f %f %f %f %f\n", T->header->wesn[GMT_XLO], T->header->wesn[GMT_YLO], T->header->inc[GMT_X], T->header->inc[GMT_Y], rdumt); /* T->header->inc[GMT_X] or T->header->inc[GMT_Y] may be negative */ xdect = fabs(T->header->inc[GMT_X]); ydect = fabs(T->header->inc[GMT_Y]); /* calculate the average and remove the average from the topography */ calc_average_topo(&avet, T->header->nx, T->header->ny, T->data); if (verbose) fprintf(stderr, " read topo file: average %f \n", avet); } /* open and read the model file and allocate the memory */ if (modelflag) { if ((M = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, mp.input_file, NULL)) == NULL) return EXIT_FAILURE; if (xdim % M->header->nx != 0 || ydim % M->header->ny != 0) die("The dimension SLC must be multiplication factor of the modelphase", mp.input_file); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, mp.input_file, M) == NULL) return EXIT_FAILURE; xdecm = fabs(M->header->inc[GMT_X]); ydecm = fabs(M->header->inc[GMT_Y]); } /* compute the time span and the time spacing */ tspan = 86400. * fabs(p2.SC_clock_stop - p2.SC_clock_start); dt = tspan / (ydim - 1); if (tspan < 0.01 || p2.prf < 0.01) die("check sc_clock_start, _end, or prf", ""); /* setup the default parameters */ drange = SOL / (2.0 * p2.fs); alpha = p2.alpha_start * PI / 180.0; cnst = -4.0 * PI / p2.lambda; for (k = 0; k < xdim; k++) { // range[k]=p1.near_range+k*drange; range[k] = p1.near_range + k * (1 + p1.stretch_r) * drange; topo2[k] = 0.; xs[k] = k; } /* calculate initial baselines */ /* if (p2.SC_identity == 100) { double tmpB = 0.0,alpha = 0.0; tmpB = p2.baseline_start; alpha = p2.alpha_start; p2.baseline_start = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_start = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_start)/PI*180.0; tmpB = p2.baseline_end; alpha = p2.alpha_end; p2.baseline_end = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_end = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_end)/PI*180.0; tmpB = p2.baseline_center; alpha = p2.alpha_center; p2.baseline_center = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_center = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_center)/PI*180.0; } */ Bh0 = p2.baseline_start * cos(p2.alpha_start * PI / 180.0); Bv0 = p2.baseline_start * sin(p2.alpha_start * PI / 180.0); Bhf = p2.baseline_end * cos(p2.alpha_end * PI / 180.0); Bvf = p2.baseline_end * sin(p2.alpha_end * PI / 180.0); Bx0 = p2.B_offset_start; Bxf = p2.B_offset_end; /* first case is quadratic baseline model, second case is default linear model */ if (p2.baseline_center != NULL_DOUBLE || p2.alpha_center != NULL_DOUBLE || p2.B_offset_center != NULL_DOUBLE) { Bhc = p2.baseline_center * cos(p2.alpha_center * PI / 180.0); Bvc = p2.baseline_center * sin(p2.alpha_center * PI / 180.0); Bxc = p2.B_offset_center; dBh = (-3. * Bh0 + 4 * Bhc - Bhf) / tspan; dBv = (-3. * Bv0 + 4 * Bvc - Bvf) / tspan; ddBh = (2. * Bh0 - 4 * Bhc + 2 * Bhf) / (tspan * tspan); ddBv = (2. * Bv0 - 4 * Bvc + 2 * Bvf) / (tspan * tspan); dBx = (-3. * Bx0 + 4 * Bxc - Bxf) / tspan; ddBx = (2. * Bx0 - 4 * Bxc + 2 * Bxf) / (tspan * tspan); } else { dBh = (Bhf - Bh0) / tspan; dBv = (Bvf - Bv0) / tspan; dBx = (Bxf - Bx0) / tspan; ddBh = ddBv = ddBx = 0.0; } /* calculate height increment */ dht = (-3. * ht0 + 4 * htc - htf) / tspan; ddht = (2. * ht0 - 4 * htc + 2 * htf) / (tspan * tspan); /* revise params in accordance with first_line */ if ((p1.first_line > 0) && (p2.first_line > 0)) ydim_start = p1.first_line - 1; /* now go through all the rows */ for (j = ydim_start; j < (ydim + ydim_start); j++) { for (k = 0; k < xdim; k++) { // range[k]=p1.near_range+k*drange; range2[k] = range[k] + j * p1.a_stretch_r * drange; } /* read data from complex i2 SLC */ read_SLC_short2float(SLCfile1, p1.SLC_file, d1, &iptr1[0], xdim, 1, DFACT); read_SLC_short2float(SLCfile2, p2.SLC_file, d2, &iptr2[0], xdim, 1, DFACT); yt = j / ydect; /* for topo_ra */ ym = j / ydecm; /* for modelphase */ /* calculate the change in baseline and height along the frame */ time = j * dt; time2 = time * time; Bh = Bh0 + dBh * time + ddBh * time2; Bv = Bv0 + dBv * time + ddBv * time2; Bx = Bx0 + dBx * time + ddBx * time2; B = sqrt(Bh * Bh + Bv * Bv); alpha = atan2(Bv, Bh); height = ht0 + dht * time + ddht * time2; for (k = 0; k < xdim; k++) { shft[k] = 0.; if (topoflag) { xt = k / xdect; topo2[k] = T->data[xt + T->header->nx * yt]; } } /* calculate the combined earth curvature and topography correction */ calc_drho(xdim, range2, topo2, avet, p1.RE, height, B, alpha, Bx, drho); // for (k = 0; k < xdim; k++) range2[k] = 0.0; // calc_drho(xdim, range2, topo2, avet, p1.RE, height, B, alpha, Bx, drho0); // if (j == 50) printf("drho = %.12f\n",drho[50]); /* loop over range to make topographic and model phase corrections */ for (k = 0; k < xdim; k++) { // // iptr1[k].r = 1.0; // iptr1[k].i = 1.0; // intfp[k] = iptr1[k]; //pha = cnst * (drho[k] - drho0[k]); pha = cnst * drho[k]; if (modelflag) { xm = k / xdecm; /* xm is increment for model phase. note they are all integers */ pha = pha - M->data[xm + M->header->nx * ym]; } pshif = Cexp(pha); //intfp[k] = Cmul(intfp[k], pshif); intfp[k].r = pha; intfp[k].i = 0.0; } /* shift the range of the repeat image to improve image matching for very * long baselines > 1000 m */ if ((topoflag > 0) && (p2.baseline_start > 1000.0)) { /* compute the range change with no topography so the range shift can be * determined for the spline */ calc_drho(xdim, range, shft, avet, p1.RE, height, B, alpha, Bx, drho0); for (k = 0; k < xdim; k++) { shft[k] = (drho0[k] - drho[k]) / drange; real[k] = intfp[k].r; imag[k] = intfp[k].i; } /* shift the real part */ spline_(&istart, &xdim, xs, real, ss, as); for (k = 0; k < xdim; k++) { ys = xs[k] + shft[k]; evals_(&istart, &ys, &xdim, xs, real, ss, &test); intfp[k].r = (float)test; } /* shift imaginary part */ spline_(&istart, &xdim, xs, imag, ss, as); for (k = 0; k < xdim; k++) { ys = xs[k] + shft[k]; evals_(&istart, &ys, &xdim, xs, real, ss, &test); intfp[k].i = (float)test; } } /* make interferogram */ left_node = GMT_Get_Index(API, RE->header, j, 0); for (k = 0; k < xdim; k++) { //iptr2[k].r = 1.0; //iptr2[k].i = 1.0; //iptr2[k] = Conjg(iptr2[k]); //intfp[k] = Cmul(intfp[k], iptr2[k]); RE->data[left_node + k] = intfp[k].r; IM->data[left_node + k] = intfp[k].i; } } if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, "real.grd=bf", RE)) { die("Failed to update real.grd grid header", ""); } // // if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, "imag.grd=bf", IM)) { // die("Failed to update imag.grd grid header", ""); // } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/dc/dc0fbac4cf114c0a757f58ee8dd273276317340c.svn-base000444 015705 000000 00000005223 13505462013 026020 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # By Xiaohua XU, Jun, 2015 # # prepare input data.in for preproc_batch_tops.csh # # alias wgetasf to 'wget --http-user=**** --http-password=****' in .cshrc or .tcshrc file # requires having an account on with ASF # # set a local directory that stores S1A and S1B orbits. e.g. orb_dir/S1A and orb_dir/S1B # set orb_dir = "/geosat2/InSAR_Processing/Sentinel_Orbits" rm data.in ls *.xml > text.dat set mstem = `awk 'NR==1 {print $0}' text.dat | awk '{print substr($1,16,8)}'` set mname = `awk 'NR==1 {print $0}' text.dat | awk '{print substr($1,1,64)}'` set rec = 0 if (! -f orbits.list) then set url_root = "https://s1qc.asf.alaska.edu/aux_poeorb/" wget $url_root -O orbits.html grep EOF orbits.html | awk -F'"' '{print $2}' > orbits.list rm orbits.html endif echo "Looping over all the lines" foreach line ( ` awk '{ print $0 }' < text.dat ` ) set stem = `echo $line | awk '{print substr($1,16,8)}'` set name = `echo $line | awk '{print substr($1,1,64)}'` if ($stem != $mstem) then echo "Writing record $mstem" #set n1 = `echo $mstem | awk '{print $1-1}'` #set n2 = `echo $mstem | awk '{print $1+1}'` # uses date for time manipulation -ben set n1 = `date -v-1d -jf "%Y%m%d" $mstem +%Y%m%d` set n2 = `date -v+1d -jf "%Y%m%d" $mstem +%Y%m%d` set SAT = `echo $mname | awk '{print toupper(substr($1,1,3))}'` #cp ../../../../orbit/*$n1*$n2* . set orb = `grep $SAT orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT/$orb) then cp $orb_dir/$SAT/$orb . else wgetasf $url_root/$orb endif endif #if (! -f $orb) wget $url_root"/"$orb #set orb = `ls *$n1*$n2*` #set orb = `ls *$mstem*EOF` set tmp_rec = `echo $rec $orb | awk '{print $1":"$2}'` echo $tmp_rec >> data.in set rec = `echo $name` set mstem = `echo $stem` set mname = `echo $name` else if ($rec == 0) then echo "Setting a new name for rec" set rec = `echo $name` else set tmp_rec = `echo $name $rec | awk '{print $2":"$1}'` set rec = `echo $tmp_rec` endif endif end set n1 = `date -v-1d -jf "%Y%m%d" $mstem +%Y%m%d` set n2 = `date -v+1d -jf "%Y%m%d" $mstem +%Y%m%d` set SAT = `echo $mname | awk '{print toupper(substr($1,1,3))}'` echo "Writing record $mstem" #set orb = `ls *$n1*$n2*` set orb = `grep $SAT orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT/$orb) then cp $orb_dir/$SAT/$orb . else wgetasf $url_root/$orb endif endif #if (! -f $orb) wget $url_root"/"$orb #set orb = `ls *$mstem*EOF` set tmp_rec = `echo $rec $orb | awk '{print $1":"$2}'` echo $tmp_rec >> data.in rm text.dat rm orbits.list GMTSAR_V5.7/.svn/pristine/dc/dc9ca369a8c9ca069f50742be1fa0e7537659e84.svn-base000444 015705 000000 00000022213 13505462013 025771 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Mar 2 2010 # modified by D. Sandwell MAR 11 2010 # modified by A Hogrelius May 22 2017 (added support for ENVI_SLC) # # preprocess all the data based on data.in table file and generate: # 1. raw files # 2. PRM files # 3. time-baseline plot for user to create stacking pairs # format in data.in table file: # line 1: master_name # line 2 and below: slave_name alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv != 3) then echo "" echo "Usage: pre_proc_batch.csh SAT data.in batch.config" echo " preprocess a set of images using a common rear_range and radius" echo "" echo " SAT can be ALOS ERS ENVI(ENVISAT) ENVI_SLC" echo "" echo " format of data.in is:" echo " line 1: master_name " echo " line 2 and below: slave_name" echo "" echo " example of data.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP089300650-H1.0__A" echo " IMG-HH-ALPSRP236920650-H1.0__A" echo "" echo " example of data.in for ERS is:" echo " e1_05783" echo " e1_07787" echo " e1_10292" echo "" echo " example of data.in for ENVISAT is:" echo " ENV1_2_127_2925_07195" echo " ENV1_2_127_2925_12706" echo " ENV1_2_127_2925_13207" echo "" echo " example of data.in for ENVI_SLC is:" echo " ASA_IMS_1PNESA20030908_175832_000000182019_00399_07968_0000" echo " ASA_IMS_1PNESA20040719_175832_000000182028_00399_12477_0000" echo " ASA_IMS_1PNESA20051121_175837_000000172042_00399_19491_0000" echo "" echo "Example: pre_proc_batch.csh ENVI data.in batch.config" echo "" exit 1 endif set SAT = $1 if ($SAT != ALOS && $SAT != ENVI && $SAT != ENVI_SLC && $SAT != ERS) then echo "" echo " SAT can be ALOS ERS ENVI(ENVISAT) or ENVI_SLC" echo "" exit 1 endif # # read parameters from configuration file # set num_patches = `grep num_patches $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set fd = `grep fd1 $3 | awk '{print $3}'` set commandline = "" if ($SAT == ERS || $SAT == ENVI) then if (!($near_range == "")) then set commandline = "$commandline $near_range" else set commandline = "$commandline 0" endif if (!($earth_radius == "")) then set commandline = "$commandline $earth_radius" else set commandline = "$commandline 0" endif if (!($num_patches == "")) then set commandline = "$commandline $num_patches" else set commandline = "$commandline 0" endif if (!($fd == "")) then set commandline = "$commandline $fd" else set commandline = "$commandline" endif else if ($SAT == ALOS) then if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($near_range == "")) then set commandline = "$commandline -near $near_range" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($fd == "")) then set commandline = "$commandline -fd1 $fd" endif endif echo $commandline # # open and read data.in table # echo "" echo "START PREPROCESS A STACK OF IMAGES" echo "" echo "preprocess master image" set line1 = `awk 'NR==1 {print $0}' $2` if ($SAT == ERS || $SAT == ENVI || $SAT == ENVI_SLC) then set master = $line1[1] else if ($SAT == ALOS) then set master = `echo $line1[1] | awk '{ print substr($1,8,length($1)-7)}'` endif # # unpack the master if necessary # if ($SAT == ERS || $SAT == ENVI) then if(! -f $master.raw || ! -f $master.LED) then $1_pre_process $master $commandline endif set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` set FD1 = `grep fd1 $master.PRM | awk '{print $3}'` set npatch = `grep num_patch $master.PRM | awk '{print $3}'` echo "before baseline" baseline_table.csh $master.PRM $master.PRM >! baseline_table.dat baseline_table.csh $master.PRM $master.PRM GMT >! table.gmt echo "after baseline" else if ($SAT == ENVI_SLC) then if ($earth_radius == "") then set earth_radius = 0 endif if(! -f $master.SLC || ! -f $master.LED) then ENVI_SLC_pre_process $master $earth_radius endif set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` set FD1 = `grep fd1 $master.PRM | awk '{print $3}'` set npatch = `grep num_patch $master.PRM | awk '{print $3}'` echo "before baseline" baseline_table.csh $master.PRM $master.PRM >! baseline_table.dat baseline_table.csh $master.PRM $master.PRM GMT >! table.gmt echo "after baseline" else if ($SAT == ALOS) then if(! -f IMG-HH-$master.raw || ! -f IMG-HH-$master.PRM ) then $1_pre_process IMG-HH-$master LED-$master $commandline endif set NEAR = `grep near_range IMG-HH-$master.PRM | awk '{print $3}'` set RAD = `grep earth_radius IMG-HH-$master.PRM | awk '{print $3}'` set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set FD1 = `grep fd1 IMG-HH-$master.PRM | awk '{print $3}'` set npatch = `grep num_patch IMG-HH-$master.PRM | awk '{print $3}'` baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM >! baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM GMT >! table.gmt endif # # loop and unpack the slave image using the same earth radius and near range as the master image # foreach line2 (`awk 'NR>1 {print $0}' $2`) echo "pre_proc_batch.csh" echo "preprocess slave images" if ($SAT == ERS || $SAT == ENVI) then set slave = $line2 if(! -f $slave.raw || ! -f $slave.LED) then $1_pre_process $slave $NEAR $RAD $npatch $FD1 endif baseline_table.csh $master.PRM $slave.PRM >> baseline_table.dat baseline_table.csh $master.PRM $slave.PRM GMT >> table.gmt else if ($SAT == ENVI_SLC) then set slave = $line2 if(! -f $slave.SLC || ! -f $slave.LED) then $1_pre_process $slave $RAD endif baseline_table.csh $master.PRM $slave.PRM >> baseline_table.dat baseline_table.csh $master.PRM $slave.PRM GMT >> table.gmt else if ($SAT == ALOS) then set slave = ` echo $line2 | awk '{ print substr($1,8,length($1)-7)}'` if(! -f IMG-HH-$slave.raw || ! -f IMG-HH-$slave.PRM ) then $1_pre_process IMG-HH-$slave LED-$slave -fd1 $FD1 -near $NEAR -radius $RAD -npatch $npatch endif # # check the range sampling rate of the slave images and do conversion if necessary # set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM GMT >> table.gmt else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs IMG-HH-$slave.PRM IMG-HH-$slave"_"FBS.PRM # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM GMT >> table.gmt echo "Overwriting the old slave image" mv IMG-HH-$slave"_"FBS.PRM IMG-HH-$slave.PRM update_PRM IMG-HH-$slave.PRM input_file IMG-HH-$slave.raw mv IMG-HH-$slave"_"FBS.raw IMG-HH-$slave.raw else if ($t == 0.5) then echo "Use FBS mode image as master" exit 1 else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif # end of the if ($SAT == ALOS) endif # end of the loop over slave images end # # make baseline plots # if ($SAT == ERS || $SAT == ENVI || $SAT == ENVI_SLC) then awk '{print 1992+$1/365.25,$2,$7}' < table.gmt > text # awk '{print 1992+$1/365.25,$2,7,$4,$5,$6,$7}' < table.gmt > text # awk '{print 1992+$1/365.25,$2,7,-45,$5,$6,$7}' < table.gmt > text else if ($SAT == ALOS) then awk '{print 2006.5+($1-181)/365.25,$2,$7}' < table.gmt > text # awk '{print 2006.5+($1-181)/365.25,$2,9,$4,$5,$6,$7}' < table.gmt > text endif set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-500, $4+500}'` # set region = `minmax text -C | awk '{print $1-0.5, $2+0.5, -1200, 1200}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > stacktable_all.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba1:"year":/a200g00f100:"baseline (m)":WSen -O >> stacktable_all.ps echo "" echo "END PREPROCESS A STACK OF IMAGES" echo "" # # clean up the mess # rm text text2 GMTSAR_V5.7/.svn/pristine/dd/dd7ed2459c2a3b77f92bd8cdbe2d525142fb1c4b.svn-base000444 015705 000000 00000001214 13505462014 026241 0ustar00sandwellwheel000000 000000 include ../../config.mk DIRS = ALOS_pre_process ALOS_merge ALOS_fbd2fbs \ ALOS_fbd2fbs_SLC ALOS_fbd2ss ALOS_baseline \ ALOS_pre_process_SLC ALOS_mosaic_ss ALOS_look \ ALOS_mosaic_ss ALOS_mosaic_ss_2frames ALOS_pre_process_SS LIB = lib/libALOS.a all: $(LIB) for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done uninstall: for d in $(DIRS); do \ (cd $$d; $(MAKE) uninstall); \ done clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done (cd lib_src; $(MAKE) clean) $(LIB): mkdir -p lib (cd lib_src; $(MAKE) all) spotless: clean rm -rf lib GMTSAR_V5.7/.svn/pristine/dd/dd51299806c615ea110b0588a1f5ba2d129d58f5.svn-base000444 015705 000000 00000052127 13505462013 025610 0ustar00sandwellwheel000000 000000 /* $Id: phasediff.c 109 2015-01-19 23:01:24Z sandwell $ */ /*************************************************************************** * phasediff reads two complex SAR_SLC images and computes the phase * * difference of the images removing the effects of the curved earth * * and optionally the topography. Orbit information is provided in the * * second PRM-file. * * The baseline changes linearly between the start and end of the image. * * This linear baseline model is appropriate for a single frame but higher * * order terms are needed for long swaths of data. * * Model phase can also be removed as an option. * * The images should be matched to a level that will * * produce interference fringes and must be the same size. * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Evelyn J. Price * * (Scripps Institution of Oceanography) * * Date : 7/7/95 * * Rewritten: Rob Mellors (San Diego State University) * * Date : 11/7/09 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 11/18/96 Changed sign of earth flattening phase to fit with signs * * of baseline estimates. * * 11/18/96 Changed to read GIPS headers to gather parameters. * * 11/21/96 Changed to update baseline estimate. * * 06/19/97 Changed to NOT update baseline parameters * * 06/25/97 Changed to change baseline along the frame * * 03/10/99 Changed to remove reference phase due to topography * * 04/06/01 Changed to remove model or other known phase * * 06/21/02 Changed to scale the interferogram by 1/sqrt(amp) * * 08/16/06 Changed to use the topo_ra to shift the range * * coordinate of the repeat image for long baselines. * * 07/02/08 provide ability to shift topo_ra * * 07/11/08 Added spacecraft height start and end to make phase * * continuous across patches * * 09/18/08 Added TEC_start and TEC_end to account for the ionosphere * * 08/18/09 Added small correction to the phase for the elevation- * * dependent range shift, important for long baselines * * 11/07/09 Code rewritten by RJM to read PRM-files and write grd-files* * 04/24/10 changed calc_phase subroutine based on pdiff.c * * changed the phase calculation part to match pdiff.c * * this change is to account for slight range change due to * * topography, which is accounted for in pdiff.c * * 10/23/10 changed calc_phase to calc_drho and completely rewrote * * the topographic phase correction to use all the nonlinear * * terms. ***************************************************************************/ #include "gmtsar.h" char *USAGE = "phasediff [GMTSAR] - Compute phase difference of two images\n\n" "\nUsage: " "phasediff ref.PRM rep.PRM [-topo topo_ra.grd] [-model " "modelphase.grd]\n (topo_ra and model in GMT grd format)\n"; /*--------------------------------------------------------------*/ void calc_drho(int xdim, double *range, double *topo, double avet, double re, double height, double B, double alpha, double Bx, double *drho) { int k; /* EX: changing to long double for better precision */ long double rho, sint, cost, cosa, sina, b; // long double term1,term2,c,c2,ret,ret2; long double term1, c, c2, ret, ret2; sina = sin(alpha); cosa = cos(alpha); c = re + height; c2 = c * c; b = B; for (k = 0; k < xdim; k++) { /* compute the look angle using equation (C26) in Appendix C */ rho = range[k]; ret = re + avet + topo[k]; ret2 = ret * ret; cost = ((rho * rho + c2 - ret2) / (2. * rho * c)); // thet = acos(cost); if (cost >= 1.) die("calc_drho", "cost >= 0"); sint = sqrtl(1. - cost * cost); /* compute the range change using equation (c23) in Appendic C */ // term1 = -B*(sint*cosa-cost*sina); // term2 = B*B*(cost*cosa+sint*sina)*(cost*cosa+sint*sina)/(2.*rho); // drho[k] = term1 + term2; /* New (Eric Lindsey, April 2015): compute the range change using the full * nonlinear equation */ // term1 = rho*rho + b*b - 2*rho*b*(sint*cosa-cost*sina); // term1 = rho*rho + b*b - 2*rho*b*sin(thet-alpha); // drho[k] = -rho + sqrtl(term1); /* Compute the offset effect from non-parallel orbit */ term1 = rho * rho + b * b - 2 * rho * b * (sint * cosa - cost * sina) - Bx * Bx; // term1 = rho*rho + b*b - 2*rho*b*(sint*cosa-cost*sina); drho[k] = -rho + sqrtl(term1); } } /*--------------------------------------------------------------*/ void calc_average_topo(double *avet, int xdimt, int ydimt, float *topo) { double sumt; int k, nsum; sumt = 0.0; nsum = 0; /* compute the average topography, save the value, and remove it from the * topography */ for (k = 0; k < xdimt * ydimt; k++) { sumt += topo[k]; nsum++; } *avet = sumt / nsum; for (k = 0; k < xdimt * ydimt; k++) { topo[k] = topo[k] - (float)*avet; } if (verbose) fprintf(stderr, " mean topo %lf\n", *avet); } void print_prm_params(struct PRM p1, struct PRM p2) { fprintf(stderr, " SLC 1: num_rng_bins %d num_lines %d \n", p1.num_rng_bins, p1.num_lines); fprintf(stderr, " SLC 2: num_rng_bins %d num_lines %d \n", p2.num_rng_bins, p2.num_lines); fprintf(stderr, " lambda %f \n", p2.lambda); fprintf(stderr, " baseline_start %f \n", p2.baseline_start); fprintf(stderr, " baseline_end %f \n", p2.baseline_end); fprintf(stderr, " B_offset_start %f \n", p2.B_offset_start); fprintf(stderr, " B_offset_end %f \n", p2.B_offset_end); fprintf(stderr, " alpha_start %f \n", p2.alpha_start); fprintf(stderr, " alpha_end %f \n", p2.alpha_end); fprintf(stderr, " near_range %f \n", p2.near_range); fprintf(stderr, " rng_samp_rate %f \n", p2.fs); fprintf(stderr, " sc_clock_start %f \n", p2.SC_clock_start); fprintf(stderr, " sc_clock_stop %f \n", p2.SC_clock_stop); fprintf(stderr, " clock_start %f \n", p2.clock_start); fprintf(stderr, " clock_stop %f \n", p2.clock_stop); fprintf(stderr, " prf %f \n", p2.prf); } void fix_prm_params(struct PRM *p, char *s) { double delr; delr = SOL / p->fs / 2.0; /* this is the correction for the range and azimuth shifts of the re-aligned * SLC images */ // if(p->sub_int_r < 0.) p->sub_int_r = 0.; // if(p->sub_int_a < 0.) p->sub_int_a = 0.; p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift + p->sub_int_r - 1) * delr; p->SC_clock_start = p->SC_clock_start + (p->ashift + p->sub_int_a) / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } /*--------------------------------------------------------------*/ /* read topo_ra and model files if provided */ /* must be in GMT binary grd format */ void read_optional_args(void *API, int argc, char **argv, struct PRM *tp, int *topoflag, struct PRM *mp, int *modelflag) { int i; struct GMT_GRID *M = NULL, *T = NULL; /* Grid structures containing ->header and ->data */ for (i = 3; i < argc; i++) { if (strcmp(argv[i], "-topo") == 0) { fprintf(stderr, "reading topo %s\n", argv[i + 1]); strcpy(tp->input_file, argv[i + 1]); if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, tp->input_file, NULL)) == NULL) die("cannot open topofile", tp->input_file); tp->num_rng_bins = T->header->nx; tp->num_lines = T->header->ny; *topoflag = 1; i++; GMT_Destroy_Data(API, &T); } if (strcmp(argv[i], "-model") == 0) { fprintf(stderr, "reading model %s\n", argv[i + 1]); strcpy(mp->input_file, argv[i + 1]); if ((M = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, mp->input_file, NULL)) == NULL) die("cannot open model file", mp->input_file); mp->num_rng_bins = M->header->nx; mp->num_lines = M->header->ny; *modelflag = 1; i++; GMT_Destroy_Data(API, &M); } } } int main(int argc, char **argv) { int j, k, istart; int topoflag, modelflag; int xdim = 0, ydim = 0; /* size of SLC file */ int ydim_start; /* start of SLC filesize */ int xt, yt; /* size of topo file, increment */ int xm, ym; /* size of model file, increment */ uint64_t left_node; short *d1 = NULL, *d2 = NULL; /* pointers to input data files */ double *xs = NULL, *shft = NULL, *ss = NULL, *as = NULL, *topo2 = NULL; double *real = NULL, *imag = NULL, *range = NULL, *drho = NULL, *drho0 = NULL; double drange, dt, tspan, time, time2; double ht0, htc, htf, dht, ddht, height; double alpha, cnst, pha, avet; double B, Bh, Bv, dBh, dBv, ddBh, ddBv; double Bx, dBx, ddBx, Bx0, Bxc, Bxf; double Bh0, Bhc, Bhf, Bv0, Bvc, Bvf; double ys, test, inc[2], wesn[4]; double xdect, ydect, xdecm, ydecm, rdumt; FILE *SLCfile1 = NULL, *SLCfile2 = NULL; fcomplex *intfp = NULL, *iptr1 = NULL, *iptr2 = NULL, pshif; struct PRM p1, p2, tp, mp; void *API = NULL; /* GMT control structure */ struct GMT_GRID *M = NULL, *T = NULL; /* Grid structures containing ->header and ->data */ struct GMT_GRID *RE = NULL, *IM = NULL; /* For the real and imaginary grids */ double *range2 = NULL; /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; verbose = 0; topoflag = modelflag = 0; xdect = ydect = 1.0; xdecm = ydecm = 1.0; avet = 0.0; ydim_start = 0; if (argc < 3) die(USAGE, ""); /* read prm file into two pointers */ get_prm(&p1, argv[1]); get_prm(&p2, argv[2]); if (verbose) fprintf(stderr, "near range: %lf %lf \n", p1.near_range, p2.near_range); if (argc > 3) read_optional_args(API, argc, argv, &tp, &topoflag, &mp, &modelflag); if (debug) print_prm_params(p1, p2); if (p2.baseline_start < -9000) die("baseline < -9000 not set ?", ""); /* near_range, SC_clock_start, and SC_clock_stop need to be changed */ fix_prm_params(&p1, argv[1]); fix_prm_params(&p2, argv[2]); if (verbose) fprintf(stderr, "near range: %lf %lf \n", p1.near_range, p2.near_range); /* open SLC files */ if ((SLCfile1 = fopen(p1.SLC_file, "r")) == NULL) die("Can't open SLCfile", p1.SLC_file); if ((SLCfile2 = fopen(p2.SLC_file, "r")) == NULL) die("Can't open SLCfile", p2.SLC_file); /* set width and length */ /* check dimensions of the two SLC files */ if (p1.num_rng_bins == p2.num_rng_bins) { xdim = p1.num_rng_bins; } else { die("The dimensions of range do not match", ""); } if (p1.num_patches * p1.num_valid_az == p2.num_patches * p2.num_valid_az) { ydim = p1.num_patches * p1.num_valid_az; } else { die("The dimensions of azimuth do not match", ""); } fprintf(stderr, " xdim %d, ydim %d \n", xdim, ydim); /* set heights */ htc = p1.ht; ht0 = p1.ht_start; htf = p1.ht_end; inc[GMT_X] = inc[GMT_Y] = 1.0; /* Pixels */ wesn[GMT_XLO] = 0.0; wesn[GMT_XHI] = inc[GMT_X] * xdim; wesn[GMT_YLO] = 0.0; wesn[GMT_YHI] = inc[GMT_Y] * ydim; if ((RE = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "real", RE)) return EXIT_FAILURE; if ((IM = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "imag", RE)) return EXIT_FAILURE; /* allocate memory */ drho = (double *)malloc(xdim * sizeof(double)); drho0 = (double *)malloc(xdim * sizeof(double)); range = (double *)malloc(xdim * sizeof(double)); range2 = (double *)malloc(xdim * sizeof(double)); intfp = (fcomplex *)malloc(xdim * sizeof(fcomplex)); iptr1 = (fcomplex *)malloc(xdim * sizeof(fcomplex)); iptr2 = (fcomplex *)malloc(xdim * sizeof(fcomplex)); d1 = (short *)malloc(2 * xdim * sizeof(short)); d2 = (short *)malloc(2 * xdim * sizeof(short)); shft = (double *)malloc(xdim * sizeof(double)); xs = (double *)malloc(xdim * sizeof(double)); topo2 = (double *)malloc(xdim * sizeof(double)); imag = (double *)malloc(xdim * sizeof(double)); real = (double *)malloc(xdim * sizeof(double)); ss = (double *)malloc(xdim * sizeof(double)); as = (double *)malloc(xdim * sizeof(double)); /* open and read topo file and allocate memory */ if (topoflag) { if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, tp.input_file, NULL)) == NULL) return EXIT_FAILURE; if (xdim % T->header->nx != 0 || ydim % T->header->ny != 0) die("The dimension SLC must be multiplication factor of the topo_ra", tp.input_file); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, tp.input_file, T) == NULL) return EXIT_FAILURE; rdumt = floor(T->header->z_max + 1.0); if (verbose) fprintf(stderr, "\n%s %s %d %d\n", T->header->title, tp.input_file, T->header->nx, T->header->ny); if (verbose) fprintf(stderr, "\n%f %f %f %f %f\n", T->header->wesn[GMT_XLO], T->header->wesn[GMT_YLO], T->header->inc[GMT_X], T->header->inc[GMT_Y], rdumt); /* T->header->inc[GMT_X] or T->header->inc[GMT_Y] may be negative */ xdect = fabs(T->header->inc[GMT_X]); ydect = fabs(T->header->inc[GMT_Y]); /* calculate the average and remove the average from the topography */ calc_average_topo(&avet, T->header->nx, T->header->ny, T->data); if (verbose) fprintf(stderr, " read topo file: average %f \n", avet); } /* open and read the model file and allocate the memory */ if (modelflag) { if ((M = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, mp.input_file, NULL)) == NULL) return EXIT_FAILURE; if (xdim % M->header->nx != 0 || ydim % M->header->ny != 0) die("The dimension SLC must be multiplication factor of the modelphase", mp.input_file); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, mp.input_file, M) == NULL) return EXIT_FAILURE; xdecm = fabs(M->header->inc[GMT_X]); ydecm = fabs(M->header->inc[GMT_Y]); } /* compute the time span and the time spacing */ tspan = 86400. * fabs(p2.SC_clock_stop - p2.SC_clock_start); dt = tspan / (ydim - 1); if (tspan < 0.01 || p2.prf < 0.01) die("check sc_clock_start, _end, or prf", ""); /* setup the default parameters */ drange = SOL / (2.0 * p2.fs); alpha = p2.alpha_start * PI / 180.0; cnst = -4.0 * PI / p2.lambda; for (k = 0; k < xdim; k++) { // range[k]=p1.near_range+k*drange; range[k] = p1.near_range + k * (1 + p1.stretch_r) * drange; topo2[k] = 0.; xs[k] = k; } /* calculate initial baselines */ /* if (p2.SC_identity == 100) { double tmpB = 0.0,alpha = 0.0; tmpB = p2.baseline_start; alpha = p2.alpha_start; p2.baseline_start = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_start = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_start)/PI*180.0; tmpB = p2.baseline_end; alpha = p2.alpha_end; p2.baseline_end = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_end = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_end)/PI*180.0; tmpB = p2.baseline_center; alpha = p2.alpha_center; p2.baseline_center = sqrt(pow((p1.ashift+p1.sub_int_a - p2.ashift-p2.sub_int_a)*p2.vel/p2.prf,2)+pow(tmpB,2)); p2.alpha_center = acos(tmpB*sin(alpha*PI/180.0)/p2.baseline_center)/PI*180.0; } */ Bh0 = p2.baseline_start * cos(p2.alpha_start * PI / 180.0); Bv0 = p2.baseline_start * sin(p2.alpha_start * PI / 180.0); Bhf = p2.baseline_end * cos(p2.alpha_end * PI / 180.0); Bvf = p2.baseline_end * sin(p2.alpha_end * PI / 180.0); Bx0 = p2.B_offset_start; Bxf = p2.B_offset_end; /* first case is quadratic baseline model, second case is default linear model */ if (p2.baseline_center != NULL_DOUBLE || p2.alpha_center != NULL_DOUBLE || p2.B_offset_center != NULL_DOUBLE) { Bhc = p2.baseline_center * cos(p2.alpha_center * PI / 180.0); Bvc = p2.baseline_center * sin(p2.alpha_center * PI / 180.0); Bxc = p2.B_offset_center; dBh = (-3. * Bh0 + 4 * Bhc - Bhf) / tspan; dBv = (-3. * Bv0 + 4 * Bvc - Bvf) / tspan; ddBh = (2. * Bh0 - 4 * Bhc + 2 * Bhf) / (tspan * tspan); ddBv = (2. * Bv0 - 4 * Bvc + 2 * Bvf) / (tspan * tspan); dBx = (-3. * Bx0 + 4 * Bxc - Bxf) / tspan; ddBx = (2. * Bx0 - 4 * Bxc + 2 * Bxf) / (tspan * tspan); } else { dBh = (Bhf - Bh0) / tspan; dBv = (Bvf - Bv0) / tspan; dBx = (Bxf - Bx0) / tspan; ddBh = ddBv = ddBx = 0.0; } /* calculate height increment */ dht = (-3. * ht0 + 4 * htc - htf) / tspan; ddht = (2. * ht0 - 4 * htc + 2 * htf) / (tspan * tspan); /* revise params in accordance with first_line */ if ((p1.first_line > 0) && (p2.first_line > 0)) ydim_start = p1.first_line - 1; /* now go through all the rows */ for (j = ydim_start; j < (ydim + ydim_start); j++) { for (k = 0; k < xdim; k++) { // range[k]=p1.near_range+k*drange; range2[k] = range[k] + j * p1.a_stretch_r * drange; } /* read data from complex i2 SLC */ read_SLC_short2float(SLCfile1, p1.SLC_file, d1, &iptr1[0], xdim, 1, DFACT); read_SLC_short2float(SLCfile2, p2.SLC_file, d2, &iptr2[0], xdim, 1, DFACT); yt = j / ydect; /* for topo_ra */ ym = j / ydecm; /* for modelphase */ /* calculate the change in baseline and height along the frame */ time = j * dt; time2 = time * time; Bh = Bh0 + dBh * time + ddBh * time2; Bv = Bv0 + dBv * time + ddBv * time2; Bx = Bx0 + dBx * time + ddBx * time2; B = sqrt(Bh * Bh + Bv * Bv); alpha = atan2(Bv, Bh); height = ht0 + dht * time + ddht * time2; for (k = 0; k < xdim; k++) { shft[k] = 0.; if (topoflag) { xt = k / xdect; topo2[k] = T->data[xt + T->header->nx * yt]; } } /* calculate the combined earth curvature and topography correction */ calc_drho(xdim, range2, topo2, avet, p1.RE, height, B, alpha, Bx, drho); // if (j == 50) printf("drho = %.12f\n",drho[50]); /* loop over range to make topographic and model phase corrections */ for (k = 0; k < xdim; k++) { // // iptr1[k].r = 1.0; // iptr1[k].i = 1.0; // intfp[k] = iptr1[k]; pha = cnst * drho[k]; if (modelflag) { xm = k / xdecm; /* xm is increment for model phase. note they are all integers */ pha = pha - M->data[xm + M->header->nx * ym]; } pshif = Cexp(pha); intfp[k] = Cmul(intfp[k], pshif); } /* shift the range of the repeat image to improve image matching for very * long baselines > 1000 m */ if ((topoflag > 0) && (p2.baseline_start > 1000.0)) { /* compute the range change with no topography so the range shift can be * determined for the spline */ calc_drho(xdim, range, shft, avet, p1.RE, height, B, alpha, Bx, drho0); for (k = 0; k < xdim; k++) { shft[k] = (drho0[k] - drho[k]) / drange; real[k] = intfp[k].r; imag[k] = intfp[k].i; } /* shift the real part */ spline_(&istart, &xdim, xs, real, ss, as); for (k = 0; k < xdim; k++) { ys = xs[k] + shft[k]; evals_(&istart, &ys, &xdim, xs, real, ss, &test); intfp[k].r = (float)test; } /* shift imaginary part */ spline_(&istart, &xdim, xs, imag, ss, as); for (k = 0; k < xdim; k++) { ys = xs[k] + shft[k]; evals_(&istart, &ys, &xdim, xs, real, ss, &test); intfp[k].i = (float)test; } } /* make interferogram */ left_node = GMT_Get_Index(API, RE->header, j, 0); for (k = 0; k < xdim; k++) { // // iptr2[k].r = 1.0; // iptr2[k].i = 1.0; // iptr2[k] = Conjg(iptr2[k]); intfp[k] = Cmul(intfp[k], iptr2[k]); RE->data[left_node + k] = intfp[k].r; IM->data[left_node + k] = intfp[k].i; } } if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, "real.grd=bf", RE)) { die("Failed to update real.grd grid header", ""); } if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, "imag.grd=bf", IM)) { die("Failed to update imag.grd grid header", ""); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/b1/b12b8e49a3e534b148f0727291a0a0569d514142.svn-base000444 015705 000000 00000004761 13505462014 025273 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl use strict; #use warnings; if ($#ARGV != 0) { # print $#ARGV; # very strange, this number should be 0 if no input, but here -1 print "\nusage: dump_time_envi.pl envisat.baq/N1 \n\n"; print "input: envisat.raw: envisat raw data in .N1 or .baq \n"; print "output: print out start time and end time \n\n"; exit; } my %month = ( "JAN" => "01", "FEB" => "02", "MAR" => "03", "APR" => "04", "MAY" => "05", "JUN" => "06", "JUL" => "07", "AUG" => "08", "SEP" => "09", "OCT" => "10", "NOV" => "11", "DEC" => "12"); my @text = (); my $file = $ARGV[0]; my $file2 = "tmp_time"; # print out so other program can do julian day conversion my $start = ""; my $stop = ""; my $date = ""; my $time = ""; my $year = ""; my $jday = ""; my $ptime =""; my $ftime0 =""; my $ftimey =""; my $ftime2 =""; my @tmp = (); my $n = 0; @text = `head -15 $file`; LINE:foreach(@text){ if($_ =~ /sensing_start="(.*)"/i){ $start = $1; $n++; } if($_ =~ /sensing_stop="(.*)"/i){ $stop = $1; $n++; } last LINE if($n >= 2) ; } close File; @tmp = split /\s+/, $start; $date = $tmp[0]; $time = $tmp[1]; @tmp = split /-/, $date; $year = $tmp[2]; $ftime2 = $tmp[2]*10000+$month{$tmp[1]}*100+$tmp[0]; $jday = juldate($tmp[2],$month{$tmp[1]},$tmp[0]); @tmp = split /:/, $time; $ptime = ($tmp[0] + $tmp[1]/60 + $tmp[2]/3600)/24; $ftime0 = $jday+$ptime; $ftimey = $year*1000+$jday+$ptime; print "SENSING_START0 "; print "$ftime0 \n"; print "SENSING_STARTY "; print "$ftimey \n"; print "START2 "; print "$ftime2 \n"; @tmp = split /\s+/, $stop; $date = $tmp[0]; $time = $tmp[1]; @tmp = split /-/, $date; $year = $tmp[2]; $ftime2 = $tmp[2]*10000+$month{$tmp[1]}*100+$tmp[0]; $jday = juldate($tmp[2],$month{$tmp[1]},$tmp[0]); @tmp = split /:/, $time; $ptime = ($tmp[0] + $tmp[1]/60 + $tmp[2]/3600)/24; $ftime0 = $jday+$ptime; $ftimey = $year*1000+$jday+$ptime; print "SENSING_STOP0 "; print "$ftime0 \n"; print "SENSING_STOPY "; print "$ftimey \n"; print "STOP2 "; print "$ftime2 \n"; `rm -f tmp_time`; sub juldate { my $iyear = $_[0]; my $imon = $_[1]; my $iday = $_[2]; my @jsum = (0,31,59,90,120,151,181,212,243,273,304,334); my @jsum2= (0,31,60,91,121,152,182,213,244,274,305,335); if ($iyear%400 == 0) { #leap year $jday=$jsum2[$imon-1]+$iday; } elsif ($iyear%100 == 0) { #not a leap year $jday=$jsum[$imon-1]+$iday; } elsif ($iyear%4 == 0) { #leap year $jday=$jsum2[$imon-1]+$iday; } else { #not a leap year $jday=$jsum[$imon-1]+$iday; } return $jday; } GMTSAR_V5.7/.svn/pristine/b1/b16672f914614f1defd372e2d202cec5714e1ed1.svn-base000444 015705 000000 00000005511 13505462014 025653 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /* reads options */ /* start with third arguement */ void parse_ALOS_commands(int na, char **a, char *USAGE, struct PRM *prm, int *nsub, int *burst_skip, int *num_burst) { int n; for (n = 3; n < na; n++) { if (!strcmp(a[n], "-near")) { n++; if (n == na) die(" no option after -near!\n", ""); prm->near_range = atof(a[n]); fprintf(stderr, " setting near_range to %9.2lf \n", prm->near_range); } else if (!strcmp(a[n], "-swath")) { n++; if (n == na) die(" no option after -swath\n", ""); *nsub = atoi(a[n]) - 1; fprintf(stderr, " setting swath to %d \n", *nsub + 1); } else if (!strcmp(a[n], "-burst_skip")) { n++; if (n == na) die(" no option after -burst_skip\n", ""); *burst_skip = atoi(a[n]); fprintf(stderr, " setting burst_skip to %d \n", *burst_skip); } else if (!strcmp(a[n], "-num_burst")) { n++; if (n == na) die(" no option after -num_burst\n", ""); *num_burst = atoi(a[n]); fprintf(stderr, " setting num_nburst to %d \n", *num_burst); } else if (!strcmp(a[n], "-radius")) { n++; if (n == na) die(" no option after -radius!\n", ""); prm->RE = atof(a[n]); fprintf(stderr, " setting radius to %f \n", prm->RE); } else if (!strcmp(a[n], "-force_slope")) { n++; if (n == na) die(" no option after -force_slope!\n", ""); force_slope = 1; forced_slope = atof(a[n]); fprintf(stderr, " setting chirp slope to %f \n", forced_slope); } else if (!strcmp(a[n], "-fd1")) { n++; if (n == na) die(" no option after -fd1!\n", ""); prm->fd1 = atof(a[n]); dopp = 0; fprintf(stderr, " setting fd1 to %f \n", prm->fd1); } else if (!strcmp(a[n], "-chirp_ext")) { n++; if (n == na) die(" no option after -chirp_ext!\n", ""); prm->chirp_ext = atoi(a[n]); fprintf(stderr, " setting chirp extent to %d \n", prm->chirp_ext); } else if (!strcmp(a[n], "-nrows")) { n++; if (n == na) die(" no option after -nrows!\n", ""); prm->nrows = atoi(a[n]); fprintf(stderr, " setting nrows to %d \n", prm->nrows); } else if (!strcmp(a[n], "-nodopp")) { dopp = 0; prm->fd1 = prm->fdd1 = prm->fddd1 = 0.0; fprintf(stderr, " no doppler calculation (sets to zero!) \n"); } else if (!strcmp(a[n], "-quad")) { quad_pol = 1; fprintf(stderr, " quad pol data: divide PRF by 2; defining chirp_slope) \n"); } else if (!strncmp(a[n], "-debug", 2)) { verbose = debug = 1; fprintf(stderr, " debug and verbose output \n"); } else if (!strncmp(a[n], "-V", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else if (!strncmp(a[n], "-v", 1)) { verbose = 1; fprintf(stderr, " verbose output \n"); } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } } GMTSAR_V5.7/.svn/pristine/b1/b1c0bc9694820c30b6477fa37cabec8bc6c5728f.svn-base000444 015705 000000 00000001323 13505462013 026021 0ustar00sandwellwheel000000 000000 /* program to test the fft shift routine */ #include "../../../include/soi.h" #include "../../../include/siocomplex.h" #include void main() { int k,nd=1024; fcomplex *datai, *datao; double arg; datai = (fcomplex *) malloc(nd*sizeof(fcomplex)); datao = (fcomplex *) malloc(nd*sizeof(fcomplex)); /* fill the data array with a gaussian function */ for (k=0; k #include #include #include #include #include #include #if defined(WIN32) && defined(_DEBUG) #include #endif /* if defined(WIN32) && defined(_DEBUG) */ //#include int dump_data(EPR_ELogLevel log_level, const char *infile, const char *outfile, int pixflag, unsigned int l0, unsigned int lN, unsigned int p0, unsigned int pN); int main(int argc, char **argv) { int status = 0; // ulong l0; // ulong lN; // ulong p0; // ulong pN; unsigned int l0 = 0; // MA due to difference between 32-bit/64-bit data // structure: define typedef like Doris see constant.h unsigned int lN = 0; unsigned int p0 = 0; unsigned int pN = 0; const char *infile; const char *outfile; int pixflag = 0; /* handle input */ printf("argc: %d\n", argc); if (argc != 3 && argc != 7) { printf("Usage: envisat_dump_data envisat-product outputfile [l0 lN p0 pN]\n"); printf(" where envisat-product is the input filename\n"); printf(" outputfile is the output filename\n"); printf(" l0 is the first azimuth line (starting at 1)\n"); printf(" lN is the last azimuth line\n"); printf(" p0 is the first range pixel (starting at 1)\n"); printf(" pN is the last range pixel\n"); printf("Example:\n"); printf(" envisat_dump_data " "ASA_IMS_1PNDPA20021025_175208_000000162010_00356_03416_0005.N1 " "crop.out 0 10 0 100\n\n"); return 1; } infile = argv[1]; outfile = argv[2]; printf("infile: %s\n", infile); printf("outfile: %s\n", outfile); if (argc == 7) { status = sscanf(argv[3], "%u", &l0); status = sscanf(argv[4], "%u", &lN); status = sscanf(argv[5], "%u", &p0); status = sscanf(argv[6], "%u", &pN); printf("sscanf l0: %f\n", (float)l0); printf("sscanf lN: %f\n", (float)lN); printf("sscanf p0: %f\n", (float)p0); printf("sscanf pN: %f\n", (float)pN); // printf("sscanf lN: %s\n", typeid(lN)); } if (argc == 3) pixflag = 1; return dump_data(e_log_info, infile, outfile, pixflag, l0, lN, p0, pN); } int dump_data(EPR_ELogLevel log_level, const char *infile, const char *outfile, int pixflag, unsigned int l0, unsigned int lN, unsigned int p0, unsigned int pN) { FILE *outstream; EPR_SProductId *product_id; EPR_SDatasetId *MAIN_PROC_PM_ID; EPR_SDatasetId *MDS1; EPR_SRecord *rec1; EPR_SRecord *rec5; EPR_SField numlines_field; EPR_SField numpixels_field; EPR_SField line_field; ulong numlines; ulong numberoflines; ulong numpixels; int cnt; int x, y; /* loop counter go upto 25.000 or so */ short realpart_short; /* written to output file */ short imagpart_short; /* written to output file */ int status; /* Initialize the API. Set log-level to DEBUG and use default log-output * (stdout) */ epr_init_api(log_level, epr_log_message, NULL); /* Open the product; an argument is a path to product data file */ /* PRODUCT dataset record field element */ product_id = epr_open_product(infile); /* product DATASET record field element */ MAIN_PROC_PM_ID = epr_get_dataset_id(product_id, "MAIN_PROCESSING_PARAMS_ADS"); MDS1 = epr_get_dataset_id(product_id, "MDS1"); /* product dataset RECORD field element */ rec1 = epr_read_record(MAIN_PROC_PM_ID, 0, NULL); /* product dataset record FIELD element */ numlines_field = *(epr_get_field(rec1, "num_output_lines")); numpixels_field = *(epr_get_field(rec1, "num_samples_per_line")); /* epr_free_record(rec1); */ epr_print_field(&numlines_field, stdout); epr_print_field(&numpixels_field, stdout); numlines = epr_get_field_elem_as_uint(&numlines_field, 0); numpixels = epr_get_field_elem_as_uint(&numpixels_field, 0); if (pixflag) { l0 = 1; lN = numlines; p0 = 1; pN = numpixels; } /* loop over data record to get data and dump it to file */ numberoflines = epr_get_num_records(MDS1); if (log_level == e_log_debug) { printf("numberoflines: %f\n", (float)numberoflines); printf("numlines: %f\n", (float)numlines); printf("numpixels: %f\n", (float)numpixels); printf("l0: %f\n", (float)l0); printf("lN: %f\n", (float)lN); printf("p0: %f\n", (float)p0); printf("pN: %f\n", (float)pN); } /* check if number of records indeed equals the number of lines */ if (numberoflines != numlines) { printf("numlines not equal in check, ASAR format error?."); return 1; } /* --- Check if input as acceptable ---------------------------- */ if (l0 < 1) { printf("l0<1 not allowed. first line is 1 not 0.\n"); return 1; } if (p0 < 1) { printf("p0<1 not allowed. first line is 1 not 0.\n"); return 1; } if (lN > numlines) { printf("lN>numlines not allowed.\n"); return 1; } if (pN > numpixels) { printf("pN>numpixels not allowed.\n"); return 1; } /* --- read in whole line of cpx data -------------------------- */ outstream = fopen(outfile, "wb"); for (y = l0; y <= lN; y++) { rec5 = epr_read_record(MDS1, y - 1, NULL); line_field = *(epr_get_field(rec5, "proc_data")); cnt = 2 * (p0 - 1); /* p0 starts at 1 for first element (BUGFIX!) */ /* write out selected pixels */ for (x = p0; x <= pN; x++) { realpart_short = epr_get_field_elem_as_short(&line_field, cnt); cnt++; imagpart_short = epr_get_field_elem_as_short(&line_field, cnt); cnt++; status = fwrite(&realpart_short, 2, 1, outstream); if (status != 1 && log_level == e_log_debug) fprintf(stderr, "fwrite could not write to disk?"); status = fwrite(&imagpart_short, 2, 1, outstream); if (status != 1 && log_level == e_log_debug) fprintf(stderr, "fwrite could not write to disk?"); } /* this program seemed to fill all memory for some reason? try to free it */ epr_free_record(rec5); } fclose(outstream); epr_close_product(product_id); /* Closes product reader API, release all allocated resources */ epr_close_api(); return 0; } GMTSAR_V5.7/.svn/pristine/a7/a7bc202701e9f33b2967b3df216052708433105f.svn-base000444 015705 000000 00000003622 13505462014 025272 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine used to call and initialize veclib FFT * * in a Mac OS X computer. * ************************************************************************/ /************************************************************************ * Creator: Robert Kern (Scripps Institution of Oceanography * * Date : 12/2005 * ************************************************************************/ /************************************************************************ * Modification history: * * * * DATE * ************************************************************************/ #include #include #include int cfft1d_(int *np, DSPComplex *c, int *dir); void cfft1d_cleanup_(); static int n = 0; static int log2n; static FFTSetup setup; static DSPSplitComplex d; static float scale; static int inited = 0; int cfft1d_(int *np, DSPComplex *c, int *dir) { if (*dir == 0) return; if (n != *np) { cfft1d_cleanup_(); n = *np; for (log2n = 1; (1 << log2n) < *np; log2n++) { } d.realp = (float *)malloc(n * sizeof(float)); d.imagp = (float *)malloc(n * sizeof(float)); setup = vDSP_create_fftsetup(log2n, 0); scale = 1.0 / n; inited = 1; } vDSP_ctoz(c, 2, &d, 1, n); vDSP_fft_zip(setup, &d, 1, log2n, (*dir == -1 ? FFT_FORWARD : FFT_INVERSE)); vDSP_ztoc(&d, 1, c, 2, n); if (*dir == 1) { vDSP_vsmul((float *)c, 1, &scale, (float *)c, 1, 2 * n); } } void cfft1d_cleanup_() { if (inited) { free(d.realp); free(d.imagp); vDSP_destroy_fftsetup(setup); inited = 0; } } GMTSAR_V5.7/.svn/pristine/ba/ba82e536d56a04404d0373d1a47d95710429b245.svn-base000444 015705 000000 00000033102 13505462014 025344 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define SARLEADER_FDR_BINARY_WCS \ "*********** SAR FDR BINARY **********\n" \ "record_seq_no ==> %1d\n" \ "record_subtype_code1 ==> %1x\n" \ "record_type_code1 ==> %1x\n" \ "record_subtype_code2 ==> %1x\n" \ "record_subtype_code3 ==> %1x\n" \ "record_length ==> %1d\n\n" #define SARLEADER_FDR_BINARY_RVL(SP) \ (SP)->record_seq_no, (SP)->record_subtype_code1, (SP)->record_type_code1, (SP)->record_subtype_code2, \ (SP)->record_subtype_code3, (SP)->record_length struct sarleader_binary { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; #define SARLEADER_FDR_FIXSEG_RCS "%2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c" #define SARLEADER_FDR_FIXSEG_RVL(SP) \ (SP)->A_E_flag, (SP)->blank_2, (SP)->for_con_doc, (SP)->for_con_doc_rev_level, (SP)->file_des_rev_level, (SP)->softw_rel, \ (SP)->file_number, (SP)->file_name, (SP)->rec_seq_loc_type_flag, (SP)->seq_number_loc, (SP)->seq_number_field_length, \ (SP)->rec_code_loc_type_flag, (SP)->rec_code_loc, (SP)->rec_code_field_length, (SP)->rec_len_loc_type_flag, \ (SP)->rec_len_loc, (SP)->rec_len_field_length, (SP)->reserved_4, (SP)->reserved_segment struct sarleader_fdr_fixseg { char A_E_flag[2]; /* 13 */ char blank_2[2]; /* 15 */ char for_con_doc[12]; /* 17 */ char for_con_doc_rev_level[2]; /* 29 */ char file_des_rev_level[2]; /* 31 */ char softw_rel[12]; /* 33 */ char file_number[4]; /* 45 */ char file_name[16]; /* 49 */ char rec_seq_loc_type_flag[4]; /* 65 */ char seq_number_loc[8]; /* 69 */ char seq_number_field_length[4]; /* 77 */ char rec_code_loc_type_flag[4]; /* 81 */ char rec_code_loc[8]; /* 85 */ char rec_code_field_length[4]; /* 93 */ char rec_len_loc_type_flag[4]; /* 97 */ char rec_len_loc[8]; /* 101 */ char rec_len_field_length[4]; /* 109 */ char reserved_4[4]; /* 113 */ char reserved_segment[64]; /* 117 */ }; #define SARLEADER_FDR_VARSEG_RCS \ "%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%" \ "6c%6c%6c%6c%6c%6c%60c%6c%6c%288c" #define SARLEADER_FDR_VARSEG_RVL(SP) \ (SP)->n_data_set_summ_rec, (SP)->data_set_summ_rec_len, (SP)->n_map_projec_rec, (SP)->map_projec_rec_len, \ (SP)->n_plat_pos_data_rec, (SP)->plat_pos_data_rec_len, (SP)->n_att_data_rec, (SP)->att_data_rec_len, \ (SP)->n_rad_data_rec, (SP)->rad_data_rec_len, (SP)->n_rad_comp_rec, (SP)->rad_comp_rec_len, (SP)->n_data_qua_summ_rec, \ (SP)->data_qua_summ_rec_len, (SP)->n_data_hist_rec, (SP)->data_hist_rec_len, (SP)->n_range_spectra_rec, \ (SP)->range_spectra_rec_len, (SP)->n_DEM_des_rec, (SP)->DEM_des_rec_len, (SP)->n_radar_par_update_rec, \ (SP)->radar_par_update_rec_len, (SP)->n_annotation_data_rec, (SP)->annotation_data_rec_len, (SP)->n_detailed_proc_rec, \ (SP)->detailed_proc_rec_len, (SP)->n_cal_rec, (SP)->cal_rec_len, (SP)->n_GCP_rec, (SP)->GCP_rec_len, (SP)->spare_60, \ (SP)->n_facility_data_rec, (SP)->facility_data_rec_len, (SP)->blanks_288 struct sarleader_fdr_varseg { char n_data_set_summ_rec[6]; /* 181-186 I6*/ char data_set_summ_rec_len[6]; /* 187-192 I6*/ char n_map_projec_rec[6]; /* 193-198 I6*/ char map_projec_rec_len[6]; /* 199-204 I6*/ char n_plat_pos_data_rec[6]; /* 205-210 I6*/ char plat_pos_data_rec_len[6]; /* 211-216 I6*/ char n_att_data_rec[6]; /* 217-222 I6*/ char att_data_rec_len[6]; /* 223-228 I6*/ char n_rad_data_rec[6]; /* 229-234 I6*/ char rad_data_rec_len[6]; /* 235-240 I6*/ char n_rad_comp_rec[6]; /* 241-246 I6*/ char rad_comp_rec_len[6]; /* 247-252 I6*/ char n_data_qua_summ_rec[6]; /* 253-258 I6*/ char data_qua_summ_rec_len[6]; /* 259-264 I6*/ char n_data_hist_rec[6]; /* 265-270 I6*/ char data_hist_rec_len[6]; /* 271-276 I6*/ char n_range_spectra_rec[6]; /* 277-282 I6*/ char range_spectra_rec_len[6]; /* 283-288 I6*/ char n_DEM_des_rec[6]; /* 289-294 I6*/ char DEM_des_rec_len[6]; /* 295-300 I6*/ char n_radar_par_update_rec[6]; /* 301-306 I6*/ char radar_par_update_rec_len[6]; /* 307-312 I6*/ char n_annotation_data_rec[6]; /* 313-318 I6*/ char annotation_data_rec_len[6]; /* 319-324 I6*/ char n_detailed_proc_rec[6]; /* 325-330 I6*/ char detailed_proc_rec_len[6]; /* 331-336 I6*/ char n_cal_rec[6]; /* 337-342 I6*/ char cal_rec_len[6]; /* 343-348 I6*/ char n_GCP_rec[6]; /* 349-354 I6*/ char GCP_rec_len[6]; /* 355-360 I6*/ char spare_60[60]; /* 361-420 I6*/ char n_facility_data_rec[6]; /* 421-426 I6*/ char facility_data_rec_len[6]; /* 427-432 I6*/ char blanks_288[288]; /* 433-720 A80*/ }; #define SARLEADER_FDR_FIXSEG_WCS \ "*********** SAR FDR FIXED SEGMENT ***********\n" \ "A_E_flag ==> %.2s\n" \ "blank_2 ==> %.2s\n" \ "for_con_doc ==> %.12s\n" \ "for_con_doc_rev_level ==> %.2s\n" \ "file_des_rev_level ==> %.2s\n" \ "softw_rel ==> %.12s\n" \ "file_number ==> %.4s\n" \ "file_name ==> %.16s\n" \ "rec_seq_loc_type_flag ==> %.4s\n" \ "seq_number_loc ==> %.8s\n" \ "seq_number_field_length ==> %.4s\n" \ "rec_code_loc_type_flag ==> %.4s\n" \ "rec_code_loc ==> %.8s\n" \ "rec_code_field_length ==> %.4s\n" \ "rec_len_loc_type_flag ==> %.4s\n" \ "rec_len_loc ==> %.8s\n" \ "rec_len_field_length ==> %.4s\n" \ "reserved_4 ==> %.4s\n" \ "reserved_segment ==> %.64s\n\n" #define SARLEADER_FDR_VARSEG_WCS \ "*********** SAR FDR VARIABLE SEG ***********\n" \ "n_data_set_summ_rec ==> %.6s\n" \ "data_set_summ_rec_len ==> %.6s\n" \ "n_map_projec_rec ==> %.6s\n" \ "map_projec_rec_len ==> %.6s\n" \ "n_plat_pos_data_rec ==> %.6s\n" \ "plat_pos_data_rec_len ==> %.6s\n" \ "n_att_data_rec ==> %.6s\n" \ "att_data_rec_len ==> %.6s\n" \ "n_rad_data_rec ==> %.6s\n" \ "rad_data_rec_len ==> %.6s\n" \ "n_rad_comp_rec ==> %.6s\n" \ "rad_comp_rec_len ==> %.6s\n" \ "n_data_qua_summ_rec ==> %.6s\n" \ "data_qua_summ_rec_len ==> %.6s\n" \ "n_data_hist_rec ==> %.6s\n" \ "data_hist_rec_len ==> %.6s\n" \ "n_range_spectra_rec ==> %.6s\n" \ "range_spectra_rec_len ==> %.6s\n" \ "n_DEM_des_rec ==> %.6s\n" \ "DEM_des_rec_len ==> %.6s\n" \ "n_radar_par_update_rec ==> %.6s\n" \ "radar_par_update_rec_len ==> %.6s\n" \ "n_annotation_data_rec ==> %.6s\n" \ "annotation_data_rec_len ==> %.6s\n" \ "n_detailed_proc_rec ==> %.6s\n" \ "detailed_proc_rec_len ==> %.6s\n" \ "n_cal_rec ==> %.6s\n" \ "cal_rec_len ==> %.6s\n" \ "n_GCP_rec ==> %.6s\n" \ "GCP_rec_len ==> %.6s\n" \ "spare_60 ==> %.60s\n" \ "n_facility_data_rec ==> %.6s\n" \ "facility_data_rec_len ==> %.6s\n" \ "blanks_288 ==> %.288s\n\n" GMTSAR_V5.7/.svn/pristine/d4/d48a2322736c9a687dd56cc8f008543c834698e1.svn-base000444 015705 000000 00000000527 13505462014 025420 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = test_shift CSRCS = test_shift.c \ shift.c OS = `arch` OBJS = $(CSRCS:.c=.o) INCLUDES = -I../../include CLIBS = -L../../lib/$(OS) -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) install: $(INSTALL) $(PROG) ../bin/$(OS) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/d3/d3215049e60f2362b74598bd028fabc9b19873d0.svn-base000444 015705 000000 00000006337 13505462014 025462 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Calculate Doppler centroid using the method of Masden 1989 * * Doppler variations with range are small for ALOS and not calculated * *******************************************************************************/ /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" void calc_dop(struct PRM *prm) { unsigned char *indata; int i, j; long n; float *xr, *ac, *sg; double sumd; fcomplex *ai, *bi, *ab; fcomplex ctmp; FILE *fin; fprintf(stderr, ".... calculating doppler for %s\n", prm->input_file); fin = fopen(prm->input_file, "r"); if (fin == NULL) die("can't open", prm->input_file); /* allocate memory */ indata = (unsigned char *)malloc(prm->bytes_per_line * sizeof(unsigned char)); n = prm->good_bytes / 2 - prm->first_sample; xr = (float *)malloc(n * sizeof(float)); ac = (float *)malloc(n * sizeof(float)); sg = (float *)malloc(n * sizeof(float)); ai = (fcomplex *)malloc(n * sizeof(fcomplex)); bi = (fcomplex *)malloc(n * sizeof(fcomplex)); ab = (fcomplex *)malloc(2 * n * sizeof(fcomplex)); /* read a line of data from fin (input file, chars) to ai (complex floats) */ fread(indata, sizeof(unsigned char), prm->bytes_per_line, fin); for (i = 0; i < n; i++) read_data(ai, indata, i, prm); /* read remaining lines and set ai = bi */ /* inefficient; could put loops inside each other */ for (i = prm->first_line; i < prm->num_lines - 1; i++) { if (i / 2000 == i / 2000.0) fprintf(stderr, " Working on line %d \n", i); fread(indata, sizeof(unsigned char), prm->bytes_per_line, fin); for (j = 0; j < n; j++) { read_data(bi, indata, j, prm); ctmp = Cmul(Conjg(ai[j]), bi[j]); ab[j].r = ab[j].r + ctmp.r; ab[j].i = ab[j].i + ctmp.i; ai[j].r = bi[j].r; ai[j].i = bi[j].i; } } /* compute the Doppler as a function of range */ sumd = 0.0; for (j = 0; j < n; j++) { ac[j] = atan2f(ab[j].i, ab[j].r) / (2.0 * M_PI); sumd = sumd + ac[j]; } /* now either output the average Doppler or a linear trend fit */ prm->fd1 = (sumd / (1.0 * n)) * prm->prf; prm->fdd1 = 0.0 * prm->prf; prm->fddd1 = 0.0 * prm->prf; fclose(fin); free(xr); free(ac); free(sg); free(ai); free(bi); free(ab); } /*---------------------------------------------------*/ void read_data(fcomplex *data, unsigned char *indata, int i, struct PRM *prm) { int ii; ii = i + prm->first_sample; if ((((int)indata[2 * ii]) != NULL_DATA) && (((int)indata[2 * ii + 1]) != NULL_DATA)) { data[i].r = ((float)indata[2 * ii]) - prm->xmi; data[i].i = ((float)indata[2 * ii + 1]) - prm->xmq; } else { data[i].r = 0.0; data[i].i = 0.0; } } /*---------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/d3/d3cafe1091710dc4b976da53325e25a848b24e06.svn-base000444 015705 000000 00000007205 13505462013 025577 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Matt WEI Feb 1 2010 # modified by Xiaopeng Feb 9 2010 # modified by E. Fielding, DST, XT to add TSX data Jan 10 2014 #======================================================================= # script to make topography for interferograms # The USGS elevations are height above WGS84 so this is OK. # alias rm 'rm -f' unset noclobber # if ($#argv < 2) then echo " " echo "Usage: dem2topo_ra.csh master.PRM dem.grd" echo " " echo " Note: Works for TSX,ALOS,ERS,ENVISAT" echo " " exit 1 endif # # local variables # set scale = -JX7i if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # #========================Mosaic topo data=============================== #----------------------------------------------------------------------- # #------------------------Get bounds in radar coordinates---------------- set XMAX = `grep num_rng_bins $1 | awk '{print $3}'` set yvalid = `grep num_valid_az $1 | awk '{print $3}'` set num_patch = `grep num_patches $1 | awk '{print $3}'` set YMAX = `echo "$yvalid $num_patch" | awk '{print $1*$2}'` set SC = `grep SC_identity $1 | awk '{print $3}'` set PRF = `grep PRF *.PRM | awk 'NR == 1 {printf("%d", $3)}'` # # look for range sampling rate # set rng_samp_rate = `grep rng_samp_rate $1 | awk 'NR == 1 {printf("%d", $3)}'` # # set the range spacing of simulation in units of image range pixel size # if($rng_samp_rate > 0 && $rng_samp_rate < 25000000) then set rng = 1 else if($rng_samp_rate >= 25000000 && $rng_samp_rate < 72000000 || $SC == 7 ) then set rng = 2 else if($rng_samp_rate >= 72000000) then set rng = 4 else echo "range sampling rate out of bounds" exit 0 endif echo " range decimation is: " $rng # if($SC == 10) then gmt grd2xyz --FORMAT_FLOAT_OUT=%lf $2 -s | SAT_llt2rat $1 1 -bod > trans.dat else gmt grd2xyz --FORMAT_FLOAT_OUT=%lf $2 -s | SAT_llt2rat $1 0 -bod > trans.dat endif # # use an azimuth spacing of 2 for low PRF data such as S1 TOPS # if ($PRF < 1000) then gmt gmtconvert trans.dat -o0,1,2 -bi5d -bo3d | gmt blockmedian -R0/$XMAX/0/$YMAX -I$rng/2 -bi3d -bo3d -r $V > temp.rat gmt surface temp.rat -R0/$XMAX/0/$YMAX -I$rng/2 -bi3d -T.50 -N1000 -Gpixel.grd -r -Q >& tmp set RR = `grep Hint tmp | head -1 | awk '{for(i=1;i<=NF;i++) print $i}' | grep /` if ("x$RR" == "x") then gmt surface temp.rat -R0/$XMAX/0/$YMAX -I$rng/2 -bi3d -T.50 -N1000 -Gpixel.grd -r $V else gmt surface temp.rat $RR -I$rng/2 -bi3d -T.50 -N1000 -Gpixel.grd -r $V gmt grdcut pixel.grd -R0/$XMAX/0/$YMAX -Gtmp.grd mv tmp.grd pixel.grd endif else gmt gmtconvert trans.dat -o0,1,2 -bi5d -bo3d | gmt blockmedian -R0/$XMAX/0/$YMAX -I$rng/4 -bi3d -bo3d -r $V > temp.rat gmt surface temp.rat -R0/$XMAX/0/$YMAX -I$rng/4 -bi3d -T.50 -N1000 -Gpixel.grd -r -Q >& tmp set RR = `grep Hint tmp | head -1 | awk '{for(i=1;i<=NF;i++) print $i}' | grep /` if ("x$RR" == "x") then gmt surface temp.rat -R0/$XMAX/0/$YMAX -I$rng/4 -bi3d -T.50 -N1000 -Gpixel.grd -r $V else gmt surface temp.rat $RR -I$rng/4 -bi3d -T.50 -N1000 -Gpixel.grd -r $V gmt grdcut pixel.grd -R0/$XMAX/0/$YMAX -Gtmp.grd mv tmp.grd pixel.grd endif endif # # flip top to bottom for both ascending and descending passes # gmt grdmath pixel.grd FLIPUD = topo_ra.grd # # plotting # gmt grd2cpt topo_ra.grd -Cgray $V -Z > topo_ra.cpt gmt grdimage topo_ra.grd $scale -P -Ctopo_ra.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen $V -K > topo_ra.ps gmt psscale -Rtopo_ra.grd -J -DJTC+w5i/0.2i+h -Ctopo_ra.cpt -Bxaf -By+lm -O >> topo_ra.ps gmt psconvert -Tf -P -Z topo_ra.ps echo "Topo range/azimuth map: topo_ra.pdf" # # clean up # rm pixel.grd temp.rat dem.xyz tmp rm topo_ra.cpt GMTSAR_V5.7/.svn/pristine/bf/bf5ea1b833e937ffd1839ca6fb2829a6d53b3d61.svn-base000444 015705 000000 00000034264 13505462014 026132 0ustar00sandwellwheel000000 000000 /**************************************************************************** * Program to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/04/09 - update the range sampling rate from new PRM file to solve * * confict of rng_samp_rate between LED file and PRM file in FBD mode. * * 04/28/10 - modified to work with envisat - M.Wei * ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 char *USAGE = " \n Usage: " "SAT_llt2rat master.PRM [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - range, azimuth, lon, lat, elevation [ASCII " "default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: SAT_llt2rat master.PRM < topo.llt > topo.ratll \n"; /* int parse_ALOS_llt2rat(char **, char *); */ void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); int main(int argc, char **argv) { FILE *fprm1; int otype; double rln, rlt, rht, dr, t1, t2, tm; double ts, rng, thet, relp, telp; double xp[3]; double xt[3]; double rp[3]; double dd[5]; /* dummy for output double precision */ float ds[5]; /* dummy for output single precision */ double r0, rf, a0, af; double rad = PI / 180.; double fll, rdd, daa, drr; int j, nrec, npad = 8000; int goldop(); int stai, endi, midi; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; char name[128], value[128]; double rsr; FILE *ldrfile; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); /* Make sure usage is correct and files can be opened */ if (argc < 2 || argc > 3) { fprintf(stderr, "%s\n", USAGE); exit(-1); } /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 3) { if (!strcmp(argv[2], "-bos")) otype = 2; else if (!strcmp(argv[2], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* dubugging fprintf(stderr,"debug\n"); fprintf(stderr,"%s\n",prm.led_file); fprintf(stderr,"%lf\n",prm.fs); fprintf(stderr,"%d\n",prm.num_rng_bins); fprintf(stderr,"%d\n",prm.num_valid_az); fprintf(stderr,"%lf\n",prm.rc); fprintf(stderr,"%lf\n",prm.ra); fprintf(stderr,"%lf\n",prm.prf); fprintf(stderr,"%lf\n",prm.RE); fprintf(stderr,"%lf\n",prm.sub_int_a); fprintf(stderr,"%lf\n",prm.SC_clock_start); fprintf(stderr,"%lf\n",prm.clock_start); fprintf(stderr,"%d\n",prm.nrows); fprintf(stderr,"%d\n",prm.num_patches); fprintf(stderr,"%lf\n",prm.near_range); fprintf(stderr,"rshift = %d\n",prm.rshift); fprintf(stderr,"sub_int_r = %lf\n",prm.sub_int_r); fprintf(stderr,"chirp_ext = %d\n",prm.chirp_ext); */ fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ENVI_orb(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ /* fprintf(stderr,"ts=%lf,t1=%lf,nrec=%d\n",ts,t1,nrec); */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* look at the orb_pos for(i=0;i<4;i++) { for (j=0;j 180.) rp[1] = rp[1] - 360.; xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); xt[0] = rng; xt[1] = tm; /* fprintf(stderr,"rng = %f, tm = %f",rng,tm); */ /* compute the range and azimuth in pixel space and correct for an azimuth * bias*/ xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a); /* For Envisat correct for biases based on Pinon reflector analysis */ if (prm.SC_identity == 4) { xt[0] = xt[0] + 8.4; xt[1] = xt[1] + 4; } /* compute the azimuth and range correction if the Doppler is not zero */ if (prm.fd1 != 0.) { rdd = (prm.vel * prm.vel) / rng; daa = -0.5 * (prm.lambda * prm.fd1) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; /*fprintf(stderr," rng, rdd, daa, drr %f %f %f %f \n",rng, rdd, daa, drr); */ xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } /* fprintf(stderr,"xt[0] = %f\n",xt[0]); */ if (xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) continue; /* fprintf(stderr,"%f %f %f %f %f \n",xt[0],xt[1],rp[2],rp[1],rp[0]); */ if (otype == 1) { fprintf(stdout, "%f %f %f %f %f \n", xt[0], xt[1], rp[2], rp[1], rp[0]); } else if (otype == 2) { ds[0] = (float)xt[0]; ds[1] = (float)xt[1]; ds[2] = (float)rp[2]; ds[3] = (float)rp[1]; ds[4] = (float)rp[0]; fwrite(ds, sizeof(float), 5, stdout); } else if (otype == 3) { dd[0] = xt[0]; dd[1] = xt[1]; dd[2] = rp[2]; dd[3] = rp[1]; dd[4] = rp[0]; fwrite(dd, sizeof(double), 5, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/.svn/pristine/bf/bf36ae92da9f6511a7b95db49f9a789c7d239b9d.svn-base000444 015705 000000 00000001462 13505462014 026152 0ustar00sandwellwheel000000 000000 /************************************************************************ * Creator: David T. Sandwell Scripps Institution of Oceanography * * Date : 09/12/93 Copyright, David T. Sandwell * ************************************************************************/ void swap16(in, out, n) /* Swaps 2 bytes within each 16-bit word of array in. */ char *in; /* Input array */ char *out; /* Output array */ int n; /* # of short integers to swap */ { register char *ip, *op; /* Local register variables */ if (n > 0) /* Make sure n is positive */ { ip = in + 2; /* Load the pointers into temporary registers */ op = out; while (n--) { *op++ = *--ip; /* Do the swap */ *op++ = *--ip; ip += 4; } } } GMTSAR_V5.7/.svn/pristine/bf/bf8162daa191406449e2b6334e068b962f9e70da.svn-base000444 015705 000000 00000000601 13505462013 025606 0ustar00sandwellwheel000000 000000 #include "update_PRM.h" #include int main(int argc, char **argv) { char *szString = NULL; if (argc != 3 && argc != 4) { printf("Usage: get_PRM file.PRM param \n\nExample: get_PRM " "IMG-HH-ALPSRP049040660-H1.0__A.PRM rshift\n"); return 1; } szString = get_PRM(argv[1], argv[2]); printf("%s\n", szString); if (szString) free(szString); return 0; } GMTSAR_V5.7/.svn/pristine/bf/bf78161da22cca8dbca27f26aa2113b0e23bb802.svn-base000444 015705 000000 00000013041 13505462013 026117 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # # Xiaohua(Eric) XU, July 7, 2016 # # Script for merging 3 subswaths TOPS interferograms and then unwrap and geocode. # if ($#argv != 2) then echo "" echo "Usage: merge_unwrap_geocode_tops.csh inputfile config_file" echo "" echo "Note: Inputfiles should be as following:" echo "" echo " Swath1_Path:Swath1_master.PRM:Swath1_repeat.PRM" echo " Swath2_Path:Swath2_master.PRM:Swath2_repeat.PRM" echo " Swath3_Path:Swath3_master.PRM:Swath3_repeat.PRM" echo " (Use the repeat PRM which contains the shift information.)" echo " e.g. ../F1/intf/2015016_2015030/:S1A20151012_134357_F1.PRM" echo "" echo " Make sure under each path, the processed phasefilt.grd, corr.grd and mask.grd exist." echo " Also make sure the dem.grd is linked. " echo "" echo " config_file is the same one used for processing." echo "" echo "Example: merge_unwrap_geocode_tops.csh filelist batch.config" echo "" exit 1 endif if (-f tmp_phaselist) rm tmp_phaselist if (-f tmp_corrlist) rm tmp_corrlist if (-f tmp_masklist) rm tmp_masklist if (! -f dem.grd ) then echo "Please link dem.grd to current folder" exit 1 endif set region_cut = `grep region_cut $2 | awk '{print $3}'` # Creating inputfiles for merging foreach line (`awk '{print $0}' $1`) set now_dir = `pwd` set pth = `echo $line | awk -F: '{print $1}'` set prm = `echo $line | awk -F: '{print $2}'` set prm2 = `echo $line | awk -F: '{print $3}'` cd $pth set rshift = `grep rshift $prm2 | tail -1 | awk '{print $3}'` set fs1 = `grep first_sample $prm | awk '{print $3}'` set fs2 = `grep first_sample $prm2 | awk '{print $3}'` cp $prm tmp.PRM if ($fs2 > $fs1) then update_PRM tmp.PRM first_sample $fs2 endif update_PRM tmp.PRM rshift $rshift cd $now_dir echo $pth"tmp.PRM:"$pth"phasefilt.grd" >> tmp_phaselist echo $pth"tmp.PRM:"$pth"corr.grd" >> tmp_corrlist echo $pth"tmp.PRM:"$pth"mask.grd" >> tmp_masklist end set pth = `awk -F: 'NR==1 {print $1}' $1` set stem = `awk -F: 'NR==1 {print $2}' $1 | awk -F"." '{print $1}'` #echo $pth $stem echo "" echo "Merging START" merge_swath tmp_phaselist phasefilt.grd $stem merge_swath tmp_corrlist corr.grd merge_swath tmp_masklist mask.grd echo "Merging END" echo "" set iono = `grep correct_iono $2 | awk '{print $3}'` set skip_iono = `grep iono_skip_est $2 | awk '{print $3}'` if ($iono != 0 & $skip_iono == 0) then if (! -f ph_iono_orig.grd) then echo "Need ph_iono_orig.grd to correct ionosphere ..." else echo "Correcting ionosphere ..." gmt grdsample ph_iono_orig.grd -Rphasefilt.grd -Gtmp.grd gmt grdmath phasefilt.grd tmp.grd SUB PI ADD 2 PI MUL MOD PI SUB = tmp2.grd mv phasefilt.grd phasefilt_orig.grd mv tmp2.grd phasefilt.grd rm tmp.grd endif endif # This step is essential, cut the DEM so it can run faster. if (! -f trans.dat) then set led = `grep led_file $pth$stem".PRM" | awk '{print $3}'` cp $pth$led . echo "Recomputing the projection LUT..." # Need to compute the geocoding matrix with supermaster.PRM with rshift set to 0 set rshift = `grep rshift $stem".PRM" | tail -1 | awk '{print $3}'` update_PRM $stem".PRM" rshift 0 gmt grd2xyz --FORMAT_FLOAT_OUT=%lf dem.grd -s | SAT_llt2rat $stem".PRM" 1 -bod > trans.dat # Set rshift back for other usage update_PRM $stem".PRM" rshift $rshift endif # Read in parameters set threshold_snaphu = `grep threshold_snaphu $2 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $2 | awk '{print $3}'` set region_cut = `grep region_cut $2 | awk '{print $3}'` set switch_land = `grep switch_land $2 | awk '{print $3}'` set defomax = `grep defomax $2 | awk '{print $3}'` set near_interp = `grep near_interp $2 | awk '{print $3}'` # Unwrapping if ($region_cut == "") then set region_cut = `gmt grdinfo phasefilt.grd -I- | cut -c3-20` endif if ($threshold_snaphu != 0 ) then if ($switch_land == 1) then if (! -f landmask_ra.grd) then landmask.csh $region_cut endif endif echo "" echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" else echo "" echo "SKIP UNWRAP PHASE" endif # Geocoding #if (-f raln.grd) rm raln.grd #if (-f ralt.grd) rm ralt.grd if ($threshold_geocode != 0) then echo "" echo "GEOCODE-START" proj_ra2ll.csh trans.dat phasefilt.grd phasefilt_ll.grd proj_ra2ll.csh trans.dat corr.grd corr_ll.grd gmt makecpt -Crainbow -T-3.15/3.15/0.05 -Z > phase.cpt set BT = `gmt grdinfo -C corr.grd | awk '{print $7}'` gmt makecpt -Cgray -T0/$BT/0.05 -Z > corr.cpt grd2kml.csh phasefilt_ll phase.cpt grd2kml.csh corr_ll corr.cpt if (-f unwrap.grd) then gmt grdmath unwrap.grd mask.grd MUL = unwrap_mask.grd proj_ra2ll.csh trans.dat unwrap.grd unwrap_ll.grd proj_ra2ll.csh trans.dat unwrap_mask.grd unwrap_mask_ll.grd set BT = `gmt grdinfo -C unwrap.grd | awk '{print $7}'` set BL = `gmt grdinfo -C unwrap.grd | awk '{print $6}'` gmt makecpt -T$BL/$BT/0.5 -Z > unwrap.cpt grd2kml.csh unwrap_mask_ll unwrap.cpt grd2kml.csh unwrap_ll unwrap.cpt endif echo "GEOCODE END" endif rm tmp_phaselist tmp_corrlist tmp_masklist *.eps *.bb GMTSAR_V5.7/.svn/pristine/bf/bf08be523af1a11e870d2e69a82cc28b1dd4c58d.svn-base000444 015705 000000 00000007051 13505462014 026161 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /*------------------------------------------------------*/ /* set some defaults */ /* replaces virgin.prm */ /*------------------------------------------------------*/ void set_ALOS_defaults(struct PRM *prm) { strncpy(prm->input_file, "data.raw", 8); /* input to SAR processor */ prm->input_file[8] = '\0'; strncpy(prm->deskew, "n", 1); /* to deskew or not to deskew? */ prm->deskew[1] = '\0'; strncpy(prm->iqflip, "n", 1); /* Flip_iq */ prm->iqflip[1] = '\0'; strncpy(prm->offset_video, "n", 1); /* off_video */ prm->offset_video[1] = '\0'; strncpy(prm->srm, "n", 1); /* scnd_rng_mig */ prm->srm[1] = '\0'; prm->num_valid_az = 9216; prm->nrows = 16384; prm->first_line = 1; prm->caltone = 0.000000; prm->st_rng_bin = 1; prm->az_res = 5; prm->nlooks = 1; prm->chirp_ext = 1000; /* nextend */ prm->rhww = 1.000000; /* rng_spec_wgt */ prm->pctbw = 0.000000; /* rm_rng_band */ prm->pctbwaz = 0.000000; /* rm_az_band */ prm->rshift = 0; prm->ashift = 0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 206; prm->SC_identity = 5; prm->fs = 3.200000e+07; /* rng_samp_rate */ prm->lambda = 0.236057; prm->near_range = -1; /* use -1 as default */ prm->RE = -1; /* use -1 as default */ prm->num_patches = 1000; /* use 1000 as default */ prm->fd1 = 0.0; prm->fdd1 = 0.0; prm->fddd1 = 0.0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->SLC_scale = 1; /* use 1 as default */ } /*------------------------------------------------------*/ void print_ALOS_defaults(struct PRM *prm) { fprintf(stderr, " \n ALOS default settings *************\n\n"); fprintf(stderr, " led_file = %s \n", prm->led_file); fprintf(stderr, " input_file = %s \n", prm->input_file); fprintf(stderr, " num_valid_az = %d \n", prm->num_valid_az); fprintf(stderr, " nrows = %d \n", prm->nrows); fprintf(stderr, " first_line = %d \n", prm->first_line); fprintf(stderr, " deskew = %s \n", prm->deskew); fprintf(stderr, " caltone = %lf \n", prm->caltone); fprintf(stderr, " st_rng_bin = %d \n", prm->st_rng_bin); fprintf(stderr, " Flip_iq(iqflip) = %s \n", prm->iqflip); fprintf(stderr, " offset_video(off_vid) = %s \n", prm->offset_video); fprintf(stderr, " az_res = %lf \n", prm->az_res); fprintf(stderr, " nlooks = %d \n", prm->nlooks); fprintf(stderr, " chirp_ext(nextend) = %d \n", prm->chirp_ext); fprintf(stderr, " scnd_rng_mig(srm) = %s \n", prm->srm); fprintf(stderr, " rng_spec_wgt(rhww) = %lf \n", prm->rhww); fprintf(stderr, " rm_rng_band(pctbw) = %lf \n", prm->pctbw); fprintf(stderr, " rm_az_band(pctbwaz) = %lf \n", prm->pctbwaz); fprintf(stderr, " rshift = %d \n", prm->rshift); fprintf(stderr, " ashift = %d \n", prm->ashift); fprintf(stderr, " stretch_r = %lf \n", prm->stretch_r); fprintf(stderr, " stretch_a = %lf \n", prm->stretch_a); fprintf(stderr, " a_stretch_r = %lf \n", prm->a_stretch_r); fprintf(stderr, " a_stretch_a = %lf \n", prm->a_stretch_a); fprintf(stderr, " first_sample = %d \n", prm->first_sample); fprintf(stderr, " SC_identity = %d \n", prm->SC_identity); fprintf(stderr, " rng_samp_rate(fs) = %lf \n", prm->fs); fprintf(stderr, " near_range = %lf \n", prm->near_range); } /*------------------------------------------------------*/ /* not all variables are called the same in sio.h and the prm file changed offset_video off_video chirp_ext nextend PRM SOI.H ------------------------------- Flip_iq iqflip scnd_rng_mig srm rng_spec_wgt rhww rm_rng_band pctbw rm_az_band pctbwaz rng_samp_rate fs */ GMTSAR_V5.7/.svn/pristine/0a/0a7a9feeb8233f2fb2f062f0f69cffd05403f9a0.svn-base000444 015705 000000 00000006322 13505462013 026077 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # April 21, 1999 - David T. Sandwell # May 23, 2017 - Anders Hogrelius, updated to fully support Envisat formatted SLC data # # Script to calculate a table of parameters from master and # slave PRM files. # unset noclobber # # Modified by M.Wei to add ALOS function, 9/27/06 # if ($#argv < 2) then echo " " echo "Usage: baseline_table master.PRM slave.PRM [GMT] " echo " [GMT] creates table for pstext" echo " " echo " Output:" echo " sat_orb slave_time slave_days(1992ERS,2006ALOS) Bpl Bperp xshift yshift" echo " " exit 1 endif # # Detect if we are dealing with Envisat formatted ERS SLC data without using SC_identity # Kludge to get correct SC_identity functionality until we can correct the values throughout the chain # set ERSSLC = `echo $1|cut -c1-10` # # get the time information from the master # set MT0 = `grep SC_clock_start $1 | awk '{print $3}'` set MTF = `grep SC_clock_stop $1 | awk '{print $3}'` set MSC = `grep SC_identity $1 | awk '{print $3}'` # # get the time information from the slaver # set ST0 = `grep SC_clock_start $2 | awk '{print $3}'` set STF = `grep SC_clock_stop $2 | awk '{print $3}'` set SSC = `grep SC_identity $2 | awk '{print $3}'` # # convert the start time to days since 1992 # @ T0 = `grep SC_clock_start $2 | awk '{print $3}' | awk -F"." '{print $1}'` @ DAY = $T0 % 1000 # if ($SSC == 1 || $SSC == 2) then SAT_baseline $1 $2 > temp @ YR = $T0 / 1000 - 1992 @ YDAY = $YR * 365 + $DAY else if ($SSC == 4 || $SSC == 6) then SAT_baseline $1 $2 > temp @ YR = $T0 / 1000 - 1992 @ YDAY = $YR * 365 + $DAY else if ($SSC == 5) then SAT_baseline $1 $2 > temp @ YR1 = $T0 / 1000 if ($YR1 < 2013) then @ YR = $T0 / 1000 - 2006 else @ YR = $T0 / 1000 - 2014 endif @ YDAY = $YR * 365 + $DAY else SAT_baseline $1 $2 > temp if ($SSC == 7 || $SSC == 8) then @ YR = $T0 / 1000 - 2007 else if ($SSC == 9) then @ YR = $T0 / 1000 - 2008 else if ($SSC == 10) then @ YR = $T0 / 1000 - 2014 endif @ YDAY = $YR * 365 + $DAY endif # # get the needed parameters from temp # set BPL = `grep B_parallel temp | awk '{print $3}'` set BPR = `grep B_perpendicular temp | awk '{print $3}'` set XS = `grep xshift temp | awk '{print $3}'` set YS = `grep yshift temp | awk '{print $3}'` set NM = `grep SC_identity $2 | awk '{print $3}'` if ($SSC == 5) then if ($YR1 < 2013) then set ORB = `grep input_file $2 | awk '{print $3}' | awk '{print substr($1,14,5)}'` else if ($#argv < 3) then set ORB = `grep input_file $2 | awk '{print $3}' | awk -F"." '{print $1".1__D"}'` else set ORB = `grep input_file $2 | awk '{print $3}' | awk '{print substr($1,13,5)}'` endif endif else if ($SSC == 6 || $ERSSLC == "SAR_IMS_1P") then set ORB = `grep input_file $2 | awk '{print $3}' | cut -c50-54` else if ($SSC == 4) then set ORB = `grep input_file $2 | awk '{print $3}' | cut -c17-21` else if ($SSC == 1 || $SSC == 2) then set ORB = `grep input_file $2 | awk '{print $3}' | cut -c1-8` else set ORB = `grep input_file $2 | awk '{print $3}' | awk -F"." '{print $1}'` endif # if ($#argv < 3) then echo $ORB $ST0 $YDAY $BPL $BPR $XS $YS else echo $YDAY $BPR '8' '0.' '0' '5' $ORB endif # # clean up # rm temp GMTSAR_V5.7/.svn/pristine/0f/0f6bfca3179d8e37f82693583b3d853b24c8a37f.svn-base000444 015705 000000 00000000736 13505462013 025637 0ustar00sandwellwheel000000 000000 aastretch.c acpatch.c conv2d.c do_freq_xcorr.c do_time_int_xcorr.c fft_bins.c fft_interpolate_routines.c file_stuff.c geoxyz.c get_locations.c get_params.c highres_corr.c intp_coef.c parse_xcorr_input.c plxyz.c print_results.c radopp.c read_xcorr_data.c rmpatch.c rng_cmp.c rng_ref.c shift.c sio_struct.c siocomplex.c spline.c trans_col.c utils.c utils_complex.c set_prm_defaults.c ldr_orbit.c read_orb.c interpolate_orbit.c polyfit.c calc_dop.c GMTSAR_V5.7/.svn/pristine/0f/0f955f088724171716e17625542851e923c42966.svn-base000444 015705 000000 00000036275 13505462013 024767 0ustar00sandwellwheel000000 000000 /* $Id: phasefilt.c 80 2014-08-11 17:04:28Z sandwell $ */ #include "gmtsar.h" /*------------------------------------------------------------------------------------- */ /* * implementation of adaptive non-linear phase filter based on: * Goldstein, R. M. and C. L. Werner, 1998, Radar interferogram filtering * for geophysical applications, (25),21, 4035-4038. * * Baran, I., M. P. Stewart, B. M. Kampes, Z. Perski, and P. Lilly, 2003 * A modification of the Golstein radar interferogram filter, * IEE trans. geoscience and remote sensing, (41), 9, 2114-2118. * * rjm, SDSU, may 2010 * comments: * - handled edges in a kludgey way * - added memory allocation checks * * future: * - added option to calculate power spectra with a taper * - (synthetics suggested a slight improvement from reduced sidelobes) * * Dec 2010 - bug in weighting fixed [apply to complex] * default psize changed to 32 * '-complex_out' option added to write out filtered real and imag * *------------------------------------------------------------------------------------- */ int verbose; int debug; int print_cpatch(int nx, int ny, struct FCOMPLEX *m) { int i; for (i = 0; i < nx * ny; i++) { fprintf(stderr, " (%4.2f %4.2f) ", m[i].r, m[i].i); if ((i + 1) / nx == (i + 1) / (float)nx) fprintf(stderr, "\n"); } return (EXIT_SUCCESS); } int print_patch(int nx, int ny, float *m) { int i; for (i = 0; i < nx * ny; i++) { fprintf(stderr, " %4.2f", m[i]); if ((i + 1) / nx == (i + 1) / (float)nx) fprintf(stderr, "\n"); } return (EXIT_SUCCESS); } int write_grdfile(void *API, struct GMT_GRID *T, char *fname, char *prog, char *type, float *data, int verbose) { if (verbose) fprintf(stderr, " writing %s \n", fname); strcpy(T->header->command, prog); strcpy(T->header->remark, type); T->data = data; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, fname, T)) die("cannot create ", fname); T->data = NULL; return (EXIT_SUCCESS); } int read_file_hdr(void *API, char *sim, struct GMT_GRID **IM, char *sre, struct GMT_GRID **RE, unsigned int *xdim, unsigned int *ydim) { struct GMT_GRID *I = NULL, *R = NULL; if ((I = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, sim, NULL)) == NULL) die("error reading file", sim); if ((R = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, sre, NULL)) == NULL) die("error reading file", sre); if (!(R->header->nx == I->header->nx && R->header->ny == I->header->ny)) die("dimensions not equal!", ""); *xdim = I->header->nx; *ydim = I->header->ny; *RE = R; *IM = I; return (EXIT_SUCCESS); } int phasefilt_read_data(void *API, char *imname, struct GMT_GRID *IM, char *rename, struct GMT_GRID *RE, struct FCOMPLEX *cdata, float *amp) { long n, i; n = IM->header->nx * IM->header->ny; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, imname, IM) == NULL) die("error reading file", imname); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, imname, RE) == NULL) die("error reading file", rename); for (i = 0; i < n; i++) { cdata[i].r = RE->data[i]; cdata[i].i = IM->data[i]; amp[i] = sqrtf(RE->data[i] * RE->data[i] + IM->data[i] * IM->data[i]); } if (GMT_Destroy_Data(API, &IM)) die("error freeing data", imname); if (GMT_Destroy_Data(API, &RE)) die("error freeing data", rename); return (EXIT_SUCCESS); } int make_wgt(float *wgt, int nxp, int nyp) { int i, j; float wx, wy; for (i = 0; i < nyp / 2; i++) { wy = 1.0f - fabsf((float)(i) - (nyp / 2.0f - 1.0f)) / (nyp / 2.0f - 1.0f); for (j = 0; j < nxp / 2; j++) { wx = 1.0f - fabsf((float)(j) - (nxp / 2.0f - 1)) / (nxp / 2.0f - 1.0f); wgt[i * nxp + j] = wgt[(i + 1) * nxp - j - 1] = wx * wy; wgt[(nyp - i - 1) * nxp + j] = wgt[(nyp - i) * nxp - j - 1] = wx * wy; } } if (debug) print_patch(nxp, nyp, wgt); return (EXIT_SUCCESS); } /* the classic Goldstein filter */ int apply_pspec(int m, int n, float alpha, struct FCOMPLEX *in, struct FCOMPLEX *out) { int i; float wgt; if (alpha < 0.0f) die("alpha < 0; something is rotten in Denmark", ""); /* pow(x,a/2) == pow(sqrt(x),a) */ for (i = 0; i < m * n; i++) { wgt = powf((in[i].r * in[i].r + in[i].i * in[i].i), alpha / 2.0f); out[i].r = wgt * in[i].r; out[i].i = wgt * in[i].i; } return (EXIT_SUCCESS); } int calc_corr(void *API, char *amp1, char *amp2, unsigned int xdim, unsigned int ydim, float *amp, float *corr) { unsigned int i, n, xdim2, ydim2; float a; struct GMT_GRID *A1 = NULL, *A2 = NULL; /* Grid structures containing ->header and ->data */ n = xdim * ydim; read_file_hdr(API, amp1, &A1, amp2, &A2, &xdim2, &ydim2); if ((xdim != xdim2) || (ydim != ydim2)) die("amp files are different size than real and imag files", ""); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, amp1, A1) == NULL) die("error reading data", amp1); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, amp2, A2) == NULL) die("error reading data", amp2); for (i = 0; i < n; i++) { a = A1->data[i] * A2->data[i]; if (a > 0.0f) { corr[i] = amp[i] / sqrtf(a); } else { corr[i] = 0.0f; } if (corr[i] < 0.0f) corr[i] = 0.0f; if (corr[i] > 1.0f) corr[i] = 1.0f; } if (GMT_Destroy_Data(API, &A1)) die("error freeing data", amp1); if (GMT_Destroy_Data(API, &A2)) die("error freeing data", amp2); return (EXIT_SUCCESS); } int phasefilt_parse_command_line(char **a, int na, char *USAGE, char *sre, char *sim, float *alp, int *ps, char *amp1, char *amp2, int *dflag, int *comflag) { int n; int flag[4]; for (n = 0; n < 4; n++) flag[n] = 0; for (n = 1; n < na; n++) { if (!strcmp(a[n], "-v")) { verbose = 1; /* only args after verbose (if set) will be echoed */ } else if (!strcmp(a[n], "-real")) { n++; if (n == na) die(" no option after -real!\n", ""); strcpy(sre, a[n]); flag[0] = 1; if (verbose) fprintf(stderr, "real %s \n", sre); } else if (!strcmp(a[n], "-imag")) { n++; if (n == na) die(" no option after -imag!\n", ""); strcpy(sim, a[n]); flag[1] = 1; if (verbose) fprintf(stderr, "imag %s \n", sim); } else if (!strcmp(a[n], "-alpha")) { n++; if (n == na) die(" no option after -alpha!\n", ""); *alp = (float)strtod(a[n], NULL); if (verbose) fprintf(stderr, "alpha %f \n", *alp); } else if (!strcmp(a[n], "-amp1")) { n++; if (n == na) die(" no option after -amp1!\n", ""); strcpy(amp1, a[n]); flag[2] = 1; if (verbose) fprintf(stderr, "amp1 %s \n", amp1); } else if (!strcmp(a[n], "-amp2")) { n++; if (n == na) die(" no option after -amp2!\n", ""); strcpy(amp2, a[n]); flag[3] = 1; if (verbose) fprintf(stderr, "amp2 %s \n", amp2); } else if (!strcmp(a[n], "-psize")) { n++; if (n == na) die(" no option after -psize!\n", ""); *ps = atoi(a[n]); if (verbose) fprintf(stderr, "patch size %d \n", *ps); } else if (!strcmp(a[n], "-diff")) { *dflag = 1; if (verbose) fprintf(stderr, "calculate difference \n"); } else if (!strcmp(a[n], "-complex_out")) { *comflag = 1; } else if (!strcmp(a[n], "-debug")) { verbose = 1; debug = 1; } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } /* flag[0] real flag[1] imag flag[2] amp1 only needed if modified filter flag[3] amp2 only needed if modified filter */ /* check for real and imag files are set */ if (flag[0] == 0) die("real file not set", ""); if (flag[1] == 0) die("imag file not set", ""); /* if amp files are defined set alpha = -1 to denote coherence-based alpha */ if ((flag[2] == 1) && (flag[3] == 1)) *alp = -1.0f; if ((flag[2] == 1) && (flag[3] == 0)) die("amp1 set but not amp2 (needed for modified filter)", ""); if ((flag[2] == 0) && (flag[3] == 1)) die("amp2 set but not amp1 (needed for modified filter)", ""); /* if alpha < 0 check that both amp files are set */ if ((*alp < 0) && (flag[2] == 0)) die("amp1 file not set (needed for modified filter)", ""); if ((*alp < 0) && (flag[3] == 0)) die("amp2 file not set (needed for modified filter)", ""); return (EXIT_SUCCESS); } char *USAGE = "phasefilt [GMTSAR] - Apply adaptive non-linear phase filter\n\n" "\n USAGE:\nphasefilt -imag imag.grd -real real.grd [-alpha alpha][-psize " "size][-amp1 amp1.grd -amp2 amp2.grd][-diff][-v]\n" " applies Goldstein adaptive filter to phase [output: filtphase.grd]\n" " or applies modified Goldstein adaptive filter to phase [output: " "filtphase.grd, corrfilt.grd]\n" "-imag [required] GMT format file of imaginary component\n" "-real [required] GMT format file of real component\n" "-alpha exponent for filter - usually between 0.0 and 1.5 (0.0 should " "not filter).\n" " default: 0.5 [Goldstein filter] (anything above 1.0 may be " "excessive)\n" " alpha < 0 will set alpha = (1 - coherence) [modified " "Goldstein]\n" "-psize patch size for filtering. Must be power of two.\n" " default: 32\n" "-amp1 GMT format file of amplitude image of image 1. Needed " "(and applies) modified filter.\n" "-amp2 GMT format file of amplitude image of image 2. Needed " "(and applies) modified filter.\n" "-diff Calculate difference between input phase and output " "phase.\n" "-complex_out Write out filtered real and imaginary " "(filtphase_real.grd and filtphase_imag.grd)\n" "-v Verbose.\n" "-debug Debug.\n" "\n" "example:\n" "phasefilt -imag imag.grd -real real.grd -alpha 0.5\n"; int main(int argc, char **argv) { unsigned int i, j, ii, jj, k1, k2; unsigned int xdim, ydim; unsigned int nxp, nyp; int psize, corrflag, dflag, comflag; float alpha, pcorr, swgt; float *outphase = NULL, *wgt = NULL, *amp = NULL, *corr = NULL, *diff = NULL, *ftmp = NULL; struct FCOMPLEX *data = NULL, *fdata = NULL, *patch0 = NULL, *patch1 = NULL; char sre[256], sim[256]; char amp1[256], amp2[256]; void *API = NULL; /* GMT API control structure */ struct GMT_GRID *RE = NULL, *IM = NULL, *T = NULL; /* Grid structure containing ->header and ->data */ /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; debug = verbose = corrflag = comflag = 0; if (argc < 3) die(USAGE, ""); /* defaults */ psize = 32; /* size of patch # changed from 64 */ alpha = 0.5f; /* exponent */ dflag = 0; /* write out difference */ phasefilt_parse_command_line(argv, argc, USAGE, sre, sim, &alpha, &psize, amp1, amp2, &dflag, &comflag); /* patch size */ /* currently square */ nxp = psize; nyp = psize; /* read dimensions */ read_file_hdr(API, sim, &IM, sre, &RE, &xdim, &ydim); if ((T = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, IM->header->wesn, IM->header->inc, IM->header->registration, 0, NULL)) == NULL) die("could not allocate grid header", ""); if ((data = malloc(T->header->nm * sizeof(struct FCOMPLEX))) == NULL) die("error allocating memory", ""); if ((fdata = malloc(T->header->nm * sizeof(struct FCOMPLEX))) == NULL) die("error allocating memory", ""); if ((patch0 = malloc(nxp * nyp * sizeof(struct FCOMPLEX))) == NULL) die("error allocating memory", ""); if ((patch1 = malloc(nxp * nyp * sizeof(struct FCOMPLEX))) == NULL) die("error allocating memory", ""); if ((amp = malloc(T->header->nm * sizeof(float))) == NULL) die("error allocating memory", ""); if ((wgt = malloc(nxp * nyp * sizeof(float))) == NULL) die("error allocating memory", ""); if ((outphase = malloc(xdim * (ydim + nyp) * sizeof(float))) == NULL) die("error allocating memory", ""); /* array for difference */ if (dflag) { if ((diff = malloc(T->header->nm * sizeof(float))) == NULL) die("error allocating memory", ""); } /* array for writing filtered real and imag */ if (comflag) { if ((ftmp = malloc(T->header->nm * sizeof(float))) == NULL) die("error allocating memory", ""); } for (i = 0; i < T->header->nm; i++) outphase[i] = fdata[i].r = fdata[i].i = 0.0f; /* read data */ phasefilt_read_data(API, sim, IM, sre, RE, data, amp); /* calculate correlation */ if (alpha < 0.0) { corr = (float *)malloc(T->header->nm * sizeof(float)); calc_corr(API, amp1, amp2, xdim, ydim, amp, corr); corrflag = 1; } if (verbose) { if (corrflag == 1) fprintf(stderr, "phasefile: using coherence-dependent alpha (1 - gamma)\n"); if (corrflag == 0) fprintf(stderr, "phasefilt: constant alpha (%6.2f)\n", alpha); } /* create weights for each patch */ /* each patch overlaps each other by half and summed */ /* ideally, total wgt for each pixl = 1 */ /* except at edges... */ make_wgt(wgt, nxp, nyp); for (ii = 0; ii < (ydim - nyp); ii += nyp / 2) { for (jj = 0; jj < (xdim - nxp); jj += nxp / 2) { pcorr = 0.0f; swgt = 0.0f; for (i = 0; i < nyp; i++) { for (j = 0; j < nxp; j++) { k1 = (ii + i) * xdim + jj + j; k2 = i * nxp + j; patch0[k2].r = data[k1].r; patch0[k2].i = data[k1].i; if (corrflag) { pcorr += wgt[k2] * corr[k1]; swgt += wgt[k2]; } } } /* set alpha to 1.0 - coherence */ /* Baran et al., 2003 */ if (corrflag) alpha = 1.0f - pcorr / swgt; GMT_FFT_2D(API, (float *)patch0, nxp, nyp, GMT_FFT_FWD, GMT_FFT_COMPLEX); apply_pspec(nxp, nyp, alpha, patch0, patch1); GMT_FFT_2D(API, (float *)patch1, nxp, nyp, GMT_FFT_INV, GMT_FFT_COMPLEX); for (i = 0; i < nyp; i++) { for (j = 0; j < nxp; j++) { k1 = (ii + i) * xdim + jj + j; k2 = i * nxp + j; fdata[k1].r = fdata[k1].r + wgt[k2] * patch1[k2].r; fdata[k1].i = fdata[k1].i + wgt[k2] * patch1[k2].i; } } } } for (i = 0; i < T->header->nm; i++) outphase[i] = atan2f(fdata[i].i, fdata[i].r); write_grdfile(API, T, "filtphase.grd", "phasefilt", "phase", outphase, verbose); if (corrflag) write_grdfile(API, T, "filtcorr.grd", "phasefilt", "corr", corr, verbose); if (comflag) { for (i = 0; i < T->header->nm; i++) ftmp[i] = fdata[i].r; write_grdfile(API, T, "filtphase_real.grd", "phasefilt", "real", ftmp, verbose); for (i = 0; i < T->header->nm; i++) ftmp[i] = fdata[i].i; write_grdfile(API, T, "filtphase_imag.grd", "phasefilt", "imag", ftmp, verbose); free((void *)ftmp); } if (dflag) { for (i = 0; i < T->header->nm; i++) diff[i] = atan2f(data[i].i, data[i].r) - outphase[i]; write_grdfile(API, T, "filtdiff.grd", "phasefilt", "diff", diff, verbose); free((void *)diff); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ free((void *)patch0); free((void *)patch1); free((void *)data); free((void *)fdata); free((void *)amp); free((void *)outphase); free((void *)wgt); return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/0f/0f6791daa6bd73abee8e5f7ad580965d3eabc48b.svn-base000444 015705 000000 00000005625 13505462014 026267 0ustar00sandwellwheel000000 000000 # $Id: Makefile 236 2015-08-24 07:09:14Z pwessel $ # # makefile for top GMTSAR directory sinclude config.mk # Currently, S1A must happen before the CSK, TSZ, and RS2 builds due to dependencies via links # We will fix this so one can make anyting in any order # PREPROCESSORS = ALOS ERS S1A CSK TSX RS2 ENVI # DIRS = gmtsar snaphu/src ORBITS_URL = http://topex.ucsd.edu/gmtsar/tar/ORBITS.tar ORBITS = ORBITS.tar all: main preprocess help:: @grep '^#!' Makefile | cut -c3- #!----------------- MAKE HELP FOR GMTSAR----------------- #! #!make , where can be: #! #!all : Compile everything #!install : Compile & install everything #!clean : Clean up and remove objects and library files #!clean : Clean and remove configured files as well #! ------------- Additional Targets ------------- #!preprocess : Only compile the preprocesors #!main : Only compile the main programs #!install-preprocess : Only compile & install the preprocesors #!install-main : Only compile & install the main programs #!install-orbits : Obtain ORBITS.tar, prompt for directory, and install files #! preprocess: for d in $(PREPROCESSORS); do \ (cd preproc/$${d}_preproc; $(MAKE) all); \ done main: for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: install-main install-preproc install-preproc: for d in $(PREPROCESSORS); do \ (cd preproc/$${d}_preproc; $(MAKE) install); \ done $(INSTALL) preproc/ERS_preproc/scripts/virgin.PRM $(sharedir) $(INSTALL) preproc/ENVI_preproc/scripts/virgin_envisat.PRM $(sharedir) install-main: for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done $(INSTALL) -d $(sharedir) $(INSTALL) -d $(sharedir)/filters $(INSTALL) -d $(sharedir)/snaphu/config $(INSTALL) gmtsar/filters/[bfgsxy]* $(sharedir)/filters $(INSTALL) gmtsar/csh/snaphu.conf.* $(sharedir)/snaphu/config install-orbits: wget $(ORBITS_URL) 2>/dev/null || curl -O $(ORBITS_URL) @if [ -f $(ORBITS) ]; then \ read -p "==> Enter directory where the ORBITS subdirectory should be installed: " ORB_DIR ; \ mkdir -p $$ORB_DIR/ORBITS ; \ echo "Extracting orbits files into $$ORB_DIR/ORBITS"; \ tar xf $(ORBITS) -C$$ORB_DIR/ORBITS ; \ echo "Run configure --with-orbits-dir=$$ORB_DIR/ORBITS"; \ else \ echo "Unable to obtain $(ORBITS_URL) - Perhaps you have neither curl nor wget installed?"; \ fi uninstall: for d in $(DIRS) $(PREPROCESSORS); do \ (cd $$d; $(MAKE) uninstall); \ done rm -rf $(sharedir) clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done for d in $(PREPROCESSORS); do \ (cd preproc/$${d}_preproc; $(MAKE) clean); \ done spotless: for d in $(DIRS); do \ (cd $$d; $(MAKE) spotless); \ done for d in $(PREPROCESSORS); do \ (cd preproc/$${d}_preproc; $(MAKE) spotless); \ done rm -rf $(sharedir) bin share rm -rf config.log config.status config.mk configure autom4te.cache GMTSAR_V5.7/.svn/pristine/0f/0f08aef8dc38fb3b48ee36b8fbd05602aaf0a60e.svn-base000444 015705 000000 00000005236 13505462013 026240 0ustar00sandwellwheel000000 000000 #!/bin/tcsh -f # align images using orbits and DEM # by Kang Wang in June. 2018 # if ($#argv != 2) then echo "" echo "Usage: align_SAT.csh data_type(RAW/SLC) align.in" echo "" exit 1 endif if ($1 != RAW && $1 != SLC) then echo "data type must be RAW or SLC" exit 1 endif if (! -e dem.grd) then echo "DEM file not found!" exit 1 endif echo "Downsample the DEM data" gmt grdfilter dem.grd -D3 -Fg2 -I12s -Ni -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt set master = `awk '{if (NR==1) print $1}' $2` awk '{if (NR>1) print $1}' $2 > slave.list mv $master.PRM $master.PRM0 echo "calculating the SAT height for master $master" calc_dop_orb $master.PRM0 $master.log 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM rm -f $master.log set earth_radius = `grep earth_radius $master.PRM|tail -1 | awk '{print $3}'` set fd1 = `grep fd1 $master.PRM |tail -1 |awk '{print $3}'` update_PRM $master.PRM earth_radius $earth_radius update_PRM $master.PRM fd1 $fd1 SAT_llt2rat $master".PRM" 1 < topo.llt > master.ratll set rmax = `grep num_rng_bins $master".PRM" | awk '{print $3}'` set amax = `grep num_lines $master".PRM" | awk '{print $3}'` if ($1 == RAW) then echo "Focusing the master - START" sarp.csh $master.PRM echo "Focusing the master - END" endif set nslave = `cat slave.list |wc -l` set islave = 0 foreach slave (`cat slave.list`) @ islave = $islave + 1 echo "working on " $slave " [ $islave / $nslave ]" mv $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM update_PRM $slave.PRM earth_radius $earth_radius update_PRM $slave.PRM fd1 $fd1 rm -f $slave.log if ($1 == RAW) then echo "Focusing the slave - START" sarp.csh $slave.PRM echo "Focusing the slave - END" endif SAT_llt2rat $slave".PRM" 1 < topo.llt > slave.ratll paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $6 - $1, $2, $7 - $2, "100")}' > tmp.dat awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$2) }' < offset.dat > r.xyz awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$4) }' < offset.dat > a.xyz fitoffset.csh 3 3 offset.dat >> $slave".PRM" resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 mv $slave.SLC $slave.SLC_old mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM end GMTSAR_V5.7/.svn/pristine/63/631728119a6cf2bdb520b4363bac7a62c4188be1.svn-base000444 015705 000000 00000024624 13505462014 025516 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl use strict; if ($#ARGV < 1 ) { # print $#ARGV; # very strange, this number should be 0 if no input, but here -1 print "\nusage: dump_orbit_ers.pl orbit_frame orbdir\n\n"; print "input: orbit_frame.PRM\n"; print " orbdir directory with PRC orbit data \n"; print "output: orbit_frame.LED store the orbit information, used by ERS_baseline \n\n"; print " year day_of_year sec_of_day x y z vx vy vz \n\n"; exit; } #=========================================== # possible bug: when sensing is in the last # day of the orbit file. It will find incorrect file. # For example: e2_22526_2925.LED #=========================================== my $prm_file = $ARGV[0].".PRM"; my $led_file = $ARGV[0].".LED"; my $orb_dir = $ARGV[1]; print "---------- orbit search for $ARGV[0] started ----------\n"; ####################### grep start and stop time from PRM ############### my $midtime; my $temp1 = `grep SC_clock_start $prm_file`; my $temp2 = `grep SC_clock_stop $prm_file`; my @temp3 = split(/=/,$temp1); my @temp4 = split(/=/,$temp2); my $temp5 = ($temp3[1]+$temp4[1])/2; my $midtime = jul2ymd_PRM($temp5); #print "$temp3[1], $temp4[1], $temp5, $midtime \n"; ####################### Convert time to days since 1.1.2000 12h ############ my $midtime_julday; my $midtime_ymd; my $midtime_y11; my $first_year; my $first_d2y; # day of the year for the image if($midtime =~ /(\d*)-(\d*)-(\d*)/){ $midtime_ymd = $3.$2.$1; $midtime_y11 = $3."0101"; $first_year = $3; } print "Midtime: $midtime; YMD $midtime_ymd; Y11 $midtime_y11; \n"; $midtime_julday = ymd2jul($midtime_ymd); $first_d2y = $midtime_julday - ymd2jul($midtime_y11) + 1; print "Day of the year: $first_d2y \n"; my $ref_day = 20000101; my $ref_julday = ymd2jul($ref_day); my $julday = ($midtime_julday - $ref_julday)*10 - 5; # unit in PRC is 0.1 day from noon 1.1.2000 in TDT print "days from 1.1.2000 12 h in UTC: $julday/10 \n"; ###################### find the right orbit file ########################### my @orb_list = `cat $orb_dir/arclist`; my $list_size = @orb_list; my $orb_file; my $orb_file2; my $i; my $orb_case = 0; for ($i = 0; $i < $list_size; $i++) { if ($orb_list[$i] =~ /(\S*)\s*(-?\d*)\s*(-?\d*)/){ #print "$julday, $2, $3 \n"; if (($julday > $2) && ($julday <= $3) && ( $3-$julday > 5)){ $orb_case = 1; # one orb file, not at edge $orb_file = $orb_dir."/".$1; print "$ARGV[0] \n Case 1: $julday, $2, $3; Orbit file: $orb_file\n"; last; #exit; } elsif (($julday > $2) && ($julday <= $3)) { $orb_case = 2; print "$ARGV[0] \n Case 2: $julday, $2, $3; \n"; if ($i == $list_size-1) { $orb_case = 1; $orb_file = $orb_dir."/".$1; last; print "End of arclist, $orb_file\n"; #exit; } my $otmp1 = $1; my $otmp2 = $3; if ($orb_list[$i+1] =~ /(\S*)\s*(-?\d*)\s*(-?\d*)/) { if ($otmp2 == $2) { $orb_file = $orb_dir."/".$otmp1; $orb_file2 = $orb_dir."/".$1; print "Two orbit files, $orb_file $orb_file2\n"; } else { $orb_case = 1; $orb_file = $orb_dir."/".$otmp1; print "Case 2 but no continuous next file.\n"; } } last; #exit; } else { } } } if ($orb_case == 0) { print "$ARGV[0] \n Case 0: No orbit file exist!"; exit; } ###################### Convert time to seconds ############################ my $time_msec; if($midtime =~ /(\d*):(\d*):(\d*)/){ $time_msec = ($1*3600+$2*60+$3)*1e6; # middle time in microseconds } #print "msec of the day in UTC sensing middle: $time_msec\n"; ###################### define time window start 28 minutes in TDT ############ open(DAT,$orb_file) || die("Could not open file $orb_file!"); my @orb_data = ; close(DAT); # grep TDT-UTC my $tdtutc; if($orb_data[0] =~ /^.{177}(.{5})/){ $tdtutc = $1*1e3; # microseconds #print "TDTUTC: $tdtutc ms \n"; } my @orb_data2; if ($orb_case == 2) { open(DAT2,$orb_file2) || die("Could not open file $orb_file!"); @orb_data2 = ; close(DAT2); # grep TDT-UTC my $tdtutc2; if($orb_data2[0] =~ /^.{177}(.{5})/){ $tdtutc2 = $1*1e3; # microseconds } if ($tdtutc != $tdtutc2) { print "TDTUTC: $tdtutc $tdtutc2 \n"; print "TDTUTC differs for the two orbit files. Special case1 \n"; exit; } } my $time_msec_tdt = $time_msec + $tdtutc; if($time_msec_tdt > 86400000000) { $time_msec_tdt = $time_msec_tdt - 86400*1e6; $julday = $julday + 10; } if($time_msec < 14*60*1e6){ $first_d2y = $first_d2y - 1; } my $julday_start; my $time_start; $time_start = $time_msec_tdt - 14*60*1e6; # 14 minutes before middle time if($time_start < 0){ $julday_start = $julday - 10; $time_start = $time_start + 86400*1e6; } else{ $julday_start = $julday; } print "Time window start in TDT (days to 1.1.2000 12h;ms of the day):$julday_start/10;$time_start\n"; #print "check:$time_start ms = $time_msec ms + $tdtutc ms - 14 minutes - 86400s(0or1)\n"; ################### search orb_file for 28 minutes #################### my @tmp7; my $tmp7size; my @tmp8; my $count = 0; my @out_orb_data; LINE:foreach(@orb_data){ if($_ =~ /STTERR/){ @tmp7 = split /STTERR/,$_; $tmp7size = @tmp7 -2; @tmp8 = @tmp7[1 .. $tmp7size]; } } if ($orb_case == 2) { my @tmp82; LINE:foreach(@orb_data2){ if($_ =~ /STTERR/){ @tmp7 = split /STTERR/,$_; $tmp7size = @tmp7 -2; @tmp82 = @tmp7[1 .. $tmp7size]; } } my @tmp81 = @tmp8; @tmp8 = (@tmp81,@tmp82); } my @out_orb_data; my @tmp9; my $count = 0; my $first_s; my $n_sec; LINE:foreach(@tmp8){ if($_ =~ /^.{8}(.{6})(.{11})(.{12})(.{12})(.{12})(.{11})(.{11})(.{11})/){ # ask guoguo @tmp9 = ($1,$2,$3,$4,$5,$6,$7,$8); $tmp9[0] =~ s/^\s*//; $tmp9[0] =~ s/\s*$//; #print "$tmp9[0] $tmp9[1] $tmp9[2] $tmp9[3] $tmp9[4]\n"; if( ($tmp9[0] eq $julday_start) && ($tmp9[1] > $time_start) && ($count < 56)){ # 28 minutes, 30s each $count = $count+1; if($count eq '1'){ #print "First time in TDT: $julday_start $tmp9[1] ms (check with start time)\n"; $first_s = ($tmp9[1] - $tdtutc)/1e6; # convert to UTC if($first_s < 0){ $first_s = $first_s +86400; } } $n_sec = $first_s + 30*($count-1); #$n_sec = ($tmp9[1] - $tdtutc)/1e6; $tmp9[2] = sprintf("% .3f",$tmp9[2]/1e3); # change unit to meters $tmp9[3] = sprintf("% .3f",$tmp9[3]/1e3); $tmp9[4] = sprintf("% .3f",$tmp9[4]/1e3); $tmp9[5] = sprintf("% .6f",$tmp9[5]/1e6); $tmp9[6] = sprintf("% .6f",$tmp9[6]/1e6); $tmp9[7] = sprintf("% .6f",$tmp9[7]/1e6); push(@out_orb_data,"$first_year $first_d2y $n_sec $tmp9[2] $tmp9[3] $tmp9[4] $tmp9[5] $tmp9[6] $tmp9[7]\n"); } } } print "TDTUTC: $tdtutc ms \n"; ###################### write to the output file ########################### unshift(@out_orb_data,"$count $first_year $first_d2y $first_s 30 \n"); open(DAT2,">$led_file") || die("Could not open file!"); print DAT2 @out_orb_data; close(DAT2); #print "56 orbit data was printed to $led_file\n"; print "------- Orbit data finished --------\n"; ################## subroutine to convert time format ################# sub ymd2jul { # convert year month day to integer Julian day #print "$_[0]\n"; # input my $iyear = substr($_[0],0,4); my $imonth = substr($_[0],4,2); my $iday = substr($_[0],6,2); #print "$iyear $imonth $iday \n"; # algrithm from wiki my $a = int((14-$imonth)/12); my $y = $iyear + 4800 - $a; my $m = $imonth + 12*$a - 3; my $jday2day = $iday + int((153*$m+2)/5) + 365*$y + int($y/4) - int($y/100) + int($y/400) - 32045; return $jday2day; } sub jul2ymd_PRM { # convert Julian day to year month day hour min sec #$ymd.hms = jul2ymd_PRM($julday); my $iyear = substr($_[0],0,4); my $jday = substr($_[0],4,3); my $decimal = sprintf("%.8f", ($_[0] - int($_[0]))); my $imon; my $iday; my $ihou; my $imin; my $isec; my $ymd; my @jsum = (0,31,59,90,120,151,181,212,243,273,304,334); my @jsum2= (0,31,60,91,121,152,182,213,244,274,305,335); if ($iyear%400 == 0) { #leap year $imon = findmonth($jday,@jsum2); $iday = $jday-$jsum2[$imon-1]; } elsif ($iyear%100 == 0) { #not a leap year $imon = findmonth($jday,@jsum); $iday = $jday-$jsum[$imon-1]; } elsif ($iyear%4 == 0) { #leap year $imon = findmonth($jday,@jsum2); $iday = $jday-$jsum2[$imon-1]; } else { #not a leap year $imon = findmonth($jday,@jsum); $iday = $jday-$jsum[$imon-1]; } $ihou = int(24*$decimal); $imin = int(60*24*$decimal-60*$ihou); $isec = int(60*60*24*$decimal-60*60*$ihou-60*$imin); #print "$_ \n$iyear $imon $iday $ihou $imin $isec \n"; if ( ($imon < 10) && ($iday < 10) ) { $ymd = sprintf("%s", "0".$iday."-0".$imon."-".$iyear." ".$ihou.":".$imin.":".$isec); } elsif ($imon < 10) { $ymd = sprintf("%s", $iday."-0".$imon."-".$iyear." ".$ihou.":".$imin.":".$isec); } elsif ($iday < 10) { $ymd = sprintf("%s", "0".$iday."-".$imon."-".$iyear." ".$ihou.":".$imin.":".$isec); } else { $ymd = sprintf("%s", $iday."-".$imon."-".$iyear." ".$ihou.":".$imin.":".$isec); } return $ymd; } sub findmonth { #$imon = findmonth($jday,@jsum); my $jday = $_[0]; my @jsum = ($_[1],$_[2],$_[3],$_[4],$_[5],$_[6],$_[7],$_[8],$_[9],$_[10],$_[11],$_[12]); #print "$jday @jsum \n"; my $n = 0; my $count = 0; my $imonth; my $diff; LINE:foreach(@jsum){ $count++; $diff = $_ - $jday; #print "$count $diff \n"; if ($diff >= 0){ $n++; } last LINE if($n >=1); } if ( ($count == 12) & ($diff <= 0) ){ $imonth = 12; } else { $imonth = $count-1; } #print "$n $count $imonth \n"; return $imonth; } GMTSAR_V5.7/.svn/pristine/97/97e788abfaf2bd7c24c7cc75984c77d019e8846d.svn-base000444 015705 000000 00000020371 13505462014 025750 0ustar00sandwellwheel000000 000000 /* * $Id: epr_core.h,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_CORE_H_INCL #define EPR_CORE_H_INCL #ifdef __cplusplus extern "C" { #endif #include /* just to get the ANSI-C type FILE */ #include "epr_ptrarray.h" struct EPR_API; struct EPR_Parameter; typedef struct EPR_API EPR_SAPI; typedef struct EPR_Parameter EPR_SParameter; #define EPR_ENVISAT_PRODUCT_MERIS "MER" #define EPR_ENVISAT_PRODUCT_ASAR "ASA" #define EPR_ENVISAT_PRODUCT_SAR "SAR" #define EPR_ENVISAT_PRODUCT_AATSR "ATS" #define EPR_LONGI_BAND_NAME "longitude" #define EPR_AATSR_LINES_PER_TIE_PT 32 #define EPR_MPH_SIZE 1247 #define EPR_SPH_SIZE 11622 #define EPR_DSD_SIZE 280 #define EPR_PRODUCT_MPH_SIZE 1048 /*??????*/ #define EPR_PRODUCT_MAGIC_STR "PRODUCT=\"" #define EPR_PRODUCT_ID_OFFSET 9 #define EPR_PRODUCT_TYPE_ID_STRLEN 10 #define EPR_LENGTH_NUM_DSD_IDENTIFIER 9 #define EPR_COUNT_SEPARATOR_ARRAY ",*" #define EPR_IRRELEVANCE_SYMBOL '*' #define EPR_FIELD_SEPARATOR_ARRAY "|" #define EPR_HEADER_SEPARATOR_ARRAY "=<>" #define EPR_HEADER_EXCEPTIONS_ARRAY "eE" #define EPR_LONGI_ABS_MAX 180 #define EPR_LONGI_ABS_MIN -180 #define EPR_LINE_MAX_LENGTH 2000 #define EPR_BE_MAGIC_NUMBER 1162761801UL #define EPR_LE_MAGIC_NUMBER 1230392901UL #define EPR_LE_MAGIC_BYTE_0 'E' #define EPR_LE_MAGIC_BYTE_1 'N' #define EPR_LE_MAGIC_BYTE_2 'V' #define EPR_LE_MAGIC_BYTE_3 'I' #define EPR_ATS_NUM_PER_POINT_ACROSS_LOCAT 23 #define EPR_ATS_NUM_PER_POINT_ACROSS_SOLAR 11 #define EPR_ATS_LINE_LENGTH 512 #define EPR_ASAR_NUM_PER_POINT_ACROSS_LOCAT 11 /** * The EPR_API structure is a container for all globally * required information related to to the ENVISAT product reader API. * *

A single global (but hidden) instance exists for this structure. */ struct EPR_API { /** * The directory path to the record info database. */ epr_boolean init_flag; /** * A boolean value indicating whether this code run's on a * little endian order machine or not. *

1 stands for little endian (LE), * 0 stands for big endian (BE). */ int little_endian_order; /** * A unsigned int value indicating head length */ uint epr_head_size; /** * The directory path to the record info database. */ /*char* db_dir_path;*/ /** * The current log level for the ENVISAT API. */ EPR_ELogLevel log_level; /** * The log handler (function pointer) for the ENVISAT API. * Can be NULL. */ EPR_FLogHandler log_handler; /** * The error code of the last error occured. */ EPR_EErrCode last_err_code; /** * The error message of the last error occured. */ char* last_err_message; /** * The error handler (function pointer) for the ENVISAT API. * Can be NULL. */ EPR_FErrHandler err_handler; }; /** * The one and only ENVISAT API instance. */ extern EPR_SAPI epr_api; /* * ====================================================================== */ /** * Frees the memory allocated by the given product file identifier. * *

After calling this function the give product file identifier pointer * gets invalid and should not be used anymore. * * @param record the product file identifier to be released, * if NULL the function immediately returns */ void epr_free_product_id(EPR_SProductId* product_id); /** * Logs a message with the given log level. * *

The function calls this API's log handler if * it is not NULL and if the given log * level is greater than or equal to the global log level. * * @param log_level the log level (or message type) for the mesage * @param log_message the mesage */ void epr_log(EPR_ELogLevel log_level, const char* log_message); /** * Sets the given error code and the associated error message and * calls this API's error handler if it is not NULL. * * @param err_code the error code * @param err_message the error mesage */ void epr_set_err(EPR_EErrCode err_code, const char* err_message); /** * Reads the full main product header (MPH) of the ENVISAT product file * given by the given product identifier. * * @param product_id the product identifier, must not be NULL * @return a record representing the MPH of the specified product file * or NULL if an error occured. */ EPR_SRecord* epr_read_mph(EPR_SProductId* product_id); /** * Reads the full specific product header (SPH) of the ENVISAT product file * given by the given product identifier. * * @param product_id the product identifier, must not be NULL * @return a record representing the MPH of the specified product file * or NULL if an error occured. */ EPR_SRecord* epr_read_sph(EPR_SProductId* product_id); /** * Converts the given string into a data type identifier. * * @param str the string to be converted. * @return the data type identifier represented by the given string. * If the string can not be converted the special value * e_tid_unknown is returned. */ EPR_EDataTypeId epr_str_to_data_type_id(const char* str); /* * Converts the given string into a field length. * * The string can represent a single integer value or a sequence * of integer value and parameter references (names). Integers * and value are expected to be separated by the asterisk * character ('*'). E.g. the string "3 * 4 * num_pixels_across" * is represents a valid field length as long as the parameter * name 'num_pixels_across' is found in the given parameter table. * * @param str the string to be converted * @param param_table the parameter table containing the values * for the parameter references in the string * @return the field length computed from the given string or * (uint)-1 if an error occured. */ /*uint epr_str_to_field_length(const char* str, EPR_SParamTable* param_table);*/ /** * Compares the two given names and returns TRUE if * they are equal ignoring the case of each letter. * *

This function is used to compare names throughout the * ENVISAT product reader API. * * @param name1 the first name, must not be NULL * @param name2 the second name, must not be NULL * @return TRUE if the names are equal, * FALSE otherwise */ char* epr_build_db_file_istream_name(EPR_SProductId* product_id, char* what); FILE* epr_open_file(char* path_to_file); int epr_str_to_number(const char* str); uint epr_parse_value_count(EPR_SProductId* product_id, const char* str); uint epr_param_to_value(const char* str, EPR_SPtrArray* param_table); void epr_make_os_compatible_path(char* path); epr_boolean epr_check_api_init_flag(); /* void epr_make_image_header(EPR_SProductId* product_id, EPR_SDatasetId* dataset_id, EPR_SRecord* record); int epr_make_image(EPR_SProductId* product_id, EPR_SDatasetId* dataset_id, EPR_SRecord* record); */ /** * Gets the element content to output FILE stream. * * @param field the pointer at the field to get out. * @param istream the identifier of the output file. */ void epr_output_element(const EPR_SField* field, uint field_index, uint element_index, FILE* istream); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_CORE_H_INCL */ GMTSAR_V5.7/.svn/pristine/97/978a7c042148e228274e3473984eb208850ff875.svn-base000444 015705 000000 00000001143 13505462013 025131 0ustar00sandwellwheel000000 000000 #!/usr/bin/python import subprocess import os.path import numpy as np import sys def get_trend(x,y,z): G=np.column_stack((np.ones(np.shape(x)),x,y)) #p=(G'*G)\G'*z p=np.dot(np.dot(np.linalg.inv(np.dot(np.transpose(G),G)),np.transpose(G)),z) return p if __name__ == '__main__': # load data from the unwrapped subset unwrap=sys.argv[1] # eg. unwrap.dat data=np.loadtxt(unwrap) x=data[:,0] y=data[:,1] z=data[:,2] # find the trend trend_params=get_trend(x,y,z) print('%.15f %.15f %.15f') %(trend_params[0], trend_params[1],trend_params[2]) ## END ## GMTSAR_V5.7/.svn/pristine/55/553ad0399691ccacc7991366cf763a561504d857.svn-base000444 015705 000000 00000000557 13505462013 025342 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for alos after 4 x 2 decimation so the 0.5 gain % is at 700 m wavelength % clear sigx=7.9; sigy=10.6; nx=17; ny=17; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_alos_700m -ASCII -double gauss GMTSAR_V5.7/.svn/pristine/55/55eb9a055c251a1ed880d0f0a57a50b44f35d66a.svn-base000444 015705 000000 00000005570 13505462013 025577 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # By Xiaohua XU, Jun, 2015 # # prepare input data.in for preproc_batch_tops.csh # # alias wgetasf to 'wget --http-user=**** --http-password=****' in .cshrc or .tcshrc file # requires having an account on with ASF # # set a local directory that stores S1A and S1B orbits. e.g. orb_dir/S1A and orb_dir/S1B # source ~/.cshrc set orb_dir = "/geosat2/InSAR_Processing/Sentinel_Orbits" rm data.in ls *.xml > text.dat set mstem = `awk 'NR==1 {print $0}' text.dat | awk '{print substr($1,16,8)}'` set mname = `awk 'NR==1 {print $0}' text.dat | awk '{print substr($1,1,64)}'` set rec = 0 if (! -f orbits.list) then set url_root = "https://s1qc.asf.alaska.edu/aux_poeorb/" wget $url_root -O orbits.html grep EOF orbits.html | awk -F'"' '{print $2}' > orbits.list rm orbits.html endif echo "Looping over all the lines" foreach line ( ` awk '{ print $0 }' < text.dat ` ) set stem = `echo $line | awk '{print substr($1,16,8)}'` set name = `echo $line | awk '{print substr($1,1,64)}'` if ($stem != $mstem) then echo "Writing record $mstem" #set n1 = `echo $mstem | awk '{print $1-1}'` #set n2 = `echo $mstem | awk '{print $1+1}'` # uses date for time manipulation -ben #set n1 = `date -v-1d -jf "%Y%m%d" $mstem +%Y%m%d` #set n2 = `date -v+1d -jf "%Y%m%d" $mstem +%Y%m%d` set n1 = ` date --date="$mstem - 1 day" +%Y%m%d ` set n2 = ` date --date="$mstem + 1 day" +%Y%m%d ` set SAT = `echo $mname | awk '{print toupper(substr($1,1,3))}'` #cp ../../../../orbit/*$n1*$n2* . set orb = `grep $SAT orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT/$orb) then cp $orb_dir/$SAT/$orb . else wgetasf $url_root/$orb endif endif #if (! -f $orb) wget $url_root"/"$orb #set orb = `ls *$n1*$n2*` #set orb = `ls *$mstem*EOF` set tmp_rec = `echo $rec $orb | awk '{print $1":"$2}'` echo $tmp_rec >> data.in set rec = `echo $name` set mstem = `echo $stem` set mname = `echo $name` else if ($rec == 0) then echo "Setting a new name for rec" set rec = `echo $name` else set tmp_rec = `echo $name $rec | awk '{print $2":"$1}'` set rec = `echo $tmp_rec` endif endif end #set n1 = `date -v-1d -jf "%Y%m%d" $mstem +%Y%m%d` #set n2 = `date -v+1d -jf "%Y%m%d" $mstem +%Y%m%d` set n1 = ` date --date="$mstem - 1 day" +%Y%m%d ` set n2 = ` date --date="$mstem + 1 day" +%Y%m%d ` set SAT = `echo $mname | awk '{print toupper(substr($1,1,3))}'` echo "Writing record $mstem" #set orb = `ls *$n1*$n2*` set orb = `grep $SAT orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT/$orb) then cp $orb_dir/$SAT/$orb . else wgetasf $url_root/$orb endif endif #if (! -f $orb) wget $url_root"/"$orb #set orb = `ls *$mstem*EOF` set tmp_rec = `echo $rec $orb | awk '{print $1":"$2}'` echo $tmp_rec >> data.in rm text.dat rm orbits.list GMTSAR_V5.7/.svn/pristine/55/5556931f57f306b374e8beedb5a8421a1d161456.svn-base000444 015705 000000 00000015114 13505462014 025376 0ustar00sandwellwheel000000 000000 /*************************************************************************** * ALOS_fbs_fbd reads a raw FBS-HH file processed with ALOS_pre_proc and * * downsamples it to FBD-HH bandwidth. The algorithm takes the fft each * * complex range line and zeros in the frequency domain. This is * * possible because the FBS bandwidth is exactly two times the FBD. * * Note that the filtered data may exceed the original data span of * * 0-31 so the numbers are rescaled to lie between 0 and 127 which still * * only one byte of storage. * * The code uses cfft1d which seems to be the standard interface in the * * InSAR community. * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Rob Mellors * * (Scripps Institution of Oceanography) * * Date : 08/04/2007 * ***************************************************************************/ /*************************************************************************** * Modification history: * * 10/02/07 changed the sample lengths from hard wired to computed from PRM* * * * DATE * * * ***************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" void rng_compress(fcomplex *cin, int nffti, fcomplex *cout, int nffto); #define clip127(A) (((A) > 127) ? 127 : (((A) < 0) ? 0 : A)) char *USAGE = "ALOS_FBS2FBD FBS.PRM FBD.PRM \n" " FBS.PRM PRM file for input image in fine beam single " "polarization (FBS 28 MHz) (input) \n" " FBD.PRM PRM file for output image in fine beam " "HH-polarization (FBD 14 MHz) (output) \n"; int main(int argc, char **argv) { FILE *prmfile, *datafile, *prmout, *dataout; unsigned char *indata, *outdata; fcomplex *cin, *cout; float rtest, itest; int i, j, k, np, nffti, nffto, i0, headsize; int ibufsize, obufsize, fbdsamp, fbssamp; size_t n; struct PRM r; if (argc < 3) die(USAGE, ""); /* flags defined in global_flags.h */ verbose = 0; debug = 0; /* fill the struct with default parameters */ null_sio_struct(&r); /* open input PRM file and read the parameters */ if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); get_sio_struct(prmfile, &r); /* open input raw data file */ if ((datafile = fopen(r.input_file, "r")) == NULL) die("Can't open ", r.input_file); /* open output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); /* assemble the output filename and open for writing */ sscanf(argv[2], "%s", r.input_file); r.input_file[strlen(argv[2]) - 4] = 0; strcat(r.input_file, ".raw"); /* open output file for single look complex image */ if ((dataout = fopen(r.input_file, "w")) == NULL) die("Can't open ", r.input_file); /* compute the sizes for the input and output buffers and allocate the memory */ ibufsize = r.bytes_per_line; if ((indata = (unsigned char *)malloc(ibufsize * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } fbssamp = r.good_bytes / 2 - r.first_sample; fbdsamp = fbssamp / 2; headsize = 2 * r.first_sample; obufsize = 2 * (fbdsamp + r.first_sample); if ((outdata = (unsigned char *)malloc(obufsize * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for output outdata.\n"); exit(-1); } /* find best length of fft (use power of two) for both input and output */ nffti = find_fft_length(fbssamp); nffto = find_fft_length(fbdsamp); if (debug) fprintf(stderr, " nffti %d nffto %d \n", nffti, nffto); /* allocate the memory for the complex arrays */ if ((cin = (fcomplex *)malloc(nffti * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbd \n"); exit(-1); } if ((cout = (fcomplex *)malloc(nffto * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbs \n"); exit(-1); } /* read and write the input and output raw files */ for (k = 0; k < r.num_lines; k++) { fread((void *)indata, sizeof(unsigned char), ibufsize, datafile); fwrite((void *)indata, sizeof(unsigned char), headsize, dataout); /* fill the complex array with complex indata */ for (j = 0; j < nffti; j++) { i = j + r.first_sample; if ((j < fbssamp) && (((int)indata[2 * i]) != NULL_DATA) && (((int)indata[2 * i + 1]) != NULL_DATA)) { cin[j].r = (float)(indata[2 * i] - r.xmi); cin[j].i = (float)(indata[2 * i + 1] - r.xmq); } else { cin[j].r = 0.0; cin[j].i = 0.0; } } /* interpolate from fbs to fbd */ rng_compress(cin, nffti, cout, nffto); /* convert the complex back to bytes */ for (j = 0; j < obufsize / 2; j++) { i = j + r.first_sample; /* increase dynamic range by 2 and set the mean value to 63.5 */ rtest = rintf(2. * cout[j].r + 63.5); itest = rintf(2. * cout[j].i + 63.5); /* sometimes the range can exceed 0-127 so clip the numbers to be in the correct range */ outdata[2 * i] = (unsigned char)clip127(rtest); outdata[2 * i + 1] = (unsigned char)clip127(itest); } fwrite(outdata + headsize, sizeof(unsigned char), obufsize - headsize, dataout); } /* compute the changes to the output PRM-file */ r.xmi = 63.5; r.xmq = 63.5; r.SC_identity = 5; r.chirp_ext = r.chirp_ext / 2; r.good_bytes = 2 * (fbdsamp + r.first_sample); r.bytes_per_line = obufsize; r.num_rng_bins = fbdsamp + r.chirp_ext; r.fs = r.fs / 2.; /* decreasing the pulse duration also changes the near range by 108 pixels */ r.pulsedur = r.pulsedur / 2.; r.near_range = r.near_range - (108. * SOL) / (2. * r.fs); if (debug) fprintf(stderr, " %d %d %d %d %f %f %f \n", r.chirp_ext, r.good_bytes, r.bytes_per_line, r.num_rng_bins, r.fs, r.chirp_slope, r.near_range); /* write the output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("can't open prfile", argv[2]); put_sio_struct(r, prmout); free(indata); free(outdata); free(cin); free(cout); fclose(prmfile); fclose(prmout); fclose(datafile); fclose(dataout); } GMTSAR_V5.7/.svn/pristine/52/526d3b9902f82e7437b35cb7c1e793bcaf83774a.svn-base000444 015705 000000 00000052524 13505462014 025555 0ustar00sandwellwheel000000 000000 /* Structure to read ALOSE signal data */ /* Each structure has write control string (WCS) and pointers (RVL) to aid in input and output. RJM June 2007 Dec. 2009 Modified for RESTEC format. Jeff Bytof 15-Apr-2010 Replace ALOS identifier with ALOSE Jeff Bytof */ /* struct ALOS_image { struct sardata_record *rec1; struct sardata_descriptor *dfd; struct sardata_record *rec2; struct sardata_info *sdr; }; */ /* beginning of short binary segment */ /* struct sardata_record { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; */ /* #define SARDATA_RECORD_WCS "*********** SAR FDR BINARY **********\n"\ "record_seq_no ==> %4x\n"\ "record_subtype_code1 ==> %1x\n"\ "record_type_code1 ==> %1x\n"\ "record_subtype_code2 ==> %1x\n"\ "record_subtype_code3 ==> %1x\n"\ "record_length ==> %4x\n\n" #define SARDATA_RECORD_RVL(SP)\ (SP)->record_seq_no,\ (SP)->record_subtype_code1,\ (SP)->record_type_code1,\ (SP)->record_subtype_code2,\ (SP)->record_subtype_code3,\ (SP)->record_length */ /* end of short binary segment */ /******* CONTINUATION OF RESTEC IMAGE OPTIONS FILE DESCRIPTOR RECORD ********/ struct sardata_descriptor_ALOSE { char ascii_ebcdic_flag[2]; char blank_1[2]; char format_doc_ID[12]; char format_control_level[2]; char file_design_descriptor[2]; char facility_soft_release[12]; char file_number[4]; char file_name[16]; char record_seq_loc_type_flag_1[4]; char record_seq_loc_type_flag_2[8]; char sequence_number_loc[4]; char record_code_loc_flag[4]; char record_code_loc[8]; char record_code_field_length[4]; char record_length_loc_flag[4]; char record_length_loc[8]; char record_length_field_length[4]; char blank_2[68]; char number_sar_data_records[6]; char sar_data_record_length[6]; char blank_3[24]; char num_bits_sample[4]; char num_sample_data_group[4]; char num_bytes_data_group[4]; char just_order_samples[4]; char num_sar_channels[4]; char num_lines_data_set[8]; char num_left_border_pixels[4]; char total_num_data_groups[8]; char num_right_border_pixels[4]; char num_top_border_lines[4]; char num_bottom_border_lines[4]; char interleave_indicator[4]; char num_physical_records_line[2]; char num_physical_records_multi_chan[2]; char num_bytes_prefix[4]; char num_bytes_SAR_data[8]; char num_bytes_suffix[4]; char pref_fix_repeat_flag[4]; char sample_data_lin_no[8]; char SAR_chan_num_loc[8]; char time_SAR_data_line[8]; char left_fill_count[8]; char right_fill_count[8]; char pad_pixels[4]; char blank_4[28]; char sar_data_line_qual_loc[8]; char calib_info_field_loc[8]; char gain_values_field_loc[8]; char bias_values_field_loc[8]; char sar_data_format_code_1[28]; char sar_data_format_code_2[4]; char num_left_fill_bits_pixel[4]; char num_right_fill_bits_pixel[4]; char max_range_pixel[8]; /* char blank_5[272]; */ /* restec format change - bytof */ char blank_5[15804]; /* restec format change - bytof */ }; #define SARDATA_DESCRIPTOR_WCS_ALOSE \ "*********** SAR DATA DESCRIPTOR**********\n" \ "ascii_ebcdic_flag ==> %.2s\n" \ "blank_1 ==> %.2s\n" \ "format_doc_ID ==> %.12s\n" \ "format_control_level ==> %.2s\n" \ "file_design_descriptor ==> %.2s\n" \ "facility_soft_release ==> %.12s\n" \ "file_number ==> %.4s\n" \ "file_name ==> %.16s\n" \ "record_seq_loc_type_flag_1 ==> %.4s\n" \ "record_seq_loc_type_flag_2 ==> %.8s\n" \ "sequence_number_loc ==> %.4s\n" \ "record_code_loc_flag ==> %.4s\n" \ "record_code_loc ==> %.8s\n" \ "record_code_field_length ==> %.4s\n" \ "record_length_loc_flag ==> %.4s\n" \ "record_length_loc ==> %.8s\n" \ "record_length_field_length ==> %.4s\n" \ "blank_2 ==> %.68s\n" \ "number_sar_data_records ==> %.6s\n" \ "sar_data_record_length ==> %.6s\n" \ "blank_3 ==> %.24s\n" \ "num_bits_sample ==> %.4s\n" \ "num_sample_data_group ==> %.4s\n" \ "num_bytes_data_group ==> %.4s\n" \ "just_order_samples ==> %.4s\n" \ "num_sar_channels ==> %.4s\n" \ "num_lines_data_set ==> %.8s\n" \ "num_left_border_pixels ==> %.4s\n" \ "total_num_data_groups ==> %.8s\n" \ "num_right_border_pixels ==> %.4s\n" \ "num_top_border_lines ==> %.4s\n" \ "num_bottom_border_lines ==> %.4s\n" \ "interleave_indicator ==> %.4s\n" \ "num_physical_records_line ==> %.2s\n" \ "num_physical_records_multi_chan ==> %.2s\n" \ "num_bytes_prefix ==> %.4s\n" \ "num_bytes_SAR_data ==> %.8s\n" \ "num_bytes_suffix ==> %.4s\n" \ "pref_fix_repeat_flag ==> %.4s\n" \ "sample_data_lin_no ==> %.8s\n" \ "SAR_chan_num_loc ==> %.8s\n" \ "time_SAR_data_line ==> %.8s\n" \ "left_fill_count ==> %.8s\n" \ "right_fill_count ==> %.8s\n" \ "pad_pixels ==> %.4s\n" \ "blank_4 ==> %.28s\n" \ "sar_data_line_qual_loc ==> %.8s\n" \ "calib_info_field_loc ==> %.8s\n" \ "gain_values_field_loc ==> %.8s\n" \ "bias_values_field_loc ==> %.8s\n" \ "sar_data_format_code_1 ==> %.28s\n" \ "sar_data_format_code_2 ==> %.4s\n" \ "num_left_fill_bits_pixel ==> %.4s\n" \ "num_right_fill_bits_pixel ==> %.4s\n" \ "max_range_pixel ==> %.8s\n" \ "blank_5 ==> %.15804s\n" #define SARDATA_DESCRIPTOR_RVL_ALOSE(SP) \ (SP)->ascii_ebcdic_flag, (SP)->blank_1, (SP)->format_doc_ID, (SP)->format_control_level, (SP)->file_design_descriptor, \ (SP)->facility_soft_release, (SP)->file_number, (SP)->file_name, (SP)->record_seq_loc_type_flag_1, \ (SP)->record_seq_loc_type_flag_2, (SP)->sequence_number_loc, (SP)->record_code_loc_flag, (SP)->record_code_loc, \ (SP)->record_code_field_length, (SP)->record_length_loc_flag, (SP)->record_length_loc, (SP)->record_length_field_length, \ (SP)->blank_2, (SP)->number_sar_data_records, (SP)->sar_data_record_length, (SP)->blank_3, (SP)->num_bits_sample, \ (SP)->num_sample_data_group, (SP)->num_bytes_data_group, (SP)->just_order_samples, (SP)->num_sar_channels, \ (SP)->num_lines_data_set, (SP)->num_left_border_pixels, (SP)->total_num_data_groups, (SP)->num_right_border_pixels, \ (SP)->num_top_border_lines, (SP)->num_bottom_border_lines, (SP)->interleave_indicator, (SP)->num_physical_records_line, \ (SP)->num_physical_records_multi_chan, (SP)->num_bytes_prefix, (SP)->num_bytes_SAR_data, (SP)->num_bytes_suffix, \ (SP)->pref_fix_repeat_flag, (SP)->sample_data_lin_no, (SP)->SAR_chan_num_loc, (SP)->time_SAR_data_line, \ (SP)->left_fill_count, (SP)->right_fill_count, (SP)->pad_pixels, (SP)->blank_4, (SP)->sar_data_line_qual_loc, \ (SP)->calib_info_field_loc, (SP)->gain_values_field_loc, (SP)->bias_values_field_loc, (SP)->sar_data_format_code_1, \ (SP)->sar_data_format_code_2, (SP)->num_left_fill_bits_pixel, (SP)->num_right_fill_bits_pixel, (SP)->max_range_pixel, \ (SP)->blank_5 struct sardata_info_ALOSE { int sequence_number; char subtype[4]; int record_length; int data_line_number; int data_record_index; int n_left_fill_pixels; int n_data_pixels; int n_right_fill_pixels; int sensor_update_flag; int sensor_acquisition_year; int sensor_acquisition_DOY; int sensor_acquisition_msecs_day; short channel_indicator; short channel_code; short transmit_polarization; short receive_polarization; int PRF; int scan_ID; short onboard_range_compress; short chirp_type; int chirp_length; int chirp_constant_coeff; int chirp_linear_coeff; int chirp_quad_coeff; char spare1[4]; char spare2[4]; int receiver_gain; int nought_line_flag; int elec_antenna_elevation_angle; int mech_antenna_elevation_angle; int elec_antenna_squint_angle; int mech_antenna_squint_angle; int slant_range; int data_record_window_position; char spare3[4]; short platform_update_flag; int platform_latitude; int platform_longitude; int platform_altitude; int platform_ground_speed; int platform_velocity_x; int platform_velocity_y; int platform_velocity_z; int platform_acc_x; int platform_acc_y; int platform_acc_z; int platform_track_angle_1; int platform_track_angle_2; int platform_pitch_angle; int platform_roll_angle; int platform_yaw_angle; /* char blank1[92]; */ /* restec format change - bytof */ /* int frame_counter; */ /* restec format change - bytof */ char PALSAR_aux_data[100]; /* char blank2[24]; */ /* restec format change - bytof */ }; #define SARDATA__WCS_ALOSE \ "*********** SAR DATA DESCRIPTOR**********\n" \ "sequence_number ==> %d\n" \ "subtype ==> %.4s\n" \ "record_length ==> %d\n" \ "data_line_number ==> %d\n" \ "data_record_index ==> %d\n" \ "n_left_fill_pixels ==> %d\n" \ "n_data_pixels ==> %d\n" \ "n_right_fill_pixels ==> %d\n" \ "sensor_update_flag ==> %d\n" \ "sensor_acquisition_year ==> %d\n" \ "sensor_acquisition_DOY ==> %d\n" \ "sensor_acquisition_msecs_day ==> %d\n" \ "channel_indicator ==> %d\n" \ "channel_code ==> %d\n" \ "transmit_polarization ==> %d\n" \ "receive_polarization ==> %d\n" \ "PRF ==> %d\n" \ "scan_ID ==> %d\n" \ "onboard_range_compress ==> %d\n" \ "chirp_type ==> %d\n" \ "chirp_length ==> %d\n" \ "chirp_constant_coeff ==> %d\n" \ "chirp_linear_coeff ==> %d\n" \ "chirp_quad_coeff ==> %d\n" \ "receiver_gain ==> %d\n" \ "nought_line_flag ==> %d\n" \ "elec_antenna_elevation_angle ==> %d\n" \ "mech_antenna_elevation_angle ==> %d\n" \ "elec_antenna_squint_angle ==> %d\n" \ "mech_antenna_squint_angle ==> %d\n" \ "slant_range ==> %d\n" \ "data_record_window_position ==> %d\n" \ "platform_update_flag ==> %d\n" \ "platform_latitude ==> %d\n" \ "platform_longitude ==> %d\n" \ "platform_altitude ==> %d\n" \ "platform_ground_speed ==> %d\n" \ "platform_velocity_x ==> %d\n" \ "platform_velocity_y ==> %d\n" \ "platform_velocity_z ==> %d\n" \ "platform_acc_x ==> %d\n" \ "platform_acc_y ==> %d\n" \ "platform_acc_z ==> %d\n" \ "platform_track_angle_1 ==> %d\n" \ "platform_track_angle_2 ==> %d\n" \ "platform_pitch_angle ==> %d\n" \ "platform_roll_angle ==> %d\n" \ "platform_yaw_angle ==> %d\n" /* restec format change - bytof */ /* "frame_counter ==> %d\n" */ /* restec format change - bytof */ #define SARDATA_RVL_ALOSE(SP) \ (SP).sequence_number, (SP).subtype, (SP).record_length, (SP).data_line_number, (SP).data_record_index, \ (SP).n_left_fill_pixels, (SP).n_data_pixels, (SP).n_right_fill_pixels, (SP).sensor_update_flag, \ (SP).sensor_acquisition_year, (SP).sensor_acquisition_DOY, (SP).sensor_acquisition_msecs_day, (SP).channel_indicator, \ (SP).channel_code, (SP).transmit_polarization, (SP).receive_polarization, (SP).PRF, (SP).scan_ID, \ (SP).onboard_range_compress, (SP).chirp_type, (SP).chirp_length, (SP).chirp_constant_coeff, (SP).chirp_linear_coeff, \ (SP).chirp_quad_coeff, (SP).receiver_gain, (SP).nought_line_flag, (SP).elec_antenna_elevation_angle, \ (SP).mech_antenna_elevation_angle, (SP).elec_antenna_squint_angle, (SP).mech_antenna_squint_angle, (SP).slant_range, \ (SP).data_record_window_position, (SP).platform_update_flag, (SP).platform_latitude, (SP).platform_longitude, \ (SP).platform_altitude, (SP).platform_ground_speed, (SP).platform_velocity_x, (SP).platform_velocity_y, \ (SP).platform_velocity_z, (SP).platform_acc_x, (SP).platform_acc_y, (SP).platform_acc_z, (SP).platform_track_angle_1, \ (SP).platform_track_angle_2, (SP).platform_pitch_angle, (SP).platform_roll_angle, \ (SP).platform_yaw_angle /* restec format change - bytof */ /* (SP).frame_counter */ /* restec format change - bytof */ GMTSAR_V5.7/.svn/pristine/52/525fb950f831c35c1fd7dfd796b17e8469824f97.svn-base000444 015705 000000 00000006501 13505462013 025514 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for batch processing # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ####################################### # processing stage for intf_batch.csh # ####################################### # 1 - start from make topo_ra # 2 - start from make and filter interferograms, unwrap and geocode proc_stage = 1 # the namestem of the master image - REQUIRED master_image = ######################################### # parameters for preprocess # # - pre_proc_batch.csh # # following 4 parameters are OPTIONAL # ######################################### # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put DEM.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # region to process in radar coordinates (leave it blank if to process the whole region) # example format 500/10800/500/27200 - OPTIONAL region_cut = # filters # look at the filter/ folder to choose other filters filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # for tops processing, to force the decimation factor # recommended range decimation to be 8, azimuth decimation to be 2 range_dec = 8 azimuth_dec = 2 ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # use landmask (1 -- yes; else -- no) switch_land = 0 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/.svn/pristine/52/52f24a90792aeade940faf238853a092787722c7.svn-base000444 015705 000000 00000001572 13505462013 025406 0ustar00sandwellwheel000000 000000 /* $Id$ */ /******************************************************************************* * Update a parameter in the PRM file and write it out. * * Replaces update_PRM.csh with more robust C-code * * Uses routines written by Anders Hogrelius. * *******************************************************************************/ /******************************************************************************** * Creator: David Sandwell, July 27, 2018 * * * Date : 06/07/2007 * ********************************************************************************/ #include "update_PRM.h" #include "gmtsar.h" char *USAGE = "\nUsage: update_PRM file.PRM parameter value \n"; int main(int argc, char **argv) { if (argc < 3) die(USAGE, ""); update_PRM_sub(argv[1], argv[2], argv[3]); } GMTSAR_V5.7/.svn/pristine/99/99022608e5592a030b219d2fd564feb805ffb902.svn-base000444 015705 000000 00000000141 13505462013 025375 0ustar00sandwellwheel000000 000000 3 3 0.7000 1.0000 0.7000 1.0000 3.0000 1.0000 0.7000 1.0000 0.7000 GMTSAR_V5.7/.svn/pristine/99/99b648bc3c18d0c118b42b9f9924aeb6ffb3209b.svn-base000444 015705 000000 00000000014 13505462013 025702 0ustar00sandwellwheel000000 000000 1 3 .5 1 .5 GMTSAR_V5.7/.svn/pristine/99/9958c9ee3517881fe6aa2e9f52dd20219b9eed27.svn-base000444 015705 000000 00000021532 13505462013 025660 0ustar00sandwellwheel000000 000000 19 19 2.8206295169381546e-01 3.2212600181340278e-01 3.6217599908082571e-01 4.0089228649107739e-01 4.3686764570555725e-01 4.6869056706378820e-01 4.9503589692619859e-01 5.1475588520860704e-01 5.2696296924337094e-01 5.3109599103534522e-01 5.2696296924337094e-01 5.1475588520860704e-01 4.9503589692619859e-01 4.6869056706378820e-01 4.3686764570555725e-01 4.0089228649107739e-01 3.6217599908082571e-01 3.2212600181340278e-01 2.8206295169381546e-01 3.2212600181340278e-01 3.6787944117144233e-01 4.1361797370441067e-01 4.5783336177161427e-01 4.9891851158647194e-01 5.3526142851899028e-01 5.6534873961061416e-01 5.8786967312234650e-01 6.0181060067169445e-01 6.0653065971263342e-01 6.0181060067169445e-01 5.8786967312234650e-01 5.6534873961061416e-01 5.3526142851899028e-01 4.9891851158647194e-01 4.5783336177161427e-01 4.1361797370441067e-01 3.6787944117144233e-01 3.2212600181340278e-01 3.6217599908082571e-01 4.1361797370441067e-01 4.6504318813405632e-01 5.1475588520860704e-01 5.6094916081447077e-01 6.0181060067169445e-01 6.3563867382605199e-01 6.6095963999744889e-01 6.7663384616172895e-01 6.8194075119034814e-01 6.7663384616172895e-01 6.6095963999744889e-01 6.3563867382605199e-01 6.0181060067169445e-01 5.6094916081447077e-01 5.1475588520860704e-01 4.6504318813405632e-01 4.1361797370441067e-01 3.6217599908082571e-01 4.0089228649107739e-01 4.5783336177161427e-01 5.1475588520860704e-01 5.6978282473092301e-01 6.2091411980609579e-01 6.6614361070348771e-01 7.0358787434562753e-01 7.3161562894664178e-01 7.4896539360271563e-01 7.5483960198900735e-01 7.4896539360271563e-01 7.3161562894664178e-01 7.0358787434562753e-01 6.6614361070348771e-01 6.2091411980609579e-01 5.6978282473092301e-01 5.1475588520860704e-01 4.5783336177161427e-01 4.0089228649107739e-01 4.3686764570555725e-01 4.9891851158647194e-01 5.6094916081447077e-01 6.2091411980609579e-01 6.7663384616172895e-01 7.2592215095240831e-01 7.6672659607082005e-01 7.9726951141132441e-01 8.1617621302233978e-01 8.2257756239866464e-01 8.1617621302233978e-01 7.9726951141132441e-01 7.6672659607082005e-01 7.2592215095240831e-01 6.7663384616172895e-01 6.2091411980609579e-01 5.6094916081447077e-01 4.9891851158647194e-01 4.3686764570555725e-01 4.6869056706378820e-01 5.3526142851899028e-01 6.0181060067169445e-01 6.6614361070348771e-01 7.2592215095240831e-01 7.7880078307140488e-01 8.2257756239866464e-01 8.5534532730742252e-01 8.7562925720353824e-01 8.8249690258459546e-01 8.7562925720353824e-01 8.5534532730742252e-01 8.2257756239866464e-01 7.7880078307140488e-01 7.2592215095240831e-01 6.6614361070348771e-01 6.0181060067169445e-01 5.3526142851899028e-01 4.6869056706378820e-01 4.9503589692619859e-01 5.6534873961061416e-01 6.3563867382605199e-01 7.0358787434562753e-01 7.6672659607082005e-01 8.2257756239866464e-01 8.6881505626284317e-01 9.0342471353308673e-01 9.2484881321620482e-01 9.3210249235952758e-01 9.2484881321620482e-01 9.0342471353308673e-01 8.6881505626284317e-01 8.2257756239866464e-01 7.6672659607082005e-01 7.0358787434562753e-01 6.3563867382605199e-01 5.6534873961061416e-01 4.9503589692619859e-01 5.1475588520860704e-01 5.8786967312234650e-01 6.6095963999744889e-01 7.3161562894664178e-01 7.9726951141132441e-01 8.5534532730742252e-01 9.0342471353308673e-01 9.3941306281347581e-01 9.6169060160542530e-01 9.6923323447634413e-01 9.6169060160542530e-01 9.3941306281347581e-01 9.0342471353308673e-01 8.5534532730742252e-01 7.9726951141132441e-01 7.3161562894664178e-01 6.6095963999744889e-01 5.8786967312234650e-01 5.1475588520860704e-01 5.2696296924337094e-01 6.0181060067169445e-01 6.7663384616172895e-01 7.4896539360271563e-01 8.1617621302233978e-01 8.7562925720353824e-01 9.2484881321620482e-01 9.6169060160542530e-01 9.8449643700540845e-01 9.9221793826024351e-01 9.8449643700540845e-01 9.6169060160542530e-01 9.2484881321620482e-01 8.7562925720353824e-01 8.1617621302233978e-01 7.4896539360271563e-01 6.7663384616172895e-01 6.0181060067169445e-01 5.2696296924337094e-01 5.3109599103534522e-01 6.0653065971263342e-01 6.8194075119034814e-01 7.5483960198900735e-01 8.2257756239866464e-01 8.8249690258459546e-01 9.3210249235952758e-01 9.6923323447634413e-01 9.9221793826024351e-01 1.0000000000000000e+00 9.9221793826024351e-01 9.6923323447634413e-01 9.3210249235952758e-01 8.8249690258459546e-01 8.2257756239866464e-01 7.5483960198900735e-01 6.8194075119034814e-01 6.0653065971263342e-01 5.3109599103534522e-01 5.2696296924337094e-01 6.0181060067169445e-01 6.7663384616172895e-01 7.4896539360271563e-01 8.1617621302233978e-01 8.7562925720353824e-01 9.2484881321620482e-01 9.6169060160542530e-01 9.8449643700540845e-01 9.9221793826024351e-01 9.8449643700540845e-01 9.6169060160542530e-01 9.2484881321620482e-01 8.7562925720353824e-01 8.1617621302233978e-01 7.4896539360271563e-01 6.7663384616172895e-01 6.0181060067169445e-01 5.2696296924337094e-01 5.1475588520860704e-01 5.8786967312234650e-01 6.6095963999744889e-01 7.3161562894664178e-01 7.9726951141132441e-01 8.5534532730742252e-01 9.0342471353308673e-01 9.3941306281347581e-01 9.6169060160542530e-01 9.6923323447634413e-01 9.6169060160542530e-01 9.3941306281347581e-01 9.0342471353308673e-01 8.5534532730742252e-01 7.9726951141132441e-01 7.3161562894664178e-01 6.6095963999744889e-01 5.8786967312234650e-01 5.1475588520860704e-01 4.9503589692619859e-01 5.6534873961061416e-01 6.3563867382605199e-01 7.0358787434562753e-01 7.6672659607082005e-01 8.2257756239866464e-01 8.6881505626284317e-01 9.0342471353308673e-01 9.2484881321620482e-01 9.3210249235952758e-01 9.2484881321620482e-01 9.0342471353308673e-01 8.6881505626284317e-01 8.2257756239866464e-01 7.6672659607082005e-01 7.0358787434562753e-01 6.3563867382605199e-01 5.6534873961061416e-01 4.9503589692619859e-01 4.6869056706378820e-01 5.3526142851899028e-01 6.0181060067169445e-01 6.6614361070348771e-01 7.2592215095240831e-01 7.7880078307140488e-01 8.2257756239866464e-01 8.5534532730742252e-01 8.7562925720353824e-01 8.8249690258459546e-01 8.7562925720353824e-01 8.5534532730742252e-01 8.2257756239866464e-01 7.7880078307140488e-01 7.2592215095240831e-01 6.6614361070348771e-01 6.0181060067169445e-01 5.3526142851899028e-01 4.6869056706378820e-01 4.3686764570555725e-01 4.9891851158647194e-01 5.6094916081447077e-01 6.2091411980609579e-01 6.7663384616172895e-01 7.2592215095240831e-01 7.6672659607082005e-01 7.9726951141132441e-01 8.1617621302233978e-01 8.2257756239866464e-01 8.1617621302233978e-01 7.9726951141132441e-01 7.6672659607082005e-01 7.2592215095240831e-01 6.7663384616172895e-01 6.2091411980609579e-01 5.6094916081447077e-01 4.9891851158647194e-01 4.3686764570555725e-01 4.0089228649107739e-01 4.5783336177161427e-01 5.1475588520860704e-01 5.6978282473092301e-01 6.2091411980609579e-01 6.6614361070348771e-01 7.0358787434562753e-01 7.3161562894664178e-01 7.4896539360271563e-01 7.5483960198900735e-01 7.4896539360271563e-01 7.3161562894664178e-01 7.0358787434562753e-01 6.6614361070348771e-01 6.2091411980609579e-01 5.6978282473092301e-01 5.1475588520860704e-01 4.5783336177161427e-01 4.0089228649107739e-01 3.6217599908082571e-01 4.1361797370441067e-01 4.6504318813405632e-01 5.1475588520860704e-01 5.6094916081447077e-01 6.0181060067169445e-01 6.3563867382605199e-01 6.6095963999744889e-01 6.7663384616172895e-01 6.8194075119034814e-01 6.7663384616172895e-01 6.6095963999744889e-01 6.3563867382605199e-01 6.0181060067169445e-01 5.6094916081447077e-01 5.1475588520860704e-01 4.6504318813405632e-01 4.1361797370441067e-01 3.6217599908082571e-01 3.2212600181340278e-01 3.6787944117144233e-01 4.1361797370441067e-01 4.5783336177161427e-01 4.9891851158647194e-01 5.3526142851899028e-01 5.6534873961061416e-01 5.8786967312234650e-01 6.0181060067169445e-01 6.0653065971263342e-01 6.0181060067169445e-01 5.8786967312234650e-01 5.6534873961061416e-01 5.3526142851899028e-01 4.9891851158647194e-01 4.5783336177161427e-01 4.1361797370441067e-01 3.6787944117144233e-01 3.2212600181340278e-01 2.8206295169381546e-01 3.2212600181340278e-01 3.6217599908082571e-01 4.0089228649107739e-01 4.3686764570555725e-01 4.6869056706378820e-01 4.9503589692619859e-01 5.1475588520860704e-01 5.2696296924337094e-01 5.3109599103534522e-01 5.2696296924337094e-01 5.1475588520860704e-01 4.9503589692619859e-01 4.6869056706378820e-01 4.3686764570555725e-01 4.0089228649107739e-01 3.6217599908082571e-01 3.2212600181340278e-01 2.8206295169381546e-01 GMTSAR_V5.7/.svn/pristine/6c/6c397f9064568e138e51e288cd49a80afb0f27e8.svn-base000444 015705 000000 00000002453 13505462013 025567 0ustar00sandwellwheel000000 000000 /************************************************************************ * trans_col calls a 1-D fft on columns of data. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * * * ************************************************************************/ #include "gmt.h" #include "soi.h" #include #include int trans_col(void *API, int xnum, int ynum, fcomplex **data) { int i, k; fcomplex *fft_vec; if ((fft_vec = (fcomplex *)malloc(ynum * sizeof(fcomplex))) == NULL) { fprintf(stderr, "trans_col: Can't allocate memory for fft_vec.\n"); return (-1); } for (i = 0; i < xnum; i++) { for (k = 0; k < ynum; k++) { fft_vec[k] = data[k][i]; } // dir = -1; // cfft1d_(&ynum,fft_vec,&dir); GMT_FFT_1D(API, (float *)fft_vec, ynum, GMT_FFT_FWD, GMT_FFT_COMPLEX); for (k = 0; k < ynum; k++) { data[k][i] = fft_vec[k]; } } free((void *)fft_vec); return (0); } GMTSAR_V5.7/.svn/pristine/06/06673c28b8c69ff1128b7047723fb763825517be.svn-base000444 015705 000000 00000072077 13505462014 025263 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu utility function source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* function: IsTrue() * ------------------ * Returns TRUE if the string input is any of TRUE, True, true, 1, * y, Y, yes, YES */ int IsTrue(char *str){ if(!strcmp(str,"TRUE") || !strcmp(str,"true") || !strcmp(str,"True") || !strcmp(str,"1") || !strcmp(str,"y") || !strcmp(str,"Y") || !strcmp(str,"yes") || !strcmp(str,"YES") || !strcmp(str,"Yes")){ return(TRUE); }else{ return(FALSE); } } /* function: IsFalse() * ------------------ * Returns FALSE if the string input is any of FALSE, False, false, * 0, n, N, no, NO */ int IsFalse(char *str){ if(!strcmp(str,"FALSE") || !strcmp(str,"false") || !strcmp(str,"False") || !strcmp(str,"0") || !strcmp(str,"n") || !strcmp(str,"N") || !strcmp(str,"no") || !strcmp(str,"NO") || !strcmp(str,"No")){ return(TRUE); }else{ return(FALSE); } } /* function: SetBoolenaSignedChar() * -------------------------------- * Sets the value of a signed character based on the string argument passed. * Returns TRUE if the string was not a valid value, FALSE otherwise. */ signed char SetBooleanSignedChar(signed char *boolptr, char *str){ if(IsTrue(str)){ (*boolptr)=TRUE; return(FALSE); }else if(IsFalse(str)){ (*boolptr)=FALSE; return(FALSE); } return(TRUE); } /* function: ModDiff() * ------------------- * Computes floating point difference between two numbers. * f1 and f2 should be between [0,2pi). The result is the * modulo difference between (-pi,pi]. Assumes that * PI and TWOPI have been defined. */ double ModDiff(double f1, double f2){ double f3; f3=f1-f2; if(f3>PI){ f3-=TWOPI; }else if(f3<=-PI){ f3+=TWOPI; } return(f3); } /* function: WrapPhase() * --------------------- * Makes sure the passed float array is properly wrapped into the [0,2pi) * interval. */ void WrapPhase(float **wrappedphase, long nrow, long ncol){ long row, col; for(row=0;row=0.5){ dpsi[row][col]-=1.0; }else if(dpsi[row][col]<-0.5){ dpsi[row][col]+=1.0; } } } paddpsi=MirrorPad(dpsi,nrow,ncol-1,(kperpdpsi-1)/2,(kpardpsi-1)/2); if(paddpsi==dpsi){ fprintf(sp0,"Wrapped-gradient averaging box too large " "for input array size\nAbort\n"); exit(ABNORMAL_EXIT); } BoxCarAvg(avgdpsi,paddpsi,nrow,ncol-1,kperpdpsi,kpardpsi); Free2DArray((void **)paddpsi,nrow+kperpdpsi-1); } /* function: CalcWrappedAzDiffs() * --------------------------------- * Computes an array of wrapped phase differences in range (across rows). * Input wrapped phase array should be in radians. Output is in cycles. */ void CalcWrappedAzDiffs(float **dpsi, float **avgdpsi, float **wrappedphase, long kperpdpsi, long kpardpsi, long nrow, long ncol){ long row, col; float **paddpsi; for(row=0;row=0.5){ dpsi[row][col]-=1.0; }else if(dpsi[row][col]<-0.5){ dpsi[row][col]+=1.0; } } } paddpsi=MirrorPad(dpsi,nrow-1,ncol,(kpardpsi-1)/2,(kperpdpsi-1)/2); if(paddpsi==dpsi){ fprintf(sp0,"Wrapped-gradient averaging box too large " "for input array size\nAbort\n"); exit(ABNORMAL_EXIT); } BoxCarAvg(avgdpsi,paddpsi,nrow-1,ncol,kpardpsi,kperpdpsi); Free2DArray((void **)paddpsi,nrow-1+kpardpsi-1); } /* function: CycleResidue() * ------------------------ * Computes the cycle array of a phase 2D phase array. Input arrays * should be type float ** and signed char ** with memory pre-allocated. * Numbers of rows and columns in phase array should be passed. * Residue array will then have size nrow-1 x ncol-1. Residues will * always be -1, 0, or 1 if wrapped phase is passed in. */ void CycleResidue(float **phase, signed char **residue, int nrow, int ncol){ int row, col; float **rowdiff, **coldiff; rowdiff=(float **)Get2DMem(nrow-1,ncol,sizeof(float *),sizeof(float)); coldiff=(float **)Get2DMem(nrow,ncol-1,sizeof(float *),sizeof(float)); for(row=0;rowflipphasesign){ for(row=0;rowflipphasesign){ for(row=0;row<2*nrow-1;row++){ if(row= 199901L return(isfinite(d)); #else return(finite(d)); #endif /* return(isfinite(d)); */ /* return(!(isnan(d) || isinf(d))); */ /* return(TRUE) */ } /* function: LRound() * ------------------ * Rounds a floating point number to the nearest integer. * The function takes a float and returns a long. */ long LRound(double a){ return((long )rint(a)); } /* function: Short2DRowColAbsMax() * ------------------------------- * Returns the maximum of the absolute values of element in a * two-dimensional short array. The number of rows and columns * should be passed in. */ long Short2DRowColAbsMax(short **arr, long nrow, long ncol){ long row, col, maxval; maxval=0; for(row=0;rowmaxval){ maxval=labs(arr[row][col]); } } } for(row=nrow-1;row<2*nrow-1;row++){ for(col=0;colmaxval){ maxval=labs(arr[row][col]); } } } return(maxval); } /* function: LinInterp1D() * ----------------------- * Given an array of floats, interpolates at the specified noninteger * index. Returns first or last array value if index is out of bounds. */ float LinInterp1D(float *arr, double index, long nelem){ long intpart; double fracpart; intpart=(long )floor(index); fracpart=index-intpart; if(intpart<0){ return(arr[0]); }else if(intpart>=nelem-1){ return(arr[nelem-1]); }else{ return(((1-fracpart)*arr[intpart]+fracpart*arr[intpart+1])/2.0); } } /* function: LinInterp2D() * ----------------------- * Given a 2-D array of floats, interpolates at the specified noninteger * indices. Returns first or last array values if index is out of bounds. */ float LinInterp2D(float **arr, double rowind, double colind , long nrow, long ncol){ long rowintpart; double rowfracpart; rowintpart=(long )floor(rowind); rowfracpart=rowind-rowintpart; if(rowintpart<0){ return(LinInterp1D(arr[0],colind,ncol)); }else if(rowintpart>=nrow-1){ return(LinInterp1D(arr[nrow-1],colind,ncol)); }else{ return(((1-rowfracpart)*LinInterp1D(arr[rowintpart],colind,ncol) +rowfracpart*LinInterp1D(arr[rowintpart+1],colind,ncol))/2.0); } } /* function: Despeckle() * --------------------- * Filters magnitude/power data with adaptive geometric filter to get rid of * speckle. Allocates 2D memory for ei. Does not square before averaging. */ void Despeckle(float **mag, float ***ei, long nrow, long ncol){ float **intensity; double ratio, ratiomax, wfull, wstick, w[NARMS+1]; long row, col, i, j, k, Irow, Icol; short jmin[5]={2,2,0,1,2}; short jmax[5]={2,3,4,3,2}; enum{ C=0, T, B, R, L, TR, BL, TL, BR}; /* get memory for output array */ if(*ei==NULL){ (*ei)=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); } /* pad magnitude and place into new array (don't touch original data) */ intensity=MirrorPad(mag,nrow,ncol,ARMLEN,ARMLEN); if(intensity==mag){ fprintf(sp0,"Despeckling box size too large for input array size\n" "Abort\n"); exit(ABNORMAL_EXIT); } /* do the filtering */ for(row=0;rowratiomax){ ratiomax=ratio; (*ei)[row][col]=wstick; } } } } } /* free memory */ Free2DArray((void **)intensity,nrow+2*ARMLEN); } /* function: MirrorPad() * --------------------- * Returns pointer to 2D array where passed array is in center and * edges are padded by mirror reflections. If the pad dimensions are * too large for the array size, a pointer to the original array is * returned. */ float **MirrorPad(float **array1, long nrow, long ncol, long krow, long kcol){ long row, col; float **array2; /* get memory */ array2=(float **)Get2DMem(nrow+2*krow,ncol+2*kcol, sizeof(float *),sizeof(float)); /* center array1 in new array */ for(row=0;rownrow || kcol>ncol){ return(array1); } /* mirror reflect edges */ for(row=0;row=HUGE_VAL || tempdouble<=-HUGE_VAL){ return(TRUE); }else{ *d=tempdouble; return(FALSE); } } /* function: StringToLong() * ------------------------ * Uses strtol to convert a string to a base-10 long, but also does error * checking. If any part of the string is not converted, the function does * not make the assignment and returns TRUE. Otherwise, returns FALSE. */ int StringToLong(char *str, long *l){ long templong; char *endp; endp=str; templong=strtol(str,&endp,10); if(strlen(endp) || templong==LONG_MAX || templong==LONG_MIN){ return(TRUE); }else{ *l=templong; return(FALSE); } } /* function: CatchSignals() * ------------------------ * Traps common signals that by default cause the program to abort. * Sets (pointer to function) Handler as the signal handler for all. * Note that SIGKILL usually cannot be caught. No return value. */ void CatchSignals(void (*SigHandler)(int)){ signal(SIGHUP,SigHandler); signal(SIGINT,SigHandler); signal(SIGQUIT,SigHandler); signal(SIGILL,SigHandler); signal(SIGABRT,SigHandler); signal(SIGFPE,SigHandler); signal(SIGSEGV,SigHandler); signal(SIGPIPE,SigHandler); signal(SIGALRM,SigHandler); signal(SIGTERM,SigHandler); signal(SIGBUS,SigHandler); } /* function: SetDump() * ------------------- * Set the global variable dumpresults_global to TRUE if SIGINT or SIGHUP * signals recieved. Also sets requestedstop_global if SIGINT signal * received. This function should only be called via signal() when * a signal is caught. */ void SetDump(int signum){ if(signum==SIGINT){ /* exit if we receive another interrupt */ signal(SIGINT,exit); /* print nice message and set global variables so program knows to exit */ fprintf(sp0,"\n\nSIGINT signal caught. Please wait for graceful exit\n"); fprintf(sp0,"(One more interrupt signal halts job)\n"); dumpresults_global=TRUE; requestedstop_global=TRUE; }else if(signum==SIGHUP){ /* make sure the hangup signal doesn't revert to default behavior */ signal(SIGHUP,SetDump); /* print a nice message, and set the dump variable */ fprintf(sp0,"\n\nSIGHUP signal caught. Dumping results\n"); dumpresults_global=TRUE; }else{ fprintf(sp0,"WARNING: Invalid signal (%d) passed to signal handler\n", signum); } } /* function: KillChildrenExit() * ---------------------------- * Signal handler that sends a KILL signal to all processes in the group * so that children exit when parent exits. */ void KillChildrenExit(int signum){ fprintf(sp0,"Parent received signal %d\nKilling children and exiting\n", signum); fflush(NULL); signal(SIGTERM,SIG_IGN); kill(0,SIGTERM); exit(ABNORMAL_EXIT); } /* function: SignalExit() * ---------------------- * Signal hanlder that prints message about the signal received, then exits. */ void SignalExit(int signum){ signal(SIGTERM,SIG_IGN); fprintf(sp0,"Exiting with status %d on signal %d\n",ABNORMAL_EXIT,signum); fflush(NULL); exit(ABNORMAL_EXIT); } /* function: StartTimers() * ----------------------- * Starts the wall clock and CPU timers for use in conjunction with * DisplayElapsedTime(). */ void StartTimers(time_t *tstart, double *cputimestart){ struct rusage usagebuf; *tstart=time(NULL); *cputimestart=-1.0; if(!getrusage(RUSAGE_SELF,&usagebuf)){ *cputimestart=(double )(usagebuf.ru_utime.tv_sec +(usagebuf.ru_utime.tv_usec/(double )1000000) +usagebuf.ru_stime.tv_sec +(usagebuf.ru_stime.tv_usec/(double )1000000)); if(!getrusage(RUSAGE_CHILDREN,&usagebuf)){ *cputimestart+=(double )(usagebuf.ru_utime.tv_sec +(usagebuf.ru_utime.tv_usec/(double )1000000) +usagebuf.ru_stime.tv_sec +(usagebuf.ru_stime.tv_usec/(double )1000000)); } } } /* function: DisplayElapsedTime() * ------------------------------ * Displays the elapsed wall clock and CPU times for the process and its * children. Times should be initialized at the start of the program with * StartTimers(). The code is written to show the total processor time * for the parent process and all of its children, but whether or not * this is actually done depends on the implementation of the system time * functions. */ void DisplayElapsedTime(time_t tstart, double cputimestart){ double cputime, walltime, seconds; long hours, minutes; time_t tstop; struct rusage usagebuf; cputime=-1.0; if(!getrusage(RUSAGE_CHILDREN,&usagebuf)){ cputime=(double )(usagebuf.ru_utime.tv_sec +(usagebuf.ru_utime.tv_usec/(double )1000000) +usagebuf.ru_stime.tv_sec +(usagebuf.ru_stime.tv_usec/(double )1000000)); if(!getrusage(RUSAGE_SELF,&usagebuf)){ cputime+=(double )(usagebuf.ru_utime.tv_sec +(usagebuf.ru_utime.tv_usec/(double )1000000) +usagebuf.ru_stime.tv_sec +(usagebuf.ru_stime.tv_usec/(double )1000000)); } } tstop=time(NULL); if(cputime>0 && cputimestart>=0){ cputime-=cputimestart; hours=(long )floor(cputime/3600); minutes=(long )floor((cputime-3600*hours)/60); seconds=cputime-3600*hours-60*minutes; fprintf(sp1,"Elapsed processor time: %ld:%02ld:%05.2f\n", hours,minutes,seconds); } if(tstart>0 && tstop>0){ walltime=tstop-tstart; hours=(long )floor(walltime/3600); minutes=(long )floor((walltime-3600*hours)/60); seconds=walltime-3600*hours-60*minutes; fprintf(sp1,"Elapsed wall clock time: %ld:%02ld:%02ld\n", hours,minutes,(long )seconds); } } /* function: LongCompare() * ----------------------- * Compares two long integers. For use with qsort(). */ int LongCompare(const void *c1, const void *c2){ return((*((long *)c1))-(*((long *)c2))); } GMTSAR_V5.7/.svn/pristine/01/01adffb8999f1a7d096e03cb6653f6785fdca142.svn-base000444 015705 000000 00000005035 13505462013 025700 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 4 2010 # M. Wei MAY 4 2010 - ENVISAT # # Align a slave image to a master image and check results # alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv < 2) then echo "" echo "Usage: align_ALOS_SLC.csh master_name slave_name [supermaster_name]" echo "" echo " The supermaster_namestem is required if this is secondary alignment." echo "" echo "Example: align_ALOS_SLC.csh IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A " echo "" exit 1 endif # # focus the master if necessary # Do it no matter what for now. Put SLC_file to PRM. Might not be necessary # if(! -f $1.SLC) then ln -s ../raw/$1.SLC . cp ../raw/$1.PRM . update_PRM $1.PRM SLC_file $1.SLC endif # # focus the slave image # # check the range sampling rate # set rng_samp_rate_m = `grep rng_samp_rate $1.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate $2.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ($rng_samp_rate_m != $rng_samp_rate_s) then echo "The range sampling rate for master and slave differ" echo "Need to run the interferogram in steps until process2pass.csh is fixed" exit 1 endif echo "align.csh" if(! -f $2.SLC) then ln -s ../raw/$2.SLC . cp ../raw/$2.PRM . update_PRM $2.PRM SLC_file $2.SLC endif # # get the starting alignment parameters and run xcorr # cp $1.PRM $1.PRM0 cp $2.PRM $2.PRM0 if($#argv == 3) then set RSHIFT = `SAT_baseline $3.PRM $2.PRM | grep rshift | awk '{print $3}'` set ASHIFT = `SAT_baseline $3.PRM $2.PRM | grep ashift | awk '{print $3}'` # # use the PRF of the supermaster in the surrogate master # set PRF = `grep PRF $3.PRM | awk '{print $3}'` update_PRM $1.PRM PRM $PRF else set RSHIFT = `SAT_baseline $1.PRM $2.PRM | grep rshift | awk '{print $3}'` set ASHIFT = `SAT_baseline $1.PRM $2.PRM | grep ashift | awk '{print $3}'` endif update_PRM $2.PRM rshift $RSHIFT update_PRM $2.PRM ashift $ASHIFT echo "align.csh" echo "correlate master and slave to find offset parameters" xcorr $1.PRM $2.PRM -xsearch 64 -ysearch 64 -nx 32 -ny 64 # mv $2.PRM junk.PRM cp $1.PRM0 $1.PRM grep -v shift < junk.PRM > $2.PRM # # put in the alignment parameters # fitoffset.csh 3 3 freq_xcorr.dat 18 >> $2.PRM mv freq_xcorr.dat xcorr_$1_$2.dat0 # # refocus the second image # echo "resamp slave" resamp $1.PRM $2.PRM $2.PRMresamp $2.SLCresamp 4 rm $2.SLC mv $2.SLCresamp $2.SLC cp $2.PRMresamp $2.PRM # rm junk* #done GMTSAR_V5.7/.svn/pristine/01/015db74211e4a68d1c7fd17eaff526a1a2f89136.svn-base000444 015705 000000 00000002406 13505462013 025571 0ustar00sandwellwheel000000 000000 /* $Id: read_optional_args.c 33 2013-04-06 05:37:15Z pwessel $ */ #include "gmtsar.h" #include "lib_functions.h" /*--------------------------------------------------------------*/ /* read topo_ra and model files if provided */ /* must be in GMT binary grd format */ void read_optional_args(int argc, char **argv, struct PRM *tp, int *topoflag, struct PRM *mp, int *modelflag) { int i; int nx, ny; FILE *fin; for (i = 3; i < argc; i++) { if (strcmp(argv[i], "-topo") == 0) { fprintf(stderr, "reading topo %s\n", argv[i + 1]); strcpy(tp->input_file, argv[i + 1]); fin = fopen(tp->input_file, "r"); if (fin == NULL) die("cannot open topofile", tp->input_file); read_GMT_binary_dimensions(fin, &nx, &ny); fclose(fin); tp->num_rng_bins = nx; tp->num_lines = ny; *topoflag = 1; i++; } if (strcmp(argv[i], "-model") == 0) { fprintf(stderr, "reading model %s\n", argv[i + 1]); strcpy(mp->input_file, argv[i + 1]); fin = fopen(tp->input_file, "r"); if (fin == NULL) die("cannot open model file", mp->input_file); read_GMT_binary_dimensions(fin, &nx, &ny); fclose(fin); mp->num_rng_bins = nx; mp->num_lines = ny; *modelflag = 1; i++; } } } /*--------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/01/01b1b35a9a421f0823b08b26ec9fbde120c1f982.svn-base000444 015705 000000 00000000341 13505462013 025545 0ustar00sandwellwheel000000 000000 #ifndef SFD_COMPLEX_H #define SFD_COMPLEX_H typedef struct SCOMPLEX { short r, i; } scomplex; typedef struct FCOMPLEX { float r, i; } fcomplex; typedef struct DCOMPLEX { double r, i; } dcomplex; #endif /* SFD_COMPLEX_H */ GMTSAR_V5.7/.svn/pristine/01/01d23a3837b4c515fa8a221ba0242cc5ac77edef.svn-base000444 015705 000000 00000006246 13505462013 025713 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for batch processing # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ####################################### # processing stage for intf_batch.csh # ####################################### # 1 - start from make topo_ra # 2 - start from make and filter interferograms, unwrap and geocode proc_stage = 1 # the namestem of the master image - REQUIRED master_image = ######################################### # parameters for preprocess # # - pre_proc_batch.csh # # following 4 parameters are OPTIONAL # ######################################### # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put DEM.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 1 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # filters # look at the filter/ folder to choose other filters filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 - OPTIONAL region_cut = # use landmask (1 -- yes; else -- no) switch_land = 0 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/.svn/pristine/6d/6d05b0d95ecd1bb11b8ea53074c5f5577b401fae.svn-base000444 015705 000000 00000000025 13505462014 026007 0ustar00sandwellwheel000000 000000 link ../usr/local/libGMTSAR_V5.7/.svn/pristine/6d/6d4fc8a2575f1b9c7d446d0d4160e779c6666bd4.svn-base000444 015705 000000 00000000207 13505462014 025634 0ustar00sandwellwheel000000 000000 # # $Id$ # # Add subdirectories add_subdirectory (ALOS_preproc) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/.svn/pristine/6d/6d1bbf1707ebaa83378cdc832d7ade083640581a.svn-base000444 015705 000000 00000131413 13505462014 025745 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU and David Sandwell * * (Scripps Institution of Oceanography) * * Date : 02/01/2016 * ***************************************************************************/ /*************************************************************************** * Adapted from previous make_slc_s1a_tops code, start with point-by-point * * precise shift for aligning two images * * * * 01/28/16 EXU added resampling module to do point-by-point co-registr * * 01/30/16 EXU added grid reading part to read in shift LUT * * 02/08/16 EXU added burst shift to take account conditions images have * * a few bursts offset (not used now) * * 02/17/16 EXU modified outputing SLCH SLCL, added BB file, for ESD use * * 03/15/16 EXU modified dramp-dmod to read in correct parameters, fnc etc.* * 04/05/16 EXU added elevation antenna pattern for early version * * * ***************************************************************************/ /*************************************************************************** * Modification history of previous make_slc_s1a_tops code: * * * * Date : 08/21/15 DTS begin modification for precision shifting * * Date : 10/24/15 DTS Added the deramp and reramp * * Date : 12/29/15 DTS added 3-parameter phase shift and reramp * * Date : 01/14/16 EXU added range stretch and line interpolator * * * ***************************************************************************/ #include "PRM.h" #include "ctype.h" #include "gmtsar.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include "tiffio.h" #include #include #include #include #define max(a, b) (((a) > (b)) ? (a) : (b)) typedef struct burst_bounds { int SL; int SC; int SH; int EL; int EC; int EH; } burst_bounds; int pop_led(struct tree *, struct state_vector *); int write_orb(struct state_vector *sv, FILE *fp, int); int pop_burst(struct PRM *, struct tree *, struct burst_bounds *, char *, char *); double dramp_dmod(struct tree *, int, fcomplex *, int, int, int, struct GMT_GRID *, struct GMT_GRID *, int, int); double shift_write_slc(void *, struct PRM *, struct tree *, burst_bounds *, int, TIFF *, FILE *, FILE *, FILE *, char *, char *); int shift_burst(fcomplex *, fcomplex *, int, int, int, struct GMT_GRID *, struct GMT_GRID *, int); int compute_eap(fcomplex *, struct tree *, int); void fbisinc(double *, fcomplex *, int, int, fcomplex *); int get_words(char *); char *USAGE = "\nUsage: make_slc_s1a_tops xml_file tiff_file output mode dr.grd da.grd\n" " xml_file - name of xml file \n" " tiff_file - name of tiff file \n" " output - stem name of output files .PRM, .LED, .SLC \n" " mode - (0) no SLC; (1) center SLC; (2) high SLCH and low " "SLCL \n" " dr.grd - range shift table to be read in \n" " da.grd - azimuth shift table to be read in \n" "\nExample: make_slc_s1a_tops s1a-s1-slc-vv-20140807.xml " "s1a-s1-slc-vv-20140807.tiff S1A20140807 1 dr.grd da.grd\n" "\n make_slc_s1a_tops s1a-s1-slc-vv-20140807.xml " "s1a-s1-slc-vv-20140807.tiff S1A20140807 1\n" "\nOutput: mode 1: S1A20140807.PRM S1A20140807.LED S1A20140807.SLC\n" "\n mode 2: S1A20140807.PRM S1A20140807.LED S1A20140807.SLCH " "S1A20140807.SLCL S1A20140807.BB\n" "\nNote: if dr and da are not given, SLCs will be written with no shifts.\n" "\n s1a-aux.xml and manifest.safe(exclude the first line) should be " "concatenated to the xml_file for \n" "\n acquisitions acquired before Mar 2015 (IPF version change). If " "not concatenated or IPF version is 2.43+, \n" "\n elevation antenna pattern correction(EAP) will not be applied\n"; int main(int argc, char **argv) { FILE *XML_FILE, *OUTPUT_PRM, *OUTPUT_LED; FILE *OUTPUT_SLCL = NULL, *OUTPUT_SLCC = NULL, *OUTPUT_SLCH = NULL, *BB = NULL; TIFF *TIFF_FILE; char tmp_str[200], rshifts[200], ashifts[200]; struct PRM prm; struct tree *xml_tree; struct state_vector sv[400]; struct burst_bounds bb[200]; int ch, n = 0, nc = 0, nlmx = 0, imode = 0; double spec_sep = 0.0, dta = 0.0; // Begin: Initializing new GMT session void *API = NULL; // GMT API control structure if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; if (argc == 5) { rshifts[0] = '\0'; ashifts[0] = '\0'; } else if (argc == 7) { strcpy(rshifts, argv[5]); strcpy(ashifts, argv[6]); } else { die(USAGE, ""); } null_MEM_STR(); imode = atoi(argv[4]); // find the number of lines and the maximum line length of the xml file if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } fclose(XML_FILE); printf("Reading in %d lines of info from XML...\n", n); xml_tree = (struct tree *)malloc(n * 5 * sizeof(struct tree)); // generate the xml tree if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_tree(XML_FILE, xml_tree, 1); fclose(XML_FILE); // show_tree(xml_tree,0,0); // generate the LED file n = pop_led(xml_tree, sv); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // initiate the prm null_sio_struct(&prm); // analyze the burst and generate the PRM pop_burst(&prm, xml_tree, bb, argv[3], argv[2]); // open the TIFF file and the three SLC files SLCL-low SLCC-center and // SLCH-high TIFFSetWarningHandler(NULL); if ((TIFF_FILE = TIFFOpen(argv[2], "rb")) == NULL) die("Couldn't open tiff file: \n", argv[2]); // open output files depending on the imode imode = atoi(argv[4]); if (imode == 1) { strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLCC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(C) file: \n", tmp_str); } else if (imode == 2) { strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLCL"); if ((OUTPUT_SLCL = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(L) file: \n", tmp_str); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLCH"); if ((OUTPUT_SLCH = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(H) file: \n", tmp_str); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".BB"); if ((BB = fopen(tmp_str, "w")) == NULL) die("Couldn't open burst boundary file: \n", tmp_str); } else { // don't open any files } /* apply range and azimuth shifts to each burst and write the three SLC files * SLCL SLC and SLCH depending on imode */ if (imode == 1 || imode == 2) { spec_sep = shift_write_slc(API, &prm, xml_tree, bb, imode, TIFF_FILE, OUTPUT_SLCL, OUTPUT_SLCC, OUTPUT_SLCH, rshifts, ashifts); } /* shift applied */ // write the boundary file if mode == 2 if (imode == 2) { search_tree(xml_tree, "/product/swathTiming/burstList/", tmp_str, 3, 0, 1); nc = (int)str2double(tmp_str); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_str, 1, 0, 1); dta = str2double(tmp_str); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfSamples/", tmp_str, 1, 0, 1); fprintf(BB, "%d %d %.6f %.12f\n", nc, (int)str2double(tmp_str) - (int)str2double(tmp_str) % 4, spec_sep, dta); for (n = 1; n <= nc; n++) { fprintf(BB, "%d %d %d %d %d %d\n", bb[n].SL, bb[n].SC, bb[n].SH, bb[n].EL, bb[n].EC, bb[n].EH); } } TIFFClose(TIFF_FILE); if (imode == 2) fclose(OUTPUT_SLCL); if (imode == 1) fclose(OUTPUT_SLCC); if (imode == 2) fclose(OUTPUT_SLCH); if (imode == 2) fclose(BB); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); free(xml_tree); if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } int pop_led(tree *xml_tree, state_vector *sv) { int i, count; char tmp_c[200]; double tmp_d; search_tree(xml_tree, "/product/generalAnnotation/orbitList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); for (i = 0; i < count; i++) { search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 2, 4, i + 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 1, 4, i + 1); tmp_c[4] = '\0'; sv[i].yr = (int)(str2double(tmp_c)); sv[i].jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); sv[i].sec = (tmp_d - trunc(tmp_d)) * 86400; search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/x/", tmp_c, 1, 4, i + 1); sv[i].x = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/y/", tmp_c, 1, 4, i + 1); sv[i].y = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/z/", tmp_c, 1, 4, i + 1); sv[i].z = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, i + 1); sv[i].vx = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, i + 1); sv[i].vy = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, i + 1); sv[i].vz = str2double(tmp_c); } printf("Writing %d lines for orbit...\n", count); return (count); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 100.0) / 100.0 - trunc((sv[0].sec) * 100.0) / 100.0; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.6lf %lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_burst(struct PRM *prm, tree *xml_tree, struct burst_bounds *bb, char *file_name, char *tiff_name) { char tmp_c[200], tmp_cc[60000]; double tmp_d, dt, t[100]; int i, j, k, nl = 0, nlf, ntl = 0, count, lpb, tmp_i, flag, flag0; int k_start = 0, kC; int *kF, *ksa, *ksr, *kea, *ker, *kover; double t0 = -1., time; char *cflag, *cflag_orig; int first_samp = 1; int lines_this_burst = 0; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/numberOfLooks/", tmp_c, 1, 0, 1); prm->nlooks = (int)str2double(tmp_c); prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; strasign(prm->dtype, "a", 0, 0); search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_c, 1, 0, 1); prm->fs = str2double(tmp_c); // rng_samp_rate prm->SC_identity = 10; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ search_tree(xml_tree, "/product/generalAnnotation/productInformation/radarFrequency/", tmp_c, 1, 0, 1); prm->lambda = SOL / str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/downlinkInformationList/" "downlinkInformation/downlinkValues/txPulseLength/", tmp_c, 1, 0, 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/lookBandwidth/", tmp_c, 1, 0, 1); prm->chirp_slope = str2double(tmp_c) / tmp_d; prm->pulsedur = tmp_d; search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/re/", tmp_c, 1, 0, 1); // prm->xmi = str2double(tmp_c); //I_mean prm->xmi = 0.0; // I_mean search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/im/", tmp_c, 1, 0, 1); // prm->xmq = str2double(tmp_c); //Q_mean prm->xmq = 0.0; // Q_mean search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dt = str2double(tmp_c); prm->prf = 1 / dt; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_c, 1, 0, 1); /* subtract a correction of 1 * drange to the near range based on Pinon corner * reflector analysis DTS 09/24/18 */ prm->near_range = (str2double(tmp_c) - 1. / prm->fs) * SOL / 2; prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius search_tree(xml_tree, "/product/generalAnnotation/productInformation/pass/", tmp_c, 1, 0, 1); strasign(prm->orbdir, tmp_c, 0, 0); strasign(prm->lookdir, "R", 0, 0); strcpy(tmp_c, tiff_name); //strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfSamples/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c) - (int)str2double(tmp_c) % 4; prm->bytes_per_line = tmp_i * 4; prm->good_bytes = prm->bytes_per_line; prm->num_rng_bins = prm->bytes_per_line / 4; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig prm->az_res = 0.0; // prm->antenna_side = -1; prm->fdd1 = 0.0; prm->fddd1 = 0.0; // manipulate the lines search_tree(xml_tree, "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); // count = 1; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfLines/", tmp_c, 1, 0, 1); ntl = (int)str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/linesPerBurst/", tmp_c, 1, 0, 1); lpb = (int)str2double(tmp_c); nlf = count * lpb; // allocate some memory kF = (int *)malloc(nlf * sizeof(int)); ksa = (int *)malloc((count + 1) * sizeof(int)); ksr = (int *)malloc((count + 1) * sizeof(int)); kea = (int *)malloc((count + 1) * sizeof(int)); ker = (int *)malloc((count + 1) * sizeof(int)); kover = (int *)malloc((count + 1) * sizeof(int)); cflag_orig = (char *)malloc(sizeof(char) * 80 * (lpb + 1)); cflag = cflag_orig; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/productFirstLineUtcTime/", tmp_c, 2, 0, 1); prm->clock_start = str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/productFirstLineUtcTime/", tmp_c, 1, 0, 1); tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(tmp_c); k = 0; flag0 = -1; for (i = 1; i <= count; i++) { search_tree(xml_tree, "/product/swathTiming/burstList/burst/azimuthAnxTime/", tmp_c, 1, 4, i); t[i] = str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/burstList/burst/firstValidSample/", tmp_cc, 1, 4, i); lines_this_burst = get_words(tmp_cc); strcpy(cflag, tmp_cc); for (j = 0; j < lines_this_burst; j++) { flag = (int)strtol(cflag, &cflag, 10); first_samp = max(first_samp, flag); time = t[i] + (double)j / prm->prf; kF[k] = -1; // don't use flagged data if (flag >= 0) { if (t0 < 0.) { t0 = time; k_start = k; } // the kF array uniquely maps the line on the input file into the SLC // line on output kF[k] = (int)((time - t0) * prm->prf + .1); nl = kF[k]; } // calculate the start and end index for each burst if (flag > flag0) { ksa[i] = kF[k]; ksr[i] = j; } if (flag < flag0) { kea[i] = kF[k - 1]; ker[i] = j - 1; } flag0 = flag; k++; } } prm->first_sample = first_samp; // calculate the burst overlap. The first one is zero. kover[0] = 0; for (i = 1; i <= count; i++) { kover[i] = 0; if (i < count) kover[i] = kea[i] - ksa[i + 1] + 1; } // calculate the approximate center shift kC = kover[1] / 2; // calculate the relative start S and end E lines for each burst in the L and // H configurations for (i = 1; i <= count; i++) { bb[i].SL = ksr[i]; bb[i].SH = ksr[i] + kover[i - 1]; bb[i].EL = ker[i] - kover[i]; bb[i].EH = ker[i]; } // make the center start end locations for (i = 1; i < count; i++) { bb[i].EC = bb[i].EL + kC; bb[i + 1].SC = bb[i + 1].SL + kC; } bb[1].SC = bb[1].SL; bb[count].EC = bb[i].EL; // make sure the number of lines is divisible by 4 prm->num_lines = nl - nl % 4; // advance the start time to account for the zero lines at the start of the // first burst prm->SC_clock_start = prm->SC_clock_start + (double)(k_start) / prm->prf / 86400.; prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_start = prm->clock_start + (double)(k_start) / prm->prf / 86400.; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->chirp_ext = 0; free(kF); free(ksa); free(ksr); free(kea); free(ker); free(kover); free(cflag_orig); return (1); } double dramp_dmod(struct tree *xml_tree, int nb, fcomplex *cramp, int lpb, int width, int al_start, struct GMT_GRID *R, struct GMT_GRID *A, int bshift, int imode) { /* this is a routine to apply an azimuth shift to a burst of TOPS data */ int ii, jj, k; char tmp_c[200]; double kpsi, fc, dta, dts = 0., ts0, tau0, vx, vy, vz; double ks, vtot, ka, taus, phase, pramp, pmod; double fnc[3], fka[3]; double *eta, *etaref, *kt, *fnct; double t_brst, t1 = 0., t2 = 0.; double dr, da; double sum_spec_sep = 0.0; // get all the parameters needed for the remod_deramp // find the constant parameters search_tree(xml_tree, "/product/generalAnnotation/productInformation/radarFrequency/", tmp_c, 1, 0, 1); fc = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/productInformation/azimuthSteeringRate/", tmp_c, 1, 0, 1); kpsi = PI * str2double(tmp_c) / 180.; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dta = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_c, 1, 0, 1); if (str2double(tmp_c) != 0.) dts = 1. / str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_c, 1, 0, 1); ts0 = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/t0/", tmp_c, 1, 0, 1); tau0 = str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 2, 4, nb); t_brst = str2double(tmp_c) + dta * (double)lpb / 2.0 / 86400.0; // first find the parameters that depends on burst, find the neareast one. search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/dcEstimate/azimuthTime/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } if (t_brst - t1 < t2 - t_brst) jj = ii - 1; else jj = ii; // fprintf(stderr,"finding the %d DcPolynomial\n",jj); search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/dcEstimate/dataDcPolynomial/", tmp_c, 1, 4, jj); str2dbs(fnc, tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/" "azimuthTime/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } if (t_brst - t1 < t2 - t_brst) jj = ii - 1; else jj = ii; // fprintf(stderr,"finding the %d AziFmRate\n",jj); ii = search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/t0/", tmp_c, 1, 0, 1); if (xml_tree[xml_tree[ii].sibr].sibr < 0) { search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/" "azimuthFmRatePolynomial/", tmp_c, 1, 4, jj); str2dbs(fka, tmp_c); } else { search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c0/", tmp_c, 1, 4, jj); fka[0] = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c1/", tmp_c, 1, 4, jj); fka[1] = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c2/", tmp_c, 1, 4, jj); fka[2] = str2double(tmp_c); } // find the velocity by linearly interpolating between 2 neareast point search_tree(xml_tree, "/product/generalAnnotation/orbitList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, ii - 1); vx = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, ii); vx = (str2double(tmp_c) * (t2 - t_brst) + vx * (t_brst - t1)) / (t2 - t1); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, ii - 1); vy = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, ii); vy = (str2double(tmp_c) * (t2 - t_brst) + vy * (t_brst - t1)) / (t2 - t1); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, ii - 1); vz = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, ii); vz = (str2double(tmp_c) * (t2 - t_brst) + vz * (t_brst - t1)) / (t2 - t1); // malloc the memory eta = (double *)malloc(lpb * sizeof(double)); etaref = (double *)malloc(width * sizeof(double)); kt = (double *)malloc(width * sizeof(double)); fnct = (double *)malloc(width * sizeof(double)); // compute velocity and then Doppler rate vtot = sqrt(vx * vx + vy * vy + vz * vz); ks = 2. * vtot * fc * kpsi / SOL; if (imode == 0) { for (ii = 0; ii < lpb; ii++) { eta[ii] = ((double)ii - (double)lpb / 2. + .5) * dta; } for (jj = 0; jj < width; jj++) { // This is silly because ts0 = tau0 in the test I did taus = ts0 + ((double)jj) * dts - tau0; ka = fka[0] + fka[1] * taus + fka[2] * taus * taus; kt[jj] = ka * ks / (ka - ks); fnct[jj] = fnc[0] + fnc[1] * taus + fnc[2] * taus * taus; etaref[jj] = -fnct[jj] / ka + fnc[0] / fka[0]; } for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; pramp = -M_PI * kt[jj] * pow((eta[ii] - etaref[jj]), 2); pmod = -2. * M_PI * fnct[jj] * eta[ii]; phase = pramp + pmod; cramp[k] = Cexp(phase); } } } else if (imode == 1) { for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; if (floor((al_start + ii) / R->header->inc[GMT_Y] + 0.5) < 0 || (int)floor((al_start + ii) / R->header->inc[GMT_Y] + 0.5) >= R->header->ny) { cramp[k].r = 1; cramp[k].i = 0; } else { dr = R->data[(int)(jj / R->header->inc[GMT_X] + 0.5) + R->header->nx * (int)((al_start + ii) / R->header->inc[GMT_Y] + 0.5)]; da = A->data[(int)(jj / A->header->inc[GMT_X] + 0.5) + A->header->nx * (int)((al_start + ii) / A->header->inc[GMT_Y] + 0.5)] - (double)bshift; eta[0] = ((double)ii - (double)lpb / 2. + .5 + da) * dta; taus = ts0 + ((double)jj + dr) * dts - tau0; ka = fka[0] + fka[1] * taus + fka[2] * taus * taus; kt[0] = ka * ks / (ka - ks); fnct[0] = fnc[0] + fnc[1] * taus + fnc[2] * taus * taus; etaref[0] = -fnct[0] / ka + fnc[0] / fka[0]; pramp = -M_PI * kt[0] * pow((eta[0] - etaref[0]), 2); pmod = -2. * M_PI * fnct[0] * eta[0]; phase = pramp + pmod; cramp[k] = Cexp(phase); } } } } else if (imode == 2) { for (jj = 0; jj < width; jj++) { taus = ts0 + ((double)jj) * dts - tau0; ka = fka[0] + fka[1] * taus + fka[2] * taus * taus; kt[jj] = ka * ks / (ka - ks); } for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { sum_spec_sep += kt[jj]; } } } return (sum_spec_sep); } double shift_write_slc(void *API, struct PRM *prm, struct tree *xml_tree, struct burst_bounds *bb, int imode, TIFF *tif, FILE *slcl, FILE *slcc, FILE *slch, char *dr_table, char *da_table) { uint16 s = 0; uint16 *buf; uint32 it; short *tmp, *brst; float *rtmp; int ii, jj, nl, k, k2, kk; int count, lpb, nlf, width2, nclip = 0; uint32 width, height, widthi; char tmp_c[200]; fcomplex *cbrst, *cramp; float rtest, itest; int al_start = 0, cl; int bshift = 0; double sum_spec_sep = 0.0, spec_sep = 0.0, dta; struct GMT_GRID *R = NULL, *A = NULL; if (dr_table[0] != '\0' && da_table[0] != '\0') { fprintf(stderr, "Reading in range and azimuth shifts table...\n"); if ((R = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, dr_table, NULL)) == NULL) die("cannot open range shift tables", dr_table); if ((A = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, da_table, NULL)) == NULL) die("cannot open azimuth shift tables", dr_table); if (R->header->inc[GMT_X] != A->header->inc[GMT_X]) die("shift table size does not match", ""); if (R->header->inc[GMT_Y] != A->header->inc[GMT_Y]) die("shift table size does not match", ""); if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, dr_table, R) == NULL) return EXIT_FAILURE; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, da_table, A) == NULL) return EXIT_FAILURE; } // get the burst information and compare with the TIFF file search_tree(xml_tree, "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/linesPerBurst/", tmp_c, 1, 4, 0); lpb = (int)str2double(tmp_c); nlf = count * lpb; // get the width the file and make width divisible by 4 TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &widthi); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); width = widthi - widthi % 4; width2 = 2 * width; if (nlf != height) { fprintf(stderr, "XML and TIFF file disagree on image height %d %d \n", nlf, height); } // allocate memory for the burst and other arrays brst = (short *)malloc(lpb * width2 * sizeof(short)); cbrst = (fcomplex *)malloc(lpb * width * sizeof(fcomplex)); cramp = (fcomplex *)malloc(lpb * width * sizeof(fcomplex)); buf = (uint16 *)_TIFFmalloc(TIFFScanlineSize(tif)); tmp = (short *)malloc(width * 2 * sizeof(short)); rtmp = (float *)malloc(width * 2 * sizeof(float)); nl = prm->num_lines; if (imode == 1) printf("Writing SLC..Image Size: %d X %d...\n", width, nl); else if (imode == 2) printf("Writing SLCL & SLCH..\n"); it = 0; // fix the shift when there are burst with no overlap cl = 0; if (dr_table[0] != '\0' && da_table[0] != '\0') { for (kk = 1; kk <= count; kk++) { cl = cl + (bb[kk].EL - bb[kk].SL + 1); // fprintf(stderr,"SC:%d, EC:%d, SH:%d, EH:%d, SL:%d, // EL:%d\n",bb[kk].SC,bb[kk].EC,bb[kk].SH,bb[kk].EH,bb[kk].SL,bb[kk].EL); if (floor(A->data[0] / (double)cl + 0.2) == 1) { bshift = cl; fprintf(stderr, "Image has %d bursts mismatch...making corrections to azimuth " "shifts (%d)...\n", kk, bshift); } else if (ceil(A->data[0] / (double)cl - 0.2) == -1) { bshift = -cl; fprintf(stderr, "Image has %d bursts mismatch...making corrections to azimuth " "shifts (%d)...\n", kk, bshift); } } if (bshift != 0) { prm->ashift = bshift; fprintf(stderr, "Updated ashift is %d\n", bshift); } cl = 0; } fprintf(stderr, "Working on burst "); // loop over the bursts for (kk = 1; kk <= count; kk++) { fprintf(stderr, " #%d", kk); if (imode == 2) { sum_spec_sep = dramp_dmod(xml_tree, kk, cramp, lpb, width, al_start, R, A, bshift, 2); spec_sep += sum_spec_sep; } // read a burst into memory for (ii = 0; ii < lpb; ii++) { TIFFReadScanline(tif, buf, it, s); for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; brst[k] = (short)buf[jj]; } it++; } // load the burst into a complex float array for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; k2 = ii * width2 + jj * 2; cbrst[k].r = (float)brst[k2]; cbrst[k].i = (float)brst[k2 + 1]; } } // do not shift anything if dr and da is not given if (dr_table[0] != '\0' && da_table[0] != '\0') { // complute the complex deramp_demod array for each burst with no shift al_start = cl - bb[kk].SC; // generate the dramp_dmod dramp_dmod(xml_tree, kk, cramp, lpb, width, al_start, R, A, bshift, 0); // apply the dramp_dmod for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cbrst[k] = Cmul(cbrst[k], cramp[k]); } } // split_spectrum here // shift the burst with the given table, cramp is just some available // memory to use shift_burst(cbrst, cramp, al_start, lpb, width, R, A, bshift); // regenerate the shifted dramp_dmod dramp_dmod(xml_tree, kk, cramp, lpb, width, al_start, R, A, bshift, 1); // reramp the slc for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cramp[k].i = -cramp[k].i; cbrst[k] = Cmul(cbrst[k], cramp[k]); } } } // compute the elevation antenna pattern (EAP) change if ipf version is 2.36 // and aux_file and manifest file are concatenated to xml ii = search_tree(xml_tree, "/product/", tmp_c, 1, 0, 1); // printf("Hahahaha...%d,%d\n",ii,xml_tree[ii].sib); if (xml_tree[ii].sibr != -1) { jj = 1; // search_tree(xml_tree,"/xfdu:XFDU/metadataSection/metadataObject/metadataWrap/xmlData/safe:processing/safe:facility/safe:software/",tmp_c,3,3,12); ii = search_tree(xml_tree, "/xfdu:XFDU/metadataSection/metadataObject/", tmp_c, 1, 3, jj); // while(strncmp(xml_tree[ii].name,"metadataWrap",12) != 0 || // strncmp(xml_tree[xml_tree[ii].firstchild].name,"xmlData",7) != 0 || // strncmp(xml_tree[xml_tree[xml_tree[ii].firstchild].firstchild].name,"safe:processing",15) // != 0) { while (strncmp(&xml_tree[ii].name[19], "processing", 10) != 0) { jj++; ii = search_tree(xml_tree, "/xfdu:XFDU/metadataSection/metadataObject/", tmp_c, 1, 3, jj); if (ii == -1) break; // if(jj==21) // printf("%s\n%s\n%s\n",xml_tree[ii].name,xml_tree[xml_tree[ii].firstchild].name,xml_tree[xml_tree[xml_tree[ii].firstchild].firstchild].name) } // printf("find %d\n",jj); search_tree(xml_tree, "/xfdu:XFDU/metadataSection/metadataObject/metadataWrap/" "xmlData/safe:processing/safe:facility/safe:software/", tmp_c, 3, 3, jj); if (strncmp(&tmp_c[strlen(tmp_c) - 3], "236", 3) == 0) { fprintf(stderr, "(EAP)"); // printf("Making elevation antenna pattern correction\n"); compute_eap(cramp, xml_tree, kk); for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cramp[k].i = -cramp[k].i; cbrst[k] = Cmul(cbrst[k], cramp[k]); } } } } // printf("Hahahaha...\n"); // unload the float complex array into a short burst array, multiply by 2 // and clip if needed for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; k2 = ii * width2 + jj * 2; rtest = 2. * cbrst[k].r; itest = 2. * cbrst[k].i; brst[k2] = (short)clipi2(rtest); brst[k2 + 1] = (short)clipi2(itest); if ((int)(rtest) > I2MAX || (int)(itest) > I2MAX) { nclip++; } } } // write the burst in L, C, and H configurations for (ii = 0; ii < lpb; ii++) { // write low if (kk > 1 && ii >= bb[kk].SL && ii <= bb[kk].SH - 1) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 2) fwrite(tmp, sizeof(short), width * 2, slcl); } // write center if (ii >= bb[kk].SC && ii <= bb[kk].EC) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 1) fwrite(tmp, sizeof(short), width * 2, slcc); cl++; } // write high if (kk < count && ii >= bb[kk].EL + 1 && ii <= bb[kk].EH) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 2) fwrite(tmp, sizeof(short), width * 2, slch); } } } fprintf(stderr, "\n"); if (imode == 2) { search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dta = str2double(tmp_c); spec_sep = spec_sep * dta / count / width; } fprintf(stderr, "number of points clipped to short int %d \n", nclip); _TIFFfree(buf); free(brst); free(cbrst); free(cramp); free(tmp); free(rtmp); return (spec_sep); } int compute_eap(fcomplex *cramp, tree *xml_tree, int nb) { // // mode 1=S1_HH, 2=S1_HV, 3=S1_VV, 4=S1_VH, 5=S2_HH, 6=S2_HV, 7=S2_VV, // 8=S2_VH, // 9=S3_HH, 10=S3_HV, 11=S3_VV, 12=S3_VH, // char tmp_str[200], *str; int n = 0, srtcount; int ii, jj, n_samples, lpb, mode; double fs, dta, tau0, *tau_sub, *theta_sub, anx_time, *tau; double *Geap, dtheta, t_brst, t1 = 0, t2, theta_offnadir, *theta_eap, height, *theta, *p_corr; double H[5], Torb, Worb, phi[5], real, imag; // get some of the parameters needed for computation search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfSamples/", tmp_str, 1, 0, 1); n_samples = (int)str2double(tmp_str); n_samples = n_samples - n_samples % 4; search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_str, 1, 0, 1); fs = str2double(tmp_str); search_tree(xml_tree, "/product/swathTiming/linesPerBurst/", tmp_str, 1, 4, 0); lpb = (int)str2double(tmp_str); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_str, 1, 0, 1); dta = str2double(tmp_str); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_str, 1, 0, 1); tau0 = str2double(tmp_str); // find the correct one to be read in search_tree(xml_tree, "/product/swathTiming/burstList/burst/azimuthTime/", tmp_str, 2, 4, nb); t_brst = str2double(tmp_str) + dta * (double)lpb / 2.0 / 86400.0; search_tree(xml_tree, "/product/antennaPattern/antennaPatternList/", tmp_str, 3, 0, 1); jj = (int)str2double(tmp_str); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/antennaPattern/antennaPatternList/antennaPattern/" "azimuthTime/", tmp_str, 2, 4, ii); t2 = str2double(tmp_str); } if (t_brst - t1 < t2 - t_brst) jj = ii - 1; else jj = ii; // readin parameters from data xml search_tree(xml_tree, "/product/antennaPattern/antennaPatternList/antennaPattern/" "slantRangeTime/", tmp_str, 3, 4, jj); srtcount = (int)str2double(tmp_str); str = (char *)malloc(200 * srtcount * sizeof(char)); tau_sub = (double *)malloc(srtcount * sizeof(double)); search_tree(xml_tree, "/product/antennaPattern/antennaPatternList/antennaPattern/" "slantRangeTime/", str, 1, 4, jj); str2dbs(tau_sub, str); theta_sub = (double *)malloc(srtcount * sizeof(double)); search_tree(xml_tree, "/product/antennaPattern/antennaPatternList/antennaPattern/" "elevationAngle/", str, 1, 4, jj); str2dbs(theta_sub, str); // determine which antenna pattern to read in in the aux file mode = 0; search_tree(xml_tree, "/product/adsHeader/imageNumber/", tmp_str, 1, 0, 1); ii = (int)str2double(tmp_str); mode = mode + (ii - 1) * 4; search_tree(xml_tree, "/product/adsHeader/polarisation/", tmp_str, 1, 0, 1); if (tmp_str[0] - 'H' == 0 && tmp_str[1] - 'H' == 0) mode = mode + 1; else if (tmp_str[0] - 'H' == 0 && tmp_str[1] - 'V' == 0) mode = mode + 2; else if (tmp_str[0] - 'V' == 0 && tmp_str[1] - 'V' == 0) mode = mode + 3; else if (tmp_str[0] - 'V' == 0 && tmp_str[1] - 'H' == 0) mode = mode + 4; mode = mode + 24; // printf("Reading in antenna pattern %d (%s IW%d)...\n",mode,tmp_str,ii); // read in parameters from aux xml search_tree(xml_tree, "/auxiliaryCalibration/calibrationParamsList/calibrationParams/" "elevationAntennaPattern/values/", tmp_str, 3, 3, mode); n = (int)str2double(tmp_str); Geap = (double *)malloc(n * 2 * sizeof(double)); theta_eap = (double *)malloc(n * sizeof(double)); tau = (double *)malloc(n_samples * sizeof(double)); theta = (double *)malloc(n_samples * sizeof(double)); p_corr = (double *)malloc(n_samples * sizeof(double)); search_tree(xml_tree, "/auxiliaryCalibration/calibrationParamsList/calibrationParams/" "elevationAntennaPattern/values/", str, 1, 3, mode); str2dbs(Geap, str); search_tree(xml_tree, "/auxiliaryCalibration/calibrationParamsList/calibrationParams/" "elevationAntennaPattern/elevationAngleIncrement/", tmp_str, 1, 3, mode); dtheta = str2double(tmp_str); // search_tree(xml_tree,"/xfdu:XFDU/metadataSection/metadataObject/metadataWrap/xmlData/safe:orbitReference/safe:extension/s1:orbitProperties/s1:ascendingNodeTime/",tmp_str,2,3,14); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/ascendingNodeTime/", tmp_str, 2, 1, 1); anx_time = (str2double(tmp_str) - (int)str2double(tmp_str)) * 86400.0; t_brst = (t_brst - (int)t_brst) * 86400.0; // compute the satellite altitude and roll steering H[0] = 707714.8; H[1] = 8351.5; H[2] = 8947.0; H[3] = 23.32; H[4] = 11.74; phi[1] = 3.1495; phi[2] = -1.5655; phi[3] = -3.1297; phi[4] = 4.7222; Torb = 12.0 * 24.0 * 60.0 * 60.0 / 175.0; Worb = 2.0 * M_PI / Torb; t1 = t_brst - anx_time; height = H[0] + H[1] * sin(Worb * t1 + phi[1]) + H[2] * sin(Worb * 2.0 * t1 + phi[2]) + H[3] * sin(Worb * 3.0 * t1 + phi[3]) + H[4] * sin(Worb * 4.0 * t1 + phi[4]); theta_offnadir = 29.450 - 0.0566 * (height / 1000.0 - 711.7); for (ii = 0; ii < n; ii++) theta_eap[ii] = (-(n - 1) / 2 + ii) * dtheta + theta_offnadir; // compute the elevation antenna pattern for (ii = 0; ii < n_samples; ii++) tau[ii] = tau0 + (double)(ii - 1) / fs; jj = 0; // printf("%f,%f,%f,%f\n",t_brst-anx_time,dtheta,height,theta_offnadir); while (tau_sub[jj] < tau0) jj++; for (ii = 0; ii < n_samples; ii++) { while (tau_sub[jj] < tau[ii]) jj++; if (jj < 1 || jj > srtcount) { // fprintf(stderr,"\ntheta: %d %d %e %e // %d\n",jj,srtcount,tau0,tau[ii],ii); die("elevationAngle table size not // match slantRangeTime table size",""); theta[ii] = 0.0; } else { theta[ii] = ((tau[ii] - tau_sub[jj - 1]) * theta_sub[jj - 1] + (tau_sub[jj] - tau[ii]) * theta_sub[jj]) / (tau_sub[jj] - tau_sub[jj - 1]); } } // printf("%d ",jj); jj = 0; while (theta_eap[jj] < theta[0]) jj++; // printf("%d ",jj); for (ii = 0; ii < n_samples; ii++) { while (theta_eap[jj] < theta[ii]) jj++; if (jj < 1 || jj > srtcount) { // fprintf(stderr,"p_corr: %d %d",jj,srtcount); // die("elevationAngle table size not match slantRangeTime table // size",""); p_corr[ii] = 0.0; } else { real = (Geap[(jj - 1) * 2] * (theta[ii] - theta_eap[jj - 1]) + Geap[jj * 2] * (theta_eap[jj] - theta[ii])) / dtheta; imag = (Geap[(jj - 1) * 2 + 1] * (theta[ii] - theta_eap[jj - 1]) + Geap[jj * 2 + 1] * (theta_eap[jj] - theta[ii])) / dtheta; p_corr[ii] = atan2(imag, real); } } // printf("%d \n",jj); /* if(nb == 1) { for(jj=0;jjheader->inc[GMT_X]; incy = R->header->inc[GMT_Y]; for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cbrst2[k].r = cbrst[k].r; cbrst2[k].i = cbrst[k].i; } } for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; if (floor((al_start + ii) / incy + 0.5) < 0 || (int)floor((al_start + ii) / incy + 0.5) >= R->header->ny) { cbrst[k].r = 0; cbrst[k].i = 0; } else { kr = (int)floor(jj / incx + 0.5) + R->header->nx * (int)floor((al_start + ii) / incy + 0.5); ka = (int)floor(jj / incx + 0.5) + A->header->nx * (int)floor((al_start + ii) / incy + 0.5); ras[0] = (double)jj + R->data[kr]; ras[1] = (double)ii + A->data[ka] - (double)bshift; fbisinc(ras, cbrst2, lpb, width, &cbrst[k]); } } } return (1); } void sinc_one(double *, double *, double, double, double *); void fbisinc(double *ras, fcomplex *s_in, int ydims, int xdims, fcomplex *sout) { double dr, da, ns2 = NS / 2 - 1; double rdata[NS * NS], idata[NS * NS], cz[2]; int i, j, k, kk; int i0, j0; int nclip; /* compute the residual offsets */ nclip = 0; j0 = (int)floor(ras[0]); i0 = (int)floor(ras[1]); dr = ras[0] - (double)j0; da = ras[1] - (double)i0; if (dr < 0. || dr > 1. || da < 0. || da > 1) fprintf(stderr, " dr or da out of bounds %f %f \n", dr, da); /* make sure all 4 corners are within the bounds of the slave array */ if ((i0 - ns2) < 0 || (i0 + ns2 + 1) >= ydims || (j0 - ns2) < 0 || (j0 + ns2 + 1) >= xdims) { sout->r = 0; sout->i = 0; } else { /* safe to do the interpolation */ for (i = 0; i < NS; i++) { for (j = 0; j < NS; j++) { k = i * NS + j; kk = xdims * (i0 - ns2 + i) + (j0 - ns2 + j); rdata[k] = (double)s_in[kk].r; idata[k] = (double)s_in[kk].i; } } /* interpolate the real and imaginary data */ sinc_one(rdata, idata, dr, da, cz); if ((int)fabs(cz[0]) > I2MAX) nclip = nclip + 1; sout->r = (float)cz[0]; if ((int)fabs(cz[1]) > I2MAX) nclip = nclip + 1; sout->i = (float)cz[1]; } // if(nclip > 0) fprintf(stderr," %d integers were clipped \n",nclip); } double sinc_kernel(double); void sinc_one(double *rdata, double *idata, double x, double y, double *cz) { int i, j, ij, ns2 = NS / 2 - 1; double wx[NS], wy[NS]; double arg, w, wsum, rsum, isum; for (i = 0; i < NS; i++) { arg = fabs(x + ns2 - i); wx[i] = sinc_kernel(arg); arg = fabs(y + ns2 - i); wy[i] = sinc_kernel(arg); } rsum = isum = wsum = 0.0; ij = 0; for (j = 0; j < NS; j++) { for (i = 0; i < NS; i++) { w = wx[i] * wy[j]; rsum += rdata[ij + i] * w; isum += idata[ij + i] * w; wsum += w; } ij += NS; } if (wsum <= 0.0) printf(" error wsum is zero \n"); cz[0] = rsum / wsum; cz[1] = isum / wsum; } #define PI 3.1415926535897932 double sinc_kernel(double x) { double arg, f; arg = fabs(PI * x); if (arg > 0.) { f = sin(arg) / arg; } else { f = 1.; } return (f); } // added by Kang Wang int get_words(char *buffer) { // Function that gets the word count, by counting // the spaces. int count; int wordcount = 0; char ch; for (count = 0; count < strlen(buffer); count++) { ch = buffer[count]; if ((isblank(ch)) || (buffer[count] == '\0')) { // if the character is blank, or null byte // add 1 to the wordcounter wordcount += 1; } } // printf("%d\n\n", wordcount); return wordcount + 1; } GMTSAR_V5.7/.svn/pristine/6d/6d44428cf4da5806ebaa0c6444453959b2ca74c7.svn-base000444 015705 000000 00000030521 13505462013 025613 0ustar00sandwellwheel000000 000000 /* $Id: conv.c 109 2015-01-19 23:01:24Z sandwell $ */ /***************************************************************************/ /* conv convolves a 2-D filter with an array and outputs the results */ /* at a sub-sampled interval. Basically it does the same thing as */ /* the GIPS program ihbox but it runs a lot faster. */ /* */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 04/17/98 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 04/17/98 Started hacking at the code * * 06/07/98 Removed edge effects of derivative filter * * 01/14/10 Modified to read and write grd files - RJM * ***************************************************************************/ #include "gmtsar.h" char *USAGE = "conv [GMTSAR] - 2-D image convolution\n\n" "Usage: conv idec jdec filter_file input output \n" " idec - row decimation factor \n" " jdec - column decimation factor \n" " filter_file - eg. filters/gauss17x5 \n" " input - name of file to be filtered (I*2 or R*4) \n" " output - name of filtered output file (R*4 only) \n\n" " examples:\n" " conv 4 2 filters/gauss9x5 IMG-HH-ALPSRP109430660-H1.0__A.PRM " "test.grd \n" " (makes and filters amplitude file from an SLC-file) \n\n" " conv 4 2 filters/gauss5x5 infile.grd outfile.grd \n" " (filters a float file) \n "; int input_file_type, format_flag; /*-------------------------------------------------------------*/ int determine_file_type(char *name, int *input_file_type) { int n, m; char tail[8]; *input_file_type = 1; n = (int)strlen(name); m = n - 3; strncpy(&tail[0], &name[m], 4); if (verbose) fprintf(stderr, " name %s tail %s \n", name, tail); if ((strncmp(tail, "PRM", 3) == 0) || (strncmp(tail, "prm", 3) == 0)) { if (verbose) fprintf(stderr, " input: PRM file\n"); *input_file_type = 2; } if (*input_file_type == 1) if (verbose) fprintf(stderr, " input: GMT binary\n"); return (EXIT_SUCCESS); } /*-------------------------------------------------------------*/ FILE *read_PRM_file(char *prmfilename, char *input_file_name, struct PRM p, int *xdim, int *ydim) { FILE *f_input_prm, *f_input; void change_name(char *); if (verbose) fprintf(stderr, " reading PRM file %s\n", prmfilename); if ((f_input_prm = fopen(prmfilename, "r")) == NULL) die("Can't open input header", prmfilename); get_sio_struct(f_input_prm, &p); strcpy(input_file_name, p.SLC_file); format_flag = 2; if (strncmp(p.dtype, "c", 1) == 0) format_flag = 3; if (verbose) fprintf(stderr, " reading PRM file %s\n", input_file_name); if ((f_input = fopen(input_file_name, "r")) == NULL) die("Can't open input data ", input_file_name); *xdim = p.num_rng_bins; *ydim = p.num_valid_az * p.num_patches; return (f_input); } /*-------------------------------------------------------------*/ int read_float(float *indat, int xdim, FILE *f_input, int yarr, float *buffer, int ibuff) { int i, j; for (i = 0; i < ibuff; i++) { fread(indat, sizeof(float), xdim, f_input); for (j = 0; j < xdim; j++) buffer[j + xdim * (i + yarr)] = indat[j]; } return (EXIT_SUCCESS); } /*-------------------------------------------------------------*/ int read_SLC_int(short *ci2, int xdim, FILE *f_input, int yarr, float *buffer, double dfact, int ibuff) { int i, j; double df2; df2 = dfact * dfact; /* read i2 complex and calculate amplitude */ /* use square of amplitude to match gips ihconv */ for (i = 0; i < ibuff; i++) { fread(ci2, 2 * sizeof(short), xdim, f_input); for (j = 0; j < xdim; j++) buffer[j + xdim * (i + yarr)] = (float)(df2 * ci2[2 * j] * ci2[2 * j] + df2 * ci2[2 * j + 1] * ci2[2 * j + 1]); } return (EXIT_SUCCESS); } /*-------------------------------------------------------------*/ int read_SLC_float(float *cf2, int xdim, FILE *f_input, int yarr, float *buffer, double dfact, int ibuff) { int i, j; double df2; df2 = dfact * dfact; /* read r4 complex and calculate amplitude */ /* use square of amplitude to match gips ihconv */ for (i = 0; i < ibuff; i++) { fread(cf2, 2 * sizeof(float), xdim, f_input); for (j = 0; j < xdim; j++) buffer[j + xdim * (i + yarr)] = (float)(df2 * cf2[2 * j] * cf2[2 * j] + df2 * cf2[2 * j + 1] * cf2[2 * j + 1]); } return (EXIT_SUCCESS); } int main(int argc, char **argv) { int idec, jdec; int iout, jout; int i, j, ic, jc, norm, ic0, ic1; int ydim = 0, xdim = 0; /* size of input file */ int xarr, yarr, narr, yarr2; int nbuff, ibuff, imove; int iend, ylen, iread; uint64_t left_node; unsigned int row; char input_name[128], output_name[128], prmfilename[128], *c = NULL; short *cindat = NULL; float *cfdat = NULL; double inc[2], wesn[4], xmax = 0.0, ymax = 0.0; float *filter = NULL, *buffer = NULL, *indat = NULL; float filtin, filtdat, rnorm, rnormax, anormax; FILE *f_filter = NULL, *f_input = NULL; struct PRM p; void *API = NULL; /* GMT control structure */ struct GMT_GRID *Out = NULL; /* For the output grid */ struct GMT_GRID *In = NULL; /* Grid structure containing ->header and ->data */ if (argc < 6) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; ibuff = 512; verbose = 0; null_sio_struct(&p); input_file_type = 1; /* default; GMT binary */ /* format_flag = 1 => float */ /* format_flag = 2 => i*2 complex */ /* format_flag = 3 => r*4 complex */ format_flag = 1; idec = atoi(argv[1]); /* y decimation factor */ jdec = atoi(argv[2]); /* x decimation factor */ if (idec <= 0 || jdec <= 0) die("idec and jdec should be positive integers.", ""); /* open and filter file */ if ((f_filter = fopen(argv[3], "r")) == NULL) die("Can't open filter", ""); /* get input and output file names */ strcpy(input_name, argv[4]); strcpy(output_name, argv[5]); /* read input file */ /* GMT file or PRM file ? look at suffix (grd or PRM)*/ determine_file_type(input_name, &input_file_type); if (verbose) fprintf(stderr, " input file type: %d \n", input_file_type); switch (input_file_type) { case 1: if (verbose) fprintf(stderr, " reading GMT binary\n"); if ((In = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, input_name, NULL)) == NULL) die("Can't open ", input_name); if ((c = strstr(input_name, "=bf"))) c[0] = '\0'; /* Chop off any trailing =bf flag */ if ((f_input = fopen(input_name, "r")) == NULL) die("Can't open ", input_name); fseek(f_input, 892L, SEEK_SET); /* Skip past the header */ xdim = In->header->nx; ydim = In->header->ny; xmax = In->header->wesn[GMT_XHI]; ymax = In->header->wesn[GMT_YHI]; if (verbose) fprintf(stderr, "%d %d \n", In->header->nx, In->header->ny); format_flag = 1; break; case 2: strcpy(prmfilename, input_name); f_input = read_PRM_file(prmfilename, input_name, p, &xdim, &ydim); if (verbose) fprintf(stderr, " reading PRM file format %d\n", format_flag); xmax = xdim; ymax = ydim; break; default: die("confused about input file type", "quitting"); } if (verbose) fprintf(stderr, " read file %s %d %d \n", input_name, xdim, ydim); /* read size of filter and make sure dimensions are odd */ if (fscanf(f_filter, "%d%d", &xarr, &yarr) != 2 || xarr < 1 || yarr < 1 || (xarr & 1) == 0 || (yarr & 1) == 0) die("filter incomplete", ""); if (ibuff < yarr) die("increase dimension of ibuff", ""); /* size of output file */ iout = jout = 0; for (ic = 0; ic < ydim; ic = ic + idec) iout = iout + 1; for (jc = 0; jc < xdim; jc = jc + jdec) jout = jout + 1; if (verbose) fprintf(stderr, " original: ydim %d xdim %d new: %d %d decimation: %d %d\n", ydim, xdim, iout, jout, idec, jdec); inc[GMT_X] = round(xmax / (double)jout); inc[GMT_Y] = round(ymax / (double)iout); jout = floor(xmax / inc[GMT_X]); iout = floor(ymax / inc[GMT_Y]); if (verbose) fprintf(stderr, " creating GMT grid %s \n", output_name); wesn[GMT_XLO] = 0.0; wesn[GMT_XHI] = inc[GMT_X] * jout; wesn[GMT_YLO] = 0.0; wesn[GMT_YHI] = inc[GMT_Y] * iout; if ((Out = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate output grid", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "conv", Out)) die("could not set title", ""); /* parameters for convolution buffer */ narr = xarr * yarr; yarr2 = (int)(yarr / 2.0); if (ydim < ibuff) ibuff = ydim; imove = ibuff - yarr; nbuff = xdim * ibuff; if ((filter = (float *)malloc(sizeof(float) * narr)) == NULL) die("memory allocation", ""); if ((buffer = (float *)malloc(2 * sizeof(float) * nbuff)) == NULL) die("memory allocation", ""); if (format_flag == 1) if ((indat = (float *)malloc(4 * xdim)) == NULL) die("memory allocation", ""); if (format_flag == 2) if ((cindat = (short *)malloc(4 * xdim)) == NULL) die("memory allocation", ""); if (format_flag == 3) if ((cfdat = (float *)malloc(8 * xdim)) == NULL) die("memory allocation", ""); /* read the filter and calculate normalization constants*/ anormax = rnormax = 0.0f; for (i = 0; i < narr; i++) { if (fscanf(f_filter, "%f", &filtin) == EOF) die("filter incomplete", ""); filter[i] = filtin; anormax = anormax + (float)fabs(filter[i]); rnormax = rnormax + filter[i]; } norm = 0.0f; if (fabs(rnormax) > 0.05 * anormax) norm = 1.0f; ic0 = 0; iend = ylen = ibuff; if (verbose) fprintf(stderr, " format_flag %d \n", format_flag); /* read the data (512 lines) */ if (format_flag == 1) read_float(indat, xdim, f_input, 0, buffer, ibuff); if (format_flag == 2) read_SLC_int(cindat, xdim, f_input, 0, buffer, DFACT, ibuff); if (format_flag == 3) read_SLC_float(cfdat, xdim, f_input, 0, buffer, DFACT, ibuff); for (ic = 0, row = 0; ic < iout * idec; ic = ic + idec) { if (ic / 2000.0 == ic / 1000) if (verbose) fprintf(stderr, " line %d\n", ic); /* check buffer and shift data up if necessary */ if ((ic + yarr2) >= iend && (ic + yarr2) < (ydim - 1)) { for (i = 0; i < yarr; i++) for (j = 0; j < xdim; j++) buffer[j + xdim * i] = buffer[j + xdim * (i + (ylen - yarr))]; iread = MIN(imove, (ydim - iend)); ic0 = iend - yarr; iend = iend + iread; ylen = iread + yarr; /* now read in more data into end of buffer */ if (format_flag == 1) read_float(indat, xdim, f_input, yarr, buffer, iread); if (format_flag == 2) read_SLC_int(cindat, xdim, f_input, yarr, buffer, DFACT, iread); if (format_flag == 3) read_SLC_float(cfdat, xdim, f_input, yarr, buffer, DFACT, iread); } /* end of ic loop */ left_node = GMT_Get_Index(API, Out->header, row, 0); jout = 0; ic1 = ic - ic0; /* now do the 2d convolution */ for (jc = 0; jc < floor(xmax / inc[GMT_X]) * jdec; jc = jc + jdec) { conv2d(buffer, &ylen, &xdim, filter, &yarr, &xarr, &filtdat, &ic1, &jc, &rnorm); /* use a zero or null value if there is not enough data in the filter */ Out->data[left_node + jout] = 0.0f; if (norm > 0) { if (fabs(rnorm) > (0.01 * rnormax)) Out->data[left_node + jout] = filtdat / rnorm; } else { if (fabs(rnorm) < 0.0001 * anormax) Out->data[left_node + jout] = filtdat; } jout++; } /* end of jc loop */ row++; } /* end of data loop */ fclose(f_input); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, output_name, Out)) { die("Failed to write output grid", ""); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/08/08e1250f8bd08c01b626469ccfaf5dd7cfefaab1.svn-base000444 015705 000000 00000007563 13505462014 026171 0ustar00sandwellwheel000000 000000 /* * $Id: epr_ptrarray.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_PTRARRAY_H_INCL #define EPR_PTRARRAY_H_INCL #ifdef __cplusplus extern "C" { #endif #include /** * The EPR_PtrArray structure represents a dynamic * array of pointers. */ struct EPR_PtrArray { /** The current capacity */ unsigned int capacity; /** The current length */ unsigned int length; /** The pointer elements */ void** elems; }; typedef struct EPR_PtrArray EPR_SPtrArray; /** * Creates a new dynamic pointer array instance. * * @param capacity the initial capacity * @return a new dynamic pointer array instance with the given capacity or * NULL if memory could not be allocated */ EPR_SPtrArray* epr_create_ptr_array(unsigned int capacity); /** * Frees the memory allocated through the given dynamic pointer array. * *

After calling this function the give record pointer array gets * invalid and should not be used anymore. * * @param ptr_array the pointer array to be released, if NULL * the function immediately returns */ void epr_free_ptr_array(EPR_SPtrArray* ptr_array); /** * Special application of the epr_free_ptr_array for * arrays that contain dynamically allocated strings (type char*). * *

For each element in the given array the epr_free_string * function is called. * * @param char_ptr_array an array containing strings */ void epr_free_char_ptr_array(EPR_SPtrArray* char_ptr_array); /** * Adds a new pointer to the given pointer array. * The function automatically grows the array if necessary. * * @param ptr_array the pointer array to which to add the new element, * must not be NULL. * @param elem the element to be added * @return zero for success, an error code otherwise */ int epr_add_ptr_array_elem(EPR_SPtrArray* ptr_array, void* elem); /** * Grows the given pointer array so that is has the given capacity. * The length of the array is not touched by this function. * * @param ptr_array the pointer array to which to add the new element, * must not be NULL. * @param capacity the new capacity * @return zero for success, an error code otherwise */ int epr_grow_ptr_array(EPR_SPtrArray* ptr_array, unsigned int capacity); /** * Returns the length of the given pointer array. * @param ptr_array the pointer array, must not be NULL. * @return the length of the given pointer array */ unsigned int epr_get_ptr_array_length(const EPR_SPtrArray* ptr_array); /** * Returns the capacity of the given pointer array. * @param ptr_array the pointer array, must not be NULL. * @return the capacity of the given pointer array */ unsigned int epr_get_ptr_array_capacity(const EPR_SPtrArray* ptr_array); /** * Gets the element with the specified index of the given pointer array. * @param ptr_array the pointer array, must not be NULL. * @param index the zero-based index, must be less than the array's length * @return the element at the given index */ void* epr_get_ptr_array_elem_at(const EPR_SPtrArray* ptr_array, unsigned int index); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_PTRARRAY_H_INCL */ GMTSAR_V5.7/.svn/pristine/08/088848473491e83f395dede9237fe64b0b26f489.svn-base000444 015705 000000 00000127645 13505462014 025377 0ustar00sandwellwheel000000 000000 0 -0.000000 0.000000 -0.000000 0.000000 1 -0.000000 0.000000 0.000000 0.000000 2 -0.000000 0.000000 0.000000 -0.000000 3 -0.000000 0.000000 0.000000 -0.000000 4 -0.000000 0.000000 0.000000 -0.000000 5 -0.000000 0.000000 -0.000000 0.000000 6 -0.000000 0.000000 0.000000 0.000000 7 -0.000000 0.000000 -0.000000 -0.000000 8 -0.000000 0.000000 -0.000000 0.000000 9 -0.000000 0.000000 -0.000000 -0.000000 10 -0.000000 0.000000 -0.000000 0.000000 11 -0.000000 0.000000 -0.000000 0.000000 12 -0.000000 0.000000 -0.000000 0.000000 13 -0.000000 0.000000 0.000000 -0.000000 14 -0.000000 0.000000 0.000000 0.000000 15 -0.000000 0.000000 0.000000 -0.000000 16 -0.000000 0.000000 0.000000 -0.000000 17 -0.000000 0.000000 -0.000000 0.000000 18 -0.000000 0.000000 0.000000 -0.000000 19 -0.000000 0.000000 -0.000000 0.000000 20 -0.000000 0.000000 -0.000000 0.000000 21 -0.000000 0.000000 -0.000000 0.000000 22 -0.000000 0.000000 -0.000000 -0.000000 23 -0.000000 0.000000 -0.000000 0.000000 24 -0.000000 0.000000 0.000000 0.000000 25 -0.000000 0.000000 0.000000 0.000000 26 -0.000000 0.000000 0.000000 0.000000 27 -0.000000 0.000000 -0.000000 0.000000 28 -0.000000 0.000000 0.000000 -0.000000 29 -0.000000 0.000000 -0.000000 -0.000000 30 -0.000000 0.000000 -0.000000 -0.000000 31 -0.000000 0.000000 -0.000000 -0.000000 32 -0.000000 0.000000 -0.000000 0.000000 33 -0.000000 0.000000 -0.000000 -0.000000 34 -0.000000 0.000000 0.000000 -0.000000 35 -0.000000 0.000000 -0.000000 -0.000000 36 -0.000000 0.000000 -0.000000 -0.000000 37 -0.000000 0.000000 0.000000 -0.000000 38 -0.000000 0.000000 0.000000 -0.000000 39 -0.000000 0.000000 0.000000 -0.000000 40 -0.000000 0.000000 -0.000000 0.000000 41 -0.000000 0.000000 0.000000 0.000000 42 -0.000000 0.000000 0.000000 -0.000000 43 -0.000000 0.000000 0.000000 -0.000000 44 -0.000000 0.000000 0.000000 0.000000 45 -0.000000 0.000000 -0.000000 0.000000 46 -0.000000 0.000000 -0.000000 0.000000 47 -0.000000 0.000000 -0.000000 -0.000000 48 -0.000000 0.000000 -0.000000 -0.000000 49 -0.000000 0.000000 0.000000 0.000000 50 -0.000000 0.000000 -0.000000 0.000000 51 -0.000000 0.000000 -0.000000 0.000000 52 -0.000000 0.000000 -0.000000 0.000000 53 -0.000000 0.000000 0.000000 -0.000000 54 -0.000000 0.000000 0.000000 -0.000000 55 -0.000000 0.000000 0.000000 -0.000000 56 -0.000000 0.000000 -0.000000 -0.000000 57 -0.000000 0.000000 -0.000000 0.000000 58 -0.000000 0.000000 -0.000000 0.000000 59 -0.000000 0.000000 -0.000000 0.000000 60 -0.000000 0.000000 -0.000000 0.000000 61 -0.000000 0.000000 -0.000000 0.000000 62 -0.000000 0.000000 -0.000000 0.000000 63 -0.000000 0.000000 0.000000 -0.000000 64 -0.000000 0.000000 0.000000 -0.000000 65 -0.000000 0.000000 0.000000 -0.000000 66 -0.000000 0.000000 0.000000 -0.000000 67 -0.000000 0.000000 0.000000 0.000000 68 -0.000000 0.000000 -0.000000 -0.000000 69 -0.000000 0.000000 0.000000 0.000000 70 -0.000000 0.000000 -0.000000 0.000000 71 -0.000000 0.000000 -0.000000 -0.000000 72 -0.000000 0.000000 -0.000000 0.000000 73 -0.000000 0.000000 0.000000 -0.000000 74 -0.000000 0.000000 0.000000 -0.000000 75 -0.000000 0.000000 0.000000 0.000000 76 -0.000000 0.000000 -0.000000 0.000000 77 -0.000000 0.000000 -0.000000 0.000000 78 -0.000000 0.000000 0.000000 -0.000000 79 -0.000000 0.000000 -0.000000 -0.000000 80 -0.000000 0.000000 -0.000000 0.000000 81 -0.000000 0.000000 -0.000000 0.000000 82 -0.000000 0.000000 -0.000000 0.000000 83 -0.000000 0.000000 0.000000 -0.000000 84 -0.000000 0.000000 0.000000 -0.000000 85 -0.000000 0.000000 -0.000000 0.000000 86 -0.000000 0.000000 -0.000000 0.000000 87 -0.000000 0.000000 0.000000 -0.000000 88 -0.000000 0.000000 0.000000 -0.000000 89 -0.000000 0.000000 0.000000 -0.000000 90 -0.000000 0.000000 0.000000 -0.000000 91 -0.000000 0.000000 0.000000 -0.000000 92 -0.000000 0.000000 0.000000 -0.000000 93 -0.000000 0.000000 -0.000000 0.000000 94 -0.000000 0.000000 -0.000000 0.000000 95 -0.000000 0.000000 0.000000 0.000000 96 -0.000000 0.000000 -0.000000 0.000000 97 -0.000000 0.000000 -0.000000 0.000000 98 -0.000000 0.000000 -0.000000 0.000000 99 -0.000000 0.000000 -0.000000 0.000000 100 -0.000000 0.000000 0.000000 -0.000000 101 -0.000000 0.000000 0.000000 -0.000000 102 -0.000000 0.000000 -0.000000 0.000000 103 -0.000000 0.000000 -0.000000 0.000000 104 -0.000000 0.000000 -0.000000 0.000000 105 -0.000000 0.000000 0.000000 0.000000 106 -0.000000 0.000000 0.000000 -0.000000 107 -0.000000 0.000000 0.000000 -0.000000 108 -0.000000 0.000000 0.000000 -0.000000 109 -0.000000 0.000000 0.000000 -0.000000 110 -0.000000 0.000000 -0.000000 0.000000 111 -0.000000 0.000000 -0.000000 0.000000 112 -0.000000 0.000000 -0.000000 0.000000 113 -0.000000 0.000000 -0.000000 0.000000 114 -0.000000 0.000000 0.000000 0.000000 115 -0.000000 0.000000 -0.000000 0.000000 116 -0.000000 0.000000 -0.000000 0.000000 117 -0.000000 0.000000 -0.000000 0.000000 118 -0.000000 0.000000 -0.000000 0.000000 119 -0.000000 0.000000 0.000000 -0.000000 120 -0.000000 0.000000 0.000000 -0.000000 121 -0.000000 0.000000 0.000000 -0.000000 122 -0.000000 0.000000 0.000000 0.000000 123 -0.000000 0.000000 -0.000000 0.000000 124 -0.000000 0.000000 -0.000000 0.000000 125 -0.000000 0.000000 0.000000 -0.000000 126 -0.000000 0.000000 0.000000 -0.000000 127 -0.000000 0.000000 0.000000 0.000000 128 -0.000000 0.000000 -0.000000 0.000000 129 -0.000000 0.000000 0.000000 -0.000000 130 -0.000000 0.000000 0.000000 -0.000000 131 -0.000000 0.000000 0.000000 -0.000000 132 -0.000000 0.000000 0.000000 -0.000000 133 -0.000000 0.000000 -0.000000 0.000000 134 -0.000000 0.000000 -0.000000 -0.000000 135 -0.000000 0.000000 -0.000000 0.000000 136 -0.000000 0.000000 -0.000000 0.000000 137 -0.000000 0.000000 -0.000000 0.000000 138 -0.000000 0.000000 0.000000 0.000000 139 -0.000000 0.000000 -0.000000 -0.000000 140 -0.000000 0.000000 0.000000 0.000000 141 -0.000000 0.000000 0.000000 -0.000000 142 -0.000000 0.000000 -0.000000 -0.000000 143 -0.000000 0.000000 0.000000 0.000000 144 -0.000000 0.000000 -0.000000 0.000000 145 -0.000000 0.000000 -0.000000 -0.000000 146 -0.000000 0.000000 0.000000 0.000000 147 -0.000000 0.000000 0.000000 -0.000000 148 -0.000000 0.000000 -0.000000 -0.000000 149 -0.000000 0.000000 -0.000000 0.000000 150 -0.000000 0.000000 0.000000 0.000000 151 -0.000000 0.000000 0.000000 0.000000 152 -0.000000 0.000000 -0.000000 0.000000 153 -0.000000 0.000000 -0.000000 0.000000 154 -0.000000 0.000000 -0.000000 -0.000000 155 -0.000000 0.000000 -0.000000 0.000000 156 -0.000000 0.000000 0.000000 -0.000000 157 -0.000000 0.000000 0.000000 -0.000000 158 -0.000000 0.000000 -0.000000 -0.000000 159 -0.000000 0.000000 -0.000000 -0.000000 160 -0.000000 0.000000 -0.000000 -0.000000 161 -0.000000 0.000000 -0.000000 -0.000000 162 -0.000000 0.000000 0.000000 -0.000000 163 -0.000000 0.000000 0.000000 -0.000000 164 -0.000000 0.000000 -0.000000 0.000000 165 -0.000000 0.000000 -0.000000 -0.000000 166 -0.000000 0.000000 0.000000 -0.000000 167 -0.000000 0.000000 -0.000000 0.000000 168 -0.000000 0.000000 0.000000 0.000000 169 -0.000000 0.000000 0.000000 -0.000000 170 -0.000000 0.000000 0.000000 -0.000000 171 -0.000000 0.000000 0.000000 0.000000 172 -0.000000 0.000000 -0.000000 0.000000 173 -0.000000 0.000000 -0.000000 0.000000 174 -0.000000 0.000000 -0.000000 0.000000 175 -0.000000 0.000000 0.000000 -0.000000 176 -0.000000 0.000000 0.000000 -0.000000 177 -0.000000 0.000000 0.000000 0.000000 178 -0.000000 0.000000 -0.000000 0.000000 179 -0.000000 0.000000 -0.000000 0.000000 180 -0.000000 0.000000 0.000000 -0.000000 181 -0.000000 0.000000 0.000000 -0.000000 182 -0.000000 0.000000 -0.000000 -0.000000 183 -0.000000 0.000000 -0.000000 0.000000 184 -0.000000 0.000000 -0.000000 0.000000 185 -0.000000 0.000000 -0.000000 -0.000000 186 -0.000000 0.000000 0.000000 -0.000000 187 -0.000000 0.000000 0.000000 -0.000000 188 -0.000000 0.000000 0.000000 -0.000000 189 -0.000000 0.000000 0.000000 0.000000 190 -0.000000 0.000000 0.000000 0.000000 191 -0.000000 0.000000 -0.000000 0.000000 192 -0.000000 0.000000 -0.000000 0.000000 193 -0.000000 0.000000 -0.000000 0.000000 194 -0.000000 0.000000 0.000000 -0.000000 195 -0.000000 0.000000 0.000000 -0.000000 196 -0.000000 0.000000 0.000000 -0.000000 197 -0.000000 0.000000 -0.000000 0.000000 198 -0.000000 0.000000 -0.000000 0.000000 199 -0.000000 0.000000 -0.000000 0.000000 200 -0.000000 0.000000 0.000000 -0.000000 201 -0.000000 0.000000 0.000000 -0.000000 202 -0.000000 0.000000 0.000000 -0.000000 203 -0.000000 0.000000 -0.000000 0.000000 204 -0.000000 0.000000 -0.000000 0.000000 205 -0.000000 0.000000 0.000000 -0.000000 206 -0.000000 0.000000 0.000000 -0.000000 207 -0.000000 0.000000 0.000000 -0.000000 208 -0.000000 0.000000 -0.000000 0.000000 209 -0.000000 0.000000 0.000000 -0.000000 210 -0.000000 0.000000 -0.000000 -0.000000 211 -0.000000 0.000000 -0.000000 -0.000000 212 -0.000000 0.000000 -0.000000 0.000000 213 -0.000000 0.000000 0.000000 -0.000000 214 -0.000000 0.000000 0.000000 -0.000000 215 -0.000000 0.000000 0.000000 -0.000000 216 -0.000000 0.000000 -0.000000 0.000000 217 -0.000000 0.000000 -0.000000 0.000000 218 -0.000000 0.000000 0.000000 -0.000000 219 -0.000000 0.000000 0.000000 -0.000000 220 -0.000000 0.000000 0.000000 -0.000000 221 -0.000000 0.000000 0.000000 0.000000 222 -0.000000 0.000000 -0.000000 0.000000 223 -0.000000 0.000000 -0.000000 0.000000 224 -0.000000 0.000000 -0.000000 0.000000 225 -0.000000 0.000000 0.000000 -0.000000 226 -0.000000 0.000000 0.000000 -0.000000 227 -0.000000 0.000000 0.000000 -0.000000 228 -0.000000 0.000000 -0.000000 0.000000 229 -0.000000 0.000000 0.000000 -0.000000 230 -0.000000 0.000000 0.000000 -0.000000 231 -0.000000 0.000000 -0.000000 0.000000 232 -0.000000 0.000000 -0.000000 0.000000 233 -0.000000 0.000000 -0.000000 0.000000 234 -0.000000 0.000000 0.000000 -0.000000 235 -0.000000 0.000000 0.000000 -0.000000 236 -0.000000 0.000000 0.000000 -0.000000 237 -0.000000 0.000000 0.000000 0.000000 238 -0.000000 0.000000 -0.000000 0.000000 239 -0.000000 0.000000 -0.000000 0.000000 240 -0.000000 0.000000 -0.000000 0.000000 241 -0.000000 0.000000 -0.000000 -0.000000 242 -0.000000 0.000000 0.000000 -0.000000 243 -0.000000 0.000000 -0.000000 0.000000 244 -0.000000 0.000000 -0.000000 0.000000 245 -0.000000 0.000000 -0.000000 0.000000 246 -0.000000 0.000000 -0.000000 0.000000 247 -0.000000 0.000000 0.000000 -0.000000 248 -0.000000 0.000000 0.000000 -0.000000 249 -0.000000 0.000000 0.000000 -0.000000 250 -0.000000 0.000000 -0.000000 0.000000 251 -0.000000 0.000000 -0.000000 0.000000 252 -0.000000 0.000000 0.000000 -0.000000 253 -0.000000 0.000000 0.000000 -0.000000 254 -0.000000 0.000000 -0.000000 -0.000000 255 -0.000000 0.000000 -0.000000 0.000000 256 -0.000000 0.000000 -0.000000 0.000000 257 -0.000000 0.000000 -0.000000 0.000000 258 -0.000000 0.000000 0.000000 0.000000 259 -0.000000 0.000000 0.000000 -0.000000 260 -0.000000 0.000000 0.000000 -0.000000 261 -0.000000 0.000000 0.000000 -0.000000 262 -0.000000 0.000000 0.000000 -0.000000 263 -0.000000 0.000000 0.000000 -0.000000 264 -0.000000 0.000000 0.000000 -0.000000 265 -0.000000 0.000000 -0.000000 0.000000 266 -0.000000 0.000000 -0.000000 0.000000 267 -0.000000 0.000000 -0.000000 0.000000 268 -0.000000 0.000000 -0.000000 0.000000 269 -0.000000 0.000000 -0.000000 0.000000 270 -0.000000 0.000000 0.000000 -0.000000 271 -0.000000 0.000000 0.000000 -0.000000 272 -0.000000 0.000000 0.000000 -0.000000 273 -0.000000 0.000000 -0.000000 -0.000000 274 -0.000000 0.000000 -0.000000 -0.000000 275 -0.000000 0.000000 -0.000000 0.000000 276 -0.000000 0.000000 -0.000000 0.000000 277 -0.000000 0.000000 0.000000 -0.000000 278 -0.000000 0.000000 0.000000 -0.000000 279 -0.000000 0.000000 0.000000 -0.000000 280 -0.000000 0.000000 0.000000 0.000000 281 -0.000000 0.000000 -0.000000 0.000000 282 -0.000000 0.000000 -0.000000 0.000000 283 -0.000000 0.000000 0.000000 0.000000 284 -0.000000 0.000000 0.000000 -0.000000 285 -0.000000 0.000000 0.000000 -0.000000 286 -0.000000 0.000000 0.000000 0.000000 287 -0.000000 0.000000 0.000000 0.000000 288 -0.000000 0.000000 -0.000000 0.000000 289 -0.000000 0.000000 -0.000000 0.000000 290 -0.000000 0.000000 -0.000000 0.000000 291 -0.000000 0.000000 0.000000 -0.000000 292 -0.000000 0.000000 -0.000000 -0.000000 293 -0.000000 0.000000 -0.000000 -0.000000 294 -0.000000 0.000000 -0.000000 0.000000 295 -0.000000 0.000000 -0.000000 0.000000 296 -0.000000 0.000000 0.000000 -0.000000 297 -0.000000 0.000000 0.000000 -0.000000 298 -0.000000 0.000000 0.000000 -0.000000 299 -0.000000 0.000000 0.000000 -0.000000 300 -0.000000 0.000000 -0.000000 -0.000000 301 -0.000000 0.000000 -0.000000 0.000000 302 -0.000000 0.000000 -0.000000 -0.000000 303 -0.000000 0.000000 -0.000000 0.000000 304 -0.000000 0.000000 -0.000000 0.000000 305 -0.000000 0.000000 -0.000000 0.000000 306 -0.000000 0.000000 -0.000000 0.000000 307 -0.000000 0.000000 0.000000 0.000000 308 -0.000000 0.000000 -0.000000 0.000000 309 -0.000000 0.000000 0.000000 -0.000000 310 -0.000000 0.000000 0.000000 0.000000 311 -0.000000 0.000000 -0.000000 -0.000000 312 -0.000000 0.000000 0.000000 -0.000000 313 -0.000000 0.000000 0.000000 0.000000 314 -0.000000 0.000000 -0.000000 0.000000 315 -0.000000 0.000000 -0.000000 0.000000 316 -0.000000 0.000000 -0.000000 0.000000 317 -0.000000 0.000000 0.000000 -0.000000 318 -0.000000 0.000000 0.000000 -0.000000 319 -0.000000 0.000000 -0.000000 -0.000000 320 -0.000000 0.000000 0.000000 -0.000000 321 -0.000000 0.000000 0.000000 -0.000000 322 -0.000000 0.000000 0.000000 -0.000000 323 -0.000000 0.000000 -0.000000 0.000000 324 -0.000000 0.000000 -0.000000 0.000000 325 -0.000000 0.000000 -0.000000 0.000000 326 -0.000000 0.000000 -0.000000 -0.000000 327 -0.000000 0.000000 0.000000 -0.000000 328 -0.000000 0.000000 0.000000 -0.000000 329 -0.000000 0.000000 -0.000000 -0.000000 330 -0.000000 0.000000 -0.000000 0.000000 331 -0.000000 0.000000 -0.000000 0.000000 332 -0.000000 0.000000 0.000000 0.000000 333 -0.000000 0.000000 0.000000 0.000000 334 -0.000000 0.000000 -0.000000 0.000000 335 -0.000000 0.000000 -0.000000 0.000000 336 -0.000000 0.000000 -0.000000 0.000000 337 -0.000000 0.000000 -0.000000 0.000000 338 -0.000000 0.000000 0.000000 -0.000000 339 -0.000000 0.000000 -0.000000 0.000000 340 -0.000000 0.000000 0.000000 -0.000000 341 -0.000000 0.000000 0.000000 -0.000000 342 -0.000000 0.000000 0.000000 -0.000000 343 -0.000000 0.000000 0.000000 -0.000000 344 -0.000000 0.000000 -0.000000 0.000000 345 -0.000000 0.000000 0.000000 -0.000000 346 -0.000000 0.000000 0.000000 -0.000000 347 -0.000000 0.000000 0.000000 -0.000000 348 -0.000000 0.000000 0.000000 -0.000000 349 -0.000000 0.000000 0.000000 0.000000 350 -0.000000 0.000000 -0.000000 0.000000 351 -0.000000 0.000000 -0.000000 0.000000 352 -0.000000 0.000000 0.000000 -0.000000 353 -0.000000 0.000000 -0.000000 -0.000000 354 -0.000000 0.000000 -0.000000 0.000000 355 -0.000000 0.000000 -0.000000 0.000000 356 -0.000000 0.000000 -0.000000 0.000000 357 -0.000000 0.000000 0.000000 -0.000000 358 -0.000000 0.000000 0.000000 -0.000000 359 -0.000000 0.000000 0.000000 -0.000000 360 -0.000000 0.000000 0.000000 -0.000000 361 -0.000000 0.000000 -0.000000 -0.000000 362 -0.000000 0.000000 -0.000000 0.000000 363 -0.000000 0.000000 -0.000000 0.000000 364 -0.000000 0.000000 -0.000000 0.000000 365 -0.000000 0.000000 0.000000 0.000000 366 -0.000000 0.000000 0.000000 -0.000000 367 -0.000000 0.000000 0.000000 -0.000000 368 -0.000000 0.000000 -0.000000 0.000000 369 -0.000000 0.000000 -0.000000 0.000000 370 -0.000000 0.000000 -0.000000 0.000000 371 -0.000000 0.000000 0.000000 -0.000000 372 -0.000000 0.000000 0.000000 -0.000000 373 -0.000000 0.000000 0.000000 -0.000000 374 -0.000000 0.000000 -0.000000 0.000000 375 -0.000000 0.000000 -0.000000 0.000000 376 -0.000000 0.000000 -0.000000 0.000000 377 -0.000000 0.000000 0.000000 -0.000000 378 -0.000000 0.000000 0.000000 -0.000000 379 -0.000000 0.000000 -0.000000 0.000000 380 -0.000000 0.000000 -0.000000 0.000000 381 -0.000000 0.000000 0.000000 -0.000000 382 -0.000000 0.000000 0.000000 -0.000000 383 -0.000000 0.000000 0.000000 -0.000000 384 -0.000000 0.000000 -0.000000 0.000000 385 -0.000000 0.000000 -0.000000 0.000000 386 -0.000000 0.000000 -0.000000 0.000000 387 -0.000000 0.000000 0.000000 -0.000000 388 -0.000000 0.000000 0.000000 -0.000000 389 -0.000000 0.000000 -0.000000 0.000000 390 -0.000000 0.000000 -0.000000 0.000000 391 -0.000000 0.000000 -0.000000 0.000000 392 -0.000000 0.000000 -0.000000 0.000000 393 -0.000000 0.000000 0.000000 -0.000000 394 -0.000000 0.000000 0.000000 -0.000000 395 -0.000000 0.000000 0.000000 -0.000000 396 -0.000000 0.000000 0.000000 0.000000 397 -0.000000 0.000000 -0.000000 0.000000 398 -0.000000 0.000000 -0.000000 0.000000 399 -0.000000 0.000000 0.000000 -0.000000 400 -0.000000 0.000000 0.000000 -0.000000 401 -0.000000 0.000000 -0.000000 -0.000000 402 -0.000000 0.000000 0.000000 -0.000000 403 -0.000000 0.000000 0.000000 -0.000000 404 -0.000000 0.000000 0.000000 -0.000000 405 -0.000000 0.000000 -0.000000 -0.000000 406 -0.000000 0.000000 -0.000000 0.000000 407 -0.000000 0.000000 -0.000000 0.000000 408 -0.000000 0.000000 -0.000000 0.000000 409 -0.000000 0.000000 0.000000 -0.000000 410 -0.000000 0.000000 0.000000 -0.000000 411 -0.000000 0.000000 -0.000000 -0.000000 412 -0.000000 0.000000 -0.000000 0.000000 413 -0.000000 0.000000 -0.000000 0.000000 414 -0.000000 0.000000 -0.000000 0.000000 415 -0.000000 0.000000 -0.000000 0.000000 416 -0.000000 0.000000 0.000000 0.000000 417 -0.000000 0.000000 -0.000000 0.000000 418 -0.000000 0.000000 -0.000000 -0.000000 419 -0.000000 0.000000 0.000000 -0.000000 420 -0.000000 0.000000 0.000000 -0.000000 421 -0.000000 0.000000 -0.000000 0.000000 422 -0.000000 0.000000 -0.000000 0.000000 423 -0.000000 0.000000 0.000000 0.000000 424 -0.000000 0.000000 0.000000 -0.000000 425 -0.000000 0.000000 0.000000 -0.000000 426 -0.000000 0.000000 -0.000000 0.000000 427 -0.000000 0.000000 -0.000000 0.000000 428 -0.000000 0.000000 0.000000 0.000000 429 -0.000000 0.000000 0.000000 0.000000 430 -0.000000 0.000000 -0.000000 0.000000 431 -0.000000 0.000000 -0.000000 0.000000 432 -0.000000 0.000000 -0.000000 -0.000000 433 -0.000000 0.000000 -0.000000 0.000000 434 -0.000000 0.000000 -0.000000 -0.000000 435 -0.000000 0.000000 0.000000 -0.000000 436 -0.000000 0.000000 0.000000 0.000000 437 -0.000000 0.000000 0.000000 0.000000 438 -0.000000 0.000000 0.000000 -0.000000 439 -0.000000 0.000000 -0.000000 0.000000 440 -0.000000 0.000000 -0.000000 0.000000 441 -0.000000 0.000000 0.000000 0.000000 442 -0.000000 0.000000 -0.000000 0.000000 443 -0.000000 0.000000 -0.000000 0.000000 444 -0.000000 0.000000 0.000000 -0.000000 445 -0.000000 0.000000 -0.000000 0.000000 446 -0.000000 0.000000 -0.000000 0.000000 447 -0.000000 0.000000 0.000000 0.000000 448 -0.000000 0.000000 -0.000000 0.000000 449 -0.000000 0.000000 0.000000 0.000000 450 -0.000000 0.000000 0.000000 -0.000000 451 -0.000000 0.000000 -0.000000 0.000000 452 -0.000000 0.000000 0.000000 -0.000000 453 -0.000000 0.000000 -0.000000 -0.000000 454 -0.000000 0.000000 -0.000000 0.000000 455 -0.000000 0.000000 0.000000 -0.000000 456 -0.000000 0.000000 0.000000 -0.000000 457 -0.000000 0.000000 -0.000000 0.000000 458 -0.000000 0.000000 -0.000000 0.000000 459 -0.000000 0.000000 0.000000 0.000000 460 -0.000000 0.000000 -0.000000 0.000000 461 -0.000000 0.000000 0.000000 -0.000000 462 -0.000000 0.000000 0.000000 0.000000 463 -0.000000 0.000000 -0.000000 -0.000000 464 -0.000000 0.000000 0.000000 -0.000000 465 -0.000000 0.000000 -0.000000 -0.000000 466 -0.000000 0.000000 -0.000000 0.000000 467 -0.000000 0.000000 -0.000000 0.000000 468 -0.000000 0.000000 0.000000 -0.000000 469 -0.000000 0.000000 -0.000000 -0.000000 470 -0.000000 0.000000 -0.000000 -0.000000 471 -0.000000 0.000000 -0.000000 0.000000 472 -0.000000 0.000000 -0.000000 0.000000 473 -0.000000 0.000000 -0.000000 -0.000000 474 -0.000000 0.000000 0.000000 -0.000000 475 -0.000000 0.000000 0.000000 0.000000 476 -0.000000 0.000000 0.000000 -0.000000 477 -0.000000 0.000000 0.000000 0.000000 478 -0.000000 0.000000 -0.000000 -0.000000 479 -0.000000 0.000000 -0.000000 -0.000000 480 -0.000000 0.000000 0.000000 -0.000000 481 -0.000000 0.000000 0.000000 -0.000000 482 -0.000000 0.000000 -0.000000 0.000000 483 -0.000000 0.000000 0.000000 -0.000000 484 -0.000000 0.000000 0.000000 -0.000000 485 -0.000000 0.000000 -0.000000 0.000000 486 -0.000000 0.000000 -0.000000 0.000000 487 -0.000000 0.000000 -0.000000 0.000000 488 -0.000000 0.000000 -0.000000 0.000000 489 -0.000000 0.000000 0.000000 -0.000000 490 -0.000000 0.000000 -0.000000 -0.000000 491 -0.000000 0.000000 0.000000 0.000000 492 -0.000000 0.000000 0.000000 -0.000000 493 -0.000000 0.000000 0.000000 -0.000000 494 -0.000000 0.000000 -0.000000 0.000000 495 -0.000000 0.000000 -0.000000 0.000000 496 -0.000000 0.000000 -0.000000 0.000000 497 -0.000000 0.000000 -0.000000 0.000000 498 -0.000000 0.000000 0.000000 -0.000000 499 -0.000000 0.000000 0.000000 -0.000000 500 -0.000000 0.000000 0.000000 -0.000000 501 -0.000000 0.000000 0.000000 -0.000000 502 -0.000000 0.000000 -0.000000 0.000000 503 -0.000000 0.000000 0.000000 0.000000 504 -0.000001 0.000001 0.000000 -0.000000 505 -0.000033 0.000033 0.000000 -0.000000 506 -0.000740 0.000740 0.000000 0.000000 507 -0.009652 0.009652 -0.000000 0.000000 508 -0.073263 0.073263 -0.000000 0.000000 509 -0.316198 0.316198 -0.000000 -0.000000 510 -0.735759 0.735759 -0.000000 0.000000 511 -0.778801 0.778801 -0.000000 0.000000 512 0.000000 0.000000 -0.000000 0.000000 513 0.778801 -0.778801 0.000000 0.000000 514 0.735759 -0.735759 0.000000 0.000000 515 0.316198 -0.316198 0.000000 -0.000000 516 0.073263 -0.073263 0.000000 -0.000000 517 0.009652 -0.009652 0.000000 -0.000000 518 0.000740 -0.000740 0.000000 -0.000000 519 0.000033 -0.000033 -0.000000 0.000000 520 0.000001 -0.000001 -0.000001 0.000001 521 0.000000 -0.000000 -0.000034 0.000033 522 0.000000 -0.000000 -0.000740 0.000740 523 0.000000 -0.000000 -0.009652 0.009652 524 0.000000 -0.000000 -0.073263 0.073263 525 0.000000 -0.000000 -0.316198 0.316198 526 0.000000 -0.000000 -0.735759 0.735759 527 0.000000 -0.000000 -0.778801 0.778801 528 0.000000 -0.000000 0.000000 -0.000000 529 0.000000 -0.000000 0.778801 -0.778801 530 0.000000 -0.000000 0.735759 -0.735759 531 0.000000 -0.000000 0.316198 -0.316198 532 0.000000 -0.000000 0.073263 -0.073263 533 0.000000 -0.000000 0.009652 -0.009652 534 0.000000 -0.000000 0.000740 -0.000740 535 0.000000 -0.000000 0.000033 -0.000034 536 0.000000 -0.000000 0.000001 -0.000001 537 0.000000 -0.000000 0.000000 -0.000000 538 0.000000 -0.000000 0.000000 -0.000000 539 0.000000 -0.000000 0.000000 0.000000 540 0.000000 -0.000000 0.000000 -0.000000 541 0.000000 -0.000000 -0.000000 0.000000 542 0.000000 -0.000000 0.000000 -0.000000 543 0.000000 -0.000000 0.000000 0.000000 544 0.000000 -0.000000 -0.000000 0.000000 545 0.000000 -0.000000 0.000000 -0.000000 546 0.000000 -0.000000 0.000000 -0.000000 547 0.000000 -0.000000 0.000000 -0.000000 548 0.000000 -0.000000 0.000000 0.000000 549 0.000000 -0.000000 -0.000000 0.000000 550 0.000000 -0.000000 -0.000000 0.000000 551 0.000000 -0.000000 0.000000 -0.000000 552 0.000000 -0.000000 0.000000 -0.000000 553 0.000000 -0.000000 -0.000000 0.000000 554 0.000000 -0.000000 -0.000000 0.000000 555 0.000000 -0.000000 0.000000 0.000000 556 0.000000 -0.000000 0.000000 -0.000000 557 0.000000 -0.000000 0.000000 0.000000 558 0.000000 -0.000000 0.000000 -0.000000 559 0.000000 -0.000000 -0.000000 0.000000 560 0.000000 -0.000000 -0.000000 0.000000 561 0.000000 -0.000000 -0.000000 -0.000000 562 0.000000 -0.000000 -0.000000 -0.000000 563 0.000000 -0.000000 -0.000000 0.000000 564 0.000000 -0.000000 0.000000 0.000000 565 0.000000 -0.000000 0.000000 0.000000 566 0.000000 -0.000000 0.000000 -0.000000 567 0.000000 -0.000000 0.000000 -0.000000 568 0.000000 -0.000000 -0.000000 -0.000000 569 0.000000 -0.000000 -0.000000 0.000000 570 0.000000 -0.000000 -0.000000 0.000000 571 0.000000 -0.000000 0.000000 0.000000 572 0.000000 -0.000000 0.000000 -0.000000 573 0.000000 -0.000000 0.000000 -0.000000 574 0.000000 -0.000000 0.000000 -0.000000 575 0.000000 -0.000000 0.000000 -0.000000 576 0.000000 -0.000000 0.000000 -0.000000 577 0.000000 -0.000000 -0.000000 -0.000000 578 0.000000 -0.000000 -0.000000 0.000000 579 0.000000 -0.000000 -0.000000 0.000000 580 0.000000 -0.000000 -0.000000 0.000000 581 0.000000 -0.000000 0.000000 -0.000000 582 0.000000 -0.000000 0.000000 0.000000 583 0.000000 -0.000000 0.000000 -0.000000 584 0.000000 -0.000000 -0.000000 0.000000 585 0.000000 -0.000000 -0.000000 0.000000 586 0.000000 -0.000000 -0.000000 -0.000000 587 0.000000 -0.000000 0.000000 -0.000000 588 0.000000 -0.000000 0.000000 -0.000000 589 0.000000 -0.000000 -0.000000 0.000000 590 0.000000 -0.000000 0.000000 0.000000 591 0.000000 -0.000000 -0.000000 -0.000000 592 0.000000 -0.000000 0.000000 -0.000000 593 0.000000 -0.000000 0.000000 0.000000 594 0.000000 -0.000000 0.000000 0.000000 595 0.000000 -0.000000 0.000000 -0.000000 596 0.000000 -0.000000 -0.000000 0.000000 597 0.000000 -0.000000 -0.000000 0.000000 598 0.000000 -0.000000 -0.000000 -0.000000 599 0.000000 -0.000000 -0.000000 0.000000 600 0.000000 -0.000000 0.000000 -0.000000 601 0.000000 -0.000000 0.000000 -0.000000 602 0.000000 -0.000000 -0.000000 0.000000 603 0.000000 -0.000000 0.000000 -0.000000 604 0.000000 -0.000000 0.000000 0.000000 605 0.000000 -0.000000 0.000000 0.000000 606 0.000000 -0.000000 0.000000 -0.000000 607 0.000000 -0.000000 0.000000 -0.000000 608 0.000000 -0.000000 -0.000000 0.000000 609 0.000000 -0.000000 -0.000000 0.000000 610 0.000000 -0.000000 -0.000000 0.000000 611 0.000000 -0.000000 -0.000000 0.000000 612 0.000000 -0.000000 0.000000 -0.000000 613 0.000000 -0.000000 0.000000 -0.000000 614 0.000000 -0.000000 -0.000000 0.000000 615 0.000000 -0.000000 -0.000000 0.000000 616 0.000000 -0.000000 0.000000 -0.000000 617 0.000000 -0.000000 -0.000000 0.000000 618 0.000000 -0.000000 -0.000000 0.000000 619 0.000000 -0.000000 0.000000 0.000000 620 0.000000 -0.000000 0.000000 -0.000000 621 0.000000 -0.000000 0.000000 -0.000000 622 0.000000 -0.000000 0.000000 -0.000000 623 0.000000 -0.000000 0.000000 -0.000000 624 0.000000 -0.000000 0.000000 -0.000000 625 0.000000 -0.000000 0.000000 -0.000000 626 0.000000 -0.000000 0.000000 0.000000 627 0.000000 -0.000000 0.000000 0.000000 628 0.000000 -0.000000 0.000000 0.000000 629 0.000000 -0.000000 -0.000000 0.000000 630 0.000000 -0.000000 0.000000 0.000000 631 0.000000 -0.000000 0.000000 -0.000000 632 0.000000 -0.000000 0.000000 -0.000000 633 0.000000 -0.000000 -0.000000 -0.000000 634 0.000000 -0.000000 -0.000000 0.000000 635 0.000000 -0.000000 -0.000000 0.000000 636 0.000000 -0.000000 0.000000 -0.000000 637 0.000000 -0.000000 0.000000 -0.000000 638 0.000000 -0.000000 -0.000000 -0.000000 639 0.000000 -0.000000 -0.000000 -0.000000 640 0.000000 -0.000000 0.000000 -0.000000 641 0.000000 -0.000000 0.000000 0.000000 642 0.000000 -0.000000 -0.000000 0.000000 643 0.000000 -0.000000 0.000000 -0.000000 644 0.000000 -0.000000 0.000000 -0.000000 645 0.000000 -0.000000 0.000000 -0.000000 646 0.000000 -0.000000 0.000000 -0.000000 647 0.000000 -0.000000 -0.000000 0.000000 648 0.000000 -0.000000 -0.000000 0.000000 649 0.000000 -0.000000 -0.000000 0.000000 650 0.000000 -0.000000 -0.000000 -0.000000 651 0.000000 -0.000000 -0.000000 -0.000000 652 0.000000 -0.000000 0.000000 -0.000000 653 0.000000 -0.000000 -0.000000 0.000000 654 0.000000 -0.000000 0.000000 0.000000 655 0.000000 -0.000000 -0.000000 0.000000 656 0.000000 -0.000000 0.000000 -0.000000 657 0.000000 -0.000000 0.000000 0.000000 658 0.000000 -0.000000 -0.000000 0.000000 659 0.000000 -0.000000 -0.000000 0.000000 660 0.000000 -0.000000 -0.000000 0.000000 661 0.000000 -0.000000 0.000000 -0.000000 662 0.000000 -0.000000 0.000000 -0.000000 663 0.000000 -0.000000 0.000000 -0.000000 664 0.000000 -0.000000 -0.000000 0.000000 665 0.000000 -0.000000 -0.000000 0.000000 666 0.000000 -0.000000 -0.000000 0.000000 667 0.000000 -0.000000 0.000000 -0.000000 668 0.000000 -0.000000 0.000000 -0.000000 669 0.000000 -0.000000 0.000000 -0.000000 670 0.000000 -0.000000 0.000000 0.000000 671 0.000000 -0.000000 -0.000000 0.000000 672 0.000000 -0.000000 -0.000000 0.000000 673 0.000000 -0.000000 0.000000 -0.000000 674 0.000000 -0.000000 0.000000 -0.000000 675 0.000000 -0.000000 0.000000 -0.000000 676 0.000000 -0.000000 -0.000000 0.000000 677 0.000000 -0.000000 -0.000000 0.000000 678 0.000000 -0.000000 0.000000 -0.000000 679 0.000000 -0.000000 0.000000 -0.000000 680 0.000000 -0.000000 -0.000000 0.000000 681 0.000000 -0.000000 -0.000000 0.000000 682 0.000000 -0.000000 -0.000000 0.000000 683 0.000000 -0.000000 0.000000 -0.000000 684 0.000000 -0.000000 0.000000 -0.000000 685 0.000000 -0.000000 0.000000 -0.000000 686 0.000000 -0.000000 -0.000000 0.000000 687 0.000000 -0.000000 -0.000000 0.000000 688 0.000000 -0.000000 -0.000000 0.000000 689 0.000000 -0.000000 0.000000 -0.000000 690 0.000000 -0.000000 0.000000 -0.000000 691 0.000000 -0.000000 0.000000 -0.000000 692 0.000000 -0.000000 -0.000000 0.000000 693 0.000000 -0.000000 -0.000000 0.000000 694 0.000000 -0.000000 -0.000000 0.000000 695 0.000000 -0.000000 0.000000 -0.000000 696 0.000000 -0.000000 0.000000 -0.000000 697 0.000000 -0.000000 0.000000 -0.000000 698 0.000000 -0.000000 0.000000 -0.000000 699 0.000000 -0.000000 0.000000 -0.000000 700 0.000000 -0.000000 -0.000000 0.000000 701 0.000000 -0.000000 -0.000000 0.000000 702 0.000000 -0.000000 -0.000000 0.000000 703 0.000000 -0.000000 0.000000 0.000000 704 0.000000 -0.000000 0.000000 -0.000000 705 0.000000 -0.000000 -0.000000 0.000000 706 0.000000 -0.000000 -0.000000 0.000000 707 0.000000 -0.000000 -0.000000 -0.000000 708 0.000000 -0.000000 0.000000 -0.000000 709 0.000000 -0.000000 0.000000 -0.000000 710 0.000000 -0.000000 0.000000 -0.000000 711 0.000000 -0.000000 0.000000 -0.000000 712 0.000000 -0.000000 -0.000000 0.000000 713 0.000000 -0.000000 0.000000 0.000000 714 0.000000 -0.000000 0.000000 -0.000000 715 0.000000 -0.000000 0.000000 -0.000000 716 0.000000 -0.000000 0.000000 0.000000 717 0.000000 -0.000000 -0.000000 -0.000000 718 0.000000 -0.000000 0.000000 -0.000000 719 0.000000 -0.000000 0.000000 -0.000000 720 0.000000 -0.000000 0.000000 -0.000000 721 0.000000 -0.000000 -0.000000 -0.000000 722 0.000000 -0.000000 0.000000 0.000000 723 0.000000 -0.000000 0.000000 -0.000000 724 0.000000 -0.000000 -0.000000 0.000000 725 0.000000 -0.000000 -0.000000 0.000000 726 0.000000 -0.000000 -0.000000 -0.000000 727 0.000000 -0.000000 0.000000 -0.000000 728 0.000000 -0.000000 -0.000000 -0.000000 729 0.000000 -0.000000 -0.000000 0.000000 730 0.000000 -0.000000 -0.000000 0.000000 731 0.000000 -0.000000 -0.000000 0.000000 732 0.000000 -0.000000 -0.000000 0.000000 733 0.000000 -0.000000 -0.000000 -0.000000 734 0.000000 -0.000000 0.000000 -0.000000 735 0.000000 -0.000000 0.000000 -0.000000 736 0.000000 -0.000000 0.000000 -0.000000 737 0.000000 -0.000000 -0.000000 0.000000 738 0.000000 -0.000000 0.000000 -0.000000 739 0.000000 -0.000000 -0.000000 -0.000000 740 0.000000 -0.000000 -0.000000 -0.000000 741 0.000000 -0.000000 -0.000000 0.000000 742 0.000000 -0.000000 -0.000000 0.000000 743 0.000000 -0.000000 -0.000000 0.000000 744 0.000000 -0.000000 0.000000 -0.000000 745 0.000000 -0.000000 -0.000000 -0.000000 746 0.000000 -0.000000 0.000000 -0.000000 747 0.000000 -0.000000 0.000000 -0.000000 748 0.000000 -0.000000 -0.000000 -0.000000 749 0.000000 -0.000000 -0.000000 0.000000 750 0.000000 -0.000000 0.000000 -0.000000 751 0.000000 -0.000000 0.000000 -0.000000 752 0.000000 -0.000000 0.000000 -0.000000 753 0.000000 -0.000000 0.000000 -0.000000 754 0.000000 -0.000000 -0.000000 -0.000000 755 0.000000 -0.000000 -0.000000 0.000000 756 0.000000 -0.000000 -0.000000 0.000000 757 0.000000 -0.000000 -0.000000 0.000000 758 0.000000 -0.000000 0.000000 -0.000000 759 0.000000 -0.000000 0.000000 -0.000000 760 0.000000 -0.000000 0.000000 -0.000000 761 0.000000 -0.000000 -0.000000 0.000000 762 0.000000 -0.000000 -0.000000 0.000000 763 0.000000 -0.000000 0.000000 0.000000 764 0.000000 -0.000000 0.000000 -0.000000 765 0.000000 -0.000000 0.000000 0.000000 766 0.000000 -0.000000 -0.000000 -0.000000 767 0.000000 -0.000000 0.000000 0.000000 768 0.000000 -0.000000 -0.000000 0.000000 769 0.000000 -0.000000 -0.000000 -0.000000 770 0.000000 -0.000000 0.000000 -0.000000 771 0.000000 -0.000000 -0.000000 -0.000000 772 0.000000 -0.000000 0.000000 -0.000000 773 0.000000 -0.000000 -0.000000 0.000000 774 0.000000 -0.000000 -0.000000 0.000000 775 0.000000 -0.000000 0.000000 0.000000 776 0.000000 -0.000000 0.000000 -0.000000 777 0.000000 -0.000000 0.000000 -0.000000 778 0.000000 -0.000000 0.000000 -0.000000 779 0.000000 -0.000000 -0.000000 -0.000000 780 0.000000 -0.000000 -0.000000 0.000000 781 0.000000 -0.000000 -0.000000 0.000000 782 0.000000 -0.000000 -0.000000 0.000000 783 0.000000 -0.000000 0.000000 -0.000000 784 0.000000 -0.000000 0.000000 -0.000000 785 0.000000 -0.000000 -0.000000 -0.000000 786 0.000000 -0.000000 0.000000 0.000000 787 0.000000 -0.000000 0.000000 0.000000 788 0.000000 -0.000000 -0.000000 0.000000 789 0.000000 -0.000000 -0.000000 0.000000 790 0.000000 -0.000000 -0.000000 0.000000 791 0.000000 -0.000000 -0.000000 0.000000 792 0.000000 -0.000000 0.000000 -0.000000 793 0.000000 -0.000000 0.000000 -0.000000 794 0.000000 -0.000000 0.000000 -0.000000 795 0.000000 -0.000000 0.000000 -0.000000 796 0.000000 -0.000000 0.000000 -0.000000 797 0.000000 -0.000000 0.000000 -0.000000 798 0.000000 -0.000000 -0.000000 -0.000000 799 0.000000 -0.000000 -0.000000 0.000000 800 0.000000 -0.000000 -0.000000 0.000000 801 0.000000 -0.000000 -0.000000 0.000000 802 0.000000 -0.000000 -0.000000 0.000000 803 0.000000 -0.000000 0.000000 -0.000000 804 0.000000 -0.000000 0.000000 -0.000000 805 0.000000 -0.000000 -0.000000 0.000000 806 0.000000 -0.000000 -0.000000 0.000000 807 0.000000 -0.000000 0.000000 -0.000000 808 0.000000 -0.000000 0.000000 -0.000000 809 0.000000 -0.000000 0.000000 -0.000000 810 0.000000 -0.000000 -0.000000 0.000000 811 0.000000 -0.000000 -0.000000 0.000000 812 0.000000 -0.000000 -0.000000 0.000000 813 0.000000 -0.000000 0.000000 -0.000000 814 0.000000 -0.000000 0.000000 -0.000000 815 0.000000 -0.000000 0.000000 -0.000000 816 0.000000 -0.000000 -0.000000 0.000000 817 0.000000 -0.000000 -0.000000 0.000000 818 0.000000 -0.000000 -0.000000 0.000000 819 0.000000 -0.000000 0.000000 -0.000000 820 0.000000 -0.000000 0.000000 -0.000000 821 0.000000 -0.000000 0.000000 -0.000000 822 0.000000 -0.000000 0.000000 -0.000000 823 0.000000 -0.000000 -0.000000 0.000000 824 0.000000 -0.000000 -0.000000 0.000000 825 0.000000 -0.000000 -0.000000 0.000000 826 0.000000 -0.000000 0.000000 -0.000000 827 0.000000 -0.000000 0.000000 -0.000000 828 0.000000 -0.000000 -0.000000 0.000000 829 0.000000 -0.000000 0.000000 -0.000000 830 0.000000 -0.000000 0.000000 -0.000000 831 0.000000 -0.000000 0.000000 -0.000000 832 0.000000 -0.000000 -0.000000 0.000000 833 0.000000 -0.000000 -0.000000 0.000000 834 0.000000 -0.000000 -0.000000 0.000000 835 0.000000 -0.000000 0.000000 0.000000 836 0.000000 -0.000000 0.000000 -0.000000 837 0.000000 -0.000000 0.000000 -0.000000 838 0.000000 -0.000000 0.000000 -0.000000 839 0.000000 -0.000000 -0.000000 0.000000 840 0.000000 -0.000000 -0.000000 0.000000 841 0.000000 -0.000000 0.000000 -0.000000 842 0.000000 -0.000000 0.000000 -0.000000 843 0.000000 -0.000000 0.000000 -0.000000 844 0.000000 -0.000000 -0.000000 0.000000 845 0.000000 -0.000000 -0.000000 -0.000000 846 0.000000 -0.000000 -0.000000 0.000000 847 0.000000 -0.000000 -0.000000 0.000000 848 0.000000 -0.000000 -0.000000 0.000000 849 0.000000 -0.000000 0.000000 -0.000000 850 0.000000 -0.000000 0.000000 0.000000 851 0.000000 -0.000000 0.000000 -0.000000 852 0.000000 -0.000000 -0.000000 0.000000 853 0.000000 -0.000000 -0.000000 0.000000 854 0.000000 -0.000000 0.000000 -0.000000 855 0.000000 -0.000000 0.000000 -0.000000 856 0.000000 -0.000000 0.000000 -0.000000 857 0.000000 -0.000000 -0.000000 0.000000 858 0.000000 -0.000000 -0.000000 0.000000 859 0.000000 -0.000000 -0.000000 0.000000 860 0.000000 -0.000000 -0.000000 0.000000 861 0.000000 -0.000000 0.000000 -0.000000 862 0.000000 -0.000000 0.000000 -0.000000 863 0.000000 -0.000000 0.000000 -0.000000 864 0.000000 -0.000000 -0.000000 0.000000 865 0.000000 -0.000000 -0.000000 0.000000 866 0.000000 -0.000000 0.000000 -0.000000 867 0.000000 -0.000000 0.000000 -0.000000 868 0.000000 -0.000000 0.000000 -0.000000 869 0.000000 -0.000000 0.000000 -0.000000 870 0.000000 -0.000000 0.000000 -0.000000 871 0.000000 -0.000000 -0.000000 -0.000000 872 0.000000 -0.000000 -0.000000 0.000000 873 0.000000 -0.000000 -0.000000 0.000000 874 0.000000 -0.000000 0.000000 0.000000 875 0.000000 -0.000000 0.000000 -0.000000 876 0.000000 -0.000000 0.000000 -0.000000 877 0.000000 -0.000000 -0.000000 0.000000 878 0.000000 -0.000000 -0.000000 0.000000 879 0.000000 -0.000000 -0.000000 0.000000 880 0.000000 -0.000000 0.000000 0.000000 881 0.000000 -0.000000 -0.000000 0.000000 882 0.000000 -0.000000 0.000000 0.000000 883 0.000000 -0.000000 0.000000 -0.000000 884 0.000000 -0.000000 -0.000000 0.000000 885 0.000000 -0.000000 0.000000 -0.000000 886 0.000000 -0.000000 0.000000 -0.000000 887 0.000000 -0.000000 0.000000 -0.000000 888 0.000000 -0.000000 0.000000 0.000000 889 0.000000 -0.000000 -0.000000 0.000000 890 0.000000 -0.000000 0.000000 0.000000 891 0.000000 -0.000000 -0.000000 -0.000000 892 0.000000 -0.000000 -0.000000 -0.000000 893 0.000000 -0.000000 -0.000000 -0.000000 894 0.000000 -0.000000 -0.000000 -0.000000 895 0.000000 -0.000000 -0.000000 -0.000000 896 0.000000 -0.000000 -0.000000 0.000000 897 0.000000 -0.000000 -0.000000 0.000000 898 0.000000 -0.000000 0.000000 -0.000000 899 0.000000 -0.000000 0.000000 -0.000000 900 0.000000 -0.000000 0.000000 -0.000000 901 0.000000 -0.000000 0.000000 -0.000000 902 0.000000 -0.000000 -0.000000 0.000000 903 0.000000 -0.000000 -0.000000 0.000000 904 0.000000 -0.000000 0.000000 0.000000 905 0.000000 -0.000000 0.000000 -0.000000 906 0.000000 -0.000000 0.000000 -0.000000 907 0.000000 -0.000000 0.000000 0.000000 908 0.000000 -0.000000 -0.000000 0.000000 909 0.000000 -0.000000 -0.000000 0.000000 910 0.000000 -0.000000 0.000000 -0.000000 911 0.000000 -0.000000 0.000000 0.000000 912 0.000000 -0.000000 -0.000000 0.000000 913 0.000000 -0.000000 -0.000000 0.000000 914 0.000000 -0.000000 0.000000 0.000000 915 0.000000 -0.000000 0.000000 0.000000 916 0.000000 -0.000000 0.000000 -0.000000 917 0.000000 -0.000000 0.000000 -0.000000 918 0.000000 -0.000000 0.000000 -0.000000 919 0.000000 -0.000000 -0.000000 0.000000 920 0.000000 -0.000000 -0.000000 0.000000 921 0.000000 -0.000000 -0.000000 0.000000 922 0.000000 -0.000000 -0.000000 -0.000000 923 0.000000 -0.000000 -0.000000 -0.000000 924 0.000000 -0.000000 0.000000 -0.000000 925 0.000000 -0.000000 -0.000000 -0.000000 926 0.000000 -0.000000 0.000000 -0.000000 927 0.000000 -0.000000 0.000000 0.000000 928 0.000000 -0.000000 -0.000000 0.000000 929 0.000000 -0.000000 -0.000000 -0.000000 930 0.000000 -0.000000 0.000000 -0.000000 931 0.000000 -0.000000 0.000000 -0.000000 932 0.000000 -0.000000 -0.000000 0.000000 933 0.000000 -0.000000 -0.000000 0.000000 934 0.000000 -0.000000 -0.000000 0.000000 935 0.000000 -0.000000 0.000000 -0.000000 936 0.000000 -0.000000 0.000000 -0.000000 937 0.000000 -0.000000 -0.000000 -0.000000 938 0.000000 -0.000000 -0.000000 0.000000 939 0.000000 -0.000000 -0.000000 0.000000 940 0.000000 -0.000000 -0.000000 0.000000 941 0.000000 -0.000000 -0.000000 0.000000 942 0.000000 -0.000000 -0.000000 0.000000 943 0.000000 -0.000000 -0.000000 0.000000 944 0.000000 -0.000000 -0.000000 0.000000 945 0.000000 -0.000000 -0.000000 0.000000 946 0.000000 -0.000000 -0.000000 -0.000000 947 0.000000 -0.000000 0.000000 -0.000000 948 0.000000 -0.000000 0.000000 -0.000000 949 0.000000 -0.000000 0.000000 -0.000000 950 0.000000 -0.000000 0.000000 -0.000000 951 0.000000 -0.000000 0.000000 0.000000 952 0.000000 -0.000000 -0.000000 0.000000 953 0.000000 -0.000000 -0.000000 0.000000 954 0.000000 -0.000000 0.000000 0.000000 955 0.000000 -0.000000 0.000000 -0.000000 956 0.000000 -0.000000 0.000000 -0.000000 957 0.000000 -0.000000 0.000000 0.000000 958 0.000000 -0.000000 -0.000000 0.000000 959 0.000000 -0.000000 -0.000000 0.000000 960 0.000000 -0.000000 -0.000000 0.000000 961 0.000000 -0.000000 -0.000000 0.000000 962 0.000000 -0.000000 -0.000000 0.000000 963 0.000000 -0.000000 -0.000000 -0.000000 964 0.000000 -0.000000 0.000000 -0.000000 965 0.000000 -0.000000 0.000000 -0.000000 966 0.000000 -0.000000 0.000000 -0.000000 967 0.000000 -0.000000 0.000000 -0.000000 968 0.000000 -0.000000 0.000000 -0.000000 969 0.000000 -0.000000 -0.000000 0.000000 970 0.000000 -0.000000 -0.000000 0.000000 971 0.000000 -0.000000 -0.000000 0.000000 972 0.000000 -0.000000 -0.000000 -0.000000 973 0.000000 -0.000000 0.000000 -0.000000 974 0.000000 -0.000000 0.000000 -0.000000 975 0.000000 -0.000000 -0.000000 0.000000 976 0.000000 -0.000000 -0.000000 0.000000 977 0.000000 -0.000000 0.000000 -0.000000 978 0.000000 -0.000000 0.000000 -0.000000 979 0.000000 -0.000000 0.000000 0.000000 980 0.000000 -0.000000 -0.000000 0.000000 981 0.000000 -0.000000 -0.000000 0.000000 982 0.000000 -0.000000 0.000000 -0.000000 983 0.000000 -0.000000 -0.000000 -0.000000 984 0.000000 -0.000000 0.000000 -0.000000 985 0.000000 -0.000000 -0.000000 0.000000 986 0.000000 -0.000000 -0.000000 0.000000 987 0.000000 -0.000000 -0.000000 -0.000000 988 0.000000 -0.000000 -0.000000 0.000000 989 0.000000 -0.000000 0.000000 -0.000000 990 0.000000 -0.000000 0.000000 -0.000000 991 0.000000 -0.000000 0.000000 -0.000000 992 0.000000 -0.000000 0.000000 -0.000000 993 0.000000 -0.000000 0.000000 -0.000000 994 0.000000 -0.000000 -0.000000 0.000000 995 0.000000 -0.000000 -0.000000 0.000000 996 0.000000 -0.000000 -0.000000 0.000000 997 0.000000 -0.000000 -0.000000 0.000000 998 0.000000 -0.000000 0.000000 0.000000 999 0.000000 -0.000000 0.000000 0.000000 1000 0.000000 -0.000000 0.000000 -0.000000 1001 0.000000 -0.000000 0.000000 -0.000000 1002 0.000000 -0.000000 0.000000 -0.000000 1003 0.000000 -0.000000 0.000000 -0.000000 1004 0.000000 -0.000000 -0.000000 0.000000 1005 0.000000 -0.000000 -0.000000 0.000000 1006 0.000000 -0.000000 0.000000 0.000000 1007 0.000000 -0.000000 0.000000 -0.000000 1008 0.000000 -0.000000 0.000000 -0.000000 1009 0.000000 -0.000000 0.000000 -0.000000 1010 0.000000 -0.000000 0.000000 0.000000 1011 0.000000 -0.000000 -0.000000 0.000000 1012 0.000000 -0.000000 0.000000 0.000000 1013 0.000000 -0.000000 0.000000 -0.000000 1014 0.000000 -0.000000 0.000000 -0.000000 1015 0.000000 -0.000000 -0.000000 -0.000000 1016 0.000000 -0.000000 -0.000000 -0.000000 1017 0.000000 -0.000000 -0.000000 -0.000000 1018 0.000000 -0.000000 0.000000 -0.000000 1019 0.000000 -0.000000 -0.000000 0.000000 1020 0.000000 -0.000000 -0.000000 0.000000 1021 0.000000 -0.000000 -0.000000 -0.000000 1022 0.000000 -0.000000 -0.000000 -0.000000 1023 0.000000 -0.000000 -0.000000 -0.000000 GMTSAR_V5.7/.svn/pristine/08/089619dba241935e716800923189a42d93908491.svn-base000444 015705 000000 00000014112 13505462014 024746 0ustar00sandwellwheel000000 000000 /*******************************************************************************/ /* write a PRM file */ /* adapted for ALOS data */ /* needs SC_start_time and SC_end_time (from read_data) */ /* needs sample_rate (from read_sarleader) */ /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 07/13/08 added SC_height_start and * SC_height_end parameters * 07/27/10 merged modifications by * Jeff B to handle ALOSE ERSDAC format use ALOS_format to distinguish * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #define FACTOR 1000000 void ALOS_ldr_orbit(struct ALOS_ORB *orb, struct PRM *prm) { double t1, t2; double re, height, vg; double re_c, re_start, re_end, vg_start, vg_end, vtot, rdot; double height_start, height_end; if (verbose) fprintf(stderr, "ALOS_ldr_orbit\n"); /* ERSDAC PRM differs by a factor of 1000 */ if (ALOS_format == 1) prm->prf = 1000.0 * prm->prf; t1 = (86400.0) * prm->clock_start + (prm->nrows - prm->num_valid_az) / (2.0 * prm->prf); t2 = t1 + prm->num_patches * prm->num_valid_az / prm->prf; calc_height_velocity(orb, prm, t1, t1, &height_start, &re_start, &vg_start, &vtot, &rdot); calc_height_velocity(orb, prm, t2, t2, &height_end, &re_end, &vg_end, &vtot, &rdot); calc_height_velocity(orb, prm, t1, t2, &height, &re_c, &vg, &vtot, &rdot); // fd_orbit = -2.0*rdot/prm->lambda; if (verbose) { fprintf(stderr, " t1 %lf t1 %lf height_start %lf re_start %lf vg_start%lf\n", t1, t1, height_start, re_start, vg_start); fprintf(stderr, " t1 %lf t2 %lf height %lf re_c %lf vg %lf\n", t1, t2, height, re_c, vg); fprintf(stderr, " t2 %lf t2 %lf height_end %lf re__end %lf vg_end %lf\n", t2, t2, height_end, re_end, vg_end); } prm->vel = vg; /* use the center earth radius unless there is a value from the command line */ re = re_c; if (prm->RE > 0.) re = prm->RE; prm->RE = re; prm->ht = height + re_c - re; prm->ht_start = height_start + re_start - re; prm->ht_end = height_end + re_end - re; /* write it all out */ if (verbose) { fprintf(stdout, "SC_vel = %lf \n", prm->vel); fprintf(stdout, "earth_radius = %lf \n", prm->RE); fprintf(stdout, "SC_height = %lf \n", prm->ht); fprintf(stdout, "SC_height_start = %lf \n", prm->ht_start); fprintf(stdout, "SC_height_end = %lf \n", prm->ht_end); } } /*---------------------------------------------------------------*/ /* from David Sandwell's code */ void calc_height_velocity(struct ALOS_ORB *orb, struct PRM *prm, double t1, double t2, double *height, double *re2, double *vg, double *vtot, double *rdot) { int k, ir, nt, nc = 3; double xe, ye, ze; double xs, ys, zs; double x1, y1, z1; double x2, y2, z2; double vx, vy, vz, vs, rs; double rlat, rlatg; double st = 0.0, ct = 0.0, arg, re; double a[3], b[3], c[3]; double time[1000], rng[1000], d[3]; double t0, ro, ra, rc, dt; if (verbose) fprintf(stderr, " ... calc_height_velocity\n"); ro = prm->near_range; ra = prm->ra; /* ellipsoid parameters */ rc = prm->rc; /* ellipsoid parameters */ dt = 200. / prm->prf; /* ERSDAC nt set to 31 instead of (nrows - az) / 100 */ if (ALOS_format == 0) nt = (prm->nrows - prm->num_valid_az) / 100.0; if (ALOS_format == 1) nt = 31; /* make sure this number is at least 31 */ if (nt < 31) nt = 31; /* more time stuff */ t0 = (t1 + t2) / 2.0; t1 = t0 - 2.0; t2 = t0 + 2.0; /* interpolate orbit */ /* _slow does memory allocation each time */ interpolate_ALOS_orbit_slow(orb, t0, &xs, &ys, &zs, &ir); interpolate_ALOS_orbit_slow(orb, t1, &x1, &y1, &z1, &ir); interpolate_ALOS_orbit_slow(orb, t2, &x2, &y2, &z2, &ir); rs = sqrt(xs * xs + ys * ys + zs * zs); /* calculate stuff */ vx = (x2 - x1) / 4.0; vy = (y2 - y1) / 4.0; vz = (z2 - z1) / 4.0; vs = sqrt(vx * vx + vy * vy + vz * vz); *vtot = vs; /* set orbit direction */ if (vz > 0) { strcpy(prm->orbdir, "A"); } else { strcpy(prm->orbdir, "D"); } /* geodetic latitude of the satellite */ rlat = asin(zs / rs); rlatg = atan(tan(rlat) * ra * ra / (rc * rc)); /* ERSDAC use rlatg instead of latg */ if (ALOS_format == 0) { st = sin(rlat); ct = cos(rlat); } if (ALOS_format == 1) { st = sin(rlatg); ct = cos(rlatg); } arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1. / (sqrt(arg)); *re2 = re; *height = rs - *re2; /* compute the vector orthogonal to both the radial vector and velocity vector */ a[0] = xs / rs; a[1] = ys / rs; a[2] = zs / rs; b[0] = vx / vs; b[1] = vy / vs; b[2] = vz / vs; cross3_(a, b, c); /* compute the look angle */ ct = (rs * rs + ro * ro - re * re) / (2. * rs * ro); st = sin(acos(ct)); /* add the satellite and LOS vectors to get the new point */ xe = xs + ro * (-st * c[0] - ct * a[0]); ye = ys + ro * (-st * c[1] - ct * a[1]); ze = zs + ro * (-st * c[2] - ct * a[2]); rlat = asin(ze / re); rlatg = atan(tan(rlat) * ra * ra / (rc * rc)); /* ERSDAC use rlatg instead of latg */ /* compute elipse height in the scene */ if (ALOS_format == 0) { st = sin(rlat); ct = cos(rlat); } if (ALOS_format == 1) { st = sin(rlatg); ct = cos(rlatg); } arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1.0 / (sqrt(arg)); /* now check range over time */ for (k = 0; k < nt; k++) { time[k] = dt * (k - nt / 2); t1 = t0 + time[k]; interpolate_ALOS_orbit_slow(orb, t1, &xs, &ys, &zs, &ir); rng[k] = sqrt((xe - xs) * (xe - xs) + (ye - ys) * (ye - ys) + (ze - zs) * (ze - zs)) - ro; } /* fit a second order polynomial to the range versus time function */ polyfit(time, rng, d, &nt, &nc); *rdot = d[1]; *vg = sqrt(ro * 2. * d[2]); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/08/081238c5154cfa5f92a264f3bc86a54f88806007.svn-base000444 015705 000000 00000000613 13505462014 025314 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ENVI_baseline CSRCS = ENVI_baseline.c \ ENVI_llt2rat_sub.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../../ALOS_preproc/include CLIBS = -L../../ALOS_preproc/lib -lALOS -L../lib -lENVI -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/37/37725882aed8e72fdac3a96d99c804187379eea4.svn-base000444 015705 000000 00000002027 13505462013 025572 0ustar00sandwellwheel000000 000000 # $Id: Makefile 109 2015-01-19 23:01:24Z sandwell $ # # makefile for gmtsar directory # include ../../config.mk INCLUDES = $(GMT_INC) -I../include LIB_C = aastretch.c acpatch.c calc_dop.c conv2d.c do_freq_xcorr.c \ do_time_int_xcorr.c fft_bins.c fft_interpolate_routines.c \ file_stuff.c geoxyz.c get_locations.c get_params.c hermite_c.c \ highres_corr.c interpolate_orbit.c intp_coef.c ldr_orbit.c \ parse_xcorr_input.c plxyz.c polyfit.c print_results.c radopp.c \ read_orb.c read_xcorr_data.c SAT_llt2rat_sub.c \ rmpatch.c rng_cmp.c rng_ref.c set_prm_defaults.c shift.c \ sio_struct.c siocomplex.c spline.c trans_col.c utils.c utils_complex.c \ write_orb.c sbas_utils.c LIB_O = $(LIB_C:.c=.o) LIB = libgmtsar.$(LIBEXT) #------------------------------------------------------------------------------- # library #------------------------------------------------------------------------------- $(LIB): $(LIB_O) $(AR) cvur $@ $? $(RANLIB) $@ lib: $(LIB) clean: rm -f *% *.o *.a spotless:: clean GMTSAR_V5.7/.svn/pristine/37/374fd0f8b3d5ab53ede77a515256fc097bbbf934.svn-base000444 015705 000000 00000010307 13505462014 025762 0ustar00sandwellwheel000000 000000 /* write a PRM file */ /* modified by Paul F. Jamason, 3/19/98 */ /* added SC_identity read from file, R. Mellors. 10/1/98 */ /* changed SC_identity to sc_identity in fprintf line, K. Watson. 3/8/99 */ /* force I_mean Q_mean = 15.5 M.Wei. 5/24/06 (Some header is bad)*/ #include "../include/SARtape.h" #include "../include/soi.h" #include #include #include #define FACTOR 1000000 void calc_time(char time_string[], double *clock_time); make_prm_dpaf(sar) struct SAR_info sar; { double radar_wavelength, pulse_dur, rng_samp_rate; double I_mean, Q_mean, sc_clock_start, chirp_slope; int SC_identity; /* ERS-1 = 1, ERS2 = 2 */ double SC_clock_start, SC_clock_stop; /* translate from structure holding SAR info */ /* see SARtape.h and associated include files for more details */ sscanf((sar.dpaf_dss->mission_identifier + 3), "%d", &SC_identity); prf1 = atof(sar.dpaf_dss->nominal_prf); radar_wavelength = atof(sar.dpaf_dss->radar_wavelength); /* convert into seconds from MHz */ pulse_dur = (atof(sar.dpaf_dss->range_pulse_length) / FACTOR); rng_samp_rate = FACTOR * (atof(sar.dpaf_dss->sampling)); /* correct by factor of two */ chirp_slope = 2.0 * atof(sar.dpaf_dss->range_pulse_phase_quad); /* pj: add 15.5 to these values (see ERS SAR.RAW documentation) */ /* I_mean = 15.5+atof(sar.dpaf_dss->dc_bias_i); Q_mean = 15.5+atof(sar.dpaf_dss->dc_bias_q); */ I_mean = 15.5; Q_mean = 15.5; /* we don't want the first two character; (of year)) */ sc_clock_start = atof((sar.dpaf_dss->satelite_clock_time + 2)); /* pj */ calc_time(sar.dpaf_dss->zero_dop_az_time_f_pixel, &SC_clock_start); calc_time(sar.dpaf_dss->zero_dop_az_time_l_pixel, &SC_clock_stop); /*fprintf(stdout,"I_mean = %lf\n",I_mean); fprintf(stdout,"Q_mean = %lf\n",Q_mean); fprintf(stdout,"rng_samp_rate = %lg\n",rng_samp_rate); fprintf(stdout,"chirp_slope = %lg\n",chirp_slope); fprintf(stdout,"pulse_dur = %lg\n",pulse_dur); fprintf(stdout,"radar_wavelength = %lg\n",radar_wavelength); fprintf(stdout, "SC_identity = %d\n",SC_identity);*/ /* pj: write these to PRM file now instead of in read_data_file.c */ fprintf(stdout, "SC_clock_start = %16.10lf\n", SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf\n", SC_clock_stop); } /* pj */ void calc_time(char time_string[], double *clock_time) { int day_of_month, hour, minute, second, msec, jday, i, month, year, leap; int mon_nday[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char c_month[4], tmp_time_string[24]; /* need a temporary time string else msec reads beginning of next zero_dop string */ strncpy(tmp_time_string, &time_string[0], 24); /* pj: calculate SC_clock_start/stop from sarleader for DPAF */ day_of_month = atoi(&time_string[0]); strncpy(c_month, &time_string[3], 3); if (!strncmp(c_month, "JAN", 3)) { month = 1; } if (!strncmp(c_month, "FEB", 3)) { month = 2; } if (!strncmp(c_month, "MAR", 3)) { month = 3; } if (!strncmp(c_month, "APR", 3)) { month = 4; } if (!strncmp(c_month, "MAY", 3)) { month = 5; } if (!strncmp(c_month, "JUN", 3)) { month = 6; } if (!strncmp(c_month, "JUL", 3)) { month = 7; } if (!strncmp(c_month, "AUG", 3)) { month = 8; } if (!strncmp(c_month, "SEP", 3)) { month = 9; } if (!strncmp(c_month, "OCT", 3)) { month = 10; } if (!strncmp(c_month, "NOV", 3)) { month = 11; } if (!strncmp(c_month, "DEC", 3)) { month = 12; } year = atoi(&time_string[9]); if (year % 4 == 0 && year % 100 != 0) { leap = 1; } else if (year == 00) { leap = 1; } else { leap = 0; } if (leap) { mon_nday[1] = 29; } jday = 0; if (month > 1) { for (i = 0; i < month - 1; i++) jday = jday + mon_nday[i]; } jday = jday + day_of_month; hour = atoi(&time_string[12]); minute = atoi(&time_string[15]); second = atoi(&time_string[18]); msec = atoi(&tmp_time_string[21]); /* add either 1900 or 2000 to the year */ if (year < 85.) { year = year + 2000.; } else { year = year + 1900.; } /* calculate clock time; determine fraction of msecs in day */ *clock_time = (double)(year * 1000 + jday) + ((double)(hour * 3600 * 1000 + minute * 60 * 1000 + second * 1000 + msec) / (double)(24 * 3600 * 1000)); } GMTSAR_V5.7/.svn/pristine/37/371e94db7cc42c24868bfa05db92b476e413c02d.svn-base000444 015705 000000 00000005742 13505462013 025614 0ustar00sandwellwheel000000 000000 11 11 1.8326193626491494e-01 2.7110055855733639e-01 3.6761892081926906e-01 4.5695622828788085e-01 5.2066771385996735e-01 5.4382102907765173e-01 5.2066771385996735e-01 4.5695622828788085e-01 3.6761892081926906e-01 2.7110055855733639e-01 1.8326193626491494e-01 2.2819604428228568e-01 3.3757187295060820e-01 4.5775563242447509e-01 5.6899760981850345e-01 6.4833055412332374e-01 6.7716084508488417e-01 6.4833055412332374e-01 5.6899760981850345e-01 4.5775563242447509e-01 3.3757187295060820e-01 2.2819604428228568e-01 2.7063280104735304e-01 4.0034883960745415e-01 5.4288271905796148e-01 6.7481194697634939e-01 7.6889813939950991e-01 8.0308989071788706e-01 7.6889813939950991e-01 6.7481194697634939e-01 5.4288271905796148e-01 4.0034883960745415e-01 2.7063280104735304e-01 3.0569563184412057e-01 4.5221751025090007e-01 6.1321789220457434e-01 7.6223969788053136e-01 8.6851557400972634e-01 9.0713716378996689e-01 8.6851557400972634e-01 7.6223969788053136e-01 6.1321789220457434e-01 4.5221751025090007e-01 3.0569563184412057e-01 3.2887776573092120e-01 4.8651098970087037e-01 6.5972068059285249e-01 8.2004341140925907e-01 9.3437861627174890e-01 9.7592903712427370e-01 9.3437861627174890e-01 8.2004341140925907e-01 6.5972068059285249e-01 4.8651098970087037e-01 3.2887776573092120e-01 3.3698942568612422e-01 4.9851062033613674e-01 6.7599247024847409e-01 8.4026950753063367e-01 9.5742475193180065e-01 1.0000000000000000e+00 9.5742475193180065e-01 8.4026950753063367e-01 6.7599247024847409e-01 4.9851062033613674e-01 3.3698942568612422e-01 3.2887776573092120e-01 4.8651098970087037e-01 6.5972068059285249e-01 8.2004341140925907e-01 9.3437861627174890e-01 9.7592903712427370e-01 9.3437861627174890e-01 8.2004341140925907e-01 6.5972068059285249e-01 4.8651098970087037e-01 3.2887776573092120e-01 3.0569563184412057e-01 4.5221751025090007e-01 6.1321789220457434e-01 7.6223969788053136e-01 8.6851557400972634e-01 9.0713716378996689e-01 8.6851557400972634e-01 7.6223969788053136e-01 6.1321789220457434e-01 4.5221751025090007e-01 3.0569563184412057e-01 2.7063280104735304e-01 4.0034883960745415e-01 5.4288271905796148e-01 6.7481194697634939e-01 7.6889813939950991e-01 8.0308989071788706e-01 7.6889813939950991e-01 6.7481194697634939e-01 5.4288271905796148e-01 4.0034883960745415e-01 2.7063280104735304e-01 2.2819604428228568e-01 3.3757187295060820e-01 4.5775563242447509e-01 5.6899760981850345e-01 6.4833055412332374e-01 6.7716084508488417e-01 6.4833055412332374e-01 5.6899760981850345e-01 4.5775563242447509e-01 3.3757187295060820e-01 2.2819604428228568e-01 1.8326193626491494e-01 2.7110055855733639e-01 3.6761892081926906e-01 4.5695622828788085e-01 5.2066771385996735e-01 5.4382102907765173e-01 5.2066771385996735e-01 4.5695622828788085e-01 3.6761892081926906e-01 2.7110055855733639e-01 1.8326193626491494e-01 GMTSAR_V5.7/.svn/pristine/5b/5b6774df79fbeefde8957fb06f939ab5a0cd32e0.svn-base000444 015705 000000 00000001753 13505462013 026224 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # make a landmask # if ($#argv != 1) then echo "" echo "Usage: landmask.csh region_cut[0/10600/0/27648]" echo "" echo " make a landmask in radar coordinates " echo "NOTE: The region_cut can be specified in batch.config file" echo "" exit 1 endif if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif echo "" echo "MAKE LANDMASK -- START" echo "REQUIRE FULL RESOLUTION COASTLINE FROM GMT" echo "" gmt grdlandmask -Glandmask.grd `gmt grdinfo -I- dem.grd` `gmt grdinfo -I dem.grd` $V -NNaN/1 -Df proj_ll2ra.csh trans.dat landmask.grd landmask_ra.grd # if the landmask region is smaller than the region_cut pad with NaN gmt grd2xyz landmask_ra.grd -bo > landmask_ra.xyz gmt xyz2grd landmask_ra.xyz -bi -r -R$1 `gmt grdinfo -I landmask_ra.grd` -Gtmp.grd mv tmp.grd landmask_ra.grd gmt grdsample landmask_ra.grd -Gtmp.grd -R$1 -I2/32 -nl+t0.1 mv tmp.grd landmask_ra.grd # cleanup rm landmask.grd landmask_ra.xyz echo "MAKE LANDMASK -- END" # GMTSAR_V5.7/.svn/pristine/5b/5bdaabb67bbe73c3b8280beeae178eb906e6ac6f.svn-base000444 015705 000000 00002104011 13505462014 026402 0ustar00sandwellwheel000000 000000 #include "epr_api.h" #include "epr_dddb.h" static const struct RecordDescriptor MER_LRC_2P_MDSR_cl_thick_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"cl_opt_thick_pix", e_tid_uchar, NULL, 1, "sceneRasterWidth", "cloud optical thickness pixel #1- #281"} }; static const struct RecordDescriptor MER_LRC_2P_MDSR_cl_top_press_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"cl_top_press_pix", e_tid_uchar, NULL, 1, "sceneRasterWidth", "cloud top pressure pixel #1- #281"} }; static const struct RecordDescriptor MER_LRC_2P_MDSR_flag_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"pixel_info", e_tid_uchar, "counts", 1, "3*sceneRasterWidth", "Flags associated with pixel #1 - #281"} }; static const struct RecordDescriptor MER_LRC_2P_MDSR_twv_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"wvapour_cont_pix", e_tid_uchar, NULL, 1, "sceneRasterWidth", "Water Vapour Content pixel #1- #281"} }; static const struct RecordDescriptor MER_RRC_2P_GADS_sfgi_meris_rec_data[] = { {"sf_cl_opt_thick", e_tid_float, NULL, 4, "1", "scaling factor - Cloud optical thickness"}, {"sf_cloud_top_press", e_tid_float, NULL, 4, "1", "scaling factor - Cloud Top Pressure"}, {"sf_wvapour", e_tid_float, NULL, 4, "1", "scaling factor - Water vapour"}, {"off_cl_opt_thick", e_tid_float, NULL, 4, "1", "offset-Cloud optical thickness"}, {"off_cloud_top_press", e_tid_float, "hPa", 4, "1", "offset - Cloud Top Pressure"}, {"off_wvapour", e_tid_float, "g.cm-2", 4, "1", "offset-Water vapour"}, {"spare_1", e_tid_spare, NULL, 52, "1", "Spare"} }; static const struct RecordDescriptor MER_RRV_2P_GADS_sfgi_meris_rec_data[] = { {"sf_toa_veg_ind", e_tid_float, NULL, 4, "1", "scaling factor - TOA Vegetation Index"}, {"sf_boa_veg_ind", e_tid_float, NULL, 4, "1", "scaling factor - BOA Vegetation Index"}, {"off_toa_veg_ind", e_tid_float, NULL, 4, "1", "offset-TOA Vegetation Index"}, {"off_boa_veg_ind", e_tid_float, NULL, 4, "1", "offset-BOA Vegetation Index"}, {"spare_1", e_tid_spare, NULL, 60, "1", "Spare"} }; static const struct RecordDescriptor MER_RR__1P_ADSR_sq_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of the first line in the MDS corresponding to this record."}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (Set to 1 if all the records in all the bands are blank for the period corresponding to this record, set to zero otherwise)"}, {"range_flag", e_tid_ushort, "flag", 2, "5", "Out of Range flag. For every band, when the number of out of range samples is above a given threshold then it is set to TRUE, otherwise it is left to FALSE. The 15 flags for all the bands of a module are stored in an unsigned integer. To have this informati"}, {"range_blind_flag", e_tid_ushort, "flag", 2, "5", "Out of Range blind flag. Flags set to TRUE when the number of out of range blind spectral samples per module is above a given threshold. Flag ordering same as described in field 3."} }; static const struct RecordDescriptor MER_RR__1P_ADSR_tie_pt_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start time of the measurement"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if all MDSRs corresponding to this ADSR are blank, set to zero otherwise)"}, {"lat_tie_pt", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "Latitude of the tie points WGS84, positive N"}, {"long_tie_pt", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "Longitude of the tie points WGS84, Greenwich origin, positive E"}, {"dem_alt_tie_pt", e_tid_int, "m", 4, "tiePointGridWidth", "DEM altitude"}, {"dem_rough", e_tid_uint, "m", 4, "tiePointGridWidth", "DEM roughness"}, {"dem_lat_corrc", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "DEM latitude corrections"}, {"dem_long_corrc", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "DEM longitude corrections"}, {"sun_zen_ang", e_tid_uint, "(1e-6) degrees", 4, "tiePointGridWidth", "Sun zenith angles"}, {"sun_azi_ang", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "Sun azimuth angles"}, {"vw_zen_ang", e_tid_uint, "(1e-6) degrees", 4, "tiePointGridWidth", "Viewing zenith angles"}, {"vw_azi_ang", e_tid_int, "(1e-6) degrees", 4, "tiePointGridWidth", "Viewing azimuth angles"}, {"zon_wind", e_tid_short, "m*s-1", 2, "tiePointGridWidth", "Zonal winds"}, {"meri_wind", e_tid_short, "m*s-1", 2, "tiePointGridWidth", "Meridional winds"}, {"atm_pres", e_tid_ushort, "hPa", 2, "tiePointGridWidth", "Mean sea level pressures"}, {"tot_ozone", e_tid_ushort, "DU", 2, "tiePointGridWidth", "Total ozone"}, {"rel_humid", e_tid_ushort, "%", 2, "tiePointGridWidth", "Relative humidity"} }; static const struct RecordDescriptor MER_RR__1P_GADS_sfgi_meris_rec_data[] = { {"sf_alt", e_tid_float, NULL, 4, "1", "scaling factor - altitude"}, {"sf_rough", e_tid_float, NULL, 4, "1", "scaling factor - roughness"}, {"sf_zon_wind", e_tid_float, NULL, 4, "1", "scaling factor - zonal wind"}, {"sf_merr_wind", e_tid_float, NULL, 4, "1", "scaling factor - meridional wind"}, {"sf_atm_pres", e_tid_float, NULL, 4, "1", "scaling factor - atmospheric pressure"}, {"sf_ozone", e_tid_float, NULL, 4, "1", "scaling factor - ozone"}, {"sf_rel_hum", e_tid_float, NULL, 4, "1", "scaling factor - relative humidity"}, {"sf_rad", e_tid_float, NULL, 4, "15", "scaling factor - radiances"}, {"gain_set", e_tid_uchar, NULL, 1, "5*16", "Gain setting"}, {"samp_rate", e_tid_uint, "(10-6) s", 4, "1", "sampling rate"}, {"sun_spec_flux", e_tid_float, "LU", 4, "15", "Sun Spectral Flux (for bands 1-15)"}, {"spare_1", e_tid_spare, NULL, 60, "1", "Spare"} }; static const struct RecordDescriptor MER_RR__1P_MDSR_16_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start time of the Data Set Record"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"flags", e_tid_uchar, NULL, 1, "sceneRasterWidth", "Flags and spectral shift index"}, {"detector_index", e_tid_short, NULL, 2, "sceneRasterWidth", "Flags and spectral shift index"} }; static const struct RecordDescriptor MER_RR__1P_MDSR_16_IODD5_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start time of the Data Set Record"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"pixel_info", e_tid_uchar, NULL, 1, "2*sceneRasterWidth", "Flags and spectral shift index"} }; static const struct RecordDescriptor MER_RR__1P_MDSR_1_15_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start time of the Data Set Record"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"toa_rad", e_tid_ushort, "LU", 2, "sceneRasterWidth", "TOA radiance"} }; static const struct RecordDescriptor MER_RR__2P_ADSR_sq_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start time of the measurement"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if all MDSRs corresponding to this ADSR are blank, set to zero otherwise)"}, {"perc_water_abs_aero", e_tid_uchar, "%", 1, "1", "% of water pixels having absorbing aerosols"}, {"perc_water", e_tid_uchar, "%", 1, "1", "% of water pixels"}, {"perc_ddv_land", e_tid_uchar, "%", 1, "1", "% of DDV land pixels"}, {"perc_land", e_tid_uchar, "%", 1, "1", "% of land pixels"}, {"perc_cloud", e_tid_uchar, "%", 1, "1", "% of cloud pixels"}, {"perc_low_poly_press", e_tid_uchar, "%", 1, "1", "% of pixels with low polynomial pressure"}, {"perc_low_neural_press", e_tid_uchar, "%", 1, "1", "% of pixels with low Neural Network pressure"}, {"perc_out_ran_inp_wvapour", e_tid_uchar, "%", 1, "1", "% of pixels with out of range inputs for water vapour proc."}, {"per_out_ran_outp_wvapour", e_tid_uchar, "%", 1, "1", "% of pixels with out of range outputs for water vapour proc."}, {"perc_out_range_inp_cl", e_tid_uchar, "%", 1, "1", "% of pixels with out of range inputs for Cloud proc."}, {"perc_out_ran_outp_cl", e_tid_uchar, "%", 1, "1", "% of pixels with out of range outputs for Cloud proc."}, {"perc_in_ran_inp_land", e_tid_uchar, "%", 1, "1", "% of pixels with out of range inputs for Land proc."}, {"perc_out_ran_outp_land", e_tid_uchar, "%", 1, "1", "% of pixels with out of range outputs for Land proc."}, {"perc_out_ran_inp_ocean", e_tid_uchar, "%", 1, "1", "% of pixels with out of range inputs for Ocean proc."}, {"perc_out_ran_outp_ocean", e_tid_uchar, "%", 1, "1", "% of pixels with out of range outputs for Ocean proc."}, {"perc_out_ran_inp_case1", e_tid_uchar, "%", 1, "1", "% of pixels with out of range inputs for Case 1 proc."}, {"perc_out_ran_outp_case1", e_tid_uchar, "%", 1, "1", "% of pixels with out of range outputs for Case 1 proc."}, {"perc_out_ran_inp_case2", e_tid_uchar, "%", 1, "1", "% of pixels with. out of range inputs for Case 2 proc."}, {"perc_out_ran_outp_case2", e_tid_uchar, "%", 1, "1", "% of pixels with. out of range outputs for Case 2 proc."} }; static const struct RecordDescriptor MER_RR__2P_GADS_sfgi_meris_rec_data[] = { {"sf_alt", e_tid_float, NULL, 4, "1", "scaling factor - altitude"}, {"sf_rough", e_tid_float, NULL, 4, "1", "scaling factor - roughness"}, {"sf_zon_wind", e_tid_float, NULL, 4, "1", "scaling factor - zonal wind"}, {"sf_merr_wind", e_tid_float, NULL, 4, "1", "scaling factor - meridional wind"}, {"sf_atm_pres", e_tid_float, NULL, 4, "1", "scaling factor - atmospheric pressure"}, {"sf_ozone", e_tid_float, NULL, 4, "1", "scaling factor - ozone"}, {"sf_rel_humid", e_tid_float, NULL, 4, "1", "scaling factor - relative humidity"}, {"sf_reflec", e_tid_float, NULL, 4, "13", "scaling factor - reflectances"}, {"sf_algal_pig_ind", e_tid_float, NULL, 4, "1", "scaling factor - Algal pigment index"}, {"sf_yellow_subs", e_tid_float, NULL, 4, "1", "scaling factor - Yellow substance"}, {"sf_susp_sed", e_tid_float, NULL, 4, "1", "scaling factor - Suspended sediment"}, {"sf_aero_epsilon", e_tid_float, NULL, 4, "1", "scaling factor - Aerosol epsilon"}, {"sf_aer_opt_thick", e_tid_float, NULL, 4, "1", "scaling factor - Aerosol optical thickness"}, {"sf_cl_opt_thick", e_tid_float, NULL, 4, "1", "scaling factor - Cloud optical thickness"}, {"sf_surf_pres", e_tid_float, NULL, 4, "1", "scaling factor - Surface pressure"}, {"sf_wvapour", e_tid_float, NULL, 4, "1", "scaling factor - Water vapour"}, {"sf_photosyn_rad", e_tid_float, NULL, 4, "1", "scaling factor - Photosynthetically active radiation"}, {"sf_toa_veg", e_tid_float, NULL, 4, "1", "scaling factor - TOA Vegetation index"}, {"sf_boa_veg", e_tid_float, NULL, 4, "1", "scaling factor - BOA Vegetation index"}, {"sf_cloud_albedo", e_tid_float, NULL, 4, "1", "scaling factor - Cloud Albedo"}, {"sf_cloud_top_press", e_tid_float, NULL, 4, "1", "scaling factor - Cloud Top Pressure"}, {"off_reflec", e_tid_float, NULL, 4, "13", "offset - reflectances"}, {"off_algal", e_tid_float, "log10(mg.m-3)", 4, "1", "offset - Algal pigment index"}, {"off_yellow_subs", e_tid_float, "m-1", 4, "1", "offset - Yellow substance"}, {"off_total_susp", e_tid_float, "log10(g.m-3)", 4, "1", "offset - Total suspended matter"}, {"off_aero_epsilon", e_tid_float, NULL, 4, "1", "offset - Aerosol epsilon"}, {"off_aer_opt_thick", e_tid_float, NULL, 4, "1", "offset - Aerosol optical thickness"}, {"off_cl_opt_thick", e_tid_float, NULL, 4, "1", "offset - Cloud optical thickness"}, {"off_surf_pres", e_tid_float, "hPa", 4, "1", "offset - Surface pressure"}, {"off_wvapour", e_tid_float, "g.cm-2", 4, "1", "offset - Water vapour"}, {"off_photosyn_rad", e_tid_float, "W.m-2", 4, "1", "offset - Photosynthetically active radiation"}, {"off_toa_veg", e_tid_float, NULL, 4, "1", "offset - TOA Vegetation index"}, {"off_boa_veg", e_tid_float, NULL, 4, "1", "offset - BOA Vegetation index"}, {"off_cloud_albedo", e_tid_float, NULL, 4, "1", "offset - Cloud Albedo"}, {"off_cloud_top_press", e_tid_float, "hPa", 4, "1", "offset - Cloud Top Pressure"}, {"gain_set", e_tid_uchar, NULL, 1, "5*16", "Gain setting"}, {"sampl_rate", e_tid_uint, "(10-6) s", 4, "1", "sampling rate"}, {"sun_spec_flux", e_tid_float, "LU", 4, "15", "Sun Spectral Flux (for bands 1-15)"}, {"sf_rect_refl_nir", e_tid_float, NULL, 4, "1", "scaling factor - Rectified near infrared reflectance"}, {"off_rect_refl_nir", e_tid_float, NULL, 4, "1", "offset - Rectified near infrared reflectance"}, {"sf_rect_refl_red", e_tid_float, NULL, 4, "1", "scaling factor - Rectified infrared reflectance"}, {"off_rect_refl_red", e_tid_float, NULL, 4, "1", "offset - Rectified infrared reflectance"}, {"spare_1", e_tid_spare, NULL, 1, "44", "spare"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_14_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"wvapour_content_pix", e_tid_uchar, "g.cm-2", 1, "sceneRasterWidth", "Water vapour content pixels"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_15_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"algal_toavi_cl_pix", e_tid_uchar, "mg.m-3, or -, or hPa", 1, "sceneRasterWidth", "Algal I or TOAVI or cloud top pressure pixels"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_16_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"ys_tsm_pix", e_tid_uchar, NULL, 1, "2*sceneRasterWidth", "Yellow Substance, Total Suspended Matter or Rectified Reflectances pixels, interleaved by pixel"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_17_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"algal2_boavi_pix", e_tid_uchar, "mg.m-3 or -", 1, "sceneRasterWidth", "Algal II or BOAVI pixels"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_18_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"par_sp_cl_albe_pix", e_tid_uchar, "W.m-2 or -", 1, "sceneRasterWidth", "PAR or surface pressure or cloud albedo pixels"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_19_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"aer_cl_opt_pix", e_tid_uchar, NULL, 1, "2*sceneRasterWidth", "Aerosol Angstrom exponent or cloud type and optical thickness pixels, interleaved by pixel"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_19_IODD6_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"air_cl_opt_pix", e_tid_uchar, NULL, 1, "2*sceneRasterWidth", "Aerosol epsilon or cloud type and optical thickness pixels, interleaved by pixel"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_1_13_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of the measurement"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"norm_surf_reflec_pix", e_tid_ushort, NULL, 2, "sceneRasterWidth", "Normalised surface reflectance pixels"} }; static const struct RecordDescriptor MER_RR__2P_MDSR_20_meris_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Start Time of DSR"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"pixel_info", e_tid_uchar, "counts", 1, "3*sceneRasterWidth", "Flags associated with pixels"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_lr_large_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"pix_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, nadir view"}, {"pix_ls_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over land surface, nadir view"}, {"perc_cl_pix_ls_nad", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over land surface, nadir view"}, {"lat_corr_nad", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic latitude correction, nadir view"}, {"long_corr_nad", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic longitude correction, nadir view"}, {"sa_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (nadir view)"}, {"sd_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (nadir view)"}, {"sd_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (nadir view)"}, {"sd_37bt_clr_nad", e_tid_int, "%/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (nadir view)"}, {"sd_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (nadir view)"}, {"sd_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (nadir view)"}, {"sd_37bt_cl_nad", e_tid_int, "%/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"fail_flag_nad", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, nadir view"}, {"pix_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, forward view"}, {"pix_ls_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over land surface, forward view"}, {"perc_cl_pix_ls_for", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over land surface, forward view"}, {"lat_corr_for", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic latitude correction, forward view"}, {"long_corr_for", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic longitude correction, forward view"}, {"sa_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (forward view)"}, {"sd_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (forward view)"}, {"sd_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (forward view)"}, {"sd_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (forward view)"}, {"sd_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (forward view)"}, {"sd_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (forward view)"}, {"sd_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"fail_flag_for", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, forward view"}, {"pix_nsig_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels (N-Sigma), nadir view"}, {"pix_ss", e_tid_short, "%/100", 2, "1", "Percentage filled pixels over land surface"}, {"low_11bt_cl_nad", e_tid_short, "K/100", 2, "1", "Lowest 11 micron BT of all cloudy pixels, nadir view"}, {"corr_12bt_nad", e_tid_short, "K/100", 2, "1", "Corresponding 12 micron BT, nadir view"}, {"corr_37bt_nad", e_tid_short, "K/100", 2, "1", "Corresponding 3.7 micron BT, nadir view"}, {"corr_16ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 1.6 micron reflectance, nadir view"}, {"corr_87ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.87 micron reflectance, nadir view"}, {"corr_67ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.67 micron reflectance, nadir view"}, {"corr_55ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.55 micron reflectance, nadir view"}, {"low_11bt_cl_for", e_tid_short, "K/100", 2, "1", "Lowest 11 micron BT of all cloudy pixels, forward view"}, {"corr_12bt_for", e_tid_short, "K/100", 2, "1", "Corresponding 12 micron BT, forward view"}, {"corr_37bt_for", e_tid_short, "K/100", 2, "1", "Corresponding 3.7 micron BT, forward view"}, {"corr_16ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 1.6 micron reflectance, forward view"}, {"corr_87ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.87 micron reflectance, forward view"}, {"corr_67ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.67 micron reflectance, forward view"}, {"corr_55ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.55 micron reflectance, forward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_lr_small_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"pix_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, nadir view"}, {"pix_ls_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over land surface, nadir view"}, {"perc_cl_pix_ls_nad", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over land surface, nadir view"}, {"lat_corr_nad", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic latitude correction, nadir view"}, {"long_corr_nad", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic longitude correction, nadir view"}, {"sa_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (nadir view)"}, {"sa_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (nadir view)"}, {"sa_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (nadir view)"}, {"sa_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (nadir view)"}, {"sa_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (nadir view)"}, {"sa_37bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (nadir view)"}, {"sa_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"fail_flag_nad", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, nadir view"}, {"pix_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, forward view"}, {"pix_ss_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over land surface, forward view"}, {"perc_cl_pix_ss_for", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over land surface, forward view"}, {"lat_corr_for", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic latitude correction, forward view"}, {"long_corr_for", e_tid_int, "(1e-6) degrees", 4, "1", "Topographic longitude correction, forward view"}, {"sa_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (forward view)"}, {"sa_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (forward view)"}, {"sa_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (forward view)"}, {"sa_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (forward view)"}, {"sa_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (forward view)"}, {"sa_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (forward view)"}, {"sa_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (forward view)"}, {"fail_flag_for", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, forward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_lst_large_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"m_lst", e_tid_short, "K/100", 2, "1", "mean land surface temperature (ST)"}, {"sd_lst", e_tid_short, "K/100", 2, "1", "standard deviation of land ST"}, {"pix_lst", e_tid_ushort, NULL, 2, "1", "Number of pixels in land surface temperature average"}, {"m_ndvi", e_tid_short, NULL, 2, "1", "mean NDVI"}, {"sd_ndvi", e_tid_short, NULL, 2, "1", "standard deviation of NDVI"}, {"pix_ndvi", e_tid_ushort, NULL, 2, "1", "Number of pixels in NDVI average"}, {"ast_conf_flags", e_tid_ushort, "flags", 2, "2", "AST confidence word"}, {"cl_top_temp_nad", e_tid_short, "K/100", 2, "1", "Cloud-top temperature, nadir view"}, {"perc_cl_cov_nad", e_tid_short, "%/100", 2, "1", "Percentage cloud-cover, nadir view"}, {"cl_top_temp_for", e_tid_short, "K/100", 2, "1", "Cloud-top temperature, forward view"}, {"perc_cl_cov_for", e_tid_short, "%/100", 2, "1", "Percentage cloud-cover, forward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_lst_small_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"m_lst", e_tid_short, "K/100", 2, "1", "mean land ST in cells"}, {"pix_lst", e_tid_ushort, NULL, 2, "1", "Number of pixels in land surface temperature average"}, {"m_ndvi", e_tid_short, NULL, 2, "1", "mean NDVI"}, {"pix_ndvi", e_tid_ushort, NULL, 2, "1", "Number of pixels in NDVI average"}, {"ast_conf_flags", e_tid_ushort, "flags", 2, "2", "AST confidence word"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_sr_large_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"pix_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, nadir view"}, {"pix_ss_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over sea surface, nadir view"}, {"clpix_ss_nad", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over sea surface, nadir view"}, {"sa_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (nadir view)"}, {"sd_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (nadir view)"}, {"sd_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (nadir view)"}, {"sd_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (nadir view)"}, {"sd_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (nadir view)"}, {"sd_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (nadir view)"}, {"sd_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (nadir view)"}, {"sd_37bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sd_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"fail_flag_nad", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, nadir view"}, {"pix_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, forward view"}, {"pix_ss_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over sea surface, forward view"}, {"perc_cl_pix_ss_for", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over sea surface, forward view"}, {"sa_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (forward view)"}, {"sd_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (forward view)"}, {"sd_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (forward view)"}, {"sd_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (forward view)"}, {"sd_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (forward view)"}, {"sd_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (forward view)"}, {"sd_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (forward view)"}, {"sd_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Standard deviation of above"}, {"sa_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"sa_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sd_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Standard deviation of above"}, {"fail_flag_for", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, foward view"}, {"pix_nsig_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels (N-Sigma), nadir view"}, {"pix_ss", e_tid_short, "%/100", 2, "1", "Percentage filled pixels over sea surface"}, {"low_11bt_cl_nad", e_tid_short, "K/100", 2, "1", "Lowest 11 micron BT of all cloudy pixels, nadir view"}, {"corr_12bt_nad", e_tid_short, "K/100", 2, "1", "Corresponding 12 micron BT, nadir view"}, {"corr_37bt_nad", e_tid_short, "K/100", 2, "1", "Corresponding 3.7 micron BT, nadir view"}, {"corr_16ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 1.6 micron reflectance, nadir view"}, {"corr_87ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.87 micron reflectance, nadir view"}, {"corr_67ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.67 micron reflectance, nadir view"}, {"corr_55ref_nad", e_tid_short, "%/100", 2, "1", "Corresponding 0.55 micron reflectance, nadir view"}, {"low_11bt_cl_for", e_tid_short, "K/100", 2, "1", "Lowest 11 micron BT of all cloudy pixels, forward view"}, {"corr_12bt_for", e_tid_short, "K/100", 2, "1", "Corresponding 12 micron BT, forward view"}, {"corr_37bt_for", e_tid_short, "K/100", 2, "1", "Corresponding 3.7 micron BT, forward view"}, {"corr_16ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 1.6 micron reflectance, forward view"}, {"corr_87ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.87 micron reflectance, forward view"}, {"corr_67ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.67 micron reflectance, forward view"}, {"corr_55ref_for", e_tid_short, "%/100", 2, "1", "Corresponding 0.55 micron reflectance, forward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_sr_small_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"pix_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, nadir view"}, {"pix_ss_nad", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over sea surface, nadir view"}, {"clpix_ss_nad", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over sea surface, nadir view"}, {"sa_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (nadir view)"}, {"sa_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (nadir view)"}, {"sa_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (nadir view)"}, {"sa_16toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_87toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_67toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_55toa_clr_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (nadir view)"}, {"sa_12bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (nadir view)"}, {"sa_11bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (nadir view)"}, {"sa_37bt_cl_nad", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (nadir view)"}, {"sa_16toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_87toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_67toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"sa_55toa_cl_nad", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (nadir view)"}, {"fail_flag_nad", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, nadir view"}, {"pix_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell, forward view"}, {"pix_ss_for", e_tid_short, NULL, 2, "1", "Number of filled pixels in cell over sea surface, forward view"}, {"perc_cl_pix_ss_for", e_tid_short, NULL, 2, "1", "Percentage of cloudy pixels in cell over sea surface, forward view"}, {"sa_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all clear pixels (forward view)"}, {"sa_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all clear pixels (forward view)"}, {"sa_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all clear pixels (forward view)"}, {"sa_16toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_87toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_67toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_55toa_clr_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all clear pixels (forward view)"}, {"sa_12bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 12 micron BT of all cloudy pixels (forward view)"}, {"sa_11bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 11 micron BT of all cloudy pixels (forward view)"}, {"sa_37bt_cl_for", e_tid_int, "K/1000", 4, "1", "Spatially averaged 3.7 micron BT of all cloudy pixels (forward view)"}, {"sa_16toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 1.6 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_87toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.87 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_67toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.67 micron TOA reflectance of all cloudy pixels (forward view)"}, {"sa_55toa_cl_for", e_tid_short, "%/100", 2, "1", "Spatially averaged 0.55 micron TOA reflectance of all cloudy pixels (forward view)"}, {"fail_flag_for", e_tid_ushort, NULL, 2, "1", "Pixel threshold failure flags for averages, foward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_sst_large_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"m_nad", e_tid_short, "K/100", 2, "1", "mean nadir-only SST"}, {"sd_nad", e_tid_short, "K/100", 2, "1", "standard deviation of nadir-only SST"}, {"pix_nad", e_tid_ushort, NULL, 2, "1", "Number of pixels in nadir-only average"}, {"m_dual_vw", e_tid_short, "K/100", 2, "1", "mean dual-view SST"}, {"sd_dual_vw", e_tid_short, "K/100", 2, "1", "standard deviation of dual-view SST"}, {"pix_dual_vw", e_tid_ushort, NULL, 2, "1", "Number of pixels in dual view average"}, {"ast_conf_flags", e_tid_ushort, "flags", 2, "2", "AST confidence word"}, {"cl_top_temp_nad", e_tid_short, "K/100", 2, "1", "Cloud-top temperature, nadir view"}, {"perc_cl_cov_nad", e_tid_short, "%/100", 2, "1", "Percentage cloud-cover, nadir view"}, {"cl_top_temp_for", e_tid_short, "K/100", 2, "1", "Cloud-top temperature, forward view"}, {"perc_cl_cov_for", e_tid_short, "%/100", 2, "1", "Percentage cloud-cover, forward view"} }; static const struct RecordDescriptor ATS_AR__2P_MDSR_sst_small_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of cell"}, {"m_actrk_pix_num", e_tid_short, NULL, 2, "1", "Mean across-track pixel number"}, {"m_nad", e_tid_short, "K/100", 2, "1", "mean nadir-only SST"}, {"pix_nad", e_tid_ushort, NULL, 2, "1", "Number of pixels in nadir-only average"}, {"m_dual_vw", e_tid_short, "K/100", 2, "1", "mean dual-view SST"}, {"pix_dual_vw", e_tid_ushort, NULL, 2, "1", "Number of pixels in dual-view average"}, {"ast_conf_flags", e_tid_ushort, "flags", 2, "2", "AST confidence word"} }; static const struct RecordDescriptor ATS_MET_2P_meteo_user_prod_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"rec_qua_ind", e_tid_char, NULL, 1, "1", "Record Quality indicator"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"lat", e_tid_int, "(1e-6) degrees", 4, "1", "Latitude of 10 arcmin cell"}, {"lon", e_tid_int, "(1e-6) degrees", 4, "1", "Longitude of 10 arcmin cell"}, {"sa_12bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Nadir spatially averaged 12 micron BT of all clear pixels 10 arcmin cells"}, {"sa_11bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Nadir spatially averaged 11 micron BT of all clear pixels in 10 arcmin cells"}, {"sa_37bt_clr_nad", e_tid_int, "K/1000", 4, "1", "Nadir spatially averaged 3.7 micron BT of all clear pixels in 10 arcmin cells"}, {"sa_12bt_clr_for", e_tid_int, "K/1000", 4, "1", "Forward spatially averaged 12 micron BT of all clear pixels in 10 arcmin cells"}, {"sa_11bt_clr_for", e_tid_int, "K/1000", 4, "1", "Forward spatially averaged 11 micron BT of all clear pixels in 10 arcmin cells"}, {"sa_37bt_clr_for", e_tid_int, "K/1000", 4, "1", "Forward spatially averaged 3.7 micron BT of all clear pixels in 10 arcmin cells"}, {"m_actrk_pix_num", e_tid_short, "none", 2, "1", "Mean across-track pixel number"}, {"m_nad", e_tid_short, "K/100", 2, "1", "Mean nadir-only SST 10 arcmin cells"}, {"pix_nad", e_tid_ushort, "none", 2, "1", "Number of pixels in nadir-only average, 10 arcmin cells"}, {"m_dual_vw", e_tid_short, "K/100", 2, "1", "Mean dual-view SST in 10 arcmin cells"}, {"pix_dual_vw", e_tid_ushort, "none", 2, "1", "Number of pixels in dual-view average, 10 arcmin cells"}, {"ast_conf_flags", e_tid_ushort, "flags", 2, "2", "AST confidence word"} }; static const struct RecordDescriptor ATS_NR__2P_ADSR_sq_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment flag(set to 1 if all MDSRs corresponding to this ADSR are blank, set to 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"scan_num", e_tid_ushort, NULL, 2, "1", "image scan number"}, {"pv_nad_null_pac", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans null packet"}, {"pv_nad_fail_val", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans failing basic validation"}, {"pv_nad_fail_crc_chk", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans failing CRC check"}, {"pv_nad_show_buf_full", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans showing buffers full"}, {"pv_nad_scan_jitt", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans showing scan jitter"}, {"per_cloud_pix", e_tid_short, "0.01 %", 2, "1", "percentage of cloudy pixels"}, {"per_ndvi_inv", e_tid_short, "0.01 %", 2, "1", "percentage of NDVI invalid"}, {"per_sst_for_inv", e_tid_short, "0.01 %", 2, "1", "percentage of SST (nadir view) invalid"}, {"per_sst_dual_inv", e_tid_short, "0.01 %", 2, "1", "percentage of SST (dual view) invalid"}, {"pv_nad_scan_error", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans - all other errors"}, {"pv_for_null_pac", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans null packet"}, {"pv_for_fail_val", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans failing basic validation"}, {"pv_for_fail_crc_chk", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans failing CRC check"}, {"pv_for_show_buf_full", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans showing buffers full"}, {"pv_for_scan_jitt", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans showing scan jitter"}, {"resv_char_5", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_6", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_7", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_8", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"pv_for_scan_error", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans - all other errors"}, {"spare_2", e_tid_spare, NULL, 28, "1", "Spare"} }; static const struct RecordDescriptor ATS_NR__2P_MDSR_dp_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"conf_wd_flags", e_tid_ushort, "flags", 2, "512", "confidence words (Defined in Table 7.5.1.7.8 3)"}, {"nad_field", e_tid_short, "K/100", 2, "512", "nadir field (Note 1)"}, {"comb_field", e_tid_short, "See Note 1", 2, "512", "combined field (Note 1)"} }; static const struct RecordDescriptor ATS_TOA_1P_ADSR_loc_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if all MDSRs corresponding to this ADSR are blank, set to 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"tie_pt_lat", e_tid_int, "(1e-6) degrees", 4, "23", "tie point latitudes"}, {"tie_pt_long", e_tid_int, "(1e-6) degrees", 4, "23", "tie point longitudes"}, {"lat_corr_nadv", e_tid_int, "(1e-6) degrees", 4, "23", "latitude corrections, nadir view"}, {"long_corr_nadv", e_tid_int, "(1e-6) degrees", 4, "23", "longitude corrections, nadir view"}, {"lat_corr_forv", e_tid_int, "(1e-6) degrees", 4, "23", "latitude corrections, forward view"}, {"long_corr_forv", e_tid_int, "(1e-6) degrees", 4, "23", "longitude corrections, forward view"}, {"topo_alt", e_tid_short, "metres", 2, "23", "Topographic Altitude"}, {"spare_2", e_tid_spare, NULL, 8, "1", "Spare"} }; static const struct RecordDescriptor ATS_TOA_1P_ADSR_pix_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment flag (always set to zero for this ADS)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"instr_scan_num", e_tid_ushort, NULL, 2, "512", "instrument scan number"}, {"pix_num", e_tid_ushort, NULL, 2, "512", "pixel number"} }; static const struct RecordDescriptor ATS_TOA_1P_ADSR_sa_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADS)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"tie_pt_sol_elev", e_tid_int, "mdeg", 4, "11", "tie point solar elevation"}, {"tie_pt_sat_elev_nad", e_tid_int, "mdeg", 4, "11", "tie point satellite elevation nadir"}, {"tie_pt_sol_az", e_tid_int, "mdeg", 4, "11", "tie point solar azimuth"}, {"tie_pt_sat_azi", e_tid_int, "mdeg", 4, "11", "tie point satellite azimuth"}, {"spare_2", e_tid_spare, NULL, 20, "1", "Spare"} }; static const struct RecordDescriptor ATS_TOA_1P_ADSR_scan_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Scan UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADS)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"instr_scan_num", e_tid_ushort, NULL, 2, "1", "instrument scan number"}, {"tie_pix_x", e_tid_int, "m", 4, "99", "tie pixel x coordinate"}, {"tie_pix_y", e_tid_int, "m", 4, "99", "tie pixel y coordinate"}, {"spare_2", e_tid_spare, NULL, 20, "1", "spare"} }; static const struct RecordDescriptor ATS_TOA_1P_ADSR_sq_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment flag(set to 1 if all MDSRs corresponding to this ADSR are blank, set to 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"scan_num", e_tid_ushort, NULL, 2, "1", "scan number"}, {"pv_nad_null_pac", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans null packet"}, {"pv_nad_fail_val", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans failing basic validation"}, {"pv_nad_fail_crc_chk", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans failing CRC check"}, {"pv_nad_show_buf_full", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans showing buffers full"}, {"pv_nad_scan_jitt", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans showing scan jitter"}, {"resv_char_1", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_2", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_3", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_4", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"pv_nad_scan_error", e_tid_short, NULL, 2, "1", "Packet Validation during nadir view number of scans - all other errors"}, {"pv_for_null_pac", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans null packet"}, {"pv_for_fail_val", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans failing basic validation"}, {"pv_for_fail_crc_chk", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans failing CRC check"}, {"pv_for_show_buf_full", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans showing buffers full"}, {"pv_for_scan_jitt", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans showing scan jitter"}, {"resv_char_5", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_6", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_7", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"resv_char_8", e_tid_short, NULL, 2, "1", "reserved for future use"}, {"pv_for_scan_error", e_tid_short, NULL, 2, "1", "Packet Validation during forward view number of scans - all other errors"}, {"spare_2", e_tid_spare, NULL, 28, "1", "Spare"} }; static const struct RecordDescriptor ATS_TOA_1P_MDSR_brgt_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"bt_rad_pix", e_tid_short, "K/100%/100", 2, "512", "BT or refectance for pixel 0 - 511(Units are K/100 for BT, %/100 for reflectance. Small negative values may be used to represent channel-specific exceptional values)."} }; static const struct RecordDescriptor ATS_TOA_1P_MDSR_cl_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"cl_land_flags", e_tid_ushort, "flags", 2, "512", "cloud/land flags"} }; static const struct RecordDescriptor ATS_TOA_1P_MDSR_conf_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Nadir UTC time in MJD format"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"img_scan_y", e_tid_int, "m", 4, "1", "image scan y coordinate"}, {"conf_wd_flags", e_tid_ushort, "flags", 2, "512", "Confidence words"} }; static const struct RecordDescriptor ATS_VC1_AX_GADS_aatsr_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of cal in MJD format"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment flag (always set to zero for this flag)"}, {"spare_1", e_tid_spare, NULL, 3, "1", "Spare"}, {"slp_16_mic", e_tid_float, NULL, 4, "1", "1.6 micron slope"}, {"slp_087_mic", e_tid_float, NULL, 4, "1", "0.870 micron slope"}, {"slp_067_mic", e_tid_float, NULL, 4, "1", "0.670 micron slope"}, {"slp_055_mic", e_tid_float, NULL, 4, "1", "0.555 micron slope"}, {"asc_time", e_tid_time, "MJD", 12, "1", "UTC at ascending node crossing, in MJD format"}, {"ave_mon_cnt", e_tid_float, NULL, 4, "1", "Average Monitor count"}, {"sd_mon_cnt", e_tid_float, NULL, 4, "1", "Standard deviation of Monitor count"}, {"sol_irr_16", e_tid_float, NULL, 4, "1", "Solar irradiance (1.6 micron)"}, {"sol_irr_087", e_tid_float, NULL, 4, "1", "Solar irradiance (0.870 micron)"}, {"sol_irr_067", e_tid_float, NULL, 4, "1", "Solar irradiance (0.670 micron)"}, {"sol_irr_055", e_tid_float, NULL, 4, "1", "Solar irradiance (0.555 micron)"}, {"ave_vispix_16", e_tid_float, NULL, 4, "1", "Average VISCAL Pixel Counts (1.6 (m)"}, {"ave_vispix_087", e_tid_float, NULL, 4, "1", "Average VISCAL Pixel Counts (0.87 (m)"}, {"ave_vispix_067", e_tid_float, NULL, 4, "1", "Average VISCAL Pixel Counts (0.67 (m)"}, {"ave_vispix_055", e_tid_float, NULL, 4, "1", "Average VISCAL Pixel Counts (0.55 (m)"}, {"vis_pixnois_16", e_tid_float, NULL, 4, "1", "VISCAL Pixel Noise (1.6 micron)"}, {"vis_pixnois_087", e_tid_float, NULL, 4, "1", "VISCAL Pixel Noise (0.87 micron)"}, {"vis_pixnois_067", e_tid_float, NULL, 4, "1", "VISCAL Pixel Noise (0.67 micron)"}, {"vis_pixnois_055", e_tid_float, NULL, 4, "1", "VISCAL Pixel Noise (0.55 micron)"}, {"ave_xbb_16", e_tid_float, NULL, 4, "1", "Average -X BB Pixel Counts (1.6 (m)"}, {"ave_xbb_cnt_087", e_tid_float, NULL, 4, "1", "Average -X BB Pixel Counts (0.87 (m)"}, {"ave_xbb_cnt_067", e_tid_float, NULL, 4, "1", "Average -X BB Pixel Counts (0.67 (m)"}, {"ave_xbb_cnt_055", e_tid_float, NULL, 4, "1", "Average -X BB Pixel Counts (0.55 (m)"}, {"xbb_nois_16", e_tid_float, NULL, 4, "1", "-X BB Pixel Noise (1.6 micron)"}, {"xbb_nois_087", e_tid_float, NULL, 4, "1", "-X BB Pixel Noise (0.87 micron)"}, {"xbb_nois_067", e_tid_float, NULL, 4, "1", "-X BB Pixel Noise (0.67 micron)"}, {"xbb_nois_055", e_tid_float, NULL, 4, "1", "-X BB Pixel Noise (0.55 micron)"}, {"parity_char", e_tid_short, NULL, 2, "1", "(Reserved for parity indicator)"}, {"spare_2", e_tid_spare, NULL, 20, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Antenna_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler azimuth time at which pattern applies"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"beam_id", e_tid_string, "ascii", 3, "1", "Beam ID to which pattern applies SS1 to SS5 or NSØ"}, {"elevation_pattern.slant_range_time", e_tid_float, "ns", 4, "11", "2 way slant range times"}, {"elevation_pattern.elevation_angles", e_tid_float, "degrees", 4, "11", "Corresponding elevation angles"}, {"elevation_pattern.antenna_pattern", e_tid_float, "dB", 4, "11", "Corresponding two-way antenna elevation pattern values"}, {"spare_1", e_tid_spare, NULL, 14, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Chirp_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler azimuth time in azimuth at which estimate applies"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"beam_id", e_tid_string, "ascii", 3, "1", "Beam ID: SS1, SS2, SS3, SS4, or SS5 for WS and GM images. Set to NSØ for AP, IM, and WV images."}, {"polar", e_tid_string, "ascii", 3, "1", "Tx/Rx polarization H/H, H/V, V/V, or V/H"}, {"chirp_width", e_tid_float, "samples", 4, "1", "3-dB pulse width of chirp replica cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_sidelobe", e_tid_float, "dB", 4, "1", "First side lobe level of chirp replica cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_islr", e_tid_float, "dB", 4, "1", "ISLR of chirp replica cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_peak_loc", e_tid_float, "samples", 4, "1", "Peak location of cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_power", e_tid_float, "dB", 4, "1", "Chirp power"}, {"elev_corr_factor", e_tid_float, NULL, 4, "1", "Elevation gain correction scaling factor applied to range compressed samples"}, {"spare_1", e_tid_spare, NULL, 16, "1", "Spare"}, {"cal_pulse_info.1.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 1)"}, {"cal_pulse_info.1.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 1)"}, {"cal_pulse_info.1.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 1)"}, {"cal_pulse_info.1.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 1)"}, {"cal_pulse_info.2.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 2)"}, {"cal_pulse_info.2.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 2)"}, {"cal_pulse_info.2.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 2)"}, {"cal_pulse_info.2.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 2)"}, {"cal_pulse_info.3.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 3)"}, {"cal_pulse_info.3.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 3)"}, {"cal_pulse_info.3.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 3)"}, {"cal_pulse_info.3.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 3)"}, {"cal_pulse_info.4.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 4)"}, {"cal_pulse_info.4.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 4)"}, {"cal_pulse_info.4.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 4)"}, {"cal_pulse_info.4.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 4)"}, {"cal_pulse_info.5.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 5)"}, {"cal_pulse_info.5.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 5)"}, {"cal_pulse_info.5.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 5)"}, {"cal_pulse_info.5.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 5)"}, {"cal_pulse_info.6.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 6)"}, {"cal_pulse_info.6.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 6)"}, {"cal_pulse_info.6.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 6)"}, {"cal_pulse_info.6.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 6)"}, {"cal_pulse_info.7.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 7)"}, {"cal_pulse_info.7.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 7)"}, {"cal_pulse_info.7.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 7)"}, {"cal_pulse_info.7.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 7)"}, {"cal_pulse_info.8.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 8)"}, {"cal_pulse_info.8.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 8)"}, {"cal_pulse_info.8.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 8)"}, {"cal_pulse_info.8.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 8)"}, {"cal_pulse_info.9.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 9)"}, {"cal_pulse_info.9.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 9)"}, {"cal_pulse_info.9.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 9)"}, {"cal_pulse_info.9.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 9)"}, {"cal_pulse_info.10.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 10)"}, {"cal_pulse_info.10.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 10)"}, {"cal_pulse_info.10.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 10)"}, {"cal_pulse_info.10.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 10)"}, {"cal_pulse_info.11.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 11)"}, {"cal_pulse_info.11.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 11)"}, {"cal_pulse_info.11.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 11)"}, {"cal_pulse_info.11.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 11)"}, {"cal_pulse_info.12.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 12)"}, {"cal_pulse_info.12.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 12)"}, {"cal_pulse_info.12.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 12)"}, {"cal_pulse_info.12.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 12)"}, {"cal_pulse_info.13.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 13)"}, {"cal_pulse_info.13.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 13)"}, {"cal_pulse_info.13.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 13)"}, {"cal_pulse_info.13.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 13)"}, {"cal_pulse_info.14.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 14)"}, {"cal_pulse_info.14.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 14)"}, {"cal_pulse_info.14.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 14)"}, {"cal_pulse_info.14.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 14)"}, {"cal_pulse_info.15.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 15)"}, {"cal_pulse_info.15.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 15)"}, {"cal_pulse_info.15.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 15)"}, {"cal_pulse_info.15.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 15)"}, {"cal_pulse_info.16.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 16)"}, {"cal_pulse_info.16.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 16)"}, {"cal_pulse_info.16.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 16)"}, {"cal_pulse_info.16.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 16)"}, {"cal_pulse_info.17.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 17)"}, {"cal_pulse_info.17.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 17)"}, {"cal_pulse_info.17.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 17)"}, {"cal_pulse_info.17.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 17)"}, {"cal_pulse_info.18.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 18)"}, {"cal_pulse_info.18.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 18)"}, {"cal_pulse_info.18.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 18)"}, {"cal_pulse_info.18.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 18)"}, {"cal_pulse_info.19.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 19)"}, {"cal_pulse_info.19.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 19)"}, {"cal_pulse_info.19.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 19)"}, {"cal_pulse_info.19.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 19)"}, {"cal_pulse_info.20.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 20)"}, {"cal_pulse_info.20.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 20)"}, {"cal_pulse_info.20.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 20)"}, {"cal_pulse_info.20.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 20)"}, {"cal_pulse_info.21.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 21)"}, {"cal_pulse_info.21.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 21)"}, {"cal_pulse_info.21.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 21)"}, {"cal_pulse_info.21.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 21)"}, {"cal_pulse_info.22.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 22)"}, {"cal_pulse_info.22.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 22)"}, {"cal_pulse_info.22.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 22)"}, {"cal_pulse_info.22.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 22)"}, {"cal_pulse_info.23.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 23)"}, {"cal_pulse_info.23.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 23)"}, {"cal_pulse_info.23.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 23)"}, {"cal_pulse_info.23.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 23)"}, {"cal_pulse_info.24.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 24)"}, {"cal_pulse_info.24.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 24)"}, {"cal_pulse_info.24.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 24)"}, {"cal_pulse_info.24.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 24)"}, {"cal_pulse_info.25.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 25)"}, {"cal_pulse_info.25.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 25)"}, {"cal_pulse_info.25.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 25)"}, {"cal_pulse_info.25.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 25)"}, {"cal_pulse_info.26.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 26)"}, {"cal_pulse_info.26.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 26)"}, {"cal_pulse_info.26.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 26)"}, {"cal_pulse_info.26.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 26)"}, {"cal_pulse_info.27.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 27)"}, {"cal_pulse_info.27.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 27)"}, {"cal_pulse_info.27.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 27)"}, {"cal_pulse_info.27.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 27)"}, {"cal_pulse_info.28.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 28)"}, {"cal_pulse_info.28.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 28)"}, {"cal_pulse_info.28.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 28)"}, {"cal_pulse_info.28.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 28)"}, {"cal_pulse_info.29.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 29)"}, {"cal_pulse_info.29.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 29)"}, {"cal_pulse_info.29.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 29)"}, {"cal_pulse_info.29.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 29)"}, {"cal_pulse_info.30.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 30)"}, {"cal_pulse_info.30.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 30)"}, {"cal_pulse_info.30.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 30)"}, {"cal_pulse_info.30.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 30)"}, {"cal_pulse_info.31.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 31)"}, {"cal_pulse_info.31.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 31)"}, {"cal_pulse_info.31.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 31)"}, {"cal_pulse_info.31.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 31)"}, {"cal_pulse_info.32.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 32)"}, {"cal_pulse_info.32.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 32)"}, {"cal_pulse_info.32.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 32)"}, {"cal_pulse_info.32.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 32)"}, {"spare_2", e_tid_spare, NULL, 16, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Dop_Cen_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler azimuth time at which estimate applies"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"slant_range_time", e_tid_float, "ns", 4, "1", "2-way slant range time origin (t0)"}, {"dop_coef", e_tid_float, "HzHz/sHz/s2Hz/s3Hz/s4", 4, "5", "Doppler centroid coefficients as a function of slant range time: D0, D1, D2, D3, and D4. where Doppler Centroid = D0 + D1(tSR-t0) + D2(tSR-t0)2 + D3(tSR-t0)3 + D4(tSR-t0)4"}, {"dop_conf", e_tid_float, NULL, 4, "1", "Doppler Centroid Confidence Measure. Value between 0 and 1, 0 = poorest confidence, 1= highest confidence. If multiple Doppler Centroid estimates were performed, this value is the lowest confidence value attained."}, {"dop_thresh_flag", e_tid_uchar, "flag", 1, "1", "Doppler Confidence Below Threshold Flag. 0 = confidence above threshold, Doppler Centroid calculated from data. 1 = confidence below threshold, Doppler Centroid calculated from orbit."}, {"spare_1", e_tid_spare, NULL, 13, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Geo_Grid_ADSR_asar_rec_data[] = { {"first_zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time in azimuth of first line of the granule. Gives azimuth location of grid line for first line of the granule."}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if all MDSRs corresponding to this ADSR are blank, set to zero otherwise)."}, {"line_num", e_tid_uint, NULL, 4, "1", "Range line number corresponding to the first line of the granule"}, {"num_lines", e_tid_uint, "lines", 4, "1", "Number of output lines in this granule"}, {"sub_sat_track", e_tid_float, "deg.", 4, "1", "Subsatellite track heading (relative to North) for first line of granule. This is the heading on the ground (includes Earth rotation)."}, {"first_line_tie_points.samp_numbers", e_tid_uint, NULL, 4, "11", "Range sample number. Gives the range location of the grid points. First range sample is 1, last is M. Zero filled samples are included."}, {"first_line_tie_points.slant_range_times", e_tid_float, "ns", 4, "11", "2 way slant range time to range sample"}, {"first_line_tie_points.angles", e_tid_float, "deg.", 4, "11", "Incidence Angle at range sample"}, {"first_line_tie_points.lats", e_tid_int, "(1e-6) degrees", 4, "11", "geodetic latitude (positive north)"}, {"first_line_tie_points.longs", e_tid_int, "(1e-6) degrees", 4, "11", "geodetic longitude (positive east)"}, {"spare_1", e_tid_spare, NULL, 22, "1", "Spare"}, {"last_zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero doppler time for the last line of the granule"}, {"last_line_tie_points.samp_numbers", e_tid_uint, NULL, 4, "11", "Range sample number. Gives the range location of the grid points. First range sample is 1, last is M."}, {"last_line_tie_points.slant_range_times", e_tid_float, "ns", 4, "11", "2 way slant range time to range sample"}, {"last_line_tie_points.angles", e_tid_float, "deg.", 4, "11", "Incidence Angle at range sample"}, {"last_line_tie_points.lats", e_tid_int, "(1e-6) degrees", 4, "11", "geodetic latitude (positive north)"}, {"last_line_tie_points.longs", e_tid_int, "(1e-6) degrees", 4, "11", "geodetic longitude (positive east)"}, {"spare_2", e_tid_spare, NULL, 22, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Image_MDSR_BP_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time (MJD format)"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"line_num", e_tid_uint, NULL, 4, "1", "Range line number. Numbered sequentially, for each product (or slice) first range line in MDS is 1"}, {"proc_data", e_tid_uchar, NULL, 1, "sceneRasterWidth", "SAR Processed Data for Browse Products (detected data)"} }; static const struct RecordDescriptor ASAR_Image_MDSR_Gen_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time (MJD format)"}, {"quality_flag", e_tid_char, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"line_num", e_tid_uint, NULL, 4, "1", "Range line number. Numbered sequentially, for each product (or slice) first range line in MDS is 1"}, {"proc_data", e_tid_ushort, NULL, 2, "sceneRasterWidth", "SAR Processed Data. Real samples (detected products)"} }; static const struct RecordDescriptor ASAR_Image_MDSR_SLC_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time (MJD format)"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"line_num", e_tid_uint, NULL, 4, "1", "Range line number. Numbered sequentially, for each product (or slice) first range line in MDS is 1"}, {"proc_data", e_tid_short, NULL, 2, "2*sceneRasterWidth", "SAR Processed Data for SLC products. Alternates Real Part, Imaginary Part, Real Part Imaginary Part)"} }; static const struct RecordDescriptor ASAR_Main_ADSR_asar_rec_data[] = { {"first_zero_doppler_time", e_tid_time, "MJD", 12, "1", "First Zero Doppler Azimuth time of MDS which this data set describes Time of first range line in the MDS described by this data set."}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"last_zero_doppler_time", e_tid_time, "MJD", 12, "1", "Last Zero Doppler Azimuth time of MDS which this data set describes Time of last range line in the MDS described by this data set"}, {"work_order_id", e_tid_string, "ascii", 12, "1", "Work Order ID (left-justified)"}, {"time_diff", e_tid_float, "s", 4, "1", "Time difference between sensing time of first input line and zero Doppler time of first output image line (tdelta). (TBC)May be used during child product extraction from a stripline product (TBC). Left blank (set to zero) for non-stripline products."}, {"swath_id", e_tid_string, "ascii", 3, "1", "Swath number IS1, IS2, IS3, IS4, IS5, IS6, or IS7 for IM, WV and AP modes.Set to WSØ for WS and GM modes"}, {"range_spacing", e_tid_float, "m", 4, "1", "Range sample spacing"}, {"azimuth_spacing", e_tid_float, "m", 4, "1", "Azimuth sample spacing at image center"}, {"line_time_interval", e_tid_float, "s", 4, "1", "Azimuth sample spacing in time (Line Time Interval)"}, {"num_output_lines", e_tid_uint, "lines", 4, "1", "Number of output range lines in the image described by this ADS"}, {"num_samples_per_line", e_tid_uint, "samples", 4, "1", "Number of samples per output range line (includes zero filled samples)"}, {"data_type", e_tid_string, "ascii", 5, "1", "Output data type. SWORD, UWORD, or UBYTE"}, {"spare_1", e_tid_spare, NULL, 51, "1", "Spare"}, {"data_analysis_flag", e_tid_uchar, "flag", 1, "1", "Raw Data Analysis used for Raw Data Correction. 0 = correction done using default parameters. 1 = correction done using raw data analysis results."}, {"ant_elev_corr_flag", e_tid_uchar, "flag", 1, "1", "Antenna Elevation Pattern Correction Applied. 0 = no correction applied. 1 = correction applied."}, {"chirp_extract_flag", e_tid_uchar, "flag", 1, "1", "Reconstructed Chirp used. 0 = nominal chirp replica used. 1 = reconstructed chirp used."}, {"srgr_flag", e_tid_uchar, "flag", 1, "1", "Slant Range to Ground Range Conversion Applied. 0 = no conversion applied. 1 = conversion applied"}, {"dop_cen_flag", e_tid_uchar, "flag", 1, "1", "Doppler Centroid Estimation Performed. 0 = no estimation done. 1 = estimation done."}, {"dop_amb_flag", e_tid_uchar, "flag", 1, "1", "Doppler Ambiguity Estimation Performed. 0 = no estimate done. 1 = estimate done"}, {"range_spread_comp_flag", e_tid_uchar, "flag", 1, "1", "Range-spreading loss compensation Applied. 0 = no compensation applied. 1 = compensation applied."}, {"detected_flag", e_tid_uchar, "flag", 1, "1", "Detection Applied. 0 = output product is complex. 1 = output product was detected."}, {"look_sum_flag", e_tid_uchar, "flag", 1, "1", "Look Summation Performed. 0 = product is single look. 1 = product is multi-looked."}, {"rms_equal_flag", e_tid_uchar, "flag", 1, "1", "RMS Equalization performed. 0= rms equalization not performed during FBAQ decoding. 1 = rms equalization performed during FBAQ decoding."}, {"ant_scal_flag", e_tid_uchar, "flag", 1, "1", "Antenna Elevation Gain Scaling Factor Applied. 0= no scaling factor applied. 1 = scaling factor applied."}, {"vga_com_echo_flag", e_tid_uchar, "flag", 1, "1", "Receive Gain Droop Compensation Applied to Echo Data. 0 = no compensation applied. 1 = compensation applied."}, {"vga_com_pulse_2_flag", e_tid_uchar, "flag", 1, "1", "Receive Gain Droop Compensation Applied Calibration Pulse P2. 0 = no compensation applied. 1 = compensation applied."}, {"vga_com_pulse_zero_flag", e_tid_uchar, "flag", 1, "1", "Receive Gain Droop Compensation Applied Calibration Pulse P2 Order Zero: Nominal Time Delay Applied. 0 = no compensation applied. 1 = compensation applied."}, {"inv_filt_comp_flag", e_tid_uchar, "flag", 1, "1", "Inverse FIlter used for range compression (GM Mode only). 0 = matched filter used for range compression. 1 = inverse filter used for range compression"}, {"spare_2", e_tid_spare, NULL, 6, "1", "Spare"}, {"raw_data_analysis.1.num_gaps", e_tid_uint, "gaps", 4, "1", "Number of input data gaps (a gap is defined as a predetermined number of range lines) (record 1)"}, {"raw_data_analysis.1.num_missing_lines", e_tid_uint, "lines", 4, "1", "Number of missing lines, excluding data gaps (record 1)"}, {"raw_data_analysis.1.range_samp_skip", e_tid_uint, "samples", 4, "1", "Range sample skipping factor for raw data analysis (record 1)"}, {"raw_data_analysis.1.range_lines_skip", e_tid_uint, "lines", 4, "1", "Range lines skipping factor for raw data analysis (record 1)"}, {"raw_data_analysis.1.calc_i_bias", e_tid_float, NULL, 4, "1", "Calculated I channel bias (record 1)"}, {"raw_data_analysis.1.calc_q_bias", e_tid_float, NULL, 4, "1", "Calculated Q channel bias (record 1)"}, {"raw_data_analysis.1.calc_i_std_dev", e_tid_float, NULL, 4, "1", "Calculated I channel standard deviation (record 1)"}, {"raw_data_analysis.1.calc_q_std_dev", e_tid_float, NULL, 4, "1", "Calculated Q channel standard deviation (record 1)"}, {"raw_data_analysis.1.calc_gain", e_tid_float, NULL, 4, "1", "Calculated I/Q gain imbalance (record 1)"}, {"raw_data_analysis.1.calc_quad", e_tid_float, NULL, 4, "1", "Calculated I/Q quadrature departure (record 1)"}, {"raw_data_analysis.1.i_bias_max", e_tid_float, NULL, 4, "1", "I bias upper bound (record 1)"}, {"raw_data_analysis.1.i_bias_min", e_tid_float, NULL, 4, "1", "I bias lower bound (record 1)"}, {"raw_data_analysis.1.q_bias_max", e_tid_float, NULL, 4, "1", "Q bias upper bound (record 1)"}, {"raw_data_analysis.1.q_bias_min", e_tid_float, NULL, 4, "1", "Q bias lower bound (record 1)"}, {"raw_data_analysis.1.gain_min", e_tid_float, NULL, 4, "1", "I/Q gain lower bound (record 1)"}, {"raw_data_analysis.1.gain_max", e_tid_float, NULL, 4, "1", "I/Q gain upper bound (record 1)"}, {"raw_data_analysis.1.quad_min", e_tid_float, NULL, 4, "1", "I/Q quadrature departure lower bound (record 1)"}, {"raw_data_analysis.1.quad_max", e_tid_float, NULL, 4, "1", "I/Q quadrature departure upper bound (record 1)"}, {"raw_data_analysis.1.i_bias_flag", e_tid_uchar, "flag", 1, "1", "I bias significance. 0 = I bias falls within acceptable range. 1 = I bias falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.q_bias_flag", e_tid_uchar, "flag", 1, "1", "Q bias Significance. 0 = Q bias falls within acceptable range. 1 = Q bias falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.gain_flag", e_tid_uchar, "flag", 1, "1", "I/Q Gain Significance. 0 = Gain falls within acceptable range. 1 = Gain falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.quad_flag", e_tid_uchar, "flag", 1, "1", "I/Q Quadrature Departure Significance. 0 = Quadrature departure falls within acceptable range. 1 =Quadrature departure falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.used_i_bias", e_tid_float, NULL, 4, "1", "I channel bias used for correction (may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_q_bias", e_tid_float, NULL, 4, "1", "Q channel bias used for correction (may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_gain", e_tid_float, NULL, 4, "1", "I/Q gain imbalance used for correction (may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_quad", e_tid_float, NULL, 4, "1", "I/Q quadrature departure used for correction (may be different from measured value) (record 1)"}, {"raw_data_analysis.2.num_gaps", e_tid_uint, "gaps", 4, "1", "Number of input data gaps (a gap is defined as a predetermined number of range lines) (record 2)"}, {"raw_data_analysis.2.num_missing_lines", e_tid_uint, "lines", 4, "1", "Number of missing lines, excluding data gaps (record 2)"}, {"raw_data_analysis.2.range_samp_skip", e_tid_uint, "samples", 4, "1", "Range sample skipping factor for raw data analysis (record 2)"}, {"raw_data_analysis.2.range_lines_skip", e_tid_uint, "lines", 4, "1", "Range lines skipping factor for raw data analysis (record 2)"}, {"raw_data_analysis.2.calc_i_bias", e_tid_float, NULL, 4, "1", "Calculated I channel bias (record 2)"}, {"raw_data_analysis.2.calc_q_bias", e_tid_float, NULL, 4, "1", "Calculated Q channel bias (record 2)"}, {"raw_data_analysis.2.calc_i_std_dev", e_tid_float, NULL, 4, "1", "Calculated I channel standard deviation (record 2)"}, {"raw_data_analysis.2.calc_q_std_dev", e_tid_float, NULL, 4, "1", "Calculated Q channel standard deviation (record 2)"}, {"raw_data_analysis.2.calc_gain", e_tid_float, NULL, 4, "1", "Calculated I/Q gain imbalance (record 2)"}, {"raw_data_analysis.2.calc_quad", e_tid_float, NULL, 4, "1", "Calculated I/Q quadrature departure (record 2)"}, {"raw_data_analysis.2.i_bias_max", e_tid_float, NULL, 4, "1", "I bias upper bound (record 2)"}, {"raw_data_analysis.2.i_bias_min", e_tid_float, NULL, 4, "1", "I bias lower bound (record 2)"}, {"raw_data_analysis.2.q_bias_max", e_tid_float, NULL, 4, "1", "Q bias upper bound (record 2)"}, {"raw_data_analysis.2.q_bias_min", e_tid_float, NULL, 4, "1", "Q bias lower bound (record 2)"}, {"raw_data_analysis.2.gain_min", e_tid_float, NULL, 4, "1", "I/Q gain lower bound (record 2)"}, {"raw_data_analysis.2.gain_max", e_tid_float, NULL, 4, "1", "I/Q gain upper bound (record 2)"}, {"raw_data_analysis.2.quad_min", e_tid_float, NULL, 4, "1", "I/Q quadrature departure lower bound (record 2)"}, {"raw_data_analysis.2.quad_max", e_tid_float, NULL, 4, "1", "I/Q quadrature departure upper bound (record 2)"}, {"raw_data_analysis.2.i_bias_flag", e_tid_uchar, "flag", 1, "1", "I bias significance. 0 = I bias falls within acceptable range. 1 = I bias falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.q_bias_flag", e_tid_uchar, "flag", 1, "1", "Q bias Significance. 0 = Q bias falls within acceptable range. 1 = Q bias falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.gain_flag", e_tid_uchar, "flag", 1, "1", "I/Q Gain Significance. 0 = Gain falls within acceptable range. 1 = Gain falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.quad_flag", e_tid_uchar, "flag", 1, "1", "I/Q Quadrature Departure Significance. 0 = Quadrature departure falls within acceptable range. 1 =Quadrature departure falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.used_i_bias", e_tid_float, NULL, 4, "1", "I channel bias used for correction (may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_q_bias", e_tid_float, NULL, 4, "1", "Q channel bias used for correction (may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_gain", e_tid_float, NULL, 4, "1", "I/Q gain imbalance used for correction (may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_quad", e_tid_float, NULL, 4, "1", "I/Q quadrature departure used for correction (may be different from measured value) (record 2)"}, {"spare_3", e_tid_spare, NULL, 32, "1", "Spare"}, {"start_time.1.first_obt", e_tid_uint, NULL, 4, "2", "On-board binary time of first input line processed. LSB accurate to 15.26 us. (Contained in two long integers) (record 1)"}, {"start_time.1.first_mjd", e_tid_time, "MJD", 12, "1", "Sensing time (MJD format) of first input line processed converted from satellite binary time (record 1)"}, {"start_time.2.first_obt", e_tid_uint, NULL, 4, "2", "On-board binary time of first input line processed. LSB accurate to 15.26 us. (Contained in two long integers) (record 2)"}, {"start_time.2.first_mjd", e_tid_time, "MJD", 12, "1", "Sensing time (MJD format) of first input line processed converted from satellite binary time (record 2)"}, {"parameter_codes.first_swst_code", e_tid_ushort, "code", 2, "5", "Sampling Window Start time code of first processed line"}, {"parameter_codes.last_swst_code", e_tid_ushort, "code", 2, "5", "Sampling Window Start time code of last processed line"}, {"parameter_codes.pri_code", e_tid_ushort, "code", 2, "5", "Pulse Repetition Interval code"}, {"parameter_codes.tx_pulse_len_code", e_tid_ushort, "code", 2, "5", "Tx pulse length"}, {"parameter_codes.tx_bw_code", e_tid_ushort, "code", 2, "5", "Tx pulse bandwidth"}, {"parameter_codes.echo_win_len_code", e_tid_ushort, "code", 2, "5", "Echo Window Length"}, {"parameter_codes.up_code", e_tid_ushort, "code", 2, "5", "Upconverter Level - Upconverter gain set on the instrument"}, {"parameter_codes.down_code", e_tid_ushort, "code", 2, "5", "Downconverter Level - Downconverter gain set on the instrument"}, {"parameter_codes.resamp_code", e_tid_ushort, "code", 2, "5", "Resampling factor for echo data"}, {"parameter_codes.beam_adj_code", e_tid_ushort, "code", 2, "5", "Beam adjustment delta"}, {"parameter_codes.beam_set_num_code", e_tid_ushort, "code", 2, "5", "Antenna Beam Set Number"}, {"parameter_codes.tx_monitor_code", e_tid_ushort, "code", 2, "5", "Auxiliary Tx Monitor Level"}, {"spare_4", e_tid_spare, NULL, 60, "1", "Spare"}, {"error_counters.num_err_swst", e_tid_uint, NULL, 4, "1", "Number of errors detected in Sampling Window start time field."}, {"error_counters.num_err_pri", e_tid_uint, NULL, 4, "1", "Number of errors detected in PRI code field"}, {"error_counters.num_err_tx_pulse_len", e_tid_uint, NULL, 4, "1", "Number of errors detected in Tx pulse length field"}, {"error_counters.num_err_tx_pulse_bw", e_tid_uint, NULL, 4, "1", "Number of errors detected in Tx pulse bandwidth field."}, {"error_counters.num_err_echo_win_len", e_tid_uint, NULL, 4, "1", "Number of errors detected in Echo Window Length field."}, {"error_counters.num_err_up", e_tid_uint, NULL, 4, "1", "Number of errors detected in Upconverter Level field."}, {"error_counters.num_err_down", e_tid_uint, NULL, 4, "1", "Number of errors detected in Downconverter Level field."}, {"error_counters.num_err_resamp", e_tid_uint, NULL, 4, "1", "Number of errors detected in Resampling factor for echo data field."}, {"error_counters.num_err_beam_adj", e_tid_uint, NULL, 4, "1", "Number of errors detected in Beam adjustment delta field."}, {"error_counters.num_err_beam_set_num", e_tid_uint, NULL, 4, "1", "Number of errors detected in Antenna Beam Set Number field."}, {"spare_5", e_tid_spare, NULL, 26, "1", "Spare"}, {"image_parameters.first_swst_value", e_tid_float, "s", 4, "5", "Sampling Window Start time of first processed line"}, {"image_parameters.last_swst_value", e_tid_float, "s", 4, "5", "Sampling Window Start time of last processed line"}, {"image_parameters.swst_changes", e_tid_uint, NULL, 4, "5", "Number of Sample Window Start Time changes within a beam"}, {"image_parameters.prf_value", e_tid_float, "Hz", 4, "5", "Pulse Repetition Frequency"}, {"image_parameters.tx_pulse_len_value", e_tid_float, "s", 4, "5", "Tx pulse length"}, {"image_parameters.tx_pulse_bw_value", e_tid_float, "Hz", 4, "5", "Tx pulse bandwidth"}, {"image_parameters.echo_win_len_value", e_tid_float, "s", 4, "5", "Echo Window Length"}, {"image_parameters.up_value", e_tid_float, "dB", 4, "5", "Upconverter Level - Upconverter gain set on the instrument"}, {"image_parameters.down_value", e_tid_float, "dB", 4, "5", "Downconverter Level - Downconverter gain set on the instrument"}, {"image_parameters.resamp_value", e_tid_float, NULL, 4, "5", "Resampling factor"}, {"image_parameters.beam_adj_value", e_tid_float, "deg.", 4, "5", "Beam adjustment delta"}, {"image_parameters.beam_set_value", e_tid_ushort, NULL, 2, "5", "Antenna Beam Set Number"}, {"image_parameters.tx_monitor_value", e_tid_float, NULL, 4, "5", "Auxiliary Tx Monitor Level"}, {"spare_6", e_tid_spare, NULL, 82, "1", "Spare"}, {"first_proc_range_samp", e_tid_uint, "samples", 4, "1", "First processed input range sample, first sample is 1"}, {"range_ref", e_tid_float, "m", 4, "1", "Range spreading loss reference range"}, {"range_samp_rate", e_tid_float, "Hz", 4, "1", "Range sampling rate"}, {"radar_freq", e_tid_float, "Hz", 4, "1", "Radar Frequency"}, {"num_looks_range", e_tid_ushort, "looks", 2, "1", "Number of range looks"}, {"filter_window", e_tid_string, "ascii", 7, "1", "Matched filter window type:HAMMING or KAISERØ or NONEØØØ"}, {"window_coef_range", e_tid_float, NULL, 4, "1", "Window coefficient for range-matched filter"}, {"bandwidth.look_bw_range", e_tid_float, "Hz", 4, "5", "Range Look Bandwidth (null to null)"}, {"bandwidth.tot_bw_range", e_tid_float, "Hz", 4, "5", "Total processed range bandwidth (null to null)"}, {"nominal_chirp.1.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 1)"}, {"nominal_chirp.1.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 1)"}, {"nominal_chirp.2.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 2)"}, {"nominal_chirp.2.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 2)"}, {"nominal_chirp.3.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 3)"}, {"nominal_chirp.3.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 3)"}, {"nominal_chirp.4.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 4)"}, {"nominal_chirp.4.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 4)"}, {"nominal_chirp.5.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 5)"}, {"nominal_chirp.5.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 5)"}, {"spare_7", e_tid_spare, NULL, 60, "1", "Spare"}, {"num_lines_proc", e_tid_uint, "lines", 4, "1", "Number of input lines processed"}, {"num_look_az", e_tid_ushort, "looks", 2, "1", "Number of Azimuth Looks"}, {"look_bw_az", e_tid_float, "Hz", 4, "1", "Azimuth Look Bandwidth (null to null) -- this is the nominal value only for GM, WS, and AP."}, {"to_bw_az", e_tid_float, "Hz", 4, "1", "Processed Azimuth bandwidth (null to null) -- this field is used only for IM products and WV imagettes. Filled with zeros otherwise."}, {"filter_az", e_tid_string, "ascii", 7, "1", "Matched filter window type:HAMMING or KAISERØ or NONEØØØ"}, {"filter_coef_az", e_tid_float, NULL, 4, "1", "Window coefficient for azimuth-matched filter"}, {"az_fm_rate", e_tid_float, "Hz/sHz/s2Hz/s3", 4, "3", "3 co-efficients for Azimuth FM rate: Azimuth FM rate = C0 + C1(tSR-t0) + C2(tSR - t0)2tSR = 2 way slant range time"}, {"ax_fm_origin", e_tid_float, "ns", 4, "1", "2 way slant range time origin (t0) for Azimuth FM rate calculation"}, {"dop_amb_conf", e_tid_float, NULL, 4, "1", "Doppler Centroid Ambiguity Confidence Measure. Value between 0 and 1, 0 = poorest confidence, 1= highest confidence"}, {"spare_8", e_tid_spare, NULL, 68, "1", "Spare"}, {"calibration_factors.1.proc_scaling_fact", e_tid_float, NULL, 4, "1", "Processor scaling factor (factor units are linear when using Range/Doppler algorithm, dB when Specan is used) (record 1)"}, {"calibration_factors.1.ext_cal_fact", e_tid_float, NULL, 4, "1", "External Calibration Scaling Factor (mode/swath/polarization dependent) (record 1)"}, {"calibration_factors.2.proc_scaling_fact", e_tid_float, NULL, 4, "1", "Processor scaling factor (factor units are linear when using Range/Doppler algorithm, dB when Specan is used) (record 2)"}, {"calibration_factors.2.ext_cal_fact", e_tid_float, NULL, 4, "1", "External Calibration Scaling Factor (mode/swath/polarization dependent) (record 2)"}, {"noise_estimation.noise_power_corr", e_tid_float, NULL, 4, "5", "Noise power correction factors"}, {"noise_estimation.num_noise_lines", e_tid_uint, NULL, 4, "5", "Number of noise lines used to calculate factors"}, {"spare_9", e_tid_spare, NULL, 64, "1", "Spare"}, {"spare_10", e_tid_spare, NULL, 12, "1", "Spare"}, {"output_statistics.1.out_mean", e_tid_float, NULL, 4, "1", "Output data mean. Magnitude for detected products, real sample mean for SLC products (record 1)"}, {"output_statistics.1.out_imag_mean", e_tid_float, NULL, 4, "1", "Output imaginary data mean. Used for SLC products only (set to zero otherwise) (record 1)"}, {"output_statistics.1.out_std_dev", e_tid_float, NULL, 4, "1", "Output data standard deviation. Magnitude std. dev. for detected products, real sample std. dev. for SLC products (record 1)"}, {"output_statistics.1.out_imag_std_dev", e_tid_float, NULL, 4, "1", "Output imaginary data standard deviation. Used for SLC products only (set to zero otherwise) (record 1)"}, {"output_statistics.2.out_mean", e_tid_float, NULL, 4, "1", "Output data mean. Magnitude for detected products, real sample mean for SLC products (record 2)"}, {"output_statistics.2.out_imag_mean", e_tid_float, NULL, 4, "1", "Output imaginary data mean. Used for SLC products only (set to zero otherwise) (record 2)"}, {"output_statistics.2.out_std_dev", e_tid_float, NULL, 4, "1", "Output data standard deviation. Magnitude std. dev. for detected products, real sample std. dev. for SLC products (record 2)"}, {"output_statistics.2.out_imag_std_dev", e_tid_float, NULL, 4, "1", "Output imaginary data standard deviation. Used for SLC products only (set to zero otherwise) (record 2)"}, {"spare_11", e_tid_spare, NULL, 52, "1", "Spare"}, {"echo_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples. FBAQ, S&MØ, NONE"}, {"echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples. 8/4, 8/3, 8/2, or 8/8"}, {"init_cal_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples. FBAQ, S&MØ, NONE"}, {"init_cal_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples. 8/4, 8/3, 8/2, or 8/8"}, {"per_cal_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples. FBAQ, S&MØ, NONE"}, {"per_cal_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples. 8/4, 8/3, 8/2, or 8/8"}, {"noise_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples. FBAQ, S&MØ, NONE"}, {"noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples. 8/4, 8/3, 8/2, or 8/8"}, {"spare_12", e_tid_spare, NULL, 64, "1", "Spare"}, {"beam_merge_sl_range", e_tid_uint, NULL, 4, "4", "Number of slant range samples in beam merging, one value per mergae rregion (1-2, 2-3, 3-4, 4-5)"}, {"beam_merge_alg_param", e_tid_float, NULL, 4, "4", "Beam merge algorithm parameter used for beam merging, one value per merge region (1-2, 2-3, 3-4. 4-5)"}, {"lines_per_burst", e_tid_uint, "lines", 4, "5", "Number of lines per burst for this image. 5 values for beams SS1 to SS5 in WS and GM modes. Two values for AP mode, all others set to zero."}, {"spare_13", e_tid_spare, NULL, 28, "1", "Spare"}, {"orbit_state_vectors.1.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 1)"}, {"orbit_state_vectors.1.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.2.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 2)"}, {"orbit_state_vectors.2.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.3.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 3)"}, {"orbit_state_vectors.3.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.4.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 4)"}, {"orbit_state_vectors.4.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.5.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 5)"}, {"orbit_state_vectors.5.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 5)"}, {"spare_14", e_tid_spare, NULL, 64, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Map_GADS_asar_rec_data[] = { {"map_descriptor", e_tid_string, "ascii", 32, "1", "Map projection descriptorone of:UNIVERSAL_TRANSVERSE_MERCATORØØØUNIVERSAL_POLAR_STEREOGRAPHICØØØLAMBERT_CONFORMAL_CONICØØØØØØØØØTRANSVERSE_MERCATORØØØØØØØØØØØØØMERCATORØØØØØØØØØØØØØØØØØØØØØØØØPOLAR_STEREOGRAPHICØØØØØØØØØØØØØ"}, {"samples", e_tid_uint, NULL, 4, "1", "Number of samples per line"}, {"lines", e_tid_uint, NULL, 4, "1", "Number of lines"}, {"sample_spacing", e_tid_float, "m", 4, "1", "Nominal inter-sample distance"}, {"line_spacing", e_tid_float, "m", 4, "1", "Nominal inter-line distance"}, {"orientation", e_tid_float, "deg", 4, "1", "Output scene centre orientation"}, {"spare_1", e_tid_spare, NULL, 40, "1", "Spare"}, {"heading", e_tid_float, "deg", 4, "1", "Platform heading, degrees"}, {"ellipsoid_name", e_tid_string, "ascii", 32, "1", "Reference ellipsoid name"}, {"semi_major", e_tid_float, "m", 4, "1", "Ellipsoid semi-major axis, metres"}, {"semi_minor", e_tid_float, "m", 4, "1", "Ellipsoid semi-minor axis, metres"}, {"shift_dx", e_tid_float, "m", 4, "1", "Datum shift parameter referenced to Greenwich: dx (metres)"}, {"shift_dy", e_tid_float, "m", 4, "1", "Datum shift parameter perpendicular to Greenwich: dy (metres)"}, {"shift_dz", e_tid_float, "m", 4, "1", "Datum shift parameter direction of the rotation axis: dz (metres)"}, {"avg_height", e_tid_float, NULL, 4, "1", "average scene height above ellipsoid used for geocoding"}, {"spare_2", e_tid_spare, NULL, 12, "1", "Spare"}, {"projection_description", e_tid_string, "ascii", 32, "1", "Map projection alphanumeric description"}, {"utm_descriptor", e_tid_string, "ascii", 32, "1", "UTM descriptorUNIVERSAL_TRANSVERSE_MERCATORØØØ"}, {"utm_zone", e_tid_string, "ascii", 4, "1", "UTM zone signature"}, {"utm_origin_easting", e_tid_float, "m", 4, "1", "Map origin, false easting"}, {"utm_origin_northing", e_tid_float, "m", 4, "1", "Map origin, false northing"}, {"utm_center_long", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre longitude, deg"}, {"utm_center_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre latitude, deg"}, {"utm_para1", e_tid_float, "deg", 4, "1", "1st standard parallel, deg"}, {"utm_para2", e_tid_float, "deg", 4, "1", "2nd standard parallel, deg"}, {"utm_scale", e_tid_float, NULL, 4, "1", "Scale factor"}, {"ups_descriptor", e_tid_string, "ascii", 32, "1", "UPS descriptor"}, {"ups_center_long", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre longitude, deg"}, {"ups_center_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre latitude, deg"}, {"ups_scale", e_tid_float, NULL, 4, "1", "Scale factor"}, {"nsp_descriptor", e_tid_string, "ascii", 32, "1", "NSP descriptor"}, {"origin_easting", e_tid_float, "m", 4, "1", "Map origin, false easting"}, {"origin_northing", e_tid_float, "m", 4, "1", "Map origin, false northing"}, {"center_long", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre longitude, deg"}, {"center_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Projection centre latitude, deg"}, {"standard_parallel_parameters.para1", e_tid_float, "deg", 4, "1", "Standard parallel1, deg"}, {"standard_parallel_parameters.para2", e_tid_float, "deg", 4, "1", "Standard parallel2, deg"}, {"standard_parallel_parameters.para3", e_tid_float, "deg", 4, "1", "Standard parallel3, deg"}, {"standard_parallel_parameters.para4", e_tid_float, "deg", 4, "1", "Standard parallel4, deg"}, {"central_meridian_parameters.central_m1", e_tid_float, "deg", 4, "1", "Central meridian1, deg"}, {"central_meridian_parameters.central_m2", e_tid_float, "deg", 4, "1", "Central meridian2, deg"}, {"central_meridian_parameters.central_m3", e_tid_float, "deg", 4, "1", "Central meridian3, deg"}, {"projection_parameters.spare_3", e_tid_spare, NULL, 4, "1", "Spare"}, {"projection_parameters.spare_4", e_tid_spare, NULL, 4, "1", "Spare"}, {"projection_parameters.spare_5", e_tid_spare, NULL, 4, "1", "Spare"}, {"projection_parameters.spare_6", e_tid_spare, NULL, 4, "1", "Spare"}, {"position_northings_eastings.tl_northing", e_tid_float, "m", 4, "1", "Top left corner northing, meters;"}, {"position_northings_eastings.tl_easting", e_tid_float, "m", 4, "1", "Top left corner easting, meters;"}, {"position_northings_eastings.tr_northing", e_tid_float, "m", 4, "1", "Top right corner northing, meters;"}, {"position_northings_eastings.tr_easting", e_tid_float, "m", 4, "1", "Top right corner easting, meters;"}, {"position_northings_eastings.br_northing", e_tid_float, "m", 4, "1", "Bottom right corner northing, meters;"}, {"position_northings_eastings.br_easting", e_tid_float, "m", 4, "1", "Bottom right corner easting, meters;"}, {"position_northings_eastings.bl_northing", e_tid_float, "m", 4, "1", "Bottom left corner northing, meters;"}, {"position_northings_eastings.bl_easting", e_tid_float, "m", 4, "1", "Bottom left corner easting, meters;"}, {"position_lat_long.tl_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Top left corner latitude"}, {"position_lat_long.tl_long", e_tid_int, "(1e-6) degrees", 4, "1", "Top left corner longitude"}, {"position_lat_long.tr_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Top right corner latitude"}, {"position_lat_long.tr_long", e_tid_int, "(1e-6) degrees", 4, "1", "Top right corner longitude"}, {"position_lat_long.br_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Bottom right corner latitude"}, {"position_lat_long.br_long", e_tid_int, "(1e-6) degrees", 4, "1", "Bottom right corner longitude"}, {"position_lat_long.bl_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Bottom left corner latitude"}, {"position_lat_long.bl_long", e_tid_int, "(1e-6) degrees", 4, "1", "Bottom left corner longitude"}, {"spare_7", e_tid_spare, NULL, 32, "1", "Spare"}, {"image_to_map_coefs", e_tid_float, NULL, 4, "8", "8 coefficients to convert a line(L) and sample (S) position to the map projection frame of reference, say (E,N)E = A11 + A12*L + A13 *S + A14 *L*SN = A21 + A22*L + A23 *S + A24 *L*S"}, {"map_to_image_coefs", e_tid_float, NULL, 4, "8", "8 coefficients to convert from the map projection (E,N) to line (L) and sample(S) position in the imageL = B11 + B12*E + B13 *N + B14 *E*NS = B21 + B22*E + B23 *N + B24 *E*N"}, {"spare_8", e_tid_spare, NULL, 35, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Ocean_Spectra_MDSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "First Zero Doppler Azimuth time of the wave cellTime of first range line in the SLC Imagette MDS described by this data set"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"range_spectral_res", e_tid_float, NULL, 4, "1", "Range spectral bin size of the cartesian cross spectrum"}, {"az_spectral_res", e_tid_float, NULL, 4, "1", "Azimuth spectral bin size of the cartesian cross spectrum"}, {"spare_1", e_tid_spare, NULL, 4, "1", "Spare"}, {"spec_tot_energy", e_tid_float, NULL, 4, "1", "Spectrum Total Energy"}, {"spec_max_energy", e_tid_float, NULL, 4, "1", "Spectrum Max Energy"}, {"spec_max_dir", e_tid_float, "deg", 4, "1", "Direction of Spectrum Max (deg)on higher resolution grid"}, {"spec_max_wl", e_tid_float, "m", 4, "1", "Wavelength of Spectrum Max (m)on higher resolution grid"}, {"az_image_shift_var", e_tid_float, "m^2", 4, "1", "Variance of the azimuth image shift caused by the orbital velocity"}, {"az_cutoff", e_tid_float, "m", 4, "1", "Azimuthal Clutter Cut-off length (m)"}, {"nonlinear_spectral_width", e_tid_float, "m", 4, "1", "Spectral width of the non-linear part of the cross spectra"}, {"image_intensity", e_tid_float, NULL, 4, "1", "Image intensity"}, {"image_variance", e_tid_float, NULL, 4, "1", "Normalised image variance"}, {"spare_2", e_tid_spare, NULL, 56, "1", "Spare"}, {"min_spectrum", e_tid_float, "m^4", 4, "1", "Min value of ocean wave spectrum"}, {"max_spectrum", e_tid_float, "m^4", 4, "1", "Max value of ocean wave spectrum"}, {"spare_3", e_tid_spare, NULL, 8, "1", "Spare"}, {"wind_speed", e_tid_float, "m/s", 4, "1", "Forcast Wind speed (if provided)"}, {"wind_direction", e_tid_float, "deg", 4, "1", "Forcast Wind direction (if provided)"}, {"SAR_wave_height", e_tid_float, "m", 4, "1", "SAR swell wave height"}, {"SAR_az_shift_var", e_tid_float, "m^2", 4, "1", "Variance of the azimuth shift computed from the SAR swell wave spectra"}, {"backscatter", e_tid_float, "dB", 4, "1", "Backscattering coefficient"}, {"confidence", e_tid_int, NULL, 4, "1", "Confidence measure of the swell inversion"}, {"signal_to_noise", e_tid_float, NULL, 4, "1", "Average signal-to-noise ratio"}, {"radar_vel_corr", e_tid_float, "m/s", 4, "1", "Radar velocity off-set correction"}, {"cmod_cal_const", e_tid_float, NULL, 4, "1", "Calibration constant - CMOD"}, {"spare_4", e_tid_spare, NULL, 28, "1", "Spare"}, {"ocean_spectra", e_tid_uchar, NULL, 1, "!REF_TBD!", "Ocean Wave Swell spectra polar grid. Number of bins in wavelength and direction defined in SPH (nominally 24 by 36). Arranged as 24 wavelength cells from shortest to longest wavelength, for zero degrees, then 10 degrees, up to 350 degrees."} }; static const struct RecordDescriptor ASAR_Spectra_MDSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "First Zero Doppler Azimuth time of the wave cellTime of first range line in the SLC Imagette MDS described by this data set"}, {"quality_flag", e_tid_uchar, "flag", 1, "1", "Quality Indicator (-1 for blank MDSR, 0 otherwise)"}, {"range_spectral_res", e_tid_float, NULL, 4, "1", "Range spectral resolution of the cartesian cross spectrum"}, {"az_spectral_res", e_tid_float, NULL, 4, "1", "Azimuth spectral resolution of the cartesian cross spectrum"}, {"az_resample_factor", e_tid_float, NULL, 4, "1", "Azimuth re-sampling factor in look extraction(Swath specific)"}, {"spec_tot_energy", e_tid_float, NULL, 4, "1", "Spectrum Total Energy"}, {"spec_max_energy", e_tid_float, NULL, 4, "1", "Spectrum Max Energy"}, {"spec_max_dir", e_tid_float, "deg", 4, "1", "Direction of Spectrum Max (deg)on higher resolution grid"}, {"spec_max_wl", e_tid_float, "m", 4, "1", "Wavelength of Spectrum Max (m)on higher resolution grid"}, {"clutter_noise", e_tid_float, NULL, 4, "1", "Clutter Noise"}, {"az_cutoff", e_tid_float, "m", 4, "1", "Azimuthal Clutter Cut-off length (m)"}, {"num_iterations", e_tid_float, NULL, 4, "1", "Number of iterations to compute Azimuthal Clutter Cut-off"}, {"range_offset", e_tid_float, "m", 4, "1", "Range offset of peak of cross covariance function (m)"}, {"ax_offset", e_tid_float, "m", 4, "1", "Azimuth offset of peak of cross covariance function (m)"}, {"cc_range_res", e_tid_float, "rad/m", 4, "1", "Range resolution of cross co-variance spectrum (rad/m)"}, {"cc_azimuth_res", e_tid_float, "rad/m", 4, "1", "Azimuth resolution of cross co-variance spectrum (rad/m)"}, {"sublook_means", e_tid_float, NULL, 4, "2", "1st and last Sub-look Image Means"}, {"sublook_variance", e_tid_float, NULL, 4, "2", "1st and last Sub-look Image Variance"}, {"sublook_skewness", e_tid_float, NULL, 4, "2", "1st and last Sub-look Image Skewness"}, {"sublook_kurtosis", e_tid_float, NULL, 4, "2", "1st and last Sub-look Image Kurtosis"}, {"range_sublook_detrend_coeff", e_tid_float, NULL, 4, "2", "1st and last Sub-look de-trend coefficient in range"}, {"az_sublook_detrend_coeff", e_tid_float, NULL, 4, "2", "1st and last Sub-look de-trend coefficient in azimuth"}, {"min_imag", e_tid_float, NULL, 4, "1", "Min value of Imaginary part of cross spectrum"}, {"max_imag", e_tid_float, NULL, 4, "1", "Max value of Imaginary part of cross spectrum"}, {"min_real", e_tid_float, NULL, 4, "1", "Min value of Real part of cross spectrum"}, {"max_real", e_tid_float, NULL, 4, "1", "Max value of Real part of cross spectrum"}, {"spare_1", e_tid_spare, NULL, 64, "1", "Spare"}, {"real_spectra", e_tid_uchar, NULL, 1, ".SPH.num_wl_bins,.SPH.num_dir_bins", "Real part of cross spectra polar gridNumber of bins in wavelength and direction defined in SPH (nominally 24 by 36). However, only 0 to 180 degree of the spectrum need be supplied (24 by 18). Arranged as: 24 wavelength values for 0-10 deg. sector, 24 valu"}, {"imag_spectra", e_tid_uchar, NULL, 1, ".SPH.num_wl_bins,.SPH.num_dir_bins", "Complex part of cross spectra polar gridNumber of bins in wavelength and direction defined in SPH (nominally 24 by 36). However, only 0 to 180 degree of the spectrum need be supplied (24 by 18). Arranged as: 24 wavelength values for 0-10 deg. sector, 24 v"} }; static const struct RecordDescriptor ASAR_SQ1_Image_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero doppler time at which SQ information applies"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if all MDSRs corresponding to this ADSR are blank, set to zero otherwise).Note: in practice for ASAR products, this flag will always be zero since this ADSR is updated once per slice or scene. Therefore, if there are no MDSRs, this ADSR is not produced at all."}, {"input_mean_flag", e_tid_uchar, "flag", 1, "1", "Input data mean outside nominal range flag. 0 = mean of I and Q input values are both within specified range from expected mean. For expected mean of x, the measured mean must fall between x-threshold to x+threshold. 1 = otherwise"}, {"input_std_dev_flag", e_tid_uchar, "flag", 1, "1", "Input data standard deviation outside nominal range flag. 0 = standard deviation values of I and Q input values are both within specified range of expected standard deviation. For expected std. dev. x, the measured std. dev. must fall between x-threshold to x+threshold. 1 = otherwise"}, {"input_gaps_flag", e_tid_uchar, "flag", 1, "1", "Significant gaps in the input data flag. An input data gap is defined as a contiguous block of N missing lines (the value of N is predefined for each product). 0 = number of input gaps <= threshold value. 1 = number of input data gaps > threshold value"}, {"input_missing_lines_flag", e_tid_uchar, "flag", 1, "1", "Missing lines significant flag. 0 = percentage of missing lines <= threshold value 1 = percentage of missing lines > threshold value. The number of missing lines is the number of lines missing from the input data excluding data gaps."}, {"dop_cen_flag", e_tid_uchar, "flag", 1, "1", "Doppler Centroid Uncertain flag. 0 = confidence measure >= specified value. 1 = confidence measure < specified value (note: if more than one Doppler centroid estimation is performed in a slice the flag is set if any confidence measure is less than the threshold)."}, {"dop_amb_flag", e_tid_uchar, "flag", 1, "1", "Doppler ambiguity estimate uncertain flag. 0 = confidence measure >= specified value. 1 = confidence measure < specified value"}, {"output_mean_flag", e_tid_uchar, "flag", 1, "1", "Output data mean outside nominal range flag. 0 = mean of I and Q output values for SLC image or mean of detected pixels for a detected product, are both within specified range from expected mean. For expected mean of x, the measured mean must fall between x-threshold to x+threshold. 1 = otherwise."}, {"output_std_dev_flag", e_tid_uchar, "flag", 1, "1", "Output data standard deviation outside nominal range flag. 0 = std. dev. of I and Q output values for SLC image or std. dev. of detected pixels for a detected product, are both within specified range from expected std. dev. For expected std. dev. of x, the measured std. dev must fall between x-threshold and x+threshold. 1 = otherwise."}, {"chirp_flag", e_tid_uchar, "flag", 1, "1", "Chirp extraction failed or is of low quality flag. 0 = able to extract all chirps or chirp extraction not requested (nominal chirp used) AND all quality measures were acceptable. 1 = unable to extract a chirp during processing and chirp extraction was requequested or the quality is below the acceptable levels."}, {"missing_data_sets_flag", e_tid_uchar, "flag", 1, "1", "Data sets missing flag. 0 = all data sets which are supposed to be in the product are present. 1 = any data sets (including ADSs) are missing from the product which are supposed to be included under normal circumstances. Which data sets are missing can be determined by an examination of the DSDs in the SPH."}, {"invalid_downlink_flag", e_tid_uchar, "flag", 1, "1", "Invalid downlink parameters flag. 0 = all parameters read from the downlinked data were valid. 1 = displayed if any downlink parameter is out of range and therefore a default value has been used during processing."}, {"spare_1", e_tid_spare, NULL, 7, "1", "Spare"}, {"thresh_chirp_broadening", e_tid_float, "%", 4, "1", "Threshold for setting the chirp quality flag - Maximum percentage broadening permitted in cross-correlation pulse width compared to theoretical width."}, {"thresh_chirp_sidelobe", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - First sidelobe of the chirp cross correlation function"}, {"thresh_chirp_islr", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - ISLR of the chirp cross correlation function"}, {"thresh_input_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of input data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T."}, {"exp_input_mean", e_tid_float, NULL, 4, "1", "Expected mean input value for this product for both I and Q."}, {"thresh_input_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of input data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D."}, {"exp_input_std_dev", e_tid_float, NULL, 4, "1", "Expected input std. dev. for this product for both I and Q."}, {"thresh_dop_cen", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid quality flag - Threshold for Doppler Centroid confidence"}, {"thresh_dop_amb", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid ambiguity quality flag - Threshold for setting the Doppler Centroid ambiguity confidence flag"}, {"thresh_output_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of output data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T."}, {"exp_output_mean", e_tid_float, NULL, 4, "1", "Expected mean output value for this product. For an SLC product this is the expected mean of both the I and Q values."}, {"thresh_output_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of output data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D."}, {"exp_output_std_dev", e_tid_float, NULL, 4, "1", "Expected output std. dev. for this product. For an SLC product this is the expected output std. dev. for both I and Q values."}, {"thresh_input_missing_lines", e_tid_float, "%", 4, "1", "Threshold for setting the missing lines quality flag - maximum percentage of missing lines to total lines."}, {"thresh_input_gaps", e_tid_float, NULL, 4, "1", "Threshold for setting the missing gaps quality flag - maximum number of missing gaps allowed."}, {"lines_per_gaps", e_tid_uint, "lines", 4, "1", "Number of missing lines which constitute a gap"}, {"spare_2", e_tid_spare, NULL, 15, "1", "Spare"}, {"input_mean", e_tid_float, NULL, 4, "2", "Input data mean (i channel, q channel)"}, {"input_std_dev", e_tid_float, NULL, 4, "2", "Input data standard deviation (i channel, q channel)"}, {"num_gaps", e_tid_float, NULL, 4, "1", "Number of gaps (composed of a predetermined number of consecutive missing lines)"}, {"num_missing_lines", e_tid_float, NULL, 4, "1", "Number of missing lines (excluding gaps)"}, {"output_mean", e_tid_float, NULL, 4, "2", "Output data mean (detected samples, followed by zero, or i channel followed by q channel for SLC)"}, {"output_std_dev", e_tid_float, NULL, 4, "2", "Output data standard deviation (detected samples followed by zero, or i channel followed by q channel for SLC)"}, {"tot_errors", e_tid_uint, NULL, 4, "1", "Total number of errors detected in ISP headers"}, {"Spare_3", e_tid_spare, NULL, 16, "1", "Spare"} }; static const struct RecordDescriptor ASAR_SRGR_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time in azimuth from which parameters apply"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"slant_range_time", e_tid_float, "ns", 4, "1", "2 way slant range time to first range sample"}, {"ground_range_origin", e_tid_float, "m", 4, "1", "Ground range origin of the polynomial (GR0) measured for the first pixel of the line."}, {"srgr_coeff", e_tid_float, "m, m-1, m-2, m-3, m-4", 4, "5", "The coefficients S0, S1, S2, S3, and S4 of the ground range to slant range conversion polynomial. Slant range = S0 + S1(GR-GR0) + S2 (GR-GR0)2 + S3(GR-GR0)3 + S4(GR-GR0)4"}, {"spare_1", e_tid_spare, NULL, 14, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Wave_Geolocation_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time of first line of the first line of the imagette"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (set to 1 if unable to compute the cross spectra for a given SLC imagette (i.e. no Cross Spectra MDSR corresponding to this ADSR), set to 0 otherwise)"}, {"center_lat", e_tid_int, "(1e-6) degrees", 4, "1", "Geodetic latitude of center point (positive north) This is the center point of the wave cell. It is calculated after the cross spectra processing, and thus may differ from the center sample latitude of the SLC imagette if slant range to ground range conve"}, {"center_long", e_tid_int, "(1e-6) degrees", 4, "1", "Geodetic longitude of center point (positive east)This is the center point of the wave cell. It is calculated after the cross spectra processing, and thus may differ from the center sample latitude of the SLC imagette if slant range to ground range conver"}, {"spare_1", e_tid_spare, NULL, 4, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Wave_Param_ADSR_asar_rec_data[] = { {"first_zero_doppler_time", e_tid_time, "MJD", 12, "1", "First Zero Doppler Azimuth time of MDS which this data set describesTime of first range line in the MDS described by this data set"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag (always set to zero for this ADSR)"}, {"last_zero_doppler_time", e_tid_time, "MJD", 12, "1", "Last Zero Doppler Azimuth time of MDS which this data set describesTime of last range line in the MDS described by this data set"}, {"work_order_id", e_tid_string, "ascii", 12, "1", "Work Order ID (left-justified)"}, {"time_diff", e_tid_float, "s", 4, "1", "Time difference between sensing time of first input line and zero Doppler time of first output image line (tdelta). (TBC)May be used during child product extraction from a stripline product (TBC). Left blank (set to zero) for non-stripline products"}, {"swath_id", e_tid_string, "ascii", 3, "1", "Swath number IS1, IS2, IS3, IS4, IS5, IS6, or IS7 for IM, WV and AP modes.Set to WSØ for WS and GM modes"}, {"range_spacing", e_tid_float, "m", 4, "1", "Range sample spacing"}, {"azimuth_spacing", e_tid_float, "m", 4, "1", "Azimuth sample spacing at image center"}, {"line_time_interval", e_tid_float, "s", 4, "1", "Azimuth sample spacing in time (Line Time Interval)"}, {"num_output_lines", e_tid_uint, "lines", 4, "1", "Number of output range lines in the image described by this ADS"}, {"num_samples_per_line", e_tid_uint, "samples", 4, "1", "Number of samples per output range line (includes zero filled samples)"}, {"data_type", e_tid_string, "ascii", 5, "1", "Output data typeSWORD, UWORD, or UBYTE"}, {"spare_1", e_tid_spare, NULL, 51, "1", "Spare"}, {"data_analysis_flag", e_tid_uchar, "flag", 1, "1", "Raw Data Analysis used for Raw Data Correction 0 = correction done using default parameters1 = correction done using raw data analysis results"}, {"ant_elev_corr_flag", e_tid_uchar, "flag", 1, "1", "Antenna Elevation Pattern Correction Applied 0 = no correction applied1 = correction applied"}, {"chirp_extract_flag", e_tid_uchar, "flag", 1, "1", "reconstructed Chirp used 0 = nominal chirp replica used1 = reconstructed chirp used"}, {"srgr_flag", e_tid_uchar, "flag", 1, "1", "Slant Range to Ground Range Conversion Applied0 = no conversion applied1 = conversion applied"}, {"dop_cen_flag", e_tid_uchar, "flag", 1, "1", "Doppler Centroid Estimation Performed0 = no estimation done1 = estimation done"}, {"dop_amb_flag", e_tid_uchar, "flag", 1, "1", "Doppler Ambiguity Estimation Performed0 = no estimate done1 = estimate done"}, {"range_spread_comp_flag", e_tid_uchar, "flag", 1, "1", "Range-spreading loss compensation Applied0 = no compensation applied1 = compensation applied"}, {"detected_flag", e_tid_uchar, "flag", 1, "1", "Detection Applied0 = output product is complex1 = output product was detected"}, {"look_sum_flag", e_tid_uchar, "flag", 1, "1", "Look Summation Performed0 = product is single look1 = product is multi-looked"}, {"rms_equal_flag", e_tid_uchar, "flag", 1, "1", "RMS Equalization performed 0= rms equalization not performed during FBAQ decoding, 1 = rms equalization performed during FBAQ decoding"}, {"ant_scal_flag", e_tid_uchar, "flag", 1, "1", "Antenna Elevationscaling Factor applied 0= no scaling factor applied, 1 = scaling factor applied"}, {"spare_2", e_tid_spare, NULL, 10, "1", "Spare"}, {"raw_data_analysis.1.num_gaps", e_tid_uint, "gaps", 4, "1", "Number of input data gaps (a gap is defined as a predetermined number of range lines) (record 1)"}, {"raw_data_analysis.1.num_missing_lines", e_tid_uint, "lines", 4, "1", "Number of missing lines, excluding data gaps (record 1)"}, {"raw_data_analysis.1.range_samp_skip", e_tid_uint, "samples", 4, "1", "Range sample skipping factor for raw data analysis (record 1)"}, {"raw_data_analysis.1.range_lines_skip", e_tid_uint, "lines", 4, "1", "Range lines skipping factor for raw data analysis (record 1)"}, {"raw_data_analysis.1.calc_i_bias", e_tid_float, NULL, 4, "1", "Calculated I channel bias (record 1)"}, {"raw_data_analysis.1.calc_q_bias", e_tid_float, NULL, 4, "1", "Calculated Q channel bias (record 1)"}, {"raw_data_analysis.1.calc_i_std_dev", e_tid_float, NULL, 4, "1", "Calculated I channel standard deviation (record 1)"}, {"raw_data_analysis.1.calc_q_std_dev", e_tid_float, NULL, 4, "1", "Calculated Q channel standard deviation (record 1)"}, {"raw_data_analysis.1.calc_gain", e_tid_float, NULL, 4, "1", "Calculated I/Q gain imbalance (record 1)"}, {"raw_data_analysis.1.calc_quad", e_tid_float, NULL, 4, "1", "Calculated I/Q quadrature departure (record 1)"}, {"raw_data_analysis.1.i_bias_max", e_tid_float, NULL, 4, "1", "I bias upper bound (record 1)"}, {"raw_data_analysis.1.i_bias_min", e_tid_float, NULL, 4, "1", "I bias lower bound (record 1)"}, {"raw_data_analysis.1.q_bias_max", e_tid_float, NULL, 4, "1", "Q bias upper bound (record 1)"}, {"raw_data_analysis.1.q_bias_min", e_tid_float, NULL, 4, "1", "Q bias lower bound (record 1)"}, {"raw_data_analysis.1.gain_min", e_tid_float, NULL, 4, "1", "I/Q gain lower bound (record 1)"}, {"raw_data_analysis.1.gain_max", e_tid_float, NULL, 4, "1", "I/Q gain upper bound (record 1)"}, {"raw_data_analysis.1.quad_min", e_tid_float, NULL, 4, "1", "I/Q quadrature departure lower bound (record 1)"}, {"raw_data_analysis.1.quad_max", e_tid_float, NULL, 4, "1", "I/Q quadrature departure upper bound (record 1)"}, {"raw_data_analysis.1.i_bias_flag", e_tid_uchar, "flag", 1, "1", "I bias significance0 = I bias falls within acceptable range1 = I bias falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.q_bias_flag", e_tid_uchar, "flag", 1, "1", "Q bias Significance0 = Q bias falls within acceptable range1 = Q bias falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.gain_flag", e_tid_uchar, "flag", 1, "1", "I/Q Gain Significance0 = Gain falls within acceptable range1 = Gain falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.quad_flag", e_tid_uchar, "flag", 1, "1", "I/Q Quadrature Departure Significance0 = Quadrature departure falls within acceptable range1 =Quadrature departure falls outside acceptable range (record 1)"}, {"raw_data_analysis.1.used_i_bias", e_tid_float, NULL, 4, "1", "I channel bias used for correction (may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_q_bias", e_tid_float, NULL, 4, "1", "Q channel bias used for correction(may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_gain", e_tid_float, NULL, 4, "1", "I/Q gain imbalance used for correction(may be different from measured value) (record 1)"}, {"raw_data_analysis.1.used_quad", e_tid_float, NULL, 4, "1", "I/Q quadrature departure used for correction(may be different from measured value) (record 1)"}, {"raw_data_analysis.2.num_gaps", e_tid_uint, "gaps", 4, "1", "Number of input data gaps (a gap is defined as a predetermined number of range lines) (record 2)"}, {"raw_data_analysis.2.num_missing_lines", e_tid_uint, "lines", 4, "1", "Number of missing lines, excluding data gaps (record 2)"}, {"raw_data_analysis.2.range_samp_skip", e_tid_uint, "samples", 4, "1", "Range sample skipping factor for raw data analysis (record 2)"}, {"raw_data_analysis.2.range_lines_skip", e_tid_uint, "lines", 4, "1", "Range lines skipping factor for raw data analysis (record 2)"}, {"raw_data_analysis.2.calc_i_bias", e_tid_float, NULL, 4, "1", "Calculated I channel bias (record 2)"}, {"raw_data_analysis.2.calc_q_bias", e_tid_float, NULL, 4, "1", "Calculated Q channel bias (record 2)"}, {"raw_data_analysis.2.calc_i_std_dev", e_tid_float, NULL, 4, "1", "Calculated I channel standard deviation (record 2)"}, {"raw_data_analysis.2.calc_q_std_dev", e_tid_float, NULL, 4, "1", "Calculated Q channel standard deviation (record 2)"}, {"raw_data_analysis.2.calc_gain", e_tid_float, NULL, 4, "1", "Calculated I/Q gain imbalance (record 2)"}, {"raw_data_analysis.2.calc_quad", e_tid_float, NULL, 4, "1", "Calculated I/Q quadrature departure (record 2)"}, {"raw_data_analysis.2.i_bias_max", e_tid_float, NULL, 4, "1", "I bias upper bound (record 2)"}, {"raw_data_analysis.2.i_bias_min", e_tid_float, NULL, 4, "1", "I bias lower bound (record 2)"}, {"raw_data_analysis.2.q_bias_max", e_tid_float, NULL, 4, "1", "Q bias upper bound (record 2)"}, {"raw_data_analysis.2.q_bias_min", e_tid_float, NULL, 4, "1", "Q bias lower bound (record 2)"}, {"raw_data_analysis.2.gain_min", e_tid_float, NULL, 4, "1", "I/Q gain lower bound (record 2)"}, {"raw_data_analysis.2.gain_max", e_tid_float, NULL, 4, "1", "I/Q gain upper bound (record 2)"}, {"raw_data_analysis.2.quad_min", e_tid_float, NULL, 4, "1", "I/Q quadrature departure lower bound (record 2)"}, {"raw_data_analysis.2.quad_max", e_tid_float, NULL, 4, "1", "I/Q quadrature departure upper bound (record 2)"}, {"raw_data_analysis.2.i_bias_flag", e_tid_uchar, "flag", 1, "1", "I bias significance0 = I bias falls within acceptable range1 = I bias falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.q_bias_flag", e_tid_uchar, "flag", 1, "1", "Q bias Significance0 = Q bias falls within acceptable range1 = Q bias falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.gain_flag", e_tid_uchar, "flag", 1, "1", "I/Q Gain Significance0 = Gain falls within acceptable range1 = Gain falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.quad_flag", e_tid_uchar, "flag", 1, "1", "I/Q Quadrature Departure Significance0 = Quadrature departure falls within acceptable range1 =Quadrature departure falls outside acceptable range (record 2)"}, {"raw_data_analysis.2.used_i_bias", e_tid_float, NULL, 4, "1", "I channel bias used for correction (may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_q_bias", e_tid_float, NULL, 4, "1", "Q channel bias used for correction(may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_gain", e_tid_float, NULL, 4, "1", "I/Q gain imbalance used for correction(may be different from measured value) (record 2)"}, {"raw_data_analysis.2.used_quad", e_tid_float, NULL, 4, "1", "I/Q quadrature departure used for correction(may be different from measured value) (record 2)"}, {"spare_3", e_tid_spare, NULL, 32, "1", "Spare"}, {"start_time.1.first_obt", e_tid_uint, NULL, 4, "2", "On-board binary time of first input line processedLSB accurate to 15.26 ms. (Contained in two long integers) (record 1)"}, {"start_time.1.first_mjd", e_tid_time, "MJD", 12, "1", "Sensing time (MJD format) of first input line processedconverted from satellite binary time (record 1)"}, {"start_time.2.first_obt", e_tid_uint, NULL, 4, "2", "On-board binary time of first input line processedLSB accurate to 15.26 ms. (Contained in two long integers) (record 2)"}, {"start_time.2.first_mjd", e_tid_time, "MJD", 12, "1", "Sensing time (MJD format) of first input line processedconverted from satellite binary time (record 2)"}, {"parameter_codes.swst_code", e_tid_ushort, "code", 2, "5", "Sampling Window Start time code of first processed line"}, {"parameter_codes.last_swst_code", e_tid_ushort, "code", 2, "5", "Sampling Window Start time code of last processed line"}, {"parameter_codes.pri_code", e_tid_ushort, "code", 2, "5", "Pulse Repetition Interval code"}, {"parameter_codes.tx_pulse_len_code", e_tid_ushort, "code", 2, "5", "Tx pulse length"}, {"parameter_codes.tx_bw_code", e_tid_ushort, "code", 2, "5", "Tx pulse bandwidth"}, {"parameter_codes.echo_win_len_code", e_tid_ushort, "code", 2, "5", "Echo Window Length"}, {"parameter_codes.up_code", e_tid_ushort, "code", 2, "5", "Upconverter Level - Upconverter gain set on the instrument"}, {"parameter_codes.down_code", e_tid_ushort, "code", 2, "5", "Downconverter Level - Downconverter gain set on the instrument"}, {"parameter_codes.resamp_code", e_tid_ushort, "code", 2, "5", "Resampling factor for echo data"}, {"parameter_codes.beam_adj_code", e_tid_ushort, "code", 2, "5", "Beam adjustment delta"}, {"parameter_codes.beam_set_num_code", e_tid_ushort, "code", 2, "5", "Antenna Beam Set Number"}, {"parameter_codes.tx_monitor_code", e_tid_ushort, "code", 2, "5", "Auxiliary Tx Monitor Level"}, {"spare_4", e_tid_spare, NULL, 60, "1", "Spare"}, {"error_counters.num_err_swst", e_tid_uint, NULL, 4, "1", "Number of errors detected in Sampling Window start time field."}, {"error_counters.num_err_pri", e_tid_uint, NULL, 4, "1", "Number of errors detected in PRI code field"}, {"error_counters.num_err_tx_pulse_len", e_tid_uint, NULL, 4, "1", "Number of errors detected in Tx pulse length field"}, {"error_counters.num_err_tx_pulse_bw", e_tid_uint, NULL, 4, "1", "Number of errors detected in Tx pulse bandwidth field."}, {"error_counters.num_err_echo_win_len", e_tid_uint, NULL, 4, "1", "Number of errors detected in Echo Window Length field."}, {"error_counters.num_err_up", e_tid_uint, NULL, 4, "1", "Number of errors detected in Upconverter Level field."}, {"error_counters.num_err_down", e_tid_uint, NULL, 4, "1", "Number of errors detected in Downconverter Level field."}, {"error_counters.num_err_resamp", e_tid_uint, NULL, 4, "1", "Number of errors detected in Resampling factor for echo data field."}, {"error_counters.num_err_beam_adj", e_tid_uint, NULL, 4, "1", "Number of errors detected in Beam adjustment delta field."}, {"error_counters.num_err_beam_set_num", e_tid_uint, NULL, 4, "1", "Number of errors detected in Antenna Beam Set Number field."}, {"spare_5", e_tid_spare, NULL, 26, "1", "Spare"}, {"image_parameters.swst_value", e_tid_float, "s", 4, "5", "Sampling Window Start time of first processed line"}, {"image_parameters.last_swst_value", e_tid_float, "s", 4, "5", "Sampling Window Start time of last processed line"}, {"image_parameters.swst_changes", e_tid_uint, NULL, 4, "5", "Number of Sample Window Start Time changes within a beam"}, {"image_parameters.prf_value", e_tid_float, "Hz", 4, "5", "Pulse Repetition Frequency"}, {"image_parameters.tx_pulse_len_value", e_tid_float, "s", 4, "5", "Tx pulse length"}, {"image_parameters.tx_pulse_bw_value", e_tid_float, "Hz", 4, "5", "Tx pulse bandwidth"}, {"image_parameters.echo_win_len_value", e_tid_float, "s", 4, "5", "Echo Window Length"}, {"image_parameters.up_value", e_tid_float, "dB", 4, "5", "Upconverter Level - Upconverter gain set on the instrument"}, {"image_parameters.down_value", e_tid_float, "dB", 4, "5", "Downconverter Level - Downconverter gain set on the instrument"}, {"image_parameters.resamp_value", e_tid_float, NULL, 4, "5", "Resampling factor"}, {"image_parameters.beam_adj_value", e_tid_float, "deg.", 4, "5", "Beam adjustment delta"}, {"image_parameters.beam_set_value", e_tid_ushort, NULL, 2, "5", "Antenna Beam Set Number"}, {"image_parameters.tx_monitor_value", e_tid_float, NULL, 4, "5", "Auxiliary Tx Monitor Level"}, {"spare_6", e_tid_spare, NULL, 82, "1", "Spare"}, {"first_proc_range_samp", e_tid_uint, "samples", 4, "1", "First processed input range sample, first sample is 1"}, {"range_ref", e_tid_float, "m", 4, "1", "Range spreading loss reference range"}, {"range_samp_rate", e_tid_float, "Hz", 4, "1", "Range sampling rate"}, {"radar_freq", e_tid_float, "Hz", 4, "1", "Radar Frequency"}, {"num_looks_range", e_tid_ushort, "looks", 2, "1", "Number of range looks"}, {"filter_range", e_tid_string, "ascii", 7, "1", "Matched filter window type:HAMMING or KAISERØ or NONEØØØ"}, {"filter_coef_range", e_tid_float, NULL, 4, "1", "Window coefficient for range-matched filter"}, {"bandwidth.look_bw_range", e_tid_float, "Hz", 4, "5", "Range Look Bandwidth (null to null)"}, {"bandwidth.tot_bw_range", e_tid_float, "Hz", 4, "5", "Total processed range bandwidth (null to null)"}, {"nominal_chirp.1.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 1)"}, {"nominal_chirp.1.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 1)"}, {"nominal_chirp.2.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 2)"}, {"nominal_chirp.2.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 2)"}, {"nominal_chirp.3.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 3)"}, {"nominal_chirp.3.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 3)"}, {"nominal_chirp.4.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 4)"}, {"nominal_chirp.4.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 4)"}, {"nominal_chirp.5.nom_chirp_amp", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 nominal chirp amplitude coefficients (record 5)"}, {"nominal_chirp.5.nom_chirp_phs", e_tid_float, "cycles,Hz,Hz/s,Hz/s2", 4, "4", "4 nominal chirp phase coefficients (record 5)"}, {"spare_7", e_tid_spare, NULL, 60, "1", "Spare"}, {"num_lines_proc", e_tid_uint, "lines", 4, "1", "Number of input lines processed"}, {"num_look_az", e_tid_ushort, "looks", 2, "1", "Number of Azimuth Looks"}, {"look_bw_az", e_tid_float, "Hz", 4, "1", "Azimuth Look Bandwidth (null to null) -- this is the nominal value only for GM, WS, and AP."}, {"to_bw_az", e_tid_float, "Hz", 4, "1", "Processed Azimuth bandwidth (null to null) -- this field is used only for IM products and WV imagettes. Filled with zeros otherwise."}, {"filter_az", e_tid_string, "ascii", 7, "1", "Matched filter window type:HAMMING or KAISERØ or NONEØØØ"}, {"filter_coef_az", e_tid_float, NULL, 4, "1", "Window coefficient for azimuth-matched filter"}, {"az_fm_rate", e_tid_float, "Hz/sHz/s2Hz/s3", 4, "3", "3 co-efficients for Azimuth FM rate:Azimuth FM rate = C0 + C1(tSR-t0) + C2(tSR - t0)2tSR = 2 way slant range time"}, {"ax_fm_origin", e_tid_float, "ns", 4, "1", "2 way slant range time origin (t0) for Azimuth FM rate calculation"}, {"dop_amb_conf", e_tid_float, NULL, 4, "1", "Doppler Centroid Ambiguity Confidence MeasureValue between 0 and 1, 0 = poorest confidence, 1= highest confidence"}, {"spare_8", e_tid_spare, NULL, 68, "1", "Spare"}, {"calibration_factors.1.proc_scaling_fact", e_tid_float, NULL, 4, "1", "Processor scaling factor (record 1)"}, {"calibration_factors.1.ext_cal_fact", e_tid_float, NULL, 4, "1", "External Calibration Scaling Factor (mode/swath/polarization dependent) (record 1)"}, {"calibration_factors.2.proc_scaling_fact", e_tid_float, NULL, 4, "1", "Processor scaling factor (record 2)"}, {"calibration_factors.2.ext_cal_fact", e_tid_float, NULL, 4, "1", "External Calibration Scaling Factor (mode/swath/polarization dependent) (record 2)"}, {"noise_estimation.noise_power_corr", e_tid_float, NULL, 4, "5", "Noise power correction factors"}, {"noise_estimation.num_noise_lines", e_tid_uint, NULL, 4, "5", "Number of noise lines used to calculate factors"}, {"spare_9", e_tid_spare, NULL, 64, "1", "Spare"}, {"spare_10", e_tid_spare, NULL, 12, "1", "Spare"}, {"output_statistics.1.out_mean", e_tid_float, NULL, 4, "1", "Output data mean Magnitude for detected products, real sample mean for SLC products (record 1)"}, {"output_statistics.1.out_imag_mean", e_tid_float, NULL, 4, "1", "Output imaginary data mean Used for SLC products only (set to zero otherwise) (record 1)"}, {"output_statistics.1.out_std_dev", e_tid_float, NULL, 4, "1", "Output data standard deviation Magnitude std. dev. for detected products, real sample std. dev. for SLC products (record 1)"}, {"output_statistics.1.out_imag_std_dev", e_tid_float, NULL, 4, "1", "Output imaginary data standard deviation Used for SLC products only (set to zero otherwise) (record 1)"}, {"output_statistics.2.out_mean", e_tid_float, NULL, 4, "1", "Output data mean Magnitude for detected products, real sample mean for SLC products (record 2)"}, {"output_statistics.2.out_imag_mean", e_tid_float, NULL, 4, "1", "Output imaginary data mean Used for SLC products only (set to zero otherwise) (record 2)"}, {"output_statistics.2.out_std_dev", e_tid_float, NULL, 4, "1", "Output data standard deviation Magnitude std. dev. for detected products, real sample std. dev. for SLC products (record 2)"}, {"output_statistics.2.out_imag_std_dev", e_tid_float, NULL, 4, "1", "Output imaginary data standard deviation Used for SLC products only (set to zero otherwise) (record 2)"}, {"spare_11", e_tid_spare, NULL, 52, "1", "Spare"}, {"echo_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S&MØ, NONE"}, {"echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples8/4, 8/3, 8/2, or 8/8"}, {"init_cal_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S&MØ, NONE"}, {"init_cal_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, or 8/8"}, {"per_cal_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S&MØ, NONE"}, {"per_cal_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples8/4, 8/3, 8/2, or 8/8"}, {"noise_comp", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S&MØ, NONE"}, {"noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples8/4, 8/3, 8/2, or 8/8"}, {"spare_12", e_tid_spare, NULL, 64, "1", "Spare"}, {"beam_overlap", e_tid_uint, NULL, 4, "4", "Number of slant range samples in beam overlap(1-2, 2-3, 3-4, 4-5)"}, {"lines_per_burst", e_tid_uint, "lines", 4, "5", "Number of lines per burst for this image 5 values for beams SS1 to SS5 in WS and GM modes.One value for AP mode, all others set to zero."}, {"spare_13", e_tid_spare, NULL, 44, "1", "Spare"}, {"orbit_state_vectors.1.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 1)"}, {"orbit_state_vectors.1.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.1.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 1)"}, {"orbit_state_vectors.2.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 2)"}, {"orbit_state_vectors.2.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.2.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 2)"}, {"orbit_state_vectors.3.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 3)"}, {"orbit_state_vectors.3.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.3.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 3)"}, {"orbit_state_vectors.4.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 4)"}, {"orbit_state_vectors.4.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.4.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 4)"}, {"orbit_state_vectors.5.state_vect_time_1", e_tid_time, "MJD", 12, "1", "Time of state vector (record 5)"}, {"orbit_state_vectors.5.x_pos_1", e_tid_int, "10 -2m", 4, "1", "X position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.y_pos_1", e_tid_int, "10 -2m", 4, "1", "Y position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.z_pos_1", e_tid_int, "10 -2m", 4, "1", "Z position in Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.x_vel_1", e_tid_int, "10 -5m/s", 4, "1", "X velocity relative to Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.y_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Y velocity relative to Earth fixed reference frame (record 5)"}, {"orbit_state_vectors.5.z_vel_1", e_tid_int, "10 -5m/s", 4, "1", "Z velocity relative to Earth fixed reference frame (record 5)"}, {"spare_14", e_tid_spare, NULL, 64, "1", "Spare"}, {"slant_range_time", e_tid_float, "ns", 4, "1", "2-way slant range time origin (t0)"}, {"dop_coef", e_tid_float, "HzHz/sHz/s2Hz/s3Hz/s4", 4, "5", "Doppler centroid coefficients as a function of slant range time: D0, D1, D2, D3, and D4.where Doppler Centroid = D0 + D1(tSR-t0) + D2(tSR-t0)2 + D3(tSR-t0)3 + D4(tSR-t0)4"}, {"dop_conf", e_tid_float, NULL, 4, "1", "Doppler Centroid Confidence MeasureValue between 0 and 1, 0 = poorest confidence, 1= highest confidence"}, {"spare_15", e_tid_spare, NULL, 14, "1", "Spare"}, {"chirp_width", e_tid_float, "samples", 4, "1", "3-dB pulse width of chirp replica cross-correlation function between extract chirp and nominal chirp"}, {"chirp_sidelobe", e_tid_float, "dB", 4, "1", "First side lobe level of chirp replica cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_islr", e_tid_float, "dB", 4, "1", "ISLR of chirp replica cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_peak_loc", e_tid_float, "samples", 4, "1", "Peak location of cross-correlation function between reconstructed chirp and nominal chirp"}, {"chirp_power", e_tid_float, NULL, 4, "1", "Chirp power"}, {"elev_corr_factor", e_tid_float, NULL, 4, "1", "Elevation gain correction scaling factor applied to range compressed samples"}, {"spare_16", e_tid_spare, NULL, 16, "1", "Spare"}, {"cal_info.1.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 1)"}, {"cal_info.1.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 1)"}, {"cal_info.1.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 1)"}, {"cal_info.1.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 1)"}, {"cal_info.2.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 2)"}, {"cal_info.2.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 2)"}, {"cal_info.2.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 2)"}, {"cal_info.2.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 2)"}, {"cal_info.3.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 3)"}, {"cal_info.3.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 3)"}, {"cal_info.3.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 3)"}, {"cal_info.3.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 3)"}, {"cal_info.4.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 4)"}, {"cal_info.4.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 4)"}, {"cal_info.4.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 4)"}, {"cal_info.4.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 4)"}, {"cal_info.5.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 5)"}, {"cal_info.5.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 5)"}, {"cal_info.5.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 5)"}, {"cal_info.5.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 5)"}, {"cal_info.6.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 6)"}, {"cal_info.6.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 6)"}, {"cal_info.6.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 6)"}, {"cal_info.6.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 6)"}, {"cal_info.7.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 7)"}, {"cal_info.7.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 7)"}, {"cal_info.7.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 7)"}, {"cal_info.7.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 7)"}, {"cal_info.8.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 8)"}, {"cal_info.8.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 8)"}, {"cal_info.8.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 8)"}, {"cal_info.8.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 8)"}, {"cal_info.9.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 9)"}, {"cal_info.9.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 9)"}, {"cal_info.9.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 9)"}, {"cal_info.9.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 9)"}, {"cal_info.10.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 10)"}, {"cal_info.10.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 10)"}, {"cal_info.10.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 10)"}, {"cal_info.10.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 10)"}, {"cal_info.11.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 11)"}, {"cal_info.11.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 11)"}, {"cal_info.11.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 11)"}, {"cal_info.11.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 11)"}, {"cal_info.12.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 12)"}, {"cal_info.12.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 12)"}, {"cal_info.12.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 12)"}, {"cal_info.12.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 12)"}, {"cal_info.13.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 13)"}, {"cal_info.13.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 13)"}, {"cal_info.13.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 13)"}, {"cal_info.13.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 13)"}, {"cal_info.14.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 14)"}, {"cal_info.14.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 14)"}, {"cal_info.14.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 14)"}, {"cal_info.14.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 14)"}, {"cal_info.15.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 15)"}, {"cal_info.15.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 15)"}, {"cal_info.15.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 15)"}, {"cal_info.15.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 15)"}, {"cal_info.16.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 16)"}, {"cal_info.16.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 16)"}, {"cal_info.16.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 16)"}, {"cal_info.16.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 16)"}, {"cal_info.17.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 17)"}, {"cal_info.17.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 17)"}, {"cal_info.17.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 17)"}, {"cal_info.17.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 17)"}, {"cal_info.18.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 18)"}, {"cal_info.18.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 18)"}, {"cal_info.18.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 18)"}, {"cal_info.18.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 18)"}, {"cal_info.19.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 19)"}, {"cal_info.19.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 19)"}, {"cal_info.19.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 19)"}, {"cal_info.19.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 19)"}, {"cal_info.20.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 20)"}, {"cal_info.20.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 20)"}, {"cal_info.20.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 20)"}, {"cal_info.20.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 20)"}, {"cal_info.21.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 21)"}, {"cal_info.21.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 21)"}, {"cal_info.21.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 21)"}, {"cal_info.21.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 21)"}, {"cal_info.22.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 22)"}, {"cal_info.22.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 22)"}, {"cal_info.22.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 22)"}, {"cal_info.22.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 22)"}, {"cal_info.23.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 23)"}, {"cal_info.23.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 23)"}, {"cal_info.23.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 23)"}, {"cal_info.23.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 23)"}, {"cal_info.24.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 24)"}, {"cal_info.24.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 24)"}, {"cal_info.24.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 24)"}, {"cal_info.24.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 24)"}, {"cal_info.25.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 25)"}, {"cal_info.25.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 25)"}, {"cal_info.25.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 25)"}, {"cal_info.25.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 25)"}, {"cal_info.26.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 26)"}, {"cal_info.26.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 26)"}, {"cal_info.26.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 26)"}, {"cal_info.26.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 26)"}, {"cal_info.27.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 27)"}, {"cal_info.27.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 27)"}, {"cal_info.27.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 27)"}, {"cal_info.27.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 27)"}, {"cal_info.28.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 28)"}, {"cal_info.28.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 28)"}, {"cal_info.28.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 28)"}, {"cal_info.28.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 28)"}, {"cal_info.29.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 29)"}, {"cal_info.29.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 29)"}, {"cal_info.29.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 29)"}, {"cal_info.29.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 29)"}, {"cal_info.30.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 30)"}, {"cal_info.30.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 30)"}, {"cal_info.30.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 30)"}, {"cal_info.30.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 30)"}, {"cal_info.31.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 31)"}, {"cal_info.31.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 31)"}, {"cal_info.31.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 31)"}, {"cal_info.31.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 31)"}, {"cal_info.32.max_cal", e_tid_float, NULL, 4, "3", "Max of Cal pulses 1, 2, and 3 amplitude (record 32)"}, {"cal_info.32.avg_cal", e_tid_float, NULL, 4, "3", "Average of Cal pulse 1, 2, and 3 amplitude over the 3 dB on either side of the max amplitude (record 32)"}, {"cal_info.32.avg_val_1a", e_tid_float, NULL, 4, "1", "Average of Cal pulse 1A over the sample window (record 32)"}, {"cal_info.32.phs_cal", e_tid_float, "degrees", 4, "4", "Extracted phase for calibration pulse 1, 1A, 2, and 3 (record 32)"}, {"spare_17", e_tid_spare, NULL, 16, "1", "Spare"}, {"first_line_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time at first line of imagette"}, {"first_line_tie_points.range_samp_nums_first", e_tid_uint, NULL, 4, "3", "Range sample number Gives the range location of the grid points. First range sample is 1, is M (includes zero filled samples)"}, {"first_line_tie_points.slant_range_times_first", e_tid_float, "ns", 4, "3", "2 way slant range time to range sample"}, {"first_line_tie_points.inc_angles_first", e_tid_float, "deg.", 4, "3", "Incidence Angle at range sample"}, {"first_line_tie_points.lats_first", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic latitude of range sample (positive north)"}, {"first_line_tie_points.longs_first", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic longitude of range sample (positive east)"}, {"mid_line_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time at centre line of imagette"}, {"mid_range_line_nums", e_tid_uint, NULL, 4, "1", "Range line number of the center range line"}, {"mid_line_tie_points.range_samp_nums_mid", e_tid_uint, NULL, 4, "3", "Range sample number Gives the range location of the grid points. First range sample is 1, is M (includes zero filled samples)"}, {"mid_line_tie_points.slant_range_times_mid", e_tid_float, "ns", 4, "3", "2 way slant range time to range sample"}, {"mid_line_tie_points.inc_angles_mid", e_tid_float, "deg.", 4, "3", "Incidence Angle at range sample"}, {"mid_line_tie_points.lats_mid", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic latitude of range sample (positive north)"}, {"mid_line_tie_points.longs_mid", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic longitude of range sample (positive east)"}, {"last_line_time", e_tid_time, "MJD", 12, "1", "Zero Doppler Time at last line of imagette"}, {"last_line_num", e_tid_uint, NULL, 4, "1", "Range line number of the last range line"}, {"last_line_tie_points.range_samp_nums_last", e_tid_uint, NULL, 4, "3", "Range sample number Gives the range location of the grid points. First range sample is 1, is M (includes zero filled samples)"}, {"last_line_tie_points.slant_range_times_last", e_tid_float, "ns", 4, "3", "2 way slant range time to range sample"}, {"last_line_tie_points.inc_angles_last", e_tid_float, "deg.", 4, "3", "Incidence Angle at range sample"}, {"last_line_tie_points.lats_last", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic latitude of range sample (positive north)"}, {"last_line_tie_points.longs_last", e_tid_int, "(1e-6) degrees", 4, "3", "geodetic longitude of range sample (positive east)"}, {"swst_offset", e_tid_float, "ns", 4, "1", "Wave cell SWST offset from center of the sub-swath to start of imagette. 208 ns increments"}, {"ground_range_bias", e_tid_float, "km", 4, "1", "Wave cell Ground range bias from centre of the Sub-Swath to the centre of the imagette (Ground range, km)"}, {"elev_angle_bias", e_tid_float, "deg", 4, "1", "Wave cell Elevation angle biasfrom centre of the Sub-Swath elevation to the centre of the imagette (deg)"}, {"imagette_range_len", e_tid_float, "m", 4, "1", "Imagette length in range (m)"}, {"imagette_az_len", e_tid_float, "m", 4, "1", "Imagette length in azimuth (m)"}, {"imagette_range_res", e_tid_float, "m", 4, "1", "Nominal Imagette resolution in slant range (m)"}, {"ground_res", e_tid_float, "m", 4, "1", "Nominal resolution in ground range"}, {"imagette_az_res", e_tid_float, "m", 4, "1", "Nominal Imagette resolution in azimuth (m)"}, {"platform_alt", e_tid_float, "m", 4, "1", "Altitude (platform to ellipsoid) in metres (centre of wave cell)"}, {"platform_vel", e_tid_float, "m/s", 4, "1", "Platform Velocity (m/s)w.r.t moving earth"}, {"slant_range", e_tid_float, "m", 4, "1", "Range to centre of imagette (m)from platform to target"}, {"cw_drift", e_tid_float, NULL, 4, "1", "CW signal drift"}, {"wave_subcycle", e_tid_ushort, NULL, 2, "1", "Wave sub-cycle (1 or 2) of this wave cell"}, {"earth_radius", e_tid_float, "m", 4, "1", "Earth Radius at imagette center sample"}, {"sat_height", e_tid_float, "m", 4, "1", "Satellite distance to earth center"}, {"first_sample_slant_range", e_tid_float, "m", 4, "1", "Distance from satellite to first range pixel in the full SLC image"}, {"spare_18", e_tid_spare, NULL, 12, "1", "Spare"}, {"elevation_pattern.slant_range_time", e_tid_float, "ns", 4, "11", "2 way slant range times"}, {"elevation_pattern.elevation_angles", e_tid_float, "degrees", 4, "11", "Corresponding elevation angles"}, {"elevation_pattern.antenna_pattern", e_tid_float, "dB", 4, "11", "Corresponding two-way antenna elevation pattern values"}, {"spare_19", e_tid_spare, NULL, 14, "1", "Spare"} }; static const struct RecordDescriptor ASAR_Wave_SQ_ADSR_asar_rec_data[] = { {"zero_doppler_time", e_tid_time, "MJD", 12, "1", "Zero doppler time at which SQ information applies"}, {"attach_flag", e_tid_uchar, "flag", 1, "1", "Attachment Flag. Set to 1 if PF-ASAR was unable to produce an imagette for the wave cell. The fields in other DSR's corresponding to this one are set to zero, apart from the Zero Doppler Time."}, {"input_mean_flag", e_tid_uchar, "flag", 1, "1", "Input data mean outside nominal range flag0 = mean of I and Q input values are both within specified range from expected mean. For expected mean of x, the measured mean must fall between x-threshold to x+threshold.1 = otherwise"}, {"input_std_dev_flag", e_tid_uchar, "flag", 1, "1", "Input data standard deviation outside nominal range flag0 = standard deviation values of I and Q input values are both within specified range of expected standard deviation. For expected std. dev. x, the measured std. dev. must fall between x-threshold to"}, {"input_gaps_flag", e_tid_uchar, "flag", 1, "1", "Significant gaps in the input data flagAn input data gap is defined as a contiguous block of N missing lines (the value of N is predefined for each product)0 = number of input gaps <= threshold value1 = number of input data gaps > threshold value"}, {"input_missing_lines_flag", e_tid_uchar, "flag", 1, "1", "Missing lines significant flag 0 = percentage of missing lines <= threshold value 1 = percentage of missing lines > threshold valueThe number of missing lines is the number of lines missing from the input data excluding data gaps."}, {"dop_cen_flag", e_tid_uchar, "flag", 1, "1", "Doppler Centroid Uncertain flag0 = confidence measure >= specified value1 = Error message generated if confidence measure < specified value(note: if more than one Doppler centroid estimation is performed in a slice the flag is set if any confidence measur"}, {"dop_amb_flag", e_tid_uchar, "flag", 1, "1", "Doppler ambiguity estimate uncertain flag0 = confidence measure >= specified value1 = confidence measure < specified value"}, {"output_mean_flag", e_tid_uchar, "flag", 1, "1", "Output data mean outside nominal range flag0 = mean of I and Q output values for SLC image or mean of detected pixels for a detected product, are both within specified range from expected mean. For expected mean of x, the measured mean must fall between x"}, {"output_std_dev_flag", e_tid_uchar, "flag", 1, "1", "Output data standard deviation outside nominal range flag0 = std. dev. of I and Q output values for SLC image or std. dev. of detected pixels for a detected product, are both within specified range from expected std. dev. For expected std. dev. of x, the"}, {"chirp_flag", e_tid_uchar, "flag", 1, "1", "Chirp extraction failed or is of low quality flag 0 = able to extract all chirps or chirp extraction not requested (nominal chirp used) AND all quality measures were acceptable.1 = unable to extract a chirp during processing and chirp extraction was reque"}, {"missing_data_sets_flag", e_tid_uchar, "flag", 1, "1", "Data sets missing flag0 = all data sets which are supposed to be in the product are present1 = any data sets (including ADSs) are missing from the product which are supposed to be included under normal circumstances. Which data sets are missing can be det"}, {"invalid_downlink_flag", e_tid_uchar, "flag", 1, "1", "Invalid downlink parameters flag0 = all parameters read from the downlinked data were valid1 = displayed if any downlink parameter is out of range and therefore a default value has been used during processing."}, {"spare_1", e_tid_spare, NULL, 7, "1", "Spare"}, {"thresh_chirp_broadening", e_tid_float, "%", 4, "1", "Threshold for setting the chirp quality flag. Maximum percentage broadening permitted in cross-correlation pulse width compared to theoretical width."}, {"thresh_chirp_sidelobe", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - First sidelobe of the chirp cross correlation function"}, {"thresh_chirp_islr", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - ISLR of the chirp cross correlation function"}, {"thresh_input_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of input data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T."}, {"exp_input_mean", e_tid_float, NULL, 4, "1", "Expected mean input value for this product for both I and Q."}, {"thresh_input_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of input data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D."}, {"exp_input_std_dev", e_tid_float, NULL, 4, "1", "Expected input std. dev. for this product for both I and Q."}, {"thresh_dop_cen", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid quality flag - Threshold for Doppler Centroid confidence"}, {"thresh_dop_amb", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid ambiguity quality flag - Threshold for setting the Doppler Centroid ambiguity confidence flag"}, {"thresh_output_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of output data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T."}, {"exp_output_mean", e_tid_float, NULL, 4, "1", "Expected mean output value for this product. For an SLC product this is the expected mean of both the I and Q values."}, {"thresh_output_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of output data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D."}, {"exp_output_std_dev", e_tid_float, NULL, 4, "1", "Expected output std. dev. for this product. For an SLC product this is the expected output std. dev. for both I and Q values."}, {"thresh_input_missing_lines", e_tid_float, "%", 4, "1", "Threshold for setting the missing lines quality flag - maximum percentage of missing lines to total lines."}, {"thresh_input_gaps", e_tid_float, NULL, 4, "1", "Threshold for setting the missing gaps quality flag - maximum number of missing gaps allowed."}, {"lines_per_gaps", e_tid_uint, "lines", 4, "1", "Number of missing lines which constitute a gap"}, {"spare_2", e_tid_spare, NULL, 15, "1", "Spare"}, {"input_mean", e_tid_float, NULL, 4, "2", "Input data mean (i channel, q channel"}, {"input_std_dev", e_tid_float, NULL, 4, "2", "Input data standard deviation (i channel, q channel)"}, {"num_gaps", e_tid_float, NULL, 4, "1", "Number of gaps (composed of a predetermined number of consecutive missing lines)"}, {"num_missing_lines", e_tid_float, NULL, 4, "1", "Number of missing lines (excluding gaps)"}, {"output_mean", e_tid_float, NULL, 4, "2", "Output data mean (detected samples, followed by zero, or i channel followed by q channel for SLC)"}, {"output_std_dev", e_tid_float, NULL, 4, "2", "Output data standard deviation (detected samples followed by zero, or i channel followed by q channel for SLC)"}, {"tot_errors", e_tid_uint, NULL, 4, "1", "Total number of errors detected in ISP headers"}, {"Spare_3", e_tid_spare, NULL, 16, "1", "Spare"}, {"land_flag", e_tid_uchar, "flag", 1, "1", "Land Flag 0 = no land in imagette1 = land in imagette"}, {"look_conf_flag", e_tid_uchar, "flag", 1, "1", "Look image statistics confidence parameter flag 1 = The ratio of the standard deviation to the mean of the first look image is outside the range given by a minimum and a maximum threshold.0 =otherwise"}, {"inter_look_conf_flag", e_tid_uchar, "flag", 1, "1", "Inter-look confidence statistics confidence parameter flag1 = The normalised deviation of the two inter-look sub-images is greater than a maximum threshold.0 = otherwise"}, {"az_cutoff_flag", e_tid_uchar, "flag", 1, "1", "Azimuth cut-off convergence measure flag1 = The normalised RMS error between the fitted co-variance profile is greater than a maximum threshold.0 = otherwise"}, {"az_cutoff_iteration_flag", e_tid_uchar, "flag", 1, "1", "Azimuth cut-off Iteration count overflow flag1 = The Azimuth cut-off fit did not converge within a minimum number of iterations.0 = otherwise"}, {"phase_flag", e_tid_uchar, "flag", 1, "1", "Phase information confidence measure flag1 = The imaginary spectral peak is less than a minimum threshold, and the zero lag shift is greater than a minimum threshold.0 = otherwise"}, {"spare_4", e_tid_spare, NULL, 4, "1", "Spare"}, {"look_conf_thresh", e_tid_float, NULL, 4, "2", "Look image statistics confidence parameter thresholds (minimum and maximum)"}, {"inter_look_conf_thresh", e_tid_float, NULL, 4, "1", "Inter-look confidence statistics confidence parameter threshold"}, {"az_cutoff_thresh", e_tid_float, NULL, 4, "1", "Azimuth cut-off convergence measure threshold"}, {"az_cutoff_iterations_thresh", e_tid_uint, NULL, 4, "1", "Azimuth cut-off Iteration count overflow threshold"}, {"phase_peak_thresh", e_tid_float, NULL, 4, "1", "Phase information confidence measure threshold for the spectral peak"}, {"phase_cross_thresh", e_tid_float, "m", 4, "1", "Phase information confidence measure threshold for cross covariance peak offset"}, {"spare_5", e_tid_spare, NULL, 12, "1", "Spare"}, {"look_conf", e_tid_float, NULL, 4, "1", "Look image statistics confidence parameterThe ratio of the standard deviation to the mean of the first look image"}, {"inter_look_conf", e_tid_float, NULL, 4, "1", "Inter-look confidence statistics confidence parameter.The normalised deviation of the two inter-look sub-images"}, {"az_cutoff", e_tid_float, NULL, 4, "1", "Azimuth cut-off convergence measureThe normalised RMS error between the fitted co-variance profile"}, {"phase_peak_conf", e_tid_float, NULL, 4, "1", "Phase information confidence measure for the spectral peakThe imaginary spectral peak"}, {"phase_cross_conf", e_tid_float, "m", 4, "1", "Phase information confidence measure for cross covariance peak offset"}, {"spare_6", e_tid_spare, NULL, 12, "1", "Spare"} }; static const struct RecordDescriptor ASA_CON_AX_GADS_asar_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of creation"}, {"dsr_length", e_tid_uint, "bytes", 4, "1", "Length of this DSR in bytes"}, {"thresh_chirp_broadening", e_tid_float, "%", 4, "1", "Threshold for setting the chirp quality flag. Maximum percentage broadening permitted in cross-correlation pulse width compared to theoretical width."}, {"thresh_chirp_sidelobe", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - First sidelobe of the chirp cross correlation function"}, {"thresh_chirp_islr", e_tid_float, "dB", 4, "1", "Threshold for setting the chirp quality flag - ISLR of the chirp cross correlation function"}, {"thresh_input_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of input data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T. Used for both I and Q channels."}, {"thresh_input_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of input data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D. Used for both I and Q channels."}, {"thresh_dop_cen", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid quality flag - Threshold for Doppler Centroid confidence"}, {"thresh_dop_amb", e_tid_float, NULL, 4, "1", "Threshold for setting the Doppler Centroid ambiguity quality flag - Threshold for setting the Doppler Centroid ambiguity confidence flag"}, {"thresh_output_mean", e_tid_float, NULL, 4, "1", "Threshold for setting the mean of output data quality flag - For an expected mean value of x, this is the value T, such that the measured mean must fall between the x-T and x+T."}, {"thresh_output_std_dev", e_tid_float, NULL, 4, "1", "Threshold for setting the standard deviation of output data quality flag - For an expected std. dev. value of y, this is the value D, such that the measured std. dev. must fall between the y-D and y+D."}, {"thresh_missing_lines", e_tid_float, NULL, 4, "1", "Threshold for setting the missing lines quality flag - maximum percentage of missing lines to total lines."}, {"thresh_gaps", e_tid_float, NULL, 4, "1", "Threshold for setting the missing gaps quality flag - maximum number of gaps allowed."}, {"spare_1", e_tid_spare, NULL, 64, "1", "Spare"}, {"lines_per_gap", e_tid_uint, "lines", 4, "1", "Number of missing lines which constitute a gap"}, {"exp_im_mean", e_tid_float, NULL, 4, "1", "Expected mean of I and Q samples for IM (and WV) SLC images"}, {"exp_im_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of I and Q samples for IM (and WV) SLC images"}, {"exp_ap_mean", e_tid_float, NULL, 4, "1", "Expected mean of I and Q samples for AP SLC images"}, {"exp_ap_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of I and Q samples for AP SLC images"}, {"exp_imp_mean", e_tid_float, NULL, 4, "1", "Expected mean of IM PRI samples"}, {"exp_imp_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of IM PRI samples"}, {"exp_app_mean", e_tid_float, NULL, 4, "1", "Expected mean of AP PRI samples"}, {"exp_app_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of AP PRI samples"}, {"exp_imm_mean", e_tid_float, NULL, 4, "1", "Expected mean of IMM samples"}, {"exp_imm_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of IMM samples"}, {"exp_apm_mean", e_tid_float, NULL, 4, "1", "Expected mean of APM samples"}, {"exp_apm_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of APM samples"}, {"exp_wsm_mean", e_tid_float, NULL, 4, "1", "Expected mean of WSM samples"}, {"exp_wsm_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of WSM samples"}, {"exp_gm1_mean", e_tid_float, NULL, 4, "1", "Expected mean of GM1 samples"}, {"exp_gm1_std_dev", e_tid_float, NULL, 4, "1", "Expected standard deviation of GM1 samples"}, {"input_mean", e_tid_float, NULL, 4, "1", "Expected input mean"}, {"expected_input_std_dev", e_tid_float, NULL, 4, "1", "Expected input standard deviation"}, {"look_conf_thresh", e_tid_float, NULL, 4, "2", "Look image statistics confidence parameter thresholds (minimum and maximum)"}, {"inter_look_conf_thresh", e_tid_float, NULL, 4, "1", "Inter-look confidence statistics confidence parameter threshold"}, {"az_cutoff_thresh", e_tid_float, NULL, 4, "1", "Azimuth cut-off convergence measure threshold"}, {"az_cutoff_iterations_thresh", e_tid_float, NULL, 4, "1", "Azimuth cut-off Iteration count overflow threshold"}, {"phs_peak_thresh", e_tid_float, NULL, 4, "1", "Phase information confidence measure threshold for the spectral peak"}, {"phs_cross_thresh", e_tid_float, "m", 4, "1", "Phase information confidence measure threshold for the cross covariance peak offset"}, {"spare_2", e_tid_spare, NULL, 64, "1", "Spare"}, {"spare_3", e_tid_spare, NULL, 504, "1", "Spare"} }; static const struct RecordDescriptor ASA_INS_AX_GADS_asar_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of creation"}, {"dsr_length", e_tid_uint, "bytes", 4, "1", "Length of this DSR in bytes"}, {"radar_freq", e_tid_float, "Hz", 4, "1", "Radar Frequency"}, {"samp_rate", e_tid_float, "Hz", 4, "1", "Radar Sampling Rate"}, {"offset_freq", e_tid_float, "Hz", 4, "1", "Offset frequency for wave mode calibration pulses"}, {"cal_pulse_im_hh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_hh_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_hh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_hh_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_hh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_hh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_hh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_hh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_hh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_hh_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_hh_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_hh_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_im_vv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_im_vv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_im_vv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_im_vv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_im_vv_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_im_vv_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_im_vv_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hh_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hh_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hh_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vv_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vv_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vv_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_hv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_hv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_hv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_hv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_hv_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_hv_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_hv_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ap_vh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ap_vh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ap_vh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ap_vh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ap_vh_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_ap_vh_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ap_vh_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_1.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_1.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_1.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_1.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_2.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_2.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_2.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_2.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_hh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_hh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_hh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_hh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_hh_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_hh_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_hh_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_wv_vv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_wv_vv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_wv_vv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_wv_vv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_wv_vv_3.6.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_3.6.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 6)"}, {"cal_pulse_wv_vv_3.7.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_wv_vv_3.7.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 7)"}, {"cal_pulse_ws_hh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_hh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_hh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_hh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_hh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_hh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_hh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_hh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_hh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_hh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_ws_vv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_ws_vv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_ws_vv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_ws_vv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_ws_vv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_1.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_1.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_1.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_1.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_1.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_1.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_1.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_1.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_1.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_1.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_2.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_2.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_2.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_2.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_2.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_2.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_2.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_2.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_2.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_2.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_hh_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_hh_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_hh_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_hh_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_hh_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_3.1.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_3.1.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 1)"}, {"cal_pulse_gm_vv_3.2.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_3.2.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 2)"}, {"cal_pulse_gm_vv_3.3.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_3.3.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 3)"}, {"cal_pulse_gm_vv_3.4.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_3.4.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 4)"}, {"cal_pulse_gm_vv_3.5.nom_amplitude", e_tid_float, NULL, 4, "32", "Nominal amplitude (ax,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"cal_pulse_gm_vv_3.5.nom_phase", e_tid_float, "cycles", 4, "32", "Nominal value of phase (fx,n,nom) for antenna row 1 to antenna row 32 (where x is the pulse number) (record 5)"}, {"nom_pulse_im.1.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 1)"}, {"nom_pulse_im.1.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 1)"}, {"nom_pulse_im.1.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 1)"}, {"nom_pulse_im.2.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 2)"}, {"nom_pulse_im.2.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 2)"}, {"nom_pulse_im.2.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 2)"}, {"nom_pulse_im.3.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 3)"}, {"nom_pulse_im.3.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 3)"}, {"nom_pulse_im.3.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 3)"}, {"nom_pulse_im.4.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 4)"}, {"nom_pulse_im.4.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 4)"}, {"nom_pulse_im.4.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 4)"}, {"nom_pulse_im.5.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 5)"}, {"nom_pulse_im.5.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 5)"}, {"nom_pulse_im.5.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 5)"}, {"nom_pulse_im.6.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 6)"}, {"nom_pulse_im.6.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 6)"}, {"nom_pulse_im.6.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 6)"}, {"nom_pulse_im.7.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 7)"}, {"nom_pulse_im.7.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 7)"}, {"nom_pulse_im.7.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 7)"}, {"nom_pulse_ap.1.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 1)"}, {"nom_pulse_ap.1.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 1)"}, {"nom_pulse_ap.1.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 1)"}, {"nom_pulse_ap.2.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 2)"}, {"nom_pulse_ap.2.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 2)"}, {"nom_pulse_ap.2.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 2)"}, {"nom_pulse_ap.3.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 3)"}, {"nom_pulse_ap.3.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 3)"}, {"nom_pulse_ap.3.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 3)"}, {"nom_pulse_ap.4.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 4)"}, {"nom_pulse_ap.4.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 4)"}, {"nom_pulse_ap.4.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 4)"}, {"nom_pulse_ap.5.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 5)"}, {"nom_pulse_ap.5.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 5)"}, {"nom_pulse_ap.5.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 5)"}, {"nom_pulse_ap.6.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 6)"}, {"nom_pulse_ap.6.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 6)"}, {"nom_pulse_ap.6.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 6)"}, {"nom_pulse_ap.7.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 7)"}, {"nom_pulse_ap.7.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 7)"}, {"nom_pulse_ap.7.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 7)"}, {"nom_pulse_wv.1.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 1)"}, {"nom_pulse_wv.1.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 1)"}, {"nom_pulse_wv.1.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 1)"}, {"nom_pulse_wv.2.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 2)"}, {"nom_pulse_wv.2.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 2)"}, {"nom_pulse_wv.2.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 2)"}, {"nom_pulse_wv.3.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 3)"}, {"nom_pulse_wv.3.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 3)"}, {"nom_pulse_wv.3.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 3)"}, {"nom_pulse_wv.4.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 4)"}, {"nom_pulse_wv.4.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 4)"}, {"nom_pulse_wv.4.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 4)"}, {"nom_pulse_wv.5.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 5)"}, {"nom_pulse_wv.5.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 5)"}, {"nom_pulse_wv.5.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 5)"}, {"nom_pulse_wv.6.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 6)"}, {"nom_pulse_wv.6.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 6)"}, {"nom_pulse_wv.6.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 6)"}, {"nom_pulse_wv.7.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 7)"}, {"nom_pulse_wv.7.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 7)"}, {"nom_pulse_wv.7.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 7)"}, {"nom_pulse_ws.1.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 1)"}, {"nom_pulse_ws.1.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 1)"}, {"nom_pulse_ws.1.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 1)"}, {"nom_pulse_ws.2.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 2)"}, {"nom_pulse_ws.2.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 2)"}, {"nom_pulse_ws.2.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 2)"}, {"nom_pulse_ws.3.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 3)"}, {"nom_pulse_ws.3.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 3)"}, {"nom_pulse_ws.3.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 3)"}, {"nom_pulse_ws.4.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 4)"}, {"nom_pulse_ws.4.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 4)"}, {"nom_pulse_ws.4.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 4)"}, {"nom_pulse_ws.5.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 5)"}, {"nom_pulse_ws.5.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 5)"}, {"nom_pulse_ws.5.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 5)"}, {"nom_pulse_gm.1.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 1)"}, {"nom_pulse_gm.1.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 1)"}, {"nom_pulse_gm.1.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 1)"}, {"nom_pulse_gm.2.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 2)"}, {"nom_pulse_gm.2.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 2)"}, {"nom_pulse_gm.2.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 2)"}, {"nom_pulse_gm.3.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 3)"}, {"nom_pulse_gm.3.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 3)"}, {"nom_pulse_gm.3.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 3)"}, {"nom_pulse_gm.4.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 4)"}, {"nom_pulse_gm.4.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 4)"}, {"nom_pulse_gm.4.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 4)"}, {"nom_pulse_gm.5.pulse_amp_coeff", e_tid_float, "-, s-1, s-2, s-3", 4, "4", "4 pulse amplitude coefficients (record 5)"}, {"nom_pulse_gm.5.pulse_phs_coeff", e_tid_float, "cyclesHz,Hz/s,Hz/s2", 4, "4", "4 pulse phase coefficients (record 5)"}, {"nom_pulse_gm.5.pulse_duration", e_tid_float, "s", 4, "1", "Nominal pulse duration (record 5)"}, {"az_pattern", e_tid_float, "dB", 4, "101", "2 way antenna azimuth pattern(pattern values are from beam center - 0.25 deg to beam center + 0.25 deg. in 0.005 degree steps. TBC by ESA)"}, {"range_gate_bias", e_tid_float, "s", 4, "1", "Range Gate bias"}, {"adc_lut_i", e_tid_float, NULL, 4, "255", "Look Up Table for ADC Characterization (I Channel)Contains 255 normalized amplitude levels corresponding to voltage thresholds. First value in LUT is for -127, last value is for +127. Format as is given in PO-TN-MMS-SR-0248."}, {"adc_lut_q", e_tid_float, NULL, 4, "255", "Look Up Table for ADC Characterization (Q Channel)Contains 255 normalized amplitude levels corresponding to voltage thresholds. First value in LUT is for -127, last value is for +127. Format as is given in PO-TN-MMS-SR-0248."}, {"spare_1", e_tid_spare, NULL, 60, "1", "Spare"}, {"full8_lut_i", e_tid_float, NULL, 4, "256", "Reconstruction Look Up Table for Full 8-bit Quantization (I Channel)Contains normalized amplitude levels corresponding to sample codewords. First value in LUT is for codeword 0, last value is for +255 (binary offset format). Format as is given in PO-TN-MM"}, {"full8_lut_q", e_tid_float, NULL, 4, "256", "Reconstruction Look Up Table for Full 8-bit Quantization (Q Channel)Contains normalized amplitude levels corresponding to sample codewords. First value in LUT is for codeword 0, last value is for +255 (binary- offset format). Format as is given in PO-TN-M"}, {"fbaq4_lut_i", e_tid_float, NULL, 4, "4096", "Reconstruction Look Up Table for FBAQ 4-bit Quantization (I Channel)Gives 4096 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq3_lut_i", e_tid_float, NULL, 4, "2048", "Reconstruction Look Up Table for FBAQ 3-bit Quantization (I Channel)Gives 2048 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq2_lut_i", e_tid_float, NULL, 4, "1024", "Reconstruction Look Up Table for FBAQ 2-bit Quantization (I Channel)Gives 1024 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq4_lut_q", e_tid_float, NULL, 4, "4096", "Reconstruction Look Up Table for FBAQ 4-bit Quantization (Q Channel)Gives 4096 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq3_lut_q", e_tid_float, NULL, 4, "2048", "Reconstruction Look Up Table for FBAQ 3-bit Quantization (Q Channel)Gives 2048 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq2_lut_q", e_tid_float, NULL, 4, "1024", "Reconstruction Look Up Table for FBAQ 2-bit Quantization (Q Channel)Gives 1024 normalized amplitude reconstruction levels which include ADC correction. Format as is given in PO-TN-MMS-SR-0248."}, {"fbaq4_no_adc", e_tid_float, "values from-127 to +127", 4, "4096", "Reconstruction Look Up Table for FBAQ 4-bit Quantization (no ADC)This is the FBAQ reconstruction LUT which does not have ADC correction incorporated into it. It gives 4096 reconstruction levels which decodes FBAQ codewords to floating point values on the"}, {"fbaq3_no_adc", e_tid_float, "values from-127 to +127", 4, "2048", "Reconstruction Look Up Table for FBAQ 3-bit Quantization (no ADC)This is the FBAQ reconstruction LUT which does not have ADC correction incorporated into it. It gives 2048 reconstruction levels which decodes FBAQ codewords to floating point values on the"}, {"fbaq2_no_adc", e_tid_float, "values from-127 to +127-", 4, "1024", "Reconstruction Look Up Table for FBAQ 2-bit Quantization (No ADC)This is the FBAQ reconstruction LUT which does not have ADC correction incorporated into it. It gives 1024 reconstruction levels which decodes FBAQ codewords to floating point values on the"}, {"sm_lut_i", e_tid_float, NULL, 4, "16", "Reconstruction Look Up Table for Sign + Magnitude Quantization (I Channel)Contains normalized amplitude reconstruction levels corresponding to sample codewords. First value in LUT is for threshold -7, last value is for threshold +7. Format as is given in"}, {"sm_lut_q", e_tid_float, NULL, 4, "16", "Reconstruction Look Up Table for Sign + Magnitude Quantization (Q Channel)Contains normalized amplitude reconstruction levels corresponding to sample codewords. First value in LUT is for threshold -7, last value is for threshold +7. Format as is given in"}, {"data_config_im.echo_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S+MØ, NONE"}, {"data_config_im.echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_im.echo_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to echo samples? (1=yes, 0=no)"}, {"data_config_im.init_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S+MØ, NONE"}, {"data_config_im.init_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, 8/8"}, {"data_config_im.init_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to initial calibration samples? (1=yes, 0=no)"}, {"data_config_im.per_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S+MØ, NONE"}, {"data_config_im.per_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_im.per_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to periodic calibration samples? (1=yes, 0=no)"}, {"data_config_im.noise_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S+MØ, NONE"}, {"data_config_im.noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_im.noise_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to noise samples? (1=yes, 0=no)"}, {"data_config_ap.echo_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S+MØ, NONE"}, {"data_config_ap.echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ap.echo_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to echo samples? (1=yes, 0=no)"}, {"data_config_ap.init_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S+MØ, NONE"}, {"data_config_ap.init_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, 8/8"}, {"data_config_ap.init_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to initial calibration samples? (1=yes, 0=no)"}, {"data_config_ap.per_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S+MØ, NONE"}, {"data_config_ap.per_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ap.per_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to periodic calibration samples? (1=yes, 0=no)"}, {"data_config_ap.noise_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S+MØ, NONE"}, {"data_config_ap.noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ap.noise_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to noise samples? (1=yes, 0=no)"}, {"data_config_ws.echo_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S+MØ, NONE"}, {"data_config_ws.echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ws.echo_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to echo samples? (1=yes, 0=no)"}, {"data_config_ws.init_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S+MØ, NONE"}, {"data_config_ws.init_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, 8/8"}, {"data_config_ws.init_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to initial calibration samples? (1=yes, 0=no)"}, {"data_config_ws.per_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S+MØ, NONE"}, {"data_config_ws.per_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ws.per_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to periodic calibration samples? (1=yes, 0=no)"}, {"data_config_ws.noise_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S+MØ, NONE"}, {"data_config_ws.noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_ws.noise_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to noise samples? (1=yes, 0=no)"}, {"data_config_gm.echo_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S+MØ, NONE"}, {"data_config_gm.echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_gm.echo_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to echo samples? (1=yes, 0=no)"}, {"data_config_gm.init_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S+MØ, NONE"}, {"data_config_gm.init_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, 8/8"}, {"data_config_gm.init_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to initial calibration samples? (1=yes, 0=no)"}, {"data_config_gm.per_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S+MØ, NONE"}, {"data_config_gm.per_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_gm.per_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to periodic calibration samples? (1=yes, 0=no)"}, {"data_config_gm.noise_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S+MØ, NONE"}, {"data_config_gm.noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_gm.noise_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to noise samples? (1=yes, 0=no)"}, {"data_config_wv.echo_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for echo samples FBAQ, S+MØ, NONE"}, {"data_config_wv.echo_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for echo samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_wv.echo_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to echo samples? (1=yes, 0=no)"}, {"data_config_wv.init_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for initial calibration samples FBAQ, S+MØ, NONE"}, {"data_config_wv.init_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for initial calibration samples8/4, 8/3, 8/2, 8/8"}, {"data_config_wv.init_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to initial calibration samples? (1=yes, 0=no)"}, {"data_config_wv.per_cal_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for periodic calibration samples FBAQ, S+MØ, NONE"}, {"data_config_wv.per_cal_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for periodic calibration samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_wv.per_cal_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to periodic calibration samples? (1=yes, 0=no)"}, {"data_config_wv.noise_comp_method", e_tid_string, "ascii", 4, "1", "Compression Method used for noise samples FBAQ, S+MØ, NONE"}, {"data_config_wv.noise_comp_ratio", e_tid_string, "ascii", 3, "1", "Compression Ratio for noise samples: 8/4, 8/3, 8/2, 8/8"}, {"data_config_wv.noise_resamp_flag", e_tid_uchar, "flag", 1, "1", "Resampling applied to noise samples? (1=yes, 0=no)"}, {"swath_config_im.num_samp_windows_echo", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for echo samples, initial calibration samples (from beam 1 (IS1 or SS1) to beam 7 (IS7))"}, {"swath_config_im.num_samp_windows_init_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for initial calibration samples (from beam 1 to beam 7)"}, {"swath_config_im.num_samp_windows_per_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for periodic calibration samples (from beam 1 to beam 7)"}, {"swath_config_im.num_samp_windows_noise", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for noise samples (from beam 1 to beam 7)"}, {"swath_config_im.resample_factor", e_tid_float, NULL, 4, "7", "Resampling factor (beam 1 to beam 7)"}, {"swath_config_ap.num_samp_windows_echo", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for echo samples, initial calibration samples (from beam 1 (IS1 or SS1) to beam 7 (IS7))"}, {"swath_config_ap.num_samp_windows_init_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for initial calibration samples (from beam 1 to beam 7)"}, {"swath_config_ap.num_samp_windows_per_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for periodic calibration samples (from beam 1 to beam 7)"}, {"swath_config_ap.num_samp_windows_noise", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for noise samples (from beam 1 to beam 7)"}, {"swath_config_ap.resample_factor", e_tid_float, NULL, 4, "7", "Resampling factor (beam 1 to beam 7)"}, {"swath_config_ws.num_samp_windows_echo", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for echo samples, initial calibration samples (from beam 1 (IS1 or SS1) to beam 7 (IS7))"}, {"swath_config_ws.num_samp_windows_init_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for initial calibration samples (from beam 1 to beam 7)"}, {"swath_config_ws.num_samp_windows_per_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for periodic calibration samples (from beam 1 to beam 7)"}, {"swath_config_ws.num_samp_windows_noise", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for noise samples (from beam 1 to beam 7)"}, {"swath_config_ws.resample_factor", e_tid_float, NULL, 4, "7", "Resampling factor (beam 1 to beam 7)"}, {"swath_config_gm.num_samp_windows_echo", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for echo samples, initial calibration samples (from beam 1 (IS1 or SS1) to beam 7 (IS7))"}, {"swath_config_gm.num_samp_windows_init_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for initial calibration samples (from beam 1 to beam 7)"}, {"swath_config_gm.num_samp_windows_per_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for periodic calibration samples (from beam 1 to beam 7)"}, {"swath_config_gm.num_samp_windows_noise", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for noise samples (from beam 1 to beam 7)"}, {"swath_config_gm.resample_factor", e_tid_float, NULL, 4, "7", "Resampling factor (beam 1 to beam 7)"}, {"swath_config_wv.num_samp_windows_echo", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for echo samples, initial calibration samples (from beam 1 (IS1 or SS1) to beam 7 (IS7))"}, {"swath_config_wv.num_samp_windows_init_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for initial calibration samples (from beam 1 to beam 7)"}, {"swath_config_wv.num_samp_windows_per_cal", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for periodic calibration samples (from beam 1 to beam 7)"}, {"swath_config_wv.num_samp_windows_noise", e_tid_ushort, NULL, 2, "7", "Number of sample windows per source packet for noise samples (from beam 1 to beam 7)"}, {"swath_config_wv.resample_factor", e_tid_float, NULL, 4, "7", "Resampling factor (beam 1 to beam 7)"}, {"per_cal_widows_ec", e_tid_ushort, NULL, 2, "1", "Number of periodic calibration sample windows per source packet for External Characterization mode"}, {"per_cal_windows_ms", e_tid_ushort, NULL, 2, "1", "Number of periodic calibration sample windows per source packet for Module Stepping mode"}, {"swath_id_im.swath_num", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_im.beam_set_num", e_tid_ushort, NULL, 2, "7", "Antenna Beam Set numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_ap.swath_num", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_ap.beam_set_num", e_tid_ushort, NULL, 2, "7", "Antenna Beam Set numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_ws.swath_num", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_ws.beam_set_num", e_tid_ushort, NULL, 2, "7", "Antenna Beam Set numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_gm.swath_num", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_gm.beam_set_num", e_tid_ushort, NULL, 2, "7", "Antenna Beam Set numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_wv.swath_num", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"swath_id_wv.beam_set_num", e_tid_ushort, NULL, 2, "7", "Antenna Beam Set numbers (IS1 to IS7 or SS1 to SS5)"}, {"init_cal_beam_set_wv", e_tid_ushort, NULL, 2, "1", "Beam Set number for Wave Mode initial calibration"}, {"beam_set_ec", e_tid_ushort, NULL, 2, "1", "Beam Set number for External Characterization Mode"}, {"beam_set_ms", e_tid_ushort, NULL, 2, "1", "Beam Set number for Module Stepping Mode"}, {"cal_seq", e_tid_ushort, NULL, 2, "32", "Calibration Row Sequence Table(32 numbers give the Row number sequence used during initial and periodic calibration)"}, {"timeline_im.swath_nums", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"timeline_im.m_values", e_tid_ushort, NULL, 2, "7", "M values (IS1 to IS7 or SS1 to SS5) M is the number of echo sampling PTIs in a cycle or subcycle"}, {"timeline_im.r_values", e_tid_ushort, NULL, 2, "7", "R values (IS1 to IS7 or SS1 to SS5) R is the rank (i.e., the number of PRI between transmitted pulse and return echo)"}, {"timeline_im.g_values", e_tid_ushort, NULL, 2, "7", "G values (IS1 to IS7 or SS1 to SS5) G is the number of cycles"}, {"timeline_ap.swath_nums", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"timeline_ap.m_values", e_tid_ushort, NULL, 2, "7", "M values (IS1 to IS7 or SS1 to SS5) M is the number of echo sampling PTIs in a cycle or subcycle"}, {"timeline_ap.r_values", e_tid_ushort, NULL, 2, "7", "R values (IS1 to IS7 or SS1 to SS5) R is the rank (i.e., the number of PRI between transmitted pulse and return echo)"}, {"timeline_ap.g_values", e_tid_ushort, NULL, 2, "7", "G values (IS1 to IS7 or SS1 to SS5) G is the number of cycles"}, {"timeline_ws.swath_nums", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"timeline_ws.m_values", e_tid_ushort, NULL, 2, "7", "M values (IS1 to IS7 or SS1 to SS5) M is the number of echo sampling PTIs in a cycle or subcycle"}, {"timeline_ws.r_values", e_tid_ushort, NULL, 2, "7", "R values (IS1 to IS7 or SS1 to SS5) R is the rank (i.e., the number of PRI between transmitted pulse and return echo)"}, {"timeline_ws.g_values", e_tid_ushort, NULL, 2, "7", "G values (IS1 to IS7 or SS1 to SS5) G is the number of cycles"}, {"timeline_gm.swath_nums", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"timeline_gm.m_values", e_tid_ushort, NULL, 2, "7", "M values (IS1 to IS7 or SS1 to SS5) M is the number of echo sampling PTIs in a cycle or subcycle"}, {"timeline_gm.r_values", e_tid_ushort, NULL, 2, "7", "R values (IS1 to IS7 or SS1 to SS5) R is the rank (i.e., the number of PRI between transmitted pulse and return echo)"}, {"timeline_gm.g_values", e_tid_ushort, NULL, 2, "7", "G values (IS1 to IS7 or SS1 to SS5) G is the number of cycles"}, {"timeline_wv.swath_nums", e_tid_ushort, NULL, 2, "7", "Swath numbers (IS1 to IS7 or SS1 to SS5)"}, {"timeline_wv.m_values", e_tid_ushort, NULL, 2, "7", "M values (IS1 to IS7 or SS1 to SS5) M is the number of echo sampling PTIs in a cycle or subcycle"}, {"timeline_wv.r_values", e_tid_ushort, NULL, 2, "7", "R values (IS1 to IS7 or SS1 to SS5) R is the rank (i.e., the number of PRI between transmitted pulse and return echo)"}, {"timeline_wv.g_values", e_tid_ushort, NULL, 2, "7", "G values (IS1 to IS7 or SS1 to SS5) G is the number of cycles"}, {"m_ec", e_tid_ushort, NULL, 2, "1", "M value (see field above) for External Characterization"}, {"spare_2", e_tid_spare, NULL, 64, "1", "Spare"}, {"ref_elev_angle_is1", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS1"}, {"ref_elev_angle_is2", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS2"}, {"ref_elev_angle_is3_ss2", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS3 / SS2"}, {"ref_elev_angle_is4_ss3", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS4 / SS3"}, {"ref_elev_angle_is5_ss4", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS5 / SS4"}, {"ref_elev_angle_is6_ss5", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS6 / SS5"}, {"ref_elev_angle_is7", e_tid_float, "deg.", 4, "1", "Reference elevation angle for IS7"}, {"ref_elev_angle_ss1", e_tid_float, "deg.", 4, "1", "Reference elevation angle for SS1"}, {"spare_3", e_tid_spare, NULL, 64, "1", "Spare"}, {"cal_loop_ref_is1", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS1(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_ref_is2", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS2(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_ref_is3_ss2", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS3/SS2(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_ref_is4_ss3", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS4/SS3(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_ref_is5_ss4", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS5/SS4(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_ref_is6_ss5", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS6/SS5(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_ref_is7", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for IS7(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_ref_iss1", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Swath Reference Elevation Angle for SS1(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_cen_is1", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS1(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_cen_is2", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS2(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_cen_is3_ss2", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS3/SS2(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_cen_is4_ss3", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS4/SS3(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_cen_is5_ss4", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS5/SS4(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_cen_is6_ss5", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS6/SS5(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, fo"}, {"cal_loop_cen_is7", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for IS7(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"cal_loop_cen_iss1", e_tid_float, NULL, 4, "128", "Calibration Loop Characterization Factors at the Center of Swath Elevation Angle for SS1(complex factor characterizing the path through the calibration loop and from the calibration coupler to the antenna face) 32 complex values for H polarization, follow"}, {"spare_4", e_tid_spare, NULL, 1024, "1", "Spare"} }; static const struct RecordDescriptor ASA_XCA_AX_GADS_asar_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of creation of this file"}, {"dsr_length", e_tid_uint, "bytes", 4, "1", "Length of this DSR in bytes"}, {"ext_cal_im_hh", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for IM mode, HH polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_im_vv", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for IM mode, VV polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_ap_hh", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for AP mode, HH polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_ap_vv", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for AP mode, VV polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_ap_hv", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for AP mode, HV polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_ap_vh", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for AP mode, VH polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_wv_hh", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for WV mode, HH polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_wv_vv", e_tid_float, NULL, 4, "7", "External Calibration scaling factors for WV mode, VV polar. (7 values from swath IS1 to IS7)"}, {"ext_cal_ws_hh", e_tid_float, NULL, 4, "1", "External Calibration scaling factors for WS mode, HH polar."}, {"ext_cal_ws_vv", e_tid_float, NULL, 4, "1", "External Calibration scaling factors for WS mode, VV polar."}, {"ext_cal_gm_hh", e_tid_float, NULL, 4, "1", "External Calibration scaling factors for GM mode, HH polar."}, {"ext_cal_gm_vv", e_tid_float, NULL, 4, "1", "External Calibration scaling factors for GM mode, VV polar."}, {"elev_ang_is1", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS1"}, {"elev_ang_is2", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS2"}, {"elev_ang_is3_ss2", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS3 / SS2"}, {"elev_ang_is4_ss3", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS4 / SS3"}, {"elev_ang_is5_ss4", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS5 / SS4"}, {"elev_ang_is6_ss5", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS6 / SS5"}, {"elev_ang_is7", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for IS7"}, {"elev_ang_ss1", e_tid_float, "deg.", 4, "1", "Center of swath elevation angle for SS1"}, {"pattern_is1", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS1 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is2", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS2 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is3_ss2", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS3 / SS2 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is4_ss3", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS4 / SS3 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is5_ss4", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS5 / SS4 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is6_ss5", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS6 / SS5 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_is7", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for IS7 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps.)"}, {"pattern_ss1", e_tid_float, "dB", 4, "201", "Two-way Antenna Elevation Pattern Gain Table for SS1 (pattern is defined from Center of swath elevation angle - 5 deg. to Center of Swath elevation angle + 5 deg. in 0.05 degree steps. )"}, {"spare_1", e_tid_spare, NULL, 32, "1", "Spare"} }; static const struct RecordDescriptor ASA_XCH_AX_GADS_asar_rec_data[] = { {"dsr_time", e_tid_time, "MJD", 12, "1", "Time of characterization"}, {"dsr_length", e_tid_uint, "bytes", 4, "1", "Length of this DSR in bytes"}, {"complex_loop_factors", e_tid_float, NULL, 4, "128", "Complex Loop Paths Characterization Factors relative to free space (from External Characterization data). 64 complex (I,Q) values of gnp where n is the index of the row (1 to 32) and p is the index of the polarization (H=1, V=2) (TBC) Arranged H: 1 to 32, then V: 1-32)"}, {"pointing_error", e_tid_float, NULL, 4, "1", "Antenna pointing error DP1 (from External Characterization data)"}, {"spare_1", e_tid_spare, NULL, 64, "1", "Spare"} }; static const struct DatasetDescriptor ASA_APG_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MAP_PROJECTION_GADS", "MAP PROJECTION GADS", ASAR_Map_GADS_asar_rec_data, "Map Projection parameters"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 2"} }; static const struct DatasetDescriptor ASA_APM_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 2 (if requested)"} }; static const struct DatasetDescriptor ASA_APP_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 2"} }; static const struct DatasetDescriptor ASA_APS_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set 2"} }; static const struct DatasetDescriptor ASA_AP__BP_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_BP_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_BP_asar_rec_data, "Measurement Data Set 2"} }; static const struct DatasetDescriptor ASA_GM1_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_IMG_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MAP_PROJECTION_GADS", "MAP PROJECTION GADS", ASAR_Map_GADS_asar_rec_data, "Map Projection parameters"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_IMM_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_IMP_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_IMS_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_IM__BP_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_BP_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_WSM_1P_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MAIN_PROCESSING_PARAMS_ADS", "MAIN PROCESSING PARAMS ADS", ASAR_Main_ADSR_asar_rec_data, "Main Processing parameters"}, {"DOP_CENTROID_COEFFS_ADS", "DOP CENTROID COEFFS ADS", ASAR_Dop_Cen_ADSR_asar_rec_data, "Doppler Centroid Parameters"}, {"SR_GR_ADS", "SR GR ADS", ASAR_SRGR_ADSR_asar_rec_data, "Slant Range to Ground Range conversion parameters"}, {"CHIRP_PARAMS_ADS", "CHIRP PARAMS ADS", ASAR_Chirp_ADSR_asar_rec_data, "chirp parameters"}, {"ANTENNA_ELEV_PATTERN_ADS", "ANTENNA ELEV PATTERN ADS", ASAR_Antenna_ADSR_asar_rec_data, "Antenna Elevation patterns(s)"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_Gen_asar_rec_data, "Measurement Data Set 1"} }; static const struct DatasetDescriptor ASA_WS__BP_dataset_data[] = { {"MDS1_SQ_ADS", "MDS1 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"MDS2_SQ_ADS", "MDS2 SQ ADS", ASAR_SQ1_Image_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_GRID_ADS", "GEOLOCATION GRID ADS", ASAR_Geo_Grid_ADSR_asar_rec_data, "Geolocation Grid ADSRs"}, {"MDS1", "MDS1", ASAR_Image_MDSR_BP_asar_rec_data, "Measurement Data Set 1"}, {"MDS2", "MDS2", ASAR_Image_MDSR_BP_asar_rec_data, "Measurement Data Set 2"} }; static const struct DatasetDescriptor ASA_WVI_1P_dataset_data[] = { {"SQ_ADS", "SQ ADS", ASAR_Wave_SQ_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_ADS", "GEOLOCATION ADS", ASAR_Wave_Geolocation_ADSR_asar_rec_data, "Wave Mode Geolocation ADS"}, {"PROCESSING_PARAMS_ADS", "PROCESSING PARAMS ADS", ASAR_Wave_Param_ADSR_asar_rec_data, "Wave Mode processing parameters"}, {"CROSS_SPECTRA_MDS", "CROSS SPECTRA MDS", ASAR_Spectra_MDSR_asar_rec_data, "Measurement Data Set containing spectra. 1 MDSR per spectra."}, {"SLC_IMAGETTE_MDS", "SLC IMAGETTE MDS", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_001", "SLC IMAGETTE MDS 001", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_002", "SLC IMAGETTE MDS 002", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_003", "SLC IMAGETTE MDS 003", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_004", "SLC IMAGETTE MDS 004", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_005", "SLC IMAGETTE MDS 005", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_006", "SLC IMAGETTE MDS 006", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_007", "SLC IMAGETTE MDS 007", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_008", "SLC IMAGETTE MDS 008", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_009", "SLC IMAGETTE MDS 009", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_010", "SLC IMAGETTE MDS 010", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_011", "SLC IMAGETTE MDS 011", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_012", "SLC IMAGETTE MDS 012", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_013", "SLC IMAGETTE MDS 013", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_014", "SLC IMAGETTE MDS 014", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_015", "SLC IMAGETTE MDS 015", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_016", "SLC IMAGETTE MDS 016", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_017", "SLC IMAGETTE MDS 017", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_018", "SLC IMAGETTE MDS 018", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_019", "SLC IMAGETTE MDS 019", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_020", "SLC IMAGETTE MDS 020", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_021", "SLC IMAGETTE MDS 021", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_022", "SLC IMAGETTE MDS 022", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_023", "SLC IMAGETTE MDS 023", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_024", "SLC IMAGETTE MDS 024", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_025", "SLC IMAGETTE MDS 025", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_026", "SLC IMAGETTE MDS 026", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_027", "SLC IMAGETTE MDS 027", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_028", "SLC IMAGETTE MDS 028", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_029", "SLC IMAGETTE MDS 029", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_030", "SLC IMAGETTE MDS 030", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_031", "SLC IMAGETTE MDS 031", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_032", "SLC IMAGETTE MDS 032", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_033", "SLC IMAGETTE MDS 033", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_034", "SLC IMAGETTE MDS 034", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_035", "SLC IMAGETTE MDS 035", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_036", "SLC IMAGETTE MDS 036", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_037", "SLC IMAGETTE MDS 037", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_038", "SLC IMAGETTE MDS 038", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_039", "SLC IMAGETTE MDS 039", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_040", "SLC IMAGETTE MDS 040", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_041", "SLC IMAGETTE MDS 041", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_042", "SLC IMAGETTE MDS 042", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_043", "SLC IMAGETTE MDS 043", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_044", "SLC IMAGETTE MDS 044", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_045", "SLC IMAGETTE MDS 045", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_046", "SLC IMAGETTE MDS 046", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_047", "SLC IMAGETTE MDS 047", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_048", "SLC IMAGETTE MDS 048", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_049", "SLC IMAGETTE MDS 049", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_050", "SLC IMAGETTE MDS 050", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_051", "SLC IMAGETTE MDS 051", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_052", "SLC IMAGETTE MDS 052", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_053", "SLC IMAGETTE MDS 053", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_054", "SLC IMAGETTE MDS 054", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_055", "SLC IMAGETTE MDS 055", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_056", "SLC IMAGETTE MDS 056", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_057", "SLC IMAGETTE MDS 057", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_058", "SLC IMAGETTE MDS 058", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_059", "SLC IMAGETTE MDS 059", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_060", "SLC IMAGETTE MDS 060", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_061", "SLC IMAGETTE MDS 061", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_062", "SLC IMAGETTE MDS 062", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_063", "SLC IMAGETTE MDS 063", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_064", "SLC IMAGETTE MDS 064", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_065", "SLC IMAGETTE MDS 065", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_066", "SLC IMAGETTE MDS 066", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_067", "SLC IMAGETTE MDS 067", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_068", "SLC IMAGETTE MDS 068", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_069", "SLC IMAGETTE MDS 069", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_070", "SLC IMAGETTE MDS 070", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_071", "SLC IMAGETTE MDS 071", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_072", "SLC IMAGETTE MDS 072", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_073", "SLC IMAGETTE MDS 073", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_074", "SLC IMAGETTE MDS 074", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_075", "SLC IMAGETTE MDS 075", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_076", "SLC IMAGETTE MDS 076", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_077", "SLC IMAGETTE MDS 077", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_078", "SLC IMAGETTE MDS 078", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_079", "SLC IMAGETTE MDS 079", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_080", "SLC IMAGETTE MDS 080", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_081", "SLC IMAGETTE MDS 081", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_082", "SLC IMAGETTE MDS 082", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_083", "SLC IMAGETTE MDS 083", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_084", "SLC IMAGETTE MDS 084", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_085", "SLC IMAGETTE MDS 085", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_086", "SLC IMAGETTE MDS 086", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_087", "SLC IMAGETTE MDS 087", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_088", "SLC IMAGETTE MDS 088", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_089", "SLC IMAGETTE MDS 089", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_090", "SLC IMAGETTE MDS 090", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_091", "SLC IMAGETTE MDS 091", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_092", "SLC IMAGETTE MDS 092", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_093", "SLC IMAGETTE MDS 093", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_094", "SLC IMAGETTE MDS 094", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_095", "SLC IMAGETTE MDS 095", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_096", "SLC IMAGETTE MDS 096", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_097", "SLC IMAGETTE MDS 097", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_098", "SLC IMAGETTE MDS 098", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_099", "SLC IMAGETTE MDS 099", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_100", "SLC IMAGETTE MDS 100", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_101", "SLC IMAGETTE MDS 101", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_102", "SLC IMAGETTE MDS 102", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_103", "SLC IMAGETTE MDS 103", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_104", "SLC IMAGETTE MDS 104", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_105", "SLC IMAGETTE MDS 105", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_106", "SLC IMAGETTE MDS 106", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_107", "SLC IMAGETTE MDS 107", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_108", "SLC IMAGETTE MDS 108", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_109", "SLC IMAGETTE MDS 109", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_110", "SLC IMAGETTE MDS 110", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_111", "SLC IMAGETTE MDS 111", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_112", "SLC IMAGETTE MDS 112", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_113", "SLC IMAGETTE MDS 113", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_114", "SLC IMAGETTE MDS 114", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_115", "SLC IMAGETTE MDS 115", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_116", "SLC IMAGETTE MDS 116", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_117", "SLC IMAGETTE MDS 117", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_118", "SLC IMAGETTE MDS 118", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_119", "SLC IMAGETTE MDS 119", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_120", "SLC IMAGETTE MDS 120", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_121", "SLC IMAGETTE MDS 121", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_122", "SLC IMAGETTE MDS 122", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_123", "SLC IMAGETTE MDS 123", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_124", "SLC IMAGETTE MDS 124", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_125", "SLC IMAGETTE MDS 125", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_126", "SLC IMAGETTE MDS 126", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_127", "SLC IMAGETTE MDS 127", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_128", "SLC IMAGETTE MDS 128", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_129", "SLC IMAGETTE MDS 129", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_130", "SLC IMAGETTE MDS 130", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_131", "SLC IMAGETTE MDS 131", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_132", "SLC IMAGETTE MDS 132", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_133", "SLC IMAGETTE MDS 133", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_134", "SLC IMAGETTE MDS 134", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_135", "SLC IMAGETTE MDS 135", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_136", "SLC IMAGETTE MDS 136", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_137", "SLC IMAGETTE MDS 137", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_138", "SLC IMAGETTE MDS 138", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_139", "SLC IMAGETTE MDS 139", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_140", "SLC IMAGETTE MDS 140", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_141", "SLC IMAGETTE MDS 141", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_142", "SLC IMAGETTE MDS 142", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_143", "SLC IMAGETTE MDS 143", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_144", "SLC IMAGETTE MDS 144", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_145", "SLC IMAGETTE MDS 145", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_146", "SLC IMAGETTE MDS 146", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_147", "SLC IMAGETTE MDS 147", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_148", "SLC IMAGETTE MDS 148", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_149", "SLC IMAGETTE MDS 149", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_150", "SLC IMAGETTE MDS 150", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_151", "SLC IMAGETTE MDS 151", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_152", "SLC IMAGETTE MDS 152", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_153", "SLC IMAGETTE MDS 153", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_154", "SLC IMAGETTE MDS 154", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_155", "SLC IMAGETTE MDS 155", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_156", "SLC IMAGETTE MDS 156", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_157", "SLC IMAGETTE MDS 157", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_158", "SLC IMAGETTE MDS 158", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_159", "SLC IMAGETTE MDS 159", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_160", "SLC IMAGETTE MDS 160", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_161", "SLC IMAGETTE MDS 161", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_162", "SLC IMAGETTE MDS 162", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_163", "SLC IMAGETTE MDS 163", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_164", "SLC IMAGETTE MDS 164", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_165", "SLC IMAGETTE MDS 165", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_166", "SLC IMAGETTE MDS 166", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_167", "SLC IMAGETTE MDS 167", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_168", "SLC IMAGETTE MDS 168", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_169", "SLC IMAGETTE MDS 169", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_170", "SLC IMAGETTE MDS 170", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_171", "SLC IMAGETTE MDS 171", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_172", "SLC IMAGETTE MDS 172", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_173", "SLC IMAGETTE MDS 173", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_174", "SLC IMAGETTE MDS 174", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_175", "SLC IMAGETTE MDS 175", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_176", "SLC IMAGETTE MDS 176", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_177", "SLC IMAGETTE MDS 177", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_178", "SLC IMAGETTE MDS 178", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_179", "SLC IMAGETTE MDS 179", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_180", "SLC IMAGETTE MDS 180", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_181", "SLC IMAGETTE MDS 181", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_182", "SLC IMAGETTE MDS 182", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_183", "SLC IMAGETTE MDS 183", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_184", "SLC IMAGETTE MDS 184", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_185", "SLC IMAGETTE MDS 185", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_186", "SLC IMAGETTE MDS 186", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_187", "SLC IMAGETTE MDS 187", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_188", "SLC IMAGETTE MDS 188", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_189", "SLC IMAGETTE MDS 189", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_190", "SLC IMAGETTE MDS 190", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_191", "SLC IMAGETTE MDS 191", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_192", "SLC IMAGETTE MDS 192", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_193", "SLC IMAGETTE MDS 193", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_194", "SLC IMAGETTE MDS 194", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_195", "SLC IMAGETTE MDS 195", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_196", "SLC IMAGETTE MDS 196", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_197", "SLC IMAGETTE MDS 197", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_198", "SLC IMAGETTE MDS 198", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_199", "SLC IMAGETTE MDS 199", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_200", "SLC IMAGETTE MDS 200", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_201", "SLC IMAGETTE MDS 201", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_202", "SLC IMAGETTE MDS 202", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_203", "SLC IMAGETTE MDS 203", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_204", "SLC IMAGETTE MDS 204", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_205", "SLC IMAGETTE MDS 205", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_206", "SLC IMAGETTE MDS 206", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_207", "SLC IMAGETTE MDS 207", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_208", "SLC IMAGETTE MDS 208", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_209", "SLC IMAGETTE MDS 209", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_210", "SLC IMAGETTE MDS 210", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_211", "SLC IMAGETTE MDS 211", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_212", "SLC IMAGETTE MDS 212", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_213", "SLC IMAGETTE MDS 213", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_214", "SLC IMAGETTE MDS 214", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_215", "SLC IMAGETTE MDS 215", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_216", "SLC IMAGETTE MDS 216", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_217", "SLC IMAGETTE MDS 217", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_218", "SLC IMAGETTE MDS 218", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_219", "SLC IMAGETTE MDS 219", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_220", "SLC IMAGETTE MDS 220", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_221", "SLC IMAGETTE MDS 221", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_222", "SLC IMAGETTE MDS 222", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_223", "SLC IMAGETTE MDS 223", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_224", "SLC IMAGETTE MDS 224", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_225", "SLC IMAGETTE MDS 225", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_226", "SLC IMAGETTE MDS 226", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_227", "SLC IMAGETTE MDS 227", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_228", "SLC IMAGETTE MDS 228", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_229", "SLC IMAGETTE MDS 229", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_230", "SLC IMAGETTE MDS 230", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_231", "SLC IMAGETTE MDS 231", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_232", "SLC IMAGETTE MDS 232", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_233", "SLC IMAGETTE MDS 233", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_234", "SLC IMAGETTE MDS 234", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_235", "SLC IMAGETTE MDS 235", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_236", "SLC IMAGETTE MDS 236", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_237", "SLC IMAGETTE MDS 237", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_238", "SLC IMAGETTE MDS 238", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_239", "SLC IMAGETTE MDS 239", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_240", "SLC IMAGETTE MDS 240", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_241", "SLC IMAGETTE MDS 241", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_242", "SLC IMAGETTE MDS 242", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_243", "SLC IMAGETTE MDS 243", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_244", "SLC IMAGETTE MDS 244", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_245", "SLC IMAGETTE MDS 245", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_246", "SLC IMAGETTE MDS 246", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_247", "SLC IMAGETTE MDS 247", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_248", "SLC IMAGETTE MDS 248", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_249", "SLC IMAGETTE MDS 249", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_250", "SLC IMAGETTE MDS 250", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_251", "SLC IMAGETTE MDS 251", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_252", "SLC IMAGETTE MDS 252", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_253", "SLC IMAGETTE MDS 253", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_254", "SLC IMAGETTE MDS 254", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_255", "SLC IMAGETTE MDS 255", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_256", "SLC IMAGETTE MDS 256", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_257", "SLC IMAGETTE MDS 257", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_258", "SLC IMAGETTE MDS 258", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_259", "SLC IMAGETTE MDS 259", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_260", "SLC IMAGETTE MDS 260", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_261", "SLC IMAGETTE MDS 261", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_262", "SLC IMAGETTE MDS 262", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_263", "SLC IMAGETTE MDS 263", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_264", "SLC IMAGETTE MDS 264", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_265", "SLC IMAGETTE MDS 265", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_266", "SLC IMAGETTE MDS 266", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_267", "SLC IMAGETTE MDS 267", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_268", "SLC IMAGETTE MDS 268", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_269", "SLC IMAGETTE MDS 269", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_270", "SLC IMAGETTE MDS 270", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_271", "SLC IMAGETTE MDS 271", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_272", "SLC IMAGETTE MDS 272", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_273", "SLC IMAGETTE MDS 273", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_274", "SLC IMAGETTE MDS 274", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_275", "SLC IMAGETTE MDS 275", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_276", "SLC IMAGETTE MDS 276", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_277", "SLC IMAGETTE MDS 277", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_278", "SLC IMAGETTE MDS 278", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_279", "SLC IMAGETTE MDS 279", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_280", "SLC IMAGETTE MDS 280", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_281", "SLC IMAGETTE MDS 281", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_282", "SLC IMAGETTE MDS 282", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_283", "SLC IMAGETTE MDS 283", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_284", "SLC IMAGETTE MDS 284", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_285", "SLC IMAGETTE MDS 285", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_286", "SLC IMAGETTE MDS 286", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_287", "SLC IMAGETTE MDS 287", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_288", "SLC IMAGETTE MDS 288", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_289", "SLC IMAGETTE MDS 289", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_290", "SLC IMAGETTE MDS 290", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_291", "SLC IMAGETTE MDS 291", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_292", "SLC IMAGETTE MDS 292", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_293", "SLC IMAGETTE MDS 293", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_294", "SLC IMAGETTE MDS 294", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_295", "SLC IMAGETTE MDS 295", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_296", "SLC IMAGETTE MDS 296", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_297", "SLC IMAGETTE MDS 297", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_298", "SLC IMAGETTE MDS 298", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_299", "SLC IMAGETTE MDS 299", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_300", "SLC IMAGETTE MDS 300", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_301", "SLC IMAGETTE MDS 301", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_302", "SLC IMAGETTE MDS 302", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_303", "SLC IMAGETTE MDS 303", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_304", "SLC IMAGETTE MDS 304", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_305", "SLC IMAGETTE MDS 305", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_306", "SLC IMAGETTE MDS 306", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_307", "SLC IMAGETTE MDS 307", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_308", "SLC IMAGETTE MDS 308", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_309", "SLC IMAGETTE MDS 309", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_310", "SLC IMAGETTE MDS 310", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_311", "SLC IMAGETTE MDS 311", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_312", "SLC IMAGETTE MDS 312", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_313", "SLC IMAGETTE MDS 313", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_314", "SLC IMAGETTE MDS 314", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_315", "SLC IMAGETTE MDS 315", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_316", "SLC IMAGETTE MDS 316", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_317", "SLC IMAGETTE MDS 317", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_318", "SLC IMAGETTE MDS 318", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_319", "SLC IMAGETTE MDS 319", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_320", "SLC IMAGETTE MDS 320", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_321", "SLC IMAGETTE MDS 321", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_322", "SLC IMAGETTE MDS 322", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_323", "SLC IMAGETTE MDS 323", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_324", "SLC IMAGETTE MDS 324", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_325", "SLC IMAGETTE MDS 325", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_326", "SLC IMAGETTE MDS 326", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_327", "SLC IMAGETTE MDS 327", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_328", "SLC IMAGETTE MDS 328", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_329", "SLC IMAGETTE MDS 329", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_330", "SLC IMAGETTE MDS 330", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_331", "SLC IMAGETTE MDS 331", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_332", "SLC IMAGETTE MDS 332", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_333", "SLC IMAGETTE MDS 333", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_334", "SLC IMAGETTE MDS 334", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_335", "SLC IMAGETTE MDS 335", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_336", "SLC IMAGETTE MDS 336", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_337", "SLC IMAGETTE MDS 337", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_338", "SLC IMAGETTE MDS 338", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_339", "SLC IMAGETTE MDS 339", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_340", "SLC IMAGETTE MDS 340", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_341", "SLC IMAGETTE MDS 341", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_342", "SLC IMAGETTE MDS 342", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_343", "SLC IMAGETTE MDS 343", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_344", "SLC IMAGETTE MDS 344", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_345", "SLC IMAGETTE MDS 345", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_346", "SLC IMAGETTE MDS 346", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_347", "SLC IMAGETTE MDS 347", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_348", "SLC IMAGETTE MDS 348", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_349", "SLC IMAGETTE MDS 349", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_350", "SLC IMAGETTE MDS 350", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_351", "SLC IMAGETTE MDS 351", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_352", "SLC IMAGETTE MDS 352", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_353", "SLC IMAGETTE MDS 353", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_354", "SLC IMAGETTE MDS 354", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_355", "SLC IMAGETTE MDS 355", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_356", "SLC IMAGETTE MDS 356", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_357", "SLC IMAGETTE MDS 357", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_358", "SLC IMAGETTE MDS 358", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_359", "SLC IMAGETTE MDS 359", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_360", "SLC IMAGETTE MDS 360", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_361", "SLC IMAGETTE MDS 361", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_362", "SLC IMAGETTE MDS 362", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_363", "SLC IMAGETTE MDS 363", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_364", "SLC IMAGETTE MDS 364", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_365", "SLC IMAGETTE MDS 365", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_366", "SLC IMAGETTE MDS 366", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_367", "SLC IMAGETTE MDS 367", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_368", "SLC IMAGETTE MDS 368", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_369", "SLC IMAGETTE MDS 369", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_370", "SLC IMAGETTE MDS 370", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_371", "SLC IMAGETTE MDS 371", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_372", "SLC IMAGETTE MDS 372", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_373", "SLC IMAGETTE MDS 373", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_374", "SLC IMAGETTE MDS 374", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_375", "SLC IMAGETTE MDS 375", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_376", "SLC IMAGETTE MDS 376", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_377", "SLC IMAGETTE MDS 377", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_378", "SLC IMAGETTE MDS 378", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_379", "SLC IMAGETTE MDS 379", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_380", "SLC IMAGETTE MDS 380", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_381", "SLC IMAGETTE MDS 381", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_382", "SLC IMAGETTE MDS 382", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_383", "SLC IMAGETTE MDS 383", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_384", "SLC IMAGETTE MDS 384", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_385", "SLC IMAGETTE MDS 385", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_386", "SLC IMAGETTE MDS 386", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_387", "SLC IMAGETTE MDS 387", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_388", "SLC IMAGETTE MDS 388", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_389", "SLC IMAGETTE MDS 389", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_390", "SLC IMAGETTE MDS 390", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_391", "SLC IMAGETTE MDS 391", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_392", "SLC IMAGETTE MDS 392", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_393", "SLC IMAGETTE MDS 393", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_394", "SLC IMAGETTE MDS 394", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_395", "SLC IMAGETTE MDS 395", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_396", "SLC IMAGETTE MDS 396", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_397", "SLC IMAGETTE MDS 397", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_398", "SLC IMAGETTE MDS 398", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_399", "SLC IMAGETTE MDS 399", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"}, {"SLC_IMAGETTE_MDS_400", "SLC IMAGETTE MDS 400", ASAR_Image_MDSR_SLC_asar_rec_data, "Measurement Data Set for a single imagette (corresponds to one spectrum MDSR)"} }; static const struct DatasetDescriptor ASA_WVS_1P_dataset_data[] = { {"SQ_ADS", "SQ ADS", ASAR_Wave_SQ_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_ADS", "GEOLOCATION ADS", ASAR_Wave_Geolocation_ADSR_asar_rec_data, "Wave Mode Geolocation ADS"}, {"PROCESSING_PARAMS_ADS", "PROCESSING PARAMS ADS", ASAR_Wave_Param_ADSR_asar_rec_data, "Wave Mode processing parameters"}, {"CROSS_SPECTRA_MDS", "CROSS SPECTRA MDS", ASAR_Spectra_MDSR_asar_rec_data, "Measurement Data Set containing spectra. 1 MDSR per spectra."} }; static const struct DatasetDescriptor ASA_WVW_2P_dataset_data[] = { {"SQ_ADS", "SQ ADS", ASAR_Wave_SQ_ADSR_asar_rec_data, "SQ ADSRs"}, {"GEOLOCATION_ADS", "GEOLOCATION ADS", ASAR_Wave_Geolocation_ADSR_asar_rec_data, "Wave Mode Geolocation ADS"}, {"PROCESSING_PARAMS_ADS", "PROCESSING PARAMS ADS", ASAR_Wave_Param_ADSR_asar_rec_data, "Wave Mode processing parameters"}, {"WAVE_SPECTRA_MDS", "WAVE SPECTRA MDS", ASAR_Ocean_Spectra_MDSR_asar_rec_data, "Ocean Wave Spectra"} }; static const struct DatasetDescriptor ATS_AR__2P_dataset_data[] = { {"SEA_ST_50_KM_CELL_MDS", "SEA_ST_50_KM_CELL_MDS", ATS_AR__2P_MDSR_sst_large_aatsr_rec_data, "SST record 50 km cell MDS"}, {"SEA_ST_17_KM_CELL_MDS", "SEA_ST_17_KM_CELL_MDS", ATS_AR__2P_MDSR_sst_small_aatsr_rec_data, "SST record 17 km cell MDS"}, {"SEA_ST_10_MIN_CELL_MDS", "SEA_ST_10_MIN_CELL_MDS", ATS_AR__2P_MDSR_sst_small_aatsr_rec_data, "SST record 10 arc minute cell MDS"}, {"SEA_ST_30_MIN_CELL_MDS", "SEA_ST_30_MIN_CELL_MDS", ATS_AR__2P_MDSR_sst_large_aatsr_rec_data, "SST record 30 arc minute cell MDS"}, {"LAND_ST_50_KM_CELL_MDS", "LAND_ST_50_KM_CELL_MDS", ATS_AR__2P_MDSR_lst_large_aatsr_rec_data, "LST record 50 km cell MDS"}, {"LAND_ST_17_KM_CELL_MDS", "LAND_ST_17_KM_CELL_MDS", ATS_AR__2P_MDSR_lst_small_aatsr_rec_data, "LST record 17 km cell MDS"}, {"LAND_ST_10_MIN_CELL_MDS", "LAND_ST_10_MIN_CELL_MDS", ATS_AR__2P_MDSR_lst_small_aatsr_rec_data, "LST record 10 arc minute cell MDS"}, {"LAND_ST_30_MIN_CELL_MDS", "LAND_ST_30_MIN_CELL_MDS", ATS_AR__2P_MDSR_lst_large_aatsr_rec_data, "LST record 30 arc minute cell MDS"}, {"BT_TOA_LAND_50_KM_CELL_MDS", "BT_TOA_LAND_50_KM_CELL_MDS", ATS_AR__2P_MDSR_lr_large_aatsr_rec_data, "BT/TOA Land record 50 km cell MDS"}, {"BT_TOA_LAND_17_KM_CELL_MDS", "BT_TOA_LAND_17_KM_CELL_MDS", ATS_AR__2P_MDSR_lr_small_aatsr_rec_data, "BT/TOA Land record 17 km cell MDS"}, {"BT_TOA_LAND_10_MIN_CELL_MDS", "BT_TOA_LAND_10_MIN_CELL_MDS", ATS_AR__2P_MDSR_lr_small_aatsr_rec_data, "BT/TOA Land record 10 arc minute cell MDS"}, {"BT_TOA_LAND_30_MIN_CELL_MDS", "BT_TOA_LAND_30_MIN_CELL_MDS", ATS_AR__2P_MDSR_lr_large_aatsr_rec_data, "BT/TOA Land record 30 arc minute cell MDS"}, {"BT_TOA_SEA_50_KM_CELL_MDS", "BT_TOA_SEA_50_KM_CELL_MDS", ATS_AR__2P_MDSR_sr_large_aatsr_rec_data, "BT/TOA Sea record 50 km cell MDS"}, {"BT_TOA_SEA_17_KM_CELL_MDS", "BT_TOA_SEA_17_KM_CELL_MDS", ATS_AR__2P_MDSR_sr_small_aatsr_rec_data, "BT/TOA Sea record 17 km cell MDS"}, {"BT_TOA_SEA_10_MIN_CELL_MDS", "BT_TOA_SEA_10_MIN_CELL_MDS", ATS_AR__2P_MDSR_sr_small_aatsr_rec_data, "BT/TOA Sea record 10 arc minute cell MDS"}, {"BT_TOA_SEA_30_MIN_CELL_MDS", "BT_TOA_SEA_30_MIN_CELL_MDS", ATS_AR__2P_MDSR_sr_large_aatsr_rec_data, "BT/TOA Sea record 30 arc minute cell MDS"} }; static const struct DatasetDescriptor ATS_MET_2P_dataset_data[] = { {"SEA_ST_10_MIN_CELL_MDS", "SEA_ST_10_MIN_CELL_MDS", ATS_MET_2P_meteo_user_prod_aatsr_rec_data, "10-arcminute mds"} }; static const struct DatasetDescriptor ATS_NR__2P_dataset_data[] = { {"SUMMARY_QUALITY_ADS", "SUMMARY_QUALITY_ADS", ATS_NR__2P_ADSR_sq_aatsr_rec_data, "Summary Quality ADS"}, {"GEOLOCATION_ADS", "GEOLOCATION_ADS", ATS_TOA_1P_ADSR_loc_aatsr_rec_data, "Grid pixel latitude and longtitude topographic corrections ADS"}, {"SCAN_PIXEL_X_AND_Y_ADS", "SCAN_PIXEL_X_AND_Y_ADS", ATS_TOA_1P_ADSR_scan_aatsr_rec_data, "Scan pixel x and y ADS"}, {"NADIR_VIEW_SOLAR_ANGLES_ADS", "NADIR_VIEW_SOLAR_ANGLES_ADS", ATS_TOA_1P_ADSR_sa_aatsr_rec_data, "Nadir view solar angles ADS"}, {"FWARD_VIEW_SOLAR_ANGLES_ADS", "FWARD_VIEW_SOLAR_ANGLES_ADS", ATS_TOA_1P_ADSR_sa_aatsr_rec_data, "Forward view solar angles ADS"}, {"NADIR_VIEW_SCAN_PIX_NUM_ADS", "NADIR_VIEW_SCAN_PIX_NUM_ADS", ATS_TOA_1P_ADSR_pix_aatsr_rec_data, "Scan and pixel number nadir view ADS"}, {"FWARD_VIEW_SCAN_PIX_NUM_ADS", "FWARD_VIEW_SCAN_PIX_NUM_ADS", ATS_TOA_1P_ADSR_pix_aatsr_rec_data, "Scan and pixel number forward view ADS"}, {"DISTRIB_SST_CLOUD_LAND_MDS", "DISTRIB_SST_CLOUD_LAND_MDS", ATS_NR__2P_MDSR_dp_aatsr_rec_data, "Distributed product MDS"} }; static const struct DatasetDescriptor ATS_TOA_1P_dataset_data[] = { {"SUMMARY_QUALITY_ADS", "SUMMARY_QUALITY_ADS", ATS_TOA_1P_ADSR_sq_aatsr_rec_data, "Summary Quality ADS"}, {"GEOLOCATION_ADS", "GEOLOCATION_ADS", ATS_TOA_1P_ADSR_loc_aatsr_rec_data, "Grid pixel latitude and longtitude topographic corrections ADS"}, {"SCAN_PIXEL_X_AND_Y_ADS", "SCAN_PIXEL_X_AND_Y_ADS", ATS_TOA_1P_ADSR_scan_aatsr_rec_data, "Scan pixel x and y ADS"}, {"NADIR_VIEW_SOLAR_ANGLES_ADS", "NADIR_VIEW_SOLAR_ANGLES_ADS", ATS_TOA_1P_ADSR_sa_aatsr_rec_data, "Nadir view solar angles ADS"}, {"FWARD_VIEW_SOLAR_ANGLES_ADS", "FWARD_VIEW_SOLAR_ANGLES_ADS", ATS_TOA_1P_ADSR_sa_aatsr_rec_data, "Forward view solar angles ADS"}, {"VISIBLE_CALIB_COEFS_GADS", "VISIBLE_CALIB_COEFS_GADS", ATS_VC1_AX_GADS_aatsr_rec_data, "Visible calibration coefficients GADS"}, {"NADIR_VIEW_SCAN_PIX_NUM_ADS", "NADIR_VIEW_SCAN_PIX_NUM_ADS", ATS_TOA_1P_ADSR_pix_aatsr_rec_data, "Scan and pixel number nadir view ADS"}, {"FWARD_VIEW_SCAN_PIX_NUM_ADS", "FWARD_VIEW_SCAN_PIX_NUM_ADS", ATS_TOA_1P_ADSR_pix_aatsr_rec_data, "Scan and pixel number forward view ADS"}, {"11500_12500_NM_NADIR_TOA_MDS", "11500_12500_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "12 micron nadir view MDS"}, {"10400_11300_NM_NADIR_TOA_MDS", "10400_11300_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "11 micron nadir view MDS"}, {"03505_03895_NM_NADIR_TOA_MDS", "03505_03895_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "3.7 micron nadir view MDS"}, {"01580_01640_NM_NADIR_TOA_MDS", "01580_01640_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "1.6 micron nadir view MDS"}, {"00855_00875_NM_NADIR_TOA_MDS", "00855_00875_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.87 micron nadir view MDS"}, {"00649_00669_NM_NADIR_TOA_MDS", "00649_00669_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.67 micron nadir view MDS"}, {"00545_00565_NM_NADIR_TOA_MDS", "00545_00565_NM_NADIR_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.55 micron nadir view MDS"}, {"11500_12500_NM_FWARD_TOA_MDS", "11500_12500_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "12 micron forward view MDS"}, {"10400_11300_NM_FWARD_TOA_MDS", "10400_11300_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "11 micron forward view MDS"}, {"03505_03895_NM_FWARD_TOA_MDS", "03505_03895_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "3.7 micron forward view MDS"}, {"01580_01640_NM_FWARD_TOA_MDS", "01580_01640_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "1.6 micron forward view MDS"}, {"00855_00875_NM_FWARD_TOA_MDS", "00855_00875_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.87 micron forward view MDS"}, {"00649_00669_NM_FWARD_TOA_MDS", "00649_00669_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.67 micron forward view MDS"}, {"00545_00565_NM_FWARD_TOA_MDS", "00545_00565_NM_FWARD_TOA_MDS", ATS_TOA_1P_MDSR_brgt_aatsr_rec_data, "0.55 micron forward view MDS"}, {"NADIR_VIEW_CONFIDENCE_MDS", "NADIR_VIEW_CONFIDENCE_MDS", ATS_TOA_1P_MDSR_conf_aatsr_rec_data, "Confidence words nadir view MDS"}, {"FWARD_VIEW_CONFIDENCE_MDS", "FWARD_VIEW_CONFIDENCE_MDS", ATS_TOA_1P_MDSR_conf_aatsr_rec_data, "Confidence words forward view MDS"}, {"NADIR_VIEW_CLOUD_MDS", "NADIR_VIEW_CLOUD_MDS", ATS_TOA_1P_MDSR_cl_aatsr_rec_data, "Cloud flag nadir view MDS"}, {"FWARD_VIEW_CLOUD_MDS", "FWARD_VIEW_CLOUD_MDS", ATS_TOA_1P_MDSR_cl_aatsr_rec_data, "Cloud flag forward view MDS"} }; static const struct DatasetDescriptor MER_FR__1P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__1P_ADSR_sq_meris_rec_data, "Level 1b Summary Quality ADS(SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__1P_GADS_sfgi_meris_rec_data, "Level 1b GADS Scaling Factor and General Info"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 1b ADS Tie Point Location and Auxiliary Data (LADS)"}, {"Radiance_1", "Radiance MDS(1)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (1) TOA Radiance"}, {"Radiance_2", "Radiance MDS(2)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (2) TOA Radiance"}, {"Radiance_3", "Radiance MDS(3)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (3) TOA Radiance"}, {"Radiance_4", "Radiance MDS(4)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (4) TOA Radiance"}, {"Radiance_5", "Radiance MDS(5)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (5) TOA Radiance"}, {"Radiance_6", "Radiance MDS(6)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (6) TOA Radiance"}, {"Radiance_7", "Radiance MDS(7)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (7) TOA Radiance"}, {"Radiance_8", "Radiance MDS(8)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (8) TOA Radiance"}, {"Radiance_9", "Radiance MDS(9)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (9) TOA Radiance"}, {"Radiance_10", "Radiance MDS(10)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (10) TOA Radiance"}, {"Radiance_11", "Radiance MDS(11)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (11) TOA Radiance"}, {"Radiance_12", "Radiance MDS(12)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (12) TOA Radiance"}, {"Radiance_13", "Radiance MDS(13)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (13) TOA Radiance"}, {"Radiance_14", "Radiance MDS(14)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (14) TOA Radiance"}, {"Radiance_15", "Radiance MDS(15)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (15) TOA Radiance"}, {"Flags", "Flags MDS(16)", MER_RR__1P_MDSR_16_meris_rec_data, "Level 1b MDS (16) Flags & Detector Index"} }; static const struct DatasetDescriptor MER_FR__1P_IODD5_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__1P_ADSR_sq_meris_rec_data, "Level 1b Summary Quality ADS(SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__1P_GADS_sfgi_meris_rec_data, "Level 1b GADS Scaling Factor and General Info"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 1b ADS Tie Point Location and Auxiliary Data (LADS)"}, {"Radiance_1", "Radiance MDS(1)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (1) TOA Radiance"}, {"Radiance_2", "Radiance MDS(2)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (2) TOA Radiance"}, {"Radiance_3", "Radiance MDS(3)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (3) TOA Radiance"}, {"Radiance_4", "Radiance MDS(4)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (4) TOA Radiance"}, {"Radiance_5", "Radiance MDS(5)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (5) TOA Radiance"}, {"Radiance_6", "Radiance MDS(6)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (6) TOA Radiance"}, {"Radiance_7", "Radiance MDS(7)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (7) TOA Radiance"}, {"Radiance_8", "Radiance MDS(8)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (8) TOA Radiance"}, {"Radiance_9", "Radiance MDS(9)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (9) TOA Radiance"}, {"Radiance_10", "Radiance MDS(10)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (10) TOA Radiance"}, {"Radiance_11", "Radiance MDS(11)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (11) TOA Radiance"}, {"Radiance_12", "Radiance MDS(12)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (12) TOA Radiance"}, {"Radiance_13", "Radiance MDS(13)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (13) TOA Radiance"}, {"Radiance_14", "Radiance MDS(14)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (14) TOA Radiance"}, {"Radiance_15", "Radiance MDS(15)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (15) TOA Radiance"}, {"Flags", "Flags MDS(16)", MER_RR__1P_MDSR_16_IODD5_meris_rec_data, "Level 1b MDS (16) Flags & Spectral Shift Index"} }; static const struct DatasetDescriptor MER_FR__2P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 ADS Summary Quality (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factors and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data(L ADS)"}, {"Norm_rho_surf_1", "Norm. rho_surf - MDS(1)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(1) normalised surface reflectance"}, {"Norm_rho_surf_2", "Norm. rho_surf - MDS(2)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(2) normalised surface reflectance"}, {"Norm_rho_surf_3", "Norm. rho_surf - MDS(3)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(3) normalised surface reflectance"}, {"Norm_rho_surf_4", "Norm. rho_surf - MDS(4)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(4) normalised surface reflectance"}, {"Norm_rho_surf_5", "Norm. rho_surf - MDS(5)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(5) normalised surface reflectance"}, {"Norm_rho_surf_6", "Norm. rho_surf - MDS(6)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(6) normalised surface reflectance"}, {"Norm_rho_surf_7", "Norm. rho_surf - MDS(7)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(7) normalised surface reflectance"}, {"Norm_rho_surf_8", "Norm. rho_surf - MDS(8)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(8) normalised surface reflectance"}, {"Norm_rho_surf_9", "Norm. rho_surf - MDS(9)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(9) normalised surface reflectance"}, {"Norm_rho_surf_10", "Norm. rho_surf - MDS(10)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(10) normalised surface reflectance"}, {"Norm_rho_surf_11", "Norm. rho_surf - MDS(11)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(11) normalised surface reflectance"}, {"Norm_rho_surf_12", "Norm. rho_surf - MDS(12)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(12) normalised surface reflectance"}, {"Norm_rho_surf_13", "Norm. rho_surf - MDS(13)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(13) normalised surface reflectance"}, {"Vapour_Content", "Vapour Content - MDS(14)", MER_RR__2P_MDSR_14_meris_rec_data, "Level 2 MDS(14) water vapour content"}, {"Chl_1_TOAVI_CTP", "Chl_1, TOAVI - MDS(15)", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS(15) algal index I or TOAVI"}, {"YS_SPM_Rect_rho", "YS, SPM, Rect. Rho- MDS(16)", MER_RR__2P_MDSR_16_meris_rec_data, "Level 2 MDS(16) yellow substance total suspended matter"}, {"Chl_2_BOAVI", "Chl_2, BOAVI - MDS(17)", MER_RR__2P_MDSR_17_meris_rec_data, "Level 2 MDS(17) algal index II BOAVI"}, {"Press_PAR_Alb", "Press PAR Alb - MDS(18)", MER_RR__2P_MDSR_18_meris_rec_data, "Level 2 MDS(18) surface pressure PAR cloud albedo"}, {"Alpha_OPT", "Alpha, OPT - MDS(19)", MER_RR__2P_MDSR_19_meris_rec_data, "Level 2 MDS(19) aerosol Angstrom exponent or cloud type and optical thickness"}, {"Flags", "Flags - MDS(20)", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS(20) flags"} }; static const struct DatasetDescriptor MER_FR__2P_IODD6_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 ADS Summary Quality (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factors and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data(L ADS)"}, {"Norm_rho_surf_1", "Norm. rho_surf - MDS(1)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(1) normalised surface reflectance"}, {"Norm_rho_surf_2", "Norm. rho_surf - MDS(2)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(2) normalised surface reflectance"}, {"Norm_rho_surf_3", "Norm. rho_surf - MDS(3)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(3) normalised surface reflectance"}, {"Norm_rho_surf_4", "Norm. rho_surf - MDS(4)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(4) normalised surface reflectance"}, {"Norm_rho_surf_5", "Norm. rho_surf - MDS(5)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(5) normalised surface reflectance"}, {"Norm_rho_surf_6", "Norm. rho_surf - MDS(6)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(6) normalised surface reflectance"}, {"Norm_rho_surf_7", "Norm. rho_surf - MDS(7)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(7) normalised surface reflectance"}, {"Norm_rho_surf_8", "Norm. rho_surf - MDS(8)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(8) normalised surface reflectance"}, {"Norm_rho_surf_9", "Norm. rho_surf - MDS(9)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(9) normalised surface reflectance"}, {"Norm_rho_surf_10", "Norm. rho_surf - MDS(10)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(10) normalised surface reflectance"}, {"Norm_rho_surf_11", "Norm. rho_surf - MDS(11)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(11) normalised surface reflectance"}, {"Norm_rho_surf_12", "Norm. rho_surf - MDS(12)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(12) normalised surface reflectance"}, {"Norm_rho_surf_13", "Norm. rho_surf - MDS(13)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(13) normalised surface reflectance"}, {"Vapour_Content", "Vapour Content - MDS(14)", MER_RR__2P_MDSR_14_meris_rec_data, "Level 2 MDS(14) water vapour content"}, {"Chl_1_TOAVI_CTP", "Chl_1, TOAVI - MDS(15)", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS(15) algal index I or TOAVI"}, {"YS_SPM_Rect_rho", "YS, SPM, Rect. Rho- MDS(16)", MER_RR__2P_MDSR_16_meris_rec_data, "Level 2 MDS(16) yellow substance total suspended matter"}, {"Chl_2_BOAVI", "Chl_2, BOAVI - MDS(17)", MER_RR__2P_MDSR_17_meris_rec_data, "Level 2 MDS(17) algal index II BOAVI"}, {"Press_PAR_Alb", "Press PAR Alb - MDS(18)", MER_RR__2P_MDSR_18_meris_rec_data, "Level 2 MDS(18) surface pressure PAR cloud albedo"}, {"Epsilon_OPT", "Epsilon, OPT - MDS(19)", MER_RR__2P_MDSR_19_IODD6_meris_rec_data, "Level 2 MDS(19) aerosol epsilon or cloud type and optical thickness"}, {"Flags", "Flags - MDS(20)", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS(20) flags"} }; static const struct DatasetDescriptor MER_LRC_2P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 Summary Quality ADS(SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RRC_2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factor and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data ( L ADS)"}, {"Cloud_Type_OT", "MDS Cloud Type, OT", MER_LRC_2P_MDSR_cl_thick_meris_rec_data, "Level 2 MDS Cloud Optical Thickness"}, {"Cloud_Top_Pressure", "MDS Cloud Top Pressure", MER_LRC_2P_MDSR_cl_top_press_meris_rec_data, "Level 2 MDS Cloud Top Pressure"}, {"Vapour_Content", "MDS Vapour Content", MER_LRC_2P_MDSR_twv_meris_rec_data, "Level 2 MDS Total Water vapour"}, {"Flags", "MDS Flags", MER_LRC_2P_MDSR_flag_meris_rec_data, "Level 2 MDS Flags"} }; static const struct DatasetDescriptor MER_RRC_2P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 Summary Quality ADS (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RRC_2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factor And Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux Data( L ADS)"}, {"Cloud_Type_OT", "MDS Cloud Type, OT", MER_RR__2P_MDSR_19_meris_rec_data, "Level 2 MDS Cloud Optical Thickness"}, {"Cloud_Top_Pressure", "MDS Cloud Top Pressure", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS Cloud Top Pressure"}, {"Vapour_Content", "MDS Vapour Content", MER_RR__2P_MDSR_14_meris_rec_data, "Level 2 MDS Total Water vapour"}, {"Flags", "MDS Flags", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS Flags"} }; static const struct DatasetDescriptor MER_RRV_2P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 Summary Quality ADS (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RRV_2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factor and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data (L ADS)"}, {"TOAVI", "MDS TOAVI", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS TOA Vegetable Index"}, {"BOAVI", "MDS BOAVI", MER_RR__2P_MDSR_17_meris_rec_data, "Level 2 MDS BOA Vegetable Index"}, {"Flags", "MDS Flags", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS Flag"} }; static const struct DatasetDescriptor MER_RR__1P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__1P_ADSR_sq_meris_rec_data, "Level 1b Summary Quality ADS(SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__1P_GADS_sfgi_meris_rec_data, "Level 1b GADS Scaling Factor and General Info"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 1b ADS Tie Point Location and Auxiliary Data (LADS)"}, {"Radiance_1", "Radiance MDS(1)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (1) TOA Radiance"}, {"Radiance_2", "Radiance MDS(2)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (2) TOA Radiance"}, {"Radiance_3", "Radiance MDS(3)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (3) TOA Radiance"}, {"Radiance_4", "Radiance MDS(4)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (4) TOA Radiance"}, {"Radiance_5", "Radiance MDS(5)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (5) TOA Radiance"}, {"Radiance_6", "Radiance MDS(6)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (6) TOA Radiance"}, {"Radiance_7", "Radiance MDS(7)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (7) TOA Radiance"}, {"Radiance_8", "Radiance MDS(8)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (8) TOA Radiance"}, {"Radiance_9", "Radiance MDS(9)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (9) TOA Radiance"}, {"Radiance_10", "Radiance MDS(10)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (10) TOA Radiance"}, {"Radiance_11", "Radiance MDS(11)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (11) TOA Radiance"}, {"Radiance_12", "Radiance MDS(12)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (12) TOA Radiance"}, {"Radiance_13", "Radiance MDS(13)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (13) TOA Radiance"}, {"Radiance_14", "Radiance MDS(14)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (14) TOA Radiance"}, {"Radiance_15", "Radiance MDS(15)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (15) TOA Radiance"}, {"Flags", "Flags MDS(16)", MER_RR__1P_MDSR_16_meris_rec_data, "Level 1b MDS (16) Flags & Detector Index"} }; static const struct DatasetDescriptor MER_RR__1P_IODD5_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__1P_ADSR_sq_meris_rec_data, "Level 1b Summary Quality ADS(SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__1P_GADS_sfgi_meris_rec_data, "Level 1b GADS Scaling Factor and General Info"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 1b ADS Tie Point Location and Auxiliary Data (LADS)"}, {"Radiance_1", "Radiance MDS(1)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (1) TOA Radiance"}, {"Radiance_2", "Radiance MDS(2)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (2) TOA Radiance"}, {"Radiance_3", "Radiance MDS(3)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (3) TOA Radiance"}, {"Radiance_4", "Radiance MDS(4)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (4) TOA Radiance"}, {"Radiance_5", "Radiance MDS(5)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (5) TOA Radiance"}, {"Radiance_6", "Radiance MDS(6)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (6) TOA Radiance"}, {"Radiance_7", "Radiance MDS(7)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (7) TOA Radiance"}, {"Radiance_8", "Radiance MDS(8)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (8) TOA Radiance"}, {"Radiance_9", "Radiance MDS(9)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (9) TOA Radiance"}, {"Radiance_10", "Radiance MDS(10)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (10) TOA Radiance"}, {"Radiance_11", "Radiance MDS(11)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (11) TOA Radiance"}, {"Radiance_12", "Radiance MDS(12)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (12) TOA Radiance"}, {"Radiance_13", "Radiance MDS(13)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (13) TOA Radiance"}, {"Radiance_14", "Radiance MDS(14)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (14) TOA Radiance"}, {"Radiance_15", "Radiance MDS(15)", MER_RR__1P_MDSR_1_15_meris_rec_data, "Level 1b MDS (15) TOA Radiance"}, {"Flags", "Flags MDS(16)", MER_RR__1P_MDSR_16_IODD5_meris_rec_data, "Level 1b MDS (16) Flags & Spectral Shift Index"} }; static const struct DatasetDescriptor MER_RR__2P_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 ADS Summary Quality (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factors and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data(L ADS)"}, {"Norm_rho_surf_1", "Norm. rho_surf - MDS(1)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(1) normalised surface reflectance"}, {"Norm_rho_surf_2", "Norm. rho_surf - MDS(2)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(2) normalised surface reflectance"}, {"Norm_rho_surf_3", "Norm. rho_surf - MDS(3)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(3) normalised surface reflectance"}, {"Norm_rho_surf_4", "Norm. rho_surf - MDS(4)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(4) normalised surface reflectance"}, {"Norm_rho_surf_5", "Norm. rho_surf - MDS(5)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(5) normalised surface reflectance"}, {"Norm_rho_surf_6", "Norm. rho_surf - MDS(6)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(6) normalised surface reflectance"}, {"Norm_rho_surf_7", "Norm. rho_surf - MDS(7)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(7) normalised surface reflectance"}, {"Norm_rho_surf_8", "Norm. rho_surf - MDS(8)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(8) normalised surface reflectance"}, {"Norm_rho_surf_9", "Norm. rho_surf - MDS(9)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(9) normalised surface reflectance"}, {"Norm_rho_surf_10", "Norm. rho_surf - MDS(10)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(10) normalised surface reflectance"}, {"Norm_rho_surf_11", "Norm. rho_surf - MDS(11)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(11) normalised surface reflectance"}, {"Norm_rho_surf_12", "Norm. rho_surf - MDS(12)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(12) normalised surface reflectance"}, {"Norm_rho_surf_13", "Norm. rho_surf - MDS(13)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(13) normalised surface reflectance"}, {"Vapour_Content", "Vapour Content - MDS(14)", MER_RR__2P_MDSR_14_meris_rec_data, "Level 2 MDS(14) water vapour content"}, {"Chl_1_TOAVI_CTP", "Chl_1, TOAVI - MDS(15)", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS(15) algal index I or TOAVI"}, {"YS_SPM_Rect_rho", "YS, SPM, Rect. Rho- MDS(16)", MER_RR__2P_MDSR_16_meris_rec_data, "Level 2 MDS(16) yellow substance total suspended matter"}, {"Chl_2_BOAVI", "Chl_2, BOAVI - MDS(17)", MER_RR__2P_MDSR_17_meris_rec_data, "Level 2 MDS(17) algal index II BOAVI"}, {"Press_PAR_Alb", "Press PAR Alb - MDS(18)", MER_RR__2P_MDSR_18_meris_rec_data, "Level 2 MDS(18) surface pressure PAR cloud albedo"}, {"Alpha_OPT", "Alpha, OPT - MDS(19)", MER_RR__2P_MDSR_19_meris_rec_data, "Level 2 MDS(19) aerosol Angstrom exponent or cloud type and optical thickness"}, {"Flags", "Flags - MDS(20)", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS(20) flags"} }; static const struct DatasetDescriptor MER_RR__2P_IODD6_dataset_data[] = { {"Quality_ADS", "Quality ADS", MER_RR__2P_ADSR_sq_meris_rec_data, "Level 2 ADS Summary Quality (SQ ADS)"}, {"Scaling_Factor_GADS", "Scaling Factor GADS", MER_RR__2P_GADS_sfgi_meris_rec_data, "Level 2 GADS Scaling Factors and Offsets"}, {"Tie_points_ADS", "Tie points ADS", MER_RR__1P_ADSR_tie_pt_meris_rec_data, "Level 2 ADS Tie Points Location & Aux. Data(L ADS)"}, {"Norm_rho_surf_1", "Norm. rho_surf - MDS(1)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(1) normalised surface reflectance"}, {"Norm_rho_surf_2", "Norm. rho_surf - MDS(2)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(2) normalised surface reflectance"}, {"Norm_rho_surf_3", "Norm. rho_surf - MDS(3)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(3) normalised surface reflectance"}, {"Norm_rho_surf_4", "Norm. rho_surf - MDS(4)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(4) normalised surface reflectance"}, {"Norm_rho_surf_5", "Norm. rho_surf - MDS(5)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(5) normalised surface reflectance"}, {"Norm_rho_surf_6", "Norm. rho_surf - MDS(6)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(6) normalised surface reflectance"}, {"Norm_rho_surf_7", "Norm. rho_surf - MDS(7)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(7) normalised surface reflectance"}, {"Norm_rho_surf_8", "Norm. rho_surf - MDS(8)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(8) normalised surface reflectance"}, {"Norm_rho_surf_9", "Norm. rho_surf - MDS(9)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(9) normalised surface reflectance"}, {"Norm_rho_surf_10", "Norm. rho_surf - MDS(10)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(10) normalised surface reflectance"}, {"Norm_rho_surf_11", "Norm. rho_surf - MDS(11)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(11) normalised surface reflectance"}, {"Norm_rho_surf_12", "Norm. rho_surf - MDS(12)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(12) normalised surface reflectance"}, {"Norm_rho_surf_13", "Norm. rho_surf - MDS(13)", MER_RR__2P_MDSR_1_13_meris_rec_data, "Level 2 MDS(13) normalised surface reflectance"}, {"Vapour_Content", "Vapour Content - MDS(14)", MER_RR__2P_MDSR_14_meris_rec_data, "Level 2 MDS(14) water vapour content"}, {"Chl_1_TOAVI_CTP", "Chl_1, TOAVI - MDS(15)", MER_RR__2P_MDSR_15_meris_rec_data, "Level 2 MDS(15) algal index I or TOAVI"}, {"YS_SPM_Rect_rho", "YS, SPM, Rect. Rho- MDS(16)", MER_RR__2P_MDSR_16_meris_rec_data, "Level 2 MDS(16) yellow substance total suspended matter"}, {"Chl_2_BOAVI", "Chl_2, BOAVI - MDS(17)", MER_RR__2P_MDSR_17_meris_rec_data, "Level 2 MDS(17) algal index II BOAVI"}, {"Press_PAR_Alb", "Press PAR Alb - MDS(18)", MER_RR__2P_MDSR_18_meris_rec_data, "Level 2 MDS(18) surface pressure PAR cloud albedo"}, {"Epsilon_OPT", "Epsilon, OPT - MDS(19)", MER_RR__2P_MDSR_19_IODD6_meris_rec_data, "Level 2 MDS(19) aerosol epsilon or cloud type and optical thickness"}, {"Flags", "Flags - MDS(20)", MER_RR__2P_MDSR_20_meris_rec_data, "Level 2 MDS(20) flags"} }; static const struct BandDescriptor ASA_APG_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data_1", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Geocoded Image"}, {"proc_data_2", "MDS2.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Geocoded Image"} }; static const struct BandDescriptor ASA_APM_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data_1", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Medium Resolution Image"}, {"proc_data_2", "MDS2.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Medium Resolution Image"} }; static const struct BandDescriptor ASA_APP_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data_1", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Precision Mode Image"}, {"proc_data_2", "MDS2.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Precision Mode Image"} }; static const struct BandDescriptor ASA_APS_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"i", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization SLC Image (i)"}, {"q", "MDS2.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization SLC Image (q)"} }; static const struct BandDescriptor ASA_AP__BP_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Mode Browse Product"} }; static const struct BandDescriptor ASA_IMG_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode Geocoded Image"} }; static const struct BandDescriptor ASA_IMM_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode Medium Resolution Image (stripline)"} }; static const struct BandDescriptor ASA_IMP_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode Precision Image"} }; static const struct BandDescriptor ASA_IMS_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"i", "MDS1.4", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode SLC Image (i)"}, {"q", "MDS1.4", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode SLC Image (q)"} }; static const struct BandDescriptor ASA_IM__BP_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Image Mode Browse Image"} }; static const struct BandDescriptor ASA_WSM_1P_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Wide Swath Mode Medium Resolution Image"} }; static const struct BandDescriptor ASA_WS__BP_band_data[] = { {"slant_range_time", "GEOLOCATION_GRID_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "ns", "2 way slant range time"}, {"incident_angle", "GEOLOCATION_GRID_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "deg", "Incident angle"}, {"latitude", "GEOLOCATION_GRID_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "GEOLOCATION_GRID_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"proc_data", "MDS1.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, NULL, "Alternating Polarization Mode Browse Product"} }; static const struct BandDescriptor ATS_NR__2P_band_data[] = { {"latitude", "GEOLOCATION_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitudes"}, {"longitude", "GEOLOCATION_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitudes"}, {"lat_corr_nadir", "GEOLOCATION_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude corrections, nadir view"}, {"lon_corr_nadir", "GEOLOCATION_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude corrections, nadir view"}, {"lat_corr_fward", "GEOLOCATION_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude corrections, forward view"}, {"lon_corr_fward", "GEOLOCATION_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude corrections, forward view"}, {"altitude", "GEOLOCATION_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Topographic altitude"}, {"sun_elev_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar elevation nadir view"}, {"view_elev_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite elevation nadir view"}, {"sun_azimuth_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar azimuth nadir view"}, {"view_azimuth_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite azimuth nadir view"}, {"sun_elev_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar elevation forward view"}, {"view_elev_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite elevation forward view"}, {"sun_azimuth_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar azimuth forward view"}, {"view_azimuth_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite azimuth forward view"}, {"sst_nadir", "DISTRIB_SST_CLOUD_LAND_MDS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", "!flags.NADIR_CLOUD and !flags.LAND", NULL, "K", "Sea surface temperature nadir view"}, {"sst_comb", "DISTRIB_SST_CLOUD_LAND_MDS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", "!flags.NADIR_CLOUD and !flags.LAND", NULL, "K", "Sea surface temperature combined views"}, {"cloud_top_temp", "DISTRIB_SST_CLOUD_LAND_MDS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", "flags.NADIR_CLOUD", NULL, "K", "Cloud top temperature"}, {"cloud_top_height", "DISTRIB_SST_CLOUD_LAND_MDS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", "flags.NADIR_CLOUD", NULL, "m", "Cloud top height"}, {"lst", "DISTRIB_SST_CLOUD_LAND_MDS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", "!flags.NADIR_CLOUD and flags.LAND", NULL, "K", "Land surface temperature"}, {"ndvi", "DISTRIB_SST_CLOUD_LAND_MDS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.0001", "!flags.NADIR_CLOUD and flags.LAND", NULL, NULL, "Normalized difference vegetation index"}, {"flags", "DISTRIB_SST_CLOUD_LAND_MDS.5", e_smod_1OF1, e_tid_ushort, -1, e_smid_non, NULL, NULL, NULL, "ATS_NR__2P_flags", NULL, "Classification and quality flags"} }; static const struct BandDescriptor ATS_TOA_1P_band_data[] = { {"latitude", "GEOLOCATION_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitudes"}, {"longitude", "GEOLOCATION_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitudes"}, {"lat_corr_nadir", "GEOLOCATION_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude corrections, nadir view"}, {"lon_corr_nadir", "GEOLOCATION_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude corrections, nadir view"}, {"lat_corr_fward", "GEOLOCATION_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude corrections, forward view"}, {"lon_corr_fward", "GEOLOCATION_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude corrections, forward view"}, {"altitude", "GEOLOCATION_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Topographic altitude"}, {"sun_elev_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar elevation, nadir view"}, {"view_elev_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite elevation, nadir view"}, {"sun_azimuth_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar azimuth, nadir view"}, {"view_azimuth_nadir", "NADIR_VIEW_SOLAR_ANGLES_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite azimuth, nadir view"}, {"sun_elev_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar elevation, forward view"}, {"view_elev_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite elevation, forward view"}, {"sun_azimuth_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Solar azimuth, forward view"}, {"view_azimuth_fward", "FWARD_VIEW_SOLAR_ANGLES_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-03", NULL, NULL, "deg", "Satellite azimuth, forward view"}, {"btemp_nadir_1200", "11500_12500_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, nadir view (11500-12500 nm)"}, {"btemp_nadir_1100", "10400_11300_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, nadir view (10400-11300 nm)"}, {"btemp_nadir_0370", "03505_03895_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, nadir view (3505-3895 nm)"}, {"reflec_nadir_1600", "01580_01640_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, nadir view (1580-1640 nm)"}, {"reflec_nadir_0870", "00855_00875_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, nadir view (855-875 nm)"}, {"reflec_nadir_0670", "00649_00669_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, nadir view (649-669 nm)"}, {"reflec_nadir_0550", "00545_00565_NM_NADIR_TOA_MDS.5", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, nadir view (545-565 nm)"}, {"btemp_fward_1200", "11500_12500_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, forward view (11500-12500 nm)"}, {"btemp_fward_1100", "10400_11300_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, forward view (10400-11300 nm)"}, {"btemp_fward_0370", "03505_03895_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "0.01", NULL, NULL, "K", "Brightness temperature, forward view (3505-3895 nm)"}, {"reflec_fward_1600", "01580_01640_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, forward view (1580-1640 nm)"}, {"reflec_fward_0870", "00855_00875_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, forward view (855-875 nm)"}, {"reflec_fward_0670", "00649_00669_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, forward view (649-669 nm)"}, {"reflec_fward_0550", "00545_00565_NM_FWARD_TOA_MDS.5", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "0.01", NULL, NULL, "%", "Refectance, forward view (545-565 nm)"}, {"confid_flags_nadir", "NADIR_VIEW_CONFIDENCE_MDS.5", e_smod_1OF1, e_tid_ushort, -1, e_smid_non, NULL, NULL, NULL, "ATS_TOA_1P_confid_flags", NULL, "Confidence flags, nadir view"}, {"confid_flags_fward", "FWARD_VIEW_CONFIDENCE_MDS.5", e_smod_1OF1, e_tid_ushort, -1, e_smid_non, NULL, NULL, NULL, "ATS_TOA_1P_confid_flags", NULL, "Confidence flags, forward view"}, {"cloud_flags_nadir", "NADIR_VIEW_CLOUD_MDS.5", e_smod_1OF1, e_tid_ushort, -1, e_smid_non, NULL, NULL, NULL, "ATS_TOA_1P_cloud_flags", NULL, "Cloud flags, nadir view"}, {"cloud_flags_fward", "FWARD_VIEW_CLOUD_MDS.5", e_smod_1OF1, e_tid_ushort, -1, e_smid_non, NULL, NULL, NULL, "ATS_TOA_1P_cloud_flags", NULL, "Cloud flags, forward view"} }; static const struct BandDescriptor MER_FR__1P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"radiance_1", "Radiance_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.1", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 1"}, {"radiance_2", "Radiance_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.2", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 2"}, {"radiance_3", "Radiance_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.3", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 3"}, {"radiance_4", "Radiance_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.4", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 4"}, {"radiance_5", "Radiance_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.5", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 5"}, {"radiance_6", "Radiance_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.6", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 6"}, {"radiance_7", "Radiance_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.7", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 7"}, {"radiance_8", "Radiance_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.8", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 8"}, {"radiance_9", "Radiance_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.9", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 9"}, {"radiance_10", "Radiance_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.10", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 10"}, {"radiance_11", "Radiance_11.3", e_smod_1OF1, e_tid_float, 11, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.11", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 11"}, {"radiance_12", "Radiance_12.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.12", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 12"}, {"radiance_13", "Radiance_13.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.13", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 13"}, {"radiance_14", "Radiance_14.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.14", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 14"}, {"radiance_15", "Radiance_15.3", e_smod_1OF1, e_tid_float, 15, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.15", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 15"}, {"l1_flags", "Flags.3", e_smod_1OF1, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__1P_flags", NULL, "Level 1b classification and quality flags"}, {"detector_index", "Flags.4", e_smod_1OF1, e_tid_short, -1, e_smid_non, NULL, NULL, NULL, NULL, NULL, "Detector index"} }; static const struct BandDescriptor MER_FR__1P_IODD5_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"radiance_1", "Radiance_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.1", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 1"}, {"radiance_2", "Radiance_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.2", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 2"}, {"radiance_3", "Radiance_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.3", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 3"}, {"radiance_4", "Radiance_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.4", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 4"}, {"radiance_5", "Radiance_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.5", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 5"}, {"radiance_6", "Radiance_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.6", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 6"}, {"radiance_7", "Radiance_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.7", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 7"}, {"radiance_8", "Radiance_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.8", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 8"}, {"radiance_9", "Radiance_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.9", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 9"}, {"radiance_10", "Radiance_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.10", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 10"}, {"radiance_11", "Radiance_11.3", e_smod_1OF1, e_tid_float, 11, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.11", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 11"}, {"radiance_12", "Radiance_12.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.12", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 12"}, {"radiance_13", "Radiance_13.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.13", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 13"}, {"radiance_14", "Radiance_14.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.14", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 14"}, {"radiance_15", "Radiance_15.3", e_smod_1OF1, e_tid_float, 15, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.15", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 15"}, {"l1_flags", "Flags.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__1P_flags", NULL, "Level 1b classification and quality flags"}, {"ssi", "Flags.3", e_smod_2OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, NULL, NULL, "Spectral shift index"} }; static const struct BandDescriptor MER_FR__2P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"reflec_1", "Norm_rho_surf_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "Scaling_Factor_GADS.22.1", "Scaling_Factor_GADS.8.1", NULL, NULL, "dl", "Normalized surface reflectance, band 1"}, {"reflec_2", "Norm_rho_surf_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "Scaling_Factor_GADS.22.2", "Scaling_Factor_GADS.8.2", NULL, NULL, "dl", "Normalized surface reflectance, band 2"}, {"reflec_3", "Norm_rho_surf_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "Scaling_Factor_GADS.22.3", "Scaling_Factor_GADS.8.3", NULL, NULL, "dl", "Normalized surface reflectance, band 3"}, {"reflec_4", "Norm_rho_surf_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "Scaling_Factor_GADS.22.4", "Scaling_Factor_GADS.8.4", NULL, NULL, "dl", "Normalized surface reflectance, band 4"}, {"reflec_5", "Norm_rho_surf_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "Scaling_Factor_GADS.22.5", "Scaling_Factor_GADS.8.5", NULL, NULL, "dl", "Normalized surface reflectance, band 5"}, {"reflec_6", "Norm_rho_surf_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "Scaling_Factor_GADS.22.6", "Scaling_Factor_GADS.8.6", NULL, NULL, "dl", "Normalized surface reflectance, band 6"}, {"reflec_7", "Norm_rho_surf_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "Scaling_Factor_GADS.22.7", "Scaling_Factor_GADS.8.7", NULL, NULL, "dl", "Normalized surface reflectance, band 7"}, {"reflec_8", "Norm_rho_surf_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "Scaling_Factor_GADS.22.8", "Scaling_Factor_GADS.8.8", NULL, NULL, "dl", "Normalized surface reflectance, band 8"}, {"reflec_9", "Norm_rho_surf_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "Scaling_Factor_GADS.22.9", "Scaling_Factor_GADS.8.9", NULL, NULL, "dl", "Normalized surface reflectance, band 9"}, {"reflec_10", "Norm_rho_surf_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "Scaling_Factor_GADS.22.10", "Scaling_Factor_GADS.8.10", NULL, NULL, "dl", "Normalized surface reflectance, band 10"}, {"reflec_12", "Norm_rho_surf_11.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "Scaling_Factor_GADS.22.11", "Scaling_Factor_GADS.8.11", NULL, NULL, "dl", "Normalized surface reflectance, band 12"}, {"reflec_13", "Norm_rho_surf_12.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "Scaling_Factor_GADS.22.12", "Scaling_Factor_GADS.8.12", NULL, NULL, "dl", "Normalized surface reflectance, band 13"}, {"reflec_14", "Norm_rho_surf_13.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "Scaling_Factor_GADS.22.13", "Scaling_Factor_GADS.8.13", NULL, NULL, "dl", "Normalized surface reflectance, band 14"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.30.1", "Scaling_Factor_GADS.16.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"algal_1", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 1 content"}, {"algal_2", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 2 content"}, {"yellow_subs", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.24.1", "Scaling_Factor_GADS.10.1", "l2_flags.WATER", NULL, "1/m", "Yellow substance"}, {"total_susp", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.25.1", "Scaling_Factor_GADS.11.1", "l2_flags.WATER", NULL, "g/m^3", "Total suspended matter"}, {"photosyn_rad", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.31.1", "Scaling_Factor_GADS.17.1", "l2_flags.WATER", NULL, "myEinstein/(m^2*s)", "Photosynthetically active radiation"}, {"toa_veg", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.32.1", "Scaling_Factor_GADS.18.1", "l2_flags.LAND", NULL, "1", "MGVI - MERIS global vegetation index"}, {"boa_veg", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.33.1", "Scaling_Factor_GADS.19.1", "l2_flags.LAND", NULL, "1", "MTCI - MERIS terrestrial chlorophyll index"}, {"rect_refl_red", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.40.1", "Scaling_Factor_GADS.39.1", "l2_flags.LAND", NULL, "dl", "Rectified reflectance in a red band"}, {"rect_refl_nir", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.42.1", "Scaling_Factor_GADS.41.1", "l2_flags.LAND", NULL, "dl", "Rectified reflectances in a near infrared band"}, {"surf_press", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.29.1", "Scaling_Factor_GADS.15.1", "l2_flags.LAND", NULL, "hPa", "Surface pressure"}, {"aero_alpha", "Alpha_OPT.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.26.1", "Scaling_Factor_GADS.12.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol Angstrom exponent"}, {"aero_opt_thick_443", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.LAND", NULL, "dl", "Aerosol optical thickness at 443 nm"}, {"aero_opt_thick_865", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.WATER", NULL, "dl", "Aerosol optical thickness at 865 nm"}, {"cloud_albedo", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.34.1", "Scaling_Factor_GADS.20.1", "l2_flags.CLOUD", NULL, "dl", "Cloud albedo"}, {"cloud_opt_thick", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.28.1", "Scaling_Factor_GADS.14.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.35.1", "Scaling_Factor_GADS.21.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"cloud_type", "Alpha_OPT.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, "l2_flags.CLOUD", NULL, NULL, "Cloud type"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags", NULL, "Level 2 classification and quality flags"} }; static const struct BandDescriptor MER_FR__2P_IODD6_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"reflec_1", "Norm_rho_surf_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "Scaling_Factor_GADS.22.1", "Scaling_Factor_GADS.8.1", NULL, NULL, "dl", "Normalized surface reflectance, band 1"}, {"reflec_2", "Norm_rho_surf_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "Scaling_Factor_GADS.22.2", "Scaling_Factor_GADS.8.2", NULL, NULL, "dl", "Normalized surface reflectance, band 2"}, {"reflec_3", "Norm_rho_surf_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "Scaling_Factor_GADS.22.3", "Scaling_Factor_GADS.8.3", NULL, NULL, "dl", "Normalized surface reflectance, band 3"}, {"reflec_4", "Norm_rho_surf_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "Scaling_Factor_GADS.22.4", "Scaling_Factor_GADS.8.4", NULL, NULL, "dl", "Normalized surface reflectance, band 4"}, {"reflec_5", "Norm_rho_surf_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "Scaling_Factor_GADS.22.5", "Scaling_Factor_GADS.8.5", NULL, NULL, "dl", "Normalized surface reflectance, band 5"}, {"reflec_6", "Norm_rho_surf_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "Scaling_Factor_GADS.22.6", "Scaling_Factor_GADS.8.6", NULL, NULL, "dl", "Normalized surface reflectance, band 6"}, {"reflec_7", "Norm_rho_surf_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "Scaling_Factor_GADS.22.7", "Scaling_Factor_GADS.8.7", NULL, NULL, "dl", "Normalized surface reflectance, band 7"}, {"reflec_8", "Norm_rho_surf_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "Scaling_Factor_GADS.22.8", "Scaling_Factor_GADS.8.8", NULL, NULL, "dl", "Normalized surface reflectance, band 8"}, {"reflec_9", "Norm_rho_surf_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "Scaling_Factor_GADS.22.9", "Scaling_Factor_GADS.8.9", NULL, NULL, "dl", "Normalized surface reflectance, band 9"}, {"reflec_10", "Norm_rho_surf_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "Scaling_Factor_GADS.22.10", "Scaling_Factor_GADS.8.10", NULL, NULL, "dl", "Normalized surface reflectance, band 10"}, {"reflec_12", "Norm_rho_surf_11.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "Scaling_Factor_GADS.22.11", "Scaling_Factor_GADS.8.11", NULL, NULL, "dl", "Normalized surface reflectance, band 12"}, {"reflec_13", "Norm_rho_surf_12.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "Scaling_Factor_GADS.22.12", "Scaling_Factor_GADS.8.12", NULL, NULL, "dl", "Normalized surface reflectance, band 13"}, {"reflec_14", "Norm_rho_surf_13.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "Scaling_Factor_GADS.22.13", "Scaling_Factor_GADS.8.13", NULL, NULL, "dl", "Normalized surface reflectance, band 14"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.30.1", "Scaling_Factor_GADS.16.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"algal_1", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 1 content"}, {"algal_2", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 2 content"}, {"yellow_subs", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.24.1", "Scaling_Factor_GADS.10.1", "l2_flags.WATER", NULL, "1/m", "Yellow substance"}, {"total_susp", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.25.1", "Scaling_Factor_GADS.11.1", "l2_flags.WATER", NULL, "g/m^3", "Total suspended matter"}, {"photosyn_rad", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.31.1", "Scaling_Factor_GADS.17.1", "l2_flags.WATER", NULL, "myEinstein/m^2", "Photosynthetically active radiation"}, {"toa_veg", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.32.1", "Scaling_Factor_GADS.18.1", "l2_flags.LAND", NULL, "1", "TOA vegetation index"}, {"boa_veg", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.33.1", "Scaling_Factor_GADS.19.1", "l2_flags.LAND", NULL, "1", "BOA vegetation index"}, {"rect_refl_nir", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.40.1", "Scaling_Factor_GADS.39.1", "l2_flags.LAND", NULL, "dl", "Rectified surface reflectances"}, {"rect_refl_red", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.42.1", "Scaling_Factor_GADS.41.1", "l2_flags.LAND", NULL, "dl", "Rectified surface reflectances"}, {"surf_press", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.29.1", "Scaling_Factor_GADS.15.1", "l2_flags.LAND", NULL, "hPa", "Surface pressure"}, {"aero_epsilon", "Epsilon_OPT.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.26.1", "Scaling_Factor_GADS.12.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol epsilon"}, {"aero_opt_thick", "Epsilon_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol optical thickness"}, {"cloud_albedo", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.34.1", "Scaling_Factor_GADS.20.1", "l2_flags.CLOUD", NULL, "dl", "Cloud albedo"}, {"cloud_opt_thick", "Epsilon_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.28.1", "Scaling_Factor_GADS.14.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.35.1", "Scaling_Factor_GADS.21.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"cloud_type", "Epsilon_OPT.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, "l2_flags.CLOUD", NULL, NULL, "Cloud type"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags_IODD6", NULL, "Level 2 classification and quality flags"} }; static const struct BandDescriptor MER_LRC_2P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "dl", "Relative humidity"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.6.1", "Scaling_Factor_GADS.3.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"cloud_opt_thick", "Cloud_Type_OT.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.4.1", "Scaling_Factor_GADS.1.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Cloud_Top_Pressure.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.5.1", "Scaling_Factor_GADS.2.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags", NULL, "Level 2 classification and quality flags"} }; static const struct BandDescriptor MER_RRC_2P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "dl", "Relative humidity"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.6.1", "Scaling_Factor_GADS.3.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"cloud_opt_thick", "Cloud_Type_OT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.4.1", "Scaling_Factor_GADS.1.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Cloud_Top_Pressure.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.5.1", "Scaling_Factor_GADS.2.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"cloud_type", "Cloud_Type_OT.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, "l2_flags.CLOUD", NULL, NULL, "Cloud type"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags", NULL, "Level 2 Classification and quality flags"} }; static const struct BandDescriptor MER_RRV_2P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.01", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "0.1", NULL, NULL, "dl", "Relative humidity"}, {"toa_veg", "TOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.3.1", "Scaling_Factor_GADS.1.1", "l2_flags.LAND", NULL, "dl", "TOA vegetation index"}, {"boa_veg", "BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.4.1", "Scaling_Factor_GADS.2.1", "l2_flags.LAND", NULL, "dl", "BOA vegetation index"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags", NULL, "Level 2 Classification and quality flags"} }; static const struct BandDescriptor MER_RR__1P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"radiance_1", "Radiance_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.1", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 1"}, {"radiance_2", "Radiance_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.2", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 2"}, {"radiance_3", "Radiance_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.3", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 3"}, {"radiance_4", "Radiance_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.4", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 4"}, {"radiance_5", "Radiance_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.5", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 5"}, {"radiance_6", "Radiance_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.6", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 6"}, {"radiance_7", "Radiance_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.7", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 7"}, {"radiance_8", "Radiance_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.8", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 8"}, {"radiance_9", "Radiance_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.9", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 9"}, {"radiance_10", "Radiance_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.10", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 10"}, {"radiance_11", "Radiance_11.3", e_smod_1OF1, e_tid_float, 11, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.11", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 11"}, {"radiance_12", "Radiance_12.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.12", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 12"}, {"radiance_13", "Radiance_13.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.13", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 13"}, {"radiance_14", "Radiance_14.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.14", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 14"}, {"radiance_15", "Radiance_15.3", e_smod_1OF1, e_tid_float, 15, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.15", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 15"}, {"l1_flags", "Flags.3", e_smod_1OF1, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__1P_flags", NULL, "Level 1b classification and quality flags"}, {"detector_index", "Flags.4", e_smod_1OF1, e_tid_short, -1, e_smid_non, NULL, NULL, NULL, NULL, NULL, "Detector index"} }; static const struct BandDescriptor MER_RR__1P_IODD5_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"radiance_1", "Radiance_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.1", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 1"}, {"radiance_2", "Radiance_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.2", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 2"}, {"radiance_3", "Radiance_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.3", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 3"}, {"radiance_4", "Radiance_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.4", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 4"}, {"radiance_5", "Radiance_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.5", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 5"}, {"radiance_6", "Radiance_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.6", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 6"}, {"radiance_7", "Radiance_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.7", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 7"}, {"radiance_8", "Radiance_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.8", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 8"}, {"radiance_9", "Radiance_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.9", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 9"}, {"radiance_10", "Radiance_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.10", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 10"}, {"radiance_11", "Radiance_11.3", e_smod_1OF1, e_tid_float, 11, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.11", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 11"}, {"radiance_12", "Radiance_12.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.12", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 12"}, {"radiance_13", "Radiance_13.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.13", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 13"}, {"radiance_14", "Radiance_14.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.14", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 14"}, {"radiance_15", "Radiance_15.3", e_smod_1OF1, e_tid_float, 15, e_smid_lin, "0.0", "Scaling_Factor_GADS.8.15", "!l1_flags.INVALID", NULL, "mW/(m^2*sr*nm)", "TOA radiance band 15"}, {"l1_flags", "Flags.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__1P_flags", NULL, "Level 1b classification and quality flags"}, {"ssi", "Flags.3", e_smod_2OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, NULL, NULL, NULL, "Spectral shift index"} }; static const struct BandDescriptor MER_RR__2P_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"reflec_1", "Norm_rho_surf_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "Scaling_Factor_GADS.22.1", "Scaling_Factor_GADS.8.1", NULL, NULL, "dl", "Normalized surface reflectance, band 1"}, {"reflec_2", "Norm_rho_surf_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "Scaling_Factor_GADS.22.2", "Scaling_Factor_GADS.8.2", NULL, NULL, "dl", "Normalized surface reflectance, band 2"}, {"reflec_3", "Norm_rho_surf_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "Scaling_Factor_GADS.22.3", "Scaling_Factor_GADS.8.3", NULL, NULL, "dl", "Normalized surface reflectance, band 3"}, {"reflec_4", "Norm_rho_surf_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "Scaling_Factor_GADS.22.4", "Scaling_Factor_GADS.8.4", NULL, NULL, "dl", "Normalized surface reflectance, band 4"}, {"reflec_5", "Norm_rho_surf_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "Scaling_Factor_GADS.22.5", "Scaling_Factor_GADS.8.5", NULL, NULL, "dl", "Normalized surface reflectance, band 5"}, {"reflec_6", "Norm_rho_surf_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "Scaling_Factor_GADS.22.6", "Scaling_Factor_GADS.8.6", NULL, NULL, "dl", "Normalized surface reflectance, band 6"}, {"reflec_7", "Norm_rho_surf_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "Scaling_Factor_GADS.22.7", "Scaling_Factor_GADS.8.7", NULL, NULL, "dl", "Normalized surface reflectance, band 7"}, {"reflec_8", "Norm_rho_surf_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "Scaling_Factor_GADS.22.8", "Scaling_Factor_GADS.8.8", NULL, NULL, "dl", "Normalized surface reflectance, band 8"}, {"reflec_9", "Norm_rho_surf_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "Scaling_Factor_GADS.22.9", "Scaling_Factor_GADS.8.9", NULL, NULL, "dl", "Normalized surface reflectance, band 9"}, {"reflec_10", "Norm_rho_surf_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "Scaling_Factor_GADS.22.10", "Scaling_Factor_GADS.8.10", NULL, NULL, "dl", "Normalized surface reflectance, band 10"}, {"reflec_12", "Norm_rho_surf_11.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "Scaling_Factor_GADS.22.11", "Scaling_Factor_GADS.8.11", NULL, NULL, "dl", "Normalized surface reflectance, band 12"}, {"reflec_13", "Norm_rho_surf_12.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "Scaling_Factor_GADS.22.12", "Scaling_Factor_GADS.8.12", NULL, NULL, "dl", "Normalized surface reflectance, band 13"}, {"reflec_14", "Norm_rho_surf_13.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "Scaling_Factor_GADS.22.13", "Scaling_Factor_GADS.8.13", NULL, NULL, "dl", "Normalized surface reflectance, band 14"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.30.1", "Scaling_Factor_GADS.16.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"algal_1", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 1 content"}, {"algal_2", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 2 content"}, {"yellow_subs", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.24.1", "Scaling_Factor_GADS.10.1", "l2_flags.WATER", NULL, "1/m", "Yellow substance"}, {"total_susp", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.25.1", "Scaling_Factor_GADS.11.1", "l2_flags.WATER", NULL, "g/m^3", "Total suspended matter"}, {"photosyn_rad", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.31.1", "Scaling_Factor_GADS.17.1", "l2_flags.WATER", NULL, "myEinstein/(m^2*s)", "Photosynthetically active radiation"}, {"toa_veg", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.32.1", "Scaling_Factor_GADS.18.1", "l2_flags.LAND", NULL, "1", "MGVI - MERIS global vegetation index"}, {"boa_veg", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.33.1", "Scaling_Factor_GADS.19.1", "l2_flags.LAND", NULL, "1", "MTCI - MERIS terrestrial chlorophyll index"}, {"rect_refl_red", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.40.1", "Scaling_Factor_GADS.39.1", "l2_flags.LAND", NULL, "dl", "Rectified reflectance in a red band"}, {"rect_refl_nir", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.42.1", "Scaling_Factor_GADS.41.1", "l2_flags.LAND", NULL, "dl", "Rectified reflectances in a near infrared band"}, {"surf_press", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.29.1", "Scaling_Factor_GADS.15.1", "l2_flags.LAND", NULL, "hPa", "Surface pressure"}, {"aero_alpha", "Alpha_OPT.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.26.1", "Scaling_Factor_GADS.12.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol Angstrom exponent"}, {"aero_opt_thick_443", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.LAND", NULL, "dl", "Aerosol optical thickness at 443 nm"}, {"aero_opt_thick_865", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.WATER", NULL, "dl", "Aerosol optical thickness at 865 nm"}, {"cloud_albedo", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.34.1", "Scaling_Factor_GADS.20.1", "l2_flags.CLOUD", NULL, "dl", "Cloud albedo"}, {"cloud_opt_thick", "Alpha_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.28.1", "Scaling_Factor_GADS.14.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.35.1", "Scaling_Factor_GADS.21.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"cloud_type", "Alpha_OPT.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, "l2_flags.CLOUD", NULL, NULL, "Cloud type"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags", NULL, "Level 2 classification and quality flags"} }; static const struct BandDescriptor MER_RR__2P_IODD6_band_data[] = { {"latitude", "Tie_points_ADS.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Latitude of the tie points (WGS-84), positive N"}, {"longitude", "Tie_points_ADS.4", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Longitude of the tie points (WGS-84), Greenwich origin, positive E"}, {"dem_alt", "Tie_points_ADS.5", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.1.1", NULL, NULL, "m", "Digital elevation model altitude"}, {"dem_rough", "Tie_points_ADS.6", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.2.1", NULL, NULL, "m", "Digital elevation model roughness"}, {"lat_corr", "Tie_points_ADS.7", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model latitude corrections"}, {"lon_corr", "Tie_points_ADS.8", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Digital elevation model longitude corrections"}, {"sun_zenith", "Tie_points_ADS.9", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun zenith angle"}, {"sun_azimuth", "Tie_points_ADS.10", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Sun azimuth angles"}, {"view_zenith", "Tie_points_ADS.11", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing zenith angles"}, {"view_azimuth", "Tie_points_ADS.12", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "1.0E-06", NULL, NULL, "deg", "Viewing azimuth angles"}, {"zonal_wind", "Tie_points_ADS.13", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.3.1", NULL, NULL, "m/s", "Zonal wind"}, {"merid_wind", "Tie_points_ADS.14", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.4.1", NULL, NULL, "m/s", "Meridional wind"}, {"atm_press", "Tie_points_ADS.15", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.5.1", NULL, NULL, "hPa", "Mean sea level pressure"}, {"ozone", "Tie_points_ADS.16", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.6.1", NULL, NULL, "DU", "Total ozone"}, {"rel_hum", "Tie_points_ADS.17", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "0.0", "Scaling_Factor_GADS.7.1", NULL, NULL, "%", "Relative humidity"}, {"reflec_1", "Norm_rho_surf_1.3", e_smod_1OF1, e_tid_float, 1, e_smid_lin, "Scaling_Factor_GADS.22.1", "Scaling_Factor_GADS.8.1", NULL, NULL, "dl", "Normalized surface reflectance, band 1"}, {"reflec_2", "Norm_rho_surf_2.3", e_smod_1OF1, e_tid_float, 2, e_smid_lin, "Scaling_Factor_GADS.22.2", "Scaling_Factor_GADS.8.2", NULL, NULL, "dl", "Normalized surface reflectance, band 2"}, {"reflec_3", "Norm_rho_surf_3.3", e_smod_1OF1, e_tid_float, 3, e_smid_lin, "Scaling_Factor_GADS.22.3", "Scaling_Factor_GADS.8.3", NULL, NULL, "dl", "Normalized surface reflectance, band 3"}, {"reflec_4", "Norm_rho_surf_4.3", e_smod_1OF1, e_tid_float, 4, e_smid_lin, "Scaling_Factor_GADS.22.4", "Scaling_Factor_GADS.8.4", NULL, NULL, "dl", "Normalized surface reflectance, band 4"}, {"reflec_5", "Norm_rho_surf_5.3", e_smod_1OF1, e_tid_float, 5, e_smid_lin, "Scaling_Factor_GADS.22.5", "Scaling_Factor_GADS.8.5", NULL, NULL, "dl", "Normalized surface reflectance, band 5"}, {"reflec_6", "Norm_rho_surf_6.3", e_smod_1OF1, e_tid_float, 6, e_smid_lin, "Scaling_Factor_GADS.22.6", "Scaling_Factor_GADS.8.6", NULL, NULL, "dl", "Normalized surface reflectance, band 6"}, {"reflec_7", "Norm_rho_surf_7.3", e_smod_1OF1, e_tid_float, 7, e_smid_lin, "Scaling_Factor_GADS.22.7", "Scaling_Factor_GADS.8.7", NULL, NULL, "dl", "Normalized surface reflectance, band 7"}, {"reflec_8", "Norm_rho_surf_8.3", e_smod_1OF1, e_tid_float, 8, e_smid_lin, "Scaling_Factor_GADS.22.8", "Scaling_Factor_GADS.8.8", NULL, NULL, "dl", "Normalized surface reflectance, band 8"}, {"reflec_9", "Norm_rho_surf_9.3", e_smod_1OF1, e_tid_float, 9, e_smid_lin, "Scaling_Factor_GADS.22.9", "Scaling_Factor_GADS.8.9", NULL, NULL, "dl", "Normalized surface reflectance, band 9"}, {"reflec_10", "Norm_rho_surf_10.3", e_smod_1OF1, e_tid_float, 10, e_smid_lin, "Scaling_Factor_GADS.22.10", "Scaling_Factor_GADS.8.10", NULL, NULL, "dl", "Normalized surface reflectance, band 10"}, {"reflec_12", "Norm_rho_surf_11.3", e_smod_1OF1, e_tid_float, 12, e_smid_lin, "Scaling_Factor_GADS.22.11", "Scaling_Factor_GADS.8.11", NULL, NULL, "dl", "Normalized surface reflectance, band 12"}, {"reflec_13", "Norm_rho_surf_12.3", e_smod_1OF1, e_tid_float, 13, e_smid_lin, "Scaling_Factor_GADS.22.12", "Scaling_Factor_GADS.8.12", NULL, NULL, "dl", "Normalized surface reflectance, band 13"}, {"reflec_14", "Norm_rho_surf_13.3", e_smod_1OF1, e_tid_float, 14, e_smid_lin, "Scaling_Factor_GADS.22.13", "Scaling_Factor_GADS.8.13", NULL, NULL, "dl", "Normalized surface reflectance, band 14"}, {"water_vapour", "Vapour_Content.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.30.1", "Scaling_Factor_GADS.16.1", NULL, NULL, "g/cm^2", "Water vapour content"}, {"algal_1", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 1 content"}, {"algal_2", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.23.1", "Scaling_Factor_GADS.9.1", "l2_flags.WATER", NULL, "mg/m^3", "Chlorophyll 2 content"}, {"yellow_subs", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.24.1", "Scaling_Factor_GADS.10.1", "l2_flags.WATER", NULL, "1/m", "Yellow substance"}, {"total_susp", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_log, "Scaling_Factor_GADS.25.1", "Scaling_Factor_GADS.11.1", "l2_flags.WATER", NULL, "g/m^3", "Total suspended matter"}, {"photosyn_rad", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.31.1", "Scaling_Factor_GADS.17.1", "l2_flags.WATER", NULL, "myEinstein/m^2", "Photosynthetically active radiation"}, {"toa_veg", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.32.1", "Scaling_Factor_GADS.18.1", "l2_flags.LAND", NULL, "1", "TOA vegetation index"}, {"boa_veg", "Chl_2_BOAVI.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.33.1", "Scaling_Factor_GADS.19.1", "l2_flags.LAND", NULL, "1", "BOA vegetation index"}, {"rect_refl_nir", "YS_SPM_Rect_rho.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.40.1", "Scaling_Factor_GADS.39.1", "l2_flags.LAND", NULL, "dl", "Rectified surface reflectances"}, {"rect_refl_red", "YS_SPM_Rect_rho.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.42.1", "Scaling_Factor_GADS.41.1", "l2_flags.LAND", NULL, "dl", "Rectified surface reflectances"}, {"surf_press", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.29.1", "Scaling_Factor_GADS.15.1", "l2_flags.LAND", NULL, "hPa", "Surface pressure"}, {"aero_epsilon", "Epsilon_OPT.3", e_smod_1OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.26.1", "Scaling_Factor_GADS.12.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol epsilon"}, {"aero_opt_thick", "Epsilon_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.27.1", "Scaling_Factor_GADS.13.1", "!l2_flags.CLOUD", NULL, "dl", "Aerosol optical thickness"}, {"cloud_albedo", "Press_PAR_Alb.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.34.1", "Scaling_Factor_GADS.20.1", "l2_flags.CLOUD", NULL, "dl", "Cloud albedo"}, {"cloud_opt_thick", "Epsilon_OPT.3", e_smod_2OF2, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.28.1", "Scaling_Factor_GADS.14.1", "l2_flags.CLOUD", NULL, "dl", "Cloud optical thickness"}, {"cloud_top_press", "Chl_1_TOAVI_CTP.3", e_smod_1OF1, e_tid_float, -1, e_smid_lin, "Scaling_Factor_GADS.35.1", "Scaling_Factor_GADS.21.1", "l2_flags.CLOUD", NULL, "hPa", "Cloud top pressure"}, {"cloud_type", "Epsilon_OPT.3", e_smod_1OF2, e_tid_uchar, -1, e_smid_non, NULL, NULL, "l2_flags.CLOUD", NULL, NULL, "Cloud type"}, {"l2_flags", "Flags.3", e_smod_3TOI, e_tid_uint, -1, e_smid_non, NULL, NULL, NULL, "MER_RR__2P_flags_IODD6", NULL, "Level 2 classification and quality flags"} }; static const struct FlagDescriptor ATS_NR__2P_flags_data[] = { {"NADIR_SST_ONLY_VALID", 1, {0, 0}, "Nadir-only SST is valid"}, {"NADIR_SST_ONLY_37_MY_VALID", 1, {1, 0}, "Nadir-only SST retrieval includes 3.7 micron channel"}, {"DUAL_SST_VALID", 1, {2, 0}, "Dual-view SST is valid"}, {"DUAL_SST_VALID_37_MY", 1, {3, 0}, "Dual-view SST retrieval includes 3.7 micron channel"}, {"LAND", 1, {4, 0}, "Pixel is over land"}, {"NADIR_CLOUD", 1, {5, 0}, "Nadir-view pixel is cloudy"}, {"NADIR_BLANKING", 1, {6, 0}, "Nadir-view pixel has blanking pulse"}, {"NADIR_COSMETIC", 1, {7, 0}, "Nadir-view pixel is cosmetic fill"}, {"FWARD_CLOUD", 1, {8, 0}, "Forward-view pixel is cloudy"}, {"FWARD_BLANKING", 1, {9, 0}, "Forward-view pixel has blanking pulse"}, {"FWARD_COSMETIC", 1, {10, 0}, "Forward-view pixel is cosmetic fill"}, {"CLOUDY_16_MY", 1, {11, 0}, "One or both views flagged cloudy by 1.6 micron test (daytime only)"}, {"CLOUDY_11_12_MY", 1, {12, 0}, "Cloud flagged by 11 micron/12 micron nadir-forward test"}, {"CLOUDY_HISTO", 1, {13, 0}, "One or both views flagged cloudy by infra-red histogram test"} }; static const struct FlagDescriptor ATS_TOA_1P_cloud_flags_data[] = { {"LAND", 1, {0, 0}, "Pixel is over land"}, {"CLOUDY", 1, {1, 0}, "Pixel is cloudy (result of all cloud tests)"}, {"SUN_GLINT", 1, {2, 0}, "Sunglint detected in pixel"}, {"CLOUDY_REFL_HIST", 1, {3, 0}, "1.6 micron reflectance histogram test shows pixel cloudy (day-time only)"}, {"CLOUDY_SPAT_COHER_16", 1, {4, 0}, "1.6 micron spatial coherence test shows pixel cloudy (day-time only)"}, {"CLOUDY_SPAT_COHER_11", 1, {5, 0}, "11 micron spatial coherence test shows pixel cloudy"}, {"CLOUDY_GROSS_12", 1, {6, 0}, "12 micron gross cloud test shows pixel cloudy"}, {"CLOUDY_CIRRUS_11_12", 1, {7, 0}, "11/12 micron thin cirrus test shows pixel cloudy"}, {"CLOUDY_MED_HI_LEVEL_37_12", 1, {8, 0}, "3.7/12 micron medium/high level test shows pixel cloudy (night-time only)"}, {"CLOUDY_FOG_LOW_STRATUS_11_37", 1, {9, 0}, "11/3.7 micron fog/low stratus test shows pixel cloudy (night-time only)"}, {"CLOUDY_VW_DIFF_11_12", 1, {10, 0}, "11/12 micron view-difference test shows pixel cloudy"}, {"CLOUDY_VW_DIFF_37_11", 1, {11, 0}, "3.7/11 micron view-difference test shows pixel cloudy (night-time only)"}, {"CLOUDY_THERM_HIST_11_12", 1, {12, 0}, "11/12 micron thermal histogram test shows pixel cloudy"} }; static const struct FlagDescriptor ATS_TOA_1P_confid_flags_data[] = { {"BLANKING", 1, {0, 0}, "Blanking Pulse"}, {"COSMETIC", 1, {1, 0}, "Cosmetic Fill Pixel"}, {"SCAN_ABSENT", 1, {2, 0}, "Entire scan absent from telemetry"}, {"ABSENT", 1, {3, 0}, "Pixel absent from telemetry"}, {"NOT_DECOMPR", 1, {4, 0}, "Pixel not decompressed owing to error in packet validation"}, {"NO_SIGNAL", 1, {5, 0}, "No signal in some channel (zero count)"}, {"SATURATION", 1, {6, 0}, "Saturation in some channel (maximum count)"}, {"OUT_OF_RANGE", 1, {7, 0}, "Derived radiance of some channel outside range of calibration"}, {"NO_CALIB_PARAM", 1, {8, 0}, "Calibration Parameters unavailable for pixel"}, {"UNFILLED", 1, {9, 0}, "Pixel unfilled (cosmetic fill algorithm unable to find nearest neighbour pixel)"} }; static const struct FlagDescriptor MER_RR__1P_flags_data[] = { {"COSMETIC", 1, {0, 0}, "Pixel is cosmetic"}, {"DUPLICATED", 1, {1, 0}, "Pixel has been duplicated (filled in)"}, {"GLINT_RISK", 1, {2, 0}, "Pixel has glint risk"}, {"SUSPECT", 1, {3, 0}, "Pixel is suspect"}, {"LAND_OCEAN", 1, {4, 0}, "Pixel is over land, not ocean"}, {"BRIGHT", 1, {5, 0}, "Pixel is bright (saturation)"}, {"COASTLINE", 1, {6, 0}, "Pixel is part of a coastline"}, {"INVALID", 1, {7, 0}, "Pixel is invalid"} }; static const struct FlagDescriptor MER_RR__2P_flags_data[] = { {"LAND", 1, {23, 0}, "Land product available"}, {"CLOUD", 1, {22, 0}, "Cloud product available"}, {"WATER", 1, {21, 0}, "Water product available"}, {"PCD_1_13", 1, {20, 0}, "Uncertain normalized surface reflectance"}, {"PCD_14", 1, {19, 0}, "Uncertain total water vapour content"}, {"PCD_15", 1, {18, 0}, "Uncertain algal pigment index 1 or cloud top pressure or top of atmosphere vegetation index"}, {"PCD_16", 1, {17, 0}, "Uncertain yellow substance and total suspended matter or rectified reflectances"}, {"PCD_17", 1, {16, 0}, "Uncertain algal pigment index 2 or bottom of atmosphere vegetation index"}, {"PCD_18", 1, {15, 0}, "Uncertain PAR or cloud albedo or land surface pressure"}, {"PCD_19", 1, {14, 0}, "Uncertain aerosol type and optical thickness or cloud optical thickness"}, {"COASTLINE", 1, {13, 0}, "Coastline pixel"}, {"COSMETIC", 1, {12, 0}, "Cosmetic pixel (from level-1b)"}, {"SUSPECT", 1, {11, 0}, "Suspect pixel (from level-1b)"}, {"OOADB", 1, {10, 0}, "Aerosol model is out of aerosol model database"}, {"ABSOA_DUST", 1, {9, 0}, "Dust-like absorbing aerosol selected for atmosphere correction"}, {"CASE2_S", 1, {8, 0}, "Turbid (sediment dominated Case 2) water"}, {"CASE2_ANOM", 2, {7, 21}, "Anomalous scattering water"}, {"TOAVI_BRIGHT", 2, {7, 23}, "Bright pixel flagged by MGVI processing"}, {"CASE2_Y", 2, {6, 21}, "Yellow substance loaded water"}, {"TOAVI_BAD", 2, {6, 23}, "Bad pixel flagged by MGVI processing"}, {"ICE_HAZE", 2, {5, 21}, "Ice or high aerosol load pixel"}, {"TOAVI_CSI", 2, {5, 23}, "Cloud, snow or ice over land pixel acc. to MGVI processing"}, {"MEDIUM_GLINT", 2, {4, 21}, "Corrected for glint (water)"}, {"TOAVI_WS", 2, {4, 23}, "Water/shadow pixel acc. to MGVI processing (land)"}, {"LARS_ON", 2, {3, 23}, "Land aerosol remote sensing turned on"}, {"BPAC_ON", 2, {3, 21}, "Bright pixels atmospheric correction activated (water)"}, {"HIGH_GLINT", 2, {2, 21}, "High (uncorrected) glint (water)"}, {"TOAVI_INVAL_REC", 2, {2, 23}, "Invalid rectification (land)"}, {"LOW_SUN", 1, {1, 0}, "Sun low above horizon (or conversely high sun zenith angle)"}, {"LOW_PRESSURE", 1, {0, 0}, "Computed pressure is lower than ECMWF one (land, cloud)"}, {"WHITE_SCATTERER", 2, {0, 21}, "Presense of white scatterer in water"} }; static const struct FlagDescriptor MER_RR__2P_flags_IODD6_data[] = { {"LAND", 1, {23, 0}, "Land product available"}, {"CLOUD", 1, {22, 0}, "Cloud product available"}, {"WATER", 1, {21, 0}, "Water product available"}, {"PCD_1_13", 1, {20, 0}, "Uncertain normalized surface reflectance"}, {"PCD_14", 1, {19, 0}, "Uncertain total water vapour content"}, {"PCD_15", 1, {18, 0}, "Uncertain algal pigment index 1 or cloud top pressure or top of atmosphere vegetation index"}, {"PCD_16", 1, {17, 0}, "Uncertain yellow substance and total suspended matter or rectified reflectances"}, {"PCD_17", 1, {16, 0}, "Uncertain algal pigment index 2 or bottom of atmosphere vegetation index"}, {"PCD_18", 1, {15, 0}, "Uncertain PAR or cloud albedo or land surface pressure"}, {"PCD_19", 1, {14, 0}, "Uncertain aerosol type and optical thickness or cloud optical thickness"}, {"COASTLINE", 1, {13, 0}, "Coastline pixel"}, {"COSMETIC", 1, {12, 0}, "Cosmetic pixel (from level-1B)"}, {"SUSPECT", 1, {11, 0}, "Suspect pixel (from level-1B)"}, {"ABSOA_CONT", 1, {10, 0}, "Continental absorbing aerosol"}, {"ABSOA_DUST", 1, {9, 0}, "Dust-like absorbing aerosol"}, {"CASE2_S", 1, {8, 0}, "Turbid water"}, {"CASE2_ANOM", 2, {7, 21}, "Anomalous scattering water"}, {"TOAVI_BRIGHT", 2, {7, 23}, "Bright pixel flagged by TOAVI processing"}, {"CASE2_Y", 2, {6, 21}, "Yellow substance loaded water"}, {"TOAVI_BAD", 2, {6, 23}, "Bad pixel flagged by TOAVI processing"}, {"ICE_HAZE", 2, {5, 21}, "Ice at high aerosol load pixel"}, {"TOAVI_CSI", 2, {5, 23}, "Cloud, snow or ice flagged by TOAVI"}, {"MEDIUM_GLINT", 2, {4, 21}, "Corrected for glint"}, {"TOAVI_WS", 2, {4, 23}, "Water or deep shadow flagged by TOAVI"}, {"DDV", 1, {3, 0}, "Dense dark vegetation"}, {"HIGH_GLINT", 2, {2, 21}, "High (uncorrected) glint"}, {"TOAVI_INVAL_REC", 2, {2, 23}, "Invalid rectification flagged by TOAVI"}, {"P_CONFIDENCE", 1, {1, 0}, "The two pressure estimates do not compare successfully"}, {"LOW_PRESSURE", 1, {0, 0}, "Computed pressure lower than ECMWF one"} }; const struct DatasetDescriptorTable dddb_product_tables[46] = { {"ASA_APG_1P", "ASAR Alternating Polarization Ellipsoid Geocoded Image", 11, ASA_APG_1P_dataset_data}, {"ASA_APM_1P", "ASAR Alternating Polarization Medium Resolution Image product", 10, ASA_APM_1P_dataset_data}, {"ASA_APP_1P", "ASAR Alternating Polarization Mode Precision Image", 10, ASA_APP_1P_dataset_data}, {"ASA_APS_1P", "ASAR Alternating Polarization Mode Single Look Complex", 8, ASA_APS_1P_dataset_data}, {"ASA_AP__BP", "ASAR Alternating Polarization Browse Product", 5, ASA_AP__BP_dataset_data}, {"ASA_GM1_1P", "ASAR Global Monitoring Mode Image", 8, ASA_GM1_1P_dataset_data}, {"ASA_IMG_1P", "ASAR Image Mode Ellipsoid Geocoded Image", 9, ASA_IMG_1P_dataset_data}, {"ASA_IMM_1P", "ASAR Image Mode Medium Resolution Image", 8, ASA_IMM_1P_dataset_data}, {"ASA_IMP_1P", "ASAR Image Mode Precision Image", 8, ASA_IMP_1P_dataset_data}, {"ASA_IMS_1P", "ASAR Image Mode Single Look Complex", 6, ASA_IMS_1P_dataset_data}, {"ASA_IM__BP", "ASAR Image Mode Browse Product", 3, ASA_IM__BP_dataset_data}, {"ASA_WSM_1P", "ASAR Wide Swath Medium Resolution Image", 8, ASA_WSM_1P_dataset_data}, {"ASA_WS__BP", "ASAR Wide Swath Mode Browse Image", 5, ASA_WS__BP_dataset_data}, {"ASA_WVI_1P", "ASAR Wave Mode SLC Imagette and Imagette Cross Spectra", 405, ASA_WVI_1P_dataset_data}, {"ASA_WVS_1P", "ASAR Wave Mode Imagette Cross Spectra", 4, ASA_WVS_1P_dataset_data}, {"ASA_WVW_2P", "ASAR Wave Mode Wave Spectra", 4, ASA_WVW_2P_dataset_data}, {"ATS_AR__2P", "AATSR averaged geophysical product", 16, ATS_AR__2P_dataset_data}, {"ATS_MET_2P", "AATSR Spatially Averaged Sea Surface Temperature for Meteo Users", 1, ATS_MET_2P_dataset_data}, {"ATS_NR__2P", "AATSR geophysical product (full resolution)", 8, ATS_NR__2P_dataset_data}, {"ATS_TOA_1P", "AATSR Gridded brightness temperature and reflectance", 26, ATS_TOA_1P_dataset_data}, {"MER_FR__1P", "MERIS Full Resolution Geolocated and Calibrated TOA Radiance", 19, MER_FR__1P_dataset_data}, {"MER_FRS_1P", "MERIS Full Resolution Full Swath Geolocated and Calibrated TOA Radiance", 19, MER_FR__1P_dataset_data}, {"MER_FR__1P_IODD5", "MERIS Full Resolution Geolocated and Calibrated TOA Radiance", 19, MER_FR__1P_IODD5_dataset_data}, {"MER_FR__2P", "MERIS Full Resolution Geophysical Product", 23, MER_FR__2P_dataset_data}, {"MER_FRS_2P", "MERIS Full Resolution Full Swath Geophysical Product", 23, MER_FR__2P_dataset_data}, {"MER_FR__2P_IODD6", "MERIS Full Resolution Geophysical Product", 23, MER_FR__2P_IODD6_dataset_data}, {"MER_LRC_2P", "MERIS Extracted Cloud Thickness and Water Vapour for Meteo Users", 7, MER_LRC_2P_dataset_data}, {"MER_RRC_2P", "MERIS Extracted Cloud Thickness and Water Vapour", 7, MER_RRC_2P_dataset_data}, {"MER_RRV_2P", "MERIS Extracted Vegetation Indices", 6, MER_RRV_2P_dataset_data}, {"MER_RR__1P", "MERIS Reduced Resolution Geolocated and Calibrated TOA Radiance", 19, MER_RR__1P_dataset_data}, {"MER_RR__1P_IODD5", "MERIS Reduced Resolution Geolocated and Calibrated TOA Radiance", 19, MER_RR__1P_IODD5_dataset_data}, {"MER_RR__2P", "MERIS Reduced Resolution Geophysical Product", 23, MER_RR__2P_dataset_data}, {"MER_RR__2P_IODD6", "MERIS Reduced Resolution Geophysical Product", 23, MER_RR__2P_IODD6_dataset_data}, {"SAR_APG_1P", "ERS Simulated Alternating Polarization Ellipsoid Geocoded Image", 11, ASA_APG_1P_dataset_data}, {"SAR_APM_1P", "ERS Simulated Alternating Polarization Medium Resolution Image product", 10, ASA_APM_1P_dataset_data}, {"SAR_APP_1P", "ERS Simulated Alternating Polarization Mode Precision Image", 10, ASA_APP_1P_dataset_data}, {"SAR_APS_1P", "ERS Simulated Alternating Polarization Mode Single Look Complex", 8, ASA_APS_1P_dataset_data}, {"SAR_AP__BP", "ERS Simulated Alternating Polarization Browse Product", 5, ASA_AP__BP_dataset_data}, {"SAR_IMG_1P", "ERS Image Mode Ellipsoid Geocoded Image", 9, ASA_IMG_1P_dataset_data}, {"SAR_IMM_1P", "ERS Image Mode Medium Resolution Image", 8, ASA_IMM_1P_dataset_data}, {"SAR_IMP_1P", "ERS Image Mode Precision Image", 8, ASA_IMP_1P_dataset_data}, {"SAR_IMS_1P", "ERS Image Mode Single Look Complex", 6, ASA_IMS_1P_dataset_data}, {"SAR_IM__BP", "ERS Image Mode Browse Product", 3, ASA_IM__BP_dataset_data}, {"SAR_WVI_1P", "ERS Wave Mode SLC Imagette and Imagette Cross Spectra", 405, ASA_WVI_1P_dataset_data}, {"SAR_WVS_1P", "ERS Wave Mode Imagette Cross Spectra", 4, ASA_WVS_1P_dataset_data}, {"SAR_WVW_2P", "ERS Wave Mode Wave Spectra", 4, ASA_WVW_2P_dataset_data}, }; const struct BandDescriptorTable dddb_band_tables[37] = { {"ASA_APG_1P", "ASAR Alternating Polarization Geocoded Image", 6, ASA_APG_1P_band_data}, {"ASA_APM_1P", "ASAR Alternating Polarization Medium Resolution Image", 6, ASA_APM_1P_band_data}, {"ASA_APP_1P", "ASAR Alternating Polarization Precision Image", 6, ASA_APP_1P_band_data}, {"ASA_APS_1P", "ASAR Alternating Polarization SLC Image", 6, ASA_APS_1P_band_data}, {"ASA_AP__BP", "ASAR Alternatin Polarization Mode Browse Product", 5, ASA_AP__BP_band_data}, {"ASA_IMG_1P", "ASAR Image Mode Geocoded Image", 5, ASA_IMG_1P_band_data}, {"ASA_IMM_1P", "ASAR Image Mode Medium Resolution Image", 5, ASA_IMM_1P_band_data}, {"ASA_IMP_1P", "ASAR Image Mode Precision Image", 5, ASA_IMP_1P_band_data}, {"ASA_IMS_1P", "ASAR Image Mode SLC Image", 6, ASA_IMS_1P_band_data}, {"ASA_IM__BP", "ASAR Image Mode Browse Product", 5, ASA_IM__BP_band_data}, {"ASA_WSM_1P", "ASAR Wide Swath Mode Medium Resolution Image", 5, ASA_WSM_1P_band_data}, {"ASA_WS__BP", "ASAR Wide Swap Mode Browse Image", 5, ASA_WS__BP_band_data}, {"ATS_NR__2P", "AATSR Geophysical Level 2 Product", 22, ATS_NR__2P_band_data}, {"ATS_TOA_1P", "AATSR Gridded brightness temperature and reflectance", 33, ATS_TOA_1P_band_data}, {"MER_FR__1P", "MERIS Level 1b Full Resolution Geophysical Product", 32, MER_FR__1P_band_data}, {"MER_FRS_1P", "MERIS Level 1b Full Resolution Full Swath Geophysical Product", 32, MER_FR__1P_band_data}, {"MER_FR__1P_IODD5", "MERIS Level 1b Full Resolution Geophysical Product", 32, MER_FR__1P_IODD5_band_data}, {"MER_FR__2P", "MERIS Level 2 Full Resolution Geophysical Product", 47, MER_FR__2P_band_data}, {"MER_FRS_2P", "MERIS Level 2 Full Resolution Full Swath Geophysical Product", 47, MER_FR__2P_band_data}, {"MER_FR__2P_IODD6", "MERIS Level 2 Full Resolution Geophysical Product", 46, MER_FR__2P_IODD6_band_data}, {"MER_LRC_2P", "MERIS Level 2 Extracted Cloud Thickness and Water Vapour for Meteo Users", 19, MER_LRC_2P_band_data}, {"MER_RRC_2P", "MERIS Level 2 Extracted Cloud Thickness and Water Vapour", 20, MER_RRC_2P_band_data}, {"MER_RRV_2P", "MERIS Level 2 Extracted Vegetation Indices", 18, MER_RRV_2P_band_data}, {"MER_RR__1P", "MERIS Level 1b Reduced Resolution Geophysical Product", 32, MER_RR__1P_band_data}, {"MER_RR__1P_IODD5", "MERIS Level 1b Reduced Resolution Geophysical Product", 32, MER_RR__1P_IODD5_band_data}, {"MER_RR__2P", "MERIS Level 2 Reduced Resolution Geophysical Product", 47, MER_RR__2P_band_data}, {"MER_RR__2P_IODD6", "MERIS Level 2 Reduced Resolution Geophysical Product", 46, MER_RR__2P_IODD6_band_data}, {"SAR_APG_1P", "ERS Simulated Alternating Polarization Geocoded Image", 6, ASA_APG_1P_band_data}, {"SAR_APM_1P", "ERS Simulated Alternating Polarization Medium Resolution Image", 6, ASA_APM_1P_band_data}, {"SAR_APP_1P", "ERS Simulated Alternating Polarization Precision Image", 6, ASA_APP_1P_band_data}, {"SAR_APS_1P", "ERS Simulated Alternating Polarization SLC Image", 6, ASA_APS_1P_band_data}, {"SAR_AP__BP", "ERS Simulated Alternatin Polarization Mode Browse Product", 5, ASA_AP__BP_band_data}, {"SAR_IMG_1P", "ERS Image Mode Geocoded Image", 5, ASA_IMG_1P_band_data}, {"SAR_IMM_1P", "ERS Image Mode Medium Resolution Image", 5, ASA_IMM_1P_band_data}, {"SAR_IMP_1P", "ERS Image Mode Precision Image", 5, ASA_IMP_1P_band_data}, {"SAR_IMS_1P", "ERS Image Mode SLC Image", 6, ASA_IMS_1P_band_data}, {"SAR_IM__BP", "ERS Image Mode Browse Product", 5, ASA_IM__BP_band_data}, }; const struct FlagDescriptorTable dddb_flag_coding_tables[6] = { {"ATS_NR__2P_flags", "AATSR Level 2 Flags Codings", 14, ATS_NR__2P_flags_data}, {"ATS_TOA_1P_cloud_flags", "AATSR TOA Level 1b Cloud Flags Codings", 13, ATS_TOA_1P_cloud_flags_data}, {"ATS_TOA_1P_confid_flags", "AATSR TOA Level 1b Confidence Flag Codings", 10, ATS_TOA_1P_confid_flags_data}, {"MER_RR__1P_flags", "MERIS RR Level 1b Flag Codings", 8, MER_RR__1P_flags_data}, {"MER_RR__2P_flags", "MERIS Level 2 Flag Codings", 31, MER_RR__2P_flags_data}, {"MER_RR__2P_flags_IODD6", "MERIS Level 2 Flag Codings", 29, MER_RR__2P_flags_IODD6_data}, }; const struct RecordDescriptorTable dddb_meris_rec_tables[23] = { {"MER_LRC_2P_MDSR_cl_thick", "Level 2 MDS Cloud Optical Thickness", 3, MER_LRC_2P_MDSR_cl_thick_meris_rec_data}, {"MER_LRC_2P_MDSR_cl_top_press", "Level 2 MDS Cloud Top Pressure", 3, MER_LRC_2P_MDSR_cl_top_press_meris_rec_data}, {"MER_LRC_2P_MDSR_flag", "Level 2 MDS Flags", 3, MER_LRC_2P_MDSR_flag_meris_rec_data}, {"MER_LRC_2P_MDSR_twv", "Level 2 MDS Total Water vapour", 3, MER_LRC_2P_MDSR_twv_meris_rec_data}, {"MER_RRC_2P_GADS_sfgi", "Level 2 GADS Scaling Factor and Offsets", 7, MER_RRC_2P_GADS_sfgi_meris_rec_data}, {"MER_RRV_2P_GADS_sfgi", "Level 2 GADS Scaling Factor and Offsets", 5, MER_RRV_2P_GADS_sfgi_meris_rec_data}, {"MER_RR__1P_ADSR_sq", "Level 1b Summary Quality ADS(SQ ADS)", 4, MER_RR__1P_ADSR_sq_meris_rec_data}, {"MER_RR__1P_ADSR_tie_pt", "Level 2 ADS Tie Points Location & Aux. Data ( L ADS)", 17, MER_RR__1P_ADSR_tie_pt_meris_rec_data}, {"MER_RR__1P_GADS_sfgi", "Level 1b GADS Scaling Factor and General Info", 12, MER_RR__1P_GADS_sfgi_meris_rec_data}, {"MER_RR__1P_MDSR_16", "Level 1b MDS (16) Flags & Spectral Shift Index", 4, MER_RR__1P_MDSR_16_meris_rec_data}, {"MER_RR__1P_MDSR_16_IODD5", "Level 1b MDS (16) Flags & Detector Index", 3, MER_RR__1P_MDSR_16_IODD5_meris_rec_data}, {"MER_RR__1P_MDSR_1_15", "Level 1b MDS (1) TOA Radiance", 3, MER_RR__1P_MDSR_1_15_meris_rec_data}, {"MER_RR__2P_ADSR_sq", "Level 2 ADS Summary Quality ADS (SQ ADS)", 21, MER_RR__2P_ADSR_sq_meris_rec_data}, {"MER_RR__2P_GADS_sfgi", "Level 2 GADS Scaling Factors and Offsets", 43, MER_RR__2P_GADS_sfgi_meris_rec_data}, {"MER_RR__2P_MDSR_14", "Level 2 MDS(14) water vapour content", 3, MER_RR__2P_MDSR_14_meris_rec_data}, {"MER_RR__2P_MDSR_15", "Level 2 MDS(15) algal index I TOAVI", 3, MER_RR__2P_MDSR_15_meris_rec_data}, {"MER_RR__2P_MDSR_16", "Level 2 MDS(16) yellow substance total suspended matter or rectified reflectances", 3, MER_RR__2P_MDSR_16_meris_rec_data}, {"MER_RR__2P_MDSR_17", "Level 2 MDS(17) algal index II BOAVI", 3, MER_RR__2P_MDSR_17_meris_rec_data}, {"MER_RR__2P_MDSR_18", "Level 2 MDS(18) surface pressure PAR cloud albedo", 3, MER_RR__2P_MDSR_18_meris_rec_data}, {"MER_RR__2P_MDSR_19", "Level 2 MDS(19) aerosol epsilon or cloud type and optical thickness", 3, MER_RR__2P_MDSR_19_meris_rec_data}, {"MER_RR__2P_MDSR_19_IODD6", "Level 2 MDS(19) aerosol epsilon or cloud type and optical thickness", 3, MER_RR__2P_MDSR_19_IODD6_meris_rec_data}, {"MER_RR__2P_MDSR_1_13", "Level 2 MDS(1) normalised surface reflectance", 3, MER_RR__2P_MDSR_1_13_meris_rec_data}, {"MER_RR__2P_MDSR_20", "Level 2 MDS(20) flags", 3, MER_RR__2P_MDSR_20_meris_rec_data} }; const struct RecordDescriptorTable dddb_aatsr_rec_tables[20] = { {"ATS_AR__2P_MDSR_lr_large", "BT/TOA Land record 50 km cell MDS", 90, ATS_AR__2P_MDSR_lr_large_aatsr_rec_data}, {"ATS_AR__2P_MDSR_lr_small", "BT/TOA Land record 17 km cell MDS", 46, ATS_AR__2P_MDSR_lr_small_aatsr_rec_data}, {"ATS_AR__2P_MDSR_lst_large", "LST record 50 km cell MDS", 17, ATS_AR__2P_MDSR_lst_large_aatsr_rec_data}, {"ATS_AR__2P_MDSR_lst_small", "LST record 17 km cell MDS", 11, ATS_AR__2P_MDSR_lst_small_aatsr_rec_data}, {"ATS_AR__2P_MDSR_sr_large", "BT/TOA Sea record 50 km cell MDS", 86, ATS_AR__2P_MDSR_sr_large_aatsr_rec_data}, {"ATS_AR__2P_MDSR_sr_small", "BT/TOA Sea record 17 km cell MDS", 42, ATS_AR__2P_MDSR_sr_small_aatsr_rec_data}, {"ATS_AR__2P_MDSR_sst_large", "SST record 50 km cell MDS", 17, ATS_AR__2P_MDSR_sst_large_aatsr_rec_data}, {"ATS_AR__2P_MDSR_sst_small", "SST record 17 km cell MDS", 11, ATS_AR__2P_MDSR_sst_small_aatsr_rec_data}, {"ATS_MET_2P_meteo_user_prod", "10-arcminute mds", 17, ATS_MET_2P_meteo_user_prod_aatsr_rec_data}, {"ATS_NR__2P_ADSR_sq", "Summary Quality ADS", 25, ATS_NR__2P_ADSR_sq_aatsr_rec_data}, {"ATS_NR__2P_MDSR_dp", "Distributed product MDS", 7, ATS_NR__2P_MDSR_dp_aatsr_rec_data}, {"ATS_TOA_1P_ADSR_loc", "Grid pixel latitude and longtitude topographic corrections ADS", 12, ATS_TOA_1P_ADSR_loc_aatsr_rec_data}, {"ATS_TOA_1P_ADSR_pix", "Scan and pixel number nadir view ADS", 6, ATS_TOA_1P_ADSR_pix_aatsr_rec_data}, {"ATS_TOA_1P_ADSR_sa", "Nadir view solar angles ADS", 9, ATS_TOA_1P_ADSR_sa_aatsr_rec_data}, {"ATS_TOA_1P_ADSR_scan", "Scan pixel x and y ADS", 7, ATS_TOA_1P_ADSR_scan_aatsr_rec_data}, {"ATS_TOA_1P_ADSR_sq", "Summary quality ADS", 25, ATS_TOA_1P_ADSR_sq_aatsr_rec_data}, {"ATS_TOA_1P_MDSR_brgt", "12 micron nadir view MDS", 5, ATS_TOA_1P_MDSR_brgt_aatsr_rec_data}, {"ATS_TOA_1P_MDSR_cl", "Cloud flag nadir view MDS", 5, ATS_TOA_1P_MDSR_cl_aatsr_rec_data}, {"ATS_TOA_1P_MDSR_conf", "Confidence words nadir view MDS", 5, ATS_TOA_1P_MDSR_conf_aatsr_rec_data}, {"ATS_VC1_AX_GADS", "Visible calibration coefficients GADS", 32, ATS_VC1_AX_GADS_aatsr_rec_data} }; const struct RecordDescriptorTable dddb_asar_rec_tables[20] = { {"ASAR_Antenna_ADSR", "Antenna Elevation patterns(s)", 7, ASAR_Antenna_ADSR_asar_rec_data}, {"ASAR_Chirp_ADSR", "chirp parameters", 140, ASAR_Chirp_ADSR_asar_rec_data}, {"ASAR_Dop_Cen_ADSR", "Doppler Centroid Parameters", 7, ASAR_Dop_Cen_ADSR_asar_rec_data}, {"ASAR_Geo_Grid_ADSR", "Geolocation Grid ADSRs", 18, ASAR_Geo_Grid_ADSR_asar_rec_data}, {"ASAR_Image_MDSR_BP", "Measurement Data Set 1", 4, ASAR_Image_MDSR_BP_asar_rec_data}, {"ASAR_Image_MDSR_Gen", "Measurement Data Set 1", 4, ASAR_Image_MDSR_Gen_asar_rec_data}, {"ASAR_Image_MDSR_SLC", "Measurement Data Set 1", 4, ASAR_Image_MDSR_SLC_asar_rec_data}, {"ASAR_Main_ADSR", "Main Processing parameters", 220, ASAR_Main_ADSR_asar_rec_data}, {"ASAR_Map_GADS", "Map Projection parameters", 66, ASAR_Map_GADS_asar_rec_data}, {"ASAR_Ocean_Spectra_MDSR", "Ocean Wave spectrum.", 29, ASAR_Ocean_Spectra_MDSR_asar_rec_data}, {"ASAR_SQ1_Image_ADSR", "SQ ADSRs", 39, ASAR_SQ1_Image_ADSR_asar_rec_data}, {"ASAR_SRGR_ADSR", "Slant Range to Ground Range conversion parameters", 6, ASAR_SRGR_ADSR_asar_rec_data}, {"ASAR_Spectra_MDSR", "Measurement Data Set containing spectra. 1 MDSR per spectra.", 29, ASAR_Spectra_MDSR_asar_rec_data}, {"ASAR_Wave_Geolocation_ADSR", "Wave Mode Geolocation ADS", 5, ASAR_Wave_Geolocation_ADSR_asar_rec_data}, {"ASAR_Wave_Param_ADSR", "Wave Mode processing parameters", 396, ASAR_Wave_Param_ADSR_asar_rec_data}, {"ASAR_Wave_SQ_ADSR", "SQ ADSRs", 59, ASAR_Wave_SQ_ADSR_asar_rec_data}, {"ASA_CON_AX_GADS", "Contains ASAR processor configuration data", 41, ASA_CON_AX_GADS_asar_rec_data}, {"ASA_INS_AX_GADS", "Contains ASAR instrument characterization data", 721, ASA_INS_AX_GADS_asar_rec_data}, {"ASA_XCA_AX_GADS", "Contains ASAR external calibration data", 31, ASA_XCA_AX_GADS_asar_rec_data}, {"ASA_XCH_AX_GADS", "Contains ASAR external characterization data", 5, ASA_XCH_AX_GADS_asar_rec_data} }; GMTSAR_V5.7/.svn/pristine/5e/5e5e784b105d91aee97d64f4bad5473200556773.svn-base000444 015705 000000 00000001551 13505462013 025466 0ustar00sandwellwheel000000 000000 5 17 0.018316 0.082085 0.135335 0.082085 0.018316 0.029268 0.131171 0.216265 0.131171 0.029268 0.043937 0.196912 0.324652 0.196912 0.043937 0.061961 0.277690 0.457833 0.277690 0.061961 0.082085 0.367879 0.606531 0.367879 0.082085 0.102156 0.457833 0.754840 0.457833 0.102156 0.119433 0.535261 0.882497 0.535261 0.119433 0.131171 0.587870 0.969233 0.587870 0.131171 0.135335 0.606531 1.000000 0.606531 0.135335 0.131171 0.587870 0.969233 0.587870 0.131171 0.119433 0.535261 0.882497 0.535261 0.119433 0.102156 0.457833 0.754840 0.457833 0.102156 0.082085 0.367879 0.606531 0.367879 0.082085 0.061961 0.277690 0.457833 0.277690 0.061961 0.043937 0.196912 0.324652 0.196912 0.043937 0.029268 0.131171 0.216265 0.131171 0.029268 0.018316 0.082085 0.135335 0.082085 0.018316 GMTSAR_V5.7/.svn/pristine/5e/5eab3b6bf1a14d929b509c07d734c6e64488054f.svn-base000444 015705 000000 00000025464 13505462013 025630 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # # Modification History # # Xiaohua Xu, Oct 9, 2013 # # Changed some code in Part 2 to make it work for one FBD and one FBS files. alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_ALOS_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_ALOS_SLC.csh IMG-HH-ALPSRP022200660-H1.1__A IMG-HH-ALPSRP028910660-H1.1__A config.alos.slc.txt" echo "" echo " Place the raw L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if(! -f raw/$1 ) then echo " no file raw/"$1 exit endif if(! -f raw/$2 ) then echo " no file raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set SAT = `grep SAT $3 | awk '{print $3}'` set stage = `grep proc_stage $3 | awk '{print $3}'` set num_patches = `grep num_patches $3 | awk '{print $3}'` set SLC_factor = `grep SLC_factor $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = ` echo $1 | awk '{ print substr($1,8,length($1)-7)}'` set slave = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # rm raw/*.PRM* rm raw/*.SLC rm raw/*.LED # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif echo $commandline ALOS_pre_process_SLC IMG-HH-$master LED-$master $commandline -ALOS1 ALOS_pre_process_SLC IMG-HH-$slave LED-$slave $commandline -ALOS1 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/IMG-HH-$master.SLC . ln -s ../raw/IMG-HH-$slave.SLC . ln -s ../raw/IMG-HH-$master.LED . ln -s ../raw/IMG-HH-$slave.LED . # if images do not match, convert the FBD image to FBS set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-HH-$slave.PRM IMG-HH-$slave"_"FBS.PRM echo "Overwriting the old slave image" mv IMG-HH-$slave"_"FBS.PRM IMG-HH-$slave.PRM update_PRM IMG-HH-$slave.PRM input_file IMG-HH-$slave.SLC mv IMG-HH-$slave"_"FBS.SLC IMG-HH-$slave.SLC else if ($t == 0.5) then echo "Convert the master image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-HH-$master.PRM IMG-HH-$master"_"FBS.PRM echo "Overwriting the old master image" mv IMG-HH-$master"_"FBS.PRM IMG-HH-$master.PRM update_PRM IMG-HH-$master.PRM input_file IMG-HH-$master.SLC mv IMG-HH-$master"_"FBS.SLC IMG-HH-$master.SLC else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif cp IMG-HH-$slave.PRM IMG-HH-$slave.PRM0 SAT_baseline IMG-HH-$master.PRM IMG-HH-$slave.PRM0 >> IMG-HH-$slave.PRM xcorr IMG-HH-$master.PRM IMG-HH-$slave.PRM -xsearch 64 -ysearch 64 -nx 32 -ny 64 fitoffset.csh 3 3 freq_xcorr.dat >> IMG-HH-$slave.PRM 18 resamp IMG-HH-$master.PRM IMG-HH-$slave.PRM IMG-HH-$slave.PRMresamp IMG-HH-$slave.SLCresamp 4 rm IMG-HH-$slave.SLC mv IMG-HH-$slave.SLCresamp IMG-HH-$slave.SLC cp IMG-HH-$slave.PRMresamp IMG-HH-$slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/IMG-HH-$master.PRM master.PRM ln -s ../raw/IMG-HH-$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC slc2amp.csh IMG-HH-$master.PRM 2 amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../SLC/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../SLC/IMG-HH-$ref.SLC . ln -s ../../SLC/IMG-HH-$rep.SLC . ln -s ../../raw/IMG-HH-$ref.LED . ln -s ../../raw/IMG-HH-$rep.LED . cp ../../SLC/IMG-HH-$ref.PRM . cp ../../SLC/IMG-HH-$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM -topo topo_shift.grd filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM -topo topo_ra.grd filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec endif else intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/.svn/pristine/30/3095531bf6d04c275e343c36883bccb78e756d55.svn-base000444 015705 000000 00000312472 13505462014 025407 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu tile-mode source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* function: SetupTile() * --------------------- * Sets up tile parameters and output file names for the current tile. */ void SetupTile(long nlines, long linelen, paramT *params, tileparamT *tileparams, outfileT *outfiles, outfileT *tileoutfiles, long tilerow, long tilecol){ long ni, nj; char tempstring[MAXTMPSTRLEN], path[MAXSTRLEN], basename[MAXSTRLEN]; char *tiledir; /* set parameters for current tile */ ni=ceil((nlines+(params->ntilerow-1)*params->rowovrlp) /(double )params->ntilerow); nj=ceil((linelen+(params->ntilecol-1)*params->colovrlp) /(double )params->ntilecol); tileparams->firstrow=tilerow*(ni-params->rowovrlp); tileparams->firstcol=tilecol*(nj-params->colovrlp); if(tilerow==params->ntilerow-1){ tileparams->nrow=nlines-(params->ntilerow-1)*(ni-params->rowovrlp); }else{ tileparams->nrow=ni; } if(tilecol==params->ntilecol-1){ tileparams->ncol=linelen-(params->ntilecol-1)*(nj-params->colovrlp); }else{ tileparams->ncol=nj; } /* set output files */ tiledir=params->tiledir; ParseFilename(outfiles->outfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->outfile,tempstring,MAXSTRLEN); if(strlen(outfiles->initfile)){ ParseFilename(outfiles->initfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->initfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->initfile,"",MAXSTRLEN); } if(strlen(outfiles->flowfile)){ ParseFilename(outfiles->flowfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->flowfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->flowfile,"",MAXSTRLEN); } if(strlen(outfiles->eifile)){ ParseFilename(outfiles->eifile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->eifile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->eifile,"",MAXSTRLEN); } if(strlen(outfiles->rowcostfile)){ ParseFilename(outfiles->rowcostfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->rowcostfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->rowcostfile,"",MAXSTRLEN); } if(strlen(outfiles->colcostfile)){ ParseFilename(outfiles->colcostfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->colcostfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->colcostfile,"",MAXSTRLEN); } if(strlen(outfiles->mstrowcostfile)){ ParseFilename(outfiles->mstrowcostfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->mstrowcostfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->mstrowcostfile,"",MAXSTRLEN); } if(strlen(outfiles->mstcolcostfile)){ ParseFilename(outfiles->mstcolcostfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->mstcolcostfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->mstcolcostfile,"",MAXSTRLEN); } if(strlen(outfiles->mstcostsfile)){ ParseFilename(outfiles->mstcostsfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->mstcostsfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->mstcostsfile,"",MAXSTRLEN); } if(strlen(outfiles->corrdumpfile)){ ParseFilename(outfiles->corrdumpfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->corrdumpfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->corrdumpfile,"",MAXSTRLEN); } if(strlen(outfiles->rawcorrdumpfile)){ ParseFilename(outfiles->rawcorrdumpfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->rawcorrdumpfile,tempstring,MAXSTRLEN); }else{ StrNCopy(tileoutfiles->rawcorrdumpfile,"",MAXSTRLEN); } if(strlen(outfiles->costoutfile)){ ParseFilename(outfiles->costoutfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld", tiledir,TMPTILEROOT,basename,tilerow,tilecol,tileparams->ncol); StrNCopy(tileoutfiles->costoutfile,tempstring,MAXSTRLEN); }else{ sprintf(tempstring,"%s/%s%s%ld_%ld.%ld", tiledir,TMPTILEROOT,TMPTILECOSTSUFFIX,tilerow,tilecol, tileparams->ncol); StrNCopy(tileoutfiles->costoutfile,tempstring,MAXSTRLEN); } tileoutfiles->outfileformat=TMPTILEOUTFORMAT; } /* function: GrowRegions() * ----------------------- * Grows contiguous regions demarcated by arcs whose residual costs are * less than some threshold. Numbers the regions sequentially from 0. */ void GrowRegions(void **costs, short **flows, long nrow, long ncol, incrcostT **incrcosts, outfileT *outfiles, paramT *params){ long i, row, col, maxcol; long arcrow, arccol, arcnum, fromdist, arcdist; long regioncounter, *regionsizes, regionsizeslen, *thisregionsize; long closestregiondist, closestregion=0, lastfromdist; long costthresh, minsize, maxcost; short **regions = NULL; nodeT **nodes = NULL; nodeT *source, *from, *to, *ground; char regionfile[MAXSTRLEN]; bucketT bkts[1]; /* error checking */ fprintf(sp1,"Growing reliable regions\n"); minsize=params->minregionsize; costthresh=params->tilecostthresh; if(minsize>nrow*ncol){ fprintf(sp0,"Minimum region size cannot exceed tile size\nAbort\n"); exit(ABNORMAL_EXIT); } /* loop over all arcs */ for(arcrow=0;arcrow<2*nrow-1;arcrow++){ if(arcrowsize=maxcost+2; bkts->minind=0; bkts->maxind=bkts->size-1; bkts->curr=0; bkts->wrapped=FALSE; bkts->bucketbase=(nodeT **)MAlloc(bkts->size*sizeof(nodeT *)); bkts->bucket=bkts->bucketbase; for(i=0;isize;i++){ bkts->bucket[i]=NULL; } /* initialize region variables */ regioncounter=-1; regionsizeslen=INITARRSIZE; regionsizes=(long *)MAlloc(regionsizeslen*sizeof(long)); for(row=0;rownext=NULL; source->prev=NULL; source->group=INBUCKET; source->outcost=0; bkts->bucket[0]=source; bkts->curr=0; lastfromdist=0; /* increment the region counter */ if(++regioncounter>=regionsizeslen){ regionsizeslen+=INITARRSIZE; regionsizes=(long *)ReAlloc(regionsizes, regionsizeslen*sizeof(long)); } thisregionsize=®ionsizes[regioncounter]; /* set up */ (*thisregionsize)=0; closestregiondist=VERYFAR; /* loop to grow region */ while(TRUE){ /* set from node to closest node in circular bucket structure */ from=ClosestNode(bkts); /* break if we can't grow any more and the region is big enough */ if(from==NULL){ if(*thisregionsize>=minsize){ /* no more nonregion nodes, and current region is big enough */ break; }else{ /* no more nonregion nodes, but current region still too small */ /* merge with another region */ MergeRegions(nodes,source,regionsizes,closestregion,nrow,ncol); regioncounter--; break; } }else{ fromdist=from->outcost; if(fromdist>lastfromdist){ if(regionsizes[regioncounter]>=minsize){ /* region grown to all nodes within mincost, is big enough */ break; } if(fromdist>closestregiondist){ /* another region closer than new node, so merge regions */ MergeRegions(nodes,source,regionsizes,closestregion,nrow,ncol); regioncounter--; break; } } } /* make from node a part of the current region */ from->incost=regioncounter; (*thisregionsize)++; lastfromdist=fromdist; /* scan from's neighbors */ arcnum=0; while((to=RegionsNeighborNode(from,&arcnum,nodes, &arcrow,&arccol,nrow,ncol))!=NULL){ /* get cost of arc to the to node */ arcdist=incrcosts[arcrow][arccol].negcost; /* see if to node is already in another region */ if(to->incost>=0){ /* keep track of which neighboring region is closest */ if(to->incost!=regioncounter && arcdistincost; } }else{ /* to node is not in another region */ /* compare distance of new nodes to temp labels */ if(arcdist<(to->outcost)){ /* if to node is already in a (circular) bucket, remove it */ if(to->group==INBUCKET){ BucketRemove(to,to->outcost,bkts); } /* update to node */ to->outcost=arcdist; to->pred=from; /* insert to node into appropriate (circular) bucket */ BucketInsert(to,arcdist,bkts); if(arcdistcurr){ bkts->curr=arcdist; } } } } } } } } fprintf(sp2,"Tile partitioned into %ld regions\n",regioncounter+1); /* write regions array */ /* write as shorts if multiple tiles */ if(params->ntilerow > 1 || params->ntilecol>1){ regions=(short **)Get2DMem(nrow,ncol,sizeof(short *),sizeof(short)); for(row=0;rowLARGESHORT){ fprintf(sp0, "Number of regions in tile exceeds max allowed\nAbort\n"); exit(ABNORMAL_EXIT); } regions[row][col]=nodes[row][col].incost; } } sprintf(regionfile,"%s%s",outfiles->outfile,REGIONSUFFIX); fprintf(sp2,"Writing region data to file %s\n",regionfile); Write2DArray((void **)regions,regionfile,nrow,ncol,sizeof(short)); } /* free memory */ if (nodes) Free2DArray((void **)nodes,nrow); if (regions) Free2DArray((void **)regions,nrow); free(bkts->bucketbase); } /* function: GrowConnCompMask() * ---------------------------- * Grows contiguous regions demarcated by arcs whose residual costs are * less than some threshold. Numbers the regions sequentially from 1. * Writes out byte file of connected component mask, with 0 for any pixels * not assigned to a component. */ void GrowConnCompsMask(void **costs, short **flows, long nrow, long ncol, incrcostT **incrcosts, outfileT *outfiles, paramT *params){ long i, row, col, maxcol; long arcrow, arccol, arcnum; long regioncounter, *regionsizes, regionsizeslen, *thisregionsize; long *sortedregionsizes; long costthresh, minsize, maxncomps, ntied, newnum; nodeT **nodes; nodeT *source, *from, *to, *ground; unsigned char **components; bucketT bkts[1]; /* error checking */ fprintf(sp1,"Growing connected component mask\n"); minsize=params->minconncompfrac*nrow*ncol; maxncomps=params->maxncomps; costthresh=params->conncompthresh; if(minsize>nrow*ncol){ fprintf(sp0,"Minimum region size cannot exceed tile size\nAbort\n"); exit(ABNORMAL_EXIT); } /* loop over all arcs */ for(arcrow=0;arcrow<2*nrow-1;arcrow++){ if(arcrowsize=1; bkts->minind=0; bkts->maxind=0; bkts->wrapped=FALSE; bkts->bucketbase=(nodeT **)MAlloc(sizeof(nodeT *)); bkts->bucket=bkts->bucketbase; bkts->bucket[0]=NULL; /* initialize region variables */ regioncounter=0; regionsizeslen=INITARRSIZE; regionsizes=(long *)MAlloc(regionsizeslen*sizeof(long)); for(row=0;rownext=NULL; source->prev=NULL; source->group=INBUCKET; source->outcost=0; bkts->bucket[0]=source; bkts->curr=0; /* increment the region counter */ if(++regioncounter>=regionsizeslen){ regionsizeslen+=INITARRSIZE; regionsizes=(long *)ReAlloc(regionsizes, regionsizeslen*sizeof(long)); } thisregionsize=®ionsizes[regioncounter]; /* set up */ (*thisregionsize)=0; /* loop to grow region */ while(TRUE){ /* set from node to closest node in circular bucket structure */ from=ClosestNode(bkts); /* break if we can't grow any more and the region is big enough */ if(from==NULL){ if(regionsizes[regioncounter]>=minsize){ /* no more nonregion nodes, and current region is big enough */ break; }else{ /* no more nonregion nodes, but current region still too small */ /* zero out the region */ RenumberRegion(nodes,source,0,nrow,ncol); regioncounter--; break; } } /* make from node a part of the current region */ from->incost=regioncounter; (*thisregionsize)++; /* scan from's neighbors */ arcnum=0; while((to=RegionsNeighborNode(from,&arcnum,nodes, &arcrow,&arccol,nrow,ncol))!=NULL){ /* see if to can be reached */ if(to->incost<0 && incrcosts[arcrow][arccol].negcost==0 && to->group!=INBUCKET){ /* update to node */ to->pred=from; BucketInsert(to,0,bkts); } } } } } } fprintf(sp2,"%ld connected components formed\n",regioncounter); /* make sure we don't have too many components */ if(regioncounter>maxncomps){ /* copy regionsizes array and sort to find new minimum region size */ fprintf(sp2,"Keeping only %ld connected components\n",maxncomps); sortedregionsizes=(long *)MAlloc(regioncounter*sizeof(long)); for(i=0;i=0 && sortedregionsizes[i]==minsize){ ntied++; i--; } /* zero out regions that are too small */ newnum=-1; for(row=0;row0){ if(regionsizes[i]0)){ /* region too small, so zero it out */ RenumberRegion(nodes,&(nodes[row][col]),0,nrow,ncol); }else{ /* keep region, assign it new region number */ /* temporarily assign negative of new number to avoid collisions */ RenumberRegion(nodes,&(nodes[row][col]),newnum--,nrow,ncol); } } } } /* flip temporary negative region numbers so they are positive */ for(row=0;row255){ fprintf(sp0,"Number of connected components too large for byte data\n" "Abort\n"); exit(ABNORMAL_EXIT); } components[row][col]=(unsigned char )(nodes[row][col].incost); } } fprintf(sp1,"Writing connected components to file %s\n", outfiles->conncompfile); Write2DArray((void **)components,outfiles->conncompfile,nrow,ncol, sizeof(unsigned char)); /* free memory */ Free2DArray((void **)nodes,nrow); Free2DArray((void **)components,nrow); free(bkts->bucketbase); } /* function: ThickenCosts() * ------------------------ */ long ThickenCosts(incrcostT **incrcosts, long nrow, long ncol){ long row, col, templong, maxcost; double n; /* initialize variable storing maximum cost */ maxcost=-LARGELONG; /* loop over row arcs and convolve */ for(row=0;rowLARGESHORT){ fprintf(sp0,"WARNING: COSTS CLIPPED IN ThickenCosts()\n"); incrcosts[row][col].negcost=LARGESHORT; }else{ incrcosts[row][col].negcost=templong; } if(incrcosts[row][col].negcost>maxcost){ maxcost=incrcosts[row][col].negcost; } } } /* loop over column arcs and convolve */ for(row=nrow-1;row<2*nrow-1;row++){ for(col=0;colLARGESHORT){ fprintf(sp0,"WARNING: COSTS CLIPPED IN ThickenCosts()\n"); incrcosts[row][col].negcost=LARGESHORT; }else{ incrcosts[row][col].negcost=templong; } if(incrcosts[row][col].negcost>maxcost){ maxcost=incrcosts[row][col].negcost; } } } /* return maximum cost */ return(maxcost); } /* function: RegionsNeighborNode() * ------------------------------- * Return the neighboring node of the given node corresponding to the * given arc number. */ nodeT *RegionsNeighborNode(nodeT *node1, long *arcnumptr, nodeT **nodes, long *arcrowptr, long *arccolptr, long nrow, long ncol){ long row, col; row=node1->row; col=node1->col; while(TRUE){ switch((*arcnumptr)++){ case 0: if(col!=ncol-1){ *arcrowptr=nrow-1+row; *arccolptr=col; return(&nodes[row][col+1]); } break; case 1: if(row!=nrow-1){ *arcrowptr=row; *arccolptr=col; return(&nodes[row+1][col]); } break; case 2: if(col!=0){ *arcrowptr=nrow-1+row; *arccolptr=col-1; return(&nodes[row][col-1]); } break; case 3: if(row!=0){ *arcrowptr=row-1; *arccolptr=col; return(&nodes[row-1][col]); } break; default: return(NULL); } } } /* function: ClearBuckets() * ------------------------ * Removes any nodes in the bucket data structure passed, and resets * their distances to VERYFAR. Assumes bukets indexed from 0. */ void ClearBuckets(bucketT *bkts){ nodeT *currentnode, *nextnode; long i; /* loop over all buckets */ for(i=0;isize;i++){ /* clear the bucket */ nextnode=bkts->bucketbase[i]; while(nextnode!=NULL){ currentnode=nextnode; nextnode=currentnode->next; currentnode->group=NOTINBUCKET; currentnode->outcost=VERYFAR; currentnode->pred=NULL; } bkts->bucketbase[i]=NULL; } /* reset bucket parameters */ bkts->minind=0; bkts->maxind=bkts->size-1; bkts->wrapped=FALSE; } /* function: MergeRegions() * ------------------------ * */ void MergeRegions(nodeT **nodes, nodeT *source, long *regionsizes, long closestregion, long nrow, long ncol){ long nextnodelistlen, nextnodelistnext, arcnum, arcrow, arccol, regionnum; nodeT *from, *to, **nextnodelist; /* initialize */ nextnodelistlen=INITARRSIZE; nextnodelist=(nodeT **)MAlloc(nextnodelistlen*sizeof(nodeT **)); nextnodelist[0]=source; nextnodelistnext=1; regionnum=source->incost; /* find all nodes in current region and switch their regions */ while(nextnodelistnext){ from=nextnodelist[--nextnodelistnext]; from->incost=closestregion; arcnum=0; while((to=RegionsNeighborNode(from,&arcnum,nodes, &arcrow,&arccol,nrow,ncol))!=NULL){ if(to->incost==regionnum){ if(nextnodelistnext>=nextnodelistlen){ nextnodelistlen+=INITARRSIZE; nextnodelist=(nodeT **)ReAlloc(nextnodelist, nextnodelistlen*sizeof(nodeT *)); } nextnodelist[nextnodelistnext++]=to; } } } /* update size of region to which we are merging */ regionsizes[closestregion]+=regionsizes[regionnum]; /* free memory */ free(nextnodelist); } /* function: RenumberRegion() * -------------------------- * */ void RenumberRegion(nodeT **nodes, nodeT *source, long newnum, long nrow, long ncol){ long nextnodelistlen, nextnodelistnext, arcnum, arcrow, arccol, regionnum; nodeT *from, *to, **nextnodelist; /* initialize */ nextnodelistlen=INITARRSIZE; nextnodelist=(nodeT **)MAlloc(nextnodelistlen*sizeof(nodeT **)); nextnodelist[0]=source; nextnodelistnext=1; regionnum=source->incost; /* find all nodes in current region and switch their regions */ while(nextnodelistnext){ from=nextnodelist[--nextnodelistnext]; from->incost=newnum; arcnum=0; while((to=RegionsNeighborNode(from,&arcnum,nodes, &arcrow,&arccol,nrow,ncol))!=NULL){ if(to->incost==regionnum){ if(nextnodelistnext>=nextnodelistlen){ nextnodelistlen+=INITARRSIZE; nextnodelist=(nodeT **)ReAlloc(nextnodelist, nextnodelistlen*sizeof(nodeT *)); } nextnodelist[nextnodelistnext++]=to; } } } /* free memory */ free(nextnodelist); } /* function: AssembleTiles() * ------------------------- */ void AssembleTiles(outfileT *outfiles, paramT *params, long nlines, long linelen){ long tilerow, tilecol, ntilerow, ntilecol, ntiles, rowovrlp, colovrlp; long i, j, k, ni, nj, dummylong, costtypesize = 0; long nrow, ncol, prevnrow, prevncol, nextnrow, nextncol; long n, ncycle, nflowdone, nflow, candidatelistsize, candidatebagsize; long nnodes, maxnflowcycles, arclen, narcs, sourcetilenum, flowmax; long *totarclens; long ***scndrycosts; double avgarclen; float **unwphase, **nextunwphase, **lastunwphase, **tempunwphase; float *unwphaseabove, *unwphasebelow; void **costs, **nextcosts, **lastcosts, **tempcosts; void *costsabove, *costsbelow; short **scndryflows, **bulkoffsets, **regions, **nextregions, **lastregions; short **tempregions, *regionsbelow, *regionsabove; short *nscndrynodes, *nscndryarcs; incrcostT **incrcosts; totalcostT totalcost, oldtotalcost; nodeT *source; nodeT **scndrynodes, ***scndryapexes; signed char **iscandidate; signed char notfirstloop; candidateT *candidatebag, *candidatelist; nodesuppT **nodesupp; scndryarcT **scndryarcs; bucketT *bkts; char filename[MAXSTRLEN]; /* set up */ fprintf(sp1,"Assembling tiles\n"); ntilerow=params->ntilerow; ntilecol=params->ntilecol; ntiles=ntilerow*ntilecol; rowovrlp=params->rowovrlp; colovrlp=params->colovrlp; ni=ceil((nlines+(ntilerow-1)*rowovrlp)/(double )ntilerow); nj=ceil((linelen+(ntilecol-1)*colovrlp)/(double )ntilecol); nrow=0; ncol=0; flowmax=params->scndryarcflowmax; if(params->costmode==TOPO){ costtypesize=sizeof(costT); }else if(params->costmode==DEFO){ costtypesize=sizeof(costT); }else if(params->costmode==SMOOTH){ costtypesize=sizeof(smoothcostT); } /* get memory */ regions=(short **)Get2DMem(ni,nj,sizeof(short *),sizeof(short)); nextregions=(short **)Get2DMem(ni,nj,sizeof(short *),sizeof(short)); lastregions=(short **)Get2DMem(ni,nj,sizeof(short *),sizeof(short)); regionsbelow=(short *)MAlloc(nj*sizeof(short)); regionsabove=(short *)MAlloc(nj*sizeof(short)); unwphase=(float **)Get2DMem(ni,nj,sizeof(float *),sizeof(float)); nextunwphase=(float **)Get2DMem(ni,nj,sizeof(float *),sizeof(float)); lastunwphase=(float **)Get2DMem(ni,nj,sizeof(float *),sizeof(float)); unwphaseabove=(float *)MAlloc(nj*sizeof(float)); unwphasebelow=(float *)MAlloc(nj*sizeof(float)); scndrynodes=(nodeT **)MAlloc(ntiles*sizeof(nodeT *)); nodesupp=(nodesuppT **)MAlloc(ntiles*sizeof(nodesuppT *)); scndryarcs=(scndryarcT **)MAlloc(ntiles*sizeof(scndryarcT *)); scndrycosts=(long ***)MAlloc(ntiles*sizeof(long **)); nscndrynodes=(short *)MAlloc(ntiles*sizeof(short)); nscndryarcs=(short *)MAlloc(ntiles*sizeof(short)); totarclens=(long *)MAlloc(ntiles*sizeof(long)); bulkoffsets=(short **)Get2DMem(ntilerow,ntilecol,sizeof(short *), sizeof(short)); costs=(void **)Get2DRowColMem(ni+2,nj+2,sizeof(void *),costtypesize); nextcosts=(void **)Get2DRowColMem(ni+2,nj+2,sizeof(void *),costtypesize); lastcosts=(void **)Get2DRowColMem(ni+2,nj+2,sizeof(void *),costtypesize); costsabove=(void *)MAlloc(nj*costtypesize); costsbelow=(void *)MAlloc(nj*costtypesize); /* trace regions and parse secondary nodes and arcs for each tile */ bulkoffsets[0][0]=0; for(tilerow=0;tilerowmaxcyclefraction); while(TRUE){ fprintf(sp1,"Flow increment: %ld (Total improvements: %ld)\n", nflow,ncycle); /* set up the incremental (residual) cost arrays */ SetupIncrFlowCosts((void **)scndrycosts,incrcosts,scndryflows,nflow,ntiles, ntiles,nscndryarcs,params); /* set the tree root (equivalent to source of shortest path problem) */ sourcetilenum=(long )ntilecol*floor(ntilerow/2.0)+floor(ntilecol/2.0); source=&scndrynodes[sourcetilenum][0]; /* run the solver, and increment nflowdone if no cycles are found */ n=TreeSolve(scndrynodes,nodesupp,NULL,source,&candidatelist,&candidatebag, &candidatelistsize,&candidatebagsize,bkts,scndryflows, (void **)scndrycosts,incrcosts,scndryapexes,iscandidate,0, nflow,NULL,NULL,NULL,ntiles,nscndrynodes,ntiles,nscndryarcs, ntiles,0,NULL,params); /* evaluate and save the total cost (skip if first loop through nflow) */ if(notfirstloop){ oldtotalcost=totalcost; totalcost=EvaluateTotalCost((void **)scndrycosts,scndryflows,ntiles,0, nscndryarcs,params); if(totalcost>oldtotalcost || (n>0 && totalcost==oldtotalcost)){ fprintf(sp0,"Unexpected increase in total cost. Breaking loop\n"); break; } } /* consider this flow increment done if not too many neg cycles found */ ncycle+=n; if(n<=maxnflowcycles){ nflowdone++; }else{ nflowdone=1; } /* break if we're done with all flow increments or problem is convex */ if(nflowdone>=params->maxflow){ break; } /* update flow increment */ nflow++; if(nflow>params->maxflow){ nflow=1; notfirstloop=TRUE; } } /* end loop until no more neg cycles */ /* free some memory */ for(i=0;ibucketbase); /* integrate phase from secondary network problem */ IntegrateSecondaryFlows(linelen,nlines,scndrynodes,nodesupp,scndryarcs, nscndryarcs,scndryflows,bulkoffsets,outfiles,params); /* free remaining memory */ for(i=0;irmtmptile){ for(tilerow=0;tilerowtiledir,LOGFILEROOT,tilerow,tilecol); unlink(filename); } } rmdir(params->tiledir); } } /* function: ReadNextRegion() * -------------------------- */ void ReadNextRegion(long tilerow, long tilecol, long nlines, long linelen, outfileT *outfiles, paramT *params, short ***nextregionsptr, float ***nextunwphaseptr, void ***nextcostsptr, long *nextnrowptr, long *nextncolptr){ long nexttilelinelen, nexttilenlines, costtypesize=0; tileparamT nexttileparams[1]; outfileT nexttileoutfiles[1]; char nextfile[MAXSTRLEN], tempstring[MAXTMPSTRLEN]; char path[MAXSTRLEN], basename[MAXSTRLEN]; /* size of the data type for holding cost data depends on cost mode */ if(params->costmode==TOPO){ costtypesize=sizeof(costT); }else if(params->costmode==DEFO){ costtypesize=sizeof(costT); }else if(params->costmode==SMOOTH){ costtypesize=sizeof(smoothcostT); } /* use SetupTile() to set filenames only; tile params overwritten below */ SetupTile(nlines,linelen,params,nexttileparams,outfiles,nexttileoutfiles, tilerow,tilecol); nexttilenlines=nexttileparams->nrow; nexttilelinelen=nexttileparams->ncol; /* set tile parameters, overwriting values set by SetupTile() above */ SetTileReadParams(nexttileparams,nexttilenlines,nexttilelinelen, tilerow,tilecol,nlines,linelen,params); /* read region data */ ParseFilename(outfiles->outfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld%s", params->tiledir,TMPTILEROOT,basename,tilerow,tilecol, nexttilelinelen,REGIONSUFFIX); StrNCopy(nextfile,tempstring,MAXSTRLEN); Read2DArray((void ***)nextregionsptr,nextfile, nexttilelinelen,nexttilenlines, nexttileparams,sizeof(short *),sizeof(short)); /* read unwrapped phase data */ if(TMPTILEOUTFORMAT==ALT_LINE_DATA){ ReadAltLineFilePhase(nextunwphaseptr,nexttileoutfiles->outfile, nexttilelinelen,nexttilenlines,nexttileparams); }else if(TMPTILEOUTFORMAT==FLOAT_DATA){ Read2DArray((void ***)nextunwphaseptr,nexttileoutfiles->outfile, nexttilelinelen,nexttilenlines,nexttileparams, sizeof(float *),sizeof(float)); }else{ fprintf(sp0,"Cannot read format of unwrapped phase tile data\nAbort\n"); exit(ABNORMAL_EXIT); } /* read cost data */ if(params->p<0){ Read2DRowColFile((void ***)nextcostsptr,nexttileoutfiles->costoutfile, nexttilelinelen,nexttilenlines,nexttileparams, costtypesize); }else{ fprintf(sp0,"Tile reassembly not enabled in Lp mode\nAbort\n"); exit(ABNORMAL_EXIT); } /* flip sign of wrapped phase if flip flag is set */ FlipPhaseArraySign(*nextunwphaseptr,params, nexttileparams->nrow,nexttileparams->ncol); /* set outputs */ (*nextnrowptr)=nexttileparams->nrow; (*nextncolptr)=nexttileparams->ncol; } /* function: SetTileReadParams() * ----------------------------- * Set parameters for reading the nonoverlapping piece of each tile. * ni and nj are the numbers of rows and columns in this particular tile. * The meanings of these variables are different for the last row * and column. */ void SetTileReadParams(tileparamT *tileparams, long nexttilenlines, long nexttilelinelen, long tilerow, long tilecol, long nlines, long linelen, paramT *params){ long rowovrlp, colovrlp; /* set temporary variables */ rowovrlp=params->rowovrlp; colovrlp=params->colovrlp; /* row parameters */ if(tilerow==0){ tileparams->firstrow=0; }else{ tileparams->firstrow=ceil(rowovrlp/2.0); } if(tilerow!=params->ntilerow-1){ tileparams->nrow=nexttilenlines-floor(rowovrlp/2.0)-tileparams->firstrow; }else{ tileparams->nrow=nexttilenlines-tileparams->firstrow; } /* column parameters */ if(tilecol==0){ tileparams->firstcol=0; }else{ tileparams->firstcol=ceil(colovrlp/2.0); } if(tilecol!=params->ntilecol-1){ tileparams->ncol=nexttilelinelen-floor(colovrlp/2.0)-tileparams->firstcol; }else{ tileparams->ncol=nexttilelinelen-tileparams->firstcol; } } /* function: ReadEdgesAboveAndBelow() * ---------------------------------- */ void ReadEdgesAboveAndBelow(long tilerow, long tilecol, long nlines, long linelen, paramT *params, outfileT *outfiles, short *regionsabove, short *regionsbelow, float *unwphaseabove, float *unwphasebelow, void *costsabove, void *costsbelow){ long ni, nj, readtilelinelen, readtilenlines, costtypesize=0; long ntilerow, ntilecol, rowovrlp, colovrlp; tileparamT tileparams[1]; outfileT outfilesabove[1], outfilesbelow[1]; float **unwphaseaboveptr, **unwphasebelowptr; void **costsaboveptr, **costsbelowptr; short **regionsaboveptr, **regionsbelowptr; char tempstring[MAXTMPSTRLEN], readregionfile[MAXSTRLEN]; char path[MAXSTRLEN], basename[MAXSTRLEN]; /* set temporary variables */ ntilerow=params->ntilerow; ntilecol=params->ntilecol; rowovrlp=params->rowovrlp; colovrlp=params->colovrlp; ni=ceil((nlines+(ntilerow-1)*rowovrlp)/(double )ntilerow); nj=ceil((linelen+(ntilecol-1)*colovrlp)/(double )ntilecol); /* size of the data type for holding cost data depends on cost mode */ if(params->costmode==TOPO){ costtypesize=sizeof(costT); }else if(params->costmode==DEFO){ costtypesize=sizeof(costT); }else if(params->costmode==SMOOTH){ costtypesize=sizeof(smoothcostT); } /* set names of files with SetupTile() */ /* tile parameters set by SetupTile() will be overwritten below */ if(tilerow!=0){ SetupTile(nlines,linelen,params,tileparams,outfiles,outfilesabove, tilerow-1,tilecol); } if(tilerow!=ntilerow-1){ SetupTile(nlines,linelen,params,tileparams,outfiles,outfilesbelow, tilerow+1,tilecol); } /* temporary pointers, so we can use Read2DArray() with 1D output array */ unwphaseaboveptr=&unwphaseabove; unwphasebelowptr=&unwphasebelow; costsaboveptr=&costsabove; costsbelowptr=&costsbelow; regionsaboveptr=®ionsabove; regionsbelowptr=®ionsbelow; /* set some reading parameters */ if(tilecol==0){ tileparams->firstcol=0; }else{ tileparams->firstcol=ceil(colovrlp/2.0); } if(tilecol!=params->ntilecol-1){ readtilelinelen=nj; tileparams->ncol=readtilelinelen-floor(colovrlp/2.0)-tileparams->firstcol; }else{ readtilelinelen=linelen-(ntilecol-1)*(nj-colovrlp); tileparams->ncol=readtilelinelen-tileparams->firstcol; } tileparams->nrow=1; /* read last line of tile above */ readtilenlines=ni; if(tilerow!=0){ tileparams->firstrow=readtilenlines-floor(rowovrlp/2.0)-1; /* read region data */ ParseFilename(outfiles->outfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld%s", params->tiledir,TMPTILEROOT,basename,tilerow-1,tilecol, readtilelinelen,REGIONSUFFIX); StrNCopy(readregionfile,tempstring,MAXSTRLEN); Read2DArray((void ***)®ionsaboveptr,readregionfile, readtilelinelen,readtilenlines, tileparams,sizeof(short *),sizeof(short)); /* read unwrapped phase data */ if(TMPTILEOUTFORMAT==ALT_LINE_DATA){ ReadAltLineFilePhase(&unwphaseaboveptr,outfilesabove->outfile, readtilelinelen,readtilenlines,tileparams); }else if(TMPTILEOUTFORMAT==FLOAT_DATA){ Read2DArray((void ***)&unwphaseaboveptr,outfilesabove->outfile, readtilelinelen,readtilenlines,tileparams, sizeof(float *),sizeof(float)); } /* flip sign of wrapped phase if flip flag is set */ FlipPhaseArraySign(unwphaseaboveptr,params, tileparams->nrow,tileparams->ncol); /* read costs data */ tileparams->firstrow--; Read2DRowColFileRows((void ***)&costsaboveptr,outfilesabove->costoutfile, readtilelinelen,readtilenlines,tileparams, costtypesize); /* remove temporary tile cost file unless told to save it */ if(params->rmtmptile && !strlen(outfiles->costoutfile)){ unlink(outfilesabove->costoutfile); } } /* read first line of tile below */ if(tilerow!=ntilerow-1){ if(tilerow==params->ntilerow-2){ readtilenlines=nlines-(ntilerow-1)*(ni-rowovrlp); } tileparams->firstrow=ceil(rowovrlp/2.0); /* read region data */ ParseFilename(outfiles->outfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld%s", params->tiledir,TMPTILEROOT,basename,tilerow+1,tilecol, readtilelinelen,REGIONSUFFIX); StrNCopy(readregionfile,tempstring,MAXSTRLEN); Read2DArray((void ***)®ionsbelowptr,readregionfile, readtilelinelen,readtilenlines, tileparams,sizeof(short *),sizeof(short)); /* read unwrapped phase data */ if(TMPTILEOUTFORMAT==ALT_LINE_DATA){ ReadAltLineFilePhase(&unwphasebelowptr,outfilesbelow->outfile, readtilelinelen,readtilenlines,tileparams); }else if(TMPTILEOUTFORMAT==FLOAT_DATA){ Read2DArray((void ***)&unwphasebelowptr,outfilesbelow->outfile, readtilelinelen,readtilenlines,tileparams, sizeof(float *),sizeof(float)); } /* flip the sign of the wrapped phase if flip flag is set */ FlipPhaseArraySign(unwphasebelowptr,params, tileparams->nrow,tileparams->ncol); /* read costs data */ Read2DRowColFileRows((void ***)&costsbelowptr,outfilesbelow->costoutfile, readtilelinelen,readtilenlines,tileparams, costtypesize); }else{ /* remove temporoary tile cost file for last row unless told to save it */ if(params->rmtmptile && !strlen(outfiles->costoutfile)){ SetupTile(nlines,linelen,params,tileparams,outfiles,outfilesbelow, tilerow,tilecol); unlink(outfilesbelow->costoutfile); } } } /* function: TraceRegions() * ------------------------ * Trace edges of region data to form nodes and arcs of secondary * (ie, region-level) network problem. Primary nodes and arcs are * those of the original, pixel-level network problem. Flows along * edges are computed knowing the unwrapped phase values of edges * of adjacent tiles. Costs along edges are approximated in that they * are calculated from combining adjacent cost parameters, not from * using the exact method in BuildCostArrays(). */ void TraceRegions(short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, float **unwphase, float **nextunwphase, float **lastunwphase, float *unwphaseabove, float *unwphasebelow, void **costs, void **nextcosts, void **lastcosts, void *costsabove, void *costsbelow, long prevnrow, long prevncol, long tilerow, long tilecol, long nrow, long ncol, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, long ***scndrycosts, short *nscndrynodes, short *nscndryarcs, long *totarclens, short **bulkoffsets, paramT *params){ long i, j, row, col, nnrow, nncol, tilenum, costtypesize = 0; long nnewnodes, nnewarcs, npathsout, flowmax, totarclen; long nupdatednontilenodes, updatednontilenodesize, ntilecol; short **flows; short **rightedgeflows, **loweredgeflows, **leftedgeflows, **upperedgeflows; short *inontilenodeoutarc; void **rightedgecosts, **loweredgecosts, **leftedgecosts, **upperedgecosts; nodeT **primarynodes, **updatednontilenodes; nodeT *from, *to, *nextnode, *tempnode; nodesuppT *fromsupp, *tosupp; /* initialize */ ntilecol=params->ntilecol; nnrow=nrow+1; nncol=ncol+1; primarynodes=(nodeT **)Get2DMem(nnrow,nncol,sizeof(nodeT *),sizeof(nodeT)); for(row=0;rowscndryarcflowmax; updatednontilenodesize=INITARRSIZE; nupdatednontilenodes=0; /* size of the data type for holding cost data depends on cost mode */ if(params->costmode==TOPO){ costtypesize=sizeof(costT); }else if(params->costmode==DEFO){ costtypesize=sizeof(costT); }else if(params->costmode==SMOOTH){ costtypesize=sizeof(smoothcostT); } /* get memory */ updatednontilenodes=(nodeT **)MAlloc(updatednontilenodesize*sizeof(nodeT *)); inontilenodeoutarc=(short *)MAlloc(updatednontilenodesize*sizeof(short)); flows=(short **)Get2DRowColMem(nrow+1,ncol+1,sizeof(short *),sizeof(short)); rightedgeflows=(short **)Get2DMem(nrow,1,sizeof(short *),sizeof(short)); leftedgeflows=(short **)Get2DMem(nrow,1,sizeof(short *),sizeof(short)); upperedgeflows=(short **)Get2DMem(1,ncol,sizeof(short *),sizeof(short)); loweredgeflows=(short **)Get2DMem(1,ncol,sizeof(short *),sizeof(short)); rightedgecosts=(void **)Get2DMem(nrow,1,sizeof(void *),costtypesize); leftedgecosts=(void **)Get2DMem(nrow,1,sizeof(void *),costtypesize); upperedgecosts=(void **)Get2DMem(1,ncol,sizeof(void *),costtypesize); loweredgecosts=(void **)Get2DMem(1,ncol,sizeof(void *),costtypesize); /* parse flows for this tile */ CalcFlow(unwphase,&flows,nrow,ncol); /* set up cost and flow arrays for boundaries */ SetUpperEdge(ncol,tilerow,tilecol,costs,costsabove,unwphase,unwphaseabove, upperedgecosts,upperedgeflows,params, bulkoffsets); SetLowerEdge(nrow,ncol,tilerow,tilecol,costs,costsbelow,unwphase, unwphasebelow,loweredgecosts,loweredgeflows, params,bulkoffsets); SetLeftEdge(nrow,prevncol,tilerow,tilecol,costs,lastcosts,unwphase, lastunwphase,leftedgecosts,leftedgeflows,params, bulkoffsets); SetRightEdge(nrow,ncol,tilerow,tilecol,costs,nextcosts,unwphase, nextunwphase,rightedgecosts,rightedgeflows, params,bulkoffsets); /* trace edges between regions */ while(nextnode!=NULL){ /* get next primary node from stack */ from=nextnode; nextnode=nextnode->next; from->group=NOTINBUCKET; /* find number of paths out of from node */ npathsout=FindNumPathsOut(from,params,tilerow,tilecol,nnrow,nncol,regions, nextregions,lastregions,regionsabove, regionsbelow,prevncol); /* secondary node exists if region edges fork */ if(npathsout>2){ /* mark primary node to indicate that secondary node exists for it */ from->group=ONTREE; /* create secondary node if not already created in another tile */ if((from->row!=0 || tilerow==0) && (from->col!=0 || tilecol==0)){ /* create the secondary node */ nnewnodes++; scndrynodes[tilenum]=(nodeT *)ReAlloc(scndrynodes[tilenum], nnewnodes*sizeof(nodeT)); nodesupp[tilenum]=(nodesuppT *)ReAlloc(nodesupp[tilenum], nnewnodes*sizeof(nodesuppT)); scndrynodes[tilenum][nnewnodes-1].row=tilenum; scndrynodes[tilenum][nnewnodes-1].col=nnewnodes-1; nodesupp[tilenum][nnewnodes-1].row=from->row; nodesupp[tilenum][nnewnodes-1].col=from->col; nodesupp[tilenum][nnewnodes-1].noutarcs=0; nodesupp[tilenum][nnewnodes-1].neighbornodes=NULL; nodesupp[tilenum][nnewnodes-1].outarcs=NULL; } /* create the secondary arc to this node if it doesn't already exist */ if(from->pred!=NULL && ((from->row==from->pred->row && (from->row!=0 || tilerow==0)) || (from->col==from->pred->col && (from->col!=0 || tilecol==0)))){ TraceSecondaryArc(from,scndrynodes,nodesupp,scndryarcs,scndrycosts, &nnewnodes,&nnewarcs,tilerow,tilecol,flowmax, nrow,ncol,prevnrow,prevncol,params,costs, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,flows,rightedgeflows,loweredgeflows, leftedgeflows,upperedgeflows,&updatednontilenodes, &nupdatednontilenodes,&updatednontilenodesize, &inontilenodeoutarc,&totarclen); } } /* scan neighboring primary nodes and place path candidates into stack */ RegionTraceCheckNeighbors(from,&nextnode,primarynodes,regions, nextregions,lastregions,regionsabove, regionsbelow,tilerow,tilecol,nnrow,nncol, scndrynodes,nodesupp,scndryarcs,&nnewnodes, &nnewarcs,flowmax,nrow,ncol,prevnrow,prevncol, params,costs,rightedgecosts,loweredgecosts, leftedgecosts,upperedgecosts,flows, rightedgeflows,loweredgeflows,leftedgeflows, upperedgeflows,scndrycosts,&updatednontilenodes, &nupdatednontilenodes,&updatednontilenodesize, &inontilenodeoutarc,&totarclen); } /* reset temporary secondary node and arc pointers in data structures */ /* secondary node row, col stored level, incost of primary node pointed to */ /* update nodes in this tile */ for(i=0;ilevel][tempnode->incost]; } } /* update nodes not in this tile that were affected (that have new arcs) */ for(i=0;irow; col=updatednontilenodes[i]->col; j=inontilenodeoutarc[i]; tempnode=nodesupp[row][col].neighbornodes[j]; nodesupp[row][col].neighbornodes[j] =&scndrynodes[tempnode->level][tempnode->incost]; } /* update secondary arcs */ for(i=0;ilevel][tempnode->incost]; from=scndryarcs[tilenum][i].from; tempnode=scndryarcs[tilenum][i].to; scndryarcs[tilenum][i].to =&scndrynodes[tempnode->level][tempnode->incost]; to=scndryarcs[tilenum][i].to; /* update secondary arc pointers in nodesupp strcutres */ fromsupp=&nodesupp[from->row][from->col]; j=0; while(fromsupp->neighbornodes[j]!=to){ j++; } fromsupp->outarcs[j]=&scndryarcs[tilenum][i]; tosupp=&nodesupp[to->row][to->col]; j=0; while(tosupp->neighbornodes[j]!=from){ j++; } tosupp->outarcs[j]=&scndryarcs[tilenum][i]; } /* set outputs */ nscndrynodes[tilenum]=nnewnodes; nscndryarcs[tilenum]=nnewarcs; totarclens[tilenum]=totarclen; /* free memory */ Free2DArray((void **)primarynodes,nnrow); Free2DArray((void **)flows,2*nrow-1); Free2DArray((void **)rightedgeflows,nrow); Free2DArray((void **)leftedgeflows,nrow); Free2DArray((void **)upperedgeflows,1); Free2DArray((void **)loweredgeflows,1); Free2DArray((void **)rightedgecosts,nrow); Free2DArray((void **)leftedgecosts,nrow); Free2DArray((void **)upperedgecosts,1); Free2DArray((void **)loweredgecosts,1); } /* function: FindNumPathsOut() * --------------------------- * Check all outgoing arcs to see how many paths out there are. */ long FindNumPathsOut(nodeT *from, paramT *params, long tilerow, long tilecol, long nnrow, long nncol, short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, long prevncol){ long npathsout, ntilerow, ntilecol, fromrow, fromcol; /* initialize */ ntilerow=params->ntilerow; ntilecol=params->ntilecol; fromrow=from->row; fromcol=from->col; npathsout=0; /* rightward arc */ if(fromcol!=nncol-1){ if(fromrow==0 || fromrow==nnrow-1 || regions[fromrow-1][fromcol]!=regions[fromrow][fromcol]){ npathsout++; } }else{ if(fromrow==0 || fromrow==nnrow-1 || (tilecol!=ntilecol-1 && nextregions[fromrow-1][0]!=nextregions[fromrow][0])){ npathsout++; } } /* downward arc */ if(fromrow!=nnrow-1){ if(fromcol==0 || fromcol==nncol-1 || regions[fromrow][fromcol]!=regions[fromrow][fromcol-1]){ npathsout++; } }else{ if(fromcol==0 || fromcol==nncol-1 || (tilerow!=ntilerow-1 && regionsbelow[fromcol]!=regionsbelow[fromcol-1])){ npathsout++; } } /* leftward arc */ if(fromcol!=0){ if(fromrow==0 || fromrow==nnrow-1 || regions[fromrow][fromcol-1]!=regions[fromrow-1][fromcol-1]){ npathsout++; } }else{ if(fromrow==0 || fromrow==nnrow-1 || (tilecol!=0 && (lastregions[fromrow][prevncol-1] !=lastregions[fromrow-1][prevncol-1]))){ npathsout++; } } /* upward arc */ if(fromrow!=0){ if(fromcol==0 || fromcol==nncol-1 || regions[fromrow-1][fromcol-1]!=regions[fromrow-1][fromcol]){ npathsout++; } }else{ if(fromcol==0 || fromcol==nncol-1 || (tilerow!=0 && regionsabove[fromcol-1]!=regionsabove[fromcol])){ npathsout++; } } /* return number of paths out of node */ return(npathsout); } /* function: RegionTraceCheckNeighbors() * ------------------------------------- */ void RegionTraceCheckNeighbors(nodeT *from, nodeT **nextnodeptr, nodeT **primarynodes, short **regions, short **nextregions, short **lastregions, short *regionsabove, short *regionsbelow, long tilerow, long tilecol, long nnrow, long nncol, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, long *nnewnodesptr, long *nnewarcsptr, long flowmax, long nrow, long ncol, long prevnrow, long prevncol, paramT *params, void **costs, void **rightedgecosts, void **loweredgecosts, void **leftedgecosts, void **upperedgecosts, short **flows, short **rightedgeflows, short **loweredgeflows, short **leftedgeflows, short **upperedgeflows, long ***scndrycosts, nodeT ***updatednontilenodesptr, long *nupdatednontilenodesptr, long *updatednontilenodesizeptr, short **inontilenodeoutarcptr, long *totarclenptr){ long fromrow, fromcol; nodeT *to, *nextnode; /* initialize */ fromrow=from->row; fromcol=from->col; nextnode=(*nextnodeptr); /* check rightward arc */ if(fromcol!=nncol-1){ to=&primarynodes[fromrow][fromcol+1]; if(fromrow==0 || fromrow==nnrow-1 || regions[fromrow-1][fromcol]!=regions[fromrow][fromcol]){ if(to!=from->pred){ to->pred=from; if(to->group==NOTINBUCKET){ to->group=INBUCKET; to->next=nextnode; nextnode=to; }else if(to->group==ONTREE && (fromrow!=0 || tilerow==0)){ TraceSecondaryArc(to,scndrynodes,nodesupp,scndryarcs,scndrycosts, nnewnodesptr,nnewarcsptr,tilerow,tilecol,flowmax, nrow,ncol,prevnrow,prevncol,params,costs, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,flows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); } } } } /* check downward arc */ if(fromrow!=nnrow-1){ to=&primarynodes[fromrow+1][fromcol]; if(fromcol==0 || fromcol==nncol-1 || regions[fromrow][fromcol]!=regions[fromrow][fromcol-1]){ if(to!=from->pred){ to->pred=from; if(to->group==NOTINBUCKET){ to->group=INBUCKET; to->next=nextnode; nextnode=to; }else if(to->group==ONTREE && (fromcol!=0 || tilecol==0)){ TraceSecondaryArc(to,scndrynodes,nodesupp,scndryarcs,scndrycosts, nnewnodesptr,nnewarcsptr,tilerow,tilecol,flowmax, nrow,ncol,prevnrow,prevncol,params,costs, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,flows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); } } } } /* check leftward arc */ if(fromcol!=0){ to=&primarynodes[fromrow][fromcol-1]; if(fromrow==0 || fromrow==nnrow-1 || regions[fromrow][fromcol-1]!=regions[fromrow-1][fromcol-1]){ if(to!=from->pred){ to->pred=from; if(to->group==NOTINBUCKET){ to->group=INBUCKET; to->next=nextnode; nextnode=to; }else if(to->group==ONTREE && (fromrow!=0 || tilerow==0)){ TraceSecondaryArc(to,scndrynodes,nodesupp,scndryarcs,scndrycosts, nnewnodesptr,nnewarcsptr,tilerow,tilecol,flowmax, nrow,ncol,prevnrow,prevncol,params,costs, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,flows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); } } } } /* check upward arc */ if(fromrow!=0){ to=&primarynodes[fromrow-1][fromcol]; if(fromcol==0 || fromcol==nncol-1 || regions[fromrow-1][fromcol-1]!=regions[fromrow-1][fromcol]){ if(to!=from->pred){ to->pred=from; if(to->group==NOTINBUCKET){ to->group=INBUCKET; to->next=nextnode; nextnode=to; }else if(to->group==ONTREE && (fromcol!=0 || tilecol==0)){ TraceSecondaryArc(to,scndrynodes,nodesupp,scndryarcs,scndrycosts, nnewnodesptr,nnewarcsptr,tilerow,tilecol,flowmax, nrow,ncol,prevnrow,prevncol,params,costs, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,flows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); } } } } /* set return values */ *nextnodeptr=nextnode; } /* function: SetUpperEdge() * ------------------------ */ void SetUpperEdge(long ncol, long tilerow, long tilecol, void **voidcosts, void *voidcostsabove, float **unwphase, float *unwphaseabove, void **voidupperedgecosts, short **upperedgeflows, paramT *params, short **bulkoffsets){ long col, reloffset; double dphi, dpsi; costT **upperedgecosts, **costs, *costsabove; smoothcostT **upperedgesmoothcosts, **smoothcosts, *smoothcostsabove; long nshortcycle; /* typecast generic pointers to costT pointers */ upperedgecosts=(costT **)voidupperedgecosts; costs=(costT **)voidcosts; costsabove=(costT *)voidcostsabove; upperedgesmoothcosts=(smoothcostT **)voidupperedgecosts; smoothcosts=(smoothcostT **)voidcosts; smoothcostsabove=(smoothcostT *)voidcostsabove; /* see if tile is in top row */ if(tilerow!=0){ /* set up */ nshortcycle=params->nshortcycle; reloffset=bulkoffsets[tilerow-1][tilecol]-bulkoffsets[tilerow][tilecol]; /* loop over all arcs on the boundary */ for(col=0;col0.5){ dpsi-=1.0; } if(params->costmode==TOPO || params->costmode==DEFO){ upperedgecosts[0][col].offset=nshortcycle*dpsi; upperedgecosts[0][col].sigsq=ceil((costs[0][col].sigsq +costsabove[col].sigsq)/2.0); if(costs[0][col].dzmax>costsabove[col].dzmax){ upperedgecosts[0][col].dzmax=costs[0][col].dzmax; }else{ upperedgecosts[0][col].dzmax=costsabove[col].dzmax; } if(costs[0][col].laycostcostmode==SMOOTH){ upperedgesmoothcosts[0][col].offset=nshortcycle*dpsi; upperedgesmoothcosts[0][col].sigsq= ceil((smoothcosts[0][col].sigsq+smoothcostsabove[col].sigsq)/2.0); }else{ fprintf(sp0,"Illegal cost mode in SetUpperEdge(). This is a bug.\n"); exit(ABNORMAL_EXIT); } } }else{ if(params->costmode==TOPO || params->costmode==DEFO){ for(col=0;colcostmode==SMOOTH){ for(col=0;colntilerow-1){ /* set up */ nshortcycle=params->nshortcycle; flowlimhi=LARGESHORT; flowlimlo=-LARGESHORT; flowhistogram=(long *)CAlloc(flowlimhi-flowlimlo+1,sizeof(long)); minflow=flowlimhi; maxflow=flowlimlo; /* loop over all arcs on the boundary */ for(col=0;colmaxflow){ if(tempflow>flowlimhi){ fprintf(sp0,"Overflow in tile offset\nAbort\n"); exit(ABNORMAL_EXIT); } maxflow=tempflow; } flowhistogram[tempflow-flowlimlo]++; dpsi=dphi-floor(dphi); if(dpsi>0.5){ dpsi-=1.0; } if(params->costmode==TOPO || params->costmode==DEFO){ loweredgecosts[0][col].offset=nshortcycle*dpsi; loweredgecosts[0][col].sigsq=ceil((costs[nrow-2][col].sigsq +costsbelow[col].sigsq)/2.0); if(costs[nrow-2][col].dzmax>costsbelow[col].dzmax){ loweredgecosts[0][col].dzmax=costs[nrow-2][col].dzmax; }else{ loweredgecosts[0][col].dzmax=costsbelow[col].dzmax; } if(costs[nrow-2][col].laycostcostmode==SMOOTH){ loweredgesmoothcosts[0][col].offset=nshortcycle*dpsi; loweredgesmoothcosts[0][col].sigsq= ceil((smoothcosts[nrow-2][col].sigsq +smoothcostsbelow[col].sigsq)/2.0); }else{ fprintf(sp0,"Illegal cost mode in SetLowerEdge(). This is a bug.\n"); exit(ABNORMAL_EXIT); } } /* set bulk tile offset equal to mode of flow histogram */ nmax=0; reloffset=0; for(iflow=minflow;iflow<=maxflow;iflow++){ if(flowhistogram[iflow-flowlimlo]>nmax){ nmax=flowhistogram[iflow-flowlimlo]; reloffset=iflow; } } bulkoffsets[tilerow+1][tilecol]=bulkoffsets[tilerow][tilecol]-reloffset; /* subtract relative tile offset from edge flows */ for(col=0;colcostmode==TOPO || params->costmode==DEFO){ for(col=0;colcostmode==SMOOTH){ for(col=0;colnshortcycle; reloffset=bulkoffsets[tilerow][tilecol]-bulkoffsets[tilerow][tilecol-1]; /* loop over all arcs on the boundary */ for(row=0;row0.5){ dpsi-=1.0; } if(params->costmode==TOPO || params->costmode==DEFO){ leftedgecosts[row][0].offset=(TILEDPSICOLFACTOR*nshortcycle*dpsi); leftedgecosts[row][0].sigsq= ceil((costs[row+nrow-1][0].sigsq +lastcosts[row+nrow-1][prevncol-2].sigsq)/2.0); if(costs[row+nrow-1][0].dzmax>lastcosts[row+nrow-1][prevncol-2].dzmax){ leftedgecosts[row][0].dzmax=costs[row+nrow-1][0].dzmax; }else{ leftedgecosts[row][0].dzmax=lastcosts[row+nrow-1][prevncol-2].dzmax; } if(costs[row+nrow-1][0].laycost >lastcosts[row+nrow-1][prevncol-2].laycost){ leftedgecosts[row][0].laycost=costs[row+nrow-1][0].laycost; }else{ leftedgecosts[row][0].laycost =lastcosts[row+nrow-1][prevncol-2].laycost; } }else if(params->costmode==SMOOTH){ leftedgesmoothcosts[row][0].offset =(TILEDPSICOLFACTOR*nshortcycle*dpsi); leftedgesmoothcosts[row][0].sigsq= ceil((smoothcosts[row+nrow-1][0].sigsq +lastsmoothcosts[row+nrow-1][prevncol-2].sigsq)/2.0); }else{ fprintf(sp0,"Illegal cost mode in SetLeftEdge(). This is a bug.\n"); exit(ABNORMAL_EXIT); } } }else{ if(params->costmode==TOPO || params->costmode==DEFO){ for(row=0;rowcostmode==SMOOTH){ for(row=0;rowntilecol-1){ /* set up */ nshortcycle=params->nshortcycle; flowlimhi=LARGESHORT; flowlimlo=-LARGESHORT; flowhistogram=(long *)CAlloc(flowlimhi-flowlimlo+1,sizeof(long)); minflow=flowlimhi; maxflow=flowlimlo; /* loop over all arcs on the boundary */ for(row=0;rowmaxflow){ if(tempflow>flowlimhi){ fprintf(sp0,"Overflow in tile offset\nAbort\n"); exit(ABNORMAL_EXIT); } maxflow=tempflow; } flowhistogram[tempflow-flowlimlo]++; dpsi=dphi-floor(dphi); if(dpsi>0.5){ dpsi-=1.0; } if(params->costmode==TOPO || params->costmode==DEFO){ rightedgecosts[row][0].offset=(TILEDPSICOLFACTOR*nshortcycle*dpsi); rightedgecosts[row][0].sigsq =ceil((costs[row+nrow-1][ncol-2].sigsq +nextcosts[row+nrow-1][0].sigsq)/2.0); if(costs[row+nrow-1][ncol-2].dzmax>nextcosts[row+nrow-1][0].dzmax){ rightedgecosts[row][0].dzmax=costs[row+nrow-1][ncol-2].dzmax; }else{ rightedgecosts[row][0].dzmax=nextcosts[row+nrow-1][0].dzmax; } if(costs[row+nrow-1][ncol-2].laycost>nextcosts[row+nrow-1][0].laycost){ rightedgecosts[row][0].laycost=costs[row+nrow-1][ncol-2].laycost; }else{ rightedgecosts[row][0].laycost=nextcosts[row+nrow-1][0].laycost; } }else if(params->costmode==SMOOTH){ rightedgesmoothcosts[row][0].offset =(TILEDPSICOLFACTOR*nshortcycle*dpsi); rightedgesmoothcosts[row][0].sigsq =ceil((smoothcosts[row+nrow-1][ncol-2].sigsq +nextsmoothcosts[row+nrow-1][0].sigsq)/2.0); }else{ fprintf(sp0,"Illegal cost mode in SetRightEdge(). This is a bug.\n"); exit(ABNORMAL_EXIT); } } /* set bulk tile offset equal to mode of flow histogram */ if(tilerow==0){ nmax=0; reloffset=0; for(iflow=minflow;iflow<=maxflow;iflow++){ if(flowhistogram[iflow-flowlimlo]>nmax){ nmax=flowhistogram[iflow-flowlimlo]; reloffset=iflow; } } bulkoffsets[tilerow][tilecol+1]=bulkoffsets[tilerow][tilecol]+reloffset; }else{ reloffset=bulkoffsets[tilerow][tilecol+1]-bulkoffsets[tilerow][tilecol]; } /* subtract relative tile offset from edge flows */ for(row=0;rowcostmode==TOPO || params->costmode==DEFO){ for(row=0;rowcostmode==SMOOTH){ for(row=0;rowpred==NULL || (tilerow!=0 && primaryhead->row==0 && primaryhead->pred->row==0) || (tilecol!=0 && primaryhead->col==0 && primaryhead->pred->col==0)){ return; } /* set up */ ntilerow=params->ntilerow; ntilecol=params->ntilecol; nnrow=nrow+1; nncol=ncol+1; tilenum=tilerow*ntilecol+tilecol; scndrycostarr=(long *)MAlloc((2*flowmax+2)*sizeof(long)); tileedgearcweight=params->tileedgeweight; nshortcycle=params->nshortcycle; zerocost=FALSE; arroffset=0; /* loop to determine appropriate value for arroffset */ while(TRUE){ /* initialize variables */ arclen=0; sumsigsqinv=0; for(nflow=1;nflow<=2*flowmax;nflow++){ scndrycostarr[nflow]=0; } /* loop over primary arcs on secondary arc again to get costs */ primarytail=primaryhead->pred; tempnode=primaryhead; while(TRUE){ /* get primary arc just traversed */ arclen++; if(tempnode->col==primarytail->col+1){ /* rightward arc */ primaryarcdir=1; primaryarccol=primarytail->col; if(primarytail->row==0){ /* top edge */ if(tilerow==0){ zerocost=TRUE; }else{ primaryarcrow=0; costs=upperedgecosts; flows=upperedgeflows; calccostnrow=2; } }else if(primarytail->row==nnrow-1){ /* bottom edge */ if(tilerow==ntilerow-1){ zerocost=TRUE; }else{ primaryarcrow=0; costs=loweredgecosts; flows=loweredgeflows; calccostnrow=2; } }else{ /* normal arc */ primaryarcrow=primarytail->row-1; costs=tilecosts; flows=tileflows; calccostnrow=nrow; } }else if(tempnode->row==primarytail->row+1){ /* downward arc */ primaryarcdir=1; if(primarytail->col==0){ /* left edge */ if(tilecol==0){ zerocost=TRUE; }else{ primaryarcrow=primarytail->row; primaryarccol=0; costs=leftedgecosts; flows=leftedgeflows; calccostnrow=0; } }else if(primarytail->col==nncol-1){ /* right edge */ if(tilecol==ntilecol-1){ zerocost=TRUE; }else{ primaryarcrow=primarytail->row; primaryarccol=0; costs=rightedgecosts; flows=rightedgeflows; calccostnrow=0; } }else{ /* normal arc */ primaryarcrow=primarytail->row+nrow-1; primaryarccol=primarytail->col-1; costs=tilecosts; flows=tileflows; calccostnrow=nrow; } }else if(tempnode->col==primarytail->col-1){ /* leftward arc */ primaryarcdir=-1; primaryarccol=primarytail->col-1; if(primarytail->row==0){ /* top edge */ if(tilerow==0){ zerocost=TRUE; }else{ primaryarcrow=0; costs=upperedgecosts; flows=upperedgeflows; calccostnrow=2; } }else if(primarytail->row==nnrow-1){ /* bottom edge */ if(tilerow==ntilerow-1){ zerocost=TRUE; }else{ primaryarcrow=0; costs=loweredgecosts; flows=loweredgeflows; calccostnrow=2; } }else{ /* normal arc */ primaryarcrow=primarytail->row-1; costs=tilecosts; flows=tileflows; calccostnrow=nrow; } }else{ /* upward arc */ primaryarcdir=-1; if(primarytail->col==0){ /* left edge */ if(tilecol==0){ zerocost=TRUE; }else{ primaryarcrow=primarytail->row-1; primaryarccol=0; costs=leftedgecosts; flows=leftedgeflows; calccostnrow=0; } }else if(primarytail->col==nncol-1){ /* right edge */ if(tilecol==ntilecol-1){ zerocost=TRUE; }else{ primaryarcrow=primarytail->row-1; primaryarccol=0; costs=rightedgecosts; flows=rightedgeflows; calccostnrow=0; } }else{ /* normal arc */ primaryarcrow=primarytail->row+nrow-2; primaryarccol=primarytail->col-1; costs=tilecosts; flows=tileflows; calccostnrow=nrow; } } /* keep absolute cost of arc to the previous node */ if(!zerocost){ flows[primaryarcrow][primaryarccol]-=primaryarcdir*arroffset; nomcost=EvalCost(costs,flows,primaryarcrow,primaryarccol,calccostnrow, params); for(nflow=1;nflow<=flowmax;nflow++){ flows[primaryarcrow][primaryarccol]+=(primaryarcdir*nflow); poscost=EvalCost(costs,flows,primaryarcrow,primaryarccol, calccostnrow,params); flows[primaryarcrow][primaryarccol]-=(2*primaryarcdir*nflow); negcost=EvalCost(costs,flows,primaryarcrow,primaryarccol, calccostnrow,params); flows[primaryarcrow][primaryarccol]+=(primaryarcdir*nflow); templongdouble=(scndrycostarr[nflow]+(poscost-nomcost)); if(templongdouble>LARGELONG){ scndrycostarr[nflow]=LARGELONG; }else if(templongdouble<-LARGELONG){ scndrycostarr[nflow]=-LARGELONG; }else{ scndrycostarr[nflow]+=(poscost-nomcost); } templongdouble=(scndrycostarr[nflow+flowmax]+(negcost-nomcost)); if(templongdouble>LARGELONG){ scndrycostarr[nflow+flowmax]=LARGELONG; }else if(templongdouble<-LARGELONG){ scndrycostarr[nflow+flowmax]=-LARGELONG; }else{ scndrycostarr[nflow+flowmax]+=(negcost-nomcost); } } flows[primaryarcrow][primaryarccol]+=primaryarcdir*arroffset; if(params->costmode==TOPO || params->costmode==DEFO){ sigsq=((costT **)costs)[primaryarcrow][primaryarccol].sigsq; }else if(params->costmode==SMOOTH){ sigsq=((smoothcostT **)costs)[primaryarcrow][primaryarccol].sigsq; } sumsigsqinv+=(1.0/sigsq); } /* break if found the secondary arc tail */ if(primarytail->group==ONTREE){ break; } /* move up the tree */ tempnode=primarytail; primarytail=primarytail->pred; } /* end while loop for tracing secondary arc for costs */ /* break if we have a zero-cost arc on the edge of the full array */ if(zerocost){ break; } /* find flow index with minimum cost */ mincost=0; mincostflow=0; for(nflow=1;nflow<=flowmax;nflow++){ if(scndrycostarr[nflow]row==primarytail->row && (primaryhead->row==0 || primaryhead->row==nnrow-1)) || (primaryhead->col==primarytail->col && (primaryhead->col==0 || primaryhead->col==nncol-1))){ for(nflow=1;nflow<=2*flowmax;nflow++){ tempdouble=scndrycostarr[nflow]*tileedgearcweight; if(tempdouble>LARGELONG){ scndrycostarr[nflow]=LARGELONG; }else if(tempdouble<-LARGELONG){ scndrycostarr[nflow]=-LARGELONG; }else{ scndrycostarr[nflow]=LRound(tempdouble); } } sumsigsqinv*=tileedgearcweight; } /* store sum of primary cost variances at end of secondary cost array */ tempdouble=sumsigsqinv*nshortcycle*nshortcycle; if(tempdoublerow==0 && tilerow!=0){ scndrytail=FindScndryNode(scndrynodes,nodesupp, (tilerow-1)*ntilecol+tilecol, prevnrow,primarytail->col); }else if(primarytail->col==0 && tilecol!=0){ scndrytail=FindScndryNode(scndrynodes,nodesupp, tilerow*ntilecol+(tilecol-1), primarytail->row,prevncol); }else{ scndrytail=FindScndryNode(scndrynodes,nodesupp,tilenum, primarytail->row,primarytail->col); } if(primaryhead->row==0 && tilerow!=0){ scndryhead=FindScndryNode(scndrynodes,nodesupp, (tilerow-1)*ntilecol+tilecol, prevnrow,primaryhead->col); }else if(primaryhead->col==0 && tilecol!=0){ scndryhead=FindScndryNode(scndrynodes,nodesupp, tilerow*ntilecol+(tilecol-1), primaryhead->row,prevncol); }else{ scndryhead=FindScndryNode(scndrynodes,nodesupp,tilenum, primaryhead->row,primaryhead->col); } /* see if there is already arc between secondary head, tail */ row=scndrytail->row; col=scndrytail->col; for(i=0;irow==primaryhead->row && tempnode->col==primaryhead->col) || (nodesupp[row][col].outarcs[i]!=NULL && tempnode->row==scndryhead->row && tempnode->col==scndryhead->col)){ /* see if secondary arc traverses only one primary arc */ primarydummy=primaryhead->pred; if(primarydummy->group!=ONTREE){ /* arc already exists, free memory for cost array (will trace again) */ free(scndrycostarr); /* set up dummy node */ primarydummy->group=ONTREE; nnewnodes=++(*nnewnodesptr); scndrynodes[tilenum]=(nodeT *)ReAlloc(scndrynodes[tilenum], nnewnodes*sizeof(nodeT)); scndrydummy=&scndrynodes[tilenum][nnewnodes-1]; nodesupp[tilenum]=(nodesuppT *)ReAlloc(nodesupp[tilenum], nnewnodes*sizeof(nodesuppT)); suppdummy=&nodesupp[tilenum][nnewnodes-1]; scndrydummy->row=tilenum; scndrydummy->col=nnewnodes-1; suppdummy->row=primarydummy->row; suppdummy->col=primarydummy->col; suppdummy->noutarcs=0; suppdummy->neighbornodes=NULL; suppdummy->outarcs=NULL; /* recursively call TraceSecondaryArc() to set up arcs */ TraceSecondaryArc(primarydummy,scndrynodes,nodesupp,scndryarcs, scndrycosts,nnewnodesptr,nnewarcsptr,tilerow,tilecol, flowmax,nrow,ncol,prevnrow,prevncol,params,tilecosts, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,tileflows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); TraceSecondaryArc(primaryhead,scndrynodes,nodesupp,scndryarcs, scndrycosts,nnewnodesptr,nnewarcsptr,tilerow,tilecol, flowmax,nrow,ncol,prevnrow,prevncol,params,tilecosts, rightedgecosts,loweredgecosts,leftedgecosts, upperedgecosts,tileflows,rightedgeflows, loweredgeflows,leftedgeflows,upperedgeflows, updatednontilenodesptr,nupdatednontilenodesptr, updatednontilenodesizeptr,inontilenodeoutarcptr, totarclenptr); }else{ /* only one primary arc; just delete other secondary arc */ /* find existing secondary arc (must be in this tile) */ /* swap direction of existing secondary arc if necessary */ arcnum=0; while(TRUE){ if(scndryarcs[tilenum][arcnum].from==primarytail && scndryarcs[tilenum][arcnum].to==primaryhead){ break; }else if(scndryarcs[tilenum][arcnum].from==primaryhead && scndryarcs[tilenum][arcnum].to==primarytail){ scndryarcs[tilenum][arcnum].from=primarytail; scndryarcs[tilenum][arcnum].to=primaryhead; break; } arcnum++; } /* assign cost of this secondary arc to existing secondary arc */ free(scndrycosts[tilenum][arcnum]); scndrycosts[tilenum][arcnum]=scndrycostarr; /* update direction data in secondary arc structure */ if(primarytail->col==primaryhead->col+1){ scndryarcs[tilenum][arcnum].fromdir=RIGHT; }else if(primarytail->row==primaryhead->row+1){ scndryarcs[tilenum][arcnum].fromdir=DOWN; }else if(primarytail->col==primaryhead->col-1){ scndryarcs[tilenum][arcnum].fromdir=LEFT; }else{ scndryarcs[tilenum][arcnum].fromdir=UP; } } /* we're done */ return; } } /* set up secondary arc datastructures */ nnewarcs=++(*nnewarcsptr); scndryarcs[tilenum]=(scndryarcT *)ReAlloc(scndryarcs[tilenum], nnewarcs*sizeof(scndryarcT)); newarc=&scndryarcs[tilenum][nnewarcs-1]; newarc->arcrow=tilenum; newarc->arccol=nnewarcs-1; scndrycosts[tilenum]=(long **)ReAlloc(scndrycosts[tilenum], nnewarcs*sizeof(long *)); scndrycosts[tilenum][nnewarcs-1]=scndrycostarr; /* update secondary node data */ /* store primary nodes in nodesuppT neighbornodes[] arrays since */ /* secondary node addresses change in ReAlloc() calls in TraceRegions() */ supptail=&nodesupp[scndrytail->row][scndrytail->col]; supphead=&nodesupp[scndryhead->row][scndryhead->col]; supptail->noutarcs++; supptail->neighbornodes=(nodeT **)ReAlloc(supptail->neighbornodes, supptail->noutarcs *sizeof(nodeT *)); supptail->neighbornodes[supptail->noutarcs-1]=primaryhead; primarytail->level=scndrytail->row; primarytail->incost=scndrytail->col; supptail->outarcs=(scndryarcT **)ReAlloc(supptail->outarcs, supptail->noutarcs *sizeof(scndryarcT *)); supptail->outarcs[supptail->noutarcs-1]=NULL; supphead->noutarcs++; supphead->neighbornodes=(nodeT **)ReAlloc(supphead->neighbornodes, supphead->noutarcs *sizeof(nodeT *)); supphead->neighbornodes[supphead->noutarcs-1]=primarytail; primaryhead->level=scndryhead->row; primaryhead->incost=scndryhead->col; supphead->outarcs=(scndryarcT **)ReAlloc(supphead->outarcs, supphead->noutarcs *sizeof(scndryarcT *)); supphead->outarcs[supphead->noutarcs-1]=NULL; /* keep track of updated secondary nodes that were not in this tile */ if(scndrytail->row!=tilenum){ if(++(*nupdatednontilenodesptr)==(*updatednontilenodesizeptr)){ (*updatednontilenodesizeptr)+=INITARRSIZE; (*updatednontilenodesptr)=(nodeT **)ReAlloc((*updatednontilenodesptr), (*updatednontilenodesizeptr) *sizeof(nodeT *)); (*inontilenodeoutarcptr)=(short *)ReAlloc((*inontilenodeoutarcptr), (*updatednontilenodesizeptr) *sizeof(short)); } (*updatednontilenodesptr)[*nupdatednontilenodesptr-1]=scndrytail; (*inontilenodeoutarcptr)[*nupdatednontilenodesptr-1]=supptail->noutarcs-1; } if(scndryhead->row!=tilenum){ if(++(*nupdatednontilenodesptr)==(*updatednontilenodesizeptr)){ (*updatednontilenodesizeptr)+=INITARRSIZE; (*updatednontilenodesptr)=(nodeT **)ReAlloc((*updatednontilenodesptr), (*updatednontilenodesizeptr) *sizeof(nodeT *)); (*inontilenodeoutarcptr)=(short *)ReAlloc((*inontilenodeoutarcptr), (*updatednontilenodesizeptr) *sizeof(short)); } (*updatednontilenodesptr)[*nupdatednontilenodesptr-1]=scndryhead; (*inontilenodeoutarcptr)[*nupdatednontilenodesptr-1]=supphead->noutarcs-1; } /* set up node data in secondary arc structure */ newarc->from=primarytail; newarc->to=primaryhead; /* set up direction data in secondary arc structure */ tempnode=primaryhead->pred; if(tempnode->col==primaryhead->col+1){ newarc->fromdir=RIGHT; }else if(tempnode->row==primaryhead->row+1){ newarc->fromdir=DOWN; }else if(tempnode->col==primaryhead->col-1){ newarc->fromdir=LEFT; }else{ newarc->fromdir=UP; } /* add number of primary arcs in secondary arc to counter */ (*totarclenptr)+=arclen; } /* function: FindScndryNode() * -------------------------- */ nodeT *FindScndryNode(nodeT **scndrynodes, nodesuppT **nodesupp, long tilenum, long primaryrow, long primarycol){ long nodenum; nodesuppT *nodesuppptr; /* set temporary variables */ nodesuppptr=nodesupp[tilenum]; /* loop over all nodes in the tile until we find a match */ nodenum=0; while(nodesuppptr[nodenum].row!=primaryrow || nodesuppptr[nodenum].col!=primarycol){ nodenum++; } return(&scndrynodes[tilenum][nodenum]); } /* function: IntegrateSecondaryFlows() * ----------------------------------- */ void IntegrateSecondaryFlows(long linelen, long nlines, nodeT **scndrynodes, nodesuppT **nodesupp, scndryarcT **scndryarcs, short *nscndryarcs, short **scndryflows, short **bulkoffsets, outfileT *outfiles, paramT *params){ FILE *outfp; float **unwphase, **tileunwphase, **mag, **tilemag; float *outline; long row, col, colstart, nrow=0, ncol, nnrow, nncol, maxcol; long readtilelinelen, readtilenlines, nextcoloffset, nextrowoffset; long tilerow, tilecol, ntilerow, ntilecol, rowovrlp, colovrlp; long ni, nj, tilenum; double tileoffset; short **regions, **tileflows; char realoutfile[MAXSTRLEN], readfile[MAXSTRLEN], tempstring[MAXTMPSTRLEN]; char path[MAXSTRLEN], basename[MAXSTRLEN]; signed char writeerror; tileparamT readtileparams[1]; outfileT readtileoutfiles[1]; /* set up */ fprintf(sp1,"Integrating secondary flows\n"); ntilerow=params->ntilerow; ntilecol=params->ntilecol; rowovrlp=params->rowovrlp; colovrlp=params->colovrlp; ni=ceil((nlines+(ntilerow-1)*rowovrlp)/(double )ntilerow); nj=ceil((linelen+(ntilecol-1)*colovrlp)/(double )ntilecol); nextcoloffset=0; writeerror=FALSE; /* get memory */ regions=(short **)Get2DMem(ni,nj,sizeof(short *),sizeof(short)); tileflows=(short **)Get2DRowColMem(ni+2,nj+2,sizeof(short *),sizeof(short)); tileunwphase=(float **)Get2DMem(ni,nj,sizeof(float *),sizeof(float)); tilemag=(float **)Get2DMem(ni,nj,sizeof(float *),sizeof(float)); unwphase=(float **)Get2DMem(ni,linelen,sizeof(float *),sizeof(float)); mag=(float **)Get2DMem(ni,linelen,sizeof(float *),sizeof(float)); outline=(float *)MAlloc(2*linelen*sizeof(float)); /* flip sign of bulk offsets if flip flag is set */ /* do this and flip flow signs instead of flipping phase signs */ if(params->flipphasesign){ for(row=0;rowoutfile,realoutfile); /* process each tile row */ for(tilerow=0;tilerowfirstcol; readtilenlines=readtileparams->nrow; readtilelinelen=readtileparams->ncol; /* set tile read parameters */ SetTileReadParams(readtileparams,readtilenlines,readtilelinelen, tilerow,tilecol,nlines,linelen,params); colstart+=readtileparams->firstcol; nrow=readtileparams->nrow; ncol=readtileparams->ncol; nnrow=nrow+1; nncol=ncol+1; /* read unwrapped phase */ /* phase sign not flipped for positive baseline */ /* since flow will be flipped if necessary */ if(TMPTILEOUTFORMAT==ALT_LINE_DATA){ ReadAltLineFile(&tilemag,&tileunwphase,readtileoutfiles->outfile, readtilelinelen,readtilenlines,readtileparams); }else if(TMPTILEOUTFORMAT==FLOAT_DATA){ Read2DArray((void ***)&tileunwphase,readtileoutfiles->outfile, readtilelinelen,readtilenlines,readtileparams, sizeof(float *),sizeof(float)); } /* read regions */ ParseFilename(outfiles->outfile,path,basename); sprintf(tempstring,"%s/%s%s_%ld_%ld.%ld%s", params->tiledir,TMPTILEROOT,basename,tilerow,tilecol, readtilelinelen,REGIONSUFFIX); StrNCopy(readfile,tempstring,MAXSTRLEN); Read2DArray((void ***)®ions,readfile,readtilelinelen,readtilenlines, readtileparams,sizeof(short *),sizeof(short)); /* remove temporary files unless told so save them */ if(params->rmtmptile){ unlink(readtileoutfiles->outfile); unlink(readfile); } /* zero out primary flow array */ for(row=0;row<2*nrow+1;row++){ if(rowoutfileformat==ALT_LINE_DATA){ if(fwrite(mag[row],sizeof(float),linelen,outfp)!=linelen || fwrite(unwphase[row],sizeof(float),linelen,outfp)!=linelen){ writeerror=TRUE; break; } }else if(outfiles->outfileformat==ALT_SAMPLE_DATA){ for(col=0;colflipphasesign){ phaseflipsign=-1; }else{ phaseflipsign=1; } /* loop over all arcs in tile */ for(arcnum=0;arcnumrow==tilenum){ primaryfromrow=nodesupp[scndryfrom->row][scndryfrom->col].row; primaryfromcol=nodesupp[scndryfrom->row][scndryfrom->col].col; }else if(scndryfrom->row==tilenum-ntilecol){ primaryfromrow=0; primaryfromcol=nodesupp[scndryfrom->row][scndryfrom->col].col; }else if(scndryfrom->row==tilenum-1){ primaryfromrow=nodesupp[scndryfrom->row][scndryfrom->col].row; primaryfromcol=0; }else{ primaryfromrow=0; primaryfromcol=0; } if(scndryto->row==tilenum){ thisrow=nodesupp[scndryto->row][scndryto->col].row; thiscol=nodesupp[scndryto->row][scndryto->col].col; }else if(scndryto->row==tilenum-ntilecol){ thisrow=0; thiscol=nodesupp[scndryto->row][scndryto->col].col; }else if(scndryto->row==tilenum-1){ thisrow=nodesupp[scndryto->row][scndryto->col].row; thiscol=0; }else{ thisrow=0; thiscol=0; } /* set initial direction out of secondary arc head */ switch(scndryarcs[tilenum][arcnum].fromdir){ case RIGHT: nextrow=thisrow; nextcol=thiscol+1; tileflows[thisrow][thiscol]-=nflow; break; case DOWN: nextrow=thisrow+1; nextcol=thiscol; tileflows[nnrow+thisrow][thiscol]-=nflow; break; case LEFT: nextrow=thisrow; nextcol=thiscol-1; tileflows[thisrow][thiscol-1]+=nflow; break; default: nextrow=thisrow-1; nextcol=thiscol; tileflows[nnrow+thisrow-1][thiscol]+=nflow; break; } /* use region data to trace path between secondary from, to */ while(!(nextrow==primaryfromrow && nextcol==primaryfromcol)){ /* move to next node */ prevrow=thisrow; prevcol=thiscol; thisrow=nextrow; thiscol=nextcol; /* check rightward arc */ if(thiscol!=nncol-1){ if(thisrow==0 || thisrow==nnrow-1 || regions[thisrow-1][thiscol]!=regions[thisrow][thiscol]){ if(!(thisrow==prevrow && thiscol+1==prevcol)){ tileflows[thisrow][thiscol]-=nflow; nextcol++; } } } /* check downward arc */ if(thisrow!=nnrow-1){ if(thiscol==0 || thiscol==nncol-1 || regions[thisrow][thiscol]!=regions[thisrow][thiscol-1]){ if(!(thisrow+1==prevrow && thiscol==prevcol)){ tileflows[nnrow+thisrow][thiscol]-=nflow; nextrow++; } } } /* check leftward arc */ if(thiscol!=0){ if(thisrow==0 || thisrow==nnrow-1 || regions[thisrow][thiscol-1]!=regions[thisrow-1][thiscol-1]){ if(!(thisrow==prevrow && thiscol-1==prevcol)){ tileflows[thisrow][thiscol-1]+=nflow; nextcol--; } } } /* check upward arc */ if(thisrow!=0){ if(thiscol==0 || thiscol==nncol-1 || regions[thisrow-1][thiscol-1]!=regions[thisrow-1][thiscol]){ if(!(thisrow-1==prevrow && thiscol==prevcol)){ tileflows[nnrow+thisrow-1][thiscol]+=nflow; nextrow--; } } } } } } } GMTSAR_V5.7/.svn/pristine/30/30ca4f7224fd66396167e774280036cb72244434.svn-base000444 015705 000000 00000001351 13505462013 025063 0ustar00sandwellwheel000000 000000 % % matlab script to design a differentiating filter for phase_grad % clear clg sig2=2.*8.*8.; xg=4.*(-4:4); g = exp(-(xg.*xg)/sig2); g = g/sum(g); n = 16; x = 4*(-8:8); f = [0.0002,.5,.75,1.]; w = 1./f; m = [0.0002,pi/2.,pi/4.,.0]; b = remez(n,f,m,'derivative'); bg=conv(b,g); subplot(2,1,1),plot(x,b,x,b,'o',xg,g,'--',xg,g,'o'),xlabel('lag (m)'),ylabel('impulse response'),title('azimuth') axis([-32,32,-1,1]) [hp,wp]=freqz(b,1,2048); [hp2,wp2]=freqz(bg,1,2048); nk=length(wp); k=(1:nk)/(8*nk); dir=4.*2.*pi*k; subplot(2,1,2),plot(k,abs(hp),k,abs(hp2),'--',k,dir,':') axis([.001,.0625,.02,2]) xlabel('wavenumber (1/m)') ylabel('gain') pause GMTSAR_V5.7/.svn/pristine/30/306c91996d69cfce0c3fc46fcfbe8f06e86be433.svn-base000444 015705 000000 00000041123 13505462013 026052 0ustar00sandwellwheel000000 000000 /* $Id$ */ /*************************************************************************** * Program to project a longitude, latitude, and topography * into a file of longitude latitude, and topography and unit look vector. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography and * unit look vector then transform the unit look vector from global to * local coordinate ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 11/28/08 - modified from ALOS_llt2rat.c to compute accurate look vector.* * need to specify the latitude and longitude of the pole to * * transform from global elipsoid cartesian to local East-North- * * up coordinate * * The start and end clock of the orbit is changed to allow for * * long swath, the start time should be in the first frame so * * PRM file. * * 12/03/10 - modified to work with ENVISAT, Matt Wei * ****************************************************************************/ #include "gmtsar.h" #include "llt2xyz.h" #include "orbit.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 char *USAGE = " \n Usage: " "SAT_look master.PRM [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - lon, lat, elevation look_E look_N look_U " "[ASCII default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: SAT_look master.PRM < topo.llt > topo.lltn \n"; void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void hermite_c(double *, double *, double *, int, int, double, double *, int *); void set_prm_defaults(struct PRM *); int main(int argc, char **argv) { FILE *fprm1; int otype; double rln, rlt, rht, t1, t2, tm; double ts, rng, thet, relp, telp; double xp[3]; /* double xt[3],dr; */ double rp[3]; double dd[6]; /* dummy for output double precision */ float ds[6]; /* dummy for output single precision */ /* double r0,rf,a0,af; */ double rad = PI / 180.; double fll; int i, j, k, nrec, npad = 8000; int goldop(); int stai, endi, midi, xmin; double **orb_pos; struct PRM prm; struct SAT_ORB *orb; FILE *ldrfile; int calorb_alos(struct SAT_ORB *, double **orb_pos, double ts, double t1, int nrec); double len, unit_x, unit_y, unit_z; double dist(); double Rx[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double Rz[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double A[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double local_look[3] = {0, 0, 0}; double pole_lon, pole_lat, b, g; /* Make sure usage is correct and files can be opened */ if (argc < 2 || argc > 3) { fprintf(stderr, "%s\n", USAGE); exit(-1); } /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 3) { if (!strcmp(argv[2], "-bos")) otype = 2; else if (!strcmp(argv[2], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_prm_defaults(&prm); get_sio_struct(fprm1, &prm); /* dubugging fprintf(stderr,"debug\n"); fprintf(stderr,"%s\n",prm.led_file); fprintf(stderr,"%lf\n",prm.fs); fprintf(stderr,"%d\n",prm.num_rng_bins); fprintf(stderr,"%d\n",prm.num_valid_az); fprintf(stderr,"%lf\n",prm.rc); fprintf(stderr,"%lf\n",prm.ra); fprintf(stderr,"%lf\n",prm.prf); fprintf(stderr,"%lf\n",prm.RE); fprintf(stderr,"%lf\n",prm.sub_int_a); fprintf(stderr,"%lf\n",prm.SC_clock_start); fprintf(stderr,"%lf\n",prm.clock_start); fprintf(stderr,"%d\n",prm.nrows); fprintf(stderr,"%d\n",prm.num_patches); fprintf(stderr,"%lf\n",prm.near_range); fprintf(stderr,"rshift = %d\n",prm.rshift); fprintf(stderr,"sub_int_r = %lf\n",prm.sub_int_r); fprintf(stderr,"chirp_ext = %d\n",prm.chirp_ext); */ fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); read_orb(ldrfile, &prm, orb); #if 0 dr = 0.5*SOL/prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ /* fprintf(stderr,"ts=%lf,t1=%lf,nrec=%d\n",ts,t1,nrec); */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* look at the orb_pos for(i=0;i<4;i++) { for (j=0;j 180.) rp[1] = rp[1] - 360.; /* xt[0]=-1.0; */ /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); xmin = goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); /* xt[0]=rng; xt[1]=tm; */ /* fprintf(stderr,"rng = %f, tm = %f",rng,tm); */ /* calculate the unit look vector originated from ground point to satellite in the global cartesian coordinate */ /* fprintf(stderr,"x y z of the satellite minimum: %f, %f, %f\n",orb_pos[1][xmin],orb_pos[2][xmin],orb_pos[3][xmin]); */ len = dist(xp[0], xp[1], xp[2], xmin, orb_pos); unit_x = (orb_pos[1][xmin] - xp[0]) / len; unit_y = (orb_pos[2][xmin] - xp[1]) / len; unit_z = (orb_pos[3][xmin] - xp[2]) / len; /* fprintf(stderr,"unit look vector: %f, %f, * %f\n",unit_x,unit_y,unit_z); */ /* there is a way to test the sign is right */ /* compute the look vector in local coordinate */ /* rotate the global coordinate to a local coordinate system */ /* location of the rotation pole */ /* refer to a matlab version rot3d.m to check the formula */ pole_lon = fmod((rln + 360.0), 360.0); /* fprintf(stderr,"pole_lon %f\n",pole_lon); */ pole_lat = rlt; /* construct a rotation matrix */ b = (pole_lat - 90) / 180. * 3.14159; Rx[0][0] = 1; Rx[0][1] = 0; Rx[0][2] = 0; Rx[1][0] = 0; Rx[1][1] = cos(b); Rx[1][2] = -sin(b); Rx[2][0] = 0; Rx[2][1] = sin(b); Rx[2][2] = cos(b); g = (pole_lon + 90) / 180. * 3.14159; Rz[0][0] = cos(g); Rz[0][1] = sin(g); Rz[0][2] = 0; Rz[1][0] = -sin(g); Rz[1][1] = cos(g); Rz[1][2] = 0; Rz[2][0] = 0; Rz[2][1] = 0; Rz[2][2] = 1; /* zero A */ for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) A[i][j] = 0; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) for (k = 0; k < 3; k++) A[i][j] += Rx[i][k] * Rz[k][j]; /* print out the matrix */ /* for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rx[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rz[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",A[i][j]); putchar('\n'); } */ for (i = 0; i < 3; i++) local_look[i] = A[i][0] * unit_x + A[i][1] * unit_y + A[i][2] * unit_z; /* compute the range and azimuth in pixel space xt[0] = (xt[0] - prm.near_range)/dr-(prm.rshift+prm.sub_int_r)+prm.chirp_ext; xt[1] = prm.prf*(xt[1]-t1)-(prm.ashift+prm.sub_int_a); fprintf(stderr,"xt[0] = %f\n",xt[0]); if(xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) continue; fprintf(stderr,"%f %f %f %f %f \n",xt[0],xt[1],rp[2],rp[1],rp[0]); */ if (otype == 1) { /* fprintf(stdout,"%f %f %f %f %f * %f\n",rp[1],rp[0],rp[2],unit_x,unit_y,unit_z); */ fprintf(stdout, "%f %f %f %f %f %f\n", rp[1], rp[0], rp[2], local_look[0], local_look[1], local_look[2]); } else if (otype == 2) { ds[0] = (float)rp[1]; ds[1] = (float)rp[0]; ds[2] = (float)rp[2]; ds[3] = (float)local_look[0]; ds[4] = (float)local_look[1]; ds[5] = (float)local_look[2]; fwrite(ds, sizeof(float), 6, stdout); } else if (otype == 3) { dd[0] = rp[1]; dd[1] = rp[0]; dd[2] = rp[2]; dd[3] = local_look[0]; dd[4] = local_look[1]; dd[5] = local_look[2]; fwrite(dd, sizeof(double), 6, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL && fabs(f1-f2) > 1e-6) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct SAT_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/.svn/pristine/53/53db8da12fe37b51975f830deeabde3657091d6b.svn-base000444 015705 000000 00000017102 13505462014 025755 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Program to merge adjacent frames of ALOS palsar data * *******************************************************************************/ /******************************************************************************** * Creator: Rob Mellors * (San Diego State University) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * *******************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "Usage: \n" "ALOS_merge PRMfile1 PRMfile2 [-output outfile] [-V] [-nodopp]\n\n" " appends file2 onto file1 (omitting duplicate lines)\n" " updates num_lines and doppler (average) in PRM file\n" " output named merge.raw by default\n" " if outfile specified, creates outfile.raw and outfile.PRM\n" " -V verbose\n" " -nodopp do not calculate doppler (default is calculate doppler)\n" "example: ALOS_merge IMG-HH-ALPSRP057130830-H1.0__A.PRM " "IMG-HH-ALPSRP057130840-H1.0__A.PRM -outout foo -V\n"; void parse_ALOS_merge(int, int, char **, char *, char *); void assign_output(char *, char *, char *); void fill_PRM(struct PRM *, FILE *); long read_ALOS_raw_data(FILE *, FILE *, struct PRM *, int *); int main(int argc, char **argv) { char RawOutName[128], tmp[128]; char PRMOutName[128]; int start_frame, narg; long nlines1, nlines2, nlines; double overlap; FILE *PRMfile1, *RAWfile1; FILE *PRMfile2, *RAWfile2; FILE *PRMfile3, *RAWfile3; struct PRM p1; struct PRM p2; struct PRM p3; narg = 3; if (argc < narg) die(USAGE, ""); verbose = 0; /* default name */ strcpy(tmp, "merge"); if (argc > narg) parse_ALOS_merge(argc, narg, argv, tmp, USAGE); assign_output(RawOutName, PRMOutName, tmp); /* open files */ if ((PRMfile1 = fopen(argv[1], "r")) == NULL) die("can't open prfile", argv[1]); if ((PRMfile2 = fopen(argv[2], "r")) == NULL) die("can't open prfile", argv[2]); if ((PRMfile3 = fopen(PRMOutName, "w")) == NULL) die("can't open prfile", PRMOutName); /* read prm values; put file1 prm into file 3 */ fill_PRM(&p1, PRMfile1); fill_PRM(&p2, PRMfile2); rewind(PRMfile1); fill_PRM(&p3, PRMfile1); strcpy(p3.input_file, RawOutName); /* open raw files */ if ((RAWfile1 = fopen(p1.input_file, "r")) == NULL) die("cannot open ", p1.input_file); if ((RAWfile2 = fopen(p2.input_file, "r")) == NULL) die("cannot open ", p2.input_file); /* output */ if ((RAWfile3 = fopen(RawOutName, "w")) == NULL) die("cannot open output file ", RawOutName); /* check whether scenes overlap in time */ overlap = p1.SC_clock_stop - p2.SC_clock_start; if (overlap < 0) die("frames do not overlap in time", ""); if (verbose) fprintf(stderr, " frame 1 %lf %lf\n frame 2 %lf %lf overlap %lf\n", p1.SC_clock_start, p1.SC_clock_stop, p2.SC_clock_start, p2.SC_clock_stop, overlap); /* read files and write */ /* write out all lines with frame numner > last_frame */ start_frame = -1; if (verbose) fprintf(stderr, " reading file 1 %s\n", p1.input_file); nlines1 = read_ALOS_raw_data(RAWfile1, RAWfile3, &p1, &start_frame); if (verbose) fprintf(stderr, " reading file 2 %s\n", p2.input_file); nlines2 = read_ALOS_raw_data(RAWfile2, RAWfile3, &p2, &start_frame); fclose(RAWfile3); /* end of data writing */ nlines = nlines1 + nlines2; if (verbose) fprintf(stderr, " nlines1 %ld nlines2 %ld nlines %ld \n", nlines1, nlines2, nlines); /* write out all non-null parameters */ p3.SC_clock_stop = p2.SC_clock_stop; p3.ht_end = p2.ht_end; p3.num_lines = nlines1 + nlines2; p3.num_patches = (int)((1.0 * nlines) / (1.0 * p3.num_valid_az)); /* now recalculate doppler for the whole file */ if (dopp == 1) calc_dop(&p3); /* write out PRM file */ put_sio_struct(p3, PRMfile3); return (EXIT_SUCCESS); } /*-----------------------------------------------*/ void fill_PRM(struct PRM *p, FILE *Pfile) { /* set all prm parameters in structure to NULL values */ null_sio_struct(p); /* now rad new ones */ get_sio_struct(Pfile, p); } /*-----------------------------------------------*/ void assign_output(char *rawname, char *prmname, char *base) { strcpy(rawname, base); strcat(rawname, ".raw"); strcpy(prmname, base); strcat(prmname, ".PRM"); } /*-----------------------------------------------*/ /* reads options */ /* start with third argument */ void parse_ALOS_merge(int na, int nstart, char **a, char *filename, char *USAGE) { int n; verbose = 0; debug = 0; dopp = 1; /* default is to calculate doppler */ for (n = nstart; n < na; n++) { if (!strcmp(a[n], "-output")) { n++; if (n > na) die(" no option after -output!\n", ""); strcpy(filename, a[n]); fprintf(stderr, " setting output file %s \n", filename); n++; } else if (!strcmp(a[n], "-V")) { verbose = 1; fprintf(stderr, " verbose output \n"); n++; } else if (!strcmp(a[n], "-v")) { verbose = 1; fprintf(stderr, " verbose output \n"); n++; } else if (!strcmp(a[n], "-nodopp")) { dopp = 0; fprintf(stderr, " not calculating doppler centroid \n"); n++; } else if (!strcmp(a[n], "-debug")) { debug = 1; fprintf(stderr, " debugging output \n"); n++; } else { fprintf(stderr, " %s *** option not recognized ***\n\n", a[n]); fprintf(stderr, "%s", USAGE); exit(1); } } } /*-----------------------------------------------*/ /* read raw files */ long read_ALOS_raw_data(FILE *imagefile, FILE *outfile, struct PRM *prm, int *start_frame) { struct sardata_info sdr; char *data; int line_prefix_size, line_data_size; int first_frame, frame = 0; /* frame counter */ long n, nlines; line_prefix_size = sizeof(struct sardata_info); line_data_size = prm->bytes_per_line - line_prefix_size; data = malloc(line_data_size * sizeof(char)); if (debug) fprintf(stderr, ".... reading data (%d bytes)\n", line_prefix_size + line_data_size); n = 0; nlines = 0; while ((fread((void *)&sdr, line_prefix_size, 1, imagefile)) == 1) { if (debug) fprintf(stderr, SARDATA__WCS, SARDATA_RVL(sdr)); frame = sdr.frame_counter; if (n == 0) { first_frame = frame; if (verbose) fprintf(stderr, "first frame %d (start_frame %d)\n", first_frame, *start_frame); } /* write line if not a duplicate */ if (frame > *start_frame) { if (verbose) if (nlines == 0) fprintf(stderr, " first line written %ld frame %d \n", n, frame); /* read the data */ fread(data, sizeof(char), line_data_size, imagefile); /* write header */ fwrite(&sdr, sizeof(char), line_prefix_size, outfile); /* write data */ fwrite(data, sizeof(char), line_data_size, outfile); nlines++; } else { fseek(imagefile, line_data_size, SEEK_CUR); } n++; } /* this is the first frame of the next file */ *start_frame = frame; if (verbose) fprintf(stderr, "last frame %d (nlines written %ld)\n", *start_frame, nlines); free(data); return (nlines); } /***************************************************************************/ double get_clock(struct sardata_info sdr, double tbias) { double time; // nsd = 24.0*60.0*60.0; /* seconds in a day */ time = ((double)sdr.sensor_acquisition_year) * 1000 + (double)sdr.sensor_acquisition_DOY + (double)sdr.sensor_acquisition_msecs_day / 1000.0 / 86400.0 + tbias / 86400.0; return (time); } /***************************************************************************/ GMTSAR_V5.7/.svn/pristine/53/53339edc0a501c1522df2077be26638ca1997662.svn-base000444 015705 000000 00000036450 13505462013 025312 0ustar00sandwellwheel000000 000000 25 25 3.6787944117144233e-01 3.9846369506125967e-01 4.2860384615383690e-01 4.5783336177161427e-01 4.8567178524771237e-01 5.1163751208597108e-01 5.3526142851899028e-01 5.5610088377320865e-01 5.7375342073743274e-01 5.8786967312234650e-01 5.9816485313198164e-01 6.0442830251543478e-01 6.0653065971263342e-01 6.0442830251543478e-01 5.9816485313198164e-01 5.8786967312234650e-01 5.7375342073743274e-01 5.5610088377320865e-01 5.3526142851899028e-01 5.1163751208597108e-01 4.8567178524771237e-01 4.5783336177161427e-01 4.2860384615383690e-01 3.9846369506125967e-01 3.6787944117144233e-01 3.9846369506125967e-01 4.3159062049319485e-01 4.6423652192169051e-01 4.9589608071851543e-01 5.2604889667268739e-01 5.5417332631729532e-01 5.7976125535117784e-01 6.0233323251091775e-01 6.2145334176076350e-01 6.3674317167840966e-01 6.4789425817266211e-01 6.5467842957732847e-01 6.5695556964926849e-01 6.5467842957732847e-01 6.4789425817266211e-01 6.3674317167840966e-01 6.2145334176076350e-01 6.0233323251091775e-01 5.7976125535117784e-01 5.5417332631729532e-01 5.2604889667268739e-01 4.9589608071851543e-01 4.6423652192169051e-01 4.3159062049319485e-01 3.9846369506125967e-01 4.2860384615383690e-01 4.6423652192169051e-01 4.9935178859927615e-01 5.3340610480433592e-01 5.6583970678742268e-01 5.9609149350216650e-01 6.2361491642617306e-01 6.4789425817266200e-01 6.6846062962616570e-01 6.8490699598517257e-01 6.9690156065811215e-01 7.0419889286941895e-01 7.0664827785771622e-01 7.0419889286941895e-01 6.9690156065811215e-01 6.8490699598517257e-01 6.6846062962616570e-01 6.4789425817266200e-01 6.2361491642617306e-01 5.9609149350216650e-01 5.6583970678742268e-01 5.3340610480433592e-01 4.9935178859927615e-01 4.6423652192169051e-01 4.2860384615383690e-01 4.5783336177161427e-01 4.9589608071851543e-01 5.3340610480433592e-01 5.6978282473092301e-01 6.0442830251543478e-01 6.3674317167840955e-01 6.6614361070348771e-01 6.9207873180225443e-01 7.1404766900731564e-01 7.3161562894664178e-01 7.4442818748170425e-01 7.5222317618338685e-01 7.5483960198900735e-01 7.5222317618338685e-01 7.4442818748170425e-01 7.3161562894664178e-01 7.1404766900731564e-01 6.9207873180225443e-01 6.6614361070348771e-01 6.3674317167840955e-01 6.0442830251543478e-01 5.6978282473092301e-01 5.3340610480433592e-01 4.9589608071851543e-01 4.5783336177161427e-01 4.8567178524771237e-01 5.2604889667268739e-01 5.6583970678742268e-01 6.0442830251543478e-01 6.4118038842995462e-01 6.7546015374827406e-01 7.0664827785771633e-01 7.3416037639923104e-01 7.5746512839696645e-01 7.7610130299524549e-01 7.8969292539959679e-01 7.9796188610635388e-01 8.0073740291680806e-01 7.9796188610635388e-01 7.8969292539959679e-01 7.7610130299524549e-01 7.5746512839696645e-01 7.3416037639923104e-01 7.0664827785771633e-01 6.7546015374827406e-01 6.4118038842995462e-01 6.0442830251543478e-01 5.6583970678742268e-01 5.2604889667268739e-01 4.8567178524771237e-01 5.1163751208597108e-01 5.5417332631729532e-01 5.9609149350216650e-01 6.3674317167840955e-01 6.7546015374827406e-01 7.1157263624179690e-01 7.4442818748170414e-01 7.7341117985970542e-01 7.9796188610635377e-01 8.1759441633744401e-01 8.3191269481974750e-01 8.4062374333450529e-01 8.4354764906423441e-01 8.4062374333450529e-01 8.3191269481974750e-01 8.1759441633744401e-01 7.9796188610635377e-01 7.7341117985970542e-01 7.4442818748170414e-01 7.1157263624179690e-01 6.7546015374827406e-01 6.3674317167840955e-01 5.9609149350216650e-01 5.5417332631729532e-01 5.1163751208597108e-01 5.3526142851899028e-01 5.7976125535117784e-01 6.2361491642617306e-01 6.6614361070348771e-01 7.0664827785771633e-01 7.4442818748170414e-01 7.7880078307140488e-01 8.0912201155161290e-01 8.3480630128078936e-01 8.5534532730742252e-01 8.7032472583339060e-01 8.7943799091221064e-01 8.8249690258459546e-01 8.7943799091221064e-01 8.7032472583339060e-01 8.5534532730742252e-01 8.3480630128078936e-01 8.0912201155161290e-01 7.7880078307140488e-01 7.4442818748170414e-01 7.0664827785771633e-01 6.6614361070348771e-01 6.2361491642617306e-01 5.7976125535117784e-01 5.3526142851899028e-01 5.5610088377320865e-01 6.0233323251091775e-01 6.4789425817266200e-01 6.9207873180225443e-01 7.3416037639923104e-01 7.7341117985970542e-01 8.0912201155161290e-01 8.4062374333450529e-01 8.6730800537259367e-01 8.8864668198311347e-01 9.0420927684770191e-01 9.1367735075396794e-01 9.1685535573202892e-01 9.1367735075396794e-01 9.0420927684770191e-01 8.8864668198311347e-01 8.6730800537259367e-01 8.4062374333450529e-01 8.0912201155161290e-01 7.7341117985970542e-01 7.3416037639923104e-01 6.9207873180225443e-01 6.4789425817266200e-01 6.0233323251091775e-01 5.5610088377320865e-01 5.7375342073743274e-01 6.2145334176076350e-01 6.6846062962616570e-01 7.1404766900731564e-01 7.5746512839696645e-01 7.9796188610635377e-01 8.3480630128078936e-01 8.6730800537259367e-01 8.9483931681436979e-01 9.1685535573202892e-01 9.3291196038714741e-01 9.4268058322165171e-01 9.4595946890676541e-01 9.4268058322165171e-01 9.3291196038714741e-01 9.1685535573202892e-01 8.9483931681436979e-01 8.6730800537259367e-01 8.3480630128078936e-01 7.9796188610635377e-01 7.5746512839696645e-01 7.1404766900731564e-01 6.6846062962616570e-01 6.2145334176076350e-01 5.7375342073743274e-01 5.8786967312234650e-01 6.3674317167840966e-01 6.8490699598517257e-01 7.3161562894664178e-01 7.7610130299524549e-01 8.1759441633744401e-01 8.5534532730742252e-01 8.8864668198311347e-01 9.1685535573202892e-01 9.3941306281347581e-01 9.5586471362529535e-01 9.6587367724104967e-01 9.6923323447634413e-01 9.6587367724104967e-01 9.5586471362529535e-01 9.3941306281347581e-01 9.1685535573202892e-01 8.8864668198311347e-01 8.5534532730742252e-01 8.1759441633744401e-01 7.7610130299524549e-01 7.3161562894664178e-01 6.8490699598517257e-01 6.3674317167840966e-01 5.8786967312234650e-01 5.9816485313198164e-01 6.4789425817266211e-01 6.9690156065811215e-01 7.4442818748170425e-01 7.8969292539959679e-01 8.3191269481974750e-01 8.7032472583339060e-01 9.0420927684770191e-01 9.3291196038714741e-01 9.5586471362529535e-01 9.7260447711634834e-01 9.8278872462042910e-01 9.8620711674391626e-01 9.8278872462042910e-01 9.7260447711634834e-01 9.5586471362529535e-01 9.3291196038714741e-01 9.0420927684770191e-01 8.7032472583339060e-01 8.3191269481974750e-01 7.8969292539959679e-01 7.4442818748170425e-01 6.9690156065811215e-01 6.4789425817266211e-01 5.9816485313198164e-01 6.0442830251543478e-01 6.5467842957732847e-01 7.0419889286941895e-01 7.5222317618338685e-01 7.9796188610635388e-01 8.4062374333450529e-01 8.7943799091221064e-01 9.1367735075396794e-01 9.4268058322165171e-01 9.6587367724104967e-01 9.8278872462042910e-01 9.9307961249031607e-01 9.9653379897036909e-01 9.9307961249031607e-01 9.8278872462042910e-01 9.6587367724104967e-01 9.4268058322165171e-01 9.1367735075396794e-01 8.7943799091221064e-01 8.4062374333450529e-01 7.9796188610635388e-01 7.5222317618338685e-01 7.0419889286941895e-01 6.5467842957732847e-01 6.0442830251543478e-01 6.0653065971263342e-01 6.5695556964926849e-01 7.0664827785771622e-01 7.5483960198900735e-01 8.0073740291680806e-01 8.4354764906423441e-01 8.8249690258459546e-01 9.1685535573202892e-01 9.4595946890676541e-01 9.6923323447634413e-01 9.8620711674391626e-01 9.9653379897036909e-01 1.0000000000000000e+00 9.9653379897036909e-01 9.8620711674391626e-01 9.6923323447634413e-01 9.4595946890676541e-01 9.1685535573202892e-01 8.8249690258459546e-01 8.4354764906423441e-01 8.0073740291680806e-01 7.5483960198900735e-01 7.0664827785771622e-01 6.5695556964926849e-01 6.0653065971263342e-01 6.0442830251543478e-01 6.5467842957732847e-01 7.0419889286941895e-01 7.5222317618338685e-01 7.9796188610635388e-01 8.4062374333450529e-01 8.7943799091221064e-01 9.1367735075396794e-01 9.4268058322165171e-01 9.6587367724104967e-01 9.8278872462042910e-01 9.9307961249031607e-01 9.9653379897036909e-01 9.9307961249031607e-01 9.8278872462042910e-01 9.6587367724104967e-01 9.4268058322165171e-01 9.1367735075396794e-01 8.7943799091221064e-01 8.4062374333450529e-01 7.9796188610635388e-01 7.5222317618338685e-01 7.0419889286941895e-01 6.5467842957732847e-01 6.0442830251543478e-01 5.9816485313198164e-01 6.4789425817266211e-01 6.9690156065811215e-01 7.4442818748170425e-01 7.8969292539959679e-01 8.3191269481974750e-01 8.7032472583339060e-01 9.0420927684770191e-01 9.3291196038714741e-01 9.5586471362529535e-01 9.7260447711634834e-01 9.8278872462042910e-01 9.8620711674391626e-01 9.8278872462042910e-01 9.7260447711634834e-01 9.5586471362529535e-01 9.3291196038714741e-01 9.0420927684770191e-01 8.7032472583339060e-01 8.3191269481974750e-01 7.8969292539959679e-01 7.4442818748170425e-01 6.9690156065811215e-01 6.4789425817266211e-01 5.9816485313198164e-01 5.8786967312234650e-01 6.3674317167840966e-01 6.8490699598517257e-01 7.3161562894664178e-01 7.7610130299524549e-01 8.1759441633744401e-01 8.5534532730742252e-01 8.8864668198311347e-01 9.1685535573202892e-01 9.3941306281347581e-01 9.5586471362529535e-01 9.6587367724104967e-01 9.6923323447634413e-01 9.6587367724104967e-01 9.5586471362529535e-01 9.3941306281347581e-01 9.1685535573202892e-01 8.8864668198311347e-01 8.5534532730742252e-01 8.1759441633744401e-01 7.7610130299524549e-01 7.3161562894664178e-01 6.8490699598517257e-01 6.3674317167840966e-01 5.8786967312234650e-01 5.7375342073743274e-01 6.2145334176076350e-01 6.6846062962616570e-01 7.1404766900731564e-01 7.5746512839696645e-01 7.9796188610635377e-01 8.3480630128078936e-01 8.6730800537259367e-01 8.9483931681436979e-01 9.1685535573202892e-01 9.3291196038714741e-01 9.4268058322165171e-01 9.4595946890676541e-01 9.4268058322165171e-01 9.3291196038714741e-01 9.1685535573202892e-01 8.9483931681436979e-01 8.6730800537259367e-01 8.3480630128078936e-01 7.9796188610635377e-01 7.5746512839696645e-01 7.1404766900731564e-01 6.6846062962616570e-01 6.2145334176076350e-01 5.7375342073743274e-01 5.5610088377320865e-01 6.0233323251091775e-01 6.4789425817266200e-01 6.9207873180225443e-01 7.3416037639923104e-01 7.7341117985970542e-01 8.0912201155161290e-01 8.4062374333450529e-01 8.6730800537259367e-01 8.8864668198311347e-01 9.0420927684770191e-01 9.1367735075396794e-01 9.1685535573202892e-01 9.1367735075396794e-01 9.0420927684770191e-01 8.8864668198311347e-01 8.6730800537259367e-01 8.4062374333450529e-01 8.0912201155161290e-01 7.7341117985970542e-01 7.3416037639923104e-01 6.9207873180225443e-01 6.4789425817266200e-01 6.0233323251091775e-01 5.5610088377320865e-01 5.3526142851899028e-01 5.7976125535117784e-01 6.2361491642617306e-01 6.6614361070348771e-01 7.0664827785771633e-01 7.4442818748170414e-01 7.7880078307140488e-01 8.0912201155161290e-01 8.3480630128078936e-01 8.5534532730742252e-01 8.7032472583339060e-01 8.7943799091221064e-01 8.8249690258459546e-01 8.7943799091221064e-01 8.7032472583339060e-01 8.5534532730742252e-01 8.3480630128078936e-01 8.0912201155161290e-01 7.7880078307140488e-01 7.4442818748170414e-01 7.0664827785771633e-01 6.6614361070348771e-01 6.2361491642617306e-01 5.7976125535117784e-01 5.3526142851899028e-01 5.1163751208597108e-01 5.5417332631729532e-01 5.9609149350216650e-01 6.3674317167840955e-01 6.7546015374827406e-01 7.1157263624179690e-01 7.4442818748170414e-01 7.7341117985970542e-01 7.9796188610635377e-01 8.1759441633744401e-01 8.3191269481974750e-01 8.4062374333450529e-01 8.4354764906423441e-01 8.4062374333450529e-01 8.3191269481974750e-01 8.1759441633744401e-01 7.9796188610635377e-01 7.7341117985970542e-01 7.4442818748170414e-01 7.1157263624179690e-01 6.7546015374827406e-01 6.3674317167840955e-01 5.9609149350216650e-01 5.5417332631729532e-01 5.1163751208597108e-01 4.8567178524771237e-01 5.2604889667268739e-01 5.6583970678742268e-01 6.0442830251543478e-01 6.4118038842995462e-01 6.7546015374827406e-01 7.0664827785771633e-01 7.3416037639923104e-01 7.5746512839696645e-01 7.7610130299524549e-01 7.8969292539959679e-01 7.9796188610635388e-01 8.0073740291680806e-01 7.9796188610635388e-01 7.8969292539959679e-01 7.7610130299524549e-01 7.5746512839696645e-01 7.3416037639923104e-01 7.0664827785771633e-01 6.7546015374827406e-01 6.4118038842995462e-01 6.0442830251543478e-01 5.6583970678742268e-01 5.2604889667268739e-01 4.8567178524771237e-01 4.5783336177161427e-01 4.9589608071851543e-01 5.3340610480433592e-01 5.6978282473092301e-01 6.0442830251543478e-01 6.3674317167840955e-01 6.6614361070348771e-01 6.9207873180225443e-01 7.1404766900731564e-01 7.3161562894664178e-01 7.4442818748170425e-01 7.5222317618338685e-01 7.5483960198900735e-01 7.5222317618338685e-01 7.4442818748170425e-01 7.3161562894664178e-01 7.1404766900731564e-01 6.9207873180225443e-01 6.6614361070348771e-01 6.3674317167840955e-01 6.0442830251543478e-01 5.6978282473092301e-01 5.3340610480433592e-01 4.9589608071851543e-01 4.5783336177161427e-01 4.2860384615383690e-01 4.6423652192169051e-01 4.9935178859927615e-01 5.3340610480433592e-01 5.6583970678742268e-01 5.9609149350216650e-01 6.2361491642617306e-01 6.4789425817266200e-01 6.6846062962616570e-01 6.8490699598517257e-01 6.9690156065811215e-01 7.0419889286941895e-01 7.0664827785771622e-01 7.0419889286941895e-01 6.9690156065811215e-01 6.8490699598517257e-01 6.6846062962616570e-01 6.4789425817266200e-01 6.2361491642617306e-01 5.9609149350216650e-01 5.6583970678742268e-01 5.3340610480433592e-01 4.9935178859927615e-01 4.6423652192169051e-01 4.2860384615383690e-01 3.9846369506125967e-01 4.3159062049319485e-01 4.6423652192169051e-01 4.9589608071851543e-01 5.2604889667268739e-01 5.5417332631729532e-01 5.7976125535117784e-01 6.0233323251091775e-01 6.2145334176076350e-01 6.3674317167840966e-01 6.4789425817266211e-01 6.5467842957732847e-01 6.5695556964926849e-01 6.5467842957732847e-01 6.4789425817266211e-01 6.3674317167840966e-01 6.2145334176076350e-01 6.0233323251091775e-01 5.7976125535117784e-01 5.5417332631729532e-01 5.2604889667268739e-01 4.9589608071851543e-01 4.6423652192169051e-01 4.3159062049319485e-01 3.9846369506125967e-01 3.6787944117144233e-01 3.9846369506125967e-01 4.2860384615383690e-01 4.5783336177161427e-01 4.8567178524771237e-01 5.1163751208597108e-01 5.3526142851899028e-01 5.5610088377320865e-01 5.7375342073743274e-01 5.8786967312234650e-01 5.9816485313198164e-01 6.0442830251543478e-01 6.0653065971263342e-01 6.0442830251543478e-01 5.9816485313198164e-01 5.8786967312234650e-01 5.7375342073743274e-01 5.5610088377320865e-01 5.3526142851899028e-01 5.1163751208597108e-01 4.8567178524771237e-01 4.5783336177161427e-01 4.2860384615383690e-01 3.9846369506125967e-01 3.6787944117144233e-01 GMTSAR_V5.7/.svn/pristine/98/9819a3b1df794d61817b5d27848b80aaec9521f2.svn-base000444 015705 000000 00000016110 13505462014 025476 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Program to prepare ALOS L1.1 data for InSAR processing. Read in data and * * leader file and write out prm and integer SLC file for siosar * ******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 4/23/07 added code to check endianess RJM * * 07/15/08 added a command-line option to force earth radius DTS * 10/10/10 * added command line options for SLC_factor and rbias * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "\n\nUsage: ALOS_pre_process_SLC imagefile LEDfile [-radius RE] [-swap] " "[-V] [-debug] [-quiet] \n" "\ncreates data.SLC and writes out parameters (PRM format) to stdout\n" "\nimagefile ALOS Level 1.1 complex file (CEOS format):\n" "LEDfile ALOS Level 1.1 LED file (CEOS leaderfile format):\n" "\n options: \n" "-near near_range specify the near_range (m) \n" "-radius RE specify the local earth radius (m) \n" "-SLC_factor fact scale factor to convert float to int SLC [1.0] \n" "-swap do byte-swap (should be automatic) \n" "-ALOS1 ALOS2 L1.1 data format \n" "-ALOS2 ALOS2 L1.1 data format (default)\n" "-LED write generic LED file\n" "-noLED oldstyle use ldr file for orbits directlyn" "-V verbose write information \n" "-debug write even more information \n" "-quiet don't write any information \n" "-tbias tbias correct the clock bias (positive value means " "plus)\n" "-rbias tbias correct the range bias (positive value means " "increase near range)\n" "Example:\n" "ALOS_pre_process_SLC IMG-HH-ALOS2011986990-140813-HBQR1.1__A " "LED-ALOS2011986990-140813-HBQR1.1__A -SLC_factor 1. -rbias -70.0000 " "-tbias 0.068759 \n"; long read_ALOS_data_SLC(FILE *, FILE *, struct PRM *, long *); void parse_ALOS_commands(int, char **, char *, struct PRM *); void set_ALOS_defaults(struct PRM *); void print_ALOS_defaults(struct PRM *); void swap_ALOS_data_info(struct sardata_info *); void get_files(struct PRM *, FILE **, FILE **, char *, char *, int); int ledflag; int main(int argc, char **argv) { FILE *imagefile, *ldrfile; FILE *rawfile[11], *prmfile[11]; char prmfilename[128]; int nPRF; long byte_offset; struct PRM prm; struct ALOS_ORB orb; /*char date[8];*/ if (argc < 3) die(USAGE, ""); /* set flags */ roi = debug = verbose = swap = quiet_flag = 0; slc_fact = 0.01; tbias = 0.0; rbias = 0.0; prefix_off = 132; /* default is to use the new LED orbit */ ledflag = 1; nPRF = 0; null_sio_struct(&prm); set_ALOS_defaults(&prm); /* read command line */ parse_ALOS_commands(argc, argv, USAGE, &prm); /* shift the start time if this is ALOS1 */ if (prefix_off == 0) tbias = tbias - 0.0020835; if (verbose) print_ALOS_defaults(&prm); if (is_big_endian_() == -1) { swap = 1; fprintf(stderr, ".... swapping bytes\n"); } else { swap = 0; } /* IMG and LED files should exist already */ if ((imagefile = fopen(argv[1], "r")) == NULL) die("couldn't open Level 1.1 IMG file \n", argv[1]); if ((ldrfile = fopen(argv[2], "r")) == NULL) die("couldn't open LED file \n", argv[2]); /* if it exists, copy to prm structure */ strcpy(prm.led_file, argv[2]); /* name and open output files and header files for raw data (but input for * later processing) */ get_files(&prm, &rawfile[nPRF], &prmfile[nPRF], prmfilename, argv[1], nPRF); /* read sarleader; put info into prm; write log file if specified */ read_ALOS_sarleader(ldrfile, &prm, &orb); // AUGUST 2016 /* write out orbit params in generic LED format */ if (ledflag) write_ALOS_LED(&orb, &prm, argv[1]); // AUGUST 2016 /* read Level 1.1 file; put info into prm; convert to *.SLC format */ /* if PRF changes halfway through, create new set of header and data files */ /* byte_offset is non-zero only if the prf changes */ /* byte_offset gets set to point in file at prf change */ byte_offset = -1; while (byte_offset != 0) { /* if prf changes, create new prm and data files */ if (nPRF > 0) { if (verbose) fprintf(stderr, "creating multiple files due to PRF change (*.%d) \n", nPRF + 1); get_files(&prm, &rawfile[nPRF], &prmfile[nPRF], prmfilename, argv[1], nPRF); } /* set the chirp extension to 500 if FBD fs = 16000000 */ if (prm.fs < 17000000.) { prm.chirp_ext = 500; //prm.chirp_slope = -5.18519e+11; prm.SLC_scale = I2SCALE; /* set dfact */ } else { //prm.chirp_slope = -1.03704e+12; prm.SLC_scale = I2SCALE * 2; } /* read_ALOS_data returns 0 if all data file is read; returns byte offset if the PRF changes */ /* calculate parameters from orbit */ byte_offset = read_ALOS_data_SLC(imagefile, rawfile[nPRF], &prm, &byte_offset); ALOS_ldr_orbit(&orb, &prm); /* force chirp slope if asked to */ if (force_slope == 1) prm.chirp_slope = forced_slope; /* set parameters for integer SLC */ /* write ascii output, SIO format */ prm.near_range = prm.near_range + rbias; /* if this is ALOS-2 data after 2014 set the Dopplers to zero */ if (prm.SC_clock_start / 1000. > 2014.) { prm.fd1 = 0.; prm.fdd1 = 0.; prm.fddd1 = 0.; } put_sio_struct(prm, prmfile[nPRF]); /* write roi_pac output if (roi) { // first part of rsc file write_roi(argv[1], ldrfile, prm, orb, date); // orbit file write_roi_orbit(orb, date); }*/ nPRF++; } return (EXIT_SUCCESS); } /*------------------------------------------------------*/ void get_files(struct PRM *prm, FILE **rawfile, FILE **prmfile, char *prmfilename, char *name, int n) { /* name and open output file for raw data (but input for later processing) */ /* if more than 1 set of output files, append an integer (beginning with 2) */ if (n == 0) { sprintf(prm->input_file, "%s.SLC", name); sprintf(prmfilename, "%s.PRM", name); } else { sprintf(prm->input_file, "%s.SLC.%d", name, n + 1); sprintf(prmfilename, "%s.PRM.%d", name, n + 1); } sprintf(prm->SLC_file, "%s.SLC", name); strcpy(prm->dtype, "a"); /* now open the files */ if ((*rawfile = fopen(prm->input_file, "w")) == NULL) die("can't open ", prm->input_file); if ((*prmfile = fopen(prmfilename, "w")) == NULL) die("couldn't open output PRM file \n", prmfilename); } /*------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/98/98de84f2158bd840acdacd6b3c325f7a0cf502b5.svn-base000444 015705 000000 00000000627 13505462014 026037 0ustar00sandwellwheel000000 000000 include ../../config.mk # # make all the files # DIRS = lib src all: $(LN_S) -f ../S1A_preproc/include include $(LN_S) -f ../S1A_preproc/lib lib for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done uninstall: (cd src; $(MAKE) uninstall) clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done spotless: clean GMTSAR_V5.7/.svn/pristine/98/98fe09d116b1790ac45d0952b89aff7585a27bf4.svn-base000444 015705 000000 00000025234 13505462013 025570 0ustar00sandwellwheel000000 000000 # snaphu configuration file # # Lines with fewer than two fields and lines whose first non-whitespace # characters are not alphnumeric are ignored. For the remaining lines, # anything after the first two fields (delimited by whitespace) is # also ignored. Inputs are converted in the order they appear in the file; # if multiple assignments are made to the same parameter, the last one # given is the one used. Parameters in this file will be superseded by # parameters given on the command line after the -f flag specifying this # file. Multiple configuration files may be given on the command line. ############################################# # File input and output and runtime options # ############################################# # See section below for file format configuration options. # Input file name # INFILE snaphu.in # Input file line length # LINELENGTH 1000 # Output file name # OUTFILE snaphu.out # Amplitude file name(s) # AMPFILE snaphu.amp.in # Single file containing amplitude images # Correlation file name # CORRFILE snaphu.corr.in # Statistical-cost mode (TOPO, DEFO, SMOOTH, or NOSTATCOSTS) # STATCOSTMODE TOPO # Initialize-only mode (TRUE or FALSE) # INITONLY FALSE # Algorithm used for initialization of wrapped phase values. Possible # values are MST and MCF. # INITMETHOD MST # Verbose-output mode (TRUE or FALSE) # VERBOSE FALSE ################ # File formats # ################ # Valid data formats: # # COMPLEX_DATA: complex values: real, imag, real, imag # ALT_LINE_DATA: real values from different arrays, alternating by line # ALT_SAMPLE_DATA: real values from different arrays, alternating by sample # FLOAT_DATA: single array of floating-point data # # The ALT_SAMPLE_DATA format is sometimes known as .amp or sample- # interleaved format; the ALT_LINE_DATA format is sometimes known as # .hgt or line-interleaved format. For the ALT_LINE_DATA format, the # first array is always assumed to be the interferogram magnitude. All # formats assume single-precision (32-bit) floating-point data (real*4 # and complex*8 in Fortran) in the native byte order (big vs. little # endian) of the system. # Input file format # Allowable formats: # COMPLEX_DATA (default) # ALT_LINE_DATA (magnitude in channel 1, phase in radians in channel 2) # ALT_SAMPLE_DATA (magnitude in channel 1, phase in radians in channel 2) # FLOAT_DATA (phase in radians) # #INFILEFORMAT COMPLEX_DATA INFILEFORMAT FLOAT_DATA # Output file format # Allowable formats: # ALT_LINE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2; default) # ALT_SAMPLE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2) # FLOAT_DATA (unwrapped phase in radians) # #OUTFILEFORMAT ALT_LINE_DATA OUTFILEFORMAT FLOAT_DATA # Amplitude or power file format # Units should be consistent with interferogram. Allowable formats: # ALT_LINE_DATA (first image amplitude in channel 1, # second image amplitude in channel 2) # ALT_SAMPLE_DATA (first image amplitude in channel 1, # second image amplitude in channel 2; default) # FLOAT_DATA (square root of average power of two images) # #AMPFILEFORMAT ALT_SAMPLE_DATA AMPFILEFORMAT FLOAT_DATA # Correlation file format # Allowable formats: # ALT_LINE_DATA (channel 1 ignored; correlation values # between 0 and 1 in channel 2; default) # ALT_SAMPLE_DATA (channel 1 ignored; correlation values # between 0 and 1 in channel 2) # FLOAT_DATA (correlation values between 0 and 1) # #CORRFILEFORMAT ALT_LINE_DATA CORRFILEFORMAT FLOAT_DATA ############################### # SAR and geometry parameters # ############################### # Orbital radius (double, meters) or altitude (double, meters). The # radius should be the local radius if the orbit is not circular. The # altitude is just defined as the orbit radius minus the earth radius. # Only one of these two parameters should be given. ORBITRADIUS 7153000.0 #ALTITUDE 775000.0 # Local earth radius (double, meters). A spherical-earth model is # used. EARTHRADIUS 6378000.0 # The baseline parameters are not used in deformation mode, but they # are very important in topography mode. The parameter BASELINE # (double, meters) is the physical distance (always positive) between # the antenna phase centers. The along-track componenet of the # baseline is assumed to be zero. The parameter BASELINEANGLE_DEG # (double, degrees) is the angle between the antenna phase centers # with respect to the local horizontal. Suppose the interferogram is # s1*conj(s2). The baseline angle is defined as the angle of antenna2 # above the horizontal line extending from antenna1 towards the side # of the SAR look direction. Thus, if the baseline angle minus the # look angle is less than -pi/2 or greater than pi/2, the topographic # height increases with increasing elevation. The units of # BASELINEANGLE_RAD are radians. BASELINE 150.0 BASELINEANGLE_DEG 225.0 #BASELINEANGLE_RAD 3.92699 # If the BPERP parameter is given, the baseline angle is taken to be # equal to the look angle (mod pi) at midswath, and the length of the # baseline is set accordingly. Particular attention must be paid to # the sign of this parameter--it should be negative if increasing # phase implies increasing topographic height. #BPERP -150.0 # The transmit mode should be either REPEATPASS or PINGPONG if both # antennas transmitted and both received (REPEATPASS and PINGPONG have # the same effect); the transmit mode should be SINGLEANTENNATRANSMIT # if only one antenna was used to transmit while both antennas # received. In single-antenna-transmit mode, the baseline is # effectively halved. This parameter is ignored for cost modes other # than topography. TRANSMITMODE REPEATPASS # Slant range from platform to first range bin in input data file # (double, meters). Be sure to modify this parameter if the input # file is extracted from a larger scene. The parameter does not need # to be modified is snaphu is unwrapping only a subset of the input file. NEARRANGE 831000.0 # Slant range and azimuth pixel spacings of input interferogram after # any multilook averaging. This is not the same as the resolution. # (double, meters). DR 8.0 DA 20.0 # Single-look slant range and azimuth resolutions. This is not the # same as the pixel spacing. (double, meters). RANGERES 10.0 AZRES 6.0 # Wavelength (double, meters). LAMBDA 0.0565647 # Number of real (not necessarily independent) looks taken in range and # azimuth to form the input interferogram (long). NLOOKSRANGE 1 NLOOKSAZ 5 # Number of looks (assumed independent) from nonspatial averaging (long). NLOOKSOTHER 1 # Equivalent number of independent looks (double, dimensionless) that were # used to generate correlation file if one is specified. This parameter # is ignored if the correlation data are generated by the interferogram # and amplitude data. # # The equivalent number of independent looks is approximately equal to the # real number of looks divided by the product of range and azimuth # resolutions, and multiplied by the product of the single-look range and # azimuth pixel spacings. It is about 0.53 times the number of real looks # for ERS data processed without windowing. NCORRLOOKS 23.8 # Number of looks that should be taken in range and azimuth for estimating # the correlation coefficient from the interferogram and the amplitude # data. These numbers must be larger than NLOOKSRANGE and NLOOKSAZ. # The actual numbers used may be different since we prefer odd integer # multiples of NLOOKSRANGE and NLOOKSAZ (long). These numbers are ignored # if a separate correlation file is given as input. NCORRLOOKSRANGE 3 NCORRLOOKSAZ 15 ############################### # Scattering model parameters # ############################### # Threshold brightness (normalized) for layover height integration # (double, dimensionless) LAYMINEI 1.25 ################################## # Decorrelation model parameters # ################################## # Here, rho is the magnitude of the complex correlation coefficient # between the two observations forming the interferogram (0<=rho<=1) # See Zebker & Villasenor, 1992 # Default value to use uniformly for true, unbiased correlation if no # correlation file is specified and correlation cannot be generated # from the available data (double). DEFAULTCORR 0.01 # Factor applied to expected minimum measured (biased) correlation. # Values smaller than the threshold rhominfactor*rho0 are assumed to # come from zero statistical correlation because of estimator bias (double). # This is used only in topo mode; for defo mode, use DEFOTHRESHFACTOR. RHOMINFACTOR 1.3 ######################## # PDF model parameters # ######################## # Algorithm costs are based on the negative log pdf: # # cost = -log(f(phi | EI, rho)) # Factor applied to range layover probability density to get azimuth # layover probability density (double). AZDZFACTOR 0.99 # Ratio of layover probability density to peak probability density # for non-layover slopes expected (double). LAYCONST 0.9 ############################### # Deformation mode parameters # ############################### # Factor applied to range discontinuity probability density to get # corresponding value for azimuth (double). DEFOAZDZFACTOR 1.0 # Factor applied to rho0 to get threshold for whether or not phase # discontinuity is possible (double). rho0 is the expected, biased # correlation measure if true correlation is 0. DEFOTHRESHFACTOR 1.2 # Maximum phase discontinuity likely (double). Units are radians or cycles. # If abrupt phase discontinuities are not expected, this paramter can be # set to zero. DEFOMAX_CYCLE 65 #DEFOMAX_RAD 7.5398 # Ratio of phase discontinuity probability density to peak probability # density expected for discontinuity-possible pixel differences (double). # Value of 1 means zero cost for discontinuity, 0 means infinite cost. DEFOCONST 0.9 ######################## # Algorithm parameters # ######################## # Maximum flow increment (long) for solver. Not the same as maximum # flow possible. MAXFLOW 4 # Scaling constant factor applied to double precision costs to get # integer costs (double). COSTSCALE 100.0 # End of snaphu configuration file GMTSAR_V5.7/.svn/pristine/3a/3aad433d4d5afd3ad778001bd9ffc1035a0725b9.svn-base000444 015705 000000 00000014431 13505462013 026003 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua Xu, Jan, 2019 # # Automatically generate Multi Aperture Interferogram # if ($#argv != 3 && $#argv != 4) then echo "" echo "Usage: MAI_processing.csh SAT master_image slave_image [configuration_file] " echo "" echo "Example: MAI_processing.csh ALOS_SLC IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A [config.alos.txt]" echo "" exit 1 endif if ($#argv == 4) then if(! -f $4 ) then echo " no configure file: "$4 echo " Leave it blank to generate config file with default values." exit 1 endif endif set SAT = `echo $1` if ($#argv == 4) then set conf = `echo $4` else pop_config.csh $SAT > config.$SAT.txt set conf = `echo "config.$SAT.txt"` endif set master = ` echo $2 ` set slave = ` echo $3 ` set region_cut = `grep region_cut $conf | awk '{print $3}'` set filter = `grep filter_wavelength $conf | awk '{print $3}'` set dec = `grep dec_factor $conf | awk '{print $3}'` set range_dec = `grep range_dec $conf | awk '{print $3}'` set azimuth_dec = `grep azimuth_dec $conf | awk '{print $3}'` set near_interp = `grep near_interp $conf | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $conf | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $conf | awk '{print $3}'` set mask_water = `grep mask_water $conf | awk '{print $3}'` set switch_land = `grep switch_land $conf | awk '{print $3}'` set defomax = `grep defomax $conf | awk '{print $3}'` set near_interp = `grep near_interp $conf | awk '{print $3}'` rm -r SLC_F SLC_B MAI_intf sed "s/.*skip_stage.*/skip_stage = 4,5,6/g" $conf > tmp_config p2p_processing.csh $SAT $master $slave tmp_config echo "" echo "Splitting aperture ..." cd raw if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then sarp.csh $master.PRM sarp.csh $slave.PRM endif split_aperture $master.PRM > MAI_m.rec split_aperture $slave.PRM > MAI_s.rec cd .. mkdir SLC_F cd SLC_F ln -s ../raw/$master.LED . cp ../raw/$master.PRM . ln -s ../raw/$master.SLCF ./$master.SLC ln -s ../raw/$slave.LED . cp ../raw/$slave.PRM . ln -s ../raw/$slave.SLCF ./$slave.SLC cp $slave.PRM $slave.PRM0 if ($SAT == "ALOS2_SCAN") then ln -s ../SLC/freq_alos2.dat fitoffset.csh 2 3 freq_alos2.dat 10 >> $slave.PRM else if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 3 3 freq_xcorr.dat 18 >> $slave.PRM else ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 2 2 freq_xcorr.dat 18 >> $slave.PRM endif resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM if ($region_cut != "") then echo "Cutting SLC image to $region_cut" cut_slc $master.PRM junk1 $region_cut cut_slc $slave.PRM junk2 $region_cut mv junk1.PRM $master.PRM mv junk2.PRM $slave.PRM mv junk1.SLC $master.SLC mv junk2.SLC $slave.SLC endif intf.csh $master.PRM $slave.PRM cd .. mkdir SLC_B cd SLC_B ln -s ../raw/$master.LED . cp ../raw/$master.PRM . ln -s ../raw/$master.SLCB ./$master.SLC ln -s ../raw/$slave.LED . cp ../raw/$slave.PRM . ln -s ../raw/$slave.SLCB ./$slave.SLC cp $slave.PRM $slave.PRM0 if ($SAT == "ALOS2_SCAN") then ln -s ../SLC/freq_alos2.dat fitoffset.csh 2 3 freq_alos2.dat 10 >> $slave.PRM else if ($SAT == "ERS" || $SAT == "ENVI" || $SAT == "ALOS" || $SAT == "CSK_RAW") then ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 3 3 freq_xcorr.dat 18 >> $slave.PRM else ln -s ../SLC/freq_xcorr.dat . fitoffset.csh 2 2 freq_xcorr.dat 18 >> $slave.PRM endif resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM if ($region_cut != "") then echo "Cutting SLC image to $region_cut" cut_slc $master.PRM junk1 $region_cut cut_slc $slave.PRM junk2 $region_cut mv junk1.PRM $master.PRM mv junk2.PRM $slave.PRM mv junk1.SLC $master.SLC mv junk2.SLC $slave.SLC endif intf.csh $master.PRM $slave.PRM cd .. cd raw set prf = `grep PRF $master.PRM | awk '{print $3}'` set height = `grep SC_height $master.PRM | head -1 | awk '{print $3}'` set radius = `grep earth_radius $master.PRM | head -1 | awk '{print $3}'` set SC_vel = `grep SC_vel $master.PRM | head -1 | awk '{print $3}'` set spec_sep = `grep frequency_separation MAI_m.rec | awk '{print $3}'` cd .. set pix_size = `echo $prf $height $radius $SC_vel | awk '{printf("%.6f",$4/($2+$3)*$3/$1)}'` mkdir MAI_intf cd MAI_intf gmt grdmath ../SLC_F/real.grd=bf ../SLC_B/real.grd=bf MUL ../SLC_F/imag.grd=bf ../SLC_B/imag.grd=bf MUL ADD 3e5 MUL = real.grd=bf gmt grdmath ../SLC_F/imag.grd=bf ../SLC_B/real.grd=bf MUL ../SLC_F/real.grd=bf ../SLC_B/imag.grd=bf MUL -1 MUL ADD 3e5 MUL = imag.grd=bf cp ../SLC/$master.PRM . cp ../SLC/$slave.PRM . ln -s ../SLC/$master.LED . ln -s ../SLC/$slave.LED . ln -s ../SLC/$master.SLC . ln -s ../SLC/$slave.SLC . filter.csh $master.PRM $slave.PRM $filter $dec $range_dec $azimuth_dec gmt grdmath phase.grd 2 PI MUL DIV $spec_sep DIV $prf MUL $pix_size MUL = MAI_intf.grd gmt grdmath phasefilt.grd 2 PI MUL DIV $spec_sep DIV $prf MUL $pix_size MUL = MAI_intf_filt.grd #gmt grdmath ../intf_f/*/phase.grd ../intf_b/*/phase.grd SUB PI ADD 2 PI MUL MOD PI SUB 2 PI MUL DIV $spec_sep DIV $prf MUL $pix_size MUL = MAI_intf.grd if ($threshold_geocode != 0) then ln -s ../topo/trans.dat . if ($mask_water != 0 || $switch_land != 0) then set region = `gmt grdinfo MAI_intf.grd -I- | awk -F'R' '{print $2}'` cd ../topo landmask.csh $region gmt grdedit landmask_ra.grd -R$region cd ../MAI_intf ln -s ../topo/landmask_ra.grd . gmt grdsample landmask_ra.grd -RMAI_intf.grd -Glandmask_ra_patch.grd gmt grdmath MAI_intf.grd landmask_ra_patch.grd MUL = tmp.grd mv tmp.grd MAI_intf.grd endif proj_ra2ll.csh trans.dat MAI_intf.grd MAI_intf_ll.grd proj_ra2ll.csh trans.dat MAI_intf_filt.grd MAI_intf_filt_ll.grd gmt makecpt -Cjet -T-$pix_size/$pix_size/0.1 -D -Z > MAI.cpt grd2kml.csh MAI_intf_ll MAI.cpt grd2kml.csh MAI_intf_filt_ll MAI.cpt endif cd .. GMTSAR_V5.7/.svn/pristine/3a/3af6a2ae023b84e0b28f02c94b1954d2c3f1875a.svn-base000444 015705 000000 00000013127 13505462013 025647 0ustar00sandwellwheel000000 000000 # # $Id$ # # Useful CMake variables. # # There are three configuration files: # 1) "ConfigDefault.cmake" - is version controlled and used to add new default # variables and set defaults for everyone. # 2) "ConfigUser.cmake" in the source tree - is not version controlled # (currently listed in svn:ignore property) and used to override defaults on # a per-user basis. # 3) "ConfigUser.cmake" in the build tree - is used to override # "ConfigUser.cmake" in the source tree. # # NOTE: If you want to change CMake behaviour just for yourself then copy # "ConfigUserTemplate.cmake" to "ConfigUser.cmake" and then edit # "ConfigUser.cmake" (not "ConfigDefault.cmake" or "ConfigUserTemplate.cmake"). # include ("${CMAKE_SOURCE_DIR}/cmake/ConfigDefault.cmake") # If "ConfigUser.cmake" doesn't exist then create one for convenience. if (EXISTS "${CMAKE_SOURCE_DIR}/cmake/ConfigUser.cmake") include ("${CMAKE_SOURCE_DIR}/cmake/ConfigUser.cmake") endif (EXISTS "${CMAKE_SOURCE_DIR}/cmake/ConfigUser.cmake") # If you've got a 'ConfigUser.cmake' in the build tree then that overrides the # one in the source tree. if (EXISTS "${CMAKE_BINARY_DIR}/cmake/ConfigUser.cmake") include ("${CMAKE_BINARY_DIR}/cmake/ConfigUser.cmake") endif (EXISTS "${CMAKE_BINARY_DIR}/cmake/ConfigUser.cmake") ########################################################### # Do any needed processing of the configuration variables # ########################################################### # Build type if (NOT CMAKE_BUILD_TYPE) set (CMAKE_BUILD_TYPE Release) endif (NOT CMAKE_BUILD_TYPE) # Here we change it to add the SVN revision number for non-public releases - see Package.cmake for # why this has to be done here. set (GMTSAR_PACKAGE_VERSION_WITH_SVN_REVISION ${GMTSAR_PACKAGE_VERSION}) # Add the Subversion version number to the package filename if this is a non-public release. # A non-public release has an empty 'GMTSAR_SOURCE_CODE_CONTROL_VERSION_STRING' variable in 'ConfigDefault.cmake'. set (HAVE_SVN_VERSION) if (NOT GMTSAR_SOURCE_CODE_CONTROL_VERSION_STRING) # Get the location, inside the staging area location, to copy the application bundle to. execute_process ( COMMAND svnversion ${GMTSAR_SOURCE_DIR} RESULT_VARIABLE SVN_VERSION_RESULT OUTPUT_VARIABLE SVN_VERSION_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE) if (SVN_VERSION_RESULT) message (STATUS "Unable to determine svn version number for non-public release - ignoring.") else (SVN_VERSION_RESULT) if (SVN_VERSION_OUTPUT MATCHES "Unversioned") message (STATUS "Unversioned source tree, non-public release.") else (SVN_VERSION_OUTPUT MATCHES "Unversioned") # The 'svnversion' command can output a range of revisions with a colon # separator - but this causes problems with filenames so we'll remove the # colon and the end revision after it. string (REGEX REPLACE ":.*$" "" SVN_VERSION ${SVN_VERSION_OUTPUT}) if (NOT SVN_VERSION STREQUAL exported) # Set the updated package version. set (GMTSAR_PACKAGE_VERSION_WITH_SVN_REVISION "${GMTSAR_PACKAGE_VERSION}_r${SVN_VERSION}") set (HAVE_SVN_VERSION TRUE) endif (NOT SVN_VERSION STREQUAL exported) endif (SVN_VERSION_OUTPUT MATCHES "Unversioned") endif (SVN_VERSION_RESULT) endif (NOT GMTSAR_SOURCE_CODE_CONTROL_VERSION_STRING) # The current GMTSAR version. set (GMTSAR_VERSION_STRING "${GMTSAR_PACKAGE_NAME} ${GMTSAR_PACKAGE_VERSION_WITH_SVN_REVISION}") set (GMTSAR_LONG_VERSION_STRING "${GMTSAR_PACKAGE_NAME} - ${GMTSAR_PACKAGE_DESCRIPTION_SUMMARY}, Version ${GMTSAR_PACKAGE_VERSION_WITH_SVN_REVISION}") # use, i.e. don't skip the full RPATH for the build tree set (CMAKE_SKIP_BUILD_RPATH FALSE) # when building, don't use the install RPATH already # (but later on when installing) set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) # set the RPATH to be used when installing if (NOT DEFINED GMTSAR_INSTALL_RELOCATABLE) set (GMTSAR_INSTALL_RELOCATABLE FALSE) endif (NOT DEFINED GMTSAR_INSTALL_RELOCATABLE) if (GMTSAR_INSTALL_RELOCATABLE) # make executables relocatable on supported platforms (relative RPATH) if (UNIX AND NOT CYGWIN) # find relative libdir from executable dir file (RELATIVE_PATH _rpath /${GMTSAR_BINDIR} /lib) # remove trailing / string (REGEX REPLACE "/$" "" _rpath "${_rpath}") if (APPLE) # relative RPATH on osx # CMP0042: CMake 3.0: MACOSX_RPATH is enabled by default set (CMAKE_MACOSX_RPATH ON) set (CMAKE_INSTALL_NAME_DIR @rpath) set (CMAKE_INSTALL_RPATH "@rpath;@executable_path/${_rpath}") else (APPLE) # relative RPATH on Linux, Solaris, etc. set (CMAKE_INSTALL_RPATH "\$ORIGIN/${_rpath}") endif (APPLE) endif (UNIX AND NOT CYGWIN) else (GMTSAR_INSTALL_RELOCATABLE) # set absolute RPATH if (APPLE) # CMP0042: CMake 3.0: MACOSX_RPATH is enabled by default set (CMAKE_MACOSX_RPATH OFF) set (CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib") else (APPLE) # the RPATH to be used when installing, but only if it's not a # system directory list (FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) if ("${isSystemDir}" STREQUAL "-1") set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") endif ("${isSystemDir}" STREQUAL "-1") endif (APPLE) endif (GMTSAR_INSTALL_RELOCATABLE) # add the automatically determined parts of the RPATH # which point to directories outside the build tree to the install RPATH set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # Make GNU and Intel C compiler default to C99 if (CMAKE_C_COMPILER_ID MATCHES "(GNU|Intel)" AND NOT CMAKE_C_FLAGS MATCHES "-std=") set (CMAKE_C_FLAGS "-std=gnu99 ${CMAKE_C_FLAGS}") endif () # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/.svn/pristine/3a/3adca06bbdd216ee02fb9ca620e5914316466ed8.svn-base000444 015705 000000 00000000637 13505462014 026013 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_pre_process_SLC CSRCS = ALOS_pre_process_SLC.c \ parse_ALOS_commands.c \ read_ALOS_data_SLC.c \ swap_ALOS_data_info.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/96/960ab21caa38d6166e511d8a9e35c034affb798c.svn-base000444 015705 000000 00000001172 13505462013 025674 0ustar00sandwellwheel000000 000000 5 5 2.2399159097414190e-02 1.2689093801639992e-01 2.2620224226027566e-01 1.2689093801639992e-01 2.2399159097414190e-02 6.8290302310343234e-02 3.8686365322452360e-01 6.8964283168179330e-01 3.8686365322452360e-01 6.8290302310343234e-02 9.9022710268455202e-02 5.6096233507002591e-01 1.0000000000000000e+00 5.6096233507002591e-01 9.9022710268455202e-02 6.8290302310343234e-02 3.8686365322452360e-01 6.8964283168179330e-01 3.8686365322452360e-01 6.8290302310343234e-02 2.2399159097414190e-02 1.2689093801639992e-01 2.2620224226027566e-01 1.2689093801639992e-01 2.2399159097414190e-02 GMTSAR_V5.7/.svn/pristine/62/62d8162110da0b899b1718627d2cb0d086c1846f.svn-base000444 015705 000000 00000006373 13505462013 025311 0ustar00sandwellwheel000000 000000 /* $Id: do_freq_xcorr.c 109 2015-01-19 23:01:24Z sandwell $ */ /*-------------------------------------------------------*/ #include "gmt.h" #include "gmtsar.h" #include "sarleader_fdr.h" #include "siocomplex.h" #include "xcorr.h" #include /*-------------------------------------------------------------------------------*/ void fft_multiply(void *API, int N, int M, struct FCOMPLEX *c1, struct FCOMPLEX *c2, struct FCOMPLEX *c3) { int i, j, isign; /* do forward fft */ GMT_FFT_2D(API, (float *)c1, N, M, GMT_FFT_FWD, GMT_FFT_COMPLEX); GMT_FFT_2D(API, (float *)c2, N, M, GMT_FFT_FWD, GMT_FFT_COMPLEX); /* multiply a with conj(b) */ /* the isign should shift the results appropriately */ /* normalize by absolute values */ for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { isign = (int)lrint(pow(-1.0, (double)(i + j))); c3[i * N + j] = RCmul(isign, Cmul((c1[i * N + j]), (Conjg(c2[i * N + j])))); /* if (norm_flag) { c3[i*N + j] = RCmul(1.0/Cabs(c3[i*N + j]),c3[i*N + j]); if isnan(c3[i*N + j].r) c3[i*N + j].r = 0.0; if isnan(c3[i*N + j].i) c3[i*N + j].i = 0.0; } */ } } /* inverse fft for cross-correlation (c matrix) */ GMT_FFT_2D(API, (float *)c3, N, M, GMT_FFT_INV, GMT_FFT_COMPLEX); } /*-------------------------------------------------------------------------------*/ void do_freq_corr(void *API, struct xcorr *xc, int iloc) { int i, j, ii; float ipeak, jpeak; double cmax, cave, max_corr; max_corr = -999.0; jpeak = ipeak = -999.0f; cmax = -1; cave = 0.0; /* d1, c1 is the master */ /* d2, c2 is the slave */ if (debug) print_complex(xc->c1, xc->npy, xc->npx, 1); if (debug) print_complex(xc->c2, xc->npy, xc->npx, 1); /* multiply c1 and c2 uisng fft */ fft_multiply(API, xc->npx, xc->npy, xc->c1, xc->c2, xc->c3); /* transfer results into correlation matrix */ for (i = 0; i < xc->nyc; i++) { for (j = 0; j < xc->nxc; j++) { ii = (i + xc->ny_corr / 2) * xc->npx + j + (xc->nx_corr / 2); xc->corr[i * xc->nxc + j] = Cabs(xc->c3[ii]); cave += xc->corr[i * xc->nxc + j]; if (xc->corr[i * xc->nxc + j] > cmax) { cmax = xc->corr[i * xc->nxc + j]; jpeak = j - xc->nxc / 2.0f; ipeak = i - xc->nyc / 2.0f; } } } if ((ipeak == -999.0) || (jpeak == -999.0)) { fprintf(stderr, "error! jpeak %f ipeak %f cmax %lf xc %f \n", jpeak, ipeak, cmax, xc->corr[100]); exit(1); } /* calculate normalized correlation at best point */ cave /= (xc->nxc * xc->nyc); /* estimate maximum correlation using frequency - poor */ max_corr = (cmax / cave); /* use normalized time correlation rather than frequency estimate for value */ if (ipeak != -999.0) max_corr = calc_time_corr(xc, (int)ipeak, (int)jpeak); /* put values into correlation matrix and scale to max correlation */ for (i = 0; i < xc->nxc * xc->nyc; i++) xc->corr[i] = max_corr * xc->corr[i] / cmax; if (debug) fprintf(stderr, " (freq) jpeak %f xoffset %d corr %4.2lf \n", jpeak, xc->x_offset, max_corr); if (debug) fprintf(stderr, " (freq) ipeak %f yoffset %d corr %4.2lf \n", ipeak, xc->y_offset, max_corr); xc->loc[iloc].xoff = -1 * jpeak; xc->loc[iloc].yoff = -1 * ipeak; xc->loc[iloc].corr = (float)max_corr; } GMTSAR_V5.7/.svn/pristine/65/6521a0282d7ce731fe26e7defe327a16d38239ce.svn-base000444 015705 000000 00000004431 13505462014 025620 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" /* this swaps bytes */ #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) /*------------------------------------------------------------------*/ /* need to swap bytes for all */ /* must be a better way to do this */ void swap_ALOS_data_info(struct sardata_info *sdr) { FIX_SHORT(sdr->channel_indicator); FIX_SHORT(sdr->channel_code); FIX_SHORT(sdr->transmit_polarization); FIX_SHORT(sdr->receive_polarization); FIX_SHORT(sdr->onboard_range_compress); FIX_SHORT(sdr->chirp_type); FIX_SHORT(sdr->nought_line_flag); FIX_SHORT(sdr->platform_update_flag); FIX_INT(sdr->sequence_number); FIX_INT(sdr->record_length); FIX_INT(sdr->data_line_number); FIX_INT(sdr->data_record_index); FIX_INT(sdr->n_left_fill_pixels); FIX_INT(sdr->n_data_pixels); FIX_INT(sdr->n_right_fill_pixels); FIX_INT(sdr->sensor_update_flag); FIX_INT(sdr->sensor_acquisition_year); FIX_INT(sdr->sensor_acquisition_DOY); FIX_INT(sdr->sensor_acquisition_msecs_day); FIX_INT(sdr->PRF); FIX_INT(sdr->scan_ID); FIX_INT(sdr->chirp_length); FIX_INT(sdr->chirp_constant_coeff); FIX_INT(sdr->chirp_linear_coeff); FIX_INT(sdr->chirp_quad_coeff); FIX_INT(sdr->receiver_gain); FIX_INT(sdr->elec_antenna_squint_angle); FIX_INT(sdr->mech_antenna_squint_angle); FIX_INT(sdr->slant_range); FIX_INT(sdr->data_record_window_position); FIX_INT(sdr->platform_latitude); FIX_INT(sdr->platform_longitude); FIX_INT(sdr->platform_altitude); FIX_INT(sdr->platform_ground_speed); FIX_INT(sdr->platform_velocity_x); FIX_INT(sdr->platform_velocity_y); FIX_INT(sdr->platform_velocity_z); FIX_INT(sdr->platform_acc_x); FIX_INT(sdr->platform_acc_y); FIX_INT(sdr->platform_acc_z); FIX_INT(sdr->platform_track_angle_1); FIX_INT(sdr->platform_track_angle_2); FIX_INT(sdr->platform_pitch_angle); FIX_INT(sdr->platform_roll_angle); FIX_INT(sdr->platform_yaw_angle); if (ALOS_format == 0) FIX_INT(sdr->frame_counter); } /*------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/65/65eb93a9c5dbf081432486721386daf93f4820d6.svn-base000444 015705 000000 00000003513 13505462013 025412 0ustar00sandwellwheel000000 000000 /* adapted from Remko Scharroo's geoxyz/geocen/polcar */ /* This subroutine converts geodetic latitude, longitude and height above the */ /* GRS80 reference ellipsoid to Earth Centered Fixed coordinates X, Y and Z. */ /* */ /* LAT (input) : Geodetic latitude (rad). */ /* LON (input) : Geodetic longitude (rad). */ /* HEIGHT (input) : Height above the reference ellipsoid (m). */ /* XYZ(3) (output) : Earth Centered Fixed coordinates X, Y, and Z (m). */ /* R (output) : Distance to geocenter (m). */ #include "lib_functions.h" #include "sfd_complex.h" #include #include double AE, FLAT, OMFSQ, AP, GM, AM, FFACT, AMSQ; /*------------------------------------------------------------------------------*/ void geocen(double lat, double height, double *latc, double *r) { double rs, lats; lats = atan(OMFSQ * tan(lat)); rs = AP / sqrt(1.0 + FFACT * cos(lats) * cos(lats)); *r = sqrt(height * height + rs * rs + 2 * height * rs * cos(lat - lats)); *latc = lats + asin(height * (sin(lat - lats)) / (*r)); } /*------------------------------------------------------------------------------*/ void polcar(double lat, double lon, double *r, double *xyz) { xyz[0] = *r * cos(lat) * cos(lon); xyz[1] = *r * cos(lat) * sin(lon); xyz[2] = *r * sin(lat); } /*------------------------------------------------------------------------------*/ void geoxyz(double lat, double lon, double height, double *xyz, double *r) { double latc; /* from GRS80.inc */ /* set parameters for GRS80 */ AE = 6378137.0; FLAT = 1.0 / 298.257; GM = 398600.436; OMFSQ = (1.0 - FLAT) * (1.0 - FLAT); AP = AE * (1.0 - FLAT); FFACT = OMFSQ - 1.0; AM = AE * (1.0 - FLAT / 3.0 - FLAT * FLAT / 5.0); AMSQ = AM * AM; geocen(lat, height, &latc, r); polcar(latc, lon, r, xyz); } GMTSAR_V5.7/.svn/pristine/65/65f237e66a59528cde009e05cc9e2975c9eb5be9.svn-base000444 015705 000000 00000006005 13505462013 025647 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # D. Sandwell DEC 10 2007 # # compute 2-6 alignment parameters from xcorr.dat # alias rm 'rm -f' unset noclobber # # check for number of arguments # if ($#argv == 0) then echo " " echo "Usage: fitoffset.csh npar_rng npar_azi xcorr.dat [SNR]" echo " " echo " npar_rng - number of parameters to fit in range " echo " npar_aiz - number of parameters to fit in azimuth " echo " xcorr.dat - files of range and azimuth offset estimates " echo " SNR - optional SNR cutoff (default 20)" echo " " echo "Example: fitoffset.csh 3 3 freq_xcorr.dat " echo " " exit 1 endif # if ($#argv == 4) then set SNR = $4 else set SNR = 20. endif endif # # first extract the range and azimuth data # awk '{ if ($5 > '$SNR') printf("%f %f %f \n",$1,$3,$2); }' < $3 > r.xyz awk '{ if ($5 > '$SNR') printf("%f %f %f \n",$1,$3,$4); }' < $3 > a.xyz # # make sure there are enough points remaining, otherwise exit # set NPTS0 = ` wc -l $3 | awk '{print $1}'` set NPTS = ` wc -l r.xyz | awk '{print $1}'` if($NPTS < 8) then echo " " echo " FAILED - not enough points to estimate parameters" echo " try lower SNR " echo " NPTS0, NPTS " $NPTS0 $NPTS echo " " exit 1 endif # # compute requested number of parameters # set azi_p = $2 set rng_p = $1 ( gmt trend2d r.xyz -Fxyz -N"$rng_p"r -V > /dev/null ) |& grep oefficients | awk -F":" '{print $NF, 0, 0, 0'} > rm.coef ( gmt trend2d a.xyz -Fxyz -N"$azi_p"r -V > /dev/null ) |& grep oefficients | awk -F":" '{print $NF, 0 ,0, 0'} > am.coef awk '{print $1, $2, $3}' < rm.coef > tmp.coef mv tmp.coef rm.coef awk '{print $1, $2, $3}' < am.coef > tmp.coef mv tmp.coef am.coef rm tmp.coef # # get the data range and paste to the coeffifients # gmt gmtinfo r.xyz -C | awk '{print $1, $2, $3, $4 }' > range.coef paste rm.coef range.coef > rm.rng paste am.coef range.coef > am.rng rm r.xyz a.xyz am.coef rm.coef range.coef # # now convert to range coefficients # awk '{print ( $1 - $2*($5+$4)/($5-$4) -$3*($7+$6)/($7-$6) ) }' < rm.rng > rshift awk '{if($1 >= 0) {printf("%s %g \n","rshift = ",int($1)); printf("%s %g \n","sub_int_r = ",($1 %1))}}' < rshift awk '{if($1 < 0) {printf("%s %g \n","rshift = ",int($1)-1); printf("%s %g \n","sub_int_r = ",($1 %1)+1)}}' < rshift awk '{printf ("%s %g \n","stretch_r = ",$2*2./($5-$4))}' < rm.rng awk '{printf ("%s %g \n","a_stretch_r = ",$3*2./($7-$6))}' < rm.rng # # now convert to azimuth coefficients # awk '{print ( $1 - $2*($5+$4)/($5-$4) -$3*($7+$6)/($7-$6) ) }' < am.rng > ashift awk '{if($1 >= 0) {printf("%s %g \n","ashift = ",int($1)); printf("%s %g \n","sub_int_a = ",($1 %1))}}' < ashift awk '{if($1 < 0) {printf("%s %g \n","ashift = ",int($1)-1); printf("%s %g \n","sub_int_a = ",($1 %1)+1)}}' < ashift awk '{printf ("%s %g \n","stretch_a = ",$2*2./($5-$4))}' < am.rng awk '{printf ("%s %g \n","a_stretch_a = ",$3*2./($7-$6))}' < am.rng # # cleanup # rm rshift ashift rm.rng am.rng # # OK we are done # # echo " NPTS0, NPTS " $NPTS0 $NPTS GMTSAR_V5.7/.svn/pristine/91/91dc2ac745a07b048b3cffbf2e39644dc03749cc.svn-base000444 015705 000000 00000052416 13505462014 025756 0ustar00sandwellwheel000000 000000 /* * $Id: epr_dsd.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" /** * Opens dsd for a dataset description, * obtained from an ENVISAT product file. * * @param dsd_index the number of dsd (zero-based), emrty dsd inclusive * * @return the the pointer at the dsd information. */ EPR_SDSD* epr_create_dsd(int dsd_index) { EPR_SDSD* dsd; dsd = (EPR_SDSD*) calloc(1, sizeof (EPR_SDSD)); if (dsd == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_dsd: out of memory"); return NULL; } dsd->index = dsd_index; return dsd; } uint epr_get_num_datasets(EPR_SProductId* product_id) { epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_num_datasets: product_id must not be NULL"); return (uint)-1; } return product_id->dataset_ids->length; } EPR_SDatasetId* epr_get_dataset_id_at(EPR_SProductId* product_id, uint index) { EPR_SDatasetId* dataset_id = NULL; epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_dataset_id_at: product_id must not be NULL"); return NULL; } if (index >= product_id->dataset_ids->length){ epr_set_err(e_err_index_out_of_range, "epr_get_dataset_id_at: dataset index out of range"); return NULL; } dataset_id = (EPR_SDatasetId*)epr_get_ptr_array_elem_at(product_id->dataset_ids, index); return dataset_id; } EPR_SDatasetId* epr_get_dataset_id(EPR_SProductId* product_id, const char* dataset_name) { EPR_SDatasetId* dataset_id = NULL; int datasets_num, i; epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_dataset_id: product_id must not be NULL"); return NULL; } if (dataset_name == NULL) { epr_set_err(e_err_null_pointer, "epr_get_dataset_id: dataset_name must not be NULL"); return NULL; } datasets_num = epr_get_num_datasets(product_id); for (i = 0; i < datasets_num; i ++) { dataset_id = epr_get_dataset_id_at(product_id, i); if (epr_equal_names(dataset_name, epr_get_dataset_name(dataset_id))) return dataset_id; } epr_set_err(e_err_invalid_band_name, "epr_get_dataset_id: dataset_id not found"); return NULL; } int epr_detect_meris_iodd_version(EPR_SProductId* product_id) { EPR_SDSD** elems; int size = 0; int rec_size = 0; int i, ioddFormat = 7; char* name; /* reflect L1b product format change from IODD5 to IODD6 */ if (strncmp("MER_RR__1P", product_id->id_string, 10) == 0 || strncmp("MER_FR__1P", product_id->id_string, 10) == 0) { elems = (EPR_SDSD**)product_id->dsd_array->elems; size = product_id->dsd_array->length; for (i=0; i< size;i++){ name = elems[i]->ds_name; if (strcmp("Flags MDS(16)", name) == 0) { rec_size = elems[i]->dsr_size; if (rec_size == 2255 || rec_size == 4495) { ioddFormat = 5; } break; } } } /* reflect L2 product format change from IODD6 to IODD7 */ else if (strncmp("MER_RR__2P", product_id->id_string, 10) == 0 || strncmp("MER_FR__2P", product_id->id_string, 10) == 0) { elems = (EPR_SDSD**)product_id->dsd_array->elems; size = product_id->dsd_array->length; for (i=0; ids_name; if (strcmp("Epsilon, OPT - MDS(19)", name) == 0) { ioddFormat = 6; break; } } } return ioddFormat; } /** * Release the memory allocated through a dataset ID. * * @param dsd the dataset description identifier, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise */ void epr_free_dsd(EPR_SDSD* dsd) { if (dsd == NULL) return; epr_free_string(dsd->ds_name); dsd->ds_name = NULL; epr_free_string(dsd->ds_type); dsd->ds_type = NULL; epr_free_string(dsd->filename); dsd->filename = NULL; dsd->index = 0; dsd->ds_offset = 0; dsd->ds_size = 0; dsd->num_dsr = 0; dsd->dsr_size = 0; free(dsd); } #define EPR_LENGTH_DS_NAME_IDENTIFIER 9 #define EPR_LENGTH_DS_TYPE_IDENTIFIER 8 #define EPR_LENGTH_FILENAME_IDENTIFIER 10 #define EPR_LENGTH_DS_OFFSEN_IDENTIFIER 11 #define EPR_LENGTH_DS_SIZE_IDENTIFIER 9 #define EPR_LENGTH_NUM_DSR_IDENTIFIER 9 #define EPR_LENGTH_DSR_SIZE_IDENTIFIER 10 #define EPR_LENGTH_DS_NAME_FIELD 39 #define EPR_LENGTH_DS_TYPE_FIELD 10 #define EPR_LENGTH_DS_FILENAME_FIELD 74 #define EPR_LENGTH_DS_OFFSEN_FIELD 39 #define EPR_LENGTH_DS_SIZE_FIELD 37 #define EPR_LENGTH_NUM_DSR_FIELD 20 #define EPR_LENGTH_DSR_SIZE_FIELD 28 #define EPR_LENGTH_EMPTY_FIELD 33 /** * Reads a dataset description from an ENVISAT product file. * * @param envisat_source_file the handle of the given ENVISAT product file, * must not be NULL * @param pos number of the dataset description in ENVISAT product file, * @return a new dataset description or NULL if an error occured. */ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos) { uint l; uint l_limit; char code_block[EPR_LINE_MAX_LENGTH]; EPR_SDSD* dsd; int ch = '"'; char* tmp; if (envisat_source_file == NULL) { epr_set_err(e_err_file_access_denied, "epr_read_each_dsd: the product file handle must not be NULL"); return NULL; } dsd = (EPR_SDSD*) calloc(1, sizeof (EPR_SDSD)); if (dsd == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_each_dsd: out of memory"); return NULL; } if (* pos == 0) { l_limit = 9999; } else l_limit = 0; for (l = 0; l <= l_limit; l++) { fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DS_NAME=\"", EPR_LENGTH_DS_NAME_IDENTIFIER) == 0) { /* DS_NAME to be searched for */ if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_NAME_FIELD)) || ((uint)(strrchr(code_block, ch) - code_block) != (uint)(strlen(code_block) - 2))) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset name format"); epr_free_dsd(dsd); return NULL; } dsd->ds_name = epr_sub_string(code_block, EPR_LENGTH_DS_NAME_IDENTIFIER, strlen(code_block) - EPR_LENGTH_DS_NAME_IDENTIFIER - 2); if (dsd->ds_name == NULL) { epr_set_err(e_err_invalid_value, "epr_read_each_dsd: invalid DS_NAME value"); epr_free_dsd(dsd); return NULL; } /* DS_TYPE to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DS_TYPE=", EPR_LENGTH_DS_TYPE_IDENTIFIER) == 0) { dsd->ds_type = epr_sub_string(code_block, EPR_LENGTH_DS_TYPE_IDENTIFIER, strlen(code_block) - EPR_LENGTH_DS_TYPE_IDENTIFIER - 1); if (dsd->ds_type == NULL) { epr_set_err(e_err_invalid_value, "epr_read_each_dsd: invalid DS_TYPE value"); epr_free_dsd(dsd); return NULL; } } /* FILENAME to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "FILENAME=\"", EPR_LENGTH_FILENAME_IDENTIFIER) == 0) { if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_FILENAME_FIELD)) || ((uint)(strrchr(code_block, ch) - code_block) != (uint)(strlen(code_block) - 2))) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset filename format"); epr_free_dsd(dsd); return NULL; } dsd->filename = epr_sub_string(code_block, EPR_LENGTH_FILENAME_IDENTIFIER, strlen(code_block) - EPR_LENGTH_FILENAME_IDENTIFIER - 1); if (dsd->ds_name == NULL) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid file name"); epr_free_dsd(dsd); return NULL; } } /* DS_OFFSET to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DS_OFFSET=+", EPR_LENGTH_DS_OFFSEN_IDENTIFIER) == 0) { if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_OFFSEN_FIELD)) || (strncmp(code_block + strlen(code_block) - strlen("") - 1, "", strlen("")) != 0)) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset filename format"); epr_free_dsd(dsd); return NULL; } tmp = epr_sub_string(code_block, EPR_LENGTH_DS_OFFSEN_IDENTIFIER, strlen(code_block) - strlen("") - EPR_LENGTH_DS_OFFSEN_IDENTIFIER - 1); dsd->ds_offset = (uint)epr_str_to_number(tmp); epr_free_string(tmp); if (dsd->ds_offset == -1) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid OFFSET value"); epr_free_dsd(dsd); return NULL; } } /* DS_SIZE to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DS_SIZE=+", EPR_LENGTH_DS_SIZE_IDENTIFIER) == 0) { if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DS_SIZE_FIELD)) || (strncmp(code_block + strlen(code_block) - strlen("") - 1, "", strlen("")) != 0)) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset filename format"); epr_free_dsd(dsd); return NULL; } tmp = epr_sub_string(code_block, EPR_LENGTH_DS_SIZE_IDENTIFIER, strlen(code_block) - strlen("") - EPR_LENGTH_DS_SIZE_IDENTIFIER - 1); dsd->ds_size = (uint)epr_str_to_number(tmp); epr_free_string(tmp); if (dsd->ds_size == -1) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid OFFSET value"); epr_free_dsd(dsd); return NULL; } } /* NUM_DSR to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "NUM_DSR=+", EPR_LENGTH_NUM_DSR_IDENTIFIER) == 0) { if ((uint)strlen(code_block) != (uint)(EPR_LENGTH_NUM_DSR_FIELD)) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset record number format"); epr_free_dsd(dsd); return NULL; } tmp = epr_sub_string(code_block, EPR_LENGTH_NUM_DSR_IDENTIFIER, strlen(code_block) - EPR_LENGTH_NUM_DSR_IDENTIFIER - 1); dsd->num_dsr = (uint)epr_str_to_number(tmp); epr_free_string(tmp); if (dsd->num_dsr == -1) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dsr number value"); epr_free_dsd(dsd); return NULL; } } /* DSR_SIZE to be searched for */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DSR_SIZE=+", EPR_LENGTH_DSR_SIZE_IDENTIFIER) == 0) { if (((uint)strlen(code_block) != (uint)(EPR_LENGTH_DSR_SIZE_FIELD)) || (strncmp(code_block + strlen(code_block) - strlen("") - 1, "", strlen("")) != 0)) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid dataset record size format"); epr_free_dsd(dsd); return NULL; } tmp = epr_sub_string(code_block, EPR_LENGTH_DSR_SIZE_IDENTIFIER, strlen(code_block) - strlen("") - EPR_LENGTH_DSR_SIZE_IDENTIFIER - 1); dsd->dsr_size = (uint)epr_str_to_number(tmp); epr_free_string(tmp); if (dsd->dsr_size == -1) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid record size value"); epr_free_dsd(dsd); return NULL; } } /* EMPTY LINE BETWEEN DSD's */ fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if ((strlen(code_block) > 0) && (code_block[0] != ' ')) { epr_set_err(e_err_invalid_data_format, "epr_read_each_dsd: invalid code_block, must be empty"); epr_free_dsd(dsd); return NULL; } *pos = *pos + 1; return dsd; } } epr_free_dsd(dsd); return NULL; } /** * Finds the first dataset description from an ENVISAT product file. * * @param envisat_source_file the handle of the given ENVISAT product file, * must not be NULL * @param sph_length [bytes] the length of SPH part from the given ENVISAT product file, * must not be NULL * @return the offset to first searched for dsd or 0 if not found. */ uint epr_find_first_dsd(FILE* envisat_source_file, uint sph_length) { uint l; char code_block[EPR_LINE_MAX_LENGTH]; if (envisat_source_file == NULL) { epr_set_err(e_err_file_access_denied, "epr_find_first_dsd: the product file handle must not be NULL"); return 0; } l = 0; while (l < sph_length) { fgets(code_block, EPR_LINE_MAX_LENGTH, envisat_source_file); if (strncmp (code_block, "DS_NAME=\"", EPR_LENGTH_DS_NAME_IDENTIFIER) == 0) { return l; } else { l += strlen(code_block); } } return 0; } #define EPR_LENGTH_NUM_DSD_FIELD 20 /** * Reads all dataset descriptions from an ENVISAT product file. * * @param product_id the file identifier, if NULL the function * immediately returns NULL. * @return an array of dataset descriptions or NULL if an error occured. */ EPR_SPtrArray* epr_read_all_dsds(EPR_SProductId* product_id) { EPR_SPtrArray* dsds_array = NULL; EPR_SRecord* dsd_record = NULL; const EPR_SField* field; EPR_SDSD* dsd; uint sph_length; char* code_block; int numread; uint dsd_number = 0; uint dsd_begin = 0; uint dsd_index; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_read_all_dsds: product_id must not be NULL"); return NULL; } dsds_array = epr_create_ptr_array(32); field = epr_get_field(product_id->mph_record, "NUM_DSD"); dsd_number = ((uint*) field->elems)[0]; /*dsd_begin = epr_api.epr_head_size - dsd_number * EPR_DSD_SIZE;*/ if (fseek(product_id->istream, EPR_MPH_SIZE, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_read_all_dsds: file seek failed"); if (dsds_array != NULL) { epr_free_ptr_array(dsds_array); } return NULL; } field = epr_get_field(product_id->mph_record, "SPH_SIZE"); sph_length = ((uint*) field->elems)[0]; dsd_begin = EPR_MPH_SIZE + (uint)epr_find_first_dsd(product_id->istream, sph_length); if (dsd_begin == EPR_MPH_SIZE) { epr_set_err(e_err_file_access_denied, "epr_read_all_dsds: no DS_NAME in SPH"); if (dsds_array != NULL) { epr_free_ptr_array(dsds_array); } return NULL; } for(dsd_index = 0; dsd_index < dsd_number; dsd_index ++) { if (fseek(product_id->istream, dsd_begin + dsd_index * EPR_DSD_SIZE, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_read_all_dsds: file seek failed"); if (dsds_array != NULL) { epr_free_ptr_array(dsds_array); } return NULL; } code_block = epr_create_string(EPR_DSD_SIZE); numread = fread(code_block, 1, EPR_DSD_SIZE, product_id->istream); if ((uint)numread != EPR_DSD_SIZE) { epr_set_err(e_err_file_read_error, "epr_read_all_dsds: error in reading SPH from product data file"); if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } if (dsds_array != NULL) { epr_free_ptr_array(dsds_array); } return NULL; } /* If this is NOT an empty DSD (empty DSD's seem to be quite 'normal') */ if ((strlen(code_block) > 0) && (code_block[0] != ' ')) { dsd_record = epr_parse_header("dsd", code_block); dsd = epr_create_dsd(dsd_index); if (dsd == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_all_dsds: out of memory"); if (code_block != NULL) { epr_free_string(code_block); code_block = NULL; } if (dsd_record != NULL) { epr_free_record_info(dsd_record->info); dsd_record->info = NULL; epr_free_record(dsd_record); dsd_record = NULL; } if (dsds_array != NULL) { epr_free_ptr_array(dsds_array); } return NULL; } field = epr_get_field(dsd_record, "DS_NAME"); dsd->ds_name = epr_clone_string((char*)field->elems); field = epr_get_field(dsd_record, "DS_TYPE"); dsd->ds_type = epr_sub_string((char*)field->elems, 0, sizeof(uchar)); field = epr_get_field(dsd_record, "FILENAME"); dsd->filename = epr_clone_string((char*)field->elems); field = epr_get_field(dsd_record, "DS_OFFSET"); dsd->ds_offset = (uint)((uint*) field->elems)[0]; field = epr_get_field(dsd_record, "DS_SIZE"); dsd->ds_size = (uint)((uint*) field->elems)[0]; field = epr_get_field(dsd_record, "NUM_DSR"); dsd->num_dsr = (uint)((uint*) field->elems)[0]; field = epr_get_field(dsd_record, "DSR_SIZE"); dsd->dsr_size = (uint)((uint*) field->elems)[0]; epr_add_ptr_array_elem(dsds_array, dsd); if (dsd_record != NULL) { /* NOTE:dsd_record->info is not a shared object, it is NOT used by * multiple instances of a DSD record, and thus, we free it here! */ epr_free_record_info(dsd_record->info); dsd_record->info = NULL; epr_free_record(dsd_record); dsd_record = NULL; } else { printf("%s\n", epr_get_last_err_message()); } } else { epr_log(e_log_debug, "empty DSD seen (don't worry)"); } epr_free_string(code_block); code_block = NULL; } rewind(product_id->istream); return dsds_array; } uint epr_get_num_dsds(const EPR_SProductId* product_id) { return product_id->dsd_array->length; } EPR_SDSD* epr_get_dsd_at(const EPR_SProductId* product_id, uint dsd_index) { EPR_SDSD* dsd = NULL; dsd = (EPR_SDSD*) epr_get_ptr_array_elem_at(product_id->dsd_array, dsd_index); return dsd; } GMTSAR_V5.7/.svn/pristine/91/91b66cf70978a0ca2f2f5491028ccfffaf29e9eb.svn-base000444 015705 000000 00000071534 13505462014 026063 0ustar00sandwellwheel000000 000000 /* * $Id: epr_bitmask.c,v 1.2 2004-10-28 20:10:57 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" void epr_resolve_bm_ref(EPR_SBmEvalContext* context, EPR_SBmTerm* term); EPR_SBmEvalContext* epr_create_bm_eval_context(EPR_SProductId* product_id, int offset_x, int offset_y, EPR_SRaster* bitmask_raster) { EPR_SBmEvalContext* context; context = (EPR_SBmEvalContext*) calloc(1, sizeof (EPR_SBmEvalContext)); if (context == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_bm_eval_context: out of memory"); return NULL; } context->product_id = product_id; context->offset_x = offset_x; context->offset_y = offset_y; context->bitmask_raster = bitmask_raster; context->flag_band_ids = epr_create_ptr_array(4); context->flag_rasters = epr_create_ptr_array(4); return context; } void epr_free_bm_eval_context(EPR_SBmEvalContext* context) { EPR_SRaster* flag_raster; uint flag_index; if (context == NULL) { return; } if (context->flag_band_ids != NULL) { for (flag_index = 0; flag_index < context->flag_band_ids->length; flag_index++) { /* * Note that the release of band ID's is handled by the epr_close_product() function, * The rasters need to be released, because they are internally used by this * context. */ flag_raster = (EPR_SRaster*)context->flag_rasters->elems[flag_index]; epr_free_raster(flag_raster); } epr_free_ptr_array(context->flag_band_ids); epr_free_ptr_array(context->flag_rasters); } free(context); } /** * Reads bit-mask pixels of the given product for the given bit-mask expression * for the given region offset and raster. * * @param product_id the product ID * @param bm_expr the bit-mask expression * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right raster corner to be searched for * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right raster corner to be searched for * @param raster the instance to the buffer information was used * * @return zero for success, an error code otherwise */ int epr_read_bitmask_raster(EPR_SProductId* product_id, const char* bm_expr, int offset_x, int offset_y, EPR_SRaster* bm_raster) { EPR_SBmEvalContext* context; EPR_SBmTerm* term; uint x, y; uint pos; uchar* bm_buffer = NULL; EPR_EErrCode errcode; epr_clear_err(); if (bm_raster->data_type != e_tid_uchar && bm_raster->data_type != e_tid_char) { epr_set_err(e_err_illegal_data_type, "epr_read_bitmask_raster: illegal raster datatype; must be 'char' or 'uchar'"); return e_err_illegal_data_type; } bm_buffer = (uchar*) bm_raster->buffer; if (bm_buffer == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_bitmask_raster: false memory allocation for a raster buffer"); return e_err_out_of_memory; } context = epr_create_bm_eval_context(product_id, offset_x, offset_y, bm_raster); if (context == NULL) { epr_set_err(e_err_illegal_arg, "epr_read_bitmask_raster: the context cannot be created"); return e_err_illegal_arg; } term = epr_parse_bm_expr_str(bm_expr); if (term == NULL) { epr_set_err(e_err_illegal_arg, "epr_read_bitmask_raster: the term was not build"); return e_err_illegal_arg; } pos = 0; epr_clear_err(); errcode = epr_get_last_err_code(); for (y = 0; y < bm_raster->raster_height; y++) { for (x = 0; x < bm_raster->raster_width; x++) { bm_buffer[pos] = (uchar) epr_eval_bm_term(context, term, x, y); pos++; errcode = epr_get_last_err_code(); if (errcode != 0) { break; } } if (errcode != 0) { break; } } epr_free_bm_term(term); epr_free_bm_eval_context(context); return errcode; } /** * Evaluates the given bitmask expression. * * @param term the bitmask term * @param x the pixel's x co-ordinate * @param y the pixel's y co-ordinate */ epr_boolean epr_eval_bm_term(EPR_SBmEvalContext* context, EPR_SBmTerm* term, int x, int y) { uint temp; uint eval; if (term == NULL) { return FALSE; } switch (term->op_code) { case BMT_REF: { EPR_SRaster* flag_raster = term->op.ref.flag_raster; uint flag_mask = term->op.ref.flag_mask; if (flag_raster == NULL) { epr_resolve_bm_ref(context, term); flag_raster = term->op.ref.flag_raster; flag_mask = term->op.ref.flag_mask; if (flag_raster == NULL) { return FALSE; } } assert(flag_raster != NULL); assert(flag_mask != FLAG_MASK_NOT_COMPUTED); temp = epr_get_pixel_as_uint(flag_raster, x, y); eval = temp & flag_mask; return (eval) == flag_mask; } case BMT_AND: { if (!epr_eval_bm_term(context, term->op.binary.arg1, x, y)) { return FALSE; } return epr_eval_bm_term(context, term->op.binary.arg2, x, y); } case BMT_OR: { if (epr_eval_bm_term(context, term->op.binary.arg1, x, y)) { return TRUE; } return epr_eval_bm_term(context, term->op.binary.arg2, x, y); } case BMT_NOT: { return !epr_eval_bm_term(context, term->op.unary.arg, x, y); } default: assert(0); return FALSE; } } void epr_resolve_bm_ref(EPR_SBmEvalContext* context, EPR_SBmTerm* term) { const char* band_name = term->op.ref.band_name; const char* flag_name = term->op.ref.flag_name; EPR_SBandId* flag_band_id = NULL; uint flag_band_index = (uint) -1; uint band_index = 0; uint num_bands = context->flag_band_ids->length; EPR_SRaster* flag_raster = NULL; uint flag_mask = 0; uint flag_computed = 0; /* Find the corresponding flag_band_id for band_name */ for (band_index = 0; band_index < num_bands; band_index++) { flag_band_id = (EPR_SBandId*) context->flag_band_ids->elems[band_index]; if (epr_equal_names(band_name, flag_band_id->band_name)) { flag_band_index = band_index; break; } } /* flag_band_id found? */ if (flag_band_index != (uint) -1) { /* Yes, found: get flag_band_id and the corresponding raster */ flag_band_id = (EPR_SBandId*)(context->flag_band_ids->elems[flag_band_index]); flag_raster = (EPR_SRaster*)(context->flag_rasters->elems[flag_band_index]); } else { /* Not found: get flag_band_id from product and load the corresponding raster */ flag_band_id = epr_get_band_id(context->product_id, band_name); if (flag_band_id != NULL) { flag_raster = epr_create_compatible_raster(flag_band_id, context->bitmask_raster->source_width, context->bitmask_raster->source_height, context->bitmask_raster->source_step_x, context->bitmask_raster->source_step_y); epr_read_band_raster(flag_band_id, context->offset_x, context->offset_y, flag_raster); /* register flag_band_id and flag_raster for later use */ epr_add_ptr_array_elem(context->flag_band_ids, flag_band_id); epr_add_ptr_array_elem(context->flag_rasters, flag_raster); } else { epr_set_err(e_err_flag_not_found, "flags band not found"); return; } } /* Now, compute flag_mask */ /* Does the band have a flag coding? */ if (flag_band_id->flag_coding != NULL) { /* Yes, now find flag definition for flag_name */ EPR_SFlagDef* flag_def = NULL; uint flag_def_index; for (flag_def_index = 0; flag_def_index < flag_band_id->flag_coding->length; flag_def_index++) { flag_def = (EPR_SFlagDef*) flag_band_id->flag_coding->elems[flag_def_index]; if (epr_equal_names(flag_def->name, flag_name)) { flag_computed = 1; flag_mask |= flag_def->bit_mask; /* TODO!!! */ break; } } } if (flag_computed == 0) { flag_mask = FLAG_MASK_NOT_COMPUTED; epr_set_err(e_err_flag_not_found, "flag not found"); } term->op.ref.flag_mask = flag_mask; term->op.ref.flag_raster = flag_raster; } /** * Parses the bit-mask expression given as character string. * * @param bm_expr the bit-mask expression given as character string * @return the bit-mask term tree representing the bit-mask expression * @throws BitmaskExpressionParseException if the given code could not be epr_parse'd * @throws IOException if an I/O error occurs */ EPR_SBmTerm* epr_parse_bm_expr_str(const char* bm_expr) { EPR_SBmTerm* term; EPR_SParseInfo parse_info; parse_info.bm_expr = bm_expr; parse_info.bm_expr_pos = 0; parse_info.pushed_back = FALSE; parse_info.token = NULL; parse_info.err_message = NULL; term = epr_parse_bm_expr(&parse_info, FALSE); epr_free_string(parse_info.token); parse_info.token = NULL; if (epr_is_bm_expr_error(&parse_info)) { char tmp[256] = {"bitmap-expression error: "}; strcat(tmp, parse_info.err_message); epr_set_err(e_err_invalid_value, tmp); } return term; } EPR_SPtrArray* epr_create_flag_coding(EPR_SProductId* product_id, const char* flag_coding_name) { int num_descr; int i, j; const struct FlagDescriptorTable* fc_tables; int fct_index; EPR_SPtrArray* flag_coding = NULL; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_create_flag_coding: product_id must not be NULL"); return NULL; } /* @DDDB */ fc_tables = dddb_flag_coding_tables; fct_index = -1; for (i = 0; i < EPR_NUM_FLAG_CODING_TABLES; i++) { const char* id = fc_tables[i].name; if (epr_equal_names(id, flag_coding_name)) { fct_index = i; break; } } if (fct_index == -1) { epr_set_err(e_err_null_pointer, "epr_create_flag_coding: unknown flag coding"); return NULL; } flag_coding = epr_create_ptr_array(16); num_descr = fc_tables[fct_index].num_descriptors; for (i = 0; i < num_descr; i++) { EPR_SFlagDef* flag_def = (EPR_SFlagDef*) calloc(1, sizeof (EPR_SFlagDef)); if (flag_def == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_flag_coding: out of memory"); return NULL; } /* 1: flag_name */ epr_assign_string(&flag_def->name, fc_tables[fct_index].descriptors[i].id); if (flag_def->name == NULL) { epr_set_err(e_err_out_of_memory, "epr_get_flag_coding: out of memory"); epr_free_flag_def(flag_def); return NULL; } /* 2: dataset_name */ /* flag_def->bit_index = (uint)fc_tables[fct_index].descriptors[i].bit_index; */ flag_def->bit_mask = 0; for (j = 0; j < fc_tables[fct_index].descriptors[i].num_indices; j++) { flag_def->bit_mask |= (1 << fc_tables[fct_index].descriptors[i].bit_indices[j]); } /* 3: sample_offset */ epr_assign_string(&flag_def->description, fc_tables[fct_index].descriptors[i].description); epr_add_ptr_array_elem(flag_coding, flag_def); } return flag_coding; } void epr_free_flag_coding(EPR_SPtrArray* flag_coding) { EPR_SFlagDef* flag_def = NULL; uint flag_index; if (flag_coding == NULL) { return; } for (flag_index = 0; flag_index < flag_coding->length; flag_index++) { flag_def = (EPR_SFlagDef*) flag_coding->elems[flag_index]; epr_free_flag_def(flag_def); flag_def = NULL; } epr_free_ptr_array(flag_coding); } EPR_SFlagDef* epr_create_flag_def() { EPR_SFlagDef* flag_def = NULL; flag_def = (EPR_SFlagDef*) calloc(1, sizeof (EPR_SFlagDef)); if (flag_def == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_flag_def: out of memory"); return NULL; } flag_def->magic = EPR_MAGIC_FLAG_DEF; return flag_def; } void epr_free_flag_def(EPR_SFlagDef* flag_def) { if (flag_def == NULL) return; epr_free_string(flag_def->name); flag_def->name = NULL; flag_def->bit_mask = 0; epr_free_string(flag_def->description); flag_def->description = NULL; free(flag_def); } EPR_SBmTerm* epr_parse_bm_expr(EPR_SParseInfo* parse_info, epr_boolean term_required) { return epr_parse_bm_OR_expr(parse_info, term_required); } EPR_SBmTerm* epr_parse_bm_OR_expr(EPR_SParseInfo* parse_info, epr_boolean term_required) { EPR_SBmTerm* term1 = epr_parse_bm_AND_expr(parse_info, term_required); if (term1 == NULL) { return NULL; } while (!epr_is_bm_expr_error(parse_info)) { epr_next_bm_expr_token(parse_info); if (epr_is_bm_OR_keyword(parse_info) || epr_is_bm_OR_operator(parse_info)) { EPR_SBmTerm* term2 = epr_parse_bm_OR_expr(parse_info, TRUE); term1 = epr_create_bm_OR_term(term1, term2); } else { epr_push_back_bm_expr_token(parse_info); break; } } return term1; } EPR_SBmTerm* epr_parse_bm_AND_expr(EPR_SParseInfo* parse_info, epr_boolean term_required) { EPR_SBmTerm* term1 = epr_parse_bm_unary_expr(parse_info, term_required); if (term1 == NULL) { return NULL; } while (!epr_is_bm_expr_error(parse_info)) { epr_next_bm_expr_token(parse_info); if (epr_is_bm_AND_keyword(parse_info) || epr_is_bm_AND_operator(parse_info)) { EPR_SBmTerm* term2 = epr_parse_bm_AND_expr(parse_info, TRUE); term1 = epr_create_bm_AND_term(term1, term2); } else { epr_push_back_bm_expr_token(parse_info); break; } } return term1; } EPR_SBmTerm* epr_parse_bm_unary_expr(EPR_SParseInfo* parse_info, epr_boolean term_required) { EPR_SBmTerm* term = NULL; epr_next_bm_expr_token(parse_info); if (epr_is_bm_NOT_keyword(parse_info) || epr_is_bm_NOT_operator(parse_info)) { term = epr_parse_bm_unary_expr(parse_info, TRUE); term = epr_create_bm_NOT_term(term); } else { epr_push_back_bm_expr_token(parse_info); term = epr_parse_bm_primary_expr(parse_info, term_required); } return term; } EPR_SBmTerm* epr_parse_bm_primary_expr(EPR_SParseInfo* parse_info, epr_boolean term_required) { EPR_SBmTerm* term = NULL; epr_next_bm_expr_token(parse_info); if (epr_get_token_char(parse_info) == '(') { term = epr_parse_bm_expr(parse_info, TRUE); epr_next_bm_expr_token(parse_info); if (epr_get_token_char(parse_info) != ')') { epr_set_bm_expr_error(parse_info, "')' expected"); } } else if (epr_is_bm_name_token(parse_info)) { char* ds_name = epr_consume_token(parse_info); epr_next_bm_expr_token(parse_info); if (epr_get_token_char(parse_info) == '.') { epr_next_bm_expr_token(parse_info); if (epr_is_bm_name_token(parse_info)) { char* flag_name = epr_consume_token(parse_info); term = epr_create_bm_REF_term(ds_name, flag_name); } else { epr_set_bm_expr_error(parse_info, "flag name expected"); } } else { epr_set_bm_expr_error(parse_info, "'.' expected"); } } else if (epr_is_bm_EOS_token(parse_info)) { if (term_required) { epr_set_bm_expr_error(parse_info, "operator or flag name expected"); } } else { epr_set_bm_expr_error(parse_info, "operator or flag name expected"); } return term; } epr_boolean epr_is_bm_OR_keyword(EPR_SParseInfo* parse_info) { return epr_is_bm_name_token(parse_info) && stricmp("or", parse_info->token) == 0; } epr_boolean epr_is_bm_AND_keyword(EPR_SParseInfo* parse_info) { return epr_is_bm_name_token(parse_info) && stricmp("and", parse_info->token) == 0; } epr_boolean epr_is_bm_NOT_keyword(EPR_SParseInfo* parse_info) { return epr_is_bm_name_token(parse_info) && stricmp("not", parse_info->token) == 0; } epr_boolean epr_is_bm_AND_operator(EPR_SParseInfo* parse_info) { return epr_get_token_char(parse_info) == '&'; } epr_boolean epr_is_bm_OR_operator(EPR_SParseInfo* parse_info) { return epr_get_token_char(parse_info) == '|'; } epr_boolean epr_is_bm_NOT_operator(EPR_SParseInfo* parse_info) { return epr_get_token_char(parse_info) == '!'; } epr_boolean epr_is_bm_name_token(EPR_SParseInfo* parse_info) { return parse_info->token_type == BME_NAME && parse_info->token != NULL; } epr_boolean epr_is_bm_EOS_token(EPR_SParseInfo* parse_info) { return parse_info->token_type == BME_EOS; } epr_boolean epr_is_bm_expr_error(EPR_SParseInfo* parse_info) { return parse_info->err_message != NULL; } int epr_get_token_char(EPR_SParseInfo* parse_info) { if (parse_info->token_type == BME_SPECIAL && parse_info->token != NULL) { return parse_info->token[0]; } return '\0'; } char* epr_consume_token(EPR_SParseInfo* parse_info) { char* token = parse_info->token; /* Prevent from being released by epr_free_string() */ parse_info->token = NULL; parse_info->token_type = BME_UNKNOWN; parse_info->pushed_back = FALSE; return token; } void epr_next_bm_expr_token(EPR_SParseInfo* parse_info) { if (parse_info->pushed_back) { parse_info->pushed_back = FALSE; return; } epr_free_string(parse_info->token); parse_info->token_type = epr_tokenize_bm_expr(parse_info->bm_expr, &(parse_info->bm_expr_pos), &(parse_info->token)); } void epr_push_back_bm_expr_token(EPR_SParseInfo* parse_info) { parse_info->pushed_back = TRUE; } void epr_set_bm_expr_error(EPR_SParseInfo* parse_info, const char* message) { static char msg_buf[2048]; epr_push_back_bm_expr_token(parse_info); if (message != NULL) { if (!epr_is_bm_EOS_token(parse_info)) { sprintf(msg_buf, "%s, but found token '%s'", message, parse_info->token); } else { sprintf(msg_buf, "%s, but found 'end-of-string'", message); } } else { if (!epr_is_bm_EOS_token(parse_info)) { sprintf(msg_buf, "unexpected token '%s' found", parse_info->token); } else { sprintf(msg_buf, "unexpected 'end-of-string' found"); } } parse_info->err_message = epr_clone_string(msg_buf); } int epr_tokenize_bm_expr(const char* bm_expr, int* bm_expr_pos, char** token) { int pos = *bm_expr_pos; while (isspace(bm_expr[pos])) { pos++; } if (bm_expr[pos] == '\0') { *bm_expr_pos = pos; *token = NULL; return BME_EOS; } if (isalpha(bm_expr[pos]) || bm_expr[pos] == '_') { int pos0 = pos; size_t len; char* tok; pos++; while (isalnum(bm_expr[pos]) || bm_expr[pos] == '_') { pos++; } len = pos - pos0; tok = epr_create_string(len + 1); strncpy(tok, bm_expr + pos0, len); tok[len] = '\0'; *token = tok; *bm_expr_pos = pos; return BME_NAME; } if (bm_expr[pos] == '(' || bm_expr[pos] == ')' || bm_expr[pos] == '.' || bm_expr[pos] == '&' || bm_expr[pos] == '|' || bm_expr[pos] == '!') { char* tok; tok = epr_create_string(2); tok[0] = bm_expr[pos]; tok[1] = '\0'; pos++; *token = tok; *bm_expr_pos = pos; return BME_SPECIAL; } *token = NULL; *bm_expr_pos = pos; return BME_UNKNOWN; } EPR_SBmTerm* epr_create_bm_term(EPR_EBmOpCode op_code) { EPR_SBmTerm* term = (EPR_SBmTerm*) malloc(sizeof (EPR_SBmTerm)); term->op_code = op_code; return term; } EPR_SBmTerm* epr_create_bm_REF_term(char* band_name, char* flag_name) { EPR_SBmTerm* term = epr_create_bm_term(BMT_REF); term->op.ref.band_name = band_name; term->op.ref.flag_name = flag_name; term->op.ref.flag_mask = FLAG_MASK_NOT_COMPUTED; /* not computed */ term->op.ref.flag_raster = NULL; return term; } EPR_SBmTerm* epr_create_bm_NOT_term(EPR_SBmTerm* arg) { EPR_SBmTerm* term = epr_create_bm_term(BMT_NOT); term->op.unary.arg = arg; return term; } EPR_SBmTerm* epr_create_bm_OR_term(EPR_SBmTerm* arg1, EPR_SBmTerm* arg2) { EPR_SBmTerm* term = epr_create_bm_term(BMT_OR); term->op.binary.arg1 = arg1; term->op.binary.arg2 = arg2; return term; } EPR_SBmTerm* epr_create_bm_AND_term(EPR_SBmTerm* arg1, EPR_SBmTerm* arg2) { EPR_SBmTerm* term = epr_create_bm_term(BMT_AND); term->op.binary.arg1 = arg1; term->op.binary.arg2 = arg2; return term; } uint epr_get_pixel_as_uint(const EPR_SRaster* raster, int x, int y) { epr_clear_err(); switch (raster->data_type) { case (e_tid_uchar) : return (uint) ((uchar*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_char) : return (uint) ((char*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_ushort): return (uint) ((ushort*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_short) : return (uint) ((short*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_uint): return (uint) ((uint*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_int) : return (uint) ((int*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_float) : return (uint) ((float*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_double) : return (uint) ((double*)raster->buffer)[y * raster->raster_width + x]; default: return 0; } } int epr_get_pixel_as_int(const EPR_SRaster* raster, int x, int y) { epr_clear_err(); switch (raster->data_type) { case (e_tid_uchar) : return (int) ((uchar*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_char) : return (int) ((char*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_ushort): return (int) ((ushort*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_short) : return (int) ((short*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_uint): return (int) ((uint*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_int) : return (int) ((int*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_float) : return (int) ((float*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_double) : return (int) ((double*)raster->buffer)[y * raster->raster_width + x]; default: return 0; } } float epr_get_pixel_as_float(const EPR_SRaster* raster, int x, int y) { epr_clear_err(); switch (raster->data_type) { case (e_tid_uchar) : return (float) ((uchar*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_char) : return (float) ((char*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_ushort): return (float) ((ushort*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_short) : return (float) ((short*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_uint): return (float) ((uint*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_int) : return (float) ((int*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_float) : return (float) ((float*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_double) : return (float) ((double*)raster->buffer)[y * raster->raster_width + x]; default: return 0; } } double epr_get_pixel_as_double(const EPR_SRaster* raster, int x, int y) { epr_clear_err(); switch (raster->data_type) { case (e_tid_uchar) : return (double) ((uchar*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_char) : return (double) ((char*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_ushort): return (double) ((ushort*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_short) : return (double) ((short*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_uint): return (double) ((uint*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_int) : return (double) ((int*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_float) : return (double) ((float*)raster->buffer)[y * raster->raster_width + x]; case (e_tid_double) : return (double) ((double*)raster->buffer)[y * raster->raster_width + x]; default: return 0; } } /** * Releases a new bitmask term instance. */ void epr_free_bm_term(EPR_SBmTerm* term) { if (term == NULL) return; switch (term->op_code) { case BMT_REF: epr_free_string(term->op.ref.band_name); epr_free_string(term->op.ref.flag_name); term->op.ref.band_name = NULL; term->op.ref.flag_name = NULL; break; case BMT_AND: /* OR */ case BMT_OR: epr_free_bm_term(term->op.binary.arg1); epr_free_bm_term(term->op.binary.arg2); term->op.binary.arg1 = NULL; term->op.binary.arg2 = NULL; break; case BMT_NOT: epr_free_bm_term(term->op.unary.arg); term->op.unary.arg = NULL; break; default: assert(0); } free(term); } /** * Creates a new bitmask expression from the given bitmask term. *

The expression returned is a valid in the sense that the epr_parse_bm_expr() * applied to the returned string would return an equivalent term. * * @param term the term to be converted */ char* epr_create_bm_expr(EPR_SBmTerm* term) { if (term == NULL) return NULL; switch (term->op_code) { case BMT_REF: { char* s0 = epr_create_string(strlen(term->op.ref.band_name) + strlen(term->op.ref.flag_name) + 16); sprintf(s0, "%s.%s", term->op.ref.band_name, term->op.ref.flag_name); return s0; } case BMT_AND: { char* s1 = epr_create_bm_expr(term->op.binary.arg1); char* s2 = epr_create_bm_expr(term->op.binary.arg2); char* s0 = epr_create_string(strlen(s1) + strlen(s2) + 16); sprintf(s0, "(%s) AND (%s)", s1, s2); epr_free_string(s1); epr_free_string(s2); return s0; } case BMT_OR: { char* s1 = epr_create_bm_expr(term->op.binary.arg1); char* s2 = epr_create_bm_expr(term->op.binary.arg2); char* s0 = epr_create_string(strlen(s1) + strlen(s2) + 16); sprintf(s0, "(%s) OR (%s)", s1, s2); epr_free_string(s1); epr_free_string(s2); return s0; } case BMT_NOT: { char* s1 = epr_create_bm_expr(term->op.unary.arg); char* s0 = epr_create_string(strlen(s1) + 16); sprintf(s0, "NOT (%s)", s1); epr_free_string(s1); return s0; } default: assert(FALSE); return NULL; } } /** * Prints the given term as an expression to the console. */ void epr_print_bm_term(EPR_SBmTerm* term) { epr_write_bm_term(term, stdout); } /** * Writes the given term as an expression to the given output stream. */ void epr_write_bm_term(EPR_SBmTerm* term, FILE* ostream) { char* bm_expr = epr_create_bm_expr(term); fprintf(ostream, "%s", bm_expr); epr_free_string(bm_expr); } GMTSAR_V5.7/.svn/pristine/91/913497a74526dac3d151d204d8da8213a127da7c.svn-base000444 015705 000000 00000006534 13505462013 025442 0ustar00sandwellwheel000000 000000 # # $Id$ # # Locate GMT # # This module accepts the following environment variables: # # GMT_DIR or GMT_ROOT - Specify the location of GMT # # This module defines the following CMake variables: # # GMT_FOUND - True if libgmt is found # GMT_LIBRARY - A variable pointing to the GMT library # GMT_INCLUDE_DIR - Where to find the headers # GMT_INCLUDE_DIRS - Where to find the headers # GMT_DEFINITIONS - Extra compiler flags #============================================================================= # Inspired by FindGDAL # # Distributed under the OSI-approved bsd license (the "License") # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See COPYING-CMAKE-SCRIPTS for more information. #============================================================================= # This makes the presumption that you include gmt.h like # #include "gmt.h" if (UNIX AND NOT GMT_FOUND) # Use gmt-config to obtain the libraries find_program (GMT_CONFIG gmt-config HINTS ${GMT_DIR} ${GMT_ROOT} $ENV{GMT_DIR} $ENV{GMT_ROOT} PATH_SUFFIXES bin PATHS /sw # Fink /opt/local # DarwinPorts /opt/csw # Blastwave /opt /usr/local ) if (GMT_CONFIG) execute_process (COMMAND ${GMT_CONFIG} --cflags ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GMT_CONFIG_CFLAGS) if (GMT_CONFIG_CFLAGS) string (REGEX MATCHALL "(^| )-I[^ ]+" _gmt_dashI ${GMT_CONFIG_CFLAGS}) string (REGEX REPLACE "(^| )-I" "" _gmt_includepath "${_gmt_dashI}") string (REGEX REPLACE "(^| )-I[^ ]+" "" _gmt_cflags_other ${GMT_CONFIG_CFLAGS}) endif (GMT_CONFIG_CFLAGS) execute_process (COMMAND ${GMT_CONFIG} --libs ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GMT_CONFIG_LIBS) if (GMT_CONFIG_LIBS) # Ensure -l is precedeced by whitespace to not match # '-l' in '-L/usr/lib/x86_64-linux-gnu/hdf5/serial' string (REGEX MATCHALL "(^| )-l[^ ]+" _gmt_dashl ${GMT_CONFIG_LIBS}) string (REGEX REPLACE "(^| )-l" "" _gmt_lib "${_gmt_dashl}") string (REGEX MATCHALL "(^| )-L[^ ]+" _gmt_dashL ${GMT_CONFIG_LIBS}) string (REGEX REPLACE "(^| )-L" "" _gmt_libpath "${_gmt_dashL}") endif (GMT_CONFIG_LIBS) endif (GMT_CONFIG) if (_gmt_lib) list (REMOVE_DUPLICATES _gmt_lib) list (REMOVE_ITEM _gmt_lib gmt) endif (_gmt_lib) endif (UNIX AND NOT GMT_FOUND) find_path (GMT_INCLUDE_DIR gmt.h HINTS ${_gmt_includepath} ${GMT_DIR} ${GMT_ROOT} $ENV{GMT_DIR} $ENV{GMT_ROOT} PATH_SUFFIXES include/gmt include PATHS /sw # Fink /opt/local # DarwinPorts /opt/csw # Blastwave /opt /usr/local ) find_library (GMT_LIBRARY NAMES gmt HINTS ${_gmt_libpath} ${GMT_DIR} ${GMT_ROOT} $ENV{GMT_DIR} $ENV{GMT_ROOT} PATH_SUFFIXES lib PATHS /sw /opt/local /opt/csw /opt /usr/local ) # find all libs that gmt-config reports foreach (_extralib ${_gmt_lib}) find_library (_found_lib_${_extralib} NAMES ${_extralib} PATHS ${_gmt_libpath}) list (APPEND GMT_LIBRARY ${_found_lib_${_extralib}}) endforeach (_extralib) include (FindPackageHandleStandardArgs) find_package_handle_standard_args (GMT DEFAULT_MSG GMT_LIBRARY GMT_INCLUDE_DIR) set (GMT_LIBRARIES ${GMT_LIBRARY}) set (GMT_INCLUDE_DIRS ${GMT_INCLUDE_DIR}) string (REPLACE "-DNDEBUG" "" GMT_DEFINITIONS "${_gmt_cflags_other}") # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/.svn/pristine/31/317dddfca86c276e942f5f172250233e7f217bb2.svn-base000444 015705 000000 00000011136 13505462014 025525 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # D. Sandwell and R. Mellors 09/09/97 # # script to read dpaf tapes, create a PRM header and run fixline # the end results are two files that can be processed using easrp # # 3760_2907.PRM - parameter file used in SAR processor # 3760_2907.fix - fixed raw SAR data for sar processing # # 4/26/06 Meng - grep num_lines from dataheader.log # - Added doppler estimation part at the end # 12/27/10 Matt - combine DPAF and CCRS # # Modified by Xiaopeng Tong, 01/23/2011 # # if ($#argv < 4) then echo "" echo " Usage: ERS_pre_process [Doppler]" echo "" echo " name_stem - filename of the .dat and .ldr file" echo " near_range - near range (in meters) of the SAR image (put 0 if use default value)" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo " num_patch - number of patches (put 0 if use default value)" echo " Doppler - Doppler value (blank if use default value)" echo "" echo " Example: " echo " command line: ERS_pre_process ERS2_356_2925_61332 978992.922 6378000 5" echo " will preprocess ERS2 SAR data 'ERS2_356_2925_61332' " echo " then output parameter file 'ERS2_356_2925_61332.PRM' and fixed raw data file 'ERS2_356_2925_61332.raw' and LED file ERS2_356_2925_61332.LED" echo " with near range close to 978992.922 meters and earth radius 6378000 meters and 5 patches" echo "" exit 1 endif # # 0) start with a virgin header # set ORBITS = "@ORBITS_DIR@" set ERSPRE = `gmtsar_sharedir.csh` cp $ERSPRE/virgin.PRM $1.PRM echo " " echo "=========================" echo "Start pre-process $1" # # make sure the dat and ldr files exists # if(! -f $1.dat ) then echo "" echo "error - raw file does not have correct .dat suffix" echo "" exit 1 endif if(! -f $1.ldr ) then echo "" echo "error - leader file does not have correct .ldr suffix" echo "" exit 1 endif # # 1) determine if ERS1 or ERS2 and DPAF or CCRS # grep ERS1 $1.ldr; set FMT1 = $status grep ERS2 $1.ldr; set FMT2 = $status grep ERS-1 $1.ldr; set FMT3 = $status grep ERS-2 $1.ldr; set FMT4 = $status if ( ($FMT1 == 0) || ($FMT3 == 0)) then echo "SC_identity = 1 " >> $1.PRM else if (($FMT2 == 0) || ($FMT4 == 0)) then echo "SC_identity = 2 " >> $1.PRM else echo "Wrong format of the ldr file !" exit 0 endif if ( ($FMT1 == 0) || ($FMT2 == 0)) then echo "Format = DPAF" set ERSFMT = "DPAF" read_sarleader_dpaf $1.ldr >> $1.PRM else if (($FMT3 == 0) || ($FMT4 == 0)) then echo "Format = CCRS" set ERSFMT = "CCRS" else echo "Wrong format of the ldr file !" exit 0 endif # # 2) add info provided by user # echo "input_file = $1.raw" >> $1.PRM # # 3) run ers_line_fixer # rm -f $1.raw if($2 != 0) then echo "now using user defined near range = $2" if ($ERSFMT == "DPAF") then ers_line_fixer -a $2 -s DPAF/ESRIN $1.dat $1.raw > $1fix.log else if ($ERSFMT == "CCRS") then ers_line_fixer -a $2 -s CCRS $1.dat $1.raw > $1fix.log endif else echo "now using default value from the first line" if ($ERSFMT == "DPAF") then ers_line_fixer -s DPAF/ESRIN $1.dat $1.raw > $1fix.log else if ($ERSFMT == "CCRS") then ers_line_fixer -s CCRS $1.dat $1.raw > $1fix.log endif endif # # get near_range from ers_line_fixer # grep near_range $1fix.log >> $1.PRM # # 4) read and interpret the fixed data file to get more # parameters. if ($ERSFMT == "DPAF") then read_data_file_dpaf $1.raw >> $1.PRM else if ($ERSFMT == "CCRS") then read_data_file_ccrs $1.raw >> $1.PRM endif # # 5) make the LED file from PRC orbit data # set SCID = `grep SC_identity $1.PRM | awk '{print $3}'` if ($SCID == 1) then echo "ERS1" dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 else if ($SCID == 2) then echo "ERS2" dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 else echo "Wrong Satellite ID!" exit 0 endif echo "led_file = $1.LED" >> $1.PRM # # 6) doppler centroid estimation and orbital information # if ($#argv == 5) then calc_dop_orb_envi $1.PRM $1.log2 $3 $5 else if ($#argv == 4) then calc_dop_orb_envi $1.PRM $1.log2 $3 endif cat $1.PRM $1.log2 > $1_tmp.PRM echo "fdd1 = 0" >> $1_tmp.PRM echo "fddd1 = 0" >> $1_tmp.PRM mv $1_tmp.PRM $1.PRM # # 7) other stuff echo "SLC_file = $1.SLC" >> $1.PRM # # 8) change the number of patches # if ($4 != 0) then update_PRM.csh $1.PRM num_patches $4 echo "Number of patches is set to $4" endif # # clean unwanted files # rm -f *.log* echo "End pre-process $1" GMTSAR_V5.7/.svn/pristine/31/3126720a90b6f49d9ef1d807062a669268fd8f7b.svn-base000444 015705 000000 00000004426 13505462013 025414 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Align a stack of SLC images # can be used to do stacking and time-series analysis # Xiaopeng Tong, Aug 27 2010 # if ($#argv != 1) then echo "" echo "Usage: align_batch_ALOS_SLC.csh align.in " echo " align a set of images listed in align.in file" echo "" echo " format of align.in:" echo " master_name:slave_name:supermaster_name" echo "" echo " example of align.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP089300650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP236920650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " " echo "" exit 1 endif # # make working directories # mkdir -p SLC/ # # clean up # cleanup.csh SLC echo "" echo "START ALIGN A STACK OF IMAGES" echo "" # # loop start focus and align SLC images # foreach line (`awk '{print $0}' $1`) set master = `echo $line | awk -F: '{print $1}'` set slave = `echo $line | awk -F: '{print $2}'` set supermaster = `echo $line | awk -F: '{print $3}'` set masterstem = ` echo $master | awk '{ print substr($1,8,length($1)-7)}'` set slavestem = ` echo $slave | awk '{ print substr($1,8,length($1)-7)}'` set supermasterstem = ` echo $supermaster | awk '{ print substr($1,8,length($1)-7)}'` if ($master != "" && $slave != "" && $supermaster != "") then echo " " echo "Align $slave to $master via $supermaster - START" cd SLC cp ../raw/IMG-HH-$masterstem.PRM . cp ../raw/IMG-HH-$slavestem.PRM . cp ../raw/IMG-HH-$supermasterstem.PRM . # # need to add the SLC_file name to the master PRM's # update_PRM IMG-HH-$masterstem.PRM SLC_file IMG-HH-$masterstem.SLC update_PRM IMG-HH-$supermasterstem.PRM SLC_file IMG-HH-$supermasterstem.SLC ln -s ../raw/IMG-HH-$masterstem.SLC . ln -s ../raw/IMG-HH-$slavestem.SLC . ln -s ../raw/LED-$masterstem . ln -s ../raw/LED-$slavestem . ln -s ../raw/LED-$supermasterstem . align_ALOS_SLC.csh $master $slave $supermaster cd .. echo "Align $slave to $master via $supermaster - END" else echo "" echo "Wrong format in align.in" exit 1 endif end echo "" echo "END ALIGN A STACK OF IMAGES" echo "" GMTSAR_V5.7/.svn/pristine/5d/5d9b5c8a325dd70273f3022be9f89033fa547ba8.svn-base000444 015705 000000 00000015232 13505462013 025617 0ustar00sandwellwheel000000 000000 #include "gmtsar.h" #include #include #include #include char *USAGE = "\nUsage: nearest_grid input.grd output.grd [search_radius]\n\n" " NaNs will be interpolated to its nearest neighbour\n\n"; int create_grid(void *, char *, char *, int); int main(int argc, char **argv) { void *API = NULL; int radius = 0; if (argc != 3 && argc != 4) die(USAGE, ""); if (argc == 4) { radius = atoi(argv[3]); printf("Setting search radius to be %d ...\n", radius); } if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; create_grid(API, argv[1], argv[2], radius); return (1); } int find_nearest(int i, int j, int *r2, int *is, int *js, int *xs, int *ys) { int ct = 0, nx, ny, nx1, ii, k = 0; int rr; rr = *r2 + 1e7; nx = (int)(sqrt((double)(*r2) / 2.0)); for (nx1 = nx; nx1 <= (int)sqrt((double)(*r2)) + 1; nx1++) { if (nx1 * nx1 < *r2) ny = (int)(sqrt((*r2) - nx1 * nx1)); else ny = 0; while (nx1 * nx1 + ny * ny <= (*r2) && ny <= nx1) { ny++; } if (ny <= nx1) { if (rr > nx1 * nx1 + ny * ny) { k = 0; rr = nx1 * nx1 + ny * ny; xs[k] = nx1; ys[k] = ny; } else if (rr == nx1 * nx1 + ny * ny) { k++; xs[k] = nx1; ys[k] = ny; } } } for (ii = 0; ii <= k; ii++) { nx = xs[ii]; ny = ys[ii]; if (ny == 0) { js[ct + 0] = 0; js[ct + 1] = 0; js[ct + 2] = nx; js[ct + 3] = -nx; is[ct + 0] = nx; is[ct + 1] = -nx; is[ct + 2] = 0; is[ct + 3] = 0; ct = ct + 4; } else if (nx != ny) { js[ct + 0] = ny; js[ct + 1] = ny; js[ct + 2] = -ny; js[ct + 3] = -ny; js[ct + 4] = nx; js[ct + 5] = -nx; js[ct + 6] = nx; js[ct + 7] = -nx; is[ct + 0] = nx; is[ct + 1] = -nx; is[ct + 2] = nx; is[ct + 3] = -nx; is[ct + 4] = ny; is[ct + 5] = ny; is[ct + 6] = -ny; is[ct + 7] = -ny; ct = ct + 8; } else { js[ct + 0] = nx; js[ct + 1] = nx; js[ct + 2] = -nx; js[ct + 3] = -nx; is[ct + 0] = nx; is[ct + 1] = -nx; is[ct + 2] = nx; is[ct + 3] = -nx; ct = ct + 4; } } /* if (i==409 && j == 1422) { fprintf(stderr,"Radius2: %d ",rr); for (ii=0;ii= 1) rr = // ((int)sqrt((double)rr)-1)*((int)sqrt((double)rr)-1); if (rr >= 4 && recy > 0 && recx > 0) rr = (recx - 1) * (recx - 1) + (recy - 1) * (recy - 1) - 1; // if (rr >= 4 && recy > 0) rr = ((int)sqrt(rr)-1)*((int)sqrt(rr)-1)-1; else if (rr >= 4 && recy == 0 && recx > 0) rr = (recx - 1) * (recx - 1) - 1; else if (rr >= 4 && recy > 0 && recx == 0) rr = (recy - 1) * (recy - 1) - 1; // else if (idx[j] != 0 && bufr[j] >= 4 && bufx[j] > 0) rr = // (bufx[j]-1)*(bufx[j]-1) + bufy[j]*bufy[j] -1; else if (idx[j] != 0 && // bufr[j] >= 4 && bufx[j] == 0) rr = bufy[j]*bufy[j] -1; else rr = 0; // if (rr<0) rr = 0; // rr = 0; while (flag == 0 && rr <= (double)(radius * radius)) { ct = find_nearest(i, j, &rr, is, js, xs, ys); cs++; for (k = 0; k < ct; k++) { if (is[k] >= 0 && is[k] < ny && js[k] >= 0 && js[k] < nx) { if (isnan(m[is[k] * nx + js[k]]) == 0) { m_interp[i * nx + j] = m[is[k] * nx + js[k]]; flag = 1; kt = k; recx = abs(is[k] - i); recy = abs(js[k] - j); // idx[j] = 1; // bufx[j] = abs(is[k]-i); // bufy[j] = abs(js[k]-j); // bufr[j] = // bufx[j]*bufx[j]+bufy[j]*bufy[j]; break; } } } } } if (i == 0 && rr == -1) fprintf(stderr, "(%d %d %d %d)\n", j, rr, recx, recy); // if (i == 409 && j == 1422) fprintf(stderr,"(%.5f %d %d %.5f %.6f %.6f // %.6f) ",m_interp[i*nx+j],is[kt]-i,js[kt]-j,m[is[kt]*nx+js[kt]], // m[0],m[1],m[2]); } // for(k=0;kheader->nx; ny = T->header->ny; // printf("nx: %d, ny: %d\n",nx,ny); m = T->data; m_interp = (float *)malloc(sizeof(float) * nx * ny); for (i = 0; i < ny; i++) for (j = 0; j < nx; j++) m_interp[i * nx + j] = m[i * nx + j]; if (rr == 0) { rr = sqrt((double)(nx * nx + ny * ny)) + 1; } nearest_interp(nx, ny, m, m_interp, rr); printf("WRITING GRID IMAGE: Width x Heihgt = %d x %d...\n", nx, ny); if (OUT == NULL && (OUT = GMT_Duplicate_Data(API, GMT_IS_GRID, GMT_DUPLICATE_DATA, T)) == NULL) die("error creating output grid", ""); OUT->data = m_interp; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, output, OUT)) die("Failed to write output grid", output); free(m_interp); return (1); } GMTSAR_V5.7/.svn/pristine/5d/5d75cfe043a493e810c87946b291c27fbc8b0516.svn-base000444 015705 000000 00000022476 13505462013 025552 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_ALOS.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_ALOS.csh IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A config.alos.txt" echo "" echo " Place the raw data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the config file exists # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set SAT = `grep SAT $3 | awk '{print $3}'` set stage = `grep proc_stage $3 | awk '{print $3}'` set num_patches = `grep num_patches $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = ` echo $1 | awk '{ print substr($1,8,length($1)-7)}'` set slave = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` # if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# # if ($stage == 1) then # # first clean up # cleanup.csh raw # # preprocess the raw data # echo " " echo "PRE_PROC.CSH - START" cd raw set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($near_range == "")) then set commandline = "$commandline -near $near_range" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($fd == "")) then set commandline = "$commandline -fd1 $fd" endif echo $commandline pre_proc.csh $SAT IMG-HH-$master IMG-HH-$slave $commandline cd .. echo "PRE_PROC.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# # if ($stage <= 2) then # # clean up # cleanup.csh SLC # # focus and align SLC images # echo " " echo "ALIGN.CSH - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/IMG-HH-$master.raw . ln -s ../raw/IMG-HH-$slave.raw . ln -s ../raw/IMG-HH-$master.LED . ln -s ../raw/IMG-HH-$slave.LED . align.csh SAT IMG-HH-$master IMG-HH-$slave cd .. echo "ALIGN.CSH - END" endif ################################## # 3 - start from make topo_ra # ################################## # if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/IMG-HH-$master.PRM master.PRM ln -s ../raw/IMG-HH-$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC set rng_samp_rate = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ( $?rng_samp_rate) then if ($rng_samp_rate > 25000000) then echo "processing ALOS FBS data" set rng = 2 else echo "processing ALOS FBD data" set rng = 1 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif slc2amp.csh IMG-HH-$master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## # if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../SLC/IMG-HH-$ref.LED . ln -s ../../SLC/IMG-HH-$rep.LED . ln -s ../../SLC/IMG-HH-$ref.SLC . ln -s ../../SLC/IMG-HH-$rep.SLC . cp ../../SLC/IMG-HH-$ref.PRM . cp ../../SLC/IMG-HH-$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM -topo topo_shift.grd filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM -topo topo_ra.grd filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec endif else intf.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM filter.csh IMG-HH-$ref.PRM IMG-HH-$rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ # if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../raw/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif # echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" # if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif # echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### # if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../raw/IMG-HH-$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/IMG-HH-$rep.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # # end GMTSAR_V5.7/.svn/pristine/5d/5d6c0861f7277d3fb735bb2124783f1b103f2e07.svn-base000444 015705 000000 00000000600 13505462013 025436 0ustar00sandwellwheel000000 000000 5 5 1.69013315e-01 3.29192988e-01 4.11112291e-01 3.29192988e-01 1.69013315e-01 3.29192988e-01 6.41180388e-01 8.00737403e-01 6.41180388e-01 3.29192988e-01 4.11112291e-01 8.00737403e-01 1.00000000e+00 8.00737403e-01 4.11112291e-01 3.29192988e-01 6.41180388e-01 8.00737403e-01 6.41180388e-01 3.29192988e-01 1.69013315e-01 3.29192988e-01 4.11112291e-01 3.29192988e-01 1.69013315e-01 GMTSAR_V5.7/.svn/pristine/09/099bbfb6c17c1e07add69ce5b574c6e047948920.svn-base000444 015705 000000 00000024414 13505462013 025632 0ustar00sandwellwheel000000 000000 # snaphu configuration file # # Lines with fewer than two fields and lines whose first non-whitespace # characters are not alphnumeric are ignored. For the remaining lines, # anything after the first two fields (delimited by whitespace) is # also ignored. Inputs are converted in the order they appear in the file; # if multiple assignments are made to the same parameter, the last one # given is the one used. Parameters in this file will be superseded by # parameters given on the command line after the -f flag specifying this # file. Multiple configuration files may be given on the command line. ############################################# # File input and output and runtime options # ############################################# # See section below for file format configuration options. # Input file name # INFILE snaphu.in # Input file line length # LINELENGTH 1000 # Output file name # OUTFILE snaphu.out # Amplitude file name(s) # AMPFILE snaphu.amp.in # Single file containing amplitude images # Correlation file name # CORRFILE snaphu.corr.in # Statistical-cost mode (TOPO, DEFO, SMOOTH, or NOSTATCOSTS) # STATCOSTMODE TOPO # Initialize-only mode (TRUE or FALSE) # INITONLY FALSE # Algorithm used for initialization of wrapped phase values. Possible # values are MST and MCF. # INITMETHOD MST # Verbose-output mode (TRUE or FALSE) # VERBOSE FALSE ################ # File formats # ################ # Valid data formats: # # COMPLEX_DATA: complex values: real, imag, real, imag # ALT_LINE_DATA: real values from different arrays, alternating by line # ALT_SAMPLE_DATA: real values from different arrays, alternating by sample # FLOAT_DATA: single array of floating-point data # # The ALT_SAMPLE_DATA format is sometimes known as .amp or sample- # interleaved format; the ALT_LINE_DATA format is sometimes known as # .hgt or line-interleaved format. For the ALT_LINE_DATA format, the # first array is always assumed to be the interferogram magnitude. All # formats assume single-precision (32-bit) floating-point data (real*4 # and complex*8 in Fortran) in the native byte order (big vs. little # endian) of the system. # Input file format # Allowable formats: # COMPLEX_DATA (default) # ALT_LINE_DATA (magnitude in channel 1, phase in radians in channel 2) # ALT_SAMPLE_DATA (magnitude in channel 1, phase in radians in channel 2) # FLOAT_DATA (phase in radians) # #INFILEFORMAT COMPLEX_DATA # Output file format # Allowable formats: # ALT_LINE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2; default) # ALT_SAMPLE_DATA (interferogram magnitude in channel 1, # unwrapped phase in radians in channel 2) # FLOAT_DATA (unwrapped phase in radians) # #OUTFILEFORMAT ALT_LINE_DATA # Amplitude or power file format # Units should be consistent with interferogram. Allowable formats: # ALT_LINE_DATA (first image amplitude in channel 1, # second image amplitude in channel 2) # ALT_SAMPLE_DATA (first image amplitude in channel 1, # second image amplitude in channel 2; default) # FLOAT_DATA (square root of average power of two images) # #AMPFILEFORMAT ALT_SAMPLE_DATA # Correlation file format # Allowable formats: # ALT_LINE_DATA (channel 1 ignored; correlation values # between 0 and 1 in channel 2; default) # ALT_SAMPLE_DATA (channel 1 ignored; correlation values # between 0 and 1 in channel 2) # FLOAT_DATA (correlation values between 0 and 1) # #CORRFILEFORMAT ALT_LINE_DATA ############################### # SAR and geometry parameters # ############################### # Orbital radius (double, meters) or altitude (double, meters). The # radius should be the local radius if the orbit is not circular. The # altitude is just defined as the orbit radius minus the earth radius. # Only one of these two parameters should be given. ORBITRADIUS 7153000.0 #ALTITUDE 775000.0 # Local earth radius (double, meters). A spherical-earth model is # used. EARTHRADIUS 6378000.0 # The baseline parameters are not used in deformation mode, but they # are very important in topography mode. The parameter BASELINE # (double, meters) is the physical distance (always positive) between # the antenna phase centers. The along-track componenet of the # baseline is assumed to be zero. The parameter BASELINEANGLE_DEG # (double, degrees) is the angle between the antenna phase centers # with respect to the local horizontal. Suppose the interferogram is # s1*conj(s2). The baseline angle is defined as the angle of antenna2 # above the horizontal line extending from antenna1 towards the side # of the SAR look direction. Thus, if the baseline angle minus the # look angle is less than -pi/2 or greater than pi/2, the topographic # height increases with increasing elevation. The units of # BASELINEANGLE_RAD are radians. BASELINE 150.0 BASELINEANGLE_DEG 225.0 #BASELINEANGLE_RAD 3.92699 # If the BPERP parameter is given, the baseline angle is taken to be # equal to the look angle (mod pi) at midswath, and the length of the # baseline is set accordingly. Particular attention must be paid to # the sign of this parameter--it should be negative if increasing # phase implies increasing topographic height. #BPERP -150.0 # The transmit mode should be either REPEATPASS or PINGPONG if both # antennas transmitted and both received (REPEATPASS and PINGPONG have # the same effect); the transmit mode should be SINGLEANTENNATRANSMIT # if only one antenna was used to transmit while both antennas # received. In single-antenna-transmit mode, the baseline is # effectively halved. This parameter is ignored for cost modes other # than topography. TRANSMITMODE REPEATPASS # Slant range from platform to first range bin in input data file # (double, meters). Be sure to modify this parameter if the input # file is extracted from a larger scene. The parameter does not need # to be modified is snaphu is unwrapping only a subset of the input file. NEARRANGE 831000.0 # Slant range and azimuth pixel spacings of input interferogram after # any multilook averaging. This is not the same as the resolution. # (double, meters). DR 8.0 DA 20.0 # Single-look slant range and azimuth resolutions. This is not the # same as the pixel spacing. (double, meters). RANGERES 10.0 AZRES 6.0 # Wavelength (double, meters). LAMBDA 0.0565647 # Number of real (not necessarily independent) looks taken in range and # azimuth to form the input interferogram (long). NLOOKSRANGE 1 NLOOKSAZ 5 # Number of looks (assumed independent) from nonspatial averaging (long). NLOOKSOTHER 1 # Equivalent number of independent looks (double, dimensionless) that were # used to generate correlation file if one is specified. This parameter # is ignored if the correlation data are generated by the interferogram # and amplitude data. # # The equivalent number of independent looks is approximately equal to the # real number of looks divided by the product of range and azimuth # resolutions, and multiplied by the product of the single-look range and # azimuth pixel spacings. It is about 0.53 times the number of real looks # for ERS data processed without windowing. NCORRLOOKS 23.8 # Number of looks that should be taken in range and azimuth for estimating # the correlation coefficient from the interferogram and the amplitude # data. These numbers must be larger than NLOOKSRANGE and NLOOKSAZ. # The actual numbers used may be different since we prefer odd integer # multiples of NLOOKSRANGE and NLOOKSAZ (long). These numbers are ignored # if a separate correlation file is given as input. NCORRLOOKSRANGE 3 NCORRLOOKSAZ 15 ############################### # Scattering model parameters # ############################### # Threshold brightness (normalized) for layover height integration # (double, dimensionless) LAYMINEI 1.25 ################################## # Decorrelation model parameters # ################################## # Here, rho is the magnitude of the complex correlation coefficient # between the two observations forming the interferogram (0<=rho<=1) # See Zebker & Villasenor, 1992 # Default value to use uniformly for true, unbiased correlation if no # correlation file is specified and correlation cannot be generated # from the available data (double). DEFAULTCORR 0.01 # Factor applied to expected minimum measured (biased) correlation. # Values smaller than the threshold rhominfactor*rho0 are assumed to # come from zero statistical correlation because of estimator bias (double). # This is used only in topo mode; for defo mode, use DEFOTHRESHFACTOR. RHOMINFACTOR 1.3 ######################## # PDF model parameters # ######################## # Algorithm costs are based on the negative log pdf: # # cost = -log(f(phi | EI, rho)) # Factor applied to range layover probability density to get azimuth # layover probability density (double). AZDZFACTOR 0.99 # Ratio of layover probability density to peak probability density # for non-layover slopes expected (double). LAYCONST 0.9 ############################### # Deformation mode parameters # ############################### # Factor applied to range discontinuity probability density to get # corresponding value for azimuth (double). DEFOAZDZFACTOR 1.0 # Factor applied to rho0 to get threshold for whether or not phase # discontinuity is possible (double). rho0 is the expected, biased # correlation measure if true correlation is 0. DEFOTHRESHFACTOR 1.2 # Maximum phase discontinuity likely (double). Units are radians or cycles. # If abrupt phase discontinuities are not expected, this paramter can be # set to zero. DEFOMAX_CYCLE 1.2 #DEFOMAX_RAD 7.5398 # Ratio of phase discontinuity probability density to peak probability # density expected for discontinuity-possible pixel differences (double). # Value of 1 means zero cost for discontinuity, 0 means infinite cost. DEFOCONST 0.9 ######################## # Algorithm parameters # ######################## # Maximum flow increment (long) for solver. Not the same as maximum # flow possible. MAXFLOW 4 # Scaling constant factor applied to double precision costs to get # integer costs (double). COSTSCALE 100.0 # End of snaphu configuration file GMTSAR_V5.7/.svn/pristine/5c/5c46f720b4e9ebeba7e3247f324093c1745790c7.svn-base000444 015705 000000 00000014611 13505462014 025542 0ustar00sandwellwheel000000 000000 /* $Id$ */ /***************************************************************************************** * Program to stitch SLCs and PRMs of TOPS images together. * ***************************************************************************************** * Creator: Xiaohua(Eric) XU and David Sandwell * (Scripps Institution of *Oceanography) * Date: 03/01/2016 * ****************************************************************************************/ /***************************************************************************************** * Modification history: * ****************************************************************************************/ #include "PRM.h" #include "gmtsar.h" #include #include #include char *USAGE = "\n\nUSAGE: stitch_tops stem.in output_stem\n" "\noutput: stem.SLC stem.PRM\n" "\nnote: please put the files to stem.in in the order of time.\n" "\n make sure all images have same rng_samp_rate and PRF. \n"; int main(int argc, char **argv) { /* define variables */ FILE *stemin, *SLCin, *SLCout, *PRM; struct PRM prm1, prm2; char stem[100][200], tmp_str[200]; int ii, jj, nfile = 0, ntl = 0, nl, width, nl0, width2; int n_start, n_end, dr = 0; double prf, t1, t2; short *buf; if (argc != 3) die(USAGE, ""); /* read in the filelist */ if ((stemin = fopen(argv[1], "r")) == NULL) die("Couldn't open stem file: \n", argv[1]); while (fscanf(stemin, "%s", tmp_str) != EOF) { strcpy(stem[nfile], tmp_str); nfile++; } fclose(stemin); fprintf(stderr, "Number of Files to be stitched is %d \n", nfile); if (nfile < 2) die("At least two files are needed for stitching\n", ""); /* read in the first prarmeter file */ strcpy(tmp_str, stem[0]); strcat(tmp_str, ".PRM"); if ((PRM = fopen(tmp_str, "r")) == NULL) die("Couldn't open prm file: \n", tmp_str); null_sio_struct(&prm1); get_sio_struct(PRM, &prm1); fclose(PRM); t1 = prm1.clock_start + (prm1.ashift + prm1.sub_int_a) / prm1.prf / 86400.0; width = prm1.num_rng_bins; width2 = prm1.num_rng_bins; prf = prm1.prf; nl0 = prm1.num_lines; /* malloc buf for copying, make some extra space in case the width of two * images are different */ buf = (short *)malloc(width * 2 * sizeof(short) * 2); /* open the output SLC file */ strcpy(tmp_str, argv[2]); strcat(tmp_str, ".SLC"); if ((SLCout = fopen(tmp_str, "wb")) == NULL) die("Couldn't open output SLC file: \n", tmp_str); /* loop over all the images */ for (ii = 1; ii < nfile; ii++) { /* read in parameters for next image*/ strcpy(tmp_str, stem[ii]); strcat(tmp_str, ".PRM"); if ((PRM = fopen(tmp_str, "r")) == NULL) die("Couldn't open prm file: \n", tmp_str); null_sio_struct(&prm2); get_sio_struct(PRM, &prm2); fclose(PRM); t2 = prm2.clock_start + (prm2.ashift + prm2.sub_int_a) / prm2.prf / 86400.0; /* check whether the parameters match the first image */ if (prm2.fs != prm1.fs) die("Images have different range sampling rate... \n", ""); if (fabs(prm2.prf - prf) > 0.00001) die("Images have different PRF... \n", ""); /* open the previous SLC file */ strcpy(tmp_str, stem[ii - 1]); strcat(tmp_str, ".SLC"); if ((SLCin = fopen(tmp_str, "rb")) == NULL) die("Couldn't open input SLC file: \n", tmp_str); /* figure out how many lines to be written and check whether image has that * many lines */ nl = (floor)((t2 - t1) * 86400.0 * prf + 0.5); if (nl > nl0) die("Images do not have overlapped region \n", ""); n_start = ntl - (floor)((t1 - prm1.clock_start - (prm1.ashift + prm1.sub_int_a) / prf / 86400.0) * 86400.0 * prf + 0.5); n_end = floor((float)(nl0 + nl) / 2.0 + 0.5); /* write the SLC files */ fprintf(stderr, "Parsing %d lines...\n", n_start); for (jj = 1; jj <= n_start; jj++) fread(buf, sizeof(short), width2 * 2, SLCin); fprintf(stderr, "Writing Image %d, from line %d to line %d (%d)...\n", ii, 1 + n_start, n_end, width2); for (jj = 1 + n_start; jj <= n_end; jj++) { fread(buf, sizeof(short), width2 * 2, SLCin); if (dr < 0) { fwrite(&buf[-dr], sizeof(short), width * 2, SLCout); } else if (dr > 0) { fwrite(&buf[width * 2], sizeof(short), dr * 2, SLCout); fwrite(buf, sizeof(short), (width - dr) * 2, SLCout); } else { fwrite(buf, sizeof(short), width * 2, SLCout); } ntl++; } fprintf(stderr, "%d lines written...\n", n_end - n_start); dr = (int)((prm2.near_range - prm1.near_range) / (299792458.0 / prm2.fs / 2) + 0.5); fprintf(stderr, "%d diff in range...\n", dr); t1 = t2; nl0 = prm2.num_lines; width2 = prm2.num_rng_bins; fclose(SLCin); } /* open the last SLC file and write to the output SLC */ strcpy(tmp_str, stem[nfile - 1]); strcat(tmp_str, ".SLC"); if ((SLCin = fopen(tmp_str, "rb")) == NULL) die("Couldn't open input SLC file: \n", tmp_str); nl = prm2.num_lines; n_start = ntl - (floor)((t1 - prm1.clock_start - (prm1.ashift + prm1.sub_int_a) / prf / 86400.0) * 86400.0 * prf + 0.5); /* writing the last SLC */ fprintf(stderr, "Parsing %d lines...\n", n_start); for (jj = 1; jj <= n_start; jj++) fread(buf, sizeof(short), width2 * 2, SLCin); fprintf(stderr, "Writing Image %d, from line %d to line %d (%d)...\n", ii, 1 + n_start, nl, width2); for (jj = 1 + n_start; jj <= nl; jj++) { fread(buf, sizeof(short), width2 * 2, SLCin); if (dr < 0) { fwrite(&buf[-dr], sizeof(short), width * 2, SLCout); } else if (dr > 0) { fwrite(&buf[width * 2], sizeof(short), dr * 2, SLCout); fwrite(buf, sizeof(short), (width - dr) * 2, SLCout); } else { fwrite(buf, sizeof(short), width * 2, SLCout); } ntl++; } fprintf(stderr, "%d lines written...\n", nl - n_start); fclose(SLCout); /* prepare the output PRM */ strcpy(tmp_str, argv[2]); strcat(tmp_str, ".PRM"); if ((PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open output PRM file: \n", tmp_str); prm1.num_lines = ntl - ntl % 4; prm1.nrows = prm1.num_lines; prm1.num_valid_az = prm1.num_lines; prm1.SC_clock_stop = prm1.SC_clock_start + prm1.num_lines / prf / 86400; prm1.clock_stop = prm1.clock_start + prm1.num_lines / prf / 86400; strcpy(prm1.input_file, argv[2]); strcat(prm1.input_file, ".raw"); strcpy(prm1.led_file, argv[2]); strcat(prm1.led_file, ".LED"); strcpy(prm1.SLC_file, argv[2]); strcat(prm1.SLC_file, ".SLC"); put_sio_struct(prm1, PRM); fprintf(stderr, "PRM set for stitched SLC...\n"); fclose(PRM); free(buf); return 1; } GMTSAR_V5.7/.svn/pristine/5c/5cd75647c57bc863ec68655fc9d3e5c58ac957f1.svn-base000444 015705 000000 00000056203 13505462013 025742 0ustar00sandwellwheel000000 000000 // // split_spectrum.c // // Created by Xiaohua Xu on 7/18/18. // // Used to estimate ionospheric delay in interferograms. // /*************************************************************************** * Modification history: * * * * DATE * ***************************************************************************/ #include "gmt.h" #include "gmtsar.h" #include #include #include #include "tiffio.h" //#include // void right_shift(fcomplex *, int); // void left_shift(fcomplex *, int); void circ_shift(fcomplex *, fcomplex *, int, int); // void bandpass_filter(double, double, int, int, int, double, fcomplex *); // void kaiser(double, int, double *); // double bessi0(double); int fliplr(double *, int); int cos_window(double, double, double, int, double *); int split1(int, char **); int split2(int, char **); fcomplex fmean(short *, int); char *USAGE1 = "\nUSAGE: split_spectrum prm1 [split_half] \n\n" " program used to split range spectrum for SLC using a modified cosine " "filter\n\n" " SLCs are bandpassed and then shifted to the center of the spectrum\n\n" " split_half is build for ALOS FBD FBS cases, put 1 for using half the spectrum\n\n" " output is SLCH SLCL\n\n"; char *USAGE2 = "\nUSAGE: split_spectrum prm1 prm2\n\n" " program used to split range spectrum for coregistered SLC using a " "modified cosine filter\n\n" " SLCs are bandpassed and then shifted to the center of the spectrum\n\n" " output is SLCH1 SLCH2 SLCL1 SLCL2\n"; int main(int argc, char **argv) { if (argc != 3 && argc != 2) die("", USAGE1); split1(argc, argv); return (1); } int split1(int argc1, char **argv1) { FILE *SLC_file1, *SLCH, *SLCL; TIFF *tif, *tifh, *tifl; uint32 width, height, nii; uint16 s = 0; struct PRM p1; int ii, jj, nffti, nc; double bc, bw, cf, fh, fl; double rng_samp_rate, chirp_slope, pulse_dur, rng_bandwidth, wavelength; double SPEED_OF_LIGHT = 299792458.0; double *filterh, *filterl; short *buf1; fcomplex *c1, *c1h, *c1l, *tmp, fm; void *API = NULL; /* GMT API control structure */ // double complex zl,zh,zp,z1h,z2h,z1l,z2l; // double *ph; int half_band = 0; if (argc1 != 2 && argc1 != 3) die("", USAGE1); if ((API = GMT_Create_Session(argv1[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; if (argc1 == 3) half_band = atoi(argv1[2]); /* read in prm files */ get_prm(&p1, argv1[1]); rng_samp_rate = p1.fs; chirp_slope = p1.chirp_slope; pulse_dur = p1.pulsedur; rng_bandwidth = fabs(pulse_dur * chirp_slope); wavelength = p1.lambda; cf = SPEED_OF_LIGHT / wavelength; if (p1.SC_identity == 10) { bc = 42000000.0 / 3.0; } else if (half_band == 1) { bc = rng_bandwidth / 3.0/2; } else { bc = rng_bandwidth / 3.0; } bw = bc; fh = cf + bc; fl = cf - bc; nffti = find_fft_length(p1.num_rng_bins); nc = (int)fabs(round(bc / rng_samp_rate * nffti)); filterh = (double *)malloc(nffti * sizeof(double)); filterl = (double *)malloc(nffti * sizeof(double)); cos_window(bc, bw, rng_samp_rate, nffti, filterh); cos_window(-bc, bw, rng_samp_rate, nffti, filterl); //fprintf(stderr, "%.12f %.12f %.12f %.12f %.12f\n", bc / 1e6, bw / 1e6, fh / 1e6, fl / 1e6, cf / 1e6); printf("low_wavelength = %.12f\n",SOL/fl); printf("center_wavelength = %.12f\n",SOL/cf); printf("high_wavelength = %.12f\n",SOL/fh); printf("low_freq = %.12f\n",fl); printf("center_freq = %.12f\n",cf); printf("high_freq = %.12f\n",fh); printf("low_bandwidth = %.12f\n",bw); printf("center_bandwidth = %.12f\n",rng_bandwidth); printf("high_bandwidth = %.12f\n",bw); // test on how the window look like // for (ii=0;ii fs / 3) { die("center frequency too big!", ""); } for (i = 0; i < N; i++) filter[i] = 0.0; nc = (int)fabs(round(fc / fs * N)); nb = (int)round(fb / fs * N); // fprintf(stderr,"%d %d %d\n",nc,nb,N); // modify the section below to tune the band filter parameters , // 2*flat_nb+2*cos_nb = 1 flat_nb = (int)round(nb / 4); cos_nb = (int)round(nb / 4); for (i = nc - flat_nb - 1; i < nc + flat_nb; i++) filter[i] = 1; for (i = nc - flat_nb - cos_nb - 1; i < nc - flat_nb - 1; i++) filter[i] = 0.5 - cos(PI * (i - (nc - flat_nb - cos_nb - 1) + 1) / cos_nb) / 2.0; for (i = nc + flat_nb; i < nc + flat_nb + cos_nb; i++) filter[i] = cos(PI * (i - (nc + flat_nb) + 1) / cos_nb) / 2.0 + 0.5; if (fc < 0) { fliplr(filter, N); } return (1); } int fliplr(double *a, int N) { int i; double d; for (i = 0; i < (int)(N / 2); i++) { d = a[i]; a[i] = a[N - 1 - i]; a[N - 1 - i] = d; } return (1); } void circ_shift(fcomplex *in, fcomplex *tmp, int na, int nc) { int i, ii; // int ncm; // ncm = nc%na; if (nc % na != 0) { for (i = 0; i < na; i++) { tmp[i].r = in[i].r; tmp[i].i = in[i].i; } for (i = 0; i < na; i++) { ii = (i + nc) % na; if (ii < 0) ii = ii + na; if (ii < 0 || ii > na) { fprintf(stderr, "%d", ii); die("index outside of range", ""); } in[ii].r = tmp[i].r; in[ii].i = tmp[i].i; } // for(i = 0; i < abs(ncm); i++) // left_shift(in, na); } } /* // modified bessel function double bessi0(double x) { double ax,ans; double y; if ((ax=fabs(x)) < 3.75) { y=x/3.75; y*=y; ans=1.0+y*(3.5156229+y*(3.0899424+y*(1.2067492+y*(0.2659732+y*(0.360768e-1+y*0.45813e-2))))); } else { y=3.75/ax; ans=(exp(ax)/sqrt(ax))*(0.39894228+y*(0.1328592e-1+y*(0.225319e-2+y*(-0.157565e-2+y*(0.916281e-2+y*(-0.2057706e-1+y*(0.2635537e-1+y*(-0.1647633e-1+y*0.392377e-2)))))))); } return ans; } // kaiser window, maximizes energy concentration void kaiser(double alpha, int n, double *coef){ int i; int hn; double a; hn = (n - 1) / 2; for(i = -hn; i<=hn; i++){ a = 1.0 - 4.0 * i * i / (n - 1.0) / (n - 1.0); coef[i+hn] = bessi0(alpha * sqrt(a)) / bessi0(alpha); } } // create a band pass filter void bandpass_filter(double bw, double bc, int n, int nfft, int ncshift, double alpha, fcomplex *filter) { int i; double *kw; int hn; fcomplex bwx,bcx; hn = (n-1)/2; if(n > nfft){ die("Error: fft length too small!\n",""); } if(abs(ncshift) > nfft){ die("","Error: fft length too small or shift too big!\n\n"); } //set filter to zero for(i = 0; i < nfft; i++){ filter[i].r = 0.0; filter[i].i = 0.0; } kw = (double *) malloc ((hn*2+1) * sizeof(double)); kaiser(alpha,n,kw); //compute filter for(i=0;i<2*hn+1;i++) { bcx.r = cos(bc*2.0*PI*(i-hn)); bcx.i = sin(bc*2.0*PI*(i-hn)); if(i==hn+1){ bwx.r = 1.0; bwx.i = 0.0; } else{ bwx.r = sin(bw*PI*(i-hn))/(bw*PI*(i-hn)); bwx.i = 0.0; } filter[i] = Cmul(bcx,bwx); filter[i].r = bw*kw[i]*filter[i].r; filter[i].i = bw*kw[i]*filter[i].i; } // shift the filter circ_shift(filter, nfft, -abs(ncshift)); free(kw); } void circ_shift(fcomplex *in, int na, int nc){ int i; int ncm; ncm = nc%na; if(ncm < 0){ for(i = 0; i < abs(ncm); i++) left_shift(in, na); } else if(ncm > 0){ for(i = 0; i < ncm; i++) right_shift(in, na); } else{ //ncm == 0, no need to shift i = 0; } } void left_shift(fcomplex *in, int na){ int i; fcomplex x; if(na < 1){ fprintf(stderr, "Error: array size < 1\n\n"); exit(1); } else if(na > 1){ x.r = in[0].r; x.i = in[0].i; for(i = 0; i <= na - 2; i++){ in[i].r = in[i+1].r; in[i].i = in[i+1].i; } in[na-1].r = x.r; in[na-1].i = x.i; } else{ //na==1, no need to shift i = 0; } } void right_shift(fcomplex *in, int na){ int i; fcomplex x; if(na < 1){ fprintf(stderr, "Error: array size < 1\n\n"); exit(1); } else if(na > 1){ x.r = in[na-1].r; x.i = in[na-1].i; for(i = na - 1; i >= 1; i--){ in[i].r = in[i-1].r; in[i].i = in[i-1].i; } in[0].r = x.r; in[0].i = x.i; } else{ //na==1, no need to shift i = 0; } } */ GMTSAR_V5.7/.svn/pristine/5c/5c163a9896e8987ac17b8f70a3e5b140b2efa317.svn-base000444 015705 000000 00000026157 13505462014 025634 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 07/09/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "hdf5.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include #include #include #include int pop_prm_hdf5(struct PRM *, hid_t, char *); int pop_led_hdf5(hid_t, state_vector *); int write_orb(state_vector *sv, FILE *fp, int); int write_slc_hdf5(hid_t, FILE *); int hdf5_read(void *, hid_t, char *, char *, char *, int); /*static inline unsigned long long bswap_64(unsigned long long x) { return (((unsigned long long)bswap_32(x&0xffffffffull))<<32) | (bswap_32(x>>32)); }*/ char *USAGE = "\n\nUsage: make_slc_csk name_of_input_file name_output\n" "\nExample: make_slc_csk " "CSKS2_SCS_B_HI_09_HH_RA_SF_20090412050638_20090412050645.h5 CSK_20090412\n" "\nOutput: CSK_20090412.SLC CSK_20090412.PRM CSK_20090412.LED\n"; int main(int argc, char **argv) { FILE *OUTPUT_PRM, *OUTPUT_SLC, *OUTPUT_LED; char tmp_str[200]; char *buff_c, *buff_o; double *buff_d; int *buff_i; struct PRM prm; // tree *xml_tree; state_vector sv[200]; int n; hid_t file; // fprintf(stderr,"Hahahaha...\n"); buff_c = (char *)malloc(60000 * sizeof(char)); buff_o = (char *)malloc(60000 * sizeof(char)); buff_d = (double *)malloc(1000 * sizeof(double)); buff_i = (int *)malloc(1000 * sizeof(double)); if (argc < 3) die(USAGE, ""); // generate the xml tree // if ((INPUT_FILE = fopen(argv[1],"r")) == NULL) die("Couldn't open xml file: // \n",argv[1]); if ((file = H5Fopen(argv[1], H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) die("Couldn't open HDF5 file: \n", argv[1]); // initiate the prm null_sio_struct(&prm); // generate the PRM file pop_prm_hdf5(&prm, file, argv[2]); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); // generate the LED file n = pop_led_hdf5(file, sv); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // generate the SLC file strcpy(tmp_str, argv[2]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open tiff file: \n", tmp_str); write_slc_hdf5(file, OUTPUT_SLC); fclose(OUTPUT_SLC); // TIFFClose(TIFF_FILE); // fclose(OUTPUT_SLC); H5Fclose(file); } int write_slc_hdf5(hid_t input, FILE *slc) { int i, j, width, height; short *buf, *tmp; hsize_t dims[10]; hid_t memtype, dset, group; herr_t status; hdf5_read(dims, input, "/S01", "SBI", "", 'n'); height = (int)dims[0]; width = (int)dims[1]; printf("Data size %lld x %lld x %lld...\n", dims[0], dims[1], dims[2]); buf = (short *)malloc(height * width * 2 * sizeof(short)); tmp = (short *)malloc(width * 2 * sizeof(short)); group = H5Gopen(input, "/S01", H5P_DEFAULT); dset = H5Dopen(group, "SBI", H5P_DEFAULT); memtype = H5Dget_type(dset); status = H5Dread(dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf); printf("Writing SLC..Image Size: %d X %d...\n", width, height); for (i = 0; i < height; i++) { for (j = 0; j < width * 2; j += 2) { tmp[j] = (short)buf[i * width * 2 + j]; tmp[j + 1] = (short)buf[i * width * 2 + j + 1]; } fwrite(tmp, sizeof(short), width * 2, slc); } free(buf); free(tmp); return (1); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 1e4) / 1e4 - trunc((sv[0].sec) * 1e4) / 1e4; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.3lf %.3lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led_hdf5(hid_t input, state_vector *sv) { int i, count, iy; char tmp_c[200], date[200]; double t[200], t0, t_tmp; unsigned short tmp_i[200]; double x[600], v[600]; hdf5_read(tmp_i, input, "/", "", "Number of State Vectors", 'i'); count = tmp_i[0]; hdf5_read(tmp_c, input, "/", "", "Reference UTC", 'c'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); t0 = str2double(tmp_c); date[4] = '\0'; iy = (int)str2double(date); hdf5_read(t, input, "/", "", "State Vectors Times", 'd'); hdf5_read(x, input, "/", "", "ECEF Satellite Position", 'd'); hdf5_read(v, input, "/", "", "ECEF Satellite Velocity", 'd'); // fprintf(stderr,"%.15f\n",x[3]); for (i = 0; i < count; i++) { t_tmp = t[i] / 86400.0 + t0; sv[i].yr = iy; sv[i].jd = (int)(t_tmp - trunc(t_tmp / 1000.0) * 1000.0); sv[i].sec = (t_tmp - trunc(t_tmp)) * 86400.0; sv[i].x = (double)x[i * 3]; sv[i].y = (double)x[i * 3 + 1]; sv[i].z = (double)x[i * 3 + 2]; sv[i].vx = (double)v[i * 3]; sv[i].vy = (double)v[i * 3 + 1]; sv[i].vz = (double)v[i * 3 + 2]; // fprintf(stderr,"%d %d %.3f %.6f %.6f %.6f %.8f %.8f %.8f // \n",sv[i].yr,sv[i].jd,sv[i].sec,x[i*3],x[i*3+1],x[i*3+2],v[i*3],v[i*3+1],v[i*3+2]); } printf("%d Lines Written for Orbit...\n", count); return (count); } int pop_prm_hdf5(struct PRM *prm, hid_t input, char *file_name) { char tmp_c[200], rec[100], date[100]; double tmp_d[200]; double c_speed = 299792458.0; hsize_t dims[10]; prm->nlooks = 1; prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; prm->st_rng_bin = 1; strasign(prm->dtype, "a", 0, 0); prm->SC_identity = 8; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; prm->xmi = 127.5; prm->xmq = 127.5; hdf5_read(tmp_d, input, "/S01", "", "Sampling Rate", 'd'); prm->fs = tmp_d[0]; hdf5_read(tmp_d, input, "/", "", "Radar Wavelength", 'd'); prm->lambda = tmp_d[0]; hdf5_read(tmp_d, input, "/S01", "", "Range Chirp Rate", 'd'); prm->chirp_slope = tmp_d[0]; hdf5_read(tmp_d, input, "/S01", "", "Range Chirp Length", 'd'); prm->pulsedur = tmp_d[0]; hdf5_read(rec, input, "/", "", "Acquisition Mode", 'c'); hdf5_read(tmp_d, input, "/S01", "", "PRF", 'd'); prm->prf = tmp_d[0]; if (strcmp(rec, "SPOTLIGHT") == 0) { hdf5_read(tmp_d, input, "/S01", "SBI", "Line Time Interval", 'd'); prm->prf = 1.0 / tmp_d[0]; } hdf5_read(rec, input, "/", "", "Product Type", 'c'); if (strcmp(rec, "RAW_B") == 0) { // RAW hdf5_read(tmp_d, input, "/S01", "B001", "Range First Times", 'd'); prm->near_range = tmp_d[0] * c_speed / 2; hdf5_read(tmp_c, input, "/", "", "Scene Sensing Start UTC", 'c'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); prm->clock_start = str2double(tmp_c); date[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(date); } else if (strcmp(rec, "SCS_B") == 0) { // SLC hdf5_read(tmp_d, input, "/S01", "SBI", "Zero Doppler Range First Time", 'd'); prm->near_range = tmp_d[0] * c_speed / 2; hdf5_read(tmp_c, input, "/", "", "Reference UTC", 'c'); hdf5_read(tmp_d, input, "/S01", "SBI", "Zero Doppler Azimuth First Time", 'd'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); prm->clock_start = str2double(tmp_c) + tmp_d[0] / 86400.0; date[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(date); prm->fdd1 = 0.0; prm->fddd1 = 0.0; } else { // Unknown type fprintf(stderr, "Product type being nither RAW nor SLC...\n"); return (-1); } hdf5_read(tmp_c, input, "/", "", "Orbit Direction", 'c'); if (strcmp(tmp_c, "ASCENDING") == 0) { strasign(prm->orbdir, "A", 0, 0); } else { strasign(prm->orbdir, "D", 0, 0); } hdf5_read(tmp_c, input, "/", "", "Look Side", 'c'); if (strcmp(tmp_c, "RIGHT") == 0) { strasign(prm->lookdir, "R", 0, 0); } else { strasign(prm->lookdir, "L", 0, 0); } hdf5_read(dims, input, "/S01", "SBI", "", 'n'); // fprintf(stderr,"%d %d\n",(int)dims[0],(int)dims[1]); prm->bytes_per_line = (int)dims[1] * 4; prm->good_bytes = prm->bytes_per_line; prm->num_lines = (int)dims[0] - (int)dims[0] % 4; prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->num_rng_bins = prm->bytes_per_line / 4; prm->chirp_ext = 0; // fprintf(stderr,"%d\n",(int)dims[0]); // fprintf(stderr,"%u\n",tmp_i[0]); // fprintf(stderr,"%.15f\n",tmp_d[0]); // fprintf(stderr,"%s\n",tmp_c); printf("PRM set for Image File...\n"); return (1); } int hdf5_read(void *output, hid_t file, char *n_group, char *n_dset, char *n_attr, int c) { hid_t memtype, type, group = -1, dset = -1, attr = -1, tmp_id, space; herr_t status; size_t sdim; int ndims; tmp_id = file; if (strlen(n_group) > 0) { group = H5Gopen(tmp_id, n_group, H5P_DEFAULT); tmp_id = group; } if (strlen(n_dset) > 0) { dset = H5Dopen(tmp_id, n_dset, H5P_DEFAULT); tmp_id = dset; } if (strlen(n_attr) > 0) { attr = H5Aopen(tmp_id, n_attr, H5P_DEFAULT); tmp_id = attr; } if (c == 'c') { memtype = H5Tcopy(H5T_C_S1); type = H5Aget_type(tmp_id); sdim = H5Tget_size(type); sdim++; status = H5Tset_size(memtype, sdim); } else if (c == 'd') { memtype = H5T_NATIVE_DOUBLE; } else if (c == 'i' || c == 'n') { memtype = H5T_NATIVE_INT; } else if (c == 'f') { memtype = H5T_NATIVE_FLOAT; } if (tmp_id == attr) { status = H5Aread(tmp_id, memtype, output); } else if (tmp_id == dset && c == 'n') { space = H5Dget_space(dset); ndims = H5Sget_simple_extent_dims(space, output, NULL); } else { return (-1); } return (1); } GMTSAR_V5.7/.svn/pristine/5c/5c6ac3367b0832fb2f9c230e05835daf159a54be.svn-base000444 015705 000000 00000001730 13505462013 025660 0ustar00sandwellwheel000000 000000 .TH PRM2GIPS l "11/17/96 \(co 1996 David Sandwell" "prm2gips.l 1.0" "SIOSAR Conversion Command" .SH NAME prm2gips \- translate a SIOSAR parameter file into a GIPS file header for an SLC image. .SH SYNOPSIS .B prm2gips .I file.PRM file.head [R4] .SH DESCRIPTION The .B prm2gips command reads a parameter PRM file used for focussing raw SAR signal data into a single look complex (SLC) image. Parameters are used to create a header for the SLC image. .TP 10 .I file.PRM parameter file for SAR processor .TP 10 .I file.head gips header file .TP 10 .I [R4] creates header for real*4 SLC rather than the default integer*2 SLC .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /usr/gips/tables/cprofile image header definition file .SH SEE ALSO .B esarp(l) .sp General Image Processing System -- GIPS(tm) by Peter G. Ford, MIT center for Space Research. .br http://delcano.mit.edu/info/gips .SH AUTHOR David T. Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/.svn/pristine/36/36a9b58c956cdd4705b9fe346a723f1a6f6b2706.svn-base000444 015705 000000 00000001542 13505462013 025547 0ustar00sandwellwheel000000 000000 .TH ESARP l "4/10/98 \(co 1996 Evelyn Price" "esarp.l 1.0" "SIOSAR SAR Processor" .SH NAME esarp \- focusses raw signal data into a single-look complex image (SLC). .SH SYNOPSIS .B esarp .I file.PRM file.SLC [R4] .SH DESCRIPTION The .B esarp command reads a parameter PRM file used provide all of the information needed tp process the raw signal data data into a single look complex (SLC) image. Program looks for file.fix, a fixed raw signal file, for an input stream. .TP 10 .I file.PRM parameter file for SAR processor .TP 10 .I file.SLC single-look complex image, 2-integer*2 per pixel .TP 10 .I [R4] option to print output as 2-real*4 per pixel .SH SEE ALSO .B pre_proc(l) ers_baseline(l) offset(l) .SH AUTHOR Evelyn Price and David Sandwell, Scripps Institution of Oceanography. C-code based on JPL-heritage SAR processor soi. .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/.svn/pristine/36/361961b6cd7667a32c11325c05e30e6206edb206.svn-base000444 015705 000000 00000011272 13505462013 025267 0ustar00sandwellwheel000000 000000 9 33 1.8315639e-02 4.3936934e-02 8.2084999e-02 1.1943297e-01 1.3533528e-01 1.1943297e-01 8.2084999e-02 4.3936934e-02 1.8315639e-02 2.3334729e-02 5.5977106e-02 1.0457900e-01 1.5216155e-01 1.7242162e-01 1.5216155e-01 1.0457900e-01 5.5977106e-02 2.3334729e-02 2.9268308e-02 7.0211020e-02 1.3117145e-01 1.9085334e-01 2.1626517e-01 1.9085334e-01 1.3117145e-01 7.0211020e-02 2.9268308e-02 3.6141536e-02 8.6699037e-02 1.6197513e-01 2.3567242e-01 2.6705184e-01 2.3567242e-01 1.6197513e-01 8.6699037e-02 3.6141536e-02 4.3936934e-02 1.0539922e-01 1.9691168e-01 2.8650480e-01 3.2465247e-01 2.8650480e-01 1.9691168e-01 1.0539922e-01 4.3936934e-02 5.2585624e-02 1.2614635e-01 2.3567242e-01 3.4290134e-01 3.8855813e-01 3.4290134e-01 2.3567242e-01 1.2614635e-01 5.2585624e-02 6.1961008e-02 1.4863673e-01 2.7768997e-01 4.0403652e-01 4.5783336e-01 4.0403652e-01 2.7768997e-01 1.4863673e-01 6.1961008e-02 7.1876026e-02 1.7242162e-01 3.2212600e-01 4.6869057e-01 5.3109599e-01 4.6869057e-01 3.2212600e-01 1.7242162e-01 7.1876026e-02 8.2084999e-02 1.9691168e-01 3.6787944e-01 5.3526143e-01 6.0653066e-01 5.3526143e-01 3.6787944e-01 1.9691168e-01 8.2084999e-02 9.2290645e-02 2.2139375e-01 4.1361797e-01 6.0181060e-01 6.8194075e-01 6.0181060e-01 4.1361797e-01 2.2139375e-01 9.2290645e-02 1.0215643e-01 2.4506054e-01 4.5783336e-01 6.6614361e-01 7.5483960e-01 6.6614361e-01 4.5783336e-01 2.4506054e-01 1.0215643e-01 1.1132377e-01 2.6705184e-01 4.9891851e-01 7.2592215e-01 8.2257756e-01 7.2592215e-01 4.9891851e-01 2.6705184e-01 1.1132377e-01 1.1943297e-01 2.8650480e-01 5.3526143e-01 7.7880078e-01 8.8249690e-01 7.7880078e-01 5.3526143e-01 2.8650480e-01 1.1943297e-01 1.2614635e-01 3.0260937e-01 5.6534874e-01 8.2257756e-01 9.3210249e-01 8.2257756e-01 5.6534874e-01 3.0260937e-01 1.2614635e-01 1.3117145e-01 3.1466396e-01 5.8786967e-01 8.5534533e-01 9.6923323e-01 8.5534533e-01 5.8786967e-01 3.1466396e-01 1.3117145e-01 1.3428210e-01 3.2212600e-01 6.0181060e-01 8.7562926e-01 9.9221794e-01 8.7562926e-01 6.0181060e-01 3.2212600e-01 1.3428210e-01 1.3533528e-01 3.2465247e-01 6.0653066e-01 8.8249690e-01 1.0000000e+00 8.8249690e-01 6.0653066e-01 3.2465247e-01 1.3533528e-01 1.3428210e-01 3.2212600e-01 6.0181060e-01 8.7562926e-01 9.9221794e-01 8.7562926e-01 6.0181060e-01 3.2212600e-01 1.3428210e-01 1.3117145e-01 3.1466396e-01 5.8786967e-01 8.5534533e-01 9.6923323e-01 8.5534533e-01 5.8786967e-01 3.1466396e-01 1.3117145e-01 1.2614635e-01 3.0260937e-01 5.6534874e-01 8.2257756e-01 9.3210249e-01 8.2257756e-01 5.6534874e-01 3.0260937e-01 1.2614635e-01 1.1943297e-01 2.8650480e-01 5.3526143e-01 7.7880078e-01 8.8249690e-01 7.7880078e-01 5.3526143e-01 2.8650480e-01 1.1943297e-01 1.1132377e-01 2.6705184e-01 4.9891851e-01 7.2592215e-01 8.2257756e-01 7.2592215e-01 4.9891851e-01 2.6705184e-01 1.1132377e-01 1.0215643e-01 2.4506054e-01 4.5783336e-01 6.6614361e-01 7.5483960e-01 6.6614361e-01 4.5783336e-01 2.4506054e-01 1.0215643e-01 9.2290645e-02 2.2139375e-01 4.1361797e-01 6.0181060e-01 6.8194075e-01 6.0181060e-01 4.1361797e-01 2.2139375e-01 9.2290645e-02 8.2084999e-02 1.9691168e-01 3.6787944e-01 5.3526143e-01 6.0653066e-01 5.3526143e-01 3.6787944e-01 1.9691168e-01 8.2084999e-02 7.1876026e-02 1.7242162e-01 3.2212600e-01 4.6869057e-01 5.3109599e-01 4.6869057e-01 3.2212600e-01 1.7242162e-01 7.1876026e-02 6.1961008e-02 1.4863673e-01 2.7768997e-01 4.0403652e-01 4.5783336e-01 4.0403652e-01 2.7768997e-01 1.4863673e-01 6.1961008e-02 5.2585624e-02 1.2614635e-01 2.3567242e-01 3.4290134e-01 3.8855813e-01 3.4290134e-01 2.3567242e-01 1.2614635e-01 5.2585624e-02 4.3936934e-02 1.0539922e-01 1.9691168e-01 2.8650480e-01 3.2465247e-01 2.8650480e-01 1.9691168e-01 1.0539922e-01 4.3936934e-02 3.6141536e-02 8.6699037e-02 1.6197513e-01 2.3567242e-01 2.6705184e-01 2.3567242e-01 1.6197513e-01 8.6699037e-02 3.6141536e-02 2.9268308e-02 7.0211020e-02 1.3117145e-01 1.9085334e-01 2.1626517e-01 1.9085334e-01 1.3117145e-01 7.0211020e-02 2.9268308e-02 2.3334729e-02 5.5977106e-02 1.0457900e-01 1.5216155e-01 1.7242162e-01 1.5216155e-01 1.0457900e-01 5.5977106e-02 2.3334729e-02 1.8315639e-02 4.3936934e-02 8.2084999e-02 1.1943297e-01 1.3533528e-01 1.1943297e-01 8.2084999e-02 4.3936934e-02 1.8315639e-02 GMTSAR_V5.7/.svn/pristine/9a/9a55c1593d35ea929d31cb1b97200a08175182bc.svn-base000444 015705 000000 00000001113 13505462014 025433 0ustar00sandwellwheel000000 000000 include ../../config.mk DIRS = ers_line_fixer read_data_file_dpaf read_data_file_ccrs read_sarleader_dpaf SCRIPT = scripts all: for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done $(INSTALL) $(SCRIPT)/dump_orbit_ers.pl $(bindir) $(INSTALL) $(SCRIPT)/ERS_pre_process $(bindir) uninstall: for d in $(DIRS); do \ (cd $$d; $(MAKE) uninstall); \ done rm -f $(bindir)/dump_orbit_ers.pl rm -f $(bindir)/ERS_pre_process clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done spotless: clean GMTSAR_V5.7/.svn/pristine/6e/6e645d2310faaa48ec01f5d5e1688ae8a0b6a3ee.svn-base000444 015705 000000 00000004751 13505462014 026107 0ustar00sandwellwheel000000 000000 # # $Id$ # # To modify the cmake process: Edit your cmake/ConfigUser.cmake file # # To build out-of-source do (example): # # mkdir build # cd build # cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. # # CMAKE_BUILD_TYPE can be: empty, Debug, Release, RelWithDebInfo or MinSizeRel # # Make sure the user doesn't play dirty with symlinks get_filename_component (srcdir "${CMAKE_SOURCE_DIR}" REALPATH) get_filename_component (bindir "${CMAKE_BINARY_DIR}" REALPATH) # Disallow in-source builds if (${srcdir} STREQUAL ${bindir}) message(FATAL_ERROR "In-source builds are not allowed. " "Please create a directory and run cmake from there, passing the path " "to this source directory as the last argument. This process created " "the file `CMakeCache.txt' and the directory `CMakeFiles' in ${srcdir}. " "Please remove them.") endif (${srcdir} STREQUAL ${bindir}) # Define minimum CMake version required cmake_minimum_required (VERSION 2.8.5) # Use NEW behavior with newer CMake releases foreach(p CMP0025 # CMake 3.0: Compiler id for Apple Clang is now AppleClang ) if(POLICY ${p}) cmake_policy(SET ${p} NEW) endif() endforeach() # Define project name and language project (GMTSAR C) # Where to find our CMake modules (this variable is visible in subdirectories). set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules/" CACHE INTERNAL "Location of our custom CMake modules." FORCE) # Include configuration options (default options and options overridden by user). include (ConfigCMake) # Find UNIX commands include (FindUnixCommands) find_program (SVN svn) find_program (GS gs gswin64) # Find dependent libraries find_package (GMT REQUIRED) find_package (TIFF REQUIRED) find_package (LAPACK REQUIRED) # check for math and POSIX functions include(ConfigureChecks) # Add subdirectories add_subdirectory (gmtsar) add_subdirectory (snaphu/src) add_subdirectory (preproc) # Configuration done message( "* Options:\n" "* GMT library : ${GMT_LIBRARY}\n" "* GMT include dir : ${GMT_INCLUDE_DIR}\n" "* TIFF library : ${TIFF_LIBRARY}\n" "* LAPACK library : ${LAPACK_LIBRARIES} ${LAPACK_lapack_LIBRARY}\n" "*\n" "* Locations:\n" "* Installing GMTSAR in : ${CMAKE_INSTALL_PREFIX}\n" ) # For debugging: print all set variables #get_cmake_property(_variableNames VARIABLES) #foreach (_variableName ${_variableNames}) # message(STATUS "${_variableName}=${${_variableName}}") #endforeach() # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/.svn/pristine/6e/6e4327fabeceaf4375d057ddbf6e34128ede689a.svn-base000444 015705 000000 00000004461 13505462014 026214 0ustar00sandwellwheel000000 000000 #ifndef EPR_DDDB_H_INCL #define EPR_DDDB_H_INCL #include "epr_api.h" #ifdef __cplusplus extern "C" { #endif struct RecordDescriptor { const char* id; const EPR_EDataTypeId type; const char* unit; const int elem_size; const char* num_elem; const char* description; }; struct DatasetDescriptor { const char* id; const char* ds_name; const struct RecordDescriptor* rec_descriptor; const char* description; }; struct BandDescriptor { const char* id; const char* rec_name; const EPR_ESampleModel sample_offset; const EPR_EDataTypeId type; const int spectral_index; const EPR_EScalingMethod scale_method; const char* scale_offset; const char* scale_factor; const char* bitmask_expr; const char* flag_coding_name; const char* unit; const char* description; }; struct FlagDescriptor { const char* id; const int num_indices; const int bit_indices[2]; const char* description; }; struct DatasetDescriptorTable { const char* name; const char* description; int num_descriptors; const struct DatasetDescriptor* descriptors; }; struct BandDescriptorTable { const char* name; const char* description; int num_descriptors; const struct BandDescriptor* descriptors; }; struct FlagDescriptorTable { const char* name; const char* description; int num_descriptors; const struct FlagDescriptor* descriptors; }; struct RecordDescriptorTable { const char* name; const char* description; int num_descriptors; const struct RecordDescriptor* descriptors; }; extern const struct DatasetDescriptorTable dddb_product_tables[46]; extern const struct BandDescriptorTable dddb_band_tables[37]; extern const struct FlagDescriptorTable dddb_flag_coding_tables[6]; extern const struct RecordDescriptorTable dddb_meris_rec_tables[23]; extern const struct RecordDescriptorTable dddb_aatsr_rec_tables[20]; extern const struct RecordDescriptorTable dddb_asar_rec_tables[20]; #define EPR_NUM_PRODUCT_TABLES 46 #define EPR_NUM_BAND_TABLES 37 #define EPR_NUM_FLAG_CODING_TABLES 6 #define EPR_NUM_MERIS_REC_TABLES 23 #define EPR_NUM_AATSR_REC_TABLES 20 #define EPR_NUM_ASAR_REC_TABLES 20 #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_DDDB_H_INCL */ GMTSAR_V5.7/.svn/pristine/00/008a02d00215debcd99f76dd0969b0981faf6a25.svn-base000444 015705 000000 00000015605 13505462013 025601 0ustar00sandwellwheel000000 000000 // // split_aperture.c // // // Created by Xiaohua Xu on 1/30/19. // // Program used for creating along-track multi-aperture interferogram // /*************************************************************************** * Modification history: * * * * DATE * ***************************************************************************/ #include "gmt.h" #include "gmtsar.h" #include #include #include #include #include #include int write_column_slc(short *, short *, int, int, int); int read_column_slc(short *, short *, int, int, int, int); fcomplex fmean(short *, int); char *USAGE = "\nUSAGE: split_aperture prm_file\n\n" " program used to split azimuth spectrum.\n\n" " SLCs are bandpassed output is SLCF (forward) SLCB (backward)\n\n"; int main(int argc, char **argv) { if (argc != 2) die("",USAGE); FILE *SLC, *SLC_F, *SLC_B; struct PRM p1; int nl,num_rng_bins,i,j,fin, fout_f, fout_b, nffti; char str_f[1024],str_b[1024]; short *buf, *buf_f, *buf_b; short *in, *out_f, *out_b; fcomplex *fbuf, *fbuf_f, *fbuf_b,fm; size_t st_size; void *API = NULL; double f_f=0.0, f_b=0.0, w_f=0.0, w_b=0.0, prf; if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; // read in PRM file get_prm(&p1,argv[1]); nl = p1.num_valid_az * p1.num_patches; num_rng_bins = p1.num_rng_bins; prf = p1.prf; nffti = find_fft_length(nl); // open all SLCs if ((SLC = fopen(p1.SLC_file, "rb")) == NULL) die("Can't open ", p1.SLC_file); strcpy(str_f,p1.SLC_file); strcat(str_f,"F"); if ((SLC_F = fopen(str_f, "wb")) == NULL) die("Can't open ", str_f); strcpy(str_b,p1.SLC_file); strcat(str_b,"B"); if ((SLC_B = fopen(str_b, "wb")) == NULL) die("Can't open ", str_b); // malloc buf buf = (short *)malloc(nffti * 2 * sizeof(short)); buf_f = (short *)malloc(nl * 2 * sizeof(short)); buf_b = (short *)malloc(nl * 2 * sizeof(short)); fbuf = (fcomplex *)malloc(nffti * sizeof(fcomplex)); fbuf_f = (fcomplex *)malloc(nffti * sizeof(fcomplex)); fbuf_b = (fcomplex *)malloc(nffti * sizeof(fcomplex)); // write original image fprintf(stderr,"Duplicating original SLCs (%d X %d) ...\n",nl,num_rng_bins); for (i=0;i #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" /****************************** RESULTS OUTPUT ******************************/ /** * Dumps the record content to stdout. * * @param record the pointer to the record to be printed out. */ void epr_dump_record(const EPR_SRecord* record) { epr_print_record(record, stdout); } /** * Dumps the record content to an output FILE stream. * * @param record the pointer to the record to be printed out. * @param ostream the identifier of the output file. */ void epr_print_record(const EPR_SRecord* record, FILE* ostream) { uint field_index; EPR_SField* field = NULL; epr_clear_err(); for (field_index = 0; field_index < record->num_fields; field_index++) { field = record->fields[field_index]; epr_print_field(field, ostream); } } /** * Dumps the field content to stdout. * * @param field the pointer to the field to be printed out */ void epr_dump_field(const EPR_SField* field) { epr_print_field(field, stdout); } /** * Gets the field content to output FILE stream. * * @param field the pointer to the field to be printed out * @param ostream the identifier of the output file. */ void epr_print_field(const EPR_SField* field, FILE* ostream) { uint i; epr_clear_err(); fprintf(ostream, "%s = ", field->info->name); if (field->info->data_type_id == e_tid_string) { fprintf(ostream, "\"%s\"", (const char*) field->elems); /* fprintf(ostream, "\""); for (i = 0; i < field->info->num_elems; i++) { fprintf(ostream, "%c", ((char*) field->elems)[i]); } fprintf(ostream, "\""); */ } else if (field->info->data_type_id == e_tid_time) { EPR_STime* time = (EPR_STime*) field->elems; fprintf(ostream, "{d=%d, j=%d, m=%d}", time->days, time->seconds, time->microseconds); } else { if (field->info->num_elems > 1) { fprintf(ostream, "{"); } for (i = 0; i < field->info->num_elems; i++) { if (i > 0) fprintf(ostream, ", "); switch (field->info->data_type_id) { case e_tid_uchar: fprintf(ostream, "%u", ((uchar*) field->elems)[i]); break; case e_tid_char: fprintf(ostream, "%d", ((char*) field->elems)[i]); break; case e_tid_ushort: fprintf(ostream, "%u", ((ushort*) field->elems)[i]); break; case e_tid_short: fprintf(ostream, "%d", ((short*) field->elems)[i]); break; case e_tid_uint: fprintf(ostream, "%u", ((uint*) field->elems)[i]); break; case e_tid_int: fprintf(ostream, "%d", ((int*) field->elems)[i]); break; case e_tid_float: fprintf(ostream, "%f", ((float*) field->elems)[i]); break; case e_tid_double: fprintf(ostream, "%f", ((double*) field->elems)[i]); break; default: fprintf(ostream, "<>"); } } if (field->info->num_elems > 1) { fprintf(ostream, "}"); } } fprintf(ostream, "\n"); } /** * Dumps the element content to stdout. * * @param record the pointer to the element to be printed out. */ void epr_dump_element(const EPR_SRecord* record, uint field_index, uint element_index) { epr_print_element(record, field_index, element_index, stdout); } /** * Dumps the element content to an output FILE stream.. * * @param record the pointer to the element to be written out. */ void epr_print_element(const EPR_SRecord* record, uint field_index, uint element_index, FILE* ostream) { EPR_SField* field = NULL; epr_clear_err(); if (field_index >= record->num_fields) { epr_set_err(e_err_illegal_arg, "epr_print_element: element_index too large"); return; } field = record->fields[field_index]; if (element_index >= field->info->num_elems) { epr_set_err(e_err_illegal_arg, "epr_print_element: element_index too large"); return; } fprintf(ostream, "%s [%d][%d] = ", field->info->name, field_index, element_index); if (field->info->data_type_id == e_tid_string) { fprintf(ostream, "\""); fprintf(ostream, "%c", ((char*) field->elems)[element_index]); fprintf(ostream, "\""); } else if (field->info->data_type_id == e_tid_time) { EPR_STime* time = (EPR_STime*) field->elems; fprintf(ostream, "{d=%d, j=%d, m=%d}", time->days, time->seconds, time->microseconds); } else { fprintf(ostream, "{ "); switch (field->info->data_type_id) { case e_tid_uchar: fprintf(ostream, "%u", ((uchar*) field->elems)[element_index]); break; case e_tid_char: fprintf(ostream, "%d", ((char*) field->elems)[element_index]); break; case e_tid_ushort: fprintf(ostream, "%u", ((ushort*) field->elems)[element_index]); break; case e_tid_short: fprintf(ostream, "%d", ((short*) field->elems)[element_index]); break; case e_tid_uint: fprintf(ostream, "%u", ((uint*) field->elems)[element_index]); break; case e_tid_int: fprintf(ostream, "%d", ((int*) field->elems)[element_index]); break; case e_tid_float: fprintf(ostream, "%f", ((float*) field->elems)[element_index]); break; case e_tid_double: fprintf(ostream, "%f", ((double*) field->elems)[element_index]); break; default: fprintf(ostream, "<>"); } fprintf(ostream, " }"); } fprintf(ostream, " [%s]\n", field->info->unit); } GMTSAR_V5.7/.svn/pristine/00/0071224c2e0d5389bcd3eb181c26118975c490e9.svn-base000444 015705 000000 00000127653 13505462013 025307 0ustar00sandwellwheel000000 000000 0 -0.000000 0.000000 0.000000 -0.000000 1 -0.000000 0.000000 -0.000000 0.000000 2 -0.000000 0.000000 0.000000 -0.000000 3 -0.000000 0.000000 -0.000000 0.000000 4 -0.000000 0.000000 0.000000 -0.000000 5 -0.000000 0.000000 -0.000000 0.000000 6 -0.000000 0.000000 0.000000 -0.000000 7 -0.000000 0.000000 -0.000000 0.000000 8 -0.000000 0.000000 0.000000 -0.000000 9 -0.000000 0.000000 -0.000000 0.000000 10 -0.000000 0.000000 0.000000 -0.000000 11 -0.000000 0.000000 -0.000000 0.000000 12 -0.000000 0.000000 0.000000 -0.000000 13 -0.000000 0.000000 -0.000000 0.000000 14 -0.000000 0.000000 0.000000 -0.000000 15 -0.000000 0.000000 -0.000000 0.000000 16 -0.000000 0.000000 0.000000 -0.000000 17 -0.000000 0.000000 0.000000 0.000000 18 -0.000000 0.000000 0.000000 -0.000000 19 -0.000000 0.000000 -0.000000 0.000000 20 -0.000000 0.000000 -0.000000 0.000000 21 -0.000000 0.000000 0.000000 -0.000000 22 -0.000000 0.000000 0.000000 -0.000000 23 -0.000000 0.000000 -0.000000 0.000000 24 -0.000000 0.000000 0.000000 -0.000000 25 -0.000000 0.000000 -0.000000 0.000000 26 -0.000000 0.000000 0.000000 -0.000000 27 -0.000000 0.000000 -0.000000 0.000000 28 -0.000000 0.000000 0.000000 -0.000000 29 -0.000000 0.000000 -0.000000 0.000000 30 -0.000000 0.000000 0.000000 -0.000000 31 -0.000000 0.000000 -0.000000 0.000000 32 -0.000000 0.000000 0.000000 -0.000000 33 -0.000000 0.000000 -0.000000 -0.000000 34 -0.000000 0.000000 0.000000 -0.000000 35 -0.000000 0.000000 -0.000000 0.000000 36 -0.000000 0.000000 0.000000 -0.000000 37 -0.000000 0.000000 0.000000 -0.000000 38 -0.000000 0.000000 0.000000 -0.000000 39 -0.000000 0.000000 -0.000000 0.000000 40 -0.000000 0.000000 -0.000000 0.000000 41 -0.000000 0.000000 0.000000 -0.000000 42 -0.000000 0.000000 0.000000 -0.000000 43 -0.000000 0.000000 -0.000000 0.000000 44 -0.000000 0.000000 -0.000000 0.000000 45 -0.000000 0.000000 0.000000 -0.000000 46 -0.000000 0.000000 0.000000 -0.000000 47 -0.000000 0.000000 -0.000000 0.000000 48 -0.000000 0.000000 -0.000000 0.000000 49 -0.000000 0.000000 -0.000000 0.000000 50 -0.000000 0.000000 0.000000 -0.000000 51 -0.000000 0.000000 0.000000 -0.000000 52 -0.000000 0.000000 -0.000000 0.000000 53 -0.000000 0.000000 -0.000000 0.000000 54 -0.000000 0.000000 0.000000 -0.000000 55 -0.000000 0.000000 0.000000 -0.000000 56 -0.000000 0.000000 0.000000 -0.000000 57 -0.000000 0.000000 -0.000000 0.000000 58 -0.000000 0.000000 -0.000000 0.000000 59 -0.000000 0.000000 0.000000 -0.000000 60 -0.000000 0.000000 0.000000 -0.000000 61 -0.000000 0.000000 -0.000000 0.000000 62 -0.000000 0.000000 -0.000000 0.000000 63 -0.000000 0.000000 0.000000 -0.000000 64 -0.000000 0.000000 0.000000 -0.000000 65 -0.000000 0.000000 -0.000000 0.000000 66 -0.000000 0.000000 -0.000000 0.000000 67 -0.000000 0.000000 -0.000000 0.000000 68 -0.000000 0.000000 0.000000 -0.000000 69 -0.000000 0.000000 -0.000000 0.000000 70 -0.000000 0.000000 0.000000 -0.000000 71 -0.000000 0.000000 -0.000000 0.000000 72 -0.000000 0.000000 0.000000 -0.000000 73 -0.000000 0.000000 -0.000000 0.000000 74 -0.000000 0.000000 0.000000 -0.000000 75 -0.000000 0.000000 -0.000000 0.000000 76 -0.000000 0.000000 0.000000 -0.000000 77 -0.000000 0.000000 -0.000000 0.000000 78 -0.000000 0.000000 0.000000 -0.000000 79 -0.000000 0.000000 0.000000 -0.000000 80 -0.000000 0.000000 0.000000 -0.000000 81 -0.000000 0.000000 -0.000000 0.000000 82 -0.000000 0.000000 -0.000000 0.000000 83 -0.000000 0.000000 -0.000000 0.000000 84 -0.000000 0.000000 0.000000 -0.000000 85 -0.000000 0.000000 -0.000000 0.000000 86 -0.000000 0.000000 0.000000 -0.000000 87 -0.000000 0.000000 -0.000000 0.000000 88 -0.000000 0.000000 0.000000 -0.000000 89 -0.000000 0.000000 -0.000000 0.000000 90 -0.000000 0.000000 0.000000 -0.000000 91 -0.000000 0.000000 -0.000000 0.000000 92 -0.000000 0.000000 0.000000 -0.000000 93 -0.000000 0.000000 -0.000000 0.000000 94 -0.000000 0.000000 0.000000 -0.000000 95 -0.000000 0.000000 -0.000000 0.000000 96 -0.000000 0.000000 0.000000 -0.000000 97 -0.000000 0.000000 -0.000000 0.000000 98 -0.000000 0.000000 0.000000 -0.000000 99 -0.000000 0.000000 -0.000000 0.000000 100 -0.000000 0.000000 0.000000 -0.000000 101 -0.000000 0.000000 -0.000000 0.000000 102 -0.000000 0.000000 0.000000 -0.000000 103 -0.000000 0.000000 0.000000 -0.000000 104 -0.000000 0.000000 0.000000 -0.000000 105 -0.000000 0.000000 -0.000000 0.000000 106 -0.000000 0.000000 -0.000000 0.000000 107 -0.000000 0.000000 -0.000000 0.000000 108 -0.000000 0.000000 0.000000 -0.000000 109 -0.000000 0.000000 -0.000000 0.000000 110 -0.000000 0.000000 0.000000 -0.000000 111 -0.000000 0.000000 -0.000000 0.000000 112 -0.000000 0.000000 0.000000 -0.000000 113 -0.000000 0.000000 -0.000000 0.000000 114 -0.000000 0.000000 0.000000 -0.000000 115 -0.000000 0.000000 -0.000000 0.000000 116 -0.000000 0.000000 0.000000 -0.000000 117 -0.000000 0.000000 -0.000000 0.000000 118 -0.000000 0.000000 0.000000 -0.000000 119 -0.000000 0.000000 -0.000000 0.000000 120 -0.000000 0.000000 0.000000 -0.000000 121 -0.000000 0.000000 -0.000000 0.000000 122 -0.000000 0.000000 -0.000000 0.000000 123 -0.000000 0.000000 -0.000000 0.000000 124 -0.000000 0.000000 0.000000 -0.000000 125 -0.000000 0.000000 -0.000000 0.000000 126 -0.000000 0.000000 0.000000 -0.000000 127 -0.000000 0.000000 -0.000000 0.000000 128 -0.000000 0.000000 0.000000 -0.000000 129 -0.000000 0.000000 -0.000000 0.000000 130 -0.000000 0.000000 0.000000 -0.000000 131 -0.000000 0.000000 -0.000000 0.000000 132 -0.000000 0.000000 0.000000 -0.000000 133 -0.000000 0.000000 -0.000000 0.000000 134 -0.000000 0.000000 0.000000 -0.000000 135 -0.000000 0.000000 -0.000000 0.000000 136 -0.000000 0.000000 0.000000 -0.000000 137 -0.000000 0.000000 -0.000000 0.000000 138 -0.000000 0.000000 0.000000 -0.000000 139 -0.000000 0.000000 -0.000000 0.000000 140 -0.000000 0.000000 0.000000 -0.000000 141 -0.000000 0.000000 -0.000000 0.000000 142 -0.000000 0.000000 0.000000 -0.000000 143 -0.000000 0.000000 -0.000000 0.000000 144 -0.000000 0.000000 0.000000 -0.000000 145 -0.000000 0.000000 -0.000000 0.000000 146 -0.000000 0.000000 0.000000 -0.000000 147 -0.000000 0.000000 -0.000000 0.000000 148 -0.000000 0.000000 0.000000 -0.000000 149 -0.000000 0.000000 -0.000000 0.000000 150 -0.000000 0.000000 0.000000 -0.000000 151 -0.000000 0.000000 -0.000000 0.000000 152 -0.000000 0.000000 0.000000 -0.000000 153 -0.000000 0.000000 -0.000000 0.000000 154 -0.000000 0.000000 0.000000 -0.000000 155 -0.000000 0.000000 -0.000000 0.000000 156 -0.000000 0.000000 0.000000 -0.000000 157 -0.000000 0.000000 -0.000000 0.000000 158 -0.000000 0.000000 0.000000 -0.000000 159 -0.000000 0.000000 -0.000000 0.000000 160 -0.000000 0.000000 0.000000 -0.000000 161 -0.000000 0.000000 -0.000000 0.000000 162 -0.000000 0.000000 -0.000000 -0.000000 163 -0.000000 0.000000 -0.000000 0.000000 164 -0.000000 0.000000 0.000000 -0.000000 165 -0.000000 0.000000 -0.000000 0.000000 166 -0.000000 0.000000 0.000000 -0.000000 167 -0.000000 0.000000 -0.000000 0.000000 168 -0.000000 0.000000 0.000000 -0.000000 169 -0.000000 0.000000 -0.000000 0.000000 170 -0.000000 0.000000 0.000000 -0.000000 171 -0.000000 0.000000 -0.000000 0.000000 172 -0.000000 0.000000 0.000000 -0.000000 173 -0.000000 0.000000 -0.000000 0.000000 174 -0.000000 0.000000 0.000000 -0.000000 175 -0.000000 0.000000 -0.000000 0.000000 176 -0.000000 0.000000 0.000000 -0.000000 177 -0.000000 0.000000 -0.000000 0.000000 178 -0.000000 0.000000 0.000000 -0.000000 179 -0.000000 0.000000 -0.000000 0.000000 180 -0.000000 0.000000 0.000000 -0.000000 181 -0.000000 0.000000 -0.000000 0.000000 182 -0.000000 0.000000 0.000000 -0.000000 183 -0.000000 0.000000 -0.000000 0.000000 184 -0.000000 0.000000 0.000000 -0.000000 185 -0.000000 0.000000 -0.000000 0.000000 186 -0.000000 0.000000 0.000000 -0.000000 187 -0.000000 0.000000 -0.000000 0.000000 188 -0.000000 0.000000 0.000000 -0.000000 189 -0.000000 0.000000 -0.000000 0.000000 190 -0.000000 0.000000 0.000000 -0.000000 191 -0.000000 0.000000 -0.000000 0.000000 192 -0.000000 0.000000 0.000000 -0.000000 193 -0.000000 0.000000 -0.000000 0.000000 194 -0.000000 0.000000 0.000000 -0.000000 195 -0.000000 0.000000 -0.000000 0.000000 196 -0.000000 0.000000 0.000000 -0.000000 197 -0.000000 0.000000 -0.000000 0.000000 198 -0.000000 0.000000 0.000000 -0.000000 199 -0.000000 0.000000 -0.000000 0.000000 200 -0.000000 0.000000 0.000000 -0.000000 201 -0.000000 0.000000 -0.000000 0.000000 202 -0.000000 0.000000 0.000000 -0.000000 203 -0.000000 0.000000 -0.000000 0.000000 204 -0.000000 0.000000 0.000000 -0.000000 205 -0.000000 0.000000 -0.000000 0.000000 206 -0.000000 0.000000 0.000000 -0.000000 207 -0.000000 0.000000 -0.000000 0.000000 208 -0.000000 0.000000 0.000000 -0.000000 209 -0.000000 0.000000 -0.000000 0.000000 210 -0.000000 0.000000 0.000000 -0.000000 211 -0.000000 0.000000 -0.000000 0.000000 212 -0.000000 0.000000 0.000000 -0.000000 213 -0.000000 0.000000 -0.000000 0.000000 214 -0.000000 0.000000 0.000000 -0.000000 215 -0.000000 0.000000 -0.000000 0.000000 216 -0.000000 0.000000 0.000000 -0.000000 217 -0.000000 0.000000 -0.000000 0.000000 218 -0.000000 0.000000 0.000000 -0.000000 219 -0.000000 0.000000 -0.000000 0.000000 220 -0.000000 0.000000 0.000000 -0.000000 221 -0.000000 0.000000 -0.000000 0.000000 222 -0.000000 0.000000 0.000000 -0.000000 223 -0.000000 0.000000 -0.000000 0.000000 224 -0.000000 0.000000 0.000000 -0.000000 225 -0.000000 0.000000 -0.000000 0.000000 226 -0.000000 0.000000 0.000000 -0.000000 227 -0.000000 0.000000 -0.000000 0.000000 228 -0.000000 0.000000 0.000000 -0.000000 229 -0.000000 0.000000 -0.000000 0.000000 230 -0.000000 0.000000 0.000000 -0.000000 231 -0.000000 0.000000 -0.000000 0.000000 232 -0.000000 0.000000 0.000000 -0.000000 233 -0.000000 0.000000 -0.000000 0.000000 234 -0.000000 0.000000 0.000000 -0.000000 235 -0.000000 0.000000 -0.000000 0.000000 236 -0.000000 0.000000 0.000000 -0.000000 237 -0.000000 0.000000 -0.000000 0.000000 238 -0.000000 0.000000 0.000000 -0.000000 239 -0.000000 0.000000 -0.000000 0.000000 240 -0.000000 0.000000 0.000000 -0.000000 241 -0.000000 0.000000 -0.000000 0.000000 242 -0.000000 0.000000 0.000000 -0.000000 243 -0.000000 0.000000 -0.000000 0.000000 244 -0.000000 0.000000 0.000000 -0.000000 245 -0.000000 0.000000 -0.000000 0.000000 246 -0.000000 0.000000 0.000000 -0.000000 247 -0.000000 0.000000 -0.000000 0.000000 248 -0.000000 0.000000 0.000000 -0.000000 249 -0.000000 0.000000 -0.000000 0.000000 250 -0.000000 0.000000 0.000000 -0.000000 251 -0.000000 0.000000 -0.000000 0.000000 252 -0.000000 0.000000 0.000000 -0.000000 253 -0.000000 0.000000 -0.000000 0.000000 254 -0.000000 0.000000 0.000000 -0.000000 255 -0.000000 0.000000 -0.000000 0.000000 256 -0.000000 0.000000 0.000000 -0.000000 257 -0.000000 0.000000 -0.000000 0.000000 258 -0.000000 0.000000 0.000000 -0.000000 259 -0.000000 0.000000 -0.000000 0.000000 260 -0.000000 0.000000 0.000000 -0.000000 261 -0.000000 0.000000 -0.000000 0.000000 262 -0.000000 0.000000 0.000000 -0.000000 263 -0.000000 0.000000 -0.000000 0.000000 264 -0.000000 0.000000 0.000000 -0.000000 265 -0.000000 0.000000 -0.000000 0.000000 266 -0.000000 0.000000 0.000000 -0.000000 267 -0.000000 0.000000 -0.000000 0.000000 268 -0.000000 0.000000 0.000000 -0.000000 269 -0.000000 0.000000 -0.000000 0.000000 270 -0.000000 0.000000 0.000000 -0.000000 271 -0.000000 0.000000 -0.000000 0.000000 272 -0.000000 0.000000 0.000000 -0.000000 273 -0.000000 0.000000 -0.000000 0.000000 274 -0.000000 0.000000 0.000000 -0.000000 275 -0.000000 0.000000 -0.000000 0.000000 276 -0.000000 0.000000 0.000000 -0.000000 277 -0.000000 0.000000 -0.000000 0.000000 278 -0.000000 0.000000 0.000000 -0.000000 279 -0.000000 0.000000 -0.000000 0.000000 280 -0.000000 0.000000 0.000000 -0.000000 281 -0.000000 0.000000 -0.000000 0.000000 282 -0.000000 0.000000 0.000000 -0.000000 283 -0.000000 0.000000 -0.000000 0.000000 284 -0.000000 0.000000 0.000000 -0.000000 285 -0.000000 0.000000 -0.000000 0.000000 286 -0.000000 0.000000 0.000000 -0.000000 287 -0.000000 0.000000 -0.000000 0.000000 288 -0.000000 0.000000 0.000000 -0.000000 289 -0.000000 0.000000 -0.000000 0.000000 290 -0.000000 0.000000 0.000000 -0.000000 291 -0.000000 0.000000 -0.000000 0.000000 292 -0.000000 0.000000 0.000000 -0.000000 293 -0.000000 0.000000 -0.000000 0.000000 294 -0.000000 0.000000 0.000000 -0.000000 295 -0.000000 0.000000 -0.000000 0.000000 296 -0.000000 0.000000 0.000000 -0.000000 297 -0.000000 0.000000 -0.000000 0.000000 298 -0.000000 0.000000 0.000000 -0.000000 299 -0.000000 0.000000 -0.000000 0.000000 300 -0.000000 0.000000 0.000000 -0.000000 301 -0.000000 0.000000 -0.000000 0.000000 302 -0.000000 0.000000 0.000000 -0.000000 303 -0.000000 0.000000 -0.000000 0.000000 304 -0.000000 0.000000 0.000000 -0.000000 305 -0.000000 0.000000 -0.000000 0.000000 306 -0.000000 0.000000 0.000000 -0.000000 307 -0.000000 0.000000 -0.000000 0.000000 308 -0.000000 0.000000 0.000000 -0.000000 309 -0.000000 0.000000 -0.000000 0.000000 310 -0.000000 0.000000 0.000000 -0.000000 311 -0.000000 0.000000 -0.000000 0.000000 312 -0.000000 0.000000 0.000000 -0.000000 313 -0.000000 0.000000 -0.000000 0.000000 314 -0.000000 0.000000 0.000000 -0.000000 315 -0.000000 0.000000 -0.000000 0.000000 316 -0.000000 0.000000 0.000000 -0.000000 317 -0.000000 0.000000 -0.000000 0.000000 318 -0.000000 0.000000 0.000000 -0.000000 319 -0.000000 0.000000 -0.000000 0.000000 320 -0.000000 0.000000 0.000000 -0.000000 321 -0.000000 0.000000 -0.000000 0.000000 322 -0.000000 0.000000 0.000000 -0.000000 323 -0.000000 0.000000 -0.000000 0.000000 324 -0.000000 0.000000 0.000000 -0.000000 325 -0.000000 0.000000 -0.000000 0.000000 326 -0.000000 0.000000 0.000000 -0.000000 327 -0.000000 0.000000 -0.000000 0.000000 328 -0.000000 0.000000 0.000000 -0.000000 329 -0.000000 0.000000 -0.000000 0.000000 330 -0.000000 0.000000 0.000000 -0.000000 331 -0.000000 0.000000 -0.000000 0.000000 332 -0.000000 0.000000 0.000000 -0.000000 333 -0.000000 0.000000 -0.000000 0.000000 334 -0.000000 0.000000 0.000000 -0.000000 335 -0.000000 0.000000 -0.000000 0.000000 336 -0.000000 0.000000 0.000000 -0.000000 337 -0.000000 0.000000 -0.000000 0.000000 338 -0.000000 0.000000 0.000000 -0.000000 339 -0.000000 0.000000 -0.000000 0.000000 340 -0.000000 0.000000 0.000000 -0.000000 341 -0.000000 0.000000 -0.000000 0.000000 342 -0.000000 0.000000 0.000000 -0.000000 343 -0.000000 0.000000 -0.000000 0.000000 344 -0.000000 0.000000 0.000000 -0.000000 345 -0.000000 0.000000 -0.000000 0.000000 346 -0.000000 0.000000 0.000000 -0.000000 347 -0.000000 0.000000 -0.000000 0.000000 348 -0.000000 0.000000 0.000000 -0.000000 349 -0.000000 0.000000 -0.000000 0.000000 350 -0.000000 0.000000 0.000000 -0.000000 351 -0.000000 0.000000 -0.000000 0.000000 352 -0.000000 0.000000 0.000000 -0.000000 353 -0.000000 0.000000 -0.000000 0.000000 354 -0.000000 0.000000 0.000000 -0.000000 355 -0.000000 0.000000 -0.000000 0.000000 356 -0.000000 0.000000 0.000000 -0.000000 357 -0.000000 0.000000 -0.000000 0.000000 358 -0.000000 0.000000 0.000000 -0.000000 359 -0.000000 0.000000 -0.000000 0.000000 360 -0.000000 0.000000 0.000000 -0.000000 361 -0.000000 0.000000 -0.000000 0.000000 362 -0.000000 0.000000 0.000000 -0.000000 363 -0.000000 0.000000 -0.000000 0.000000 364 -0.000000 0.000000 0.000000 -0.000000 365 -0.000000 0.000000 -0.000000 0.000000 366 -0.000000 0.000000 0.000000 -0.000000 367 -0.000000 0.000000 -0.000000 0.000000 368 -0.000000 0.000000 0.000000 -0.000000 369 -0.000000 0.000000 -0.000000 0.000000 370 -0.000000 0.000000 0.000000 -0.000000 371 -0.000000 0.000000 -0.000000 0.000000 372 -0.000000 0.000000 0.000000 -0.000000 373 -0.000000 0.000000 -0.000000 0.000000 374 -0.000000 0.000000 0.000000 -0.000000 375 -0.000000 0.000000 -0.000000 0.000000 376 -0.000000 0.000000 0.000000 -0.000000 377 -0.000000 0.000000 -0.000000 0.000000 378 -0.000000 0.000000 0.000000 -0.000000 379 -0.000000 0.000000 -0.000000 0.000000 380 -0.000000 0.000000 0.000000 -0.000000 381 -0.000000 0.000000 -0.000000 0.000000 382 -0.000000 0.000000 0.000000 -0.000000 383 -0.000000 0.000000 -0.000000 0.000000 384 -0.000000 0.000000 0.000000 -0.000000 385 -0.000000 0.000000 -0.000000 0.000000 386 -0.000000 0.000000 0.000000 -0.000000 387 -0.000000 0.000000 -0.000000 0.000000 388 -0.000000 0.000000 0.000000 -0.000000 389 -0.000000 0.000000 -0.000000 0.000000 390 -0.000000 0.000000 0.000000 -0.000000 391 -0.000000 0.000000 -0.000000 0.000000 392 -0.000000 0.000000 0.000000 -0.000000 393 -0.000000 0.000000 -0.000000 0.000000 394 -0.000000 0.000000 0.000000 -0.000000 395 -0.000000 0.000000 -0.000000 0.000000 396 -0.000000 0.000000 0.000000 -0.000000 397 -0.000000 0.000000 -0.000000 0.000000 398 -0.000000 0.000000 0.000000 -0.000000 399 -0.000000 0.000000 -0.000000 0.000000 400 -0.000000 0.000000 0.000000 -0.000000 401 -0.000000 0.000000 -0.000000 0.000000 402 -0.000000 0.000000 0.000000 -0.000000 403 -0.000000 0.000000 -0.000000 0.000000 404 -0.000000 0.000000 0.000000 -0.000000 405 -0.000000 0.000000 -0.000000 0.000000 406 -0.000000 0.000000 0.000000 -0.000000 407 -0.000000 0.000000 -0.000000 0.000000 408 -0.000000 0.000000 0.000000 -0.000000 409 -0.000000 0.000000 -0.000000 0.000000 410 -0.000000 0.000000 0.000000 -0.000000 411 -0.000000 0.000000 -0.000000 0.000000 412 -0.000000 0.000000 0.000000 -0.000000 413 -0.000000 0.000000 -0.000000 0.000000 414 -0.000000 0.000000 0.000000 -0.000000 415 -0.000000 0.000000 -0.000000 0.000000 416 -0.000000 0.000000 0.000000 -0.000000 417 -0.000000 0.000000 -0.000000 0.000000 418 -0.000000 0.000000 0.000000 -0.000000 419 -0.000000 0.000000 -0.000000 0.000000 420 -0.000000 0.000000 0.000000 -0.000000 421 -0.000000 0.000000 -0.000000 0.000000 422 -0.000000 0.000000 0.000000 -0.000000 423 -0.000000 0.000000 -0.000000 0.000000 424 -0.000000 0.000000 0.000000 -0.000000 425 -0.000000 0.000000 -0.000000 0.000000 426 -0.000000 0.000000 0.000000 -0.000000 427 -0.000000 0.000000 -0.000000 0.000000 428 -0.000000 0.000000 0.000000 -0.000000 429 -0.000000 0.000000 -0.000000 0.000000 430 -0.000000 0.000000 0.000000 -0.000000 431 -0.000000 0.000000 -0.000000 0.000000 432 -0.000000 0.000000 0.000000 -0.000000 433 -0.000000 0.000000 -0.000000 0.000000 434 -0.000000 0.000000 0.000000 -0.000000 435 -0.000000 0.000000 -0.000000 0.000000 436 -0.000000 0.000000 0.000000 -0.000000 437 -0.000000 0.000000 -0.000000 0.000000 438 -0.000000 0.000000 0.000000 -0.000000 439 -0.000000 0.000000 -0.000000 0.000000 440 -0.000000 0.000000 0.000000 -0.000000 441 -0.000000 0.000000 -0.000000 0.000000 442 -0.000000 0.000000 0.000000 -0.000000 443 -0.000000 0.000000 -0.000000 0.000000 444 -0.000000 0.000000 0.000000 -0.000000 445 -0.000000 0.000000 -0.000000 0.000000 446 -0.000000 0.000000 0.000000 -0.000000 447 -0.000000 0.000000 -0.000000 0.000000 448 -0.000000 0.000000 0.000000 -0.000000 449 -0.000000 0.000000 -0.000000 0.000000 450 -0.000000 0.000000 0.000000 -0.000000 451 -0.000000 0.000000 -0.000000 0.000000 452 -0.000000 0.000000 0.000000 -0.000000 453 -0.000000 0.000000 -0.000000 0.000000 454 -0.000000 0.000000 0.000000 -0.000000 455 -0.000000 0.000000 -0.000000 0.000000 456 -0.000000 0.000000 0.000000 -0.000000 457 -0.000000 0.000000 -0.000000 0.000000 458 -0.000000 0.000000 0.000000 -0.000000 459 -0.000000 0.000000 -0.000000 0.000000 460 -0.000000 0.000000 0.000000 -0.000000 461 -0.000000 0.000000 -0.000000 0.000000 462 -0.000000 0.000000 0.000000 -0.000000 463 -0.000000 0.000000 -0.000000 0.000000 464 -0.000000 0.000000 0.000001 -0.000001 465 -0.000000 0.000000 -0.000000 0.000000 466 -0.000000 0.000000 0.000000 -0.000000 467 -0.000000 0.000000 -0.000001 0.000001 468 -0.000000 0.000000 0.000000 -0.000000 469 -0.000000 0.000000 -0.000001 0.000001 470 -0.000000 0.000000 0.000001 -0.000001 471 -0.000000 0.000000 -0.000001 0.000001 472 -0.000000 0.000000 0.000001 -0.000001 473 -0.000000 0.000000 -0.000001 0.000001 474 -0.000000 0.000000 0.000001 -0.000001 475 -0.000000 0.000000 -0.000001 0.000001 476 -0.000000 0.000000 0.000001 -0.000001 477 -0.000000 0.000000 -0.000001 0.000001 478 -0.000000 0.000000 0.000001 -0.000001 479 -0.000000 0.000000 -0.000001 0.000001 480 -0.000000 0.000000 0.000001 -0.000001 481 -0.000000 0.000000 -0.000001 0.000001 482 -0.000000 0.000000 0.000001 -0.000001 483 -0.000000 0.000000 -0.000001 0.000001 484 -0.000000 0.000000 0.000001 -0.000001 485 -0.000000 0.000000 -0.000001 0.000001 486 -0.000000 0.000000 0.000001 -0.000001 487 -0.000000 0.000000 -0.000001 0.000001 488 -0.000000 0.000000 0.000001 -0.000001 489 -0.000000 0.000000 -0.000001 0.000001 490 -0.000000 0.000000 0.000001 -0.000001 491 -0.000000 0.000000 -0.000001 0.000001 492 -0.000000 0.000000 0.000001 -0.000001 493 -0.000000 0.000000 -0.000001 0.000001 494 -0.000000 0.000000 0.000001 -0.000001 495 -0.000000 0.000000 -0.000001 0.000001 496 -0.000000 0.000000 0.000001 -0.000001 497 -0.000000 0.000000 -0.000001 0.000001 498 -0.000000 0.000000 0.000001 -0.000001 499 -0.000000 0.000000 -0.000001 0.000001 500 -0.000000 0.000000 0.000001 -0.000001 501 -0.000000 0.000000 -0.000001 0.000001 502 -0.000000 0.000000 0.000001 -0.000001 503 -0.000000 0.000000 -0.000001 0.000001 504 -0.000001 0.000001 0.000001 -0.000001 505 -0.000033 0.000033 -0.000001 0.000001 506 -0.000740 0.000740 0.000001 -0.000001 507 -0.009652 0.009652 -0.000002 0.000002 508 -0.073263 0.073263 0.000001 -0.000001 509 -0.316198 0.316198 -0.000002 0.000002 510 -0.735759 0.735759 0.000002 -0.000002 511 -0.778801 0.778801 -0.000002 0.000002 512 0.000000 0.000000 0.000002 -0.000002 513 0.778801 -0.778801 -0.000002 0.000002 514 0.735759 -0.735759 0.000002 -0.000002 515 0.316198 -0.316198 -0.000002 0.000002 516 0.073263 -0.073263 0.000002 -0.000002 517 0.009652 -0.009652 -0.000002 0.000002 518 0.000740 -0.000740 0.000002 -0.000002 519 0.000033 -0.000033 -0.000002 0.000002 520 0.000001 -0.000001 0.000002 -0.000002 521 0.000000 -0.000000 -0.000002 0.000002 522 0.000000 -0.000000 0.000003 -0.000003 523 0.000000 -0.000000 -0.000003 0.000003 524 0.000000 -0.000000 0.000003 -0.000003 525 0.000000 -0.000000 -0.000003 0.000003 526 0.000000 -0.000000 0.000003 -0.000003 527 0.000000 -0.000000 -0.000003 0.000003 528 0.000000 -0.000000 0.000004 -0.000004 529 0.000000 -0.000000 -0.000004 0.000004 530 0.000000 -0.000000 0.000004 -0.000004 531 0.000000 -0.000000 -0.000004 0.000004 532 0.000000 -0.000000 0.000004 -0.000004 533 0.000000 -0.000000 -0.000005 0.000005 534 0.000000 -0.000000 0.000005 -0.000005 535 0.000000 -0.000000 -0.000006 0.000006 536 0.000000 -0.000000 0.000006 -0.000006 537 0.000000 -0.000000 -0.000006 0.000006 538 0.000000 -0.000000 0.000007 -0.000007 539 0.000000 -0.000000 -0.000008 0.000008 540 0.000000 -0.000000 0.000008 -0.000008 541 0.000000 -0.000000 -0.000009 0.000009 542 0.000000 -0.000000 0.000010 -0.000010 543 0.000000 -0.000000 -0.000011 0.000011 544 0.000000 -0.000000 0.000012 -0.000012 545 0.000000 -0.000000 -0.000013 0.000013 546 0.000000 -0.000000 0.000015 -0.000015 547 0.000000 -0.000000 -0.000016 0.000016 548 0.000000 -0.000000 0.000018 -0.000018 549 0.000000 -0.000000 -0.000021 0.000021 550 0.000000 -0.000000 0.000024 -0.000024 551 0.000000 -0.000000 -0.000027 0.000027 552 0.000000 -0.000000 0.000031 -0.000031 553 0.000000 -0.000000 -0.000036 0.000036 554 0.000000 -0.000000 0.000042 -0.000042 555 0.000000 -0.000000 -0.000055 0.000055 556 0.000000 -0.000000 -0.000110 0.000110 557 0.000000 -0.000000 -0.002926 0.002926 558 0.000000 -0.000000 -0.028405 0.028405 559 0.000000 -0.000000 -0.163788 0.163788 560 0.000000 -0.000000 -0.523926 0.523926 561 0.000000 -0.000000 -0.854785 0.854785 562 0.000000 -0.000000 -0.469590 0.469590 563 0.000000 -0.000000 0.469590 -0.469590 564 0.000000 -0.000000 0.854785 -0.854785 565 0.000000 -0.000000 0.523926 -0.523926 566 0.000000 -0.000000 0.163788 -0.163788 567 0.000000 -0.000000 0.028404 -0.028404 568 0.000000 -0.000000 0.002926 -0.002926 569 0.000000 -0.000000 0.000110 -0.000110 570 0.000000 -0.000000 0.000055 -0.000055 571 0.000000 -0.000000 -0.000042 0.000042 572 0.000000 -0.000000 0.000036 -0.000036 573 0.000000 -0.000000 -0.000031 0.000031 574 0.000000 -0.000000 0.000027 -0.000027 575 0.000000 -0.000000 -0.000023 0.000023 576 0.000000 -0.000000 0.000021 -0.000021 577 0.000000 -0.000000 -0.000018 0.000018 578 0.000000 -0.000000 0.000016 -0.000016 579 0.000000 -0.000000 -0.000014 0.000014 580 0.000000 -0.000000 0.000013 -0.000013 581 0.000000 -0.000000 -0.000012 0.000012 582 0.000000 -0.000000 0.000011 -0.000011 583 0.000000 -0.000000 -0.000010 0.000010 584 0.000000 -0.000000 0.000009 -0.000009 585 0.000000 -0.000000 -0.000008 0.000008 586 0.000000 -0.000000 0.000007 -0.000007 587 0.000000 -0.000000 -0.000007 0.000007 588 0.000000 -0.000000 0.000007 -0.000007 589 0.000000 -0.000000 -0.000006 0.000006 590 0.000000 -0.000000 0.000006 -0.000006 591 0.000000 -0.000000 -0.000005 0.000005 592 0.000000 -0.000000 0.000005 -0.000005 593 0.000000 -0.000000 -0.000005 0.000005 594 0.000000 -0.000000 0.000004 -0.000004 595 0.000000 -0.000000 -0.000004 0.000004 596 0.000000 -0.000000 0.000004 -0.000004 597 0.000000 -0.000000 -0.000003 0.000003 598 0.000000 -0.000000 0.000004 -0.000004 599 0.000000 -0.000000 -0.000003 0.000003 600 0.000000 -0.000000 0.000003 -0.000003 601 0.000000 -0.000000 -0.000003 0.000003 602 0.000000 -0.000000 0.000003 -0.000003 603 0.000000 -0.000000 -0.000003 0.000003 604 0.000000 -0.000000 0.000003 -0.000003 605 0.000000 -0.000000 -0.000002 0.000002 606 0.000000 -0.000000 0.000002 -0.000002 607 0.000000 -0.000000 -0.000002 0.000002 608 0.000000 -0.000000 0.000002 -0.000002 609 0.000000 -0.000000 -0.000002 0.000002 610 0.000000 -0.000000 0.000002 -0.000002 611 0.000000 -0.000000 -0.000002 0.000002 612 0.000000 -0.000000 0.000002 -0.000002 613 0.000000 -0.000000 -0.000002 0.000002 614 0.000000 -0.000000 0.000002 -0.000002 615 0.000000 -0.000000 -0.000002 0.000002 616 0.000000 -0.000000 0.000002 -0.000002 617 0.000000 -0.000000 -0.000002 0.000002 618 0.000000 -0.000000 0.000001 -0.000001 619 0.000000 -0.000000 -0.000001 0.000001 620 0.000000 -0.000000 0.000001 -0.000001 621 0.000000 -0.000000 -0.000001 0.000001 622 0.000000 -0.000000 0.000001 -0.000001 623 0.000000 -0.000000 -0.000001 0.000001 624 0.000000 -0.000000 0.000001 -0.000001 625 0.000000 -0.000000 -0.000001 0.000001 626 0.000000 -0.000000 0.000001 -0.000001 627 0.000000 -0.000000 -0.000001 0.000001 628 0.000000 -0.000000 0.000001 -0.000001 629 0.000000 -0.000000 -0.000001 0.000001 630 0.000000 -0.000000 0.000001 -0.000001 631 0.000000 -0.000000 -0.000001 0.000001 632 0.000000 -0.000000 0.000001 -0.000001 633 0.000000 -0.000000 -0.000001 0.000001 634 0.000000 -0.000000 0.000001 -0.000001 635 0.000000 -0.000000 -0.000001 0.000001 636 0.000000 -0.000000 0.000001 -0.000001 637 0.000000 -0.000000 -0.000001 0.000001 638 0.000000 -0.000000 0.000001 -0.000001 639 0.000000 -0.000000 -0.000001 0.000001 640 0.000000 -0.000000 0.000001 -0.000001 641 0.000000 -0.000000 -0.000001 0.000001 642 0.000000 -0.000000 0.000001 -0.000001 643 0.000000 -0.000000 -0.000001 0.000001 644 0.000000 -0.000000 0.000001 -0.000001 645 0.000000 -0.000000 -0.000001 0.000001 646 0.000000 -0.000000 0.000001 -0.000001 647 0.000000 -0.000000 -0.000001 0.000001 648 0.000000 -0.000000 0.000001 -0.000001 649 0.000000 -0.000000 -0.000001 0.000001 650 0.000000 -0.000000 0.000001 -0.000001 651 0.000000 -0.000000 -0.000001 0.000001 652 0.000000 -0.000000 0.000001 -0.000001 653 0.000000 -0.000000 -0.000001 0.000001 654 0.000000 -0.000000 0.000001 -0.000001 655 0.000000 -0.000000 -0.000001 0.000001 656 0.000000 -0.000000 0.000001 -0.000001 657 0.000000 -0.000000 -0.000001 0.000001 658 0.000000 -0.000000 0.000000 -0.000000 659 0.000000 -0.000000 -0.000000 0.000000 660 0.000000 -0.000000 0.000001 -0.000001 661 0.000000 -0.000000 -0.000000 0.000000 662 0.000000 -0.000000 0.000000 -0.000000 663 0.000000 -0.000000 -0.000000 0.000000 664 0.000000 -0.000000 0.000000 -0.000000 665 0.000000 -0.000000 -0.000000 0.000000 666 0.000000 -0.000000 0.000000 -0.000000 667 0.000000 -0.000000 -0.000000 0.000000 668 0.000000 -0.000000 0.000000 -0.000000 669 0.000000 -0.000000 -0.000000 0.000000 670 0.000000 -0.000000 0.000000 -0.000000 671 0.000000 -0.000000 -0.000000 0.000000 672 0.000000 -0.000000 0.000000 -0.000000 673 0.000000 -0.000000 -0.000000 0.000000 674 0.000000 -0.000000 0.000000 -0.000000 675 0.000000 -0.000000 -0.000000 0.000000 676 0.000000 -0.000000 0.000000 -0.000000 677 0.000000 -0.000000 -0.000000 0.000000 678 0.000000 -0.000000 0.000000 -0.000000 679 0.000000 -0.000000 -0.000000 0.000000 680 0.000000 -0.000000 0.000000 -0.000000 681 0.000000 -0.000000 -0.000000 0.000000 682 0.000000 -0.000000 0.000000 -0.000000 683 0.000000 -0.000000 -0.000000 0.000000 684 0.000000 -0.000000 0.000000 -0.000000 685 0.000000 -0.000000 -0.000000 0.000000 686 0.000000 -0.000000 0.000000 -0.000000 687 0.000000 -0.000000 -0.000000 0.000000 688 0.000000 -0.000000 0.000000 -0.000000 689 0.000000 -0.000000 -0.000000 0.000000 690 0.000000 -0.000000 0.000000 -0.000000 691 0.000000 -0.000000 -0.000000 0.000000 692 0.000000 -0.000000 0.000000 -0.000000 693 0.000000 -0.000000 -0.000000 0.000000 694 0.000000 -0.000000 0.000000 -0.000000 695 0.000000 -0.000000 -0.000000 0.000000 696 0.000000 -0.000000 0.000000 -0.000000 697 0.000000 -0.000000 -0.000000 0.000000 698 0.000000 -0.000000 0.000000 -0.000000 699 0.000000 -0.000000 -0.000000 0.000000 700 0.000000 -0.000000 0.000000 -0.000000 701 0.000000 -0.000000 -0.000000 0.000000 702 0.000000 -0.000000 0.000000 -0.000000 703 0.000000 -0.000000 -0.000000 0.000000 704 0.000000 -0.000000 0.000000 -0.000000 705 0.000000 -0.000000 -0.000000 0.000000 706 0.000000 -0.000000 0.000000 -0.000000 707 0.000000 -0.000000 -0.000000 0.000000 708 0.000000 -0.000000 0.000000 -0.000000 709 0.000000 -0.000000 -0.000000 0.000000 710 0.000000 -0.000000 0.000000 -0.000000 711 0.000000 -0.000000 -0.000000 0.000000 712 0.000000 -0.000000 0.000000 -0.000000 713 0.000000 -0.000000 -0.000000 0.000000 714 0.000000 -0.000000 0.000000 -0.000000 715 0.000000 -0.000000 -0.000000 0.000000 716 0.000000 -0.000000 0.000000 -0.000000 717 0.000000 -0.000000 -0.000000 0.000000 718 0.000000 -0.000000 0.000000 -0.000000 719 0.000000 -0.000000 -0.000000 0.000000 720 0.000000 -0.000000 0.000000 -0.000000 721 0.000000 -0.000000 -0.000000 0.000000 722 0.000000 -0.000000 0.000000 -0.000000 723 0.000000 -0.000000 -0.000000 0.000000 724 0.000000 -0.000000 0.000000 -0.000000 725 0.000000 -0.000000 -0.000000 0.000000 726 0.000000 -0.000000 0.000000 -0.000000 727 0.000000 -0.000000 -0.000000 0.000000 728 0.000000 -0.000000 0.000000 -0.000000 729 0.000000 -0.000000 -0.000000 0.000000 730 0.000000 -0.000000 0.000000 -0.000000 731 0.000000 -0.000000 -0.000000 0.000000 732 0.000000 -0.000000 0.000000 -0.000000 733 0.000000 -0.000000 -0.000000 0.000000 734 0.000000 -0.000000 0.000000 -0.000000 735 0.000000 -0.000000 -0.000000 0.000000 736 0.000000 -0.000000 0.000000 -0.000000 737 0.000000 -0.000000 -0.000000 0.000000 738 0.000000 -0.000000 0.000000 -0.000000 739 0.000000 -0.000000 -0.000000 0.000000 740 0.000000 -0.000000 0.000000 -0.000000 741 0.000000 -0.000000 -0.000000 0.000000 742 0.000000 -0.000000 0.000000 -0.000000 743 0.000000 -0.000000 -0.000000 0.000000 744 0.000000 -0.000000 0.000000 -0.000000 745 0.000000 -0.000000 -0.000000 0.000000 746 0.000000 -0.000000 0.000000 -0.000000 747 0.000000 -0.000000 -0.000000 0.000000 748 0.000000 -0.000000 0.000000 -0.000000 749 0.000000 -0.000000 -0.000000 0.000000 750 0.000000 -0.000000 0.000000 -0.000000 751 0.000000 -0.000000 -0.000000 0.000000 752 0.000000 -0.000000 0.000000 -0.000000 753 0.000000 -0.000000 -0.000000 0.000000 754 0.000000 -0.000000 0.000000 -0.000000 755 0.000000 -0.000000 -0.000000 0.000000 756 0.000000 -0.000000 0.000000 -0.000000 757 0.000000 -0.000000 -0.000000 0.000000 758 0.000000 -0.000000 0.000000 -0.000000 759 0.000000 -0.000000 -0.000000 0.000000 760 0.000000 -0.000000 0.000000 -0.000000 761 0.000000 -0.000000 -0.000000 0.000000 762 0.000000 -0.000000 0.000000 -0.000000 763 0.000000 -0.000000 -0.000000 0.000000 764 0.000000 -0.000000 0.000000 -0.000000 765 0.000000 -0.000000 -0.000000 0.000000 766 0.000000 -0.000000 0.000000 -0.000000 767 0.000000 -0.000000 -0.000000 0.000000 768 0.000000 -0.000000 0.000000 -0.000000 769 0.000000 -0.000000 -0.000000 0.000000 770 0.000000 -0.000000 0.000000 -0.000000 771 0.000000 -0.000000 -0.000000 0.000000 772 0.000000 -0.000000 0.000000 -0.000000 773 0.000000 -0.000000 -0.000000 0.000000 774 0.000000 -0.000000 0.000000 -0.000000 775 0.000000 -0.000000 -0.000000 0.000000 776 0.000000 -0.000000 0.000000 -0.000000 777 0.000000 -0.000000 -0.000000 0.000000 778 0.000000 -0.000000 0.000000 -0.000000 779 0.000000 -0.000000 -0.000000 0.000000 780 0.000000 -0.000000 0.000000 -0.000000 781 0.000000 -0.000000 -0.000000 0.000000 782 0.000000 -0.000000 0.000000 -0.000000 783 0.000000 -0.000000 -0.000000 0.000000 784 0.000000 -0.000000 0.000000 -0.000000 785 0.000000 -0.000000 -0.000000 0.000000 786 0.000000 -0.000000 0.000000 -0.000000 787 0.000000 -0.000000 -0.000000 0.000000 788 0.000000 -0.000000 0.000000 -0.000000 789 0.000000 -0.000000 -0.000000 0.000000 790 0.000000 -0.000000 0.000000 -0.000000 791 0.000000 -0.000000 -0.000000 0.000000 792 0.000000 -0.000000 0.000000 -0.000000 793 0.000000 -0.000000 -0.000000 0.000000 794 0.000000 -0.000000 0.000000 -0.000000 795 0.000000 -0.000000 -0.000000 0.000000 796 0.000000 -0.000000 0.000000 -0.000000 797 0.000000 -0.000000 -0.000000 0.000000 798 0.000000 -0.000000 0.000000 -0.000000 799 0.000000 -0.000000 -0.000000 0.000000 800 0.000000 -0.000000 0.000000 -0.000000 801 0.000000 -0.000000 -0.000000 0.000000 802 0.000000 -0.000000 0.000000 -0.000000 803 0.000000 -0.000000 -0.000000 0.000000 804 0.000000 -0.000000 0.000000 -0.000000 805 0.000000 -0.000000 -0.000000 0.000000 806 0.000000 -0.000000 0.000000 -0.000000 807 0.000000 -0.000000 -0.000000 0.000000 808 0.000000 -0.000000 0.000000 -0.000000 809 0.000000 -0.000000 -0.000000 0.000000 810 0.000000 -0.000000 0.000000 -0.000000 811 0.000000 -0.000000 -0.000000 0.000000 812 0.000000 -0.000000 0.000000 -0.000000 813 0.000000 -0.000000 -0.000000 0.000000 814 0.000000 -0.000000 0.000000 -0.000000 815 0.000000 -0.000000 -0.000000 0.000000 816 0.000000 -0.000000 0.000000 -0.000000 817 0.000000 -0.000000 -0.000000 0.000000 818 0.000000 -0.000000 0.000000 -0.000000 819 0.000000 -0.000000 -0.000000 0.000000 820 0.000000 -0.000000 0.000000 -0.000000 821 0.000000 -0.000000 -0.000000 0.000000 822 0.000000 -0.000000 0.000000 -0.000000 823 0.000000 -0.000000 -0.000000 0.000000 824 0.000000 -0.000000 0.000000 -0.000000 825 0.000000 -0.000000 -0.000000 0.000000 826 0.000000 -0.000000 0.000000 -0.000000 827 0.000000 -0.000000 -0.000000 0.000000 828 0.000000 -0.000000 0.000000 -0.000000 829 0.000000 -0.000000 -0.000000 0.000000 830 0.000000 -0.000000 0.000000 -0.000000 831 0.000000 -0.000000 -0.000000 0.000000 832 0.000000 -0.000000 0.000000 -0.000000 833 0.000000 -0.000000 -0.000000 0.000000 834 0.000000 -0.000000 0.000000 -0.000000 835 0.000000 -0.000000 -0.000000 0.000000 836 0.000000 -0.000000 0.000000 -0.000000 837 0.000000 -0.000000 -0.000000 0.000000 838 0.000000 -0.000000 0.000000 -0.000000 839 0.000000 -0.000000 -0.000000 0.000000 840 0.000000 -0.000000 0.000000 -0.000000 841 0.000000 -0.000000 -0.000000 0.000000 842 0.000000 -0.000000 0.000000 -0.000000 843 0.000000 -0.000000 -0.000000 0.000000 844 0.000000 -0.000000 0.000000 -0.000000 845 0.000000 -0.000000 -0.000000 0.000000 846 0.000000 -0.000000 0.000000 -0.000000 847 0.000000 -0.000000 -0.000000 0.000000 848 0.000000 -0.000000 0.000000 -0.000000 849 0.000000 -0.000000 -0.000000 0.000000 850 0.000000 -0.000000 0.000000 -0.000000 851 0.000000 -0.000000 -0.000000 0.000000 852 0.000000 -0.000000 0.000000 -0.000000 853 0.000000 -0.000000 -0.000000 0.000000 854 0.000000 -0.000000 0.000000 -0.000000 855 0.000000 -0.000000 -0.000000 0.000000 856 0.000000 -0.000000 0.000000 -0.000000 857 0.000000 -0.000000 -0.000000 0.000000 858 0.000000 -0.000000 0.000000 -0.000000 859 0.000000 -0.000000 -0.000000 0.000000 860 0.000000 -0.000000 0.000000 -0.000000 861 0.000000 -0.000000 -0.000000 0.000000 862 0.000000 -0.000000 0.000000 -0.000000 863 0.000000 -0.000000 -0.000000 0.000000 864 0.000000 -0.000000 0.000000 -0.000000 865 0.000000 -0.000000 -0.000000 0.000000 866 0.000000 -0.000000 0.000000 -0.000000 867 0.000000 -0.000000 -0.000000 0.000000 868 0.000000 -0.000000 0.000000 -0.000000 869 0.000000 -0.000000 -0.000000 0.000000 870 0.000000 -0.000000 0.000000 -0.000000 871 0.000000 -0.000000 -0.000000 0.000000 872 0.000000 -0.000000 0.000000 -0.000000 873 0.000000 -0.000000 -0.000000 0.000000 874 0.000000 -0.000000 0.000000 -0.000000 875 0.000000 -0.000000 -0.000000 0.000000 876 0.000000 -0.000000 0.000000 -0.000000 877 0.000000 -0.000000 -0.000000 0.000000 878 0.000000 -0.000000 0.000000 -0.000000 879 0.000000 -0.000000 -0.000000 0.000000 880 0.000000 -0.000000 0.000000 -0.000000 881 0.000000 -0.000000 -0.000000 0.000000 882 0.000000 -0.000000 0.000000 -0.000000 883 0.000000 -0.000000 -0.000000 0.000000 884 0.000000 -0.000000 0.000000 -0.000000 885 0.000000 -0.000000 -0.000000 0.000000 886 0.000000 -0.000000 0.000000 -0.000000 887 0.000000 -0.000000 -0.000000 0.000000 888 0.000000 -0.000000 0.000000 -0.000000 889 0.000000 -0.000000 -0.000000 0.000000 890 0.000000 -0.000000 0.000000 -0.000000 891 0.000000 -0.000000 -0.000000 0.000000 892 0.000000 -0.000000 0.000000 -0.000000 893 0.000000 -0.000000 -0.000000 0.000000 894 0.000000 -0.000000 0.000000 -0.000000 895 0.000000 -0.000000 -0.000000 0.000000 896 0.000000 -0.000000 0.000000 -0.000000 897 0.000000 -0.000000 -0.000000 0.000000 898 0.000000 -0.000000 0.000000 -0.000000 899 0.000000 -0.000000 -0.000000 0.000000 900 0.000000 -0.000000 0.000000 -0.000000 901 0.000000 -0.000000 -0.000000 0.000000 902 0.000000 -0.000000 0.000000 -0.000000 903 0.000000 -0.000000 -0.000000 0.000000 904 0.000000 -0.000000 0.000000 -0.000000 905 0.000000 -0.000000 -0.000000 0.000000 906 0.000000 -0.000000 0.000000 -0.000000 907 0.000000 -0.000000 -0.000000 0.000000 908 0.000000 -0.000000 0.000000 -0.000000 909 0.000000 -0.000000 -0.000000 0.000000 910 0.000000 -0.000000 0.000000 -0.000000 911 0.000000 -0.000000 -0.000000 0.000000 912 0.000000 -0.000000 0.000000 -0.000000 913 0.000000 -0.000000 -0.000000 0.000000 914 0.000000 -0.000000 0.000000 -0.000000 915 0.000000 -0.000000 -0.000000 0.000000 916 0.000000 -0.000000 0.000000 -0.000000 917 0.000000 -0.000000 -0.000000 0.000000 918 0.000000 -0.000000 0.000000 -0.000000 919 0.000000 -0.000000 -0.000000 0.000000 920 0.000000 -0.000000 0.000000 -0.000000 921 0.000000 -0.000000 -0.000000 0.000000 922 0.000000 -0.000000 0.000000 -0.000000 923 0.000000 -0.000000 -0.000000 0.000000 924 0.000000 -0.000000 0.000000 -0.000000 925 0.000000 -0.000000 -0.000000 0.000000 926 0.000000 -0.000000 0.000000 -0.000000 927 0.000000 -0.000000 -0.000000 0.000000 928 0.000000 -0.000000 0.000000 -0.000000 929 0.000000 -0.000000 -0.000000 0.000000 930 0.000000 -0.000000 0.000000 -0.000000 931 0.000000 -0.000000 -0.000000 0.000000 932 0.000000 -0.000000 0.000000 -0.000000 933 0.000000 -0.000000 -0.000000 0.000000 934 0.000000 -0.000000 0.000000 -0.000000 935 0.000000 -0.000000 -0.000000 0.000000 936 0.000000 -0.000000 0.000000 -0.000000 937 0.000000 -0.000000 -0.000000 0.000000 938 0.000000 -0.000000 0.000000 -0.000000 939 0.000000 -0.000000 -0.000000 0.000000 940 0.000000 -0.000000 0.000000 -0.000000 941 0.000000 -0.000000 -0.000000 0.000000 942 0.000000 -0.000000 0.000000 -0.000000 943 0.000000 -0.000000 -0.000000 0.000000 944 0.000000 -0.000000 0.000000 -0.000000 945 0.000000 -0.000000 -0.000000 0.000000 946 0.000000 -0.000000 0.000000 -0.000000 947 0.000000 -0.000000 -0.000000 0.000000 948 0.000000 -0.000000 0.000000 -0.000000 949 0.000000 -0.000000 -0.000000 0.000000 950 0.000000 -0.000000 0.000000 -0.000000 951 0.000000 -0.000000 -0.000000 0.000000 952 0.000000 -0.000000 0.000000 -0.000000 953 0.000000 -0.000000 -0.000000 0.000000 954 0.000000 -0.000000 0.000000 -0.000000 955 0.000000 -0.000000 -0.000000 0.000000 956 0.000000 -0.000000 0.000000 -0.000000 957 0.000000 -0.000000 -0.000000 0.000000 958 0.000000 -0.000000 0.000000 -0.000000 959 0.000000 -0.000000 -0.000000 0.000000 960 0.000000 -0.000000 0.000000 -0.000000 961 0.000000 -0.000000 -0.000000 0.000000 962 0.000000 -0.000000 0.000000 -0.000000 963 0.000000 -0.000000 -0.000000 0.000000 964 0.000000 -0.000000 0.000000 -0.000000 965 0.000000 -0.000000 -0.000000 0.000000 966 0.000000 -0.000000 0.000000 -0.000000 967 0.000000 -0.000000 -0.000000 0.000000 968 0.000000 -0.000000 0.000000 -0.000000 969 0.000000 -0.000000 -0.000000 0.000000 970 0.000000 -0.000000 0.000000 -0.000000 971 0.000000 -0.000000 -0.000000 0.000000 972 0.000000 -0.000000 0.000000 -0.000000 973 0.000000 -0.000000 -0.000000 0.000000 974 0.000000 -0.000000 0.000000 -0.000000 975 0.000000 -0.000000 -0.000000 0.000000 976 0.000000 -0.000000 0.000000 -0.000000 977 0.000000 -0.000000 -0.000000 0.000000 978 0.000000 -0.000000 0.000000 -0.000000 979 0.000000 -0.000000 -0.000000 0.000000 980 0.000000 -0.000000 0.000000 -0.000000 981 0.000000 -0.000000 -0.000000 0.000000 982 0.000000 -0.000000 0.000000 -0.000000 983 0.000000 -0.000000 -0.000000 0.000000 984 0.000000 -0.000000 0.000000 -0.000000 985 0.000000 -0.000000 -0.000000 0.000000 986 0.000000 -0.000000 0.000000 -0.000000 987 0.000000 -0.000000 -0.000000 0.000000 988 0.000000 -0.000000 0.000000 -0.000000 989 0.000000 -0.000000 -0.000000 0.000000 990 0.000000 -0.000000 0.000000 -0.000000 991 0.000000 -0.000000 -0.000000 0.000000 992 0.000000 -0.000000 0.000000 -0.000000 993 0.000000 -0.000000 -0.000000 0.000000 994 0.000000 -0.000000 0.000000 -0.000000 995 0.000000 -0.000000 -0.000000 0.000000 996 0.000000 -0.000000 0.000000 -0.000000 997 0.000000 -0.000000 -0.000000 0.000000 998 0.000000 -0.000000 0.000000 -0.000000 999 0.000000 -0.000000 -0.000000 0.000000 1000 0.000000 -0.000000 0.000000 -0.000000 1001 0.000000 -0.000000 -0.000000 -0.000000 1002 0.000000 -0.000000 0.000000 -0.000000 1003 0.000000 -0.000000 -0.000000 0.000000 1004 0.000000 -0.000000 0.000000 -0.000000 1005 0.000000 -0.000000 -0.000000 0.000000 1006 0.000000 -0.000000 0.000000 -0.000000 1007 0.000000 -0.000000 -0.000000 0.000000 1008 0.000000 -0.000000 0.000000 -0.000000 1009 0.000000 -0.000000 -0.000000 0.000000 1010 0.000000 -0.000000 0.000000 -0.000000 1011 0.000000 -0.000000 -0.000000 0.000000 1012 0.000000 -0.000000 0.000000 -0.000000 1013 0.000000 -0.000000 -0.000000 0.000000 1014 0.000000 -0.000000 0.000000 -0.000000 1015 0.000000 -0.000000 -0.000000 0.000000 1016 0.000000 -0.000000 0.000000 -0.000000 1017 0.000000 -0.000000 -0.000000 0.000000 1018 0.000000 -0.000000 0.000000 -0.000000 1019 0.000000 -0.000000 -0.000000 0.000000 1020 0.000000 -0.000000 0.000000 -0.000000 1021 0.000000 -0.000000 0.000000 -0.000000 1022 0.000000 -0.000000 0.000000 -0.000000 1023 0.000000 -0.000000 -0.000000 0.000000 GMTSAR_V5.7/.svn/pristine/00/00e8379ec2da3fbb56adad6ac2de779a230346f3.svn-base000444 015705 000000 00000005466 13505462013 026021 0ustar00sandwellwheel000000 000000 /* $Id: print_results.c 33 2013-04-06 05:37:15Z pwessel $ */ #include "gmtsar.h" #include "siocomplex.h" #include "xcorr.h" #include #include #include #include /*-------------------------------------------------------------------------------*/ void print_results(struct xcorr *xc, int iloc) { int ishft; int interp; float xoff, xfrac; float yoff, yfrac; float corr; xoff = xc->loc[iloc].xoff; xfrac = xc->loc[iloc].xfrac; yoff = xc->loc[iloc].yoff; yfrac = xc->loc[iloc].yfrac; corr = xc->loc[iloc].corr; if (xc->interp_flag) { interp = xc->interp_factor; } else { interp = 1; } ishft = (int)xc->loc[iloc].y * xc->astretcha; /* account for range interpolation (xc->ri) */ if (debug) fprintf(stdout, " xoff %f xfrac %f xoff/ri %f rshift %d yoff %f yfrac %f ashift %d\n", xoff, xfrac, xoff / (float)xc->ri, xc->x_offset, yoff, yfrac, xc->y_offset); xoff = (xoff / (float)xc->ri) - (xfrac / (float)xc->ri) + xc->x_offset; yoff = yoff - yfrac + xc->y_offset + ishft; if (verbose) { fprintf(stdout, " location %d (%3d,%3d) interpolation (range %d corr %d) " "correlation %6.2f offset (%6.3f,%6.3f) \n", iloc, xc->loc[iloc].x, xc->loc[iloc].y, xc->ri, interp, corr, xoff, yoff); } fprintf(xc->file, " %d %6.3f %d %6.3f %6.2f \n", xc->loc[iloc].x, xoff, xc->loc[iloc].y, yoff, corr); } /*-------------------------------------------------------------------------------*/ void print_complex(struct FCOMPLEX *a, int ny, int nx, int real_flag) { int i, j; if (real_flag == 0) fprintf(stdout, "\ncomplex: \n"); if (real_flag == 1) fprintf(stdout, "\ncomplex (real only): \n"); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { if (real_flag == 0) fprintf(stdout, "(%6.2f,%6.2f) ", a[i * nx + j].r, a[i * nx + j].i); if (real_flag == 1) fprintf(stdout, "%3.1f ", a[i * nx + j].r); } fprintf(stdout, "\n"); } fprintf(stdout, "\n"); } /*-------------------------------------------------------------------------------*/ void print_float(float *a, int ny, int nx) { int i, j; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) fprintf(stdout, " %4.2f ", a[i * nx + j]); fprintf(stdout, "\n"); } } /*-------------------------------------------------------------------------------*/ void print_double(double *a, int ny, int nx) { int i, j; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) fprintf(stdout, " %4.2lf ", a[i * nx + j]); fprintf(stdout, "\n"); } } /*-------------------------------------------------------------------------------*/ void print_int(int *a, int ny, int nx) { int i, j; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) fprintf(stdout, " %d ", a[i * nx + j]); fprintf(stdout, "\n"); } } /*-------------------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/07/071527a062fffdaed344c8337c47331ce1798bbc.svn-base000444 015705 000000 00000036504 13505462014 025614 0ustar00sandwellwheel000000 000000 /* * $Id: epr_product.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_dataset.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" uint epr_compute_scene_width(const EPR_SProductId* product_id); uint epr_compute_scene_height(const EPR_SProductId* product_id); /*********************************** PRODUCT ***********************************/ /* Function: epr_open_product Access: public API Changelog: 2002/01/05 nf initial version */ /** * Opens the ENVISAT product file with the given file path */ EPR_SProductId* epr_open_product(const char* product_file_path) { EPR_SProductId* product_id = NULL; char message_buffer[80]; int s_par; uint compare_ok = 0; epr_clear_err(); if (!epr_check_api_init_flag()) { return NULL; } if (product_file_path == NULL) { epr_set_err(e_err_null_pointer, "epr_open_product: product file path must not be NULL"); return NULL; } product_id = (EPR_SProductId*) calloc(1, sizeof (EPR_SProductId)); if (product_id == NULL) { epr_set_err(e_err_out_of_memory, "epr_open_product: out of memory"); return NULL; } product_id->magic = EPR_MAGIC_PRODUCT_ID; epr_assign_string(&product_id->file_path, product_file_path); if (product_id->file_path == NULL) { epr_set_err(e_err_out_of_memory, "epr_open_product: out of memory"); return NULL; } /* Convert to OS compatible path */ epr_make_os_compatible_path(product_id->file_path); product_id->istream = fopen(epr_trim_string(product_id->file_path), "rb"); if (product_id->istream == NULL) { if (errno == ENOENT) { epr_set_err(e_err_file_not_found, "epr_open_product: file not found"); } else { epr_set_err(e_err_file_access_denied, "epr_open_product: file open failed"); } return NULL; } epr_log(e_log_debug, "product opened:"); epr_log(e_log_debug, epr_trim_string(product_id->file_path)); /* Set file pointer to start of product identifier */ if (fseek(product_id->istream, EPR_PRODUCT_ID_OFFSET, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_open_product: file seek failed"); epr_close_product(product_id); return NULL; } if (fread(product_id->id_string, 1, EPR_PRODUCT_ID_STRLEN, product_id->istream) != (uint) EPR_PRODUCT_ID_STRLEN) { epr_set_err(e_err_file_access_denied, "epr_open_product: file read failed"); epr_close_product(product_id); return NULL; } /* Product identifier filter*/ if ((strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) != 0) && (strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) != 0) && (strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) != 0) && (strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) != 0)) { epr_set_err(e_err_invalid_product_id, "epr_open_product: invalid product identifier"); epr_close_product(product_id); return NULL; } if (product_id->id_string[9] != 'P') { char* ch = product_id->id_string + 9; if (*ch == 'C') { epr_log(e_log_info, "child product detected, mapping to 'P'"); } else { sprintf(message_buffer, "unknown product sub-type '%c', mapping to 'P'", *ch); epr_log(e_log_warning, message_buffer); } *ch = 'P'; } /* Set file to end of file in order to determine file size */ if (fseek(product_id->istream, 0, SEEK_END) != 0) { epr_set_err(e_err_file_access_denied, "epr_open_product: file seek failed"); epr_close_product(product_id); return NULL; } /* Get file size */ product_id->tot_size = (uint) ftell(product_id->istream); if (product_id->tot_size == (uint) -1) { epr_set_err(e_err_file_access_denied, "epr_open_product: failed to determine file size"); epr_close_product(product_id); return NULL; } sprintf(message_buffer, "product size: %u", product_id->tot_size); epr_log(e_log_debug, message_buffer); /* Set file pointer back to start */ if (fseek(product_id->istream, 0, SEEK_SET) != 0) { epr_set_err(e_err_file_access_denied, "epr_open_product: file seek failed"); epr_close_product(product_id); return NULL; } product_id->record_info_cache = epr_create_ptr_array(32); product_id->param_table = epr_create_param_table(); epr_log(e_log_info, "reading MPH"); product_id->mph_record = epr_read_mph(product_id); epr_log(e_log_info, "reading SPH"); product_id->sph_record = epr_read_sph(product_id); s_par = epr_set_dyn_dddb_params(product_id); epr_log(e_log_info, "reading all DSDs"); product_id->dsd_array = epr_read_all_dsds(product_id); compare_ok = epr_compare_param(product_id); if (compare_ok == 0) { epr_set_err(e_err_invalid_value, "epr_open_product: MPH_SIZE+SPH_SIZE must be equal to DSD[0].DS_OFFSET"); epr_close_product(product_id); return NULL; } if (strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) == 0) { product_id->meris_iodd_version = epr_detect_meris_iodd_version(product_id); sprintf(message_buffer, "product type %s (MERIS IODD%d)", product_id->id_string, product_id->meris_iodd_version); epr_log(e_log_info, message_buffer); } epr_log(e_log_info, "creating dataset identifiers"); product_id->dataset_ids = epr_create_dataset_ids(product_id); if (product_id->dataset_ids == NULL) { epr_close_product(product_id); return NULL; } epr_log(e_log_info, "creating band identifiers"); product_id->band_ids = epr_create_band_ids(product_id); if (product_id->band_ids == NULL) { epr_close_product(product_id); return NULL; } /* Get scene size */ product_id->scene_width = epr_compute_scene_width(product_id); product_id->scene_height = epr_compute_scene_height(product_id); sprintf(message_buffer, "product scene raster size: %u x %u", product_id->scene_width, product_id->scene_height); epr_log(e_log_debug, message_buffer); return product_id; } /* Function: epr_close_product Access: public API Changelog: 2002/01/05 nf initial version */ /** * Closes the ENVISAT product file determined by the gibven file identifier. */ int epr_close_product(EPR_SProductId* product_id) { /* Nothing to close, return */ if (product_id == NULL) { return e_err_none; } epr_clear_err(); if (!epr_check_api_init_flag()) { return epr_get_last_err_code(); } assert(product_id->istream != NULL); if (fclose(product_id->istream) != 0) { epr_set_err(e_err_file_close_failed, "epr_close_product: product file close failed"); return epr_get_last_err_code(); } product_id->istream = NULL; epr_log(e_log_info, "product closed: file path: "); epr_log(e_log_info, product_id->file_path); epr_free_product_id(product_id); return e_err_none; } /* Function: epr_free_product_id Access: private API implementation helper Changelog: 2002/01/05 nf initial version */ /** * Destructor for an EPR_SProductId structure instance. * * @param product_id the product file identifier to be destructed */ void epr_free_product_id(EPR_SProductId* product_id) { if (product_id == NULL) return; product_id->istream = NULL; epr_free_string(product_id->file_path); product_id->file_path = NULL; product_id->id_string[0] = '\0'; epr_free_param_table(product_id->param_table); product_id->param_table = NULL; if (product_id->record_info_cache != NULL) { EPR_SRecordInfo* record_info = NULL; uint record_info_index = 0; for (record_info_index = 0; record_info_index < product_id->record_info_cache->length; record_info_index++) { record_info = (EPR_SRecordInfo*)epr_get_ptr_array_elem_at(product_id->record_info_cache, record_info_index); epr_free_record_info(record_info); } epr_free_ptr_array(product_id->record_info_cache); product_id->record_info_cache = NULL; } if (product_id->dsd_array != NULL) { EPR_SDSD* dsd = NULL; uint dsd_index = 0; for (dsd_index = 0; dsd_index < product_id->dsd_array->length; dsd_index++) { dsd = (EPR_SDSD*)epr_get_ptr_array_elem_at(product_id->dsd_array, dsd_index); epr_free_dsd(dsd); } epr_free_ptr_array(product_id->dsd_array); product_id->dsd_array = NULL; } if (product_id->mph_record != NULL) { epr_free_record(product_id->mph_record); product_id->mph_record = NULL; } if (product_id->sph_record != NULL) { epr_free_record(product_id->sph_record); product_id->sph_record = NULL; } if (product_id->dataset_ids != NULL) { EPR_SDatasetId* dataset_id = NULL; uint d_index = 0; for (d_index = 0; d_index < product_id->dataset_ids->length; d_index++) { dataset_id = (EPR_SDatasetId*)epr_get_ptr_array_elem_at(product_id->dataset_ids, d_index); epr_free_dataset_id(dataset_id); } epr_free_ptr_array(product_id->dataset_ids); product_id->dataset_ids = NULL; } if (product_id->band_ids != NULL) { EPR_SBandId* band_id = NULL; uint b_index = 0; for (b_index = 0; b_index < product_id->band_ids->length; b_index++) { band_id = (EPR_SBandId*)epr_get_ptr_array_elem_at(product_id->band_ids, b_index); epr_free_band_id(band_id); } epr_free_ptr_array(product_id->band_ids); product_id->band_ids = NULL; } product_id->tot_size = 0; free(product_id); } /** * Gets the scene width in pixel. * * @param product_id the product identifier, must not be NULL * @return width pixel number, or 0 if an error occured. */ uint epr_get_scene_width(const EPR_SProductId* product_id) { epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_scene_width: product_id must not be NULL"); return (uint)0; } return product_id->scene_width; } /** * Gets the scene height in pixel. * * @param product_id the product identifier, must not be NULL * @return height pixel number, or 0 if an error occured. */ uint epr_get_scene_height(const EPR_SProductId* product_id) { epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_scene_height: product_id must not be NULL"); return (uint)0; } return product_id->scene_height; } /*********************************** RECORD ***********************************/ EPR_SRecord* epr_get_sph(const EPR_SProductId* product_id) { epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_sph: product-identifier must not be NULL"); return NULL; } return product_id->sph_record; } EPR_SRecord* epr_get_mph(const EPR_SProductId* product_id) { epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_mph: product-identifier must not be NULL"); return NULL; } return product_id->mph_record; } /** * Gets the scene width in pixel. * * @param product_id the product identifier, must not be NULL * * @return width pixel number, or 0 if an error occured. */ uint epr_compute_scene_width(const EPR_SProductId* product_id) { EPR_SRecord* sph_record = NULL; uint scan_line_length; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_compute_scene_width: product ID must not be NULL"); return (uint)0; } sph_record = product_id->sph_record; if (strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) == 0) { const EPR_SField* field = field = epr_get_field(sph_record, "LINE_LENGTH"); scan_line_length = epr_get_field_elem_as_uint(field, 0); } else if (strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) == 0) { scan_line_length = EPR_ATS_LINE_LENGTH; } else if (strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) == 0) { const EPR_SField* field = field = epr_get_field(sph_record, "LINE_LENGTH"); scan_line_length = epr_get_field_elem_as_uint(field, 0); } else if (strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) == 0) { const EPR_SField* field = field = epr_get_field(sph_record, "LINE_LENGTH"); scan_line_length = epr_get_field_elem_as_uint(field, 0); } else { epr_set_err(e_err_illegal_arg, "epr_compute_scene_width: unknown product type"); scan_line_length = (uint)0; } return scan_line_length; } /** * Computes the scene height in pixel of a product. The scene height is * the minimum number of records in all measurement datasets. * * @param product_id the product identifier, must not be NULL * @return height pixel number, or 0 if an error occured. */ uint epr_compute_scene_height(const EPR_SProductId* product_id) { EPR_SDSD* dsd = NULL; uint min_num_mds_recs = 0; uint dsd_index; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_compute_scene_height: product ID must not be NULL"); return (uint)0; } for (dsd_index = 0; dsd_index < product_id->dsd_array->length; dsd_index++) { dsd = (EPR_SDSD*)epr_get_ptr_array_elem_at(product_id->dsd_array, dsd_index); if (epr_equal_names(dsd->ds_type, "M")) { if (dsd->num_dsr > min_num_mds_recs) { min_num_mds_recs = dsd->num_dsr; } } } if (min_num_mds_recs == 0) { epr_set_err(e_err_invalid_data_format, "epr_compute_scene_height: product height was zero"); } return min_num_mds_recs; } GMTSAR_V5.7/.svn/pristine/07/0725b2dbb344010d9fdccef19840b756fe9381e5.svn-base000444 015705 000000 00000022613 13505462013 025612 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Matt Wei, May 2010 # based on Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv < 3) then echo "" echo "Usage: p2p_ENVI.csh master_stem slave_stem configuration_file" echo "" echo "Example: p2p_ENVI.csh ENV1_2_077_0639_0657_41714 ENV1_2_077_0639_0657_42716 config.envi.txt" echo "" echo " Place the raw data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. The two files of raw data must have a suffix .baq" echo " Execute this command at the directory location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" exit 1 endif # start # # make sure the files exist # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` if ((! $?near_range) || ($near_range == "")) then set near_range = 0 endif set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set npatch = `grep num_patches $3 | awk '{print $3}'` if ((! $?npatch) || ($npatch == "")) then set npatch = 0 endif set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # cleanup.csh raw # # preprocess the raw data # echo "" echo " PREPROCESS Envisat DATA -- START" cd raw ENVI_pre_process $master $near_range $earth_radius $npatch $fd set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` ENVI_pre_process $slave $NEAR $RAD $npatch $fd # # check patch number, if different, use the smaller one # set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` echo "Different number of patches: $pch1 $pch2" if ($pch1 != $pch2) then if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp cd .. echo " PREPROCESS Envisat DATA -- END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # focus and align SLC files # echo " " echo "ALIGN.CSH - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.raw . ln -s ../raw/$slave.raw . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . align.csh SAT $master $slave cd .. echo "ALIGN.CSH - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is a dem.grd # if ($topo_phase == 1) then echo " " echo " DEM2TOPOP_RA.CSH - START " echo " USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC slc2amp.csh $master.PRM 1 amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make interferogram # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/.svn/pristine/07/076a332b2901a759d19741814b1799ce9e01dc7c.svn-base000444 015705 000000 00000001331 13505462014 025310 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" #include #include /*------------------------------------------------------*/ int write_ALOS_LED(struct ALOS_ORB *orb, struct PRM *prm, char *name) { int i; FILE *fLED; sprintf(prm->led_file, "%s.LED", name); fprintf(stderr, "writing generic LED file: %s\n", prm->led_file); fLED = fopen(prm->led_file, "w"); if (fLED == NULL) die("error opening", prm->led_file); /* read_sarleader does not seem to fill in orb->points[].pt */ for (i = 0; i < orb->nd; i++) orb->points[i].pt = orb->sec + (i * orb->dsec); /* write out orbit parameters into LED file */ write_orb(fLED, orb); fclose(fLED); return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/6b/6b4f58910f3360c6e61ef6e490ffcc67a113b7bc.svn-base000444 015705 000000 00000003467 13505462013 025765 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # by Xiaohua Xu, Jun 2018 # make solid earth tide correction # if ($#argv < 2) then echo "" echo " Usage: tide_correction.csh PRM1 PRM2 dem.grd" echo "" echo " Output: tide.grd" echo "" echo "" exit 1 endif set prm = $1 set prm2 = $2 set dem = $3 set inc1 = "0.02/0.02" set inc2 = "200/50" # # get the information from the two PRM files # set rng = `grep num_rng_bins $prm | awk '{print $3}'` set azi = `grep num_lines $prm | awk '{print $3}'` set wave = `grep wavelength $prm | awk '{print $3}'` set tt1 = `grep SC_clock_start $prm | awk '{print $3}'` set tt2 = `grep SC_clock_start $prm2 | awk '{print $3}'` echo "" echo "Computing tidal correction for dates $tt1 $tt2 ..." echo "" # # downsanple the dem and compute the three components of the solid earth tide as E N and U # gmt grdsample $dem -I$inc1 -Gtmp_dem.grd gmt grd2xyz tmp_dem.grd | awk '{print $1,$2}' > topo.ll solid_tide $tt1 < topo.ll > topo1.llenu solid_tide $tt2 < topo.ll > topo2.llenu paste topo1.llenu topo2.llenu | awk '{printf("%.6f %.6f %.12f %.12f %.12f \n",$1,$2,$8-$3,$9-$4,$10-$5)}' > topo.llenu # # generate the look vector for the downsampled dem and apply to the tide difference vector to make # LOS tide difference in the LL coordinates # gmt grd2xyz tmp_dem.grd > topo.llt SAT_look $prm < topo.llt > topo.lltn paste topo.llenu topo.lltn | awk '{printf("%.12f\n",($3*$9) + ($4*$10) + ($5*$11))}' > topo.d # # project the LOS tide into radar coordinates and convert to phase in the range direction # SAT_llt2rat $prm 1 < topo.llt > topo.ratll paste topo.ratll topo.d | awk '{printf("%.6f %.6f %.12f\n", $1,$2,-$6*2.0*2.0*3.141592653/'$wave')}' > topo.rad gmt blockmedian topo.rad -R0/$rng/0/$azi -I$inc2 -r > tmp.rad gmt surface tmp.rad -R0/$rng/0/$azi -I$inc2 -T0.5 -r -Gtide.grd # # clean up # rm tmp_dem.grd tmp.rad topo* GMTSAR_V5.7/.svn/pristine/6b/6bd076e374b5357a1bf65e8ccb557a5f2b758721.svn-base000444 015705 000000 00000017542 13505462013 025631 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Xiaohua Xu and David Sandwell Dec 23 2015 # # script to align S1 TOPS mode data # # 1) Make PRM and LED files for both master and slave. # # 2) Do geometric back geocoding to make the range and azimuth alignment grids # # 3) Make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level. # alias rm 'rm -f' unset noclobber # if ($#argv != 5 && $#argv != 6) then echo " " echo "Usage: align_tops.csh master_prefix master_orb_file slave_s1a_prefix slave_orb_file dem.grd [run_with_a/r_ready]" echo " " echo "Be sure the tiff, xml, orbit and dem files are available in the local directory." echo " " echo "Example: align_tops.csh s1a-iw3-slc-vv-20150526t014937-20150526t015002-006086-007e23-003 S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944.EOF.txt s1a-iw3-slc-vv-20150607t014937-20150607t015003-006261-00832e-006 S1A_OPER_AUX_POEORB_OPOD_20150627T155155_V20150606T225944_20150608T005944.EOF.txt dem.grd " echo " " echo "Output: S1_20150526_F3.PRM S1_20150526_F3.LED S1_20150526_F3.SLC S1_20150607_F3.PRM S1_20150607_F3.LED S1_20150607_F3.SLC " echo " " exit 1 endif # # make sure the files are available # if(! -f $1.xml) then echo "****** missing file: "$1 exit endif if(! -f $2) then echo "****** missing file: "$2 exit endif if(! -f $3.xml) then echo "****** missing file: "$3 exit endif if(! -f $4) then echo "****** missing file: "$4 exit endif if(! -f $5) then echo "****** missing file: "$5 exit endif if ($#argv == 6) then set mode = 1 else set mode = 0 endif # # set the full names and create an output prefix # set mtiff = ` echo $1.tiff ` set mxml = ` echo $1.xml ` set stiff = ` echo $3.tiff ` set sxml = ` echo $3.xml ` set mpre = ` echo $1 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set spre = ` echo $3 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` echo $mpre echo $spre # # 1) make PRM and LED files for both master and slave but not the SLC file # make_s1a_tops $mxml $mtiff $mpre 0 make_s1a_tops $sxml $stiff $spre 0 # # replace the LED with the precise orbit # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2# # 2) do a geometric back projection to determine the alignment parameters # # Filter and downsample the topography to 12 seconds or about 360 m # if ($mode == 0) then gmt grdfilter $5 -D3 -Fg2 -I12s -Ni -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt # # map the topography into the range and azimuth of the master and slave using polynomial refinement # can do this in parallel # # first check whether there are any burst shift # endif set lontie = `SAT_baseline $mpre".PRM" $spre".PRM" | grep lon_tie_point | awk '{print $3}'` set lattie = `SAT_baseline $mpre".PRM" $spre".PRM" | grep lat_tie_point | awk '{print $3}'` set tmp_am = `echo $lontie $lattie 0 | SAT_llt2rat $mpre".PRM" 1 | awk '{print $2}'` set tmp_as = `echo $lontie $lattie 0 | SAT_llt2rat $spre".PRM" 1 | awk '{print $2}'` set tmp_da = `echo $tmp_am $tmp_as | awk '{printf("%d",$2-$1)}'` # # if ther is, modify the master PRM start_time to get a better r/a estimate # if ($mode == 0) then if ($tmp_da > -1000 && $tmp_da < 1000) then SAT_llt2rat $mpre".PRM" 1 < topo.llt > master.ratll & SAT_llt2rat $spre".PRM" 1 < topo.llt > slave.ratll & wait else echo "Modifying master PRM by $tmp_da lines..." cp $mpre".PRM" tmp.PRM set prf = `grep PRF tmp.PRM | awk '{print $3}'` set ttmp = `grep clock_start tmp.PRM | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_start $ttmp set ttmp = `grep clock_stop tmp.PRM | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_stop $ttmp set ttmp = `grep SC_clock_start tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_start $ttmp set ttmp = `grep SC_clock_stop tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_stop $ttmp # # restore the modified lines # #SAT_llt2rat tmp.PRM 1 < topo.llt > tmp.ratll & SAT_llt2rat tmp.PRM 1 < topo.llt > master.ratll & SAT_llt2rat $spre".PRM" 1 < topo.llt > slave.ratll & wait #echo "Restoring $tmp_da lines to master ashifts..." #awk '{printf("%.6f %.6f %.6f %.6f %.6f\n",$1,$2-'$tmp_da',$3,$4,$5)}' tmp.ratll > master.ratll endif # # paste the files and compute the dr and da # #paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $6, $6-$1, $7, $7-$2, "100")}' > tmp.dat paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $6 - $1, $2, $7 - $2, "100")}' > tmp.dat # # make sure the range and azimuth are within the bounds of the slave # set rmax = `grep num_rng_bins $spre".PRM" | awk '{print $3}'` set amax = `grep num_lines $spre".PRM" | awk '{print $3}'` if ($tmp_da > -1000 && $tmp_da < 1000) then awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat else awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 - '$tmp_da', $4 + '$tmp_da', "100") }' < tmp.dat > offset2.dat endif # # extract the range and azimuth data # awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$2) }' < offset.dat > r.xyz awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$4) }' < offset.dat > a.xyz # # fit a surface to the range and azimuth offsets # gmt blockmedian r.xyz -R0/$rmax/0/$amax -I16/8 -r -bo3d > rtmp.xyz gmt blockmedian a.xyz -R0/$rmax/0/$amax -I16/8 -r -bo3d > atmp.xyz gmt surface rtmp.xyz -bi3d -R0/$rmax/0/$amax -I16/8 -T0.3 -Grtmp.grd -N1000 -r & gmt surface atmp.xyz -bi3d -R0/$rmax/0/$amax -I16/8 -T0.3 -Gatmp.grd -N1000 -r & wait gmt grdmath rtmp.grd FLIPUD = r.grd gmt grdmath atmp.grd FLIPUD = a.grd # endif # 3) make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level but still need a integer alignment from # resamp # # make the new PRM files and SLC # make_s1a_tops $mxml $mtiff $mpre 1 make_s1a_tops $sxml $stiff $spre 1 r.grd a.grd # # resamp the slave and set the aoffset to zero # cp $spre".PRM" $spre".PRM0" if ($tmp_da > -1000 && $tmp_da < 1000) then update_PRM $spre".PRM" ashift 0 else update_PRM $spre".PRM" ashift $tmp_da echo "Restoring $tmp_da lines with resamp..." endif resamp $mpre".PRM" $spre".PRM" $spre".PRMresamp" $spre".SLCresamp" 1 mv $spre".SLCresamp" $spre".SLC" mv $spre".PRMresamp" $spre".PRM" # if ($tmp_da > -1000 && $tmp_da < 1000) then fitoffset.csh 3 3 offset.dat >> $spre.PRM else fitoffset.csh 3 3 offset2.dat >> $spre.PRM endif # # re-extract the lED files # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2 # rm topo.llt master.ratll slave.ratll *tmp* flt.grd r.xyz a.xyz *.PRM0 GMTSAR_V5.7/.svn/pristine/6b/6ba5954eda09d3c493b94b8108b38a9c31795f71.svn-base000444 015705 000000 00000020244 13505462013 025547 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu, Mar 18, 2017 # # used for creating a new frame based on two input frames. # if ($#argv != 3 && $#argv != 4) then echo "" echo "Usage: create_frame_tops.csh SAFE_filelist ****.EOF two_pins.ll [mode]" echo " create one frame based on the two input frames, precise/restituted orbit is required" echo "" echo " format of two_pins.llt (lon2/lat2 comes later than lon1/lat1 in orbit time):" echo " lon11 lat11 [lon12 lat12] [lon13 lat13]" echo " lon21 lat21 [lon22 lat22] [lon23 lat23]" echo " (drop more columns if you want subsath 2 and 3 to have different boundaries)" echo "" echo " outputs:" echo " new.SAFE --> datetime1-datetime2.SAFE" echo "" echo " Note:" echo " The two input .SAFE file should be in time order, if the two_pin.llt is at wrong location, the program will output all the bursts." echo " mode = 1, output vv; mode = 2, output vh; default is vv" echo " Files listed in SAFE_filelist should be the absolute path" echo "" exit 1 endif if ($#argv == 3) then set mode = `echo "vv"` else if ($4 == 1) then set mode = `echo "vv"` else set mode = `echo "vh"` endif endif set ncol = `awk '{print NF}' $3 | head -1` echo "Combining $mode data..." set pth = `pwd` set filelist = $1 #set file1 = $1 #set file2 = $2 set orb = $2 set tps = $3 if (-d new.SAFE) then rm -r new.SAFE endif mkdir new.SAFE mkdir new.SAFE/annotation new.SAFE/measurement # work on the first subswath echo "" echo "Working on subswath 1 ..." set a = `awk NR==1'{print $0}' $filelist` cd $a/annotation set f0 = `ls *iw1*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` set head1 = `echo $f0 | awk '{print substr($1,1,15)}'` cd $pth set a = "" foreach line (`awk '{print $0}' $filelist`) cd $line/annotation set f1 = `ls *iw1*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` cd $pth set a = `echo $a $f1` cd new.SAFE ln -s $line/annotation/$f1.xml . ln -s $line/measurement/$f1.tiff . cd .. end cd new.SAFE make_s1a_tops $f0.xml $f0.tiff tmp1 0 ext_orb_s1a tmp1.PRM ../$orb tmp1 set ll1 = `awk NR==1'{print $1,$2}' ../$tps` set ll2 = `awk NR==2'{print $1,$2}' ../$tps` set tmpazi = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{print $2}'` shift_atime_PRM.csh tmp1.PRM $tmpazi set azi1 = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set azi2 = `echo "$ll2 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` echo "Working on bursts covering $azi1 ($ll1) - $azi2 ($ll2)..." assemble_tops $azi1 $azi2 $a new set tail1 = `echo $f1 | awk '{print substr($1,length($1)-16,17)}'` set date = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,1,4)substr($1,6,2)substr($1,9,2)}'` set t1 = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` set t2 = `grep stopTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` mv new.xml annotation/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.xml mv new.tiff measurement/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.tiff rm *.tiff *.xml tmp1* cd .. # wrok on the second subswath echo "" echo "Working on subswath 2 ..." set a = `awk NR==1'{print $0}' $filelist` cd $a/annotation set f0 = `ls *iw2*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` set head1 = `echo $f0 | awk '{print substr($1,1,15)}'` cd $pth set a = "" foreach line (`awk '{print $0}' $filelist`) cd $line/annotation set f1 = `ls *iw2*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` cd $pth set a = `echo $a $f1` cd new.SAFE ln -s $line/annotation/$f1.xml . ln -s $line/measurement/$f1.tiff . cd .. end cd new.SAFE make_s1a_tops $f0.xml $f0.tiff tmp1 0 ext_orb_s1a tmp1.PRM ../$orb tmp1 if ($ncol >= 4) then set ll1 = `awk NR==1'{print $3,$4}' ../$tps` set ll2 = `awk NR==2'{print $3,$4}' ../$tps` else set ll1 = `awk NR==1'{print $1,$2}' ../$tps` set ll2 = `awk NR==2'{print $1,$2}' ../$tps` endif set tmpazi = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{print $2}'` shift_atime_PRM.csh tmp1.PRM $tmpazi set azi1 = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set azi2 = `echo "$ll2 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` echo "Working on bursts covering $azi1 ($ll1) - $azi2 ($ll2) ..." assemble_tops $azi1 $azi2 $a new set tail1 = `echo $f1 | awk '{print substr($1,length($1)-16,17)}'` set date = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,1,4)substr($1,6,2)substr($1,9,2)}'` set t1 = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` set t2 = `grep stopTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` mv new.xml annotation/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.xml mv new.tiff measurement/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.tiff rm *.tiff *.xml tmp1* cd .. # wrok on the third subswath echo "" echo "Working on subswath 3 ..." set a = `awk NR==1'{print $0}' $filelist` cd $a/annotation set f0 = `ls *iw3*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` set head1 = `echo $f0 | awk '{print substr($1,1,15)}'` cd $pth set a = "" foreach line (`awk '{print $0}' $filelist`) cd $line/annotation set f1 = `ls *iw3*$mode*xml | awk '{print substr($1,1,length($1)-4)}'` cd $pth set a = `echo $a $f1` cd new.SAFE ln -s $line/annotation/$f1.xml . ln -s $line/measurement/$f1.tiff . cd .. end cd new.SAFE make_s1a_tops $f0.xml $f0.tiff tmp1 0 ext_orb_s1a tmp1.PRM ../$orb tmp1 if ($ncol >= 6) then set ll1 = `awk NR==1'{print $5,$6}' ../$tps` set ll2 = `awk NR==2'{print $5,$6}' ../$tps` else set ll1 = `awk NR==1'{print $1,$2}' ../$tps` set ll2 = `awk NR==2'{print $1,$2}' ../$tps` endif set tmpazi = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{print $2}'` shift_atime_PRM.csh tmp1.PRM $tmpazi set azi1 = `echo "$ll1 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set azi2 = `echo "$ll2 0" | SAT_llt2rat tmp1.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` echo "Working on bursts covering $azi1 ($ll1) - $azi2 ($ll2) ..." assemble_tops $azi1 $azi2 $a new set tail1 = `echo $f1 | awk '{print substr($1,length($1)-16,17)}'` set date = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,1,4)substr($1,6,2)substr($1,9,2)}'` set t1 = `grep startTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` set t2 = `grep stopTime new.xml | awk -F">" '{print $2}' | awk -F"<" '{print substr($1,12,2)substr($1,15,2)substr($1,18,9)}' | awk '{printf("%.6d",$1+0.5)}'` mv new.xml annotation/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.xml mv new.tiff measurement/$head1$date"t"$t1"-"$date"t"$t2"-"$tail1.tiff rm *.tiff *.xml tmp1* cd .. set a = `awk NR==1'{print $0}' $filelist` cp $a/manifest.safe new.SAFE/ # edit the name of the new .SAFE file echo "" echo "Editing name of the new file..." set tail2 = `echo $a | awk '{print substr($1,length($1)-22,23)}'` set t1 = `ls new.SAFE/annotation/*.xml | awk '{print substr($1,length($1)-43,6)}' | gmt gmtinfo -C | awk '{printf("%.6d", $1)}'` set t2 = `ls new.SAFE/annotation/*.xml | awk '{print substr($1,length($1)-27,6)}' | gmt gmtinfo -C | awk '{printf("%.6d", $2)}'` set date1 = `ls new.SAFE/annotation/*.xml | awk '{print substr($1,length($1)-52,8)}' | gmt gmtinfo -C | awk '{print $1}'` set a = `awk NR==1'{print $0}' $filelist` set head2 = `echo $a | awk '{print substr($1,length($1)-71,17)}'` set newname = `echo $head2$date1"T"$t1"_"$date1"T"$t2"_"$tail2` if (-d $newname) rm -r $newname mv new.SAFE $newname GMTSAR_V5.7/.svn/pristine/6b/6bf72277365f0d993d475fff2f9a3b1f6c7e7568.svn-base000444 015705 000000 00000025402 13505462014 025660 0ustar00sandwellwheel000000 000000 /**************************************************************************** * Subroutine to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/15/09 - modifed to correct the contradiction of range sampling rate * * between FBS and FBD mode. ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 void set_ALOS_defaults(struct PRM *); void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); void ENVI_llt2rat_sub(char *filename, double *target_llt, double *target_rat) { double rln, rlt, rht, dr, t1, t2, tm; double ts, rng, thet, relp, telp; double xp[3]; double xt[3]; double rp[3]; // double r0,rf,a0,af; double rad = PI / 180.; double fll, rdd, daa, drr; int j, nrec, npad = 8000; int goldop(); int stai, endi, midi; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; FILE *ldrfile; FILE *fprm1; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); double rsr; char value[128], name[128]; /* open and read the parameter file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ENVI_orb(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; #if 0 r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* read the llt points and convert to xyz. */ rlt = target_llt[0]; rln = target_llt[1]; rht = target_llt[2]; rp[0] = rlt; rp[1] = rln; rp[2] = rht; plh2xyz(rp, xp, prm.ra, fll); xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); xt[0] = rng; xt[1] = tm; /* compute the range and azimuth in pixel space and correct for an azimuth * bias*/ xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a); /* compute the azimuth and range correction if the Doppler is not zero */ if (prm.fd1 != 0.) { rdd = (prm.vel * prm.vel) / rng; daa = -0.5 * (prm.lambda * prm.fd1) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } target_rat[0] = xt[0]; target_rat[1] = xt[1]; target_rat[2] = rp[2]; free(orb_pos); free(orb); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/.svn/pristine/43/43e63a66d2ee5703bd54fe72a9a38d37cc77dece.svn-base000444 015705 000000 00000025436 13505462014 026054 0ustar00sandwellwheel000000 000000 /**************************************************************************** * Subroutine to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/15/09 - modifed to correct the contradiction of range sampling rate * * between FBS and FBD mode. ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 void set_ALOS_defaults(struct PRM *); void ALOS_llt2rat_sub(char *filename, double *target_llt, double *target_rat) { double rln, rlt, rht, dr, t1, t2, tm; double ts, rng, thet, relp, telp, dopc; double xp[3]; double xt[3]; double rp[3]; /* double r0,rf,a0,af; */ double rad = PI / 180.; double fll, rdd, daa, drr; int j, nrec, npad = 8000; int goldop(); int stai, endi, midi; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; FILE *ldrfile; FILE *fprm1; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); double rsr; char value[128], name[128]; /* open and read the parameter file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ALOS_sarleader(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(filename, "r")) == NULL) { fprintf(stderr, "couldn't open PRM file\n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; #if 0 r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* read the llt points and convert to xyz. */ rlt = target_llt[0]; rln = target_llt[1]; rht = target_llt[2]; rp[0] = rlt; rp[1] = rln; rp[2] = rht; plh2xyz(rp, xp, prm.ra, fll); xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); xt[0] = rng; xt[1] = tm; /* compute the range and azimuth in pixel space and correct for an azimuth * bias*/ xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a); /* compute the azimuth and range correction if the Doppler is not zero */ if (prm.fd1 != 0.) { dopc = prm.fd1 + prm.fdd1 * (prm.near_range + dr * prm.num_rng_bins / 2.); rdd = (prm.vel * prm.vel) / rng; daa = -0.5 * (prm.lambda * dopc) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } target_rat[0] = xt[0]; target_rat[1] = xt[1]; target_rat[2] = rp[2]; free(orb_pos); free(orb); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/.svn/pristine/43/4344075a7d0c32589d411418d9f1f475cbaba4d9.svn-base000444 015705 000000 00000003545 13505462013 025453 0ustar00sandwellwheel000000 000000 9 13 4.7875768e-10 7.3336806e-08 5.1611161e-06 1.6687092e-04 2.4787522e-03 1.6916128e-02 5.3037641e-02 7.6398152e-02 5.0558818e-02 1.3962475e-08 1.4554879e-06 6.9706010e-05 1.5337241e-03 1.5503854e-02 7.2002484e-02 1.5362812e-01 1.5059458e-01 6.7820871e-02 2.9177241e-07 2.0698096e-05 6.7457772e-04 1.0100642e-02 6.9483451e-02 2.1959840e-01 3.1885437e-01 2.1270171e-01 6.5187600e-02 4.3687904e-06 2.1090524e-04 4.6776631e-03 4.7663497e-02 2.2313016e-01 4.7989481e-01 4.7418655e-01 2.1526222e-01 4.4895394e-02 4.6871988e-05 1.5398539e-03 2.3241334e-02 1.6116027e-01 5.1341712e-01 7.5144655e-01 5.0529063e-01 1.5609889e-01 2.2155102e-02 3.6033024e-04 8.0557657e-03 8.2742444e-02 3.9044985e-01 8.4648172e-01 8.4311208e-01 3.8580552e-01 8.1108612e-02 7.8339520e-03 1.9848296e-03 3.0197383e-02 2.1107209e-01 6.7780958e-01 1.0000000e+00 6.7780958e-01 2.1107209e-01 3.0197383e-02 1.9848296e-03 7.8339520e-03 8.1108612e-02 3.8580552e-01 8.4311208e-01 8.4648172e-01 3.9044985e-01 8.2742444e-02 8.0557657e-03 3.6033024e-04 2.2155102e-02 1.5609889e-01 5.0529063e-01 7.5144655e-01 5.1341712e-01 1.6116027e-01 2.3241334e-02 1.5398539e-03 4.6871988e-05 4.4895394e-02 2.1526222e-01 4.7418655e-01 4.7989481e-01 2.2313016e-01 4.7663497e-02 4.6776631e-03 2.1090524e-04 4.3687904e-06 6.5187600e-02 2.1270171e-01 3.1885437e-01 2.1959840e-01 6.9483451e-02 1.0100642e-02 6.7457772e-04 2.0698096e-05 2.9177241e-07 6.7820871e-02 1.5059458e-01 1.5362812e-01 7.2002484e-02 1.5503854e-02 1.5337241e-03 6.9706010e-05 1.4554879e-06 1.3962475e-08 5.0558818e-02 7.6398152e-02 5.3037641e-02 1.6916128e-02 2.4787522e-03 1.6687092e-04 5.1611161e-06 7.3336806e-08 4.7875768e-10 GMTSAR_V5.7/.svn/pristine/2f/2fd73742ccf235e53733ee43e78934365cbee4af.svn-base000444 015705 000000 00000035527 13505462014 025722 0ustar00sandwellwheel000000 000000 dnl ----------------------------------------------------------------- dnl $Id: configure.ac 228 2015-08-12 00:37:33Z pwessel $ dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; version 2 of the License. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl Contact info: David Sandwell, Scripps IO, dsandwell@ucsd.edu dnl ------------------------------------------------------------------ dnl dnl Run GNU autoconf to produce a configure script from this input. dnl ------------------------------------------------------------------ dnl dnl ------------------------------------------------------------------ dnl Since GMTSAR requires GMT executables version >= 5 we insist GMT dnl executables must be in the current path; otherwise abort. dnl dnl We also need to gather the following information dnl 1. Location of GMT include and library files dnl 2. Location of ORBITS directory dnl ------------------------------------------------------------------ dnl AC_INIT(GMTSAR, 5.5.0, gmtsar-l@ucsd.edu) dnl dnl ------------------------------------------------------------------ dnl The remainder should need no editing dnl ------------------------------------------------------------------ dnl m4_include([ax_lapack.m4]) m4_include([ax_blas.m4]) m4_include([ax_lib_hdf5.m4]) AC_CONFIG_SRCDIR(gmtsar/xcorr.c) AC_CONFIG_AUX_DIR(`pwd`) AC_CYGWIN AC_CANONICAL_SYSTEM AC_LANG_C AC_PROG_CC AC_PROG_CPP AC_PREFIX_DEFAULT(`pwd`) AC_PATH_XTRA dnl dnl ------------------------------------------------------------------ dnl GMTSAR-specific make macros dnl ------------------------------------------------------------------ dnl AC_SUBST(ORBITS_DIR) AC_SUBST(LALIBS) AC_SUBST(CFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(HDF5_CPPFLAGS) AC_SUBST(HDF5_LDFLAGS) AC_SUBST(HDF5_LIBS) AC_SUBST(LD_OPT) AC_SUBST(LDFLAGS) AC_SUBST(GMT_LIB) AC_SUBST(GMT_INC) AC_SUBST(TIFF_LIB) AC_SUBST(TIFF_INC) AC_SUBST(LIBS) AC_SUBST(LIBEXT) AC_SUBST(SL) AC_SUBST(SL_VERSION) AC_SUBST(MT) AC_SUBST(exec_prefix) AC_SUBST(prefix) AC_SUBST(rootdir) AC_SUBST(bindir) AC_SUBST(GMTSAR_VERSION) dnl dnl ------------------------------------------------------------------ dnl Special configure options for GMTSAR installation dnl ------------------------------------------------------------------ dnl AC_ARG_WITH(orbits_dir, [ --with-orbits-dir= Full path to ORBITS directory[[auto]]], [], [with_orbits_dir=no]) AC_ARG_WITH(tiff_include, [ --with-tiff-include= Full path to tiff include directory [[auto]]]) AC_ARG_WITH(tiff_lib, [ --with-tiff-lib= Full path to tiff lib directory [[auto]]]) AC_ARG_WITH(gmt_config, [ --with-gmt-config= Full path to gmt-config [[auto]]]) AC_ARG_ENABLE(debug, [ --enable-debug Compile for debugging instead of optimizing code]) AC_ARG_ENABLE(rpath, [ --disable-rpath Do not hardcode runtime library paths]) AC_ARG_ENABLE(shared, [ --enable-shared Build shared (dynamic) GMTSAR libraries instead of static]) AC_ARG_VAR(GMT_INC,Location of GMT headers (compile-time)) AC_ARG_VAR(GMT_LIB,Location of GMT library (compile-time)) dnl dnl ------------------------------------------------------------------ dnl Check for ar, csh/bash, ld, awk, and ranlib dnl ------------------------------------------------------------------ dnl AC_CHECK_PROG(GMT_in_path, gmtvector, 1, 0) if test "$GMT_in_path" = "X0" ; then AC_MSG_RESULT(GMT v5 or later executables are not in your path - aborting) exit 1 fi AC_CHECK_PROGS(PAGER, less more, cat) AC_CHECK_PROG(AR, ar, ar, :) AC_CHECK_PROG(CSH, csh, csh, bash, ) AC_CHECK_PROG(LD, ld, ld, :) AC_CHECK_PROG(GNUTAR, gnutar, gnutar, :) AC_PROG_LN_S AC_PROG_INSTALL AC_PROG_AWK AC_PROG_RANLIB dnl dnl ------------------------------------------------------------------ dnl Get current OS and chip type and set LAPACK dnl ------------------------------------------------------------------ dnl os=`uname -s` AC_MSG_CHECKING(for LAPACK library) if test "X$os" = "XDarwin" ; then MT="-mt" osr=`uname -r | cut -d. -f1` LALIBS="-framework Accelerate" else MT="" AX_LAPACK LALIBS="$LAPACK_LIBS $BLAS_LIBS" fi AC_MSG_RESULT($LALIBS) chip=`uname -p` Sun_rev=`uname -r | grep '^5.'` rootdir=`pwd` dnl dnl ------------------------------------------------------------------ dnl Check for libraries. Most installs will need to have dnl -lm but under OS X it is not needed. Thus, we look dnl for sin in -lm which should set -lm on most platforms. dnl ------------------------------------------------------------------ dnl AC_SEARCH_LIBS(sin, m) dnl dnl ------------------------------------------------------------------ dnl Set path to Orbits directory with --with-orbits=dir dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(for ORBITS directory) if test "X$with_orbits_dir" = "Xyes"; then ORBITS_DIR=$rootdir AC_MSG_RESULT([Not specified, default to $ORBITS_DIR]) elif test "X$with_orbits_dir" = "Xno"; then ORBITS_DIR=$rootdir AC_MSG_RESULT([Not specified, default to $ORBITS_DIR]) else ORBITS_DIR=$with_orbits_dir AC_MSG_RESULT($ORBITS_DIR) fi dnl dnl ------------------------------------------------------------------ dnl Set the HDF5 include and lib stuff dnl ------------------------------------------------------------------ AX_LIB_HDF5() HDF5_LIBS="$HDF5_LIBS -lhdf5_cpp" # Add the C++ library AC_MSG_CHECKING(for HDF5 include) AC_MSG_RESULT($HDF5_CPPFLAGS) AC_MSG_CHECKING(for HDF5 libs) AC_MSG_RESULT([$HDF5_LDFLAGS $HDF5_LIBS]) dnl dnl ------------------------------------------------------------------ dnl Set path to tiff directories with --with-tiff=include|lib dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(for TIFF include directory) if test "X$with_TIFF_include" = "X"; then # Must look for it in standard places if [ test -d /sw/include ]; then # fink TIFF_INC=/sw/include elif [ test -d /opt/local/include ]; then # macports TIFF_INC=/opt/local/include elif [ test -d /usr/local/include ]; then TIFF_INC=/usr/local/include elif [ test -d /usr/include ]; then # Ubuntu TIFF_INC=/usr/include elif [ test -d /opt/csw/include ]; then # Blastwave TIFF_INC=/opt/csw/include elif [ test -d /opt/include ]; then TIFF_INC=/opt/include fi else TIFF_INC=$with_tiff_include fi AC_MSG_RESULT($TIFF_INC) AC_MSG_CHECKING(for TIFF library directory) if test "X$with_tiff_lib" = "X"; then # Must look for it in standard places if [ test -d /sw/include ]; then # fink TIFF_LIB=/sw/lib elif [ test -d /opt/local/include ]; then # macports TIFF_LIB=/opt/local/lib elif [ test -d /usr/local/include ]; then TIFF_LIB=/usr/local/lib elif [ test -d /usr/include ]; then # Ubuntu TIFF_LIB=/usr/lib/x86_64-linux-gnu elif [ test -d /opt/csw/include ]; then # Blastwave TIFF_LIB=/opt/csw/lib elif [ test -d /opt/include ]; then TIFF_LIB=/opt/lib fi else TIFF_LIB=$with_tiff_lib/lib fi AC_MSG_RESULT($TIFF_LIB) dnl dnl ------------------------------------------------------------------ dnl Set path to tiff directories with --with-tiff=include|lib dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(for TIFF include directory) if [ test -d /sw/include ]; then # fink TIFF_INC=/sw/include elif [ test -d /opt/local/include ]; then # macports TIFF_INC=/opt/local/include elif [ test -d /usr/local/include ]; then TIFF_INC=/usr/local/include elif [ test -d /usr/include ]; then # Ubuntu TIFF_INC=/usr/include elif [ test -d /opt/csw/include ]; then # Blastwave TIFF_INC=/opt/csw/include elif [ test -d /opt/include ]; then TIFF_INC=/opt/include fi AC_MSG_RESULT($TIFF_INC) AC_MSG_CHECKING(for TIFF library directory) if test "X$with_tiff_lib" = "X"; then # Must look for it in standard places if [ test -d /sw/include ]; then # fink TIFF_LIB=/sw/lib elif [ test -d /opt/local/include ]; then # macports TIFF_LIB=/opt/local/lib elif [ test -d /usr/local/include ]; then TIFF_LIB=/usr/local/lib elif [ test -d /usr/include ]; then # Ubuntu TIFF_LIB=/usr/lib/x86_64-linux-gnu elif [ test -d /opt/csw/include ]; then # Blastwave TIFF_LIB=/opt/csw/lib elif [ test -d /opt/include ]; then TIFF_LIB=/opt/lib fi else TIFF_LIB=$with_tiff_lib/lib fi AC_MSG_RESULT($TIFF_LIB) dnl dnl dnl ------------------------------------------------------------------ dnl We use gmt-config to set GMT paths and settings dnl ------------------------------------------------------------------ dnl if test "X$with_gmt_config" != "Xno" ; then AC_PATH_PROG([GMT_CONF], [gmt-config], [$with_gmt_config]) fi if test -x "$GMT_CONF" && test "X$GMT_INC" = "X" && test "X$GMT_LIB" = "X" ; then AC_MSG_CHECKING(for GMT includes) GMT_INC=`$GMT_CONF --cflags` AC_MSG_RESULT($GMT_INC) AC_MSG_CHECKING(for GMT libs) GMT_LIB=`$GMT_CONF --libs` AC_MSG_RESULT($GMT_LIB) GMT_LIB_PATH=`echo $GMT_LIB | sed 's/^-L//;s/\ .*//'` rpath="$GMT_LIB_PATH" AC_MSG_CHECKING(for 32/64-bit GMT installation) bits=`$GMT_CONF --bits` GCC_64="-m${bits}" LDFLAGS="$LDFLAGS -m${bits}" AC_MSG_RESULT(found ${bits}-bit) fi dnl dnl ------------------------------------------------------------------ dnl Allow user to set --enable-debug to pass -g flag dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(if we should compile with debugging switch -g) CFLAGS=$ac_save_CFLAGS CXXFLAGS=$ac_save_CXXFLAGS if test "X$enable_debug" = "Xyes" ; then AC_MSG_RESULT(yes) CFLAGS="$CFLAGS -g" CXXFLAGS="$CXXFLAGS -g" else CFLAGS=`echo $CFLAGS | sed 's/-g//'` CXXFLAGS=`echo $CXXFLAGS | sed 's/-g//'` if test "$os" = "Darwin" ; then LDFLAGS="$LDFLAGS -Wl,-x" else LDFLAGS="$LDFLAGS -s" fi if test "$GCC" = "yes" || test "$os" = "Linux" || test "$os" = "AIX"; then CFLAGS="$CFLAGS -O2" CXXFLAGS="$CXXFLAGS -O2" elif test "$chip" = "alpha" || test "$os" = "AUX" || test "$os" = "HP-UX"; then CFLAGS="$CFLAGS" else CFLAGS="$CFLAGS -O" CXXFLAGS="$CXXFLAGS -O" fi AC_MSG_RESULT(no) fi dnl dnl ------------------------------------------------------------------ dnl Determine LD_OPT for this platform dnl ------------------------------------------------------------------ dnl shared_unknown=no LD_OPT= LD=ld SL=so LIBEXT='$(SL)' SL_VERSION='$(SL)' if test "X$enable_shared" = "Xyes" ; then AC_MSG_CHECKING(how to make a shared object) if test "X$CYGWIN" = "Xyes" ; then SL=dll.a SL_VERSION=$LIB_MAJOR_VERSION.$SL LD='$(CC)' LD_OPT="-shared" elif test "$os" = "SunOS" ; then if test "$Sun_rev" = "" ; then # SunOS LD_OPT="-Bdynamic" else # Solaris LD_OPT="-G" fi elif test "$os" = "Linux" || test "$os" = "GNU/kFreeBSD" ; then # Need optimization when doing shared LD='$(CC)' SL_VERSION=$SL.$LIB_MAJOR_VERSION LD_OPT='-shared -Wl,-soname=$*.'$SL_VERSION elif test "$os" = "FreeBSD" || test "$os" = "NetBSD" ; then SL_VERSION=$SL.$LIB_MAJOR_VERSION LD_OPT='-shared -Wl,-soname=$*.'$SL_VERSION elif test "$os" = "OSF1" ; then LD_OPT='-shared -expect_unresolved "*"' elif test "$os" = "IRIX64" ; then LD_OPT="-shared" # Need to remove -L/usr/lib to avoid mixing o32 and n32 X_LIBS= elif test "$os" = "Darwin" ; then # MacOS X SL=dylib SL_VERSION=$LIB_MAJOR_VERSION.$SL LD='$(CC)' LD_OPT='-install_name ${prefix}/lib/$*.'$SL_VERSION' -compatibility_version 4.0.0 -current_version '$LIB_VERSION' -dynamiclib '$OSX_L if test $osr -eq 8 ; then # Tiger needs special option for shared libs CFLAGS="$CFLAGS -fno-common" fi elif test "$os" = "HP-UX" ; then LD_OPT="-b" SL=sl else # Not yet implemented AC_MSG_RESULT(not supported for GMTSAR under $os - building static libs instead) enable_shared=no shared_unknown=yes fi fi if test "X$enable_shared" = "Xyes" ; then rpath="$rpath"':$(libdir)' AC_MSG_RESULT($LD $LD_OPT) AC_MSG_CHECKING(the file extension for shared libraries) AC_MSG_RESULT($SL) else LIBEXT='a' fi dnl dnl ------------------------------------------------------------------ dnl Determine LDFLAGS for this platform dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(linker options) flag= if test "X$enable_rpath" = "Xno" ; then flag= elif test "$os" = "SunOS" ; then if test "$Sun_rev" = "" ; then flag="-L" else flag="-R," fi elif test "$os" = "Linux" || test "$os" = "FreeBSD" || test "$os" = "NetBSD" || test "$os" = "OSF1" || test "$os" = "IRIX64" ; then flag="-rpath," elif test "$os" = "HP-UX" ; then flag="+b," fi if test "X$flag" != "X" ; then LDFLAGS="$LDFLAGS -Wl,$flag$rpath" fi AC_MSG_RESULT($LDFLAGS) dnl dnl ------------------------------------------------------------------ dnl Determine CFLAGS for this platform dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(C compiler options for GMTSAR) if test "$GCC" = "yes"; then # GNU cc options if test "$chip" = "alpha" ; then # Alpha PC CFLAGS="$CFLAGS -mieee -Wall $GCC_64" CXXFLAGS="$CXXFLAGS -mieee -Wall $GCC_64" else # MacOSX, Linux, ... CFLAGS="$CFLAGS -Wall $GCC_64" CXXFLAGS="$CXXFLAGS -Wall $GCC_64" fi CFLAGS="$CFLAGS -fPIC -fno-strict-aliasing -std=c99" CXXFLAGS="$CXXFLAGS -fPIC" elif test "$os" = "SunOS" ; then # Sun Workshop CC options CFLAGS="$CFLAGS -Xc" elif test "$os" = "HP-UX" ; then # HP cc options CFLAGS="$CFLAGS -Aa +Ofltacc +O1 +Olibcalls" if test "$enable_shared" = "yes" ; then CFLAGS="$CFLAGS +z" fi elif test "$os" = "OSF1" ; then # Dec Alpha OSF cc options CFLAGS="$CFLAGS -Olimit 1500 -ieee_with_inexact" elif test "$os" = "ULTRIX" ; then # Dec Ultrix cc options CFLAGS="$CFLAGS -Olimit 1500" fi AC_MSG_RESULT($CFLAGS) dnl dnl ------------------------------------------------------------------ dnl Determine CPPFLAGS for this platform dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(compiler preprocessor flags for GMTSAR) if test "$os" = "AUX" ; then # Apple A/UX cc options CPPFLAGS="$CPPFLAGS -Daux" fi AC_MSG_RESULT($CPPFLAGS) dnl dnl ------------------------------------------------------------------ dnl Check if we have GNU make. If not, add CPPFLAGS to CFLAGS dnl ------------------------------------------------------------------ dnl AC_MSG_CHECKING(if CPPFLAGS need to be added to CFLAGS) ${MAKE:-make} -p -f /dev/null 2>&1 | grep CPPFLAGS > /dev/null if test "$?" = "0" ; then AC_MSG_RESULT(no) else CFLAGS="$CFLAGS "'$(CPPFLAGS)' AC_MSG_RESULT(yes) fi GMTSAR_VERSION=AC_PACKAGE_VERSION dnl dnl ------------------------------------------------------------------ dnl Update Make macros and preprocess scripts that need the orbits dir dnl ------------------------------------------------------------------ dnl AC_OUTPUT(config.mk preproc/ENVI_preproc/scripts/ENVI_pre_process preproc/ENVI_preproc/scripts/ENVI_SLC_pre_process preproc/ERS_preproc/scripts/ERS_pre_process gmtsar/csh/gmtsar_sharedir.csh) dnl GMTSAR_V5.7/.svn/pristine/2f/2fbe9f2e9c52558b3ef1d058abb357784c45a465.svn-base000444 015705 000000 00000006705 13505462014 025715 0ustar00sandwellwheel000000 000000 /************************************************************************ * soi.h is the include file for the esarp SAR processor. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * * * * 4/23/97- added parameters for orbit calculations: x_target, * * y_target,z_target,baseline,alpha,sc_identity, * * ref_identity,SC_clock_start,SC_clock_stop, * * clock_start,clock_stop * * -DTS * * * * 4/23/97- added parameters: rec_start, rec_stop * * -EJP * * * * 8/28/97- added parameters baseline_start baseline_end * * alpha_start alpha_end * * * * 9/12/97 added clipi2 function to clip to short int * * * * 4/26/06 added nrows, num_lines * ************************************************************************/ #include #include #include #define SOL 299792456.0 #define PI 3.1415926535897932 #define PI2 6.2831853071795864 #define I2MAX 32767. #define I2SCALE 4.e6 #define TRUE 1 #define FALSE 0 #define RW 0666 #define MULT_FACT 1000.0 #define sgn(A) ((A) >= 0.0 ? 1.0 : -1.0) #define clipi2(A) (((A) > I2MAX) ? I2MAX : (((A) < -I2MAX) ? -I2MAX : A)) typedef struct SCOMPLEX { short r, i; } scomplex; typedef struct FCOMPLEX { float r, i; } fcomplex; typedef struct DCOMPLEX { double r, i; } dcomplex; char *input_file; char *out_amp_file; char *out_data_file; char *deskew; char *iqflip; char *off_vid; char *srm; char *ref_file; int debug_flag; int bytes_per_line; int good_bytes; int first_line; int num_patches; int first_sample; int num_valid_az; int st_rng_bin; int num_rng_bins; int nextend; int nlooks; int xshift; int yshift; int fdc_ystrt; int fdc_strt; /*New parameters 4/23/97 -EJP */ int rec_start; int rec_stop; /* End new parameters 4/23/97 -EJP */ /* New parameters 4/23/97 -DTS */ int SC_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS */ int ref_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS */ double SC_clock_start; /* YYDDD.DDDD */ double SC_clock_stop; /* YYDDD.DDDD */ double icu_start; /* onboard clock counter */ double clock_start; /* DDD.DDDDDDDDDD same as SC_clock_start but no date and more precise */ double clock_stop; /* DDD.DDDDDDDDDD same as SC_clock_start but no date and more precise */ /* End new parameters 4/23/97 -DTS */ double caltone; double RE; /* Local Earth radius */ double vel1; /* Equivalent SC velocity */ double ht1; /* (SC_radius - RE) */ double near_range; double far_range; double prf1; double xmi1; double xmq1; double az_res; double fs; double slope; double pulsedur; double lambda; double rhww; double pctbw; double pctbwaz; double fd1; double fdd1; double fddd1; double sub_int_r; double sub_int_a; double stretch_r; double stretch_a; double a_stretch_r; double a_stretch_a; /* New parameters 8/28/97 -DTS */ double baseline_start; double baseline_end; double alpha_start; double alpha_end; /* End new parameters 8/28/97 -DTS */ /* New parameters 4/26/06 */ int nrows; int num_lines; GMTSAR_V5.7/.svn/pristine/2f/2fa17cb17aadc7f657fb0b1056f83949e1c209af.svn-base000444 015705 000000 00000012173 13505462013 026027 0ustar00sandwellwheel000000 000000 /************************************************************************ * acpatch is a subroutine to perform azimuth compression of radar echos.* * It is part of the esar SAR processor. Echos should be range * * compressed and migrated before applying azimuth compression. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification history: * * 34MAR2000 - Modified to account for azimuth stretch with azimuth * * * * * ************************************************************************/ #include "gmt.h" #include "siocomplex.h" #include "soi.h" void acpatch(void *API, fcomplex **data, int nrows, double delr, double fd, double fdd, double fddd) { int i, j, k; int n, nfc, nf0; int *np; static int firsttime = 1; double dxsamp1, a2, a4, phase, rd0; double *r, dx, v1, az, y2; float t, sinsq; float *y, *f0, *f_rate; fcomplex cpha, *ref, *fft_vec; /* allocate memory */ if ((np = (int *)malloc(num_rng_bins * sizeof(int))) == NULL) { printf("sorry, couldn't allocate mem for np.\n"); exit(-1); } if ((r = (double *)malloc(num_rng_bins * sizeof(double))) == NULL) { printf("sorry, couldn't allocate mem for r.\n"); exit(-1); } if ((y = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("sorry, couldn't allocate mem for y.\n"); exit(-1); } if ((f0 = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("sorry, couldn't allocate mem for f0.\n"); exit(-1); } if ((f_rate = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("sorry, couldn't allocate mem for f_rate.\n"); exit(-1); } if ((ref = (fcomplex *)malloc(nrows * sizeof(fcomplex))) == NULL) { printf("sorry, couldn't allocate mem for ref.\n"); exit(-1); } if ((fft_vec = (fcomplex *)malloc(nrows * sizeof(fcomplex))) == NULL) { printf("sorry, couldn't allocate mem for fft_vec.\n"); exit(-1); } /* this is the actual x_pix_size that we want to output */ dxsamp1 = vel1 / prf1; a4 = lambda / (2.0 * dxsamp1 * az_res); if ((strcmp(deskew, "y") == 0) || (strcmp(deskew, "Y") == 0)) a2 = -2.0 * PI / (dxsamp1 * (float)nrows); else a2 = 0.0; dx = vel1 / prf1; v1 = pow(lambda, 2.0) / (8.0 * pow(dx, 2.0)); /* convert a resampling coefficients to a function of range instead of pixel */ if (firsttime == 1) { sub_int_a = sub_int_a - stretch_a * near_range / delr; stretch_a = stretch_a / delr; firsttime = 0; } for (i = 0; i < num_rng_bins; i++) { r[i] = near_range + ((float)i) * delr; f0[i] = fd + fdd * r[i] + fddd * r[i] * r[i]; rd0 = r[i] / (1 + v1 * pow((f0[i] / prf1), 2.0)); f_rate[i] = -2.0 * pow(vel1, 2.0) * pow((rd0 / r[i]), 2.0) / (lambda * r[i]); np[i] = (int)(r[i] * a4 / 2); az = stretch_a * r[i] + sub_int_a; y2 = PI2 * az / ((float)nrows); sinsq = lambda * f0[i] / (2.0 * vel1); y[i] = r[i] * a2 * sinsq + y2; /* create reference function */ for (j = 0; j < nrows; j++) { ref[j].r = 0.0f; ref[j].i = 0.0f; } phase = PI * pow(f0[i], 2.0) / f_rate[i]; ref[0] = Cexp(phase); ref[0] = RCmul((1.0 / nrows), ref[0]); for (j = 0; j < np[i]; j++) { t = ((float)(j + 1)) / prf1; phase = PI * f_rate[i] * t * t + PI2 * f0[i] * t; ref[j + 1] = Cexp(phase); ref[j + 1] = RCmul((1.0 / nrows), ref[j + 1]); phase = PI * f_rate[i] * t * t - PI2 * f0[i] * t; ref[-j + nrows - 1] = Cexp(phase); ref[-j + nrows - 1] = RCmul((1.0 / nrows), ref[-j + nrows - 1]); } /* transform the reference */ // dir = -1; // cfft1d_(&nrows,ref,&dir); GMT_FFT_1D(API, (float *)ref, nrows, GMT_FFT_FWD, GMT_FFT_COMPLEX); /* multiply the reference by the data */ n = (int)((f0[i] / prf1) + 0.5); nf0 = nrows * (f0[i] - n * prf1) / prf1; nfc = nf0 + nrows / 2; if (nfc > nrows) nfc = nfc - nrows; phase = -y[i] * nf0; for (k = 0; k < nfc; k++) { ref[k] = Conjg(ref[k]); data[k][i] = Cmul(data[k][i], ref[k]); cpha = Cexp(phase); data[k][i] = Cmul(data[k][i], cpha); phase = phase + y[i]; } phase = -y[i] * nf0; for (k = nrows - 1; k >= nfc; k--) { ref[k] = Conjg(ref[k]); data[k][i] = Cmul(data[k][i], ref[k]); cpha = Cexp(phase); data[k][i] = Cmul(data[k][i], cpha); phase = phase - y[i]; } /* inverse transform the product */ for (j = 0; j < nrows; j++) { fft_vec[j] = data[j][i]; } // dir = 1; // cfft1d_(&nrows,fft_vec,&dir); GMT_FFT_1D(API, (float *)fft_vec, nrows, GMT_FFT_INV, GMT_FFT_COMPLEX); for (j = 0; j < nrows; j++) { data[j][i] = fft_vec[j]; } } free((char *)np); free((char *)r); free((char *)y); free((char *)f0); free((char *)f_rate); free((char *)ref); free((char *)fft_vec); } GMTSAR_V5.7/.svn/pristine/2f/2fec5fd21b9ff8a5a00e7a2ed9d5faac58905669.svn-base000444 015705 000000 00000013016 13505462013 026203 0ustar00sandwellwheel000000 000000 15 15 4.6770622383958980e-02 7.0211020014988038e-02 9.9013408363826300e-02 1.3117145431019428e-01 1.6324551245395841e-01 1.9085333986431632e-01 2.0961138715109781e-01 2.1626516682988731e-01 2.0961138715109781e-01 1.9085333986431632e-01 1.6324551245395841e-01 1.3117145431019428e-01 9.9013408363826300e-02 7.0211020014988038e-02 4.6770622383958980e-02 7.0211020014988038e-02 1.0539922456186433e-01 1.4863673053812251e-01 1.9691167520419406e-01 2.4506053924552590e-01 2.8650479686019009e-01 3.1466396101845900e-01 3.2465246735834974e-01 3.1466396101845900e-01 2.8650479686019009e-01 2.4506053924552590e-01 1.9691167520419406e-01 1.4863673053812251e-01 1.0539922456186433e-01 7.0211020014988038e-02 9.9013408363826300e-02 1.4863673053812251e-01 2.0961138715109781e-01 2.7768997095378994e-01 3.4559075257697452e-01 4.0403652366334208e-01 4.4374731008107987e-01 4.5783336177161427e-01 4.4374731008107987e-01 4.0403652366334208e-01 3.4559075257697452e-01 2.7768997095378994e-01 2.0961138715109781e-01 1.4863673053812251e-01 9.9013408363826300e-02 1.3117145431019428e-01 1.9691167520419406e-01 2.7768997095378994e-01 3.6787944117144233e-01 4.5783336177161427e-01 5.3526142851899028e-01 5.8786967312234650e-01 6.0653065971263342e-01 5.8786967312234650e-01 5.3526142851899028e-01 4.5783336177161427e-01 3.6787944117144233e-01 2.7768997095378994e-01 1.9691167520419406e-01 1.3117145431019428e-01 1.6324551245395841e-01 2.4506053924552590e-01 3.4559075257697452e-01 4.5783336177161427e-01 5.6978282473092301e-01 6.6614361070348771e-01 7.3161562894664178e-01 7.5483960198900735e-01 7.3161562894664178e-01 6.6614361070348771e-01 5.6978282473092301e-01 4.5783336177161427e-01 3.4559075257697452e-01 2.4506053924552590e-01 1.6324551245395841e-01 1.9085333986431632e-01 2.8650479686019009e-01 4.0403652366334208e-01 5.3526142851899028e-01 6.6614361070348771e-01 7.7880078307140488e-01 8.5534532730742252e-01 8.8249690258459546e-01 8.5534532730742252e-01 7.7880078307140488e-01 6.6614361070348771e-01 5.3526142851899028e-01 4.0403652366334208e-01 2.8650479686019009e-01 1.9085333986431632e-01 2.0961138715109781e-01 3.1466396101845900e-01 4.4374731008107987e-01 5.8786967312234650e-01 7.3161562894664178e-01 8.5534532730742252e-01 9.3941306281347581e-01 9.6923323447634413e-01 9.3941306281347581e-01 8.5534532730742252e-01 7.3161562894664178e-01 5.8786967312234650e-01 4.4374731008107987e-01 3.1466396101845900e-01 2.0961138715109781e-01 2.1626516682988731e-01 3.2465246735834974e-01 4.5783336177161427e-01 6.0653065971263342e-01 7.5483960198900735e-01 8.8249690258459546e-01 9.6923323447634413e-01 1.0000000000000000e+00 9.6923323447634413e-01 8.8249690258459546e-01 7.5483960198900735e-01 6.0653065971263342e-01 4.5783336177161427e-01 3.2465246735834974e-01 2.1626516682988731e-01 2.0961138715109781e-01 3.1466396101845900e-01 4.4374731008107987e-01 5.8786967312234650e-01 7.3161562894664178e-01 8.5534532730742252e-01 9.3941306281347581e-01 9.6923323447634413e-01 9.3941306281347581e-01 8.5534532730742252e-01 7.3161562894664178e-01 5.8786967312234650e-01 4.4374731008107987e-01 3.1466396101845900e-01 2.0961138715109781e-01 1.9085333986431632e-01 2.8650479686019009e-01 4.0403652366334208e-01 5.3526142851899028e-01 6.6614361070348771e-01 7.7880078307140488e-01 8.5534532730742252e-01 8.8249690258459546e-01 8.5534532730742252e-01 7.7880078307140488e-01 6.6614361070348771e-01 5.3526142851899028e-01 4.0403652366334208e-01 2.8650479686019009e-01 1.9085333986431632e-01 1.6324551245395841e-01 2.4506053924552590e-01 3.4559075257697452e-01 4.5783336177161427e-01 5.6978282473092301e-01 6.6614361070348771e-01 7.3161562894664178e-01 7.5483960198900735e-01 7.3161562894664178e-01 6.6614361070348771e-01 5.6978282473092301e-01 4.5783336177161427e-01 3.4559075257697452e-01 2.4506053924552590e-01 1.6324551245395841e-01 1.3117145431019428e-01 1.9691167520419406e-01 2.7768997095378994e-01 3.6787944117144233e-01 4.5783336177161427e-01 5.3526142851899028e-01 5.8786967312234650e-01 6.0653065971263342e-01 5.8786967312234650e-01 5.3526142851899028e-01 4.5783336177161427e-01 3.6787944117144233e-01 2.7768997095378994e-01 1.9691167520419406e-01 1.3117145431019428e-01 9.9013408363826300e-02 1.4863673053812251e-01 2.0961138715109781e-01 2.7768997095378994e-01 3.4559075257697452e-01 4.0403652366334208e-01 4.4374731008107987e-01 4.5783336177161427e-01 4.4374731008107987e-01 4.0403652366334208e-01 3.4559075257697452e-01 2.7768997095378994e-01 2.0961138715109781e-01 1.4863673053812251e-01 9.9013408363826300e-02 7.0211020014988038e-02 1.0539922456186433e-01 1.4863673053812251e-01 1.9691167520419406e-01 2.4506053924552590e-01 2.8650479686019009e-01 3.1466396101845900e-01 3.2465246735834974e-01 3.1466396101845900e-01 2.8650479686019009e-01 2.4506053924552590e-01 1.9691167520419406e-01 1.4863673053812251e-01 1.0539922456186433e-01 7.0211020014988038e-02 4.6770622383958980e-02 7.0211020014988038e-02 9.9013408363826300e-02 1.3117145431019428e-01 1.6324551245395841e-01 1.9085333986431632e-01 2.0961138715109781e-01 2.1626516682988731e-01 2.0961138715109781e-01 1.9085333986431632e-01 1.6324551245395841e-01 1.3117145431019428e-01 9.9013408363826300e-02 7.0211020014988038e-02 4.6770622383958980e-02 GMTSAR_V5.7/.svn/pristine/2a/2a7500e539be1e132b88ba5b74df8b98bd33ebb4.svn-base000444 015705 000000 00000003502 13505462014 026016 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine used to call and initialize FFT routines from * * fftpack.c The calls are almost identical to the old Sun perflib * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography * * Date : 12/27/96 * * Date : 09/15/07 re-worked by Rob Mellors * * Date : 10/16/07 re-worked by David Sandwells to use pointers * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" #include #include void die(char *, char *); void cffti(int, float *); void cfftf(int, fcomplex *, float *); void cfftb(int, fcomplex *, float *); /*----------------------------------------------------------------------------*/ void cfft1d_(int *np, fcomplex *c, int *dir) { static float *work; static int nold = 0; int i, n; /* Initialize work array with sines and cosines to save CPU time later This is done when the length of the FFT has changed or when *dir == 0. */ n = *np; if ((n != nold) || (*dir == 0)) { if (nold != 0) free((char *)work); if ((work = (float *)malloc((4 * n + 30) * sizeof(float))) == NULL) die("Sorry, can't allocate mem", ""); cffti(n, work); nold = n; } /* Do forward transform with NO normalization. Forward is exp(+i*k*x) */ if (*dir == -1) cfftf(n, c, work); /* Do inverse transform with normalization. Inverse is exp(-i*k*x) */ if (*dir == 1) { cfftb(n, c, work); for (i = 0; i < n; i++) { c[i].i = c[i].i / (1.0 * n); c[i].r = c[i].r / (1.0 * n); } } } GMTSAR_V5.7/.svn/pristine/44/445d51466e2c71f25ea2875514a586fe2d83f6f4.svn-base000444 015705 000000 00000000560 13505462013 025410 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for alos after 4 x 2 decimation so the 0.5 gain % is at 300 m wavelength % clear sigx=5.65; sigy=7.55; nx=17; ny=17; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_alos_500m -ASCII -double gauss GMTSAR_V5.7/.svn/pristine/86/8624bcdae55baeef00cd11d5dfcfa60f68710a02.svn-base000444 015705 000000 00000104513 13505462014 026153 0ustar00sandwellwheel000000 000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . GMTSAR_V5.7/.svn/pristine/86/8637978c9e80041114e494fb7d732ba27e63d918.svn-base000444 015705 000000 00000022017 13505462014 025267 0ustar00sandwellwheel000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2004-12-17.09 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: GMTSAR_V5.7/.svn/pristine/86/86f3256e64cf9193824cef6b5108bb378e35a96b.svn-base000444 015705 000000 00000000505 13505462014 025505 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_llt2rat CSRCS = ALOS_llt2rat.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/81/819d15e202b06680a2aa0ab1d78603a539c0aac8.svn-base000444 015705 000000 00000005536 13505462013 025501 0ustar00sandwellwheel000000 000000 /* $Id: gmtsar.h 109 2015-01-19 23:01:24Z sandwell $ */ /* taken from soi.h */ #ifndef GMTSAR_H #define GMTSAR_H #include "gmt.h" #include "sfd_complex.h" #include "lib_functions.h" #include #include #include #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #ifndef SOI_H #define SOL 299792456.0 #define PI 3.1415926535897932 #define PI2 6.2831853071795864 #define I2MAX 32767.0 #define I2SCALE 4.e6 #define DFACT 2.5e-07 #define NS 4 /*number of samples in the sinc function of 2D interpolation */ #define TRUE 1 #define FALSE 0 #define RW 0666 #define MULT_FACT 1000.0 #define sgn(A) ((A) >= 0.0 ? 1.0 : -1.0) #define clipi2(A) (((A) > I2MAX) ? I2MAX : (((A) < -I2MAX) ? -I2MAX : A)) #endif /* SOI_H */ #define nint(x) (int)rint(x) #define ERS1 1 #define ERS2 2 #define RSAT 3 #define ENVS 4 #define ALOS 5 #define EXIT_FLAG 1 #define paka(p) \ { \ perror((p)); \ exit(EXIT_FLAG); \ } #define MALLOC(p, s) \ if (((p) = malloc(s)) == NULL) { \ paka("error: malloc() "); \ } #define NULL_DATA 15 #define NULL_INT -99999 #define NULL_DOUBLE -99999.9999 #define NULL_CHAR "XXXXXXXX" #ifndef MIN #define MIN(x, y) (((x) < (y)) ? (x) : (y)) /* min and max value macros */ #endif #ifndef MAX #define MAX(x, y) (((x) > (y)) ? (x) : (y)) #endif #include "PRM.h" #include "llt2rat.h" #include "siocomplex.h" /* global variables */ int verbose; /* controls minimal level of output */ int debug; /* more output */ int swap; /* whether to swap bytes */ int quad_pol; /* quad polarization data */ int force_slope; /* whether to force the slope */ int dopp; /* whether to calculate doppler */ int roi_flag; /* whether to write roi.in */ int sio_flag; /* whether to write PRM file */ int nodata; int quiet_flag; double forced_slope; /* value to set chirp_slope to */ int SAR_mode; /* 0 => high-res */ /* 1 => wide obs */ /* 2 => polarimetry */ /* from ALOS Product Format 3-2 */ #endif /* GMTSAR_H */ GMTSAR_V5.7/.svn/pristine/81/81fcfad8a15f969b65d94b1ce2b462e41c847bdd.svn-base000444 015705 000000 00000002563 13505462014 026052 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_filter applies a low-pass filter in the fourier domain by * * zeroing in wavenumber space * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography) * * Date : 10/09/14 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" void cfft1d_(int *, fcomplex *, int *); void rng_filter(fcomplex *cin, int nffti, fcomplex *cout) { int i, dir, nf, nt; nf = .70 * nffti / 2; nt = nffti - 1; /* do the forward fft */ dir = -1; cfft1d_(&nffti, cin, &dir); /* first zero the output array */ for (i = 0; i < nffti; i++) { cout[i].r = 0.; cout[i].r = 0.; } /* only keep the lower frequencies */ for (i = 0; i < nf; i++) { cout[i].r = cin[i].r; cout[i].i = cin[i].i; cout[nt - i].r = cin[nt - i].r; cout[nt - i].i = cin[nt - i].i; } /* now inverse fft */ dir = 1; cfft1d_(&nffti, cout, &dir); } GMTSAR_V5.7/.svn/pristine/81/81dd319c352bb565a89163ab21085a49bcc50b3c.svn-base000444 015705 000000 00000001011 13505462014 025501 0ustar00sandwellwheel000000 000000 # # $Id$ # add_executable (snaphu snaphu.c snaphu_cost.c snaphu_cs2.c snaphu_io.c snaphu_solver.c snaphu_tile.c snaphu_util.c snaphu_cs2types.h snaphu.h) if (HAVE_M_LIBRARY) # link the math library target_link_libraries (snaphu m) endif (HAVE_M_LIBRARY) # add the install targets install (TARGETS snaphu ARCHIVE DESTINATION lib COMPONENT Runtime LIBRARY DESTINATION lib COMPONENT Runtime RUNTIME DESTINATION bin COMPONENT Runtime) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/.svn/pristine/75/75c5cafa459428490545fe113dd712fcd2ff20cb.svn-base000444 015705 000000 00000076134 13505462014 025703 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: David Sandwell and Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 04/06/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * Date : 08/21/15 DTS begin modification for precision shifting * * Date : 10/24/15 DTS Added the deramp and reramp * * Date : 12/29/15 DTS added 3-parameter phase shift and reramp * * Date : 01/14/15 EXU added range stretch and line interpolator * * * ***************************************************************************/ #include "PRM.h" #include "gmtsar.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include "tiffio.h" #include #include #include #include typedef struct burst_bounds { int SL; int SC; int SH; int EL; int EC; int EH; } burst_bounds; int pop_led(struct tree *, struct state_vector *); int write_orb(struct state_vector *sv, FILE *fp, int); int pop_burst(struct PRM *, struct tree *, struct burst_bounds *, char *); int shift_write_slcs(void *, struct PRM *, struct tree *, burst_bounds *, TIFF *, FILE *, FILE *, FILE *, int, double, double, double, double, double, double); int dramp_dmod(struct tree *, int, fcomplex *, int, int, double, double, double); int azi_shift(void *, fcomplex *, int, int, fcomplex *, int, double, double); int rng_shift(void *, fcomplex *, int, int, fcomplex *, int, double); int rng_interp(fcomplex *, fcomplex *, int, int, int, int, double, double, double); double sinc_kernel(double); char *USAGE = "\nUsage: make_s1a_tops_6par xml_file tiff_file output mode rng_shift " "azi_shift stretch_a a_stretch_a stretch_r a_stretch_r\n" " xml_file - name of xml file \n" " tiff_file - name of tiff file \n" " output - stem name of output files .PRM, .LED, .SLC \n" " mode - (0) no SLC; (1) center SLC; (2) high SLCH and low " "SLCL \n" " rng_shift - fractional part of desired range shift \n" " azi_shift - fractional part of desired azimuth shift \n" " stretch_a - additional azimuth shift in range dir \n" " a_stretch_a - additional azimuth shift in azimuth dir \n" " stretch_r - additional range shift in range dir \n" " a_stretch_r - additional range shift in azimuth dir \n" "\nExample: make_s1a_tops_6par s1a-s1-slc-vv-20140807.xml " "s1a-s1-slc-vv-20140807.tiff S1A20140807 1 0.4596 .9109 2.18065e-06 " "-3.63255e-06 1.37343e-05 -3.13352e-05 \n" "\nOutput: S1A20140807.PRM S1A20140807.LED S1A20140807.SLC\n"; int main(int argc, char **argv) { FILE *XML_FILE, *OUTPUT_PRM, *OUTPUT_LED; FILE *OUTPUT_SLCL = NULL, *OUTPUT_SLCC = NULL, *OUTPUT_SLCH = NULL; TIFF *TIFF_FILE; char tmp_str[200]; struct PRM prm; struct tree *xml_tree; struct state_vector sv[400]; struct burst_bounds bb[200]; int ch, n = 0, nc = 0, nlmx = 0, imode = 0; double rng, azi, stretch_a, a_stretch_a, stretch_r, a_stretch_r; // Begin: Initializing new GMT session void *API = NULL; // GMT API control structure if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; if (argc < 11) die(USAGE, ""); // find the number of lines and the maximum line length of the xml file if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } fclose(XML_FILE); xml_tree = (struct tree *)malloc(n * 5 * sizeof(struct tree)); // generate the xml tree if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_tree(XML_FILE, xml_tree, 1); fclose(XML_FILE); // show_tree(xml_tree,0,0); // generate the LED file n = pop_led(xml_tree, sv); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // initiate the prm null_sio_struct(&prm); // analyze the burst and generate the PRM pop_burst(&prm, xml_tree, bb, argv[3]); // open the TIFF file and the three SLC files SLCL-low SLCC-center and // SLCH-high TIFFSetWarningHandler(NULL); if ((TIFF_FILE = TIFFOpen(argv[2], "rb")) == NULL) die("Couldn't open tiff file: \n", argv[2]); // open output files depending on the imode imode = atoi(argv[4]); if (imode == 1) { strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLCC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(C) file: \n", tmp_str); } else if (imode == 2) { strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLCL"); if ((OUTPUT_SLCL = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(L) file: \n", tmp_str); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLCH"); if ((OUTPUT_SLCH = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc(H) file: \n", tmp_str); } else { // don't open any files } /* apply range and azimuth shifts to each burst and write the three SLC files * SLCL SLC and SLCH depending on imode */ /* the negative signs are needed for all but the azimuth stretch versus range */ rng = atof(argv[5]); azi = -atof(argv[6]); stretch_r = atof(argv[9]); a_stretch_r = atof(argv[10]); stretch_a = atof(argv[7]); a_stretch_a = -atof(argv[8]); prm.sub_int_r = rng; prm.sub_int_a = -azi; prm.stretch_a = stretch_a; prm.a_stretch_a = -a_stretch_a; prm.stretch_r = stretch_r; prm.a_stretch_r = a_stretch_r; shift_write_slcs(API, &prm, xml_tree, bb, TIFF_FILE, OUTPUT_SLCL, OUTPUT_SLCC, OUTPUT_SLCH, imode, rng, azi, stretch_a, a_stretch_a, stretch_r, a_stretch_r); TIFFClose(TIFF_FILE); if (imode == 2) fclose(OUTPUT_SLCL); if (imode == 1) fclose(OUTPUT_SLCC); if (imode == 2) fclose(OUTPUT_SLCH); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); free(xml_tree); if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 100.0) / 100.0 - trunc((sv[0].sec) * 100.0) / 100.0; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.6lf %lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led(tree *xml_tree, state_vector *sv) { int i, count; char tmp_c[200]; double tmp_d; search_tree(xml_tree, "/product/generalAnnotation/orbitList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); for (i = 0; i < count; i++) { search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 2, 4, i + 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 1, 4, i + 1); tmp_c[4] = '\0'; sv[i].yr = (int)(str2double(tmp_c)); sv[i].jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); sv[i].sec = (tmp_d - trunc(tmp_d)) * 86400; search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/x/", tmp_c, 1, 4, i + 1); sv[i].x = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/y/", tmp_c, 1, 4, i + 1); sv[i].y = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/position/z/", tmp_c, 1, 4, i + 1); sv[i].z = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, i + 1); sv[i].vx = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, i + 1); sv[i].vy = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, i + 1); sv[i].vz = str2double(tmp_c); } printf("Writing %d lines for orbit...\n", count); return (count); } int pop_burst(struct PRM *prm, tree *xml_tree, struct burst_bounds *bb, char *file_name) { char tmp_c[200], tmp_cc[60000]; double tmp_d, dt, t[100]; int i, j, k, nl = 0, nlf, ntl, count, lpb, tmp_i, flag, flag0; int k_start, kC; int *kF, *ksa, *ksr, *kea, *ker, *kover; double t0 = -1., time; char *cflag, *cflag_orig; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/numberOfLooks/", tmp_c, 1, 0, 1); prm->nlooks = (int)str2double(tmp_c); prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; strasign(prm->dtype, "a", 0, 0); search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_c, 1, 0, 1); prm->fs = str2double(tmp_c); // rng_samp_rate prm->SC_identity = 10; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ search_tree(xml_tree, "/product/generalAnnotation/productInformation/radarFrequency/", tmp_c, 1, 0, 1); prm->lambda = SOL / str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/downlinkInformationList/" "downlinkInformation/downlinkValues/txPulseLength/", tmp_c, 1, 0, 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/processingInformation/swathProcParamsList/" "swathProcParams/rangeProcessing/lookBandwidth/", tmp_c, 1, 0, 1); prm->chirp_slope = str2double(tmp_c) / tmp_d; prm->pulsedur = tmp_d; search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/re/", tmp_c, 1, 0, 1); // prm->xmi = str2double(tmp_c); //I_mean prm->xmi = 0.0; // I_mean search_tree(xml_tree, "/product/qualityInformation/qualityDataList/qualityData/" "imageQuality/imageStatistics/outputDataMean/im/", tmp_c, 1, 0, 1); // prm->xmq = str2double(tmp_c); //Q_mean prm->xmq = 0.0; // Q_mean search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dt = str2double(tmp_c); prm->prf = 1 / dt; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_c, 1, 0, 1); /* subtract a correction of 1 * drange to the near range based on Pinon corner * reflector analysis DTS 09/24/18 */ prm->near_range = (str2double(tmp_c) - 1. / prm->fs) * SOL / 2; prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius search_tree(xml_tree, "/product/generalAnnotation/productInformation/pass/", tmp_c, 1, 0, 1); strasign(prm->orbdir, tmp_c, 0, 0); strasign(prm->lookdir, "R", 0, 0); strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfSamples/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c) - (int)str2double(tmp_c) % 4; prm->bytes_per_line = tmp_i * 4; prm->good_bytes = prm->bytes_per_line; prm->num_rng_bins = prm->bytes_per_line / 4; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig prm->az_res = 0.0; // prm->antenna_side = -1; prm->fdd1 = 0.0; prm->fddd1 = 0.0; // manipulate the lines search_tree(xml_tree, "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); // count = 1; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/numberOfLines/", tmp_c, 1, 0, 1); ntl = (int)str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/linesPerBurst/", tmp_c, 1, 4, 0); lpb = (int)str2double(tmp_c); nlf = count * lpb; // allocate some memory kF = (int *)malloc(nlf * sizeof(int)); ksa = (int *)malloc((count + 1) * sizeof(int)); ksr = (int *)malloc((count + 1) * sizeof(int)); kea = (int *)malloc((count + 1) * sizeof(int)); ker = (int *)malloc((count + 1) * sizeof(int)); kover = (int *)malloc((count + 1) * sizeof(int)); cflag_orig = (char *)malloc(sizeof(char) * 80 * (lpb + 1)); cflag = cflag_orig; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/productFirstLineUtcTime/", tmp_c, 2, 0, 1); prm->clock_start = str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/productFirstLineUtcTime/", tmp_c, 1, 0, 1); tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(tmp_c); k = 0; flag0 = -1; for (i = 1; i <= count; i++) { search_tree(xml_tree, "/product/swathTiming/burstList/burst/azimuthAnxTime/", tmp_c, 1, 4, i); t[i] = str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/burstList/burst/firstValidSample/", tmp_cc, 1, 4, i); strcpy(cflag, tmp_cc); for (j = 0; j < lpb; j++) { flag = (int)strtol(cflag, &cflag, 10); time = t[i] + (double)j / prm->prf; kF[k] = -1; // don't use flagged data if (flag >= 0) { if (t0 < 0.) { t0 = time; k_start = k; } // the kF array uniquely maps the line on the input file into the SLC // line on output kF[k] = (int)((time - t0) * prm->prf + .1); nl = kF[k]; } // calculate the start and end index for each burst if (flag > flag0) { ksa[i] = kF[k]; ksr[i] = j; } if (flag < flag0) { kea[i] = kF[k - 1]; ker[i] = j - 1; } flag0 = flag; k++; } } // calculate the burst overlap. The first one is zero. kover[0] = 0; for (i = 1; i <= count; i++) { kover[i] = 0; if (i < count) kover[i] = kea[i] - ksa[i + 1] + 1; } // calculate the approximate center shift kC = kover[1] / 2; // calculate the relative start S and end E lines for each burst in the L and // H configurations for (i = 1; i <= count; i++) { bb[i].SL = ksr[i]; bb[i].SH = ksr[i] + kover[i - 1]; bb[i].EL = ker[i] - kover[i]; bb[i].EH = ker[i]; } // make the center start end locations for (i = 1; i < count; i++) { bb[i].EC = bb[i].EL + kC; bb[i + 1].SC = bb[i + 1].SL + kC; } bb[1].SC = bb[1].SL; bb[count].EC = bb[i].EL; // make sure the number of lines is divisible by 4 prm->num_lines = nl - nl % 4; // advance the start time to account for the zero lines at the start of the // first burst prm->SC_clock_start = prm->SC_clock_start + (double)(k_start) / prm->prf / 86400.; prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_start = prm->clock_start + (double)(k_start) / prm->prf / 86400.; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->chirp_ext = 0; free(kF); free(ksa); free(ksr); free(kea); free(ker); free(kover); free(cflag_orig); /* freeing this memory causes a crash!!!! */ return (1); } int shift_write_slcs(void *API, struct PRM *prm, tree *xml_tree, burst_bounds *bb, TIFF *tif, FILE *slcl, FILE *slcc, FILE *slch, int imode, double rng, double azi, double stretch_a, double a_stretch_a, double stretch_r, double a_stretch_r) { uint16 s = 0; uint16 *buf; uint32 it; short *tmp, *brst; float *rtmp; int ii, jj, nl, k, k2, kk; int count, lpb, nlf, width2, nclip = 0; uint32 width, height, widthi; char tmp_c[200]; fcomplex *cbrst, *cramp; fcomplex *fft_vec_rng, *fft_vec_azi; int ranfft_rng, ranfft_azi; double rtest, itest, azi_new; int cl; // get the burst information and compare with the TIFF file search_tree(xml_tree, "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); count = (int)str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/linesPerBurst/", tmp_c, 1, 4, 0); lpb = (int)str2double(tmp_c); nlf = count * lpb; // get the width the file and make width divisible by 4 TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &widthi); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); width = widthi - widthi % 4; width2 = 2 * width; if (nlf != height) { fprintf(stderr, "XML and TIFF file disagree on image height %d %d \n", nlf, height); } // allocate memory for the burst and other arrays brst = (short *)malloc(lpb * width2 * sizeof(short)); cbrst = (fcomplex *)malloc(lpb * width * sizeof(fcomplex)); cramp = (fcomplex *)malloc(lpb * width * sizeof(fcomplex)); buf = (uint16 *)_TIFFmalloc(TIFFScanlineSize(tif)); tmp = (short *)malloc(width * 2 * sizeof(short)); rtmp = (float *)malloc(width * 2 * sizeof(float)); ranfft_rng = fft_bins(width); ranfft_azi = fft_bins(lpb); fft_vec_rng = (fcomplex *)malloc(ranfft_rng * sizeof(fcomplex)); fft_vec_azi = (fcomplex *)malloc(ranfft_azi * sizeof(fcomplex)); nl = prm->num_lines; // don't do anything if imode = 0 if (imode == 0) return (1); printf("Writing SLC..Image Size: %d X %d...\n", width, nl); it = 0; // loop over the bursts cl = 0; for (kk = 1; kk <= count; kk++) { fprintf(stderr, "burst # %d \n", kk); // read a burst into memory for (ii = 0; ii < lpb; ii++) { TIFFReadScanline(tif, buf, it, s); for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; brst[k] = (short)buf[jj]; } it++; } // load the burst into a complex float array for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; k2 = ii * width2 + jj * 2; cbrst[k].r = (float)brst[k2]; cbrst[k].i = (float)brst[k2 + 1]; } } // don't need this code if there are no shifts if (azi != 0. || rng != 0.) { // shift the burst in range if != 0. if (rng != 0.) { rng_interp(cbrst, fft_vec_rng, cl, bb[kk].SC, bb[kk].EC, width, rng, stretch_r, a_stretch_r); // rng_shift (API,cbrst,lpb,width,fft_vec_rng,ranfft_rng,rng); } // complute the complex deramp_demod array for each burst with no shift dramp_dmod(xml_tree, kk, cramp, lpb, width, 0., 0., 0.); // apply the dramp_dmod for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cbrst[k] = Cmul(cbrst[k], cramp[k]); } } // shift the burst cramp in azimuth if azi != 0. if (azi != 0.) { azi_new = azi + (cl + (bb[kk].EC - bb[kk].SC + 1) / 2.) * a_stretch_a; azi_shift(API, cbrst, lpb, width, fft_vec_azi, ranfft_azi, azi_new, stretch_a); } // now make a shifted version of the dramp_dmod dramp_dmod(xml_tree, kk, cramp, lpb, width, 0.0, azi_new, stretch_a); // reramp the slc for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; cramp[k].i = -cramp[k].i; cbrst[k] = Cmul(cbrst[k], cramp[k]); } } } // unload the float complex array into a short burst array, multiply by 2 // and clip if needed for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; k2 = ii * width2 + jj * 2; rtest = 2. * cbrst[k].r; itest = 2. * cbrst[k].i; brst[k2] = (short)clipi2(rtest); brst[k2 + 1] = (short)clipi2(itest); if ((int)(rtest) > I2MAX || (int)(itest) > I2MAX) { nclip++; } } } // write the burst in L, C, and H configurations for (ii = 0; ii < lpb; ii++) { // write low if (ii >= bb[kk].SL && ii <= bb[kk].EL) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 2) fwrite(tmp, sizeof(short), width * 2, slcl); } // write center if (ii >= bb[kk].SC && ii <= bb[kk].EC) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 1) fwrite(tmp, sizeof(short), width * 2, slcc); cl++; } // write high if (ii >= bb[kk].SH && ii <= bb[kk].EH) { for (jj = 0; jj < width2; jj++) { k = ii * width2 + jj; tmp[jj] = brst[k]; } if (imode == 2) fwrite(tmp, sizeof(short), width * 2, slch); } } } fprintf(stderr, "number of points clipped to short int %d \n", nclip); _TIFFfree(buf); free(fft_vec_rng); free(fft_vec_azi); free(brst); free(cbrst); free(cramp); free(tmp); free(rtmp); return (1); } int dramp_dmod(tree *xml_tree, int nb, fcomplex *cramp, int lpb, int width, double rng, double azi, double stretch_a) { /* this is a routine to apply an azimuth shift to a burst of TOPS data */ int ii, jj, k; char tmp_c[200]; double kpsi, fc, dta, dts = 0., ts0, tau0, vx, vy, vz; double ks, vtot, ka, taus, phase, pramp, pmod; double fnc[3], fka[3]; double *eta, *etaref, *kt, *fnct; double azi_rng; double t_brst, t1, t2; // get all the parameters needed for the remod_deramp search_tree(xml_tree, "/product/generalAnnotation/productInformation/radarFrequency/", tmp_c, 1, 0, 1); fc = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/productInformation/azimuthSteeringRate/", tmp_c, 1, 0, 1); kpsi = PI * str2double(tmp_c) / 180.; search_tree(xml_tree, "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dta = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/productInformation/rangeSamplingRate/", tmp_c, 1, 0, 1); if (str2double(tmp_c) != 0.) dts = 1. / str2double(tmp_c); search_tree(xml_tree, "/product/imageAnnotation/imageInformation/slantRangeTime/", tmp_c, 1, 0, 1); ts0 = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/t0/", tmp_c, 1, 0, 1); tau0 = str2double(tmp_c); search_tree(xml_tree, "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 2, 4, nb); t_brst = str2double(tmp_c) + dta * (double)lpb / 2.0 / 86400.0; // first find the parameters that depends on burst, find the neareast one. search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/dcEstimate/azimuthTime/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } if (t_brst - t1 < t2 - t_brst) jj = ii - 1; else jj = ii; // fprintf(stderr,"finding the %d DcPolynomial\n",jj); search_tree(xml_tree, "/product/dopplerCentroid/dcEstimateList/dcEstimate/dataDcPolynomial/", tmp_c, 1, 4, jj); str2dbs(fnc, tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/" "azimuthTime/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } if (t_brst - t1 < t2 - t_brst) jj = ii - 1; else jj = ii; // fprintf(stderr,"finding the %d AziFmRate\n",jj); ii = search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/t0/", tmp_c, 1, 0, 1); if (xml_tree[xml_tree[ii].sibr].sibr < 0) { search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/" "azimuthFmRatePolynomial/", tmp_c, 1, 4, jj); str2dbs(fka, tmp_c); } else { search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c0/", tmp_c, 1, 4, jj); fka[0] = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c1/", tmp_c, 1, 4, jj); fka[1] = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/azimuthFmRateList/azimuthFmRate/c2/", tmp_c, 1, 4, jj); fka[2] = str2double(tmp_c); } // find the velocity by linearly interpolating between 2 neareast point search_tree(xml_tree, "/product/generalAnnotation/orbitList/", tmp_c, 3, 0, 1); jj = (int)str2double(tmp_c); t2 = 0.0; ii = 0; while (t2 < t_brst && ii < jj) { t1 = t2; ii++; search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/time/", tmp_c, 2, 4, ii); t2 = str2double(tmp_c); } search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, ii - 1); vx = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/x/", tmp_c, 1, 4, ii); vx = (str2double(tmp_c) * (t2 - t_brst) + vx * (t_brst - t1)) / (t2 - t1); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, ii - 1); vy = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/y/", tmp_c, 1, 4, ii); vy = (str2double(tmp_c) * (t2 - t_brst) + vy * (t_brst - t1)) / (t2 - t1); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, ii - 1); vz = str2double(tmp_c); search_tree(xml_tree, "/product/generalAnnotation/orbitList/orbit/velocity/z/", tmp_c, 1, 4, ii); vz = (str2double(tmp_c) * (t2 - t_brst) + vz * (t_brst - t1)) / (t2 - t1); // malloc the memory eta = (double *)malloc(lpb * sizeof(double)); etaref = (double *)malloc(width * sizeof(double)); kt = (double *)malloc(width * sizeof(double)); fnct = (double *)malloc(width * sizeof(double)); // malloc the memory eta = (double *)malloc(lpb * sizeof(double)); etaref = (double *)malloc(width * sizeof(double)); kt = (double *)malloc(width * sizeof(double)); fnct = (double *)malloc(width * sizeof(double)); // compute velocity and then Doppler rate vtot = sqrt(vx * vx + vy * vy + vz * vz); ks = 2. * vtot * fc * kpsi / SOL; for (ii = 0; ii < lpb; ii++) { // eta[ii] = ((double)(ii-lpb/2)-azi)*dta; eta[ii] = ((double)ii - (double)lpb / 2. + .5 - azi) * dta; } for (jj = 0; jj < width; jj++) { // This is silly because ts0 = tau0 in the test I did taus = ts0 + ((double)jj - rng) * dts - tau0; ka = fka[0] + fka[1] * taus + fka[2] * taus * taus; kt[jj] = ka * ks / (ka - ks); fnct[jj] = fnc[0] + fnc[1] * taus + fnc[2] * taus * taus; etaref[jj] = -fnct[jj] / ka + fnc[0] / fka[0]; } for (ii = 0; ii < lpb; ii++) { for (jj = 0; jj < width; jj++) { k = ii * width + jj; /* include the phase shift with range */ azi_rng = jj * stretch_a; pramp = -M_PI * kt[jj] * pow((eta[ii] + azi_rng * dta - etaref[jj]), 2); pmod = -2. * M_PI * fnct[jj] * eta[ii]; phase = pramp + pmod; cramp[k] = Cexp(phase); } } return (1); } int azi_shift(void *API, fcomplex *cbrst, int lpb, int width, fcomplex *fft_vec, int ranfft, double azi, double stretch_a) { /* this is a routine to apply an azimuth shift to a burst of TOPS data */ int ii, jj, k; double sumr, sumi, azi_new; // loop over columns of the burst for (jj = 0; jj < width; jj++) { azi_new = azi + jj * stretch_a; // compute the mean value for (ii = 0; ii < lpb; ii++) { k = ii * width + jj; sumr = sumr + cbrst[k].r; sumi = sumi + cbrst[k].i; } sumr = sumr / (double)lpb; sumi = sumi / (double)lpb; // load the complex vector and append the mean for (ii = 0; ii < ranfft; ii++) { if (ii < lpb) { k = ii * width + jj; fft_vec[ii].r = cbrst[k].r; fft_vec[ii].i = cbrst[k].i; } else { fft_vec[ii].r = sumr; fft_vec[ii].i = sumi; } } // apply the shift theorem shift(API, ranfft, fft_vec, azi_new); // unload the complex vector for (ii = 0; ii < lpb; ii++) { k = ii * width + jj; cbrst[k].r = fft_vec[ii].r; cbrst[k].i = fft_vec[ii].i; } } return (1); } int rng_shift(void *API, fcomplex *cbrst, int lpb, int width, fcomplex *fft_vec, int ranfft, double rng) { /* this is a routine to apply a range shift to a burst of TOPS data */ int ii, jj, k; // loop over rows of the burst for (ii = 0; ii < lpb; ii++) { // load the complex vector for (jj = 0; jj < ranfft; jj++) { if (jj < width) { k = ii * width + jj; fft_vec[jj].r = cbrst[k].r; fft_vec[jj].i = cbrst[k].i; } else { fft_vec[jj].r = 0.0f; fft_vec[jj].i = 0.0f; } } // apply the shift theorem shift(API, ranfft, fft_vec, rng); // unload the complex vector for (jj = 0; jj < width; jj++) { k = ii * width + jj; cbrst[k].r = fft_vec[jj].r; cbrst[k].i = fft_vec[jj].i; } } return (1); } int rng_interp(fcomplex *cbrst, fcomplex *ctmp, int cl, int lstart, int lend, int width, double rng, double stretch_r, double a_stretch_r) { /* this is a routine to shift and stretch along range for TOPS data */ int ii, jj, ns2, j, k, kk; double ra, w, wsum; ns2 = NS / 2 - 1; for (ii = lstart; ii <= lend; ii++) { // read in the line for (jj = 0; jj < width; jj++) { kk = ii * width + jj; ctmp[jj].i = cbrst[kk].i; ctmp[jj].r = cbrst[kk].r; } // compute the output for (jj = 0; jj < width; jj++) { ra = (double)jj + (rng + (double)jj * stretch_r + (cl + ii - lstart) * a_stretch_r); j = (int)ra; // make sure the point is safe for interpolation, use original input if // can not be interpolated if (j - ns2 < 0 || j + ns2 + 1 >= width) continue; kk = ii * width + jj; cbrst[kk].i = 0.0; cbrst[kk].r = 0.0; wsum = 0.0; for (k = j - ns2; k <= j + ns2 + 1; k++) { w = sinc_kernel(fabs(ra - (double)k)); cbrst[kk].i += w * ctmp[k].i; cbrst[kk].r += w * ctmp[k].r; wsum += w; } cbrst[kk].i = cbrst[kk].i / wsum; cbrst[kk].r = cbrst[kk].r / wsum; } } return (1); } double sinc_kernel(double x) { double arg, f; arg = fabs(PI * x); if (arg > 0.) { f = sin(arg) / arg; } else { f = 1.; } return (f); } GMTSAR_V5.7/.svn/pristine/75/7551532fd8ba27b54a5c316738dec65740a1ee54.svn-base000444 015705 000000 00000005177 13505462013 025464 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Xiaohua Xu, Dec 17, 2018 # # resample a focused SLC image to a certain prf and rng_samp_rate # # if ($#argv != 3) then echo "" echo "Usage: samp_slc.csh image_stem new_prf new_rng_samp_rate " echo "" echo "Example: p2p_ALOS_SLC.csh IMG-ALPSRP022200660-H1.1__A 2000 3200000" echo "" echo "Note: A very small change in prf or rng_samp_rate change will be ignored" echo " as they can be accounted during normal processing with resamp." echo " Put 0 in new_prf or new_rng_samp_rate to igore resamping." echo "" exit 1 endif set image = $1 set nprf = $2 set nrsr = $3 set oprf = `grep PRF $image.PRM | awk '{print $3}'` set orsr = `grep rng_samp_rate $image.PRM | awk '{print $3}'` set trsr = `echo $nrsr $orsr | awk '{printf("%.10f", $1/$2)}'` set tprf = `echo $nprf $oprf | awk '{printf("%.10f", $1/$2)}'` cp $image.PRM tmp_master.PRM cp $image.PRM tmp_slave.PRM set ta = `echo $tprf | awk '{if($1>1) print 1;else if($1<1) print 2;else print 0;}'` set tr = `echo $trsr | awk '{if($1>1) print 1;else if($1<1) print 2;else print 0;}'` if ($ta == 2 && $nprf != 0) echo "Downsampling along azimuth is not recommended, may cause aliasing ..." if ($tr == 2 && $nrsr != 0) echo "Downsampling along range is not recommended, may cause aliasing ..." if ($nrsr == 0 && $nprf == 0) then echo "specify at least one of new_prf/new_rng_samp_rate to be non-zero to run the script" exit 1 endif if ($nrsr != 0) then set r = `echo $trsr | awk '{printf("%.10f", -(1 - 1/$1))}'` set tmp = `grep num_rng_bins tmp_master.PRM | awk '{print $3}'` set new_num_rng_bins = `echo $tmp $trsr | awk '{printf("%d",$1*$2/4)}' | awk '{printf("%d",$1*4)}'` update_PRM tmp_slave.PRM stretch_r $r update_PRM tmp_master.PRM rng_samp_rate $nrsr update_PRM tmp_master.PRM num_rng_bins $new_num_rng_bins set bytes = `echo $new_num_rng_bins | awk '{printf("%d",$1*4)}'` update_PRM tmp_master.PRM bytes_per_line $bytes update_PRM tmp_master.PRM good_bytes_per_line $bytes endif if ($nprf != 0) then set a = `echo $tprf | awk '{printf("%.10f", -(1 - 1/$1))}'` set tmp = `grep num_lines tmp_master.PRM | awk '{print $3}'` set new_nl = `echo $tmp $tprf | awk '{printf("%d",$1*$2/4)}' | awk '{printf("%d",$1*4)}'` update_PRM tmp_slave.PRM a_stretch_a $a update_PRM tmp_master.PRM PRF $nprf update_PRM tmp_master.PRM num_lines $new_nl update_PRM tmp_master.PRM num_valid_az $new_nl update_PRM tmp_master.PRM num_patches 1 update_PRM tmp_master.PRM nrows $new_nl endif resamp tmp_master.PRM tmp_slave.PRM tmp_slave.PRMresamp tmp_slave.SLCresamp 4 mv tmp_master.PRM $image.PRM mv tmp_slave.SLCresamp $image.SLC rm tmp* GMTSAR_V5.7/.svn/pristine/75/7561776edf3e983b17fbd0ae7332d76147d84d30.svn-base000444 015705 000000 00000007356 13505462014 025506 0ustar00sandwellwheel000000 000000 # # $Id$ # if (HAVE_M_LIBRARY) # link the math library set (LINK_LIBS m) endif (HAVE_M_LIBRARY) include_directories (include) add_library (ALOS lib_src/utils.c lib_src/null_sio_struct.c lib_src/get_sio_struct.c lib_src/put_sio_struct.c lib_src/calc_dop.c lib_src/hermite_c.c lib_src/ALOS_ldr_orbit.c lib_src/ALOSE_orbits_utils.c lib_src/interpolate_ALOS_orbit.c lib_src/read_ALOS_sarleader.c lib_src/write_ALOS_LED.c lib_src/write_orb.c lib_src/set_ALOS_defaults.c lib_src/write_ALOS_prm.c lib_src/rng_expand.c lib_src/rng_compress.c lib_src/rng_filter.c lib_src/find_fft_length.c lib_src/siocomplex.c lib_src/polyfit.c lib_src/plh2xyz.c lib_src/xyz2plh.c lib_src/cfft1d.c lib_src/swap32.c lib_src/swap16.c lib_src/fftpack.c include/image_sio.h include/lib_functions.h include/llt2xyz.h include/siocomplex.h) target_link_libraries (ALOS ${LINK_LIBS}) set (LINK_LIBS ${LINK_LIBS} ALOS) add_executable (ALOS_baseline ALOS_baseline/ALOS_baseline.c ALOS_baseline/ALOS_llt2rat_sub.c include/image_sio.h include/lib_functions.h include/llt2xyz.h) target_link_libraries (ALOS_baseline ${LINK_LIBS}) add_executable (ALOS_fbd2fbs ALOS_fbd2fbs/ALOS_fbd2fbs.c include/image_sio.h include/lib_functions.h include/siocomplex.h) target_link_libraries (ALOS_fbd2fbs ${LINK_LIBS}) add_executable (ALOS_fbd2fbs_SLC ALOS_fbd2fbs_SLC/ALOS_fbd2fbs_SLC.c include/image_sio.h include/lib_functions.h include/siocomplex.h) target_link_libraries (ALOS_fbd2fbs_SLC ${LINK_LIBS}) add_executable (ALOS_fbd2ss ALOS_fbd2ss/ALOS_fbd2ss.c include/image_sio.h include/lib_functions.h include/siocomplex.h) target_link_libraries (ALOS_fbd2ss ${LINK_LIBS}) add_executable (ALOS_fbs2fbd ALOS_fbs2fbd/ALOS_fbs2fbd.c include/image_sio.h include/siocomplex.h) target_link_libraries (ALOS_fbs2fbd ${LINK_LIBS}) add_executable (ALOS_filter_SLC ALOS_filter_SLC/ALOS_filter_SLC.c include/image_sio.h include/siocomplex.h) target_link_libraries (ALOS_filter_SLC ${LINK_LIBS}) add_executable (ALOS_llt2rat ALOS_llt2rat/ALOS_llt2rat.c include/image_sio.h include/lib_functions.h include/llt2xyz.h) target_link_libraries (ALOS_llt2rat ${LINK_LIBS}) add_executable (ALOS_look ALOS_look/ALOS_look.c include/image_sio.h include/lib_functions.h include/llt2xyz.h) target_link_libraries (ALOS_look ${LINK_LIBS}) add_executable (ALOS_merge ALOS_merge/ALOS_merge.c include/image_sio.h include/lib_functions.h) target_link_libraries (ALOS_merge ${LINK_LIBS}) add_executable (ALOS_pre_process ALOS_pre_process/ALOS_pre_process.c ALOS_pre_process/parse_ALOS_commands.c ALOS_pre_process/read_ALOS_data.c ALOS_pre_process/read_ALOSE_data.c ALOS_pre_process/swap_ALOS_data_info.c ALOS_pre_process/roi_utils.c include/image_sio.h include/lib_functions.h) target_link_libraries (ALOS_pre_process ${LINK_LIBS}) add_executable (ALOS_pre_process_SLC ALOS_pre_process_SLC/ALOS_pre_process_SLC.c ALOS_pre_process_SLC/parse_ALOS_commands.c ALOS_pre_process_SLC/read_ALOS_data_SLC.c ALOS_pre_process_SLC/swap_ALOS_data_info.c include/image_sio.h include/lib_functions.h) target_link_libraries (ALOS_pre_process_SLC ${LINK_LIBS}) add_executable (ALOS_pre_process_SS ALOS_pre_process_SS/ALOS_pre_process_SS.c ALOS_pre_process_SS/parse_ALOS_commands.c ALOS_pre_process_SS/read_ALOS_data_SS.c ALOS_pre_process_SS/swap_ALOS_data_info.c include/image_sio.h include/lib_functions.h) target_link_libraries (ALOS_pre_process_SS ${LINK_LIBS}) # add the install targets install (TARGETS ALOS ALOS_baseline ALOS_fbd2fbs ALOS_fbd2fbs_SLC ALOS_fbd2ss ALOS_fbs2fbd ALOS_filter_SLC ALOS_llt2rat ALOS_look ALOS_merge ALOS_pre_process ALOS_pre_process_SLC ALOS_pre_process_SS ARCHIVE DESTINATION lib COMPONENT Runtime LIBRARY DESTINATION lib COMPONENT Runtime RUNTIME DESTINATION bin COMPONENT Runtime) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/.svn/pristine/4d/4d67d78dcedb48c258a91b5ba0c99ab4a6865eb4.svn-base000444 015705 000000 00000001260 13505462014 026123 0ustar00sandwellwheel000000 000000 /* definitions for xml code */ #include"xmlC.h" #include int space_count(char *); int strasign(char *, char *, int, int); int strlocate(char *, int, int); int create_child(tree *, char *, int, int, int); int show_tree(tree *, int, int); int get_tree(FILE *, tree *, int); int search_tree(tree *, char *, char *, int, int, int); int cat_nums(char *, char *); int str2ints(int *, char *); double date2MJD(int, int, int, int, int, double); int str_date2JD(char *, char *); double str2double(char *); int str2dbs(double *, char *); int null_MEM_STR(); int assemble_trees(int, struct tree **, int, int, FILE *); #ifndef WIN32 int itoa(int, char *, int); #endif GMTSAR_V5.7/.svn/pristine/26/26fe63e00d38f3509df93519898cc76205f7eaa3.svn-base000444 015705 000000 00000005413 13505462013 025476 0ustar00sandwellwheel000000 000000 7 25 1.8315639e-02 5.5637998e-02 1.0836802e-01 1.3533528e-01 1.0836802e-01 5.5637998e-02 1.8315639e-02 2.5208966e-02 7.6578077e-02 1.4915373e-01 1.8627046e-01 1.4915373e-01 7.6578077e-02 2.5208966e-02 3.3746152e-02 1.0251176e-01 1.9966564e-01 2.4935221e-01 1.9966564e-01 1.0251176e-01 3.3746152e-02 4.3936934e-02 1.3346862e-01 2.5996137e-01 3.2465247e-01 2.5996137e-01 1.3346862e-01 4.3936934e-02 5.5637998e-02 1.6901332e-01 3.2919299e-01 4.1111229e-01 3.2919299e-01 1.6901332e-01 5.5637998e-02 6.8525074e-02 2.0816080e-01 4.0544187e-01 5.0633562e-01 4.0544187e-01 2.0816080e-01 6.8525074e-02 8.2084999e-02 2.4935221e-01 4.8567179e-01 6.0653066e-01 4.8567179e-01 2.4935221e-01 8.2084999e-02 9.5634445e-02 2.9051179e-01 5.6583971e-01 7.0664828e-01 5.6583971e-01 2.9051179e-01 9.5634445e-02 1.0836802e-01 3.2919299e-01 6.4118039e-01 8.0073740e-01 6.4118039e-01 3.2919299e-01 1.0836802e-01 1.1943297e-01 3.6280532e-01 7.0664828e-01 8.8249690e-01 7.0664828e-01 3.6280532e-01 1.1943297e-01 1.2802169e-01 3.8889556e-01 7.5746513e-01 9.4595947e-01 7.5746513e-01 3.8889556e-01 1.2802169e-01 1.3346862e-01 4.0544187e-01 7.8969293e-01 9.8620712e-01 7.8969293e-01 4.0544187e-01 1.3346862e-01 1.3533528e-01 4.1111229e-01 8.0073740e-01 1.0000000e+00 8.0073740e-01 4.1111229e-01 1.3533528e-01 1.3346862e-01 4.0544187e-01 7.8969293e-01 9.8620712e-01 7.8969293e-01 4.0544187e-01 1.3346862e-01 1.2802169e-01 3.8889556e-01 7.5746513e-01 9.4595947e-01 7.5746513e-01 3.8889556e-01 1.2802169e-01 1.1943297e-01 3.6280532e-01 7.0664828e-01 8.8249690e-01 7.0664828e-01 3.6280532e-01 1.1943297e-01 1.0836802e-01 3.2919299e-01 6.4118039e-01 8.0073740e-01 6.4118039e-01 3.2919299e-01 1.0836802e-01 9.5634445e-02 2.9051179e-01 5.6583971e-01 7.0664828e-01 5.6583971e-01 2.9051179e-01 9.5634445e-02 8.2084999e-02 2.4935221e-01 4.8567179e-01 6.0653066e-01 4.8567179e-01 2.4935221e-01 8.2084999e-02 6.8525074e-02 2.0816080e-01 4.0544187e-01 5.0633562e-01 4.0544187e-01 2.0816080e-01 6.8525074e-02 5.5637998e-02 1.6901332e-01 3.2919299e-01 4.1111229e-01 3.2919299e-01 1.6901332e-01 5.5637998e-02 4.3936934e-02 1.3346862e-01 2.5996137e-01 3.2465247e-01 2.5996137e-01 1.3346862e-01 4.3936934e-02 3.3746152e-02 1.0251176e-01 1.9966564e-01 2.4935221e-01 1.9966564e-01 1.0251176e-01 3.3746152e-02 2.5208966e-02 7.6578077e-02 1.4915373e-01 1.8627046e-01 1.4915373e-01 7.6578077e-02 2.5208966e-02 1.8315639e-02 5.5637998e-02 1.0836802e-01 1.3533528e-01 1.0836802e-01 5.5637998e-02 1.8315639e-02 GMTSAR_V5.7/.svn/pristine/4c/4c447e47b5cd07c140ae06140304b1f581450bfe.svn-base000444 015705 000000 00000004771 13505462013 025505 0ustar00sandwellwheel000000 000000 13 13 3.67879441e-01 4.28603846e-01 4.85671785e-01 5.35261429e-01 5.73753421e-01 5.98164853e-01 6.06530660e-01 5.98164853e-01 5.73753421e-01 5.35261429e-01 4.85671785e-01 4.28603846e-01 3.67879441e-01 4.28603846e-01 4.99351789e-01 5.65839707e-01 6.23614916e-01 6.68460630e-01 6.96901561e-01 7.06648278e-01 6.96901561e-01 6.68460630e-01 6.23614916e-01 5.65839707e-01 4.99351789e-01 4.28603846e-01 4.85671785e-01 5.65839707e-01 6.41180388e-01 7.06648278e-01 7.57465128e-01 7.89692925e-01 8.00737403e-01 7.89692925e-01 7.57465128e-01 7.06648278e-01 6.41180388e-01 5.65839707e-01 4.85671785e-01 5.35261429e-01 6.23614916e-01 7.06648278e-01 7.78800783e-01 8.34806301e-01 8.70324726e-01 8.82496903e-01 8.70324726e-01 8.34806301e-01 7.78800783e-01 7.06648278e-01 6.23614916e-01 5.35261429e-01 5.73753421e-01 6.68460630e-01 7.57465128e-01 8.34806301e-01 8.94839317e-01 9.32911960e-01 9.45959469e-01 9.32911960e-01 8.94839317e-01 8.34806301e-01 7.57465128e-01 6.68460630e-01 5.73753421e-01 5.98164853e-01 6.96901561e-01 7.89692925e-01 8.70324726e-01 9.32911960e-01 9.72604477e-01 9.86207117e-01 9.72604477e-01 9.32911960e-01 8.70324726e-01 7.89692925e-01 6.96901561e-01 5.98164853e-01 6.06530660e-01 7.06648278e-01 8.00737403e-01 8.82496903e-01 9.45959469e-01 9.86207117e-01 1.00000000e+00 9.86207117e-01 9.45959469e-01 8.82496903e-01 8.00737403e-01 7.06648278e-01 6.06530660e-01 5.98164853e-01 6.96901561e-01 7.89692925e-01 8.70324726e-01 9.32911960e-01 9.72604477e-01 9.86207117e-01 9.72604477e-01 9.32911960e-01 8.70324726e-01 7.89692925e-01 6.96901561e-01 5.98164853e-01 5.73753421e-01 6.68460630e-01 7.57465128e-01 8.34806301e-01 8.94839317e-01 9.32911960e-01 9.45959469e-01 9.32911960e-01 8.94839317e-01 8.34806301e-01 7.57465128e-01 6.68460630e-01 5.73753421e-01 5.35261429e-01 6.23614916e-01 7.06648278e-01 7.78800783e-01 8.34806301e-01 8.70324726e-01 8.82496903e-01 8.70324726e-01 8.34806301e-01 7.78800783e-01 7.06648278e-01 6.23614916e-01 5.35261429e-01 4.85671785e-01 5.65839707e-01 6.41180388e-01 7.06648278e-01 7.57465128e-01 7.89692925e-01 8.00737403e-01 7.89692925e-01 7.57465128e-01 7.06648278e-01 6.41180388e-01 5.65839707e-01 4.85671785e-01 4.28603846e-01 4.99351789e-01 5.65839707e-01 6.23614916e-01 6.68460630e-01 6.96901561e-01 7.06648278e-01 6.96901561e-01 6.68460630e-01 6.23614916e-01 5.65839707e-01 4.99351789e-01 4.28603846e-01 3.67879441e-01 4.28603846e-01 4.85671785e-01 5.35261429e-01 5.73753421e-01 5.98164853e-01 6.06530660e-01 5.98164853e-01 5.73753421e-01 5.35261429e-01 4.85671785e-01 4.28603846e-01 3.67879441e-01 GMTSAR_V5.7/.svn/pristine/19/19bc07edcd4a80224634c90a48f6573a2e0b0bb4.svn-base000444 015705 000000 00000006664 13505462014 025602 0ustar00sandwellwheel000000 000000 /* This program is supposed to read raw SAR data tapes */ /* */ /* R. Mellors July 1997 */ /* IGPP_SIO */ /* */ /* modified by Paul F. Jamason, 25-FEB-1998*/ /* */ /* */ #include "../include/SARtape.h" #include #include #include void make_prm_dpaf(struct SAR_info); int main(argc, argv) int argc; char **argv; { char *filename, string[5]; int i; // int num_data_points; FILE *file1, *outfile; struct SAR_info sar; struct sarleader_binary slfsb, slvsb, slplb; if (argc < 2) { fprintf(stderr, "Usage: read_SAR_tape SARLEADER \n"); exit(1); } filename = argv[1]; file1 = fopen(filename, "r"); outfile = fopen("ldrfile.log", "w"); fprintf(outfile, "listing header values to %s\n", filename); /* allocate memory */ sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); sar.varseg = (struct sarleader_fdr_varseg *)malloc(sizeof(struct sarleader_fdr_varseg)); sar.dss = (struct sarleader_dss *)malloc(sizeof(struct sarleader_dss)); /* pj */ sar.dpaf_dss = (struct sarleader_dpaf_dss *)malloc(sizeof(struct sarleader_dpaf_dss)); sar.platform = (struct platform *)malloc(sizeof(struct platform)); /* read the file */ (void)fread(&slfsb, sizeof(struct sarleader_binary), 1, file1); /*fprintf(outfile," read %d bytes %d items from file %s : position * %ld\n",(sizeof(struct sarleader_binary)),nitems,filename,ftell(file1));*/ /*fprintf(outfile,SARLEADER_FDR_BINARY_WCS,SARLEADER_FDR_BINARY_RVL(&slfsb));*/ fscanf(file1, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fprintf(outfile, SARLEADER_FDR_FIXSEG_WCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fscanf(file1, SARLEADER_FDR_VARSEG_RCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); /*fprintf(outfile,SARLEADER_FDR_VARSEG_WCS,SARLEADER_FDR_VARSEG_RVL(sar.varseg));*/ (void)fread(&slvsb, sizeof(struct sarleader_binary), 1, file1); /*fprintf(outfile," read %d bytes %d items from file %s : position * %ld\n",(sizeof(struct sarleader_binary)),nitems,filename,ftell(file1));*/ fprintf(outfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(&slfsb)); /* pj: use modified format - no gec_local_user field */ fscanf(file1, SARLEADER_DPAF_DSS_RCS, SARLEADER_DPAF_DSS_RVL(sar.dpaf_dss)); fprintf(outfile, SARLEADER_DPAF_DSS_WCS, SARLEADER_DPAF_DSS_RVL(sar.dpaf_dss)); /* fscanf(file1,SARLEADER_DSS_RCS,SARLEADER_DSS_RVL(sar.dss)); fprintf(outfile,SARLEADER_DSS_WCS,SARLEADER_DSS_RVL(sar.dss)); */ /* why do I need to skip 1664 bytes ahead; what am I missing ? */ /* pj: comment out */ /* fseek(file1,1664,SEEK_CUR);*/ (void)fread(&slplb, sizeof(struct sarleader_binary), 1, file1); /*fprintf(outfile," read %d bytes %d items from file %s : position * %ld\n",(sizeof(struct sarleader_binary)),nitems,filename,ftell(file1));*/ fprintf(outfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(&slplb)); fscanf(file1, PLATFORM_RCS, PLATFORM_RVL(sar.platform)); fprintf(outfile, PLATFORM_WCS, PLATFORM_RVL(sar.platform)); sar.position = (struct position_vector *)malloc(sizeof(struct position_vector)); sscanf(sar.platform->num_data_points, " %1c", string); for (i = 0; i < (atoi(string)); i++) { fscanf(file1, POSITION_VECTOR_RCS, POSITION_VECTOR_RVL(sar.position)); fprintf(outfile, POSITION_VECTOR_WCS, POSITION_VECTOR_RVL(sar.position)); } make_prm_dpaf(sar); } GMTSAR_V5.7/.svn/pristine/19/1900e83c69b44f7fad5d8d723a2fac782ea58c33.svn-base000444 015705 000000 00000024104 13505462013 025701 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # # process generic L1.1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_SAT_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_SAT_SLC.csh TSX_20110608 TSX_20110619 config.tsx.slc.txt" echo "" echo " Place the L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 endif echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/.svn/pristine/10/1066ca01d3b34c285d30da15908a1251cd947513.svn-base000444 015705 000000 00000014214 13505462013 025245 0ustar00sandwellwheel000000 000000 #!/bin/tcsh -f # $Id$ # Script to drive the xcorr to do the azimuthal pixel-tracking # Originated by Matt Wei, April 19, 2010 # Rewrote by Kang Wang # Last update: Aug. 09, 2013 # # Revised by Xiaohua Xu, Nov 15, 2013: adding some pre_proc, redefined some parameters, add blockmedian, # add shaded part, delete some redundant lines, easier to use # # Revised by David Sandwell, Dec 28, 2018: corrected azi pixel size using ground velocity and added more comments # if ($#argv != 7) then echo "" echo "Usage: make_a_offset.csh Master.PRM Slave.PRM nx ny xsearch ysearch do_xcorr" echo "" echo " nx - number of offsets to compute in the range direction (~num_rng/4) " echo " ny - number of offsets to compute in the azimuth direction (~num_az/6) " echo " xsearch - size of correlation window in range (e.g., 16) " echo " ysearch - size of correlation window in azimuth (e.g., 16) " echo " do_xcorr - 1-recalculate xcorr; 0-use results from previous xcorr" echo "" exit 1 endif echo "make_a_offset.csh" $1 $2 $3 $4 $5 $6 # set master = $1 set slave = $2 set nx = $3 set ny = $4 set xsearch = $5 set ysearch = $6 set do_xcorr = $7 # # pre_proc needed files # cd intf/*/ mkdir azi_offset cd azi_offset cp ../../../raw/$1 . cp ../../../raw/$2 . # ln -s ../../../SLC/*.SLC . ln -s ../../../topo/trans.dat ln -s ../../../topo/dem.grd # set PRF = `grep PRF $master |awk -F"=" '{print $2}'` set SC_vel = `grep SC_vel $master|awk -F"=" '{print $2}'` set earth_radius = `grep earth_radius $master|awk -F"=" '{print $2}'` set SC_height = `grep SC_height $master|awk -F"=" '{print $2}'` # # compute the ground velocity from the effrctive velocity using equation B12 # set ground_vel = `echo $SC_vel $earth_radius $SC_height | awk '{print $1/sqrt(1+$3/$2)} '` echo "ground velocity: " $ground_vel set azi_size = `echo $ground_vel $PRF|awk '{printf "%10.3f",$1/$2}' ` echo "azi pixel size", $azi_size # # these SLC's are already aligned so reset all the offsets to zero # update_PRM $master rshift 0 update_PRM $master sub_int_r 0 update_PRM $master stretch_r 0.0 update_PRM $master a_stretch_r 0.0 update_PRM $master ashift 0 update_PRM $master sub_int_a 0.0 update_PRM $master stretch_a 0.0 update_PRM $master a_stretch_a 0.0 update_PRM $slave rshift 0 update_PRM $slave sub_int_r 0 update_PRM $slave stretch_r 0.0 update_PRM $slave a_stretch_r 0.0 update_PRM $slave ashift 0 update_PRM $slave sub_int_a 0.0 update_PRM $slave stretch_a 0.0 update_PRM $slave a_stretch_a 0.0 # # make azimuth offset if do_xcorr = 1 # if ($do_xcorr == 1 ) xcorr $master $slave -nx $nx -ny $ny -xsearch $xsearch -ysearch $ysearch -noshift # # ********assume all offsets are less than 1. pixels # ********edit the following line # awk '{if ($4>-1.1 && $4<1.1) print $1,$3,$4,$5}' freq_xcorr.dat >azi.dat # # do a block median on the offset data and grid the results # set xmin = `gmt gmtinfo azi.dat -C |awk '{print $1}'` set xmax = `gmt gmtinfo azi.dat -C |awk '{print $2}'` set ymin = `gmt gmtinfo azi.dat -C |awk '{print $3}'` set ymax = `gmt gmtinfo azi.dat -C |awk '{print $4}'` # set xinc = `echo $xmax $xmin $nx |awk '{printf "%d", ($1-$2)/($3-1)}'` set yinc = `echo $ymax $ymin $ny |awk '{printf "%d", ($1-$2)/($3-1)}'` # set xinc = `echo $xinc | awk '{print $1*12}'` set yinc = `echo $yinc | awk '{print $1*12}'` echo "xinc:"$xinc" yinc:"$yinc # gmt blockmedian azi.dat -R$xmin/$xmax/$ymin/$ymax -I$xinc/$yinc -Wi | awk '{print $1, $2, $3}' > azi_b.dat #mv azi_b.dat azi.dat gmt xyz2grd azi_b.dat -R$xmin/$xmax/$ymin/$ymax -I$xinc/$yinc -Gaoff.grd gmt grdmath aoff.grd $azi_size MUL = azi_offset.grd # gmt grd2cpt azi_offset.grd -Cpolar -E30 -D > azioff.cpt #gmt makecpt -Cpolar -T-4/4/.4 -Z > azioff.cpt gmt grdimage azi_offset.grd -JX5i -Cazioff.cpt -Q -P > azioff.ps # # project to lon/lat coordinates # proj_ra2ll_ascii.csh trans.dat azi_b.dat aoff.llo # set xmin2 = `gmt gmtinfo aoff.llo -C |awk '{print $1}'` set xmax2 = `gmt gmtinfo aoff.llo -C |awk '{print $2}'` set ymin2 = `gmt gmtinfo aoff.llo -C |awk '{print $3}'` set ymax2 = `gmt gmtinfo aoff.llo -C |awk '{print $4}'` # set xinc2 = `echo $xmax2 $xmin2 $nx |awk '{printf "%12.5f", ($1-$2)/($3-1)}'` set yinc2 = `echo $ymax2 $ymin2 $ny |awk '{printf "%12.5f", ($1-$2)/($3-1)}'` set xinc2 = `echo $xinc2 | awk '{print $1*12}'` set yinc2 = `echo $yinc2 | awk '{print $1*12}'` # echo "xinc2:"$xinc2" yinc2:"$yinc2 # gmt xyz2grd aoff.llo -R$xmin2/$xmax2/$ymin2/$ymax2 -I$xinc2/$yinc2 -r -fg -Gaoff_ll.grd gmt grdmath aoff_ll.grd $azi_size MUL = azi_offset_ll.grd # gmt grdsample dem.grd -Gs_dem.grd -R$xmin2/$xmax2/$ymin2/$ymax2 -I$xinc2/$yinc2 -r gmt grdgradient dem.grd -Gtmp.grd -A325 -Nt.5 gmt grdmath tmp.grd .5 ADD = dem_grd.grd gmt grdgradient s_dem.grd -Gs_dem_grd.grd -A45 -Nt.5 # # plot the azimuth offset # set r_topo = `gmt grdinfo dem.grd -T100` gmt makecpt -Cgray -T-1/1/.1 -Z > topo.cpt # set x1 = `gmt grdinfo azi_offset_ll.grd -C |awk '{print $2 }'` set x2 = `gmt grdinfo azi_offset_ll.grd -C |awk '{print $3 }'` # set y1 = `gmt grdinfo azi_offset_ll.grd -C |awk '{print $4 }'` set y2 = `gmt grdinfo azi_offset_ll.grd -C |awk '{print $5 }'` # set xlim = `echo $x2 $x1|awk '{print $1-$2}'` set ylim = `echo $y2 $y1|awk '{print $1-$2}'` # set length = 20 set width = 16 # set scl1 = `echo $ylim $length | awk '{print $2/$1 }' ` set scl2 = `echo $xlim $width | awk '{print $2/$1}'` set scl = `echo $scl1 $scl2 | awk '{if ($1<$2) {print $1} else {print $2} }'` # set bounds = `gmt grdinfo -I- azi_offset_ll.grd` # gmt gmtdefaults -Ds > gmt.conf gmt set MAP_FRAME_TYPE plain # gmt psbasemap -Baf -BWSne -Jm$scl"c" $bounds -K -P > azioff_ll.ps gmt grdimage dem_grd.grd -J -R -Ctopo.cpt -K -O -Q >> azioff_ll.ps #gmt grdimage azi_offset_ll.grd -Is_dem_grd.grd -J -R -Cazioff.cpt -Q -K -O >> azioff_ll.ps gmt grdimage azi_offset_ll.grd -J -R -Cazioff.cpt -Q -K -O >> azioff_ll.ps gmt pscoast -N3,2p -W1,1p -Slightblue -J -R -K -O -Df -I1 >> azioff_ll.ps gmt psscale -Razi_offset_ll.grd -J -DJTC+w5c/0.35c+e -Cazioff.cpt -Bxaf -By+lm -O >> azioff_ll.ps gmt psconvert azioff_ll.ps -P -Tg -Z echo "Azimuth/Offset map: azioff_ll.png" # rm -f tmp.grd aoff_ll.grd aoff.grd aoff.llo azi.dat dem_grd.grd grey_tmp.cpt ps2rast* raln* ralt* s_dem.grd temp.dat topo.cpt GMTSAR_V5.7/.svn/pristine/7e/7e244155638d2eca84603567ff89801e663ffe10.svn-base000444 015705 000000 00000000563 13505462014 025422 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ext_orb_s1a CSRCS = ext_orb_s1a.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar -I$(TIFF_INC) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC -L$(TIFF_LIB) -ltiff -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/7e/7e5a5bd1b5e0c3fd7f10adf8fcda80a669b4a9aa.svn-base000444 015705 000000 00000002304 13505462013 026401 0ustar00sandwellwheel000000 000000 5 15 8.8909268e-02 1.7317161e-01 2.1626517e-01 1.7317161e-01 8.8909268e-02 1.3346862e-01 2.5996137e-01 3.2465247e-01 2.5996137e-01 1.3346862e-01 1.8822092e-01 3.6660430e-01 4.5783336e-01 3.6660430e-01 1.8822092e-01 2.4935221e-01 4.8567179e-01 6.0653066e-01 4.8567179e-01 2.4935221e-01 3.1032384e-01 6.0442830e-01 7.5483960e-01 6.0442830e-01 3.1032384e-01 3.6280532e-01 7.0664828e-01 8.8249690e-01 7.0664828e-01 3.6280532e-01 3.9846370e-01 7.7610130e-01 9.6923323e-01 7.7610130e-01 3.9846370e-01 4.1111229e-01 8.0073740e-01 1.0000000e+00 8.0073740e-01 4.1111229e-01 3.9846370e-01 7.7610130e-01 9.6923323e-01 7.7610130e-01 3.9846370e-01 3.6280532e-01 7.0664828e-01 8.8249690e-01 7.0664828e-01 3.6280532e-01 3.1032384e-01 6.0442830e-01 7.5483960e-01 6.0442830e-01 3.1032384e-01 2.4935221e-01 4.8567179e-01 6.0653066e-01 4.8567179e-01 2.4935221e-01 1.8822092e-01 3.6660430e-01 4.5783336e-01 3.6660430e-01 1.8822092e-01 1.3346862e-01 2.5996137e-01 3.2465247e-01 2.5996137e-01 1.3346862e-01 8.8909268e-02 1.7317161e-01 2.1626517e-01 1.7317161e-01 8.8909268e-02 GMTSAR_V5.7/.svn/pristine/7e/7e8140832a1d37c1d563732c246fa73c1654b771.svn-base000444 015705 000000 00000005126 13505462013 025311 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Align a stack of SLC images # can be used to do stacking and time-series analysis # Xiaopeng Tong, Aug 27 2010 # if ($#argv != 1) then echo "" echo "Usage: align_batch_ALOS2_SCAN.csh align.in " echo " align a set of images listed in align.in file" echo "" echo " format of align.in:" echo " master_name:slave_name:supermaster_name" echo "" echo " example of align.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP089300650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP236920650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " " echo "" exit 1 endif # # loop over 5 subswath # foreach subswath (1 2 3 4 5) mkdir -p F$subswath cd F$subswath ln -s ../$1 . # # make working directories # mkdir -p SLC/ # # clean up # cleanup.csh SLC echo "" echo "START ALIGN A STACK OF IMAGES" echo "" # # loop start focus and align SLC images # foreach line (`awk '{print $0}' $1`) set master = `echo $line | awk -F: '{print $1}'` set slave = `echo $line | awk -F: '{print $2}'` set supermaster = `echo $line | awk -F: '{print $3}'` set masterstem = ` echo $master | awk '{ print substr($1,8,length($1)-7)}'` set slavestem = ` echo $slave | awk '{ print substr($1,8,length($1)-7)}'` set supermasterstem = ` echo $supermaster | awk '{ print substr($1,8,length($1)-7)}'` if ($master != "" && $slave != "" && $supermaster != "") then echo " " echo "subswath: $subswath" echo "Align $slave to $master via $supermaster - START" cd SLC cp ../../raw/IMG-HH-$masterstem-F$subswath.PRM . cp ../../raw/IMG-HH-$slavestem-F$subswath.PRM . cp ../../raw/IMG-HH-$supermasterstem-F$subswath.PRM . # # need to add the SLC_file name to the master PRM's # update_PRM IMG-HH-$masterstem-F$subswath.PRM SLC_file IMG-HH-$masterstem-F$subswath.SLC update_PRM IMG-HH-$supermasterstem-F$subswath.PRM SLC_file IMG-HH-$supermasterstem-F$subswath.SLC ln -s ../../raw/IMG-HH-$masterstem-F$subswath.SLC . ln -s ../../raw/IMG-HH-$slavestem-F$subswath.SLC . ln -s ../../raw/LED-$masterstem . ln -s ../../raw/LED-$slavestem . ln -s ../../raw/LED-$supermasterstem . align_ALOS2_SCAN.csh $master-F$subswath $slave-F$subswath $supermaster-F$subswath cd .. echo "Align $slave to $master via $supermaster - END" else echo "" echo "Wrong format in align.in" exit 1 endif end cd .. end echo "" echo "END ALIGN A STACK OF IMAGES" echo "" GMTSAR_V5.7/.svn/pristine/8f/8ff62139a4336b5795368189a6bed806f6822ad6.svn-base000444 015705 000000 00000006655 13505462014 025444 0ustar00sandwellwheel000000 000000 interpolate_ALOS_orbit.c: p = (double *) malloc(orb->nd*sizeof(double)); interpolate_ALOS_orbit.c: pv = (double *) malloc(orb->nd*sizeof(double)); interpolate_ALOS_orbit.c: pt = (double *) malloc(orb->nd*sizeof(double)); interpolate_ALOS_orbit.c: pt0 = (24.0*60.0*60.0)*orb->id + orb->sec; interpolate_ALOS_orbit.c: for (k=0; knd; k++) pt[k] = pt0 + k*orb->dsec; interpolate_ALOS_orbit.c: nd = orb->nd; interpolate_ALOS_orbit.c: p[k] = orb->points[k].px; interpolate_ALOS_orbit.c: pv[k] = orb->points[k].vx; interpolate_ALOS_orbit.c: p[k] = orb->points[k].py; interpolate_ALOS_orbit.c: pv[k] = orb->points[k].vy; interpolate_ALOS_orbit.c: p[k] = orb->points[k].pz; interpolate_ALOS_orbit.c: pv[k] = orb->points[k].vz; read_ALOS_sarleader.c: orb->nd = num_orbit_points; read_ALOS_sarleader.c: orb->iy = atoi(tmp); read_ALOS_sarleader.c: orb->id = atoi(tmp); read_ALOS_sarleader.c: orb->sec = (double) atof(tmp); read_ALOS_sarleader.c: orb->dsec = (double) atof(tmp); read_ALOS_sarleader.c: orb->pt0 = (24.0*60.0*60.0)*orb->id + orb->sec; read_ALOS_sarleader.c: fprintf(stderr," nd %d \n",orb->nd); read_ALOS_sarleader.c: fprintf(stderr," iy %d \n",orb->iy); read_ALOS_sarleader.c: fprintf(stderr," id %d \n",orb->id); read_ALOS_sarleader.c: fprintf(stderr," sec %lf \n",orb->sec); read_ALOS_sarleader.c: fprintf(stderr," dsec %lf \n",orb->dsec); read_ALOS_sarleader.c: fprintf(stderr," pt0 %lf \n",orb->pt0); read_ALOS_sarleader.c: orb->points = (struct ORB_XYZ *) malloc(orb->nd*sizeof(struct ORB_XYZ)); read_ALOS_sarleader.c: for (i=0; ind; i++){ read_ALOS_sarleader.c: orb->points[i].px = atof(tmp); read_ALOS_sarleader.c: orb->points[i].py = atof(tmp); read_ALOS_sarleader.c: orb->points[i].pz = atof(tmp); read_ALOS_sarleader.c: if (verbose) fprintf(stderr,"%g %g %g\n", orb->points[i].px, orb->points[i].py, orb->points[i].pz); read_ALOS_sarleader.c: orb->points[i].vx = atof(tmp); read_ALOS_sarleader.c: orb->points[i].vy = atof(tmp); read_ALOS_sarleader.c: orb->points[i].vz = atof(tmp); read_ALOS_sarleader.c: if (verbose) fprintf(stderr,"%g %g %g\n", orb->points[i].vx, orb->points[i].vy, orb->points[i].vz); read_ALOS_sarleader.c: for (j=0; jnd; j++ ) { read_ALOS_sarleader.c: orb->points[j].px = orb->points[j].px; read_ALOS_sarleader.c: orb->points[j].py = orb->points[j].py; read_ALOS_sarleader.c: orb->points[j].pz = orb->points[j].pz; read_ALOS_sarleader.c: orb->points[j].vx = orb->points[j].vx/1000.; read_ALOS_sarleader.c: orb->points[j].vy = orb->points[j].vy/1000.; read_ALOS_sarleader.c: orb->points[j].vz = orb->points[j].vz/1000.; read_ALOS_sarleader.c: eci_pos[0] = orb->points[j].px; read_ALOS_sarleader.c: eci_pos[1] = orb->points[j].py; read_ALOS_sarleader.c: eci_pos[2] = orb->points[j].pz; read_ALOS_sarleader.c: eci_vel[0] = orb->points[j].vx; read_ALOS_sarleader.c: eci_vel[1] = orb->points[j].vy; read_ALOS_sarleader.c: eci_vel[2] = orb->points[j].vz; read_ALOS_sarleader.c: cal[0] = orb->iy; read_ALOS_sarleader.c: cal[1] = orb->id; read_ALOS_sarleader.c: daysec = orb->sec + j*orb->dsec; read_ALOS_sarleader.c: orb->points[j].px = ecr_pos[0]; read_ALOS_sarleader.c: orb->points[j].py = ecr_pos[1]; read_ALOS_sarleader.c: orb->points[j].pz = ecr_pos[2]; read_ALOS_sarleader.c: orb->points[j].vx = ecr_vel[0]; read_ALOS_sarleader.c: orb->points[j].vy = ecr_vel[1]; read_ALOS_sarleader.c: orb->points[j].vz = ecr_vel[2]; GMTSAR_V5.7/.svn/pristine/8f/8f59a4c1a393d057511131811d2a06ca5e165c57.svn-base000444 015705 000000 00000124652 13505462013 025366 0ustar00sandwellwheel000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-07-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: GMTSAR_V5.7/.svn/pristine/8f/8f77290bd3addeeb9dd694d78289a931e791830c.svn-base000444 015705 000000 00000004161 13505462013 025736 0ustar00sandwellwheel000000 000000 /* $Id: highres_corr.c 39 2013-04-07 00:49:34Z pwessel $ */ /*-------------------------------------------------------*/ #include "gmtsar.h" #include "lib_functions.h" #include "xcorr.h" /*-------------------------------------------------------------------------------*/ void do_highres_corr(void *API, struct xcorr *xc, int iloc) { int i, j, ic, jc, k; int nx, ny, nx2, ny2, ifc; float max_corr, ipeak, jpeak, sub_xoff, sub_yoff; ifc = xc->interp_factor; /* size of complex version of correlation */ /* must be power of two */ nx = xc->n2x; ny = xc->n2y; /* size of interpolated matrix */ nx2 = ifc * nx; ny2 = ifc * ny; /* remove calculated offset from 1 pixel resolution */ /* factor of 2 on xoff for range interpolation */ jc = (xc->nxc / 2) - nx / 2 - (int)xc->loc[iloc].xoff; ic = (xc->nyc / 2) - ny / 2 - (int)xc->loc[iloc].yoff; /* copy values from correlation to complex */ /* use values centered around highest value */ for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { if ((k = (ic + i) * xc->nxc + (jc + j)) < 0) continue; xc->md[i * nx + j].r = powf(xc->corr[k], 0.25f); xc->md[i * nx + j].i = 0.0f; } } if (debug) print_complex(xc->md, nx, ny, 1); fft_interpolate_2d(API, xc->md, ny, nx, xc->cd_exp, ny2, nx2, ifc); if (ifc <= 4) print_complex(xc->cd_exp, nx2, ny2, 1); /* find maximum in interpolated matrix */ max_corr = -1.0f; ipeak = jpeak = -1; for (i = 0; i < ny2; i++) { for (j = 0; j < nx2; j++) { if (xc->cd_exp[i * nx2 + j].r > max_corr) { max_corr = xc->cd_exp[i * nx2 + j].r; ipeak = i - (ny2 / 2); jpeak = j - (ny2 / 2); } } } /* fft interpolation */ sub_xoff = jpeak / (float)(ifc); sub_yoff = ipeak / (float)(ifc); if (debug) { fprintf(stderr, " highres [ri %d ifc %d](%4.1f %4.1f) (nx %d ny %d) jpeak %f ipeak " "%f : %f %f : %4.2f\n", xc->ri, ifc, xc->loc[iloc].xoff, xc->loc[iloc].yoff, nx2, ny2, jpeak, ipeak, sub_xoff, sub_yoff, max_corr); } xc->loc[iloc].xfrac = sub_xoff; xc->loc[iloc].yfrac = sub_yoff; } /*-------------------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/7b/7ba737099cca4e42542fb55f7d86a4793d6a3313.svn-base000444 015705 000000 00000010561 13505462013 025545 0ustar00sandwellwheel000000 000000 # # $Id$ # set (GMTSAR_LINK_LIBS ${GMT_LIBRARY} ${TIFF_LIBRARY} ${LAPACK_LIBRARIES}) if (HAVE_M_LIBRARY) # link the math library set (GMTSAR_LINK_LIBS ${GMTSAR_LINK_LIBS} m) endif (HAVE_M_LIBRARY) include_directories (${GMT_INCLUDE_DIR} ${TIFF_INCLUDE_DIR}) add_library (gmtsar aastretch.c acpatch.c calc_dop.c conv2d.c do_freq_xcorr.c do_time_int_xcorr.c fft_bins.c fft_interpolate_routines.c file_stuff.c geoxyz.c get_locations.c get_params.c hermite_c.c highres_corr.c interpolate_orbit.c intp_coef.c ldr_orbit.c parse_xcorr_input.c plxyz.c polyfit.c print_results.c radopp.c read_orb.c read_xcorr_data.c SAT_llt2rat_sub.c rmpatch.c rng_cmp.c rng_ref.c set_prm_defaults.c shift.c sio_struct.c siocomplex.c spline.c trans_col.c utils.c utils_complex.c write_orb.c sbas_utils.c gmtsar.h lib_functions.h llt2xyz.h orbit.h sarleader_ALOS.h sarleader_fdr.h sfd_complex.h siocomplex.h soi.h xcorr.h) target_link_libraries (gmtsar ${GMTSAR_LINK_LIBS}) set (GMTSAR_LINK_LIBS ${GMTSAR_LINK_LIBS} gmtsar) add_executable (bperp bperp.c gmtsar.h) target_link_libraries (bperp ${GMTSAR_LINK_LIBS}) add_executable (calc_dop_orb calc_dop_orb.c gmtsar.h orbit.h) target_link_libraries (calc_dop_orb ${GMTSAR_LINK_LIBS}) add_executable (conv conv.c gmtsar.h) target_link_libraries (conv ${GMTSAR_LINK_LIBS}) add_executable (esarp esarp.c soi.h gmtsar.h) target_link_libraries (esarp ${GMTSAR_LINK_LIBS}) add_executable (extend_orbit extend_orbit.c gmtsar.h orbit.h lib_functions.h) target_link_libraries (extend_orbit ${GMTSAR_LINK_LIBS}) add_executable (make_gaussian_filter make_gaussian_filter.c PRM.h lib_functions.h) target_link_libraries (make_gaussian_filter ${GMTSAR_LINK_LIBS}) add_executable (offset_topo offset_topo.c gmtsar.h) target_link_libraries (offset_topo ${GMTSAR_LINK_LIBS}) add_executable (phase2topo phase2topo.c gmtsar.h) target_link_libraries (phase2topo ${GMTSAR_LINK_LIBS}) add_executable (phasediff phasediff.c gmtsar.h) target_link_libraries (phasediff ${GMTSAR_LINK_LIBS}) add_executable (phasefilt phasefilt.c gmtsar.h) target_link_libraries (phasefilt ${GMTSAR_LINK_LIBS}) add_executable (resamp resamp.c gmtsar.h lib_functions.h) target_link_libraries (resamp ${GMTSAR_LINK_LIBS}) add_executable (SAT_baseline SAT_baseline.c gmtsar.h orbit.h) target_link_libraries (SAT_baseline ${GMTSAR_LINK_LIBS}) add_executable (SAT_llt2rat SAT_llt2rat.c gmtsar.h orbit.h llt2xyz.h) target_link_libraries (SAT_llt2rat ${GMTSAR_LINK_LIBS}) add_executable (SAT_look SAT_look.c gmtsar.h orbit.h llt2xyz.h) target_link_libraries (SAT_look ${GMTSAR_LINK_LIBS}) add_executable (sbas sbas.c gmtsar.h sbas.h) target_link_libraries (sbas ${GMTSAR_LINK_LIBS}) add_executable (xcorr xcorr.c gmtsar.h) target_link_libraries (xcorr ${GMTSAR_LINK_LIBS}) # add the install targets install (TARGETS gmtsar bperp calc_dop_orb conv esarp extend_orbit make_gaussian_filter offset_topo phase2topo phasediff phasefilt resamp SAT_baseline SAT_llt2rat SAT_look sbas xcorr ARCHIVE DESTINATION lib COMPONENT Runtime LIBRARY DESTINATION lib COMPONENT Runtime RUNTIME DESTINATION bin COMPONENT Runtime) install (PROGRAMS align.csh align_ALOS2_SCAN.csh align_ALOS_SLC.csh align_batch.csh align_batch_ALOS2_SCAN.csh align_batch_ALOS_SLC.csh align_tops.csh align_tops_6par.csh align_tops_esd.csh baseline_table.csh cleanup.csh create_frame_tops.csh dem2topo_ra.csh dem2topo_ra_ALOS2.csh detrend_before_unwrap.csh filter.csh fitoffset.csh geocode.csh gmtsar.csh gmtsar_sharedir.csh grd2geotiff.csh grd2kml.csh intf.csh intf_batch.csh intf_batch_ALOS2_SCAN.csh intf_tops.csh landmask.csh landmask_ALOS2.csh m2s.csh make_a_offset.csh make_dem.csh make_los_ascii.csh make_profile.csh merge_batch.csh merge_unwrap_geocode_tops.csh p2p_ALOS.csh p2p_ALOS2_SCAN_SLC.csh p2p_ALOS2_SLC.csh p2p_ALOS_SLC.csh p2p_CSK.csh p2p_CSK_SLC.csh p2p_ENVI.csh p2p_ENVI_SLC.csh p2p_ERS.csh p2p_RS2_SLC.csh p2p_S1A_SLC.csh p2p_S1A_TOPS.csh p2p_S1A_TOPS_Frame.csh p2p_SAT_SLC.csh p2p_TSX_SLC.csh pre_proc.csh pre_proc_batch.csh pre_proc_batch_ALOS2_SCAN.csh pre_proc_batch_ALOS_SLC.csh pre_proc_init.csh preproc_batch_tops.csh preproc_batch_tops_esd.csh proj_ll2ra.csh proj_ll2ra_ascii.csh proj_model.csh proj_ra2ll.csh proj_ra2ll_ascii.csh sarp.csh slc2amp.csh snaphu.csh snaphu_interp.csh stack.csh stack_corr.csh update_PRM.csh select_pairs.csh RUNTIME DESTINATION bin COMPONENT Runtime) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/.svn/pristine/17/17930313e6df2e3e4b78479f17bf9382c7fb930c.svn-base000444 015705 000000 00000000477 13505462013 025502 0ustar00sandwellwheel000000 000000 % % plot the real and imaginar parts of the shifted gaussian function % load gauss.dat x=gauss(:,1); ri=gauss(:,2); ii=gauss(:,3); ro=gauss(:,4); io=gauss(:,5); clf subplot(2,1,1);plot(x,ri,'k',x,ro,'r');ylabel('real') %axis([504,622,-1,1]) subplot(2,1,2);plot(x,ii,'k',x,io,'r');ylabel('imag') %axis([504,522,-1,1]) GMTSAR_V5.7/.svn/pristine/17/1774d27969e33aba71fd57ae656b72c6ffa4fa34.svn-base000444 015705 000000 00000031146 13505462014 025712 0ustar00sandwellwheel000000 000000 /* * $Id: epr_record.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" /* * ===================== Record Info Access ============================== */ /* Function: epr_create_record_info Access: public API Changelog: 2002/01/16 mp initial version */ /** * Creates a new record_info for the record by the given * dataset name. * * @param dataset_name the name of the dataset, to which the record * belongs to, must not be NULL * @param field_infos the pointer at the strucrure with information * of all fields wich belong to record, * must not be NULL * @return the new record instance * or NULL if an error occured. */ EPR_SRecordInfo* epr_create_record_info(const char* dataset_name, EPR_SPtrArray* field_infos) { EPR_SRecordInfo* record_info = NULL; EPR_SFieldInfo* field_info = NULL; int field_infos_index; int field_infos_length; uint tot_record_size = 0; record_info = (EPR_SRecordInfo*) calloc(1, sizeof (EPR_SRecordInfo)); if (record_info == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_record_info: out of memory"); return NULL; } epr_assign_string(&record_info->dataset_name, dataset_name); if (record_info->dataset_name == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_record_info: out of memory"); return NULL; } record_info->field_infos = field_infos; field_infos_length = (int)epr_get_ptr_array_length(field_infos); for (field_infos_index = 0; field_infos_index < field_infos_length; field_infos_index++) { field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(field_infos, field_infos_index); tot_record_size += field_info->tot_size; } record_info->tot_size = tot_record_size; return record_info; } /** * Frees the memory allocated by the given record_info. * *

After calling this function the give record_info pointer gets * invalid and should not be used anymore. * * @param record_info the record to be released, if NULL * the function immediately returns */ void epr_free_record_info(EPR_SRecordInfo* record_info) { EPR_SFieldInfo* field_info = NULL; uint field_info_index = 0; if (record_info == NULL) return; if (record_info->field_infos != NULL) { for (field_info_index = 0; field_info_index < record_info->field_infos->length; field_info_index++) { field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(record_info->field_infos, field_info_index); epr_free_field_info(field_info); } epr_free_ptr_array(record_info->field_infos); record_info->field_infos = NULL; } epr_free_string(record_info->dataset_name); record_info->dataset_name = NULL; record_info->field_infos = NULL; record_info->tot_size = 0; free(record_info); } /* Function: epr_get_record_info Access: private API implementation helper Changelog: 2002/01/05 mp initial version */ /** * Returns information about the structure of the records contained in * a dataset specified by the given dataset_id. * * @param dataset_id the the dataset identifier * * @return the the pointer for the record structure information. */ EPR_SRecordInfo* epr_get_record_info(EPR_SDatasetId* dataset_id) { EPR_SProductId* product_id; EPR_SRecordInfo* record_info; uint num_record_infos; uint record_index = 0; assert(dataset_id != NULL); product_id = dataset_id->product_id; assert(product_id != NULL); assert(product_id->record_info_cache != NULL); /* * checks, if 'record_info_cache' is not empty, then returns this cache, * not making moreover */ num_record_infos = product_id->record_info_cache->length; for (record_index = 0; record_index < num_record_infos; record_index++) { record_info = (EPR_SRecordInfo*) product_id->record_info_cache->elems[record_index]; if (epr_equal_names(record_info->dataset_name, dataset_id->dataset_name)) return record_info; } record_info = epr_read_record_info(product_id, dataset_id); if (record_info == NULL) { epr_set_err(e_err_file_access_denied, "epr_get_record_info: invalid DDDB resource path: missing any 'ASAR' files"); return NULL; } epr_add_ptr_array_elem(product_id->record_info_cache, record_info); return record_info; } EPR_SRecordInfo* epr_read_record_info(EPR_SProductId* product_id, EPR_SDatasetId* dataset_id) { EPR_SRecordInfo* record_info = NULL; EPR_SFieldInfo* field_info = NULL; EPR_SPtrArray* field_infos = NULL; EPR_EDataTypeId data_type_id = e_tid_unknown; uint num_elems = 0; uint num_bytes = 0; uint more_count = 0; char* field_name = NULL; char* data_type = NULL; char* unit = NULL; char* description = NULL; int i; int rt_index; const struct RecordDescriptorTable* r_tables; int num_descr; int num_r_tables; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_read_record_info: product_id must not be NULL"); return NULL; } /* @DDDB */ if (strncmp(product_id->id_string, "MER", 3) == 0) { r_tables = dddb_meris_rec_tables; num_r_tables = EPR_NUM_MERIS_REC_TABLES; } else if (strncmp(product_id->id_string, "ATS", 3) == 0) { r_tables = dddb_aatsr_rec_tables; num_r_tables = EPR_NUM_AATSR_REC_TABLES; } else if (strncmp(product_id->id_string, "ASA", 3) == 0) { r_tables = dddb_asar_rec_tables; num_r_tables = EPR_NUM_ASAR_REC_TABLES; } else if (strncmp(product_id->id_string, "SAR", 3) == 0) { r_tables = dddb_asar_rec_tables; num_r_tables = EPR_NUM_ASAR_REC_TABLES; } else { epr_set_err(e_err_invalid_product_id, "epr_read_record_info: invalid product identifier"); return NULL; } rt_index = -1; for (i = 0; i < num_r_tables; i++) { if (dataset_id->record_descriptor == r_tables[i].descriptors) { rt_index = i; break; } } if (rt_index == -1) { epr_set_err(e_err_invalid_product_id, "epr_read_record_info: unknown record"); return NULL; } field_infos = epr_create_ptr_array(16); num_descr = r_tables[rt_index].num_descriptors; for (i = 0; i < num_descr; i++) { /* 1: field_name */ field_name = epr_clone_string(r_tables[rt_index].descriptors[i].id); /* 2: data_type_id */ data_type_id = r_tables[rt_index].descriptors[i].type; /* 3: unit */ unit = epr_clone_string(r_tables[rt_index].descriptors[i].unit); /* 4: num_elems */ num_bytes = r_tables[rt_index].descriptors[i].elem_size; /* 5: num_elems and more_count*/ /* @todo: check return value! and check epr_parse_value_count */ num_elems = epr_parse_value_count(product_id, r_tables[rt_index].descriptors[i].num_elem); more_count = 1; /* 6: description*/ description = epr_clone_string(r_tables[rt_index].descriptors[i].description); field_info = epr_create_field_info(data_type_id, description, field_name, num_elems, num_bytes, more_count, unit); epr_add_ptr_array_elem(field_infos, field_info); epr_free_string(field_name); epr_free_string(data_type); epr_free_string(unit); epr_free_string(description); } record_info = epr_create_record_info(dataset_id->dataset_name, field_infos); return record_info; } /* Function: epr_read_record_info Access: private API implementation helper Changelog: 2002/01/05 mp initial version */ /** * Reads the record information with the given file path and * returns the poiter at it. * * @param product_id the the product file identifier * @param dataset_name the name of the dataset * @param db_file_istream the DB-table file identifier * * @return the the pointer at the record information. */ /* EPR_SRecordInfo* epr_read_record_info(EPR_SProductId* product_id, EPR_SDatasetId* dataset_id, FILE* db_file_istream) } */ /* Function: epr_create_record Access: public API Changelog: 2002/01/23 mp initial version */ /** * Creates a new record instance from the dataset specified by the given * dataset name. * * @param the pointer at the record information. * must not be NULL * @return the new record instance * or NULL if an error occured. */ EPR_SRecord* epr_create_record_from_info(EPR_SRecordInfo* record_info) { EPR_SRecord* record = NULL; EPR_SFieldInfo* field_info = NULL; uint field_infos_index = 0; int field_infos_length; if (record_info == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_record_from_info: out of memory"); return NULL; } record = (EPR_SRecord*) calloc(1, sizeof(EPR_SRecord)); if (record == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_record: out of memory"); return NULL; } record->magic = EPR_MAGIC_RECORD; record->info = record_info; record->num_fields = record_info->field_infos->length; record->fields = (EPR_SField**) calloc(record->num_fields, sizeof(EPR_SField*)); if (record->fields == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_record: out of memory"); return NULL; } field_infos_length = (int)epr_get_ptr_array_length(record_info->field_infos); for (field_infos_index = 0; field_infos_index < record_info->field_infos->length; field_infos_index++) { field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(record_info->field_infos, field_infos_index); record->fields[field_infos_index] = epr_create_field(field_info); } return record; } const EPR_SField* epr_get_field_at(const EPR_SRecord* record, uint field_index){ EPR_SField* field = NULL; epr_clear_err(); if (record == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_at: record-identifier must not be NULL"); return NULL; } if ((field_index < 0) || (field_index >= record->num_fields)) { epr_set_err(e_err_index_out_of_range, "epr_get_field_at: field_index out of range"); return NULL; } field = record->fields[field_index]; return field; } uint epr_get_num_fields(const EPR_SRecord* record) { epr_clear_err(); if (record == NULL) { epr_set_err(e_err_null_pointer, "epr_get_field_at: record-identifier must not be NULL"); return (uint)-1; } return record->num_fields; } /** * Frees the memory allocated by the given record. * *

After calling this function the give record pointer gets * invalid and should not be used anymore. * * @param record the record to be released, if NULL * the function immediately returns */ void epr_free_record(EPR_SRecord* record) { EPR_SField* field = NULL; uint fields_index = 0; epr_clear_err(); if (record == NULL) return; if (record->fields != NULL) { for (fields_index = 0; fields_index < record->num_fields; fields_index++) { field = (EPR_SField*)record->fields[fields_index]; epr_free_field(field); } free(record->fields); record->fields = NULL; } /* Do NOT free record->info since many records can share the same record->info! */ record->info = NULL; record->num_fields = 0; free(record); } GMTSAR_V5.7/.svn/pristine/17/17f5e13431adbdd4d0e4f882cc7ea128ee34cbc1.svn-base000444 015705 000000 00000033114 13505462014 026074 0ustar00sandwellwheel000000 000000 /* * $Id: epr_core.c,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" /** * The one and only ENVISAT API instance. */ EPR_SAPI epr_api; /* Function: epr_str_to_data_type_id Access: private API implementation helper Changelog: 2002/01/05 nf initial version */ /** * Converts the given string into a data type identifier. * * @param str the string to be converted. * @return the data type identifier represented by the given string. * If the string can not be converted the special value * e_tid_unknown is returned. */ EPR_EDataTypeId epr_str_to_data_type_id(const char* str) { assert(str != NULL); if (epr_equal_names(str, "UChar") || epr_equal_names(str, "uchar")) return e_tid_uchar; else if (epr_equal_names(str, "AChar") || epr_equal_names(str, "SChar") || epr_equal_names(str, "char")) return e_tid_char; else if (epr_equal_names(str, "UShort") || epr_equal_names(str, "ushort")) return e_tid_ushort; else if (epr_equal_names(str, "SShort") || epr_equal_names(str, "short")) return e_tid_short; else if (epr_equal_names(str, "UInt") || epr_equal_names(str, "uint")) return e_tid_uint; else if (epr_equal_names(str, "SInt") || epr_equal_names(str, "int")) return e_tid_int; else if (epr_equal_names(str, "ULong") || epr_equal_names(str, "ulong")) return e_tid_uint; else if (epr_equal_names(str, "SLong") || epr_equal_names(str, "long")) return e_tid_int; else if (epr_equal_names(str, "Float") || epr_equal_names(str, "float")) return e_tid_float; else if (epr_equal_names(str, "Double") || epr_equal_names(str, "double")) return e_tid_double; else if (epr_equal_names(str, "@/types/UTC.dd") || epr_equal_names(str, "time")) return e_tid_time; else if (epr_equal_names(str, "String") || epr_equal_names(str, "string")) return e_tid_string; else if (epr_equal_names(str, "Spare") || epr_equal_names(str, "spare")) return e_tid_spare; else return e_tid_unknown; } /* Function: epr_data_type_id_to_str Access: public API implementation helper Changelog: 2003/07/10 nf initial version */ /** * Converts the given data type identifier to a string representing the C-type of the data type. * * @param data_type_id the data type identifier. * If the identifier can not be converted, an empty string * "" is returned. * @return the C-type string */ const char* epr_data_type_id_to_str(EPR_EDataTypeId data_type_id) { switch (data_type_id) { case e_tid_uchar: return "uchar"; case e_tid_char: return "char"; case e_tid_ushort: return "ushort"; case e_tid_short: return "short"; case e_tid_uint: return "uint"; case e_tid_int: return "int"; case e_tid_float: return "float"; case e_tid_double: return "double"; case e_tid_string: return "string"; case e_tid_spare: return "spare"; case e_tid_time: return "time"; default: return ""; } } /* Function: epr_get_data_type_size Access: private API implementation helper Changelog: 2002/01/24 nf initial version */ /** * Determines the length of the given data type identifier. * * @param data_type_id the data type identifier. * @return the the length of the data type identifier. * If the data type identifier is unknown, * e_tid_unknown is returned. */ uint epr_get_data_type_size(EPR_EDataTypeId data_type_id) { switch (data_type_id) { case e_tid_uchar: return sizeof(uchar); case e_tid_char: return sizeof(char); case e_tid_ushort: return sizeof(ushort); case e_tid_short: return sizeof(short); case e_tid_uint: return sizeof(uint); case e_tid_int: return sizeof(int); case e_tid_float: return sizeof(float); case e_tid_double: return sizeof(double); case e_tid_string: return sizeof(char); case e_tid_spare: return sizeof(uchar); case e_tid_time: return sizeof (int) /* days */ + sizeof (uint) /* seconds */ + sizeof (uint); /* microseconds */ default: return 0; } } /* * ===================== Logging ============================== */ /* Function: epr_log Access: private API implementation helper Changelog: 2002/01/05 mp initial version */ /** * Logs a message with the given log level. * *

The function calls this API's log handler if * it is not NULL and if the given log * level is greater than or equal to the global log level. * * @param log_level the log level (or message type) for the mesage * @param log_message the mesage */ void epr_log(EPR_ELogLevel log_level, const char* log_message) { if (epr_api.log_handler != NULL && log_level >= epr_api.log_level) epr_api.log_handler(log_level, log_message); } /* * ===================== Error Handling ============================== */ /* Function: epr_set_error Access: private API implementation helper Changelog: 2002/01/05 mp initial version */ /** * Sets the given error code and the associated error message and * calls this API's error handler if it is not NULL. * * @param err_code the error code * @param err_message the error mesage */ void epr_set_err(EPR_EErrCode err_code, const char* err_message) { epr_api.last_err_code = err_code; epr_assign_string(&epr_api.last_err_message, err_message); if (epr_api.log_handler != NULL) { epr_api.log_handler(e_log_error, err_message); } if (epr_api.err_handler != NULL) { epr_api.err_handler(err_code, err_message); } } /* Function: epr_set_error Access: private API implementation helper Changelog: 2002/01/05 mp initial version */ /** * Clears the last error. After calling this function, calling * epr_get_last_err_code returns e_err_none or zero and * epr_get_last_err_message returns NULL. */ void epr_clear_err() { epr_api.last_err_code = e_err_none; epr_free_string(epr_api.last_err_message); epr_api.last_err_message = NULL; } /* Function: epr_get_last_err_code Access: private API implementation helper Changelog: 2002/01/05 nf initial version */ /** * Sets the error code of the error that occured during * the last API function call. * * @return the error code, e_err_none or zero if no error occured */ EPR_EErrCode epr_get_last_err_code() { return epr_api.last_err_code; } /* Function: epr_get_last_err_message Access: private API implementation helper Changelog: 2002/01/05 nf initial version */ /** * Sets the error message of the error that occured during * the last API function call. * * @return the error message, NULL if no error occured */ const char* epr_get_last_err_message() { return epr_api.last_err_message; } /** * Opens a file to read. * * @param file_path the path to the file. * * @return the file handle or * NULL if an error occured. */ FILE* epr_open_file(char* file_path) { FILE* db_file; epr_log(e_log_debug, "about to open file: "); epr_log(e_log_debug, file_path); db_file = fopen(epr_trim_string(file_path), "rb"); if (db_file == NULL) { epr_log(e_log_debug, "open failed"); if (errno == ENOENT) { epr_set_err(e_err_file_not_found, "epr_open_file: file not found"); } else { epr_set_err(e_err_file_access_denied, "epr_open_file: file open failed"); } } /*epr_log(e_log_debug, "open successful");*/ return db_file; } /** * Converts the given string into an int number. * * @param str the string to be converted. * @return the int type number represented by the given string. * If the string can not be converted, * the value of 1 is returned. */ int epr_str_to_number(const char* str) { char *stopstring; int l; assert(str != NULL); if (strcmp(str, "*") == 0) return 1; if (strcmp(str, "") == 0) return 1; errno = 0; l = strtol( str, &stopstring, 10 ); if (errno == EDOM) { epr_set_err(e_err_illegal_conversion, "failed to convert string to integer: errno = EDOM"); return -1; } if (errno == ERANGE) { epr_set_err(e_err_illegal_conversion, "failed to convert string to integer: errno = ERANGE"); return -1; } return l; } /** * Converts the given string into a field length. * * The string can represent a single integer value or a sequence * of integer value and parameter references (names). Integers * and value are expected to be separated by the asterisk * character ('*'). E.g. the string "3 * 4 * num_pixels_across" * is represents a valid field length as long as the parameter * name 'num_pixels_across' is found in the given parameter table. * * @param count the string to be converted * @param product_id the Product identifier containing the values * for the Product * @return the field length computed from the given string or * (uint)-1 if an error occured. */ uint epr_parse_value_count(EPR_SProductId* product_id, const char* count) { char seps[] = EPR_COUNT_SEPARATOR_ARRAY; char * token; char * str; uint c; int pos = 0; uint comes_from_convert; c = 1; str = epr_clone_string(count); if (str == NULL) { epr_set_err(e_err_out_of_memory, "epr_parse_value_count: cannot allocate memory"); return 16111;/*8999*/ /* @todo check: why in the hell 16111 ? */ } while ((token = epr_str_tok(str, seps, &pos)) != NULL) { comes_from_convert = epr_str_to_number(token); if (comes_from_convert == 0 && (strcmp(token, "0") != 0)) { /* check if "token" belongs to param_table*/ comes_from_convert = epr_param_to_value(token, product_id->param_table); if (comes_from_convert == -1) { epr_set_err(e_err_illegal_conversion, "epr_parse_value_count: parameter not found"); return 16111; /* @todo check: why in the hell 16111 ? */ } } c *= comes_from_convert; epr_free_string(token); token = NULL; } epr_free_string(str); return c; } /** * Finds in the param_table the value corresponding to its name. * * @param str the parameter name * @param param_table the pointer to param_table * * @return the value of the given name or * (uint)-1 if an error occured. */ uint epr_param_to_value(const char* str, EPR_SPtrArray* param_table) { EPR_SParamElem* param_elem = NULL; int elem_index; int param_table_length; param_table_length = (int)epr_get_ptr_array_length(param_table); for (elem_index = 0; elem_index < param_table_length; elem_index++) { param_elem = (EPR_SParamElem*)epr_get_ptr_array_elem_at(param_table, elem_index); if (epr_equal_names(param_elem->param_name, str)) { return param_elem->param_value; } } return (uint) -1; /*error*/ } /** * Adapts path description to operating system. * * @param path the path to a file. * */ void epr_make_os_compatible_path(char* path) { if (path != NULL) { char* pc = path; while (*pc != '\0') { #ifdef WIN32 if (*pc == '/') *pc = '\\'; #elif _M_MPPC if (*pc == '/') *pc = ':'; /* UK note: the colon is an old-style path separator of the Mac OS */ /* possibly not used any more but supported for Classic compatibility */ /* @to do: check whether the forward slash / should be used in Mac OS X */ #else if (*pc == '\\') *pc = '/'; #endif pc++; } } } epr_boolean epr_check_api_init_flag() { if (!epr_api.init_flag) { epr_set_err(e_err_api_not_initialized, "epr_open_product: API not initialized (forgot to call epr_init_api?)"); return FALSE; } return TRUE; } GMTSAR_V5.7/.svn/pristine/17/17c492b21b77189ca5ab79d939f4c5c8534f0532.svn-base000444 015705 000000 00000035546 13505462014 025422 0ustar00sandwellwheel000000 000000 /* * $Id: epr_bitmask.h,v 1.1.1.1 2004-10-28 19:22:22 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_BITMASK_H_INCL #define EPR_BITMASK_H_INCL #ifdef __cplusplus extern "C" { #endif #define FLAG_MASK_NOT_COMPUTED ((uint) -1) typedef struct EPR_BmTerm EPR_SBmTerm; typedef struct EPR_BmEvalContext EPR_SBmEvalContext; typedef struct EPR_BmFlagDataset EPR_SBmFlagDataset; typedef enum EPR_BmOpCode EPR_EBmOpCode; /* private implementations */ enum EPR_BmOpCode { BMT_UNKNOWN = 0, BMT_REF, BMT_AND, BMT_OR, BMT_NOT }; enum EPR_Tok { BME_UNKNOWN = 0, BME_EOS, BME_SPECIAL, BME_NAME }; /** * The EPR_BmTerm structure is the union of structures: * each of them can contain either the subject (operand) for the logic operators * or this operators itself with referd operand(s). Thus they are recursive. * The example of term: flags.WATER or flags.LAND * here: 'flags' is a band_name; 'WATER' and 'LAND' - flag_name's; 'or' - logical operator. * * @see EPR_SRaster */ struct EPR_BmTerm { EPR_EBmOpCode op_code; union { struct /*BMT_REF*/ { char* band_name; char* flag_name; uint flag_mask; EPR_SRaster* flag_raster; } ref; struct /*BMT_NOT*/ { EPR_SBmTerm* arg; } unary; struct /*BMT_AND and BMT_OR*/ { EPR_SBmTerm* arg1; EPR_SBmTerm* arg2; } binary; } op; }; /** * The EPR_BmEvalContext structure represents an evaluation context for bitmask * expressions. It is used internally only. *

* An instance of this structure holds the product ID, references to all flag datasets * required to evaluate the expression as well as information about the bitmask raster beeing * created. * * @see EPR_SProductId * @see EPR_SRaster * @see EPR_SPtrArray */ struct EPR_BmEvalContext { /** * The ID of the product to which this band belongs to. */ EPR_SProductId* product_id; /** * X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster. */ int offset_x; /** * Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster. */ int offset_y; /** * The result 0/1 bit mask raster for all flag bands */ EPR_SRaster* bitmask_raster; /** * The band_id of flags (can be 0, 1 or 4 - for AATSR) */ EPR_SPtrArray* flag_band_ids; /** * The corresponding 0/1 bit mask raster for each flag bands */ EPR_SPtrArray* flag_rasters; }; /** * Represents a flag-field within a flag-record. * */ struct EPR_BmFlagDataset { /*The name of bitmask dataset*/ char* name; /*The value of bitmask dataset (the number of the relevant bit in bitmask)*/ uint bit_index; /*The description of bitmask dataset*/ char* description; }; /** * Creates bit-mask evaluation context * for the given raster and offsets of start corner * * @param product_id the product ID * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster the bitmask_raster * * @return bit-mask evaluated context for success, and error code otherwise */ EPR_SBmEvalContext* epr_create_bm_eval_context(EPR_SProductId* product_id, int offset_x, int offset_y, EPR_SRaster* raster); /** * Release the memory allocated through a EPR_SBmEvalContext. * * @param context the bit mask context, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise */ void epr_free_bm_eval_context(EPR_SBmEvalContext* context); /** * Reads bit-mask pixels of the given product for the given bit-mask expression * for the given region and and with the given sub-sampling. * *

*

bit-mask-expression :=
*     or-expression * *

or-expression :=
*     and-expression
*     or-expression or and-expression * *

and-expression :=
*     not-expression
*     and-expression and not-expression * *

not-expression :=
*     primary-expression
*     not not-expression * *

primary-expression :=
*     flag-reference
*     ( bit-mask-expression ) * *

flag-reference :=
*     dataset-name.flag-name *

* *

Where dataset-name and flag-name are names specific for a particular data product. * Names are in general resolved case-insenitively. The parser also accepts an alternate notation for * the boolean operators: *

* The | character for the or operator,
* the & character for the and operator and finally
* the ! character for the not operator. *
* * @param product_id the product ID * @param bm_expr the bit-mask expression * @param xo X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param yo Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster_width the width in pixel co-ordinates of the raster to search * @param raster_height the height in pixel co-ordinates of raster to search * @param s_x X-step in pixel co-ordinates to get the next raster to search * @param s_y Y-step in pixel co-ordinates to get the next raster to search * @param raster_buffer [BYTE] the memory buffer to save information was read * * @return zero for success, and error code otherwise */ int epr_read_bitmask_data(const EPR_SProductId* product_id, const char* bm_expr, int xo, int yo, int raster_width, int raster_height, int s_x, int s_y, void* raster_buffer); /** * Evaluates the given bitmask expression. * * @param term the bitmask term * @param x the x co-ordinate in pixels * @param y the y co-ordinate in pixels */ epr_boolean epr_eval_bm_term(EPR_SBmEvalContext* context, EPR_SBmTerm* term, int x, int y); /** * Parses a bitmask expression string. * *

The bit-mask expressions recognized by this parser must have the following syntax: * *

*

bit-mask-expression :=
*     or-expression * *

or-expression :=
*     and-expression
*     or-expression or and-expression * *

and-expression :=
*     not-expression
*     and-expression and not-expression * *

not-expression :=
*     primary-expression
*     not not-expression * *

primary-expression :=
*     flag-reference
*     ( bit-mask-expression ) * *

flag-reference :=
*     dataset-name.flag-name *

* *

Where dataset-name and flag-name are names specific for a particular data product. * Names are in general resolved case-insenitively. The parser also accepts an alternate notation for * the boolean operators: *

* The | character for the or operator,
* the & character for the and operator and finally
* the ! character for the not operator. *
* *

For example, the following parseBitmaskExpression request will perform without errors: *

 *     BitmaskTerm term = BitmaskExpressionParser.parse("flags.LAND and not flags.DDV");
 * 
*

Another example for a valid expression in alternatate notation is: *

 *     BitmaskTerm term = BitmaskExpressionParser.parse("flags.LAND | (flags.COASTLINE & !flags.CLOUD)");
 * 
* *

The terms created in the examples above could successfully be evaluated in an evaluation context * provided by an ENVISAT MERIS Level 2 data product. * * @param bm_expr the bitmask expression * @return the bitmask term representing the given expression */ EPR_SBmTerm* epr_parse_bm_expr_str(const char* bm_expr); struct EPR_ParseInfo { const char* bm_expr; int bm_expr_pos; epr_boolean pushed_back; int token_type; char* token; char* err_message; }; typedef struct EPR_ParseInfo EPR_SParseInfo; /** * This group of functions is for parsing the expression. * * @param parse_info parse_info structure * @param term_required the boolean value expression. * * @return the bit mask term (see EPR_BmTerm). */ /*@{*/ EPR_SBmTerm* epr_parse_bm_expr(EPR_SParseInfo* parse_info, epr_boolean term_required); EPR_SBmTerm* epr_parse_bm_OR_expr(EPR_SParseInfo* parse_info, epr_boolean term_required); EPR_SBmTerm* epr_parse_bm_AND_expr(EPR_SParseInfo* parse_info, epr_boolean term_required); EPR_SBmTerm* epr_parse_bm_unary_expr(EPR_SParseInfo* parse_info, epr_boolean term_required); EPR_SBmTerm* epr_parse_bm_primary_expr(EPR_SParseInfo* parse_info, epr_boolean term_required); /*@}*/ /** * This group of functions is for recognizing the keyword. * * @param parse_info parse_info structure * * @return TRUE or FALSE. */ /*@{*/ epr_boolean epr_is_bm_OR_keyword(EPR_SParseInfo* parse_info); epr_boolean epr_is_bm_AND_keyword(EPR_SParseInfo* parse_info); epr_boolean epr_is_bm_NOT_keyword(EPR_SParseInfo* parse_info); /*@}*/ /** * This group of functions is for recognizing the operator. * * @param parse_info parse_info structure * * @return TRUE or FALSE. */ /*@{*/ epr_boolean epr_is_bm_AND_operator(EPR_SParseInfo* parse_info); epr_boolean epr_is_bm_OR_operator(EPR_SParseInfo* parse_info); epr_boolean epr_is_bm_NOT_operator(EPR_SParseInfo* parse_info); /*@}*/ /** * Tests the given expression for operand name only (not operator). * * @param parse_info parse_info structure * * @return TRUE if the term is not NULL and an operand, or FALSE otherwise */ epr_boolean epr_is_bm_name_token(EPR_SParseInfo* parse_info); /** * Tests the given expression for the end of string. * * @param parse_info parse_info structure * * @return TRUE if the EOS occurs, or FALSE otherwise */ epr_boolean epr_is_bm_EOS_token(EPR_SParseInfo* parse_info); /** * Tests the given expression for errors. * * @param parse_info parse_info structure * * @return TRUE if no error occurs, or FALSE otherwise */ epr_boolean epr_is_bm_expr_error(EPR_SParseInfo* parse_info); /** * Gets the first character of token for the given expression or EOS. * * @param parse_info parse_info structure * * @return '(' , ')', '.' , '&' , '|' ,'!', or '\0' otherwise */ int epr_get_token_char(EPR_SParseInfo* parse_info); /** * Releases the actual token given expression. * * @param parse_info parse_info structure * * @return token */ char* epr_consume_token(EPR_SParseInfo* parse_info); /** * Selectss the next token given expression. * * @param parse_info parse_info structure */ void epr_next_bm_expr_token(EPR_SParseInfo* parse_info); void epr_push_back_bm_expr_token(EPR_SParseInfo* parse_info); void epr_set_bm_expr_error(EPR_SParseInfo* parse_info, const char* message); int epr_tokenize_bm_expr(const char* bm_expr, int* bm_expr_pos, char** token); /** * Creates a new bitmask term instance. */ EPR_SBmTerm* epr_create_bm_term(EPR_EBmOpCode op_code); /** * Creates a new bitmask reference term instance. */ EPR_SBmTerm* epr_create_bm_REF_term(char* ds_name, char* flag_name); /** * Creates a new bitmask NOT term instance. */ EPR_SBmTerm* epr_create_bm_NOT_term(EPR_SBmTerm* arg); /** * Creates a new bitmask OR term instance. */ EPR_SBmTerm* epr_create_bm_OR_term(EPR_SBmTerm* arg1, EPR_SBmTerm* arg2); /** * Creates a new bitmask reference AND term instance. */ EPR_SBmTerm* epr_create_bm_AND_term(EPR_SBmTerm* arg1, EPR_SBmTerm* arg2); /** * Releases a new bitmask term instance. */ void epr_free_bm_term(EPR_SBmTerm* term); /** * Creates a new bitmask expression from the given bitmask term. *

The expression returned is a valid in the sense that the epr_parse_bm_expr() * applied to the returned string would return an equivalent term. * * @param term the term to be converted */ char* epr_create_bm_expr(EPR_SBmTerm* term); /** * Prints the given term as an expression to the console. */ void epr_print_bm_term(EPR_SBmTerm* term); /** * Writes the given term as an expression to the given output stream. */ void epr_write_bm_term(EPR_SBmTerm* term, FILE* ostream); /** * Creates the coding flag info * * @param str the local path to dddb * * @return the the pointer at the coding flag information. */ EPR_SPtrArray* epr_create_flag_coding(EPR_SProductId* product_id, const char* str); /** * Creates the coding flag definition * * @return the the pointer at the coding flag definition information. */ EPR_SFlagDef* epr_create_flag_def(); /** * Releases the coding flag definition */ void epr_free_flag_def(EPR_SFlagDef* flag_def); /** * Releases the coding flag info */ void epr_free_flag_coding(EPR_SPtrArray* flag_coding); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_BITMASK_H_INCL */ GMTSAR_V5.7/.svn/pristine/17/175b95cae68c750bbe0c7da832ac21656fe41c35.svn-base000444 015705 000000 00000014455 13505462014 025672 0ustar00sandwellwheel000000 000000 /*************************************************************************** * ALOS_fbd2fbs_SLC reads a FBD-HH SLC file processed with ** ALOS_pre_proc_SLC and upsamples it to FBS-HH bandwidth. The algorithm * * takes the fft each complex range line and zero-pads in the frequency * * domain. This is possible because the FBS bandwidth is exactly two times * * the FBD. Note that the interpolated data may exceed the original data * * span of 0-31 so the numbers are rescaled to lie between 0 and 127 which * * still only one byte of storage. * * The code uses cfft1d which seems to be the standard interface in the * * InSAR community. * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Rob Mellors * * (Scripps Institution of Oceanography) * * Date : 08/04/2007 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE 10/08/2013 * * Name: Xiaohua Xu ** Modification: Modified form ALOS_fbd2fbs, changing the input file to * * SLC. clip127 is switched to clip signed short int. * * * ***************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" #define clip(A) (((A) > 32767) ? 32767 : (((A) < -32768) ? -32768 : A)) char *USAGE = "ALOS_FBD2FBS_SLC FBD.PRM FBS.PRM \n" " FBD.PRM PRM file for input image in fine beam dual " "polarization (FBD 14 MHz) (input) \n" " FBS.PRM PRM file for outout image in fine beam single " "polarization (FBS 28 MHz) (output) \n"; int main(int argc, char **argv) { FILE *prmfile, *datafile, *prmout, *dataout; short int *indata, *outdata, *extr; fcomplex *cin, *cout; float rtest, itest; int j, k, nffti, nffto, N = 128; int ibufsize, obufsize, fbdsamp, fbssamp; struct PRM r; if (argc < 3) die(USAGE, ""); /* flags defined in global_flags.h */ verbose = 0; debug = 0; /* fill the struct with default parameters */ null_sio_struct(&r); /* open input PRM file and read the parameters */ if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); get_sio_struct(prmfile, &r); /* open input raw data file */ if ((datafile = fopen(r.input_file, "rb")) == NULL) die("Can't open ", r.input_file); /* open output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); /* assemble the output filename and open for writing */ sscanf(argv[2], "%s", r.input_file); r.input_file[strlen(argv[2]) - 4] = 0; strcat(r.input_file, ".SLC"); /* open output file for single look complex image */ if ((dataout = fopen(r.input_file, "wb")) == NULL) die("Can't open ", r.input_file); /* compute the sizes for the input and output buffers and allocate the memory */ ibufsize = r.num_rng_bins * 2; if ((indata = (short int *)malloc(ibufsize * sizeof(short int))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } fbdsamp = r.num_rng_bins; fbssamp = 2 * fbdsamp; obufsize = 2 * fbssamp; if ((outdata = (short int *)malloc(obufsize * sizeof(short int))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for output outdata.\n"); exit(-1); } if ((extr = (short int *)malloc(N * sizeof(short int))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for supplimental outdata.\n"); exit(-1); } for (k = 0; k < N; k++) { extr[k] = (short int)(0); } /* find best length of fft (use power of two) for both input and output */ nffti = find_fft_length(fbdsamp); nffto = find_fft_length(fbssamp); if (debug) fprintf(stderr, " nffti %d nffto %d \n", nffti, nffto); /* allocate the memory for the complex arrays */ if ((cin = (fcomplex *)malloc(nffti * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbd \n"); exit(-1); } if ((cout = (fcomplex *)malloc(nffto * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbs \n"); exit(-1); } /* read the input and output SLC files */ for (k = 0; k < r.num_lines; k++) { fread((void *)indata, sizeof(short int), ibufsize, datafile); /* fill the complex array with complex indata */ for (j = 0; j < nffti; j++) { if ((j < fbdsamp) && (((short int)indata[2 * j]) != NULL_DATA) && (((short int)indata[2 * j + 1]) != NULL_DATA)) { cin[j].r = (float)(indata[2 * j]); cin[j].i = (float)(indata[2 * j + 1]); } else { cin[j].r = 0.0; cin[j].i = 0.0; } } /* interpolate from fbd to fbs */ rng_expand(cin, nffti, cout, nffto); /* convert the complex back to bytes */ for (j = 0; j < obufsize / 2; j++) { rtest = rintf(cout[j].r); itest = rintf(cout[j].i); /* sometimes the range can exceed -32768~32767 so clip the numbers to be in the correct range */ outdata[2 * j] = (short int)clip(rtest); outdata[2 * j + 1] = (short int)clip(itest); } fwrite((void *)outdata, sizeof(short int), obufsize, dataout); fwrite((void *)extr, sizeof(short int), N, dataout); } /* compute the changes to the output PRM-file */ r.xmi = 0; r.xmq = 0; r.chirp_ext = r.chirp_ext * 2; r.good_bytes = 4 * fbssamp; r.bytes_per_line = 4 * fbssamp + N; r.num_rng_bins = fbssamp + N / 2; r.fs = r.fs * 2.; if (debug) fprintf(stderr, " %d %d %d %d %f %f \n", r.chirp_ext, r.good_bytes, r.bytes_per_line, r.num_rng_bins, r.fs, r.chirp_slope); /* write the output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("can't open prfile", argv[2]); put_sio_struct(r, prmout); free(indata); free(outdata); free(cin); free(cout); fclose(prmfile); fclose(prmout); fclose(datafile); fclose(dataout); } GMTSAR_V5.7/.svn/pristine/28/287e5d2fccec13e8df99a72804f05358dd30d7d9.svn-base000444 015705 000000 00000004340 13505462013 025716 0ustar00sandwellwheel000000 000000 /* $Id: sbas.h 39 2016-06-18 03/16/24 Xiaohua Xu $ */ /* sbas functions */ #include #include #include"gmt.h" int parse_command_ts(int64_t, char **, float *, double *, double *, double *, int64_t *, int64_t *, int64_t *); int allocate_memory_ts(int64_t **, double **, double **, double **, float **, char ***, char ***, int64_t **, double **, int64_t **, double **, double **, double **, int64_t **, float **, float **, float **, float **, float **, float **, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t **); int init_array_ts(double *, double *, float *, float *, float *, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t); int read_table_data_ts(void *, FILE *, FILE *, char **, char **, int64_t *, float *, int64_t *, float *, float *, int64_t, int64_t, int64_t, int64_t, struct GMT_GRID **, int64_t *, double *); int init_G_ts(double *, double *, int64_t, int64_t, int64_t, int64_t, int64_t *, int64_t *, double *, float, float *, double); int lsqlin_sov_ts(int64_t, int64_t, float *, float *, int64_t *, double *, double *, double *, double *, double *, double *, float *, float *, int64_t, int64_t, int64_t, int64_t, double *, int64_t, int64_t, float *, int64_t, float *, int64_t *, double, double *); int write_output_ts(void *, struct GMT_GRID *, int64_t, char **, int64_t, int64_t, int64_t, int64_t, int64_t, float *, float *, float *, float *, float *, double, int64_t, int64_t *); int free_memory_ts(int64_t, float *, float *, char **, char **, float *, double *, double *, double *, int64_t *, double *, double *, int64_t *, float *, float *, double *, int64_t *, float *, float *, double *, int64_t *, int64_t *); int sum_intfs(float *, int64_t *, float *, int64_t, int64_t, int64_t); int connect(int64_t *, int64_t *, double *, int64_t *, int64_t *, int64_t, int64_t, int64_t, int64_t); double compute_noise(float *, int64_t, int64_t); int apply_screen(float *, float *, int64_t, int64_t, int64_t, int64_t *); int remove_ts(float *, float *, int64_t, int64_t, int64_t, int64_t, int64_t *, int64_t *); int rank_double(double *, int64_t *, int64_t); GMTSAR_V5.7/.svn/pristine/28/2832393b367ae52a6236cd371d6a02c4282fbbe4.svn-base000444 015705 000000 00000013740 13505462014 025441 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Modified from ALOS_ldr_orbit.c * The only difference is that ra and rc is *reversed. Do this because it seems * reversed but don't want to mess ALOS up. *So make ENVI one for now * ********************************************************************************/ /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 07/13/08 added SC_height_start and * SC_height_end parameters * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #define FACTOR 1000000 void calc_height_velocity_envi(struct ALOS_ORB *, struct PRM *, double, double, double *, double *, double *, double *, double *); void ENVI_ldr_orbit(struct ALOS_ORB *orb, struct PRM *prm) { double t1, t2; double re, height, vg; double re_c, re_start, re_end, vg_start, vg_end, vtot, rdot; double height_start, height_end; if (verbose) fprintf(stderr, "ALOS_ldr_orbit\n"); t1 = (86400.0) * prm->clock_start + (prm->nrows - prm->num_valid_az) / (2.0 * prm->prf); t2 = t1 + prm->num_patches * prm->num_valid_az / prm->prf; calc_height_velocity_envi(orb, prm, t1, t1, &height_start, &re_start, &vg_start, &vtot, &rdot); calc_height_velocity_envi(orb, prm, t2, t2, &height_end, &re_end, &vg_end, &vtot, &rdot); calc_height_velocity_envi(orb, prm, t1, t2, &height, &re_c, &vg, &vtot, &rdot); // fd_orbit = -2.0*rdot/prm->lambda; if (verbose) { fprintf(stderr, " t1 %lf t1 %lf height_start %lf re_start %lf vg_start%lf\n", t1, t1, height_start, re_start, vg_start); fprintf(stderr, " t1 %lf t2 %lf height %lf re_c %lf vg %lf\n", t1, t2, height, re_c, vg); fprintf(stderr, " t2 %lf t2 %lf height_end %lf re__end %lf vg_end %lf\n", t2, t2, height_end, re_end, vg_end); } prm->vel = vg; /* use the center earth radius unless there is a value from the command line */ re = re_c; if (prm->RE > 0.) re = prm->RE; prm->RE = re; prm->ht = height + re_c - re; prm->ht_start = height_start + re_start - re; prm->ht_end = height_end + re_end - re; /* write it all out */ if (verbose) { fprintf(stdout, "SC_vel = %lf \n", prm->vel); fprintf(stdout, "earth_radius = %lf \n", prm->RE); fprintf(stdout, "SC_height = %lf \n", prm->ht); fprintf(stdout, "SC_height_start = %lf \n", prm->ht_start); fprintf(stdout, "SC_height_end = %lf \n", prm->ht_end); } } /*---------------------------------------------------------------*/ /* from David Sandwell's code */ void calc_height_velocity_envi(struct ALOS_ORB *orb, struct PRM *prm, double t1, double t2, double *height, double *re2, double *vg, double *vtot, double *rdot) { int k, ir, nt, nc = 3; double xe, ye, ze; double xs, ys, zs; double x1, y1, z1; double x2, y2, z2; double vx, vy, vz, vs, rs; double rlat; // double rlatg; double st, ct, arg, re; double a[3], b[3], c[3]; double time[1000], rng[1000], d[3]; double t0, ro, ra, rc, dt; if (verbose) fprintf(stderr, " ... calc_height_velocity_envi\n"); ro = prm->near_range; /* ra and rc seems revsersed, but don't want to change ALOS */ ra = prm->ra; /* ellipsoid parameters */ rc = prm->rc; /* ellipsoid parameters */ dt = 200. / prm->prf; /* nt = (prm->nrows - prm->num_valid_az)/100.; */ nt = 100; /* changed to fixed value for TSX, ENVI */ /* more time stuff */ t0 = (t1 + t2) / 2.0; t1 = t0 - 2.0; t2 = t0 + 2.0; /* interpolate orbit */ /* _slow does memory allocation each time */ interpolate_ALOS_orbit_slow(orb, t0, &xs, &ys, &zs, &ir); interpolate_ALOS_orbit_slow(orb, t1, &x1, &y1, &z1, &ir); interpolate_ALOS_orbit_slow(orb, t2, &x2, &y2, &z2, &ir); rs = sqrt(xs * xs + ys * ys + zs * zs); /* calculate stuff */ vx = (x2 - x1) / 4.0; vy = (y2 - y1) / 4.0; vz = (z2 - z1) / 4.0; vs = sqrt(vx * vx + vy * vy + vz * vz); *vtot = vs; /* set orbit direction */ if (vz > 0) { strcpy(prm->orbdir, "A"); } else { strcpy(prm->orbdir, "D"); } /* geodetic latitude of the satellite */ rlat = asin(zs / rs); // rlatg = atan(tan(rlat)*ra*ra/(rc*rc)); st = sin(rlat); /* changed from rlatg to rlat, not sure which is right */ ct = cos(rlat); arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1. / (sqrt(arg)); *re2 = re; *height = rs - *re2; /*fprintf(stderr,"time %lf xyz %lf %lf %lf geodetic latitude %lf \n",t0, * xs,ys,zs, rlatg/3.14*180);*/ /* compute the vector orthogonal to both the radial vector and velocity vector */ a[0] = xs / rs; a[1] = ys / rs; a[2] = zs / rs; b[0] = vx / vs; b[1] = vy / vs; b[2] = vz / vs; cross3_(a, b, c); /* compute the look angle */ ct = (rs * rs + ro * ro - re * re) / (2. * rs * ro); st = sin(acos(ct)); /* add the satellite and LOS vectors to get the new point */ xe = xs + ro * (-st * c[0] - ct * a[0]); ye = ys + ro * (-st * c[1] - ct * a[1]); ze = zs + ro * (-st * c[2] - ct * a[2]); rlat = asin(ze / re); // rlatg = atan(tan(rlat)*ra*ra/(rc*rc)); /* compute elipse height in the scene */ st = sin(rlat); /* rlatg to rlat */ ct = cos(rlat); arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1. / (sqrt(arg)); /* now check range over time */ for (k = 0; k < nt; k++) { time[k] = dt * (k - nt / 2); t1 = t0 + time[k]; interpolate_ALOS_orbit_slow(orb, t1, &xs, &ys, &zs, &ir); rng[k] = sqrt((xe - xs) * (xe - xs) + (ye - ys) * (ye - ys) + (ze - zs) * (ze - zs)) - ro; } /* fit a second order polynomial to the range versus time function */ polyfit(time, rng, d, &nt, &nc); *rdot = d[1]; *vg = sqrt(ro * 2. * d[2]); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/1a/1af17d72b093959e9834b5217a2e2991fe4a4b3c.svn-base000444 015705 000000 00000007222 13505462013 025533 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_RS2.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # # set the filter wavelength in meters (default is 100m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 80 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 1 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = .18 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/0/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 2 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .18 GMTSAR_V5.7/.svn/pristine/1a/1a9611bc93d729226e755d2998a83a1236423028.svn-base000444 015705 000000 00000005542 13505462013 025153 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 4 2010 # M. Wei MAY 4 2010 - ENVISAT # # Align a slave image to a master image and check results # alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv < 2) then echo "" echo "Usage: align_ALOS2_SCAN.csh master_name slave_name [supermaster_name]" echo "" echo " The supermaster_namestem is required if this is secondary alignment." echo "" echo "Example: align_ALOS2_SCAN.csh IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A " echo "" exit 1 endif # # focus the master if necessary # Do it no matter what for now. Put SLC_file to PRM. Might not be necessary # if(! -f $1.SLC) then ln -s ../../raw/$1.SLC . cp ../../raw/$1.PRM . update_PRM $1.PRM SLC_file $1.SLC endif # # focus the slave image # # check the range sampling rate # set rng_samp_rate_m = `grep rng_samp_rate $1.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate $2.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ($rng_samp_rate_m != $rng_samp_rate_s) then echo "The range sampling rate for master and slave differ" echo "Need to run the interferogram in steps until process2pass.csh is fixed" exit 1 endif echo "align.csh" if(! -f $2.SLC) then ln -s ../../raw/$2.SLC . cp ../../raw/$2.PRM . update_PRM $2.PRM SLC_file $2.SLC endif # # get the starting alignment parameters and run xcorr # cp $1.PRM $1.PRM0 cp $2.PRM $2.PRM0 if($#argv == 3) then set RSHIFT = `SAT_baseline $3.PRM $2.PRM | grep rshift | awk '{print $3}'` set ASHIFT = `SAT_baseline $3.PRM $2.PRM | grep ashift | awk '{print $3}'` # # use the PRF of the supermaster in the surrogate master # set PRF = `grep PRF $3.PRM | awk '{print $3}'` update_PRM $1.PRM PRM $PRF else set RSHIFT = `SAT_baseline $1.PRM $2.PRM | grep rshift | awk '{print $3}'` set ASHIFT = `SAT_baseline $1.PRM $2.PRM | grep ashift | awk '{print $3}'` endif update_PRM $2.PRM rshift $RSHIFT update_PRM $2.PRM ashift $ASHIFT echo "align.csh" echo "correlate master and slave to find offset parameters" xcorr $1.PRM $2.PRM -xsearch 32 -ysearch 256 -nx 32 -ny 128 # mv $2.PRM junk.PRM cp $1.PRM0 $1.PRM grep -v shift < junk.PRM > $2.PRM # # put in the alignment parameters # awk '{print $4}' < freq_xcorr.dat > tmp.dat set amedian = `sort -n tmp.dat | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }'` set amax = `echo $amedian | awk '{print $1+3}'` set amin = `echo $amedian | awk '{print $1-3}'` awk '{if($4 > '$amin' && $4 < '$amax') print $0}' < freq_xcorr.dat > tmp2.dat fitoffset.csh 2 3 tmp2.dat 10 >> $2.PRM mv freq_xcorr.dat xcorr_$1_$2.dat0 # # refocus the second image # echo "resamp slave" resamp $1.PRM $2.PRM $2.PRMresamp $2.SLCresamp 4 rm $2.SLC mv $2.SLCresamp $2.SLC cp $2.PRMresamp $2.PRM # rm junk* #done GMTSAR_V5.7/.svn/pristine/74/74325fffea70cf9ede74657581b8eb754ece0627.svn-base000444 015705 000000 00000000543 13505462013 025726 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for tsx after 4 x 2 decimation so the 0.5 gain % is att 200 km wavelength % clear sigx=6.; sigy=6.; nx=13; ny=13; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_tsx_200m -ascii gauss GMTSAR_V5.7/.svn/pristine/74/74637c5ed94b640cbbd25a9ece13aa0fe0ea3717.svn-base000444 015705 000000 00000014045 13505462013 026023 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Modified from ALOS_ldr_orbit.c * The only difference is that ra and rc is *reversed. Do this because it seems * reversed but don't want to mess ALOS up. *So make ENVI one for now * ********************************************************************************/ /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 07/13/08 added SC_height_start and * SC_height_end parameters * * *****************************************************************************/ #include "gmtsar.h" #include "orbit.h" #define FACTOR 1000000 void calc_height_velocity(struct SAT_ORB *, struct PRM *, double, double, double *, double *, double *, double *, double *); void interpolate_SAT_orbit_slow(struct SAT_ORB *orb, double time, double *, double *, double *, int *); void polyfit(double *, double *, double *, int *, int *); void ldr_orbit(struct SAT_ORB *orb, struct PRM *prm) { double t1, t2; double re, height, vg; double re_c, re_start, re_end, vg_start, vg_end, vtot, rdot; double height_start, height_end; if (verbose) fprintf(stderr, "ldr_orbit\n"); t1 = (86400.0) * prm->clock_start + (prm->nrows - prm->num_valid_az) / (2.0 * prm->prf); t2 = t1 + prm->num_patches * prm->num_valid_az / prm->prf; calc_height_velocity(orb, prm, t1, t1, &height_start, &re_start, &vg_start, &vtot, &rdot); calc_height_velocity(orb, prm, t2, t2, &height_end, &re_end, &vg_end, &vtot, &rdot); calc_height_velocity(orb, prm, t1, t2, &height, &re_c, &vg, &vtot, &rdot); if (verbose) { fprintf(stderr, " t1 %lf t1 %lf height_start %lf re_start %lf vg_start%lf\n", t1, t1, height_start, re_start, vg_start); fprintf(stderr, " t1 %lf t2 %lf height %lf re_c %lf vg %lf\n", t1, t2, height, re_c, vg); fprintf(stderr, " t2 %lf t2 %lf height_end %lf re__end %lf vg_end %lf\n", t2, t2, height_end, re_end, vg_end); } prm->vel = vg; /* use the center earth radius unless there is a value from the command line */ re = re_c; if (prm->RE > 0.) re = prm->RE; prm->RE = re; prm->ht = height + re_c - re; prm->ht_start = height_start + re_start - re; prm->ht_end = height_end + re_end - re; /* write it all out */ if (verbose) { fprintf(stdout, "SC_vel = %lf \n", prm->vel); fprintf(stdout, "earth_radius = %lf \n", prm->RE); fprintf(stdout, "SC_height = %lf \n", prm->ht); fprintf(stdout, "SC_height_start = %lf \n", prm->ht_start); fprintf(stdout, "SC_height_end = %lf \n", prm->ht_end); } } /*---------------------------------------------------------------*/ /* from David Sandwell's code */ void calc_height_velocity(struct SAT_ORB *orb, struct PRM *prm, double t1, double t2, double *height, double *re2, double *vg, double *vtot, double *rdot) { int k, ir, nt, nc = 3; double xe, ye, ze; double xs, ys, zs; double x1, y1, z1; double x2, y2, z2; double vx, vy, vz, vs, rs; double rlat; /* double rlatg; */ double st, ct, arg, re; double a[3], b[3], c[3]; double time[1000], rng[1000], d[3]; double t0, ro, ra, rc, dt; if (verbose) fprintf(stderr, " ... calc_height_velocity\n"); ro = prm->near_range; /* ra and rc seems revsersed, but don't want to change ALOS */ ra = prm->ra; /* ellipsoid parameters */ rc = prm->rc; /* ellipsoid parameters */ dt = 200. / prm->prf; /* nt = (prm->nrows - prm->num_valid_az)/100.; */ nt = 100; /* changed to fixed value for TSX, ENVI */ /* more time stuff */ t0 = (t1 + t2) / 2.0; t1 = t0 - 2.0; t2 = t0 + 2.0; /* interpolate orbit */ /* _slow does memory allocation each time */ interpolate_SAT_orbit_slow(orb, t0, &xs, &ys, &zs, &ir); interpolate_SAT_orbit_slow(orb, t1, &x1, &y1, &z1, &ir); interpolate_SAT_orbit_slow(orb, t2, &x2, &y2, &z2, &ir); rs = sqrt(xs * xs + ys * ys + zs * zs); /* calculate stuff */ vx = (x2 - x1) / 4.0; vy = (y2 - y1) / 4.0; vz = (z2 - z1) / 4.0; vs = sqrt(vx * vx + vy * vy + vz * vz); *vtot = vs; /* set orbit direction */ if (vz > 0) { strcpy(prm->orbdir, "A"); } else { strcpy(prm->orbdir, "D"); } /* geodetic latitude of the satellite */ rlat = asin(zs / rs); /* rlatg = atan(tan(rlat)*ra*ra/(rc*rc)); */ st = sin(rlat); /* changed from rlatg to rlat, not sure which is right */ ct = cos(rlat); arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1. / (sqrt(arg)); *re2 = re; *height = rs - *re2; /*fprintf(stderr,"time %lf xyz %lf %lf %lf geodetic latitude %lf \n",t0, * xs,ys,zs, rlatg/3.14*180);*/ /* compute the vector orthogonal to both the radial vector and velocity vector */ a[0] = xs / rs; a[1] = ys / rs; a[2] = zs / rs; b[0] = vx / vs; b[1] = vy / vs; b[2] = vz / vs; cross3(a, b, c); /* compute the look angle */ ct = (rs * rs + ro * ro - re * re) / (2. * rs * ro); st = sin(acos(ct)); /* add the satellite and LOS vectors to get the new point */ xe = xs + ro * (-st * c[0] - ct * a[0]); ye = ys + ro * (-st * c[1] - ct * a[1]); ze = zs + ro * (-st * c[2] - ct * a[2]); rlat = asin(ze / re); /* rlatg = atan(tan(rlat)*ra*ra/(rc*rc)); */ /* compute elipse height in the scene */ st = sin(rlat); /* rlatg to rlat */ ct = cos(rlat); arg = (ct * ct) / (ra * ra) + (st * st) / (rc * rc); re = 1. / (sqrt(arg)); /* now check range over time */ for (k = 0; k < nt; k++) { time[k] = dt * (k - nt / 2); t1 = t0 + time[k]; interpolate_SAT_orbit_slow(orb, t1, &xs, &ys, &zs, &ir); rng[k] = sqrt((xe - xs) * (xe - xs) + (ye - ys) * (ye - ys) + (ze - zs) * (ze - zs)) - ro; } /* fit a second order polynomial to the range versus time function */ polyfit(time, rng, d, &nt, &nc); *rdot = d[1]; *vg = sqrt(ro * 2. * d[2]); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/80/802d1964e556b047387b6ce78cde110722313337.svn-base000444 015705 000000 00000003202 13505462013 025144 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # D. Sandwell 1/12/07 # M. Wei 1/31/08 # alias rm 'rm -f' unset noclobber if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # # # project an xy file from lon/lat coordinates into range/azimuth coordinates # this version only works with GMT V4.0 and higher # # Input: # trans.dat - file generated by llt_grid2rat (r a topo lon lat) # phase_ll.xyz - an ascii file of phase or anything in longitude/latitude coordinates # # Output: # phase_ra.zyz - an ascii file of phase in radar coordinates # # check for number of arguments # if ($#argv < 3) then echo " " echo "Usage: proj_ll2ra_ascii.csh trans.dat phase_ll.xyz phase_ra.xyz" echo " " echo " trans.dat - file generated by llt_grid2rat (r a topo lon lat)" echo " phase_ll.xyz - an Ascii file of phase or anything in lon/lat-coordinates" echo " phase_ra.xyz - output an Ascii file in radar coordinates" echo " " exit 1 endif # # extract the phase in the r a positions # # make grids of longitude and latitude versus range and azimuth # gmt gmtconvert $1 -o3,4,0 -bi5d -bo3f > llr gmt gmtconvert $1 -o3,4,1 -bi5d -bo3f > lla #awk '{ printf("%f %f %e \n",$4,$5,$1) }' < $1 | gmtconvert -bos3 > llr #awk '{ printf("%f %f %e \n",$4,$5,$2) }' < $1 | gmtconvert -bos3 > lla # gmt surface llr `gmt gmtinfo $2 -I0.01` -bi3f -I0.005 -T.50 -Gllr.grd $V gmt surface lla `gmt gmtinfo $2 -I0.01` -bi3f -I0.005 -T.50 -Glla.grd $V # gmt grdtrack $2 -nl -Gllr.grd > llpr gmt grdtrack llpr -nl -Glla.grd > llpra # # get the range, azimuth, phase columns and grid # awk '{print $4,$5,$3}' < llpra > $3 # # # # clean # rm ll* GMTSAR_V5.7/.svn/pristine/80/80581eb4b6b10fb55d5878dcd32d991b5533cd05.svn-base000444 015705 000000 00000010071 13505462013 025527 0ustar00sandwellwheel000000 000000 /************************************************************************ * soi.h is the include file for the esarp SAR processor. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * * * * 4/23/97- added parameters for orbit calculations: x_target, * * y_target,z_target,baseline,alpha,sc_identity, * * ref_identity,SC_clock_start,SC_clock_stop, * * clock_start,clock_stop * * -DTS * * * * 4/23/97- added parameters: rec_start, rec_stop * * -EJP * * * * 8/28/97- added parameters baseline_start baseline_end * * alpha_start alpha_end * * * * 9/12/97 added clipi2 function to clip to short int * * * * 4/26/06 added nrows, num_lines * ************************************************************************/ #ifndef SOI_H #define SOI_H #include #include #include #include #include #define SOL 299792456.0 #define PI 3.1415926535897932 #define PI2 6.2831853071795864 #define I2MAX1 32767. #define I2SCALE 4.e6 #define TRUE 1 #define FALSE 0 #define RW 0666 #define MULT_FACT 1000.0 #define sgn(A) ((A) >= 0.0 ? 1.0 : -1.0) #define clipi22(A) (((A) > I2MAX1) ? I2MAX1 : (((A) < -I2MAX1) ? -I2MAX1 : A)) #include "sfd_complex.h" char *input_file; char *led_file; char *out_amp_file; char *out_data_file; char *deskew; char *iqflip; char *off_vid; char *srm; char *ref_file; char *orbdir; char *lookdir; int debug_flag; int bytes_per_line; int good_bytes; int first_line; int num_patches; int first_sample; int num_valid_az; int st_rng_bin; int num_rng_bins; int nextend; int nlooks; int xshift; int yshift; int fdc_ystrt; int fdc_strt; /*New parameters 4/23/97 -EJP */ int rec_start; int rec_stop; /* End new parameters 4/23/97 -EJP */ /* New parameters 4/23/97 -DTS */ int SC_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)-Envisat_SLC (7)-TSX (8)-CSK (9)-RS2 (10)-S1A*/ int ref_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)-Envisat_SLC (7)-TSX (8)-CSK (9)-RS2 (10)-S1A*/ double SC_clock_start; /* YYDDD.DDDD */ double SC_clock_stop; /* YYDDD.DDDD */ double icu_start; /* onboard clock counter */ double clock_start; /* DDD.DDDDDDDD clock without year has more precision */ double clock_stop; /* DDD.DDDDDDDD clock without year has more precision */ /* End new parameters 4/23/97 -DTS */ double caltone; double RE; /* Local Earth radius */ double raa; /* ellipsoid semi-major axis - added by RJM */ double rcc; /* ellipsoid semi-minor axis - added by RJM */ double vel1; /* Equivalent SC velocity */ double ht1; /* (SC_radius - RE) center of frame*/ double ht0; /* (SC_radius - RE) start of frame */ double htf; /* (SC_radius - RE) end of frame */ double near_range; double far_range; double prf1; double xmi1; double xmq1; double az_res; double fs; double slope; double pulsedur; double lambda; double rhww; double pctbw; double pctbwaz; double fd1; double fdd1; double fddd1; double sub_int_r; double sub_int_a; double stretch_r; double stretch_a; double a_stretch_r; double a_stretch_a; /* New parameters 8/28/97 -DTS */ double baseline_start; double baseline_center; double baseline_end; double alpha_start; double alpha_center; double alpha_end; /* New parameters 9/25/18 -EXU */ double B_offset_start; double B_offset_center; double B_offset_end; /* End new parameters 8/28/97 -DTS */ double bparaa; /* parallel baseline - added by RJM */ double bperpp; /* perpendicular baseline - added by RJM */ /* New parameters 4/26/06 */ int nrows; int num_lines; /* New parameters 09/18/08 */ double TEC_start; double TEC_end; #endif /* SOI_H */ GMTSAR_V5.7/.svn/pristine/87/872e8c16ce5e80be97ea3dace77dab71ff958d3f.svn-base000444 015705 000000 00000011500 13505462013 026224 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # alias rm 'rm -f' unset noclobber # if ($#argv < 2) then errormessage: echo "" echo "snaphu_interp.csh [GMTSAR] - Unwrap the phase with nearest neighbor interpolating low coherence and blank pixels" echo " " echo "Usage: snaphu_interp.csh correlation_threshold maximum_discontinuity [///]" echo "" echo " correlation is reset to zero when < threshold" echo " maximum_discontinuity enables phase jumps for earthquake ruptures, etc." echo " set maximum_discontinuity = 0 for continuous phase such as interseismic " echo "" echo "Example: snaphu.csh .12 40 1000/3000/24000/27000" echo "" echo "Reference:" echo "Chen C. W. and H. A. Zebker, Network approaches to two-dimensional phase unwrapping: intractability and two new algorithms, Journal of the Optical Society of America A, vol. 17, pp. 401-414 (2000)." echo "Agram, P. S., & Zebker, H. A. (2009). Sparse two-dimensional phase unwrapping using regular-grid methods. IEEE Geoscience and Remote Sensing Letters, 6(2), 327-331." exit 1 endif # if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # prepare the files adding the correlation mask # if ($#argv == 3 ) then gmt grdcut mask.grd -R$3 -Gmask_patch.grd gmt grdcut corr.grd -R$3 -Gcorr_patch.grd gmt grdcut phasefilt.grd -R$3 -Gphase_patch.grd else ln -s mask.grd mask_patch.grd ln -s corr.grd corr_patch.grd ln -s phasefilt.grd phase_patch.grd endif # # create landmask # if (-e landmask_ra.grd) then if ($#argv == 3 ) then gmt grdsample landmask_ra.grd -R$3 `gmt grdinfo -I phase_patch.grd` -Glandmask_ra_patch.grd else gmt grdsample landmask_ra.grd `gmt grdinfo -I phase_patch.grd` -Glandmask_ra_patch.grd endif gmt grdmath phase_patch.grd landmask_ra_patch.grd MUL = phase_patch.grd $V endif # # user defined mask # if (-e mask_def.grd) then if ($#argv == 3 ) then gmt grdcut mask_def.grd -R$3 -Gmask_def_patch.grd else cp mask_def.grd mask_def_patch.grd endif gmt grdmath corr_patch.grd mask_def_patch.grd MUL = corr_patch.grd $V endif # # interpolate, in case there is a big vacant area, do not go too far # gmt grdmath corr_patch.grd $1 GE 0 NAN mask_patch.grd MUL = mask2_patch.grd gmt grdmath corr_patch.grd 0. XOR 1. MIN = corr_patch.grd gmt grdmath mask2_patch.grd corr_patch.grd MUL = corr_tmp.grd gmt grdmath mask2_patch.grd phase_patch.grd MUL = phase_tmp.grd nearest_grid phase_tmp.grd tmp.grd 300 mv tmp.grd phase_tmp.grd gmt grd2xyz phase_tmp.grd -ZTLf -do0 > phase.in gmt grd2xyz corr_tmp.grd -ZTLf -do0 > corr.in # # run snaphu # set sharedir = `gmtsar_sharedir.csh` echo "unwrapping phase with snaphu - higher threshold for faster unwrapping " if ($2 == 0) then snaphu phase.in `gmt grdinfo -C phase_patch.grd | cut -f 10` -f $sharedir/snaphu/config/snaphu.conf.brief -c corr.in -o unwrap.out -v -s else sed "s/.*DEFOMAX_CYCLE.*/DEFOMAX_CYCLE $2/g" $sharedir/snaphu/config/snaphu.conf.brief > snaphu.conf.brief snaphu phase.in `gmt grdinfo -C phase_patch.grd | cut -f 10` -f snaphu.conf.brief -c corr.in -o unwrap.out -v -d endif # # convert to grd # gmt xyz2grd unwrap.out -ZTLf -r `gmt grdinfo -I- phase_patch.grd` `gmt grdinfo -I phase_patch.grd` -Gtmp.grd gmt grdmath tmp.grd mask2_patch.grd MUL = tmp.grd #gmt grdmath tmp.grd mask_patch.grd MUL = tmp.grd # # detrend the unwrapped if DEFOMAX = 0 for interseismic # #if ($2 == 0) then # gmt grdtrend tmp.grd -N3r -Dunwrap.grd #else mv tmp.grd unwrap.grd #endif # # landmask if (-e landmask_ra.grd) then gmt grdmath unwrap.grd landmask_ra_patch.grd MUL = tmp.grd $V mv tmp.grd unwrap.grd endif # # user defined mask # if (-e mask_def.grd) then gmt grdmath unwrap.grd mask_def_patch.grd MUL = tmp.grd $V mv tmp.grd unwrap.grd endif # # plot the unwrapped phase # gmt grdgradient unwrap.grd -Nt.9 -A0. -Gunwrap_grad.grd set tmp = `gmt grdinfo -C -L2 unwrap.grd` set limitU = `echo $tmp | awk '{printf("%5.1f", $12+$13*2)}'` set limitL = `echo $tmp | awk '{printf("%5.1f", $12-$13*2)}'` set std = `echo $tmp | awk '{printf("%5.1f", $13)}'` gmt makecpt -Cseis -I -Z -T"$limitL"/"$limitU"/1 -D > unwrap.cpt set boundR = `gmt grdinfo unwrap.grd -C | awk '{print ($3-$2)/4}'` set boundA = `gmt grdinfo unwrap.grd -C | awk '{print ($5-$4)/4}'` gmt grdimage unwrap.grd -Iunwrap_grad.grd -Cunwrap.cpt -JX6.5i -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > unwrap.ps gmt psscale -Runwrap.grd -J -DJTC+w5/0.2+h+e -Cunwrap.cpt -Bxaf+l"Unwrapped phase" -By+lrad -O >> unwrap.ps gmt psconvert -Tf -P -Z unwrap.ps echo "Unwrapped phase map: unwrap.pdf" # # clean up # rm -f tmp.grd corr_tmp.grd unwrap.out tmp2.grd unwrap_grad.grd phase_tmp.grd rm -f phase.in corr.in mv -f phase_patch.grd phasefilt_interp.grd # # cleanup more # rm -f mask_patch.grd mask3.grd mask3.out rm -f corr_patch.grd corr_cut.grd #rm -f wrap.grd # GMTSAR_V5.7/.svn/pristine/73/7366c62aecf4a139834d58fb9de2a6b8a80f8d53.svn-base000444 015705 000000 00000003442 13505462014 025715 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = envi_slc_decode CSRCS = envi_slc_decode.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../../../gmtsar -I../../S1A_preproc/include -I$(TIFF_INC) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lENVI -L../../S1A_preproc/lib -lxmlC -lm LIB_SRC = epr_api-2.3/src/epr_api.c \ epr_api-2.3/src/epr_band.c \ epr_api-2.3/src/epr_bitmask.c \ epr_api-2.3/src/epr_core.c \ epr_api-2.3/src/epr_dataset.c \ epr_api-2.3/src/epr_dddb.c \ epr_api-2.3/src/epr_dsd.c \ epr_api-2.3/src/epr_dump.c \ epr_api-2.3/src/epr_field.c \ epr_api-2.3/src/epr_msph.c \ epr_api-2.3/src/epr_param.c \ epr_api-2.3/src/epr_product.c \ epr_api-2.3/src/epr_ptrarray.c \ epr_api-2.3/src/epr_record.c \ epr_api-2.3/src/epr_string.c \ epr_api-2.3/src/epr_swap.c \ epr_api-2.3/src/epr_typconv.c all: epr envi_slc_decode envisat_dump_data envisat_dump_header epr: $(LIB_SRC) (cd epr_api-2.3/src/; make) install: $(INSTALL) $(PROG) $(bindir) $(INSTALL) envisat_dump_data $(bindir) $(INSTALL) envisat_dump_header $(bindir) clean: rm -f $(OBJS) envi_slc_decode envisat_dump_data envisat_dump_header tags core (cd epr_api-2.3/src/; make clean) envi_slc_decode: $(CC) $(CFLAGS) $(INCLUDES) $(LFLAGS) \ -o envi_slc_decode \ envi_slc_decode.c \ epr_api-2.3/src/*.o $(CLIBS) envisat_dump_data: $(CC) $(CFLAGS) $(INCLUDES) $(LFLAGS) \ -o envisat_dump_data \ envisat_dump_data.c \ epr_api-2.3/src/*.o $(CLIBS) envisat_dump_header: $(CC) $(CFLAGS) $(INCLUDES) $(LFLAGS) \ -o envisat_dump_header \ envisat_dump_header.c \ epr_api-2.3/src/*.o $(CLIBS) GMTSAR_V5.7/.svn/pristine/73/738d049593f6cf4171360c750aac8968ee0dde69.svn-base000444 015705 000000 00000003027 13505462014 025502 0ustar00sandwellwheel000000 000000 ALOS_preprocessor - August 11, 2008 Rob Mellors - San Diego State University rmellors@geology.sdsu.edu David Sandwell - Scripps Institution of Oceanography dsandwell@ucsd.edu This code is used to preprocess ALOS PALSAR data in L1.0 format. It had been tested with both FBS and FBD mode data at a variety of look angles. The main functions of the code are: 1) ALOS_pre_process - Takes the raw ALOS PALSAR data and aligns the data in the near range. In addition it produces a parameter files in the SIOSAR format containing the essential information needed to focus the data as Single Look Complex (SLC) images. 2) calc_ALOS_baseline - Takes two parameter files of an interferometric pair and calculates the approximate shift parameters needed to align the two images as well as the accurate interferometric baseline at the beginning and end of the frame. 3) ALOS_merge - Appends two raw image files and eliminates duplicate lines. In addition it makes a new PRM file representing the new longer frame. 4) ALOS_fbd2fbs - Converts a raw image file in FBD mode (14 MHz) to an FBS mode (28 MHz) by fourier transformation of each row of the image file (one echo) and padding the spectrum with zeros in the wavenumber domain. A new parameter file is created to reflect the new data spacing and chirp paraneters. A complementary ALOS_fbs2fbd program is also available but not automatically compiled with the makefile. The interferograms made from the FBD2FBS conversion have lower noise than the interferograms made from the FBS2FBD conversion. GMTSAR_V5.7/.svn/pristine/16/16c240fc62c796bf5c0a6371b09cac21f6dbc53a.svn-base000444 015705 000000 00000004646 13505462014 025736 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Load the PRM file and calculate doppler centroid * *******************************************************************************/ #include "image_sio.h" #include "lib_functions.h" void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); void ENVI_ldr_orbit(struct ALOS_ORB *, struct PRM *); int main(int argc, char **argv) { struct PRM *prm; struct ALOS_ORB *orb; FILE *prmfile, *ldrfile, *outfile; double re; if ((argc > 5) || (argc < 4)) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: calc_dop_orb_envi PRM output earth_radius " "[doppler_centroid]\n"); fprintf(stderr, "\n"); return (0); } if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); fprintf(stderr, "Successfully opened %s \n", argv[1]); prm = malloc(sizeof(struct PRM)); /* read earth radius */ re = atof(argv[3]); /* get the PRM parameters */ get_sio_struct(prmfile, prm); /*fprintf(stderr,"%lf", prm->near_range);*/ /* get the orbit data */ ldrfile = fopen(prm->led_file, "r"); if (ldrfile == NULL) die("can't open ", prm->led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ENVI_orb(ldrfile, prm, orb); /* get the orbit parameters */ ENVI_ldr_orbit(orb, prm); /* write it all out */ if ((outfile = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); fprintf(outfile, "SC_vel = %lf \n", prm->vel); if (re == 0) { fprintf(outfile, "earth_radius = %lf \n", prm->RE); fprintf(outfile, "SC_height = %lf \n", prm->ht); fprintf(outfile, "SC_height_start = %lf \n", prm->ht_start); fprintf(outfile, "SC_height_end = %lf \n", prm->ht_end); } else if (re > 0) { fprintf(outfile, "earth_radius = %lf \n", re); fprintf(outfile, "SC_height = %lf \n", prm->ht + prm->RE - re); fprintf(outfile, "SC_height_start = %lf \n", prm->ht_start + prm->RE - re); fprintf(outfile, "SC_height_end = %lf \n", prm->ht_end + prm->RE - re); } else die("Wrong input earth radius", argv[3]); /* Calculate doppler centroid */ if (argc == 4) { calc_dop(prm); fprintf(outfile, "fd1 = %lf\n", prm->fd1); } if (argc == 5) fprintf(outfile, "fd1 = %lf\n", atof(argv[4])); fclose(prmfile); fclose(ldrfile); fclose(outfile); exit(0); } GMTSAR_V5.7/.svn/pristine/16/16c2e96b83975e1ff0d2743051d558cd326e012c.svn-base000444 015705 000000 00000003212 13505462014 025364 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define PLATFORM_RCS "%128c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%48c" #define PLATFORM_RVL(SP) \ (SP)->reserved1, (SP)->num_data_points, (SP)->year_of_data_points, (SP)->month_of_data_points, (SP)->day_of_data_points, \ (SP)->day_of_data_points_in_year, (SP)->sec_of_day_of_data, (SP)->data_points_time_gap, (SP)->ref_coord_sys, \ (SP)->greenwhich_mean_hour_angle, (SP)->a_track_pos_err, (SP)->c_track_pos_err, (SP)->radial_pos_err, (SP)->reserved2 struct platform { char reserved1[128]; char num_data_points[4]; char year_of_data_points[4]; char month_of_data_points[4]; char day_of_data_points[4]; char day_of_data_points_in_year[4]; char sec_of_day_of_data[22]; char data_points_time_gap[22]; char ref_coord_sys[64]; char greenwhich_mean_hour_angle[22]; char a_track_pos_err[16]; char c_track_pos_err[16]; char radial_pos_err[16]; char reserved2[48]; }; #define POSITION_VECTOR_RCS "%22c%22c%22c%22c%22c%22c" #define POSITION_VECTOR_RVL(SP) (SP)->pos_x, (SP)->pos_y, (SP)->pos_z, (SP)->vel_x, (SP)->vel_y, (SP)->vel_z struct position_vector { char pos_x[22]; char pos_y[22]; char pos_z[22]; char vel_x[22]; char vel_y[22]; char vel_z[22]; }; GMTSAR_V5.7/.svn/pristine/7c/7cdf236adb65b3b64cab85a451320485ee3f76f8.svn-base000444 015705 000000 00000006255 13505462013 025763 0ustar00sandwellwheel000000 000000 /* $Id: read_data.c 33 2013-04-06 05:37:15Z pwessel $ */ #include #include #include #include #include "gmtsar.h" #include "xcorr.h" #include "PRM.h" /*-------------------------------------------------------*/ void read_complex_short(FILE *f, int *d, int iy, int jx, int npx, int npy, int nx) { long num_to_seek; int i, j; int ireal, iimag; short *tmp; tmp = malloc(2*nx*sizeof(short)); /* whole line */ num_to_seek = 2*iy*nx*sizeof(short); fseek(f, num_to_seek, SEEK_SET); /* from beginning */ /* need to read two parts of complex numbers - use amplitude */ for (i=0; i #include #include #include int pop_prm_hdf5(struct PRM *, hid_t, char *); int pop_led_hdf5(hid_t, state_vector *); int write_orb(state_vector *sv, FILE *fp, int); int write_raw_hdf5(hid_t, FILE *); int hdf5_read(void *, hid_t, char *, char *, char *, int); void set_prm_defaults(struct PRM *); /*static inline unsigned long long bswap_64(unsigned long long x) { return (((unsigned long long)bswap_32(x&0xffffffffull))<<32) | (bswap_32(x>>32)); }*/ char *USAGE = "\n\nUsage: make_raw_csk name_of_input_file name_output\n" "\nExample: make_raw_csk " "CSKS2_SCS_B_HI_09_HH_RA_SF_20090412050638_20090412050645.h5 CSK_20090412\n" "\nOutput: CSK_20090412.raw CSK_20090412.PRM CSK_20090412.LED\n"; int main(int argc, char **argv) { int MAX_CHAR_SIZE = 60000, MAX_NUM_SIZE = 1000; FILE *OUTPUT_PRM, *OUTPUT_raw, *OUTPUT_LED; char tmp_str[200]; char *buff_c, *buff_o; double *buff_d; int *buff_i; struct PRM prm; // tree *xml_tree; state_vector sv[200]; int n; hid_t file; buff_c = (char *)malloc(MAX_CHAR_SIZE * sizeof(char)); buff_o = (char *)malloc(MAX_CHAR_SIZE * sizeof(char)); buff_d = (double *)malloc(MAX_NUM_SIZE * sizeof(double)); buff_i = (int *)malloc(MAX_NUM_SIZE * sizeof(double)); if (argc < 3) die(USAGE, ""); // generate the xml tree // if ((INPUT_FILE = fopen(argv[1],"r")) == NULL) die("Couldn't open xml file: // \n",argv[1]); if ((file = H5Fopen(argv[1], H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) die("Couldn't open HDF5 file: \n", argv[1]); // initiate the prm null_sio_struct(&prm); // generate the PRM file pop_prm_hdf5(&prm, file, argv[2]); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); // generate the LED file n = pop_led_hdf5(file, sv); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // generate the raw file strcpy(tmp_str, argv[2]); strcat(tmp_str, ".raw"); if ((OUTPUT_raw = fopen(tmp_str, "wb")) == NULL) die("Couldn't open tiff file: \n", tmp_str); write_raw_hdf5(file, OUTPUT_raw); fclose(OUTPUT_raw); H5Fclose(file); } int write_raw_hdf5(hid_t input, FILE *raw) { int width, height; unsigned char *buf; hsize_t dims[10]; hid_t memtype, dset, group; herr_t status; int kk, ntot; double lut[1000], lut_max; for (kk = 0; kk < 1000; kk++) lut[kk] = 0; hdf5_read(lut, input, "/", "", "Analog Cal Reconstruction Levels", 'd'); lut_max = 0; for (kk = 0; kk < 1000; kk++) if (fabs(lut[kk]) > lut_max) lut_max = fabs(lut[kk]); // lut_max = lut_max*1.41421; hdf5_read(dims, input, "/S01", "B001", "", 'n'); height = (int)dims[0]; width = (int)dims[1]; ntot = height * width; buf = (unsigned char *)malloc(height * width * sizeof(unsigned char) * 2); group = H5Gopen(input, "/S01", H5P_DEFAULT); dset = H5Dopen(group, "B001", H5P_DEFAULT); // data come as signed character with zero mean memtype = H5T_STD_U8LE; status = H5Dread(dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf); for (kk = 0; kk < ntot * 2; kk++) buf[kk] = (unsigned char)(127.0 * lut[(int)buf[kk]] / lut_max + 127.0); printf("Writing raw..Image Size: %d X %d...\n", width, height); /* write the data file */ fwrite(buf, sizeof(unsigned char), height * width * 2, raw); free(buf); return (1); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 1e4) / 1e4 - trunc((sv[0].sec) * 1e4) / 1e4; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.3lf %.3lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led_hdf5(hid_t input, state_vector *sv) { int i, count, iy; char tmp_c[200], date[200]; double t[200], t0, t_tmp; unsigned short tmp_i[200]; double x[600], v[600]; hdf5_read(tmp_i, input, "/", "", "Number of State Vectors", 'i'); count = tmp_i[0]; hdf5_read(tmp_c, input, "/", "", "Reference UTC", 'c'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); t0 = str2double(tmp_c); date[4] = '\0'; iy = (int)str2double(date); hdf5_read(t, input, "/", "", "State Vectors Times", 'd'); hdf5_read(x, input, "/", "", "ECEF Satellite Position", 'd'); hdf5_read(v, input, "/", "", "ECEF Satellite Velocity", 'd'); // fprintf(stderr,"%.15f\n",x[3]); for (i = 0; i < count; i++) { t_tmp = t[i] / 86400.0 + t0; sv[i].yr = iy; sv[i].jd = (int)(t_tmp - trunc(t_tmp / 1000.0) * 1000.0); sv[i].sec = (t_tmp - trunc(t_tmp)) * 86400.0; sv[i].x = (double)x[i * 3]; sv[i].y = (double)x[i * 3 + 1]; sv[i].z = (double)x[i * 3 + 2]; sv[i].vx = (double)v[i * 3]; sv[i].vy = (double)v[i * 3 + 1]; sv[i].vz = (double)v[i * 3 + 2]; // fprintf(stderr,"%d %d %.3f %.6f %.6f %.6f %.8f %.8f %.8f // \n",sv[i].yr,sv[i].jd,sv[i].sec,x[i*3],x[i*3+1],x[i*3+2],v[i*3],v[i*3+1],v[i*3+2]); } printf("%d Lines Written for Orbit...\n", count); return (count); } int pop_prm_hdf5(struct PRM *prm, hid_t input, char *file_name) { char tmp_c[200], rec[100], date[100]; double tmp_d[200]; double c_speed = 299792458.0; hsize_t dims[10]; int nrng = 0; set_prm_defaults(prm); /* use many default values */ prm->first_sample = 0; prm->st_rng_bin = 1; prm->SLC_scale = 1.0; prm->az_res = 3.0; prm->xmi = 127.0; /* this is the mean value of one pair. need to do more */ prm->xmq = 127.0; strasign(prm->dtype, "a", 0, 0); prm->SC_identity = 8; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); hdf5_read(tmp_d, input, "/S01", "", "Sampling Rate", 'd'); prm->fs = tmp_d[0]; hdf5_read(tmp_d, input, "/", "", "Radar Wavelength", 'd'); prm->lambda = tmp_d[0]; hdf5_read(tmp_d, input, "/S01", "", "Range Chirp Rate", 'd'); prm->chirp_slope = tmp_d[0]; hdf5_read(tmp_d, input, "/S01", "", "Range Chirp Length", 'd'); prm->pulsedur = tmp_d[0]; hdf5_read(rec, input, "/", "", "Acquisition Mode", 'c'); hdf5_read(tmp_d, input, "/S01", "", "PRF", 'd'); prm->prf = tmp_d[0]; if (strcmp(rec, "SPOTLIGHT") == 0) { hdf5_read(tmp_d, input, "/S01", "SBI", "Line Time Interval", 'd'); prm->prf = 1.0 / tmp_d[0]; } hdf5_read(rec, input, "/", "", "Product Type", 'c'); if (strcmp(rec, "RAW_B") == 0) { // RAW printf("Product Type being RAW...\n"); hdf5_read(tmp_d, input, "/S01", "B001", "Range First Times", 'd'); prm->near_range = tmp_d[0] * c_speed / 2; hdf5_read(tmp_c, input, "/", "", "Scene Sensing Start UTC", 'c'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); prm->clock_start = str2double(tmp_c); date[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(date); } else if (strcmp(rec, "SCS_B") == 0) { // SLC printf("Product Type being SLC...\n"); hdf5_read(tmp_d, input, "/S01", "SBI", "Zero Doppler Range First Time", 'd'); prm->near_range = tmp_d[0] * c_speed / 2; hdf5_read(tmp_c, input, "/", "", "Reference UTC", 'c'); hdf5_read(tmp_d, input, "/S01", "SBI", "Zero Doppler Azimuth First Time", 'd'); cat_nums(date, tmp_c); str_date2JD(tmp_c, date); prm->clock_start = str2double(tmp_c) + tmp_d[0] / 86400.0; date[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(date); prm->fdd1 = 0.0; prm->fddd1 = 0.0; } else { // Unknown type fprintf(stderr, "Product type being nither RAW nor SLC...\n"); return (-1); } hdf5_read(tmp_c, input, "/", "", "Orbit Direction", 'c'); if (strcmp(tmp_c, "ASCENDING") == 0) { strasign(prm->orbdir, "A", 0, 0); } else { strasign(prm->orbdir, "D", 0, 0); } hdf5_read(tmp_c, input, "/", "", "Look Side", 'c'); if (strcmp(tmp_c, "RIGHT") == 0) { strasign(prm->lookdir, "R", 0, 0); } else { strasign(prm->lookdir, "L", 0, 0); } hdf5_read(dims, input, "/S01", "B001", "", 'n'); prm->bytes_per_line = (int)dims[1] * 2; prm->good_bytes = prm->bytes_per_line; prm->num_rng_bins = prm->bytes_per_line / 2; /* pad the near and far range with 1200 samples */ prm->chirp_ext = 2400; nrng = 2 + (int)(prm->num_rng_bins / 1200.); prm->num_rng_bins = 1200 * nrng; prm->num_lines = (int)dims[0] - (int)dims[0] % 4; prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = 8192; prm->num_valid_az = 6400; prm->num_patches = (int)((float)prm->num_lines / prm->num_valid_az + 0.5); printf("PRM set for Image File...\n"); return (1); } int hdf5_read(void *output, hid_t file, char *n_group, char *n_dset, char *n_attr, int c) { hid_t memtype, type, group = -1, dset = -1, attr = -1, tmp_id, space; herr_t status; size_t sdim; int ndims; tmp_id = file; if (strlen(n_group) > 0) { group = H5Gopen(tmp_id, n_group, H5P_DEFAULT); tmp_id = group; } if (strlen(n_dset) > 0) { dset = H5Dopen(tmp_id, n_dset, H5P_DEFAULT); tmp_id = dset; } if (strlen(n_attr) > 0) { attr = H5Aopen(tmp_id, n_attr, H5P_DEFAULT); tmp_id = attr; } if (c == 'c') { memtype = H5Tcopy(H5T_C_S1); type = H5Aget_type(tmp_id); sdim = H5Tget_size(type); sdim++; status = H5Tset_size(memtype, sdim); } else if (c == 'd') { memtype = H5T_NATIVE_DOUBLE; } else if (c == 'i' || c == 'n') { memtype = H5T_NATIVE_INT; } else if (c == 'f') { memtype = H5T_NATIVE_FLOAT; } if (tmp_id == attr) { status = H5Aread(tmp_id, memtype, output); } else if (tmp_id == dset && c == 'n') { space = H5Dget_space(dset); ndims = H5Sget_simple_extent_dims(space, output, NULL); } else { return (-1); } return (1); } GMTSAR_V5.7/.svn/pristine/29/29af8a76c58ed193055d39ce2ee936821bc63f07.svn-base000444 015705 000000 00000000645 13505462014 025562 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_slc_csk CSRCS = make_slc_csk.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar $(HDF5_CPPFLAGS) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC $(HDF5_LDFLAGS) $(HDF5_LIBS) -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/7d/7dd2fcefe17fd0348346de8f141efa3979fe10a7.svn-base000444 015705 000000 00000002155 13505462013 026134 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Xiaopeng Tong Nov 23 2009 # unset noclobber # # Converts a complex SLC file to a real amplitude grd # file using optional filter and a PRM file # # define the filters # set sharedir = `gmtsar_sharedir.csh` set fil1 = $sharedir/filters/gauss5x3 set fil2 = $sharedir/filters/gauss9x5 # # check for number of arguments # if ($#argv != 3 ) then echo "" echo "Usage: slc2amp.csh filein.PRM rng_dec fileout.grd " echo "" echo " rng_dec is range decimation" echo " e.g. 1 for ERS ENVISAT ALOS FBD" echo " 2 for ALOS FBS " echo " 4 for TSX" echo "" echo "Example: slc2amp.csh IMG-HH-ALPSRP055750660-H1.0__A.PRM 2 amp-ALPSRP055750660-H1.0__A.grd" echo "" exit 1 endif # # filter the amplitudes done in conv # check the input and output filename before # if ((($1 =~ *PRM*) || ($1 =~ *prm*)) && ($3 =~ *grd*)) then echo " range decimation is:" $2 conv 4 $2 $fil1 $1 $3 else echo "slc2amp.csh" echo "wrong filename" exit 1 endif # # get the zmin and zmax value # gmt grdmath $3 1 MUL = $3 GMTSAR_V5.7/.svn/pristine/7d/7de7217d1a0cf530271f8775956f0f6d75b77eb4.svn-base000444 015705 000000 00000104626 13505462014 025566 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Anders Hogrelius * * Earth Consultants International, Inc * * Date : 04/17/2017 * * * * Based on make_slc_s1a by Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * Date : 05/17/2010, Anders Hogrelius * * Added range and azimuth bias for ERS-1 and ERS-2 * * * ***************************************************************************/ #include "PRM.h" #include "epr_api-2.3/src/epr_api.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include "tiffio.h" #include #include #include #include #include #include #include #if defined(WIN32) && defined(_DEBUG) #include #endif /* if defined(WIN32) && defined(_DEBUG) */ //#include #include int write_orb(state_vector *sv, FILE *fp, int); int dump_data(EPR_ELogLevel log_level, const char *infile, FILE *outstream, int pixflag, unsigned int l0, unsigned int lN, unsigned int p0, unsigned int pN); char *remove_ext(char *mystr, char dot, char sep); int read_header(EPR_ELogLevel log_level, const char *infile, struct PRM *prm, state_vector *sv, int *n_state_vectors); int monthtonum(char *szMonth); char *USAGE = "\n\nUsage: envi_slc_decode name_of_data_file (*.E1 *.E2 or *.N1) \n" "\nExample: envi_slc_decode " "SAR_IMS_1PNESA19920914_183429_00000018C087_00442_06098_0000.E1 \n" "\nOutput: SAR_IMS_1PNESA19920914_183429_00000018C087_00442_06098_0000.SLC " "SAR_IMS_1PNESA19920914_183429_00000018C087_00442_06098_0000.PRM " "SAR_IMS_1PNESA19920914_183429_00000018C087_00442_06098_0000.LED\n"; int main(int argc, char **argv) { FILE *OUTPUT_PRM, *OUTPUT_SLC, *OUTPUT_LED; char *filename = 0; char tmp_str[200]; struct PRM prm; state_vector sv[200]; int n = 0; /* EPR_LogLevel can be set to e_log_debug, e_log_info, e_log_warning or * e_log_error */ enum EPR_LogLevel eloglevel = e_log_error; if (argc != 2) die(USAGE, ""); // initiate the prm null_sio_struct(&prm); if (read_header(eloglevel, argv[1], &prm, sv, &n) != 0) { die("Couldn't read envisat header in input file: \n", argv[1]); } // generate the PRM file, test to make sure we can write to it by opening the // file strcpy(tmp_str, argv[1]); filename = remove_ext(tmp_str, '.', '/'); strcpy(tmp_str, filename); free(filename); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "wb")) == NULL) { die("Couldn't open prm file: \n", tmp_str); } else { put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); } // generate the LED file, test to make sure we can write to it by opening the // file strcpy(tmp_str, argv[1]); filename = remove_ext(tmp_str, '.', '/'); strcpy(tmp_str, filename); free(filename); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "wb")) == NULL) { die("Couldn't open slc file: \n", tmp_str); } else { write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); } // generate the SLC file, test to make sure we can write to it by opening the // file and closing it for writing with dump data strcpy(tmp_str, argv[1]); filename = remove_ext(tmp_str, '.', '/'); strcpy(tmp_str, filename); free(filename); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLC = fopen(tmp_str, "wb")) == NULL) { die("Couldn't open slc file: \n", tmp_str); } else { dump_data(eloglevel, argv[1], OUTPUT_SLC, 1, 0, 0, 0, 0); fclose(OUTPUT_SLC); } return 0; } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 100.0) / 100.0 - trunc((sv[0].sec) * 100.0) / 100.0; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.6lf %lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.6lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int dump_data(EPR_ELogLevel log_level, const char *infile, FILE *outstream, int pixflag, unsigned int l0, unsigned int lN, unsigned int p0, unsigned int pN) { EPR_SProductId *product_id; EPR_SDatasetId *MAIN_PROC_PM_ID; EPR_SDatasetId *MDS1; EPR_SRecord *rec1 = NULL; EPR_SRecord *rec5 = NULL; EPR_SField numlines_field; EPR_SField numpixels_field; EPR_SField line_field; ulong numlines; ulong numberoflines; ulong numpixels; int cnt; int x, y; /* loop counter go upto 25.000 or so */ short realpart_short; /* written to output file */ short imagpart_short; /* written to output file */ int status; /* Initialize the API. Set log-level to DEBUG and use default log-output * (stdout) */ epr_init_api(log_level, epr_log_message, NULL); /* Open the product; an argument is a path to product data file */ /* PRODUCT dataset record field element */ product_id = epr_open_product(infile); /* product DATASET record field element */ MAIN_PROC_PM_ID = epr_get_dataset_id(product_id, "MAIN_PROCESSING_PARAMS_ADS"); MDS1 = epr_get_dataset_id(product_id, "MDS1"); /* product dataset RECORD field element */ rec1 = epr_read_record(MAIN_PROC_PM_ID, 0, NULL); /* product dataset record FIELD element */ numlines_field = *(epr_get_field(rec1, "num_output_lines")); numpixels_field = *(epr_get_field(rec1, "num_samples_per_line")); /* epr_free_record(rec1); */ epr_print_field(&numlines_field, stdout); epr_print_field(&numpixels_field, stdout); numlines = epr_get_field_elem_as_uint(&numlines_field, 0); numpixels = epr_get_field_elem_as_uint(&numpixels_field, 0); if (pixflag) { l0 = 1; lN = numlines; p0 = 1; pN = numpixels; } /* loop over data record to get data and dump it to file */ numberoflines = epr_get_num_records(MDS1); if (log_level == e_log_debug) { printf("numberoflines: %f\n", (float)numberoflines); printf("numlines: %f\n", (float)numlines); printf("numpixels: %f\n", (float)numpixels); printf("l0: %f\n", (float)l0); printf("lN: %f\n", (float)lN); printf("p0: %f\n", (float)p0); printf("pN: %f\n", (float)pN); } /* check if number of records indeed equals the number of lines */ if (numberoflines != numlines) { printf("numlines not equal in check, ASAR format error?."); return 1; } /* --- Check if input as acceptable ---------------------------- */ if (l0 < 1) { printf("l0<1 not allowed. first line is 1 not 0.\n"); return 1; } if (p0 < 1) { printf("p0<1 not allowed. first line is 1 not 0.\n"); return 1; } if (lN > numlines) { printf("lN>numlines not allowed.\n"); return 1; } if (pN > numpixels) { printf("pN>numpixels not allowed.\n"); return 1; } /* --- read in whole line of cpx data -------------------------- */ for (y = l0; y <= lN; y++) { rec5 = epr_read_record(MDS1, y - 1, NULL); line_field = *(epr_get_field(rec5, "proc_data")); cnt = 2 * (p0 - 1); /* p0 starts at 1 for first element (BUGFIX!) */ /* write out selected pixels */ for (x = p0; x <= pN; x++) { realpart_short = epr_get_field_elem_as_short(&line_field, cnt); cnt++; imagpart_short = epr_get_field_elem_as_short(&line_field, cnt); cnt++; status = fwrite(&realpart_short, 2, 1, outstream); if (status != 1 && log_level == e_log_debug) fprintf(stderr, "fwrite could not write to disk?"); status = fwrite(&imagpart_short, 2, 1, outstream); if (status != 1 && log_level == e_log_debug) fprintf(stderr, "fwrite could not write to disk?"); } /* this program seemed to fill all memory for some reason? try to free it */ epr_free_record(rec5); } // below it's closing the file twice, may cause bug on Linux // fclose(outstream); epr_close_product(product_id); /* Closes product reader API, release all allocated resources */ epr_close_api(); return 0; } // remove_ext: removes the "extension" from a file spec. // mystr is the string to process. // dot is the extension separator. // sep is the path separator (0 means to ignore). // Returns an allocated string identical to the original but // with the extension removed. It must be freed when you're // finished with it. // If you pass in NULL or the new string can't be allocated, // it returns NULL. char *remove_ext(char *mystr, char dot, char sep) { char *retstr, *lastdot, *lastsep; // Error checks and allocate string. if (mystr == NULL) return NULL; if ((retstr = malloc(strlen(mystr) + 1)) == NULL) return NULL; // Make a copy and find the relevant characters. strcpy(retstr, mystr); lastdot = strrchr(retstr, dot); lastsep = (sep == 0) ? NULL : strrchr(retstr, sep); // If it has an extension separator. if (lastdot != NULL) { // and it's before the extenstion separator. if (lastsep != NULL) { if (lastsep < lastdot) { // then remove it. *lastdot = '\0'; } } else { // Has extension separator with no path separator. *lastdot = '\0'; } } // Return the modified string. return retstr; } int read_header(EPR_ELogLevel log_level, const char *infile, struct PRM *prm, state_vector *sv, int *n_state_vectors) { EPR_SProductId *product_id; EPR_SDatasetId *MDS1_SQ_ADS; EPR_SDatasetId *MAIN_PROC_PM_ID; EPR_SDatasetId *DOP_CENTROID_COEFFS_ADS; EPR_SDatasetId *CHIRP_PARAMS_ADS; EPR_SDatasetId *GEOLOCATION_GRID_ADS; EPR_SRecord *mph; EPR_SRecord *sph; EPR_SRecord *rec0 = NULL; EPR_SRecord *rec1 = NULL; EPR_SRecord *rec2 = NULL; EPR_SRecord *rec3 = NULL; EPR_SRecord *rec4 = NULL; // EPR_SField* azitime0_field; EPR_EErrCode err_code = e_err_none; int status; char tmp_c[200]; char filename[200]; double rbias = 0.; double tbias = 0.; int tmp_i; double c_speed = 299792458.0; char *tmp_string; EPR_SField num_looks_range_field; uint num_looks_range = 0; EPR_SField range_samp_rate_field; double range_samp_rate; EPR_SField product_field; const char *product_name; int SC_identity = 0; const char dot = '.'; char *Str_SC_identity; EPR_SField radar_freq_field; double radar_freq; EPR_SField pulse_length_field; double pulse_length; EPR_SField look_bandwidth_field; double look_bandwidth; EPR_SField output_mean_field; double output_mean_i; double output_mean_q; EPR_SField line_time_interval_field; double line_time_interval; EPR_SField slant_range_time_field; double slant_range_time_ns; double slant_range_time_s; double near_range; EPR_SField geogrid_slant_range_time_field1; EPR_SField geogrid_slant_range_time_field2; double geogrid_slant_range_time1_ns; double geogrid_slant_range_time2_ns; EPR_SField pass_field; const char *pass; char orbdir[1]; EPR_SField start_time_field; const char *start_time; char s_name[200]; char s_out[200]; char year[5]; char month[4]; char day[3]; EPR_SField stop_time_field; const char *stop_time; EPR_SField num_samples_per_line_field; int num_samples_per_line; EPR_SField num_output_lines_field; int num_output_lines; EPR_SField orbit_state_vector_time_field; EPR_SField orbit_state_vector_value_field; char orbit_state_vector_time_field_name[50]; char orbit_state_vector_value_field_name[50]; const EPR_STime *orbit_state_vector_time_value; int year_for_state_vectors; int day_for_state_vectors; EPR_SField zero_doppler_time_field; const EPR_STime *zero_doppler_time_mjd; EPR_SField attach_flag_field; int attach_flag_value; EPR_SField dop_coef_field; double dop_coef_value_D0; double dop_coef_value_D1; double dop_coef_value_D2; double dop_coef_value_D3; double dop_coef_value_D4; EPR_SField dop_conf_field; double dop_conf_value; EPR_SField dop_thresh_flag_field; int dop_thresh_flag_value; int q; double dr; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; strasign(prm->dtype, "a", 0, 0); // Routine to save the filename without extension in the variable filename strcpy(filename, infile); tmp_string = remove_ext(filename, '.', '/'); strcpy(filename, tmp_string); free(tmp_string); /* Initialize the API. Set log-level and use default log-output (stdout) */ /* How to set error logging without exiting? */ /*status = epr_init_api(e_log_debug, epr_log_message, epr_log_message);*/ status = epr_init_api(log_level, epr_log_message, NULL); if (status != 0) { printf("read_header: fatal error in epr_init_api\n"); printf("exiting.\n"); return 1; }; /* Open the product; an argument is a path to product data file */ /* PRODUCT dataset record field element */ if (log_level == e_log_debug) { printf("\nOpening product.\n"); printf("-------------------------------------------------\n"); } product_id = epr_open_product(infile); err_code = epr_get_last_err_code(); if (err_code != e_err_none) { printf("read_header: fatal error in epr_open_product\n"); printf("exiting.\n"); return 1; } /* Read fields that I want */ /* product DATASET record field element */ /* --- MAIN PRODUCT HEADER ---------------------------------------- */ if (log_level == e_log_debug) { printf("\nTrying to read record: MPH\n"); printf("-------------------------------------------------\n"); } mph = epr_get_mph(product_id); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(mph, stdout); } else { printf("read_header: likely fatal error in epr_get_mph\n"); epr_clear_err(); printf("exiting.\n"); return 1; } /* --- SECOND PRODUCT HEADER -------------------------------------- */ if (log_level == e_log_debug) { printf("\nTrying to read record: SPH\n"); printf("-------------------------------------------------\n"); } sph = epr_get_sph(product_id); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(sph, stdout); } else { printf("read_header: likely fatal error in epr_get_sph\n"); epr_clear_err(); printf("exiting.\n"); return 1; } /* dsd = epr_get_dsd(product_id); */ /* epr_print_record(dsd, stdout);*/ /* --- MDS1_SQ_ADS ------------------------------------------------ */ if (log_level == e_log_debug) { printf("\nTrying to read record: MDS1_SQ_ADS\n"); printf("-------------------------------------------------\n"); } MDS1_SQ_ADS = epr_get_dataset_id(product_id, "MDS1_SQ_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec0 = epr_read_record(MDS1_SQ_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(rec0, stdout); } else { printf("read_header: non-fatal error in epr_read_record MDS1_SQ_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("read_header: error in epr_get_dataset_id MDS1_SQ_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- MAIN_PROC_PM_ID -------------------------------------------- */ if (log_level == e_log_debug) { printf("\nTrying to read record: MAIN_PROCESSING_PARAMS_ADS\n"); printf("-------------------------------------------------\n"); } MAIN_PROC_PM_ID = epr_get_dataset_id(product_id, "MAIN_PROCESSING_PARAMS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec1 = epr_read_record(MAIN_PROC_PM_ID, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(rec1, stdout); } else { printf("read_header: error in epr_read_record MAIN_PROCESSING_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("read_header: error in epr_get_dataset_id " "MAIN_PROCESSING_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- DOP_CENTROID_COEFFS_ADS ------------------------------------ */ if (log_level == e_log_debug) { printf("\nTrying to read record: DOP_CENTROID_COEFFS_ADS\n"); printf("-------------------------------------------------\n"); } DOP_CENTROID_COEFFS_ADS = epr_get_dataset_id(product_id, "DOP_CENTROID_COEFFS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec2 = epr_read_record(DOP_CENTROID_COEFFS_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(rec2, stdout); } else { printf("read_header: error in epr_read_record DOP_CENTROID_COEFFS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("read_header: error in epr_get_dataset_id DOP_CENTROID_COEFFS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- CHIRP_PARAMS_ADS ------------------------------------------- */ if (log_level == e_log_debug) { printf("\nTrying to read record: CHIRP_PARAMS_ADS\n"); printf("-------------------------------------------------\n"); } /* it seems ESRIN does not include this. For now do not read it at all Problems with BAM data, report Z.Perksi #%// Bert Kampes, 12-May-2004 */ CHIRP_PARAMS_ADS = epr_get_dataset_id(product_id, "CHIRP_PARAMS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec3 = epr_read_record(CHIRP_PARAMS_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(rec3, stdout); } else { printf("read_header: error in epr_read_record CHIRP_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("read_header: error in epr_get_dataset_id CHIRP_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- GEOLOCATION_GRID_ADS --------------------------------------- */ if (log_level == e_log_debug) { printf("\nTrying to read record: GEOLOCATION_GRID_ADS\n"); printf("-------------------------------------------------\n"); } GEOLOCATION_GRID_ADS = epr_get_dataset_id(product_id, "GEOLOCATION_GRID_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec4 = epr_read_record(GEOLOCATION_GRID_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { if (log_level == e_log_debug) epr_print_record(rec4, stdout); } else { printf("read_header: error in epr_read_record GEOLOCATION_GRID_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("read_header: error in epr_get_dataset_id GEOLOCATION_GRID_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* product dataset record FIELD element */ /* azitime0_field = epr_get_field(rec1, "first_zero_doppler_time"); epr_print_field(azitime0_field, stdout); */ /*Set all values in the prm struct */ num_looks_range_field = *(epr_get_field(rec1, "num_looks_range")); num_looks_range = epr_get_field_elem_as_uint(&num_looks_range_field, 0); prm->nlooks = num_looks_range; // nlooks range_samp_rate = 0.0; range_samp_rate_field = *(epr_get_field(rec1, "range_samp_rate")); range_samp_rate = epr_get_field_elem_as_double(&range_samp_rate_field, 0); prm->fs = range_samp_rate; // rng_samp_rate product_field = *(epr_get_field(mph, "PRODUCT")); product_name = epr_get_field_elem_as_str(&product_field); Str_SC_identity = strrchr(product_name, dot); // Returns the last part of the original file // name for identification of the platform // printf("Str_SC_identity %s\n",Str_SC_identity); if (strcasecmp(Str_SC_identity, ".N1") == 0) { SC_identity = 6; } else if (strcasecmp(Str_SC_identity, ".E1") == 0) { SC_identity = 1; } else if (strcasecmp(Str_SC_identity, ".E2") == 0) { SC_identity = 2; } else { SC_identity = 0; } prm->SC_identity = SC_identity; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)-Envisat_SLC (7)-TSX (8)-CSK (9)-RS2 (10)-Sentinel-1a*/ radar_freq = 0.0; radar_freq_field = *(epr_get_field(rec1, "radar_freq")); radar_freq = epr_get_field_elem_as_double(&radar_freq_field, 0); prm->lambda = c_speed / radar_freq; // radar_wavelength pulse_length = 0.0; pulse_length_field = *(epr_get_field(rec1, "image_parameters.tx_pulse_len_value")); pulse_length = epr_get_field_elem_as_double(&pulse_length_field, 0); // printf("pulse_length %f\n",pulse_length); look_bandwidth = 0.0; look_bandwidth_field = *(epr_get_field(rec1, "bandwidth.look_bw_range")); look_bandwidth = epr_get_field_elem_as_double(&look_bandwidth_field, 0); // printf("look_bandwidth %f\n",look_bandwidth); prm->chirp_slope = look_bandwidth / pulse_length; prm->pulsedur = pulse_length; output_mean_i = 0.0; output_mean_q = 0.0; output_mean_field = *(epr_get_field(rec0, "output_mean")); output_mean_i = epr_get_field_elem_as_double(&output_mean_field, 0); output_mean_q = epr_get_field_elem_as_double(&output_mean_field, 1); // printf("output_mean_i %f\noutput_mean_q %f\n",output_mean_i,output_mean_q); prm->xmi = output_mean_i; // I_mean prm->xmq = output_mean_q; // Q_mean line_time_interval = 0.0; line_time_interval_field = *(epr_get_field(rec1, "line_time_interval")); line_time_interval = epr_get_field_elem_as_double(&line_time_interval_field, 0); prm->prf = 1 / line_time_interval; // Pulse Repetition Frequency slant_range_time_ns = 0.0; slant_range_time_s = 0.0; near_range = 0.0; // slant_range_time_field = *(epr_get_field(rec2, "slant_range_time")); // slant_range_time_ns = // epr_get_field_elem_as_double(&slant_range_time_field, 0); geogrid_slant_range_time_field1 = *(epr_get_field(rec4, "first_line_tie_points.slant_range_times")); geogrid_slant_range_time_field2 = *(epr_get_field(rec4, "last_line_tie_points.slant_range_times")); geogrid_slant_range_time1_ns = epr_get_field_elem_as_double(&geogrid_slant_range_time_field1, 0); geogrid_slant_range_time2_ns = epr_get_field_elem_as_double(&geogrid_slant_range_time_field2, 0); slant_range_time_ns = (geogrid_slant_range_time1_ns + geogrid_slant_range_time2_ns) / 2; slant_range_time_s = slant_range_time_ns * 0.000000001; near_range = slant_range_time_s * c_speed / 2; /* convert to pixel space */ dr = 0.5 * c_speed / prm->fs; /* make a bias correction the range for ENVI and ERS*/ if (SC_identity == 1) { rbias = -10.52 * dr; } else if (SC_identity == 2) { rbias = -5.3 * dr; } else if (SC_identity == 6) { rbias = -0.8 * dr; } else { printf(" SC_identity out of range "); } prm->near_range = near_range + rbias; // near_range /* Read Doppler Processing Parameters */ /* Zero Doppler azimuth time at which estimate applies */ zero_doppler_time_field = *(epr_get_field(rec2, "zero_doppler_time")); zero_doppler_time_mjd = epr_get_field_elem_as_mjd(&zero_doppler_time_field); /* Attachment Flag (always set to zero for this ADSR */ attach_flag_field = *(epr_get_field(rec2, "attach_flag")); attach_flag_value = epr_get_field_elem_as_double(&attach_flag_field, 0); /* 2-way slant range time origin (t0) */ slant_range_time_ns = 0; slant_range_time_field = *(epr_get_field(rec2, "slant_range_time")); slant_range_time_ns = epr_get_field_elem_as_double(&slant_range_time_field, 0); /* Doppler centroid coefficients as a function of slant range time: D0, D1, * D2, D3, and D4. */ dop_coef_field = *(epr_get_field(rec2, "dop_coef")); dop_coef_value_D0 = epr_get_field_elem_as_double(&dop_coef_field, 0); dop_coef_value_D1 = epr_get_field_elem_as_double(&dop_coef_field, 1); dop_coef_value_D2 = epr_get_field_elem_as_double(&dop_coef_field, 2); dop_coef_value_D3 = epr_get_field_elem_as_double(&dop_coef_field, 3); dop_coef_value_D4 = epr_get_field_elem_as_double(&dop_coef_field, 4); /* Doppler Centroid Confidence Measure */ dop_conf_field = *(epr_get_field(rec2, "dop_conf")); dop_conf_value = epr_get_field_elem_as_double(&dop_conf_field, 0); /* Doppler Confidence Below Threshold Flag */ dop_thresh_flag_field = *(epr_get_field(rec2, "dop_thresh_flag")); dop_thresh_flag_value = epr_get_field_elem_as_double(&dop_thresh_flag_field, 0); /* printf("\nINFO:\nDoppler Centroid Coefficients ADSR\n"); printf("Zero Doppler azimuth time at which estimate applies: d=%d (days), j=%d (seconds), m=%d (microseconds)\n",zero_doppler_time_mjd->days,zero_doppler_time_mjd->seconds,zero_doppler_time_mjd->microseconds); printf("Attachment Flag (always set to zero for this ADSR): %d\n",attach_flag_value); printf("2-way slant range time origin (t0): %f (ns)\n",slant_range_time_ns); printf("Doppler centroid coefficients as a function of slant range time, D0, D1, D2, D3, and D4: D0=%f (Hz), D1=%f (Hz/s), D2=%f (Hz/s2), D3=%f (Hz/s3), D4=%f (Hz/s4)\n",dop_coef_value_D0,dop_coef_value_D1,dop_coef_value_D2,dop_coef_value_D3,dop_coef_value_D4); printf("Doppler Centroid Confidence Measure: %f\n",dop_conf_value); printf("Value between 0 and 1, 0 = poorest confidence, 1= highest confidence\n"); printf("If multiple Doppler Centroid estimates were performed, this value is the lowest confidence value attained.\n"); printf("Doppler Confidence Below Threshold Flag: %d\n",dop_thresh_flag_value); printf("0 = confidence above threshold, Doppler Centroid calculated from data\n"); printf("1 = confidence below threshold, Doppler Centroid calculated from orbit parameters\n"); printf("\n"); */ /* Set fd1 to the value of D0 for now and make the assumption that it is close * enough, we'll make the precise calculations later */ /* David noted that this value is about twice of what it is supposed to be, * divide by 2 for now */ // prm->fd1 = dop_coef_value_D0/2; prm->fd1 = 0; /* End Read Doppler Processing Parameters */ prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius pass_field = *(epr_get_field(sph, "PASS")); pass = epr_get_field_elem_as_str(&pass_field); strncpy(orbdir, pass, 1); strasign(prm->orbdir, orbdir, 0, 0); // orbdir strasign(prm->lookdir, "R", 0, 0); strcpy(tmp_c, filename); strcat(tmp_c, ".SLC"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, filename); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, filename); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; start_time_field = *(epr_get_field(sph, "FIRST_LINE_TIME")); start_time = epr_get_field_elem_as_str(&start_time_field); strcpy(tmp_c, start_time); for (q = 0; q < strlen(tmp_c); q++) { if (tmp_c[q] == ' ') tmp_c[q] = 'T'; } /* Ugly routine to convert the date format to be the same as in Sentinel-1 * data */ year[4] = '\0'; month[3] = '\0'; day[2] = '\0'; strncpy(year, &tmp_c[7], 4); strncpy(month, &tmp_c[3], 3); strncpy(day, &tmp_c[0], 2); // Convert month to number if (monthtonum(month) < 10) sprintf(tmp_c, "%s-0%d-%s%s", year, monthtonum(month), day, &tmp_c[11]); else sprintf(tmp_c, "%s-%d-%s%s", year, monthtonum(month), day, &tmp_c[11]); cat_nums(s_name, tmp_c); str_date2JD(s_out, s_name); /* make a time bias correction for ENVI and ERS*/ if (SC_identity == 1) { tbias = 19.2501 / prm->prf / 86400.; } else if (SC_identity == 2) { tbias = 0.; } else if (SC_identity == 6) { tbias = -4.25 / prm->prf / 86400.; } else { printf(" SC_identity out of range "); } prm->clock_start = atof(s_out) + 1 + tbias; tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * atof(tmp_c); stop_time_field = *(epr_get_field(sph, "LAST_LINE_TIME")); stop_time = epr_get_field_elem_as_str(&stop_time_field); strcpy(tmp_c, stop_time); for (int q = 0; q < strlen(tmp_c); q++) { if (tmp_c[q] == ' ') tmp_c[q] = 'T'; } /* Ugly routine to convert the date format to be the same as in Sentinel-1 * data */ year[4] = '\0'; month[3] = '\0'; day[2] = '\0'; strncpy(year, &tmp_c[7], 4); strncpy(month, &tmp_c[3], 3); strncpy(day, &tmp_c[0], 2); // Save year and day for use in state vectors year_for_state_vectors = str2double(year); // Convert month to number if (monthtonum(month) < 10) sprintf(tmp_c, "%s-0%d-%s%s", year, monthtonum(month), day, &tmp_c[11]); else sprintf(tmp_c, "%s-%d-%s%s", year, monthtonum(month), day, &tmp_c[11]); cat_nums(s_name, tmp_c); str_date2JD(s_out, s_name); // Save day for use in state vectors day_for_state_vectors = atof(s_out) + 1; // Why doesn't str2double work here? prm->clock_stop = atof(s_out) + 1; tmp_c[4] = '\0'; prm->SC_clock_stop = prm->clock_stop + 1000. * atof(tmp_c); strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); num_samples_per_line = 0.0; tmp_i = 0; num_samples_per_line_field = *(epr_get_field(rec1, "num_samples_per_line")); num_samples_per_line = (int)epr_get_field_elem_as_double(&num_samples_per_line_field, 0); /* This does not work with ERS/ENVISAT data tmp_i = num_samples_per_line - num_samples_per_line%4; */ tmp_i = num_samples_per_line; prm->bytes_per_line = tmp_i * 4; prm->good_bytes = prm->bytes_per_line; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig prm->az_res = 0.0; // prm.antenna_side = -1; prm->fdd1 = 0.0; prm->fddd1 = 0.0; num_output_lines = 0.0; num_output_lines_field = *(epr_get_field(rec1, "num_output_lines")); num_output_lines = (int)epr_get_field_elem_as_double(&num_output_lines_field, 0); tmp_i = 0; tmp_i = num_output_lines % 4; prm->num_lines = num_output_lines - tmp_i; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->num_rng_bins = prm->bytes_per_line / 4; prm->chirp_ext = 0; printf("PRM set for Image File...\n"); // Read orbit state vectors, there should always be five of them for (int n_orbit_state_vector = 1; n_orbit_state_vector < 6; n_orbit_state_vector++) { // Time values sprintf(orbit_state_vector_time_field_name, "orbit_state_vectors.%d.state_vect_time_1", n_orbit_state_vector); orbit_state_vector_time_field = *(epr_get_field(rec1, orbit_state_vector_time_field_name)); orbit_state_vector_time_value = epr_get_field_elem_as_mjd(&orbit_state_vector_time_field); sv[n_orbit_state_vector - 1].yr = year_for_state_vectors; sv[n_orbit_state_vector - 1].jd = day_for_state_vectors; sv[n_orbit_state_vector - 1].sec = orbit_state_vector_time_value->seconds; // x pos sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.x_pos_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].x = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100; // y pos sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.y_pos_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].y = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100; // z pos sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.z_pos_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].z = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100; // x vel sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.x_vel_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].vx = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100000; // y vel sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.y_vel_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].vy = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100000; // z vel sprintf(orbit_state_vector_value_field_name, "orbit_state_vectors.%d.z_vel_1", n_orbit_state_vector); orbit_state_vector_value_field = *(epr_get_field(rec1, orbit_state_vector_value_field_name)); sv[n_orbit_state_vector - 1].vz = (int)epr_get_field_elem_as_double(&orbit_state_vector_value_field, 0) / 100000; *n_state_vectors = n_orbit_state_vector; } printf("LED set for Image File...\n"); /* Close product_id and release rest of the allocated memory */ printf("\n"); epr_close_product(product_id); /* Closes product reader API, release all allocated resources */ epr_close_api(); return 0; } // Converts month to number 1 - 12 int monthtonum(char *szMonth) { const char *months[12] = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"}; int nMonth = 0; int i; for (i = 0; i < 12; ++i) { if (strncasecmp(szMonth, months[i], 3) == 0) nMonth = i + 1; } return nMonth; } GMTSAR_V5.7/.svn/pristine/11/1185fed2c9952e881e19888312162a87ddbe3e8b.svn-base000444 015705 000000 00000000565 13505462014 025477 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ENVI_llt2rat CSRCS = ENVI_llt2rat.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../../ALOS_preproc/include CLIBS = -L../../ALOS_preproc/lib -lALOS -L../lib -lENVI -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/11/11eb6331d6eefb228c60fc92881e1308ef7415cd.svn-base000444 015705 000000 00000011231 13505462014 025576 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # D. Sandwell and R. Mellors 09/09/97 # # script to read dpaf tapes, create a PRM header and run fixline # the end results are two files that can be processed using easrp # # 3760_2907.PRM - parameter file used in SAR processor # 3760_2907.fix - fixed raw SAR data for sar processing # # 4/26/06 Meng - grep num_lines from dataheader.log # - Added doppler estimation part at the end # 12/27/10 Matt - combine DPAF and CCRS # # Modified by Xiaopeng Tong, 01/23/2011 # # if ($#argv < 4) then echo "" echo " Usage: ERS_pre_process [Doppler]" echo "" echo " name_stem - filename of the .dat and .ldr file" echo " near_range - near range (in meters) of the SAR image (put 0 if use default value)" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo " num_patch - number of patches (put 0 if use default value)" echo " Doppler - Doppler value (blank if use default value)" echo "" echo " Example: " echo " command line: ERS_pre_process ERS2_356_2925_61332 978992.922 6378000 5" echo " will preprocess ERS2 SAR data 'ERS2_356_2925_61332' " echo " then output parameter file 'ERS2_356_2925_61332.PRM' and fixed raw data file 'ERS2_356_2925_61332.raw' and LED file ERS2_356_2925_61332.LED" echo " with near range close to 978992.922 meters and earth radius 6378000 meters and 5 patches" echo "" exit 1 endif # # 0) start with a virgin header # cp $ERSPRE/scripts/virgin.PRM $1.PRM echo " " echo "=========================" echo "Start pre-process $1" # # make sure the dat and ldr files exists # if(! -f $1.dat ) then echo "" echo "error - raw file does not have correct .dat suffix" echo "" exit 1 endif if(! -f $1.ldr ) then echo "" echo "error - leader file does not have correct .ldr suffix" echo "" exit 1 endif # # 1) determine if ERS1 or ERS2 and DPAF or CCRS # set FMT1 = `grep ERS1 $1.ldr | awk '{print $4}'` set FMT2 = `grep ERS2 $1.ldr | awk '{print $4}'` set FMT3 = `grep ERS-1 $1.ldr | awk '{print $4}'` set FMT4 = `grep ERS-2 $1.ldr | awk '{print $4}'` if ( ($FMT1 == "matches") || ($FMT3 == "matches")) then echo "SC_identity = 1 " >> $1.PRM else if (($FMT2 == "matches") || ($FMT4 == "matches")) then echo "SC_identity = 2 " >> $1.PRM else echo "Wrong format of the ldr file !" exit 0 endif if ( ($FMT1 == "matches") || ($FMT2 == "matches")) then echo "Format = DPAF" set ERSFMT = "DPAF" read_sarleader_dpaf $1.ldr >> $1.PRM else if (($FMT3 == "matches") || ($FMT4 == "matches")) then echo "Format = CCRS" set ERSFMT = "CCRS" else echo "Wrong format of the ldr file !" exit 0 endif # # 2) add info provided by user # echo "input_file = $1.raw" >> $1.PRM # # 3) run ers_line_fixer # rm -f $1.raw if($2 != 0) then echo "now using user defined near range = $2" if ($ERSFMT == "DPAF") then ers_line_fixer -a $2 -s DPAF/ESRIN $1.dat $1.raw > $1fix.log else if ($ERSFMT == "CCRS") then ers_line_fixer -a $2 -s CCRS $1.dat $1.raw > $1fix.log endif else echo "now using default value from the first line" if ($ERSFMT == "DPAF") then ers_line_fixer -s DPAF/ESRIN $1.dat $1.raw > $1fix.log else if ($ERSFMT == "CCRS") then ers_line_fixer -s CCRS $1.dat $1.raw > $1fix.log endif endif # # get near_range from ers_line_fixer # grep near_range $1fix.log >> $1.PRM # # 4) read and interpret the fixed data file to get more # parameters. if ($ERSFMT == "DPAF") then read_data_file_dpaf $1.raw >> $1.PRM else if ($ERSFMT == "CCRS") then read_data_file_ccrs $1.raw >> $1.PRM endif # # 5) make the LED file from PRC orbit data # set SCID = `grep SC_identity $1.PRM | awk '{print $3}'` if ($SCID == 1) then echo "ERS1" dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 else if ($SCID == 2) then echo "ERS2" dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 else echo "Wrong Satellite ID!" exit 0 endif echo "led_file = $1.LED" >> $1.PRM # # 6) doppler centroid estimation and orbital information # if ($#argv == 5) then calc_dop_orb_envi $1.PRM $1.log2 $3 $5 else if ($#argv == 4) then calc_dop_orb_envi $1.PRM $1.log2 $3 endif cat $1.PRM $1.log2 > $1_tmp.PRM echo "fdd1 = 0" >> $1_tmp.PRM echo "fddd1 = 0" >> $1_tmp.PRM mv $1_tmp.PRM $1.PRM # # 7) other stuff echo "SLC_file = $1.SLC" >> $1.PRM # # 8) change the number of patches # if ($4 != 0) then update_PRM.csh $1.PRM num_patches $4 echo "Number of patches is set to $4" endif # # clean unwanted files # rm -f *.log* echo "End pre-process $1" GMTSAR_V5.7/.svn/pristine/11/11f8d5d990c29fbdf45481b4fac8fe5887abe4fb.svn-base000444 015705 000000 00000000470 13505462014 026131 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = read_sarleader_dpaf CSRCS = read_sarleader_dpaf.c make_prm_dpaf.c OBJS = $(CSRCS:.c=.o) LIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(LIBS) all: $(PROG) clean: rm -f $(OBJS) tags core install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) GMTSAR_V5.7/.svn/pristine/11/11ef715414ed520afd739822f744b72005579c12.svn-base000444 015705 000000 00000051104 13505462013 025215 0ustar00sandwellwheel000000 000000 29 29 3.6787944117144233e-01 3.9411109241650727e-01 4.2006452910691128e-01 4.4544857564370921e-01 4.6996265691059791e-01 4.9330252455860574e-01 5.1516640906053812e-01 5.3526142851899028e-01 5.5331006704435692e-01 5.6905652422419184e-01 5.8227273363059850e-01 5.9276385294463241e-01 6.0037304119840440e-01 6.0498535950574184e-01 6.0653065971263342e-01 6.0498535950574184e-01 6.0037304119840440e-01 5.9276385294463241e-01 5.8227273363059850e-01 5.6905652422419184e-01 5.5331006704435692e-01 5.3526142851899028e-01 5.1516640906053812e-01 4.9330252455860574e-01 4.6996265691059791e-01 4.4544857564370921e-01 4.2006452910691128e-01 3.9411109241650727e-01 3.6787944117144233e-01 3.9411109241650727e-01 4.2221319210210367e-01 4.5001723913840164e-01 4.7721129564428472e-01 5.0347335398849669e-01 5.2847747138718093e-01 5.5190036063069603e-01 5.7342825587181856e-01 5.9276385294463241e-01 6.0963311158293287e-01 6.2379170307741350e-01 6.3503089187350303e-01 6.4318265345481795e-01 6.4812385321550336e-01 6.4977934108595947e-01 6.4812385321550336e-01 6.4318265345481795e-01 6.3503089187350303e-01 6.2379170307741350e-01 6.0963311158293287e-01 5.9276385294463241e-01 5.7342825587181856e-01 5.5190036063069603e-01 5.2847747138718093e-01 5.0347335398849669e-01 4.7721129564428472e-01 4.5001723913840164e-01 4.2221319210210367e-01 3.9411109241650727e-01 4.2006452910691128e-01 4.5001723913840164e-01 4.7965226883004430e-01 5.0863713822463141e-01 5.3662863449056497e-01 5.6327935050165345e-01 5.8824470958371211e-01 6.1119028343619353e-01 6.3179918949258207e-01 6.4977934108595958e-01 6.6487031970439592e-01 6.7684964391023072e-01 6.8553822425200905e-01 6.9080481732851629e-01 6.9256932420519779e-01 6.9080481732851629e-01 6.8553822425200905e-01 6.7684964391023072e-01 6.6487031970439592e-01 6.4977934108595958e-01 6.3179918949258207e-01 6.1119028343619353e-01 5.8824470958371211e-01 5.6327935050165345e-01 5.3662863449056497e-01 5.0863713822463141e-01 4.7965226883004430e-01 4.5001723913840164e-01 4.2006452910691128e-01 4.4544857564370921e-01 4.7721129564428472e-01 5.0863713822463141e-01 5.3937353202224170e-01 5.6905652422419184e-01 5.9731771426626490e-01 6.2379170307741350e-01 6.4812385321550336e-01 6.6997813324222000e-01 6.8904480600832141e-01 7.0504771619201201e-01 7.1775093804225576e-01 7.2696455992515951e-01 7.3254940754229336e-01 7.3442054166685833e-01 7.3254940754229336e-01 7.2696455992515951e-01 7.1775093804225576e-01 7.0504771619201201e-01 6.8904480600832141e-01 6.6997813324222000e-01 6.4812385321550336e-01 6.2379170307741350e-01 5.9731771426626490e-01 5.6905652422419184e-01 5.3937353202224170e-01 5.0863713822463141e-01 4.7721129564428472e-01 4.4544857564370921e-01 4.6996265691059791e-01 5.0347335398849669e-01 5.3662863449056497e-01 5.6905652422419184e-01 6.0037304119840440e-01 6.3018951090073738e-01 6.5812042549111271e-01 6.8379163099607920e-01 7.0684860337809208e-01 7.2696455992515951e-01 7.4384814783956865e-01 7.5725045782212541e-01 7.6697112695571013e-01 7.7286332185339535e-01 7.7483742888324936e-01 7.7286332185339535e-01 7.6697112695571013e-01 7.5725045782212541e-01 7.4384814783956865e-01 7.2696455992515951e-01 7.0684860337809208e-01 6.8379163099607920e-01 6.5812042549111271e-01 6.3018951090073738e-01 6.0037304119840440e-01 5.6905652422419184e-01 5.3662863449056497e-01 5.0347335398849669e-01 4.6996265691059791e-01 4.9330252455860574e-01 5.2847747138718093e-01 5.6327935050165345e-01 5.9731771426626490e-01 6.3018951090073738e-01 6.6148676305748488e-01 6.9080481732851617e-01 7.1775093804225576e-01 7.4195299434922901e-01 7.6306797444958896e-01 7.8079005602206075e-01 7.9485796812548970e-01 8.0506139717136060e-01 8.1124621755118997e-01 8.1331836512984568e-01 8.1124621755118997e-01 8.0506139717136060e-01 7.9485796812548970e-01 7.8079005602206075e-01 7.6306797444958896e-01 7.4195299434922901e-01 7.1775093804225576e-01 6.9080481732851617e-01 6.6148676305748488e-01 6.3018951090073738e-01 5.9731771426626490e-01 5.6327935050165345e-01 5.2847747138718093e-01 4.9330252455860574e-01 5.1516640906053812e-01 5.5190036063069603e-01 5.8824470958371211e-01 6.2379170307741350e-01 6.5812042549111271e-01 6.9080481732851617e-01 7.2142229035475625e-01 7.4956270228277133e-01 7.7483742888324936e-01 7.9688825557508569e-01 8.1539580554746294e-01 8.3008722795156986e-01 8.4074288779512862e-01 8.4720182839879177e-01 8.4936581656831245e-01 8.4720182839879177e-01 8.4074288779512862e-01 8.3008722795156986e-01 8.1539580554746294e-01 7.9688825557508569e-01 7.7483742888324936e-01 7.4956270228277133e-01 7.2142229035475625e-01 6.9080481732851617e-01 6.5812042549111271e-01 6.2379170307741350e-01 5.8824470958371211e-01 5.5190036063069603e-01 5.1516640906053812e-01 5.3526142851899028e-01 5.7342825587181856e-01 6.1119028343619353e-01 6.4812385321550336e-01 6.8379163099607920e-01 7.1775093804225576e-01 7.4956270228277133e-01 7.7880078307140488e-01 8.0506139717136072e-01 8.2797235717867368e-01 8.4720182839879177e-01 8.6246631693044606e-01 8.7353762051189809e-01 8.8024850405056032e-01 8.8249690258459546e-01 8.8024850405056032e-01 8.7353762051189809e-01 8.6246631693044606e-01 8.4720182839879177e-01 8.2797235717867368e-01 8.0506139717136072e-01 7.7880078307140488e-01 7.4956270228277133e-01 7.1775093804225576e-01 6.8379163099607920e-01 6.4812385321550336e-01 6.1119028343619353e-01 5.7342825587181856e-01 5.3526142851899028e-01 5.5331006704435692e-01 5.9276385294463241e-01 6.3179918949258207e-01 6.6997813324222000e-01 7.0684860337809208e-01 7.4195299434922901e-01 7.7483742888324936e-01 8.0506139717136072e-01 8.3220750069030125e-01 8.5589100213887825e-01 8.7576887759026367e-01 8.9154807392842805e-01 9.0299269407203009e-01 9.0992986387890007e-01 9.1225407682854520e-01 9.0992986387890007e-01 9.0299269407203009e-01 8.9154807392842805e-01 8.7576887759026367e-01 8.5589100213887825e-01 8.3220750069030125e-01 8.0506139717136072e-01 7.7483742888324936e-01 7.4195299434922901e-01 7.0684860337809208e-01 6.6997813324222000e-01 6.3179918949258207e-01 5.9276385294463241e-01 5.5331006704435692e-01 5.6905652422419184e-01 6.0963311158293287e-01 6.4977934108595958e-01 6.8904480600832141e-01 7.2696455992515951e-01 7.6306797444958896e-01 7.9688825557508569e-01 8.2797235717867368e-01 8.5589100213887825e-01 8.8024850405056032e-01 9.0069207698923948e-01 9.1692032794301626e-01 9.2869064651822897e-01 9.3582523880811397e-01 9.3821559571910784e-01 9.3582523880811397e-01 9.2869064651822897e-01 9.1692032794301626e-01 9.0069207698923948e-01 8.8024850405056032e-01 8.5589100213887825e-01 8.2797235717867368e-01 7.9688825557508569e-01 7.6306797444958896e-01 7.2696455992515951e-01 6.8904480600832141e-01 6.4977934108595958e-01 6.0963311158293287e-01 5.6905652422419184e-01 5.8227273363059850e-01 6.2379170307741350e-01 6.6487031970439592e-01 7.0504771619201201e-01 7.4384814783956865e-01 7.8079005602206075e-01 8.1539580554746294e-01 8.4720182839879177e-01 8.7576887759026367e-01 9.0069207698923948e-01 9.2161044729772479e-01 9.3821559571910784e-01 9.5025927728806214e-01 9.5755956887444671e-01 9.6000544128547771e-01 9.5755956887444671e-01 9.5025927728806214e-01 9.3821559571910784e-01 9.2161044729772479e-01 9.0069207698923948e-01 8.7576887759026367e-01 8.4720182839879177e-01 8.1539580554746294e-01 7.8079005602206075e-01 7.4384814783956865e-01 7.0504771619201201e-01 6.6487031970439592e-01 6.2379170307741350e-01 5.8227273363059850e-01 5.9276385294463241e-01 6.3503089187350303e-01 6.7684964391023072e-01 7.1775093804225576e-01 7.5725045782212541e-01 7.9485796812548970e-01 8.3008722795156986e-01 8.6246631693044606e-01 8.9154807392842805e-01 9.1692032794301626e-01 9.3821559571910784e-01 9.5511992798210699e-01 9.6738060700435480e-01 9.7481243184935951e-01 9.7730237285197818e-01 9.7481243184935951e-01 9.6738060700435480e-01 9.5511992798210699e-01 9.3821559571910784e-01 9.1692032794301626e-01 8.9154807392842805e-01 8.6246631693044606e-01 8.3008722795156986e-01 7.9485796812548970e-01 7.5725045782212541e-01 7.1775093804225576e-01 6.7684964391023072e-01 6.3503089187350303e-01 5.9276385294463241e-01 6.0037304119840440e-01 6.4318265345481795e-01 6.8553822425200905e-01 7.2696455992515951e-01 7.6697112695571013e-01 8.0506139717136060e-01 8.4074288779512862e-01 8.7353762051189809e-01 9.0299269407203009e-01 9.2869064651822897e-01 9.5025927728806214e-01 9.6738060700435480e-01 9.7979867385370434e-01 9.8732589951310379e-01 9.8984780337873379e-01 9.8732589951310379e-01 9.7979867385370434e-01 9.6738060700435480e-01 9.5025927728806214e-01 9.2869064651822897e-01 9.0299269407203009e-01 8.7353762051189809e-01 8.4074288779512862e-01 8.0506139717136060e-01 7.6697112695571013e-01 7.2696455992515951e-01 6.8553822425200905e-01 6.4318265345481795e-01 6.0037304119840440e-01 6.0498535950574184e-01 6.4812385321550336e-01 6.9080481732851629e-01 7.3254940754229336e-01 7.7286332185339535e-01 8.1124621755118997e-01 8.4720182839879177e-01 8.8024850405056032e-01 9.0992986387890007e-01 9.3582523880811397e-01 9.5755956887444671e-01 9.7481243184935951e-01 9.8732589951310379e-01 9.9491095248707251e-01 9.9745223067928046e-01 9.9491095248707251e-01 9.8732589951310379e-01 9.7481243184935951e-01 9.5755956887444671e-01 9.3582523880811397e-01 9.0992986387890007e-01 8.8024850405056032e-01 8.4720182839879177e-01 8.1124621755118997e-01 7.7286332185339535e-01 7.3254940754229336e-01 6.9080481732851629e-01 6.4812385321550336e-01 6.0498535950574184e-01 6.0653065971263342e-01 6.4977934108595947e-01 6.9256932420519779e-01 7.3442054166685833e-01 7.7483742888324936e-01 8.1331836512984568e-01 8.4936581656831245e-01 8.8249690258459546e-01 9.1225407682854520e-01 9.3821559571910784e-01 9.6000544128547771e-01 9.7730237285197818e-01 9.8984780337873379e-01 9.9745223067928046e-01 1.0000000000000000e+00 9.9745223067928046e-01 9.8984780337873379e-01 9.7730237285197818e-01 9.6000544128547771e-01 9.3821559571910784e-01 9.1225407682854520e-01 8.8249690258459546e-01 8.4936581656831245e-01 8.1331836512984568e-01 7.7483742888324936e-01 7.3442054166685833e-01 6.9256932420519779e-01 6.4977934108595947e-01 6.0653065971263342e-01 6.0498535950574184e-01 6.4812385321550336e-01 6.9080481732851629e-01 7.3254940754229336e-01 7.7286332185339535e-01 8.1124621755118997e-01 8.4720182839879177e-01 8.8024850405056032e-01 9.0992986387890007e-01 9.3582523880811397e-01 9.5755956887444671e-01 9.7481243184935951e-01 9.8732589951310379e-01 9.9491095248707251e-01 9.9745223067928046e-01 9.9491095248707251e-01 9.8732589951310379e-01 9.7481243184935951e-01 9.5755956887444671e-01 9.3582523880811397e-01 9.0992986387890007e-01 8.8024850405056032e-01 8.4720182839879177e-01 8.1124621755118997e-01 7.7286332185339535e-01 7.3254940754229336e-01 6.9080481732851629e-01 6.4812385321550336e-01 6.0498535950574184e-01 6.0037304119840440e-01 6.4318265345481795e-01 6.8553822425200905e-01 7.2696455992515951e-01 7.6697112695571013e-01 8.0506139717136060e-01 8.4074288779512862e-01 8.7353762051189809e-01 9.0299269407203009e-01 9.2869064651822897e-01 9.5025927728806214e-01 9.6738060700435480e-01 9.7979867385370434e-01 9.8732589951310379e-01 9.8984780337873379e-01 9.8732589951310379e-01 9.7979867385370434e-01 9.6738060700435480e-01 9.5025927728806214e-01 9.2869064651822897e-01 9.0299269407203009e-01 8.7353762051189809e-01 8.4074288779512862e-01 8.0506139717136060e-01 7.6697112695571013e-01 7.2696455992515951e-01 6.8553822425200905e-01 6.4318265345481795e-01 6.0037304119840440e-01 5.9276385294463241e-01 6.3503089187350303e-01 6.7684964391023072e-01 7.1775093804225576e-01 7.5725045782212541e-01 7.9485796812548970e-01 8.3008722795156986e-01 8.6246631693044606e-01 8.9154807392842805e-01 9.1692032794301626e-01 9.3821559571910784e-01 9.5511992798210699e-01 9.6738060700435480e-01 9.7481243184935951e-01 9.7730237285197818e-01 9.7481243184935951e-01 9.6738060700435480e-01 9.5511992798210699e-01 9.3821559571910784e-01 9.1692032794301626e-01 8.9154807392842805e-01 8.6246631693044606e-01 8.3008722795156986e-01 7.9485796812548970e-01 7.5725045782212541e-01 7.1775093804225576e-01 6.7684964391023072e-01 6.3503089187350303e-01 5.9276385294463241e-01 5.8227273363059850e-01 6.2379170307741350e-01 6.6487031970439592e-01 7.0504771619201201e-01 7.4384814783956865e-01 7.8079005602206075e-01 8.1539580554746294e-01 8.4720182839879177e-01 8.7576887759026367e-01 9.0069207698923948e-01 9.2161044729772479e-01 9.3821559571910784e-01 9.5025927728806214e-01 9.5755956887444671e-01 9.6000544128547771e-01 9.5755956887444671e-01 9.5025927728806214e-01 9.3821559571910784e-01 9.2161044729772479e-01 9.0069207698923948e-01 8.7576887759026367e-01 8.4720182839879177e-01 8.1539580554746294e-01 7.8079005602206075e-01 7.4384814783956865e-01 7.0504771619201201e-01 6.6487031970439592e-01 6.2379170307741350e-01 5.8227273363059850e-01 5.6905652422419184e-01 6.0963311158293287e-01 6.4977934108595958e-01 6.8904480600832141e-01 7.2696455992515951e-01 7.6306797444958896e-01 7.9688825557508569e-01 8.2797235717867368e-01 8.5589100213887825e-01 8.8024850405056032e-01 9.0069207698923948e-01 9.1692032794301626e-01 9.2869064651822897e-01 9.3582523880811397e-01 9.3821559571910784e-01 9.3582523880811397e-01 9.2869064651822897e-01 9.1692032794301626e-01 9.0069207698923948e-01 8.8024850405056032e-01 8.5589100213887825e-01 8.2797235717867368e-01 7.9688825557508569e-01 7.6306797444958896e-01 7.2696455992515951e-01 6.8904480600832141e-01 6.4977934108595958e-01 6.0963311158293287e-01 5.6905652422419184e-01 5.5331006704435692e-01 5.9276385294463241e-01 6.3179918949258207e-01 6.6997813324222000e-01 7.0684860337809208e-01 7.4195299434922901e-01 7.7483742888324936e-01 8.0506139717136072e-01 8.3220750069030125e-01 8.5589100213887825e-01 8.7576887759026367e-01 8.9154807392842805e-01 9.0299269407203009e-01 9.0992986387890007e-01 9.1225407682854520e-01 9.0992986387890007e-01 9.0299269407203009e-01 8.9154807392842805e-01 8.7576887759026367e-01 8.5589100213887825e-01 8.3220750069030125e-01 8.0506139717136072e-01 7.7483742888324936e-01 7.4195299434922901e-01 7.0684860337809208e-01 6.6997813324222000e-01 6.3179918949258207e-01 5.9276385294463241e-01 5.5331006704435692e-01 5.3526142851899028e-01 5.7342825587181856e-01 6.1119028343619353e-01 6.4812385321550336e-01 6.8379163099607920e-01 7.1775093804225576e-01 7.4956270228277133e-01 7.7880078307140488e-01 8.0506139717136072e-01 8.2797235717867368e-01 8.4720182839879177e-01 8.6246631693044606e-01 8.7353762051189809e-01 8.8024850405056032e-01 8.8249690258459546e-01 8.8024850405056032e-01 8.7353762051189809e-01 8.6246631693044606e-01 8.4720182839879177e-01 8.2797235717867368e-01 8.0506139717136072e-01 7.7880078307140488e-01 7.4956270228277133e-01 7.1775093804225576e-01 6.8379163099607920e-01 6.4812385321550336e-01 6.1119028343619353e-01 5.7342825587181856e-01 5.3526142851899028e-01 5.1516640906053812e-01 5.5190036063069603e-01 5.8824470958371211e-01 6.2379170307741350e-01 6.5812042549111271e-01 6.9080481732851617e-01 7.2142229035475625e-01 7.4956270228277133e-01 7.7483742888324936e-01 7.9688825557508569e-01 8.1539580554746294e-01 8.3008722795156986e-01 8.4074288779512862e-01 8.4720182839879177e-01 8.4936581656831245e-01 8.4720182839879177e-01 8.4074288779512862e-01 8.3008722795156986e-01 8.1539580554746294e-01 7.9688825557508569e-01 7.7483742888324936e-01 7.4956270228277133e-01 7.2142229035475625e-01 6.9080481732851617e-01 6.5812042549111271e-01 6.2379170307741350e-01 5.8824470958371211e-01 5.5190036063069603e-01 5.1516640906053812e-01 4.9330252455860574e-01 5.2847747138718093e-01 5.6327935050165345e-01 5.9731771426626490e-01 6.3018951090073738e-01 6.6148676305748488e-01 6.9080481732851617e-01 7.1775093804225576e-01 7.4195299434922901e-01 7.6306797444958896e-01 7.8079005602206075e-01 7.9485796812548970e-01 8.0506139717136060e-01 8.1124621755118997e-01 8.1331836512984568e-01 8.1124621755118997e-01 8.0506139717136060e-01 7.9485796812548970e-01 7.8079005602206075e-01 7.6306797444958896e-01 7.4195299434922901e-01 7.1775093804225576e-01 6.9080481732851617e-01 6.6148676305748488e-01 6.3018951090073738e-01 5.9731771426626490e-01 5.6327935050165345e-01 5.2847747138718093e-01 4.9330252455860574e-01 4.6996265691059791e-01 5.0347335398849669e-01 5.3662863449056497e-01 5.6905652422419184e-01 6.0037304119840440e-01 6.3018951090073738e-01 6.5812042549111271e-01 6.8379163099607920e-01 7.0684860337809208e-01 7.2696455992515951e-01 7.4384814783956865e-01 7.5725045782212541e-01 7.6697112695571013e-01 7.7286332185339535e-01 7.7483742888324936e-01 7.7286332185339535e-01 7.6697112695571013e-01 7.5725045782212541e-01 7.4384814783956865e-01 7.2696455992515951e-01 7.0684860337809208e-01 6.8379163099607920e-01 6.5812042549111271e-01 6.3018951090073738e-01 6.0037304119840440e-01 5.6905652422419184e-01 5.3662863449056497e-01 5.0347335398849669e-01 4.6996265691059791e-01 4.4544857564370921e-01 4.7721129564428472e-01 5.0863713822463141e-01 5.3937353202224170e-01 5.6905652422419184e-01 5.9731771426626490e-01 6.2379170307741350e-01 6.4812385321550336e-01 6.6997813324222000e-01 6.8904480600832141e-01 7.0504771619201201e-01 7.1775093804225576e-01 7.2696455992515951e-01 7.3254940754229336e-01 7.3442054166685833e-01 7.3254940754229336e-01 7.2696455992515951e-01 7.1775093804225576e-01 7.0504771619201201e-01 6.8904480600832141e-01 6.6997813324222000e-01 6.4812385321550336e-01 6.2379170307741350e-01 5.9731771426626490e-01 5.6905652422419184e-01 5.3937353202224170e-01 5.0863713822463141e-01 4.7721129564428472e-01 4.4544857564370921e-01 4.2006452910691128e-01 4.5001723913840164e-01 4.7965226883004430e-01 5.0863713822463141e-01 5.3662863449056497e-01 5.6327935050165345e-01 5.8824470958371211e-01 6.1119028343619353e-01 6.3179918949258207e-01 6.4977934108595958e-01 6.6487031970439592e-01 6.7684964391023072e-01 6.8553822425200905e-01 6.9080481732851629e-01 6.9256932420519779e-01 6.9080481732851629e-01 6.8553822425200905e-01 6.7684964391023072e-01 6.6487031970439592e-01 6.4977934108595958e-01 6.3179918949258207e-01 6.1119028343619353e-01 5.8824470958371211e-01 5.6327935050165345e-01 5.3662863449056497e-01 5.0863713822463141e-01 4.7965226883004430e-01 4.5001723913840164e-01 4.2006452910691128e-01 3.9411109241650727e-01 4.2221319210210367e-01 4.5001723913840164e-01 4.7721129564428472e-01 5.0347335398849669e-01 5.2847747138718093e-01 5.5190036063069603e-01 5.7342825587181856e-01 5.9276385294463241e-01 6.0963311158293287e-01 6.2379170307741350e-01 6.3503089187350303e-01 6.4318265345481795e-01 6.4812385321550336e-01 6.4977934108595947e-01 6.4812385321550336e-01 6.4318265345481795e-01 6.3503089187350303e-01 6.2379170307741350e-01 6.0963311158293287e-01 5.9276385294463241e-01 5.7342825587181856e-01 5.5190036063069603e-01 5.2847747138718093e-01 5.0347335398849669e-01 4.7721129564428472e-01 4.5001723913840164e-01 4.2221319210210367e-01 3.9411109241650727e-01 3.6787944117144233e-01 3.9411109241650727e-01 4.2006452910691128e-01 4.4544857564370921e-01 4.6996265691059791e-01 4.9330252455860574e-01 5.1516640906053812e-01 5.3526142851899028e-01 5.5331006704435692e-01 5.6905652422419184e-01 5.8227273363059850e-01 5.9276385294463241e-01 6.0037304119840440e-01 6.0498535950574184e-01 6.0653065971263342e-01 6.0498535950574184e-01 6.0037304119840440e-01 5.9276385294463241e-01 5.8227273363059850e-01 5.6905652422419184e-01 5.5331006704435692e-01 5.3526142851899028e-01 5.1516640906053812e-01 4.9330252455860574e-01 4.6996265691059791e-01 4.4544857564370921e-01 4.2006452910691128e-01 3.9411109241650727e-01 3.6787944117144233e-01 GMTSAR_V5.7/.svn/pristine/4b/4b47c26d38f6b0cd06aeffa987add0a7cd1de27b.svn-base000444 015705 000000 00000022667 13505462013 026336 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Xiaohua Xu 04 01 2015 # # script to align S1 TOPS mode data # # 1) Make PRM and LED files for both master and slave. # # 2) Do geometric back geocoding to make the range and azimuth alignment grids # # 3) Do spectral diversity to estimate residual shift and update azimuth shift # # 3) Make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level. # alias rm 'rm -f' unset noclobber # if ($#argv < 5 || $#argv > 6) then echo " " echo "Usage: align_tops.csh master_prefix master_orb_file slave_s1a_prefix slave_orb_file dem.grd [mode]" echo " " echo "Be sure the tiff, xml, orbit and dem files are available in the local directory." echo " " echo "Example: align_tops.csh s1a-iw3-slc-vv-20150526t014937-20150526t015002-006086-007e23-003 S1A_OPER_AUX_POEORB_OPOD_20150615T155109_V20150525T225944_20150527T005944.EOF.txt s1a-iw3-slc-vv-20150607t014937-20150607t015003-006261-00832e-006 S1A_OPER_AUX_POEORB_OPOD_20150627T155155_V20150606T225944_20150608T005944.EOF.txt dem.grd " echo " " echo "Output: S1_20150526_F3.PRM S1_20150526_F3.LED S1_20150526_F3.SLC S1_20150607_F3.PRM S1_20150607_F3.LED S1_20150607_F3.SLC " echo "" echo "Note: set mode = 0 for constant sum correction, set mode = 1 for constant median correction, set mode = 2 for non-constant correction with mapping the residual azimuth shift" echo " " exit 1 endif # # set the running mode # if ($#argv == 5) then set mode = `echo "1"` else set mode = `echo $6` endif # # make sure the files are available # if(! -f $1.xml) then echo "****** missing file: "$1 exit endif if(! -f $2) then echo "****** missing file: "$2 exit endif if(! -f $3.xml) then echo "****** missing file: "$3 exit endif if(! -f $4) then echo "****** missing file: "$4 exit endif if(! -f $5) then echo "****** missing file: "$5 exit endif # # set the full names and create an output prefix # set mtiff = ` echo $1.tiff ` set mxml = ` echo $1.xml ` set stiff = ` echo $3.tiff ` set sxml = ` echo $3.xml ` set mpre = ` echo $1 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set spre = ` echo $3 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` echo $mpre echo $spre # # 1) make PRM and LED files for both master and slave but not the SLC file # make_s1a_tops $mxml $mtiff $mpre 0 make_s1a_tops $sxml $stiff $spre 0 # # replace the LED with the precise orbit # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2# # 2) do a geometric back projection to determine the alignment parameters # # Filter and downsample the topography to 12 seconds or about 360 m # gmt grdfilter $5 -D3 -Fg2 -I12s -Ni -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt # # map the topography into the range and azimuth of the master and slave using polynomial refinement # can do this in parallel # # first check whether there are any burst shift # set lontie = `SAT_baseline $mpre".PRM" $spre".PRM" | grep lon_tie_point | awk '{print $3}'` set lattie = `SAT_baseline $mpre".PRM" $spre".PRM" | grep lat_tie_point | awk '{print $3}'` set tmp_am = `echo $lontie $lattie 0 | SAT_llt2rat $mpre".PRM" 1 | awk '{print $2}'` set tmp_as = `echo $lontie $lattie 0 | SAT_llt2rat $spre".PRM" 1 | awk '{print $2}'` set tmp_da = `echo $tmp_am $tmp_as | awk '{printf("%d",$2 - $1)}'` # # if ther is, modify the master PRM start_time to get a better r/a estimate # if ($tmp_da > -1000 && $tmp_da < 1000) then SAT_llt2rat $mpre".PRM" 1 < topo.llt > master.ratll & SAT_llt2rat $spre".PRM" 1 < topo.llt > slave.ratll & wait else echo "Modifying master PRM by $tmp_da lines..." cp $mpre".PRM" tmp.PRM set prf = `grep PRF tmp.PRM | awk '{print $3}'` set ttmp = `grep clock_start tmp.PRM | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_start $ttmp set ttmp = `grep clock_stop tmp.PRM | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_stop $ttmp set ttmp = `grep SC_clock_start tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_start $ttmp set ttmp = `grep SC_clock_stop tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_stop $ttmp # # restore the modified lines # #SAT_llt2rat tmp.PRM 1 < topo.llt > tmp.ratll & SAT_llt2rat tmp.PRM 1 < topo.llt > master.ratll & SAT_llt2rat $spre".PRM" 1 < topo.llt > slave.ratll & wait #echo "Restoring $tmp_da lines to master ashifts..." #awk '{printf("%.6f %.6f %.6f %.6f %.6f\n",$1,$2-'$tmp_da',$3,$4,$5)}' tmp.ratll > master.ratll endif # # paste the files and compute the dr and da # #paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $6, $6-$1, $7, $7-$2, "100")}' > tmp.dat paste master.ratll slave.ratll | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $6 - $1, $2, $7 - $2, "100")}' > tmp.dat # # make sure the range and azimuth are within the bounds of the slave # set rmax = `grep num_rng_bins $spre".PRM" | awk '{print $3}'` set amax = `grep num_lines $spre".PRM" | awk '{print $3}'` if ($tmp_da > -1000 && $tmp_da < 1000) then awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat else awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 - '$tmp_da', $4 + '$tmp_da', "100") }' < tmp.dat > offset2.dat endif # # extract the range and azimuth data # awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$2) }' < offset.dat > r.xyz awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$4) }' < offset.dat > a.xyz # # fit a surface to the range and azimuth offsets # gmt blockmedian r.xyz -R0/$rmax/0/$amax -I16/8 -r -bo3d > rtmp.xyz gmt blockmedian a.xyz -R0/$rmax/0/$amax -I16/8 -r -bo3d > atmp.xyz gmt surface rtmp.xyz -bi3d -R0/$rmax/0/$amax -I16/8 -T0.3 -Grtmp.grd -N1000 -r & gmt surface atmp.xyz -bi3d -R0/$rmax/0/$amax -I16/8 -T0.3 -Gatmp.grd -N1000 -r & wait gmt grdmath rtmp.grd FLIPUD = r.grd gmt grdmath atmp.grd FLIPUD = a.grd # # 3) make PRM, LED and SLC files for both master and slave that are aligned # at the fractional pixel level but still need a integer alignment from # resamp # # make the new PRM files and SLC # make_s1a_tops $mxml $mtiff $mpre 2 make_s1a_tops $sxml $stiff $spre 2 r.grd a.grd echo "Running Spectral Diversity..." set sharedir = `gmtsar_sharedir.csh` if ($tmp_da > -1000 && $tmp_da < 1000) then spectral_diversity $mpre $spre 0 $sharedir/filters/gauss25x7 > tmp else spectral_diversity $mpre $spre $tmp_da $sharedir/filters/gauss25x7 > tmp endif set spec_sep = `grep spectral_spectrationXdta tmp | awk '{print $3}'` awk '{print $3}' < ddphase > tmp2 if ($mode == 2) then set res_shift = `sort -n tmp2 | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }' | awk '{print $1/2.0/3.141592653/'$spec_sep'}'` echo "Updating azimuth shift with mapping the residual da ...(mapping $res_shift)" awk '{print $1,$2,$3}' < ddphase > test #gmt blockmedian test -R0/$rmax/0/$amax -I500/100 -r -bo3d > test_b #gmt surface test_b -bi3d -Gtest.grd -R0/$rmax/0/$amax -I1000/500 -T0.8 -r -N1000 #gmt grdsample test.grd -R0/$rmax/0/$amax -Gtest_b.grd -I16/8 -r -nc gmt blockmedian test -R0/$rmax/0/$amax -I400/100 | gmt greenspline -Gtest.grd -R0/$rmax/0/$amax -I400/100 -D1 -Cn700 -r gmt grdfilter test.grd -D0 -Fg8000/1500 -Gtest2.grd -V gmt grdsample test2.grd -R0/$rmax/0/$amax -Gtest_b.grd -I16/8 -r -nc gmt grdmath test_b.grd FLIPUD $spec_sep DIV 2 PI MUL DIV = res_shift.grd gmt grdmath a.grd res_shift.grd ADD = tmp.grd mv tmp.grd a.grd mv tmp spec_div_output rm test* else if ($mode == 1) then set res_shift = `sort -n tmp2 | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }' | awk '{print $1/2.0/3.141592653/'$spec_sep'}'` else set res_shift = `grep residual_shift tmp | awk '{print $3}'` endif echo "Updating azimuth shift with a constant...(medain $res_shift)" gmt grdmath a.grd $res_shift ADD = tmp.grd mv tmp.grd a.grd endif make_s1a_tops $mxml $mtiff $mpre 1 make_s1a_tops $sxml $stiff $spre 1 r.grd a.grd # # resamp the slave and set the aoffset to zero # cp $spre".PRM" $spre".PRM0" if ($tmp_da > -1000 && $tmp_da < 1000) then update_PRM $spre".PRM" ashift 0 else update_PRM $spre".PRM" ashift $tmp_da echo "Restoring $tmp_da lines with resamp..." endif resamp $mpre".PRM" $spre".PRM" $spre".PRMresamp" $spre".SLCresamp" 1 mv $spre".SLCresamp" $spre".SLC" mv $spre".PRMresamp" $spre".PRM" # if ($tmp_da > -1000 && $tmp_da < 1000) then fitoffset.csh 3 3 offset.dat >> $spre.PRM else fitoffset.csh 3 3 offset2.dat >> $spre.PRM endif # # re-extract the lED files # ext_orb_s1a $mpre".PRM" $2 $mpre ext_orb_s1a $spre".PRM" $4 $spre # # calculate the earth radius and make the slave match the master # calc_dop_orb $mpre".PRM" tmp 0 0 cat tmp >> $mpre".PRM" set earth_radius = `grep earth_radius tmp | awk '{print $3}'` calc_dop_orb $spre".PRM" tmp2 $earth_radius 0 cat tmp2 >> $spre".PRM" rm tmp tmp2 # rm topo.llt master.ratll slave.ratll *tmp* flt.grd r.xyz a.xyz *.PRM0 *SLCH *SLCL GMTSAR_V5.7/.svn/pristine/4b/4b2ea1e8e604e28c279dd15588a148a867c78847.svn-base000444 015705 000000 00000002451 13505462013 025500 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong FEB 4 2010 # # Make the interferogram. # # Matt Wei May 4 2010, ENVISAT # # add in TSX, Jan 10 2014 alias rm 'rm -f' gmt set IO_NC4_CHUNK_SIZE classic # # if ($#argv < 2) then errormessage: echo "" echo "Usage: intf.csh ref.PRM rep.PRM [-topo topogrd] [-model modelgrd]" echo "" echo " The dimensions of topogrd and modelgrd should be compatible with SLC file." echo "" echo "Example: intf.csh IMG-HH-ALPSRP055750660-H1.0__A.PRM IMG-HH-ALPSRP049040660-H1.0__A.PRM -topo topo_ra.grd" echo "" exit 1 endif # # which satellite # set SC = `grep SC_identity $1 | awk '{print $3}'` if ($SC == 1 || $SC == 2 || $SC == 4 || $SC == 6 || $SC == 5) then cp $2 $2"0" cp $1 $1"0" SAT_baseline $1 $2 | tail -n9 >> $2 SAT_baseline $1 $1 | grep height >> $1 else if ($SC > 6) then cp $2 $2"0" cp $1 $1"0" SAT_baseline $1 $2 | tail -n9 >> $2 SAT_baseline $1 $1 | grep height >> $1 else echo "Incorrect satellite id in prm file" exit 0 endif # # form the interferogram optionally using topo_ra and modelphase # if ($#argv == 2 || $#argv == 4 || $#argv == 6) then echo "intf.csh" echo "running phasediff..." phasediff $argv else goto errormessage endif mv $1"0" $1 mv $2"0" $2 GMTSAR_V5.7/.svn/pristine/27/27fe91caca096d81382441b63989e2920213f099.svn-base000444 015705 000000 00000006434 13505462014 025253 0ustar00sandwellwheel000000 000000 /* * $Id: epr_ptrarray.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_ptrarray.h" #include "epr_string.h" EPR_SPtrArray* epr_create_ptr_array(unsigned int capacity) { EPR_SPtrArray* ptr_array = NULL; void** elems = NULL; elems = (void**) calloc(capacity, sizeof (void*)); if (elems == NULL) { return NULL; } ptr_array = (EPR_SPtrArray*) calloc(1, sizeof (EPR_SPtrArray)); if (ptr_array == NULL) { free(elems); return NULL; } ptr_array->capacity = capacity; ptr_array->length = 0; ptr_array->elems = elems; return ptr_array; } void epr_free_ptr_array(EPR_SPtrArray* ptr_array) { if (ptr_array == NULL) return; if (ptr_array->elems != NULL) free(ptr_array->elems); ptr_array->capacity = 0; ptr_array->length = 0; ptr_array->elems = NULL; free(ptr_array); } void epr_free_char_ptr_array(EPR_SPtrArray* char_ptr_array) { uint i; for (i = 0; i < char_ptr_array->length; i++) { epr_free_string((char*) char_ptr_array->elems[i]); } epr_free_ptr_array(char_ptr_array); } int epr_add_ptr_array_elem(EPR_SPtrArray* ptr_array, void* elem) { assert(ptr_array != NULL); assert(ptr_array->elems != NULL); if (ptr_array->length + 1 > ptr_array->capacity) { int status = epr_grow_ptr_array(ptr_array, 2 * ptr_array->capacity); if (status != 0) return status; } ptr_array->elems[ptr_array->length++] = elem; return e_err_none; } int epr_grow_ptr_array(EPR_SPtrArray* ptr_array, unsigned int capacity) { void* elems = NULL; assert(ptr_array != NULL); assert(capacity >= ptr_array->capacity); if (capacity == ptr_array->capacity) return e_err_none; elems = (void**) realloc(ptr_array->elems, capacity * sizeof (void*)); if (elems == NULL) return e_err_out_of_memory; memset(((char*)elems) + ptr_array->length * sizeof (void*), 0, (capacity - ptr_array->length) * sizeof (void*)); ptr_array->capacity = capacity; ptr_array->elems = elems; return e_err_none; } unsigned int epr_get_ptr_array_length(const EPR_SPtrArray* ptr_array) { assert(ptr_array != NULL); return ptr_array->length; } void* epr_get_ptr_array_elem_at(const EPR_SPtrArray* ptr_array, unsigned int index) { assert(ptr_array != NULL); assert(ptr_array->elems != NULL); assert(index < ptr_array->length); return ptr_array->elems[index]; } GMTSAR_V5.7/.svn/pristine/27/27bba08307f8f1a52b5bd8ea6e789cb9358eba80.svn-base000444 015705 000000 00000004736 13505462013 025771 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Creator: Xiaopeng Tong, David Sandwell # Date: July 6th 2013 alias rm 'rm -f' if ($#argv != 7) then echo "" echo "Usage: proj_model.csh SAT ve.grd vn.grd vu.grd master.PRM dem.grd los.grd" echo "" echo " project a simulated crust motion model into radar look directions " echo " the radar look direction is spatial variable" echo "" echo " SAT -- can be ALOS or ERS or ENVI or generic SAT" echo " ve, vn, vu.grd -- input: east, north, vertical motion simulated from numerical model " echo " master.PRM -- PRM file of the radar image" echo " dem.grd -- DEM grid (wider than the coverage of the radar image)" echo " los.grd -- output: file name of the LOS grid " echo "" echo " note that the grid of the grd files must be consistent" echo " note the program need master.PRM and its LED file" echo "" exit 1 endif if ((! -e $2) || (! -e $3) || (! -e $4)) then echo "" echo "no input model file found: $2, $3, $4" echo "" exit 1 endif if (! -e $5) then echo "" echo "no input PRM file found: $5" echo "" exit 1 endif if (! -e $6) then echo "" echo "no input DEM grid found: $6" echo "" exit 1 endif set SAT = $1 if ($SAT != ENVI && $SAT != ERS && $SAT != ALOS && $SAT != SAT) then echo "" echo " SAT can be ALOS ENVISAT or ERS or generic SAT" echo "" exit 1 endif set ve = $2 set vn = $3 set vu = $4 set prm = $5 set dem = $6 set out = $7 set int = `gmt grdinfo -I $ve` gmt set FORMAT_GEO_OUT D gmt grd2xyz $dem -fg | $SAT"_look" $prm -bos > look.xyz gmt blockmedian look.xyz -i0,1,3 -bi6f `gmt grdinfo -I- $dem` $int -bo -fg | gmt surface -fg -bi -Gtmp.grd $int `gmt grdinfo -I- $dem` -T0.5 gmt grdsample tmp.grd -T -Glle.grd gmt blockmedian look.xyz -i0,1,4 -bi6f `gmt grdinfo -I- $dem` $int -bo -fg | gmt surface -fg -bi -Gtmp.grd $int `gmt grdinfo -I- $dem` -T0.5 gmt grdsample tmp.grd -T -Glln.grd gmt blockmedian look.xyz -i0,1,5 -bi6f `gmt grdinfo -I- $dem` $int -bo -fg | gmt surface -fg -bi -Gtmp.grd $int `gmt grdinfo -I- $dem` -T0.5 gmt grdsample tmp.grd -T -Gllu.grd set region = `gmt grdinfo -I- llu.grd` #echo $region gmt grdsample $ve $region $int -Gtmpve.grd -fg gmt grdsample $vn $region $int -Gtmpvn.grd -fg gmt grdsample $vu $region $int -Gtmpvu.grd -fg gmt grdmath tmpve.grd "lle.grd" MUL tmpvn.grd "lln.grd" MUL ADD tmpvu.grd "llu.grd" MUL ADD = $out #clean up rm look.xyz tmp.grd rm lle.grd llu.grd lln.grd tmpve.grd tmpvn.grd tmpvu.grd GMTSAR_V5.7/.svn/pristine/27/2729cbf361df5d04d6b1904d2ba6e6f922f7fb6d.svn-base000444 015705 000000 00000014763 13505462013 025767 0ustar00sandwellwheel000000 000000 /************************************************************************ * extend the state vector for LED files from Sentinel1 and Radarsat2 * ***********************************************************************/ /************************************************************************ * Creator: David T. Sandwell & Xiaohua Xu * * Date : 03/05/2015 * ************************************************************************/ /************************************************************************ * Modification History: * * * * Date : * * * ************************************************************************/ #include "gmtsar.h" #include "lib_functions.h" #include "orbit.h" void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void write_orb(FILE *, struct SAT_ORB *); void polyfit(double *, double *, double *, int *, int *); int main(int argc, char **argv) { struct PRM *prm; struct SAT_ORB *orb; struct SAT_ORB *orb_out; FILE *infile, *outfile; int nd_in, nd_add, nd_out; int n, k; double *pt, *px, *py, *pz, *ppt, *ppx, *ppvx, *ppy, *ppvy, *ppz, *ppvz; double frac, idsec; void extrapolate_poly(double *, double *, double *, double *, double *, int, int, int); int Nodr; if ((argc != 4)) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: extend_orbit file_in.LED file_out.LED frac\n"); fprintf(stderr, " orig.LED - original LED file \n"); fprintf(stderr, " extend.LED - extended LED file \n"); fprintf(stderr, " frac - fraction of frame length to add to each " "end (e.g. 0.25) \n"); fprintf(stderr, "\n"); return (0); } /* don't really need prm except for call to read_orb */ prm = malloc(sizeof(struct PRM)); frac = atof(argv[3]); /* get the orbit data */ if ((infile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); orb = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); orb_out = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); read_orb(infile, prm, orb); /* make a longer structure for the output LED file */ nd_in = orb->nd; nd_add = nd_in * frac; nd_out = nd_in + 2 * nd_add; orb_out->nd = nd_out; orb_out->iy = orb->iy; orb_out->id = orb->id; idsec = orb->dsec; orb_out->dsec = orb->dsec; orb_out->sec = orb->sec - nd_add * idsec; orb_out->points = (struct ORB_XYZ *)malloc(orb_out->nd * sizeof(struct ORB_XYZ)); /* allocate the memory for the vectors to be fit and fill the vectors */ pt = malloc(nd_in * sizeof(double)); px = malloc(nd_in * sizeof(double)); py = malloc(nd_in * sizeof(double)); pz = malloc(nd_in * sizeof(double)); ppt = malloc(nd_add * 2 * sizeof(double)); ppx = malloc(nd_add * 2 * sizeof(double)); ppvx = malloc(nd_add * 2 * sizeof(double)); ppy = malloc(nd_add * 2 * sizeof(double)); ppvy = malloc(nd_add * 2 * sizeof(double)); ppz = malloc(nd_add * 2 * sizeof(double)); ppvz = malloc(nd_add * 2 * sizeof(double)); for (n = 0; n < nd_in; n++) { pt[n] = orb->points[n].pt; px[n] = orb->points[n].px; py[n] = orb->points[n].py; pz[n] = orb->points[n].pz; } /* extrapolate the orbit into the longer structure */ Nodr = 4; extrapolate_poly(pt, px, ppt, ppx, ppvx, nd_in, nd_add, Nodr); extrapolate_poly(pt, py, ppt, ppy, ppvy, nd_in, nd_add, Nodr); extrapolate_poly(pt, pz, ppt, ppz, ppvz, nd_in, nd_add, Nodr); for (n = 0; n < nd_add; n++) { orb_out->points[n].pt = ppt[n]; orb_out->points[nd_out - n - 1].pt = ppt[2 * nd_add - n - 1]; orb_out->points[n].px = ppx[n]; orb_out->points[nd_out - n - 1].px = ppx[2 * nd_add - n - 1]; orb_out->points[n].py = ppy[n]; orb_out->points[nd_out - n - 1].py = ppy[2 * nd_add - n - 1]; orb_out->points[n].pz = ppz[n]; orb_out->points[nd_out - n - 1].pz = ppz[2 * nd_add - n - 1]; orb_out->points[n].vx = ppvx[n]; orb_out->points[nd_out - n - 1].vx = ppvx[2 * nd_add - n - 1]; orb_out->points[n].vy = ppvy[n]; orb_out->points[nd_out - n - 1].vy = ppvy[2 * nd_add - n - 1]; orb_out->points[n].vz = ppvz[n]; orb_out->points[nd_out - n - 1].vz = ppvz[2 * nd_add - n - 1]; } /* replace the original state vector in the interior of the output vector */ k = 0; for (n = nd_add; n < nd_in + nd_add; n++) { orb_out->points[n].pt = orb->points[k].pt; orb_out->points[n].px = orb->points[k].px; orb_out->points[n].py = orb->points[k].py; orb_out->points[n].pz = orb->points[k].pz; orb_out->points[n].vx = orb->points[k].vx; orb_out->points[n].vy = orb->points[k].vy; orb_out->points[n].vz = orb->points[k].vz; k++; } /* write the extrapolated LED file */ if ((outfile = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); write_orb(outfile, orb_out); fclose(infile); fclose(outfile); exit(0); } void extrapolate_poly(double *T, double *Y, double *TT, double *YY, double *DYY, int nd_in, int nd_add, int Nodr) { int i; double dt, mt, my, coef[6], t_tmp, dt_tmp, y_tmp, y_tmp1, y_tmp2; double polyval(double, double *, int); double sum_array(double *, int); dt_tmp = 0.2; if (nd_in < 5) { fprintf(stderr, "Not enough points to estimate polynomial coefficitnets\n"); exit(0); } mt = sum_array(T, nd_in) / nd_in; my = sum_array(Y, nd_in) / nd_in; for (i = 0; i < nd_in; i++) { T[i] = T[i] - mt; Y[i] = Y[i] - my; } dt = T[nd_in / 2 + 1] - T[nd_in / 2]; polyfit(T, Y, coef, &nd_in, &Nodr); /* interpolate nd_add points in the front and at the back */ for (i = 0; i < nd_add; i++) { t_tmp = T[0] - dt * (nd_add - i); y_tmp = polyval(t_tmp, coef, Nodr); y_tmp1 = polyval(t_tmp - dt_tmp, coef, Nodr); y_tmp2 = polyval(t_tmp + dt_tmp, coef, Nodr); TT[i] = t_tmp + mt; YY[i] = y_tmp + my; DYY[i] = (y_tmp2 - y_tmp1) / 2 / dt_tmp; t_tmp = T[nd_in - 1] + dt * (i + 1); y_tmp = polyval(t_tmp, coef, Nodr); y_tmp1 = polyval(t_tmp - dt_tmp, coef, Nodr); y_tmp2 = polyval(t_tmp + dt_tmp, coef, Nodr); TT[nd_add + i] = t_tmp + mt; YY[nd_add + i] = y_tmp + my; DYY[nd_add + i] = (y_tmp2 - y_tmp1) / 2 / dt_tmp; } for (i = 0; i < nd_in; i++) { T[i] = T[i] + mt; Y[i] = Y[i] + my; } } double polyval(double T, double *C, int Nodr) { int j; double y_tmp; y_tmp = 0; for (j = 0; j < Nodr; j++) { y_tmp = y_tmp + C[j] * pow(T, j); } return (y_tmp); } double sum_array(double *a, int num_elements) { int i; double sum = 0; for (i = 0; i < num_elements; i++) { sum = sum + a[i]; } return (sum); } GMTSAR_V5.7/.svn/pristine/18/18f42cf483ff8f9846caa86b2ea8dfd509531f62.svn-base000444 015705 000000 00000204503 13505462014 025725 0ustar00sandwellwheel000000 000000 /* * $Id: epr_band.c,v 1.2 2009-03-27 10:25:54 sabine Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_field.h" #include "epr_record.h" #include "epr_param.h" #include "epr_dsd.h" #include "epr_msph.h" #include "epr_band.h" #include "epr_bitmask.h" #include "epr_dddb.h" /** * Obtains all bands infos from the dddb. */ EPR_SPtrArray* epr_create_band_ids(EPR_SProductId* product_id) { EPR_SBandId* band_id = NULL; EPR_SPtrArray* band_ids = NULL; char test_block[1024]; int bt_index; int i; const struct BandDescriptorTable* b_tables; int num_descr; if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_create_band_ids: product_id must not be NULL"); return NULL; } /* @DDDB */ b_tables = dddb_band_tables; bt_index = -1; for (i = 0; i < EPR_NUM_BAND_TABLES; i++) { const char* id = b_tables[i].name; if (strncmp(product_id->id_string, id, 10) == 0) { if (product_id->meris_iodd_version == 5) { if (strcmp(id, "MER_RR__1P_IODD5") == 0 || strcmp(id, "MER_FR__1P_IODD5") == 0) { bt_index = i; } } else if (product_id->meris_iodd_version == 6) { if (strcmp(id, "MER_RR__2P_IODD6") == 0 || strcmp(id, "MER_FR__2P_IODD6") == 0) { bt_index = i; } } else { bt_index = i; } } if (bt_index != -1) { break; } } if (bt_index == -1) { epr_set_err(e_err_null_pointer, "epr_create_band_ids: unknown product type"); return NULL; } band_ids = epr_create_ptr_array(16); num_descr = b_tables[bt_index].num_descriptors; for (i = 0; i < num_descr; i++) { band_id = (EPR_SBandId*) calloc(1, sizeof (EPR_SBandId)); if (band_id == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_band_ids: out of memory"); return NULL; } band_id->magic = EPR_MAGIC_BAND_ID; band_id->product_id = product_id; /* 1: band_name */ epr_assign_string(&band_id->band_name, b_tables[bt_index].descriptors[i].id); /* 2: dataset_name */ band_id->dataset_ref = epr_get_ref_struct(product_id, b_tables[bt_index].descriptors[i].rec_name); if (band_id->dataset_ref.dataset_id == NULL) { epr_set_err(e_err_invalid_dataset_name, "epr_create_band_ids: invalid dataset name in DDDB"); epr_free_band_id(band_id); return NULL; } /* 3: sample_offset */ band_id->sample_model = b_tables[bt_index].descriptors[i].sample_offset; /* 4: band_datatype */ band_id->data_type = b_tables[bt_index].descriptors[i].type; /* 5: spectr_band_index*/ band_id->spectr_band_index = b_tables[bt_index].descriptors[i].spectral_index; /* 6: scaling_method*/ if (b_tables[bt_index].descriptors[i].scale_method == e_smid_non) { band_id->scaling_method = 0; band_id->scaling_offset = 0.0; band_id->scaling_factor = 1.0; } else { band_id->scaling_method = b_tables[bt_index].descriptors[i].scale_method; /* 7: scaling_offset*/ strcpy (test_block, b_tables[bt_index].descriptors[i].scale_offset); if (test_block == NULL) { band_id->scaling_offset = 0.0; } else { float scaling_offset = (float)atof(test_block); if (epr_numeral_suspicion(test_block) == 1) { band_id->scaling_offset = scaling_offset; } else { scaling_offset = epr_get_scaling_params(product_id, test_block); if (scaling_offset == -909.909) { /* @todo what an ugly return value. Eeeek!*/ epr_set_err(e_err_invalid_dataset_name, "epr_create_band_ids: invalid dataset name in dddb"); epr_free_band_id(band_id); return NULL; } band_id->scaling_offset = scaling_offset; } } /* 8: scaling_factor*/ strcpy (test_block, b_tables[bt_index].descriptors[i].scale_factor); if (test_block == NULL) { band_id->scaling_factor = 0.0; } else { float scaling_factor = (float)atof(test_block); if (epr_numeral_suspicion(test_block) == 1) { band_id->scaling_factor = scaling_factor; } else { scaling_factor = epr_get_scaling_params(product_id, test_block); if (scaling_factor == -909.909) { /* @todo what an ugly return value. Eeeek!*/ epr_set_err(e_err_invalid_dataset_name, "epr_create_band_ids: invalid dataset name in dddb"); epr_free_band_id(band_id); return NULL; } band_id->scaling_factor = scaling_factor; } } } /* 9: bit_expr*/ epr_assign_string(&band_id->bm_expr, b_tables[bt_index].descriptors[i].bitmask_expr); /* 10: flags_definition_file*/ if (b_tables[bt_index].descriptors[i].flag_coding_name != NULL) { band_id->flag_coding = epr_create_flag_coding(product_id, b_tables[bt_index].descriptors[i].flag_coding_name); if (band_id->flag_coding == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_band_ids: out of memory"); epr_free_band_id(band_id); return NULL; } } else { band_id->flag_coding = NULL; } /* 11: unit*/ epr_assign_string(&band_id->unit, b_tables[bt_index].descriptors[i].unit); /* 12: description*/ epr_assign_string(&band_id->description, b_tables[bt_index].descriptors[i].description); /* lines_flipped*/ if (strncmp(product_id->id_string, EPR_ENVISAT_PRODUCT_MERIS, 3) == 0 || strncmp(product_id->id_string, EPR_ENVISAT_PRODUCT_AATSR, 3) == 0) { band_id->lines_mirrored = TRUE; } else { if (strncmp(product_id->id_string, EPR_ENVISAT_PRODUCT_ASAR, 3) == 0 && strncmp(product_id->id_string, "ASA_IMG", 7) != 0 && strncmp(product_id->id_string, "ASA_APG", 7) != 0) { band_id->lines_mirrored = TRUE; } else { if (strncmp(product_id->id_string, EPR_ENVISAT_PRODUCT_SAR, 3) == 0 && strncmp(product_id->id_string, "SAR_IMG", 7) != 0 && strncmp(product_id->id_string, "SAR_APG", 7) != 0) { band_id->lines_mirrored = TRUE; } else { band_id->lines_mirrored = FALSE; } } } epr_add_ptr_array_elem(band_ids, band_id); } return band_ids; } uint epr_get_num_bands(EPR_SProductId* product_id) { epr_clear_err(); if (!epr_check_api_init_flag()) { return 0; } if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_num_bands: product_id must not be NULL"); return (uint) -1; } return product_id->band_ids->length; } EPR_SBandId* epr_get_band_id_at(EPR_SProductId* product_id, uint index) { EPR_SBandId* band_id = NULL; epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_band_id_at: product_id must not be NULL"); return NULL; } if (index >= product_id->band_ids->length) { epr_set_err(e_err_index_out_of_range, "epr_get_band_id_at: band index out of range"); return NULL; } band_id = (EPR_SBandId*)epr_get_ptr_array_elem_at(product_id->band_ids, index); return band_id; } EPR_SBandId* epr_get_band_id(EPR_SProductId* product_id, const char* band_name) { EPR_SBandId* band_id = NULL; int num_bands, i; epr_clear_err(); if (product_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_band_id: product_id must not be NULL"); return NULL; } if (band_name == NULL) { epr_set_err(e_err_null_pointer, "epr_get_band_id: dataset_name must not be NULL"); return NULL; } num_bands = epr_get_num_bands(product_id); for (i = 0; i < num_bands; i++) { band_id = epr_get_band_id_at(product_id, i); if (epr_equal_names(band_name, epr_get_band_name(band_id))) { return band_id; } } epr_set_err(e_err_invalid_band_name, "epr_get_band_id: band not found"); return NULL; } const char* epr_get_band_name(EPR_SBandId* band_id) { epr_clear_err(); if (band_id == NULL) { epr_set_err(e_err_null_pointer, "epr_get_band_name: band_id must not be NULL"); return NULL; } return band_id->band_name; } /** * Release the memory allocated through a band ID. * * @param band the dataset description identifier, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise */ void epr_free_band_id(EPR_SBandId* band_id) { if (band_id == NULL) return; band_id->dataset_ref.elem_index = -1; band_id->dataset_ref.field_index = -1; band_id->dataset_ref.dataset_id = NULL; epr_free_and_null_string(&band_id->band_name); epr_free_and_null_string(&band_id->bm_expr); epr_free_flag_coding(band_id->flag_coding); band_id->flag_coding = NULL; band_id->spectr_band_index = 0; band_id->scaling_offset = 0; band_id->scaling_factor = 0; band_id->data_type = e_tid_unknown; epr_free_and_null_string(&band_id->unit); epr_free_and_null_string(&band_id->description); band_id->lines_mirrored = FALSE; free(band_id); } /** * Gets the scaling params: factor or offset by the given dataset_id, field_index, elem_index * * @param product_id the the product file identifier * @param str the string with the name, separator ('.') and indexes. * @return the dataset_id, field_index and elem_index (-1 if no). * NULL if correspondent dataset name was not found. */ float epr_get_scaling_params(EPR_SProductId* product_id, const char* str) { EPR_SDatasetRef scal_fact; const EPR_SField* field = NULL; EPR_SRecord* record = NULL; float ziff; scal_fact = epr_get_ref_struct(product_id, str); if (scal_fact.dataset_id == NULL) { return (float)(-909.909); } /*'Scaling_Factor_GADS'*/ record = epr_create_record(scal_fact.dataset_id); record = epr_read_record(scal_fact.dataset_id, 0, record); field = epr_get_field_at(record, scal_fact.field_index - 1); ziff = epr_get_field_elem_as_float(field, (uint)(scal_fact.elem_index - 1)); epr_free_record(record); return ziff; } /** * Gets the scaling factor by the given dataset_id, field_index, elem_index * * @param product_id the the product file identifier * @param str the string with the name, separator ('.') and indexes. * @return the dataset_id, field_index and elem_index (-1 if no). * NULL if correspondent dataset name was not found. */ float epr_get_scaling_factor(EPR_SProductId* product_id, const char* str) { EPR_SDatasetRef scal_fact; const EPR_SField* field = NULL; EPR_SRecord* record = NULL; float ziff; scal_fact = epr_get_ref_struct(product_id, str); if (scal_fact.dataset_id == NULL) { return (float)(-909.909); } /*'Scaling_Factor_GADS'*/ record = epr_create_record(scal_fact.dataset_id); record = epr_read_record(scal_fact.dataset_id, 0, record); field = epr_get_field_at(record, scal_fact.field_index - 1); ziff = epr_get_field_elem_as_float(field, (uint)(scal_fact.elem_index - 1)); epr_free_record(record); return ziff; } /** * Gets the dataset_id, field_index and elem_index * * @param product_id the the product file identifier * @param str the string with the name, separator ('.') and indexes. * @return the dataset_id, field_index and elem_index (-1 if no). * NULL if correspondent dataset name was not found. */ EPR_SDatasetRef epr_get_ref_struct(EPR_SProductId* product_id, const char* str) { EPR_SDatasetRef ref_struct; int pos = 0; char* stopstring; char* token; ref_struct.dataset_id = NULL; ref_struct.field_index = -1; ref_struct.elem_index = -1; token = epr_str_tok(str, ".", &pos); ref_struct.dataset_id = epr_get_dataset_id(product_id, token); if (ref_struct.dataset_id == NULL) { epr_free_and_null_string(&token); return ref_struct; } epr_free_and_null_string(&token); token = epr_str_tok(str, ".", &pos); if (token == NULL) { ref_struct.field_index = -1; } else { ref_struct.field_index = strtol(token, &stopstring, 10); } epr_free_and_null_string(&token); token = epr_str_tok(str, ".", &pos); if (token == NULL) { ref_struct.elem_index = -1; } else { ref_struct.elem_index = strtol(token, &stopstring, 10); } epr_free_and_null_string(&token); return ref_struct; } /** * Converts the given string into a scaling method identifier. * * @param str the string to be converted. * @return the scaling method identifier represented by the given string. * If the string is equal of '*' the value * e_non_smid is returned. */ EPR_EScalingMethod epr_str_to_scaling_method(const char* str) { assert(str != NULL); if (epr_equal_names(str, "Linear_Scale")) return e_smid_lin; else if (epr_equal_names(str, "Log_Scale")) return e_smid_log; else return e_smid_non; } /** * Converts the given string into a sample offset identifier. * * @param str the string to be converted. * @return the sample offset identifier represented by the given string. * If the string is equal of '*' the value * e_none_samoff is returned. */ EPR_ESampleModel epr_str_to_sample_offset(const char* str) { assert(str != NULL); if (epr_equal_names(str, "1OF2")) return e_smod_1OF2; else if (epr_equal_names(str, "2OF2")) return e_smod_2OF2; else if (epr_equal_names(str, "3TOI")) return e_smod_3TOI; else if (epr_equal_names(str, "2TOF")) return e_smod_2TOF; else return e_smod_1OF1; } /** * Creates a raster to be used for reading bitmasks. The raster returned is always of type byte. * * @param source_width the width (across track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_height the height (along track dimension) of the source to be read into the raster. See description of epr_create_compatible_raster. * @param source_step_x the subsampling step across track of the source when reading into the raster. See description of epr_create_compatible_raster. * @param source_step_y the subsampling step along track of the source when reading into the raster. See description of epr_create_compatible_raster. * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_bitmask_raster(uint source_width, uint source_height, uint source_step_x, uint source_step_y) { return epr_create_raster(e_tid_uchar, source_width, source_height, source_step_x, source_step_y); } /** * Creates a raster for the given datatype and dimension. * * @param data_type the data type identifier * @param source_width the source's width * @param source_height the source's height * @param source_step_x the sub-sampling in X * @param source_step_y the sub-sampling in Y * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_raster(EPR_EDataTypeId data_type, uint source_width, uint source_height, uint source_step_x, uint source_step_y) { EPR_SRaster* raster = NULL; uint num_elems; epr_clear_err(); if (data_type == e_tid_string || data_type == e_tid_spare || data_type == e_tid_time) { epr_set_err(e_err_illegal_data_type, "epr_create_raster: illegal data type"); return NULL; } raster = (EPR_SRaster*) calloc(1, sizeof (EPR_SRaster)); if (raster == NULL) { epr_set_err(e_err_out_of_memory, "epr_create_raster: out of memory"); return NULL; } raster->magic = EPR_MAGIC_RASTER; raster->data_type = data_type; raster->elem_size = epr_get_data_type_size(data_type); raster->source_height = source_height; raster->source_width = source_width; raster->source_step_x = source_step_x; raster->source_step_y = source_step_y; raster->raster_width = (source_width - 1) / source_step_x + 1; raster->raster_height = (source_height - 1) / source_step_y + 1; num_elems = raster->raster_width * raster->raster_height; raster->buffer = calloc(raster->elem_size, num_elems); if (raster->buffer == NULL) { epr_free_raster(raster); epr_set_err(e_err_out_of_memory, "epr_create_raster: out of memory"); return NULL; } return raster; } /** * Creates a compatible raster for the given band. * * @param band_id the band identifier, must not be NULL * @return the new raster instance * or NULL if an error occured. */ EPR_SRaster* epr_create_compatible_raster(EPR_SBandId* band_id, uint source_width, uint source_height, uint source_step_x, uint source_step_y) { epr_clear_err(); if (band_id == NULL) { epr_set_err(e_err_invalid_band, "epr_create_raster: band_id must not be NULL"); return NULL; } return epr_create_raster(band_id->data_type, source_width, source_height, source_step_x, source_step_y); } void epr_free_raster(EPR_SRaster* raster) { epr_clear_err(); if (raster == NULL) return; raster->data_type = e_tid_unknown; raster->elem_size = 0; raster->raster_height = 0; raster->raster_width = 0; raster->source_height = 0; raster->source_width = 0; raster->source_step_x = 0; raster->source_step_y = 0; if (raster->buffer != NULL) { free(raster->buffer); raster->buffer = NULL; } free(raster); } int epr_read_band_raster(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster/*, EPR_SRaster** bitmask_raster*/) { EPR_SProductId* product_id = NULL; EPR_SDatasetId* dataset_id = NULL; char* rec_type; epr_clear_err(); if (band_id == NULL) { epr_set_err(e_err_invalid_band, "epr_read_band_raster: band_id must not be NULL"); return epr_get_last_err_code(); } if (band_id->data_type != raster->data_type) { epr_set_err(e_err_illegal_data_type, "epr_read_band_raster: illegal raster data type"); return epr_get_last_err_code(); } if (raster->buffer == NULL) { epr_set_err(e_err_illegal_arg, "epr_read_band_raster: raster->buffer must not be NULL"); return epr_get_last_err_code(); } if ((offset_x<0) || (offset_y<0) || (raster->raster_width<0) || (raster->raster_height<0) || (raster->source_step_x<0) || (raster->source_step_y<0)) { epr_set_err(e_err_invalid_value, "epr_read_band_raster: all digit parameter must be positive"); return epr_get_last_err_code(); } /* removed because the source_step_x can truly be greater than raster_width. if ((raster->source_step_x>raster->raster_width) || (raster->source_step_y>raster->raster_height)) { epr_set_err(e_err_invalid_value, "epr_read_band_raster: too small raster sizes or large steps"); return epr_get_last_err_code(); } */ product_id = band_id->product_id; dataset_id = band_id->dataset_ref.dataset_id; rec_type = dataset_id->dsd->ds_type; if (strcmp(rec_type, "M") == 0) { if (epr_read_band_measurement_data(band_id, offset_x, offset_y, raster) != 0) { epr_set_err(e_err_file_read_error, "epr_read_band_raster: unsuccessfully reading band measurement data"); return epr_get_last_err_code(); } if (band_id->bm_expr != NULL) { EPR_SRaster* bm_raster; int rd_bm; bm_raster = epr_create_raster(e_tid_uchar, /*was char*/ raster->source_width, raster->source_height, raster->source_step_x, raster->source_step_y); rd_bm = epr_read_bitmask_raster(product_id, band_id->bm_expr, offset_x, offset_y, bm_raster); epr_zero_invalid_pixels(raster, bm_raster); epr_free_raster(bm_raster); } } else if (strcmp(rec_type, "A") == 0) { if (epr_read_band_annotation_data (band_id, offset_x, offset_y, raster) == 1) { epr_set_err(e_err_file_read_error, "epr_read_band_raster: unsuccessfully reading band annotation data"); return epr_get_last_err_code(); } } else { epr_set_err(e_err_invalid_value, "epr_read_band_raster: illegat DS-TYPE; 'A' or'M' will be accepted"); return epr_get_last_err_code(); } return e_err_none; } /** * Reads the measurement data and converts its into physical values. * * @param band_id the information about properties and quantities of ENVISAT data. * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster the instance to the buffer information was used * * @return zero for success, an error code otherwise */ int epr_read_band_measurement_data(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster) { EPR_SProductId* product_id = NULL; const EPR_SField* field = NULL; EPR_SFieldInfo* field_info = NULL; EPR_SDatasetId* dataset_id = NULL; EPR_SRecord* record = NULL; EPR_SRecord* sph_record = NULL; EPR_EDataTypeId band_datatype, datatype_id; EPR_ESampleModel band_smod; uint rec_size; uint rec_numb; int iY, raster_pos, delta_raster_pos; int offset_x_mirrored = 0; uint scan_line_length; EPR_FLineDecoder decode_func; uint scene_width; product_id = band_id->product_id; if (strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) == 0) { sph_record = product_id->sph_record; field = epr_get_field(sph_record, "LINE_LENGTH"); scan_line_length = epr_get_field_elem_as_uint(field, 0); } else if (strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) == 0) { scan_line_length = EPR_ATS_LINE_LENGTH; } else if (strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) == 0) { scan_line_length = epr_get_scene_width(product_id); } else if (strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) == 0) { scan_line_length = epr_get_scene_width(product_id); } else { epr_set_err(e_err_illegal_arg, "epr_read_band_measurement_data: scan line length unknown"); return epr_get_last_err_code(); } dataset_id = band_id->dataset_ref.dataset_id; /*the length of measurement record size*/ rec_size = dataset_id->dsd->dsr_size; /*the number of measurement records*/ rec_numb = dataset_id->dsd->num_dsr; /*data type in the band*/ band_datatype = band_id->data_type; /*data model in the band*/ band_smod = band_id->sample_model; record = epr_create_record(dataset_id); field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(record->info->field_infos, band_id->dataset_ref.field_index - 1); datatype_id = field_info->data_type_id; /* if the user raster (or part of) is outside bbox in source coordinates*/ if (offset_x + raster->raster_width > (int)scan_line_length) { epr_set_err(e_err_illegal_arg, "epr_read_band_measurement_data: raster x co-ordinates out of bounds"); epr_free_record(record); return epr_get_last_err_code(); } if (offset_y + raster->raster_height > (int)(rec_numb)) { epr_set_err(e_err_illegal_arg, "epr_read_band_measurement_data: raster y co-ordinates out of bounds"); epr_free_record(record); return epr_get_last_err_code(); } raster_pos = 0; delta_raster_pos = (int)floor((raster->source_width - 1) / raster->source_step_x) + 1; /*select the correspondent function to scaling and transform data type*/ decode_func = select_line_decode_function(band_datatype, band_smod, datatype_id); if (decode_func == NULL) { epr_set_err(e_err_illegal_data_type, "epr_read_band_measurement_data: internal error: unknown data type"); epr_free_record(record); return epr_get_last_err_code(); } scene_width = band_id->product_id->scene_width; if (band_id->lines_mirrored) { offset_x_mirrored = (scene_width - 1) - (offset_x + raster->source_width - 1); } else { offset_x_mirrored = offset_x; } for (iY = offset_y; (uint)iY < offset_y + raster->source_height; iY += raster->source_step_y ) { /*get the next record by the given name*/ record = epr_read_record(dataset_id, iY, record); if (record == NULL) { return epr_get_last_err_code(); } /*get the field at its number*/ field = epr_get_field_at(record, band_id->dataset_ref.field_index - 1); /*get the scaled "line" of physical values*/ decode_func(field->elems, band_id, offset_x_mirrored, raster->source_width, raster->source_step_x, raster->buffer, raster_pos); /*locate "data point" for the next "line"*/ raster_pos += delta_raster_pos; } if (band_id->lines_mirrored) { if (band_datatype == e_tid_float) { mirror_float_array((float*)raster->buffer, raster->raster_width, raster->raster_height); } else if (band_datatype == e_tid_uchar || band_datatype == e_tid_char) { mirror_uchar_array((uchar*)raster->buffer, raster->raster_width, raster->raster_height); } else if (band_datatype == e_tid_ushort || band_datatype == e_tid_short) { mirror_ushort_array((ushort*)raster->buffer, raster->raster_width, raster->raster_height); } else if (band_datatype == e_tid_uint || band_datatype == e_tid_int) { mirror_uint_array((uint*)raster->buffer, raster->raster_width, raster->raster_height); } else { epr_set_err(e_err_illegal_data_type, "epr_read_band_measurement_data: internal error: unknown data type"); epr_free_record(record); return epr_get_last_err_code(); } } epr_free_record(record); return 0; } /** * Reads the annotation data and converts its into physical values. * * @param band_id the information about properties and quantities of ENVISAT data. * @param offset_x X-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param offset_y Y-coordinate in pixel co-ordinates (zero-based) of the upper right corner raster to search * @param raster the instance to the buffer information was used * * @return zero for success, an error code otherwise */ int epr_read_band_annotation_data(EPR_SBandId* band_id, int offset_x, int offset_y, EPR_SRaster* raster) { EPR_SProductId* product_id = NULL; const EPR_SField* field = NULL; const EPR_SField* field_beg = NULL; const EPR_SField* field_end = NULL; EPR_SFieldInfo* field_info = NULL; EPR_SDatasetId* dataset_id = NULL; EPR_SRecord* record = NULL; EPR_SRecord* record_beg = NULL; EPR_SRecord* record_end = NULL; EPR_SRecord* sph_record = NULL; EPR_EDataTypeId band_datatype = 0, datatype_id = 0; EPR_ESampleModel band_smod = 0; uint rec_size = 0; uint rec_numb = 0; uint lines_per_tie_pt, samples_per_tie_pt, scan_line_length; int iY, raster_pos, delta_raster_pos; EPR_FArrayTransformer transform_array_func = NULL; int y_beg, y_end, y_beg_old, y_end_old; int offset_x_mirrored = 0; uint num_elems = 0; float y_mod = 0; float scan_offset_x = 0; float scan_offset_y = 0; void* line_beg_buffer = NULL; void* line_end_buffer = NULL; product_id = band_id->product_id; dataset_id = band_id->dataset_ref.dataset_id; /*the length of annotation record size*/ rec_size = dataset_id->dsd->dsr_size; /*the number of annotation records*/ rec_numb = dataset_id->dsd->num_dsr; /*data type in the band*/ band_datatype = band_id->data_type; /*data model in the band*/ band_smod = band_id->sample_model; record = epr_create_record(dataset_id); field_info = (EPR_SFieldInfo*)epr_get_ptr_array_elem_at(record->info->field_infos, band_id->dataset_ref.field_index - 1); datatype_id = field_info->data_type_id; /*find LINES_PER_TIE_PT & SAMPLES_PER_TIE_PT for different products*/ if (strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) == 0) { /*elements number in the band (e.g.71)*/ scan_offset_x = 0.0F; /*!! was 0.5F !!*/ scan_offset_y = 0.0F; /*!! was 0.5F !!*/ num_elems = field_info->num_elems; sph_record = product_id->sph_record; field = epr_get_field(sph_record, "LINES_PER_TIE_PT"); lines_per_tie_pt = epr_get_field_elem_as_uint(field, 0); field = epr_get_field(sph_record, "SAMPLES_PER_TIE_PT"); samples_per_tie_pt = epr_get_field_elem_as_uint(field, 0); field = epr_get_field(sph_record, "LINE_LENGTH"); scan_line_length = epr_get_field_elem_as_uint(field, 0); } else if (strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) == 0) { scan_offset_y = 0.0F; /*!! EPR-7: was 0.5F !!*/ scan_line_length = EPR_ATS_LINE_LENGTH; lines_per_tie_pt = EPR_AATSR_LINES_PER_TIE_PT; num_elems = field_info->num_elems; if (num_elems == EPR_ATS_NUM_PER_POINT_ACROSS_LOCAT) { scan_offset_x = -19.0F; samples_per_tie_pt = 25; } else if (num_elems == EPR_ATS_NUM_PER_POINT_ACROSS_SOLAR) { scan_offset_x = 6.0F; samples_per_tie_pt = 50; } else { epr_set_err(e_err_invalid_value, "epr_read_band_annotation_data: internal error: illegal value for samples_per_tie_pt"); epr_free_record(record); return epr_get_last_err_code(); } } else if ((strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) == 0) || (strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) == 0)) { EPR_SDatasetId* dataset_id = NULL; uint num_rec; scan_offset_x = 0.5F; /* @todo CHECK THIS FOR ASAR! */ scan_offset_y = 0.5F; scan_line_length = epr_get_scene_width(product_id); samples_per_tie_pt = scan_line_length / (EPR_ASAR_NUM_PER_POINT_ACROSS_LOCAT - 1); dataset_id = epr_get_dataset_id(product_id, "GEOLOCATION_GRID_ADS"); num_rec = epr_get_num_records(dataset_id); lines_per_tie_pt = epr_get_scene_height(product_id) / (num_rec - 1); num_elems = field_info->num_elems; } else { epr_set_err(e_err_illegal_arg, "epr_read_band_annotation_data: unhandled ENVISAT product type"); epr_free_record(record); return epr_get_last_err_code(); } /*memory allocate for the increasingly begin tie point line*/ line_beg_buffer = calloc(sizeof(float), num_elems); if (line_beg_buffer == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_band_annotation_data: out of memory"); epr_free_record(record); return epr_get_last_err_code(); } /*memory allocate for the increasingly end tie point line*/ line_end_buffer = calloc(sizeof(float), num_elems); if (line_end_buffer == NULL) { epr_set_err(e_err_out_of_memory, "epr_read_band_annotation_data: out of memory"); epr_free_record(record); free(line_beg_buffer); return epr_get_last_err_code(); } /* if the user raster (or its part) is outside of orbit in source coordinates*/ if (offset_x + raster->raster_width > (int)scan_line_length) { epr_set_err(e_err_illegal_arg, "epr_read_band_data: raster x co-ordinates out of bounds"); epr_free_record(record); free(line_beg_buffer); free(line_end_buffer); return epr_get_last_err_code(); } if (offset_y + raster->raster_height > (int)(rec_numb * lines_per_tie_pt)) { epr_set_err(e_err_illegal_arg, "epr_read_band_data: raster y co-ordinates out of bounds"); epr_free_record(record); free(line_beg_buffer); free(line_end_buffer); return epr_get_last_err_code(); } raster_pos = 0; delta_raster_pos = (int)floor((raster->source_width - 1) / raster->source_step_x) + 1; /*select the correspondent function to scaling and transform data type*/ transform_array_func = select_transform_array_function(band_datatype, datatype_id); if (transform_array_func == NULL) { epr_set_err(e_err_illegal_data_type, "epr_read_band_annotation_data: internal error: illegal data type"); epr_free_record(record); free(line_beg_buffer); free(line_end_buffer); return epr_get_last_err_code(); } y_beg_old = 9999; y_end_old = 9999; if (band_id->lines_mirrored) { offset_x_mirrored = num_elems - (offset_x + raster->source_width - 1) - 1; } else { offset_x_mirrored = offset_x; } for (iY = offset_y; (uint)iY < offset_y + raster->source_height; iY += raster->source_step_y ) { /*find the increasing neighbour begin and end tie point lines*/ y_mod = ((float)iY - scan_offset_y) / lines_per_tie_pt; y_beg = (uint)floor(y_mod); if (y_beg < 0) { y_beg = 0; } if ((uint)y_beg > dataset_id->dsd->num_dsr - 2) { y_beg = dataset_id->dsd->num_dsr - 2; } y_mod -= y_beg; y_end = y_beg + 1; /*as long as between increasing neighbour tie point lines, not to change them*/ if (y_beg_old != y_beg) { record_beg = epr_read_record(dataset_id, y_beg, record_beg); y_beg_old = y_beg; } if (y_end_old != y_end) { record_end = epr_read_record(dataset_id, y_end, record_end); y_end_old = y_end; } /*get the values for the increasing neighbour tie point lines*/ field_beg = epr_get_field_at(record_beg, band_id->dataset_ref.field_index - 1); field_end = epr_get_field_at(record_end, band_id->dataset_ref.field_index - 1); /*transform and scale the values for the increasing neighbour tie point lines*/ transform_array_func(field_beg->elems, band_id, line_beg_buffer, num_elems); transform_array_func(field_end->elems, band_id, line_end_buffer, num_elems); /*get the "line" of interpolated physical values from tie point data*/ decode_tiepoint_band(line_beg_buffer, line_end_buffer, samples_per_tie_pt, num_elems, band_id, offset_x, scan_offset_x, y_mod, raster->source_width, raster->source_step_x, raster->buffer, raster_pos); /*locate "data point" for the next "line"*/ raster_pos += delta_raster_pos; } if (strncmp(EPR_ENVISAT_PRODUCT_MERIS, product_id->id_string, 3) == 0) { mirror_float_array((float*)raster->buffer, raster->raster_width, raster->raster_height); } else { if (strncmp(EPR_ENVISAT_PRODUCT_AATSR, product_id->id_string, 3) == 0) { mirror_float_array((float*)raster->buffer, raster->raster_width, raster->raster_height); } else { if (strncmp(EPR_ENVISAT_PRODUCT_ASAR, product_id->id_string, 3) == 0 && strncmp(product_id->id_string, "ASA_IMG", 7) != 0 && strncmp(product_id->id_string, "ASA_APG", 7) != 0) { mirror_float_array((float*)raster->buffer, raster->raster_width, raster->raster_height); } else { if (strncmp(EPR_ENVISAT_PRODUCT_SAR, product_id->id_string, 3) == 0 && strncmp(product_id->id_string, "SAR_IMG", 7) != 0 && strncmp(product_id->id_string, "SAR_APG", 7) != 0) { mirror_float_array((float*)raster->buffer, raster->raster_width, raster->raster_height); } } } } epr_free_record(record_beg); epr_free_record(record_end); epr_free_record(record); free(line_beg_buffer); free(line_end_buffer); return 0; } uint epr_get_raster_elem_size(const EPR_SRaster* raster) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_elem_size: raster must not be NULL"); return 0; } return raster->elem_size; } void* epr_get_raster_elem_addr(const EPR_SRaster* raster, uint offset) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_elem_addr: raster must not be NULL"); return 0; } return ((uchar*) raster->buffer) + epr_get_raster_elem_size(raster) * offset; } void* epr_get_raster_pixel_addr(const EPR_SRaster* raster, uint x, uint y) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_pixel_addr: raster must not be NULL"); return 0; } return epr_get_raster_elem_addr(raster, y * raster->raster_width + x); } void* epr_get_raster_line_addr(const EPR_SRaster* raster, uint y) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_line_addr: raster must not be NULL"); return 0; } return epr_get_raster_elem_addr(raster, y * raster->raster_width); } uint epr_get_raster_width(EPR_SRaster* raster) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_width: raster must not be NULL"); return 0; } return raster->raster_width; } uint epr_get_raster_height(EPR_SRaster* raster) { if (raster == NULL) { epr_set_err(e_err_invalid_raster, "epr_get_raster_height: raster must not be NULL"); return 0; } return raster->raster_height; } /******************************************************************/ EPR_FLineDecoder select_line_decode_function(EPR_EDataTypeId band_tid, EPR_ESampleModel band_smod, EPR_EDataTypeId raw_tid) { EPR_FLineDecoder decode_func; if ((band_tid == e_tid_char || band_tid == e_tid_uchar) && band_smod == e_smod_1OF1 && (raw_tid == e_tid_char || raw_tid == e_tid_uchar)) decode_func = decode_line_uchar_1_of_1_to_uchar; else if ((band_tid == e_tid_char || band_tid == e_tid_uchar) && band_smod == e_smod_1OF2 && (raw_tid == e_tid_char || raw_tid == e_tid_uchar)) decode_func = decode_line_uchar_1_of_2_to_uchar; else if ((band_tid == e_tid_char || band_tid == e_tid_uchar) && band_smod == e_smod_2OF2 && (raw_tid == e_tid_char || raw_tid == e_tid_uchar)) decode_func = decode_line_uchar_2_of_2_to_uchar; else if ((band_tid == e_tid_short || band_tid == e_tid_ushort) && band_smod == e_smod_1OF1 && (raw_tid == e_tid_short || raw_tid == e_tid_ushort)) decode_func = decode_line_ushort_1_of_1_to_ushort; else if (band_tid == e_tid_float && band_smod == e_smod_1OF1 && raw_tid == e_tid_uchar) decode_func = decode_line_uchar_1_of_1_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_1OF1 && raw_tid == e_tid_char) decode_func = decode_line_char_1_of_1_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_1OF1 && raw_tid == e_tid_ushort) decode_func = decode_line_ushort_1_of_1_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_1OF1 && raw_tid == e_tid_short) decode_func = decode_line_short_1_of_1_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_1OF2 && raw_tid == e_tid_short) decode_func = decode_line_short_1_of_2_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_2OF2 && raw_tid == e_tid_short) decode_func = decode_line_short_2_of_2_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_1OF2 && raw_tid == e_tid_uchar) decode_func = decode_line_uchar_1_of_2_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_2OF2 && raw_tid == e_tid_uchar) decode_func = decode_line_uchar_2_of_2_to_float; else if (band_tid == e_tid_float && band_smod == e_smod_2TOF && raw_tid == e_tid_uchar) decode_func = decode_line_uchar_2_to_f_to_float; else if (band_tid == e_tid_uint && band_smod == e_smod_3TOI && raw_tid == e_tid_uchar) decode_func = decode_line_uchar_3_to_i_to_uint; else { return NULL; } return decode_func; } EPR_FArrayTransformer select_transform_array_function(EPR_EDataTypeId band_tid, EPR_EDataTypeId raw_tid) { EPR_FArrayTransformer transform_array_func; if (band_tid == e_tid_float && raw_tid == e_tid_short) transform_array_func = transform_array_short_to_float; else if (band_tid == e_tid_float && raw_tid == e_tid_ushort) transform_array_func = transform_array_ushort_to_float; else if (band_tid == e_tid_float && raw_tid == e_tid_int) transform_array_func = transform_array_int_to_float; else if (band_tid == e_tid_float && raw_tid == e_tid_uint) transform_array_func = transform_array_uint_to_float; else { return NULL; } return transform_array_func; } void decode_line_uchar_1_of_1_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[x]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[x]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } } void decode_line_char_1_of_1_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; char* sa = (char*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[x]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[x]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } } void decode_line_ushort_1_of_1_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; ushort* sa = (ushort*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[x]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[x]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } } void decode_line_short_1_of_1_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; short* sa = (short*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[x]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[x]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } } void decode_line_short_1_of_2_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; short* sa = (short*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[2 * x]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[2 * x]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)(sa[2 * x]); } } } void decode_line_short_2_of_2_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; short* sa = (short*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * sa[2 * x + 1]); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * sa[2 * x + 1]; } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)(sa[2 * x + 1]); } } } void decode_line_uchar_1_of_1_to_uchar(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; uchar* buf = (uchar*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } void decode_line_uchar_1_of_2_to_uchar(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; uchar* buf = (uchar*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[2 * x]; } } void decode_line_uchar_2_of_2_to_uchar(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; uchar* buf = (uchar*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[2 * x + 1]; } } void decode_line_ushort_1_of_1_to_ushort(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; ushort* sa = (ushort*) source_array; ushort* buf = (ushort*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = sa[x]; } } void decode_line_uchar_2_to_f_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2, shi; uchar* sa = (uchar*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { shi = (((sa[2 * x] & 0xff)) | ((sa[2 * x + 1] & 0xff) << 8)) & 0xffff; buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * shi); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { shi = (((sa[2 * x] & 0xff)) | ((sa[2 * x + 1] & 0xff) << 8)) & 0xffff; buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * shi; } } else { for (x = x1; x <= x2; x += step_x) { shi = (((sa[2 * x] & 0xff)) | ((sa[2 * x + 1] & 0xff) << 8)) & 0xffff; buf[raster_pos++] = (float)shi; } } } void decode_line_uchar_1_of_2_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * (sa[2 * x] & 0xff)); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * (sa[2 * x] & 0xff); } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)(sa[2 * x] & 0xff); } } } void decode_line_uchar_2_of_2_to_float(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2; uchar* sa = (uchar*) source_array; float* buf = (float*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; if (band_id->scaling_method == e_smid_log) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)pow(10, band_id->scaling_offset + band_id->scaling_factor * (sa[2 * x + 1] & 0xff)); } } else if (band_id->scaling_method == e_smid_lin) { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = band_id->scaling_offset + band_id->scaling_factor * (sa[2 * x + 1] & 0xff); } } else { for (x = x1; x <= x2; x += step_x) { buf[raster_pos++] = (float)(sa[2 * x + 1] & 0xff); } } } void decode_line_uchar_3_to_i_to_uint(void* source_array, EPR_SBandId* band_id, int offset_x, int raster_width, int step_x, void* raster_buffer, int raster_pos) { int x, x1, x2, n; uchar* sa = (uchar*) source_array; uint* buf = (uint*) raster_buffer; x1 = offset_x; x2 = x1 + raster_width - 1; for (x = x1; x <= x2; x += step_x) { n = 3 * x; buf[raster_pos++] = (sa[n] & 0xff) << 16 | ((sa[n+1] & 0xff) << 8) | ((sa[n+2] & 0xff) ); } } /** * Computes the physical values for the annotation data. * * @param sa_beg the float array of tie points "before" Y-coordinate of the point to search * @param sa_end the float array of tie points "after" Y-coordinate of the point to search * @param samples_per_tie_pt the "distance" between two neighbour tie points (in scan-line direction) * @param num_elems number of elements in one tie point scan-line * @param band_id the information about properties and quantities of ENVISAT data. * @param offset_x [PIXEL] X-coordinate (0-based) of the upper right raster corner to search * @param y_mod [PIXEL] relative location of the point is being searched for (in flight direction) * @param raster_width [PIXEL] the width of the raster is being searched for * @param s_x [PIXEL] X-step to get the next point (in source coordinates) to search * @param raster_buffer the float user array to be filled with physical values * @param raster_pos the actual "filled" position in raster_buffer-array * */ void decode_tiepoint_band(float* sa_beg, float* sa_end, uint samples_per_tie_pt, uint num_elems, EPR_SBandId* band_id, int offset_x, float scan_offset_x, float y_mod, int raster_width, int s_x, float* raster_buffer, int raster_pos) { int ix; float x_mod; uint x_knot; int inti_flag = 0; int intersection = 0; float circle; float half_circle; float null_point; circle = EPR_LONGI_ABS_MAX - EPR_LONGI_ABS_MIN; half_circle = 0.5F * circle; null_point = 0.5F * (EPR_LONGI_ABS_MAX + EPR_LONGI_ABS_MIN); if (strncmp(band_id->band_name, EPR_LONGI_BAND_NAME, strlen(EPR_LONGI_BAND_NAME)) == 0) { inti_flag = 1; } else { inti_flag = 0; } for (ix = offset_x; ix < offset_x + raster_width; ix += s_x) { x_mod = (ix - scan_offset_x) / samples_per_tie_pt; if (x_mod >= 0.0F) { x_knot = (uint)floor(x_mod); if (x_knot >= num_elems - 1) { x_knot = num_elems - 2; } } else { x_knot = (uint)0; } x_mod -= x_knot; if (inti_flag == 1) { if (fabs((float)(sa_beg[x_knot + 1] - sa_beg[x_knot])) > half_circle || fabs((float)(sa_beg[x_knot] - sa_end[x_knot])) > half_circle || fabs((float)(sa_end[x_knot] - sa_end[x_knot + 1])) > half_circle || fabs((float)(sa_end[x_knot + 1] - sa_beg[x_knot + 1])) > half_circle) { intersection = 1; if (sa_beg[x_knot] < (float)null_point) { sa_beg[x_knot] += circle; } if (sa_beg[x_knot + 1] < (float)null_point) { sa_beg[x_knot + 1] += circle; } if (sa_end[x_knot] < (float)null_point) { sa_end[x_knot] += circle; } if (sa_end[x_knot + 1] < (float)null_point) { sa_end[x_knot + 1] += circle; } } } else { intersection = 0; } raster_buffer[raster_pos] = epr_interpolate2D(x_mod, y_mod, sa_beg[x_knot], sa_beg[x_knot + 1], sa_end[x_knot], sa_end[x_knot + 1]); if (inti_flag == 1 && intersection == 1 && raster_buffer[raster_pos] > EPR_LONGI_ABS_MAX) { raster_buffer[raster_pos] -= circle; } raster_pos++; } } float epr_interpolate2D(float wi, float wj, float x00, float x10, float x01, float x11) { return x00 + wi * (x10 - x00) + wj * (x01 - x00) + wi * wj * (x11 + x00 - x01 - x10); } void transform_array_short_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel) { uint ix; short* sa = (short*) sourceArray; for (ix = 0; ix < nel; ix ++) { raster_buffer[ix] = band_id->scaling_offset + band_id->scaling_factor * sa[ix]; } } void transform_array_ushort_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel) { uint ix; ushort* sa = (ushort*) sourceArray; for (ix = 0; ix < nel; ix ++) { raster_buffer[ix] = band_id->scaling_offset + band_id->scaling_factor * sa[ix]; } } void transform_array_int_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel) { uint ix; int* sa = (int*) sourceArray; for (ix = 0; ix < nel; ix ++) { raster_buffer[ix] = band_id->scaling_offset + band_id->scaling_factor * sa[ix]; } } void transform_array_uint_to_float (void* sourceArray, EPR_SBandId* band_id, float* raster_buffer, uint nel) { uint ix; uint* sa = (uint*) sourceArray; for (ix = 0; ix < nel; ix ++) { raster_buffer[ix] = band_id->scaling_offset + band_id->scaling_factor * sa[ix]; } } void mirror_float_array(float* raster_buffer, uint raster_width, uint raster_height) { uint w, h, pol_w, offset; float tmp; pol_w = raster_width / 2; for (h = 0; h < raster_height; h ++) { for (w = 0; w < pol_w; w ++) { offset = h * raster_width; tmp = raster_buffer[w + offset]; raster_buffer[w + offset] = raster_buffer[raster_width - 1 - w + offset]; raster_buffer[raster_width - 1 - w + offset] = tmp; } } } void mirror_uchar_array(uchar* raster_buffer, uint raster_width, uint raster_height) { uint w, h, pol_w, offset; uchar tmp; pol_w = raster_width / 2; for (h = 0; h < raster_height; h ++) { for (w = 0; w < pol_w; w ++) { offset = h * raster_width; tmp = raster_buffer[w + offset]; raster_buffer[w + offset] = raster_buffer[raster_width - 1 - w + offset]; raster_buffer[raster_width - 1 - w + offset] = tmp; } } } void mirror_ushort_array(ushort* raster_buffer, uint raster_width, uint raster_height) { uint w, h, pol_w, offset; ushort tmp; pol_w = raster_width / 2; for (h = 0; h < raster_height; h ++) { for (w = 0; w < pol_w; w ++) { offset = h * raster_width; tmp = raster_buffer[w + offset]; raster_buffer[w + offset] = raster_buffer[raster_width - 1 - w + offset]; raster_buffer[raster_width - 1 - w + offset] = tmp; } } } void mirror_uint_array(uint* raster_buffer, uint raster_width, uint raster_height) { uint w, h, pol_w, offset; uint tmp; pol_w = raster_width / 2; for (h = 0; h < raster_height; h ++) { for (w = 0; w < pol_w; w ++) { offset = h * raster_width; tmp = raster_buffer[w + offset]; raster_buffer[w + offset] = raster_buffer[raster_width - 1 - w + offset]; raster_buffer[raster_width - 1 - w + offset] = tmp; } } } void epr_zero_invalid_pixels(EPR_SRaster* raster, EPR_SRaster* bm_raster) { uchar* bm_pixels; uint bm_pos = 0; uint bm_len = raster->raster_width * raster->raster_height; assert(bm_raster->data_type == e_tid_char || bm_raster->data_type == e_tid_uchar); bm_pixels = (uchar*) bm_raster->buffer; switch (raster->data_type) { case e_tid_char: case e_tid_uchar: { char* pixels = (char*) raster->buffer; for (bm_pos = 0; bm_pos < bm_len; bm_pos++) { if (bm_pixels[bm_pos] == 0) { pixels[bm_pos] = 0; } } } break; case e_tid_short: case e_tid_ushort: { short* pixels = (short*) raster->buffer; for (bm_pos = 0; bm_pos < bm_len; bm_pos++) { if (bm_pixels[bm_pos] == 0) { pixels[bm_pos] = 0; } } } break; case e_tid_int: case e_tid_uint: { int* pixels = (int*) raster->buffer; for (bm_pos = 0; bm_pos < bm_len; bm_pos++) { if (bm_pixels[bm_pos] == 0) { pixels[bm_pos] = 0; } } } break; case e_tid_float: { float* pixels = (float*) raster->buffer; for (bm_pos = 0; bm_pos < bm_len; bm_pos++) { if (bm_pixels[bm_pos] == 0) { pixels[bm_pos] = 0.0F; } } } break; case e_tid_double: { double* pixels = (double*) raster->buffer; for (bm_pos = 0; bm_pos < bm_len; bm_pos++) { if (bm_pixels[bm_pos] == 0) { pixels[bm_pos] = 0.0; } } } break; default: {} break; } } GMTSAR_V5.7/.svn/pristine/18/18a08baa0a4fe59465a0d09c4a95a555ccc93722.svn-base000444 015705 000000 00000014106 13505462013 025577 0ustar00sandwellwheel000000 000000 #!/bin/csh -f if ($#argv != 4 && $#argv != 6) then echo "" echo "Usage: estimate_ionospheric_phase.csh intf_high intf_low intf_orig intf_to_be_corrected [xratio yratio]" echo "" echo " estimate ionosphere based on split spectrum method in Gomba et. al. 2016" echo " with filtering method in Fattahi et. al. 2017" echo "" echo "Example: estimate_ionospheric_phase.csh ../iono_phase/intf_h ../iono_phase/intf_l ../iono_phase/intf_o" echo "" exit 1 endif set intfH = $1 set intfL = $2 set intfO = $3 set intf = $4 if ($#argv == 3) then set rx = 1 set ry = 1 else set rx = $5 set ry = $6 endif set prm1 = `ls $intfH/*PRM | head -1` set prm2 = `ls $intfH/*PRM | tail -1` set fc = `grep center_freq $intfH/params1 | awk '{print $3}'` set fh = `grep high_freq $intfH/params1 | awk '{print $3}'` set fl = `grep low_freq $intfH/params1 | awk '{print $3}'` set thresh = 0.1 echo "Applying split spectrum result to estimate ionospheric phase ($fh $fl)..." cp $intf/phasefilt.grd ./ph0.grd # determine how much filtering is needed set wavelengh = 20000 set rng_pxl = `grep rng_samp_rate $intfH/$prm1 | head -1 | awk '{printf("%.6f\n",299792458.0/$3/2.0)}'` set prf = `grep PRF $intfH/$prm1 | awk '{print $3}'` set vel = `grep SC_vel $intfH/$prm1 | awk '{print $3}'` set azi_pxl = `echo $vel $prf | head -1 | awk '{printf("%.6f\n",$1/$2)}'` #gmt grdinfo $intfH/phasefilt.grd -C set x_inc = `gmt grdinfo $intfH/phasefilt.grd -C | awk '{print $8}'` set y_inc = `gmt grdinfo $intfH/phasefilt.grd -C | awk '{print $9}'` #echo $wavelengh $rng_pxl $x_inc $rx #echo $wavelengh $azi_pxl $y_inc $ry set filtx = `echo $wavelengh $rng_pxl $x_inc $rx | awk '{print int($1*$4/$2/$3/2)*2+1}'` set filty = `echo $wavelengh $azi_pxl $y_inc $ry | awk '{print int($1*$4/$2/$3/2)*2+1}'` set filt_incx = `echo $filtx | awk '{print int($1/8)}'` set filt_incy = `echo $filty | awk '{print int($1/8)}'` echo "Filtering size is set to $filtx along range and $filty along azimuth ..." set limit = `echo $fh $fl | awk '{printf("%.3f",$1*$2/($1*$1-$2*$2)*3.1415926)}'` # start ionospheric phase estimate cp $intfH/unwrap.grd ./up_h.grd cp $intfL/unwrap.grd ./up_l.grd cp $intfO/unwrap.grd ./up_o.grd # correct for unwrapping errors gmt grdmath up_h.grd up_o.grd SUB = tmp.grd set ch = `gmt grdinfo tmp.grd -L1 -C | awk '{if ($12 >=0) printf("%d\n",int($12/6.2831853072+0.5)); else printf("%d\n",int($12/6.2831853072-0.5))}'` echo "Correcting high passed phase by $ch * 2PI ..." gmt grdmath up_h.grd $ch 2 PI MUL MUL SUB = tmp.grd mv tmp.grd up_h.grd gmt grdmath up_l.grd up_o.grd SUB = tmp.grd set cl = `gmt grdinfo tmp.grd -L1 -C | awk '{if ($12 >=0) printf("%d\n",int($12/6.2831853072+0.5)); else printf("%d\n",int($12/6.2831853072-0.5))}'` echo "Correcting high passed phase by $cl * 2PI ..." gmt grdmath up_l.grd $cl 2 PI MUL MUL SUB = tmp.grd mv tmp.grd up_l.grd gmt grdmath up_h.grd up_l.grd ADD up_o.grd 2 MUL SUB = tmp.grd gmt grdmath tmp.grd 2 PI MUL DIV ABS 0.2 GE 1 SUB -1 MUL 0 NAN = mask_up.grd gmt grdmath up_h.grd mask_up.grd MUL = tmp.grd gmt grdfilter tmp.grd -Dp -Fm21/21 -Gup_h.grd -V -Nr gmt grdmath up_l.grd mask_up.grd MUL = tmp.grd gmt grdfilter tmp.grd -Dp -Fm21/21 -Gup_l.grd -V -Nr gmt grdmath $intfH/corr.grd $intfL/corr.grd ADD 2 DIV 0 DENAN $thresh GE 0 NAN 0 MUL 1 ADD mask_up.grd MUL = mask.grd gmt grdmath $intfH/corr.grd $intfL/corr.grd ADD 2 DIV 0 DENAN $thresh GE 0 NAN ISNAN 1 SUB -1 MUL mask_up.grd 0 DENAN MUL = mask1.grd gmt grdmath mask1.grd 1 SUB -1 MUL = mask2.grd gmt grdmath $fh $fc DIV up_l.grd MUL $fl $fc DIV up_h.grd MUL SUB $fl $fh MUL $fh $fh MUL $fl $fl MUL SUB DIV MUL = tmp_ph0.grd gmt grdmath tmp_ph0.grd mask.grd MUL = tmp_ph.grd cp tmp_ph.grd tmp_ph1.grd set mm = `gmt grdinfo tmp_ph1.grd -L1 -C | awk '{print $12}'` gmt grdmath tmp_ph0.grd $mm $limit ADD LE = tmp1.grd gmt grdmath tmp_ph0.grd $mm $limit SUB GE = tmp2.grd gmt grdmath tmp1.grd tmp2.grd MUL 0 NAN mask.grd MUL = tmp.grd mv tmp.grd mask.grd gmt grdmath tmp1.grd tmp2.grd MUL 0 NAN ISNAN 1 SUB -1 MUL mask1.grd MUL 0 DENAN = tmp.grd mv tmp.grd mask1.grd gmt grdmath tmp_ph0.grd mask.grd MUL = tmp_ph.grd gmt grdmath mask1.grd 1 SUB -1 MUL = mask2.grd nearest_grid tmp_ph.grd tmp_ph_interp.grd #foreach iteration (1 2 3 4 5 ) foreach iteration (1 2 3) set odd = `echo $iteration | awk '{if ($1%2==0) print 0;else print 1}'` if ($odd == 1) then gmt grdfilter tmp_ph_interp.grd -Dp -Fm$filtx/$filty -Gtmp_filt.grd -V -Ni -I$filt_incx/$filt_incy else gmt grdfilter tmp_ph_interp.grd -Dp -Fb$filtx/$filty -Gtmp_filt.grd -V -Ni -I$filt_incx/$filt_incy endif gmt grd2xyz tmp_filt.grd -s | gmt surface -Rtmp_ph0.grd -T0.5 -Gtmp.grd mv tmp.grd tmp_filt.grd #gmt grdfilter tmp_ph_interp.grd -Dp -Fb$filt -Gtmp_filt.grd -V -Ni -I$inc #gmt grdsample tmp_filt.grd -Rmask.grd -Gtmp.grd #mv tmp.grd tmp_filt.grd cp tmp_filt.grd tmp_$iteration.grd gmt grdmath tmp_filt.grd mask.grd MUL = tmp.grd nearest_grid tmp.grd tmp2.grd gmt grdmath tmp2.grd mask2.grd MUL tmp_ph0.grd 0 DENAN mask1.grd MUL ADD = tmp_ph_interp.grd #exit 1 end # needs to be improved set RR = `gmt grdinfo -I- ph0.grd` set II = `gmt grdinfo -I tmp_ph0.grd` gmt grdfilter tmp_ph_interp.grd -Dp -Fb$filtx/$filty -Gtmp_filt.grd -V -Ni -I$filt_incx/$filt_incy gmt grd2xyz tmp_filt.grd -s | gmt surface $RR $II -Gtmp.grd mv tmp.grd tmp_filt.grd #gmt grdfilter tmp_ph_interp.grd -Dp -Fb$filt -Gtmp_filt.grd -V -Ni -I$inc #gmt grdsample tmp_filt.grd -Rmask.grd -Gtmp.grd #mv tmp.grd tmp_filt.grd gmt grdmath tmp_filt.grd PI ADD 2 PI MUL MOD PI SUB = tmp_ph.grd cp tmp_ph.grd ph_iono.grd gmt grdsample tmp_filt.grd -Rph0.grd -Gtmp.grd gmt grdmath ph0.grd tmp.grd SUB PI ADD 2 PI MUL MOD PI SUB = ph_corrected.grd set cc = `gmt grdinfo ph_corrected.grd -L1 -C | awk '{if ($12 >=0) printf("%d\n",int($12/3.141592653+0.5)); else printf("%d\n",int($12/3.141592653-0.5))}'` echo "Correcting iono phase by $cc PI ..." gmt grdmath tmp_filt.grd $cc PI MUL ADD = tmp_ph.grd gmt grdmath tmp_ph.grd PI ADD 2 PI MUL MOD PI SUB = ph_iono.grd gmt grdsample tmp_ph.grd -Rph0.grd -Gtmp.grd gmt grdmath ph0.grd tmp.grd SUB PI ADD 2 PI MUL MOD PI SUB = ph_corrected.grd mv tmp_ph.grd ph_iono_orig.grd #rm tmp*.grd GMTSAR_V5.7/.svn/pristine/18/18cc894c6758f9784fe5446aa84aa1911ab653af.svn-base000444 015705 000000 00000001232 13505462014 025552 0ustar00sandwellwheel000000 000000 /* main include file for read_SAR_tape */ /* R. Mellors August 1997 */ /* defines structures used in reading SAR tapes */ /*----------------------------*/ #include "sardata.h" #include "sarleader_dss.h" #include "sarleader_fdr.h" #include "sarleader_platform.h" #include "write_dss.h" #include "write_fdr_fixseg.h" #include "write_fdr_varseg.h" #include "write_platform.h" struct SAR_info { struct sarleader_dss *dss; struct sarleader_dpaf_dss *dpaf_dss; struct sarleader_fdr_fixseg *fixseg; struct sarleader_fdr_varseg *varseg; struct platform *platform; struct position_vector *position; struct sardata_header *dataheader; struct sardata_rec *datarec; }; GMTSAR_V5.7/.svn/pristine/20/20c2bc32fe097c4c6cf9faefa3c2d92de2bb0178.svn-base000444 015705 000000 00000000545 13505462013 026152 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter oriented along the San % Andreas fault % clear sigx=0.6; sigy=3; theta=30.*pi/180. cost=cos(theta); sint=sin(theta); nx=7; ny=15; xp=((-nx/2:(nx/2-1))+.5); yp=((-ny/2:(ny/2-1))+.5); x2=(xp*cost+yp*sint).^2; y2=(-xp*cost+yp*sint).^2; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); GMTSAR_V5.7/.svn/pristine/20/20b985c8606ce31b35f7a5d290af9b1e55b6da70.svn-base000444 015705 000000 00000007220 13505462013 025577 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_CSK.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 200m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/0/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/.svn/pristine/c6/c6575b1766e7cb095190dfd2f3788a7f68db0318.svn-base000444 015705 000000 00000033704 13505462013 025564 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu, Feb 26 2016 # Take previous code, make it work with multiple frames # Take previous code, make it work with bursts mismatch # Preprocess and align tops image stacks # used for time series analysis # Xiaohua(Eric) Xu, Jan 19 2016 # if ($#argv != 3) then echo "" echo "Usage: preproc_tops_batch.csh data.in dem.grd mode" echo " preprocess and align a set of tops images in data.in, precise orbits required" echo "" echo " format of data.in:" echo " image_name:orbit_name" echo "" echo " example of data.in" echo " s1a-iw1-slc-vv-20150626...001:s1a-iw1-slc-vv-20150626...001:s1a-iw1-slc-vv-20150626...001:S1A_OPER_AUX_POEORB_V20150601_20150603.EOF" echo " s1a-iw1-slc-vv-20150715...001:s1a-iw1-slc-vv-20150715...001:s1a-iw1-slc-vv-20150715...001:S1A_OPER_AUX_POEORB_V20150625_20150627.EOF" echo "" echo " outputs:" echo " baseline.ps align_table.ra (contains info for precise geomatric alignment)" echo " *.PRM *.LED *.SLC(mode 2)" echo "" echo " Note:" echo " The names must be in time order in each line to be stitched together" echo "" exit 1 endif # set up some parameters set mode = $3 set sl = `echo "1"` # sample the dem if ($mode == 2) then gmt grdfilter $2 -D2 -Fg2 -I12s -Gflt.grd gmt grd2xyz --FORMAT_FLOAT_OUT=%lf flt.grd -s > topo.llt endif # first line is the super-master, all images aligned to it set master = `awk -F: 'NR==1 {print $1}' $1 | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set mmaster = `awk -F: 'NR==1 {print $1}' $1 | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` # clean up a little bit rm *.PRM* *.SLC *.LED *tmp* if (-f baseline_table.dat) rm baseline_table.dat if (-f masterlist) rm masterlist set sharedir = `gmtsar_sharedir.csh` # loop over all the acquisitions foreach line (`awk '{print $0}' $1`) # record the first one as the stem_master set stem_master = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` set m_stem_master = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` if($mode == 1) then # for mode 1, generate baseline_plots set image = `echo $line | awk -F: '{print $1}'` set orbit = `echo $line | awk -F: '{print $NF}'` # generate prms and leds make_s1a_tops $image.xml $image.tiff $m_stem_master 0 ext_orb_s1a $m_stem_master.PRM $orbit $m_stem_master # get the height and baseline info cp $m_stem_master.PRM junk1 calc_dop_orb junk1 junk2 0 0 cat junk1 junk2 > $m_stem_master.PRM baseline_table.csh $mmaster.PRM $m_stem_master.PRM >> baseline_table.dat baseline_table.csh $mmaster.PRM $m_stem_master.PRM GMT >> table.gmt # clean up the mess rm junk1 junk2 else if($mode == 2) then # for mode 2, stitch and align all the images # find the files to be stitched echo $line | awk -F: '{for (i=1;i tmp.filelist set orbit = `echo $line | awk -F: '{print $NF}'` if (-f tmp.stitchlist) then rm tmp.stitchlist endif set tmp_da = 0 # loop over all the files in this line rm *par* set count = 0 foreach file (`awk '{print $0}' tmp.filelist`) # generate prms and leds set count = `echo $count | awk '{print $1+1}'` set stem = `echo $file | awk '{ print "S1_"substr($1,16,8)"_"substr($1,25,6)"_F"substr($1,7,1)}'` # get images aligned if($sl == 1) then # sl=1 means processing the super_master image, simpley generate images and stitch them together make_s1a_tops $file.xml $file.tiff $stem 1 make_s1a_tops $file.xml $file.tiff $stem 2 ext_orb_s1a $stem.PRM $orbit $stem echo $stem >> masterlist echo $stem >> tmp.stitchlist else # sl>1 measn processing slave images, point-by-point alignment and corregistration is required make_s1a_tops $file.xml $file.tiff $stem 0 ext_orb_s1a $stem.PRM $orbit $stem # compute the time difference between first frame and the rest frames set tmp_master = `awk 'NR == '$count' {print $0}' < masterlist` if ($tmp_master == "") set tmp_master = `awk 'NR == '$count'-1 {print $0}' < masterlist` if ($tmp_master == "") set tmp_master = `awk 'NR == '$count'-2 {print $0}' < masterlist` cp $tmp_master.PRM tmp.PRM set t1 = `grep clock_start $master.PRM | grep -v SC_clock_start | awk '{printf("%.13f", $3)}'` set t2 = `grep clock_start $tmp_master.PRM | grep -v SC_clock_start | awk '{printf("%.13f", $3)}'` set prf = `grep PRF $master.PRM | awk '{printf("%.6f",$3)}'` set nl = `echo $t1 $t2 $prf | awk '{printf("%d",($2 - $1)*$3*86400.0+0.2)}'` # compute whether there are any image offset if ($tmp_da == 0) then cp tmp.PRM junk1.PRM cp $stem.PRM junk2.PRM calc_dop_orb junk1.PRM junk $earth_radius 0 cat junk >> junk1.PRM calc_dop_orb junk2.PRM junk $earth_radius 0 cat junk >> junk2.PRM set lontie = `SAT_baseline junk1.PRM junk2.PRM | grep lon_tie_point | awk '{print $3}'` set lattie = `SAT_baseline junk1.PRM junk2.PRM | grep lat_tie_point | awk '{print $3}'` set tmp_am = `echo $lontie $lattie 0 | SAT_llt2rat tmp.PRM 1 | awk '{print $2}'` set tmp_as = `echo $lontie $lattie 0 | SAT_llt2rat $stem.PRM 1 | awk '{print $2}'` set tmp_da = `echo $tmp_am $tmp_as | awk '{printf("%d",$2 - $1)}'` rm junk1.PRM junk2.PRM junk endif # in case the images are offset by more than a burst, shift the super-master's PRM again so SAT_llt2rat gives precise estimate if ($tmp_da > -1000 && $tmp_da < 1000) then cp tmp.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > tmp.PRM cp $stem.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > $stem.PRM rm junk1 junk2 SAT_llt2rat tmp.PRM 1 < topo.llt > tmpm.dat & SAT_llt2rat $stem.PRM 1 < topo.llt > tmp1.dat & wait else echo "Modifying master PRM by $tmp_da lines..." set prf = `grep PRF tmp.PRM | awk '{print $3}'` set ttmp = `grep clock_start tmp.PRM | grep -v SC_clock_start | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_start $ttmp set ttmp = `grep clock_stop tmp.PRM | grep -v SC_clock_stop | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM clock_stop $ttmp set ttmp = `grep SC_clock_start tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_start $ttmp set ttmp = `grep SC_clock_stop tmp.PRM | awk '{print $3}' | awk '{printf ("%.12f",$1 - '$tmp_da'/'$prf'/86400.0)}'` update_PRM tmp.PRM SC_clock_stop $ttmp cp tmp.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > tmp.PRM cp $stem.PRM junk1 calc_dop_orb junk1 junk2 $earth_radius 0 cat junk1 junk2 > $stem.PRM rm junk1 junk2 #SAT_llt2rat tmp.PRM 1 < topo.llt > tmp_tmp.dat & SAT_llt2rat tmp.PRM 1 < topo.llt > tmpm.dat & SAT_llt2rat $stem.PRM 1 < topo.llt > tmp1.dat & wait endif # get r, dr, a, da, SNR table to be used by fitoffset.csh paste tmpm.dat tmp1.dat | awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $6 - $1, $2, $7 - $2, "100")}' > tmp.dat set rmax = `grep num_rng_bins $stem.PRM | awk '{print $3}'` set amax = `grep num_lines $stem.PRM | awk '{print $3}'` awk '{if($1 > 0 && $1 < '$rmax' && $3 > 0 && $3 < '$amax') print $0 }' < tmp.dat > offset.dat # prepare the offset parameters for the stitched image if ($tmp_da > -1000 && $tmp_da < 1000) then awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 + '$nl', $4, $5)}' < offset.dat >> par_tmp.dat else awk '{printf("%.6f %.6f %.6f %.6f %d\n", $1, $2, $3 + '$nl' - '$tmp_da', $4 + '$tmp_da', $5)}' < offset.dat >> par_tmp.dat endif # prepare the rshift and ashift look up table to be used by make_s1a_tops awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$2) }' < offset.dat > r.xyz awk '{ printf("%.6f %.6f %.6f \n",$1,$3,$4) }' < offset.dat > a.xyz gmt blockmedian r.xyz -R0/$rmax/0/$amax -I8/4 -r -bo3d > rtmp.xyz gmt blockmedian a.xyz -R0/$rmax/0/$amax -I8/4 -r -bo3d > atmp.xyz gmt surface rtmp.xyz -bi3d -R0/$rmax/0/$amax -I8/4 -Grtmp.grd -T0.5 -N1000 -r & gmt surface atmp.xyz -bi3d -R0/$rmax/0/$amax -I8/4 -Gatmp.grd -T0.5 -N1000 -r & wait gmt grdmath rtmp.grd FLIPUD = r.grd gmt grdmath atmp.grd FLIPUD = a.grd # generate the image with point-by-point shifts make_s1a_tops $file.xml $file.tiff $stem 2 r.grd a.grd if ($tmp_da > -1000 && $tmp_da < 1000) then spectral_diversity $tmp_master $stem 0 $sharedir/filters/gauss25x7 > tmp else spectral_diversity $tmp_master $stem $tmp_da $sharedir/filters/gauss25x7 > tmp endif set spec_sep = `grep spectral_spectrationXdta tmp | awk '{print $3}'` awk '{print $3}' < ddphase > tmp2 if ($mode == 2) then set res_shift = `sort -n tmp2 | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }' | awk '{print $1/2.0/3.141592653/'$spec_sep'}'` echo "Updating azimuth shift with mapping the residual da ...(mapping $res_shift)" awk '{print $1,$2,$3}' < ddphase > test gmt blockmedian test -R0/$rmax/0/$amax -I400/100 | gmt greenspline -Gtest.grd -R0/$rmax/0/$amax -I400/100 -D1 -Cn900 -r -V gmt grdfilter test.grd -D0 -Fg8000/1500 -Gtest2.grd -V gmt grdsample test2.grd -Gtest_b.grd -Ra.grd -nc gmt grdmath test_b.grd FLIPUD $spec_sep DIV 2 PI MUL DIV = res_shift.grd gmt grdmath a.grd res_shift.grd ADD = tmp.grd mv tmp.grd a.grd mv tmp spec_div_output rm test* else if ($mode == 1) then set res_shift = `sort -n tmp2 | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }' | awk '{print $1/2.0/3.141592653/'$spec_sep'}'` else set res_shift = `grep residual_shift tmp | awk '{print $3}'` endif echo "Updating azimuth shift with a constant...(medain $res_shift)" gmt grdmath a.grd $res_shift ADD = tmp.grd mv tmp.grd a.grd endif set res_shift = `sort -n tmp2 | awk ' { a[i++]=$1; } END { print a[int(i/2)]; }' | awk '{print $1/2.0/3.141592653/'$spec_sep'}'` echo "Updating ashift table with spectral diversity estimate ($res_shift)..." gmt grdmath a.grd $res_shift ADD = tmp.grd mv tmp.grd a.grd make_s1a_tops $file.xml $file.tiff $stem 1 r.grd a.grd mv r.grd $stem"_r.grd" mv a.grd $stem"_a.grd" # need to update shift parameter so stitch_tops will know how to stitch fitoffset.csh 3 3 offset.dat >> $stem.PRM #fitoffset.csh 1 1 offset.dat >> $stem.PRM echo $stem >> tmp.stitchlist endif end set nf = `wc -l tmp.stitchlist | awk '{print $1}'` # get the name for stitched file set stem = `echo $line | awk -F: '{print $1}' | awk '{ print "S1_"substr($1,16,8)"_ALL_F"substr($1,7,1)}'` # stitch images together and get the precise orbit if ($nf > 1) then stitch_tops tmp.stitchlist $stem else set tmp_stem = `cat tmp.stitchlist` cp $tmp_stem.PRM $stem.PRM cp $tmp_stem.LED $stem.LED mv $tmp_stem.SLC $stem.SLC update_PRM $stem.PRM input_file $stem.raw update_PRM $stem.PRM SLC_file $stem.SLC update_PRM $stem.PRM led_file $stem.LED endif ext_orb_s1a $stem.PRM $orbit $stem # for images except the super-master if ($sl != 1) then cp $stem.PRM $stem.PRM0 #if ($bshift != 0) echo "Updated shift caused by burst offset is $bshift" if ($tmp_da > -1000 && $tmp_da < 1000) then update_PRM $stem.PRM ashift 0 else update_PRM $stem.PRM ashift $tmp_da echo "Restoring $tmp_da lines shift to the image..." endif update_PRM $stem.PRM rshift 0 resamp $mmaster.PRM $stem.PRM $stem.PRMresamp $stem.SLCresamp 1 mv $stem.PRMresamp $stem.PRM mv $stem.SLCresamp $stem.SLC fitoffset.csh 3 3 par_tmp.dat >> $stem.PRM endif cp $stem.PRM junk1 if ($sl == 1) then calc_dop_orb junk1 junk2 0 0 set earth_radius = `grep earth_radius junk2 | awk '{print $3}'` else calc_dop_orb junk1 junk2 $earth_radius 0 endif cat junk1 junk2 > $stem.PRM rm junk1 junk2 set sl = `echo $sl | awk '{print $1+1}'` endif end # for mode 1, plot the time-baseline figure if($mode == 1) then awk '{print 2014+$1/365.25,$2,$7}' < table.gmt > text set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-50, $4+50}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > baseline.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba0.5:"year":/a50g00f25:"baseline (m)":WSen -O >> baseline.ps rm text text2 table.gmt endif # clean up a little bit if($mode == 2) rm tmp* topo.llt flt.grd atmp* rtmp* *SLCL *SLCH *BB GMTSAR_V5.7/.svn/pristine/c6/c6b0f31a105348fb3bd6f1b8cd154458c25c6e1c.svn-base000444 015705 000000 00000011534 13505462013 025733 0ustar00sandwellwheel000000 000000 /* $Id cut_slc.c 2018-08 Xiaohua XU$ */ /*************************************************************************** * cut coregistered slc to a smaller area * **************************************************************************/ /*************************************************************************** * Creator: Xiaohua Xu * * (Scripps Institution of Oceanography) * * Date : 07/11/2018 * **************************************************************************/ /*************************************************************************** * Modification history: * * DATE * * * ***************************************************************************/ #include "gmtsar.h" #include #include char *USAGE = "\nUsage: " "cut_slc stem.PRM new_stem range\n" " stem.PRM - PRM file for coregistered image to be cut\n" " new_stem - stem for newly generated SLC and PRM file\n" " range - range to cut the SLC e.g. 500/1500/900/3600\n" "\n" "Output: new_stem.PRM new_stem.SLC (old .LED file can still be used)\n\n"; int get_range(char *str, int *xl, int *xh, int *yl, int *yh) { int ii = 0, jj = 0, kk = 0, rr[4]; char c; char tmp_c[128]; c = str[ii]; while (c != '\0') { if (c != '/') { tmp_c[jj] = c; jj++; } else if (c == '/') { tmp_c[jj] = '\0'; rr[kk] = atoi(tmp_c); jj = 0; kk++; } ii++; c = str[ii]; } tmp_c[jj] = c; rr[kk] = atoi(tmp_c); *xl = rr[0]; *xh = rr[1]; *yl = rr[2]; *yh = rr[3]; return (1); } int main(int argc, char **argv) { int ii, jj, xl, xh, yl, yh, nl, nr; short *buf_in, *buf_out; struct PRM pp; FILE *SLC_in, *SLC_out, *PRM_out; char str[1024]; double dr; if (argc < 3) die(USAGE, ""); get_prm(&pp, argv[1]); // xl = 0; xh = pp.num_rng_bins-1; // yl = 0; yh = pp.num_patches*num_valid_az-1; get_range(argv[3], &xl, &xh, &yl, &yh); nl = pp.num_patches * pp.num_valid_az; nr = pp.num_rng_bins; // printf("%d %d %d %d %d %d // %d\n",xl,xh,yl,yh,pp.num_rng_bins,pp.num_patches,pp.num_valid_az); if (xl < 0 || xl > xh || xh > nr - 1 || yl < 0 || yl > yh || yh > nl - 1) die("wrong range ", ""); if ((SLC_in = fopen(pp.SLC_file, "rb")) == NULL) die("Can't open SLCfile", pp.SLC_file); strcpy(str, argv[2]); // str[strlen(str)-3] = '\0'; strcat(str, ".SLC"); if ((SLC_out = fopen(str, "wb")) == NULL) die("Can't open SLCfile", str); buf_in = (short *)malloc(pp.num_rng_bins * 2 * sizeof(short)); pp.num_lines = (yh - yl) + 1; if (pp.num_lines % 4 != 0) { printf("Number of lines is set to a multiple of 4\n"); pp.num_lines = pp.num_lines - pp.num_lines % 4; } pp.SC_clock_start = pp.SC_clock_start + ((double)xl*pp.stretch_a + (double)yl*(1+pp.a_stretch_a) + (double)(pp.nrows-pp.num_valid_az)/2.0) / pp.prf / 86400.0; pp.clock_start = pp.clock_start + ((double)xl*pp.stretch_a + (double)yl*(1+pp.a_stretch_a) + (double)(pp.nrows-pp.num_valid_az)/2.0) / pp.prf / 86400.0; pp.SC_clock_stop = pp.SC_clock_start + pp.num_lines / pp.prf / 86400.0; pp.clock_stop = pp.clock_start + pp.num_lines / pp.prf / 86400.0; pp.num_patches = 1; pp.num_valid_az = pp.num_lines; pp.nrows = pp.num_lines; dr = SOL / (2.0 * pp.fs); pp.near_range = pp.near_range + dr * xl * (1 + pp.stretch_r) + dr * yl * pp.a_stretch_r; pp.num_rng_bins = xh - xl + 1; if (pp.num_rng_bins % 4 != 0) { printf("Number of range pixels is set to a multiple of 4\n"); pp.num_rng_bins = pp.num_rng_bins - pp.num_rng_bins % 4; } pp.bytes_per_line = pp.num_rng_bins * 4; pp.good_bytes = pp.bytes_per_line; strcpy(str, argv[2]); strcat(str, ".PRM"); if ((PRM_out = fopen(str, "w")) == NULL) die("can't open prm file", str); put_sio_struct(pp, PRM_out); fclose(PRM_out); printf("New PRM file written ...\n"); buf_out = (short *)malloc(pp.num_rng_bins * 2 * sizeof(short)); printf("Writing image (%d x %d) ...\n", pp.num_rng_bins, pp.num_lines); // printf("Hahahaha %d %d %d %d\n",nr,nl,pp.num_rng_bins,pp.num_lines); for (ii = 0; ii < nl; ii++) { // printf("%d ",ii); fread(buf_in, sizeof(short), nr * 2, SLC_in); if (ii >= yl && ii <= yl + pp.num_lines - 1) { for (jj = xl; jj <= xh; jj++) { buf_out[jj * 2 - xl * 2] = buf_in[jj * 2]; buf_out[jj * 2 - xl * 2 + 1] = buf_in[jj * 2 + 1]; } fwrite(buf_out, sizeof(short), pp.num_rng_bins * 2, SLC_out); } } // printf("\n"); // printf("Hahahaha\n"); fclose(SLC_out); fclose(SLC_in); // fclose(SLC_out); return (1); } GMTSAR_V5.7/.svn/pristine/c6/c64fd39058d1a0398006c6cbb31665aa60943400.svn-base000444 015705 000000 00000000435 13505462014 025352 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = asa_im_decode CSRCS = asa_im_decode.c OBJS = $(CSRCS:.c=.o) CLIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/c1/c1a3495df6adddae66c026d2f38cf2f7d04266a5.svn-base000444 015705 000000 00000027041 13505462013 026104 0ustar00sandwellwheel000000 000000 #define _GNU_SOURCE #include "update_PRM.h" #include #include #include #include #include #include #include #include struct valuelist { double value1; double value2; double value3; double value4; double value5; struct valuelist *next; }; #ifndef MAX_PATH #define MAX_PATH 1024 #endif typedef struct valuelist VALUELIST; VALUELIST *vhead; int NPTS0; int load_freq_xcorr(char *freq_xcorr_file); char **str_split(char *a_str, const char a_delim); void replace_multi_space_with_single_space(char *str); int run_gmt_trend(char *file, int n_model_params, double *coefficient1, double *coefficient2, double *coefficient3); int run_gmt_gmtinfo(char *file, double *coefficient1, double *coefficient2, double *coefficient3, double *coefficient4); int file_exists(char *filename); int main(int argc, char **argv) { double SNR = 20.0; int rng_p = 0; int azi_p = 0; VALUELIST *vcurrent; char s_r_xyz[MAX_PATH] = ""; char s_a_xyz[MAX_PATH] = ""; FILE *r_xyz = NULL; FILE *a_xyz = NULL; int n_r_xyz = -1; int n_a_xyz = -1; int NPTS = 0; double n_coeff1_r = 0.0; double n_coeff2_r = 0.0; double n_coeff3_r = 0.0; double n_coeff1_a = 0.0; double n_coeff2_a = 0.0; double n_coeff3_a = 0.0; double n_range1 = 0.0; double n_range2 = 0.0; double n_range3 = 0.0; double n_range4 = 0.0; double rshift = 0.0; double ashift = 0.0; int int_rshift = 0; int int_ashift = 0; double sub_int_r = 0.0; double sub_int_a = 0.0; double stretch_r = 0.0; double a_stretch_r = 0.0; double stretch_a = 0.0; double a_stretch_a = 0.0; char tmpstring[MAX_PATH]; if (argc > 6 || argc == 1 || argv[1] == NULL || argv[2] == NULL || file_exists(argv[4]) == 0) { printf("Usage: fitoffset npar_rng npar_azi xcorr.dat prmfile.PRM [SNR]\n"); return 1; } if (argc == 5 && atof(argv[4]) != 0.0) SNR = atof(argv[4]); rng_p = atoi(argv[1]); azi_p = atoi(argv[2]); load_freq_xcorr(argv[3]); /* Open a temporary file for r.xyz */ strlcpy(s_r_xyz, "/tmp/r.xyz.XXXXXX", sizeof s_r_xyz); if ((n_r_xyz = mkstemp(s_r_xyz)) == -1 || (r_xyz = fdopen(n_r_xyz, "w+")) == NULL) { if (n_r_xyz != -1) { unlink(s_r_xyz); close(n_r_xyz); } fprintf(stderr, "%s: %s\n", s_r_xyz, strerror(errno)); return (0); } /* Open a temporary file for a.xyz */ strlcpy(s_a_xyz, "/tmp/a.xyz.XXXXXX", sizeof s_a_xyz); if ((n_a_xyz = mkstemp(s_a_xyz)) == -1 || (a_xyz = fdopen(n_a_xyz, "w+")) == NULL) { if (n_a_xyz != -1) { unlink(s_a_xyz); close(n_a_xyz); } fprintf(stderr, "%s: %s\n", s_a_xyz, strerror(errno)); return (0); } for (vcurrent = vhead; vcurrent; vcurrent = vcurrent->next) { if (vcurrent->value5 > SNR) { /* Write the values to r.xyz */ fprintf(r_xyz, "%.6f %.6f %.6f\n", vcurrent->value1, vcurrent->value3, vcurrent->value2); /* Increment NPTS by 1 for every line written */ NPTS++; } } for (vcurrent = vhead; vcurrent; vcurrent = vcurrent->next) { if (vcurrent->value5 > SNR) { /* Write the values to a.xyz */ fprintf(a_xyz, "%.6f %.6f %.6f\n", vcurrent->value1, vcurrent->value3, vcurrent->value4); } } if (NPTS < 8) { if (r_xyz) fclose(r_xyz); if (a_xyz) fclose(a_xyz); /* Remove the temporary files */ unlink(s_r_xyz); unlink(s_a_xyz); printf("FAILED - not enough points to estimate parameters\ntry using a " "lower SNR\nNPTS0 = %d NPTS = %d\n\n", NPTS0, NPTS); return 1; } fflush(r_xyz); fflush(a_xyz); /* Close any open files */ if (r_xyz) fclose(r_xyz); if (a_xyz) fclose(a_xyz); /* Run gmt to get coefficients */ run_gmt_trend(s_r_xyz, rng_p, &n_coeff1_r, &n_coeff2_r, &n_coeff3_r); run_gmt_trend(s_a_xyz, azi_p, &n_coeff1_a, &n_coeff2_a, &n_coeff3_a); /* run gmt gmtinfo to get range and azimuth coefficients */ run_gmt_gmtinfo(s_r_xyz, &n_range1, &n_range2, &n_range3, &n_range4); /* Calculate range and azimuth shifts */ rshift = n_coeff1_r - n_coeff2_r * (n_range2 + n_range1) / (n_range2 - n_range1) - n_coeff3_r * (n_range4 + n_range3) / (n_range4 - n_range3); ashift = n_coeff1_a - n_coeff2_a * (n_range2 + n_range1) / (n_range2 - n_range1) - n_coeff3_a * (n_range4 + n_range3) / (n_range4 - n_range3); /* Calculate range and azimuth stretches */ stretch_r = n_coeff2_r * 2.0 / (n_range2 - n_range1); a_stretch_r = n_coeff3_r * 2.0 / (n_range4 - n_range3); stretch_a = n_coeff2_a * 2.0 / (n_range2 - n_range1); a_stretch_a = n_coeff3_a * 2.0 / (n_range4 - n_range3); if (rshift >= 0) { int_rshift = trunc(rshift); sub_int_r = (rshift - (double)trunc(rshift)); } else { int_rshift = floor(rshift); sub_int_r = 1 + (rshift - (double)trunc(rshift)); } if (ashift >= 0) { int_ashift = trunc(ashift); sub_int_a = (ashift - (double)trunc(ashift)); } else { int_ashift = floor(ashift); sub_int_a = 1 + (ashift - (double)trunc(ashift)); } #ifdef DEBUG printf("s_r_xyz %s\n", s_r_xyz); printf("%d lines\n", NPTS0); printf("SNR = %.3f\n", SNR); printf("n_coeff1_r = %.6f n_coeff2_r = %.6f n_coeff3_r = %.6f\n", n_coeff1_r, n_coeff2_r, n_coeff3_r); printf("n_coeff1_r = %.6f n_coeff2_a = %.6f n_coeff3_a = %.6f\n", n_coeff1_a, n_coeff2_a, n_coeff3_a); printf("n_range1 = %.0f n_range2 = %.0f n_range3 = %.0f n_range4 = %.0f\n\n", n_range1, n_range2, n_range3, n_range4); printf("Range Shift = %.4f\n", rshift); printf("Azimuth Shift = %.4f\n", ashift); printf("rshift = %d\n", int_rshift); printf("sub_int_r = %.4f\n", sub_int_r); printf("stretch_r = %.9f\n", stretch_r); printf("a_stretch_r = %.9f\n", a_stretch_r); printf("ashift = %d\n", int_ashift); printf("sub_int_a = %.4f\n", sub_int_a); printf("stretch_a = %.9f\n", stretch_a); printf("a_stretch_a = %.9f\n", a_stretch_a); #endif /* Update rshift and associated params in PRM*/ sprintf(tmpstring, "%d", int_rshift); update_PRM_sub(argv[4], "rshift", tmpstring); sprintf(tmpstring, "%.4f", sub_int_r); update_PRM_sub(argv[4], "sub_int_r", tmpstring); sprintf(tmpstring, "%.9f", stretch_r); update_PRM_sub(argv[4], "stretch_r", tmpstring); sprintf(tmpstring, "%.9f", a_stretch_r); update_PRM_sub(argv[4], "a_stretch_r", tmpstring); /* Update ashift and associated params in PRM*/ sprintf(tmpstring, "%d", int_ashift); update_PRM_sub(argv[4], "ashift", tmpstring); sprintf(tmpstring, "%.4f", sub_int_a); update_PRM_sub(argv[4], "sub_int_a", tmpstring); sprintf(tmpstring, "%.9f", stretch_a); update_PRM_sub(argv[4], "stretch_a", tmpstring); sprintf(tmpstring, "%.9f", a_stretch_a); update_PRM_sub(argv[4], "a_stretch_a", tmpstring); /* Remove the temporary files */ unlink(s_r_xyz); unlink(s_a_xyz); printf("fitoffset:\nUpdated %s with offset parameters calculated from %s\n", argv[4], argv[3]); return 0; } int load_freq_xcorr(char *freq_xcorr_file) { FILE *fp; char *line = NULL; size_t len = 0; ssize_t read; VALUELIST *vcurrent; char **tokens; vhead = vcurrent = NULL; NPTS0 = 0; fp = fopen(freq_xcorr_file, "r"); if (fp == NULL) return EXIT_FAILURE; while ((read = getline(&line, &len, fp)) != -1) { NPTS0++; replace_multi_space_with_single_space(line); VALUELIST *vnode = malloc(sizeof(VALUELIST)); tokens = str_split(trimwhitespace(line), ' '); if (tokens) { for (int i = 0; *(tokens + i); i++) { switch (i) { case 0: vnode->value1 = atof(*(tokens + i)); break; case 1: vnode->value2 = atof(*(tokens + i)); break; case 2: vnode->value3 = atof(*(tokens + i)); break; case 3: vnode->value4 = atof(*(tokens + i)); break; case 4: vnode->value5 = atof(*(tokens + i)); break; } free(*(tokens + i)); } free(tokens); } if (vhead == NULL) { vcurrent = vhead = vnode; } else { vcurrent = vcurrent->next = vnode; } } // need free for each node if (fp) fclose(fp); return EXIT_SUCCESS; } char **str_split(char *a_str, const char a_delim) { char **result = 0; size_t count = 0; char *tmp = a_str; char *last_comma = 0; char delim[2]; delim[0] = a_delim; delim[1] = 0; /* Count how many elements will be extracted. */ while (*tmp) { if (a_delim == *tmp) { count++; last_comma = tmp; } tmp++; } /* Add space for trailing token. */ count += last_comma < (a_str + strlen(a_str) - 1); /* Add space for terminating null string so caller knows where the list of returned strings ends. */ count++; result = malloc(sizeof(char *) * count); if (result) { size_t idx = 0; char *token = strtok(a_str, delim); while (token) { assert(idx < count); *(result + idx++) = strdup(token); token = strtok(0, delim); } assert(idx == count - 1); *(result + idx) = 0; } return result; } void replace_multi_space_with_single_space(char *str) { char *dest = str; /* Destination to copy to */ /* While we're not at the end of the string, loop... */ while (*str != '\0') { /* Loop while the current character is a space, AND the next * character is a space */ while (*str == ' ' && *(str + 1) == ' ') str++; /* Just skip to next character */ /* Copy from the "source" string to the "destination" string, * while advancing to the next character in both */ *dest++ = *str++; } /* Make sure the string is properly terminated */ *dest = '\0'; } /* Run gmt trend2d and collect the parameters */ int run_gmt_trend(char *file, int n_model_params, double *coefficient1, double *coefficient2, double *coefficient3) { char cmd_line[MAX_PATH] = "gmt trend2d /tmp/r.xyz.ZBbxXu -Fxyz -N\"2\"r -V > /dev/null"; // char buffer[1000]; FILE *pipe; // int len; size_t glen; ssize_t read; // FILE *fp; char *line = NULL; char strfound[] = "trend2d: Model Coefficients:"; char **tokens; sprintf(cmd_line, "gmt trend2d %s -Fxyz -N\"%d\"r -V 2>&1", file, n_model_params); pipe = popen(cmd_line, "r"); if (NULL == pipe) { perror("pipe"); return 1; } while ((read = getline(&line, &glen, pipe)) != -1) { if (strncmp(strfound, line, 28) == 0) { for (int i = 0; i < strlen(line); i++) { if (line[i] == '\t') line[i] = ' '; } tokens = str_split(trimwhitespace(line), ' '); if (tokens) { for (int i = 0; *(tokens + i); i++) { switch (i) { case 3: *coefficient1 = atof(*(tokens + i)); break; case 4: *coefficient2 = atof(*(tokens + i)); break; case 5: *coefficient3 = atof(*(tokens + i)); break; } free(*(tokens + i)); } free(tokens); } } } pclose(pipe); return 0; } /* Run gmt gmtinfo and collect the parameters */ int run_gmt_gmtinfo(char *file, double *coefficient1, double *coefficient2, double *coefficient3, double *coefficient4) { char cmd_line[MAX_PATH] = ""; // char buffer[1000]; FILE *pipe; // int len; size_t glen; ssize_t read; // FILE *fp; char *line = NULL; char **tokens; sprintf(cmd_line, "gmt gmtinfo %s -C 2>&1", file); pipe = popen(cmd_line, "r"); if (NULL == pipe) { perror("pipe"); return 1; } while ((read = getline(&line, &glen, pipe)) != -1) { for (int i = 0; i < strlen(line); i++) { if (line[i] == '\t') line[i] = ' '; } tokens = str_split(trimwhitespace(line), ' '); if (tokens) { for (int i = 0; *(tokens + i); i++) { switch (i) { case 0: *coefficient1 = atof(*(tokens + i)); break; case 1: *coefficient2 = atof(*(tokens + i)); break; case 2: *coefficient3 = atof(*(tokens + i)); break; case 3: *coefficient4 = atof(*(tokens + i)); break; } free(*(tokens + i)); } free(tokens); } } pclose(pipe); return 0; } int file_exists(char *filename) { FILE *file = NULL; file = fopen(filename, "r"); if (file != NULL) { fclose(file); return 1; } return 0; } GMTSAR_V5.7/.svn/pristine/c1/c17640a30fcd6e65f4739d8f6dd28c2c4159fc7e.svn-base000444 015705 000000 00000000504 13505462014 025764 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_fbs2fbd CSRCS = ALOS_fbs2fbd.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/c1/c1cfc121dd9d44546e60c428024cbd145b5097b6.svn-base000444 015705 000000 00000011210 13505462013 025560 0ustar00sandwellwheel000000 000000 /************************************************************************ * rmpatch performs range migration on range compressed radar echos. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * 24MAR2000 - modified to handle the range stretch with abs. azimuth * * * * * ************************************************************************/ #include "lib_functions.h" #include "siocomplex.h" #include "soi.h" void rmpatch(fcomplex **data, int nrows, double delr, double fd, double fdd, double fddd) { int *nvtmp; int na, i, j, ifrac, n, k, nfilter = 8192, ideskew; static int firsttime = 1; float *f0, *f_rate, *bdel, *vtmp; static float xintp[73728]; float frac, ratio, freq; float c_xintp[8]; double *r, *rd0, dx, v1, tmpd; fcomplex c_ctmpb[8], tmp[8], *c_ctmpa; /* initializations */ if ((strcmp(deskew, "y") == 0) || (strcmp(deskew, "Y") == 0)) { ideskew = 1; } else { ideskew = 0; } if ((nvtmp = (int *)malloc(num_rng_bins * sizeof(int))) == NULL) { printf("Sorry, can't allocate memory for nvtmp.\n"); exit(-1); } if ((rd0 = (double *)malloc(num_rng_bins * sizeof(double))) == NULL) { printf("Sorry, can't allocate memory for rd0.\n"); exit(-1); } if ((f0 = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("Sorry, can't allocate memory for f0.\n"); exit(-1); } if ((f_rate = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("Sorry, can't allocate memory for f_rate.\n"); exit(-1); } if ((bdel = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("Sorry, can't allocate memory for bdel.\n"); exit(-1); } if ((vtmp = (float *)malloc(num_rng_bins * sizeof(float))) == NULL) { printf("Sorry, can't allocate memory for vtmp.\n"); exit(-1); } if ((r = (double *)malloc(num_rng_bins * sizeof(double))) == NULL) { printf("Sorry, can't allocate memory for r.\n"); exit(-1); } if ((c_ctmpa = (fcomplex *)malloc(num_rng_bins * sizeof(fcomplex))) == NULL) { printf("Sorry, can't allocate memory for rd0.\n"); exit(-1); } /* load the interpolation array */ /* convert r resampling coefficients to a function of range instead of pixel */ if (firsttime == 1) { intp_coef(nfilter, xintp); sub_int_r = sub_int_r - stretch_r * near_range / delr; stretch_r = stretch_r / delr; firsttime = 0; } dx = vel1 / prf1; v1 = pow(lambda, 2.0) / (8.0 * pow(dx, 2.0)); for (i = 0; i < num_rng_bins; i++) { r[i] = near_range + i * delr; f0[i] = fd + fdd * r[i] + fddd * r[i] * r[i]; rd0[i] = r[i] / (1 + v1 * pow((f0[i] / prf1), 2.0)); f_rate[i] = -2.0 * pow(vel1, 2.0) * pow((rd0[i] / r[i]), 2.0) / (lambda * r[i]); bdel[i] = stretch_r * r[i] + sub_int_r; } for (na = 0; na < nrows; na++) { /* get the interpolation amounts for a given azimuth pixel na as f(line) */ freq = ((float)na) / ((float)nrows) * prf1; for (i = 0; i < num_rng_bins; i++) { /* frequencies must be within 0.5*prf of centroid */ ratio = (freq - f0[i]) / prf1; n = (int)(ratio + 0.5); freq = freq - n * prf1; /* range of a pixel at freq f, bdel is range correction for * interferogram */ if (ideskew == 1) { tmpd = bdel[i] + ((r[i] - (lambda / 4.0) * pow(f0[i], 2.0) / f_rate[i]) - r[0]) / delr + rd0[i] * (v1 / delr) * (pow(freq, 2.0) - pow(f0[i], 2.0)) / pow(prf1, 2.0); } else { tmpd = i + rd0[i] * (v1 / delr) * (pow(freq, 2.0) - pow(f0[i], 2.0)) / pow(prf1, 2.0) + bdel[i]; } nvtmp[i] = (int)tmpd; vtmp[i] = tmpd - nvtmp[i]; } /* interpolate that line according to coeffs determined above */ for (i = 0; i < num_rng_bins; i++) { c_ctmpa[i].r = 0.0; c_ctmpa[i].i = 0.0; if ((nvtmp[i] >= 3) && (nvtmp[i] < (num_rng_bins - 5))) { frac = vtmp[i]; ifrac = 8 * ((int)(frac * ((float)nfilter) + 0.5)); for (k = 0; k < 8; k++) { c_xintp[k] = xintp[ifrac + k]; c_ctmpb[k] = data[na][nvtmp[i] - 2 + k]; } for (j = 0; j < 8; j++) { tmp[j] = RCmul(c_xintp[j], c_ctmpb[j]); } for (j = 0; j < 8; j++) { c_ctmpa[i] = Cadd(c_ctmpa[i], tmp[j]); } } } for (i = 0; i < num_rng_bins; i++) { data[na][i] = c_ctmpa[i]; } } free((char *)nvtmp); free((char *)f0); free((char *)rd0); free((char *)f_rate); free((char *)bdel); free((char *)vtmp); free((char *)r); free((char *)c_ctmpa); } GMTSAR_V5.7/.svn/pristine/c1/c11e98a188b9beddae6e2cc7f16a18e7d3434596.svn-base000444 015705 000000 00000000565 13505462014 026050 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_slc_s1a CSRCS = make_slc_s1a.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar -I$(TIFF_INC) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC -L$(TIFF_LIB) -ltiff -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/c1/c1ee2fedfe0ca7fa3ffaa216c127044ba7a70689.svn-base000444 015705 000000 00000004750 13505462013 026233 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Align a stack of SLC images # can be used to do stacking and time-series analysis # Xiaopeng Tong, Aug 27 2010 # if ($#argv != 2) then echo "" echo "Usage: align_batch.csh SAT align.in " echo " align a set of images listed in align.in file" echo "" echo " SAT can be ALOS ENVISAT or ERS" echo "" echo " format of align.in:" echo " master_name:slave_name:supermaster_name" echo "" echo " example of align.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP089300650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP236920650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " " echo " example of align.in for ERS is:" echo " e1_05783:e1_07787:e1_05783" echo " e1_05783:e1_10292:e1_05783" echo "" echo " example of align.in for ENVISAT is:" echo " ENV1_2_127_2925_07195:ENV1_2_127_2925_12706:ENV1_2_127_2925_07195" echo " ENV1_2_127_2925_07195:ENV1_2_127_2925_13207:ENV1_2_127_2925_07195" echo "" echo "Example: align_batch.csh ALOS align.in " echo "" exit 1 endif set SAT = $1 if ($SAT != ENVI && $SAT != ERS && $SAT != ALOS) then echo "" echo " SAT can be ALOS ENVISAT or ERS " echo "" exit 1 endif # # make working directories # mkdir -p SLC/ # # clean up # cleanup.csh SLC echo "" echo "START ALIGN A STACK OF IMAGES" echo "" # # loop start focus and align SLC images # foreach line (`awk '{print $0}' $2`) set master = `echo $line | awk -F: '{print $1}'` set slave = `echo $line | awk -F: '{print $2}'` set supermaster = `echo $line | awk -F: '{print $3}'` if ($master != "" && $slave != "" && $supermaster != "") then echo " " echo "Align $slave to $master via $supermaster - START" cd SLC cp ../raw/$master.PRM . cp ../raw/$slave.PRM . cp ../raw/$supermaster.PRM . # # need to add the SLF_file name to the master PRM's # update_PRM $master.PRM SLC_file $master.SLC update_PRM $supermaster.PRM SLC_file $supermaster.SLC ln -s ../raw/$master.raw . ln -s ../raw/$slave.raw . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . align.csh SAT $master $slave $supermaster cd .. echo "Align $slave to $master via $supermaster - END" else echo "" echo "Wrong format in align.in" exit 1 endif end echo "" echo "END ALIGN A STACK OF IMAGES" echo "" GMTSAR_V5.7/.svn/pristine/c1/c1ebeb31cb1d66180510acaaf455f3e1ebeb036e.svn-base000444 015705 000000 00000040463 13505462014 026211 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Program to project a longitude, latitude, and topography * into a file of longitude latitude, and topography and unit look vector. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography and * unit look vector then transform the unit look vector from global to * local coordinate ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 11/28/08 - modified from ALOS_llt2rat.c to compute accurate look vector.* * need to specify the latitude and longitude of the pole to * * transform from global elipsoid cartesian to local East-North- * * up coordinate * * The start and end clock of the orbit is changed to allow for * * long swath, the start time should be in the first frame so * * PRM file. ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 char *USAGE = " \n Usage: " "ALOS_look master.PRM [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - lon, lat, elevation look_E look_N look_U " "[ASCII default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: ALOS_look master.PRM < topo.llt > topo.lltn \n"; /* int parse_ALOS_look(char **, char *); */ int main(int argc, char **argv) { FILE *fprm1; int otype; double rln, rlt, rht, t1, t2, tm; double ts, rng, thet, relp, telp; double xp[3]; // double xt[3],dr; double rp[3]; double dd[6]; /* dummy for output double precision */ float ds[6]; /* dummy for output single precision */ /* double r0,rf,a0,af; */ double rad = PI / 180.; double fll; int i, j, k, nrec, npad = 8000; int goldop(); int stai, endi, midi, xmin; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; FILE *ldrfile; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); double len, unit_x, unit_y, unit_z; double dist(); double Rx[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double Rz[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double A[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double local_look[3] = {0, 0, 0}; double pole_lon, pole_lat, b, g; /* Make sure usage is correct and files can be opened */ if (argc < 2 || argc > 3) { fprintf(stderr, "%s\n", USAGE); exit(-1); } /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 3) { if (!strcmp(argv[2], "-bos")) otype = 2; else if (!strcmp(argv[2], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* dubugging fprintf(stderr,"debug\n"); fprintf(stderr,"%s\n",prm.led_file); fprintf(stderr,"%lf\n",prm.fs); fprintf(stderr,"%d\n",prm.num_rng_bins); fprintf(stderr,"%d\n",prm.num_valid_az); fprintf(stderr,"%lf\n",prm.rc); fprintf(stderr,"%lf\n",prm.ra); fprintf(stderr,"%lf\n",prm.prf); fprintf(stderr,"%lf\n",prm.RE); fprintf(stderr,"%lf\n",prm.sub_int_a); fprintf(stderr,"%lf\n",prm.SC_clock_start); fprintf(stderr,"%d\n",prm.nrows); fprintf(stderr,"%d\n",prm.num_patches); fprintf(stderr,"%lf\n",prm.near_range); fprintf(stderr,"rshift = %d\n",prm.rshift); fprintf(stderr,"sub_int_r = %lf\n",prm.sub_int_r); fprintf(stderr,"chirp_ext = %d\n",prm.chirp_ext); */ fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ALOS_sarleader(ldrfile, &prm, orb); #if 0 dr = 0.5*SOL/prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 4th point or about 16 m along track. sometimes this code goes into an infinite loop if ts is too small */ ts = 4. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ /* fprintf(stderr,"ts=%lf,t1=%lf,nrec=%d\n",ts,t1,nrec); */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* look at the orb_pos for(i=0;i<4;i++) { for (j=0;j 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); xmin = goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); // xt[0]=rng; // xt[1]=tm; /* fprintf(stderr,"rng = %f, tm = %f",rng,tm); */ /* calculate the unit look vector originated from ground point to satellite in the global cartesian coordinate */ /* fprintf(stderr,"x y z of the satellite minimum: %f, %f, %f\n",orb_pos[1][xmin],orb_pos[2][xmin],orb_pos[3][xmin]); */ len = dist(xp[0], xp[1], xp[2], xmin, orb_pos); unit_x = (orb_pos[1][xmin] - xp[0]) / len; unit_y = (orb_pos[2][xmin] - xp[1]) / len; unit_z = (orb_pos[3][xmin] - xp[2]) / len; /* fprintf(stderr,"unit look vector: %f, %f, * %f\n",unit_x,unit_y,unit_z); */ /* there is a way to test the sign is right */ /* compute the look vector in local coordinate */ /* rotate the global coordinate to a local coordinate system */ /* location of the rotation pole */ /* refer to a matlab version rot3d.m to check the formula */ pole_lon = fmod((rln + 360.0), 360.0); /* fprintf(stderr,"pole_lon %f\n",pole_lon); */ pole_lat = rlt; /* construct a rotation matrix */ b = (pole_lat - 90) / 180. * 3.14159; Rx[0][0] = 1; Rx[0][1] = 0; Rx[0][2] = 0; Rx[1][0] = 0; Rx[1][1] = cos(b); Rx[1][2] = -sin(b); Rx[2][0] = 0; Rx[2][1] = sin(b); Rx[2][2] = cos(b); g = (pole_lon + 90) / 180. * 3.14159; Rz[0][0] = cos(g); Rz[0][1] = sin(g); Rz[0][2] = 0; Rz[1][0] = -sin(g); Rz[1][1] = cos(g); Rz[1][2] = 0; Rz[2][0] = 0; Rz[2][1] = 0; Rz[2][2] = 1; /* zero A */ for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) A[i][j] = 0; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) for (k = 0; k < 3; k++) A[i][j] += Rx[i][k] * Rz[k][j]; /* print out the matrix */ /* for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rx[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rz[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",A[i][j]); putchar('\n'); } */ for (i = 0; i < 3; i++) local_look[i] = A[i][0] * unit_x + A[i][1] * unit_y + A[i][2] * unit_z; /* compute the range and azimuth in pixel space xt[0] = (xt[0] - prm.near_range)/dr-(prm.rshift+prm.sub_int_r)+prm.chirp_ext; xt[1] = prm.prf*(xt[1]-t1)-(prm.ashift+prm.sub_int_a); fprintf(stderr,"xt[0] = %f\n",xt[0]); if(xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) continue; fprintf(stderr,"%f %f %f %f %f \n",xt[0],xt[1],rp[2],rp[1],rp[0]); */ if (otype == 1) { /* fprintf(stdout,"%f %f %f %f %f * %f\n",rp[1],rp[0],rp[2],unit_x,unit_y,unit_z); */ fprintf(stdout, "%f %f %f %f %f %f\n", rp[1], rp[0], rp[2], local_look[0], local_look[1], local_look[2]); } else if (otype == 2) { ds[0] = (float)rp[1]; ds[1] = (float)rp[0]; ds[2] = (float)rp[2]; ds[3] = (float)local_look[0]; ds[4] = (float)local_look[1]; ds[5] = (float)local_look[2]; fwrite(ds, sizeof(float), 6, stdout); } else if (otype == 3) { dd[0] = rp[1]; dd[1] = rp[0]; dd[2] = rp[2]; dd[3] = local_look[0]; dd[4] = local_look[1]; dd[5] = local_look[2]; fwrite(dd, sizeof(double), 6, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/.svn/pristine/ed/ed17b385e81f3451a610b5a352d6d848356f46ba.svn-base000444 015705 000000 00000003053 13505462013 025610 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_filter applies a low-pass filter in the fourier domain by * * zeroing in wavenumber space * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography) * * Date : 10/09/14 * ************************************************************************/ /************************************************************************ * Modification History * * 01/25/18 DTS modified to use the GMT fft routines * * Date * ************************************************************************/ #include "gmt.h" #include "siocomplex.h" #include "soi.h" #include void rng_filter(void *API, fcomplex *cin, int nffti, fcomplex *cout) { int i, nf, nt; nf = .70 * nffti / 2; nt = nffti - 1; /* do the forward fft */ // dir = -1; // cfft1d_(&nffti,cin,&dir); GMT_FFT_1D(API, (float *)cin, nffti, GMT_FFT_FWD, GMT_FFT_COMPLEX); /* first zero the output array */ for (i = 0; i < nffti; i++) { cout[i].r = 0.; cout[i].r = 0.; } /* only keep the lower frequencies */ for (i = 0; i < nf; i++) { cout[i].r = cin[i].r; cout[i].i = cin[i].i; cout[nt - i].r = cin[nt - i].r; cout[nt - i].i = cin[nt - i].i; } /* now inverse fft */ // dir = 1; // cfft1d_(&nffti,cout,&dir); GMT_FFT_1D(API, (float *)cout, nffti, GMT_FFT_INV, GMT_FFT_COMPLEX); } GMTSAR_V5.7/.svn/pristine/ed/edab0f3aa753bd3139b802c86963b09c6324b6b3.svn-base000444 015705 000000 00000000032 13505462013 025726 0ustar00sandwellwheel000000 000000 3 3 1 2 1 2 4 2 1 2 1 GMTSAR_V5.7/.svn/pristine/fb/fbdb87d71180d433746a2216973ec30ebfc20b13.svn-base000444 015705 000000 00000025513 13505462013 025656 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Feb 10, 2010 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 4) then echo "" echo "Usage: p2p_ALOS_SS.csh master_image slave_image configuration_file subswath" echo "" echo "Example: p2p_ALOS_SS.csh IMG-HH-ALPSRP055750660-W1.0__D IMG-HH-ALPSRP049040660-W1.0__D config.alos.ss.txt 1" echo "" echo " Place the raw data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the config file exists # if(! -f $3 ) then echo " no configure file: "$3 exit endif set subswath = "SW"$4 set sub_swath = $4 # # read parameters from configuration file # set SAT = `grep SAT $3 | awk '{print $3}'` set stage = `grep proc_stage $3 | awk '{print $3}'` set num_patches = `grep num_patches $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` set num_burst = `grep num_burst $3 | awk '{print $3}'` set burst_skip = `grep burst_skip $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = ` echo $1 | awk '{ print substr($1,8,length($1)-7)}'` set slave = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` if ($switch_master == 0) then set ref = "$master" set rep = "$slave" else if ($switch_master == 1) then set ref = "$slave" set rep = "$master" else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p "$subswath" cd "$subswath" mkdir -p intf/ SLC/ topo/ cd .. ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # # cleanup.csh raw # # preprocess the raw data # echo " " echo "PRE_PROC.CSH - START" cd raw set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($near_range == "")) then set commandline = "$commandline -near $near_range" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($fd == "")) then set commandline = "$commandline -fd1 $fd" endif if (!($num_burst == "")) then set commandline = "$commandline -num_burst $num_burst" endif if (!($sub_swath == "")) then set commandline = "$commandline -swath $sub_swath" endif if (!($burst_skip == "")) then set commandline = "$commandline -burst_skip $burst_skip" endif echo $commandline ALOS_pre_process_SS IMG-HH-"$master" LED-"$master" $commandline ALOS_pre_process_SS IMG-HH-"$slave" LED-"$slave" $commandline cd .. echo "PRE_PROC.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cd "$subswath" # cleanup.csh SLC # # focus and align SLC images # echo " " echo "ALIGN.CSH - START" cd SLC cp ../../raw/IMG-HH-"$master"_"$subswath".PRM . cp ../../raw/IMG-HH-"$slave"_"$subswath".PRM . ln -s ../../raw/IMG-HH-"$master"_"$subswath".raw . ln -s ../../raw/IMG-HH-"$slave"_"$subswath".raw . ln -s ../../raw/LED-"$master" . ln -s ../../raw/LED-"$slave" . set azimuth = `grep num_valid_az IMG-HH-"$master"_"$subswath".PRM | awk '{printf("%d",int($3/8)*8)}'` update_PRM IMG-HH-"$master"_"$subswath".PRM num_valid_az $azimuth update_PRM IMG-HH-"$slave"_"$subswath".PRM num_valid_az $azimuth align.csh $SAT IMG-HH-"$master"_"$subswath" IMG-HH-"$slave"_"$subswath" cd ../.. echo "ALIGN.CSH - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cd "$subswath" # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo ln -s ../../topo/dem.grd . cp ../SLC/IMG-HH-"$master"_"$subswath".PRM master.PRM ln -s ../../raw/LED-"$master" . if (-f dem.grd) then dem2topo_ra_ALOS.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC set rng_samp_rate = `grep rng_samp_rate IMG-HH-"$master".PRM | awk 'NR == 1 {printf("%d", $3)}'` if ( $?rng_samp_rate) then if ($rng_samp_rate > 25000000) then echo "processing ALOS FBS data" set rng = 2 else echo "processing ALOS FBD data" set rng = 1 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif slc2amp.csh IMG-HH-"$master"_"$subswath".PRM $rng amp-"$master".grd cd .. cd topo ln -s ../SLC/amp-"$master".grd . offset_topo amp-"$master".grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif cd .. endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cd "$subswath" # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../SLC/IMG-HH-"$ref"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-"$rep"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../../raw/LED-$ref . ln -s ../../../raw/LED-$rep . ln -s ../../SLC/IMG-HH-"$ref"_"$subswath".SLC . ln -s ../../SLC/IMG-HH-"$rep"_"$subswath".SLC . cp ../../SLC/IMG-HH-"$ref"_"$subswath".PRM . cp ../../SLC/IMG-HH-"$rep"_"$subswath".PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf_ALOS.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$rep"_"$subswath".PRM -topo topo_shift.grd filter_alos_ss.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$repN_"$subswath".PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf_ALOS.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$rep"_"$subswath".PRM -topo topo_ra.grd filter_alos_ss.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$rep"_"$subswath".PRM $filter $dec endif else intf_ALOS.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$rep"_"$subswath".PRM filter_alos_ss.csh IMG-HH-"$ref"_"$subswath".PRM IMG-HH-"$rep"_"$subswath".PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" cd .. endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd "$subswath" cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-HH-"$ref"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-"$rep"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd "$subswath" cd intf set ref_id = `grep SC_clock_start ../SLC/IMG-HH-"$ref"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/IMG-HH-"$rep"_"$subswath".PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../../.. endif # end GMTSAR_V5.7/.svn/pristine/fb/fb33f52102f901916929bc3c2769003135f144f6.svn-base000444 015705 000000 00000020024 13505462013 025277 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # intf_batch.csh # Loop through a list of interferometry pairs # modified from process2pass.csh # Xiaopeng Tong D.Sandwell Aug 27 2010 # added support for ENVI_SLC # Anders Hogrelius May 22 2017 alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: intf_batch.csh SAT intf.in batch.config" echo " make a stack of interferograms listed in intf.in" echo "" echo " SAT can be ALOS ENVI(ENVISAT) ENVI_SLC and ERS " echo "" echo " format for intf.in:" echo " reference1_name:repeat1_name" echo " reference2_name:repeat2_name" echo " reference3_name:repeat3_name" echo " ......" echo "" echo " Example of intf.in for ALOS:" echo " IMG-HH-ALPSRP096010650-H1.0__A:IMG-HH-ALPSRP236920650-H1.0__A" echo " IMG-HH-ALPSRP089300650-H1.0__A:IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP089300650-H1.0__A:IMG-HH-ALPSRP236920650-H1.0__A" echo "" echo " Example of intf.in for ERS is:" echo " e1_05783:e1_07787" echo " e1_05783:e1_10292" echo "" echo " Example of intf.in for ENVISAT is:" echo " ENV1_2_127_2925_07195:ENV1_2_127_2925_12706" echo " ENV1_2_127_2925_07195:ENV1_2_127_2925_13207" echo "" echo " Example of intf.in for ENVI_SLC is:" echo " ASA_IMS_1PNESA20030908_175832_000000182019_00399_07968_0000:ASA_IMS_1PNESA20051121_175837_000000172042_00399_19491_0000" echo " ASA_IMS_1PNESA20040719_175832_000000182028_00399_12477_0000:ASA_IMS_1PNESA20051121_175837_000000172042_00399_19491_0000" echo " ASA_IMS_1PNESA20040719_175832_000000182028_00399_12477_0000:ASA_IMS_1PNESA20030908_175832_000000182019_00399_07968_0000" echo " ASA_IMS_1PNESA20051121_175837_000000172042_00399_19491_0000:ASA_IMS_1PNESA20040719_175832_000000182028_00399_12477_0000" echo "" echo " batch.config is a config file for making interferograms" echo " See example.batch.config for an example" echo "" exit 1 endif # set SAT = $1 if ($SAT != ALOS && $SAT != ENVI && $SAT != ERS && $SAT != ENVI_SLC) then echo "" echo " SAT can be ALOS ENVI(ENVISAT) ENVI_SLC and ERS" echo "" exit 1 endif # # make sure the file exsit # if (! -f $2) then echo "no input file:" $2 exit endif if (! -f $3) then echo "no config file:" $3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set master = `grep master_image $3 | awk '{print $3}'` if ($master == "") then echo "" echo "master image not set." echo "" exit 1 endif # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif set dec = `grep dec_factor $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # ################################## # 1 - start from make topo_ra # ################################## # if ($stage <= 1) then # # clean up # cleanup.csh topo # # make topo_ra # if ($topo_phase == 1) then echo " " echo "DEM2TOPOPHASE.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPOPHASE.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC if ($SAT == ALOS) then set rng_samp_rate = `grep rng_samp_rate $master.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ( $?rng_samp_rate) then if ($rng_samp_rate > 25000000) then echo "processing ALOS FBS data" set rng = 2 else echo "processing ALOS FBD data" set rng = 1 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif slc2amp.csh $master.PRM $rng amp-$master.grd else if ($SAT == ERS || $SAT == ENVI || $SAT == ENVI_SLC) then slc2amp.csh $master.PRM 1 amp-$master.grd endif cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPOPHASE SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif # else if ($topo_phase == 0) then echo "NO TOPOPHASE IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif # endif # stage 1 # ################################################## # 2 - start from make and filter interferograms # # unwrap phase and geocode # ################################################## # if ($stage <= 2) then # # make working directories # echo "" echo "START FORM A STACK OF INTERFEROGRAMS" echo "" mkdir -p intf/ # # loop over intf.in # foreach line (`awk '{print $0}' $2`) set ref = `echo $line | awk -F: '{print $1}'` set rep = `echo $line | awk -F: '{print $2}'` set ref_id = `grep SC_clock_start ./SLC/$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ./SLC/$rep.PRM | awk '{printf("%d",int($3))}' ` # echo "" echo "INTF.CSH, FILTER.CSH - START" cd intf mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . # if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif echo "INTF.CSH, FILTER.CSH - END" # if ($region_cut == "") then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif if ($threshold_snaphu != 0 ) then if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo "" echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" else echo "" echo "SKIP UNWRAP PHASE" endif echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. end # loop of foreach endif # stage 2 echo "" echo "END FORM A STACK OF INTERFEROGRAMS" echo "" GMTSAR_V5.7/.svn/pristine/fb/fb0d1420c6cf1715b767dee5cedb464213553bbf.svn-base000444 015705 000000 00000003032 13505462014 026071 0ustar00sandwellwheel000000 000000 # $Id: Makefile 33 2013-04-06 05:37:15Z pwessel $ # # makefile for snaphu directory # # Makefile for statistical-cost network-flow algorithm for phase unwrapping # Curtis W. Chen # Copyright 2002 Board of Trustees, Leland Stanford Jr. University # # If you want to copy the man page and executable to a system directory, # specify the appropriate directories in the INSTALLDIR and MANDIR # variables and do 'make install' (you will probably need to be root). # # If you specify -D NO_CS2, the program will be compiled without the # CS2 MCF solver module. include ../../config.mk PROGS_C = snaphu.c LIB_C = snaphu_tile.c \ snaphu_solver.c \ snaphu_io.c \ snaphu_util.c \ snaphu_cost.c \ snaphu_cs2.c PROGS_O = $(PROGS_C:.c=.o) PROGS = $(PROGS_C:.c=) MANDIR = /usr/local/man SNAPHUMAN = ../man/man1/snaphu.1 LIB_O = $(LIB_C:.c=.o) #------------------------------------------------------------------------------- # software targets #------------------------------------------------------------------------------- all: $(PROGS) install: all $(INSTALL) -d $(bindir) $(INSTALL) $(PROGS) $(bindir) install-man: cp $(SNAPHUMAN) $(MANDIR)/man1 uninstall: cd $(bindir); rm -f $(PROGS) spotless:: clean clean: rm -f *.o *% core tags $(PROGS) #------------------------------------------------------------------------------- # program rules #------------------------------------------------------------------------------- $(PROGS): $(PROGS_O) $(LIB_O) $(CC) $(LDFLAGS) $@.o $(LIB_O) $(LIBS) -o $@ GMTSAR_V5.7/.svn/pristine/c8/c8a1479188f2885843a61911834dbeddb76fb313.svn-base000444 015705 000000 00000026340 13505462014 025477 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 02/01/2016 * ***************************************************************************/ /*************************************************************************** * apply spectral diversity to estimate residual shift after * * coregistration * ***************************************************************************/ #include "PRM.h" #include "gmtsar.h" #include "lib_defs.h" #include "lib_functions.h" #include #include #include #include typedef struct burst_bounds { int SL; int SC; int SH; int EL; int EC; int EH; int SLi; int SCi; int SHi; int ELi; int ECi; int EHi; int S; int E; } burst_bounds; char *USAGE = "\n Usage: spectral_diversity master_stem slave_stem bshfit filter\n" "\n Example: spectral_diversity S1A20150322_F1 S1A20150415_F1 0 gauss5x5\n" "\n Output: resitual_shift = 0.001234 [with a file ddphase]\n" "\n Note: make sure stem.SLCH stem.SLCL stem.BB exist \n"; int main(int argc, char **argv) { FILE *MF, *MB, *SF, *SB, *BBM, *BBS, *FILTER, *OUTP; char tmp_str[200]; struct burst_bounds bbm[200], bbs[200]; double tmp_d[200]; int kkm, kks, splm, spls, spl, nbm, nbs, ii, jj, nlm, nls, ntls, ntlm, ntl; int bshift = 0, llm, lls, nboff = 0; short *mf, *mb, *sf, *sb; float fmi, fmr, bmi, bmr, fsi, fsr, bsi, bsr; float i1, r1, i2, r2, *real, *imag, *filter, filtin, *freal, *fimag, filtdat, fsum = 0.0, famp1, famp2; float *amp1, *amp2, *corr; double phase, isum = 0.0, rsum = 0.0; int yarr, xarr, zz, *zz_r; double spec_sep, dta; if (argc < 5) die("", USAGE); // open corresponding files strcpy(tmp_str, argv[1]); strcat(tmp_str, ".SLCH"); if ((MF = fopen(tmp_str, "rb")) == NULL) die("Couldn't open slch file: \n", tmp_str); strcpy(tmp_str, argv[1]); strcat(tmp_str, ".SLCL"); if ((MB = fopen(tmp_str, "rb")) == NULL) die("Couldn't open slcl file: \n", tmp_str); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".SLCH"); if ((SF = fopen(tmp_str, "rb")) == NULL) die("Couldn't open slch file: \n", tmp_str); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".SLCL"); if ((SB = fopen(tmp_str, "rb")) == NULL) die("Couldn't open slcl file: \n", tmp_str); strcpy(tmp_str, argv[1]); strcat(tmp_str, ".BB"); if ((BBM = fopen(tmp_str, "rb")) == NULL) die("Couldn't open bb file: \n", tmp_str); strcpy(tmp_str, argv[2]); strcat(tmp_str, ".BB"); if ((BBS = fopen(tmp_str, "rb")) == NULL) die("Couldn't open bb file: \n", tmp_str); strcpy(tmp_str, argv[4]); if ((FILTER = fopen(tmp_str, "rb")) == NULL) die("Couldn't open filter file: \n", tmp_str); bshift = (int)str2double(argv[3]); nboff = floor((double)bshift / 1400.0 + 0.5); if (nboff != 0) { printf("Image has %d burst offset\n", nboff); } strcpy(tmp_str, "ddphase"); if ((OUTP = fopen(tmp_str, "w")) == NULL) die("Couldn't open output file: \n", tmp_str); // bshift = (int)str2double(argv[3]); bbm[0].SLi = bbm[0].SCi = bbm[0].SHi = bbm[0].ELi = bbm[0].ECi = bbm[0].EHi = -1; bbs[0].SLi = bbs[0].SCi = bbs[0].SHi = bbs[0].ELi = bbs[0].ECi = bbs[0].EHi = -1 - bshift; bbm[0].S = bbm[0].E = -1; bbs[0].S = bbs[0].E = -1; // get parameters fgets(tmp_str, 200 * sizeof(char), BBM); tmp_str[strlen(tmp_str) - 1] = ' '; str2dbs(tmp_d, tmp_str); nbm = (int)tmp_d[0]; splm = (int)tmp_d[1]; nlm = 0; ntlm = 0; for (ii = 1; ii <= nbm; ii++) { fgets(tmp_str, 200 * sizeof(char), BBM); // tmp_str[strlen(tmp_str)-1]=' '; str2dbs(tmp_d, tmp_str); bbm[ii].SL = (int)tmp_d[0]; bbm[ii].SC = (int)tmp_d[1]; bbm[ii].SH = (int)tmp_d[2]; bbm[ii].EL = (int)tmp_d[3]; bbm[ii].EC = (int)tmp_d[4]; bbm[ii].EH = (int)tmp_d[5]; // fprintf(stderr,"%d %d %d %d %d // %d\n",bbm[ii].SL,bbm[ii].SC,bbm[ii].SH,bbm[ii].EL,bbm[ii].EC,bbm[ii].EH); bbm[ii].SLi = bbm[ii - 1].ELi + 1; bbm[ii].SCi = bbm[ii - 1].ECi + 1; bbm[ii].SHi = bbm[ii - 1].EHi + 1; bbm[ii].ELi = bbm[ii].SLi + bbm[ii].EL - bbm[ii].SL; bbm[ii].ECi = bbm[ii].SCi + bbm[ii].EC - bbm[ii].SC; bbm[ii].EHi = bbm[ii].SHi + bbm[ii].EH - bbm[ii].SH; bbm[ii].S = bbm[ii - 1].E + 1; bbm[ii].E = bbm[ii].S + bbm[ii].EH - (bbm[ii].EL + 1); // fprintf(stderr,"%d %d %d %d %d %d %d // %d\n",bbm[ii].SLi,bbm[ii].SCi,bbm[ii].SHi,bbm[ii].ELi,bbm[ii].ECi,bbm[ii].EHi,bbm[ii].S,bbm[ii].E); nlm = nlm + bbm[ii].EH - (bbm[ii].EL + 1) + 1; ntlm = ntlm + bbm[ii].EC - bbm[ii].SC + 1; } // fprintf(stderr,"Slave Image Size %d x %d \n",nlm,splm); fgets(tmp_str, 200 * sizeof(char), BBS); tmp_str[strlen(tmp_str) - 1] = ' '; str2dbs(tmp_d, tmp_str); nbs = (int)tmp_d[0]; spls = (int)tmp_d[1]; spec_sep = tmp_d[2]; dta = tmp_d[3]; nls = 0; ntls = 0; for (ii = 1; ii <= nbs; ii++) { fgets(tmp_str, 200 * sizeof(char), BBS); // tmp_str[strlen(tmp_str)-1]=' '; str2dbs(tmp_d, tmp_str); bbs[ii].SL = (int)tmp_d[0]; bbs[ii].SC = (int)tmp_d[1]; bbs[ii].SH = (int)tmp_d[2]; bbs[ii].EL = (int)tmp_d[3]; bbs[ii].EC = (int)tmp_d[4]; bbs[ii].EH = (int)tmp_d[5]; // fprintf(stderr,"%d %d %d %d %d // %d\n",bbs[ii].SL,bbs[ii].SC,bbs[ii].SH,bbs[ii].EL,bbs[ii].EC,bbs[ii].EH); bbs[ii].SLi = bbs[ii - 1].ELi + 1; bbs[ii].SCi = bbs[ii - 1].ECi + 1; bbs[ii].SHi = bbs[ii - 1].EHi + 1; bbs[ii].ELi = bbs[ii].SLi + bbs[ii].EL - bbs[ii].SL; bbs[ii].ECi = bbs[ii].SCi + bbs[ii].EC - bbs[ii].SC; bbs[ii].EHi = bbs[ii].SHi + bbs[ii].EH - bbs[ii].SH; bbs[ii].S = bbs[ii - 1].E + 1; bbs[ii].E = bbs[ii].S + bbs[ii].EH - (bbs[ii].EL + 1); // fprintf(stderr,"%d %d %d %d %d %d %d // %d\n",bbs[ii].SLi,bbs[ii].SCi,bbs[ii].SHi,bbs[ii].ELi,bbs[ii].ECi,bbs[ii].EHi,bbs[ii].S,bbs[ii].E); nls = nls + (bbs[ii].SH - 1) - bbs[ii].SL + 1; ntls = ntls + bbs[ii].EC - bbs[ii].SC + 1; } // fprintf(stderr,"Slave Image Size %d x %d \n",nls,spls); // malloc memory for images mf = (short *)malloc(nlm * splm * 2 * sizeof(short)); mb = (short *)malloc(nlm * splm * 2 * sizeof(short)); sf = (short *)malloc(nls * spls * 2 * sizeof(short)); sb = (short *)malloc(nls * spls * 2 * sizeof(short)); fread(mf, nlm * splm * 2, sizeof(short), MF); fread(mb, nlm * splm * 2, sizeof(short), MB); fread(sf, nls * spls * 2, sizeof(short), SF); fread(sb, nls * spls * 2, sizeof(short), SB); kkm = 1; kks = kkm + nboff; ntl = ntlm; if (ntl >= ntls) ntl = ntls; if (bshift > ntl) { fprintf(stderr, "Images does not overlap, returning 0 to res_shift\n"); printf("residual_phase = %.6f\n isum = %.2g rsum = %.2g\n", 0.0, 0.0, 0.0); printf("spectral_spectrationXdta = %.6f\n", spec_sep * dta); printf("residual_shift = %.12f\n", 0.0); } spl = splm; if (spl >= spls) spl = spls; real = (float *)malloc(ntl * spl * sizeof(float)); imag = (float *)malloc(ntl * spl * sizeof(float)); freal = (float *)malloc(ntl * spl * sizeof(float)); fimag = (float *)malloc(ntl * spl * sizeof(float)); zz_r = (int *)malloc(ntl * sizeof(int)); amp1 = (float *)malloc(ntl * spl * sizeof(float)); amp2 = (float *)malloc(ntl * spl * sizeof(float)); corr = (float *)malloc(ntl * spl * sizeof(float)); // compute sum real and sum imagenary // fprintf(stderr,"Some pars: ntl: %d %d %d, spl: %d %d // %d\n",ntlm,ntls,ntl,splm,spls,spl); zz = 0; while (kkm < 1 || kks < 1) { kks++; kkm++; } if (kkm != kks) printf("starting bursts are %d for master and %d for slave\n", kkm, kks); // printf("Working on burst %d (master, zz = %d)...\n",kkm,zz); for (ii = 0; ii < ntl; ii++) { if (ii >= bbm[kkm].ELi + 1 && ii <= bbm[kkm].EHi && ii >= bbs[kks].ELi + 1 && ii <= bbs[kks].EHi) { // fprintf(stderr,"working on Line %d...\n",ii); llm = ii - (bbm[kkm].ELi + 1) + bbm[kkm].S; lls = ii - (bbs[kks].ELi + 1) + bbs[kks].S; // if (llm%100 == 0) fprintf(stderr,"master_line %d, slave_line // %d\n",llm,lls); for (jj = 0; jj < spl; jj++) { fmr = (float)mf[(llm * splm + jj) * 2]; fmi = (float)mf[(llm * splm + jj) * 2 + 1]; bmr = (float)mb[(llm * splm + jj) * 2]; bmi = (float)mb[(llm * splm + jj) * 2 + 1]; fsr = (float)sf[(lls * spls + jj) * 2]; fsi = (float)sf[(lls * spls + jj) * 2 + 1]; bsr = (float)sb[(lls * spls + jj) * 2]; bsi = (float)sb[(lls * spls + jj) * 2 + 1]; r1 = fmr * fsr + fmi * fsi; i1 = fmi * fsr - fmr * fsi; r2 = bmr * bsr + bmi * bsi; i2 = bmi * bsr - bmr * bsi; amp1[zz * spl + jj] = r1 * r1 + i1 * i1; amp2[zz * spl + jj] = r2 * r2 + i2 * i2; real[zz * spl + jj] = r1 * r2 + i1 * i2; imag[zz * spl + jj] = i1 * r2 - r1 * i2; // phase = sqrt(real*real+imag*imag)/sqrt((r1*r1+i1*i1)*(r2*r2+i2*i2)); // phase = atan2(imag[zz*spl+jj],real[zz*spl+jj]); } zz_r[zz] = ii; zz++; } if (ii > bbm[kkm].EHi && ii > bbs[kks].EHi) { kkm++; kks++; // printf("Working on burst %d (master, zz = %d)...\n",kkm,zz); // fprintf(stderr,"Computing next burst %d...\n",kk); } } // filter the phase if (fscanf(FILTER, "%d%d", &xarr, &yarr) != 2 || xarr < 1 || yarr < 1 || (xarr & 1) == 0 || (yarr & 1) == 0) die("filter incomplete", ""); if ((filter = (float *)malloc(sizeof(float) * xarr * yarr)) == NULL) die("memory allocation", ""); for (ii = 0; ii < xarr * yarr; ii++) { if (fscanf(FILTER, "%f", &filtin) == EOF) die("filter incomplete", ""); filter[ii] = filtin; fsum += filtin; } for (ii = 0; ii < zz; ii++) { for (jj = 0; jj < spl; jj++) { conv2d(real, &zz, &spl, filter, &xarr, &yarr, &filtdat, &ii, &jj, &fsum); freal[ii * spl + jj] = filtdat; conv2d(imag, &zz, &spl, filter, &xarr, &yarr, &filtdat, &ii, &jj, &fsum); fimag[ii * spl + jj] = filtdat; conv2d(amp1, &zz, &spl, filter, &xarr, &yarr, &filtdat, &ii, &jj, &fsum); famp1 = filtdat; conv2d(amp2, &zz, &spl, filter, &xarr, &yarr, &filtdat, &ii, &jj, &fsum); famp2 = filtdat; corr[ii * spl + jj] = sqrt( (freal[ii * spl + jj] * freal[ii * spl + jj] + fimag[ii * spl + jj] * fimag[ii * spl + jj]) / (famp1 * famp2)); if (corr[ii * spl + jj] > 0.6) { rsum += freal[ii * spl + jj]; } if (corr[ii * spl + jj] > 0.6) { isum += fimag[ii * spl + jj]; } } } printf("Image analyzed %dx%d...\n", spl, zz); for (ii = 0; ii < zz; ii += 10) { for (jj = 0; jj < spl; jj++) { if (corr[ii * spl + jj] > 0.3) { // fprintf(OUTP,"%d\t%d\t%.9f\n",jj,zz_r[ii],(float)(sqrt((jj-10000)*(jj-10000)+(zz_r[ii]-5000)*(zz_r[ii]-5000)))/5.0e5); phase = atan2(fimag[ii * spl + jj], freal[ii * spl + jj]); fprintf(OUTP, "%d\t%d\t%.9f\t%.9f\n", jj, zz_r[ii] + bshift, phase, corr[ii * spl + jj]); // fwrite(&phase,1,sizeof(double),OUTP); } } } phase = atan2(isum, rsum); printf("residual_phase = %.6f\n isum = %.2g rsum = %.2g\n", phase, isum, rsum); printf("spectral_spectrationXdta = %.6f\n", spec_sep * dta); printf("residual_shift = %.12f\n", phase / (2 * M_PI * spec_sep * dta)); // free memory and close corresponding files free(mf); free(mb); free(sf); free(sb); free(zz_r); free(amp1); free(amp2); free(corr); free(freal); free(fimag); free(real); free(imag); fclose(MF); fclose(MB); fclose(SF); fclose(SB); fclose(BBM); fclose(BBS); fclose(FILTER); fclose(OUTP); return (1); } GMTSAR_V5.7/.svn/pristine/fe/fef5a288b59d74d6149accc114aa6b4a91d3a303.svn-base000444 015705 000000 00000000433 13505462013 026077 0ustar00sandwellwheel000000 000000 #ifndef _COMPLEX_H #define _COMPLEX_H #include"sfd_complex.h" fcomplex Cmul(fcomplex x, fcomplex y); fcomplex Cexp(float theta); fcomplex Conjg(fcomplex z); fcomplex RCmul(float a, fcomplex z); fcomplex Cadd(fcomplex x, fcomplex y); float Cabs(fcomplex z); #endif /* _COMPLEX_H */ GMTSAR_V5.7/.svn/pristine/fe/fecdc35959c154d317aebe4431f01d475c76e073.svn-base000444 015705 000000 00000000556 13505462013 025761 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for ers after 4 x 1 decimation so the 0.5 gain % is at 100 km wavelength % clear sigx=0.93; sigy=1.16; nx=5; ny=5; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_ers_100km -ASCII -double gauss GMTSAR_V5.7/.svn/pristine/fe/fecd75ae41ae82e0962e887a66c6b3c060f7d290.svn-base000444 015705 000000 00000011660 13505462014 026050 0ustar00sandwellwheel000000 000000 # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_lapack.html # =========================================================================== # # SYNOPSIS # # AX_LAPACK([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro looks for a library that implements the LAPACK linear-algebra # interface (see http://www.netlib.org/lapack/). On success, it sets the # LAPACK_LIBS output variable to hold the requisite library linkages. # # To link with LAPACK, you should link with: # # $LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS # # in that order. BLAS_LIBS is the output variable of the AX_BLAS macro, # called automatically. FLIBS is the output variable of the # AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is # sometimes necessary in order to link with F77 libraries. Users will also # need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same # reason. # # The user may also use --with-lapack= in order to use some specific # LAPACK library . In order to link successfully, however, be aware # that you will probably need to use the same Fortran compiler (which can # be set via the F77 env. var.) as was used to compile the LAPACK and BLAS # libraries. # # ACTION-IF-FOUND is a list of shell commands to run if a LAPACK library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_LAPACK. # # LICENSE # # Copyright (c) 2009 Steven G. Johnson # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 7 AU_ALIAS([ACX_LAPACK], [AX_LAPACK]) AC_DEFUN([AX_LAPACK], [ AC_REQUIRE([AX_BLAS]) ax_lapack_ok=no AC_ARG_WITH(lapack, [AS_HELP_STRING([--with-lapack=], [use LAPACK library ])]) case $with_lapack in yes | "") ;; no) ax_lapack_ok=disable ;; -* | */* | *.a | *.so | *.so.* | *.o) LAPACK_LIBS="$with_lapack" ;; *) LAPACK_LIBS="-l$with_lapack" ;; esac # Get fortran linker name of LAPACK function to check for. AC_F77_FUNC(cheev) # We cannot use LAPACK if BLAS is not found if test "x$ax_blas_ok" != xyes; then ax_lapack_ok=noblas LAPACK_LIBS="" fi # First, check LAPACK_LIBS environment variable if test "x$LAPACK_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" AC_MSG_CHECKING([for $cheev in $LAPACK_LIBS]) AC_TRY_LINK_FUNC($cheev, [ax_lapack_ok=yes], [LAPACK_LIBS=""]) AC_MSG_RESULT($ax_lapack_ok) LIBS="$save_LIBS" if test $ax_lapack_ok = no; then LAPACK_LIBS="" fi fi # LAPACK linked to by default? (is sometimes included in BLAS lib) if test $ax_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS $BLAS_LIBS $FLIBS" AC_CHECK_FUNC($cheev, [ax_lapack_ok=yes]) LIBS="$save_LIBS" fi # Generic LAPACK library? for lapack in lapack lapack_rs6k; do if test $ax_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" AC_CHECK_LIB($lapack, $cheev, [ax_lapack_ok=yes; LAPACK_LIBS="-l$lapack"], [], [$FLIBS]) LIBS="$save_LIBS" fi done AC_SUBST(LAPACK_LIBS) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_lapack_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_LAPACK,1,[Define if you have LAPACK library.]),[$1]) : else ax_lapack_ok=no $2 fi ])dnl AX_LAPACK GMTSAR_V5.7/.svn/pristine/e4/e4ee3392e8ca33a7c587f9e99dee0598680b7da0.svn-base000444 015705 000000 00000001752 13505462013 026013 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # make a landmask # if ($#argv != 1) then echo "" echo "Usage: landmask.csh region_cut[0/10600/0/27648]" echo "" echo " make a landmask in radar coordinates " echo "NOTE: The region_cut can be specified in batch.config file" echo "" exit 1 endif if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif echo "" echo "MAKE LANDMASK -- START" echo "REQUIRE FULL RESOLUTION COASTLINE FROM GMT" echo "" gmt grdlandmask -Glandmask.grd `gmt grdinfo -I- dem.grd` `gmt grdinfo -I dem.grd` $V -NNaN/1 -Df proj_ll2ra.csh trans.dat landmask.grd landmask_ra.grd # if the landmask region is smaller than the region_cut pad with NaN gmt grd2xyz landmask_ra.grd -bo > landmask_ra.xyz gmt xyz2grd landmask_ra.xyz -bi -r -R$1 `gmt grdinfo -I landmask_ra.grd` -Gtmp.grd mv tmp.grd landmask_ra.grd gmt grdsample landmask_ra.grd -Gtmp.grd -R$1 -I4/8 -nl+t0.1 mv tmp.grd landmask_ra.grd # cleanup rm landmask.grd landmask_ra.xyz echo "MAKE LANDMASK -- END" # GMTSAR_V5.7/.svn/pristine/e4/e42eb545b07d31c2573d052539b90bc13165a145.svn-base000444 015705 000000 00000012710 13505462013 025343 0ustar00sandwellwheel000000 000000 #include #include /* February 11, 2010 converted from fortran routines spline.f providrd by Bob Parker the conversion was first performed using f2c. Then Rob Mellors made some changes to eliminate the f2c.h file so the code has no dependencies. David Sandwell tested the cod against the fortran version and the differences were al the level of the machine precision except when the interpolated point is outside the bounds of the unput data. In this case the fortran code and C-code diverge. THis is not yet understood. */ /* comments from original fortran code follow Finds array s for spline interpolator eval. Based on an alogorithm by Richard F. Thompson in 'Spline interpolation on a digital computer' (x-692-70-261) 1970 Goddard Space Flight Center. Note these splines are not 'natural' since the 2nd derivative is not zero x(1) and x(n). nn number of data points supplied (may be negative, see below) x array of x-coordinates where function is sampled. The sequence xx(1),xx(2)... must be a strictly increasing sequence. THIS IS NOT CHECKED by spline. u array of sample values that are to be interpolated. s output array of 2nd derivative at sample points. a working space array of dimension at least nn. If the user wishes derivatives at the ends of series to assume specified values, du(1)/dx, du(nn)/dx must be placed in s1, s2 and in the call nn=-number of terms in series. Normally a parabola is fitted through the 1st and last 3 points to find the slopes. If 2 points are supplied, a straight lines is fitted. If 3 points are supplied, a parabola is fitted. At evaluation time, straight-line extrapolation is provided outside the interval (x(1), x(n)). */ /*------------------------------------------------------------*/ int spline_(int *istart, int *nn, double *x, double *u, double *s, double *a) { int n, n1, i1, i, j; double r1, r2, r3, r4, r5, r6; double q1, qn, c; /* decrease arrays so that the fortran indexing works */ --a; --s; --u; --x; *istart = 0; n = abs(*nn); if (n <= 2) { s[1] = 0.0; s[2] = 0.0; return (0); } r1 = u[2] - u[1]; r2 = x[2] - x[1]; r3 = u[3] - u[1]; r4 = x[3] - x[1]; r5 = r2; r6 = r4; q1 = (r1 / (r5 * r5) - r3 / (r6 * r6)) / (1.0 / r2 - 1.0 / r4); r1 = u[n - 1] - u[n]; r2 = x[n - 1] - x[n]; r3 = u[n - 2] - u[n]; r4 = x[n - 2] - x[n]; r5 = r2; r6 = r4; qn = (r1 / (r5 * r5) - r3 / (r6 * r6)) / (1.0 / r2 - 1.0 / r4); if (n == 3) { s[1] = (qn - q1) / (x[3] - x[1]); s[2] = s[1]; s[3] = s[1]; return (0); } if (*nn <= 0) { q1 = s[1]; qn = s[2]; } s[1] = ((u[2] - u[1]) / (x[2] - x[1]) - q1) * 6.0; n1 = n - 1; i1 = n1; for (i = 2; i <= i1; ++i) { s[i] = (u[i - 1] / (x[i] - x[i - 1]) - u[i] * (1.0 / (x[i] - x[i - 1]) + 1.0 / (x[i + 1] - x[i])) + u[i + 1] / (x[i + 1] - x[i])) * 6.0; } s[n] = (qn + (u[n1] - u[n]) / (x[n] - x[n1])) * 6.0; a[1] = (x[2] - x[1]) * 2.f; a[2] = (x[2] - x[1]) * 1.5 + (x[3] - x[2]) * 2.0; s[2] -= s[1] * 0.5; i1 = n1; for (i = 3; i <= i1; ++i) { c = (x[i] - x[i - 1]) / a[i - 1]; a[i] = (x[i + 1] - x[i - 1]) * 2.f - c * (x[i] - x[i - 1]); s[i] -= c * s[i - 1]; } c = (x[n] - x[n1]) / a[n1]; a[n] = (2.f - c) * (x[n] - x[n1]); s[n] -= c * s[n1]; s[n] /= a[n]; i1 = n1; for (j = 1; j <= i1; ++j) { i = n - j; s[i] = (s[i] - (x[i + 1] - x[i]) * s[i + 1]) / a[i]; } return (EXIT_SUCCESS); } /*------------------------------------------------------------*/ /* comments from original fortran code follow Performs cubic spline interpolation of a function sampled unequally in x. The routine spline must be called once before eval is used, to set up the array s. See comments in spline. y the coordinate at which function value is desired. nn number of samples of original function. x array of sample coordinates. The sequence x(1),x(2).....x(nn) must be strictly increasing. THIS IS NOT CHECKED! u array of samples of function at the coordinates x(1),x(2)... s array of 2nd derivatives at sample points. Found by spline which must be called once before beginning interpolation. If y falls outside (x(1), x(nn)) extrapolation is based upon the tangent straight line at the endpoint.a */ int evals_(int *istart, double *y, int *nn, double *x, double *u, double *s, double *eval) { int n, l0 = 0, l1, i1; double h, r1, h6, xi; --s; --u; --x; n = abs(*nn); if (*istart > n || *istart < 1) { *istart = (n - 1) * (*y - x[1]) / (x[n] - x[1]) + 1; } if (*y <= x[1]) { goto L3000; } if (*y >= x[n]) { goto L3100; } if (*y < x[*istart]) { goto L1200; } i1 = n; for (l1 = *istart; l1 <= i1; ++l1) { if (x[l1] > *y) { goto L1150; } } L1150: l0 = l1 - 1; goto L1500; L1200: i1 = *istart; for (l1 = 1; l1 <= i1; ++l1) { l0 = *istart - l1; if (x[l0] <= *y) { goto L1350; } } L1350: l1 = l0 + 1; L1500: *istart = l0; xi = (*y - x[l0]) / (x[l1] - x[l0]); r1 = x[l1] - x[l0]; h6 = r1 * r1 / 6.f; *eval = u[l0] + xi * (u[l1] - u[l0] - h6 * (1.0 - xi) * (s[l1] * (xi + 1.f) + s[l0] * (2.0 - xi))); return 0; L3000: h = x[2] - x[1]; *eval = u[1] + (*y - x[1]) * ((u[2] - u[1]) / h - h * (s[2] - s[1] * 2.0) / 6.0); return 0; L3100: h = x[n] - x[n - 1]; *eval = u[n] + (*y - x[n]) * ((u[n] - u[n - 1]) / h + h * (s[n] * 2.0 - s[n - 1]) / 6.0); return (EXIT_SUCCESS); } /*------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/e4/e431b0d22b761ac366cd1e467174408123cbbb7d.svn-base000444 015705 000000 00000003766 13505462013 025574 0ustar00sandwellwheel000000 000000 9 9 8.6860849005128124e-02 1.7235576631676686e-01 2.8118910837651029e-01 3.7717430677833419e-01 4.1596485279363227e-01 3.7717430677833419e-01 2.8118910837651029e-01 1.7235576631676686e-01 8.6860849005128124e-02 1.2749313243948338e-01 2.5298136955160189e-01 4.1272541824533826e-01 5.5361114239191378e-01 6.1054736022966816e-01 5.5361114239191378e-01 4.1272541824533826e-01 2.5298136955160189e-01 1.2749313243948338e-01 1.6769943245613345e-01 3.3276170476018868e-01 5.4288271905796148e-01 7.2819823785084037e-01 8.0308989071788695e-01 7.2819823785084037e-01 5.4288271905796148e-01 3.3276170476018868e-01 1.6769943245613345e-01 1.9767806148653011e-01 3.9224753340267682e-01 6.3993063033165543e-01 8.5837390102029842e-01 9.4665348875326483e-01 8.5837390102029842e-01 6.3993063033165543e-01 3.9224753340267682e-01 1.9767806148653011e-01 2.0881776049531126e-01 4.1435175390233203e-01 6.7599247024847398e-01 9.0674561623469008e-01 1.0000000000000000e+00 9.0674561623469008e-01 6.7599247024847398e-01 4.1435175390233203e-01 2.0881776049531126e-01 1.9767806148653011e-01 3.9224753340267682e-01 6.3993063033165543e-01 8.5837390102029842e-01 9.4665348875326483e-01 8.5837390102029842e-01 6.3993063033165543e-01 3.9224753340267682e-01 1.9767806148653011e-01 1.6769943245613345e-01 3.3276170476018868e-01 5.4288271905796148e-01 7.2819823785084037e-01 8.0308989071788695e-01 7.2819823785084037e-01 5.4288271905796148e-01 3.3276170476018868e-01 1.6769943245613345e-01 1.2749313243948338e-01 2.5298136955160189e-01 4.1272541824533826e-01 5.5361114239191378e-01 6.1054736022966816e-01 5.5361114239191378e-01 4.1272541824533826e-01 2.5298136955160189e-01 1.2749313243948338e-01 8.6860849005128124e-02 1.7235576631676686e-01 2.8118910837651029e-01 3.7717430677833419e-01 4.1596485279363227e-01 3.7717430677833419e-01 2.8118910837651029e-01 1.7235576631676686e-01 8.6860849005128124e-02 GMTSAR_V5.7/.svn/pristine/ca/cab320daf7211d0c83ff9b5e5180d775a04c5a07.svn-base000444 015705 000000 00000025444 13505462013 026010 0ustar00sandwellwheel000000 000000 /* $Id: xcorr.c 73 2013-04-19 17:59:45Z pwessel $ */ /***************************************************************************/ /* xcorr does a 2-D cross correlation on complex or real images */ /* either using a time convolution or wavenumber multiplication. */ /* */ /***************************************************************************/ /*************************************************************************** * Creator: Rob J. Mellors * * (San Diego State University) * * Date : November 7, 2009 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 011810 Testing and very monor cosmetic modfifications DTS * * 061520 Problem with sub-pixel interpolation RJM * * - fixed bug in 2D interpolationa * * - revised read_xcorr_data to read in all x position * * - reads directly into float rather than int * * - add range interpolation * * - eliminated obsolete options and code * * - renamed xcorr_utils.c print_results.c * * - further testing.... * ***************************************************************************/ /*-------------------------------------------------------*/ #include "gmtsar.h" char *USAGE = "xcorr [GMTSAR] - Compute 2-D cross-correlation of two images\n\n" "\nUsage: xcorr master.PRM slave.PRM [-time] [-real] [-freq] [-nx n] [-ny " "n] [-xsearch xs] [-ysearch ys]\n" "master.PRM PRM file for reference image\n" "slave.PRM PRM file of secondary image\n" "-time use time cross-correlation\n" "-freq use frequency cross-correlation (default)\n" "-real read float numbers instead of complex numbers\n" "-noshift ignore ashift and rshift in prm file (set to 0)\n" "-nx nx number of locations in x (range) direction " "(int)\n" "-ny ny number of locations in y (azimuth) direction " "(int)\n" "-nointerp do not interpolate correlation function\n" "-range_interp ri interpolate range by ri (power of two) [default: 2]\n" "-norange do not range interpolate \n" "-xsearch xs search window size in x (range) direction (int " "power of 2 [32 64 128 256])\n" "-ysearch ys search window size in y (azimuth) direction " "(int power of 2 [32 64 128 256])\n" "-interp factor interpolate correlation function by factor " "(int) [default, 16]\n" "-v verbose\n" "output: \n freq_xcorr.dat (default) \n time_xcorr.dat (if -time option))\n" "\nuse fitoffset.csh to convert output to PRM format\n" "\nExample:\n" "xcorr IMG-HH-ALPSRP075880660-H1.0__A.PRM " "IMG-HH-ALPSRP129560660-H1.0__A.PRM -nx 20 -ny 50 \n" "xcorr file1.grd file2.grd -nx 20 -ny 50 (takes grids with real numbers)\n"; /*-------------------------------------------------------------------------------*/ int do_range_interpolate(void *API, struct FCOMPLEX *c, int nx, int ri, struct FCOMPLEX *work) { int i; /* interpolate c and put into work */ fft_interpolate_1d(API, c, nx, work, ri); /* replace original with interpolated (only half) */ for (i = 0; i < nx; i++) { c[i].r = work[i + nx / 2].r; c[i].i = work[i + nx / 2].i; } return (EXIT_SUCCESS); } /*-------------------------------------------------------------------------------*/ /* complex arrays used in fft correlation */ /* load complex arrays and mask out slave */ /* c1 is master */ /* c2 is slave */ /* c3 used in fft complex correlation */ /* c1, c2, and c3 are npy by npx */ /* d1, d2 are npy by nx (length of line in SLC) */ /*-------------------------------------------------------------------------------*/ void assign_values(void *API, struct xcorr *xc, int iloc) { int i, j, k, sx, mx; double mean1, mean2; /* master and slave x offsets */ mx = xc->loc[iloc].x - xc->npx / 2; sx = xc->loc[iloc].x + xc->x_offset - xc->npx / 2; for (i = 0; i < xc->npy; i++) { for (j = 0; j < xc->npx; j++) { k = i * xc->npx + j; xc->c3[k].i = xc->c3[k].r = 0.0f; xc->c1[k].r = xc->d1[i * xc->m_nx + mx + j].r; xc->c1[k].i = xc->d1[i * xc->m_nx + mx + j].i; xc->c2[k].r = xc->d2[i * xc->s_nx + sx + j].r; xc->c2[k].i = xc->d2[i * xc->s_nx + sx + j].i; } } /* range interpolate */ if (xc->ri > 1) { for (i = 0; i < xc->npy; i++) { do_range_interpolate(API, &xc->c1[i * xc->npx], xc->npx, xc->ri, xc->ritmp); do_range_interpolate(API, &xc->c2[i * xc->npx], xc->npx, xc->ri, xc->ritmp); } } /* convert to amplitude and demean */ mean1 = mean2 = 0.0; for (i = 0; i < xc->npy * xc->npx; i++) { xc->c1[i].r = Cabs(xc->c1[i]); xc->c1[i].i = 0.0f; xc->c2[i].r = Cabs(xc->c2[i]); xc->c2[i].i = 0.0f; mean1 += xc->c1[i].r; mean2 += xc->c2[i].r; } mean1 /= (double)(xc->npy * xc->npx); mean2 /= (double)(xc->npy * xc->npx); for (i = 0; i < xc->npy * xc->npx; i++) { xc->c1[i].r = xc->c1[i].r - (float)mean1; xc->c2[i].r = xc->c2[i].r - (float)mean2; } /* apply mask */ for (i = 0; i < xc->npy * xc->npx; i++) { xc->c1[i].i = xc->c2[i].i = 0.0f; xc->c2[i].r = xc->c2[i].r * (float)xc->mask[i]; xc->i1[i] = (int)(xc->c1[i].r); xc->i2[i] = (int)(xc->c2[i].r); } if (debug) fprintf(stderr, " mean %lf\n", mean1); if (debug) fprintf(stderr, " mean %lf\n", mean2); } /*-------------------------------------------------------------------------------*/ void do_correlation(void *API, struct xcorr *xc) { int i, j, iloc, istep; /* opportunity for multiple processors */ istep = 1; /* allocate arrays */ allocate_arrays(xc); /* make mask */ make_mask(xc); iloc = 0; for (i = 0; i < xc->nyl; i += istep) { /* read in data for each row */ read_xcorr_data(xc, iloc); for (j = 0; j < xc->nxl; j++) { if (debug) fprintf(stderr, " initial: iloc %d (%d,%d)\n", iloc, xc->loc[iloc].x, xc->loc[iloc].y); /* copy values from d1,d2 (real) to c1,c2 (complex) */ assign_values(API, xc, iloc); if (debug) print_complex(xc->c1, xc->npy, xc->npx, 1); if (debug) print_complex(xc->c2, xc->npy, xc->npx, 1); /* correlate patch with data over offsets in time domain */ if (xc->corr_flag < 2) do_time_corr(xc, iloc); /* correlate patch with data over offsets in freq domain */ if (xc->corr_flag == 2) do_freq_corr(API, xc, iloc); /* oversample correlation surface to obtain sub-pixel resolution */ if (xc->interp_flag == 1) do_highres_corr(API, xc, iloc); /* write out results */ print_results(xc, iloc); iloc++; } /* end of x iloc loop */ } /* end of y iloc loop */ } /*-------------------------------------------------------------------------------*/ /* want to avoid circular correlation so mask out most of b */ /* could adjust shape for different geometries */ /*-------------------------------------------------------------------------------*/ void make_mask(struct xcorr *xc) { int i, j, imask; imask = 0; for (i = 0; i < xc->npy; i++) { for (j = 0; j < xc->npx; j++) { xc->mask[i * xc->npx + j] = 1; if ((i < xc->ysearch) || (i >= (xc->npy - xc->ysearch))) { xc->mask[i * xc->npx + j] = imask; } if ((j < xc->xsearch) || (j >= (xc->npx - xc->xsearch))) { xc->mask[i * xc->npx + j] = imask; } } } } /*-------------------------------------------------------------------------------*/ void allocate_arrays(struct xcorr *xc) { int nx, ny, nx_exp, ny_exp; xc->d1 = (struct FCOMPLEX *)malloc(xc->m_nx * xc->npy * sizeof(struct FCOMPLEX)); xc->d2 = (struct FCOMPLEX *)malloc(xc->s_nx * xc->npy * sizeof(struct FCOMPLEX)); xc->i1 = (int *)malloc(xc->npx * xc->npy * sizeof(int)); xc->i2 = (int *)malloc(xc->npx * xc->npy * sizeof(int)); xc->c1 = (struct FCOMPLEX *)malloc(xc->npx * xc->npy * sizeof(struct FCOMPLEX)); xc->c2 = (struct FCOMPLEX *)malloc(xc->npx * xc->npy * sizeof(struct FCOMPLEX)); xc->c3 = (struct FCOMPLEX *)malloc(xc->npx * xc->npy * sizeof(struct FCOMPLEX)); xc->ritmp = (struct FCOMPLEX *)malloc(xc->ri * xc->npx * sizeof(struct FCOMPLEX)); xc->mask = (short *)malloc(xc->npx * xc->npy * sizeof(short)); /* this is size of correlation patch */ xc->corr = (double *)malloc(2 * xc->ri * (xc->nxc) * (xc->nyc) * sizeof(double)); if (xc->interp_flag == 1) { nx = 2 * xc->n2x; ny = 2 * xc->n2y; nx_exp = nx * (xc->interp_factor); ny_exp = ny * (xc->interp_factor); xc->md = (struct FCOMPLEX *)malloc(nx * ny * sizeof(struct FCOMPLEX)); xc->cd_exp = (struct FCOMPLEX *)malloc(nx_exp * ny_exp * sizeof(struct FCOMPLEX)); } } /*-------------------------------------------------------*/ int main(int argc, char **argv) { int input_flag, nfiles; struct xcorr *xc; clock_t start, end; double cpu_time; void *API = NULL; /* GMT API control structure */ xc = (struct xcorr *)malloc(sizeof(struct xcorr)); verbose = 0; debug = 0; input_flag = 0; nfiles = 2; xc->interp_flag = 0; xc->corr_flag = 2; /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; if (argc < 3) die(USAGE, ""); set_defaults(xc); parse_command_line(argc, argv, xc, &nfiles, &input_flag, USAGE); /* read prm files */ if (input_flag == 0) handle_prm(API, argv, xc, nfiles); if (debug) print_params(xc); /* output file */ if (xc->corr_flag == 0) strcpy(xc->filename, "time_xcorr.dat"); if (xc->corr_flag == 1) strcpy(xc->filename, "time_xcorr_Gatelli.dat"); if (xc->corr_flag == 2) strcpy(xc->filename, "freq_xcorr.dat"); xc->file = fopen(xc->filename, "w"); if (xc->file == NULL) die("Can't open output file", xc->filename); /* x locations, y locations */ get_locations(xc); /* calculate correlation at all points */ start = clock(); do_correlation(API, xc); /* write the a_stretch_a based on the PRF differences */ /* fprintf(xc->file,"a_stretch_a = %f \n",xc->astretcha); */ end = clock(); cpu_time = ((double)(end - start)) / CLOCKS_PER_SEC; fprintf(stdout, " elapsed time: %lf \n", cpu_time); fclose(xc->data1); fclose(xc->data2); if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/ca/ca70480ed52829b95c7d8e0507213ed74903fc1b.svn-base000444 015705 000000 00000006421 13505462013 025607 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Calculate Doppler centroid using the method of Masden 1989 * * Doppler variations with range are small for ALOS and not calculated * *******************************************************************************/ /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "gmtsar.h" #include "siocomplex.h" void read_raw_data(fcomplex *, unsigned char *, int, struct PRM *); void calc_dop(struct PRM *prm) { unsigned char *indata; int i, j; long n; float *xr, *ac, *sg; double sumd; fcomplex *ai, *bi, *ab; fcomplex ctmp; FILE *fin; fprintf(stderr, ".... calculating doppler for %s\n", prm->input_file); fin = fopen(prm->input_file, "r"); if (fin == NULL) die("can't open", prm->input_file); /* allocate memory */ indata = (unsigned char *)malloc(prm->bytes_per_line * sizeof(unsigned char)); n = prm->good_bytes / 2 - prm->first_sample; xr = (float *)malloc(n * sizeof(float)); ac = (float *)malloc(n * sizeof(float)); sg = (float *)malloc(n * sizeof(float)); ai = (fcomplex *)malloc(n * sizeof(fcomplex)); bi = (fcomplex *)malloc(n * sizeof(fcomplex)); ab = (fcomplex *)malloc(2 * n * sizeof(fcomplex)); /* read a line of data from fin (input file, chars) to ai (complex floats) */ fread(indata, sizeof(unsigned char), prm->bytes_per_line, fin); for (i = 0; i < n; i++) read_raw_data(ai, indata, i, prm); /* read remaining lines and set ai = bi */ /* inefficient; could put loops inside each other */ for (i = prm->first_line; i < prm->num_lines - 1; i++) { if (i / 2000 == i / 2000.0) fprintf(stderr, " Working on line %d \n", i); fread(indata, sizeof(unsigned char), prm->bytes_per_line, fin); for (j = 0; j < n; j++) { read_raw_data(bi, indata, j, prm); ctmp = Cmul(Conjg(ai[j]), bi[j]); ab[j].r = ab[j].r + ctmp.r; ab[j].i = ab[j].i + ctmp.i; ai[j].r = bi[j].r; ai[j].i = bi[j].i; } } /* compute the Doppler as a function of range */ sumd = 0.0; for (j = 0; j < n; j++) { ac[j] = atan2f(ab[j].i, ab[j].r) / (2.0 * M_PI); sumd = sumd + ac[j]; } /* now either output the average Doppler or a linear trend fit */ prm->fd1 = (sumd / (1.0 * n)) * prm->prf; prm->fdd1 = 0.0 * prm->prf; prm->fddd1 = 0.0 * prm->prf; fclose(fin); free(xr); free(ac); free(sg); free(ai); free(bi); free(ab); } /*---------------------------------------------------*/ void read_raw_data(fcomplex *data, unsigned char *indata, int i, struct PRM *prm) { int ii; ii = i + prm->first_sample; if ((((int)indata[2 * ii]) != NULL_DATA) && (((int)indata[2 * ii + 1]) != NULL_DATA)) { data[i].r = ((float)indata[2 * ii]) - prm->xmi; data[i].i = ((float)indata[2 * ii + 1]) - prm->xmq; } else { data[i].r = 0.0; data[i].i = 0.0; } } /*---------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/ca/ca9d04ad694d5a715661538ef9c6b08114317d45.svn-base000444 015705 000000 00000024321 13505462013 025531 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # David Dandwell, December 29, 2015 # # process Sentinel-1A TOPS data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv < 3) then echo "" echo "Usage: p2p_S1_TOPS.csh master_image slave_image configuration_file" echo "" echo "Example: p2p_S1_TOPS.csh S1_20150526_F1 S1_20150607_F1 config.tsx.slc.txt " echo "" echo " Place the pre-processed data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "Reference: Xu, X., Sandwell, D.T., Tymofyeyeva, E., González-Ortega, A. and Tong, X., " echo " 2017. Tectonic and Anthropogenic Deformation at the Cerro Prieto Geothermal " echo " Step-Over Revealed by Sentinel-1A InSAR. IEEE Transactions on Geoscience and " echo " Remote Sensing." exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set range_dec = `grep range_dec $3 | awk '{print $3}'` set azimuth_dec = `grep azimuth_dec $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # set the higher Doppler terms to zerp to be zero # update_PRM $master.PRM fdd1 0 update_PRM $master.PRM fddd1 0 # update_PRM $slave.PRM fdd1 0 update_PRM $slave.PRM fddd1 0 # rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . # cp $slave.PRM $slave.PRM0 # resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 1 # rm $slave.SLC # mv $slave.SLCresamp $slave.SLC # cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## #if (6 == 9) then if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then if ($threshold_geocode != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. else echo "" echo "SKIP GEOCODE" echo "" endif endif # end GMTSAR_V5.7/.svn/pristine/ca/caa9b96d655f96864b09e9aaf3969d5aa8f552f3.svn-base000444 015705 000000 00000002777 13505462013 026102 0ustar00sandwellwheel000000 000000 .TH FITOFFSET l "04/10/98 \(co 1998 David Sandwell" "fitoffset.l 1.0" "SIOSAR Command" .SH NAME fitoffset \- calculates 6 parameters needed to align slave image to master image .SH SYNOPSIS .B fitoffset .I offset.dat [SNR] .SH DESCRIPTION The .B fitoffset command reads numerous estimates of pixel offset between master and slave images and performs a least-squares adjustment to establish 6 parameters needed for reprocessing the slave image using .B esarp so it will be in sub-pixel alignment with the master image. The optional SNR parameter will edit offset estimates with SNR less than this value prior to the adjustment. If no SNR value is provided then the program will run in an interactive mode. Here is an example run: .sp .br fitoffset offset.dat 50 .br stretch_r = -9.25792E-06 .br stretch_a = 4.23417E-06 .br yshift = 653 .br sub_int_a = 0.333923 .br xshift = -3 .br sub_int_r = 0.806506 .br These parameters should be appended to the slave.PRM file. .sp .TP 10 .I offset.dat file of offsets generated by running the program offset .TP 10 .I SNR optional signal-to-noise ratio for editing individual offsets prior to least-squares estimation of alignment parameters. .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B offset(l) esarp(l) .sp .SH AUTHOR Howard Zebker. Modified by David T. Sandwell. .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/.svn/pristine/cf/cf1ee770c5d73bba5844d2a4aee10ed68bbc6524.svn-base000444 015705 000000 00000024661 13505462013 026247 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Matt Wei, May 2010 # based on Xiaopeng Tong, Feb 10, 2010 # modified for CSK, david Sandwell, January 31, 2014 # # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv < 3) then echo "" echo "Usage: p2p_CSK.csh master_stem slave_stem configuration_file" echo "" echo "Example: p2p_CSK.csh CSK20140105 CSK20140121 config.csk.txt" echo "" echo " Place the raw data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. The two files of raw data must have a suffix .baq" echo " Execute this command at the directory location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" exit 1 endif # start # # make sure the files exist # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` if ((! $?near_range) || ($near_range == "")) then set near_range = 0 endif set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set npatch = `grep num_patches $3 | awk '{print $3}'` if ((! $?npatch) || ($npatch == "")) then set npatch = 0 endif set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # # cleanup.csh raw # echo "" echo " PREPROCESS CSK DATA -- START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # calculate SC_vel and SC_height # mv $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius $fd cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # mv $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius $fd cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 # # set the number of patches if set in the config file # check patch number, if different, use the smaller one # if ($npatch > 0) then update_PRM $slave.PRM num_patches $npatch update_PRM $master.PRM num_patches $npatch endif set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` if ($pch1 != $pch2) then echo "Different number of patches: $pch1 $pch2" if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp cd .. echo " PREPROCESS CSK DATA -- END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # focus and align SLC files # echo " " echo "ALIGN.CSH - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.raw . ln -s ../raw/$slave.raw . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . # # use the SAT code because it is generic # align.csh SAT $master $slave cd .. echo "ALIGN.CSH - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is a dem.grd # if ($topo_phase == 1) then echo " " echo " DEM2TOPOP_RA.CSH - START " echo " USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make interferogram # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/.svn/pristine/cf/cf1174a6327ae3c2bef13321889bcea117da5654.svn-base000444 015705 000000 00000001044 13505462014 025732 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl use strict; my $auxi_file; my $time_file; my @auxi_list; my @data_time; my $n = 0; $auxi_file = $ARGV[0]; $time_file = $ARGV[1]; open(DAT,$auxi_file) || die("Could not open file!"); chomp(@auxi_list = ); close(DAT); open(DAT2,$time_file) || die("Could not open file!"); chomp(@data_time = ); close(DAT2); LINE:foreach(@auxi_list){ if($_ =~ /IEC(\d*)_(\d*)_(\d*)_(\d*)_(\d*)_(\d*)/){ if(($3 < $data_time[0]) && ( $5 > $data_time[1]) ) { print $_; $n++; } } last LINE if($n >=1); } GMTSAR_V5.7/.svn/pristine/f5/f5b57d7b55f948254f7543cb576a1e65163cf8df.svn-base000444 015705 000000 00000017323 13505462013 025653 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # Xiaohua XU, Jan 10, 2019 # # process ALOS2 ScanSAR data # Automatically process a single frame of interferogram. # alias rm 'rm -f' unset noclobber # if ($#argv != 4) then echo "" echo "Usage: p2p_ALOS2_Scan_Frame.csh Master_stem Slave_stem config.alos2.txt parallel" echo "" echo "Example: p2p_ALOS2_Scan_Frame.csh IMG-HH-ALOS2234653650-180927-WBDR1.1__D IMG-HH-ALOS2236723650-181011-WBDR1.1__D config.alos2.txt 1" echo "" echo " Place the IMG-files and LED-files in the raw folder, DEM in the topo folder." echo " During processing, F1 - F5 and merge folder will be generated." echo " All SLCs will be upsampled to PRF 3350 and then processed." echo " Final results will be placed in the merge folder, with phase" echo " corr [unwrapped phase]." echo " parallel = 0-sequential 1-parallel " echo "" exit 1 endif # start # # set processing mode seq # set seq = $4 echo "Processing 0-sequential 1-parallel [$seq] ..." set master = `echo $1 | awk '{print substr($1,8,length($1)-7)}'` set slave = `echo $2 | awk '{print substr($1,8,length($1)-7)}'` #if ( 6 == 9 ) then # # determine file names # set pth = `pwd` foreach swath (1 2 3 4 5) echo "Linking files for Subswath $swath ..." mkdir F$swath cd F$swath mkdir raw topo cd topo ln -s ../../topo/dem.grd . cd ../raw ln -s ../../raw/$1"-F"$swath . ln -s ../../raw/$2"-F"$swath . ln -s ../../raw/LED-$master ./LED-$master"-F"$swath ln -s ../../raw/LED-$slave ./LED-$slave"-F"$swath cd .. sed "s/.*threshold_geocode.*/threshold_geocode = 0/g" ../$3 | sed "s/.*threshold_snaphu.*/threshold_snaphu = 0/g" | sed "s/.*iono_skip_est.*/iono_skip_est = 1/g"> $3 cd .. end # # process data # if ($seq == 0) then foreach swath (1 2 3 4 5) cd F$swath sed "s/.*skip_stage.*/skip_stage = 2,3,4,5,6/g" $3 > tmp_config p2p_processing.csh ALOS2_SCAN $1"-F"$swath $2"-F"$swath tmp_config cd raw samp_slc.csh $1"-F"$swath 3350 0 samp_slc.csh $2"-F"$swath 3350 0 cd .. sed "s/.*skip_stage.*/skip_stage = 1/g" $3 > tmp_config p2p_processing.csh ALOS2_SCAN $1"-F"$swath $2"-F"$swath tmp_config rm tmp_config cd .. end else if ($seq == 1) then foreach swath (1 2 3 4 5) cd F$swath sed "s/.*skip_stage.*/skip_stage = 2,3,4,5,6/g" $3 > tmp_config p2p_processing.csh ALOS2_SCAN $1"-F"$swath $2"-F"$swath tmp_config >&log& cd .. end wait foreach swath (1 2 3 4 5) cd F$swath/raw samp_slc.csh $1"-F"$swath 3350 0 samp_slc.csh $2"-F"$swath 3350 0 cd ../.. end wait foreach swath (1 2 3 4 5) cd F$swath sed "s/.*skip_stage.*/skip_stage = 1/g" $3 > tmp_config p2p_processing.csh ALOS2_SCAN $1"-F"$swath $2"-F"$swath tmp_config >&log& cd .. end wait else echo "Invalid parallel mode" exit 1 endif #endif # # merge_unwrap_geocode # mkdir merge cd merge ln -s ../topo/dem.grd . ln -s ../F1/intf/*/gauss* . set pth1 = `ls ../F1/intf/*/*PRM | awk NR==1'{print $1}' | awk -F"/" '{for (i=1;i phaselist echo $pth2$prm2m":"$pth2"phasefilt.grd" >> phaselist echo $pth3$prm3m":"$pth3"phasefilt.grd" >> phaselist echo $pth4$prm4m":"$pth4"phasefilt.grd" >> phaselist echo $pth5$prm5m":"$pth5"phasefilt.grd" >> phaselist head -3 phaselist > first.txt merge_swath first.txt first.grd first echo "first.PRM:first.grd" > second.txt tail -2 phaselist >> second.txt merge_swath second.txt second.grd second mv second.PRM $prm1m mv second.grd phasefilt.grd rm first* second* echo $pth1$prm1m":"$pth1"corr.grd" > corrlist echo $pth2$prm2m":"$pth2"corr.grd" >> corrlist echo $pth3$prm3m":"$pth3"corr.grd" >> corrlist echo $pth4$prm4m":"$pth4"corr.grd" >> corrlist echo $pth5$prm5m":"$pth5"corr.grd" >> corrlist head -3 corrlist > first.txt merge_swath first.txt first.grd first echo "first.PRM:first.grd" > second.txt tail -2 corrlist >> second.txt merge_swath second.txt second.grd second mv second.grd corr.grd rm first* second* echo $pth1$prm1m":"$pth1"mask.grd" > masklist echo $pth2$prm2m":"$pth2"mask.grd" >> masklist echo $pth3$prm3m":"$pth3"mask.grd" >> masklist echo $pth4$prm4m":"$pth4"mask.grd" >> masklist echo $pth5$prm5m":"$pth5"mask.grd" >> masklist head -3 masklist > first.txt merge_swath first.txt first.grd first echo "first.PRM:first.grd" > second.txt tail -2 masklist >> second.txt merge_swath second.txt second.grd second mv second.grd mask.grd rm first* second* if (! -f trans.dat) then if (! -f dem.grd) then echo "ERROR: missing dem.grd ... (link from the topo folder)" exit 1 endif set led = `grep led_file $prm1m | awk '{print $3}'` cp $pth1$led . gmt grd2xyz --FORMAT_FLOAT_OUT=%lf dem.grd -s | SAT_llt2rat $prm1m 1 -bod > trans.dat endif # Read in parameters set threshold_snaphu = `grep threshold_snaphu $2 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $2 | awk '{print $3}'` set region_cut = `grep region_cut $2 | awk '{print $3}'` set mask_water = `grep mask_water $2 | awk '{print $3}'` set defomax = `grep defomax $2 | awk '{print $3}'` set near_interp = `grep near_interp $2 | awk '{print $3}'` # Unwrapping if ($region_cut == "") then set region_cut = `gmt grdinfo phasefilt.grd -I- | cut -c3-20` endif if ($threshold_snaphu != 0 ) then if ($mask_water == 1) then if (! -f landmask_ra.grd) then landmask.csh $region_cut endif endif echo "" echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" else echo "" echo "SKIP UNWRAP PHASE" endif if ($threshold_geocode != 0) then echo "" echo "GEOCODE-START" proj_ra2ll.csh trans.dat phasefilt.grd phasefilt_ll.grd proj_ra2ll.csh trans.dat corr.grd corr_ll.grd gmt makecpt -Crainbow -T-3.15/3.15/0.05 -Z > phase.cpt set BT = `gmt grdinfo -C corr.grd | awk '{print $7}'` gmt makecpt -Cgray -T0/$BT/0.05 -Z > corr.cpt grd2kml.csh phasefilt_ll phase.cpt grd2kml.csh corr_ll corr.cpt if (-f unwrap.grd) then gmt grdmath unwrap.grd mask.grd MUL = unwrap_mask.grd proj_ra2ll.csh trans.dat unwrap.grd unwrap_ll.grd proj_ra2ll.csh trans.dat unwrap_mask.grd unwrap_mask_ll.grd set BT = `gmt grdinfo -C unwrap.grd | awk '{print $7}'` set BL = `gmt grdinfo -C unwrap.grd | awk '{print $6}'` gmt makecpt -T$BL/$BT/0.5 -Z > unwrap.cpt grd2kml.csh unwrap_mask_ll unwrap.cpt grd2kml.csh unwrap_ll unwrap.cpt endif echo "GEOCODE END" endif GMTSAR_V5.7/.svn/pristine/f2/f2a360d889402e5f3a5ad342d86c00d05204960b.svn-base000444 015705 000000 00000005322 13505462014 025431 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 07/13/08 adjusted the stop time in case of * a prf change. * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" /* int is_big_endian_(void); int is_big_endian__(void); void die (char *, char *); void cross3_(double *, double *, double *); void get_seconds(struct PRM, double *, double *); */ /*---------------------------------------------------------------*/ /* check endian of machine */ /* 1 if big; -1 if little */ int is_big_endian_() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } int is_big_endian__() { return is_big_endian_(); } /*---------------------------------------------------------------*/ /*---------------------------------------------------------------*/ /* write out error message and exit */ /* use two strings to allow more complicated error messages */ void die(char *s1, char *s2) { fprintf(stderr, " %s %s \n", s1, s2); exit(1); } /*---------------------------------------------------------------*/ /************************************************************************ * cross3 is a routine to take the cross product of 3-D vectors * *************************************************************************/ void cross3_(double *a, double *b, double *c) /* input and output vectors having 3 elements */ { c[0] = (a[1] * b[2]) - (a[2] * b[1]); c[1] = (-a[0] * b[2]) + (a[2] * b[0]); c[2] = (a[0] * b[1]) - (a[1] * b[0]); } /*---------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /* find seconds */ void get_seconds(struct PRM p, double *start, double *end) { int m; double doy; double n_secs_day; double prf_master; n_secs_day = 24.0 * 60.0 * 60.0; doy = p.clock_start; m = p.nrows - p.num_valid_az; /* adjust the prf to use the a_rsatretch_a scale factor which was needed to match the slave image to the master image */ prf_master = p.prf / (1. + p.a_stretch_a); *start = n_secs_day * doy + (p.ashift + p.sub_int_a) / (prf_master) + (1.0 * m) / (2.0 * prf_master); *end = *start + p.num_patches * p.num_valid_az / prf_master; } /*---------------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/f2/f28ae09e9328c6b480b8387f8bc51eef4f14c103.svn-base000444 015705 000000 00000037567 13505462014 025724 0ustar00sandwellwheel000000 000000 /**************************************************************************** * Program to project a longitude, latitude, and topography * into a file of range, azimuth, and topography. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 06/04/09 - update the range sampling rate from new PRM file to solve * * confict of rng_samp_rate between LED file and PRM file in FBD mode. * ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 2 char *USAGE = " \n Usage: " "ALOS_llt2rat master.PRM prec [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " precise - (0) standard processing, (1) - polynomial " "refinenent for backprojection (slower) \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - range, azimuth, lon, lat, elevation [ASCII " "default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: ALOS_llt2rat master.PRM 0 < topo.llt > topo.ratll \n"; /* int parse_ALOS_llt2rat(char **, char *); */ int main(int argc, char **argv) { FILE *fprm1 = NULL; int otype; double rln, rlt, rht, dr, t1, t11, t2, tm; double ts, rng0, thet, relp, telp, dopc; double xp[3]; double xt[3]; double rp[3]; double dd[5]; /* dummy for output double precision */ float ds[5]; /* dummy for output single precision */ double r0, rf, a0, af; double rad = PI / 180.; double fll, rdd, daa, drr; double dt, xs, ys, zs; double time[10], rng[10], d[3]; /* arrays used for polynomial refinement of min range */ int ir, k, ntt = 10, nc = 3; /* size of arrays used for polynomial refinement */ int j, nrec, npad = 8000, precise = 0; int goldop(); int stai, endi, midi; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; char name[128], value[128]; double rsr; FILE *ldrfile; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); /* Make sure usage is correct and files can be opened */ if (argc < 3 || argc > 4) { fprintf(stderr, "%s\n", USAGE); exit(-1); } precise = atoi(argv[2]); /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 4) { if (!strcmp(argv[3], "-bos")) otype = 2; else if (!strcmp(argv[3], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* dubugging fprintf(stderr,"debug\n"); fprintf(stderr,"%s\n",prm.led_file); fprintf(stderr,"%lf\n",prm.fs); fprintf(stderr,"%lf\n",prm.fd1); fprintf(stderr,"%d\n",prm.num_rng_bins); fprintf(stderr,"%d\n",prm.num_valid_az); fprintf(stderr,"%lf\n",prm.rc); fprintf(stderr,"%lf\n",prm.ra); fprintf(stderr,"%lf\n",prm.prf); fprintf(stderr,"%lf\n",prm.RE); fprintf(stderr,"%lf\n",prm.sub_int_a); fprintf(stderr,"%lf\n",prm.SC_clock_start); fprintf(stderr,"%lf\n",prm.clock_start); fprintf(stderr,"%d\n",prm.nrows); fprintf(stderr,"%d\n",prm.num_patches); fprintf(stderr,"%lf\n",prm.near_range); fprintf(stderr,"rshift = %d\n",prm.rshift); fprintf(stderr,"sub_int_r = %lf\n",prm.sub_int_r); fprintf(stderr,"chirp_ext = %d\n",prm.chirp_ext); */ fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ALOS_sarleader(ldrfile, &prm, orb); /* update the rng_samp_rate in PRM file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); exit(-1); } while (fscanf(fprm1, "%s = %s \n", name, value) != EOF) { if (strcmp(name, "rng_samp_rate") == 0) { get_double(name, "rng_samp_rate", value, &rsr); } } prm.fs = rsr; dr = 0.5 * SOL / prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); t2 = t1 + prm.num_patches * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ /* fprintf(stderr,"ts=%lf,t1=%lf,nrec=%d\n",ts,t1,nrec); */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* look at the orb_pos for(i=0;i<4;i++) { for (j=0;j 180.) rp[1] = rp[1] - 360.; xt[0] = -1.0; /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); (void)goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng0, &tm); if (precise == 1) { /* refine this minimum range and azimuth with a polynomial fit */ dt = 1. / ntt; /* make the polynomial 1 second long */ for (k = 0; k < ntt; k++) { time[k] = dt * (k - ntt / 2 + .5); t11 = tm + time[k]; interpolate_ALOS_orbit_slow(orb, t11, &xs, &ys, &zs, &ir); rng[k] = sqrt((xp[0] - xs) * (xp[0] - xs) + (xp[1] - ys) * (xp[1] - ys) + (xp[2] - zs) * (xp[2] - zs)) - rng0; } /* fit a second order polynomial to the range versus time function and * update the tm and rng0 */ polyfit(time, rng, d, &ntt, &nc); tm = tm - d[1] / (2. * d[2]); interpolate_ALOS_orbit_slow(orb, tm, &xs, &ys, &zs, &ir); rng0 = sqrt((xp[0] - xs) * (xp[0] - xs) + (xp[1] - ys) * (xp[1] - ys) + (xp[2] - zs) * (xp[2] - zs)); } /* compute the range and azimuth in pixel space */ xt[0] = rng0; xt[1] = tm; /* compute the range and azimuth in pixel space and correct for ALOS-1 and ALOS-2 Note that ALOS-1 uses the range and azimuth corrections from the non-zero Doppler. Note that ALOS-2 is corrected to zero Doppler so these corrections are not needed.*/ if (prm.SC_clock_start / 1000. > 2014.) { xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a) - 1; } else { xt[0] = (xt[0] - prm.near_range) / dr - (prm.rshift + prm.sub_int_r) + prm.chirp_ext; xt[1] = prm.prf * (xt[1] - t1) - (prm.ashift + prm.sub_int_a) + 4; /* compute the azimuth and range correction for ALOS-1 if the Doppler is * not zero */ // printf(" year fd1 fdd1 %f %f %f // \n",prm.SC_clock_start/1000.,prm.fd1,prm.fdd1); if (prm.fd1 != 0.) { dopc = prm.fd1 + prm.fdd1 * (prm.near_range + dr * prm.num_rng_bins / 2.); rdd = (prm.vel * prm.vel) / rng0; daa = -0.5 * (prm.lambda * dopc) / rdd; drr = 0.5 * rdd * daa * daa / dr; daa = prm.prf * daa; /*printf(" vel lambda dopc prf %f %f %f %f \n",prm.vel,prm.lambda,dopc,prm.prf); printf(" rng, rdd, daa, drr xt[1] %f %f %f %f %f \n",rng, rdd, daa, drr, xt[1]); */ xt[0] = xt[0] + drr; xt[1] = xt[1] + daa; } } /* fprintf(stderr," dda, %f \n",daa); */ if (precise == 1) xt[1] = xt[1] - .5; /* this correction is needed for the precise to match the standard on average */ if (xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) continue; if (otype == 1) { fprintf(stdout, "%f %f %f %f %f \n", xt[0], xt[1], rp[2], rp[1], rp[0]); } else if (otype == 2) { ds[0] = (float)xt[0]; ds[1] = (float)xt[1]; ds[2] = (float)rp[2]; ds[3] = (float)rp[1]; ds[4] = (float)rp[0]; fwrite(ds, sizeof(float), 5, stdout); } else if (otype == 3) { dd[0] = xt[0]; dd[1] = xt[1]; dd[2] = rp[2]; dd[3] = rp[1]; dd[4] = rp[0]; fwrite(dd, sizeof(double), 5, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL && (x2 != x1)) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/.svn/pristine/f2/f23b87f901dd9fa4dabcd68c2b8649142c6911db.svn-base000444 015705 000000 00000004021 13505462014 026032 0ustar00sandwellwheel000000 000000 /* include files to define sarleader structure */ #include "data_ALOS.h" #include "data_ALOSE.h" #include "orbit_ALOS.h" #include "sarleader_ALOS.h" #include "sarleader_fdr.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* function prototypes */ void ALOS_ldr_orbit(struct ALOS_ORB *, struct PRM *); int write_ALOS_LED(struct ALOS_ORB *, struct PRM *, char *); void write_orb(FILE *, struct ALOS_ORB *); void calc_height_velocity(struct ALOS_ORB *, struct PRM *, double, double, double *, double *, double *, double *, double *); void calc_dop(struct PRM *); void cfft1d_(int *, fcomplex *, int *); void read_data(fcomplex *, unsigned char *, int, struct PRM *); void null_sio_struct(struct PRM *); void get_sio_struct(FILE *, struct PRM *); void put_sio_struct(struct PRM, FILE *); void get_string(char *, char *, char *, char *); void get_int(char *, char *, char *, int *); void get_double(char *, char *, char *, double *); void hermite_c(double *, double *, double *, int, int, double, double *, int *); void interpolate_ALOS_orbit_slow(struct ALOS_ORB *, double, double *, double *, double *, int *); void interpolate_ALOS_orbit(struct ALOS_ORB *, double *, double *, double *, double, double *, double *, double *, int *); void get_orbit_info(struct ALOS_ORB *, struct SAR_info); void get_attitude_info(struct ALOS_ATT *, int, struct SAR_info); void print_binary_position(struct sarleader_binary *, int, FILE *, FILE *); void read_ALOS_sarleader(FILE *, struct PRM *, struct ALOS_ORB *); void set_ALOS_defaults(struct PRM *); void ALOS_ldr_prm(struct SAR_info, struct PRM *); int is_big_endian_(void); int is_big_endian__(void); void die(char *, char *); void cross3_(double *, double *, double *); void get_seconds(struct PRM, double *, double *); void plh2xyz(double *, double *, double, double); void xyz2plh(double *, double *, double, double); void polyfit(double *, double *, double *, int *, int *); void gauss_jordan(double **, double *, double *, int *); int find_fft_length(int); void rng_expand(fcomplex *, int, fcomplex *, int); GMTSAR_V5.7/.svn/pristine/fd/fd8fb192e2ff677ad4c7aab8ec00224a4e7c6ee3.svn-base000444 015705 000000 00000001276 13505462014 026341 0ustar00sandwellwheel000000 000000 sinclude ../../../config.mk # Makefile for lib_src LIB = libALOS.a INCLUDES = -I../include SRCS = utils.c \ null_sio_struct.c \ get_sio_struct.c \ put_sio_struct.c \ calc_dop.c \ hermite_c.c \ ALOS_ldr_orbit.c \ ALOSE_orbits_utils.c \ interpolate_ALOS_orbit.c \ read_ALOS_sarleader.c \ set_ALOS_defaults.c \ write_ALOS_prm.c \ write_ALOS_LED.c \ write_orb.c \ rng_expand.c \ rng_compress.c \ rng_filter.c \ find_fft_length.c \ siocomplex.c \ polyfit.c \ plh2xyz.c \ xyz2plh.c \ cfft1d.c \ swap32.c \ swap16.c \ fftpack.c OBJS= $(SRCS:.c=.o) $(LIB) : $(OBJS) $(AR) r $(LIB) $? $(RANLIB) $(LIB) all: install install: $(LIB) $(INSTALL) *.a ../lib clean: rm -f *.a *.o GMTSAR_V5.7/.svn/pristine/fd/fd64c8a422d76b2730afa99d4c89fca4d83cdb48.svn-base000444 015705 000000 00000000061 13505462013 026203 0ustar00sandwellwheel000000 000000 3 5 1. 1. 0. 1. 1. 0. 1. 1. 0. 1. 1. 0. 0. 0. 0. GMTSAR_V5.7/.svn/pristine/fd/fd095de6c39d74feff3b5a89874354bdcd4427ab.svn-base000444 015705 000000 00000017651 13505462013 026231 0ustar00sandwellwheel000000 000000 # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_blas.html # =========================================================================== # # SYNOPSIS # # AX_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro looks for a library that implements the BLAS linear-algebra # interface (see http://www.netlib.org/blas/). On success, it sets the # BLAS_LIBS output variable to hold the requisite library linkages. # # To link with BLAS, you should link with: # # $BLAS_LIBS $LIBS $FLIBS # # in that order. FLIBS is the output variable of the # AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is # sometimes necessary in order to link with F77 libraries. Users will also # need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same # reason. # # Many libraries are searched for, from ATLAS to CXML to ESSL. The user # may also use --with-blas= in order to use some specific BLAS # library . In order to link successfully, however, be aware that you # will probably need to use the same Fortran compiler (which can be set # via the F77 env. var.) as was used to compile the BLAS library. # # ACTION-IF-FOUND is a list of shell commands to run if a BLAS library is # found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is # not found. If ACTION-IF-FOUND is not specified, the default action will # define HAVE_BLAS. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 14 AU_ALIAS([ACX_BLAS], [AX_BLAS]) AC_DEFUN([AX_BLAS], [ AC_PREREQ(2.50) AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS]) AC_REQUIRE([AC_CANONICAL_HOST]) ax_blas_ok=no AC_ARG_WITH(blas, [AS_HELP_STRING([--with-blas=], [use BLAS library ])]) case $with_blas in yes | "") ;; no) ax_blas_ok=disable ;; -* | */* | *.a | *.so | *.so.* | *.o) BLAS_LIBS="$with_blas" ;; *) BLAS_LIBS="-l$with_blas" ;; esac # Get fortran linker names of BLAS functions to check for. AC_F77_FUNC(sgemm) AC_F77_FUNC(dgemm) ax_blas_save_LIBS="$LIBS" LIBS="$LIBS $FLIBS" # First, check BLAS_LIBS environment variable if test $ax_blas_ok = no; then if test "x$BLAS_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" AC_MSG_CHECKING([for $sgemm in $BLAS_LIBS]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes], [BLAS_LIBS=""]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi fi # BLAS linked to by default? (happens on some supercomputers) if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS" AC_MSG_CHECKING([if $sgemm is being linked in already]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi # BLAS in OpenBLAS library? (http://xianyi.github.com/OpenBLAS/) if test $ax_blas_ok = no; then AC_CHECK_LIB(openblas, $sgemm, [ax_blas_ok=yes BLAS_LIBS="-lopenblas"]) fi # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) if test $ax_blas_ok = no; then AC_CHECK_LIB(atlas, ATL_xerbla, [AC_CHECK_LIB(f77blas, $sgemm, [AC_CHECK_LIB(cblas, cblas_dgemm, [ax_blas_ok=yes BLAS_LIBS="-lcblas -lf77blas -latlas"], [], [-lf77blas -latlas])], [], [-latlas])]) fi # BLAS in PhiPACK libraries? (requires generic BLAS lib, too) if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [AC_CHECK_LIB(dgemm, $dgemm, [AC_CHECK_LIB(sgemm, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"], [], [-lblas])], [], [-lblas])]) fi # BLAS in Intel MKL library? if test $ax_blas_ok = no; then # MKL for gfortran if test x"$ac_cv_fc_compiler_gnu" = xyes; then # 64 bit if test $host_cpu = x86_64; then AC_CHECK_LIB(mkl_gf_lp64, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread"],, [-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread]) # 32 bit elif test $host_cpu = i686; then AC_CHECK_LIB(mkl_gf, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl_gf -lmkl_sequential -lmkl_core -lpthread"],, [-lmkl_gf -lmkl_sequential -lmkl_core -lpthread]) fi # MKL for other compilers (Intel, PGI, ...?) else # 64-bit if test $host_cpu = x86_64; then AC_CHECK_LIB(mkl_intel_lp64, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread"],, [-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread]) # 32-bit elif test $host_cpu = i686; then AC_CHECK_LIB(mkl_intel, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl_intel -lmkl_sequential -lmkl_core -lpthread"],, [-lmkl_intel -lmkl_sequential -lmkl_core -lpthread]) fi fi fi # Old versions of MKL if test $ax_blas_ok = no; then AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl -lguide -lpthread"],,[-lguide -lpthread]) fi # BLAS in Apple vecLib library? if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" AC_MSG_CHECKING([for $sgemm in -framework vecLib]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi # BLAS in Alpha CXML library? if test $ax_blas_ok = no; then AC_CHECK_LIB(cxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lcxml"]) fi # BLAS in Alpha DXML library? (now called CXML, see above) if test $ax_blas_ok = no; then AC_CHECK_LIB(dxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-ldxml"]) fi # BLAS in Sun Performance library? if test $ax_blas_ok = no; then if test "x$GCC" != xyes; then # only works with Sun CC AC_CHECK_LIB(sunmath, acosp, [AC_CHECK_LIB(sunperf, $sgemm, [BLAS_LIBS="-xlic_lib=sunperf -lsunmath" ax_blas_ok=yes],[],[-lsunmath])]) fi fi # BLAS in SCSL library? (SGI/Cray Scientific Library) if test $ax_blas_ok = no; then AC_CHECK_LIB(scs, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lscs"]) fi # BLAS in SGIMATH library? if test $ax_blas_ok = no; then AC_CHECK_LIB(complib.sgimath, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"]) fi # BLAS in IBM ESSL library? (requires generic BLAS lib, too) if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [AC_CHECK_LIB(essl, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lessl -lblas"], [], [-lblas $FLIBS])]) fi # Generic BLAS library? if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lblas"]) fi AC_SUBST(BLAS_LIBS) LIBS="$ax_blas_save_LIBS" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_blas_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_BLAS,1,[Define if you have a BLAS library.]),[$1]) : else ax_blas_ok=no $2 fi ])dnl AX_BLAS GMTSAR_V5.7/.svn/pristine/fc/fce36f238fd52ca990deaa67398a5d35e3baa5c3.svn-base000444 015705 000000 00000014262 13505462014 026262 0ustar00sandwellwheel000000 000000 /* * $Id: epr_swap.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_field.h" /* * Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_short(short *buffer, uint number_of_swaps) { short* temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = (short)(((*temp & 0x00ff) << 8) | ((*temp & 0xff00) >> 8)); } } /* Function: byte_swap_int.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_int(int *buffer, uint number_of_swaps) { int *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_ushort(ushort* buffer, uint number_of_swaps) { byte_swap_short((short*) buffer, number_of_swaps); } /* * Function: byte_swap_uint.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_uint(uint* buffer, uint number_of_swaps) { byte_swap_int((int*) buffer, number_of_swaps); } /* * Function: byte_swap_int.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_float(float* buffer, uint number_of_swaps) { byte_swap_int((int*) buffer, number_of_swaps); } /** * A boolean value indicating whether this code run's on a * little endian order machine or not. *

1 stands for little endian (LE), * 0 stands for big endian (BE). */ /* Function: epr_is_little_endian_order Access: public API Changelog: 2002/02/04 nf nitial version */ /** * Returns a oolean value indicating whether this code run's on a * little endian order machine or not. *

1 stands for little endian (LE), 0/code> otherwise */ int epr_is_little_endian_order() { uint le_value = EPR_LE_MAGIC_NUMBER; return (((uchar*)(&le_value))[0] == EPR_LE_MAGIC_BYTE_0) && (((uchar*)(&le_value))[1] == EPR_LE_MAGIC_BYTE_1) && (((uchar*)(&le_value))[2] == EPR_LE_MAGIC_BYTE_2) && (((uchar*)(&le_value))[3] == EPR_LE_MAGIC_BYTE_3); } /* Function: epr_is_big_endian_order Access: public API Changelog: 2002/02/04 nf nitial version */ /** * Returns a oolean value indicating whether this code run's on a * little endian order machine or not. *

1 stands for little endian (BE), 0/code> otherwise */ int epr_is_big_endian_order() { uint be_value = EPR_BE_MAGIC_NUMBER; return (((uchar*)(&be_value))[0] == EPR_LE_MAGIC_BYTE_0) && (((uchar*)(&be_value))[1] == EPR_LE_MAGIC_BYTE_1) && (((uchar*)(&be_value))[2] == EPR_LE_MAGIC_BYTE_2) && (((uchar*)(&be_value))[3] == EPR_LE_MAGIC_BYTE_3); } /* Function: epr_swap_endian_order Access: public API Changelog: 2002/02/04 mp nitial version */ /** * Converts bytes for a little endian order machine * * @param field the pointer at data reading in * */ void epr_swap_endian_order(const EPR_SField* field) { switch (field->info->data_type_id) { case e_tid_uchar: case e_tid_char: case e_tid_string: /* no conversion required */ break; case e_tid_time: byte_swap_uint((uint*)field->elems, 3); break; case e_tid_spare: /* no conversion required */ break; case e_tid_ushort: byte_swap_ushort((ushort*) field->elems, field->info->num_elems); break; case e_tid_short: byte_swap_short((short*) field->elems, field->info->num_elems); break; case e_tid_uint: byte_swap_uint((uint*) field->elems, field->info->num_elems); break; case e_tid_int: byte_swap_int((int*) field->elems, field->info->num_elems); break; case e_tid_float: byte_swap_float((float*) field->elems, field->info->num_elems); break; case e_tid_double: epr_set_err(e_err_invalid_data_format, "epr_swap_endian_order: DOUBLE type was not yet processed"); break; default: epr_set_err(e_err_invalid_data_format, "epr_swap_endian_order: unknown data type"); } } GMTSAR_V5.7/.svn/pristine/fc/fcbd6975cec49fe6a56328e578689c0b62c62db7.svn-base000444 015705 000000 00000010002 13505462014 026061 0ustar00sandwellwheel000000 000000 /************************************************************************ * xyz2plh Converts XYZ geocentric coordinates to Phi (latitude), * * Lambda (longitude), H (height) referred to an * * ellipsoid of semi-major axis A and flattening FL. * ************************************************************************/ /************************************************************************ * Creator: B. Archinal (USNO) * ************************************************************************/ /************************************************************************ * Modification history: * * 9007.20, BA, Creation * 9507,21, JR, Modified for use with the page programs * 9602.17, MSS, Converted to C. ************************************************************************/ #include "llt2xyz.h" #include void xyz2plh(double *xyz, double *plh, double A, double FL) /********1*********2*********3*********4*********5*********6*********7** * input: * ----------- * A semi-major axis of ellipsoid [units are of distance] * FL flattening of ellipsoid [unitless] * xyz[] geocentric Cartesian coordinates [units are of distance] * * output: * ----------- * plh[] ellipsoidal coordinates of point, in geodetic latitude, * longitude east of Greenwich, and height [units for * latitude=plh[0] and longitude=plh[1] are in degrees; * height=plh[2] are distance and will be the same as * those of the input parameters] * * Local: * ----------- * B semi-minor axis of ellipsoid [same units as A] * * Notes: * ----------- * This routine will fail for points on the Z axis, i.e. if X= Y= 0 * (Phi = +/- 90 degrees). * * Units of input parameters `A' and `xyz' must be the same. * * References: * ----------- * Borkowski, K. M. (1989). "Accurate algorithms to transform geocentric * to geodetic coordinates", *Bulletin Geodesique*, v. 63, pp. 50-56. * * Borkowski, K. M. (1987). "Transformation of geocentric to geodetic * coordinates without approximations", *Astrophysics and Space Science*, * v. 139, n. 1, pp. 1-4. Correction in (1988), v. 146, n. 1, p. 201. * * An equivalent formulation is recommended in the IERS Standards * (1995), draft. * ********1*********2*********3*********4*********5*********6*********7*/ { double B; double d; double e; double f; double g; double p; double q; double r; double t; double v; double x = xyz[0]; double y = xyz[1]; double z = xyz[2]; double zlong; /* * 1.0 compute semi-minor axis and set sign to that of z in order * to get sign of Phi correct */ B = A * (ONE - FL); if (z < ZERO) B = -B; /* * 2.0 compute intermediate values for latitude */ r = sqrt(x * x + y * y); e = (B * z - (A * A - B * B)) / (A * r); f = (B * z + (A * A - B * B)) / (A * r); /* * 3.0 find solution to: * t^4 + 2*E*t^3 + 2*F*t - 1 = 0 */ p = (FOUR / THREE) * (e * f + ONE); q = TWO * (e * e - f * f); d = p * p * p + q * q; if (d >= ZERO) { v = pow((sqrt(d) - q), (ONE / THREE)) - pow((sqrt(d) + q), (ONE / THREE)); } else { v = TWO * sqrt(-p) * cos(acos(q / (p * sqrt(-p))) / THREE); } /* * 4.0 improve v * NOTE: not really necessary unless point is near pole */ if (v * v < fabs(p)) { v = -(v * v * v + TWO * q) / (THREE * p); } g = (sqrt(e * e + v) + e) / TWO; t = sqrt(g * g + (f - v * g) / (TWO * g - e)) - g; plh[0] = atan((A * (ONE - t * t)) / (TWO * B * t)); /* * 5.0 compute height above ellipsoid */ plh[2] = (r - A * t) * cos(plh[0]) + (z - B) * sin(plh[0]); /* * 6.0 compute longitude east of Greenwich */ zlong = atan2(y, x); if (zlong < ZERO) zlong = zlong + twopi; plh[1] = zlong; /* * 7.0 convert latitude and longitude to degrees */ plh[0] = plh[0] * rad_to_deg; plh[1] = plh[1] * rad_to_deg; return; } GMTSAR_V5.7/.svn/pristine/fc/fc9494fa4a0bebf7b1b003cb8a0bc8e48f4b3fb5.svn-base000444 015705 000000 00000002313 13505462013 026372 0ustar00sandwellwheel000000 000000 .TH IHBPERP l "06/30/98 \(co 1998 David Sandwell" "ihBperp.l 1.0" "SIOSAR Command" .SH NAME ihBperp \- computes a file of perpendicular baselines .SH SYNOPSIS .B ihBperp .I phase.head baseline.gips .SH DESCRIPTION The .B ihBperp command reads the header information from the phase.head file and computes a matching sized file of perpendicular baselines. This file can be used to scale and subtract a reference phase. Here is an example where we have two files; .I phase.gips is wrapped phase from an interferogram and .I topophase.gips is total unwrapped phase for a synthetic interferogram with a nominal perpendicular baseline of 100m. .sp ihBperp phase.gips scale.gips .br iha "p = p1 - p2*p3/100." phase.gips topophase.gips scale.gips > diff_phase.gips .br .sp 2 .TP 10 .I phase.head input gips header file (or data file) containing starting and ending baselines as well as file size information .TP 10 .I scale.gips output file of perpendicular baseline in meters .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B ers_baseline(l) plane_wrap(l) .sp .SH AUTHOR David T. Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/.svn/pristine/c9/c9f9b8c0c092e0ba78a10a2446c90327e8341358.svn-base000444 015705 000000 00000020427 13505462014 025454 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Program tp prepare ALOS L1.0 data for InSAR processing. REad in data and * * leader file and write out prm and raw file for siosar * ******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * 4/23/07 added code to check endianess RJM * * 07/15/08 added a command-line option to force earth radius DTS * 04/26/10 * added a command-line option to force the number of patches * merged in * ALOSE code by Jeff B and David S * * - added options -ALOSE -ALOS * added write_roi * writes out generic LED file for both AUIG and ALOSE (ERSDAC) * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "\n\nUsage: ALOS_pre_process imagefile LEDfile [-near near_range] [-radius " "RE] [-swap] [-V] [-debug] [-quiet] \n" "\ncreates data.raw and writes out parameters (PRM format) to stdout\n" "\nimagefile ALOS Level 1.0 complex file (CEOS format):\n" "LEDfile ALOS Level 1.0 LED file (CEOS leaderfile format):\n" "\n options: \n" "-near near_range specify the near_range (m) \n" "-radius RE specify the local earth radius (m) \n" "-swap do byte-swap (should be automatic) \n" "-nodopp does not calculate doppler (sets fd1 to zero!) \n" "-npatch set the number of patches \n" "-fd1 [DOPP] sets doppler centroid [fd1] to DOPP\n" "-quad adjust parameters for quad pol mod (PRF/2)\n" "-ALOSE use ERSDAC format \n" "-ALOS use AUIG format (default) \n" "-LED write GMTSAR generic LED format output and update " "PRM (default) \n" "-noLED do not write GMTSAR generic LED format output \n" "-roi write roi_pac format output\n" "-V verbose write information) \n" "-debug write even more information \n" "-quiet don't write any information \n" "-force_slope chirp_slope force a value for the chirp slope\n" "-chirp_ext chirp_ext force a value for the chirp extension " "(integer)\n" "-tbias tbias correct the clock bias (positive value " "means plus)\n" "Example:\n" "ALOS_pre_process IMG-HH-ALPSRP050420840-H1.0__A " "LED-ALPSRP050420840-H1.0__A \n"; long read_ALOS_data(FILE *, FILE *, struct PRM *, long *); long read_ALOSE_data(FILE *, FILE *, struct PRM *, long *); void parse_ALOS_commands(int, char **, char *, struct PRM *); void set_ALOS_defaults(struct PRM *); void print_ALOS_defaults(struct PRM *); void swap_ALOS_data_info(struct sardata_info *); void get_files(struct PRM *, FILE **, FILE **, char *, char *, int); int write_ALOS_LED(struct ALOS_ORB *, struct PRM *, char *); void write_orb(FILE *, struct ALOS_ORB *); // roi_pac stuff int write_roi_orbit(struct ALOS_ORB, char *); int write_roi(char *, FILE *, struct PRM, struct ALOS_ORB, char *); int ledflag; int main(int argc, char **argv) { FILE *imagefile, *ldrfile; FILE *rawfile[11], *prmfile[11]; char prmfilename[128]; int nPRF; long byte_offset; struct PRM prm; struct ALOS_ORB orb; char date[8]; if (argc < 3) die(USAGE, ""); /* set flags */ dopp = 1; roi = quad_pol = debug = verbose = swap = quiet_flag = 0; /* default is to use the old LED orbit (must use ALOS_baseline, ALOS_look) */ ledflag = 1; nPRF = 0; ALOS_format = 0; null_sio_struct(&prm); set_ALOS_defaults(&prm); /* read command line */ parse_ALOS_commands(argc, argv, USAGE, &prm); fprintf(stderr, "ledflag %d\n", ledflag); /* apply an additional timing bias based on corner reflector analysis */ tbias = tbias - 0.0020835; if (verbose) print_ALOS_defaults(&prm); if (is_big_endian_() == -1) { swap = 1; fprintf(stderr, ".... swapping bytes\n"); } else { swap = 0; } /* IMG and LED files should exist already */ if ((imagefile = fopen(argv[1], "r")) == NULL) die("couldn't open Level 1.0 IMG file \n", argv[1]); if ((ldrfile = fopen(argv[2], "r")) == NULL) die("couldn't open LED file \n", argv[2]); /* if it exists, copy to prm structure */ strcpy(prm.led_file, argv[2]); /* name and open output files and header files for raw data (but input for * later processing) */ get_files(&prm, &rawfile[nPRF], &prmfile[nPRF], prmfilename, argv[1], nPRF); /* read sarleader; put info into prm; write log file if specified */ read_ALOS_sarleader(ldrfile, &prm, &orb); /* write out orbit params in generic LED format */ if (ledflag) write_ALOS_LED(&orb, &prm, argv[1]); /* infer type of data from ldrfile */ if ((SAR_mode == 2) && (quad_pol == 0)) { fprintf(stderr, " SAR_mode = %d ; assuming quad_pol\n", SAR_mode); quad_pol = 1; } /* read Level 1.0 file; put info into prm; convert to *.raw format */ /* if PRF changes halfway through, create new set of header and data files */ /* byte_offset is non-zero only if the prf changes */ /* byte_offset gets set to point in file at prf change */ byte_offset = -1; while (byte_offset != 0) { /* if prf changes, create new prm and data files */ if (nPRF > 0) { if (verbose) fprintf(stderr, "creating multiple files due to PRF change (*.%d) \n", nPRF + 1); get_files(&prm, &rawfile[nPRF], &prmfile[nPRF], prmfilename, argv[1], nPRF); } /* set the chirp extension to 500 if FBD fs = 16000000 */ if (prm.fs < 17000000.) { prm.chirp_ext = 500; prm.chirp_slope = -5.18519e+11; } else { prm.chirp_slope = -1.03704e+12; } if (ALOS_format == 1) prm.first_sample = 146; /* read_ALOS_data returns 0 if all data file is read; returns byte offset if the PRF changes */ /* calculate parameters from orbit */ if (ALOS_format == 0) { byte_offset = read_ALOS_data(imagefile, rawfile[nPRF], &prm, &byte_offset); } /* ERSDAC - use read_ALOSE_data */ if (ALOS_format == 1) { byte_offset = read_ALOSE_data(imagefile, rawfile[nPRF], &prm, &byte_offset); } // should work for AUIG and ERSDAC ALOS_ldr_orbit(&orb, &prm); /* calculate doppler from raw file */ if (dopp == 1) calc_dop(&prm); /* divide prf in half for quad_pol */ /* fix chirp slope */ if (quad_pol) { prm.prf = 0.5 * prm.prf; prm.chirp_slope = -871580000000.0; prm.chirp_ext = 500.0; fprintf(stderr, " quad pol: fixing prf %f\n", prm.prf); fprintf(stderr, " quad pol: fixing chirp_slope %g\n", prm.chirp_slope); fprintf(stderr, " quad pol: fixing chirp_ext %d\n", prm.chirp_ext); } /* force chirp slope if asked to */ if (force_slope == 1) prm.chirp_slope = forced_slope; /* write ascii output, SIO format */ put_sio_struct(prm, prmfile[nPRF]); /* write roi_pac output */ if (roi) { // first part of rsc file write_roi(argv[1], ldrfile, prm, orb, date); // orbit file write_roi_orbit(orb, date); } nPRF++; } return (EXIT_SUCCESS); } /*------------------------------------------------------*/ void get_files(struct PRM *prm, FILE **rawfile, FILE **prmfile, char *prmfilename, char *name, int n) { /* name and open output file for raw data (but input for later processing) */ /* if more than 1 set of output files, append an integer (beginning with 2) */ if (n == 0) { sprintf(prm->input_file, "%s.raw", name); sprintf(prmfilename, "%s.PRM", name); } else { sprintf(prm->input_file, "%s.raw.%d", name, n + 1); sprintf(prmfilename, "%s.PRM.%d", name, n + 1); } /* now open the files */ if ((*rawfile = fopen(prm->input_file, "w")) == NULL) die("can't open ", prm->input_file); if ((*prmfile = fopen(prmfilename, "w")) == NULL) die("couldn't open output PRM file \n", prmfilename); } /*------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/c9/c91ff2d47f3f07b59bddbec3f7380d86218cb092.svn-base000444 015705 000000 00000051657 13505462013 026063 0ustar00sandwellwheel000000 000000 /* $Id$ */ /******************************************************************************* * Compute the interferometric baseline between reference and repeat * * images. Also estimates the crude offset for image matching. * *******************************************************************************/ /******************************************************************************** * Creator: Matt Wei, 04/26/10 * * * * Based on the program ALOS_baseline by * Creator: Sandwell and Rob Mellors ** (San Diego State University, Scripps Institution of Oceanography) * Date : *06/07/2007 * * Modifications: * 29/26/2018 by Xiaohua Xu * Adding the along track component *for Baseline called B_offset * This further ensures phase closure * ********************************************************************************/ #include "gmtsar.h" #include "orbit.h" char *USAGE = "Usage: (two modes)\n" "mode 1:\n\n" "SAT_baseline PRM_master PRM_master\n\n" "This is used to compute height information\n" "(writes out height information for appending to PRM file)\n" "\nmode 2:\n\n" "SAT_baseline PRM_master PRM_slave \n\n" "PRM_master PRM file for reference image\n" "PRM_slave PRM file of secondary image\n" "Please make sure the orbit file data is in PRM \n" "Program runs through repeat orbit to find nearest point \n" "to the start, center and end on the reference orbit\n" "(writes out parameters for appending to PRM file)\n"; /* "\nor mode 2:\n\n" "SAT_baseline -input file\n\n" "file: list of PRM files\n" "first file is assumed to be master\n" "following are slaves\n" "(writes out decimal year, Bperp, and PRM name)\n"; */ /* function prototypes */ double find_dist(double, double, double, double, double, double); double find_alpha_degrees(double, double); void find_unit_vectors(double, double, double, double *, double *, double *, double *); void endpoint_distance(int, double, double, double, double, double *, double *, double *, double *, int *); void find_parallel_perp_baseline(struct PRM, struct PRM, double, double *, double *); void write_prm_baseline(struct PRM); void get_sign(struct PRM, double, double, double, double, int *); void write_bperp(struct PRM, char *); void baseline_parse_command_line(char **, int *, int *); void read_input_file(char *, int, char **); void baseline(struct PRM *, struct SAT_ORB *, int, int, char **, double); void read_all_ldr(struct PRM *, struct SAT_ORB *, int); void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void llt2rat_sub(char *, double *, double *); void interpolate_SAT_orbit_slow(struct SAT_ORB *orb, double time, double *, double *, double *, int *); void interpolate_SAT_orbit(struct SAT_ORB *, double *, double *, double *, double, double *, double *, double *, int *); void calc_height_velocity(struct SAT_ORB *, struct PRM *, double, double, double *, double *, double *, double *, double *); void polyfit(double *, double *, double *, int *, int *); int main(int argc, char **argv) { int i; int input_flag, nfiles; double fs0 = 0.; struct PRM *r; /* reference orbit is 0; repeats are > 0*/ struct SAT_ORB *orb; /* reference orbit is 0; repeats are > 0*/ char **filename; FILE *prmfile; if (argc < 3) die(USAGE, ""); verbose = 0; input_flag = 0; /* read command line */ baseline_parse_command_line(argv, &nfiles, &input_flag); filename = malloc(nfiles * sizeof(char *)); for (i = 0; i < nfiles; i++) filename[i] = malloc(128 * sizeof(char)); r = malloc(nfiles * sizeof(struct PRM)); if (input_flag == 1) read_input_file(argv[2], nfiles, filename); for (i = 0; i < nfiles; i++) { if (input_flag == 0) strcpy(filename[i], argv[i + 1]); if ((prmfile = fopen(filename[i], "r")) == NULL) die("Can't open prmfile ", filename[i]); get_sio_struct(prmfile, &r[i]); /* check whether range sampling rate is same. If not, warning */ if (i == 0) fs0 = r[0].fs; if (r[i].fs != fs0) { fprintf(stderr, "\nWARNING:\nRange_sampling_rate is not consistant.\nYou " "need to do FBD/FBS conversion.\n\n"); } fclose(prmfile); } printf("SC_identity = %d \n", r[0].SC_identity); orb = malloc(nfiles * sizeof(struct SAT_ORB)); read_all_ldr(r, orb, nfiles); baseline(r, orb, nfiles, input_flag, filename, fs0); return (EXIT_SUCCESS); } /*---------------------------------------------------------------------------*/ /* Get time info and find the orbit */ void read_all_ldr(struct PRM *r, struct SAT_ORB *orb, int nfiles) { int i; FILE *ldrfile; for (i = 0; i < nfiles; i++) { if (i == 0) printf("......master LED file %s \n", r[0].led_file); if (i != 0) printf(".........slave LED file %s \n", r[i].led_file); /* open each ldrfile and read into structure r */ if ((ldrfile = fopen(r[i].led_file, "r")) == NULL) die("Can't open ldrfile %s", r[i].led_file); read_orb(ldrfile, &r[i], &orb[i]); fclose(ldrfile); } } /* interpolation with polynomial refinement */ void poly_interp(struct SAT_ORB *orb, double *t, double *b, double t_ref, double x0, double y0, double z0, double shift) { int ntt = 100, k, ir; double *time, *bs; double ddt, xs, ys, zs; double d3[3]; int nc = 3; ddt = 0.01 / ntt; time = malloc(ntt * sizeof(double)); bs = malloc(ntt * sizeof(double)); for (k = 0; k < ntt; k++) { time[k] = (k - ntt / 2 + 0.5) * ddt; interpolate_SAT_orbit_slow(orb, t_ref + time[k] + shift, &xs, &ys, &zs, &ir); bs[k] = find_dist(xs, ys, zs, x0, y0, z0); bs[k] = bs[k] * bs[k]; } polyfit(time, bs, d3, &ntt, &nc); *t = t_ref + shift - d3[1] / (2.0 * d3[2]); *b = sqrt(d3[0] - d3[1] * d3[1] / 4.0 / d3[2]); free(time); free(bs); } /*---------------------------------------------------------------------------*/ void baseline(struct PRM *r, struct SAT_ORB *orb, int nfiles, int input_flag, char **filename, double fs0) { int ii, nd, ir; int k, ns, ns2, m1, m2, m3, sign1, sign2, sign3; double dr, dt, ds; double bv1, bv2, bv3, bh1, bh2, bh3; double t11, t12, t13, t21, t22, t23; double x11, y11, z11, x12, y12, z12, x13, y13, z13; double x21, y21, z21, x22, y22, z22, x23, y23, z23; double ru1, ru2, ru3, xu1, yu1, zu1, xu2, yu2, zu2, xu3, yu3, zu3; double ts, xs, ys, zs; double b1, b2, b3, bpara, bperp; //, b_tmp; double *pt, *p, *pv, pt0; double height, re_c, vg, vtot, rdot; double radar_look[3] = {0, 0, 0}; double re, rho, b, theta; double t_vel, t_sta, x_vel, x_sta, y_vel, y_sta, z_vel, z_sta, ru33, xu33, yu33, zu33, o1x[3], o1y[3], o1z[3], ru4, xu4, yu4, zu4; double glob_look[3], target[3], target_llt[3], fll; double target_rat_ref[3] = {0, 0, 0}; double target_rat_rep[3] = {0, 0, 0}; double far_range; double dstart; // double d1=0.0,d2=0.0,d3=0.0; /* work on the reference orbit */ get_seconds(r[0], &t11, &t12); t13 = (t11 + t12) / 2.; dr = 0.5 * SOL / fs0; dt = 0.5 / r[0].prf; ns = (int)((t12 - t11) / dt); /* seconds of frame */ dt = (t12 - t11) / (ns - 1); /* set the extension to 50% unless ERS or Envisat and then set to 200% */ ns2 = ns * 0.5; if (r[0].SC_identity < 3 || r[0].SC_identity == 4 || r[0].SC_identity == 10) ns2 = ns * 2; nd = orb[0].nd; for (ii = 1; ii < nfiles; ii++) { if (nd < orb[ii].nd) nd = orb[ii].nd; } /* compute reference start, center and end point */ interpolate_SAT_orbit_slow(&orb[0], t11, &x11, &y11, &z11, &ir); interpolate_SAT_orbit_slow(&orb[0], t12, &x12, &y12, &z12, &ir); interpolate_SAT_orbit_slow(&orb[0], t13, &x13, &y13, &z13, &ir); /* allocate memory */ pt = malloc(nd * sizeof(double)); p = malloc(nd * sizeof(double)); pv = malloc(nd * sizeof(double)); /* work on the repeat orbit */ ii = 1; get_seconds(r[ii], &t21, &t22); t23 = (t21 + t22) / 2.; pt0 = (24.0 * 60.0 * 60.0) * orb[ii].id + orb[ii].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[ii].dsec; verbose = 0; /* look at other orbit information and recalculate the height using the ashift */ calc_height_velocity(&orb[ii], &r[ii], t22, t22, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_end = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t23, t23, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t21, t21, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_start = height + re_c - r[ii].RE; /* loop over repeat orbit */ /* add 2 scene lengths (ns2) for buffer at each end */ b1 = b2 = b3 = -1.0; pt0 = (24.0 * 60.0 * 60.0) * orb[ii].id + orb[ii].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[ii].dsec; /* set some defeault values */ m1 = -99999; x21 = y21 = z21 = -99999.0; x22 = y22 = z22 = -99999.0; x23 = y23 = z23 = -99999.0; printf("hahahah\n"); /* roughly compute baseline */ for (k = -ns2; k < ns + ns2; k++) { ts = t21 + k * dt; interpolate_SAT_orbit(&orb[ii], pt, p, pv, ts, &xs, &ys, &zs, &ir); ds = find_dist(xs, ys, zs, x11, y11, z11); if (b1 < 0.0 || ds < b1) endpoint_distance(k, ds, xs, ys, zs, &b1, &x21, &y21, &z21, &m1); ds = find_dist(xs, ys, zs, x12, y12, z12); if (b2 < 0.0 || ds < b2) endpoint_distance(k, ds, xs, ys, zs, &b2, &x22, &y22, &z22, &m2); ds = find_dist(xs, ys, zs, x13, y13, z13); if (b3 < 0.0 || ds < b3) endpoint_distance(k, ds, xs, ys, zs, &b3, &x23, &y23, &z23, &m3); } // refine the baseline computation with polynomial fit dstart = fabs(t11 - t21); // check whether it's the computation of same orbit. if (dstart > 10.) { poly_interp(&orb[ii], &ts, &b1, t21, x11, y11, z11, m1 * dt); interpolate_SAT_orbit_slow(&orb[ii], ts, &xs, &ys, &zs, &ir); x21 = xs; y21 = ys; z21 = zs; r[ii].B_offset_start = (ts - t21) * r[ii].vel; // seems this does not make much difference // if (r[0].SC_identity == 10) { /* approximate a secondary shift along orbit for alpha and baseline change */ // poly_interp(&orb[0],&ts,&b_tmp,t11,x21,y21,z21,m1*dt); // d1 = + (t11-ts)*r[0].vel; // r[ii].B_offset_start = r[ii].B_offset_start + d1; //} /* compute more orbital information at the min baseline based on m1 */ // calc_height_velocity(&orb[ii], &r[ii], ts, ts, &height, &re_c, &vg, // &vtot, &rdot); poly_interp(&orb[ii], &ts, &b2, t21, x12, y12, z12, m2 * dt); interpolate_SAT_orbit_slow(&orb[ii], ts, &xs, &ys, &zs, &ir); x22 = xs; y22 = ys; z22 = zs; r[ii].B_offset_end = (ts - t22) * r[ii].vel; // if (r[0].SC_identity == 10) { // poly_interp(&orb[0],&ts,&b_tmp,t11,x22,y22,z22,m2*dt); // d2 = (t12-ts)*r[0].vel; // r[ii].B_offset_end = r[ii].B_offset_end + d2; //} poly_interp(&orb[ii], &ts, &b3, t21, x13, y13, z13, m3 * dt); interpolate_SAT_orbit_slow(&orb[ii], ts, &xs, &ys, &zs, &ir); x23 = xs; y23 = ys; z23 = zs; r[ii].B_offset_center = (ts - t23) * r[ii].vel; // if (r[0].SC_identity == 10) { // poly_interp(&orb[0],&ts,&b_tmp,t11,x23,y23,z23,m3*dt); // d3 = (t13-ts)*r[0].vel; // r[ii].B_offset_center = r[ii].B_offset_center + d3; //} } /* Not sure what these codes are used for // change back the dt settings dt = 0.5/r[0].prf; ns = (int) ((t12 - t11)/dt); // seconds of frame dt = (t12 - t11)/(ns - 1); // set the extension to 50% unless ERS or Envisat and then set to 200% ns2 = ns*0.5; if(r[0].SC_identity < 3 || r[0].SC_identity == 4 || r[0].SC_identity == 10) ns2=ns*2; */ /* fd_orbit = -2.0*rdot/r[0].lambda; */ /* shouldn't happen .. */ if (x21 == -99999.0) die("x11 not initialized", ""); if (x22 == -99999.0) die("x12 not initialized", ""); if (m1 == -99999) die("m1 not initialized", ""); /* put in structure */ r[ii].baseline_start = b1; r[ii].baseline_end = b2; r[ii].baseline_center = b3; /* compute unit vectors */ find_unit_vectors(x11, y11, z11, &ru1, &xu1, &yu1, &zu1); find_unit_vectors(x12, y12, z12, &ru2, &xu2, &yu2, &zu2); find_unit_vectors(x13, y13, z13, &ru3, &xu3, &yu3, &zu3); /* compute sign of horizontal baseline */ get_sign(r[ii], x11, y11, x21, y21, &sign1); get_sign(r[ii], x12, y12, x22, y22, &sign2); get_sign(r[ii], x13, y13, x23, y23, &sign3); /* compute baseline components (horizontal and vertical) */ bv1 = (x21 - x11) * xu1 + (y21 - y11) * yu1 + (z21 - z11) * zu1; bh1 = sign1 * sqrt(b1 * b1 - bv1 * bv1); //+ d1*d1); bv2 = (x22 - x12) * xu2 + (y22 - y12) * yu2 + (z22 - z12) * zu2; bh2 = sign2 * sqrt(b2 * b2 - bv2 * bv2); // + d2*d2); bv3 = (x23 - x13) * xu3 + (y23 - y13) * yu3 + (z23 - z13) * zu3; bh3 = sign3 * sqrt(b3 * b3 - bv3 * bv3); // + d3*d3); /* angle from horizontal */ r[ii].alpha_start = find_alpha_degrees(bv1, bh1); r[ii].alpha_end = find_alpha_degrees(bv2, bh2); r[ii].alpha_center = find_alpha_degrees(bv3, bh3); /* calculate parallel baseline */ find_parallel_perp_baseline(r[0], r[ii], dr, &bpara, &bperp); r[ii].bpara = bpara; r[ii].bperp = bperp; /* find expected offset in pixels (rshift and yshift) */ /* r[ii].ashift = -1*m1; r[ii].rshift = -1*(int) (r[ii].bpara/dr + (r[ii].near_range - r[0].near_range)/dr); fprintf(stderr,"ashift = %d\nrshift = %d\n",r[ii].ashift,r[ii].rshift); */ /* a more accurate way to estimate offset in pixels */ /* since t11 point is out of scene, I need add a fraction of orbit time to it */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_sta = t11 + 2.0; interpolate_SAT_orbit(&orb[0], pt, p, pv, t_sta, &x_sta, &y_sta, &z_sta, &ir); re = r[0].RE; far_range = r[0].near_range + dr * r[0].num_rng_bins; rho = (r[0].near_range + far_range) / 2.0; b = r[0].ht + r[0].RE; theta = acos((b * b + rho * rho - re * re) / 2 / b / rho); /* find a unit look vector point to middle range of first line of the scene */ /* in radar coordinate */ radar_look[0] = 0; radar_look[1] = cos(theta); radar_look[2] = -sin(theta); if (strncmp(r[0].lookdir, "L", 1) == 0) radar_look[2] = sin(theta); /* form a rotation matrix to convert the look vector from radar coordinate to global cartesian coordinate */ find_unit_vectors(x_sta, y_sta, z_sta, &ru33, &xu33, &yu33, &zu33); o1y[0] = -xu33; o1y[1] = -yu33; o1y[2] = -zu33; /* get the velocity of the satellite */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_vel = t11 + 2.1; interpolate_SAT_orbit(&orb[0], pt, p, pv, t_vel, &x_vel, &y_vel, &z_vel, &ir); find_unit_vectors(x_vel - x_sta, y_vel - y_sta, z_vel - z_sta, &ru4, &xu4, &yu4, &zu4); o1x[0] = xu4; o1x[1] = yu4; o1x[2] = zu4; cross3(o1x, o1y, o1z); /* look vector in global cartesian cooridate is */ glob_look[0] = radar_look[0] * o1x[0] + radar_look[1] * o1y[0] + radar_look[2] * o1z[0]; glob_look[1] = radar_look[0] * o1x[1] + radar_look[1] * o1y[1] + radar_look[2] * o1z[1]; glob_look[2] = radar_look[0] * o1x[2] + radar_look[1] * o1y[2] + radar_look[2] * o1z[2]; /* shoot the vector on the ground and get the tie point */ target[0] = x_sta + glob_look[0] * rho; target[1] = y_sta + glob_look[1] * rho; target[2] = z_sta + glob_look[2] * rho; fll = (r[0].ra - r[0].rc) / r[0].ra; xyz2plh(target, target_llt, r[0].ra, fll); printf("lon_tie_point = %f\n", (target_llt[1] > 180.0) ? target_llt[1] - 360.0 : target_llt[1]); printf("lat_tie_point = %f\n", target_llt[0]); llt2rat_sub(filename[0], target_llt, target_rat_ref); llt2rat_sub(filename[ii], target_llt, target_rat_rep); /* find expected offset in pixels (rshift and yshift) */ r[ii].ashift = target_rat_rep[1] - target_rat_ref[1]; r[ii].rshift = target_rat_rep[0] - target_rat_ref[0]; /* write out prm format */ if (input_flag == 0) write_prm_baseline(r[ii]); /* write out in x,y format bperp baseline only */ if (input_flag == 1) write_bperp(r[ii], filename[ii]); } /*---------------------------------------------------------------------------*/ void read_input_file(char *inputfilename, int nfiles, char **filename) { int i; FILE *inputfile; if ((inputfile = fopen(inputfilename, "r")) == NULL) die("Can't open ", inputfilename); for (i = 0; i < nfiles; i++) fscanf(inputfile, " %s ", filename[i]); fclose(inputfile); } /*---------------------------------------------------------------------------*/ void baseline_parse_command_line(char **argv, int *nfiles, int *input_flag) { char tmp[132]; FILE *inputfile; *nfiles = 0; if (strncmp(argv[1], "-input", 6) != 0) { printf("using command line\n"); *nfiles = 2; } else { printf("using input file \n"); *input_flag = 1; if ((inputfile = fopen(argv[2], "r")) == NULL) die("Can't open ", argv[2]); /* count the number of files in inputfile */ while (fscanf(inputfile, " %s ", tmp) != EOF) (*nfiles)++; fclose(inputfile); } } /*---------------------------------------------------------------------------*/ void write_bperp(struct PRM r1, char *string) { FILE *GMTscript; float year, dyear; GMTscript = fopen("GMTscript", "w"); year = floor(r1.SC_clock_start / 1000.0); dyear = (r1.SC_clock_start - 1000.0 * year) / 365.0; year = year + dyear; /* write date, baseline */ fprintf(stdout, " %f %f %s\n", year, r1.bperp, string); /* fprintf(GMTscript,"psxy Bperp.dat -R%f/%f/%f/%f -JX8 -P > Bperp.ps\n"); */ fclose(GMTscript); } /*---------------------------------------------------------------------------*/ void get_sign(struct PRM r, double x11, double y11, double x21, double y21, int *sign) { double rlnref, rlnrep; rlnref = atan2(y11, x11); rlnrep = atan2(y21, x21); *sign = 1.0; if (strncmp(r.orbdir, "D", 1) == 0) *sign = -1 * (*sign); if (strncmp(r.lookdir, "L", 1) == 0) *sign = -1 * (*sign); if (rlnrep < rlnref) *sign = -1 * (*sign); } /*---------------------------------------------------------------------------*/ void write_prm_baseline(struct PRM rep) { printf("SC_vel = %.12f \n", rep.vel); printf("SC_height = %.12f \n", rep.ht); printf("SC_height_start = %.12f \n", rep.ht_start); printf("SC_height_end = %.12f \n", rep.ht_end); printf("earth_radius = %.12f \n", rep.RE); printf("rshift = %d \n", rep.rshift); printf("sub_int_r = 0.0 \n"); printf("ashift = %d\n", rep.ashift); printf("sub_int_a = 0.0 \n"); printf("B_parallel = %.12f \n", rep.bpara); printf("B_perpendicular = %.12f \n", rep.bperp); printf("baseline_start = %.12f \n", rep.baseline_start); printf("baseline_center = %.12f \n", rep.baseline_center); printf("baseline_end = %.12f \n", rep.baseline_end); printf("alpha_start = %.12f \n", rep.alpha_start); printf("alpha_center = %.12f \n", rep.alpha_center); printf("alpha_end = %.12f \n", rep.alpha_end); printf("B_offset_start = %.12f \n", rep.B_offset_start); printf("B_offset_center = %.12f \n", rep.B_offset_center); printf("B_offset_end = %.12f \n", rep.B_offset_end); } /*---------------------------------------------------------------------------*/ void find_parallel_perp_baseline(struct PRM ref, struct PRM rep, double dr, double *bpara, double *bperp) { double rc, ra, rad, rlook, far_range, arg1, arg2; rad = M_PI / 180.0; /* this is not ellipsoid axis */ /* use reference ?? */ rc = ref.RE + ref.ht; ra = ref.RE; far_range = rep.near_range + dr * rep.num_rng_bins; /* calculate the look angle 1/2 way between the near and far range */ arg1 = (rep.near_range * rep.near_range + rc * rc - ra * ra) / (2. * rep.near_range * rc); arg2 = (far_range * far_range + rc * rc - ra * ra) / (2. * far_range * rc); rlook = acos((arg1 + arg2) / 2.0); /* add the incidence angle correction to get the incidence angle */ arg1 = (-rep.near_range * rep.near_range + rc * rc + ra * ra) / (2. * ra * rc); arg2 = (-far_range * far_range + rc * rc + ra * ra) / (2. * ra * rc); rlook = rlook + acos((arg1 + arg2) / 2.0); *bpara = rep.baseline_start * sin(rlook - rep.alpha_start * rad); *bperp = rep.baseline_start * cos(rlook - rep.alpha_start * rad); } /*---------------------------------------------------------------------------*/ double find_alpha_degrees(double bv, double bh) { double a, rad; rad = M_PI / 180.0; a = atan2(bv, bh); a = a / rad; return (a); } /*---------------------------------------------------------------------------*/ double find_dist(double xs, double ys, double zs, double x, double y, double z) { double ds; double dx, dy, dz; dx = xs - x; dy = ys - y; dz = zs - z; ds = sqrt(dx * dx + dy * dy + dz * dz); return (ds); } /*---------------------------------------------------------------------------*/ void endpoint_distance(int k, double ds, double xs, double ys, double zs, double *b, double *x, double *y, double *z, int *m) { *b = ds; *x = xs; *y = ys; *z = zs; *m = k; } /*---------------------------------------------------------------------------*/ void find_unit_vectors(double x, double y, double z, double *ru, double *xu, double *yu, double *zu) { *ru = sqrt(x * x + y * y + z * z); *xu = x / (*ru); *yu = y / (*ru); *zu = z / (*ru); } /*---------------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/ee/eefeb1512e2eec99fa0651af5ec0e931125ac736.svn-base000444 015705 000000 00000001172 13505462013 026163 0ustar00sandwellwheel000000 000000 5 5 1.8315638888734179e-02 8.2084998623898800e-02 1.3533528323661270e-01 8.2084998623898800e-02 1.8315638888734179e-02 8.2084998623898800e-02 3.6787944117144233e-01 6.0653065971263342e-01 3.6787944117144233e-01 8.2084998623898800e-02 1.3533528323661270e-01 6.0653065971263342e-01 1.0000000000000000e+00 6.0653065971263342e-01 1.3533528323661270e-01 8.2084998623898800e-02 3.6787944117144233e-01 6.0653065971263342e-01 3.6787944117144233e-01 8.2084998623898800e-02 1.8315638888734179e-02 8.2084998623898800e-02 1.3533528323661270e-01 8.2084998623898800e-02 1.8315638888734179e-02 GMTSAR_V5.7/.svn/pristine/ee/eed3be1ee64225a9b4aa120dc9723a08bbba7534.svn-base000444 015705 000000 00000005471 13505462013 026150 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for intf_batch.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from make topo_ra # 2 - start from make interferograms proc_stage = 1 # the namestem of the master image master_image = ENV1_2_399_2907_12477 ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put DEM.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 1 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # filters # look at the filter/ folder to choose other filters filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = .1 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/1000/22300 region_cut = 300/5900/1000/22300 # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .1 GMTSAR_V5.7/.svn/pristine/ee/ee36a9e5fd3927f0e05dfb509d49be705deb399b.svn-base000444 015705 000000 00000010663 13505462014 026224 0ustar00sandwellwheel000000 000000 /* write a PRM file */ /* modified by Paul F. Jamason, 3/19/98 */ /* added SC_identity read from file, R. Mellors. 10/1/98 */ /* changed SC_identity to sc_identity in fprintf line, K. Watson. 3/8/99 */ /* force I_mean Q_mean = 15.5 M.Wei. 5/24/06 (Some header is bad)*/ #include "../include/SARtape.h" #include "../include/soi.h" #include #include #include #define FACTOR 1000000 void calc_time(char time_string[], double *clock_time, double *SC_clock_time); void make_prm_dpaf(sar) struct SAR_info sar; { int SC_identity; /* ERS-1 = 1, ERS2 = 2 */ double SC_clock_start, SC_clock_stop; double clock_start, clock_stop; /* translate from structure holding SAR info */ /* see SARtape.h and associated include files for more details */ sscanf((sar.dpaf_dss->mission_identifier + 3), "%d", &SC_identity); prf1 = atof(sar.dpaf_dss->nominal_prf); // radar_wavelength = atof(sar.dpaf_dss->radar_wavelength); /* convert into seconds from MHz */ // pulse_dur = (atof(sar.dpaf_dss->range_pulse_length)/FACTOR); // rng_samp_rate = FACTOR*(atof(sar.dpaf_dss->sampling)); /* correct by factor of two */ // chirp_slope = 2.0*atof(sar.dpaf_dss->range_pulse_phase_quad); /* pj: add 15.5 to these values (see ERS SAR.RAW documentation) */ /* I_mean = 15.5+atof(sar.dpaf_dss->dc_bias_i); Q_mean = 15.5+atof(sar.dpaf_dss->dc_bias_q); */ // I_mean = 15.5; // Q_mean = 15.5; /* we don't want the first two character; (of year)) */ // sc_clock_start = atof((sar.dpaf_dss->satelite_clock_time+2)); /* pj */ calc_time(sar.dpaf_dss->zero_dop_az_time_f_pixel, &clock_start, &SC_clock_start); calc_time(sar.dpaf_dss->zero_dop_az_time_l_pixel, &clock_stop, &SC_clock_stop); /*fprintf(stdout,"I_mean = %lf\n",I_mean); fprintf(stdout,"Q_mean = %lf\n",Q_mean); fprintf(stdout,"rng_samp_rate = %lg\n",rng_samp_rate); fprintf(stdout,"chirp_slope = %lg\n",chirp_slope); fprintf(stdout,"pulse_dur = %lg\n",pulse_dur); fprintf(stdout,"radar_wavelength = %lg\n",radar_wavelength); fprintf(stdout, "SC_identity = %d\n",SC_identity);*/ /* pj: write these to PRM file now instead of in read_data_file.c */ fprintf(stdout, "SC_clock_start = %16.10lf\n", SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf\n", SC_clock_stop); fprintf(stdout, "clock_start = %16.12lf\n", clock_start); fprintf(stdout, "clock_stop = %16.12lf\n", clock_stop); } /* pj */ void calc_time(char time_string[], double *clock_time, double *SC_clock_time) { int day_of_month, hour, minute, second, msec, jday, i, month, year, leap; int mon_nday[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char c_month[4], tmp_time_string[24]; char *string_tmp = (char *)malloc(3); /* need a temporary time string else msec reads beginning of next zero_dop string */ strncpy(tmp_time_string, &time_string[0], 24); /* pj: calculate SC_clock_start/stop from sarleader for DPAF */ day_of_month = atoi(&time_string[0]); strncpy(c_month, &time_string[3], 3); if (!strncmp(c_month, "JAN", 3)) { month = 1; } if (!strncmp(c_month, "FEB", 3)) { month = 2; } if (!strncmp(c_month, "MAR", 3)) { month = 3; } if (!strncmp(c_month, "APR", 3)) { month = 4; } if (!strncmp(c_month, "MAY", 3)) { month = 5; } if (!strncmp(c_month, "JUN", 3)) { month = 6; } if (!strncmp(c_month, "JUL", 3)) { month = 7; } if (!strncmp(c_month, "AUG", 3)) { month = 8; } if (!strncmp(c_month, "SEP", 3)) { month = 9; } if (!strncmp(c_month, "OCT", 3)) { month = 10; } if (!strncmp(c_month, "NOV", 3)) { month = 11; } if (!strncmp(c_month, "DEC", 3)) { month = 12; } year = atoi(&time_string[9]); if (year % 4 == 0 && year % 100 != 0) { leap = 1; } else if (year == 00) { leap = 1; } else { leap = 0; } if (leap) { mon_nday[1] = 29; } jday = 0; if (month > 1) { for (i = 0; i < month - 1; i++) jday = jday + mon_nday[i]; } jday = jday + day_of_month; hour = atoi(&time_string[12]); minute = atoi(&time_string[15]); second = atoi(&time_string[18]); msec = atoi(strncpy(string_tmp, tmp_time_string + 21, 3)); /* add either 1900 or 2000 to the year */ if (year < 85.) { year = year + 2000.; } else { year = year + 1900.; } /* calculate clock time; determine fraction of msecs in day */ *clock_time = (double)(jday) + ((double)(hour * 3600 * 1000 + minute * 60 * 1000 + second * 1000 + msec) / (double)(24 * 3600 * 1000)); *SC_clock_time = (double)(year * 1000) + *clock_time; } GMTSAR_V5.7/.svn/pristine/ee/ee37d193146a2b51a944d0f79d0ab17b06d86fe2.svn-base000444 015705 000000 00000005470 13505462013 025752 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # summary of shell scripts # echo ' ' echo 'align.csh - align a pair of SAR images' echo 'align_batch.csh - align a stack of SAR images' echo 'baseline_table.csh - make baseline vs time table' echo 'cleanup.csh - cleanup the directories' echo 'dem2topo_ra.csh - transform a dem into range and azimuth coordinates' echo 'filter.csh - filter the interferogram and make amp, phase and corr' echo 'fitoffset.csh - solve for the affine parameters' echo 'geocode.csh - convert range/azimuth to lon/lat' echo 'grd2kml.csh - make a kml file for google earth' echo 'intf.csh - make the interferogram from a single pair of SLCs' echo 'intf_batch.csh - make interferograms for a set of aligned SLCs' echo 'landmask.csh - make a landmask' echo 'make_a_offset.csh - make azimuth offsets' echo 'make_dem.csh - construct a dem from tiles' echo 'pre_proc.csh - preprocess the raw SAR data for a pair of images' echo 'pre_proc_batch.csh - preprocess raw SAR data for a stack of images with common parameters ' echo 'pre_proc_init.csh - preprocess raw SAR data for a stack of images with default parameters ' echo 'p2p_ALOS.csh - process an interferogram from end-to-end for ALOS' echo 'p2p_ALOS_SLC.csh - process an interferogram from end-to-end for ALOS 1 0r 2 starting at SLC' echo 'p2p_CSK.csh - process an interferogram from end-to-end for CSK' echo 'p2p_CSK_SLC.csh - process an interferogram from end-to-end for CSK_SLC' echo 'p2p_ENVI.csh - process an interferogram from end-to-end for ENVI' echo 'p2p_ERS.csh - process an interferogram from end-to-end for ERS' echo 'p2p_ERS.csh - process an interferogram from end-to-end for ERS' echo 'p2p_RS2_SLC.csh - process an interferogram from end-to-end for RS2_SLC' echo 'p2p_S1A_SLC.csh - process an interferogram from end-to-end for S1A_SLC' echo 'p2p_TSX_SLC.csh - process an interferogram from end-to-end for TSX_SLC' echo 'proj_ll2ra.csh - project a grd file from lon/lat to range/azimuth' echo 'proj_ll2ra_ascii.csh - project points from lon/lat to range/azimuth' echo 'proj_model.csh - project a crust motion model into radar looking directions' echo 'proj_ra2ll.csh - project a grd file from range/azimuth to lon/lat' echo 'proj_ra2ll_ascii.csh - project points from range/azimuth to lon/lat' echo 'sarp.csh - focus a single SAR image' echo 'slc2amp.csh - make and amplitude image from and SLC' echo 'snaphu.csh - unwrap phase using snaphu' echo 'stack_corr.bash - stack the correlation to compute mean correlation' echo 'stack_phase.bash - stack the phase to compute mean LOS velocity' echo 'update_PRM - replace a value in a PRF-file' echo ' ' GMTSAR_V5.7/.svn/pristine/ee/ee277ab2729966f8cb8f1e6e97319f56c38eeb93.svn-base000444 015705 000000 00000010777 13505462014 026040 0ustar00sandwellwheel000000 000000 /* write a PRM file */ /* modified by Paul F. Jamason, 3/19/98 */ /* added SC_identity read from file, R. Mellors. 10/1/98 */ /* changed SC_identity to sc_identity in fprintf line, K. Watson. 3/8/99 */ /* force I_mean Q_mean = 15.5 M.Wei. 5/24/06 (Some header is bad)*/ #include "../include/SARtape.h" #include "../include/soi.h" #include #include #include #define FACTOR 1000000 void calc_time(char time_string[], double *clock_time); void make_prm_dpaf(sar) struct SAR_info sar; { double radar_wavelength, pulse_dur, rng_samp_rate; double I_mean, Q_mean, sc_clock_start, chirp_slope; int SC_identity; /* ERS-1 = 1, ERS2 = 2 */ double SC_clock_start, SC_clock_stop; /* translate from structure holding SAR info */ /* see SARtape.h and associated include files for more details */ sscanf((sar.dpaf_dss->mission_identifier + 3), "%d", &SC_identity); prf1 = atof(sar.dpaf_dss->nominal_prf); radar_wavelength = atof(sar.dpaf_dss->radar_wavelength); /* convert into seconds from MHz */ pulse_dur = (atof(sar.dpaf_dss->range_pulse_length) / FACTOR); rng_samp_rate = FACTOR * (atof(sar.dpaf_dss->sampling)); /* correct by factor of two */ chirp_slope = 2.0 * atof(sar.dpaf_dss->range_pulse_phase_quad); /* pj: add 15.5 to these values (see ERS SAR.RAW documentation) */ /* I_mean = 15.5+atof(sar.dpaf_dss->dc_bias_i); Q_mean = 15.5+atof(sar.dpaf_dss->dc_bias_q); */ I_mean = 15.5; Q_mean = 15.5; /* we don't want the first two character; (of year)) */ sc_clock_start = atof((sar.dpaf_dss->satelite_clock_time + 2)); /* pj */ calc_time(sar.dpaf_dss->zero_dop_az_time_f_pixel, &SC_clock_start); calc_time(sar.dpaf_dss->zero_dop_az_time_l_pixel, &SC_clock_stop); /*fprintf(stdout,"I_mean = %lf\n",I_mean); fprintf(stdout,"Q_mean = %lf\n",Q_mean); fprintf(stdout,"rng_samp_rate = %lg\n",rng_samp_rate); fprintf(stdout,"chirp_slope = %lg\n",chirp_slope); fprintf(stdout,"pulse_dur = %lg\n",pulse_dur); fprintf(stdout,"radar_wavelength = %lg\n",radar_wavelength); fprintf(stdout, "SC_identity = %d\n",SC_identity);*/ /* pj: write these to PRM file now instead of in read_data_file.c */ fprintf(stdout, "SC_clock_start = %16.10lf\n", SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf\n", SC_clock_stop); } /* pj */ void calc_time(char time_string[], double *clock_time) { int day_of_month, hour, minute, second, msec, jday, i, month, year, leap; int mon_nday[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char c_month[4], tmp_time_string[24]; char *string_tmp = (char *)malloc(3); /* need a temporary time string else msec reads beginning of next zero_dop string */ strncpy(tmp_time_string, &time_string[0], 24); /* pj: calculate SC_clock_start/stop from sarleader for DPAF */ day_of_month = atoi(&time_string[0]); strncpy(c_month, &time_string[3], 3); if (!strncmp(c_month, "JAN", 3)) { month = 1; } if (!strncmp(c_month, "FEB", 3)) { month = 2; } if (!strncmp(c_month, "MAR", 3)) { month = 3; } if (!strncmp(c_month, "APR", 3)) { month = 4; } if (!strncmp(c_month, "MAY", 3)) { month = 5; } if (!strncmp(c_month, "JUN", 3)) { month = 6; } if (!strncmp(c_month, "JUL", 3)) { month = 7; } if (!strncmp(c_month, "AUG", 3)) { month = 8; } if (!strncmp(c_month, "SEP", 3)) { month = 9; } if (!strncmp(c_month, "OCT", 3)) { month = 10; } if (!strncmp(c_month, "NOV", 3)) { month = 11; } if (!strncmp(c_month, "DEC", 3)) { month = 12; } year = atoi(&time_string[9]); if (year % 4 == 0 && year % 100 != 0) { leap = 1; } else if (year == 00) { leap = 1; } else { leap = 0; } if (leap) { mon_nday[1] = 29; } jday = 0; if (month > 1) { for (i = 0; i < month - 1; i++) jday = jday + mon_nday[i]; } jday = jday + day_of_month; hour = atoi(&time_string[12]); minute = atoi(&time_string[15]); second = atoi(&time_string[18]); // msec = atoi(&tmp_time_string[21]); // memcpy(string_tmp,&tmp_time_string[21],3); msec = atoi(strncpy(string_tmp, tmp_time_string + 21, 3)); // printf("%3d\n",hour); // printf("%3d\n",minute); // printf("%3d\n",second); // printf("%3d\n",msec); // printf("%s\n",tmp_time_string); /* add either 1900 or 2000 to the year */ if (year < 85.) { year = year + 2000.; } else { year = year + 1900.; } /* calculate clock time; determine fraction of msecs in day */ *clock_time = (double)(year * 1000 + jday) + ((double)(hour * 3600 * 1000 + minute * 60 * 1000 + second * 1000 + msec) / (double)(24 * 3600 * 1000)); } GMTSAR_V5.7/.svn/pristine/ee/ee5aa94a2091680acc5855d183688ddd5c3c1f46.svn-base000444 015705 000000 00000001404 13505462014 025757 0ustar00sandwellwheel000000 000000 #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" #include #include void write_orb(FILE *ldrfile, struct ALOS_ORB *orb) { int n; int nd, iy, id; double isec, idsec, pt, px, py, pz, vx, vy, vz; /* write the header information */ nd = orb->nd; iy = orb->iy; id = orb->id; isec = orb->sec; idsec = orb->dsec; fprintf(ldrfile, "%d %d %d %lf %lf \n", nd, iy, id, isec, idsec); /* write the state vectors */ for (n = 0; n < nd; n++) { pt = orb->points[n].pt; px = orb->points[n].px; py = orb->points[n].py; pz = orb->points[n].pz; vx = orb->points[n].vx; vy = orb->points[n].vy; vz = orb->points[n].vz; fprintf(ldrfile, "%d %d %lf %lf %lf %lf %lf %lf %lf \n", iy, id, pt, px, py, pz, vx, vy, vz); } } GMTSAR_V5.7/.svn/pristine/c0/c08b8933f26b290bc0b0e0ffca8fcdeea72de8a4.svn-base000444 015705 000000 00000005657 13505462014 026330 0ustar00sandwellwheel000000 000000 /* This program is supposed to read raw SAR data tapes */ /* */ /* R. Mellors July 1997 */ /* IGPP_SIO */ /* */ #include "../include/SARtape.h" #include #include #include int main(argc, argv) int argc; char **argv; { char *filename, string[5]; int nitems, i, num_data_points; FILE *file1, *outfile; struct SAR_info sar; struct sarleader_binary slfsb, slvsb, slplb; if (argc < 2) { fprintf(stderr, "Usage: read_SAR_tape SARLEADER \n"); exit(1); } filename = argv[1]; file1 = fopen(filename, "r"); outfile = fopen("ldrfile.log", "w"); fprintf(outfile, "listing header values to %s\n", filename); /* allocate memory */ sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); sar.varseg = (struct sarleader_fdr_varseg *)malloc(sizeof(struct sarleader_fdr_varseg)); sar.dss = (struct sarleader_dss *)malloc(sizeof(struct sarleader_dss)); sar.platform = (struct platform *)malloc(sizeof(struct platform)); /* read the file */ nitems = fread(&slfsb, sizeof(struct sarleader_binary), 1, file1); fprintf(outfile, " read %d bytes %d items from file %s : position %ld\n", (sizeof(struct sarleader_binary)), nitems, filename, ftell(file1)); fprintf(outfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(&slfsb)); fscanf(file1, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fprintf(outfile, SARLEADER_FDR_FIXSEG_WCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fscanf(file1, SARLEADER_FDR_VARSEG_RCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); fprintf(outfile, SARLEADER_FDR_VARSEG_WCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); nitems = fread(&slvsb, sizeof(struct sarleader_binary), 1, file1); fprintf(outfile, " read %d bytes %d items from file %s : position %ld\n", (sizeof(struct sarleader_binary)), nitems, filename, ftell(file1)); fprintf(outfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(&slfsb)); fscanf(file1, SARLEADER_DSS_RCS, SARLEADER_DSS_RVL(sar.dss)); fprintf(outfile, SARLEADER_DSS_WCS, SARLEADER_DSS_RVL(sar.dss)); /* why do I need to skip 1664 bytes ahead; what am I missing ? */ fseek(file1, 1664, SEEK_CUR); nitems = fread(&slplb, sizeof(struct sarleader_binary), 1, file1); fprintf(outfile, " read %d bytes %d items from file %s : position %ld\n", (sizeof(struct sarleader_binary)), nitems, filename, ftell(file1)); fprintf(outfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(&slplb)); fscanf(file1, PLATFORM_RCS, PLATFORM_RVL(sar.platform)); fprintf(outfile, PLATFORM_WCS, PLATFORM_RVL(sar.platform)); sar.position = (struct position_vector *)malloc(sizeof(struct position_vector)); sscanf(sar.platform->num_data_points, " %1c", string); for (i = 0; i < (atoi(string)); i++) { fscanf(file1, POSITION_VECTOR_RCS, POSITION_VECTOR_RVL(sar.position)); fprintf(outfile, POSITION_VECTOR_WCS, POSITION_VECTOR_RVL(sar.position)); } /* now make the PRM file */ make_prm(sar); } GMTSAR_V5.7/.svn/pristine/c7/c77674d1b7f647b6478944dfdeb67f6efd2323f5.svn-base000444 015705 000000 00000002027 13505462013 025735 0ustar00sandwellwheel000000 000000 /************************************************************************ * radopp modifies doppler frequencies to make them a function of * * range. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History: * * * * Date: 11/18/96 * * * ************************************************************************/ #include void radopp(double *fd, double *fdd, double *fddd, double r, double del) { double temp1, temp2, temp3, fac; fac = r / del; temp1 = *fd - *fdd * (fac) + *fddd * pow(fac, 2.0); temp2 = *fdd / del - 2.0 * (*fddd) * (fac) / del; temp3 = *fddd / (pow(del, 2.0)); *fd = temp1; *fdd = temp2; *fddd = temp3; } GMTSAR_V5.7/.svn/pristine/c7/c7aa9cad1392c8343a51412a781543685cb87c51.svn-base000444 015705 000000 00000016121 13505462013 025444 0ustar00sandwellwheel000000 000000 17 17 4.5043693347551461e-01 5.0795411777260913e-01 5.6371065686729904e-01 6.1564346344509868e-01 6.6167323567356540e-01 6.9984059568633905e-01 7.2844364985708787e-01 7.4616360183213915e-01 7.5216552907458945e-01 7.4616360183213915e-01 7.2844364985708787e-01 6.9984059568633905e-01 6.6167323567356540e-01 6.1564346344509868e-01 5.6371065686729904e-01 5.0795411777260913e-01 4.5043693347551461e-01 4.8152965010655330e-01 5.4301712498121202e-01 6.0262242100847008e-01 6.5814004028428497e-01 7.0734715113249602e-01 7.4814912394283795e-01 7.7872658694203523e-01 7.9766971003057563e-01 8.0408593772026005e-01 7.9766971003057563e-01 7.7872658694203523e-01 7.4814912394283795e-01 7.0734715113249602e-01 6.5814004028428497e-01 6.0262242100847008e-01 5.4301712498121202e-01 4.8152965010655330e-01 5.1020753614722270e-01 5.7535694709787133e-01 6.3851208452432839e-01 6.9733610031900528e-01 7.4947378027543898e-01 7.9270574743032562e-01 8.2510427585947044e-01 8.4517557189658699e-01 8.5197392319268905e-01 8.4517557189658699e-01 8.2510427585947044e-01 7.9270574743032562e-01 7.4947378027543898e-01 6.9733610031900528e-01 6.3851208452432839e-01 5.7535694709787133e-01 5.1020753614722270e-01 5.3580344180573591e-01 6.0422124465234306e-01 6.7054472598768267e-01 7.3231980356028847e-01 7.8707310763606808e-01 8.3247392035737744e-01 8.6649780634868057e-01 8.8757603184765799e-01 8.9471544035299400e-01 8.8757603184765799e-01 8.6649780634868057e-01 8.3247392035737744e-01 7.8707310763606808e-01 7.3231980356028847e-01 6.7054472598768267e-01 6.0422124465234306e-01 5.3580344180573591e-01 5.5769778993479158e-01 6.2891132546407869e-01 6.9794495995669004e-01 7.6224433085879717e-01 8.1923499999630733e-01 8.6649101020517372e-01 9.0190520231710647e-01 9.2384473995223226e-01 9.3127588360343549e-01 9.2384473995223226e-01 9.0190520231710647e-01 8.6649101020517372e-01 8.1923499999630733e-01 7.6224433085879717e-01 6.9794495995669004e-01 6.2891132546407869e-01 5.5769778993479158e-01 5.7534340922962912e-01 6.4881014884053201e-01 7.2002801510666004e-01 7.8636182516257636e-01 8.4515568532775065e-01 8.9390688088715620e-01 9.3044158192510507e-01 9.5307528893942006e-01 9.6074155479150147e-01 9.5307528893942006e-01 9.3044158192510507e-01 8.9390688088715620e-01 8.4515568532775065e-01 7.8636182516257636e-01 7.2002801510666004e-01 6.4881014884053201e-01 5.7534340922962912e-01 5.8828822535052538e-01 6.6340791417403566e-01 7.3622813160739431e-01 8.0405440505125836e-01 8.6417108511263163e-01 9.1401914778143079e-01 9.5137585352019205e-01 9.7451880279006164e-01 9.8235755415287818e-01 9.7451880279006164e-01 9.5137585352019205e-01 9.1401914778143079e-01 8.6417108511263163e-01 8.0405440505125836e-01 7.3622813160739431e-01 6.6340791417403566e-01 5.8828822535052538e-01 5.9619449848487238e-01 6.7232375498628727e-01 7.4612263645526833e-01 8.1486045804921237e-01 8.7578507352729762e-01 9.2630306699140164e-01 9.6416182649605986e-01 9.8761580439131602e-01 9.9555990430036567e-01 9.8761580439131602e-01 9.6416182649605986e-01 9.2630306699140164e-01 8.7578507352729762e-01 8.1486045804921237e-01 7.4612263645526833e-01 6.7232375498628727e-01 5.9619449848487238e-01 5.9885346518033067e-01 6.7532225040618310e-01 7.4945026736448317e-01 8.1849465263655763e-01 8.7969098568986626e-01 9.3043428425571784e-01 9.6846188996897076e-01 9.9202047021506723e-01 1.0000000000000000e+00 9.9202047021506723e-01 9.6846188996897076e-01 9.3043428425571784e-01 8.7969098568986626e-01 8.1849465263655763e-01 7.4945026736448317e-01 6.7532225040618310e-01 5.9885346518033067e-01 5.9619449848487238e-01 6.7232375498628727e-01 7.4612263645526833e-01 8.1486045804921237e-01 8.7578507352729762e-01 9.2630306699140164e-01 9.6416182649605986e-01 9.8761580439131602e-01 9.9555990430036567e-01 9.8761580439131602e-01 9.6416182649605986e-01 9.2630306699140164e-01 8.7578507352729762e-01 8.1486045804921237e-01 7.4612263645526833e-01 6.7232375498628727e-01 5.9619449848487238e-01 5.8828822535052538e-01 6.6340791417403566e-01 7.3622813160739431e-01 8.0405440505125836e-01 8.6417108511263163e-01 9.1401914778143079e-01 9.5137585352019205e-01 9.7451880279006164e-01 9.8235755415287818e-01 9.7451880279006164e-01 9.5137585352019205e-01 9.1401914778143079e-01 8.6417108511263163e-01 8.0405440505125836e-01 7.3622813160739431e-01 6.6340791417403566e-01 5.8828822535052538e-01 5.7534340922962912e-01 6.4881014884053201e-01 7.2002801510666004e-01 7.8636182516257636e-01 8.4515568532775065e-01 8.9390688088715620e-01 9.3044158192510507e-01 9.5307528893942006e-01 9.6074155479150147e-01 9.5307528893942006e-01 9.3044158192510507e-01 8.9390688088715620e-01 8.4515568532775065e-01 7.8636182516257636e-01 7.2002801510666004e-01 6.4881014884053201e-01 5.7534340922962912e-01 5.5769778993479158e-01 6.2891132546407869e-01 6.9794495995669004e-01 7.6224433085879717e-01 8.1923499999630733e-01 8.6649101020517372e-01 9.0190520231710647e-01 9.2384473995223226e-01 9.3127588360343549e-01 9.2384473995223226e-01 9.0190520231710647e-01 8.6649101020517372e-01 8.1923499999630733e-01 7.6224433085879717e-01 6.9794495995669004e-01 6.2891132546407869e-01 5.5769778993479158e-01 5.3580344180573591e-01 6.0422124465234306e-01 6.7054472598768267e-01 7.3231980356028847e-01 7.8707310763606808e-01 8.3247392035737744e-01 8.6649780634868057e-01 8.8757603184765799e-01 8.9471544035299400e-01 8.8757603184765799e-01 8.6649780634868057e-01 8.3247392035737744e-01 7.8707310763606808e-01 7.3231980356028847e-01 6.7054472598768267e-01 6.0422124465234306e-01 5.3580344180573591e-01 5.1020753614722270e-01 5.7535694709787133e-01 6.3851208452432839e-01 6.9733610031900528e-01 7.4947378027543898e-01 7.9270574743032562e-01 8.2510427585947044e-01 8.4517557189658699e-01 8.5197392319268905e-01 8.4517557189658699e-01 8.2510427585947044e-01 7.9270574743032562e-01 7.4947378027543898e-01 6.9733610031900528e-01 6.3851208452432839e-01 5.7535694709787133e-01 5.1020753614722270e-01 4.8152965010655330e-01 5.4301712498121202e-01 6.0262242100847008e-01 6.5814004028428497e-01 7.0734715113249602e-01 7.4814912394283795e-01 7.7872658694203523e-01 7.9766971003057563e-01 8.0408593772026005e-01 7.9766971003057563e-01 7.7872658694203523e-01 7.4814912394283795e-01 7.0734715113249602e-01 6.5814004028428497e-01 6.0262242100847008e-01 5.4301712498121202e-01 4.8152965010655330e-01 4.5043693347551461e-01 5.0795411777260913e-01 5.6371065686729904e-01 6.1564346344509868e-01 6.6167323567356540e-01 6.9984059568633905e-01 7.2844364985708787e-01 7.4616360183213915e-01 7.5216552907458945e-01 7.4616360183213915e-01 7.2844364985708787e-01 6.9984059568633905e-01 6.6167323567356540e-01 6.1564346344509868e-01 5.6371065686729904e-01 5.0795411777260913e-01 4.5043693347551461e-01 GMTSAR_V5.7/.svn/pristine/c7/c78eecaa7e76b7092b61ec9fdc268b5a82156e2a.svn-base000444 015705 000000 00000021164 13505462014 026127 0ustar00sandwellwheel000000 000000 /* * $Id: epr_string.c,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" char* epr_assign_string(char** str_clone, const char* str) { assert(str_clone != NULL); epr_free_string(*str_clone); *str_clone = epr_clone_string(str); return *str_clone; } char* epr_create_string(unsigned int length) { return (char*) calloc(length + 1, sizeof (char)); } char* epr_clone_string(const char* str) { char* str_clone = NULL; if (str != NULL) { str_clone = epr_create_string(strlen(str)); strcpy(str_clone, str); } return str_clone; } void epr_cut_string(char** sub_str, const char* str, int start, int length) { *sub_str = epr_create_string(length); strncpy(*sub_str, str + start, length); *sub_str[length] = '\0'; } char* epr_sub_string(const char* str, int start, int length) { char* str_sub_string = NULL; if (str != NULL) { str_sub_string = epr_create_string(length); strncpy(str_sub_string, str + start, length); str_sub_string[length] = '\0'; } return str_sub_string; } /* Function: epr_get_last_err_code Access: private API implementation helper Changelog: 2002/01/05 nf initial version */ /** * Compares the two given names and returns TRUE if * they are equal ignoring the case of each letter. * *

This function is used to compare names throughout the * ENVISAT product reader API. * * @param name1 the first name, must not be NULL * @param name2 the second name, must not be NULL * @return TRUE if the names are equal, * FALSE otherwise */ epr_boolean epr_equal_names(const char* name1, const char* name2) { assert(name1 != NULL); assert(name2 != NULL); return stricmp(name1, name2) == 0; } void epr_free_string(char* str) { if (str == NULL) return; free(str); } /* Function: epr_str_tok Access: private API implementation helper Changelog: 2002/01/10 mp initial version */ /** * Findes substrings between separators. * * @param str the string to search * @param seps the separator simbols string * @param pos position with a search begin * * @return the next substring (or own string) of the found name or * (uint)NULL if an error occured. */ char* epr_str_tok(const char* str, const char* seps, int* pos) { char* token = NULL; int i, old_pos; int token_len = 0; assert(str != NULL); if (*pos >= (int)strlen(str)) return NULL; old_pos = *pos; for (i = *pos; str[i] != '\0'; i++) { if (strchr(seps, str[i]) != NULL) { token_len = i - *pos; token = epr_create_string(token_len); strncpy(token, str + *pos, token_len); token[token_len] = '\0'; *pos = i + 1; return token; } } if (strlen(str) > 0) { if (old_pos == 0) { *pos = i + 1; token = epr_clone_string(str); return token; } else if (old_pos > 0) { token_len = i - old_pos; token = epr_create_string(token_len); strncpy(token, str + *pos, token_len); token[token_len] = '\0'; *pos = (int)strlen(str); return token; } } return NULL; } /* Function: epr_str_tok_tok Access: private API implementation helper Changelog: 2002/01/10 mp initial version */ /** * Findes substrings between double separators. * * @param str the string to search * @param seps the separator simbols string * @param pos position with a search begin * * @return the next substring (or own string) of the found name or * (uint)NULL if an error occured. */ char* epr_str_tok_tok(const char* str, const char* seps, const char* exceptions, uint* pos) { char* token = NULL; uint i, old_pos; uint token_len = 0; assert(str != NULL); if (*pos >= (uint)strlen(str)) return NULL; old_pos = *pos; for (i = *pos; str[i] != '\0'; i++) { if (((strchr(seps, str[i]) != NULL) && (i == 0)) || ((strchr(seps, str[i]) != NULL) && (i > 0) && (strchr(exceptions, str[i - 1]) == NULL))) { token_len = i - *pos; token = epr_create_string(token_len); strncpy(token, str + *pos, token_len); token[token_len] = '\0'; *pos = i + 1; return token; } } if (strlen(str) > 0) { if (old_pos == 0) { *pos = i + 1; token = epr_clone_string(str); return token; } else if (old_pos > 0) { token_len = i - old_pos; token = epr_create_string(token_len); strncpy(token, str + *pos, token_len); token[token_len] = '\0'; *pos = (int)strlen(str); return token; } } return NULL; } int epr_find_first_not_white(const char* str) { int i; char white[] = {" "}; for (i = 0; i < (int)strlen(str); i ++) { if (strchr(white, str[i]) == NULL) return i; } return (int)strlen(str); } int epr_find_last_not_white(const char* str) { int i; char white[] = {" "}; if ((int)strlen(str) == 0) return -1; for (i = (int)strlen(str) - 1; i >= 0; i --) { if (strchr(white, str[i]) == NULL) return i; } return -1; } char* epr_trim_string(char* str) { int i, i1, i2, n; assert(str != NULL); n = strlen(str); if (n == 0) return str; i1 = -1; for (i = 0; str[i] != '\0'; i++) { if (!isspace(str[i])) { i1 = i; break; } } if (i1 == -1) { str[0] = '\0'; return str; } i2 = -1; for (i = n - 1; i >= 0; i--) { if (!isspace(str[i])) { i2 = i; break; } } assert(i1 > -1 && i2 > -1); if (i1 > 0) { int j = 0; for (i = i1; i <= i2; i++) { str[j] = str[i]; j++; } } str[i2 - i1 + 1] = '\0'; return str; } char* epr_strip_string_r(char* str) { int i, i1, n; assert(str != NULL); n = strlen(str); if (n == 0) { return str; } i1 = -1; for (i = n - 1; i >= 0; i--) { if (33 <= str[i] && str[i] <= 126) { i1 = i; break; } } if (i1 == -1) { str[0] = '\0'; } else { str[i1+1] = '\0'; } return str; } int epr_if_no_letters(const char* str) { int i; char ciffer[] = {"0123456789+- "}; for (i = 0; i < (int)strlen(str); i ++) { if (strchr(ciffer, str[i]) == NULL) return 0; } return 1; } int epr_get_positive_int(const char* str) { int i; char ciffer[] = {"0123456789 "}; for (i = 0; i < (int)strlen(str); i ++) { if (strchr(ciffer, str[i]) == NULL) return -1; } return atoi(str); } /*'Verdacht': if float-or-double*/ int epr_numeral_suspicion(const char* str) { int i; char ciffer[] = {"0123456789+- .eE"}; for (i = 0; i < (int)strlen(str); i ++) { if (strchr(ciffer, str[i]) == NULL) return 0; } /*if YES*/ return 1; } int epr_if_no_scaling(const char* str) { int result; result = strrchr(str, EPR_IRRELEVANCE_SYMBOL) - str + 1; if (result == 1) return 1; return 0; } void epr_free_and_null_string(char** str) { if (*str == NULL) return; epr_free_string(*str); *str = NULL; } int stricmp(const char* s1, const char* s2) { int d; assert(s1 != NULL); assert(s2 != NULL); while (*s1 != '\0' && *s2 != '\0') { d = tolower(*s1) - tolower(*s2); if (d != 0) { break; } s1++; s2++; } d = tolower(*s1) - tolower(*s2); return d; } GMTSAR_V5.7/.svn/pristine/eb/eb9e97abc3f557a09788b0d62f8db5604de60614.svn-base000444 015705 000000 00000000303 13505462014 025762 0ustar00sandwellwheel000000 000000 # # Makefile for ccrs2dpaf and dopiq. # cc = gcc flag = -O2 SLIB = ../../../../lib/sun4/libsiosar.a ccrs2dpaf: ccrs2dpaf.c cc ccrs2dpaf.c -o ../../../../bin/sun4/ccrs2dpaf clean: rm -f *.o GMTSAR_V5.7/.svn/pristine/f3/f36d99f78b92a906af7e68b9021f836209f6a063.svn-base000444 015705 000000 00000135673 13505462014 025524 0ustar00sandwellwheel000000 000000 snaphu

snaphu

NAME
SYNOPSIS
DESCRIPTION
OPTIONS
FILE FORMATS
EXAMPLES
HINTS AND TIPS
SIGNALS
EXIT STATUS
FILES
BUGS
REFERENCES

NAME

snaphu - phase unwrapping algorithm for SAR interferometry

SYNOPSIS

snaphu [options] [infile] [linelength] [options]

DESCRIPTION

snaphu is a statistical-cost network-flow algorithm for phase unwrapping. Given an input interferogram and other observable data, snaphu attempts to compute congruent phase-unwrapped solutions that are maximally probable in an approximate a posteriori sense. The algorithm's solver routine is based on network optimization. By default, snaphu assumes that its input is a synthetic aperture radar (SAR) interferogram measuring surface topography. Deformation measurements are assumed if the -d option is given. Smooth, generic data are assumed if the -s option is given.

This man page documents only snaphu's syntax and usage. Its theoretical foundations are discussed in the references cited below.

The most common input parameters may be given on the command line, while many other twiddle parameters are handled via the -f option and configuration files. At the very least, the name of a wrapped-phase input file and its line length must be specified. Range should increase towards the right in the interferogram, and the flat-earth phase ramp should be removed from the input interferogram before snaphu is run. For deformation interferograms, phase variations due to topography should be removed as well.

Except for the input file name and the line length, all input parameters take default values if not specified. However, these parameters should be customized whenever possible since the accuracy of the solution depends on how well the statistics of the estimation problem are modeled. To avoid poor-quality solutions, users are strongly encouraged to provide their best estimates of the relevant problem parameters. Parameters are set in the order in which they are given on the command line, so multiple configuration files or options may be given, with later values overriding earlier ones.

Allowable file formats are detailed below. The default format for the input file is COMPLEX_DATA, but any of the described formats may be used. If either of the ALT_LINE_DATA or ALT_SAMPLE_DATA formats are used, the magnitude and phase (in radians) of the interferogram should be in the first and second channels of the file, respectively. If the FLOAT_DATA format is used, the input file should contain only the phase of the interferogram (in radians); the magnitude may be passed with the -m option.

OPTIONS

-a ampfile

Read brightness data from the file ampfile. The file should contain the amplitudes (not powers) of the two individual SAR images forming the interferogram if the formats ALT_SAMPLE_DATA (default) or ALT_LINE_DATA are used. It should contain an average of those two images if the FLOAT_DATA format is used. If (1) the amplitudes of both images are available, (2) the interferogram magnitude is also available, and (3) the -c option is not used, then a coherence estimate is automatically formed from the available data. The number of looks used for this estimate can be set in a configuration file. If no amplitude or power data are specified, then the magnitude of the input interferogram is used as the average amplitude, and no coherence estimate is formed. Note that the magnitude of the interferogram is not equal to the average amplitude of the SAR images. The amplitude data should be in the same system of units used for the input interferogram, and also coregistered to it.

-A pwrfile

Similar to the -a option, except the data in the specified file is assumed to represent the powers of the two individual SAR images.

-b Bperp

For topography mode, use Bperp (decimal value, in meters) as the value of the perpendicular component of the interferometric baseline. The sign is defined such that Bperp is negative if the unwrapped phase increases with the elevation. By default, repeat-pass or ping-pong mode is assumed; for single-antenna-transmit data, the value of Bperp should be halved, or the transmit mode should be set accordingly in a configuration file (see the -f option). The baseline value is only used in topography mode.

-c corrfile

Read correlation data from the file corrfile. The correlation data should be the same size as, and registered to, the input interferogram. Consequently, a raw correlation estimate may need to be upsampled if it incorporates more looks than the interferogram. If the -c option is not given, a coherence estimate is formed from the available data if possible. Otherwise, a uniform default coherence is assumed for the entire interferogram. If the ALT_LINE_DATA (default) or ALT_SAMPLE_DATA formats are used, the correlation data should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA format may also be used. The correlation values should be between zero and one, inclusive.

-d

Run in deformation mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents surface displacement rather than elevation.

-e estimatefile

Flatten using the unwrapped phase estimate in the file estimatefile. The estimate is subtracted from the input interferogram before unwrapping, and is inserted back into the solution just before the output is written. The estimate also affects the cost functions used, since subtracting a constant from a random variable shifts the probability density function of the random variable. If the formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped estimate (in radians) should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA format may also be used.

-f configfile

Read configuration parameters from file configfile. The file is parsed line by line for key-value pairs. Template configuration files are included with the snaphu source code: snaphu.conf.full contains all valid key-value pairs; snaphu.conf.brief contains the most important parameters. Lines not beginning with alphanumeric characters are treated as comment lines. Command line options specified after -f will override parameters specified in the configfile and vice versa. The -f option may be given multiple times with different configuration files, with parameters in later-specified files overriding those in earlier ones.

-g maskfile

Grow a connected component mask for the unwrapped solution and write the mask to the file maskfile. A connected component is a region of pixels in the solution that is believed to have been unwrapped in a relative, internally self-consistent manner according to the statistical costs used. Regions that are smaller than a preselected threshold are masked out. Parameters for this option can be set in the configuration file. The connected component file is composed of unsigned characters, with all pixels of the same value belonging to the same connected component and zero corresponding to masked pixels.

-G maskfile

Grow a connected component mask (see the -g option) for the input data array, assuming that it is already unwrapped, and write the mask to the file maskfile. Statistical cost functions are computed for forming the mask, but a new unwrapped solution is not computed.

-h

Print a help message summarizing command-line options and exit.

-i

Run in initialize-only mode. Normally, snaphu uses either an approximate minimum spanning tree (MST) algorithm or a minimum cost flow (MCF) algorithm for generating the initialization to its iterative, modified network-simplex solver. If -i is given, the initialization is written to the output and the program exits without running the iterative solver.

-l logfile

Log all runtime parameters and some other environment information into the specified file. The log file is a text file in the same format as a configuration file.

-m magfile

Read interferogram magnitude data from the specified file. This option is useful mainly if the wrapped-phase input file is given as a set of real phase values rather than complex interferogram values. The interferogram magnitude is used to form a coherence estimate if appropriate amplitude data are given as well. The default file format is FLOAT_DATA. If the formats ALT_LINE_DATA or ALT_SAMPLE_DATA are used, the magnitude should be in the first data channel of the file; the second channel is ignored. If the COMPLEX_DATA format is used, the phase information is ignored.

-n

Run in no-statistical-costs mode. If the -i or -p options are given, snaphu will not use statistical costs. Information from a weight file (-w option) will still be used if given.

-o outfile

Write the unwrapped output to file called outfile. If the file formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped phase is written into the second data channel, while the interferogram magnitude is written into the first channel. The format FLOAT_DATA may also be used.

-p value

Run in Lp-norm mode with p=value, where value is a nonnegative decimal. Instead of statistical cost functions, the program uses Lp cost functions with statistically based weights (unless -n is also given). Solutions are still always congruent. Moreover, congruence is enforced within the solver routine, not as a post-optimization processing step. Therefore, if p=2, for example, least-squares cost functions are used, but the solution will probably be more accurate than one generated from a transform-based least-squares algorithm.

-q

Run in quantify-only mode. The input data are assumed to be unwrapped already, and the total cost of this solution is calculated and printed. The unwrapped phase is wrapped assuming congruence for the cost calculation. Round-off errors may limit the precision of the quantified cost. See the -u option for allowable file formats.

-s

Run in smooth-solution mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents a generic surface with no discontinuities. This is the same as deformation mode with the DEFOMAX parameter set to zero.

-t

Run in topography mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents surface elevation. This is the default.

-u

Assume that the input file is unwrapped rather than wrapped. The algorithm makes iterative improvements to this solution instead of using an initialization routine. The input file may be in the formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA; the interferogram magnitude should be in the first data channel and the unwrapped phase should be in the second data channel. The format FLOAT_DATA may also be used.

-v

Run in verbose mode. Extra information on the algorithm's progress is printed to the standard output.

-w weightfile

Read external, scalar weights from file weightfile. The weights, which should be positive short integers, are applied to whichever cost functions are used. There is one weight value for each arc in the network, so weightfile should be the concatenation of raster horizontal-flow and vertical-flow arc weights. Thus, for an N row by M column interferogram, weightfile would consist of a rasterized (N-1) by M array followed by a rasterized N by (M-1) array of short integer data. This option is not well tested.

--aa ampfile1 ampfile2

Amplitude data are read from the files specified. The data from the two individual SAR images forming the interferogram are assumed to be separately stored in files ampfile1 and ampfile2. These files should be in the format FLOAT_DATA. This option is similar to the -a option.

--AA pwrfile1 pwrfile2

Similar to the --aa option, but power data are read from the specified files.

--assemble dirname

Assemble the tile-mode temporary files in the specified directory. Most configuration options (from the command line and any configuration files) must be specified. This option is useful if the user wishes to modify tile-assembly parameters without unwrapping the individual tiles over again.

--copyright, --info

Print the software copyright notice and bug report info, then exit.

--costinfile costfile

Read statistical cost arrays from file costfile. This file should be in the format written by the --costoutfile option. The cost file does not control whether snaphu runs in topography, deformation, or smooth-solution mode; the latter two must be specified explicitly even if costfile was generated while running in those modes.

--costoutfile costfile

Write statistical cost arrays to file costfile. This option can be used with the --costinfile option to save the time of generating statistical costs if the same costs are used multiple times.

--debug, --dumpall

Dump all sorts of intermediate arrays to files.

--mst

Use a minimum spanning tree (MST) algorithm for the initialization. This is the default.

--mcf

Use a minimum cost flow (MCF) algorithm for the initialization. The cs2 solver by Goldberg and Cherkassky is used. The modified network-simplex solver in L1 mode may give different results than the cs2 solver, though in principle both should be L1 optimal.

--nproc n

Use n parallel processes when in tile mode. The program forks a new process for each tile so that tiles can be unwrapped in parallel; at most n processes will run concurrently. Forking is done before data is read. The standard output streams of child processes are directed to log files in the temporary tile directory.

--piece firstrow firstcol nrow ncol

Read and unwrap only a subset or part of the input interferogram. The read piece is the nrow by ncol rectangle whose upper left corner is the pixel at row firstrow and column firstcol (indexed from 1). All input files (such as amplitude, coherence, etc.) are assumed to be the same size as the input phase file. All output files are nrow by ncol.

--tile ntilerow ntilecol rowovrlp colovrlp

Unwrap the interferogram in tile mode. The interferogram is partitioned into ntilerow by ntilecol tiles, each of which is unwrapped independently. Tiles overlap by rowovrlp and colovrlp pixels in the row and column directions. The tiles are then segmented into reliable regions based on the cost functions, and the regions are reassembled. The program creates a subdirectory for temporary files in the directory of the eventual output file. This option is currently enabled only for statistical cost functions.

FILE FORMATS

The formats of input files may be specified in a configuration file. All of these formats are composed of raster, single-precision (float, real*4, or complex*8) floating-point data types in the platform's native byte order. Data are read line by line (across then down). Regardless of the file format, all input data arrays should have the same number of samples in width and depth and should be coregistered to one another. Note that weight files and cost files have their own formats. The allowable formats for other data files are described below.

COMPLEX_DATA

Alternating floats correspond to the real (in-phase) and imaginary (quadrature) components of complex data samples. The specified line length should be the number of complex samples (pairs of real and imaginary samples) per line.

ALT_LINE_DATA

Alternating lines (rows) of data correspond to lines of purely real data from two separate arrays. The first array is often the magnitude of the interferogram, and the second may be unwrapped phase, coherence, etc. This is also sometimes called hgt or line-interleaved format.

ALT_SAMPLE_DATA

Alternating samples correspond to purely real samples from two separate arrays. This format is sometimes used for the amplitudes of the two SAR images.

FLOAT_DATA

The file contains data for only one channel or array, and the data are purely real.

EXAMPLES

Unwrap a wrapped topographic interferogram called ``wrappedfile'' whose line length is 1024 complex samples (output will be written to a file whose name is compiled into the program):

     snaphu wrappedfile 1024
Unwrap the same file as above, but use brightness information from the file ``ampfile,'' set the perpendicular baseline to -165 m at midswath, and place the output in a file called ``unwrappedfile'' (coherence data are generated automatically if ``wrappedfile'' contains complex data and ``ampfile'' contains amplitude data from both SAR images):

     snaphu wrappedfile 1024 -a ampfile \
          -b -165 -o unwrappedfile
Unwrap the interferogram as above, but read correlation information from the file ``corrfile'' instead of generating it from the interferogram and amplitude data:

     snaphu wrappedfile 1024 -a ampfile -c corrfile \
          -b -165 -o unwrappedfile
The following is equivalent to the previous example, but input parameters are read from a configuration file, and verbose output is displayed:

     cat > configfile
     # This is a comment line which will be ignored
     AMPFILE      ampfile
     CORRFILE     corrfile
     BPERP        -165
     OUTFILE      unwrappedfile
     <Ctrl-D>

     snaphu -v -f configfile wrappedfile 1024
Unwrap the same interferogram, but use only the MST initialization (with scalar statistical weights) and write the output to ``mstfile'':

     snaphu -f configfile -i wrappedfile 1024 -o mstfile
Read the unwrapped data in ``mstfile'' and use that as the initialization to the modified network-simplex solver:

     snaphu -f configfile -u mstfile 1024 -o unwrappedfile
Note that in the previous two examples, the output file name in the configuration file is overrided by the one given on the command line. The previous two commands together are in principle equivalent to the preceding one, although round-off errors in flow-to-phase conversions may cause minor differences

Unwrap the interferogram as above, but use the MCF algorithm for initialization:

     snaphu -f configfile wrappedfile 1024 --mcf
Unwrap the interferogram once again, but first flatten it with the unwrapped data in ``estfile,'' then reinsert the subtracted phase after unwrapping:

     snaphu -f configfile wrappedfile 1024 -e estfile
The following assumes that the wrapped input interferogram measures deformation, not topography. Unwrap the interferogram with the given correlation data:

     snaphu -d wrappedfile 1024 -c corrfile
Unwrap the input interferogram by minimizing the unweighted congruent L2 norm:

     snaphu -p 2 -n wrappedfile 1024
Unwrap the interferogram as a three-by-four set of tiles that overlap by 30 pixels, with the specified configuration file, using two processors:

     snaphu wrappedfile 1024 -f configfile \
          --tile 3 4 30 30 --nproc 2

HINTS AND TIPS

The program may print a warning message about costs being clipped to avoid overflow. If too many costs are clipped, the value of COSTSCALE may need to be decreased in a configuration file (via the -f option). If the program prints a warning message about an unexpected increase in the total solution cost, this is an indication that too many costs are clipped. It is usually okay if just a few costs are clipped.

In topography mode, if the unwrapped result contains too many discontinuities, try increasing the value of LAYMINEI or decreasing the value of LAYCONST. The former determines the normalized intensity threshold for layover, and the latter is the relative layover probability. If there are too many discontinuities running in azimuth, try decreasing the value of AZDZFACTOR, which affects the ratio of azimuth to range costs. If the baseline is not known, take a guess at it and be sure its sign is correct. Specify the SAR imaging geometry parameters as well as possible. The defaults assume ERS data with five looks taken in azimuth.

In deformation mode, if the unwrapped result contains too many discontinuities, try increasing the value of DEFOTHRESHFACTOR or decreasing the value of DEFOCONST. If the surface displacement varies slowly and true discontinuities are not expected at all, DEFOMAX_CYCLE can be set to zero. This behavior is also invoked with the -s option. The resulting cost functions will be similar to correlation-weighted L2 cost functions, though the former are not necessarily centered on the wrapped gradients. Congruence is still enforced during rather than after optimization.

The program can be run in initialize-only (-i) mode for quick down-and-dirty MST or MCF solutions.

SIGNALS

Once the iterative solver has started, snaphu traps the interrupt (INT) and hangup (HUP) signals. Upon receiving an interrupt, for example if the user types Ctrl-C, the program finishes a minor iteration, dumps its current solution to the output, and exits. If a second interrupt is given after the first (caught) interrupt, the program exits immediately. If a hangup signal is received, the program dumps its current solution then continues to execute normally.

EXIT STATUS

Upon successful termination, the program exits with code 0. Errors result in exit code 1.

FILES

The following files may be useful for reference, but are not required. They are included in the program source distribution and may be installed somewhere on the system.

snaphu.conf.full

Template configuration file setting all valid input parameters (though some may be commented out).

snaphu.conf.brief

General-purpose template configuration file setting the most important or commonly modified input parameters.

In addition to parameters read from configuration files specified on the command line, default parameters may be read from a system-wide configuration file if such a file is named when the program is compiled.

BUGS

The -w option has not been tested exhaustively.

Extreme shadow discontinuities (i.e., abrupt elevation drops in increasing range due to cliffs facing away from the radar) are not modeled that well in the cost functions for topography mode.

Abrupt changes in surface reflectivity, such as those of coastlines between bright land and dark water, might be misinterpreted as layover and assigned inappropriate costs.

The algorithm's behavior may be unpredictable if the costs are badly scaled and excessively clipped to fit into their short-integer data types.

There is no error checking that ensures that the network node potentials (incost and outcost) do not overflow their long-integer data types.

Automatic flow clipping is built into the MST initialization, but it can give erratic results and may loop infinitely for certain input data sets. It is consequently turned off by default.

Dedicated programs for specific Lp objective functions may work better than snaphu in Lp mode. Note that snaphu enforces congruence as part of the problem formulation, however, not as a post-optimization processing step.

REFERENCES

C. W. Chen and H. A. Zebker, ``Two-dimensional phase unwrapping with use of statistical models for cost functions in nonlinear optimization,'' Journal of the Optical Society of America A, 18, 338-351 (2001).

C. W. Chen and H. A. Zebker, ``Network approaches to two-dimensional phase unwrapping: intractability and two new algorithms,'' Journal of the Optical Society of America A, 17, 401-414 (2000).

C. W. Chen and H. A. Zebker, ``Phase unwrapping for large SAR interferograms: Statistical segmentation and generalized network models,'' IEEE Transactions on Geoscience and Remote Sensing, 40, 1709-1719 (2002).


GMTSAR_V5.7/.svn/pristine/f3/f36c0855468150ad528d02e26c35a3069aeebeaa.svn-base000444 015705 000000 00000001740 13505462013 025655 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. T. Sandwell AUG 30 2007 # # Script to replace a value in a PRM-file # # alias rm 'rm -f' unset noclobber # if ($#argv < 2) then echo " " echo "Usage: update_PRM file.PRM param value " echo " " echo "Example: update_PRM IMG-HH-ALPSRP049040660-H1.0__A.PRM rshift 10" exit 1 endif # # copy the file to junk.PRM # cp $1 junk.PRM # # remove the line with the matching parameter # if ($2 != 'clock_start' && $2 != 'clock_stop') then grep -v $2 < junk.PRM > junk2.PRM else if ($2 == 'clock_start') then set tmptime = `grep SC_clock_start < junk.PRM | awk '{print $3}'` grep -v $2 < junk.PRM > junk2.PRM echo 'SC_clock_start' ' = ' $tmptime >> junk2.PRM else set tmptime = `grep SC_clock_stop < junk.PRM | awk '{print $3}'` grep -v $2 < junk.PRM > junk2.PRM echo 'SC_clock_stop' ' = ' $tmptime >> junk2.PRM endif endif # # add a new line # echo $2 ' = ' $3 >> junk2.PRM # mv junk2.PRM $1 rm junk.PRM GMTSAR_V5.7/.svn/pristine/f4/f4ffe1630e2761550f0152c39777b9698a3c006d.svn-base000444 015705 000000 00000012216 13505462013 025402 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # preprocess all the data based on data.in table file and generate: # 1. SLC files # 2. PRM files # 3. LED files # 4. time-baseline plot for user to create stacking pairs # format in data.in table file: # line 1: master_name # line 2 and below: slave_name alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv != 2) then echo "" echo "Usage: pre_proc_batch_ALOS2_SCAN.csh data.in batch.config" echo " preprocess a set of images using a common radius" echo " preprocess all 5 subswaths " echo "" echo " format of data.in is:" echo " line 1: master_name " echo " line 2 and below: slave_name" echo "" echo " example of data.in for ALOS2 SCANSAR is:" echo " IMG-HH-ALOS2047473650-150410-WBDR1.1__D" echo " IMG-HH-ALOS2101293650-160408-WBDR1.1__D" echo "" echo "Example: pre_proc_batch_ALOS2_SCAN.csh data.in batch.config" echo "" exit 1 endif # # read parameters from configuration file # set earth_radius = `grep earth_radius $2 | awk '{print $3}'` set SLC_factor = `grep SLC_factor $2 | awk '{print $3}'` set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif echo $commandline # # open and read data.in table # echo "" echo "START PREPROCESS A STACK OF IMAGES" echo "" echo "preprocess master image" set line1 = `awk 'NR==1 {print $0}' $1` set master = `echo $line1[1] | awk '{ print substr($1,8,length($1)-7)}'` # # loop over 5 subswath # foreach subswath (1 2 3 4 5) # # unpack the master if necessary # if(! -f IMG-HH-$master-F$subswath.SLC || ! -f IMG-HH-$master-F$subswath.PRM ) then echo "ALOS_pre_process_SLC IMG-HH-$master-F$subswath LED-$master -ALOS2 $commandline" ALOS_pre_process_SLC IMG-HH-$master-F$subswath LED-$master -ALOS2 $commandline endif set RAD = `grep earth_radius IMG-HH-$master-F$subswath.PRM | awk '{print $3}'` set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master-F$subswath.PRM | awk 'NR == 1 {printf("%d", $3)}'` baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$master-F$subswath.PRM >! baseline_table.dat baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$master-F$subswath.PRM GMT >! table.gmt # # loop and unpack the slave image using the same earth radius as the master image # foreach line2 (`awk 'NR>1 {print $0}' $1`) echo "pre_proc_batch.csh" echo "preprocess slave images" set slave = ` echo $line2 | awk '{ print substr($1,8,length($1)-7)}'` if(! -f IMG-HH-$slave-F$subswath.SLC || ! -f IMG-HH-$slave-F$subswath.PRM ) then echo "ALOS_pre_process_SLC IMG-HH-$slave-F$subswath LED-$slave -ALOS2 -radius $RAD -SLC_factor $SLC_factor" ALOS_pre_process_SLC IMG-HH-$slave-F$subswath LED-$slave -ALOS2 -radius $RAD -SLC_factor $SLC_factor endif # # check the range sampling rate of the slave images and do conversion if necessary # set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave-F$subswath.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m # baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$slave-F$subswath.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$slave-F$subswath.PRM GMT >> table.gmt else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-HH-$slave-F$subswath.PRM IMG-HH-$slave-F$subswath"_"FBS.PRM # baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$slave-F$subswath"_"FBS.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master-F$subswath.PRM IMG-HH-$slave-F$subswath"_"FBS.PRM GMT >> table.gmt echo "Overwriting the old slave image" mv IMG-HH-$slave-F$subswath"_"FBS.PRM IMG-HH-$slave-F$subswath.PRM update_PRM IMG-HH-$slave-F$subswath.PRM input_file IMG-HH-$slave-F$subswath.SLC mv IMG-HH-$slave-F$subswath"_"FBS.SLC IMG-HH-$slave-F$subswath.SLC else if ($t == 0.5) then echo "Use FBS mode image as master" exit 1 else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif # end of the loop over slave images end # end of the loop over subswath end # # make baseline plots # awk '{print 2014.5+($1-181)/365.25,$2,$7}' < table.gmt > text # awk '{print 2014.5+($1-181)/365.25,$2,9,$4,$5,$6,$7}' < table.gmt > text set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-500, $4+500}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > stacktable_all.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba1:"year":/a200g00f100:"baseline (m)":WSen -O >> stacktable_all.ps echo "" echo "END PREPROCESS A STACK OF IMAGES" echo "" # # clean up the mess # rm text text2 GMTSAR_V5.7/.svn/pristine/e2/e2c1fe37f13c4db7fd0acda4701890ffaf422258.svn-base000444 015705 000000 00000016124 13505462013 026100 0ustar00sandwellwheel000000 000000 17 17 2.0933767904898495e-01 2.6477823918585797e-01 3.2457309988371241e-01 3.8560095924594417e-01 4.4397553226904352e-01 4.9542203193290119e-01 5.3578055097952493e-01 5.6155709860666592e-01 5.7042197393738581e-01 5.6155709860666592e-01 5.3578055097952493e-01 4.9542203193290119e-01 4.4397553226904352e-01 3.8560095924594417e-01 3.2457309988371241e-01 2.6477823918585797e-01 2.0933767904898495e-01 2.3877503057920269e-01 3.0201171831811829e-01 3.7021501433473469e-01 4.3982469497894550e-01 5.0640798052008740e-01 5.6508895752449972e-01 6.1112274687034396e-01 6.4052402797682184e-01 6.5063549423454303e-01 6.4052402797682184e-01 6.1112274687034396e-01 5.6508895752449972e-01 5.0640798052008740e-01 4.3982469497894550e-01 3.7021501433473469e-01 3.0201171831811829e-01 2.3877503057920269e-01 2.6761567436194961e-01 3.3849045885099371e-01 4.1493174759429097e-01 4.9294929232052326e-01 5.6757489625450064e-01 6.3334370463936573e-01 6.8493772412013243e-01 7.1789026380290033e-01 7.2922305205460392e-01 7.1789026380290033e-01 6.8493772412013243e-01 6.3334370463936573e-01 5.6757489625450064e-01 4.9294929232052326e-01 4.1493174759429097e-01 3.3849045885099371e-01 2.6761567436194961e-01 2.9472387367924102e-01 3.7277793789126790e-01 4.5696236685333025e-01 5.4288271905796148e-01 6.2506754294584732e-01 6.9749841987661654e-01 7.5431866897565736e-01 7.9060914473358690e-01 8.0308989071788695e-01 7.9060914473358690e-01 7.5431866897565736e-01 6.9749841987661654e-01 6.2506754294584732e-01 5.4288271905796148e-01 4.5696236685333025e-01 3.7277793789126790e-01 2.9472387367924102e-01 3.1893355914226024e-01 4.0339926663276843e-01 4.9449890921703471e-01 5.8747707006057448e-01 6.7641285277416030e-01 7.5479346403223080e-01 8.1628113400032309e-01 8.5555264075664061e-01 8.6905860037854576e-01 8.5555264075664061e-01 8.1628113400032309e-01 7.5479346403223080e-01 6.7641285277416030e-01 5.8747707006057448e-01 4.9449890921703471e-01 4.0339926663276843e-01 3.1893355914226024e-01 3.3913003513326356e-01 4.2894453576420832e-01 5.2581306560257957e-01 6.2467907091822328e-01 7.1924671440289467e-01 8.0259077992301009e-01 8.6797215820324447e-01 9.0973053415409766e-01 9.2409175902301177e-01 9.0973053415409766e-01 8.6797215820324447e-01 8.0259077992301009e-01 7.1924671440289467e-01 6.2467907091822328e-01 5.2581306560257957e-01 4.2894453576420832e-01 3.3913003513326356e-01 3.5433448639227083e-01 4.4817570260639489e-01 5.4938720619488068e-01 6.5268573945929131e-01 7.5149319946589610e-01 8.3857388707974656e-01 9.0688655388155914e-01 9.5051711196322997e-01 9.6552220355262852e-01 9.5051711196322997e-01 9.0688655388155914e-01 8.3857388707974656e-01 7.5149319946589610e-01 6.5268573945929131e-01 5.4938720619488068e-01 4.4817570260639489e-01 3.5433448639227083e-01 3.6378243363970464e-01 4.6012582476051994e-01 5.6403602402628417e-01 6.7008890136529042e-01 7.7153095581766928e-01 8.6093355612825651e-01 9.3106770657634486e-01 9.7586162647280494e-01 9.9126681265989003e-01 9.7586162647280494e-01 9.3106770657634486e-01 8.6093355612825651e-01 7.7153095581766928e-01 6.7008890136529042e-01 5.6403602402628417e-01 4.6012582476051994e-01 3.6378243363970464e-01 3.6698740338492564e-01 4.6417959209776560e-01 5.6900525350262943e-01 6.7599247024847409e-01 7.7832824216862639e-01 8.6851849081691013e-01 9.3927053209618572e-01 9.8445909215325389e-01 1.0000000000000000e+00 9.8445909215325389e-01 9.3927053209618572e-01 8.6851849081691013e-01 7.7832824216862639e-01 6.7599247024847409e-01 5.6900525350262943e-01 4.6417959209776560e-01 3.6698740338492564e-01 3.6378243363970464e-01 4.6012582476051994e-01 5.6403602402628417e-01 6.7008890136529042e-01 7.7153095581766928e-01 8.6093355612825651e-01 9.3106770657634486e-01 9.7586162647280494e-01 9.9126681265989003e-01 9.7586162647280494e-01 9.3106770657634486e-01 8.6093355612825651e-01 7.7153095581766928e-01 6.7008890136529042e-01 5.6403602402628417e-01 4.6012582476051994e-01 3.6378243363970464e-01 3.5433448639227083e-01 4.4817570260639489e-01 5.4938720619488068e-01 6.5268573945929131e-01 7.5149319946589610e-01 8.3857388707974656e-01 9.0688655388155914e-01 9.5051711196322997e-01 9.6552220355262852e-01 9.5051711196322997e-01 9.0688655388155914e-01 8.3857388707974656e-01 7.5149319946589610e-01 6.5268573945929131e-01 5.4938720619488068e-01 4.4817570260639489e-01 3.5433448639227083e-01 3.3913003513326356e-01 4.2894453576420832e-01 5.2581306560257957e-01 6.2467907091822328e-01 7.1924671440289467e-01 8.0259077992301009e-01 8.6797215820324447e-01 9.0973053415409766e-01 9.2409175902301177e-01 9.0973053415409766e-01 8.6797215820324447e-01 8.0259077992301009e-01 7.1924671440289467e-01 6.2467907091822328e-01 5.2581306560257957e-01 4.2894453576420832e-01 3.3913003513326356e-01 3.1893355914226024e-01 4.0339926663276843e-01 4.9449890921703471e-01 5.8747707006057448e-01 6.7641285277416030e-01 7.5479346403223080e-01 8.1628113400032309e-01 8.5555264075664061e-01 8.6905860037854576e-01 8.5555264075664061e-01 8.1628113400032309e-01 7.5479346403223080e-01 6.7641285277416030e-01 5.8747707006057448e-01 4.9449890921703471e-01 4.0339926663276843e-01 3.1893355914226024e-01 2.9472387367924102e-01 3.7277793789126790e-01 4.5696236685333025e-01 5.4288271905796148e-01 6.2506754294584732e-01 6.9749841987661654e-01 7.5431866897565736e-01 7.9060914473358690e-01 8.0308989071788695e-01 7.9060914473358690e-01 7.5431866897565736e-01 6.9749841987661654e-01 6.2506754294584732e-01 5.4288271905796148e-01 4.5696236685333025e-01 3.7277793789126790e-01 2.9472387367924102e-01 2.6761567436194961e-01 3.3849045885099371e-01 4.1493174759429097e-01 4.9294929232052326e-01 5.6757489625450064e-01 6.3334370463936573e-01 6.8493772412013243e-01 7.1789026380290033e-01 7.2922305205460392e-01 7.1789026380290033e-01 6.8493772412013243e-01 6.3334370463936573e-01 5.6757489625450064e-01 4.9294929232052326e-01 4.1493174759429097e-01 3.3849045885099371e-01 2.6761567436194961e-01 2.3877503057920269e-01 3.0201171831811829e-01 3.7021501433473469e-01 4.3982469497894550e-01 5.0640798052008740e-01 5.6508895752449972e-01 6.1112274687034396e-01 6.4052402797682184e-01 6.5063549423454303e-01 6.4052402797682184e-01 6.1112274687034396e-01 5.6508895752449972e-01 5.0640798052008740e-01 4.3982469497894550e-01 3.7021501433473469e-01 3.0201171831811829e-01 2.3877503057920269e-01 2.0933767904898495e-01 2.6477823918585797e-01 3.2457309988371241e-01 3.8560095924594417e-01 4.4397553226904352e-01 4.9542203193290119e-01 5.3578055097952493e-01 5.6155709860666592e-01 5.7042197393738581e-01 5.6155709860666592e-01 5.3578055097952493e-01 4.9542203193290119e-01 4.4397553226904352e-01 3.8560095924594417e-01 3.2457309988371241e-01 2.6477823918585797e-01 2.0933767904898495e-01 GMTSAR_V5.7/.svn/pristine/e5/e54b46dfc5c8f7eae57a25374f1794530deb8202.svn-base000444 015705 000000 00000007376 13505462013 025717 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ALOS.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ################ # Satellite # # ALOS or ENVI # ################ SAT = ALOS ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches (usually 1~3) num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 1 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 200m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = .12 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/.svn/pristine/e5/e52d56855830832558eb57c9a2eee69c5969423c.svn-base000444 015705 000000 00000000720 13505462013 025431 0ustar00sandwellwheel000000 000000 #ifndef UPDATE_PRM_H #define UPDATE_PRM_H #include "gmtsar.h" #include void init_lookup_table(); int update_PRM_sub(char *prmfile, char *entry, char *value); int setvalue(struct PRM *prm, char *name, char *value); char *get_PRM_string(char *prmfile, char *valuename); int get_PRM_int(char *prmfile, char *valuename); double get_PRM_double(char *prmfile, char *valuename); char *get_PRM(char *prmfile, char *valuename); #endif /* UPDATE_PRM_H */ GMTSAR_V5.7/.svn/pristine/e5/e50e44aa1d2e47668f1b777ed25ff2483e64bd7a.svn-base000444 015705 000000 00000002722 13505462014 025767 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_expand interpolates a complex array to twice the length by * * zero padding in the wavenumber space * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography) * * Date : 06/21/07 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" void cfft1d_(int *, fcomplex *, int *); void rng_expand(cin, nffti, cout, nffto) int nffti, nffto; fcomplex *cin, *cout; { int i, dir, n2; n2 = nffti / 2; /* do the forward fft */ dir = -1; cfft1d_(&nffti, cin, &dir); /* first zero the output array */ for (i = 0; i < nffto; i++) { cout[i].r = 0.; cout[i].r = 0.; } /* then move the input to the output 1 to 1 and 2 to 4 multiply by 2 because all the zeros were added */ for (i = 0; i < n2; i++) { cout[i].r = 2. * cin[i].r; cout[i].i = 2. * cin[i].i; cout[i + 3 * n2].r = 2. * cin[i + n2].r; cout[i + 3 * n2].i = 2. * cin[i + n2].i; } /* now inverse fft */ dir = 1; cfft1d_(&nffto, cout, &dir); } GMTSAR_V5.7/.svn/pristine/ab/ab84db10cfec0ac328461c5feba71d3f8b6e4020.svn-base000444 015705 000000 00000003301 13505462013 026206 0ustar00sandwellwheel000000 000000 #!/bin/csh -e # $Id$ # # Kurt Feigl 20150807 # # make profile across strike # if ($#argv != 4) then echo "make profile across strike" echo "" echo "" echo "Usage: $0:t longitude_in_degrees latitude_in_degrees strike_in_degrees_CW_fromN step_size_in_degrees" echo "" echo "" echo "" exit 1 endif # longitude of crossing point set maxx = $1 # latitude of crossing point set maxy = $2 # strike in degrees clockwise from north set dir_strike = $3 set dir_cross = `gmt math -Q $dir_strike 90. ADD 360. MOD =` # step size in latitude #set step = `gmt math -Q 1 360 DIV =` set step = $4 # draw a line through the maximum (units will be km) #echo $maxx $maxy #gmt project -G0.1 -C$maxx/$maxy -A90. -Q -L-50/50 >! profile.rsp ##gmt project -G0.1 -C$maxx/$maxy -A$dir_cross -Q -L-50/50 >! profile.rsp # make 5 more lines #set newy = `gmt math -Q 1 360 DIV 2. MUL $maxy EXCH SUB =` set newxy = "$maxx/$maxy" #echo newxy is $newxy \rm -f profile.rsp touch profile.rsp set j = 1 while ( $j <= 50 ) #set newy = `gmt math -Q 1 360 DIV $newy ADD =` # calculate coordinates of a point located 0.1 km along strike set newxy = `gmt project -G0.1 -C$newxy -A$dir_strike -Q -L0/0.1 | awk 'NR==2{print $1"/"$2}'` #echo newxy is $newxy echo '>' >> profile.rsp gmt project -G0.1 -C$newxy -A$dir_cross -Q -L-50/50 >> profile.rsp # calculate coordinates of a point located 1 km along strike set newxy = `gmt project -G0.1 -C$newxy -A$dir_strike -Q -L-0.1/0. | awk 'NR==2{print $1"/"$2}'` #echo newxy is $newxy echo '>' >> profile.rsp gmt project -G0.1 -C$newxy -A$dir_cross -Q -L-50/50 >> profile.rsp @ j++ end echo "created:" \ls -l profile.rsp exit 0 GMTSAR_V5.7/.svn/pristine/ab/ab3aafd67a13cb7e1b3cf721bbdce9ee17fa5e45.svn-base000444 015705 000000 00000007536 13505462013 026536 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ALOS_SLC.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, = sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ################ # Satellite # # ALOS or ENVI # ################ SAT = ALOS ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches (usually 1~3) num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = # SLC scale factor to convert float to int ( 0.01 is good for ALOS1 L1.1) SLC_factor = 1.0 ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 100m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 150 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 2 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = .10 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example format 500/10800/500/27200 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 0 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .10 GMTSAR_V5.7/.svn/pristine/ab/abd6676bd30b456bee04919e0f06520c465e4440.svn-base000444 015705 000000 00000007452 13505462013 025600 0ustar00sandwellwheel000000 000000 /* $Id: do_time_int_xcorr.c 39 2013-04-07 00:49:34Z pwessel $ */ /*-------------------------------------------------------*/ #include "gmtsar.h" #include "xcorr.h" #include /*-------------------------------------------------------------------------------*/ double calc_time_corr(struct xcorr *xc, int ioff, int joff) { int ip, jp; long long a, b; long long gamma_num, gamma_denom1, gamma_denom2; double gamma, gamma_denom; gamma_denom = gamma_num = 0.0; gamma_num = gamma_denom1 = gamma_denom2 = 0; /* calculate normalized correlation */ /* template (b) stays the same */ /* a is master */ for (ip = 0; ip < xc->ny_corr; ip++) { for (jp = 0; jp < xc->nx_corr; jp++) { /* pixel values */ a = xc->i1[(xc->ysearch + ip + ioff) * xc->npx + jp + joff + xc->xsearch]; b = xc->i2[(xc->ysearch + ip) * xc->npx + jp + xc->xsearch]; /* standard correlation */ gamma_num += (a * b); gamma_denom1 += a * a; gamma_denom2 += b * b; } } gamma_denom = sqrt(1.0 * gamma_denom1 * gamma_denom2); if (gamma_denom == 0.0) { if (verbose) fprintf(stderr, "calc_corr: denominator = zero: setting corr to 0 \n"); gamma = 0.0; } else { gamma = 100.0 * fabs(gamma_num / gamma_denom); } if (debug) fprintf(stdout, " corr %6.2lf \n", gamma); return (gamma); } /*-------------------------------------------------------------------------------*/ double calc_time_corr_hat(struct xcorr *xc, int ioff, int joff) { int ip, jp; long long a, b; long long gamma_num, gamma_denom1, gamma_denom2; double gamma_denom; double gamma; gamma_num = gamma_denom1 = gamma_denom2 = 0; gamma_denom = gamma = 0.0; for (ip = 0; ip < xc->ny_corr; ip++) { for (jp = 0; jp < xc->nx_corr; jp++) { /* pixel values */ a = xc->i1[(xc->ysearch + ip + ioff) * xc->npx + jp + joff + xc->xsearch]; b = xc->i2[(xc->ysearch + ip) * xc->npx + jp + xc->xsearch]; /* frequency independent */ gamma_num += ((a * a * b * b)); gamma_denom1 += ((a * a * a * a)); gamma_denom2 += ((b * b * b * b)); } } gamma_denom = sqrtl(1.0 * gamma_denom1 * gamma_denom2); if (gamma_denom == 0.0) { fprintf(stderr, "calc_corr: division by zero \n"); gamma = 0.0; } else { gamma = fabs(gamma_num / gamma_denom); } if (gamma <= 0.5) { gamma = 0.0; } else { gamma = 100.0 * sqrt((gamma * 2.0) - 1.0); } if (debug) fprintf(stdout, " corr %lf \n", gamma); return (gamma); } /*-------------------------------------------------------------------------------*/ void do_time_corr(struct xcorr *xc, int iloc) { int ioff, joff; int ic, jc; float ipeak, jpeak; float max_corr; /* set parameters */ max_corr = -1; ipeak = jpeak = -9999; /* loops to calculate correlation at various offsets */ /* correlation window may not be the same as offset */ /* ioff, joff specifies the offset */ /* ic, jc is offset as non-negative for matrix */ for (ioff = -xc->ysearch; ioff < xc->ysearch; ioff++) { for (joff = -xc->xsearch; joff < xc->xsearch; joff++) { ic = ioff + xc->ysearch; jc = joff + xc->xsearch; /* calculate the correlation for each patch */ /* 0 means standard correlation */ if (xc->corr_flag == 0) xc->corr[ic * xc->nxc + jc] = calc_time_corr(xc, ioff, joff); /* 1 means Gatelli correlation */ if (xc->corr_flag == 1) xc->corr[ic * xc->nxc + jc] = calc_time_corr_hat(xc, ioff, joff); if (fabs(xc->corr[ic * xc->nxc + jc]) > max_corr) { max_corr = (float)fabs(xc->corr[ic * xc->nxc + jc]); jpeak = joff; ipeak = ioff; } } } /* do not do further interpolation in time domain */ if (debug) fprintf(stdout, " (time) jpeak %f xoffset %d \n", jpeak, xc->x_offset); if (debug) fprintf(stdout, " (time) ipeak %f yoffset %d \n", ipeak, xc->y_offset); xc->loc[iloc].xoff = -1 * jpeak; xc->loc[iloc].yoff = -1 * ipeak; xc->loc[iloc].corr = max_corr; } GMTSAR_V5.7/.svn/pristine/ab/aba1ff16e3a529bc518dd1cc0553f47a263f62a7.svn-base000444 015705 000000 00000000632 13505462014 026065 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_slc_tsx CSRCS = make_slc_tsx.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar -I$(TIFF_INC) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC -L$(TIFF_LIB) -ltiff -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/ab/ab6ca53165bee77689f13246f1b0a6847f59ef59.svn-base000444 015705 000000 00000004555 13505462013 025721 0ustar00sandwellwheel000000 000000 # $Id: Makefile 109 2015-01-19 23:01:24Z sandwell $ # # makefile for gmtsar directory (sbas.c not included yet) include ../config.mk INCLUDES = $(GMT_INC) -I./ -I$(TIFF_INC) LIB_C = aastretch.c acpatch.c calc_dop.c conv2d.c do_freq_xcorr.c \ do_time_int_xcorr.c fft_bins.c fft_interpolate_routines.c \ file_stuff.c geoxyz.c get_locations.c get_params.c hermite_c.c \ highres_corr.c interpolate_orbit.c intp_coef.c ldr_orbit.c \ parse_xcorr_input.c plxyz.c polyfit.c print_results.c radopp.c \ read_orb.c read_xcorr_data.c SAT_llt2rat_sub.c \ rmpatch.c rng_cmp.c rng_ref.c set_prm_defaults.c shift.c \ sio_struct.c siocomplex.c spline.c trans_col.c utils.c utils_complex.c \ write_orb.c sbas_utils.c stringutils.c update_PRM_sub.c rng_filter.c \ lib_strfuncs.c LIB_O = $(LIB_C:.c=.o) LIB = libgmtsar.$(LIBEXT) #------------------------------------------------------------------------------- # library #------------------------------------------------------------------------------- $(LIB): $(LIB_O) $(AR) cvur $@ $? $(RANLIB) $@ lib: $(LIB) PROGS_C = bperp.c calc_dop_orb.c conv.c esarp.c offset_topo.c phase2topo.c \ phasediff.c phasefilt.c resamp.c xcorr.c extend_orbit.c update_PRM.c get_PRM.c \ SAT_llt2rat.c SAT_look.c SAT_baseline.c make_gaussian_filter.c sbas.c \ nearest_grid.c fitoffset.c solid_tide.c p_scatter.c split_spectrum.c cut_slc.c \ split_aperture.c phasediff_get_topo_phase.c PROGS_O = $(PROGS_C:.c=.o) PROGS = $(PROGS_C:.c=) #------------------------------------------------------------------------------- # software targets #------------------------------------------------------------------------------- all: $(PROGS) install: all $(INSTALL) -d $(bindir) $(INSTALL) $(PROGS) $(bindir) ls csh/*.csh csh/*.sh > /tmp/t.lis $(INSTALL) `cat /tmp/t.lis` $(bindir) rm -f /tmp/t.lis uninstall: cd $(bindir); rm -f $(PROGS) cd csh; ls *.csh > /tmp/t.lis cd $(bindir); rm -f `cat /tmp/t.lis` rm -f /tmp/t.lis spotless:: clean clean: rm -f *.a *.o *% core tags $(PROGS) #------------------------------------------------------------------------------- # program rules #------------------------------------------------------------------------------- $(PROGS): $(PROGS_O) $(LIB) $(CC) $(LDFLAGS) $@.o $(GMTSAR) $(GMT_LIB) $(LALIBS) $(LIBS) -L$(TIFF_LIB) -ltiff -lm -o $@ GMTSAR_V5.7/.svn/pristine/ab/ab10e93ca93a621523420a67b7f2932769a75748.svn-base000444 015705 000000 00000016116 13505462013 025367 0ustar00sandwellwheel000000 000000 17 17 1.6901331540606609e-01 2.0816079512556979e-01 2.4935220877729622e-01 2.9051179209304512e-01 3.2919298780790557e-01 3.6280532298705126e-01 3.8889556398922293e-01 4.0544186667908066e-01 4.1111229050718745e-01 4.0544186667908066e-01 3.8889556398922293e-01 3.6280532298705126e-01 3.2919298780790557e-01 2.9051179209304512e-01 2.4935220877729622e-01 2.0816079512556979e-01 1.6901331540606609e-01 2.0816079512556979e-01 2.5637575668641222e-01 3.0710807560157544e-01 3.5780119152240508e-01 4.0544186667908055e-01 4.4683961336020983e-01 4.7897297101301678e-01 4.9935178859927615e-01 5.0633561664810056e-01 4.9935178859927615e-01 4.7897297101301678e-01 4.4683961336020983e-01 4.0544186667908055e-01 3.5780119152240508e-01 3.0710807560157544e-01 2.5637575668641222e-01 2.0816079512556979e-01 2.4935220877729622e-01 3.0710807560157544e-01 3.6787944117144233e-01 4.2860384615383690e-01 4.8567178524771237e-01 5.3526142851899028e-01 5.7375342073743274e-01 5.9816485313198164e-01 6.0653065971263342e-01 5.9816485313198164e-01 5.7375342073743274e-01 5.3526142851899028e-01 4.8567178524771237e-01 4.2860384615383690e-01 3.6787944117144233e-01 3.0710807560157544e-01 2.4935220877729622e-01 2.9051179209304512e-01 3.5780119152240508e-01 4.2860384615383690e-01 4.9935178859927615e-01 5.6583970678742268e-01 6.2361491642617306e-01 6.6846062962616570e-01 6.9690156065811215e-01 7.0664827785771622e-01 6.9690156065811215e-01 6.6846062962616570e-01 6.2361491642617306e-01 5.6583970678742268e-01 4.9935178859927615e-01 4.2860384615383690e-01 3.5780119152240508e-01 2.9051179209304512e-01 3.2919298780790557e-01 4.0544186667908055e-01 4.8567178524771237e-01 5.6583970678742268e-01 6.4118038842995462e-01 7.0664827785771633e-01 7.5746512839696645e-01 7.8969292539959679e-01 8.0073740291680806e-01 7.8969292539959679e-01 7.5746512839696645e-01 7.0664827785771633e-01 6.4118038842995462e-01 5.6583970678742268e-01 4.8567178524771237e-01 4.0544186667908055e-01 3.2919298780790557e-01 3.6280532298705126e-01 4.4683961336020983e-01 5.3526142851899028e-01 6.2361491642617306e-01 7.0664827785771633e-01 7.7880078307140488e-01 8.3480630128078936e-01 8.7032472583339060e-01 8.8249690258459546e-01 8.7032472583339060e-01 8.3480630128078936e-01 7.7880078307140488e-01 7.0664827785771633e-01 6.2361491642617306e-01 5.3526142851899028e-01 4.4683961336020983e-01 3.6280532298705126e-01 3.8889556398922293e-01 4.7897297101301678e-01 5.7375342073743274e-01 6.6846062962616570e-01 7.5746512839696645e-01 8.3480630128078936e-01 8.9483931681436979e-01 9.3291196038714741e-01 9.4595946890676541e-01 9.3291196038714741e-01 8.9483931681436979e-01 8.3480630128078936e-01 7.5746512839696645e-01 6.6846062962616570e-01 5.7375342073743274e-01 4.7897297101301678e-01 3.8889556398922293e-01 4.0544186667908066e-01 4.9935178859927615e-01 5.9816485313198164e-01 6.9690156065811215e-01 7.8969292539959679e-01 8.7032472583339060e-01 9.3291196038714741e-01 9.7260447711634834e-01 9.8620711674391626e-01 9.7260447711634834e-01 9.3291196038714741e-01 8.7032472583339060e-01 7.8969292539959679e-01 6.9690156065811215e-01 5.9816485313198164e-01 4.9935178859927615e-01 4.0544186667908066e-01 4.1111229050718745e-01 5.0633561664810056e-01 6.0653065971263342e-01 7.0664827785771622e-01 8.0073740291680806e-01 8.8249690258459546e-01 9.4595946890676541e-01 9.8620711674391626e-01 1.0000000000000000e+00 9.8620711674391626e-01 9.4595946890676541e-01 8.8249690258459546e-01 8.0073740291680806e-01 7.0664827785771622e-01 6.0653065971263342e-01 5.0633561664810056e-01 4.1111229050718745e-01 4.0544186667908066e-01 4.9935178859927615e-01 5.9816485313198164e-01 6.9690156065811215e-01 7.8969292539959679e-01 8.7032472583339060e-01 9.3291196038714741e-01 9.7260447711634834e-01 9.8620711674391626e-01 9.7260447711634834e-01 9.3291196038714741e-01 8.7032472583339060e-01 7.8969292539959679e-01 6.9690156065811215e-01 5.9816485313198164e-01 4.9935178859927615e-01 4.0544186667908066e-01 3.8889556398922293e-01 4.7897297101301678e-01 5.7375342073743274e-01 6.6846062962616570e-01 7.5746512839696645e-01 8.3480630128078936e-01 8.9483931681436979e-01 9.3291196038714741e-01 9.4595946890676541e-01 9.3291196038714741e-01 8.9483931681436979e-01 8.3480630128078936e-01 7.5746512839696645e-01 6.6846062962616570e-01 5.7375342073743274e-01 4.7897297101301678e-01 3.8889556398922293e-01 3.6280532298705126e-01 4.4683961336020983e-01 5.3526142851899028e-01 6.2361491642617306e-01 7.0664827785771633e-01 7.7880078307140488e-01 8.3480630128078936e-01 8.7032472583339060e-01 8.8249690258459546e-01 8.7032472583339060e-01 8.3480630128078936e-01 7.7880078307140488e-01 7.0664827785771633e-01 6.2361491642617306e-01 5.3526142851899028e-01 4.4683961336020983e-01 3.6280532298705126e-01 3.2919298780790557e-01 4.0544186667908055e-01 4.8567178524771237e-01 5.6583970678742268e-01 6.4118038842995462e-01 7.0664827785771633e-01 7.5746512839696645e-01 7.8969292539959679e-01 8.0073740291680806e-01 7.8969292539959679e-01 7.5746512839696645e-01 7.0664827785771633e-01 6.4118038842995462e-01 5.6583970678742268e-01 4.8567178524771237e-01 4.0544186667908055e-01 3.2919298780790557e-01 2.9051179209304512e-01 3.5780119152240508e-01 4.2860384615383690e-01 4.9935178859927615e-01 5.6583970678742268e-01 6.2361491642617306e-01 6.6846062962616570e-01 6.9690156065811215e-01 7.0664827785771622e-01 6.9690156065811215e-01 6.6846062962616570e-01 6.2361491642617306e-01 5.6583970678742268e-01 4.9935178859927615e-01 4.2860384615383690e-01 3.5780119152240508e-01 2.9051179209304512e-01 2.4935220877729622e-01 3.0710807560157544e-01 3.6787944117144233e-01 4.2860384615383690e-01 4.8567178524771237e-01 5.3526142851899028e-01 5.7375342073743274e-01 5.9816485313198164e-01 6.0653065971263342e-01 5.9816485313198164e-01 5.7375342073743274e-01 5.3526142851899028e-01 4.8567178524771237e-01 4.2860384615383690e-01 3.6787944117144233e-01 3.0710807560157544e-01 2.4935220877729622e-01 2.0816079512556979e-01 2.5637575668641222e-01 3.0710807560157544e-01 3.5780119152240508e-01 4.0544186667908055e-01 4.4683961336020983e-01 4.7897297101301678e-01 4.9935178859927615e-01 5.0633561664810056e-01 4.9935178859927615e-01 4.7897297101301678e-01 4.4683961336020983e-01 4.0544186667908055e-01 3.5780119152240508e-01 3.0710807560157544e-01 2.5637575668641222e-01 2.0816079512556979e-01 1.6901331540606609e-01 2.0816079512556979e-01 2.4935220877729622e-01 2.9051179209304512e-01 3.2919298780790557e-01 3.6280532298705126e-01 3.8889556398922293e-01 4.0544186667908066e-01 4.1111229050718745e-01 4.0544186667908066e-01 3.8889556398922293e-01 3.6280532298705126e-01 3.2919298780790557e-01 2.9051179209304512e-01 2.4935220877729622e-01 2.0816079512556979e-01 1.6901331540606609e-01 GMTSAR_V5.7/.svn/pristine/d8/d87f487d4fc3485a436581d5d856f0eea3a7abfb.svn-base000444 015705 000000 00000054652 13505462013 026071 0ustar00sandwellwheel000000 000000 #include "gmtsar.h" #include "orbit.h" #include "update_PRM.h" #include #include #include #include #include #include #include #include struct list { char *string; char *value; struct list *next; }; typedef struct list LIST; typedef enum type { CHAR, INT, DOUBLE } type; typedef struct PRMPRIMITIVE { char *name; char *alias; type etype; int offset; int size; } prmdata; /* Lookup table for types of PRM values */ /* Make sure the number in the define below matches the number of variables that * get initialized in init_lookup_table() */ #define LOOKUPTABLE_SIZE 86 static struct PRMPRIMITIVE lookuptable[LOOKUPTABLE_SIZE]; char *get_PRM_sub(char *szFile, char *szValueName); int findlongest(char *szFile, int func); int m_strcmp(char *szStringA, char *szStringB); /* Hack to allow use of strcmp on NULL strings without segfault */ int m_strcmp(char *szStringA, char *szStringB) { if (szStringA != NULL && szStringB != NULL) return strcmp(szStringA, szStringB); else return -9999; } char *get_PRM_string(char *prmfile, char *valuename) { return get_PRM(prmfile, valuename); } int get_PRM_int(char *prmfile, char *valuename) { int retval = 0; char *value; value = get_PRM(prmfile, valuename); retval = atoi(value); free(value); return retval; } double get_PRM_double(char *prmfile, char *valuename) { double retval = 0.0; char *value; value = get_PRM(prmfile, valuename); retval = atof(value); free(value); return retval; } int update_PRM_sub(char *prmfile, char *entry, char *value) { FILE *prm_file; struct PRM prm; if ((prm_file = fopen(prmfile, "r")) == NULL) { fprintf(stderr, "\n error - could not open file %s \n\n", prmfile); return 1; } else { init_lookup_table(); null_sio_struct(&prm); get_sio_struct(prm_file, &prm); } setvalue(&prm, entry, value); if ((prm_file = fopen(prmfile, "w+")) == NULL) { return 2; } else { put_sio_struct(prm, prm_file); fclose(prm_file); } return 0; } void init_lookup_table() { /* All char variables */ lookuptable[0].name = "input_file"; lookuptable[0].alias = "input_file"; lookuptable[0].etype = CHAR; lookuptable[0].offset = offsetof(struct PRM, input_file); lookuptable[0].size = 256; lookuptable[1].name = "SLC_file"; lookuptable[1].alias = "SLC_file"; lookuptable[1].etype = CHAR; lookuptable[1].offset = offsetof(struct PRM, SLC_file); lookuptable[1].size = 256; lookuptable[2].name = "out_amp_file"; lookuptable[2].alias = "out_amp_file"; lookuptable[2].etype = CHAR; lookuptable[2].offset = offsetof(struct PRM, out_amp_file); lookuptable[2].size = 256; lookuptable[3].name = "out_data_file"; lookuptable[3].alias = "out_data_file"; lookuptable[3].etype = CHAR; lookuptable[3].offset = offsetof(struct PRM, out_data_file); lookuptable[3].size = 256; lookuptable[4].name = "deskew"; lookuptable[4].alias = "deskew"; lookuptable[4].etype = CHAR; lookuptable[4].offset = offsetof(struct PRM, deskew); lookuptable[4].size = 8; lookuptable[5].name = "iqflip"; lookuptable[5].alias = "Flip_iq"; lookuptable[5].etype = CHAR; lookuptable[5].offset = offsetof(struct PRM, iqflip); lookuptable[5].size = 8; lookuptable[6].name = "offset_video"; lookuptable[6].alias = "offset_video"; lookuptable[6].etype = CHAR; lookuptable[6].offset = offsetof(struct PRM, offset_video); lookuptable[6].size = 8; lookuptable[7].name = "srm"; lookuptable[7].alias = "scnd_rng_mig"; lookuptable[7].etype = CHAR; lookuptable[7].offset = offsetof(struct PRM, srm); lookuptable[7].size = 8; lookuptable[8].name = "ref_file"; lookuptable[8].alias = "ref_file"; lookuptable[8].etype = CHAR; lookuptable[8].offset = offsetof(struct PRM, ref_file); lookuptable[8].size = 128; lookuptable[9].name = "led_file"; lookuptable[9].alias = "led_file"; lookuptable[9].etype = CHAR; lookuptable[9].offset = offsetof(struct PRM, led_file); lookuptable[9].size = 128; lookuptable[10].name = "orbdir"; lookuptable[10].alias = "orbdir"; lookuptable[10].etype = CHAR; lookuptable[10].offset = offsetof(struct PRM, orbdir); lookuptable[10].size = 8; lookuptable[11].name = "lookdir"; lookuptable[11].alias = "lookdir"; lookuptable[11].etype = CHAR; lookuptable[11].offset = offsetof(struct PRM, lookdir); lookuptable[11].size = 8; lookuptable[12].name = "dtype"; lookuptable[12].alias = "dtype"; lookuptable[12].etype = CHAR; lookuptable[12].offset = offsetof(struct PRM, dtype); lookuptable[12].size = 8; lookuptable[13].name = "date"; lookuptable[13].alias = "date"; lookuptable[13].etype = CHAR; lookuptable[13].offset = offsetof(struct PRM, date); lookuptable[13].size = 16; /* All int variables */ for (int i = 14; i <= 35; i++) lookuptable[i].size = sizeof(int); lookuptable[14].name = "debug_flag"; lookuptable[14].alias = "debug_flag"; lookuptable[14].etype = INT; lookuptable[14].offset = offsetof(struct PRM, debug_flag); lookuptable[15].name = "bytes_per_line"; lookuptable[15].alias = "bytes_per_line"; lookuptable[15].etype = INT; lookuptable[15].offset = offsetof(struct PRM, bytes_per_line); lookuptable[16].name = "good_bytes"; lookuptable[16].alias = "good_bytes_per_line"; lookuptable[16].etype = INT; lookuptable[16].offset = offsetof(struct PRM, good_bytes); lookuptable[17].name = "first_line"; lookuptable[17].alias = "first_line"; lookuptable[17].etype = INT; lookuptable[17].offset = offsetof(struct PRM, first_line); lookuptable[18].name = "num_patches"; lookuptable[18].alias = "num_patches"; lookuptable[18].etype = INT; lookuptable[18].offset = offsetof(struct PRM, num_patches); lookuptable[19].name = "first_sample"; lookuptable[19].alias = "first_sample"; lookuptable[19].etype = INT; lookuptable[19].offset = offsetof(struct PRM, first_sample); lookuptable[20].name = "num_valid_az"; lookuptable[20].alias = "num_valid_az"; lookuptable[20].etype = INT; lookuptable[20].offset = offsetof(struct PRM, num_valid_az); lookuptable[21].name = "st_rng_bin"; lookuptable[21].alias = "st_rng_bin"; lookuptable[21].etype = INT; lookuptable[21].offset = offsetof(struct PRM, st_rng_bin); lookuptable[22].name = "num_rng_bins"; lookuptable[22].alias = "num_rng_bins"; lookuptable[22].etype = INT; lookuptable[22].offset = offsetof(struct PRM, num_rng_bins); lookuptable[23].name = "chirp_ext"; lookuptable[23].alias = "chirp_ext"; lookuptable[23].etype = INT; lookuptable[23].offset = offsetof(struct PRM, chirp_ext); lookuptable[24].name = "nlooks"; lookuptable[24].alias = "nlooks"; lookuptable[24].etype = INT; lookuptable[24].offset = offsetof(struct PRM, nlooks); lookuptable[25].name = "rshift"; lookuptable[25].alias = "rshift"; lookuptable[25].etype = INT; lookuptable[25].offset = offsetof(struct PRM, rshift); lookuptable[26].name = "ashift"; lookuptable[26].alias = "ashift"; lookuptable[26].etype = INT; lookuptable[26].offset = offsetof(struct PRM, ashift); lookuptable[27].name = "fdc_ystrt"; lookuptable[27].alias = "fdc_ystrt"; lookuptable[27].etype = INT; lookuptable[27].offset = offsetof(struct PRM, fdc_ystrt); lookuptable[28].name = "fdc_strt"; lookuptable[28].alias = "fdc_strt"; lookuptable[28].etype = INT; lookuptable[28].offset = offsetof(struct PRM, fdc_strt); lookuptable[29].name = "rec_start"; lookuptable[29].alias = "rec_start"; lookuptable[29].etype = INT; lookuptable[29].offset = offsetof(struct PRM, rec_start); lookuptable[30].name = "rec_stop"; lookuptable[30].alias = "rec_stop"; lookuptable[30].etype = INT; lookuptable[30].offset = offsetof(struct PRM, rec_stop); lookuptable[31].name = "SC_identity"; lookuptable[31].alias = "SC_identity"; lookuptable[31].etype = INT; lookuptable[31].offset = offsetof(struct PRM, SC_identity); lookuptable[32].name = "ref_identity"; lookuptable[32].alias = "ref_identity"; lookuptable[32].etype = INT; lookuptable[32].offset = offsetof(struct PRM, ref_identity); lookuptable[33].name = "nrows"; lookuptable[33].alias = "nrows"; lookuptable[33].etype = INT; lookuptable[33].offset = offsetof(struct PRM, nrows); lookuptable[34].name = "num_lines"; lookuptable[34].alias = "num_lines"; lookuptable[34].etype = INT; lookuptable[34].offset = offsetof(struct PRM, num_lines); lookuptable[35].name = "SLC_format"; lookuptable[35].alias = "SLC_format"; lookuptable[35].etype = INT; lookuptable[35].offset = offsetof(struct PRM, SLC_format); /* All double variables */ for (int i = 36; i <= 82; i++) lookuptable[i].size = sizeof(double); lookuptable[36].name = "SC_clock_start"; lookuptable[36].alias = "SC_clock_start"; lookuptable[36].etype = DOUBLE; lookuptable[36].offset = offsetof(struct PRM, SC_clock_start); lookuptable[37].name = "SC_clock_stop"; lookuptable[37].alias = "SC_clock_stop"; lookuptable[37].etype = DOUBLE; lookuptable[37].offset = offsetof(struct PRM, SC_clock_stop); lookuptable[38].name = "icu_start"; lookuptable[38].alias = "icu_start"; lookuptable[38].etype = DOUBLE; lookuptable[38].offset = offsetof(struct PRM, icu_start); lookuptable[39].name = "clock_start"; lookuptable[39].alias = "clock_start"; lookuptable[39].etype = DOUBLE; lookuptable[39].offset = offsetof(struct PRM, clock_start); lookuptable[40].name = "clock_stop"; lookuptable[40].alias = "clock_stop"; lookuptable[40].etype = DOUBLE; lookuptable[40].offset = offsetof(struct PRM, clock_stop); lookuptable[41].name = "caltone"; lookuptable[41].alias = "caltone"; lookuptable[41].etype = DOUBLE; lookuptable[41].offset = offsetof(struct PRM, caltone); lookuptable[42].name = "RE"; /*local earth eadius */ lookuptable[42].alias = "earth_radius"; /*local earth eadius */ lookuptable[42].etype = DOUBLE; lookuptable[42].offset = offsetof(struct PRM, RE); lookuptable[43].name = "rc"; /* polar radius */ lookuptable[43].alias = "polar_radius"; /* polar radius */ lookuptable[43].etype = DOUBLE; lookuptable[43].offset = offsetof(struct PRM, rc); lookuptable[44].name = "ra"; /* equatorial radius */ lookuptable[44].alias = "equatorial_radius"; /* equatorial radius */ lookuptable[44].etype = DOUBLE; lookuptable[44].offset = offsetof(struct PRM, ra); lookuptable[45].name = "vel"; /* Equivalent SC velocity */ lookuptable[45].alias = "SC_vel"; /* Equivalent SC velocity */ lookuptable[45].etype = DOUBLE; lookuptable[45].offset = offsetof(struct PRM, vel); lookuptable[46].name = "ht"; /* (SC_radius - RE) center */ lookuptable[46].alias = "SC_height"; /* (SC_radius - RE) center */ lookuptable[46].etype = DOUBLE; lookuptable[46].offset = offsetof(struct PRM, ht); lookuptable[47].name = "ht_start"; /* (SC_radius - RE) start */ lookuptable[47].alias = "SC_height_start"; /* (SC_radius - RE) start */ lookuptable[47].etype = DOUBLE; lookuptable[47].offset = offsetof(struct PRM, ht_start); lookuptable[48].name = "ht_end"; /* (SC_radius - RE) end */ lookuptable[48].alias = "SC_height_end"; /* (SC_radius - RE) end */ lookuptable[48].etype = DOUBLE; lookuptable[48].offset = offsetof(struct PRM, ht_end); lookuptable[49].name = "near_range"; lookuptable[49].alias = "near_range"; lookuptable[49].etype = DOUBLE; lookuptable[49].offset = offsetof(struct PRM, near_range); lookuptable[50].name = "far_range"; lookuptable[50].alias = "far_range"; lookuptable[50].etype = DOUBLE; lookuptable[50].offset = offsetof(struct PRM, far_range); lookuptable[51].name = "prf"; lookuptable[51].alias = "PRF"; lookuptable[51].etype = DOUBLE; lookuptable[51].offset = offsetof(struct PRM, prf); lookuptable[52].name = "xmi"; lookuptable[52].alias = "I_mean"; lookuptable[52].etype = DOUBLE; lookuptable[52].offset = offsetof(struct PRM, xmi); lookuptable[53].name = "xmq"; lookuptable[53].alias = "Q_mean"; lookuptable[53].etype = DOUBLE; lookuptable[53].offset = offsetof(struct PRM, xmq); lookuptable[54].name = "az_res"; lookuptable[54].alias = "az_res"; lookuptable[54].etype = DOUBLE; lookuptable[54].offset = offsetof(struct PRM, az_res); lookuptable[55].name = "fs"; lookuptable[55].alias = "rng_samp_rate"; lookuptable[55].etype = DOUBLE; lookuptable[55].offset = offsetof(struct PRM, fs); lookuptable[56].name = "chirp_slope"; lookuptable[56].alias = "chirp_slope"; lookuptable[56].etype = DOUBLE; lookuptable[56].offset = offsetof(struct PRM, chirp_slope); lookuptable[57].name = "pulsedur"; lookuptable[57].alias = "pulsedur"; lookuptable[57].etype = DOUBLE; lookuptable[57].offset = offsetof(struct PRM, pulsedur); lookuptable[58].name = "lambda"; lookuptable[58].alias = "radar_wavelength"; lookuptable[58].etype = DOUBLE; lookuptable[58].offset = offsetof(struct PRM, lambda); lookuptable[59].name = "rhww"; lookuptable[59].alias = "rng_spec_wgt"; lookuptable[59].etype = DOUBLE; lookuptable[59].offset = offsetof(struct PRM, rhww); lookuptable[60].name = "pctbw"; lookuptable[60].alias = "rm_rng_band"; lookuptable[60].etype = DOUBLE; lookuptable[60].offset = offsetof(struct PRM, pctbw); lookuptable[61].name = "pctbwaz"; lookuptable[61].alias = "rm_az_band"; lookuptable[61].etype = DOUBLE; lookuptable[61].offset = offsetof(struct PRM, pctbwaz); lookuptable[62].name = "fd1"; lookuptable[62].alias = "fd1"; lookuptable[62].etype = DOUBLE; lookuptable[62].offset = offsetof(struct PRM, fd1); lookuptable[63].name = "fdd1"; lookuptable[63].alias = "fdd1"; lookuptable[63].etype = DOUBLE; lookuptable[63].offset = offsetof(struct PRM, fdd1); lookuptable[64].name = "fddd1"; lookuptable[64].alias = "fddd1"; lookuptable[64].etype = DOUBLE; lookuptable[64].offset = offsetof(struct PRM, fddd1); lookuptable[65].name = "delr"; lookuptable[65].alias = "delr"; lookuptable[65].etype = DOUBLE; lookuptable[65].offset = offsetof(struct PRM, delr); lookuptable[66].name = "yaw"; lookuptable[66].alias = "yaw"; lookuptable[66].etype = DOUBLE; lookuptable[66].offset = offsetof(struct PRM, yaw); lookuptable[67].name = "SLC_scale"; lookuptable[67].alias = "SLC_scale"; lookuptable[67].etype = DOUBLE; lookuptable[67].offset = offsetof(struct PRM, SLC_scale); lookuptable[68].name = "sub_int_r"; lookuptable[68].alias = "sub_int_r"; lookuptable[68].etype = DOUBLE; lookuptable[68].offset = offsetof(struct PRM, sub_int_r); lookuptable[69].name = "sub_int_a"; lookuptable[69].alias = "sub_int_a"; lookuptable[69].etype = DOUBLE; lookuptable[69].offset = offsetof(struct PRM, sub_int_a); lookuptable[70].name = "sub_double"; lookuptable[70].alias = "sub_double"; lookuptable[70].etype = DOUBLE; lookuptable[70].offset = offsetof(struct PRM, sub_double); lookuptable[71].name = "stretch_r"; lookuptable[71].alias = "stretch_r"; lookuptable[71].etype = DOUBLE; lookuptable[71].offset = offsetof(struct PRM, stretch_r); lookuptable[72].name = "stretch_a"; lookuptable[72].alias = "stretch_a"; lookuptable[72].etype = DOUBLE; lookuptable[72].offset = offsetof(struct PRM, stretch_a); lookuptable[73].name = "a_stretch_r"; lookuptable[73].alias = "a_stretch_r"; lookuptable[73].etype = DOUBLE; lookuptable[73].offset = offsetof(struct PRM, a_stretch_r); lookuptable[74].name = "a_stretch_a"; lookuptable[74].alias = "a_stretch_a"; lookuptable[74].etype = DOUBLE; lookuptable[74].offset = offsetof(struct PRM, a_stretch_a); lookuptable[75].name = "baseline_start"; lookuptable[75].alias = "baseline_start"; lookuptable[75].etype = DOUBLE; lookuptable[75].offset = offsetof(struct PRM, baseline_start); lookuptable[76].name = "baseline_center"; lookuptable[76].alias = "baseline_center"; lookuptable[76].etype = DOUBLE; lookuptable[76].offset = offsetof(struct PRM, baseline_center); lookuptable[77].name = "baseline_end"; lookuptable[77].alias = "baseline_end"; lookuptable[77].etype = DOUBLE; lookuptable[77].offset = offsetof(struct PRM, baseline_end); lookuptable[78].name = "alpha_start"; lookuptable[78].alias = "alpha_start"; lookuptable[78].etype = DOUBLE; lookuptable[78].offset = offsetof(struct PRM, alpha_start); lookuptable[79].name = "alpha_center"; lookuptable[79].alias = "alpha_center"; lookuptable[79].etype = DOUBLE; lookuptable[79].offset = offsetof(struct PRM, alpha_center); lookuptable[80].name = "alpha_end"; lookuptable[80].alias = "alpha_end"; lookuptable[80].etype = DOUBLE; lookuptable[80].offset = offsetof(struct PRM, alpha_end); lookuptable[81].name = "bpara"; lookuptable[81].alias = "B_parallel"; lookuptable[81].etype = DOUBLE; lookuptable[81].offset = offsetof(struct PRM, bpara); lookuptable[82].name = "bperp"; lookuptable[82].alias = "B_perpendicular"; lookuptable[82].etype = DOUBLE; lookuptable[82].offset = offsetof(struct PRM, bperp); lookuptable[83].name = "B_offset_start"; lookuptable[83].alias = "B_offset_start"; lookuptable[83].etype = DOUBLE; lookuptable[83].offset = offsetof(struct PRM, B_offset_start); lookuptable[84].name = "B_offset_center"; lookuptable[84].alias = "B_offset_center"; lookuptable[84].etype = DOUBLE; lookuptable[84].offset = offsetof(struct PRM, B_offset_center); lookuptable[85].name = "B_offset_end"; lookuptable[85].alias = "B_offset_end"; lookuptable[85].etype = DOUBLE; lookuptable[85].offset = offsetof(struct PRM, B_offset_end); } int setvalue(struct PRM *prm, char *name, char *value) { struct PRMPRIMITIVE valuetype; int n = 0; int intvalue = 0; double doublevalue = 0.0; char *base; char *newbase; for (n = 0; n <= LOOKUPTABLE_SIZE; n++) { if (m_strcmp(lookuptable[n].name, name) == 0 || m_strcmp(lookuptable[n].alias, name) == 0) { valuetype.name = malloc(sizeof(char) * strlen(lookuptable[n].name)); strcpy(valuetype.name, lookuptable[n].name); valuetype.etype = lookuptable[n].etype; valuetype.offset = lookuptable[n].offset; valuetype.size = lookuptable[n].size; break; } } /* Exit with a fatal error if variable isn't found */ if (n == LOOKUPTABLE_SIZE) { printf("Fatal Error:\n"); die("Variable name not found ", name); } /* We are all good and have valid values in valuetype struct */ base = (char *)prm; newbase = (base + valuetype.offset); switch (valuetype.etype) { case CHAR: sprintf(newbase, "%s", value); break; case INT: intvalue = strtol(value, NULL, 10); /* An int cannot be copied with an assignment to the struct member here */ memcpy(newbase, &intvalue, sizeof(int)); break; case DOUBLE: doublevalue = atof(value); /* A double cannot be copied with an assignment to the struct member here */ memcpy(newbase, &doublevalue, sizeof(double)); break; } return 0; } char *get_PRM(char *prmfile, char *valuename) { struct PRMPRIMITIVE valuetype; int n = 0; char *szReturn = NULL; init_lookup_table(); for (n = 0; n < LOOKUPTABLE_SIZE; n++) { if (m_strcmp(lookuptable[n].name, valuename) == 0 || m_strcmp(lookuptable[n].alias, valuename) == 0) { valuetype.name = strdup(lookuptable[n].name); valuetype.etype = lookuptable[n].etype; valuetype.offset = lookuptable[n].offset; valuetype.size = lookuptable[n].size; valuetype.alias = strdup(lookuptable[n].alias); break; } } /* Exit with a fatal error if variable isn't found */ if (n == LOOKUPTABLE_SIZE) { printf("Fatal Error:\n"); die("Variable name not found ", valuename); } /* We are all good and have a valid valuesname */ szReturn = get_PRM_sub(prmfile, valuetype.name); if (szReturn == NULL) szReturn = get_PRM_sub(prmfile, valuetype.alias); free(valuetype.name); free(valuetype.alias); return szReturn; } char *get_PRM_sub(char *szFile, char *szValueName) { FILE *fp; char *line; int maxline = 0; LIST *current, *head; char *valuename; char *value; char *szRetVal = NULL; maxline = (findlongest(szFile, 1) + 1) * sizeof(char); line = (char *)malloc(maxline); valuename = (char *)malloc(maxline); value = (char *)malloc(maxline); head = current = NULL; fp = fopen(szFile, "r"); while (fgets(line, maxline, fp)) { if (strchr(line, '=') != 0 && strchr(line, '#') == 0) { LIST *node = malloc(sizeof(LIST)); char *token = strtok(line, "="); node->string = strdup(trimwhitespace(token)); token = strtok(NULL, "="); node->value = strdup(trimwhitespace(token)); node->next = NULL; if (head == NULL) { current = head = node; } else { current = current->next = node; } } } fclose(fp); for (current = head; current; current = current->next) { if (strcmp(trimwhitespace(szValueName), current->string) == 0) { free(line); free(valuename); free(value); if (strlen(trimwhitespace(current->value))) szRetVal = strdup(trimwhitespace(current->value)); else szRetVal = NULL; } } // need free for each node for (current = head; current; current = current->next) free(current); return szRetVal; } int findlongest(char *szFile, int func) { FILE *file = fopen(szFile, "rb"); if (file == NULL) { fprintf(stderr, "File open failed!\n"); return EXIT_FAILURE; } size_t buffer_size = 8; char *line = (char *)malloc(buffer_size); char *longest = (char *)malloc(buffer_size); size_t longest_on = 0; size_t longest_length = 0; size_t num_lines = 0; if (line == NULL || longest == NULL) { fprintf(stderr, "Memory allocation failed!\n"); return EXIT_FAILURE; } long pos_before = ftell(file); for (num_lines = 1; fgets(line, buffer_size, file); ++num_lines) { long pos_after = ftell(file); size_t line_length = pos_after - pos_before - 1; pos_before = pos_after - 1; while (line_length == buffer_size - 1 && line[line_length - 1] != '\n') { line = (char *)realloc(line, buffer_size * 2); longest = (char *)realloc(longest, buffer_size * 2); if (line == NULL || longest == NULL) { fprintf(stderr, "Memory allocation failed!\n"); return EXIT_FAILURE; } if (fgets(&line[buffer_size - 1], buffer_size + 1, file) == NULL) { fprintf(stderr, "File read failed!\n"); fclose(file); free(line); free(longest); return EXIT_FAILURE; } pos_after = ftell(file); line_length += pos_after - pos_before - 1; pos_before = pos_after - 1; buffer_size *= 2; } if (line_length > longest_length) { char *tmp = longest; longest = line; line = tmp; longest_on = num_lines; longest_length = line_length; } } if (longest_on) { switch (func) { case 1: return longest_length; break; case 2: return longest_on; break; default: return longest_length; } // printf("File had total of %lu lines.\n", num_lines); // printf("Longest line found on line %lu with %lu characters.\n", // longest_on, longest_length); printf("The line was: "); fwrite(longest, 1, // longest_length, stdout); } else { return EXIT_FAILURE; // fprintf(stderr, "The file had no readable lines!\n"); } fclose(file); free(line); free(longest); return EXIT_SUCCESS; } GMTSAR_V5.7/.svn/pristine/d8/d872c92039873b1c61865da1f5550314162deb0b.svn-base000444 015705 000000 00000007041 13505462013 025365 0ustar00sandwellwheel000000 000000 /* $Id: xcorr.h 39 2013-04-07 00:49:34Z pwessel $ */ #ifndef XCORR_H #define XCORR_H #include struct locs { int x; /* x pixel location */ int y; /* y pixel location */ int qflag; /* quality flag 1 = good */ float corr; /* correlation, normalized time domain */ float yoff; /* estimated y offset */ float xoff; /* estimated x offset */ float xfrac; /* estimated x offset (fraction) */ float yfrac; /* estimated y offset (fraction) */ int m1; /* mean value */ int m2; /* mean value */ }; struct xcorr { int format; /* type of input data [0 short complex, 1 real float, 3 real grd] */ int corr_flag; /* type of correlation flag 0 = standard; 1 = Gatelli; 2 = fft */ int offset_flag; /* set offset to zero (ignore prm) */ int interp_flag; /* interpolation flag 1 = yes 0 = no */ int interp_factor; /* interpolation factor (power of 2) */ int nx_corr; /* size of correlation window */ int ny_corr; /* size of correlation window */ int xsearch; /* size of x search offset */ int ysearch; /* size of y search offset */ int m_nx; /* x size of master file */ int m_ny; /* y size of master file */ int s_nx; /* x size of slave file */ int s_ny; /* y size of slave file */ int nxc; /* x size of correlation */ int nyc; /* y size of correlation */ int npx; /* x size of patch */ int npy; /* y size of patch */ int nxl; /* x number of locations */ int nyl; /* y number of locations */ int x_offset; /* intial starting offset in x */ int y_offset; /* intial starting offset in y */ int nlocs; /* number of locations */ int x_inc; /* x distance between locations */ int y_inc; /* y distance between locations */ int ri; /* range interpolation factor (must be power of two) */ short *mask; /* mask file (short integer) */ int *i1; /* data matrix 1 (integer) */ int *i2; /* data matrix 2 (integer) */ int n2x; /* size of interpolation */ int n2y; /* size of interpolation */ struct FCOMPLEX *d1; /* data 1 (amplitude in real, imag = 0)*/ struct FCOMPLEX *d2; /* data 2 (amplitude in real, imag = 0)*/ struct FCOMPLEX *c1; /* subset data patch 1 (complex float) */ struct FCOMPLEX *c2; /* subset data patch 2 (complex float) */ struct FCOMPLEX *c3; /* c1 * c2 (complex float) */ struct FCOMPLEX *ritmp; /* tmp array for range interpoation */ double *corr; /* correlation (real double) */ double astretcha; /* azimuth stretch parameter estimated from (prf2-prf1)/prf1 */ struct FCOMPLEX *md; /* interpolation file */ struct FCOMPLEX *md_exp; /* interpolation file */ struct FCOMPLEX *sd; /* interpolation file */ struct FCOMPLEX *sd_exp; /* interpolation file */ struct FCOMPLEX *cd_exp; /* interpolation file */ double *interp_corr; /* interpolation file */ FILE *data1; /* data file 1 */ FILE *data2; /* data file 2 */ FILE *param; /* input parameters file */ FILE *file; /* output file (offsets) */ char param_name[128]; char data1_name[128]; char data2_name[128]; char filename[128]; struct locs *loc; struct GMT_GRID *D1; struct GMT_GRID *D2; }; #endif /* XCORR_H */ GMTSAR_V5.7/.svn/pristine/d8/d824c45957f16278c4e77257d12fb4ae83611bd5.svn-base000444 015705 000000 00000000476 13505462014 025501 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ers_line_fixer CSRCS = ers_line_fixer.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I./include LIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(LIBS) all: $(PROG) clean: rm -f $(OBJS) tags core *.c.* install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) GMTSAR_V5.7/.svn/pristine/ae/ae9ddf9c393c0c68281be0c98144c59f56c22509.svn-base000444 015705 000000 00000000577 13505462014 025717 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = calc_dop_orb_envi CSRCS = calc_dop_orb_envi.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../../ALOS_preproc/include CLIBS = -L../../ALOS_preproc/lib -L../lib -lENVI -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/ae/ae5fa49d2eb048cc2b061b586cf8e48808b1f237.svn-base000444 015705 000000 00000001146 13505462013 026032 0ustar00sandwellwheel000000 000000 .TH ERS_LINE_FIXER l "08/28/97 \(co JPL" "ers_line_fixer.l 1.0" .SH NAME ers_line_fixer \- fixes missing lines in raw ERS SAR data .SH SYNOPSIS .B ers_line_fixer .I -a -h header -l line -s .I station ifile ofile .SH DESCRIPTION The .B ers_line_fixer fixes missing lines in raw SAR data. .TP 10 .I -a align window sampling times .TP 10 .I -h header length (bytes) .TP 10 .I -l line length in bytes .TP 10 .I -s station - either DPAF/ESRIN, CO, EIC, UK, CCRS, or unknown .TP 10 .I input_file .TP 10 .I output_file .sp .TP 0 .B example: ers_line_fixer -s CCRS input.raw out.fix .SH SEE ALSO .B read_ccrs(l) GMTSAR_V5.7/.svn/pristine/bc/bcbf0cf9b3b4c7c6f1dedfdcbbf867ee6fe60623.svn-base000444 015705 000000 00000025754 13505462013 026650 0ustar00sandwellwheel000000 000000 /* $Id$ */ /************************************************************************ * esarp reads a file of raw radar echos, and an associated parameter * * file and outputs a SAR processed image. It's subroutines * * include range compression, Doppler Centroid frequency * * estimation, range migration, and azimuth compression. This * * processor follows one obtained from Howard Zebker as part of the* * Stanford interferometry package. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History: * * * * Date : May 2003 Hannah Chenh * * - change int *count to int count * * - change (void *) &count to &count in fread * * Date : Oct 2006 Meng Wei * * - add aastrech() * * * ************************************************************************/ /* delete the doppler estimation part */ /* move the doppler units change right after get params */ /* Apr. 24 2006 */ /* delete nrows from declearation, get it from PRM */ /* use SC_identity to enable reading of different data types */ #include "gmtsar.h" #include "soi.h" void print_time(float timer) { int min; float sec; min = (int)timer / 60; sec = timer - ((float)min) * 60.0f; fprintf(stderr, "Processing Elapsed Time: %d min %.2f sec\n", min, sec); } int main(int argc, char *argv[]) { unsigned char *indata; FILE *fph = NULL, *fpq2 = NULL, *fpi = NULL; int ranfft; int n, i, j, k, ipatch, low_ind, hi_ind; long num_to_seek; double delr, rtest, itest, shft, dfact; fcomplex **fdata = NULL, *fft_vec = NULL, *ref = NULL; scomplex *i2data = NULL; int i2test = 1, nclip = 0; int pcount = 24, count = 0; int ineg = 0; void *API = NULL; /* GMT API control structure */ /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; if (argc < 3) { fprintf(stderr, "esarp [GMTSAR] - Produce SAR processed image\n\n"); fprintf(stderr, "\nUsage: %s filein.PRM fileout.SLC [R4]\n\n", argv[0]); exit(-1); } if ((fph = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "Can't open file %s\n", argv[1]); exit(-1); } /* check to see if integer output is desired */ if (argc == 4) { if (argv[3][0] == 'r' || argv[3][0] == 'R') { i2test = 0; } } /* get input parameters */ get_params(fph); fclose(fph); delr = SOL / fs / 2.0; /* if this is ALOS then increase the scale factor by 2 to improve dynamic * range */ if (SC_identity == 5 && xmi1 < 16.) { dfact = 2. * I2SCALE; } else if (SC_identity == 8) { dfact = 2. * I2SCALE; } else { dfact = I2SCALE; } printf("I2SCALE %f \n", dfact); /* change the units of doppler parameters */ radopp(&fd1, &fdd1, &fddd1, near_range, delr); /* compute range parameters */ if (num_rng_bins == 0) num_rng_bins = good_bytes / 2; ranfft = fft_bins(num_rng_bins); near_range = near_range + (st_rng_bin - nextend + xshift - 1) * delr; far_range = near_range + delr * (num_rng_bins - 1); /* Open files. */ if ((fpi = fopen(input_file, "r")) == NULL) { fprintf(stderr, "Can't open file %s\n", input_file); exit(-1); } if ((fpq2 = fopen(argv[2], "w")) == NULL) { fprintf(stderr, "Bad output file pointer.\n"); exit(-1); } /* allocate memory for and seek in data input file */ if ((indata = (unsigned char *)malloc(good_bytes * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } if ((fdata = (fcomplex **)malloc(nrows * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input data.\n"); exit(-1); } for (i = 0; i < nrows; i++) { if ((fdata[i] = (fcomplex *)malloc(num_rng_bins * sizeof(fcomplex))) == NULL) { fprintf(stderr, "sorry, couldn't allocate memory for input data.\n"); exit(-1); } } if (i2test) { if ((i2data = (scomplex *)malloc(num_rng_bins * sizeof(scomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for i2data \n"); exit(-1); } } if ((fft_vec = (fcomplex *)malloc(ranfft * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for ref fnc.\n"); exit(-1); } /* get the fft of the reference function */ if ((ref = (fcomplex *)malloc(ranfft * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for ref fnc.\n"); exit(-1); } fprintf(stderr, "Computing range reference function.\n"); rng_ref(API, ranfft, delr, ref); /* check for negative yshift and set ineg accordingly */ if (yshift < 0) { ineg = yshift; } /* read in data, range compress block, estimate doppler params */ for (ipatch = 1; ipatch <= num_patches; ipatch++) { clock(); /* seek over IMOP file, first_line, data from last patch */ num_to_seek = ((long)((ipatch - 1) * num_valid_az + first_line + 1)) * ((long)bytes_per_line); if ((n = fseek(fpi, num_to_seek, 0)) != 0) { perror(argv[0]); exit(-1); } fprintf(stderr, "Processing patch %d\n", ipatch); print_time((float)clock() / CLOCKS_PER_SEC); fprintf(stderr, "Range Compression\n"); if (ineg >= 0) if ((n = fseek(fpi, ((long)(bytes_per_line) * ((long)yshift)), 1)) != 0) { perror(argv[0]); exit(-1); } for (k = 0; k < nrows; k++) { if (ineg >= 0) { /* this code reads the number of good data from the header */ if (SC_identity == 1 || SC_identity == 2 || SC_identity == 5) { if ((n = fseek(fpi, (long)(pcount), 1)) != 0) { perror(argv[0]); exit(-1); } fread(&count, 4 * sizeof(char), 1, fpi); if ((n = fseek(fpi, (long)(first_sample * 2 - pcount - 4), 1)) != 0) { perror(argv[0]); exit(-1); } } /* this code actually reads the data including trailing bytes that may * be bad */ fread((void *)indata, 2 * sizeof(unsigned char), good_bytes / 2, fpi); fseek(fpi, (long)(bytes_per_line - (first_sample * 2 + good_bytes)), 1); /* if the count is bad then use the good_bytes. TXP. */ if (count == 0) count = good_bytes / 2; /* now fill the row with good data or zero depending on the SC_identity */ for (i = 0; i < ranfft; i++) { if (i < num_rng_bins) { /* ERS-1 and ERS-2 */ if (SC_identity == 1 || SC_identity == 2) { if (i < good_bytes / 2 - first_sample) { if ((((int)indata[2 * i]) != 35) && (((int)indata[2 * i + 1]) != 35) && (i < (int)count)) { fft_vec[i].r = (float)(indata[2 * i] - xmi1); fft_vec[i].i = (float)(indata[2 * i + 1] - xmq1); } else { fft_vec[i].r = 0.0f; fft_vec[i].i = 0.0f; } } else { fft_vec[i].r = 0.0f; fft_vec[i].i = 0.0f; } } /* ENVISAT and ALOS - the number 35 is not used */ else if (SC_identity == 4 || SC_identity == 5 || SC_identity == 8) { if (i < good_bytes / 2 - first_sample) { fft_vec[i].r = (float)(indata[2 * i] - xmi1); fft_vec[i].i = (float)(indata[2 * i + 1] - xmq1); } else { fft_vec[i].r = 0.0f; fft_vec[i].i = 0.0f; } } /* other data formats */ else { fft_vec[i].r = (float)(indata[2 * i] - xmi1); fft_vec[i].i = (float)(indata[2 * i + 1] - xmq1); } } else { fft_vec[i].r = 0.0f; fft_vec[i].i = 0.0f; } } } /* use zero lines for a negative yshift */ else { for (i = 0; i < ranfft; i++) { fft_vec[i].r = 0.0f; fft_vec[i].i = 0.0f; } ineg = ineg + 1; } /* range compress line of data */ rng_cmp(API, ranfft, fft_vec, ref); if (xshift >= 0) { for (i = xshift; i < num_rng_bins + xshift; i++) { fdata[k][i - xshift] = fft_vec[i]; } } else { for (i = 0; i < num_rng_bins; i++) { if (i < (-1 * xshift)) { fdata[k][i].r = 0.0f; fdata[k][i].i = 0.0f; } else { fdata[k][i] = fft_vec[i + xshift]; } } } } /* transform columns */ print_time((float)clock() / CLOCKS_PER_SEC); fprintf(stderr, "Azimuthal Transform\n"); trans_col(API, num_rng_bins, nrows, fdata); /* range migrate patch */ print_time((float)clock() / CLOCKS_PER_SEC); fprintf(stderr, "Range Migration\n"); rmpatch(fdata, nrows, delr, fd1, fdd1, fddd1); /*azimuth compress patch */ print_time((float)clock() / CLOCKS_PER_SEC); fprintf(stderr, "Azimuthal Compression\n"); acpatch(API, fdata, nrows, delr, fd1, fdd1, fddd1); print_time((float)clock() / CLOCKS_PER_SEC); /*apply a azimuth-dependent azimuth shift if a_stretch_a !=0 */ if (a_stretch_a != 0) { fprintf(stderr, "apply azimuth-dependent azimuth shift \n"); aastretch(fdata, ipatch, nrows, num_valid_az, num_rng_bins, a_stretch_a); print_time((float)clock() / CLOCKS_PER_SEC); } fprintf(stderr, "Writing Data\n"); low_ind = (nrows - num_valid_az) / 2; hi_ind = (nrows + num_valid_az) / 2; for (i = low_ind; i < hi_ind; i += nlooks) { /* move the data from the 2-D array into a vector to prepare for shift and * output */ for (j = 0; j < num_rng_bins; j++) { fft_vec[j].r = fdata[i][j].r; fft_vec[j].i = fdata[i][j].i; } /* apply a azimuth-dependent range shift if a_stretch_r != 0 */ if (a_stretch_r != 0.0) { for (j = num_rng_bins; j < ranfft; j++) { fft_vec[j].r = 0.0f; fft_vec[j].i = 0.0f; } shft = -a_stretch_r * (i - low_ind + num_valid_az * (ipatch - 1)); shift(API, ranfft, fft_vec, shft); } /*write data as complex float or complex I2 */ if (i2test) { for (j = 0; j < num_rng_bins; j++) { rtest = dfact * fft_vec[j].r; itest = dfact * fft_vec[j].i; i2data[j].r = (short)clipi2(rtest); i2data[j].i = (short)clipi2(itest); if ((int)(rtest) > I2MAX || (int)(itest) > I2MAX) { nclip++; } } if ((n = (int)fwrite((void *)i2data, 2 * sizeof(short), num_rng_bins, fpq2)) != num_rng_bins) { fprintf(stderr, "Problem writing integer data.\n"); } } else { if ((n = (int)fwrite((void *)fft_vec, 2 * sizeof(float), num_rng_bins, fpq2)) != num_rng_bins) { fprintf(stderr, "Problem writing float data.\n"); } } } } print_time((float)clock() / CLOCKS_PER_SEC); fclose(fpq2); /* close input file */ fclose(fpi); free((char *)ref); free((char **)fdata); free((unsigned char *)indata); free((char *)fft_vec); if (i2test) { free((char *)i2data); fprintf(stderr, "number of points clipped to short int %d \n", nclip); } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/d1/d1283300ef070eb148a1ee14828350d8485506f7.svn-base000444 015705 000000 00000001644 13505462013 025302 0ustar00sandwellwheel000000 000000 % % matlab script to design a differentiating filter for phase_grad % clear clg sig2=2.*8.*8.; xg=8.*(-2:2); g = exp(-(xg.*xg)/sig2); g = g/sum(g); n = 16; x = 8*(-8:8); f = [0.0002,.5,.75,1.]; w = 1./f; m = [0.0002,pi/2.,pi/4.,.0]; b = remez(n,f,m,'derivative'); bg=conv(b,g); fd=zeros(1,17); fd(1,9)=-1.; fd(1,10)=1.; fg=conv(fd,g); subplot(2,1,1),plot(x,b,x,b,'o',xg,g,'--',xg,g,'o',x,fd,':',x,fd,'o'),xlabel('lag (m)'),ylabel('impulse response'),title('range') axis([-64,64,-1,1]),grid [hp,wp]=freqz(b,1,2048); [hp2,wp2]=freqz(bg,1,2048); [hf2,wp2]=freqz(fg,1,2048); [hfd,wp]=freqz(fd,1,2048); nk=length(wp); k=(1:nk)/(16*nk); dir=8.*2.*pi*k; subplot(2,1,2),plot(k,abs(hp),k,abs(hp2),'--',k,dir,k,abs(hfd),':',k,abs(hf2),'-.') axis([.001,.0625,.02,1.8]) xlabel('wavenumber (1/m)') ylabel('gain') pause GMTSAR_V5.7/.svn/pristine/d1/d18685f0ab8ac782e1182bfbd9223b0390b03d7c.svn-base000444 015705 000000 00000001455 13505462014 025656 0ustar00sandwellwheel000000 000000 ### makefile for bert to create a lib of object code #%// BK 13-Jun-2003 #%// MA 24-Dec-2008 -m32 switch for 64-bit machines #%// MA 05-Jan-2010 64-bit native with new epr_api_2.2 include ../../../../../config.mk SRC = epr_api.c \ epr_band.c \ epr_bitmask.c \ epr_core.c \ epr_dataset.c \ epr_dddb.c \ epr_dsd.c \ epr_dump.c \ epr_field.c \ epr_msph.c \ epr_param.c \ epr_product.c \ epr_ptrarray.c \ epr_record.c \ epr_string.c \ epr_swap.c \ epr_typconv.c OBJ = $(SRC:.c=.o) #CC = gcc #CFLAGS = -O3 #CFLAGS = -m32 # for 64-bit systems, if epr_api version < 2.2 CFLAGS = -w #CFLAGS = -fPIC -ansi -c .c.o: $(CC) $(CFLAGS) -c -o $(@) $< default: $(OBJ) echo "objects created done" # ar ... clean: rm -f *.o @echo "removed all object files" GMTSAR_V5.7/.svn/pristine/d1/d1bc1fe79e541a2aac4fcd44f636e4f7d65e2aba.svn-base000444 015705 000000 00000042065 13505462013 026324 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu main source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* global (external) variable definitions */ /* flags used for signal handling */ char dumpresults_global; char requestedstop_global; /* ouput stream pointers */ /* sp0=error messages, sp1=status output, sp2=verbose, sp3=verbose counter */ FILE *sp0, *sp1, *sp2, *sp3; /* node pointer for marking arc not on tree in apex array */ /* this should be treated as a constant */ nodeT NONTREEARC[1]; /* pointers to functions which calculate arc costs */ void (*CalcCost)(); long (*EvalCost)(); /* pointers to functions for tailoring network solver to specific topologies */ nodeT *(*NeighborNode)(); void (*GetArc)(); /***************************/ /* main program for snaphu */ /***************************/ int main(int argc, char **argv){ /* variable declarations */ infileT infiles[1]; outfileT outfiles[1]; paramT params[1]; time_t tstart; double cputimestart; long linelen, nlines; /* get current wall clock and CPU time */ StartTimers(&tstart,&cputimestart); /* set output stream pointers (may be reset after inputs parsed) */ SetStreamPointers(); /* print greeting */ fprintf(sp1,"\n%s v%s\n",PROGRAMNAME,VERSION); /* set default parameters */ SetDefaults(infiles,outfiles,params); ReadConfigFile(DEF_SYSCONFFILE,infiles,outfiles,&linelen,params); /* parse the command line inputs */ ProcessArgs(argc,argv,infiles,outfiles,&linelen,params); /* set verbose output if specified */ SetVerboseOut(params); /* set names of dump files if necessary */ SetDumpAll(outfiles,params); /* get number of lines in file */ nlines=GetNLines(infiles,linelen); /* check validity of parameters */ CheckParams(infiles,outfiles,linelen,nlines,params); /* log the runtime parameters */ WriteConfigLogFile(argc,argv,infiles,outfiles,linelen,params); /* unwrap, forming tiles and reassembling if necessary */ Unwrap(infiles,outfiles,params,linelen,nlines); /* finish up */ fprintf(sp1,"Program %s done\n",PROGRAMNAME); DisplayElapsedTime(tstart,cputimestart); exit(NORMAL_EXIT); } /* end of main() */ /* function: Unwrap() * ------------------ * Sets parameters for each tile and calls UnwrapTile() to do the * unwrapping. */ void Unwrap(infileT *infiles, outfileT *outfiles, paramT *params, long linelen, long nlines){ long nexttilerow, nexttilecol, ntilerow, ntilecol, nthreads, nchildren; long sleepinterval; tileparamT tileparams[1]; outfileT tileoutfiles[1]; pid_t pid; int childstatus; double tilecputimestart; time_t tiletstart; /* set up */ ntilerow=params->ntilerow; ntilecol=params->ntilecol; nthreads=params->nthreads; dumpresults_global=FALSE; requestedstop_global=FALSE; /* do the unwrapping */ if(ntilerow==1 && ntilecol==1){ /* only single tile */ /* do the unwrapping */ tileparams->firstrow=params->piecefirstrow; tileparams->firstcol=params->piecefirstcol; tileparams->nrow=params->piecenrow; tileparams->ncol=params->piecencol; UnwrapTile(infiles,outfiles,params,tileparams,nlines,linelen); }else{ /* don't unwrap if in assemble-only mode */ if(!params->assembleonly){ /* make a temporary directory into which tile files will be written */ MakeTileDir(params,outfiles); /* different code for parallel or nonparallel operation */ if(nthreads>1){ /* parallel code */ /* initialize */ nexttilerow=0; nexttilecol=0; nchildren=0; sleepinterval=LRound(nlines*linelen/ntilerow/ntilecol*SECONDSPERPIXEL); /* trap signals so children get killed if parent dies */ CatchSignals(KillChildrenExit); /* loop until we're done unwrapping */ while(TRUE){ /* unwrap next tile if there are free processors and tiles left */ if(nchildren1 */ } /* end if !params->assembleonly */ /* reassemble tiles */ AssembleTiles(outfiles,params,nlines,linelen); } /* end if multiple tiles */ } /* end of Unwrap() */ /* function: UnwrapTile() * ---------------------- * This is the main phase unwrapping function for a single tile. */ void UnwrapTile(infileT *infiles, outfileT *outfiles, paramT *params, tileparamT *tileparams, long nlines, long linelen){ /* variable declarations */ long nrow, ncol, nnoderow, narcrow, n, ngroundarcs, iincrcostfile; long nflow, ncycle, mostflow, nflowdone; long candidatelistsize, candidatebagsize; short *nnodesperrow, *narcsperrow; short **flows, **mstcosts; float **wrappedphase, **unwrappedphase, **mag, **unwrappedest; incrcostT **incrcosts; void **costs; totalcostT totalcost, oldtotalcost; nodeT *source, ***apexes; nodeT **nodes, ground[1]; candidateT *candidatebag, *candidatelist; signed char **iscandidate; signed char notfirstloop; bucketT *bkts; /* get size of tile */ nrow=tileparams->nrow; ncol=tileparams->ncol; /* read input file (memory allocated by read function) */ ReadInputFile(infiles,&mag,&wrappedphase,&flows,linelen,nlines, params,tileparams); /* read interferogram magnitude if specified separately */ ReadMagnitude(mag,infiles,linelen,nlines,tileparams); /* read the coarse unwrapped estimate, if provided */ unwrappedest=NULL; if(strlen(infiles->estfile)){ ReadUnwrappedEstimateFile(&unwrappedest,infiles,linelen,nlines, params,tileparams); /* subtract the estimate from the wrapped phase (and re-wrap) */ FlattenWrappedPhase(wrappedphase,unwrappedest,nrow,ncol); } /* build the cost arrays */ BuildCostArrays(&costs,&mstcosts,mag,wrappedphase,unwrappedest, linelen,nlines,nrow,ncol,params,tileparams,infiles,outfiles); /* if in quantify-only mode, evaluate cost of unwrapped input then return */ if(params->eval){ mostflow=Short2DRowColAbsMax(flows,nrow,ncol); fprintf(sp1,"Maximum flow on network: %ld\n",mostflow); totalcost=EvaluateTotalCost(costs,flows,nrow,ncol,NULL,params); fprintf(sp1,"Total solution cost: %.9g\n",(double )totalcost); Free2DArray((void **)costs,2*nrow-1); Free2DArray((void **)mag,nrow); Free2DArray((void **)wrappedphase,nrow); Free2DArray((void **)flows,2*nrow-1); return; } /* set network function pointers for grid network */ NeighborNode=NeighborNodeGrid; GetArc=GetArcGrid; /* initialize the flows (find simple unwrapping to get a feasible flow) */ unwrappedphase=NULL; nodes=NULL; if(!params->unwrapped){ /* see which initialization method to use */ if(params->initmethod==MSTINIT){ /* use minimum spanning tree (MST) algorithm */ MSTInitFlows(wrappedphase,&flows,mstcosts,nrow,ncol, &nodes,ground,params->initmaxflow); }else if(params->initmethod==MCFINIT){ /* use minimum cost flow (MCF) algorithm */ MCFInitFlows(wrappedphase,&flows,mstcosts,nrow,ncol, params->cs2scalefactor); }else{ fprintf(sp0,"Illegal initialization method\nAbort\n"); exit(ABNORMAL_EXIT); } /* integrate the phase and write out if necessary */ if(params->initonly || strlen(outfiles->initfile)){ fprintf(sp1,"Integrating phase\n"); unwrappedphase=(float **)Get2DMem(nrow,ncol, sizeof(float *),sizeof(float)); IntegratePhase(wrappedphase,unwrappedphase,flows,nrow,ncol); if(unwrappedest!=NULL){ Add2DFloatArrays(unwrappedphase,unwrappedest,nrow,ncol); } FlipPhaseArraySign(unwrappedphase,params,nrow,ncol); /* return if called in init only; otherwise, free memory and continue */ if(params->initonly){ fprintf(sp1,"Writing output to file %s\n",outfiles->outfile); WriteOutputFile(mag,unwrappedphase,outfiles->outfile,outfiles, nrow,ncol); Free2DArray((void **)mag,nrow); Free2DArray((void **)wrappedphase,nrow); Free2DArray((void **)unwrappedphase,nrow); if(nodes!=NULL){ Free2DArray((void **)nodes,nrow-1); } Free2DArray((void **)flows,2*nrow-1); return; }else{ fprintf(sp2,"Writing initialization to file %s\n",outfiles->initfile); WriteOutputFile(mag,unwrappedphase,outfiles->initfile,outfiles, nrow,ncol); Free2DArray((void **)unwrappedphase,nrow); } } } /* initialize network variables */ InitNetwork(flows,&ngroundarcs,&ncycle,&nflowdone,&mostflow,&nflow, &candidatebagsize,&candidatebag,&candidatelistsize, &candidatelist,&iscandidate,&apexes,&bkts,&iincrcostfile, &incrcosts,&nodes,ground,&nnoderow,&nnodesperrow,&narcrow, &narcsperrow,nrow,ncol,¬firstloop,&totalcost,params); /* regrow regions with -G parameter */ if(params->regrowconncomps){ /* free up some memory */ Free2DArray((void **)apexes,2*nrow-1); Free2DArray((void **)iscandidate,2*nrow-1); Free2DArray((void **)nodes,nrow-1); free(candidatebag); free(candidatelist); free(bkts->bucketbase); /* grow connected components */ GrowConnCompsMask(costs,flows,nrow,ncol,incrcosts,outfiles,params); /* free up remaining memory and return */ Free2DArray((void **)incrcosts,2*nrow-1); Free2DArray((void **)costs,2*nrow-1); Free2DArray((void **)mag,nrow); Free2DArray((void **)wrappedphase,nrow); Free2DArray((void **)flows,2*nrow-1); free(nnodesperrow); free(narcsperrow); return; } /* if we have a single tile, trap signals for dumping results */ if(params->ntilerow==1 && params->ntilecol==1){ signal(SIGINT,SetDump); signal(SIGHUP,SetDump); } /* main loop: loop over flow increments and sources */ fprintf(sp1,"Running nonlinear network flow optimizer\n"); fprintf(sp1,"Maximum flow on network: %ld\n",mostflow); fprintf(sp2,"Number of nodes in network: %ld\n",(nrow-1)*(ncol-1)+1); while(TRUE){ fprintf(sp1,"Flow increment: %ld (Total improvements: %ld)\n", nflow,ncycle); /* set up the incremental (residual) cost arrays */ SetupIncrFlowCosts(costs,incrcosts,flows,nflow,nrow,narcrow,narcsperrow, params); if(params->dumpall && params->ntilerow==1 && params->ntilecol==1){ DumpIncrCostFiles(incrcosts,++iincrcostfile,nflow,nrow,ncol); } /* set the tree root (equivalent to source of shortest path problem) */ source=SelectSource(nodes,ground,nflow,flows,ngroundarcs, nrow,ncol,params); /* run the solver, and increment nflowdone if no cycles are found */ n=TreeSolve(nodes,NULL,ground,source,&candidatelist,&candidatebag, &candidatelistsize,&candidatebagsize, bkts,flows,costs,incrcosts,apexes,iscandidate, ngroundarcs,nflow,mag,wrappedphase,outfiles->outfile, nnoderow,nnodesperrow,narcrow,narcsperrow,nrow,ncol, outfiles,params); /* evaluate and save the total cost (skip if first loop through nflow) */ if(notfirstloop){ oldtotalcost=totalcost; totalcost=EvaluateTotalCost(costs,flows,nrow,ncol,NULL,params); if(totalcost>oldtotalcost || (n>0 && totalcost==oldtotalcost)){ fprintf(sp0,"Unexpected increase in total cost. Breaking loop\n"); break; } } /* consider this flow increment done if not too many neg cycles found */ ncycle+=n; if(n<=params->maxnflowcycles){ nflowdone++; }else{ nflowdone=1; } /* find maximum flow on network */ mostflow=Short2DRowColAbsMax(flows,nrow,ncol); /* break if we're done with all flow increments or problem is convex */ if(nflowdone>=params->maxflow || nflowdone>=mostflow || params->p>=1.0){ break; } /* update flow increment */ nflow++; if(nflow>params->maxflow || nflow>mostflow){ nflow=1; notfirstloop=TRUE; } fprintf(sp2,"Maximum flow on network: %ld\n",mostflow); /* dump flow arrays if necessary */ if(strlen(outfiles->flowfile)){ FlipFlowArraySign(flows,params,nrow,ncol); Write2DRowColArray((void **)flows,outfiles->flowfile,nrow,ncol, sizeof(short)); FlipFlowArraySign(flows,params,nrow,ncol); } } /* end loop until no more neg cycles */ /* if we have single tile, return signal handlers to default behavior */ if(params->ntilerow==1 && params->ntilecol==1){ signal(SIGINT,SIG_DFL); signal(SIGHUP,SIG_DFL); } /* free some memory */ Free2DArray((void **)apexes,2*nrow-1); Free2DArray((void **)iscandidate,2*nrow-1); Free2DArray((void **)nodes,nrow-1); free(candidatebag); free(candidatelist); free(bkts->bucketbase); /* grow connected component mask */ if(strlen(outfiles->conncompfile)){ GrowConnCompsMask(costs,flows,nrow,ncol,incrcosts,outfiles,params); } /* grow regions for tiling */ if(params->ntilerow!=1 || params->ntilecol!=1){ GrowRegions(costs,flows,nrow,ncol,incrcosts,outfiles,params); } /* free some more memory */ Free2DArray((void **)incrcosts,2*nrow-1); /* evaluate and display the maximum flow and total cost */ totalcost=EvaluateTotalCost(costs,flows,nrow,ncol,NULL,params); fprintf(sp1,"Maximum flow on network: %ld\n",mostflow); fprintf(sp1,"Total solution cost: %.9g\n",(double )totalcost); /* integrate the wrapped phase using the solution flow */ fprintf(sp1,"Integrating phase\n"); unwrappedphase=(float **)Get2DMem(nrow,ncol,sizeof(float *),sizeof(float)); IntegratePhase(wrappedphase,unwrappedphase,flows,nrow,ncol); /* reinsert the coarse estimate, if it was given */ if(unwrappedest!=NULL){ Add2DFloatArrays(unwrappedphase,unwrappedest,nrow,ncol); } /* flip the sign of the unwrapped phase array if it was flipped initially, */ FlipPhaseArraySign(unwrappedphase,params,nrow,ncol); /* write the unwrapped output */ fprintf(sp1,"Writing output to file %s\n",outfiles->outfile); WriteOutputFile(mag,unwrappedphase,outfiles->outfile,outfiles, nrow,ncol); /* free remaining memory and return */ Free2DArray((void **)costs,2*nrow-1); Free2DArray((void **)mag,nrow); Free2DArray((void **)wrappedphase,nrow); Free2DArray((void **)unwrappedphase,nrow); Free2DArray((void **)flows,2*nrow-1); free(nnodesperrow); free(narcsperrow); return; } /* end of UnwrapTile() */ GMTSAR_V5.7/.svn/pristine/bd/bd6d85e77db6d3d7705f5bc1b7d7fc525f26276d.svn-base000444 015705 000000 00000074336 13505462014 026146 0ustar00sandwellwheel000000 000000 #define SARLEADER_DSS_WCS \ "*********** DSS RECORD ***********\n" \ "dss_rec_seq_num ==> %.4s\n" \ "chan_ind ==> %.4s\n" \ "reserved1 ==> %.16s\n" \ "scene_number ==> %.32s\n" \ "input_scene_center_time ==> %.32s\n" \ "spare1 ==> %.16s\n" \ "center_lat ==> %.16s\n" \ "center_long ==> %.16s\n" \ "center_heading ==> %.16s\n" \ "ellipsoid_designator ==> %.16s\n" \ "ellipsoid_semimajor_axis ==> %.16s\n" \ "ellipsoid_semiminor_axis ==> %.16s\n" \ "earth_constant ==> %.16s\n" \ "spare2 ==> %.16s\n" \ "ellipsoid_j2 ==> %.16s\n" \ "ellipsoid_j3 ==> %.16s\n" \ "ellipsoid_j4 ==> %.16s\n" \ "spare ==> %.16s\n" \ "reserved_new ==> %.16s\n" \ "scene_centre_line_number ==> %.8s\n" \ "scene_centre_pixel_number ==> %.8s\n" \ "scene_length ==> %.16s\n" \ "scene_width ==> %.16s\n" \ "spare3 ==> %.16s\n" \ "nchan ==> %.4s\n" \ "spare4 ==> %.4s\n" \ "mission_identifier ==> %.16s\n" \ "sensor_id_and_mode ==> %.32s\n" \ "orbit_number ==> %.8s\n" \ "lat_nadir_center ==> %.8s\n" \ "long_nadir_center ==> %.8s\n" \ "heading_nadir_center ==> %.8s\n" \ "clock_angel ==> %.8s\n" \ "incidence_angle_center ==> %.8s\n" \ "radar_freq ==> %.8s\n" \ "radar_wavelength ==> %.16s\n" \ "motion_compensation ==> %.2s\n" \ "range_pulse_code_specifier ==> %.16s\n" \ "range_pulse_amplitude_const ==> %.16s\n" \ "range_pulse_amplitude_lin ==> %.16s\n" \ "range_pulse_amplitude_quad ==> %.16s\n" \ "range_pulse_amplitude_cube ==> %.16s\n" \ "range_pulse_amplitude_quart ==> %.16s\n" \ "range_pulse_phase_const ==> %.16s\n" \ "range_pulse_phase_lin ==> %.16s\n" \ "range_pulse_phase_quad ==> %.16s\n" \ "range_pulse_phase_cube ==> %.16s\n" \ "range_pulse_phase_quart ==> %.16s\n" \ "chirp_extraction_index ==> %.8s\n" \ "spare5 ==> %.8s\n" \ "sampling ==> %.16s\n" \ "range_gate_early_edge_start_image ==> %.16s\n" \ "range_pulse_length ==> %.16s\n" \ "reserved2 ==> %.4s\n" \ "range_compressed_flag ==> %.4s\n" \ "reserved3 ==> %.32s\n" \ "quantisation_in_bits ==> %.8s\n" \ "quantizer_descriptor ==> %.12s\n" \ "dc_bias_i ==> %.16s\n" \ "dc_bias_q ==> %.16s\n" \ "gain_imbalance ==> %.16s\n" \ "spare6 ==> %.32s\n" \ "reserved4 ==> %.16s\n" \ "antenna_mech_bor ==> %.16s\n" \ "reserved5 ==> %.4s\n" \ "nominal_prf ==> %.16s\n" \ "reserved6 ==> %.32s\n" \ "satelite_encoded_binary_time ==> %.16s\n" \ "satelite_clock_time ==> %.32s\n" \ "satelite_clock_increment ==> %.8s\n" \ "spare7 ==> %.8s\n" \ "processing_facility_identifier ==> %.16s\n" \ "processing_system_id ==> %.8s\n" \ "processing_version_id ==> %.8s\n" \ "reserved7 ==> %.32s\n" \ "product_type_id ==> %.32s\n" \ "alg_id ==> %.32s\n" \ "nlooks_az ==> %.16s\n" \ "neff_looks_range ==> %.16s\n" \ "bandwidth_look_az ==> %.16s\n" \ "bandwidth_look_range ==> %.16s\n" \ "total_look_bandwidth_az ==> %.16s\n" \ "total_look_bandwidth_range ==> %.16s\n" \ "w_func_designator_az ==> %.32s\n" \ "w_func_designator_range ==> %.32s\n" \ "data_input_source ==> %.16s\n" \ "nom_res_3db_range ==> %.16s\n" \ "nom_res_az ==> %.16s\n" \ "reserved8 ==> %.32s\n" \ "a_track_dop_freq_const_early_image ==> %.16s\n" \ "a_track_dop_freq_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_quad_early_image ==> %.16s\n" \ "spare8 ==> %.16s\n" \ "c_track_dop_freq_const_early_image ==> %.16s\n" \ "c_track_dop_freq_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_quad_early_image ==> %.16s\n" \ "time_direction_along_pixel ==> %.8s\n" \ "time_direction_along_line ==> %.8s\n" \ "a_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare9 ==> %.16s\n" \ "c_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare10 ==> %.16s\n" \ "line_content_indicator ==> %.8s\n" \ "clut_lock_flag ==> %.4s\n" \ "autofocussing_flag ==> %.4s\n" \ "line_spacing ==> %.16s\n" \ "pixel_spacing_range ==> %.16s\n" \ "range_compression_designator ==> %.16s\n" \ "spare11 ==> %.32s\n" \ "zero_dop_range_time_f_pixel ==> %.16s\n" \ "zero_dop_range_time_c_pixel ==> %.16s\n" \ "zero_dop_range_time_l_pixel ==> %.16s\n" \ "zero_dop_az_time_f_pixel ==> %.24s\n" \ "zero_dop_az_time_c_pixel ==> %.24s\n" \ "zero_dop_az_time_l_pixel ==> %.24s\n" \ "gec_local_use_segment ==> %.546s\n\n" #define SARLEADER_DPAF_DSS_WCS \ "*********** DSS RECORD ***********\n" \ "dss_rec_seq_num ==> %.4s\n" \ "chan_ind ==> %.4s\n" \ "reserved1 ==> %.16s\n" \ "scene_number ==> %.32s\n" \ "input_scene_center_time ==> %.32s\n" \ "spare1 ==> %.16s\n" \ "center_lat ==> %.16s\n" \ "center_long ==> %.16s\n" \ "center_heading ==> %.16s\n" \ "ellipsoid_designator ==> %.16s\n" \ "ellipsoid_semimajor_axis ==> %.16s\n" \ "ellipsoid_semiminor_axis ==> %.16s\n" \ "earth_constant ==> %.16s\n" \ "spare2 ==> %.16s\n" \ "ellipsoid_j2 ==> %.16s\n" \ "ellipsoid_j3 ==> %.16s\n" \ "ellipsoid_j4 ==> %.16s\n" \ "spare ==> %.16s\n" \ "reserved_new ==> %.16s\n" \ "scene_centre_line_number ==> %.8s\n" \ "scene_centre_pixel_number ==> %.8s\n" \ "scene_length ==> %.16s\n" \ "scene_width ==> %.16s\n" \ "spare3 ==> %.16s\n" \ "nchan ==> %.4s\n" \ "spare4 ==> %.4s\n" \ "mission_identifier ==> %.16s\n" \ "sensor_id_and_mode ==> %.32s\n" \ "orbit_number ==> %.8s\n" \ "lat_nadir_center ==> %.8s\n" \ "long_nadir_center ==> %.8s\n" \ "heading_nadir_center ==> %.8s\n" \ "clock_angel ==> %.8s\n" \ "incidence_angle_center ==> %.8s\n" \ "radar_freq ==> %.8s\n" \ "radar_wavelength ==> %.16s\n" \ "motion_compensation ==> %.2s\n" \ "range_pulse_code_specifier ==> %.16s\n" \ "range_pulse_amplitude_const ==> %.16s\n" \ "range_pulse_amplitude_lin ==> %.16s\n" \ "range_pulse_amplitude_quad ==> %.16s\n" \ "range_pulse_amplitude_cube ==> %.16s\n" \ "range_pulse_amplitude_quart ==> %.16s\n" \ "range_pulse_phase_const ==> %.16s\n" \ "range_pulse_phase_lin ==> %.16s\n" \ "range_pulse_phase_quad ==> %.16s\n" \ "range_pulse_phase_cube ==> %.16s\n" \ "range_pulse_phase_quart ==> %.16s\n" \ "chirp_extraction_index ==> %.8s\n" \ "spare5 ==> %.8s\n" \ "sampling ==> %.16s\n" \ "range_gate_early_edge_start_image ==> %.16s\n" \ "range_pulse_length ==> %.16s\n" \ "reserved2 ==> %.4s\n" \ "range_compressed_flag ==> %.4s\n" \ "reserved3 ==> %.32s\n" \ "quantisation_in_bits ==> %.8s\n" \ "quantizer_descriptor ==> %.12s\n" \ "dc_bias_i ==> %.16s\n" \ "dc_bias_q ==> %.16s\n" \ "gain_imbalance ==> %.16s\n" \ "spare6 ==> %.32s\n" \ "reserved4 ==> %.16s\n" \ "antenna_mech_bor ==> %.16s\n" \ "reserved5 ==> %.4s\n" \ "nominal_prf ==> %.16s\n" \ "reserved6 ==> %.32s\n" \ "satelite_encoded_binary_time ==> %.16s\n" \ "satelite_clock_time ==> %.32s\n" \ "satelite_clock_increment ==> %.8s\n" \ "spare7 ==> %.8s\n" \ "processing_facility_identifier ==> %.16s\n" \ "processing_system_id ==> %.8s\n" \ "processing_version_id ==> %.8s\n" \ "reserved7 ==> %.32s\n" \ "product_type_id ==> %.32s\n" \ "alg_id ==> %.32s\n" \ "nlooks_az ==> %.16s\n" \ "neff_looks_range ==> %.16s\n" \ "bandwidth_look_az ==> %.16s\n" \ "bandwidth_look_range ==> %.16s\n" \ "total_look_bandwidth_az ==> %.16s\n" \ "total_look_bandwidth_range ==> %.16s\n" \ "w_func_designator_az ==> %.32s\n" \ "w_func_designator_range ==> %.32s\n" \ "data_input_source ==> %.16s\n" \ "nom_res_3db_range ==> %.16s\n" \ "nom_res_az ==> %.16s\n" \ "reserved8 ==> %.32s\n" \ "a_track_dop_freq_const_early_image ==> %.16s\n" \ "a_track_dop_freq_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_quad_early_image ==> %.16s\n" \ "spare8 ==> %.16s\n" \ "c_track_dop_freq_const_early_image ==> %.16s\n" \ "c_track_dop_freq_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_quad_early_image ==> %.16s\n" \ "time_direction_along_pixel ==> %.8s\n" \ "time_direction_along_line ==> %.8s\n" \ "a_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare9 ==> %.16s\n" \ "c_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare10 ==> %.16s\n" \ "line_content_indicator ==> %.8s\n" \ "clut_lock_flag ==> %.4s\n" \ "autofocussing_flag ==> %.4s\n" \ "line_spacing ==> %.16s\n" \ "pixel_spacing_range ==> %.16s\n" \ "range_compression_designator ==> %.16s\n" \ "spare11 ==> %.32s\n" \ "zero_dop_range_time_f_pixel ==> %.16s\n" \ "zero_dop_range_time_c_pixel ==> %.16s\n" \ "zero_dop_range_time_l_pixel ==> %.16s\n" \ "zero_dop_az_time_f_pixel ==> %.24s\n" \ "zero_dop_az_time_c_pixel ==> %.24s\n" \ "zero_dop_az_time_l_pixel ==> %.24s\n\n" GMTSAR_V5.7/.svn/pristine/a5/a5d1236c29fb8b949eac2979f9f6a07984044dc0.svn-base000444 015705 000000 00000005512 13505462013 025635 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "gmtsar.h" #include "lib_functions.h" #include "orbit.h" #include #include #include #define FACTOR 1000000 void interpolate_SAT_orbit_slow(struct SAT_ORB *, double, double *, double *, double *, int *); void interpolate_SAT_orbit(struct SAT_ORB *, double *, double *, double *, double, double *, double *, double *, int *); void hermite_c(double *, double *, double *, int, int, double, double *, int *); /*---------------------------------------------------------------*/ /* from David Sandwell's code */ void interpolate_SAT_orbit_slow(struct SAT_ORB *orb, double time, double *x, double *y, double *z, int *ir) { int k; double pt0; double *p, *pt, *pv; p = (double *)malloc(orb->nd * sizeof(double)); pv = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); /* seconds from Jan 1 */ pt0 = (24.0 * 60.0 * 60.0) * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) pt[k] = pt0 + k * orb->dsec; interpolate_SAT_orbit(orb, pt, p, pv, time, x, y, z, ir); free((double *)p); free((double *)pt); free((double *)pv); } /*---------------------------------------------------------------*/ void interpolate_SAT_orbit(struct SAT_ORB *orb, double *pt, double *p, double *pv, double time, double *x, double *y, double *z, int *ir) { /* ir; return code */ /* time; seconds since Jan 1 */ /* x, y, z; position */ int k, nval, nd; nval = 6; /* number of points to use in interpolation */ nd = orb->nd; if (debug) fprintf(stderr, " time %lf nd %d\n", time, nd); /* interpolate for each coordinate direction */ /* hermite_c c version */ for (k = 0; k < nd; k++) { p[k] = orb->points[k].px; pv[k] = orb->points[k].vx; } hermite_c(pt, p, pv, nd, nval, time, x, ir); for (k = 0; k < nd; k++) { p[k] = orb->points[k].py; pv[k] = orb->points[k].vy; } hermite_c(pt, p, pv, nd, nval, time, y, ir); if (debug) fprintf(stderr, "C pt %lf py %lf pvy %lf time %lf y %lf ir %d \n", *pt, p[0], pv[0], time, *y, *ir); for (k = 0; k < nd; k++) { p[k] = orb->points[k].pz; pv[k] = orb->points[k].vz; } hermite_c(pt, p, pv, nd, nval, time, z, ir); if (debug) fprintf(stderr, "C pt %lf pz %lf pvz %lf time %lf z %lf ir %d \n", *pt, p[0], pv[0], time, *z, *ir); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/a5/a5d51b44c942bd3b930f3e203dacfbeb0b2e7852.svn-base000444 015705 000000 00000010641 13505462014 026062 0ustar00sandwellwheel000000 000000 #define SARLEADER_FDR_VARSEG_WCS \ "*********** SAR FDR VARIABLE SEG ***********\n" \ "n_data_set_summ_rec ==> %.6s\n" \ "data_set_summ_rec_len ==> %.6s\n" \ "n_map_projec_rec ==> %.6s\n" \ "map_projec_rec_len ==> %.6s\n" \ "n_plat_pos_data_rec ==> %.6s\n" \ "plat_pos_data_rec_len ==> %.6s\n" \ "n_att_data_rec ==> %.6s\n" \ "att_data_rec_len ==> %.6s\n" \ "n_rad_data_rec ==> %.6s\n" \ "rad_data_rec_len ==> %.6s\n" \ "n_rad_comp_rec ==> %.6s\n" \ "rad_comp_rec_len ==> %.6s\n" \ "n_data_qua_summ_rec ==> %.6s\n" \ "data_qua_summ_rec_len ==> %.6s\n" \ "n_data_hist_rec ==> %.6s\n" \ "data_hist_rec_len ==> %.6s\n" \ "n_range_spectra_rec ==> %.6s\n" \ "range_spectra_rec_len ==> %.6s\n" \ "n_DEM_des_rec ==> %.6s\n" \ "DEM_des_rec_len ==> %.6s\n" \ "n_radar_par_update_rec ==> %.6s\n" \ "radar_par_update_rec_len ==> %.6s\n" \ "n_annotation_data_rec ==> %.6s\n" \ "annotation_data_rec_len ==> %.6s\n" \ "n_detailed_proc_rec ==> %.6s\n" \ "detailed_proc_rec_len ==> %.6s\n" \ "n_cal_rec ==> %.6s\n" \ "cal_rec_len ==> %.6s\n" \ "n_GCP_rec ==> %.6s\n" \ "GCP_rec_len ==> %.6s\n" \ "spare_60 ==> %60c\n" \ "n_facility_data_rec ==> %.6s\n" \ "facility_data_rec_len ==> %.6s\n" \ "blanks_288 ==> %288c\n\n" GMTSAR_V5.7/.svn/pristine/a5/a5a28831c70feaff7ae72fdf6751e2ee69b9af12.svn-base000444 015705 000000 00000047466 13505462014 026222 0ustar00sandwellwheel000000 000000 /***************************************************************************/ /* read_ALOS_data_SS reads an ALOS IMG file containing raw signal data */ /* and creates a raw-file and PRM-file suitable for our esarp processor. */ /* The program skips the first 720 bytes of the IMG file but copies the */ /* remaining data to the IMG.raw file after checking and fixing problems. */ /* The first record is read to determine the linelength, starting PRF, */ /* and near_range. If the line length or PRF change then the program */ /* halts. If the near_range changes then the lines are shifted and */ /* unconstrained values at the ends are set to NULL_DATA (15 or 16). */ /* (random sequence of 15 and 16's) */ /* During this processing the available parameters are added to the */ /* PRM-file. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Rob Mellors * * (Scripps Institution of Oceanography) * * Date : 10/03/2008 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 06/29/2006 added the near_range as an optional command-line argument * * 02/19/2007 added the ability to remove duplicate lines * * 03/07/2007 more robust to bad data in file * * 03/26/2007 ability to swap bytes (read on PC) RJM * * 03/28/2007 part of subroutin RJM * * removed set n_azimuth to 9000 rather than default * * 07/17/08 creates new file when prf changes RJM * * 07/17/08 reformatted; added functions RJM * * 09/29/08 added the ability to dump a subswath of WB1 scansar * ***************************************************************************/ /* the data header information is read into the structure dfd the line prefix information is read into sdr Values read here (and or generated) are: num_rng_bins bytes_per_line good_bytes_per_line PRF pulse_dur near_range num_lines num_patches SC_clock_start SC_clock_stop - this includes year YYYDDD.DDDDDDD clock_start clock_stop - this has not year for better precision DDD.DDDDDDDDD */ #include "image_sio.h" #include "lib_functions.h" /* fast random number generator */ #define znew (int)(z = 36969 * (z & 65535) + (z >> 16)) typedef unsigned long UL; static UL z = 362436069, t[256]; void settable(UL i1) { int i; z = i1; for (i = 0; i < 256; i = i + 1) t[i] = znew; } /* burst information from JAXA manual for WB1 */ static int n_data_burst[5] = {4976, 4720, 5376, 4432, 4688}; static int n_burst[5] = {247, 356, 274, 355, 327}; static int PRF[5] = {0, 0, 0, 0, 0}; void swap_ALOS_data_info(struct sardata_info *sdr); long read_sardata_info(FILE *, struct PRM *, int *, int *); void print_params(struct PRM *prm); int assign_sardata_params(struct PRM *, int, int *, int *); int check_shift(struct PRM *, int *, int *, int *, int); int set_file_position(FILE *, long *, int); int fill_shift_data(int, int, int, int, int, char *, char *, FILE *); int handle_prf_change(struct PRM *, FILE *, long *, int); struct sardata_record r1; struct sardata_descriptor dfd; struct sardata_info sdr; long read_ALOS_data_SS(FILE *imagefile, FILE *outfile, struct PRM *prm, long *byte_offset, int *nsub, int *burst_skip, int *num_burst) { char *data, *shift_data, *gap_data; int header_size; /* file header size 720 bytes */ int line_prefix_size; /* line header size 412 bytes*/ int record_length0; /* data record size start 10788 bytes */ int totrecl; /* total record length 11200 bytes = line_prefix_size + record_length */ int record_length1; /* data record size curr. 10788 bytes */ int line_suffix_size; /* number of bytes after data 36 bytes */ int kswath0 = 0; /* subswath at start of file */ int skip_swath; /* number of subswaths to skip to get to desired subswath */ int skiprecl; /* number of lines to skip to get to desired subswath */ int data_length; /* bytes of data */ int n = 1, ishift, shift, shift0; int k, kburst = 0, totburst = 0; int j, ngap, nlines = 0, ntot; int nprfchange, nburstchange; double tbias = 0.0, get_clock(); double ttot = 0., dt = 0., tgap = 0.; /* total time, burst interval, burst gap, fractional gap */ settable(12345); if (debug) fprintf(stderr, ".... reading header \n"); /* read header information */ read_sardata_info(imagefile, prm, &header_size, &line_prefix_size); assign_sardata_params(prm, line_prefix_size, &line_suffix_size, &record_length0); totrecl = line_prefix_size + record_length0; set_file_position(imagefile, byte_offset, header_size); /* get the sarting burst number and the PRF information for all the bursts and * rewind the file */ for (k = 0; k < 5; k++) totburst = totburst + n_burst[k]; for (j = 0; j < totburst; j++) { if (fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile) != 1) break; fseek(imagefile, record_length0, SEEK_CUR); if (swap) swap_ALOS_data_info(&sdr); for (k = 0; k < 5; k++) { if (sdr.n_data_pixels == n_data_burst[k]) { PRF[k] = sdr.PRF; if (j == 0) kswath0 = k; } } } /* get the time interval of a burst and rewind the file */ dt = 0.; for (k = 0; k < 5; k++) if (PRF[k] > 0.) dt = dt + (double)n_burst[k] / (0.001 * PRF[k]); tgap = dt - (double)n_burst[*nsub] / (0.001 * PRF[*nsub]); ngap = (int)(tgap * (0.001 * PRF[*nsub]) + 0.5); prm->num_valid_az = 6 * (n_burst[*nsub] + ngap); /* use 6 bursts per aperture */ rewind(imagefile); fseek(imagefile, header_size, SEEK_SET); if (verbose) fprintf(stderr, " totburst start_busrt# burstcycle_time %d %d %f \n", totburst, kswath0, dt); /* set the total number of lines output based on the number of patches * requested or default 1000 */ ntot = *num_burst * (n_burst[*nsub] + ngap); if (verbose) fprintf(stderr, " dt, tgap, n_burst, ngap ,ntot %f %f %d %d %d %d \n", dt, tgap, n_burst[*nsub], ngap, prm->num_valid_az, ntot); /* allocate the memory for data */ if ((data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if ((shift_data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if ((gap_data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); /* seek to beginning of next burst of sub swath nsub, read the line header, * reset the parameters, and set the counters */ skip_swath = ((*nsub + 5) - kswath0) % 5; skiprecl = 0; for (k = kswath0; k < kswath0 + skip_swath; k++) skiprecl = skiprecl + n_burst[k % 5]; skiprecl = skiprecl + *burst_skip * totburst; if (verbose) fprintf(stderr, " skip_swath skiprecl %d %d \n", skip_swath, skiprecl); fseek(imagefile, skiprecl * totrecl, SEEK_CUR); /* recalculate the PRF at the new skip location */ for (j = 0; j < totburst; j++) { if (fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile) != 1) break; fseek(imagefile, record_length0, SEEK_CUR); if (swap) swap_ALOS_data_info(&sdr); for (k = 0; k < 5; k++) { if (sdr.n_data_pixels == n_data_burst[k]) { PRF[k] = sdr.PRF; } } } /* get the time interval of a burst at the new skip location and rewind the * file */ dt = 0.; for (k = 0; k < 5; k++) if (PRF[k] > 0.) dt = dt + (double)n_burst[k] / (0.001 * PRF[k]); tgap = dt - (double)n_burst[*nsub] / (0.001 * PRF[*nsub]); ngap = (int)(tgap * (0.001 * PRF[*nsub]) + 0.5); prm->num_valid_az = 6 * (n_burst[*nsub] + ngap); /* use 6 bursts per aperture */ if (verbose) fprintf(stderr, " totburst start_busrt# burstcycle_time %d %d %f \n", totburst, kswath0, dt); /* rewind and seek again to start in the correct location */ rewind(imagefile); fseek(imagefile, header_size, SEEK_SET); fseek(imagefile, skiprecl * totrecl, SEEK_CUR); /* read the line header and set the parameters for this subswath */ fread((void *)&sdr, line_prefix_size, 1, imagefile); if (swap) swap_ALOS_data_info(&sdr); prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; prm->prf = sdr.PRF; if (prm->near_range < 0) prm->near_range = sdr.slant_range; fseek(imagefile, -1 * line_prefix_size, SEEK_CUR); n = sdr.sequence_number - 1; // m = sdr.sequence_number; *byte_offset = ftell(imagefile); if (verbose) fprintf(stderr, " n skiprecl byte_offset %d %d %ld \n", n, skiprecl, *byte_offset); /* now start at the beginning but with the intervals known */ if (verbose) fprintf(stderr, ".... reading data (byte %ld) \n", ftell(imagefile)); shift0 = 0; // m = 0; /* read the rest of the file */ while ((fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile)) == 1) { n++; if (swap) swap_ALOS_data_info(&sdr); /* check to make sure there is no prf-change in any of the subswaths */ for (k = 0; k < 5; k++) { if (sdr.n_data_pixels == n_data_burst[k]) { if ((sdr.PRF) != PRF[k]) { PRF[*nsub] = 0.; } } } /* detect a different subswath and skip intil the next subswath */ if (sdr.n_data_pixels == n_data_burst[*nsub]) { kburst++; if (sdr.sequence_number != n) printf(" missing line: n, seq# %d %d \n", n, sdr.sequence_number); /* check for changes in record_length and PRF */ record_length1 = sdr.record_length - line_prefix_size; if (record_length0 != record_length1) die("record_length changed", ""); /* if prf changes exit */ if ((sdr.PRF) != PRF[*nsub]) { fprintf(stderr, " ERROR PRF changed, oldPRF, newPRF %f %f \n", PRF[*nsub] * .001, sdr.PRF * .001); *byte_offset = ftell(imagefile); nprfchange = (*byte_offset - header_size) / totrecl; nburstchange = nprfchange / totburst; fprintf(stderr, " rec# burst# %d %d \n", nprfchange, nburstchange); break; } /* check shift to see if it varies from beginning or from command line * value */ check_shift(prm, &shift, &ishift, &shift0, record_length1); if ((verbose) && (n / 2000.0 == n / 2000)) { fprintf(stderr, " Working on line %d prf %f record length %d slant_range %d \n", sdr.sequence_number, 0.001 * sdr.PRF, record_length1, sdr.slant_range); } /* read data (and trailing bytes) */ if (fread((char *)data, record_length1, (size_t)1, imagefile) != 1) break; data_length = 2 * n_data_burst[*nsub]; /* write line header to output data */ fwrite((void *)&sdr, line_prefix_size, 1, outfile); nlines++; /* check to see if this is enough data */ if (nlines >= ntot) break; /* Shimada says the first 13 lines are bad. I only saw 11 bad. shift * these lines outside the window */ if (kburst < 12) ishift = data_length; /* ishift and write the data */ fill_shift_data(shift, ishift, data_length, line_suffix_size, record_length1, data, shift_data, outfile); /* if kburst it equal to the length of this burst then write the * appropriate number of zero lines */ if (kburst == n_burst[*nsub]) { ttot = ttot + dt; if (verbose) fprintf(stderr, " %d %d %f %f %d %f \n", *nsub + 1, kburst, dt, tgap, ngap, ttot); kburst = 0; /* write the appropriate number of zero lines */ for (j = 0; j < ngap; j++) { fwrite((void *)&sdr, line_prefix_size, 1, outfile); nlines++; /* set the gap data to 15.5 */ for (k = 0; k < record_length0; k++) gap_data[k] = NULL_DATA + znew % 2; fwrite((char *)gap_data, record_length1, 1, outfile); } } } else { record_length1 = sdr.record_length - line_prefix_size; if (fread((char *)data, record_length1, (size_t)1, imagefile) != 1) break; } } /* calculate end time and fix prf */ prm->prf = 0.001 * PRF[*nsub]; prm->clock_stop = get_clock(sdr, tbias); prm->SC_clock_stop = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_stop; /* m is non-zero only in the event of a prf change */ prm->num_lines = nlines - 1; prm->num_patches = (int)((1.0 * prm->num_lines) / (1.0 * prm->num_valid_az)); if (prm->num_lines == 0) prm->num_lines = 1; if (verbose) print_params(prm); free(data); free(shift_data); fclose(outfile); return (*byte_offset); } /***************************************************************************/ double get_clock(struct sardata_info sdr, double tbias) { double time; // nsd = 24.0*60.0*60.0; /* seconds in a day */ time = (double)sdr.sensor_acquisition_DOY + (double)sdr.sensor_acquisition_msecs_day / 1000.0 / 86400.0 + tbias / 86400.0; return (time); } /***************************************************************************/ void print_params(struct PRM *prm) { fprintf(stdout, "input_file = %s \n", prm->input_file); fprintf(stdout, "num_rng_bins = %d \n", prm->num_rng_bins); fprintf(stdout, "bytes_per_line = %d \n", prm->bytes_per_line); fprintf(stdout, "good_bytes_per_line = %d \n", prm->good_bytes); fprintf(stdout, "first_sample = %d \n", prm->first_sample); fprintf(stdout, "PRF = %f \n", prm->prf); fprintf(stdout, "pulse_dur = %e \n", prm->pulsedur); fprintf(stdout, "near_range = %f \n", prm->near_range); fprintf(stdout, "num_lines = %d \n", prm->num_lines); fprintf(stdout, "num_patches = %d \n", prm->num_patches); fprintf(stdout, "SC_clock_start = %16.10lf \n", prm->SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf \n", prm->SC_clock_stop); fprintf(stdout, "clock_start = %16.12lf \n", prm->clock_start); fprintf(stdout, "clock_stop = %16.12lf \n", prm->clock_stop); } /***************************************************************************/ long read_sardata_info(FILE *imagefile, struct PRM *prm, int *header_size, int *line_prefix_size) { long nitems; *header_size = sizeof(struct sardata_record) + sizeof(struct sardata_descriptor); *line_prefix_size = sizeof(struct sardata_info); if (*header_size != 720) die("header size is not 720 bytes\n", ""); if (*line_prefix_size != 412) die("header size is not 720 bytes\n", ""); if (debug) fprintf(stderr, " header_size %d line_prefix_size %d swap data %d\n", *header_size, *line_prefix_size, swap); /* make sure that we are at the beginning */ /* re-read header even if resetting after a PRF change */ rewind(imagefile); if (verbose) fprintf(stderr, ".... reading header (byte %ld) \n", ftell(imagefile)); /* data processed before Sept 15, 2006 have a timing bias of 0.9 s */ /* data processed after this data have a smaller bias 0.0 s */ nitems = fread((void *)&r1, sizeof(struct sardata_record), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_RECORD_WCS, SARDATA_RECORD_RVL(&r1)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_record)), ftell(imagefile)); } nitems = fread((void *)&dfd, sizeof(struct sardata_descriptor), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_DESCRIPTOR_WCS, SARDATA_DESCRIPTOR_RVL(&dfd)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_descriptor)), ftell(imagefile)); } nitems = fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile); if (debug) fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_info)), ftell(imagefile)); /* swap data little end/ big end if needed */ if (swap) swap_ALOS_data_info(&sdr); if (debug) fprintf(stderr, SARDATA__WCS, SARDATA_RVL(sdr)); return (nitems); } /***************************************************************************/ int assign_sardata_params(struct PRM *prm, int line_prefix_size, int *line_suffix_size, int *record_length0) { double tbias = 0.0, get_clock(); prm->prf = sdr.PRF; prm->pulsedur = (1e-9) * sdr.chirp_length; *record_length0 = sdr.record_length - line_prefix_size; prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; /* record_length is 21100 */ /* beginning of line has a 412 byte prefix */ /* end of line has a 80 byte (40 pixels) suffix (right-fill pixels)*/ /* record_length0 (data length) is (20688 - 412) = 20276 */ /* n_data_pixels 10304 */ /* 2 bytes per pixel */ /* 412 bytes + (2*10304) bytes + (40*2) bytes = 21100 bytes*/ prm->bytes_per_line = sdr.record_length; prm->good_bytes = sdr.record_length; /* make these match the standard FBD data */ prm->num_rng_bins = 5652; /* make these match the standard FBD data */ *line_suffix_size = sdr.record_length - prm->good_bytes; // if (prm->near_range < 0) prm->near_range = sdr.slant_range; if (*record_length0 > 50000) { fprintf(stderr, "**** record_length is %d !\n", *record_length0); die("expect something like 21100 .... try -swap option?\n", "exiting"); } return (EXIT_SUCCESS); } /***************************************************************************/ int check_shift(struct PRM *prm, int *shift, int *ishift, int *shift0, int record_length1) { *shift = 2 * floor(0.5 + (sdr.slant_range - prm->near_range) / (0.5 * SOL / prm->fs)); *ishift = abs(*shift); if (*ishift > record_length1) { printf(" end: shift exceeds data window %d \n", *shift); die("exitting", ""); } if (*shift != *shift0) { printf(" near_range, shift = %d %d \n", sdr.slant_range, *shift); *shift0 = *shift; } return (EXIT_SUCCESS); } /***************************************************************************/ int set_file_position(FILE *imagefile, long *byte_offset, int header_size) { if (*byte_offset < 0) { *byte_offset = 0; rewind(imagefile); fseek(imagefile, header_size, SEEK_SET); } else { fseek(imagefile, *byte_offset, SEEK_SET); } return (EXIT_SUCCESS); } /***************************************************************************/ int fill_shift_data(int shift, int ishift, int data_length, int line_suffix_size, int record_length1, char *data, char *shift_data, FILE *outfile) { int k; /* NULL_DATA = 15; znew randonly is 0 or 1 */ if (shift > 0) { for (k = 0; k < ishift; k++) shift_data[k] = NULL_DATA + znew % 2; for (k = 0; k < data_length - ishift; k++) shift_data[k + ishift] = data[k]; for (k = data_length - ishift; k < record_length1 - ishift; k++) shift_data[k + ishift] = NULL_DATA + znew % 2; } /* if data is shifted, fill in with data vlues of NULL_DATA at end */ if (shift <= 0) { for (k = 0; k < data_length - ishift - line_suffix_size; k++) shift_data[k] = data[k + ishift]; for (k = data_length - ishift - line_suffix_size; k < record_length1; k++) shift_data[k] = NULL_DATA + znew % 2; } /* write the shifted data out */ fwrite((char *)shift_data, record_length1, 1, outfile); return (EXIT_SUCCESS); } /***************************************************************************/ int handle_prf_change(struct PRM *prm, FILE *imagefile, long *byte_offset, int n) { prm->num_lines = n; /* skip back to beginning of the line */ fseek(imagefile, -1 * sizeof(struct sardata_info), SEEK_CUR); /* define byte_offset */ *byte_offset = ftell(imagefile); /* tell the world */ printf(" *** PRF changed from %lf to %lf at line %d (byte %ld)\n", (0.001 * prm->prf), (0.001 * sdr.PRF), n, *byte_offset); printf(" end: PRF changed from %lf to %lf at line %d \n", (0.001 * prm->prf), (0.001 * sdr.PRF), n); return (EXIT_SUCCESS); } /***************************************************************************/ GMTSAR_V5.7/.svn/pristine/a2/a2a203681d38016f50ff384c0e8bd318555833b7.svn-base000444 015705 000000 00000010245 13505462013 025356 0ustar00sandwellwheel000000 000000 /************************************************************************ * various utilities needed for gmtsar * * modified from readgrd * ************************************************************************/ /************************************************************************ * Creator: Rob J. Mellors, San Deigo State University * * Date : December 18, 2007 * * * * Modification history: * * some slight format changes - Dec 18, 2007 - RJM * * comments added - Jan 14, 2010 - DTS * ************************************************************************/ #include "gmtsar.h" #include "lib_functions.h" /*---------------------------------------------------------------*/ /* check endian of machine */ /* 1 if big; -1 if little */ int is_big_endian_() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } int is_big_endian__() { return is_big_endian_(); } /*---------------------------------------------------------------*/ /* write out error message and exit */ /* use two strings to allow more complicated error messages */ void die(char *s1, char *s2) { fprintf(stderr, " %s %s \n", s1, s2); exit(1); } /*---------------------------------------------------------------*/ /* cross3 is a routine to take the cross product of 3-D vectors */ void cross3(double *a, double *b, double *c) /* input and output vectors having 3 elements */ { c[0] = (a[1] * b[2]) - (a[2] * b[1]); c[1] = (-a[0] * b[2]) + (a[2] * b[0]); c[2] = (a[0] * b[1]) - (a[1] * b[0]); } /*----------------------------------------------------------------------*/ /* find_length returns length of a 3 component vector */ double find_length(double *x) { double length; length = sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]); return (length); } /*----------------------------------------------------------------------*/ /* find_distance returns distance between two 3 component vector */ double find_distance(double *xs, double *x) { int i; double dx[3]; for (i = 0; i < 3; i++) dx[i] = xs[i] - x[i]; return (find_length(dx)); } /*----------------------------------------------------------------------*/ /* find_distance returns distance between two 3 component vector */ /* sometimes cannot specify as vectors easily */ double find_distance3(double x11, double x12, double x13, double x21, double x22, double x23) { double dx[3], distance; dx[0] = x11 - x21; dx[1] = x12 - x22; dx[2] = x13 - x23; distance = find_length(dx); return (distance); } /*---------------------------------------------------------------------------*/ void find_unit_vector(double *x, double *xn) { int i; double r; r = find_length(x); for (i = 0; i < 3; i++) xn[i] = x[i] / r; } /*---------------------------------------------------------------------------*/ /* find seconds */ void get_seconds(struct PRM p, double *start, double *end) { int m; double doy; double n_secs_day; n_secs_day = 24.0 * 60.0 * 60.0; doy = p.clock_start; m = p.nrows - p.num_valid_az; /* also correct the time for the azimuth shift */ // if(p.sub_int_a < 0.) p.sub_int_a = 0.; *start = n_secs_day * doy + (p.ashift + p.sub_int_a) / (p.prf) + (1.0 * m) / (2.0 * p.prf); *end = *start + p.num_patches * p.num_valid_az / p.prf; } /*---------------------------------------------------------------------------*/ int find_fft_length(int n) { int nfft; nfft = 2; while (nfft < n) nfft = 2 * nfft; if (debug) fprintf(stderr, "find_fft_length:\n...data length n %d nfft %d \n\n", n, nfft); return (nfft); } /*-----------------------------------------------------------------------*/ int geo2latlon(double *x, double *llt, struct PRM r) { double fll; fll = (r.ra - r.rc) / r.ra; xyz2plh(x, llt, r.ra, fll); if (verbose) fprintf(stderr, " geo2latlon: %8.3f %8.3f %8.0f \n", x[0], x[1], x[2]); return (EXIT_SUCCESS); } /*-----------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/a2/a25c7283524118a648ddfc2e582382e553426e89.svn-base000444 015705 000000 00000014627 13505462013 025331 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Mar 2 2010 # modified by D. Sandwell MAR 11 2010 # # preprocess all the data based on data.in table file and generate: # 1. raw files # 2. PRM files # 3. time-baseline plot for user to create stacking pairs # format in data.in table file: # line 1: master_name # line 2 and below: slave_name alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv != 2) then echo "" echo "Usage: pre_proc_init.csh SAT data.in" echo "" echo " preprocess a set of images using default Dopper centroid, rear_range and radius, number of patches" echo " a baseline-time plot will be generated" echo " after running this command " echo " the user should choose an appropriate master image " echo " the user should also decide a common Dopper centroid, rear_range and radius, number of patches to run batch processing" echo " the data with completely different Doppler centroid or baselines can be omitted from further processing" echo "" echo " SAT can be ALOS ERS or ENVI(ENVISAT)" echo "" echo " format of data.in is:" echo " line 1: master_name" echo " line 2 and below: slave_name" echo "" echo " example of data.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP089300650-H1.0__A" echo " IMG-HH-ALPSRP236920650-H1.0__A" echo "" echo " example of data.in for ERS is:" echo " e1_05783" echo " e1_07787" echo " e1_10292" echo "" echo " example of data.in for ENVISAT is:" echo " ENV1_2_127_2925_07195" echo " ENV1_2_127_2925_12706" echo " ENV1_2_127_2925_13207" echo "" echo "Example: pre_proc_init.csh ENVI data.in" echo "" exit 1 endif set SAT = $1 if ($SAT != ALOS && $SAT != ENVI && $SAT != ERS) then echo "" echo " SAT can be ALOS ERS or ENVI(ENVISAT)" echo "" exit 1 endif # # open and read data.in table # echo "" echo "running pre_proc_init.csh" echo "" echo "preprocess master image" set line1 = `awk 'NR==1 {print $0}' $2` if ($SAT == ERS || $SAT == ENVI) then set master = $line1[1] else if ($SAT == ALOS) then set master = `echo $line1[1] | awk '{ print substr($1,8,length($1)-7)}'` endif # # unpack the master if necessary # if ($SAT == ERS || $SAT == ENVI) then if(! -f $master.raw || ! -f $master.LED) then $1_pre_process $master 0 0 0 endif echo "before baseline" baseline_table.csh $master.PRM $master.PRM >! baseline_table.dat baseline_table.csh $master.PRM $master.PRM GMT >! table.gmt echo "after baseline" else if ($SAT == ALOS) then if(! -f IMG-HH-$master.raw || ! -f IMG-HH-$master.PRM ) then $1_pre_process IMG-HH-$master LED-$master endif set NEAR = `grep near_range IMG-HH-$master.PRM | awk '{print $3}'` set RAD = `grep earth_radius IMG-HH-$master.PRM | awk '{print $3}'` set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set FD1 = `grep fd1 IMG-HH-$master.PRM | awk '{print $3}'` baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM >! baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM GMT >! table.gmt endif # # loop and unpack the slave image using the same earth radius and near range as the master image # foreach line2 (`awk 'NR>1 {print $0}' $2`) echo "pre_proc_batch.csh" echo "preprocess slave images" if ($SAT == ERS || $SAT == ENVI) then set slave = $line2 if(! -f $slave.raw || ! -f $slave.LED) then $1_pre_process $slave 0 0 0 endif baseline_table.csh $master.PRM $slave.PRM >> baseline_table.dat baseline_table.csh $master.PRM $slave.PRM GMT >> table.gmt else if ($SAT == ALOS) then set slave = ` echo $line2 | awk '{ print substr($1,8,length($1)-7)}'` if(! -f IMG-HH-$slave.raw || ! -f IMG-HH-$slave.PRM ) then $1_pre_process IMG-HH-$slave LED-$slave endif # # check the range sampling rate of the slave images and do conversion if necessary # set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM GMT >> table.gmt else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs IMG-HH-$slave.PRM IMG-HH-$slave"_"FBS.PRM # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM GMT >> table.gmt echo "Overwriting the old slave image" mv IMG-HH-$slave"_"FBS.PRM IMG-HH-$slave.PRM update_PRM IMG-HH-$slave.PRM input_file IMG-HH-$slave.raw mv IMG-HH-$slave"_"FBS.raw IMG-HH-$slave.raw else if ($t == 0.5) then echo "Use the FBS mode image as master" exit 1 else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif # end of the if ($SAT == ALOS) endif # end of the loop over slave images end # # make baseline plots # if ($SAT == ERS || $SAT == ENVI) then awk '{print 1992+$1/365.25,$2,$7}' < table.gmt > text # awk '{print 1992+$1/365.25,$2,7,$4,$5,$6,$7}' < table.gmt > text # awk '{print 1992+$1/365.25,$2,7,-45,$5,$6,$7}' < table.gmt > text else if ($SAT == ALOS) then awk '{print 2006.5+($1-181)/365.25,$2,$7}' < table.gmt > text # awk '{print 2006.5+($1-181)/365.25,$2,9,$4,$5,$6,$7}' < table.gmt > text endif set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-500, $4+500}'` # set region = `minmax text -C | awk '{print $1-0.5, $2+0.5, -1200, 1200}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > stacktable_all.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba1:"year":/a200g00f100:"baseline (m)":WSen -O >> stacktable_all.ps # # clean up the mess # rm text text2 GMTSAR_V5.7/.svn/pristine/b4/b442c77b156ab417e245d753337ab448c72f289a.svn-base000444 015705 000000 00000014341 13505462013 025451 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # unset noclobber # # Rewritten by Xiaohua XU for GMTSAR, Feb 2016 # # Matt WEI Jan 28 2010 # Modified by Xiaopeng Feb 8 2010 # Modified by Matt Feb 12 2010 - zero.hgt and add 0 to names as N01W072.hgt # Note this script requires a local copy of the SRTM or other global dem data. # We have setup a web site http://gmtsar.ucsd.edu to prepare and deliver the file dem.grd #======================================================================= # script to make topography for interferograms # The USGS elevations are height above WGS84 so this is OK. if ($#argv < 2) then error_message: echo " " echo " Usage: make_dem.csh lonW lonE latS latN DEM_type" echo " " echo " DEM_type: 1--SRTM1 2--SRTM3 3--ASTER" echo " " echo " notes: 1 has not been tested if the tiles cross equator or E180" echo " 2 custom dem.grd also available from http://topex.ucsd.edu/gmtsar " echo " " exit 1 endif # # for plotting # set scale = -JX8i # # set local variables if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif set V = "" # if ($5 == 1) then set demdir = "/palsar/DEM/SRTM1/" set pixel = 0.000277777778 set INC = 1s else if ($5 == 2) then set demdir = "/palsar/DEM/SRTM3/World/" set pixel = 0.000833333333333 set INC = 3s else if ($5 == 3) then set demdir = "/palsar/DEM/ASTER/World/" set pixel = 0.000277777778 set INC = 1s else goto error_message endif set system = `uname -p` # #========================Mosaic topo data=============================== # # Get the center of the frame from SAT_baseline #----------------------------------------------------------------------- #----------------------------------------------------------------------- # Estimate bound of required topography set lon1 = $1 set lon2 = $2 set lat1 = $3 set lat2 = $4 set bound = $1/$2/$3/$4 echo $bound $lon1 $lon2 $lat1 $lat2 #----------------------------------------------------------------------- # Mosaic topography data # first, convert "lon1 lon2 lat1 lat2" into "lat_s lat_e lon_s lon_e" # that can be used in hgt format @ lon10 = `echo "$lon1" | awk '{printf("%d",$1) }'` @ lon20 = `echo "$lon2" | awk '{printf("%d",$1) }'` @ lat10 = `echo "$lat1" | awk '{printf("%d",$1) }'` @ lat20 = `echo "$lat2" | awk '{printf("%d",$1) }'` echo $lon10 $lon20 $lat10 $lat20 # correct the lon and lat if in the west or south if ($lon10 < 0 ) @ lon10 = $lon10 - 1 if ($lon20 < 0 ) @ lon20 = $lon20 - 1 if ($lat10 < 0 ) @ lat10 = $lat10 - 1 if ($lat20 < 0 ) @ lat20 = $lat20 - 1 set lon_control = 0 set lat_control = 0 set lon_tmp = $lon10 set lat_tmp = $lat10 rm *tmp* while ( $lat_tmp <= $lat20 ) echo $lat_tmp while ( $lon_tmp <= $lon20 ) # get the hgt file name right if ($lat_tmp >= 0) then set NS = "N" @ lat_s = $lat_tmp else if ($lat_tmp < 0 ) then set NS = "S" @ lat_s = - $lat_tmp endif # if ($lon_tmp < 0) then set WE = "W" @ lon_s = - $lon_tmp else if ($lon_tmp >= 0) then set WE = "E" @ lon_s = $lon_tmp endif # if ($lat_s < 10 && $lon_s >= 100) then set demtmp = $NS"0"$lat_s$WE$lon_s".hgt" set demtmpgrd = $NS"0"$lat_s$WE$lon_s".grd" else if ($lat_s < 10 && $lon_s >= 10) then set demtmp = $NS"0"$lat_s$WE"0"$lon_s".hgt" set demtmpgrd = $NS"0"$lat_s$WE"0"$lon_s".grd" else if ($lat_s < 10) then set demtmp = $NS"0"$lat_s$WE"00"$lon_s".hgt" set demtmpgrd = $NS"0"$lat_s$WE"00"$lon_s".grd" else if ($lon_s >= 100) then set demtmp = $NS$lat_s$WE$lon_s".hgt" set demtmpgrd = $NS$lat_s$WE$lon_s".grd" else if ($lon_s >= 10) then set demtmp = $NS$lat_s$WE"0"$lon_s".hgt" set demtmpgrd = $NS$lat_s$WE"0"$lon_s".grd" else set demtmp = $NS$lat_s$WE"00"$lon_s".hgt" set demtmpgrd = $NS$lat_s$WE"00"$lon_s".grd" endif set range = `echo "$lon_tmp $lat_tmp" | awk '{print $1"/"$1+1"/"$2"/"$2+1}'` set demlat = $NS$lat_tmp.grd echo $demtmp $demlat $range if (! -e $demdir$demtmp) then # file does not exist set demtmp = "zero.hgt" endif ln -s $demdir$demtmp . # bytes swap if ($system =~ "sparc" || $system =~ "powerpc") then gmt xyz2grd $demtmp -G$demtmpgrd"=bf" -I$pixel -R$range -di-32768 -ZTLh $V else if ($system =~ "i686" || $system =~ "i386") then gmt xyz2grd $demtmp -G$demtmpgrd"=bf" -I$pixel -R$range -di-32768 -ZTLhw $V endif # paste grd files together along longitude if (-e tmplon.grd) then gmt grdpaste $demtmpgrd"=bf" tmplon.grd"=bf" -Gtmplon.grd"=bf" else cp $demtmpgrd tmplon.grd endif rm -f $demtmp @ lon_tmp = $lon_tmp + 1 if ($lon_tmp > 181) @ lon_tmp = $lon_tmp - 360 end # paste grd files together along latitude if (-e tmplat.grd) then gmt grdpaste tmplon.grd"=bf" tmplat.grd"=bf" -Gtmplat.grd"=bf" rm -f tmplon.grd else mv -f tmplon.grd tmplat.grd endif set lon_control = 0 set lon_tmp = $lon10 @ lat_tmp = $lat_tmp + 1 rm -f $demlat end #mv tmplat.grd dem_ortho.grd gmt grdcut -R$bound tmplat.grd"=bf" -Gdem_ortho.grd # # add the egm96 geoid model if available # if (-e $demdir/geoid.egm96.grd) then # file does not exist echo "adding the egm96 geoid to the dem" gmt grdsample $demdir/geoid.egm96.grd `gmt grdinfo -I- dem_ortho.grd` `gmt grdinfo -I dem_ortho.grd` -fg -Gegm96.grd -T gmt grdedit egm96.grd `gmt grdinfo -I- dem_ortho.grd` $V gmt grdmath dem_ortho.grd egm96.grd ADD = dem.grd rm -f egm96.grd else mv -f dem_ortho.grd dem.grd endif # # plot the dem.grd # gmt grd2cpt dem.grd -Cgray -Z $V > dem.cpt gmt grdimage dem.grd $scale -Baf -BWSne -P $V -X0.2i -Cdem.cpt -K > dem.ps gmt psscale -Rdem.grd -J -DJTC+w5i/0.2i+h -Cdem.cpt -Baf -O >> dem.ps gmt psconvert -Tf -P -Z dem.ps echo "DEM map: dem.pdf" # # make a kml file of shaded relief # gmt grdgradient dem.grd -N.7 -A325 -Gdem_grad.grd $V gmt grd2cpt dem_grad.grd -Cgray -Z $V > dem_grad.cpt grd2kml.csh dem_grad dem_grad.cpt # # clean up # rm -f tmp.log all.grd tmplat.grd rm -f dem.cpt *.bb *.eps rm -f N*.grd S*.grd dem_grad.grd GMTSAR_V5.7/.svn/pristine/b4/b41762995f8a9dba2422d7e054a987ca0066a59b.svn-base000444 015705 000000 00000006661 13505462013 025545 0ustar00sandwellwheel000000 000000 /* $Id: fft_interpolate_routines.c 109 2015-01-19 23:01:24Z sandwell $ */ #include "gmtsar.h" /*--------------------------------------------------------------------------------------*/ /* some fft-based interpolation routines - rjm July 2009 */ /* */ /* fft_interpolate_1d(vin, N, vout, factor) uses fft to interpolate a * signal */ /* vin - complex vector length N */ /* vout - complex vector length M = factor*N */ /* factor - interpolation factor */ /* N must be even */ /* adjust amplitude */ /* */ /* fft_interpolate_2d(min, N, mout, factor) 2D but uses 1D fft */ /* min - complex matrix length NxN */ /* mout - complex matrix length MxM = factor*N */ /* */ /* fft_arrange_interpolate(in, N, out, factor) rearrange terms of transformed * signal */ /* */ /* all vectors and matrices must be pre-allocated */ /* all use the SIO fcomplex and call GMT_FFT_1D or GMT_FFT_2D */ /* fcomplex - struct {float r; float i} where r is real and i imag */ /*--------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/ void fft_arrange_interpolate(struct FCOMPLEX *in, int N, struct FCOMPLEX *out, int M, int ifactor) { int i, N2; N2 = N / 2; for (i = 0; i < M; i++) out[i].r = out[i].i = 0.0f; for (i = 0; i < N2; i++) { out[i].r = in[i].r; out[i].i = in[i].i; out[i + (2 * ifactor - 1) * N2].r = in[i + N2].r; out[i + (2 * ifactor - 1) * N2].i = in[i + N2].i; } } /*------------------------------------------------------------------------*/ void fft_interpolate_1d(void *API, struct FCOMPLEX *in, int N, struct FCOMPLEX *out, int ifactor) { int i, M; M = ifactor * N; /* forward fft */ // dir = -1; // cfft1d_(&N, in, &dir); GMT_FFT_1D(API, (float *)in, N, GMT_FFT_FWD, GMT_FFT_COMPLEX); /* re-arrange values in fft */ fft_arrange_interpolate(in, N, out, M, ifactor); /* backward fft */ // dir = 1; // cfft1d_(&M, out, &dir); GMT_FFT_1D(API, (float *)out, M, GMT_FFT_INV, GMT_FFT_COMPLEX); /* scale amplitude */ for (i = 0; i < M; i++) { out[i].r = ((float)ifactor) * out[i].r; out[i].i = ((float)ifactor) * out[i].i; } } /*--------------------------------------------------------------------------------------*/ void fft_interpolate_2d(void *API, struct FCOMPLEX *in, int N1, int M1, struct FCOMPLEX *out, int N, int M, int ifactor) { int i, j; struct FCOMPLEX *tmp1, *tmp2, *tmp3; #if 0 /* sanity checks */ if (N != (N1 * ifactor)) error_flag = 1; if (M != (M1 * ifactor)) error_flag = 1; #endif tmp1 = (struct FCOMPLEX *)malloc(N1 * M * sizeof(struct FCOMPLEX)); tmp2 = (struct FCOMPLEX *)malloc(N1 * sizeof(struct FCOMPLEX)); tmp3 = (struct FCOMPLEX *)malloc(N * sizeof(struct FCOMPLEX)); for (i = 0; i < N1 * M; i++) tmp1[i].i = tmp1[i].r = 0.0f; if (debug) print_complex(in, N1, M1, 0); for (i = 0; i < N1; i++) fft_interpolate_1d(API, &in[i * M1], M1, &tmp1[i * M], ifactor); if (debug) print_complex(tmp1, N1, M, 0); /* now do columns - need to transpose */ for (i = 0; i < M; i++) { for (j = 0; j < N1; j++) tmp2[j] = tmp1[j * M + i]; fft_interpolate_1d(API, tmp2, N1, tmp3, ifactor); for (j = 0; j < N; j++) out[j * M + i] = tmp3[j]; } if (debug) print_complex(out, N, M, 0); free((char *)tmp1); free((char *)tmp2); free((char *)tmp3); } /*--------------------------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/b4/b41900442e22cc25dc302a65ecbbd294e28dc39c.svn-base000444 015705 000000 00000033216 13505462013 025724 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #ifndef SARLEADER_FDR_H #define SARLEADER_FDR_H #define SARLEADER_FDR_BINARY_WCS \ "*********** SAR FDR BINARY **********\n" \ "record_seq_no ==> %1d\n" \ "record_subtype_code1 ==> %1x\n" \ "record_type_code1 ==> %1x\n" \ "record_subtype_code2 ==> %1x\n" \ "record_subtype_code3 ==> %1x\n" \ "record_length ==> %1d\n\n" #define SARLEADER_FDR_BINARY_RVL(SP) \ (SP)->record_seq_no, (SP)->record_subtype_code1, (SP)->record_type_code1, (SP)->record_subtype_code2, \ (SP)->record_subtype_code3, (SP)->record_length struct sarleader_binary { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; #define SARLEADER_FDR_FIXSEG_RCS "%2c%2c%12c%2c%2c%12c%4c%16c%4c%8c%4c%4c%8c%4c%4c%8c%4c%4c%64c" #define SARLEADER_FDR_FIXSEG_RVL(SP) \ (SP)->A_E_flag, (SP)->blank_2, (SP)->for_con_doc, (SP)->for_con_doc_rev_level, (SP)->file_des_rev_level, (SP)->softw_rel, \ (SP)->file_number, (SP)->file_name, (SP)->rec_seq_loc_type_flag, (SP)->seq_number_loc, (SP)->seq_number_field_length, \ (SP)->rec_code_loc_type_flag, (SP)->rec_code_loc, (SP)->rec_code_field_length, (SP)->rec_len_loc_type_flag, \ (SP)->rec_len_loc, (SP)->rec_len_field_length, (SP)->reserved_4, (SP)->reserved_segment struct sarleader_fdr_fixseg { char A_E_flag[2]; /* 13 */ char blank_2[2]; /* 15 */ char for_con_doc[12]; /* 17 */ char for_con_doc_rev_level[2]; /* 29 */ char file_des_rev_level[2]; /* 31 */ char softw_rel[12]; /* 33 */ char file_number[4]; /* 45 */ char file_name[16]; /* 49 */ char rec_seq_loc_type_flag[4]; /* 65 */ char seq_number_loc[8]; /* 69 */ char seq_number_field_length[4]; /* 77 */ char rec_code_loc_type_flag[4]; /* 81 */ char rec_code_loc[8]; /* 85 */ char rec_code_field_length[4]; /* 93 */ char rec_len_loc_type_flag[4]; /* 97 */ char rec_len_loc[8]; /* 101 */ char rec_len_field_length[4]; /* 109 */ char reserved_4[4]; /* 113 */ char reserved_segment[64]; /* 117 */ }; #define SARLEADER_FDR_VARSEG_RCS \ "%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%6c%" \ "6c%6c%6c%6c%6c%6c%60c%6c%6c%288c" #define SARLEADER_FDR_VARSEG_RVL(SP) \ (SP)->n_data_set_summ_rec, (SP)->data_set_summ_rec_len, (SP)->n_map_projec_rec, (SP)->map_projec_rec_len, \ (SP)->n_plat_pos_data_rec, (SP)->plat_pos_data_rec_len, (SP)->n_att_data_rec, (SP)->att_data_rec_len, \ (SP)->n_rad_data_rec, (SP)->rad_data_rec_len, (SP)->n_rad_comp_rec, (SP)->rad_comp_rec_len, (SP)->n_data_qua_summ_rec, \ (SP)->data_qua_summ_rec_len, (SP)->n_data_hist_rec, (SP)->data_hist_rec_len, (SP)->n_range_spectra_rec, \ (SP)->range_spectra_rec_len, (SP)->n_DEM_des_rec, (SP)->DEM_des_rec_len, (SP)->n_radar_par_update_rec, \ (SP)->radar_par_update_rec_len, (SP)->n_annotation_data_rec, (SP)->annotation_data_rec_len, (SP)->n_detailed_proc_rec, \ (SP)->detailed_proc_rec_len, (SP)->n_cal_rec, (SP)->cal_rec_len, (SP)->n_GCP_rec, (SP)->GCP_rec_len, (SP)->spare_60, \ (SP)->n_facility_data_rec, (SP)->facility_data_rec_len, (SP)->blanks_288 struct sarleader_fdr_varseg { char n_data_set_summ_rec[6]; /* 181-186 I6*/ char data_set_summ_rec_len[6]; /* 187-192 I6*/ char n_map_projec_rec[6]; /* 193-198 I6*/ char map_projec_rec_len[6]; /* 199-204 I6*/ char n_plat_pos_data_rec[6]; /* 205-210 I6*/ char plat_pos_data_rec_len[6]; /* 211-216 I6*/ char n_att_data_rec[6]; /* 217-222 I6*/ char att_data_rec_len[6]; /* 223-228 I6*/ char n_rad_data_rec[6]; /* 229-234 I6*/ char rad_data_rec_len[6]; /* 235-240 I6*/ char n_rad_comp_rec[6]; /* 241-246 I6*/ char rad_comp_rec_len[6]; /* 247-252 I6*/ char n_data_qua_summ_rec[6]; /* 253-258 I6*/ char data_qua_summ_rec_len[6]; /* 259-264 I6*/ char n_data_hist_rec[6]; /* 265-270 I6*/ char data_hist_rec_len[6]; /* 271-276 I6*/ char n_range_spectra_rec[6]; /* 277-282 I6*/ char range_spectra_rec_len[6]; /* 283-288 I6*/ char n_DEM_des_rec[6]; /* 289-294 I6*/ char DEM_des_rec_len[6]; /* 295-300 I6*/ char n_radar_par_update_rec[6]; /* 301-306 I6*/ char radar_par_update_rec_len[6]; /* 307-312 I6*/ char n_annotation_data_rec[6]; /* 313-318 I6*/ char annotation_data_rec_len[6]; /* 319-324 I6*/ char n_detailed_proc_rec[6]; /* 325-330 I6*/ char detailed_proc_rec_len[6]; /* 331-336 I6*/ char n_cal_rec[6]; /* 337-342 I6*/ char cal_rec_len[6]; /* 343-348 I6*/ char n_GCP_rec[6]; /* 349-354 I6*/ char GCP_rec_len[6]; /* 355-360 I6*/ char spare_60[60]; /* 361-420 I6*/ char n_facility_data_rec[6]; /* 421-426 I6*/ char facility_data_rec_len[6]; /* 427-432 I6*/ char blanks_288[288]; /* 433-720 A80*/ }; #define SARLEADER_FDR_FIXSEG_WCS \ "*********** SAR FDR FIXED SEGMENT ***********\n" \ "A_E_flag ==> %.2s\n" \ "blank_2 ==> %.2s\n" \ "for_con_doc ==> %.12s\n" \ "for_con_doc_rev_level ==> %.2s\n" \ "file_des_rev_level ==> %.2s\n" \ "softw_rel ==> %.12s\n" \ "file_number ==> %.4s\n" \ "file_name ==> %.16s\n" \ "rec_seq_loc_type_flag ==> %.4s\n" \ "seq_number_loc ==> %.8s\n" \ "seq_number_field_length ==> %.4s\n" \ "rec_code_loc_type_flag ==> %.4s\n" \ "rec_code_loc ==> %.8s\n" \ "rec_code_field_length ==> %.4s\n" \ "rec_len_loc_type_flag ==> %.4s\n" \ "rec_len_loc ==> %.8s\n" \ "rec_len_field_length ==> %.4s\n" \ "reserved_4 ==> %.4s\n" \ "reserved_segment ==> %.64s\n\n" #define SARLEADER_FDR_VARSEG_WCS \ "*********** SAR FDR VARIABLE SEG ***********\n" \ "n_data_set_summ_rec ==> %.6s\n" \ "data_set_summ_rec_len ==> %.6s\n" \ "n_map_projec_rec ==> %.6s\n" \ "map_projec_rec_len ==> %.6s\n" \ "n_plat_pos_data_rec ==> %.6s\n" \ "plat_pos_data_rec_len ==> %.6s\n" \ "n_att_data_rec ==> %.6s\n" \ "att_data_rec_len ==> %.6s\n" \ "n_rad_data_rec ==> %.6s\n" \ "rad_data_rec_len ==> %.6s\n" \ "n_rad_comp_rec ==> %.6s\n" \ "rad_comp_rec_len ==> %.6s\n" \ "n_data_qua_summ_rec ==> %.6s\n" \ "data_qua_summ_rec_len ==> %.6s\n" \ "n_data_hist_rec ==> %.6s\n" \ "data_hist_rec_len ==> %.6s\n" \ "n_range_spectra_rec ==> %.6s\n" \ "range_spectra_rec_len ==> %.6s\n" \ "n_DEM_des_rec ==> %.6s\n" \ "DEM_des_rec_len ==> %.6s\n" \ "n_radar_par_update_rec ==> %.6s\n" \ "radar_par_update_rec_len ==> %.6s\n" \ "n_annotation_data_rec ==> %.6s\n" \ "annotation_data_rec_len ==> %.6s\n" \ "n_detailed_proc_rec ==> %.6s\n" \ "detailed_proc_rec_len ==> %.6s\n" \ "n_cal_rec ==> %.6s\n" \ "cal_rec_len ==> %.6s\n" \ "n_GCP_rec ==> %.6s\n" \ "GCP_rec_len ==> %.6s\n" \ "spare_60 ==> %.60s\n" \ "n_facility_data_rec ==> %.6s\n" \ "facility_data_rec_len ==> %.6s\n" \ "blanks_288 ==> %.288s\n\n" #endif /* SARLEADER_FDR_H */ GMTSAR_V5.7/.svn/pristine/b4/b47ecf4ccc4567a79faaafe88d3a2487721407de.svn-base000444 015705 000000 00000000632 13505462014 026123 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_pre_process_SS CSRCS = ALOS_pre_process_SS.c \ parse_ALOS_commands.c \ read_ALOS_data_SS.c \ swap_ALOS_data_info.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/da/da686e534999dd1b848d5e01a81619ff0615c0b1.svn-base000444 015705 000000 00000000560 13505462013 025616 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for alos after 4 x 2 decimation so the 0.5 gail % is att 100 km wavelength % clear sigx=2.26; sigy=3.02; nx=9; ny=9; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_alos_200m -ASCII -double gauss GMTSAR_V5.7/.svn/pristine/df/dffaf622d7e782bd7ae456730e446bf799edd41d.svn-base000444 015705 000000 00000057555 13505462014 026241 0ustar00sandwellwheel000000 000000 .TH "snaphu" 1 .SH NAME snaphu \- phase unwrapping algorithm for SAR interferometry .SH SYNOPSIS .B snaphu [options] [infile] [linelength] [options] .SH DESCRIPTION \fBsnaphu\fR is a \fBs\fRtatistical-cost \fBn\fRetwork-flow \fBa\fRlgorithm for \fBph\fRase \fBu\fRnwrapping. Given an input interferogram and other observable data, \fBsnaphu\fR attempts to compute congruent phase-unwrapped solutions that are maximally probable in an approximate \fIa posteriori\fR sense. The algorithm's solver routine is based on network optimization. By default, \fBsnaphu\fR assumes that its input is a synthetic aperture radar (SAR) interferogram measuring surface topography. Deformation measurements are assumed if the \fB\-d\fR option is given. Smooth, generic data are assumed if the \fB\-s\fR option is given. This man page documents only \fBsnaphu\fR's syntax and usage. Its theoretical foundations are discussed in the references cited below. The most common input parameters may be given on the command line, while many other twiddle parameters are handled via the \fB\-f\fR option and configuration files. At the very least, the name of a wrapped-phase input file and its line length must be specified. Range should increase towards the right in the interferogram, and the flat-earth phase ramp should be removed from the input interferogram before \fBsnaphu\fR is run. For deformation interferograms, phase variations due to topography should be removed as well. Except for the input file name and the line length, all input parameters take default values if not specified. However, these parameters should be customized whenever possible since the accuracy of the solution depends on how well the statistics of the estimation problem are modeled. To avoid poor-quality solutions, users are strongly encouraged to provide their best estimates of the relevant problem parameters. Parameters are set in the order in which they are given on the command line, so multiple configuration files or options may be given, with later values overriding earlier ones. Allowable file formats are detailed below. The default format for the input file is COMPLEX_DATA, but any of the described formats may be used. If either of the ALT_LINE_DATA or ALT_SAMPLE_DATA formats are used, the magnitude and phase (in radians) of the interferogram should be in the first and second channels of the file, respectively. If the FLOAT_DATA format is used, the input file should contain only the phase of the interferogram (in radians); the magnitude may be passed with the \fB\-m\fR option. .SH OPTIONS .TP \fB\-a\fP \fIampfile\fP Read brightness data from the file \fIampfile\fP. The file should contain the amplitudes (not powers) of the two individual SAR images forming the interferogram if the formats ALT_SAMPLE_DATA (default) or ALT_LINE_DATA are used. It should contain an average of those two images if the FLOAT_DATA format is used. If (1) the amplitudes of both images are available, (2) the interferogram magnitude is also available, and (3) the \fB\-c\fP option is not used, then a coherence estimate is automatically formed from the available data. The number of looks used for this estimate can be set in a configuration file. If no amplitude or power data are specified, then the magnitude of the input interferogram is used as the average amplitude, and no coherence estimate is formed. Note that the magnitude of the interferogram is not equal to the average amplitude of the SAR images. The amplitude data should be in the same system of units used for the input interferogram, and also coregistered to it. .TP \fB\-A\fP \fIpwrfile\fP Similar to the \fB\-a\fP option, except the data in the specified file is assumed to represent the powers of the two individual SAR images. .TP \fB\-b\fP \fIBperp\fP For topography mode, use \fIBperp\fP (decimal value, in meters) as the value of the perpendicular component of the interferometric baseline. The sign is defined such that \fIBperp\fP is negative if the unwrapped phase increases with the elevation. By default, repeat-pass or ping-pong mode is assumed; for single-antenna-transmit data, the value of \fIBperp\fP should be halved, or the transmit mode should be set accordingly in a configuration file (see the \fB\-f\fP option). The baseline value is only used in topography mode. .TP \fB\-c\fP \fIcorrfile\fP Read correlation data from the file \fIcorrfile\fP. The correlation data should be the same size as, and registered to, the input interferogram. Consequently, a raw correlation estimate may need to be upsampled if it incorporates more looks than the interferogram. If the \fB\-c\fP option is not given, a coherence estimate is formed from the available data if possible. Otherwise, a uniform default coherence is assumed for the entire interferogram. If the ALT_LINE_DATA (default) or ALT_SAMPLE_DATA formats are used, the correlation data should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA format may also be used. The correlation values should be between zero and one, inclusive. .TP .B \-d Run in deformation mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents surface displacement rather than elevation. .TP \fB\-e\fP \fIestimatefile\fP Flatten using the unwrapped phase estimate in the file \fIestimatefile\fP. The estimate is subtracted from the input interferogram before unwrapping, and is inserted back into the solution just before the output is written. The estimate also affects the cost functions used, since subtracting a constant from a random variable shifts the probability density function of the random variable. If the formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped estimate (in radians) should be in the second data channel of the file; the first channel is ignored. The FLOAT_DATA format may also be used. .TP \fB\-f\fP \fIconfigfile\fP Read configuration parameters from file \fIconfigfile\fP. The file is parsed line by line for key-value pairs. Template configuration files are included with the \fBsnaphu\fP source code: \fIsnaphu.conf.full\fP contains all valid key-value pairs; \fIsnaphu.conf.brief\fP contains the most important parameters. Lines not beginning with alphanumeric characters are treated as comment lines. Command line options specified after \fB\-f\fP will override parameters specified in the \fIconfigfile\fP and vice versa. The \fB\-f\fP option may be given multiple times with different configuration files, with parameters in later-specified files overriding those in earlier ones. .TP .B \-g \fImaskfile\fP Grow a connected component mask for the unwrapped solution and write the mask to the file \fImaskfile\fP. A connected component is a region of pixels in the solution that is believed to have been unwrapped in a relative, internally self-consistent manner according to the statistical costs used. Regions that are smaller than a preselected threshold are masked out. Parameters for this option can be set in the configuration file. The connected component file is composed of unsigned characters, with all pixels of the same value belonging to the same connected component and zero corresponding to masked pixels. .TP .B \-G \fImaskfile\fP Grow a connected component mask (see the \fB\-g\fP option) for the input data array, assuming that it is already unwrapped, and write the mask to the file \fImaskfile\fP. Statistical cost functions are computed for forming the mask, but a new unwrapped solution is not computed. .TP .B \-h Print a help message summarizing command-line options and exit. .TP .B \-i Run in initialize-only mode. Normally, \fBsnaphu\fP uses either an approximate minimum spanning tree (MST) algorithm or a minimum cost flow (MCF) algorithm for generating the initialization to its iterative, modified network-simplex solver. If \fB\-i\fP is given, the initialization is written to the output and the program exits without running the iterative solver. .TP \fB\-l\fP \fIlogfile\fP Log all runtime parameters and some other environment information into the specified file. The log file is a text file in the same format as a configuration file. .TP \fB\-m\fP \fImagfile\fP Read interferogram magnitude data from the specified file. This option is useful mainly if the wrapped-phase input file is given as a set of real phase values rather than complex interferogram values. The interferogram magnitude is used to form a coherence estimate if appropriate amplitude data are given as well. The default file format is FLOAT_DATA. If the formats ALT_LINE_DATA or ALT_SAMPLE_DATA are used, the magnitude should be in the first data channel of the file; the second channel is ignored. If the COMPLEX_DATA format is used, the phase information is ignored. .TP .B \-n Run in no-statistical-costs mode. If the \fB\-i\fP or \fB\-p\fP options are given, \fBsnaphu\fP will not use statistical costs. Information from a weight file (\fB\-w\fP option) will still be used if given. .TP \fB\-o\fP \fIoutfile\fP Write the unwrapped output to file called \fIoutfile\fP. If the file formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA are used, the unwrapped phase is written into the second data channel, while the interferogram magnitude is written into the first channel. The format FLOAT_DATA may also be used. .TP \fB\-p\fP \fIvalue\fP Run in Lp-norm mode with p=\fIvalue\fP, where \fIvalue\fP is a nonnegative decimal. Instead of statistical cost functions, the program uses Lp cost functions with statistically based weights (unless \fB\-n\fP is also given). Solutions are still always congruent. Moreover, congruence is enforced within the solver routine, not as a post-optimization processing step. Therefore, if p=2, for example, least-squares cost functions are used, but the solution will probably be more accurate than one generated from a transform-based least-squares algorithm. .TP .B \-q Run in quantify-only mode. The input data are assumed to be unwrapped already, and the total cost of this solution is calculated and printed. The unwrapped phase is wrapped assuming congruence for the cost calculation. Round-off errors may limit the precision of the quantified cost. See the \fB\-u\fP option for allowable file formats. .TP .B \-s Run in smooth-solution mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents a generic surface with no discontinuities. This is the same as deformation mode with the DEFOMAX parameter set to zero. .TP .B \-t Run in topography mode. The problem statistics and resulting cost functions are based on the assumption that the true unwrapped phase represents surface elevation. This is the default. .TP .B \-u Assume that the input file is unwrapped rather than wrapped. The algorithm makes iterative improvements to this solution instead of using an initialization routine. The input file may be in the formats ALT_LINE_DATA (default) or ALT_SAMPLE_DATA; the interferogram magnitude should be in the first data channel and the unwrapped phase should be in the second data channel. The format FLOAT_DATA may also be used. .TP .B \-v Run in verbose mode. Extra information on the algorithm's progress is printed to the standard output. .TP \fB\-w\fP \fIweightfile\fP Read external, scalar weights from file \fIweightfile\fP. The weights, which should be positive short integers, are applied to whichever cost functions are used. There is one weight value for each arc in the network, so \fIweightfile\fP should be the concatenation of raster horizontal-flow and vertical-flow arc weights. Thus, for an N row by M column interferogram, \fIweightfile\fP would consist of a rasterized (N-1) by M array followed by a rasterized N by (M-1) array of short integer data. This option is not well tested. .TP \fB\-\-aa\fP \fIampfile1 ampfile2\fP Amplitude data are read from the files specified. The data from the two individual SAR images forming the interferogram are assumed to be separately stored in files \fIampfile1\fP and \fIampfile2\fP. These files should be in the format FLOAT_DATA. This option is similar to the \fB\-a\fP option. .TP \fB\-\-AA\fP \fIpwrfile1 pwrfile2\fP Similar to the \fB\-\-aa\fP option, but power data are read from the specified files. .TP \fB\-\-assemble \fIdirname\fP Assemble the tile-mode temporary files in the specified directory. Most configuration options (from the command line and any configuration files) must be specified. This option is useful if the user wishes to modify tile-assembly parameters without unwrapping the individual tiles over again. .TP .B \-\-copyright, \-\-info Print the software copyright notice and bug report info, then exit. .TP \fB\-\-costinfile\fP \fIcostfile\fP Read statistical cost arrays from file \fIcostfile\fP. This file should be in the format written by the \fB\-\-costoutfile\fP option. The cost file does not control whether \fBsnaphu\fP runs in topography, deformation, or smooth-solution mode; the latter two must be specified explicitly even if \fIcostfile\fP was generated while running in those modes. .TP \fB\-\-costoutfile\fP \fIcostfile\fP Write statistical cost arrays to file \fIcostfile\fP. This option can be used with the \fB\-\-costinfile\fP option to save the time of generating statistical costs if the same costs are used multiple times. .TP .B \-\-debug, \-\-dumpall Dump all sorts of intermediate arrays to files. .TP .B \-\-mst Use a minimum spanning tree (MST) algorithm for the initialization. This is the default. .TP .B \-\-mcf Use a minimum cost flow (MCF) algorithm for the initialization. The cs2 solver by Goldberg and Cherkassky is used. The modified network-simplex solver in L1 mode may give different results than the cs2 solver, though in principle both should be L1 optimal. .TP .B \-\-nproc \fIn\fP Use \fIn\fP parallel processes when in tile mode. The program forks a new process for each tile so that tiles can be unwrapped in parallel; at most \fIn\fP processes will run concurrently. Forking is done before data is read. The standard output streams of child processes are directed to log files in the temporary tile directory. .TP .B \-\-piece \fIfirstrow firstcol nrow ncol\fP Read and unwrap only a subset or part of the input interferogram. The read piece is the \fInrow\fP by \fIncol\fP rectangle whose upper left corner is the pixel at row \fIfirstrow\fP and column \fIfirstcol\fP (indexed from 1). All input files (such as amplitude, coherence, etc.) are assumed to be the same size as the input phase file. All output files are \fInrow\fP by \fIncol\fP. .TP .B \-\-tile \fIntilerow ntilecol rowovrlp colovrlp\fP Unwrap the interferogram in tile mode. The interferogram is partitioned into \fIntilerow\fP by \fIntilecol\fP tiles, each of which is unwrapped independently. Tiles overlap by \fIrowovrlp\fP and \fIcolovrlp\fP pixels in the row and column directions. The tiles are then segmented into reliable regions based on the cost functions, and the regions are reassembled. The program creates a subdirectory for temporary files in the directory of the eventual output file. This option is currently enabled only for statistical cost functions. .SH FILE FORMATS The formats of input files may be specified in a configuration file. All of these formats are composed of raster, single-precision (float, real*4, or complex*8) floating-point data types in the platform's native byte order. Data are read line by line (across then down). Regardless of the file format, all input data arrays should have the same number of samples in width and depth and should be coregistered to one another. Note that weight files and cost files have their own formats. The allowable formats for other data files are described below. .TP COMPLEX_DATA Alternating floats correspond to the real (in-phase) and imaginary (quadrature) components of complex data samples. The specified line length should be the number of complex samples (pairs of real and imaginary samples) per line. .TP ALT_LINE_DATA Alternating lines (rows) of data correspond to lines of purely real data from two separate arrays. The first array is often the magnitude of the interferogram, and the second may be unwrapped phase, coherence, etc. This is also sometimes called \fBhgt\fP or line-interleaved format. .TP ALT_SAMPLE_DATA Alternating samples correspond to purely real samples from two separate arrays. This format is sometimes used for the amplitudes of the two SAR images. .TP FLOAT_DATA The file contains data for only one channel or array, and the data are purely real. .SH EXAMPLES Unwrap a wrapped topographic interferogram called ``wrappedfile'' whose line length is 1024 complex samples (output will be written to a file whose name is compiled into the program): .nf snaphu wrappedfile 1024 .fi Unwrap the same file as above, but use brightness information from the file ``ampfile,'' set the perpendicular baseline to -165 m at midswath, and place the output in a file called ``unwrappedfile'' (coherence data are generated automatically if ``wrappedfile'' contains complex data and ``ampfile'' contains amplitude data from both SAR images): .nf snaphu wrappedfile 1024 -a ampfile \\\ -b -165 -o unwrappedfile .fi Unwrap the interferogram as above, but read correlation information from the file ``corrfile'' instead of generating it from the interferogram and amplitude data: .nf snaphu wrappedfile 1024 -a ampfile -c corrfile \\\ -b -165 -o unwrappedfile .fi The following is equivalent to the previous example, but input parameters are read from a configuration file, and verbose output is displayed: .nf cat > configfile # This is a comment line which will be ignored AMPFILE ampfile CORRFILE corrfile BPERP -165 OUTFILE unwrappedfile snaphu -v -f configfile wrappedfile 1024 .fi Unwrap the same interferogram, but use only the MST initialization (with scalar statistical weights) and write the output to ``mstfile'': .nf snaphu -f configfile -i wrappedfile 1024 -o mstfile .fi Read the unwrapped data in ``mstfile'' and use that as the initialization to the modified network-simplex solver: .nf snaphu -f configfile -u mstfile 1024 -o unwrappedfile .fi Note that in the previous two examples, the output file name in the configuration file is overrided by the one given on the command line. The previous two commands together are in principle equivalent to the preceding one, although round-off errors in flow-to-phase conversions may cause minor differences Unwrap the interferogram as above, but use the MCF algorithm for initialization: .nf snaphu -f configfile wrappedfile 1024 --mcf .fi Unwrap the interferogram once again, but first flatten it with the unwrapped data in ``estfile,'' then reinsert the subtracted phase after unwrapping: .nf snaphu -f configfile wrappedfile 1024 -e estfile .fi The following assumes that the wrapped input interferogram measures deformation, not topography. Unwrap the interferogram with the given correlation data: .nf snaphu -d wrappedfile 1024 -c corrfile .fi Unwrap the input interferogram by minimizing the unweighted congruent L2 norm: .nf snaphu -p 2 -n wrappedfile 1024 .fi Unwrap the interferogram as a three-by-four set of tiles that overlap by 30 pixels, with the specified configuration file, using two processors: .nf snaphu wrappedfile 1024 -f configfile \\\ --tile 3 4 30 30 --nproc 2 .fi .SH "HINTS AND TIPS" The program may print a warning message about costs being clipped to avoid overflow. If too many costs are clipped, the value of COSTSCALE may need to be decreased in a configuration file (via the \fB\-f\fR option). If the program prints a warning message about an unexpected increase in the total solution cost, this is an indication that too many costs are clipped. It is usually okay if just a few costs are clipped. In topography mode, if the unwrapped result contains too many discontinuities, try increasing the value of LAYMINEI or decreasing the value of LAYCONST. The former determines the normalized intensity threshold for layover, and the latter is the relative layover probability. If there are too many discontinuities running in azimuth, try decreasing the value of AZDZFACTOR, which affects the ratio of azimuth to range costs. If the baseline is not known, take a guess at it and be sure its sign is correct. Specify the SAR imaging geometry parameters as well as possible. The defaults assume ERS data with five looks taken in azimuth. In deformation mode, if the unwrapped result contains too many discontinuities, try increasing the value of DEFOTHRESHFACTOR or decreasing the value of DEFOCONST. If the surface displacement varies slowly and true discontinuities are not expected at all, DEFOMAX_CYCLE can be set to zero. This behavior is also invoked with the \fB\-s\fR option. The resulting cost functions will be similar to correlation-weighted L2 cost functions, though the former are not necessarily centered on the wrapped gradients. Congruence is still enforced during rather than after optimization. The program can be run in initialize-only (\fB\-i\fR) mode for quick down-and-dirty MST or MCF solutions. .SH SIGNALS Once the iterative solver has started, \fBsnaphu\fR traps the interrupt (INT) and hangup (HUP) signals. Upon receiving an interrupt, for example if the user types Ctrl-C, the program finishes a minor iteration, dumps its current solution to the output, and exits. If a second interrupt is given after the first (caught) interrupt, the program exits immediately. If a hangup signal is received, the program dumps its current solution then continues to execute normally. .SH "EXIT STATUS" Upon successful termination, the program exits with code 0. Errors result in exit code 1. .SH FILES The following files may be useful for reference, but are not required. They are included in the program source distribution and may be installed somewhere on the system. .TP \fIsnaphu.conf.full\fP Template configuration file setting all valid input parameters (though some may be commented out). .TP \fIsnaphu.conf.brief\fP General-purpose template configuration file setting the most important or commonly modified input parameters. .PP In addition to parameters read from configuration files specified on the command line, default parameters may be read from a system-wide configuration file if such a file is named when the program is compiled. .SH BUGS The \fB\-w\fR option has not been tested exhaustively. Extreme shadow discontinuities (i.e., abrupt elevation drops in increasing range due to cliffs facing away from the radar) are not modeled that well in the cost functions for topography mode. Abrupt changes in surface reflectivity, such as those of coastlines between bright land and dark water, might be misinterpreted as layover and assigned inappropriate costs. The algorithm's behavior may be unpredictable if the costs are badly scaled and excessively clipped to fit into their short-integer data types. There is no error checking that ensures that the network node potentials (incost and outcost) do not overflow their long-integer data types. Automatic flow clipping is built into the MST initialization, but it can give erratic results and may loop infinitely for certain input data sets. It is consequently turned off by default. Dedicated programs for specific Lp objective functions may work better than \fBsnaphu\fR in Lp mode. Note that snaphu enforces congruence as part of the problem formulation, however, not as a post-optimization processing step. .SH REFERENCES C. W. Chen and H. A. Zebker, ``Two-dimensional phase unwrapping with use of statistical models for cost functions in nonlinear optimization,'' \fIJournal of the Optical Society of America A\fP, \fB18\fP, 338-351 (2001). C. W. Chen and H. A. Zebker, ``Network approaches to two-dimensional phase unwrapping: intractability and two new algorithms,'' \fIJournal of the Optical Society of America A\fP, \fB17\fP, 401-414 (2000). C. W. Chen and H. A. Zebker, ``Phase unwrapping for large SAR interferograms: Statistical segmentation and generalized network models,'' \fIIEEE Transactions on Geoscience and Remote Sensing\fP, \fB40\fP, 1709-1719 (2002). GMTSAR_V5.7/.svn/pristine/b3/b309caf2d8b6a8a4c55943ab88ccda42da825202.svn-base000444 015705 000000 00000226617 13505462013 026025 0ustar00sandwellwheel000000 000000 %!PS-Adobe-3.0 EPSF-3.0 %%Creator: (MATLAB, The Mathworks, Inc. Version 8.4.0.150421 \(R2014b\). Operating System: Mac OS X) %%Title: ./shifted.eps %%CreationDate: 2015-10-16T16:37:04 %%Pages: (atend) %%BoundingBox: (atend) %%LanguageLevel: 3 %%EndComments %%BeginProlog %%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.2 0 %%Version: 1.2 0 %%Copyright: (Copyright 2001-2003,2010 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) /bd{bind def}bind def /ld{load def}bd /GR/grestore ld /M/moveto ld /LJ/setlinejoin ld /C/curveto ld /f/fill ld /LW/setlinewidth ld /GC/setgray ld /t/show ld /N/newpath ld /CT/concat ld /cp/closepath ld /S/stroke ld /L/lineto ld /CC/setcmykcolor ld /A/ashow ld /GS/gsave ld /RC/setrgbcolor ld /RM/rmoveto ld /ML/setmiterlimit ld /re {4 2 roll M 1 index 0 rlineto 0 exch rlineto neg 0 rlineto cp } bd /_ctm matrix def /_tm matrix def /BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd /ET { _ctm setmatrix } bd /iTm { _ctm setmatrix _tm concat } bd /Tm { _tm astore pop iTm 0 0 moveto } bd /ux 0.0 def /uy 0.0 def /F { /Tp exch def /Tf exch def Tf findfont Tp scalefont setfont /cf Tf def /cs Tp def } bd /ULS {currentpoint /uy exch def /ux exch def} bd /ULE { /Tcx currentpoint pop def gsave newpath cf findfont cs scalefont dup /FontMatrix get 0 get /Ts exch def /FontInfo get dup /UnderlinePosition get Ts mul /To exch def /UnderlineThickness get Ts mul /Tt exch def ux uy To add moveto Tcx uy To add lineto Tt setlinewidth stroke grestore } bd /OLE { /Tcx currentpoint pop def gsave newpath cf findfont cs scalefont dup /FontMatrix get 0 get /Ts exch def /FontInfo get dup /UnderlinePosition get Ts mul /To exch def /UnderlineThickness get Ts mul /Tt exch def ux uy To add cs add moveto Tcx uy To add cs add lineto Tt setlinewidth stroke grestore } bd /SOE { /Tcx currentpoint pop def gsave newpath cf findfont cs scalefont dup /FontMatrix get 0 get /Ts exch def /FontInfo get dup /UnderlinePosition get Ts mul /To exch def /UnderlineThickness get Ts mul /Tt exch def ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto Tt setlinewidth stroke grestore } bd /QT { /Y22 exch store /X22 exch store /Y21 exch store /X21 exch store currentpoint /Y21 load 2 mul add 3 div exch /X21 load 2 mul add 3 div exch /X21 load 2 mul /X22 load add 3 div /Y21 load 2 mul /Y22 load add 3 div /X22 load /Y22 load curveto } bd /SSPD { dup length /d exch dict def { /v exch def /k exch def currentpagedevice k known { /cpdv currentpagedevice k get def v cpdv ne { /upd false def /nullv v type /nulltype eq def /nullcpdv cpdv type /nulltype eq def nullv nullcpdv or { /upd true def } { /sametype v type cpdv type eq def sametype { v type /arraytype eq { /vlen v length def /cpdvlen cpdv length def vlen cpdvlen eq { 0 1 vlen 1 sub { /i exch def /obj v i get def /cpdobj cpdv i get def obj cpdobj ne { /upd true def exit } if } for } { /upd true def } ifelse } { v type /dicttype eq { v { /dv exch def /dk exch def /cpddv cpdv dk get def dv cpddv ne { /upd true def exit } if } forall } { /upd true def } ifelse } ifelse } if } ifelse upd true eq { d k v put } if } if } if } forall d length 0 gt { d setpagedevice } if } bd %%EndResource %%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0 %%Version: 1.0 0 %%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) /BeginEPSF { %def /b4_Inc_state save def % Save state for cleanup /dict_count countdictstack def % Count objects on dict stack /op_count count 1 sub def % Count objects on operand stack userdict begin % Push userdict on dict stack /showpage { } def % Redefine showpage, { } = null proc 0 setgray 0 setlinecap % Prepare graphics state 1 setlinewidth 0 setlinejoin 10 setmiterlimit [ ] 0 setdash newpath /languagelevel where % If level not equal to 1 then {pop languagelevel % set strokeadjust and 1 ne % overprint to their defaults. {false setstrokeadjust false setoverprint } if } if } bd /EndEPSF { %def count op_count sub {pop} repeat % Clean up stacks countdictstack dict_count sub {end} repeat b4_Inc_state restore } bd %%EndResource %FOPBeginFontDict %%IncludeResource: font Courier-Bold %%IncludeResource: font Helvetica %%IncludeResource: font Courier-BoldOblique %%IncludeResource: font Courier-Oblique %%IncludeResource: font Times-Roman %%IncludeResource: font Helvetica-BoldOblique %%IncludeResource: font Helvetica-Bold %%IncludeResource: font Helvetica-Oblique %%IncludeResource: font Times-BoldItalic %%IncludeResource: font Courier %%IncludeResource: font Times-Italic %%IncludeResource: font Times-Bold %%IncludeResource: font Symbol %%IncludeResource: font ZapfDingbats %FOPEndFontDict %%BeginResource: encoding WinAnsiEncoding /WinAnsiEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /bullet /Euro /bullet /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /bullet /Zcaron /bullet /bullet /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash /asciitilde /trademark /scaron /guilsinglright /oe /bullet /zcaron /Ydieresis /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /sfthyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /middot /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def %%EndResource %FOPBeginFontReencode /Courier-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Courier-Bold exch definefont pop /Helvetica findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Helvetica exch definefont pop /Courier-BoldOblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Courier-BoldOblique exch definefont pop /Courier-Oblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Courier-Oblique exch definefont pop /Times-Roman findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Times-Roman exch definefont pop /Helvetica-BoldOblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Helvetica-BoldOblique exch definefont pop /Helvetica-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Helvetica-Bold exch definefont pop /Helvetica-Oblique findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Helvetica-Oblique exch definefont pop /Times-BoldItalic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Times-BoldItalic exch definefont pop /Courier findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Courier exch definefont pop /Times-Italic findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Times-Italic exch definefont pop /Times-Bold findfont dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding WinAnsiEncoding def currentdict end /Times-Bold exch definefont pop %FOPEndFontReencode %%EndProlog %%Page: 1 1 %%PageBoundingBox: 0 0 576 432 %%BeginPageSetup [1 0 0 -1 0 432] CT %%EndPageSetup GS 1 GC N 0 0 576 432 re f GR GS 1 GC N 0 0 576 432 re f GR GS 1 GC N 75 180 M 521 180 L 521 32 L 75 32 L cp f GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 180 M 521 180 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 32 M 521 32 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 180 M 75 175.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 32 M 75 36.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 149.333 180 M 149.333 175.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 149.333 32 M 149.333 36.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 223.667 180 M 223.667 175.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 223.667 32 M 223.667 36.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 298 180 M 298 175.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 298 32 M 298 36.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 372.333 180 M 372.333 175.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 372.333 32 M 372.333 36.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 446.667 180 M 446.667 175.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 446.667 32 M 446.667 36.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 180 M 521 175.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 32 M 521 36.46 L S GR GS [1 0 0 1 75 184] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -2.781 7.7 moveto 1 -1 scale (0) t GR GR GS [1 0 0 1 149.33333 184] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -8.342 7.7 moveto 1 -1 scale (200) t GR GR GS [1 0 0 1 223.66667 184] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -8.342 7.7 moveto 1 -1 scale (400) t GR GR GS [1 0 0 1 298 184] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -8.342 7.7 moveto 1 -1 scale (600) t GR GR GS [1 0 0 1 372.33334 184] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -8.342 7.7 moveto 1 -1 scale (800) t GR GR GS [1 0 0 1 446.66666 184] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -11.123 7.7 moveto 1 -1 scale (1000) t GR GR GS [1 0 0 1 521 184] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -11.123 7.7 moveto 1 -1 scale (1200) t GR GR GS [0 -1 1 0 50.76855 106] CT 0.149 GC /Helvetica 11 F GS [1 0 0 1 0 0] CT -9.171 -1.53 moveto 1 -1 scale (real) t GR GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 180 M 75 32 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 180 M 521 32 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 180 M 79.46 180 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 180 M 516.54 180 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 143 M 79.46 143 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 143 M 516.54 143 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 106 M 79.46 106 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 106 M 516.54 106 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 69 M 79.46 69 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 69 M 516.54 69 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 32 M 79.46 32 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 32 M 516.54 32 L S GR GS [1 0 0 1 71 180] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -8.892 3.2 moveto 1 -1 scale (-1) t GR GR GS [1 0 0 1 71 143] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -17.231 3.2 moveto 1 -1 scale (-0.5) t GR GR GS [1 0 0 1 71 106] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -5.562 3.2 moveto 1 -1 scale (0) t GR GR GS [1 0 0 1 71 69] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -13.901 3.2 moveto 1 -1 scale (0.5) t GR GR GS [1 0 0 1 71 32] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -5.562 3.2 moveto 1 -1 scale (1) t GR GR GS 2 setlinecap 10.0 ML N 75 106 M 75.372 106 L 75.743 106 L 76.115 106 L 76.487 106 L 76.858 106 L 77.23 106 L 77.602 106 L 77.973 106 L 78.345 106 L 78.717 106 L 79.088 106 L 79.46 106 L 79.832 106 L 80.203 106 L 80.575 106 L 80.947 106 L 81.318 106 L 81.69 106 L 82.062 106 L 82.433 106 L 82.805 106 L 83.177 106 L 83.548 106 L 83.92 106 L 84.292 106 L 84.663 106 L 85.035 106 L 85.407 106 L 85.778 106 L 86.15 106 L 86.522 106 L 86.893 106 L 87.265 106 L 87.637 106 L 88.008 106 L 88.38 106 L 88.752 106 L 89.123 106 L 89.495 106 L 89.867 106 L 90.238 106 L 90.61 106 L 90.982 106 L 91.353 106 L 91.725 106 L 92.097 106 L 92.468 106 L 92.84 106 L 93.212 106 L 93.583 106 L 93.955 106 L 94.327 106 L 94.698 106 L 95.07 106 L 95.442 106 L 95.813 106 L 96.185 106 L 96.557 106 L 96.928 106 L 97.3 106 L 97.672 106 L 98.043 106 L 98.415 106 L 98.787 106 L 99.158 106 L 99.53 106 L 99.902 106 L 100.273 106 L 100.645 106 L 101.017 106 L 101.388 106 L 101.76 106 L 102.132 106 L 102.503 106 L 102.875 106 L 103.247 106 L 103.618 106 L 103.99 106 L 104.362 106 L 104.733 106 L 105.105 106 L 105.477 106 L 105.848 106 L 106.22 106 L 106.592 106 L 106.963 106 L 107.335 106 L 107.707 106 L 108.078 106 L 108.45 106 L 108.822 106 L 109.193 106 L 109.565 106 L 109.937 106 L 110.308 106 L 110.68 106 L 111.052 106 L 111.423 106 L 111.795 106 L 112.167 106 L 112.538 106 L 112.91 106 L 113.282 106 L 113.653 106 L 114.025 106 L 114.397 106 L 114.768 106 L 115.14 106 L 115.512 106 L 115.883 106 L 116.255 106 L 116.627 106 L 116.998 106 L 117.37 106 L 117.742 106 L 118.113 106 L 118.485 106 L 118.857 106 L 119.228 106 L 119.6 106 L 119.972 106 L 120.343 106 L 120.715 106 L 121.087 106 L 121.458 106 L 121.83 106 L 122.202 106 L 122.573 106 L 122.945 106 L 123.317 106 L 123.688 106 L 124.06 106 L 124.432 106 L 124.803 106 L 125.175 106 L 125.547 106 L 125.918 106 L 126.29 106 L 126.662 106 L 127.033 106 L 127.405 106 L 127.777 106 L 128.148 106 L 128.52 106 L 128.892 106 L 129.263 106 L 129.635 106 L 130.007 106 L 130.378 106 L 130.75 106 L 131.122 106 L 131.493 106 L 131.865 106 L 132.237 106 L 132.608 106 L 132.98 106 L 133.352 106 L 133.723 106 L 134.095 106 L 134.467 106 L 134.838 106 L 135.21 106 L 135.582 106 L 135.953 106 L 136.325 106 L 136.697 106 L 137.068 106 L 137.44 106 L 137.812 106 L 138.183 106 L 138.555 106 L 138.927 106 L 139.298 106 L 139.67 106 L 140.042 106 L 140.413 106 L 140.785 106 L 141.157 106 L 141.528 106 L 141.9 106 L 142.272 106 L 142.643 106 L 143.015 106 L 143.387 106 L 143.758 106 L 144.13 106 L 144.502 106 L 144.873 106 L 145.245 106 L 145.617 106 L 145.988 106 L 146.36 106 L 146.732 106 L 147.103 106 L 147.475 106 L 147.847 106 L 148.218 106 L 148.59 106 L 148.962 106 L 149.333 106 L 149.705 106 L 150.077 106 L 150.448 106 L 150.82 106 L 151.192 106 L 151.563 106 L 151.935 106 L 152.307 106 L 152.678 106 L 153.05 106 L 153.422 106 L 153.793 106 L 154.165 106 L 154.537 106 L 154.908 106 L 155.28 106 L 155.652 106 L 156.023 106 L 156.395 106 L 156.767 106 L 157.138 106 L 157.51 106 L 157.882 106 L 158.253 106 L 158.625 106 L 158.997 106 L 159.368 106 L 159.74 106 L 160.112 106 L 160.483 106 L 160.855 106 L 161.227 106 L 161.598 106 L 161.97 106 L 162.342 106 L 162.713 106 L 163.085 106 L 163.457 106 L 163.828 106 L 164.2 106 L 164.572 106 L 164.943 106 L 165.315 106 L 165.687 106 L 166.058 106 L 166.43 106 L 166.802 106 L 167.173 106 L 167.545 106 L 167.917 106 L 168.288 106 L 168.66 106 L 169.032 106 L 169.403 106 L 169.775 106 L 170.147 106 L 170.518 106 L 170.89 106 L 171.262 106 L 171.633 106 L 172.005 106 L 172.377 106 L 172.748 106 L 173.12 106 L 173.492 106 L 173.863 106 L 174.235 106 L 174.607 106 L 174.978 106 L 175.35 106 L 175.722 106 L 176.093 106 L 176.465 106 L 176.837 106 L 177.208 106 L 177.58 106 L 177.952 106 L 178.323 106 L 178.695 106 L 179.067 106 L 179.438 106 L 179.81 106 L 180.182 106 L 180.553 106 L 180.925 106 L 181.297 106 L 181.668 106 L 182.04 106 L 182.412 106 L 182.783 106 L 183.155 106 L 183.527 106 L 183.898 106 L 184.27 106 L 184.642 106 L 185.013 106 L 185.385 106 L 185.757 106 L 186.128 106 L 186.5 106 L 186.872 106 L 187.243 106 L 187.615 106 L 187.987 106 L 188.358 106 L 188.73 106 L 189.102 106 L 189.473 106 L 189.845 106 L 190.217 106 L 190.588 106 L 190.96 106 L 191.332 106 L 191.703 106 L 192.075 106 L 192.447 106 L 192.818 106 L 193.19 106 L 193.562 106 L 193.933 106 L 194.305 106 L 194.677 106 L 195.048 106 L 195.42 106 L 195.792 106 L 196.163 106 L 196.535 106 L 196.907 106 L 197.278 106 L 197.65 106 L 198.022 106 L 198.393 106 L 198.765 106 L 199.137 106 L 199.508 106 L 199.88 106 L 200.252 106 L 200.623 106 L 200.995 106 L 201.367 106 L 201.738 106 L 202.11 106 L 202.482 106 L 202.853 106 L 203.225 106 L 203.597 106 L 203.968 106 L 204.34 106 L 204.712 106 L 205.083 106 L 205.455 106 L 205.827 106 L 206.198 106 L 206.57 106 L 206.942 106 L 207.313 106 L 207.685 106 L 208.057 106 L 208.428 106 L 208.8 106 L 209.172 106 L 209.543 106 L 209.915 106 L 210.287 106 L 210.658 106 L 211.03 106 L 211.402 106 L 211.773 106 L 212.145 106 L 212.517 106 L 212.888 106 L 213.26 106 L 213.632 106 L 214.003 106 L 214.375 106 L 214.747 106 L 215.118 106 L 215.49 106 L 215.862 106 L 216.233 106 L 216.605 106 L 216.977 106 L 217.348 106 L 217.72 106 L 218.092 106 L 218.463 106 L 218.835 106 L 219.207 106 L 219.578 106 L 219.95 106 L 220.322 106 L 220.693 106 L 221.065 106 L 221.437 106 L 221.808 106 L 222.18 106 L 222.552 106 L 222.923 106 L 223.295 106 L 223.667 106 L 224.038 106 L 224.41 106 L 224.782 106 L 225.153 106 L 225.525 106 L 225.897 106 L 226.268 106 L 226.64 106 L 227.012 106 L 227.383 106 L 227.755 106 L 228.127 106 L 228.498 106 L 228.87 106 L 229.242 106 L 229.613 106 L 229.985 106 L 230.357 106 L 230.728 106 L 231.1 106 L 231.472 106 L 231.843 106 L 232.215 106 L 232.587 106 L 232.958 106 L 233.33 106 L 233.702 106 L 234.073 106 L 234.445 106 L 234.817 106 L 235.188 106 L 235.56 106 L 235.932 106 L 236.303 106 L 236.675 106 L 237.047 106 L 237.418 106 L 237.79 106 L 238.162 106 L 238.533 106 L 238.905 106 L 239.277 106 L 239.648 106 L 240.02 106 L 240.392 106 L 240.763 106 L 241.135 106 L 241.507 106 L 241.878 106 L 242.25 106 L 242.622 106 L 242.993 106 L 243.365 106 L 243.737 106 L 244.108 106 L 244.48 106 L 244.852 106 L 245.223 106 L 245.595 106 L 245.967 106 L 246.338 106 L 246.71 106 L 247.082 106 L 247.453 106 L 247.825 106 L 248.197 106 L 248.568 106 L 248.94 106 L 249.312 106 L 249.683 106 L 250.055 106 L 250.427 106 L 250.798 106 L 251.17 106 L 251.542 106 L 251.913 106 L 252.285 106 L 252.657 106 L 253.028 106 L 253.4 106 L 253.772 106 L 254.143 106 L 254.515 106 L 254.887 106 L 255.258 106 L 255.63 106 L 256.002 106 L 256.373 106 L 256.745 106 L 257.117 106 L 257.488 106 L 257.86 106 L 258.232 106 L 258.603 106 L 258.975 106 L 259.347 106 L 259.718 106 L 260.09 106 L 260.462 106 L 260.833 106 L 261.205 106 L 261.577 106 L 261.948 106 L 262.32 106 L 262.692 106.002 L 263.063 106.055 L 263.435 106.714 L 263.807 111.421 L 264.178 129.399 L 264.55 160.446 L 264.922 163.631 L 265.293 106 L 265.665 48.369 L 266.037 51.554 L 266.408 82.601 L 266.78 100.579 L 267.152 105.286 L 267.523 105.945 L 267.895 105.998 L 268.267 106 L 268.638 106 L 269.01 106 L 269.382 106 L 269.753 106 L 270.125 106 L 270.497 106 L 270.868 106 L 271.24 106 L 271.612 106 L 271.983 106 L 272.355 106 L 272.727 106 L 273.098 106 L 273.47 106 L 273.842 106 L 274.213 106 L 274.585 106 L 274.957 106 L 275.328 106 L 275.7 106 L 276.072 106 L 276.443 106 L 276.815 106 L 277.187 106 L 277.558 106 L 277.93 106 L 278.302 106 L 278.673 106 L 279.045 106 L 279.417 106 L 279.788 106 L 280.16 106 L 280.532 106 L 280.903 106 L 281.275 106 L 281.647 106 L 282.018 106 L 282.39 106 L 282.762 106 L 283.133 106 L 283.505 106 L 283.877 106 L 284.248 106 L 284.62 106 L 284.992 106 L 285.363 106 L 285.735 106 L 286.107 106 L 286.478 106 L 286.85 106 L 287.222 106 L 287.593 106 L 287.965 106 L 288.337 106 L 288.708 106 L 289.08 106 L 289.452 106 L 289.823 106 L 290.195 106 L 290.567 106 L 290.938 106 L 291.31 106 L 291.682 106 L 292.053 106 L 292.425 106 L 292.797 106 L 293.168 106 L 293.54 106 L 293.912 106 L 294.283 106 L 294.655 106 L 295.027 106 L 295.398 106 L 295.77 106 L 296.142 106 L 296.513 106 L 296.885 106 L 297.257 106 L 297.628 106 L 298 106 L 298.372 106 L 298.743 106 L 299.115 106 L 299.487 106 L 299.858 106 L 300.23 106 L 300.602 106 L 300.973 106 L 301.345 106 L 301.717 106 L 302.088 106 L 302.46 106 L 302.832 106 L 303.203 106 L 303.575 106 L 303.947 106 L 304.318 106 L 304.69 106 L 305.062 106 L 305.433 106 L 305.805 106 L 306.177 106 L 306.548 106 L 306.92 106 L 307.292 106 L 307.663 106 L 308.035 106 L 308.407 106 L 308.778 106 L 309.15 106 L 309.522 106 L 309.893 106 L 310.265 106 L 310.637 106 L 311.008 106 L 311.38 106 L 311.752 106 L 312.123 106 L 312.495 106 L 312.867 106 L 313.238 106 L 313.61 106 L 313.982 106 L 314.353 106 L 314.725 106 L 315.097 106 L 315.468 106 L 315.84 106 L 316.212 106 L 316.583 106 L 316.955 106 L 317.327 106 L 317.698 106 L 318.07 106 L 318.442 106 L 318.813 106 L 319.185 106 L 319.557 106 L 319.928 106 L 320.3 106 L 320.672 106 L 321.043 106 L 321.415 106 L 321.787 106 L 322.158 106 L 322.53 106 L 322.902 106 L 323.273 106 L 323.645 106 L 324.017 106 L 324.388 106 L 324.76 106 L 325.132 106 L 325.503 106 L 325.875 106 L 326.247 106 L 326.618 106 L 326.99 106 L 327.362 106 L 327.733 106 L 328.105 106 L 328.477 106 L 328.848 106 L 329.22 106 L 329.592 106 L 329.963 106 L 330.335 106 L 330.707 106 L 331.078 106 L 331.45 106 L 331.822 106 L 332.193 106 L 332.565 106 L 332.937 106 L 333.308 106 L 333.68 106 L 334.052 106 L 334.423 106 L 334.795 106 L 335.167 106 L 335.538 106 L 335.91 106 L 336.282 106 L 336.653 106 L 337.025 106 L 337.397 106 L 337.768 106 L 338.14 106 L 338.512 106 L 338.883 106 L 339.255 106 L 339.627 106 L 339.998 106 L 340.37 106 L 340.742 106 L 341.113 106 L 341.485 106 L 341.857 106 L 342.228 106 L 342.6 106 L 342.972 106 L 343.343 106 L 343.715 106 L 344.087 106 L 344.458 106 L 344.83 106 L 345.202 106 L 345.573 106 L 345.945 106 L 346.317 106 L 346.688 106 L 347.06 106 L 347.432 106 L 347.803 106 L 348.175 106 L 348.547 106 L 348.918 106 L 349.29 106 L 349.662 106 L 350.033 106 L 350.405 106 L 350.777 106 L 351.148 106 L 351.52 106 L 351.892 106 L 352.263 106 L 352.635 106 L 353.007 106 L 353.378 106 L 353.75 106 L 354.122 106 L 354.493 106 L 354.865 106 L 355.237 106 L 355.608 106 L 355.98 106 L 356.352 106 L 356.723 106 L 357.095 106 L 357.467 106 L 357.838 106 L 358.21 106 L 358.582 106 L 358.953 106 L 359.325 106 L 359.697 106 L 360.068 106 L 360.44 106 L 360.812 106 L 361.183 106 L 361.555 106 L 361.927 106 L 362.298 106 L 362.67 106 L 363.042 106 L 363.413 106 L 363.785 106 L 364.157 106 L 364.528 106 L 364.9 106 L 365.272 106 L 365.643 106 L 366.015 106 L 366.387 106 L 366.758 106 L 367.13 106 L 367.502 106 L 367.873 106 L 368.245 106 L 368.617 106 L 368.988 106 L 369.36 106 L 369.732 106 L 370.103 106 L 370.475 106 L 370.847 106 L 371.218 106 L 371.59 106 L 371.962 106 L 372.333 106 L 372.705 106 L 373.077 106 L 373.448 106 L 373.82 106 L 374.192 106 L 374.563 106 L 374.935 106 L 375.307 106 L 375.678 106 L 376.05 106 L 376.422 106 L 376.793 106 L 377.165 106 L 377.537 106 L 377.908 106 L 378.28 106 L 378.652 106 L 379.023 106 L 379.395 106 L 379.767 106 L 380.138 106 L 380.51 106 L 380.882 106 L 381.253 106 L 381.625 106 L 381.997 106 L 382.368 106 L 382.74 106 L 383.112 106 L 383.483 106 L 383.855 106 L 384.227 106 L 384.598 106 L 384.97 106 L 385.342 106 L 385.713 106 L 386.085 106 L 386.457 106 L 386.828 106 L 387.2 106 L 387.572 106 L 387.943 106 L 388.315 106 L 388.687 106 L 389.058 106 L 389.43 106 L 389.802 106 L 390.173 106 L 390.545 106 L 390.917 106 L 391.288 106 L 391.66 106 L 392.032 106 L 392.403 106 L 392.775 106 L 393.147 106 L 393.518 106 L 393.89 106 L 394.262 106 L 394.633 106 L 395.005 106 L 395.377 106 L 395.748 106 L 396.12 106 L 396.492 106 L 396.863 106 L 397.235 106 L 397.607 106 L 397.978 106 L 398.35 106 L 398.722 106 L 399.093 106 L 399.465 106 L 399.837 106 L 400.208 106 L 400.58 106 L 400.952 106 L 401.323 106 L 401.695 106 L 402.067 106 L 402.438 106 L 402.81 106 L 403.182 106 L 403.553 106 L 403.925 106 L 404.297 106 L 404.668 106 L 405.04 106 L 405.412 106 L 405.783 106 L 406.155 106 L 406.527 106 L 406.898 106 L 407.27 106 L 407.642 106 L 408.013 106 L 408.385 106 L 408.757 106 L 409.128 106 L 409.5 106 L 409.872 106 L 410.243 106 L 410.615 106 L 410.987 106 L 411.358 106 L 411.73 106 L 412.102 106 L 412.473 106 L 412.845 106 L 413.217 106 L 413.588 106 L 413.96 106 L 414.332 106 L 414.703 106 L 415.075 106 L 415.447 106 L 415.818 106 L 416.19 106 L 416.562 106 L 416.933 106 L 417.305 106 L 417.677 106 L 418.048 106 L 418.42 106 L 418.792 106 L 419.163 106 L 419.535 106 L 419.907 106 L 420.278 106 L 420.65 106 L 421.022 106 L 421.393 106 L 421.765 106 L 422.137 106 L 422.508 106 L 422.88 106 L 423.252 106 L 423.623 106 L 423.995 106 L 424.367 106 L 424.738 106 L 425.11 106 L 425.482 106 L 425.853 106 L 426.225 106 L 426.597 106 L 426.968 106 L 427.34 106 L 427.712 106 L 428.083 106 L 428.455 106 L 428.827 106 L 429.198 106 L 429.57 106 L 429.942 106 L 430.313 106 L 430.685 106 L 431.057 106 L 431.428 106 L 431.8 106 L 432.172 106 L 432.543 106 L 432.915 106 L 433.287 106 L 433.658 106 L 434.03 106 L 434.402 106 L 434.773 106 L 435.145 106 L 435.517 106 L 435.888 106 L 436.26 106 L 436.632 106 L 437.003 106 L 437.375 106 L 437.747 106 L 438.118 106 L 438.49 106 L 438.862 106 L 439.233 106 L 439.605 106 L 439.977 106 L 440.348 106 L 440.72 106 L 441.092 106 L 441.463 106 L 441.835 106 L 442.207 106 L 442.578 106 L 442.95 106 L 443.322 106 L 443.693 106 L 444.065 106 L 444.437 106 L 444.808 106 L 445.18 106 L 445.552 106 L 445.923 106 L 446.295 106 L 446.667 106 L 447.038 106 L 447.41 106 L 447.782 106 L 448.153 106 L 448.525 106 L 448.897 106 L 449.268 106 L 449.64 106 L 450.012 106 L 450.383 106 L 450.755 106 L 451.127 106 L 451.498 106 L 451.87 106 L 452.242 106 L 452.613 106 L 452.985 106 L 453.357 106 L 453.728 106 L 454.1 106 L 454.472 106 L 454.843 106 L 455.215 106 L S GR GS 1 0 0 RC 2 setlinecap 10.0 ML N 75 106 M 75.372 106 L 75.743 106 L 76.115 106 L 76.487 106 L 76.858 106 L 77.23 106 L 77.602 106 L 77.973 106 L 78.345 106 L 78.717 106 L 79.088 106 L 79.46 106 L 79.832 106 L 80.203 106 L 80.575 106 L 80.947 106 L 81.318 106 L 81.69 106 L 82.062 106 L 82.433 106 L 82.805 106 L 83.177 106 L 83.548 106 L 83.92 106 L 84.292 106 L 84.663 106 L 85.035 106 L 85.407 106 L 85.778 106 L 86.15 106 L 86.522 106 L 86.893 106 L 87.265 106 L 87.637 106 L 88.008 106 L 88.38 106 L 88.752 106 L 89.123 106 L 89.495 106 L 89.867 106 L 90.238 106 L 90.61 106 L 90.982 106 L 91.353 106 L 91.725 106 L 92.097 106 L 92.468 106 L 92.84 106 L 93.212 106 L 93.583 106 L 93.955 106 L 94.327 106 L 94.698 106 L 95.07 106 L 95.442 106 L 95.813 106 L 96.185 106 L 96.557 106 L 96.928 106 L 97.3 106 L 97.672 106 L 98.043 106 L 98.415 106 L 98.787 106 L 99.158 106 L 99.53 106 L 99.902 106 L 100.273 106 L 100.645 106 L 101.017 106 L 101.388 106 L 101.76 106 L 102.132 106 L 102.503 106 L 102.875 106 L 103.247 106 L 103.618 106 L 103.99 106 L 104.362 106 L 104.733 106 L 105.105 106 L 105.477 106 L 105.848 106 L 106.22 106 L 106.592 106 L 106.963 106 L 107.335 106 L 107.707 106 L 108.078 106 L 108.45 106 L 108.822 106 L 109.193 106 L 109.565 106 L 109.937 106 L 110.308 106 L 110.68 106 L 111.052 106 L 111.423 106 L 111.795 106 L 112.167 106 L 112.538 106 L 112.91 106 L 113.282 106 L 113.653 106 L 114.025 106 L 114.397 106 L 114.768 106 L 115.14 106 L 115.512 106 L 115.883 106 L 116.255 106 L 116.627 106 L 116.998 106 L 117.37 106 L 117.742 106 L 118.113 106 L 118.485 106 L 118.857 106 L 119.228 106 L 119.6 106 L 119.972 106 L 120.343 106 L 120.715 106 L 121.087 106 L 121.458 106 L 121.83 106 L 122.202 106 L 122.573 106 L 122.945 106 L 123.317 106 L 123.688 106 L 124.06 106 L 124.432 106 L 124.803 106 L 125.175 106 L 125.547 106 L 125.918 106 L 126.29 106 L 126.662 106 L 127.033 106 L 127.405 106 L 127.777 106 L 128.148 106 L 128.52 106 L 128.892 106 L 129.263 106 L 129.635 106 L 130.007 106 L 130.378 106 L 130.75 106 L 131.122 106 L 131.493 106 L 131.865 106 L 132.237 106 L 132.608 106 L 132.98 106 L 133.352 106 L 133.723 106 L 134.095 106 L 134.467 106 L 134.838 106 L 135.21 106 L 135.582 106 L 135.953 106 L 136.325 106 L 136.697 106 L 137.068 106 L 137.44 106 L 137.812 106 L 138.183 106 L 138.555 106 L 138.927 106 L 139.298 106 L 139.67 106 L 140.042 106 L 140.413 106 L 140.785 106 L 141.157 106 L 141.528 106 L 141.9 106 L 142.272 106 L 142.643 106 L 143.015 106 L 143.387 106 L 143.758 106 L 144.13 106 L 144.502 106 L 144.873 106 L 145.245 106 L 145.617 106 L 145.988 106 L 146.36 106 L 146.732 106 L 147.103 106 L 147.475 106 L 147.847 106 L 148.218 106 L 148.59 106 L 148.962 106 L 149.333 106 L 149.705 106 L 150.077 106 L 150.448 106 L 150.82 106 L 151.192 106 L 151.563 106 L 151.935 106 L 152.307 106 L 152.678 106 L 153.05 106 L 153.422 106 L 153.793 106 L 154.165 106 L 154.537 106 L 154.908 106 L 155.28 106 L 155.652 106 L 156.023 106 L 156.395 106 L 156.767 106 L 157.138 106 L 157.51 106 L 157.882 106 L 158.253 106 L 158.625 106 L 158.997 106 L 159.368 106 L 159.74 106 L 160.112 106 L 160.483 106 L 160.855 106 L 161.227 106 L 161.598 106 L 161.97 106 L 162.342 106 L 162.713 106 L 163.085 106 L 163.457 106 L 163.828 106 L 164.2 106 L 164.572 106 L 164.943 106 L 165.315 106 L 165.687 106 L 166.058 106 L 166.43 106 L 166.802 106 L 167.173 106 L 167.545 106 L 167.917 106 L 168.288 106 L 168.66 106 L 169.032 106 L 169.403 106 L 169.775 106 L 170.147 106 L 170.518 106 L 170.89 106 L 171.262 106 L 171.633 106 L 172.005 106 L 172.377 106 L 172.748 106 L 173.12 106 L 173.492 106 L 173.863 106 L 174.235 106 L 174.607 106 L 174.978 106 L 175.35 106 L 175.722 106 L 176.093 106 L 176.465 106 L 176.837 106 L 177.208 106 L 177.58 106 L 177.952 106 L 178.323 106 L 178.695 106 L 179.067 106 L 179.438 106 L 179.81 106 L 180.182 106 L 180.553 106 L 180.925 106 L 181.297 106 L 181.668 106 L 182.04 106 L 182.412 106 L 182.783 106 L 183.155 106 L 183.527 106 L 183.898 106 L 184.27 106 L 184.642 106 L 185.013 106 L 185.385 106 L 185.757 106 L 186.128 106 L 186.5 106 L 186.872 106 L 187.243 106 L 187.615 106 L 187.987 106 L 188.358 106 L 188.73 106 L 189.102 106 L 189.473 106 L 189.845 106 L 190.217 106 L 190.588 106 L 190.96 106 L 191.332 106 L 191.703 106 L 192.075 106 L 192.447 106 L 192.818 106 L 193.19 106 L 193.562 106 L 193.933 106 L 194.305 106 L 194.677 106 L 195.048 106 L 195.42 106 L 195.792 106 L 196.163 106 L 196.535 106 L 196.907 106 L 197.278 106 L 197.65 106 L 198.022 106 L 198.393 106 L 198.765 106 L 199.137 106 L 199.508 106 L 199.88 106 L 200.252 106 L 200.623 106 L 200.995 106 L 201.367 106 L 201.738 106 L 202.11 106 L 202.482 106 L 202.853 106 L 203.225 106 L 203.597 106 L 203.968 106 L 204.34 106 L 204.712 106 L 205.083 106 L 205.455 106 L 205.827 106 L 206.198 106 L 206.57 106 L 206.942 106 L 207.313 106 L 207.685 106 L 208.057 106 L 208.428 106 L 208.8 106 L 209.172 106 L 209.543 106 L 209.915 106 L 210.287 106 L 210.658 106 L 211.03 106 L 211.402 106 L 211.773 106 L 212.145 106 L 212.517 106 L 212.888 106 L 213.26 106 L 213.632 106 L 214.003 106 L 214.375 106 L 214.747 106 L 215.118 106 L 215.49 106 L 215.862 106 L 216.233 106 L 216.605 106 L 216.977 106 L 217.348 106 L 217.72 106 L 218.092 106 L 218.463 106 L 218.835 106 L 219.207 106 L 219.578 106 L 219.95 106 L 220.322 106 L 220.693 106 L 221.065 106 L 221.437 106 L 221.808 106 L 222.18 106 L 222.552 106 L 222.923 106 L 223.295 106 L 223.667 106 L 224.038 106 L 224.41 106 L 224.782 106 L 225.153 106 L 225.525 106 L 225.897 106 L 226.268 106 L 226.64 106 L 227.012 106 L 227.383 106 L 227.755 106 L 228.127 106 L 228.498 106 L 228.87 106 L 229.242 106 L 229.613 106 L 229.985 106 L 230.357 106 L 230.728 106 L 231.1 106 L 231.472 106 L 231.843 106 L 232.215 106 L 232.587 106 L 232.958 106 L 233.33 106 L 233.702 106 L 234.073 106 L 234.445 106 L 234.817 106 L 235.188 106 L 235.56 106 L 235.932 106 L 236.303 106 L 236.675 106 L 237.047 106 L 237.418 106 L 237.79 106 L 238.162 106 L 238.533 106 L 238.905 106 L 239.277 106 L 239.648 106 L 240.02 106 L 240.392 106 L 240.763 106 L 241.135 106 L 241.507 106 L 241.878 106 L 242.25 106 L 242.622 106 L 242.993 106 L 243.365 106 L 243.737 106 L 244.108 106 L 244.48 106 L 244.852 106 L 245.223 106 L 245.595 106 L 245.967 106 L 246.338 106 L 246.71 106 L 247.082 106 L 247.453 106 L 247.825 106 L 248.197 106 L 248.568 106 L 248.94 106 L 249.312 106 L 249.683 106 L 250.055 106 L 250.427 106 L 250.798 106 L 251.17 106 L 251.542 106 L 251.913 106 L 252.285 106 L 252.657 106 L 253.028 106 L 253.4 106 L 253.772 106 L 254.143 106 L 254.515 106 L 254.887 106 L 255.258 106 L 255.63 106 L 256.002 106 L 256.373 106 L 256.745 106 L 257.117 106 L 257.488 106 L 257.86 106 L 258.232 106 L 258.603 106 L 258.975 106 L 259.347 106 L 259.718 106 L 260.09 106 L 260.462 106 L 260.833 106 L 261.205 106 L 261.577 106 L 261.948 106 L 262.32 106 L 262.692 106 L 263.063 106 L 263.435 106 L 263.807 106 L 264.178 106 L 264.55 106 L 264.922 106 L 265.293 106 L 265.665 106 L 266.037 106 L 266.408 106 L 266.78 106 L 267.152 106 L 267.523 106 L 267.895 106 L 268.267 106 L 268.638 106 L 269.01 106 L 269.382 106 L 269.753 106 L 270.125 106 L 270.497 106 L 270.868 106 L 271.24 106 L 271.612 106 L 271.983 106 L 272.355 106 L 272.727 106 L 273.098 106 L 273.47 106 L 273.842 106 L 274.213 106 L 274.585 106 L 274.957 105.999 L 275.328 106.001 L 275.7 105.999 L 276.072 106.001 L 276.443 105.999 L 276.815 106.001 L 277.187 105.999 L 277.558 106.001 L 277.93 105.999 L 278.302 106.001 L 278.673 105.999 L 279.045 106.002 L 279.417 105.998 L 279.788 106.002 L 280.16 105.998 L 280.532 106.003 L 280.903 105.997 L 281.275 106.004 L 281.647 106.008 L 282.018 106.217 L 282.39 108.102 L 282.762 118.12 L 283.133 144.771 L 283.505 169.254 L 283.877 140.75 L 284.248 71.25 L 284.62 42.746 L 284.992 67.229 L 285.363 93.88 L 285.735 103.898 L 286.107 105.783 L 286.478 105.992 L 286.85 105.996 L 287.222 106.003 L 287.593 105.997 L 287.965 106.002 L 288.337 105.998 L 288.708 106.002 L 289.08 105.998 L 289.452 106.001 L 289.823 105.999 L 290.195 106.001 L 290.567 105.999 L 290.938 106.001 L 291.31 105.999 L 291.682 106.001 L 292.053 105.999 L 292.425 106.001 L 292.797 105.999 L 293.168 106.001 L 293.54 105.999 L 293.912 106 L 294.283 106 L 294.655 106 L 295.027 106 L 295.398 106 L 295.77 106 L 296.142 106 L 296.513 106 L 296.885 106 L 297.257 106 L 297.628 106 L 298 106 L 298.372 106 L 298.743 106 L 299.115 106 L 299.487 106 L 299.858 106 L 300.23 106 L 300.602 106 L 300.973 106 L 301.345 106 L 301.717 106 L 302.088 106 L 302.46 106 L 302.832 106 L 303.203 106 L 303.575 106 L 303.947 106 L 304.318 106 L 304.69 106 L 305.062 106 L 305.433 106 L 305.805 106 L 306.177 106 L 306.548 106 L 306.92 106 L 307.292 106 L 307.663 106 L 308.035 106 L 308.407 106 L 308.778 106 L 309.15 106 L 309.522 106 L 309.893 106 L 310.265 106 L 310.637 106 L 311.008 106 L 311.38 106 L 311.752 106 L 312.123 106 L 312.495 106 L 312.867 106 L 313.238 106 L 313.61 106 L 313.982 106 L 314.353 106 L 314.725 106 L 315.097 106 L 315.468 106 L 315.84 106 L 316.212 106 L 316.583 106 L 316.955 106 L 317.327 106 L 317.698 106 L 318.07 106 L 318.442 106 L 318.813 106 L 319.185 106 L 319.557 106 L 319.928 106 L 320.3 106 L 320.672 106 L 321.043 106 L 321.415 106 L 321.787 106 L 322.158 106 L 322.53 106 L 322.902 106 L 323.273 106 L 323.645 106 L 324.017 106 L 324.388 106 L 324.76 106 L 325.132 106 L 325.503 106 L 325.875 106 L 326.247 106 L 326.618 106 L 326.99 106 L 327.362 106 L 327.733 106 L 328.105 106 L 328.477 106 L 328.848 106 L 329.22 106 L 329.592 106 L 329.963 106 L 330.335 106 L 330.707 106 L 331.078 106 L 331.45 106 L 331.822 106 L 332.193 106 L 332.565 106 L 332.937 106 L 333.308 106 L 333.68 106 L 334.052 106 L 334.423 106 L 334.795 106 L 335.167 106 L 335.538 106 L 335.91 106 L 336.282 106 L 336.653 106 L 337.025 106 L 337.397 106 L 337.768 106 L 338.14 106 L 338.512 106 L 338.883 106 L 339.255 106 L 339.627 106 L 339.998 106 L 340.37 106 L 340.742 106 L 341.113 106 L 341.485 106 L 341.857 106 L 342.228 106 L 342.6 106 L 342.972 106 L 343.343 106 L 343.715 106 L 344.087 106 L 344.458 106 L 344.83 106 L 345.202 106 L 345.573 106 L 345.945 106 L 346.317 106 L 346.688 106 L 347.06 106 L 347.432 106 L 347.803 106 L 348.175 106 L 348.547 106 L 348.918 106 L 349.29 106 L 349.662 106 L 350.033 106 L 350.405 106 L 350.777 106 L 351.148 106 L 351.52 106 L 351.892 106 L 352.263 106 L 352.635 106 L 353.007 106 L 353.378 106 L 353.75 106 L 354.122 106 L 354.493 106 L 354.865 106 L 355.237 106 L 355.608 106 L 355.98 106 L 356.352 106 L 356.723 106 L 357.095 106 L 357.467 106 L 357.838 106 L 358.21 106 L 358.582 106 L 358.953 106 L 359.325 106 L 359.697 106 L 360.068 106 L 360.44 106 L 360.812 106 L 361.183 106 L 361.555 106 L 361.927 106 L 362.298 106 L 362.67 106 L 363.042 106 L 363.413 106 L 363.785 106 L 364.157 106 L 364.528 106 L 364.9 106 L 365.272 106 L 365.643 106 L 366.015 106 L 366.387 106 L 366.758 106 L 367.13 106 L 367.502 106 L 367.873 106 L 368.245 106 L 368.617 106 L 368.988 106 L 369.36 106 L 369.732 106 L 370.103 106 L 370.475 106 L 370.847 106 L 371.218 106 L 371.59 106 L 371.962 106 L 372.333 106 L 372.705 106 L 373.077 106 L 373.448 106 L 373.82 106 L 374.192 106 L 374.563 106 L 374.935 106 L 375.307 106 L 375.678 106 L 376.05 106 L 376.422 106 L 376.793 106 L 377.165 106 L 377.537 106 L 377.908 106 L 378.28 106 L 378.652 106 L 379.023 106 L 379.395 106 L 379.767 106 L 380.138 106 L 380.51 106 L 380.882 106 L 381.253 106 L 381.625 106 L 381.997 106 L 382.368 106 L 382.74 106 L 383.112 106 L 383.483 106 L 383.855 106 L 384.227 106 L 384.598 106 L 384.97 106 L 385.342 106 L 385.713 106 L 386.085 106 L 386.457 106 L 386.828 106 L 387.2 106 L 387.572 106 L 387.943 106 L 388.315 106 L 388.687 106 L 389.058 106 L 389.43 106 L 389.802 106 L 390.173 106 L 390.545 106 L 390.917 106 L 391.288 106 L 391.66 106 L 392.032 106 L 392.403 106 L 392.775 106 L 393.147 106 L 393.518 106 L 393.89 106 L 394.262 106 L 394.633 106 L 395.005 106 L 395.377 106 L 395.748 106 L 396.12 106 L 396.492 106 L 396.863 106 L 397.235 106 L 397.607 106 L 397.978 106 L 398.35 106 L 398.722 106 L 399.093 106 L 399.465 106 L 399.837 106 L 400.208 106 L 400.58 106 L 400.952 106 L 401.323 106 L 401.695 106 L 402.067 106 L 402.438 106 L 402.81 106 L 403.182 106 L 403.553 106 L 403.925 106 L 404.297 106 L 404.668 106 L 405.04 106 L 405.412 106 L 405.783 106 L 406.155 106 L 406.527 106 L 406.898 106 L 407.27 106 L 407.642 106 L 408.013 106 L 408.385 106 L 408.757 106 L 409.128 106 L 409.5 106 L 409.872 106 L 410.243 106 L 410.615 106 L 410.987 106 L 411.358 106 L 411.73 106 L 412.102 106 L 412.473 106 L 412.845 106 L 413.217 106 L 413.588 106 L 413.96 106 L 414.332 106 L 414.703 106 L 415.075 106 L 415.447 106 L 415.818 106 L 416.19 106 L 416.562 106 L 416.933 106 L 417.305 106 L 417.677 106 L 418.048 106 L 418.42 106 L 418.792 106 L 419.163 106 L 419.535 106 L 419.907 106 L 420.278 106 L 420.65 106 L 421.022 106 L 421.393 106 L 421.765 106 L 422.137 106 L 422.508 106 L 422.88 106 L 423.252 106 L 423.623 106 L 423.995 106 L 424.367 106 L 424.738 106 L 425.11 106 L 425.482 106 L 425.853 106 L 426.225 106 L 426.597 106 L 426.968 106 L 427.34 106 L 427.712 106 L 428.083 106 L 428.455 106 L 428.827 106 L 429.198 106 L 429.57 106 L 429.942 106 L 430.313 106 L 430.685 106 L 431.057 106 L 431.428 106 L 431.8 106 L 432.172 106 L 432.543 106 L 432.915 106 L 433.287 106 L 433.658 106 L 434.03 106 L 434.402 106 L 434.773 106 L 435.145 106 L 435.517 106 L 435.888 106 L 436.26 106 L 436.632 106 L 437.003 106 L 437.375 106 L 437.747 106 L 438.118 106 L 438.49 106 L 438.862 106 L 439.233 106 L 439.605 106 L 439.977 106 L 440.348 106 L 440.72 106 L 441.092 106 L 441.463 106 L 441.835 106 L 442.207 106 L 442.578 106 L 442.95 106 L 443.322 106 L 443.693 106 L 444.065 106 L 444.437 106 L 444.808 106 L 445.18 106 L 445.552 106 L 445.923 106 L 446.295 106 L 446.667 106 L 447.038 106 L 447.41 106 L 447.782 106 L 448.153 106 L 448.525 106 L 448.897 106 L 449.268 106 L 449.64 106 L 450.012 106 L 450.383 106 L 450.755 106 L 451.127 106 L 451.498 106 L 451.87 106 L 452.242 106 L 452.613 106 L 452.985 106 L 453.357 106 L 453.728 106 L 454.1 106 L 454.472 106 L 454.843 106 L 455.215 106 L S GR GS 1 GC N 75 384 M 521 384 L 521 237 L 75 237 L cp f GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 384 M 521 384 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 237 M 521 237 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 384 M 75 379.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 237 M 75 241.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 149.333 384 M 149.333 379.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 149.333 237 M 149.333 241.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 223.667 384 M 223.667 379.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 223.667 237 M 223.667 241.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 298 384 M 298 379.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 298 237 M 298 241.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 372.333 384 M 372.333 379.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 372.333 237 M 372.333 241.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 446.667 384 M 446.667 379.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 446.667 237 M 446.667 241.46 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 384 M 521 379.54 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 237 M 521 241.46 L S GR GS [1 0 0 1 75 388] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -2.781 7.7 moveto 1 -1 scale (0) t GR GR GS [1 0 0 1 149.33333 388] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -8.342 7.7 moveto 1 -1 scale (200) t GR GR GS [1 0 0 1 223.66667 388] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -8.342 7.7 moveto 1 -1 scale (400) t GR GR GS [1 0 0 1 298 388] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -8.342 7.7 moveto 1 -1 scale (600) t GR GR GS [1 0 0 1 372.33334 388] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -8.342 7.7 moveto 1 -1 scale (800) t GR GR GS [1 0 0 1 446.66666 388] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -11.123 7.7 moveto 1 -1 scale (1000) t GR GR GS [1 0 0 1 521 388] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -11.123 7.7 moveto 1 -1 scale (1200) t GR GR GS [0 -1 1 0 50.76855 310.5] CT 0.149 GC /Helvetica 11 F GS [1 0 0 1 0 0] CT -11.921 -1.53 moveto 1 -1 scale (imag) t GR GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 384 M 75 237 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 384 M 521 237 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 384 M 79.46 384 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 384 M 516.54 384 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 347.25 M 79.46 347.25 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 347.25 M 516.54 347.25 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 310.5 M 79.46 310.5 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 310.5 M 516.54 310.5 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 273.75 M 79.46 273.75 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 273.75 M 516.54 273.75 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 75 237 M 79.46 237 L S GR GS 0.149 GC 2 setlinecap 10.0 ML N 521 237 M 516.54 237 L S GR GS [1 0 0 1 71 384] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -8.892 3.2 moveto 1 -1 scale (-1) t GR GR GS [1 0 0 1 71 347.25] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -17.231 3.2 moveto 1 -1 scale (-0.5) t GR GR GS [1 0 0 1 71 310.5] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -5.562 3.2 moveto 1 -1 scale (0) t GR GR GS [1 0 0 1 71 273.75] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -13.901 3.2 moveto 1 -1 scale (0.5) t GR GR GS [1 0 0 1 71 237] CT 0.149 GC /Helvetica 10 F GS [1 0 0 1 0 0] CT -5.562 3.2 moveto 1 -1 scale (1) t GR GR GS 2 setlinecap 10.0 ML N 75 310.5 M 75.372 310.5 L 75.743 310.5 L 76.115 310.5 L 76.487 310.5 L 76.858 310.5 L 77.23 310.5 L 77.602 310.5 L 77.973 310.5 L 78.345 310.5 L 78.717 310.5 L 79.088 310.5 L 79.46 310.5 L 79.832 310.5 L 80.203 310.5 L 80.575 310.5 L 80.947 310.5 L 81.318 310.5 L 81.69 310.5 L 82.062 310.5 L 82.433 310.5 L 82.805 310.5 L 83.177 310.5 L 83.548 310.5 L 83.92 310.5 L 84.292 310.5 L 84.663 310.5 L 85.035 310.5 L 85.407 310.5 L 85.778 310.5 L 86.15 310.5 L 86.522 310.5 L 86.893 310.5 L 87.265 310.5 L 87.637 310.5 L 88.008 310.5 L 88.38 310.5 L 88.752 310.5 L 89.123 310.5 L 89.495 310.5 L 89.867 310.5 L 90.238 310.5 L 90.61 310.5 L 90.982 310.5 L 91.353 310.5 L 91.725 310.5 L 92.097 310.5 L 92.468 310.5 L 92.84 310.5 L 93.212 310.5 L 93.583 310.5 L 93.955 310.5 L 94.327 310.5 L 94.698 310.5 L 95.07 310.5 L 95.442 310.5 L 95.813 310.5 L 96.185 310.5 L 96.557 310.5 L 96.928 310.5 L 97.3 310.5 L 97.672 310.5 L 98.043 310.5 L 98.415 310.5 L 98.787 310.5 L 99.158 310.5 L 99.53 310.5 L 99.902 310.5 L 100.273 310.5 L 100.645 310.5 L 101.017 310.5 L 101.388 310.5 L 101.76 310.5 L 102.132 310.5 L 102.503 310.5 L 102.875 310.5 L 103.247 310.5 L 103.618 310.5 L 103.99 310.5 L 104.362 310.5 L 104.733 310.5 L 105.105 310.5 L 105.477 310.5 L 105.848 310.5 L 106.22 310.5 L 106.592 310.5 L 106.963 310.5 L 107.335 310.5 L 107.707 310.5 L 108.078 310.5 L 108.45 310.5 L 108.822 310.5 L 109.193 310.5 L 109.565 310.5 L 109.937 310.5 L 110.308 310.5 L 110.68 310.5 L 111.052 310.5 L 111.423 310.5 L 111.795 310.5 L 112.167 310.5 L 112.538 310.5 L 112.91 310.5 L 113.282 310.5 L 113.653 310.5 L 114.025 310.5 L 114.397 310.5 L 114.768 310.5 L 115.14 310.5 L 115.512 310.5 L 115.883 310.5 L 116.255 310.5 L 116.627 310.5 L 116.998 310.5 L 117.37 310.5 L 117.742 310.5 L 118.113 310.5 L 118.485 310.5 L 118.857 310.5 L 119.228 310.5 L 119.6 310.5 L 119.972 310.5 L 120.343 310.5 L 120.715 310.5 L 121.087 310.5 L 121.458 310.5 L 121.83 310.5 L 122.202 310.5 L 122.573 310.5 L 122.945 310.5 L 123.317 310.5 L 123.688 310.5 L 124.06 310.5 L 124.432 310.5 L 124.803 310.5 L 125.175 310.5 L 125.547 310.5 L 125.918 310.5 L 126.29 310.5 L 126.662 310.5 L 127.033 310.5 L 127.405 310.5 L 127.777 310.5 L 128.148 310.5 L 128.52 310.5 L 128.892 310.5 L 129.263 310.5 L 129.635 310.5 L 130.007 310.5 L 130.378 310.5 L 130.75 310.5 L 131.122 310.5 L 131.493 310.5 L 131.865 310.5 L 132.237 310.5 L 132.608 310.5 L 132.98 310.5 L 133.352 310.5 L 133.723 310.5 L 134.095 310.5 L 134.467 310.5 L 134.838 310.5 L 135.21 310.5 L 135.582 310.5 L 135.953 310.5 L 136.325 310.5 L 136.697 310.5 L 137.068 310.5 L 137.44 310.5 L 137.812 310.5 L 138.183 310.5 L 138.555 310.5 L 138.927 310.5 L 139.298 310.5 L 139.67 310.5 L 140.042 310.5 L 140.413 310.5 L 140.785 310.5 L 141.157 310.5 L 141.528 310.5 L 141.9 310.5 L 142.272 310.5 L 142.643 310.5 L 143.015 310.5 L 143.387 310.5 L 143.758 310.5 L 144.13 310.5 L 144.502 310.5 L 144.873 310.5 L 145.245 310.5 L 145.617 310.5 L 145.988 310.5 L 146.36 310.5 L 146.732 310.5 L 147.103 310.5 L 147.475 310.5 L 147.847 310.5 L 148.218 310.5 L 148.59 310.5 L 148.962 310.5 L 149.333 310.5 L 149.705 310.5 L 150.077 310.5 L 150.448 310.5 L 150.82 310.5 L 151.192 310.5 L 151.563 310.5 L 151.935 310.5 L 152.307 310.5 L 152.678 310.5 L 153.05 310.5 L 153.422 310.5 L 153.793 310.5 L 154.165 310.5 L 154.537 310.5 L 154.908 310.5 L 155.28 310.5 L 155.652 310.5 L 156.023 310.5 L 156.395 310.5 L 156.767 310.5 L 157.138 310.5 L 157.51 310.5 L 157.882 310.5 L 158.253 310.5 L 158.625 310.5 L 158.997 310.5 L 159.368 310.5 L 159.74 310.5 L 160.112 310.5 L 160.483 310.5 L 160.855 310.5 L 161.227 310.5 L 161.598 310.5 L 161.97 310.5 L 162.342 310.5 L 162.713 310.5 L 163.085 310.5 L 163.457 310.5 L 163.828 310.5 L 164.2 310.5 L 164.572 310.5 L 164.943 310.5 L 165.315 310.5 L 165.687 310.5 L 166.058 310.5 L 166.43 310.5 L 166.802 310.5 L 167.173 310.5 L 167.545 310.5 L 167.917 310.5 L 168.288 310.5 L 168.66 310.5 L 169.032 310.5 L 169.403 310.5 L 169.775 310.5 L 170.147 310.5 L 170.518 310.5 L 170.89 310.5 L 171.262 310.5 L 171.633 310.5 L 172.005 310.5 L 172.377 310.5 L 172.748 310.5 L 173.12 310.5 L 173.492 310.5 L 173.863 310.5 L 174.235 310.5 L 174.607 310.5 L 174.978 310.5 L 175.35 310.5 L 175.722 310.5 L 176.093 310.5 L 176.465 310.5 L 176.837 310.5 L 177.208 310.5 L 177.58 310.5 L 177.952 310.5 L 178.323 310.5 L 178.695 310.5 L 179.067 310.5 L 179.438 310.5 L 179.81 310.5 L 180.182 310.5 L 180.553 310.5 L 180.925 310.5 L 181.297 310.5 L 181.668 310.5 L 182.04 310.5 L 182.412 310.5 L 182.783 310.5 L 183.155 310.5 L 183.527 310.5 L 183.898 310.5 L 184.27 310.5 L 184.642 310.5 L 185.013 310.5 L 185.385 310.5 L 185.757 310.5 L 186.128 310.5 L 186.5 310.5 L 186.872 310.5 L 187.243 310.5 L 187.615 310.5 L 187.987 310.5 L 188.358 310.5 L 188.73 310.5 L 189.102 310.5 L 189.473 310.5 L 189.845 310.5 L 190.217 310.5 L 190.588 310.5 L 190.96 310.5 L 191.332 310.5 L 191.703 310.5 L 192.075 310.5 L 192.447 310.5 L 192.818 310.5 L 193.19 310.5 L 193.562 310.5 L 193.933 310.5 L 194.305 310.5 L 194.677 310.5 L 195.048 310.5 L 195.42 310.5 L 195.792 310.5 L 196.163 310.5 L 196.535 310.5 L 196.907 310.5 L 197.278 310.5 L 197.65 310.5 L 198.022 310.5 L 198.393 310.5 L 198.765 310.5 L 199.137 310.5 L 199.508 310.5 L 199.88 310.5 L 200.252 310.5 L 200.623 310.5 L 200.995 310.5 L 201.367 310.5 L 201.738 310.5 L 202.11 310.5 L 202.482 310.5 L 202.853 310.5 L 203.225 310.5 L 203.597 310.5 L 203.968 310.5 L 204.34 310.5 L 204.712 310.5 L 205.083 310.5 L 205.455 310.5 L 205.827 310.5 L 206.198 310.5 L 206.57 310.5 L 206.942 310.5 L 207.313 310.5 L 207.685 310.5 L 208.057 310.5 L 208.428 310.5 L 208.8 310.5 L 209.172 310.5 L 209.543 310.5 L 209.915 310.5 L 210.287 310.5 L 210.658 310.5 L 211.03 310.5 L 211.402 310.5 L 211.773 310.5 L 212.145 310.5 L 212.517 310.5 L 212.888 310.5 L 213.26 310.5 L 213.632 310.5 L 214.003 310.5 L 214.375 310.5 L 214.747 310.5 L 215.118 310.5 L 215.49 310.5 L 215.862 310.5 L 216.233 310.5 L 216.605 310.5 L 216.977 310.5 L 217.348 310.5 L 217.72 310.5 L 218.092 310.5 L 218.463 310.5 L 218.835 310.5 L 219.207 310.5 L 219.578 310.5 L 219.95 310.5 L 220.322 310.5 L 220.693 310.5 L 221.065 310.5 L 221.437 310.5 L 221.808 310.5 L 222.18 310.5 L 222.552 310.5 L 222.923 310.5 L 223.295 310.5 L 223.667 310.5 L 224.038 310.5 L 224.41 310.5 L 224.782 310.5 L 225.153 310.5 L 225.525 310.5 L 225.897 310.5 L 226.268 310.5 L 226.64 310.5 L 227.012 310.5 L 227.383 310.5 L 227.755 310.5 L 228.127 310.5 L 228.498 310.5 L 228.87 310.5 L 229.242 310.5 L 229.613 310.5 L 229.985 310.5 L 230.357 310.5 L 230.728 310.5 L 231.1 310.5 L 231.472 310.5 L 231.843 310.5 L 232.215 310.5 L 232.587 310.5 L 232.958 310.5 L 233.33 310.5 L 233.702 310.5 L 234.073 310.5 L 234.445 310.5 L 234.817 310.5 L 235.188 310.5 L 235.56 310.5 L 235.932 310.5 L 236.303 310.5 L 236.675 310.5 L 237.047 310.5 L 237.418 310.5 L 237.79 310.5 L 238.162 310.5 L 238.533 310.5 L 238.905 310.5 L 239.277 310.5 L 239.648 310.5 L 240.02 310.5 L 240.392 310.5 L 240.763 310.5 L 241.135 310.5 L 241.507 310.5 L 241.878 310.5 L 242.25 310.5 L 242.622 310.5 L 242.993 310.5 L 243.365 310.5 L 243.737 310.5 L 244.108 310.5 L 244.48 310.5 L 244.852 310.5 L 245.223 310.5 L 245.595 310.5 L 245.967 310.5 L 246.338 310.5 L 246.71 310.5 L 247.082 310.5 L 247.453 310.5 L 247.825 310.5 L 248.197 310.5 L 248.568 310.5 L 248.94 310.5 L 249.312 310.5 L 249.683 310.5 L 250.055 310.5 L 250.427 310.5 L 250.798 310.5 L 251.17 310.5 L 251.542 310.5 L 251.913 310.5 L 252.285 310.5 L 252.657 310.5 L 253.028 310.5 L 253.4 310.5 L 253.772 310.5 L 254.143 310.5 L 254.515 310.5 L 254.887 310.5 L 255.258 310.5 L 255.63 310.5 L 256.002 310.5 L 256.373 310.5 L 256.745 310.5 L 257.117 310.5 L 257.488 310.5 L 257.86 310.5 L 258.232 310.5 L 258.603 310.5 L 258.975 310.5 L 259.347 310.5 L 259.718 310.5 L 260.09 310.5 L 260.462 310.5 L 260.833 310.5 L 261.205 310.5 L 261.577 310.5 L 261.948 310.5 L 262.32 310.5 L 262.692 310.498 L 263.063 310.446 L 263.435 309.791 L 263.807 305.115 L 264.178 287.259 L 264.55 256.422 L 264.922 253.258 L 265.293 310.5 L 265.665 367.742 L 266.037 364.578 L 266.408 333.741 L 266.78 315.885 L 267.152 311.209 L 267.523 310.554 L 267.895 310.502 L 268.267 310.5 L 268.638 310.5 L 269.01 310.5 L 269.382 310.5 L 269.753 310.5 L 270.125 310.5 L 270.497 310.5 L 270.868 310.5 L 271.24 310.5 L 271.612 310.5 L 271.983 310.5 L 272.355 310.5 L 272.727 310.5 L 273.098 310.5 L 273.47 310.5 L 273.842 310.5 L 274.213 310.5 L 274.585 310.5 L 274.957 310.5 L 275.328 310.5 L 275.7 310.5 L 276.072 310.5 L 276.443 310.5 L 276.815 310.5 L 277.187 310.5 L 277.558 310.5 L 277.93 310.5 L 278.302 310.5 L 278.673 310.5 L 279.045 310.5 L 279.417 310.5 L 279.788 310.5 L 280.16 310.5 L 280.532 310.5 L 280.903 310.5 L 281.275 310.5 L 281.647 310.5 L 282.018 310.5 L 282.39 310.5 L 282.762 310.5 L 283.133 310.5 L 283.505 310.5 L 283.877 310.5 L 284.248 310.5 L 284.62 310.5 L 284.992 310.5 L 285.363 310.5 L 285.735 310.5 L 286.107 310.5 L 286.478 310.5 L 286.85 310.5 L 287.222 310.5 L 287.593 310.5 L 287.965 310.5 L 288.337 310.5 L 288.708 310.5 L 289.08 310.5 L 289.452 310.5 L 289.823 310.5 L 290.195 310.5 L 290.567 310.5 L 290.938 310.5 L 291.31 310.5 L 291.682 310.5 L 292.053 310.5 L 292.425 310.5 L 292.797 310.5 L 293.168 310.5 L 293.54 310.5 L 293.912 310.5 L 294.283 310.5 L 294.655 310.5 L 295.027 310.5 L 295.398 310.5 L 295.77 310.5 L 296.142 310.5 L 296.513 310.5 L 296.885 310.5 L 297.257 310.5 L 297.628 310.5 L 298 310.5 L 298.372 310.5 L 298.743 310.5 L 299.115 310.5 L 299.487 310.5 L 299.858 310.5 L 300.23 310.5 L 300.602 310.5 L 300.973 310.5 L 301.345 310.5 L 301.717 310.5 L 302.088 310.5 L 302.46 310.5 L 302.832 310.5 L 303.203 310.5 L 303.575 310.5 L 303.947 310.5 L 304.318 310.5 L 304.69 310.5 L 305.062 310.5 L 305.433 310.5 L 305.805 310.5 L 306.177 310.5 L 306.548 310.5 L 306.92 310.5 L 307.292 310.5 L 307.663 310.5 L 308.035 310.5 L 308.407 310.5 L 308.778 310.5 L 309.15 310.5 L 309.522 310.5 L 309.893 310.5 L 310.265 310.5 L 310.637 310.5 L 311.008 310.5 L 311.38 310.5 L 311.752 310.5 L 312.123 310.5 L 312.495 310.5 L 312.867 310.5 L 313.238 310.5 L 313.61 310.5 L 313.982 310.5 L 314.353 310.5 L 314.725 310.5 L 315.097 310.5 L 315.468 310.5 L 315.84 310.5 L 316.212 310.5 L 316.583 310.5 L 316.955 310.5 L 317.327 310.5 L 317.698 310.5 L 318.07 310.5 L 318.442 310.5 L 318.813 310.5 L 319.185 310.5 L 319.557 310.5 L 319.928 310.5 L 320.3 310.5 L 320.672 310.5 L 321.043 310.5 L 321.415 310.5 L 321.787 310.5 L 322.158 310.5 L 322.53 310.5 L 322.902 310.5 L 323.273 310.5 L 323.645 310.5 L 324.017 310.5 L 324.388 310.5 L 324.76 310.5 L 325.132 310.5 L 325.503 310.5 L 325.875 310.5 L 326.247 310.5 L 326.618 310.5 L 326.99 310.5 L 327.362 310.5 L 327.733 310.5 L 328.105 310.5 L 328.477 310.5 L 328.848 310.5 L 329.22 310.5 L 329.592 310.5 L 329.963 310.5 L 330.335 310.5 L 330.707 310.5 L 331.078 310.5 L 331.45 310.5 L 331.822 310.5 L 332.193 310.5 L 332.565 310.5 L 332.937 310.5 L 333.308 310.5 L 333.68 310.5 L 334.052 310.5 L 334.423 310.5 L 334.795 310.5 L 335.167 310.5 L 335.538 310.5 L 335.91 310.5 L 336.282 310.5 L 336.653 310.5 L 337.025 310.5 L 337.397 310.5 L 337.768 310.5 L 338.14 310.5 L 338.512 310.5 L 338.883 310.5 L 339.255 310.5 L 339.627 310.5 L 339.998 310.5 L 340.37 310.5 L 340.742 310.5 L 341.113 310.5 L 341.485 310.5 L 341.857 310.5 L 342.228 310.5 L 342.6 310.5 L 342.972 310.5 L 343.343 310.5 L 343.715 310.5 L 344.087 310.5 L 344.458 310.5 L 344.83 310.5 L 345.202 310.5 L 345.573 310.5 L 345.945 310.5 L 346.317 310.5 L 346.688 310.5 L 347.06 310.5 L 347.432 310.5 L 347.803 310.5 L 348.175 310.5 L 348.547 310.5 L 348.918 310.5 L 349.29 310.5 L 349.662 310.5 L 350.033 310.5 L 350.405 310.5 L 350.777 310.5 L 351.148 310.5 L 351.52 310.5 L 351.892 310.5 L 352.263 310.5 L 352.635 310.5 L 353.007 310.5 L 353.378 310.5 L 353.75 310.5 L 354.122 310.5 L 354.493 310.5 L 354.865 310.5 L 355.237 310.5 L 355.608 310.5 L 355.98 310.5 L 356.352 310.5 L 356.723 310.5 L 357.095 310.5 L 357.467 310.5 L 357.838 310.5 L 358.21 310.5 L 358.582 310.5 L 358.953 310.5 L 359.325 310.5 L 359.697 310.5 L 360.068 310.5 L 360.44 310.5 L 360.812 310.5 L 361.183 310.5 L 361.555 310.5 L 361.927 310.5 L 362.298 310.5 L 362.67 310.5 L 363.042 310.5 L 363.413 310.5 L 363.785 310.5 L 364.157 310.5 L 364.528 310.5 L 364.9 310.5 L 365.272 310.5 L 365.643 310.5 L 366.015 310.5 L 366.387 310.5 L 366.758 310.5 L 367.13 310.5 L 367.502 310.5 L 367.873 310.5 L 368.245 310.5 L 368.617 310.5 L 368.988 310.5 L 369.36 310.5 L 369.732 310.5 L 370.103 310.5 L 370.475 310.5 L 370.847 310.5 L 371.218 310.5 L 371.59 310.5 L 371.962 310.5 L 372.333 310.5 L 372.705 310.5 L 373.077 310.5 L 373.448 310.5 L 373.82 310.5 L 374.192 310.5 L 374.563 310.5 L 374.935 310.5 L 375.307 310.5 L 375.678 310.5 L 376.05 310.5 L 376.422 310.5 L 376.793 310.5 L 377.165 310.5 L 377.537 310.5 L 377.908 310.5 L 378.28 310.5 L 378.652 310.5 L 379.023 310.5 L 379.395 310.5 L 379.767 310.5 L 380.138 310.5 L 380.51 310.5 L 380.882 310.5 L 381.253 310.5 L 381.625 310.5 L 381.997 310.5 L 382.368 310.5 L 382.74 310.5 L 383.112 310.5 L 383.483 310.5 L 383.855 310.5 L 384.227 310.5 L 384.598 310.5 L 384.97 310.5 L 385.342 310.5 L 385.713 310.5 L 386.085 310.5 L 386.457 310.5 L 386.828 310.5 L 387.2 310.5 L 387.572 310.5 L 387.943 310.5 L 388.315 310.5 L 388.687 310.5 L 389.058 310.5 L 389.43 310.5 L 389.802 310.5 L 390.173 310.5 L 390.545 310.5 L 390.917 310.5 L 391.288 310.5 L 391.66 310.5 L 392.032 310.5 L 392.403 310.5 L 392.775 310.5 L 393.147 310.5 L 393.518 310.5 L 393.89 310.5 L 394.262 310.5 L 394.633 310.5 L 395.005 310.5 L 395.377 310.5 L 395.748 310.5 L 396.12 310.5 L 396.492 310.5 L 396.863 310.5 L 397.235 310.5 L 397.607 310.5 L 397.978 310.5 L 398.35 310.5 L 398.722 310.5 L 399.093 310.5 L 399.465 310.5 L 399.837 310.5 L 400.208 310.5 L 400.58 310.5 L 400.952 310.5 L 401.323 310.5 L 401.695 310.5 L 402.067 310.5 L 402.438 310.5 L 402.81 310.5 L 403.182 310.5 L 403.553 310.5 L 403.925 310.5 L 404.297 310.5 L 404.668 310.5 L 405.04 310.5 L 405.412 310.5 L 405.783 310.5 L 406.155 310.5 L 406.527 310.5 L 406.898 310.5 L 407.27 310.5 L 407.642 310.5 L 408.013 310.5 L 408.385 310.5 L 408.757 310.5 L 409.128 310.5 L 409.5 310.5 L 409.872 310.5 L 410.243 310.5 L 410.615 310.5 L 410.987 310.5 L 411.358 310.5 L 411.73 310.5 L 412.102 310.5 L 412.473 310.5 L 412.845 310.5 L 413.217 310.5 L 413.588 310.5 L 413.96 310.5 L 414.332 310.5 L 414.703 310.5 L 415.075 310.5 L 415.447 310.5 L 415.818 310.5 L 416.19 310.5 L 416.562 310.5 L 416.933 310.5 L 417.305 310.5 L 417.677 310.5 L 418.048 310.5 L 418.42 310.5 L 418.792 310.5 L 419.163 310.5 L 419.535 310.5 L 419.907 310.5 L 420.278 310.5 L 420.65 310.5 L 421.022 310.5 L 421.393 310.5 L 421.765 310.5 L 422.137 310.5 L 422.508 310.5 L 422.88 310.5 L 423.252 310.5 L 423.623 310.5 L 423.995 310.5 L 424.367 310.5 L 424.738 310.5 L 425.11 310.5 L 425.482 310.5 L 425.853 310.5 L 426.225 310.5 L 426.597 310.5 L 426.968 310.5 L 427.34 310.5 L 427.712 310.5 L 428.083 310.5 L 428.455 310.5 L 428.827 310.5 L 429.198 310.5 L 429.57 310.5 L 429.942 310.5 L 430.313 310.5 L 430.685 310.5 L 431.057 310.5 L 431.428 310.5 L 431.8 310.5 L 432.172 310.5 L 432.543 310.5 L 432.915 310.5 L 433.287 310.5 L 433.658 310.5 L 434.03 310.5 L 434.402 310.5 L 434.773 310.5 L 435.145 310.5 L 435.517 310.5 L 435.888 310.5 L 436.26 310.5 L 436.632 310.5 L 437.003 310.5 L 437.375 310.5 L 437.747 310.5 L 438.118 310.5 L 438.49 310.5 L 438.862 310.5 L 439.233 310.5 L 439.605 310.5 L 439.977 310.5 L 440.348 310.5 L 440.72 310.5 L 441.092 310.5 L 441.463 310.5 L 441.835 310.5 L 442.207 310.5 L 442.578 310.5 L 442.95 310.5 L 443.322 310.5 L 443.693 310.5 L 444.065 310.5 L 444.437 310.5 L 444.808 310.5 L 445.18 310.5 L 445.552 310.5 L 445.923 310.5 L 446.295 310.5 L 446.667 310.5 L 447.038 310.5 L 447.41 310.5 L 447.782 310.5 L 448.153 310.5 L 448.525 310.5 L 448.897 310.5 L 449.268 310.5 L 449.64 310.5 L 450.012 310.5 L 450.383 310.5 L 450.755 310.5 L 451.127 310.5 L 451.498 310.5 L 451.87 310.5 L 452.242 310.5 L 452.613 310.5 L 452.985 310.5 L 453.357 310.5 L 453.728 310.5 L 454.1 310.5 L 454.472 310.5 L 454.843 310.5 L 455.215 310.5 L S GR GS 1 0 0 RC 2 setlinecap 10.0 ML N 75 310.5 M 75.372 310.5 L 75.743 310.5 L 76.115 310.5 L 76.487 310.5 L 76.858 310.5 L 77.23 310.5 L 77.602 310.5 L 77.973 310.5 L 78.345 310.5 L 78.717 310.5 L 79.088 310.5 L 79.46 310.5 L 79.832 310.5 L 80.203 310.5 L 80.575 310.5 L 80.947 310.5 L 81.318 310.5 L 81.69 310.5 L 82.062 310.5 L 82.433 310.5 L 82.805 310.5 L 83.177 310.5 L 83.548 310.5 L 83.92 310.5 L 84.292 310.5 L 84.663 310.5 L 85.035 310.5 L 85.407 310.5 L 85.778 310.5 L 86.15 310.5 L 86.522 310.5 L 86.893 310.5 L 87.265 310.5 L 87.637 310.5 L 88.008 310.5 L 88.38 310.5 L 88.752 310.5 L 89.123 310.5 L 89.495 310.5 L 89.867 310.5 L 90.238 310.5 L 90.61 310.5 L 90.982 310.5 L 91.353 310.5 L 91.725 310.5 L 92.097 310.5 L 92.468 310.5 L 92.84 310.5 L 93.212 310.5 L 93.583 310.5 L 93.955 310.5 L 94.327 310.5 L 94.698 310.5 L 95.07 310.5 L 95.442 310.5 L 95.813 310.5 L 96.185 310.5 L 96.557 310.5 L 96.928 310.5 L 97.3 310.5 L 97.672 310.5 L 98.043 310.5 L 98.415 310.5 L 98.787 310.5 L 99.158 310.5 L 99.53 310.5 L 99.902 310.5 L 100.273 310.5 L 100.645 310.5 L 101.017 310.5 L 101.388 310.5 L 101.76 310.5 L 102.132 310.5 L 102.503 310.5 L 102.875 310.5 L 103.247 310.5 L 103.618 310.5 L 103.99 310.5 L 104.362 310.5 L 104.733 310.5 L 105.105 310.5 L 105.477 310.5 L 105.848 310.5 L 106.22 310.5 L 106.592 310.5 L 106.963 310.5 L 107.335 310.5 L 107.707 310.5 L 108.078 310.5 L 108.45 310.5 L 108.822 310.5 L 109.193 310.5 L 109.565 310.5 L 109.937 310.5 L 110.308 310.5 L 110.68 310.5 L 111.052 310.5 L 111.423 310.5 L 111.795 310.5 L 112.167 310.5 L 112.538 310.5 L 112.91 310.5 L 113.282 310.5 L 113.653 310.5 L 114.025 310.5 L 114.397 310.5 L 114.768 310.5 L 115.14 310.5 L 115.512 310.5 L 115.883 310.5 L 116.255 310.5 L 116.627 310.5 L 116.998 310.5 L 117.37 310.5 L 117.742 310.5 L 118.113 310.5 L 118.485 310.5 L 118.857 310.5 L 119.228 310.5 L 119.6 310.5 L 119.972 310.5 L 120.343 310.5 L 120.715 310.5 L 121.087 310.5 L 121.458 310.5 L 121.83 310.5 L 122.202 310.5 L 122.573 310.5 L 122.945 310.5 L 123.317 310.5 L 123.688 310.5 L 124.06 310.5 L 124.432 310.5 L 124.803 310.5 L 125.175 310.5 L 125.547 310.5 L 125.918 310.5 L 126.29 310.5 L 126.662 310.5 L 127.033 310.5 L 127.405 310.5 L 127.777 310.5 L 128.148 310.5 L 128.52 310.5 L 128.892 310.5 L 129.263 310.5 L 129.635 310.5 L 130.007 310.5 L 130.378 310.5 L 130.75 310.5 L 131.122 310.5 L 131.493 310.5 L 131.865 310.5 L 132.237 310.5 L 132.608 310.5 L 132.98 310.5 L 133.352 310.5 L 133.723 310.5 L 134.095 310.5 L 134.467 310.5 L 134.838 310.5 L 135.21 310.5 L 135.582 310.5 L 135.953 310.5 L 136.325 310.5 L 136.697 310.5 L 137.068 310.5 L 137.44 310.5 L 137.812 310.5 L 138.183 310.5 L 138.555 310.5 L 138.927 310.5 L 139.298 310.5 L 139.67 310.5 L 140.042 310.5 L 140.413 310.5 L 140.785 310.5 L 141.157 310.5 L 141.528 310.5 L 141.9 310.5 L 142.272 310.5 L 142.643 310.5 L 143.015 310.5 L 143.387 310.5 L 143.758 310.5 L 144.13 310.5 L 144.502 310.5 L 144.873 310.5 L 145.245 310.5 L 145.617 310.5 L 145.988 310.5 L 146.36 310.5 L 146.732 310.5 L 147.103 310.5 L 147.475 310.5 L 147.847 310.5 L 148.218 310.5 L 148.59 310.5 L 148.962 310.5 L 149.333 310.5 L 149.705 310.5 L 150.077 310.5 L 150.448 310.5 L 150.82 310.5 L 151.192 310.5 L 151.563 310.5 L 151.935 310.5 L 152.307 310.5 L 152.678 310.5 L 153.05 310.5 L 153.422 310.5 L 153.793 310.5 L 154.165 310.5 L 154.537 310.5 L 154.908 310.5 L 155.28 310.5 L 155.652 310.5 L 156.023 310.5 L 156.395 310.5 L 156.767 310.5 L 157.138 310.5 L 157.51 310.5 L 157.882 310.5 L 158.253 310.5 L 158.625 310.5 L 158.997 310.5 L 159.368 310.5 L 159.74 310.5 L 160.112 310.5 L 160.483 310.5 L 160.855 310.5 L 161.227 310.5 L 161.598 310.5 L 161.97 310.5 L 162.342 310.5 L 162.713 310.5 L 163.085 310.5 L 163.457 310.5 L 163.828 310.5 L 164.2 310.5 L 164.572 310.5 L 164.943 310.5 L 165.315 310.5 L 165.687 310.5 L 166.058 310.5 L 166.43 310.5 L 166.802 310.5 L 167.173 310.5 L 167.545 310.5 L 167.917 310.5 L 168.288 310.5 L 168.66 310.5 L 169.032 310.5 L 169.403 310.5 L 169.775 310.5 L 170.147 310.5 L 170.518 310.5 L 170.89 310.5 L 171.262 310.5 L 171.633 310.5 L 172.005 310.5 L 172.377 310.5 L 172.748 310.5 L 173.12 310.5 L 173.492 310.5 L 173.863 310.5 L 174.235 310.5 L 174.607 310.5 L 174.978 310.5 L 175.35 310.5 L 175.722 310.5 L 176.093 310.5 L 176.465 310.5 L 176.837 310.5 L 177.208 310.5 L 177.58 310.5 L 177.952 310.5 L 178.323 310.5 L 178.695 310.5 L 179.067 310.5 L 179.438 310.5 L 179.81 310.5 L 180.182 310.5 L 180.553 310.5 L 180.925 310.5 L 181.297 310.5 L 181.668 310.5 L 182.04 310.5 L 182.412 310.5 L 182.783 310.5 L 183.155 310.5 L 183.527 310.5 L 183.898 310.5 L 184.27 310.5 L 184.642 310.5 L 185.013 310.5 L 185.385 310.5 L 185.757 310.5 L 186.128 310.5 L 186.5 310.5 L 186.872 310.5 L 187.243 310.5 L 187.615 310.5 L 187.987 310.5 L 188.358 310.5 L 188.73 310.5 L 189.102 310.5 L 189.473 310.5 L 189.845 310.5 L 190.217 310.5 L 190.588 310.5 L 190.96 310.5 L 191.332 310.5 L 191.703 310.5 L 192.075 310.5 L 192.447 310.5 L 192.818 310.5 L 193.19 310.5 L 193.562 310.5 L 193.933 310.5 L 194.305 310.5 L 194.677 310.5 L 195.048 310.5 L 195.42 310.5 L 195.792 310.5 L 196.163 310.5 L 196.535 310.5 L 196.907 310.5 L 197.278 310.5 L 197.65 310.5 L 198.022 310.5 L 198.393 310.5 L 198.765 310.5 L 199.137 310.5 L 199.508 310.5 L 199.88 310.5 L 200.252 310.5 L 200.623 310.5 L 200.995 310.5 L 201.367 310.5 L 201.738 310.5 L 202.11 310.5 L 202.482 310.5 L 202.853 310.5 L 203.225 310.5 L 203.597 310.5 L 203.968 310.5 L 204.34 310.5 L 204.712 310.5 L 205.083 310.5 L 205.455 310.5 L 205.827 310.5 L 206.198 310.5 L 206.57 310.5 L 206.942 310.5 L 207.313 310.5 L 207.685 310.5 L 208.057 310.5 L 208.428 310.5 L 208.8 310.5 L 209.172 310.5 L 209.543 310.5 L 209.915 310.5 L 210.287 310.5 L 210.658 310.5 L 211.03 310.5 L 211.402 310.5 L 211.773 310.5 L 212.145 310.5 L 212.517 310.5 L 212.888 310.5 L 213.26 310.5 L 213.632 310.5 L 214.003 310.5 L 214.375 310.5 L 214.747 310.5 L 215.118 310.5 L 215.49 310.5 L 215.862 310.5 L 216.233 310.5 L 216.605 310.5 L 216.977 310.5 L 217.348 310.5 L 217.72 310.5 L 218.092 310.5 L 218.463 310.5 L 218.835 310.5 L 219.207 310.5 L 219.578 310.5 L 219.95 310.5 L 220.322 310.5 L 220.693 310.5 L 221.065 310.5 L 221.437 310.5 L 221.808 310.5 L 222.18 310.5 L 222.552 310.5 L 222.923 310.5 L 223.295 310.5 L 223.667 310.5 L 224.038 310.5 L 224.41 310.5 L 224.782 310.5 L 225.153 310.5 L 225.525 310.5 L 225.897 310.5 L 226.268 310.5 L 226.64 310.5 L 227.012 310.5 L 227.383 310.5 L 227.755 310.5 L 228.127 310.5 L 228.498 310.5 L 228.87 310.5 L 229.242 310.5 L 229.613 310.5 L 229.985 310.5 L 230.357 310.5 L 230.728 310.5 L 231.1 310.5 L 231.472 310.5 L 231.843 310.5 L 232.215 310.5 L 232.587 310.5 L 232.958 310.5 L 233.33 310.5 L 233.702 310.5 L 234.073 310.5 L 234.445 310.5 L 234.817 310.5 L 235.188 310.5 L 235.56 310.5 L 235.932 310.5 L 236.303 310.5 L 236.675 310.5 L 237.047 310.5 L 237.418 310.5 L 237.79 310.5 L 238.162 310.5 L 238.533 310.5 L 238.905 310.5 L 239.277 310.5 L 239.648 310.5 L 240.02 310.5 L 240.392 310.5 L 240.763 310.5 L 241.135 310.5 L 241.507 310.5 L 241.878 310.5 L 242.25 310.5 L 242.622 310.5 L 242.993 310.5 L 243.365 310.5 L 243.737 310.5 L 244.108 310.5 L 244.48 310.5 L 244.852 310.5 L 245.223 310.5 L 245.595 310.5 L 245.967 310.5 L 246.338 310.5 L 246.71 310.5 L 247.082 310.5 L 247.453 310.5 L 247.825 310.5 L 248.197 310.5 L 248.568 310.5 L 248.94 310.5 L 249.312 310.5 L 249.683 310.5 L 250.055 310.5 L 250.427 310.5 L 250.798 310.5 L 251.17 310.5 L 251.542 310.5 L 251.913 310.5 L 252.285 310.5 L 252.657 310.5 L 253.028 310.5 L 253.4 310.5 L 253.772 310.5 L 254.143 310.5 L 254.515 310.5 L 254.887 310.5 L 255.258 310.5 L 255.63 310.5 L 256.002 310.5 L 256.373 310.5 L 256.745 310.5 L 257.117 310.5 L 257.488 310.5 L 257.86 310.5 L 258.232 310.5 L 258.603 310.5 L 258.975 310.5 L 259.347 310.5 L 259.718 310.5 L 260.09 310.5 L 260.462 310.5 L 260.833 310.5 L 261.205 310.5 L 261.577 310.5 L 261.948 310.5 L 262.32 310.5 L 262.692 310.5 L 263.063 310.5 L 263.435 310.5 L 263.807 310.5 L 264.178 310.5 L 264.55 310.5 L 264.922 310.5 L 265.293 310.5 L 265.665 310.5 L 266.037 310.5 L 266.408 310.5 L 266.78 310.5 L 267.152 310.5 L 267.523 310.5 L 267.895 310.5 L 268.267 310.5 L 268.638 310.5 L 269.01 310.5 L 269.382 310.5 L 269.753 310.5 L 270.125 310.5 L 270.497 310.5 L 270.868 310.5 L 271.24 310.5 L 271.612 310.5 L 271.983 310.5 L 272.355 310.5 L 272.727 310.5 L 273.098 310.5 L 273.47 310.5 L 273.842 310.5 L 274.213 310.5 L 274.585 310.5 L 274.957 310.501 L 275.328 310.499 L 275.7 310.501 L 276.072 310.499 L 276.443 310.501 L 276.815 310.499 L 277.187 310.501 L 277.558 310.499 L 277.93 310.501 L 278.302 310.499 L 278.673 310.501 L 279.045 310.498 L 279.417 310.502 L 279.788 310.498 L 280.16 310.502 L 280.532 310.497 L 280.903 310.503 L 281.275 310.496 L 281.647 310.492 L 282.018 310.285 L 282.39 308.412 L 282.762 298.462 L 283.133 271.991 L 283.505 247.673 L 283.877 275.985 L 284.248 345.015 L 284.62 373.327 L 284.992 349.009 L 285.363 322.538 L 285.735 312.588 L 286.107 310.715 L 286.478 310.508 L 286.85 310.504 L 287.222 310.497 L 287.593 310.503 L 287.965 310.498 L 288.337 310.502 L 288.708 310.498 L 289.08 310.502 L 289.452 310.499 L 289.823 310.501 L 290.195 310.499 L 290.567 310.501 L 290.938 310.499 L 291.31 310.501 L 291.682 310.499 L 292.053 310.501 L 292.425 310.499 L 292.797 310.501 L 293.168 310.499 L 293.54 310.501 L 293.912 310.5 L 294.283 310.5 L 294.655 310.5 L 295.027 310.5 L 295.398 310.5 L 295.77 310.5 L 296.142 310.5 L 296.513 310.5 L 296.885 310.5 L 297.257 310.5 L 297.628 310.5 L 298 310.5 L 298.372 310.5 L 298.743 310.5 L 299.115 310.5 L 299.487 310.5 L 299.858 310.5 L 300.23 310.5 L 300.602 310.5 L 300.973 310.5 L 301.345 310.5 L 301.717 310.5 L 302.088 310.5 L 302.46 310.5 L 302.832 310.5 L 303.203 310.5 L 303.575 310.5 L 303.947 310.5 L 304.318 310.5 L 304.69 310.5 L 305.062 310.5 L 305.433 310.5 L 305.805 310.5 L 306.177 310.5 L 306.548 310.5 L 306.92 310.5 L 307.292 310.5 L 307.663 310.5 L 308.035 310.5 L 308.407 310.5 L 308.778 310.5 L 309.15 310.5 L 309.522 310.5 L 309.893 310.5 L 310.265 310.5 L 310.637 310.5 L 311.008 310.5 L 311.38 310.5 L 311.752 310.5 L 312.123 310.5 L 312.495 310.5 L 312.867 310.5 L 313.238 310.5 L 313.61 310.5 L 313.982 310.5 L 314.353 310.5 L 314.725 310.5 L 315.097 310.5 L 315.468 310.5 L 315.84 310.5 L 316.212 310.5 L 316.583 310.5 L 316.955 310.5 L 317.327 310.5 L 317.698 310.5 L 318.07 310.5 L 318.442 310.5 L 318.813 310.5 L 319.185 310.5 L 319.557 310.5 L 319.928 310.5 L 320.3 310.5 L 320.672 310.5 L 321.043 310.5 L 321.415 310.5 L 321.787 310.5 L 322.158 310.5 L 322.53 310.5 L 322.902 310.5 L 323.273 310.5 L 323.645 310.5 L 324.017 310.5 L 324.388 310.5 L 324.76 310.5 L 325.132 310.5 L 325.503 310.5 L 325.875 310.5 L 326.247 310.5 L 326.618 310.5 L 326.99 310.5 L 327.362 310.5 L 327.733 310.5 L 328.105 310.5 L 328.477 310.5 L 328.848 310.5 L 329.22 310.5 L 329.592 310.5 L 329.963 310.5 L 330.335 310.5 L 330.707 310.5 L 331.078 310.5 L 331.45 310.5 L 331.822 310.5 L 332.193 310.5 L 332.565 310.5 L 332.937 310.5 L 333.308 310.5 L 333.68 310.5 L 334.052 310.5 L 334.423 310.5 L 334.795 310.5 L 335.167 310.5 L 335.538 310.5 L 335.91 310.5 L 336.282 310.5 L 336.653 310.5 L 337.025 310.5 L 337.397 310.5 L 337.768 310.5 L 338.14 310.5 L 338.512 310.5 L 338.883 310.5 L 339.255 310.5 L 339.627 310.5 L 339.998 310.5 L 340.37 310.5 L 340.742 310.5 L 341.113 310.5 L 341.485 310.5 L 341.857 310.5 L 342.228 310.5 L 342.6 310.5 L 342.972 310.5 L 343.343 310.5 L 343.715 310.5 L 344.087 310.5 L 344.458 310.5 L 344.83 310.5 L 345.202 310.5 L 345.573 310.5 L 345.945 310.5 L 346.317 310.5 L 346.688 310.5 L 347.06 310.5 L 347.432 310.5 L 347.803 310.5 L 348.175 310.5 L 348.547 310.5 L 348.918 310.5 L 349.29 310.5 L 349.662 310.5 L 350.033 310.5 L 350.405 310.5 L 350.777 310.5 L 351.148 310.5 L 351.52 310.5 L 351.892 310.5 L 352.263 310.5 L 352.635 310.5 L 353.007 310.5 L 353.378 310.5 L 353.75 310.5 L 354.122 310.5 L 354.493 310.5 L 354.865 310.5 L 355.237 310.5 L 355.608 310.5 L 355.98 310.5 L 356.352 310.5 L 356.723 310.5 L 357.095 310.5 L 357.467 310.5 L 357.838 310.5 L 358.21 310.5 L 358.582 310.5 L 358.953 310.5 L 359.325 310.5 L 359.697 310.5 L 360.068 310.5 L 360.44 310.5 L 360.812 310.5 L 361.183 310.5 L 361.555 310.5 L 361.927 310.5 L 362.298 310.5 L 362.67 310.5 L 363.042 310.5 L 363.413 310.5 L 363.785 310.5 L 364.157 310.5 L 364.528 310.5 L 364.9 310.5 L 365.272 310.5 L 365.643 310.5 L 366.015 310.5 L 366.387 310.5 L 366.758 310.5 L 367.13 310.5 L 367.502 310.5 L 367.873 310.5 L 368.245 310.5 L 368.617 310.5 L 368.988 310.5 L 369.36 310.5 L 369.732 310.5 L 370.103 310.5 L 370.475 310.5 L 370.847 310.5 L 371.218 310.5 L 371.59 310.5 L 371.962 310.5 L 372.333 310.5 L 372.705 310.5 L 373.077 310.5 L 373.448 310.5 L 373.82 310.5 L 374.192 310.5 L 374.563 310.5 L 374.935 310.5 L 375.307 310.5 L 375.678 310.5 L 376.05 310.5 L 376.422 310.5 L 376.793 310.5 L 377.165 310.5 L 377.537 310.5 L 377.908 310.5 L 378.28 310.5 L 378.652 310.5 L 379.023 310.5 L 379.395 310.5 L 379.767 310.5 L 380.138 310.5 L 380.51 310.5 L 380.882 310.5 L 381.253 310.5 L 381.625 310.5 L 381.997 310.5 L 382.368 310.5 L 382.74 310.5 L 383.112 310.5 L 383.483 310.5 L 383.855 310.5 L 384.227 310.5 L 384.598 310.5 L 384.97 310.5 L 385.342 310.5 L 385.713 310.5 L 386.085 310.5 L 386.457 310.5 L 386.828 310.5 L 387.2 310.5 L 387.572 310.5 L 387.943 310.5 L 388.315 310.5 L 388.687 310.5 L 389.058 310.5 L 389.43 310.5 L 389.802 310.5 L 390.173 310.5 L 390.545 310.5 L 390.917 310.5 L 391.288 310.5 L 391.66 310.5 L 392.032 310.5 L 392.403 310.5 L 392.775 310.5 L 393.147 310.5 L 393.518 310.5 L 393.89 310.5 L 394.262 310.5 L 394.633 310.5 L 395.005 310.5 L 395.377 310.5 L 395.748 310.5 L 396.12 310.5 L 396.492 310.5 L 396.863 310.5 L 397.235 310.5 L 397.607 310.5 L 397.978 310.5 L 398.35 310.5 L 398.722 310.5 L 399.093 310.5 L 399.465 310.5 L 399.837 310.5 L 400.208 310.5 L 400.58 310.5 L 400.952 310.5 L 401.323 310.5 L 401.695 310.5 L 402.067 310.5 L 402.438 310.5 L 402.81 310.5 L 403.182 310.5 L 403.553 310.5 L 403.925 310.5 L 404.297 310.5 L 404.668 310.5 L 405.04 310.5 L 405.412 310.5 L 405.783 310.5 L 406.155 310.5 L 406.527 310.5 L 406.898 310.5 L 407.27 310.5 L 407.642 310.5 L 408.013 310.5 L 408.385 310.5 L 408.757 310.5 L 409.128 310.5 L 409.5 310.5 L 409.872 310.5 L 410.243 310.5 L 410.615 310.5 L 410.987 310.5 L 411.358 310.5 L 411.73 310.5 L 412.102 310.5 L 412.473 310.5 L 412.845 310.5 L 413.217 310.5 L 413.588 310.5 L 413.96 310.5 L 414.332 310.5 L 414.703 310.5 L 415.075 310.5 L 415.447 310.5 L 415.818 310.5 L 416.19 310.5 L 416.562 310.5 L 416.933 310.5 L 417.305 310.5 L 417.677 310.5 L 418.048 310.5 L 418.42 310.5 L 418.792 310.5 L 419.163 310.5 L 419.535 310.5 L 419.907 310.5 L 420.278 310.5 L 420.65 310.5 L 421.022 310.5 L 421.393 310.5 L 421.765 310.5 L 422.137 310.5 L 422.508 310.5 L 422.88 310.5 L 423.252 310.5 L 423.623 310.5 L 423.995 310.5 L 424.367 310.5 L 424.738 310.5 L 425.11 310.5 L 425.482 310.5 L 425.853 310.5 L 426.225 310.5 L 426.597 310.5 L 426.968 310.5 L 427.34 310.5 L 427.712 310.5 L 428.083 310.5 L 428.455 310.5 L 428.827 310.5 L 429.198 310.5 L 429.57 310.5 L 429.942 310.5 L 430.313 310.5 L 430.685 310.5 L 431.057 310.5 L 431.428 310.5 L 431.8 310.5 L 432.172 310.5 L 432.543 310.5 L 432.915 310.5 L 433.287 310.5 L 433.658 310.5 L 434.03 310.5 L 434.402 310.5 L 434.773 310.5 L 435.145 310.5 L 435.517 310.5 L 435.888 310.5 L 436.26 310.5 L 436.632 310.5 L 437.003 310.5 L 437.375 310.5 L 437.747 310.5 L 438.118 310.5 L 438.49 310.5 L 438.862 310.5 L 439.233 310.5 L 439.605 310.5 L 439.977 310.5 L 440.348 310.5 L 440.72 310.5 L 441.092 310.5 L 441.463 310.5 L 441.835 310.5 L 442.207 310.5 L 442.578 310.5 L 442.95 310.5 L 443.322 310.5 L 443.693 310.5 L 444.065 310.5 L 444.437 310.5 L 444.808 310.5 L 445.18 310.5 L 445.552 310.5 L 445.923 310.5 L 446.295 310.5 L 446.667 310.5 L 447.038 310.5 L 447.41 310.5 L 447.782 310.5 L 448.153 310.5 L 448.525 310.5 L 448.897 310.5 L 449.268 310.5 L 449.64 310.5 L 450.012 310.5 L 450.383 310.5 L 450.755 310.5 L 451.127 310.5 L 451.498 310.5 L 451.87 310.5 L 452.242 310.5 L 452.613 310.5 L 452.985 310.5 L 453.357 310.5 L 453.728 310.5 L 454.1 310.5 L 454.472 310.5 L 454.843 310.5 L 455.215 310.5 L S GR %%Trailer %%BoundingBox: 40 34 532 404 %%Pages: 1 %%EOF GMTSAR_V5.7/.svn/pristine/b3/b3569767b71fb521902f24adaa61d6f12dc7cf4a.svn-base000444 015705 000000 00000007770 13505462013 025750 0ustar00sandwellwheel000000 000000 #!/usr/bin/env python3 import numpy as np import requests import os import argparse import datetime from html.parser import HTMLParser server = 'https://qc.sentinel1.eo.esa.int/' orbitMap = [('precise','aux_poeorb'), ('restituted','aux_resorb')] datefmt = "%Y%m%dT%H%M%S" queryfmt = "%Y-%m-%d" def cmdLineParse(): ''' Command line parser. ''' parser = argparse.ArgumentParser(description='Fetch orbits corresponding to given SAFE package') parser.add_argument('-i', '--input', dest='input', type=str, required=True, help='Path to SAFE package of interest') parser.add_argument('-o', '--output', dest='outdir', type=str, default='.', help='Path to output directory') return parser.parse_args() def FileToTimeStamp(safename): ''' Return timestamp from SAFE name. ''' fields = safename.split('_') tstamp = datetime.datetime.strptime(fields[-4], datefmt) return tstamp class MyHTMLParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.fileList = [] self.in_td = False self.in_a = False def handle_starttag(self, tag, attrs): if tag == 'td': self.in_td = True elif tag == 'a': self.in_a = True def handle_data(self,data): if self.in_td and self.in_a: if 'S1A_OPER' in data: self.fileList.append(data.strip()) def handle_tag(self, tag): if tag == 'td': self.in_td = False self.in_a = False elif tag == 'a': self.in_a = False def download_file(url, outdir='.', session=None): ''' Download file to specified directory. ''' if session is None: session = requests.session() path = os.path.join(outdir, os.path.basename(url)) print('Downloading URL: ', url) request = session.get(url, stream=True, verify=False) try: val = request.raise_for_status() success = True except: success = False if success: with open(path,'wb') as f: for chunk in request.iter_content(chunk_size=1024): if chunk: f.write(chunk) f.flush() return success if __name__ == '__main__': ''' Main driver. ''' inps = cmdLineParse() fileTS = FileToTimeStamp(inps.input) print('Reference time: ', fileTS) match = None session = requests.Session() for spec in orbitMap: oType = spec[0] if oType == 'precise': delta = datetime.timedelta(days=2) elif oType == 'restituted': delta = datetime.timedelta(hours=6) timebef = (fileTS - delta).strftime(queryfmt) timeaft = (fileTS + delta).strftime(queryfmt) url = server + spec[1] query = url + '/?validity_start_time={0}..{1}'.format(timebef, timeaft) print(query) success = False match = None try: print('Querying for {0} orbits'.format(oType)) r = session.get(query, verify=False) r.raise_for_status() res = r.text parser = MyHTMLParser() parser.feed(r.text) match = None for result in parser.fileList: fields = result.split('_') taft = datetime.datetime.strptime(fields[-1][0:15], datefmt) tbef = datetime.datetime.strptime(fields[-2][1:16], datefmt) if (tbef <= fileTS) and (taft >= fileTS): match = os.path.join(url, result) break if match is not None: success = True except : pass if match is None: print('Failed to find {0} orbits for Time {1}'.format(oType, fileTS)) if success: break if match: res = download_file(match, inps.outdir, session=session) if res is False: print('Failed to download URL: ', match) session.close() GMTSAR_V5.7/.svn/pristine/b3/b3fd87760af15f0df9902c6d37464650ad092e93.svn-base000444 015705 000000 00000000617 13505462014 025544 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_mosaic_ss CSRCS = ALOS_mosaic_ss.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar $(GMT_INC) CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) $(GMTSAR) $(GMT_LIB) $(INCLUDES) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(PROG) $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/be/be3611c8a65790a06ec573ea176d66a2bd3f5d96.svn-base000444 015705 000000 00000002422 13505462014 025752 0ustar00sandwellwheel000000 000000 /************************************************************************ * rng_compress reduces the bandwidth of an array by 2 times by * * low-pass filtering and decimating the wavenumber space * ************************************************************************/ /************************************************************************ * Creator: David T. SandwellScripps Institution of Oceanography) * * Date : 06/21/07 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "image_sio.h" #include "siocomplex.h" void cfft1d_(int *, fcomplex *, int *); void rng_compress(fcomplex *cin, int nffti, fcomplex *cout, int nffto) { int i, dir, n4; n4 = nffti / 4; /* do the forward fft */ dir = -1; cfft1d_(&nffti, cin, &dir); /* then move the input to the output 1 to 1 and 4 to 2 */ for (i = 0; i < n4; i++) { cout[i].r = cin[i].r; cout[i].i = cin[i].i; cout[i + n4].r = cin[i + 3 * n4].r; cout[i + n4].i = cin[i + 3 * n4].i; } /* now inverse fft */ dir = 1; cfft1d_(&nffto, cout, &dir); } GMTSAR_V5.7/.svn/pristine/be/bea601f75b6606f7ae39ec655b56e9ff59340103.svn-base000444 015705 000000 00000005300 13505462014 025677 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #define FACTOR 1000000 /* void interpolate_ALOS_orbit_slow(struct ALOS_ORB *, double, double *, double *, double *, int *); void interpolate_ALOS_orbit(struct ALOS_ORB *, double *, double *, double *, double, double *, double *, double *, int *); */ /*---------------------------------------------------------------*/ /* from David Sandwell's code */ void interpolate_ALOS_orbit_slow(struct ALOS_ORB *orb, double time, double *x, double *y, double *z, int *ir) { int k; double pt0; double *p, *pt, *pv; p = (double *)malloc(orb->nd * sizeof(double)); pv = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); /* seconds from Jan 1 */ pt0 = (24.0 * 60.0 * 60.0) * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) pt[k] = pt0 + k * orb->dsec; interpolate_ALOS_orbit(orb, pt, p, pv, time, x, y, z, ir); free((double *)p); free((double *)pt); free((double *)pv); } /*---------------------------------------------------------------*/ void interpolate_ALOS_orbit(struct ALOS_ORB *orb, double *pt, double *p, double *pv, double time, double *x, double *y, double *z, int *ir) { /* ir; return code */ /* time; seconds since Jan 1 */ /* x, y, z; position */ int k, nval, nd; nval = 6; /* number of points to use in interpolation */ nd = orb->nd; if (debug) fprintf(stderr, " time %lf nd %d\n", time, nd); /* interpolate for each coordinate direction */ /* hermite_c c version */ for (k = 0; k < nd; k++) { p[k] = orb->points[k].px; pv[k] = orb->points[k].vx; } hermite_c(pt, p, pv, nd, nval, time, x, ir); for (k = 0; k < nd; k++) { p[k] = orb->points[k].py; pv[k] = orb->points[k].vy; } hermite_c(pt, p, pv, nd, nval, time, y, ir); if (debug) fprintf(stderr, "C pt %lf py %lf pvy %lf time %lf y %lf ir %d \n", *pt, p[0], pv[0], time, *y, *ir); for (k = 0; k < nd; k++) { p[k] = orb->points[k].pz; pv[k] = orb->points[k].vz; } hermite_c(pt, p, pv, nd, nval, time, z, ir); if (debug) fprintf(stderr, "C pt %lf pz %lf pvz %lf time %lf z %lf ir %d \n", *pt, p[0], pv[0], time, *z, *ir); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/be/be343e235dcb522497eaef92e166af0928925ac6.svn-base000444 015705 000000 00000001026 13505462014 025754 0ustar00sandwellwheel000000 000000 /* definitions for xml code */ int space_count(char *); int strasign(char *, char *, int, int); int strlocate(char *, int, int); int create_child(tree *, char *, int *, int, int, int); int show_tree(tree *, int ,int); int get_tree(FILE *, tree *); int search_tree(tree *, char *, char *, int, int, int); int cat_nums(char *, char *); int str2ints(int *, char *); int itoa(int, char *, int); double date2MJD(int, int, int, int, int, double); int str_date2JD(char *, char *); double str2double(char *); int str2dbs(double *, char *); GMTSAR_V5.7/.svn/pristine/d0/d0c7a2104c345fee233148e7c1608ed398842b02.svn-base000444 015705 000000 00000001416 13505462013 025432 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 7 2010 # unset noclobber # # script to focus SAR data and deal with negative yshift # # check for number of arguments # if ($#argv < 1) then echo "" echo "Usage: sarp.csh file.PRM " echo "" echo "Example: sarp.csh IMG-HH-ALPSRP049040660-H1.0__A.PRM " echo "" exit 1 endif # set slcfile = ` echo $1 | awk '{ print(substr($1,1,length($1)-3)"SLC")}'` # esarp $1 $slcfile > tmp_sarp # # update the PRM file # grep -v SLC_file $1 | grep -v dtype > tmp.PRM mv tmp.PRM $1 echo "SLC_file = "$slcfile >> $1 if ( $3 == R4) then echo "dtype = c" >> $1 else echo "dtype = a" >> $1 endif # # put in dfact into PRM file # set dfact = `grep I2SCALE tmp_sarp | awk '{print $2}'` update_PRM $1 SLC_scale $dfact rm tmp_sarp GMTSAR_V5.7/.svn/pristine/d7/d7c380abfd2f1c3c3a0c2e88a7ff72132119e33c.svn-base000444 015705 000000 00000007116 13505462013 026017 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Matt WEI Feb 1 2010 # modified by Xiaopeng Feb 9 2010 # modified by E. Fielding, DST, XT to add TSX data Jan 10 2014 #======================================================================= # script to make topography for interferograms # The USGS elevations are height above WGS84 so this is OK. # alias rm 'rm -f' unset noclobber # if ($#argv < 2) then echo " " echo "Usage: dem2topo_ra.csh master.PRM dem.grd" echo " " echo " Note: Works for TSX,ALOS,ERS,ENVISAT" echo " " exit 1 endif # # local variables # set scale = -JX7i if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # #========================Mosaic topo data=============================== #----------------------------------------------------------------------- # #------------------------Get bounds in radar coordinates---------------- set XMAX = `grep num_rng_bins $1 | awk '{print $3}'` set yvalid = `grep num_valid_az $1 | awk '{print $3}'` set num_patch = `grep num_patches $1 | awk '{print $3}'` set YMAX = `echo "$yvalid $num_patch" | awk '{print $1*$2}'` set SC = `grep SC_identity $1 | awk '{print $3}'` set PRF = `grep PRF *.PRM | awk 'NR == 1 {printf("%d", $3)}'` # # look for range sampling rate # set rng_samp_rate = `grep rng_samp_rate $1 | awk 'NR == 1 {printf("%d", $3)}'` # set the range spacing of simulation in units of image range pixel size if($rng_samp_rate > 0 && $rng_samp_rate < 25000000) then set rng = 1 else if($rng_samp_rate >= 25000000 && $rng_samp_rate < 72000000 || $SC == 7 ) then set rng = 2 else if($rng_samp_rate >= 72000000) then set rng = 4 else echo "range sampling rate out of bounds" exit 0 endif echo " range decimation is: " $rng # use special SAT_llt2rat if ($SC == 5) then echo " processing for ALOS data" gmt grd2xyz --FORMAT_FLOAT_OUT=%lf $2 -s | SAT_llt2rat $1 0 -bod > trans.dat else echo " processing generic data" if($SC == 10) then gmt grd2xyz --FORMAT_FLOAT_OUT=%lf $2 -s | SAT_llt2rat $1 1 -bod > trans.dat else gmt grd2xyz --FORMAT_FLOAT_OUT=%lf $2 -s | SAT_llt2rat $1 0 -bod > trans.dat endif endif # # use an aximuth spacing of 2 for low PRF data such as S1 TOPS # if ($PRF < 1000) then gmt gmtconvert trans.dat -o0,1,2 -bi5d -bo3d | gmt blockmedian -R0/$XMAX/0/$YMAX -I2/32 -bi3d -bo3d -r $V > temp.rat gmt surface temp.rat -Q -R0/$XMAX/0/$YMAX -I2/32 -bi3d -T.50 -N1000 -Gpixel.grd -r $V >& tmp.hint set nregion = `grep Hint tmp.hint | awk 'NR==1 {print $4}'` echo "region=$nregion" gmt surface temp.rat $nregion -I2/32 -bi3d -T.50 -N1000 -Gpixel.grd -r $V gmt grdsample pixel.grd -R0/$XMAX/0/$YMAX -I2/32 -r -Gpixel.grd else gmt gmtconvert trans.dat -o0,1,2 -bi5d -bo3d | gmt blockmedian -R0/$XMAX/0/$YMAX -I2/32 -bi3d -bo3d -r $V > temp.rat gmt surface temp.rat -Q -R0/$XMAX/0/$YMAX -I2/32 -bi3d -T.50 -N1000 -Gpixel.grd -r $V >& tmp.hint set nregion = `grep Hint tmp.hint | awk 'NR==1 {print $4}'` echo "region=$nregion" gmt surface temp.rat $nregion -I2/32 -bi3d -T.50 -N1000 -Gpixel.grd -r $V gmt grdsample pixel.grd -R0/$XMAX/0/$YMAX -I2/32 -r -Gpixel.grd endif # # flip top to bottom for both ascending and descending passes # gmt grdmath pixel.grd FLIPUD = topo_ra.grd # # plotting # gmt grd2cpt topo_ra.grd -Cgray $V -Z > topo_ra.cpt gmt grdimage topo_ra.grd $scale -P -Ctopo_ra.cpt -Bxaf+lRange -Byaf+lAzimuth -BWSen $V -K > topo_ra.ps gmt psscale -Rtopo_ra.grd -J -DJTC+w5i/0.2i+h+e -Ctopo_ra.cpt -Bxaf -By+lm -O >> topo_ra.ps gmt psconvert -Tf -P -Z topo_ra.ps echo "Topo range/azimuth map: topo_ra.pdf" # # clean up # rm pixel.grd temp.rat dem.xyz rm topo_ra.cpt GMTSAR_V5.7/.svn/pristine/d7/d76d5c4663c9655f806bbdbe3a34f90e96d0dbec.svn-base000444 015705 000000 00000111022 13505462013 026124 0ustar00sandwellwheel000000 000000 /* provides structures to read ALOS SAR tapes */ /* reall just a CEOS reader */ #ifndef SARLEADER_ALOS_H #define SARLEADER_ALOS_H /* include files were modified from the rceos.c programs written by C. Tomassini & F. Lorenna other format information from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada Table 6.1.2.2 "SARLEADER" FILE POINTER RECORD CONTENTS page 6. R. J. Mellors July 1997, IGPP-SIO from esa annex A (Document ER-IS-EPO-GS-5902.I) Issue 2.1.1 Paul F. Jamason 25-FEB-1997, IGPP-SIO Modified to read ALOS format Product Format Description (PALSAR Level 1.0) R. J. Mellors June 2007, SDSU 6/1/07 SARLEADER_DSS_RCS_ALOS 7th line changed to "%4c%4c%16c%16c%16c%16c%16c"\ (2 16c at end rather than 1 32c) */ /* ALOS raw data set summary record format */ #define SARLEADER_DSS_RCS_ALOS \ "%4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c" \ "%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c" \ "%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c" \ "%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c" \ "%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c" \ "%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c" \ "%4c%4c%16c%16c%16c%16c%16c" \ "%4c%8c%8c%8c%8c%4c%8c%16c%4c%4c%16c%4c%28c%120c%8c%8c%2048c%26c" /* ALOS raw data set summary corresponding log file output */ #define SARLEADER_DSS_RVL_ALOS(SP) \ (SP)->dss_rec_seq_num, (SP)->chan_ind, (SP)->reserved1, (SP)->scene_number, (SP)->input_scene_center_time, (SP)->spare1, \ (SP)->center_lat, (SP)->center_long, (SP)->center_heading, (SP)->ellipsoid_designator, (SP)->ellipsoid_semimajor_axis, \ (SP)->ellipsoid_semiminor_axis, (SP)->earth_constant, (SP)->spare2, (SP)->ellipsoid_j2, (SP)->ellipsoid_j3, \ (SP)->ellipsoid_j4, (SP)->spare, (SP)->reserved_new, (SP)->scene_centre_line_number, (SP)->scene_centre_pixel_number, \ (SP)->scene_length, (SP)->scene_width, (SP)->spare3, (SP)->nchan, (SP)->spare4, (SP)->mission_identifier, \ (SP)->sensor_id_and_mode, (SP)->orbit_number, (SP)->lat_nadir_center, (SP)->long_nadir_center, \ (SP)->heading_nadir_center, (SP)->clock_angle, (SP)->incidence_angle_center, (SP)->radar_freq, (SP)->radar_wavelength, \ (SP)->motion_compensation, (SP)->range_pulse_code_specifier, (SP)->range_pulse_amplitude_const, \ (SP)->range_pulse_amplitude_lin, (SP)->range_pulse_amplitude_quad, (SP)->range_pulse_amplitude_cube, \ (SP)->range_pulse_amplitude_quart, (SP)->range_pulse_phase_const, (SP)->range_pulse_phase_lin, \ (SP)->range_pulse_phase_quad, (SP)->range_pulse_phase_cube, (SP)->range_pulse_phase_quart, (SP)->chirp_extraction_index, \ (SP)->spare5, (SP)->sampling_rate, (SP)->range_gate_early_edge_start_image, (SP)->range_pulse_length, (SP)->reserved2, \ (SP)->range_compressed_flag, (SP)->reserved3, (SP)->quantisation_in_bits, (SP)->quantizer_descriptor, (SP)->dc_bias_i, \ (SP)->dc_bias_q, (SP)->gain_imbalance, (SP)->spare6, (SP)->reserved4, (SP)->antenna_mech_bor, (SP)->reserved5, \ (SP)->nominal_prf, (SP)->reserved6, (SP)->satelite_encoded_binary_time, (SP)->satelite_clock_time, \ (SP)->satelite_clock_increment, (SP)->spare7, (SP)->processing_facility_identifier, (SP)->processing_system_id, \ (SP)->processing_version_id, (SP)->reserved7, (SP)->product_type_id, (SP)->alg_id, (SP)->nlooks_az, \ (SP)->neff_looks_range, (SP)->bandwidth_look_az, (SP)->bandwidth_look_range, (SP)->total_look_bandwidth_az, \ (SP)->total_look_bandwidth_range, (SP)->w_func_designator_az, (SP)->w_func_designator_range, (SP)->data_input_source, \ (SP)->nom_res_3db_range, (SP)->nom_res_az, (SP)->reserved8, (SP)->a_track_dop_freq_const_early_image, \ (SP)->a_track_dop_freq_lin_early_image, (SP)->a_track_dop_freq_quad_early_image, (SP)->spare8, \ (SP)->c_track_dop_freq_const_early_image, (SP)->c_track_dop_freq_lin_early_image, \ (SP)->c_track_dop_freq_quad_early_image, (SP)->time_direction_along_pixel, (SP)->time_direction_along_line, \ (SP)->a_track_dop_freq_rate_const_early_image, (SP)->a_track_dop_freq_rate_lin_early_image, \ (SP)->a_track_dop_freq_rate_quad_early_image, (SP)->spare9, (SP)->c_track_dop_freq_rate_const_early_image, \ (SP)->c_track_dop_freq_rate_lin_early_image, (SP)->c_track_dop_freq_rate_quad_early_image, (SP)->spare10, \ (SP)->line_content_indicator, (SP)->clut_lock_flag, (SP)->autofocussing_flag, (SP)->line_spacing, \ (SP)->pixel_spacing_range, (SP)->range_compression_designator, (SP)->spare11, (SP)->spare12, \ (SP)->calibration_data_indicator, (SP)->start_line_upper_image, (SP)->stop_line_upper_image, \ (SP)->start_line_bottom_image, (SP)->stop_line_bottom_image, (SP)->PRF_switch, (SP)->PRF_switch_line, (SP)->spare13, \ (SP)->yaw_steering_mode, (SP)->parameter_table, (SP)->nom_offnadir_angle, (SP)->antenna_beam_number, (SP)->spare14, \ (SP)->spare15, (SP)->num_anno_points, (SP)->spare16, (SP)->image_annotation, (SP)->spare17 struct sarleader_dss_ALOS { char dss_rec_seq_num[4]; /*dss record sequence number (1)*/ char chan_ind[4]; /*sar channel indicator (1)*/ char reserved1[16]; /* scene identifier*/ char scene_number[32]; char input_scene_center_time[32]; char spare1[16]; char center_lat[16]; char center_long[16]; char center_heading[16]; char ellipsoid_designator[16]; char ellipsoid_semimajor_axis[16]; char ellipsoid_semiminor_axis[16]; char earth_constant[16]; char spare2[16]; char ellipsoid_j2[16]; char ellipsoid_j3[16]; char ellipsoid_j4[16]; char spare[16]; char reserved_new[16]; char scene_centre_line_number[8]; char scene_centre_pixel_number[8]; char scene_length[16]; char scene_width[16]; char spare3[16]; char nchan[4]; char spare4[4]; char mission_identifier[16]; char sensor_id_and_mode[32]; char orbit_number[8]; char lat_nadir_center[8]; char long_nadir_center[8]; char heading_nadir_center[8]; char clock_angle[8]; char incidence_angle_center[8]; char radar_freq[8]; char radar_wavelength[16]; char motion_compensation[2]; char range_pulse_code_specifier[16]; char range_pulse_amplitude_const[16]; char range_pulse_amplitude_lin[16]; char range_pulse_amplitude_quad[16]; char range_pulse_amplitude_cube[16]; char range_pulse_amplitude_quart[16]; char range_pulse_phase_const[16]; char range_pulse_phase_lin[16]; char range_pulse_phase_quad[16]; char range_pulse_phase_cube[16]; char range_pulse_phase_quart[16]; char chirp_extraction_index[8]; char spare5[8]; char sampling_rate[16]; char range_gate_early_edge_start_image[16]; char range_pulse_length[16]; char reserved2[4]; char range_compressed_flag[4]; char reserved3[32]; char quantisation_in_bits[8]; char quantizer_descriptor[12]; char dc_bias_i[16]; char dc_bias_q[16]; char gain_imbalance[16]; char spare6[32]; char reserved4[16]; char antenna_mech_bor[16]; char reserved5[4]; char nominal_prf[16]; char reserved6[32]; char satelite_encoded_binary_time[16]; char satelite_clock_time[32]; char satelite_clock_increment[8]; char spare7[8]; char processing_facility_identifier[16]; char processing_system_id[8]; char processing_version_id[8]; char reserved7[32]; char product_type_id[32]; char alg_id[32]; char nlooks_az[16]; char neff_looks_range[16]; char bandwidth_look_az[16]; char bandwidth_look_range[16]; char total_look_bandwidth_az[16]; char total_look_bandwidth_range[16]; char w_func_designator_az[32]; char w_func_designator_range[32]; char data_input_source[16]; char nom_res_3db_range[16]; char nom_res_az[16]; char reserved8[32]; char a_track_dop_freq_const_early_image[16]; char a_track_dop_freq_lin_early_image[16]; char a_track_dop_freq_quad_early_image[16]; char spare8[16]; char c_track_dop_freq_const_early_image[16]; char c_track_dop_freq_lin_early_image[16]; char c_track_dop_freq_quad_early_image[16]; char time_direction_along_pixel[8]; char time_direction_along_line[8]; char a_track_dop_freq_rate_const_early_image[16]; char a_track_dop_freq_rate_lin_early_image[16]; char a_track_dop_freq_rate_quad_early_image[16]; char spare9[16]; char c_track_dop_freq_rate_const_early_image[16]; char c_track_dop_freq_rate_lin_early_image[16]; char c_track_dop_freq_rate_quad_early_image[16]; char spare10[16]; char line_content_indicator[8]; char clut_lock_flag[4]; char autofocussing_flag[4]; char line_spacing[16]; char pixel_spacing_range[16]; char range_compression_designator[16]; char spare11[16]; char spare12[16]; char calibration_data_indicator[4]; char start_line_upper_image[8]; char stop_line_upper_image[8]; char start_line_bottom_image[8]; char stop_line_bottom_image[8]; char PRF_switch[4]; char PRF_switch_line[8]; char spare13[16]; char yaw_steering_mode[4]; char parameter_table[4]; char nom_offnadir_angle[16]; char antenna_beam_number[4]; char spare14[28]; char spare15[120]; char num_anno_points[8]; char spare16[8]; char image_annotation[2048]; char spare17[26]; }; #define SARLEADER_DSS_WCS_ALOS \ "*********** DSS RECORD ***********\n" \ "dss_rec_seq_num ==> %.4s\n" \ "chan_ind ==> %.4s\n" \ "reserved1 ==> %.16s\n" \ "scene_number ==> %.32s\n" \ "input_scene_center_time ==> %.32s\n" \ "spare1 ==> %.16s\n" \ "center_lat ==> %.16s\n" \ "center_long ==> %.16s\n" \ "center_heading ==> %.16s\n" \ "ellipsoid_designator ==> %.16s\n" \ "ellipsoid_semimajor_axis ==> %.16s\n" \ "ellipsoid_semiminor_axis ==> %.16s\n" \ "earth_constant ==> %.16s\n" \ "spare2 ==> %.16s\n" \ "ellipsoid_j2 ==> %.16s\n" \ "ellipsoid_j3 ==> %.16s\n" \ "ellipsoid_j4 ==> %.16s\n" \ "spare ==> %.16s\n" \ "reserved_new ==> %.16s\n" \ "scene_centre_line_number ==> %.8s\n" \ "scene_centre_pixel_number ==> %.8s\n" \ "scene_length ==> %.16s\n" \ "scene_width ==> %.16s\n" \ "spare3 ==> %.16s\n" \ "nchan ==> %.4s\n" \ "spare4 ==> %.4s\n" \ "mission_identifier ==> %.16s\n" \ "sensor_id_and_mode ==> %.32s\n" \ "orbit_number ==> %.8s\n" \ "lat_nadir_center ==> %.8s\n" \ "long_nadir_center ==> %.8s\n" \ "heading_nadir_center ==> %.8s\n" \ "clock_angle ==> %.8s\n" \ "incidence_angle_center ==> %.8s\n" \ "radar_freq ==> %.8s\n" \ "radar_wavelength ==> %.16s\n" \ "motion_compensation ==> %.2s\n" \ "range_pulse_code_specifier ==> %.16s\n" \ "range_pulse_amplitude_const ==> %.16s\n" \ "range_pulse_amplitude_lin ==> %.16s\n" \ "range_pulse_amplitude_quad ==> %.16s\n" \ "range_pulse_amplitude_cube ==> %.16s\n" \ "range_pulse_amplitude_quart ==> %.16s\n" \ "range_pulse_phase_const ==> %.16s\n" \ "range_pulse_phase_lin ==> %.16s\n" \ "range_pulse_phase_quad ==> %.16s\n" \ "range_pulse_phase_cube ==> %.16s\n" \ "range_pulse_phase_quart ==> %.16s\n" \ "chirp_extraction_index ==> %.8s\n" \ "spare5 ==> %.8s\n" \ "sampling_rate ==> %.16s\n" \ "range_gate_early_edge_start_image ==> %.16s\n" \ "range_pulse_length ==> %.16s\n" \ "reserved2 ==> %.4s\n" \ "range_compressed_flag ==> %.4s\n" \ "reserved3 ==> %.32s\n" \ "quantisation_in_bits ==> %.8s\n" \ "quantizer_descriptor ==> %.12s\n" \ "dc_bias_i ==> %.16s\n" \ "dc_bias_q ==> %.16s\n" \ "gain_imbalance ==> %.16s\n" \ "spare6 ==> %.32s\n" \ "reserved4 ==> %.16s\n" \ "antenna_mech_bor ==> %.16s\n" \ "reserved5 ==> %.4s\n" \ "nominal_prf ==> %.16s\n" \ "reserved6 ==> %.32s\n" \ "satelite_encoded_binary_time ==> %.16s\n" \ "satelite_clock_time ==> %.32s\n" \ "satelite_clock_increment ==> %.8s\n" \ "spare7 ==> %.8s\n" \ "processing_facility_identifier ==> %.16s\n" \ "processing_system_id ==> %.8s\n" \ "processing_version_id ==> %.8s\n" \ "reserved7 ==> %.32s\n" \ "product_type_id ==> %.32s\n" \ "alg_id ==> %.32s\n" \ "nlooks_az ==> %.16s\n" \ "neff_looks_range ==> %.16s\n" \ "bandwidth_look_az ==> %.16s\n" \ "bandwidth_look_range ==> %.16s\n" \ "total_look_bandwidth_az ==> %.16s\n" \ "total_look_bandwidth_range ==> %.16s\n" \ "w_func_designator_az ==> %.32s\n" \ "w_func_designator_range ==> %.32s\n" \ "data_input_source ==> %.16s\n" \ "nom_res_3db_range ==> %.16s\n" \ "nom_res_az ==> %.16s\n" \ "reserved8 ==> %.32s\n" \ "a_track_dop_freq_const_early_image ==> %.16s\n" \ "a_track_dop_freq_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_quad_early_image ==> %.16s\n" \ "spare8 ==> %.16s\n" \ "c_track_dop_freq_const_early_image ==> %.16s\n" \ "c_track_dop_freq_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_quad_early_image ==> %.16s\n" \ "time_direction_along_pixel ==> %.8s\n" \ "time_direction_along_line ==> %.8s\n" \ "a_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "a_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare9 ==> %.16s\n" \ "c_track_dop_freq_rate_const_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_lin_early_image ==> %.16s\n" \ "c_track_dop_freq_rate_quad_early_image ==> %.16s\n" \ "spare10 ==> %.16s\n" \ "line_content_indicator ==> %.8s\n" \ "clut_lock_flag ==> %.4s\n" \ "autofocussing_flag ==> %.4s\n" \ "line_spacing ==> %.16s\n" \ "pixel_spacing_range ==> %.16s\n" \ "range_compression_designator ==> %.16s\n" \ "spare11 ==> %.16s\n" \ "spare12 ==> %.16s\n" \ "calibration_data_indicator ==> %.4s\n" \ "start_line_upper_image ==> %.8s\n" \ "stop_line_upper_image ==> %.8s\n" \ "start_line_bottom_image ==> %.8s\n" \ "stop_line_bottom_image ==> %.8s\n" \ "PRF_switch ==> %.4s\n" \ "PRF_switch_line ==> %.8s\n" \ "spare13 ==> %.16s\n" \ "yaw_steering_mode ==> %.4s\n" \ "parameter_table ==> %.4s\n" \ "nom_offnadir_angle ==> %.16s\n" \ "antenna_beam_number ==> %.4s\n" \ "spare14 ==> %.28s\n" \ "spare15 ==> %.120s\n" \ "num_anno_points ==> %.8s\n" \ "spare16 ==> %.8s\n" \ "image_annotation ==> %.2048s\n" \ "spare17 ==> %.26s\n" /* provides structures to read SAR tapes*/ /* modified from the rceos programs by C. Tomassini & F. Lorenna */ /* also from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada R. J. Mellors July 1997, IGPP-SIO */ #define PLATFORM_RCS_ALOS \ "%32c%16c%16c%16c%16c%16c%16c%4c%4c%4c%4c%4c%22c%22c%64c%22c%16c%16c%16c%" \ "16c%16c%16c" #define PLATFORM_RVL_ALOS(SP) \ (SP)->orbital_elements, (SP)->orbital_element_1, (SP)->orbital_element_2, (SP)->orbital_element_3, (SP)->orbital_element_4, \ (SP)->orbital_element_5, (SP)->orbital_element_6, (SP)->num_data_points, (SP)->year_of_data_points, \ (SP)->month_of_data_points, (SP)->day_of_data_points, (SP)->day_of_data_points_in_year, (SP)->sec_of_day_of_data, \ (SP)->data_points_time_gap, (SP)->ref_coord_sys, (SP)->greenwhich_mean_hour_angle, (SP)->a_track_pos_err, \ (SP)->c_track_pos_err, (SP)->radial_pos_err, (SP)->a_track_vel_err, (SP)->c_track_vel_err, (SP)->radial_vel_err /* ALOS stuff added by RJM June 2007 */ struct platform_ALOS { char orbital_elements[32]; char orbital_element_1[16]; char orbital_element_2[16]; char orbital_element_3[16]; char orbital_element_4[16]; char orbital_element_5[16]; char orbital_element_6[16]; char num_data_points[4]; char year_of_data_points[4]; char month_of_data_points[4]; char day_of_data_points[4]; char day_of_data_points_in_year[4]; char sec_of_day_of_data[22]; char data_points_time_gap[22]; char ref_coord_sys[64]; char greenwhich_mean_hour_angle[22]; char a_track_pos_err[16]; char c_track_pos_err[16]; char radial_pos_err[16]; char a_track_vel_err[16]; char c_track_vel_err[16]; char radial_vel_err[16]; }; #define POSITION_VECTOR_RCS_ALOS "%22c%22c%22c%22c%22c%22c" #define POSITION_VECTOR_RVL_ALOS(SP) (SP)->pos_x, (SP)->pos_y, (SP)->pos_z, (SP)->vel_x, (SP)->vel_y, (SP)->vel_z struct position_vector_ALOS { char pos_x[22]; char pos_y[22]; char pos_z[22]; char vel_x[22]; char vel_y[22]; char vel_z[22]; }; #define PLATFORM_WCS_ALOS \ "*********** PLATFORM POSITION VECTOR **********\n" \ "orbital_elements ==> |%.32s|\n" \ "orbital_element_1 ==> |%.16s|\n" \ "orbital_element_2 ==> |%.16s|\n" \ "orbital_element_3 ==> |%.16s|\n" \ "orbital_element_4 ==> |%.16s|\n" \ "orbital_element_5 ==> |%.16s|\n" \ "orbital_element_6 ==> |%.16s|\n" \ "num_data_points ==> |%.4s|\n" \ "year_of_data_points ==> |%.4s|\n" \ "month_of_data_points ==> |%.4s|\n" \ "day_of_data_points ==> |%.4s|\n" \ "day_of_data_points_in_year ==> |%.4s|\n" \ "sec_of_day_of_data ==> |%.22s|\n" \ "data_points_time_gap ==> |%.22s|\n" \ "ref_coord_sys ==> |%.64s|\n" \ "greenwhich_mean_hour_angle ==> |%.22s|\n" \ "a_track_pos_err ==> |%.16s|\n" \ "c_track_pos_err ==> |%.16s|\n" \ "radial_pos_err ==> |%.16s|\n" \ "a_track_vel_err ==> |%.16s|\n" \ "c_track_vel_err ==> |%.16s|\n" \ "radial_vel_err ==> |%.16s|\n" #define POSITION_VECTOR_WCS_ALOS \ "*********** PLATFORM VECTOR **********\n" \ "pos_x ==> %.22s\n" \ "pos_y ==> %.22s\n" \ "pos_z ==> %.22s\n" \ "vel_x ==> %.22s\n" \ "vel_y ==> %.22s\n" \ "vel_z ==> %.22s\n\n" struct attitude_info_ALOS { char num_att_data_points[4]; }; #define ATTITUDE_INFO_RCS_ALOS "%4c" #define ATTITUDE_INFO_WCS_ALOS \ "*********** ATTITUDE INFO **********\n" \ "num_att_data_points ==> |%.4s|\n" #define ATTITUDE_INFO_RVL_ALOS(SP) (SP)->num_att_data_points #define ATTITUDE_DATA_WCS_ALOS \ "*********** ATTITUDE DATA **********\n" \ "day_of_year ==> |%.4s|\n" \ "millisecond_day ==> |%.8s|\n" \ "pitch_data_quality ==> |%.4s|\n" \ "roll_data_quality ==> |%.4s|\n" \ "yaw_data_quality ==> |%.4s|\n" \ "pitch ==> |%.14s|\n" \ "roll ==> |%.14s|\n" \ "yaw ==> |%.14s|\n" \ "pitch_rate_data_quality ==> |%.4s|\n" \ "roll_rate_data_quality ==> |%.4s|\n" \ "yaw_rate_data_quality ==> |%.4s|\n" \ "pitch_rate ==> |%.14s|\n" \ "roll_rate ==> |%.14s|\n" \ "yaw_rate ==> |%.14s|\n" #define ATTITUDE_DATA_RCS_ALOS "%4c%8c%4c%4c%4c%14c%14c%14c%4c%4c%4c%14c%14c%14c" #define ATTITUDE_DATA_RVL_ALOS(SP) \ (SP)->day_of_year, (SP)->millisecond_day, (SP)->pitch_data_quality, (SP)->roll_data_quality, (SP)->yaw_data_quality, \ (SP)->pitch, (SP)->roll, (SP)->yaw, (SP)->pitch_rate_data_quality, (SP)->roll_rate_data_quality, \ (SP)->yaw_rate_data_quality, (SP)->pitch_rate, (SP)->roll_rate, (SP)->yaw_rate struct attitude_data_ALOS { char day_of_year[4]; char millisecond_day[8]; char pitch_data_quality[4]; char roll_data_quality[4]; char yaw_data_quality[4]; char pitch[14]; char roll[14]; char yaw[14]; char pitch_rate_data_quality[4]; char roll_rate_data_quality[4]; char yaw_rate_data_quality[4]; char pitch_rate[14]; char roll_rate[14]; char yaw_rate[14]; }; struct SAR_info { struct sarleader_fdr_fixseg *fixseg; struct sarleader_fdr_varseg *varseg; struct sarleader_dss_ALOS *dss_ALOS; struct platform_ALOS *platform_ALOS; struct position_vector_ALOS *position_ALOS; struct attitude_info_ALOS *attitude_info_ALOS; struct attitude_data_ALOS *attitude_ALOS; }; #endif /* SARLEADER_ALOS_H */ GMTSAR_V5.7/.svn/pristine/bb/bb3464696cf106a515db6a09911edb77af099f6f.svn-base000444 015705 000000 00000017037 13505462014 025765 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl ### make_raw_alos.pl use Env qw(INT_SCR INT_BIN MY_BIN); use lib "$INT_SCR"; #### Location of Generic.pm use Generic; use POSIX qw(ceil floor); sub Usage { print STDERR <.raw and I.raw.rsc from imagery files make_raw_alos_ERSDAC.pl put together by Rob Mellors (7/2010, SDSU) but based on make_raw_alos.pl by Yuri Fialko with modifications by Eric Fielding and Zhenlong Li software inputs from Dave Sandwell, Rob Mellors, and Matt Wei * does not handle ALOS_merge or FBS2FBD/FBD2FBS * requires version of ALOS_pre_process that create roi_pac output (-roi) * note that ERSDAC data already has a .raw suffix Example: make_raw_alos_ERSDAC.pl PASL10C0609250613491002120000 (requires PASL10C0609250613491002120000.raw and PASL10C0609250613491002120000.ldr) END exit 1; } @ARGV >= 1 or Usage(); @args = @ARGV; $alos_file_prefix = shift; $outname = shift ; # get name of image file # ERSDAC uses *.raw to identify image files # need to avoid confusion with outname.raw # RJM $imagery = `ls $alos_file_prefix.raw` or die "No Imagery files\n"; $leaderfile = `ls $alos_file_prefix.ldr` or die "No Leaderfile \n"; chop($imagery); chop($leaderfile); ################# Message "Checking I/O"; ################# Log ("make_raw_alos.pl", @args); Message "ALOS_pre_process $imagery $leaderfile"; `ALOS_pre_process $imagery $leaderfile -nodopp -roi`; # # ALOS_pre_process (with -roi flag as of 7/2010) creates: # ALOS_FILE_PREFIX.PRM - PRM header file # ALOS_FILE_PREFIX.raw.raw - reformatted raw data # tmp.DATE.raw.rsc - partial rsc filr for raw data # hdr_data_points_DATE.rsc - orbit hdr file # DATE is yymmdd format # # roi_pac does not use the ALOS_pre_process doppler # information so run with -nodopp flag (faster) # # read data from tmp rsc file name $tmp_raw_rsc = `ls tmp.*.raw.rsc`; chop($tmp_raw_rsc); ($tmp,$date,$tmp,$tmp) = split(/\./,$tmp_raw_rsc); # # copy rsc from ALOS_pre_process to tmp_IMAGERY.raw.rsc `cp $tmp_raw_rsc tmp_IMAGERY.raw.rsc`; # # rename reformatted raw file (with .raw.raw suffix for ERSDAC !) # to tmp_IMAGERY.raw `\mv $imagery.raw tmp_IMAGERY.raw`; # # orbit information written by ALOS_pre_process $HDR = "hdr_data_points_".$date.".rsc"; # # read parameters from rsc file created by ALOS_pre_process # $day = Use_rsc "tmp_IMAGERY.raw read FIRST_LINE_DAY_OF_MONTH"; $month = Use_rsc "tmp_IMAGERY.raw read FIRST_LINE_MONTH_OF_YEAR"; $year = Use_rsc "tmp_IMAGERY.raw read FIRST_LINE_YEAR"; $first_line_utc = Use_rsc "tmp_IMAGERY.raw read FIRST_LINE_UTC"; $center_utc = Use_rsc "tmp_IMAGERY.raw read CENTER_LINE_UTC"; $last_line_utc = Use_rsc "tmp_IMAGERY.raw read LAST_LINE_UTC"; $equatorial_radius = Use_rsc "tmp_IMAGERY.raw read EQUATORIAL_RADIUS"; $file_length = Use_rsc "tmp_IMAGERY.raw read FILE_LENGTH"; $orbit_type = "HDR"; $sat = "ALOS"; $outname = $date; Message "Using Orbit Information"; ($q1,$q2,$Lat,$Lon,$height_mid, $x0, $y0, $z0, $vx0, $vy0,$vz0) = split /\s+/, `$INT_SCR/state_vector.pl $year$month$day $center_utc $sat $orbit_type $outname`; Status "state_vector.pl"; $pi = atan2(1,1)*4; if ($orbit_type eq "HDR"){ &calc_height_GRS80; $height_mid=$H; } # # used original commetns to name # &calc_radius_WGS84; ($q1,$q2,$q3,$q4,$height_top, $x0, $y0, $z0, $vx, $vy,$vz) = split /\s+/, `$INT_SCR/state_vector.pl $year$month$day $first_line_utc $sat $orbit_type $outname`; Status "state_vector.pl"; if ($orbit_type eq "HDR"){ &calc_height_GRS80; $height_top=$H; } $height_dt=($height_mid-$height_top)/($center_utc-$first_line_utc); if ($vz0 > 0) {$orbit_direction = "ascending";} else {$orbit_direction = "descending";} $velocity_mid = sqrt($vx0**2 + $vy0**2 + $vz0**2); $Latd = $Lat*180.0 / $pi; $Lond = $Lon*180.0 / $pi; $hdgd = $hdg*180.0 / $pi; print STDERR "vel $vel $velocity_mid \n"; # write it out to the rsc file Use_rsc "tmp_IMAGERY.raw write HEIGHT_TOP $height_top"; Use_rsc "tmp_IMAGERY.raw write HEIGHT $height_mid"; Use_rsc "tmp_IMAGERY.raw write HEIGHT_DT $height_dt"; Use_rsc "tmp_IMAGERY.raw write VELOCITY $velocity_mid"; Use_rsc "tmp_IMAGERY.raw write LATITUDE $Latd"; Use_rsc "tmp_IMAGERY.raw write LONGITUDE $Lond"; Use_rsc "tmp_IMAGERY.raw write HEADING $hdgd"; Use_rsc "tmp_IMAGERY.raw write EQUATORIAL_RADIUS $equatorial_radius"; Use_rsc "tmp_IMAGERY.raw write ECCENTRICITY_SQUARED $e2"; Use_rsc "tmp_IMAGERY.raw write EARTH_EAST_RADIUS $N"; Use_rsc "tmp_IMAGERY.raw write EARTH_NORTH_RADIUS $M"; Use_rsc "tmp_IMAGERY.raw write EARTH_RADIUS $earth_radius_mid"; Use_rsc "tmp_IMAGERY.raw write ORBIT_DIRECTION $orbit_direction"; # ################################ #Message "Doppler Computation"; ################################ # ## use external routine EJF system "$INT_SCR/scan_doppler.pl tmp_IMAGERY $file_length"; # ## move to final file name `mv tmp_IMAGERY.raw.rsc ${outname}.raw.rsc`; `mv tmp_IMAGERY.raw ${outname}.raw`; # ########################## #Message "Raw data ready for processing"; ########################## # exit 0; #-------------------------------------------------------------------- sub calc_height_GRS80{ $ae = 6378137; #GRS80 reference ellipsoid $flat = 1/298.257223563; # looks like WGS84 ? $r = sqrt($x0**2+$y0**2+$z0**2); $r1 = sqrt($x0**2+$y0**2); $Lat = atan2($z0,$r1); $Lon = atan2($y0,$x0); $H = $r-$ae; for ($i=1; $i<7; $i++){ $N = $ae/(sqrt(1-$flat*(2-$flat)*sin($Lat)**2)); $TanLat = $z0/$r1/(1-(2-$flat)*$flat*$N/($N+$H)); $Lat = atan2($TanLat,1); $H = $r1/cos($Lat)-$N; } # Message "calc_height_GRS80 $H"; } #-------------------------------------------------------------------- sub calc_radius_WGS84 { $ae = 6378137; #WGS84 reference ellipsoid $flat = 1./298.257223563; $N = $ae/sqrt(1-$flat*(2-$flat)*sin($Lat)**2); $re_mid=$N; $ve = -sin($Lon) * $vx0 + cos($Lon) * $vy0; $vn = -sin($Lat) * cos($Lon) * $vx0 - sin($Lat) * sin($Lon) * $vy0 + cos($Lat) * $vz0; $hdg = atan2($ve,$vn); $e2 = $flat * (2-$flat); $M = $ae * (1-$e2) / (sqrt(1-$e2 * sin($Lat)**2))**3; $earth_radius_mid = $N*$M/($N*(cos($hdg))**2+$M*(sin($hdg))**2); # Message "calc_radius_WGS84 $earth_radius_mid"; } #-------------------------------------------------------------------- # Perl trim function to remove whitespace from the start and end of the string sub trim($) { my $string = shift; $string =~ s/^\s+//; $string =~ s/\s+$//; return $string; } #-------------------------------------------------------------------- =pod =head1 USAGE B I< alos_file_prefix_root > =head1 FUNCTION Creates I.raw and I.raw.rsc from ALOS ERSDAC imagery files =head1 ROUTINES CALLED ALOS_pre_process state_vector.pl =head1 CALLED BY none =head1 FILES USED PAS*.raw PAS*.ldr =head1 FILES CREATED I.raw I.raw.rsc I_parse_line.out shift.out shift.out.rsc =head1 HISTORY Perl Script : Yuri Fialko 07/11/2007 Use ALOS_pre_processor and ALOS_merge to pre-process and merge a set of ALOS frames; Eric Fielding, on 9 Oct 2007 Use ALOS_fbd2fbs and ALOS_fbs2fbd to convert between FBD and FBS images; Zhenhong Li, on 19 Oct 2007 Butchered by RJM to handle ERSDAC format - removed ALOS_fbd2fbs ALOS_fbs2fbd and ALOS_merge.... 27 July 2010 =head1 LAST UPDATE 2010/07/27 R Mellors SDSU =cut GMTSAR_V5.7/.svn/pristine/ad/ada5e034e3f4ad986ca63f52a186a620b2ff6d81.svn-base000444 015705 000000 00000001201 13505462013 026067 0ustar00sandwellwheel000000 000000 /* orbit.h */ /* structure to hold orbit and attitude */ #define NA 64 /* number of altitude data points */ #define HDR 1 /* orbit information from header */ #define ODR 2 /* orbit information from Delft */ #define DOR 3 /* orbit information from Doris */ struct ORB_XYZ { double pt; double px; double py; double pz; double vx; double vy; double vz; }; struct SAT_ORB { int itype; int nd; int iy; int id; double sec; double dsec; double pt0; struct ORB_XYZ *points; }; struct SAT_ATT { int na; int id[NA]; int msec[NA]; double ap[NA]; double ar[NA]; double ay[NA]; double dp[NA]; double dr[NA]; double dy[NA]; }; GMTSAR_V5.7/.svn/pristine/ad/ad19b3d5efcb7cfcdb419e335edecdb7c62f7487.svn-base000444 015705 000000 00000003446 13505462013 026506 0ustar00sandwellwheel000000 000000 /* $Id: file_stuff.c 109 2015-01-19 23:01:24Z sandwell $ */ #include "gmtsar.h" /*--------------------------------------------------------------*/ void print_prm_params(struct PRM p1, struct PRM p2) { fprintf(stderr, " SLC 1: num_rng_bins %d num_lines %d \n", p1.num_rng_bins, p1.num_lines); fprintf(stderr, " SLC 2: num_rng_bins %d num_lines %d \n", p2.num_rng_bins, p2.num_lines); fprintf(stderr, " lambda %f \n", p2.lambda); fprintf(stderr, " baseline_start %f \n", p2.baseline_start); fprintf(stderr, " baseline_end %f \n", p2.baseline_end); fprintf(stderr, " alpha_start %f \n", p2.alpha_start); fprintf(stderr, " alpha_end %f \n", p2.alpha_end); fprintf(stderr, " near_range %f \n", p2.near_range); fprintf(stderr, " rng_samp_rate %f \n", p2.fs); fprintf(stderr, " SC_clock_start %f \n", p2.SC_clock_start); fprintf(stderr, " SC_clock_stop %f \n", p2.SC_clock_stop); fprintf(stderr, " clock_start %f \n", p2.clock_start); fprintf(stderr, " clock_stop %f \n", p2.clock_stop); fprintf(stderr, " prf %f \n", p2.prf); } /*--------------------------------------------------------------*/ void fix_prm_params(struct PRM *p, char *s) { double delr; delr = SOL / p->fs / 2.0; /* these are from prm2gips */ p->near_range = p->near_range + (p->st_rng_bin - p->chirp_ext + p->rshift + p->sub_int_r - 1) * delr; p->SC_clock_start = p->SC_clock_start + (p->ashift + p->sub_int_a) / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->SC_clock_stop = p->SC_clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); p->clock_start = p->clock_start + (p->ashift + p->sub_int_a) / (p->prf * 86400.0) + (p->nrows - p->num_valid_az) / (2.0 * p->prf * 86400); p->clock_stop = p->clock_start + (p->num_valid_az * p->num_patches) / (p->prf * 86400.0); } GMTSAR_V5.7/.svn/pristine/ad/adbc3ead83f055a02955125798177f48457534e0.svn-base000444 015705 000000 00000043473 13505462014 025470 0ustar00sandwellwheel000000 000000 /* provides structures to read SAR tapes*/ /* include files modified from the rceos.c programs written by C. Tomassini & F. Lorenna other format information from: from CERS (RAW) CCT format specifications STD-TM#92-767F Canada Centre for Remote Sensing (CCRS) Surveys, Mapping and Remote Sensing Sector Energy, Mines and Resources Canada Table 6.1.2.2 "SARLEADER" FILE POINTER RECORD CONTENTS page 6. R. J. Mellors July 1997, IGPP-SIO from esa annex A (Document ER-IS-EPO-GS-5902.I) Issue 2.1.1 Paul F. Jamason 25-FEB-1997, IGPP-SIO */ struct sarleader_dss_binary { int record_seq_no; char record_subtype_code1; char record_type_code1; char record_subtype_code2; char record_subtype_code3; int record_length; }; /* ccrs raw data set summary record format */ #define SARLEADER_DSS_RCS \ "%4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c" \ "%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c" \ "%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c" \ "%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c" \ "%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c" \ "%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c" \ "%4c%4c%16c%16c%16c%32c%16c%16c%16c%24c%24c%24c%546c" /* ccrs raw data set summary corresponding log file output */ #define SARLEADER_DSS_RVL(SP) \ (SP)->dss_rec_seq_num, (SP)->chan_ind, (SP)->reserved1, (SP)->scene_number, (SP)->input_scene_center_time, (SP)->spare1, \ (SP)->center_lat, (SP)->center_long, (SP)->center_heading, (SP)->ellipsoid_designator, (SP)->ellipsoid_semimajor_axis, \ (SP)->ellipsoid_semiminor_axis, (SP)->earth_constant, (SP)->spare2, (SP)->ellipsoid_j2, (SP)->ellipsoid_j3, \ (SP)->ellipsoid_j4, (SP)->spare, (SP)->reserved_new, (SP)->scene_centre_line_number, (SP)->scene_centre_pixel_number, \ (SP)->scene_length, (SP)->scene_width, (SP)->spare3, (SP)->nchan, (SP)->spare4, (SP)->mission_identifier, \ (SP)->sensor_id_and_mode, (SP)->orbit_number, (SP)->lat_nadir_center, (SP)->long_nadir_center, \ (SP)->heading_nadir_center, (SP)->clock_angel, (SP)->incidence_angle_center, (SP)->radar_freq, (SP)->radar_wavelength, \ (SP)->motion_compensation, (SP)->range_pulse_code_specifier, (SP)->range_pulse_amplitude_const, \ (SP)->range_pulse_amplitude_lin, (SP)->range_pulse_amplitude_quad, (SP)->range_pulse_amplitude_cube, \ (SP)->range_pulse_amplitude_quart, (SP)->range_pulse_phase_const, (SP)->range_pulse_phase_lin, \ (SP)->range_pulse_phase_quad, (SP)->range_pulse_phase_cube, (SP)->range_pulse_phase_quart, (SP)->chirp_extraction_index, \ (SP)->spare5, (SP)->sampling, (SP)->range_gate_early_edge_start_image, (SP)->range_pulse_length, (SP)->reserved2, \ (SP)->range_compressed_flag, (SP)->reserved3, (SP)->quantisation_in_bits, (SP)->quantizer_descriptor, (SP)->dc_bias_i, \ (SP)->dc_bias_q, (SP)->gain_imbalance, (SP)->spare6, (SP)->reserved4, (SP)->antenna_mech_bor, (SP)->reserved5, \ (SP)->nominal_prf, (SP)->reserved6, (SP)->satelite_encoded_binary_time, (SP)->satelite_clock_time, \ (SP)->satelite_clock_increment, (SP)->spare7, (SP)->processing_facility_identifier, (SP)->processing_system_id, \ (SP)->processing_version_id, (SP)->reserved7, (SP)->product_type_id, (SP)->alg_id, (SP)->nlooks_az, \ (SP)->neff_looks_range, (SP)->bandwidth_look_az, (SP)->bandwidth_look_range, (SP)->total_look_bandwidth_az, \ (SP)->total_look_bandwidth_range, (SP)->w_func_designator_az, (SP)->w_func_designator_range, (SP)->data_input_source, \ (SP)->nom_res_3db_range, (SP)->nom_res_az, (SP)->reserved8, (SP)->a_track_dop_freq_const_early_image, \ (SP)->a_track_dop_freq_lin_early_image, (SP)->a_track_dop_freq_quad_early_image, (SP)->spare8, \ (SP)->c_track_dop_freq_const_early_image, (SP)->c_track_dop_freq_lin_early_image, \ (SP)->c_track_dop_freq_quad_early_image, (SP)->time_direction_along_pixel, (SP)->time_direction_along_line, \ (SP)->a_track_dop_freq_rate_const_early_image, (SP)->a_track_dop_freq_rate_lin_early_image, \ (SP)->a_track_dop_freq_rate_quad_early_image, (SP)->spare9, (SP)->c_track_dop_freq_rate_const_early_image, \ (SP)->c_track_dop_freq_rate_lin_early_image, (SP)->c_track_dop_freq_rate_quad_early_image, (SP)->spare10, \ (SP)->line_content_indicator, (SP)->clut_lock_flag, (SP)->autofocussing_flag, (SP)->line_spacing, \ (SP)->pixel_spacing_range, (SP)->range_compression_designator, (SP)->spare11, (SP)->zero_dop_range_time_f_pixel, \ (SP)->zero_dop_range_time_c_pixel, (SP)->zero_dop_range_time_l_pixel, (SP)->zero_dop_az_time_f_pixel, \ (SP)->zero_dop_az_time_c_pixel, (SP)->zero_dop_az_time_l_pixel, (SP)->gec_local_use_segment struct sarleader_dss { char dss_rec_seq_num[4]; /*dss record sequence number (1)*/ char chan_ind[4]; /*sar channel indicator (1)*/ char reserved1[16]; /* scene identifier*/ char scene_number[32]; char input_scene_center_time[32]; char spare1[16]; char center_lat[16]; char center_long[16]; char center_heading[16]; char ellipsoid_designator[16]; char ellipsoid_semimajor_axis[16]; char ellipsoid_semiminor_axis[16]; char earth_constant[16]; char spare2[16]; char ellipsoid_j2[16]; char ellipsoid_j3[16]; char ellipsoid_j4[16]; char spare[16]; char reserved_new[16]; char scene_centre_line_number[8]; char scene_centre_pixel_number[8]; char scene_length[16]; char scene_width[16]; char spare3[16]; char nchan[4]; char spare4[4]; char mission_identifier[16]; char sensor_id_and_mode[32]; char orbit_number[8]; char lat_nadir_center[8]; char long_nadir_center[8]; char heading_nadir_center[8]; char clock_angel[8]; char incidence_angle_center[8]; char radar_freq[8]; char radar_wavelength[16]; char motion_compensation[2]; char range_pulse_code_specifier[16]; char range_pulse_amplitude_const[16]; char range_pulse_amplitude_lin[16]; char range_pulse_amplitude_quad[16]; char range_pulse_amplitude_cube[16]; char range_pulse_amplitude_quart[16]; char range_pulse_phase_const[16]; char range_pulse_phase_lin[16]; char range_pulse_phase_quad[16]; char range_pulse_phase_cube[16]; char range_pulse_phase_quart[16]; char chirp_extraction_index[8]; char spare5[8]; char sampling[16]; char range_gate_early_edge_start_image[16]; char range_pulse_length[16]; char reserved2[4]; char range_compressed_flag[4]; char reserved3[32]; char quantisation_in_bits[8]; char quantizer_descriptor[12]; char dc_bias_i[16]; char dc_bias_q[16]; char gain_imbalance[16]; char spare6[32]; char reserved4[16]; char antenna_mech_bor[16]; char reserved5[4]; char nominal_prf[16]; char reserved6[32]; char satelite_encoded_binary_time[16]; char satelite_clock_time[32]; char satelite_clock_increment[8]; char spare7[8]; char processing_facility_identifier[16]; char processing_system_id[8]; char processing_version_id[8]; char reserved7[32]; char product_type_id[32]; char alg_id[32]; char nlooks_az[16]; char neff_looks_range[16]; char bandwidth_look_az[16]; char bandwidth_look_range[16]; char total_look_bandwidth_az[16]; char total_look_bandwidth_range[16]; char w_func_designator_az[32]; char w_func_designator_range[32]; char data_input_source[16]; char nom_res_3db_range[16]; char nom_res_az[16]; char reserved8[32]; char a_track_dop_freq_const_early_image[16]; char a_track_dop_freq_lin_early_image[16]; char a_track_dop_freq_quad_early_image[16]; char spare8[16]; char c_track_dop_freq_const_early_image[16]; char c_track_dop_freq_lin_early_image[16]; char c_track_dop_freq_quad_early_image[16]; char time_direction_along_pixel[8]; char time_direction_along_line[8]; char a_track_dop_freq_rate_const_early_image[16]; char a_track_dop_freq_rate_lin_early_image[16]; char a_track_dop_freq_rate_quad_early_image[16]; char spare9[16]; char c_track_dop_freq_rate_const_early_image[16]; char c_track_dop_freq_rate_lin_early_image[16]; char c_track_dop_freq_rate_quad_early_image[16]; char spare10[16]; char line_content_indicator[8]; char clut_lock_flag[4]; char autofocussing_flag[4]; char line_spacing[16]; char pixel_spacing_range[16]; char range_compression_designator[16]; char spare11[32]; char zero_dop_range_time_f_pixel[16]; char zero_dop_range_time_c_pixel[16]; char zero_dop_range_time_l_pixel[16]; char zero_dop_az_time_f_pixel[25]; char zero_dop_az_time_c_pixel[24]; char zero_dop_az_time_l_pixel[24]; char gec_local_use_segment[546]; }; /* dpaf raw data set summary record format */ #define SARLEADER_DPAF_DSS_RCS \ "%4c%4c%16c%32c%32c%16c%16c%16c%16c%16c%16c" \ "%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%4c%4c%16c%32c%8c%8c" \ "%8c%8c%8c%8c%8c%16c%2c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%16c%8c%8c" \ "%16c%16c%16c%4c%4c%32c%8c%12c%16c%16c%16c%32c%16c%16c%4c%16c%32c%16c%32c" \ "%8c%8c%16c%8c%8c%32c%32c%32c%16c%16c%16c%16c%16c%16c%32c%32c%16c%16c%16c" \ "%32c%16c%16c%16c%16c%16c%16c%16c%8c%8c%16c%16c%16c%16c%16c%16c%16c%16c%8c" \ "%4c%4c%16c%16c%16c%32c%16c%16c%16c%24c%24c%24c" /* dpaf raw data set summary corresponding log file output */ #define SARLEADER_DPAF_DSS_RVL(SP) \ (SP)->dss_rec_seq_num, (SP)->chan_ind, (SP)->reserved1, (SP)->scene_number, (SP)->input_scene_center_time, (SP)->spare1, \ (SP)->center_lat, (SP)->center_long, (SP)->center_heading, (SP)->ellipsoid_designator, (SP)->ellipsoid_semimajor_axis, \ (SP)->ellipsoid_semiminor_axis, (SP)->earth_constant, (SP)->spare2, (SP)->ellipsoid_j2, (SP)->ellipsoid_j3, \ (SP)->ellipsoid_j4, (SP)->spare, (SP)->reserved_new, (SP)->scene_centre_line_number, (SP)->scene_centre_pixel_number, \ (SP)->scene_length, (SP)->scene_width, (SP)->spare3, (SP)->nchan, (SP)->spare4, (SP)->mission_identifier, \ (SP)->sensor_id_and_mode, (SP)->orbit_number, (SP)->lat_nadir_center, (SP)->long_nadir_center, \ (SP)->heading_nadir_center, (SP)->clock_angel, (SP)->incidence_angle_center, (SP)->radar_freq, (SP)->radar_wavelength, \ (SP)->motion_compensation, (SP)->range_pulse_code_specifier, (SP)->range_pulse_amplitude_const, \ (SP)->range_pulse_amplitude_lin, (SP)->range_pulse_amplitude_quad, (SP)->range_pulse_amplitude_cube, \ (SP)->range_pulse_amplitude_quart, (SP)->range_pulse_phase_const, (SP)->range_pulse_phase_lin, \ (SP)->range_pulse_phase_quad, (SP)->range_pulse_phase_cube, (SP)->range_pulse_phase_quart, (SP)->chirp_extraction_index, \ (SP)->spare5, (SP)->sampling, (SP)->range_gate_early_edge_start_image, (SP)->range_pulse_length, (SP)->reserved2, \ (SP)->range_compressed_flag, (SP)->reserved3, (SP)->quantisation_in_bits, (SP)->quantizer_descriptor, (SP)->dc_bias_i, \ (SP)->dc_bias_q, (SP)->gain_imbalance, (SP)->spare6, (SP)->reserved4, (SP)->antenna_mech_bor, (SP)->reserved5, \ (SP)->nominal_prf, (SP)->reserved6, (SP)->satelite_encoded_binary_time, (SP)->satelite_clock_time, \ (SP)->satelite_clock_increment, (SP)->spare7, (SP)->processing_facility_identifier, (SP)->processing_system_id, \ (SP)->processing_version_id, (SP)->reserved7, (SP)->product_type_id, (SP)->alg_id, (SP)->nlooks_az, \ (SP)->neff_looks_range, (SP)->bandwidth_look_az, (SP)->bandwidth_look_range, (SP)->total_look_bandwidth_az, \ (SP)->total_look_bandwidth_range, (SP)->w_func_designator_az, (SP)->w_func_designator_range, (SP)->data_input_source, \ (SP)->nom_res_3db_range, (SP)->nom_res_az, (SP)->reserved8, (SP)->a_track_dop_freq_const_early_image, \ (SP)->a_track_dop_freq_lin_early_image, (SP)->a_track_dop_freq_quad_early_image, (SP)->spare8, \ (SP)->c_track_dop_freq_const_early_image, (SP)->c_track_dop_freq_lin_early_image, \ (SP)->c_track_dop_freq_quad_early_image, (SP)->time_direction_along_pixel, (SP)->time_direction_along_line, \ (SP)->a_track_dop_freq_rate_const_early_image, (SP)->a_track_dop_freq_rate_lin_early_image, \ (SP)->a_track_dop_freq_rate_quad_early_image, (SP)->spare9, (SP)->c_track_dop_freq_rate_const_early_image, \ (SP)->c_track_dop_freq_rate_lin_early_image, (SP)->c_track_dop_freq_rate_quad_early_image, (SP)->spare10, \ (SP)->line_content_indicator, (SP)->clut_lock_flag, (SP)->autofocussing_flag, (SP)->line_spacing, \ (SP)->pixel_spacing_range, (SP)->range_compression_designator, (SP)->spare11, (SP)->zero_dop_range_time_f_pixel, \ (SP)->zero_dop_range_time_c_pixel, (SP)->zero_dop_range_time_l_pixel, (SP)->zero_dop_az_time_f_pixel, \ (SP)->zero_dop_az_time_c_pixel, (SP)->zero_dop_az_time_l_pixel struct sarleader_dpaf_dss { char dss_rec_seq_num[4]; /*dss record sequence number (1)*/ char chan_ind[4]; /*sar channel indicator (1)*/ char reserved1[16]; /* scene identifier*/ char scene_number[32]; char input_scene_center_time[32]; char spare1[16]; char center_lat[16]; char center_long[16]; char center_heading[16]; char ellipsoid_designator[16]; char ellipsoid_semimajor_axis[16]; char ellipsoid_semiminor_axis[16]; char earth_constant[16]; char spare2[16]; char ellipsoid_j2[16]; char ellipsoid_j3[16]; char ellipsoid_j4[16]; char spare[16]; char reserved_new[16]; char scene_centre_line_number[8]; char scene_centre_pixel_number[8]; char scene_length[16]; char scene_width[16]; char spare3[16]; char nchan[4]; char spare4[4]; char mission_identifier[16]; char sensor_id_and_mode[32]; char orbit_number[8]; char lat_nadir_center[8]; char long_nadir_center[8]; char heading_nadir_center[8]; char clock_angel[8]; char incidence_angle_center[8]; char radar_freq[8]; char radar_wavelength[16]; char motion_compensation[2]; char range_pulse_code_specifier[16]; char range_pulse_amplitude_const[16]; char range_pulse_amplitude_lin[16]; char range_pulse_amplitude_quad[16]; char range_pulse_amplitude_cube[16]; char range_pulse_amplitude_quart[16]; char range_pulse_phase_const[16]; char range_pulse_phase_lin[16]; char range_pulse_phase_quad[16]; char range_pulse_phase_cube[16]; char range_pulse_phase_quart[16]; char chirp_extraction_index[8]; char spare5[8]; char sampling[16]; char range_gate_early_edge_start_image[16]; char range_pulse_length[16]; char reserved2[4]; char range_compressed_flag[4]; char reserved3[32]; char quantisation_in_bits[8]; char quantizer_descriptor[12]; char dc_bias_i[16]; char dc_bias_q[16]; char gain_imbalance[16]; char spare6[32]; char reserved4[16]; char antenna_mech_bor[16]; char reserved5[4]; char nominal_prf[16]; char reserved6[32]; char satelite_encoded_binary_time[16]; char satelite_clock_time[32]; char satelite_clock_increment[8]; char spare7[8]; char processing_facility_identifier[16]; char processing_system_id[8]; char processing_version_id[8]; char reserved7[32]; char product_type_id[32]; char alg_id[32]; char nlooks_az[16]; char neff_looks_range[16]; char bandwidth_look_az[16]; char bandwidth_look_range[16]; char total_look_bandwidth_az[16]; char total_look_bandwidth_range[16]; char w_func_designator_az[32]; char w_func_designator_range[32]; char data_input_source[16]; char nom_res_3db_range[16]; char nom_res_az[16]; char reserved8[32]; char a_track_dop_freq_const_early_image[16]; char a_track_dop_freq_lin_early_image[16]; char a_track_dop_freq_quad_early_image[16]; char spare8[16]; char c_track_dop_freq_const_early_image[16]; char c_track_dop_freq_lin_early_image[16]; char c_track_dop_freq_quad_early_image[16]; char time_direction_along_pixel[8]; char time_direction_along_line[8]; char a_track_dop_freq_rate_const_early_image[16]; char a_track_dop_freq_rate_lin_early_image[16]; char a_track_dop_freq_rate_quad_early_image[16]; char spare9[16]; char c_track_dop_freq_rate_const_early_image[16]; char c_track_dop_freq_rate_lin_early_image[16]; char c_track_dop_freq_rate_quad_early_image[16]; char spare10[16]; char line_content_indicator[8]; char clut_lock_flag[4]; char autofocussing_flag[4]; char line_spacing[16]; char pixel_spacing_range[16]; char range_compression_designator[16]; char spare11[32]; char zero_dop_range_time_f_pixel[16]; char zero_dop_range_time_c_pixel[16]; char zero_dop_range_time_l_pixel[16]; char zero_dop_az_time_f_pixel[24]; char zero_dop_az_time_c_pixel[24]; char zero_dop_az_time_l_pixel[24]; }; GMTSAR_V5.7/.svn/pristine/ad/ad536986d98c242b5b6bb92c1f8a4547b6b1e200.svn-base000444 015705 000000 00000000632 13505462014 025665 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = make_slc_rs2 CSRCS = make_slc_rs2.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar -I$(TIFF_INC) CLIBS = -L../../../gmtsar -lgmtsar -L../lib -lxmlC -L$(TIFF_LIB) -ltiff -lm $(PROG): $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/ad/ad8aca99d36c2600118c98083cbe778df88745e7.svn-base000444 015705 000000 00000004551 13505462013 025722 0ustar00sandwellwheel000000 000000 .TH PDIFF l "06/26/97 \(co 1996 David Sandwell" "pdiff.l 1.0" "SIOSAR Command" .SH NAME pdiff \- calculates interferogram and subtracts phase due to a curved earth, topography, and a phase model. .SH SYNOPSIS .B pdiff .I ref.gips rep.gips real.gips imag.gips [topophase.gips] [modelphase.gips] .SH DESCRIPTION The .B pdiff command reads two matched SLC SAR images, (reference and repeat) and forms an interferogram. Two baseline estimates at the start and end of the frame, stored in the header of the repeat image, are used to correct the phase for the "earth flattening". As an option, a file topophase.gips can be supplied to remove the phase due to the topography above the local spherical radius of the Earth. This file must have dimensions that are integral factors of the SLC images. For example if the SLC image has 5120 columns and 28000 rows, topophase.gips could have dimensions 2650 by 7000. The topographic phase must correspond to a perpendicular baseline of 100 m. In addition to a topophase, a model-phase can be removed from the interferogram. This phase is not scaled by the baseline so it represents either ground deformation or a phase correction due to atmospheric or ionospheric delay. The dimensions of the model-phase file must match the topophase file. The real and imaginary components of the interferogram are written to separate files. The reference and repeat input files do not have to have the gips headers attached to the SLC image. One can supply just the header files to pdiff as long as the header contains a pointer to the SLC image. An example pointer is: .br input_file = 19369_585.SLC .TP 10 .I ref.gips reference SLC image or header of reference SLC image containing pointer to image .TP 10 .I repeat.gips repeat SLC image or header of repeat SLC image containing pointer to image .TP 10 .I real.gips real component of interferogram .TP 10 .I imag.gips imaginary component of interferogram .TP 10 .I [topophase.gips] optional file of phase for topography with a 100 m standard baseline .TP 10 .I [modelphase.gips] optional file of phase for direct removal from interferogram .SH FILES .ta \w'/opt/gips/tables/cprofile 'u /opt/gips/tables/cprofile image header definition file .SH SEE ALSO .B esarp(l) prm2gips(l) ers_baseline(l) ihBperp(l) .sp .SH AUTHOR Evelyn Price and David T. Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/.svn/pristine/d9/d9eeac9788f29221f0b9e5fc10bf4a8c77a3b66b.svn-base000444 015705 000000 00000000477 13505462014 026143 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_look CSRCS = ALOS_look.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/b2/b2fc5eb40ae7e57367b0280ac956bf78755ed55c.svn-base000444 015705 000000 00000003545 13505462013 025765 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # compute the mean and standard deviations of grid files # Creator: Xiaopeng Tong, David Sandwell # Date: July 6th 2013 # input: a list of the gird files # output: the mean and standard deviations of the grids alias rm 'rm -f' if ($#argv != 4) then echo "" echo "Usage: stack.csh grid.list scale mean.grd std.grd " echo "" echo " compute the mean and standard deviations of grid files " echo "" echo " grid.list -- a list of grd file names" echo " scale -- a scale factor put 1 if not scale" echo " mean.grd -- output file name of the mean grid " echo " std.grd -- output file name of the standard deviation grid " echo "" echo " note that the grid of the grd files must be consistent" echo "" exit 1 endif if (! -e $1) then echo "" echo "no input file found: $1" echo "" exit 1 endif set list = $1 set scale = $2 set outmean = $3 set outstd = $4 # compute the mean echo "computing the mean of the grids .." @ num = 1 foreach name (`cat $list`) if (! -e $name) then echo " Error: file not found: $name " echo "" exit 1 endif if ($num == 1) then gmt grdmath $name = sum.grd else gmt grdmath $name sum.grd ADD = sumtmp.grd mv sumtmp.grd sum.grd endif @ num ++ end @ num -- gmt grdmath sum.grd $num DIV = $outmean # compute the standard deviation echo "compute the standard deviation .. " @ num = 1 foreach name (`cat $list`) if ($num == 1) then gmt grdmath $name $outmean SUB SQR = sum2.grd else gmt grdmath $name $outmean SUB SQR sum2.grd ADD = sum2tmp.grd mv sum2tmp.grd sum2.grd endif @ num ++ end @ num -- gmt grdmath sum2.grd $num DIV SQRT = $outstd # scale them gmt grdmath $outmean $scale MUL = tmp.grd mv tmp.grd $outmean gmt grdmath $outstd $scale MUL = tmp.grd mv tmp.grd $outstd # clean up rm sum.grd sum2.grd GMTSAR_V5.7/.svn/pristine/b2/b2eaab8c4a9d9f21f26e0f098f72195d4a209aac.svn-base000444 015705 000000 00000024437 13505462014 026111 0ustar00sandwellwheel000000 000000 // write_roi // attempts to create a rsc file for roi_pac // adapted from make_raw_alos.pl // rjm - sdsu 7/2010 #include "image_sio.h" #include "lib_functions.h" #include #include #include #define FACTOR 1000000 int prm2roi(struct PRM, double *, double *, int *, double *, double *, int *, int *, int *); long get_file_size(FILE *); int get_utc(double, struct SAR_info, double *, double *, double *, double, int); int write_roi_orbit(struct ALOS_ORB, char *); /* writes out rsc file for roi_pac */ int write_roi(char *imagery, FILE *ldrfile, struct PRM prm, struct ALOS_ORB orb, char *date) { int clength; int xmin, xmax, ymax; int file_length, width, first_sample; int yr, yr2, mo, da, mn, hr, sc, ms; long size; double C = 299792458.0; double ANTENNA_SIDE = -1; double ANTENNA_LENGTH = 8.9; double PLANET_GM = 3.98600448073E+14; double PLANET_SPINRATE = 7.29211573052E-05; double first_line_utc, last_line_utc, center_utc; double pri, start_time; double range_pixel_size, range_bias, starting_range, chirp; double ibias, qbias, wavelength, pulsedur, range_sample_freq, prf; int orbit_num, first_frame; char syr2[2], smo[2], sda[2]; char proc_sys[64], proc_ver[64], ctime[64], foutname[128]; char polar[32], swath[16]; FILE *rsc, *datafile; struct SAR_info sar; struct sarleader_binary sb; first_frame = 000; /* assign variables from prm to roi */ /* these are from data file */ prm2roi(prm, &start_time, &starting_range, &first_sample, &prf, &chirp, &width, &xmin, &xmax); /* just define it rather than read from dc_bias_i,q */ ibias = qbias = 15.5; clength = 0; range_bias = 0.0; pri = 1.0 / prf; /* find size of raw input file - this is a pain */ if ((datafile = fopen(imagery, "r")) == NULL) die("error opening ", imagery); /* find data file size */ size = get_file_size(datafile); ymax = file_length = size / width; // allocate memory for structures sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); sar.varseg = (struct sarleader_fdr_varseg *)malloc(sizeof(struct sarleader_fdr_varseg)); sar.dss_ALOS = (struct sarleader_dss_ALOS *)malloc(sizeof(struct sarleader_dss_ALOS)); sar.platform_ALOS = (struct platform_ALOS *)malloc(sizeof(struct platform_ALOS)); // read in sar leader (again) // the first ones are not used (sarleader_binary, sarleader_binary) // but read for completeness and move ahead into file rewind(ldrfile); (void)fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); fscanf(ldrfile, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fscanf(ldrfile, SARLEADER_FDR_VARSEG_RCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); (void)fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); // this has the useful information fscanf(ldrfile, SARLEADER_DSS_RCS_ALOS, SARLEADER_DSS_RVL_ALOS(sar.dss_ALOS)); // get some parameters from leaderfile // not all these were read in for the PRM struct // so need to read leaderfile again wavelength = atof(sar.dss_ALOS->radar_wavelength); pulsedur = (atof(sar.dss_ALOS->range_pulse_length) / FACTOR); range_sample_freq = (atof(sar.dss_ALOS->sampling_rate)); range_pixel_size = C / range_sample_freq / 2.0; /* handling strings in C - happy, happy, joy, joy */ sscanf(sar.dss_ALOS->processing_system_id, " %s", &proc_sys[0]); proc_sys[10] = '\0'; sscanf(sar.dss_ALOS->processing_version_id, " %s", &proc_ver[0]); proc_ver[4] = '\0'; sscanf(sar.dss_ALOS->antenna_mech_bor, " %s", &swath[0]); swath[4] = '\0'; sscanf(sar.dss_ALOS->orbit_number, " %d", &orbit_num); strncpy(&polar[0], &sar.dss_ALOS->sensor_id_and_mode[16], 2); polar[2] = '\0'; /* use time from leaderfile */ strncpy(&ctime[0], (sar.dss_ALOS->input_scene_center_time), 30); ctime[30] = '\0'; sscanf(&ctime[0], " %2d%2d%2d%2d%2d%2d%2d%4d", &yr, &yr2, &mo, &da, &hr, &mn, &sc, &ms); sscanf(&ctime[0], " %4d", &yr); sscanf(&ctime[2], " %2s%2s%2s", &syr2[0], &smo[0], &sda[0]); sprintf(&date[0], "%2s%2s%2s", syr2, smo, sda); // utc time get_utc(start_time, sar, &first_line_utc, &last_line_utc, ¢er_utc, pri, file_length); // open output file sprintf(foutname, "tmp.%s.raw.rsc", date); if ((rsc = fopen(foutname, "w")) == NULL) die("error opening tmp_raw.rsc", ""); fprintf(rsc, "FIRST_FRAME %d\n", first_frame); fprintf(rsc, "FIRST_FRAME_SCENE_CENTER_TIME %s\n", ctime); fprintf(rsc, "FIRST_FRAME_SCENE_CENTER_LINE %d\n", clength); fprintf(rsc, "DATE %s\n", date); fprintf(rsc, "FIRST_LINE_YEAR %d\n", yr); fprintf(rsc, "FIRST_LINE_MONTH_OF_YEAR %02d\n", mo); fprintf(rsc, "FIRST_LINE_DAY_OF_MONTH %02d\n", da); fprintf(rsc, "FIRST_CENTER_HOUR_OF_DAY %02d\n", hr); fprintf(rsc, "FIRST_CENTER_MN_OF_HOUR %02d\n", mn); fprintf(rsc, "FIRST_CENTER_S_OF_MN %02d\n", sc); fprintf(rsc, "FIRST_CENTER_MS_OF_S %d\n", ms); fprintf(rsc, "PROCESSING_SYSTEM %s\n", proc_sys); fprintf(rsc, "PROCESSING_VERSION %s\n", proc_ver); fprintf(rsc, "WAVELENGTH %f\n", wavelength); fprintf(rsc, "PULSE_LENGTH %g\n", pulsedur); fprintf(rsc, "CHIRP_SLOPE %g\n", chirp); fprintf(rsc, "I_BIAS %4.1lf\n", ibias); fprintf(rsc, "Q_BIAS %4.1lf\n", qbias); fprintf(rsc, "PLATFORM ALOS\n"); fprintf(rsc, "BEAM %s\n", swath); fprintf(rsc, "POLARIZATION %s\n", polar); fprintf(rsc, "ORBIT_NUMBER %d\n", orbit_num); fprintf(rsc, "RANGE_BIAS %lf\n", range_bias); fprintf(rsc, "STARTING_RANGE %-20.0lf\n", starting_range); fprintf(rsc, "RANGE_PIXEL_SIZE %-15.10lf\n", range_pixel_size); fprintf(rsc, "PRF %lf\n", prf); fprintf(rsc, "ANTENNA_SIDE %lf \n", ANTENNA_SIDE); fprintf(rsc, "ANTENNA_LENGTH %3.1lf \n", ANTENNA_LENGTH); fprintf(rsc, "FILE_LENGTH %d\n", file_length); fprintf(rsc, "XMIN %d\n", xmin); fprintf(rsc, "XMAX %d\n", xmax); fprintf(rsc, "WIDTH %d\n", width); fprintf(rsc, "YMIN 0\n"); fprintf(rsc, "YMAX %d\n", ymax); fprintf(rsc, "RANGE_SAMPLING_FREQUENCY %-20.0lf\n", range_sample_freq); fprintf(rsc, "PLANET_GM %-20.0lf\n", PLANET_GM); fprintf(rsc, "PLANET_SPINRATE %-15.11e\n", PLANET_SPINRATE); fprintf(rsc, "FIRST_LINE_UTC %lf\n", first_line_utc); fprintf(rsc, "CENTER_LINE_UTC %lf\n", center_utc); fprintf(rsc, "LAST_LINE_UTC %lf\n", last_line_utc); fprintf(rsc, "EQUATORIAL_RADIUS %f\n", prm.RE); // equatorial radius // HEIGHT_TOP // HEIGHT // HEIGHT_DT // VELOCITY // LATITUDE // LONGITUDE // HEADING // EQUATORIAL_RADIUS // ECCENTRICITY_SQUARED // EARTH_EAST_RADIUS // EARTH_NORTH_RADIUS // EARTH_RADIUS // ORBIT_DIRECTION /* fprintf(rsc," %d\n", prm.num_lines); // length fprintf(rsc," %f\n", prm.SC_clock_start); // start_time fprintf(rsc," %s\n", prm.orbdir); // orbdir fprintf(rsc," %f\n", prm.ht); // height fprintf(rsc," %f\n", prm.vel); // vel fprintf(rsc," %f\n", prm.fd1); // fd1 */ fclose(rsc); return (EXIT_SUCCESS); } /*--------------------------------------------------------------------------------------------------------------*/ int prm2roi(struct PRM prm, double *start_time, double *starting_range, int *first_sample, double *prf, double *chirp, int *width, int *xmin, int *xmax) { *prf = prm.prf; *start_time = prm.SC_clock_start; *starting_range = prm.near_range; *first_sample = prm.first_sample; *width = prm.bytes_per_line; *xmin = (2 * (*first_sample)) + 1; *xmax = prm.good_bytes; *chirp = prm.chirp_slope; return (EXIT_SUCCESS); } /*--------------------------------------------------------------------------------------------------------------*/ long get_file_size(FILE *datafile) { long size; fseek(datafile, 0, SEEK_END); size = ftell(datafile); fclose(datafile); return (size); } /*--------------------------------------------------------------------------------------------------------------*/ int get_utc(double start_time, struct SAR_info sar, double *first_line_utc, double *last_line_utc, double *center_utc, double pri, int file_length) { double tday, hr, mn, sc, ms; tday = start_time - floor(start_time); tday = start_time - floor(start_time); hr = floor(tday * 24.0); tday = tday - hr / 24.0; mn = floor(tday * 60.0 * 24.0); tday = tday - mn / 60.0 / 24.0; sc = floor(tday * 60.0 * 60.0 * 24.0); tday = tday - sc / 60.0 / 60.0 / 24.0; ms = floor(tday * 1000.0 * 60.0 * 60.0 * 24.0); *first_line_utc = (double)(3600 * hr + 60 * mn + sc + ms / 1000.0); *last_line_utc = *first_line_utc + pri * file_length; *center_utc = (*first_line_utc + *last_line_utc) / 2.0; return (EXIT_SUCCESS); } /*--------------------------------------------------------------------------------------------------------------*/ int write_roi_orbit(struct ALOS_ORB orb, char *date) { int i; FILE *orbit_rsc; char fname[128]; sprintf(fname, "hdr_data_points_%s.rsc", date); if ((orbit_rsc = fopen(fname, "w")) == NULL) die("error opening ", fname); for (i = 0; i < orb.nd; i++) { fprintf(orbit_rsc, "%-6.0lf", orb.sec + (i * orb.dsec)); /* position */ fprintf(orbit_rsc, " %-18.15E", orb.points[i].px); fprintf(orbit_rsc, " %-18.15E", orb.points[i].py); fprintf(orbit_rsc, " %-18.15E", orb.points[i].pz); /* velocity */ fprintf(orbit_rsc, " %-18.15E", orb.points[i].vx); fprintf(orbit_rsc, " %-18.15E", orb.points[i].vy); fprintf(orbit_rsc, " %-18.15E\n", orb.points[i].vz); } fclose(orbit_rsc); return (EXIT_SUCCESS); } /*--------------------------------------------------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/b5/b53cf8fdb03009e820cde2c00c3878deb3ed65c0.svn-base000444 015705 000000 00000000760 13505462013 026074 0ustar00sandwellwheel000000 000000 #ifndef LLT2RAT_H #define LLT2RAT_H struct GCP { float lon; float lat; float range; float azimuth; }; struct orbit_coor { double x; double y; double z; double t; }; struct orbit { double t1; double t2; double ts; double fll; double dr; int nrec; int npad; int xoff; int yoff; struct orbit_coor *coor; }; struct topo { int nx; int ny; long n; double xmin; double ymin; double xinc; double yinc; float *data; float *lat; float *lon; int K; }; #endif /* LLT2RAT_H */ GMTSAR_V5.7/.svn/pristine/a3/a32057510953fc8ed54ad804603b52f6a74b1c19.svn-base000444 015705 000000 00000007127 13505462013 025437 0ustar00sandwellwheel000000 000000 #------------------------------------------------------------------------------- # $Id: config.mk.in 227 2015-08-12 00:25:27Z pwessel $ # # Standard Makefile Macro Setup for GMTSAR # # Edit this file only, NOT the makefile itself. #------------------------------------------------------------------------------- # The purpose of this section is to contain common make macros # that should be processed by every execution of that utility. #------------------------------------------------------------------------------- # POSIX shell. On some platforms it is not /bin/sh. SHELL = @SHELL@ # Installation Directories: PACKAGE_TARNAME = @PACKAGE_TARNAME@ GMTSARHOME = @rootdir@ ORBITS_DIR = @ORBITS_DIR@ TIFF_INC = @TIFF_INC@ TIFF_LIB = @TIFF_LIB@ LALIBS = @LALIBS@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = $(DESTDIR)@bindir@ sharedir = $(DESTDIR)@prefix@/share/gmtsar # GMTSAR version number GMTSAR_VERSION = @PACKAGE_VERSION@ # Compilers, if $CC not set in environment CC = @CC@ # Preprocessing: CPP = @CPP@ CPPFLAGS = $(INCLUDES) $(DEFINES) @CPPFLAGS@ HDF5_CPPFLAGS = @HDF5_CPPFLAGS@ HDF5_LDFLAGS = @HDF5_LDFLAGS@ #------------------------------------------------------------------------------- # Math library specification # (Will most of the time be -lm, on Solaris -lsunmath -lm) #------------------------------------------------------------------------------- # LIBS = @LIBS@ HDF5_LIBS = @HDF5_LIBS@ # #------------------------------------------------------------------------------- # Miscellaneous Standard Utilities #------------------------------------------------------------------------------- # INSTALL = @INSTALL@ AWK = @AWK@ AR = @AR@ RANLIB = @RANLIB@ CSH = @CSH@ LD = @LD@ LN_S = @LN_S@ GNUTAR = @GNUTAR@ # #------------------------------------------------------------------------------- # Required directives for GMT includes and library #------------------------------------------------------------------------------- GMT_INC = @GMT_INC@ GMT_LIB = @GMT_LIB@ # #------------------------------------------------------------------------------- # Required directives for GMTSAR library #------------------------------------------------------------------------------- GMTSAR = -L@rootdir@/gmtsar -lgmtsar # #------------------------------------------------------------------------------- # Compiler switches and linker flags #------------------------------------------------------------------------------- # CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ # #------------------------------------------------------------------------------- # Shared library file extension. Examples: # Solaris, Linux, IRIX: so HP: sl Mac OS X: dylib # SL_VERSION is extension for versioned shared libraries. Examples: # Linux: so. Mac OS X: .dylib # Set SL_VERSION = $(SL) to prevent the creation of versioned shared libraries #------------------------------------------------------------------------------- # SL = @SL@ SL_VERSION = @SL_VERSION@ # #------------------------------------------------------------------------------- # Set LIBEXT = a to create static libraries (default) # Set LIBEXT = $(SL) to create shared libraries (and set SL below) #------------------------------------------------------------------------------- # LIBEXT = @LIBEXT@ #------------------------------------------------------------------------------- # Linker switch for building shared libraries # SunOS: -G HP-UX: -b Linux,IRIX: -shared #------------------------------------------------------------------------------- # LD_OPT = @LD_OPT@ #------------------------------------------------------------------------------- GMTSAR_V5.7/.svn/pristine/a3/a3748a849e7e65d53e7dc1e2aa09e54c917e76e5.svn-base000444 015705 000000 00000042207 13505462014 025720 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Compute the interferometric baseline between reference and repeat * * images. Also estimates the crude offset for image matching. * *******************************************************************************/ /******************************************************************************** * Creator: Matt Wei, 04/26/10 * * * * Based on the program ALOS_baseline by * Creator: Sandwell and Rob Mellors ** (San Diego State University, Scripps Institution of Oceanography) * Date : *06/07/2007 * ********************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "Usage: (two modes)\n" "mode 1:\n\n" "SAT_baseline PRM_master PRM_slave \n\n" "PRM_master PRM file for reference image\n" "PRM_slave PRM file of secondary image\n" "Please make sure the orbit file data is in PRM \n" "(writes out parameters for appending to PRM file)\n" "\nor mode 2:\n\n" "SAT_baseline -input file\n\n" "file: list of PRM files\n" "first file is assumed to be master\n" "following are slaves\n" "(writes out decimal year, Bperp, and PRM name)\n"; /* function prototypes */ double find_distance(double, double, double, double, double, double); double find_alpha_degrees(double, double); void find_unit_vectors(double, double, double, double *, double *, double *, double *); void endpoint_distance(int, double, double, double, double, double *, double *, double *, double *, int *); void find_parallel_perp_baseline(struct PRM, struct PRM, double, double *, double *); void write_prm_baseline(struct PRM); void get_sign(struct PRM, double, double, double, double, int *); void write_bperp(struct PRM, char *); void parse_command_line(char **, int *, int *); void read_input_file(char *, int, char **); void ENVI_baseline(struct PRM *, struct ALOS_ORB *, int, int, char **, double); void read_all_ENVI_ldr(struct PRM *, struct ALOS_ORB *, int); void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); void ENVI_llt2rat_sub(char *, double *, double *); int main(int argc, char **argv) { int i; int input_flag, nfiles; double fs0 = 0.; struct PRM *r; /* reference orbit is 0; repeats are > 0*/ struct ALOS_ORB *orb; /* reference orbit is 0; repeats are > 0*/ char **filename; FILE *prmfile; if (argc < 3) die(USAGE, ""); verbose = 0; input_flag = 0; /* read command line */ parse_command_line(argv, &nfiles, &input_flag); filename = malloc(nfiles * sizeof(char *)); for (i = 0; i < nfiles; i++) filename[i] = malloc(128 * sizeof(char)); r = malloc(nfiles * sizeof(struct PRM)); if (input_flag == 1) read_input_file(argv[2], nfiles, filename); for (i = 0; i < nfiles; i++) { if (input_flag == 0) strcpy(filename[i], argv[i + 1]); if ((prmfile = fopen(filename[i], "r")) == NULL) die("Can't open prmfile ", filename[i]); get_sio_struct(prmfile, &r[i]); /* check whether range sampling rate is same. If not, warning */ if (i == 0) fs0 = r[0].fs; if (r[i].fs != fs0) { fprintf(stderr, "\nWARNING:\nRange_sampling_rate is not consistant.\nYou " "need to do FBD/FBS conversion.\n\n"); } fclose(prmfile); } fprintf(stderr, "SC_identity = %d \n", r[0].SC_identity); orb = malloc(nfiles * sizeof(struct ALOS_ORB)); read_all_ENVI_ldr(r, orb, nfiles); ENVI_baseline(r, orb, nfiles, input_flag, filename, fs0); return (EXIT_SUCCESS); } /*---------------------------------------------------------------------------*/ /* Get time info and find the orbit */ void read_all_ENVI_ldr(struct PRM *r, struct ALOS_ORB *orb, int nfiles) { int i; FILE *ldrfile; for (i = 0; i < nfiles; i++) { if (i == 0) fprintf(stderr, "......master LED file %s \n", r[0].led_file); if (i != 0) fprintf(stderr, ".........slave LED file %s \n", r[i].led_file); /* open each ldrfile and read into structure r */ if ((ldrfile = fopen(r[i].led_file, "r")) == NULL) die("Can't open ldrfile %s", r[i].led_file); read_ENVI_orb(ldrfile, &r[i], &orb[i]); fclose(ldrfile); } } /*---------------------------------------------------------------------------*/ void ENVI_baseline(struct PRM *r, struct ALOS_ORB *orb, int nfiles, int input_flag, char **filename, double fs0) { int ii, nd, ir; int k, ns, ns2, m1, m2, m3, sign1, sign2, sign3; double dr, dt, ds; double bv1, bv2, bv3, bh1, bh2, bh3; double t11, t12, t21, t22, t23; double x11, y11, z11, x12, y12, z12, x13, y13, z13; double x21, y21, z21, x22, y22, z22, x23, y23, z23; double ru1, ru2, ru3, xu1, yu1, zu1, xu2, yu2, zu2, xu3, yu3, zu3; double ts, xs, ys, zs; /* double rr1, rr2, t13; */ /* near range from reference and repeat orbits */ double b1, b2, b3, bpara, bperp; double *pt, *p, *pv, pt0; double height, re_c, vg, vtot, rdot; double radar_look[3] = {0, 0, 0}; double re, rho, b, theta; double t_vel, t_sta, x_vel, x_sta, y_vel, y_sta, z_vel, z_sta, ru33, xu33, yu33, zu33, o1x[3], o1y[3], o1z[3], ru4, xu4, yu4, zu4; double glob_look[3], target[3], target_llt[3], fll; double target_rat_ref[3] = {0, 0, 0}; double target_rat_rep[3] = {0, 0, 0}; double far_range; /* reference orbit */ get_seconds(r[0], &t11, &t12); // t13 = (t11 + t12)/2.; dr = 0.5 * SOL / fs0; dt = 1.0 / r[0].prf; // rr1 = r[0].near_range; ns = (int)((t12 - t11) / dt); /* seconds of frame */ dt = (t12 - t11) / (ns - 1); ns2 = ns * 2; nd = orb[0].nd; pt = malloc(nd * sizeof(double)); p = malloc(nd * sizeof(double)); pv = malloc(nd * sizeof(double)); for (ii = 1; ii < nfiles; ii++) { get_seconds(r[ii], &t21, &t22); t23 = (t21 + t22) / 2.; // rr2 = r[ii].near_range; pt0 = (24.0 * 60.0 * 60.0) * orb[ii].id + orb[ii].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[ii].dsec; verbose = 0; /* interpolate_ALOS_orbit assumes p, pt, and pv ate allocated and pt * assigned */ interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t21, &x21, &y21, &z21, &ir); /* look at other orbit information and recalculate the height using the * ashift */ calc_height_velocity(&orb[ii], &r[ii], t22, t22, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_end = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t23, t23, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t21, t21, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_start = height + re_c - r[ii].RE; // fd_orbit = -2.0*rdot/r[ii].lambda; interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t22, &x22, &y22, &z22, &ir); interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t23, &x23, &y23, &z23, &ir); /* loop over reference orbit */ /* add 2 scene lengths (ns2) for buffer at each end */ b1 = b2 = b3 = -1.0; pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; /* set some default values */ m1 = -99999; x11 = y11 = z11 = -99999.0; x12 = y12 = z12 = -99999.0; x13 = y13 = z13 = -99999.0; for (k = -ns2; k < ns + ns2; k++) { ts = t11 + k * dt; interpolate_ALOS_orbit(&orb[0], pt, p, pv, ts, &xs, &ys, &zs, &ir); ds = find_distance(xs, ys, zs, x21, y21, z21); if (b1 < 0.0 || ds < b1) endpoint_distance(k, ds, xs, ys, zs, &b1, &x11, &y11, &z11, &m1); ds = find_distance(xs, ys, zs, x22, y22, z22); if (b2 < 0.0 || ds < b2) endpoint_distance(k, ds, xs, ys, zs, &b2, &x12, &y12, &z12, &m2); ds = find_distance(xs, ys, zs, x23, y23, z23); if (b3 < 0.0 || ds < b3) endpoint_distance(k, ds, xs, ys, zs, &b3, &x13, &y13, &z13, &m3); } /* compute more orbital information at the min baseline based on m1 */ ts = t11 + m1 * dt; calc_height_velocity(&orb[0], &r[0], ts, ts, &height, &re_c, &vg, &vtot, &rdot); // fd_orbit = -2.0*rdot/r[0].lambda; /* shouldn't happen .. */ if (x11 == -99999.0) die("x11 not initialized", ""); if (x12 == -99999.0) die("x12 not initialized", ""); if (m1 == -99999) die("m1 not initialized", ""); /* put in structure */ r[ii].baseline_start = b1; r[ii].baseline_end = b2; r[ii].baseline_center = b3; /* compute unit vectors */ find_unit_vectors(x11, y11, z11, &ru1, &xu1, &yu1, &zu1); find_unit_vectors(x12, y12, z12, &ru2, &xu2, &yu2, &zu2); find_unit_vectors(x13, y13, z13, &ru3, &xu3, &yu3, &zu3); /* compute sign of horizontal baseline */ get_sign(r[ii], x11, y11, x21, y21, &sign1); get_sign(r[ii], x12, y12, x22, y22, &sign2); get_sign(r[ii], x13, y13, x23, y23, &sign3); /* compute baseline components (horizontal and vertical) */ bv1 = (x21 - x11) * xu1 + (y21 - y11) * yu1 + (z21 - z11) * zu1; bh1 = sign1 * sqrt(b1 * b1 - bv1 * bv1); bv2 = (x22 - x12) * xu2 + (y22 - y12) * yu2 + (z22 - z12) * zu2; bh2 = sign2 * sqrt(b2 * b2 - bv2 * bv2); bv3 = (x23 - x13) * xu3 + (y23 - y13) * yu3 + (z23 - z13) * zu3; bh3 = sign3 * sqrt(b3 * b3 - bv3 * bv3); /* angle from horizontal */ r[ii].alpha_start = find_alpha_degrees(bv1, bh1); r[ii].alpha_end = find_alpha_degrees(bv2, bh2); r[ii].alpha_center = find_alpha_degrees(bv3, bh3); /* calculate parallel baseline */ find_parallel_perp_baseline(r[0], r[ii], dr, &bpara, &bperp); r[ii].bpara = bpara; r[ii].bperp = bperp; /* find expected offset in pixels (rshift and yshift) */ /* r[ii].ashift = -1*m1; r[ii].rshift = -1*(int) (r[ii].bpara/dr + (rr2 - rr1)/dr); */ /* a more accurate way to estimate offset in pixels */ /* since t11 point is out of scene, I need add a fraction of orbit time to * it */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_sta = t11 + 2.0; interpolate_ALOS_orbit(&orb[0], pt, p, pv, t_sta, &x_sta, &y_sta, &z_sta, &ir); re = r[0].RE; far_range = r[0].near_range + dr * r[0].num_rng_bins; rho = (r[0].near_range + far_range) / 2.0; b = r[0].ht + r[0].RE; theta = acos((b * b + rho * rho - re * re) / 2 / b / rho); /* find a unit look vector point to middle range of first line of the scene */ /* in radar coordinate */ radar_look[0] = 0; radar_look[1] = cos(theta); radar_look[2] = -sin(theta); /* form a rotation matrix to convert the look vector from radar coordinate to global cartesian coordinate */ find_unit_vectors(x_sta, y_sta, z_sta, &ru33, &xu33, &yu33, &zu33); o1y[0] = -xu33; o1y[1] = -yu33; o1y[2] = -zu33; /* get the velocity of the satellite */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_vel = t11 + 2.1; interpolate_ALOS_orbit(&orb[0], pt, p, pv, t_vel, &x_vel, &y_vel, &z_vel, &ir); find_unit_vectors(x_vel - x_sta, y_vel - y_sta, z_vel - z_sta, &ru4, &xu4, &yu4, &zu4); o1x[0] = xu4; o1x[1] = yu4; o1x[2] = zu4; cross3_(o1x, o1y, o1z); /* look vector in global cartesian cooridate is */ glob_look[0] = radar_look[0] * o1x[0] + radar_look[1] * o1y[0] + radar_look[2] * o1z[0]; glob_look[1] = radar_look[0] * o1x[1] + radar_look[1] * o1y[1] + radar_look[2] * o1z[1]; glob_look[2] = radar_look[0] * o1x[2] + radar_look[1] * o1y[2] + radar_look[2] * o1z[2]; /* shoot the vector on the ground and get the tie point */ target[0] = x_sta + glob_look[0] * rho; target[1] = y_sta + glob_look[1] * rho; target[2] = z_sta + glob_look[2] * rho; fll = (r[0].ra - r[0].rc) / r[0].ra; xyz2plh(target, target_llt, r[0].ra, fll); fprintf(stderr, "lon_tie_point = %f\n", target_llt[1]); fprintf(stderr, "lat_tie_point = %f\n", target_llt[0]); ENVI_llt2rat_sub(filename[0], target_llt, target_rat_ref); ENVI_llt2rat_sub(filename[ii], target_llt, target_rat_rep); /* find expected offset in pixels (rshift and yshift) */ r[ii].ashift = target_rat_rep[1] - target_rat_ref[1]; r[ii].rshift = target_rat_rep[0] - target_rat_ref[0]; /* write out prm format */ if (input_flag == 0) write_prm_baseline(r[ii]); /* write out in x,y format bperp baseline only */ if (input_flag == 1) write_bperp(r[ii], filename[ii]); } } /*---------------------------------------------------------------------------*/ void read_input_file(char *inputfilename, int nfiles, char **filename) { int i; FILE *inputfile; if ((inputfile = fopen(inputfilename, "r")) == NULL) die("Can't open ", inputfilename); for (i = 0; i < nfiles; i++) fscanf(inputfile, " %s ", filename[i]); fclose(inputfile); } /*---------------------------------------------------------------------------*/ void parse_command_line(char **argv, int *nfiles, int *input_flag) { char tmp[132]; FILE *inputfile; *nfiles = 0; if (strncmp(argv[1], "-input", 6) != 0) { fprintf(stderr, "using command line\n"); *nfiles = 2; } else { fprintf(stderr, "using input file \n"); *input_flag = 1; if ((inputfile = fopen(argv[2], "r")) == NULL) die("Can't open ", argv[2]); /* count the number of files in inputfile */ while (fscanf(inputfile, " %s ", tmp) != EOF) (*nfiles)++; fclose(inputfile); } } /*---------------------------------------------------------------------------*/ void write_bperp(struct PRM r1, char *string) { FILE *GMTscript; float year, dyear; GMTscript = fopen("GMTscript", "w"); year = floor(r1.SC_clock_start / 1000.0); dyear = (r1.SC_clock_start - 1000.0 * year) / 365.0; year = year + dyear; /* write date, baseline */ fprintf(stdout, " %f %f %s\n", year, r1.bperp, string); /* fprintf(GMTscript,"psxy Bperp.dat -R%f/%f/%f/%f -JX8 -P > Bperp.ps\n"); */ fclose(GMTscript); } /*---------------------------------------------------------------------------*/ void get_sign(struct PRM r, double x11, double y11, double x21, double y21, int *sign) { double rlnref, rlnrep; rlnref = atan2(y11, x11); rlnrep = atan2(y21, x21); *sign = 1.0; if (strncmp(r.orbdir, "D", 1) == 0) *sign = -1 * (*sign); if (rlnrep < rlnref) *sign = -1 * (*sign); } /*---------------------------------------------------------------------------*/ void write_prm_baseline(struct PRM rep) { printf("SC_vel = %f \n", rep.vel); printf("SC_height = %f \n", rep.ht); printf("SC_height_start = %f \n", rep.ht_start); printf("SC_height_end = %f \n", rep.ht_end); printf("earth_radius = %f \n", rep.RE); printf("rshift = %d \n", rep.rshift); printf("sub_int_r = 0.0 \n"); printf("ashift = %d\n", rep.ashift); printf("sub_int_a = 0.0 \n"); printf("B_parallel = %f \n", rep.bpara); printf("B_perpendicular = %f \n", rep.bperp); printf("baseline_start = %f \n", rep.baseline_start); printf("baseline_center = %f \n", rep.baseline_center); printf("baseline_end = %f \n", rep.baseline_end); printf("alpha_start = %f \n", rep.alpha_start); printf("alpha_center = %f \n", rep.alpha_center); printf("alpha_end = %f \n", rep.alpha_end); } /*---------------------------------------------------------------------------*/ void find_parallel_perp_baseline(struct PRM ref, struct PRM rep, double dr, double *bpara, double *bperp) { double rc, ra, rad, rlook, far_range, arg1, arg2; rad = M_PI / 180.0; /* this is not ellipsoid axis */ /* use reference ?? */ rc = ref.RE + ref.ht; ra = ref.RE; far_range = rep.near_range + dr * rep.num_rng_bins; /* calculate the look angle 1/2 way between the near and far range */ arg1 = (rep.near_range * rep.near_range + rc * rc - ra * ra) / (2. * rep.near_range * rc); arg2 = (far_range * far_range + rc * rc - ra * ra) / (2. * far_range * rc); rlook = acos((arg1 + arg2) / 2.0); /* add the incidence angle correction to get the incidence angle */ arg1 = (-rep.near_range * rep.near_range + rc * rc + ra * ra) / (2. * ra * rc); arg2 = (-far_range * far_range + rc * rc + ra * ra) / (2. * ra * rc); rlook = rlook + acos((arg1 + arg2) / 2.0); *bpara = rep.baseline_start * sin(rlook - rep.alpha_start * rad); *bperp = rep.baseline_start * cos(rlook - rep.alpha_start * rad); } /*---------------------------------------------------------------------------*/ double find_alpha_degrees(double bv, double bh) { double a, rad; rad = M_PI / 180.0; a = atan2(bv, bh); a = a / rad; return (a); } /*---------------------------------------------------------------------------*/ double find_distance(double xs, double ys, double zs, double x, double y, double z) { double ds; double dx, dy, dz; dx = xs - x; dy = ys - y; dz = zs - z; ds = sqrt(dx * dx + dy * dy + dz * dz); return (ds); } /*---------------------------------------------------------------------------*/ void endpoint_distance(int k, double ds, double xs, double ys, double zs, double *b, double *x, double *y, double *z, int *m) { *b = ds; *x = xs; *y = ys; *z = zs; *m = k; } /*---------------------------------------------------------------------------*/ void find_unit_vectors(double x, double y, double z, double *ru, double *xu, double *yu, double *zu) { *ru = sqrt(x * x + y * y + z * z); *xu = x / (*ru); *yu = y / (*ru); *zu = z / (*ru); } /*---------------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/a3/a346242711241e142ba7061aa1761be69dff67ac.svn-base000444 015705 000000 00000073102 13505462014 025500 0ustar00sandwellwheel000000 000000 /**************************************************************************/ /* */ /* Mosaic 5 subswaths of 2 frames of ALOS ScanSAR in radar coordinates */ /* */ /* This program is written for better unwrapping because */ /* there will be phase difference for each subswath if unwrapping */ /* individually and the phase difference might not be a constant. */ /* */ /* This program will read the clock_start and near_range info from */ /* 5 PRM files of each subswath and read the pixel values from each */ /* GMT grids, calculate the coordinates of each subswath in meters, */ /* put each subswath in the corresponding coordinates. The boundary in */ /* range direction of each subswath is chosen to be at the middle of */ /* the overlapping region. */ /* */ /* After this step, should be phase unwrapping. */ /* */ /* May 18 2018 */ /* */ /* Xiaopeng Tong */ /* */ /* Update history: */ /* */ /* May 25 2018 modified to mosaic 2 frames */ /* */ /**************************************************************************/ char *USAGE = " ALOS_mosaic_ss_2frames prmfile1 grd1 prmfile2 grd2 prmfile3 grd3 " "prmfile4 grd4 prmfile5 grd5 prmfile6 grd6 prmfile7 grd7 prmfile8 grd8 " "prmfile9 grd9 prmfile10 grd10 mosaic dec \n\n" " USAGE: \n" " mosaic 5 subswath of 2 frames of ALOS ScanSAR in radar coordinates\n\n" " prmfile[1-10] the PRM files \n" " grd[1-10] the GMT grid files (corr, phase, phasefilt) \n" " dec decimation factor in radar coordinates (100) \n" " the first frame is 1-5 and the second frame is 6-10 \n"; #include "gmt.h" #include "gmtsar.h" void set_ALOS_defaults(struct PRM *); void get_sio_struct(FILE *, struct PRM *); int main(int argc, char **argv) { /* define variables */ FILE *prmfile; struct PRM prm; void *API = NULL; /* GMT control structure */ struct GMT_GRID *grid1 = NULL, *grid2 = NULL, *grid3 = NULL, *grid4 = NULL, *grid5 = NULL, *grid6 = NULL, *grid7 = NULL, *grid8 = NULL, *grid9 = NULL, *grid10 = NULL, *grid11 = NULL; double inc[2], wesn[4]; double clock_start[10], clock_start_rel[10], near_range[10], near_range_rel[10]; double prf[10], rng_samp_rate[10], vel[10]; int num_rng[10], num_azi[10]; double clock_start_min; int ra[10][4]; int range_ub, azimuth_ub; double sol = 3.0e8; double rsr, dr; double dec; int row, col; int i; int range, azimuth; int range_boundary1, range_boundary2, range_boundary3, range_boundary4, range_boundary5; int azimuth_boundary1, azimuth_boundary2, azimuth_boundary3, azimuth_boundary4, azimuth_boundary5; int node1, node2, node3, node4, node5, node6, node7, node8, node9, node10, node11; /* parse arguments */ if (argc != 23) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 2, 0, NULL)) == NULL) return EXIT_FAILURE; /* read in dec */ dec = atof(argv[22]); /* open and read PRM files */ /* open and read GMT grids */ fprintf(stderr, "input:\n"); /* subswath 1 */ if ((prmfile = fopen(argv[1], "r")) == NULL) { die("\n can't open PRM file:\n", argv[1]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[0] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[0] = prm.near_range; rng_samp_rate[0] = prm.fs; num_rng[0] = prm.num_rng_bins; num_azi[0] = prm.num_patches * prm.num_valid_az; prf[0] = prm.prf; vel[0] = prm.vel; fclose(prmfile); if ((grid1 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 1: num_rng=%d, num_azi=%d\n", num_rng[0], num_azi[0]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid1->header->nx, grid1->header->inc[GMT_X], grid1->header->ny, grid1->header->inc[GMT_Y]); if ((num_rng[0] != round(grid1->header->nx * grid1->header->inc[GMT_X])) || (num_azi[0] != round(grid1->header->ny * grid1->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[2]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[2], grid1) == NULL) return EXIT_FAILURE; /* subswath 2 */ if ((prmfile = fopen(argv[3], "r")) == NULL) { die("\n can't open PRM file:\n", argv[3]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[1] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[1] = prm.near_range; rng_samp_rate[1] = prm.fs; num_rng[1] = prm.num_rng_bins; num_azi[1] = prm.num_patches * prm.num_valid_az; prf[1] = prm.prf; vel[1] = prm.vel; fclose(prmfile); if ((grid2 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[4], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 2: num_rng=%d, num_azi=%d\n", num_rng[1], num_azi[1]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid2->header->nx, grid2->header->inc[GMT_X], grid2->header->ny, grid2->header->inc[GMT_Y]); if ((num_rng[1] != round(grid2->header->nx * grid2->header->inc[GMT_X])) || (num_azi[1] != round(grid2->header->ny * grid2->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[4]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[4], grid2) == NULL) return EXIT_FAILURE; /* subswath 3 */ if ((prmfile = fopen(argv[5], "r")) == NULL) { die("\n can't open PRM file:\n", argv[5]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[2] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[2] = prm.near_range; rng_samp_rate[2] = prm.fs; num_rng[2] = prm.num_rng_bins; num_azi[2] = prm.num_patches * prm.num_valid_az; prf[2] = prm.prf; vel[2] = prm.vel; fclose(prmfile); if ((grid3 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[6], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 3: num_rng=%d, num_azi=%d\n", num_rng[2], num_azi[2]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid3->header->nx, grid3->header->inc[GMT_X], grid3->header->ny, grid3->header->inc[GMT_Y]); if ((num_rng[2] != round(grid3->header->nx * grid3->header->inc[GMT_X])) || (num_azi[2] != round(grid3->header->ny * grid3->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[6]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[6], grid3) == NULL) return EXIT_FAILURE; /* subswath 4 */ if ((prmfile = fopen(argv[7], "r")) == NULL) { die("\n can't open PRM file:\n", argv[7]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[3] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[3] = prm.near_range; rng_samp_rate[3] = prm.fs; num_rng[3] = prm.num_rng_bins; num_azi[3] = prm.num_patches * prm.num_valid_az; prf[3] = prm.prf; vel[3] = prm.vel; fclose(prmfile); if ((grid4 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[8], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 4: num_rng=%d, num_azi=%d\n", num_rng[3], num_azi[3]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid4->header->nx, grid4->header->inc[GMT_X], grid4->header->ny, grid4->header->inc[GMT_Y]); if ((num_rng[3] != round(grid4->header->nx * grid4->header->inc[GMT_X])) || (num_azi[3] != round(grid4->header->ny * grid4->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[8]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[8], grid4) == NULL) return EXIT_FAILURE; /* subswath 5 */ if ((prmfile = fopen(argv[9], "r")) == NULL) { die("\n can't open PRM file:\n", argv[9]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[4] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[4] = prm.near_range; rng_samp_rate[4] = prm.fs; num_rng[4] = prm.num_rng_bins; num_azi[4] = prm.num_patches * prm.num_valid_az; prf[4] = prm.prf; vel[4] = prm.vel; fclose(prmfile); if ((grid5 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[10], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 5: num_rng=%d, num_azi=%d\n", num_rng[4], num_azi[4]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid5->header->nx, grid5->header->inc[GMT_X], grid5->header->ny, grid5->header->inc[GMT_Y]); if ((num_rng[4] != round(grid5->header->nx * grid5->header->inc[GMT_X])) || (num_azi[4] != round(grid5->header->ny * grid5->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[10]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[10], grid5) == NULL) return EXIT_FAILURE; /* subswath 6 */ if ((prmfile = fopen(argv[11], "r")) == NULL) { die("\n can't open PRM file:\n", argv[11]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[5] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[5] = prm.near_range; rng_samp_rate[5] = prm.fs; num_rng[5] = prm.num_rng_bins; num_azi[5] = prm.num_patches * prm.num_valid_az; prf[5] = prm.prf; vel[5] = prm.vel; fclose(prmfile); if ((grid6 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[12], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 6: num_rng=%d, num_azi=%d\n", num_rng[5], num_azi[5]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid6->header->nx, grid6->header->inc[GMT_X], grid6->header->ny, grid6->header->inc[GMT_Y]); if ((num_rng[5] != round(grid6->header->nx * grid6->header->inc[GMT_X])) || (num_azi[5] != round(grid6->header->ny * grid6->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[12]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[12], grid6) == NULL) return EXIT_FAILURE; /* subswath 7 */ if ((prmfile = fopen(argv[13], "r")) == NULL) { die("\n can't open PRM file:\n", argv[13]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[6] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[6] = prm.near_range; rng_samp_rate[6] = prm.fs; num_rng[6] = prm.num_rng_bins; num_azi[6] = prm.num_patches * prm.num_valid_az; prf[6] = prm.prf; vel[6] = prm.vel; fclose(prmfile); if ((grid7 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[14], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 7: num_rng=%d, num_azi=%d\n", num_rng[6], num_azi[6]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid7->header->nx, grid7->header->inc[GMT_X], grid7->header->ny, grid7->header->inc[GMT_Y]); if ((num_rng[6] != round(grid7->header->nx * grid7->header->inc[GMT_X])) || (num_azi[6] != round(grid7->header->ny * grid7->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[14]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[14], grid7) == NULL) return EXIT_FAILURE; /* subswath 8 */ if ((prmfile = fopen(argv[15], "r")) == NULL) { die("\n can't open PRM file:\n", argv[15]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[7] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[7] = prm.near_range; rng_samp_rate[7] = prm.fs; num_rng[7] = prm.num_rng_bins; num_azi[7] = prm.num_patches * prm.num_valid_az; prf[7] = prm.prf; vel[7] = prm.vel; fclose(prmfile); if ((grid8 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[16], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 8: num_rng=%d, num_azi=%d\n", num_rng[7], num_azi[7]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid8->header->nx, grid8->header->inc[GMT_X], grid8->header->ny, grid8->header->inc[GMT_Y]); if ((num_rng[7] != round(grid8->header->nx * grid8->header->inc[GMT_X])) || (num_azi[7] != round(grid8->header->ny * grid8->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[16]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[16], grid8) == NULL) return EXIT_FAILURE; /* subswath 9 */ if ((prmfile = fopen(argv[17], "r")) == NULL) { die("\n can't open PRM file:\n", argv[17]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[8] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[8] = prm.near_range; rng_samp_rate[8] = prm.fs; num_rng[8] = prm.num_rng_bins; num_azi[8] = prm.num_patches * prm.num_valid_az; prf[8] = prm.prf; vel[8] = prm.vel; fclose(prmfile); if ((grid9 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[18], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 9: num_rng=%d, num_azi=%d\n", num_rng[8], num_azi[8]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid9->header->nx, grid9->header->inc[GMT_X], grid9->header->ny, grid9->header->inc[GMT_Y]); if ((num_rng[8] != round(grid9->header->nx * grid9->header->inc[GMT_X])) || (num_azi[8] != round(grid9->header->ny * grid9->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[18]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[18], grid9) == NULL) return EXIT_FAILURE; /* subswath 10 */ if ((prmfile = fopen(argv[19], "r")) == NULL) { die("\n can't open PRM file:\n", argv[19]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[9] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[9] = prm.near_range; rng_samp_rate[9] = prm.fs; num_rng[9] = prm.num_rng_bins; num_azi[9] = prm.num_patches * prm.num_valid_az; prf[9] = prm.prf; vel[9] = prm.vel; fclose(prmfile); if ((grid10 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[20], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 10: num_rng=%d, num_azi=%d\n", num_rng[9], num_azi[9]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid inc_y=%f\n", grid10->header->nx, grid10->header->inc[GMT_X], grid10->header->ny, grid10->header->inc[GMT_Y]); if ((num_rng[9] != round(grid10->header->nx * grid10->header->inc[GMT_X])) || (num_azi[9] != round(grid10->header->ny * grid10->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[20]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[20], grid10) == NULL) return EXIT_FAILURE; /* find the minimum of the clock start */ clock_start_min = 1e10; for (i = 0; i < 5; i++) { if (clock_start[i] < clock_start_min) { clock_start_min = clock_start[i]; } } /* check the range sampling rate should be the same */ rsr = rng_samp_rate[0]; for (i = 1; i < 10; i++) { if (rsr != rng_samp_rate[i]) { die("\nrange sampling rate from PRM files are not the same.\n", " "); } } dr = sol / rsr / 2.0; fprintf(stderr, "dr = %f\n", dr); for (i = 0; i < 10; i++) { fprintf(stderr, "subswath %d, da = %f\n", i + 1, vel[i] / prf[i]); } /* calculate the relative clock in seconds */ for (i = 0; i < 10; i++) { clock_start_rel[i] = clock_start[i] - clock_start_min; near_range_rel[i] = near_range[i] - near_range[0]; fprintf(stderr, "subswath = %d, clock_start_rel = %f\n", i + 1, clock_start_rel[i]); fprintf(stderr, "subswath = %d, near_range_rel = %f\n", i + 1, near_range_rel[i]); } /* calculate the positions of the grids in dec meters */ ra[0][0] = round(near_range_rel[0] / dec); ra[0][1] = ra[0][0] + round(grid1->header->nx * grid1->header->inc[GMT_X] * dr / dec); ra[0][2] = round(clock_start_rel[0] * vel[0] / dec); ra[0][3] = ra[0][2] + round(grid1->header->ny * grid1->header->inc[GMT_Y] * vel[0] / prf[0] / dec); ra[1][0] = round(near_range_rel[1] / dec); ra[1][1] = ra[1][0] + round(grid2->header->nx * grid2->header->inc[GMT_X] * dr / dec); ra[1][2] = round(clock_start_rel[1] * vel[1] / dec); ra[1][3] = ra[1][2] + round(grid2->header->ny * grid2->header->inc[GMT_Y] * vel[1] / prf[1] / dec); ra[2][0] = round(near_range_rel[2] / dec); ra[2][1] = ra[2][0] + round(grid3->header->nx * grid3->header->inc[GMT_X] * dr / dec); ra[2][2] = round(clock_start_rel[2] * vel[2] / dec); ra[2][3] = ra[2][2] + round(grid3->header->ny * grid3->header->inc[GMT_Y] * vel[2] / prf[2] / dec); ra[3][0] = round(near_range_rel[3] / dec); ra[3][1] = ra[3][0] + round(grid4->header->nx * grid4->header->inc[GMT_X] * dr / dec); ra[3][2] = round(clock_start_rel[3] * vel[3] / dec); ra[3][3] = ra[3][2] + round(grid4->header->ny * grid4->header->inc[GMT_Y] * vel[3] / prf[3] / dec); ra[4][0] = round(near_range_rel[4] / dec); ra[4][1] = ra[4][0] + round(grid5->header->nx * grid5->header->inc[GMT_X] * dr / dec); ra[4][2] = round(clock_start_rel[4] * vel[4] / dec); ra[4][3] = ra[4][2] + round(grid5->header->ny * grid5->header->inc[GMT_Y] * vel[4] / prf[4] / dec); ra[5][0] = round(near_range_rel[5] / dec); ra[5][1] = ra[5][0] + round(grid6->header->nx * grid6->header->inc[GMT_X] * dr / dec); ra[5][2] = round(clock_start_rel[5] * vel[5] / dec); ra[5][3] = ra[5][2] + round(grid6->header->ny * grid6->header->inc[GMT_Y] * vel[5] / prf[5] / dec); ra[6][0] = round(near_range_rel[6] / dec); ra[6][1] = ra[6][0] + round(grid7->header->nx * grid7->header->inc[GMT_X] * dr / dec); ra[6][2] = round(clock_start_rel[6] * vel[6] / dec); ra[6][3] = ra[6][2] + round(grid7->header->ny * grid7->header->inc[GMT_Y] * vel[6] / prf[6] / dec); ra[7][0] = round(near_range_rel[7] / dec); ra[7][1] = ra[7][0] + round(grid8->header->nx * grid8->header->inc[GMT_X] * dr / dec); ra[7][2] = round(clock_start_rel[7] * vel[7] / dec); ra[7][3] = ra[7][2] + round(grid8->header->ny * grid8->header->inc[GMT_Y] * vel[7] / prf[7] / dec); ra[8][0] = round(near_range_rel[8] / dec); ra[8][1] = ra[8][0] + round(grid9->header->nx * grid9->header->inc[GMT_X] * dr / dec); ra[8][2] = round(clock_start_rel[8] * vel[8] / dec); ra[8][3] = ra[8][2] + round(grid9->header->ny * grid9->header->inc[GMT_Y] * vel[8] / prf[8] / dec); ra[9][0] = round(near_range_rel[9] / dec); ra[9][1] = ra[9][0] + round(grid10->header->nx * grid10->header->inc[GMT_X] * dr / dec); ra[9][2] = round(clock_start_rel[9] * vel[9] / dec); ra[9][3] = ra[9][2] + round(grid10->header->ny * grid10->header->inc[GMT_Y] * vel[9] / prf[9] / dec); /* debug */ /*for (i=0;i<5;i++) { for (j=0;j<4;j++) { fprintf(stderr, "i=%d j=%d ra=%d\n", i,j,ra[i][j]); } }*/ /* the lower boundary in the azimuth and range direction is 0 */ /* find the upper boundary in the azimuth and range direction */ azimuth_ub = -999999; for (i = 5; i < 10; i++) { if (ra[i][3] > azimuth_ub) { azimuth_ub = ra[i][3]; } } range_ub = ra[4][1]; /* make an output grid */ inc[GMT_X] = inc[GMT_Y] = dec; /* in meters */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = range_ub * inc[GMT_X]; wesn[GMT_YHI] = azimuth_ub * inc[GMT_Y]; /* debug */ /* fprintf(stderr, "inc[GMT_X] = %f , inc[GMT_Y] = %f\n", inc[GMT_X], inc[GMT_Y]); fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); */ if ((grid11 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "mosaic", grid11)) return EXIT_FAILURE; /* fill the empty grid with nan */ for (node11 = 0; node11 < grid11->header->size; node11++) grid11->data[node11] = NAN; /* put in the subswath grids */ range_boundary1 = round((ra[0][1] + ra[1][0]) / 2); azimuth_boundary1 = round((ra[0][3] + ra[5][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary1=%d\n",range_boundary1); /* put in subswath 1 */ for (range = ra[0][0]; range < range_boundary1; range++) { for (azimuth = ra[0][2]; azimuth < azimuth_boundary1; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[0]) / dr / grid1->header->inc[GMT_X]); row = grid1->header->ny - round((azimuth * dec - clock_start_rel[0] * vel[0]) / (vel[0] / prf[0]) / grid1->header->inc[GMT_Y]); if (col >= 0 && col <= grid1->header->nx && row >= 0 && row <= grid1->header->ny) { node1 = GMT_Get_Index(API, grid1->header, row, col); grid11->data[node11] = grid1->data[node1]; } } } /* put in subswath 2 */ range_boundary2 = round((ra[1][1] + ra[2][0]) / 2); azimuth_boundary2 = round((ra[1][3] + ra[6][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary2=%d\n",range_boundary2); for (range = range_boundary1; range < range_boundary2; range++) { for (azimuth = ra[1][2]; azimuth < azimuth_boundary2; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[1]) / dr / grid2->header->inc[GMT_X]); row = grid2->header->ny - round((azimuth * dec - clock_start_rel[1] * vel[1]) / (vel[1] / prf[1]) / grid2->header->inc[GMT_Y]); if (col >= 0 && col <= grid2->header->nx && row >= 0 && row <= grid2->header->ny) { node2 = GMT_Get_Index(API, grid2->header, row, col); grid11->data[node11] = grid2->data[node2]; } } } /* put in subswath 3 */ range_boundary3 = round((ra[2][1] + ra[3][0]) / 2); azimuth_boundary3 = round((ra[2][3] + ra[7][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary3=%d\n",range_boundary3); for (range = range_boundary2; range < range_boundary3; range++) { for (azimuth = ra[2][2]; azimuth < azimuth_boundary3; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[2]) / dr / grid3->header->inc[GMT_X]); row = grid3->header->ny - round((azimuth * dec - clock_start_rel[2] * vel[2]) / (vel[2] / prf[2]) / grid3->header->inc[GMT_Y]); if (col >= 0 && col <= grid3->header->nx && row >= 0 && row <= grid3->header->ny) { node3 = GMT_Get_Index(API, grid3->header, row, col); grid11->data[node11] = grid3->data[node3]; } } } /* put in subswath 4 */ range_boundary4 = round((ra[3][1] + ra[4][0]) / 2); azimuth_boundary4 = round((ra[3][3] + ra[8][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary4=%d\n",range_boundary4); for (range = range_boundary3; range < range_boundary4; range++) { for (azimuth = ra[3][2]; azimuth < azimuth_boundary4; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[3]) / dr / grid4->header->inc[GMT_X]); row = grid4->header->ny - round((azimuth * dec - clock_start_rel[3] * vel[3]) / (vel[3] / prf[3]) / grid4->header->inc[GMT_Y]); if (col >= 0 && col <= grid4->header->nx && row >= 0 && row <= grid4->header->ny) { node4 = GMT_Get_Index(API, grid4->header, row, col); grid11->data[node11] = grid4->data[node4]; } } } /* put in subswath 5 */ range_boundary5 = range_ub; azimuth_boundary5 = round((ra[4][3] + ra[9][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary5=%d\n",range_boundary5); for (range = range_boundary4; range < range_boundary5; range++) { for (azimuth = ra[4][2]; azimuth < azimuth_boundary5; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[4]) / dr / grid5->header->inc[GMT_X]); row = grid5->header->ny - round((azimuth * dec - clock_start_rel[4] * vel[4]) / (vel[4] / prf[4]) / grid5->header->inc[GMT_Y]); if (col >= 0 && col <= grid5->header->nx && row >= 0 && row <= grid5->header->ny) { node5 = GMT_Get_Index(API, grid5->header, row, col); grid11->data[node11] = grid5->data[node5]; } } } /* put in subswath 6 */ range_boundary1 = round((ra[5][1] + ra[6][0]) / 2); for (range = ra[5][0]; range < range_boundary1; range++) { for (azimuth = azimuth_boundary1; azimuth < ra[5][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[5]) / dr / grid6->header->inc[GMT_X]); row = grid6->header->ny - round((azimuth * dec - clock_start_rel[5] * vel[5]) / (vel[5] / prf[5]) / grid6->header->inc[GMT_Y]); if (col >= 0 && col <= grid6->header->nx && row >= 0 && row <= grid6->header->ny) { node6 = GMT_Get_Index(API, grid6->header, row, col); grid11->data[node11] = grid6->data[node6]; } } } /* put in subswath 7 */ range_boundary2 = round((ra[6][1] + ra[7][0]) / 2); for (range = range_boundary1; range < range_boundary2; range++) { for (azimuth = azimuth_boundary2; azimuth < ra[6][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[6]) / dr / grid7->header->inc[GMT_X]); row = grid7->header->ny - round((azimuth * dec - clock_start_rel[6] * vel[6]) / (vel[6] / prf[6]) / grid7->header->inc[GMT_Y]); if (col >= 0 && col <= grid7->header->nx && row >= 0 && row <= grid7->header->ny) { node7 = GMT_Get_Index(API, grid7->header, row, col); grid11->data[node11] = grid7->data[node7]; } } } /* put in subswath 8 */ range_boundary3 = round((ra[7][1] + ra[8][0]) / 2); for (range = range_boundary2; range < range_boundary3; range++) { for (azimuth = azimuth_boundary3; azimuth < ra[7][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[7]) / dr / grid8->header->inc[GMT_X]); row = grid8->header->ny - round((azimuth * dec - clock_start_rel[7] * vel[7]) / (vel[7] / prf[7]) / grid8->header->inc[GMT_Y]); if (col >= 0 && col <= grid8->header->nx && row >= 0 && row <= grid8->header->ny) { node8 = GMT_Get_Index(API, grid8->header, row, col); grid11->data[node11] = grid8->data[node8]; } } } /* put in subswath 9 */ range_boundary4 = round((ra[8][1] + ra[9][0]) / 2); for (range = range_boundary3; range < range_boundary4; range++) { for (azimuth = azimuth_boundary4; azimuth < ra[8][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[8]) / dr / grid9->header->inc[GMT_X]); row = grid9->header->ny - round((azimuth * dec - clock_start_rel[8] * vel[8]) / (vel[8] / prf[8]) / grid9->header->inc[GMT_Y]); if (col >= 0 && col <= grid9->header->nx && row >= 0 && row <= grid9->header->ny) { node9 = GMT_Get_Index(API, grid9->header, row, col); grid11->data[node11] = grid9->data[node9]; } } } /* put in subswath 10 */ range_boundary5 = ra[9][1]; for (range = range_boundary4; range < range_boundary5; range++) { for (azimuth = azimuth_boundary5; azimuth < ra[9][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[9]) / dr / grid10->header->inc[GMT_X]); row = grid10->header->ny - round((azimuth * dec - clock_start_rel[9] * vel[9]) / (vel[9] / prf[9]) / grid10->header->inc[GMT_Y]); if (col >= 0 && col <= grid10->header->nx && row >= 0 && row <= grid10->header->ny) { node10 = GMT_Get_Index(API, grid10->header, row, col); grid11->data[node11] = grid10->data[node10]; } } } /* output and clean up */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[21], grid11)) return EXIT_FAILURE; if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/a4/a4cf0bd0e129da867af77f5a3473e44de302ef6d.svn-base000444 015705 000000 00000001446 13505462014 026111 0ustar00sandwellwheel000000 000000 num_valid_az = 2800 nrows = 4096 first_line = 1 deskew = n caltone = 0.000000 st_rng_bin = 1 num_rng_bins = 6144 Flip_iq = n offset_video = n az_res = 5 nlooks = 1 chirp_ext = 614 scnd_rng_mig = n rng_spec_wgt = 1.000000 rm_rng_band = 0.000000 rm_az_band = 0.000000 rshift = 0 sub_int_r = 0.0 ashift = 0 sub_int_a = 0.0 stretch_r = 0.0 stretch_a = 0.0 a_stretch_r = 0.0 a_stretch_a = 0.0 equatorial_radius = 6378137.000000 polar_radius = 6356752.314100 I_mean = 15.5 Q_mean = 15.5 rng_samp_rate = 1.89625e+07 chirp_slope = 4.17788e+11 pulse_dur = 3.712e-05 radar_wavelength = 0.056666 SLC_scale = 4000000.0 lookdir = R GMTSAR_V5.7/.svn/pristine/a4/a4930250919ee17387ce16e67b7c47f7d00d523a.svn-base000444 015705 000000 00000116077 13505462013 025465 0ustar00sandwellwheel000000 000000 /*********************************************************************** This code is derived from cs2 v3.7 Written by Andrew V. Goldberg and Boris Cherkassky Modifications for use in snaphu by Curtis W. Chen The cs2 code is used here with permission for strictly noncommerical use. The original cs2 source code can be downloaded from http://www.igsystems.com/cs2 The original cs2 copyright is stated as follows: COPYRIGHT C 1995 IG Systems, Inc. Permission to use for evaluation purposes is granted provided that proper acknowledgments are given. For a commercial licence, contact igsys@eclipse.net. This software comes with NO WARRANTY, expressed or implied. By way of example, but not limitation, we make no representations of warranties of merchantability or fitness for any particular purpose or that the use of the software components or documentation will not infringe any patents, copyrights, trademarks, or other rights. Copyright 2002 Board of Trustees, Leland Stanford Jr. University *************************************************************************/ /* min-cost flow */ /* successive approximation algorithm */ /* Copyright C IG Systems, igsys@eclipse.com */ /* any use except for evaluation purposes requires a licence */ /* parser changed to take input from passed data */ /* main() changed to callable function */ /* outputs parsed as flow */ /* functions made static */ /* MAX and MIN macros renamed GREATEROF and LESSEROF */ #ifndef NO_CS2 /************************************** constants & parameters ********/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* for measuring time */ /* definitions of types: node & arc */ #define PRICE_MAX 1e30 #define BIGGEST_FLOW LARGESHORT #include "snaphu_cs2types.h" /* parser for getting DIMACS format input and transforming the data to the internal representation */ #include "snaphu_cs2parse.c" #define N_NODE( i ) ( ( (i) == NULL ) ? -1 : ( (i) - ndp + nmin ) ) #define N_ARC( a ) ( ( (a) == NULL )? -1 : (a) - arp ) #define UNFEASIBLE 2 #define ALLOCATION_FAULT 5 #define PRICE_OFL 6 /* parameters */ #define UPDT_FREQ 0.4 #define UPDT_FREQ_S 30 #define SCALE_DEFAULT 12.0 /* PRICE_OUT_START may not be less than 1 */ #define PRICE_OUT_START 1 #define CUT_OFF_POWER 0.44 #define CUT_OFF_COEF 1.5 #define CUT_OFF_POWER2 0.75 #define CUT_OFF_COEF2 1 #define CUT_OFF_GAP 0.8 #define CUT_OFF_MIN 12 #define CUT_OFF_INCREASE 4 /* #define TIME_FOR_PRICE_IN 5 */ #define TIME_FOR_PRICE_IN1 2 #define TIME_FOR_PRICE_IN2 4 #define TIME_FOR_PRICE_IN3 6 #define EMPTY_PUSH_COEF 1.0 /* #define MAX_CYCLES_CANCELLED 10 #define START_CYCLE_CANCEL 3 */ #define MAX_CYCLES_CANCELLED 0 #define START_CYCLE_CANCEL 100 /************************************************ shared macros *******/ #define GREATEROF( x, y ) ( ( (x) > (y) ) ? x : y ) #define LESSEROF( x, y ) ( ( (x) < (y) ) ? x : y ) #define OPEN( a ) ( a -> r_cap > 0 ) #define CLOSED( a ) ( a -> r_cap <= 0 ) #define REDUCED_COST( i, j, a ) ( (i->price) + dn*(a->cost) - (j->price) ) #define FEASIBLE( i, j, a ) ( (i->price) + dn*(a->cost) < (j->price) ) #define ADMISSIBLE( i, j, a ) ( OPEN(a) && FEASIBLE( i, j, a ) ) #define INCREASE_FLOW( i, j, a, df )\ {\ (i) -> excess -= df;\ (j) -> excess += df;\ (a) -> r_cap -= df;\ ((a) -> sister) -> r_cap += df;\ }\ /*---------------------------------- macros for excess queue */ #define RESET_EXCESS_Q \ {\ for ( ; excq_first != NULL; excq_first = excq_last )\ {\ excq_last = excq_first -> q_next;\ excq_first -> q_next = sentinel_node;\ }\ } #define OUT_OF_EXCESS_Q( i ) ( i -> q_next == sentinel_node ) #define EMPTY_EXCESS_Q ( excq_first == NULL ) #define NONEMPTY_EXCESS_Q ( excq_first != NULL ) #define INSERT_TO_EXCESS_Q( i )\ {\ if ( NONEMPTY_EXCESS_Q )\ excq_last -> q_next = i;\ else\ excq_first = i;\ \ i -> q_next = NULL;\ excq_last = i;\ } #define INSERT_TO_FRONT_EXCESS_Q( i )\ {\ if ( EMPTY_EXCESS_Q )\ excq_last = i;\ \ i -> q_next = excq_first;\ excq_first = i;\ } #define REMOVE_FROM_EXCESS_Q( i )\ {\ i = excq_first;\ excq_first = i -> q_next;\ i -> q_next = sentinel_node;\ } /*---------------------------------- excess queue as a stack */ #define EMPTY_STACKQ EMPTY_EXCESS_Q #define NONEMPTY_STACKQ NONEMPTY_EXCESS_Q #define RESET_STACKQ RESET_EXCESS_Q #define STACKQ_PUSH( i )\ {\ i -> q_next = excq_first;\ excq_first = i;\ } #define STACKQ_POP( i ) REMOVE_FROM_EXCESS_Q( i ) /*------------------------------------ macros for buckets */ node dnd, *dnode; #define RESET_BUCKET( b ) ( b -> p_first ) = dnode; #define INSERT_TO_BUCKET( i, b )\ {\ i -> b_next = ( b -> p_first );\ ( b -> p_first ) -> b_prev = i;\ ( b -> p_first ) = i;\ } #define NONEMPTY_BUCKET( b ) ( ( b -> p_first ) != dnode ) #define GET_FROM_BUCKET( i, b )\ {\ i = ( b -> p_first );\ ( b -> p_first ) = i -> b_next;\ } #define REMOVE_FROM_BUCKET( i, b )\ {\ if ( i == ( b -> p_first ) )\ ( b -> p_first ) = i -> b_next;\ else\ {\ ( i -> b_prev ) -> b_next = i -> b_next;\ ( i -> b_next ) -> b_prev = i -> b_prev;\ }\ } /*------------------------------------------- misc macros */ #define UPDATE_CUT_OFF \ {\ if (n_bad_pricein + n_bad_relabel == 0) \ {\ cut_off_factor = CUT_OFF_COEF2 * pow ( (double)n, CUT_OFF_POWER2 );\ cut_off_factor = GREATEROF ( cut_off_factor, CUT_OFF_MIN );\ cut_off = cut_off_factor * epsilon;\ cut_on = cut_off * CUT_OFF_GAP;\ }\ else\ {\ cut_off_factor *= CUT_OFF_INCREASE;\ cut_off = cut_off_factor * epsilon;\ cut_on = cut_off * CUT_OFF_GAP;\ }\ } #define TIME_FOR_UPDATE \ ( n_rel > n * UPDT_FREQ + n_src * UPDT_FREQ_S ) #define FOR_ALL_NODES_i for ( i = nodes; i != sentinel_node; i ++ ) #define FOR_ALL_ARCS_a_FROM_i \ for ( a = i -> first, a_stop = ( i + 1 ) -> suspended; a != a_stop; a ++ ) #define FOR_ALL_CURRENT_ARCS_a_FROM_i \ for ( a = i -> current, a_stop = ( i + 1 ) -> suspended; a != a_stop; a ++ ) #define WHITE 0 #define GREY 1 #define BLACK 2 arc *sa, *sb; long d_cap; #define EXCHANGE( a, b )\ {\ if ( a != b )\ {\ sa = a -> sister;\ sb = b -> sister;\ \ d_arc.r_cap = a -> r_cap;\ d_arc.cost = a -> cost;\ d_arc.head = a -> head;\ \ a -> r_cap = b -> r_cap;\ a -> cost = b -> cost;\ a -> head = b -> head;\ \ b -> r_cap = d_arc.r_cap;\ b -> cost = d_arc.cost;\ b -> head = d_arc.head;\ \ if ( a != sb )\ {\ b -> sister = sa;\ a -> sister = sb;\ sa -> sister = b;\ sb -> sister = a;\ }\ \ d_cap = cap[a-arcs];\ cap[a-arcs] = cap[b-arcs];\ cap[b-arcs] = d_cap;\ }\ } #define SUSPENDED( i, a ) ( a < i -> first ) long n_push =0, n_relabel =0, n_discharge =0, n_refine =0, n_update =0, n_scan =0, n_prscan =0, n_prscan1 =0, n_prscan2 =0, n_bad_pricein = 0, n_bad_relabel = 0, n_prefine =0; long n, /* number of nodes */ m; /* number of arcs */ short *cap; /* array containig capacities */ node *nodes, /* array of nodes */ *sentinel_node, /* next after last */ *excq_first, /* first node in push-queue */ *excq_last; /* last node in push-queue */ arc *arcs, /* array of arcs */ *sentinel_arc; /* next after last */ bucket *buckets, /* array of buckets */ *l_bucket; /* last bucket */ long linf; /* number of l_bucket + 1 */ double dlinf; /* copy of linf in double mode */ int time_for_price_in; double epsilon, /* optimality bound */ low_bound, /* lowest bound for epsilon */ price_min, /* lowest bound for prices */ f_scale, /* scale factor */ dn, /* cost multiplier - number of nodes + 1 */ mmc, /* multiplied maximal cost */ cut_off_factor, /* multiplier to produce cut_on and cut_off from n and epsilon */ cut_on, /* the bound for returning suspended arcs */ cut_off; /* the bound for suspending arcs */ double total_excess; /* total excess */ long n_rel, /* number of relabels from last price update */ n_ref, /* current number of refines */ n_src; /* current number of nodes with excess */ int flag_price = 0, /* if = 1 - signal to start price-in ASAP - maybe there is infeasibility because of susoended arcs */ flag_updt = 0; /* if = 1 - update failed some sources are unreachable: either the problem is unfeasible or you have to return suspended arcs */ long empty_push_bound; /* maximal possible number of zero pushes during one discharge */ int snc_max; /* maximal number of cycles cancelled during price refine */ arc d_arc; /* dummy arc - for technical reasons */ node d_node, /* dummy node - for technical reasons */ *dummy_node; /* the address of d_node */ /************************************************ abnormal finish **********/ static void err_end ( cc ) int cc; { fprintf ( sp0, "\ncs2 solver: Error %d ", cc ); if(cc==ALLOCATION_FAULT){ fprintf(sp0,"(allocation fault)\n"); }else if(cc==UNFEASIBLE){ fprintf(sp0,"(problem infeasible)\n"); }else if(cc==PRICE_OFL){ fprintf(sp0,"(price overflow)\n"); } /* 2 - problem is unfeasible 5 - allocation fault 6 - price overflow */ exit(ABNORMAL_EXIT); /* exit ( cc ); */ } /************************************************* initialization **********/ static void cs_init ( n_p, m_p, nodes_p, arcs_p, f_sc, max_c, cap_p ) long n_p, /* number of nodes */ m_p; /* number of arcs */ node *nodes_p; /* array of nodes */ arc *arcs_p; /* array of arcs */ long f_sc; /* scaling factor */ double max_c; /* maximal cost */ short *cap_p; /* array of capacities (changed to short by CWC) */ { node *i; /* current node */ /*arc *a; */ /* current arc */ bucket *b; /* current bucket */ n = n_p; nodes = nodes_p; sentinel_node = nodes + n; m = m_p; arcs = arcs_p; sentinel_arc = arcs + m; cap = cap_p; f_scale = f_sc; low_bound = 1.00001; dn = (double) n ; /* for ( a = arcs ; a != sentinel_arc ; a ++ ) a -> cost *= dn; */ mmc = max_c * dn; linf = n * f_scale + 2; dlinf = (double)linf; buckets = (bucket*) CAlloc ( linf, sizeof (bucket) ); if ( buckets == NULL ) err_end ( ALLOCATION_FAULT ); l_bucket = buckets + linf; dnode = &dnd; for ( b = buckets; b != l_bucket; b ++ ) RESET_BUCKET ( b ); epsilon = mmc; if ( epsilon < 1 ) epsilon = 1; price_min = - PRICE_MAX; FOR_ALL_NODES_i { i -> price = 0; i -> suspended = i -> first; i -> q_next = sentinel_node; } sentinel_node -> first = sentinel_node -> suspended = sentinel_arc; cut_off_factor = CUT_OFF_COEF * pow ( (double)n, CUT_OFF_POWER ); cut_off_factor = GREATEROF ( cut_off_factor, CUT_OFF_MIN ); n_ref = 0; flag_price = 0; dummy_node = &d_node; excq_first = NULL; empty_push_bound = n * EMPTY_PUSH_COEF; } /* end of initialization */ /********************************************** up_node_scan *************/ static void up_node_scan ( i ) node *i; /* node for scanning */ { node *j; /* opposite node */ arc *a, /* ( i, j ) */ *a_stop, /* first arc from the next node */ *ra; /* ( j, i ) */ bucket *b_old, /* old bucket contained j */ *b_new; /* new bucket for j */ long i_rank, j_rank, /* ranks of nodes */ j_new_rank; double rc, /* reduced cost of (j,i) */ dr; /* rank difference */ n_scan ++; i_rank = i -> rank; FOR_ALL_ARCS_a_FROM_i { ra = a -> sister; if ( OPEN ( ra ) ) { j = a -> head; j_rank = j -> rank; if ( j_rank > i_rank ) { if ( ( rc = REDUCED_COST ( j, i, ra ) ) < 0 ) j_new_rank = i_rank; else { dr = rc / epsilon; j_new_rank = ( dr < dlinf ) ? i_rank + (long)dr + 1 : linf; } if ( j_rank > j_new_rank ) { j -> rank = j_new_rank; j -> current = ra; if ( j_rank < linf ) { b_old = buckets + j_rank; REMOVE_FROM_BUCKET ( j, b_old ) } b_new = buckets + j_new_rank; INSERT_TO_BUCKET ( j, b_new ) } } } } /* end of scanning arcs */ i -> price -= i_rank * epsilon; i -> rank = -1; } /*************************************************** price_update *******/ static void price_update () { register node *i; double remain; /* total excess of unscanned nodes with positive excess */ bucket *b; /* current bucket */ double dp; /* amount to be subtracted from prices */ n_update ++; FOR_ALL_NODES_i { if ( i -> excess < 0 ) { INSERT_TO_BUCKET ( i, buckets ); i -> rank = 0; } else { i -> rank = linf; } } remain = total_excess; if ( remain < 0.5 ) return; /* main loop */ for ( b = buckets; b != l_bucket; b ++ ) { while ( NONEMPTY_BUCKET ( b ) ) { GET_FROM_BUCKET ( i, b ) up_node_scan ( i ); if ( i -> excess > 0 ) { remain -= (double)(i -> excess); if ( remain <= 0 ) break; } } /* end of scanning the bucket */ if ( remain <= 0 ) break; } /* end of scanning buckets */ if ( remain > 0.5 ) flag_updt = 1; /* finishup */ /* changing prices for nodes which were not scanned during main loop */ dp = ( b - buckets ) * epsilon; FOR_ALL_NODES_i { if ( i -> rank >= 0 ) { if ( i -> rank < linf ) REMOVE_FROM_BUCKET ( i, (buckets + i -> rank) ); if ( i -> price > price_min ) i -> price -= dp; } } } /* end of price_update */ /****************************************************** relabel *********/ static int relabel ( i ) register node *i; /* node for relabelling */ { register arc *a, /* current arc from i */ *a_stop, /* first arc from the next node */ *a_max = NULL; /* arc which provides maximum price */ register double p_max, /* current maximal price */ i_price, /* price of node i */ dp; /* current arc partial residual cost */ p_max = price_min; i_price = i -> price; for ( a = i -> current + 1, a_stop = ( i + 1 ) -> suspended; a != a_stop; a ++ ) { if ( OPEN ( a ) && ( ( dp = ( ( a -> head ) -> price ) - dn*( a -> cost ) ) > p_max ) ) { if ( i_price < dp ) { i -> current = a; return ( 1 ); } p_max = dp; a_max = a; } } /* 1/2 arcs are scanned */ for ( a = i -> first, a_stop = ( i -> current ) + 1; a != a_stop; a ++ ) { if ( OPEN ( a ) && ( ( dp = ( ( a -> head ) -> price ) - dn*( a -> cost ) ) > p_max ) ) { if ( i_price < dp ) { i -> current = a; return ( 1 ); } p_max = dp; a_max = a; } } /* 2/2 arcs are scanned */ /* finishup */ if ( p_max != price_min ) { i -> price = p_max - epsilon; i -> current = a_max; } else { /* node can't be relabelled */ if ( i -> suspended == i -> first ) { if ( i -> excess == 0 ) { i -> price = price_min; } else { if ( n_ref == 1 ) { err_end ( UNFEASIBLE ); } else { err_end ( PRICE_OFL ); } } } else /* node can't be relabelled because of suspended arcs */ { flag_price = 1; } } n_relabel ++; n_rel ++; return ( 0 ); } /* end of relabel */ /***************************************************** discharge *********/ static void discharge ( i ) register node *i; /* node to be discharged */ { register arc *a; /* an arc from i */ arc *b, /* an arc from j */ *ra; /* reversed arc (j,i) */ register node *j; /* head of a */ register long df; /* amoumt of flow to be pushed through a */ excess_t j_exc; /* former excess of j */ int empty_push; /* number of unsuccessful attempts to push flow out of i. If it is too big - it is time for global update */ n_discharge ++; empty_push = 0; a = i -> current; j = a -> head; if ( !ADMISSIBLE ( i, j, a ) ) { relabel ( i ); a = i -> current; j = a -> head; } while ( 1 ) { j_exc = j -> excess; if ( j_exc >= 0 ) { b = j -> current; if ( ADMISSIBLE ( j, b -> head, b ) || relabel ( j ) ) { /* exit from j exists */ df = LESSEROF ( i -> excess, a -> r_cap ); if (j_exc == 0) n_src++; INCREASE_FLOW ( i, j, a, df ) n_push ++; if ( OUT_OF_EXCESS_Q ( j ) ) { INSERT_TO_EXCESS_Q ( j ); } } else { /* push back */ ra = a -> sister; df = LESSEROF ( j -> excess, ra -> r_cap ); if ( df > 0 ) { INCREASE_FLOW ( j, i, ra, df ); if (j->excess == 0) n_src--; n_push ++; } if ( empty_push ++ >= empty_push_bound ) { flag_price = 1; return; } } } else /* j_exc < 0 */ { df = LESSEROF ( i -> excess, a -> r_cap ); INCREASE_FLOW ( i, j, a, df ) n_push ++; if ( j -> excess >= 0 ) { if ( j -> excess > 0 ) { n_src++; relabel ( j ); INSERT_TO_EXCESS_Q ( j ); } total_excess += j_exc; } else total_excess -= df; } if (i -> excess <= 0) n_src--; if ( i -> excess <= 0 || flag_price ) break; relabel ( i ); a = i -> current; j = a -> head; } i -> current = a; } /* end of discharge */ /***************************************************** price_in *******/ static int price_in () { node *i, /* current node */ *j; arc *a, /* current arc from i */ *a_stop, /* first arc from the next node */ *b, /* arc to be exchanged with suspended */ *ra, /* opposite to a */ *rb; /* opposite to b */ double rc; /* reduced cost */ int n_in_bad, /* number of priced_in arcs with negative reduced cost */ bad_found; /* if 1 we are at the second scan if 0 we are at the first scan */ excess_t i_exc, /* excess of i */ df; /* an amount to increase flow */ bad_found = 0; n_in_bad = 0; restart: FOR_ALL_NODES_i { for ( a = ( i -> first ) - 1, a_stop = ( i -> suspended ) - 1; a != a_stop; a -- ) { rc = REDUCED_COST ( i, a -> head, a ); if ( (rc < 0) && ( a -> r_cap > 0) ) { /* bad case */ if ( bad_found == 0 ) { bad_found = 1; UPDATE_CUT_OFF; goto restart; } df = a -> r_cap; INCREASE_FLOW ( i, a -> head, a, df ); ra = a -> sister; j = a -> head; b = -- ( i -> first ); EXCHANGE ( a, b ); if ( SUSPENDED ( j, ra ) ) { rb = -- ( j -> first ); EXCHANGE ( ra, rb ); } n_in_bad ++; } else if ( ( rc < cut_on ) && ( rc > -cut_on ) ) { b = -- ( i -> first ); EXCHANGE ( a, b ); } } } if ( n_in_bad != 0 ) { n_bad_pricein ++; /* recalculating excess queue */ total_excess = 0; n_src=0; RESET_EXCESS_Q; FOR_ALL_NODES_i { i -> current = i -> first; i_exc = i -> excess; if ( i_exc > 0 ) { /* i is a source */ total_excess += i_exc; n_src++; INSERT_TO_EXCESS_Q ( i ); } } INSERT_TO_EXCESS_Q ( dummy_node ); } if (time_for_price_in == TIME_FOR_PRICE_IN2) time_for_price_in = TIME_FOR_PRICE_IN3; if (time_for_price_in == TIME_FOR_PRICE_IN1) time_for_price_in = TIME_FOR_PRICE_IN2; return ( n_in_bad ); } /* end of price_in */ /************************************************** refine **************/ static void refine () { node *i; /* current node */ excess_t i_exc; /* excess of i */ /* long np, nr, ns; */ /* variables for additional print */ int pr_in_int; /* current number of updates between price_in */ /* np = n_push; nr = n_relabel; ns = n_scan; */ n_refine ++; n_ref ++; n_rel = 0; pr_in_int = 0; /* initialize */ total_excess = 0; n_src=0; RESET_EXCESS_Q time_for_price_in = TIME_FOR_PRICE_IN1; FOR_ALL_NODES_i { i -> current = i -> first; i_exc = i -> excess; if ( i_exc > 0 ) { /* i is a source */ total_excess += i_exc; n_src++; INSERT_TO_EXCESS_Q ( i ) } } if ( total_excess <= 0 ) return; /* main loop */ while ( 1 ) { if ( EMPTY_EXCESS_Q ) { if ( n_ref > PRICE_OUT_START ) { price_in (); } if ( EMPTY_EXCESS_Q ) break; } REMOVE_FROM_EXCESS_Q ( i ); /* push all excess out of i */ if ( i -> excess > 0 ) { discharge ( i ); if ( TIME_FOR_UPDATE || flag_price ) { if ( i -> excess > 0 ) { INSERT_TO_EXCESS_Q ( i ); } if ( flag_price && ( n_ref > PRICE_OUT_START ) ) { pr_in_int = 0; price_in (); flag_price = 0; } price_update(); while ( flag_updt ) { if ( n_ref == 1 ) { err_end ( UNFEASIBLE ); } else { flag_updt = 0; UPDATE_CUT_OFF; n_bad_relabel++; pr_in_int = 0; price_in (); price_update (); } } n_rel = 0; if ( n_ref > PRICE_OUT_START && (pr_in_int ++ > time_for_price_in) ) { pr_in_int = 0; price_in (); } } /* time for update */ } } /* end of main loop */ return; } /*----- end of refine */ /*************************************************** price_refine **********/ static int price_refine () { node *i, /* current node */ *j, /* opposite node */ *ir, /* nodes for passing over the negative cycle */ *is; arc *a, /* arc (i,j) */ *a_stop, /* first arc from the next node */ *ar; long bmax; /* number of farest nonempty bucket */ long i_rank, /* rank of node i */ j_rank, /* rank of node j */ j_new_rank; /* new rank of node j */ bucket *b, /* current bucket */ *b_old, /* old and new buckets of current node */ *b_new; double rc, /* reduced cost of a */ dr, /* ranks difference */ dp; int cc; /* return code: 1 - flow is epsilon optimal 0 - refine is needed */ long df; /* cycle capacity */ int nnc, /* number of negative cycles cancelled during one iteration */ snc; /* total number of negative cycle cancelled */ n_prefine ++; cc=1; snc=0; snc_max = ( n_ref >= START_CYCLE_CANCEL ) ? MAX_CYCLES_CANCELLED : 0; /* main loop */ while ( 1 ) { /* while negative cycle is found or eps-optimal solution is constructed */ nnc=0; FOR_ALL_NODES_i { i -> rank = 0; i -> inp = WHITE; i -> current = i -> first; } RESET_STACKQ FOR_ALL_NODES_i { if ( i -> inp == BLACK ) continue; i -> b_next = NULL; /* deapth first search */ while ( 1 ) { i -> inp = GREY; /* scanning arcs from node i starting from current */ FOR_ALL_CURRENT_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; if ( REDUCED_COST ( i, j, a ) < 0 ) { if ( j -> inp == WHITE ) { /* fresh node - step forward */ i -> current = a; j -> b_next = i; i = j; a = j -> current; a_stop = (j+1) -> suspended; break; } if ( j -> inp == GREY ) { /* cycle detected */ cc = 0; nnc++; i -> current = a; is = ir = i; df = BIGGEST_FLOW; while ( 1 ) { ar = ir -> current; if ( ar -> r_cap <= df ) { df = ar -> r_cap; is = ir; } if ( ir == j ) break; ir = ir -> b_next; } ir = i; while ( 1 ) { ar = ir -> current; INCREASE_FLOW( ir, ar -> head, ar, df) if ( ir == j ) break; ir = ir -> b_next; } if ( is != i ) { for ( ir = i; ir != is; ir = ir -> b_next ) ir -> inp = WHITE; i = is; a = (is -> current) + 1; a_stop = (is+1) -> suspended; break; } } } /* if j-color is BLACK - continue search from i */ } } /* all arcs from i are scanned */ if ( a == a_stop ) { /* step back */ i -> inp = BLACK; n_prscan1++; j = i -> b_next; STACKQ_PUSH ( i ); if ( j == NULL ) break; i = j; i -> current ++; } } /* end of deapth first search */ } /* all nodes are scanned */ /* no negative cycle */ /* computing longest paths with eps-precision */ snc += nnc; if ( snc rank; FOR_ALL_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; rc = REDUCED_COST ( i, j, a ); if ( rc < 0 ) /* admissible arc */ { dr = ( - rc - 0.5 ) / epsilon; if (( j_rank = dr + i_rank ) < dlinf ) { if ( j_rank > j -> rank ) j -> rank = j_rank; } } } } /* all arcs from i are scanned */ if ( i_rank > 0 ) { if ( i_rank > bmax ) bmax = i_rank; b = buckets + i_rank; INSERT_TO_BUCKET ( i, b ) } } /* end of while-cycle: all nodes are scanned - longest distancess are computed */ if ( bmax == 0 ) /* preflow is eps-optimal */ { break; } for ( b = buckets + bmax; b != buckets; b -- ) { i_rank = b - buckets; dp = (double)i_rank * epsilon; while ( NONEMPTY_BUCKET( b ) ) { GET_FROM_BUCKET ( i, b ); n_prscan++; FOR_ALL_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; j_rank = j -> rank; if ( j_rank < i_rank ) { rc = REDUCED_COST ( i, j, a ); if ( rc < 0 ) j_new_rank = i_rank; else { dr = rc / epsilon; j_new_rank = ( dr < dlinf ) ? i_rank - ( (long)dr + 1 ) : 0; } if ( j_rank < j_new_rank ) { if ( cc == 1 ) { j -> rank = j_new_rank; if ( j_rank > 0 ) { b_old = buckets + j_rank; REMOVE_FROM_BUCKET ( j, b_old ) } b_new = buckets + j_new_rank; INSERT_TO_BUCKET ( j, b_new ) } else { df = a -> r_cap; INCREASE_FLOW ( i, j, a, df ) } } } } /* end if opened arc */ } /* all arcs are scanned */ i -> price -= dp; } /* end of while-cycle: the bucket is scanned */ } /* end of for-cycle: all buckets are scanned */ if ( cc == 0 ) break; } /* end of main loop */ /* finish: */ /* if refine needed - saturate non-epsilon-optimal arcs */ if ( cc == 0 ) { FOR_ALL_NODES_i { FOR_ALL_ARCS_a_FROM_i { if ( REDUCED_COST ( i, a -> head, a ) < -epsilon ) { if ( ( df = a -> r_cap ) > 0 ) { INCREASE_FLOW ( i, a -> head, a, df ) } } } } } /*neg_cyc();*/ return ( cc ); } /* end of price_refine */ void compute_prices () { node *i, /* current node */ *j; /* opposite node */ arc *a, /* arc (i,j) */ *a_stop; /* first arc from the next node */ long bmax; /* number of farest nonempty bucket */ long i_rank, /* rank of node i */ j_rank, /* rank of node j */ j_new_rank; /* new rank of node j */ bucket *b, /* current bucket */ *b_old, /* old and new buckets of current node */ *b_new; double rc, /* reduced cost of a */ dr, /* ranks difference */ dp; int cc; /* return code: 1 - flow is epsilon optimal 0 - refine is needed */ n_prefine ++; cc=1; /* main loop */ while ( 1 ) { /* while negative cycle is found or eps-optimal solution is constructed */ FOR_ALL_NODES_i { i -> rank = 0; i -> inp = WHITE; i -> current = i -> first; } RESET_STACKQ FOR_ALL_NODES_i { if ( i -> inp == BLACK ) continue; i -> b_next = NULL; /* deapth first search */ while ( 1 ) { i -> inp = GREY; /* scanning arcs from node i */ FOR_ALL_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; if ( REDUCED_COST ( i, j, a ) < 0 ) { if ( j -> inp == WHITE ) { /* fresh node - step forward */ i -> current = a; j -> b_next = i; i = j; a = j -> current; a_stop = (j+1) -> suspended; break; } if ( j -> inp == GREY ) { /* cycle detected; should not happen */ cc = 0; } } /* if j-color is BLACK - continue search from i */ } } /* all arcs from i are scanned */ if ( a == a_stop ) { /* step back */ i -> inp = BLACK; n_prscan1++; j = i -> b_next; STACKQ_PUSH ( i ); if ( j == NULL ) break; i = j; i -> current ++; } } /* end of deapth first search */ } /* all nodes are scanned */ /* no negative cycle */ /* computing longest paths */ if ( cc == 0 ) break; bmax = 0; while ( NONEMPTY_STACKQ ) { n_prscan2++; STACKQ_POP ( i ); i_rank = i -> rank; FOR_ALL_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; rc = REDUCED_COST ( i, j, a ); if ( rc < 0 ) /* admissible arc */ { dr = - rc; if (( j_rank = dr + i_rank ) < dlinf ) { if ( j_rank > j -> rank ) j -> rank = j_rank; } } } } /* all arcs from i are scanned */ if ( i_rank > 0 ) { if ( i_rank > bmax ) bmax = i_rank; b = buckets + i_rank; INSERT_TO_BUCKET ( i, b ) } } /* end of while-cycle: all nodes are scanned - longest distancess are computed */ if ( bmax == 0 ) { break; } for ( b = buckets + bmax; b != buckets; b -- ) { i_rank = b - buckets; dp = (double) i_rank; while ( NONEMPTY_BUCKET( b ) ) { GET_FROM_BUCKET ( i, b ) n_prscan++; FOR_ALL_ARCS_a_FROM_i { if ( OPEN ( a ) ) { j = a -> head; j_rank = j -> rank; if ( j_rank < i_rank ) { rc = REDUCED_COST ( i, j, a ); if ( rc < 0 ) j_new_rank = i_rank; else { dr = rc; j_new_rank = ( dr < dlinf ) ? i_rank - ( (long)dr + 1 ) : 0; } if ( j_rank < j_new_rank ) { if ( cc == 1 ) { j -> rank = j_new_rank; if ( j_rank > 0 ) { b_old = buckets + j_rank; REMOVE_FROM_BUCKET ( j, b_old ) } b_new = buckets + j_new_rank; INSERT_TO_BUCKET ( j, b_new ) } } } } /* end if opened arc */ } /* all arcs are scanned */ i -> price -= dp; } /* end of while-cycle: the bucket is scanned */ } /* end of for-cycle: all buckets are scanned */ if ( cc == 0 ) break; } /* end of main loop */ } /* end of compute_prices */ /***************************************************** price_out ************/ static void price_out () { node *i; /* current node */ arc *a, /* current arc from i */ *a_stop, /* first arc from the next node */ *b; /* arc to be exchanged with suspended */ double n_cut_off, /* -cut_off */ rc; /* reduced cost */ n_cut_off = - cut_off; FOR_ALL_NODES_i { FOR_ALL_ARCS_a_FROM_i { rc = REDUCED_COST ( i, a -> head, a ); if (((rc > cut_off) && (CLOSED(a -> sister))) || ((rc < n_cut_off) && (CLOSED(a))) ) { /* suspend the arc */ b = ( i -> first ) ++ ; EXCHANGE ( a, b ); } } } } /* end of price_out */ /**************************************************** update_epsilon *******/ /*----- decrease epsilon after epsilon-optimal flow is constructed */ static int update_epsilon() { if ( epsilon <= low_bound ) return ( 1 ); epsilon = ceil ( epsilon / f_scale ); cut_off = cut_off_factor * epsilon; cut_on = cut_off * CUT_OFF_GAP; return ( 0 ); } /*************************************************** finishup ***********/ static void finishup ( obj_ad ) double *obj_ad; /* objective */ { arc *a; /* current arc */ long na; /* corresponding position in capacity array */ double obj_internal;/* objective */ double cs; /* actual arc cost */ long flow; /* flow through an arc */ obj_internal = 0; for ( a = arcs, na = 0; a != sentinel_arc ; a ++, na ++ ) { /* cs = a -> cost / dn; */ cs = a -> cost; if ( cap[na] > 0 && ( flow = cap[na] - (a -> r_cap) ) != 0 ) obj_internal += cs * (double) flow; /* a -> cost = cs; */ } *obj_ad = obj_internal; } /*********************************************** init_solution ***********/ /* static void init_solution ( ) */ /* { */ /* arc *a; */ /* current arc (i,j) */ /* node *i, */ /* tail of a */ /* *j; */ /* head of a */ /* long df; */ /* ricidual capacity */ /* for ( a = arcs; a != sentinel_arc ; a ++ ) */ /* { */ /* if ( a -> r_cap > 0 && a -> cost < 0 ) */ /* { */ /* df = a -> r_cap; */ /* i = ( a -> sister ) -> head; */ /* j = a -> head; */ /* INCREASE_FLOW ( i, j, a, df ); */ /* } */ /* } */ /* } */ /* check complimentary slackness */ /* int check_cs () */ /* { */ /* node *i; */ /* arc *a, *a_stop; */ /* FOR_ALL_NODES_i */ /* FOR_ALL_ARCS_a_FROM_i */ /* if (OPEN(a) && (REDUCED_COST(i, a->head, a) < 0)) */ /* assert(0); */ /* return(1); */ /* } */ /************************************************* cs2 - head program ***/ static void cs2 ( n_p, m_p, nodes_p, arcs_p, f_sc, max_c, cap_p, obj_ad) long n_p, /* number of nodes */ m_p; /* number of arcs */ node *nodes_p; /* array of nodes */ arc *arcs_p; /* array of arcs */ long f_sc; /* scaling factor */ double max_c; /* maximal cost */ short *cap_p; /* capacities (changed to short by CWC) */ double *obj_ad; /* objective */ { int cc; /* for storing return code */ cs_init ( n_p, m_p, nodes_p, arcs_p, f_sc, max_c, cap_p ); /*init_solution ( );*/ cc = 0; update_epsilon (); do{ /* scaling loop */ refine (); if ( n_ref >= PRICE_OUT_START ) { price_out ( ); } if ( update_epsilon () ) break; while ( 1 ) { if ( ! price_refine () ) break; if ( n_ref >= PRICE_OUT_START ) { if ( price_in () ) { break; } } if ((cc = update_epsilon ())) break; } } while ( cc == 0 ); finishup ( obj_ad ); } /*-----------------------------------------------------------------------*/ /* SolveCS2-- formerly main() */ void SolveCS2(signed char **residue, short **mstcosts, long nrow, long ncol, long cs2scalefactor, short ***flowsptr) { /* double t; */ arc *arp; node *ndp; long n, m, m2, nmin; node *i; long ni; arc *a; long nNrow, nNcol; long to, from, num, flow, ground; long f_sc; double cost, c_max; short *cap; /* cap changed to short by CWC */ short **rowcost, **colcost; short **rowflow, **colflow; /* number of rows, cols, in residue network */ nNrow=nrow-1; nNcol=ncol-1; ground=nNrow*nNcol+1; /* parse input, set up the problem */ rowcost=mstcosts; colcost=&(mstcosts[nrow-1]); f_sc=cs2scalefactor; cs2mcfparse( residue,rowcost,colcost,nNrow,nNcol, &n,&m,&ndp,&arp,&nmin,&c_max,&cap ); /* free memory that is no longer needed */ Free2DArray((void **)residue,nrow-1); Free2DArray((void **)mstcosts,2*nrow-1); /* solve it! */ fprintf(sp2,"Running cs2 MCF solver\n"); m2 = 2 * m; cs2 ( n, m2, ndp, arp, f_sc, c_max, cap, &cost ); /* parse flow solution and place into flow arrays */ /* get memory for flow arrays */ (*flowsptr)=(short **)Get2DRowColZeroMem(nrow,ncol, sizeof(short *),sizeof(short)); rowflow=(*flowsptr); colflow=&((*flowsptr)[nrow-1]); /* loop over nodes */ for ( i = ndp; i < ndp + n; i ++ ){ ni = N_NODE ( i ); /* loop over arcs */ for ( a = i -> suspended; a != (i+1)->suspended; a ++ ){ /* if finite (non-zero) flow */ if ( cap[ N_ARC (a) ] > 0 && (cap[ N_ARC (a) ] - ( a -> r_cap ) ) ){ /* get to, from nodes and flow amount */ from=ni; to=N_NODE( a -> head ); flow=cap[ N_ARC (a) ] - ( a -> r_cap ); if(flow>LARGESHORT || flow<-LARGESHORT){ fprintf(sp0,"Flow will overflow short data type\nAbort\n"); exit(ABNORMAL_EXIT); } if(from==(to+1)){ num=from+(int )((from-1)/nNrow); colflow[(num-1) % (nNrow+1)][(int )(num-1)/(nNrow+1)]-=flow; }else if(from==(to-1)){ num=from+(int )((from-1)/nNrow)+1; colflow[(num-1) % (nNrow+1)][(int )(num-1)/(nNrow+1)]+=flow; }else if(from==(to-nNrow)){ num=from+nNrow; rowflow[(num-1) % nNrow][(int )((num-1)/nNrow)]+=flow; }else if(from==(to+nNrow)){ num=from; rowflow[(num-1) % nNrow][(int )((num-1)/nNrow)]-=flow; }else if((from==ground) || (to==ground)){ if(to==ground){ num=to; to=from; from=num; flow=-flow; } if(!((to-1) % nNrow)){ colflow[0][(int )((to-1)/nNrow)]+=flow; }else if(to<=nNrow){ rowflow[to-1][0]+=flow; }else if(to>=(ground-nNrow-1)){ rowflow[(to-1) % nNrow][nNcol]-=flow; }else if(!(to % nNrow)){ colflow[nNrow][(int )((to/nNrow)-1)]-=flow; }else{ fprintf(sp0,"Unassigned ground arc parsing cs2 solution\nAbort\n"); exit(ABNORMAL_EXIT); } }else{ fprintf(sp0,"Non-grid arc parsing cs2 solution\nAbort\n"); exit(ABNORMAL_EXIT); } } /* end if flow on arc */ } /* end for loop over arcs of node */ } /* end for loop over nodes */ /* free memory */ free(ndp-nmin); free(arp); free(cap); free(buckets); } #endif /* end #ifndef NO_CS2 */ GMTSAR_V5.7/.svn/pristine/02/02d1eb963701f213a13d5400eb4f9c72b41f86dd.svn-base000444 015705 000000 00000000425 13505462013 025477 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % clear sigx=5; sigy=.5; nx=21; ny=3; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss3x21 -ASCII -double gauss GMTSAR_V5.7/.svn/pristine/02/021b0a451f22f9485dce5bf8408f1287edc396f0.svn-base000444 015705 000000 00000031322 13505462014 025524 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 04/06/2015 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "PRM.h" #include "lib_defs.h" #include "lib_functions.h" #include "stateV.h" #include "tiffio.h" #include #include #include #include int pop_prm(struct PRM *, tree *, char *); int pop_led(tree *, state_vector *); int write_orb(state_vector *sv, FILE *fp, int); int write_slc(TIFF *, FILE *, char *); char *USAGE = "\n\nUsage: make_slc_rs2 name_of_xml_file name_of_tiff_file name_output\n" "\nExample: make_slc_rs2 product.xml imagery_HH.tif RS220110515\n" "\nOutput: RS220110515.SLC RS220110515.PRM RS220110515.LED\n"; int main(int argc, char **argv) { FILE *XML_FILE, *OUTPUT_PRM, *OUTPUT_SLC, *OUTPUT_LED; TIFF *TIFF_FILE; char tmp_str[200]; struct PRM prm; tree *xml_tree; state_vector sv[200]; int ch, n = 0, nc = 0, nlmx = 0; if (argc < 4) die(USAGE, ""); if ((XML_FILE = fopen(argv[1], "rb")) == NULL) die("Couldn't open xml file: \n", argv[1]); // find the number of lines and the maximum line length of the xml file while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++n; if (nc > nlmx) nlmx = nc; nc = 0; } } fprintf(stderr, "%d %d \n", n, nlmx); xml_tree = (struct tree *)malloc(n * 5 * sizeof(struct tree)); fclose(XML_FILE); // generate the xml tree if ((XML_FILE = fopen(argv[1], "r")) == NULL) die("Couldn't open xml file: \n", argv[1]); get_tree(XML_FILE, xml_tree, 1); fclose(XML_FILE); // show_tree(xml_tree,0,0); // initiate the prm null_sio_struct(&prm); // generate the PRM file pop_prm(&prm, xml_tree, argv[3]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".PRM"); if ((OUTPUT_PRM = fopen(tmp_str, "w")) == NULL) die("Couldn't open prm file: \n", tmp_str); put_sio_struct(prm, OUTPUT_PRM); fclose(OUTPUT_PRM); // generate the LED file n = pop_led(xml_tree, sv); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".LED"); if ((OUTPUT_LED = fopen(tmp_str, "w")) == NULL) die("Couldn't open led file: \n", tmp_str); write_orb(sv, OUTPUT_LED, n); fclose(OUTPUT_LED); // generate the SLC file TIFFSetWarningHandler(NULL); if ((TIFF_FILE = TIFFOpen(argv[2], "r")) == NULL) die("Couldn't open tiff file: \n", argv[2]); strcpy(tmp_str, argv[3]); strcat(tmp_str, ".SLC"); if ((OUTPUT_SLC = fopen(tmp_str, "wb")) == NULL) die("Couldn't open slc file: \n", tmp_str); write_slc(TIFF_FILE, OUTPUT_SLC, prm.orbdir); TIFFClose(TIFF_FILE); fclose(OUTPUT_SLC); } int write_slc(TIFF *tif, FILE *slc, char *orbdir) { uint32 width, height, widthi; int i, j; uint16 s = 0, nsamples; uint16 *buf; short *tmp; // get the width and the height of the file, make width dividable by 4 TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &widthi); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); width = widthi - widthi % 4; // printf("%d %d \n",width,height); buf = (uint16 *)_TIFFmalloc(TIFFScanlineSize(tif)); tmp = (short *)malloc(width * 2 * sizeof(short)); printf("Writing SLC..Image Size: %d X %d...\n", width, height); TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &nsamples); // printf("Total Number of Samples: %d\n",nsamples); // For Ascending Condition... if (strcmp(orbdir, "A") == 0) { printf("Fliping upside down for Ascending Image...\n"); for (i = height - 1; i >= 0; i--) { TIFFReadScanline(tif, buf, i, s); for (j = 0; j < width * 2; j++) { tmp[j] = (short)buf[j]; } fwrite(tmp, sizeof(short), width * 2, slc); } } // For Descending Condition... else { printf("Fliping leftside right for Descending Image...\n"); for (i = 0; i < height; i++) { TIFFReadScanline(tif, buf, i, s); for (j = 0; j < width; j++) { tmp[(width - 1 - j) * 2] = (short)buf[j * 2]; tmp[(width - 1 - j) * 2 + 1] = (short)buf[j * 2 + 1]; } fwrite(tmp, sizeof(short), width * 2, slc); } } _TIFFfree(buf); free(tmp); return (1); } int write_orb(state_vector *sv, FILE *fp, int n) { int i; double dt; dt = trunc((sv[1].sec) * 1000.0) / 1000.0 - trunc((sv[0].sec) * 1000.0) / 1000.0; if (n <= 1) return (-1); fprintf(fp, "%d %d %d %.3lf %lf \n", n, sv[0].yr, sv[0].jd, sv[0].sec, dt); for (i = 0; i < n; i++) { fprintf(fp, "%d %d %.3lf %.6lf %.6lf %.6lf %.8lf %.8lf %.8lf \n", sv[i].yr, sv[i].jd, sv[i].sec, sv[i].x, sv[i].y, sv[i].z, sv[i].vx, sv[i].vy, sv[i].vz); } return (1); } int pop_led(tree *xml_tree, state_vector *sv) { int i, ct; char tmp_c[200]; double tmp_d; // search_tree(xml_tree,"/product/generalAnnotation/orbitList/",tmp_c,3,0,1); // count = 1;//(int)str2double(tmp_c); i = 1; while (1) { ct = search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/" "orbitInformation/stateVector/", tmp_c, 1, 5, i); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/timeStamp/", tmp_c, 2, 5, i); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/timeStamp/", tmp_c, 1, 5, i); tmp_c[4] = '\0'; sv[i - 1].yr = (int)(str2double(tmp_c)); sv[i - 1].jd = (int)(tmp_d - trunc(tmp_d / 1000.0) * 1000.0); sv[i - 1].sec = (tmp_d - trunc(tmp_d)) * 86400; search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/xPosition/", tmp_c, 1, 5, i); sv[i - 1].x = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/yPosition/", tmp_c, 1, 5, i); sv[i - 1].y = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/zPosition/", tmp_c, 1, 5, i); sv[i - 1].z = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/xVelocity/", tmp_c, 1, 5, i); sv[i - 1].vx = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/yVelocity/", tmp_c, 1, 5, i); sv[i - 1].vy = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "stateVector/zVelocity/", tmp_c, 1, 5, i); sv[i - 1].vz = str2double(tmp_c); // fprintf(stderr,"Hahahahahaahah...\n"); if (xml_tree[ct].sibr == -1 || strcmp(xml_tree[xml_tree[ct].sibr].name, "stateVector") != 0) { break; } else { i = i + 1; } } printf("%d Lines Written for Orbit...\n", i); return (i); } int pop_prm(struct PRM *prm, tree *xml_tree, char *file_name) { char tmp_c[2000]; double tmp_d; int tmp_i; double c_speed = 299792458.0; // define some of the variables prm->first_line = 1; prm->st_rng_bin = 1; search_tree(xml_tree, "/product/imageGenerationParameters/sarProcessingInformation/" "numberOfRangeLooks/", tmp_c, 1, 0, 1); fprintf(stderr, "%s \n", tmp_c); prm->nlooks = (int)str2double(tmp_c); prm->rshift = 0; prm->ashift = 0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 1; strasign(prm->dtype, "a", 0, 0); search_tree(xml_tree, "/product/imageAttributes/rasterAttributes/sampledPixelSpacing/", tmp_c, 1, 0, 1); prm->fs = c_speed / 2.0 / str2double(tmp_c); // rng_samp_rate prm->SC_identity = 9; /* (1)-ERS1 (2)-ERS2 (3)-Radarsat (4)-Envisat (5)-ALOS (6)- (7)-TSX (8)-CSK (9)-RS2 (10) Sentinel-1a*/ search_tree(xml_tree, "/product/sourceAttributes/radarParameters/radarCenterFrequency/", tmp_c, 1, 0, 1); prm->lambda = c_speed / str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/radarParameters/pulseLength/", tmp_c, 1, 0, 1); tmp_d = str2double(tmp_c); search_tree(xml_tree, "/product/sourceAttributes/radarParameters/pulseBandwidth/", tmp_c, 1, 0, 1); prm->chirp_slope = str2double(tmp_c) / tmp_d; prm->pulsedur = tmp_d; // search_tree(xml_tree,"/product/qualityInformation/qualityDataList/qualityData/imageQuality/imageStatistics/outputDataMean/re/",tmp_c,1,0,1); prm->xmi = 0; // str2double(tmp_c); //I_mean // search_tree(xml_tree,"/product/qualityInformation/qualityDataList/qualityData/imageQuality/imageStatistics/outputDataMean/im/",tmp_c,1,0,1); prm->xmq = 0; // str2double(tmp_c); //Q_mean search_tree(xml_tree, "/product/sourceAttributes/radarParameters/pulseRepetitionFrequency/", tmp_c, 1, 0, 1); prm->prf = str2double(tmp_c) / 2.0; search_tree(xml_tree, "/product/imageGenerationParameters/slantRangeToGroundRange/" "slantRangeTimeToFirstRangeSample/", tmp_c, 1, 0, 1); prm->near_range = str2double(tmp_c) * c_speed / 2.0; prm->ra = 6378137.00; // equatorial_radius prm->rc = 6356752.31; // polar_radius search_tree(xml_tree, "/product/sourceAttributes/orbitAndAttitude/orbitInformation/" "passDirection/", tmp_c, 1, 0, 1); strasign(prm->orbdir, tmp_c, 0, 0); search_tree(xml_tree, "/product/sourceAttributes/radarParameters/antennaPointing/", tmp_c, 1, 0, 1); strasign(prm->lookdir, tmp_c, 0, 0); strcpy(tmp_c, file_name); strcat(tmp_c, ".raw"); strcpy(prm->input_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".LED"); strcpy(prm->led_file, tmp_c); strcpy(tmp_c, file_name); strcat(tmp_c, ".SLC"); strcpy(prm->SLC_file, tmp_c); prm->SLC_scale = 1.0; if (strcmp(prm->orbdir, "D") == 0) { search_tree(xml_tree, "/product/imageGenerationParameters/sarProcessingInformation/" "zeroDopplerTimeFirstLine/", tmp_c, 2, 0, 1); } else { search_tree(xml_tree, "/product/imageGenerationParameters/sarProcessingInformation/" "zeroDopplerTimeLastLine/", tmp_c, 2, 0, 1); } prm->clock_start = str2double(tmp_c); search_tree(xml_tree, "/product/imageGenerationParameters/sarProcessingInformation/" "zeroDopplerTimeLastLine/", tmp_c, 1, 0, 1); tmp_c[4] = '\0'; prm->SC_clock_start = prm->clock_start + 1000. * str2double(tmp_c); strasign(prm->iqflip, "n", 0, 0); // Flip_iq strasign(prm->deskew, "n", 0, 0); // deskew strasign(prm->offset_video, "n", 0, 0); search_tree(xml_tree, "/product/imageAttributes/rasterAttributes/numberOfSamplesPerLine/", tmp_c, 1, 0, 1); // tmp_i = (int)str2double(tmp_c) - (int)str2double(tmp_c)%4; prm->num_rng_bins = (int)str2double(tmp_c) - (int)str2double(tmp_c) % 4; prm->bytes_per_line = prm->num_rng_bins * 4; // tmp_i*4; prm->good_bytes = prm->bytes_per_line; prm->caltone = 0.0; prm->pctbwaz = 0.0; // rm_az_band prm->pctbw = 0.2; // rm_rng_band prm->rhww = 1.0; // rng_spec_wgt strasign(prm->srm, "0", 0, 0); // scnd_rng_mig prm->az_res = 0.0; // prm.antenna_side = -1; prm->fdd1 = 0.0; prm->fddd1 = 0.0; search_tree(xml_tree, "/product/imageAttributes/rasterAttributes/numberOfLines/", tmp_c, 1, 0, 1); tmp_i = (int)str2double(tmp_c); prm->num_lines = tmp_i - tmp_i % 4; // search_tree(xml_tree,"/product/adsHeader/stopTime/",tmp_c,2,0,1); prm->SC_clock_stop = prm->SC_clock_start + prm->num_lines / prm->prf / 86400; prm->clock_stop = prm->clock_start + prm->num_lines / prm->prf / 86400; prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; prm->chirp_ext = 0; printf("PRM set for Image File...\n"); return (1); } GMTSAR_V5.7/.svn/pristine/9c/9c33492d739f7746ff6f4cda96a3052c578c7679.svn-base000444 015705 000000 00000003501 13505462013 025523 0ustar00sandwellwheel000000 000000 .TH STACK_TABLE l "4/22/99 \(co 1999 David Sandwell" "stack_table.l 1.0" "SIOSAR SAR Processor" .SH NAME stack_table \- prepares a table of Bperp vs days into mission. .SH SYNOPSIS .B stack_table .I master.PRM slave.PRM [GMT] .SH DESCRIPTION The .B stack_table command reads master and slave parameter files and creates a table of .I sat_orb slave_time slave_days(1992) Bpl Bperp xshift yshift. The optional GMT parameter reformats the table for use with the GMT command pstext. This command is most useful for assembly of many repeat sar images into a stack for topographic recovery and change detection. .TP 10 .I master.PRM parameter file for master SAR image for the entire stack .TP 10 .I slave.PRM parameter file for one of the slave SAR images .TP 10 .I [GMT] option to create a textfile suitable for plotting with pstext .SH EXAMPLE .br stack_table 23390_2925.PRM 15240_2925.PRM GMT > temp.txt .br stack_table 23390_2925.PRM 15741_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 20384_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 20885_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 21386_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 22388_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 22889_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 23390_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 23891_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 24893_2925.PRM GMT >> temp.txt .br stack_table 23390_2925.PRM 25394_2925.PRM GMT >> temp.txt .br # .br # now sort the table .br # .br sort -n +0 -1 < temp.txt > gmttable.txt .br # .br pstext gmttable.txt -Jx.004/.0045 -R50/2450/-750/770 -B200/100SWen > plot.ps .SH SEE ALSO .B pre_proc_ccrs(l) ers_baseline(l) .SH AUTHOR David Sandwell, Scripps Institution of Oceanography. UNIX shell script .SH DIAGNOSTICS no bugs yet!! GMTSAR_V5.7/.svn/pristine/9c/9c0b3b303fea16e2e763cc620b847a7df03e1f09.svn-base000444 015705 000000 00000000720 13505462013 025735 0ustar00sandwellwheel000000 000000 5 9 0.018316 0.082085 0.135335 0.082085 0.018316 0.043937 0.196912 0.324652 0.196912 0.043937 0.082085 0.367879 0.606531 0.367879 0.082085 0.119433 0.535261 0.882497 0.535261 0.119433 0.135335 0.606531 1.000000 0.606531 0.135335 0.119433 0.535261 0.882497 0.535261 0.119433 0.082085 0.367879 0.606531 0.367879 0.082085 0.043937 0.196912 0.324652 0.196912 0.043937 0.018316 0.082085 0.135335 0.082085 0.018316 GMTSAR_V5.7/.svn/pristine/9d/9d05afa376253f4bd747b9db228029ec64b49083.svn-base000444 015705 000000 00000000461 13505462014 025546 0ustar00sandwellwheel000000 000000 include ../../../config.mk # Makefile for lib src LIB = libENVI.a INCLUDES = -I../../ALOS_preproc/include SRCS = read_ENVI_orb.c \ ENVI_ldr_orbit.c OBJS= $(SRCS:.c=.o) $(LIB) : $(OBJS) $(AR) r $(LIB) $? $(RANLIB) $(LIB) all: install install: $(LIB) $(INSTALL) *.a ../lib clean: rm -f *.a *.o GMTSAR_V5.7/.svn/pristine/9d/9da9baab02e47ecceb82cb051b2b75fb431d2bad.svn-base000444 015705 000000 00000002672 13505462013 026366 0ustar00sandwellwheel000000 000000 /* $Id: get_locations.c 33 2013-04-06 05:37:15Z pwessel $ */ #include "gmtsar.h" #include "xcorr.h" #include #include #include #include /*-------------------------------------------------------*/ /* determine pixel location of each point for testing */ /* use master */ /* pixel locations for slave includes x, y offset */ void get_locations(struct xcorr *xc) { int i, j, n; /* need to space more than offset from side */ /* also add two more range locations then below we don't use the first and * last range locations */ /* these first and last locations are unreliable because the data have been * extended */ xc->x_inc = (xc->m_nx - 2 * (xc->xsearch + xc->nx_corr)) / (xc->nxl + 3); xc->y_inc = (xc->m_ny - 2 * (xc->ysearch + xc->ny_corr)) / (xc->nyl + 1); /* add an extra column on memory just in case */ xc->loc = malloc(xc->nyl * (xc->nxl + 1) * sizeof(struct locs)); n = 0; for (j = 1; j <= xc->nyl; j++) { /* remove the first and last of each range line to avoid regions of low SAR * amplitude and unreliable correlation*/ for (i = 2; i <= xc->nxl + 1; i++) { xc->loc[n].x = xc->npx + i * xc->x_inc; xc->loc[n].y = xc->npy + j * xc->y_inc; n++; } } xc->nlocs = n; fprintf(stderr, " locations n %d nx %d nyl %d nxl %d x_inc %d y_inc %d\n", n, xc->m_nx, xc->nyl, xc->nxl, xc->x_inc, xc->y_inc); } /*-------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/9d/9d02c1f5be48dfcf0306d003ce514ea153dbae51.svn-base000444 015705 000000 00000000677 13505462014 026074 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_pre_process CSRCS = ALOS_pre_process.c \ parse_ALOS_commands.c \ read_ALOS_data.c \ read_ALOSE_data.c \ swap_ALOS_data_info.c \ roi_utils.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) $(FLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/05/05d9eaabc9f8197241786c58ace29a063b83cd74.svn-base000444 015705 000000 00000030675 13505462014 025635 0ustar00sandwellwheel000000 000000 /***************************************************************************/ /* read_ALOSE_data reads an ERSDAC ALOS file containing raw signal data */ /* and creates a raw-file and PRM-file suitable for our esarp processor. */ /* The program skips the first 16252 bytes of the .raw file but copies the */ /* remaining data to the IMG.raw file after checking and fixing problems. */ /* The first record is read to determine the linelength, starting PRF, */ /* and near_range. If the line length or PRF change then the program */ /* halts. If the near_range changes then the lines are shifted and */ /* unconstrained values at the ends are set to NULL_DATA (15 or 16). */ /* (random sequence of 15 and 16's) */ /* During this processing the available parameters are added to the */ /* PRM-file. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell, Meng Wei, Jeff Bytof * * (Scripps Institution of Oceanography) * * Rob Mellors, SDSU * Date : 06/29/2006 * * based on read_ALOS_data * 12/12/09 format changes for RESTEC files Jeff Bytof * * 15-Apr-2010 Replaced ALOS identifier with ALOSE Jeff Bytof * **************************************************************************/ /* the data header information is read into the structure dfd the line prefix information is read into sdr Values read here (and or generated) are: num_rng_bins bytes_per_line good_bytes_per_line PRF pulse_dur near_range num_lines num_patches SC_clock_start SC_clock_stop clock_start clock_stop */ /* fast random number generator */ #include "image_sio.h" #include "lib_functions.h" /* #define znew (int) (z=36969*(z&65535)+(z>>16)) typedef unsigned long UL; static UL z=362436069, t[256]; void settable(UL i1) { int i; z=i1; for(i=0;i<256;i=i+1) t[i]=znew; } */ long read_sardata_info_ALOSE(FILE *, struct PRM *, int *, int *); int assign_sardata_params_ALOSE(struct PRM *, int, int *, int *); void swap_ALOS_data_info(struct sardata_info_ALOSE *sdr); void settable(unsigned long); void print_params(struct PRM *prm); int check_shift(struct PRM *, int *, int *, int *, int); int set_file_position(FILE *, long *, int); int reset_params(struct PRM *prm, long *, int *, int *); int fill_shift_data(int, int, int, int, int, char *, char *, FILE *); int handle_prf_change_ALOSE(struct PRM *, FILE *, long *, int); struct sardata_record r1; struct sardata_descriptor_ALOSE dfd; struct sardata_info_ALOSE sdr; /* differences in include file from ALOS AUIG struct sardata_descriptor_ALOSE SARDATA_DESCRIPTOR_WCS_ALOSE SARDATA_DESCRIPTOR_RVL_ALOSE(SP) struct sardata_info_ALOSE SARDATA__WCS_ALOSE SARDATA_RVL_ALOSE(SP) */ long read_ALOSE_data(FILE *imagefile, FILE *outfile, struct PRM *prm, long *byte_offset) { char *data_fbd = NULL, *data, *shift_data; int record_length0; /* length of record read at start of file */ int record_length1; /* length of record read in file */ int line_suffix_size; /* number of bytes after data */ int data_length; /* bytes of data */ int k, n, m, ishift, shift, shift0; int header_size, line_prefix_size; double pri; double get_clock_ALOSE(); settable(12345); if (verbose) fprintf(stderr, ".... reading header \n"); /* read header information */ read_sardata_info_ALOSE(imagefile, prm, &header_size, &line_prefix_size); if (verbose) fprintf(stderr, ".... reading header %d %d\n", header_size, line_prefix_size); /* calculate parameters (data length, range bins, etc) */ assign_sardata_params_ALOSE(prm, line_prefix_size, &line_suffix_size, &record_length0); /* allocate data */ if (verbose) printf("record_length0 = %d \n", record_length0); /* bytof */ if ((data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if (sdr.receive_polarization == 2) if ((data_fbd = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if ((shift_data = (char *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); /* if byte_offset < 0 this is the first time through */ /* if prf change has occurred, set file to byte_offset */ set_file_position(imagefile, byte_offset, header_size); if (verbose) fprintf(stderr, ".... reading data (byte %ld) \n", ftell(imagefile)); shift0 = 0; n = 1; m = 0; /* read the rest of the file */ while ((fread((void *)&sdr, sizeof(struct sardata_info_ALOSE), 1, imagefile)) == 1) { n++; /* checks for little endian/ big endian */ if (swap) swap_ALOS_data_info(&sdr); /* if this is partway through the file due to prf change, reset sequence, * PRF, and near_range */ if ((*byte_offset > 0) && (n == 2)) reset_params(prm, byte_offset, &n, &m); if (sdr.sequence_number != n) printf(" missing line: n, seq# %d %d \n", n, sdr.sequence_number); /* check for changes in record_length and PRF */ record_length1 = sdr.record_length - line_prefix_size; if (record_length0 != record_length1) die("record_length changed", ""); /* if prf changes, close file and set byte_offset */ if ((sdr.PRF) != prm->prf) { handle_prf_change_ALOSE(prm, imagefile, byte_offset, n); break; } /* check shift to see if it varies from beginning or from command line value */ check_shift(prm, &shift, &ishift, &shift0, record_length1); if ((verbose) && (n / 2000.0 == n / 2000)) { fprintf(stderr, " Working on line %d prf %f record length %d slant_range %d \n", sdr.sequence_number, 0.001 * sdr.PRF, record_length1, sdr.slant_range); } /* read data (and trailing bytes) */ if (fread((char *)data, record_length1, (size_t)1, imagefile) != 1) break; data_length = record_length1; /* write line header to output data */ fwrite((void *)&sdr, line_prefix_size, 1, outfile); /* write either fbd or fbs */ if (sdr.receive_polarization == 2) { for (k = 0; k < data_length; k = k + 4) { data_fbd[k / 2] = data[k]; data_fbd[k / 2 + 1] = data[k + 1]; } /* write fbd data */ if (shift == 0) { fwrite((char *)data_fbd, data_length / 2, 1, outfile); } else if (shift != 0) { fill_shift_data(shift, ishift, data_length / 2, line_suffix_size, record_length1, data_fbd, shift_data, outfile); } } else { /* write fbs data */ if (shift == 0) { fwrite((char *)data, data_length, 1, outfile); } else if (shift != 0) { fill_shift_data(shift, ishift, data_length, line_suffix_size, record_length1, data, shift_data, outfile); } } } /* calculate end time */ prm->clock_stop = get_clock_ALOSE(sdr, tbias); prm->SC_clock_stop = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_stop; /* m is non-zero only in the event of a prf change */ prm->num_lines = n - m - 1; prm->num_patches = (int)((1.0 * n) / (1.0 * prm->num_valid_az)); if (prm->num_lines == 0) prm->num_lines = 1; /* compute the PRI and round to the nearest integer microsecond then the * prf=1./pri */ pri = (int)(1.e6 * 86400. * (prm->clock_stop - prm->clock_start) / (prm->num_lines - 2.5) + .5); prm->prf = 1.e3 / pri; if (verbose) print_params(prm); free(data); free(shift_data); fclose(outfile); return (*byte_offset); } /***************************************************************************/ double get_clock_ALOSE(struct sardata_info_ALOSE sdr, double tbias) { double time; // nsd = 24.0*60.0*60.0; time = (double)sdr.sensor_acquisition_DOY + (double)sdr.sensor_acquisition_msecs_day / 1000.0 / 86400.0 + tbias / 86400.0; if (debug) printf("get_clock: time = %f \n", time); return (time); } /***************************************************************************/ long read_sardata_info_ALOSE(FILE *imagefile, struct PRM *prm, int *header_size, int *line_prefix_size) { long nitems; if (debug) print_params(prm); /* bytof */ *header_size = sizeof(struct sardata_record) + sizeof(struct sardata_descriptor_ALOSE); if (debug) printf("header_size = %d \n", *header_size); /* bytof */ *line_prefix_size = sizeof(struct sardata_info_ALOSE); if (debug) printf("*line_prefix_size = %d \n", *line_prefix_size); /* bytof */ if (*header_size != 16252) die("header size is not 16252 bytes\n", ""); /* restec format change - bytof */ if (*line_prefix_size != 292) die("line_prefix_size is not 292 bytes\n", ""); /* bytof */ if (debug) fprintf(stderr, " header_size %d line_prefix_size %d swap data %d\n", *header_size, *line_prefix_size, swap); /* make sure that we are at the beginning */ /* re-read header even if resetting after a PRF change */ rewind(imagefile); if (verbose) fprintf(stderr, ".... reading header (byte %ld) \n", ftell(imagefile)); nitems = fread((void *)&r1, sizeof(struct sardata_record), 1, imagefile); if (debug) printf("nitems = %ld \n", nitems); /* bytof */ if (debug) { fprintf(stderr, SARDATA_RECORD_WCS, SARDATA_RECORD_RVL(&r1)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_record)), ftell(imagefile)); } nitems = fread((void *)&dfd, sizeof(struct sardata_descriptor_ALOSE), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_DESCRIPTOR_WCS_ALOSE, SARDATA_DESCRIPTOR_RVL_ALOSE(&dfd)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_descriptor_ALOSE)), ftell(imagefile)); } nitems = fread((void *)&sdr, sizeof(struct sardata_info_ALOSE), 1, imagefile); if (debug) fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_info_ALOSE)), ftell(imagefile)); /* swap data little end/ big end if needed */ if (swap) swap_ALOS_data_info(&sdr); if (debug) fprintf(stderr, SARDATA__WCS_ALOSE, SARDATA_RVL_ALOSE(sdr)); return (nitems); } /***************************************************************************/ int assign_sardata_params_ALOSE(struct PRM *prm, int line_prefix_size, int *line_suffix_size, int *record_length0) { double get_clock(); prm->prf = sdr.PRF; prm->pulsedur = (1e-9) * sdr.chirp_length; *record_length0 = sdr.record_length - line_prefix_size; if (verbose) printf("sdr.record_length = %d \n", sdr.record_length); /* bytof */ if (verbose) printf("line_prefix_size = %d \n", line_prefix_size); /* bytof */ if (verbose) printf("sdr.record_length = %d \n", sdr.record_length); /* bytof */ if (verbose) printf("sdr.transmit_polarization = %d \n", sdr.transmit_polarization); if (verbose) printf("sdr.receive_polarization = %d \n", sdr.receive_polarization); prm->clock_start = get_clock_ALOSE(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; /* restec format changes - bytof */ /* record_length is 21100 */ /* beginning of line has a 292 byte prefix */ /* end of line has a 80 byte (40 pixels) suffix (right-fill pixels)*/ /* record_length0 (data length) is (20688 - 412) = 20276 */ /* n_data_pixels 10304 */ /* 2 bytes per pixel */ /* 412 bytes + (2*10304) bytes + (40*2) bytes = 21100 bytes*/ prm->good_bytes = 2 * sdr.n_data_pixels + line_prefix_size; prm->num_rng_bins = sdr.n_data_pixels + prm->chirp_ext; /* chirp_ext formerly nextend */ prm->bytes_per_line = sdr.record_length; if (sdr.receive_polarization == 2) prm->bytes_per_line = line_prefix_size + (sdr.record_length - line_prefix_size) / 2; *line_suffix_size = prm->bytes_per_line - prm->good_bytes; if (prm->near_range < 0) prm->near_range = sdr.slant_range; if (debug) printf("assign_sardata_params: \n"); /* bytof */ if (debug) print_params(prm); /* bytof */ if (*record_length0 > 50000) { fprintf(stderr, "**** record_length is %d !\n", *record_length0); die("expect something like 21100 .... try -swap option?\n", "exiting"); } return (EXIT_SUCCESS); } /***************************************************************************/ int handle_prf_change_ALOSE(struct PRM *prm, FILE *imagefile, long *byte_offset, int n) { prm->num_lines = n; fseek(imagefile, -1 * sizeof(struct sardata_info_ALOSE), SEEK_CUR); *byte_offset = ftell(imagefile); printf(" *** PRF changed from %lf to %lf at line %d (byte %ld)\n", (0.001 * prm->prf), (0.001 * sdr.PRF), n, *byte_offset); printf(" end: PRF changed from %lf to %lf at line %d \n", (0.001 * prm->prf), (0.001 * sdr.PRF), n); return (EXIT_SUCCESS); } /***************************************************************************/ GMTSAR_V5.7/.svn/pristine/05/0557f29a8b92bfc84a5e48bb06d78172e30c6aa8.svn-base000444 015705 000000 00000005542 13505462014 025621 0ustar00sandwellwheel000000 000000 /* * $Id: epr_dsd.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_DSD_H_INCL #define EPR_DSD_H_INCL #ifdef __cplusplus extern "C" { #endif #include "epr_ptrarray.h" #include /* just to get the ANSI-C type FILE */ /** * Opens dsd for a dataset description, * obtained from an ENVISAT product file. * * @param dsd_index the number of dsd (zero-based), emrty dsd inclusive * * @return the the pointer at the dsd information. */ EPR_SDSD* epr_create_dsd(int dsd_index); /** * Release the memory allocated through a dataset description, * obtained from an ENVISAT product file. * * @param dsd the file identifier, if NULL the function * immediately returns zero. * @return zero for success, an error code otherwise * @see epr_free_dsd_id */ void epr_free_dsd(EPR_SDSD* dsd); /** * Reads a dataset description from an ENVISAT product file. * * @param envisat_source_file the handle of the given ENVISAT product file, * must not be NULL * @param pos number of the dataset description in ENVISAT product file, * @return a new dataset description or NULL if an error occured. */ EPR_SDSD* epr_read_each_dsd(FILE* envisat_source_file, int* pos); /** * Reads all dataset descriptions from an ENVISAT product file. * * @param product_id the file identifier, if NULL the function * immediately returns NULL. * @return an array of dataset descriptions or NULL if an error occured. */ EPR_SPtrArray* epr_read_all_dsds(EPR_SProductId* product_id); /** * Finds the first dataset description from an ENVISAT product file. * * @param envisat_source_file the handle of the given ENVISAT product file, * must not be NULL * @param sph_length [bytes] the length of SPH part from the given ENVISAT product file, * must not be NULL * @return the offset to first founded dsd or 0 if not found. */ uint epr_find_first_dsd(FILE* envisat_source_file, uint sph_length); int epr_detect_meris_iodd_version(EPR_SProductId* product_id); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_DSD_H_INCL */ GMTSAR_V5.7/.svn/pristine/05/05ece19f05427bd61cb0aae25668c258d23cc1c9.svn-base000444 015705 000000 00000005220 13505462013 025647 0ustar00sandwellwheel000000 000000 #include #include #include void gauss_jordan(double **, double *, double *, int *); void polyfit(double *T, double *Y, double *C, int *Mp, int *Np) /* T - array of independent variable of length M - input */ /* Y - array of dependent variable of length M - input */ /* C - array of polynomial coefficients length N - output */ /* FORTRAN callable */ { double **A, *B; int i, j, k; int M, N; M = *Mp; N = *Np; if (N > M) { printf(" underdetermined system \n"); exit(-1); } /* malloc the memory for A, and B */ if ((A = (double **)malloc(N * sizeof(double *))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for A-matrix.\n"); exit(-1); } for (i = 0; i < N; i++) { if ((A[i] = (double *)malloc(N * sizeof(double))) == NULL) { fprintf(stderr, "sorry, couldn't allocate memory for A-matrix.\n"); exit(-1); } } if ((B = (double *)malloc(N * sizeof(double))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for B-vector.\n"); exit(-1); } /* zero all the arrays */ for (i = 0; i < N; i++) { B[i] = 0.0; C[i] = 0.0; for (j = 0; j < N; j++) A[i][j] = 0.0; } /* set up A and B for polynomial fit of order N */ for (j = 0; j < N; j++) { for (k = 0; k < M; k++) { B[j] = B[j] + Y[k] * pow(T[k], j); } } for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { for (k = 0; k < M; k++) A[i][j] = A[i][j] + pow(T[k], j + i); } } gauss_jordan(A, B, C, &N); /* solve the equations */ free(A); free(B); } void gauss_jordan(double **A, double *B, double *X, int *Np) { /* routine for solving an N by N system of linear equations B = A*X using Gaussian elimination with back substitution. FORTRAN callable */ double temp, factor, sum; int m, u, p; int j, k, l, N, N0; N = *Np; N0 = N - 1; for (k = 0; k < N; k++) { m = k; for (l = m + 1; l < N; l++) { if (*(*(A + k) + m) != 0.0) { factor = *(*(A + k) + l) / *(*(A + k) + m); /* perform row operation on A */ for (j = 0; j < N; j++) *(*(A + j) + l) = *(*(A + j) + l) - factor * (*(*(A + j) + m)); /* perform row operation on B */ *(B + l) = *(B + l) - factor * (*(B + m)); } } for (j = 0; j < N; j++) { temp = *(*(A + j) + k); *(*(A + j) + k) = *(*(A + j) + m); *(*(A + j) + m) = temp; } temp = *(B + k); *(B + k) = *(B + m); *(B + m) = temp; } /* back substitute to construct solution vector X */ *(X + N0) = *(B + N0) / (*(*(A + N0) + N0)); for (p = 0; p < N; p++) { sum = 0.0; for (u = N0 - p + 1; u < N; u++) sum = sum + (*(*(A + u) + N0 - p)) * (*(X + u)); *(X + N0 - p) = (*(B + N0 - p) - sum) / (*(*(A + N0 - p) + N0 - p)); } } GMTSAR_V5.7/.svn/pristine/05/0544368ed8970f79f1d9b301807e7086be4e8d05.svn-base000444 015705 000000 00000015722 13505462014 025343 0ustar00sandwellwheel000000 000000 /* program to read sample window start time, pulse repetition interval, and count lines and image format counter in CEOS SAR data file rjm UCSD/SDSU Sept 97 */ #include "SARtape.h" #include "data_param.h" #include #include #include #include #include #define SWAP_2(x) ((((x)&0xff) << 8) | ((unsigned short)(x) >> 8)) #define SWAP_4(x) (((x) << 24) | (((x) << 8) & 0x00ff0000) | (((x) >> 8) & 0x0000ff00) | ((x) >> 24)) #define FIX_SHORT(x) (*(unsigned short *)&(x) = SWAP_2(*(unsigned short *)&(x))) #define FIX_INT(x) (*(unsigned int *)&(x) = SWAP_4(*(unsigned int *)&(x))) #define FIX_FLOAT(x) FIX_INT(x) #define MIN_PRF 1640.0 #define MAX_PRF 1720.0 #define SEC_PER_PRI_COUNT 210.94e-09 #define LINELENGTH 12060 #define PREFIX 412 #define SUFFIX 416 #define IFC_OFF 200 #define SOL 299792456.0 int is_big_endian_(void); int is_big_endian__(void); int main(argc, argv) int argc; char *argv[]; { char *data, logfilename[255]; // int file_size,year; int prior_pri_dn; FILE *indata, *logfile; struct sarleader_binary slb; struct sardata_rec sdr; struct SAR_info sar; struct lineparam info; int endian; int logflag; int nlines, linelength, prefix, suffix; int num_patches, good_bytes_per_line, first_sample; int iwrite = 0; // char *iptr; int ncnt, print_start; unsigned short *icu_time1, *icu_time2; double icu_time, icu_time_old; double SC_clock_start, SC_clock_stop; double clock_start, clock_stop; struct lineparam { int ifc; unsigned short swst_dn; unsigned short pri_dn; double pri; double swst; }; double calc_pri(); double calc_swst(); logflag = 0; /*------------------------*/ /* check endian */ /*------------------------*/ endian = is_big_endian_(); if (argc < 2) { fprintf(stderr, "Usage: %s datafile\n", argv[0]); exit(1); } indata = fopen(argv[1], "r"); if ((argc > 3) && ((strcmp(argv[1], "-log") == 0))) { strcpy(logfilename, "dataheader.log"); logfile = fopen(logfilename, "w"); logflag = 1; } if (indata == NULL) { fprintf(stderr, "error opening data file\n"); exit(1); } /* read top of file */ (void)fread(&slb, sizeof(struct sarleader_binary), 1, indata); sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); /* read nominal parameters */ fscanf(indata, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); sar.dataheader = (struct sardata_header *)malloc(sizeof(struct sardata_header)); fscanf(indata, SARDATA_HEADER_RCS, SARDATA_HEADER_RVL(sar.dataheader)); /* reset file pointer and read first line of data */ fseek(indata, LINELENGTH, 0); (void)fread(&slb, sizeof(struct sarleader_binary), 1, indata); (void)fread(&sdr, sizeof(struct sardata_rec), 1, indata); if (logflag) { fprintf(logfile, SARLEADER_FDR_FIXSEG_WCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fprintf(logfile, SARDATA_HEADER_WCS, SARDATA_HEADER_RVL(sar.dataheader)); /*fprintf(logfile,SARDATA_REC_WCS, SARDATA_REC_RVL(&sdr));*/ } /* used in SAR processor - each patch is 2800 long */ nlines = atoi(sar.dataheader->n_records); num_patches = nlines / 2800; /* double-check length of line */ linelength = atoi(sar.dataheader->record_length); /* check data preifx and suffic; add 12 to prefix for top of file */ prefix = atoi(sar.dataheader->n_bytes_prefix_data) + 12; suffix = atoi(sar.dataheader->n_bytes_suffix_data); /* SAR processor needs to know where the first sample is so skip the dataheader (specified in equivalent samples - 2 bytes per sample) and subtract the data suffix (in bytes) */ first_sample = prefix / 2; good_bytes_per_line = linelength - suffix; /* set the spacecraft time */ if (endian == -1) { FIX_INT(sdr.year); FIX_INT(sdr.day_of_year); FIX_INT(sdr.msecs_of_day); } SC_clock_start = sdr.year * 1000 + (sdr.day_of_year) + (sdr.msecs_of_day) / (1000.0 * 3600.0 * 24.0); clock_start = sdr.day_of_year + (sdr.msecs_of_day) / (1000.0 * 3600.0 * 24.0); /* use PRI times the number of lines */ fprintf(stdout, "num_lines = %d\n", nlines - 1); fprintf(stdout, "good_bytes_per_line = %d\n", good_bytes_per_line); fprintf(stdout, "bytes_per_line = %d\n", linelength); fprintf(stdout, "first_sample = %d\n", first_sample); fprintf(stdout, "num_patches = %d\n", num_patches); if (linelength != LINELENGTH) { fprintf(stderr, "**** header_linelength (%d) != default linelength (LINELENGTH)\n", linelength); } if (prefix != PREFIX) { fprintf(stderr, "**** header_prefix (%d) != default prefix (PREFIX)\n", prefix); } if (suffix != SUFFIX) { fprintf(stderr, "**** header_suffix (%d) != default suffix (SUFFIX)\n", suffix); } fseek(indata, LINELENGTH, 0); prior_pri_dn = 0; data = (char *)malloc(LINELENGTH); ncnt = 0; print_start = 0; icu_time_old = 0.; while (fread(data, LINELENGTH, 1, indata) != 0) { ncnt = ncnt + 1; memcpy((char *)&info, (data + IFC_OFF), sizeof(struct lineparam)); icu_time1 = (unsigned short *)(data + IFC_OFF - 6); icu_time2 = (unsigned short *)(data + IFC_OFF - 4); /* swap bytes if necessary */ if (endian == -1) { FIX_INT(info.ifc); FIX_SHORT(info.swst_dn); FIX_SHORT(info.pri_dn); FIX_SHORT(*icu_time1); FIX_SHORT(*icu_time2); } info.pri = calc_pri(info); info.swst = calc_swst(info); icu_time = (double)(*icu_time1) * 65536.0 + (double)(*icu_time2); if (((icu_time - icu_time_old) == 1) & (print_start == 0)) { fprintf(stdout, "icu_start = %.3lf\n", (icu_time - (ncnt - 2) * (info.pri * 256))); print_start = 1; } icu_time_old = icu_time; if (info.pri_dn != prior_pri_dn && iwrite == 0) { /* don't need to print near_range here because it is obtained from * ers_line_fixer */ /*fprintf(stdout, "near_range = %lf * \n",(info.swst*SOL/2.0)); */ SC_clock_stop = SC_clock_start + (nlines * info.pri) / (24.0 * 3600.0); clock_stop = clock_start + (nlines * info.pri) / (24.0 * 3600.0); fprintf(stdout, "SC_clock_start = %16.10lf\n", SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf\n", SC_clock_stop); fprintf(stdout, "clock_start = %16.12lf\n", clock_start); fprintf(stdout, "clock_stop = %16.12lf\n", clock_stop); fprintf(stdout, "PRF = %lf\n", (1.0 / info.pri)); prior_pri_dn = info.pri_dn; iwrite = 1; } } } /* these are taken verbatim from fix_line */ double calc_pri(info) struct lineparam info; { return (((double)info.pri_dn + 2.0) * SEC_PER_PRI_COUNT); } double calc_swst(info) struct lineparam info; { return ((double)info.swst_dn * SEC_PER_PRI_COUNT + 9.0 * info.pri - 6.6E-6); /* based on Johan Jacob Mohr and Søren Nørvang Madsen, Member, IEEE,Geometric Calibration of ERS Satellite SAR Images, 2001, calibriation should be 6.6*/ } /*_______________________________*/ /* check endian of machine */ /* 1 if big; -1 if little */ /*_______________________________*/ int is_big_endian_() { union { long l; char c[sizeof(long)]; } u; u.l = 1; return (u.c[sizeof(long) - 1] == 1 ? 1 : -1); } int is_big_endian__() { return is_big_endian_(); } GMTSAR_V5.7/.svn/pristine/33/3358e60f5754d330ecf63adf76ecaf4d9e202fe4.svn-base000444 015705 000000 00000001320 13505462014 025752 0ustar00sandwellwheel000000 000000 /* program to test the fft shift routine */ #include "image_sio.h" #include "siocomplex.h" void main() { int k, nd = 1024; fcomplex *datai, *datao; double arg; datai = (fcomplex *)malloc(nd * sizeof(fcomplex)); datao = (fcomplex *)malloc(nd * sizeof(fcomplex)); /* fill the data array with a gaussian function */ for (k = 0; k < nd; k++) { datai[k].r = 0.0; datai[k].i = 0.0; arg = (k - nd / 2) * (k - nd / 2) / 4.; datai[k].r = (k - nd / 2) * exp(-arg); datai[k].i = -(k - nd / 2) * exp(-arg); datao[k].r = datai[k].r; datao[k].i = datai[k].i; } shift(nd, datao, 16.0); for (k = 0; k < nd; k++) { printf(" %d %lf %lf %lf %lf \n", k, datai[k].r, datai[k].i, datao[k].r, datao[k].i); } } GMTSAR_V5.7/.svn/pristine/33/33ca41e46b7b09179c475761650cb0134f45b444.svn-base000444 015705 000000 00000000600 13505462014 025211 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ENVI_look CSRCS = ENVI_look.c OBJS = $(CSRCS:.c=.o) $(FSRCS:.f=.o) INCLUDES = -I../../ALOS_preproc/include CLIBS = -L../../ALOS_preproc/lib -lALOS -L../lib -lENVI -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/5f/5f1fcde59f6346f8bf9eb5503cc996102152e7a2.svn-base000444 015705 000000 00000023304 13505462013 025712 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu, Mar 20 2017 # # set a directory with all downloaded orbits. e.g. orb_dir/S1A and orb_dir/S1B # # set a local directory that stores S1A and S1B orbits. e.g. orb_dir/S1A and orb_dir/S1B # # For linux users, modify the date command accordingly in order to let the script run. # Some linux system has issues with the if statement comapring tt, t1, t2. This is not fixed yet # # alias wgetasf to 'wget --http-user=**** --http-password=****' in .cshrc or .tcshrc file # requires having an account on with ASF # if ($#argv != 3) then echo "" echo "Usage: organize_files_tops.csh filelist pins.ll mode" echo " organize one track of S1A TOPS data, redefine frames, precise/restituted orbit is required" echo "" echo "filest:" echo " pth_filename1" echo " pth_filename2" echo " ......" echo "" echo "pins.ll:" echo " lon11 lat11 [lon12 lat12] [lon13 lat13]" echo " lon21 lat21 [lon22 lat22] [lon23 lat23]" echo " ......" echo "" echo "Note: " echo " files listed in filelist should be the .SAFE directory with absolute path." echo " mode = 1 will tell how many records are gonna be generated. mode = 2 will do the organizing." echo "" exit 1 endif set url_root = "https://s1qc.asf.alaska.edu/aux_poeorb" set orb_dir = "/geosat2/InSAR_Processing/Sentinel_Orbits" if (! -f orbits.list) then wget $url_root -O orbits.html grep EOF orbits.html | awk -F'"' '{print $2}' > orbits.list rm orbits.html endif set ii = 0 set mode = $3 if (-f tmprecord) rm tmprecord # divide the list of files into sets, and create frames based on the given pins foreach line (`awk '{print $0}' $1`) set file1 = `echo $line | awk -F"," '{print $1}'` set date1 = `echo $file1 | awk '{print substr($1,length($1)-54,8)}'` set SAT1 = `echo $file1 | awk '{print substr($1,length($1)-71,3)}'` if ($ii == 0) then set file0 = `echo $file1` set date0 = `echo $date1` set SAT0 = `echo $SAT1` echo $file1 > tmprecord set ii = 1 else # gather files from the same date if ($date1 == $date0 && $SAT1 == $SAT0) then echo $file1 >> tmprecord else echo "" | awk '{printf("%s ","Combing")}' set jj = 1 set t2 = 9999999999 # examining whether the frames are consecutive foreach line2 (`awk '{print $0}' tmprecord`) echo $line2 | awk '{printf("%s ",$1)}' set tt = `echo $line2 | awk '{print substr($1,length($1)-54,15)}'` set t1 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` if ($t1 > $t2) set jj = 0 set tt = `echo $line2 | awk '{print substr($1,length($1)-38,15)}'` set t2 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` end echo "" | awk '{printf("%s\n","...")}' # get the orbit file names and download set n1 = `date -v-1d -jf "%Y%m%d" $date0 +%Y%m%d` set n2 = `date -v+1d -jf "%Y%m%d" $date0 +%Y%m%d` set orb = `grep $SAT0 orbits.list | grep $n1 | grep $n2` echo $n1 $n2 $orb if (! -f $orb) then if (-f $orb_dir/$SAT0/$orb) then ln -s $orb_dir/$SAT0/$orb . else wgetasf $url_root"/"$orb endif endif # compute azimuth for the start and end set pin1 = `head -1 $2 | awk '{print $1,$2}'` set f1 = `head -1 tmprecord` make_s1a_tops $f1/annotation/*iw1*vv*xml $f1/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` # refinie the calculation in case the pin is far away from the starting frame. (baseline error) shift_atime_PRM.csh tmp2.PRM $tmpazi set azi1 = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set pin2 = `tail -1 $2 | awk '{print $1,$2}'` set f2 = `tail -1 tmprecord` make_s1a_tops $f2/annotation/*iw1*vv*xml $f2/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` # refinie the calculation in case the pin is far away from the starting frame. shift_atime_PRM.csh tmp2.PRM $tmpazi set azi2 = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set nl = `grep num_lines tmp2.PRM | awk '{print $3}'` if ($azi1 > 0 && $azi2 < $nl && $jj != 0) then awk '{print $1","$2}' $2 > tmpllt set pin0 = `awk NR==1'{print $0}' tmpllt` foreach line2 (`awk '{print $0}' tmpllt`) if ($line2 != $pin0) then echo $pin0 | awk -F"," '{print $1,$2}' > tmp1llt echo $line2 | awk -F"," '{print $1,$2}' >> tmp1llt if ($mode != 1) then create_frame_tops.csh tmprecord $orb tmp1llt 1 set newfile = `ls -t -d *.SAFE | awk NR==1'{print $0}'` set Frame1 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | head -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set Frame2 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | tail -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set dirname = `echo $Frame1"_"$Frame2` echo "Created Frame $Frame1 - $Frame2 ..." echo "" if (! -d $dirname) mkdir $dirname mv $newfile $dirname else echo "" echo "Frames on date $date0 will be re-organized..." echo "" endif set pin0 = `echo $line2` endif end else if ($jj == 0) then echo "" echo "SKIP $date0, as it stopped observation in the middle ..." echo "" else echo "" echo "SKIP $date0, as it does not have enough scenes ..." echo "" endif endif echo $file1 > tmprecord set file0 = `echo $file1` set date0 = `echo $date1` set SAT0 = `echo $SAT1` endif endif end # proces the last set of files echo "" | awk '{printf("%s ","Combing")}' set jj = 1 set t2 = 9999999999 foreach line2 (`awk '{print $0}' tmprecord`) echo $line2 | awk '{printf("%s ",$1)}' set tt = `echo $line2 | awk '{print substr($1,length($1)-54,15)}'` set t1 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` if ($t1 > $t2) set jj = 0 set tt = `echo $line2 | awk '{print substr($1,length($1)-38,15)}'` set t2 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` end echo "" | awk '{printf("%s\n","...")}' # get the orbit file names and download set n1 = `date -v-1d -jf "%Y%m%d" $date0 +%Y%m%d` set n2 = `date -v+1d -jf "%Y%m%d" $date0 +%Y%m%d` set orb = `grep $SAT0 orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT0/$orb) then ln -s $orb_dir/$SAT0/$orb . else wgetasf $url_root"/"$orb endif endif # check the start and the end, make sure the start comes later than the first line of the first file and the end comes before the last line of the last file set pin1 = `head -1 $2 | awk '{print $1,$2}'` set f1 = `head -1 tmprecord` make_s1a_tops $f1/annotation/*iw1*vv*xml $f1/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` shift_atime_PRM.csh tmp2.PRM $tmpazi set azi1 = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set pin2 = `tail -1 $2 | awk '{print $1,$2}'` set f2 = `tail -1 tmprecord` make_s1a_tops $f2/annotation/*iw1*vv*xml $f2/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` shift_atime_PRM.csh tmp2.PRM $tmpazi set azi2 = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set nl = `grep num_lines tmp2.PRM | awk '{print $3}'` # do the assembling if ($azi1 >= 0 && $azi2 < $nl && $jj != 0) then awk '{print $1","$2","$3","$4","$5","$6}' $2 > tmpllt set pin0 = `awk NR==1'{print $0}' tmpllt` foreach line2 (`awk '{print $0}' tmpllt`) if ($line2 != $pin0) then echo $pin0 | awk -F"," '{print $1,$2,$3,$4,$5,$6}' > tmp1llt echo $line2 | awk -F"," '{print $1,$2,$3,$4,$5,$6}' >> tmp1llt if ($mode != 1) then create_frame_tops.csh tmprecord $orb tmp1llt 1 set newfile = `ls -t -d *.SAFE | awk NR==1'{print $0}'` set Frame1 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | head -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set Frame2 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | tail -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set dirname = `echo $Frame1"_"$Frame2` echo "Created Frame $Frame1 - $Frame2 ..." echo "" if (! -d $dirname) mkdir $dirname mv $newfile $dirname else echo "" echo "Frames on date $date0 will be re-organized..." echo "" endif set pin0 = `echo $line2` endif end else if ($jj == 0) then echo "" echo "SKIP $date0, as it stopped observation in the middle ..." echo "" else echo "" echo "SKIP $date0, as it does not have enough scenes ..." echo "" endif endif rm tmp* rm *.EOF GMTSAR_V5.7/.svn/pristine/5f/5f27f98a2b856f6bd3c3c014b0b7284120346347.svn-base000444 015705 000000 00000041747 13505462014 025403 0ustar00sandwellwheel000000 000000 /******************************************************************************** * Creator: Rob Mellors and David T. Sandwell * (San Diego State University, *Scripps Institution of Oceanography) * Date : 10/03/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: 15 August 07 RJM * bug fixes get_orbit_info * conversions from string to values altered; * seemed to break on 64 * bit linux systems unless verbose flag set; not clear * why; perhaps there * is another underlying problem somewhere... * make sure that * tmp string is null-terminated before passing to atoi * could be done * more elegantly I think * 8/11/08 - * added check for SAR mode and added global SAR_mode * define * Q_mean and I_mean for ERSDAC format based on ALOS_format flag * checks for * ERSDAC or AUIG format * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" /* void get_orbit_info(struct ALOS_ORB *, struct SAR_info); void get_attitude_info(struct ALOS_ATT *, int, struct SAR_info); void print_binary_position(struct sarleader_binary *, int, FILE *, FILE *); void read_ALOS_sarleader(FILE *, struct PRM *, struct ALOS_ORB *); void ALOS_ldr_prm(struct SAR_info, struct PRM *); */ void eci2ecr(double[3], double[3], double, double[3], double[3]); double cal2ut1(int, int[3], double); int transform_orbits_ecr2eci(struct ALOS_ORB *); void read_ALOS_sarleader(FILE *ldrfile, struct PRM *prm, struct ALOS_ORB *orb) { char tmp[1000]; char leap_second_flag; int i, nitems, num_orbit_points, num_att_points; struct SAR_info sar; struct sarleader_binary sb; struct ALOS_ATT alos_attitude_info; /* not used at present */ FILE *logfile = NULL; char dummy1[100]; char dummy2[100]; if (verbose) { logfile = fopen("LED.log", "w"); if (logfile == NULL) die("can't open", "LED.log"); fprintf(stderr, " opened LED log file %s \n", "LED.log"); if (verbose) fprintf(stderr, ".... reading sarleader \n"); } /* allocate memory */ sar.fixseg = (struct sarleader_fdr_fixseg *)malloc(sizeof(struct sarleader_fdr_fixseg)); sar.varseg = (struct sarleader_fdr_varseg *)malloc(sizeof(struct sarleader_fdr_varseg)); sar.dss_ALOS = (struct sarleader_dss_ALOS *)malloc(sizeof(struct sarleader_dss_ALOS)); sar.platform_ALOS = (struct platform_ALOS *)malloc(sizeof(struct platform_ALOS)); sar.attitude_info_ALOS = (struct attitude_info_ALOS *)malloc(sizeof(struct attitude_info_ALOS)); /* read the file - write output at each stage to assist in debugging */ /* probably don't need it but useful for keeping track */ nitems = fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); if (verbose) print_binary_position(&sb, nitems, ldrfile, logfile); /* The SARLEADER_FDR_FIXSEG_RCS defines the format statement; SARLEADER_FDR_FIXSEG_RVL is a pointer to the structure. Similarly, SARLEADER_FDR_FIXSEG_WCS defines the format for the output. All are defined in sarleader_ALOS.h. This way all you have to do is change the .h file and not the program each time. In theory. RCS are read format (Read Control String) RVL are pointers to structure (I forget why I used RVL) WCS are write format (Write Control String) */ fscanf(ldrfile, SARLEADER_FDR_FIXSEG_RCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); if (verbose) fprintf(logfile, SARLEADER_FDR_FIXSEG_WCS, SARLEADER_FDR_FIXSEG_RVL(sar.fixseg)); fscanf(ldrfile, SARLEADER_FDR_VARSEG_RCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); if (verbose) fprintf(logfile, SARLEADER_FDR_VARSEG_WCS, SARLEADER_FDR_VARSEG_RVL(sar.varseg)); nitems = fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); if (verbose) print_binary_position(&sb, nitems, ldrfile, logfile); fscanf(ldrfile, SARLEADER_DSS_RCS_ALOS, SARLEADER_DSS_RVL_ALOS(sar.dss_ALOS)); if (verbose) fprintf(logfile, SARLEADER_DSS_WCS_ALOS, SARLEADER_DSS_RVL_ALOS(sar.dss_ALOS)); /* check format ERSDAC or AUIG */ if (strncmp(sar.dss_ALOS->processing_system_id, "SKY", 3) == 0) ALOS_format = 1; if (strncmp(sar.dss_ALOS->processing_system_id, "ALOS", 4) == 0) ALOS_format = 0; if (verbose) fprintf(stderr, " using ALOS_format %d: %3s\n", ALOS_format, sar.dss_ALOS->processing_system_id); SAR_mode = -1; SAR_mode = atoi(&sar.dss_ALOS->sensor_id_and_mode[13]); if (verbose) { if (SAR_mode == 0) fprintf(stderr, "SAR mode |%.32s| (HIGH RESOLUTION)\n", sar.dss_ALOS->sensor_id_and_mode); if (SAR_mode == 1) fprintf(stderr, "SAR mode |%.32s| (WIDE OBSERVATION)\n", sar.dss_ALOS->sensor_id_and_mode); if (SAR_mode == 2) fprintf(stderr, "SAR mode |%.32s| (POLARIMETRY)\n", sar.dss_ALOS->sensor_id_and_mode); } if (SAR_mode == -1) { if (verbose) fprintf(stderr, "uncertain SAR mode; assuming high resolution\n"); SAR_mode = 0; } nitems = fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); if (verbose) print_binary_position(&sb, nitems, ldrfile, logfile); fscanf(ldrfile, PLATFORM_RCS_ALOS, PLATFORM_RVL_ALOS(sar.platform_ALOS)); if (verbose) fprintf(logfile, PLATFORM_WCS_ALOS, PLATFORM_RVL_ALOS(sar.platform_ALOS)); /* read in orbit positions and velocities into the structure sar.position_ALOS */ /* the number of points should be 28 */ num_orbit_points = atoi(strncpy(dummy1, sar.platform_ALOS->num_data_points, sizeof(sar.platform_ALOS->num_data_points))); sar.position_ALOS = (struct position_vector_ALOS *)malloc(num_orbit_points * sizeof(struct position_vector_ALOS)); if ((verbose) && (num_orbit_points != 28)) fprintf(stderr, "Warning: number of orbit points %d != 28\n", num_orbit_points); if (verbose) fprintf(stderr, ".... reading sarleader %d\n", num_orbit_points); for (i = 0; i < num_orbit_points; i++) { fscanf(ldrfile, POSITION_VECTOR_RCS_ALOS, POSITION_VECTOR_RVL_ALOS(&sar.position_ALOS[i])); if (verbose) fprintf(logfile, POSITION_VECTOR_WCS_ALOS, POSITION_VECTOR_RVL_ALOS(&sar.position_ALOS[i])); } /* mostly blanks with a leap second in between; ought to put in structure */ fscanf(ldrfile, "%18c%1c%579c", &tmp[0], &leap_second_flag, &tmp[0]); nitems = fread(&sb, sizeof(struct sarleader_binary), 1, ldrfile); if (verbose) print_binary_position(&sb, nitems, ldrfile, logfile); /* read in attitude data - should be 22 points of pitch, yaw, and roll */ fscanf(ldrfile, ATTITUDE_INFO_RCS_ALOS, ATTITUDE_INFO_RVL_ALOS(sar.attitude_info_ALOS)); if (verbose) fprintf(logfile, ATTITUDE_INFO_WCS_ALOS, ATTITUDE_INFO_RVL_ALOS(sar.attitude_info_ALOS)); num_att_points = atoi(strncpy(dummy2, sar.attitude_info_ALOS->num_att_data_points, sizeof(sar.attitude_info_ALOS->num_att_data_points))); if (verbose) if (num_att_points != 22) fprintf(stderr, "Warning: number of attitude points %d != 22\n", num_att_points); if (verbose) fprintf(stderr, ".... reading sarleader %d\n", num_att_points); sar.attitude_ALOS = (struct attitude_data_ALOS *)malloc(num_att_points * sizeof(struct attitude_data_ALOS)); for (i = 0; i < num_att_points; i++) { fscanf(ldrfile, ATTITUDE_DATA_RCS_ALOS, ATTITUDE_DATA_RVL_ALOS(&sar.attitude_ALOS[i])); if (verbose) fprintf(logfile, ATTITUDE_DATA_WCS_ALOS, ATTITUDE_DATA_RVL_ALOS(&sar.attitude_ALOS[i])); } /* now create the prm file */ ALOS_ldr_prm(sar, prm); /* get orbit and attitude information */ /* read from sar info and put into alos_orbit_info and alos_attitude_info */ /* debug by Xiaopeng Tong fprintf(stderr,"debugging the readleader file\n"); fprintf(stderr,"tmp = %s",dummy1); fprintf(stderr,"%d\n",num_orbit_points); fprintf(stderr,"num_att_data_points = %s\n",sar.attitude_info_ALOS->num_att_data_points); fprintf(stderr,"tmp = %s\n",dummy2); fprintf(stderr,"%d,%d\n",num_att_points,sizeof(sar.attitude_info_ALOS->num_att_data_points)); fprintf(stderr,"num_data_points = %s\n",sar.platform_ALOS->num_data_points); fprintf(stderr,"sizeof = %d\n",sizeof(sar.platform_ALOS->num_data_points)); fprintf(stderr,"%d\n",num_orbit_points); */ orb->nd = num_orbit_points; get_orbit_info(orb, sar); /* correct ERSDAC from earth-centered-rotating to fixed */ if (ALOS_format == 1) transform_orbits_ecr2eci(orb); get_attitude_info(&alos_attitude_info, num_att_points, sar); if (verbose) fclose(logfile); } /*---------------------------------------------------------------*/ void print_binary_position(struct sarleader_binary *sb, int nitems, FILE *ldrfile, FILE *logfile) { fprintf(logfile, SARLEADER_FDR_BINARY_WCS, SARLEADER_FDR_BINARY_RVL(sb)); fprintf(logfile, " read %d items (%ld bytes) at position %ld\n", nitems, sizeof(struct sarleader_binary), ftell(ldrfile)); } /*---------------------------------------------------------------*/ /* write a PRM file */ /* adapted for ALOS data */ /* needs SC_start_time and SC_end_time (from read_data) */ /* needs sample_rate (from read_sarleader) */ #define FACTOR 1000000 void ALOS_ldr_prm(struct SAR_info sar, struct PRM *prm) { double c_angle; /* nominal PRF and prf in PRM differ at 4 decimal places */ prm->lambda = atof(sar.dss_ALOS->radar_wavelength); /* convert into seconds from MHz */ prm->pulsedur = (atof(sar.dss_ALOS->range_pulse_length) / FACTOR); if (ALOS_format == 0) prm->fs = FACTOR * (atof(sar.dss_ALOS->sampling_rate)); /* chirp linear term */ /* need -1 term */ prm->chirp_slope = -1 * atof(sar.dss_ALOS->range_pulse_amplitude_lin); /* mean value of inphase and quadrature */ prm->xmi = atof(sar.dss_ALOS->dc_bias_i); prm->xmq = atof(sar.dss_ALOS->dc_bias_q); /* need to define for ERSDAC format prm->fs (rng_sample_rate differs by 1000 */ /* xmi, xmq set to 15.5 */ if (ALOS_format == 1) { prm->fs = atof(sar.dss_ALOS->sampling_rate); prm->xmi = 15.5; prm->xmq = 15.5; } /* ellipsoid info */ prm->ra = 1000. * atof(sar.dss_ALOS->ellipsoid_semimajor_axis); prm->rc = 1000. * atof(sar.dss_ALOS->ellipsoid_semiminor_axis); /* orbit direction */ /* A Ascend or D Descend */ strncpy(prm->orbdir, sar.dss_ALOS->time_direction_along_line, 1); /* look direction R or L */ c_angle = atof(sar.dss_ALOS->clock_angle); strcpy(prm->lookdir, "R"); if (c_angle < 0.) strcpy(prm->lookdir, "L"); /* date yymmdd */ strncpy(prm->date, &sar.dss_ALOS->input_scene_center_time[2], 6); prm->date[7] = '\0'; /* set doppler centroid for focussed L1.1 image unles it has already been set */ if (strncmp(sar.dss_ALOS->product_type_id, "BASIC", 5) == 0 && prm->fd1 == 0.0) { prm->fd1 = atof(sar.dss_ALOS->spare11); prm->fdd1 = 0.001 * atof(sar.dss_ALOS->spare12); } /* write it all out */ if (verbose) { fprintf(stdout, "radar_wavelength = %lg\n", prm->lambda); fprintf(stdout, "chirp_slope = %lg\n", prm->chirp_slope); fprintf(stdout, "rng_samp_rate = %lg\n", prm->fs); fprintf(stdout, "I_mean = %lf\n", prm->xmi); fprintf(stdout, "Q_mean = %lf\n", prm->xmq); fprintf(stdout, "orbdir = %s\n", prm->orbdir); fprintf(stdout, "lookdir = %s\n", prm->lookdir); fprintf(stdout, "date = %s\n", prm->date); fprintf(stdout, "fd1 = %lf\n", prm->fd1); fprintf(stdout, "fdd1 = %lf\n", prm->fdd1); } } /*---------------------------------------------------------------*/ void get_attitude_info(struct ALOS_ATT *alos_attitude_info, int num_att_points, struct SAR_info sar) { int i; char tmp[256]; /* sprintf(tmp,"%.4s", sar.attitude_info_ALOS->num_att_data_points); n = strtol(tmp, NULL, 10); */ if (verbose) fprintf(stderr, " number of attitude points %ld \n", strtol(sar.attitude_info_ALOS->num_att_data_points, NULL, 10)); alos_attitude_info->na = num_att_points; for (i = 0; i < num_att_points; i++) { alos_attitude_info->id[i] = strtol(strncpy(tmp, sar.attitude_ALOS[i].day_of_year, 4), NULL, 10); alos_attitude_info->msec[i] = strtol(sar.attitude_ALOS[i].millisecond_day, NULL, 10); if (verbose) fprintf(stderr, " doy %d ms %d \n", alos_attitude_info->id[i], alos_attitude_info->msec[i]); alos_attitude_info->ap[i] = strtod(sar.attitude_ALOS[i].pitch, NULL); alos_attitude_info->ar[i] = strtod(sar.attitude_ALOS[i].roll, NULL); alos_attitude_info->ay[i] = strtod(sar.attitude_ALOS[i].yaw, NULL); if (verbose) fprintf(stderr, "pitch %12.6f roll %12.6f yaw %12.6f\n", alos_attitude_info->ap[i], alos_attitude_info->ar[i], alos_attitude_info->ay[i]); alos_attitude_info->dp[i] = strtod(sar.attitude_ALOS[i].pitch_rate, NULL); alos_attitude_info->dr[i] = strtod(sar.attitude_ALOS[i].roll_rate, NULL); alos_attitude_info->dy[i] = strtod(sar.attitude_ALOS[i].yaw_rate, NULL); if (verbose) fprintf(stderr, "pitch %12.6f roll %12.6f yaw %12.6f\n", alos_attitude_info->dp[i], alos_attitude_info->dr[i], alos_attitude_info->dy[i]); } } /*---------------------------------------------------------------*/ void get_orbit_info(struct ALOS_ORB *orb, struct SAR_info sar) { int i; char tmp[256]; /* transfer to SIO orbit structure */ /* use strncpy to make sure we only read the required number of characters */ /* strncpy returns destination string as well as copies to tmp */ /* 16 August 2007 RJM */ /* this broke; make sure that tmp is null-terminated before handing off to * atoi/atof */ /* changed atol to atoi */ /* probably there is a better way to do this ... */ strncpy(tmp, sar.platform_ALOS->year_of_data_points, sizeof(sar.platform_ALOS->year_of_data_points)); tmp[sizeof(sar.platform_ALOS->year_of_data_points)] = '\0'; orb->iy = atoi(tmp); strncpy(tmp, sar.platform_ALOS->day_of_data_points_in_year, sizeof(sar.platform_ALOS->day_of_data_points_in_year)); tmp[sizeof(sar.platform_ALOS->day_of_data_points_in_year)] = '\0'; orb->id = atoi(tmp); strncpy(tmp, sar.platform_ALOS->sec_of_day_of_data, sizeof(sar.platform_ALOS->sec_of_day_of_data)); tmp[sizeof(sar.platform_ALOS->sec_of_day_of_data)] = '\0'; orb->sec = (double)atof(tmp); strncpy(tmp, sar.platform_ALOS->data_points_time_gap, sizeof(sar.platform_ALOS->data_points_time_gap)); tmp[sizeof(sar.platform_ALOS->data_points_time_gap)] = '\0'; orb->dsec = (double)atof(tmp); /* added 7/27/10 RJM */ orb->pt0 = (24.0 * 60.0 * 60.0) * orb->id + orb->sec; if (verbose) { fprintf(stderr, " nd %d \n", orb->nd); fprintf(stderr, " iy %d \n", orb->iy); fprintf(stderr, " id %d \n", orb->id); fprintf(stderr, " sec %lf \n", orb->sec); fprintf(stderr, " dsec %lf \n", orb->dsec); fprintf(stderr, " pt0 %lf \n", orb->pt0); } orb->points = (struct ORB_XYZ *)malloc(orb->nd * sizeof(struct ORB_XYZ)); /* orbit stuff */ for (i = 0; i < orb->nd; i++) { if (verbose) fprintf(stderr, "orbit point: %d\n", i); strncpy(tmp, sar.position_ALOS[i].pos_x, sizeof(sar.position_ALOS[i].pos_x)); tmp[sizeof(sar.position_ALOS->pos_x)] = '\0'; orb->points[i].px = atof(tmp); strncpy(tmp, sar.position_ALOS[i].pos_y, sizeof(sar.position_ALOS[i].pos_y)); tmp[sizeof(sar.position_ALOS->pos_y)] = '\0'; orb->points[i].py = atof(tmp); strncpy(tmp, sar.position_ALOS[i].pos_z, sizeof(sar.position_ALOS[i].pos_z)); tmp[sizeof(sar.position_ALOS->pos_z)] = '\0'; orb->points[i].pz = atof(tmp); if (verbose) fprintf(stderr, "%g %g %g\n", orb->points[i].px, orb->points[i].py, orb->points[i].pz); strncpy(tmp, sar.position_ALOS[i].vel_x, sizeof(sar.position_ALOS[i].vel_x)); tmp[sizeof(sar.position_ALOS->vel_x)] = '\0'; orb->points[i].vx = atof(tmp); strncpy(tmp, sar.position_ALOS[i].vel_y, sizeof(sar.position_ALOS[i].vel_y)); tmp[sizeof(sar.position_ALOS->vel_y)] = '\0'; orb->points[i].vy = atof(tmp); strncpy(tmp, sar.position_ALOS[i].vel_z, sizeof(sar.position_ALOS[i].vel_z)); tmp[sizeof(sar.position_ALOS->vel_z)] = '\0'; orb->points[i].vz = atof(tmp); if (verbose) fprintf(stderr, "%g %g %g\n", orb->points[i].vx, orb->points[i].vy, orb->points[i].vz); } } /*---------------------------------------------------------------*/ // convert from earth-centered rotating to earth-centered // code by J B but moved by RJM int transform_orbits_ecr2eci(struct ALOS_ORB *orb) { int j; int cal[3], mode; double ecr_pos[3]; double ecr_vel[3]; double eci_pos[3]; double eci_vel[3]; double ut1sec, daysec; for (j = 0; j < orb->nd; j++) { orb->points[j].px = orb->points[j].px; orb->points[j].py = orb->points[j].py; orb->points[j].pz = orb->points[j].pz; orb->points[j].vx = orb->points[j].vx / 1000.; orb->points[j].vy = orb->points[j].vy / 1000.; orb->points[j].vz = orb->points[j].vz / 1000.; eci_pos[0] = orb->points[j].px; eci_pos[1] = orb->points[j].py; eci_pos[2] = orb->points[j].pz; eci_vel[0] = orb->points[j].vx; eci_vel[1] = orb->points[j].vy; eci_vel[2] = orb->points[j].vz; mode = 2; cal[0] = orb->iy; cal[1] = orb->id; cal[2] = -99999; daysec = orb->sec + j * orb->dsec; ut1sec = cal2ut1(mode, cal, daysec); eci2ecr(eci_pos, eci_vel, ut1sec, ecr_pos, ecr_vel); orb->points[j].px = ecr_pos[0]; orb->points[j].py = ecr_pos[1]; orb->points[j].pz = ecr_pos[2]; orb->points[j].vx = ecr_vel[0]; orb->points[j].vy = ecr_vel[1]; orb->points[j].vz = ecr_vel[2]; } return (EXIT_SUCCESS); } /*---------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/5a/5ad7580d615cc1721fe73821de4dccebd0981c9c.svn-base000444 015705 000000 00000001576 13505462014 026037 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl use strict; if ($#ARGV < 0 ) { print "\nusage: check_PRC.pl PRC_file\n\n"; print "output: First and last few records\n"; exit; } my $prc_file = $ARGV[0]; my @prc_data; open(DAT,$prc_file) || die("Could not open file $prc_file!"); my @prc_data = ; close(DAT); my @tmp7; my $tmp7size; my @tmp8; LINE:foreach(@prc_data){ if($_ =~ /STTERR/){ @tmp7 = split /STTERR/,$_; $tmp7size = @tmp7 -2; @tmp8 = @tmp7[1 .. $tmp7size]; } } my @tmp9; my $count = 0; my $rsize = @tmp8; LINE:foreach(@tmp8){ if($_ =~ /^.{8}(.{6})(.{11})(.{12})(.{12})(.{12})(.{11})(.{11})(.{11})/){ # ask guoguo $count = $count + 1; @tmp9 = ($1,$2,$3,$4,$5,$6,$7,$8); $tmp9[0] =~ s/^\s*//; $tmp9[0] =~ s/\s*$//; if (($count < 5) || ($count > $rsize -5)) { print "$count: $tmp9[0] $tmp9[1] $tmp9[2] $tmp9[3] $tmp9[4]\n"; } } } GMTSAR_V5.7/.svn/pristine/5a/5af59ca2d309bc72075296e2d1441a749e65703f.svn-base000444 015705 000000 00000005504 13505462014 025455 0ustar00sandwellwheel000000 000000 #define PLATFORM_WCS \ "*********** PLATFORM POSITION VECTOR **********\n" \ "reserved1 ==> %.128s\n" \ "num_data_points ==> %.4s\n" \ "year_of_data_points ==> %.4s\n" \ "month_of_data_points ==> %.4s\n" \ "day_of_data_points ==> %.4s\n" \ "day_of_data_points_in_year ==> %.4s\n" \ "sec_of_day_of_data ==> %.22s\n" \ "data_points_time_gap ==> %.22s\n" \ "ref_coord_sys ==> %.64s\n" \ "greenwhich_mean_hour_angle ==> %.22s\n" \ "a_track_pos_err ==> %.16s\n" \ "c_track_pos_err ==> %.16s\n" \ "radial_pos_err ==> %.16s\n" \ "reserved2 ==> %.48s\n\n" #define POSITION_VECTOR_WCS \ "*********** PLATFORM VECTOR **********\n" \ "pos_x ==> %.22s\n" \ "pos_y ==> %.22s\n" \ "pos_z ==> %.22s\n" \ "vel_x ==> %.22s\n" \ "vel_y ==> %.22s\n" \ "vel_z ==> %.22s\n\n" GMTSAR_V5.7/.svn/pristine/34/3483ae295a82f042961a34f9ba92d03ee4b7fd22.svn-base000444 015705 000000 00000002174 13505462014 025531 0ustar00sandwellwheel000000 000000 ; $Revision: 1.1.1.1 $ $Date: 2003/07/08 10:41:38 $ ; Declares the WIN32 epr_api.dll parameters. LIBRARY epr_api.dll DESCRIPTION 'ENVISAT PRODUCT READER C-API' EXPORTS epr_init_api epr_close_api epr_open_product epr_close_product epr_get_scene_width epr_get_scene_height epr_get_num_datasets epr_get_dataset_id_at epr_get_dataset_id epr_get_dataset_name epr_get_mph epr_get_sph epr_get_dsd epr_get_num_dsds epr_get_dsd_at epr_get_num_records epr_create_record epr_read_record epr_free_record epr_get_field epr_get_num_fields epr_get_field_at epr_get_field_unit epr_get_field_description epr_get_field_num_elems epr_get_field_name epr_get_field_type epr_create_compatible_raster epr_create_bitmask_raster epr_create_raster epr_free_raster epr_read_bitmask_raster epr_read_band_raster epr_get_raster_width epr_get_raster_height epr_get_num_bands epr_get_band_id_at epr_get_band_id epr_get_band_name epr_get_pixel_as_float epr_log_message epr_get_last_err_code epr_get_last_err_message epr_print_record epr_print_field epr_print_element epr_dump_record epr_dump_field epr_dump_element GMTSAR_V5.7/.svn/pristine/34/34820176d9b6cafb75d4ece237c43b1dec09325d.svn-base000444 015705 000000 00000000537 13505462013 025666 0ustar00sandwellwheel000000 000000 #!/bin/csh -f if ($#argv != 2) then echo "" echo "Usage: get_baseline_table.csh prmlist master_prm" echo "" echo " product: baseline_table.dat" echo "" exit 1 endif set list = $1 set master = $2 if (-f baseline_table.dat) rm baseline_table.dat foreach prm (`cat $list`) baseline_table.csh $master $prm >> baseline_table.dat end GMTSAR_V5.7/.svn/pristine/60/60759c6de63a00f20f889766c11129e9fd5ef7db.svn-base000444 015705 000000 00000021044 13505462014 025554 0ustar00sandwellwheel000000 000000 /* BK: simple program to get header info for ENVISAT * 13-Jun-2003 * simply dumps all header info. a unix script will be used to * convert this to doris input $Id: envisat_dump_header.c,v 1.4 2004/05/13 18:13:39 kampes Exp $ */ #include "epr_api-2.3/src/epr_api.h" #include #include #include #include #include #include #include #if defined(WIN32) && defined(_DEBUG) #include #endif /* if defined(WIN32) && defined(_DEBUG) */ int main(int argc, char **argv) { EPR_SProductId *product_id; EPR_SDatasetId *MDS1_SQ_ADS; EPR_SDatasetId *MAIN_PROC_PM_ID; EPR_SDatasetId *DOP_CENTROID_COEFFS_ADS; EPR_SDatasetId *CHIRP_PARAMS_ADS; EPR_SDatasetId *GEOLOCATION_GRID_ADS; EPR_SRecord *mph; EPR_SRecord *sph; EPR_SRecord *rec0; EPR_SRecord *rec1; EPR_SRecord *rec2; EPR_SRecord *rec3; EPR_SRecord *rec4; // EPR_SField* azitime0_field; EPR_EErrCode err_code = e_err_none; int status; const char *product_file_path; /* const char* datasetname; */ /* --- Handle input ----------------------------------------- */ printf("+-----------------------------------------------+\n"); printf("| This is envisat_dump_header by Bert Kampes |\n"); printf("+-----------------------------------------------+\n"); if (argc <= 1) { printf("Usage: envisat_dump_header envisat-product\n"); printf(" where envisat-product is the input filename\n"); printf("Example:\n"); printf(" envisat_dump_header " "ASA_IMS_1PNDPA20021025_175208_000000162010_00356_03416_0005.N1\n\n"); exit(1); } product_file_path = argv[1]; printf("\nInitializing api.\n"); printf("-------------------------------------------------\n"); /* Initialize the API. Set log-level to DEBUG and use default log-output * (stdout) */ /* How to set error logging without exiting? */ /*status = epr_init_api(e_log_debug, epr_log_message, epr_log_message);*/ status = epr_init_api(e_log_debug, epr_log_message, NULL); if (status != 0) { printf("envisat_dump_header: fatal error in epr_init_api\n"); printf("exiting.\n"); exit(1); }; /* Open the product; an argument is a path to product data file */ /* PRODUCT dataset record field element */ printf("\nOpening product.\n"); printf("-------------------------------------------------\n"); product_id = epr_open_product(product_file_path); err_code = epr_get_last_err_code(); if (err_code != e_err_none) { printf("envisat_dump_header: fatal error in epr_open_product\n"); printf("exiting.\n"); exit(1); } /* Read fields that I want for Doris */ /* product DATASET record field element */ /* --- MAIN PRODUCT HEADER ---------------------------------------- */ printf("\nTrying to read record: MPH\n"); printf("-------------------------------------------------\n"); mph = epr_get_mph(product_id); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(mph, stdout); } else { printf("envisat_dump_header: likely fatal error in epr_get_mph\n"); printf("continuing.\n"); epr_clear_err(); } /* --- SECOND PRODUCT HEADER -------------------------------------- */ printf("\nTrying to read record: SPH\n"); printf("-------------------------------------------------\n"); sph = epr_get_sph(product_id); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(sph, stdout); } else { printf("envisat_dump_header: likely fatal error in epr_get_sph\n"); epr_clear_err(); } /* dsd = epr_get_dsd(product_id); */ /* epr_print_record(dsd, stdout);*/ /* --- MDS1_SQ_ADS ------------------------------------------------ */ printf("\nTrying to read record: MDS1_SQ_ADS\n"); printf("-------------------------------------------------\n"); MDS1_SQ_ADS = epr_get_dataset_id(product_id, "MDS1_SQ_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec0 = epr_read_record(MDS1_SQ_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(rec0, stdout); } else { printf("envisat_dump_header: non-fatal error in epr_read_record " "MDS1_SQ_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("envisat_dump_header: error in epr_get_dataset_id MDS1_SQ_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- MAIN_PROC_PM_ID -------------------------------------------- */ printf("\nTrying to read record: MAIN_PROCESSING_PARAMS_ADS\n"); printf("-------------------------------------------------\n"); MAIN_PROC_PM_ID = epr_get_dataset_id(product_id, "MAIN_PROCESSING_PARAMS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec1 = epr_read_record(MAIN_PROC_PM_ID, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(rec1, stdout); } else { printf("envisat_dump_header: error in epr_read_record " "MAIN_PROCESSING_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("envisat_dump_header: error in epr_get_dataset_id " "MAIN_PROCESSING_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- DOP_CENTROID_COEFFS_ADS ------------------------------------ */ printf("\nTrying to read record: DOP_CENTROID_COEFFS_ADS\n"); printf("-------------------------------------------------\n"); DOP_CENTROID_COEFFS_ADS = epr_get_dataset_id(product_id, "DOP_CENTROID_COEFFS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec2 = epr_read_record(DOP_CENTROID_COEFFS_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(rec2, stdout); } else { printf("envisat_dump_header: error in epr_read_record " "DOP_CENTROID_COEFFS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("envisat_dump_header: error in epr_get_dataset_id " "DOP_CENTROID_COEFFS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- CHIRP_PARAMS_ADS ------------------------------------------- */ printf("\nTrying to read record: CHIRP_PARAMS_ADS\n"); printf("-------------------------------------------------\n"); /* it seems ESRIN does not include this. For now do not read it at all Problems with BAM data, report Z.Perksi #%// Bert Kampes, 12-May-2004 */ CHIRP_PARAMS_ADS = epr_get_dataset_id(product_id, "CHIRP_PARAMS_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec3 = epr_read_record(CHIRP_PARAMS_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(rec3, stdout); } else { printf("envisat_dump_header: error in epr_read_record CHIRP_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("envisat_dump_header: error in epr_get_dataset_id CHIRP_PARAMS_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* --- GEOLOCATION_GRID_ADS --------------------------------------- */ printf("\nTrying to read record: GEOLOCATION_GRID_ADS\n"); printf("-------------------------------------------------\n"); GEOLOCATION_GRID_ADS = epr_get_dataset_id(product_id, "GEOLOCATION_GRID_ADS"); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { rec4 = epr_read_record(GEOLOCATION_GRID_ADS, 0, NULL); err_code = epr_get_last_err_code(); if (err_code == e_err_none) { epr_print_record(rec4, stdout); } else { printf("envisat_dump_header: error in epr_read_record " "GEOLOCATION_GRID_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } } else { printf("envisat_dump_header: error in epr_get_dataset_id " "GEOLOCATION_GRID_ADS\n"); printf("could not read this record. may not be a problem.\n"); epr_clear_err(); } /* product dataset record FIELD element */ /* azitime0_field = epr_get_field(rec1, "first_zero_doppler_time"); epr_print_field(azitime0_field, stdout); */ /* Close product_id and release rest of the allocated memory */ printf("\n"); epr_close_product(product_id); /* Closes product reader API, release all allocated resources */ epr_close_api(); printf("\n+-----------------------------------------------+\n"); printf("| Thank you for using envisat_dump_header |\n"); printf("+-----------------------------------------------+\n\n"); return 0; } GMTSAR_V5.7/.svn/pristine/60/60126f84fd3ff270d6067b5ef0224a2283cd91bc.svn-base000444 015705 000000 00000001662 13505462013 025522 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 10 2010 # unset noclobber # # script to convert a grd file to a kml file for Google Earth # if ($#argv < 2 || $#argv > 3) then echo " " echo "Usage: grd2kml.csh grd_file_stem cptfile [-R///] " echo " " echo "Example: grd2kml.csh phase phase.cpt " echo " " exit 1 endif # if ( -f ~/.quiet ) then set V = "" set VS = "" else set V = "-V" set VS = "-S -V" endif # set DX = `gmt grdinfo $1.grd -C | cut -f8` set DPI = `gmt gmtmath -Q $DX INV RINT = ` #echo $DPI gmt set COLOR_MODEL = hsv gmt set PS_MEDIA = tabloid # if ($#argv == 3) then gmt grdimage $1.grd -C$2 $3 -Jx1id -P -Y2i -X2i -Q $V > $1.ps else if ($#argv == 2) then gmt grdimage $1.grd -C$2 -Jx1id -P -Y2i -X2i -Q $V > $1.ps endif # # now make the kml and png # echo "Make $1.kml and $1.png" gmt psconvert $1.ps -W+k+t"$1" -E$DPI -TG -P $VS -F$1.png rm -f $1.ps grad.grd ps2raster* psconvert* # GMTSAR_V5.7/.svn/pristine/60/600e660ebc0a47e5a36f3146cb080ae9caf84c2c.svn-base000444 015705 000000 00000001667 13505462013 025734 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # # D. Sandwell FEB 18 2015 # unset noclobber # # script to convert a grd file to a geotiff file # if ($#argv < 2 || $#argv > 3) then echo " " echo "Usage: grd2geotiff.csh grd_file_stem cptfile [-R///] " echo " " echo "Example: grd2geotiff.csh phase phase.cpt " echo " " exit 1 endif # # if ( -f ~/.quiet ) then set V = "" set VS = "" else set V = "-V" set VS = "-S -V" endif set DX = `gmt grdinfo $1.grd -C | cut -f8` set DPI = `gmt math -Q $DX INV RINT = ` echo $DPI gmt set COLOR_MODEL = hsv gmt set PAPER_MEDIA = tabloid # gmt grdgradient $1.grd -Ggrad.grd $V -Nt0.7 -A60 if ($#argv == 3) then gmt grdimage $1.grd -Igrad.grd -C$2 $3 -Jx1id -P -Y2i -X2i -Q $V > $1.ps else if ($#argv == 2) then gmt grdimage $1.grd -Igrad.grd -C$2 -Jx1id -P -Y2i -X2i -Q $V > $1.ps endif # # now make the geotiff # echo "Make $1.tiff" gmt psconvert $1.ps -W+g+t"$1" -E$DPI -P $VS rm -f $1.ps grad.grd # GMTSAR_V5.7/.svn/pristine/0e/0e18888d972a24565c9d3eec2a8735c205fe3a87.svn-base000444 015705 000000 00000012151 13505462013 025547 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Mar 2 2010 # modified by D. Sandwell MAR 11 2010 # # preprocess all the data based on data.in table file and generate: # 1. SLC files # 2. PRM files # 3. time-baseline plot for user to create stacking pairs # format in data.in table file: # line 1: master_name # line 2 and below: slave_name alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv != 2) then echo "" echo "Usage: pre_proc_batch_ALOS_SLC.csh data.in batch.config" echo " preprocess a set of images using a common rear_range and radius" echo "" echo " format of data.in is:" echo " line 1: master_name " echo " line 2 and below: slave_name" echo "" echo " example of data.in for ALOS is:" echo " IMG-HH-ALPSRP096010650-H1.0__A" echo " IMG-HH-ALPSRP089300650-H1.0__A" echo " IMG-HH-ALPSRP236920650-H1.0__A" echo "" echo "Example: pre_proc_batch_ALOS_SLC.csh data.in batch.config" echo "" exit 1 endif # # read parameters from configuration file # set num_patches = `grep num_patches $2 | awk '{print $3}'` set earth_radius = `grep earth_radius $2 | awk '{print $3}'` set SLC_factor = `grep SLC_factor $2 | awk '{print $3}'` set commandline = "" if (!($earth_radius == "")) then set commandline = "$commandline -radius $earth_radius" endif if (!($num_patches == "")) then set commandline = "$commandline -npatch $num_patches" endif if (!($SLC_factor == "")) then set commandline = "$commandline -SLC_factor $SLC_factor" endif echo $commandline # # open and read data.in table # echo "" echo "START PREPROCESS A STACK OF IMAGES" echo "" echo "preprocess master image" set line1 = `awk 'NR==1 {print $0}' $1` set master = `echo $line1[1] | awk '{ print substr($1,8,length($1)-7)}'` # # unpack the master if necessary # if(! -f IMG-HH-$master.SLC || ! -f IMG-HH-$master.PRM ) then echo "ALOS_pre_process_SLC IMG-HH-$master LED-$master -ALOS1 $commandline" ALOS_pre_process_SLC IMG-HH-$master LED-$master -ALOS1 $commandline endif set RAD = `grep earth_radius IMG-HH-$master.PRM | awk '{print $3}'` set SLC_factor = `grep SLC_factor IMG-HH-$master.PRM | awk '{print $3}'` set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set npatch = `grep num_patch IMG-HH-$master.PRM | awk '{print $3}'` baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM >! baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$master.PRM GMT >! table.gmt # # loop and unpack the slave image using the same earth radius and near range as the master image # foreach line2 (`awk 'NR>1 {print $0}' $1`) echo "pre_proc_batch.csh" echo "preprocess slave images" set slave = ` echo $line2 | awk '{ print substr($1,8,length($1)-7)}'` if(! -f IMG-HH-$slave.SLC || ! -f IMG-HH-$slave.PRM ) then echo "ALOS_pre_process_SLC IMG-HH-$slave LED-$slave -ALOS1 -radius $RAD " ALOS_pre_process_SLC IMG-HH-$slave LED-$slave -ALOS1 -radius $RAD endif # # check the range sampling rate of the slave images and do conversion if necessary # set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave.PRM GMT >> table.gmt else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-HH-$slave.PRM IMG-HH-$slave"_"FBS.PRM # baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM >> baseline_table.dat baseline_table.csh IMG-HH-$master.PRM IMG-HH-$slave"_"FBS.PRM GMT >> table.gmt echo "Overwriting the old slave image" mv IMG-HH-$slave"_"FBS.PRM IMG-HH-$slave.PRM update_PRM IMG-HH-$slave.PRM input_file IMG-HH-$slave.SLC mv IMG-HH-$slave"_"FBS.SLC IMG-HH-$slave.SLC else if ($t == 0.5) then echo "Use FBS mode image as master" exit 1 else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif # end of the loop over slave images end # # make baseline plots # awk '{print 2006.5+($1-181)/365.25,$2,$7}' < table.gmt > text # awk '{print 2006.5+($1-181)/365.25,$2,9,$4,$5,$6,$7}' < table.gmt > text set region = `gmt gmtinfo text -C | awk '{print $1-0.5, $2+0.5, $3-500, $4+500}'` # set region = `minmax text -C | awk '{print $1-0.5, $2+0.5, -1200, 1200}'` gmt pstext text -JX8.8i/6.8i -R$region[1]/$region[2]/$region[3]/$region[4] -D0.2/0.2 -X1.5i -Y1i -K -N -F+f8,Helvetica+j5 > stacktable_all.ps awk '{print $1,$2}' < text > text2 gmt psxy text2 -Sp0.2c -G0 -R -JX -Ba1:"year":/a200g00f100:"baseline (m)":WSen -O >> stacktable_all.ps echo "" echo "END PREPROCESS A STACK OF IMAGES" echo "" # # clean up the mess # rm text text2 GMTSAR_V5.7/.svn/pristine/0e/0eacfb12d598dd1555b7c671bf5431f490a460f6.svn-base000444 015705 000000 00000025034 13505462013 025665 0ustar00sandwellwheel000000 000000 # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_lib_hdf5.html # =========================================================================== # # SYNOPSIS # # AX_LIB_HDF5([serial/parallel]) # # DESCRIPTION # # This macro provides tests of the availability of HDF5 library. # # The optional macro argument should be either 'serial' or 'parallel'. The # former only looks for serial HDF5 installations via h5cc. The latter # only looks for parallel HDF5 installations via h5pcc. If the optional # argument is omitted, serial installations will be preferred over # parallel ones. # # The macro adds a --with-hdf5 option accepting one of three values: # # no - do not check for the HDF5 library. # yes - do check for HDF5 library in standard locations. # path - complete path to the HDF5 helper script h5cc or h5pcc. # # If HDF5 is successfully found, this macro calls # # AC_SUBST(HDF5_VERSION) # AC_SUBST(HDF5_CC) # AC_SUBST(HDF5_CFLAGS) # AC_SUBST(HDF5_CPPFLAGS) # AC_SUBST(HDF5_LDFLAGS) # AC_SUBST(HDF5_LIBS) # AC_SUBST(HDF5_FC) # AC_SUBST(HDF5_FFLAGS) # AC_SUBST(HDF5_FLIBS) # AC_DEFINE(HAVE_HDF5) # # and sets with_hdf5="yes". Additionally, the macro sets # with_hdf5_fortran="yes" if a matching Fortran wrapper script is found. # Note that Autconf's Fortran support is not used to perform this check. # H5CC and H5FC will contain the appropriate serial or parallel HDF5 # wrapper script locations. # # If HDF5 is disabled or not found, this macros sets with_hdf5="no" and # with_hdf5_fortran="no". # # Your configuration script can test $with_hdf to take any further # actions. HDF5_{C,CPP,LD}FLAGS may be used when building with C or C++. # HDF5_F{FLAGS,LIBS} should be used when building Fortran applications. # # To use the macro, one would code one of the following in "configure.ac" # before AC_OUTPUT: # # 1) dnl Check for HDF5 support # AX_LIB_HDF5() # # 2) dnl Check for serial HDF5 support # AX_LIB_HDF5([serial]) # # 3) dnl Check for parallel HDF5 support # AX_LIB_HDF5([parallel]) # # One could test $with_hdf5 for the outcome or display it as follows # # echo "HDF5 support: $with_hdf5" # # You could also for example, override the default CC in "configure.ac" to # enforce compilation with the compiler that HDF5 uses: # # AX_LIB_HDF5([parallel]) # if test "$with_hdf5" = "yes"; then # CC="$HDF5_CC" # else # AC_MSG_ERROR([Unable to find HDF5, we need parallel HDF5.]) # fi # # LICENSE # # Copyright (c) 2009 Timothy Brown # Copyright (c) 2010 Rhys Ulerich # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 11 AC_DEFUN([AX_LIB_HDF5], [ AC_REQUIRE([AC_PROG_SED]) AC_REQUIRE([AC_PROG_AWK]) AC_REQUIRE([AC_PROG_GREP]) dnl Check first argument is one of the recognized values. dnl Fail eagerly if is incorrect as this simplifies case statements below. if test "m4_normalize(m4_default([$1],[]))" = "" ; then : # Recognized value elif test "m4_normalize(m4_default([$1],[]))" = "serial" ; then : # Recognized value elif test "m4_normalize(m4_default([$1],[]))" = "parallel"; then : # Recognized value else AC_MSG_ERROR([ Unrecognized value for AX[]_LIB_HDF5 within configure.ac. If supplied, argument 1 must be either 'serial' or 'parallel'. ]) fi dnl Add a default --with-hdf5 configuration option. AC_ARG_WITH([hdf5], AS_HELP_STRING( [--with-hdf5=[yes/no/PATH]], m4_case(m4_normalize([$1]), [serial], [location of h5cc for serial HDF5 configuration], [parallel], [location of h5pcc for parallel HDF5 configuration], [location of h5cc or h5pcc for HDF5 configuration]) ), [if test "$withval" = "no"; then with_hdf5="no" elif test "$withval" = "yes"; then with_hdf5="yes" else with_hdf5="yes" H5CC="$withval" fi], [with_hdf5="yes"] ) dnl Set defaults to blank HDF5_CC="" HDF5_VERSION="" HDF5_CFLAGS="" HDF5_CPPFLAGS="" HDF5_LDFLAGS="" HDF5_LIBS="" HDF5_FC="" HDF5_FFLAGS="" HDF5_FLIBS="" dnl Try and find hdf5 compiler tools and options. if test "$with_hdf5" = "yes"; then if test -z "$H5CC"; then dnl Check to see if H5CC is in the path. AC_PATH_PROGS( [H5CC], m4_case(m4_normalize([$1]), [serial], [h5cc], [parallel], [h5pcc], [h5cc h5pcc]), []) else AC_MSG_CHECKING([Using provided HDF5 C wrapper]) AC_MSG_RESULT([$H5CC]) fi AC_MSG_CHECKING([for HDF5 libraries]) if test ! -f "$H5CC" || test ! -x "$H5CC"; then AC_MSG_RESULT([no]) AC_MSG_WARN(m4_case(m4_normalize([$1]), [serial], [ Unable to locate serial HDF5 compilation helper script 'h5cc'. Please specify --with-hdf5= as the full path to h5cc. HDF5 support is being disabled (equivalent to --with-hdf5=no). ], [parallel],[ Unable to locate parallel HDF5 compilation helper script 'h5pcc'. Please specify --with-hdf5= as the full path to h5pcc. HDF5 support is being disabled (equivalent to --with-hdf5=no). ], [ Unable to locate HDF5 compilation helper scripts 'h5cc' or 'h5pcc'. Please specify --with-hdf5= as the full path to h5cc or h5pcc. HDF5 support is being disabled (equivalent to --with-hdf5=no). ])) with_hdf5="no" with_hdf5_fortran="no" else dnl Get the h5cc output HDF5_SHOW=$(eval $H5CC -show) dnl Get the actual compiler used HDF5_CC=$(eval $H5CC -show | $AWK '{print $[]1}') if test "$HDF5_CC" = "ccache"; then HDF5_CC=$(eval $H5CC -show | $AWK '{print $[]2}') fi dnl h5cc provides both AM_ and non-AM_ options dnl depending on how it was compiled either one of dnl these are empty. Lets roll them both into one. dnl Look for "HDF5 Version: X.Y.Z" HDF5_VERSION=$(eval $H5CC -showconfig | $GREP 'HDF5 Version:' \ | $AWK '{print $[]3}') dnl A ideal situation would be where everything we needed was dnl in the AM_* variables. However most systems are not like this dnl and seem to have the values in the non-AM variables. dnl dnl We try the following to find the flags: dnl (1) Look for "NAME:" tags dnl (2) Look for "H5_NAME:" tags dnl (3) Look for "AM_NAME:" tags dnl HDF5_tmp_flags=$(eval $H5CC -showconfig \ | $GREP 'FLAGS\|Extra libraries:' \ | $AWK -F: '{printf("%s "), $[]2}' ) dnl Find the installation directory and append include/ HDF5_tmp_inst=$(eval $H5CC -showconfig \ | $GREP 'Installation point:' \ | $AWK '{print $[]NF}' ) dnl Add this to the CPPFLAGS HDF5_CPPFLAGS="-I${HDF5_tmp_inst}/include" dnl Now sort the flags out based upon their prefixes for arg in $HDF5_SHOW $HDF5_tmp_flags ; do case "$arg" in -I*) echo $HDF5_CPPFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \ || HDF5_CPPFLAGS="$arg $HDF5_CPPFLAGS" ;; -L*) echo $HDF5_LDFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \ || HDF5_LDFLAGS="$arg $HDF5_LDFLAGS" ;; -l*) echo $HDF5_LIBS | $GREP -e "$arg" 2>&1 >/dev/null \ || HDF5_LIBS="$arg $HDF5_LIBS" ;; esac done HDF5_LIBS="$HDF5_LIBS -lhdf5" AC_MSG_RESULT([yes (version $[HDF5_VERSION])]) dnl See if we can compile ax_lib_hdf5_save_CC=$CC ax_lib_hdf5_save_CPPFLAGS=$CPPFLAGS ax_lib_hdf5_save_LIBS=$LIBS ax_lib_hdf5_save_LDFLAGS=$LDFLAGS CC=$HDF5_CC CPPFLAGS=$HDF5_CPPFLAGS LIBS=$HDF5_LIBS LDFLAGS=$HDF5_LDFLAGS AC_CHECK_HEADER([hdf5.h], [ac_cv_hadf5_h=yes], [ac_cv_hadf5_h=no]) AC_CHECK_LIB([hdf5], [H5Fcreate], [ac_cv_libhdf5=yes], [ac_cv_libhdf5=no]) if test "$ac_cv_hadf5_h" = "no" && test "$ac_cv_libhdf5" = "no" ; then AC_MSG_WARN([Unable to compile HDF5 test program]) fi dnl Look for HDF5's high level library AC_HAVE_LIBRARY([hdf5_hl], [HDF5_LIBS="$HDF5_LIBS -lhdf5_hl"], [], []) CC=$ax_lib_hdf5_save_CC CPPFLAGS=$ax_lib_hdf5_save_CPPFLAGS LIBS=$ax_lib_hdf5_save_LIBS LDFLAGS=$ax_lib_hdf5_save_LDFLAGS AC_MSG_CHECKING([for matching HDF5 Fortran wrapper]) dnl Presume HDF5 Fortran wrapper is just a name variant from H5CC H5FC=$(eval echo -n $H5CC | $SED -n 's/cc$/fc/p') if test -x "$H5FC"; then AC_MSG_RESULT([$H5FC]) with_hdf5_fortran="yes" AC_SUBST([H5FC]) dnl Again, pry any remaining -Idir/-Ldir from compiler wrapper for arg in `$H5FC -show` do case "$arg" in #( -I*) echo $HDF5_FFLAGS | $GREP -e "$arg" >/dev/null \ || HDF5_FFLAGS="$arg $HDF5_FFLAGS" ;;#( -L*) echo $HDF5_FFLAGS | $GREP -e "$arg" >/dev/null \ || HDF5_FFLAGS="$arg $HDF5_FFLAGS" dnl HDF5 installs .mod files in with libraries, dnl but some compilers need to find them with -I echo $HDF5_FFLAGS | $GREP -e "-I${arg#-L}" >/dev/null \ || HDF5_FFLAGS="-I${arg#-L} $HDF5_FFLAGS" ;; esac done dnl Make Fortran link line by inserting Fortran libraries for arg in $HDF5_LIBS do case "$arg" in #( -lhdf5_hl) HDF5_FLIBS="$HDF5_FLIBS -lhdf5hl_fortran $arg" ;; #( -lhdf5) HDF5_FLIBS="$HDF5_FLIBS -lhdf5_fortran $arg" ;; #( *) HDF5_FLIBS="$HDF5_FLIBS $arg" ;; esac done else AC_MSG_RESULT([no]) with_hdf5_fortran="no" fi AC_SUBST([HDF5_VERSION]) AC_SUBST([HDF5_CC]) AC_SUBST([HDF5_CFLAGS]) AC_SUBST([HDF5_CPPFLAGS]) AC_SUBST([HDF5_LDFLAGS]) AC_SUBST([HDF5_LIBS]) AC_SUBST([HDF5_FC]) AC_SUBST([HDF5_FFLAGS]) AC_SUBST([HDF5_FLIBS]) AC_DEFINE([HAVE_HDF5], [1], [Defined if you have HDF5 support]) fi fi ]) GMTSAR_V5.7/.svn/pristine/0e/0e30bdf47ce50d0a25a9a915e51205bd5f104089.svn-base000444 015705 000000 00000003006 13505462013 025554 0ustar00sandwellwheel000000 000000 #include #include #ifndef __DARWIN_C_LEVEL #ifndef HAVE_STRLCAT /* * '_cups_strlcat()' - Safely concatenate two strings. */ size_t /* O - Length of string */ strlcat(char *dst, /* O - Destination string */ const char *src, /* I - Source string */ size_t size) /* I - Size of destination string buffer */ { size_t srclen; /* Length of source string */ size_t dstlen; /* Length of destination string */ /* * Figure out how much room is left... */ dstlen = strlen(dst); size -= dstlen + 1; if (!size) return (dstlen); /* No room, return immediately... */ /* * Figure out how much room is needed... */ srclen = strlen(src); /* * Copy the appropriate amount... */ if (srclen > size) srclen = size; memcpy(dst + dstlen, src, srclen); dst[dstlen + srclen] = '\0'; return (dstlen + srclen); } #endif /* !HAVE_STRLCAT */ #ifndef HAVE_STRLCPY /* * '_cups_strlcpy()' - Safely copy two strings. */ size_t /* O - Length of string */ strlcpy(char *dst, /* O - Destination string */ const char *src, /* I - Source string */ size_t size) /* I - Size of destination string buffer */ { size_t srclen; /* Length of source string */ /* * Figure out how much room is needed... */ size--; srclen = strlen(src); /* * Copy the appropriate amount... */ if (srclen > size) srclen = size; memcpy(dst, src, srclen); dst[srclen] = '\0'; return (srclen); } #endif /* !HAVE_STRLCPY */ #endif GMTSAR_V5.7/.svn/pristine/0e/0e447fcd933b8485752ee116d46b646e2ddc1585.svn-base000444 015705 000000 00000003564 13505462014 025553 0ustar00sandwellwheel000000 000000 /************************************************************************ * cfft1d is a subroutine used to call and initialize veclib FFT * * in a Mac OS X computer. * ************************************************************************/ /************************************************************************ * Creator: Robert Kern (Scripps Institution of Oceanography * * Date : 12/2005 * ************************************************************************/ /************************************************************************ * Modification history: * * * * DATE * ************************************************************************/ #include #include #include int cfft1d_(int *np, DSPComplex *c, int *dir); void cfft1d_cleanup_(); static int n = 0; static int log2n; static FFTSetup setup; static DSPSplitComplex d; static float scale; static int inited = 0; int cfft1d_(int *np, DSPComplex *c, int *dir) { if (*dir == 0) return; if (n != *np) { cfft1d_cleanup_(); n = *np; for (log2n = 1; (1 << log2n) < *np; log2n++) { } d.realp = (float *)malloc(n * sizeof(float)); d.imagp = (float *)malloc(n * sizeof(float)); setup = create_fftsetup(log2n, 0); scale = 1.0 / n; inited = 1; } ctoz(c, 2, &d, 1, n); fft_zip(setup, &d, 1, log2n, (*dir == -1 ? FFT_FORWARD : FFT_INVERSE)); ztoc(&d, 1, c, 2, n); if (*dir == 1) { vsmul((float *)c, 1, &scale, (float *)c, 1, 2 * n); } } void cfft1d_cleanup_() { if (inited) { free(d.realp); free(d.imagp); destroy_fftsetup(setup); inited = 0; } } GMTSAR_V5.7/.svn/pristine/93/932ef34389003a30638a9a296427793a09bcbcfc.svn-base000444 015705 000000 00000005541 13505462013 025403 0ustar00sandwellwheel000000 000000 /* $Id$ */ /******************************************************************************* * Load the PRM file and calculate doppler centroid * *******************************************************************************/ #include "gmtsar.h" #include "orbit.h" void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void ldr_orbit(struct SAT_ORB *, struct PRM *); void calc_dop(struct PRM *); int main(int argc, char **argv) { struct PRM *prm; struct SAT_ORB *orb; FILE *prmfile, *ldrfile, *outfile; double re; if ((argc > 5) || (argc < 4)) { fprintf(stderr, "\n"); fprintf(stderr, "Usage: calc_dop_orb file.PRM added.PRM earth_radius " "[doppler_centroid]\n"); fprintf(stderr, " file.PRM - input name of PRM file \n"); fprintf(stderr, " new.PRM - output additional parameters to add to " "the PRM file \n"); fprintf(stderr, " earth_radius - input set earth radius, 0 calculates radius \n"); fprintf(stderr, " [doppler_centroid] - no parameter calculates doppler \n"); fprintf(stderr, " [doppler_centroid] - use value (e.g. 0.0) to force doppler \n"); fprintf(stderr, "\n"); return (0); } if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); fprintf(stderr, "Successfully opened %s \n", argv[1]); prm = malloc(sizeof(struct PRM)); /* read earth radius */ re = atof(argv[3]); /* get the PRM parameters */ get_sio_struct(prmfile, prm); /*fprintf(stderr,"%lf", prm->near_range);*/ /* get the orbit data */ ldrfile = fopen(prm->led_file, "r"); if (ldrfile == NULL) die("can't open ", prm->led_file); orb = (struct SAT_ORB *)malloc(sizeof(struct SAT_ORB)); read_orb(ldrfile, prm, orb); /* get the orbit parameters */ ldr_orbit(orb, prm); /* write it all out */ if ((outfile = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); fprintf(outfile, "SC_vel = %lf \n", prm->vel); if (re == 0) { fprintf(outfile, "earth_radius = %lf \n", prm->RE); fprintf(outfile, "SC_height = %lf \n", prm->ht); fprintf(outfile, "SC_height_start = %lf \n", prm->ht_start); fprintf(outfile, "SC_height_end = %lf \n", prm->ht_end); } else if (re > 0) { fprintf(outfile, "earth_radius = %lf \n", re); fprintf(outfile, "SC_height = %lf \n", prm->ht + prm->RE - re); fprintf(outfile, "SC_height_start = %lf \n", prm->ht_start + prm->RE - re); fprintf(outfile, "SC_height_end = %lf \n", prm->ht_end + prm->RE - re); } else die("Wrong input earth radius", argv[3]); /* Calculate doppler centroid */ if (argc == 4) { calc_dop(prm); fprintf(outfile, "fd1 = %lf\n", prm->fd1); } if (argc == 5) fprintf(outfile, "fd1 = %lf\n", atof(argv[4])); fclose(prmfile); fclose(ldrfile); fclose(outfile); exit(0); } GMTSAR_V5.7/.svn/pristine/93/93a66a9c75e1df5d78c8811ca7ce5d868df95748.svn-base000444 015705 000000 00000000245 13505462014 025667 0ustar00sandwellwheel000000 000000 /* Include file for xml code written by Eric Xu, April 6, 2015 */ typedef struct tree{ char name[200]; int sibr; int sibl; int parent; int firstchild; }tree; GMTSAR_V5.7/.svn/pristine/93/93a5b98498a25fb05439826327fec66317556bf6.svn-base000444 015705 000000 00000132440 13505462014 025274 0ustar00sandwellwheel000000 000000 /**************************************************************************/ /* */ /* Mosaic 5 subswaths of 2 frames of ALOS ScanSAR in radar coordinates */ /* */ /* This program is written for better unwrapping because */ /* there will be phase difference for each subswath if unwrapping */ /* individually and the phase difference might not be a constant. */ /* */ /* This program will read the clock_start and near_range info from */ /* 5 PRM files of each subswath and read the pixel values from each */ /* GMT grids, calculate the coordinates of each subswath in meters, */ /* put each subswath in the corresponding coordinates. The boundary in */ /* range direction of each subswath is chosen to be at the middle of */ /* the overlapping region. */ /* */ /* After this step, should be phase unwrapping. */ /* */ /* May 18 2018 */ /* */ /* Xiaopeng Tong */ /* */ /* Update history: */ /* */ /* May 25 2018 modified to mosaic 2 frames */ /* May 30 2018 can divide the mosaic into 5 subswaths */ /* */ /**************************************************************************/ char *USAGE = " ALOS_mosaic_ss_2frames prmfile1 grd1 prmfile2 grd2 prmfile3 grd3 " "prmfile4 grd4 prmfile5 grd5 prmfile6 grd6 prmfile7 grd7 prmfile8 grd8 " "prmfile9 grd9 prmfile10 grd10 mosaic dec dir \n\n" " USAGE: \n" " mosaic 5 subswath of 2 frames of ALOS ScanSAR in radar coordinates\n\n" " prmfile[1-10] the PRM files \n" " grd[1-10] the GMT grid files (corr, phase, phasefilt) \n" " dec decimation factor in radar coordinates (100) \n" " dir dir is 1 means mosaic 5 subswaths \n" " dir is 0 means divide the mosaic into 5 subswaths \n" " the first frame is 1-5 and the second frame is 6-10 \n"; #include "gmt.h" #include "gmtsar.h" void set_ALOS_defaults(struct PRM *); void get_sio_struct(FILE *, struct PRM *); int main(int argc, char **argv) { /* define variables */ FILE *prmfile; struct PRM prm; void *API = NULL; /* GMT control structure */ struct GMT_GRID *grid1 = NULL, *grid2 = NULL, *grid3 = NULL, *grid4 = NULL, *grid5 = NULL, *grid6 = NULL, *grid7 = NULL, *grid8 = NULL, *grid9 = NULL, *grid10 = NULL, *grid11 = NULL; double inc[2], wesn[4]; double clock_start[10], clock_start_rel[10], near_range[10], near_range_rel[10]; double prf[10], rng_samp_rate[10], vel[10]; int num_rng[10], num_azi[10]; double clock_start_min; int ra[10][4]; int range_ub, azimuth_ub; double sol = 3.0e8; double rsr, dr; double dec; int row, col; int i; int range, azimuth; int range_boundary1, range_boundary2, range_boundary3, range_boundary4, range_boundary5; int azimuth_boundary1, azimuth_boundary2, azimuth_boundary3, azimuth_boundary4, azimuth_boundary5; int node1, node2, node3, node4, node5, node6, node7, node8, node9, node10, node11; int dir; double num_x, num_y; /* parse arguments */ if (argc != 24) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 2, 0, NULL)) == NULL) return EXIT_FAILURE; /* read in dec */ dec = atof(argv[22]); /* read in dir */ dir = atoi(argv[23]); num_x = 1000; num_y = 5000; /* open and read PRM files */ fprintf(stderr, "input:\n"); /* subswath 1 */ if ((prmfile = fopen(argv[1], "r")) == NULL) { die("\n can't open PRM file:\n", argv[1]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[0] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[0] = prm.near_range; rng_samp_rate[0] = prm.fs; num_rng[0] = prm.num_rng_bins; num_azi[0] = prm.num_patches * prm.num_valid_az; prf[0] = prm.prf; vel[0] = prm.vel; fclose(prmfile); /* subswath 2 */ if ((prmfile = fopen(argv[3], "r")) == NULL) { die("\n can't open PRM file:\n", argv[3]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[1] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[1] = prm.near_range; rng_samp_rate[1] = prm.fs; num_rng[1] = prm.num_rng_bins; num_azi[1] = prm.num_patches * prm.num_valid_az; prf[1] = prm.prf; vel[1] = prm.vel; fclose(prmfile); /* subswath 3 */ if ((prmfile = fopen(argv[5], "r")) == NULL) { die("\n can't open PRM file:\n", argv[5]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[2] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[2] = prm.near_range; rng_samp_rate[2] = prm.fs; num_rng[2] = prm.num_rng_bins; num_azi[2] = prm.num_patches * prm.num_valid_az; prf[2] = prm.prf; vel[2] = prm.vel; fclose(prmfile); /* subswath 4 */ if ((prmfile = fopen(argv[7], "r")) == NULL) { die("\n can't open PRM file:\n", argv[7]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[3] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[3] = prm.near_range; rng_samp_rate[3] = prm.fs; num_rng[3] = prm.num_rng_bins; num_azi[3] = prm.num_patches * prm.num_valid_az; prf[3] = prm.prf; vel[3] = prm.vel; fclose(prmfile); /* subswath 5 */ if ((prmfile = fopen(argv[9], "r")) == NULL) { die("\n can't open PRM file:\n", argv[9]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[4] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[4] = prm.near_range; rng_samp_rate[4] = prm.fs; num_rng[4] = prm.num_rng_bins; num_azi[4] = prm.num_patches * prm.num_valid_az; prf[4] = prm.prf; vel[4] = prm.vel; fclose(prmfile); /* subswath 6 */ if ((prmfile = fopen(argv[11], "r")) == NULL) { die("\n can't open PRM file:\n", argv[11]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[5] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[5] = prm.near_range; rng_samp_rate[5] = prm.fs; num_rng[5] = prm.num_rng_bins; num_azi[5] = prm.num_patches * prm.num_valid_az; prf[5] = prm.prf; vel[5] = prm.vel; fclose(prmfile); /* subswath 7 */ if ((prmfile = fopen(argv[13], "r")) == NULL) { die("\n can't open PRM file:\n", argv[13]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[6] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[6] = prm.near_range; rng_samp_rate[6] = prm.fs; num_rng[6] = prm.num_rng_bins; num_azi[6] = prm.num_patches * prm.num_valid_az; prf[6] = prm.prf; vel[6] = prm.vel; fclose(prmfile); /* subswath 8 */ if ((prmfile = fopen(argv[15], "r")) == NULL) { die("\n can't open PRM file:\n", argv[15]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[7] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[7] = prm.near_range; rng_samp_rate[7] = prm.fs; num_rng[7] = prm.num_rng_bins; num_azi[7] = prm.num_patches * prm.num_valid_az; prf[7] = prm.prf; vel[7] = prm.vel; fclose(prmfile); /* subswath 9 */ if ((prmfile = fopen(argv[17], "r")) == NULL) { die("\n can't open PRM file:\n", argv[17]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[8] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[8] = prm.near_range; rng_samp_rate[8] = prm.fs; num_rng[8] = prm.num_rng_bins; num_azi[8] = prm.num_patches * prm.num_valid_az; prf[8] = prm.prf; vel[8] = prm.vel; fclose(prmfile); /* subswath 10 */ if ((prmfile = fopen(argv[19], "r")) == NULL) { die("\n can't open PRM file:\n", argv[19]); } set_ALOS_defaults(&prm); get_sio_struct(prmfile, &prm); clock_start[9] = 86400.0 * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); near_range[9] = prm.near_range; rng_samp_rate[9] = prm.fs; num_rng[9] = prm.num_rng_bins; num_azi[9] = prm.num_patches * prm.num_valid_az; prf[9] = prm.prf; vel[9] = prm.vel; fclose(prmfile); /* open and read GMT grids */ if (dir == 1) { /* subswath 1 */ if ((grid1 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 1: num_rng=%d, num_azi=%d\n", num_rng[0], num_azi[0]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid1->header->nx, grid1->header->inc[GMT_X], grid1->header->ny, grid1->header->inc[GMT_Y]); if ((num_rng[0] != round(grid1->header->nx * grid1->header->inc[GMT_X])) || (num_azi[0] != round(grid1->header->ny * grid1->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[2]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[2], grid1) == NULL) return EXIT_FAILURE; /* subswath 2 */ if ((grid2 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[4], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 2: num_rng=%d, num_azi=%d\n", num_rng[1], num_azi[1]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid2->header->nx, grid2->header->inc[GMT_X], grid2->header->ny, grid2->header->inc[GMT_Y]); if ((num_rng[1] != round(grid2->header->nx * grid2->header->inc[GMT_X])) || (num_azi[1] != round(grid2->header->ny * grid2->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[4]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[4], grid2) == NULL) return EXIT_FAILURE; /* subswath 3 */ if ((grid3 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[6], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 3: num_rng=%d, num_azi=%d\n", num_rng[2], num_azi[2]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid3->header->nx, grid3->header->inc[GMT_X], grid3->header->ny, grid3->header->inc[GMT_Y]); if ((num_rng[2] != round(grid3->header->nx * grid3->header->inc[GMT_X])) || (num_azi[2] != round(grid3->header->ny * grid3->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[6]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[6], grid3) == NULL) return EXIT_FAILURE; /* subswath 4 */ if ((grid4 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[8], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 4: num_rng=%d, num_azi=%d\n", num_rng[3], num_azi[3]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid4->header->nx, grid4->header->inc[GMT_X], grid4->header->ny, grid4->header->inc[GMT_Y]); if ((num_rng[3] != round(grid4->header->nx * grid4->header->inc[GMT_X])) || (num_azi[3] != round(grid4->header->ny * grid4->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[8]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[8], grid4) == NULL) return EXIT_FAILURE; /* subswath 5 */ if ((grid5 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[10], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 5: num_rng=%d, num_azi=%d\n", num_rng[4], num_azi[4]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid5->header->nx, grid5->header->inc[GMT_X], grid5->header->ny, grid5->header->inc[GMT_Y]); if ((num_rng[4] != round(grid5->header->nx * grid5->header->inc[GMT_X])) || (num_azi[4] != round(grid5->header->ny * grid5->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[10]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[10], grid5) == NULL) return EXIT_FAILURE; /* subswath 6 */ if ((grid6 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[12], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 6: num_rng=%d, num_azi=%d\n", num_rng[5], num_azi[5]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid6->header->nx, grid6->header->inc[GMT_X], grid6->header->ny, grid6->header->inc[GMT_Y]); if ((num_rng[5] != round(grid6->header->nx * grid6->header->inc[GMT_X])) || (num_azi[5] != round(grid6->header->ny * grid6->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[12]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[12], grid6) == NULL) return EXIT_FAILURE; /* subswath 7 */ if ((grid7 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[14], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 7: num_rng=%d, num_azi=%d\n", num_rng[6], num_azi[6]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid7->header->nx, grid7->header->inc[GMT_X], grid7->header->ny, grid7->header->inc[GMT_Y]); if ((num_rng[6] != round(grid7->header->nx * grid7->header->inc[GMT_X])) || (num_azi[6] != round(grid7->header->ny * grid7->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[14]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[14], grid7) == NULL) return EXIT_FAILURE; /* subswath 8 */ if ((grid8 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[16], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 8: num_rng=%d, num_azi=%d\n", num_rng[7], num_azi[7]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid8->header->nx, grid8->header->inc[GMT_X], grid8->header->ny, grid8->header->inc[GMT_Y]); if ((num_rng[7] != round(grid8->header->nx * grid8->header->inc[GMT_X])) || (num_azi[7] != round(grid8->header->ny * grid8->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[16]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[16], grid8) == NULL) return EXIT_FAILURE; /* subswath 9 */ if ((grid9 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[18], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 9: num_rng=%d, num_azi=%d\n", num_rng[8], num_azi[8]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid9->header->nx, grid9->header->inc[GMT_X], grid9->header->ny, grid9->header->inc[GMT_Y]); if ((num_rng[8] != round(grid9->header->nx * grid9->header->inc[GMT_X])) || (num_azi[8] != round(grid9->header->ny * grid9->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[18]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[18], grid9) == NULL) return EXIT_FAILURE; /* subswath 10 */ if ((grid10 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[20], NULL)) == NULL) return EXIT_FAILURE; /* check if the dimension of the grid and PRM file match */ fprintf(stderr, "subswath 10: num_rng=%d, num_azi=%d\n", num_rng[9], num_azi[9]); fprintf(stderr, "gmt grid nx=%d, gmt grid inc_x=%f, gmt grid ny=%d, gmt grid " "inc_y=%f\n", grid10->header->nx, grid10->header->inc[GMT_X], grid10->header->ny, grid10->header->inc[GMT_Y]); if ((num_rng[9] != round(grid10->header->nx * grid10->header->inc[GMT_X])) || (num_azi[9] != round(grid10->header->ny * grid10->header->inc[GMT_Y]))) { die("\nPRM file and GMT grid don't match!\n", argv[20]); } if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[20], grid10) == NULL) return EXIT_FAILURE; } else if (dir == 0) { /* subswath 1 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[0]; wesn[GMT_YHI] = num_azi[0]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid1 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node1 = 0; node1 < grid1->header->size; node1++) grid1->data[node1] = NAN; /* subswath 2 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[1]; wesn[GMT_YHI] = num_azi[1]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid2 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node2 = 0; node2 < grid2->header->size; node2++) grid2->data[node2] = NAN; /* subswath 3 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[2]; wesn[GMT_YHI] = num_azi[2]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid3 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node3 = 0; node3 < grid3->header->size; node3++) grid3->data[node3] = NAN; /* subswath 4 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[3]; wesn[GMT_YHI] = num_azi[3]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid4 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node4 = 0; node4 < grid4->header->size; node4++) grid4->data[node4] = NAN; /* subswath 5 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[4]; wesn[GMT_YHI] = num_azi[4]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid5 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node5 = 0; node5 < grid5->header->size; node5++) grid5->data[node5] = NAN; /* subswath 6 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[5]; wesn[GMT_YHI] = num_azi[5]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid6 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node6 = 0; node6 < grid6->header->size; node6++) grid6->data[node6] = NAN; /* subswath 7 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[6]; wesn[GMT_YHI] = num_azi[6]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid7 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node7 = 0; node7 < grid7->header->size; node7++) grid7->data[node7] = NAN; /* subswath 8 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[7]; wesn[GMT_YHI] = num_azi[7]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid8 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node8 = 0; node8 < grid8->header->size; node8++) grid8->data[node8] = NAN; /* subswath 9 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[8]; wesn[GMT_YHI] = num_azi[8]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid9 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node9 = 0; node9 < grid9->header->size; node9++) grid9->data[node9] = NAN; /* subswath 10 */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = num_rng[9]; wesn[GMT_YHI] = num_azi[9]; inc[GMT_X] = (wesn[GMT_XHI] - wesn[GMT_XLO]) / num_x; inc[GMT_Y] = (wesn[GMT_YHI] - wesn[GMT_YLO]) / num_y; fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); if ((grid10 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node10 = 0; node10 < grid10->header->size; node10++) grid10->data[node10] = NAN; } else { die("dir must be either 1 or 0", ""); } /* find the minimum of the clock start */ clock_start_min = 1e10; for (i = 0; i < 5; i++) { if (clock_start[i] < clock_start_min) { clock_start_min = clock_start[i]; } } /* check the range sampling rate should be the same */ rsr = rng_samp_rate[0]; for (i = 1; i < 10; i++) { if (rsr != rng_samp_rate[i]) { die("\nrange sampling rate from PRM files are not the same.\n", " "); } } dr = sol / rsr / 2.0; fprintf(stderr, "dr = %f\n", dr); for (i = 0; i < 10; i++) { fprintf(stderr, "subswath %d, da = %f\n", i + 1, vel[i] / prf[i]); } /* calculate the relative clock in seconds */ for (i = 0; i < 10; i++) { clock_start_rel[i] = clock_start[i] - clock_start_min; near_range_rel[i] = near_range[i] - near_range[0]; fprintf(stderr, "subswath = %d, clock_start_rel = %f\n", i + 1, clock_start_rel[i]); fprintf(stderr, "subswath = %d, near_range_rel = %f\n", i + 1, near_range_rel[i]); } /* calculate the positions of the grids in dec meters */ ra[0][0] = round(near_range_rel[0] / dec); ra[0][1] = ra[0][0] + round(grid1->header->nx * grid1->header->inc[GMT_X] * dr / dec); ra[0][2] = round(clock_start_rel[0] * vel[0] / dec); ra[0][3] = ra[0][2] + round(grid1->header->ny * grid1->header->inc[GMT_Y] * vel[0] / prf[0] / dec); ra[1][0] = round(near_range_rel[1] / dec); ra[1][1] = ra[1][0] + round(grid2->header->nx * grid2->header->inc[GMT_X] * dr / dec); ra[1][2] = round(clock_start_rel[1] * vel[1] / dec); ra[1][3] = ra[1][2] + round(grid2->header->ny * grid2->header->inc[GMT_Y] * vel[1] / prf[1] / dec); ra[2][0] = round(near_range_rel[2] / dec); ra[2][1] = ra[2][0] + round(grid3->header->nx * grid3->header->inc[GMT_X] * dr / dec); ra[2][2] = round(clock_start_rel[2] * vel[2] / dec); ra[2][3] = ra[2][2] + round(grid3->header->ny * grid3->header->inc[GMT_Y] * vel[2] / prf[2] / dec); ra[3][0] = round(near_range_rel[3] / dec); ra[3][1] = ra[3][0] + round(grid4->header->nx * grid4->header->inc[GMT_X] * dr / dec); ra[3][2] = round(clock_start_rel[3] * vel[3] / dec); ra[3][3] = ra[3][2] + round(grid4->header->ny * grid4->header->inc[GMT_Y] * vel[3] / prf[3] / dec); ra[4][0] = round(near_range_rel[4] / dec); ra[4][1] = ra[4][0] + round(grid5->header->nx * grid5->header->inc[GMT_X] * dr / dec); ra[4][2] = round(clock_start_rel[4] * vel[4] / dec); ra[4][3] = ra[4][2] + round(grid5->header->ny * grid5->header->inc[GMT_Y] * vel[4] / prf[4] / dec); ra[5][0] = round(near_range_rel[5] / dec); ra[5][1] = ra[5][0] + round(grid6->header->nx * grid6->header->inc[GMT_X] * dr / dec); ra[5][2] = round(clock_start_rel[5] * vel[5] / dec); ra[5][3] = ra[5][2] + round(grid6->header->ny * grid6->header->inc[GMT_Y] * vel[5] / prf[5] / dec); ra[6][0] = round(near_range_rel[6] / dec); ra[6][1] = ra[6][0] + round(grid7->header->nx * grid7->header->inc[GMT_X] * dr / dec); ra[6][2] = round(clock_start_rel[6] * vel[6] / dec); ra[6][3] = ra[6][2] + round(grid7->header->ny * grid7->header->inc[GMT_Y] * vel[6] / prf[6] / dec); ra[7][0] = round(near_range_rel[7] / dec); ra[7][1] = ra[7][0] + round(grid8->header->nx * grid8->header->inc[GMT_X] * dr / dec); ra[7][2] = round(clock_start_rel[7] * vel[7] / dec); ra[7][3] = ra[7][2] + round(grid8->header->ny * grid8->header->inc[GMT_Y] * vel[7] / prf[7] / dec); ra[8][0] = round(near_range_rel[8] / dec); ra[8][1] = ra[8][0] + round(grid9->header->nx * grid9->header->inc[GMT_X] * dr / dec); ra[8][2] = round(clock_start_rel[8] * vel[8] / dec); ra[8][3] = ra[8][2] + round(grid9->header->ny * grid9->header->inc[GMT_Y] * vel[8] / prf[8] / dec); ra[9][0] = round(near_range_rel[9] / dec); ra[9][1] = ra[9][0] + round(grid10->header->nx * grid10->header->inc[GMT_X] * dr / dec); ra[9][2] = round(clock_start_rel[9] * vel[9] / dec); ra[9][3] = ra[9][2] + round(grid10->header->ny * grid10->header->inc[GMT_Y] * vel[9] / prf[9] / dec); /* debug */ /*for (i=0;i<5;i++) { for (j=0;j<4;j++) { fprintf(stderr, "i=%d j=%d ra=%d\n", i,j,ra[i][j]); } }*/ if (dir == 1) { fprintf(stderr, "mosaic the 5 subswath...\n"); /* the lower boundary in the azimuth and range direction is 0 */ /* find the upper boundary in the azimuth and range direction */ azimuth_ub = -999999; for (i = 5; i < 10; i++) { if (ra[i][3] > azimuth_ub) { azimuth_ub = ra[i][3]; } } range_ub = ra[4][1]; /* make an output grid */ inc[GMT_X] = inc[GMT_Y] = dec; /* in meters */ wesn[GMT_XLO] = 0; wesn[GMT_YLO] = 0; wesn[GMT_XHI] = range_ub * inc[GMT_X]; wesn[GMT_YHI] = azimuth_ub * inc[GMT_Y]; /* debug */ /* fprintf(stderr, "inc[GMT_X] = %f , inc[GMT_Y] = %f\n", inc[GMT_X], inc[GMT_Y]); fprintf(stderr, "wesn = %f %f %f %f \n", wesn[GMT_XLO], wesn[GMT_YLO], wesn[GMT_XHI], wesn[GMT_YHI]); */ if ((grid11 = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, wesn, inc, GMT_GRID_PIXEL_REG, 0, NULL)) == NULL) die("could not allocate grid header", ""); /* fill the empty grid with nan */ for (node11 = 0; node11 < grid11->header->size; node11++) grid11->data[node11] = NAN; /* put in the subswath grids */ range_boundary1 = round((ra[0][1] + ra[1][0]) / 2); azimuth_boundary1 = round((ra[0][3] + ra[5][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary1=%d\n",range_boundary1); /* put in subswath 1 */ for (range = ra[0][0]; range < range_boundary1; range++) { for (azimuth = ra[0][2]; azimuth < azimuth_boundary1; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[0]) / dr / grid1->header->inc[GMT_X]); row = grid1->header->ny - round((azimuth * dec - clock_start_rel[0] * vel[0]) / (vel[0] / prf[0]) / grid1->header->inc[GMT_Y]); if (col >= 0 && col <= grid1->header->nx && row >= 0 && row <= grid1->header->ny) { node1 = GMT_Get_Index(API, grid1->header, row, col); grid11->data[node11] = grid1->data[node1]; } } } /* put in subswath 2 */ range_boundary2 = round((ra[1][1] + ra[2][0]) / 2); azimuth_boundary2 = round((ra[1][3] + ra[6][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary2=%d\n",range_boundary2); for (range = range_boundary1; range < range_boundary2; range++) { for (azimuth = ra[1][2]; azimuth < azimuth_boundary2; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[1]) / dr / grid2->header->inc[GMT_X]); row = grid2->header->ny - round((azimuth * dec - clock_start_rel[1] * vel[1]) / (vel[1] / prf[1]) / grid2->header->inc[GMT_Y]); if (col >= 0 && col <= grid2->header->nx && row >= 0 && row <= grid2->header->ny) { node2 = GMT_Get_Index(API, grid2->header, row, col); grid11->data[node11] = grid2->data[node2]; } } } /* put in subswath 3 */ range_boundary3 = round((ra[2][1] + ra[3][0]) / 2); azimuth_boundary3 = round((ra[2][3] + ra[7][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary3=%d\n",range_boundary3); for (range = range_boundary2; range < range_boundary3; range++) { for (azimuth = ra[2][2]; azimuth < azimuth_boundary3; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[2]) / dr / grid3->header->inc[GMT_X]); row = grid3->header->ny - round((azimuth * dec - clock_start_rel[2] * vel[2]) / (vel[2] / prf[2]) / grid3->header->inc[GMT_Y]); if (col >= 0 && col <= grid3->header->nx && row >= 0 && row <= grid3->header->ny) { node3 = GMT_Get_Index(API, grid3->header, row, col); grid11->data[node11] = grid3->data[node3]; } } } /* put in subswath 4 */ range_boundary4 = round((ra[3][1] + ra[4][0]) / 2); azimuth_boundary4 = round((ra[3][3] + ra[8][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary4=%d\n",range_boundary4); for (range = range_boundary3; range < range_boundary4; range++) { for (azimuth = ra[3][2]; azimuth < azimuth_boundary4; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[3]) / dr / grid4->header->inc[GMT_X]); row = grid4->header->ny - round((azimuth * dec - clock_start_rel[3] * vel[3]) / (vel[3] / prf[3]) / grid4->header->inc[GMT_Y]); if (col >= 0 && col <= grid4->header->nx && row >= 0 && row <= grid4->header->ny) { node4 = GMT_Get_Index(API, grid4->header, row, col); grid11->data[node11] = grid4->data[node4]; } } } /* put in subswath 5 */ range_boundary5 = range_ub; azimuth_boundary5 = round((ra[4][3] + ra[9][2]) / 2); /* debug */ // fprintf(stderr,"range_boundary5=%d\n",range_boundary5); for (range = range_boundary4; range < range_boundary5; range++) { for (azimuth = ra[4][2]; azimuth < azimuth_boundary5; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[4]) / dr / grid5->header->inc[GMT_X]); row = grid5->header->ny - round((azimuth * dec - clock_start_rel[4] * vel[4]) / (vel[4] / prf[4]) / grid5->header->inc[GMT_Y]); if (col >= 0 && col <= grid5->header->nx && row >= 0 && row <= grid5->header->ny) { node5 = GMT_Get_Index(API, grid5->header, row, col); grid11->data[node11] = grid5->data[node5]; } } } /* put in subswath 6 */ range_boundary1 = round((ra[5][1] + ra[6][0]) / 2); for (range = ra[5][0]; range < range_boundary1; range++) { for (azimuth = azimuth_boundary1; azimuth < ra[5][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[5]) / dr / grid6->header->inc[GMT_X]); row = grid6->header->ny - round((azimuth * dec - clock_start_rel[5] * vel[5]) / (vel[5] / prf[5]) / grid6->header->inc[GMT_Y]); if (col >= 0 && col <= grid6->header->nx && row >= 0 && row <= grid6->header->ny) { node6 = GMT_Get_Index(API, grid6->header, row, col); grid11->data[node11] = grid6->data[node6]; } } } /* put in subswath 7 */ range_boundary2 = round((ra[6][1] + ra[7][0]) / 2); for (range = range_boundary1; range < range_boundary2; range++) { for (azimuth = azimuth_boundary2; azimuth < ra[6][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[6]) / dr / grid7->header->inc[GMT_X]); row = grid7->header->ny - round((azimuth * dec - clock_start_rel[6] * vel[6]) / (vel[6] / prf[6]) / grid7->header->inc[GMT_Y]); if (col >= 0 && col <= grid7->header->nx && row >= 0 && row <= grid7->header->ny) { node7 = GMT_Get_Index(API, grid7->header, row, col); grid11->data[node11] = grid7->data[node7]; } } } /* put in subswath 8 */ range_boundary3 = round((ra[7][1] + ra[8][0]) / 2); for (range = range_boundary2; range < range_boundary3; range++) { for (azimuth = azimuth_boundary3; azimuth < ra[7][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[7]) / dr / grid8->header->inc[GMT_X]); row = grid8->header->ny - round((azimuth * dec - clock_start_rel[7] * vel[7]) / (vel[7] / prf[7]) / grid8->header->inc[GMT_Y]); if (col >= 0 && col <= grid8->header->nx && row >= 0 && row <= grid8->header->ny) { node8 = GMT_Get_Index(API, grid8->header, row, col); grid11->data[node11] = grid8->data[node8]; } } } /* put in subswath 9 */ range_boundary4 = round((ra[8][1] + ra[9][0]) / 2); for (range = range_boundary3; range < range_boundary4; range++) { for (azimuth = azimuth_boundary4; azimuth < ra[8][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[8]) / dr / grid9->header->inc[GMT_X]); row = grid9->header->ny - round((azimuth * dec - clock_start_rel[8] * vel[8]) / (vel[8] / prf[8]) / grid9->header->inc[GMT_Y]); if (col >= 0 && col <= grid9->header->nx && row >= 0 && row <= grid9->header->ny) { node9 = GMT_Get_Index(API, grid9->header, row, col); grid11->data[node11] = grid9->data[node9]; } } } /* put in subswath 10 */ range_boundary5 = ra[9][1]; for (range = range_boundary4; range < range_boundary5; range++) { for (azimuth = azimuth_boundary5; azimuth < ra[9][3]; azimuth++) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); col = round((range * dec - near_range_rel[9]) / dr / grid10->header->inc[GMT_X]); row = grid10->header->ny - round((azimuth * dec - clock_start_rel[9] * vel[9]) / (vel[9] / prf[9]) / grid10->header->inc[GMT_Y]); if (col >= 0 && col <= grid10->header->nx && row >= 0 && row <= grid10->header->ny) { node10 = GMT_Get_Index(API, grid10->header, row, col); grid11->data[node11] = grid10->data[node10]; } } } /* output and clean up */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[21], grid11)) return EXIT_FAILURE; } else if (dir == 0) { fprintf(stderr, "divide the mosaic into 5 subswath...\n"); /* open the mosaic grid */ if ((grid11 = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[21], NULL)) == NULL) return EXIT_FAILURE; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[21], grid11) == NULL) return EXIT_FAILURE; /* subswath 1 */ for (col = 0; col < grid1->header->nx; col++) { for (row = 0; row < grid1->header->ny; row++) { node1 = GMT_Get_Index(API, grid1->header, row, col); range = round((near_range_rel[0] + col * grid1->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[0] * vel[0] + (grid1->header->ny - row) * grid1->header->inc[GMT_Y] * vel[0] / prf[0]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid1->data[node1] = grid11->data[node11]; } } } /* subswath 2 */ for (col = 0; col < grid2->header->nx; col++) { for (row = 0; row < grid2->header->ny; row++) { node2 = GMT_Get_Index(API, grid2->header, row, col); range = round((near_range_rel[1] + col * grid2->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[1] * vel[1] + (grid2->header->ny - row) * grid2->header->inc[GMT_Y] * vel[1] / prf[1]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid2->data[node2] = grid11->data[node11]; } } } /* subswath 3 */ for (col = 0; col < grid3->header->nx; col++) { for (row = 0; row < grid3->header->ny; row++) { node3 = GMT_Get_Index(API, grid3->header, row, col); range = round((near_range_rel[2] + col * grid3->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[2] * vel[2] + (grid3->header->ny - row) * grid3->header->inc[GMT_Y] * vel[2] / prf[2]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid3->data[node3] = grid11->data[node11]; } } } /* subswath 4 */ for (col = 0; col < grid4->header->nx; col++) { for (row = 0; row < grid4->header->ny; row++) { node4 = GMT_Get_Index(API, grid4->header, row, col); range = round((near_range_rel[3] + col * grid4->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[3] * vel[3] + (grid4->header->ny - row) * grid4->header->inc[GMT_Y] * vel[3] / prf[3]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid4->data[node4] = grid11->data[node11]; } } } /* subswath 5 */ for (col = 0; col < grid5->header->nx; col++) { for (row = 0; row < grid5->header->ny; row++) { node5 = GMT_Get_Index(API, grid5->header, row, col); range = round((near_range_rel[4] + col * grid5->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[4] * vel[4] + (grid5->header->ny - row) * grid5->header->inc[GMT_Y] * vel[4] / prf[4]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid5->data[node5] = grid11->data[node11]; } } } /* subswath 6 */ for (col = 0; col < grid6->header->nx; col++) { for (row = 0; row < grid6->header->ny; row++) { node6 = GMT_Get_Index(API, grid6->header, row, col); range = round((near_range_rel[5] + col * grid6->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[5] * vel[5] + (grid6->header->ny - row) * grid6->header->inc[GMT_Y] * vel[5] / prf[5]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid6->data[node6] = grid11->data[node11]; } } } /* subswath 7 */ for (col = 0; col < grid7->header->nx; col++) { for (row = 0; row < grid7->header->ny; row++) { node7 = GMT_Get_Index(API, grid7->header, row, col); range = round((near_range_rel[6] + col * grid7->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[6] * vel[6] + (grid7->header->ny - row) * grid7->header->inc[GMT_Y] * vel[6] / prf[6]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid7->data[node7] = grid11->data[node11]; } } } /* subswath 8 */ for (col = 0; col < grid8->header->nx; col++) { for (row = 0; row < grid8->header->ny; row++) { node8 = GMT_Get_Index(API, grid8->header, row, col); range = round((near_range_rel[7] + col * grid8->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[7] * vel[7] + (grid8->header->ny - row) * grid8->header->inc[GMT_Y] * vel[7] / prf[7]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid8->data[node8] = grid11->data[node11]; } } } /* subswath 9 */ for (col = 0; col < grid9->header->nx; col++) { for (row = 0; row < grid9->header->ny; row++) { node9 = GMT_Get_Index(API, grid9->header, row, col); range = round((near_range_rel[8] + col * grid9->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[8] * vel[8] + (grid9->header->ny - row) * grid9->header->inc[GMT_Y] * vel[8] / prf[8]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid9->data[node9] = grid11->data[node11]; } } } /* subswath 10 */ for (col = 0; col < grid10->header->nx; col++) { for (row = 0; row < grid10->header->ny; row++) { node10 = GMT_Get_Index(API, grid10->header, row, col); range = round((near_range_rel[9] + col * grid10->header->inc[GMT_X] * dr) / dec); azimuth = round( (clock_start_rel[9] * vel[9] + (grid10->header->ny - row) * grid10->header->inc[GMT_Y] * vel[9] / prf[9]) / dec); if (range >= 0 && range <= grid11->header->nx && azimuth >= 0 && azimuth <= grid11->header->ny) { node11 = GMT_Get_Index(API, grid11->header, azimuth, range); grid10->data[node10] = grid11->data[node11]; } } } if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[2], grid1)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[4], grid2)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[6], grid3)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[8], grid4)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[10], grid5)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[12], grid6)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[14], grid7)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[16], grid8)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[18], grid9)) return EXIT_FAILURE; if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[20], grid10)) return EXIT_FAILURE; } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/93/93d6c5b688548553347623add05e5495f26e6a4d.svn-base000444 015705 000000 00000013423 13505462013 025345 0ustar00sandwellwheel000000 000000 /* $Id: offset_topo.c 79 2013-06-10 23:43:27Z pwessel $ */ /***************************************************************************/ /* offset_topo reads an amplitude image and a topo_ra grid as well as */ /* an initial guess on how to shift the topo_ra to match the master */ /* The program uses cross correlation to estimate the refined shift to */ /* make the topo_ra match the amplitude image more exactly. */ /* There is an option to output a new shifted topo_ra. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Xiaopeng Tong * * (Scripps Institution of Oceanography) * * Date : 7/22/08 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * ***************************************************************************/ #include "gmtsar.h" int main(int argc, char **argv) { int i, j, k, i1, j1, k1; int is, js, ns; int ni, nj, ntot; int xshft, yshft, ib = 200; /* ib is the width of the edge of the images not used for corr. must be > 2 */ int imax = 0, jmax = 0; double ra, rt, avea, suma, sumt, sumc, corr, denom, maxcorr = -9999.; void *API = NULL; /* GMT control structure */ struct GMT_GRID *A = NULL, *T = NULL, *TS = NULL; /* Grid structure containing ->header and ->data */ /* get the information from the command line */ if (argc < 6) { printf("\noffset_topo [GMTSAR] - Determine topography offset\n \n"); printf("\nUsage: offset_topo amp_master.grd topo_ra.grd rshift ashift ns " "[topo_shift.grd] \n \n"); printf(" amp_master.grd - amplitude image of master \n"); printf(" topo_ra.grd - topo in range/azimuth coordinates of master \n"); printf(" rshift - guess at integer range shift \n"); printf(" ashift - guess at integer azimuth shift \n"); printf(" ns - integer search radius \n"); printf(" topo_shift.grd - shifted topo_ra - optional, will be shifted by " "rshift, ashift \n \n"); exit(-1); } /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; xshft = atoi(argv[3]); yshft = atoi(argv[4]); ns = atoi(argv[5]); /* Get header from amplitude and topo grids */ if ((A = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[1], NULL)) == NULL) return EXIT_FAILURE; if ((T = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, argv[2], NULL)) == NULL) return EXIT_FAILURE; /* make sure the dimensions match */ if (A->header->nx != T->header->nx) { fprintf(stderr, "file dimensions do not match (must have same width)\n"); exit(EXIT_FAILURE); } if (argc >= 7) { if ((TS = GMT_Create_Data(API, GMT_IS_GRID, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, A->header->wesn, A->header->inc, A->header->registration, GMT_NOTSET, NULL)) == NULL) return EXIT_FAILURE; } /* Read the two grids into A->data and T->data which automatically are * allocated */ if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[1], A) == NULL) return EXIT_FAILURE; if (GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, argv[2], T) == NULL) return EXIT_FAILURE; if (A->header->ny < T->header->ny) ni = A->header->ny; else ni = T->header->ny; fprintf(stderr, " %d %d %d \n", ni, A->header->ny, T->header->ny); nj = T->header->nx; /* compute average */ ntot = 0; suma = sumt = 0.0; for (i = 0; i < ni; i++) { for (j = 0; j < nj; j++) { k = i * nj + j; ntot++; suma = suma + A->data[k]; sumt = sumt + T->data[k]; } } avea = suma / ntot; /* compute the normalized cross correlation function */ for (is = -ns + yshft; is < ns + 1 + yshft; is++) { for (js = -ns + xshft; js < ns + 1 + xshft; js++) { ntot = 0; sumc = suma = sumt = 0.0; for (i = 0 + ib; i < ni - ib; i++) { i1 = i - is; for (j = 0 + ib; j < nj - ib; j++) { j1 = j - js; k = i * nj + j; k1 = i1 * nj + j1; if (i1 >= 0 && i1 < ni && j1 >= 0 && j1 < nj) { ntot++; ra = A->data[k] - avea; rt = T->data[k1 + 1] - T->data[k1 - 1]; sumc = sumc + ra * rt; suma = suma + ra * ra; sumt = sumt + rt * rt; } } } corr = 0; denom = suma * sumt; if (denom > 0.) corr = sumc / sqrt(denom); /*printf(" rshift = %d ashift = %d correlation = %f\n",js,is,corr);*/ if (corr > maxcorr) { maxcorr = corr; imax = is; jmax = js; } } } printf(" optimal: rshift = %d ashift = %d max_correlation = %f\n", jmax, imax, maxcorr); if (argc >= 7) { /* write the shifted topo phase file */ for (i = 0; i < ni; i++) { i1 = i - imax; for (j = 0; j < nj; j++) { j1 = j - jmax; k = i * nj + j; k1 = i1 * nj + j1; TS->data[k] = 0.0f; if (i1 >= 0 && i1 < ni && j1 >= 0 && j1 < nj) TS->data[k] = T->data[k1]; } } /* write the shifted grd-file */ if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, argv[6], TS)) return EXIT_FAILURE; } if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/93/93fc089ba3f359ba52ead69906d84e5a7144bdaf.svn-base000444 015705 000000 00000016120 13505462013 025766 0ustar00sandwellwheel000000 000000 17 17 3.6787944117144233e-01 4.1361797370441067e-01 4.5783336177161427e-01 4.9891851158647194e-01 5.3526142851899028e-01 5.6534873961061416e-01 5.8786967312234650e-01 6.0181060067169445e-01 6.0653065971263342e-01 6.0181060067169445e-01 5.8786967312234650e-01 5.6534873961061416e-01 5.3526142851899028e-01 4.9891851158647194e-01 4.5783336177161427e-01 4.1361797370441067e-01 3.6787944117144233e-01 4.1361797370441067e-01 4.6504318813405632e-01 5.1475588520860704e-01 5.6094916081447077e-01 6.0181060067169445e-01 6.3563867382605199e-01 6.6095963999744889e-01 6.7663384616172895e-01 6.8194075119034814e-01 6.7663384616172895e-01 6.6095963999744889e-01 6.3563867382605199e-01 6.0181060067169445e-01 5.6094916081447077e-01 5.1475588520860704e-01 4.6504318813405632e-01 4.1361797370441067e-01 4.5783336177161427e-01 5.1475588520860704e-01 5.6978282473092301e-01 6.2091411980609579e-01 6.6614361070348771e-01 7.0358787434562753e-01 7.3161562894664178e-01 7.4896539360271563e-01 7.5483960198900735e-01 7.4896539360271563e-01 7.3161562894664178e-01 7.0358787434562753e-01 6.6614361070348771e-01 6.2091411980609579e-01 5.6978282473092301e-01 5.1475588520860704e-01 4.5783336177161427e-01 4.9891851158647194e-01 5.6094916081447077e-01 6.2091411980609579e-01 6.7663384616172895e-01 7.2592215095240831e-01 7.6672659607082005e-01 7.9726951141132441e-01 8.1617621302233978e-01 8.2257756239866464e-01 8.1617621302233978e-01 7.9726951141132441e-01 7.6672659607082005e-01 7.2592215095240831e-01 6.7663384616172895e-01 6.2091411980609579e-01 5.6094916081447077e-01 4.9891851158647194e-01 5.3526142851899028e-01 6.0181060067169445e-01 6.6614361070348771e-01 7.2592215095240831e-01 7.7880078307140488e-01 8.2257756239866464e-01 8.5534532730742252e-01 8.7562925720353824e-01 8.8249690258459546e-01 8.7562925720353824e-01 8.5534532730742252e-01 8.2257756239866464e-01 7.7880078307140488e-01 7.2592215095240831e-01 6.6614361070348771e-01 6.0181060067169445e-01 5.3526142851899028e-01 5.6534873961061416e-01 6.3563867382605199e-01 7.0358787434562753e-01 7.6672659607082005e-01 8.2257756239866464e-01 8.6881505626284317e-01 9.0342471353308673e-01 9.2484881321620482e-01 9.3210249235952758e-01 9.2484881321620482e-01 9.0342471353308673e-01 8.6881505626284317e-01 8.2257756239866464e-01 7.6672659607082005e-01 7.0358787434562753e-01 6.3563867382605199e-01 5.6534873961061416e-01 5.8786967312234650e-01 6.6095963999744889e-01 7.3161562894664178e-01 7.9726951141132441e-01 8.5534532730742252e-01 9.0342471353308673e-01 9.3941306281347581e-01 9.6169060160542530e-01 9.6923323447634413e-01 9.6169060160542530e-01 9.3941306281347581e-01 9.0342471353308673e-01 8.5534532730742252e-01 7.9726951141132441e-01 7.3161562894664178e-01 6.6095963999744889e-01 5.8786967312234650e-01 6.0181060067169445e-01 6.7663384616172895e-01 7.4896539360271563e-01 8.1617621302233978e-01 8.7562925720353824e-01 9.2484881321620482e-01 9.6169060160542530e-01 9.8449643700540845e-01 9.9221793826024351e-01 9.8449643700540845e-01 9.6169060160542530e-01 9.2484881321620482e-01 8.7562925720353824e-01 8.1617621302233978e-01 7.4896539360271563e-01 6.7663384616172895e-01 6.0181060067169445e-01 6.0653065971263342e-01 6.8194075119034814e-01 7.5483960198900735e-01 8.2257756239866464e-01 8.8249690258459546e-01 9.3210249235952758e-01 9.6923323447634413e-01 9.9221793826024351e-01 1.0000000000000000e+00 9.9221793826024351e-01 9.6923323447634413e-01 9.3210249235952758e-01 8.8249690258459546e-01 8.2257756239866464e-01 7.5483960198900735e-01 6.8194075119034814e-01 6.0653065971263342e-01 6.0181060067169445e-01 6.7663384616172895e-01 7.4896539360271563e-01 8.1617621302233978e-01 8.7562925720353824e-01 9.2484881321620482e-01 9.6169060160542530e-01 9.8449643700540845e-01 9.9221793826024351e-01 9.8449643700540845e-01 9.6169060160542530e-01 9.2484881321620482e-01 8.7562925720353824e-01 8.1617621302233978e-01 7.4896539360271563e-01 6.7663384616172895e-01 6.0181060067169445e-01 5.8786967312234650e-01 6.6095963999744889e-01 7.3161562894664178e-01 7.9726951141132441e-01 8.5534532730742252e-01 9.0342471353308673e-01 9.3941306281347581e-01 9.6169060160542530e-01 9.6923323447634413e-01 9.6169060160542530e-01 9.3941306281347581e-01 9.0342471353308673e-01 8.5534532730742252e-01 7.9726951141132441e-01 7.3161562894664178e-01 6.6095963999744889e-01 5.8786967312234650e-01 5.6534873961061416e-01 6.3563867382605199e-01 7.0358787434562753e-01 7.6672659607082005e-01 8.2257756239866464e-01 8.6881505626284317e-01 9.0342471353308673e-01 9.2484881321620482e-01 9.3210249235952758e-01 9.2484881321620482e-01 9.0342471353308673e-01 8.6881505626284317e-01 8.2257756239866464e-01 7.6672659607082005e-01 7.0358787434562753e-01 6.3563867382605199e-01 5.6534873961061416e-01 5.3526142851899028e-01 6.0181060067169445e-01 6.6614361070348771e-01 7.2592215095240831e-01 7.7880078307140488e-01 8.2257756239866464e-01 8.5534532730742252e-01 8.7562925720353824e-01 8.8249690258459546e-01 8.7562925720353824e-01 8.5534532730742252e-01 8.2257756239866464e-01 7.7880078307140488e-01 7.2592215095240831e-01 6.6614361070348771e-01 6.0181060067169445e-01 5.3526142851899028e-01 4.9891851158647194e-01 5.6094916081447077e-01 6.2091411980609579e-01 6.7663384616172895e-01 7.2592215095240831e-01 7.6672659607082005e-01 7.9726951141132441e-01 8.1617621302233978e-01 8.2257756239866464e-01 8.1617621302233978e-01 7.9726951141132441e-01 7.6672659607082005e-01 7.2592215095240831e-01 6.7663384616172895e-01 6.2091411980609579e-01 5.6094916081447077e-01 4.9891851158647194e-01 4.5783336177161427e-01 5.1475588520860704e-01 5.6978282473092301e-01 6.2091411980609579e-01 6.6614361070348771e-01 7.0358787434562753e-01 7.3161562894664178e-01 7.4896539360271563e-01 7.5483960198900735e-01 7.4896539360271563e-01 7.3161562894664178e-01 7.0358787434562753e-01 6.6614361070348771e-01 6.2091411980609579e-01 5.6978282473092301e-01 5.1475588520860704e-01 4.5783336177161427e-01 4.1361797370441067e-01 4.6504318813405632e-01 5.1475588520860704e-01 5.6094916081447077e-01 6.0181060067169445e-01 6.3563867382605199e-01 6.6095963999744889e-01 6.7663384616172895e-01 6.8194075119034814e-01 6.7663384616172895e-01 6.6095963999744889e-01 6.3563867382605199e-01 6.0181060067169445e-01 5.6094916081447077e-01 5.1475588520860704e-01 4.6504318813405632e-01 4.1361797370441067e-01 3.6787944117144233e-01 4.1361797370441067e-01 4.5783336177161427e-01 4.9891851158647194e-01 5.3526142851899028e-01 5.6534873961061416e-01 5.8786967312234650e-01 6.0181060067169445e-01 6.0653065971263342e-01 6.0181060067169445e-01 5.8786967312234650e-01 5.6534873961061416e-01 5.3526142851899028e-01 4.9891851158647194e-01 4.5783336177161427e-01 4.1361797370441067e-01 3.6787944117144233e-01 GMTSAR_V5.7/.svn/pristine/0b/0bd5555bf079c1fc479b8341691ce519f9e504c2.svn-base000444 015705 000000 00000007664 13505462014 025553 0ustar00sandwellwheel000000 000000 /* * $Id: epr_api.c,v 1.1.1.1 2004-10-28 19:22:21 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "epr_api.h" #include "epr_core.h" #include "epr_string.h" #include "epr_ptrarray.h" #include "epr_swap.h" #include "epr_dddb.h" /*********************************** API ***********************************/ /** * Initializes the ENVISAT product reader API. */ int epr_init_api(EPR_ELogLevel log_level, EPR_FLogHandler log_handler, EPR_FErrHandler err_handler) { if (epr_api.init_flag) { return e_err_none; } epr_clear_err(); /* Determine endian order architecture */ if (epr_is_little_endian_order()) { epr_api.little_endian_order = TRUE; } else if (epr_is_big_endian_order()) { epr_api.little_endian_order = FALSE; } else { epr_set_err(e_err_unknown_endian_order, "epr_init_api: failed to determine endian order"); return epr_get_last_err_code(); } epr_api.log_level = log_level; epr_api.log_handler = log_handler; epr_api.err_handler = err_handler; epr_api.last_err_code = e_err_none; epr_api.last_err_message = NULL; epr_api.init_flag = TRUE; epr_log(e_log_info, EPR_PRODUCT_API_NAME_STR ", version " EPR_PRODUCT_API_VERSION_STR); epr_log(e_log_info, "API successfully initialized"); if (epr_api.little_endian_order) { epr_log(e_log_debug, "running on a little endian order architecture"); } else { epr_log(e_log_debug, "running on a big endian order architecture"); } return epr_get_last_err_code(); } /* Function: epr_close_api Access: public API Changelog: 2002/01/05 mp initial version */ /** * Closes the ENVISAT product reader API by releasing all * resources allocated by the API. */ void epr_close_api() { epr_clear_err(); if (epr_api.init_flag) { epr_log(e_log_info, "ENVISAT product reader API is being closed"); epr_api.last_err_code = e_err_none; epr_free_and_null_string(&epr_api.last_err_message); epr_api.init_flag = FALSE; } } /* Function: epr_set_log_handler Access: public API Changelog: 2002/01/05 nf initial version */ /** * Sets the log handler for the ENVISAT API. * * @param log_handler the new log handler (function pointer), * can be NULL, if logging shall be disabled * @return zero for success, an error code otherwise */ void epr_set_log_handler(EPR_FLogHandler log_handler) { epr_api.log_handler = log_handler; } void epr_log_message(EPR_ELogLevel log_level, const char* log_message) { struct tm* ptm; time_t millis; time(&millis); ptm = gmtime(&millis); fprintf(stdout, "%c %04d/%02d/%02d %02d:%02d:%02d - %s\n", log_level == e_log_debug ? 'D' : log_level == e_log_info ? 'I' : log_level == e_log_warning ? 'W' : log_level == e_log_error ? 'E' : '?', ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, log_message); } GMTSAR_V5.7/.svn/pristine/67/6739c2a13fc61b70a084098ad50bb4fbb61bb683.svn-base000444 015705 000000 00000035627 13505462014 025612 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Creator: Xiaohua(Eric) XU * * (Scripps Institution of Oceanography) * * Date : 10/25/2016 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * ***************************************************************************/ #include "lib_defs.h" #include "lib_functions.h" #include "tiffio.h" #include #include #include #include char *USAGE = "\nUsage: assemble_tops azi_1 azi_2 name_stem1 name_stem2 ... output_stem\n" "\nExample: assemble_tops 1685 9732 " "s1a-iw1-slc-vv-20150706t135900-20150706t135925-006691-008f28-001 " "s1a-iw1-slc-vv-20150706t135925-20150706t135950-006691-008f28-001 " "s1a-iw1-slc-vv-20150706t135900-20150706t135950-006691-008f28-001\n" "\nOutput:s1a-iw1-slc-vv-20150706t135900-20150706t135950-006691-008f28-001." "xml " "s1a-iw1-slc-vv-20150706t135900-20150706t135950-006691-008f28-001.tiff\n\n" "\nNote: output files are bursts that covers area between azi_1 and azi_2, " "set them to 0s to output all bursts\n"; int edit_tree(int, int, struct tree **, int, int, int *, int *); int assemble_tifs(TIFF **, TIFF *, int, int, int, int); int main(int argc, char **argv) { FILE *XML_FILE = NULL, *XML_OUTPUT = NULL; TIFF **tif, *tif_out; int na, nc, ncmx, nlmx, ii, nfiles, ch; char tmp_str[2000]; struct tree **xml_tree; float azi_1, azi_2; int nb_start, nb_end, lpb; if (argc < 5) { fprintf(stderr, "%s", USAGE); die("Error: Incorrect input...", "\n"); } azi_1 = atof(argv[1]); azi_2 = atof(argv[2]); if (azi_1 >= azi_2 && !(azi_1 == 0 && azi_2 == 0)) { die("azi_2 has to be larger than azi_1", ""); } nfiles = argc - 4; null_MEM_STR(); xml_tree = (struct tree **)malloc(nfiles * sizeof(struct tree *)); TIFFSetWarningHandler(NULL); // figure out the sizes nlmx = 0; for (ii = 0; ii < nfiles; ii++) { na = 0; nc = 0; ncmx = 0; strcpy(tmp_str, argv[ii + 3]); strcat(tmp_str, ".xml"); if ((XML_FILE = fopen(tmp_str, "r")) == NULL) die("Couldn't open xml file: \n", tmp_str); while (EOF != (ch = fgetc(XML_FILE))) { ++nc; if (ch == '\n') { ++na; if (nc > ncmx) ncmx = nc; nc = 0; } if (na > nlmx) nlmx = na; } fclose(XML_FILE); } // read in xmls and duplicate them in xml_tree[0] printf("Files to be assembled is %d (x %d lines max)\n", nfiles, nlmx); xml_tree[0] = (struct tree *)malloc(nlmx * nfiles * 5 * sizeof(struct tree)); for (ii = 1; ii < nfiles; ii++) xml_tree[ii] = &xml_tree[0][nlmx * 5 * ii]; for (ii = 0; ii < nfiles; ii++) { strcpy(tmp_str, argv[ii + 3]); strcat(tmp_str, ".xml"); if ((XML_FILE = fopen(tmp_str, "r")) == NULL) die("Couldn't open xml file: \n", tmp_str); get_tree(XML_FILE, xml_tree[ii], 1); fclose(XML_FILE); } for (ii = 1; ii < nfiles; ii++) { xml_tree[ii] = (struct tree *)malloc(nlmx * 5 * sizeof(struct tree)); strcpy(tmp_str, argv[ii + 3]); strcat(tmp_str, ".xml"); if ((XML_FILE = fopen(tmp_str, "r")) == NULL) die("Couldn't open xml file: \n", tmp_str); get_tree(XML_FILE, xml_tree[ii], 1); fclose(XML_FILE); } // modify xml_tree[0] to get parameters from other xml_trees edit_tree(nfiles, nlmx, xml_tree, azi_1, azi_2, &nb_start, &nb_end); printf("Output burst from #%d to #%d ...\n", nb_start, nb_end); strcpy(tmp_str, argv[argc - 1]); strcat(tmp_str, ".xml"); if ((XML_OUTPUT = fopen(tmp_str, "w")) == NULL) die("Couldn't open xml file: \n", tmp_str); // output the tree in the fromat of xml assemble_trees(nfiles, xml_tree, 0, 0, XML_OUTPUT); fclose(XML_OUTPUT); printf("XML file written...\n"); tif = (TIFF **)malloc(nfiles * sizeof(TIFF *)); for (ii = 0; ii < nfiles; ii++) { strcpy(tmp_str, argv[ii + 3]); strcat(tmp_str, ".tiff"); if ((tif[ii] = TIFFOpen(tmp_str, "rb")) == NULL) die("Couldn't open tiff file: \n", tmp_str); } strcpy(tmp_str, argv[argc - 1]); strcat(tmp_str, ".tiff"); if ((tif_out = TIFFOpen(tmp_str, "wb")) == NULL) die("Couldn't open tiff file: \n", tmp_str); search_tree(xml_tree[0], "/product/swathTiming/linesPerBurst/", tmp_str, 1, 0, 1); lpb = (int)str2double(tmp_str); assemble_tifs(tif, tif_out, nfiles, nb_start, nb_end, lpb); for (ii = 0; ii < nfiles; ii++) TIFFClose(tif[ii]); TIFFClose(tif_out); free(tif); for (ii = 1; ii < nfiles; ii++) free(xml_tree[ii]); free(xml_tree); return (1); } int assemble_tifs(TIFF **tif, TIFF *tif_out, int nfiles, int nb_start, int nb_end, int lpb) { int ii, jj; uint32 width, *height, height_all, ni = 0, nii, ni2 = 0; short *buf; uint16 s = 0; TIFFSetWarningHandler(NULL); TIFFGetField(tif[0], TIFFTAG_IMAGEWIDTH, &width); height_all = 0; height = (uint32 *)malloc(sizeof(uint32) * nfiles); for (ii = 0; ii < nfiles; ii++) { TIFFGetField(tif[ii], TIFFTAG_IMAGELENGTH, &height[ii]); height_all = height_all + height[ii]; } TIFFSetField(tif_out, TIFFTAG_IMAGEWIDTH, width); TIFFSetField(tif_out, TIFFTAG_IMAGELENGTH, (nb_end - nb_start + 1) * lpb); TIFFSetField(tif_out, TIFFTAG_BITSPERSAMPLE, sizeof(short) * 8 * 2); TIFFSetField(tif_out, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_COMPLEXINT); TIFFSetField(tif_out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); buf = (short *)_TIFFmalloc(TIFFScanlineSize(tif_out) * 2); // make some extra space in case the width differ for other images printf("Writing TIFF image Width(%d) X Height(%d)...\n", width, (nb_end - nb_start + 1) * lpb); for (ii = 0; ii < nfiles; ii++) { for (jj = 0; jj < height[ii]; jj++) { if (ni >= lpb * (nb_start - 1) && ni < lpb * nb_end) { nii = jj; TIFFReadScanline(tif[ii], buf, nii, s); if (TIFFFlushData(tif_out)) TIFFWriteScanline(tif_out, buf, ni2, s); ni2++; } ni++; } } _TIFFfree(buf); free(height); return (1); } int add_index(struct tree *T, int ct, int ii) { int i; // printf("hahaha %d\n",ii); for (i = 0; i < ct; i++) { if (T[i].parent != -1) T[i].parent = T[i].parent + ii; if (T[i].sibl != -1) T[i].sibl = T[i].sibl + ii; if (T[i].sibr != -1) T[i].sibr = T[i].sibr + ii; if (T[i].firstchild != -1) T[i].firstchild = T[i].firstchild + ii; } // printf("hahaha\n"); return (1); } double time2double(char *str) { double k; char s_name[200], s_out[200]; cat_nums(s_name, str); str_date2JD(s_out, s_name); k = str2double(s_out); return (k); } int add_branch(struct tree **T, int nlmx, int qq, char *str, char *term, int mode) { double t1, t2; int ii1, jj1, kk1, ct, nn1, ii2, jj2, kk2, nn2; char tmp_c[60000]; if (mode == 1) { // consecutive ii1 = search_tree(T[0], str, tmp_c, 3, 0, 1); nn1 = (int)str2double(tmp_c); kk1 = T[0][ii1].firstchild; for (jj1 = 1; jj1 < nn1; jj1++) kk1 = T[0][kk1].sibr; ii2 = search_tree(T[qq], str, tmp_c, 3, 0, 1); T[0][kk1].sibr = T[0][ii2 + nlmx * qq * 5].firstchild; nn2 = (int)str2double(tmp_c); kk2 = T[0][ii2 + nlmx * qq * 5].firstchild; for (jj2 = 1; jj2 < nn2; jj2++) { T[0][kk2].parent = ii1; kk2 = T[0][kk2].sibr; } T[0][kk2].parent = ii1; sprintf(tmp_c, "%s count=\"%d\"", term, nn1 + nn2); strcpy(T[0][ii1].name, tmp_c); } else if (mode == 2) { // in order of time, may have overlap ii1 = search_tree(T[0], str, tmp_c, 3, 0, 1); nn1 = (int)str2double(tmp_c); kk1 = T[0][ii1].firstchild; for (jj1 = 1; jj1 < nn1; jj1++) kk1 = T[0][kk1].sibr; t1 = time2double(T[0][T[0][T[0][kk1].firstchild].firstchild].name); ii2 = search_tree(T[qq], str, tmp_c, 3, 0, 1); nn2 = (int)str2double(tmp_c); // printf("%d %lf\n",nn1,t1); t2 = t1 - 1; ct = 0; kk2 = T[0][ii2 + nlmx * qq * 5].firstchild; t2 = time2double(T[0][T[0][T[0][kk2].firstchild].firstchild].name); while (t2 - 1e-6 / 86400.0 < t1) { kk2 = T[0][kk2].sibr; t2 = time2double(T[0][T[0][T[0][kk2].firstchild].firstchild].name); ct++; } T[0][kk1].sibr = kk2; kk2 = T[0][ii2 + nlmx * qq * 5].firstchild; for (jj2 = 1; jj2 < nn2 - ct; jj2++) { T[0][kk2].parent = ii1; kk2 = T[0][kk2].sibr; } T[0][kk2].parent = ii1; sprintf(tmp_c, "%s count=\"%d\"", term, nn1 + nn2 - ct); strcpy(T[0][ii1].name, tmp_c); } else if (mode == 3) { // same as mode 2, but time comes in second child ii1 = search_tree(T[0], str, tmp_c, 3, 0, 1); nn1 = (int)str2double(tmp_c); kk1 = T[0][ii1].firstchild; for (jj1 = 1; jj1 < nn1; jj1++) kk1 = T[0][kk1].sibr; t1 = time2double(T[0][T[0][T[0][T[0][kk1].firstchild].sibr].firstchild].name); ii2 = search_tree(T[qq], str, tmp_c, 3, 0, 1); nn2 = (int)str2double(tmp_c); // printf("%d %lf\n",nn1,t1); t2 = t1 - 1; ct = 0; kk2 = T[0][ii2 + nlmx * qq * 5].firstchild; t2 = time2double(T[0][T[0][T[0][T[0][kk2].firstchild].sibr].firstchild].name); while (t2 - 1e-6 / 86400.0 < t1) { kk2 = T[0][kk2].sibr; t2 = time2double(T[0][T[0][T[0][T[0][kk2].firstchild].sibr].firstchild].name); ct++; } // printf("%d %lf\n",nn2,t2); T[0][kk1].sibr = kk2; kk2 = T[0][ii2 + nlmx * qq * 5].firstchild; for (jj2 = 1; jj2 < nn2 - ct; jj2++) { T[0][kk2].parent = ii1; kk2 = T[0][kk2].sibr; } T[0][kk2].parent = ii1; sprintf(tmp_c, "%s count=\"%d\"", term, nn1 + nn2 - ct); strcpy(T[0][ii1].name, tmp_c); } return (1); } int edit_leaf(struct tree **T, int qq, char *str, int mode) { int ii, jj; double x1, x2; char tmp_c[200]; if (mode == 1) { // add int numbers ii = search_tree(T[0], str, tmp_c, 1, 0, 1); x1 = str2double(tmp_c); jj = search_tree(T[qq], str, tmp_c, 1, 0, 1); x2 = str2double(tmp_c); sprintf(tmp_c, "%d", (int)(x1 + x2 + 1e-6)); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); } else if (mode == 2) { // replace with the second ii = search_tree(T[0], str, tmp_c, 1, 0, 1); jj = search_tree(T[qq], str, tmp_c, 1, 0, 1); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); } return (1); } int edit_tree(int nfiles, int nlmx, struct tree **T, int azi_1, int azi_2, int *nb_start, int *nb_end) { /* note this is only editing firstchild and sibr, thus its not really getting * a good tree structure */ int ct, qq, i, ii, jj, lpb; char tmp_c[60000]; double dta, t0, t1, t2; // char s_name[200],s_out[200]; // double t1,t2; ct = 0; while (T[0][ct].sibr != -1 || T[0][ct].firstchild != -1) { if (T[0][ct].sibr != -1) ct = T[0][ct].sibr; else ct = T[0][ct].firstchild; } // printf("Original(first) xml has %d tree elements.\n",ct); if (nfiles > 1) { for (qq = 1; qq < nfiles; qq++) { ct = 0; while (T[qq][ct].sibr != -1 || T[qq][ct].firstchild != -1) { if (T[qq][ct].sibr != -1) ct = T[qq][ct].sibr; else ct = T[qq][ct].firstchild; } add_index(&T[0][nlmx * qq * 5], ct + 1, nlmx * qq * 5); } /* start editing the useful information to create one xml_tree */ for (qq = 1; qq < nfiles; qq++) { /* start editing trunks of parameters */ // burst List add_branch(T, nlmx, qq, "/product/swathTiming/burstList/", "burstList", 1); // orbit List add_branch(T, nlmx, qq, "/product/generalAnnotation/orbitList/", "orbitList", 2); // dc estimate add_branch(T, nlmx, qq, "/product/dopplerCentroid/dcEstimateList/", "dcEstimateList", 2); // azimuth fm rate add_branch(T, nlmx, qq, "/product/generalAnnotation/azimuthFmRateList/", "azimuthFmRateList", 2); // antenna pattern list add_branch(T, nlmx, qq, "/product/antennaPattern/antennaPatternList/", "antennaPatternList", 3); // geolocation grid, not used in our program, but anyway add_branch(T, nlmx, qq, "/product/geolocationGrid/geolocationGridPointList/", "geolocationGridPointList", 2); /* start editing other individual parameters */ edit_leaf(T, qq, "/product/imageAnnotation/imageInformation/numberOfLines/", 1); edit_leaf(T, qq, "/product/adsHeader/stopTime/", 2); } } /* edit on how many burst to output */ search_tree(T[0], "/product/swathTiming/linesPerBurst/", tmp_c, 1, 0, 1); lpb = (int)str2double(tmp_c); ii = search_tree(T[0], "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); ct = (int)str2double(tmp_c); if (!(azi_1 == 0 && azi_2 == 0)) { printf("Editing burst output based on input azimuth references...\n"); search_tree(T[0], "/product/imageAnnotation/imageInformation/azimuthTimeInterval/", tmp_c, 1, 0, 1); dta = str2double(tmp_c); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 2, 4, 1); t0 = str2double(tmp_c); t2 = t0; t1 = t0; *nb_start = -1; *nb_end = -1; for (i = 2; i <= ct; i++) { search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 2, 4, i); t2 = str2double(tmp_c); if ((t2 - t0) * 86400.0 / dta >= azi_1 && (t1 - t0) * 86400.0 / dta <= azi_1) *nb_start = i - 1; if ((t2 - t0) * 86400.0 / dta >= azi_2 && (t1 - t0) * 86400.0 / dta <= azi_2) *nb_end = i - 1; t1 = t2; } if (*nb_start == -1) *nb_start = 1; if (*nb_end == -1) *nb_end = ct; ii = search_tree(T[0], "/product/imageAnnotation/imageInformation/numberOfLines/", tmp_c, 1, 0, 1); sprintf(tmp_c, "%d", (int)(-(*nb_start) + (*nb_end) + 1) * lpb); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); ii = search_tree(T[0], "/product/imageAnnotation/imageInformation/productFirstLineUtcTime/", tmp_c, 1, 0, 1); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 1, 4, *nb_start); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); ii = search_tree(T[0], "/product/adsHeader/startTime/", tmp_c, 1, 0, 1); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 1, 4, *nb_start); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); if (*nb_end != ct) { ii = search_tree(T[0], "/product/imageAnnotation/imageInformation/productLastLineUtcTime/", tmp_c, 1, 0, 1); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 1, 4, *nb_start); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 1, 4, *nb_end + 1); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); ii = search_tree(T[0], "/product/adsHeader/stopTime/", tmp_c, 1, 0, 1); search_tree(T[0], "/product/swathTiming/burstList/burst/azimuthTime/", tmp_c, 1, 4, *nb_end + 1); strcpy(T[0][T[0][ii].firstchild].name, tmp_c); } ii = search_tree(T[0], "/product/swathTiming/burstList/burst/", tmp_c, 1, 4, *nb_end); T[0][ii].sibr = -1; ii = search_tree(T[0], "/product/swathTiming/burstList/", tmp_c, 3, 0, 1); jj = search_tree(T[0], "/product/swathTiming/burstList/burst/", tmp_c, 1, 4, *nb_start); T[0][ii].firstchild = jj; ii = search_tree(T[0], "/product/swathTiming/burstList/", tmp_c, 1, 0, 1); sprintf(tmp_c, "%s count=\"%d\"", "burstList", *nb_end - *nb_start + 1); strcpy(T[0][ii].name, tmp_c); } else { *nb_start = 1; *nb_end = ct; } return (1); } GMTSAR_V5.7/.svn/pristine/67/673f6cca90dbcb78b2759c53287022028dba3caa.svn-base000444 015705 000000 00000000510 13505462014 025657 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = read_data_file_dpaf CSRCS = read_data_file_dpaf.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include LIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(LIBS) all: $(PROG) clean: rm -f $(OBJS) tags core *.c.* install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) GMTSAR_V5.7/.svn/pristine/58/58e7b1128f462263515190fd9085e2853b266b05.svn-base000444 015705 000000 00000005454 13505462013 025111 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # D. Sandwell FEB 4 2010 # M. Wei MAY 4 2010 - ENVISAT # # Align a slave image to a master image and check results # alias rm 'rm -f' unset noclobber # # check the number of arguments # if ($#argv < 3) then echo "" echo "Usage: align.csh SAT master_name slave_name [supermaster_name]" echo "" echo " The supermaster_namestem is required if this is secondary alignment." echo " SAT = ERS or ENVI or ALOS or generic SAT" echo "" echo "Example: align.csh ALOS IMG-HH-ALPSRP055750660-H1.0__A IMG-HH-ALPSRP049040660-H1.0__A " echo "" exit 1 endif set SAT = $1 if ($SAT == "CSK_RAW") set SAT = `echo "SAT"` if (($SAT != ENVI) && ($SAT != ERS) && ($SAT != SAT) && ($SAT != ALOS)) then echo "" echo " SAT must be ERS, ENVI, or generic SAT" echo "" exit 1 endif # # focus the master if necessary # Do it no matter what for now. Put SLC_file to PRM. Might not be necessary # if(! -f $2.SLC) then echo "focussing master" sarp.csh $2.PRM else update_PRM $2.PRM SLC_file $2.SLC endif # # focus the slave image # # check the range sampling rate # set rng_samp_rate_m = `grep rng_samp_rate $2.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate $3.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ($rng_samp_rate_m != $rng_samp_rate_s) then echo "The range sampling rate for master and slave differ" echo "Need to run the interferogram in steps until process2pass.csh is fixed" exit 1 endif echo "align.csh" echo "focusing slave" sarp.csh $3.PRM # # get the starting alignment parameters and run xcorr # cp $2.PRM $2.PRM0 cp $3.PRM $3.PRM0 if($#argv == 4) then set RSHIFT = `$1_baseline $4.PRM $3.PRM | grep rshift | awk '{print $3}'` set ASHIFT = `$1_baseline $4.PRM $3.PRM | grep ashift | awk '{print $3}'` # # use the PRF of the supermaster in the surrogate master # set PRF = `grep PRF $4.PRM | awk '{print $3}'` update_PRM $2.PRM PRF $PRF else set RSHIFT = `$1_baseline $2.PRM $3.PRM | grep rshift | awk '{print $3}'` set ASHIFT = `$1_baseline $2.PRM $3.PRM | grep ashift | awk '{print $3}'` endif update_PRM $3.PRM rshift $RSHIFT update_PRM $3.PRM ashift $ASHIFT echo "align.csh" echo "correlate master and slave to find offset parameters" if( $SAT == "ERS") then xcorr $2.PRM $3.PRM -xsearch 128 -ysearch 128 -nx 20 -ny 50 else xcorr $2.PRM $3.PRM -xsearch 128 -ysearch 256 -nx 20 -ny 50 endif # mv $3.SLC $3.SLC0 mv $3.PRM junk.PRM cp $2.PRM0 $2.PRM grep -v shift < junk.PRM > $3.PRM # # put in the alignment parameters # fitoffset.csh 3 3 freq_xcorr.dat 18 >> $3.PRM mv freq_xcorr.dat xcorr_$2_$3.dat0 # # refocus the second image # echo "align.csh" echo "refocus slave" sarp.csh $3.PRM # rm *SLC0 rm junk* #done GMTSAR_V5.7/.svn/pristine/58/5869c372ce1668cd893aff4feaf90a928934d76f.svn-base000444 015705 000000 00000200032 13505462014 025662 0ustar00sandwellwheel000000 000000 /*********************************************************************************************************************************** asa_cat.c version 1.3 Concatenates Envisat ASAR Image Mode / Wide Swath Mode Level 0 data compiled on a Linux with command: gcc -O2 -lm asa_cat.c -o asa_cat Dochul Yang and Vikas Gudipati version 1.0 July 15 2008 This code is based on ASAR IM Mode Level 0 data decoder written by Sean M Buckley. version 1.1 July 15 2008 : First working version version 1.2 August 19 2008 : Replaced the use of roundl() by floor(), to round off floats to integers : Included header for older gcc compilers. version 1.3 Sept 10 2008 : Concatenates files even if they are non-overlapping (by filling (127,127 or (128,128) for (I,Q) pairs) ***********************************************************************************************************************************/ #include #include #include #include /** * The EPR_DataTypeId enumeration lists all possible data * types for field elements in ENVISAT dataset records. */ // added by Z. Li on 16/02/2005 // extracted from ESA BEAM epr_api package #define fileSize 100 /* Maximum number of file that can be concatenated. later change */ enum EPR_DataTypeId { /** The ID for unknown types. */ e_tid_unknown = 0, /** An array of unsigned 8-bit integers, C type is uchar* */ e_tid_uchar = 1, /** An array of signed 8-bit integers, C type is char* */ e_tid_char = 2, /** An array of unsigned 16-bit integers, C type is ushort* */ e_tid_ushort = 3, /** An array of signed 16-bit integers, C type is short* */ e_tid_short = 4, /** An array of unsigned 32-bit integers, C type is ulong* */ e_tid_ulong = 5, /** An array of signed 32-bit integers, C type is long* */ e_tid_long = 6, /** An array of 32-bit floating point numbers, C type is float* */ e_tid_float = 7, /** An array of 64-bit floating point numbers, C type is double* */ e_tid_double = 8, /** A zero-terminated ASCII string, C type is char* */ e_tid_string = 11, /** An array of unsigned character, C type is uchar* */ e_tid_spare = 13, /** A time (MJD) structure, C type is EPR_Time */ e_tid_time = 21 }; /* structures */ struct mphStruct { char product[62]; char procStage[1]; char refDoc[23]; char spare1[40]; char acquisitionStation[20]; char procCenter[6]; char procTime[27]; char softwareVer[14]; char spare2[40]; char sensingStart[27]; char sensingStop[27]; char spare3[40]; char phase[1]; int cycle; int relOrbit; int absOrbit; char stateVectorTime[27]; double deltaUt1; double xPosition; double yPosition; double zPosition; double xVelocity; double yVelocity; double zVelocity; char vectorSource[2]; char spare4[40]; char utcSbtTime[27]; unsigned int satBinaryTime; unsigned int clockStep; char spare5[32]; char leapUtc[27]; int leapSign; int leapErr; char spare6[40]; int productErr; int totSize; int sphSize; int numDsd; int dsdSize; int numDataSets; char spare7[40]; }; struct dsdStruct { char dsName[28]; char dsType[1]; char filename[62]; int dsOffset; int dsSize; int numDsr; int dsrSize; }; struct sphStruct { char sphDescriptor[28]; double startLat; double startLon; double stopLat; double stopLon; double satTrack; char spare1[50]; int ispErrorsSignificant; int missingIspsSignificant; int ispDiscardedSignificant; int rsSignificant; char spare2[50]; int numErrorIsps; double errorIspsThresh; int numMissingIsps; double missingIspsThresh; int numDiscardedIsps; double discardedIspsThresh; int numRsIsps; double rsThresh; char spare3[100]; char txRxPolar[5]; char swath[3]; char spare4[41]; struct dsdStruct dsd[4]; }; struct sphAuxStruct { char sphDescriptor[28]; char spare1[51]; struct dsdStruct dsd[1]; }; struct dsrTimeStruct { int days; int seconds; int microseconds; }; struct calPulseStruct { float nomAmplitude[32]; float nomPhase[32]; }; struct nomPulseStruct { float pulseAmpCoeff[4]; float pulsePhsCoeff[4]; float pulseDuration; }; struct dataConfigStruct { char echoCompMethod[4]; char echoCompRatio[3]; char echoResampFlag[1]; char initCalCompMethod[4]; char initCalCompRatio[3]; char initCalResampFlag[1]; char perCalCompMethod[4]; char perCalCompRatio[3]; char perCalResampFlag[1]; char noiseCompMethod[4]; char noiseCompRatio[3]; char noiseResampFlag[1]; }; struct swathConfigStruct { unsigned short numSampWindowsEcho[7]; unsigned short numSampWindowsInitCal[7]; unsigned short numSampWindowsPerCal[7]; unsigned short numSampWindowsNoise[7]; float resampleFactor[7]; }; struct swathIdStruct { unsigned short swathNum[7]; unsigned short beamSetNum[7]; }; struct timelineStruct { unsigned short swathNums[7]; unsigned short mValues[7]; unsigned short rValues[7]; unsigned short gValues[7]; }; /* problems begin with field 132 - check the double statement */ struct testStruct { float operatingTemp; float rxGainDroopCoeffSmb[16]; /* this needs to be converted to a double array of eight elements */ // double rxGainDroopCoeffSmb[ 8 ]; /* Something wrong here, why?*/ }; struct insGadsStruct { /* see pages 455-477 for the 142 fields associated with this gads - got length of 121712 bytes */ struct dsrTimeStruct dsrTime; unsigned int dsrLength; float radarFrequency; float sampRate; float offsetFreq; struct calPulseStruct calPulseIm0TxH1; struct calPulseStruct calPulseIm0TxV1; struct calPulseStruct calPulseIm0TxH1a; struct calPulseStruct calPulseIm0TxV1a; struct calPulseStruct calPulseIm0RxH2; struct calPulseStruct calPulseIm0RxV2; struct calPulseStruct calPulseIm0H3; struct calPulseStruct calPulseIm0V3; struct calPulseStruct calPulseImTxH1[7]; struct calPulseStruct calPulseImTxV1[7]; struct calPulseStruct calPulseImTxH1a[7]; struct calPulseStruct calPulseImTxV1a[7]; struct calPulseStruct calPulseImRxH2[7]; struct calPulseStruct calPulseImRxV2[7]; struct calPulseStruct calPulseImH3[7]; struct calPulseStruct calPulseImV3[7]; struct calPulseStruct calPulseApTxH1[7]; struct calPulseStruct calPulseApTxV1[7]; struct calPulseStruct calPulseApTxH1a[7]; struct calPulseStruct calPulseApTxV1a[7]; struct calPulseStruct calPulseApRxH2[7]; struct calPulseStruct calPulseApRxV2[7]; struct calPulseStruct calPulseApH3[7]; struct calPulseStruct calPulseApV3[7]; struct calPulseStruct calPulseWvTxH1[7]; struct calPulseStruct calPulseWvTxV1[7]; struct calPulseStruct calPulseWvTxH1a[7]; struct calPulseStruct calPulseWvTxV1a[7]; struct calPulseStruct calPulseWvRxH2[7]; struct calPulseStruct calPulseWvRxV2[7]; struct calPulseStruct calPulseWvH3[7]; struct calPulseStruct calPulseWvV3[7]; struct calPulseStruct calPulseWsTxH1[5]; struct calPulseStruct calPulseWsTxV1[5]; struct calPulseStruct calPulseWsTxH1a[5]; struct calPulseStruct calPulseWsTxV1a[5]; struct calPulseStruct calPulseWsRxH2[5]; struct calPulseStruct calPulseWsRxV2[5]; struct calPulseStruct calPulseWsH3[5]; struct calPulseStruct calPulseWsV3[5]; struct calPulseStruct calPulseGmTxH1[5]; struct calPulseStruct calPulseGmTxV1[5]; struct calPulseStruct calPulseGmTxH1a[5]; struct calPulseStruct calPulseGmTxV1a[5]; struct calPulseStruct calPulseGmRxH2[5]; struct calPulseStruct calPulseGmRxV2[5]; struct calPulseStruct calPulseGmH3[5]; struct calPulseStruct calPulseGmV3[5]; struct nomPulseStruct nomPulseIm[7]; struct nomPulseStruct nomPulseAp[7]; struct nomPulseStruct nomPulseWv[7]; struct nomPulseStruct nomPulseWs[5]; struct nomPulseStruct nomPulseGm[5]; float azPatternIs1[101]; float azPatternIs2[101]; float azPatternIs3Ss2[101]; float azPatternIs4Ss3[101]; float azPatternIs5Ss4[101]; float azPatternIs6Ss5[101]; float azPatternIs7[101]; float azPatternSs1[101]; float rangeGateBias; float rangeGateBiasGm; float adcLutI[255]; float adcLutQ[255]; char spare1[648]; float full8LutI[256]; float full8LutQ[256]; float fbaq4LutI[4096]; float fbaq3LutI[2048]; float fbaq2LutI[1024]; float fbaq4LutQ[4096]; float fbaq3LutQ[2048]; float fbaq2LutQ[1024]; float fbaq4NoAdc[4096]; float fbaq3NoAdc[2048]; float fbaq2NoAdc[1024]; float smLutI[16]; float smLutQ[16]; struct dataConfigStruct dataConfigIm; struct dataConfigStruct dataConfigAp; struct dataConfigStruct dataConfigWs; struct dataConfigStruct dataConfigGm; struct dataConfigStruct dataConfigWv; struct swathConfigStruct swathConfigIm; struct swathConfigStruct swathConfigAp; struct swathConfigStruct swathConfigWs; struct swathConfigStruct swathConfigGm; struct swathConfigStruct swathConfigWv; unsigned short perCalWindowsEc; unsigned short perCalWindowsMs; struct swathIdStruct swathIdIm; struct swathIdStruct swathIdAp; struct swathIdStruct swathIdWs; struct swathIdStruct swathIdGm; struct swathIdStruct swathIdWv; unsigned short initCalBeamSetWv; unsigned short beamSetEc; unsigned short beamSetMs; unsigned short calSeq[32]; struct timelineStruct timelineIm; struct timelineStruct timelineAp; struct timelineStruct timelineWs; struct timelineStruct timelineGm; struct timelineStruct timelineWv; unsigned short mEc; char spare2[44]; float refElevAngleIs1; float refElevAngleIs2; float refElevAngleIs3Ss2; float refElevAngleIs4Ss3; float refElevAngleIs5Ss4; float refElevAngleIs6Ss5; float refElevAngleIs7; float refElevAngleSs1; char spare3[64]; float calLoopRefIs1[128]; float calLoopRefIs2[128]; float calLoopRefIs3Ss2[128]; float calLoopRefIs4Ss3[128]; float calLoopRefIs5Ss4[128]; float calLoopRefIs6Ss5[128]; float calLoopRefIs7[128]; float calLoopRefSs1[128]; char spare4[5120]; struct testStruct im; struct testStruct ap; struct testStruct ws; struct testStruct gm; struct testStruct wv; float swstCalP2; char spare5[72]; }; // added by Z. Li on 16/02/2005 typedef enum EPR_DataTypeId EPR_EDataTypeId; typedef int boolean; typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned int uint; typedef unsigned long ulong; /* function prototypes */ struct mphStruct readMph(const char *mphPtr, const int printMphIfZero); struct sphStruct readSph(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph); struct sphAuxStruct readSphAux(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph); // added by Z. Li on 16/02/2005 int is_bigendian(); void byte_swap_short(short *buffer, uint number_of_swaps); void byte_swap_ushort(ushort *buffer, uint number_of_swaps); void byte_swap_long(long *buffer, uint number_of_swaps); void byte_swap_ulong(ulong *buffer, uint number_of_swaps); void byte_swap_float(float *buffer, uint number_of_swaps); /* new byte_swap_int type added below*/ void byte_swap_int(int *buffer, uint number_of_swaps); void byte_swap_uint(uint *buffer, uint number_of_swaps); /* new byte_swap_uint type added above*/ void swap_endian_order(EPR_EDataTypeId data_type_id, void *elems, uint num_elems); double date2MJD(int yr, int mo, int day, int hr, int min, double sec); void bubbleSort(double array[], int len); /**********************************************************************************************************************************/ int main(int argc, char *argv[]) { /* variable definitions */ FILE *imFilePtr; FILE *outFilePtr; // FILE *blockIdFilePtr; // FILE *insFilePtr; char imFileName[200]; char outFileName[200]; // char blockIdFileName[ 200 ] = "blockId"; // char insFileName[ 200 ]; char syear[4]; /* need to figure out */ char smonth[3]; char sday[3]; char shh[3]; char smm[3]; char sss[3]; // char sfracsec_start[6]; // char sfracsec_end[6]; char sensingStopTime[32]; char ssensingStopTime[32]; // char sensingStartTime[27]; // char ssensingStartTime[27]; // char start_lat[20]; // char sstart_lat[20]; // char stop_lon[20]; // char sstop_lon[20]; char totsize[22]; char ds_size[21]; char num_dsr[11]; char secduration[16]; char *mphPtr; char *sphPtr; char *mphPtr2 = NULL; char *sphPtr2 = NULL; // char *gadsPtr; // unsigned char onBoardTimeLSB; // unsigned char auxTxMonitorLevel; // unsigned char mdsrBlockId[ 200 ]; // unsigned char mdsrCheck[ 63 ]; // unsigned char beamAdjDeltaCodeword; // unsigned char compressionRatio; // unsigned char echoFlag; // unsigned char noiseFlag; // unsigned char calFlag; // unsigned char calType; // unsigned char spare; // unsigned char antennaBeamSetNumber; // unsigned char TxPolarization; // unsigned char RxPolarization; // unsigned char calibrationRowNumber; // unsigned char chirpPulseBandwidthCodeword; unsigned char mdsrLineChar[20000]; unsigned char tempmdsrLineChar[20000]; int printImMphIfZero = 1; int printImSphIfZero = 1; // int printImMdsrIfZero = 1; // int printInsMphIfZero = 1; // int printInsSphIfZero = 1; // int printBlockIdIfZero = 1; // int noAdcIfZero = 1; int firstTimeEqualsZero = 0; int mphSize = 1247; /* fixed size */ // int outSamples = 0; int outLines = 0; int duplicateLines = 0; // int sampleShift = 0; int bytesRead = 0; int bytesToBeWritten = 0; // int nonOverlappingLineIfZero = 0; // int outType = 4; int i; int ii; int j; // int k; // int m; // int n; // int counter = 1; int numFiles; int mdsrDsrTimeDays; int mdsrDsrTimeSeconds; int mdsrDsrTimeMicroseconds; int mdsrGsrtTimeDays; int mdsrGsrtTimeSeconds; int mdsrGsrtTimeMicroseconds; // int mdsrLineInt; int tempmdsrDsrTimeDays; int tempmdsrDsrTimeSeconds; int tempmdsrDsrTimeMicroseconds; int tempmdsrGsrtTimeDays; int tempmdsrGsrtTimeSeconds; int tempmdsrGsrtTimeMicroseconds; int newmdsrDsrTimeDays; int newmdsrDsrTimeSeconds; int newmdsrDsrTimeMicroseconds; int oldmdsrDsrTimeDays = 0; int oldmdsrDsrTimeSeconds = 0; int oldmdsrDsrTimeMicroseconds = 0; int file_order[fileSize]; /* need to change */ int totfilesize; // int ifracsec_diff; int imjd_diffsec; int duration; int oldFrameID; int FrameID; int catAbortFlag = 0; int jjj, kkk; int tempsamplecount; unsigned int modePacketCount = 0; unsigned int modePacketCountOld = 0; unsigned int tempmodePacketCount; // unsigned int onBoardTimeIntegerSeconds = 0; // short upConverterLevel; // short downConverterLevel; unsigned short tempmdsrIspLength; unsigned short tempmdsrILen; // unsigned short resamplingFactor; // unsigned short onBoardTimeMSW; // unsigned short onBoardTimeLSW; unsigned short mdsrIspLength; unsigned short mdsrILen; unsigned short mdsrCrcErrs; unsigned short mdsrRsErrs; unsigned short mdsrSpare1; unsigned short mdsrPacketIdentification; unsigned short mdsrPacketSequenceControl; unsigned short mdsrPacketLength; unsigned short tempmdsrPacketLength; unsigned short mdsrPacketDataHeader[15]; unsigned short tempmdsrPacketDataHeader[15]; // unsigned short onBoardTimeFractionalSecondsInt = 0; // unsigned short TxPulseLengthCodeword; // unsigned short priCodeword; // unsigned short priCodewordOld; // unsigned short priCodewordOldOld; // unsigned short windowStartTimeCodeword; // unsigned short windowStartTimeCodeword0; // unsigned short windowStartTimeCodewordOld; // unsigned short windowStartTimeCodewordOldOld; // unsigned short windowLengthCodeword; // unsigned short modeID; // unsigned short cyclePacketCount; // float mdsrLine[ 20000 ]; // double onBoardTimeFractionalSeconds; // double TxPulseLength; // double beamAdjDelta; // double chirpPulseBandwidth; // double c = 299792458.; // double timeCode; // double pri; // double windowStartTime; // double windowLength; // double curser; double newt, oldt, delta1, est_pri; double temptimesec; int nmsl, msl; int year; int month; int day; int hh; int mm; double ss; double MJD[fileSize]; /* need to change */ double MJD_original[fileSize]; /* need to change */ double mjd_start = 0.0; double mjd_end = 0.0; double mjd_diffsec; // double fracsec_start; // double fracsec_end; // double fracsec_diff; char stmonthstr[4]; char emonthstr[4]; int stday, styear, stmonth = 0, sthour, stmin; int eday, eyear, emonth = 0, ehour, emin; double stseconds; double eseconds; struct mphStruct mph; // struct mphStruct mphIns; struct sphStruct sph; // struct sphAuxStruct sphIns; // struct insGadsStruct insGads; int is_littlendian; /* usage note */ printf("\n*** asa_cat v1.3 by Dochul Yang and Vikas Gudipati***\n\n"); if ((argc - 1) < 3) { printf("Concatenates Envisat ASAR Image Mode / Wide Swath Mode Level 0 " "data.\n\n"); printf("Usage: asa_cat <...> " " [catAbort]\n\n"); printf(" NumFiles2Cat Number of files to be concatenated (positive " "integer, Max: 100) \n"); printf(" asa_file1 First file to be merged (along track)\n"); printf(" asa_file2 Second file to be merged (along track)\n"); printf(" ... Rest of files to be merged (along track)\n"); printf(" out_file output data file\n"); printf(" [catAbort] Flag to discontinue concatenation if " "non-overlaping frames are found. (0: Discontinue, 1: Continue, " "Default: 0)\n"); printf("Notes:\n\n"); return 0; } sscanf(argv[1], "%d", &numFiles); printf("\nNumber of input files: %d\n", numFiles); if (numFiles < 1) { printf("ERROR: Number of files to concatenate is less than one(1). Look at " "command usage.\n\n"); exit(-1); } if (numFiles > 100) { printf("ERROR: Maximum number of files allowed for concatenation exceeded. " "Max: 100. Look at command usage.\n\n"); exit(-1); } if ((argc - 3) < numFiles) { printf("\nERROR: File names missing in input list. %s\n", argv[1]); printf("\nNumber of files to be concatenated. %s\n", argv[1]); printf("\nNumber of input file names provided. %d\n", (argc - 3)); exit(-1); } for (ii = 0; ii < numFiles; ii++) { printf("Input file %d : %s\n", ii + 1, argv[ii + 2]); } sscanf(argv[numFiles + 2], "%s", outFileName); printf("Output file: %s\n\n", outFileName); if (argc > (numFiles + 3)) { sscanf(argv[numFiles + 3], "%d", &catAbortFlag); } if (catAbortFlag == 0) { printf("catAbortFlag: %d. Files will NOT be concatenated if they don't " "overlap.\n", catAbortFlag); } else if (catAbortFlag == 1) { printf("catAbortFlag: %d. Files will be concatenated even if they don't " "overlap.\n", catAbortFlag); } if (is_bigendian()) { printf("It is running under Unix or Mac...\n"); is_littlendian = 0; } else { printf("It is running under Linux or Windows...\n"); is_littlendian = 1; } /* begin loop over files for extract mph product name (DATE + HHMMSS) and sort * by MJD*/ for (ii = 0; ii < numFiles; ii++) { /* open image file */ sscanf(argv[ii + 2], "%s", imFileName); printf("\nOpening file: %s\n", imFileName); imFilePtr = fopen(imFileName, "rb"); if (imFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", imFileName); printf("\n"); exit(-1); } /* read image MPH */ printf("Reading MPH...\n"); mphPtr = (char *)malloc(sizeof(char) * mphSize); if (mphPtr == NULL) { printf("ERROR - mph allocation memory\n"); exit(-1); } if ((fread(mphPtr, sizeof(char), mphSize, imFilePtr)) != mphSize) { printf("ERROR - mph read error\n\n"); exit(-1); } mph = readMph(mphPtr, printImMphIfZero); /* extract information from MPH */ memcpy(syear, mphPtr + 23, 4); memcpy(smonth, mphPtr + 27, 2); memcpy(sday, mphPtr + 29, 2); memcpy(shh, mphPtr + 32, 2); memcpy(smm, mphPtr + 34, 2); memcpy(sss, mphPtr + 36, 2); year = atoi(syear); month = atoi(smonth); day = atoi(sday); hh = atoi(shh); mm = atoi(smm); ss = atof(sss); printf("Date and time of first line of file (yyyy mo dd hh mm ss): %d %d " "%d %d %d %f\n", year, month, day, hh, mm, ss); MJD[ii] = date2MJD(year, month, day, hh, mm, ss); MJD_original[ii] = MJD[ii]; free(mphPtr); fclose(imFilePtr); } /* end of for loop */ // for (i=0; i< numFiles; i++){printf("\n%d : %f", i, MJD[i]);} printf("\nSorting files in ascending order of their sensing start times ...\n"); bubbleSort(MJD, numFiles); // for (i=0; i< numFiles; i++){printf("\n%d : %f", i, MJD[i]);} for (i = 0; i < numFiles; i++) { for (j = 0; j < numFiles; j++) { if (MJD[i] == MJD_original[j]) { file_order[i] = j; break; } } } printf("File order after sorting:"); for (i = 0; i < numFiles; i++) { printf(" %d", file_order[i] + 1); } printf("\n"); /* open files */ outFilePtr = fopen(outFileName, "wb"); if (outFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", outFileName); printf("\n"); exit(-1); } /* begin loop over files */ firstTimeEqualsZero = 0; for (ii = 0; ii < numFiles; ii++) { FrameID = ii; if (firstTimeEqualsZero == 0) { oldFrameID = ii; } /* open image file */ sscanf(argv[file_order[ii] + 2], "%s", imFileName); printf("\nInput file: %d\n", file_order[ii] + 1); imFilePtr = fopen(imFileName, "rb"); if (imFilePtr == NULL) { printf("*** ERROR - cannot open file: %s\n", imFileName); printf("\n"); exit(-1); } /* read image MPH */ printf("Reading MPH...\n"); mphPtr = (char *)malloc(sizeof(char) * mphSize); if (mphPtr == NULL) { printf("ERROR - mph allocation memory\n"); exit(-1); } if ((fread(mphPtr, sizeof(char), mphSize, imFilePtr)) != mphSize) { printf("ERROR - mph read error\n\n"); exit(-1); } mph = readMph(mphPtr, printImMphIfZero); /* extract information from MPH */ /* read image SPH */ printf("Reading SPH...\n"); sphPtr = (char *)malloc(sizeof(char) * mph.sphSize); if (sphPtr == NULL) { printf("ERROR - sph allocation memory\n"); exit(-1); } if ((fread(sphPtr, sizeof(char), mph.sphSize, imFilePtr)) != mph.sphSize) { printf("ERROR - sph read error\n\n"); exit(-1); } sph = readSph(sphPtr, printImSphIfZero, mph); /* extract information from SPH */ /* writing dummy mph and sph for first file */ if (ii == 0) { /* Write MPH of output frame file */ mphPtr2 = (char *)malloc(sizeof(char) * mphSize); if (mphPtr2 == NULL) { printf("ERROR - mph allocation memory\n"); exit(-1); } memcpy(mphPtr2, mphPtr, mphSize); printf("\nInitializing MPH of output file...\n"); if ((fwrite(mphPtr2, sizeof(char), mphSize, outFilePtr)) != mphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } /* Write SPH of output frame file */ sphPtr2 = (char *)malloc(sizeof(char) * mph.sphSize); if (sphPtr2 == NULL) { printf("ERROR - sph allocation memory\n"); exit(-1); } memcpy(sphPtr2, sphPtr, mph.sphSize); printf("Initializing SPH of output file...\n\n"); if ((fwrite(sphPtr2, sizeof(char), mph.sphSize, outFilePtr)) != mph.sphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } } /* end of if(ii==0) */ if (ii == 0) { sscanf(mph.sensingStart, "%2d-%3c-%4d %2d:%2d:%lf", &stday, stmonthstr, &styear, &sthour, &stmin, &stseconds); if (strcmp(stmonthstr, "JAN") == 0) { stmonth = 1; } if (strcmp(stmonthstr, "FEB") == 0) { stmonth = 2; } if (strcmp(stmonthstr, "MAR") == 0) { stmonth = 3; } if (strcmp(stmonthstr, "APR") == 0) { stmonth = 4; } if (strcmp(stmonthstr, "MAY") == 0) { stmonth = 5; } if (strcmp(stmonthstr, "JUN") == 0) { stmonth = 6; } if (strcmp(stmonthstr, "JUL") == 0) { stmonth = 7; } if (strcmp(stmonthstr, "AUG") == 0) { stmonth = 8; } if (strcmp(stmonthstr, "SEP") == 0) { stmonth = 9; } if (strcmp(stmonthstr, "OCT") == 0) { stmonth = 10; } if (strcmp(stmonthstr, "NOV") == 0) { stmonth = 11; } if (strcmp(stmonthstr, "DEC") == 0) { stmonth = 12; } mjd_start = date2MJD(styear, stmonth, stday, sthour, stmin, stseconds); } /* read image MDSR from file */ printf("Reading and Writing MDSR...\n"); printf("Number of lines in frame %d: %d\n", ii + 1, sph.dsd[0].numDsr); for (i = 0; i < sph.dsd[0].numDsr; i++) { if ((i) % 2000 == 0) printf("Line %6d of input file %d. Output Line: %8d\n", i + 1, ii + 1, outLines + 1); /* sensing time added by Level 0 processor, as converted from Satellite * Binary Time (SBT) counter embedded in each ISP */ /** * Represents a binary time value field in ENVISAT records. * *

Refer to ENVISAT documentation for the exact definition of * this data type. */ /* long days; ulong seconds; ulong microseconds; */ bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeDays, 4, 1, imFilePtr); bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeSeconds, 4, 1, imFilePtr); bytesRead = bytesRead + 4 * fread(&mdsrDsrTimeMicroseconds, 4, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_long, &mdsrDsrTimeDays, 1); swap_endian_order(e_tid_ulong, &mdsrDsrTimeSeconds, 1); swap_endian_order(e_tid_ulong, &mdsrDsrTimeMicroseconds, 1); } newmdsrDsrTimeDays = mdsrDsrTimeDays; newmdsrDsrTimeSeconds = mdsrDsrTimeSeconds; newmdsrDsrTimeMicroseconds = mdsrDsrTimeMicroseconds; if (is_littlendian) { swap_endian_order(e_tid_long, &mdsrDsrTimeDays, 1); swap_endian_order(e_tid_ulong, &mdsrDsrTimeSeconds, 1); swap_endian_order(e_tid_ulong, &mdsrDsrTimeMicroseconds, 1); } bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeDays, 4, 1, imFilePtr); bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeSeconds, 4, 1, imFilePtr); bytesRead = bytesRead + 4 * fread(&mdsrGsrtTimeMicroseconds, 4, 1, imFilePtr); bytesRead = bytesRead + 2 * fread(&mdsrIspLength, 2, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrIspLength, 1); } mdsrILen = mdsrIspLength; if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrIspLength, 1); } bytesRead = bytesRead + 2 * fread(&mdsrCrcErrs, 2, 1, imFilePtr); bytesRead = bytesRead + 2 * fread(&mdsrRsErrs, 2, 1, imFilePtr); bytesRead = bytesRead + 2 * fread(&mdsrSpare1, 2, 1, imFilePtr); /* 6-byte ISP Packet Header */ bytesRead = bytesRead + 2 * fread(&mdsrPacketIdentification, 2, 1, imFilePtr); bytesRead = bytesRead + 2 * fread(&mdsrPacketSequenceControl, 2, 1, imFilePtr); bytesRead = bytesRead + 2 * fread(&mdsrPacketLength, 2, 1, imFilePtr); /* 30-byte Data Field Header in Packet Data Field */ bytesRead = bytesRead + 30 * fread(&mdsrPacketDataHeader, 30, 1, imFilePtr); if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketDataHeader, 15); } modePacketCount = mdsrPacketDataHeader[5] * 256 + ((mdsrPacketDataHeader[6] >> 8) & 255); for (jjj = 0; jjj < 15; jjj++) { tempmdsrPacketDataHeader[jjj] = mdsrPacketDataHeader[jjj]; } if (is_littlendian) { swap_endian_order(e_tid_ushort, &mdsrPacketDataHeader, 15); } if (((i) == 24890) || ((i) == 24891)) printf("Line %6d of input file %d. Output Line: %8d " "modePacketCount: %d\n", i + 1, ii + 1, outLines + 1, modePacketCount); if ((modePacketCount == modePacketCountOld + 1) || (firstTimeEqualsZero == 0)) { firstTimeEqualsZero = 1; modePacketCountOld = modePacketCount; outLines = outLines + 1; bytesRead = bytesRead + (mdsrILen + 1 - 30) * fread(&mdsrLineChar, (mdsrILen + 1 - 30), 1, imFilePtr); if ((fwrite(&mdsrDsrTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrIspLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrCrcErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrRsErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrSpare1, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketIdentification, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketSequenceControl, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketDataHeader, 30, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrLineChar, (mdsrILen + 1 - 30), 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } bytesToBeWritten = bytesToBeWritten + 68 + (mdsrILen + 1 - 30); } else if ((modePacketCount > modePacketCountOld + 1) && (oldFrameID == FrameID)) { modePacketCountOld = modePacketCount; outLines = outLines + 1; bytesRead = bytesRead + (mdsrILen + 1 - 30) * fread(&mdsrLineChar, (mdsrILen + 1 - 30), 1, imFilePtr); if ((fwrite(&mdsrDsrTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrIspLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrCrcErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrRsErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrSpare1, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketIdentification, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketSequenceControl, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketDataHeader, 30, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrLineChar, (mdsrILen + 1 - 30), 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } bytesToBeWritten = bytesToBeWritten + 68 + (mdsrILen + 1 - 30); } else if (modePacketCount < modePacketCountOld + 1) { // printf( "Line %5d : duplicate line\n", outLines +1 ); duplicateLines = duplicateLines + 1; fseek(imFilePtr, mdsrILen + 1 - 30, SEEK_CUR); bytesRead = bytesRead + mdsrILen + 1 - 30; } else if ((modePacketCount > modePacketCountOld + 1) && (oldFrameID != FrameID) && (catAbortFlag == 1)) { printf("\nWARNING: No overlap between frames %d and %d. Continuing " "concatenation with with missing lines.\n", modePacketCount, modePacketCountOld + 1); printf("At output Line %5d : Mode packet count at successive frame " "edges - %d %d\n\n", outLines + 1, modePacketCountOld, modePacketCount); printf("Number of missing lines: %d \n", modePacketCount - (modePacketCountOld + 1)); nmsl = modePacketCount - (modePacketCountOld + 1); oldFrameID = FrameID; newt = ((double)newmdsrDsrTimeSeconds + newmdsrDsrTimeMicroseconds * 1e-06); oldt = ((double)oldmdsrDsrTimeSeconds + oldmdsrDsrTimeMicroseconds * 1e-06); delta1 = newt - oldt + ((newmdsrDsrTimeDays - oldmdsrDsrTimeDays) * 24. * 3600.); est_pri = delta1 / (double)(nmsl + 1); /* Fill missing lines with LUT indices corresponding to 127 and 128 for * alternate samples */ /* To get a byte value of 127 after decoding, first byte of block= 0, * sample value = 10011001=153, corresponding to LUTi: -0.002563 LUTq: * -0.002611 */ /* To get a byte value of 128 after decoding, first byte of block= 0, * sample value = 10001000=136, corresponding to LUTi: 0.001774 LUTq: * 0.001816 */ tempsamplecount = 0; for (jjj = 0; jjj < floor((mdsrILen + 1 - 30) / 64); jjj++) { tempmdsrLineChar[jjj * 64] = (unsigned char)(0); for (kkk = 1; kkk < 64; kkk++) { if (((tempsamplecount) % 2) == 1) { tempmdsrLineChar[jjj * 64 + kkk] = (unsigned char)(153); } else if (((tempsamplecount) % 2) == 0) { tempmdsrLineChar[jjj * 64 + kkk] = (unsigned char)(136); } tempsamplecount = tempsamplecount + 1; } } jjj = floor((mdsrILen + 1 - 30) / 64); tempmdsrLineChar[jjj * 64] = (unsigned char)(0); for (kkk = 1; kkk <= (((mdsrILen + 1 - 30) % 64) - 1); kkk++) { if (((tempsamplecount) % 2) == 1) { tempmdsrLineChar[jjj * 64 + kkk] = (unsigned char)(102); } else if (((tempsamplecount) % 2) == 0) { tempmdsrLineChar[jjj * 64 + kkk] = (unsigned char)(136); } tempsamplecount = tempsamplecount + 1; } for (msl = 1; msl <= nmsl; msl++) { temptimesec = oldt + (msl * est_pri); tempmdsrDsrTimeDays = oldmdsrDsrTimeDays; if (temptimesec > (24. * 3600.)) { temptimesec = temptimesec - 24. * 3600.; tempmdsrDsrTimeDays = tempmdsrDsrTimeDays + 1; } tempmdsrDsrTimeSeconds = floor(temptimesec); tempmdsrDsrTimeMicroseconds = floor((temptimesec - (double)(tempmdsrDsrTimeSeconds)) * 1e06); tempmdsrGsrtTimeDays = tempmdsrDsrTimeDays; tempmdsrGsrtTimeSeconds = tempmdsrDsrTimeSeconds; tempmdsrGsrtTimeMicroseconds = tempmdsrDsrTimeMicroseconds; tempmdsrIspLength = mdsrILen; tempmdsrILen = mdsrILen; tempmodePacketCount = modePacketCountOld + msl; tempmdsrPacketLength = mdsrILen; tempmdsrPacketDataHeader[5] = (unsigned short)(((tempmodePacketCount >> 8) & 65535)); tempmdsrPacketDataHeader[6] = (unsigned short)(((tempmodePacketCount << 8) & 65280)) + (unsigned short)((tempmdsrPacketDataHeader[6]) & 255); if (is_littlendian) { swap_endian_order(e_tid_long, &tempmdsrDsrTimeDays, 1); swap_endian_order(e_tid_ulong, &tempmdsrDsrTimeSeconds, 1); swap_endian_order(e_tid_ulong, &tempmdsrDsrTimeMicroseconds, 1); swap_endian_order(e_tid_long, &tempmdsrGsrtTimeDays, 1); swap_endian_order(e_tid_ulong, &tempmdsrGsrtTimeSeconds, 1); swap_endian_order(e_tid_ulong, &tempmdsrGsrtTimeMicroseconds, 1); swap_endian_order(e_tid_ushort, &tempmdsrIspLength, 1); swap_endian_order(e_tid_ushort, &tempmdsrPacketLength, 1); swap_endian_order(e_tid_ushort, &tempmdsrPacketDataHeader, 15); } if ((fwrite(&tempmdsrDsrTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrDsrTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrDsrTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrGsrtTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrGsrtTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrGsrtTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrIspLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrCrcErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrRsErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrSpare1, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketIdentification, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketSequenceControl, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrPacketLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrPacketDataHeader, 30, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&tempmdsrLineChar, (tempmdsrILen + 1 - 30), 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if (is_littlendian) { swap_endian_order(e_tid_ushort, &tempmdsrPacketDataHeader, 15); } outLines = outLines + 1; bytesToBeWritten = bytesToBeWritten + 68 + (tempmdsrILen + 1 - 30); } modePacketCountOld = modePacketCount; outLines = outLines + 1; bytesRead = bytesRead + (mdsrILen + 1 - 30) * fread(&mdsrLineChar, (mdsrILen + 1 - 30), 1, imFilePtr); if ((fwrite(&mdsrDsrTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrDsrTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeDays, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeSeconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrGsrtTimeMicroseconds, 4, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrIspLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrCrcErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrRsErrs, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrSpare1, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketIdentification, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketSequenceControl, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketLength, 2, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrPacketDataHeader, 30, 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } if ((fwrite(&mdsrLineChar, (mdsrILen + 1 - 30), 1, outFilePtr)) != 1) { printf("ERROR - outFile write error\n\n"); exit(-1); } bytesToBeWritten = bytesToBeWritten + 68 + (mdsrILen + 1 - 30); } else if ((modePacketCount > modePacketCountOld + 1) && (oldFrameID != FrameID) && (catAbortFlag == 0)) { printf("\nWARNING: No overlap between frames. Aborting further " "concatenation.\n"); printf("At output Line %5d : Mode packet count at successive frame " "edges - %d %d\n\n", outLines + 1, modePacketCountOld, modePacketCount); sscanf(mph.sensingStop, "%2d-%3c-%4d %2d:%2d:%lf", &eday, emonthstr, &eyear, &ehour, &emin, &eseconds); if (strcmp(emonthstr, "JAN") == 0) { emonth = 1; } if (strcmp(emonthstr, "FEB") == 0) { emonth = 2; } if (strcmp(emonthstr, "MAR") == 0) { emonth = 3; } if (strcmp(emonthstr, "APR") == 0) { emonth = 4; } if (strcmp(emonthstr, "MAY") == 0) { emonth = 5; } if (strcmp(emonthstr, "JUN") == 0) { emonth = 6; } if (strcmp(emonthstr, "JUL") == 0) { emonth = 7; } if (strcmp(emonthstr, "AUG") == 0) { emonth = 8; } if (strcmp(emonthstr, "SEP") == 0) { emonth = 9; } if (strcmp(emonthstr, "OCT") == 0) { emonth = 10; } if (strcmp(emonthstr, "NOV") == 0) { emonth = 11; } if (strcmp(emonthstr, "DEC") == 0) { emonth = 12; } mjd_end = date2MJD(eyear, emonth, eday, ehour, emin, eseconds); memcpy(sensingStopTime, mphPtr + 380 + 14, 27); sprintf(ssensingStopTime, "%.27s", sensingStopTime); memcpy(mphPtr2 + 380 + 14, ssensingStopTime, 27); mjd_diffsec = (mjd_end - mjd_start) * 86400.0; imjd_diffsec = floor(mjd_diffsec); duration = imjd_diffsec; sprintf(secduration, "%08d", duration); memcpy(mphPtr2 + 0 + 9 + 30, secduration, 8); totfilesize = bytesToBeWritten + mphSize + mph.sphSize; sprintf(totsize, "%021d", totfilesize); memcpy(strchr(mphPtr2 + 1066 + 0, '=') + 1, totsize, 21); sprintf(ds_size, "%020d", bytesToBeWritten); sprintf(num_dsr, "%010d", outLines); memcpy(strchr(sphPtr2 + 836 + mph.dsdSize * 0 + 162 + 0, '=') + 2, ds_size, 20); memcpy(strchr(sphPtr2 + 836 + mph.dsdSize * 0 + 199 + 0, '=') + 2, num_dsr, 10); /* writing update MPH and SPH in outfile */ fseek(outFilePtr, 0.0, SEEK_SET); /* go back to start of the file */ printf("Writing updated MPH of output file...\n"); if ((fwrite(mphPtr2, sizeof(char), mphSize, outFilePtr)) != mphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } printf("Writing updated SPH of output file...\n"); if ((fwrite(sphPtr2, sizeof(char), mph.sphSize, outFilePtr)) != mph.sphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } free(mphPtr2); free(sphPtr2); fclose(outFilePtr); exit(-1); } oldmdsrDsrTimeDays = newmdsrDsrTimeDays; oldmdsrDsrTimeSeconds = newmdsrDsrTimeSeconds; oldmdsrDsrTimeMicroseconds = newmdsrDsrTimeMicroseconds; } /* end for of each data line,i */ /* updating the MPH and SPH of concatenated data */ if (ii == (numFiles - 1)) { sscanf(mph.sensingStop, "%2d-%3c-%4d %2d:%2d:%lf", &eday, emonthstr, &eyear, &ehour, &emin, &eseconds); if (strcmp(emonthstr, "JAN") == 0) { emonth = 1; } if (strcmp(emonthstr, "FEB") == 0) { emonth = 2; } if (strcmp(emonthstr, "MAR") == 0) { emonth = 3; } if (strcmp(emonthstr, "APR") == 0) { emonth = 4; } if (strcmp(emonthstr, "MAY") == 0) { emonth = 5; } if (strcmp(emonthstr, "JUN") == 0) { emonth = 6; } if (strcmp(emonthstr, "JUL") == 0) { emonth = 7; } if (strcmp(emonthstr, "AUG") == 0) { emonth = 8; } if (strcmp(emonthstr, "SEP") == 0) { emonth = 9; } if (strcmp(emonthstr, "OCT") == 0) { emonth = 10; } if (strcmp(emonthstr, "NOV") == 0) { emonth = 11; } if (strcmp(emonthstr, "DEC") == 0) { emonth = 12; } mjd_end = date2MJD(eyear, emonth, eday, ehour, emin, eseconds); memcpy(sensingStopTime, mphPtr + 380 + 14, 27); sprintf(ssensingStopTime, "%.27s", sensingStopTime); } oldFrameID = FrameID; free(mphPtr); free(sphPtr); fclose(imFilePtr); } /* end of for ii, input files*/ printf("\nNumber of duplicate lines found between overlapping frames: %8d\n", duplicateLines); printf("\nTotal number of lines in output files: %8d\n", outLines); /* updating the sensing stop time in MPH */ memcpy(mphPtr2 + 380 + 14, ssensingStopTime, 27); /* Update duration on product name in MPH */ mjd_diffsec = (mjd_end - mjd_start) * 86400.0; imjd_diffsec = floor(mjd_diffsec); duration = imjd_diffsec; sprintf(secduration, "%08d", duration); memcpy(mphPtr2 + 0 + 9 + 30, secduration, 8); /* Update DSD_SIZE and NUM_DSR in SPH of output frame file pointer */ totfilesize = bytesToBeWritten + mphSize + mph.sphSize; sprintf(totsize, "%021d", totfilesize); memcpy(strchr(mphPtr2 + 1066 + 0, '=') + 1, totsize, 21); sprintf(ds_size, "%020d", bytesToBeWritten); sprintf(num_dsr, "%010d", outLines); memcpy(strchr(sphPtr2 + 836 + mph.dsdSize * 0 + 162 + 0, '=') + 2, ds_size, 20); memcpy(strchr(sphPtr2 + 836 + mph.dsdSize * 0 + 199 + 0, '=') + 2, num_dsr, 10); /* writing update MPH and SPH in outfile */ fseek(outFilePtr, 0.0, SEEK_SET); /* go back to start of the file */ printf("\nWriting updated MPH of output file...\n"); if ((fwrite(mphPtr2, sizeof(char), mphSize, outFilePtr)) != mphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } printf("Writing updated SPH of output file...\n"); if ((fwrite(sphPtr2, sizeof(char), mph.sphSize, outFilePtr)) != mph.sphSize) { printf(" ERROR - outFile write error\n\n"); exit(-1); } free(mphPtr2); free(sphPtr2); fclose(outFilePtr); printf("\nDone.\n\n"); return 0; } /* end main */ /**********************************************************************************************************************************/ struct mphStruct readMph(const char *mphPtr, const int printMphIfZero) { struct mphStruct mph; if (1 == 0) { printf("check:\n%s\n", mphPtr + 1247); } memcpy(mph.product, mphPtr + 0 + 9, 62); memcpy(mph.procStage, mphPtr + 73 + 11, 1); memcpy(mph.refDoc, mphPtr + 86 + 9, 23); memcpy(mph.spare1, mphPtr + 120 + 0, 40); memcpy(mph.acquisitionStation, mphPtr + 161 + 21, 20); memcpy(mph.procCenter, mphPtr + 204 + 13, 6); memcpy(mph.procTime, mphPtr + 225 + 11, 27); memcpy(mph.softwareVer, mphPtr + 265 + 14, 14); memcpy(mph.spare2, mphPtr + 295 + 0, 40); memcpy(mph.sensingStart, mphPtr + 336 + 15, 27); memcpy(mph.sensingStop, mphPtr + 380 + 14, 27); memcpy(mph.spare3, mphPtr + 423 + 0, 40); memcpy(mph.phase, mphPtr + 464 + 6, 1); mph.cycle = atoi((char *)strchr(mphPtr + 472 + 0, '=') + 1); mph.relOrbit = atoi((char *)strchr(mphPtr + 483 + 0, '=') + 1); mph.absOrbit = atoi((char *)strchr(mphPtr + 500 + 0, '=') + 1); memcpy(mph.stateVectorTime, mphPtr + 517 + 19, 27); mph.deltaUt1 = atof((char *)strchr(mphPtr + 565 + 0, '=') + 1); mph.xPosition = atof((char *)strchr(mphPtr + 587 + 0, '=') + 1); mph.yPosition = atof((char *)strchr(mphPtr + 614 + 0, '=') + 1); mph.zPosition = atof((char *)strchr(mphPtr + 641 + 0, '=') + 1); mph.xVelocity = atof((char *)strchr(mphPtr + 668 + 0, '=') + 1); mph.yVelocity = atof((char *)strchr(mphPtr + 697 + 0, '=') + 1); mph.zVelocity = atof((char *)strchr(mphPtr + 726 + 0, '=') + 1); memcpy(mph.vectorSource, mphPtr + 755 + 15, 2); memcpy(mph.spare4, mphPtr + 774 + 0, 40); memcpy(mph.utcSbtTime, mphPtr + 815 + 14, 27); mph.satBinaryTime = atoi((char *)strchr(mphPtr + 858 + 0, '=') + 1); mph.clockStep = atoi((char *)strchr(mphPtr + 886 + 0, '=') + 1); memcpy(mph.spare5, mphPtr + 913 + 0, 32); memcpy(mph.leapUtc, mphPtr + 946 + 10, 27); mph.leapSign = atoi((char *)strchr(mphPtr + 985 + 0, '=') + 1); mph.leapErr = atoi((char *)strchr(mphPtr + 1000 + 0, '=') + 1); memcpy(mph.spare6, mphPtr + 1011 + 0, 40); mph.productErr = atoi((char *)strchr(mphPtr + 1052 + 0, '=') + 1); mph.totSize = atoi((char *)strchr(mphPtr + 1066 + 0, '=') + 1); mph.sphSize = atoi((char *)strchr(mphPtr + 1104 + 0, '=') + 1); mph.numDsd = atoi((char *)strchr(mphPtr + 1132 + 0, '=') + 1); mph.dsdSize = atoi((char *)strchr(mphPtr + 1152 + 0, '=') + 1); mph.numDataSets = atoi((char *)strchr(mphPtr + 1180 + 0, '=') + 1); memcpy(mph.spare7, mphPtr + 1206 + 0, 40); if (printMphIfZero == 0) { printf("%s%.62s\n", "product: ", mph.product); printf("%s%.1s\n", "procStage: ", mph.procStage); printf("%s%.23s\n", "refDoc: ", mph.refDoc); printf("%s%.40s\n", "spare1: ", mph.spare1); printf("%s%.20s\n", "acquisitionStation: ", mph.acquisitionStation); printf("%s%.6s\n", "procCenter: ", mph.procCenter); printf("%s%.27s\n", "procTime: ", mph.procTime); printf("%s%.14s\n", "softwareVer: ", mph.softwareVer); printf("%s%.40s\n", "spare2: ", mph.spare2); printf("%s%.27s\n", "sensingStart: ", mph.sensingStart); printf("%s%.27s\n", "sensingStop: ", mph.sensingStop); printf("%s%.40s\n", "spare3: ", mph.spare3); printf("%s%.1s\n", "phase: ", mph.phase); printf("%s%d\n", "cycle: ", mph.cycle); printf("%s%d\n", "relOrbit: ", mph.relOrbit); printf("%s%d\n", "absOrbit: ", mph.absOrbit); printf("%s%.27s\n", "stateVectorTime: ", mph.stateVectorTime); printf("%s%f\n", "deltaUt1: ", mph.deltaUt1); printf("%s%f\n", "xPosition: ", mph.xPosition); printf("%s%f\n", "yPosition: ", mph.yPosition); printf("%s%f\n", "zPosition: ", mph.zPosition); printf("%s%f\n", "xVelocity: ", mph.xVelocity); printf("%s%f\n", "yVelocity: ", mph.yVelocity); printf("%s%f\n", "zVelocity: ", mph.zVelocity); printf("%s%.2s\n", "vectorSource: ", mph.vectorSource); printf("%s%.40s\n", "spare4: ", mph.spare4); printf("%s%.27s\n", "utcSbtTime: ", mph.utcSbtTime); printf("%s%u\n", "satBinaryTime: ", mph.satBinaryTime); printf("%s%u\n", "clockStep: ", mph.clockStep); printf("%s%.32s\n", "spare5: ", mph.spare5); printf("%s%.27s\n", "leapUtc: ", mph.leapUtc); printf("%s%d\n", "leapSign: ", mph.leapSign); printf("%s%d\n", "leapErr: ", mph.leapErr); printf("%s%.40s\n", "spare6: ", mph.spare6); printf("%s%d\n", "productErr: ", mph.productErr); printf("%s%d\n", "totSize: ", mph.totSize); printf("%s%d\n", "sphSize: ", mph.sphSize); printf("%s%d\n", "numDsd: ", mph.numDsd); printf("%s%d\n", "dsdSize: ", mph.dsdSize); printf("%s%d\n", "numDataSets: ", mph.numDataSets); printf("%s%.40s\n", "spare7: ", mph.spare7); printf("\n"); } return mph; } /* end readMph */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ struct sphStruct readSph(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph) { struct sphStruct sph; int i; memcpy(sph.sphDescriptor, sphPtr + 0 + 16, 28); sph.startLat = atof((char *)strchr(sphPtr + 46 + 0, '=') + 1) * 1.e-6; sph.startLon = atof((char *)strchr(sphPtr + 78 + 0, '=') + 1) * 1.e-6; sph.stopLat = atof((char *)strchr(sphPtr + 111 + 0, '=') + 1) * 1.e-6; sph.stopLon = atof((char *)strchr(sphPtr + 142 + 0, '=') + 1) * 1.e-6; sph.satTrack = atof((char *)strchr(sphPtr + 174 + 0, '=') + 1); memcpy(sph.spare1, sphPtr + 205 + 0, 50); sph.ispErrorsSignificant = atoi((char *)strchr(sphPtr + 256 + 0, '=') + 1); sph.missingIspsSignificant = atoi((char *)strchr(sphPtr + 281 + 0, '=') + 1); sph.ispDiscardedSignificant = atoi((char *)strchr(sphPtr + 308 + 0, '=') + 1); sph.rsSignificant = atoi((char *)strchr(sphPtr + 336 + 0, '=') + 1); memcpy(sph.spare2, sphPtr + 353 + 0, 50); sph.numErrorIsps = atoi((char *)strchr(sphPtr + 404 + 0, '=') + 1); sph.errorIspsThresh = atof((char *)strchr(sphPtr + 431 + 0, '=') + 1); sph.numMissingIsps = atoi((char *)strchr(sphPtr + 468 + 0, '=') + 1); sph.missingIspsThresh = atof((char *)strchr(sphPtr + 497 + 0, '=') + 1); sph.numDiscardedIsps = atoi((char *)strchr(sphPtr + 536 + 0, '=') + 1); sph.discardedIspsThresh = atof((char *)strchr(sphPtr + 567 + 0, '=') + 1); sph.numRsIsps = atoi((char *)strchr(sphPtr + 608 + 0, '=') + 1); sph.rsThresh = atof((char *)strchr(sphPtr + 632 + 0, '=') + 1); memcpy(sph.spare3, sphPtr + 661 + 0, 100); memcpy(sph.txRxPolar, sphPtr + 762 + 13, 5); memcpy(sph.swath, sphPtr + 782 + 7, 3); memcpy(sph.spare4, sphPtr + 794 + 0, 41); if (1 == 0) { printf("check:\n%s\n", sphPtr + 836 + 0); } if (printSphIfZero == 0) { printf("%s%.28s\n", "sphDescriptor: ", sph.sphDescriptor); printf("%s%f\n", "startLat: ", sph.startLat); printf("%s%f\n", "startLon: ", sph.startLon); printf("%s%f\n", "stopLat: ", sph.stopLat); printf("%s%f\n", "stopLon: ", sph.stopLon); printf("%s%f\n", "satTrack: ", sph.satTrack); printf("%s%.50s\n", "spare1: ", sph.spare1); printf("%s%d\n", "ispErrorsSignificant: ", sph.ispErrorsSignificant); printf("%s%d\n", "missingIspsSignificant: ", sph.missingIspsSignificant); printf("%s%d\n", "ispDiscardedSignificant: ", sph.ispDiscardedSignificant); printf("%s%d\n", "rsSignificant: ", sph.rsSignificant); printf("%s%.50s\n", "spare2: ", sph.spare2); printf("%s%d\n", "numErrorIsps: ", sph.numErrorIsps); printf("%s%f\n", "errorIspsThresh: ", sph.errorIspsThresh); printf("%s%d\n", "numMissingIsps: ", sph.numMissingIsps); printf("%s%f\n", "missingIspsThresh: ", sph.missingIspsThresh); printf("%s%d\n", "numDiscardedIsps: ", sph.numDiscardedIsps); printf("%s%f\n", "discardedIspsThresh: ", sph.discardedIspsThresh); printf("%s%d\n", "numRsIsps: ", sph.numRsIsps); printf("%s%f\n", "rsThresh: ", sph.rsThresh); printf("%s%.100s\n", "spare3: ", sph.spare3); printf("%s%.5s\n", "txRxPolar: ", sph.txRxPolar); printf("%s%.3s\n", "swath: ", sph.swath); printf("%s%.41s\n", "spare4: ", sph.spare4); } for (i = 0; i < mph.numDsd; i++) { /* extract DSDs from SPH */ if (i != 3) { /* fourth is a spare DSD - see pdf page 537 */ if (1 == 0) { printf("check:\n%s\n", sphPtr + 836 + mph.dsdSize * i + 0 + 0); } memcpy(sph.dsd[i].dsName, sphPtr + 836 + mph.dsdSize * i + 0 + 9, 28); memcpy(sph.dsd[i].dsType, sphPtr + 836 + mph.dsdSize * i + 39 + 8, 1); memcpy(sph.dsd[i].filename, sphPtr + 836 + mph.dsdSize * i + 49 + 10, 62); sph.dsd[i].dsOffset = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 123 + 0, '=') + 1); sph.dsd[i].dsSize = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 162 + 0, '=') + 1); sph.dsd[i].numDsr = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 199 + 0, '=') + 1); sph.dsd[i].dsrSize = atoi((char *)strchr(sphPtr + 836 + mph.dsdSize * i + 219 + 0, '=') + 1); /* write out a few things */ if (printSphIfZero == 0) { printf("%s%d%s%.28s\n", "dsd[ ", i, " ].dsName: ", sph.dsd[i].dsName); printf("%s%d%s%.1s\n", "dsd[ ", i, " ].dsType: ", sph.dsd[i].dsType); printf("%s%d%s%.62s\n", "dsd[ ", i, " ].filename: ", sph.dsd[i].filename); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsOffset: ", sph.dsd[i].dsOffset); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsSize: ", sph.dsd[i].dsSize); printf("%s%d%s%d\n", "dsd[ ", i, " ].numDsr: ", sph.dsd[i].numDsr); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsrSize: ", sph.dsd[i].dsrSize); } } } if (printSphIfZero == 0) { printf("\n"); } return sph; } /* end readSph */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ struct sphAuxStruct readSphAux(const char *sphPtr, const int printSphIfZero, const struct mphStruct mph) { struct sphAuxStruct sph; int i; memcpy(sph.sphDescriptor, sphPtr + 0 + 16, 28); memcpy(sph.spare1, sphPtr + 46 + 0, 51); if (printSphIfZero == 0) { printf("%s%.28s\n", "sphDescriptor: ", sph.sphDescriptor); printf("%s%.51s\n", "spare1: ", sph.spare1); } for (i = 0; i < mph.numDsd; i++) { /* extract DSDs from SPH */ memcpy(sph.dsd[i].dsName, sphPtr + 98 + mph.dsdSize * i + 0 + 9, 28); memcpy(sph.dsd[i].dsType, sphPtr + 98 + mph.dsdSize * i + 39 + 8, 1); memcpy(sph.dsd[i].filename, sphPtr + 98 + mph.dsdSize * i + 49 + 10, 62); sph.dsd[i].dsOffset = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 123 + 0, '=') + 1); sph.dsd[i].dsSize = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 162 + 0, '=') + 1); sph.dsd[i].numDsr = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 199 + 0, '=') + 1); sph.dsd[i].dsrSize = atoi((char *)strchr(sphPtr + 98 + mph.dsdSize * i + 219 + 0, '=') + 1); /* write out a few things */ if (printSphIfZero == 0) { printf("%s%d%s%.28s\n", "dsd[ ", i, " ].dsName: ", sph.dsd[i].dsName); printf("%s%d%s%.1s\n", "dsd[ ", i, " ].dsType: ", sph.dsd[i].dsType); printf("%s%d%s%.62s\n", "dsd[ ", i, " ].filename: ", sph.dsd[i].filename); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsOffset: ", sph.dsd[i].dsOffset); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsSize: ", sph.dsd[i].dsSize); printf("%s%d%s%d\n", "dsd[ ", i, " ].numDsr: ", sph.dsd[i].numDsr); printf("%s%d%s%d\n", "dsd[ ", i, " ].dsrSize: ", sph.dsd[i].dsrSize); } } if (printSphIfZero == 0) { printf("\n"); } return sph; } /* end readSphAux */ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ /**********************************************************************************************************************************/ /********************************************************** ** Function: is_bigendian ** ** Purpose: Test whether it is a bigendian machine ** ** Return values: true: 1, false: 0 ** ** Comment: ** ** Author: Eric J Fielding at JPL ** ** Created: ** ** Modified: ** ;**********************************************************/ int is_bigendian() { int bigendian, littleendian, test; unsigned char t[4]; littleendian = 256; bigendian = 256 * 256; t[0] = 0; t[1] = 1; t[2] = 0; t[3] = 0; memcpy(&test, &t[0], 4); /* printf("test: %i\n",test); */ if (test == bigendian) return (1); if (test == littleendian) return (0); printf("Error in endian test, test= %i ********\n", test); return (-1); } /* * Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_short(short *buffer, uint number_of_swaps) { short *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = (short)(((*temp & 0x00ff) << 8) | ((*temp & 0xff00) >> 8)); } } /* Function: byte_swap_long.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_long(long *buffer, uint number_of_swaps) { long *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* ADDED THESE LINES TO TEST THE 4-BYTE INT TYPE ON 64 BIT */ /* Function: byte_swap_int.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_int(int *buffer, uint number_of_swaps) { int *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* Function: byte_swap_uint.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * */ void byte_swap_uint(uint *buffer, uint number_of_swaps) { uint *temp = buffer; uint swap_loop; for (swap_loop = 0, temp = buffer; swap_loop < number_of_swaps; swap_loop++, temp++) { *temp = ((*temp & 0x000000ff) << 24) | ((*temp & 0x0000ff00) << 8) | ((*temp & 0x00ff0000) >> 8) | ((*temp & 0xff000000) >> 24); } } /* ADDDED NEW LINES ABOVE */ /* ************************************************************************** */ /* Function: byte_swap_short.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS two-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_ushort(ushort *buffer, uint number_of_swaps) { byte_swap_short((short *)buffer, number_of_swaps); } /* * Function: byte_swap_ulong.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_ulong(ulong *buffer, uint number_of_swaps) { byte_swap_long((long *)buffer, number_of_swaps); } /* * Function: byte_swap_long.c */ /** * * Swaps bytes within NUMBER_OF_SWAPS four-byte words, * starting at address BUFFER. * * @param buffer the one element typed buffer * to convert for a little endian order machine * * @param number_of_swaps number of elements to convert * */ void byte_swap_float(float *buffer, uint number_of_swaps) { byte_swap_int((int *)buffer, number_of_swaps); } /* Function: epr_swap_endian_order Access: public API Changelog: 2002/02/04 mp nitial version */ /** * Converts bytes for a little endian order machine * * @param field the pointer at data reading in * */ void swap_endian_order(EPR_EDataTypeId data_type_id, void *elems, uint num_elems) { switch (data_type_id) { case e_tid_uchar: case e_tid_char: case e_tid_string: /* no conversion required */ break; case e_tid_time: byte_swap_uint((uint *)elems, 3); break; case e_tid_spare: /* no conversion required */ break; case e_tid_ushort: byte_swap_ushort((ushort *)elems, num_elems); break; case e_tid_short: byte_swap_short((short *)elems, num_elems); break; case e_tid_ulong: byte_swap_uint((uint *)elems, num_elems); break; case e_tid_long: byte_swap_int((int *)elems, num_elems); break; case e_tid_float: byte_swap_float((float *)elems, num_elems); break; case e_tid_double: printf("swap_endian_order: DOUBLE type was not yet processed\n"); break; default: printf("swap_endian_order: unknown data type\n"); } } double date2MJD(int yr, int mo, int day, int hr, int min, double sec) { /* convert to date to MJD */ double part1, part2; double JD, MJD; part1 = 367 * ((double)yr) - floor(7 * ((double)yr + floor(((double)mo + 9) / 12.0)) / 4.0) + floor(275 * (double)mo / 9.0) + (double)day; part2 = 1721013.5 + ((sec / 60.0 + (double)min) / 60.0 + (double)hr) / 24.0; JD = part1 + part2; MJD = JD - 2400000.5; return MJD; } void bubbleSort(double array[], int len) { double tmp; int pass; int j; for (pass = 0; pass < len - 1; pass++) { for (j = 0; j < len - 1 - pass; j++) { if (array[j + 1] < array[j]) { tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; } } } } GMTSAR_V5.7/.svn/pristine/3d/3d11a654aada52113e648a7f744aa15ec394db53.svn-base000444 015705 000000 00000010166 13505462013 025646 0ustar00sandwellwheel000000 000000 9 29 1.8315639e-02 4.3936934e-02 8.2084999e-02 1.1943297e-01 1.3533528e-01 1.1943297e-01 8.2084999e-02 4.3936934e-02 1.8315639e-02 2.4125406e-02 5.7873841e-02 1.0812257e-01 1.5731741e-01 1.7826398e-01 1.5731741e-01 1.0812257e-01 5.7873841e-02 2.4125406e-02 3.1136088e-02 7.4691592e-02 1.3954226e-01 2.0303280e-01 2.3006630e-01 2.0303280e-01 1.3954226e-01 7.4691592e-02 3.1136088e-02 3.9372256e-02 9.4449132e-02 1.7645421e-01 2.5673936e-01 2.9092381e-01 2.5673936e-01 1.7645421e-01 9.4449132e-02 3.9372256e-02 4.8781304e-02 1.1702026e-01 2.1862264e-01 3.1809406e-01 3.6044779e-01 3.1809406e-01 2.1862264e-01 1.1702026e-01 4.8781304e-02 5.9217948e-02 1.4205647e-01 2.6539643e-01 3.8614953e-01 4.3756474e-01 3.8614953e-01 2.6539643e-01 1.4205647e-01 5.9217948e-02 7.0435265e-02 1.6896542e-01 3.1566896e-01 4.5929562e-01 5.2045012e-01 4.5929562e-01 3.1566896e-01 1.6896542e-01 7.0435265e-02 8.2084999e-02 1.9691168e-01 3.6787944e-01 5.3526143e-01 6.0653066e-01 5.3526143e-01 3.6787944e-01 1.9691168e-01 8.2084999e-02 9.3729066e-02 2.2484434e-01 4.2006453e-01 6.1119028e-01 6.9256932e-01 6.1119028e-01 4.2006453e-01 2.2484434e-01 9.3729066e-02 1.0486284e-01 2.5155288e-01 4.6996266e-01 6.8379163e-01 7.7483743e-01 6.8379163e-01 4.6996266e-01 2.5155288e-01 1.0486284e-01 1.1494916e-01 2.7574871e-01 5.1516641e-01 7.4956270e-01 8.4936582e-01 7.4956270e-01 5.1516641e-01 2.7574871e-01 1.1494916e-01 1.2346016e-01 2.9616554e-01 5.5331007e-01 8.0506140e-01 9.1225408e-01 8.0506140e-01 5.5331007e-01 2.9616554e-01 1.2346016e-01 1.2992261e-01 3.1166814e-01 5.8227273e-01 8.4720183e-01 9.6000544e-01 8.4720183e-01 5.8227273e-01 3.1166814e-01 1.2992261e-01 1.3396133e-01 3.2135653e-01 6.0037304e-01 8.7353762e-01 9.8984780e-01 8.7353762e-01 6.0037304e-01 3.2135653e-01 1.3396133e-01 1.3533528e-01 3.2465247e-01 6.0653066e-01 8.8249690e-01 1.0000000e+00 8.8249690e-01 6.0653066e-01 3.2465247e-01 1.3533528e-01 1.3396133e-01 3.2135653e-01 6.0037304e-01 8.7353762e-01 9.8984780e-01 8.7353762e-01 6.0037304e-01 3.2135653e-01 1.3396133e-01 1.2992261e-01 3.1166814e-01 5.8227273e-01 8.4720183e-01 9.6000544e-01 8.4720183e-01 5.8227273e-01 3.1166814e-01 1.2992261e-01 1.2346016e-01 2.9616554e-01 5.5331007e-01 8.0506140e-01 9.1225408e-01 8.0506140e-01 5.5331007e-01 2.9616554e-01 1.2346016e-01 1.1494916e-01 2.7574871e-01 5.1516641e-01 7.4956270e-01 8.4936582e-01 7.4956270e-01 5.1516641e-01 2.7574871e-01 1.1494916e-01 1.0486284e-01 2.5155288e-01 4.6996266e-01 6.8379163e-01 7.7483743e-01 6.8379163e-01 4.6996266e-01 2.5155288e-01 1.0486284e-01 9.3729066e-02 2.2484434e-01 4.2006453e-01 6.1119028e-01 6.9256932e-01 6.1119028e-01 4.2006453e-01 2.2484434e-01 9.3729066e-02 8.2084999e-02 1.9691168e-01 3.6787944e-01 5.3526143e-01 6.0653066e-01 5.3526143e-01 3.6787944e-01 1.9691168e-01 8.2084999e-02 7.0435265e-02 1.6896542e-01 3.1566896e-01 4.5929562e-01 5.2045012e-01 4.5929562e-01 3.1566896e-01 1.6896542e-01 7.0435265e-02 5.9217948e-02 1.4205647e-01 2.6539643e-01 3.8614953e-01 4.3756474e-01 3.8614953e-01 2.6539643e-01 1.4205647e-01 5.9217948e-02 4.8781304e-02 1.1702026e-01 2.1862264e-01 3.1809406e-01 3.6044779e-01 3.1809406e-01 2.1862264e-01 1.1702026e-01 4.8781304e-02 3.9372256e-02 9.4449132e-02 1.7645421e-01 2.5673936e-01 2.9092381e-01 2.5673936e-01 1.7645421e-01 9.4449132e-02 3.9372256e-02 3.1136088e-02 7.4691592e-02 1.3954226e-01 2.0303280e-01 2.3006630e-01 2.0303280e-01 1.3954226e-01 7.4691592e-02 3.1136088e-02 2.4125406e-02 5.7873841e-02 1.0812257e-01 1.5731741e-01 1.7826398e-01 1.5731741e-01 1.0812257e-01 5.7873841e-02 2.4125406e-02 1.8315639e-02 4.3936934e-02 8.2084999e-02 1.1943297e-01 1.3533528e-01 1.1943297e-01 8.2084999e-02 4.3936934e-02 1.8315639e-02 GMTSAR_V5.7/.svn/pristine/3d/3d461e8ced55730247af420fa259f5045bb4e0f5.svn-base000444 015705 000000 00000000027 13505462014 025600 0ustar00sandwellwheel000000 000000 link ../S1A_preproc/libGMTSAR_V5.7/.svn/pristine/51/514fa1513ea9b26582b185c6d944314757abbf36.svn-base000444 015705 000000 00000000560 13505462013 025364 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for alos after 4 x 2 decimation so the 0.5 gail % is att 100 km wavelength % clear sigx=1.13; sigy=1.51; nx=5; ny=5; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_alos_100m -ASCII -double gauss GMTSAR_V5.7/.svn/pristine/51/51a9104a608b9e2f9e282753b5bdc2d923dc6cc8.svn-base000444 015705 000000 00000002352 13505462013 025611 0ustar00sandwellwheel000000 000000 #include "PRM.h" #include "lib_functions.h" #include "orbit.h" #include "sfd_complex.h" #include "siocomplex.h" #include #include void read_orb(FILE *, struct PRM *, struct SAT_ORB *); void read_orb(FILE *ldrfile, struct PRM *prm, struct SAT_ORB *orb) { int n; int nd, iy, id; double isec, idsec, px, py, pz, vx, vy, vz; /* open each ldrfile and read into structure r */ fscanf(ldrfile, "%d %d %d %lf %lf", &nd, &iy, &id, &isec, &idsec); orb->itype = 0; orb->nd = nd; orb->iy = iy; orb->id = id; orb->sec = isec; orb->dsec = idsec; orb->points = (struct ORB_XYZ *)malloc(orb->nd * sizeof(struct ORB_XYZ)); n = 0; while (fscanf(ldrfile, "%d %d %lf %lf %lf %lf %lf %lf %lf", &iy, &id, &isec, &px, &py, &pz, &vx, &vy, &vz) != EOF) { orb->points[n].pt = isec; orb->points[n].px = px; orb->points[n].py = py; orb->points[n].pz = pz; orb->points[n].vx = vx; orb->points[n].vy = vy; orb->points[n].vz = vz; n++; } /*fprintf(stderr,"debugging the readleader file\n"); for (n=0; nnd; n++){ fprintf(stderr, "%d %lf %lf %lf %lf %lf %lf %lf \n",n,orb->points[n].pt, orb->points[n].px, \ orb->points[n].py,orb->points[n].pz,orb->points[n].vx,orb->points[n].vy,orb->points[n].vz); } */ } GMTSAR_V5.7/.svn/pristine/56/56e81c2f2566954c80a40893e810851c28cbca3b.svn-base000444 015705 000000 00000003060 13505462013 025373 0ustar00sandwellwheel000000 000000 #------------------------------------------------------------------------------- # $Id: GNUmakefile 210 2015-08-07 15:46:10Z pwessel $ # # makefile for top GMTSAR directory # # !!! THIS MAKEFILE IS GMTSAR GMT DEVELOPERS ONLY !!! # # This makefile extends the regular Makefile by adding # targets to build tarballs, get latest GNU config files. # # Date: 27-JAN-2013 #------------------------------------------------------------------------------- include Makefile # Where to place the gmtsar tarball #FTPDIR = /topex/ftp/pub/gmtsar FTPDIR = .. create: # We make the $(PACKAGE_TARNAME)-$(GMTSAR_VERSION) link from scratch each time cd ..; rm -f $(PACKAGE_TARNAME)-$(GMTSAR_VERSION); $(LN_S) $(notdir $(PWD)) $(PACKAGE_TARNAME)-$(GMTSAR_VERSION) tar: distro distro: create $(MAKE) spotless find . -type l -exec rm -f {} \; COPYFILE_DISABLE=true $(GNUTAR) --owner 0 --group 0 --mode a=rX,u=rwX -cjhvf $(FTPDIR)/$(PACKAGE_TARNAME)-$(GMTSAR_VERSION)-src.tar.bz2 \ -C .. $(PACKAGE_TARNAME)-$(GMTSAR_VERSION) --exclude GNUmakefile --exclude .svn rm -f $(PACKAGE_TARNAME)-$(GMTSAR_VERSION) latest-config: curl "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD" -s -R -o config.sub curl "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD" -s -R -o config.guess curl "http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_blas.m4" -s -R -o ax_blas.m4 curl "http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_lapack.m4" -s -R -o ax_lapack.m4 GMTSAR_V5.7/.svn/pristine/3c/3cd6f6847b3a3c91567c2dcd6f1710f919b54e24.svn-base000444 015705 000000 00000000704 13505462013 025617 0ustar00sandwellwheel000000 000000 PROG = test_shift CSRCS = test_shift.c FSRCS = FC = CC = gcc OBJS = $(CSRCS:.c=.o) $(FSRCS:.f=.o) INC = /opt/local/include/gmt CLIBS = -L/opt/local/lib -lgmt -L../lib_src -lgmtsar -lm FLIBS = CFLAGS = -O2 -Bstatic $(M64) -w $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) $(FLIBS) $(VEC) .c.o: $(CC) $(CFLAGS) -c $*.c -o $*.o -I$(INC) -I/usr/local/GMTSAR/gmtsar/include install: \mv $(PROG) ../../bin clean: -rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/3c/3c762876fbc9a8397375677825aa5f33b235c34e.svn-base000444 015705 000000 00000003770 13505462013 025424 0ustar00sandwellwheel000000 000000 9 9 1.8315638888734179e-02 4.3936933623407420e-02 8.2084998623898800e-02 1.1943296826671962e-01 1.3533528323661270e-01 1.1943296826671962e-01 8.2084998623898800e-02 4.3936933623407420e-02 1.8315638888734179e-02 4.3936933623407420e-02 1.0539922456186433e-01 1.9691167520419406e-01 2.8650479686019009e-01 3.2465246735834974e-01 2.8650479686019009e-01 1.9691167520419406e-01 1.0539922456186433e-01 4.3936933623407420e-02 8.2084998623898800e-02 1.9691167520419406e-01 3.6787944117144233e-01 5.3526142851899028e-01 6.0653065971263342e-01 5.3526142851899028e-01 3.6787944117144233e-01 1.9691167520419406e-01 8.2084998623898800e-02 1.1943296826671962e-01 2.8650479686019009e-01 5.3526142851899028e-01 7.7880078307140488e-01 8.8249690258459546e-01 7.7880078307140488e-01 5.3526142851899028e-01 2.8650479686019009e-01 1.1943296826671962e-01 1.3533528323661270e-01 3.2465246735834974e-01 6.0653065971263342e-01 8.8249690258459546e-01 1.0000000000000000e+00 8.8249690258459546e-01 6.0653065971263342e-01 3.2465246735834974e-01 1.3533528323661270e-01 1.1943296826671962e-01 2.8650479686019009e-01 5.3526142851899028e-01 7.7880078307140488e-01 8.8249690258459546e-01 7.7880078307140488e-01 5.3526142851899028e-01 2.8650479686019009e-01 1.1943296826671962e-01 8.2084998623898800e-02 1.9691167520419406e-01 3.6787944117144233e-01 5.3526142851899028e-01 6.0653065971263342e-01 5.3526142851899028e-01 3.6787944117144233e-01 1.9691167520419406e-01 8.2084998623898800e-02 4.3936933623407420e-02 1.0539922456186433e-01 1.9691167520419406e-01 2.8650479686019009e-01 3.2465246735834974e-01 2.8650479686019009e-01 1.9691167520419406e-01 1.0539922456186433e-01 4.3936933623407420e-02 1.8315638888734179e-02 4.3936933623407420e-02 8.2084998623898800e-02 1.1943296826671962e-01 1.3533528323661270e-01 1.1943296826671962e-01 8.2084998623898800e-02 4.3936933623407420e-02 1.8315638888734179e-02 GMTSAR_V5.7/.svn/pristine/3c/3cecf564e32afef62d3ab87fb897196c2ce9310f.svn-base000444 015705 000000 00000022256 13505462013 026132 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # Modified by Anders Hogrelius, April 18, 2017 # # process envisat formatted L1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_ENVI_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_ENVI_SLC.csh ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000 ASA_IMS_1PNESA20070709_054254_000000172059_00392_28001_0000 config.envi.slc.txt" echo "" echo " Place the L.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # # # if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set near_range = `grep near_range $3 | awk '{print $3}'` if ((! $?near_range) || ($near_range == "")) then set near_range = 0 endif set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set npatch = `grep num_patches $3 | awk '{print $3}'` if ((! $?npatch) || ($npatch == "")) then set npatch = 0 endif set fd = `grep fd1 $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # first clean up # cleanup.csh raw # # preprocess the raw data # echo "" echo " PREPROCESS Envisat SLC DATA -- START" cd raw echo "ENVI_SLC_pre_process $master $earth_radius " ENVI_SLC_pre_process $master $earth_radius set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` echo "ENVI_SLC_pre_process $slave $RAD " ENVI_SLC_pre_process $slave $RAD # cd .. endif # ############################################# # 2 - start from align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/.svn/pristine/69/6968108f90a4dbba9267d29c595a95b97f94a8f9.svn-base000444 015705 000000 00000040075 13505462013 025536 0ustar00sandwellwheel000000 000000 /* $Id: sbas.h 39 2016-06-18 03/16/24 Xiaohua Xu $ */ /***************************************************************************************** * Program to do InSAR time-series analysis. * Use Small Baseline Subset (SBAS) *algorithm. * * * * Xiaohua Xu, Jul 2016 * * * * Taking the old sbas code to add atmospheric correction by means of common *point * stacking by Tymofeyeva & Fialko 2015. * * * ****************************************************************************************/ /***************************************************************************************** * Modification history: ** 07/25/2017 EXU Set num of iterations as a parameter * 07/22/2017 EXU Fixing *a few bugs, using only dates having atm screen for vel compute * 07/05/2017 *EXU Changing count of matrix to int64_t to avoid overflow * * 07/23/2016 EXU Decomposed the program into subroutines. * 08/02/2016 EXU *Start to build in the atmospheric correction Tymofyeyeva & Fialko 2015* * 09/01/2016 EXU Determing the number of iterations. * ****************************************************************************************/ /**************************************************************************************** * Creator: Xiaopeng Tong and David Sandwell ** (Scripps Institution of Oceanography) * Date: 12/23/2012 ** ****************************************************************************************/ /***************************************************************************************** * Modification history: ** 08/31/2013 debug the program ** 03/20/2014 add DEM error, mean velocity ** 03/22/2014 add correlation, use weighted least-squares ** 04/01/2014 add seasonal term ** 08/19/2014 allocate memory with 1D array instead of multiple malloc * * 08/19/2014 do not require the velocity curve go through origin * 08/19/2014 *remove seasonal term * * 08/19/2014 fix temporal smoothing * ****************************************************************************************/ /* Reference: P. Berardino, G. Fornaro, R. Lanari, and E. Sansosti, “A new algorithm for surface deformation monitoring based on small baseline differential SAR interferograms,” IEEE Trans. Geosci. Remote Sensing, vol. 40, pp. 2375–2383, Nov. 2002. Schmidt, D. A., and R. Bürgmann 2003, Time-dependent land uplift and subsidence in the Santa Clara valley, California, from a large interferometric synthetic aperture radar data set, J. Geophys. Res., 108, 2416, doi:10.1029/2002JB002267, B9. Tong, X. and Schmidt, D., 2016. Active movement of the Cascade landslide complex in Washington from a coherence-based InSAR time series method. Remote Sensing of Environment, 186, pp.405-415. Tymofyeyeva, E. and Fialko, Y., 2015. Mitigation of atmospheric phase delays in InSAR data, with application to the eastern California shear zone. Journal of Geophysical Research: Solid Earth, 120(8), pp.5952-5963. */ /* Use DGELSY to solve the equations */ /* Calling DGELSY using column-major order */ #include "sbas.h" #include "gmtsar.h" #include #define max(a, b) (((a) > (b)) ? (a) : (b)) #ifdef DEBUG #define checkpoint() printf("Checkpoint at line %lld in file %s\n", __LINE__, __FILE__) #else #define checkpoint() #endif char *USAGE = "USAGE: sbas intf.tab scene.tab N S xdim ydim [-atm ni] [-smooth sf] " "[-wavelength wl] [-incidence inc] [-range -rng] [-rms] [-dem]\n\n" " input: \n" " intf.tab -- list of unwrapped (filtered) interferograms:\n" " format: unwrap.grd corr.grd ref_id rep_id B_perp \n" " scene.tab -- list of the SAR scenes in chronological order\n" " format: scene_id number_of_days \n" " note: the number_of_days is relative to a reference date \n" " N -- number of the interferograms\n" " S -- number of the SAR scenes \n" " xdim and ydim -- dimension of the interferograms\n" " -smooth sf -- smoothing factors, default=0 \n" " -atm ni -- number of iterations for atmospheric " "correction, default=0(skip atm correction) \n" " -wavelength wl -- wavelength of the radar wave (m) default=0.236 " "\n" " -incidence theta -- incidence angle of the radar wave (degree) " "default=37 \n" " -range rng -- range distance from the radar to the center of " "the interferogram (m) default=866000 \n" " -rms -- output RMS of the data misfit grids (mm): " "rms.grd\n" " -dem -- output DEM error (m): dem.grd \n\n" " output: \n" " disp_##.grd -- cumulative displacement time series (mm) " "grids\n" " vel.grd -- mean velocity (mm/yr) grids \n\n" " example:\n" " sbas intf.tab scene.tab 88 28 700 1000 \n\n" "REFERENCES: \n" "Berardino P., G. Fornaro, R. Lanari, and E. Sansosti, “A new algorithm " "for surface deformation monitoring based on small baseline differential " "SAR interferograms,” IEEE Trans. Geosci. Remote Sensing, vol. 40, pp. " "2375–2383, Nov. 2002. \n\n" "Schmidt, D. A., and R. Bürgmann 2003, Time-dependent land uplift and " "subsidence in the Santa Clara valley, California, from a large " "interferometric synthetic aperture radar data set, J. Geophys. Res., 108, " "2416, doi:10.1029/2002JB002267, B9. \n\n" "Tong, X. and Schmidt, D., 2016. Active movement of the Cascade landslide " "complex in Washington from a coherence-based InSAR time series method. " "Remote Sensing of Environment, 186, pp.405-415. \n\n" "Tymofyeyeva, E. and Fialko, Y., 2015. Mitigation of atmospheric phase " "delays in InSAR data, with application to the eastern California shear " "zone. Journal of Geophysical Research: Solid Earth, 120(8), " "pp.5952-5963.\n\n" "Xu, X., Sandwell, D. T., Tymofyeyeva, E., González-Ortega, A., & Tong, X.\n" "(2017). Tectonic and anthropogenic deformation at the Cerro Prieto\n" "geothermal step-over revealed by Sentinel-1A InSAR. IEEE Transactions on\n" "Geoscience and Remote Sensing, 55(9), 5284-5292.\n\n"; int main(int argc, char **argv) { /* define variables */ double EE = 2.718281828459046; char **gfile = NULL, **cfile = NULL; int64_t i, j, m, n, nrhs = 1, xdim, lwork, ydim, k1, k2; int64_t N, S; int64_t ldb, lda, *flag = NULL, *jpvt = NULL, *H = NULL, *L = NULL, *hit = NULL, *mark = NULL; int64_t flag_rms = 0, flag_dem = 0; float *phi = NULL, *tmp_phi = NULL, sf, *disp = NULL, *res = NULL, *dem = NULL, *bperp = NULL, *vel = NULL, *screen = NULL, *tmp_screen = NULL; float *var = NULL; double *G = NULL, *A = NULL, *Gs = NULL, *d = NULL, *ds = NULL; double *work = NULL, *time = NULL; double rng, wl, theta, scale, aa, bb; FILE *infile = NULL, *datefile = NULL; void *API = NULL; /* GMT control structure */ struct GMT_GRID *Out = NULL; /* For the output grid */ double *atm_rms; int64_t *atm_rank, n_atm = 0, kk; float *sfs; if (argc < 7) die("\n", USAGE); /* Begin: Initializing new GMT session */ if ((API = GMT_Create_Session(argv[0], 0U, 0U, NULL)) == NULL) return EXIT_FAILURE; /* default parameters are for ALOS-1 */ /* use range at the center of the image*/ rng = 866000; /* wavelength of the radar wave*/ wl = 0.236; /* incidence angle at the center of the image*/ theta = 37; /* smoothing factor */ sf = 0; /* reading in some parameters and open corresponding files */ if ((infile = fopen(argv[1], "r")) == NULL) die("Can't open file", argv[1]); if ((datefile = fopen(argv[2], "r")) == NULL) die("Can't open file", argv[2]); N = (int64_t)atoi(argv[3]); S = (int64_t)atoi(argv[4]); xdim = (int64_t)atoi(argv[5]); ydim = (int64_t)atoi(argv[6]); fprintf(stderr, "\n"); /* read in the parameters from command line */ parse_command_ts(argc, argv, &sf, &wl, &theta, &rng, &flag_rms, &flag_dem, &n_atm); /* setting up some parameters */ scale = 4.0 * M_PI / wl / rng / sin(theta / 180.0 * M_PI); m = N + S - 2; // number of rows in the G matrix n = S; // number of columns in the G matrix lwork = max(1, m * n + max(m * n, nrhs) * 16); lda = max(1, m); ldb = max(1, max(m, n)); /* memory allocation */ // also malloc for atm(nx,ny,S), hit(N,S), sum_vec(N) // and atm_rms(S) allocate_memory_ts(&jpvt, &work, &d, &ds, &bperp, &gfile, &cfile, &L, &time, &H, &G, &A, &Gs, &flag, &dem, &res, &vel, &phi, &var, &disp, n, m, lwork, ldb, N, S, xdim, ydim, &hit); // initialization init_array_ts(G, Gs, res, dem, disp, n, m, xdim, ydim, N, S); // reading in the table files read_table_data_ts(API, infile, datefile, gfile, cfile, H, bperp, flag, var, phi, S, N, xdim, ydim, &Out, L, time); printf("%.6f %.6f %.6f %.6f\n", sf, scale, time[0], bperp[0]); if (n_atm == 0) { atm_rms = (double *)malloc(S * sizeof(double)); for (i = 0; i < S; i++) atm_rms[i] = 0.0; init_G_ts(G, Gs, N, S, m, n, L, H, time, sf, bperp, scale); for (i = 0; i < m * n; i++) A[i] = G[i]; for (i = 0; i < xdim * ydim * S; i++) disp[i] = 0.0; lsqlin_sov_ts(xdim, ydim, disp, vel, flag, d, ds, time, G, Gs, A, var, phi, N, S, m, n, work, lwork, flag_dem, dem, flag_rms, res, jpvt, wl, atm_rms); } else { fprintf(stderr, "\n\nApplying atmospheric correction by common point stacking...\n\n"); mark = (int64_t *)malloc(N * sizeof(int64_t)); screen = (float *)malloc(xdim * ydim * sizeof(float) * S); tmp_phi = (float *)malloc(xdim * ydim * sizeof(float) * N); tmp_screen = (float *)malloc(xdim * ydim * sizeof(float)); atm_rms = (double *)malloc(S * sizeof(double)); atm_rank = (int64_t *)malloc(S * sizeof(int64_t)); sfs = (float *)malloc((n_atm + 2) * sizeof(float)); sfs[0] = 1000.0; sfs[n_atm] = sf; if (n_atm >= 2) { bb = (log(1000) - log(sf)) / (double)(n_atm); aa = pow(EE, log(sf) - bb); for (i = 1; i <= n_atm - 1; i++) sfs[n_atm - i] = aa * pow(EE, bb * (double)(i + 1)); } // get the hit matrix which records the pairs processed for (i = 0; i < S * S; i++) hit[i] = 0; fprintf(stderr, "\n\n\nHit Matrix:\n"); for (i = 0; i < N; i++) { for (j = 0; j < S; j++) { if (H[i * 2] == L[j]) k1 = j; if (H[i * 2 + 1] == L[j]) k2 = j; } hit[k1 * S + k2] = 1; } for (i = 0; i < S; i++) { fprintf(stderr, "%lld ", L[i]); for (j = 0; j < S; j++) { fprintf(stderr, "%lld ", hit[i * S + j]); } fprintf(stderr, "\n"); } fprintf(stderr, "\n"); fprintf(stderr, "\n"); // for debuging // example of connect // connect(L,H,time,hit,mark,N,S,10,0); // fprintf(stderr,"\n\n%lld ",L[10]); // for (i=0;i 1) for (i = 0; i < xdim * ydim * N; i++) tmp_phi[i] = phi[i]; fprintf(stderr, "Removing deformation time-series from original " "unwrapped phase...\n"); remove_ts(tmp_phi, disp, xdim, ydim, N, S, H, L); // compute atmospheric phase screen and the noise rms, 1st time, do not // update the phase during computation fprintf(stderr, "Computing atmospheric phase screen by common-point stacking...\n"); if (kk == 1) { fprintf(stderr, "Initial estimate of APS...\n"); for (i = 0; i < S; i++) { connect(L, H, time, hit, mark, N, S, i, 1); // compute atm with original interferograms sum_intfs(phi, mark, tmp_screen, xdim, ydim, N); atm_rms[i] = compute_noise(tmp_screen, xdim, ydim); for (j = 0; j < xdim * ydim; j++) screen[i * xdim * ydim + j] = tmp_screen[j]; // apply_screen(tmp_screen,phi,xdim,ydim,N,mark); } rank_double(atm_rms, atm_rank, S); for (i = 0; i < S; i++) fprintf(stderr, "atm_noise(NO.%lld) = %lf\n ", atm_rank[i], atm_rms[atm_rank[i]]); fprintf(stderr, "\n\n"); } // compute and apply aps and update as you go for (i = 0; i < S; i++) { connect(L, H, time, hit, mark, N, S, atm_rank[i], 1); sum_intfs(tmp_phi, mark, tmp_screen, xdim, ydim, N); atm_rms[atm_rank[i]] = compute_noise(tmp_screen, xdim, ydim); for (j = 0; j < xdim * ydim; j++) screen[atm_rank[i] * xdim * ydim + j] = tmp_screen[j]; connect(L, H, time, hit, mark, N, S, atm_rank[i], 0); apply_screen(tmp_screen, tmp_phi, xdim, ydim, N, mark); } rank_double(atm_rms, atm_rank, S); for (i = 0; i < S; i++) fprintf(stderr, "atm_noise(NO.%lld) = %lf\n ", atm_rank[i], atm_rms[atm_rank[i]]); fprintf(stderr, "\n\n"); // start agian with aps correction fprintf(stderr, "Applying atmospheric phase screen to original unwrapped phase...\n"); for (i = 0; i < xdim * ydim * N; i++) tmp_phi[i] = phi[i]; for (i = 0; i < S; i++) { connect(L, H, time, hit, mark, N, S, i, 0); for (j = 0; j < xdim * ydim; j++) tmp_screen[j] = screen[i * xdim * ydim + j]; apply_screen(tmp_screen, tmp_phi, xdim, ydim, N, mark); } } // lastly compute time-series sf = sfs[n_atm]; fprintf(stderr, "Setting smoothing parameter to %f...\n", sf); init_array_ts(G, Gs, res, dem, disp, n, m, xdim, ydim, N, S); init_G_ts(G, Gs, N, S, m, n, L, H, time, sf, bperp, scale); for (i = 0; i < m * n; i++) A[i] = G[i]; for (i = 0; i < xdim * ydim * S; i++) disp[i] = 0.0; lsqlin_sov_ts(xdim, ydim, disp, vel, flag, d, ds, time, G, Gs, A, var, tmp_phi, N, S, m, n, work, lwork, flag_dem, dem, flag_rms, res, jpvt, wl, atm_rms); } // write output write_output_ts(API, Out, argc, argv, xdim, ydim, S, flag_rms, flag_dem, disp, vel, res, dem, screen, wl, n_atm, L); /* free memory */ free_memory_ts(N, phi, var, gfile, cfile, disp, G, A, Gs, H, d, ds, L, res, vel, time, flag, bperp, dem, work, jpvt, hit); if (n_atm != 0) { free(mark); free(screen); free(tmp_screen); free(atm_rank); free(tmp_phi); free(atm_rms); } fclose(infile); fclose(datefile); if (GMT_Destroy_Session(API)) return EXIT_FAILURE; /* Remove the GMT machinery */ return (EXIT_SUCCESS); } GMTSAR_V5.7/.svn/pristine/69/695452bc5621dc58ff6b4261620b88a5ee6d4a2b.svn-base000444 015705 000000 00000041051 13505462014 025542 0ustar00sandwellwheel000000 000000 /***************************************************************************/ /* read_ALOS_data reads an ALOS IMG file containing SLC data. */ /* The program skips the first 720 bytes of the IMG file but copies the */ /* remaining data to the IMG.SLC file after checking and fixing problems. */ /* The first record is read to determine the linelength, starting PRF, */ /* and near_range. If the line length or PRF change then the program */ /* halts. If the near_range changes then the lines are shifted and */ /* unconstrained values at the ends are set to zero. */ /* During this processing the available parameters are added to the */ /* PRM-file. */ /***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 03/18/2013 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * * 06/29/2006 added the near_range as an optional command-line argument * * 02/19/2007 added the ability to remove duplicate lines * * 03/07/2007 more robust to bad data in file * * 03/26/2007 ability to swap bytes (read on PC) RJM * * 03/28/2007 part of subroutine RJM * * removed set n_azimuth to 9000 rather than default * * 07/17/08 creates new file when prf changes RJM * * 07/17/08 reformatted; added functions RJM * ***************************************************************************/ /* the data header information is read into the structure dfd the line prefix information is read into sdr Values read here (and or generated) are: num_rng_bins bytes_per_line good_bytes_per_line PRF pulse_dur near_range num_lines num_patches SC_clock_start SC_clock_stop clock_start clock_stop */ #include "image_sio.h" #include "lib_functions.h" void swap32(float *, float *, int); void swap_ALOS_data_info(struct sardata_info *sdr); long read_sardata_info(FILE *, struct PRM *, int *, int *); void print_params(struct PRM *prm); int assign_sardata_params(struct PRM *, int, int *, int *); int check_shift(struct PRM *, int *, int *, int *, int); int set_file_position(FILE *, long *, int); int reset_params(struct PRM *prm, long *, int *, int *); int fill_shift_data(int, int, int, int, int, char *, char *, FILE *); int handle_prf_change(struct PRM *, FILE *, long *, int); struct sardata_record r1; struct sardata_descriptor dfd; struct sardata_info sdr; long read_ALOS_data_SLC(FILE *imagefile, FILE *outfile, struct PRM *prm, long *byte_offset) { float *rdata, *rdata_swap; short *i2data; int record_length0; /* length of record read at start of file */ int record_length1; /* length of record read in file */ int start_sdr_rec_len = 0; /* sdr record length for fisrt record */ int slant_range_old = 0; /* slant range of previous record */ int line_suffix_size; /* number of bytes after data */ int data_length; /* bytes of data */ int n, m, ishift, shift, shift0, jj; int header_size, line_prefix_size; int nclip = 0, nsum = 0; double rtest, sgn, rsum = 0., rmad = 0., tfac = 1.; double get_clock(); if (debug) fprintf(stderr, ".... reading header \n"); /* read header information */ read_sardata_info(imagefile, prm, &header_size, &line_prefix_size); /* calculate parameters (data length, range bins, etc) */ assign_sardata_params(prm, line_prefix_size, &line_suffix_size, &record_length0); /* allocate memory */ if ((rdata = (float *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if ((rdata_swap = (float *)malloc(record_length0)) == NULL) die("couldn't allocate memory for input indata.\n", ""); if ((i2data = (short *)malloc(record_length0)) == NULL) die("couldn't allocate memory for output indata.\n", ""); // fprintf(stderr,"after allocate data\n"); /* if byte_offset < 0 this is the first time through */ /* if prf change has occurred, set file to byte_offset */ set_file_position(imagefile, byte_offset, header_size); if (verbose) fprintf(stderr, ".... reading data (byte %ld) \n", ftell(imagefile)); shift0 = 0; n = 1; m = 0; /* read the rest of the file */ while ((fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile)) == 1) { fseek(imagefile, prefix_off, SEEK_CUR); /* skip extra bytes in ALOS-2 prefix */ n++; /* checks for little endian/ big endian */ if (swap) swap_ALOS_data_info(&sdr); /* if this is partway through the file due to prf change, reset sequence, * PRF, and near_range */ if ((*byte_offset > 0) && (n == 2)) reset_params(prm, byte_offset, &n, &m); if (n == 2) start_sdr_rec_len = sdr.record_length; if (sdr.record_length != start_sdr_rec_len) { printf(" ***** warning sdr.record_length error %d \n", sdr.record_length); sdr.record_length = start_sdr_rec_len; sdr.PRF = prm->prf; sdr.slant_range = slant_range_old; } if (sdr.sequence_number != n) printf(" missing line: n, seq# %d %d \n", n, sdr.sequence_number); /* check for changes in record_length and PRF */ record_length1 = sdr.record_length - line_prefix_size - line_suffix_size; if (record_length0 != record_length1) die("record_length changed", ""); /* if prf changes, close file and set byte_offset */ if ((sdr.PRF) != prm->prf) { handle_prf_change(prm, imagefile, byte_offset, n); break; } /* check shift to see if it varies from beginning or from command line value */ check_shift(prm, &shift, &ishift, &shift0, record_length1); if ((verbose) && (n / 2000.0 == n / 2000)) { fprintf(stderr, " Working on line %d prf %f record length %d slant_range %d \n", sdr.sequence_number, 0.001 * sdr.PRF, record_length1, sdr.slant_range); } /* read data */ data_length = record_length1 / 4; slant_range_old = sdr.slant_range; if (fread((float *)rdata, 4, data_length, imagefile) != data_length) break; /* skip over suffix */ fseek(imagefile, line_suffix_size, SEEK_CUR); /* write line header to output data */ /*fwrite((void *) &sdr, line_prefix_size, 1, outfile);*/ /* swap the floats if needed and compute some statistics */ if (swap) swap32(rdata, rdata_swap, data_length); for (jj = 0; jj < data_length; jj++) { sgn = 1.; // if(jj%2 != 0) sgn = -1.; experiment to switch sign of imaginary // component if (swap) { rtest = sgn * slc_fact * rdata_swap[jj]; } else { rtest = sgn * slc_fact * rdata[jj]; } /* compute the average value of output */ rsum = rsum + fabs(rtest); nsum = nsum + 1; i2data[jj] = (short)clipi2(rtest); if ((int)fabs(rtest) > I2MAX) nclip = nclip + 1; } /* write data */ if (shift == 0) { fwrite((float *)i2data, 2, data_length, outfile); /* if data is shifted, fill in with data values of NULL_DATA at start or * end*/ } else if (shift != 0) { fprintf(stderr, "near range change"); break; } } //printf("chirp_length = %.12d\n",sdr.chirp_length); //printf("chirp_linear_coeff = %.12d\n",sdr.chirp_linear_coeff); /* calculate end time and fix prf */ prm->prf = 0.001 * prm->prf; prm->clock_stop = get_clock(sdr, tbias); prm->SC_clock_stop = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_stop; /* m is non-zero only in the event of a prf change */ prm->num_lines = n - m - 1; /* make sure num lines is divisible by 32 */ prm->num_lines = prm->num_lines - prm->num_lines % 32; /* for SLC data the prm->nrows = prm->num_valid_az = prm->num_lines and * prm->num_patches = 1 */ prm->nrows = prm->num_lines; prm->num_valid_az = prm->num_lines; prm->num_patches = 1; if (verbose) print_params(prm); fprintf(stderr, " %d integers were clipped \n", nclip); rmad = rsum / nsum; tfac = 2000. / rmad; if (tfac < 0.333 || tfac > 3.0) { fprintf(stderr, " %f median absolute deviation after scaling is \n", rmad); fprintf(stderr, " ERROR *** reset SCL_factor to something closer to %f \n", tfac * slc_fact); } free(rdata); free(rdata_swap); free(i2data); fclose(imagefile); fclose(outfile); return (*byte_offset); } /***************************************************************************/ double get_clock(struct sardata_info sdr, double tbias) { double time; // nsd = 24.0*60.0*60.0; /* seconds in a day */ time = (double)sdr.sensor_acquisition_DOY + (double)sdr.sensor_acquisition_msecs_day / 1000.0 / 86400.0 + tbias / 86400.0; return (time); } /***************************************************************************/ void print_params(struct PRM *prm) { fprintf(stdout, "input_file = %s \n", prm->input_file); fprintf(stdout, "num_rng_bins = %d \n", prm->num_rng_bins); fprintf(stdout, "bytes_per_line = %d \n", prm->bytes_per_line); fprintf(stdout, "good_bytes_per_line = %d \n", prm->good_bytes); fprintf(stdout, "first_sample = %d \n", prm->first_sample); fprintf(stdout, "PRF = %f \n", prm->prf); fprintf(stdout, "pulse_dur = %e \n", prm->pulsedur); fprintf(stdout, "near_range = %f \n", prm->near_range); fprintf(stdout, "num_lines = %d \n", prm->num_lines); fprintf(stdout, "num_patches = %d \n", prm->num_patches); fprintf(stdout, "SC_clock_start = %16.10lf \n", prm->SC_clock_start); fprintf(stdout, "SC_clock_stop = %16.10lf \n", prm->SC_clock_stop); fprintf(stdout, "clock_start = %16.12lf \n", prm->clock_start); fprintf(stdout, "clock_stop = %16.12lf \n", prm->clock_stop); } /***************************************************************************/ long read_sardata_info(FILE *imagefile, struct PRM *prm, int *header_size, int *line_prefix_size) { long nitems; *header_size = sizeof(struct sardata_record) + sizeof(struct sardata_descriptor); *line_prefix_size = sizeof(struct sardata_info) + prefix_off; if (*header_size != 720) die("header size is not 720 bytes\n", ""); if (*line_prefix_size != (412 + prefix_off)) die("prefix size is incorrect \n", ""); if (debug) fprintf(stderr, " header_size %d line_prefix_size %d swap data %d\n", *header_size, *line_prefix_size, swap); /* make sure that we are at the beginning */ /* re-read header even if resetting after a PRF change */ rewind(imagefile); if (verbose) fprintf(stderr, ".... reading header (byte %ld) \n", ftell(imagefile)); /* data processed before Sept 15, 2006 have a timing bias of 0.9 s */ /* data processed after this data have a smaller bias 0.0 s */ nitems = fread((void *)&r1, sizeof(struct sardata_record), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_RECORD_WCS, SARDATA_RECORD_RVL(&r1)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_record)), ftell(imagefile)); } nitems = fread((void *)&dfd, sizeof(struct sardata_descriptor), 1, imagefile); if (debug) { fprintf(stderr, SARDATA_DESCRIPTOR_WCS, SARDATA_DESCRIPTOR_RVL(&dfd)); fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_descriptor)), ftell(imagefile)); } nitems = fread((void *)&sdr, sizeof(struct sardata_info), 1, imagefile); fseek(imagefile, prefix_off, SEEK_CUR); /* skip extra bytes in ALOS-2 prefix */ if (debug) fprintf(stderr, " read %ld bytes at position %ld\n", (sizeof(struct sardata_info) + prefix_off), ftell(imagefile)); /* swap data little end/ big end if needed */ if (swap) swap_ALOS_data_info(&sdr); if (debug) fprintf(stderr, SARDATA__WCS, SARDATA_RVL(sdr)); return (nitems); } /***************************************************************************/ int assign_sardata_params(struct PRM *prm, int line_prefix_size, int *line_suffix_size, int *record_length0) { double get_clock(); prm->prf = sdr.PRF; prm->pulsedur = (1e-9) * sdr.chirp_length; prm->chirp_slope = sdr.chirp_linear_coeff/(1e-6); prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; /* record_length is 21100 */ /* beginning of line has a 412 byte prefix */ /* end of line has a 80 byte (40 pixels) suffix (right-fill pixels)*/ /* record_length0 (data length) is (20688 - 412) = 20276 */ /* n_data_pixels 10304 */ /* 2 bytes per pixel */ /* 412 bytes + (2*10304) bytes + (40*2) bytes = 21100 bytes*/ prm->good_bytes = 8 * sdr.n_data_pixels + line_prefix_size; prm->chirp_ext = 0; prm->num_rng_bins = sdr.n_data_pixels + prm->chirp_ext; /* chirp_ext formerly nextend */ prm->bytes_per_line = sdr.record_length; *line_suffix_size = sdr.record_length - prm->good_bytes; *record_length0 = sdr.record_length - line_prefix_size - *line_suffix_size; /* set to 4 times the number of range bins for PRM file */ prm->good_bytes = 4 * prm->num_rng_bins; prm->bytes_per_line = 4 * prm->num_rng_bins; /* set the mean values to zero */ prm->xmi = 0.; prm->xmq = 0.; prm->first_sample = 0; if (prm->near_range < 0) prm->near_range = sdr.slant_range; if (*record_length0 > 340000) { fprintf(stderr, "**** record_length is %d !\n", *record_length0); die("expect something like 340000 .... try -swap option?\n", "exiting"); } return (EXIT_SUCCESS); } /***************************************************************************/ int check_shift(struct PRM *prm, int *shift, int *ishift, int *shift0, int record_length1) { *shift = 2 * floor(0.5 + (sdr.slant_range - prm->near_range) / (0.5 * SOL / prm->fs)); *ishift = abs(*shift); if (*ishift > record_length1) { printf(" end: shift exceeds data window %d \n", *shift); die("exitting", ""); } if (*shift != *shift0) { printf(" near_range, shift = %d %d \n", sdr.slant_range, *shift); *shift0 = *shift; } return (EXIT_SUCCESS); } /***************************************************************************/ int set_file_position(FILE *imagefile, long *byte_offset, int header_size) { if (*byte_offset < 0) { *byte_offset = 0; rewind(imagefile); fseek(imagefile, header_size, SEEK_SET); } else { fseek(imagefile, *byte_offset, SEEK_SET); } return (EXIT_SUCCESS); } /***************************************************************************/ int reset_params(struct PRM *prm, long *byte_offset, int *n, int *m) { double get_clock(); prm->clock_start = get_clock(sdr, tbias); prm->SC_clock_start = ((double)sdr.sensor_acquisition_year) * 1000 + prm->clock_start; prm->prf = sdr.PRF; prm->near_range = sdr.slant_range; *n = sdr.sequence_number; *m = *n; *byte_offset = 0; if (verbose) { fprintf(stderr, " new parameters: \n sequence number %d \n PRF %f\n near_range %lf\n", *n, 0.001 * prm->prf, prm->near_range); } return (EXIT_SUCCESS); } /***************************************************************************/ int fill_shift_data(int shift, int ishift, int data_length, int line_suffix_size, int record_length1, char *data, char *shift_data, FILE *outfile) { int k; /* NULL_DATA = 15; znew randonly is 0 or 1 */ if (shift > 0) { for (k = 0; k < ishift; k++) shift_data[k] = NULL_DATA; for (k = 0; k < data_length - ishift; k++) shift_data[k + ishift] = data[k]; } /* if data is shifted, fill in with data vlues of NULL_DATA at end */ if (shift < 0) { for (k = 0; k < data_length - ishift - line_suffix_size; k++) shift_data[k] = data[k + ishift]; for (k = data_length - ishift - line_suffix_size; k < record_length1; k++) shift_data[k] = NULL_DATA; } /* write the shifted data out */ fwrite((char *)shift_data, data_length, 1, outfile); return (EXIT_SUCCESS); } /***************************************************************************/ int handle_prf_change(struct PRM *prm, FILE *imagefile, long *byte_offset, int n) { prm->num_lines = n; /* skip back to beginning of the line */ fseek(imagefile, -1 * (sizeof(struct sardata_info) + prefix_off), SEEK_CUR); /* define byte_offset */ *byte_offset = ftell(imagefile); /* tell the world */ printf(" *** PRF changed from %lf to %lf at line %d (byte %ld)\n", (0.001 * prm->prf), (0.001 * sdr.PRF), n, *byte_offset); printf(" end: PRF changed from %lf to %lf at line %d \n", (0.001 * prm->prf), (0.001 * sdr.PRF), n); return (EXIT_SUCCESS); } /***************************************************************************/ GMTSAR_V5.7/.svn/pristine/35/35b4d9b517369cc59639eea331179b896444e069.svn-base000444 015705 000000 00000014005 13505462014 025264 0ustar00sandwellwheel000000 000000 #!/usr/bin/perl use strict; if ($#ARGV < 3 ) { # print $#ARGV; # very strange, this number should be 0 if no input, but here -1 print "\nusage: dump_orbit_envi.pl start_time stop_time envi.LED orbdir\n\n"; print "input: start and stop time in Julian day format\n"; print " orbdir directory with Doris orbit data \n"; print "output: envi.LED store the orbit information, used by ENVI_baseline \n\n"; print " year day_of_year sec_of_day x y z vx vy vz \n\n"; exit; } my %month = ( "JAN" => "01", "FEB" => "02", "MAR" => "03", "APR" => "04", "MAY" => "05", "JUN" => "06", "JUL" => "07", "AUG" => "08", "SEP" => "09", "OCT" => "10", "NOV" => "11", "DEC" => "12"); my $orb_dir = $ARGV[3]; my @orb_list = `ls $orb_dir`; my @orb_data; my @out_orb_data; my $start_time_ymd; my $stop_time_ymd; my $tmp_start; my $tmp_stop; my $tmp_time; my $tmp_time_jul; my $tmp_jul_day; my $tmp_sec_of_day; my $start_time_jul; my $stop_time_jul; my $start_orb_time; my $stop_orb_time; my $orb_file; my $out_file; my $n; my $count; my $first_time; my $test_start_time_jul; my $test_stop_time_jul; ####################### grep start and stop time from PRM ############### $start_time_jul = $ARGV[0]; $stop_time_jul = $ARGV[1]; $out_file = $ARGV[2]; $start_time_ymd = jul2ymd($start_time_jul); $stop_time_ymd = jul2ymd($stop_time_jul); $test_start_time_jul = ymd2jul($start_time_ymd); $test_stop_time_jul = ymd2jul($stop_time_ymd); $start_orb_time = ($start_time_jul+$stop_time_jul)/2-14/60/24; # 28 points $stop_orb_time = ($start_time_jul+$stop_time_jul)/2+14/60/24; #print "Julian input: $start_time_jul $stop_time_jul \nYMD converted:$start_time_ymd $stop_time_ymd \nJulian converted back:$test_start_time_jul $test_stop_time_jul\n"; #print "orb time range: $start_orb_time $stop_orb_time \n"; ####################### Orbit file ###################################### $n = 0; LINE:foreach(@orb_list){ if($_ =~ /AXVF-P(\d*)_(\d*)_(\d*)_(\d*)_(\d*)_(\d*)/){ $tmp_start = $3.".$4"; $tmp_stop = $5.".$6"; #print "$tmp_start,$tmp_stop \n"; if(($tmp_start < $start_time_ymd) && ( $tmp_stop > $stop_time_ymd) ) { print "Orbit data: \n".$orb_dir."/".$_; $orb_file = $orb_dir."/".$_; $n++; } } last LINE if($n >=1); } ####################### Read orbit file and print out 28 points ####### open(DAT,$orb_file) || die("Could not open file!"); @orb_data = ; close(DAT); $count = 0; LINE:foreach(@orb_data){ if($_ =~ /^(\d*)-(\w*)-(\d*) (\d*):(\d*):(\d*).(\d*) (\S*) (\S*) (\S*) (\S*) (\S*) (\S*) (\S*) (\S*)/){ $tmp_time = $3.$month{$2}.$1.".".$4.$5.$6; $tmp_time_jul = ymd2jul($tmp_time); $tmp_jul_day = int($tmp_time_jul)-int($tmp_time_jul/1000)*1000; $tmp_sec_of_day = $4*60*60+$5*60+$6; #print "$tmp_time_jul\n"; if (($tmp_time_jul > $start_orb_time) && ($tmp_time_jul < $stop_orb_time)){ $count++; if ($count == 1) { $first_time = "$3 $tmp_jul_day $tmp_sec_of_day"; push(@out_orb_data,"$3 $tmp_jul_day $tmp_sec_of_day $10 $11 $12 $13 $14 $15\n"); } else { push(@out_orb_data,"$3 $tmp_jul_day $tmp_sec_of_day $10 $11 $12 $13 $14 $15\n"); } } } } unshift(@out_orb_data,"$count $first_time 60 \n"); open(DAT2,">$out_file") || die("Could not open file!"); print DAT2 @out_orb_data; close(DAT2); ################## subroutine to convert time format ################# sub ymd2jul { # convert year month day hour min sec to Julian day #$jul.day = ymd2jul($ymd.hms); #print "$_[0]\n"; my $iyear = substr($_[0],0,4); my $imon = substr($_[0],4,2); my $iday = substr($_[0],6,2); my $ihou = substr($_[0],9,2); my $imin = substr($_[0],11,2); my $isec = substr($_[0],13,2); my $jday; my $julday; #print "$_ \n$iyear $imon $iday $ihou $imin $isec \n"; my @jsum = (0,31,59,90,120,151,181,212,243,273,304,334); my @jsum2= (0,31,60,91,121,152,182,213,244,274,305,335); if ($iyear%400 == 0) { #leap year $jday=$jsum2[$imon-1]+$iday; } elsif ($iyear%100 == 0) { #not a leap year $jday=$jsum[$imon-1]+$iday; } elsif ($iyear%4 == 0) { #leap year $jday=$jsum2[$imon-1]+$iday; } else { #not a leap year $jday=$jsum[$imon-1]+$iday; } $julday = $iyear*1000 + $jday + $ihou/24 + $imin/60/24 + $isec/60/60/24; return $julday; } sub jul2ymd { # convert Julian day to year month day hour min sec #$ymd.hms = jul2ymd($julday); my $iyear = substr($_[0],0,4); my $jday = substr($_[0],4,3); my $decimal = sprintf("%.8f", ($_[0] - int($_[0]))); my $imon; my $iday; my $ihou; my $imin; my $isec; my $ymd; my @jsum = (0,31,59,90,120,151,181,212,243,273,304,334); my @jsum2= (0,31,60,91,121,152,182,213,244,274,305,335); if ($iyear%400 == 0) { #leap year $imon = findmonth($jday,@jsum2); $iday = $jday-$jsum2[$imon-1]; } elsif ($iyear%100 == 0) { #not a leap year $imon = findmonth($jday,@jsum); $iday = $jday-$jsum[$imon-1]; } elsif ($iyear%4 == 0) { #leap year $imon = findmonth($jday,@jsum2); $iday = $jday-$jsum2[$imon-1]; } else { #not a leap year $imon = findmonth($jday,@jsum); $iday = $jday-$jsum[$imon-1]; } $ihou = int(24*$decimal); $imin = int(60*24*$decimal-60*$ihou); $isec = int(60*60*24*$decimal-60*60*$ihou-60*$imin); #print "$_ \n$iyear $imon $iday $ihou $imin $isec \n"; $ymd = sprintf("%.6f", $iyear*10000+$imon*100+$iday+$ihou/100+$imin/10000+$isec/1e6); return $ymd; } sub findmonth { #$imon = findmonth($jday,@jsum); my $jday = $_[0]; my @jsum = ($_[1],$_[2],$_[3],$_[4],$_[5],$_[6],$_[7],$_[8],$_[9],$_[10],$_[11],$_[12]); #print "$jday @jsum \n"; my $n = 0; my $count = 0; my $imonth; my $diff; LINE:foreach(@jsum){ $count++; $diff = $_ - $jday; #print "$count $diff \n"; if ($diff >= 0){ $n++; } last LINE if($n >=1); } if ( ($count == 12) & ($diff <= 0) ){ $imonth = 12; } else { $imonth = $count-1; } #print "$n $count $imonth \n"; return $imonth; } GMTSAR_V5.7/.svn/pristine/35/35ed5eecbc685b14559fbcc17c9824cc8d7d4aef.svn-base000444 015705 000000 00000001710 13505462013 026206 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # Usage: m2s.csh pixel_size_in_meters llpfile # # Convert pixel dimension in meters to dx/dy in arc seconds at mean latitude set pix = $1 # Input pixel dimension in meters set llp = $2 # lon lat phase binary float file # 1. Get w e s n in array set range = (`gmt gmtinfo $2 -bi3f -C`) # 2. Get mean latitude set mlat = `gmt math -Q ${range[3]} ${range[4]} ADD 2 DIV = ` # 3. Get nearest integer 1/2 arc second for latitude (at least 1") set dy = `gmt math -Q $pix 111195.079734 DIV 3600 MUL 2 MUL RINT 1 MAX 2 DIV = ` # 4. Get nearest integer 1/2 arc second for longitude at mean latitude (at least 1") set dx = `gmt math -Q $pix 111195.079734 DIV $mlat COSD DIV 3600 MUL 2 MUL RINT 1 MAX 2 DIV = ` # Report two -Idx/dy settings: first for actual grid and 2nd for 10 times larger intervals set inc1 = "${dx}s/${dy}s" set dx = `gmt math -Q $dx 10 MUL = ` set dy = `gmt math -Q $dy 10 MUL = ` set inc2 = "${dx}s/${dy}s" echo $inc1 $inc2 GMTSAR_V5.7/.svn/pristine/35/358312213e5bc057f2644b28bc798d499d07ff9f.svn-base000444 015705 000000 00000025566 13505462013 025431 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua(Eric) Xu, Mar 20 2017 # # set a directory with all downloaded orbits. e.g. orb_dir/S1A and orb_dir/S1B # # set a local directory that stores S1A and S1B orbits. e.g. orb_dir/S1A and orb_dir/S1B # # For linux users, modify the date command accordingly in order to let the script run. # Some linux system has issues with the if statement comapring tt, t1, t2. This is not fixed yet # # alias wgetasf to 'wget --http-user=**** --http-password=****' in .cshrc or .tcshrc file # requires having an account on with ASF # # modified from organize_files_tops.csh for linux uses. date command and some if statements are changed # if ($#argv != 3) then echo "" echo "Usage: organize_files_tops_linux.csh filelist pins.ll mode" echo " organize one track of S1A TOPS data, redefine frames, precise/restituted orbit is required" echo "" echo "filest:" echo " pth_filename1" echo " pth_filename2" echo " ......" echo "" echo "pins.ll:" echo " lon1 lat1" echo " lon2 lat2" echo " ......" echo "" echo "Note: " echo " files listed in filelist should be the .SAFE directory with absolute path." echo " mode = 1 will tell how many records are gonna be generated. mode = 2 will do the organizing." echo "" exit 1 endif source ~/.cshrc set url_root = "https://s1qc.asf.alaska.edu/aux_poeorb" set orb_dir = "/geosat2/InSAR_Processing/Sentinel_Orbits" if (! -f orbits.list) then wget $url_root -O orbits.html grep EOF orbits.html | awk -F'"' '{print $2}' > orbits.list rm orbits.html endif set ii = 0 set mode = $3 if (-f tmprecord) rm tmprecord # divide the list of files into sets, and create frames based on the given pins foreach line (`awk '{print $0}' $1`) set file1 = `echo $line | awk -F"," '{print $1}'` set date1 = `echo $file1 | awk '{print substr($1,length($1)-54,8)}'` set SAT1 = `echo $file1 | awk '{print substr($1,length($1)-71,3)}'` if ($ii == 0) then set file0 = `echo $file1` set date0 = `echo $date1` set SAT0 = `echo $SAT1` echo $file1 > tmprecord set ii = 1 else # gather files from the same date if ($date1 == $date0 && $SAT1 == $SAT0) then echo $file1 >> tmprecord else echo "" | awk '{printf("%s ","Combing")}' set jj = 1 set t2 = 9999999999 # examining whether the frames are consecutive foreach line2 (`awk '{print $0}' tmprecord`) echo $line2 | awk '{printf("%s ",$1)}' set tt = `echo $line2 | awk '{print substr($1,length($1)-54,15)}'` set ss2 = `echo $tt|awk '{print substr($1,1,4)"/"substr($1,5,2)"/"substr($1,7,2)" "substr($1,10,2)":"substr($1,12,2)":"substr($1,14,2)}'` set t1 = `date --date="$ss2" +%s` #set t1 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` set test = `echo $t1 $t2 | awk '{if ($1 > $2) print 1; else print 0}'` if ($test == 1) set jj = 0 set tt = `echo $line2 | awk '{print substr($1,length($1)-38,15)}'` set ss2 = `echo $tt|awk '{print substr($1,1,4)"/"substr($1,5,2)"/"substr($1,7,2)" "substr($1,10,2)":"substr($1,12,2)":"substr($1,14,2)}'` set t2 = `date --date="$ss2" +%s` #set t2 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` end echo "" | awk '{printf("%s\n","...")}' # get the orbit file names and download #set n1 = `date -v-1d -jf "%Y%m%d" $date0 +%Y%m%d` #set n2 = `date -v+1d -jf "%Y%m%d" $date0 +%Y%m%d` set n1 = ` date --date="$date0 - 1 day" +%Y%m%d ` set n2 = ` date --date="$date0 + 1 day" +%Y%m%d ` set orb = `grep $SAT0 orbits.list | grep $n1 | grep $n2` echo $n1 $n2 $orb if (! -f $orb) then if (-f $orb_dir/$SAT0/$orb) then ln -s $orb_dir/$SAT0/$orb . else wgetasf $url_root"/"$orb endif endif # compute azimuth for the start and end set pin1 = `head -1 $2 | awk '{print $1,$2}'` set f1 = `head -1 tmprecord` make_s1a_tops $f1/annotation/*iw1*vv*xml $f1/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` # refinie the calculation in case the pin is far away from the starting frame. (baseline error) shift_atime_PRM.csh tmp2.PRM $tmpazi set azi1 = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set pin2 = `tail -1 $2 | awk '{print $1,$2}'` set f2 = `tail -1 tmprecord` make_s1a_tops $f2/annotation/*iw1*vv*xml $f2/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` # refinie the calculation in case the pin is far away from the starting frame. shift_atime_PRM.csh tmp2.PRM $tmpazi set azi2 = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set nl = `grep num_lines tmp2.PRM | awk '{print $3}'` if ($azi1 > 0 && $azi2 < $nl && $jj != 0) then awk '{print $1","$2}' $2 > tmpllt set pin0 = `awk NR==1'{print $0}' tmpllt` foreach line2 (`awk '{print $0}' tmpllt`) if ($line2 != $pin0) then echo $pin0 | awk -F"," '{print $1,$2}' > tmp1llt echo $line2 | awk -F"," '{print $1,$2}' >> tmp1llt if ($mode != 1) then create_frame_tops.csh tmprecord $orb tmp1llt 1 set newfile = `ls -t -d *.SAFE | awk NR==1'{print $0}'` set Frame1 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | head -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set Frame2 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | tail -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set dirname = `echo $Frame1"_"$Frame2` echo "Created Frame $Frame1 - $Frame2 ..." echo "" if (! -d $dirname) mkdir $dirname mv $newfile $dirname else echo "" echo "Frames on date $date0 will be re-organized..." echo "" endif set pin0 = `echo $line2` endif end else if ($jj == 0) then echo "" echo "SKIP $date0, as it stopped observation in the middle ..." echo "" else echo "" echo "SKIP $date0, as it does not have enough scenes ..." echo "" endif endif echo $file1 > tmprecord set file0 = `echo $file1` set date0 = `echo $date1` set SAT0 = `echo $SAT1` endif endif end # proces the last set of files echo "" | awk '{printf("%s ","Combing")}' set jj = 1 set t2 = 9999999999 foreach line2 (`awk '{print $0}' tmprecord`) echo $line2 | awk '{printf("%s ",$1)}' set tt = `echo $line2 | awk '{print substr($1,length($1)-54,15)}'` set ss2 = `echo $tt|awk '{print substr($1,1,4)"/"substr($1,5,2)"/"substr($1,7,2)" "substr($1,10,2)":"substr($1,12,2)":"substr($1,14,2)}'` set t1 = `date --date="$ss2" +%s` #set t1 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` set test = `echo $t1 $t2 | awk '{if ($1 > $2) print 1; else print 0}'` if ($test == 1) set jj = 0 set tt = `echo $line2 | awk '{print substr($1,length($1)-38,15)}'` set ss2 = `echo $tt|awk '{print substr($1,1,4)"/"substr($1,5,2)"/"substr($1,7,2)" "substr($1,10,2)":"substr($1,12,2)":"substr($1,14,2)}'` set t2 = `date --date="$ss2" +%s` #set t2 = `date -jf "%Y%m%dT%H%M%S" $tt +%s` end echo "" | awk '{printf("%s\n","...")}' # get the orbit file names and download set n1 = ` date --date="$date0 - 1 day" +%Y%m%d ` set n2 = ` date --date="$date0 + 1 day" +%Y%m%d ` #set n1 = `date -v-1d -jf "%Y%m%d" $date0 +%Y%m%d` #set n2 = `date -v+1d -jf "%Y%m%d" $date0 +%Y%m%d` set orb = `grep $SAT0 orbits.list | grep $n1 | grep $n2` if (! -f $orb) then if (-f $orb_dir/$SAT0/$orb) then ln -s $orb_dir/$SAT0/$orb . else wgetasf $url_root"/"$orb endif endif # check the start and the end, make sure the start comes later than the first line of the first file and the end comes before the last line of the last file set pin1 = `head -1 $2 | awk '{print $1,$2}'` set f1 = `head -1 tmprecord` make_s1a_tops $f1/annotation/*iw1*vv*xml $f1/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` shift_atime_PRM.csh tmp2.PRM $tmpazi set azi1 = `echo $pin1 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set pin2 = `tail -1 $2 | awk '{print $1,$2}'` set f2 = `tail -1 tmprecord` make_s1a_tops $f2/annotation/*iw1*vv*xml $f2/measurement/*iw1*vv*tiff tmp2 0 ext_orb_s1a tmp2.PRM $orb tmp2 set tmpazi = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5)}'` shift_atime_PRM.csh tmp2.PRM $tmpazi set azi2 = `echo $pin2 | awk '{print $1,$2,0}' | SAT_llt2rat tmp2.PRM 1 | awk '{printf("%d",$2+0.5 + '$tmpazi')}'` set nl = `grep num_lines tmp2.PRM | awk '{print $3}'` # do the assembling if ($azi1 >= 0 && $azi2 < $nl && $jj != 0) then awk '{print $1","$2","$3","$4","$5","$6}' $2 > tmpllt set pin0 = `awk NR==1'{print $0}' tmpllt` foreach line2 (`awk '{print $0}' tmpllt`) if ($line2 != $pin0) then echo $pin0 | awk -F"," '{print $1,$2,$3,$4,$5,$6}' > tmp1llt echo $line2 | awk -F"," '{print $1,$2,$3,$4,$5,$6}' >> tmp1llt if ($mode != 1) then create_frame_tops.csh tmprecord $orb tmp1llt 1 set newfile = `ls -t -d *.SAFE | awk NR==1'{print $0}'` set Frame1 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | head -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set Frame2 = `grep azimuthAnxTime $newfile/annotation/*iw1*vv*xml | tail -1 | awk -F">" '{print $2}' | awk -F"<" '{printf("F%.4d", $1+0.5)}'` set dirname = `echo $Frame1"_"$Frame2` echo "Created Frame $Frame1 - $Frame2 ..." echo "" if (! -d $dirname) mkdir $dirname mv $newfile $dirname else echo "" echo "Frames on date $date0 will be re-organized..." echo "" endif set pin0 = `echo $line2` endif end else if ($jj == 0) then echo "" echo "SKIP $date0, as it stopped observation in the middle ..." echo "" else echo "" echo "SKIP $date0, as it does not have enough scenes ..." echo "" endif endif rm tmp* #rm *.EOF GMTSAR_V5.7/.svn/pristine/35/35c4535e82e3bf7295bffa6d119f6095ac0e060c.svn-base000444 015705 000000 00000000524 13505462014 025611 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_baseline CSRCS = ALOS_baseline.c \ ALOS_llt2rat_sub.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) all: $(PROG) install: mv $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/35/35098a451549734c51e7414dda87ccc8b3262fd4.svn-base000444 015705 000000 00000002344 13505462013 025400 0ustar00sandwellwheel000000 000000 7 11 1.0495176e-16 6.0075483e-12 4.0999171e-08 3.3359775e-05 3.2362451e-03 3.7430871e-02 5.1616517e-02 1.2641811e-13 2.3430967e-09 5.1777536e-06 1.3641521e-03 4.2850357e-02 1.6047831e-01 7.1655326e-02 6.6755448e-11 4.0062773e-07 2.8665898e-04 2.4454586e-02 2.4872838e-01 3.0162032e-01 4.3607994e-02 1.5453327e-08 3.0029607e-05 6.9574093e-03 1.9218332e-01 6.3292767e-01 2.4852078e-01 1.1634336e-02 1.5682494e-06 9.8677047e-04 7.4026534e-02 6.6210814e-01 7.0605849e-01 8.9768233e-02 1.3607393e-03 6.9769577e-05 1.4214791e-02 3.4529089e-01 1.0000000e+00 3.4529089e-01 1.4214791e-02 6.9769577e-05 1.3607393e-03 8.9768233e-02 7.0605849e-01 6.6210814e-01 7.4026534e-02 9.8677047e-04 1.5682494e-06 1.1634336e-02 2.4852078e-01 6.3292767e-01 1.9218332e-01 6.9574093e-03 3.0029607e-05 1.5453327e-08 4.3607994e-02 3.0162032e-01 2.4872838e-01 2.4454586e-02 2.8665898e-04 4.0062773e-07 6.6755448e-11 7.1655326e-02 1.6047831e-01 4.2850357e-02 1.3641521e-03 5.1777536e-06 2.3430967e-09 1.2641811e-13 5.1616517e-02 3.7430871e-02 3.2362451e-03 3.3359775e-05 4.0999171e-08 6.0075483e-12 1.0495176e-16 GMTSAR_V5.7/.svn/pristine/35/35071d11678d99db4175f51e22e9aa250c8ec6f1.svn-base000444 015705 000000 00000000357 13505462013 025456 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % clear sigx=1; sigy=1; nx=5; ny=5; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); GMTSAR_V5.7/.svn/pristine/32/32074105b601a3cb43e81506d66156ffca313b11.svn-base000444 015705 000000 00000004451 13505462013 025245 0ustar00sandwellwheel000000 000000 /* $Id: conv2d.c 39 2013-04-07 00:49:34Z pwessel $ */ /************************************************************************ * conv2d is a subroutine to perform a 2-D convolution of a data array * * and a filter. Both arrays are floats. * ************************************************************************/ /************************************************************************ * Creator: David T. Sandwell (Scripps Institution of Oceanography * * Date : 04/20/98 * ************************************************************************/ /************************************************************************ * Modification history: * * * * Date * ************************************************************************/ #include #include #include #define min(x, y) (((x) < (y)) ? (x) : (y)) #define max(x, y) (((x) > (y)) ? (x) : (y)) void conv2d(float *rdat, int *ni, int *nj, float *filt, int *nif, int *njf, float *fdat, int *ic, int *jc, float *rnorm) /* *ni,*nj; size of rdat */ /* *nif,*njf; size of filt, both numbers should be odd */ /* *ic,*jc; location of filter */ /* *rdat; array of unfiltered data */ /* *filt; filter array */ /* *fdat; single filtered point */ /* *rnorm; sum of filter coefficients and used in convolution */ { int nif2, njf2, iflt, jflt; int i, j, i0, i1, j0, j1; float filter; /* check the filter lengths */ nif2 = (int)(*nif / 2.); njf2 = (int)(*njf / 2.); if (2 * nif2 == *nif || 2 * njf2 == *njf) { fprintf(stderr, " nif njf %d %d should be odd \n", *nif, *njf); exit(-1); } /* compute the bounds of the convolution */ i0 = max(0, *ic - nif2); i1 = min(*ni, *ic + nif2); j0 = max(0, *jc - njf2); j1 = min(*nj, *jc + njf2); *fdat = 0.0f; *rnorm = 0.0f; /* do it - but don't use any NaN's */ for (i = i0; i < i1 + 1; i++) { iflt = i - *ic + nif2; for (j = j0; j < j1 + 1; j++) { jflt = j - *jc + njf2; filter = filt[jflt + *njf * iflt]; *fdat = *fdat + filter * rdat[j + *nj * i]; *rnorm = *rnorm + filter; } } } GMTSAR_V5.7/.svn/pristine/32/321d7b5bd5c8affcb9ea6845c11927977fd83dc3.svn-base000444 015705 000000 00000055367 13505462013 026005 0ustar00sandwellwheel000000 000000 # # $Id$ # if(NOT DEFINED _INCLUDED_CHECK_MACROS_) set(_INCLUDED_CHECK_MACROS_ "DEFINED") include (CheckCCompilerFlag) include (CheckCSourceCompiles) include (CheckCSourceRuns) include (CheckFunctionExists) include (CheckIncludeFile) include (CheckIncludeFiles) include (CheckLibraryExists) include (CheckPrototypeExists) include (CheckSymbolExists) include (CheckTypeExists) include (CheckTypeSize) include (CMakePushCheckState) include (TestBigEndian) endif(NOT DEFINED _INCLUDED_CHECK_MACROS_) # # Check if compiler supports -traditional-cpp # if (NOT HAVE_TRADITIONAL_CPP) if (MSVC) # Visual C++ set (_cpp_cmdline /EP) elseif (CMAKE_C_COMPILER_ID MATCHES "(GNU|Clang|Intel)") # GCC, Clang, or ICC set (_cpp_cmdline -E -w -P -nostdinc -traditional-cpp) endif (MSVC) message (STATUS "Performing Test HAVE_TRADITIONAL_CPP") execute_process (COMMAND ${CMAKE_C_COMPILER} ${_cpp_cmdline} ${GMT_SOURCE_DIR}/config.h.in # can be any header file RESULT_VARIABLE _cpp_traditional_result OUTPUT_QUIET ERROR_QUIET) if (_cpp_traditional_result EQUAL 0) set (HAVE_TRADITIONAL_CPP TRUE CACHE INTERNAL "Test HAVE_TRADITIONAL_CPP") message (STATUS "Performing Test HAVE_TRADITIONAL_CPP - Success") else (_cpp_traditional_result EQUAL 0) set (HAVE_TRADITIONAL_CPP "" CACHE INTERNAL "Test HAVE_TRADITIONAL_CPP") message (STATUS "Performing Test HAVE_TRADITIONAL_CPP - Failed") endif (_cpp_traditional_result EQUAL 0) endif (NOT HAVE_TRADITIONAL_CPP) # # Check if compiler supports __func__ or __FUNCTION__ identifier # check_c_source_compiles ( " int main (){char *function_name = __func__; return 0;} " HAVE___FUNC__) check_c_source_compiles ( " int main (){char *function_name = __FUNCTION__; return 0;} " HAVE___FUNCTION__) # # Check if compiler supports inline functions # This test is adapted from Jack Kelly on the CMake mailing list # cmake_push_check_state() # save state of CMAKE_REQUIRED_* foreach (KEYWORD "inline" "__inline" "__inline__") if (NOT DEFINED HAVE_C_INLINE) set (CMAKE_REQUIRED_DEFINITIONS -Dinline=${KEYWORD}) check_c_source_compiles( " typedef int foo_t; static inline foo_t static_foo () {return 0;} foo_t foo () {return 0;} int main (int argc, char *argv[]) {return 0;} " HAVE_C_${KEYWORD}) if (HAVE_C_${KEYWORD}) set (HAVE_C_INLINE TRUE) endif (HAVE_C_${KEYWORD}) endif (NOT DEFINED HAVE_C_INLINE) endforeach (KEYWORD) cmake_pop_check_state() # restore state of CMAKE_REQUIRED_* # # Check for windows header # check_include_file (io.h HAVE_IO_H_) check_include_file (direct.h HAVE_DIRECT_H_) check_include_file (process.h HAVE_PROCESS_H_) # # Check for C99 and libc extensions # # strdup, sincos, ... are GNU/BSD/Sun extensions: cmake_push_check_state() set (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE -D__EXTENSIONS__ -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE) check_include_file (assert.h HAVE_ASSERT_H_) check_include_file (dirent.h HAVE_DIRENT_H_) check_include_file (errno.h HAVE_ERRNO_H_) check_include_file (execinfo.h HAVE_EXECINFO_H_) check_include_file (fcntl.h HAVE_FCNTL_H_) check_include_file (signal.h HAVE_SIGNAL_H_) check_include_file (stdbool.h HAVE_STDBOOL_H_) check_include_file (sys/dir.h HAVE_SYS_DIR_H_) check_include_file (sys/resource.h HAVE_SYS_RESOURCE_H_) check_include_file (sys/stat.h HAVE_SYS_STAT_H_) check_include_file (sys/time.h HAVE_SYS_TIME_H_) check_include_file (sys/ucontext.h HAVE_SYS_UCONTEXT_H_) check_include_file (unistd.h HAVE_UNISTD_H_) check_function_exists (fcntl HAVE_FCNTL) check_function_exists (fopen64 HAVE_FOPEN64) check_function_exists (fseeko HAVE_FSEEKO) check_function_exists (ftello HAVE_FTELLO) check_function_exists (getopt HAVE_GETOPT) check_function_exists (getpwuid HAVE_GETPWUID) check_function_exists (abs HAVE_ABS) check_function_exists (llabs HAVE_LLABS) check_function_exists (pclose HAVE_PCLOSE) check_function_exists (popen HAVE_POPEN) check_function_exists (qsort_r HAVE_QSORT_R) if (HAVE_QSORT_R) # check qsort_r compatibility check_c_source_runs ( " #include #include int cmp(const void *a, const void*b, void *c) { assert(c == NULL); return *(int*)a - *(int*)b; } int main() { int array[5] = {7,3,5,2,8}; int i; qsort_r(array,5,sizeof(int),cmp,NULL); for (i=0;i<4;++i) { assert(array[i] < array[i+1]); } return 0; } " HAVE_QSORT_R_GLIBC) endif (HAVE_QSORT_R) check_function_exists (strcasecmp HAVE_STRCASECMP) check_function_exists (strncasecmp HAVE_STRNCASECMP) check_function_exists (stricmp HAVE_STRICMP) check_function_exists (strnicmp HAVE_STRNICMP) check_function_exists (strdup HAVE_STRDUP) check_function_exists (strsep HAVE_STRSEP) check_function_exists (strtod HAVE_STRTOD) # Note: trailing underscore = GDAL workaround check_function_exists (strtof HAVE_STRTOF_) check_function_exists (strtok_r HAVE_STRTOK_R) if (WIN32) check_function_exists (_fseeki64 HAVE__FSEEKI64) check_function_exists (_ftelli64 HAVE__FTELLI64) check_function_exists (_pclose HAVE__PCLOSE) check_function_exists (_popen HAVE__POPEN) check_function_exists (_stat HAVE__STAT) check_function_exists (_stati64 HAVE__STATI64) check_function_exists (_fstat HAVE__FSTAT) check_function_exists (_fstati64 HAVE__FSTATI64) check_function_exists (strtok_s HAVE_STRTOK_S) endif (WIN32) # Check if these functions are declared (might not be the case although they # are build-in) check_symbol_exists (strdup string.h DECLARED_STRDUP) check_symbol_exists (strsep string.h DECLARED_STRSEP) check_symbol_exists (basename libgen.h HAVE_BASENAME) check_symbol_exists (fileno stdio.h HAVE_FILENO) check_symbol_exists (setlocale locale.h HAVE_SETLOCALE) # Note: trailing underscore = GDAL workaround check_symbol_exists (snprintf stdio.h HAVE_SNPRINTF_) check_symbol_exists (vsnprintf stdio.h HAVE_VSNPRINTF_) if (HAVE_UNISTD_H_) check_symbol_exists (access unistd.h HAVE_ACCESS) check_symbol_exists (getpid unistd.h HAVE_GETPID) else (HAVE_UNISTD_H_) # in MinGW: check_symbol_exists (access io.h HAVE_ACCESS) check_symbol_exists (_getpid process.h HAVE__GETPID) endif (HAVE_UNISTD_H_) if (WIN32) check_symbol_exists (_access io.h HAVE__ACCESS) check_symbol_exists (_fileno stdio.h HAVE__FILENO) check_symbol_exists (_getcwd direct.h HAVE__GETCWD) check_symbol_exists (_mkdir direct.h HAVE__MKDIR) check_symbol_exists (_setmode io.h HAVE__SETMODE) check_symbol_exists (_snprintf stdio.h HAVE__SNPRINTF_) check_symbol_exists (_vsnprintf stdio.h HAVE__VSNPRINTF_) endif (WIN32) if (UNIX) # Check if -ldl is needed for dladdr check_function_exists (dlopen HAVE_BUILTIN_DYNAMIC_LINKING_LOADER) if (NOT HAVE_BUILTIN_DYNAMIC_LINKING_LOADER) check_library_exists (dl dlopen "" HAVE_LIBDL) endif (NOT HAVE_BUILTIN_DYNAMIC_LINKING_LOADER) cmake_push_check_state() # save state of CMAKE_REQUIRED_* if (HAVE_LIBDL) set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} "-ldl") endif (HAVE_LIBDL) check_symbol_exists (dladdr dlfcn.h HAVE_DLADDR) cmake_pop_check_state() # restore state of CMAKE_REQUIRED_* check_function_exists (memalign HAVE_MEMALIGN) check_function_exists (posix_memalign HAVE_POSIX_MEMALIGN) if (HAVE_UNISTD_H_) # Check if sysconf(_SC_NPROCESSORS_ONLN) can be used for CPU count check_c_source_compiles ( " #include int main() { sysconf(_SC_NPROCESSORS_ONLN); } " HAVE_SC_NPROCESSORS_ONLN) # Check if sysconf(_SC_NPROC_ONLN) can be used for CPU count check_c_source_compiles ( " #include int main() { sysconf(_SC_NPROC_ONLN); } " HAVE_SC_NPROC_ONLN) endif (HAVE_UNISTD_H_) # Check if sysctl can be used for CPU count check_c_source_compiles ( " #include #include int main () { int count; size_t size = sizeof(count); int mib[] = { CTL_HW, HW_NCPU }; sysctl(mib, 2, &count, &size, NULL, 0); } " HAVE_SYSCTL_HW_NCPU) endif (UNIX) # # Check c types # check_include_file (ctype.h HAVE_CTYPE_H_) check_include_file (inttypes.h HAVE_INTTYPES_H_) #check_include_file (stddef.h HAVE_STDDEF_H_) #check_include_file (stdint.h HAVE_STDINT_H_) #check_include_file (sys/types.h HAVE_SYS_TYPES_H_) # set HAVE_SYS_TYPES_H, HAVE_STDINT_H, and HAVE_STDDEF_H # and check in , , and : check_type_size (_Bool SIZEOF__BOOL) check_type_size (bool SIZEOF_BOOL) check_type_size (int SIZEOF_INT) set (CMAKE_EXTRA_INCLUDE_FILES sys/ucontext.h) check_type_size (greg_t SIZEOF_GREG_T) set (CMAKE_EXTRA_INCLUDE_FILES) check_type_size (long SIZEOF_LONG) check_type_size ("long long" SIZEOF_LONG_LONG) check_type_size ("long double" SIZEOF_LONG_DOUBLE) check_type_size (mode_t SIZEOF_MODE_T) check_type_size (off_t SIZEOF_OFF_T) check_type_size (size_t SIZEOF_SIZE_T) check_type_size (wchar_t SIZEOF_WCHAR_T) check_type_size ("void*" SIZEOF_VOID_P) # add suffix to prevent name clash with GDAL set (HAVE_STDDEF_H_ "${HAVE_STDDEF_H}" CACHE INTERNAL "Have include stddef.h") set (HAVE_STDINT_H_ "${HAVE_STDINT_H}" CACHE INTERNAL "Have include stdinf.h") set (HAVE_SYS_TYPES_H_ "${HAVE_SYS_TYPES_H}" CACHE INTERNAL "Have include sys/types.h") test_big_endian (WORDS_BIGENDIAN) # Byte swapping functions check_c_source_runs ( " int main(void) { return !__builtin_bswap16(0xabcd) == 0xcdab; } " HAVE___BUILTIN_BSWAP16) check_c_source_runs ( " int main(void) { return !__builtin_bswap32(0xdeadbeef) == 0xefbeadde; } " HAVE___BUILTIN_BSWAP32) check_c_source_runs ( " int main(void) { return !__builtin_bswap64(0x1234567890abcdef) == 0xefcdab9078563412; } " HAVE___BUILTIN_BSWAP64) if (WIN32) check_function_exists (_byteswap_ushort HAVE__BYTESWAP_USHORT) # for uint16_t check_function_exists (_byteswap_ulong HAVE__BYTESWAP_ULONG) # for uint32_t check_function_exists (_byteswap_uint64 HAVE__BYTESWAP_UINT64) # for uint64_t endif (WIN32) # # Check math related stuff # # extra math headers check_include_file (floatingpoint.h HAVE_FLOATINGPOINT_H_) check_include_file (ieeefp.h HAVE_IEEEFP_H_) set (_math_h math.h float.h) if (HAVE_FLOATINGPOINT_H_) list (APPEND _math_h floatingpoint.h) endif (HAVE_FLOATINGPOINT_H_) if (HAVE_IEEEFP_H_) list (APPEND _math_h ieeefp.h) endif (HAVE_IEEEFP_H_) # Check if -lm is needed check_function_exists (cos HAVE_M_FUNCTIONS) if (NOT HAVE_M_FUNCTIONS) check_library_exists (m cos "" HAVE_M_LIBRARY) endif (NOT HAVE_M_FUNCTIONS) # If necessary compile with -lm if (HAVE_M_LIBRARY) set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} "-lm") endif (HAVE_M_LIBRARY) # check symbols (double) check_symbol_exists (acosh "${_math_h}" HAVE_ACOSH) check_symbol_exists (asinh "${_math_h}" HAVE_ASINH) check_symbol_exists (atanh "${_math_h}" HAVE_ATANH) check_symbol_exists (copysign "${_math_h}" HAVE_COPYSIGN) check_symbol_exists (erf "${_math_h}" HAVE_ERF) check_symbol_exists (erfc "${_math_h}" HAVE_ERFC) check_symbol_exists (hypot "${_math_h}" HAVE_HYPOT) check_symbol_exists (isfinite "${_math_h}" HAVE_ISFINITE) check_symbol_exists (isinf "${_math_h}" HAVE_ISINF) check_symbol_exists (isnan "${_math_h}" HAVE_ISNAN) check_symbol_exists (isnand "${_math_h}" HAVE_ISNAND) check_symbol_exists (isnanf "${_math_h}" HAVE_ISNANF) check_symbol_exists (isnormal "${_math_h}" HAVE_ISNORMAL) check_symbol_exists (j0 "${_math_h}" HAVE_J0) check_symbol_exists (j1 "${_math_h}" HAVE_J1) check_symbol_exists (jn "${_math_h}" HAVE_JN) check_symbol_exists (lrint "${_math_h}" HAVE_LRINT) check_symbol_exists (llrint "${_math_h}" HAVE_LLRINT) check_symbol_exists (log1p "${_math_h}" HAVE_LOG1P) check_symbol_exists (log2 "${_math_h}" HAVE_LOG2) check_symbol_exists (rint "${_math_h}" HAVE_RINT) check_symbol_exists (sincos "${_math_h}" HAVE_SINCOS) check_symbol_exists (y0 "${_math_h}" HAVE_Y0) check_symbol_exists (y1 "${_math_h}" HAVE_Y1) check_symbol_exists (yn "${_math_h}" HAVE_YN) # check symbols (float) check_symbol_exists (acosf "${_math_h}" HAVE_ACOSF) check_symbol_exists (acoshf "${_math_h}" HAVE_ACOSHF) check_symbol_exists (asinf "${_math_h}" HAVE_ASINF) check_symbol_exists (asinhf "${_math_h}" HAVE_ASINHF) check_symbol_exists (atanf "${_math_h}" HAVE_ATANF) check_symbol_exists (atanhf "${_math_h}" HAVE_ATANHF) check_symbol_exists (atan2f "${_math_h}" HAVE_ATAN2F) check_symbol_exists (erff "${_math_h}" HAVE_ERFF) check_symbol_exists (ceilf "${_math_h}" HAVE_CEILF) check_symbol_exists (cosf "${_math_h}" HAVE_COSF) check_symbol_exists (coshf "${_math_h}" HAVE_COSHF) check_symbol_exists (erfcf "${_math_h}" HAVE_ERFCF) check_symbol_exists (expf "${_math_h}" HAVE_EXPF) check_symbol_exists (fabsf "${_math_h}" HAVE_FABSF) check_symbol_exists (floorf "${_math_h}" HAVE_FLOORF) check_symbol_exists (fmodf "${_math_h}" HAVE_FMODF) check_symbol_exists (hypotf "${_math_h}" HAVE_HYPOTF) check_symbol_exists (logf "${_math_h}" HAVE_LOGF) check_symbol_exists (log2f "${_math_h}" HAVE_LOG2F) check_symbol_exists (log10f "${_math_h}" HAVE_LOG10F) check_symbol_exists (log1pf "${_math_h}" HAVE_LOG1PF) check_symbol_exists (lrintf "${_math_h}" HAVE_LRINTF) check_symbol_exists (llrintf "${_math_h}" HAVE_LLRINTF) check_symbol_exists (powf "${_math_h}" HAVE_POWF) check_symbol_exists (rintf "${_math_h}" HAVE_RINTF) check_symbol_exists (sinf "${_math_h}" HAVE_SINF) check_symbol_exists (sinhf "${_math_h}" HAVE_SINHF) check_symbol_exists (sqrtf "${_math_h}" HAVE_SQRTF) check_symbol_exists (tanf "${_math_h}" HAVE_TANF) check_symbol_exists (tanhf "${_math_h}" HAVE_TANHF) if (WIN32) check_symbol_exists (_copysign "${_math_h}" HAVE__COPYSIGN) check_symbol_exists (_finite "${_math_h}" HAVE__FINITE) check_symbol_exists (_fpclass "${_math_h}" HAVE__FPCLASS) check_symbol_exists (_isnan "${_math_h}" HAVE__ISNAN) endif (WIN32) # test if sincos is buggy if (HAVE_SINCOS) check_c_source_runs ( " #define _GNU_SOURCE #define __EXTENSIONS__ include int main () { double s = 0.1, c = 0.2; double s1, c1; s1 = s; c1 = c; sincos (0.5, &s, &c); return !(s == s1 || c == c1);} /* return TRUE if sincos works ok */ " HAVE_BUGGY_SINCOS) if (HAVE_BUGGY_SINCOS) set (HAVE_SINCOS "" CACHE INTERNAL "disable sincos because it is buggy" FORCE) endif (HAVE_BUGGY_SINCOS) endif (HAVE_SINCOS) # restore state of CMAKE_REQUIRED_* cmake_pop_check_state() #check_symbol_exists (intptr_t "stdint.h" HAVE_STDINT_H_WITH_INTPTR) #check_symbol_exists (intptr_t "unistdint.h" HAVE_UNISTD_H_WITH_INTPTR) #check_function_exists (__argz_count HAVE___ARGZ_COUNT) #check_function_exists (__argz_next HAVE___ARGZ_NEXT) #check_function_exists (__argz_stringify HAVE___ARGZ_STRINGIFY) #check_function_exists (__fsetlocking HAVE___FSETLOCKING) #check_function_exists (_close HAVE__CLOSE) #check_function_exists (_dyld_func_lookup HAVE_DYLD) #check_function_exists (_open HAVE__OPEN) #check_function_exists (_pclose HAVE__PCLOSE) #check_function_exists (_popen HAVE__POPEN) #check_function_exists (argz_append HAVE_ARGZ_APPEND) #check_function_exists (argz_create_sep HAVE_ARGZ_CREATE_SEP ) #check_function_exists (argz_insert HAVE_ARGZ_INSERT ) #check_function_exists (argz_next HAVE_ARGZ_NEXT) #check_function_exists (argz_stringify HAVE_ARGZ_STRINGIFY ) #check_function_exists (chmod HAVE_CHMOD) #check_function_exists (clock_gettime HAVE_CLOCK_GETTIME) #check_function_exists (close HAVE_CLOSE) #check_function_exists (dcgettext HAVE_DCGETTEXT) #check_function_exists (dladdr HAVE_DLADDR) #check_function_exists (dlerror HAVE_DLERROR) #check_function_exists (getcwd HAVE_GETCWD) #check_function_exists (getegid HAVE_GETEGID) #check_function_exists (getgid HAVE_GETGID) #check_function_exists (gethrtime HAVE_GETHRTIME) #check_function_exists (getpagesize HAVE_GETPAGESIZE) #check_function_exists (gettext HAVE_GETTEXT) #check_function_exists (getuid HAVE_GETUID) #check_function_exists (getwd HAVE_GETWD) #check_function_exists (index HAVE_INDEX) #check_function_exists (mach_absolute_time HAVE_MACH_ABSOLUTE_TIME) #check_function_exists (mempcpy HAVE_MEMPCPY) #check_function_exists (mkfifo HAVE_MKFIFO) #check_function_exists (mkstemp HAVE_MKSTEMP) #check_function_exists (mktemp HAVE_MKTEMP) #check_function_exists (mktime HAVE_MKTIME) #check_function_exists (mmap HAVE_MMAP) #check_function_exists (open HAVE_OPEN) #check_function_exists (opendir HAVE_OPENDIR) #check_function_exists (pclose HAVE_PCLOSE) #check_function_exists (popen HAVE_POPEN) #check_function_exists (putenv HAVE_PUTENV) #check_function_exists (read_real_time HAVE_READ_REAL_TIME) #check_function_exists (readdir HAVE_READDIR) #check_function_exists (setlocale HAVE_SETLOCALE) #check_function_exists (shl_load HAVE_SHL_LOAD) #check_function_exists (stpcpy HAVE_STPCPY) #check_function_exists (strcasecmp HAVE_STRCASECMP) #check_function_exists (strcoll HAVE_STRCOLL) #check_function_exists (strcspn HAVE_STRCSPN) #check_function_exists (strcspn HAVE_STRERROR) #check_function_exists (strdup HAVE_STRDUP) #check_function_exists (strerror HAVE_STRERROR) #check_function_exists (strftime HAVE_STRFTIME) #check_function_exists (strlcat HAVE_STRLCAT) #check_function_exists (strlcpy HAVE_STRLCPY) #check_function_exists (strspn HAVE_STRSPN) #check_function_exists (strstr HAVE_STRSTR) #check_function_exists (strtod HAVE_STRTOD) #check_function_exists (strtol HAVE_STRTOL) #check_function_exists (strtoul HAVE_STRTOUL) #check_function_exists (time_base_to_time HAVE_TIME_BASE_TO_TIME) #check_function_exists (tsearch HAVE_TSEARCH) #check_function_exists (vprintf HAVE_VPRINTF ) #check_function_exists (wcslen HAVE_WCSLEN) #check_include_file (argz.h HAVE_ARGZ_H) #check_include_file (c_asm.h HAVE_C_ASM_H) #check_include_file (dl.h HAVE_DL_H) #check_include_file (dlfcn.h HAVE_DLADDR ) #check_include_file (dlfcn.h HAVE_DLFCN_H) #check_include_file (ffi.h HAVE_FFI_H) #check_include_file (intrinsics.h HAVE_INTRINSICS_H) #check_include_file (sys/time.h have_hrtime_t) #check_include_file (mach-o/dyld.h HAVE_MACH_O_DYLD_H ) #check_include_file (mach/mach_time.h HAVE_MACH_MACH_TIME_H) #check_include_file (machine/endian.h HAVE_MACHINE_ENDIAN_H_) #check_include_file (argz.h HAVE_ARGZ_H) #check_include_file (io.h HAVE_IO_H) #check_include_file (limits.h HAVE_LIMITS_H) #check_include_file (locale.h HAVE_LOCALE_H) #check_include_file (memory.h HAVE_MEMORY_H) #check_include_file (ndir.h HAVE_NDIR_H) #check_include_file (pthread.h HAVE_PTHREAD_H) #check_include_file (stdlib.h HAVE_STDLIB_H) #check_include_file (string.h HAVE_STRING_H) #check_include_file (strings.h HAVE_STRINGS_H) #check_include_file (sys/dl.h HAVE_SYS_DL_H ) #check_include_file (sys/socket.h HAVE_SYS_SOCKET_H) #check_include_file (sys/stat.h HAVE_SYS_STAT_H ) #check_include_file (sys/stat.h HAVE_SYS_STAT_H) #check_include_file (sys/time.h HAVE_SYS_TIME_H ) #check_include_file (sys/time.h HAVE_SYS_TIME_H) #check_include_file (sys/types.h HAVE_SYS_TYPES_H ) #check_include_file (sys/types.h HAVE_SYS_TYPES_H) #check_include_file (sys/utime.h HAVE_SYS_UTIME_H) #check_include_file (utime.h HAVE_UTIME_H) #check_library_exists (dl dl "/lib;/usr/lib;/usr/local/lib;/usr/pkg/lib" HAVE_LIBDL) #check_symbol_exists (LC_MESSAGES "locale.h" HAVE_LC_MESSAGES) #check_symbol_exists (asprintf "stdio.h" HAVE_ASPRINTF) #check_symbol_exists (intmax_t "inttypes.h" HAVE_INTTYPES_H_WITH_UINTMAX) #check_symbol_exists (pid_t "sys/types.h" HAVE_PID_T) #check_symbol_exists (printf "stdio.h" HAVE_POSIX_PRINTF) #check_symbol_exists (uintmax_t "stdint.h" HAVE_STDINT_H_WITH_UINTMAX) #check_symbol_exists (wprintf "stdio.h" HAVE_WPRINTF) #check_type_size ("long double" SIZEOF_LONG_DOUBLE) #check_type_size ("long long" SIZEOF_LONG_LONG) #check_type_size (char SIZEOF_CHAR) #check_type_size (double SIZEOF_DOUBLE) #check_type_size (float SIZEOF_FLOAT) #check_type_size (int SIZEOF_INT) #check_type_size (long SIZEOF_LONG) #check_type_size (short SIZEOF_SHORT) if (NOT DEFINED STDC_HEADERS) message (STATUS "Checking whether system has ANSI C header files") check_include_files ("stdlib.h;stdarg.h;string.h;float.h" StandardHeadersExist) if (StandardHeadersExist) check_prototype_exists (memchr string.h memchrExists) if (memchrExists) check_prototype_exists (free stdlib.h freeExists) if (freeExists) #include (TestForHighBitCharacters) #if (CMAKE_HIGH_BIT_CHARACTERS) message (STATUS "ANSI C header files - found") set (STDC_HEADERS 1 CACHE INTERNAL "System has ANSI C header files") #endif (CMAKE_HIGH_BIT_CHARACTERS) endif (freeExists) endif (memchrExists) endif (StandardHeadersExist) if (NOT STDC_HEADERS) message (STATUS "ANSI C header files - not found") set (STDC_HEADERS 0 CACHE INTERNAL "System has ANSI C header files") endif (NOT STDC_HEADERS) endif (NOT DEFINED STDC_HEADERS) # Define to 1 if you can safely include both and #if (HAVE_SYS_TIME_H) # check_include_files ("sys/time.h;time.h" TIME_WITH_SYS_TIME) #else (HAVE_SYS_TIME_H) # set (TIME_WITH_SYS_TIME 0) #endif (HAVE_SYS_TIME_H) # Define to 1 if your declares `struct tm'. */ #check_type_exists ("struct tm" sys/time.h TM_IN_SYS_TIME) #check_cxx_source_compiles ( # " # #include # using std::count; # int countChar(char * b, char * e, char const c) # { # return count (b, e, c); # } # int main (){return 0;} # " #HAVE_STD_COUNT) #check_cxx_source_compiles ( # " # #include # using std::tolower; # int main (){return 0;} # " #CXX_GLOBAL_CSTD) # check_c_source_compiles ( # " # #include # // this declaration will fail when there already exists a non const char** version which returns size_t # double iconv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); # int main () { return 0; } # " # HAVE_ICONV_CONST) # # check_c_source_compiles ( # " # #include # int i[ ( sizeof(wchar_t)==2 ? 1 : -1 ) ]; # int main (){return 0;} # " # SIZEOF_WCHAR_T_IS_2) # # check_c_source_compiles ( # " # #include # int i[ ( sizeof(wchar_t)==4 ? 1 : -1 ) ]; # int main (){return 0;} # " # SIZEOF_WCHAR_T_IS_4) # vim: textwidth=78 noexpandtab tabstop=2 softtabstop=2 shiftwidth=2 GMTSAR_V5.7/.svn/pristine/32/322b3e6dd4e630939facac98ef54856fbf497f5f.svn-base000444 015705 000000 00000002271 13505462013 026003 0ustar00sandwellwheel000000 000000 /************************************************************************ * shift performs a range shift using the shift property of the FFT * ************************************************************************/ /************************************************************************ * Creator: David T. SandwellScripps Institution of Oceanography) * * Date : 08/09/06 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "gmt.h" #include "siocomplex.h" #include "soi.h" void shift(void *API, int ranfft, fcomplex *data, double shift) { float arg; int i, n2; fcomplex cshift; n2 = ranfft / 2; GMT_FFT_1D(API, (float *)data, ranfft, GMT_FFT_FWD, GMT_FFT_COMPLEX); for (i = 0; i < ranfft; i++) { arg = -2. * PI * shift * i / ranfft; if (i > n2) arg = -2. * PI * shift * (i - ranfft) / ranfft; cshift = Cexp(arg); data[i] = Cmul(cshift, data[i]); } GMT_FFT_1D(API, (float *)data, ranfft, GMT_FFT_INV, GMT_FFT_COMPLEX); } GMTSAR_V5.7/.svn/pristine/32/320a7b7770bad33ac70df79df26cc0aced26a9b5.svn-base000444 015705 000000 00000000033 13505462014 026063 0ustar00sandwellwheel000000 000000 link ../S1A_preproc/includeGMTSAR_V5.7/.svn/pristine/6a/6a5b8c885cc9972daa5259bd2b6d873c8a4f1657.svn-base000444 015705 000000 00000005743 13505462014 025727 0ustar00sandwellwheel000000 000000 #! /bin/csh -f # D. Sandwell and R. Mellors 09/09/97 # # Modified by Anders Hogrelius 04/18/2017 # # Script to preprocess Envisat L.1 ASAR data # produces .SLC .PRM and .LED files from Envisat formatted archive files ( files with extension .E1 .E2 or .N1) # # if ($#argv < 2) then echo "" echo " Usage: ENVI_SLC_pre_process " echo "" echo " name_stem - filename of the data file" echo " earth_radius - local earth radius (in meters) (put 0 if use default value)" echo "" echo " Example: " echo " command line: ENVI_SLC_pre_process ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000 6378000 " echo " will preprocess Envisat formatted L.1 ASAR data 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.N1' " echo " then output parameter file 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.PRM', SLC data file 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.SLC' and LED file 'ASA_IMS_1PNESA20060130_054255_000000182044_00392_20486_0000.LED' " echo " with earth radius 6378000 meters" echo "" echo " ENVI_SLC_pre_process will digest Envisat formatted L.1 data from the ERS-1 ERS-2 and ENVISAT platforms (files with extension .E1 .E2 or .N1)" echo "" echo " It will not (yet) read the Wide Scan mode format (file names starting with ASA_WSS_1P)" echo "" exit 1 endif # set ORBITS = "@ORBITS_DIR@" echo " " echo "=========================" echo "Start pre-process $1" # # make sure the file exists # set FEXTENSION = "" set ORBDIR = "" set SCID = 0 if ( -f $1.N1) then set FEXTENSION = "N1" set ORBDIR = "ENVI/Doris" set SCID = 4 # ENVISAT else if ( -f $1.E1) then set FEXTENSION = "E1" set ORBDIR = "ERS/ers1" set SCID = 1 # ERS-1 else if ( -f $1.E2) then set FEXTENSION = "E2" set ORBDIR = "ERS/ers2" set SCID = 2 #ERS-2 else echo "" echo "error - raw file does not have correct .N1 .E1 or .E2 suffix" echo "" exit 1 endif # # 1) extract binary data and initial PRM and LED files from archive # echo envi_slc_decode $1.$FEXTENSION envi_slc_decode $1.$FEXTENSION # # 2) make orbit file # set START = `grep SC_clock_start $1.PRM | awk '{print $3}'` set END = `grep SC_clock_stop $1.PRM | awk '{print $3}'` if ($SCID == 1) then echo "Reading ERS1 orbits" echo dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 dump_orbit_ers.pl $1 $ORBITS/ERS/ers1 else if ($SCID == 2) then echo "REading ERS2 orbits" echo dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 dump_orbit_ers.pl $1 $ORBITS/ERS/ers2 else if ($SCID == 4) then echo "Reading ENVISAT orbits" echo dump_orbit_envi.pl $START $END $1.LED $ORBITS/$ORBDIR dump_orbit_envi.pl $START $END $1.LED $ORBITS/$ORBDIR else echo "ERROR: Unknown satellite platform" exit 1 endif # # 4) add the orbital information but keep the FD1 # set FD1 = `grep fd1 $1.PRM | awk '{print $3}'` calc_dop_orb $1.PRM $1.log $2 $FD1 cat $1.log >> $1.PRM update_PRM.csh $1.PRM fd1 $FD1 # # clean unwanted files # rm *$1.log* # echo "End pre-process $1" # GMTSAR_V5.7/.svn/pristine/04/04a778d3f6976e414c55ff89366454e568944e79.svn-base000444 015705 000000 00000007263 13505462013 025237 0ustar00sandwellwheel000000 000000 #include "PRM.h" #include "lib_functions.h" #include #include /*------------------------------------------------------*/ /* set some defaults */ /* replaces virgin.prm */ /*------------------------------------------------------*/ void set_prm_defaults(struct PRM *prm) { strncpy(prm->input_file, "data.raw", 8); /* input to SAR processor */ prm->input_file[8] = '\0'; strncpy(prm->deskew, "n", 1); /* to deskew or not to deskew? */ prm->deskew[1] = '\0'; strncpy(prm->iqflip, "n", 1); /* Flip_iq */ prm->iqflip[1] = '\0'; strncpy(prm->offset_video, "n", 1); /* off_video */ prm->offset_video[1] = '\0'; strncpy(prm->srm, "n", 1); /* scnd_rng_mig */ prm->srm[1] = '\0'; strncpy(prm->orbdir, "n", 1); prm->orbdir[1] = '\0'; strncpy(prm->lookdir, "n", 1); prm->lookdir[1] = '\0'; prm->num_valid_az = 9216; prm->nrows = 16384; prm->first_line = 1; prm->caltone = 0.000000; prm->st_rng_bin = 1; prm->az_res = 5; prm->nlooks = 1; prm->chirp_ext = 1000; /* nextend */ prm->rhww = 1.000000; /* rng_spec_wgt */ prm->pctbw = 0.000000; /* rm_rng_band */ prm->pctbwaz = 0.000000; /* rm_az_band */ prm->rshift = 0; prm->ashift = 0; prm->stretch_r = 0.0; prm->stretch_a = 0.0; prm->a_stretch_r = 0.0; prm->a_stretch_a = 0.0; prm->first_sample = 206; prm->SC_identity = 5; prm->fs = 3.200000e+07; /* rng_samp_rate */ prm->lambda = 0.236057; prm->near_range = -1; /* use -1 as default */ prm->RE = -1; /* use -1 as default */ prm->num_patches = 1000; /* use 1000 as default */ prm->fd1 = 0.0; prm->fdd1 = 0.0; prm->fddd1 = 0.0; prm->sub_int_r = 0.0; prm->sub_int_a = 0.0; prm->SLC_scale = 1; /* use 1 as default */ } /*------------------------------------------------------*/ void print_prm_defaults(struct PRM *prm) { fprintf(stderr, " \n default settings *************\n\n"); fprintf(stderr, " led_file = %s \n", prm->led_file); fprintf(stderr, " input_file = %s \n", prm->input_file); fprintf(stderr, " num_valid_az = %d \n", prm->num_valid_az); fprintf(stderr, " nrows = %d \n", prm->nrows); fprintf(stderr, " first_line = %d \n", prm->first_line); fprintf(stderr, " deskew = %s \n", prm->deskew); fprintf(stderr, " caltone = %lf \n", prm->caltone); fprintf(stderr, " st_rng_bin = %d \n", prm->st_rng_bin); fprintf(stderr, " Flip_iq(iqflip) = %s \n", prm->iqflip); fprintf(stderr, " offset_video(off_vid) = %s \n", prm->offset_video); fprintf(stderr, " az_res = %lf \n", prm->az_res); fprintf(stderr, " nlooks = %d \n", prm->nlooks); fprintf(stderr, " chirp_ext(nextend) = %d \n", prm->chirp_ext); fprintf(stderr, " scnd_rng_mig(srm) = %s \n", prm->srm); fprintf(stderr, " rng_spec_wgt(rhww) = %lf \n", prm->rhww); fprintf(stderr, " rm_rng_band(pctbw) = %lf \n", prm->pctbw); fprintf(stderr, " rm_az_band(pctbwaz) = %lf \n", prm->pctbwaz); fprintf(stderr, " rshift = %d \n", prm->rshift); fprintf(stderr, " ashift = %d \n", prm->ashift); fprintf(stderr, " stretch_r = %lf \n", prm->stretch_r); fprintf(stderr, " stretch_a = %lf \n", prm->stretch_a); fprintf(stderr, " a_stretch_r = %lf \n", prm->a_stretch_r); fprintf(stderr, " a_stretch_a = %lf \n", prm->a_stretch_a); fprintf(stderr, " first_sample = %d \n", prm->first_sample); fprintf(stderr, " SC_identity = %d \n", prm->SC_identity); fprintf(stderr, " rng_samp_rate(fs) = %lf \n", prm->fs); fprintf(stderr, " near_range = %lf \n", prm->near_range); } /*------------------------------------------------------*/ /* not all variables are called the same in sio.h and the prm file changed offset_video off_video chirp_ext nextend PRM SOI.H ------------------------------- Flip_iq iqflip scnd_rng_mig srm rng_spec_wgt rhww rm_rng_band pctbw rm_az_band pctbwaz rng_samp_rate fs */ GMTSAR_V5.7/.svn/pristine/9e/9e1a8396574a5f3c78ed85327c815320a1d9587f.svn-base000444 015705 000000 00000014335 13505462014 025436 0ustar00sandwellwheel000000 000000 /*************************************************************************** * ALOS_fbd_fbs reads a raw FBD-HH file processed with ALOS_pre_proc and * * upsamples it to FBS-HH bandwidth. The algorithm takes the fft each * * complex range line and zero-pads in the frequency domain. This is * * possible because the FBS bandwidth is exactly two times the FBD. * * Note that the interpolated data may exceed the original data span of * * 0-31 so the numbers are rescaled to lie between 0 and 127 which still * * only one byte of storage. * * The code uses cfft1d which seems to be the standard interface in the * * InSAR community. * ***************************************************************************/ /*************************************************************************** * Creator: David T. Sandwell and Rob Mellors * * (Scripps Institution of Oceanography) * * Date : 08/04/2007 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * * ***************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "siocomplex.h" #define clip127(A) (((A) > 127) ? 127 : (((A) < 0) ? 0 : A)) char *USAGE = "ALOS_FBD2FBS FBD.PRM FBS.PRM \n" " FBD.PRM PRM file for input image in fine beam dual " "polarization (FBD 14 MHz) (input) \n" " FBS.PRM PRM file for outout image in fine beam single " "polarization (FBS 28 MHz) (output) \n"; int main(int argc, char **argv) { FILE *prmfile, *datafile, *prmout, *dataout; unsigned char *indata, *outdata; fcomplex *cin, *cout; float rtest, itest; int i, j, k, nffti, nffto; int ibufsize, obufsize, fbdsamp, fbssamp, headsize; struct PRM r; if (argc < 3) die(USAGE, ""); /* flags defined in global_flags.h */ verbose = 0; debug = 0; /* fill the struct with default parameters */ null_sio_struct(&r); /* open input PRM file and read the parameters */ if ((prmfile = fopen(argv[1], "r")) == NULL) die("Can't open ", argv[1]); get_sio_struct(prmfile, &r); /* open input raw data file */ if ((datafile = fopen(r.input_file, "r")) == NULL) die("Can't open ", r.input_file); /* open output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("Can't open ", argv[2]); /* assemble the output filename and open for writing */ sscanf(argv[2], "%s", r.input_file); r.input_file[strlen(argv[2]) - 4] = 0; strcat(r.input_file, ".raw"); /* open output file for single look complex image */ if ((dataout = fopen(r.input_file, "w")) == NULL) die("Can't open ", r.input_file); /* compute the sizes for the input and output buffers and allocate the memory */ ibufsize = r.bytes_per_line; if ((indata = (unsigned char *)malloc(2 * ibufsize * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for input indata.\n"); exit(-1); } fbdsamp = r.good_bytes / 2 - r.first_sample; fbssamp = 2 * fbdsamp; headsize = 2 * r.first_sample; obufsize = 2 * (fbssamp + r.first_sample); if ((outdata = (unsigned char *)malloc(2 * obufsize * sizeof(unsigned char))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for output outdata.\n"); exit(-1); } /* find best length of fft (use power of two) for both input and output */ nffti = find_fft_length(fbdsamp); nffto = find_fft_length(fbssamp); if (debug) fprintf(stderr, " nffti %d nffto %d \n", nffti, nffto); /* allocate the memory for the complex arrays */ if ((cin = (fcomplex *)malloc(nffti * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbd \n"); exit(-1); } if ((cout = (fcomplex *)malloc(nffto * sizeof(fcomplex))) == NULL) { fprintf(stderr, "Sorry, couldn't allocate memory for fbs \n"); exit(-1); } /* read and write the input and output raw files */ for (k = 0; k < r.num_lines; k++) { fread((void *)indata, sizeof(unsigned char), ibufsize, datafile); fwrite((void *)indata, sizeof(unsigned char), headsize, dataout); /* fill the complex array with complex indata */ for (j = 0; j < nffti; j++) { i = j + r.first_sample; if ((j < fbdsamp) && (((int)indata[2 * i]) != NULL_DATA) && (((int)indata[2 * i + 1]) != NULL_DATA)) { cin[j].r = (float)(indata[2 * i] - r.xmi); cin[j].i = (float)(indata[2 * i + 1] - r.xmq); } else { cin[j].r = 0.0; cin[j].i = 0.0; } } /* interpolate from fbd to fbs */ rng_expand(cin, nffti, cout, nffto); /* convert the complex back to bytes */ for (j = 0; j < obufsize / 2; j++) { i = j + r.first_sample; /* increase dynamic range by 2 and set the mean value to 63.5 */ rtest = rintf(2. * cout[j].r + 63.5); itest = rintf(2. * cout[j].i + 63.5); /* sometimes the range can exceed 0-127 so clip the numbers to be in the correct range */ outdata[2 * i] = (unsigned char)clip127(rtest); outdata[2 * i + 1] = (unsigned char)clip127(itest); } fwrite(outdata + headsize, sizeof(unsigned char), obufsize - headsize, dataout); } /* compute the changes to the output PRM-file */ r.xmi = 63.5; r.xmq = 63.5; r.chirp_ext = r.chirp_ext * 2; r.good_bytes = 2 * (fbssamp + r.first_sample); r.bytes_per_line = obufsize; r.num_rng_bins = fbssamp + r.chirp_ext; r.fs = r.fs * 2.; if (debug) fprintf(stderr, " %d %d %d %d %f %f \n", r.chirp_ext, r.good_bytes, r.bytes_per_line, r.num_rng_bins, r.fs, r.chirp_slope); /* write the output PRM file */ if ((prmout = fopen(argv[2], "w")) == NULL) die("can't open prfile", argv[2]); put_sio_struct(r, prmout); free(indata); free(outdata); free(cin); free(cout); fclose(prmfile); fclose(prmout); fclose(datafile); fclose(dataout); } GMTSAR_V5.7/.svn/pristine/9e/9e5c8481162f9ffba39341beccad8c9acb467f2d.svn-base000444 015705 000000 00000147435 13505462013 026230 0ustar00sandwellwheel000000 000000 /* rewritten Dennis Milbert' solid_24d.f */ /* by Xiaohua Xu, 05/20/2018 for GMTSAR */ char *USAGE = "\nsolid_tide yyyyddd.fffffff < lon_lat > lon_lat_dx_dy_dz \n\n" " translated from Dennis Milbert's solid.for\n\n" " compute solid earth tide given certain lon lat\n\n"; #include "lib_functions.h" #include #include #include double pi, pi2, rad; double a = 6378137.0; double e2 = 6.69438002290341574957e-3; int mjd0; int day2date(double, double, double *, double *); int isleapyr(int); int compute_tide(double, double, double, double, double *, double *, double *); int geo2xyz(double, double, double, double *, double *, double *); int civmjd(double, double, double, double, double, double, double *, double *); int mjdciv(double, double, double *, double *, double *, double *, double *, double *); int sunxyz(double, double, double *); int moonxyz(double, double, double *); int detide(double *, double, double, double *, double *, double *); int rge(double, double, double *, double *, double *, double, double, double); double gps2utc(double); double gpsleap(double); double gps2tt(double); int getghar(double, double, double *); int rot3(double, double, double, double, double *); int rot1(double, double, double, double, double *); int sprod(double *, double *, double *, double *, double *); double enorm8(double *); int st1idiu(double *, double *, double *, double, double, double *); int st1isem(double *, double *, double *, double, double, double *); int st1l1(double *, double *, double *, double, double, double *); int step2diu(double *, double, double, double *); int step2lon(double *, double, double, double *); int main(int argc, char **argv) { double yr, day, lon, lat, du, dv, dw; pi = 4.0 * atan(1.0); pi2 = pi * 2; rad = 180.0 / pi; if (argc != 2) { die("", USAGE); } yr = floor(atof(argv[1]) / 1000.0); day = atof(argv[1]) - yr * 1000.0; while (scanf(" %lf %lf ", &lon, &lat) == 2) { if (lon < 0.0) lon = lon + 360.0; // as quote from Dennis Milbert's website "The output file name is // solid.txt. It is plain ASCII text. After the header, solid earth tide // components are computed for 24 hours, at 1 minute intervals. Note: the // time stamps refer to UTC time. The solid earth tide components are NORTH, // EAST, UP in the local geodetic (ellipsoidal) horizon system." compute_tide(yr, day, lon, lat, &du, &dv, &dw); if (lon > 180.0) lon = lon - 360.0; fprintf(stdout, "%.9f %.9f %.12e %.12e %.12e \n", lon, lat, dv, du, dw); // du = north, dv = east, dw = up } return (1); } int compute_tide(double yr, double day, double glod, double glad, double *du, double *dv, double *dw) { double gla0, glo0, eht0, x0, y0, z0, xsta[4], rsun[4], rmoon[4], etide[4]; double fmjd, mjd, iyr, imo, idy, ihr, imn, sec; gla0 = glad / rad; glo0 = glod / rad; eht0 = 0.0; // convert yyyyddd.fffff to iyr,imo,idy,ihr,imn,sec day2date(yr, day, &imo, &idy); // printf("%lf %lf %lf %lf %lf %lf\n",yr,day,imo,idy,glad,glod); iyr = yr; ihr = floor((day - floor(day)) * 86400.0 / 3600.0); imn = floor(((day - floor(day)) * 86400.0 - ihr * 3600.0) / 60.0); sec = (day - floor(day)) * 86400.0 - ihr * 3600.0 - imn * 60.0; // sec = round(sec); //for testing geo2xyz(gla0, glo0, eht0, &x0, &y0, &z0); xsta[1] = x0; xsta[2] = y0; xsta[3] = z0; //*** here comes the sun (and the moon) (go, tide!) // ihr=0.0; // imn=0.0; // sec=49920.0; //GPS time system; civmjd(iyr, imo, idy, ihr, imn, sec, &mjd, &fmjd); mjd0 = mjd; // fprintf(stderr,"%.17lf %.17lf %lf %lf %lf %lf %lf // %.17lf\n",mjd,fmjd,iyr,imo,idy,ihr,imn,sec); // mjdciv(mjd,fmjd,&iyr,&imo,&idy,&ihr,&imn,&sec); // printf("%lf %lf %lf %lf %lf %lf %lf // %lf\n",mjd,fmjd,iyr,imo,idy,ihr,imn,sec); sunxyz(mjd, fmjd, rsun); // printf("%.17lf %.17lf %.17lf %.17lf // %.17lf\n",mjd,fmjd,rsun[1],rsun[2],rsun[3]); moonxyz(mjd, fmjd, rmoon); // printf("%.17lf %.17lf %.17lf %.17lf // %.17lf\n",mjd,fmjd,rmoon[1],rmoon[2],rmoon[3]); detide(xsta, mjd, fmjd, rsun, rmoon, etide); // printf("%.17lf %.17lf %.17lf %.17lf // %.17lf\n",mjd,fmjd,etide[1],etide[2],etide[3]); rge(gla0, glo0, du, dv, dw, etide[1], etide[2], etide[3]); // printf("%.17lf %.17lf %.17lf %.17lf %.17lf\n",mjd,fmjd,*du,*dv,*dw); // printf("hahahahaha\n"); return (1); } int rge(double gla, double glo, double *u, double *v, double *w, double x, double y, double z) { //*** given a rectangular cartesian system (x,y,z) //*** compute a geodetic h cartesian sys (u,v,w) // implicit double precision(a-h,o-z) double sb, cb, sl, cl; sb = sin(gla); cb = cos(gla); sl = sin(glo); cl = cos(glo); *u = -sb * cl * x - sb * sl * y + cb * z; *v = -sl * x + cl * y; *w = cb * cl * x + cb * sl * y + sb * z; return (1); } int detide(double *xsta, double mjd, double fmjd, double *xsun, double *xmon, double *dxtide) { //*** computation of tidal corrections of station displacements caused //*** by lunar and solar gravitational attraction //*** step 1 (here general degree 2 and 3 corrections + //*** call st1idiu + call st1isem + call st1l1) //*** + step 2 (call step2diu + call step2lon + call step2idiu) //*** it has been decided that the step 3 un-correction for permanent tide //*** would *not* be applied in order to avoid jump in the reference frame //*** (this step 3 must added in order to get the mean tide station position //*** and to be conformed with the iag resolution.) //*** inputs //*** xsta(i),i=1,2,3 -- geocentric position of the station (ITRF/ECEF) //*** xsun(i),i=1,2,3 -- geoc. position of the sun (ECEF) //*** xmon(i),i=1,2,3 -- geoc. position of the moon (ECEF) //*** mjd,fmjd -- modified julian day (and fraction) (in GPS time) //****old calling // sequence***************************************************** //*** dmjd -- time in mean julian date (including day // fraction) //*** fhr=hr+zmin/60.+sec/3600. -- hr in the day //*** outputs //*** dxtide(i),i=1,2,3 -- displacement vector (ITRF) //*** author iers 1996 : v. dehant, s. mathews and j. gipson //*** (test between two subroutines) //*** author iers 2000 : v. dehant, c. bruyninx and s. mathews //*** (test in the bernese program by c. bruyninx) //*** created: 96/03/23 (see above) //*** modified from dehanttideinelMJD.f by Dennis Milbert 2006sep10 //*** bug fix regarding fhr (changed calling sequence, too) //*** modified to reflect table 7.5a and b IERS Conventions 2003 //*** modified to use TT time system to call step 2 functions //*** sign correction by V.Dehant to match eq.16b, p.81, Conventions //*** applied by Dennis Milbert 2007may05 // implicit double precision(a-h,o-z) // double precision xsta(3),xsun(3),xmon(3),dxtide(3),xcorsta(3) // double precision h20,l20,h3,l3,h2,l2 // double precision mass_ratio_sun,mass_ratio_moon double h20, l20, h3, l3, h2, l2; double rsta, rsun, rmon, scs, scm, scsun, scmon, cosphi; double tsecgps, tsectt, fmjdtt, dmjdtt, t, fhr; double p2sun, p2mon, p3sun, p3mon, x2sun, x2mon, x3sun, x3mon; double mass_ratio_sun, mass_ratio_moon, re, fac2sun, fac2mon, fac3sun, fac3mon, xcorsta[4]; int i; //*** nominal second degree and third degree love numbers and shida numbers // data h20/0.6078d0/,l20/0.0847d0/,h3/0.292d0/,l3/0.015d0/ h20 = 0.6078; l20 = 0.0847; h3 = 0.292; l3 = 0.015; //*** internal support for new calling sequence //*** also convert GPS time into TT time tsecgps = fmjd * 86400.0; //!*** GPS time (sec of day) tsectt = gps2tt(tsecgps); //!*** TT time (sec of day) fmjdtt = tsectt / 86400.0; //!*** TT time (fract. day) dmjdtt = mjd + fmjdtt; //!*** float MJD in TT //*** commented line was live code in dehanttideinelMJD.f //*** changed on the suggestion of Dr. Don Kim, UNB -- 09mar21 //*** Julian date for 2000 January 1 00:00:00.0 UT is JD 2451544.5 //*** MJD for 2000 January 1 00:00:00.0 UT is MJD 51544.0 //***** t=(dmjdtt-51545.d0)/36525.d0 !*** days to centuries, TT t = (dmjdtt - 51544.0) / 36525.0; //!*** days to centuries, TT fhr = (dmjdtt - floor(dmjdtt)) * 24.0; //!*** hours in the day, TT //*** scalar product of station vector with sun/moon vector sprod(xsta, xsun, &scs, &rsta, &rsun); sprod(xsta, xmon, &scm, &rsta, &rmon); scsun = scs / rsta / rsun; scmon = scm / rsta / rmon; //*** computation of new h2 and l2 cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; h2 = h20 - 0.0006 * (1.0 - 3.0 / 2.0 * cosphi * cosphi); l2 = l20 + 0.0002 * (1.0 - 3.0 / 2.0 * cosphi * cosphi); //*** p2-term p2sun = 3.0 * (h2 / 2.0 - l2) * scsun * scsun - h2 / 2.0; p2mon = 3.0 * (h2 / 2.0 - l2) * scmon * scmon - h2 / 2.0; //*** p3-term p3sun = 5.0 / 2.0 * (h3 - 3.0 * l3) * scsun * scsun * scsun + 3.0 / 2.0 * (l3 - h3) * scsun; p3mon = 5.0 / 2.0 * (h3 - 3.0 * l3) * scmon * scmon * scmon + 3.0 / 2.0 * (l3 - h3) * scmon; //*** term in direction of sun/moon vector x2sun = 3.0 * l2 * scsun; x2mon = 3.0 * l2 * scmon; x3sun = 3.0 * l3 / 2.0 * (5.0 * scsun * scsun - 1.0); x3mon = 3.0 * l3 / 2.0 * (5.0 * scmon * scmon - 1.0); //*** factors for sun/moon mass_ratio_sun = 332945.943062; mass_ratio_moon = 0.012300034; re = 6378136.55; fac2sun = mass_ratio_sun * re * pow(re / rsun, 3); fac2mon = mass_ratio_moon * re * pow(re / rmon, 3); fac3sun = fac2sun * (re / rsun); fac3mon = fac2mon * (re / rmon); //*** total displacement for (i = 1; i <= 3; i++) { dxtide[i] = fac2sun * (x2sun * xsun[i] / rsun + p2sun * xsta[i] / rsta) + fac2mon * (x2mon * xmon[i] / rmon + p2mon * xsta[i] / rsta) + fac3sun * (x3sun * xsun[i] / rsun + p3sun * xsta[i] / rsta) + fac3mon * (x3mon * xmon[i] / rmon + p3mon * xsta[i] / rsta); } // call zero_vec8(xcorsta) xcorsta[1] = 0; xcorsta[2] = 0; xcorsta[3] = 0; xcorsta[0] = 0; // printf("%.15lf %.15lf %.15lf %.15lf %.15lf %.15lf // %.15lf\n",rsta,xsta[1],xsta[2],xsta[3],dxtide[1],dxtide[2],dxtide[3]); //*** corrections for the out-of-phase part of love numbers //*** (part h_2^(0)i and l_2^(0)i ) //*** first, for the diurnal band st1idiu(xsta, xsun, xmon, fac2sun, fac2mon, xcorsta); dxtide[1] = dxtide[1] + xcorsta[1]; dxtide[2] = dxtide[2] + xcorsta[2]; dxtide[3] = dxtide[3] + xcorsta[3]; // printf("%.15lf %.15lf %.15lf\n",xcorsta[1],xcorsta[2],xcorsta[3]); //*** second, for the semi-diurnal band st1isem(xsta, xsun, xmon, fac2sun, fac2mon, xcorsta); dxtide[1] = dxtide[1] + xcorsta[1]; dxtide[2] = dxtide[2] + xcorsta[2]; dxtide[3] = dxtide[3] + xcorsta[3]; // printf("%.15lf %.15lf %.15lf\n",xcorsta[1],xcorsta[2],xcorsta[3]); //*** corrections for the latitude dependence of love numbers (part l^(1) ) st1l1(xsta, xsun, xmon, fac2sun, fac2mon, xcorsta); dxtide[1] = dxtide[1] + xcorsta[1]; dxtide[2] = dxtide[2] + xcorsta[2]; dxtide[3] = dxtide[3] + xcorsta[3]; // printf("%.15lf %.15lf %.15lf\n",xcorsta[1],xcorsta[2],xcorsta[3]); //*** consider corrections for step 2 //*** corrections for the diurnal band: //*** first, we need to know the date converted in julian centuries //*** this is now handled at top of code (also convert to TT time system) //***** t=(dmjd-51545.)/36525. //***** fhr=dmjd-int(dmjd) !*** this is/was a buggy line (day vs. // hr) //*** second, the diurnal band corrections, //*** (in-phase and out-of-phase frequency dependence): step2diu(xsta, fhr, t, xcorsta); dxtide[1] = dxtide[1] + xcorsta[1]; dxtide[2] = dxtide[2] + xcorsta[2]; dxtide[3] = dxtide[3] + xcorsta[3]; //*** corrections for the long-period band, //*** (in-phase and out-of-phase frequency dependence): step2lon(xsta, fhr, t, xcorsta); dxtide[1] = dxtide[1] + xcorsta[1]; dxtide[2] = dxtide[2] + xcorsta[2]; dxtide[3] = dxtide[3] + xcorsta[3]; /**** consider corrections for step 3 *----------------------------------------------------------------------- * The code below is commented to prevent restoring deformation * due to permanent tide. All the code above removes * total tidal deformation with conventional Love numbers. * The code above realizes a conventional tide free crust (i.e. ITRF). * This does NOT conform to Resolution 16 of the 18th General Assembly * of the IAG (1983). This resolution has not been implemented by * the space geodesy community in general (c.f. IERS Conventions 2003). *-----------------------------------------------------------------------*/ //*** uncorrect for the permanent tide (only if you want mean tide system) //*** pi=3.141592654 //*** sinphi=xsta(3)/rsta //*** cosphi=dsqrt(xsta(1)**2+xsta(2)**2)/rsta //*** cosla=xsta(1)/cosphi/rsta //*** sinla=xsta(2)/cosphi/rsta //*** dr=-dsqrt(5./4./pi)*h2*0.31460*(3./2.*sinphi**2-0.5) //*** dn=-dsqrt(5./4./pi)*l2*0.31460*3.*cosphi*sinphi //*** dxtide(1)=dxtide(1)-dr*cosla*cosphi+dn*cosla*sinphi //*** dxtide(2)=dxtide(2)-dr*sinla*cosphi+dn*sinla*sinphi //*** dxtide(3)=dxtide(3)-dr*sinphi -dn*cosphi return (1); } int step2lon(double *xsta, double fhr, double t, double *xcorsta) { // implicit double precision (a-h,o-z) // double precision deg2rad // double precision xsta(3),xcorsta(3),datdi(9,5) double deg2rad = 0.017453292519943295769; double s, pr, h, p, zns, ps, rsta, sinphi, cosphi, cosla, sinla, dr_tot, dn_tot, thetaf, dr, dn, de; int i, j; //*** cf. table 7.5b of IERS conventions 2003 (TN.32, pg.82) //*** columns are s,h,p,N',ps, dR(ip),dT(ip),dR(op),dT(op) //*** IERS cols.= s,h,p,N',ps, dR(ip),dR(op),dT(ip),dT(op) //*** units of mm double datdi[45] /* was [9][5] */ = {0., 0., 0., 1., 0., .47, .23, .16, .07, 0., 2., 0., 0., 0., -.2, -.12, -.11, -.05, 1., 0., -1., 0., 0., -.11, -.08, -.09, -.04, 2., 0., 0., 0., 0., -.13, -.11, -.15, -.07, 2., 0., 0., 1., 0., -.05, -.05, -.06, -.03}; // data ((datdi(i,j),i=1,9),j=1,5)/ //* 0, 0, 0, 1, 0, 0.47, 0.23, 0.16, 0.07, //* 0, 2, 0, 0, 0, -0.20,-0.12,-0.11,-0.05, //* 1, 0,-1, 0, 0, -0.11,-0.08,-0.09,-0.04, //* 2, 0, 0, 0, 0, -0.13,-0.11,-0.15,-0.07, //* 2, 0, 0, 1, 0, -0.05,-0.05,-0.06,-0.03/ s = 218.31664563 + 481267.88194 * t - 0.0014663889 * t * t + 0.00000185139 * t * t * t; pr = 1.396971278 * t + 0.000308889 * t * t + 0.000000021 * t * t * t + 0.000000007 * t * t * t * t; s = s + pr; h = 280.46645 + 36000.7697489 * t + 0.00030322222 * t * t + 0.000000020 * t * t * t - 0.00000000654 * t * t * t * t; p = 83.35324312 + 4069.01363525 * t - 0.01032172222 * t * t - 0.0000124991 * t * t * t + 0.00000005263 * t * t * t * t; zns = 234.95544499 + 1934.13626197 * t - 0.00207561111 * t * t - 0.00000213944 * t * t * t + 0.00000001650 * t * t * t * t; ps = 282.93734098 + 1.71945766667 * t + 0.00045688889 * t * t - 0.00000001778 * t * t * t - 0.00000000334 * t * t * t * t; rsta = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2] + xsta[3] * xsta[3]); sinphi = xsta[3] / rsta; cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; cosla = xsta[1] / cosphi / rsta; sinla = xsta[2] / cosphi / rsta; //*** reduce angles to between 0 and 360 s = fmod(s, 360.0); //***** tau=dmod(tau,360.d0) !*** tau not used here--09jul28 h = fmod(h, 360.0); p = fmod(p, 360.0); zns = fmod(zns, 360.0); ps = fmod(ps, 360.0); dr_tot = 0.0; dn_tot = 0.0; for (i = 1; i <= 3; i++) { xcorsta[i] = 0.0; } //*** 1 2 3 4 5 6 7 8 9 //*** columns are s,h,p,N',ps, dR(ip),dT(ip),dR(op),dT(op) for (j = 1; j <= 5; j++) { thetaf = (datdi[j * 9 - 9] * s + datdi[j * 9 - 8] * h + datdi[j * 9 - 7] * p + datdi[j * 9 - 6] * zns + datdi[j * 9 - 5] * ps) * deg2rad; dr = datdi[j * 9 - 4] * (3.0 * sinphi * sinphi - 1.0) / 2.0 * cos(thetaf) + datdi[j * 9 - 2] * (3.0 * sinphi * sinphi - 1.0) / 2.0 * sin(thetaf); dn = datdi[j * 9 - 3] * (cosphi * sinphi * 2.0) * cos(thetaf) + datdi[j * 9 - 1] * (cosphi * sinphi * 2.0) * sin(thetaf); de = 0.0; dr_tot = dr_tot + dr; dn_tot = dn_tot + dn; xcorsta[1] = xcorsta[1] + dr * cosla * cosphi - de * sinla - dn * sinphi * cosla; xcorsta[2] = xcorsta[2] + dr * sinla * cosphi + de * cosla - dn * sinphi * sinla; xcorsta[3] = xcorsta[3] + dr * sinphi + dn * cosphi; } for (i = 1; i <= 3; i++) { xcorsta[i] = xcorsta[i] / 1000.0; } return (1); } int step2diu(double *xsta, double fhr, double t, double *xcorsta) { //*** last change: vd 17 may 00 1:20 pm //*** these are the subroutines for the step2 of the tidal corrections. //*** they are called to account for the frequency dependence //*** of the love numbers. // implicit double precision (a-h,o-z) // double precision xsta(3),xcorsta(3),datdi(9,31) // double precision deg2rad // data deg2rad/0.017453292519943295769d0/ double deg2rad = 0.017453292519943295769; double s, tau, pr, h, zns, p, ps, rsta, sinphi, cosphi, cosla, sinla, zla, thetaf, dr, dn, de; int i, j; //*** note, following table is derived from dehanttideinelMJD.f (2000oct30 // 16:10) //*** has minor differences from that of dehanttideinel.f (2000apr17 14:10) //*** D.M. edited to strictly follow published table 7.5a (2006aug08 13:46) //*** cf. table 7.5a of IERS conventions 2003 (TN.32, pg.82) //*** columns are s,h,p,N',ps, dR(ip),dR(op),dT(ip),dT(op) //*** units of mm double datdi[279] /* was [9][31] */ = { -3., 0., 2., 0., 0., -.01, -.01, 0., 0., -3., 2., 0., 0., 0., -.01, -.01, 0., 0., -2., 0., 1., -1., 0., -.02, -.01, 0., 0., -2., 0., 1., 0., 0., -.08, 0., .01, .01, -2., 2., -1., 0., 0., -.02, -.01, 0., 0., -1., 0., 0., -1., 0., -.1, 0., 0., 0., -1., 0., 0., 0., 0., -.51, 0., -.02, .03, -1., 2., 0., 0., 0., .01, 0., 0., 0., 0., -2., 1., 0., 0., .01, 0., 0., 0., 0., 0., -1., 0., 0., .02, .01, 0., 0., 0., 0., 1., 0., 0., .06, 0., 0., 0., 0., 0., 1., 1., 0., .01, 0., 0., 0., 0., 2., -1., 0., 0., .01, 0., 0., 0., 1., -3., 0., 0., 1., -.06, 0., 0., 0., 1., -2., 0., 1., 0., .01, 0., 0., 0., 1., -2., 0., 0., 0., -1.23, -.07, .06, .01, 1., -1., 0., 0., -1., .02, 0., 0., 0., 1., -1., 0., 0., 1., .04, 0., 0., 0., 1., 0., 0., -1., 0., -.22, .01, .01, 0., 1., 0., 0., 0., 0., 12., -.78, -.67, -.03, 1., 0., 0., 1., 0., 1.73, -.12, -.1, 0., 1., 0., 0., 2., 0., -.04, 0., 0., 0., 1., 1., 0., 0., -1., -.5, -.01, .03, 0., 1., 1., 0., 0., 1., .01, 0., 0., 0., 1., 1., 0., 1., -1., -.01, 0., 0., 0., 1., 2., -2., 0., 0., -.01, 0., 0., 0., 1., 2., 0., 0., 0., -.11, .01, .01, 0., 2., -2., 1., 0., 0., -.01, 0., 0., 0., 2., 0., -1., 0., 0., -.02, .02, 0., .01, 3., 0., 0., 0., 0., 0., .01, 0., .01, 3., 0., 0., 1., 0., 0., .01, 0., 0.}; /* data ((datdi(i,j),i=1,9),j=1,31)/ * -3., 0., 2., 0., 0.,-0.01,-0.01, 0.0 , 0.0, * -3., 2., 0., 0., 0.,-0.01,-0.01, 0.0 , 0.0, * -2., 0., 1.,-1., 0.,-0.02,-0.01, 0.0 , 0.0, *****----------------------------------------------------------------------- ****** -2., 0., 1., 0., 0.,-0.08,-0.05, 0.01,-0.02, !*** original entry * -2., 0., 1., 0., 0.,-0.08, 0.00, 0.01, 0.01, !*** table 7.5a *****----------------------------------------------------------------------- * -2., 2.,-1., 0., 0.,-0.02,-0.01, 0.0 , 0.0, *****----------------------------------------------------------------------- ****** -1., 0., 0.,-1., 0.,-0.10,-0.05, 0.0 ,-0.02, !*** original entry * -1., 0., 0.,-1., 0.,-0.10, 0.00, 0.00, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- ****** -1., 0., 0., 0., 0.,-0.51,-0.26,-0.02,-0.12, !*** original entry * -1., 0., 0., 0., 0.,-0.51, 0.00,-0.02, 0.03, !*** table 7.5a *****----------------------------------------------------------------------- * -1., 2., 0., 0., 0., 0.01, 0.0 , 0.0 , 0.0, * 0.,-2., 1., 0., 0., 0.01, 0.0 , 0.0 , 0.0, * 0., 0.,-1., 0., 0., 0.02, 0.01, 0.0 , 0.0, *****----------------------------------------------------------------------- ****** 0., 0., 1., 0., 0., 0.06, 0.02, 0.0 , 0.01, !*** original entry * 0., 0., 1., 0., 0., 0.06, 0.00, 0.00, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- * 0., 0., 1., 1., 0., 0.01, 0.0 , 0.0 , 0.0, * 0., 2.,-1., 0., 0., 0.01, 0.0 , 0.0 , 0.0, * 1.,-3., 0., 0., 1.,-0.06, 0.00, 0.00, 0.00, !*** table 7.5a * 1.,-2., 0., 1., 0., 0.01, 0.0 , 0.0 , 0.0, *****----------------------------------------------------------------------- ****** 1.,-2., 0., 0., 0.,-1.23,-0.05, 0.06,-0.06, !*** original entry * 1.,-2., 0., 0., 0.,-1.23,-0.07, 0.06, 0.01, !*** table 7.5a *****----------------------------------------------------------------------- * 1.,-1., 0., 0.,-1., 0.02, 0.0 , 0.0 , 0.0, * 1.,-1., 0., 0., 1., 0.04, 0.0 , 0.0 , 0.0, * 1., 0., 0.,-1., 0.,-0.22, 0.01, 0.01, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- ****** 1., 0., 0., 0., 0.,12.02,-0.45,-0.66, 0.17, !*** original entry * 1., 0., 0., 0., 0.,12.00,-0.78,-0.67,-0.03, !*** table 7.5a *****----------------------------------------------------------------------- ****** 1., 0., 0., 1., 0., 1.73,-0.07,-0.10, 0.02, !*** original entry * 1., 0., 0., 1., 0., 1.73,-0.12,-0.10, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- * 1., 0., 0., 2., 0.,-0.04, 0.0 , 0.0 , 0.0, *****----------------------------------------------------------------------- ****** 1., 1., 0., 0.,-1.,-0.50, 0.0 , 0.03, 0.0, !*** original entry * 1., 1., 0., 0.,-1.,-0.50,-0.01, 0.03, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- * 1., 1., 0., 0., 1., 0.01, 0.0 , 0.0 , 0.0, *****----------------------------------------------------------------------- ****** 0., 1., 0., 1.,-1.,-0.01, 0.0 , 0.0 , 0.0, !*** original entry * 1., 1., 0., 1.,-1.,-0.01, 0.0 , 0.0 , 0.0, !*** v.dehant 2007 *****----------------------------------------------------------------------- * 1., 2.,-2., 0., 0.,-0.01, 0.0 , 0.0 , 0.0, *****----------------------------------------------------------------------- ****** 1., 2., 0., 0., 0.,-0.12, 0.01, 0.01, 0.0, !*** original entry * 1., 2., 0., 0., 0.,-0.11, 0.01, 0.01, 0.00, !*** table 7.5a *****----------------------------------------------------------------------- * 2.,-2., 1., 0., 0.,-0.01, 0.0 , 0.0 , 0.0, * 2., 0.,-1., 0., 0.,-0.02, 0.02, 0.0 , 0.01, * 3., 0., 0., 0., 0., 0.0 , 0.01, 0.0 , 0.01, * 3., 0., 0., 1., 0., 0.0 , 0.01, 0.0 , 0.0/ */ s = 218.31664563 + 481267.88194 * t - 0.0014663889 * t * t + 0.00000185139 * t * t * t; tau = fhr * 15.0 + 280.46061840 + 36000.77005360 * t + 0.000387930 * t * t - 0.0000000258 * t * t * t - s; pr = 1.396971278 * t + 0.000308889 * t * t + 0.000000021 * t * t * t + 0.000000007 * t * t * t * t; s = s + pr; h = 280.46645 + 36000.7697489 * t + 0.00030322222 * t * t + 0.000000020 * t * t * t - 0.00000000654 * t * t * t * t; p = 83.35324312 + 4069.01363525 * t - 0.01032172222 * t * t - 0.0000124991 * t * t * t + 0.00000005263 * t * t * t * t; zns = 234.95544499 + 1934.13626197 * t - 0.00207561111 * t * t - 0.00000213944 * t * t * t + 0.00000001650 * t * t * t * t; ps = 282.93734098 + 1.71945766667 * t + 0.00045688889 * t * t - 0.00000001778 * t * t * t - 0.00000000334 * t * t * t * t; //*** reduce angles to between 0 and 360 s = fmod(s, 360.0); tau = fmod(tau, 360.0); h = fmod(h, 360.0); p = fmod(p, 360.0); zns = fmod(zns, 360.0); ps = fmod(ps, 360.0); rsta = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2] + xsta[3] * xsta[3]); sinphi = xsta[3] / rsta; cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; cosla = xsta[1] / cosphi / rsta; sinla = xsta[2] / cosphi / rsta; zla = atan2(xsta[2], xsta[1]); for (i = 1; i <= 3; i++) { xcorsta[i] = 0.0; } for (j = 1; j <= 31; j++) { thetaf = (tau + datdi[j * 9 - 9] * s + datdi[j * 9 - 8] * h + datdi[j * 9 - 7] * p + datdi[j * 9 - 6] * zns + datdi[j * 9 - 5] * ps) * deg2rad; dr = datdi[j * 9 - 4] * 2.0 * sinphi * cosphi * sin(thetaf + zla) + datdi[j * 9 - 3] * 2.0 * sinphi * cosphi * cos(thetaf + zla); dn = datdi[j * 9 - 2] * (cosphi * cosphi - sinphi * sinphi) * sin(thetaf + zla) + datdi[j * 9 - 1] * (cosphi * cosphi - sinphi * sinphi) * cos(thetaf + zla); //***** following correction by V.Dehant to match eq.16b, p.81, 2003 // Conventions //***** de=datdi(8,j)*sinphi*cos(thetaf+zla)+ de = datdi[j * 9 - 2] * sinphi * cos(thetaf + zla) - datdi[j * 9 - 1] * sinphi * sin(thetaf + zla); xcorsta[1] = xcorsta[1] + dr * cosla * cosphi - de * sinla - dn * sinphi * cosla; xcorsta[2] = xcorsta[2] + dr * sinla * cosphi + de * cosla - dn * sinphi * sinla; xcorsta[3] = xcorsta[3] + dr * sinphi + dn * cosphi; } for (i = 1; i <= 3; i++) { xcorsta[i] = xcorsta[i] / 1000.0; } return (1); } int st1l1(double *xsta, double *xsun, double *xmon, double fac2sun, double fac2mon, double *xcorsta) { //*** this subroutine gives the corrections induced by the latitude dependence //*** given by l^(1) in mahtews et al (1991) //*** input: xsta,xsun,xmon,fac3sun,fac3mon //*** output: xcorsta // implicit double precision (a-h,o-z) // dimension xsta(3),xsun(3),xmon(3),xcorsta(3) double l1, l1d, l1sd, rsta, sinphi, cosphi, sinla, cosla, costwola, sintwola, rmon, rsun, dnsun, dnmon, desun, demon, dn, de; ; l1d = 0.0012; l1sd = 0.0024; rsta = enorm8(xsta); sinphi = xsta[3] / rsta; cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; sinla = xsta[2] / cosphi / rsta; cosla = xsta[1] / cosphi / rsta; rmon = enorm8(xmon); rsun = enorm8(xsun); //*** for the diurnal band l1 = l1d; dnsun = -l1 * sinphi * sinphi * fac2sun * xsun[3] * (xsun[1] * cosla + xsun[2] * sinla) / rsun / rsun; dnmon = -l1 * sinphi * sinphi * fac2mon * xmon[3] * (xmon[1] * cosla + xmon[2] * sinla) / rmon / rmon; desun = l1 * sinphi * (cosphi * cosphi - sinphi * sinphi) * fac2sun * xsun[3] * (xsun[1] * sinla - xsun[2] * cosla) / rsun / rsun; demon = l1 * sinphi * (cosphi * cosphi - sinphi * sinphi) * fac2mon * xmon[3] * (xmon[1] * sinla - xmon[2] * cosla) / rmon / rmon; de = 3.0 * (desun + demon); dn = 3.0 * (dnsun + dnmon); xcorsta[1] = -de * sinla - dn * sinphi * cosla; xcorsta[2] = de * cosla - dn * sinphi * sinla; xcorsta[3] = dn * cosphi; //*** for the semi-diurnal band l1 = l1sd; costwola = cosla * cosla - sinla * sinla; sintwola = 2.0 * cosla * sinla; dnsun = -l1 / 2.0 * sinphi * cosphi * fac2sun * ((xsun[1] * xsun[1] - xsun[2] * xsun[2]) * costwola + 2.0 * xsun[1] * xsun[2] * sintwola) / rsun / rsun; dnmon = -l1 / 2.0 * sinphi * cosphi * fac2mon * ((xmon[1] * xmon[1] - xmon[2] * xmon[2]) * costwola + 2.0 * xmon[1] * xmon[2] * sintwola) / rmon / rmon; desun = -l1 / 2.0 * sinphi * sinphi * cosphi * fac2sun * ((xsun[1] * xsun[1] - xsun[2] * xsun[2]) * sintwola - 2.0 * xsun[1] * xsun[2] * costwola) / rsun / rsun; demon = -l1 / 2.0 * sinphi * sinphi * cosphi * fac2mon * ((xmon[1] * xmon[1] - xmon[2] * xmon[2]) * sintwola - 2.0 * xmon[1] * xmon[2] * costwola) / rmon / rmon; de = 3.0 * (desun + demon); dn = 3.0 * (dnsun + dnmon); xcorsta[1] = xcorsta[1] - de * sinla - dn * sinphi * cosla; xcorsta[2] = xcorsta[2] + de * cosla - dn * sinphi * sinla; xcorsta[3] = xcorsta[3] + dn * cosphi; return (1); } int st1isem(double *xsta, double *xsun, double *xmon, double fac2sun, double fac2mon, double *xcorsta) { //*** this subroutine gives the out-of-phase corrections induced by //*** mantle inelasticity in the diurnal band //*** input: xsta,xsun,xmon,fac2sun,fac2mon //*** output: xcorsta // implicit double precision (a-h,o-z) // dimension xsta(3),xsun(3),xmon(3),xcorsta(3) // data dhi/-0.0022d0/,dli/-0.0007d0/ double dhi, dli, rsta, sinphi, cosphi, sinla, cosla, costwola, sintwola, rmon, rsun, drsun, drmon, dnsun, dnmon, desun, demon, dr, dn, de; dhi = -0.0022; dli = -0.0007; rsta = enorm8(xsta); sinphi = xsta[3] / rsta; cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; sinla = xsta[2] / cosphi / rsta; cosla = xsta[1] / cosphi / rsta; costwola = cosla * cosla - sinla * sinla; sintwola = 2.0 * cosla * sinla; rmon = enorm8(xmon); rsun = enorm8(xsun); drsun = -3.0 / 4.0 * dhi * cosphi * cosphi * fac2sun * ((xsun[1] * xsun[1] - xsun[2] * xsun[2]) * sintwola - 2.0 * xsun[1] * xsun[2] * costwola) / rsun / rsun; drmon = -3.0 / 4.0 * dhi * cosphi * cosphi * fac2mon * ((xmon[1] * xmon[1] - xmon[2] * xmon[2]) * sintwola - 2.0 * xmon[1] * xmon[2] * costwola) / rmon / rmon; dnsun = 1.50 * dli * sinphi * cosphi * fac2sun * ((xsun[1] * xsun[1] - xsun[2] * xsun[2]) * sintwola - 2.0 * xsun[1] * xsun[2] * costwola) / rsun / rsun; dnmon = 1.50 * dli * sinphi * cosphi * fac2mon * ((xmon[1] * xmon[1] - xmon[2] * xmon[2]) * sintwola - 2.0 * xmon[1] * xmon[2] * costwola) / rmon / rmon; desun = -3.0 / 2.0 * dli * cosphi * fac2sun * ((xsun[1] * xsun[1] - xsun[2] * xsun[2]) * costwola + 2.0 * xsun[1] * xsun[2] * sintwola) / rsun / rsun; demon = -3.0 / 2.0 * dli * cosphi * fac2mon * ((xmon[1] * xmon[1] - xmon[2] * xmon[2]) * costwola + 2.0 * xmon[1] * xmon[2] * sintwola) / rmon / rmon; dr = drsun + drmon; dn = dnsun + dnmon; de = desun + demon; xcorsta[1] = dr * cosla * cosphi - de * sinla - dn * sinphi * cosla; xcorsta[2] = dr * sinla * cosphi + de * cosla - dn * sinphi * sinla; xcorsta[3] = dr * sinphi + dn * cosphi; return (1); } int st1idiu(double *xsta, double *xsun, double *xmon, double fac2sun, double fac2mon, double *xcorsta) { //*** this subroutine gives the out-of-phase corrections induced by //*** mantle inelasticity in the diurnal band //*** input: xsta,xsun,xmon,fac2sun,fac2mon //*** output: xcorsta // implicit double precision (a-h,o-z) // dimension xsta(3),xsun(3),xmon(3),xcorsta(3) // data dhi/-0.0025d0/,dli/-0.0007d0/ double dhi, dli, rsta, sinphi, cosphi, cos2phi, sinla, cosla, rmon, rsun, drsun, drmon, dnsun, dnmon, desun, demon, dr, dn, de; dhi = -0.0025; dli = -0.0007; rsta = enorm8(xsta); sinphi = xsta[3] / rsta; cosphi = sqrt(xsta[1] * xsta[1] + xsta[2] * xsta[2]) / rsta; cos2phi = cosphi * cosphi - sinphi * sinphi; sinla = xsta[2] / cosphi / rsta; cosla = xsta[1] / cosphi / rsta; rmon = enorm8(xmon); rsun = enorm8(xsun); drsun = -3.0 * dhi * sinphi * cosphi * fac2sun * xsun[3] * (xsun[1] * sinla - xsun[2] * cosla) / rsun / rsun; drmon = -3.0 * dhi * sinphi * cosphi * fac2mon * xmon[3] * (xmon[1] * sinla - xmon[2] * cosla) / rmon / rmon; dnsun = -3.0 * dli * cos2phi * fac2sun * xsun[3] * (xsun[1] * sinla - xsun[2] * cosla) / rsun / rsun; dnmon = -3.0 * dli * cos2phi * fac2mon * xmon[3] * (xmon[1] * sinla - xmon[2] * cosla) / rmon / rmon; desun = -3.0 * dli * sinphi * fac2sun * xsun[3] * (xsun[1] * cosla + xsun[2] * sinla) / rsun / rsun; demon = -3.0 * dli * sinphi * fac2mon * xmon[3] * (xmon[1] * cosla + xmon[2] * sinla) / rmon / rmon; dr = drsun + drmon; dn = dnsun + dnmon; de = desun + demon; xcorsta[1] = dr * cosla * cosphi - de * sinla - dn * sinphi * cosla; xcorsta[2] = dr * sinla * cosphi + de * cosla - dn * sinphi * sinla; xcorsta[3] = dr * sinphi + dn * cosphi; return (1); } double enorm8(double *a) { //*** compute euclidian norm of a vector (of length 3) // double precision a(3) double enorm8_return; enorm8_return = sqrt(a[1] * a[1] + a[2] * a[2] + a[3] * a[3]); return (enorm8_return); } int sprod(double *x, double *y, double *scal, double *r1, double *r2) { //*** computation of the scalar-product of two vectors and their norms //*** input: x(i),i=1,2,3 -- components of vector x //*** y(i),i=1,2,3 -- components of vector y //*** output: scal -- scalar product of x and y //*** r1,r2 -- lengths of the two vectors x and y // implicit double precision (a-h,o-z) // double x(4),y(4); *r1 = sqrt(x[1] * x[1] + x[2] * x[2] + x[3] * x[3]); *r2 = sqrt(y[1] * y[1] + y[2] * y[2] + y[3] * y[3]); *scal = x[1] * y[1] + x[2] * y[2] + x[3] * y[3]; return (1); } int moonxyz(double mjd, double fmjd, double *rm) { //*** get low-precision, geocentric coordinates for moon (ECEF) //*** input: mjd/fmjd, is Modified Julian Date (and fractional) in GPS time //*** output: rm, is geocentric lunar position vector [m] in ECEF //*** 1."satellite orbits: models, methods, applications" montenbruck & // gill(2000) //*** section 3.3.2, pg. 72-73 //*** 2."astronomy on the personal computer, 4th ed." montenbruck & pfleger //(2005) //*** section 3.2, pg. 38-39 routine MiniMoon // implicit double precision(a-h,o-z) // dimension rm(3) // common/stuff/rad,pi,pi2 //*** use TT for lunar ephemerides double tsecgps, tsectt, fmjdtt, tjdtt, t, el0, el, elp, f, d, selond, q, selatd, rse, oblir, sselat, cselat, sselon, cselon, t1, t2, t3; double ghar; tsecgps = fmjd * 86400.0; //!*** GPS time (sec of day) tsectt = gps2tt(tsecgps); //!*** TT time (sec of day) fmjdtt = tsectt / 86400.0; //!*** TT time (fract. day) //*** julian centuries since 1.5 january 2000 (J2000) //*** (note: also low precision use of mjd --> tjd) tjdtt = round(mjd) + fmjdtt + 2400000.50; //!*** Julian Date, TT t = (tjdtt - 2451545.0) / 36525.0; //!*** julian centuries, TT //*** el0 -- mean longitude of Moon (deg) //*** el -- mean anomaly of Moon (deg) //*** elp -- mean anomaly of Sun (deg) //*** f -- mean angular distance of Moon from ascending node (deg) //*** d -- difference between mean longitudes of Sun and Moon (deg) //*** equations 3.47, p.72 el0 = 218.316170 + (481267.880880 - 1.3972) * t; el = 134.962920 + 477198.867530 * t; elp = 357.525430 + 35999.049440 * t; f = 93.272830 + 483202.018730 * t; d = 297.850270 + 445267.111350 * t; //*** longitude w.r.t. equinox and ecliptic of year 2000 selond = el0 //!*** eq 3.48, p.72 + 22640.0 / 3600.0 * sin((el) / rad) + 769.0 / 3600.0 * sin((el + el) / rad) - 4586.0 / 3600.0 * sin((el - d - d) / rad) + 2370.0 / 3600.0 * sin((d + d) / rad) - 668.0 / 3600.0 * sin((elp) / rad) - 412.0 / 3600.0 * sin((f + f) / rad) - 212.0 / 3600.0 * sin((el + el - d - d) / rad) - 206.0 / 3600.0 * sin((el + elp - d - d) / rad) + 192.0 / 3600.0 * sin((el + d + d) / rad) - 165.0 / 3600.0 * sin((elp - d - d) / rad) + 148.0 / 3600.0 * sin((el - elp) / rad) - 125.0 / 3600.0 * sin((d) / rad) - 110.0 / 3600.0 * sin((el + elp) / rad) - 55.0 / 3600.0 * sin((f + f - d - d) / rad); //*** latitude w.r.t. equinox and ecliptic of year 2000 q = 412.0 / 3600.0 * sin((f + f) / rad) + 541.0 / 3600.0 * sin((elp) / rad); selatd = //!*** eq 3.49, p.72 +18520.0 / 3600.0 * sin((f + selond - el0 + q) / rad) - 526.0 / 3600.0 * sin((f - d - d) / rad) + 44.0 / 3600.0 * sin((el + f - d - d) / rad) - 31.0 / 3600.0 * sin((-el + f - d - d) / rad) - 25.0 / 3600.0 * sin((-el - el + f) / rad) - 23.0 / 3600.0 * sin((elp + f - d - d) / rad) + 21.0 / 3600.0 * sin((-el + f) / rad) + 11.0 / 3600.0 * sin((-elp + f - d - d) / rad); //*** distance from Earth center to Moon (m) rse = 385000.0 * 1000.0 //!*** eq 3.50, p.72 - 20905.0 * 1000.0 * cos((el) / rad) - 3699.0 * 1000.0 * cos((d + d - el) / rad) - 2956.0 * 1000.0 * cos((d + d) / rad) - 570.0 * 1000.0 * cos((el + el) / rad) + 246.0 * 1000.0 * cos((el + el - d - d) / rad) - 205.0 * 1000.0 * cos((elp - d - d) / rad) - 171.0 * 1000.0 * cos((el + d + d) / rad) - 152.0 * 1000.0 * cos((el + elp - d - d) / rad); // printf("%.15lf %.15lf %.15lf %.15lf // %.15lf\n",selond,selatd,rse,oblir,selond); //*** convert spherical ecliptic coordinates to equatorial cartesian //*** precession of equinox wrt. J2000 (p.71) selond = selond + 1.39720 * t; //!*** degrees //*** position vector of moon (mean equinox & ecliptic of J2000) (EME2000, // ICRF) //*** (plus long. advance due to precession -- eq. // above) oblir = 23.439291110 / rad; //!*** obliquity of the J2000 ecliptic sselat = sin(selatd / rad); cselat = cos(selatd / rad); sselon = sin(selond / rad); cselon = cos(selond / rad); t1 = rse * cselon * cselat; //!*** meters !*** eq. 3.51, p.72 t2 = rse * sselon * cselat; //!*** meters !*** eq. 3.51, p.72 t3 = rse * sselat; //!*** meters !*** eq. 3.51, p.72 rot1(-oblir, t1, t2, t3, rm); //!*** eq. 3.51, p.72 //*** convert position vector of moon to ECEF (ignore polar motion/LOD) getghar(mjd, fmjd, &ghar); //!*** sec 2.3.1,p.33 rot3(ghar, rm[1], rm[2], rm[3], rm); //!*** eq. 2.89, p.37 return (1); } int rot1(double theta, double x, double y, double z, double *rm) { //*** rotate coordinate axes about 1 axis by angle of theta radians //*** x,y,z transformed into u,v,w // implicit double precision(a-h,o-z) double s, c; s = sin(theta); c = cos(theta); rm[1] = x; rm[2] = c * y + s * z; rm[3] = c * z - s * y; return (1); } int sunxyz(double mjd, double fmjd, double *rs) { //*** get low-precision, geocentric coordinates for sun (ECEF) //*** input, mjd/fmjd, is Modified Julian Date (and fractional) in GPS time //*** output, rs, is geocentric solar position vector [m] in ECEF //*** 1."satellite orbits: models, methods, applications" montenbruck & // gill(2000) //*** section 3.3.2, pg. 70-71 //*** 2."astronomy on the personal computer, 4th ed." montenbruck & pfleger //(2005) //*** section 3.2, pg. 39 routine MiniSun double obe, sobe, cobe, opod, tsecgps, tsectt, fmjdtt, tjdtt, t, emdeg, em, em2, r, slond, slon, sslon, cslon; double rs1, rs2, rs3, ghar; //*** mean elements for year 2000, sun ecliptic orbit wrt. Earth obe = 23.43929111 / rad; //!*** obliquity of the J2000 ecliptic sobe = sin(obe); cobe = cos(obe); opod = 282.9400; //!*** RAAN + arg.peri. (deg.) //*** use TT for solar ephemerides tsecgps = fmjd * 86400.0; //!*** GPS time (sec of day) tsectt = gps2tt(tsecgps); //!*** TT time (sec of day) fmjdtt = tsectt / 86400.0; //!*** TT time (fract. day) //*** julian centuries since 1.5 january 2000 (J2000) //*** (note: also low precision use of mjd --> tjd) tjdtt = round(mjd) + fmjdtt + 2400000.5; //!*** Julian Date, TT t = (tjdtt - 2451545.0) / 36525.0; //!*** julian centuries, TT emdeg = 357.5256 + 35999.049 * t; //!*** degrees em = emdeg / rad; //!*** radians em2 = em + em; //!*** radians //*** series expansions in mean anomaly, em (eq. 3.43, p.71) r = (149.619 - 2.499 * cos(em) - 0.021 * cos(em2)) * 1.0e9; //!*** m. slond = opod + emdeg + (6892.0 * sin(em) + 72.0 * sin(em2)) / 3600.0; //*** precession of equinox wrt. J2000 (p.71) slond = slond + 1.39720 * t; //!*** degrees // fprintf(stderr,"%.12lf\n",em); //*** position vector of sun (mean equinox & ecliptic of J2000) (EME2000, // ICRF) //*** (plus long. advance due to precession -- eq. // above) slon = slond / rad; //!*** radians sslon = sin(slon); cslon = cos(slon); rs1 = r * cslon; //!*** meters !*** eq. 3.46, p.71 rs2 = r * sslon * cobe; //!*** meters !*** eq. 3.46, p.71 rs3 = r * sslon * sobe; //!*** meters !*** eq. 3.46, p.71 // printf("%lf %lf %lf\n",rs1,rs2,rs3); //*** convert position vector of sun to ECEF (ignore polar motion/LOD) getghar(mjd, fmjd, &ghar); //!*** sec 2.3.1,p.33 rot3(ghar, rs1, rs2, rs3, rs); //!*** eq. 2.89, p.37 return (1); } int rot3(double theta, double x, double y, double z, double *rs) { //*** rotate coordinate axes about 3 axis by angle of theta radians //*** x,y,z transformed into u,v,w // implicit double precision(a-h,o-z) double s, c; s = sin(theta); c = cos(theta); rs[1] = c * x + s * y; rs[2] = c * y - s * x; rs[3] = z; return (1); } double gps2tt(double tsec) { //*** convert tsec in GPS to tsec in TT double gps2tt_return; gps2tt_return = tsec + 51.1840; //!*** fixed offset return (gps2tt_return); } int getghar(double mjd, double fmjd, double *ghar) { //*** convert mjd/fmjd in GPS time to Greenwich hour angle (in radians) //*** "satellite orbits: models, methods, applications" montenbruck & // gill(2000) //*** section 2.3.1, pg. 33 //*** need UT to get sidereal time ("astronomy on the personal computer", 4th // ed) //*** (pg.43, montenbruck & pfleger, springer, // 2005) double tsecgps, tsecutc, fmjdutc, d, ghad, i; tsecgps = fmjd * 86400.0; //!*** GPS time (sec of day) tsecutc = gps2utc(tsecgps); //!*** UTC time (sec of day) fmjdutc = tsecutc / 86400.0; //!*** UTC time (fract. day) //***** d = MJD - 51544.5d0 !*** footnote d = (round(mjd) - 51544) + (fmjdutc - 0.5); //!*** days since J2000 //*** greenwich hour angle for J2000 (12:00:00 on 1 Jan 2000) //***** ghad = 100.46061837504d0 + 360.9856473662862d0*d !*** eq. 2.85 //(+digits) ghad = 280.460618375040 + 360.98564736628620 * d; //!*** corrn. (+digits) //**** normalize to 0-360 and convert to radians i = floor(ghad / 360.0); *ghar = (ghad - i * 360.0) / rad; while (*ghar > pi2) { *ghar = *ghar - pi2; } while (*ghar < 0.0) { *ghar = *ghar + pi2; } return (1); } double gps2utc(double tsec) { //*** convert tsec in GPS to tsec in UTC //*** GPS is ahead of UTC (c.f. USNO) //*** UTC is behind GPS //*** gpsleap() is (so far) positive (and increasing) //*** so, must subtract gpsleap from GPS to get UTC double gps2utc_return; gps2utc_return = tsec - gpsleap(tsec); return (gps2utc_return); } double gpsleap(double tsec) { //*** return total leap seconds since GPS epoch 1980jan06 //*** note: does **NOT** return the full TAI-UTC delta //*** input time is GPS seconds -- initialized by setjd0() //*** Y2K -- only functional between 1980jan06-00:00:00 (GPS time start) //*** and hard-coded date // implicit double precision(a-h,o-z) //***** "Julian Date Converter" //***** http://aa.usno.navy.mil/data/docs/JulianDate.php //***** "Bulletin C" //***** http://hpiers.obspm.fr/eoppc/bul/bulc/bulletinc.dat //***** parameter(mjdhard=55196) !*** cut-off date 2009dec31 //***** parameter(mjdhard=55377) !*** cut-off date 2010jun30 //***** parameter(mjdhard=55561) !*** cut-off date 2010dec31 //***** parameter(mjdhard=55742) !*** cut-off date 2011jun30 //***** parameter(mjdhard=55926) !*** cut-off date 2011dec31 //***** parameter(mjdhard=56108) !*** cut-off date 2012jun30 //***** parameter(mjdhard=56292) !*** cut-off date 2012dec31 //***** parameter(mjdhard=56473) !*** cut-off date 2013jun30 //***** parameter(mjdhard=56657) !*** cut-off date 2013dec31 //***** parameter(mjdhard=56838) !*** cut-off date 2014jun30 //***** parameter(mjdhard=57022) !*** cut-off date 2014dec31 //***** parameter(mjdhard=57203) !*** cut-off date 2015jun30 //***** parameter(mjdhard=57387) !*** cut-off date 2015dec31 //***** parameter(mjdhard=57569) !*** cut-off date 2016jun30 //***** parameter(mjdhard=57753) !*** cut-off date 2016dec31 //***** parameter(mjdhard=57934) !*** cut-off date 2017jun30 //***** parameter(mjdhard=58118) !*** cut-off date 2017dec31 // parameter(mjdhard=58299) !*** cut-off date 2018jun30 double mjdhard = 58664.0; double ttsec, mjd0t, tai_utc, gpsleap_return; // save /mjdoff/ // common/mjdoff/mjd0 //*** clone for tests (and do any rollover) ttsec = tsec; mjd0t = mjd0; while (ttsec >= 86400.0) { ttsec = ttsec - 86400.0; mjd0t = mjd0t + 1; } while (ttsec < 0.0) { ttsec = ttsec + 86400.0; mjd0t = mjd0t - 1; } //*** test date limits if (mjd0t > mjdhard) { fprintf(stderr, "FATAL ERROR --\n"); fprintf(stderr, "exceeded cut-off date in gpsleap()\n"); die("", ""); } if (mjd0t < 44244.0) { // then !*** 1980jan06 die("FATAL ERROR --\n", "cut-off date underflow in gpsleap()\n"); } //*** http://maia.usno.navy.mil/ser7/tai-utc.dat //*** 1980 JAN 1 =JD 2444239.5 TAI-UTC= 19.0s //*** 1981 JUL 1 =JD 2444786.5 TAI-UTC= 20.0s //*** 1982 JUL 1 =JD 2445151.5 TAI-UTC= 21.0s //*** 1983 JUL 1 =JD 2445516.5 TAI-UTC= 22.0s //*** 1985 JUL 1 =JD 2446247.5 TAI-UTC= 23.0s //*** 1988 JAN 1 =JD 2447161.5 TAI-UTC= 24.0s //*** 1990 JAN 1 =JD 2447892.5 TAI-UTC= 25.0s //*** 1991 JAN 1 =JD 2448257.5 TAI-UTC= 26.0s //*** 1992 JUL 1 =JD 2448804.5 TAI-UTC= 27.0s //*** 1993 JUL 1 =JD 2449169.5 TAI-UTC= 28.0s //*** 1994 JUL 1 =JD 2449534.5 TAI-UTC= 29.0s //*** 1996 JAN 1 =JD 2450083.5 TAI-UTC= 30.0s //*** 1997 JUL 1 =JD 2450630.5 TAI-UTC= 31.0s //*** 1999 JAN 1 =JD 2451179.5 TAI-UTC= 32.0s //*** 2006 JAN 1 =JD 2453736.5 TAI-UTC= 33.0s //*** 2009 JAN 1 =JD 2454832.5 TAI-UTC= 34.0s //*** 2012 JUL 1 =JD 2456109.5 TAI-UTC= 35.0s //*** 2015 JUL 1 =JD 2457204.5 TAI-UTC= 36.0s //*** 2017 JAN 1 =JD 2457754.5 TAI-UTC= 37.0s //*** test against newest leaps first tai_utc = 0.0; if (mjd0t >= 57754) { // then !*** 2017 JAN 1 = 57754 tai_utc = 37.0; } else if (mjd0t >= 57204) { // then !*** 2015 JUL 1 = 57204 tai_utc = 36.0; } else if (mjd0t >= 56109) { // then !*** 2012 JUL 1 = 56109 tai_utc = 35.0; } else if (mjd0t >= 54832) { // then !*** 2009 JAN 1 = 54832 tai_utc = 34.0; } else if (mjd0t >= 53736) { // then !*** 2006 JAN 1 = 53736 tai_utc = 33.0; } else if (mjd0t >= 51179) { // then !*** 1999 JAN 1 = 51179 tai_utc = 32.0; } else if (mjd0t >= 50630) { // then !*** 1997 JUL 1 = 50630 tai_utc = 31.0; } else if (mjd0t >= 50083) { // then !*** 1996 JAN 1 = 50083 tai_utc = 30.0; } else if (mjd0t >= 49534) { // then !*** 1994 JUL 1 = 49534 tai_utc = 29.0; } else if (mjd0t >= 49169) { // then !*** 1993 JUL 1 = 49169 tai_utc = 28.0; } else if (mjd0t >= 48804) { // then !*** 1992 JUL 1 = 48804 tai_utc = 27.0; } else if (mjd0t >= 48257) { // then !*** 1991 JAN 1 = 48257 tai_utc = 26.0; } else if (mjd0t >= 47892) { // then !*** 1990 JAN 1 = 47892 tai_utc = 25.0; } else if (mjd0t >= 47161) { // then !*** 1988 JAN 1 = 47161 tai_utc = 24.0; } else if (mjd0t >= 46247) { // then !*** 1985 JUL 1 = 46247 tai_utc = 23.0; } else if (mjd0t >= 45516) { // then !*** 1983 JUL 1 = 45516 tai_utc = 22.0; } else if (mjd0t >= 45151) { // then !*** 1982 JUL 1 = 45151 tai_utc = 21.0; } else if (mjd0t >= 44786) { // then !*** 1981 JUL 1 = 44786 tai_utc = 20.0; } else if (mjd0t >= 44239) { // then !*** 1980 JAN 1 = 44239 tai_utc = 19.0; } //*** should never get here else { die("FATAL ERROR --\n", "fell thru tests in gpsleap()\n"); } //*** convert TAI-UTC into GPS leap seconds gpsleap_return = tai_utc - 19.0; return (gpsleap_return); } int civmjd(double iyr, double imo, double idy, double ihr, double imn, double sec, double *mjd, double *fmjd) { //*** convert civil date to modified julian date //*** only valid in range mar-1900 thru feb-2100 (leap year protocols) //*** ref: hofmann-wellenhof, 2nd ed., pg 34-35 //*** operation confirmed against table 3.3 values on pg.34 double m, it1, it2; int y; if (iyr < 1900) die("year should not be smaller than 1900", ""); // stop 34588 if (imo <= 2) { y = iyr - 1.0; m = imo + 12.0; } else { y = iyr; m = imo; } it1 = floor(365.25 * y); it2 = floor(30.6001 * (m + 1.0)); *mjd = it1 + it2 + idy - 679019.0; *fmjd = (3600.0 * ihr + 60.0 * imn + sec) / 86400.0; return (1); } int mjdciv(double mjd, double fmjd, double *iyr, double *imo, double *idy, double *ihr, double *imn, double *sec) { //*** convert modified julian date to civil date //*** imo in range 1-12, idy in range 1-31 //*** only valid in range mar-1900 thru feb-2100 //*** ref: hofmann-wellenhof, 2nd ed., pg 34-35 //*** operation confirmed for leap years (incl. year 2000) double rjd, ia, ib, ic, id, ie, it1, it2, it3, tmp; rjd = mjd + fmjd + 2400000.5; ia = floor(rjd + 0.5); ib = floor(ia + 1537.0); ic = floor((ib - 122.1) / 365.25); id = floor(365.25 * ic); ie = floor((ib - id) / 30.6001); //*** the fractional part of a julian day is fractional mjd + 0.5 //*** therefore, fractional part of julian day + 0.5 is fractional mjd it1 = floor(ie * 30.6001); *idy = floor(ib - id - it1 + fmjd); it2 = floor(ie / 14.0); *imo = ie - 1.0 - 12 * it2; it3 = floor((7.0 + *imo) / 10.0); *iyr = ic - 4715.0 - it3; tmp = fmjd * 24.0; *ihr = floor(tmp); tmp = (tmp - *ihr) * 60.0; *imn = floor(tmp); *sec = (tmp - *imn) * 60.0; return (1); } int geo2xyz(double gla, double glo, double eht, double *x, double *y, double *z) { // convert geodetic lat, long, ellip ht. to x,y,z double sla, cla, w, w2, en; sla = sin(gla); cla = cos(gla); w2 = 1.0 - e2 * sla * sla; w = sqrt(w2); en = a / w; *x = (en + eht) * cla * cos(glo); *y = (en + eht) * cla * sin(glo); *z = (en * (1.0 - e2) + eht) * sla; return (1); } /* below are functions by Kang Wang */ int isleapyr(int yr) { if ((yr % 4) != 0) { return 0; } else if ((yr % 100) != 0) { return 1; } else if ((yr % 400) != 0) { return 0; } else { return 1; } } int day2date(double year, double day, double *mon, double *id) { int yr, iday; int leapyr; // char tmp_str[200]; int month = 0, day_of_month = 0; int day_of_yr[13]; // char month_str[10]; // char yr_str[10],yr_short[10]; // char date_str[10]; // char str_out[10]; yr = (int)year; iday = (int)ceil(day); // printf("yr = %d, day_of_yr = %d\n",yr,iday); leapyr = isleapyr(yr); if (leapyr == 1) { day_of_yr[0] = 0; day_of_yr[1] = 31; day_of_yr[2] = 60; day_of_yr[3] = 91; day_of_yr[4] = 121; day_of_yr[5] = 152; day_of_yr[6] = 182; day_of_yr[7] = 213; day_of_yr[8] = 244; day_of_yr[9] = 274; day_of_yr[10] = 305; day_of_yr[11] = 335; day_of_yr[12] = 366; } else { day_of_yr[0] = 0; day_of_yr[1] = 31; day_of_yr[2] = 59; day_of_yr[3] = 90; day_of_yr[4] = 120; day_of_yr[5] = 151; day_of_yr[6] = 181; day_of_yr[7] = 212; day_of_yr[8] = 243; day_of_yr[9] = 273; day_of_yr[10] = 304; day_of_yr[11] = 334; day_of_yr[12] = 365; } if (iday > day_of_yr[0] && iday <= day_of_yr[1]) { month = 1; day_of_month = iday; } else if (iday > day_of_yr[1] && iday <= day_of_yr[2]) { month = 2; day_of_month = iday - day_of_yr[1]; } else if (iday > day_of_yr[2] && iday <= day_of_yr[3]) { month = 3; day_of_month = iday - day_of_yr[2]; } else if (iday > day_of_yr[3] && iday <= day_of_yr[4]) { month = 4; day_of_month = iday - day_of_yr[3]; } else if (iday > day_of_yr[4] && iday <= day_of_yr[5]) { month = 5; day_of_month = iday - day_of_yr[4]; } else if (iday > day_of_yr[5] && iday <= day_of_yr[6]) { month = 6; day_of_month = iday - day_of_yr[5]; } else if (iday > day_of_yr[6] && iday <= day_of_yr[7]) { month = 7; day_of_month = iday - day_of_yr[6]; } else if (iday > day_of_yr[7] && iday <= day_of_yr[8]) { month = 8; day_of_month = iday - day_of_yr[7]; } else if (iday > day_of_yr[8] && iday <= day_of_yr[9]) { month = 9; day_of_month = iday - day_of_yr[8]; } else if (iday > day_of_yr[9] && iday <= day_of_yr[10]) { month = 10; day_of_month = iday - day_of_yr[9]; } else if (iday > day_of_yr[10] && iday <= day_of_yr[11]) { month = 11; day_of_month = iday - day_of_yr[10]; } else if (iday > day_of_yr[11] && iday <= day_of_yr[12]) { month = 12; day_of_month = iday - day_of_yr[11]; } // sprintf(yr_str,"%d",yr); // memset(yr_short, '\0', sizeof(yr_short)); // yr_str[4]='\0'; // strcpy(yr_str,yr); // sprintf(month_str,"%02d",month); // sprintf(date_str,"%02d",day_of_month); // strncpy(yr_short,yr_str+2,2); // strcat(str_out,yr_short); // strcat(str_out,yr_str); // strcat(str_out,month_str); // strcat(str_out,month_str); // strcat(str_out,date_str); // fprintf(stdout,"%s\n",str_out); // printf("%04d%02d%02d\n",yr,month,day_of_month); *mon = month; *id = day_of_month; return (1); } GMTSAR_V5.7/.svn/pristine/9e/9e8b7e42e43fc9e4ec98a24a6164ad8b3df7b609.svn-base000444 015705 000000 00000044404 13505462014 026071 0ustar00sandwellwheel000000 000000 /******************************************************************************* * Compute the interferometric baseline between reference and repeat * * images. Also estimates the crude offset for image matching. * *******************************************************************************/ /******************************************************************************** * Creator: David T. Sandwell and Rob Mellors * (San Diego State University, *Scripps Institution of Oceanography) * Date : 06/07/2007 * ********************************************************************************/ /******************************************************************************** * Modification history: * Date: * add fs0, read fs from PRM and check * consistence, M.Wei, 5/2/08 * * * estimate accurately the offset for image matching. * 1. find the geographic coordinate of a point in the middle range of the first * line of the radar image. * 2. use ALOS_llt2rat to project it into radar coordinate for both reference * and repeat pass. The difference between them would be the offset. * *****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" char *USAGE = "Usage: (two modes)\n" "mode 1:\n\n" "ALOS_baseline PRM_master PRM_slave\n\n" "PRM_master PRM file for reference image\n" "PRM_slave PRM file of secondary image\n" "(writes out parameters for appending to PRM file)\n" "\nor mode 2:\n\n" "ALOS_baseline -input file\n\n" "file: list of PRM files\n" "first file is assumed to be master\n" "following are slaves\n" "(writes out decimal year, Bperp, and PRM name)\n"; /* function prototypes */ double find_distance(double, double, double, double, double, double); double find_alpha_degrees(double, double); void find_unit_vectors(double, double, double, double *, double *, double *, double *); void endpoint_distance(int, double, double, double, double, double *, double *, double *, double *, int *); void find_parallel_perp_baseline(struct PRM, struct PRM, double, double *, double *); void write_prm_baseline(struct PRM); void get_sign(struct PRM, double, double, double, double, int *); void write_bperp(struct PRM, char *); void parse_command_line(char **, int *, int *); void read_input_file(char *, int, char **); void ALOS_baseline(struct PRM *, struct ALOS_ORB *, int, int, char **, double); void read_all_ALOS_ldr(struct PRM *, struct ALOS_ORB *, int); void ALOS_llt2rat_sub(char *, double *, double *); int main(int argc, char **argv) { int i; int input_flag, nfiles; double fs0 = 0.0; struct PRM *r; /* reference orbit is 0; repeats are > 0*/ struct ALOS_ORB *orb; /* reference orbit is 0; repeats are > 0*/ char **filename; FILE *prmfile; if (argc < 3) die(USAGE, ""); verbose = 0; input_flag = 0; /* read command line */ parse_command_line(argv, &nfiles, &input_flag); filename = malloc(nfiles * sizeof(char *)); for (i = 0; i < nfiles; i++) filename[i] = malloc(128 * sizeof(char)); r = malloc(nfiles * sizeof(struct PRM)); if (input_flag == 1) read_input_file(argv[2], nfiles, filename); for (i = 0; i < nfiles; i++) { if (input_flag == 0) strcpy(filename[i], argv[i + 1]); if ((prmfile = fopen(filename[i], "r")) == NULL) die("Can't open prmfile ", filename[i]); get_sio_struct(prmfile, &r[i]); /* check whether range sampling rate is same. If not, warning */ if (i == 0) fs0 = r[0].fs; if (r[i].fs != fs0) { fprintf(stderr, "\nWARNING:\nRange_sampling_rate is not consistant.\nYou " "need to do FBD/FBS conversion.\n\n"); } fclose(prmfile); } switch (r[0].SC_identity) { case ALOS: fprintf(stderr, "...satellite: ALOS\n"); orb = malloc(nfiles * sizeof(struct ALOS_ORB)); read_all_ALOS_ldr(r, orb, nfiles); ALOS_baseline(r, orb, nfiles, input_flag, filename, fs0); break; default: fprintf(stderr, "Arghhh...unrecognized satellite\n"); } return (EXIT_SUCCESS); } /*---------------------------------------------------------------------------*/ void read_all_ALOS_ldr(struct PRM *r, struct ALOS_ORB *orb, int nfiles) { int i; FILE *ldrfile; for (i = 0; i < nfiles; i++) { if (i == 0) fprintf(stderr, "......master LED file %s \n", r[0].led_file); if (i != 0) fprintf(stderr, ".........slave LED file %s \n", r[i].led_file); /* open each ldrfile and read into structure r */ if ((ldrfile = fopen(r[i].led_file, "r")) == NULL) die("Can't open ldrfile %s", r[i].led_file); read_ALOS_sarleader(ldrfile, &r[i], &orb[i]); /* print out orb info, mwei fprintf(stderr,"%d %d %d %d %lf %lf\n", orb[i].itype,orb[i].nd,orb[i].iy,orb[i].id,orb[i].sec,orb[i].dsec); fprintf(stderr,"%lf %lf %lf\n", orb[i].points[0].pt,orb[i].points[0].px,orb[i].points[0].vx); fprintf(stderr,"%lf %lf %lf\n", orb[i].points[1].pt,orb[i].points[1].px,orb[i].points[1].vx); */ fclose(ldrfile); } } /*---------------------------------------------------------------------------*/ void ALOS_baseline(struct PRM *r, struct ALOS_ORB *orb, int nfiles, int input_flag, char **filename, double fs0) { int ii, nd, ir; int k, ns, ns2, m1, m2, m3, sign1, sign2, sign3; double dr, dt; double ds1, ds2, ds3; double bv1, bv2, bv3, bh1, bh2, bh3; double t11, t12, t21, t22, t23; double x11, y11, z11, x12, y12, z12, x13, y13, z13; double x21, y21, z21, x22, y22, z22, x23, y23, z23; double ru1, ru2, ru3, xu1, yu1, zu1, xu2, yu2, zu2, xu3, yu3, zu3; double ts, xs, ys, zs; /* double rr1, rr2; */ /* near range from reference and repeat orbits */ double b1, b2, b3, bpara, bperp; double *pt, *p, *pv, pt0; double height, re_c, vg, vtot, rdot; double radar_look[3] = {0, 0, 0}; double re, rho, b, theta; double t_vel, t_sta, x_vel, x_sta, y_vel, y_sta, z_vel, z_sta, ru33, xu33, yu33, zu33, o1x[3], o1y[3], o1z[3], ru4, xu4, yu4, zu4; /* int i; */ double glob_look[3], target[3], target_llt[3], fll; double target_rat_ref[3] = {0, 0, 0}; double target_rat_rep[3] = {0, 0, 0}; double far_range; /* reference orbit */ get_seconds(r[0], &t11, &t12); // t13 = (t11 + t12)/2.; dr = 0.5 * SOL / fs0; dt = 0.2 / r[0].prf; // rr1 = r[0].near_range; ns = (int)((t12 - t11) / dt); /* seconds of frame */ dt = (t12 - t11) / (ns - 1); ns2 = ns * 2; nd = orb[0].nd; pt = malloc(nd * sizeof(double)); p = malloc(nd * sizeof(double)); pv = malloc(nd * sizeof(double)); for (ii = 1; ii < nfiles; ii++) { get_seconds(r[ii], &t21, &t22); t23 = (t21 + t22) / 2.; // rr2 = r[ii].near_range; pt0 = (24.0 * 60.0 * 60.0) * orb[ii].id + orb[ii].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[ii].dsec; verbose = 0; /* interpolate_ALOS_orbit assumes p, pt, and pv ate allocated and pt * assigned */ interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t21, &x21, &y21, &z21, &ir); /* look at other orbit information and recalculate the height using the * ashift */ calc_height_velocity(&orb[ii], &r[ii], t22, t22, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_end = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t23, t23, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht = height + re_c - r[ii].RE; calc_height_velocity(&orb[ii], &r[ii], t21, t21, &height, &re_c, &vg, &vtot, &rdot); r[ii].ht_start = height + re_c - r[ii].RE; // fd_orbit = -2.0*rdot/r[ii].lambda; interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t22, &x22, &y22, &z22, &ir); interpolate_ALOS_orbit(&orb[ii], pt, p, pv, t23, &x23, &y23, &z23, &ir); /* loop over reference orbit */ /* add 2 scene lengths (ns2) for buffer at each end */ b1 = b2 = b3 = -1.0; pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; /* set some defeault values */ m1 = -99999; x11 = y11 = z11 = -99999.0; x12 = y12 = z12 = -99999.0; x13 = y13 = z13 = -99999.0; for (k = -ns2; k < ns + ns2; k++) { ts = t11 + k * dt; interpolate_ALOS_orbit(&orb[0], pt, p, pv, ts, &xs, &ys, &zs, &ir); ds1 = find_distance(xs, ys, zs, x21, y21, z21); if (b1 < 0.0 || ds1 < b1) endpoint_distance(k, ds1, xs, ys, zs, &b1, &x11, &y11, &z11, &m1); ds2 = find_distance(xs, ys, zs, x22, y22, z22); if (b2 < 0.0 || ds2 < b2) endpoint_distance(k, ds2, xs, ys, zs, &b2, &x12, &y12, &z12, &m2); ds3 = find_distance(xs, ys, zs, x23, y23, z23); if (b3 < 0.0 || ds3 < b3) endpoint_distance(k, ds3, xs, ys, zs, &b3, &x13, &y13, &z13, &m3); // fprintf(stderr,"%f %f %f %f\n",ts,ds1,ds2,ds3); } /* compute more orbital information at the min baseline based on m1 */ ts = t11 + m1 * dt; calc_height_velocity(&orb[0], &r[0], ts, ts, &height, &re_c, &vg, &vtot, &rdot); // fd_orbit = -2.0*rdot/r[0].lambda; /* shouldn't happen .. */ if (x11 == -99999.0) die("x11 not initialized", ""); if (x12 == -99999.0) die("x12 not initialized", ""); if (x13 == -99999.0) die("x13 not initialized", ""); if (m1 == -99999) die("m1 not initialized", ""); /* put in structure */ r[ii].baseline_start = b1; r[ii].baseline_end = b2; r[ii].baseline_center = b3; if (b1 == 0. && b2 == 0.) r[ii].baseline_center = 0.; /* compute unit vectors */ find_unit_vectors(x11, y11, z11, &ru1, &xu1, &yu1, &zu1); find_unit_vectors(x12, y12, z12, &ru2, &xu2, &yu2, &zu2); find_unit_vectors(x13, y13, z13, &ru3, &xu3, &yu3, &zu3); /* compute sign of horizontal baseline */ get_sign(r[ii], x11, y11, x21, y21, &sign1); get_sign(r[ii], x12, y12, x22, y22, &sign2); get_sign(r[ii], x13, y13, x23, y23, &sign3); /* compute baseline components (horizontal and vertical) */ bv1 = (x21 - x11) * xu1 + (y21 - y11) * yu1 + (z21 - z11) * zu1; bh1 = sign1 * sqrt(b1 * b1 - bv1 * bv1); bv2 = (x22 - x12) * xu2 + (y22 - y12) * yu2 + (z22 - z12) * zu2; bh2 = sign2 * sqrt(b2 * b2 - bv2 * bv2); bv3 = (x23 - x13) * xu3 + (y23 - y13) * yu3 + (z23 - z13) * zu3; bh3 = sign3 * sqrt(b3 * b3 - bv3 * bv3); /* angle from horizontal */ r[ii].alpha_start = find_alpha_degrees(bv1, bh1); r[ii].alpha_end = find_alpha_degrees(bv2, bh2); r[ii].alpha_center = find_alpha_degrees(bv3, bh3); /* calculate parallel baseline */ find_parallel_perp_baseline(r[0], r[ii], dr, &bpara, &bperp); r[ii].bpara = bpara; r[ii].bperp = bperp; /* find expected offset in pixels (rshift and yshift) */ /* r[ii].ashift = -1*m1; r[ii].rshift = -1*(int) (r[ii].bpara/dr + (rr2 - rr1)/dr); */ /* a more accurate way to estimate offset in pixels */ /* since t11 point is out of scene, I need add a fraction of orbit time to * it */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_sta = t11 + 2.0; interpolate_ALOS_orbit(&orb[0], pt, p, pv, t_sta, &x_sta, &y_sta, &z_sta, &ir); re = r[0].RE; far_range = r[0].near_range + dr * r[0].num_rng_bins; rho = (r[0].near_range + far_range) / 2.0; b = r[0].ht + r[0].RE; theta = acos((b * b + rho * rho - re * re) / 2 / b / rho); /* find a unit look vector point to middle range of first line of the scene */ /* in radar coordinate */ radar_look[0] = 0; radar_look[1] = cos(theta); radar_look[2] = -sin(theta); if (strncmp(r[0].lookdir, "L", 1) == 0) radar_look[2] = sin(theta); /* form a rotation matrix to convert the look vector from radar coordinate to global cartesian coordinate */ find_unit_vectors(x_sta, y_sta, z_sta, &ru33, &xu33, &yu33, &zu33); o1y[0] = -xu33; o1y[1] = -yu33; o1y[2] = -zu33; /* get the velocity of the satellite */ pt0 = (24.0 * 60.0 * 60.0) * orb[0].id + orb[0].sec; for (k = 0; k < nd; k++) pt[k] = pt0 + k * orb[0].dsec; t_vel = t11 + 2.1; interpolate_ALOS_orbit(&orb[0], pt, p, pv, t_vel, &x_vel, &y_vel, &z_vel, &ir); find_unit_vectors(x_vel - x_sta, y_vel - y_sta, z_vel - z_sta, &ru4, &xu4, &yu4, &zu4); o1x[0] = xu4; o1x[1] = yu4; o1x[2] = zu4; cross3_(o1x, o1y, o1z); /* look vector in global cartesian cooridate is */ glob_look[0] = radar_look[0] * o1x[0] + radar_look[1] * o1y[0] + radar_look[2] * o1z[0]; glob_look[1] = radar_look[0] * o1x[1] + radar_look[1] * o1y[1] + radar_look[2] * o1z[1]; glob_look[2] = radar_look[0] * o1x[2] + radar_look[1] * o1y[2] + radar_look[2] * o1z[2]; /* shoot the vector on the ground and get the tie point */ target[0] = x_sta + glob_look[0] * rho; target[1] = y_sta + glob_look[1] * rho; target[2] = z_sta + glob_look[2] * rho; fll = (r[0].ra - r[0].rc) / r[0].ra; xyz2plh(target, target_llt, r[0].ra, fll); fprintf(stderr, "lon_tie_point = %f\n", target_llt[1]); fprintf(stderr, "lat_tie_point = %f\n", target_llt[0]); ALOS_llt2rat_sub(filename[0], target_llt, target_rat_ref); ALOS_llt2rat_sub(filename[ii], target_llt, target_rat_rep); /* find expected offset in pixels (rshift and yshift) */ r[ii].ashift = target_rat_rep[1] - target_rat_ref[1]; r[ii].rshift = target_rat_rep[0] - target_rat_ref[0]; /* write out prm format */ if (input_flag == 0) write_prm_baseline(r[ii]); /* write out in x,y format bperp baseline only */ if (input_flag == 1) write_bperp(r[ii], filename[ii]); } } /*---------------------------------------------------------------------------*/ void read_input_file(char *inputfilename, int nfiles, char **filename) { int i; FILE *inputfile; if ((inputfile = fopen(inputfilename, "r")) == NULL) die("Can't open ", inputfilename); for (i = 0; i < nfiles; i++) fscanf(inputfile, " %s ", filename[i]); fclose(inputfile); } /*---------------------------------------------------------------------------*/ void parse_command_line(char **argv, int *nfiles, int *input_flag) { char tmp[132]; FILE *inputfile; *nfiles = 0; if (strncmp(argv[1], "-input", 6) != 0) { fprintf(stderr, "using command line\n"); *nfiles = 2; } else { fprintf(stderr, "using input file \n"); *input_flag = 1; if ((inputfile = fopen(argv[2], "r")) == NULL) die("Can't open ", argv[2]); /* count the number of files in inputfile */ while (fscanf(inputfile, " %s ", tmp) != EOF) (*nfiles)++; fclose(inputfile); } } /*---------------------------------------------------------------------------*/ void write_bperp(struct PRM r1, char *string) { FILE *GMTscript; float year, dyear; GMTscript = fopen("GMTscript", "w"); year = floor(r1.SC_clock_start / 1000.0); dyear = (r1.SC_clock_start - 1000.0 * year) / 365.0; year = year + dyear; /* write date, baseline */ fprintf(stdout, " %f %f %s\n", year, r1.bperp, string); /* fprintf(GMTscript,"psxy Bperp.dat -R%f/%f/%f/%f -JX8 -P > Bperp.ps\n"); */ fclose(GMTscript); } /*---------------------------------------------------------------------------*/ void get_sign(struct PRM r, double x11, double y11, double x21, double y21, int *sign) { double rlnref, rlnrep; rlnref = atan2(y11, x11); rlnrep = atan2(y21, x21); *sign = 1.0; if (strncmp(r.orbdir, "D", 1) == 0) *sign = -1 * (*sign); if (strncmp(r.lookdir, "L", 1) == 0) *sign = -1 * (*sign); if (rlnrep < rlnref) *sign = -1 * (*sign); } /*---------------------------------------------------------------------------*/ void write_prm_baseline(struct PRM rep) { printf("SC_vel = %f \n", rep.vel); printf("SC_height = %f \n", rep.ht); printf("SC_height_start = %f \n", rep.ht_start); printf("SC_height_end = %f \n", rep.ht_end); printf("earth_radius = %f \n", rep.RE); printf("rshift = %d \n", rep.rshift); printf("sub_int_r = 0.0 \n"); printf("ashift = %d\n", rep.ashift); printf("sub_int_a = 0.0 \n"); printf("B_parallel = %f \n", rep.bpara); printf("B_perpendicular = %f \n", rep.bperp); printf("baseline_start = %f \n", rep.baseline_start); printf("baseline_center = %f \n", rep.baseline_center); printf("baseline_end = %f \n", rep.baseline_end); printf("alpha_start = %f \n", rep.alpha_start); printf("alpha_center = %f \n", rep.alpha_center); printf("alpha_end = %f \n", rep.alpha_end); } /*---------------------------------------------------------------------------*/ void find_parallel_perp_baseline(struct PRM ref, struct PRM rep, double dr, double *bpara, double *bperp) { double rc, ra, rad, rlook, far_range, arg1, arg2; rad = M_PI / 180.0; /* this is not ellipsoid axis */ /* use reference ?? */ rc = ref.RE + ref.ht; ra = ref.RE; far_range = rep.near_range + dr * rep.num_rng_bins; /* calculate the look angle 1/2 way between the near and far range */ arg1 = (rep.near_range * rep.near_range + rc * rc - ra * ra) / (2. * rep.near_range * rc); arg2 = (far_range * far_range + rc * rc - ra * ra) / (2. * far_range * rc); rlook = acos((arg1 + arg2) / 2.0); /* add the incidence angle correction to get the incidence angle */ arg1 = (-rep.near_range * rep.near_range + rc * rc + ra * ra) / (2. * ra * rc); arg2 = (-far_range * far_range + rc * rc + ra * ra) / (2. * ra * rc); rlook = rlook + acos((arg1 + arg2) / 2.0); *bpara = rep.baseline_start * sin(rlook - rep.alpha_start * rad); *bperp = rep.baseline_start * cos(rlook - rep.alpha_start * rad); } /*---------------------------------------------------------------------------*/ double find_alpha_degrees(double bv, double bh) { double a, rad; rad = M_PI / 180.0; a = atan2(bv, bh); a = a / rad; return (a); } /*---------------------------------------------------------------------------*/ double find_distance(double xs, double ys, double zs, double x, double y, double z) { double ds; double dx, dy, dz; dx = xs - x; dy = ys - y; dz = zs - z; ds = sqrt(dx * dx + dy * dy + dz * dz); return (ds); } /*---------------------------------------------------------------------------*/ void endpoint_distance(int k, double ds, double xs, double ys, double zs, double *b, double *x, double *y, double *z, int *m) { *b = ds; *x = xs; *y = ys; *z = zs; *m = k; } /*---------------------------------------------------------------------------*/ void find_unit_vectors(double x, double y, double z, double *ru, double *xu, double *yu, double *zu) { *ru = sqrt(x * x + y * y + z * z); *xu = x / (*ru); *yu = y / (*ru); *zu = z / (*ru); } /*---------------------------------------------------------------------------*/ GMTSAR_V5.7/.svn/pristine/9e/9eb3a064b383587ace07c4d03151f2822929281f.svn-base000444 015705 000000 00000000520 13505462014 025371 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = read_data_file_ccrs CSRCS = read_data_file_ccrs.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include LIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(LIBS) all: $(PROG) clean: rm -f $(OBJS) tags core *.c.* install: $(INSTALL) $(PROG) $(bindir)/$(PROG) uninstall: rm -f $(bindir)/$(PROG) GMTSAR_V5.7/.svn/pristine/9e/9ef3e48229407da170402dc824fe2bf1c388e46b.svn-base000444 015705 000000 00000034146 13505462013 025630 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaohua Xu, Jan, 2018 # # Preprocess the data to Raw or SLC or aligned SLC depending on which satellite to use # alias rm 'rm -f' unset noclobber # # check the number of arguments # if (!($#argv == 3 || $#argv == 5 || $#argv == 7 || $#argv == 9 || $#argv == 11)) then echo "" echo "Usage: pre_proc.csh SAT master_stem slave_stem [-near near_range] [-radius RE] [-npatch num_patches] [-fd1 DOPP]" echo "" echo "Example: pre_proc.csh ALOS IMG-HH-ALPSRP099496420-H1.0__A IMG-HH-ALPSRP220276420-H1.0__A" echo "" exit 1 endif # # parse the command line arguments # echo "pre_proc.csh" set SAT = $1 echo "0" $argv[4-$#argv] | awk '{for (i=1;i<=12;i++) print $i}' > tmp set a = `grep near tmp -n | awk -F: '{print $1}'` set NEAR = `awk 'NR=='$a'+1{print $1}' tmp` set a = `grep near tmp -n | awk -F: '{print $1}'` set RAD = `awk 'NR=='$a'+1{print $1}' tmp` set a = `grep npatch tmp -n | awk -F: '{print $1}'` set num_patches = `awk 'NR=='$a'+1{print $1}' tmp` set a = `grep fd1 tmp -n | awk -F: '{print $1}'` set FD1 = `awk 'NR=='$a'+1{print $1}' tmp` rm tmp set master = `echo $2` set slave = `echo $3` set commandline = `echo $argv[4-$#argv]` if ($SAT == "ALOS") then echo "" echo "Pre-Process ALOS data - START" echo "" set master = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` set slave = ` echo $3 | awk '{ print substr($1,8,length($1)-7)}'` if (! -f IMG-HH-$master || ! -f IMG-HH-$slave || ! -f LED-$master || ! -f LED-$slave) then echo "" echo "$master $slave" echo "Error : Can not find input file at current directory!" echo "" exit 1 endif # # unpack the master if necessary # if (! -f IMG-HH-$master.raw || ! -f IMG-HH-$master.PRM ) then echo "pre_process master image" ALOS_pre_process IMG-HH-$master LED-$master $argv[4-$#argv] endif set NEAR = `grep near_range IMG-HH-$master.PRM | awk '{print $3}'` set RAD = `grep earth_radius IMG-HH-$master.PRM | awk '{print $3}'` set rng_samp_rate_m = `grep rng_samp_rate IMG-HH-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set FD1 = `grep fd1 IMG-HH-$master.PRM | awk '{print $3}'` set num_patches = `grep num_patches IMG-HH-$master.PRM | awk '{print $3}'` # # unpack the slave image using the same earth radius and near range as the master image # echo "pre_process slave image" ALOS_pre_process IMG-HH-$slave LED-$slave -fd1 $FD1 -near $NEAR -radius $RAD -npatch $num_patches -fd1 $FD1 # # check the range sampling rate of the slave images and do conversion if necessary # set rng_samp_rate_s = `grep rng_samp_rate IMG-HH-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs IMG-HH-$slave.PRM IMG-HH-$slave"_"FBS.PRM echo "Overwriting the old slave image" mv IMG-HH-$slave"_"FBS.PRM IMG-HH-$slave.PRM update_PRM IMG-HH-$slave.PRM input_file IMG-HH-$slave.raw mv IMG-HH-$slave"_"FBS.raw IMG-HH-$slave.raw echo "IMG-HH-$slave is converted to FBS mode" > ALOS_fbd2fbs_log else if ($t == 0.5) then echo "Use FBS mode image as master" ALOS_fbd2fbs IMG-HH-$master.PRM IMG-HH-$master"_"FBS.PRM echo "Overwriting the old master image" mv IMG-HH-$master"_"FBS.PRM IMG-HH-$master.PRM update_PRM IMG-HH-$master.PRM input_file IMG-HH-$master.raw mv IMG-HH-$master"_"FBS.raw IMG-HH-$master.raw echo "IMG-HH-$master is converted to FBS mode" > ALOS_fbd2fbs_log exit 1 else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif echo "" echo " Pre-Process ALOS data - END" echo "" else if ($SAT == "ERS") then echo "" echo " Pre-Process ERS data - START" echo "" # set 0 for master to use it's own value echo ERS_pre_process $master $NEAR $RAD $num_patches $FD1 set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` set FD1 = `grep fd1 $master.PRM | awk '{print $3}'` set num_patches = `grep num_patches $master.PRM | awk '{print $3}'` ERS_pre_process $slave $NEAR $RAD $num_patches $FD1 # # check patch number, if different, use the smaller one # set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` echo "Different number of patches: $pch1 $pch2" if ($pch1 != $pch2) then if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp echo "" echo " Pre-Process ERS data - END" echo "" else if ($SAT == "ENVI") then echo "" echo " Pre-Process ENVISAT data - START" echo "" ENVI_pre_process $master $NEAR $RAD $num_patches $FD1 set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` ENVI_pre_process $slave $NEAR $RAD $num_patches $FD1 # # check patch number, if different, use the smaller one # set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` echo "Different number of patches: $pch1 $pch2" if ($pch1 != $pch2) then if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp echo "" echo " Pre-Process ENVISAT data - END" echo "" else if ($SAT == "ENVI_SLC") then echo "" echo " Pre-Process ENVISAT SLC data - START" echo "" ENVI_SLC_pre_process $master $RAD set NEAR = `grep near_range $master.PRM | awk '{print $3}'` set RAD = `grep earth_radius $master.PRM | awk '{print $3}'` echo "ENVI_SLC_pre_process $slave $RAD " ENVI_SLC_pre_process $slave $RAD echo "" echo " Pre-Process ENVISAT SLC data - END" echo "" else if ($SAT == "ALOS_SLC" || $SAT == "ALOS2" || $SAT == "ALOS2_SCAN") then echo "" echo " Pre-Process ALOS SLC data - START" echo "" set master = ` echo $2 | awk '{ print substr($1,5,length($1)-4)}'` set slave = ` echo $3 | awk '{ print substr($1,5,length($1)-4)}'` set master_led = ` echo $2 | awk '{ print substr($1,8,length($1)-7)}'` set slave_led = ` echo $3 | awk '{ print substr($1,8,length($1)-7)}'` #echo $master $slave $master_led $slave_led if (! -f IMG-$master || ! -f IMG-$slave || ! -f LED-$master_led || ! -f LED-$slave_led) then echo "" echo "Error : Can not find input file at current directory!" echo "" exit 1 endif if ($SAT == "ALOS_SLC") then ALOS_pre_process_SLC IMG-$master LED-$master_led $commandline -ALOS1 ALOS_pre_process_SLC IMG-$slave LED-$slave_led $commandline -ALOS1 else ALOS_pre_process_SLC IMG-$master LED-$master_led $commandline ALOS_pre_process_SLC IMG-$slave LED-$slave_led $commandline endif # make FBD FBS conversion set rng_samp_rate_m = `grep rng_samp_rate IMG-$master.PRM | awk 'NR == 1 {printf("%d", $3)}'` set rng_samp_rate_s = `grep rng_samp_rate IMG-$slave.PRM | awk 'NR == 1 {printf("%d", $3)}'` set t = `echo $rng_samp_rate_m $rng_samp_rate_s | awk '{printf("%1.1f\n", $1/$2)}'` if ($t == 1.0) then echo "The range sampling rate for master and slave images are: "$rng_samp_rate_m else if ($t == 2.0) then echo "Convert the slave image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$slave.PRM IMG-$slave"_"FBS.PRM echo "Overwriting the old slave image" mv IMG-$slave"_"FBS.PRM IMG-$slave.PRM update_PRM IMG-$slave.PRM input_file IMG-$slave.SLC mv IMG-$slave"_"FBS.SLC IMG-$slave.SLC echo "IMG-HH-$slave is converted to FBS mode" > ALOS2_fbd2fbs_log else if ($t == 0.5) then echo "Convert the master image from FBD to FBS mode" ALOS_fbd2fbs_SLC IMG-$master.PRM IMG-$master"_"FBS.PRM echo "Overwriting the old master image" mv IMG-$master"_"FBS.PRM IMG-$master.PRM update_PRM IMG-$master.PRM input_file IMG-$master.SLC mv IMG-$master"_"FBS.SLC IMG-$master.SLC echo "IMG-HH-$master is converted to FBS mode" > ALOS2_fbd2fbs_log else echo "The range sampling rate for master and slave images are not convertable" exit 1 endif echo "" echo " Pre-Process ALOS SLC data - END" echo "" else if ($SAT == "CSK_RAW") then echo "" echo " Pre-Process CSK Raw data - START" echo "" make_raw_csk $master.h5 $master make_raw_csk $slave.h5 $slave # # calculate SC_vel and SC_height # mv $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $RAD $FD1 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # mv $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $RAD $FD1 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 # # check patch number, if different, use the smaller one # set pch1 = `grep patch $master.PRM | awk '{printf("%d ",$3)}'` set pch2 = `grep patch $slave.PRM | awk '{printf("%d ",$3)}'` echo "Different number of patches: $pch1 $pch2" if ($pch1 != $pch2) then if ($pch1 < $pch2) then update_PRM $slave.PRM num_patches $pch1 echo "Number of patches is set to $pch1" else update_PRM $master.PRM num_patches $pch2 echo "Number of patches is set to $pch2" endif endif # # set the Doppler to be the average of the two # grep fd1 $master.PRM | awk '{printf("%f ",$3)}' > temp grep fd1 $slave.PRM | awk '{printf("%f",$3)}' >> temp set fda = `cat temp | awk '{print( ($1 + $2)/2.)}'` echo " use average Doppler $fda " update_PRM $master.PRM fd1 $fda update_PRM $slave.PRM fd1 $fda rm -r temp echo "" echo " Pre-Process CSK Raw data - END" echo "" else if ($SAT == "CSK_SLC" || $SAT == "TSX" || $SAT == "S1_STRIP" || $SAT == "RS2") then echo "" echo " Pre-Process CSK/TSX/RS2/S1_STRIP SLC data - START" echo "" if ($SAT == "CSK_SLC") then make_slc_csk $master.h5 $master make_slc_csk $slave.h5 $slave else if ($SAT == "TSX") then make_slc_tsx $master.xml $master.cos $master make_slc_tsx $slave.xml $slave.cos $slave else if ($SAT == "RS2") then make_slc_rs2 $master.xml $master.tif $master make_slc_rs2 $slave.xml $slave.tif $slave mv $master.LED save-$master.LED extend_orbit save-$master.LED $master.LED 3 mv $slave.LED save-$slave.LED extend_orbit save-$slave.LED $slave.LED 3 else make_slc_s1a $master.xml $master.tiff $master mv $master.LED save-$master.LED extend_orbit save-$master.LED $master.LED 3 make_slc_s1a $slave.xml $slave.tiff $slave mv $slave.LED save-$slave.LED extend_orbit save-$slave.LED $slave.LED 3 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $RAD 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $RAD 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 echo "" echo " Pre-Process SLC data - END" echo "" else if ($SAT == "S1_TOPS") then echo "" echo " Pre-Process S1_TOPS data - START" echo "" if (! -f ../topo/dem.grd) then echo "missing file ../topo/dem.grd" exit 1 endif ln -s ../topo/dem.grd . set iono = "" if ($iono == "") set iono = `grep correct_iono config* | head -1 | awk '{print $3}'` if ($iono == "") set iono = `grep correct_iono ../config* | head -1 | awk '{print $3}'` if ($iono == "" || $iono == 0) then align_tops.csh $master $master.EOF $slave $slave.EOF dem.grd else echo "Running align TOPS script with BESD for ionospheric correction" align_tops_esd.csh $master $master.EOF $slave $slave.EOF dem.grd 2 endif echo "" echo " Pre-Process S1_TOPS data - END" echo "" endif # GMTSAR_V5.7/.svn/pristine/9e/9e945c46fd5523c9da931dda10664cb096935bfa.svn-base000444 015705 000000 00000003643 13505462013 025715 0ustar00sandwellwheel000000 000000 #!/bin/bash # $Id$ # Uninstall GMTSAR installation (share and executables) # printf "gmtsar_uninstall.sh will uninstall the GMTSAR executables and share directory\n" >&2 printf "You may need sudo privileges on this computer.\n\nContinue? (y/n) [y]:" >&2 read answer if [ "X$answer" = "Xn" ]; then exit 0 fi here=`pwd` sharedir=`gmtsar_sharedir.csh` bin=`which gmtsar_sharedir.csh` dir=`dirname $bin` modules="ALOS_fbd2fbs ALOS_fbd2fbs_SLC ALOS_fbd2ss ALOS_look ALOS_merge \ ALOS_pre_process ALOS_pre_process_SLC ALOS_pre_process_SS ENVI_baseline ENVI_llt2rat ENVI_look \ ENVI_pre_process ERS_baseline ERS_llt2rat ERS_pre_process SAT_baseline SAT_llt2rat SAT_look \ align.csh align_batch.csh asa_cat asa_im_decode baseline_table.csh bperp calc_dop_orb \ calc_dop_orb_envi cleanup.csh conv dem2topo_ra.csh detrend_before_unwrap.csh dump_orbit_envi.pl \ dump_orbit_ers.pl dump_time_envi.pl ers_line_fixer esarp extend_orbit filter.csh find_auxi.pl \ fitoffset.csh geocode.csh gmtsar.csh gmtsar_sharedir.csh grd2geotiff.csh grd2kml.csh intf.csh \ intf_batch.csh landmask.csh make_a_offset.csh make_dem.csh make_los_ascii.csh make_profile.csh \ make_raw_csk make_slc_csk make_slc_rs2 make_slc_s1a make_slc_tsx offset_topo p2p_ALOS.csh \ p2p_ALOS2_SLC.csh p2p_ALOS_SLC.csh p2p_CSK.csh p2p_CSK_SLC.csh p2p_ENVI.csh p2p_ERS.csh \ p2p_RS2_SLC.csh p2p_S1A_SLC.csh p2p_S1A_TOPS.csh p2p_SAT_SLC.csh p2p_TSX_SLC.csh phase2topo \ phasediff phasefilt pre_proc.csh pre_proc_batch.csh pre_proc_init.csh proj_ll2ra.csh \ proj_ll2ra_ascii.csh proj_model.csh proj_ra2ll.csh proj_ra2ll_ascii.csh read_data_file_ccrs \ read_data_file_dpaf read_sarleader_dpaf resamp sarp.csh sbas slc2amp.csh snaphu snaphu.csh \ snaphu_interp.csh stack.csh stack_corr.csh update_PRM.csh xcorr gmtsar_uninstall.sh" printf "Remove: %s\n" $sharedir >&2 sudo rm -rf $sharedir cd $dir for exe in ${modules}; do printf "Remove: %s\n" $exe >&2 sudo rm -f ${exe} done cd $here GMTSAR_V5.7/.svn/pristine/03/034b4d51b2119a850a58fc6f82a65454f57b6189.svn-base000444 015705 000000 00000041116 13505462014 025312 0ustar00sandwellwheel000000 000000 /*************************************************************************** * Program to project a longitude, latitude, and topography * into a file of longitude latitude, and topography and unit look vector. * The basic approach is to : * 1 Read the header of the master radar image. This supplies * the radar co-ordinate system as well as the start and stop * times for the orbit calculation. * 2 Read the topography data and convert to xyz positions. * 3 Fly the satellite along its orbit and determine the time * of closest approach to each of the xyz points. The program * must have local access to the LED-file for the master. * 4 For each of the xyz points, calculate range, azimuth and topography and * unit look vector then transform the unit look vector from global to * local coordinate ****************************************************************************/ /*************************************************************************** * Creator: Xiaopeng Tong and David T. Sandwell * * (Scripps Institution of Oceanography) * * Date : 08/10/2006 * ***************************************************************************/ /*************************************************************************** * Modification history: * * * * DATE * * 12/15/07 - modified to work with complete grids * * 01/29/08 - modified to increase speed using the Golden Section Search * * 04/13/08 - modified to give muiltiple choice of output * * (single,double of binary or acsii) * * The algorithm is called Golden Section Search in One * * dimensional. Refer to Numerical Recipes for further details. * * There is a deadly error in the NR edit 2nd: * * SHFT3(x0,x1,x2,R*x1+C*x3) * * should be: SHFT3(x0,x1,x2,R*x3+C*x1) * * Same error occurs at the nearby line.(2 lines below) * * The inputs for the program are 3 coordinates of a point in space * * The function of the distance is in the same file. * * The function of the orbit is achieved by getorb_alos_ * * the outputs are minimum range from the orbit to the point and the time. * * 09/17/08 - modified to read the orbit position all in once into an * * array to speed up. That is to say, modify both the goldop subrountine * * to use the orb_position array and the getorb_alos in the main program * * to read the array. * * 11/28/08 - modified from ALOS_llt2rat.c to compute accurate look vector.* * need to specify the latitude and longitude of the pole to * * transform from global elipsoid cartesian to local East-North- * * up coordinate * * The start and end clock of the orbit is changed to allow for * * long swath, the start time should be in the first frame so * * PRM file. * * 12/03/10 - modified to work with ENVISAT, Matt Wei * ****************************************************************************/ #include "image_sio.h" #include "lib_functions.h" #include "llt2xyz.h" #define R 0.61803399 #define C 0.382 #define SHFT2(a, b, c) \ (a) = (b); \ (b) = (c); #define SHFT3(a, b, c, d) \ (a) = (b); \ (b) = (c); \ (c) = (d); #define TOL 3 char *USAGE = " \n Usage: " "ENVI_look master.PRM [-bo[s|d]] < inputfile > outputfile \n\n" " master.PRM - parameter file for master image and points " "to LED orbit file \n" " inputfile - lon, lat, elevation [ASCII] \n" " outputfile - lon, lat, elevation look_E look_N look_U " "[ASCII default] \n" " -bos or -bod - binary single or double precision output \n" " \n" " example: ENVI_look master.PRM < topo.llt > topo.lltn \n"; /* int parse_ALOS_look(char **, char *); */ void read_ENVI_orb(FILE *, struct PRM *, struct ALOS_ORB *); int main(int argc, char **argv) { FILE *fprm1; int otype; double rln, rlt, rht, t1, t2, tm; double ts, rng, thet, relp, telp; double xp[3]; // double xt[3]; double rp[3]; double dd[6]; /* dummy for output double precision */ float ds[6]; /* dummy for output single precision */ // double r0,rf,a0,af,dr; double rad = PI / 180.; double fll; int i, j, k, nrec, npad = 8000; int goldop(); int stai, endi, midi, xmin; double **orb_pos; struct PRM prm; struct ALOS_ORB *orb; FILE *ldrfile; int calorb_alos(struct ALOS_ORB *, double **orb_pos, double ts, double t1, int nrec); double len, unit_x, unit_y, unit_z; double dist(); double Rx[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double Rz[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double A[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; double local_look[3] = {0, 0, 0}; double pole_lon, pole_lat, b, g; /* Make sure usage is correct and files can be opened */ if (argc < 2 || argc > 3) { fprintf(stderr, "%s\n", USAGE); exit(-1); } /* otype: 1 -- ascii; 2 -- single precision binary; 3 -- double precision * binary */ otype = 1; if (argc == 3) { if (!strcmp(argv[2], "-bos")) otype = 2; else if (!strcmp(argv[2], "-bod")) otype = 3; else { fprintf(stderr, " %s *** option not recognized ***\n\n", argv[2]); fprintf(stderr, "%s", USAGE); exit(1); } } /* open and read the parameter file */ if ((fprm1 = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "couldn't open master.PRM \n"); fprintf(stderr, "%s\n", USAGE); exit(-1); } /* initialize the prm file */ set_ALOS_defaults(&prm); get_sio_struct(fprm1, &prm); /* dubugging fprintf(stderr,"debug\n"); fprintf(stderr,"%s\n",prm.led_file); fprintf(stderr,"%lf\n",prm.fs); fprintf(stderr,"%d\n",prm.num_rng_bins); fprintf(stderr,"%d\n",prm.num_valid_az); fprintf(stderr,"%lf\n",prm.rc); fprintf(stderr,"%lf\n",prm.ra); fprintf(stderr,"%lf\n",prm.prf); fprintf(stderr,"%lf\n",prm.RE); fprintf(stderr,"%lf\n",prm.sub_int_a); fprintf(stderr,"%lf\n",prm.SC_clock_start); fprintf(stderr,"%lf\n",prm.clock_start); fprintf(stderr,"%d\n",prm.nrows); fprintf(stderr,"%d\n",prm.num_patches); fprintf(stderr,"%lf\n",prm.near_range); fprintf(stderr,"rshift = %d\n",prm.rshift); fprintf(stderr,"sub_int_r = %lf\n",prm.sub_int_r); fprintf(stderr,"chirp_ext = %d\n",prm.chirp_ext); */ fclose(fprm1); /* get the orbit data */ ldrfile = fopen(prm.led_file, "r"); if (ldrfile == NULL) die("can't open ", prm.led_file); orb = (struct ALOS_ORB *)malloc(sizeof(struct ALOS_ORB)); read_ENVI_orb(ldrfile, &prm, orb); #if 0 dr = 0.5*SOL/prm.fs; r0 = -10.; rf = prm.num_rng_bins + 10.; a0 = -20.; af = prm.num_patches * prm.num_valid_az + 20.; #endif /* compute the flattening */ fll = (prm.ra - prm.rc) / prm.ra; /* compute the start time, stop time and increment */ t1 = 86400. * prm.clock_start + (prm.nrows - prm.num_valid_az) / (2. * prm.prf); /* t2=t1+prm.num_patches*prm.num_valid_az/prm.prf; */ /* make the orbit longer */ t2 = t1 + 20 * prm.num_valid_az / prm.prf; /* sample the orbit only every 2th point or about 8 m along track */ ts = 2. / prm.prf; nrec = (int)((t2 - t1) / ts); /* allocate memory for the orbit postion into a 2-dimensional array. It's about nrec+-npad * 4 * 4bytes = 320 KB the first "4" means space and time dimension : t, x, y, z */ /* allocate storage for an array of pointers */ orb_pos = malloc(4 * sizeof(double *)); /* for each pointer, allocate storage for an array of floats */ for (j = 0; j < 4; j++) { orb_pos[j] = malloc((nrec + 2 * npad) * sizeof(double)); } /* read in the postion of the orbit */ /* fprintf(stderr,"ts=%lf,t1=%lf,nrec=%d\n",ts,t1,nrec); */ (void)calorb_alos(orb, orb_pos, ts, t1, nrec); /* look at the orb_pos for(i=0;i<4;i++) { for (j=0;j 180.) rp[1] = rp[1] - 360.; // xt[0]=-1.0; /* compute the topography due to the difference between the local radius and * center radius */ thet = rlt * rad; if (prm.rc > 6350000. && prm.ra > 6350000. && prm.RE > 6350000.) { relp = 1. / sqrt((cos(thet) / prm.ra) * (cos(thet) / prm.ra) + (sin(thet) / prm.rc) * (sin(thet) / prm.rc)); telp = relp - prm.RE; } else { telp = 0.; } rp[2] = rht + telp; /* minimum for each point */ stai = 0; endi = nrec + npad * 2 - 1; midi = (stai + (endi - stai) * C); xmin = goldop(ts, t1, orb_pos, stai, endi, midi, xp[0], xp[1], xp[2], &rng, &tm); // xt[0]=rng; // xt[1]=tm; /* fprintf(stderr,"rng = %f, tm = %f",rng,tm); */ /* calculate the unit look vector originated from ground point to satellite in the global cartesian coordinate */ /* fprintf(stderr,"x y z of the satellite minimum: %f, %f, %f\n",orb_pos[1][xmin],orb_pos[2][xmin],orb_pos[3][xmin]); */ len = dist(xp[0], xp[1], xp[2], xmin, orb_pos); unit_x = (orb_pos[1][xmin] - xp[0]) / len; unit_y = (orb_pos[2][xmin] - xp[1]) / len; unit_z = (orb_pos[3][xmin] - xp[2]) / len; /* fprintf(stderr,"unit look vector: %f, %f, * %f\n",unit_x,unit_y,unit_z); */ /* there is a way to test the sign is right */ /* compute the look vector in local coordinate */ /* rotate the global coordinate to a local coordinate system */ /* location of the rotation pole */ /* refer to a matlab version rot3d.m to check the formula */ pole_lon = fmod((rln + 360.0), 360.0); /* fprintf(stderr,"pole_lon %f\n",pole_lon); */ pole_lat = rlt; /* construct a rotation matrix */ b = (pole_lat - 90) / 180. * 3.14159; Rx[0][0] = 1; Rx[0][1] = 0; Rx[0][2] = 0; Rx[1][0] = 0; Rx[1][1] = cos(b); Rx[1][2] = -sin(b); Rx[2][0] = 0; Rx[2][1] = sin(b); Rx[2][2] = cos(b); g = (pole_lon + 90) / 180. * 3.14159; Rz[0][0] = cos(g); Rz[0][1] = sin(g); Rz[0][2] = 0; Rz[1][0] = -sin(g); Rz[1][1] = cos(g); Rz[1][2] = 0; Rz[2][0] = 0; Rz[2][1] = 0; Rz[2][2] = 1; /* zero A */ for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) A[i][j] = 0; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) for (k = 0; k < 3; k++) A[i][j] += Rx[i][k] * Rz[k][j]; /* print out the matrix */ /* for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rx[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",Rz[i][j]); putchar('\n'); } for (i=0;i<3;i++) { for (j=0;j<3;j++) fprintf(stderr,"%f ",A[i][j]); putchar('\n'); } */ for (i = 0; i < 3; i++) local_look[i] = A[i][0] * unit_x + A[i][1] * unit_y + A[i][2] * unit_z; /* compute the range and azimuth in pixel space xt[0] = (xt[0] - prm.near_range)/dr-(prm.rshift+prm.sub_int_r)+prm.chirp_ext; xt[1] = prm.prf*(xt[1]-t1)-(prm.ashift+prm.sub_int_a); fprintf(stderr,"xt[0] = %f\n",xt[0]); if(xt[0] < r0 || xt[0] > rf || xt[1] < a0 || xt[1] > af) continue; fprintf(stderr,"%f %f %f %f %f \n",xt[0],xt[1],rp[2],rp[1],rp[0]); */ if (otype == 1) { /* fprintf(stdout,"%f %f %f %f %f * %f\n",rp[1],rp[0],rp[2],unit_x,unit_y,unit_z); */ fprintf(stdout, "%f %f %f %f %f %f\n", rp[1], rp[0], rp[2], local_look[0], local_look[1], local_look[2]); } else if (otype == 2) { ds[0] = (float)rp[1]; ds[1] = (float)rp[0]; ds[2] = (float)rp[2]; ds[3] = (float)local_look[0]; ds[4] = (float)local_look[1]; ds[5] = (float)local_look[2]; fwrite(ds, sizeof(float), 6, stdout); } else if (otype == 3) { dd[0] = rp[1]; dd[1] = rp[0]; dd[2] = rp[2]; dd[3] = local_look[0]; dd[4] = local_look[1]; dd[5] = local_look[2]; fwrite(dd, sizeof(double), 6, stdout); } } /* free the orb_pos array */ for (j = 0; j < 4; j++) { free(orb_pos[j]); } free(orb_pos); free(orb); return (0); } /* subfunctions */ int goldop(double ts, double t1, double **orb_pos, int ax, int bx, int cx, double xpx, double xpy, double xpz, double *rng, double *tm) { /* use golden section search to find the minimum range between the target and * the orbit */ /* xpx, xpy, xpz is the position of the target in cartesian coordinate */ /* ax is stai; bx is endi; cx is midi it's easy to tangle */ double f1, f2; int x0, x1, x2, x3; int xmin; double dist(); x0 = ax; x3 = bx; // if (fabs(bx-cx) > fabs(cx-ax)) { if (abs(bx - cx) > abs(cx - ax)) { x1 = cx; x2 = cx + (int)fabs((C * (bx - cx))); } else { x2 = cx; x1 = cx - (int)fabs((C * (cx - ax))); /* make x0 to x1 the smaller segment */ } f1 = dist(xpx, xpy, xpz, x1, orb_pos); f2 = dist(xpx, xpy, xpz, x2, orb_pos); while ((x3 - x0) > TOL) { if (f2 < f1) { SHFT3(x0, x1, x2, (int)(R * x3 + C * x1)); SHFT2(f1, f2, dist(xpx, xpy, xpz, x2, orb_pos)); } else { SHFT3(x3, x2, x1, (int)(R * x0 + C * x2)); SHFT2(f2, f1, dist(xpx, xpy, xpz, x1, orb_pos)); } } if (f1 < f2) { xmin = x1; *tm = orb_pos[0][x1]; *rng = f1; } else { xmin = x2; *tm = orb_pos[0][x2]; *rng = f2; } return (xmin); } double dist(double x, double y, double z, int n, double **orb_pos) { double d, dx, dy, dz; dx = x - orb_pos[1][n]; dy = y - orb_pos[2][n]; dz = z - orb_pos[3][n]; d = sqrt(dx * dx + dy * dy + dz * dz); return (d); } int calorb_alos(struct ALOS_ORB *orb, double **orb_pos, double ts, double t1, int nrec) /* function to calculate every position in the orbit */ { int i, k, nval; int npad = 8000; /* number of buffer points to add before and after the acquisition */ int ir; /* return code: 0 = ok; 1 = interp not in center; 2 = time out of range */ double xs, ys, zs; /* position at time */ double *pt, *px, *py, *pz, *pvx, *pvy, *pvz; double pt0; double time; px = (double *)malloc(orb->nd * sizeof(double)); py = (double *)malloc(orb->nd * sizeof(double)); pz = (double *)malloc(orb->nd * sizeof(double)); pvx = (double *)malloc(orb->nd * sizeof(double)); pvy = (double *)malloc(orb->nd * sizeof(double)); pvz = (double *)malloc(orb->nd * sizeof(double)); pt = (double *)malloc(orb->nd * sizeof(double)); pt0 = 86400. * orb->id + orb->sec; for (k = 0; k < orb->nd; k++) { pt[k] = pt0 + k * orb->dsec; px[k] = orb->points[k].px; py[k] = orb->points[k].py; pz[k] = orb->points[k].pz; pvx[k] = orb->points[k].vx; pvy[k] = orb->points[k].vy; pvz[k] = orb->points[k].vz; } nval = 6; /* loop to get orbit position of every point and store them into orb_pos */ for (i = 0; i < nrec + npad * 2; i++) { time = t1 - npad * ts + i * ts; orb_pos[0][i] = time; hermite_c(pt, px, pvx, orb->nd, nval, time, &xs, &ir); hermite_c(pt, py, pvy, orb->nd, nval, time, &ys, &ir); hermite_c(pt, pz, pvz, orb->nd, nval, time, &zs, &ir); orb_pos[1][i] = xs; orb_pos[2][i] = ys; orb_pos[3][i] = zs; } free((double *)px); free((double *)py); free((double *)pz); free((double *)pt); free((double *)pvx); free((double *)pvy); free((double *)pvz); return orb->nd; } GMTSAR_V5.7/.svn/pristine/03/03f21661be43cd2e8356ab76c497503fe02e216b.svn-base000444 015705 000000 00000021160 13505462013 025427 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Loop through a list of interferometry pairs # modified from process2pass.csh # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: intf_batch_ALOS2_SCAN.csh SAT intf.in batch.config" echo " make a stack of interferograms listed in intf.in" echo "" echo " SAT can only be ALOS " echo "" echo " format for intf.in:" echo " reference1_name:repeat1_name" echo " reference2_name:repeat2_name" echo " reference3_name:repeat3_name" echo " ......" echo "" echo " Example of intf.in for ALOS2 ScanSAR" echo " IMG-HH-ALOS2101532950-160409-WBDR1.1__D:IMG-HH-ALOS2149142950-170225-WBDR1.1__D" echo " IMG-HH-ALOS2101532950-160409-WBDR1.1__D:IMG-HH-ALOS2155352950-170408-WBDR1.1__D" echo "" echo " batch.alos2.config is a config file for making interferograms" echo " See example.batch.config for an example" echo "" exit 1 endif set SAT = $1 if ($SAT != ALOS) then echo "" echo " SAT can only be ALOS " echo "" exit 1 endif # # make sure the file exsit # if (! -f $2) then echo "no input file:" $2 exit endif if (! -f $3) then echo "no config file:" $3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` if ($SAT == ALOS) then set master = `grep master_image $3 | awk '{print $3}' | awk '{ print substr($1,8,length($1)-7)}'` endif if ($master == "") then echo "" echo "master image not set." echo "" exit 1 endif # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif set dec = `grep dec_factor $3 | awk '{print $3}'` set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set range_dec = `grep range_dec $3 | awk '{print $3}'` set azimuth_dec = `grep azimuth_dec $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # loop over 5 subswath # foreach subswath (1 2 3 4 5) mkdir -p F$subswath set region_cut = `grep region_cut $3 | awk '{print $3}'` cd F$subswath mkdir -p topo ################################## # 1 - start from make topo_ra # ################################## if ($stage <= 1) then # # clean up # cleanup.csh topo # # make topo_ra # if ($topo_phase == 1) then echo " " echo "DEM2TOPOPHASE.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo if ($SAT == ALOS) then cp ../SLC/IMG-HH-$master-F$subswath.PRM master.PRM ln -s ../SLC/IMG-HH-$master-F$subswath.LED . endif if (-f ../../topo/dem.grd) then ln -s ../../topo/dem.grd . dem2topo_ra_ALOS2.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPOPHASE.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd SLC if ($SAT == ALOS) then set rng_samp_rate = `grep rng_samp_rate IMG-HH-$master-F$subswath.PRM | awk 'NR == 1 {printf("%d", $3)}'` if ( $?rng_samp_rate) then if ($rng_samp_rate > 25000000) then echo "processing ALOS FBS data" set rng = 2 else echo "processing ALOS FBD data" set rng = 1 endif else echo "Undefined rng_samp_rate in the master PRM file" exit 1 endif slc2amp.csh IMG-HH-$master-F$subswath.PRM $rng amp-$master.grd else if ($SAT == ERS || $SAT == ENVI) then slc2amp.csh $master.PRM 1 amp-$master.grd endif cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPOPHASE SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPOPHASE IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif endif # stage 1 ################################################## # 2 - start from make and filter interferograms # # unwrap phase and geocode # ################################################## if ($stage <= 2) then # # make working directories # echo "" echo "START FORM A STACK OF INTERFEROGRAMS" mkdir -p intf/ ln -s ../$2 . # # loop over intf.in # foreach line (`awk '{print $0}' $2`) if ($SAT == ALOS) then set ref = `echo $line | awk -F: '{print $1}' | awk '{ print substr($1,8,length($1)-7)}'` set rep = `echo $line | awk -F: '{print $2}' | awk '{ print substr($1,8,length($1)-7)}'` set ref_id = `grep SC_clock_start ./SLC/IMG-HH-$ref-F$subswath.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ./SLC/IMG-HH-$rep-F$subswath.PRM | awk '{printf("%d",int($3))}' ` echo "" echo "INTF.CSH, FILTER.CSH - START" cd intf rm -r $ref_id"_"$rep_id mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../SLC/IMG-HH-$ref-F$subswath.LED . ln -s ../../SLC/IMG-HH-$rep-F$subswath.LED . ln -s ../../SLC/IMG-HH-$ref-F$subswath.SLC . ln -s ../../SLC/IMG-HH-$rep-F$subswath.SLC . cp ../../SLC/IMG-HH-$ref-F$subswath.PRM . cp ../../SLC/IMG-HH-$rep-F$subswath.PRM . endif if ($SAT == ALOS) then if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM -topo topo_shift.grd # filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec 2 8 filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec $range_dec $azimuth_dec else ln -s ../../topo/topo_ra.grd . intf.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM -topo topo_ra.grd # filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec 2 8 filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec $range_dec $azimuth_dec endif else intf.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM # filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec 2 8 filter.csh IMG-HH-$ref-F$subswath.PRM IMG-HH-$rep-F$subswath.PRM $filter $dec $range_dec $azimuth_dec endif endif echo "INTF.CSH, FILTER.CSH - END" if ($region_cut == "") then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` set rs = `gmt grdinfo phase.grd -C | awk '{print $2}'` set re = `gmt grdinfo phase.grd -C | awk '{print $3-16}'` set as = `gmt grdinfo phase.grd -C | awk '{print $4}'` set ae = `gmt grdinfo phase.grd -C | awk '{print $5}'` set region_cut = "$rs/$re/$as/$ae" endif if ($threshold_snaphu != 0 ) then if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask_ALOS2.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo "" echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" else echo "" echo "SKIP UNWRAP PHASE" endif echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. end # loop of foreach endif # stage 2 # end of subswath loop cd .. end echo "" echo "END FORM A STACK OF INTERFEROGRAMS" echo "" GMTSAR_V5.7/.svn/pristine/03/036f4859e85670827aa796c9b4d23a3c3193b6b7.svn-base000444 015705 000000 00000203417 13505462014 025334 0ustar00sandwellwheel000000 000000 /************************************************************************* snaphu network-flow solver source file Written by Curtis W. Chen Copyright 2002 Board of Trustees, Leland Stanford Jr. University Please see the supporting documentation for terms of use. No warranty. *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "snaphu.h" /* function: TreeSolve() * --------------------- * Solves the nonlinear network optimization problem. */ long TreeSolve(nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, nodeT *source, candidateT **candidatelistptr, candidateT **candidatebagptr, long *candidatelistsizeptr, long *candidatebagsizeptr, bucketT *bkts, short **flows, void **costs, incrcostT **incrcosts, nodeT ***apexes, signed char **iscandidate, long ngroundarcs, long nflow, float **mag, float **wrappedphase, char *outfile, long nnoderow, short *nnodesperrow, long narcrow, short *narcsperrow, long nrow, long ncol, outfileT *outfiles, paramT *params){ long i, row, col, arcrow, arccol, arcdir, arcnum, upperarcnum; long arcrow1, arccol1, arcdir1, arcrow2, arccol2, arcdir2; long treesize, candidatelistsize, candidatebagsize; long violation, groupcounter, fromgroup, group1, apexlistbase, apexlistlen; long cyclecost, outcostto, startlevel, dlevel, doutcost, dincost; long candidatelistlen, candidatebagnext; long inondegen, ipivots, nnodes, nnewnodes, maxnewnodes, templong; signed char fromside; candidateT *candidatelist, *candidatebag, *tempcandidateptr; nodeT *from, *to, *cycleapex, *node1, *node2, *leavingparent, *leavingchild; nodeT *root, *mntpt, *oldmntpt, *skipthread, *tempnode1, *tempnode2; nodeT *firstfromnode, *firsttonode; nodeT **apexlist; float **unwrappedphase; /* dereference some pointers and store as local variables */ candidatelist=(*candidatelistptr); candidatebag=(*candidatebagptr); candidatelistsize=(*candidatelistsizeptr); candidatebagsize=(*candidatebagsizeptr); candidatelistlen=0; candidatebagnext=0; /* set up */ bkts->curr=bkts->maxind; nnodes=InitTree(source,nodes,nodesupp,ground,ngroundarcs,bkts,nflow, incrcosts,apexes,iscandidate,nnoderow,nnodesperrow, narcrow,narcsperrow,nrow,ncol,params); apexlistlen=INITARRSIZE; apexlist=MAlloc(apexlistlen*sizeof(nodeT *)); groupcounter=2; ipivots=0; inondegen=0; maxnewnodes=ceil(nnodes*params->maxnewnodeconst); nnewnodes=0; treesize=1; fprintf(sp3,"Treesize: %-10ld Pivots: %-11ld Improvements: %-11ld", treesize,ipivots,inondegen); /* loop over each entering node (note, source already on tree) */ while(treesizepred; /* add new node to the tree */ GetArc(from,to,&arcrow,&arccol,&arcdir,nrow,ncol,nodesupp); to->group=1; to->level=from->level+1; to->incost=from->incost+GetCost(incrcosts,arcrow,arccol,-arcdir); to->next=from->next; to->prev=from; to->next->prev=to; from->next=to; /* scan new node's neighbors */ from=to; if(from->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumgroup>0){ if(to!=from->pred){ cycleapex=FindApex(from,to); apexes[arcrow][arccol]=cycleapex; CheckArcReducedCost(from,to,cycleapex,arcrow,arccol,arcdir,nflow, nodes,ground,&candidatebag,&candidatebagnext, &candidatebagsize,incrcosts,iscandidate, params); }else{ apexes[arcrow][arccol]=NULL; } }else{ /* if to is not on tree, update outcost and add to bucket */ AddNewNode(from,to,arcdir,bkts,nflow,incrcosts,arcrow,arccol,params); } } nnewnodes++; treesize++; } /* keep looping until no more arcs have negative reduced costs */ while(candidatebagnext){ /* if we received SIGINT or SIGHUP signal, dump results */ /* keep this stuff out of the signal handler so we don't risk */ /* writing a non-feasible solution (ie, if signal during augment) */ /* signal handler disabled for all but primary (grid) networks */ if(dumpresults_global){ fprintf(sp0,"\n\nDumping current solution to file %s\n", outfile); if(requestedstop_global){ Free2DArray((void **)costs,2*nrow-1); } unwrappedphase=(float **)Get2DMem(nrow,ncol,sizeof(float *), sizeof(float)); IntegratePhase(wrappedphase,unwrappedphase,flows,nrow,ncol); FlipPhaseArraySign(unwrappedphase,params,nrow,ncol); WriteOutputFile(mag,unwrappedphase,outfiles->outfile,outfiles, nrow,ncol); if(requestedstop_global){ fprintf(sp0,"Program exiting\n"); exit(ABNORMAL_EXIT); } Free2DArray((void **)unwrappedphase,nrow); dumpresults_global=FALSE; fprintf(sp0,"\n\nProgram continuing\n"); } /* swap candidate bag and candidate list pointers and sizes */ tempcandidateptr=candidatebag; candidatebag=candidatelist; candidatelist=tempcandidateptr; templong=candidatebagsize; candidatebagsize=candidatelistsize; candidatelistsize=templong; candidatelistlen=candidatebagnext; candidatebagnext=0; /* sort candidate list by violation, with augmenting arcs always first */ qsort((void *)candidatelist,candidatelistlen,sizeof(candidateT), CandidateCompare); /* set all arc directions to be plus/minus 1 */ for(i=0;i1){ candidatelist[i].arcdir=1; }else if(candidatelist[i].arcdir<-1){ candidatelist[i].arcdir=-1; } } /* this doesn't seem to make it any faster, so just do all of them */ /* set the number of candidates to process */ /* (must change candidatelistlen to ncandidates in for loop below) */ /* maxcandidates=MAXCANDIDATES; if(maxcandidates>candidatelistlen){ ncandidates=candidatelistlen; }else{ ncandidates=maxcandidates; } */ /* now pivot for each arc in the candidate list */ for(i=0;ioutcost+ GetCost(incrcosts,arcrow,arccol,arcdir); cyclecost=outcostto + to->incost -apexes[arcrow][arccol]->outcost -apexes[arcrow][arccol]->incost; /* if violation no longer negative, check reverse arc */ if(!((outcostto < to->outcost) || (cyclecost < 0))){ from=to; to=candidatelist[i].from; arcdir=-arcdir; outcostto=from->outcost+ GetCost(incrcosts,arcrow,arccol,arcdir); cyclecost=outcostto + to->incost -apexes[arcrow][arccol]->outcost -apexes[arcrow][arccol]->incost; } /* see if the cycle is negative (see if there is a violation) */ if((outcostto < to->outcost) || (cyclecost < 0)){ /* make sure the group counter hasn't gotten too big */ if(++groupcounter>MAXGROUPBASE){ for(row=0;row0){ nodes[row][col].group=1; } } } if(ground!=NULL && ground->group>0){ ground->group=1; } groupcounter=2; } /* if augmenting cycle (nondegenerate pivot) */ if(cyclecost<0){ /* augment flow along cycle and select leaving arc */ /* if we are augmenting non-zero flow, any arc with zero flow */ /* after the augmentation is a blocking arc */ while(TRUE){ fromside=TRUE; node1=from; node2=to; leavingchild=NULL; flows[arcrow][arccol]+=arcdir*nflow; ReCalcCost(costs,incrcosts,flows[arcrow][arccol],arcrow,arccol, nflow,nrow,params); violation=GetCost(incrcosts,arcrow,arccol,arcdir); if(node1->level > node2->level){ while(node1->level != node2->level){ GetArc(node1->pred,node1,&arcrow1,&arccol1,&arcdir1, nrow,ncol,nodesupp); flows[arcrow1][arccol1]+=(arcdir1*nflow); ReCalcCost(costs,incrcosts,flows[arcrow1][arccol1], arcrow1,arccol1,nflow,nrow,params); if(leavingchild==NULL && !flows[arcrow1][arccol1]){ leavingchild=node1; } violation+=GetCost(incrcosts,arcrow1,arccol1,arcdir1); node1->group=groupcounter+1; node1=node1->pred; } }else{ while(node1->level != node2->level){ GetArc(node2->pred,node2,&arcrow2,&arccol2,&arcdir2, nrow,ncol,nodesupp); flows[arcrow2][arccol2]-=(arcdir2*nflow); ReCalcCost(costs,incrcosts,flows[arcrow2][arccol2], arcrow2,arccol2,nflow,nrow,params); if(!flows[arcrow2][arccol2]){ leavingchild=node2; fromside=FALSE; } violation+=GetCost(incrcosts,arcrow2,arccol2,-arcdir2); node2->group=groupcounter; node2=node2->pred; } } while(node1!=node2){ GetArc(node1->pred,node1,&arcrow1,&arccol1,&arcdir1,nrow,ncol, nodesupp); GetArc(node2->pred,node2,&arcrow2,&arccol2,&arcdir2,nrow,ncol, nodesupp); flows[arcrow1][arccol1]+=(arcdir1*nflow); flows[arcrow2][arccol2]-=(arcdir2*nflow); ReCalcCost(costs,incrcosts,flows[arcrow1][arccol1], arcrow1,arccol1,nflow,nrow,params); ReCalcCost(costs,incrcosts,flows[arcrow2][arccol2], arcrow2,arccol2,nflow,nrow,params); violation+=(GetCost(incrcosts,arcrow1,arccol1,arcdir1) +GetCost(incrcosts,arcrow2,arccol2,-arcdir2)); if(!flows[arcrow2][arccol2]){ leavingchild=node2; fromside=FALSE; }else if(leavingchild==NULL && !flows[arcrow1][arccol1]){ leavingchild=node1; } node1->group=groupcounter+1; node2->group=groupcounter; node1=node1->pred; node2=node2->pred; } if(violation>=0){ break; } } inondegen++; }else{ /* We are not augmenting flow, but just updating potentials. */ /* Arcs with zero flow are implicitly directed upwards to */ /* maintain a strongly feasible spanning tree, so arcs with zero */ /* flow on the path between to node and apex are blocking arcs. */ /* Leaving arc is last one whose child's new outcost is less */ /* than its old outcost. Such an arc must exist, or else */ /* we'd be augmenting flow on a negative cycle. */ /* trace the cycle and select leaving arc */ fromside=FALSE; node1=from; node2=to; leavingchild=NULL; if(node1->level > node2->level){ while(node1->level != node2->level){ node1->group=groupcounter+1; node1=node1->pred; } }else{ while(node1->level != node2->level){ if(outcostto < node2->outcost){ leavingchild=node2; GetArc(node2->pred,node2,&arcrow2,&arccol2,&arcdir2, nrow,ncol,nodesupp); outcostto+=GetCost(incrcosts,arcrow2,arccol2,-arcdir2); }else{ outcostto=VERYFAR; } node2->group=groupcounter; node2=node2->pred; } } while(node1!=node2){ if(outcostto < node2->outcost){ leavingchild=node2; GetArc(node2->pred,node2,&arcrow2,&arccol2,&arcdir2,nrow,ncol, nodesupp); outcostto+=GetCost(incrcosts,arcrow2,arccol2,-arcdir2); }else{ outcostto=VERYFAR; } node1->group=groupcounter+1; node2->group=groupcounter; node1=node1->pred; node2=node2->pred; } } cycleapex=node1; /* set leaving parent */ if(leavingchild==NULL){ fromside=TRUE; leavingparent=from; }else{ leavingparent=leavingchild->pred; } /* swap from and to if leaving arc is on the from side */ if(fromside){ groupcounter++; fromgroup=groupcounter-1; tempnode1=from; from=to; to=tempnode1; }else{ fromgroup=groupcounter+1; } /* if augmenting pivot */ if(cyclecost<0){ /* find first child of apex on either cycle path */ firstfromnode=NULL; firsttonode=NULL; if(cycleapex->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumgroup==groupcounter && apexes[arcrow][arccol]==NULL){ firsttonode=tempnode1; if(firstfromnode!=NULL){ break; } }else if(tempnode1->group==fromgroup && apexes[arcrow][arccol]==NULL){ firstfromnode=tempnode1; if(firsttonode!=NULL){ break; } } } /* update potentials, mark stationary parts of tree */ cycleapex->group=groupcounter+2; if(firsttonode!=NULL){ NonDegenUpdateChildren(cycleapex,leavingparent,firsttonode,0, ngroundarcs,nflow,nodes,nodesupp,ground, apexes,incrcosts,nrow,ncol,params); } if(firstfromnode!=NULL){ NonDegenUpdateChildren(cycleapex,from,firstfromnode,1, ngroundarcs,nflow,nodes,nodesupp,ground, apexes,incrcosts,nrow,ncol,params); } groupcounter=from->group; apexlistbase=cycleapex->group; /* children of cycleapex are not marked, so we set fromgroup */ /* equal to cycleapex group for use with apex updates below */ /* all other children of cycle will be in apexlist if we had an */ /* augmenting pivot, so fromgroup only important for cycleapex */ fromgroup=cycleapex->group; }else{ /* set this stuff for use with apex updates below */ cycleapex->group=fromgroup; groupcounter+=2; apexlistbase=groupcounter+1; } /* remount subtree at new mount point */ if(leavingchild==NULL){ skipthread=to; }else{ root=from; oldmntpt=to; /* for each node on the path from to node to leaving child */ while(oldmntpt!=leavingparent){ /* remount the subtree at the new mount point */ mntpt=root; root=oldmntpt; oldmntpt=root->pred; root->pred=mntpt; GetArc(mntpt,root,&arcrow,&arccol,&arcdir,nrow,ncol,nodesupp); /* calculate differences for updating potentials and levels */ dlevel=mntpt->level-root->level+1; doutcost=mntpt->outcost - root->outcost + GetCost(incrcosts,arcrow,arccol,arcdir); dincost=mntpt->incost - root->incost + GetCost(incrcosts,arcrow,arccol,-arcdir); /* update all children */ /* group of each remounted tree used to reset apexes below */ node1=root; startlevel=root->level; groupcounter++; while(TRUE){ /* update the level, potentials, and group of the node */ node1->level+=dlevel; node1->outcost+=doutcost; node1->incost+=dincost; node1->group=groupcounter; /* break when node1 is no longer descendent of the root */ if(node1->next->level <= startlevel){ break; } node1=node1->next; } /* update threads */ root->prev->next=node1->next; node1->next->prev=root->prev; node1->next=mntpt->next; mntpt->next->prev=node1; mntpt->next=root; root->prev=mntpt; } skipthread=node1->next; /* reset apex pointers for entering and leaving arcs */ GetArc(from,to,&arcrow,&arccol,&arcdir,nrow,ncol,nodesupp); apexes[arcrow][arccol]=NULL; GetArc(leavingparent,leavingchild,&arcrow,&arccol, &arcdir,nrow,ncol,nodesupp); apexes[arcrow][arccol]=cycleapex; /* make sure we have enough memory for the apex list */ if(groupcounter-apexlistbase+1>apexlistlen){ apexlistlen=1.5*(groupcounter-apexlistbase+1); apexlist=ReAlloc(apexlist,apexlistlen*sizeof(nodeT *)); } /* set the apex list */ node2=leavingchild; for(group1=groupcounter;group1>=apexlistbase;group1--){ apexlist[group1-apexlistbase]=node2; node2=node2->pred; } /* reset apex pointers on remounted tree */ /* only nodes which are in different groups need new apexes */ node1=to; startlevel=to->level; while(TRUE){ /* loop over outgoing arcs */ if(node1->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumgroup>0){ /* if node2 is either not part of remounted tree or */ /* it is higher on remounted tree than node1, */ /* and arc isn't already on tree */ if(node2->group < node1->group && apexes[arcrow][arccol]!=NULL){ /* if new apex in apexlist */ /* node2 on remounted tree, if nonaugmenting pivot */ if(node2->group >= apexlistbase){ apexes[arcrow][arccol]=apexlist[node2->group -apexlistbase]; }else{ /* if old apex below level of cycleapex, */ /* node2 is on "to" node's side of tree */ /* implicitly, if old apex above cycleapex, */ /* we do nothing since apex won't change */ if(apexes[arcrow][arccol]->level > cycleapex->level){ /* since new apex not in apexlist (tested above), */ /* node2 above leaving arc so new apex is cycleapex */ apexes[arcrow][arccol]=cycleapex; }else{ /* node2 not on "to" side of tree */ /* if old apex is cycleapex, node2 is on "from" side */ if(apexes[arcrow][arccol]==cycleapex){ /* new apex will be on cycle, so trace node2->pred */ /* until we hit a node with group==fromgroup */ tempnode2=node2; while(tempnode2->group != fromgroup){ tempnode2=tempnode2->pred; } apexes[arcrow][arccol]=tempnode2; } } } /* check outgoing arcs for negative reduced costs */ CheckArcReducedCost(node1,node2,apexes[arcrow][arccol], arcrow,arccol,arcdir,nflow,nodes, ground,&candidatebag, &candidatebagnext,&candidatebagsize, incrcosts,iscandidate,params); } /* end if node2 below node1 and arc not on tree */ }else{ /* node2 is not on tree, so put it in correct bucket */ AddNewNode(node1,node2,arcdir,bkts,nflow,incrcosts, arcrow,arccol,params); } /* end if node2 on tree */ } /* end loop over node1 outgoing arcs */ /* move to next node in thread, break if we left the subtree */ node1=node1->next; if(node1->level <= startlevel){ break; } } } /* end if leavingchild!=NULL */ /* if we had an augmenting cycle */ /* we need to check outarcs from descendents of any cycle node */ /* (except apex, since apex potentials don't change) */ if(cyclecost<0){ /* check descendents of cycle children of apex */ while(TRUE){ /* firstfromnode, firsttonode may have changed */ if(firstfromnode!=NULL && firstfromnode->pred==cycleapex){ node1=firstfromnode; firstfromnode=NULL; }else if(firsttonode!=NULL && firsttonode->pred==cycleapex){ node1=firsttonode; firsttonode=NULL; }else{ break; } startlevel=node1->level; /* loop over all descendents */ while(TRUE){ /* loop over outgoing arcs */ if(node1->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumgroup>0){ if(apexes[arcrow][arccol]!=NULL && (node2->group!=node1->group || node1->group==apexlistbase)){ CheckArcReducedCost(node1,node2,apexes[arcrow][arccol], arcrow,arccol,arcdir,nflow,nodes, ground,&candidatebag, &candidatebagnext,&candidatebagsize, incrcosts,iscandidate,params); } }else{ AddNewNode(node1,node2,arcdir,bkts,nflow,incrcosts, arcrow,arccol,params); } } /* move to next node in thread, break if left the subtree */ /* but skip the remounted tree, since we checked it above */ node1=node1->next; if(node1==to){ node1=skipthread; } if(node1->level <= startlevel){ break; } } } } ipivots++; } /* end if cyclecost<0 || outcosttooutcost */ } /* end of for loop over candidates in list */ /* this is needed only if we don't process all candidates above */ /* copy remaining candidates into candidatebag */ /* while(candidatebagnext+(candidatelistlen-ncandidates)>candidatebagsize){ candidatebagsize+=CANDIDATEBAGSTEP; candidatebag=ReAlloc(candidatebag,candidatebagsize*sizeof(candidateT)); } for(i=ncandidates;ioutcost +GetCost(incrcosts,arcrow,arccol,arcdir); if(newoutcostoutcost || to->pred==from){ if(to->group==-1){ /* if to is already in a bucket */ if(to->outcostmaxind){ if(to->outcost>bkts->minind){ BucketRemove(to,to->outcost,bkts); }else{ BucketRemove(to,bkts->minind,bkts); } }else{ BucketRemove(to,bkts->maxind,bkts); } } to->outcost=newoutcost; to->pred=from; if(newoutcostmaxind){ if(newoutcost>bkts->minind){ BucketInsert(to,newoutcost,bkts); if(newoutcostcurr){ bkts->curr=newoutcost; } }else{ BucketInsert(to,bkts->minind,bkts); bkts->curr=bkts->minind; } }else{ BucketInsert(to,bkts->maxind,bkts); } to->group=-1; } } /* function: CheckArcReducedCost() * ------------------------------- * Given a from and to node, checks for negative reduced cost, and adds * the arc to the entering arc candidate bag if one is found. */ void CheckArcReducedCost(nodeT *from, nodeT *to, nodeT *apex, long arcrow, long arccol, long arcdir, long nflow, nodeT **nodes, nodeT *ground, candidateT **candidatebagptr, long *candidatebagnextptr, long *candidatebagsizeptr, incrcostT **incrcosts, signed char **iscandidate, paramT *params){ long apexcost, fwdarcdist, revarcdist, violation; nodeT *temp; /* do nothing if already candidate */ /* illegal corner arcs have iscandidate=TRUE set ahead of time */ if(iscandidate[arcrow][arccol]){ return; } /* set the apex cost */ apexcost=apex->outcost+apex->incost; /* check forward arc */ fwdarcdist=GetCost(incrcosts,arcrow,arccol,arcdir); violation=fwdarcdist+from->outcost+to->incost-apexcost; if(violation<0){ arcdir*=2; /* magnitude 2 for sorting */ }else{ revarcdist=GetCost(incrcosts,arcrow,arccol,-arcdir); violation=revarcdist+to->outcost+from->incost-apexcost; if(violation<0){ arcdir*=-2; /* magnitude 2 for sorting */ temp=from; from=to; to=temp; }else{ violation=fwdarcdist+from->outcost-to->outcost; if(violation>=0){ violation=revarcdist+to->outcost-from->outcost; if(violation<0){ arcdir=-arcdir; temp=from; from=to; to=temp; } } } } /* see if we have a violation, and if so, add arc to candidate bag */ if(violation<0){ if((*candidatebagnextptr)>=(*candidatebagsizeptr)){ (*candidatebagsizeptr)+=CANDIDATEBAGSTEP; (*candidatebagptr)=ReAlloc(*candidatebagptr, (*candidatebagsizeptr)*sizeof(candidateT)); } (*candidatebagptr)[*candidatebagnextptr].violation=violation; (*candidatebagptr)[*candidatebagnextptr].from=from; (*candidatebagptr)[*candidatebagnextptr].to=to; (*candidatebagptr)[*candidatebagnextptr].arcrow=arcrow; (*candidatebagptr)[*candidatebagnextptr].arccol=arccol; (*candidatebagptr)[*candidatebagnextptr].arcdir=arcdir; (*candidatebagnextptr)++; iscandidate[arcrow][arccol]=TRUE; } } /* function: InitTree() * -------------------- */ long InitTree(nodeT *source, nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, long ngroundarcs, bucketT *bkts, long nflow, incrcostT **incrcosts, nodeT ***apexes, signed char **iscandidate, long nnoderow, short *nnodesperrow, long narcrow, short *narcsperrow, long nrow, long ncol, paramT *params){ long row, col, arcnum, upperarcnum, arcrow, arccol, arcdir, nnodes; nodeT *to; /* loop over each node and initialize values */ nnodes=0; for(row=0;rowgroup=0; ground->outcost=VERYFAR; ground->pred=NULL; nnodes++; } /* initialize arcs */ for(row=0;rowgroup=1; source->outcost=0; source->incost=0; source->pred=NULL; source->prev=source; source->next=source; source->level=0; /* loop over outgoing arcs and add to buckets */ if(source->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumlevel > to->level){ while(from->level != to->level){ from=from->pred; } }else{ while(from->level != to->level){ to=to->pred; } } while(from != to){ from=from->pred; to=to->pred; } return(from); } /* function: CandidateCompare() * ---------------------------- * Compares the violations of candidate arcs for sorting. First checks * if either candidate has an arcdir magnitude greater than 1, denoting * an augmenting cycle. Augmenting candidates are always placed before * non-augmenting candidates. Otherwise, returns positive if the first * candidate has a greater (less negative) violation than the second, 0 * if they are the same, and negative otherwise. */ int CandidateCompare(const void *c1, const void *c2){ if(labs(((candidateT *)c1)->arcdir) > 1){ if(labs(((candidateT *)c2)->arcdir) < 2){ return(-1); } }else if(labs(((candidateT *)c2)->arcdir) > 1){ return(1); } return(((candidateT *)c1)->violation - ((candidateT *)c2)->violation); /* if(((candidateT *)c1)->violation > ((candidateT *)c2)->violation){ return(1); }else if(((candidateT *)c1)->violation < ((candidateT *)c2)->violation){ return(-1); }else{ return(0); } */ } /* function: NeighborNodeGrid() * ---------------------------- * Return the neighboring node of the given node corresponding to the * given arc number for a grid network with a ground node. */ nodeT *NeighborNodeGrid(nodeT *node1, long arcnum, long *upperarcnumptr, nodeT **nodes, nodeT *ground, long *arcrowptr, long *arccolptr, long *arcdirptr, long nrow, long ncol, nodesuppT **nodesupp){ long row, col; row=node1->row; col=node1->col; switch(arcnum){ case -4: *arcrowptr=row; *arccolptr=col+1; *arcdirptr=1; if(col==ncol-2){ return(ground); }else{ return(&nodes[row][col+1]); } break; case -3: *arcrowptr=nrow+row; *arccolptr=col; *arcdirptr=1; if(row==nrow-2){ return(ground); }else{ return(&nodes[row+1][col]); } break; case -2: *arcrowptr=row; *arccolptr=col; *arcdirptr=-1; if(col==0){ return(ground); }else{ return(&nodes[row][col-1]); } break; case -1: *arcrowptr=nrow-1+row; *arccolptr=col; *arcdirptr=-1; if(row==0){ return(ground); }else{ return(&nodes[row-1][col]); } break; default: if(arcnumrow; nodenum=node1->col; *upperarcnumptr=nodesupp[tilenum][nodenum].noutarcs-5; /* set the arc row (tilenumber) and column (arcnumber) */ outarc=nodesupp[tilenum][nodenum].outarcs[arcnum+4]; *arcrowptr=outarc->arcrow; *arccolptr=outarc->arccol; if(node1==outarc->from){ *arcdirptr=1; }else{ *arcdirptr=-1; } /* return the neighbor node */ return(nodesupp[tilenum][nodenum].neighbornodes[arcnum+4]); } /* function: GetArcGrid() * ---------------------- * Given a from node and a to node, sets pointers for indices into * arc arrays, assuming primary (grid) network. */ void GetArcGrid(nodeT *from, nodeT *to, long *arcrow, long *arccol, long *arcdir, long nrow, long ncol, nodesuppT **nodesupp){ long fromrow, fromcol, torow, tocol; fromrow=from->row; fromcol=from->col; torow=to->row; tocol=to->col; if(fromcol==tocol-1){ /* normal arcs (neither endpoint ground) */ *arcrow=fromrow; *arccol=fromcol+1; *arcdir=1; }else if(fromcol==tocol+1){ *arcrow=fromrow; *arccol=fromcol; *arcdir=-1; }else if(fromrow==torow-1){ *arcrow=fromrow+1+nrow-1; *arccol=fromcol; *arcdir=1; }else if(fromrow==torow+1){ *arcrow=fromrow+nrow-1; *arccol=fromcol; *arcdir=-1; }else if(fromcol==0){ /* arcs to ground */ *arcrow=fromrow; *arccol=0; *arcdir=-1; }else if(fromcol==ncol-2){ *arcrow=fromrow; *arccol=ncol-1; *arcdir=1; }else if(fromrow==0){ *arcrow=nrow-1; *arccol=fromcol; *arcdir=-1; }else if(fromrow==nrow-2){ *arcrow=2*(nrow-1); *arccol=fromcol; *arcdir=1; }else if(tocol==0){ /* arcs from ground */ *arcrow=torow; *arccol=0; *arcdir=1; }else if(tocol==ncol-2){ *arcrow=torow; *arccol=ncol-1; *arcdir=-1; }else if(torow==0){ *arcrow=nrow-1; *arccol=tocol; *arcdir=1; }else{ *arcrow=2*(nrow-1); *arccol=tocol; *arcdir=-1; } } /* function: GetArcNonGrid() * ------------------------- * Given a from node and a to node, sets pointers for indices into * arc arrays, assuming secondary (arbitrary topology) network. */ void GetArcNonGrid(nodeT *from, nodeT *to, long *arcrow, long *arccol, long *arcdir, long nrow, long ncol, nodesuppT **nodesupp){ long tilenum, nodenum, arcnum; scndryarcT *outarc; /* get tile and node numbers for from node */ tilenum=from->row; nodenum=from->col; /* loop over all outgoing arcs of from node */ arcnum=0; while(TRUE){ outarc=nodesupp[tilenum][nodenum].outarcs[arcnum++]; if(outarc->from==to){ *arcrow=outarc->arcrow; *arccol=outarc->arccol; *arcdir=-1; return; }else if(outarc->to==to){ *arcrow=outarc->arcrow; *arccol=outarc->arccol; *arcdir=1; return; } } } /* Function: NonDegenUpdateChildren() * ---------------------------------- * Updates potentials and groups of all childredn along an augmenting path, * until a stop node is hit. */ void NonDegenUpdateChildren(nodeT *startnode, nodeT *lastnode, nodeT *nextonpath, long dgroup, long ngroundarcs, long nflow, nodeT **nodes, nodesuppT **nodesupp, nodeT *ground, nodeT ***apexes, incrcostT **incrcosts, long nrow, long ncol, paramT *params){ nodeT *node1, *node2; long dincost, doutcost, arcnum, upperarcnum, startlevel; long group1, pathgroup, arcrow, arccol, arcdir; /* loop along flow path */ node1=startnode; pathgroup=lastnode->group; while(node1!=lastnode){ /* update potentials along the flow path by calculating arc distances */ node2=nextonpath; GetArc(node2->pred,node2,&arcrow,&arccol,&arcdir,nrow,ncol,nodesupp); doutcost=node1->outcost - node2->outcost + GetCost(incrcosts,arcrow,arccol,arcdir); node2->outcost+=doutcost; dincost=node1->incost - node2->incost + GetCost(incrcosts,arcrow,arccol,-arcdir); node2->incost+=dincost; node2->group=node1->group+dgroup; /* update potentials of children of this node in the flow path */ node1=node2; if(node1->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumpred==node1 && node2->group>0){ if(node2->group==pathgroup){ nextonpath=node2; }else{ startlevel=node2->level; group1=node1->group; while(TRUE){ node2->group=group1; node2->incost+=dincost; node2->outcost+=doutcost; node2=node2->next; if(node2->level <= startlevel){ break; } } } } } } } /* function: InitNetowrk() * ----------------------- */ void InitNetwork(short **flows, long *ngroundarcsptr, long *ncycleptr, long *nflowdoneptr, long *mostflowptr, long *nflowptr, long *candidatebagsizeptr, candidateT **candidatebagptr, long *candidatelistsizeptr, candidateT **candidatelistptr, signed char ***iscandidateptr, nodeT ****apexesptr, bucketT **bktsptr, long *iincrcostfileptr, incrcostT ***incrcostsptr, nodeT ***nodesptr, nodeT *ground, long *nnoderowptr, short **nnodesperrowptr, long *narcrowptr, short **narcsperrowptr, long nrow, long ncol, signed char *notfirstloopptr, totalcostT *totalcostptr, paramT *params){ long i; /* get and initialize memory for nodes */ if(ground!=NULL && *nodesptr==NULL){ *nodesptr=(nodeT **)Get2DMem(nrow-1,ncol-1,sizeof(nodeT *),sizeof(nodeT)); InitNodeNums(nrow-1,ncol-1,*nodesptr,ground); } /* take care of ambiguous flows to ground at corners */ if(ground!=NULL){ flows[0][0]+=flows[nrow-1][0]; flows[nrow-1][0]=0; flows[0][ncol-1]-=flows[nrow-1][ncol-2]; flows[nrow-1][ncol-2]=0; flows[nrow-2][0]-=flows[2*nrow-2][0]; flows[2*nrow-2][0]=0; flows[nrow-2][ncol-1]+=flows[2*nrow-2][ncol-2]; flows[2*nrow-2][ncol-2]=0; } /* initialize network solver variables */ *ncycleptr=0; *nflowptr=1; *candidatebagsizeptr=INITARRSIZE; *candidatebagptr=MAlloc(*candidatebagsizeptr*sizeof(candidateT)); *candidatelistsizeptr=INITARRSIZE; *candidatelistptr=MAlloc(*candidatelistsizeptr*sizeof(candidateT)); if(ground!=NULL){ *nflowdoneptr=0; *mostflowptr=Short2DRowColAbsMax(flows,nrow,ncol); if(*mostflowptr*params->nshortcycle>LARGESHORT){ fprintf(sp1,"Maximum flow on network: %ld\n",*mostflowptr); fprintf(sp0,"((Maximum flow) * NSHORTCYCLE) too large\nAbort\n"); exit(ABNORMAL_EXIT); } if(ncol>2){ *ngroundarcsptr=2*(nrow+ncol-2)-4; /* don't include corner column arcs */ }else{ *ngroundarcsptr=2*(nrow+ncol-2)-2; } *iscandidateptr=(signed char **)Get2DRowColMem(nrow,ncol, sizeof(signed char *), sizeof(signed char)); *apexesptr=(nodeT ***)Get2DRowColMem(nrow,ncol,sizeof(nodeT **), sizeof(nodeT *)); } /* set up buckets for TreeSolve (MSTInitFlows() has local set of buckets) */ *bktsptr=MAlloc(sizeof(bucketT)); if(ground!=NULL){ (*bktsptr)->minind=-LRound((params->maxcost+1)*(nrow+ncol) *NEGBUCKETFRACTION); (*bktsptr)->maxind=LRound((params->maxcost+1)*(nrow+ncol) *POSBUCKETFRACTION); }else{ (*bktsptr)->minind=-LRound((params->maxcost+1)*(nrow) *NEGBUCKETFRACTION); (*bktsptr)->maxind=LRound((params->maxcost+1)*(nrow) *POSBUCKETFRACTION); } (*bktsptr)->size=(*bktsptr)->maxind-(*bktsptr)->minind+1; (*bktsptr)->bucketbase=(nodeT **)MAlloc((*bktsptr)->size*sizeof(nodeT *)); (*bktsptr)->bucket=&((*bktsptr)->bucketbase[-(*bktsptr)->minind]); for(i=0;i<(*bktsptr)->size;i++){ (*bktsptr)->bucketbase[i]=NULL; } /* get memory for incremental cost arrays */ *iincrcostfileptr=0; if(ground!=NULL){ (*incrcostsptr)=(incrcostT **)Get2DRowColMem(nrow,ncol,sizeof(incrcostT *), sizeof(incrcostT)); } /* set number of nodes and arcs per row */ if(ground!=NULL){ (*nnoderowptr)=nrow-1; (*nnodesperrowptr)=(short *)MAlloc((nrow-1)*sizeof(short)); for(i=0;irow=GROUNDROW; ground->col=GROUNDCOL; } } /* function: InitBuckets() * ----------------------- */ void InitBuckets(bucketT *bkts, nodeT *source, long nbuckets){ long i; /* set up bucket array parameters */ bkts->curr=0; bkts->wrapped=FALSE; /* initialize the buckets */ for(i=0;ibucketbase[i]=NULL; } /* put the source in the zeroth distance index bucket */ bkts->bucket[0]=source; source->next=NULL; source->prev=NULL; source->group=INBUCKET; source->outcost=0; } /* function: InitNodes() * --------------------- */ void InitNodes(long nnrow, long nncol, nodeT **nodes, nodeT *ground){ long row, col; /* loop over each element and initialize values */ for(row=0;rowgroup=NOTINBUCKET; ground->outcost=VERYFAR; ground->pred=NULL; } } /* function: BucketInsert() * ------------------------ */ void BucketInsert(nodeT *node, long ind, bucketT *bkts){ /* put node at beginning of bucket list */ node->next=bkts->bucket[ind]; if((bkts->bucket[ind])!=NULL){ bkts->bucket[ind]->prev=node; } bkts->bucket[ind]=node; node->prev=NULL; /* mark node in bucket array */ node->group=INBUCKET; } /* function: BucketRemove() * ------------------------ */ void BucketRemove(nodeT *node, long ind, bucketT *bkts){ /* remove node from doubly linked list */ if((node->next)!=NULL){ node->next->prev=node->prev; } if(node->prev!=NULL){ node->prev->next=node->next; }else if(node->next==NULL){ bkts->bucket[ind]=NULL; }else{ bkts->bucket[ind]=node->next; } } /* function: ClosestNode() * ----------------------- */ nodeT *ClosestNode(bucketT *bkts){ nodeT *node; /* find the first bucket with nodes in it */ while(TRUE){ /* see if we got to the last bucket */ if((bkts->curr)>(bkts->maxind)){ return(NULL); } /* see if we found a nonempty bucket; if so, return it */ if((bkts->bucket[bkts->curr])!=NULL){ node=bkts->bucket[bkts->curr]; node->group=ONTREE; bkts->bucket[bkts->curr]=node->next; if((node->next)!=NULL){ node->next->prev=NULL; } return(node); } /* move to next bucket */ bkts->curr++; } } /* function: ClosestNodeCircular() * ------------------------------- * Similar to ClosestNode(), but assumes circular buckets. This * function should NOT be used if negative arc weights exist on the * network; initial value of bkts->minind should always be zero. */ nodeT *ClosestNodeCircular(bucketT *bkts){ nodeT *node; /* find the first bucket with nodes in it */ while(TRUE){ /* see if we got to the last bucket */ if((bkts->curr+bkts->minind)>(bkts->maxind)){ if(bkts->wrapped){ bkts->wrapped=FALSE; bkts->curr=0; bkts->minind+=bkts->size; bkts->maxind+=bkts->size; }else{ return(NULL); } } /* see if we found a nonempty bucket; if so, return it */ if((bkts->bucket[bkts->curr])!=NULL){ node=bkts->bucket[bkts->curr]; node->group=ONTREE; bkts->bucket[bkts->curr]=node->next; if((node->next)!=NULL){ node->next->prev=NULL; } return(node); } /* move to next bucket */ bkts->curr++; } } /* function: MinOutCostNode() * -------------------------- * Similar to ClosestNode(), but always returns closest node even if its * outcost is less than the minimum bucket index. Does not handle circular * buckets. Does not handle no nodes left condition (this should be handled * by calling function). */ nodeT *MinOutCostNode(bucketT *bkts){ long minoutcost; nodeT *node1, *node2; /* move to next non-empty bucket */ while(bkts->currmaxind && bkts->bucket[bkts->curr]==NULL){ bkts->curr++; } /* scan the whole bucket if it is the overflow or underflow bag */ if(bkts->curr==bkts->minind || bkts->curr==bkts->maxind){ node2=bkts->bucket[bkts->curr]; node1=node2; minoutcost=node1->outcost; while(node2!=NULL){ if(node2->outcostoutcost; node1=node2; } node2=node2->next; } BucketRemove(node1,bkts->curr,bkts); }else{ node1=bkts->bucket[bkts->curr]; bkts->bucket[bkts->curr]=node1->next; if(node1->next!=NULL){ node1->next->prev=NULL; } } return(node1); } /* function: SelectSource() * ------------------------ * If params->sourcemode is zero, the ground is returned as the source. * Otherwise, the returned source is the endpoint of the longest chain of * arcs carrying at least nflow units of flow. This function does * check for the case where two arcs both carry nflow into or out of a node, * but if there are flow cycles (not unexpected for nonlinear costs), the * longest chain is not guaranteed. Which end of the longest chain is * determined by the sign of params->sourcemode (should be 1 or -1 if not 0). */ nodeT *SelectSource(nodeT **nodes, nodeT *ground, long nflow, short **flows, long ngroundarcs, long nrow, long ncol, paramT *params){ long row, col, maxflowlength, arcnum, upperarcnum; long arcrow, arccol, arcdir, endptsign; signed char checknode; nodeT *source, *node1, *node2, *nextnode; nodesuppT **nodesupp; /* if sourcemode==0, return ground node; otherwise, it should be 1 or -1 */ if(!params->sourcemode){ return(ground); }else{ endptsign=params->sourcemode; } /* initialize variables */ /* group: 0=unvisited, 1=descended, 2=done */ /* outcost: longest distance to a chain end */ /* pred: parent node */ nodesupp=NULL; source=ground; maxflowlength=0; ground->group=0; ground->outcost=0; ground->pred=NULL; for(row=0;rowgroup){ if(node1!=ground){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnum= nflow){ checknode=FALSE; break; } /* node may be beginning of a chain */ if(endptsign*arcdir*flows[arcrow][arccol] >= nflow){ checknode=TRUE; } } } /* if it is an endpoint, trace the flow and determine longest chain */ if(checknode){ /* loop until we've walked the whole tree */ nextnode=node1; while(TRUE){ node1=nextnode; nextnode=NULL; /* loop over all outgoing arcs */ if(node1!=ground){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnum= nflow){ if(node2->group==2){ if(node2->outcost+1 > node1->outcost){ node1->outcost=node2->outcost+1; } }else if(node2->group==0){ nextnode=node2; break; } }else if(node2==node1->pred){ nextnode=node2; } } /* we are back to the root if we didn't find any eligible nodes */ if(nextnode==NULL){ /* see if the tree root should be the new source */ if(node1->outcost > maxflowlength){ source=node1; maxflowlength=node1->outcost; } node1->group=2; break; } /* if nextnode is pred, mark current node and go back up the tree */ if(nextnode->group==1){ node1->group=2; }else{ node1->group=1; nextnode->pred=node1; } } } } } /* return source */ return(source); } /* function: GetCost() * ------------------- * Returns incremental flow cost for current flow increment dflow from * lookup array. */ short GetCost(incrcostT **incrcosts, long arcrow, long arccol, long arcdir){ /* look up cost and return it for the appropriate arc direction */ /* we may want add a check here for clipped incremental costs */ if(arcdir>0){ return(incrcosts[arcrow][arccol].poscost); }else{ return(incrcosts[arcrow][arccol].negcost); } } /* function: ReCalcCost() * ---------------------- * Updates the incremental cost for an arc. */ long ReCalcCost(void **costs, incrcostT **incrcosts, long flow, long arcrow, long arccol, long nflow, long nrow, paramT *params){ long poscost, negcost, iclipped; /* calculate new positive and negative nflow costs, as long ints */ CalcCost(costs,flow,arcrow,arccol,nflow,nrow,params, &poscost,&negcost); /* clip costs to short int */ iclipped=0; if(poscost>LARGESHORT){ incrcosts[arcrow][arccol].poscost=LARGESHORT; iclipped++; }else{ if(poscost<-LARGESHORT){ incrcosts[arcrow][arccol].poscost=-LARGESHORT; iclipped++; }else{ incrcosts[arcrow][arccol].poscost=poscost; } } if(negcost>LARGESHORT){ incrcosts[arcrow][arccol].negcost=LARGESHORT; iclipped++; }else{ if(negcost<-LARGESHORT){ incrcosts[arcrow][arccol].negcost=-LARGESHORT; iclipped++; }else{ incrcosts[arcrow][arccol].negcost=negcost; } } /* return the number of clipped incremental costs (0, 1, or 2) */ return(iclipped); } /* function: SetupIncrFlowCosts() * ------------------------------ * Calculates the costs for positive and negative dflow flow increment * if there is zero flow on the arc. */ void SetupIncrFlowCosts(void **costs, incrcostT **incrcosts, short **flows, long nflow, long nrow, long narcrow, short *narcsperrow, paramT *params){ long arcrow, arccol, iclipped, narcs; char pl[2]; /* loop over all rows and columns */ narcs=0; iclipped=0; for(arcrow=0;arcrow1){ strcpy(pl,"s"); }else{ strcpy(pl,""); } fprintf(sp0,"%ld incremental cost%s clipped to avoid overflow (%.3f%%)\n", iclipped,pl,((double )iclipped)/(2*narcs)); } } /* function: EvaluateTotalCost() * ----------------------------- * Computes the total cost of the flow array and prints it out. Pass nrow * and ncol if in grid mode (primary network), or pass nrow=ntiles and * ncol=0 for nongrid mode (secondary network). */ totalcostT EvaluateTotalCost(void **costs, short **flows, long nrow, long ncol, short *narcsperrow,paramT *params){ totalcostT rowcost, totalcost; long row, col, maxrow, maxcol; /* sum cost for each row and column arc */ totalcost=0; if(ncol){ maxrow=2*nrow-1; }else{ maxrow=nrow; } for(row=0;rowmaxcost && !((row==nrow-1 || 2*nrow-2) && (col==0 || col==ncol-2))){ maxcost=mstcosts[row][col]; } } } /* get memory for buckets and arc status */ bkts->size=LRound((maxcost+1)*(nrow+ncol+1)); bkts->bucketbase=(nodeT **)MAlloc(bkts->size*sizeof(nodeT *)); bkts->minind=0; bkts->maxind=bkts->size-1; bkts->bucket=bkts->bucketbase; arcstatus=(signed char **)Get2DRowColMem(nrow,ncol,sizeof(signed char *), sizeof(signed char)); /* calculate phase residues (integer numbers of cycles) */ fprintf(sp1,"Initializing flows with MST algorithm\n"); residue=(signed char **)Get2DMem(nrow-1,ncol-1,sizeof(signed char *), sizeof(signed char)); CycleResidue(wrappedphase,residue,nrow,ncol); /* get memory for flow arrays */ (*flowsptr)=(short **)Get2DRowColZeroMem(nrow,ncol, sizeof(short *),sizeof(short)); flows=*flowsptr; /* loop until no flows exceed the maximum flow */ fprintf(sp2,"Running approximate minimum spanning tree solver\n"); while(TRUE){ /* set up the source to be the first non-zero residue that we find */ source=NULL; for(row=0;rowsize); /* solve the mst problem */ SolveMST(*nodesptr,source,ground,bkts,mstcosts,residue,arcstatus, nrow,ncol); /* find flows on minimum tree (only one feasible flow exists) */ DischargeTree(source,mstcosts,flows,residue,arcstatus, *nodesptr,ground,nrow,ncol); /* do pushes to clip the flows and make saturated arcs ineligible */ /* break out of loop if there is no flow greater than the limit */ if(ClipFlow(residue,flows,mstcosts,nrow,ncol,maxflow)){ break; } } /* free memory and return */ Free2DArray((void **)residue,nrow-1); Free2DArray((void **)arcstatus,2*nrow-1); Free2DArray((void **)mstcosts,2*nrow-1); free(bkts->bucketbase); return; } /* function: SolveMST() * -------------------- * Finds tree which spans all residue nodes of approximately minimal length. * Note that this function may produce a Steiner tree (tree may split at * non-residue node), though finding the exactly minimum Steiner tree is * NP-hard. This function uses Prim's algorithm, nesting Dijkstra's * shortest path algorithm in each iteration to find next closest residue * node to tree. See Ahuja, Orlin, and Magnanti 1993 for details. * * Dijkstra implementation and some associated functions adapted from SPLIB * shortest path codes written by Cherkassky, Goldberg, and Radzik. */ void SolveMST(nodeT **nodes, nodeT *source, nodeT *ground, bucketT *bkts, short **mstcosts, signed char **residue, signed char **arcstatus, long nrow, long ncol){ nodeT *from, *to, *pathfrom, *pathto; nodesuppT **nodesupp; long fromdist, newdist, arcdist, ngroundarcs, groundcharge; long fromrow, fromcol, row, col, arcnum, upperarcnum, maxcol; long pathfromrow, pathfromcol; long arcrow, arccol, arcdir; /* initialize some variables */ nodesupp=NULL; /* calculate the number of ground arcs */ ngroundarcs=2*(nrow+ncol-2)-4; /* calculate charge on ground */ groundcharge=0; for(row=0;rowrow; fromcol=from->col; /* if we found a residue */ if(((fromrow!=GROUNDROW && residue[fromrow][fromcol]) || (fromrow==GROUNDROW && groundcharge)) && from!=source){ /* set node and its predecessor */ pathto=from; pathfrom=from->pred; /* go back and make arcstatus -1 along path */ while(TRUE){ /* give to node zero distance label */ pathto->outcost=0; /* get arc indices for arc between pathfrom and pathto */ GetArc(pathfrom,pathto,&arcrow,&arccol,&arcdir,nrow,ncol,nodesupp); /* set arc status to -1 to mark arc on tree */ arcstatus[arcrow][arccol]=-1; /* stop when we get to a residue */ pathfromrow=pathfrom->row; pathfromcol=pathfrom->col; if((pathfromrow!=GROUNDROW && residue[pathfromrow][pathfromcol]) || (pathfromrow==GROUNDROW && groundcharge)){ break; } /* move up to previous node pair in path */ pathto=pathfrom; pathfrom=pathfrom->pred; } /* end while loop marking costs on path */ } /* end if we found a residue */ /* set a variable for from node's distance */ fromdist=from->outcost; /* scan from's neighbors */ if(fromrow!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumrow; col=to->col; /* get cost of arc to new node (if arc on tree, cost is 0) */ if(arcstatus[arcrow][arccol]<0){ arcdist=0; }else if((arcdist=mstcosts[arcrow][arccol])==LARGESHORT){ arcdist=VERYFAR; } /* compare distance of new nodes to temp labels */ if((newdist=fromdist+arcdist)<(to->outcost)){ /* if to node is already in a bucket, remove it */ if(to->group==INBUCKET){ if(to->outcostmaxind){ BucketRemove(to,to->outcost,bkts); }else{ BucketRemove(to,bkts->maxind,bkts); } } /* update to node */ to->outcost=newdist; to->pred=from; /* insert to node into appropriate bucket */ if(newdistmaxind){ BucketInsert(to,newdist,bkts); if(newdistcurr){ bkts->curr=newdist; } }else{ BucketInsert(to,bkts->maxind,bkts); } } /* end if newdist < old dist */ } /* end loop over outgoing arcs */ } /* end while ClosestNode()!=NULL */ } /* function: DischargeTree() * ------------------------- * Does depth-first search on result tree from SolveMST. Integrates * charges from tree leaves back up to set arc flows. This implementation * is non-recursive; a recursive implementation might be faster, but * would also use much more stack memory. This method is equivalent to * walking the tree, so it should be nore more than a factor of 2 slower. */ long DischargeTree(nodeT *source, short **mstcosts, short **flows, signed char **residue, signed char **arcstatus, nodeT **nodes, nodeT *ground, long nrow, long ncol){ long row, col, todir=0, arcrow, arccol, arcdir; long arcnum, upperarcnum, ngroundarcs; nodeT *from, *to, *nextnode; nodesuppT **nodesupp; /* set up */ /* use group member of node structure to temporarily store charge */ nextnode=source; ground->group=0; for(row=0;rowgroup-=residue[row][col]; } } ngroundarcs=2*(nrow+ncol-2)-4; nodesupp=NULL; /* keep looping unitl we've walked the entire tree */ while(TRUE){ from=nextnode; nextnode=NULL; /* loop over outgoing arcs from this node */ if(from->row!=GROUNDROW){ arcnum=-5; upperarcnum=-1; }else{ arcnum=-1; upperarcnum=ngroundarcs-1; } while(arcnumgroup; nextnode->group+=from->group; from->group=0; } } /* finish up */ return(from->group); } /* end of DischargeTree() */ /* function: ClipFlow() * --------------------- * Given a flow, clips flow magnitudes to a computed limit, resets * residues so sum of solution of network problem with new residues * and solution of clipped problem give total solution. Upper flow limit * is 2/3 the maximum flow on the network or the passed value maxflow, * whichever is greater. Clipped flow arcs get costs of passed variable * maxcost. Residues should have been set to zero by DischargeTree(). */ signed char ClipFlow(signed char **residue, short **flows, short **mstcosts, long nrow, long ncol, long maxflow){ long row, col, cliplimit, maxcol, excess, tempcharge, sign; long mostflow, maxcost; /* find maximum flow */ mostflow=Short2DRowColAbsMax(flows,nrow,ncol); /* if there is no flow greater than the maximum, return TRUE */ if(mostflow<=maxflow){ return(TRUE); } fprintf(sp2,"Maximum flow on network: %ld\n",mostflow); /* set upper flow limit */ cliplimit=(long )ceil(mostflow*CLIPFACTOR)+1; if(maxflow>cliplimit){ cliplimit=maxflow; } /* find maximum cost (excluding ineligible corner arcs) */ maxcost=0; for(row=0;row<2*nrow-1;row++){ if(rowmaxcost && mstcosts[row][col]=LARGESHORT){ fprintf(sp0,"WARNING: escaping ClipFlow loop to prevent cost overflow\n"); return(TRUE); } /* clip flows and do pushes */ for(row=0;row<2*nrow-1;row++){ if(rowcliplimit){ if(flows[row][col]>0){ sign=1; excess=flows[row][col]-cliplimit; }else{ sign=-1; excess=flows[row][col]+cliplimit; } if(rowMAXRES || tempchargeMAXRES){ fprintf(sp0,"Overflow of residue data type\nAbort\n"); exit(ABNORMAL_EXIT); } residue[row][col]=tempcharge; } }else{ if(row!=nrow-1){ tempcharge=residue[row-nrow][col]+excess; if(tempcharge>MAXRES || tempchargeMAXRES){ fprintf(sp0,"Overflow of residue data type\nAbort\n"); exit(ABNORMAL_EXIT); } residue[row-nrow+1][col]=tempcharge; } } flows[row][col]=sign*cliplimit; mstcosts[row][col]=maxcost; } } } /* return value indicates that flows have been clipped */ fprintf(sp2,"Flows clipped to %ld. Rerunning MST solver.\n",cliplimit); return(FALSE); } /* function: MCFInitFlows() * ------------------------ * Initializes the flow on a the network using minimum cost flow * algorithm. */ void MCFInitFlows(float **wrappedphase, short ***flowsptr, short **mstcosts, long nrow, long ncol, long cs2scalefactor){ signed char **residue; #ifndef NO_CS2 /* calculate phase residues (integer numbers of cycles) */ fprintf(sp1,"Initializing flows with MCF algorithm\n"); residue=(signed char **)Get2DMem(nrow-1,ncol-1,sizeof(signed char *), sizeof(signed char)); CycleResidue(wrappedphase,residue,nrow,ncol); /* run the solver (memory freed within solver) */ SolveCS2(residue,mstcosts,nrow,ncol,cs2scalefactor,flowsptr); #endif } GMTSAR_V5.7/.svn/pristine/6f/6ffe42680d0382b61aa21d3d2b2b7b5ddf25a2a1.svn-base000444 015705 000000 00000003275 13505462013 026005 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # D. Sandwell 1/12/07 # M. Wei 1/31/08 # alias rm 'rm -f' unset noclobber if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # # # project a grd file from lon/lat coordinates into range/azimuth coordinates # this version only works with GMT V4.0 and higher # # Input: # trans.dat - file generated by llt_grid2rat (r a topo lon lat) # phase_ll.grd - a GRD file of phase or anything in longitude/latitude coordinates # # Output: # phase_ra.grd - a GRD file of phase in radar coordinates # # check for number of arguments # if ($#argv < 3) then echo " " echo "Usage: proj_ll2ra.csh trans.dat phase_ll.grd phase_ra.grd" echo " " echo " trans.dat - file generated by llt_grid2rat (r a topo lon lat)" echo " phase_ll.grd - a GRD file of phase or anything in lon/lat-coordinates" echo " phase_ra.grd - output a GRD file in radar coordinates" echo " " exit 1 endif # # extract the phase in the r a positions # gmt set FORMAT_GEO_OUT D gmt grd2xyz $2 -s -bo3f -fg > llp # # make grids of longitude and latitude versus range and azimuth # gmt gmtconvert $1 -o3,4,0 -bi5d -bo3f > llr gmt gmtconvert $1 -o3,4,1 -bi5d -bo3f > lla # gmt surface llr `gmt gmtinfo llp -I0.08333333333 -bi3f` -bi3f -I.00083333333333 -T.50 -Gllr.grd $V gmt surface lla `gmt gmtinfo llp -I0.08333333333 -bi3f` -bi3f -I.00083333333333 -T.50 -Glla.grd $V # gmt grdtrack llp -nl -Gllr.grd -bi3f -bo4f > llpr gmt grdtrack llpr -nl -Glla.grd -bi4f -bo5f > llpra # # get the range, azimuth, phase columns and grid # gmt gmtconvert llpra -bi5f -bo3f -o3,4,2 > rap # # gmt xyz2grd rap `gmt gmtinfo rap -I32/64 -bi3f` -I32/64 -r -G$3 -bi3f # # clean # rm ll* rap GMTSAR_V5.7/.svn/pristine/3b/3ba87f8710ac954fefcb3f6c3d09a3c0c602baa3.svn-base000444 015705 000000 00000001364 13505462014 026151 0ustar00sandwellwheel000000 000000 /************************************************************************ * Creator: David T. Sandwell Scripps Institution of Oceanography * * Date : 09/12/93 Copyright, David T. Sandwell * ************************************************************************/ void swap32(in, out, n) /* Swaps 4 bytes within each 32-bit word of array in. */ char *in; /* Input array */ char *out; /* Output array */ int n; /* # of short integers to swap */ { register char *ip, *op; /* Local register variables */ if (n > 0) { ip = in + 4; op = out; while (n--) { *op++ = *--ip; *op++ = *--ip; *op++ = *--ip; *op++ = *--ip; ip += 8; } } } GMTSAR_V5.7/.svn/pristine/3b/3b1c69158f5d6263162781118be0a1e988748d71.svn-base000444 015705 000000 00000024104 13505462013 025242 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # Xiaopeng Tong, Jan 14, 2014 # # process generic L1.1 data # Automatically process a single frame of interferogram. # see instruction.txt for details. # alias rm 'rm -f' unset noclobber # if ($#argv != 3) then echo "" echo "Usage: p2p_SAT_SLC.csh master_image slave_image configuration_file " echo "" echo "Example: p2p_SAT_SLC.csh TSX_20110608 TSX_20110619 config.tsx.slc.txt" echo "" echo " Place the L1.1 data in a directory called raw and a dem.grd file in " echo " a parallel directory called topo. Execute this command at the directory" echo " location above raw and topo. The file dem.grd" echo " is a dem that completely covers the SAR frame - larger is OK." echo " If the dem is omitted then an interferogram will still be created" echo " but there will not be geocoded output." echo " A custom dem.grd can be made at the web site http://topex.ucsd.edu/gmtsar" echo "" echo "" exit 1 endif # start # # make sure the files exist # if((! -f raw/$1.PRM) || (! -f raw/$1.LED) || (! -f raw/$1.SLC)) then echo " missing input files raw/"$1 exit endif if((! -f raw/$2.PRM) || (! -f raw/$2.LED) || (! -f raw/$2.SLC)) then echo " missing input files raw/"$2 exit endif if(! -f $3 ) then echo " no configure file: "$3 exit endif # # read parameters from configuration file # set stage = `grep proc_stage $3 | awk '{print $3}'` set earth_radius = `grep earth_radius $3 | awk '{print $3}'` if ((! $?earth_radius) || ($earth_radius == "")) then set earth_radius = 0 endif set topo_phase = `grep topo_phase $3 | awk '{print $3}'` set shift_topo = `grep shift_topo $3 | awk '{print $3}'` set switch_master = `grep switch_master $3 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 100m # set filter = `grep filter_wavelength $3 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 100 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif echo $filter set dec = `grep dec_factor $3 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $3 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $3 | awk '{print $3}'` set region_cut = `grep region_cut $3 | awk '{print $3}'` set switch_land = `grep switch_land $3 | awk '{print $3}'` set defomax = `grep defomax $3 | awk '{print $3}'` set near_interp = `grep near_interp $3 | awk '{print $3}'` # # read file names of raw data # set master = $1 set slave = $2 if ($switch_master == 0) then set ref = $master set rep = $slave else if ($switch_master == 1) then set ref = $slave set rep = $master else echo "Wrong paramter: switch_master "$switch_master endif # # make working directories # mkdir -p intf/ SLC/ ############################# # 1 - start from preprocess # ############################# if ($stage == 1) then # # preprocess the raw data # echo " " echo "PREPROCESS - START" cd raw # # preprocess the raw data make the raw data and copy the PRM to PRM00 # in case the script is run a second time # # make_raw.com # if(-e $master.PRM00) then cp $master.PRM00 $master.PRM cp $slave.PRM00 $slave.PRM else cp $master.PRM $master.PRM00 cp $slave.PRM $slave.PRM00 endif # # set the num_lines to be the min of the master and slave # @ m_lines = `grep num_lines ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` @ s_lines = `grep num_lines ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` if($s_lines < $m_lines) then update_PRM $master.PRM num_lines $s_lines update_PRM $master.PRM num_valid_az $s_lines update_PRM $master.PRM nrows $s_lines else update_PRM $slave.PRM num_lines $m_lines update_PRM $slave.PRM num_valid_az $m_lines update_PRM $slave.PRM nrows $m_lines endif # # calculate SC_vel and SC_height # set the Doppler to be zero # cp $master.PRM $master.PRM0 calc_dop_orb $master.PRM0 $master.log $earth_radius 0 cat $master.PRM0 $master.log > $master.PRM echo "fdd1 = 0" >> $master.PRM echo "fddd1 = 0" >> $master.PRM # cp $slave.PRM $slave.PRM0 calc_dop_orb $slave.PRM0 $slave.log $earth_radius 0 cat $slave.PRM0 $slave.log > $slave.PRM echo "fdd1 = 0" >> $slave.PRM echo "fddd1 = 0" >> $slave.PRM rm *.log rm *.PRM0 cd .. echo "PREPROCESS.CSH - END" endif ############################################# # 2 - start from focus and align SLC images # ############################################# if ($stage <= 2) then # # clean up # cleanup.csh SLC # # align SLC images # echo " " echo "ALIGN - START" cd SLC cp ../raw/*.PRM . ln -s ../raw/$master.SLC . ln -s ../raw/$slave.SLC . ln -s ../raw/$master.LED . ln -s ../raw/$slave.LED . cp $slave.PRM $slave.PRM0 SAT_baseline $master.PRM $slave.PRM0 >> $slave.PRM xcorr $master.PRM $slave.PRM -xsearch 128 -ysearch 128 fitoffset.csh 2 2 freq_xcorr.dat >> $slave.PRM resamp $master.PRM $slave.PRM $slave.PRMresamp $slave.SLCresamp 4 rm $slave.SLC mv $slave.SLCresamp $slave.SLC cp $slave.PRMresamp $slave.PRM cd .. echo "ALIGN - END" endif ################################## # 3 - start from make topo_ra # ################################## if ($stage <= 3) then # # clean up # cleanup.csh topo # # make topo_ra if there is dem.grd # if ($topo_phase == 1) then echo " " echo "DEM2TOPO_RA.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../SLC/$master.PRM master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPO_RA.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" # # make sure the range increment of the amplitude image matches the topo_ra.grd # set rng = `gmt grdinfo topo/topo_ra.grd | grep x_inc | awk '{print $7}'` cd SLC echo " range decimation is: " $rng slc2amp.csh $master.PRM $rng amp-$master.grd cd .. cd topo ln -s ../SLC/amp-$master.grd . offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPO_RA SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPO_RA IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 4 - start from make and filter interferograms # ################################################## if ($stage <= 4) then # # clean up # cleanup.csh intf # # make and filter interferograms # echo " " echo "INTF.CSH, FILTER.CSH - START" cd intf/ set ref_id = `grep SC_clock_start ../raw/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../raw/$slave.PRM | awk '{printf("%d",int($3))}' ` mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../SLC/$ref.SLC . ln -s ../../SLC/$rep.SLC . cp ../../SLC/$ref.PRM . cp ../../SLC/$rep.PRM . if($topo_phase == 1) then if ($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd filter.csh $ref.PRM $rep.PRM $filter $dec else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd filter.csh $ref.PRM $rep.PRM $filter $dec endif else intf.csh $ref.PRM $rep.PRM filter.csh $ref.PRM $rep.PRM $filter $dec endif cd ../.. echo "INTF.CSH, FILTER.CSH - END" endif ################################ # 5 - start from unwrap phase # ################################ if ($stage <= 5 ) then if ($threshold_snaphu != 0 ) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id if ((! $?region_cut) || ($region_cut == "")) then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif # # landmask # if ($switch_land == 1) then cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo " " echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" cd ../.. else echo "" echo "SKIP UNWRAP PHASE" endif endif ########################### # 6 - start from geocode # ########################### if ($stage <= 6) then cd intf set ref_id = `grep SC_clock_start ../SLC/$master.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ../SLC/$slave.PRM | awk '{printf("%d",int($3))}' ` cd $ref_id"_"$rep_id echo " " echo "GEOCODE.CSH - START" rm raln.grd ralt.grd if ($topo_phase == 1) then rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else echo "topo_ra is needed to geocode" exit 1 endif echo "GEOCODE.CSH - END" cd ../.. endif # end GMTSAR_V5.7/.svn/pristine/57/57e96798530a9afaa8867fa1c304f53d9f2416f2.svn-base000444 015705 000000 00000001427 13505462013 025505 0ustar00sandwellwheel000000 000000 #include "lib_functions.h" #include "orbit.h" #include "siocomplex.h" #include void write_orb(FILE *, struct SAT_ORB *); void write_orb(FILE *ldrfile, struct SAT_ORB *orb) { int n; int nd, iy, id; double isec, idsec, pt, px, py, pz, vx, vy, vz; /* write the header information */ nd = orb->nd; iy = orb->iy; id = orb->id; isec = orb->sec; idsec = orb->dsec; fprintf(ldrfile, "%d %d %d %lf %lf \n", nd, iy, id, isec, idsec); /* write the state vectors */ for (n = 0; n < nd; n++) { pt = orb->points[n].pt; px = orb->points[n].px; py = orb->points[n].py; pz = orb->points[n].pz; vx = orb->points[n].vx; vy = orb->points[n].vy; vz = orb->points[n].vz; fprintf(ldrfile, "%d %d %lf %lf %lf %lf %lf %lf %lf \n", iy, id, pt, px, py, pz, vx, vy, vz); } } GMTSAR_V5.7/.svn/pristine/68/68f731b65d2eab0b5d04195ff4413d86e681e5a6.svn-base000444 015705 000000 00000003253 13505462013 025545 0ustar00sandwellwheel000000 000000 /************************************************************************ * intp_coef calculates an 8 pt. sinc function for range migration * * interpolation. * ************************************************************************/ /************************************************************************ * Creator: Evelyn J. Price (Scripps Institution of Oceanography) * * Date : 11/18/96 * ************************************************************************/ /************************************************************************ * Modification History * * * * Date * ************************************************************************/ #include "soi.h" #include void intp_coef(int nfilter, float *xintp) { int i, j; float x, y; /* compute the interpolation factors */ for (i = 0; i <= nfilter; i++) { j = i * 8; x = ((float)i) / ((float)nfilter); y = sin(PI * x) / PI; if ((x != 0.0f) && (x != 1.0f)) { xintp[j] = -y / (3.0f + x); xintp[j + 1] = y / (2.0f + x); xintp[j + 2] = -y / (1.0f + x); xintp[j + 3] = y / x; xintp[j + 4] = y / (1.0f - x); xintp[j + 5] = -y / (2.0f - x); xintp[j + 6] = y / (3.0f - x); xintp[j + 7] = -y / (4.0f - x); } else if (x == 0.0f) { xintp[j] = 0.0f; xintp[j + 1] = 0.0f; xintp[j + 2] = 0.0f; xintp[j + 3] = 1.0f; xintp[j + 4] = 0.0f; xintp[j + 5] = 0.0f; xintp[j + 6] = 0.0f; xintp[j + 7] = 0.0f; } else if (x == 1.0f) { xintp[j] = 0.0f; xintp[j + 1] = 0.0f; xintp[j + 2] = 0.0f; xintp[j + 3] = 0.0f; xintp[j + 4] = 1.0f; xintp[j + 5] = 0.0f; xintp[j + 6] = 0.0f; xintp[j + 7] = 0.0f; } } } GMTSAR_V5.7/.svn/pristine/68/68026814226ad9324144bd5d15b973892b771cee.svn-base000444 015705 000000 00000002304 13505462013 025242 0ustar00sandwellwheel000000 000000 5 15 1.6389554e-02 4.6446952e-02 6.5728529e-02 4.6446952e-02 1.6389554e-02 3.3746152e-02 9.5634445e-02 1.3533528e-01 9.5634445e-02 3.3746152e-02 6.2176524e-02 1.7620431e-01 2.4935221e-01 1.7620431e-01 6.2176524e-02 1.0251176e-01 2.9051179e-01 4.1111229e-01 2.9051179e-01 1.0251176e-01 1.5123976e-01 4.2860385e-01 6.0653066e-01 4.2860385e-01 1.5123976e-01 1.9966564e-01 5.6583971e-01 8.0073740e-01 5.6583971e-01 1.9966564e-01 2.3587708e-01 6.6846063e-01 9.4595947e-01 6.6846063e-01 2.3587708e-01 2.4935221e-01 7.0664828e-01 1.0000000e+00 7.0664828e-01 2.4935221e-01 2.3587708e-01 6.6846063e-01 9.4595947e-01 6.6846063e-01 2.3587708e-01 1.9966564e-01 5.6583971e-01 8.0073740e-01 5.6583971e-01 1.9966564e-01 1.5123976e-01 4.2860385e-01 6.0653066e-01 4.2860385e-01 1.5123976e-01 1.0251176e-01 2.9051179e-01 4.1111229e-01 2.9051179e-01 1.0251176e-01 6.2176524e-02 1.7620431e-01 2.4935221e-01 1.7620431e-01 6.2176524e-02 3.3746152e-02 9.5634445e-02 1.3533528e-01 9.5634445e-02 3.3746152e-02 1.6389554e-02 4.6446952e-02 6.5728529e-02 4.6446952e-02 1.6389554e-02 GMTSAR_V5.7/.svn/pristine/50/50b4bbef7e89a25c6029ab7e311ff7c1ae529c98.svn-base000444 015705 000000 00000010200 13505462013 025743 0ustar00sandwellwheel000000 000000 13 19 8.5343789e-02 1.2628606e-02 1.2593889e-04 8.4641878e-08 3.8338198e-12 1.1703050e-17 2.4076172e-24 3.3380801e-32 3.1190839e-41 1.9641666e-51 8.3358632e-63 2.3842061e-75 4.5957669e-89 1.0961128e-01 1.0425174e-01 6.6823983e-03 2.8867047e-05 8.4041411e-09 1.6489417e-13 2.1804103e-19 1.9430864e-26 1.1669896e-34 4.7234882e-44 1.2884859e-54 2.3687403e-66 2.9347845e-79 3.6759359e-02 2.2471940e-01 9.2583622e-02 2.5706843e-03 4.8104344e-06 6.0665366e-10 5.1560643e-15 2.9533628e-21 1.1400824e-28 2.9660377e-37 5.2004157e-47 6.1449793e-58 4.8935471e-70 3.2189180e-03 1.2648153e-01 3.3493868e-01 5.9775670e-02 7.1895974e-04 5.8278139e-07 3.1836678e-11 1.1721165e-16 2.9082706e-23 4.8631740e-31 5.4805706e-40 4.1624854e-50 2.1305937e-61 7.3600577e-05 1.8588442e-02 3.1639219e-01 3.6293552e-01 2.8057836e-02 1.4618400e-04 5.1329436e-08 1.2146583e-12 1.9371476e-18 2.0820554e-25 1.5081440e-33 7.3623139e-43 2.4221823e-53 4.3942205e-07 7.1332623e-04 7.8039687e-02 5.7539200e-01 2.8591246e-01 9.5746594e-03 2.1608994e-05 3.2867506e-09 3.3691466e-14 2.3275234e-20 1.0836503e-27 3.4002062e-36 7.1902224e-46 6.8503346e-10 7.1476407e-06 5.0261403e-03 2.3819217e-01 7.6074889e-01 1.6374805e-01 2.3753737e-03 2.3222486e-06 1.5300529e-10 6.7939940e-16 2.0331286e-22 4.1003932e-30 5.5732323e-39 2.7885026e-13 1.8701074e-08 8.4524579e-05 2.5746634e-02 5.2854124e-01 7.3123719e-01 6.8180258e-02 4.2843010e-04 1.8143551e-07 5.1782806e-12 9.9602409e-18 1.2911452e-24 1.1279797e-32 2.9638733e-17 1.2776141e-11 3.7115964e-07 7.2667925e-04 9.5883914e-02 8.5264789e-01 5.1099266e-01 2.0638616e-02 5.6178154e-05 1.0305648e-08 1.2741019e-13 1.0615830e-19 5.9610772e-27 8.2257883e-22 2.2790937e-15 4.2556685e-10 5.3554304e-06 4.5419458e-03 2.5960347e-01 1.0000000e+00 2.5960347e-01 4.5419458e-03 5.3554304e-06 4.2556685e-10 2.2790937e-15 8.2257883e-22 5.9610772e-27 1.0615830e-19 1.2741019e-13 1.0305648e-08 5.6178154e-05 2.0638616e-02 5.1099266e-01 8.5264789e-01 9.5883914e-02 7.2667925e-04 3.7115964e-07 1.2776141e-11 2.9638733e-17 1.1279797e-32 1.2911452e-24 9.9602409e-18 5.1782806e-12 1.8143551e-07 4.2843010e-04 6.8180258e-02 7.3123719e-01 5.2854124e-01 2.5746634e-02 8.4524579e-05 1.8701074e-08 2.7885026e-13 5.5732323e-39 4.1003932e-30 2.0331286e-22 6.7939940e-16 1.5300529e-10 2.3222486e-06 2.3753737e-03 1.6374805e-01 7.6074889e-01 2.3819217e-01 5.0261403e-03 7.1476407e-06 6.8503346e-10 7.1902224e-46 3.4002062e-36 1.0836503e-27 2.3275234e-20 3.3691466e-14 3.2867506e-09 2.1608994e-05 9.5746594e-03 2.8591246e-01 5.7539200e-01 7.8039687e-02 7.1332623e-04 4.3942205e-07 2.4221823e-53 7.3623139e-43 1.5081440e-33 2.0820554e-25 1.9371476e-18 1.2146583e-12 5.1329436e-08 1.4618400e-04 2.8057836e-02 3.6293552e-01 3.1639219e-01 1.8588442e-02 7.3600577e-05 2.1305937e-61 4.1624854e-50 5.4805706e-40 4.8631740e-31 2.9082706e-23 1.1721165e-16 3.1836678e-11 5.8278139e-07 7.1895974e-04 5.9775670e-02 3.3493868e-01 1.2648153e-01 3.2189180e-03 4.8935471e-70 6.1449793e-58 5.2004157e-47 2.9660377e-37 1.1400824e-28 2.9533628e-21 5.1560643e-15 6.0665366e-10 4.8104344e-06 2.5706843e-03 9.2583622e-02 2.2471940e-01 3.6759359e-02 2.9347845e-79 2.3687403e-66 1.2884859e-54 4.7234882e-44 1.1669896e-34 1.9430864e-26 2.1804103e-19 1.6489417e-13 8.4041411e-09 2.8867047e-05 6.6823983e-03 1.0425174e-01 1.0961128e-01 4.5957669e-89 2.3842061e-75 8.3358632e-63 1.9641666e-51 3.1190839e-41 3.3380801e-32 2.4076172e-24 1.1703050e-17 3.8338198e-12 8.4641878e-08 1.2593889e-04 1.2628606e-02 8.5343789e-02 GMTSAR_V5.7/.svn/pristine/50/506309dd4d18ddc1b2ba7f1a7e0024c1a82cf7e7.svn-base000444 015705 000000 00000000540 13505462013 025720 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for tsx after 4 x 2 decimation so the 0.5 gain % is at 50 km wavelength % clear sigx=1.5; sigy=1.5; nx=5; ny=5; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_tsx_50m -ascii gauss GMTSAR_V5.7/.svn/pristine/3e/3ed237ac3b90b1d514c739f987dfeaa29d6a9e4b.svn-base000444 015705 000000 00000010761 13505462014 026125 0ustar00sandwellwheel000000 000000 SNAPHU Statistical-Cost, Netowrk-Flow Algorithm for Phase Unwrapping Author: Curtis W. Chen Version 1.4.2, January 2003 Contents -------- 1. Bugs and Bug Reporting 2. Notes on Compiling 3. Run-Time Configuration Files 4. Copyright Bugs And Bug Reporting ---------------------- Not all parts of snaphu have been well tested, so your bug reports and feedback are appreciated. Please email them to curtis@nova.stanford.edu The man page included with the distribution lists known issues as well. Thanks, and good luck with the unwrapping. Notes on Compiling ------------------ To compile, edit the Makefile in the src directory to specify your compiler, the optimization flags, and the desired directory for the executable. After that, run make and see what happens. Most of the code should be pretty standard, but a few of the library functions that are used may be unavailable on some systems. In some cases, the problem code may only perform error checking, so you might be able to comment out the unavailable functions without ill effects. For example, the IsFinite() function in snaphu_util.c is a wrapper for calling the library function finite(), which is unavailable on some systems. You can modify IsFinite() to use an alternate implementation that you do have, or you can have it always return TRUE. The code was developed mainly with gcc, but has been tested with a number of vendor C compilers. The latter tend to produce faster executables. I have not experimented with parallelizing compilers. The code is written to use multiple processors in tile mode by forking copies of itself to unwrap each tile. The structure of the solver does not lend itself to easy parallelization for a single tile, however. The CS2 MCF solver module is governed by the terms of the original authors (see the README.copyright file). In order to compile snaphu without this module, specify -D NO_CS2 as a compiler option in the Makefile. Run-Time Configuration Files ---------------------------- Two template run-time configuration files are provided in the config directory. The file snaphu.conf.brief contains the configuration parameters that a beginning user might need to specify. The file snaphu.conf.full contains all the options that the program will accept. Copyright --------- Copyright 2002 Board of Trustees, Leland Stanford Jr. University Except as noted below, permission to use, copy, modify, and distribute, this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of the copyright holders be used in advertising or publicity pertaining to distribution of the software with specific, written prior permission, and that no fee is charged for further distribution of this software, or any modifications thereof. The copyright holder makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, PROFITS, QPA OR GPA, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. The parts of this software derived from the CS2 minimum cost flow solver written by A. V. Goldberg and B. Cherkassky are governed by the terms of the copyright holder of that software. Permission has been granted to use and distrubute that software for strictly noncommercial purposes as part of this package, provided that the following copyright notice from the original distribution and URL accompany the software: COPYRIGHT C 1995 IG Systems, Inc. Permission to use for evaluation purposes is granted provided that proper acknowledgments are given. For a commercial licence, contact igsys@eclipse.net. This software comes with NO WARRANTY, expressed or implied. By way of example, but not limitation, we make no representations of warranties of merchantability or fitness for any particular purpose or that the use of the software components or documentation will not infringe any patents, copyrights, trademarks, or other rights. http://www.igsystems.com/cs2 GMTSAR_V5.7/.svn/pristine/3e/3edc99b52447d1c186a39404b7ec3954a479f0a5.svn-base000444 015705 000000 00000004114 13505462014 025542 0ustar00sandwellwheel000000 000000 /* * $Id: epr_field.h,v 1.1.1.1 2004-10-28 19:22:23 norman Exp $ * * Copyright (C) 2002 by Brockmann Consult (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. This program is distributed in the hope it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EPR_FIELD_H_INCL #define EPR_FIELD_H_INCL #ifdef __cplusplus extern "C" { #endif #include /* just to get the ANSI-C type FILE */ /** * The EPR_FieldInfo structure contains meta information * about a particular record field. */ struct EPR_FieldInfo { /** * This field's name. */ char* name; /** * This field's internal data type. */ EPR_EDataTypeId data_type_id; /** * The number of data elements contained in this field (field-width). */ uint num_elems; /** * This field's unit. Optional, can be NULL. */ char* unit; /** * This field's description. Optional, can be NULL. */ char* description; /** * The total size in bytes of all data elements of a field. * tot_size is a derived variable, it is computed at * runtime and not stored in the DSD-DB. */ uint tot_size; }; EPR_SFieldInfo* epr_create_field_info(EPR_EDataTypeId data_type_id, char* description, char* field_name, uint num_elems, uint num_bytes, uint more_count, char* unit); EPR_SField* epr_create_field(EPR_SFieldInfo* field_info); void epr_free_field_info(EPR_SFieldInfo* field_info); void epr_free_field(EPR_SField* field); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef EPR_FIELD_H_INCL */ GMTSAR_V5.7/.svn/pristine/66/66e5cd1f28b6b08d6fda301ad8019d45a92b28c2.svn-base000444 015705 000000 00000000020 13505462013 025653 0ustar00sandwellwheel000000 000000 1 1 1.0000 GMTSAR_V5.7/.svn/pristine/66/6670bb2d75f6406b6f9e7d0a8ef3cd90f4fc111a.svn-base000444 015705 000000 00000001265 13505462014 025762 0ustar00sandwellwheel000000 000000 .TH ERS_LINE_FIXER l "08/28/97 \(co JPL" "ers_line_fixer.l 1.0" .SH NAME ers_line_fixer \- fixes missing lines in raw ERS SAR data .SH SYNOPSIS .B ers_line_fixer .I -a -h header -l line -s .I station ifile ofile .SH DESCRIPTION The .B ers_line_fixer fixes missing lines in raw SAR data. .TP 10 .I -a align window sampling times .TP 10 .I -h header length (bytes) .TP 10 .I -l line length in bytes .TP 10 .I -s station - either DPAF/ESRIN, CO, EIC, UK, CCRS, or unknown .TP 10 .I input_file .TP 10 .I output_file .sp .TP 0 .B example: ers_line_fixer -s CCRS input.raw out.fix .SH SEE ALSO read_ccrs(l) CCT.format* files in /opt/siosar/src/pre_proc/read_ccrs/SAR_tape_data_description GMTSAR_V5.7/.svn/pristine/66/669e2f18f43c03b70393be78e83798d57c2b0ac7.svn-base000444 015705 000000 00000002147 13505462013 025503 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # David T. Sandwell, MAR 11, 2010 # # Clean the disk area in preparation for process2pass.csh # This should be run in the top directory. An ls will show # raw SLC intf topo # alias rm 'rm -f' unset noclobber # if ($#argv < 1) then echo " " echo "Usage: cleanup.csh directory " echo " " echo " directory could be: raw, SLC, topo, intf, or all " echo " " echo "Example: cleanup.csh all" echo " " exit 1 endif # # if( $1 == all) then echo "" echo "clean up all" rm -rf SLC rm -rf intf rm -f raw/*.PRM* rm -f raw/*.raw rm -f raw/*.LED rm -f raw/*.SLC cd topo ls | grep -v dem.grd | xargs rm -f cd .. echo "" endif if( $1 == raw) then echo "" echo "clean up raw/ folder" rm -f raw/*.PRM* rm -f raw/*.raw rm -f raw/*.LED echo "" endif if( $1 == SLC) then echo "" echo "clean up SLC/ folder" rm -rf SLC/* echo "" endif if( $1 == intf) then echo "" echo "clean up intf/ folder" rm -rf intf/* echo "" endif if ( $1 == topo ) then echo "" echo "clean up topo/ folder" cd topo ls | grep -v dem.grd | xargs rm -f cd .. echo "" endif GMTSAR_V5.7/.svn/pristine/0c/0c7ca0c728ce415ba8f08fffb63ec597c01af31a.svn-base000444 015705 000000 00000006075 13505462013 026157 0ustar00sandwellwheel000000 000000 #!/bin/bash -f # compute the mean LOS velocity and its standard deviations from a stack of unwrapped phase # Creator: Xiaopeng Tong, David Sandwell # Date: July 6th 2013 # Reference: GMTSAR document Appendix C if [ $# -ne 3 ]; then echo "" echo "Usage: stack_phase.bash stack.list mean.grd std.grd" echo "" echo " compute the mean LOS velocity (mm/yr) and its standard deviations" echo " from a stack of unwrapped phase" echo "" echo " Note the unwrapped phase can be pre-processed (detrended/filtered, etc)" echo "" echo " stack.list -- phase grd files to be stacked " echo " with PRM files corresponding to the interferogram" echo "" echo " example of the stack.list:" echo " unwrap_03562_05575.grd IMG-HH-ALPSRP035620660-H1.0__A.PRM IMG-HH-ALPSRP055750660-H1.0__A.PRM" echo " unwrap_03562_12956.grd IMG-HH-ALPSRP035620660-H1.0__A.PRM IMG-HH-ALPSRP129560660-H1.0__A.PRM" echo " unwrap_05575_12956.grd IMG-HH-ALPSRP055750660-H1.0__A.PRM IMG-HH-ALPSRP129560660-H1.0__A.PRM" echo "" echo " Make sure the required grd files and PRM files exist" echo "" echo " mean.grd -- output file: mean LOS velocity" echo " std.grd -- output file: standard deviation from the mean" echo "" exit 1 fi if [ ! -e $1 ] then echo "" echo "no input file found: $1" echo "" exit 1 fi list=$1 outmean=$2 outstd=$3 # compute the mean LOS velocity from the unwrapped phase echo echo " compute the mean LOS velocity .. " echo let "ac=0" exec<$list declare -a dayarray=() while read grd ref rep do # echo $grd $ref $rep if [ ! -e $grd ]; then echo "file does not exist: $grd" exit 1 fi year_ref=`grep SC_clock_start $ref | awk '{print $3}' | cut -c1-4` day_ref=`grep SC_clock_start $ref | awk '{print $3}' | cut -c5-7` year_rep=`grep SC_clock_start $rep | awk '{print $3}' | cut -c1-4` day_rep=`grep SC_clock_start $rep | awk '{print $3}' | cut -c5-7` numdays=`echo "($year_rep-$year_ref)*365+$day_rep-$day_ref" | bc` dayarray=(${dayarray[@]} $numdays) if [ "$numdays" -lt 0 ]; then echo "time span should be >= 0" exit 1 else echo "time span (days) of $grd:" $numdays fi if [ "$ac" -eq 0 ]; then gmt grdmath $grd = sum.grd wavel=`grep wavelength $ref | awk '{print($3)}'` else gmt grdmath $grd sum.grd ADD = tmp.grd mv tmp.grd sum.grd fi let "ac += $numdays" echo "accumulative days in the stack:" $ac done gmt grdmath sum.grd $ac DIV 365 MUL $wavel MUL -79.58 MUL = $outmean # compute the standard deviation from the mean LOS velocity echo echo " compute the standard deviations .. " echo let "num=0" exec<$list while read grd ref rep do if [ "$num" -eq 0 ]; then gmt grdmath $grd ${dayarray[$num]} DIV 365 MUL $wavel MUL -79.58 MUL $outmean SUB SQR = sum2.grd else gmt grdmath $grd ${dayarray[$num]} DIV 365 MUL $wavel MUL -79.58 MUL $outmean SUB SQR sum2.grd ADD = sum2tmp.grd mv sum2tmp.grd sum2.grd fi let "num += 1" done gmt grdmath sum2.grd $num DIV SQRT = $outstd # clean up rm sum.grd sum2.grd GMTSAR_V5.7/.svn/pristine/0c/0cd82c5dc0626f81e504f547f5d926d3413ee5c4.svn-base000444 015705 000000 00000007223 13505462013 025612 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_ENVI.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 200m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 200 # decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 1 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/0/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 60 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .12 GMTSAR_V5.7/.svn/pristine/0c/0caa62eba78e0f9cca568aa2844a159227109cc9.svn-base000444 015705 000000 00000004711 13505462013 025735 0ustar00sandwellwheel000000 000000 .TH ERS_REP_TIMES l "05 MAR 2000, Copyright 1997 David Sandwell" " " "SIOSAR Repeat Frame Alignment" .SH NAME ers_repeat_times \- calculates repeat_times of an ERS-2 pass given start and end times of an ERS-1/2 frame .SH SYNOPSIS .B ers_repeat_times .I ref_t0 ref_tf ref# rep_t0 rep# .SH DESCRIPTION The .B ers_repeat_times Command reads start-time and stop-time of reference frame and computes the corresponding times for a repeat pass. Precise orbit information, stored in ODR files, is used to calculate the position of the repeat_times corresponding to the times at the start and end of the reference orbit. The program returns the following information needed for makedpaf which extracts subsets of data from long data takes. .sp .br SC_clock_start - start time of repeat pass .br SC_clock_stop - stop time of repeat pass .br SC_ICU_start - start value of ICU onboard clock counter .br SC_ICU_stop - stop value of ICU onboard clock counter .br B_parallel - approximate parallel baseline .br B_perpendicular- approximate perpendicular baseline .br xshift - number of range cells to allign rep. to ref. .br .br .SH INPUT .TP 10 .I ref_t0 starting time of reference frame in format YYYYDDD.DDDD .TP 10 .I ref_tf ending time of reference frame in format YYYYDDD.DDDD .TP 10 .I ref# spacecraft number of reference (1)-ERS-1 (2)-ERS2 .TP 10 .I rep_t0 starting day of repeat frame in format YYYYDDD.00 .TP 10 .I rep# spacecraft number of repeat (2)-ERS2 .sp .SH EXAMPLE Compute repeat times and ICU clock counter for frames in the Salton Sea area. .br .sp ers_repeat_times 1996004.7659481482 1996004.7661548401 1 99169 2 .br SC_clock_start = 1999169.7658588917 .br SC_clock_stop = 1999169.7660655845 .br SC_MJD_start = 18065.7658588917 .br SC_MJD_stop = 18065.7660655846 .br SC_ICU_start = 3555330077.95 .br SC_ICU_stop = 3555334649.67 .br B_parallel = -162.02 .br B_perpendicular = -540.64 .br xshift = 20 .br .sp .SH SEE ALSO .B getorb software and precise orbit files were provided by Remko Scharroo (remko.scharroo@lr.tudelft.nl). For more up-to-date information on this package and the DUT orbits, netsurf to: .br http://www.deos.tudelft.nl/ers/precorbs/ .sp .br .SH AUTHOR David T. Sandwell, Scripps Institution of Oceanography .SH DIAGNOSTICS 11 NOV 1997 - bug fixed on computation of repeat_times 05 MAR 2000 - fixed Y2K bugs and expanded year to YYYY GMTSAR_V5.7/.svn/pristine/92/9205eb41f541fdd5c600d0edfcda02e45d58f1c6.svn-base000444 015705 000000 00000000627 13505462014 026022 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = ALOS_mosaic_ss_2frames CSRCS = ALOS_mosaic_ss_2frames.c OBJS = $(CSRCS:.c=.o) INCLUDES = -I../include -I../../../gmtsar $(GMT_INC) CLIBS = -L../lib -lALOS -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(CLIBS) $(GMTSAR) $(GMT_LIB) $(INCLUDES) all: $(PROG) install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) clean: rm -f $(OBJS) tags core GMTSAR_V5.7/.svn/pristine/92/92ff7e646824fab2cd56ebf7e3825956855569f4.svn-base000444 015705 000000 00000000471 13505462014 025530 0ustar00sandwellwheel000000 000000 include ../../../config.mk PROG = read_sarleader_ccrs CSRCS = read_sarleader_ccrs.c make_prm_ccrs.c OBJS = $(CSRCS:.c=.o) LIBS = -lm $(PROG): $(OBJS) $(LINK.c) -o $@ $(OBJS) $(LIBS) all: $(PROG) clean: rm -f $(OBJS) tags core install: $(INSTALL) $(PROG) $(bindir) uninstall: rm -f $(bindir)/$(PROG) GMTSAR_V5.7/.svn/pristine/59/595293d81991ef35c767049214d6e001053fe927.svn-base000444 015705 000000 00000014555 13505462013 025131 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # generate interferograms for tops stacks # used for time series analysis # Xiaohua(Eric) Xu, Jan 20 2016 # if ($#argv != 2) then echo "" echo "Usage: intf_tops.csh intf.in batch_tops.config" echo " generate interferograms for a set of tops images in intf.in, dem required in ./topo" echo " supermaster's name required in batch_tops.config" echo "" echo " format of data.in:" echo " master_image_stem:slave_image_stem" echo "" echo " example of data.in" echo " S1_20150628_ALL_F1:S1_20150720_ALL_F1" echo " S1_20150720_ALL_F1:S1_20150809_ALL_F1" echo "" echo " outputs:" echo " to ./intf_all" echo "" exit 1 endif # # make sure the files exist # if (! -f $1) then echo "no input file:" $2 exit endif if (! -f $2) then echo "no config file:" $2 exit endif # # read parameters from config file # set stage = `grep proc_stage $2 | awk '{print $3}'` set master = `grep master_image $2 | awk '{print $3}'` # # if filter wavelength is not set then use a default of 200m # set filter = `grep filter_wavelength $2 | awk '{print $3}'` if ( "x$filter" == "x" ) then set filter = 200 echo " " echo "WARNING filter wavelength was not set in config.txt file" echo " please specify wavelength (e.g., filter_wavelength = 200)" echo " remove filter1 = gauss_alos_200m" endif set dec = `grep dec_factor $2 | awk '{print $3}'` set topo_phase = `grep topo_phase $2 | awk '{print $3}'` set shift_topo = `grep shift_topo $2 | awk '{print $3}'` set threshold_snaphu = `grep threshold_snaphu $2 | awk '{print $3}'` set threshold_geocode = `grep threshold_geocode $2 | awk '{print $3}'` set region_cut = `grep region_cut $2 | awk '{print $3}'` set switch_land = `grep switch_land $2 | awk '{print $3}'` set defomax = `grep defomax $2 | awk '{print $3}'` set range_dec = `grep range_dec $2 | awk '{print $3}'` set azimuth_dec = `grep azimuth_dec $2 | awk '{print $3}'` set near_interp = `grep near_interp $2 | awk '{print $3}'` ################################## # 1 - start from make topo_ra # ################################## if ($stage <= 1) then # # clean up # cleanup.csh topo # # make topo_ra # if ($topo_phase == 1) then echo " " echo "DEM2TOPOPHASE.CSH - START" echo "USER SHOULD PROVIDE DEM FILE" cd topo cp ../raw/$master.PRM ./master.PRM ln -s ../raw/$master.LED . if (-f dem.grd) then dem2topo_ra.csh master.PRM dem.grd else echo "no DEM file found: " dem.grd exit 1 endif cd .. echo "DEM2TOPOPHASE.CSH - END" # # shift topo_ra # if ($shift_topo == 1) then echo " " echo "OFFSET_TOPO - START" cd topo ln -s ../raw/$master.SLC . slc2amp.csh master.PRM 4 amp-$master.grd offset_topo amp-$master.grd topo_ra.grd 0 0 7 topo_shift.grd cd .. echo "OFFSET_TOPO - END" else if ($shift_topo == 0) then echo "NO TOPOPHASE SHIFT " else echo "Wrong paramter: shift_topo "$shift_topo exit 1 endif else if ($topo_phase == 0) then echo "NO TOPOPHASE IS SUBSTRACTED" else echo "Wrong paramter: topo_phase "$topo_phase exit 1 endif endif ################################################## # 2 - start from make and filter interferograms # # unwrap phase and geocode # ################################################## if ($stage <= 2) then # # make working directories # echo "" echo "START FORM A STACK OF INTERFEROGRAMS" echo "" mkdir -p intf/ mkdir -p intf_all/ # # loop over intf.in # foreach line (`awk '{print $0}' $1`) set ref = `echo $line | awk -F: '{print $1}'` set rep = `echo $line | awk -F: '{print $2}'` set ref_id = `grep SC_clock_start ./raw/$ref.PRM | awk '{printf("%d",int($3))}' ` set rep_id = `grep SC_clock_start ./raw/$rep.PRM | awk '{printf("%d",int($3))}' ` echo "" echo "INTF.CSH, FILTER.CSH - START" cd intf mkdir $ref_id"_"$rep_id cd $ref_id"_"$rep_id ln -s ../../raw/$ref.LED . ln -s ../../raw/$rep.LED . ln -s ../../raw/$ref.SLC . ln -s ../../raw/$rep.SLC . cp ../../raw/$ref.PRM . cp ../../raw/$rep.PRM . if ($region_cut != "") then echo "Cutting SLC image to $region_cut" cut_slc $ref.PRM junk1 $region_cut cut_slc $rep.PRM junk2 $region_cut mv junk1.PRM $ref.PRM mv junk2.PRM $rep.PRM mv junk1.SLC $ref.SLC mv junk2.SLC $rep.SLC endif if($topo_phase == 1) then if($shift_topo == 1) then ln -s ../../topo/topo_shift.grd . intf.csh $ref.PRM $rep.PRM -topo topo_shift.grd else ln -s ../../topo/topo_ra.grd . intf.csh $ref.PRM $rep.PRM -topo topo_ra.grd endif else intf.csh $ref.PRM $rep.PRM endif filter.csh $ref.PRM $rep.PRM $filter $dec $range_dec $azimuth_dec echo "INTF.CSH, FILTER.CSH - END" # # unwrapping # if ($threshold_snaphu != 0 ) then if ($switch_land == 1) then if ($region_cut == "") then set region_cut = `gmt grdinfo phase.grd -I- | cut -c3-20` endif cd ../../topo if (! -f landmask_ra.grd) then landmask.csh $region_cut endif cd ../intf cd $ref_id"_"$rep_id ln -s ../../topo/landmask_ra.grd . endif echo "" echo "SNAPHU.CSH - START" echo "threshold_snaphu: $threshold_snaphu" if ($near_interp == 1) then snaphu_interp.csh $threshold_snaphu $defomax $region_cut else snaphu.csh $threshold_snaphu $defomax $region_cut endif echo "SNAPHU.CSH - END" else echo "" echo "SKIP UNWRAP PHASE" endif # # geocoding # echo "" echo "GEOCODE.CSH - START" if ($topo_phase == 1 && $threshold_geocode != 0) then if (-f raln.grd) rm raln.grd if (-f ralt.grd) rm ralt.grd rm trans.dat ln -s ../../topo/trans.dat . echo "threshold_geocode: $threshold_geocode" geocode.csh $threshold_geocode else if($topo_phase == 1 && $threshold_geocode == 0) then echo "SKIP GEOCODING" else echo "topo_ra is needed to geocode" exit 1 endif cd ../.. if(-f intf_all/$ref_id"_"$rep_id) rm -rf intf_all/$ref_id"_"$rep_id mv intf/$ref_id"_"$rep_id intf_all/$ref_id"_"$rep_id end endif echo "" echo "END STACK OF TOPS INTERFEROGRAMS" echo "" GMTSAR_V5.7/.svn/pristine/59/597391956e1e74d0e25432a0ab007be3a4df524d.svn-base000444 015705 000000 00000010267 13505462013 025451 0ustar00sandwellwheel000000 000000 #!/bin/csh -f # $Id$ # # alias rm 'rm -f' unset noclobber # if ($#argv < 2) then errormessage: echo "" echo "snaphu.csh [GMTSAR] - Unwrap the phase" echo " " echo "Usage: snaphu.csh correlation_threshold maximum_discontinuity [///]" echo "" echo " correlation is reset to zero when < threshold" echo " maximum_discontinuity enables phase jumps for earthquake ruptures, etc." echo " set maximum_discontinuity = 0 for continuous phase such as interseismic " echo "" echo "Example: snaphu.csh .12 40 1000/3000/24000/27000" echo "" echo "Reference:" echo "Chen C. W. and H. A. Zebker, Network approaches to two-dimensional phase unwrapping: intractability and two new algorithms, Journal of the Optical Society of America A, vol. 17, pp. 401-414 (2000)." exit 1 endif # if ( -f ~/.quiet ) then set V = "" else set V = "-V" endif # prepare the files adding the correlation mask # if ($#argv == 3 ) then gmt grdcut mask.grd -R$3 -Gmask_patch.grd gmt grdcut corr.grd -R$3 -Gcorr_patch.grd gmt grdcut phasefilt.grd -R$3 -Gphase_patch.grd else ln -s mask.grd mask_patch.grd ln -s corr.grd corr_patch.grd ln -s phasefilt.grd phase_patch.grd endif # # create landmask # if (-e landmask_ra.grd) then if ($#argv == 3 ) then gmt grdsample landmask_ra.grd -R$3 `gmt grdinfo -I phase_patch.grd` -Glandmask_ra_patch.grd else gmt grdsample landmask_ra.grd `gmt grdinfo -I phase_patch.grd` -Glandmask_ra_patch.grd endif gmt grdmath phase_patch.grd landmask_ra_patch.grd MUL = phase_patch.grd $V endif # # user defined mask # if (-e mask_def.grd) then if ($#argv == 3 ) then gmt grdcut mask_def.grd -R$3 -Gmask_def_patch.grd else cp mask_def.grd mask_def_patch.grd endif gmt grdmath corr_patch.grd mask_def_patch.grd MUL = corr_patch.grd $V endif gmt grdmath corr_patch.grd $1 GE 0 NAN mask_patch.grd MUL = mask2_patch.grd gmt grdmath corr_patch.grd 0. XOR 1. MIN = corr_patch.grd gmt grdmath mask2_patch.grd corr_patch.grd MUL = corr_tmp.grd gmt grd2xyz phase_patch.grd -ZTLf -do0 > phase.in gmt grd2xyz corr_tmp.grd -ZTLf -do0 > corr.in # # run snaphu # set sharedir = `gmtsar_sharedir.csh` echo "unwrapping phase with snaphu - higher threshold for faster unwrapping " if ($2 == 0) then snaphu phase.in `gmt grdinfo -C phase_patch.grd | cut -f 10` -f $sharedir/snaphu/config/snaphu.conf.brief -c corr.in -o unwrap.out -v -s else sed "s/.*DEFOMAX_CYCLE.*/DEFOMAX_CYCLE $2/g" $sharedir/snaphu/config/snaphu.conf.brief > snaphu.conf.brief snaphu phase.in `gmt grdinfo -C phase_patch.grd | cut -f 10` -f snaphu.conf.brief -c corr.in -o unwrap.out -v -d endif # # convert to grd # gmt xyz2grd unwrap.out -ZTLf -r `gmt grdinfo -I- phase_patch.grd` `gmt grdinfo -I phase_patch.grd` -Gtmp.grd #gmt grdmath tmp.grd mask2_patch.grd MUL = tmp.grd gmt grdmath tmp.grd mask_patch.grd MUL = tmp.grd # # detrend the unwrapped if DEFOMAX = 0 for interseismic # #if ($2 == 0) then # gmt grdtrend tmp.grd -N3r -Dunwrap.grd #else mv tmp.grd unwrap.grd #endif # # landmask if (-e landmask_ra.grd) then gmt grdmath unwrap.grd landmask_ra_patch.grd MUL = tmp.grd $V mv tmp.grd unwrap.grd endif # # user defined mask # if (-e mask_def.grd) then gmt grdmath unwrap.grd mask_def_patch.grd MUL = tmp.grd $V mv tmp.grd unwrap.grd endif # # plot the unwrapped phase # gmt grdgradient unwrap.grd -Nt.9 -A0. -Gunwrap_grad.grd set tmp = `gmt grdinfo -C -L2 unwrap.grd` set limitU = `echo $tmp | awk '{printf("%5.1f", $12+$13*2)}'` set limitL = `echo $tmp | awk '{printf("%5.1f", $12-$13*2)}'` set std = `echo $tmp | awk '{printf("%5.1f", $13)}'` gmt makecpt -Cseis -I -Z -T"$limitL"/"$limitU"/1 -D > unwrap.cpt gmt grdimage unwrap.grd -Iunwrap_grad.grd -Cunwrap.cpt -JX6.5i -Bxaf+lRange -Byaf+lAzimuth -BWSen -X1.3i -Y3i -P -K > unwrap.ps gmt psscale -Runwrap.grd -J -DJTC+w5/0.2+h+e -Cunwrap.cpt -Bxaf+l"Unwrapped phase" -By+lrad -O >> unwrap.ps gmt psconvert -Tf -P -Z unwrap.ps echo "Unwrapped phase map: unwrap.pdf" # # clean up # rm -f tmp.grd corr_tmp.grd unwrap.out tmp2.grd unwrap_grad.grd rm -f phase.in corr.in # # cleanup more # rm -f mask_patch.grd mask3.grd mask3.out #rm -f wrap.grd rm -f corr_cut.grd corr_patch.grd # GMTSAR_V5.7/.svn/pristine/95/9513672e2b6785c612edf72f5a5caa978266a212.svn-base000444 015705 000000 00000000711 13505462014 025405 0ustar00sandwellwheel000000 000000 include ../../config.mk # # make all the files # DIRS = src_slc src_raw all: $(LN_S) -f ../S1A_preproc/include include $(LN_S) -f ../S1A_preproc/lib lib for d in $(DIRS); do \ (cd $$d; $(MAKE) all); \ done install: all for d in $(DIRS); do \ (cd $$d; $(MAKE) install); \ done uninstall: for d in src_slc src_raw; do \ (cd $$d; $(MAKE) uninstall); \ done clean: for d in $(DIRS); do \ (cd $$d; $(MAKE) clean); \ done spotless: clean GMTSAR_V5.7/.svn/pristine/95/95f813c0c22eba1ccf47fd9e1a5310f12abe3b46.svn-base000444 015705 000000 00000000306 13505462014 026010 0ustar00sandwellwheel000000 000000 #!/bin/csh # # don't include the .-files # setenv COPYFILE_DISABLE true # # create the tar file # setenv COPYFILE_DISABLE true # tar -cvf ../../ALOS_preproc_ERSDAC_AUIG.1.2.tar ../ALOS_preproc # GMTSAR_V5.7/.svn/pristine/95/95bc9958e183e888a72c6262a6159498766736b9.svn-base000444 015705 000000 00000070747 13505462013 025200 0ustar00sandwellwheel000000 000000 /* $Id: sbas.h 39 2016-06-18 03/16/24 Xiaohua Xu $ */ /***************************************************************************************** * Program to do InSAR time-series analysis. * Use Small Baseline Subset (SBAS) *algorithm. * * * * Xiaohua Xu and David T. Sandwell, Jul, 2016 * * * * Taking the old sbas code to add atmospheric correction by means of common *point64_t * stacking by Tymofeyeva & Fialko 2015. * * * ***************************************************************************************** * Creator: Xiaopeng Tong and David Sandwell ** (Scripps Institution of Oceanography) * Date: 12/23/2012 ** ****************************************************************************************/ /***************************************************************************************** * Modification history: ** 08/31/2013 debug the program ** 03/20/2014 add DEM error, mean velocity ** 03/22/2014 add correlation, use weighted least-squares ** 04/01/2014 add seasonal term ** 08/19/2014 allocate memory with 1D array instead of multiple malloc * * 08/19/2014 do not require the velocity curve go through origin * 08/19/2014 *remove seasonal term * * 08/19/2014 fix temporal smoothing * ****************************************************************************************/ /* Reference: P. Berardino, G. Fornaro, R. Lanari, and E. Sansosti, “A new algorithm for surface deformation monitoring based on small baseline differential SAR interferograms,” IEEE Trans. Geosci. Remote Sensing, vol. 40, pp. 2375–2383, Nov. 2002. Schmidt, D. A., and R. Bürgmann(2003), Time-dependent land uplift and subsidence in the Santa Clara valley, California, from a large interferometric synthetic aperture radar data set, J. Geophys. Res., 108, 2416, doi:10.1029/2002JB002267, B9. */ /* Use DGELSY to solve the equations */ /* Calling DGELSY using column-major order */ #include "gmtsar.h" #include #define Malloc(type, n) (type *)malloc((n) * sizeof(type)) #define max(a, b) (((a) > (b)) ? (a) : (b)) #ifdef DEBUG #define checkpoint() printf("Checkpoint64_t at line %lld in file %s\n", __LINE__, __FILE__) #else #define checkpoint() #endif char *sbas_USAGE = " \n\nUSAGE: sbas intf.tab scene.tab N S xdim ydim [-atm ni] [-smooth sf] " "[-wavelength wl] [-incidence inc] [-range -rng] [-rms] [-dem]\n\n" " input: \n" "intf.tab -- list of unwrapped (filtered) interferograms:\n" " format: unwrap.grd corr.grd ref_id rep_id B_perp \n" "scene.tab -- list of the SAR scenes in chronological order\n" " format: scene_id number_of_days \n" " note: the number_of_days is relative to a reference date \n" "N -- number of the interferograms\n" "S -- number of the SAR scenes \n" "xdim and ydim -- dimension of the interferograms\n" "-smooth sf -- smoothing factors, default=0 \n" "-atm ni -- number of iterations for atmospheric correction, " "default=0(skip atm correction) \n" "-wavelength wl -- wavelength of the radar wave (m) default=0.236 \n" "-incidence theta -- incidence angle of the radar wave (degree) " "default=37 \n" "-range rng -- range distance from the radar to the center of the " "interferogram (m) default=866000 \n" "-rms -- output RMS of the data misfit grids (mm): rms.grd\n" "-dem -- output DEM error (m): dem.grd \n\n" " output: \n" "disp_##.grd -- cumulative displacement time series (mm) grids\n" "vel.grd -- mean velocity (mm/yr) grids \n\n" " example:\n" " sbas intf.tab scene.tab 88 28 700 1000 \n\n"; void dgelsy_(const int64_t *m, const int64_t *n, const int64_t *nrhs, double *G, const int64_t *lda, double *b, const int64_t *ldb, int64_t *jpvt, const double *rcond, const int64_t *rank, double *work, const int64_t *lwork, const int64_t *info); int parse_command_ts(int64_t agc, char **agv, float *sf, double *wl, double *theta, double *rng, int64_t *flag_rms, int64_t *flag_dem, int64_t *atm) { int64_t i; for (i = 7; i < agc; i++) { if (!strcmp(agv[i], "-smooth")) { i++; if (i == agc) die("no option after -smooth!\n", ""); *sf = atof(agv[i]); } else if (!strcmp(agv[i], "-wavelength")) { i++; if (i == agc) die("no option after -wavelength!\n", ""); *wl = atof(agv[i]); } else if (!strcmp(agv[i], "-incidence")) { i++; if (i == agc) die("no option after -incidence! \n", ""); *theta = atof(agv[i]); } else if (!strcmp(agv[i], "-range")) { i++; if (i == agc) die("no option after -range \n", ""); *rng = atof(agv[i]); } else if (!strcmp(agv[i], "-rms")) { *flag_rms = 1; fprintf(stderr, "compute RMS misfit\n"); } else if (!strcmp(agv[i], "-dem")) { *flag_dem = 1; fprintf(stderr, "compute DEM error\n"); } else if (!strcmp(agv[i], "-atm")) { i++; if (i == agc) die("no option after -atm \n", ""); *atm = atoi(agv[i]); } else { fprintf(stderr, " %s *** option not recognized ***\n\n", agv[i]); fprintf(stderr, "%s", sbas_USAGE); exit(1); } } fprintf(stderr, "\nsetting smoothing to %7.3lf \n", *sf); fprintf(stderr, "setting radar wavelength to %7.3lf m \n", *wl); fprintf(stderr, "setting radar incidence angle to %7.3lf degree \n", *theta); fprintf(stderr, "setting range to %9.3lf m \n", *rng); return (1); } int allocate_memory_ts(int64_t **jpvt, double **work, double **d, double **ds, float **bperp, char ***gfile, char ***cfile, int64_t **L, double **time, int64_t **H, double **G, double **A, double **Gs, int64_t **flag, float **dem, float **res, float **vel, float **phi, float **var, float **disp, int64_t n, int64_t m, int64_t lwork, int64_t ldb, int64_t N, int64_t S, int64_t xdim, int64_t ydim, int64_t **hit) { int64_t i; char **p1, **p2; if ((*jpvt = Malloc(int64_t, n)) == NULL) die("memory allocation!", "jpvt"); if ((*work = Malloc(double, lwork)) == NULL) die("memory allocation!", "work"); if ((*d = Malloc(double, ldb)) == NULL) die("memory allocation!", "d"); if ((*ds = Malloc(double, N)) == NULL) die("memory allocation!", "ds"); if ((*bperp = Malloc(float, N)) == NULL) die("memory allocation!", "bperp"); if ((*gfile = Malloc(char *, N)) == NULL) die("memory allocation!", "gfile"); if ((*cfile = Malloc(char *, N)) == NULL) die("memory allocation!", "cfile"); p1 = *gfile; p2 = *cfile; for (i = 0; i < N; i++) { if ((p1[i] = Malloc(char, 256)) == NULL) die("memory allocation!", "gfile[i]"); if ((p2[i] = Malloc(char, 256)) == NULL) die("memory allocation!", "cfile[i]"); } if ((*L = Malloc(int64_t, S)) == NULL) die("memory allocation!", "L"); if ((*time = Malloc(double, S)) == NULL) die("memory allocation!", "time"); if ((*H = Malloc(int64_t, N * 2)) == NULL) die("memory allocation!", "H"); if ((*G = Malloc(double, m *n)) == NULL) die("memory allocation!", "G"); if ((*A = Malloc(double, m *n)) == NULL) die("memory allocation!", "A"); if ((*Gs = Malloc(double, N *n)) == NULL) die("memory allocation!", "Gs"); if ((*flag = Malloc(int64_t, xdim * ydim)) == NULL) die("memory allocation!", "flag"); if ((*dem = Malloc(float, xdim *ydim)) == NULL) die("memory allocation!", "dem"); if ((*res = Malloc(float, xdim *ydim)) == NULL) die("memory allocation!", "res"); if ((*vel = Malloc(float, xdim *ydim)) == NULL) die("memory allocation!", "vel"); if ((*phi = Malloc(float, N *xdim *ydim)) == NULL) die("memory allocation!", "phi"); if ((*var = Malloc(float, N *xdim *ydim)) == NULL) die("memory allocation!", "var"); if ((*disp = Malloc(float, S *xdim *ydim)) == NULL) die("memory allocation!", "disp"); if ((*hit = Malloc(int64_t, S * S)) == NULL) die("memory allocation!", "hit"); printf("Memory Allocation Successful...\n"); return (1); } int init_array_ts(double *G, double *Gs, float *res, float *dem, float *disp, int64_t n, int64_t m, int64_t xdim, int64_t ydim, int64_t N, int64_t S) { int64_t i, j, k, p; for (i = 0; i < m * n; i++) G[i] = 0; for (i = 0; i < n * N; i++) Gs[i] = 0; for (k = 0; k < ydim; k++) { for (j = 0; j < xdim; j++) { res[j + xdim * k] = 0; dem[j + xdim * k] = 0; for (p = 0; p < S; p++) { disp[p * xdim * ydim + j * ydim + k] = 0; } } } return (1); } int read_table_data_ts(void *API, FILE *infile, FILE *datefile, char **gfile, char **cfile, int64_t *H, float *bperp, int64_t *flag, float *var, float *phi, int64_t S, int64_t N, int64_t xdim, int64_t ydim, struct GMT_GRID **Out, int64_t *L, double *time) { char tmp1[200], tmp2[200], tmp3[200]; int64_t i, j, k, xin, yin; float *corin, *grdin; struct GMT_GRID *CC = NULL, *GG = NULL; printf("read table file ...\n"); /* read in scene.tab */ i = 0; while (fscanf(datefile, "%s %s", &tmp1[0], &tmp2[0]) == 2) { if (feof(datefile)) break; L[i] = atoi(tmp1); time[i] = atof(tmp2); i = i + 1; } if (i != S) die("S and number of the SAR scenes don't match!", ""); fprintf(stderr, "number of SAR scenes is %lld \n", S); for (i = S - 1; i >= 0; i--) time[i] = time[i] - time[0]; /* read in intf.tab */ i = 0; while (fscanf(infile, "%s %s %s %s %s", gfile[i], cfile[i], &tmp1[0], &tmp2[0], &tmp3[0]) == 5) { if (feof(infile)) break; H[i * 2 + 0] = atoi(tmp1); H[i * 2 + 1] = atoi(tmp2); bperp[i] = atof(tmp3); i = i + 1; } if (i != N) die("N and number of interferograms don't match!", ""); fprintf(stderr, "number of interferograms is %lld \n", N); /* read in N 2-dimensional grd file into 3D array */ printf("read phase and correlation grids ...\n"); for (i = 0; i < N; i++) { if ((CC = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, cfile[i], NULL)) == NULL) die("Can't open ", cfile[i]); xin = CC->header->nx; yin = CC->header->ny; if (xin != xdim || yin != ydim) die("dimension don't match!", cfile[i]); if ((GG = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_HEADER_ONLY, NULL, gfile[i], NULL)) == NULL) die("Can't open ", gfile[i]); xin = GG->header->nx; yin = GG->header->ny; if (xin != xdim || yin != ydim) die("dimension don't match!", gfile[i]); if ((CC = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, cfile[i], CC)) == NULL) die("Can't read ", cfile[i]); if ((GG = GMT_Read_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_DATA_ONLY, NULL, gfile[i], GG)) == NULL) die("Can't read ", gfile[i]); corin = CC->data; grdin = GG->data; for (k = 0; k < ydim; k++) { for (j = 0; j < xdim; j++) { phi[i * xdim * ydim + ydim * j + k] = grdin[j + k * xdim]; if (isnan(grdin[j + k * xdim]) != 0) { flag[j + xdim] = 1; } if (corin[j + k * xdim] >= 1e-2 && corin[j + k * xdim] <= 0.99) { /* Rosen et al., 2000 IEEE */ var[i * xdim * ydim + ydim * j + k] = sqrt((1.0 - corin[j + k * xdim] * corin[j + k * xdim]) / (corin[j + k * xdim] * corin[j + k * xdim])); } else if (corin[j + k * xdim] < 1e-2) { var[i * xdim * ydim + j * ydim + k] = 99.99; } else { var[i * xdim * ydim + j * ydim + k] = 0.1; } } } if (*Out == NULL && (*Out = GMT_Duplicate_Data(API, GMT_IS_GRID, GMT_DUPLICATE_DATA, CC)) == NULL) die("error creating output grid", ""); /* Do this once */ if (GMT_Destroy_Data(API, &CC)) die("error freeing data", cfile[i]); if (GMT_Destroy_Data(API, &GG)) die("error freeing data", gfile[i]); } return (1); } int init_G_ts(double *G, double *Gs, int64_t N, int64_t S, int64_t m, int64_t n, int64_t *L, int64_t *H, double *time, float sf, float *bperp, double scale) { int64_t i, j; printf("fill the G matrix ...\n"); for (i = 0; i < N; i++) { for (j = 0; j < S - 1; j++) { if (L[j] >= H[i * 2 + 0] && L[j] < H[i * 2 + 1]) { G[i + m * j] = 1; Gs[i + N * j] = 1; } } G[i + m * (n - 1)] = bperp[i] * scale; Gs[i + N * (n - 1)] = bperp[i] * scale; } for (i = 0; i < S - 2; i++) { G[i + N + i * m] = sf / (time[i + 1] - time[i]); G[i + N + (i + 1) * m] = -sf / (time[i + 2] - time[i + 1]); } return (1); } int64_t lsqlin_sov_ts(int64_t xdim, int64_t ydim, float *disp, float *vel, int64_t *flag, double *d, double *ds, double *time, double *G, double *Gs, double *A, float *var, float *phi, int64_t N, int64_t S, int64_t m, int64_t n, double *work, int64_t lwork, int64_t flag_dem, float *dem, int64_t flag_rms, float *res, int64_t *jpvt, double wl, double *atm_rms) { int64_t i, j, k, p, info = 0; int64_t rank = 0, nrhs = 1, lda, ldb; // double rcond = 1e-3,pred; double rcond = 1e-3; double sumxx, sumxy, sumx, sumy, sumyy, aa; // float new,old; int64_t count; lda = max(1, m); ldb = max(1, max(m, n)); count = 0; for (i = 0; i < S; i++) if (atm_rms[i] != 0.0 && i != 0 && i != 1 && i != S - 1 && i != S - 2) count++; printf("run least-squares problem over %lld by %lld pixel (%lld) ...\n", xdim, ydim, count); for (k = 0; k < ydim; k++) { for (j = 0; j < xdim; j++) { /* check the dummy value of the grd file */ if (flag[j + xdim * k] != 1) { for (i = 0; i < m; i++) { d[i] = 0; if (i < N) { d[i] = (double)phi[i * xdim * ydim + ydim * j + k] / var[i * xdim * ydim + ydim * j + k]; ds[i] = d[i]; } } for (i = 0; i < m; i++) { for (p = 0; p < n; p++) { if (i < N) { G[i + m * p] = A[i + m * p] / var[i * xdim * ydim + ydim * j + k]; } else { G[i + m * p] = A[i + m * p]; } } } dgelsy_(&m, &n, &nrhs, G, &lda, d, &ldb, jpvt, &rcond, &rank, work, &lwork, &info); if (info != 0) printf("warning! input has an illegal value\n"); if (j == 0 && k == 0) { if (rank == n) { printf("matrix is full rank: %lld\n\n", rank); } else if (rank < n) { printf("matrix is rank-deficient: %lld\n\n", rank); if (rank == 0) { printf("WARNING: rank is zero. Check scene.tab and intf.tab for " "possible duplicates.\n\n"); for (i = 0; i < N; i++) { for (p = 0; p < S - 1; p++) { printf("%.2f ", G[i + S * p]); } printf("\n"); } } } } for (i = 0; i < S; i++) { for (p = 0; p < i; p++) { disp[i * xdim * ydim + j * ydim + k] = disp[i * xdim * ydim + j * ydim + k] + d[p]; } // disp[i*xdim*ydim+j*ydim+k]=-79.58*wl*disp[i*xdim*ydim+j*ydim+k]; // //1000/4/pi } if (flag_dem == 1) dem[j + xdim * k] = d[n - 1]; /* if (flag_rms == 1) { new=0; old=0; // check the WRMS reduction for (i=0;i 2) { for (i = 2; i < S - 2; i++) { if (atm_rms[i] != 0.0) { sumxy = sumxy + time[i] * disp[i * xdim * ydim + j * ydim + k]; sumxx = sumxx + time[i] * time[i]; sumy = sumy + disp[i * xdim * ydim + j * ydim + k]; sumx = sumx + time[i]; } } vel[j + xdim * k] = -79.58 * wl * (count * sumxy - sumx * sumy) / (count * sumxx - sumx * sumx) * 365.0; if (flag_rms == 1) { aa = sumy / count - (count * sumxy - sumx * sumy) / (count * sumxx - sumx * sumx) * sumx / count; for (i = 2; i < S - 2; i++) { if (atm_rms[i] != 0.0) { sumyy = sumyy + pow((disp[i * xdim * ydim + j * ydim + k] - time[i] * vel[j + xdim * k] / (-79.58 * wl * 365) - aa), 2); } } res[j + xdim * k] = sqrt(count * sumyy / ((count - 2) * (count * sumxx - sumx * sumx))) * (79.58 * wl * 365); } } else { for (i = 0; i < S; i++) { sumxy = sumxy + time[i] * disp[i * xdim * ydim + j * ydim + k]; sumxx = sumxx + time[i] * time[i]; sumy = sumy + disp[i * xdim * ydim + j * ydim + k]; sumx = sumx + time[i]; } vel[j + xdim * k] = -79.58 * wl * (S * sumxy - sumx * sumy) / (S * sumxx - sumx * sumx) * 365.0; if (flag_rms == 1) { aa = sumy / S - (S * sumxy - sumx * sumy) / (S * sumxx - sumx * sumx) * sumx / S; for (i = 2; i < S - 2; i++) { sumyy = sumyy + pow((disp[i * xdim * ydim + j * ydim + k] - time[i] * vel[j + xdim * k] / (-79.58 * wl * 365) - aa), 2); } res[j + xdim * k] = sqrt(S * sumyy / ((S - 2) * (S * sumxx - sumx * sumx))) * (79.58 * wl * 365); } } } else { for (i = 0; i < S; i++) disp[i * xdim * ydim + j * ydim + k] = NAN; vel[j + xdim * k] = NAN; if (flag_rms == 1) res[j + xdim * k] = NAN; if (flag_dem == 1) dem[j + xdim * k] = NAN; } } } return (1); } int write_output_ts(void *API, struct GMT_GRID *Out, int64_t agc, char **agv, int64_t xdim, int64_t ydim, int64_t S, int64_t flag_rms, int64_t flag_dem, float *disp, float *vel, float *res, float *dem, float *screen, double wl, int64_t n_atm, int64_t *L) { int64_t i, j, k; float *grdin, *save_grid; char tmp1[200], outfile[200]; printf("write output ...\n"); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); strcpy(tmp1, ""); for (i = 0; i < agc; i++) { strcat(tmp1, agv[i]); strcat(tmp1, " "); } strcpy(Out->header->command, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_COMMAND, tmp1, Out)) die("could not set title", ""); // strcpy(Out->header->title,"displacement time series (mm)"); grdin = Out->data; for (i = 0; i < S; i++) { strcpy(outfile, "disp_"); for (k = 0; k < ydim; k++) { for (j = 0; j < xdim; j++) { // disp[i*xdim*ydim+j*ydim+k]=-79.58*wl*disp[i*xdim*ydim+j*ydim+k]; // //1000/4/pi grdin[j + k * xdim] = -79.58 * wl * disp[i * xdim * ydim + j * ydim + k]; } } sprintf(tmp1, "%07lld", L[i]); strcat(outfile, tmp1); strcat(outfile, ".grd"); sprintf(tmp1, "Displacement Time Series %03lld", i + 1); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "Displacement Time Series (mm)", Out)) die("could not set title", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, tmp1, Out)) die("could not set title", ""); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, outfile, Out)) { die("Failed to write output grid", outfile); } } save_grid = Out->data; /* Remember the original grid */ if (flag_rms == 1) { Out->data = res; sprintf(outfile, "rms.grd"); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "WRMS reduction from SBAS (mm)", Out)) die("could not set title", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "Weighed Root Mean Square of Fitting", Out)) die("could not set title", ""); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, outfile, Out)) { die("Failed to write output grid", outfile); } } if (flag_dem == 1) { Out->data = dem; sprintf(outfile, "dem.grd"); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "DEM error estimated from SBAS (m)", Out)) die("could not set title", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "Digital Elevation Model Error", Out)) die("could not set title", ""); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, outfile, Out)) { die("Failed to write output grid", outfile); } } if (n_atm != 0) { grdin = Out->data; for (i = 0; i < S; i++) { strcpy(outfile, "aps_"); for (k = 0; k < ydim; k++) { for (j = 0; j < xdim; j++) { grdin[j + k * xdim] = screen[i * xdim * ydim + j * ydim + k]; } } sprintf(tmp1, "%07lld", L[i]); strcat(outfile, tmp1); strcat(outfile, ".grd"); sprintf(tmp1, "Atmospheric Phase Screen %03lld", i + 1); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "Atmospheric Phase Screen", Out)) die("could not set title", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, tmp1, Out)) die("could not set title", ""); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, outfile, Out)) { die("Failed to write output grid", outfile); } } } Out->data = vel; sprintf(outfile, "vel.grd"); strcpy(Out->header->title, ""); strcpy(Out->header->remark, ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_REMARK, "Mean LOS velocity from SBAS (mm/yr)", Out)) die("could not set title", ""); if (GMT_Set_Comment(API, GMT_IS_GRID, GMT_COMMENT_IS_TITLE, "Mean Line-Of-Sight velocity from SBAS", Out)) die("could not set title", ""); if (GMT_Write_Data(API, GMT_IS_GRID, GMT_IS_FILE, GMT_IS_SURFACE, GMT_GRID_ALL, NULL, outfile, Out)) { die("Failed to write output grid", outfile); } Out->data = save_grid; /* Restore the pointer before destroying */ return (1); } int free_memory_ts(int64_t N, float *phi, float *var, char **gfile, char **cfile, float *disp, double *G, double *A, double *Gs, int64_t *H, double *d, double *ds, int64_t *L, float *res, float *vel, double *time, int64_t *flag, float *bperp, float *dem, double *work, int64_t *jpvt, int64_t *hit) { int64_t i; for (i = 0; i < N; i++) { free(gfile[i]); free(cfile[i]); } free(phi); free(var); free(gfile); free(cfile); free(disp); free(G); free(A); free(Gs); free(H); free(d); free(ds); free(L); free(res); free(vel); free(time); free(flag); free(bperp); free(dem); free(work); free(jpvt); free(hit); return (1); } int sum_intfs(float *phi, int64_t *mark, float *screen, int64_t xdim, int64_t ydim, int64_t N) { int64_t n, i, j, sum = 0; for (i = 0; i < N; i++) sum += llabs(mark[i]); // fprintf(stderr,"%lld sums ",sum); for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { screen[i * xdim + j] = 0.0; } } if (sum != 0) { for (n = 0; n < N; n++) { if (mark[n] == 0) continue; for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { screen[i * xdim + j] += -phi[n * xdim * ydim + i * xdim + j] * (float)mark[n] / (float)sum; } } } } return (1); } int connect(int64_t *L, int64_t *H, double *time, int64_t *hit, int64_t *mark, int64_t N, int64_t S, int64_t n, int64_t mode) { // mode = 0 for all connections, mode = 1 for even connections int64_t i, j; //,sum = 0; for (i = 0; i < N; i++) mark[i] = 0; for (i = 0; i < S; i++) { if (hit[i * S + n] == 1) { for (j = 0; j < N; j++) { if (L[i] == H[2 * j] && L[n] == H[2 * j + 1]) mark[j] = -1; } } if (hit[n * S + i] == 1) { for (j = 0; j < N; j++) { if (L[n] == H[2 * j] && L[i] == H[2 * j + 1]) mark[j] = 1; } } } /* trim the result */ if (mode == 1) { for (i = 0; i < S; i++) { if (hit[i * S + n] == 1) { for (j = n; j < S; j++) { if (hit[n * S + j] == 1 && fabs((time[n] - time[i]) - (time[j] - time[n])) < 5) break; } if (j == S) { for (j = 0; j < N; j++) if (L[i] == H[2 * j] && L[n] == H[2 * j + 1]) mark[j] = 0; } } if (hit[n * S + i] == 1) { for (j = 0; j < n; j++) { if (hit[j * S + n] == 1 && fabs((time[n] - time[j]) - (time[i] - time[n])) < 5) break; } if (j == n) { for (j = 0; j < N; j++) if (L[n] == H[2 * j] && L[i] == H[2 * j + 1]) mark[j] = 0; } } } } /* for (i=0;i 0) { j=N-1; while (j>=0 && mark[j] == 0) j--; if (j<0) die("incorrect process of trimming connection verctor",""); mark[j] = 0; sum -= 1; } if (sum < 0) { j=0; while (j=N) die("incorrect process of trimming connection verctor",""); mark[j] = 0; sum += 1; } } */ return (1); } double compute_noise(float *screen, int64_t xdim, int64_t ydim) { int64_t i, j, n; double sum = 0.0, rms = 0.0; n = 0; for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { if (isnan(screen[i * xdim + j]) == 0) { sum = sum + (double)screen[i * xdim + j]; n++; } } } if (sum != 0) { sum = sum / (double)n; for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { if (isnan(screen[i * xdim + j]) == 0) { rms = rms + ((double)screen[i * xdim + j] - sum) * ((double)screen[i * xdim + j] - sum); } } } rms = sqrt(rms / (double)n); } // fprintf(stderr,"num points calculated: %lld\n",n); return (rms); } int apply_screen(float *screen, float *phi, int64_t xdim, int64_t ydim, int64_t N, int64_t *mark) { // also correct for the ones not used in estimation of aps. int64_t i, j, n; for (n = 0; n < N; n++) { if (mark[n] != 0) { // fprintf(stderr,"applying atm screen to intf %lld...\n",n); for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { phi[n * xdim * ydim + i * xdim + j] = phi[n * xdim * ydim + i * xdim + j] + screen[i * xdim + j] * mark[n]; } } } } return (1); } int remove_ts(float *phi, float *ts, int64_t xdim, int64_t ydim, int64_t N, int64_t S, int64_t *H, int64_t *L) { int64_t i, j, n, h1, h2; for (n = 0; n < N; n++) { for (i = 0; i < S; i++) { if (H[2 * n] == L[i]) h1 = i; if (H[2 * n + 1] == L[i]) h2 = i; } // fprintf(stderr,"removing deformation for pair // %lld_%lld...\n",L[h1],L[h2]); for (i = 0; i < ydim; i++) { for (j = 0; j < xdim; j++) { phi[n * xdim * ydim + i * xdim + j] = phi[n * xdim * ydim + i * xdim + j] - ts[h2 * xdim * ydim + i * xdim + j] + ts[h1 * xdim * ydim + i * xdim + j]; } } } return (1); } int rank_double(double *nums, int64_t *seq, int64_t n) { // rank the numbers, seq will record the sequence int64_t i, j, recn, *mark; double *nums2, rec; nums2 = (double *)malloc(n * sizeof(double)); mark = (int64_t *)malloc(n * sizeof(int64_t)); for (i = 0; i < n; i++) nums2[i] = nums[i]; for (i = 0; i < n; i++) { if (nums2[i] == 0.0) mark[i] = 1; else mark[i] = 0; // fprintf(stderr,"%lld ",mark[i]); } // fprintf(stderr,"\n\n"); for (i = 0; i < n; i++) { rec = 0.0; for (j = 0; j < n; j++) { if (rec < fabs(nums2[j])) { rec = fabs(nums2[j]); recn = j; } } if (rec != 0.0) { seq[i] = recn; nums2[recn] = 0.0; } else { break; } } recn = 0; for (i = 0; i < n; i++) if (mark[i] != 0) recn++; for (i = 0; i < recn; i++) { for (j = 0; j < n; j++) { if (mark[j] != 0) { seq[n - recn + i] = j; mark[j] = 0; break; } } } return (1); } GMTSAR_V5.7/.svn/pristine/95/95e2b19f0082257b1cd5dbf1692902cb52e7ef16.svn-base000444 015705 000000 00000000541 13505462013 025534 0ustar00sandwellwheel000000 000000 % % matlab script to design a gaussian filter % for tsx after 4 x 2 decimation so the 0.5 gain % is att 100 km wavelength % clear sigx=3.; sigy=3.; nx=7; ny=7; x=((-nx/2:(nx/2-1))+.5)/sigx; y=((-ny/2:(ny/2-1))+.5)/sigy; x2=x.*x; y2=(y.*y)'; allx=ones(ny,1)*x2; ally=y2*ones(1,nx); r2=allx+ally; gauss=exp(-.5*r2); save gauss_tsx_100m -ascii gauss GMTSAR_V5.7/.svn/pristine/61/61386717cb4b3f6823d600e11ef42e0ab2245b30.svn-base000444 015705 000000 00000007217 13505462013 025345 0ustar00sandwellwheel000000 000000 # # This is an example configuration file for p2p_TSX.csh # # all the comments or explanations are marked by "#" # The parameters in this configuration file is distinguished by their first word so # user should follow the naming of each parameter. # the parameter name, "=" sign, parameter value should be separated by space " ". # leave the parameter value blank if using default value. # ##################### # processing stage # ##################### # 1 - start from preprocess # 2 - start from focus and align SLC images # 3 - start from make topo_ra # 4 - start from make and filter interferograms # 5 - start from unwrap phase # 6 - start from geocode proc_stage = 1 ################################## # parameters for preprocess # # - pre_proc.csh # ################################## # num of patches num_patches = # earth radius earth_radius = # near_range near_range = # Doppler centroid fd1 = ################################################ # parameters for focus and align SLC images # # - align.csh # ################################################ # ##################################### # parameters for make topo_ra # # - dem2topo_ra.csh # ##################################### # subtract topo_ra from the phase # (1 -- yes; 0 -- no) topo_phase = 1 # if above parameter = 1 then one should have put dem.grd in topo/ # topo_ra shift (1 -- yes; 0 -- no) shift_topo = 0 #################################################### # parameters for make and filter interferograms # # - intf.csh # # - filter.csh # #################################################### # switch the master and slave when doing intf. # put "1" if assume master as repeat and slave as reference # put "0" if assume master as reference and slave as repeat [Default] # phase = repeat phase - reference phase switch_master = 0 # set the filter wavelength in meters (default is 100m) # this is the wavelength where the filter has a gain of 0.5 # the images will be sampled at 1/4 wavelength or smaller filter_wavelength = 100 decimation of images # decimation control the size of the amplitude and phase images. It is either 1 or 2. # Set the decimation to be 1 if you want higher resolution images. # Set the decimation to be 2 if you want images with smaller file size. # dec_factor = 1 # # ##################################### # parameters for unwrap phase # # - snaphu.csh # ##################################### # correlation threshold for snaphu.csh (0~1) # set it to be 0 to skip unwrapping. threshold_snaphu = 0 # interpolate masked or low coherence pixels with their nearest neighbors, 1 means interpolate, # others or blank means using original phase, see snaphu.csh and snaphu_interp.csh for details # this could be very slow in case a large blank area exist near_interp = 1 # region to unwrap in radar coordinates (leave it blank if unwrap the whole region) # example 300/5900/0/25000 region_cut = # mask the wet region (Lakes/Oceans) before unwrapping (1 -- yes; else -- no) switch_land = 1 # # Allow phase discontinuity in unrapped phase. This is needed for interferograms having sharp phase jumps. # defo_max = 0 - used for smooth unwrapped phase such as interseismic deformation # defo_max = 65 - will allow a phase jump of 65 cycles or 1.82 m of deformation at C-band # defomax = 0 ##################################### # parameters for geocode # # - geocode.csh # ##################################### # correlation threshold for geocode.csh (0~1) threshold_geocode = .14